ngx-sumax-erp-components 1.0.49 → 1.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm2022/lib/date-picker/date-picker.component.mjs +30 -4
- package/esm2022/lib/date-time-picker/date-time-picker.component.mjs +3 -3
- package/esm2022/lib/date-time-picker-editable/date-time-picker-editable.component.mjs +3 -3
- package/esm2022/lib/ng-select-simple/ng-select-simple.component.mjs +2 -2
- package/fesm2022/ngx-sumax-erp-components.mjs +35 -9
- package/fesm2022/ngx-sumax-erp-components.mjs.map +1 -1
- package/lib/date-picker/date-picker.component.d.ts +4 -0
- package/package.json +1 -1
|
@@ -223,6 +223,24 @@ export class DatePickerComponent {
|
|
|
223
223
|
onKeyUpEnter() {
|
|
224
224
|
this.enterKeyUp();
|
|
225
225
|
}
|
|
226
|
+
handlePaste(event) {
|
|
227
|
+
if (!this.restrictInputLength)
|
|
228
|
+
return;
|
|
229
|
+
event.preventDefault();
|
|
230
|
+
if (!this.isApplicableToHandlePaste(event))
|
|
231
|
+
return;
|
|
232
|
+
const pastedText = event.clipboardData?.getData('text') || '';
|
|
233
|
+
if (!pastedText)
|
|
234
|
+
return;
|
|
235
|
+
this.formatDate(pastedText);
|
|
236
|
+
}
|
|
237
|
+
isApplicableToHandlePaste(event) {
|
|
238
|
+
const input = event.target;
|
|
239
|
+
if (this._hasTextSelection(input)) {
|
|
240
|
+
return this._isFullySelected(input);
|
|
241
|
+
}
|
|
242
|
+
return true;
|
|
243
|
+
}
|
|
226
244
|
handleKeyPress(event) {
|
|
227
245
|
if (this.restrictInputLength) {
|
|
228
246
|
this._handleRestrictInputLength(event);
|
|
@@ -254,6 +272,11 @@ export class DatePickerComponent {
|
|
|
254
272
|
_hasTextSelection(input) {
|
|
255
273
|
return input.selectionStart !== input.selectionEnd;
|
|
256
274
|
}
|
|
275
|
+
_isFullySelected(input) {
|
|
276
|
+
return input.selectionStart === 0 &&
|
|
277
|
+
input.selectionEnd === input.value.length &&
|
|
278
|
+
input.value.length > 0;
|
|
279
|
+
}
|
|
257
280
|
_isInputLengthExceeded(currentValue) {
|
|
258
281
|
const hasSlashes = /\//.test(currentValue);
|
|
259
282
|
// DD/MM/YYYY (máximo 10 caracteres) o 12032025 (máximo 8 dígitos)
|
|
@@ -335,7 +358,10 @@ export class DatePickerComponent {
|
|
|
335
358
|
}
|
|
336
359
|
}
|
|
337
360
|
focusOut(value) {
|
|
338
|
-
|
|
361
|
+
this.formatDate(value);
|
|
362
|
+
}
|
|
363
|
+
formatDate(value) {
|
|
364
|
+
if (value && value?.trim() !== '') {
|
|
339
365
|
if (this._tempValue === value)
|
|
340
366
|
return;
|
|
341
367
|
this.ngbDatepicker.close();
|
|
@@ -381,7 +407,7 @@ export class DatePickerComponent {
|
|
|
381
407
|
I18n,
|
|
382
408
|
{ provide: NgbDatepickerI18n, useClass: CustomDatepickerI18n },
|
|
383
409
|
{ provide: NgbDateParserFormatter, useClass: CustomDatepickerFormat },
|
|
384
|
-
], viewQueries: [{ propertyName: "ngbDatepicker", first: true, predicate: ["fecha"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<label *ngIf=\"label != null && label != '' && showLabel\" class=\"d-flex sumax-label mb-0 p-0\"\r\n ><span [title]=\"label\" style=\"white-space: nowrap; overflow: hidden; text-overflow: ellipsis\">{{ label }}</span>\r\n <span *ngIf=\"required\" class=\"ms-1\" [class.text-danger]=\"controls?.errors != null\"> *</span>\r\n <span *ngIf=\"labelInfo\">\r\n <i class=\"fa fa-exclamation-circle text-info ms-2\" [matTooltip]=\"textLabelInfo\" matTooltipClass=\"bg-info\"></i>\r\n </span>\r\n</label>\r\n<div\r\n [class.input-icon]=\"controls?.errors != null && (controls?.dirty || controls?.touched) && submitted\"\r\n [class.right]=\"controls?.errors != null && (controls?.dirty || controls?.touched) && submitted\">\r\n <!-- tooltip-message es el icono de error -->\r\n\r\n <div class=\"d-flex p-0 group-input-button position-relative\">\r\n <tooltip-message\r\n
|
|
410
|
+
], viewQueries: [{ propertyName: "ngbDatepicker", first: true, predicate: ["fecha"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<label *ngIf=\"label != null && label != '' && showLabel\" class=\"d-flex sumax-label mb-0 p-0\"\r\n ><span [title]=\"label\" style=\"white-space: nowrap; overflow: hidden; text-overflow: ellipsis\">{{ label }}</span>\r\n <span *ngIf=\"required\" class=\"ms-1\" [class.text-danger]=\"controls?.errors != null\"> *</span>\r\n <span *ngIf=\"labelInfo\">\r\n <i class=\"fa fa-exclamation-circle text-info ms-2\" [matTooltip]=\"textLabelInfo\" matTooltipClass=\"bg-info\"></i>\r\n </span>\r\n</label>\r\n<div\r\n [class.input-icon]=\"controls?.errors != null && (controls?.dirty || controls?.touched) && submitted\"\r\n [class.right]=\"controls?.errors != null && (controls?.dirty || controls?.touched) && submitted\">\r\n <!-- tooltip-message es el icono de error -->\r\n\r\n <div class=\"d-flex p-0 group-input-button position-relative\">\r\n <tooltip-message\r\n [label]=\"label\"\r\n [controls]=\"controls\"\r\n [validatorMessage]=\"validatorMessage\"\r\n [submitted]=\"submitted\"\r\n [tooltipMessage]=\"tooltipMessage\"></tooltip-message>\r\n <input\r\n type=\"text\"\r\n [attr.autocomplete]=\"autocomplete\"\r\n [class.is-invalid]=\"controls?.errors != null && (controls?.dirty || controls?.touched) && submitted\"\r\n [disabled]=\"disabled\"\r\n [readonly]=\"readonly\"\r\n (keyup.enter)=\"onKeyUpEnter()\"\r\n (keyup.ArrowUp)=\"arrowUpKeyUp()\"\r\n (keypress)=\"handleKeyPress($event)\"\r\n (input)=\"onInput($any($event.target).value)\"\r\n (dateSelect)=\"onInput($event)\"\r\n (focus)=\"onFocus($any($event.target).value)\"\r\n (focusout)=\"focusOut($any($event.target).value)\"\r\n (blur)=\"onBlur()\"\r\n (paste)=\"handlePaste($event)\"\r\n class=\"form-control form-control-sm rounded-left use-input\"\r\n container=\"body\"\r\n placeholder=\"dd/mm/yyyy\"\r\n [minDate]=\"{ year: 1960, month: 1, day: 1 }\"\r\n [maxDate]=\"maxDate\"\r\n name=\"fecha\"\r\n ngbDatepicker\r\n #fecha=\"ngbDatepicker\"\r\n [(ngModel)]=\"value\" />\r\n <button type=\"button\" [disabled]=\"disabled || readonly\" class=\"btn btn-info p-0 rounded-0 use-button\" (click)=\"fecha.toggle()\">\r\n <!-- <mat-icon class=\"text-white pt-1\" style=\"font-size: 18px;\" [matTooltip]=\"'Calendario'\" matTooltipClass=\"bg-info\">calendar_today</mat-icon> -->\r\n <i class=\"fa fa-calendar text-white px-1\" aria-hidden=\"true\"></i>\r\n </button>\r\n </div>\r\n</div>\r\n<!-- error-message es el mansaje que aparece abajo del componente -->\r\n<error-message\r\n [label]=\"label\"\r\n [controls]=\"controls\"\r\n [validatorMessage]=\"validatorMessage\"\r\n [submitted]=\"submitted\"\r\n [tooltipMessage]=\"tooltipMessage\"></error-message>\r\n", styles: ["button[disabled]{pointer-events:none}.sumax-label{color:#646c9a!important}.input-icon tooltip-message{color:#ccc;position:absolute;z-index:3;width:16px;font-size:16px;text-align:center;left:auto;right:35px;top:50%;transform:translateY(-50%)}.input-icon.right>.form-control{padding-right:33px;padding-left:12px}.was-validated .form-control:invalid:focus,.form-control.is-invalid:focus{border-color:#dc3545;box-shadow:inset 0 1px 1px #00000013,0 0 0 3px #fde6e8!important}.was-validated .form-control:invalid,.form-control.is-invalid{background-image:none;box-shadow:inset 0 1px 1px #00000013,0 0 0 3px #fde6e8!important}.form-control:focus,.form-control:active{border-color:#007eff;box-shadow:inset 0 1px 1px #00000013,0 0 0 3px #007eff1a!important}\n"], dependencies: [{ kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i4.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: i4.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i4.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i5.errorMessageComponent, selector: "error-message", inputs: ["tooltipMessage", "validatorMessage", "controls", "label", "submitted"] }, { kind: "component", type: i6.tooltipMessageComponent, selector: "tooltip-message", inputs: ["tooltipMessage", "validatorMessage", "controls", "label", "submitted"] }, { kind: "directive", type: i7.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "directive", type: i8.NgbInputDatepicker, selector: "input[ngbDatepicker]", inputs: ["autoClose", "contentTemplate", "datepickerClass", "dayTemplate", "dayTemplateData", "displayMonths", "firstDayOfWeek", "footerTemplate", "markDisabled", "minDate", "maxDate", "navigation", "outsideDays", "placement", "popperOptions", "restoreFocus", "showWeekNumbers", "startDate", "container", "positionTarget", "weekdays", "disabled"], outputs: ["dateSelect", "navigate", "closed"], exportAs: ["ngbDatepicker"] }] }); }
|
|
385
411
|
}
|
|
386
412
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: DatePickerComponent, decorators: [{
|
|
387
413
|
type: Component,
|
|
@@ -399,7 +425,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.11", ngImpo
|
|
|
399
425
|
I18n,
|
|
400
426
|
{ provide: NgbDatepickerI18n, useClass: CustomDatepickerI18n },
|
|
401
427
|
{ provide: NgbDateParserFormatter, useClass: CustomDatepickerFormat },
|
|
402
|
-
], template: "<label *ngIf=\"label != null && label != '' && showLabel\" class=\"d-flex sumax-label mb-0 p-0\"\r\n ><span [title]=\"label\" style=\"white-space: nowrap; overflow: hidden; text-overflow: ellipsis\">{{ label }}</span>\r\n <span *ngIf=\"required\" class=\"ms-1\" [class.text-danger]=\"controls?.errors != null\"> *</span>\r\n <span *ngIf=\"labelInfo\">\r\n <i class=\"fa fa-exclamation-circle text-info ms-2\" [matTooltip]=\"textLabelInfo\" matTooltipClass=\"bg-info\"></i>\r\n </span>\r\n</label>\r\n<div\r\n [class.input-icon]=\"controls?.errors != null && (controls?.dirty || controls?.touched) && submitted\"\r\n [class.right]=\"controls?.errors != null && (controls?.dirty || controls?.touched) && submitted\">\r\n <!-- tooltip-message es el icono de error -->\r\n\r\n <div class=\"d-flex p-0 group-input-button position-relative\">\r\n <tooltip-message\r\n
|
|
428
|
+
], template: "<label *ngIf=\"label != null && label != '' && showLabel\" class=\"d-flex sumax-label mb-0 p-0\"\r\n ><span [title]=\"label\" style=\"white-space: nowrap; overflow: hidden; text-overflow: ellipsis\">{{ label }}</span>\r\n <span *ngIf=\"required\" class=\"ms-1\" [class.text-danger]=\"controls?.errors != null\"> *</span>\r\n <span *ngIf=\"labelInfo\">\r\n <i class=\"fa fa-exclamation-circle text-info ms-2\" [matTooltip]=\"textLabelInfo\" matTooltipClass=\"bg-info\"></i>\r\n </span>\r\n</label>\r\n<div\r\n [class.input-icon]=\"controls?.errors != null && (controls?.dirty || controls?.touched) && submitted\"\r\n [class.right]=\"controls?.errors != null && (controls?.dirty || controls?.touched) && submitted\">\r\n <!-- tooltip-message es el icono de error -->\r\n\r\n <div class=\"d-flex p-0 group-input-button position-relative\">\r\n <tooltip-message\r\n [label]=\"label\"\r\n [controls]=\"controls\"\r\n [validatorMessage]=\"validatorMessage\"\r\n [submitted]=\"submitted\"\r\n [tooltipMessage]=\"tooltipMessage\"></tooltip-message>\r\n <input\r\n type=\"text\"\r\n [attr.autocomplete]=\"autocomplete\"\r\n [class.is-invalid]=\"controls?.errors != null && (controls?.dirty || controls?.touched) && submitted\"\r\n [disabled]=\"disabled\"\r\n [readonly]=\"readonly\"\r\n (keyup.enter)=\"onKeyUpEnter()\"\r\n (keyup.ArrowUp)=\"arrowUpKeyUp()\"\r\n (keypress)=\"handleKeyPress($event)\"\r\n (input)=\"onInput($any($event.target).value)\"\r\n (dateSelect)=\"onInput($event)\"\r\n (focus)=\"onFocus($any($event.target).value)\"\r\n (focusout)=\"focusOut($any($event.target).value)\"\r\n (blur)=\"onBlur()\"\r\n (paste)=\"handlePaste($event)\"\r\n class=\"form-control form-control-sm rounded-left use-input\"\r\n container=\"body\"\r\n placeholder=\"dd/mm/yyyy\"\r\n [minDate]=\"{ year: 1960, month: 1, day: 1 }\"\r\n [maxDate]=\"maxDate\"\r\n name=\"fecha\"\r\n ngbDatepicker\r\n #fecha=\"ngbDatepicker\"\r\n [(ngModel)]=\"value\" />\r\n <button type=\"button\" [disabled]=\"disabled || readonly\" class=\"btn btn-info p-0 rounded-0 use-button\" (click)=\"fecha.toggle()\">\r\n <!-- <mat-icon class=\"text-white pt-1\" style=\"font-size: 18px;\" [matTooltip]=\"'Calendario'\" matTooltipClass=\"bg-info\">calendar_today</mat-icon> -->\r\n <i class=\"fa fa-calendar text-white px-1\" aria-hidden=\"true\"></i>\r\n </button>\r\n </div>\r\n</div>\r\n<!-- error-message es el mansaje que aparece abajo del componente -->\r\n<error-message\r\n [label]=\"label\"\r\n [controls]=\"controls\"\r\n [validatorMessage]=\"validatorMessage\"\r\n [submitted]=\"submitted\"\r\n [tooltipMessage]=\"tooltipMessage\"></error-message>\r\n", styles: ["button[disabled]{pointer-events:none}.sumax-label{color:#646c9a!important}.input-icon tooltip-message{color:#ccc;position:absolute;z-index:3;width:16px;font-size:16px;text-align:center;left:auto;right:35px;top:50%;transform:translateY(-50%)}.input-icon.right>.form-control{padding-right:33px;padding-left:12px}.was-validated .form-control:invalid:focus,.form-control.is-invalid:focus{border-color:#dc3545;box-shadow:inset 0 1px 1px #00000013,0 0 0 3px #fde6e8!important}.was-validated .form-control:invalid,.form-control.is-invalid{background-image:none;box-shadow:inset 0 1px 1px #00000013,0 0 0 3px #fde6e8!important}.form-control:focus,.form-control:active{border-color:#007eff;box-shadow:inset 0 1px 1px #00000013,0 0 0 3px #007eff1a!important}\n"] }]
|
|
403
429
|
}], ctorParameters: () => [{ type: i0.ElementRef }, { type: i1.MessageUtilService }, { type: i2.DatePickerService }, { type: i0.Renderer2 }], propDecorators: { showLabel: [{
|
|
404
430
|
type: Input
|
|
405
431
|
}], label: [{
|
|
@@ -458,4 +484,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.11", ngImpo
|
|
|
458
484
|
type: ViewChild,
|
|
459
485
|
args: ['fecha']
|
|
460
486
|
}] } });
|
|
461
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0ZS1waWNrZXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LXN1bWF4LWVycC1jb21wb25lbnQvc3JjL2xpYi9kYXRlLXBpY2tlci9kYXRlLXBpY2tlci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtc3VtYXgtZXJwLWNvbXBvbmVudC9zcmMvbGliL2RhdGUtcGlja2VyL2RhdGUtcGlja2VyLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCxTQUFTLEVBRVQsWUFBWSxFQUNaLEtBQUssRUFHTCxNQUFNLEVBR04sU0FBUyxFQUNULFVBQVUsR0FDWCxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBR0wsYUFBYSxFQUNiLGlCQUFpQixHQUVsQixNQUFNLGdCQUFnQixDQUFDO0FBQ3hCLE9BQU8sRUFDTCxPQUFPLEVBQ1Asc0JBQXNCLEVBR3RCLGlCQUFpQixHQUNsQixNQUFNLDRCQUE0QixDQUFDO0FBR3BDLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxJQUFJLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUNwRSxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUNsRSxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUNyRSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sbUJBQW1CLENBQUM7Ozs7Ozs7Ozs7QUF1QjdDLDJKQUEySjtBQUMzSixNQUFNLE9BQU8sbUJBQW1CO0lBNks5QixZQUNVLEVBQWMsRUFDZCxrQkFBc0MsRUFDdEMsaUJBQW9DLEVBQ3BDLE9BQWtCO1FBSGxCLE9BQUUsR0FBRixFQUFFLENBQVk7UUFDZCx1QkFBa0IsR0FBbEIsa0JBQWtCLENBQW9CO1FBQ3RDLHNCQUFpQixHQUFqQixpQkFBaUIsQ0FBbUI7UUFDcEMsWUFBTyxHQUFQLE9BQU8sQ0FBVztRQTlLNUI7Ozs7VUFJRTtRQUNPLGNBQVMsR0FBWSxJQUFJLENBQUM7UUFFbkM7Ozs7VUFJRTtRQUNPLFVBQUssR0FBUSxJQUFJLENBQUM7UUFFM0I7Ozs7VUFJRTtRQUNPLGlCQUFZLEdBQVcsS0FBSyxDQUFDO1FBOEJ0Qzs7OztVQUlFO1FBQ08sYUFBUSxHQUFZLEtBQUssQ0FBQztRQUVuQzs7OztVQUlFO1FBQ08sdUJBQWtCLEdBQVksSUFBSSxDQUFDO1FBRTVDOzs7O1VBSUU7UUFDTyxhQUFRLEdBQVksS0FBSyxDQUFDO1FBRW5DOzs7O1VBSUU7UUFDTyxxQkFBZ0IsR0FBWSxLQUFLLENBQUM7UUFFM0M7Ozs7VUFJRTtRQUNPLG1CQUFjLEdBQVksSUFBSSxDQUFDO1FBRXhDOzs7O1VBSUU7UUFDTyxtQkFBYyxHQUFZLEtBQUssQ0FBQztRQUV6Qzs7OztVQUlFO1FBQ08sY0FBUyxHQUFZLElBQUksQ0FBQztRQUVuQzs7OztVQUlFO1FBQ08sY0FBUyxHQUFZLEtBQUssQ0FBQztRQUVwQzs7OztVQUlFO1FBQ08sa0JBQWEsR0FBVyxFQUFFLENBQUM7UUFnQnBDOzs7O1VBSUU7UUFDTyxZQUFPLEdBQVksS0FBSyxDQUFDO1FBRWxDOzs7O1VBSUU7UUFDTyxpQkFBWSxHQUFZLEtBQUssQ0FBQztRQUV2Qzs7OztVQUlFO1FBQ08sYUFBUSxHQUFZLEtBQUssQ0FBQztRQUVuQzs7OztVQUlFO1FBQ08sd0JBQW1CLEdBQVksS0FBSyxDQUFDO1FBRXBDLFdBQU0sR0FBc0IsSUFBSSxZQUFZLEVBQUUsQ0FBQztRQUMvQyxXQUFNLEdBQXNCLElBQUksWUFBWSxFQUFFLENBQUM7UUFDL0MsVUFBSyxHQUFzQixJQUFJLFlBQVksRUFBRSxDQUFDO1FBQzlDLGFBQVEsR0FBc0IsSUFBSSxZQUFZLEVBQUUsQ0FBQztRQUNqRCxTQUFJLEdBQXNCLElBQUksWUFBWSxFQUFFLENBQUM7UUFLdkQsY0FBUyxHQUFxQixFQUFFLENBQUM7UUFDakMseUJBQW9CLEdBQUcsSUFBSSxvQkFBb0IsRUFBRSxDQUFDO1FBR2xELGVBQVUsR0FBRyxFQUFFLENBQUM7UUFDaEIsZUFBVSxHQUFHLEtBQUssQ0FBQztRQXVDbkIsYUFBUSxHQUFHLENBQUMsQ0FBTSxFQUFFLEVBQUUsR0FBRSxDQUFDLENBQUM7UUFDMUIsdUJBQWtCLEdBQUcsR0FBRyxFQUFFLEdBQUUsQ0FBQyxDQUFDO1FBQzlCLFlBQU8sR0FBRyxHQUFHLEVBQUUsR0FBRSxDQUFDLENBQUM7UUFFbkIsVUFBSyxHQUFHLEdBQUcsRUFBRTtZQUNYLE1BQU0sY0FBYyxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUMsYUFBYSxDQUFDLGFBQWEsQ0FBQyxlQUFlLENBQUMsQ0FBQztZQUM1RSxjQUFjLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDdkIsY0FBYyxDQUFDLE1BQU0sRUFBRSxDQUFDO1FBQzFCLENBQUMsQ0FBQztRQXZDQSxJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxZQUFZLEVBQUUsQ0FBQztRQUN2RCxJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxlQUFlLEVBQUUsQ0FBQztRQUM3RCxJQUFJLENBQUMsa0JBQWtCLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixDQUFDLHFCQUFxQixFQUFFLENBQUM7UUFDekUsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUMsaUJBQWlCLENBQUMsZUFBZSxFQUFFLENBQUM7UUFDN0QsSUFBSSxDQUFDLGdCQUFnQixHQUFHLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxtQkFBbUIsRUFBRSxDQUFDO1FBQ3JFLElBQUksQ0FBQyxjQUFjLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixDQUFDLGlCQUFpQixFQUFFLENBQUM7UUFDakUsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsaUJBQWlCLENBQUMsWUFBWSxFQUFFLENBQUM7UUFDdkQsSUFBSSxDQUFDLGNBQWMsR0FBRyxJQUFJLENBQUMsaUJBQWlCLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztJQUNuRSxDQUFDO0lBRUQsV0FBVyxDQUFDLE9BQXNCO1FBQ2hDLElBQUksT0FBTyxDQUFDLFdBQVcsQ0FBQyxFQUFFLENBQUM7WUFDekIsSUFBSSxJQUFJLENBQUMsUUFBUSxLQUFLLFNBQVMsSUFBSSxPQUFPLENBQUMsV0FBVyxDQUFDLENBQUMsWUFBWSxFQUFFLENBQUM7Z0JBQ3JFLElBQUksQ0FBQyxRQUFRLENBQUMsV0FBVyxFQUFFLENBQUM7Z0JBQzVCLElBQUksQ0FBQyxRQUFRLENBQUMsYUFBYSxFQUFFLENBQUM7WUFDaEMsQ0FBQztRQUNILENBQUM7SUFDSCxDQUFDO0lBRUQsUUFBUTtRQUNOLElBQUksSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQ2pCLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUNyRCxDQUFDO1FBQ0QsSUFBSSxJQUFJLENBQUMsWUFBWSxJQUFJLElBQUksSUFBSSxJQUFJLENBQUMsUUFBUSxJQUFJLEtBQUssRUFBRSxDQUFDO1lBQ3hELE1BQU0sY0FBYyxHQUNsQixJQUFJLENBQUMsRUFBRSxDQUFDLGFBQWEsQ0FBQyxhQUFhLENBQUMsZUFBZSxDQUFDLENBQUM7WUFDdkQsY0FBYyxDQUFDLEtBQUssRUFBRSxDQUFDO1lBQ3ZCLGNBQWMsQ0FBQyxNQUFNLEVBQUUsQ0FBQztRQUMxQixDQUFDO0lBQ0gsQ0FBQztJQVlELE9BQU8sQ0FBQyxHQUFRO1FBQ2QsSUFBSSxHQUFHLEVBQUUsQ0FBQztZQUNSLE1BQU0sY0FBYyxHQUNsQixJQUFJLENBQUMsRUFBRSxDQUFDLGFBQWEsQ0FBQyxhQUFhLENBQUMsZUFBZSxDQUFDLENBQUM7WUFDdkQsY0FBYyxDQUFDLE1BQU0sRUFBRSxDQUFDO1FBQzFCLENBQUM7SUFDSCxDQUFDO0lBRUQsVUFBVSxDQUFDLEtBQVU7UUFDbkIsSUFBSSxLQUFLLEVBQUUsQ0FBQztZQUNWLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixDQUFDLEtBQUssQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUNoRCxJQUFJLEtBQUssSUFBSSxLQUFLLFlBQVksSUFBSSxFQUFFLENBQUM7Z0JBQ25DLElBQUksQ0FBQyxVQUFVLEdBQUcsUUFBUSxDQUFDLGdCQUFnQixDQUFDLEtBQUssQ0FBQyxDQUFDO2dCQUNuRCxJQUFJLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztvQkFDbEIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxPQUFPLEVBQUUsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDO2dCQUNwRSxDQUFDO1lBQ0gsQ0FBQztZQUNELElBQUksS0FBSyxJQUFJLE9BQU8sS0FBSyxLQUFLLFFBQVE7Z0JBQUUsSUFBSSxDQUFDLFVBQVUsR0FBRyxLQUFLLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDekUsQ0FBQzthQUFNLENBQUM7WUFDTixJQUFJLENBQUMsS0FBSyxHQUFHLEVBQUUsQ0FBQztZQUNoQixJQUFJLENBQUMsVUFBVSxHQUFHLEVBQUUsQ0FBQztRQUN2QixDQUFDO0lBQ0gsQ0FBQztJQUNELGdCQUFnQixDQUFDLEVBQU87UUFDdEIsSUFBSSxDQUFDLFFBQVEsR0FBRyxFQUFFLENBQUM7SUFDckIsQ0FBQztJQUNELGlCQUFpQixDQUFDLEVBQU87UUFDdkIsSUFBSSxDQUFDLE9BQU8sR0FBRyxFQUFFLENBQUM7SUFDcEIsQ0FBQztJQUNELGdCQUFnQixDQUFFLGFBQXNCLEtBQUs7UUFDM0MsSUFBSSxDQUFDLFFBQVEsR0FBRyxVQUFVLENBQUM7SUFDN0IsQ0FBQztJQUVELFFBQVEsQ0FBQyxPQUF3QjtRQUMvQixJQUFJLENBQUMsUUFBUSxHQUFHLE9BQU8sQ0FBQztRQUN4QixJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO1lBQ3JCLElBQUksSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO2dCQUNwQixJQUFJLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQyxPQUFPLEVBQUUsT0FBTyxFQUFFLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQztZQUM5RCxDQUFDO1lBQ0QsSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUM7UUFDekIsQ0FBQztRQUNELE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUVELHlCQUF5QixDQUFFLEVBQWM7UUFDdkMsSUFBSSxDQUFDLGtCQUFrQixHQUFHLEVBQUUsQ0FBQztJQUMvQixDQUFDO0lBRUQsTUFBTTtRQUNKLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztJQUNqQixDQUFDO0lBRUQsT0FBTyxDQUFDLEtBQVU7UUFDaEIsSUFBSSxDQUFDLFNBQVMsR0FBRyxLQUFLLENBQUM7UUFFdkIsSUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUM7UUFDbkIsSUFBSSxJQUFJLENBQUMsS0FBSyxZQUFZLE9BQU8sRUFBRSxDQUFDO1lBQ2xDLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUMvQyxDQUFDO1FBRUQsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDOUIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQ25DLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUVoQyxJQUFJLENBQUMsVUFBVSxHQUFHLEVBQUUsQ0FBQztJQUN2QixDQUFDO0lBRUQsWUFBWTtRQUNWLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztJQUNwQixDQUFDO0lBRUQsY0FBYyxDQUFDLEtBQW9CO1FBQ2pDLElBQUksSUFBSSxDQUFDLG1CQUFtQixFQUFFLENBQUM7WUFDN0IsSUFBSSxDQUFDLDBCQUEwQixDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3pDLENBQUM7YUFBTSxDQUFDO1lBQ04sSUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUFZLENBQUMsQ0FBQztRQUNqQyxDQUFDO0lBQ0gsQ0FBQztJQUVPLDBCQUEwQixDQUFDLEtBQW9CO1FBQ3JELE1BQU0sZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7UUFFekQsSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUM7WUFDdEIsS0FBSyxDQUFDLGNBQWMsRUFBRSxDQUFDO1lBQ3ZCLE9BQU87UUFDVCxDQUFDO1FBRUQsTUFBTSxLQUFLLEdBQUcsS0FBSyxDQUFDLE1BQTBCLENBQUM7UUFDL0MsTUFBTSxZQUFZLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQztRQUVqQyxNQUFNLGVBQWUsR0FBRyxJQUFJLENBQUMsaUJBQWlCLENBQUMsS0FBSyxDQUFDLENBQUM7UUFFdEQsSUFBSSxlQUFlLEVBQUUsQ0FBQztZQUNwQixPQUFPO1FBQ1QsQ0FBQztRQUVELE1BQU0scUJBQXFCLEdBQUcsSUFBSSxDQUFDLHNCQUFzQixDQUFDLFlBQVksQ0FBQyxDQUFDO1FBRXhFLElBQUkscUJBQXFCLEVBQUUsQ0FBQztZQUMxQixLQUFLLENBQUMsY0FBYyxFQUFFLENBQUM7UUFDekIsQ0FBQztJQUNILENBQUM7SUFFTyxlQUFlLENBQUMsR0FBVztRQUNqQyxPQUFPLFFBQVEsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDNUIsQ0FBQztJQUVPLGlCQUFpQixDQUFDLEtBQXVCO1FBQy9DLE9BQU8sS0FBSyxDQUFDLGNBQWMsS0FBSyxLQUFLLENBQUMsWUFBWSxDQUFDO0lBQ3JELENBQUM7SUFFTyxzQkFBc0IsQ0FBQyxZQUFvQjtRQUNqRCxNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDO1FBRTNDLGtFQUFrRTtRQUNsRSxNQUFNLFNBQVMsR0FBRyxVQUFVLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3RDLE9BQU8sWUFBWSxDQUFDLE1BQU0sSUFBSSxTQUFTLENBQUM7SUFDMUMsQ0FBQztJQUVELFdBQVcsQ0FBQyxDQUFNO1FBQ2hCLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQyxPQUFPLElBQUksRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLE9BQU8sSUFBSSxFQUFFLEVBQUUsQ0FBQztZQUM3RCxDQUFDLENBQUMsY0FBYyxFQUFFLENBQUM7WUFDbkIsQ0FBQyxDQUFDLGVBQWUsRUFBRSxDQUFDO1FBQ3RCLENBQUM7SUFDSCxDQUFDO0lBRUQsZ0JBQWdCLENBQUMsS0FBVTtRQUN6QixNQUFNLElBQUksR0FBUyxRQUFRLENBQUMsS0FBSyxDQUFDLEtBQUssRUFBRSxNQUFNLENBQUMsQ0FBQztRQUNqRCxNQUFNLE9BQU8sR0FBa0I7WUFDN0IsR0FBRyxFQUFFLE1BQU0sQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ2xDLEtBQUssRUFBRSxNQUFNLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUN0QyxJQUFJLEVBQUUsTUFBTSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUM7U0FDckMsQ0FBQztRQUNGLGtCQUFrQjtRQUNsQixPQUFPLElBQUksT0FBTyxDQUFDLE9BQU8sQ0FBQyxJQUFJLEVBQUUsT0FBTyxDQUFDLEtBQUssRUFBRSxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDL0QsQ0FBQztJQUVELGVBQWUsQ0FBQyxLQUFvQjtRQUNsQyxNQUFNLGFBQWEsR0FDakIsSUFBSSxLQUFLLENBQUMsR0FBRyxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxLQUFLLENBQUMsS0FBSyxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQztRQUN2RSxPQUFPLFFBQVEsQ0FBQyxnQkFBZ0IsQ0FBQyxhQUFhLENBQUMsQ0FBQztJQUNsRCxDQUFDO0lBRUQsVUFBVTtRQUNSLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7WUFDbkIsSUFBSSxTQUFTLEdBQUcsSUFBSSxDQUFDLG9CQUFvQixDQUFDLGVBQWUsQ0FDdkQsSUFBSSxDQUFDLFFBQVEsRUFDYixJQUFJLENBQUMsY0FBYyxFQUNuQixJQUFJLENBQUMsS0FBSyxDQUNYLENBQUM7WUFDRixJQUFJLFNBQVMsQ0FBQyxLQUFLLEVBQUUsQ0FBQztnQkFDcEIsSUFBSSxDQUFDLGtCQUFrQixDQUFDLGVBQWUsQ0FDckMsUUFBUSxFQUNSLE9BQU8sRUFDUCxTQUFTLENBQUMsT0FBTyxDQUNsQixDQUFDO2dCQUNGLE9BQU87WUFDVCxDQUFDO1FBQ0gsQ0FBQztRQUNELElBQUksSUFBSSxDQUFDLElBQUksSUFBSSxTQUFTLEVBQUUsQ0FBQztZQUMzQixJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7Z0JBQzdDLElBQUksSUFBSSxDQUFDLGFBQWEsSUFBSSxTQUFTLEVBQUUsQ0FBQztvQkFDcEMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxLQUFLLEVBQUUsQ0FBQztnQkFDN0IsQ0FBQztZQUNILENBQUM7aUJBQU0sQ0FBQztnQkFDTixJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO1lBQ3BCLENBQUM7UUFDSCxDQUFDO2FBQU0sQ0FBQztZQUNOLElBQUksSUFBSSxDQUFDLGFBQWEsSUFBSSxTQUFTLEVBQUUsQ0FBQztnQkFDcEMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxLQUFLLEVBQUUsQ0FBQztZQUM3QixDQUFDO2lCQUFNLENBQUM7Z0JBQ04sSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUNyQixDQUFDO1FBQ0gsQ0FBQztJQUNILENBQUM7SUFFRCxZQUFZO1FBQ1YsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUNuQixJQUFJLFNBQVMsR0FBRyxJQUFJLENBQUMsb0JBQW9CLENBQUMsZUFBZSxDQUN2RCxJQUFJLENBQUMsUUFBUSxFQUNiLElBQUksQ0FBQyxjQUFjLEVBQ25CLElBQUksQ0FBQyxLQUFLLENBQ1gsQ0FBQztZQUNGLElBQUksU0FBUyxDQUFDLEtBQUssRUFBRSxDQUFDO2dCQUNwQixJQUFJLENBQUMsa0JBQWtCLENBQUMsZUFBZSxDQUNyQyxRQUFRLEVBQ1IsT0FBTyxFQUNQLFNBQVMsQ0FBQyxPQUFPLENBQ2xCLENBQUM7Z0JBQ0YsT0FBTztZQUNULENBQUM7UUFDSCxDQUFDO1FBQ0QsSUFBSSxJQUFJLENBQUMsSUFBSSxJQUFJLFNBQVMsRUFBRSxDQUFDO1lBQzNCLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztnQkFDN0MsSUFBSSxJQUFJLENBQUMsYUFBYSxJQUFJLFNBQVMsRUFBRSxDQUFDO29CQUNwQyxJQUFJLENBQUMsYUFBYSxDQUFDLEtBQUssRUFBRSxDQUFDO2dCQUM3QixDQUFDO1lBQ0gsQ0FBQztpQkFBTSxDQUFDO2dCQUNOLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDcEIsQ0FBQztRQUNILENBQUM7YUFBTSxDQUFDO1lBQ04sSUFBSSxJQUFJLENBQUMsYUFBYSxJQUFJLFNBQVMsRUFBRSxDQUFDO2dCQUNwQyxJQUFJLENBQUMsYUFBYSxDQUFDLEtBQUssRUFBRSxDQUFDO1lBQzdCLENBQUM7aUJBQU0sQ0FBQztnQkFDTixJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxDQUFDO1lBQ3JCLENBQUM7UUFDSCxDQUFDO0lBQ0gsQ0FBQztJQUVELFFBQVEsQ0FBQyxLQUFVO1FBQ2pCLElBQUksS0FBSyxJQUFJLEtBQUssQ0FBQyxJQUFJLEVBQUUsS0FBSyxFQUFFLEVBQUUsQ0FBQztZQUNqQyxJQUFJLElBQUksQ0FBQyxVQUFVLEtBQUssS0FBSztnQkFBRSxPQUFPO1lBRXRDLElBQUksQ0FBQyxhQUFhLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDM0IsSUFBSSxLQUFLLFlBQVksT0FBTyxFQUFFLENBQUM7Z0JBQzdCLElBQUksS0FBSyxLQUFLLElBQUksQ0FBQyxlQUFlLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQztvQkFDMUMsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLEtBQUssQ0FBQyxDQUFDO2dCQUMvQyxDQUFDO3FCQUFNLENBQUM7b0JBQ04sSUFBSSxDQUFDLFNBQVMsR0FBRyxLQUFLLENBQUM7Z0JBQ3pCLENBQUM7WUFDSCxDQUFDO2lCQUFNLENBQUM7Z0JBQ04sS0FBSyxHQUFHLEtBQUssQ0FBQyxVQUFVLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxDQUFDO2dCQUNsQyxJQUFJLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO29CQUM1QixJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FDaEMsUUFBUSxDQUFDLGdCQUFnQixDQUFDLEtBQUssQ0FBQyxDQUNqQyxDQUFDO29CQUNGLElBQUksQ0FBQyxTQUFTLEdBQUcsUUFBUSxDQUFDLGdCQUFnQixDQUFDLEtBQUssQ0FBQyxDQUFDO2dCQUNwRCxDQUFDO3FCQUFNLENBQUM7b0JBQ04sSUFBSSxLQUFLLElBQUksRUFBRSxJQUFJLEtBQUssSUFBSSxJQUFJLEVBQUUsQ0FBQzt3QkFDakMsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQ2hDLFFBQVEsQ0FBQyxnQkFBZ0IsQ0FBQyxLQUFLLENBQUMsQ0FDakMsQ0FBQzt3QkFDRixJQUFJLENBQUMsU0FBUyxHQUFHLFFBQVEsQ0FBQyxnQkFBZ0IsQ0FBQyxLQUFLLENBQUMsQ0FBQztvQkFDcEQsQ0FBQztnQkFDSCxDQUFDO1lBQ0gsQ0FBQztZQUVELElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztZQUNmLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1lBRTlCLElBQUksT0FBTyxJQUFJLENBQUMsU0FBUyxLQUFLLFFBQVE7Z0JBQUUsSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDO1FBQzNFLENBQUM7SUFDSCxDQUFDOytHQTljVSxtQkFBbUI7bUdBQW5CLG1CQUFtQixxdUJBbEJuQjtZQUNUO2dCQUNFLE9BQU8sRUFBRSxpQkFBaUI7Z0JBQzFCLFdBQVcsRUFBRSxVQUFVLENBQUMsR0FBRyxFQUFFLENBQUMsbUJBQW1CLENBQUM7Z0JBQ2xELEtBQUssRUFBRSxJQUFJO2FBQ1o7WUFDRDtnQkFDRSxPQUFPLEVBQUUsYUFBYTtnQkFDdEIsV0FBVyxFQUFFLFVBQVUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxtQkFBbUIsQ0FBQztnQkFDbEQsS0FBSyxFQUFFLElBQUk7YUFDWjtZQUNELElBQUk7WUFDSixFQUFFLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxRQUFRLEVBQUUsb0JBQW9CLEVBQUU7WUFDOUQsRUFBRSxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsUUFBUSxFQUFFLHNCQUFzQixFQUFFO1NBQ3RFLHVKQ3BESCx1cUZBdURBOzs0RkRDYSxtQkFBbUI7a0JBdEIvQixTQUFTOytCQUNFLGFBQWEsYUFHWjt3QkFDVDs0QkFDRSxPQUFPLEVBQUUsaUJBQWlCOzRCQUMxQixXQUFXLEVBQUUsVUFBVSxDQUFDLEdBQUcsRUFBRSxvQkFBb0IsQ0FBQzs0QkFDbEQsS0FBSyxFQUFFLElBQUk7eUJBQ1o7d0JBQ0Q7NEJBQ0UsT0FBTyxFQUFFLGFBQWE7NEJBQ3RCLFdBQVcsRUFBRSxVQUFVLENBQUMsR0FBRyxFQUFFLG9CQUFvQixDQUFDOzRCQUNsRCxLQUFLLEVBQUUsSUFBSTt5QkFDWjt3QkFDRCxJQUFJO3dCQUNKLEVBQUUsT0FBTyxFQUFFLGlCQUFpQixFQUFFLFFBQVEsRUFBRSxvQkFBb0IsRUFBRTt3QkFDOUQsRUFBRSxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsUUFBUSxFQUFFLHNCQUFzQixFQUFFO3FCQUN0RTt3S0FZUSxTQUFTO3NCQUFqQixLQUFLO2dCQU9HLEtBQUs7c0JBQWIsS0FBSztnQkFPRyxZQUFZO3NCQUFwQixLQUFLO2dCQU9HLElBQUk7c0JBQVosS0FBSztnQkFPRyxhQUFhO3NCQUFyQixLQUFLO2dCQU9HLElBQUk7c0JBQVosS0FBSztnQkFPRyxhQUFhO3NCQUFyQixLQUFLO2dCQU9HLFFBQVE7c0JBQWhCLEtBQUs7Z0JBT0csa0JBQWtCO3NCQUExQixLQUFLO2dCQU9HLFFBQVE7c0JBQWhCLEtBQUs7Z0JBT0csZ0JBQWdCO3NCQUF4QixLQUFLO2dCQU9HLGNBQWM7c0JBQXRCLEtBQUs7Z0JBT0csY0FBYztzQkFBdEIsS0FBSztnQkFPRyxTQUFTO3NCQUFqQixLQUFLO2dCQU9HLFNBQVM7c0JBQWpCLEtBQUs7Z0JBT0csYUFBYTtzQkFBckIsS0FBSztnQkFPRyxPQUFPO3NCQUFmLEtBQUs7Z0JBT0csT0FBTztzQkFBZixLQUFLO2dCQU9HLE9BQU87c0JBQWYsS0FBSztnQkFPRyxZQUFZO3NCQUFwQixLQUFLO2dCQU9HLFFBQVE7c0JBQWhCLEtBQUs7Z0JBT0csbUJBQW1CO3NCQUEzQixLQUFLO2dCQUVJLE1BQU07c0JBQWYsTUFBTTtnQkFDRyxNQUFNO3NCQUFmLE1BQU07Z0JBQ0csS0FBSztzQkFBZCxNQUFNO2dCQUNHLFFBQVE7c0JBQWpCLE1BQU07Z0JBQ0csSUFBSTtzQkFBYixNQUFNO2dCQU9hLGFBQWE7c0JBQWhDLFNBQVM7dUJBQUMsT0FBTyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XHJcbiAgQ29tcG9uZW50LFxyXG4gIEVsZW1lbnRSZWYsXHJcbiAgRXZlbnRFbWl0dGVyLFxyXG4gIElucHV0LFxyXG4gIE9uQ2hhbmdlcyxcclxuICBPbkluaXQsXHJcbiAgT3V0cHV0LFxyXG4gIFJlbmRlcmVyMixcclxuICBTaW1wbGVDaGFuZ2VzLFxyXG4gIFZpZXdDaGlsZCxcclxuICBmb3J3YXJkUmVmLFxyXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQge1xyXG4gIEFic3RyYWN0Q29udHJvbCxcclxuICBDb250cm9sVmFsdWVBY2Nlc3NvcixcclxuICBOR19WQUxJREFUT1JTLFxyXG4gIE5HX1ZBTFVFX0FDQ0VTU09SLFxyXG4gIFZhbGlkYXRpb25FcnJvcnMsXHJcbn0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5pbXBvcnQge1xyXG4gIE5nYkRhdGUsXHJcbiAgTmdiRGF0ZVBhcnNlckZvcm1hdHRlcixcclxuICBOZ2JEYXRlU3RydWN0LFxyXG4gIE5nYkRhdGVwaWNrZXIsXHJcbiAgTmdiRGF0ZXBpY2tlckkxOG4sXHJcbn0gZnJvbSAnQG5nLWJvb3RzdHJhcC9uZy1ib290c3RyYXAnO1xyXG5pbXBvcnQgeyBEYXRlUGlja2VyU2VydmljZSB9IGZyb20gJy4vZGF0ZS1waWNrZXIuc2VydmljZSc7XHJcbmltcG9ydCB7IE1lc3NhZ2VVdGlsU2VydmljZSB9IGZyb20gJy4uL3V0aWxzL21lc3NhZ2UtdXRpbC5zZXJ2aWNlJztcclxuaW1wb3J0IHsgQ3VzdG9tRGF0ZXBpY2tlckkxOG4sIEkxOG4gfSBmcm9tICcuL0N1c3RvbURhdGVQaWNrZXJJMThuJztcclxuaW1wb3J0IHsgQ3VzdG9tRGF0ZXBpY2tlckZvcm1hdCB9IGZyb20gJy4vQ3VzdG9tRGF0ZVBpY2tlckZvcm1hdCc7XHJcbmltcG9ydCB7IFNoYXJlZENvbXBvbmVudHNVdGlsIH0gZnJvbSAnLi4vdXRpbHMvU2hhcmVkQ29tcG9uZW50c1V0aWwnO1xyXG5pbXBvcnQgeyBEYXRlVXRpbCB9IGZyb20gJy4uL3V0aWxzL0RhdGVVdGlsJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnZGF0ZS1waWNrZXInLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9kYXRlLXBpY2tlci5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJy4vZGF0ZS1waWNrZXIuY29tcG9uZW50LnNjc3MnXSxcclxuICBwcm92aWRlcnM6IFtcclxuICAgIHtcclxuICAgICAgcHJvdmlkZTogTkdfVkFMVUVfQUNDRVNTT1IsXHJcbiAgICAgIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IERhdGVQaWNrZXJDb21wb25lbnQpLFxyXG4gICAgICBtdWx0aTogdHJ1ZSxcclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIHByb3ZpZGU6IE5HX1ZBTElEQVRPUlMsXHJcbiAgICAgIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IERhdGVQaWNrZXJDb21wb25lbnQpLFxyXG4gICAgICBtdWx0aTogdHJ1ZSxcclxuICAgIH0sXHJcbiAgICBJMThuLFxyXG4gICAgeyBwcm92aWRlOiBOZ2JEYXRlcGlja2VySTE4biwgdXNlQ2xhc3M6IEN1c3RvbURhdGVwaWNrZXJJMThuIH0sXHJcbiAgICB7IHByb3ZpZGU6IE5nYkRhdGVQYXJzZXJGb3JtYXR0ZXIsIHVzZUNsYXNzOiBDdXN0b21EYXRlcGlja2VyRm9ybWF0IH0sXHJcbiAgXSxcclxufSlcclxuXHJcbi8vIHByb3ZpZGVyczogW0kxOG4sIHsgcHJvdmlkZTogTmdiRGF0ZXBpY2tlckkxOG4sIHVzZUNsYXNzOiBDdXN0b21EYXRlcGlja2VySTE4biB9LCB7IHByb3ZpZGU6IE5nYkRhdGVQYXJzZXJGb3JtYXR0ZXIsIHVzZUNsYXNzOiBDdXN0b21EYXRlcGlja2VyRm9ybWF0IH1dXHJcbmV4cG9ydCBjbGFzcyBEYXRlUGlja2VyQ29tcG9uZW50XHJcbiAgaW1wbGVtZW50cyBPbkluaXQsIE9uQ2hhbmdlcywgQ29udHJvbFZhbHVlQWNjZXNzb3Jcclxue1xyXG4gIC8qKlxyXG4gICogQGRlc2NyaXB0aW9uIENvbnRyb2xhIGxhIHZpc3VhbGl6YWNpw7NuIGRlbCB0ZXh0byBzdXBlcmlvciAobGFiZWwpXHJcbiAgKiBAZGVmYXVsdCB0cnVlXHJcbiAgKiBAdHlwZSBib29sZWFuXHJcbiAgKi9cclxuICBASW5wdXQoKSBzaG93TGFiZWw6IGJvb2xlYW4gPSB0cnVlO1xyXG4gIFxyXG4gIC8qKlxyXG4gICogQGRlc2NyaXB0aW9uIFRleHRvIGEgbW9zdHJhciBjb21vIGV0aXF1ZXRhIGRlbCBjYW1wb1xyXG4gICogQGRlZmF1bHQgbnVsbFxyXG4gICogQHR5cGUgYW55XHJcbiAgKi9cclxuICBASW5wdXQoKSBsYWJlbDogYW55ID0gbnVsbDtcclxuICBcclxuICAvKipcclxuICAqIEBkZXNjcmlwdGlvbiBWYWxvciBwYXJhIGVsIGF0cmlidXRvIGF1dG9jb21wbGV0ZSBkZWwgaW5wdXRcclxuICAqIEBkZWZhdWx0ICdvZmYnXHJcbiAgKiBAdHlwZSBzdHJpbmdcclxuICAqL1xyXG4gIEBJbnB1dCgpIGF1dG9jb21wbGV0ZTogc3RyaW5nID0gJ29mZic7XHJcbiAgXHJcbiAgLyoqXHJcbiAgKiBAZGVzY3JpcHRpb24gUmVmZXJlbmNpYSBhbCBzaWd1aWVudGUgY29udHJvbCBwYXJhIG5hdmVnYWNpw7NuXHJcbiAgKiBAZGVmYXVsdCB1bmRlZmluZWRcclxuICAqIEB0eXBlIGFueVxyXG4gICovXHJcbiAgQElucHV0KCkgbmV4dDogYW55O1xyXG4gIFxyXG4gIC8qKlxyXG4gICogQGRlc2NyaXB0aW9uIFJlZmVyZW5jaWEgYWwgY29udHJvbCBhbHRlcm5hdGl2byBjdWFuZG8gZWwgc2lndWllbnRlIGVzdMOhIGRlc2hhYmlsaXRhZG9cclxuICAqIEBkZWZhdWx0IHVuZGVmaW5lZFxyXG4gICogQHR5cGUgYW55XHJcbiAgKi9cclxuICBASW5wdXQoKSBuZXh0SXNEaXNhYmxlOiBhbnk7XHJcbiAgXHJcbiAgLyoqXHJcbiAgKiBAZGVzY3JpcHRpb24gUmVmZXJlbmNpYSBhbCBjb250cm9sIGFudGVyaW9yIHBhcmEgbmF2ZWdhY2nDs25cclxuICAqIEBkZWZhdWx0IHVuZGVmaW5lZFxyXG4gICogQHR5cGUgYW55XHJcbiAgKi9cclxuICBASW5wdXQoKSBiYWNrOiBhbnk7XHJcbiAgXHJcbiAgLyoqXHJcbiAgKiBAZGVzY3JpcHRpb24gUmVmZXJlbmNpYSBhbCBjb250cm9sIGFsdGVybmF0aXZvIGN1YW5kbyBlbCBhbnRlcmlvciBlc3TDoSBkZXNoYWJpbGl0YWRvXHJcbiAgKiBAZGVmYXVsdCB1bmRlZmluZWRcclxuICAqIEB0eXBlIGFueVxyXG4gICovXHJcbiAgQElucHV0KCkgYmFja0lzRGlzYWJsZTogYW55O1xyXG4gIFxyXG4gIC8qKlxyXG4gICogQGRlc2NyaXB0aW9uIEluZGljYSBzaSBlbCBjYW1wbyBlcyBvYmxpZ2F0b3Jpb1xyXG4gICogQGRlZmF1bHQgZmFsc2VcclxuICAqIEB0eXBlIGJvb2xlYW5cclxuICAqL1xyXG4gIEBJbnB1dCgpIHJlcXVpcmVkOiBib29sZWFuID0gZmFsc2U7XHJcbiAgXHJcbiAgLyoqXHJcbiAgKiBAZGVzY3JpcHRpb24gQ29tcGxldGEgYXV0b23DoXRpY2FtZW50ZSBjb24gbnVsbCBjdWFuZG8gZWwgdmFsb3IgZXN0w6EgdmFjw61vXHJcbiAgKiBAZGVmYXVsdCB0cnVlXHJcbiAgKiBAdHlwZSBib29sZWFuXHJcbiAgKi9cclxuICBASW5wdXQoKSBub0F1dG9Db21wbGV0ZU51bGw6IGJvb2xlYW4gPSB0cnVlO1xyXG4gIFxyXG4gIC8qKlxyXG4gICogQGRlc2NyaXB0aW9uIEVzdGFibGVjZSBlbCBjb250cm9sIGNvbW8gc29sbyBsZWN0dXJhXHJcbiAgKiBAZGVmYXVsdCBmYWxzZVxyXG4gICogQHR5cGUgYm9vbGVhblxyXG4gICovXHJcbiAgQElucHV0KCkgcmVhZG9ubHk6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBcclxuICAvKipcclxuICAqIEBkZXNjcmlwdGlvbiBNdWVzdHJhIG1lbnNhamVzIGRlIHZhbGlkYWNpw7NuXHJcbiAgKiBAZGVmYXVsdCBmYWxzZVxyXG4gICogQHR5cGUgYm9vbGVhblxyXG4gICovXHJcbiAgQElucHV0KCkgdmFsaWRhdG9yTWVzc2FnZTogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIFxyXG4gIC8qKlxyXG4gICogQGRlc2NyaXB0aW9uIE11ZXN0cmEgbWVuc2FqZXMgZGUgYXl1ZGEgY29tbyB0b29sdGlwc1xyXG4gICogQGRlZmF1bHQgdHJ1ZVxyXG4gICogQHR5cGUgYm9vbGVhblxyXG4gICovXHJcbiAgQElucHV0KCkgdG9vbHRpcE1lc3NhZ2U6IGJvb2xlYW4gPSB0cnVlO1xyXG4gIFxyXG4gIC8qKlxyXG4gICogQGRlc2NyaXB0aW9uIE11ZXN0cmEgYWxlcnRhcyBkZSB2YWxpZGFjacOzblxyXG4gICogQGRlZmF1bHQgZmFsc2VcclxuICAqIEB0eXBlIGJvb2xlYW5cclxuICAqL1xyXG4gIEBJbnB1dCgpIHZhbGlkYXRvckFsZXJ0OiBib29sZWFuID0gZmFsc2U7XHJcbiAgXHJcbiAgLyoqXHJcbiAgKiBAZGVzY3JpcHRpb24gSW5kaWNhIHNpIGVsIGZvcm11bGFyaW8gaGEgc2lkbyBlbnZpYWRvIHBhcmEgbW9zdHJhciB2YWxpZGFjaW9uZXNcclxuICAqIEBkZWZhdWx0IHRydWVcclxuICAqIEB0eXBlIGJvb2xlYW5cclxuICAqL1xyXG4gIEBJbnB1dCgpIHN1Ym1pdHRlZDogYm9vbGVhbiA9IHRydWU7XHJcbiAgXHJcbiAgLyoqXHJcbiAgKiBAZGVzY3JpcHRpb24gSGFiaWxpdGEgaW5mb3JtYWNpw7NuIGFkaWNpb25hbCBwYXJhIGxhIGV0aXF1ZXRhXHJcbiAgKiBAZGVmYXVsdCBmYWxzZVxyXG4gICogQHR5cGUgYm9vbGVhblxyXG4gICovXHJcbiAgQElucHV0KCkgbGFiZWxJbmZvOiBib29sZWFuID0gZmFsc2U7XHJcbiAgXHJcbiAgLyoqXHJcbiAgKiBAZGVzY3JpcHRpb24gVGV4dG8gaW5mb3JtYXRpdm8gYWRpY2lvbmFsIHBhcmEgbGEgZXRpcXVldGFcclxuICAqIEBkZWZhdWx0ICcnXHJcbiAgKiBAdHlwZSBzdHJpbmdcclxuICAqL1xyXG4gIEBJbnB1dCgpIHRleHRMYWJlbEluZm86IHN0cmluZyA9ICcnO1xyXG4gIFxyXG4gIC8qKlxyXG4gICogQGRlc2NyaXB0aW9uIEZlY2hhIG3DrW5pbWEgc2VsZWNjaW9uYWJsZVxyXG4gICogQGRlZmF1bHQgdW5kZWZpbmVkXHJcbiAgKiBAdHlwZSBOZ2JEYXRlU3RydWN0XHJcbiAgKi9cclxuICBASW5wdXQoKSBtaW5EYXRlITogTmdiRGF0ZVN0cnVjdDtcclxuICBcclxuICAvKipcclxuICAqIEBkZXNjcmlwdGlvbiBGZWNoYSBtw6F4aW1hIHNlbGVjY2lvbmFibGVcclxuICAqIEBkZWZhdWx0IHVuZGVmaW5lZFxyXG4gICogQHR5cGUgTmdiRGF0ZVN0cnVjdFxyXG4gICovXHJcbiAgQElucHV0KCkgbWF4RGF0ZSE6IE5nYkRhdGVTdHJ1Y3Q7XHJcbiAgXHJcbiAgLyoqXHJcbiAgKiBAZGVzY3JpcHRpb24gSW5kaWNhIHNpIGVsIHZhbG9yIGVzIGludsOhbGlkb1xyXG4gICogQGRlZmF1bHQgZmFsc2VcclxuICAqIEB0eXBlIGJvb2xlYW5cclxuICAqL1xyXG4gIEBJbnB1dCgpIGludmFsaWQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBcclxuICAvKipcclxuICAqIEBkZXNjcmlwdGlvbiBFc3RhYmxlY2UgZWwgZm9jbyBpbmljaWFsIGVuIGVsIGNvbXBvbmVudGVcclxuICAqIEBkZWZhdWx0IGZhbHNlXHJcbiAgKiBAdHlwZSBib29sZWFuXHJcbiAgKi9cclxuICBASW5wdXQoKSBmb2N1c0luaXRpYWw6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBcclxuICAvKipcclxuICAqIEBkZXNjcmlwdGlvbiBEZXNoYWJpbGl0YSBlbCBjb250cm9sXHJcbiAgKiBAZGVmYXVsdCBmYWxzZVxyXG4gICogQHR5cGUgYm9vbGVhblxyXG4gICovXHJcbiAgQElucHV0KCkgZGlzYWJsZWQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgLyoqXHJcbiAgKiBAZGVzY3JpcHRpb24gUmVzdHJpbmdlIGxhIGVudHJhZGEgYSBtw6F4aW1vIDggZMOtZ2l0b3MgKERETU1ZWVlZKSBvIDEwIGNhcmFjdGVyZXMgKEREL01NL1lZWVkpXHJcbiAgKiBAZGVmYXVsdCBmYWxzZVxyXG4gICogQHR5cGUgYm9vbGVhblxyXG4gICovXHJcbiAgQElucHV0KCkgcmVzdHJpY3RJbnB1dExlbmd0aDogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICBAT3V0cHV0KCkgb25OZXh0OiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuICBAT3V0cHV0KCkgb25CYWNrOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuICBAT3V0cHV0KCkgaW5wdXQ6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG4gIEBPdXRwdXQoKSBvbmNoYW5nZTogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcbiAgQE91dHB1dCgpIGJsdXI6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG4gIC8vIHhtaW5EYXRlID0gbnVsbDtcclxuICAvLyB4bWF4RGF0ZSA9IG51bGw7XHJcbiAgdmFsdWU6IGFueTtcclxuICBjb250cm9sczogYW55O1xyXG4gIGVtaXRWYWx1ZTogTmdiRGF0ZSB8IHN0cmluZyA9ICcnO1xyXG4gIHNoYXJlZENvbXBvbmVudHNVdGlsID0gbmV3IFNoYXJlZENvbXBvbmVudHNVdGlsKCk7XHJcbiAgQFZpZXdDaGlsZCgnZmVjaGEnKSBuZ2JEYXRlcGlja2VyOiBOZ2JEYXRlcGlja2VyIHwgYW55O1xyXG5cclxuICBfdGVtcFZhbHVlID0gJyc7XHJcbiAgX2luaXRWYWx1ZSA9IGZhbHNlO1xyXG5cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHByaXZhdGUgZWw6IEVsZW1lbnRSZWYsXHJcbiAgICBwcml2YXRlIG1lc3NhZ2VVdGlsU2VydmljZTogTWVzc2FnZVV0aWxTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBkYXRlUGlja2VyU2VydmljZTogRGF0ZVBpY2tlclNlcnZpY2UsXHJcbiAgICBwcml2YXRlIF9yZW5kZXI6IFJlbmRlcmVyMlxyXG4gICkge1xyXG4gICAgdGhpcy5zaG93TGFiZWwgPSB0aGlzLmRhdGVQaWNrZXJTZXJ2aWNlLmdldFNob3dMYWJlbCgpO1xyXG4gICAgdGhpcy5hdXRvY29tcGxldGUgPSB0aGlzLmRhdGVQaWNrZXJTZXJ2aWNlLmdldEF1dG9jb21wbGV0ZSgpO1xyXG4gICAgdGhpcy5ub0F1dG9Db21wbGV0ZU51bGwgPSB0aGlzLmRhdGVQaWNrZXJTZXJ2aWNlLmdldE5vQXV0b0NvbXBsZXRlTnVsbCgpO1xyXG4gICAgdGhpcy5mb2N1c0luaXRpYWwgPSB0aGlzLmRhdGVQaWNrZXJTZXJ2aWNlLmdldEZvY3VzSW5pdGlhbCgpO1xyXG4gICAgdGhpcy52YWxpZGF0b3JNZXNzYWdlID0gdGhpcy5kYXRlUGlja2VyU2VydmljZS5nZXRWYWxpZGF0b3JNZXNzYWdlKCk7XHJcbiAgICB0aGlzLnRvb2x0aXBNZXNzYWdlID0gdGhpcy5kYXRlUGlja2VyU2VydmljZS5nZXRUb29sdGlwTWVzc2FnZSgpO1xyXG4gICAgdGhpcy5zdWJtaXR0ZWQgPSB0aGlzLmRhdGVQaWNrZXJTZXJ2aWNlLmdldFN1Ym1pdHRlZCgpO1xyXG4gICAgdGhpcy52YWxpZGF0b3JBbGVydCA9IHRoaXMuZGF0ZVBpY2tlclNlcnZpY2UuZ2V0VmFsaWRhdG9yQWxlcnQoKTtcclxuICB9XHJcblxyXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcclxuICAgIGlmIChjaGFuZ2VzWydzdWJtaXR0ZWQnXSkge1xyXG4gICAgICBpZiAodGhpcy5jb250cm9scyAhPT0gdW5kZWZpbmVkICYmIGNoYW5nZXNbJ3N1Ym1pdHRlZCddLmN1cnJlbnRWYWx1ZSkge1xyXG4gICAgICAgIHRoaXMuY29udHJvbHMubWFya0FzRGlydHkoKTtcclxuICAgICAgICB0aGlzLmNvbnRyb2xzLm1hcmtBc1RvdWNoZWQoKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgbmdPbkluaXQoKSB7XHJcbiAgICBpZiAodGhpcy5taW5EYXRlKSB7XHJcbiAgICAgIHRoaXMubWluRGF0ZSA9IHRoaXMuc3RyRGF0ZVRvTmdiRGF0ZSh0aGlzLm1pbkRhdGUpO1xyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMuZm9jdXNJbml0aWFsID09IHRydWUgJiYgdGhpcy5kaXNhYmxlZCA9PSBmYWxzZSkge1xyXG4gICAgICBjb25zdCBpbnZhbGlkQ29udHJvbCA9XHJcbiAgICAgICAgdGhpcy5lbC5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoJ1t0eXBlPVwidGV4dFwiXScpO1xyXG4gICAgICBpbnZhbGlkQ29udHJvbC5mb2N1cygpO1xyXG4gICAgICBpbnZhbGlkQ29udHJvbC5zZWxlY3QoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIG9uQ2hhbmdlID0gKF86IGFueSkgPT4ge307XHJcbiAgb25WYWxpZGF0aW9uQ2hhbmdlID0gKCkgPT4ge307XHJcbiAgb25Ub3VjaCA9ICgpID0+IHt9O1xyXG5cclxuICBmb2N1cyA9ICgpID0+IHtcclxuICAgIGNvbnN0IGludmFsaWRDb250cm9sID0gdGhpcy5lbC5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoJ1t0eXBlPVwidGV4dFwiXScpO1xyXG4gICAgaW52YWxpZENvbnRyb2wuZm9jdXMoKTtcclxuICAgIGludmFsaWRDb250cm9sLnNlbGVjdCgpO1xyXG4gIH07XHJcblxyXG4gIG9uRm9jdXMoZXZ0OiBhbnkpIHtcclxuICAgIGlmIChldnQpIHtcclxuICAgICAgY29uc3QgaW52YWxpZENvbnRyb2wgPVxyXG4gICAgICAgIHRoaXMuZWwubmF0aXZlRWxlbWVudC5xdWVyeVNlbGVjdG9yKCdbdHlwZT1cInRleHRcIl0nKTtcclxuICAgICAgaW52YWxpZENvbnRyb2wuc2VsZWN0KCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICB3cml0ZVZhbHVlKHZhbHVlOiBhbnkpOiB2b2lkIHtcclxuICAgIGlmICh2YWx1ZSkge1xyXG4gICAgICB0aGlzLnZhbHVlID0gdGhpcy5zdHJEYXRlVG9OZ2JEYXRlKHZhbHVlKSB8fCAnJztcclxuICAgICAgaWYgKHZhbHVlICYmIHZhbHVlIGluc3RhbmNlb2YgRGF0ZSkge1xyXG4gICAgICAgIHRoaXMuX3RlbXBWYWx1ZSA9IERhdGVVdGlsLmRhdGVBdXRvQ29tcGxldGUodmFsdWUpO1xyXG4gICAgICAgIGlmICh0aGlzLmNvbnRyb2xzKSB7XHJcbiAgICAgICAgICB0aGlzLl9yZW5kZXIuc2V0UHJvcGVydHkodGhpcy5jb250cm9scywgJ3ZhbHVlJywgdGhpcy5fdGVtcFZhbHVlKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgaWYgKHZhbHVlICYmIHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycpIHRoaXMuX3RlbXBWYWx1ZSA9IHZhbHVlLnRyaW0oKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMudmFsdWUgPSAnJztcclxuICAgICAgdGhpcy5fdGVtcFZhbHVlID0gJyc7XHJcbiAgICB9XHJcbiAgfVxyXG4gIHJlZ2lzdGVyT25DaGFuZ2UoZm46IGFueSk6IHZvaWQge1xyXG4gICAgdGhpcy5vbkNoYW5nZSA9IGZuO1xyXG4gIH1cclxuICByZWdpc3Rlck9uVG91Y2hlZChmbjogYW55KTogdm9pZCB7XHJcbiAgICB0aGlzLm9uVG91Y2ggPSBmbjtcclxuICB9XHJcbiAgc2V0RGlzYWJsZWRTdGF0ZT8oaXNEaXNhYmxlZDogYm9vbGVhbiA9IGZhbHNlKTogdm9pZCB7XHJcbiAgICB0aGlzLmRpc2FibGVkID0gaXNEaXNhYmxlZDtcclxuICB9XHJcblxyXG4gIHZhbGlkYXRlKGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbCk6IFZhbGlkYXRpb25FcnJvcnMgfCBhbnkge1xyXG4gICAgdGhpcy5jb250cm9scyA9IGNvbnRyb2w7XHJcbiAgICBpZiAoIXRoaXMuX2luaXRWYWx1ZSkge1xyXG4gICAgICBpZiAodGhpcy5fdGVtcFZhbHVlKSB7XHJcbiAgICAgICAgdGhpcy5fcmVuZGVyLnNldFByb3BlcnR5KGNvbnRyb2wsICd2YWx1ZScsIHRoaXMuX3RlbXBWYWx1ZSk7XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5faW5pdFZhbHVlID0gdHJ1ZTtcclxuICAgIH1cclxuICAgIHJldHVybiBudWxsO1xyXG4gIH1cclxuXHJcbiAgcmVnaXN0ZXJPblZhbGlkYXRvckNoYW5nZT8oZm46ICgpID0+IHZvaWQpOiB2b2lkIHtcclxuICAgIHRoaXMub25WYWxpZGF0aW9uQ2hhbmdlID0gZm47XHJcbiAgfVxyXG5cclxuICBvbkJsdXIoKTogdm9pZCB7XHJcbiAgICB0aGlzLm9uVG91Y2goKTtcclxuICB9XHJcblxyXG4gIG9uSW5wdXQodmFsdWU6IGFueSkge1xyXG4gICAgdGhpcy5lbWl0VmFsdWUgPSB2YWx1ZTtcclxuXHJcbiAgICB0aGlzLnZhbHVlID0gdmFsdWU7XHJcbiAgICBpZiAodGhpcy52YWx1ZSBpbnN0YW5jZW9mIE5nYkRhdGUpIHtcclxuICAgICAgdGhpcy5lbWl0VmFsdWUgPSB0aGlzLm5nYkRhdGV0b1N0cmluZyh2YWx1ZSk7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5vbkNoYW5nZSh0aGlzLmVtaXRWYWx1ZSk7XHJcbiAgICB0aGlzLm9uY2hhbmdlLmVtaXQodGhpcy5lbWl0VmFsdWUpO1xyXG4gICAgdGhpcy5pbnB1dC5lbWl0KHRoaXMuZW1pdFZhbHVlKTtcclxuXHJcbiAgICB0aGlzLl90ZW1wVmFsdWUgPSAnJztcclxuICB9XHJcblxyXG4gIG9uS2V5VXBFbnRlcigpOiB2b2lkIHtcclxuICAgIHRoaXMuZW50ZXJLZXlVcCgpO1xyXG4gIH1cclxuXHJcbiAgaGFuZGxlS2V5UHJlc3MoZXZlbnQ6IEtleWJvYXJkRXZlbnQpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLnJlc3RyaWN0SW5wdXRMZW5ndGgpIHtcclxuICAgICAgdGhpcy5faGFuZGxlUmVzdHJpY3RJbnB1dExlbmd0aChldmVudCk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLm9ubHlOdW1iZXJzKGV2ZW50IGFzIGFueSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9oYW5kbGVSZXN0cmljdElucHV0TGVuZ3RoKGV2ZW50OiBLZXlib2FyZEV2ZW50KTogdm9pZCB7XHJcbiAgICBjb25zdCBpc1ZhbGlkQ2hhcmFjdGVyID0gdGhpcy5faXNEaWdpdE9yU2xhc2goZXZlbnQua2V5KTtcclxuXHJcbiAgICBpZiAoIWlzVmFsaWRDaGFyYWN0ZXIpIHtcclxuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IGlucHV0ID0gZXZlbnQudGFyZ2V0IGFzIEhUTUxJbnB1dEVsZW1lbnQ7XHJcbiAgICBjb25zdCBjdXJyZW50VmFsdWUgPSBpbnB1dC52YWx1ZTtcclxuXHJcbiAgICBjb25zdCBoYXNTZWxlY3RlZFRleHQgPSB0aGlzLl9oYXNUZXh0U2VsZWN0aW9uKGlucHV0KTtcclxuXHJcbiAgICBpZiAoaGFzU2VsZWN0ZWRUZXh0KSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBpc0lucHV0TGVuZ3RoRXhjZWVkZWQgPSB0aGlzLl9pc0lucHV0TGVuZ3RoRXhjZWVkZWQoY3VycmVudFZhbHVlKTtcclxuXHJcbiAgICBpZiAoaXNJbnB1dExlbmd0aEV4Y2VlZGVkKSB7XHJcbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9pc0RpZ2l0T3JTbGFzaChrZXk6IHN0cmluZyk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIC9bXFxkXFwvXS8udGVzdChrZXkpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfaGFzVGV4dFNlbGVjdGlvbihpbnB1dDogSFRNTElucHV0RWxlbWVudCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIGlucHV0LnNlbGVjdGlvblN0YXJ0ICE9PSBpbnB1dC5zZWxlY3Rpb25FbmQ7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9pc0lucHV0TGVuZ3RoRXhjZWVkZWQoY3VycmVudFZhbHVlOiBzdHJpbmcpOiBib29sZWFuIHtcclxuICAgIGNvbnN0IGhhc1NsYXNoZXMgPSAvXFwvLy50ZXN0KGN1cnJlbnRWYWx1ZSk7XHJcblxyXG4gICAgLy8gREQvTU0vWVlZWSAobcOheGltbyAxMCBjYXJhY3RlcmVzKSBvIDEyMDMyMDI1IChtw6F4aW1vIDggZMOtZ2l0b3MpXHJcbiAgICBjb25zdCBtYXhMZW5ndGggPSBoYXNTbGFzaGVzID8gMTAgOiA4OyBcclxuICAgIHJldHVybiBjdXJyZW50VmFsdWUubGVuZ3RoID49IG1heExlbmd0aDtcclxuICB9XHJcblxyXG4gIG9ubHlOdW1iZXJzKGU6IGFueSkge1xyXG4gICAgaWYgKCEoZS5rZXlDb2RlID49IDQ4ICYmIGUua2V5Q29kZSA8PSA1NykgJiYgZS5rZXlDb2RlICE9IDQ3KSB7XHJcbiAgICAgIGUucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHN0ckRhdGVUb05nYkRhdGUodmFsdWU6IGFueSkge1xyXG4gICAgY29uc3QgZGF0ZTogRGF0ZSA9IERhdGVVdGlsLnBhcnNlKHZhbHVlLCAnREFURScpO1xyXG4gICAgY29uc3QgbmdiRGF0ZTogTmdiRGF0ZVN0cnVjdCA9IHtcclxuICAgICAgZGF5OiBOdW1iZXIoRGF0ZVV0aWwuZ2V0RGF5KGRhdGUpKSxcclxuICAgICAgbW9udGg6IE51bWJlcihEYXRlVXRpbC5nZXRNb250aChkYXRlKSksXHJcbiAgICAgIHllYXI6IE51bWJlcihEYXRlVXRpbC5nZXRZZWFyKGRhdGUpKSxcclxuICAgIH07XHJcbiAgICAvLyByZXR1cm4gbmdiRGF0ZTtcclxuICAgIHJldHVybiBuZXcgTmdiRGF0ZShuZ2JEYXRlLnllYXIsIG5nYkRhdGUubW9udGgsIG5nYkRhdGUuZGF5KTtcclxuICB9XHJcblxyXG4gIG5nYkRhdGV0b1N0cmluZyh2YWx1ZTogTmdiRGF0ZVN0cnVjdCk6IE5nYkRhdGUgfCBzdHJpbmcge1xyXG4gICAgY29uc3QgY29uY2F0TmdiRGF0ZSA9XHJcbiAgICAgIGAwJHt2YWx1ZS5kYXl9YC5zbGljZSgtMikgKyBgMCR7dmFsdWUubW9udGh9YC5zbGljZSgtMikgKyB2YWx1ZS55ZWFyO1xyXG4gICAgcmV0dXJuIERhdGVVdGlsLmRhdGVBdXRvQ29tcGxldGUoY29uY2F0TmdiRGF0ZSk7XHJcbiAgfVxyXG5cclxuICBlbnRlcktleVVwKCkge1xyXG4gICAgaWYgKCF0aGlzLmRpc2FibGVkKSB7XHJcbiAgICAgIGxldCB2YWxpZGF0b3IgPSB0aGlzLnNoYXJlZENvbXBvbmVudHNVdGlsLnN0b3BCeVZhbGlkYXRvcihcclxuICAgICAgICB0aGlzLmNvbnRyb2xzLFxyXG4gICAgICAgIHRoaXMudmFsaWRhdG9yQWxlcnQsXHJcbiAgICAgICAgdGhpcy5sYWJlbFxyXG4gICAgICApO1xyXG4gICAgICBpZiAodmFsaWRhdG9yLmVycm9yKSB7XHJcbiAgICAgICAgdGhpcy5tZXNzYWdlVXRpbFNlcnZpY2UuZ2V0TWVzc2FnZUVycm9yKFxyXG4gICAgICAgICAgJzAwMDA0NicsXHJcbiAgICAgICAgICAnRXJyb3InLFxyXG4gICAgICAgICAgdmFsaWRhdG9yLm1lc3NhZ2VcclxuICAgICAgICApO1xyXG4gICAgICAgIHJldHVybjtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMubmV4dCAhPSB1bmRlZmluZWQpIHtcclxuICAgICAgaWYgKHRoaXMubmV4dC5kaXNhYmxlZCB8fCB0aGlzLm5leHQucmVhZG9ubHkpIHtcclxuICAgICAgICBpZiAodGhpcy5uZXh0SXNEaXNhYmxlICE9IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgdGhpcy5uZXh0SXNEaXNhYmxlLmZvY3VzKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMubmV4dC5mb2N1cygpO1xyXG4gICAgICB9XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBpZiAodGhpcy5uZXh0SXNEaXNhYmxlICE9IHVuZGVmaW5lZCkge1xyXG4gICAgICAgIHRoaXMubmV4dElzRGlzYWJsZS5mb2N1cygpO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMub25OZXh0LmVtaXQoKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgYXJyb3dVcEtleVVwKCkge1xyXG4gICAgaWYgKCF0aGlzLmRpc2FibGVkKSB7XHJcbiAgICAgIGxldCB2YWxpZGF0b3IgPSB0aGlzLnNoYXJlZENvbXBvbmVudHNVdGlsLnN0b3BCeVZhbGlkYXRvcihcclxuICAgICAgICB0aGlzLmNvbnRyb2xzLFxyXG4gICAgICAgIHRoaXMudmFsaWRhdG9yQWxlcnQsXHJcbiAgICAgICAgdGhpcy5sYWJlbFxyXG4gICAgICApO1xyXG4gICAgICBpZiAodmFsaWRhdG9yLmVycm9yKSB7XHJcbiAgICAgICAgdGhpcy5tZXNzYWdlVXRpbFNlcnZpY2UuZ2V0TWVzc2FnZUVycm9yKFxyXG4gICAgICAgICAgJzAwMDA0NicsXHJcbiAgICAgICAgICAnRXJyb3InLFxyXG4gICAgICAgICAgdmFsaWRhdG9yLm1lc3NhZ2VcclxuICAgICAgICApO1xyXG4gICAgICAgIHJldHVybjtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMuYmFjayAhPSB1bmRlZmluZWQpIHtcclxuICAgICAgaWYgKHRoaXMuYmFjay5kaXNhYmxlZCB8fCB0aGlzLmJhY2sucmVhZG9ubHkpIHtcclxuICAgICAgICBpZiAodGhpcy5iYWNrSXNEaXNhYmxlICE9IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgdGhpcy5iYWNrSXNEaXNhYmxlLmZvY3VzKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMuYmFjay5mb2N1cygpO1xyXG4gICAgICB9XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBpZiAodGhpcy5iYWNrSXNEaXNhYmxlICE9IHVuZGVmaW5lZCkge1xyXG4gICAgICAgIHRoaXMuYmFja0lzRGlzYWJsZS5mb2N1cygpO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMub25CYWNrLmVtaXQoKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZm9jdXNPdXQodmFsdWU6IGFueSkge1xyXG4gICAgaWYgKHZhbHVlICYmIHZhbHVlLnRyaW0oKSAhPT0gJycpIHtcclxuICAgICAgaWYgKHRoaXMuX3RlbXBWYWx1ZSA9PT0gdmFsdWUpIHJldHVybjtcclxuXHJcbiAgICAgIHRoaXMubmdiRGF0ZXBpY2tlci5jbG9zZSgpO1xyXG4gICAgICBpZiAodmFsdWUgaW5zdGFuY2VvZiBOZ2JEYXRlKSB7XHJcbiAgICAgICAgaWYgKHZhbHVlICE9PSB0aGlzLm5nYkRhdGV0b1N0cmluZyh2YWx1ZSkpIHtcclxuICAgICAgICAgIHRoaXMuZW1pdFZhbHVlID0gdGhpcy5uZ2JEYXRldG9TdHJpbmcodmFsdWUpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICB0aGlzLmVtaXRWYWx1ZSA9IHZhbHVlO1xyXG4gICAgICAgIH1cclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB2YWx1ZSA9IHZhbHVlLnJlcGxhY2VBbGwoJy8nLCAnJyk7XHJcbiAgICAgICAgaWYgKHRoaXMubm9BdXRvQ29tcGxldGVOdWxsKSB7XHJcbiAgICAgICAgICB0aGlzLnZhbHVlID0gdGhpcy5zdHJEYXRlVG9OZ2JEYXRlKFxyXG4gICAgICAgICAgICBEYXRlVXRpbC5kYXRlQXV0b0NvbXBsZXRlKHZhbHVlKVxyXG4gICAgICAgICAgKTtcclxuICAgICAgICAgIHRoaXMuZW1pdFZhbHVlID0gRGF0ZVV0aWwuZGF0ZUF1dG9Db21wbGV0ZSh2YWx1ZSk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIGlmICh2YWx1ZSAhPSAnJyAmJiB2YWx1ZSAhPSBudWxsKSB7XHJcbiAgICAgICAgICAgIHRoaXMudmFsdWUgPSB0aGlzLnN0ckRhdGVUb05nYkRhdGUoXHJcbiAgICAgICAgICAgICAgRGF0ZVV0aWwuZGF0ZUF1dG9Db21wbGV0ZSh2YWx1ZSlcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgdGhpcy5lbWl0VmFsdWUgPSBEYXRlVXRpbC5kYXRlQXV0b0NvbXBsZXRlKHZhbHVlKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHRoaXMub25Ub3VjaCgpO1xyXG4gICAgICB0aGlzLm9uQ2hhbmdlKHRoaXMuZW1pdFZhbHVlKTtcclxuXHJcbiAgICAgIGlmICh0eXBlb2YgdGhpcy5lbWl0VmFsdWUgPT09ICdzdHJpbmcnKSB0aGlzLl90ZW1wVmFsdWUgPSB0aGlzLmVtaXRWYWx1ZTtcclxuICAgIH1cclxuICB9XHJcbn1cclxuIiwiPGxhYmVsICpuZ0lmPVwibGFiZWwgIT0gbnVsbCAmJiBsYWJlbCAhPSAnJyAmJiBzaG93TGFiZWxcIiBjbGFzcz1cImQtZmxleCBzdW1heC1sYWJlbCBtYi0wIHAtMFwiXHJcbiAgPjxzcGFuIFt0aXRsZV09XCJsYWJlbFwiIHN0eWxlPVwid2hpdGUtc3BhY2U6IG5vd3JhcDsgb3ZlcmZsb3c6IGhpZGRlbjsgdGV4dC1vdmVyZmxvdzogZWxsaXBzaXNcIj57eyBsYWJlbCB9fTwvc3Bhbj5cclxuICA8c3BhbiAqbmdJZj1cInJlcXVpcmVkXCIgY2xhc3M9XCJtcy0xXCIgW2NsYXNzLnRleHQtZGFuZ2VyXT1cImNvbnRyb2xzPy5lcnJvcnMgIT0gbnVsbFwiPiAqPC9zcGFuPlxyXG4gIDxzcGFuICpuZ0lmPVwibGFiZWxJbmZvXCI+XHJcbiAgICA8aSBjbGFzcz1cImZhIGZhLWV4Y2xhbWF0aW9uLWNpcmNsZSB0ZXh0LWluZm8gbXMtMlwiIFttYXRUb29sdGlwXT1cInRleHRMYWJlbEluZm9cIiBtYXRUb29sdGlwQ2xhc3M9XCJiZy1pbmZvXCI+PC9pPlxyXG4gIDwvc3Bhbj5cclxuPC9sYWJlbD5cclxuPGRpdlxyXG4gIFtjbGFzcy5pbnB1dC1pY29uXT1cImNvbnRyb2xzPy5lcnJvcnMgIT0gbnVsbCAmJiAoY29udHJvbHM/LmRpcnR5IHx8IGNvbnRyb2xzPy50b3VjaGVkKSAmJiBzdWJtaXR0ZWRcIlxyXG4gIFtjbGFzcy5yaWdodF09XCJjb250cm9scz8uZXJyb3JzICE9IG51bGwgJiYgKGNvbnRyb2xzPy5kaXJ0eSB8fCBjb250cm9scz8udG91Y2hlZCkgJiYgc3VibWl0dGVkXCI+XHJcbiAgPCEtLSB0b29sdGlwLW1lc3NhZ2UgZXMgZWwgaWNvbm8gZGUgZXJyb3IgLS0+XHJcblxyXG4gIDxkaXYgY2xhc3M9XCJkLWZsZXggcC0wIGdyb3VwLWlucHV0LWJ1dHRvbiBwb3NpdGlvbi1yZWxhdGl2ZVwiPlxyXG4gICAgPHRvb2x0aXAtbWVzc2FnZVxyXG4gICAgW2xhYmVsXT1cImxhYmVsXCJcclxuICAgIFtjb250cm9sc109XCJjb250cm9sc1wiXHJcbiAgICBbdmFsaWRhdG9yTWVzc2FnZV09XCJ2YWxpZGF0b3JNZXNzYWdlXCJcclxuICAgIFtzdWJtaXR0ZWRdPVwic3VibWl0dGVkXCJcclxuICAgIFt0b29sdGlwTWVzc2FnZV09XCJ0b29sdGlwTWVzc2FnZVwiPjwvdG9vbHRpcC1tZXNzYWdlPlxyXG4gICAgPGlucHV0XHJcbiAgICAgIHR5cGU9XCJ0ZXh0XCJcclxuICAgICAgW2F0dHIuYXV0b2NvbXBsZXRlXT1cImF1dG9jb21wbGV0ZVwiXHJcbiAgICAgIFtjbGFzcy5pcy1pbnZhbGlkXT1cImNvbnRyb2xzPy5lcnJvcnMgIT0gbnVsbCAmJiAoY29udHJvbHM/LmRpcnR5IHx8IGNvbnRyb2xzPy50b3VjaGVkKSAmJiBzdWJtaXR0ZWRcIlxyXG4gICAgICBbZGlzYWJsZWRdPVwiZGlzYWJsZWRcIlxyXG4gICAgICBbcmVhZG9ubHldPVwicmVhZG9ubHlcIlxyXG4gICAgICAoa2V5dXAuZW50ZXIpPVwib25LZXlVcEVudGVyKClcIlxyXG4gICAgICAoa2V5dXAuQXJyb3dVcCk9XCJhcnJvd1VwS2V5VXAoKVwiXHJcbiAgICAgIChrZXlwcmVzcyk9XCJoYW5kbGVLZXlQcmVzcygkZXZlbnQpXCJcclxuICAgICAgKGlucHV0KT1cIm9uSW5wdXQoJGFueSgkZXZlbnQudGFyZ2V0KS52YWx1ZSlcIlxyXG4gICAgICAoZGF0ZVNlbGVjdCk9XCJvbklucHV0KCRldmVudClcIlxyXG4gICAgICAoZm9jdXMpPVwib25Gb2N1cygkYW55KCRldmVudC50YXJnZXQpLnZhbHVlKVwiXHJcbiAgICAgIChmb2N1c291dCk9XCJmb2N1c091dCgkYW55KCRldmVudC50YXJnZXQpLnZhbHVlKVwiXHJcbiAgICAgIChibHVyKT1cIm9uQmx1cigpXCJcclxuICAgICAgY2xhc3M9XCJmb3JtLWNvbnRyb2wgZm9ybS1jb250cm9sLXNtIHJvdW5kZWQtbGVmdCB1c2UtaW5wdXRcIlxyXG4gICAgICBjb250YWluZXI9XCJib2R5XCJcclxuICAgICAgcGxhY2Vob2xkZXI9XCJkZC9tbS95eXl5XCJcclxuICAgICAgW21pbkRhdGVdPVwibWluRGF0ZVwiXHJcbiAgICAgIFttYXhEYXRlXT1cIm1heERhdGVcIlxyXG4gICAgICBuYW1lPVwiZmVjaGFcIlxyXG4gICAgICBuZ2JEYXRlcGlja2VyXHJcbiAgICAgICNmZWNoYT1cIm5nYkRhdGVwaWNrZXJcIlxyXG4gICAgICBbKG5nTW9kZWwpXT1cInZhbHVlXCIgLz5cclxuICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIFtkaXNhYmxlZF09XCJkaXNhYmxlZCB8fCByZWFkb25seVwiIGNsYXNzPVwiYnRuIGJ0bi1pbmZvIHAtMCByb3VuZGVkLTAgdXNlLWJ1dHRvblwiIChjbGljayk9XCJmZWNoYS50b2dnbGUoKVwiPlxyXG4gICAgICA8IS0tIDxtYXQtaWNvbiBjbGFzcz1cInRleHQtd2hpdGUgcHQtMVwiIHN0eWxlPVwiZm9udC1zaXplOiAxOHB4O1wiIFttYXRUb29sdGlwXT1cIidDYWxlbmRhcmlvJ1wiIG1hdFRvb2x0aXBDbGFzcz1cImJnLWluZm9cIj5jYWxlbmRhcl90b2RheTwvbWF0LWljb24+IC0tPlxyXG4gICAgICA8aSBjbGFzcz1cImZhIGZhLWNhbGVuZGFyIHRleHQtd2hpdGUgcHgtMVwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPjwvaT5cclxuICAgIDwvYnV0dG9uPlxyXG4gIDwvZGl2PlxyXG48L2Rpdj5cclxuPCEtLSBlcnJvci1tZXNzYWdlIGVzIGVsIG1hbnNhamUgcXVlIGFwYXJlY2UgYWJham8gZGVsIGNvbXBvbmVudGUgLS0+XHJcbjxlcnJvci1tZXNzYWdlXHJcbiAgW2xhYmVsXT1cImxhYmVsXCJcclxuICBbY29udHJvbHNdPVwiY29udHJvbHNcIlxyXG4gIFt2YWxpZGF0b3JNZXNzYWdlXT1cInZhbGlkYXRvck1lc3NhZ2VcIlxyXG4gIFtzdWJtaXR0ZWRdPVwic3VibWl0dGVkXCJcclxuICBbdG9vbHRpcE1lc3NhZ2VdPVwidG9vbHRpcE1lc3NhZ2VcIj48L2Vycm9yLW1lc3NhZ2U+XHJcbiJdfQ==
|
|
487
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0ZS1waWNrZXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LXN1bWF4LWVycC1jb21wb25lbnQvc3JjL2xpYi9kYXRlLXBpY2tlci9kYXRlLXBpY2tlci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtc3VtYXgtZXJwLWNvbXBvbmVudC9zcmMvbGliL2RhdGUtcGlja2VyL2RhdGUtcGlja2VyLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCxTQUFTLEVBRVQsWUFBWSxFQUNaLEtBQUssRUFHTCxNQUFNLEVBR04sU0FBUyxFQUNULFVBQVUsR0FDWCxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBR0wsYUFBYSxFQUNiLGlCQUFpQixHQUVsQixNQUFNLGdCQUFnQixDQUFDO0FBQ3hCLE9BQU8sRUFDTCxPQUFPLEVBQ1Asc0JBQXNCLEVBR3RCLGlCQUFpQixHQUNsQixNQUFNLDRCQUE0QixDQUFDO0FBR3BDLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxJQUFJLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUNwRSxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUNsRSxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUNyRSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sbUJBQW1CLENBQUM7Ozs7Ozs7Ozs7QUF1QjdDLDJKQUEySjtBQUMzSixNQUFNLE9BQU8sbUJBQW1CO0lBNks5QixZQUNVLEVBQWMsRUFDZCxrQkFBc0MsRUFDdEMsaUJBQW9DLEVBQ3BDLE9BQWtCO1FBSGxCLE9BQUUsR0FBRixFQUFFLENBQVk7UUFDZCx1QkFBa0IsR0FBbEIsa0JBQWtCLENBQW9CO1FBQ3RDLHNCQUFpQixHQUFqQixpQkFBaUIsQ0FBbUI7UUFDcEMsWUFBTyxHQUFQLE9BQU8sQ0FBVztRQTlLNUI7Ozs7VUFJRTtRQUNPLGNBQVMsR0FBWSxJQUFJLENBQUM7UUFFbkM7Ozs7VUFJRTtRQUNPLFVBQUssR0FBUSxJQUFJLENBQUM7UUFFM0I7Ozs7VUFJRTtRQUNPLGlCQUFZLEdBQVcsS0FBSyxDQUFDO1FBOEJ0Qzs7OztVQUlFO1FBQ08sYUFBUSxHQUFZLEtBQUssQ0FBQztRQUVuQzs7OztVQUlFO1FBQ08sdUJBQWtCLEdBQVksSUFBSSxDQUFDO1FBRTVDOzs7O1VBSUU7UUFDTyxhQUFRLEdBQVksS0FBSyxDQUFDO1FBRW5DOzs7O1VBSUU7UUFDTyxxQkFBZ0IsR0FBWSxLQUFLLENBQUM7UUFFM0M7Ozs7VUFJRTtRQUNPLG1CQUFjLEdBQVksSUFBSSxDQUFDO1FBRXhDOzs7O1VBSUU7UUFDTyxtQkFBYyxHQUFZLEtBQUssQ0FBQztRQUV6Qzs7OztVQUlFO1FBQ08sY0FBUyxHQUFZLElBQUksQ0FBQztRQUVuQzs7OztVQUlFO1FBQ08sY0FBUyxHQUFZLEtBQUssQ0FBQztRQUVwQzs7OztVQUlFO1FBQ08sa0JBQWEsR0FBVyxFQUFFLENBQUM7UUFnQnBDOzs7O1VBSUU7UUFDTyxZQUFPLEdBQVksS0FBSyxDQUFDO1FBRWxDOzs7O1VBSUU7UUFDTyxpQkFBWSxHQUFZLEtBQUssQ0FBQztRQUV2Qzs7OztVQUlFO1FBQ08sYUFBUSxHQUFZLEtBQUssQ0FBQztRQUVuQzs7OztVQUlFO1FBQ08sd0JBQW1CLEdBQVksS0FBSyxDQUFDO1FBRXBDLFdBQU0sR0FBc0IsSUFBSSxZQUFZLEVBQUUsQ0FBQztRQUMvQyxXQUFNLEdBQXNCLElBQUksWUFBWSxFQUFFLENBQUM7UUFDL0MsVUFBSyxHQUFzQixJQUFJLFlBQVksRUFBRSxDQUFDO1FBQzlDLGFBQVEsR0FBc0IsSUFBSSxZQUFZLEVBQUUsQ0FBQztRQUNqRCxTQUFJLEdBQXNCLElBQUksWUFBWSxFQUFFLENBQUM7UUFLdkQsY0FBUyxHQUFxQixFQUFFLENBQUM7UUFDakMseUJBQW9CLEdBQUcsSUFBSSxvQkFBb0IsRUFBRSxDQUFDO1FBR2xELGVBQVUsR0FBRyxFQUFFLENBQUM7UUFDaEIsZUFBVSxHQUFHLEtBQUssQ0FBQztRQXVDbkIsYUFBUSxHQUFHLENBQUMsQ0FBTSxFQUFFLEVBQUUsR0FBRSxDQUFDLENBQUM7UUFDMUIsdUJBQWtCLEdBQUcsR0FBRyxFQUFFLEdBQUUsQ0FBQyxDQUFDO1FBQzlCLFlBQU8sR0FBRyxHQUFHLEVBQUUsR0FBRSxDQUFDLENBQUM7UUFFbkIsVUFBSyxHQUFHLEdBQUcsRUFBRTtZQUNYLE1BQU0sY0FBYyxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUMsYUFBYSxDQUFDLGFBQWEsQ0FBQyxlQUFlLENBQUMsQ0FBQztZQUM1RSxjQUFjLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDdkIsY0FBYyxDQUFDLE1BQU0sRUFBRSxDQUFDO1FBQzFCLENBQUMsQ0FBQztRQXZDQSxJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxZQUFZLEVBQUUsQ0FBQztRQUN2RCxJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxlQUFlLEVBQUUsQ0FBQztRQUM3RCxJQUFJLENBQUMsa0JBQWtCLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixDQUFDLHFCQUFxQixFQUFFLENBQUM7UUFDekUsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUMsaUJBQWlCLENBQUMsZUFBZSxFQUFFLENBQUM7UUFDN0QsSUFBSSxDQUFDLGdCQUFnQixHQUFHLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxtQkFBbUIsRUFBRSxDQUFDO1FBQ3JFLElBQUksQ0FBQyxjQUFjLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixDQUFDLGlCQUFpQixFQUFFLENBQUM7UUFDakUsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsaUJBQWlCLENBQUMsWUFBWSxFQUFFLENBQUM7UUFDdkQsSUFBSSxDQUFDLGNBQWMsR0FBRyxJQUFJLENBQUMsaUJBQWlCLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztJQUNuRSxDQUFDO0lBRUQsV0FBVyxDQUFDLE9BQXNCO1FBQ2hDLElBQUksT0FBTyxDQUFDLFdBQVcsQ0FBQyxFQUFFLENBQUM7WUFDekIsSUFBSSxJQUFJLENBQUMsUUFBUSxLQUFLLFNBQVMsSUFBSSxPQUFPLENBQUMsV0FBVyxDQUFDLENBQUMsWUFBWSxFQUFFLENBQUM7Z0JBQ3JFLElBQUksQ0FBQyxRQUFRLENBQUMsV0FBVyxFQUFFLENBQUM7Z0JBQzVCLElBQUksQ0FBQyxRQUFRLENBQUMsYUFBYSxFQUFFLENBQUM7WUFDaEMsQ0FBQztRQUNILENBQUM7SUFDSCxDQUFDO0lBRUQsUUFBUTtRQUNOLElBQUksSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQ2pCLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUNyRCxDQUFDO1FBQ0QsSUFBSSxJQUFJLENBQUMsWUFBWSxJQUFJLElBQUksSUFBSSxJQUFJLENBQUMsUUFBUSxJQUFJLEtBQUssRUFBRSxDQUFDO1lBQ3hELE1BQU0sY0FBYyxHQUNsQixJQUFJLENBQUMsRUFBRSxDQUFDLGFBQWEsQ0FBQyxhQUFhLENBQUMsZUFBZSxDQUFDLENBQUM7WUFDdkQsY0FBYyxDQUFDLEtBQUssRUFBRSxDQUFDO1lBQ3ZCLGNBQWMsQ0FBQyxNQUFNLEVBQUUsQ0FBQztRQUMxQixDQUFDO0lBQ0gsQ0FBQztJQVlELE9BQU8sQ0FBQyxHQUFRO1FBQ2QsSUFBSSxHQUFHLEVBQUUsQ0FBQztZQUNSLE1BQU0sY0FBYyxHQUNsQixJQUFJLENBQUMsRUFBRSxDQUFDLGFBQWEsQ0FBQyxhQUFhLENBQUMsZUFBZSxDQUFDLENBQUM7WUFDdkQsY0FBYyxDQUFDLE1BQU0sRUFBRSxDQUFDO1FBQzFCLENBQUM7SUFDSCxDQUFDO0lBRUQsVUFBVSxDQUFDLEtBQVU7UUFDbkIsSUFBSSxLQUFLLEVBQUUsQ0FBQztZQUNWLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixDQUFDLEtBQUssQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUNoRCxJQUFJLEtBQUssSUFBSSxLQUFLLFlBQVksSUFBSSxFQUFFLENBQUM7Z0JBQ25DLElBQUksQ0FBQyxVQUFVLEdBQUcsUUFBUSxDQUFDLGdCQUFnQixDQUFDLEtBQUssQ0FBQyxDQUFDO2dCQUNuRCxJQUFJLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztvQkFDbEIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxPQUFPLEVBQUUsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDO2dCQUNwRSxDQUFDO1lBQ0gsQ0FBQztZQUNELElBQUksS0FBSyxJQUFJLE9BQU8sS0FBSyxLQUFLLFFBQVE7Z0JBQUUsSUFBSSxDQUFDLFVBQVUsR0FBRyxLQUFLLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDekUsQ0FBQzthQUFNLENBQUM7WUFDTixJQUFJLENBQUMsS0FBSyxHQUFHLEVBQUUsQ0FBQztZQUNoQixJQUFJLENBQUMsVUFBVSxHQUFHLEVBQUUsQ0FBQztRQUN2QixDQUFDO0lBQ0gsQ0FBQztJQUNELGdCQUFnQixDQUFDLEVBQU87UUFDdEIsSUFBSSxDQUFDLFFBQVEsR0FBRyxFQUFFLENBQUM7SUFDckIsQ0FBQztJQUNELGlCQUFpQixDQUFDLEVBQU87UUFDdkIsSUFBSSxDQUFDLE9BQU8sR0FBRyxFQUFFLENBQUM7SUFDcEIsQ0FBQztJQUNELGdCQUFnQixDQUFFLGFBQXNCLEtBQUs7UUFDM0MsSUFBSSxDQUFDLFFBQVEsR0FBRyxVQUFVLENBQUM7SUFDN0IsQ0FBQztJQUVELFFBQVEsQ0FBQyxPQUF3QjtRQUMvQixJQUFJLENBQUMsUUFBUSxHQUFHLE9BQU8sQ0FBQztRQUN4QixJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO1lBQ3JCLElBQUksSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO2dCQUNwQixJQUFJLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQyxPQUFPLEVBQUUsT0FBTyxFQUFFLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQztZQUM5RCxDQUFDO1lBQ0QsSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUM7UUFDekIsQ0FBQztRQUNELE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUVELHlCQUF5QixDQUFFLEVBQWM7UUFDdkMsSUFBSSxDQUFDLGtCQUFrQixHQUFHLEVBQUUsQ0FBQztJQUMvQixDQUFDO0lBRUQsTUFBTTtRQUNKLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztJQUNqQixDQUFDO0lBRUQsT0FBTyxDQUFDLEtBQVU7UUFDaEIsSUFBSSxDQUFDLFNBQVMsR0FBRyxLQUFLLENBQUM7UUFFdkIsSUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUM7UUFDbkIsSUFBSSxJQUFJLENBQUMsS0FBSyxZQUFZLE9BQU8sRUFBRSxDQUFDO1lBQ2xDLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUMvQyxDQUFDO1FBRUQsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDOUIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQ25DLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUVoQyxJQUFJLENBQUMsVUFBVSxHQUFHLEVBQUUsQ0FBQztJQUN2QixDQUFDO0lBRUQsWUFBWTtRQUNWLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztJQUNwQixDQUFDO0lBRUQsV0FBVyxDQUFDLEtBQXFCO1FBQy9CLElBQUcsQ0FBQyxJQUFJLENBQUMsbUJBQW1CO1lBQUUsT0FBTztRQUNyQyxLQUFLLENBQUMsY0FBYyxFQUFFLENBQUM7UUFFdkIsSUFBRyxDQUFDLElBQUksQ0FBQyx5QkFBeUIsQ0FBQyxLQUFLLENBQUM7WUFBRSxPQUFPO1FBRWxELE1BQU0sVUFBVSxHQUFHLEtBQUssQ0FBQyxhQUFhLEVBQUUsT0FBTyxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUM5RCxJQUFJLENBQUMsVUFBVTtZQUFFLE9BQU87UUFFeEIsSUFBSSxDQUFDLFVBQVUsQ0FBQyxVQUFVLENBQUMsQ0FBQztJQUM5QixDQUFDO0lBRU8seUJBQXlCLENBQUMsS0FBcUI7UUFDckQsTUFBTSxLQUFLLEdBQUcsS0FBSyxDQUFDLE1BQTBCLENBQUM7UUFFL0MsSUFBRyxJQUFJLENBQUMsaUJBQWlCLENBQUMsS0FBSyxDQUFDLEVBQUMsQ0FBQztZQUNoQyxPQUFPLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUN0QyxDQUFDO1FBRUQsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBRUQsY0FBYyxDQUFDLEtBQW9CO1FBQ2pDLElBQUksSUFBSSxDQUFDLG1CQUFtQixFQUFFLENBQUM7WUFDN0IsSUFBSSxDQUFDLDBCQUEwQixDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3pDLENBQUM7YUFBTSxDQUFDO1lBQ04sSUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUFZLENBQUMsQ0FBQztRQUNqQyxDQUFDO0lBQ0gsQ0FBQztJQUVPLDBCQUEwQixDQUFDLEtBQW9CO1FBQ3JELE1BQU0sZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7UUFFekQsSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUM7WUFDdEIsS0FBSyxDQUFDLGNBQWMsRUFBRSxDQUFDO1lBQ3ZCLE9BQU87UUFDVCxDQUFDO1FBRUQsTUFBTSxLQUFLLEdBQUcsS0FBSyxDQUFDLE1BQTBCLENBQUM7UUFDL0MsTUFBTSxZQUFZLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQztRQUVqQyxNQUFNLGVBQWUsR0FBRyxJQUFJLENBQUMsaUJBQWlCLENBQUMsS0FBSyxDQUFDLENBQUM7UUFFdEQsSUFBSSxlQUFlLEVBQUUsQ0FBQztZQUNwQixPQUFPO1FBQ1QsQ0FBQztRQUVELE1BQU0scUJBQXFCLEdBQUcsSUFBSSxDQUFDLHNCQUFzQixDQUFDLFlBQVksQ0FBQyxDQUFDO1FBRXhFLElBQUkscUJBQXFCLEVBQUUsQ0FBQztZQUMxQixLQUFLLENBQUMsY0FBYyxFQUFFLENBQUM7UUFDekIsQ0FBQztJQUNILENBQUM7SUFFTyxlQUFlLENBQUMsR0FBVztRQUNqQyxPQUFPLFFBQVEsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDNUIsQ0FBQztJQUVPLGlCQUFpQixDQUFDLEtBQXVCO1FBQy9DLE9BQU8sS0FBSyxDQUFDLGNBQWMsS0FBSyxLQUFLLENBQUMsWUFBWSxDQUFDO0lBQ3JELENBQUM7SUFFTyxnQkFBZ0IsQ0FBQyxLQUF1QjtRQUM5QyxPQUFPLEtBQUssQ0FBQyxjQUFjLEtBQUssQ0FBQztZQUMxQixLQUFLLENBQUMsWUFBWSxLQUFLLEtBQUssQ0FBQyxLQUFLLENBQUMsTUFBTTtZQUN6QyxLQUFLLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUM7SUFDaEMsQ0FBQztJQUVPLHNCQUFzQixDQUFDLFlBQW9CO1FBQ2pELE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUM7UUFFM0Msa0VBQWtFO1FBQ2xFLE1BQU0sU0FBUyxHQUFHLFVBQVUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDdEMsT0FBTyxZQUFZLENBQUMsTUFBTSxJQUFJLFNBQVMsQ0FBQztJQUMxQyxDQUFDO0lBRUQsV0FBVyxDQUFDLENBQU07UUFDaEIsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDLE9BQU8sSUFBSSxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsT0FBTyxJQUFJLEVBQUUsRUFBRSxDQUFDO1lBQzdELENBQUMsQ0FBQyxjQUFjLEVBQUUsQ0FBQztZQUNuQixDQUFDLENBQUMsZUFBZSxFQUFFLENBQUM7UUFDdEIsQ0FBQztJQUNILENBQUM7SUFFRCxnQkFBZ0IsQ0FBQyxLQUFVO1FBQ3pCLE1BQU0sSUFBSSxHQUFTLFFBQVEsQ0FBQyxLQUFLLENBQUMsS0FBSyxFQUFFLE1BQU0sQ0FBQyxDQUFDO1FBQ2pELE1BQU0sT0FBTyxHQUFrQjtZQUM3QixHQUFHLEVBQUUsTUFBTSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDbEMsS0FBSyxFQUFFLE1BQU0sQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ3RDLElBQUksRUFBRSxNQUFNLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQztTQUNyQyxDQUFDO1FBQ0Ysa0JBQWtCO1FBQ2xCLE9BQU8sSUFBSSxPQUFPLENBQUMsT0FBTyxDQUFDLElBQUksRUFBRSxPQUFPLENBQUMsS0FBSyxFQUFFLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUMvRCxDQUFDO0lBRUQsZUFBZSxDQUFDLEtBQW9CO1FBQ2xDLE1BQU0sYUFBYSxHQUNqQixJQUFJLEtBQUssQ0FBQyxHQUFHLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLEtBQUssQ0FBQyxLQUFLLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDO1FBQ3ZFLE9BQU8sUUFBUSxDQUFDLGdCQUFnQixDQUFDLGFBQWEsQ0FBQyxDQUFDO0lBQ2xELENBQUM7SUFFRCxVQUFVO1FBQ1IsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUNuQixJQUFJLFNBQVMsR0FBRyxJQUFJLENBQUMsb0JBQW9CLENBQUMsZUFBZSxDQUN2RCxJQUFJLENBQUMsUUFBUSxFQUNiLElBQUksQ0FBQyxjQUFjLEVBQ25CLElBQUksQ0FBQyxLQUFLLENBQ1gsQ0FBQztZQUNGLElBQUksU0FBUyxDQUFDLEtBQUssRUFBRSxDQUFDO2dCQUNwQixJQUFJLENBQUMsa0JBQWtCLENBQUMsZUFBZSxDQUNyQyxRQUFRLEVBQ1IsT0FBTyxFQUNQLFNBQVMsQ0FBQyxPQUFPLENBQ2xCLENBQUM7Z0JBQ0YsT0FBTztZQUNULENBQUM7UUFDSCxDQUFDO1FBQ0QsSUFBSSxJQUFJLENBQUMsSUFBSSxJQUFJLFNBQVMsRUFBRSxDQUFDO1lBQzNCLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztnQkFDN0MsSUFBSSxJQUFJLENBQUMsYUFBYSxJQUFJLFNBQVMsRUFBRSxDQUFDO29CQUNwQyxJQUFJLENBQUMsYUFBYSxDQUFDLEtBQUssRUFBRSxDQUFDO2dCQUM3QixDQUFDO1lBQ0gsQ0FBQztpQkFBTSxDQUFDO2dCQUNOLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDcEIsQ0FBQztRQUNILENBQUM7YUFBTSxDQUFDO1lBQ04sSUFBSSxJQUFJLENBQUMsYUFBYSxJQUFJLFNBQVMsRUFBRSxDQUFDO2dCQUNwQyxJQUFJLENBQUMsYUFBYSxDQUFDLEtBQUssRUFBRSxDQUFDO1lBQzdCLENBQUM7aUJBQU0sQ0FBQztnQkFDTixJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxDQUFDO1lBQ3JCLENBQUM7UUFDSCxDQUFDO0lBQ0gsQ0FBQztJQUVELFlBQVk7UUFDVixJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO1lBQ25CLElBQUksU0FBUyxHQUFHLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxlQUFlLENBQ3ZELElBQUksQ0FBQyxRQUFRLEVBQ2IsSUFBSSxDQUFDLGNBQWMsRUFDbkIsSUFBSSxDQUFDLEtBQUssQ0FDWCxDQUFDO1lBQ0YsSUFBSSxTQUFTLENBQUMsS0FBSyxFQUFFLENBQUM7Z0JBQ3BCLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxlQUFlLENBQ3JDLFFBQVEsRUFDUixPQUFPLEVBQ1AsU0FBUyxDQUFDLE9BQU8sQ0FDbEIsQ0FBQztnQkFDRixPQUFPO1lBQ1QsQ0FBQztRQUNILENBQUM7UUFDRCxJQUFJLElBQUksQ0FBQyxJQUFJLElBQUksU0FBUyxFQUFFLENBQUM7WUFDM0IsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO2dCQUM3QyxJQUFJLElBQUksQ0FBQyxhQUFhLElBQUksU0FBUyxFQUFFLENBQUM7b0JBQ3BDLElBQUksQ0FBQyxhQUFhLENBQUMsS0FBSyxFQUFFLENBQUM7Z0JBQzdCLENBQUM7WUFDSCxDQUFDO2lCQUFNLENBQUM7Z0JBQ04sSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztZQUNwQixDQUFDO1FBQ0gsQ0FBQzthQUFNLENBQUM7WUFDTixJQUFJLElBQUksQ0FBQyxhQUFhLElBQUksU0FBUyxFQUFFLENBQUM7Z0JBQ3BDLElBQUksQ0FBQyxhQUFhLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDN0IsQ0FBQztpQkFBTSxDQUFDO2dCQUNOLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLENBQUM7WUFDckIsQ0FBQztRQUNILENBQUM7SUFDSCxDQUFDO0lBRUQsUUFBUSxDQUFDLEtBQVU7UUFDakIsSUFBSSxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUN6QixDQUFDO0lBRUQsVUFBVSxDQUFDLEtBQVU7UUFDbkIsSUFBSSxLQUFLLElBQUksS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsRUFBRSxDQUFDO1lBQ2xDLElBQUksSUFBSSxDQUFDLFVBQVUsS0FBSyxLQUFLO2dCQUFFLE9BQU87WUFFdEMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxLQUFLLEVBQUUsQ0FBQztZQUMzQixJQUFJLEtBQUssWUFBWSxPQUFPLEVBQUUsQ0FBQztnQkFDN0IsSUFBSSxLQUFLLEtBQUssSUFBSSxDQUFDLGVBQWUsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDO29CQUMxQyxJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsS0FBSyxDQUFDLENBQUM7Z0JBQy9DLENBQUM7cUJBQU0sQ0FBQztvQkFDTixJQUFJLENBQUMsU0FBUyxHQUFHLEtBQUssQ0FBQztnQkFDekIsQ0FBQztZQUNILENBQUM7aUJBQU0sQ0FBQztnQkFDTixLQUFLLEdBQUcsS0FBSyxDQUFDLFVBQVUsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLENBQUM7Z0JBQ2xDLElBQUksSUFBSSxDQUFDLGtCQUFrQixFQUFFLENBQUM7b0JBQzVCLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixDQUNoQyxRQUFRLENBQUMsZ0JBQWdCLENBQUMsS0FBSyxDQUFDLENBQ2pDLENBQUM7b0JBQ0YsSUFBSSxDQUFDLFNBQVMsR0FBRyxRQUFRLENBQUMsZ0JBQWdCLENBQUMsS0FBSyxDQUFDLENBQUM7Z0JBQ3BELENBQUM7cUJBQU0sQ0FBQztvQkFDTixJQUFJLEtBQUssSUFBSSxFQUFFLElBQUksS0FBSyxJQUFJLElBQUksRUFBRSxDQUFDO3dCQUNqQyxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FDaEMsUUFBUSxDQUFDLGdCQUFnQixDQUFDLEtBQUssQ0FBQyxDQUNqQyxDQUFDO3dCQUNGLElBQUksQ0FBQyxTQUFTLEdBQUcsUUFBUSxDQUFDLGdCQUFnQixDQUFDLEtBQUssQ0FBQyxDQUFDO29CQUNwRCxDQUFDO2dCQUNILENBQUM7WUFDSCxDQUFDO1lBRUQsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQ2YsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7WUFFOUIsSUFBSSxPQUFPLElBQUksQ0FBQyxTQUFTLEtBQUssUUFBUTtnQkFBRSxJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUM7UUFDM0UsQ0FBQztJQUNILENBQUM7K0dBOWVVLG1CQUFtQjttR0FBbkIsbUJBQW1CLHF1QkFsQm5CO1lBQ1Q7Z0JBQ0UsT0FBTyxFQUFFLGlCQUFpQjtnQkFDMUIsV0FBVyxFQUFFLFVBQVUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxtQkFBbUIsQ0FBQztnQkFDbEQsS0FBSyxFQUFFLElBQUk7YUFDWjtZQUNEO2dCQUNFLE9BQU8sRUFBRSxhQUFhO2dCQUN0QixXQUFXLEVBQUUsVUFBVSxDQUFDLEdBQUcsRUFBRSxDQUFDLG1CQUFtQixDQUFDO2dCQUNsRCxLQUFLLEVBQUUsSUFBSTthQUNaO1lBQ0QsSUFBSTtZQUNKLEVBQUUsT0FBTyxFQUFFLGlCQUFpQixFQUFFLFFBQVEsRUFBRSxvQkFBb0IsRUFBRTtZQUM5RCxFQUFFLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxRQUFRLEVBQUUsc0JBQXNCLEVBQUU7U0FDdEUsdUpDcERILG12RkF3REE7OzRGREFhLG1CQUFtQjtrQkF0Qi9CLFNBQVM7K0JBQ0UsYUFBYSxhQUdaO3dCQUNUOzRCQUNFLE9BQU8sRUFBRSxpQkFBaUI7NEJBQzFCLFdBQVcsRUFBRSxVQUFVLENBQUMsR0FBRyxFQUFFLG9CQUFvQixDQUFDOzRCQUNsRCxLQUFLLEVBQUUsSUFBSTt5QkFDWjt3QkFDRDs0QkFDRSxPQUFPLEVBQUUsYUFBYTs0QkFDdEIsV0FBVyxFQUFFLFVBQVUsQ0FBQyxHQUFHLEVBQUUsb0JBQW9CLENBQUM7NEJBQ2xELEtBQUssRUFBRSxJQUFJO3lCQUNaO3dCQUNELElBQUk7d0JBQ0osRUFBRSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsUUFBUSxFQUFFLG9CQUFvQixFQUFFO3dCQUM5RCxFQUFFLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxRQUFRLEVBQUUsc0JBQXNCLEVBQUU7cUJBQ3RFO3dLQVlRLFNBQVM7c0JBQWpCLEtBQUs7Z0JBT0csS0FBSztzQkFBYixLQUFLO2dCQU9HLFlBQVk7c0JBQXBCLEtBQUs7Z0JBT0csSUFBSTtzQkFBWixLQUFLO2dCQU9HLGFBQWE7c0JBQXJCLEtBQUs7Z0JBT0csSUFBSTtzQkFBWixLQUFLO2dCQU9HLGFBQWE7c0JBQXJCLEtBQUs7Z0JBT0csUUFBUTtzQkFBaEIsS0FBSztnQkFPRyxrQkFBa0I7c0JBQTFCLEtBQUs7Z0JBT0csUUFBUTtzQkFBaEIsS0FBSztnQkFPRyxnQkFBZ0I7c0JBQXhCLEtBQUs7Z0JBT0csY0FBYztzQkFBdEIsS0FBSztnQkFPRyxjQUFjO3NCQUF0QixLQUFLO2dCQU9HLFNBQVM7c0JBQWpCLEtBQUs7Z0JBT0csU0FBUztzQkFBakIsS0FBSztnQkFPRyxhQUFhO3NCQUFyQixLQUFLO2dCQU9HLE9BQU87c0JBQWYsS0FBSztnQkFPRyxPQUFPO3NCQUFmLEtBQUs7Z0JBT0csT0FBTztzQkFBZixLQUFLO2dCQU9HLFlBQVk7c0JBQXBCLEtBQUs7Z0JBT0csUUFBUTtzQkFBaEIsS0FBSztnQkFPRyxtQkFBbUI7c0JBQTNCLEtBQUs7Z0JBRUksTUFBTTtzQkFBZixNQUFNO2dCQUNHLE1BQU07c0JBQWYsTUFBTTtnQkFDRyxLQUFLO3NCQUFkLE1BQU07Z0JBQ0csUUFBUTtzQkFBakIsTUFBTTtnQkFDRyxJQUFJO3NCQUFiLE1BQU07Z0JBT2EsYUFBYTtzQkFBaEMsU0FBUzt1QkFBQyxPQUFPIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcclxuICBDb21wb25lbnQsXHJcbiAgRWxlbWVudFJlZixcclxuICBFdmVudEVtaXR0ZXIsXHJcbiAgSW5wdXQsXHJcbiAgT25DaGFuZ2VzLFxyXG4gIE9uSW5pdCxcclxuICBPdXRwdXQsXHJcbiAgUmVuZGVyZXIyLFxyXG4gIFNpbXBsZUNoYW5nZXMsXHJcbiAgVmlld0NoaWxkLFxyXG4gIGZvcndhcmRSZWYsXHJcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7XHJcbiAgQWJzdHJhY3RDb250cm9sLFxyXG4gIENvbnRyb2xWYWx1ZUFjY2Vzc29yLFxyXG4gIE5HX1ZBTElEQVRPUlMsXHJcbiAgTkdfVkFMVUVfQUNDRVNTT1IsXHJcbiAgVmFsaWRhdGlvbkVycm9ycyxcclxufSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcbmltcG9ydCB7XHJcbiAgTmdiRGF0ZSxcclxuICBOZ2JEYXRlUGFyc2VyRm9ybWF0dGVyLFxyXG4gIE5nYkRhdGVTdHJ1Y3QsXHJcbiAgTmdiRGF0ZXBpY2tlcixcclxuICBOZ2JEYXRlcGlja2VySTE4bixcclxufSBmcm9tICdAbmctYm9vdHN0cmFwL25nLWJvb3RzdHJhcCc7XHJcbmltcG9ydCB7IERhdGVQaWNrZXJTZXJ2aWNlIH0gZnJvbSAnLi9kYXRlLXBpY2tlci5zZXJ2aWNlJztcclxuaW1wb3J0IHsgTWVzc2FnZVV0aWxTZXJ2aWNlIH0gZnJvbSAnLi4vdXRpbHMvbWVzc2FnZS11dGlsLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBDdXN0b21EYXRlcGlja2VySTE4biwgSTE4biB9IGZyb20gJy4vQ3VzdG9tRGF0ZVBpY2tlckkxOG4nO1xyXG5pbXBvcnQgeyBDdXN0b21EYXRlcGlja2VyRm9ybWF0IH0gZnJvbSAnLi9DdXN0b21EYXRlUGlja2VyRm9ybWF0JztcclxuaW1wb3J0IHsgU2hhcmVkQ29tcG9uZW50c1V0aWwgfSBmcm9tICcuLi91dGlscy9TaGFyZWRDb21wb25lbnRzVXRpbCc7XHJcbmltcG9ydCB7IERhdGVVdGlsIH0gZnJvbSAnLi4vdXRpbHMvRGF0ZVV0aWwnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdkYXRlLXBpY2tlcicsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL2RhdGUtcGlja2VyLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi9kYXRlLXBpY2tlci5jb21wb25lbnQuc2NzcyddLFxyXG4gIHByb3ZpZGVyczogW1xyXG4gICAge1xyXG4gICAgICBwcm92aWRlOiBOR19WQUxVRV9BQ0NFU1NPUixcclxuICAgICAgdXNlRXhpc3Rpbmc6IGZvcndhcmRSZWYoKCkgPT4gRGF0ZVBpY2tlckNvbXBvbmVudCksXHJcbiAgICAgIG11bHRpOiB0cnVlLFxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgcHJvdmlkZTogTkdfVkFMSURBVE9SUyxcclxuICAgICAgdXNlRXhpc3Rpbmc6IGZvcndhcmRSZWYoKCkgPT4gRGF0ZVBpY2tlckNvbXBvbmVudCksXHJcbiAgICAgIG11bHRpOiB0cnVlLFxyXG4gICAgfSxcclxuICAgIEkxOG4sXHJcbiAgICB7IHByb3ZpZGU6IE5nYkRhdGVwaWNrZXJJMThuLCB1c2VDbGFzczogQ3VzdG9tRGF0ZXBpY2tlckkxOG4gfSxcclxuICAgIHsgcHJvdmlkZTogTmdiRGF0ZVBhcnNlckZvcm1hdHRlciwgdXNlQ2xhc3M6IEN1c3RvbURhdGVwaWNrZXJGb3JtYXQgfSxcclxuICBdLFxyXG59KVxyXG5cclxuLy8gcHJvdmlkZXJzOiBbSTE4biwgeyBwcm92aWRlOiBOZ2JEYXRlcGlja2VySTE4biwgdXNlQ2xhc3M6IEN1c3RvbURhdGVwaWNrZXJJMThuIH0sIHsgcHJvdmlkZTogTmdiRGF0ZVBhcnNlckZvcm1hdHRlciwgdXNlQ2xhc3M6IEN1c3RvbURhdGVwaWNrZXJGb3JtYXQgfV1cclxuZXhwb3J0IGNsYXNzIERhdGVQaWNrZXJDb21wb25lbnRcclxuICBpbXBsZW1lbnRzIE9uSW5pdCwgT25DaGFuZ2VzLCBDb250cm9sVmFsdWVBY2Nlc3NvclxyXG57XHJcbiAgLyoqXHJcbiAgKiBAZGVzY3JpcHRpb24gQ29udHJvbGEgbGEgdmlzdWFsaXphY2nDs24gZGVsIHRleHRvIHN1cGVyaW9yIChsYWJlbClcclxuICAqIEBkZWZhdWx0IHRydWVcclxuICAqIEB0eXBlIGJvb2xlYW5cclxuICAqL1xyXG4gIEBJbnB1dCgpIHNob3dMYWJlbDogYm9vbGVhbiA9IHRydWU7XHJcbiAgXHJcbiAgLyoqXHJcbiAgKiBAZGVzY3JpcHRpb24gVGV4dG8gYSBtb3N0cmFyIGNvbW8gZXRpcXVldGEgZGVsIGNhbXBvXHJcbiAgKiBAZGVmYXVsdCBudWxsXHJcbiAgKiBAdHlwZSBhbnlcclxuICAqL1xyXG4gIEBJbnB1dCgpIGxhYmVsOiBhbnkgPSBudWxsO1xyXG4gIFxyXG4gIC8qKlxyXG4gICogQGRlc2NyaXB0aW9uIFZhbG9yIHBhcmEgZWwgYXRyaWJ1dG8gYXV0b2NvbXBsZXRlIGRlbCBpbnB1dFxyXG4gICogQGRlZmF1bHQgJ29mZidcclxuICAqIEB0eXBlIHN0cmluZ1xyXG4gICovXHJcbiAgQElucHV0KCkgYXV0b2NvbXBsZXRlOiBzdHJpbmcgPSAnb2ZmJztcclxuICBcclxuICAvKipcclxuICAqIEBkZXNjcmlwdGlvbiBSZWZlcmVuY2lhIGFsIHNpZ3VpZW50ZSBjb250cm9sIHBhcmEgbmF2ZWdhY2nDs25cclxuICAqIEBkZWZhdWx0IHVuZGVmaW5lZFxyXG4gICogQHR5cGUgYW55XHJcbiAgKi9cclxuICBASW5wdXQoKSBuZXh0OiBhbnk7XHJcbiAgXHJcbiAgLyoqXHJcbiAgKiBAZGVzY3JpcHRpb24gUmVmZXJlbmNpYSBhbCBjb250cm9sIGFsdGVybmF0aXZvIGN1YW5kbyBlbCBzaWd1aWVudGUgZXN0w6EgZGVzaGFiaWxpdGFkb1xyXG4gICogQGRlZmF1bHQgdW5kZWZpbmVkXHJcbiAgKiBAdHlwZSBhbnlcclxuICAqL1xyXG4gIEBJbnB1dCgpIG5leHRJc0Rpc2FibGU6IGFueTtcclxuICBcclxuICAvKipcclxuICAqIEBkZXNjcmlwdGlvbiBSZWZlcmVuY2lhIGFsIGNvbnRyb2wgYW50ZXJpb3IgcGFyYSBuYXZlZ2FjacOzblxyXG4gICogQGRlZmF1bHQgdW5kZWZpbmVkXHJcbiAgKiBAdHlwZSBhbnlcclxuICAqL1xyXG4gIEBJbnB1dCgpIGJhY2s6IGFueTtcclxuICBcclxuICAvKipcclxuICAqIEBkZXNjcmlwdGlvbiBSZWZlcmVuY2lhIGFsIGNvbnRyb2wgYWx0ZXJuYXRpdm8gY3VhbmRvIGVsIGFudGVyaW9yIGVzdMOhIGRlc2hhYmlsaXRhZG9cclxuICAqIEBkZWZhdWx0IHVuZGVmaW5lZFxyXG4gICogQHR5cGUgYW55XHJcbiAgKi9cclxuICBASW5wdXQoKSBiYWNrSXNEaXNhYmxlOiBhbnk7XHJcbiAgXHJcbiAgLyoqXHJcbiAgKiBAZGVzY3JpcHRpb24gSW5kaWNhIHNpIGVsIGNhbXBvIGVzIG9ibGlnYXRvcmlvXHJcbiAgKiBAZGVmYXVsdCBmYWxzZVxyXG4gICogQHR5cGUgYm9vbGVhblxyXG4gICovXHJcbiAgQElucHV0KCkgcmVxdWlyZWQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBcclxuICAvKipcclxuICAqIEBkZXNjcmlwdGlvbiBDb21wbGV0YSBhdXRvbcOhdGljYW1lbnRlIGNvbiBudWxsIGN1YW5kbyBlbCB2YWxvciBlc3TDoSB2YWPDrW9cclxuICAqIEBkZWZhdWx0IHRydWVcclxuICAqIEB0eXBlIGJvb2xlYW5cclxuICAqL1xyXG4gIEBJbnB1dCgpIG5vQXV0b0NvbXBsZXRlTnVsbDogYm9vbGVhbiA9IHRydWU7XHJcbiAgXHJcbiAgLyoqXHJcbiAgKiBAZGVzY3JpcHRpb24gRXN0YWJsZWNlIGVsIGNvbnRyb2wgY29tbyBzb2xvIGxlY3R1cmFcclxuICAqIEBkZWZhdWx0IGZhbHNlXHJcbiAgKiBAdHlwZSBib29sZWFuXHJcbiAgKi9cclxuICBASW5wdXQoKSByZWFkb25seTogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIFxyXG4gIC8qKlxyXG4gICogQGRlc2NyaXB0aW9uIE11ZXN0cmEgbWVuc2FqZXMgZGUgdmFsaWRhY2nDs25cclxuICAqIEBkZWZhdWx0IGZhbHNlXHJcbiAgKiBAdHlwZSBib29sZWFuXHJcbiAgKi9cclxuICBASW5wdXQoKSB2YWxpZGF0b3JNZXNzYWdlOiBib29sZWFuID0gZmFsc2U7XHJcbiAgXHJcbiAgLyoqXHJcbiAgKiBAZGVzY3JpcHRpb24gTXVlc3RyYSBtZW5zYWplcyBkZSBheXVkYSBjb21vIHRvb2x0aXBzXHJcbiAgKiBAZGVmYXVsdCB0cnVlXHJcbiAgKiBAdHlwZSBib29sZWFuXHJcbiAgKi9cclxuICBASW5wdXQoKSB0b29sdGlwTWVzc2FnZTogYm9vbGVhbiA9IHRydWU7XHJcbiAgXHJcbiAgLyoqXHJcbiAgKiBAZGVzY3JpcHRpb24gTXVlc3RyYSBhbGVydGFzIGRlIHZhbGlkYWNpw7NuXHJcbiAgKiBAZGVmYXVsdCBmYWxzZVxyXG4gICogQHR5cGUgYm9vbGVhblxyXG4gICovXHJcbiAgQElucHV0KCkgdmFsaWRhdG9yQWxlcnQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBcclxuICAvKipcclxuICAqIEBkZXNjcmlwdGlvbiBJbmRpY2Egc2kgZWwgZm9ybXVsYXJpbyBoYSBzaWRvIGVudmlhZG8gcGFyYSBtb3N0cmFyIHZhbGlkYWNpb25lc1xyXG4gICogQGRlZmF1bHQgdHJ1ZVxyXG4gICogQHR5cGUgYm9vbGVhblxyXG4gICovXHJcbiAgQElucHV0KCkgc3VibWl0dGVkOiBib29sZWFuID0gdHJ1ZTtcclxuICBcclxuICAvKipcclxuICAqIEBkZXNjcmlwdGlvbiBIYWJpbGl0YSBpbmZvcm1hY2nDs24gYWRpY2lvbmFsIHBhcmEgbGEgZXRpcXVldGFcclxuICAqIEBkZWZhdWx0IGZhbHNlXHJcbiAgKiBAdHlwZSBib29sZWFuXHJcbiAgKi9cclxuICBASW5wdXQoKSBsYWJlbEluZm86IGJvb2xlYW4gPSBmYWxzZTtcclxuICBcclxuICAvKipcclxuICAqIEBkZXNjcmlwdGlvbiBUZXh0byBpbmZvcm1hdGl2byBhZGljaW9uYWwgcGFyYSBsYSBldGlxdWV0YVxyXG4gICogQGRlZmF1bHQgJydcclxuICAqIEB0eXBlIHN0cmluZ1xyXG4gICovXHJcbiAgQElucHV0KCkgdGV4dExhYmVsSW5mbzogc3RyaW5nID0gJyc7XHJcbiAgXHJcbiAgLyoqXHJcbiAgKiBAZGVzY3JpcHRpb24gRmVjaGEgbcOtbmltYSBzZWxlY2Npb25hYmxlXHJcbiAgKiBAZGVmYXVsdCB1bmRlZmluZWRcclxuICAqIEB0eXBlIE5nYkRhdGVTdHJ1Y3RcclxuICAqL1xyXG4gIEBJbnB1dCgpIG1pbkRhdGUhOiBOZ2JEYXRlU3RydWN0O1xyXG4gIFxyXG4gIC8qKlxyXG4gICogQGRlc2NyaXB0aW9uIEZlY2hhIG3DoXhpbWEgc2VsZWNjaW9uYWJsZVxyXG4gICogQGRlZmF1bHQgdW5kZWZpbmVkXHJcbiAgKiBAdHlwZSBOZ2JEYXRlU3RydWN0XHJcbiAgKi9cclxuICBASW5wdXQoKSBtYXhEYXRlITogTmdiRGF0ZVN0cnVjdDtcclxuICBcclxuICAvKipcclxuICAqIEBkZXNjcmlwdGlvbiBJbmRpY2Egc2kgZWwgdmFsb3IgZXMgaW52w6FsaWRvXHJcbiAgKiBAZGVmYXVsdCBmYWxzZVxyXG4gICogQHR5cGUgYm9vbGVhblxyXG4gICovXHJcbiAgQElucHV0KCkgaW52YWxpZDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIFxyXG4gIC8qKlxyXG4gICogQGRlc2NyaXB0aW9uIEVzdGFibGVjZSBlbCBmb2NvIGluaWNpYWwgZW4gZWwgY29tcG9uZW50ZVxyXG4gICogQGRlZmF1bHQgZmFsc2VcclxuICAqIEB0eXBlIGJvb2xlYW5cclxuICAqL1xyXG4gIEBJbnB1dCgpIGZvY3VzSW5pdGlhbDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIFxyXG4gIC8qKlxyXG4gICogQGRlc2NyaXB0aW9uIERlc2hhYmlsaXRhIGVsIGNvbnRyb2xcclxuICAqIEBkZWZhdWx0IGZhbHNlXHJcbiAgKiBAdHlwZSBib29sZWFuXHJcbiAgKi9cclxuICBASW5wdXQoKSBkaXNhYmxlZDogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICAvKipcclxuICAqIEBkZXNjcmlwdGlvbiBSZXN0cmluZ2UgbGEgZW50cmFkYSBhIG3DoXhpbW8gOCBkw61naXRvcyAoRERNTVlZWVkpIG8gMTAgY2FyYWN0ZXJlcyAoREQvTU0vWVlZWSlcclxuICAqIEBkZWZhdWx0IGZhbHNlXHJcbiAgKiBAdHlwZSBib29sZWFuXHJcbiAgKi9cclxuICBASW5wdXQoKSByZXN0cmljdElucHV0TGVuZ3RoOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gIEBPdXRwdXQoKSBvbk5leHQ6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG4gIEBPdXRwdXQoKSBvbkJhY2s6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG4gIEBPdXRwdXQoKSBpbnB1dDogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcbiAgQE91dHB1dCgpIG9uY2hhbmdlOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuICBAT3V0cHV0KCkgYmx1cjogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcbiAgLy8geG1pbkRhdGUgPSBudWxsO1xyXG4gIC8vIHhtYXhEYXRlID0gbnVsbDtcclxuICB2YWx1ZTogYW55O1xyXG4gIGNvbnRyb2xzOiBhbnk7XHJcbiAgZW1pdFZhbHVlOiBOZ2JEYXRlIHwgc3RyaW5nID0gJyc7XHJcbiAgc2hhcmVkQ29tcG9uZW50c1V0aWwgPSBuZXcgU2hhcmVkQ29tcG9uZW50c1V0aWwoKTtcclxuICBAVmlld0NoaWxkKCdmZWNoYScpIG5nYkRhdGVwaWNrZXI6IE5nYkRhdGVwaWNrZXIgfCBhbnk7XHJcblxyXG4gIF90ZW1wVmFsdWUgPSAnJztcclxuICBfaW5pdFZhbHVlID0gZmFsc2U7XHJcblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHJpdmF0ZSBlbDogRWxlbWVudFJlZixcclxuICAgIHByaXZhdGUgbWVzc2FnZVV0aWxTZXJ2aWNlOiBNZXNzYWdlVXRpbFNlcnZpY2UsXHJcbiAgICBwcml2YXRlIGRhdGVQaWNrZXJTZXJ2aWNlOiBEYXRlUGlja2VyU2VydmljZSxcclxuICAgIHByaXZhdGUgX3JlbmRlcjogUmVuZGVyZXIyXHJcbiAgKSB7XHJcbiAgICB0aGlzLnNob3dMYWJlbCA9IHRoaXMuZGF0ZVBpY2tlclNlcnZpY2UuZ2V0U2hvd0xhYmVsKCk7XHJcbiAgICB0aGlzLmF1dG9jb21wbGV0ZSA9IHRoaXMuZGF0ZVBpY2tlclNlcnZpY2UuZ2V0QXV0b2NvbXBsZXRlKCk7XHJcbiAgICB0aGlzLm5vQXV0b0NvbXBsZXRlTnVsbCA9IHRoaXMuZGF0ZVBpY2tlclNlcnZpY2UuZ2V0Tm9BdXRvQ29tcGxldGVOdWxsKCk7XHJcbiAgICB0aGlzLmZvY3VzSW5pdGlhbCA9IHRoaXMuZGF0ZVBpY2tlclNlcnZpY2UuZ2V0Rm9jdXNJbml0aWFsKCk7XHJcbiAgICB0aGlzLnZhbGlkYXRvck1lc3NhZ2UgPSB0aGlzLmRhdGVQaWNrZXJTZXJ2aWNlLmdldFZhbGlkYXRvck1lc3NhZ2UoKTtcclxuICAgIHRoaXMudG9vbHRpcE1lc3NhZ2UgPSB0aGlzLmRhdGVQaWNrZXJTZXJ2aWNlLmdldFRvb2x0aXBNZXNzYWdlKCk7XHJcbiAgICB0aGlzLnN1Ym1pdHRlZCA9IHRoaXMuZGF0ZVBpY2tlclNlcnZpY2UuZ2V0U3VibWl0dGVkKCk7XHJcbiAgICB0aGlzLnZhbGlkYXRvckFsZXJ0ID0gdGhpcy5kYXRlUGlja2VyU2VydmljZS5nZXRWYWxpZGF0b3JBbGVydCgpO1xyXG4gIH1cclxuXHJcbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xyXG4gICAgaWYgKGNoYW5nZXNbJ3N1Ym1pdHRlZCddKSB7XHJcbiAgICAgIGlmICh0aGlzLmNvbnRyb2xzICE9PSB1bmRlZmluZWQgJiYgY2hhbmdlc1snc3VibWl0dGVkJ10uY3VycmVudFZhbHVlKSB7XHJcbiAgICAgICAgdGhpcy5jb250cm9scy5tYXJrQXNEaXJ0eSgpO1xyXG4gICAgICAgIHRoaXMuY29udHJvbHMubWFya0FzVG91Y2hlZCgpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBuZ09uSW5pdCgpIHtcclxuICAgIGlmICh0aGlzLm1pbkRhdGUpIHtcclxuICAgICAgdGhpcy5taW5EYXRlID0gdGhpcy5zdHJEYXRlVG9OZ2JEYXRlKHRoaXMubWluRGF0ZSk7XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy5mb2N1c0luaXRpYWwgPT0gdHJ1ZSAmJiB0aGlzLmRpc2FibGVkID09IGZhbHNlKSB7XHJcbiAgICAgIGNvbnN0IGludmFsaWRDb250cm9sID1cclxuICAgICAgICB0aGlzLmVsLm5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3RvcignW3R5cGU9XCJ0ZXh0XCJdJyk7XHJcbiAgICAgIGludmFsaWRDb250cm9sLmZvY3VzKCk7XHJcbiAgICAgIGludmFsaWRDb250cm9sLnNlbGVjdCgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgb25DaGFuZ2UgPSAoXzogYW55KSA9PiB7fTtcclxuICBvblZhbGlkYXRpb25DaGFuZ2UgPSAoKSA9PiB7fTtcclxuICBvblRvdWNoID0gKCkgPT4ge307XHJcblxyXG4gIGZvY3VzID0gKCkgPT4ge1xyXG4gICAgY29uc3QgaW52YWxpZENvbnRyb2wgPSB0aGlzLmVsLm5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3RvcignW3R5cGU9XCJ0ZXh0XCJdJyk7XHJcbiAgICBpbnZhbGlkQ29udHJvbC5mb2N1cygpO1xyXG4gICAgaW52YWxpZENvbnRyb2wuc2VsZWN0KCk7XHJcbiAgfTtcclxuXHJcbiAgb25Gb2N1cyhldnQ6IGFueSkge1xyXG4gICAgaWYgKGV2dCkge1xyXG4gICAgICBjb25zdCBpbnZhbGlkQ29udHJvbCA9XHJcbiAgICAgICAgdGhpcy5lbC5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoJ1t0eXBlPVwidGV4dFwiXScpO1xyXG4gICAgICBpbnZhbGlkQ29udHJvbC5zZWxlY3QoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHdyaXRlVmFsdWUodmFsdWU6IGFueSk6IHZvaWQge1xyXG4gICAgaWYgKHZhbHVlKSB7XHJcbiAgICAgIHRoaXMudmFsdWUgPSB0aGlzLnN0ckRhdGVUb05nYkRhdGUodmFsdWUpIHx8ICcnO1xyXG4gICAgICBpZiAodmFsdWUgJiYgdmFsdWUgaW5zdGFuY2VvZiBEYXRlKSB7XHJcbiAgICAgICAgdGhpcy5fdGVtcFZhbHVlID0gRGF0ZVV0aWwuZGF0ZUF1dG9Db21wbGV0ZSh2YWx1ZSk7XHJcbiAgICAgICAgaWYgKHRoaXMuY29udHJvbHMpIHtcclxuICAgICAgICAgIHRoaXMuX3JlbmRlci5zZXRQcm9wZXJ0eSh0aGlzLmNvbnRyb2xzLCAndmFsdWUnLCB0aGlzLl90ZW1wVmFsdWUpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICBpZiAodmFsdWUgJiYgdHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJykgdGhpcy5fdGVtcFZhbHVlID0gdmFsdWUudHJpbSgpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy52YWx1ZSA9ICcnO1xyXG4gICAgICB0aGlzLl90ZW1wVmFsdWUgPSAnJztcclxuICAgIH1cclxuICB9XHJcbiAgcmVnaXN0ZXJPbkNoYW5nZShmbjogYW55KTogdm9pZCB7XHJcbiAgICB0aGlzLm9uQ2hhbmdlID0gZm47XHJcbiAgfVxyXG4gIHJlZ2lzdGVyT25Ub3VjaGVkKGZuOiBhbnkpOiB2b2lkIHtcclxuICAgIHRoaXMub25Ub3VjaCA9IGZuO1xyXG4gIH1cclxuICBzZXREaXNhYmxlZFN0YXRlPyhpc0Rpc2FibGVkOiBib29sZWFuID0gZmFsc2UpOiB2b2lkIHtcclxuICAgIHRoaXMuZGlzYWJsZWQgPSBpc0Rpc2FibGVkO1xyXG4gIH1cclxuXHJcbiAgdmFsaWRhdGUoY29udHJvbDogQWJzdHJhY3RDb250cm9sKTogVmFsaWRhdGlvbkVycm9ycyB8IGFueSB7XHJcbiAgICB0aGlzLmNvbnRyb2xzID0gY29udHJvbDtcclxuICAgIGlmICghdGhpcy5faW5pdFZhbHVlKSB7XHJcbiAgICAgIGlmICh0aGlzLl90ZW1wVmFsdWUpIHtcclxuICAgICAgICB0aGlzLl9yZW5kZXIuc2V0UHJvcGVydHkoY29udHJvbCwgJ3ZhbHVlJywgdGhpcy5fdGVtcFZhbHVlKTtcclxuICAgICAgfVxyXG4gICAgICB0aGlzLl9pbml0VmFsdWUgPSB0cnVlO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIG51bGw7XHJcbiAgfVxyXG5cclxuICByZWdpc3Rlck9uVmFsaWRhdG9yQ2hhbmdlPyhmbjogKCkgPT4gdm9pZCk6IHZvaWQge1xyXG4gICAgdGhpcy5vblZhbGlkYXRpb25DaGFuZ2UgPSBmbjtcclxuICB9XHJcblxyXG4gIG9uQmx1cigpOiB2b2lkIHtcclxuICAgIHRoaXMub25Ub3VjaCgpO1xyXG4gIH1cclxuXHJcbiAgb25JbnB1dCh2YWx1ZTogYW55KSB7XHJcbiAgICB0aGlzLmVtaXRWYWx1ZSA9IHZhbHVlO1xyXG5cclxuICAgIHRoaXMudmFsdWUgPSB2YWx1ZTtcclxuICAgIGlmICh0aGlzLnZhbHVlIGluc3RhbmNlb2YgTmdiRGF0ZSkge1xyXG4gICAgICB0aGlzLmVtaXRWYWx1ZSA9IHRoaXMubmdiRGF0ZXRvU3RyaW5nKHZhbHVlKTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLm9uQ2hhbmdlKHRoaXMuZW1pdFZhbHVlKTtcclxuICAgIHRoaXMub25jaGFuZ2UuZW1pdCh0aGlzLmVtaXRWYWx1ZSk7XHJcbiAgICB0aGlzLmlucHV0LmVtaXQodGhpcy5lbWl0VmFsdWUpO1xyXG5cclxuICAgIHRoaXMuX3RlbXBWYWx1ZSA9ICcnO1xyXG4gIH1cclxuXHJcbiAgb25LZXlVcEVudGVyKCk6IHZvaWQge1xyXG4gICAgdGhpcy5lbnRlcktleVVwKCk7XHJcbiAgfVxyXG5cclxuICBoYW5kbGVQYXN0ZShldmVudDogQ2xpcGJvYXJkRXZlbnQpOiB2b2lkIHtcclxuICAgIGlmKCF0aGlzLnJlc3RyaWN0SW5wdXRMZW5ndGgpIHJldHVybjtcclxuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7IFxyXG5cclxuICAgIGlmKCF0aGlzLmlzQXBwbGljYWJsZVRvSGFuZGxlUGFzdGUoZXZlbnQpKSByZXR1cm47XHJcblxyXG4gICAgY29uc3QgcGFzdGVkVGV4dCA9IGV2ZW50LmNsaXBib2FyZERhdGE/LmdldERhdGEoJ3RleHQnKSB8fCAnJztcclxuICAgIGlmICghcGFzdGVkVGV4dCkgcmV0dXJuO1xyXG4gICAgICBcclxuICAgIHRoaXMuZm9ybWF0RGF0ZShwYXN0ZWRUZXh0KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgaXNBcHBsaWNhYmxlVG9IYW5kbGVQYXN0ZShldmVudDogQ2xpcGJvYXJkRXZlbnQpOiBib29sZWFuIHtcclxuICAgIGNvbnN0IGlucHV0ID0gZXZlbnQudGFyZ2V0IGFzIEhUTUxJbnB1dEVsZW1lbnQ7XHJcblxyXG4gICAgaWYodGhpcy5faGFzVGV4dFNlbGVjdGlvbihpbnB1dCkpe1xyXG4gICAgICByZXR1cm4gdGhpcy5faXNGdWxseVNlbGVjdGVkKGlucHV0KTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gdHJ1ZTtcclxuICB9XHJcblxyXG4gIGhhbmRsZUtleVByZXNzKGV2ZW50OiBLZXlib2FyZEV2ZW50KTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5yZXN0cmljdElucHV0TGVuZ3RoKSB7XHJcbiAgICAgIHRoaXMuX2hhbmRsZVJlc3RyaWN0SW5wdXRMZW5ndGgoZXZlbnQpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5vbmx5TnVtYmVycyhldmVudCBhcyBhbnkpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfaGFuZGxlUmVzdHJpY3RJbnB1dExlbmd0aChldmVudDogS2V5Ym9hcmRFdmVudCk6IHZvaWQge1xyXG4gICAgY29uc3QgaXNWYWxpZENoYXJhY3RlciA9IHRoaXMuX2lzRGlnaXRPclNsYXNoKGV2ZW50LmtleSk7XHJcblxyXG4gICAgaWYgKCFpc1ZhbGlkQ2hhcmFjdGVyKSB7XHJcbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBpbnB1dCA9IGV2ZW50LnRhcmdldCBhcyBIVE1MSW5wdXRFbGVtZW50O1xyXG4gICAgY29uc3QgY3VycmVudFZhbHVlID0gaW5wdXQudmFsdWU7XHJcblxyXG4gICAgY29uc3QgaGFzU2VsZWN0ZWRUZXh0ID0gdGhpcy5faGFzVGV4dFNlbGVjdGlvbihpbnB1dCk7XHJcblxyXG4gICAgaWYgKGhhc1NlbGVjdGVkVGV4dCkge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgaXNJbnB1dExlbmd0aEV4Y2VlZGVkID0gdGhpcy5faXNJbnB1dExlbmd0aEV4Y2VlZGVkKGN1cnJlbnRWYWx1ZSk7XHJcblxyXG4gICAgaWYgKGlzSW5wdXRMZW5ndGhFeGNlZWRlZCkge1xyXG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfaXNEaWdpdE9yU2xhc2goa2V5OiBzdHJpbmcpOiBib29sZWFuIHtcclxuICAgIHJldHVybiAvW1xcZFxcL10vLnRlc3Qoa2V5KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX2hhc1RleHRTZWxlY3Rpb24oaW5wdXQ6IEhUTUxJbnB1dEVsZW1lbnQpOiBib29sZWFuIHtcclxuICAgIHJldHVybiBpbnB1dC5zZWxlY3Rpb25TdGFydCAhPT0gaW5wdXQuc2VsZWN0aW9uRW5kO1xyXG4gIH1cclxuICBcclxuICBwcml2YXRlIF9pc0Z1bGx5U2VsZWN0ZWQoaW5wdXQ6IEhUTUxJbnB1dEVsZW1lbnQpOiBib29sZWFuIHtcclxuICAgIHJldHVybiBpbnB1dC5zZWxlY3Rpb25TdGFydCA9PT0gMCAmJiBcclxuICAgICAgICAgICBpbnB1dC5zZWxlY3Rpb25FbmQgPT09IGlucHV0LnZhbHVlLmxlbmd0aCAmJiBcclxuICAgICAgICAgICBpbnB1dC52YWx1ZS5sZW5ndGggPiAwO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfaXNJbnB1dExlbmd0aEV4Y2VlZGVkKGN1cnJlbnRWYWx1ZTogc3RyaW5nKTogYm9vbGVhbiB7XHJcbiAgICBjb25zdCBoYXNTbGFzaGVzID0gL1xcLy8udGVzdChjdXJyZW50VmFsdWUpO1xyXG5cclxuICAgIC8vIEREL01NL1lZWVkgKG3DoXhpbW8gMTAgY2FyYWN0ZXJlcykgbyAxMjAzMjAyNSAobcOheGltbyA4IGTDrWdpdG9zKVxyXG4gICAgY29uc3QgbWF4TGVuZ3RoID0gaGFzU2xhc2hlcyA/IDEwIDogODsgXHJcbiAgICByZXR1cm4gY3VycmVudFZhbHVlLmxlbmd0aCA+PSBtYXhMZW5ndGg7XHJcbiAgfVxyXG5cclxuICBvbmx5TnVtYmVycyhlOiBhbnkpIHtcclxuICAgIGlmICghKGUua2V5Q29kZSA+PSA0OCAmJiBlLmtleUNvZGUgPD0gNTcpICYmIGUua2V5Q29kZSAhPSA0Nykge1xyXG4gICAgICBlLnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBzdHJEYXRlVG9OZ2JEYXRlKHZhbHVlOiBhbnkpIHtcclxuICAgIGNvbnN0IGRhdGU6IERhdGUgPSBEYXRlVXRpbC5wYXJzZSh2YWx1ZSwgJ0RBVEUnKTtcclxuICAgIGNvbnN0IG5nYkRhdGU6IE5nYkRhdGVTdHJ1Y3QgPSB7XHJcbiAgICAgIGRheTogTnVtYmVyKERhdGVVdGlsLmdldERheShkYXRlKSksXHJcbiAgICAgIG1vbnRoOiBOdW1iZXIoRGF0ZVV0aWwuZ2V0TW9udGgoZGF0ZSkpLFxyXG4gICAgICB5ZWFyOiBOdW1iZXIoRGF0ZVV0aWwuZ2V0WWVhcihkYXRlKSksXHJcbiAgICB9O1xyXG4gICAgLy8gcmV0dXJuIG5nYkRhdGU7XHJcbiAgICByZXR1cm4gbmV3IE5nYkRhdGUobmdiRGF0ZS55ZWFyLCBuZ2JEYXRlLm1vbnRoLCBuZ2JEYXRlLmRheSk7XHJcbiAgfVxyXG5cclxuICBuZ2JEYXRldG9TdHJpbmcodmFsdWU6IE5nYkRhdGVTdHJ1Y3QpOiBOZ2JEYXRlIHwgc3RyaW5nIHtcclxuICAgIGNvbnN0IGNvbmNhdE5nYkRhdGUgPVxyXG4gICAgICBgMCR7dmFsdWUuZGF5fWAuc2xpY2UoLTIpICsgYDAke3ZhbHVlLm1vbnRofWAuc2xpY2UoLTIpICsgdmFsdWUueWVhcjtcclxuICAgIHJldHVybiBEYXRlVXRpbC5kYXRlQXV0b0NvbXBsZXRlKGNvbmNhdE5nYkRhdGUpO1xyXG4gIH1cclxuXHJcbiAgZW50ZXJLZXlVcCgpIHtcclxuICAgIGlmICghdGhpcy5kaXNhYmxlZCkge1xyXG4gICAgICBsZXQgdmFsaWRhdG9yID0gdGhpcy5zaGFyZWRDb21wb25lbnRzVXRpbC5zdG9wQnlWYWxpZGF0b3IoXHJcbiAgICAgICAgdGhpcy5jb250cm9scyxcclxuICAgICAgICB0aGlzLnZhbGlkYXRvckFsZXJ0LFxyXG4gICAgICAgIHRoaXMubGFiZWxcclxuICAgICAgKTtcclxuICAgICAgaWYgKHZhbGlkYXRvci5lcnJvcikge1xyXG4gICAgICAgIHRoaXMubWVzc2FnZVV0aWxTZXJ2aWNlLmdldE1lc3NhZ2VFcnJvcihcclxuICAgICAgICAgICcwMDAwNDYnLFxyXG4gICAgICAgICAgJ0Vycm9yJyxcclxuICAgICAgICAgIHZhbGlkYXRvci5tZXNzYWdlXHJcbiAgICAgICAgKTtcclxuICAgICAgICByZXR1cm47XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIGlmICh0aGlzLm5leHQgIT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgIGlmICh0aGlzLm5leHQuZGlzYWJsZWQgfHwgdGhpcy5uZXh0LnJlYWRvbmx5KSB7XHJcbiAgICAgICAgaWYgKHRoaXMubmV4dElzRGlzYWJsZSAhPSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgIHRoaXMubmV4dElzRGlzYWJsZS5mb2N1cygpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLm5leHQuZm9jdXMoKTtcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgaWYgKHRoaXMubmV4dElzRGlzYWJsZSAhPSB1bmRlZmluZWQpIHtcclxuICAgICAgICB0aGlzLm5leHRJc0Rpc2FibGUuZm9jdXMoKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLm9uTmV4dC5lbWl0KCk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIGFycm93VXBLZXlVcCgpIHtcclxuICAgIGlmICghdGhpcy5kaXNhYmxlZCkge1xyXG4gICAgICBsZXQgdmFsaWRhdG9yID0gdGhpcy5zaGFyZWRDb21wb25lbnRzVXRpbC5zdG9wQnlWYWxpZGF0b3IoXHJcbiAgICAgICAgdGhpcy5jb250cm9scyxcclxuICAgICAgICB0aGlzLnZhbGlkYXRvckFsZXJ0LFxyXG4gICAgICAgIHRoaXMubGFiZWxcclxuICAgICAgKTtcclxuICAgICAgaWYgKHZhbGlkYXRvci5lcnJvcikge1xyXG4gICAgICAgIHRoaXMubWVzc2FnZVV0aWxTZXJ2aWNlLmdldE1lc3NhZ2VFcnJvcihcclxuICAgICAgICAgICcwMDAwNDYnLFxyXG4gICAgICAgICAgJ0Vycm9yJyxcclxuICAgICAgICAgIHZhbGlkYXRvci5tZXNzYWdlXHJcbiAgICAgICAgKTtcclxuICAgICAgICByZXR1cm47XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIGlmICh0aGlzLmJhY2sgIT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgIGlmICh0aGlzLmJhY2suZGlzYWJsZWQgfHwgdGhpcy5iYWNrLnJlYWRvbmx5KSB7XHJcbiAgICAgICAgaWYgKHRoaXMuYmFja0lzRGlzYWJsZSAhPSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgIHRoaXMuYmFja0lzRGlzYWJsZS5mb2N1cygpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLmJhY2suZm9jdXMoKTtcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgaWYgKHRoaXMuYmFja0lzRGlzYWJsZSAhPSB1bmRlZmluZWQpIHtcclxuICAgICAgICB0aGlzLmJhY2tJc0Rpc2FibGUuZm9jdXMoKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLm9uQmFjay5lbWl0KCk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIGZvY3VzT3V0KHZhbHVlOiBhbnkpIHtcclxuICAgIHRoaXMuZm9ybWF0RGF0ZSh2YWx1ZSk7XHJcbiAgfVxyXG5cclxuICBmb3JtYXREYXRlKHZhbHVlOiBhbnkpOiB2b2lkIHtcclxuICAgIGlmICh2YWx1ZSAmJiB2YWx1ZT8udHJpbSgpICE9PSAnJykge1xyXG4gICAgICBpZiAodGhpcy5fdGVtcFZhbHVlID09PSB2YWx1ZSkgcmV0dXJuO1xyXG5cclxuICAgICAgdGhpcy5uZ2JEYXRlcGlja2VyLmNsb3NlKCk7XHJcbiAgICAgIGlmICh2YWx1ZSBpbnN0YW5jZW9mIE5nYkRhdGUpIHtcclxuICAgICAgICBpZiAodmFsdWUgIT09IHRoaXMubmdiRGF0ZXRvU3RyaW5nKHZhbHVlKSkge1xyXG4gICAgICAgICAgdGhpcy5lbWl0VmFsdWUgPSB0aGlzLm5nYkRhdGV0b1N0cmluZyh2YWx1ZSk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHRoaXMuZW1pdFZhbHVlID0gdmFsdWU7XHJcbiAgICAgICAgfVxyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHZhbHVlID0gdmFsdWUucmVwbGFjZUFsbCgnLycsICcnKTtcclxuICAgICAgICBpZiAodGhpcy5ub0F1dG9Db21wbGV0ZU51bGwpIHtcclxuICAgICAgICAgIHRoaXMudmFsdWUgPSB0aGlzLnN0ckRhdGVUb05nYkRhdGUoXHJcbiAgICAgICAgICAgIERhdGVVdGlsLmRhdGVBdXRvQ29tcGxldGUodmFsdWUpXHJcbiAgICAgICAgICApO1xyXG4gICAgICAgICAgdGhpcy5lbWl0VmFsdWUgPSBEYXRlVXRpbC5kYXRlQXV0b0NvbXBsZXRlKHZhbHVlKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgaWYgKHZhbHVlICE9ICcnICYmIHZhbHVlICE9IG51bGwpIHtcclxuICAgICAgICAgICAgdGhpcy52YWx1ZSA9IHRoaXMuc3RyRGF0ZVRvTmdiRGF0ZShcclxuICAgICAgICAgICAgICBEYXRlVXRpbC5kYXRlQXV0b0NvbXBsZXRlKHZhbHVlKVxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgICAgICB0aGlzLmVtaXRWYWx1ZSA9IERhdGVVdGlsLmRhdGVBdXRvQ29tcGxldGUodmFsdWUpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG5cclxuICAgICAgdGhpcy5vblRvdWNoKCk7XHJcbiAgICAgIHRoaXMub25DaGFuZ2UodGhpcy5lbWl0VmFsdWUpO1xyXG5cclxuICAgICAgaWYgKHR5cGVvZiB0aGlzLmVtaXRWYWx1ZSA9PT0gJ3N0cmluZycpIHRoaXMuX3RlbXBWYWx1ZSA9IHRoaXMuZW1pdFZhbHVlO1xyXG4gICAgfVxyXG4gIH1cclxufVxyXG4iLCI8bGFiZWwgKm5nSWY9XCJsYWJlbCAhPSBudWxsICYmIGxhYmVsICE9ICcnICYmIHNob3dMYWJlbFwiIGNsYXNzPVwiZC1mbGV4IHN1bWF4LWxhYmVsIG1iLTAgcC0wXCJcclxuICA+PHNwYW4gW3RpdGxlXT1cImxhYmVsXCIgc3R5bGU9XCJ3aGl0ZS1zcGFjZTogbm93cmFwOyBvdmVyZmxvdzogaGlkZGVuOyB0ZXh0LW92ZXJmbG93OiBlbGxpcHNpc1wiPnt7IGxhYmVsIH19PC9zcGFuPlxyXG4gIDxzcGFuICpuZ0lmPVwicmVxdWlyZWRcIiBjbGFzcz1cIm1zLTFcIiBbY2xhc3MudGV4dC1kYW5nZXJdPVwiY29udHJvbHM/LmVycm9ycyAhPSBudWxsXCI+ICo8L3NwYW4+XHJcbiAgPHNwYW4gKm5nSWY9XCJsYWJlbEluZm9cIj5cclxuICAgIDxpIGNsYXNzPVwiZmEgZmEtZXhjbGFtYXRpb24tY2lyY2xlIHRleHQtaW5mbyBtcy0yXCIgW21hdFRvb2x0aXBdPVwidGV4dExhYmVsSW5mb1wiIG1hdFRvb2x0aXBDbGFzcz1cImJnLWluZm9cIj48L2k+XHJcbiAgPC9zcGFuPlxyXG48L2xhYmVsPlxyXG48ZGl2XHJcbiAgW2NsYXNzLmlucHV0LWljb25dPVwiY29udHJvbHM/LmVycm9ycyAhPSBudWxsICYmIChjb250cm9scz8uZGlydHkgfHwgY29udHJvbHM/LnRvdWNoZWQpICYmIHN1Ym1pdHRlZFwiXHJcbiAgW2NsYXNzLnJpZ2h0XT1cImNvbnRyb2xzPy5lcnJvcnMgIT0gbnVsbCAmJiAoY29udHJvbHM/LmRpcnR5IHx8IGNvbnRyb2xzPy50b3VjaGVkKSAmJiBzdWJtaXR0ZWRcIj5cclxuICA8IS0tIHRvb2x0aXAtbWVzc2FnZSBlcyBlbCBpY29ubyBkZSBlcnJvciAtLT5cclxuXHJcbiAgPGRpdiBjbGFzcz1cImQtZmxleCBwLTAgZ3JvdXAtaW5wdXQtYnV0dG9uIHBvc2l0aW9uLXJlbGF0aXZlXCI+XHJcbiAgICA8dG9vbHRpcC1tZXNzYWdlXHJcbiAgICAgIFtsYWJlbF09XCJsYWJlbFwiXHJcbiAgICAgIFtjb250cm9sc109XCJjb250cm9sc1wiXHJcbiAgICAgIFt2YWxpZGF0b3JNZXNzYWdlXT1cInZhbGlkYXRvck1lc3NhZ2VcIlxyXG4gICAgICBbc3VibWl0dGVkXT1cInN1Ym1pdHRlZFwiXHJcbiAgICAgIFt0b29sdGlwTWVzc2FnZV09XCJ0b29sdGlwTWVzc2FnZVwiPjwvdG9vbHRpcC1tZXNzYWdlPlxyXG4gICAgPGlucHV0XHJcbiAgICAgIHR5cGU9XCJ0ZXh0XCJcclxuICAgICAgW2F0dHIuYXV0b2NvbXBsZXRlXT1cImF1dG9jb21wbGV0ZVwiXHJcbiAgICAgIFtjbGFzcy5pcy1pbnZhbGlkXT1cImNvbnRyb2xzPy5lcnJvcnMgIT0gbnVsbCAmJiAoY29udHJvbHM/LmRpcnR5IHx8IGNvbnRyb2xzPy50b3VjaGVkKSAmJiBzdWJtaXR0ZWRcIlxyXG4gICAgICBbZGlzYWJsZWRdPVwiZGlzYWJsZWRcIlxyXG4gICAgICBbcmVhZG9ubHldPVwicmVhZG9ubHlcIlxyXG4gICAgICAoa2V5dXAuZW50ZXIpPVwib25LZXlVcEVudGVyKClcIlxyXG4gICAgICAoa2V5dXAuQXJyb3dVcCk9XCJhcnJvd1VwS2V5VXAoKVwiXHJcbiAgICAgIChrZXlwcmVzcyk9XCJoYW5kbGVLZXlQcmVzcygkZXZlbnQpXCJcclxuICAgICAgKGlucHV0KT1cIm9uSW5wdXQoJGFueSgkZXZlbnQudGFyZ2V0KS52YWx1ZSlcIlxyXG4gICAgICAoZGF0ZVNlbGVjdCk9XCJvbklucHV0KCRldmVudClcIlxyXG4gICAgICAoZm9jdXMpPVwib25Gb2N1cygkYW55KCRldmVudC50YXJnZXQpLnZhbHVlKVwiXHJcbiAgICAgIChmb2N1c291dCk9XCJmb2N1c091dCgkYW55KCRldmVudC50YXJnZXQpLnZhbHVlKVwiXHJcbiAgICAgIChibHVyKT1cIm9uQmx1cigpXCJcclxuICAgICAgKHBhc3RlKT1cImhhbmRsZVBhc3RlKCRldmVudClcIlxyXG4gICAgICBjbGFzcz1cImZvcm0tY29udHJvbCBmb3JtLWNvbnRyb2wtc20gcm91bmRlZC1sZWZ0IHVzZS1pbnB1dFwiXHJcbiAgICAgIGNvbnRhaW5lcj1cImJvZHlcIlxyXG4gICAgICBwbGFjZWhvbGRlcj1cImRkL21tL3l5eXlcIlxyXG4gICAgICBbbWluRGF0ZV09XCJ7IHllYXI6IDE5NjAsIG1vbnRoOiAxLCBkYXk6IDEgfVwiXHJcbiAgICAgIFttYXhEYXRlXT1cIm1heERhdGVcIlxyXG4gICAgICBuYW1lPVwiZmVjaGFcIlxyXG4gICAgICBuZ2JEYXRlcGlja2VyXHJcbiAgICAgICNmZWNoYT1cIm5nYkRhdGVwaWNrZXJcIlxyXG4gICAgICBbKG5nTW9kZWwpXT1cInZhbHVlXCIgLz5cclxuICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIFtkaXNhYmxlZF09XCJkaXNhYmxlZCB8fCByZWFkb25seVwiIGNsYXNzPVwiYnRuIGJ0bi1pbmZvIHAtMCByb3VuZGVkLTAgdXNlLWJ1dHRvblwiIChjbGljayk9XCJmZWNoYS50b2dnbGUoKVwiPlxyXG4gICAgICA8IS0tIDxtYXQtaWNvbiBjbGFzcz1cInRleHQtd2hpdGUgcHQtMVwiIHN0eWxlPVwiZm9udC1zaXplOiAxOHB4O1wiIFttYXRUb29sdGlwXT1cIidDYWxlbmRhcmlvJ1wiIG1hdFRvb2x0aXBDbGFzcz1cImJnLWluZm9cIj5jYWxlbmRhcl90b2RheTwvbWF0LWljb24+IC0tPlxyXG4gICAgICA8aSBjbGFzcz1cImZhIGZhLWNhbGVuZGFyIHRleHQtd2hpdGUgcHgtMVwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPjwvaT5cclxuICAgIDwvYnV0dG9uPlxyXG4gIDwvZGl2PlxyXG48L2Rpdj5cclxuPCEtLSBlcnJvci1tZXNzYWdlIGVzIGVsIG1hbnNhamUgcXVlIGFwYXJlY2UgYWJham8gZGVsIGNvbXBvbmVudGUgLS0+XHJcbjxlcnJvci1tZXNzYWdlXHJcbiAgW2xhYmVsXT1cImxhYmVsXCJcclxuICBbY29udHJvbHNdPVwiY29udHJvbHNcIlxyXG4gIFt2YWxpZGF0b3JNZXNzYWdlXT1cInZhbGlkYXRvck1lc3NhZ2VcIlxyXG4gIFtzdWJtaXR0ZWRdPVwic3VibWl0dGVkXCJcclxuICBbdG9vbHRpcE1lc3NhZ2VdPVwidG9vbHRpcE1lc3NhZ2VcIj48L2Vycm9yLW1lc3NhZ2U+XHJcbiJdfQ==
|
|
@@ -280,7 +280,7 @@ export class DateTimePickerComponent {
|
|
|
280
280
|
I18n,
|
|
281
281
|
{ provide: NgbDatepickerI18n, useClass: CustomDatepickerI18n },
|
|
282
282
|
{ provide: NgbDateParserFormatter, useClass: CustomDatepickerFormat },
|
|
283
|
-
], viewQueries: [{ propertyName: "ngbDatepicker", first: true, predicate: ["d"], descendants: true }, { propertyName: "timePicker", first: true, predicate: ["tp"], descendants: true }, { propertyName: "btnOpen", first: true, predicate: ["btnOpen"], descendants: true }, { propertyName: "btnClean", first: true, predicate: ["btnClean"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<label
|
|
283
|
+
], viewQueries: [{ propertyName: "ngbDatepicker", first: true, predicate: ["d"], descendants: true }, { propertyName: "timePicker", first: true, predicate: ["tp"], descendants: true }, { propertyName: "btnOpen", first: true, predicate: ["btnOpen"], descendants: true }, { propertyName: "btnClean", first: true, predicate: ["btnClean"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<label *ngIf=\"label != null && label != '' && showLabel\" class=\"d-flex sumax-label mb-0 p-0\"\r\n ><span [title]=\"label\" style=\"white-space: nowrap; overflow: hidden; text-overflow: ellipsis\">{{ label }}</span>\r\n <span *ngIf=\"required\" class=\"ms-1\" [class.text-danger]=\"controls?.errors != null\"> *</span>\r\n <span *ngIf=\"labelInfo\">\r\n <i class=\"fa fa-exclamation-circle text-info ms-2\" [matTooltip]=\"textLabelInfo\" matTooltipClass=\"bg-info\"></i>\r\n </span>\r\n</label>\r\n<div\r\n [class.input-icon]=\"controls?.errors != null && (controls?.dirty || controls?.touched) && submitted\"\r\n class=\"position-relative\"\r\n [class.right]=\"controls?.errors != null && (controls?.dirty || controls?.touched) && submitted\">\r\n <!-- tooltip-message es el icono de error -->\r\n\r\n <tooltip-message\r\n [label]=\"label\"\r\n [controls]=\"controls\"\r\n [validatorMessage]=\"validatorMessage\"\r\n [tooltipMessage]=\"tooltipMessage\"\r\n [submitted]=\"submitted\"></tooltip-message>\r\n <div class=\"input-group mr-2\">\r\n <input name=\"input\" type=\"text\" class=\"form-control form-control-sm\" [disabled]=\"true\" [ngModel]=\"input | date: inputDatetimeFormat\" />\r\n <input\r\n class=\"form-control form-control-sm\"\r\n container=\"body\"\r\n [readonly]=\"true\"\r\n placeholder=\"dd/mm/yyyy\"\r\n name=\"dp\"\r\n [(ngModel)]=\"date\"\r\n (ngModelChange)=\"onModelDateChange($event)\"\r\n [autoClose]=\"'outside'\"\r\n ngbDatepicker\r\n [footerTemplate]=\"footerTemplate\"\r\n [minDate]=\"{ year: 1960, month: 1, day: 1 }\"\r\n #d=\"ngbDatepicker\" />\r\n <!-- (dateSelect)=\"onDateSelect($event)\" -->\r\n <div class=\"input-group-append\">\r\n <button\r\n #btnOpen\r\n class=\"btn btn-info p-0 rounded-0 h-100\"\r\n [disabled]=\"isDisabled || readonly\"\r\n (click)=\"open(d)\"\r\n (keyup.ArrowLeft)=\"goBack()\"\r\n (keyup.ArrowRight)=\"btnClean.focus()\"\r\n type=\"button\">\r\n <!-- <mat-icon class=\"text-white pt-1\" style=\"font-size: 18px;\" [matTooltip]=\"'Calendario'\" matTooltipClass=\"bg-info\">calendar_today</mat-icon> -->\r\n <i aria-hidden=\"true\" class=\"fa fa-calendar text-light px-1\"></i>\r\n </button>\r\n <button\r\n #btnClean\r\n class=\"btn btn-danger p-0 rounded-0 limpiar h-100\"\r\n [disabled]=\"isDisabled || readonly\"\r\n (click)=\"limpiar()\"\r\n (keyup.ArrowLeft)=\"btnOpen.focus()\"\r\n (keyup.ArrowRight)=\"goNext()\"\r\n type=\"button\">\r\n <!-- <mat-icon class=\"text-white pt-1\" style=\"font-size: 18px;\" [matTooltip]=\"'Limpiar'\" matTooltipClass=\"bg-danger\">close</mat-icon> -->\r\n <i aria-hidden=\"true\" class=\"fa fa-times px-1 text-light\"></i>\r\n </button>\r\n </div>\r\n </div>\r\n</div>\r\n\r\n<ng-template #footerTemplate>\r\n <hr class=\"my-0\" />\r\n <ngb-timepicker #tp [(ngModel)]=\"time\" name=\"timepicker\" (ngModelChange)=\"onModelDateChange($event)\" (focusout)=\"focusOut($event)\">\r\n </ngb-timepicker>\r\n</ng-template>\r\n<!-- error-message es el mansaje que aparece abajo del componente -->\r\n<error-message\r\n [label]=\"label\"\r\n [controls]=\"controls\"\r\n [validatorMessage]=\"validatorMessage\"\r\n [tooltipMessage]=\"tooltipMessage\"\r\n [submitted]=\"submitted\"></error-message>\r\n", styles: [".sumax-label{color:#646c9a!important}button[disabled]{pointer-events:none}.input-group i{color:#212529}.input-group input:nth-child(1){position:absolute;width:100%}.input-group input:nth-child(2){position:relative;visibility:hidden}.input-group .input-group-append{background-color:#fff;z-index:1;border-left:1px solid #e2e5ec}.form-control[readonly]{background-color:#f7f8fa;opacity:1}.input-icon tooltip-message{color:#ccc;position:absolute;z-index:3;font-size:16px;text-align:center;right:55px;top:50%;transform:translateY(-50%)}.input-icon.right>.form-control{padding-right:33px;padding-left:12px}.was-validated .form-control:invalid:focus,.form-control.is-invalid:focus{border-color:#dc3545;box-shadow:inset 0 1px 1px #00000013,0 0 0 3px #fde6e8!important}.was-validated .form-control:invalid,.form-control.is-invalid{background-image:none;box-shadow:inset 0 1px 1px #00000013,0 0 0 3px #fde6e8!important}.form-control:focus,.form-control:active{border-color:#007eff;box-shadow:inset 0 1px 1px #00000013,0 0 0 3px #007eff1a!important}\n"], dependencies: [{ kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i4.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: i4.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i4.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i5.errorMessageComponent, selector: "error-message", inputs: ["tooltipMessage", "validatorMessage", "controls", "label", "submitted"] }, { kind: "component", type: i6.tooltipMessageComponent, selector: "tooltip-message", inputs: ["tooltipMessage", "validatorMessage", "controls", "label", "submitted"] }, { kind: "directive", type: i1.NgbInputDatepicker, selector: "input[ngbDatepicker]", inputs: ["autoClose", "contentTemplate", "datepickerClass", "dayTemplate", "dayTemplateData", "displayMonths", "firstDayOfWeek", "footerTemplate", "markDisabled", "minDate", "maxDate", "navigation", "outsideDays", "placement", "popperOptions", "restoreFocus", "showWeekNumbers", "startDate", "container", "positionTarget", "weekdays", "disabled"], outputs: ["dateSelect", "navigate", "closed"], exportAs: ["ngbDatepicker"] }, { kind: "directive", type: i7.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "component", type: i1.NgbTimepicker, selector: "ngb-timepicker", inputs: ["meridian", "spinners", "seconds", "hourStep", "minuteStep", "secondStep", "readonlyInputs", "size"], exportAs: ["ngbTimepicker"] }, { kind: "pipe", type: i2.DatePipe, name: "date" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
284
284
|
}
|
|
285
285
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: DateTimePickerComponent, decorators: [{
|
|
286
286
|
type: Component,
|
|
@@ -298,7 +298,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.11", ngImpo
|
|
|
298
298
|
I18n,
|
|
299
299
|
{ provide: NgbDatepickerI18n, useClass: CustomDatepickerI18n },
|
|
300
300
|
{ provide: NgbDateParserFormatter, useClass: CustomDatepickerFormat },
|
|
301
|
-
], template: "<label
|
|
301
|
+
], template: "<label *ngIf=\"label != null && label != '' && showLabel\" class=\"d-flex sumax-label mb-0 p-0\"\r\n ><span [title]=\"label\" style=\"white-space: nowrap; overflow: hidden; text-overflow: ellipsis\">{{ label }}</span>\r\n <span *ngIf=\"required\" class=\"ms-1\" [class.text-danger]=\"controls?.errors != null\"> *</span>\r\n <span *ngIf=\"labelInfo\">\r\n <i class=\"fa fa-exclamation-circle text-info ms-2\" [matTooltip]=\"textLabelInfo\" matTooltipClass=\"bg-info\"></i>\r\n </span>\r\n</label>\r\n<div\r\n [class.input-icon]=\"controls?.errors != null && (controls?.dirty || controls?.touched) && submitted\"\r\n class=\"position-relative\"\r\n [class.right]=\"controls?.errors != null && (controls?.dirty || controls?.touched) && submitted\">\r\n <!-- tooltip-message es el icono de error -->\r\n\r\n <tooltip-message\r\n [label]=\"label\"\r\n [controls]=\"controls\"\r\n [validatorMessage]=\"validatorMessage\"\r\n [tooltipMessage]=\"tooltipMessage\"\r\n [submitted]=\"submitted\"></tooltip-message>\r\n <div class=\"input-group mr-2\">\r\n <input name=\"input\" type=\"text\" class=\"form-control form-control-sm\" [disabled]=\"true\" [ngModel]=\"input | date: inputDatetimeFormat\" />\r\n <input\r\n class=\"form-control form-control-sm\"\r\n container=\"body\"\r\n [readonly]=\"true\"\r\n placeholder=\"dd/mm/yyyy\"\r\n name=\"dp\"\r\n [(ngModel)]=\"date\"\r\n (ngModelChange)=\"onModelDateChange($event)\"\r\n [autoClose]=\"'outside'\"\r\n ngbDatepicker\r\n [footerTemplate]=\"footerTemplate\"\r\n [minDate]=\"{ year: 1960, month: 1, day: 1 }\"\r\n #d=\"ngbDatepicker\" />\r\n <!-- (dateSelect)=\"onDateSelect($event)\" -->\r\n <div class=\"input-group-append\">\r\n <button\r\n #btnOpen\r\n class=\"btn btn-info p-0 rounded-0 h-100\"\r\n [disabled]=\"isDisabled || readonly\"\r\n (click)=\"open(d)\"\r\n (keyup.ArrowLeft)=\"goBack()\"\r\n (keyup.ArrowRight)=\"btnClean.focus()\"\r\n type=\"button\">\r\n <!-- <mat-icon class=\"text-white pt-1\" style=\"font-size: 18px;\" [matTooltip]=\"'Calendario'\" matTooltipClass=\"bg-info\">calendar_today</mat-icon> -->\r\n <i aria-hidden=\"true\" class=\"fa fa-calendar text-light px-1\"></i>\r\n </button>\r\n <button\r\n #btnClean\r\n class=\"btn btn-danger p-0 rounded-0 limpiar h-100\"\r\n [disabled]=\"isDisabled || readonly\"\r\n (click)=\"limpiar()\"\r\n (keyup.ArrowLeft)=\"btnOpen.focus()\"\r\n (keyup.ArrowRight)=\"goNext()\"\r\n type=\"button\">\r\n <!-- <mat-icon class=\"text-white pt-1\" style=\"font-size: 18px;\" [matTooltip]=\"'Limpiar'\" matTooltipClass=\"bg-danger\">close</mat-icon> -->\r\n <i aria-hidden=\"true\" class=\"fa fa-times px-1 text-light\"></i>\r\n </button>\r\n </div>\r\n </div>\r\n</div>\r\n\r\n<ng-template #footerTemplate>\r\n <hr class=\"my-0\" />\r\n <ngb-timepicker #tp [(ngModel)]=\"time\" name=\"timepicker\" (ngModelChange)=\"onModelDateChange($event)\" (focusout)=\"focusOut($event)\">\r\n </ngb-timepicker>\r\n</ng-template>\r\n<!-- error-message es el mansaje que aparece abajo del componente -->\r\n<error-message\r\n [label]=\"label\"\r\n [controls]=\"controls\"\r\n [validatorMessage]=\"validatorMessage\"\r\n [tooltipMessage]=\"tooltipMessage\"\r\n [submitted]=\"submitted\"></error-message>\r\n", styles: [".sumax-label{color:#646c9a!important}button[disabled]{pointer-events:none}.input-group i{color:#212529}.input-group input:nth-child(1){position:absolute;width:100%}.input-group input:nth-child(2){position:relative;visibility:hidden}.input-group .input-group-append{background-color:#fff;z-index:1;border-left:1px solid #e2e5ec}.form-control[readonly]{background-color:#f7f8fa;opacity:1}.input-icon tooltip-message{color:#ccc;position:absolute;z-index:3;font-size:16px;text-align:center;right:55px;top:50%;transform:translateY(-50%)}.input-icon.right>.form-control{padding-right:33px;padding-left:12px}.was-validated .form-control:invalid:focus,.form-control.is-invalid:focus{border-color:#dc3545;box-shadow:inset 0 1px 1px #00000013,0 0 0 3px #fde6e8!important}.was-validated .form-control:invalid,.form-control.is-invalid{background-image:none;box-shadow:inset 0 1px 1px #00000013,0 0 0 3px #fde6e8!important}.form-control:focus,.form-control:active{border-color:#007eff;box-shadow:inset 0 1px 1px #00000013,0 0 0 3px #007eff1a!important}\n"] }]
|
|
302
302
|
}], ctorParameters: () => [{ type: i1.NgbCalendar }, { type: i2.DatePipe }, { type: i3.DateTimePickerService }, { type: i0.Renderer2 }], propDecorators: { inputDatetimeFormat: [{
|
|
303
303
|
type: Input
|
|
304
304
|
}], label: [{
|
|
@@ -348,4 +348,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.11", ngImpo
|
|
|
348
348
|
type: ViewChild,
|
|
349
349
|
args: ['btnClean']
|
|
350
350
|
}] } });
|
|
351
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0ZS10aW1lLXBpY2tlci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtc3VtYXgtZXJwLWNvbXBvbmVudC9zcmMvbGliL2RhdGUtdGltZS1waWNrZXIvZGF0ZS10aW1lLXBpY2tlci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtc3VtYXgtZXJwLWNvbXBvbmVudC9zcmMvbGliL2RhdGUtdGltZS1waWNrZXIvZGF0ZS10aW1lLXBpY2tlci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQ0wsdUJBQXVCLEVBQ3ZCLFNBQVMsRUFFVCxZQUFZLEVBQ1osS0FBSyxFQUdMLE1BQU0sRUFHTixTQUFTLEVBQ1QsVUFBVSxHQUNYLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFHTCxhQUFhLEVBQ2IsaUJBQWlCLEdBRWxCLE1BQU0sZ0JBQWdCLENBQUM7QUFDeEIsT0FBTyxFQUVMLHNCQUFzQixFQUV0QixpQkFBaUIsRUFJbEIsTUFBTSw0QkFBNEIsQ0FBQztBQUVwQyxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsSUFBSSxFQUFFLE1BQU0scUNBQXFDLENBQUM7QUFDakYsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sdUNBQXVDLENBQUM7QUFDL0UsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHdCQUF3QixDQUFDOzs7Ozs7Ozs7QUF1QnZELE1BQU0sT0FBTyx1QkFBdUI7SUF5SWxDLFlBQ1UsUUFBcUIsRUFDckIsUUFBa0IsRUFDbEIscUJBQTRDLEVBQzVDLE9BQWtCO1FBSGxCLGFBQVEsR0FBUixRQUFRLENBQWE7UUFDckIsYUFBUSxHQUFSLFFBQVEsQ0FBVTtRQUNsQiwwQkFBcUIsR0FBckIscUJBQXFCLENBQXVCO1FBQzVDLFlBQU8sR0FBUCxPQUFPLENBQVc7UUExSTVCOzs7OztVQUtFO1FBQ08sd0JBQW1C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c0JBQWYsTUFBTTtnQkFFUyxhQUFhO3NCQUE1QixTQUFTO3VCQUFDLEdBQUc7Z0JBQ0csVUFBVTtzQkFBMUIsU0FBUzt1QkFBQyxJQUFJO2dCQUNPLE9BQU87c0JBQTVCLFNBQVM7dUJBQUMsU0FBUztnQkFDRyxRQUFRO3NCQUE5QixTQUFTO3VCQUFDLFVBQVUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBEYXRlUGlwZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XHJcbmltcG9ydCB7XHJcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXHJcbiAgQ29tcG9uZW50LFxyXG4gIEVsZW1lbnRSZWYsXHJcbiAgRXZlbnRFbWl0dGVyLFxyXG4gIElucHV0LFxyXG4gIE9uQ2hhbmdlcyxcclxuICBPbkluaXQsXHJcbiAgT3V0cHV0LFxyXG4gIFJlbmRlcmVyMixcclxuICBTaW1wbGVDaGFuZ2VzLFxyXG4gIFZpZXdDaGlsZCxcclxuICBmb3J3YXJkUmVmLFxyXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQge1xyXG4gIEFic3RyYWN0Q29udHJvbCxcclxuICBDb250cm9sVmFsdWVBY2Nlc3NvcixcclxuICBOR19WQUxJREFUT1JTLFxyXG4gIE5HX1ZBTFVFX0FDQ0VTU09SLFxyXG4gIFZhbGlkYXRpb25FcnJvcnMsXHJcbn0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5pbXBvcnQge1xyXG4gIE5nYkNhbGVuZGFyLFxyXG4gIE5nYkRhdGVQYXJzZXJGb3JtYXR0ZXIsXHJcbiAgTmdiRGF0ZVN0cnVjdCxcclxuICBOZ2JEYXRlcGlja2VySTE4bixcclxuICBOZ2JJbnB1dERhdGVwaWNrZXIsXHJcbiAgTmdiVGltZVN0cnVjdCxcclxuICBOZ2JUaW1lcGlja2VyXHJcbn0gZnJvbSAnQG5nLWJvb3RzdHJhcC9uZy1ib290c3RyYXAnO1xyXG5pbXBvcnQgeyBEYXRlVGltZVBpY2tlclNlcnZpY2UgfSBmcm9tICcuL2RhdGUtdGltZS1waWNrZXIuc2VydmljZSc7XHJcbmltcG9ydCB7IEN1c3RvbURhdGVwaWNrZXJJMThuLCBJMThuIH0gZnJvbSAnLi4vZGF0ZS1waWNrZXIvQ3VzdG9tRGF0ZVBpY2tlckkxOG4nO1xyXG5pbXBvcnQgeyBDdXN0b21EYXRlcGlja2VyRm9ybWF0IH0gZnJvbSAnLi4vZGF0ZS1waWNrZXIvQ3VzdG9tRGF0ZVBpY2tlckZvcm1hdCc7XHJcbmltcG9ydCB7IERhdGVUaW1lTW9kZWwgfSBmcm9tICcuLi91dGlscy9EYXRlVGltZU1vZGVsJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnZGF0ZS10aW1lLXBpY2tlcicsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL2RhdGUtdGltZS1waWNrZXIuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL2RhdGUtdGltZS1waWNrZXIuY29tcG9uZW50LnNjc3MnXSxcclxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcclxuICBwcm92aWRlcnM6IFtcclxuICAgIHtcclxuICAgICAgcHJvdmlkZTogTkdfVkFMVUVfQUNDRVNTT1IsXHJcbiAgICAgIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IERhdGVUaW1lUGlja2VyQ29tcG9uZW50KSxcclxuICAgICAgbXVsdGk6IHRydWUsXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICBwcm92aWRlOiBOR19WQUxJREFUT1JTLFxyXG4gICAgICB1c2VFeGlzdGluZzogZm9yd2FyZFJlZigoKSA9PiBEYXRlVGltZVBpY2tlckNvbXBvbmVudCksXHJcbiAgICAgIG11bHRpOiB0cnVlLFxyXG4gICAgfSxcclxuICAgIEkxOG4sXHJcbiAgICB7IHByb3ZpZGU6IE5nYkRhdGVwaWNrZXJJMThuLCB1c2VDbGFzczogQ3VzdG9tRGF0ZXBpY2tlckkxOG4gfSxcclxuICAgIHsgcHJvdmlkZTogTmdiRGF0ZVBhcnNlckZvcm1hdHRlciwgdXNlQ2xhc3M6IEN1c3RvbURhdGVwaWNrZXJGb3JtYXQgfSxcclxuICBdLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgRGF0ZVRpbWVQaWNrZXJDb21wb25lbnRcclxuICBpbXBsZW1lbnRzIE9uSW5pdCwgT25DaGFuZ2VzLCBDb250cm9sVmFsdWVBY2Nlc3NvclxyXG57XHJcbiAgLyoqXHJcbiAgKiBAZGVzY3JpcHRpb24gRm9ybWF0byBkZSBsYSBmZWNoYTpcclxuICAqICdkZC9NTS95eXl5IEhIOm1tJyAtICdkZC9NTS95eXl5IEhIOm1tOnNzJyAtICdNL2QveXl5eSBIOm1tOnNzJ1xyXG4gICogQGRlZmF1bHQgJ2RkL01NL3l5eXkgSEg6bW0nXHJcbiAgKiBAdHlwZSB7c3RyaW5nfVxyXG4gICovXHJcbiAgQElucHV0KCkgaW5wdXREYXRldGltZUZvcm1hdDogc3RyaW5nID0gJ2RkL01NL3l5eXkgSEg6bW0nO1xyXG4gIFxyXG4gIC8qKlxyXG4gICogQGRlc2NyaXB0aW9uIFRleHRvIGEgbW9zdHJhciBjb21vIGV0aXF1ZXRhIGRlbCBjYW1wb1xyXG4gICogQGRlZmF1bHQgJydcclxuICAqIEB0eXBlIHN0cmluZ1xyXG4gICovXHJcbiAgQElucHV0KCkgbGFiZWw6IHN0cmluZyA9ICcnO1xyXG4gIFxyXG4gIC8qKlxyXG4gICogQGRlc2NyaXB0aW9uIENvbnRyb2xhIGxhIHZpc3VhbGl6YWNpw7NuIGRlbCB0ZXh0byBzdXBlcmlvciAobGFiZWwpXHJcbiAgKiBAZGVmYXVsdCB0cnVlXHJcbiAgKiBAdHlwZSBib29sZWFuXHJcbiAgKi9cclxuICBASW5wdXQoKSBzaG93TGFiZWw6IGJvb2xlYW4gPSB0cnVlO1xyXG4gIFxyXG4gIC8qKlxyXG4gICogQGRlc2NyaXB0aW9uIEVzdGFibGVjZSBlbCBjb250cm9sIGNvbW8gc29sbyBsZWN0dXJhXHJcbiAgKiBAZGVmYXVsdCBmYWxzZVxyXG4gICogQHR5cGUgYm9vbGVhblxyXG4gICovXHJcbiAgQElucHV0KCkgcmVhZG9ubHk6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBcclxuICAvKipcclxuICAqIEBkZXNjcmlwdGlvbiBJbmRpY2Egc2kgZWwgY2FtcG8gZXMgb2JsaWdhdG9yaW9cclxuICAqIEBkZWZhdWx0IGZhbHNlXHJcbiAgKiBAdHlwZSBib29sZWFuXHJcbiAgKi9cclxuICBASW5wdXQoKSByZXF1aXJlZDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIFxyXG4gIC8qKlxyXG4gICogQGRlc2NyaXB0aW9uIE11ZXN0cmEgbWVuc2FqZXMgZGUgdmFsaWRhY2nDs25cclxuICAqIEBkZWZhdWx0IGZhbHNlXHJcbiAgKiBAdHlwZSBib29sZWFuXHJcbiAgKi9cclxuICBASW5wdXQoKSB2YWxpZGF0b3JNZXNzYWdlOiBib29sZWFuID0gZmFsc2U7XHJcbiAgXHJcbiAgLyoqXHJcbiAgKiBAZGVzY3JpcHRpb24gTXVlc3RyYSBtZW5zYWplcyBkZSBheXVkYSBjb21vIHRvb2x0aXBzXHJcbiAgKiBAZGVmYXVsdCB0cnVlXHJcbiAgKiBAdHlwZSBib29sZWFuXHJcbiAgKi9cclxuICBASW5wdXQoKSB0b29sdGlwTWVzc2FnZTogYm9vbGVhbiA9IHRydWU7XHJcbiAgXHJcbiAgLyoqXHJcbiAgKiBAZGVzY3JpcHRpb24gSW5kaWNhIHNpIGVsIGZvcm11bGFyaW8gaGEgc2lkbyBlbnZpYWRvIHBhcmEgbW9zdHJhciB2YWxpZGFjaW9uZXNcclxuICAqIEBkZWZhdWx0IHRydWVcclxuICAqIEB0eXBlIGJvb2xlYW5cclxuICAqL1xyXG4gIEBJbnB1dCgpIHN1Ym1pdHRlZDogYm9vbGVhbiA9IHRydWU7XHJcbiAgXHJcbiAgLyoqXHJcbiAgKiBAZGVzY3JpcHRpb24gUmVmZXJlbmNpYSBhbCBzaWd1aWVudGUgY29udHJvbCBwYXJhIG5hdmVnYWNpw7NuXHJcbiAgKiBAZGVmYXVsdCB1bmRlZmluZWRcclxuICAqIEB0eXBlIGFueVxyXG4gICovXHJcbiAgQElucHV0KCkgbmV4dDogYW55O1xyXG4gIFxyXG4gIC8qKlxyXG4gICogQGRlc2NyaXB0aW9uIFJlZmVyZW5jaWEgYWwgY29udHJvbCBhbHRlcm5hdGl2byBjdWFuZG8gZWwgc2lndWllbnRlIGVzdMOhIGRlc2hhYmlsaXRhZG9cclxuICAqIEBkZWZhdWx0IHVuZGVmaW5lZFxyXG4gICogQHR5cGUgYW55XHJcbiAgKi9cclxuICBASW5wdXQoKSBuZXh0SXNEaXNhYmxlOiBhbnk7XHJcbiAgXHJcbiAgLyoqXHJcbiAgKiBAZGVzY3JpcHRpb24gUmVmZXJlbmNpYSBhbCBjb250cm9sIGFudGVyaW9yIHBhcmEgbmF2ZWdhY2nDs25cclxuICAqIEBkZWZhdWx0IHVuZGVmaW5lZFxyXG4gICogQHR5cGUgYW55XHJcbiAgKi9cclxuICBASW5wdXQoKSBiYWNrOiBhbnk7XHJcbiAgXHJcbiAgLyoqXHJcbiAgKiBAZGVzY3JpcHRpb24gUmVmZXJlbmNpYSBhbCBjb250cm9sIGFsdGVybmF0aXZvIGN1YW5kbyBlbCBhbnRlcmlvciBlc3TDoSBkZXNoYWJpbGl0YWRvXHJcbiAgKiBAZGVmYXVsdCB1bmRlZmluZWRcclxuICAqIEB0eXBlIGFueVxyXG4gICovXHJcbiAgQElucHV0KCkgYmFja0lzRGlzYWJsZTogYW55O1xyXG4gIFxyXG4gIC8qKlxyXG4gICogQGRlc2NyaXB0aW9uIEhhYmlsaXRhIGluZm9ybWFjacOzbiBhZGljaW9uYWwgcGFyYSBsYSBldGlxdWV0YVxyXG4gICogQGRlZmF1bHQgZmFsc2VcclxuICAqIEB0eXBlIGJvb2xlYW5cclxuICAqL1xyXG4gIEBJbnB1dCgpIGxhYmVsSW5mbzogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIFxyXG4gIC8qKlxyXG4gICogQGRlc2NyaXB0aW9uIFRleHRvIGluZm9ybWF0aXZvIGFkaWNpb25hbCBwYXJhIGxhIGV0aXF1ZXRhXHJcbiAgKiBAZGVmYXVsdCAnJ1xyXG4gICogQHR5cGUgc3RyaW5nXHJcbiAgKi9cclxuICBASW5wdXQoKSB0ZXh0TGFiZWxJbmZvOiBzdHJpbmcgPSAnJztcclxuICBcclxuICAvKipcclxuICAqIEBkZXNjcmlwdGlvbiBBYnJlIGVsIHNlbGVjdG9yIGFsIHJlY2liaXIgZWwgZm9jb1xyXG4gICogQGRlZmF1bHQgZmFsc2VcclxuICAqIEB0eXBlIGJvb2xlYW5cclxuICAqL1xyXG4gIEBJbnB1dCgpIG9wZW5XaGVuRm9jdXM6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBcclxuICAvKipcclxuICAqIEBkZXNjcmlwdGlvbiBOYXZlZ2EgYWwgc2lndWllbnRlIGNvbnRyb2wgYWwgc2VsZWNjaW9uYXIgdW5hIGZlY2hhXHJcbiAgKiBAZGVmYXVsdCBmYWxzZVxyXG4gICogQHR5cGUgYm9vbGVhblxyXG4gICovXHJcbiAgQElucHV0KCkgZ29OZXh0V2hlblNlbGVjdDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIEBPdXRwdXQoKSBvbk5leHQ6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG4gIEBPdXRwdXQoKSBvbkJhY2s6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG5cclxuICBAVmlld0NoaWxkKCdkJykgbmdiRGF0ZXBpY2tlciE6IE5nYklucHV0RGF0ZXBpY2tlcjtcclxuICBAVmlld0NoaWxkKCd0cCcpIHRpbWVQaWNrZXIhOiBOZ2JUaW1lcGlja2VyO1xyXG4gIEBWaWV3Q2hpbGQoJ2J0bk9wZW4nKSBidG5PcGVuITogRWxlbWVudFJlZjtcclxuICBAVmlld0NoaWxkKCdidG5DbGVhbicpIGJ0bkNsZWFuITogRWxlbWVudFJlZjtcclxuXHJcbiAgY29udHJvbHM/OiBBYnN0cmFjdENvbnRyb2w7XHJcbiAgdG9kYXkgPSB0aGlzLmNhbGVuZGFyLmdldFRvZGF5KCk7XHJcbiAgZGF0ZTogTmdiRGF0ZVN0cnVjdCB8IGFueSA9IHRoaXMudG9kYXk7XHJcbiAgdGltZTogTmdiVGltZVN0cnVjdCA9IHtcclxuICAgIGhvdXI6IG5ldyBEYXRlKCkuZ2V0SG91cnMoKSxcclxuICAgIG1pbnV0ZTogbmV3IERhdGUoKS5nZXRNaW51dGVzKCksXHJcbiAgICBzZWNvbmQ6IG5ldyBEYXRlKCkuZ2V0U2Vjb25kcygpLFxyXG4gIH07XHJcbiAgaW5wdXQ6IGFueSA9IG5ldyBEYXRlVGltZU1vZGVsKE9iamVjdC5hc3NpZ24odGhpcy5kYXRlLCB0aGlzLnRpbWUpKTtcclxuICBpc0Rpc2FibGVkID0gZmFsc2U7XHJcblxyXG4gIF90ZW1wVmFsdWU6IHN0cmluZyB8IG51bGwgPSBudWxsO1xyXG4gIF9pbml0VmFsdWUgPSBmYWxzZTtcclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwcml2YXRlIGNhbGVuZGFyOiBOZ2JDYWxlbmRhcixcclxuICAgIHByaXZhdGUgZGF0ZVBpcGU6IERhdGVQaXBlLFxyXG4gICAgcHJpdmF0ZSBkYXRlVGltZVBpY2tlclNlcnZpY2U6IERhdGVUaW1lUGlja2VyU2VydmljZSxcclxuICAgIHByaXZhdGUgX3JlbmRlcjogUmVuZGVyZXIyXHJcbiAgKSB7XHJcbiAgICB0aGlzLmlucHV0RGF0ZXRpbWVGb3JtYXQgPVxyXG4gICAgICB0aGlzLmRhdGVUaW1lUGlja2VyU2VydmljZS5nZXRJbnB1dERhdGV0aW1lRm9ybWF0KCk7XHJcbiAgICB0aGlzLnNob3dMYWJlbCA9IHRoaXMuZGF0ZVRpbWVQaWNrZXJTZXJ2aWNlLmdldFNob3dMYWJlbCgpO1xyXG4gICAgdGhpcy5vcGVuV2hlbkZvY3VzID0gdGhpcy5kYXRlVGltZVBpY2tlclNlcnZpY2UuZ2V0T3BlbldoZW5Gb2N1cygpO1xyXG4gICAgdGhpcy5nb05leHRXaGVuU2VsZWN0ID0gdGhpcy5kYXRlVGltZVBpY2tlclNlcnZpY2UuZ2V0R29OZXh0V2hlblNlbGVjdCgpO1xyXG4gICAgdGhpcy52YWxpZGF0b3JNZXNzYWdlID0gdGhpcy5kYXRlVGltZVBpY2tlclNlcnZpY2UuZ2V0VmFsaWRhdG9yTWVzc2FnZSgpO1xyXG4gICAgdGhpcy50b29sdGlwTWVzc2FnZSA9IHRoaXMuZGF0ZVRpbWVQaWNrZXJTZXJ2aWNlLmdldFRvb2x0aXBNZXNzYWdlKCk7XHJcbiAgICB0aGlzLnN1Ym1pdHRlZCA9IHRoaXMuZGF0ZVRpbWVQaWNrZXJTZXJ2aWNlLmdldFN1Ym1pdHRlZCgpO1xyXG4gIH1cclxuXHJcbiAgb25DaGFuZ2UgPSAoXzogYW55KSA9PiB7fTtcclxuICBvblZhbGlkYXRpb25DaGFuZ2UgPSAoKSA9PiB7fTtcclxuICBvblRvdWNoID0gKCkgPT4ge307XHJcbiAgZm9jdXMgPSAoKSA9PiB7XHJcbiAgICB0aGlzLmJ0bk9wZW4ubmF0aXZlRWxlbWVudC5mb2N1cygpO1xyXG4gICAgaWYgKCF0aGlzLnJlYWRvbmx5ICYmIHRoaXMub3BlbldoZW5Gb2N1cykge1xyXG4gICAgICB0aGlzLm5nYkRhdGVwaWNrZXIub3BlbigpO1xyXG4gICAgfVxyXG4gIH07XHJcblxyXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcclxuICAgIGlmIChjaGFuZ2VzWydzdWJtaXR0ZWQnXSkge1xyXG4gICAgICBpZiAodGhpcy5jb250cm9scyAhPT0gdW5kZWZpbmVkICYmIGNoYW5nZXNbJ3N1Ym1pdHRlZCddLmN1cnJlbnRWYWx1ZSkge1xyXG4gICAgICAgIHRoaXMuY29udHJvbHMubWFya0FzRGlydHkoKTtcclxuICAgICAgICB0aGlzLmNvbnRyb2xzLm1hcmtBc1RvdWNoZWQoKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgbmdPbkluaXQoKSB7fVxyXG5cclxuICAvLyBvbkRhdGVTZWxlY3QoZXZ0OiBhbnkpIHtcclxuICAvL3RoaXMubmdiRGF0ZXBpY2tlci5jbG9zZSgpO1xyXG4gIC8vIGlmICh0aGlzLmdvTmV4dFdoZW5TZWxlY3QpIHtcclxuICAvLyBcdHRoaXMuZ29OZXh0KCk7XHJcbiAgLy8gfVxyXG4gIC8vY29uc29sZS5sb2coZXZ0KTtcclxuICAvLyB9XHJcblxyXG4gIGZvY3VzT3V0KGV2ZW50OiBhbnkpOiB2b2lkIHtcclxuICAgIGlmIChldmVudC50YXJnZXQuYXJpYUxhYmVsID09ICdNaW51dGVzJykge1xyXG4gICAgICB0aGlzLm5nYkRhdGVwaWNrZXIuY2xvc2UoKTtcclxuICAgICAgaWYgKHRoaXMuZ29OZXh0V2hlblNlbGVjdCkge1xyXG4gICAgICAgIHRoaXMuZ29OZXh0KCk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIG9uTW9kZWxEYXRlQ2hhbmdlKGV2dDogTmdiRGF0ZVN0cnVjdCB8IE5nYlRpbWVTdHJ1Y3QpOiB2b2lkIHtcclxuICAgIHRoaXMuaW5wdXQgPSBuZXcgRGF0ZVRpbWVNb2RlbChPYmplY3QuYXNzaWduKHRoaXMuZGF0ZSwgdGhpcy50aW1lKSk7XHJcbiAgICBjb25zdCBlbWl0VmFsdWUgPSB0aGlzLmRhdGVQaXBlLnRyYW5zZm9ybSh0aGlzLmlucHV0LCAneXl5eS1NTS1kZFRISDptbScpO1xyXG4gICAgdGhpcy5vblRvdWNoKCk7XHJcbiAgICB0aGlzLm9uQ2hhbmdlKGVtaXRWYWx1ZSk7XHJcbiAgfVxyXG5cclxuICBsaW1waWFyKCk6IHZvaWQge1xyXG4gICAgdGhpcy5kYXRlID0gbnVsbDtcclxuICAgIHRoaXMudGltZSA9IHsgbWludXRlOiAwLCBob3VyOiAwLCBzZWNvbmQ6IDAgfTtcclxuICAgIHRoaXMuaW5wdXQgPSBudWxsO1xyXG4gICAgdGhpcy5vblRvdWNoKCk7XHJcbiAgICB0aGlzLm9uQ2hhbmdlKG51bGwpO1xyXG4gIH1cclxuXHJcbiAgd3JpdGVWYWx1ZShuZXdNb2RlbDogYW55KTogdm9pZCB7XHJcbiAgICAvLyB0aGlzLmlucHV0ID0gbmV3IERhdGVUaW1lTW9kZWwoT2JqZWN0LmFzc2lnbih0aGlzLmRhdGUsIHRoaXMudGltZSkpO1xyXG4gICAgaWYgKG5ld01vZGVsKSB7XHJcbiAgICAgIC8vIHRoaXMuaW5wdXQgPSBPYmplY3QuYXNzaWduKCF0aGlzLmlucHV0LCBEYXRlVGltZU1vZGVsLmZyb21Mb2NhbFN0cmluZyhuZXdNb2RlbCkpO1xyXG4gICAgICBpZiAoIXRoaXMuaW5wdXQpIHtcclxuICAgICAgICB0aGlzLmlucHV0ID0gRGF0ZVRpbWVNb2RlbC5mcm9tTG9jYWxTdHJpbmcobmV3TW9kZWwpO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMuaW5wdXQgPSBPYmplY3QuYXNzaWduKFxyXG4gICAgICAgICAgdGhpcy5pbnB1dCxcclxuICAgICAgICAgIERhdGVUaW1lTW9kZWwuZnJvbUxvY2FsU3RyaW5nKG5ld01vZGVsKVxyXG4gICAgICAgICk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHRoaXMuZGF0ZSA9IHRoaXMuaW5wdXQ7XHJcbiAgICAgIHRoaXMudGltZSA9IHtcclxuICAgICAgICBob3VyOiB0aGlzLmlucHV0LmhvdXIsXHJcbiAgICAgICAgbWludXRlOiB0aGlzLmlucHV0Lm1pbnV0ZSxcclxuICAgICAgICBzZWNvbmQ6IHRoaXMuaW5wdXQuc2Vjb25kLFxyXG4gICAgICB9O1xyXG5cclxuICAgICAgdGhpcy5fdGVtcFZhbHVlID0gdGhpcy5kYXRlUGlwZS50cmFuc2Zvcm0odGhpcy5pbnB1dCwgJ3l5eXktTU0tZGRUSEg6bW0nKTtcclxuICAgICAgLy8gdGhpcy5vblRvdWNoKCk7XHJcblxyXG4gICAgICBpZiAodGhpcy5jb250cm9scykge1xyXG4gICAgICAgIHRoaXMuX3JlbmRlci5zZXRQcm9wZXJ0eSh0aGlzLmNvbnRyb2xzLCAndmFsdWUnLCB0aGlzLl90ZW1wVmFsdWUpO1xyXG4gICAgICB9XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICAvLyBBZ3JlZ3VlIGVsIGxpbXBpYXIgcGFyYSBxdWUgY2FyZ3VlIHZhY2lvIHNpIHNlIGxlIHNldGVhIHZhY2lvIG8gbnVsbFxyXG4gICAgICB0aGlzLmxpbXBpYXIoKTtcclxuICAgICAgLy8gdGhpcy5pbnB1dCA9IG5ldyBEYXRlVGltZU1vZGVsKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICByZWdpc3Rlck9uQ2hhbmdlKGZuOiBhbnkpOiB2b2lkIHtcclxuICAgIHRoaXMub25DaGFuZ2UgPSBmbjtcclxuICB9XHJcblxyXG4gIHJlZ2lzdGVyT25Ub3VjaGVkKGZuOiBhbnkpOiB2b2lkIHtcclxuICAgIHRoaXMub25Ub3VjaCA9IGZuO1xyXG4gIH1cclxuXHJcbiAgc2V0RGlzYWJsZWRTdGF0ZT8oaXNEaXNhYmxlZDogYm9vbGVhbik6IHZvaWQge1xyXG4gICAgdGhpcy5pc0Rpc2FibGVkID0gaXNEaXNhYmxlZDtcclxuICB9XHJcblxyXG4gIHZhbGlkYXRlKGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbCk6IFZhbGlkYXRpb25FcnJvcnMgfCBhbnkge1xyXG4gICAgdGhpcy5jb250cm9scyA9IGNvbnRyb2w7XHJcblxyXG4gICAgaWYgKCF0aGlzLl9pbml0VmFsdWUpIHtcclxuICAgICAgaWYgKHRoaXMuX3RlbXBWYWx1ZSkge1xyXG4gICAgICAgIHRoaXMuX3JlbmRlci5zZXRQcm9wZXJ0eShjb250cm9sLCAndmFsdWUnLCB0aGlzLl90ZW1wVmFsdWUpO1xyXG4gICAgICB9XHJcbiAgICAgIHRoaXMuX2luaXRWYWx1ZSA9IHRydWU7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gbnVsbDtcclxuICB9XHJcblxyXG4gIHJlZ2lzdGVyT25WYWxpZGF0b3JDaGFuZ2U/KGZuOiAoKSA9PiB2b2lkKTogdm9pZCB7XHJcbiAgICB0aGlzLm9uVmFsaWRhdGlvbkNoYW5nZSA9IGZuO1xyXG4gIH1cclxuXHJcbiAgb3BlbihkOiBOZ2JJbnB1dERhdGVwaWNrZXIpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLmlucHV0ID09PSBudWxsKSB7XHJcbiAgICAgIHRoaXMuZGF0ZSA9IHRoaXMudG9kYXk7XHJcbiAgICAgIHRoaXMudGltZSA9IHtcclxuICAgICAgICBob3VyOiBuZXcgRGF0ZSgpLmdldEhvdXJzKCksXHJcbiAgICAgICAgbWludXRlOiBuZXcgRGF0ZSgpLmdldE1pbnV0ZXMoKSxcclxuICAgICAgICBzZWNvbmQ6IG5ldyBEYXRlKCkuZ2V0U2Vjb25kcygpLFxyXG4gICAgICB9O1xyXG4gICAgICB0aGlzLmlucHV0ID0gbmV3IERhdGVUaW1lTW9kZWwoT2JqZWN0LmFzc2lnbih0aGlzLmRhdGUsIHRoaXMudGltZSkpO1xyXG4gICAgICBjb25zdCBlbWl0VmFsdWUgPSB0aGlzLmRhdGVQaXBlLnRyYW5zZm9ybSh0aGlzLmlucHV0LCAneXl5eS1NTS1kZFRISDptbScpO1xyXG4gICAgICB0aGlzLm9uVG91Y2goKTtcclxuICAgICAgdGhpcy5vbkNoYW5nZShlbWl0VmFsdWUpO1xyXG4gICAgfVxyXG4gICAgLy9hYnJpciBlbCBkYXRldGltZVxyXG4gICAgZC5vcGVuKCk7XHJcbiAgfVxyXG5cclxuICBnb05leHQoKTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5uZXh0ICE9IHVuZGVmaW5lZCkge1xyXG4gICAgICBpZiAodGhpcy5uZXh0LmRpc2FibGVkIHx8IHRoaXMubmV4dC5yZWFkb25seSkge1xyXG4gICAgICAgIGlmICh0aGlzLm5leHRJc0Rpc2FibGUgIT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICB0aGlzLm5leHRJc0Rpc2FibGUuZm9jdXMoKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy5uZXh0LmZvY3VzKCk7XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGlmICh0aGlzLm5leHRJc0Rpc2FibGUgIT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgdGhpcy5uZXh0SXNEaXNhYmxlLmZvY3VzKCk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy5vbk5leHQuZW1pdCgpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBnb0JhY2soKTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5iYWNrICE9IHVuZGVmaW5lZCkge1xyXG4gICAgICBpZiAodGhpcy5iYWNrLmRpc2FibGVkIHx8IHRoaXMuYmFjay5yZWFkb25seSkge1xyXG4gICAgICAgIGlmICh0aGlzLmJhY2tJc0Rpc2FibGUgIT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICB0aGlzLmJhY2tJc0Rpc2FibGUuZm9jdXMoKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy5iYWNrLmZvY3VzKCk7XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGlmICh0aGlzLmJhY2tJc0Rpc2FibGUgIT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgdGhpcy5iYWNrSXNEaXNhYmxlLmZvY3VzKCk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy5vbkJhY2suZW1pdCgpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG59XHJcbiIsIjxsYWJlbFxyXG4gICpuZ0lmPVwibGFiZWwgIT0gbnVsbCAmJiBsYWJlbCAhPSAnJyAmJiBzaG93TGFiZWxcIlxyXG4gIGNsYXNzPVwiZC1mbGV4IHN1bWF4LWxhYmVsIG1iLTAgcC0wXCJcclxuICA+PHNwYW4gW3RpdGxlXT1cImxhYmVsXCIgc3R5bGU9XCJ3aGl0ZS1zcGFjZTogbm93cmFwOyBvdmVyZmxvdzogaGlkZGVuOyB0ZXh0LW92ZXJmbG93OiBlbGxpcHNpcztcIj57e2xhYmVsfX08L3NwYW4+XHJcblx0PHNwYW4gKm5nSWY9XCJyZXF1aXJlZFwiIGNsYXNzPVwibXMtMVwiXHJcblx0XHRbY2xhc3MudGV4dC1kYW5nZXJdPVwiY29udHJvbHM/LmVycm9ycyAhPSBudWxsXCI+ICo8L3NwYW4+XHJcblx0PHNwYW4gKm5nSWY9XCJsYWJlbEluZm9cIj5cclxuXHRcdDxpIGNsYXNzPVwiZmEgZmEtZXhjbGFtYXRpb24tY2lyY2xlIHRleHQtaW5mbyBtcy0yXCIgW21hdFRvb2x0aXBdPVwidGV4dExhYmVsSW5mb1wiIG1hdFRvb2x0aXBDbGFzcz1cImJnLWluZm9cIj48L2k+XHJcblx0PC9zcGFuPlxyXG4gIDwvbGFiZWxcclxuPlxyXG48ZGl2XHJcbiAgW2NsYXNzLmlucHV0LWljb25dPVwiXHJcbiAgICBjb250cm9scz8uZXJyb3JzICE9IG51bGwgJiZcclxuICAgIChjb250cm9scz8uZGlydHkgfHwgY29udHJvbHM/LnRvdWNoZWQpICYmXHJcbiAgICBzdWJtaXR0ZWRcclxuICBcIlxyXG4gIGNsYXNzPVwicG9zaXRpb24tcmVsYXRpdmVcIlxyXG4gIFtjbGFzcy5yaWdodF09XCJcclxuICAgIGNvbnRyb2xzPy5lcnJvcnMgIT0gbnVsbCAmJlxyXG4gICAgKGNvbnRyb2xzPy5kaXJ0eSB8fCBjb250cm9scz8udG91Y2hlZCkgJiZcclxuICAgIHN1Ym1pdHRlZFxyXG4gIFwiXHJcbj5cclxuICA8IS0tIHRvb2x0aXAtbWVzc2FnZSBlcyBlbCBpY29ubyBkZSBlcnJvciAtLT5cclxuXHJcbiAgPHRvb2x0aXAtbWVzc2FnZVxyXG4gICAgW2xhYmVsXT1cImxhYmVsXCJcclxuICAgIFtjb250cm9sc109XCJjb250cm9sc1wiXHJcbiAgICBbdmFsaWRhdG9yTWVzc2FnZV09XCJ2YWxpZGF0b3JNZXNzYWdlXCJcclxuICAgIFt0b29sdGlwTWVzc2FnZV09XCJ0b29sdGlwTWVzc2FnZVwiXHJcbiAgICBbc3VibWl0dGVkXT1cInN1Ym1pdHRlZFwiXHJcbiAgPjwvdG9vbHRpcC1tZXNzYWdlPlxyXG4gIDxkaXYgY2xhc3M9XCJpbnB1dC1ncm91cCBtci0yIFwiPlxyXG4gICAgPGlucHV0XHJcbiAgICAgIG5hbWU9XCJpbnB1dFwiXHJcbiAgICAgIHR5cGU9XCJ0ZXh0XCJcclxuICAgICAgY2xhc3M9XCJmb3JtLWNvbnRyb2wgZm9ybS1jb250cm9sLXNtXCJcclxuICAgICAgW2Rpc2FibGVkXT1cInRydWVcIlxyXG4gICAgICBbbmdNb2RlbF09XCJpbnB1dCB8IGRhdGU6IGlucHV0RGF0ZXRpbWVGb3JtYXRcIlxyXG4gICAgLz5cclxuICAgIDxpbnB1dFxyXG4gICAgICBjbGFzcz1cImZvcm0tY29udHJvbCBmb3JtLWNvbnRyb2wtc21cIlxyXG4gICAgICBjb250YWluZXI9XCJib2R5XCJcclxuICAgICAgW3JlYWRvbmx5XT1cInRydWVcIlxyXG4gICAgICBwbGFjZWhvbGRlcj1cImRkL21tL3l5eXlcIlxyXG4gICAgICBuYW1lPVwiZHBcIlxyXG4gICAgICBbKG5nTW9kZWwpXT1cImRhdGVcIlxyXG4gICAgICAobmdNb2RlbENoYW5nZSk9XCJvbk1vZGVsRGF0ZUNoYW5nZSgkZXZlbnQpXCJcclxuICAgICAgW2F1dG9DbG9zZV09XCInb3V0c2lkZSdcIlxyXG4gICAgICBuZ2JEYXRlcGlja2VyXHJcbiAgICAgIFtmb290ZXJUZW1wbGF0ZV09XCJmb290ZXJUZW1wbGF0ZVwiXHJcbiAgICAgICNkPVwibmdiRGF0ZXBpY2tlclwiXHJcbiAgICAvPlxyXG4gICAgPCEtLSAoZGF0ZVNlbGVjdCk9XCJvbkRhdGVTZWxlY3QoJGV2ZW50KVwiIC0tPlxyXG4gICAgPGRpdiBjbGFzcz1cImlucHV0LWdyb3VwLWFwcGVuZFwiPlxyXG4gICAgICA8YnV0dG9uXHJcbiAgICAgICAgI2J0bk9wZW5cclxuICAgICAgICBjbGFzcz1cImJ0biBidG4taW5mbyBwLTAgcm91bmRlZC0wIGgtMTAwXCJcclxuICAgICAgICBbZGlzYWJsZWRdPVwiaXNEaXNhYmxlZCB8fCByZWFkb25seVwiXHJcbiAgICAgICAgKGNsaWNrKT1cIm9wZW4oZClcIlxyXG4gICAgICAgIChrZXl1cC5BcnJvd0xlZnQpPVwiZ29CYWNrKClcIlxyXG4gICAgICAgIChrZXl1cC5BcnJvd1JpZ2h0KT1cImJ0bkNsZWFuLmZvY3VzKClcIlxyXG4gICAgICAgIHR5cGU9XCJidXR0b25cIlxyXG4gICAgICA+XHJcbiAgICAgICAgPCEtLSA8bWF0LWljb24gY2xhc3M9XCJ0ZXh0LXdoaXRlIHB0LTFcIiBzdHlsZT1cImZvbnQtc2l6ZTogMThweDtcIiBbbWF0VG9vbHRpcF09XCInQ2FsZW5kYXJpbydcIiBtYXRUb29sdGlwQ2xhc3M9XCJiZy1pbmZvXCI+Y2FsZW5kYXJfdG9kYXk8L21hdC1pY29uPiAtLT5cclxuICAgICAgICA8aSBhcmlhLWhpZGRlbj1cInRydWVcIiBjbGFzcz1cImZhIGZhLWNhbGVuZGFyIHRleHQtbGlnaHQgcHgtMSBcIj48L2k+XHJcbiAgICAgIDwvYnV0dG9uPlxyXG4gICAgICA8YnV0dG9uXHJcbiAgICAgICAgI2J0bkNsZWFuXHJcbiAgICAgICAgY2xhc3M9XCJidG4gYnRuLWRhbmdlciBwLTAgcm91bmRlZC0wIGxpbXBpYXIgaC0xMDBcIlxyXG4gICAgICAgIFtkaXNhYmxlZF09XCJpc0Rpc2FibGVkIHx8IHJlYWRvbmx5XCJcclxuICAgICAgICAoY2xpY2spPVwibGltcGlhcigpXCJcclxuICAgICAgICAoa2V5dXAuQXJyb3dMZWZ0KT1cImJ0bk9wZW4uZm9jdXMoKVwiXHJcbiAgICAgICAgKGtleXVwLkFycm93UmlnaHQpPVwiZ29OZXh0KClcIlxyXG4gICAgICAgIHR5cGU9XCJidXR0b25cIlxyXG4gICAgICA+XHJcbiAgICAgICAgPCEtLSA8bWF0LWljb24gY2xhc3M9XCJ0ZXh0LXdoaXRlIHB0LTFcIiBzdHlsZT1cImZvbnQtc2l6ZTogMThweDtcIiBbbWF0VG9vbHRpcF09XCInTGltcGlhcidcIiBtYXRUb29sdGlwQ2xhc3M9XCJiZy1kYW5nZXJcIj5jbG9zZTwvbWF0LWljb24+IC0tPlxyXG4gICAgICAgIDxpIGFyaWEtaGlkZGVuPVwidHJ1ZVwiIGNsYXNzPVwiZmEgZmEtdGltZXMgcHgtMSB0ZXh0LWxpZ2h0XCI+PC9pPlxyXG4gICAgICA8L2J1dHRvbj5cclxuICAgIDwvZGl2PlxyXG4gIDwvZGl2PlxyXG48L2Rpdj5cclxuXHJcbjxuZy10ZW1wbGF0ZSAjZm9vdGVyVGVtcGxhdGU+XHJcbiAgPGhyIGNsYXNzPVwibXktMFwiIC8+XHJcbiAgPG5nYi10aW1lcGlja2VyXHJcbiAgICAjdHBcclxuICAgIFsobmdNb2RlbCldPVwidGltZVwiXHJcbiAgICBuYW1lPVwidGltZXBpY2tlclwiXHJcbiAgICAobmdNb2RlbENoYW5nZSk9XCJvbk1vZGVsRGF0ZUNoYW5nZSgkZXZlbnQpXCJcclxuICAgIChmb2N1c291dCk9XCJmb2N1c091dCgkZXZlbnQpXCJcclxuICA+XHJcbiAgPC9uZ2ItdGltZXBpY2tlcj5cclxuPC9uZy10ZW1wbGF0ZT5cclxuPCEtLSBlcnJvci1tZXNzYWdlIGVzIGVsIG1hbnNhamUgcXVlIGFwYXJlY2UgYWJham8gZGVsIGNvbXBvbmVudGUgLS0+XHJcbjxlcnJvci1tZXNzYWdlXHJcbiAgW2xhYmVsXT1cImxhYmVsXCJcclxuICBbY29udHJvbHNdPVwiY29udHJvbHNcIlxyXG4gIFt2YWxpZGF0b3JNZXNzYWdlXT1cInZhbGlkYXRvck1lc3NhZ2VcIlxyXG4gIFt0b29sdGlwTWVzc2FnZV09XCJ0b29sdGlwTWVzc2FnZVwiXHJcbiAgW3N1Ym1pdHRlZF09XCJzdWJtaXR0ZWRcIlxyXG4+PC9lcnJvci1tZXNzYWdlPlxyXG4iXX0=
|
|
351
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0ZS10aW1lLXBpY2tlci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtc3VtYXgtZXJwLWNvbXBvbmVudC9zcmMvbGliL2RhdGUtdGltZS1waWNrZXIvZGF0ZS10aW1lLXBpY2tlci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtc3VtYXgtZXJwLWNvbXBvbmVudC9zcmMvbGliL2RhdGUtdGltZS1waWNrZXIvZGF0ZS10aW1lLXBpY2tlci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQ0wsdUJBQXVCLEVBQ3ZCLFNBQVMsRUFFVCxZQUFZLEVBQ1osS0FBSyxFQUdMLE1BQU0sRUFHTixTQUFTLEVBQ1QsVUFBVSxHQUNYLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFHTCxhQUFhLEVBQ2IsaUJBQWlCLEdBRWxCLE1BQU0sZ0JBQWdCLENBQUM7QUFDeEIsT0FBTyxFQUVMLHNCQUFzQixFQUV0QixpQkFBaUIsRUFJbEIsTUFBTSw0QkFBNEIsQ0FBQztBQUVwQyxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsSUFBSSxFQUFFLE1BQU0scUNBQXFDLENBQUM7QUFDakYsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sdUNBQXVDLENBQUM7QUFDL0UsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHdCQUF3QixDQUFDOzs7Ozs7Ozs7QUF1QnZELE1BQU0sT0FBTyx1QkFBdUI7SUF5SWxDLFlBQ1UsUUFBcUIsRUFDckIsUUFBa0IsRUFDbEIscUJBQTRDLEVBQzVDLE9BQWtCO1FBSGxCLGFBQVEsR0FBUixRQUFRLENBQWE7UUFDckIsYUFBUSxHQUFSLFFBQVEsQ0FBVTtRQUNsQiwwQkFBcUIsR0FBckIscUJBQXFCLENBQXVCO1FBQzVDLFlBQU8sR0FBUCxPQUFPLENBQVc7UUExSTVCOzs7OztVQUtFO1FBQ08sd0JBQW1C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c0JBQWYsTUFBTTtnQkFFUyxhQUFhO3NCQUE1QixTQUFTO3VCQUFDLEdBQUc7Z0JBQ0csVUFBVTtzQkFBMUIsU0FBUzt1QkFBQyxJQUFJO2dCQUNPLE9BQU87c0JBQTVCLFNBQVM7dUJBQUMsU0FBUztnQkFDRyxRQUFRO3NCQUE5QixTQUFTO3VCQUFDLFVBQVUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBEYXRlUGlwZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XHJcbmltcG9ydCB7XHJcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXHJcbiAgQ29tcG9uZW50LFxyXG4gIEVsZW1lbnRSZWYsXHJcbiAgRXZlbnRFbWl0dGVyLFxyXG4gIElucHV0LFxyXG4gIE9uQ2hhbmdlcyxcclxuICBPbkluaXQsXHJcbiAgT3V0cHV0LFxyXG4gIFJlbmRlcmVyMixcclxuICBTaW1wbGVDaGFuZ2VzLFxyXG4gIFZpZXdDaGlsZCxcclxuICBmb3J3YXJkUmVmLFxyXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQge1xyXG4gIEFic3RyYWN0Q29udHJvbCxcclxuICBDb250cm9sVmFsdWVBY2Nlc3NvcixcclxuICBOR19WQUxJREFUT1JTLFxyXG4gIE5HX1ZBTFVFX0FDQ0VTU09SLFxyXG4gIFZhbGlkYXRpb25FcnJvcnMsXHJcbn0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5pbXBvcnQge1xyXG4gIE5nYkNhbGVuZGFyLFxyXG4gIE5nYkRhdGVQYXJzZXJGb3JtYXR0ZXIsXHJcbiAgTmdiRGF0ZVN0cnVjdCxcclxuICBOZ2JEYXRlcGlja2VySTE4bixcclxuICBOZ2JJbnB1dERhdGVwaWNrZXIsXHJcbiAgTmdiVGltZVN0cnVjdCxcclxuICBOZ2JUaW1lcGlja2VyXHJcbn0gZnJvbSAnQG5nLWJvb3RzdHJhcC9uZy1ib290c3RyYXAnO1xyXG5pbXBvcnQgeyBEYXRlVGltZVBpY2tlclNlcnZpY2UgfSBmcm9tICcuL2RhdGUtdGltZS1waWNrZXIuc2VydmljZSc7XHJcbmltcG9ydCB7IEN1c3RvbURhdGVwaWNrZXJJMThuLCBJMThuIH0gZnJvbSAnLi4vZGF0ZS1waWNrZXIvQ3VzdG9tRGF0ZVBpY2tlckkxOG4nO1xyXG5pbXBvcnQgeyBDdXN0b21EYXRlcGlja2VyRm9ybWF0IH0gZnJvbSAnLi4vZGF0ZS1waWNrZXIvQ3VzdG9tRGF0ZVBpY2tlckZvcm1hdCc7XHJcbmltcG9ydCB7IERhdGVUaW1lTW9kZWwgfSBmcm9tICcuLi91dGlscy9EYXRlVGltZU1vZGVsJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnZGF0ZS10aW1lLXBpY2tlcicsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL2RhdGUtdGltZS1waWNrZXIuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL2RhdGUtdGltZS1waWNrZXIuY29tcG9uZW50LnNjc3MnXSxcclxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcclxuICBwcm92aWRlcnM6IFtcclxuICAgIHtcclxuICAgICAgcHJvdmlkZTogTkdfVkFMVUVfQUNDRVNTT1IsXHJcbiAgICAgIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IERhdGVUaW1lUGlja2VyQ29tcG9uZW50KSxcclxuICAgICAgbXVsdGk6IHRydWUsXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICBwcm92aWRlOiBOR19WQUxJREFUT1JTLFxyXG4gICAgICB1c2VFeGlzdGluZzogZm9yd2FyZFJlZigoKSA9PiBEYXRlVGltZVBpY2tlckNvbXBvbmVudCksXHJcbiAgICAgIG11bHRpOiB0cnVlLFxyXG4gICAgfSxcclxuICAgIEkxOG4sXHJcbiAgICB7IHByb3ZpZGU6IE5nYkRhdGVwaWNrZXJJMThuLCB1c2VDbGFzczogQ3VzdG9tRGF0ZXBpY2tlckkxOG4gfSxcclxuICAgIHsgcHJvdmlkZTogTmdiRGF0ZVBhcnNlckZvcm1hdHRlciwgdXNlQ2xhc3M6IEN1c3RvbURhdGVwaWNrZXJGb3JtYXQgfSxcclxuICBdLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgRGF0ZVRpbWVQaWNrZXJDb21wb25lbnRcclxuICBpbXBsZW1lbnRzIE9uSW5pdCwgT25DaGFuZ2VzLCBDb250cm9sVmFsdWVBY2Nlc3NvclxyXG57XHJcbiAgLyoqXHJcbiAgKiBAZGVzY3JpcHRpb24gRm9ybWF0byBkZSBsYSBmZWNoYTpcclxuICAqICdkZC9NTS95eXl5IEhIOm1tJyAtICdkZC9NTS95eXl5IEhIOm1tOnNzJyAtICdNL2QveXl5eSBIOm1tOnNzJ1xyXG4gICogQGRlZmF1bHQgJ2RkL01NL3l5eXkgSEg6bW0nXHJcbiAgKiBAdHlwZSB7c3RyaW5nfVxyXG4gICovXHJcbiAgQElucHV0KCkgaW5wdXREYXRldGltZUZvcm1hdDogc3RyaW5nID0gJ2RkL01NL3l5eXkgSEg6bW0nO1xyXG4gIFxyXG4gIC8qKlxyXG4gICogQGRlc2NyaXB0aW9uIFRleHRvIGEgbW9zdHJhciBjb21vIGV0aXF1ZXRhIGRlbCBjYW1wb1xyXG4gICogQGRlZmF1bHQgJydcclxuICAqIEB0eXBlIHN0cmluZ1xyXG4gICovXHJcbiAgQElucHV0KCkgbGFiZWw6IHN0cmluZyA9ICcnO1xyXG4gIFxyXG4gIC8qKlxyXG4gICogQGRlc2NyaXB0aW9uIENvbnRyb2xhIGxhIHZpc3VhbGl6YWNpw7NuIGRlbCB0ZXh0byBzdXBlcmlvciAobGFiZWwpXHJcbiAgKiBAZGVmYXVsdCB0cnVlXHJcbiAgKiBAdHlwZSBib29sZWFuXHJcbiAgKi9cclxuICBASW5wdXQoKSBzaG93TGFiZWw6IGJvb2xlYW4gPSB0cnVlO1xyXG4gIFxyXG4gIC8qKlxyXG4gICogQGRlc2NyaXB0aW9uIEVzdGFibGVjZSBlbCBjb250cm9sIGNvbW8gc29sbyBsZWN0dXJhXHJcbiAgKiBAZGVmYXVsdCBmYWxzZVxyXG4gICogQHR5cGUgYm9vbGVhblxyXG4gICovXHJcbiAgQElucHV0KCkgcmVhZG9ubHk6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBcclxuICAvKipcclxuICAqIEBkZXNjcmlwdGlvbiBJbmRpY2Egc2kgZWwgY2FtcG8gZXMgb2JsaWdhdG9yaW9cclxuICAqIEBkZWZhdWx0IGZhbHNlXHJcbiAgKiBAdHlwZSBib29sZWFuXHJcbiAgKi9cclxuICBASW5wdXQoKSByZXF1aXJlZDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIFxyXG4gIC8qKlxyXG4gICogQGRlc2NyaXB0aW9uIE11ZXN0cmEgbWVuc2FqZXMgZGUgdmFsaWRhY2nDs25cclxuICAqIEBkZWZhdWx0IGZhbHNlXHJcbiAgKiBAdHlwZSBib29sZWFuXHJcbiAgKi9cclxuICBASW5wdXQoKSB2YWxpZGF0b3JNZXNzYWdlOiBib29sZWFuID0gZmFsc2U7XHJcbiAgXHJcbiAgLyoqXHJcbiAgKiBAZGVzY3JpcHRpb24gTXVlc3RyYSBtZW5zYWplcyBkZSBheXVkYSBjb21vIHRvb2x0aXBzXHJcbiAgKiBAZGVmYXVsdCB0cnVlXHJcbiAgKiBAdHlwZSBib29sZWFuXHJcbiAgKi9cclxuICBASW5wdXQoKSB0b29sdGlwTWVzc2FnZTogYm9vbGVhbiA9IHRydWU7XHJcbiAgXHJcbiAgLyoqXHJcbiAgKiBAZGVzY3JpcHRpb24gSW5kaWNhIHNpIGVsIGZvcm11bGFyaW8gaGEgc2lkbyBlbnZpYWRvIHBhcmEgbW9zdHJhciB2YWxpZGFjaW9uZXNcclxuICAqIEBkZWZhdWx0IHRydWVcclxuICAqIEB0eXBlIGJvb2xlYW5cclxuICAqL1xyXG4gIEBJbnB1dCgpIHN1Ym1pdHRlZDogYm9vbGVhbiA9IHRydWU7XHJcbiAgXHJcbiAgLyoqXHJcbiAgKiBAZGVzY3JpcHRpb24gUmVmZXJlbmNpYSBhbCBzaWd1aWVudGUgY29udHJvbCBwYXJhIG5hdmVnYWNpw7NuXHJcbiAgKiBAZGVmYXVsdCB1bmRlZmluZWRcclxuICAqIEB0eXBlIGFueVxyXG4gICovXHJcbiAgQElucHV0KCkgbmV4dDogYW55O1xyXG4gIFxyXG4gIC8qKlxyXG4gICogQGRlc2NyaXB0aW9uIFJlZmVyZW5jaWEgYWwgY29udHJvbCBhbHRlcm5hdGl2byBjdWFuZG8gZWwgc2lndWllbnRlIGVzdMOhIGRlc2hhYmlsaXRhZG9cclxuICAqIEBkZWZhdWx0IHVuZGVmaW5lZFxyXG4gICogQHR5cGUgYW55XHJcbiAgKi9cclxuICBASW5wdXQoKSBuZXh0SXNEaXNhYmxlOiBhbnk7XHJcbiAgXHJcbiAgLyoqXHJcbiAgKiBAZGVzY3JpcHRpb24gUmVmZXJlbmNpYSBhbCBjb250cm9sIGFudGVyaW9yIHBhcmEgbmF2ZWdhY2nDs25cclxuICAqIEBkZWZhdWx0IHVuZGVmaW5lZFxyXG4gICogQHR5cGUgYW55XHJcbiAgKi9cclxuICBASW5wdXQoKSBiYWNrOiBhbnk7XHJcbiAgXHJcbiAgLyoqXHJcbiAgKiBAZGVzY3JpcHRpb24gUmVmZXJlbmNpYSBhbCBjb250cm9sIGFsdGVybmF0aXZvIGN1YW5kbyBlbCBhbnRlcmlvciBlc3TDoSBkZXNoYWJpbGl0YWRvXHJcbiAgKiBAZGVmYXVsdCB1bmRlZmluZWRcclxuICAqIEB0eXBlIGFueVxyXG4gICovXHJcbiAgQElucHV0KCkgYmFja0lzRGlzYWJsZTogYW55O1xyXG4gIFxyXG4gIC8qKlxyXG4gICogQGRlc2NyaXB0aW9uIEhhYmlsaXRhIGluZm9ybWFjacOzbiBhZGljaW9uYWwgcGFyYSBsYSBldGlxdWV0YVxyXG4gICogQGRlZmF1bHQgZmFsc2VcclxuICAqIEB0eXBlIGJvb2xlYW5cclxuICAqL1xyXG4gIEBJbnB1dCgpIGxhYmVsSW5mbzogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIFxyXG4gIC8qKlxyXG4gICogQGRlc2NyaXB0aW9uIFRleHRvIGluZm9ybWF0aXZvIGFkaWNpb25hbCBwYXJhIGxhIGV0aXF1ZXRhXHJcbiAgKiBAZGVmYXVsdCAnJ1xyXG4gICogQHR5cGUgc3RyaW5nXHJcbiAgKi9cclxuICBASW5wdXQoKSB0ZXh0TGFiZWxJbmZvOiBzdHJpbmcgPSAnJztcclxuICBcclxuICAvKipcclxuICAqIEBkZXNjcmlwdGlvbiBBYnJlIGVsIHNlbGVjdG9yIGFsIHJlY2liaXIgZWwgZm9jb1xyXG4gICogQGRlZmF1bHQgZmFsc2VcclxuICAqIEB0eXBlIGJvb2xlYW5cclxuICAqL1xyXG4gIEBJbnB1dCgpIG9wZW5XaGVuRm9jdXM6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBcclxuICAvKipcclxuICAqIEBkZXNjcmlwdGlvbiBOYXZlZ2EgYWwgc2lndWllbnRlIGNvbnRyb2wgYWwgc2VsZWNjaW9uYXIgdW5hIGZlY2hhXHJcbiAgKiBAZGVmYXVsdCBmYWxzZVxyXG4gICogQHR5cGUgYm9vbGVhblxyXG4gICovXHJcbiAgQElucHV0KCkgZ29OZXh0V2hlblNlbGVjdDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIEBPdXRwdXQoKSBvbk5leHQ6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG4gIEBPdXRwdXQoKSBvbkJhY2s6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG5cclxuICBAVmlld0NoaWxkKCdkJykgbmdiRGF0ZXBpY2tlciE6IE5nYklucHV0RGF0ZXBpY2tlcjtcclxuICBAVmlld0NoaWxkKCd0cCcpIHRpbWVQaWNrZXIhOiBOZ2JUaW1lcGlja2VyO1xyXG4gIEBWaWV3Q2hpbGQoJ2J0bk9wZW4nKSBidG5PcGVuITogRWxlbWVudFJlZjtcclxuICBAVmlld0NoaWxkKCdidG5DbGVhbicpIGJ0bkNsZWFuITogRWxlbWVudFJlZjtcclxuXHJcbiAgY29udHJvbHM/OiBBYnN0cmFjdENvbnRyb2w7XHJcbiAgdG9kYXkgPSB0aGlzLmNhbGVuZGFyLmdldFRvZGF5KCk7XHJcbiAgZGF0ZTogTmdiRGF0ZVN0cnVjdCB8IGFueSA9IHRoaXMudG9kYXk7XHJcbiAgdGltZTogTmdiVGltZVN0cnVjdCA9IHtcclxuICAgIGhvdXI6IG5ldyBEYXRlKCkuZ2V0SG91cnMoKSxcclxuICAgIG1pbnV0ZTogbmV3IERhdGUoKS5nZXRNaW51dGVzKCksXHJcbiAgICBzZWNvbmQ6IG5ldyBEYXRlKCkuZ2V0U2Vjb25kcygpLFxyXG4gIH07XHJcbiAgaW5wdXQ6IGFueSA9IG5ldyBEYXRlVGltZU1vZGVsKE9iamVjdC5hc3NpZ24odGhpcy5kYXRlLCB0aGlzLnRpbWUpKTtcclxuICBpc0Rpc2FibGVkID0gZmFsc2U7XHJcblxyXG4gIF90ZW1wVmFsdWU6IHN0cmluZyB8IG51bGwgPSBudWxsO1xyXG4gIF9pbml0VmFsdWUgPSBmYWxzZTtcclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwcml2YXRlIGNhbGVuZGFyOiBOZ2JDYWxlbmRhcixcclxuICAgIHByaXZhdGUgZGF0ZVBpcGU6IERhdGVQaXBlLFxyXG4gICAgcHJpdmF0ZSBkYXRlVGltZVBpY2tlclNlcnZpY2U6IERhdGVUaW1lUGlja2VyU2VydmljZSxcclxuICAgIHByaXZhdGUgX3JlbmRlcjogUmVuZGVyZXIyXHJcbiAgKSB7XHJcbiAgICB0aGlzLmlucHV0RGF0ZXRpbWVGb3JtYXQgPVxyXG4gICAgICB0aGlzLmRhdGVUaW1lUGlja2VyU2VydmljZS5nZXRJbnB1dERhdGV0aW1lRm9ybWF0KCk7XHJcbiAgICB0aGlzLnNob3dMYWJlbCA9IHRoaXMuZGF0ZVRpbWVQaWNrZXJTZXJ2aWNlLmdldFNob3dMYWJlbCgpO1xyXG4gICAgdGhpcy5vcGVuV2hlbkZvY3VzID0gdGhpcy5kYXRlVGltZVBpY2tlclNlcnZpY2UuZ2V0T3BlbldoZW5Gb2N1cygpO1xyXG4gICAgdGhpcy5nb05leHRXaGVuU2VsZWN0ID0gdGhpcy5kYXRlVGltZVBpY2tlclNlcnZpY2UuZ2V0R29OZXh0V2hlblNlbGVjdCgpO1xyXG4gICAgdGhpcy52YWxpZGF0b3JNZXNzYWdlID0gdGhpcy5kYXRlVGltZVBpY2tlclNlcnZpY2UuZ2V0VmFsaWRhdG9yTWVzc2FnZSgpO1xyXG4gICAgdGhpcy50b29sdGlwTWVzc2FnZSA9IHRoaXMuZGF0ZVRpbWVQaWNrZXJTZXJ2aWNlLmdldFRvb2x0aXBNZXNzYWdlKCk7XHJcbiAgICB0aGlzLnN1Ym1pdHRlZCA9IHRoaXMuZGF0ZVRpbWVQaWNrZXJTZXJ2aWNlLmdldFN1Ym1pdHRlZCgpO1xyXG4gIH1cclxuXHJcbiAgb25DaGFuZ2UgPSAoXzogYW55KSA9PiB7fTtcclxuICBvblZhbGlkYXRpb25DaGFuZ2UgPSAoKSA9PiB7fTtcclxuICBvblRvdWNoID0gKCkgPT4ge307XHJcbiAgZm9jdXMgPSAoKSA9PiB7XHJcbiAgICB0aGlzLmJ0bk9wZW4ubmF0aXZlRWxlbWVudC5mb2N1cygpO1xyXG4gICAgaWYgKCF0aGlzLnJlYWRvbmx5ICYmIHRoaXMub3BlbldoZW5Gb2N1cykge1xyXG4gICAgICB0aGlzLm5nYkRhdGVwaWNrZXIub3BlbigpO1xyXG4gICAgfVxyXG4gIH07XHJcblxyXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcclxuICAgIGlmIChjaGFuZ2VzWydzdWJtaXR0ZWQnXSkge1xyXG4gICAgICBpZiAodGhpcy5jb250cm9scyAhPT0gdW5kZWZpbmVkICYmIGNoYW5nZXNbJ3N1Ym1pdHRlZCddLmN1cnJlbnRWYWx1ZSkge1xyXG4gICAgICAgIHRoaXMuY29udHJvbHMubWFya0FzRGlydHkoKTtcclxuICAgICAgICB0aGlzLmNvbnRyb2xzLm1hcmtBc1RvdWNoZWQoKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgbmdPbkluaXQoKSB7fVxyXG5cclxuICAvLyBvbkRhdGVTZWxlY3QoZXZ0OiBhbnkpIHtcclxuICAvL3RoaXMubmdiRGF0ZXBpY2tlci5jbG9zZSgpO1xyXG4gIC8vIGlmICh0aGlzLmdvTmV4dFdoZW5TZWxlY3QpIHtcclxuICAvLyBcdHRoaXMuZ29OZXh0KCk7XHJcbiAgLy8gfVxyXG4gIC8vY29uc29sZS5sb2coZXZ0KTtcclxuICAvLyB9XHJcblxyXG4gIGZvY3VzT3V0KGV2ZW50OiBhbnkpOiB2b2lkIHtcclxuICAgIGlmIChldmVudC50YXJnZXQuYXJpYUxhYmVsID09ICdNaW51dGVzJykge1xyXG4gICAgICB0aGlzLm5nYkRhdGVwaWNrZXIuY2xvc2UoKTtcclxuICAgICAgaWYgKHRoaXMuZ29OZXh0V2hlblNlbGVjdCkge1xyXG4gICAgICAgIHRoaXMuZ29OZXh0KCk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIG9uTW9kZWxEYXRlQ2hhbmdlKGV2dDogTmdiRGF0ZVN0cnVjdCB8IE5nYlRpbWVTdHJ1Y3QpOiB2b2lkIHtcclxuICAgIHRoaXMuaW5wdXQgPSBuZXcgRGF0ZVRpbWVNb2RlbChPYmplY3QuYXNzaWduKHRoaXMuZGF0ZSwgdGhpcy50aW1lKSk7XHJcbiAgICBjb25zdCBlbWl0VmFsdWUgPSB0aGlzLmRhdGVQaXBlLnRyYW5zZm9ybSh0aGlzLmlucHV0LCAneXl5eS1NTS1kZFRISDptbScpO1xyXG4gICAgdGhpcy5vblRvdWNoKCk7XHJcbiAgICB0aGlzLm9uQ2hhbmdlKGVtaXRWYWx1ZSk7XHJcbiAgfVxyXG5cclxuICBsaW1waWFyKCk6IHZvaWQge1xyXG4gICAgdGhpcy5kYXRlID0gbnVsbDtcclxuICAgIHRoaXMudGltZSA9IHsgbWludXRlOiAwLCBob3VyOiAwLCBzZWNvbmQ6IDAgfTtcclxuICAgIHRoaXMuaW5wdXQgPSBudWxsO1xyXG4gICAgdGhpcy5vblRvdWNoKCk7XHJcbiAgICB0aGlzLm9uQ2hhbmdlKG51bGwpO1xyXG4gIH1cclxuXHJcbiAgd3JpdGVWYWx1ZShuZXdNb2RlbDogYW55KTogdm9pZCB7XHJcbiAgICAvLyB0aGlzLmlucHV0ID0gbmV3IERhdGVUaW1lTW9kZWwoT2JqZWN0LmFzc2lnbih0aGlzLmRhdGUsIHRoaXMudGltZSkpO1xyXG4gICAgaWYgKG5ld01vZGVsKSB7XHJcbiAgICAgIC8vIHRoaXMuaW5wdXQgPSBPYmplY3QuYXNzaWduKCF0aGlzLmlucHV0LCBEYXRlVGltZU1vZGVsLmZyb21Mb2NhbFN0cmluZyhuZXdNb2RlbCkpO1xyXG4gICAgICBpZiAoIXRoaXMuaW5wdXQpIHtcclxuICAgICAgICB0aGlzLmlucHV0ID0gRGF0ZVRpbWVNb2RlbC5mcm9tTG9jYWxTdHJpbmcobmV3TW9kZWwpO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMuaW5wdXQgPSBPYmplY3QuYXNzaWduKFxyXG4gICAgICAgICAgdGhpcy5pbnB1dCxcclxuICAgICAgICAgIERhdGVUaW1lTW9kZWwuZnJvbUxvY2FsU3RyaW5nKG5ld01vZGVsKVxyXG4gICAgICAgICk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHRoaXMuZGF0ZSA9IHRoaXMuaW5wdXQ7XHJcbiAgICAgIHRoaXMudGltZSA9IHtcclxuICAgICAgICBob3VyOiB0aGlzLmlucHV0LmhvdXIsXHJcbiAgICAgICAgbWludXRlOiB0aGlzLmlucHV0Lm1pbnV0ZSxcclxuICAgICAgICBzZWNvbmQ6IHRoaXMuaW5wdXQuc2Vjb25kLFxyXG4gICAgICB9O1xyXG5cclxuICAgICAgdGhpcy5fdGVtcFZhbHVlID0gdGhpcy5kYXRlUGlwZS50cmFuc2Zvcm0odGhpcy5pbnB1dCwgJ3l5eXktTU0tZGRUSEg6bW0nKTtcclxuICAgICAgLy8gdGhpcy5vblRvdWNoKCk7XHJcblxyXG4gICAgICBpZiAodGhpcy5jb250cm9scykge1xyXG4gICAgICAgIHRoaXMuX3JlbmRlci5zZXRQcm9wZXJ0eSh0aGlzLmNvbnRyb2xzLCAndmFsdWUnLCB0aGlzLl90ZW1wVmFsdWUpO1xyXG4gICAgICB9XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICAvLyBBZ3JlZ3VlIGVsIGxpbXBpYXIgcGFyYSBxdWUgY2FyZ3VlIHZhY2lvIHNpIHNlIGxlIHNldGVhIHZhY2lvIG8gbnVsbFxyXG4gICAgICB0aGlzLmxpbXBpYXIoKTtcclxuICAgICAgLy8gdGhpcy5pbnB1dCA9IG5ldyBEYXRlVGltZU1vZGVsKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICByZWdpc3Rlck9uQ2hhbmdlKGZuOiBhbnkpOiB2b2lkIHtcclxuICAgIHRoaXMub25DaGFuZ2UgPSBmbjtcclxuICB9XHJcblxyXG4gIHJlZ2lzdGVyT25Ub3VjaGVkKGZuOiBhbnkpOiB2b2lkIHtcclxuICAgIHRoaXMub25Ub3VjaCA9IGZuO1xyXG4gIH1cclxuXHJcbiAgc2V0RGlzYWJsZWRTdGF0ZT8oaXNEaXNhYmxlZDogYm9vbGVhbik6IHZvaWQge1xyXG4gICAgdGhpcy5pc0Rpc2FibGVkID0gaXNEaXNhYmxlZDtcclxuICB9XHJcblxyXG4gIHZhbGlkYXRlKGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbCk6IFZhbGlkYXRpb25FcnJvcnMgfCBhbnkge1xyXG4gICAgdGhpcy5jb250cm9scyA9IGNvbnRyb2w7XHJcblxyXG4gICAgaWYgKCF0aGlzLl9pbml0VmFsdWUpIHtcclxuICAgICAgaWYgKHRoaXMuX3RlbXBWYWx1ZSkge1xyXG4gICAgICAgIHRoaXMuX3JlbmRlci5zZXRQcm9wZXJ0eShjb250cm9sLCAndmFsdWUnLCB0aGlzLl90ZW1wVmFsdWUpO1xyXG4gICAgICB9XHJcbiAgICAgIHRoaXMuX2luaXRWYWx1ZSA9IHRydWU7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gbnVsbDtcclxuICB9XHJcblxyXG4gIHJlZ2lzdGVyT25WYWxpZGF0b3JDaGFuZ2U/KGZuOiAoKSA9PiB2b2lkKTogdm9pZCB7XHJcbiAgICB0aGlzLm9uVmFsaWRhdGlvbkNoYW5nZSA9IGZuO1xyXG4gIH1cclxuXHJcbiAgb3BlbihkOiBOZ2JJbnB1dERhdGVwaWNrZXIpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLmlucHV0ID09PSBudWxsKSB7XHJcbiAgICAgIHRoaXMuZGF0ZSA9IHRoaXMudG9kYXk7XHJcbiAgICAgIHRoaXMudGltZSA9IHtcclxuICAgICAgICBob3VyOiBuZXcgRGF0ZSgpLmdldEhvdXJzKCksXHJcbiAgICAgICAgbWludXRlOiBuZXcgRGF0ZSgpLmdldE1pbnV0ZXMoKSxcclxuICAgICAgICBzZWNvbmQ6IG5ldyBEYXRlKCkuZ2V0U2Vjb25kcygpLFxyXG4gICAgICB9O1xyXG4gICAgICB0aGlzLmlucHV0ID0gbmV3IERhdGVUaW1lTW9kZWwoT2JqZWN0LmFzc2lnbih0aGlzLmRhdGUsIHRoaXMudGltZSkpO1xyXG4gICAgICBjb25zdCBlbWl0VmFsdWUgPSB0aGlzLmRhdGVQaXBlLnRyYW5zZm9ybSh0aGlzLmlucHV0LCAneXl5eS1NTS1kZFRISDptbScpO1xyXG4gICAgICB0aGlzLm9uVG91Y2goKTtcclxuICAgICAgdGhpcy5vbkNoYW5nZShlbWl0VmFsdWUpO1xyXG4gICAgfVxyXG4gICAgLy9hYnJpciBlbCBkYXRldGltZVxyXG4gICAgZC5vcGVuKCk7XHJcbiAgfVxyXG5cclxuICBnb05leHQoKTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5uZXh0ICE9IHVuZGVmaW5lZCkge1xyXG4gICAgICBpZiAodGhpcy5uZXh0LmRpc2FibGVkIHx8IHRoaXMubmV4dC5yZWFkb25seSkge1xyXG4gICAgICAgIGlmICh0aGlzLm5leHRJc0Rpc2FibGUgIT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICB0aGlzLm5leHRJc0Rpc2FibGUuZm9jdXMoKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy5uZXh0LmZvY3VzKCk7XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGlmICh0aGlzLm5leHRJc0Rpc2FibGUgIT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgdGhpcy5uZXh0SXNEaXNhYmxlLmZvY3VzKCk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy5vbk5leHQuZW1pdCgpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBnb0JhY2soKTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5iYWNrICE9IHVuZGVmaW5lZCkge1xyXG4gICAgICBpZiAodGhpcy5iYWNrLmRpc2FibGVkIHx8IHRoaXMuYmFjay5yZWFkb25seSkge1xyXG4gICAgICAgIGlmICh0aGlzLmJhY2tJc0Rpc2FibGUgIT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICB0aGlzLmJhY2tJc0Rpc2FibGUuZm9jdXMoKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy5iYWNrLmZvY3VzKCk7XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGlmICh0aGlzLmJhY2tJc0Rpc2FibGUgIT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgdGhpcy5iYWNrSXNEaXNhYmxlLmZvY3VzKCk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy5vbkJhY2suZW1pdCgpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG59XHJcbiIsIjxsYWJlbCAqbmdJZj1cImxhYmVsICE9IG51bGwgJiYgbGFiZWwgIT0gJycgJiYgc2hvd0xhYmVsXCIgY2xhc3M9XCJkLWZsZXggc3VtYXgtbGFiZWwgbWItMCBwLTBcIlxyXG4gID48c3BhbiBbdGl0bGVdPVwibGFiZWxcIiBzdHlsZT1cIndoaXRlLXNwYWNlOiBub3dyYXA7IG92ZXJmbG93OiBoaWRkZW47IHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzXCI+e3sgbGFiZWwgfX08L3NwYW4+XHJcbiAgPHNwYW4gKm5nSWY9XCJyZXF1aXJlZFwiIGNsYXNzPVwibXMtMVwiIFtjbGFzcy50ZXh0LWRhbmdlcl09XCJjb250cm9scz8uZXJyb3JzICE9IG51bGxcIj4gKjwvc3Bhbj5cclxuICA8c3BhbiAqbmdJZj1cImxhYmVsSW5mb1wiPlxyXG4gICAgPGkgY2xhc3M9XCJmYSBmYS1leGNsYW1hdGlvbi1jaXJjbGUgdGV4dC1pbmZvIG1zLTJcIiBbbWF0VG9vbHRpcF09XCJ0ZXh0TGFiZWxJbmZvXCIgbWF0VG9vbHRpcENsYXNzPVwiYmctaW5mb1wiPjwvaT5cclxuICA8L3NwYW4+XHJcbjwvbGFiZWw+XHJcbjxkaXZcclxuICBbY2xhc3MuaW5wdXQtaWNvbl09XCJjb250cm9scz8uZXJyb3JzICE9IG51bGwgJiYgKGNvbnRyb2xzPy5kaXJ0eSB8fCBjb250cm9scz8udG91Y2hlZCkgJiYgc3VibWl0dGVkXCJcclxuICBjbGFzcz1cInBvc2l0aW9uLXJlbGF0aXZlXCJcclxuICBbY2xhc3MucmlnaHRdPVwiY29udHJvbHM/LmVycm9ycyAhPSBudWxsICYmIChjb250cm9scz8uZGlydHkgfHwgY29udHJvbHM/LnRvdWNoZWQpICYmIHN1Ym1pdHRlZFwiPlxyXG4gIDwhLS0gdG9vbHRpcC1tZXNzYWdlIGVzIGVsIGljb25vIGRlIGVycm9yIC0tPlxyXG5cclxuICA8dG9vbHRpcC1tZXNzYWdlXHJcbiAgICBbbGFiZWxdPVwibGFiZWxcIlxyXG4gICAgW2NvbnRyb2xzXT1cImNvbnRyb2xzXCJcclxuICAgIFt2YWxpZGF0b3JNZXNzYWdlXT1cInZhbGlkYXRvck1lc3NhZ2VcIlxyXG4gICAgW3Rvb2x0aXBNZXNzYWdlXT1cInRvb2x0aXBNZXNzYWdlXCJcclxuICAgIFtzdWJtaXR0ZWRdPVwic3VibWl0dGVkXCI+PC90b29sdGlwLW1lc3NhZ2U+XHJcbiAgPGRpdiBjbGFzcz1cImlucHV0LWdyb3VwIG1yLTJcIj5cclxuICAgIDxpbnB1dCBuYW1lPVwiaW5wdXRcIiB0eXBlPVwidGV4dFwiIGNsYXNzPVwiZm9ybS1jb250cm9sIGZvcm0tY29udHJvbC1zbVwiIFtkaXNhYmxlZF09XCJ0cnVlXCIgW25nTW9kZWxdPVwiaW5wdXQgfCBkYXRlOiBpbnB1dERhdGV0aW1lRm9ybWF0XCIgLz5cclxuICAgIDxpbnB1dFxyXG4gICAgICBjbGFzcz1cImZvcm0tY29udHJvbCBmb3JtLWNvbnRyb2wtc21cIlxyXG4gICAgICBjb250YWluZXI9XCJib2R5XCJcclxuICAgICAgW3JlYWRvbmx5XT1cInRydWVcIlxyXG4gICAgICBwbGFjZWhvbGRlcj1cImRkL21tL3l5eXlcIlxyXG4gICAgICBuYW1lPVwiZHBcIlxyXG4gICAgICBbKG5nTW9kZWwpXT1cImRhdGVcIlxyXG4gICAgICAobmdNb2RlbENoYW5nZSk9XCJvbk1vZGVsRGF0ZUNoYW5nZSgkZXZlbnQpXCJcclxuICAgICAgW2F1dG9DbG9zZV09XCInb3V0c2lkZSdcIlxyXG4gICAgICBuZ2JEYXRlcGlja2VyXHJcbiAgICAgIFtmb290ZXJUZW1wbGF0ZV09XCJmb290ZXJUZW1wbGF0ZVwiXHJcbiAgICAgIFttaW5EYXRlXT1cInsgeWVhcjogMTk2MCwgbW9udGg6IDEsIGRheTogMSB9XCJcclxuICAgICAgI2Q9XCJuZ2JEYXRlcGlja2VyXCIgLz5cclxuICAgIDwhLS0gKGRhdGVTZWxlY3QpPVwib25EYXRlU2VsZWN0KCRldmVudClcIiAtLT5cclxuICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1ncm91cC1hcHBlbmRcIj5cclxuICAgICAgPGJ1dHRvblxyXG4gICAgICAgICNidG5PcGVuXHJcbiAgICAgICAgY2xhc3M9XCJidG4gYnRuLWluZm8gcC0wIHJvdW5kZWQtMCBoLTEwMFwiXHJcbiAgICAgICAgW2Rpc2FibGVkXT1cImlzRGlzYWJsZWQgfHwgcmVhZG9ubHlcIlxyXG4gICAgICAgIChjbGljayk9XCJvcGVuKGQpXCJcclxuICAgICAgICAoa2V5dXAuQXJyb3dMZWZ0KT1cImdvQmFjaygpXCJcclxuICAgICAgICAoa2V5dXAuQXJyb3dSaWdodCk9XCJidG5DbGVhbi5mb2N1cygpXCJcclxuICAgICAgICB0eXBlPVwiYnV0dG9uXCI+XHJcbiAgICAgICAgPCEtLSA8bWF0LWljb24gY2xhc3M9XCJ0ZXh0LXdoaXRlIHB0LTFcIiBzdHlsZT1cImZvbnQtc2l6ZTogMThweDtcIiBbbWF0VG9vbHRpcF09XCInQ2FsZW5kYXJpbydcIiBtYXRUb29sdGlwQ2xhc3M9XCJiZy1pbmZvXCI+Y2FsZW5kYXJfdG9kYXk8L21hdC1pY29uPiAtLT5cclxuICAgICAgICA8aSBhcmlhLWhpZGRlbj1cInRydWVcIiBjbGFzcz1cImZhIGZhLWNhbGVuZGFyIHRleHQtbGlnaHQgcHgtMVwiPjwvaT5cclxuICAgICAgPC9idXR0b24+XHJcbiAgICAgIDxidXR0b25cclxuICAgICAgICAjYnRuQ2xlYW5cclxuICAgICAgICBjbGFzcz1cImJ0biBidG4tZGFuZ2VyIHAtMCByb3VuZGVkLTAgbGltcGlhciBoLTEwMFwiXHJcbiAgICAgICAgW2Rpc2FibGVkXT1cImlzRGlzYWJsZWQgfHwgcmVhZG9ubHlcIlxyXG4gICAgICAgIChjbGljayk9XCJsaW1waWFyKClcIlxyXG4gICAgICAgIChrZXl1cC5BcnJvd0xlZnQpPVwiYnRuT3Blbi5mb2N1cygpXCJcclxuICAgICAgICAoa2V5dXAuQXJyb3dSaWdodCk9XCJnb05leHQoKVwiXHJcbiAgICAgICAgdHlwZT1cImJ1dHRvblwiPlxyXG4gICAgICAgIDwhLS0gPG1hdC1pY29uIGNsYXNzPVwidGV4dC13aGl0ZSBwdC0xXCIgc3R5bGU9XCJmb250LXNpemU6IDE4cHg7XCIgW21hdFRvb2x0aXBdPVwiJ0xpbXBpYXInXCIgbWF0VG9vbHRpcENsYXNzPVwiYmctZGFuZ2VyXCI+Y2xvc2U8L21hdC1pY29uPiAtLT5cclxuICAgICAgICA8aSBhcmlhLWhpZGRlbj1cInRydWVcIiBjbGFzcz1cImZhIGZhLXRpbWVzIHB4LTEgdGV4dC1saWdodFwiPjwvaT5cclxuICAgICAgPC9idXR0b24+XHJcbiAgICA8L2Rpdj5cclxuICA8L2Rpdj5cclxuPC9kaXY+XHJcblxyXG48bmctdGVtcGxhdGUgI2Zvb3RlclRlbXBsYXRlPlxyXG4gIDxociBjbGFzcz1cIm15LTBcIiAvPlxyXG4gIDxuZ2ItdGltZXBpY2tlciAjdHAgWyhuZ01vZGVsKV09XCJ0aW1lXCIgbmFtZT1cInRpbWVwaWNrZXJcIiAobmdNb2RlbENoYW5nZSk9XCJvbk1vZGVsRGF0ZUNoYW5nZSgkZXZlbnQpXCIgKGZvY3Vzb3V0KT1cImZvY3VzT3V0KCRldmVudClcIj5cclxuICA8L25nYi10aW1lcGlja2VyPlxyXG48L25nLXRlbXBsYXRlPlxyXG48IS0tIGVycm9yLW1lc3NhZ2UgZXMgZWwgbWFuc2FqZSBxdWUgYXBhcmVjZSBhYmFqbyBkZWwgY29tcG9uZW50ZSAtLT5cclxuPGVycm9yLW1lc3NhZ2VcclxuICBbbGFiZWxdPVwibGFiZWxcIlxyXG4gIFtjb250cm9sc109XCJjb250cm9sc1wiXHJcbiAgW3ZhbGlkYXRvck1lc3NhZ2VdPVwidmFsaWRhdG9yTWVzc2FnZVwiXHJcbiAgW3Rvb2x0aXBNZXNzYWdlXT1cInRvb2x0aXBNZXNzYWdlXCJcclxuICBbc3VibWl0dGVkXT1cInN1Ym1pdHRlZFwiPjwvZXJyb3ItbWVzc2FnZT5cclxuIl19
|