ngx-histaff-alpha 0.5.3 → 0.5.4

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.
@@ -10,8 +10,9 @@ import * as i0 from "@angular/core";
10
10
  import * as i1 from "../../services/dom.service";
11
11
  import * as i2 from "../../services/core-datetime.service";
12
12
  import * as i3 from "../../../services/multi-language.service";
13
- import * as i4 from "@angular/common";
14
- import * as i5 from "@angular/forms";
13
+ import * as i4 from "../../alert/alert.service";
14
+ import * as i5 from "@angular/common";
15
+ import * as i6 from "@angular/forms";
15
16
  /*
16
17
  this component renders its main part and popup part
17
18
  the main part deals with user input from physical keyboard or touch keyboard
@@ -24,12 +25,13 @@ import * as i5 from "@angular/forms";
24
25
 
25
26
  */
26
27
  export class CoreDatePickerComponent extends CoreFormControlBaseComponent {
27
- constructor(renderer, domService, coreDatetimeService, mls) {
28
+ constructor(renderer, domService, coreDatetimeService, mls, alertService) {
28
29
  super();
29
30
  this.renderer = renderer;
30
31
  this.domService = domService;
31
32
  this.coreDatetimeService = coreDatetimeService;
32
33
  this.mls = mls;
34
+ this.alertService = alertService;
33
35
  this.showPlaceholder = false;
34
36
  this.popupWidth = 300;
35
37
  this.popupXPadding = 12;
@@ -162,6 +164,11 @@ export class CoreDatePickerComponent extends CoreFormControlBaseComponent {
162
164
  this.markAsTouched();
163
165
  this.onChange(date);
164
166
  }
167
+ else {
168
+ this.markAsTouched();
169
+ this.onChange(null);
170
+ return;
171
+ }
165
172
  });
166
173
  }
167
174
  writeValue(obj) {
@@ -344,14 +351,14 @@ export class CoreDatePickerComponent extends CoreFormControlBaseComponent {
344
351
  this.yearPickerActive = false;
345
352
  this.monthPickerActive = true;
346
353
  }
347
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.2.3", ngImport: i0, type: CoreDatePickerComponent, deps: [{ token: i0.Renderer2 }, { token: i1.DomService }, { token: i2.CoreDatetimeService }, { token: i3.MultiLanguageService }], target: i0.ɵɵFactoryTarget.Component }); }
354
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.2.3", ngImport: i0, type: CoreDatePickerComponent, deps: [{ token: i0.Renderer2 }, { token: i1.DomService }, { token: i2.CoreDatetimeService }, { token: i3.MultiLanguageService }, { token: i4.AlertService }], target: i0.ɵɵFactoryTarget.Component }); }
348
355
  static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.2.3", type: CoreDatePickerComponent, isStandalone: true, selector: "core-date-picker", inputs: { enableTimeZoneConverter: "enableTimeZoneConverter", showPlaceholder: "showPlaceholder", popupWidth: "popupWidth", popupXPadding: "popupXPadding", rangeLimit: "rangeLimit", readonly: "readonly", disabled: "disabled" }, providers: [
349
356
  {
350
357
  provide: NG_VALUE_ACCESSOR,
351
358
  multi: true,
352
359
  useExisting: CoreDatePickerComponent
353
360
  }
354
- ], viewQueries: [{ propertyName: "container", first: true, predicate: ["container"], descendants: true }, { propertyName: "input", first: true, predicate: ["input"], descendants: true }, { propertyName: "backward", first: true, predicate: ["backward"], descendants: true }, { propertyName: "calendarBody", first: true, predicate: ["calendarBody"], descendants: true }], usesInheritance: true, ngImport: i0, template: "<div #container class=\"core-date-picker-container\">\r\n <input type=\"checkbox\" [(ngModel)]=\"openState\">\r\n <input type=\"checkbox\" [(ngModel)]=\"monthPickerActive\">\r\n <input type=\"checkbox\" [(ngModel)]=\"yearPickerActive\">\r\n <input #backward type=\"checkbox\" class=\"tl-datepicker-direction\">\r\n <input #input type=\"text\" class=\"form-control\" [placeholder]=\"showPlaceholder ? 'dd/mm/yyyy' : ''\"\r\n maxlength=\"10\" [(ngModel)]=\"textValue\" [class.form-control-disabled]=\"disabled\" [disabled]=\"disabled\"><label class=\"icon\" (click)=\"toggleOpen()\"></label>\r\n <div class=\"tl-date-picker-popup\" [class.open]=\"openState\">\r\n <div class=\"date-picker-session\" [class.d-none]=\"monthPickerActive || yearPickerActive\">\r\n <div class=\"navigator\">\r\n <label class=\"month-dropdown\" (click)=\"toggleMonthPickerActive()\">{{ currentMonthText }} {{\r\n currentMonthObject$.value.year }}</label>\r\n <div class=\"arrows\">\r\n <div class=\"go-up\" (click)=\"goBackward()\"></div>\r\n <div class=\"go-down\" (click)=\"goForeward()\"></div>\r\n </div>\r\n </div>\r\n <div class=\"weekday-header\">\r\n <ul>\r\n <li *ngFor=\"let day of headerWeekdays; let i = index\" [class.t7]=\"i===5\" [class.cn]=\"i===6\">\r\n <div>{{ day }}</div>\r\n </li>\r\n </ul>\r\n </div>\r\n <div class=\"calendar-body-container\">\r\n <div #calendarBody class=\"calendar-body\" [class.slide-up]=\"direction===1\"\r\n [class.slide-down]=\"direction===-1\">\r\n <ul *ngFor=\"let week of data\">\r\n <li *ngFor=\"let item of week.items; let i = index\">\r\n <div [class.out-of-month]=\"!!!item.currentMonth\" [class.t7]=\"i===5\" [class.cn]=\"i===6\"\r\n [class.out-of-range]=\"!!rangeLimit && !!!((item.dateValue>=rangeLimit.minDate) && (rangeLimit.maxDate>=item.dateValue))\"\r\n [class.active]=\"item.dateValue.getFullYear()===pendingYear && item.dateValue.getMonth()===pendingMonthIndex && item.dateValue.getDate()===pendingDay\"\r\n (click)=\"onItemClick(item.dateValue)\">\r\n {{ item.date }}</div>\r\n </li>\r\n </ul>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"month-picker-session\" [class.active]=\"monthPickerActive\">\r\n <core-month-picker [lang]=\"lang\" [monthObject$]=\"currentMonthObject$\" (onChange)=\"onMonthObjectChange($event)\" (onYearClick)=\"onMonthPickerYearClick($event)\"></core-month-picker>\r\n </div>\r\n <div class=\"year-picker-session\" [class.active]=\"yearPickerActive\">\r\n <core-year-picker [lang]=\"lang\" (onChange)=\"onYearPicked($event)\"></core-year-picker>\r\n </div>\r\n <div class=\"footer-wrapper\">\r\n <div class=\"cdp-footer\">\r\n <div class=\"clear\" [class.opacity-0]=\"!!!textValue\" (click)=\"clear()\">{{ 'UI.CORE_DATE_PICKER_CLEAR' | translate: lang }}</div>\r\n <div class=\"digi-watch\"></div>\r\n <div class=\"today\" (click)=\"goToday()\">{{ 'UI.CORE_DATE_PICKER_TODAY' | translate: lang }}</div>\r\n </div>\r\n </div>\r\n </div>\r\n</div>", styles: [".core-date-picker-container{--indicator-height: 39px;--popup-z-index: 99999999;--popup-width: 300px;--popup-height: 400px;--popup-bg-color: white;--popup-x-padding: 12px;--cell-size: 0px;--arrow-font-size: 28px;--font-size: 13px;--font-bold: 700;--font-light: 400;--hover-bg-color: #358ccb;--active-bg-color: cadetblue;--scroll-distance: calc(var(--cell-size) * 6);position:relative;font-weight:var(--font-light);font-size:var(--font-size)}.core-date-picker-container input[type=checkbox]{display:none}.core-date-picker-container label.icon{position:absolute;top:3px;right:3px}.core-date-picker-container label.icon:before{content:\"\";display:inline-block;aspect-ratio:1/1;width:var(--indicator-height);height:var(--indicator-height);border-radius:3px;background:url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMzkiIGhlaWdodD0iMzkiIHZpZXdCb3g9IjAgMCAzOSAzOSIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPHJlY3Qgd2lkdGg9IjM5IiBoZWlnaHQ9IjM5IiBmaWxsPSIjRjVGNUY1Ii8+CjxnIGNsaXAtcGF0aD0idXJsKCNjbGlwMF8wXzEpIj4KPHJlY3Qgd2lkdGg9IjE5MjAiIGhlaWdodD0iMTM5NyIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoLTEyNjggLTg0MikiIGZpbGw9IiNGMUYxRjEiLz4KPHJlY3QgeD0iLTEyNjgiIHk9Ii04NDIiIHdpZHRoPSIxOTIwIiBoZWlnaHQ9IjEzOTciIGZpbGw9ImJsYWNrIiBmaWxsLW9wYWNpdHk9IjAuMyIvPgo8cmVjdCB4PSItNjgyIiB5PSItNjU4IiB3aWR0aD0iNzUwIiBoZWlnaHQ9Ijk5OSIgcng9IjEwIiBmaWxsPSJ3aGl0ZSIvPgo8cmVjdCB4PSItMjkwLjUiIHk9Ii0yLjUiIHdpZHRoPSIzMzIiIGhlaWdodD0iNDQiIHJ4PSI0LjUiIGZpbGw9IndoaXRlIiBzdHJva2U9IiNEMUQxRDEiLz4KPHJlY3Qgd2lkdGg9IjM5IiBoZWlnaHQ9IjM5IiByeD0iMyIgZmlsbD0iI0U5RTlFOSIvPgo8cGF0aCBkPSJNMjYuOTAwMSAxMS4wOTkxSDEyLjE5OTdDMTEuMDM5OCAxMS4wOTkxIDEwLjA5OTYgMTIuMDM5MyAxMC4wOTk2IDEzLjE5OTJWMjcuODk5NkMxMC4wOTk2IDI5LjA1OTQgMTEuMDM5OCAyOS45OTk2IDEyLjE5OTcgMjkuOTk5NkgyNi45MDAxQzI4LjA1OTkgMjkuOTk5NiAyOS4wMDAxIDI5LjA1OTQgMjkuMDAwMSAyNy44OTk2VjEzLjE5OTJDMjkuMDAwMSAxMi4wMzkzIDI4LjA1OTkgMTEuMDk5MSAyNi45MDAxIDExLjA5OTFaIiBzdHJva2U9IiM4NDg0ODQiIHN0cm9rZS13aWR0aD0iMiIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIiBzdHJva2UtbGluZWpvaW49InJvdW5kIi8+CjxwYXRoIGQ9Ik0yMy43NTA1IDguOTk5NTFWMTMuMTk5NiIgc3Ryb2tlPSIjODQ4NDg0IiBzdHJva2Utd2lkdGg9IjIiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCIvPgo8cGF0aCBkPSJNMTUuMzQ5NiA4Ljk5OTUxVjEzLjE5OTYiIHN0cm9rZT0iIzg0ODQ4NCIgc3Ryb2tlLXdpZHRoPSIyIiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiLz4KPHBhdGggZD0iTTEwLjA5OTYgMTcuMzk5NEgyOS4wMDAxIiBzdHJva2U9IiM4NDg0ODQiIHN0cm9rZS13aWR0aD0iMiIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIiBzdHJva2UtbGluZWpvaW49InJvdW5kIi8+CjwvZz4KPGRlZnM+CjxjbGlwUGF0aCBpZD0iY2xpcDBfMF8xIj4KPHJlY3Qgd2lkdGg9IjE5MjAiIGhlaWdodD0iMTM5NyIgZmlsbD0id2hpdGUiIHRyYW5zZm9ybT0idHJhbnNsYXRlKC0xMjY4IC04NDIpIi8+CjwvY2xpcFBhdGg+CjwvZGVmcz4KPC9zdmc+Cg==) 0px 50% no-repeat;background-size:cover;cursor:pointer}.core-date-picker-container .tl-date-picker-popup{position:absolute;right:0;overflow:hidden;z-index:var(--popup-z-index);width:var(--popup-width);height:var(--popup-height);background-color:var(--popup-bg-color);box-shadow:var(--decoration-box-shadow);border-radius:3px;padding:0 12px;display:none}.core-date-picker-container .tl-date-picker-popup.open{display:block}.core-date-picker-container .month-picker-session,.core-date-picker-container .year-picker-session{display:none}.core-date-picker-container .month-picker-session.active,.core-date-picker-container .year-picker-session.active{display:block}.core-date-picker-container .date-picker-session.d-none{display:none}.core-date-picker-container .navigator{width:100%;display:flex;align-items:center;justify-content:space-between}.core-date-picker-container .month-dropdown{font-weight:var(--font-bold);cursor:pointer}.core-date-picker-container .arrows{display:flex;align-items:center;justify-content:flex-end}.core-date-picker-container .arrows>div{margin:0 2px}.core-date-picker-container .arrows>div:before{font-family:feather;font-size:var(--arrow-font-size);cursor:pointer}.core-date-picker-container .arrows>div:hover:before{background-color:var(--hover-bg-color)}.core-date-picker-container .go-up:before{content:\"\\e914\"}.core-date-picker-container .go-down:before{content:\"\\e90c\"}.core-date-picker-container ul{padding:0;margin:0}.core-date-picker-container ul{height:calc((var(--popup-width) - var(--popup-x-padding) * 2) / 7)}.core-date-picker-container ul>li{user-select:none;-webkit-user-select:none;position:relative;display:inline-block;width:var(--cell-size);height:var(--cell-size);cursor:pointer}.core-date-picker-container .calendar-body-container{width:100%;height:calc((var(--popup-width) - var(--popup-x-padding) * 2) / 7 * 6);position:absolute;z-index:1;background-color:var(--popup-bg-color);overflow:hidden}.core-date-picker-container .calendar-body>ul>li>div:hover{background-color:var(--hover-bg-color)}.core-date-picker-container .calendar-body>ul>li>div.active{background-color:var(--active-bg-color)}.core-date-picker-container .calendar-body>ul>li>div.out-of-month{color:#d3d3d3}.core-date-picker-container .calendar-body>ul>li>div.out-of-range{-webkit-user-select:none;user-select:none;cursor:default;opacity:.2!important}.core-date-picker-container .calendar-body>ul>li>div.out-of-range:hover{background-color:var(--popup-bg-color)}.core-date-picker-container ul>li>div{width:100%;height:calc((var(--popup-width) - var(--popup-x-padding) * 2) / 7);display:flex;align-items:center;justify-content:center;border-radius:5px}.core-date-picker-container .t7{color:#07b7ee}.core-date-picker-container .cn{color:#ef2b58}.core-date-picker-container .weekday-header{font-weight:var(--font-bold)}.core-date-picker-container .calendar-body{position:absolute;bottom:0}.core-date-picker-container .tl-datepicker-direction:checked~.tl-date-picker-popup>.calendar-body-container>.calendar-body{top:0}.core-date-picker-container .slide-up{animation:slide-up .25s linear}.core-date-picker-container .slide-down{animation:slide-down .25s linear}.core-date-picker-container .footer-wrapper{width:calc(var(--popup-width) - var(--popup-x-padding) * 2);position:absolute;bottom:var(--popup-x-padding);left:var(--popup-x-padding);background-color:var(--popup-bg-color)!important}.core-date-picker-container .cdp-footer{width:100%;display:flex;align-items:center;justify-content:space-between}.core-date-picker-container .today,.core-date-picker-container .clear{width:30%;height:var(--cell-size);border-radius:calc(var(--cell-size) / 2);color:#fff;cursor:pointer;display:flex;align-items:center;justify-content:center}.core-date-picker-container .today{background-color:#f37540}.core-date-picker-container .clear{background-color:brown}@keyframes slide-down{0%{top:calc(var(--scroll-distance) * -1)}to{top:0}}@keyframes slide-up{0%{top:0}to{top:calc(var(--scroll-distance) * -1)}}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i4.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i5.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: i5.CheckboxControlValueAccessor, selector: "input[type=checkbox][formControlName],input[type=checkbox][formControl],input[type=checkbox][ngModel]" }, { kind: "directive", type: i5.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i5.MaxLengthValidator, selector: "[maxlength][formControlName],[maxlength][formControl],[maxlength][ngModel]", inputs: ["maxlength"] }, { kind: "directive", type: i5.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: CoreYearPickerComponent, selector: "core-year-picker", inputs: ["id", "default"], outputs: ["onChange"] }, { kind: "component", type: CoreMonthPickerComponent, selector: "core-month-picker", inputs: ["id", "lang", "monthObject$"], outputs: ["onChange", "onYearClick"] }, { kind: "pipe", type: TranslatePipe, name: "translate" }] }); }
361
+ ], viewQueries: [{ propertyName: "container", first: true, predicate: ["container"], descendants: true }, { propertyName: "input", first: true, predicate: ["input"], descendants: true }, { propertyName: "backward", first: true, predicate: ["backward"], descendants: true }, { propertyName: "calendarBody", first: true, predicate: ["calendarBody"], descendants: true }], usesInheritance: true, ngImport: i0, template: "<div #container class=\"core-date-picker-container\">\r\n <input type=\"checkbox\" [(ngModel)]=\"openState\">\r\n <input type=\"checkbox\" [(ngModel)]=\"monthPickerActive\">\r\n <input type=\"checkbox\" [(ngModel)]=\"yearPickerActive\">\r\n <input #backward type=\"checkbox\" class=\"tl-datepicker-direction\">\r\n <input #input type=\"text\" class=\"form-control\" [placeholder]=\"showPlaceholder ? 'dd/mm/yyyy' : ''\"\r\n maxlength=\"10\" [(ngModel)]=\"textValue\" [class.form-control-disabled]=\"disabled\" [disabled]=\"disabled\"><label class=\"icon\" (click)=\"toggleOpen()\"></label>\r\n <div class=\"tl-date-picker-popup\" [class.open]=\"openState\">\r\n <div class=\"date-picker-session\" [class.d-none]=\"monthPickerActive || yearPickerActive\">\r\n <div class=\"navigator\">\r\n <label class=\"month-dropdown\" (click)=\"toggleMonthPickerActive()\">{{ currentMonthText }} {{\r\n currentMonthObject$.value.year }}</label>\r\n <div class=\"arrows\">\r\n <div class=\"go-up\" (click)=\"goBackward()\"></div>\r\n <div class=\"go-down\" (click)=\"goForeward()\"></div>\r\n </div>\r\n </div>\r\n <div class=\"weekday-header\">\r\n <ul>\r\n <li *ngFor=\"let day of headerWeekdays; let i = index\" [class.t7]=\"i===5\" [class.cn]=\"i===6\">\r\n <div>{{ day }}</div>\r\n </li>\r\n </ul>\r\n </div>\r\n <div class=\"calendar-body-container\">\r\n <div #calendarBody class=\"calendar-body\" [class.slide-up]=\"direction===1\"\r\n [class.slide-down]=\"direction===-1\">\r\n <ul *ngFor=\"let week of data\">\r\n <li *ngFor=\"let item of week.items; let i = index\">\r\n <div [class.out-of-month]=\"!!!item.currentMonth\" [class.t7]=\"i===5\" [class.cn]=\"i===6\"\r\n [class.out-of-range]=\"!!rangeLimit && !!!((item.dateValue>=rangeLimit.minDate) && (rangeLimit.maxDate>=item.dateValue))\"\r\n [class.active]=\"item.dateValue.getFullYear()===pendingYear && item.dateValue.getMonth()===pendingMonthIndex && item.dateValue.getDate()===pendingDay\"\r\n (click)=\"onItemClick(item.dateValue)\">\r\n {{ item.date }}</div>\r\n </li>\r\n </ul>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"month-picker-session\" [class.active]=\"monthPickerActive\">\r\n <core-month-picker [lang]=\"lang\" [monthObject$]=\"currentMonthObject$\" (onChange)=\"onMonthObjectChange($event)\" (onYearClick)=\"onMonthPickerYearClick($event)\"></core-month-picker>\r\n </div>\r\n <div class=\"year-picker-session\" [class.active]=\"yearPickerActive\">\r\n <core-year-picker [lang]=\"lang\" (onChange)=\"onYearPicked($event)\"></core-year-picker>\r\n </div>\r\n <div class=\"footer-wrapper\">\r\n <div class=\"cdp-footer\">\r\n <div class=\"clear\" [class.opacity-0]=\"!!!textValue\" (click)=\"clear()\">{{ 'UI.CORE_DATE_PICKER_CLEAR' | translate: lang }}</div>\r\n <div class=\"digi-watch\"></div>\r\n <div class=\"today\" (click)=\"goToday()\">{{ 'UI.CORE_DATE_PICKER_TODAY' | translate: lang }}</div>\r\n </div>\r\n </div>\r\n </div>\r\n</div>", styles: [".core-date-picker-container{--indicator-height: 39px;--popup-z-index: 99999999;--popup-width: 300px;--popup-height: 400px;--popup-bg-color: white;--popup-x-padding: 12px;--cell-size: 0px;--arrow-font-size: 28px;--font-size: 13px;--font-bold: 700;--font-light: 400;--hover-bg-color: #358ccb;--active-bg-color: cadetblue;--scroll-distance: calc(var(--cell-size) * 6);position:relative;font-weight:var(--font-light);font-size:var(--font-size)}.core-date-picker-container input[type=checkbox]{display:none}.core-date-picker-container label.icon{position:absolute;top:3px;right:3px}.core-date-picker-container label.icon:before{content:\"\";display:inline-block;aspect-ratio:1/1;width:var(--indicator-height);height:var(--indicator-height);border-radius:3px;background:url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMzkiIGhlaWdodD0iMzkiIHZpZXdCb3g9IjAgMCAzOSAzOSIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPHJlY3Qgd2lkdGg9IjM5IiBoZWlnaHQ9IjM5IiBmaWxsPSIjRjVGNUY1Ii8+CjxnIGNsaXAtcGF0aD0idXJsKCNjbGlwMF8wXzEpIj4KPHJlY3Qgd2lkdGg9IjE5MjAiIGhlaWdodD0iMTM5NyIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoLTEyNjggLTg0MikiIGZpbGw9IiNGMUYxRjEiLz4KPHJlY3QgeD0iLTEyNjgiIHk9Ii04NDIiIHdpZHRoPSIxOTIwIiBoZWlnaHQ9IjEzOTciIGZpbGw9ImJsYWNrIiBmaWxsLW9wYWNpdHk9IjAuMyIvPgo8cmVjdCB4PSItNjgyIiB5PSItNjU4IiB3aWR0aD0iNzUwIiBoZWlnaHQ9Ijk5OSIgcng9IjEwIiBmaWxsPSJ3aGl0ZSIvPgo8cmVjdCB4PSItMjkwLjUiIHk9Ii0yLjUiIHdpZHRoPSIzMzIiIGhlaWdodD0iNDQiIHJ4PSI0LjUiIGZpbGw9IndoaXRlIiBzdHJva2U9IiNEMUQxRDEiLz4KPHJlY3Qgd2lkdGg9IjM5IiBoZWlnaHQ9IjM5IiByeD0iMyIgZmlsbD0iI0U5RTlFOSIvPgo8cGF0aCBkPSJNMjYuOTAwMSAxMS4wOTkxSDEyLjE5OTdDMTEuMDM5OCAxMS4wOTkxIDEwLjA5OTYgMTIuMDM5MyAxMC4wOTk2IDEzLjE5OTJWMjcuODk5NkMxMC4wOTk2IDI5LjA1OTQgMTEuMDM5OCAyOS45OTk2IDEyLjE5OTcgMjkuOTk5NkgyNi45MDAxQzI4LjA1OTkgMjkuOTk5NiAyOS4wMDAxIDI5LjA1OTQgMjkuMDAwMSAyNy44OTk2VjEzLjE5OTJDMjkuMDAwMSAxMi4wMzkzIDI4LjA1OTkgMTEuMDk5MSAyNi45MDAxIDExLjA5OTFaIiBzdHJva2U9IiM4NDg0ODQiIHN0cm9rZS13aWR0aD0iMiIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIiBzdHJva2UtbGluZWpvaW49InJvdW5kIi8+CjxwYXRoIGQ9Ik0yMy43NTA1IDguOTk5NTFWMTMuMTk5NiIgc3Ryb2tlPSIjODQ4NDg0IiBzdHJva2Utd2lkdGg9IjIiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCIvPgo8cGF0aCBkPSJNMTUuMzQ5NiA4Ljk5OTUxVjEzLjE5OTYiIHN0cm9rZT0iIzg0ODQ4NCIgc3Ryb2tlLXdpZHRoPSIyIiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiLz4KPHBhdGggZD0iTTEwLjA5OTYgMTcuMzk5NEgyOS4wMDAxIiBzdHJva2U9IiM4NDg0ODQiIHN0cm9rZS13aWR0aD0iMiIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIiBzdHJva2UtbGluZWpvaW49InJvdW5kIi8+CjwvZz4KPGRlZnM+CjxjbGlwUGF0aCBpZD0iY2xpcDBfMF8xIj4KPHJlY3Qgd2lkdGg9IjE5MjAiIGhlaWdodD0iMTM5NyIgZmlsbD0id2hpdGUiIHRyYW5zZm9ybT0idHJhbnNsYXRlKC0xMjY4IC04NDIpIi8+CjwvY2xpcFBhdGg+CjwvZGVmcz4KPC9zdmc+Cg==) 0px 50% no-repeat;background-size:cover;cursor:pointer}.core-date-picker-container .tl-date-picker-popup{position:absolute;right:0;overflow:hidden;z-index:var(--popup-z-index);width:var(--popup-width);height:var(--popup-height);background-color:var(--popup-bg-color);box-shadow:var(--decoration-box-shadow);border-radius:3px;padding:0 12px;display:none}.core-date-picker-container .tl-date-picker-popup.open{display:block}.core-date-picker-container .month-picker-session,.core-date-picker-container .year-picker-session{display:none}.core-date-picker-container .month-picker-session.active,.core-date-picker-container .year-picker-session.active{display:block}.core-date-picker-container .date-picker-session.d-none{display:none}.core-date-picker-container .navigator{width:100%;display:flex;align-items:center;justify-content:space-between}.core-date-picker-container .month-dropdown{font-weight:var(--font-bold);cursor:pointer}.core-date-picker-container .arrows{display:flex;align-items:center;justify-content:flex-end}.core-date-picker-container .arrows>div{margin:0 2px}.core-date-picker-container .arrows>div:before{font-family:feather;font-size:var(--arrow-font-size);cursor:pointer}.core-date-picker-container .arrows>div:hover:before{background-color:var(--hover-bg-color)}.core-date-picker-container .go-up:before{content:\"\\e914\"}.core-date-picker-container .go-down:before{content:\"\\e90c\"}.core-date-picker-container ul{padding:0;margin:0}.core-date-picker-container ul{height:calc((var(--popup-width) - var(--popup-x-padding) * 2) / 7)}.core-date-picker-container ul>li{user-select:none;-webkit-user-select:none;position:relative;display:inline-block;width:var(--cell-size);height:var(--cell-size);cursor:pointer}.core-date-picker-container .calendar-body-container{width:100%;height:calc((var(--popup-width) - var(--popup-x-padding) * 2) / 7 * 6);position:absolute;z-index:1;background-color:var(--popup-bg-color);overflow:hidden}.core-date-picker-container .calendar-body>ul>li>div:hover{background-color:var(--hover-bg-color)}.core-date-picker-container .calendar-body>ul>li>div.active{background-color:var(--active-bg-color)}.core-date-picker-container .calendar-body>ul>li>div.out-of-month{color:#d3d3d3}.core-date-picker-container .calendar-body>ul>li>div.out-of-range{-webkit-user-select:none;user-select:none;cursor:default;opacity:.2!important}.core-date-picker-container .calendar-body>ul>li>div.out-of-range:hover{background-color:var(--popup-bg-color)}.core-date-picker-container ul>li>div{width:100%;height:calc((var(--popup-width) - var(--popup-x-padding) * 2) / 7);display:flex;align-items:center;justify-content:center;border-radius:5px}.core-date-picker-container .t7{color:#07b7ee}.core-date-picker-container .cn{color:#ef2b58}.core-date-picker-container .weekday-header{font-weight:var(--font-bold)}.core-date-picker-container .calendar-body{position:absolute;bottom:0}.core-date-picker-container .tl-datepicker-direction:checked~.tl-date-picker-popup>.calendar-body-container>.calendar-body{top:0}.core-date-picker-container .slide-up{animation:slide-up .25s linear}.core-date-picker-container .slide-down{animation:slide-down .25s linear}.core-date-picker-container .footer-wrapper{width:calc(var(--popup-width) - var(--popup-x-padding) * 2);position:absolute;bottom:var(--popup-x-padding);left:var(--popup-x-padding);background-color:var(--popup-bg-color)!important}.core-date-picker-container .cdp-footer{width:100%;display:flex;align-items:center;justify-content:space-between}.core-date-picker-container .today,.core-date-picker-container .clear{width:30%;height:var(--cell-size);border-radius:calc(var(--cell-size) / 2);color:#fff;cursor:pointer;display:flex;align-items:center;justify-content:center}.core-date-picker-container .today{background-color:#f37540}.core-date-picker-container .clear{background-color:brown}@keyframes slide-down{0%{top:calc(var(--scroll-distance) * -1)}to{top:0}}@keyframes slide-up{0%{top:0}to{top:calc(var(--scroll-distance) * -1)}}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i5.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i6.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: i6.CheckboxControlValueAccessor, selector: "input[type=checkbox][formControlName],input[type=checkbox][formControl],input[type=checkbox][ngModel]" }, { kind: "directive", type: i6.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i6.MaxLengthValidator, selector: "[maxlength][formControlName],[maxlength][formControl],[maxlength][ngModel]", inputs: ["maxlength"] }, { kind: "directive", type: i6.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: CoreYearPickerComponent, selector: "core-year-picker", inputs: ["id", "default"], outputs: ["onChange"] }, { kind: "component", type: CoreMonthPickerComponent, selector: "core-month-picker", inputs: ["id", "lang", "monthObject$"], outputs: ["onChange", "onYearClick"] }, { kind: "pipe", type: TranslatePipe, name: "translate" }] }); }
355
362
  }
356
363
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.3", ngImport: i0, type: CoreDatePickerComponent, decorators: [{
357
364
  type: Component,
@@ -368,7 +375,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.3", ngImpor
368
375
  useExisting: CoreDatePickerComponent
369
376
  }
370
377
  ], template: "<div #container class=\"core-date-picker-container\">\r\n <input type=\"checkbox\" [(ngModel)]=\"openState\">\r\n <input type=\"checkbox\" [(ngModel)]=\"monthPickerActive\">\r\n <input type=\"checkbox\" [(ngModel)]=\"yearPickerActive\">\r\n <input #backward type=\"checkbox\" class=\"tl-datepicker-direction\">\r\n <input #input type=\"text\" class=\"form-control\" [placeholder]=\"showPlaceholder ? 'dd/mm/yyyy' : ''\"\r\n maxlength=\"10\" [(ngModel)]=\"textValue\" [class.form-control-disabled]=\"disabled\" [disabled]=\"disabled\"><label class=\"icon\" (click)=\"toggleOpen()\"></label>\r\n <div class=\"tl-date-picker-popup\" [class.open]=\"openState\">\r\n <div class=\"date-picker-session\" [class.d-none]=\"monthPickerActive || yearPickerActive\">\r\n <div class=\"navigator\">\r\n <label class=\"month-dropdown\" (click)=\"toggleMonthPickerActive()\">{{ currentMonthText }} {{\r\n currentMonthObject$.value.year }}</label>\r\n <div class=\"arrows\">\r\n <div class=\"go-up\" (click)=\"goBackward()\"></div>\r\n <div class=\"go-down\" (click)=\"goForeward()\"></div>\r\n </div>\r\n </div>\r\n <div class=\"weekday-header\">\r\n <ul>\r\n <li *ngFor=\"let day of headerWeekdays; let i = index\" [class.t7]=\"i===5\" [class.cn]=\"i===6\">\r\n <div>{{ day }}</div>\r\n </li>\r\n </ul>\r\n </div>\r\n <div class=\"calendar-body-container\">\r\n <div #calendarBody class=\"calendar-body\" [class.slide-up]=\"direction===1\"\r\n [class.slide-down]=\"direction===-1\">\r\n <ul *ngFor=\"let week of data\">\r\n <li *ngFor=\"let item of week.items; let i = index\">\r\n <div [class.out-of-month]=\"!!!item.currentMonth\" [class.t7]=\"i===5\" [class.cn]=\"i===6\"\r\n [class.out-of-range]=\"!!rangeLimit && !!!((item.dateValue>=rangeLimit.minDate) && (rangeLimit.maxDate>=item.dateValue))\"\r\n [class.active]=\"item.dateValue.getFullYear()===pendingYear && item.dateValue.getMonth()===pendingMonthIndex && item.dateValue.getDate()===pendingDay\"\r\n (click)=\"onItemClick(item.dateValue)\">\r\n {{ item.date }}</div>\r\n </li>\r\n </ul>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"month-picker-session\" [class.active]=\"monthPickerActive\">\r\n <core-month-picker [lang]=\"lang\" [monthObject$]=\"currentMonthObject$\" (onChange)=\"onMonthObjectChange($event)\" (onYearClick)=\"onMonthPickerYearClick($event)\"></core-month-picker>\r\n </div>\r\n <div class=\"year-picker-session\" [class.active]=\"yearPickerActive\">\r\n <core-year-picker [lang]=\"lang\" (onChange)=\"onYearPicked($event)\"></core-year-picker>\r\n </div>\r\n <div class=\"footer-wrapper\">\r\n <div class=\"cdp-footer\">\r\n <div class=\"clear\" [class.opacity-0]=\"!!!textValue\" (click)=\"clear()\">{{ 'UI.CORE_DATE_PICKER_CLEAR' | translate: lang }}</div>\r\n <div class=\"digi-watch\"></div>\r\n <div class=\"today\" (click)=\"goToday()\">{{ 'UI.CORE_DATE_PICKER_TODAY' | translate: lang }}</div>\r\n </div>\r\n </div>\r\n </div>\r\n</div>", styles: [".core-date-picker-container{--indicator-height: 39px;--popup-z-index: 99999999;--popup-width: 300px;--popup-height: 400px;--popup-bg-color: white;--popup-x-padding: 12px;--cell-size: 0px;--arrow-font-size: 28px;--font-size: 13px;--font-bold: 700;--font-light: 400;--hover-bg-color: #358ccb;--active-bg-color: cadetblue;--scroll-distance: calc(var(--cell-size) * 6);position:relative;font-weight:var(--font-light);font-size:var(--font-size)}.core-date-picker-container input[type=checkbox]{display:none}.core-date-picker-container label.icon{position:absolute;top:3px;right:3px}.core-date-picker-container label.icon:before{content:\"\";display:inline-block;aspect-ratio:1/1;width:var(--indicator-height);height:var(--indicator-height);border-radius:3px;background:url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMzkiIGhlaWdodD0iMzkiIHZpZXdCb3g9IjAgMCAzOSAzOSIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPHJlY3Qgd2lkdGg9IjM5IiBoZWlnaHQ9IjM5IiBmaWxsPSIjRjVGNUY1Ii8+CjxnIGNsaXAtcGF0aD0idXJsKCNjbGlwMF8wXzEpIj4KPHJlY3Qgd2lkdGg9IjE5MjAiIGhlaWdodD0iMTM5NyIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoLTEyNjggLTg0MikiIGZpbGw9IiNGMUYxRjEiLz4KPHJlY3QgeD0iLTEyNjgiIHk9Ii04NDIiIHdpZHRoPSIxOTIwIiBoZWlnaHQ9IjEzOTciIGZpbGw9ImJsYWNrIiBmaWxsLW9wYWNpdHk9IjAuMyIvPgo8cmVjdCB4PSItNjgyIiB5PSItNjU4IiB3aWR0aD0iNzUwIiBoZWlnaHQ9Ijk5OSIgcng9IjEwIiBmaWxsPSJ3aGl0ZSIvPgo8cmVjdCB4PSItMjkwLjUiIHk9Ii0yLjUiIHdpZHRoPSIzMzIiIGhlaWdodD0iNDQiIHJ4PSI0LjUiIGZpbGw9IndoaXRlIiBzdHJva2U9IiNEMUQxRDEiLz4KPHJlY3Qgd2lkdGg9IjM5IiBoZWlnaHQ9IjM5IiByeD0iMyIgZmlsbD0iI0U5RTlFOSIvPgo8cGF0aCBkPSJNMjYuOTAwMSAxMS4wOTkxSDEyLjE5OTdDMTEuMDM5OCAxMS4wOTkxIDEwLjA5OTYgMTIuMDM5MyAxMC4wOTk2IDEzLjE5OTJWMjcuODk5NkMxMC4wOTk2IDI5LjA1OTQgMTEuMDM5OCAyOS45OTk2IDEyLjE5OTcgMjkuOTk5NkgyNi45MDAxQzI4LjA1OTkgMjkuOTk5NiAyOS4wMDAxIDI5LjA1OTQgMjkuMDAwMSAyNy44OTk2VjEzLjE5OTJDMjkuMDAwMSAxMi4wMzkzIDI4LjA1OTkgMTEuMDk5MSAyNi45MDAxIDExLjA5OTFaIiBzdHJva2U9IiM4NDg0ODQiIHN0cm9rZS13aWR0aD0iMiIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIiBzdHJva2UtbGluZWpvaW49InJvdW5kIi8+CjxwYXRoIGQ9Ik0yMy43NTA1IDguOTk5NTFWMTMuMTk5NiIgc3Ryb2tlPSIjODQ4NDg0IiBzdHJva2Utd2lkdGg9IjIiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCIvPgo8cGF0aCBkPSJNMTUuMzQ5NiA4Ljk5OTUxVjEzLjE5OTYiIHN0cm9rZT0iIzg0ODQ4NCIgc3Ryb2tlLXdpZHRoPSIyIiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiLz4KPHBhdGggZD0iTTEwLjA5OTYgMTcuMzk5NEgyOS4wMDAxIiBzdHJva2U9IiM4NDg0ODQiIHN0cm9rZS13aWR0aD0iMiIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIiBzdHJva2UtbGluZWpvaW49InJvdW5kIi8+CjwvZz4KPGRlZnM+CjxjbGlwUGF0aCBpZD0iY2xpcDBfMF8xIj4KPHJlY3Qgd2lkdGg9IjE5MjAiIGhlaWdodD0iMTM5NyIgZmlsbD0id2hpdGUiIHRyYW5zZm9ybT0idHJhbnNsYXRlKC0xMjY4IC04NDIpIi8+CjwvY2xpcFBhdGg+CjwvZGVmcz4KPC9zdmc+Cg==) 0px 50% no-repeat;background-size:cover;cursor:pointer}.core-date-picker-container .tl-date-picker-popup{position:absolute;right:0;overflow:hidden;z-index:var(--popup-z-index);width:var(--popup-width);height:var(--popup-height);background-color:var(--popup-bg-color);box-shadow:var(--decoration-box-shadow);border-radius:3px;padding:0 12px;display:none}.core-date-picker-container .tl-date-picker-popup.open{display:block}.core-date-picker-container .month-picker-session,.core-date-picker-container .year-picker-session{display:none}.core-date-picker-container .month-picker-session.active,.core-date-picker-container .year-picker-session.active{display:block}.core-date-picker-container .date-picker-session.d-none{display:none}.core-date-picker-container .navigator{width:100%;display:flex;align-items:center;justify-content:space-between}.core-date-picker-container .month-dropdown{font-weight:var(--font-bold);cursor:pointer}.core-date-picker-container .arrows{display:flex;align-items:center;justify-content:flex-end}.core-date-picker-container .arrows>div{margin:0 2px}.core-date-picker-container .arrows>div:before{font-family:feather;font-size:var(--arrow-font-size);cursor:pointer}.core-date-picker-container .arrows>div:hover:before{background-color:var(--hover-bg-color)}.core-date-picker-container .go-up:before{content:\"\\e914\"}.core-date-picker-container .go-down:before{content:\"\\e90c\"}.core-date-picker-container ul{padding:0;margin:0}.core-date-picker-container ul{height:calc((var(--popup-width) - var(--popup-x-padding) * 2) / 7)}.core-date-picker-container ul>li{user-select:none;-webkit-user-select:none;position:relative;display:inline-block;width:var(--cell-size);height:var(--cell-size);cursor:pointer}.core-date-picker-container .calendar-body-container{width:100%;height:calc((var(--popup-width) - var(--popup-x-padding) * 2) / 7 * 6);position:absolute;z-index:1;background-color:var(--popup-bg-color);overflow:hidden}.core-date-picker-container .calendar-body>ul>li>div:hover{background-color:var(--hover-bg-color)}.core-date-picker-container .calendar-body>ul>li>div.active{background-color:var(--active-bg-color)}.core-date-picker-container .calendar-body>ul>li>div.out-of-month{color:#d3d3d3}.core-date-picker-container .calendar-body>ul>li>div.out-of-range{-webkit-user-select:none;user-select:none;cursor:default;opacity:.2!important}.core-date-picker-container .calendar-body>ul>li>div.out-of-range:hover{background-color:var(--popup-bg-color)}.core-date-picker-container ul>li>div{width:100%;height:calc((var(--popup-width) - var(--popup-x-padding) * 2) / 7);display:flex;align-items:center;justify-content:center;border-radius:5px}.core-date-picker-container .t7{color:#07b7ee}.core-date-picker-container .cn{color:#ef2b58}.core-date-picker-container .weekday-header{font-weight:var(--font-bold)}.core-date-picker-container .calendar-body{position:absolute;bottom:0}.core-date-picker-container .tl-datepicker-direction:checked~.tl-date-picker-popup>.calendar-body-container>.calendar-body{top:0}.core-date-picker-container .slide-up{animation:slide-up .25s linear}.core-date-picker-container .slide-down{animation:slide-down .25s linear}.core-date-picker-container .footer-wrapper{width:calc(var(--popup-width) - var(--popup-x-padding) * 2);position:absolute;bottom:var(--popup-x-padding);left:var(--popup-x-padding);background-color:var(--popup-bg-color)!important}.core-date-picker-container .cdp-footer{width:100%;display:flex;align-items:center;justify-content:space-between}.core-date-picker-container .today,.core-date-picker-container .clear{width:30%;height:var(--cell-size);border-radius:calc(var(--cell-size) / 2);color:#fff;cursor:pointer;display:flex;align-items:center;justify-content:center}.core-date-picker-container .today{background-color:#f37540}.core-date-picker-container .clear{background-color:brown}@keyframes slide-down{0%{top:calc(var(--scroll-distance) * -1)}to{top:0}}@keyframes slide-up{0%{top:0}to{top:calc(var(--scroll-distance) * -1)}}\n"] }]
371
- }], ctorParameters: () => [{ type: i0.Renderer2 }, { type: i1.DomService }, { type: i2.CoreDatetimeService }, { type: i3.MultiLanguageService }], propDecorators: { enableTimeZoneConverter: [{
378
+ }], ctorParameters: () => [{ type: i0.Renderer2 }, { type: i1.DomService }, { type: i2.CoreDatetimeService }, { type: i3.MultiLanguageService }, { type: i4.AlertService }], propDecorators: { enableTimeZoneConverter: [{
372
379
  type: Input
373
380
  }], showPlaceholder: [{
374
381
  type: Input
@@ -395,4 +402,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.3", ngImpor
395
402
  type: ViewChild,
396
403
  args: ['calendarBody']
397
404
  }] } });
398
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29yZS1kYXRlLXBpY2tlci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtaGlzdGFmZi1hbHBoYS9zcmMvbGliL2FwcC9saWJyYXJpZXMvY29yZS1kYXRlLXBpY2tlci9jb3JlLWRhdGUtcGlja2VyL2NvcmUtZGF0ZS1waWNrZXIuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LWhpc3RhZmYtYWxwaGEvc3JjL2xpYi9hcHAvbGlicmFyaWVzL2NvcmUtZGF0ZS1waWNrZXIvY29yZS1kYXRlLXBpY2tlci9jb3JlLWRhdGUtcGlja2VyLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQWdELFNBQVMsRUFBRSxLQUFLLEVBQWEsTUFBTSxlQUFlLENBQUM7QUFDckgsT0FBTyxFQUFFLFdBQVcsRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ2hFLE9BQU8sRUFBRSxlQUFlLEVBQTRCLG9CQUFvQixFQUFFLFNBQVMsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUVsRyxPQUFPLEVBQUUsNEJBQTRCLEVBQUUsTUFBTSwrREFBK0QsQ0FBQztBQUc3RyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sb0VBQW9FLENBQUM7QUFDN0csT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLG1DQUFtQyxDQUFDO0FBQ2xFLE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLHVFQUF1RSxDQUFDOzs7Ozs7O0FBNEJqSDs7Ozs7Ozs7OztFQVVFO0FBQ0YsTUFBTSxPQUFPLHVCQUF3QixTQUFRLDRCQUE0QjtJQWlEdkUsWUFDbUIsUUFBbUIsRUFDbkIsVUFBc0IsRUFDdEIsbUJBQXdDLEVBQ2pELEdBQXlC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QUMxQixLQUFLLEVBQUUsSUFBSTs0QkFDWCxXQUFXLHlCQUF5Qjt5QkFDckM7cUJBQ0Y7NEtBZVEsdUJBQXVCO3NCQUEvQixLQUFLO2dCQUNHLGVBQWU7c0JBQXZCLEtBQUs7Z0JBQ0csVUFBVTtzQkFBbEIsS0FBSztnQkFDRyxhQUFhO3NCQUFyQixLQUFLO2dCQUNHLFVBQVU7c0JBQWxCLEtBQUs7Z0JBQ1ksUUFBUTtzQkFBekIsS0FBSztnQkFDWSxRQUFRO3NCQUF6QixLQUFLO2dCQWlDa0IsU0FBUztzQkFBaEMsU0FBUzt1QkFBQyxXQUFXO2dCQUNGLEtBQUs7c0JBQXhCLFNBQVM7dUJBQUMsT0FBTztnQkFDSyxRQUFRO3NCQUE5QixTQUFTO3VCQUFDLFVBQVU7Z0JBQ00sWUFBWTtzQkFBdEMsU0FBUzt1QkFBQyxjQUFjIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBFbGVtZW50UmVmLCBPbkluaXQsIE9uRGVzdHJveSwgQWZ0ZXJWaWV3SW5pdCwgVmlld0NoaWxkLCBJbnB1dCwgUmVuZGVyZXIyIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IEZvcm1zTW9kdWxlLCBOR19WQUxVRV9BQ0NFU1NPUiB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBPYnNlcnZhYmxlLCBTdWJzY3JpcHRpb24sIGRpc3RpbmN0VW50aWxDaGFuZ2VkLCBmcm9tRXZlbnQgfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgRG9tU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2RvbS5zZXJ2aWNlJztcclxuaW1wb3J0IHsgQ29yZUZvcm1Db250cm9sQmFzZUNvbXBvbmVudCB9IGZyb20gJy4uLy4uL2NvcmUtZm9ybS1jb250cm9sLWJhc2UvY29yZS1mb3JtLWNvbnRyb2wtYmFzZS5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBDb3JlRGF0ZXRpbWVTZXJ2aWNlLCBJRGF0YVJvdywgSU1vbnRoSWRlbnRpdHkgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9jb3JlLWRhdGV0aW1lLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBNdWx0aUxhbmd1YWdlU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL211bHRpLWxhbmd1YWdlLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xyXG5pbXBvcnQgeyBDb3JlWWVhclBpY2tlckNvbXBvbmVudCB9IGZyb20gJy4uLy4uL2NvcmUteWVhci1waWNrZXIvY29yZS15ZWFyLXBpY2tlci9jb3JlLXllYXItcGlja2VyLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IFRyYW5zbGF0ZVBpcGUgfSBmcm9tICcuLi8uLi8uLi9hcHAtcGlwZXMvdHJhbnNsYXRlLnBpcGUnO1xyXG5pbXBvcnQgeyBDb3JlTW9udGhQaWNrZXJDb21wb25lbnQgfSBmcm9tICcuLi8uLi9jb3JlLW1vbnRoLXBpY2tlci9jb3JlLW1vbnRoLXBpY2tlci9jb3JlLW1vbnRoLXBpY2tlci5jb21wb25lbnQnO1xyXG5cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgSUNvcmVEYXRlUGlja2VyUmFuZ2Uge1xyXG4gIG1pbkRhdGU6IERhdGU7XHJcbiAgbWF4RGF0ZTogRGF0ZTtcclxufVxyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdjb3JlLWRhdGUtcGlja2VyJyxcclxuICBzdGFuZGFsb25lOiB0cnVlLFxyXG4gIGltcG9ydHM6IFtcclxuICAgIENvbW1vbk1vZHVsZSxcclxuICAgIEZvcm1zTW9kdWxlLFxyXG4gICAgQ29yZVllYXJQaWNrZXJDb21wb25lbnQsXHJcbiAgICBDb3JlTW9udGhQaWNrZXJDb21wb25lbnQsXHJcbiAgICBUcmFuc2xhdGVQaXBlLFxyXG4gIF0sXHJcbiAgdGVtcGxhdGVVcmw6ICcuL2NvcmUtZGF0ZS1waWNrZXIuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL2NvcmUtZGF0ZS1waWNrZXIuY29tcG9uZW50LnNjc3MnXSxcclxuICBwcm92aWRlcnM6IFtcclxuICAgIHtcclxuICAgICAgcHJvdmlkZTogTkdfVkFMVUVfQUNDRVNTT1IsXHJcbiAgICAgIG11bHRpOiB0cnVlLFxyXG4gICAgICB1c2VFeGlzdGluZzogQ29yZURhdGVQaWNrZXJDb21wb25lbnRcclxuICAgIH1cclxuICBdXHJcbn0pXHJcbi8qXHJcbiAgdGhpcyBjb21wb25lbnQgcmVuZGVycyBpdHMgbWFpbiBwYXJ0IGFuZCBwb3B1cCBwYXJ0XHJcbiAgdGhlIG1haW4gcGFydCBkZWFscyB3aXRoIHVzZXIgaW5wdXQgZnJvbSBwaHlzaWNhbCBrZXlib2FyZCBvciB0b3VjaCBrZXlib2FyZFxyXG4gIHRoZSBwb3B1cCBwYXJ0IGNvbnNpc3RzIG9mIDEpIG5hdmlnYXRvciAyKSBoZWFkZXIgMykgY2FsZW5kYXIgYm9keSBjb250YWluZXIgNCkgY2FsZW5kYXIgYm9keVxyXG4gIHRoZSBtb3N0IGltcG9ydGFudCBwYXJ0IG9mIHRoZW0gaXM6XHJcbiAgICA0KSBjYWxlbmRhciBib2R5OlxyXG4gICAgICBkdWUgdmFyaWF0aW9ucyB0aGUgY2FsZW5kYXIgYm9keSBtYXkgcmVhY2ggdG8gNiByb3dzIG9mIHdlZWsgZGF5IHN1Yi1hcnJheVxyXG4gICAgLSBmb3IgdmlzdWFsLCBsb2dpYyBhbmQgY29kaW5nIHNpbXBsaWNpdHkgSSB3aWxsIGFsd2F5cyByZW5kZXIgYWxsIHRoZSA2IHJvd3NcclxuICAgIHNvIGNhbGVuZGFyIGJvZHkgZGltZW5zaW9uIHN0YXlzIHVuY2hhbmdlZFxyXG4gIFxyXG4qL1xyXG5leHBvcnQgY2xhc3MgQ29yZURhdGVQaWNrZXJDb21wb25lbnQgZXh0ZW5kcyBDb3JlRm9ybUNvbnRyb2xCYXNlQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBBZnRlclZpZXdJbml0LCBPbkRlc3Ryb3kge1xyXG5cclxuICBASW5wdXQoKSBlbmFibGVUaW1lWm9uZUNvbnZlcnRlciE6IGJvb2xlYW47XHJcbiAgQElucHV0KCkgc2hvd1BsYWNlaG9sZGVyOiBib29sZWFuID0gZmFsc2U7XHJcbiAgQElucHV0KCkgcG9wdXBXaWR0aDogbnVtYmVyID0gMzAwO1xyXG4gIEBJbnB1dCgpIHBvcHVwWFBhZGRpbmc6IG51bWJlciA9IDEyO1xyXG4gIEBJbnB1dCgpIHJhbmdlTGltaXQhOiBJQ29yZURhdGVQaWNrZXJSYW5nZTtcclxuICBASW5wdXQoKSBvdmVycmlkZSByZWFkb25seSE6IGJvb2xlYW47XHJcbiAgQElucHV0KCkgb3ZlcnJpZGUgZGlzYWJsZWQhOiBib29sZWFuO1xyXG5cclxuXHJcbiAgbGlzdGVuZXJGbiE6ICgpID0+IHZvaWQ7XHJcblxyXG4gIGxhbmchOiBzdHJpbmc7XHJcbiAgc3Vic2NyaXB0aW9uczogU3Vic2NyaXB0aW9uW10gPSBbXTtcclxuICBvcGVuU3RhdGU6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBtb250aFBpY2tlckFjdGl2ZTogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIHllYXJQaWNrZXJBY3RpdmU6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgY2VsbFNpemU6IG51bWJlciA9ICh0aGlzLnBvcHVwV2lkdGggLSB0aGlzLnBvcHVwWFBhZGRpbmcgKiAyKSAvIDc7XHJcblxyXG4gIG92ZXJyaWRlIHZhbHVlITogRGF0ZSB8IG51bGw7XHJcbiAgcGVuZGluZ1llYXIhOiBudW1iZXI7XHJcbiAgcGVuZGluZ01vbnRoSW5kZXghOiBudW1iZXI7XHJcbiAgcGVuZGluZ0RheTogbnVtYmVyID0gdGhpcy52YWx1ZT8uZ2V0RGF0ZSgpITtcclxuXHJcbiAgY3VycmVudE1vbnRoT2JqZWN0JCE6IEJlaGF2aW9yU3ViamVjdDxJTW9udGhJZGVudGl0eT47XHJcbiAgbmV3RGF0ZSE6IERhdGU7XHJcblxyXG4gIGN1cnJlbnRNb250aFRleHQhOiBzdHJpbmc7XHJcbiAgY3VycmVudEhvdXJzITogbnVtYmVyO1xyXG4gIGN1cnJlbnRNaW51dGVzITogbnVtYmVyO1xyXG4gIGN1cnJlbnRTZWNvbmRzITogbnVtYmVyO1xyXG4gIGN1cnJlbnRNaWxsaXNlY29uZHMhOiBudW1iZXI7XHJcblxyXG4gIGRhdGEhOiBJRGF0YVJvd1tdO1xyXG4gIGhlYWRlcldlZWtkYXlzITogc3RyaW5nW107XHJcbiAgZGlyZWN0aW9uOiBudW1iZXIgPSAxOyAvLyBzdGFydHVwIGRpcmVjdGlvbiAxIHwgLTFcclxuXHJcbiAgdGV4dFZhbHVlOiBzdHJpbmcgPSAnJztcclxuXHJcbiAgQFZpZXdDaGlsZCgnY29udGFpbmVyJykgY29udGFpbmVyITogRWxlbWVudFJlZjtcclxuICBAVmlld0NoaWxkKCdpbnB1dCcpIGlucHV0ITogRWxlbWVudFJlZjtcclxuICBAVmlld0NoaWxkKCdiYWNrd2FyZCcpIGJhY2t3YXJkITogRWxlbWVudFJlZjtcclxuICBAVmlld0NoaWxkKCdjYWxlbmRhckJvZHknKSBjYWxlbmRhckJvZHkhOiBFbGVtZW50UmVmO1xyXG5cclxuICBpbnB1dFN0cmVhbSQhOiBPYnNlcnZhYmxlPGFueT47XHJcbiAgbGFzdFRleHQhOiBzdHJpbmc7XHJcblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHJpdmF0ZSByZWFkb25seSByZW5kZXJlcjogUmVuZGVyZXIyLFxyXG4gICAgcHJpdmF0ZSByZWFkb25seSBkb21TZXJ2aWNlOiBEb21TZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSByZWFkb25seSBjb3JlRGF0ZXRpbWVTZXJ2aWNlOiBDb3JlRGF0ZXRpbWVTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBtbHM6IE11bHRpTGFuZ3VhZ2VTZXJ2aWNlXHJcbiAgKSB7XHJcbiAgICBzdXBlcigpO1xyXG4gIH1cclxuXHJcbiAgbmdPbkluaXQoKTogdm9pZCB7XHJcblxyXG4gICAgdGhpcy5uZXdEYXRlID0gISF0aGlzLnJhbmdlTGltaXQgPyB0aGlzLnJhbmdlTGltaXQubWluRGF0ZSA6IG5ldyBEYXRlKCk7XHJcbiAgICB0aGlzLmN1cnJlbnRNb250aE9iamVjdCQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PElNb250aElkZW50aXR5Pih7XHJcbiAgICAgIHllYXI6IHRoaXMudmFsdWU/LmdldEZ1bGxZZWFyKCkgfHwgdGhpcy5uZXdEYXRlLmdldEZ1bGxZZWFyKCksXHJcbiAgICAgIG1vbnRoSW5kZXg6IHRoaXMudmFsdWU/LmdldE1vbnRoKCkgfHwgdGhpcy5uZXdEYXRlLmdldE1vbnRoKClcclxuICAgIH0pO1xyXG5cclxuICAgIGlmICghIXRoaXMuZGlzYWJsZWQpIHRoaXMucmVhZG9ubHkgPSB0cnVlO1xyXG5cclxuICAgIGlmICghISF0aGlzLnZhbHVlKSB7XHJcbiAgICAgIHRoaXMudmFsdWUgPSB0aGlzLm5ld0RhdGU7XHJcbiAgICAgIHRoaXMubGFzdFRleHQgPSB0aGlzLmNvcmVEYXRldGltZVNlcnZpY2UuZGF0ZVRvVm5TdHJpbmcodGhpcy52YWx1ZSlcclxuICAgIH1cclxuICAgICAgXHJcbiAgICB0aGlzLnBlbmRpbmdZZWFyID0gdGhpcy52YWx1ZS5nZXRGdWxsWWVhcigpO1xyXG4gICAgdGhpcy5wZW5kaW5nTW9udGhJbmRleCA9IHRoaXMudmFsdWUuZ2V0TW9udGgoKTtcclxuICAgIHRoaXMucGVuZGluZ0RheSA9IHRoaXMudmFsdWUuZ2V0RGF0ZSgpO1xyXG4gICAgdGhpcy5jdXJyZW50SG91cnMgPSB0aGlzLnZhbHVlLmdldEhvdXJzKCk7XHJcbiAgICB0aGlzLmN1cnJlbnRNaW51dGVzID0gdGhpcy52YWx1ZS5nZXRNaW51dGVzKCk7XHJcbiAgICB0aGlzLmN1cnJlbnRTZWNvbmRzID0gdGhpcy52YWx1ZS5nZXRTZWNvbmRzKCk7XHJcbiAgICB0aGlzLmN1cnJlbnRNaWxsaXNlY29uZHMgPSB0aGlzLnZhbHVlLmdldE1pbGxpc2Vjb25kcygpO1xyXG5cclxuICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKFxyXG4gICAgICB0aGlzLm1scy5sYW5nJC5zdWJzY3JpYmUoeCA9PiB0aGlzLmxhbmcgPSB4KVxyXG4gICAgKVxyXG5cclxuICAgIC8qXHJcbiAgICBpZiAoISEhdGhpcy5pZCkge1xyXG4gICAgICBjb25zb2xlLmVycm9yKGBcclxuICAgICAgd2l0aGluIGEgcGFnZSwgdGFubGVpY2EtZGF0ZS1waWNrZXIgbmVlZHMgYW4gdW5pcXVlIHByb3BlcnR5IGlkIHZhbHVlIHRvIHdvcmsgY29ycmVjdGx5XHJcbiAgICAgIGZvciBleGFtcGxlOiA8dGFubGVpY2EtZGF0ZS1waWNrZXIgaWQ9XCJzdGFydERhdGVcIiBmb3JtQ29udHJvbE5hbWU9XCJzdGFydERhdGVcIj48L3RhbmxlaWNhLWRhdGUtcGlja2VyPlxyXG4gICAgICBgKVxyXG4gICAgfVxyXG4gICAgKi9cclxuICAgIHRoaXMuaGVhZGVyV2Vla2RheXMgPSB0aGlzLmNvcmVEYXRldGltZVNlcnZpY2UuZ2V0U2hvcnRXZWVrZGF5cyh0aGlzLmxhbmcpO1xyXG4gIH1cclxuXHJcbiAgLypcclxuICAgIHRyaWdnZXIgYW5pbWF0aW9uIGJ5IHJlZmxvdyB0aGUgRE9NXHJcbiAgKi9cclxuICB0cmlnZ2VyUmVmbG93KCkge1xyXG4gICAgY29uc3QgZWwgPSB0aGlzLmNhbGVuZGFyQm9keS5uYXRpdmVFbGVtZW50O1xyXG4gICAgLy9ET00gbWFuaXB1bGF0aW9uXHJcbiAgICBpZiAodGhpcy5kaXJlY3Rpb24gPT09IDEpIHtcclxuICAgICAgZWwuY2xhc3NMaXN0LnJlbW92ZShcInNsaWRlLXVwXCIpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgZWwuY2xhc3NMaXN0LnJlbW92ZShcInNsaWRlLWRvd25cIik7XHJcbiAgICB9XHJcbiAgICBlbC5vZmZzZXRIZWlnaHQ7ICAvKiB0cmlnZ2VyIHJlZmxvdyAoYWx0ZXJuYXRpdmU6IGVsLm9mZnNldFdpZHRoKSAqL1xyXG4gICAgaWYgKHRoaXMuZGlyZWN0aW9uID09PSAxKSB7XHJcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4gZWwuY2xhc3NMaXN0LmFkZChcInNsaWRlLXVwXCIpLCAwKTsgLy8gcGFzcyB0aGUgY2FsbGJhY2sgdG8gQ2FsbGJhY2sgcXVldWUgdGhyb3VnaCBXZWJBUElzLCBzbyBpdCB3aWxsIGJlIGV4ZWN1dGVkIGFmdGVyIERPTSBtYW5pcHVsYXRpb24gZW5kc1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgc2V0VGltZW91dCgoKSA9PiBlbC5jbGFzc0xpc3QuYWRkKFwic2xpZGUtZG93blwiKSwgMCk7IC8vIHBhc3MgdGhlIGNhbGxiYWNrIHRvIENhbGxiYWNrIHF1ZXVlIHRocm91Z2ggV2ViQVBJcywgc28gaXQgd2lsbCBiZSBleGVjdXRlZCBhZnRlciBET00gbWFuaXB1bGF0aW9uIGVuZHNcclxuICAgIH1cclxuICB9XHJcblxyXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcclxuXHJcbiAgICAvKlxyXG4gICAgICBUaGlzIGV2ZW50cyBnZXQgY2FsbGVkIGJ5IGFsbCBjbGlja3Mgb24gdGhlIHBhZ2VcclxuICAgICovXHJcbiAgICB0aGlzLmxpc3RlbmVyRm4gPSB0aGlzLnJlbmRlcmVyLmxpc3Rlbignd2luZG93JywgJ2NsaWNrJywgKGU6IEV2ZW50KSA9PiB7XHJcbiAgICAgIC8qXHJcbiAgICAgICAgaGFuZGxlIGNsaWNrIG91dHNpZGVcclxuICAgICAgKi9cclxuICAgICAgaWYgKHRoaXMuY29udGFpbmVyICYmICEhIXRoaXMuY29udGFpbmVyLm5hdGl2ZUVsZW1lbnQuY29udGFpbnMoZS50YXJnZXQpKSB7XHJcbiAgICAgICAgdGhpcy5vcGVuU3RhdGUgPSBmYWxzZTtcclxuICAgICAgfVxyXG4gICAgfSlcclxuXHJcbiAgICBjb25zdCBtYXhaSW5kZXggPSB0aGlzLmRvbVNlcnZpY2UuZ2V0TWF4WkluZGV4KCk7XHJcblxyXG4gICAgdGhpcy5jb250YWluZXIubmF0aXZlRWxlbWVudC5zdHlsZS5zZXRQcm9wZXJ0eSgnLS1pbmRpY2F0b3ItaGVpZ2h0JywgKHRoaXMuaW5wdXQubmF0aXZlRWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5oZWlnaHQgLSA2KSArICdweCcpXHJcbiAgICB0aGlzLmNvbnRhaW5lci5uYXRpdmVFbGVtZW50LnN0eWxlLnNldFByb3BlcnR5KCctLXBvcHVwLXotaW5kZXgnLCBtYXhaSW5kZXgpO1xyXG4gICAgdGhpcy5jb250YWluZXIubmF0aXZlRWxlbWVudC5zdHlsZS5zZXRQcm9wZXJ0eSgnLS1jZWxsLXNpemUnLCB0aGlzLmNlbGxTaXplICsgJ3B4JylcclxuXHJcbiAgICB0aGlzLmN1cnJlbnRNb250aE9iamVjdCQucGlwZShcclxuICAgICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKVxyXG4gICAgKS5zdWJzY3JpYmUodmFsdWUgPT4ge1xyXG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICB0aGlzLmN1cnJlbnRNb250aFRleHQgPSB0aGlzLmNvcmVEYXRldGltZVNlcnZpY2UuZ2V0TW9udGhUZXh0KHRoaXMubGFuZywgdmFsdWUubW9udGhJbmRleCk7XHJcbiAgICAgICAgY29uc29sZS5sb2coXCJSZWJ1aWxkaW5nLi4uLlwiKVxyXG4gICAgICAgIHRoaXMuYnVpbGRCb2R5KHZhbHVlLnllYXIsIHZhbHVlLm1vbnRoSW5kZXgpO1xyXG4gICAgICAgIHRoaXMudHJpZ2dlclJlZmxvdygpO1xyXG4gICAgICB9LCAwKVxyXG4gICAgfSlcclxuXHJcbiAgICB0aGlzLmlucHV0U3RyZWFtJCA9IGZyb21FdmVudCh0aGlzLmlucHV0Lm5hdGl2ZUVsZW1lbnQsICdpbnB1dCcpO1xyXG4gICAgdGhpcy5pbnB1dFN0cmVhbSQuc3Vic2NyaWJlKGV2ZW50ID0+IHtcclxuXHJcbiAgICAgIGlmICggZXZlbnQuaW5wdXRUeXBlICE9PSAnZGVsZXRlQ29udGVudEJhY2t3YXJkJyBcclxuICAgICAgICAmJiAnIzAjMSMyIzMjNCM1IzYjNyM4IzkjQmFja3NwYWNlI0RlbGV0ZScuaW5kZXhPZignIycgKyBldmVudC5kYXRhKSA8IDApIFxyXG4gICAgICB7XHJcbiAgICAgICAgZXZlbnQudGFyZ2V0LnZhbHVlID0gdGhpcy5sYXN0VGV4dDtcclxuICAgICAgICB0aGlzLm1hcmtBc1RvdWNoZWQoKTtcclxuICAgICAgICB0aGlzLm9uQ2hhbmdlKG51bGwpO1xyXG4gICAgICAgIHJldHVybjtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLmxhc3RUZXh0ID0gZXZlbnQudGFyZ2V0LnZhbHVlXHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHZhciB2ID0gZXZlbnQudGFyZ2V0LnZhbHVlO1xyXG4gICAgICBpZiAodi5tYXRjaCgvXlxcZHsyfSQvKSAhPT0gbnVsbCkge1xyXG4gICAgICAgIGV2ZW50LnRhcmdldC52YWx1ZSA9IHYgKyAnLyc7XHJcbiAgICAgICAgdGhpcy50ZXh0VmFsdWUgPSB2ICsgJy8nO1xyXG4gICAgICB9IGVsc2UgaWYgKHYubWF0Y2goL15cXGR7Mn1cXC9cXGR7Mn0kLykgIT09IG51bGwpIHtcclxuICAgICAgICBldmVudC50YXJnZXQudmFsdWUgPSB2ICsgJy8nO1xyXG4gICAgICAgIHRoaXMudGV4dFZhbHVlID0gdiArICcvJztcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLnRleHRWYWx1ZSA9IHY7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmICh0aGlzLnRleHRWYWx1ZS5sZW5ndGggPT09IDEwKSB7XHJcbiAgICAgICAgY29uc3QgZGlnaXRzID0gdGhpcy50ZXh0VmFsdWUuc3BsaXQoJy8nKTtcclxuICAgICAgICBjb25zdCB5ID0gTnVtYmVyKGRpZ2l0c1syXSk7XHJcbiAgICAgICAgY29uc3QgbSA9IE51bWJlcihkaWdpdHNbMV0pIC0gMTtcclxuICAgICAgICBjb25zdCBkID0gTnVtYmVyKGRpZ2l0c1swXSk7XHJcblxyXG4gICAgICAgIGlmICh5IDw9IDAgfHwgbSA8IDAgfHwgbSA+IDExIHx8IGQgPCAxIHx8IGQgPiAzMSkge1xyXG4gICAgICAgICAgZXZlbnQudGFyZ2V0LnZhbHVlID0gJyc7XHJcbiAgICAgICAgICB0aGlzLnRleHRWYWx1ZSA9ICcnO1xyXG4gICAgICAgICAgdGhpcy5tYXJrQXNUb3VjaGVkKCk7XHJcbiAgICAgICAgICB0aGlzLm9uQ2hhbmdlKG51bGwpO1xyXG4gICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY29uc3Qgbm93ID0gbmV3IERhdGUoKTtcclxuICAgICAgICBjb25zdCBociA9IG5vdy5nZXRIb3VycygpO1xyXG4gICAgICAgIGNvbnN0IG1uID0gbm93LmdldE1pbnV0ZXMoKTtcclxuICAgICAgICBjb25zdCBzZCA9IG5vdy5nZXRTZWNvbmRzKCk7XHJcbiAgICAgICAgY29uc3QgbXMgPSBub3cuZ2V0TWlsbGlzZWNvbmRzKCk7XHJcblxyXG4gICAgICAgIGNvbnN0IGRhdGUgPSBuZXcgRGF0ZShOdW1iZXIoZGlnaXRzWzJdKSwgTnVtYmVyKGRpZ2l0c1sxXSkgLSAxLCBOdW1iZXIoZGlnaXRzWzBdKSwgaHIsIG1uLCBzZCwgbXMpO1xyXG4gICAgICAgIGV2ZW50LnRhcmdldC52YWx1ZSA9IHRoaXMuY29yZURhdGV0aW1lU2VydmljZS5kYXRlVG9WblN0cmluZyhkYXRlKTtcclxuICAgICAgICB0aGlzLm1hcmtBc1RvdWNoZWQoKTtcclxuICAgICAgICB0aGlzLm9uQ2hhbmdlKGRhdGUpO1xyXG5cclxuICAgICAgfVxyXG4gICAgfSlcclxuXHJcbiAgfVxyXG5cclxuICBvdmVycmlkZSB3cml0ZVZhbHVlKG9iajogRGF0ZSB8IG51bGwpOiB2b2lkIHtcclxuICAgIGNvbnNvbGUubG9nKFwiVVRDIERhdGUgXCIsIG9iaik7XHJcblxyXG4gICAgY29uc3QgdXBkYXRlUHJvcGVydGllcyA9ICh2YWx1ZTogRGF0ZSkgPT4ge1xyXG4gICAgICBjb25zb2xlLmxvZyhcIkFmdGVyIGNvbnZlcnQgdG8gTG9jYWwgRGF0ZSBcIiwgdmFsdWUpO1xyXG4gICAgICB0aGlzLnZhbHVlID0gdmFsdWU7XHJcbiAgICAgIHRoaXMubGFzdFRleHQgPSB0aGlzLmNvcmVEYXRldGltZVNlcnZpY2UuZGF0ZVRvVm5TdHJpbmcodmFsdWUpXHJcbiAgICAgIHRoaXMudGV4dFZhbHVlID0gdGhpcy5jb3JlRGF0ZXRpbWVTZXJ2aWNlLmRhdGVUb1ZuU3RyaW5nKHZhbHVlKTtcclxuICAgICAgdGhpcy5jdXJyZW50TW9udGhPYmplY3QkLm5leHQoe1xyXG4gICAgICAgIHllYXI6IHZhbHVlLmdldEZ1bGxZZWFyKCksXHJcbiAgICAgICAgbW9udGhJbmRleDogdmFsdWUuZ2V0TW9udGgoKVxyXG4gICAgICB9KVxyXG4gICAgICB0aGlzLmN1cnJlbnRIb3VycyA9IHZhbHVlLmdldEhvdXJzKCk7XHJcbiAgICAgIHRoaXMuY3VycmVudE1pbnV0ZXMgPSB2YWx1ZS5nZXRNaW51dGVzKCk7XHJcbiAgICAgIHRoaXMuY3VycmVudFNlY29uZHMgPSB2YWx1ZS5nZXRTZWNvbmRzKCk7XHJcbiAgICAgIHRoaXMuY3VycmVudE1pbGxpc2Vjb25kcyA9IHZhbHVlLmdldE1pbGxpc2Vjb25kcygpO1xyXG5cclxuICAgICAgdGhpcy5jdXJyZW50TW9udGhUZXh0ID0gdGhpcy5jb3JlRGF0ZXRpbWVTZXJ2aWNlLmdldE1vbnRoVGV4dCh0aGlzLmxhbmcsIHRoaXMuY3VycmVudE1vbnRoT2JqZWN0JC52YWx1ZS5tb250aEluZGV4KTtcclxuICAgICAgdGhpcy5wZW5kaW5nWWVhciA9IHZhbHVlLmdldEZ1bGxZZWFyKCk7XHJcbiAgICAgIHRoaXMucGVuZGluZ01vbnRoSW5kZXggPSB2YWx1ZS5nZXRNb250aCgpO1xyXG4gICAgICB0aGlzLnBlbmRpbmdEYXkgPSB2YWx1ZS5nZXREYXRlKCk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKG9iaiA9PT0gbnVsbCB8fCBvYmogPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICBsZXQgbm93ID0gbmV3IERhdGUoKTtcclxuICAgICAgaWYgKCEhdGhpcy5yYW5nZUxpbWl0KSB7XHJcbiAgICAgICAgbm93ID0gdGhpcy5yYW5nZUxpbWl0Lm1pbkRhdGU7XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy50ZXh0VmFsdWUgPSAnJztcclxuICAgICAgdGhpcy5jdXJyZW50TW9udGhPYmplY3QkLm5leHQoe1xyXG4gICAgICAgIHllYXI6IG5vdy5nZXRGdWxsWWVhcigpLFxyXG4gICAgICAgIG1vbnRoSW5kZXg6IG5vdy5nZXRNb250aCgpXHJcbiAgICAgIH0pXHJcbiAgICAgIHRoaXMuY3VycmVudEhvdXJzID0gbm93LmdldEhvdXJzKCk7XHJcbiAgICAgIHRoaXMuY3VycmVudE1pbnV0ZXMgPSBub3cuZ2V0TWludXRlcygpO1xyXG4gICAgICB0aGlzLmN1cnJlbnRTZWNvbmRzID0gbm93LmdldFNlY29uZHMoKTtcclxuICAgICAgdGhpcy5jdXJyZW50TWlsbGlzZWNvbmRzID0gbm93LmdldE1pbGxpc2Vjb25kcygpO1xyXG4gICAgICB0aGlzLmN1cnJlbnRNb250aFRleHQgPSB0aGlzLmNvcmVEYXRldGltZVNlcnZpY2UuZ2V0TW9udGhUZXh0KHRoaXMubGFuZywgdGhpcy5jdXJyZW50TW9udGhPYmplY3QkLnZhbHVlLm1vbnRoSW5kZXgpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgLyogQ29udmVydCBVVEMgZGF0ZSB0byBsb2NhbCBkYXRlICovXHJcbiAgICAgIGNvbnN0IG9yaWdpbmFsRGF0ZTogRGF0ZSA9IG5ldyBEYXRlKG9iaik7XHJcbiAgICAgIGNvbnN0IG9mZnNldCA9IChuZXcgRGF0ZSgpKS5nZXRUaW1lem9uZU9mZnNldCgpO1xyXG4gICAgICBjb25zdCBkYXRlVmFsdWUgPSBuZXcgRGF0ZShvcmlnaW5hbERhdGUuZ2V0VGltZSgpIC0gb2Zmc2V0ICogNjAwMDApO1xyXG4gICAgICAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi9cclxuICAgICAgaWYgKHR5cGVvZiBvYmohLmdldEZ1bGxZZWFyID09PSAnZnVuY3Rpb24nKSB7XHJcbiAgICAgICAgdXBkYXRlUHJvcGVydGllcyhkYXRlVmFsdWUpO1xyXG4gICAgICB9IGVsc2UgaWYgKHR5cGVvZiBvYmogPT09ICdzdHJpbmcnKSB7XHJcbiAgICAgICAgY29uc3QgaXNEYXRlID0gdGhpcy5jb3JlRGF0ZXRpbWVTZXJ2aWNlLmlzRGF0ZVN0cmluZyhvYmopO1xyXG4gICAgICAgIGlmIChpc0RhdGUpIHtcclxuICAgICAgICAgIC8vY29uc3QgX29iaiA9IG5ldyBEYXRlKG9iaik7IC8vIGNvbnZlcnQgc3RyaW5nIHRvIGRhdGUgXHJcbiAgICAgICAgICB1cGRhdGVQcm9wZXJ0aWVzKGRhdGVWYWx1ZSk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXCJJbnZhbGlkIGRhdGUgaW5wdXQ6IFwiLCBvYmopO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgY29uc29sZS5lcnJvcihcIkludmFsaWQgZGF0ZSBpbnB1dDogXCIsIG9iaik7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIG9uSXRlbUNsaWNrKGRhdGU6IERhdGUpIHtcclxuXHJcbiAgICBpZiAodGhpcy5yZWFkb25seSkgcmV0dXJuO1xyXG5cclxuICAgIGlmICghIXRoaXMucmFuZ2VMaW1pdCkge1xyXG4gICAgICBpZiAoZGF0ZSA8IHRoaXMucmFuZ2VMaW1pdC5taW5EYXRlIHx8IGRhdGUgPiB0aGlzLnJhbmdlTGltaXQubWF4RGF0ZSkgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IG5vdyA9IG5ldyBEYXRlKCk7XHJcbiAgICBjb25zdCBoID0gbm93LmdldEhvdXJzKCk7XHJcbiAgICBjb25zdCBtID0gbm93LmdldE1pbnV0ZXMoKTtcclxuICAgIGNvbnN0IHMgPSBub3cuZ2V0U2Vjb25kcygpO1xyXG4gICAgY29uc3QgbXMgPSBub3cuZ2V0TWlsbGlzZWNvbmRzKCk7XHJcbiAgICBkYXRlLnNldEhvdXJzKGgpO1xyXG4gICAgZGF0ZS5zZXRNaW51dGVzKG0pO1xyXG4gICAgZGF0ZS5zZXRTZWNvbmRzKHMpO1xyXG4gICAgZGF0ZS5zZXRNaWxsaXNlY29uZHMobXMpO1xyXG4gICAgdGhpcy50ZXh0VmFsdWUgPSB0aGlzLmNvcmVEYXRldGltZVNlcnZpY2UuZGF0ZVRvVm5TdHJpbmcoZGF0ZSk7XHJcblxyXG4gICAgdGhpcy5wZW5kaW5nWWVhciA9IGRhdGUuZ2V0RnVsbFllYXIoKTtcclxuICAgIHRoaXMucGVuZGluZ01vbnRoSW5kZXggPSBkYXRlLmdldE1vbnRoKCk7XHJcbiAgICB0aGlzLnBlbmRpbmdEYXkgPSBkYXRlLmdldERhdGUoKTtcclxuXHJcbiAgICB0aGlzLm1hcmtBc1RvdWNoZWQoKTtcclxuICAgIFxyXG4gICAgdGhpcy5vbkNoYW5nZShkYXRlKTtcclxuICAgIHRoaXMub3BlblN0YXRlID0gZmFsc2U7XHJcbiAgfVxyXG5cclxuICBnb1RvZGF5KCkge1xyXG4gICAgY29uc3QgdG9kYXkgPSBuZXcgRGF0ZSgpO1xyXG4gICAgaWYgKCEhdGhpcy5yYW5nZUxpbWl0KSB7XHJcbiAgICAgIGlmICh0b2RheSA8IHRoaXMucmFuZ2VMaW1pdC5taW5EYXRlIHx8IHRvZGF5ID4gdGhpcy5yYW5nZUxpbWl0Lm1heERhdGUpIHJldHVybjtcclxuICAgIH1cclxuICAgIHRoaXMudGV4dFZhbHVlID0gdGhpcy5jb3JlRGF0ZXRpbWVTZXJ2aWNlLmRhdGVUb1ZuU3RyaW5nKHRvZGF5KTtcclxuICAgIHRoaXMubWFya0FzVG91Y2hlZCgpO1xyXG4gICAgdGhpcy5vbkNoYW5nZSh0b2RheSk7XHJcbiAgICB0aGlzLm9wZW5TdGF0ZSA9IGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgY2xlYXIoKSB7XHJcbiAgICB0aGlzLnRleHRWYWx1ZSA9ICcnO1xyXG4gICAgdGhpcy52YWx1ZSA9IG51bGw7XHJcbiAgICB0aGlzLmxhc3RUZXh0ID0gJyc7XHJcbiAgICB0aGlzLm1hcmtBc1RvdWNoZWQoKTtcclxuICAgIHRoaXMub25DaGFuZ2UobnVsbCk7XHJcbiAgICB0aGlzLm9wZW5TdGF0ZSA9IGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgZ29CYWNrd2FyZCgpIHtcclxuICAgIHRoaXMuZGlyZWN0aW9uID0gLTE7XHJcbiAgICB0aGlzLmJhY2t3YXJkLm5hdGl2ZUVsZW1lbnQuY2hlY2tlZCA9IHRydWU7XHJcbiAgICBpZiAodGhpcy5jdXJyZW50TW9udGhPYmplY3QkLnZhbHVlLm1vbnRoSW5kZXggPT09IDApIHtcclxuICAgICAgdGhpcy5jdXJyZW50TW9udGhPYmplY3QkLm5leHQoe1xyXG4gICAgICAgIHllYXI6IHRoaXMuY3VycmVudE1vbnRoT2JqZWN0JC52YWx1ZS55ZWFyIC0gMSxcclxuICAgICAgICBtb250aEluZGV4OiAxMVxyXG4gICAgICB9KTtcclxuICAgICAgdGhpcy5jdXJyZW50TW9udGhUZXh0ID0gdGhpcy5jb3JlRGF0ZXRpbWVTZXJ2aWNlLmdldE1vbnRoVGV4dCh0aGlzLmxhbmcsIDExKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuY3VycmVudE1vbnRoT2JqZWN0JC5uZXh0KHtcclxuICAgICAgICB5ZWFyOiB0aGlzLmN1cnJlbnRNb250aE9iamVjdCQudmFsdWUueWVhcixcclxuICAgICAgICBtb250aEluZGV4OiB0aGlzLmN1cnJlbnRNb250aE9iamVjdCQudmFsdWUubW9udGhJbmRleCAtIDFcclxuICAgICAgfSk7XHJcblxyXG4gICAgICB0aGlzLmN1cnJlbnRNb250aFRleHQgPSB0aGlzLmNvcmVEYXRldGltZVNlcnZpY2UuZ2V0TW9udGhUZXh0KHRoaXMubGFuZywgdGhpcy5jdXJyZW50TW9udGhPYmplY3QkLnZhbHVlLm1vbnRoSW5kZXgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZ29Gb3Jld2FyZCgpIHtcclxuICAgIHRoaXMuZGlyZWN0aW9uID0gMTtcclxuICAgIHRoaXMuYmFja3dhcmQubmF0aXZlRWxlbWVudC5jaGVja2VkID0gZmFsc2U7XHJcbiAgICB0aGlzXHJcbiAgICBpZiAodGhpcy5jdXJyZW50TW9udGhPYmplY3QkLnZhbHVlLm1vbnRoSW5kZXggPT09IDExKSB7XHJcbiAgICAgIHRoaXMuY3VycmVudE1vbnRoT2JqZWN0JC5uZXh0KHtcclxuICAgICAgICB5ZWFyOiB0aGlzLmN1cnJlbnRNb250aE9iamVjdCQudmFsdWUueWVhciArIDEsXHJcbiAgICAgICAgbW9udGhJbmRleDogMFxyXG4gICAgICB9KTtcclxuICAgICAgdGhpcy5jdXJyZW50TW9udGhUZXh0ID0gdGhpcy5jb3JlRGF0ZXRpbWVTZXJ2aWNlLmdldE1vbnRoVGV4dCh0aGlzLmxhbmcsIDApO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5jdXJyZW50TW9udGhPYmplY3QkLm5leHQoe1xyXG4gICAgICAgIHllYXI6IHRoaXMuY3VycmVudE1vbnRoT2JqZWN0JC52YWx1ZS55ZWFyLFxyXG4gICAgICAgIG1vbnRoSW5kZXg6IHRoaXMuY3VycmVudE1vbnRoT2JqZWN0JC52YWx1ZS5tb250aEluZGV4ICsgMVxyXG4gICAgICB9KTtcclxuICAgICAgdGhpcy5jdXJyZW50TW9udGhUZXh0ID0gdGhpcy5jb3JlRGF0ZXRpbWVTZXJ2aWNlLmdldE1vbnRoVGV4dCh0aGlzLmxhbmcsIHRoaXMuY3VycmVudE1vbnRoT2JqZWN0JC52YWx1ZS5tb250aEluZGV4KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qIFByb2JhYmx5IHRoZSBtb3N0IGltcG9ydGFudCBmdW5jdGlvbiAqL1xyXG4gIGJ1aWxkQm9keSh5ZWFyOiBudW1iZXIsIG1vbnRoSW5kZXg6IG51bWJlcikge1xyXG4gICAgY29uc3QgYm9keSA9IHRoaXMuY29yZURhdGV0aW1lU2VydmljZS5nZXRDYWxlbmRhckJvZHkoeWVhciwgbW9udGhJbmRleCwgdGhpcy5kaXJlY3Rpb24pO1xyXG4gICAgdGhpcy5kYXRhID0gYm9keS5yb3dzO1xyXG4gICAgdGhpcy5jb250YWluZXIubmF0aXZlRWxlbWVudC5zdHlsZS5zZXRQcm9wZXJ0eSgnLS1zY3JvbGwtZGlzdGFuY2UnLCAoYm9keS5yb3dzLmxlbmd0aCAtIDYpICogdGhpcy5jZWxsU2l6ZSArICdweCcpO1xyXG4gIH1cclxuXHJcbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5saXN0ZW5lckZuKSB0aGlzLmxpc3RlbmVyRm4oKTtcclxuICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5tYXAoeCA9PiB4Py51bnN1YnNjcmliZSgpKVxyXG4gIH1cclxuXHJcbiAgdG9nZ2xlT3BlbigpIHtcclxuICAgIGlmICghIXRoaXMucmVhZG9ubHkpIHJldHVyblxyXG4gICAgaWYgKCEhdGhpcy5kaXNhYmxlZCkgcmV0dXJuXHJcbiAgICB0aGlzLm9wZW5TdGF0ZSA9ICF0aGlzLm9wZW5TdGF0ZTtcclxuICB9XHJcblxyXG4gIHRvZ2dsZU1vbnRoUGlja2VyQWN0aXZlKCkge1xyXG4gICAgdGhpcy5tb250aFBpY2tlckFjdGl2ZSA9ICF0aGlzLm1vbnRoUGlja2VyQWN0aXZlO1xyXG4gIH1cclxuXHJcbiAgb25Nb250aE9iamVjdENoYW5nZShhcmdzOiBJTW9udGhJZGVudGl0eSkge1xyXG4gICAgdGhpcy5jdXJyZW50TW9udGhPYmplY3QkLm5leHQoe1xyXG4gICAgICB5ZWFyOiBhcmdzLnllYXIsXHJcbiAgICAgIG1vbnRoSW5kZXg6IGFyZ3MubW9udGhJbmRleFxyXG4gICAgfSlcclxuICAgIHRoaXMubW9udGhQaWNrZXJBY3RpdmUgPSBmYWxzZTtcclxuICB9XHJcblxyXG4gIG9uTW9udGhQaWNrZXJZZWFyQ2xpY2soZTogbnVtYmVyKSB7XHJcbiAgICB0aGlzLm1vbnRoUGlja2VyQWN0aXZlID0gZmFsc2U7XHJcbiAgICB0aGlzLnllYXJQaWNrZXJBY3RpdmUgPSB0cnVlO1xyXG4gIH1cclxuXHJcbiAgb25ZZWFyUGlja2VkKGU6IG51bWJlcikge1xyXG4gICAgdGhpcy5jdXJyZW50TW9udGhPYmplY3QkLm5leHQoe1xyXG4gICAgICB5ZWFyOiBlLFxyXG4gICAgICBtb250aEluZGV4OiB0aGlzLmN1cnJlbnRNb250aE9iamVjdCQudmFsdWUubW9udGhJbmRleFxyXG4gICAgfSk7XHJcbiAgICB0aGlzLnllYXJQaWNrZXJBY3RpdmUgPSBmYWxzZTtcclxuICAgIHRoaXMubW9udGhQaWNrZXJBY3RpdmUgPSB0cnVlO1xyXG4gIH1cclxuXHJcbn1cclxuIiwiPGRpdiAjY29udGFpbmVyIGNsYXNzPVwiY29yZS1kYXRlLXBpY2tlci1jb250YWluZXJcIj5cclxuICAgIDxpbnB1dCB0eXBlPVwiY2hlY2tib3hcIiBbKG5nTW9kZWwpXT1cIm9wZW5TdGF0ZVwiPlxyXG4gICAgPGlucHV0IHR5cGU9XCJjaGVja2JveFwiIFsobmdNb2RlbCldPVwibW9udGhQaWNrZXJBY3RpdmVcIj5cclxuICAgIDxpbnB1dCB0eXBlPVwiY2hlY2tib3hcIiBbKG5nTW9kZWwpXT1cInllYXJQaWNrZXJBY3RpdmVcIj5cclxuICAgIDxpbnB1dCAjYmFja3dhcmQgdHlwZT1cImNoZWNrYm94XCIgY2xhc3M9XCJ0bC1kYXRlcGlja2VyLWRpcmVjdGlvblwiPlxyXG4gICAgPGlucHV0ICNpbnB1dCB0eXBlPVwidGV4dFwiIGNsYXNzPVwiZm9ybS1jb250cm9sXCIgW3BsYWNlaG9sZGVyXT1cInNob3dQbGFjZWhvbGRlciA/ICdkZC9tbS95eXl5JyA6ICcnXCJcclxuICAgICAgICBtYXhsZW5ndGg9XCIxMFwiIFsobmdNb2RlbCldPVwidGV4dFZhbHVlXCIgW2NsYXNzLmZvcm0tY29udHJvbC1kaXNhYmxlZF09XCJkaXNhYmxlZFwiIFtkaXNhYmxlZF09XCJkaXNhYmxlZFwiPjxsYWJlbCBjbGFzcz1cImljb25cIiAoY2xpY2spPVwidG9nZ2xlT3BlbigpXCI+PC9sYWJlbD5cclxuICAgIDxkaXYgY2xhc3M9XCJ0bC1kYXRlLXBpY2tlci1wb3B1cFwiIFtjbGFzcy5vcGVuXT1cIm9wZW5TdGF0ZVwiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJkYXRlLXBpY2tlci1zZXNzaW9uXCIgW2NsYXNzLmQtbm9uZV09XCJtb250aFBpY2tlckFjdGl2ZSB8fCB5ZWFyUGlja2VyQWN0aXZlXCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJuYXZpZ2F0b3JcIj5cclxuICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cIm1vbnRoLWRyb3Bkb3duXCIgKGNsaWNrKT1cInRvZ2dsZU1vbnRoUGlja2VyQWN0aXZlKClcIj57eyBjdXJyZW50TW9udGhUZXh0IH19IHt7XHJcbiAgICAgICAgICAgICAgICAgICAgY3VycmVudE1vbnRoT2JqZWN0JC52YWx1ZS55ZWFyIH19PC9sYWJlbD5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJhcnJvd3NcIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZ28tdXBcIiAoY2xpY2spPVwiZ29CYWNrd2FyZCgpXCI+PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImdvLWRvd25cIiAoY2xpY2spPVwiZ29Gb3Jld2FyZCgpXCI+PC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ3ZWVrZGF5LWhlYWRlclwiPlxyXG4gICAgICAgICAgICAgICAgPHVsPlxyXG4gICAgICAgICAgICAgICAgICAgIDxsaSAqbmdGb3I9XCJsZXQgZGF5IG9mIGhlYWRlcldlZWtkYXlzOyBsZXQgaSA9IGluZGV4XCIgW2NsYXNzLnQ3XT1cImk9PT01XCIgW2NsYXNzLmNuXT1cImk9PT02XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXY+e3sgZGF5IH19PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9saT5cclxuICAgICAgICAgICAgICAgIDwvdWw+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2FsZW5kYXItYm9keS1jb250YWluZXJcIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgI2NhbGVuZGFyQm9keSBjbGFzcz1cImNhbGVuZGFyLWJvZHlcIiBbY2xhc3Muc2xpZGUtdXBdPVwiZGlyZWN0aW9uPT09MVwiXHJcbiAgICAgICAgICAgICAgICAgICAgW2NsYXNzLnNsaWRlLWRvd25dPVwiZGlyZWN0aW9uPT09LTFcIj5cclxuICAgICAgICAgICAgICAgICAgICA8dWwgKm5nRm9yPVwibGV0IHdlZWsgb2YgZGF0YVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8bGkgKm5nRm9yPVwibGV0IGl0ZW0gb2Ygd2Vlay5pdGVtczsgbGV0IGkgPSBpbmRleFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBbY2xhc3Mub3V0LW9mLW1vbnRoXT1cIiEhIWl0ZW0uY3VycmVudE1vbnRoXCIgW2NsYXNzLnQ3XT1cImk9PT01XCIgW2NsYXNzLmNuXT1cImk9PT02XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY2xhc3Mub3V0LW9mLXJhbmdlXT1cIiEhcmFuZ2VMaW1pdCAmJiAhISEoKGl0ZW0uZGF0ZVZhbHVlPj1yYW5nZUxpbWl0Lm1pbkRhdGUpICYmIChyYW5nZUxpbWl0Lm1heERhdGU+PWl0ZW0uZGF0ZVZhbHVlKSlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjbGFzcy5hY3RpdmVdPVwiaXRlbS5kYXRlVmFsdWUuZ2V0RnVsbFllYXIoKT09PXBlbmRpbmdZZWFyICYmIGl0ZW0uZGF0ZVZhbHVlLmdldE1vbnRoKCk9PT1wZW5kaW5nTW9udGhJbmRleCAmJiBpdGVtLmRhdGVWYWx1ZS5nZXREYXRlKCk9PT1wZW5kaW5nRGF5XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwib25JdGVtQ2xpY2soaXRlbS5kYXRlVmFsdWUpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgaXRlbS5kYXRlIH19PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbGk+XHJcbiAgICAgICAgICAgICAgICAgICAgPC91bD5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwibW9udGgtcGlja2VyLXNlc3Npb25cIiBbY2xhc3MuYWN0aXZlXT1cIm1vbnRoUGlja2VyQWN0aXZlXCI+XHJcbiAgICAgICAgICAgIDxjb3JlLW1vbnRoLXBpY2tlciBbbGFuZ109XCJsYW5nXCIgW21vbnRoT2JqZWN0JF09XCJjdXJyZW50TW9udGhPYmplY3QkXCIgKG9uQ2hhbmdlKT1cIm9uTW9udGhPYmplY3RDaGFuZ2UoJGV2ZW50KVwiIChvblllYXJDbGljayk9XCJvbk1vbnRoUGlja2VyWWVhckNsaWNrKCRldmVudClcIj48L2NvcmUtbW9udGgtcGlja2VyPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJ5ZWFyLXBpY2tlci1zZXNzaW9uXCIgW2NsYXNzLmFjdGl2ZV09XCJ5ZWFyUGlja2VyQWN0aXZlXCI+XHJcbiAgICAgICAgICAgIDxjb3JlLXllYXItcGlja2VyIFtsYW5nXT1cImxhbmdcIiAob25DaGFuZ2UpPVwib25ZZWFyUGlja2VkKCRldmVudClcIj48L2NvcmUteWVhci1waWNrZXI+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImZvb3Rlci13cmFwcGVyXCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjZHAtZm9vdGVyXCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2xlYXJcIiBbY2xhc3Mub3BhY2l0eS0wXT1cIiEhIXRleHRWYWx1ZVwiIChjbGljayk9XCJjbGVhcigpXCI+e3sgJ1VJLkNPUkVfREFURV9QSUNLRVJfQ0xFQVInIHwgdHJhbnNsYXRlOiBsYW5nIH19PC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZGlnaS13YXRjaFwiPjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRvZGF5XCIgKGNsaWNrKT1cImdvVG9kYXkoKVwiPnt7ICdVSS5DT1JFX0RBVEVfUElDS0VSX1RPREFZJyB8IHRyYW5zbGF0ZTogbGFuZyB9fTwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG48L2Rpdj4iXX0=
405
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29yZS1kYXRlLXBpY2tlci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtaGlzdGFmZi1hbHBoYS9zcmMvbGliL2FwcC9saWJyYXJpZXMvY29yZS1kYXRlLXBpY2tlci9jb3JlLWRhdGUtcGlja2VyL2NvcmUtZGF0ZS1waWNrZXIuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LWhpc3RhZmYtYWxwaGEvc3JjL2xpYi9hcHAvbGlicmFyaWVzL2NvcmUtZGF0ZS1waWNrZXIvY29yZS1kYXRlLXBpY2tlci9jb3JlLWRhdGUtcGlja2VyLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQWdELFNBQVMsRUFBRSxLQUFLLEVBQXdCLE1BQU0sZUFBZSxDQUFDO0FBQ2hJLE9BQU8sRUFBRSxXQUFXLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNoRSxPQUFPLEVBQUUsZUFBZSxFQUE0QixvQkFBb0IsRUFBRSxTQUFTLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFFbEcsT0FBTyxFQUFFLDRCQUE0QixFQUFFLE1BQU0sK0RBQStELENBQUM7QUFHN0csT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLG9FQUFvRSxDQUFDO0FBQzdHLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQztBQUNsRSxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSx1RUFBdUUsQ0FBQzs7Ozs7Ozs7QUE2QmpIOzs7Ozs7Ozs7O0VBVUU7QUFDRixNQUFNLE9BQU8sdUJBQXdCLFNBQVEsNEJBQTRCO0lBaUR2RSxZQUNtQixRQUFtQixFQUNuQixVQUFzQixFQUN0QixtQkFBd0MsRUFDakQsR0FB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U0FBUzsrQkFDRSxrQkFBa0IsY0FDaEIsSUFBSSxXQUNQO3dCQUNQLFlBQVk7d0JBQ1osV0FBVzt3QkFDWCx1QkFBdUI7d0JBQ3ZCLHdCQUF3Qjt3QkFDeEIsYUFBYTtxQkFDZCxhQUdVO3dCQUNUOzRCQUNFLE9BQU8sRUFBRSxpQkFBaUI7NEJBQzFCLEtBQUssRUFBRSxJQUFJOzRCQUNYLFdBQVcseUJBQXlCO3lCQUNyQztxQkFDRjt1TUFlUSx1QkFBdUI7c0JBQS9CLEtBQUs7Z0JBQ0csZUFBZTtzQkFBdkIsS0FBSztnQkFDRyxVQUFVO3NCQUFsQixLQUFLO2dCQUNHLGFBQWE7c0JBQXJCLEtBQUs7Z0JBQ0csVUFBVTtzQkFBbEIsS0FBSztnQkFDWSxRQUFRO3NCQUF6QixLQUFLO2dCQUNZLFFBQVE7c0JBQXpCLEtBQUs7Z0JBaUNrQixTQUFTO3NCQUFoQyxTQUFTO3VCQUFDLFdBQVc7Z0JBQ0YsS0FBSztzQkFBeEIsU0FBUzt1QkFBQyxPQUFPO2dCQUNLLFFBQVE7c0JBQTlCLFNBQVM7dUJBQUMsVUFBVTtnQkFDTSxZQUFZO3NCQUF0QyxTQUFTO3VCQUFDLGNBQWMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIEVsZW1lbnRSZWYsIE9uSW5pdCwgT25EZXN0cm95LCBBZnRlclZpZXdJbml0LCBWaWV3Q2hpbGQsIElucHV0LCBSZW5kZXJlcjIsIGlzRGV2TW9kZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBGb3Jtc01vZHVsZSwgTkdfVkFMVUVfQUNDRVNTT1IgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCwgT2JzZXJ2YWJsZSwgU3Vic2NyaXB0aW9uLCBkaXN0aW5jdFVudGlsQ2hhbmdlZCwgZnJvbUV2ZW50IH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IERvbVNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9kb20uc2VydmljZSc7XHJcbmltcG9ydCB7IENvcmVGb3JtQ29udHJvbEJhc2VDb21wb25lbnQgfSBmcm9tICcuLi8uLi9jb3JlLWZvcm0tY29udHJvbC1iYXNlL2NvcmUtZm9ybS1jb250cm9sLWJhc2UuY29tcG9uZW50JztcclxuaW1wb3J0IHsgQ29yZURhdGV0aW1lU2VydmljZSwgSURhdGFSb3csIElNb250aElkZW50aXR5IH0gZnJvbSAnLi4vLi4vc2VydmljZXMvY29yZS1kYXRldGltZS5zZXJ2aWNlJztcclxuaW1wb3J0IHsgTXVsdGlMYW5ndWFnZVNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9tdWx0aS1sYW5ndWFnZS5zZXJ2aWNlJztcclxuaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcclxuaW1wb3J0IHsgQ29yZVllYXJQaWNrZXJDb21wb25lbnQgfSBmcm9tICcuLi8uLi9jb3JlLXllYXItcGlja2VyL2NvcmUteWVhci1waWNrZXIvY29yZS15ZWFyLXBpY2tlci5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBUcmFuc2xhdGVQaXBlIH0gZnJvbSAnLi4vLi4vLi4vYXBwLXBpcGVzL3RyYW5zbGF0ZS5waXBlJztcclxuaW1wb3J0IHsgQ29yZU1vbnRoUGlja2VyQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vY29yZS1tb250aC1waWNrZXIvY29yZS1tb250aC1waWNrZXIvY29yZS1tb250aC1waWNrZXIuY29tcG9uZW50JztcclxuaW1wb3J0IHsgQWxlcnRTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vYWxlcnQvYWxlcnQuc2VydmljZSc7XHJcblxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBJQ29yZURhdGVQaWNrZXJSYW5nZSB7XHJcbiAgbWluRGF0ZTogRGF0ZTtcclxuICBtYXhEYXRlOiBEYXRlO1xyXG59XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2NvcmUtZGF0ZS1waWNrZXInLFxyXG4gIHN0YW5kYWxvbmU6IHRydWUsXHJcbiAgaW1wb3J0czogW1xyXG4gICAgQ29tbW9uTW9kdWxlLFxyXG4gICAgRm9ybXNNb2R1bGUsXHJcbiAgICBDb3JlWWVhclBpY2tlckNvbXBvbmVudCxcclxuICAgIENvcmVNb250aFBpY2tlckNvbXBvbmVudCxcclxuICAgIFRyYW5zbGF0ZVBpcGUsXHJcbiAgXSxcclxuICB0ZW1wbGF0ZVVybDogJy4vY29yZS1kYXRlLXBpY2tlci5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJy4vY29yZS1kYXRlLXBpY2tlci5jb21wb25lbnQuc2NzcyddLFxyXG4gIHByb3ZpZGVyczogW1xyXG4gICAge1xyXG4gICAgICBwcm92aWRlOiBOR19WQUxVRV9BQ0NFU1NPUixcclxuICAgICAgbXVsdGk6IHRydWUsXHJcbiAgICAgIHVzZUV4aXN0aW5nOiBDb3JlRGF0ZVBpY2tlckNvbXBvbmVudFxyXG4gICAgfVxyXG4gIF1cclxufSlcclxuLypcclxuICB0aGlzIGNvbXBvbmVudCByZW5kZXJzIGl0cyBtYWluIHBhcnQgYW5kIHBvcHVwIHBhcnRcclxuICB0aGUgbWFpbiBwYXJ0IGRlYWxzIHdpdGggdXNlciBpbnB1dCBmcm9tIHBoeXNpY2FsIGtleWJvYXJkIG9yIHRvdWNoIGtleWJvYXJkXHJcbiAgdGhlIHBvcHVwIHBhcnQgY29uc2lzdHMgb2YgMSkgbmF2aWdhdG9yIDIpIGhlYWRlciAzKSBjYWxlbmRhciBib2R5IGNvbnRhaW5lciA0KSBjYWxlbmRhciBib2R5XHJcbiAgdGhlIG1vc3QgaW1wb3J0YW50IHBhcnQgb2YgdGhlbSBpczpcclxuICAgIDQpIGNhbGVuZGFyIGJvZHk6XHJcbiAgICAgIGR1ZSB2YXJpYXRpb25zIHRoZSBjYWxlbmRhciBib2R5IG1heSByZWFjaCB0byA2IHJvd3Mgb2Ygd2VlayBkYXkgc3ViLWFycmF5XHJcbiAgICAtIGZvciB2aXN1YWwsIGxvZ2ljIGFuZCBjb2Rpbmcgc2ltcGxpY2l0eSBJIHdpbGwgYWx3YXlzIHJlbmRlciBhbGwgdGhlIDYgcm93c1xyXG4gICAgc28gY2FsZW5kYXIgYm9keSBkaW1lbnNpb24gc3RheXMgdW5jaGFuZ2VkXHJcbiAgXHJcbiovXHJcbmV4cG9ydCBjbGFzcyBDb3JlRGF0ZVBpY2tlckNvbXBvbmVudCBleHRlbmRzIENvcmVGb3JtQ29udHJvbEJhc2VDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIEFmdGVyVmlld0luaXQsIE9uRGVzdHJveSB7XHJcblxyXG4gIEBJbnB1dCgpIGVuYWJsZVRpbWVab25lQ29udmVydGVyITogYm9vbGVhbjtcclxuICBASW5wdXQoKSBzaG93UGxhY2Vob2xkZXI6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBASW5wdXQoKSBwb3B1cFdpZHRoOiBudW1iZXIgPSAzMDA7XHJcbiAgQElucHV0KCkgcG9wdXBYUGFkZGluZzogbnVtYmVyID0gMTI7XHJcbiAgQElucHV0KCkgcmFuZ2VMaW1pdCE6IElDb3JlRGF0ZVBpY2tlclJhbmdlO1xyXG4gIEBJbnB1dCgpIG92ZXJyaWRlIHJlYWRvbmx5ITogYm9vbGVhbjtcclxuICBASW5wdXQoKSBvdmVycmlkZSBkaXNhYmxlZCE6IGJvb2xlYW47XHJcblxyXG5cclxuICBsaXN0ZW5lckZuITogKCkgPT4gdm9pZDtcclxuXHJcbiAgbGFuZyE6IHN0cmluZztcclxuICBzdWJzY3JpcHRpb25zOiBTdWJzY3JpcHRpb25bXSA9IFtdO1xyXG4gIG9wZW5TdGF0ZTogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIG1vbnRoUGlja2VyQWN0aXZlOiBib29sZWFuID0gZmFsc2U7XHJcbiAgeWVhclBpY2tlckFjdGl2ZTogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICBjZWxsU2l6ZTogbnVtYmVyID0gKHRoaXMucG9wdXBXaWR0aCAtIHRoaXMucG9wdXBYUGFkZGluZyAqIDIpIC8gNztcclxuXHJcbiAgb3ZlcnJpZGUgdmFsdWUhOiBEYXRlIHwgbnVsbDtcclxuICBwZW5kaW5nWWVhciE6IG51bWJlcjtcclxuICBwZW5kaW5nTW9udGhJbmRleCE6IG51bWJlcjtcclxuICBwZW5kaW5nRGF5OiBudW1iZXIgPSB0aGlzLnZhbHVlPy5nZXREYXRlKCkhO1xyXG5cclxuICBjdXJyZW50TW9udGhPYmplY3QkITogQmVoYXZpb3JTdWJqZWN0PElNb250aElkZW50aXR5PjtcclxuICBuZXdEYXRlITogRGF0ZTtcclxuXHJcbiAgY3VycmVudE1vbnRoVGV4dCE6IHN0cmluZztcclxuICBjdXJyZW50SG91cnMhOiBudW1iZXI7XHJcbiAgY3VycmVudE1pbnV0ZXMhOiBudW1iZXI7XHJcbiAgY3VycmVudFNlY29uZHMhOiBudW1iZXI7XHJcbiAgY3VycmVudE1pbGxpc2Vjb25kcyE6IG51bWJlcjtcclxuXHJcbiAgZGF0YSE6IElEYXRhUm93W107XHJcbiAgaGVhZGVyV2Vla2RheXMhOiBzdHJpbmdbXTtcclxuICBkaXJlY3Rpb246IG51bWJlciA9IDE7IC8vIHN0YXJ0dXAgZGlyZWN0aW9uIDEgfCAtMVxyXG5cclxuICB0ZXh0VmFsdWU6IHN0cmluZyA9ICcnO1xyXG5cclxuICBAVmlld0NoaWxkKCdjb250YWluZXInKSBjb250YWluZXIhOiBFbGVtZW50UmVmO1xyXG4gIEBWaWV3Q2hpbGQoJ2lucHV0JykgaW5wdXQhOiBFbGVtZW50UmVmO1xyXG4gIEBWaWV3Q2hpbGQoJ2JhY2t3YXJkJykgYmFja3dhcmQhOiBFbGVtZW50UmVmO1xyXG4gIEBWaWV3Q2hpbGQoJ2NhbGVuZGFyQm9keScpIGNhbGVuZGFyQm9keSE6IEVsZW1lbnRSZWY7XHJcblxyXG4gIGlucHV0U3RyZWFtJCE6IE9ic2VydmFibGU8YW55PjtcclxuICBsYXN0VGV4dCE6IHN0cmluZztcclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwcml2YXRlIHJlYWRvbmx5IHJlbmRlcmVyOiBSZW5kZXJlcjIsXHJcbiAgICBwcml2YXRlIHJlYWRvbmx5IGRvbVNlcnZpY2U6IERvbVNlcnZpY2UsXHJcbiAgICBwcml2YXRlIHJlYWRvbmx5IGNvcmVEYXRldGltZVNlcnZpY2U6IENvcmVEYXRldGltZVNlcnZpY2UsXHJcbiAgICBwcml2YXRlIG1sczogTXVsdGlMYW5ndWFnZVNlcnZpY2UsXHJcbiAgICBwcml2YXRlIGFsZXJ0U2VydmljZTogQWxlcnRTZXJ2aWNlXHJcbiAgKSB7XHJcbiAgICBzdXBlcigpO1xyXG4gIH1cclxuXHJcbiAgbmdPbkluaXQoKTogdm9pZCB7XHJcblxyXG4gICAgdGhpcy5uZXdEYXRlID0gISF0aGlzLnJhbmdlTGltaXQgPyB0aGlzLnJhbmdlTGltaXQubWluRGF0ZSA6IG5ldyBEYXRlKCk7XHJcbiAgICB0aGlzLmN1cnJlbnRNb250aE9iamVjdCQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PElNb250aElkZW50aXR5Pih7XHJcbiAgICAgIHllYXI6IHRoaXMudmFsdWU/LmdldEZ1bGxZZWFyKCkgfHwgdGhpcy5uZXdEYXRlLmdldEZ1bGxZZWFyKCksXHJcbiAgICAgIG1vbnRoSW5kZXg6IHRoaXMudmFsdWU/LmdldE1vbnRoKCkgfHwgdGhpcy5uZXdEYXRlLmdldE1vbnRoKClcclxuICAgIH0pO1xyXG5cclxuICAgIGlmICghIXRoaXMuZGlzYWJsZWQpIHRoaXMucmVhZG9ubHkgPSB0cnVlO1xyXG5cclxuICAgIGlmICghISF0aGlzLnZhbHVlKSB7XHJcbiAgICAgIHRoaXMudmFsdWUgPSB0aGlzLm5ld0RhdGU7XHJcbiAgICAgIHRoaXMubGFzdFRleHQgPSB0aGlzLmNvcmVEYXRldGltZVNlcnZpY2UuZGF0ZVRvVm5TdHJpbmcodGhpcy52YWx1ZSlcclxuICAgIH1cclxuICAgICAgXHJcbiAgICB0aGlzLnBlbmRpbmdZZWFyID0gdGhpcy52YWx1ZS5nZXRGdWxsWWVhcigpO1xyXG4gICAgdGhpcy5wZW5kaW5nTW9udGhJbmRleCA9IHRoaXMudmFsdWUuZ2V0TW9udGgoKTtcclxuICAgIHRoaXMucGVuZGluZ0RheSA9IHRoaXMudmFsdWUuZ2V0RGF0ZSgpO1xyXG4gICAgdGhpcy5jdXJyZW50SG91cnMgPSB0aGlzLnZhbHVlLmdldEhvdXJzKCk7XHJcbiAgICB0aGlzLmN1cnJlbnRNaW51dGVzID0gdGhpcy52YWx1ZS5nZXRNaW51dGVzKCk7XHJcbiAgICB0aGlzLmN1cnJlbnRTZWNvbmRzID0gdGhpcy52YWx1ZS5nZXRTZWNvbmRzKCk7XHJcbiAgICB0aGlzLmN1cnJlbnRNaWxsaXNlY29uZHMgPSB0aGlzLnZhbHVlLmdldE1pbGxpc2Vjb25kcygpO1xyXG5cclxuICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKFxyXG4gICAgICB0aGlzLm1scy5sYW5nJC5zdWJzY3JpYmUoeCA9PiB0aGlzLmxhbmcgPSB4KVxyXG4gICAgKVxyXG5cclxuICAgIC8qXHJcbiAgICBpZiAoISEhdGhpcy5pZCkge1xyXG4gICAgICBjb25zb2xlLmVycm9yKGBcclxuICAgICAgd2l0aGluIGEgcGFnZSwgdGFubGVpY2EtZGF0ZS1waWNrZXIgbmVlZHMgYW4gdW5pcXVlIHByb3BlcnR5IGlkIHZhbHVlIHRvIHdvcmsgY29ycmVjdGx5XHJcbiAgICAgIGZvciBleGFtcGxlOiA8dGFubGVpY2EtZGF0ZS1waWNrZXIgaWQ9XCJzdGFydERhdGVcIiBmb3JtQ29udHJvbE5hbWU9XCJzdGFydERhdGVcIj48L3RhbmxlaWNhLWRhdGUtcGlja2VyPlxyXG4gICAgICBgKVxyXG4gICAgfVxyXG4gICAgKi9cclxuICAgIHRoaXMuaGVhZGVyV2Vla2RheXMgPSB0aGlzLmNvcmVEYXRldGltZVNlcnZpY2UuZ2V0U2hvcnRXZWVrZGF5cyh0aGlzLmxhbmcpO1xyXG4gIH1cclxuXHJcbiAgLypcclxuICAgIHRyaWdnZXIgYW5pbWF0aW9uIGJ5IHJlZmxvdyB0aGUgRE9NXHJcbiAgKi9cclxuICB0cmlnZ2VyUmVmbG93KCkge1xyXG4gICAgY29uc3QgZWwgPSB0aGlzLmNhbGVuZGFyQm9keS5uYXRpdmVFbGVtZW50O1xyXG4gICAgLy9ET00gbWFuaXB1bGF0aW9uXHJcbiAgICBpZiAodGhpcy5kaXJlY3Rpb24gPT09IDEpIHtcclxuICAgICAgZWwuY2xhc3NMaXN0LnJlbW92ZShcInNsaWRlLXVwXCIpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgZWwuY2xhc3NMaXN0LnJlbW92ZShcInNsaWRlLWRvd25cIik7XHJcbiAgICB9XHJcbiAgICBlbC5vZmZzZXRIZWlnaHQ7ICAvKiB0cmlnZ2VyIHJlZmxvdyAoYWx0ZXJuYXRpdmU6IGVsLm9mZnNldFdpZHRoKSAqL1xyXG4gICAgaWYgKHRoaXMuZGlyZWN0aW9uID09PSAxKSB7XHJcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4gZWwuY2xhc3NMaXN0LmFkZChcInNsaWRlLXVwXCIpLCAwKTsgLy8gcGFzcyB0aGUgY2FsbGJhY2sgdG8gQ2FsbGJhY2sgcXVldWUgdGhyb3VnaCBXZWJBUElzLCBzbyBpdCB3aWxsIGJlIGV4ZWN1dGVkIGFmdGVyIERPTSBtYW5pcHVsYXRpb24gZW5kc1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgc2V0VGltZW91dCgoKSA9PiBlbC5jbGFzc0xpc3QuYWRkKFwic2xpZGUtZG93blwiKSwgMCk7IC8vIHBhc3MgdGhlIGNhbGxiYWNrIHRvIENhbGxiYWNrIHF1ZXVlIHRocm91Z2ggV2ViQVBJcywgc28gaXQgd2lsbCBiZSBleGVjdXRlZCBhZnRlciBET00gbWFuaXB1bGF0aW9uIGVuZHNcclxuICAgIH1cclxuICB9XHJcblxyXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcclxuXHJcbiAgICAvKlxyXG4gICAgICBUaGlzIGV2ZW50cyBnZXQgY2FsbGVkIGJ5IGFsbCBjbGlja3Mgb24gdGhlIHBhZ2VcclxuICAgICovXHJcbiAgICB0aGlzLmxpc3RlbmVyRm4gPSB0aGlzLnJlbmRlcmVyLmxpc3Rlbignd2luZG93JywgJ2NsaWNrJywgKGU6IEV2ZW50KSA9PiB7XHJcbiAgICAgIC8qXHJcbiAgICAgICAgaGFuZGxlIGNsaWNrIG91dHNpZGVcclxuICAgICAgKi9cclxuICAgICAgaWYgKHRoaXMuY29udGFpbmVyICYmICEhIXRoaXMuY29udGFpbmVyLm5hdGl2ZUVsZW1lbnQuY29udGFpbnMoZS50YXJnZXQpKSB7XHJcbiAgICAgICAgdGhpcy5vcGVuU3RhdGUgPSBmYWxzZTtcclxuICAgICAgfVxyXG4gICAgfSlcclxuXHJcbiAgICBjb25zdCBtYXhaSW5kZXggPSB0aGlzLmRvbVNlcnZpY2UuZ2V0TWF4WkluZGV4KCk7XHJcblxyXG4gICAgdGhpcy5jb250YWluZXIubmF0aXZlRWxlbWVudC5zdHlsZS5zZXRQcm9wZXJ0eSgnLS1pbmRpY2F0b3ItaGVpZ2h0JywgKHRoaXMuaW5wdXQubmF0aXZlRWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5oZWlnaHQgLSA2KSArICdweCcpXHJcbiAgICB0aGlzLmNvbnRhaW5lci5uYXRpdmVFbGVtZW50LnN0eWxlLnNldFByb3BlcnR5KCctLXBvcHVwLXotaW5kZXgnLCBtYXhaSW5kZXgpO1xyXG4gICAgdGhpcy5jb250YWluZXIubmF0aXZlRWxlbWVudC5zdHlsZS5zZXRQcm9wZXJ0eSgnLS1jZWxsLXNpemUnLCB0aGlzLmNlbGxTaXplICsgJ3B4JylcclxuXHJcbiAgICB0aGlzLmN1cnJlbnRNb250aE9iamVjdCQucGlwZShcclxuICAgICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKVxyXG4gICAgKS5zdWJzY3JpYmUodmFsdWUgPT4ge1xyXG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICB0aGlzLmN1cnJlbnRNb250aFRleHQgPSB0aGlzLmNvcmVEYXRldGltZVNlcnZpY2UuZ2V0TW9udGhUZXh0KHRoaXMubGFuZywgdmFsdWUubW9udGhJbmRleCk7XHJcbiAgICAgICAgY29uc29sZS5sb2coXCJSZWJ1aWxkaW5nLi4uLlwiKVxyXG4gICAgICAgIHRoaXMuYnVpbGRCb2R5KHZhbHVlLnllYXIsIHZhbHVlLm1vbnRoSW5kZXgpO1xyXG4gICAgICAgIHRoaXMudHJpZ2dlclJlZmxvdygpO1xyXG4gICAgICB9LCAwKVxyXG4gICAgfSlcclxuXHJcbiAgICB0aGlzLmlucHV0U3RyZWFtJCA9IGZyb21FdmVudCh0aGlzLmlucHV0Lm5hdGl2ZUVsZW1lbnQsICdpbnB1dCcpO1xyXG4gICAgdGhpcy5pbnB1dFN0cmVhbSQuc3Vic2NyaWJlKGV2ZW50ID0+IHtcclxuXHJcbiAgICAgIGlmICggZXZlbnQuaW5wdXRUeXBlICE9PSAnZGVsZXRlQ29udGVudEJhY2t3YXJkJyBcclxuICAgICAgICAmJiAnIzAjMSMyIzMjNCM1IzYjNyM4IzkjQmFja3NwYWNlI0RlbGV0ZScuaW5kZXhPZignIycgKyBldmVudC5kYXRhKSA8IDApIFxyXG4gICAgICB7XHJcbiAgICAgICAgZXZlbnQudGFyZ2V0LnZhbHVlID0gdGhpcy5sYXN0VGV4dDtcclxuICAgICAgICB0aGlzLm1hcmtBc1RvdWNoZWQoKTtcclxuICAgICAgICB0aGlzLm9uQ2hhbmdlKG51bGwpO1xyXG4gICAgICAgIHJldHVybjtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLmxhc3RUZXh0ID0gZXZlbnQudGFyZ2V0LnZhbHVlXHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHZhciB2ID0gZXZlbnQudGFyZ2V0LnZhbHVlO1xyXG4gICAgICBpZiAodi5tYXRjaCgvXlxcZHsyfSQvKSAhPT0gbnVsbCkge1xyXG4gICAgICAgIGV2ZW50LnRhcmdldC52YWx1ZSA9IHYgKyAnLyc7XHJcbiAgICAgICAgdGhpcy50ZXh0VmFsdWUgPSB2ICsgJy8nO1xyXG4gICAgICB9IGVsc2UgaWYgKHYubWF0Y2goL15cXGR7Mn1cXC9cXGR7Mn0kLykgIT09IG51bGwpIHtcclxuICAgICAgICBldmVudC50YXJnZXQudmFsdWUgPSB2ICsgJy8nO1xyXG4gICAgICAgIHRoaXMudGV4dFZhbHVlID0gdiArICcvJztcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLnRleHRWYWx1ZSA9IHY7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmICh0aGlzLnRleHRWYWx1ZS5sZW5ndGggPT09IDEwKSB7XHJcbiAgICAgICAgY29uc3QgZGlnaXRzID0gdGhpcy50ZXh0VmFsdWUuc3BsaXQoJy8nKTtcclxuICAgICAgICBjb25zdCB5ID0gTnVtYmVyKGRpZ2l0c1syXSk7XHJcbiAgICAgICAgY29uc3QgbSA9IE51bWJlcihkaWdpdHNbMV0pIC0gMTtcclxuICAgICAgICBjb25zdCBkID0gTnVtYmVyKGRpZ2l0c1swXSk7XHJcblxyXG4gICAgICAgIGlmICh5IDw9IDAgfHwgbSA8IDAgfHwgbSA+IDExIHx8IGQgPCAxIHx8IGQgPiAzMSkge1xyXG4gICAgICAgICAgZXZlbnQudGFyZ2V0LnZhbHVlID0gJyc7XHJcbiAgICAgICAgICB0aGlzLnRleHRWYWx1ZSA9ICcnO1xyXG4gICAgICAgICAgdGhpcy5tYXJrQXNUb3VjaGVkKCk7XHJcbiAgICAgICAgICB0aGlzLm9uQ2hhbmdlKG51bGwpO1xyXG4gICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY29uc3Qgbm93ID0gbmV3IERhdGUoKTtcclxuICAgICAgICBjb25zdCBociA9IG5vdy5nZXRIb3VycygpO1xyXG4gICAgICAgIGNvbnN0IG1uID0gbm93LmdldE1pbnV0ZXMoKTtcclxuICAgICAgICBjb25zdCBzZCA9IG5vdy5nZXRTZWNvbmRzKCk7XHJcbiAgICAgICAgY29uc3QgbXMgPSBub3cuZ2V0TWlsbGlzZWNvbmRzKCk7XHJcblxyXG4gICAgICAgIGNvbnN0IGRhdGUgPSBuZXcgRGF0ZShOdW1iZXIoZGlnaXRzWzJdKSwgTnVtYmVyKGRpZ2l0c1sxXSkgLSAxLCBOdW1iZXIoZGlnaXRzWzBdKSwgaHIsIG1uLCBzZCwgbXMpO1xyXG4gICAgICAgIGV2ZW50LnRhcmdldC52YWx1ZSA9IHRoaXMuY29yZURhdGV0aW1lU2VydmljZS5kYXRlVG9WblN0cmluZyhkYXRlKTtcclxuICAgICAgICB0aGlzLm1hcmtBc1RvdWNoZWQoKTtcclxuICAgICAgICB0aGlzLm9uQ2hhbmdlKGRhdGUpO1xyXG5cclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLm1hcmtBc1RvdWNoZWQoKTtcclxuICAgICAgICB0aGlzLm9uQ2hhbmdlKG51bGwpO1xyXG4gICAgICAgIHJldHVybjtcclxuICAgICAgfVxyXG4gICAgfSlcclxuXHJcbiAgfVxyXG5cclxuICBvdmVycmlkZSB3cml0ZVZhbHVlKG9iajogRGF0ZSB8IG51bGwpOiB2b2lkIHtcclxuICAgIGNvbnNvbGUubG9nKFwiVVRDIERhdGUgXCIsIG9iaik7XHJcblxyXG4gICAgY29uc3QgdXBkYXRlUHJvcGVydGllcyA9ICh2YWx1ZTogRGF0ZSkgPT4ge1xyXG4gICAgICBjb25zb2xlLmxvZyhcIkFmdGVyIGNvbnZlcnQgdG8gTG9jYWwgRGF0ZSBcIiwgdmFsdWUpO1xyXG4gICAgICB0aGlzLnZhbHVlID0gdmFsdWU7XHJcbiAgICAgIHRoaXMubGFzdFRleHQgPSB0aGlzLmNvcmVEYXRldGltZVNlcnZpY2UuZGF0ZVRvVm5TdHJpbmcodmFsdWUpXHJcbiAgICAgIHRoaXMudGV4dFZhbHVlID0gdGhpcy5jb3JlRGF0ZXRpbWVTZXJ2aWNlLmRhdGVUb1ZuU3RyaW5nKHZhbHVlKTtcclxuICAgICAgdGhpcy5jdXJyZW50TW9udGhPYmplY3QkLm5leHQoe1xyXG4gICAgICAgIHllYXI6IHZhbHVlLmdldEZ1bGxZZWFyKCksXHJcbiAgICAgICAgbW9udGhJbmRleDogdmFsdWUuZ2V0TW9udGgoKVxyXG4gICAgICB9KVxyXG4gICAgICB0aGlzLmN1cnJlbnRIb3VycyA9IHZhbHVlLmdldEhvdXJzKCk7XHJcbiAgICAgIHRoaXMuY3VycmVudE1pbnV0ZXMgPSB2YWx1ZS5nZXRNaW51dGVzKCk7XHJcbiAgICAgIHRoaXMuY3VycmVudFNlY29uZHMgPSB2YWx1ZS5nZXRTZWNvbmRzKCk7XHJcbiAgICAgIHRoaXMuY3VycmVudE1pbGxpc2Vjb25kcyA9IHZhbHVlLmdldE1pbGxpc2Vjb25kcygpO1xyXG5cclxuICAgICAgdGhpcy5jdXJyZW50TW9udGhUZXh0ID0gdGhpcy5jb3JlRGF0ZXRpbWVTZXJ2aWNlLmdldE1vbnRoVGV4dCh0aGlzLmxhbmcsIHRoaXMuY3VycmVudE1vbnRoT2JqZWN0JC52YWx1ZS5tb250aEluZGV4KTtcclxuICAgICAgdGhpcy5wZW5kaW5nWWVhciA9IHZhbHVlLmdldEZ1bGxZZWFyKCk7XHJcbiAgICAgIHRoaXMucGVuZGluZ01vbnRoSW5kZXggPSB2YWx1ZS5nZXRNb250aCgpO1xyXG4gICAgICB0aGlzLnBlbmRpbmdEYXkgPSB2YWx1ZS5nZXREYXRlKCk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKG9iaiA9PT0gbnVsbCB8fCBvYmogPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICBsZXQgbm93ID0gbmV3IERhdGUoKTtcclxuICAgICAgaWYgKCEhdGhpcy5yYW5nZUxpbWl0KSB7XHJcbiAgICAgICAgbm93ID0gdGhpcy5yYW5nZUxpbWl0Lm1pbkRhdGU7XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy50ZXh0VmFsdWUgPSAnJztcclxuICAgICAgdGhpcy5jdXJyZW50TW9udGhPYmplY3QkLm5leHQoe1xyXG4gICAgICAgIHllYXI6IG5vdy5nZXRGdWxsWWVhcigpLFxyXG4gICAgICAgIG1vbnRoSW5kZXg6IG5vdy5nZXRNb250aCgpXHJcbiAgICAgIH0pXHJcbiAgICAgIHRoaXMuY3VycmVudEhvdXJzID0gbm93LmdldEhvdXJzKCk7XHJcbiAgICAgIHRoaXMuY3VycmVudE1pbnV0ZXMgPSBub3cuZ2V0TWludXRlcygpO1xyXG4gICAgICB0aGlzLmN1cnJlbnRTZWNvbmRzID0gbm93LmdldFNlY29uZHMoKTtcclxuICAgICAgdGhpcy5jdXJyZW50TWlsbGlzZWNvbmRzID0gbm93LmdldE1pbGxpc2Vjb25kcygpO1xyXG4gICAgICB0aGlzLmN1cnJlbnRNb250aFRleHQgPSB0aGlzLmNvcmVEYXRldGltZVNlcnZpY2UuZ2V0TW9udGhUZXh0KHRoaXMubGFuZywgdGhpcy5jdXJyZW50TW9udGhPYmplY3QkLnZhbHVlLm1vbnRoSW5kZXgpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgLyogQ29udmVydCBVVEMgZGF0ZSB0byBsb2NhbCBkYXRlICovXHJcbiAgICAgIGNvbnN0IG9yaWdpbmFsRGF0ZTogRGF0ZSA9IG5ldyBEYXRlKG9iaik7XHJcbiAgICAgIGNvbnN0IG9mZnNldCA9IChuZXcgRGF0ZSgpKS5nZXRUaW1lem9uZU9mZnNldCgpO1xyXG4gICAgICBjb25zdCBkYXRlVmFsdWUgPSBuZXcgRGF0ZShvcmlnaW5hbERhdGUuZ2V0VGltZSgpIC0gb2Zmc2V0ICogNjAwMDApO1xyXG4gICAgICAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi9cclxuICAgICAgaWYgKHR5cGVvZiBvYmohLmdldEZ1bGxZZWFyID09PSAnZnVuY3Rpb24nKSB7XHJcbiAgICAgICAgdXBkYXRlUHJvcGVydGllcyhkYXRlVmFsdWUpO1xyXG4gICAgICB9IGVsc2UgaWYgKHR5cGVvZiBvYmogPT09ICdzdHJpbmcnKSB7XHJcbiAgICAgICAgY29uc3QgaXNEYXRlID0gdGhpcy5jb3JlRGF0ZXRpbWVTZXJ2aWNlLmlzRGF0ZVN0cmluZyhvYmopO1xyXG4gICAgICAgIGlmIChpc0RhdGUpIHtcclxuICAgICAgICAgIC8vY29uc3QgX29iaiA9IG5ldyBEYXRlKG9iaik7IC8vIGNvbnZlcnQgc3RyaW5nIHRvIGRhdGUgXHJcbiAgICAgICAgICB1cGRhdGVQcm9wZXJ0aWVzKGRhdGVWYWx1ZSk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXCJJbnZhbGlkIGRhdGUgaW5wdXQ6IFwiLCBvYmopO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgY29uc29sZS5lcnJvcihcIkludmFsaWQgZGF0ZSBpbnB1dDogXCIsIG9iaik7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIG9uSXRlbUNsaWNrKGRhdGU6IERhdGUpIHtcclxuXHJcbiAgICBpZiAodGhpcy5yZWFkb25seSkgcmV0dXJuO1xyXG5cclxuICAgIGlmICghIXRoaXMucmFuZ2VMaW1pdCkge1xyXG4gICAgICBpZiAoZGF0ZSA8IHRoaXMucmFuZ2VMaW1pdC5taW5EYXRlIHx8IGRhdGUgPiB0aGlzLnJhbmdlTGltaXQubWF4RGF0ZSkgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IG5vdyA9IG5ldyBEYXRlKCk7XHJcbiAgICBjb25zdCBoID0gbm93LmdldEhvdXJzKCk7XHJcbiAgICBjb25zdCBtID0gbm93LmdldE1pbnV0ZXMoKTtcclxuICAgIGNvbnN0IHMgPSBub3cuZ2V0U2Vjb25kcygpO1xyXG4gICAgY29uc3QgbXMgPSBub3cuZ2V0TWlsbGlzZWNvbmRzKCk7XHJcbiAgICBkYXRlLnNldEhvdXJzKGgpO1xyXG4gICAgZGF0ZS5zZXRNaW51dGVzKG0pO1xyXG4gICAgZGF0ZS5zZXRTZWNvbmRzKHMpO1xyXG4gICAgZGF0ZS5zZXRNaWxsaXNlY29uZHMobXMpO1xyXG4gICAgdGhpcy50ZXh0VmFsdWUgPSB0aGlzLmNvcmVEYXRldGltZVNlcnZpY2UuZGF0ZVRvVm5TdHJpbmcoZGF0ZSk7XHJcblxyXG4gICAgdGhpcy5wZW5kaW5nWWVhciA9IGRhdGUuZ2V0RnVsbFllYXIoKTtcclxuICAgIHRoaXMucGVuZGluZ01vbnRoSW5kZXggPSBkYXRlLmdldE1vbnRoKCk7XHJcbiAgICB0aGlzLnBlbmRpbmdEYXkgPSBkYXRlLmdldERhdGUoKTtcclxuXHJcbiAgICB0aGlzLm1hcmtBc1RvdWNoZWQoKTtcclxuICAgIFxyXG4gICAgdGhpcy5vbkNoYW5nZShkYXRlKTtcclxuICAgIHRoaXMub3BlblN0YXRlID0gZmFsc2U7XHJcbiAgfVxyXG5cclxuICBnb1RvZGF5KCkge1xyXG4gICAgY29uc3QgdG9kYXkgPSBuZXcgRGF0ZSgpO1xyXG4gICAgaWYgKCEhdGhpcy5yYW5nZUxpbWl0KSB7XHJcbiAgICAgIGlmICh0b2RheSA8IHRoaXMucmFuZ2VMaW1pdC5taW5EYXRlIHx8IHRvZGF5ID4gdGhpcy5yYW5nZUxpbWl0Lm1heERhdGUpIHJldHVybjtcclxuICAgIH1cclxuICAgIHRoaXMudGV4dFZhbHVlID0gdGhpcy5jb3JlRGF0ZXRpbWVTZXJ2aWNlLmRhdGVUb1ZuU3RyaW5nKHRvZGF5KTtcclxuICAgIHRoaXMubWFya0FzVG91Y2hlZCgpO1xyXG4gICAgdGhpcy5vbkNoYW5nZSh0b2RheSk7XHJcbiAgICB0aGlzLm9wZW5TdGF0ZSA9IGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgY2xlYXIoKSB7XHJcbiAgICB0aGlzLnRleHRWYWx1ZSA9ICcnO1xyXG4gICAgdGhpcy52YWx1ZSA9IG51bGw7XHJcbiAgICB0aGlzLmxhc3RUZXh0ID0gJyc7XHJcbiAgICB0aGlzLm1hcmtBc1RvdWNoZWQoKTtcclxuICAgIHRoaXMub25DaGFuZ2UobnVsbCk7XHJcbiAgICB0aGlzLm9wZW5TdGF0ZSA9IGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgZ29CYWNrd2FyZCgpIHtcclxuICAgIHRoaXMuZGlyZWN0aW9uID0gLTE7XHJcbiAgICB0aGlzLmJhY2t3YXJkLm5hdGl2ZUVsZW1lbnQuY2hlY2tlZCA9IHRydWU7XHJcbiAgICBpZiAodGhpcy5jdXJyZW50TW9udGhPYmplY3QkLnZhbHVlLm1vbnRoSW5kZXggPT09IDApIHtcclxuICAgICAgdGhpcy5jdXJyZW50TW9udGhPYmplY3QkLm5leHQoe1xyXG4gICAgICAgIHllYXI6IHRoaXMuY3VycmVudE1vbnRoT2JqZWN0JC52YWx1ZS55ZWFyIC0gMSxcclxuICAgICAgICBtb250aEluZGV4OiAxMVxyXG4gICAgICB9KTtcclxuICAgICAgdGhpcy5jdXJyZW50TW9udGhUZXh0ID0gdGhpcy5jb3JlRGF0ZXRpbWVTZXJ2aWNlLmdldE1vbnRoVGV4dCh0aGlzLmxhbmcsIDExKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuY3VycmVudE1vbnRoT2JqZWN0JC5uZXh0KHtcclxuICAgICAgICB5ZWFyOiB0aGlzLmN1cnJlbnRNb250aE9iamVjdCQudmFsdWUueWVhcixcclxuICAgICAgICBtb250aEluZGV4OiB0aGlzLmN1cnJlbnRNb250aE9iamVjdCQudmFsdWUubW9udGhJbmRleCAtIDFcclxuICAgICAgfSk7XHJcblxyXG4gICAgICB0aGlzLmN1cnJlbnRNb250aFRleHQgPSB0aGlzLmNvcmVEYXRldGltZVNlcnZpY2UuZ2V0TW9udGhUZXh0KHRoaXMubGFuZywgdGhpcy5jdXJyZW50TW9udGhPYmplY3QkLnZhbHVlLm1vbnRoSW5kZXgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZ29Gb3Jld2FyZCgpIHtcclxuICAgIHRoaXMuZGlyZWN0aW9uID0gMTtcclxuICAgIHRoaXMuYmFja3dhcmQubmF0aXZlRWxlbWVudC5jaGVja2VkID0gZmFsc2U7XHJcbiAgICB0aGlzXHJcbiAgICBpZiAodGhpcy5jdXJyZW50TW9udGhPYmplY3QkLnZhbHVlLm1vbnRoSW5kZXggPT09IDExKSB7XHJcbiAgICAgIHRoaXMuY3VycmVudE1vbnRoT2JqZWN0JC5uZXh0KHtcclxuICAgICAgICB5ZWFyOiB0aGlzLmN1cnJlbnRNb250aE9iamVjdCQudmFsdWUueWVhciArIDEsXHJcbiAgICAgICAgbW9udGhJbmRleDogMFxyXG4gICAgICB9KTtcclxuICAgICAgdGhpcy5jdXJyZW50TW9udGhUZXh0ID0gdGhpcy5jb3JlRGF0ZXRpbWVTZXJ2aWNlLmdldE1vbnRoVGV4dCh0aGlzLmxhbmcsIDApO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5jdXJyZW50TW9udGhPYmplY3QkLm5leHQoe1xyXG4gICAgICAgIHllYXI6IHRoaXMuY3VycmVudE1vbnRoT2JqZWN0JC52YWx1ZS55ZWFyLFxyXG4gICAgICAgIG1vbnRoSW5kZXg6IHRoaXMuY3VycmVudE1vbnRoT2JqZWN0JC52YWx1ZS5tb250aEluZGV4ICsgMVxyXG4gICAgICB9KTtcclxuICAgICAgdGhpcy5jdXJyZW50TW9udGhUZXh0ID0gdGhpcy5jb3JlRGF0ZXRpbWVTZXJ2aWNlLmdldE1vbnRoVGV4dCh0aGlzLmxhbmcsIHRoaXMuY3VycmVudE1vbnRoT2JqZWN0JC52YWx1ZS5tb250aEluZGV4KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qIFByb2JhYmx5IHRoZSBtb3N0IGltcG9ydGFudCBmdW5jdGlvbiAqL1xyXG4gIGJ1aWxkQm9keSh5ZWFyOiBudW1iZXIsIG1vbnRoSW5kZXg6IG51bWJlcikge1xyXG4gICAgY29uc3QgYm9keSA9IHRoaXMuY29yZURhdGV0aW1lU2VydmljZS5nZXRDYWxlbmRhckJvZHkoeWVhciwgbW9udGhJbmRleCwgdGhpcy5kaXJlY3Rpb24pO1xyXG4gICAgdGhpcy5kYXRhID0gYm9keS5yb3dzO1xyXG4gICAgdGhpcy5jb250YWluZXIubmF0aXZlRWxlbWVudC5zdHlsZS5zZXRQcm9wZXJ0eSgnLS1zY3JvbGwtZGlzdGFuY2UnLCAoYm9keS5yb3dzLmxlbmd0aCAtIDYpICogdGhpcy5jZWxsU2l6ZSArICdweCcpO1xyXG4gIH1cclxuXHJcbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5saXN0ZW5lckZuKSB0aGlzLmxpc3RlbmVyRm4oKTtcclxuICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5tYXAoeCA9PiB4Py51bnN1YnNjcmliZSgpKVxyXG4gIH1cclxuXHJcbiAgdG9nZ2xlT3BlbigpIHtcclxuICAgIGlmICghIXRoaXMucmVhZG9ubHkpIHJldHVyblxyXG4gICAgaWYgKCEhdGhpcy5kaXNhYmxlZCkgcmV0dXJuXHJcbiAgICB0aGlzLm9wZW5TdGF0ZSA9ICF0aGlzLm9wZW5TdGF0ZTtcclxuICB9XHJcblxyXG4gIHRvZ2dsZU1vbnRoUGlja2VyQWN0aXZlKCkge1xyXG4gICAgdGhpcy5tb250aFBpY2tlckFjdGl2ZSA9ICF0aGlzLm1vbnRoUGlja2VyQWN0aXZlO1xyXG4gIH1cclxuXHJcbiAgb25Nb250aE9iamVjdENoYW5nZShhcmdzOiBJTW9udGhJZGVudGl0eSkge1xyXG4gICAgdGhpcy5jdXJyZW50TW9udGhPYmplY3QkLm5leHQoe1xyXG4gICAgICB5ZWFyOiBhcmdzLnllYXIsXHJcbiAgICAgIG1vbnRoSW5kZXg6IGFyZ3MubW9udGhJbmRleFxyXG4gICAgfSlcclxuICAgIHRoaXMubW9udGhQaWNrZXJBY3RpdmUgPSBmYWxzZTtcclxuICB9XHJcblxyXG4gIG9uTW9udGhQaWNrZXJZZWFyQ2xpY2soZTogbnVtYmVyKSB7XHJcbiAgICB0aGlzLm1vbnRoUGlja2VyQWN0aXZlID0gZmFsc2U7XHJcbiAgICB0aGlzLnllYXJQaWNrZXJBY3RpdmUgPSB0cnVlO1xyXG4gIH1cclxuXHJcbiAgb25ZZWFyUGlja2VkKGU6IG51bWJlcikge1xyXG4gICAgdGhpcy5jdXJyZW50TW9udGhPYmplY3QkLm5leHQoe1xyXG4gICAgICB5ZWFyOiBlLFxyXG4gICAgICBtb250aEluZGV4OiB0aGlzLmN1cnJlbnRNb250aE9iamVjdCQudmFsdWUubW9udGhJbmRleFxyXG4gICAgfSk7XHJcbiAgICB0aGlzLnllYXJQaWNrZXJBY3RpdmUgPSBmYWxzZTtcclxuICAgIHRoaXMubW9udGhQaWNrZXJBY3RpdmUgPSB0cnVlO1xyXG4gIH1cclxufVxyXG4iLCI8ZGl2ICNjb250YWluZXIgY2xhc3M9XCJjb3JlLWRhdGUtcGlja2VyLWNvbnRhaW5lclwiPlxyXG4gICAgPGlucHV0IHR5cGU9XCJjaGVja2JveFwiIFsobmdNb2RlbCldPVwib3BlblN0YXRlXCI+XHJcbiAgICA8aW5wdXQgdHlwZT1cImNoZWNrYm94XCIgWyhuZ01vZGVsKV09XCJtb250aFBpY2tlckFjdGl2ZVwiPlxyXG4gICAgPGlucHV0IHR5cGU9XCJjaGVja2JveFwiIFsobmdNb2RlbCldPVwieWVhclBpY2tlckFjdGl2ZVwiPlxyXG4gICAgPGlucHV0ICNiYWNrd2FyZCB0eXBlPVwiY2hlY2tib3hcIiBjbGFzcz1cInRsLWRhdGVwaWNrZXItZGlyZWN0aW9uXCI+XHJcbiAgICA8aW5wdXQgI2lucHV0IHR5cGU9XCJ0ZXh0XCIgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIiBbcGxhY2Vob2xkZXJdPVwic2hvd1BsYWNlaG9sZGVyID8gJ2RkL21tL3l5eXknIDogJydcIlxyXG4gICAgICAgIG1heGxlbmd0aD1cIjEwXCIgWyhuZ01vZGVsKV09XCJ0ZXh0VmFsdWVcIiBbY2xhc3MuZm9ybS1jb250cm9sLWRpc2FibGVkXT1cImRpc2FibGVkXCIgW2Rpc2FibGVkXT1cImRpc2FibGVkXCI+PGxhYmVsIGNsYXNzPVwiaWNvblwiIChjbGljayk9XCJ0b2dnbGVPcGVuKClcIj48L2xhYmVsPlxyXG4gICAgPGRpdiBjbGFzcz1cInRsLWRhdGUtcGlja2VyLXBvcHVwXCIgW2NsYXNzLm9wZW5dPVwib3BlblN0YXRlXCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImRhdGUtcGlja2VyLXNlc3Npb25cIiBbY2xhc3MuZC1ub25lXT1cIm1vbnRoUGlja2VyQWN0aXZlIHx8IHllYXJQaWNrZXJBY3RpdmVcIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm5hdmlnYXRvclwiPlxyXG4gICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwibW9udGgtZHJvcGRvd25cIiAoY2xpY2spPVwidG9nZ2xlTW9udGhQaWNrZXJBY3RpdmUoKVwiPnt7IGN1cnJlbnRNb250aFRleHQgfX0ge3tcclxuICAgICAgICAgICAgICAgICAgICBjdXJyZW50TW9udGhPYmplY3QkLnZhbHVlLnllYXIgfX08L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImFycm93c1wiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJnby11cFwiIChjbGljayk9XCJnb0JhY2t3YXJkKClcIj48L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZ28tZG93blwiIChjbGljayk9XCJnb0ZvcmV3YXJkKClcIj48L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cIndlZWtkYXktaGVhZGVyXCI+XHJcbiAgICAgICAgICAgICAgICA8dWw+XHJcbiAgICAgICAgICAgICAgICAgICAgPGxpICpuZ0Zvcj1cImxldCBkYXkgb2YgaGVhZGVyV2Vla2RheXM7IGxldCBpID0gaW5kZXhcIiBbY2xhc3MudDddPVwiaT09PTVcIiBbY2xhc3MuY25dPVwiaT09PTZcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdj57eyBkYXkgfX08L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8L2xpPlxyXG4gICAgICAgICAgICAgICAgPC91bD5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjYWxlbmRhci1ib2R5LWNvbnRhaW5lclwiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiAjY2FsZW5kYXJCb2R5IGNsYXNzPVwiY2FsZW5kYXItYm9keVwiIFtjbGFzcy5zbGlkZS11cF09XCJkaXJlY3Rpb249PT0xXCJcclxuICAgICAgICAgICAgICAgICAgICBbY2xhc3Muc2xpZGUtZG93bl09XCJkaXJlY3Rpb249PT0tMVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDx1bCAqbmdGb3I9XCJsZXQgd2VlayBvZiBkYXRhXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxsaSAqbmdGb3I9XCJsZXQgaXRlbSBvZiB3ZWVrLml0ZW1zOyBsZXQgaSA9IGluZGV4XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IFtjbGFzcy5vdXQtb2YtbW9udGhdPVwiISEhaXRlbS5jdXJyZW50TW9udGhcIiBbY2xhc3MudDddPVwiaT09PTVcIiBbY2xhc3MuY25dPVwiaT09PTZcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjbGFzcy5vdXQtb2YtcmFuZ2VdPVwiISFyYW5nZUxpbWl0ICYmICEhISgoaXRlbS5kYXRlVmFsdWU+PXJhbmdlTGltaXQubWluRGF0ZSkgJiYgKHJhbmdlTGltaXQubWF4RGF0ZT49aXRlbS5kYXRlVmFsdWUpKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NsYXNzLmFjdGl2ZV09XCJpdGVtLmRhdGVWYWx1ZS5nZXRGdWxsWWVhcigpPT09cGVuZGluZ1llYXIgJiYgaXRlbS5kYXRlVmFsdWUuZ2V0TW9udGgoKT09PXBlbmRpbmdNb250aEluZGV4ICYmIGl0ZW0uZGF0ZVZhbHVlLmdldERhdGUoKT09PXBlbmRpbmdEYXlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJvbkl0ZW1DbGljayhpdGVtLmRhdGVWYWx1ZSlcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBpdGVtLmRhdGUgfX08L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9saT5cclxuICAgICAgICAgICAgICAgICAgICA8L3VsPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJtb250aC1waWNrZXItc2Vzc2lvblwiIFtjbGFzcy5hY3RpdmVdPVwibW9udGhQaWNrZXJBY3RpdmVcIj5cclxuICAgICAgICAgICAgPGNvcmUtbW9udGgtcGlja2VyIFtsYW5nXT1cImxhbmdcIiBbbW9udGhPYmplY3QkXT1cImN1cnJlbnRNb250aE9iamVjdCRcIiAob25DaGFuZ2UpPVwib25Nb250aE9iamVjdENoYW5nZSgkZXZlbnQpXCIgKG9uWWVhckNsaWNrKT1cIm9uTW9udGhQaWNrZXJZZWFyQ2xpY2soJGV2ZW50KVwiPjwvY29yZS1tb250aC1waWNrZXI+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cInllYXItcGlja2VyLXNlc3Npb25cIiBbY2xhc3MuYWN0aXZlXT1cInllYXJQaWNrZXJBY3RpdmVcIj5cclxuICAgICAgICAgICAgPGNvcmUteWVhci1waWNrZXIgW2xhbmddPVwibGFuZ1wiIChvbkNoYW5nZSk9XCJvblllYXJQaWNrZWQoJGV2ZW50KVwiPjwvY29yZS15ZWFyLXBpY2tlcj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiZm9vdGVyLXdyYXBwZXJcIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNkcC1mb290ZXJcIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjbGVhclwiIFtjbGFzcy5vcGFjaXR5LTBdPVwiISEhdGV4dFZhbHVlXCIgKGNsaWNrKT1cImNsZWFyKClcIj57eyAnVUkuQ09SRV9EQVRFX1BJQ0tFUl9DTEVBUicgfCB0cmFuc2xhdGU6IGxhbmcgfX08L2Rpdj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkaWdpLXdhdGNoXCI+PC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidG9kYXlcIiAoY2xpY2spPVwiZ29Ub2RheSgpXCI+e3sgJ1VJLkNPUkVfREFURV9QSUNLRVJfVE9EQVknIHwgdHJhbnNsYXRlOiBsYW5nIH19PC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbjwvZGl2PiJdfQ==
@@ -7,13 +7,34 @@ import { CommonModule } from '@angular/common';
7
7
  import { ThreedotsComponent } from '../../threedots/threedots.component';
8
8
  import { TranslatePipe } from '../../../app-pipes/translate.pipe';
9
9
  import { MapAvatarToServerPipe } from '../../../app-pipes/map-avatar-to-server.pipe';
10
- //declare let coreFileUtils: any;
11
- import { coreFileUtils } from '../../../../assets/js/coreFileUtils';
12
10
  import * as i0 from "@angular/core";
13
11
  import * as i1 from "../../alert/alert.service";
14
12
  import * as i2 from "../../../services/multi-language.service";
15
13
  import * as i3 from "@angular/common";
16
- const { compressImage, blobToBase64 } = coreFileUtils.prototype;
14
+ //declare let coreFileUtils: any;
15
+ //import { coreFileUtils } from '../../../../assets/js/coreFileUtils';
16
+ //const { compressImage, blobToBase64 } = coreFileUtils.prototype;
17
+ const blobToBase64 = async (blob) => {
18
+ return new Promise((resolve, _) => {
19
+ const reader = new FileReader();
20
+ reader.onloadend = () => resolve(reader.result);
21
+ reader.readAsDataURL(blob);
22
+ });
23
+ };
24
+ const compressImage = async (blob) => {
25
+ const response = await createImageBitmap(blob);
26
+ const { width, height } = response;
27
+ const dWidth = width > height ? 1024 : 1024 * width / height;
28
+ const dHeight = width < height ? 1024 : 1024 / width * height;
29
+ const offscreen = new OffscreenCanvas(dWidth, dHeight);
30
+ const ctx = offscreen.getContext('2d');
31
+ ctx.drawImage(response, 0, 0, dWidth, dHeight);
32
+ const result = offscreen.convertToBlob({
33
+ type: 'image/jpeg',
34
+ quality: 0.9,
35
+ });
36
+ return result;
37
+ };
17
38
  export var EnumCoreFileUploaderType;
18
39
  (function (EnumCoreFileUploaderType) {
19
40
  EnumCoreFileUploaderType["IMAGE_AVATAR"] = "IMAGE_AVATAR";
@@ -182,4 +203,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.3", ngImpor
182
203
  type: ViewChild,
183
204
  args: ['customFileInput']
184
205
  }] } });
185
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29yZS1maWxlLXVwbG9hZGVyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1oaXN0YWZmLWFscGhhL3NyYy9saWIvYXBwL2xpYnJhcmllcy9jb3JlLWZpbGUtdXBsb2FkZXIvY29yZS1maWxlLXVwbG9hZGVyL2NvcmUtZmlsZS11cGxvYWRlci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtaGlzdGFmZi1hbHBoYS9zcmMvbGliL2FwcC9saWJyYXJpZXMvY29yZS1maWxlLXVwbG9hZGVyL2NvcmUtZmlsZS11cGxvYWRlci9jb3JlLWZpbGUtdXBsb2FkZXIuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLFNBQVMsRUFFVCxLQUFLLEVBR0wsU0FBUyxFQUNULFNBQVMsR0FFVixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsNEJBQTRCLEVBQUUsTUFBTSwrREFBK0QsQ0FBQztBQUM3RyxPQUFPLEVBQUUsV0FBVyxFQUFFLGlCQUFpQixFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBSzNFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBRTFELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUMvRCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0scUNBQXFDLENBQUM7QUFDekUsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLG1DQUFtQyxDQUFDO0FBQ2xFLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLDhDQUE4QyxDQUFDO0FBRXJGLGlDQUFpQztBQUNqQyxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0scUNBQXFDLENBQUM7Ozs7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QUs7Z0JBQ0csV0FBVztzQkFBbkIsS0FBSztnQkFDRyxZQUFZO3NCQUFwQixLQUFLO2dCQUN3QixlQUFlO3NCQUE1QyxTQUFTO3VCQUFDLGlCQUFpQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XHJcbiAgQ29tcG9uZW50LFxyXG4gIEVsZW1lbnRSZWYsXHJcbiAgSW5wdXQsXHJcbiAgT25EZXN0cm95LFxyXG4gIE9uSW5pdCxcclxuICBWaWV3Q2hpbGQsXHJcbiAgaXNEZXZNb2RlLFxyXG4gIEluamVjdG9yLFxyXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBDb3JlRm9ybUNvbnRyb2xCYXNlQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vY29yZS1mb3JtLWNvbnRyb2wtYmFzZS9jb3JlLWZvcm0tY29udHJvbC1iYXNlLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IEZvcm1zTW9kdWxlLCBOR19WQUxVRV9BQ0NFU1NPUiwgTmdDb250cm9sIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5cclxuaW1wb3J0IHsgQWxlcnRTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vYWxlcnQvYWxlcnQuc2VydmljZSc7XHJcblxyXG5pbXBvcnQgeyBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgRW51bVRyYW5zbGF0ZUtleSB9IGZyb20gXCJhbHBoYS1nbG9iYWwtY29uc3RhbnRzXCI7XHJcbmltcG9ydCB7IE11bHRpTGFuZ3VhZ2VTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvbXVsdGktbGFuZ3VhZ2Uuc2VydmljZSc7XHJcbmltcG9ydCB7IGFsZXJ0T3B0aW9ucyB9IGZyb20gJy4uLy4uLy4uL2NvbnN0YW50cy9hbGVydE9wdGlvbnMnO1xyXG5pbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xyXG5pbXBvcnQgeyBUaHJlZWRvdHNDb21wb25lbnQgfSBmcm9tICcuLi8uLi90aHJlZWRvdHMvdGhyZWVkb3RzLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IFRyYW5zbGF0ZVBpcGUgfSBmcm9tICcuLi8uLi8uLi9hcHAtcGlwZXMvdHJhbnNsYXRlLnBpcGUnO1xyXG5pbXBvcnQgeyBNYXBBdmF0YXJUb1NlcnZlclBpcGUgfSBmcm9tICcuLi8uLi8uLi9hcHAtcGlwZXMvbWFwLWF2YXRhci10by1zZXJ2ZXIucGlwZSc7XHJcblxyXG4vL2RlY2xhcmUgbGV0IGNvcmVGaWxlVXRpbHM6IGFueTtcclxuaW1wb3J0IHsgY29yZUZpbGVVdGlscyB9IGZyb20gJy4uLy4uLy4uLy4uL2Fzc2V0cy9qcy9jb3JlRmlsZVV0aWxzJztcclxuY29uc3QgeyBjb21wcmVzc0ltYWdlLCBibG9iVG9CYXNlNjQgfSA9IGNvcmVGaWxlVXRpbHMucHJvdG90eXBlO1xyXG5cclxuZXhwb3J0IGVudW0gRW51bUNvcmVGaWxlVXBsb2FkZXJUeXBlIHtcclxuICBJTUFHRV9BVkFUQVIgPSAnSU1BR0VfQVZBVEFSJyxcclxuICBJTUFHRV9PVEhFUiA9ICdJTUFHRV9PVEhFUicsXHJcbiAgUERGID0gJ1BERicsXHJcbiAgRE9DID0gJ0RPQycsXHJcbiAgRVhDRUwgPSAnRVhDRUwnLFxyXG4gIEFVRElPID0gJ0FVRElPJyxcclxuICBPVEhFUiA9ICdPVEhFUicsXHJcbn1cclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnY29yZS1maWxlLXVwbG9hZGVyJyxcclxuICBzdGFuZGFsb25lOiB0cnVlLFxyXG4gIGltcG9ydHM6IFtcclxuICAgIENvbW1vbk1vZHVsZSxcclxuICAgIEZvcm1zTW9kdWxlLFxyXG4gICAgVGhyZWVkb3RzQ29tcG9uZW50LFxyXG4gICAgVHJhbnNsYXRlUGlwZSxcclxuICAgIE1hcEF2YXRhclRvU2VydmVyUGlwZVxyXG4gIF0sXHJcbiAgdGVtcGxhdGVVcmw6ICcuL2NvcmUtZmlsZS11cGxvYWRlci5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJy4vY29yZS1maWxlLXVwbG9hZGVyLmNvbXBvbmVudC5zY3NzJ10sXHJcbiAgcHJvdmlkZXJzOiBbXHJcbiAgICB7XHJcbiAgICAgIHByb3ZpZGU6IE5HX1ZBTFVFX0FDQ0VTU09SLFxyXG4gICAgICBtdWx0aTogdHJ1ZSxcclxuICAgICAgdXNlRXhpc3Rpbmc6IENvcmVGaWxlVXBsb2FkZXJDb21wb25lbnQsXHJcbiAgICB9LFxyXG4gIF0sXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBDb3JlRmlsZVVwbG9hZGVyQ29tcG9uZW50IGV4dGVuZHMgQ29yZUZvcm1Db250cm9sQmFzZUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcclxuICBASW5wdXQoKSB1cGxvYWRGaWxlVHlwZSE6IEVudW1Db3JlRmlsZVVwbG9hZGVyVHlwZTtcclxuICBASW5wdXQoKSBmaWxlRGF0YUNvbnRyb2xOYW1lITogc3RyaW5nO1xyXG4gIEBJbnB1dCgpIGZpbGVOYW1lQ29udHJvbE5hbWUhOiBzdHJpbmc7XHJcbiAgQElucHV0KCkgZmlsZVR5cGVDb250cm9sTmFtZSE6IHN0cmluZztcclxuICBASW5wdXQoKSBhdmF0YXJTaXplITogbnVtYmVyO1xyXG4gIEBJbnB1dCgpIGRlZmF1bHRBdmF0YXIhOiBzdHJpbmc7XHJcbiAgQElucHV0KCkgaGlkZVByZXZpZXchOiBib29sZWFuO1xyXG4gIEBJbnB1dCgpIHZlcnRpY2FsTW9kZSE6IGJvb2xlYW47XHJcbiAgQFZpZXdDaGlsZCgnY3VzdG9tRmlsZUlucHV0JykgY3VzdG9tRmlsZUlucHV0ITogRWxlbWVudFJlZjtcclxuXHJcbiAgb3ZlcnJpZGUgdmFsdWUhOiBzdHJpbmc7XHJcblxyXG4gIG5nQ29udHJvbCE6IE5nQ29udHJvbDtcclxuXHJcbiAgaG92ZXJUZXh0ID1cclxuICAgIEVudW1UcmFuc2xhdGVLZXkuVUlfQ09SRV9DT05UUk9MX0ZJTEVfVVBMT0FERVJfQ0xJQ0tfVE9fQlJPV1NFX0ZJTEU7XHJcbiAgbGFuZyE6IHN0cmluZztcclxuICBzdWJzY3JpcHRpb25zOiBTdWJzY3JpcHRpb25bXSA9IFtdO1xyXG4gIGNob3NlbkZpbGU6IGFueTtcclxuICBjb21wcmVzc2VkU2l6ZTogYW55O1xyXG4gIHByZXZpZXc6IGFueTtcclxuICBsb2FkaW5nOiBib29sZWFuID0gZmFsc2U7XHJcbiAgbG9hZGluZ0NhcHRpb24hOiBzdHJpbmc7XHJcblxyXG4gIGFjY2VwdCE6IHN0cmluZztcclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwcml2YXRlIGFsZXJ0U2VydmljZTogQWxlcnRTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBtbHM6IE11bHRpTGFuZ3VhZ2VTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBpbmplY3RvcjogSW5qZWN0b3JcclxuICApIHtcclxuICAgIHN1cGVyKCk7XHJcbiAgfVxyXG5cclxuICBuZ09uSW5pdCgpOiB2b2lkIHtcclxuICAgIHNldFRpbWVvdXQoKCkgPT4gdGhpcy5uZ0NvbnRyb2wgPSB0aGlzLmluamVjdG9yLmdldChOZ0NvbnRyb2wpKTtcclxuXHJcbiAgICBpZiAoaXNEZXZNb2RlKCkgJiYgISEhdGhpcy51cGxvYWRGaWxlVHlwZSkge1xyXG4gICAgICB0aGlzLmFsZXJ0U2VydmljZS5lcnJvcihcclxuICAgICAgICBgVXNpbmcgQ29yZUZpbGVVcGxvYWRlckNvbXBvbmVudCByZXF1aXJlZCBwcm9wZXJ0eSB1cGxvYWRGaWxlVHlwZSE6IEVudW1Db3JlRmlsZVVwbG9hZGVyVHlwZWAsXHJcbiAgICAgICAgeyAuLi5hbGVydE9wdGlvbnMsIGF1dG9DbG9zZTogZmFsc2UgfVxyXG4gICAgICApO1xyXG4gICAgfVxyXG4gICAgaWYgKGlzRGV2TW9kZSgpICYmICEhIXRoaXMuZmlsZURhdGFDb250cm9sTmFtZSkge1xyXG4gICAgICB0aGlzLmFsZXJ0U2VydmljZS5lcnJvcihcclxuICAgICAgICBgVXNpbmcgQ29yZUZpbGVVcGxvYWRlckNvbXBvbmVudCByZXF1aXJlZCBwcm9wZXJ0eSBmaWxlRGF0YUNvbnRyb2xOYW1lITogc3RyaW5nIChiYXNlNjQpYCxcclxuICAgICAgICB7IC4uLmFsZXJ0T3B0aW9ucywgYXV0b0Nsb3NlOiBmYWxzZSB9XHJcbiAgICAgICk7XHJcbiAgICB9XHJcbiAgICBpZiAoaXNEZXZNb2RlKCkgJiYgISEhdGhpcy5maWxlTmFtZUNvbnRyb2xOYW1lKSB7XHJcbiAgICAgIHRoaXMuYWxlcnRTZXJ2aWNlLmVycm9yKFxyXG4gICAgICAgIGBVc2luZyBDb3JlRmlsZVVwbG9hZGVyQ29tcG9uZW50IHJlcXVpcmVkIHByb3BlcnR5IGZpbGVOYW1lQ29udHJvbE5hbWUhOiBzdHJpbmdgLFxyXG4gICAgICAgIHsgLi4uYWxlcnRPcHRpb25zLCBhdXRvQ2xvc2U6IGZhbHNlIH1cclxuICAgICAgKTtcclxuICAgIH1cclxuICAgIGlmIChpc0Rldk1vZGUoKSAmJiAhISF0aGlzLmZpbGVUeXBlQ29udHJvbE5hbWUpIHtcclxuICAgICAgdGhpcy5hbGVydFNlcnZpY2UuZXJyb3IoXHJcbiAgICAgICAgYFVzaW5nIENvcmVGaWxlVXBsb2FkZXJDb21wb25lbnQgcmVxdWlyZWQgcHJvcGVydHkgZmlsZVR5cGVDb250cm9sTmFtZSE6IHN0cmluZ2AsXHJcbiAgICAgICAgeyAuLi5hbGVydE9wdGlvbnMsIGF1dG9DbG9zZTogZmFsc2UgfVxyXG4gICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKHRoaXMubWxzLmxhbmckLnN1YnNjcmliZSgoeCkgPT4gKHRoaXMubGFuZyA9IHgpKSk7XHJcblxyXG4gICAgaWYgKFxyXG4gICAgICB0aGlzLnVwbG9hZEZpbGVUeXBlID09PSBFbnVtQ29yZUZpbGVVcGxvYWRlclR5cGUuSU1BR0VfQVZBVEFSIHx8XHJcbiAgICAgIHRoaXMudXBsb2FkRmlsZVR5cGUgPT09IEVudW1Db3JlRmlsZVVwbG9hZGVyVHlwZS5JTUFHRV9PVEhFUlxyXG4gICAgKSB7XHJcbiAgICAgIHRoaXMuYWNjZXB0ID0gJ2ltYWdlL3BuZywgaW1hZ2UvZ2lmLCBpbWFnZS9qcGVnJztcclxuICAgIH0gZWxzZSBpZiAoXHJcbiAgICAgIHRoaXMudXBsb2FkRmlsZVR5cGUgPT09IEVudW1Db3JlRmlsZVVwbG9hZGVyVHlwZS5QREZcclxuICAgICkge1xyXG4gICAgICB0aGlzLmFjY2VwdCA9IFwiYXBwbGljYXRpb24vcGRmXCI7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLmFsZXJ0U2VydmljZS53YXJuKFxyXG4gICAgICAgIGBXaGVuIHVwbG9hZEZpbGVUeXBlPT09JHt0aGlzLnVwbG9hZEZpbGVUeXBlfSA9PiBUTyBETy4uLmAsXHJcbiAgICAgICAgeyAuLi5hbGVydE9wdGlvbnMsIGF1dG9DbG9zZTogZmFsc2UgfVxyXG4gICAgICApO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgb25Ib3ZlcigpIHtcclxuICAgIGNvbnNvbGUubG9nKCdvbkhvdmVyJyk7XHJcbiAgICB0aGlzLmN1c3RvbUZpbGVJbnB1dC5uYXRpdmVFbGVtZW50LnN0eWxlLnNldFByb3BlcnR5KFxyXG4gICAgICAnLS1ob3Zlci10ZXh0JyxcclxuICAgICAgdGhpcy5ob3ZlclRleHRcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBoYW5kbGVJbnB1dENoYW5nZShlOiBhbnkpIHtcclxuICAgIGNvbnNvbGUubG9nKCdoYW5kbGVJbnB1dENoYW5nZSBlJywgZSk7XHJcbiAgICBpZiAoIXRoaXMuaGFzRmlsZVNpemUoZS50YXJnZXQuZmlsZXNbMF0uc2l6ZSkpIHtcclxuICAgICAgdGhpcy5hbGVydFNlcnZpY2UuZXJyb3IoXHJcbiAgICAgICAgYEZpbGUgc2l6ZSBleGNlZWRzIDNNQi5gLFxyXG4gICAgICAgIHsgLi4uYWxlcnRPcHRpb25zLCBhdXRvQ2xvc2U6IGZhbHNlIH1cclxuICAgICAgKTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgaWYgKCEhZS50YXJnZXQuZmlsZXMubGVuZ3RoKSB7XHJcbiAgICAgIGNvbnN0IGZpbGUgPSBlLnRhcmdldC5maWxlc1swXTtcclxuICAgICAgY29uc29sZS5sb2coJ2hhbmRsZUlucHV0Q2hhbmdlIGZpbGUnLCBmaWxlKTtcclxuICAgICAgdGhpcy5jaG9zZW5GaWxlID0gZmlsZTtcclxuXHJcbiAgICAgIGlmIChcclxuICAgICAgICBmaWxlLnR5cGUuc3BsaXQoJy8nKVswXSA9PT0gJ2ltYWdlJyB8fFxyXG4gICAgICAgIGZpbGUudHlwZS5zcGxpdCgnLycpWzBdID09PSAnYXBwbGljYXRpb24nXHJcbiAgICAgICkge1xyXG4gICAgICAgIGNvbnN0IGJsb2IgPSBuZXcgQmxvYihbZmlsZV0pO1xyXG4gICAgICAgIGlmIChmaWxlLnR5cGUgIT09ICdpbWFnZS9naWYnKSB7XHJcbiAgICAgICAgICBjb21wcmVzc0ltYWdlKGJsb2IpLnRoZW4oKGJsb2I6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLmNvbXByZXNzZWRTaXplID0gYmxvYi5zaXplO1xyXG4gICAgICAgICAgICBibG9iVG9CYXNlNjQoYmxvYikudGhlbigoYmFzZTY0OiBhbnkpID0+IHtcclxuICAgICAgICAgICAgICB0aGlzLnByZXZpZXcgPSBiYXNlNjQ7XHJcblxyXG4gICAgICAgICAgICAgIGNvbnN0IGluZGV4ID0gKGJhc2U2NCBhcyBzdHJpbmcpLmluZGV4T2YoJ2Jhc2U2NCwnKTtcclxuICAgICAgICAgICAgICBpZiAoaW5kZXggPj0gMCkge1xyXG4gICAgICAgICAgICAgICAgYmFzZTY0ID0gKGJhc2U2NCBhcyBzdHJpbmcpLnN1YnN0cmluZyhpbmRleCArIDcpO1xyXG4gICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgdGhpcy5vbkNoYW5nZShiYXNlNjQpO1xyXG5cclxuICAgICAgICAgICAgICBjb25zdCBmb3JtID0gdGhpcy5uZ0NvbnRyb2wuY29udHJvbD8ucGFyZW50O1xyXG4gICAgICAgICAgICAgIGNvbnN0IG9iamVjdFRvUGF0Y2g6IGFueSA9IHt9O1xyXG4gICAgICAgICAgICAgIG9iamVjdFRvUGF0Y2hbdGhpcy5maWxlRGF0YUNvbnRyb2xOYW1lXSA9IGJhc2U2NDtcclxuICAgICAgICAgICAgICBvYmplY3RUb1BhdGNoW3RoaXMuZmlsZU5hbWVDb250cm9sTmFtZV0gPSBmaWxlLm5hbWU7XHJcbiAgICAgICAgICAgICAgb2JqZWN0VG9QYXRjaFt0aGlzLmZpbGVUeXBlQ29udHJvbE5hbWVdID0gZmlsZS50eXBlO1xyXG4gICAgICAgICAgICAgIGZvcm0/LnBhdGNoVmFsdWUob2JqZWN0VG9QYXRjaCk7XHJcblxyXG4gICAgICAgICAgICAgIHRoaXMubWFya0FzVG91Y2hlZCgpO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBibG9iVG9CYXNlNjQoYmxvYikudGhlbigoYmFzZTY0OiBhbnkpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5jb21wcmVzc2VkU2l6ZSA9IGJsb2Iuc2l6ZTtcclxuICAgICAgICAgICAgdGhpcy5wcmV2aWV3ID0gYmFzZTY0O1xyXG5cclxuICAgICAgICAgICAgY29uc3QgaW5kZXggPSAoYmFzZTY0IGFzIHN0cmluZykuaW5kZXhPZignYmFzZTY0LCcpO1xyXG4gICAgICAgICAgICBpZiAoaW5kZXggPj0gMCkge1xyXG4gICAgICAgICAgICAgIGJhc2U2NCA9IChiYXNlNjQgYXMgc3RyaW5nKS5zdWJzdHJpbmcoaW5kZXggKyA3KTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgdGhpcy5vbkNoYW5nZShiYXNlNjQpO1xyXG5cclxuICAgICAgICAgICAgY29uc3QgZm9ybSA9IHRoaXMubmdDb250cm9sLmNvbnRyb2w/LnBhcmVudDtcclxuICAgICAgICAgICAgY29uc3Qgb2JqZWN0VG9QYXRjaDogYW55ID0ge307XHJcbiAgICAgICAgICAgIG9iamVjdFRvUGF0Y2hbdGhpcy5maWxlRGF0YUNvbnRyb2xOYW1lXSA9IGJhc2U2NDtcclxuICAgICAgICAgICAgb2JqZWN0VG9QYXRjaFt0aGlzLmZpbGVOYW1lQ29udHJvbE5hbWVdID0gZmlsZS5uYW1lO1xyXG4gICAgICAgICAgICBvYmplY3RUb1BhdGNoW3RoaXMuZmlsZVR5cGVDb250cm9sTmFtZV0gPSBmaWxlLnR5cGU7XHJcbiAgICAgICAgICAgIGZvcm0/LnBhdGNoVmFsdWUob2JqZWN0VG9QYXRjaCk7XHJcblxyXG4gICAgICAgICAgICB0aGlzLm1hcmtBc1RvdWNoZWQoKTtcclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgICAgfSBlbHNlIGlmIChmaWxlLnR5cGUuc3BsaXQoJy8nKVswXSA9PT0gJ2F1ZGlvJykge1xyXG4gICAgICAgIGNvbnNvbGUubG9nKCdUbyBkbycpO1xyXG4gICAgICB9IGVsc2Uge1xyXG5cclxuICAgICAgfVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5wcmV2aWV3ID0gJyc7XHJcbiAgICAgIHRoaXMub25DaGFuZ2UoJycpO1xyXG4gICAgICB0aGlzLm1hcmtBc1RvdWNoZWQoKTtcclxuICAgICAgdGhpcy5jaG9zZW5GaWxlID0gJyc7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBoYXNGaWxlU2l6ZShmaWxlU2l6ZSA6IGFueSkge1xyXG4gICAgaWYgKGZpbGVTaXplIDwgMyAqIDEwMjQgKiAxMDI0KSB7IHJldHVybiB0cnVlOyB9XHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbiAgfVxyXG5cclxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcclxuICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5tYXAoKHgpID0+IHg/LnVuc3Vic2NyaWJlKCkpO1xyXG4gIH1cclxufVxyXG4iLCI8ZGl2IGNsYXNzPVwiY29yZS1maWxlLXVwbG9hZGVyLWNvbnRhaW5lclwiPlxyXG5cclxuICAgIDxkaXYgKm5nSWY9XCIhISF2ZXJ0aWNhbE1vZGVcIj5cclxuXHJcbiAgICAgICAgPGRpdiBjbGFzcz1cInJvd1wiPlxyXG4gICAgICAgICAgICA8ZGl2IFtjbGFzc109XCIhIWhpZGVQcmV2aWV3ID8gJ2NvbC1tZC0xMicgOiAnY29sLW1kLTYnXCI+XHJcbiAgICAgICAgICAgICAgICA8aW5wdXQgaWQ9XCJjdXN0b20tZmlsZS1pbnB1dFwiICNjdXN0b21GaWxlSW5wdXQgY2xhc3M9XCJjdXN0b20tZmlsZS1pbnB1dFwiIHR5cGU9XCJmaWxlXCIgW2FjY2VwdF09XCJhY2NlcHRcIlxyXG4gICAgICAgICAgICAgICAgICAgIChjaGFuZ2UpPVwiaGFuZGxlSW5wdXRDaGFuZ2UoJGV2ZW50KVwiIChob3Zlcik9XCJvbkhvdmVyKClcIj5cclxuICAgICAgICAgICAgICAgIDxsYWJlbCBpZD1cImZpbGUtaW5wdXQtbGFiZWxcIiBmb3I9XCJjdXN0b20tZmlsZS1pbnB1dFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxpbWcgKm5nSWY9XCJ1cGxvYWRGaWxlVHlwZT09PSdJTUFHRV9BVkFUQVInXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgW3NyY109XCIhISFoaWRlUHJldmlldyA/ICh2YWx1ZSA/ICh2YWx1ZSB8IG1hcEF2YXRhclRvU2VydmVyKSA6IGRlZmF1bHRBdmF0YXIpIDogKHByZXZpZXcgPyBwcmV2aWV3IDogZGVmYXVsdEF2YXRhcilcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImF2YXRhci1wcmV2aWV3XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cInVwbG9hZEZpbGVUeXBlIT09J0lNQUdFX0FWQVRBUidcIj57eydFWElTVElORyBGSUxFLi4uJ319PC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgPGxhYmVsIGlkPVwiZmlsZS1pbnB1dC1sYWJlbFwiIGZvcj1cImN1c3RvbS1maWxlLWlucHV0XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJmaWxlXCIgKm5nSWY9XCJ1cGxvYWRGaWxlVHlwZSE9PSdJTUFHRV9BVkFUQVInXCIgW3NyY109XCJ2YWx1ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIChjaGFuZ2UpPVwiaGFuZGxlSW5wdXRDaGFuZ2UoJGV2ZW50KVwiIGNsYXNzPVwiXCI+XHJcbiAgICAgICAgICAgICAgICA8L2xhYmVsPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC0yXCIgKm5nSWY9XCIhISFoaWRlUHJldmlld1wiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cIiEhIWxvYWRpbmdcIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic2VsZWN0ZWQtcHJldmlld1wiICpuZ0lmPVwicHJldmlld1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8aW1nIFtzcmNdPVwicHJldmlld1wiIGFsdD1cInNlbGVjdGVkLWZpbGVcIj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPGFwcC10aHJlZWRvdHMgKm5nSWY9XCIhIWxvYWRpbmdcIj48L2FwcC10aHJlZWRvdHM+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTQgZC1ub25lXCIgKm5nSWY9XCIhISFoaWRlUHJldmlld1wiPlxyXG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiEhY2hvc2VuRmlsZVwiPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgJ1VJX0NPUkVfRklMRV9VUExPQURFUl9GSUxFX05BTUUnIHwgdHJhbnNsYXRlOiBsYW5nIH19OlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IGNob3NlbkZpbGU/Lm5hbWUgfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyAnVUlfQ09SRV9GSUxFX1VQTE9BREVSX0ZJTEVfVFlQRScgfCB0cmFuc2xhdGU6IGxhbmcgfX06XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgY2hvc2VuRmlsZT8udHlwZSB9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7ICdVSV9DT1JFX0ZJTEVfVVBMT0FERVJfRklMRV9TSVpFJyB8IHRyYW5zbGF0ZTogbGFuZyB9fTpcclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBjaG9zZW5GaWxlPy5zaXplIH19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICA8IS0tIDxuZy1jb250YWluZXIgKm5nSWY9XCIhIWNvbXByZXNzZWRTaXplXCI+XHJcbiAgICAgICAgICAgIDxkaXY+XHJcbiAgICAgICAgICAgICAgICA8ZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIHt7ICdVSV9DT1JFX0ZJTEVfVVBMT0FERVJfRklMRV9TSVpFX0NPTVBSRVNTRUQnIHwgdHJhbnNsYXRlOiBsYW5nIH19OlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8ZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIHt7IGNvbXByZXNzZWRTaXplIH19XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9uZy1jb250YWluZXI+IC0tPlxyXG4gICAgPC9kaXY+XHJcblxyXG4gICAgPGRpdiAqbmdJZj1cIiEhdmVydGljYWxNb2RlXCIgY2xhc3M9XCJtdDIwXCI+XHJcblxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJjb250YWluZXIgY29udGFpbmVyLWZsdWlkXCI+XHJcblxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93XCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSdjb2wtbWQtMTInPlxyXG4gICAgICAgICAgICAgICAgICAgIDxpbnB1dCBpZD1cImN1c3RvbS1maWxlLWlucHV0XCIgI2N1c3RvbUZpbGVJbnB1dCBjbGFzcz1cImN1c3RvbS1maWxlLWlucHV0XCIgdHlwZT1cImZpbGVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbYWNjZXB0XT1cImFjY2VwdFwiIChjaGFuZ2UpPVwiaGFuZGxlSW5wdXRDaGFuZ2UoJGV2ZW50KVwiIChob3Zlcik9XCJvbkhvdmVyKClcIj5cclxuICAgICAgICAgICAgICAgICAgICA8bGFiZWwgaWQ9XCJmaWxlLWlucHV0LWxhYmVsXCIgZm9yPVwiY3VzdG9tLWZpbGUtaW5wdXRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGltZyAqbmdJZj1cInVwbG9hZEZpbGVUeXBlPT09J0lNQUdFX0FWQVRBUidcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW3NyY109XCIhISFoaWRlUHJldmlldyA/ICh2YWx1ZSA/ICh2YWx1ZSB8IG1hcEF2YXRhclRvU2VydmVyKSA6IGRlZmF1bHRBdmF0YXIpIDogKCh2YWx1ZSAmJiAhISFwcmV2aWV3KSA/ICh2YWx1ZSB8IG1hcEF2YXRhclRvU2VydmVyKSA6IChwcmV2aWV3ID8gcHJldmlldyA6IGRlZmF1bHRBdmF0YXIpKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImF2YXRhci1wcmV2aWV3XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJ1cGxvYWRGaWxlVHlwZSE9PSdJTUFHRV9BVkFUQVInXCI+e3snRVhJU1RJTkcgRklMRS4uLid9fTwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGlkPVwiZmlsZS1pbnB1dC1sYWJlbFwiIGZvcj1cImN1c3RvbS1maWxlLWlucHV0XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwiZmlsZVwiICpuZ0lmPVwidXBsb2FkRmlsZVR5cGUhPT0nSU1BR0VfQVZBVEFSJ1wiIFtzcmNdPVwidmFsdWVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNoYW5nZSk9XCJoYW5kbGVJbnB1dENoYW5nZSgkZXZlbnQpXCIgY2xhc3M9XCJcIj5cclxuICAgICAgICAgICAgICAgICAgICA8L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvd1wiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC0xMlwiICpuZ0lmPVwiISEhaGlkZVByZXZpZXdcIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiISEhbG9hZGluZ1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic2VsZWN0ZWQtcHJldmlld1wiICpuZ0lmPVwicHJldmlld1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBbc3JjXT1cInByZXZpZXdcIiBhbHQ9XCJzZWxlY3RlZC1maWxlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDxhcHAtdGhyZWVkb3RzICpuZ0lmPVwiISFsb2FkaW5nXCI+PC9hcHAtdGhyZWVkb3RzPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvdyBkLW5vbmVcIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtMTJcIiAqbmdJZj1cIiEhIWhpZGVQcmV2aWV3XCI+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhIWNob3NlbkZpbGVcIj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9J2NvbC1tZC02Jz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyAnVUlfQ09SRV9GSUxFX1VQTE9BREVSX0ZJTEVfTkFNRScgfCB0cmFuc2xhdGU6IGxhbmcgfX06XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9J2NvbC1tZC02Jz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBjaG9zZW5GaWxlPy5uYW1lIH19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSdjb2wtbWQtNic+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgJ1VJX0NPUkVfRklMRV9VUExPQURFUl9GSUxFX1RZUEUnIHwgdHJhbnNsYXRlOiBsYW5nIH19OlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSdjb2wtbWQtNic+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgY2hvc2VuRmlsZT8udHlwZSB9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvd1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0nY29sLW1kLTYnPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7ICdVSV9DT1JFX0ZJTEVfVVBMT0FERVJfRklMRV9TSVpFJyB8IHRyYW5zbGF0ZTogbGFuZyB9fTpcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0nY29sLW1kLTYnPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IGNob3NlbkZpbGU/LnNpemUgfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhIWNvbXByZXNzZWRTaXplXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9J2NvbC1tZC02Jz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyAnVUlfQ09SRV9GSUxFX1VQTE9BREVSX0ZJTEVfU0laRV9DT01QUkVTU0VEJyB8IHRyYW5zbGF0ZTogbGFuZyB9fTpcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0nY29sLW1kLTYnPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IGNvbXByZXNzZWRTaXplIH19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcblxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICA8L2Rpdj5cclxuXHJcbjwvZGl2PiJdfQ==
206
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29yZS1maWxlLXVwbG9hZGVyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1oaXN0YWZmLWFscGhhL3NyYy9saWIvYXBwL2xpYnJhcmllcy9jb3JlLWZpbGUtdXBsb2FkZXIvY29yZS1maWxlLXVwbG9hZGVyL2NvcmUtZmlsZS11cGxvYWRlci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtaGlzdGFmZi1hbHBoYS9zcmMvbGliL2FwcC9saWJyYXJpZXMvY29yZS1maWxlLXVwbG9hZGVyL2NvcmUtZmlsZS11cGxvYWRlci9jb3JlLWZpbGUtdXBsb2FkZXIuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLFNBQVMsRUFFVCxLQUFLLEVBR0wsU0FBUyxFQUNULFNBQVMsR0FFVixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsNEJBQTRCLEVBQUUsTUFBTSwrREFBK0QsQ0FBQztBQUM3RyxPQUFPLEVBQUUsV0FBVyxFQUFFLGlCQUFpQixFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBSzNFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBRTFELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUMvRCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0scUNBQXFDLENBQUM7QUFDekUsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLG1DQUFtQyxDQUFDO0FBQ2xFLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLDhDQUE4QyxDQUFDOzs7OztBQUVyRixpQ0FBaUM7QUFDakMsc0VBQXNFO0FBQ3RFLGtFQUFrRTtBQUVsRSxNQUFNLFlBQVksR0FBRyxLQUFLLEVBQUUsSUFBSSxFQUFFLEVBQUU7SUFDbEMsT0FBTyxJQUFJLE9BQU8sQ0FBQyxDQUFDLE9BQU8sRUFBRSxDQUFDLEVBQUUsRUFBRTtRQUM5QixNQUFNLE1BQU0sR0FBRyxJQUFJLFVBQVUsRUFBRSxDQUFBO1FBQy9CLE1BQU0sQ0FBQyxTQUFTLEdBQUcsR0FBRyxFQUFFLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQTtRQUMvQyxNQUFNLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxDQUFBO0lBQzlCLENBQUMsQ0FBQyxDQUFBO0FBQ0osQ0FBQyxDQUFBO0FBRUQsTUFBTSxhQUFhLEdBQUcsS0FBSyxFQUFDLElBQUksRUFBQyxFQUFFO0lBQ2pDLE1BQU0sUUFBUSxHQUFHLE1BQU0saUJBQWlCLENBQUMsSUFBSSxDQUFDLENBQUE7SUFDOUMsTUFBTSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsR0FBRyxRQUFRLENBQUE7SUFDbEMsTUFBTSxNQUFNLEdBQUcsS0FBSyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLEdBQUcsS0FBSyxHQUFHLE1BQU0sQ0FBQTtJQUM1RCxNQUFNLE9BQU8sR0FBRyxLQUFLLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksR0FBRyxLQUFLLEdBQUcsTUFBTSxDQUFBO0lBQzdELE1BQU0sU0FBUyxHQUFHLElBQUksZUFBZSxDQUFDLE1BQU0sRUFBRSxPQUFPLENBQUMsQ0FBQTtJQUN0RCxNQUFNLEdBQUcsR0FBRyxTQUFTLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFBO0lBQ3RDLEdBQUksQ0FBQyxTQUFTLENBQUMsUUFBUSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsTUFBTSxFQUFFLE9BQU8sQ0FBQyxDQUFBO0lBQy9DLE1BQU0sTUFBTSxHQUFHLFNBQVMsQ0FBQyxhQUFhLENBQUM7UUFDbkMsSUFBSSxFQUFFLFlBQVk7UUFDbEIsT0FBTyxFQUFFLEdBQUc7S0FDZixDQUFDLENBQUE7SUFDRixPQUFPLE1BQU0sQ0FBQztBQUNoQixDQUFDLENBQUE7QUFFRCxNQUFNLENBQU4sSUFBWSx3QkFRWDtBQVJELFdBQVksd0JBQXdCO0lBQ2xDLHlEQUE2QixDQUFBO0lBQzdCLHVEQUEyQixDQUFBO0lBQzNCLHVDQUFXLENBQUE7SUFDWCx1Q0FBVyxDQUFBO0lBQ1gsMkNBQWUsQ0FBQTtJQUNmLDJDQUFlLENBQUE7SUFDZiwyQ0FBZSxDQUFBO0FBQ2pCLENBQUMsRUFSVyx3QkFBd0IsS0FBeEIsd0JBQXdCLFFBUW5DO0FBc0JELE1BQU0sT0FBTyx5QkFBMEIsU0FBUSw0QkFBNEI7SUEyQnpFLFlBQ1UsWUFBMEIsRUFDMUIsR0FBeUIsRUFDekIsUUFBa0I7UUFFMUIsS0FBSyxFQUFFLENBQUM7UUFKQSxpQkFBWSxHQUFaLFlBQVksQ0FBYztRQUMxQixRQUFHLEdBQUgsR0FBRyxDQUFzQjtRQUN6QixhQUFRLEdBQVIsUUFBUSxDQUFVO1FBZjVCLGNBQVMsR0FDUCxnQkFBZ0IsQ0FBQyxrREFBa0QsQ0FBQztRQUV0RSxrQkFBYSxHQUFtQixFQUFFLENBQUM7UUFJbkMsWUFBTyxHQUFZLEtBQUssQ0FBQztJQVd6QixDQUFDO0lBRUQsUUFBUTtRQUNOLFVBQVUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUM7UUFFaEUsSUFBSSxTQUFTLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsY0FBYyxFQUFFO1lBQ3pDLElBQUksQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUNyQiw2RkFBNkYsRUFDN0YsRUFBRSxHQUFHLFlBQVksRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLENBQ3RDLENBQUM7U0FDSDtRQUNELElBQUksU0FBUyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLG1CQUFtQixFQUFFO1lBQzlDLElBQUksQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUNyQix5RkFBeUYsRUFDekYsRUFBRSxHQUFHLFlBQVksRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLENBQ3RDLENBQUM7U0FDSDtRQUNELElBQUksU0FBUyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLG1CQUFtQixFQUFFO1lBQzlDLElBQUksQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUNyQixnRkFBZ0YsRUFDaEYsRUFBRSxHQUFHLFlBQVksRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLENBQ3RDLENBQUM7U0FDSDtRQUNELElBQUksU0FBUyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLG1CQUFtQixFQUFFO1lBQzlDLElBQUksQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUNyQixnRkFBZ0YsRUFDaEYsRUFBRSxHQUFHLFlBQVksRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLENBQ3RDLENBQUM7U0FDSDtRQUVELElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUUxRSxJQUNFLElBQUksQ0FBQyxjQUFjLEtBQUssd0JBQXdCLENBQUMsWUFBWTtZQUM3RCxJQUFJLENBQUMsY0FBYyxLQUFLLHdCQUF3QixDQUFDLFdBQVcsRUFDNUQ7WUFDQSxJQUFJLENBQUMsTUFBTSxHQUFHLGtDQUFrQyxDQUFDO1NBQ2xEO2FBQU0sSUFDTCxJQUFJLENBQUMsY0FBYyxLQUFLLHdCQUF3QixDQUFDLEdBQUcsRUFDcEQ7WUFDQSxJQUFJLENBQUMsTUFBTSxHQUFHLGlCQUFpQixDQUFDO1NBQ2pDO2FBQU07WUFDTCxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FDcEIseUJBQXlCLElBQUksQ0FBQyxjQUFjLGNBQWMsRUFDMUQsRUFBRSxHQUFHLFlBQVksRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLENBQ3RDLENBQUM7U0FDSDtJQUNILENBQUM7SUFFRCxPQUFPO1FBQ0wsT0FBTyxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUN2QixJQUFJLENBQUMsZUFBZSxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsV0FBVyxDQUNsRCxjQUFjLEVBQ2QsSUFBSSxDQUFDLFNBQVMsQ0FDZixDQUFDO0lBQ0osQ0FBQztJQUVELGlCQUFpQixDQUFDLENBQU07UUFDdEIsT0FBTyxDQUFDLEdBQUcsQ0FBQyxxQkFBcUIsRUFBRSxDQUFDLENBQUMsQ0FBQztRQUN0QyxJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBRTtZQUM3QyxJQUFJLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FDckIsd0JBQXdCLEVBQ3hCLEVBQUUsR0FBRyxZQUFZLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxDQUN0QyxDQUFDO1lBQ0YsT0FBTztTQUNSO1FBQ0QsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsTUFBTSxFQUFFO1lBQzNCLE1BQU0sSUFBSSxHQUFHLENBQUMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQy9CLE9BQU8sQ0FBQyxHQUFHLENBQUMsd0JBQXdCLEVBQUUsSUFBSSxDQUFDLENBQUM7WUFDNUMsSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUM7WUFFdkIsSUFDRSxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxPQUFPO2dCQUNuQyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxhQUFhLEVBQ3pDO2dCQUNBLE1BQU0sSUFBSSxHQUFHLElBQUksSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztnQkFDOUIsSUFBSSxJQUFJLENBQUMsSUFBSSxLQUFLLFdBQVcsRUFBRTtvQkFDN0IsYUFBYSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQVMsRUFBRSxFQUFFO3dCQUNyQyxJQUFJLENBQUMsY0FBYyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUM7d0JBQ2hDLFlBQVksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxNQUFXLEVBQUUsRUFBRTs0QkFDdEMsSUFBSSxDQUFDLE9BQU8sR0FBRyxNQUFNLENBQUM7NEJBRXRCLE1BQU0sS0FBSyxHQUFJLE1BQWlCLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxDQUFDOzRCQUNwRCxJQUFJLEtBQUssSUFBSSxDQUFDLEVBQUU7Z0NBQ2QsTUFBTSxHQUFJLE1BQWlCLENBQUMsU0FBUyxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsQ0FBQzs2QkFDbEQ7NEJBRUQsSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQzs0QkFFdEIsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLEVBQUUsTUFBTSxDQUFDOzRCQUM1QyxNQUFNLGFBQWEsR0FBUSxFQUFFLENBQUM7NEJBQzlCLGFBQWEsQ0FBQyxJQUFJLENBQUMsbUJBQW1CLENBQUMsR0FBRyxNQUFNLENBQUM7NEJBQ2pELGFBQWEsQ0FBQyxJQUFJLENBQUMsbUJBQW1CLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDOzRCQUNwRCxhQUFhLENBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQzs0QkFDcEQsSUFBSSxFQUFFLFVBQVUsQ0FBQyxhQUFhLENBQUMsQ0FBQzs0QkFFaEMsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO3dCQUN2QixDQUFDLENBQUMsQ0FBQztvQkFDTCxDQUFDLENBQUMsQ0FBQztpQkFDSjtxQkFBTTtvQkFDTCxZQUFZLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsTUFBVyxFQUFFLEVBQUU7d0JBQ3RDLElBQUksQ0FBQyxjQUFjLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQzt3QkFDaEMsSUFBSSxDQUFDLE9BQU8sR0FBRyxNQUFNLENBQUM7d0JBRXRCLE1BQU0sS0FBSyxHQUFJLE1BQWlCLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxDQUFDO3dCQUNwRCxJQUFJLEtBQUssSUFBSSxDQUFDLEVBQUU7NEJBQ2QsTUFBTSxHQUFJLE1BQWlCLENBQUMsU0FBUyxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsQ0FBQzt5QkFDbEQ7d0JBRUQsSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQzt3QkFFdEIsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLEVBQUUsTUFBTSxDQUFDO3dCQUM1QyxNQUFNLGFBQWEsR0FBUSxFQUFFLENBQUM7d0JBQzlCLGFBQWEsQ0FBQyxJQUFJLENBQUMsbUJBQW1CLENBQUMsR0FBRyxNQUFNLENBQUM7d0JBQ2pELGFBQWEsQ0FBQyxJQUFJLENBQUMsbUJBQW1CLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDO3dCQUNwRCxhQUFhLENBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQzt3QkFDcEQsSUFBSSxFQUFFLFVBQVUsQ0FBQyxhQUFhLENBQUMsQ0FBQzt3QkFFaEMsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO29CQUN2QixDQUFDLENBQUMsQ0FBQztpQkFDSjthQUNGO2lCQUFNLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssT0FBTyxFQUFFO2dCQUM5QyxPQUFPLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxDQUFDO2FBQ3RCO2lCQUFNO2FBRU47U0FDRjthQUFNO1lBQ0wsSUFBSSxDQUFDLE9BQU8sR0FBRyxFQUFFLENBQUM7WUFDbEIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUNsQixJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7WUFDckIsSUFBSSxDQUFDLFVBQVUsR0FBRyxFQUFFLENBQUM7U0FDdEI7SUFDSCxDQUFDO0lBRUQsV0FBVyxDQUFDLFFBQWM7UUFDeEIsSUFBSSxRQUFRLEdBQUcsQ0FBQyxHQUFHLElBQUksR0FBRyxJQUFJLEVBQUU7WUFBRSxPQUFPLElBQUksQ0FBQztTQUFFO1FBQ2hELE9BQU8sS0FBSyxDQUFDO0lBQ2YsQ0FBQztJQUVELFdBQVc7UUFDVCxJQUFJLENBQUMsYUFBYSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLFdBQVcsRUFBRSxDQUFDLENBQUM7SUFDbEQsQ0FBQzs4R0E5S1UseUJBQXlCO2tHQUF6Qix5QkFBeUIsdVdBUnpCO1lBQ1Q7Z0JBQ0UsT0FBTyxFQUFFLGlCQUFpQjtnQkFDMUIsS0FBSyxFQUFFLElBQUk7Z0JBQ1gsV0FBVyxFQUFFLHlCQUF5QjthQUN2QztTQUNGLHFLQy9FSCw2L05BNEpNLG9sQ0QzRkYsWUFBWSxrSUFDWixXQUFXLCtCQUNYLGtCQUFrQixxREFDbEIsYUFBYSw2Q0FDYixxQkFBcUI7OzJGQVlaLHlCQUF5QjtrQkFwQnJDLFNBQVM7K0JBQ0Usb0JBQW9CLGNBQ2xCLElBQUksV0FDUDt3QkFDUCxZQUFZO3dCQUNaLFdBQVc7d0JBQ1gsa0JBQWtCO3dCQUNsQixhQUFhO3dCQUNiLHFCQUFxQjtxQkFDdEIsYUFHVTt3QkFDVDs0QkFDRSxPQUFPLEVBQUUsaUJBQWlCOzRCQUMxQixLQUFLLEVBQUUsSUFBSTs0QkFDWCxXQUFXLDJCQUEyQjt5QkFDdkM7cUJBQ0Y7MklBR1EsY0FBYztzQkFBdEIsS0FBSztnQkFDRyxtQkFBbUI7c0JBQTNCLEtBQUs7Z0JBQ0csbUJBQW1CO3NCQUEzQixLQUFLO2dCQUNHLG1CQUFtQjtzQkFBM0IsS0FBSztnQkFDRyxVQUFVO3NCQUFsQixLQUFLO2dCQUNHLGFBQWE7c0JBQXJCLEtBQUs7Z0JBQ0csV0FBVztzQkFBbkIsS0FBSztnQkFDRyxZQUFZO3NCQUFwQixLQUFLO2dCQUN3QixlQUFlO3NCQUE1QyxTQUFTO3VCQUFDLGlCQUFpQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XHJcbiAgQ29tcG9uZW50LFxyXG4gIEVsZW1lbnRSZWYsXHJcbiAgSW5wdXQsXHJcbiAgT25EZXN0cm95LFxyXG4gIE9uSW5pdCxcclxuICBWaWV3Q2hpbGQsXHJcbiAgaXNEZXZNb2RlLFxyXG4gIEluamVjdG9yLFxyXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBDb3JlRm9ybUNvbnRyb2xCYXNlQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vY29yZS1mb3JtLWNvbnRyb2wtYmFzZS9jb3JlLWZvcm0tY29udHJvbC1iYXNlLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IEZvcm1zTW9kdWxlLCBOR19WQUxVRV9BQ0NFU1NPUiwgTmdDb250cm9sIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5cclxuaW1wb3J0IHsgQWxlcnRTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vYWxlcnQvYWxlcnQuc2VydmljZSc7XHJcblxyXG5pbXBvcnQgeyBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgRW51bVRyYW5zbGF0ZUtleSB9IGZyb20gXCJhbHBoYS1nbG9iYWwtY29uc3RhbnRzXCI7XHJcbmltcG9ydCB7IE11bHRpTGFuZ3VhZ2VTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvbXVsdGktbGFuZ3VhZ2Uuc2VydmljZSc7XHJcbmltcG9ydCB7IGFsZXJ0T3B0aW9ucyB9IGZyb20gJy4uLy4uLy4uL2NvbnN0YW50cy9hbGVydE9wdGlvbnMnO1xyXG5pbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xyXG5pbXBvcnQgeyBUaHJlZWRvdHNDb21wb25lbnQgfSBmcm9tICcuLi8uLi90aHJlZWRvdHMvdGhyZWVkb3RzLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IFRyYW5zbGF0ZVBpcGUgfSBmcm9tICcuLi8uLi8uLi9hcHAtcGlwZXMvdHJhbnNsYXRlLnBpcGUnO1xyXG5pbXBvcnQgeyBNYXBBdmF0YXJUb1NlcnZlclBpcGUgfSBmcm9tICcuLi8uLi8uLi9hcHAtcGlwZXMvbWFwLWF2YXRhci10by1zZXJ2ZXIucGlwZSc7XHJcblxyXG4vL2RlY2xhcmUgbGV0IGNvcmVGaWxlVXRpbHM6IGFueTtcclxuLy9pbXBvcnQgeyBjb3JlRmlsZVV0aWxzIH0gZnJvbSAnLi4vLi4vLi4vLi4vYXNzZXRzL2pzL2NvcmVGaWxlVXRpbHMnO1xyXG4vL2NvbnN0IHsgY29tcHJlc3NJbWFnZSwgYmxvYlRvQmFzZTY0IH0gPSBjb3JlRmlsZVV0aWxzLnByb3RvdHlwZTtcclxuXHJcbmNvbnN0IGJsb2JUb0Jhc2U2NCA9IGFzeW5jIChibG9iKSA9PiB7XHJcbiAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCBfKSA9PiB7XHJcbiAgICAgIGNvbnN0IHJlYWRlciA9IG5ldyBGaWxlUmVhZGVyKClcclxuICAgICAgcmVhZGVyLm9ubG9hZGVuZCA9ICgpID0+IHJlc29sdmUocmVhZGVyLnJlc3VsdClcclxuICAgICAgcmVhZGVyLnJlYWRBc0RhdGFVUkwoYmxvYilcclxuICB9KVxyXG59XHJcblxyXG5jb25zdCBjb21wcmVzc0ltYWdlID0gYXN5bmMgYmxvYiA9PiB7XHJcbiAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBjcmVhdGVJbWFnZUJpdG1hcChibG9iKVxyXG4gIGNvbnN0IHsgd2lkdGgsIGhlaWdodCB9ID0gcmVzcG9uc2VcclxuICBjb25zdCBkV2lkdGggPSB3aWR0aCA+IGhlaWdodCA/IDEwMjQgOiAxMDI0ICogd2lkdGggLyBoZWlnaHRcclxuICBjb25zdCBkSGVpZ2h0ID0gd2lkdGggPCBoZWlnaHQgPyAxMDI0IDogMTAyNCAvIHdpZHRoICogaGVpZ2h0XHJcbiAgY29uc3Qgb2Zmc2NyZWVuID0gbmV3IE9mZnNjcmVlbkNhbnZhcyhkV2lkdGgsIGRIZWlnaHQpXHJcbiAgY29uc3QgY3R4ID0gb2Zmc2NyZWVuLmdldENvbnRleHQoJzJkJylcclxuICBjdHghLmRyYXdJbWFnZShyZXNwb25zZSwgMCwgMCwgZFdpZHRoLCBkSGVpZ2h0KVxyXG4gIGNvbnN0IHJlc3VsdCA9IG9mZnNjcmVlbi5jb252ZXJ0VG9CbG9iKHtcclxuICAgICAgdHlwZTogJ2ltYWdlL2pwZWcnLFxyXG4gICAgICBxdWFsaXR5OiAwLjksXHJcbiAgfSlcclxuICByZXR1cm4gcmVzdWx0O1xyXG59XHJcblxyXG5leHBvcnQgZW51bSBFbnVtQ29yZUZpbGVVcGxvYWRlclR5cGUge1xyXG4gIElNQUdFX0FWQVRBUiA9ICdJTUFHRV9BVkFUQVInLFxyXG4gIElNQUdFX09USEVSID0gJ0lNQUdFX09USEVSJyxcclxuICBQREYgPSAnUERGJyxcclxuICBET0MgPSAnRE9DJyxcclxuICBFWENFTCA9ICdFWENFTCcsXHJcbiAgQVVESU8gPSAnQVVESU8nLFxyXG4gIE9USEVSID0gJ09USEVSJyxcclxufVxyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdjb3JlLWZpbGUtdXBsb2FkZXInLFxyXG4gIHN0YW5kYWxvbmU6IHRydWUsXHJcbiAgaW1wb3J0czogW1xyXG4gICAgQ29tbW9uTW9kdWxlLFxyXG4gICAgRm9ybXNNb2R1bGUsXHJcbiAgICBUaHJlZWRvdHNDb21wb25lbnQsXHJcbiAgICBUcmFuc2xhdGVQaXBlLFxyXG4gICAgTWFwQXZhdGFyVG9TZXJ2ZXJQaXBlXHJcbiAgXSxcclxuICB0ZW1wbGF0ZVVybDogJy4vY29yZS1maWxlLXVwbG9hZGVyLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi9jb3JlLWZpbGUtdXBsb2FkZXIuY29tcG9uZW50LnNjc3MnXSxcclxuICBwcm92aWRlcnM6IFtcclxuICAgIHtcclxuICAgICAgcHJvdmlkZTogTkdfVkFMVUVfQUNDRVNTT1IsXHJcbiAgICAgIG11bHRpOiB0cnVlLFxyXG4gICAgICB1c2VFeGlzdGluZzogQ29yZUZpbGVVcGxvYWRlckNvbXBvbmVudCxcclxuICAgIH0sXHJcbiAgXSxcclxufSlcclxuZXhwb3J0IGNsYXNzIENvcmVGaWxlVXBsb2FkZXJDb21wb25lbnQgZXh0ZW5kcyBDb3JlRm9ybUNvbnRyb2xCYXNlQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xyXG4gIEBJbnB1dCgpIHVwbG9hZEZpbGVUeXBlITogRW51bUNvcmVGaWxlVXBsb2FkZXJUeXBlO1xyXG4gIEBJbnB1dCgpIGZpbGVEYXRhQ29udHJvbE5hbWUhOiBzdHJpbmc7XHJcbiAgQElucHV0KCkgZmlsZU5hbWVDb250cm9sTmFtZSE6IHN0cmluZztcclxuICBASW5wdXQoKSBmaWxlVHlwZUNvbnRyb2xOYW1lITogc3RyaW5nO1xyXG4gIEBJbnB1dCgpIGF2YXRhclNpemUhOiBudW1iZXI7XHJcbiAgQElucHV0KCkgZGVmYXVsdEF2YXRhciE6IHN0cmluZztcclxuICBASW5wdXQoKSBoaWRlUHJldmlldyE6IGJvb2xlYW47XHJcbiAgQElucHV0KCkgdmVydGljYWxNb2RlITogYm9vbGVhbjtcclxuICBAVmlld0NoaWxkKCdjdXN0b21GaWxlSW5wdXQnKSBjdXN0b21GaWxlSW5wdXQhOiBFbGVtZW50UmVmO1xyXG5cclxuICBvdmVycmlkZSB2YWx1ZSE6IHN0cmluZztcclxuXHJcbiAgbmdDb250cm9sITogTmdDb250cm9sO1xyXG5cclxuICBob3ZlclRleHQgPVxyXG4gICAgRW51bVRyYW5zbGF0ZUtleS5VSV9DT1JFX0NPTlRST0xfRklMRV9VUExPQURFUl9DTElDS19UT19CUk9XU0VfRklMRTtcclxuICBsYW5nITogc3RyaW5nO1xyXG4gIHN1YnNjcmlwdGlvbnM6IFN1YnNjcmlwdGlvbltdID0gW107XHJcbiAgY2hvc2VuRmlsZTogYW55O1xyXG4gIGNvbXByZXNzZWRTaXplOiBhbnk7XHJcbiAgcHJldmlldzogYW55O1xyXG4gIGxvYWRpbmc6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBsb2FkaW5nQ2FwdGlvbiE6IHN0cmluZztcclxuXHJcbiAgYWNjZXB0ITogc3RyaW5nO1xyXG5cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHByaXZhdGUgYWxlcnRTZXJ2aWNlOiBBbGVydFNlcnZpY2UsXHJcbiAgICBwcml2YXRlIG1sczogTXVsdGlMYW5ndWFnZVNlcnZpY2UsXHJcbiAgICBwcml2YXRlIGluamVjdG9yOiBJbmplY3RvclxyXG4gICkge1xyXG4gICAgc3VwZXIoKTtcclxuICB9XHJcblxyXG4gIG5nT25Jbml0KCk6IHZvaWQge1xyXG4gICAgc2V0VGltZW91dCgoKSA9PiB0aGlzLm5nQ29udHJvbCA9IHRoaXMuaW5qZWN0b3IuZ2V0KE5nQ29udHJvbCkpO1xyXG5cclxuICAgIGlmIChpc0Rldk1vZGUoKSAmJiAhISF0aGlzLnVwbG9hZEZpbGVUeXBlKSB7XHJcbiAgICAgIHRoaXMuYWxlcnRTZXJ2aWNlLmVycm9yKFxyXG4gICAgICAgIGBVc2luZyBDb3JlRmlsZVVwbG9hZGVyQ29tcG9uZW50IHJlcXVpcmVkIHByb3BlcnR5IHVwbG9hZEZpbGVUeXBlITogRW51bUNvcmVGaWxlVXBsb2FkZXJUeXBlYCxcclxuICAgICAgICB7IC4uLmFsZXJ0T3B0aW9ucywgYXV0b0Nsb3NlOiBmYWxzZSB9XHJcbiAgICAgICk7XHJcbiAgICB9XHJcbiAgICBpZiAoaXNEZXZNb2RlKCkgJiYgISEhdGhpcy5maWxlRGF0YUNvbnRyb2xOYW1lKSB7XHJcbiAgICAgIHRoaXMuYWxlcnRTZXJ2aWNlLmVycm9yKFxyXG4gICAgICAgIGBVc2luZyBDb3JlRmlsZVVwbG9hZGVyQ29tcG9uZW50IHJlcXVpcmVkIHByb3BlcnR5IGZpbGVEYXRhQ29udHJvbE5hbWUhOiBzdHJpbmcgKGJhc2U2NClgLFxyXG4gICAgICAgIHsgLi4uYWxlcnRPcHRpb25zLCBhdXRvQ2xvc2U6IGZhbHNlIH1cclxuICAgICAgKTtcclxuICAgIH1cclxuICAgIGlmIChpc0Rldk1vZGUoKSAmJiAhISF0aGlzLmZpbGVOYW1lQ29udHJvbE5hbWUpIHtcclxuICAgICAgdGhpcy5hbGVydFNlcnZpY2UuZXJyb3IoXHJcbiAgICAgICAgYFVzaW5nIENvcmVGaWxlVXBsb2FkZXJDb21wb25lbnQgcmVxdWlyZWQgcHJvcGVydHkgZmlsZU5hbWVDb250cm9sTmFtZSE6IHN0cmluZ2AsXHJcbiAgICAgICAgeyAuLi5hbGVydE9wdGlvbnMsIGF1dG9DbG9zZTogZmFsc2UgfVxyXG4gICAgICApO1xyXG4gICAgfVxyXG4gICAgaWYgKGlzRGV2TW9kZSgpICYmICEhIXRoaXMuZmlsZVR5cGVDb250cm9sTmFtZSkge1xyXG4gICAgICB0aGlzLmFsZXJ0U2VydmljZS5lcnJvcihcclxuICAgICAgICBgVXNpbmcgQ29yZUZpbGVVcGxvYWRlckNvbXBvbmVudCByZXF1aXJlZCBwcm9wZXJ0eSBmaWxlVHlwZUNvbnRyb2xOYW1lITogc3RyaW5nYCxcclxuICAgICAgICB7IC4uLmFsZXJ0T3B0aW9ucywgYXV0b0Nsb3NlOiBmYWxzZSB9XHJcbiAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5zdWJzY3JpcHRpb25zLnB1c2godGhpcy5tbHMubGFuZyQuc3Vic2NyaWJlKCh4KSA9PiAodGhpcy5sYW5nID0geCkpKTtcclxuXHJcbiAgICBpZiAoXHJcbiAgICAgIHRoaXMudXBsb2FkRmlsZVR5cGUgPT09IEVudW1Db3JlRmlsZVVwbG9hZGVyVHlwZS5JTUFHRV9BVkFUQVIgfHxcclxuICAgICAgdGhpcy51cGxvYWRGaWxlVHlwZSA9PT0gRW51bUNvcmVGaWxlVXBsb2FkZXJUeXBlLklNQUdFX09USEVSXHJcbiAgICApIHtcclxuICAgICAgdGhpcy5hY2NlcHQgPSAnaW1hZ2UvcG5nLCBpbWFnZS9naWYsIGltYWdlL2pwZWcnO1xyXG4gICAgfSBlbHNlIGlmIChcclxuICAgICAgdGhpcy51cGxvYWRGaWxlVHlwZSA9PT0gRW51bUNvcmVGaWxlVXBsb2FkZXJUeXBlLlBERlxyXG4gICAgKSB7XHJcbiAgICAgIHRoaXMuYWNjZXB0ID0gXCJhcHBsaWNhdGlvbi9wZGZcIjtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuYWxlcnRTZXJ2aWNlLndhcm4oXHJcbiAgICAgICAgYFdoZW4gdXBsb2FkRmlsZVR5cGU9PT0ke3RoaXMudXBsb2FkRmlsZVR5cGV9ID0+IFRPIERPLi4uYCxcclxuICAgICAgICB7IC4uLmFsZXJ0T3B0aW9ucywgYXV0b0Nsb3NlOiBmYWxzZSB9XHJcbiAgICAgICk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBvbkhvdmVyKCkge1xyXG4gICAgY29uc29sZS5sb2coJ29uSG92ZXInKTtcclxuICAgIHRoaXMuY3VzdG9tRmlsZUlucHV0Lm5hdGl2ZUVsZW1lbnQuc3R5bGUuc2V0UHJvcGVydHkoXHJcbiAgICAgICctLWhvdmVyLXRleHQnLFxyXG4gICAgICB0aGlzLmhvdmVyVGV4dFxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIGhhbmRsZUlucHV0Q2hhbmdlKGU6IGFueSkge1xyXG4gICAgY29uc29sZS5sb2coJ2hhbmRsZUlucHV0Q2hhbmdlIGUnLCBlKTtcclxuICAgIGlmICghdGhpcy5oYXNGaWxlU2l6ZShlLnRhcmdldC5maWxlc1swXS5zaXplKSkge1xyXG4gICAgICB0aGlzLmFsZXJ0U2VydmljZS5lcnJvcihcclxuICAgICAgICBgRmlsZSBzaXplIGV4Y2VlZHMgM01CLmAsXHJcbiAgICAgICAgeyAuLi5hbGVydE9wdGlvbnMsIGF1dG9DbG9zZTogZmFsc2UgfVxyXG4gICAgICApO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICBpZiAoISFlLnRhcmdldC5maWxlcy5sZW5ndGgpIHtcclxuICAgICAgY29uc3QgZmlsZSA9IGUudGFyZ2V0LmZpbGVzWzBdO1xyXG4gICAgICBjb25zb2xlLmxvZygnaGFuZGxlSW5wdXRDaGFuZ2UgZmlsZScsIGZpbGUpO1xyXG4gICAgICB0aGlzLmNob3NlbkZpbGUgPSBmaWxlO1xyXG5cclxuICAgICAgaWYgKFxyXG4gICAgICAgIGZpbGUudHlwZS5zcGxpdCgnLycpWzBdID09PSAnaW1hZ2UnIHx8XHJcbiAgICAgICAgZmlsZS50eXBlLnNwbGl0KCcvJylbMF0gPT09ICdhcHBsaWNhdGlvbidcclxuICAgICAgKSB7XHJcbiAgICAgICAgY29uc3QgYmxvYiA9IG5ldyBCbG9iKFtmaWxlXSk7XHJcbiAgICAgICAgaWYgKGZpbGUudHlwZSAhPT0gJ2ltYWdlL2dpZicpIHtcclxuICAgICAgICAgIGNvbXByZXNzSW1hZ2UoYmxvYikudGhlbigoYmxvYjogYW55KSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuY29tcHJlc3NlZFNpemUgPSBibG9iLnNpemU7XHJcbiAgICAgICAgICAgIGJsb2JUb0Jhc2U2NChibG9iKS50aGVuKChiYXNlNjQ6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICAgIHRoaXMucHJldmlldyA9IGJhc2U2NDtcclxuXHJcbiAgICAgICAgICAgICAgY29uc3QgaW5kZXggPSAoYmFzZTY0IGFzIHN0cmluZykuaW5kZXhPZignYmFzZTY0LCcpO1xyXG4gICAgICAgICAgICAgIGlmIChpbmRleCA+PSAwKSB7XHJcbiAgICAgICAgICAgICAgICBiYXNlNjQgPSAoYmFzZTY0IGFzIHN0cmluZykuc3Vic3RyaW5nKGluZGV4ICsgNyk7XHJcbiAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICB0aGlzLm9uQ2hhbmdlKGJhc2U2NCk7XHJcblxyXG4gICAgICAgICAgICAgIGNvbnN0IGZvcm0gPSB0aGlzLm5nQ29udHJvbC5jb250cm9sPy5wYXJlbnQ7XHJcbiAgICAgICAgICAgICAgY29uc3Qgb2JqZWN0VG9QYXRjaDogYW55ID0ge307XHJcbiAgICAgICAgICAgICAgb2JqZWN0VG9QYXRjaFt0aGlzLmZpbGVEYXRhQ29udHJvbE5hbWVdID0gYmFzZTY0O1xyXG4gICAgICAgICAgICAgIG9iamVjdFRvUGF0Y2hbdGhpcy5maWxlTmFtZUNvbnRyb2xOYW1lXSA9IGZpbGUubmFtZTtcclxuICAgICAgICAgICAgICBvYmplY3RUb1BhdGNoW3RoaXMuZmlsZVR5cGVDb250cm9sTmFtZV0gPSBmaWxlLnR5cGU7XHJcbiAgICAgICAgICAgICAgZm9ybT8ucGF0Y2hWYWx1ZShvYmplY3RUb1BhdGNoKTtcclxuXHJcbiAgICAgICAgICAgICAgdGhpcy5tYXJrQXNUb3VjaGVkKCk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIGJsb2JUb0Jhc2U2NChibG9iKS50aGVuKChiYXNlNjQ6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLmNvbXByZXNzZWRTaXplID0gYmxvYi5zaXplO1xyXG4gICAgICAgICAgICB0aGlzLnByZXZpZXcgPSBiYXNlNjQ7XHJcblxyXG4gICAgICAgICAgICBjb25zdCBpbmRleCA9IChiYXNlNjQgYXMgc3RyaW5nKS5pbmRleE9mKCdiYXNlNjQsJyk7XHJcbiAgICAgICAgICAgIGlmIChpbmRleCA+PSAwKSB7XHJcbiAgICAgICAgICAgICAgYmFzZTY0ID0gKGJhc2U2NCBhcyBzdHJpbmcpLnN1YnN0cmluZyhpbmRleCArIDcpO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICB0aGlzLm9uQ2hhbmdlKGJhc2U2NCk7XHJcblxyXG4gICAgICAgICAgICBjb25zdCBmb3JtID0gdGhpcy5uZ0NvbnRyb2wuY29udHJvbD8ucGFyZW50O1xyXG4gICAgICAgICAgICBjb25zdCBvYmplY3RUb1BhdGNoOiBhbnkgPSB7fTtcclxuICAgICAgICAgICAgb2JqZWN0VG9QYXRjaFt0aGlzLmZpbGVEYXRhQ29udHJvbE5hbWVdID0gYmFzZTY0O1xyXG4gICAgICAgICAgICBvYmplY3RUb1BhdGNoW3RoaXMuZmlsZU5hbWVDb250cm9sTmFtZV0gPSBmaWxlLm5hbWU7XHJcbiAgICAgICAgICAgIG9iamVjdFRvUGF0Y2hbdGhpcy5maWxlVHlwZUNvbnRyb2xOYW1lXSA9IGZpbGUudHlwZTtcclxuICAgICAgICAgICAgZm9ybT8ucGF0Y2hWYWx1ZShvYmplY3RUb1BhdGNoKTtcclxuXHJcbiAgICAgICAgICAgIHRoaXMubWFya0FzVG91Y2hlZCgpO1xyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9IGVsc2UgaWYgKGZpbGUudHlwZS5zcGxpdCgnLycpWzBdID09PSAnYXVkaW8nKSB7XHJcbiAgICAgICAgY29uc29sZS5sb2coJ1RvIGRvJyk7XHJcbiAgICAgIH0gZWxzZSB7XHJcblxyXG4gICAgICB9XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLnByZXZpZXcgPSAnJztcclxuICAgICAgdGhpcy5vbkNoYW5nZSgnJyk7XHJcbiAgICAgIHRoaXMubWFya0FzVG91Y2hlZCgpO1xyXG4gICAgICB0aGlzLmNob3NlbkZpbGUgPSAnJztcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGhhc0ZpbGVTaXplKGZpbGVTaXplIDogYW55KSB7XHJcbiAgICBpZiAoZmlsZVNpemUgPCAzICogMTAyNCAqIDEwMjQpIHsgcmV0dXJuIHRydWU7IH1cclxuICAgIHJldHVybiBmYWxzZTtcclxuICB9XHJcblxyXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xyXG4gICAgdGhpcy5zdWJzY3JpcHRpb25zLm1hcCgoeCkgPT4geD8udW5zdWJzY3JpYmUoKSk7XHJcbiAgfVxyXG59XHJcbiIsIjxkaXYgY2xhc3M9XCJjb3JlLWZpbGUtdXBsb2FkZXItY29udGFpbmVyXCI+XHJcblxyXG4gICAgPGRpdiAqbmdJZj1cIiEhIXZlcnRpY2FsTW9kZVwiPlxyXG5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwicm93XCI+XHJcbiAgICAgICAgICAgIDxkaXYgW2NsYXNzXT1cIiEhaGlkZVByZXZpZXcgPyAnY29sLW1kLTEyJyA6ICdjb2wtbWQtNidcIj5cclxuICAgICAgICAgICAgICAgIDxpbnB1dCBpZD1cImN1c3RvbS1maWxlLWlucHV0XCIgI2N1c3RvbUZpbGVJbnB1dCBjbGFzcz1cImN1c3RvbS1maWxlLWlucHV0XCIgdHlwZT1cImZpbGVcIiBbYWNjZXB0XT1cImFjY2VwdFwiXHJcbiAgICAgICAgICAgICAgICAgICAgKGNoYW5nZSk9XCJoYW5kbGVJbnB1dENoYW5nZSgkZXZlbnQpXCIgKGhvdmVyKT1cIm9uSG92ZXIoKVwiPlxyXG4gICAgICAgICAgICAgICAgPGxhYmVsIGlkPVwiZmlsZS1pbnB1dC1sYWJlbFwiIGZvcj1cImN1c3RvbS1maWxlLWlucHV0XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGltZyAqbmdJZj1cInVwbG9hZEZpbGVUeXBlPT09J0lNQUdFX0FWQVRBUidcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbc3JjXT1cIiEhIWhpZGVQcmV2aWV3ID8gKHZhbHVlID8gKHZhbHVlIHwgbWFwQXZhdGFyVG9TZXJ2ZXIpIDogZGVmYXVsdEF2YXRhcikgOiAocHJldmlldyA/IHByZXZpZXcgOiBkZWZhdWx0QXZhdGFyKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYXZhdGFyLXByZXZpZXdcIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwidXBsb2FkRmlsZVR5cGUhPT0nSU1BR0VfQVZBVEFSJ1wiPnt7J0VYSVNUSU5HIEZJTEUuLi4nfX08L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICA8bGFiZWwgaWQ9XCJmaWxlLWlucHV0LWxhYmVsXCIgZm9yPVwiY3VzdG9tLWZpbGUtaW5wdXRcIj5cclxuICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cImZpbGVcIiAqbmdJZj1cInVwbG9hZEZpbGVUeXBlIT09J0lNQUdFX0FWQVRBUidcIiBbc3JjXT1cInZhbHVlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgKGNoYW5nZSk9XCJoYW5kbGVJbnB1dENoYW5nZSgkZXZlbnQpXCIgY2xhc3M9XCJcIj5cclxuICAgICAgICAgICAgICAgIDwvbGFiZWw+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTJcIiAqbmdJZj1cIiEhIWhpZGVQcmV2aWV3XCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiISEhbG9hZGluZ1wiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzZWxlY3RlZC1wcmV2aWV3XCIgKm5nSWY9XCJwcmV2aWV3XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgW3NyY109XCJwcmV2aWV3XCIgYWx0PVwic2VsZWN0ZWQtZmlsZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8YXBwLXRocmVlZG90cyAqbmdJZj1cIiEhbG9hZGluZ1wiPjwvYXBwLXRocmVlZG90cz5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtNCBkLW5vbmVcIiAqbmdJZj1cIiEhIWhpZGVQcmV2aWV3XCI+XHJcbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiISFjaG9zZW5GaWxlXCI+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyAnVUlfQ09SRV9GSUxFX1VQTE9BREVSX0ZJTEVfTkFNRScgfCB0cmFuc2xhdGU6IGxhbmcgfX06XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgY2hvc2VuRmlsZT8ubmFtZSB9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7ICdVSV9DT1JFX0ZJTEVfVVBMT0FERVJfRklMRV9UWVBFJyB8IHRyYW5zbGF0ZTogbGFuZyB9fTpcclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBjaG9zZW5GaWxlPy50eXBlIH19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgJ1VJX0NPUkVfRklMRV9VUExPQURFUl9GSUxFX1NJWkUnIHwgdHJhbnNsYXRlOiBsYW5nIH19OlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IGNob3NlbkZpbGU/LnNpemUgfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgIDwhLS0gPG5nLWNvbnRhaW5lciAqbmdJZj1cIiEhY29tcHJlc3NlZFNpemVcIj5cclxuICAgICAgICAgICAgPGRpdj5cclxuICAgICAgICAgICAgICAgIDxkaXY+XHJcbiAgICAgICAgICAgICAgICAgICAge3sgJ1VJX0NPUkVfRklMRV9VUExPQURFUl9GSUxFX1NJWkVfQ09NUFJFU1NFRCcgfCB0cmFuc2xhdGU6IGxhbmcgfX06XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDxkaXY+XHJcbiAgICAgICAgICAgICAgICAgICAge3sgY29tcHJlc3NlZFNpemUgfX1cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L25nLWNvbnRhaW5lcj4gLS0+XHJcbiAgICA8L2Rpdj5cclxuXHJcbiAgICA8ZGl2ICpuZ0lmPVwiISF2ZXJ0aWNhbE1vZGVcIiBjbGFzcz1cIm10MjBcIj5cclxuXHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImNvbnRhaW5lciBjb250YWluZXItZmx1aWRcIj5cclxuXHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9J2NvbC1tZC0xMic+XHJcbiAgICAgICAgICAgICAgICAgICAgPGlucHV0IGlkPVwiY3VzdG9tLWZpbGUtaW5wdXRcIiAjY3VzdG9tRmlsZUlucHV0IGNsYXNzPVwiY3VzdG9tLWZpbGUtaW5wdXRcIiB0eXBlPVwiZmlsZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFthY2NlcHRdPVwiYWNjZXB0XCIgKGNoYW5nZSk9XCJoYW5kbGVJbnB1dENoYW5nZSgkZXZlbnQpXCIgKGhvdmVyKT1cIm9uSG92ZXIoKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxsYWJlbCBpZD1cImZpbGUtaW5wdXQtbGFiZWxcIiBmb3I9XCJjdXN0b20tZmlsZS1pbnB1dFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8aW1nICpuZ0lmPVwidXBsb2FkRmlsZVR5cGU9PT0nSU1BR0VfQVZBVEFSJ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbc3JjXT1cIiEhIWhpZGVQcmV2aWV3ID8gKHZhbHVlID8gKHZhbHVlIHwgbWFwQXZhdGFyVG9TZXJ2ZXIpIDogZGVmYXVsdEF2YXRhcikgOiAoKHZhbHVlICYmICEhIXByZXZpZXcpID8gKHZhbHVlIHwgbWFwQXZhdGFyVG9TZXJ2ZXIpIDogKHByZXZpZXcgPyBwcmV2aWV3IDogZGVmYXVsdEF2YXRhcikpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYXZhdGFyLXByZXZpZXdcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cInVwbG9hZEZpbGVUeXBlIT09J0lNQUdFX0FWQVRBUidcIj57eydFWElTVElORyBGSUxFLi4uJ319PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICA8bGFiZWwgaWQ9XCJmaWxlLWlucHV0LWxhYmVsXCIgZm9yPVwiY3VzdG9tLWZpbGUtaW5wdXRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJmaWxlXCIgKm5nSWY9XCJ1cGxvYWRGaWxlVHlwZSE9PSdJTUFHRV9BVkFUQVInXCIgW3NyY109XCJ2YWx1ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2hhbmdlKT1cImhhbmRsZUlucHV0Q2hhbmdlKCRldmVudClcIiBjbGFzcz1cIlwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93XCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTEyXCIgKm5nSWY9XCIhISFoaWRlUHJldmlld1wiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCIhISFsb2FkaW5nXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzZWxlY3RlZC1wcmV2aWV3XCIgKm5nSWY9XCJwcmV2aWV3XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIFtzcmNdPVwicHJldmlld1wiIGFsdD1cInNlbGVjdGVkLWZpbGVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPGFwcC10aHJlZWRvdHMgKm5nSWY9XCIhIWxvYWRpbmdcIj48L2FwcC10aHJlZWRvdHM+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93IGQtbm9uZVwiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC0xMlwiICpuZ0lmPVwiISEhaGlkZVByZXZpZXdcIj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiEhY2hvc2VuRmlsZVwiPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvd1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0nY29sLW1kLTYnPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7ICdVSV9DT1JFX0ZJTEVfVVBMT0FERVJfRklMRV9OQU1FJyB8IHRyYW5zbGF0ZTogbGFuZyB9fTpcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0nY29sLW1kLTYnPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IGNob3NlbkZpbGU/Lm5hbWUgfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9J2NvbC1tZC02Jz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyAnVUlfQ09SRV9GSUxFX1VQTE9BREVSX0ZJTEVfVFlQRScgfCB0cmFuc2xhdGU6IGxhbmcgfX06XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9J2NvbC1tZC02Jz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBjaG9zZW5GaWxlPy50eXBlIH19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSdjb2wtbWQtNic+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgJ1VJX0NPUkVfRklMRV9VUExPQURFUl9GSUxFX1NJWkUnIHwgdHJhbnNsYXRlOiBsYW5nIH19OlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSdjb2wtbWQtNic+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgY2hvc2VuRmlsZT8uc2l6ZSB9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiEhY29tcHJlc3NlZFNpemVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvd1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0nY29sLW1kLTYnPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7ICdVSV9DT1JFX0ZJTEVfVVBMT0FERVJfRklMRV9TSVpFX0NPTVBSRVNTRUQnIHwgdHJhbnNsYXRlOiBsYW5nIH19OlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSdjb2wtbWQtNic+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgY29tcHJlc3NlZFNpemUgfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuXHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgIDwvZGl2PlxyXG5cclxuICAgIDwvZGl2PlxyXG5cclxuPC9kaXY+Il19