igniteui-angular 16.1.13 → 16.1.14

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.
@@ -997,7 +997,7 @@ export class IgxTimePickerComponent extends PickerBaseDirective {
997
997
  useExisting: IgxTimePickerComponent,
998
998
  multi: true
999
999
  }
1000
- ], queries: [{ propertyName: "label", first: true, predicate: IgxLabelDirective, descendants: true }, { propertyName: "timePickerActionsDirective", first: true, predicate: IgxPickerActionsDirective, descendants: true }, { propertyName: "clearComponents", predicate: IgxPickerClearComponent }], viewQueries: [{ propertyName: "hourList", first: true, predicate: ["hourList"], descendants: true }, { propertyName: "minuteList", first: true, predicate: ["minuteList"], descendants: true }, { propertyName: "secondsList", first: true, predicate: ["secondsList"], descendants: true }, { propertyName: "ampmList", first: true, predicate: ["ampmList"], descendants: true }, { propertyName: "inputDirective", first: true, predicate: IgxInputDirective, descendants: true, read: IgxInputDirective }, { propertyName: "_inputGroup", first: true, predicate: IgxInputGroupComponent, descendants: true }, { propertyName: "dateTimeEditor", first: true, predicate: IgxDateTimeEditorDirective, descendants: true, static: true }, { propertyName: "toggleRef", first: true, predicate: IgxToggleDirective, descendants: true }], usesInheritance: true, ngImport: i0, template: "<igx-input-group [displayDensity]=\"displayDensity\" [type]=\"type\" [suppressInputAutofocus]=\"isDropdown\">\n <input [displayValuePipe]=\"formatter ? displayValue : null\" igxInput [igxDateTimeEditor]=\"inputFormat\"\n type=\"text\" [readonly]=\"!isDropdown || readOnly\" [minValue]=\"minValue\" [maxValue]=\"maxValue\"\n [locale]=\"locale\" [spinDelta]=\"itemsDelta\" [spinLoop]=\"spinLoop\" [placeholder]=\"placeholder\"\n [disabled]=\"disabled\" [displayFormat]=\"displayFormat\"\n [igxTextSelection]=\"isDropdown && !readOnly\" role=\"combobox\" aria-haspopup=\"dialog\"\n [attr.aria-expanded]=\"!toggleDirective.collapsed\" [attr.aria-labelledby]=\"label?.id\"\n (click)=\"!isDropdown && toggle()\"/>\n\n <igx-prefix *ngIf=\"!toggleComponents.length\" (click)=\"toggle()\">\n <igx-icon [title]=\"value ? resourceStrings.igx_time_picker_change_time : resourceStrings.igx_time_picker_choose_time\">access_time</igx-icon>\n </igx-prefix>\n\n <ng-container ngProjectAs=\"[igxLabel]\">\n <ng-content select=\"[igxLabel]\"></ng-content>\n </ng-container>\n <ng-container ngProjectAs=\"igx-prefix\">\n <ng-content select=\"igx-prefix,[igxPrefix]\"></ng-content>\n </ng-container>\n\n <igx-suffix *ngIf=\"showClearButton\" (click)=\"clear(); $event.stopPropagation()\">\n <igx-icon>clear</igx-icon>\n </igx-suffix>\n\n <ng-container ngProjectAs=\"igx-suffix\">\n <ng-content select=\"igx-suffix,[igxSuffix]\"></ng-content>\n </ng-container>\n <ng-container ngProjectAs=\"igx-hint\">\n <ng-content select=\"igx-hint,[igxHint]\"></ng-content>\n </ng-container>\n</igx-input-group>\n\n<ng-template #defaultTimePickerActions>\n <div *ngIf=\"cancelButtonLabel || okButtonLabel\" class=\"igx-time-picker__buttons\">\n <button *ngIf=\"cancelButtonLabel\" type=\"button\" igxButton=\"flat\" (click)=\"cancelButtonClick()\">\n {{cancelButtonLabel}}\n </button>\n <button *ngIf=\"okButtonLabel\" type=\"button\" igxButton=\"flat\" (click)=\"okButtonClick()\">\n {{okButtonLabel}}\n </button>\n </div>\n</ng-template>\n\n<div #toggleDirective=\"toggle\" igxToggle role=\"dialog\" class=\"igx-time-picker\"\n [ngClass]=\"{'igx-time-picker--dropdown': isDropdown, 'igx-time-picker--vertical': isVertical && !isDropdown}\">\n <div *ngIf=\"!isDropdown\" class=\"igx-time-picker__header\">\n <h2 class=\"igx-time-picker__header-hour\">\n <span>{{ selectedDate | timeFormatPipe }}</span>\n </h2>\n </div>\n <div class=\"igx-time-picker__main\">\n <div class=\"igx-time-picker__body\">\n <div *ngIf=\"showHoursList\" #hourList [igxItemList]=\"'hourList'\">\n <span [igxTimeItem]=\"hour\" #timeItem=\"timeItem\" aria-label=\"hour\"\n [attr.role]=\"timeItem.isSelectedTime ? 'spinbutton' : null\"\n [attr.aria-valuenow]=\"timeItem.isSelectedTime ? timeItem.hourValue : null\"\n [attr.aria-valuemin]=\"timeItem.isSelectedTime ? timeItem.minValue : null\"\n [attr.aria-valuemax]=\"timeItem.isSelectedTime ? timeItem.maxValue : null\"\n *ngFor=\"let hour of hourItems | timeItemPipe:'hour':selectedDate:minDropdownValue:maxDropdownValue\">{{ hour }}</span>\n </div>\n <div *ngIf=\"showMinutesList\" #minuteList [igxItemList]=\"'minuteList'\">\n <span [igxTimeItem]=\"minute\" #timeItem=\"timeItem\" aria-label=\"minutes\"\n [attr.role]=\"timeItem.isSelectedTime ? 'spinbutton' : null\"\n [attr.aria-valuenow]=\"timeItem.isSelectedTime ? minute : null\"\n [attr.aria-valuemin]=\"timeItem.isSelectedTime ? timeItem.minValue : null\"\n [attr.aria-valuemax]=\"timeItem.isSelectedTime ? timeItem.maxValue : null\"\n *ngFor=\"let minute of minuteItems | timeItemPipe:'minutes':selectedDate:minDropdownValue:maxDropdownValue\">{{ minute }}</span>\n </div>\n <div *ngIf=\"showSecondsList\" #secondsList [igxItemList]=\"'secondsList'\">\n <span [igxTimeItem]=\"seconds\" #timeItem=\"timeItem\" aria-label=\"seconds\"\n [attr.role]=\"timeItem.isSelectedTime ? 'spinbutton' : null\"\n [attr.aria-valuenow]=\"timeItem.isSelectedTime ? seconds : null\"\n [attr.aria-valuemin]=\"timeItem.isSelectedTime ? timeItem.minValue : null\"\n [attr.aria-valuemax]=\"timeItem.isSelectedTime ? timeItem.maxValue : null\"\n *ngFor=\"let seconds of secondsItems | timeItemPipe:'seconds':selectedDate:minDropdownValue:maxDropdownValue\">{{ seconds }}</span>\n </div>\n <div *ngIf=\"showAmPmList\" #ampmList [igxItemList]=\"'ampmList'\">\n <span [igxTimeItem]=\"ampm\" #timeItem=\"timeItem\" aria-label=\"ampm\"\n [attr.role]=\"timeItem.isSelectedTime ? 'spinbutton' : null\"\n [attr.aria-valuenow]=\"timeItem.isSelectedTime ? ampm : null\"\n [attr.aria-valuemin]=\"timeItem.isSelectedTime ? timeItem.minValue : null\"\n [attr.aria-valuemax]=\"timeItem.isSelectedTime ? timeItem.maxValue : null\"\n *ngFor=\"let ampm of ampmItems | timeItemPipe:'ampm':selectedDate:minDropdownValue:maxDropdownValue\">{{ ampm }}</span>\n </div>\n </div>\n <ng-container\n *ngTemplateOutlet=\"timePickerActionsDirective ? timePickerActionsDirective.template : defaultTimePickerActions\">\n </ng-container>\n </div>\n</div>\n", styles: [":host{display:block}\n"], dependencies: [{ kind: "component", type: IgxInputGroupComponent, selector: "igx-input-group", inputs: ["resourceStrings", "suppressInputAutofocus", "type", "theme"] }, { kind: "directive", type: IgxInputDirective, selector: "[igxInput]", inputs: ["value", "disabled", "required"], exportAs: ["igxInput"] }, { kind: "directive", type: IgxDateTimeEditorDirective, selector: "[igxDateTimeEditor]", inputs: ["locale", "minValue", "maxValue", "spinLoop", "displayFormat", "igxDateTimeEditor", "value", "spinDelta"], outputs: ["valueChange", "validationFailed"], exportAs: ["igxDateTimeEditor"] }, { kind: "directive", type: IgxTextSelectionDirective, selector: "[igxTextSelection]", inputs: ["igxTextSelection"], exportAs: ["igxTextSelection"] }, { kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: IgxPrefixDirective, selector: "igx-prefix,[igxPrefix],[igxStart]" }, { kind: "component", type: IgxIconComponent, selector: "igx-icon", inputs: ["family", "active", "name"] }, { kind: "directive", type: IgxSuffixDirective, selector: "igx-suffix,[igxSuffix],[igxEnd]" }, { kind: "directive", type: IgxButtonDirective, selector: "[igxButton]", inputs: ["selected", "igxButton", "igxButtonColor", "igxButtonBackground", "igxLabel", "disabled"], outputs: ["buttonClick", "buttonSelected"] }, { kind: "directive", type: IgxToggleDirective, selector: "[igxToggle]", inputs: ["id"], outputs: ["opened", "opening", "closed", "closing", "appended"], exportAs: ["toggle"] }, { kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: IgxItemListDirective, selector: "[igxItemList]", inputs: ["igxItemList"] }, { kind: "directive", type: NgFor, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: IgxTimeItemDirective, selector: "[igxTimeItem]", inputs: ["igxTimeItem"], exportAs: ["timeItem"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "pipe", type: TimeFormatPipe, name: "timeFormatPipe" }, { kind: "pipe", type: TimeItemPipe, name: "timeItemPipe" }] }); }
1000
+ ], queries: [{ propertyName: "label", first: true, predicate: IgxLabelDirective, descendants: true }, { propertyName: "timePickerActionsDirective", first: true, predicate: IgxPickerActionsDirective, descendants: true }, { propertyName: "clearComponents", predicate: IgxPickerClearComponent }], viewQueries: [{ propertyName: "hourList", first: true, predicate: ["hourList"], descendants: true }, { propertyName: "minuteList", first: true, predicate: ["minuteList"], descendants: true }, { propertyName: "secondsList", first: true, predicate: ["secondsList"], descendants: true }, { propertyName: "ampmList", first: true, predicate: ["ampmList"], descendants: true }, { propertyName: "inputDirective", first: true, predicate: IgxInputDirective, descendants: true, read: IgxInputDirective }, { propertyName: "_inputGroup", first: true, predicate: IgxInputGroupComponent, descendants: true }, { propertyName: "dateTimeEditor", first: true, predicate: IgxDateTimeEditorDirective, descendants: true, static: true }, { propertyName: "toggleRef", first: true, predicate: IgxToggleDirective, descendants: true }], usesInheritance: true, ngImport: i0, template: "<igx-input-group [displayDensity]=\"displayDensity\" [type]=\"type\">\n <input [displayValuePipe]=\"formatter ? displayValue : null\" igxInput [igxDateTimeEditor]=\"inputFormat\"\n type=\"text\" [readonly]=\"!isDropdown || readOnly\" [minValue]=\"minValue\" [maxValue]=\"maxValue\"\n [locale]=\"locale\" [spinDelta]=\"itemsDelta\" [spinLoop]=\"spinLoop\" [placeholder]=\"placeholder\"\n [disabled]=\"disabled\" [displayFormat]=\"displayFormat\"\n [igxTextSelection]=\"isDropdown && !readOnly\" role=\"combobox\" aria-haspopup=\"dialog\"\n [attr.aria-expanded]=\"!toggleDirective.collapsed\" [attr.aria-labelledby]=\"label?.id\"\n (click)=\"!isDropdown && toggle()\"/>\n\n <igx-prefix *ngIf=\"!toggleComponents.length\" (click)=\"toggle()\">\n <igx-icon [title]=\"value ? resourceStrings.igx_time_picker_change_time : resourceStrings.igx_time_picker_choose_time\">access_time</igx-icon>\n </igx-prefix>\n\n <ng-container ngProjectAs=\"[igxLabel]\">\n <ng-content select=\"[igxLabel]\"></ng-content>\n </ng-container>\n <ng-container ngProjectAs=\"igx-prefix\">\n <ng-content select=\"igx-prefix,[igxPrefix]\"></ng-content>\n </ng-container>\n\n <igx-suffix *ngIf=\"showClearButton\" (click)=\"clear(); $event.stopPropagation()\">\n <igx-icon>clear</igx-icon>\n </igx-suffix>\n\n <ng-container ngProjectAs=\"igx-suffix\">\n <ng-content select=\"igx-suffix,[igxSuffix]\"></ng-content>\n </ng-container>\n <ng-container ngProjectAs=\"igx-hint\">\n <ng-content select=\"igx-hint,[igxHint]\"></ng-content>\n </ng-container>\n</igx-input-group>\n\n<ng-template #defaultTimePickerActions>\n <div *ngIf=\"cancelButtonLabel || okButtonLabel\" class=\"igx-time-picker__buttons\">\n <button *ngIf=\"cancelButtonLabel\" type=\"button\" igxButton=\"flat\" (click)=\"cancelButtonClick()\">\n {{cancelButtonLabel}}\n </button>\n <button *ngIf=\"okButtonLabel\" type=\"button\" igxButton=\"flat\" (click)=\"okButtonClick()\">\n {{okButtonLabel}}\n </button>\n </div>\n</ng-template>\n\n<div #toggleDirective=\"toggle\" igxToggle role=\"dialog\" class=\"igx-time-picker\"\n [ngClass]=\"{'igx-time-picker--dropdown': isDropdown, 'igx-time-picker--vertical': isVertical && !isDropdown}\">\n <div *ngIf=\"!isDropdown\" class=\"igx-time-picker__header\">\n <h2 class=\"igx-time-picker__header-hour\">\n <span>{{ selectedDate | timeFormatPipe }}</span>\n </h2>\n </div>\n <div class=\"igx-time-picker__main\">\n <div class=\"igx-time-picker__body\">\n <div *ngIf=\"showHoursList\" #hourList [igxItemList]=\"'hourList'\">\n <span [igxTimeItem]=\"hour\" #timeItem=\"timeItem\" aria-label=\"hour\"\n [attr.role]=\"timeItem.isSelectedTime ? 'spinbutton' : null\"\n [attr.aria-valuenow]=\"timeItem.isSelectedTime ? timeItem.hourValue : null\"\n [attr.aria-valuemin]=\"timeItem.isSelectedTime ? timeItem.minValue : null\"\n [attr.aria-valuemax]=\"timeItem.isSelectedTime ? timeItem.maxValue : null\"\n *ngFor=\"let hour of hourItems | timeItemPipe:'hour':selectedDate:minDropdownValue:maxDropdownValue\">{{ hour }}</span>\n </div>\n <div *ngIf=\"showMinutesList\" #minuteList [igxItemList]=\"'minuteList'\">\n <span [igxTimeItem]=\"minute\" #timeItem=\"timeItem\" aria-label=\"minutes\"\n [attr.role]=\"timeItem.isSelectedTime ? 'spinbutton' : null\"\n [attr.aria-valuenow]=\"timeItem.isSelectedTime ? minute : null\"\n [attr.aria-valuemin]=\"timeItem.isSelectedTime ? timeItem.minValue : null\"\n [attr.aria-valuemax]=\"timeItem.isSelectedTime ? timeItem.maxValue : null\"\n *ngFor=\"let minute of minuteItems | timeItemPipe:'minutes':selectedDate:minDropdownValue:maxDropdownValue\">{{ minute }}</span>\n </div>\n <div *ngIf=\"showSecondsList\" #secondsList [igxItemList]=\"'secondsList'\">\n <span [igxTimeItem]=\"seconds\" #timeItem=\"timeItem\" aria-label=\"seconds\"\n [attr.role]=\"timeItem.isSelectedTime ? 'spinbutton' : null\"\n [attr.aria-valuenow]=\"timeItem.isSelectedTime ? seconds : null\"\n [attr.aria-valuemin]=\"timeItem.isSelectedTime ? timeItem.minValue : null\"\n [attr.aria-valuemax]=\"timeItem.isSelectedTime ? timeItem.maxValue : null\"\n *ngFor=\"let seconds of secondsItems | timeItemPipe:'seconds':selectedDate:minDropdownValue:maxDropdownValue\">{{ seconds }}</span>\n </div>\n <div *ngIf=\"showAmPmList\" #ampmList [igxItemList]=\"'ampmList'\">\n <span [igxTimeItem]=\"ampm\" #timeItem=\"timeItem\" aria-label=\"ampm\"\n [attr.role]=\"timeItem.isSelectedTime ? 'spinbutton' : null\"\n [attr.aria-valuenow]=\"timeItem.isSelectedTime ? ampm : null\"\n [attr.aria-valuemin]=\"timeItem.isSelectedTime ? timeItem.minValue : null\"\n [attr.aria-valuemax]=\"timeItem.isSelectedTime ? timeItem.maxValue : null\"\n *ngFor=\"let ampm of ampmItems | timeItemPipe:'ampm':selectedDate:minDropdownValue:maxDropdownValue\">{{ ampm }}</span>\n </div>\n </div>\n <ng-container\n *ngTemplateOutlet=\"timePickerActionsDirective ? timePickerActionsDirective.template : defaultTimePickerActions\">\n </ng-container>\n </div>\n</div>\n", styles: [":host{display:block}\n"], dependencies: [{ kind: "component", type: IgxInputGroupComponent, selector: "igx-input-group", inputs: ["resourceStrings", "suppressInputAutofocus", "type", "theme"] }, { kind: "directive", type: IgxInputDirective, selector: "[igxInput]", inputs: ["value", "disabled", "required"], exportAs: ["igxInput"] }, { kind: "directive", type: IgxDateTimeEditorDirective, selector: "[igxDateTimeEditor]", inputs: ["locale", "minValue", "maxValue", "spinLoop", "displayFormat", "igxDateTimeEditor", "value", "spinDelta"], outputs: ["valueChange", "validationFailed"], exportAs: ["igxDateTimeEditor"] }, { kind: "directive", type: IgxTextSelectionDirective, selector: "[igxTextSelection]", inputs: ["igxTextSelection"], exportAs: ["igxTextSelection"] }, { kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: IgxPrefixDirective, selector: "igx-prefix,[igxPrefix],[igxStart]" }, { kind: "component", type: IgxIconComponent, selector: "igx-icon", inputs: ["family", "active", "name"] }, { kind: "directive", type: IgxSuffixDirective, selector: "igx-suffix,[igxSuffix],[igxEnd]" }, { kind: "directive", type: IgxButtonDirective, selector: "[igxButton]", inputs: ["selected", "igxButton", "igxButtonColor", "igxButtonBackground", "igxLabel", "disabled"], outputs: ["buttonClick", "buttonSelected"] }, { kind: "directive", type: IgxToggleDirective, selector: "[igxToggle]", inputs: ["id"], outputs: ["opened", "opening", "closed", "closing", "appended"], exportAs: ["toggle"] }, { kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: IgxItemListDirective, selector: "[igxItemList]", inputs: ["igxItemList"] }, { kind: "directive", type: NgFor, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: IgxTimeItemDirective, selector: "[igxTimeItem]", inputs: ["igxTimeItem"], exportAs: ["timeItem"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "pipe", type: TimeFormatPipe, name: "timeFormatPipe" }, { kind: "pipe", type: TimeItemPipe, name: "timeItemPipe" }] }); }
1001
1001
  }
1002
1002
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.8", ngImport: i0, type: IgxTimePickerComponent, decorators: [{
1003
1003
  type: Component,
@@ -1016,7 +1016,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.8", ngImpor
1016
1016
  useExisting: IgxTimePickerComponent,
1017
1017
  multi: true
1018
1018
  }
1019
- ], selector: 'igx-time-picker', standalone: true, imports: [IgxInputGroupComponent, IgxInputDirective, IgxDateTimeEditorDirective, IgxTextSelectionDirective, NgIf, IgxPrefixDirective, IgxIconComponent, IgxSuffixDirective, IgxButtonDirective, IgxToggleDirective, NgClass, IgxItemListDirective, NgFor, IgxTimeItemDirective, NgTemplateOutlet, TimeFormatPipe, TimeItemPipe], template: "<igx-input-group [displayDensity]=\"displayDensity\" [type]=\"type\" [suppressInputAutofocus]=\"isDropdown\">\n <input [displayValuePipe]=\"formatter ? displayValue : null\" igxInput [igxDateTimeEditor]=\"inputFormat\"\n type=\"text\" [readonly]=\"!isDropdown || readOnly\" [minValue]=\"minValue\" [maxValue]=\"maxValue\"\n [locale]=\"locale\" [spinDelta]=\"itemsDelta\" [spinLoop]=\"spinLoop\" [placeholder]=\"placeholder\"\n [disabled]=\"disabled\" [displayFormat]=\"displayFormat\"\n [igxTextSelection]=\"isDropdown && !readOnly\" role=\"combobox\" aria-haspopup=\"dialog\"\n [attr.aria-expanded]=\"!toggleDirective.collapsed\" [attr.aria-labelledby]=\"label?.id\"\n (click)=\"!isDropdown && toggle()\"/>\n\n <igx-prefix *ngIf=\"!toggleComponents.length\" (click)=\"toggle()\">\n <igx-icon [title]=\"value ? resourceStrings.igx_time_picker_change_time : resourceStrings.igx_time_picker_choose_time\">access_time</igx-icon>\n </igx-prefix>\n\n <ng-container ngProjectAs=\"[igxLabel]\">\n <ng-content select=\"[igxLabel]\"></ng-content>\n </ng-container>\n <ng-container ngProjectAs=\"igx-prefix\">\n <ng-content select=\"igx-prefix,[igxPrefix]\"></ng-content>\n </ng-container>\n\n <igx-suffix *ngIf=\"showClearButton\" (click)=\"clear(); $event.stopPropagation()\">\n <igx-icon>clear</igx-icon>\n </igx-suffix>\n\n <ng-container ngProjectAs=\"igx-suffix\">\n <ng-content select=\"igx-suffix,[igxSuffix]\"></ng-content>\n </ng-container>\n <ng-container ngProjectAs=\"igx-hint\">\n <ng-content select=\"igx-hint,[igxHint]\"></ng-content>\n </ng-container>\n</igx-input-group>\n\n<ng-template #defaultTimePickerActions>\n <div *ngIf=\"cancelButtonLabel || okButtonLabel\" class=\"igx-time-picker__buttons\">\n <button *ngIf=\"cancelButtonLabel\" type=\"button\" igxButton=\"flat\" (click)=\"cancelButtonClick()\">\n {{cancelButtonLabel}}\n </button>\n <button *ngIf=\"okButtonLabel\" type=\"button\" igxButton=\"flat\" (click)=\"okButtonClick()\">\n {{okButtonLabel}}\n </button>\n </div>\n</ng-template>\n\n<div #toggleDirective=\"toggle\" igxToggle role=\"dialog\" class=\"igx-time-picker\"\n [ngClass]=\"{'igx-time-picker--dropdown': isDropdown, 'igx-time-picker--vertical': isVertical && !isDropdown}\">\n <div *ngIf=\"!isDropdown\" class=\"igx-time-picker__header\">\n <h2 class=\"igx-time-picker__header-hour\">\n <span>{{ selectedDate | timeFormatPipe }}</span>\n </h2>\n </div>\n <div class=\"igx-time-picker__main\">\n <div class=\"igx-time-picker__body\">\n <div *ngIf=\"showHoursList\" #hourList [igxItemList]=\"'hourList'\">\n <span [igxTimeItem]=\"hour\" #timeItem=\"timeItem\" aria-label=\"hour\"\n [attr.role]=\"timeItem.isSelectedTime ? 'spinbutton' : null\"\n [attr.aria-valuenow]=\"timeItem.isSelectedTime ? timeItem.hourValue : null\"\n [attr.aria-valuemin]=\"timeItem.isSelectedTime ? timeItem.minValue : null\"\n [attr.aria-valuemax]=\"timeItem.isSelectedTime ? timeItem.maxValue : null\"\n *ngFor=\"let hour of hourItems | timeItemPipe:'hour':selectedDate:minDropdownValue:maxDropdownValue\">{{ hour }}</span>\n </div>\n <div *ngIf=\"showMinutesList\" #minuteList [igxItemList]=\"'minuteList'\">\n <span [igxTimeItem]=\"minute\" #timeItem=\"timeItem\" aria-label=\"minutes\"\n [attr.role]=\"timeItem.isSelectedTime ? 'spinbutton' : null\"\n [attr.aria-valuenow]=\"timeItem.isSelectedTime ? minute : null\"\n [attr.aria-valuemin]=\"timeItem.isSelectedTime ? timeItem.minValue : null\"\n [attr.aria-valuemax]=\"timeItem.isSelectedTime ? timeItem.maxValue : null\"\n *ngFor=\"let minute of minuteItems | timeItemPipe:'minutes':selectedDate:minDropdownValue:maxDropdownValue\">{{ minute }}</span>\n </div>\n <div *ngIf=\"showSecondsList\" #secondsList [igxItemList]=\"'secondsList'\">\n <span [igxTimeItem]=\"seconds\" #timeItem=\"timeItem\" aria-label=\"seconds\"\n [attr.role]=\"timeItem.isSelectedTime ? 'spinbutton' : null\"\n [attr.aria-valuenow]=\"timeItem.isSelectedTime ? seconds : null\"\n [attr.aria-valuemin]=\"timeItem.isSelectedTime ? timeItem.minValue : null\"\n [attr.aria-valuemax]=\"timeItem.isSelectedTime ? timeItem.maxValue : null\"\n *ngFor=\"let seconds of secondsItems | timeItemPipe:'seconds':selectedDate:minDropdownValue:maxDropdownValue\">{{ seconds }}</span>\n </div>\n <div *ngIf=\"showAmPmList\" #ampmList [igxItemList]=\"'ampmList'\">\n <span [igxTimeItem]=\"ampm\" #timeItem=\"timeItem\" aria-label=\"ampm\"\n [attr.role]=\"timeItem.isSelectedTime ? 'spinbutton' : null\"\n [attr.aria-valuenow]=\"timeItem.isSelectedTime ? ampm : null\"\n [attr.aria-valuemin]=\"timeItem.isSelectedTime ? timeItem.minValue : null\"\n [attr.aria-valuemax]=\"timeItem.isSelectedTime ? timeItem.maxValue : null\"\n *ngFor=\"let ampm of ampmItems | timeItemPipe:'ampm':selectedDate:minDropdownValue:maxDropdownValue\">{{ ampm }}</span>\n </div>\n </div>\n <ng-container\n *ngTemplateOutlet=\"timePickerActionsDirective ? timePickerActionsDirective.template : defaultTimePickerActions\">\n </ng-container>\n </div>\n</div>\n", styles: [":host{display:block}\n"] }]
1019
+ ], selector: 'igx-time-picker', standalone: true, imports: [IgxInputGroupComponent, IgxInputDirective, IgxDateTimeEditorDirective, IgxTextSelectionDirective, NgIf, IgxPrefixDirective, IgxIconComponent, IgxSuffixDirective, IgxButtonDirective, IgxToggleDirective, NgClass, IgxItemListDirective, NgFor, IgxTimeItemDirective, NgTemplateOutlet, TimeFormatPipe, TimeItemPipe], template: "<igx-input-group [displayDensity]=\"displayDensity\" [type]=\"type\">\n <input [displayValuePipe]=\"formatter ? displayValue : null\" igxInput [igxDateTimeEditor]=\"inputFormat\"\n type=\"text\" [readonly]=\"!isDropdown || readOnly\" [minValue]=\"minValue\" [maxValue]=\"maxValue\"\n [locale]=\"locale\" [spinDelta]=\"itemsDelta\" [spinLoop]=\"spinLoop\" [placeholder]=\"placeholder\"\n [disabled]=\"disabled\" [displayFormat]=\"displayFormat\"\n [igxTextSelection]=\"isDropdown && !readOnly\" role=\"combobox\" aria-haspopup=\"dialog\"\n [attr.aria-expanded]=\"!toggleDirective.collapsed\" [attr.aria-labelledby]=\"label?.id\"\n (click)=\"!isDropdown && toggle()\"/>\n\n <igx-prefix *ngIf=\"!toggleComponents.length\" (click)=\"toggle()\">\n <igx-icon [title]=\"value ? resourceStrings.igx_time_picker_change_time : resourceStrings.igx_time_picker_choose_time\">access_time</igx-icon>\n </igx-prefix>\n\n <ng-container ngProjectAs=\"[igxLabel]\">\n <ng-content select=\"[igxLabel]\"></ng-content>\n </ng-container>\n <ng-container ngProjectAs=\"igx-prefix\">\n <ng-content select=\"igx-prefix,[igxPrefix]\"></ng-content>\n </ng-container>\n\n <igx-suffix *ngIf=\"showClearButton\" (click)=\"clear(); $event.stopPropagation()\">\n <igx-icon>clear</igx-icon>\n </igx-suffix>\n\n <ng-container ngProjectAs=\"igx-suffix\">\n <ng-content select=\"igx-suffix,[igxSuffix]\"></ng-content>\n </ng-container>\n <ng-container ngProjectAs=\"igx-hint\">\n <ng-content select=\"igx-hint,[igxHint]\"></ng-content>\n </ng-container>\n</igx-input-group>\n\n<ng-template #defaultTimePickerActions>\n <div *ngIf=\"cancelButtonLabel || okButtonLabel\" class=\"igx-time-picker__buttons\">\n <button *ngIf=\"cancelButtonLabel\" type=\"button\" igxButton=\"flat\" (click)=\"cancelButtonClick()\">\n {{cancelButtonLabel}}\n </button>\n <button *ngIf=\"okButtonLabel\" type=\"button\" igxButton=\"flat\" (click)=\"okButtonClick()\">\n {{okButtonLabel}}\n </button>\n </div>\n</ng-template>\n\n<div #toggleDirective=\"toggle\" igxToggle role=\"dialog\" class=\"igx-time-picker\"\n [ngClass]=\"{'igx-time-picker--dropdown': isDropdown, 'igx-time-picker--vertical': isVertical && !isDropdown}\">\n <div *ngIf=\"!isDropdown\" class=\"igx-time-picker__header\">\n <h2 class=\"igx-time-picker__header-hour\">\n <span>{{ selectedDate | timeFormatPipe }}</span>\n </h2>\n </div>\n <div class=\"igx-time-picker__main\">\n <div class=\"igx-time-picker__body\">\n <div *ngIf=\"showHoursList\" #hourList [igxItemList]=\"'hourList'\">\n <span [igxTimeItem]=\"hour\" #timeItem=\"timeItem\" aria-label=\"hour\"\n [attr.role]=\"timeItem.isSelectedTime ? 'spinbutton' : null\"\n [attr.aria-valuenow]=\"timeItem.isSelectedTime ? timeItem.hourValue : null\"\n [attr.aria-valuemin]=\"timeItem.isSelectedTime ? timeItem.minValue : null\"\n [attr.aria-valuemax]=\"timeItem.isSelectedTime ? timeItem.maxValue : null\"\n *ngFor=\"let hour of hourItems | timeItemPipe:'hour':selectedDate:minDropdownValue:maxDropdownValue\">{{ hour }}</span>\n </div>\n <div *ngIf=\"showMinutesList\" #minuteList [igxItemList]=\"'minuteList'\">\n <span [igxTimeItem]=\"minute\" #timeItem=\"timeItem\" aria-label=\"minutes\"\n [attr.role]=\"timeItem.isSelectedTime ? 'spinbutton' : null\"\n [attr.aria-valuenow]=\"timeItem.isSelectedTime ? minute : null\"\n [attr.aria-valuemin]=\"timeItem.isSelectedTime ? timeItem.minValue : null\"\n [attr.aria-valuemax]=\"timeItem.isSelectedTime ? timeItem.maxValue : null\"\n *ngFor=\"let minute of minuteItems | timeItemPipe:'minutes':selectedDate:minDropdownValue:maxDropdownValue\">{{ minute }}</span>\n </div>\n <div *ngIf=\"showSecondsList\" #secondsList [igxItemList]=\"'secondsList'\">\n <span [igxTimeItem]=\"seconds\" #timeItem=\"timeItem\" aria-label=\"seconds\"\n [attr.role]=\"timeItem.isSelectedTime ? 'spinbutton' : null\"\n [attr.aria-valuenow]=\"timeItem.isSelectedTime ? seconds : null\"\n [attr.aria-valuemin]=\"timeItem.isSelectedTime ? timeItem.minValue : null\"\n [attr.aria-valuemax]=\"timeItem.isSelectedTime ? timeItem.maxValue : null\"\n *ngFor=\"let seconds of secondsItems | timeItemPipe:'seconds':selectedDate:minDropdownValue:maxDropdownValue\">{{ seconds }}</span>\n </div>\n <div *ngIf=\"showAmPmList\" #ampmList [igxItemList]=\"'ampmList'\">\n <span [igxTimeItem]=\"ampm\" #timeItem=\"timeItem\" aria-label=\"ampm\"\n [attr.role]=\"timeItem.isSelectedTime ? 'spinbutton' : null\"\n [attr.aria-valuenow]=\"timeItem.isSelectedTime ? ampm : null\"\n [attr.aria-valuemin]=\"timeItem.isSelectedTime ? timeItem.minValue : null\"\n [attr.aria-valuemax]=\"timeItem.isSelectedTime ? timeItem.maxValue : null\"\n *ngFor=\"let ampm of ampmItems | timeItemPipe:'ampm':selectedDate:minDropdownValue:maxDropdownValue\">{{ ampm }}</span>\n </div>\n </div>\n <ng-container\n *ngTemplateOutlet=\"timePickerActionsDirective ? timePickerActionsDirective.template : defaultTimePickerActions\">\n </ng-container>\n </div>\n</div>\n", styles: [":host{display:block}\n"] }]
1020
1020
  }], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: undefined, decorators: [{
1021
1021
  type: Inject,
1022
1022
  args: [LOCALE_ID]
@@ -1106,4 +1106,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.8", ngImpor
1106
1106
  type: HostListener,
1107
1107
  args: ['keydown', ['$event']]
1108
1108
  }] } });
1109
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGltZS1waWNrZXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvaWduaXRldWktYW5ndWxhci9zcmMvbGliL3RpbWUtcGlja2VyL3RpbWUtcGlja2VyLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2lnbml0ZXVpLWFuZ3VsYXIvc3JjL2xpYi90aW1lLXBpY2tlci90aW1lLXBpY2tlci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUN6RSxPQUFPLEVBQ0gsU0FBUyxFQUVULFlBQVksRUFDWixXQUFXLEVBQ1gsS0FBSyxFQUdMLE1BQU0sRUFDTixTQUFTLEVBQ1QsWUFBWSxFQUNaLE1BQU0sRUFLTixTQUFTLEVBQUUsUUFBUSxFQUFFLGVBQWUsRUFBYSxZQUFZLEVBQ2hFLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFFSCxpQkFBaUIsRUFDakIsU0FBUyxFQUlULGFBQWEsRUFDaEIsTUFBTSxnQkFBZ0IsQ0FBQztBQUV4QixPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSxzQ0FBc0MsQ0FBQztBQUM5RSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsYUFBYSxFQUFFLE1BQU0scUNBQXFDLENBQUM7QUFDdkYsT0FBTyxFQUFxQixvQkFBb0IsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQ3BGLE9BQU8sRUFBRSxtQkFBbUIsRUFBMEIsTUFBTSxpQkFBaUIsQ0FBQztBQUM5RSxPQUFPLEVBQ0gsb0JBQW9CLEVBQ3BCLG9CQUFvQixFQUN2QixNQUFNLDBCQUEwQixDQUFDO0FBQ2xDLE9BQU8sRUFBZ0IsSUFBSSxFQUFFLFNBQVMsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUNyRCxPQUFPLEVBQXFCLHlCQUF5QixFQUFF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SztnQkFjQyxpQkFBaUI7c0JBRHZCLEtBQUs7Z0JBS0MsUUFBUTtzQkFEZCxLQUFLO2dCQVlDLFFBQVE7c0JBRGQsTUFBTTtnQkFlQSxXQUFXO3NCQURqQixNQUFNO2dCQVlBLGdCQUFnQjtzQkFEdEIsTUFBTTtnQkFLQSxRQUFRO3NCQURkLFNBQVM7dUJBQUMsVUFBVTtnQkFLZCxVQUFVO3NCQURoQixTQUFTO3VCQUFDLFlBQVk7Z0JBS2hCLFdBQVc7c0JBRGpCLFNBQVM7dUJBQUMsYUFBYTtnQkFLakIsUUFBUTtzQkFEZCxTQUFTO3VCQUFDLFVBQVU7Z0JBS2QsZUFBZTtzQkFEckIsZUFBZTt1QkFBQyx1QkFBdUI7Z0JBS2pDLEtBQUs7c0JBRFgsWUFBWTt1QkFBQyxpQkFBaUI7Z0JBS3hCLDBCQUEwQjtzQkFEaEMsWUFBWTt1QkFBQyx5QkFBeUI7Z0JBSS9CLGNBQWM7c0JBRHJCLFNBQVM7dUJBQUMsaUJBQWlCLEVBQUUsRUFBRSxJQUFJLEVBQUUsaUJBQWlCLEVBQUU7Z0JBSWpELFdBQVc7c0JBRGxCLFNBQVM7dUJBQUMsc0JBQXNCO2dCQUl6QixjQUFjO3NCQURyQixTQUFTO3VCQUFDLDBCQUEwQixFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRTtnQkFJL0MsU0FBUztzQkFEaEIsU0FBUzt1QkFBQyxrQkFBa0I7Z0JBOEtsQixLQUFLO3NCQURmLEtBQUs7Z0JBeUJLLGVBQWU7c0JBRHpCLEtBQUs7Z0JBbUJLLGFBQWE7c0JBRHZCLEtBQUs7Z0JBdUJLLGlCQUFpQjtzQkFEM0IsS0FBSztnQkF3QkssVUFBVTtzQkFEcEIsS0FBSztnQkF1QkMsU0FBUztzQkFEZixZQUFZO3VCQUFDLFNBQVMsRUFBRSxDQUFDLFFBQVEsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE5nSWYsIE5nQ2xhc3MsIE5nRm9yLCBOZ1RlbXBsYXRlT3V0bGV0IH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7XG4gICAgQ29tcG9uZW50LFxuICAgIEVsZW1lbnRSZWYsXG4gICAgRXZlbnRFbWl0dGVyLFxuICAgIEhvc3RCaW5kaW5nLFxuICAgIElucHV0LFxuICAgIE9uRGVzdHJveSxcbiAgICBPbkluaXQsXG4gICAgT3V0cHV0LFxuICAgIFZpZXdDaGlsZCxcbiAgICBDb250ZW50Q2hpbGQsXG4gICAgSW5qZWN0LFxuICAgIEFmdGVyVmlld0luaXQsXG4gICAgSW5qZWN0b3IsXG4gICAgUGlwZVRyYW5zZm9ybSxcbiAgICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICBMT0NBTEVfSUQsIE9wdGlvbmFsLCBDb250ZW50Q2hpbGRyZW4sIFF1ZXJ5TGlzdCwgSG9zdExpc3RlbmVyXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtcbiAgICBDb250cm9sVmFsdWVBY2Nlc3NvcixcbiAgICBOR19WQUxVRV9BQ0NFU1NPUixcbiAgICBOZ0NvbnRyb2wsXG4gICAgQWJzdHJhY3RDb250cm9sLFxuICAgIFZhbGlkYXRpb25FcnJvcnMsXG4gICAgVmFsaWRhdG9yLFxuICAgIE5HX1ZBTElEQVRPUlNcbn0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuXG5pbXBvcnQgeyBJZ3hJbnB1dEdyb3VwQ29tcG9uZW50IH0gZnJvbSAnLi4vaW5wdXQtZ3JvdXAvaW5wdXQtZ3JvdXAuY29tcG9uZW50JztcbmltcG9ydCB7IElneElucHV0RGlyZWN0aXZlLCBJZ3hJbnB1dFN0YXRlIH0gZnJvbSAnLi4vZGlyZWN0aXZlcy9pbnB1dC9pbnB1dC5kaXJlY3RpdmUnO1xuaW1wb3J0IHsgSWd4SW5wdXRHcm91cFR5cGUsIElHWF9JTlBVVF9HUk9VUF9UWVBFIH0gZnJvbSAnLi4vaW5wdXQtZ3JvdXAvcHVibGljX2FwaSc7XG5pbXBvcnQgeyBEaXNwbGF5RGVuc2l0eVRva2VuLCBJRGlzcGxheURlbnNpdHlPcHRpb25zIH0gZnJvbSAnLi4vY29yZS9kZW5zaXR5JztcbmltcG9ydCB7XG4gICAgSWd4SXRlbUxpc3REaXJlY3RpdmUsXG4gICAgSWd4VGltZUl0ZW1EaXJlY3RpdmVcbn0gZnJvbSAnLi90aW1lLXBpY2tlci5kaXJlY3RpdmVzJztcbmltcG9ydCB7IFN1YnNjcmlwdGlvbiwgbm9vcCwgZnJvbUV2ZW50IH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBJZ3hUaW1lUGlja2VyQmFzZSwgSUdYX1RJTUVfUElDS0VSX0NPTVBPTkVOVCB9IGZyb20gJy4vdGltZS1waWNrZXIuY29tbW9uJztcbmltcG9ydCB7IEFic29sdXRlU2Nyb2xsU3RyYXRlZ3kgfSBmcm9tICcuLi9zZXJ2aWNlcy9vdmVybGF5L3Njcm9sbCc7XG5pbXBvcnQgeyBBdXRvUG9zaXRpb25TdHJhdGVneSB9IGZyb20gJy4uL3NlcnZpY2VzL292ZXJsYXkvcG9zaXRpb24nO1xuaW1wb3J0IHsgT3ZlcmxheVNldHRpbmdzIH0gZnJvbSAnLi4vc2VydmljZXMvb3ZlcmxheS91dGlsaXRpZXMnO1xuaW1wb3J0IHsgdGFrZVVudGlsIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgSWd4QnV0dG9uRGlyZWN0aXZlIH0gZnJvbSAnLi4vZGlyZWN0aXZlcy9idXR0b24vYnV0dG9uLmRpcmVjdGl2ZSc7XG5cbmltcG9ydCB7IElneERhdGVUaW1lRWRpdG9yRGlyZWN0aXZlIH0gZnJvbSAnLi4vZGlyZWN0aXZlcy9kYXRlLXRpbWUtZWRpdG9yL2RhdGUtdGltZS1lZGl0b3IuZGlyZWN0aXZlJztcbmltcG9ydCB7IElneFRvZ2dsZURpcmVjdGl2ZSB9IGZyb20gJy4uL2RpcmVjdGl2ZXMvdG9nZ2xlL3RvZ2dsZS5kaXJlY3RpdmUnO1xuaW1wb3J0IHsgSVRpbWVQaWNrZXJSZXNvdXJjZVN0cmluZ3MgfSBmcm9tICcuLi9jb3JlL2kxOG4vdGltZS1waWNrZXItcmVzb3VyY2VzJztcbmltcG9ydCB7IEN1cnJlbnRSZXNvdXJjZVN0cmluZ3MgfSBmcm9tICcuLi9jb3JlL2kxOG4vcmVzb3VyY2VzJztcbmltcG9ydCB7IElCYXNlRXZlbnRBcmdzLCBpc0VxdWFsLCBpc0RhdGUsIFBsYXRmb3JtVXRpbCwgSUJhc2VDYW5jZWxhYmxlQnJvd3NlckV2ZW50QXJncyB9IGZyb20gJy4uL2NvcmUvdXRpbHMnO1xuaW1wb3J0IHsgUGlja2VySW50ZXJhY3Rpb25Nb2RlIH0gZnJvbSAnLi4vZGF0ZS1jb21tb24vdHlwZXMnO1xuaW1wb3J0IHsgSWd4VGV4dFNlbGVjdGlvbkRpcmVjdGl2ZSB9IGZyb20gJy4uL2RpcmVjdGl2ZXMvdGV4dC1zZWxlY3Rpb24vdGV4dC1zZWxlY3Rpb24uZGlyZWN0aXZlJztcbmltcG9ydCB7IElneExhYmVsRGlyZWN0aXZlIH0gZnJvbSAnLi4vZGlyZWN0aXZlcy9sYWJlbC9sYWJlbC5kaXJlY3RpdmUnO1xuaW1wb3J0IHsgUGlja2VyQmFzZURpcmVjdGl2ZSB9IGZyb20gJy4uL2RhdGUtY29tbW9uL3BpY2tlci1iYXNlLmRpcmVjdGl2ZSc7XG5pbXBvcnQgeyBEYXRlVGltZVV0aWwgfSBmcm9tICcuLi9kYXRlLWNvbW1vbi91dGlsL2RhdGUtdGltZS51dGlsJztcbmltcG9ydCB7IERhdGVQYXJ0LCBEYXRlUGFydERlbHRhcyB9IGZyb20gJy4uL2RpcmVjdGl2ZXMvZGF0ZS10aW1lLWVkaXRvci9wdWJsaWNfYXBpJztcbmltcG9ydCB7IFBpY2tlckhlYWRlck9yaWVudGF0aW9uIH0gZnJvbSAnLi4vZGF0ZS1jb21tb24vdHlwZXMnO1xuaW1wb3J0IHsgSWd4UGlja2VyQWN0aW9uc0RpcmVjdGl2ZSwgSWd4UGlja2VyQ2xlYXJDb21wb25lbnQgfSBmcm9tICcuLi9kYXRlLWNvbW1vbi9waWNrZXItaWNvbnMuY29tbW9uJztcbmltcG9ydCB7IFRpbWVGb3JtYXRQaXBlLCBUaW1lSXRlbVBpcGUgfSBmcm9tICcuL3RpbWUtcGlja2VyLnBpcGVzJztcbmltcG9ydCB7IElneFN1ZmZpeERpcmVjdGl2ZSB9IGZyb20gJy4uL2RpcmVjdGl2ZXMvc3VmZml4L3N1ZmZpeC5kaXJlY3RpdmUnO1xuaW1wb3J0IHsgSWd4SWNvbkNvbXBvbmVudCB9IGZyb20gJy4uL2ljb24vaWNvbi5jb21wb25lbnQnO1xuaW1wb3J0IHsgSWd4UHJlZml4RGlyZWN0aXZlIH0gZnJvbSAnLi4vZGlyZWN0aXZlcy9wcmVmaXgvcHJlZml4LmRpcmVjdGl2ZSc7XG5cbmxldCBORVhUX0lEID0gMDtcbmV4cG9ydCBpbnRlcmZhY2UgSWd4VGltZVBpY2tlclZhbGlkYXRpb25GYWlsZWRFdmVudEFyZ3MgZXh0ZW5kcyBJQmFzZUV2ZW50QXJncyB7XG4gICAgcHJldmlvdXNWYWx1ZTogRGF0ZSB8IHN0cmluZztcbiAgICBjdXJyZW50VmFsdWU6IERhdGUgfCBzdHJpbmc7XG59XG5cbkBDb21wb25lbnQoe1xuICAgIHByb3ZpZGVyczogW1xuICAgICAgICB7XG4gICAgICAgICAgICBwcm92aWRlOiBOR19WQUxVRV9BQ0NFU1NPUixcbiAgICAgICAgICAgIHVzZUV4aXN0aW5nOiBJZ3hUaW1lUGlja2VyQ29tcG9uZW50LFxuICAgICAgICAgICAgbXVsdGk6IHRydWVcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAgcHJvdmlkZTogSUdYX1RJTUVfUElDS0VSX0NPTVBPTkVOVCxcbiAgICAgICAgICAgIHVzZUV4aXN0aW5nOiBJZ3hUaW1lUGlja2VyQ29tcG9uZW50XG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIHByb3ZpZGU6IE5HX1ZBTElEQVRPUlMsXG4gICAgICAgICAgICB1c2VFeGlzdGluZzogSWd4VGltZVBpY2tlckNvbXBvbmVudCxcbiAgICAgICAgICAgIG11bHRpOiB0cnVlXG4gICAgICAgIH1cbiAgICBdLFxuICAgIHNlbGVjdG9yOiAnaWd4LXRpbWUtcGlja2VyJyxcbiAgICB0ZW1wbGF0ZVVybDogJ3RpbWUtcGlja2VyLmNvbXBvbmVudC5odG1sJyxcbiAgICBzdHlsZXM6IFtcbiAgICAgICAgYDpob3N0IHtcbiAgICAgICAgICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgICAgICB9YFxuICAgIF0sXG4gICAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgICBpbXBvcnRzOiBbSWd4SW5wdXRHcm91cENvbXBvbmVudCwgSWd4SW5wdXREaXJlY3RpdmUsIElneERhdGVUaW1lRWRpdG9yRGlyZWN0aXZlLCBJZ3hUZXh0U2VsZWN0aW9uRGlyZWN0aXZlLCBOZ0lmLCBJZ3hQcmVmaXhEaXJlY3RpdmUsIElneEljb25Db21wb25lbnQsIElneFN1ZmZpeERpcmVjdGl2ZSwgSWd4QnV0dG9uRGlyZWN0aXZlLCBJZ3hUb2dnbGVEaXJlY3RpdmUsIE5nQ2xhc3MsIElneEl0ZW1MaXN0RGlyZWN0aXZlLCBOZ0ZvciwgSWd4VGltZUl0ZW1EaXJlY3RpdmUsIE5nVGVtcGxhdGVPdXRsZXQsIFRpbWVGb3JtYXRQaXBlLCBUaW1lSXRlbVBpcGVdXG59KVxuZXhwb3J0IGNsYXNzIElneFRpbWVQaWNrZXJDb21wb25lbnQgZXh0ZW5kcyBQaWNrZXJCYXNlRGlyZWN0aXZlXG4gICAgaW1wbGVtZW50c1xuICAgIElneFRpbWVQaWNrZXJCYXNlLFxuICAgIENvbnRyb2xWYWx1ZUFjY2Vzc29yLFxuICAgIE9uSW5pdCxcbiAgICBPbkRlc3Ryb3ksXG4gICAgQWZ0ZXJWaWV3SW5pdCxcbiAgICBWYWxpZGF0b3Ige1xuICAgIC8qKlxuICAgICAqIEFuIEBJbnB1dCBwcm9wZXJ0eSB0aGF0IHNldHMgdGhlIHZhbHVlIG9mIHRoZSBgaWRgIGF0dHJpYnV0ZS5cbiAgICAgKiBgYGBodG1sXG4gICAgICogPGlneC10aW1lLXBpY2tlciBbaWRdPVwiJ2lneC10aW1lLXBpY2tlci01J1wiIFtkaXNwbGF5Rm9ybWF0XT1cImg6bW0gdHRcIiA+PC9pZ3gtdGltZS1waWNrZXI+XG4gICAgICogYGBgXG4gICAgICovXG4gICAgQEhvc3RCaW5kaW5nKCdhdHRyLmlkJylcbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBpZCA9IGBpZ3gtdGltZS1waWNrZXItJHtORVhUX0lEKyt9YDtcblxuICAgIC8qKlxuICAgICAqIFRoZSBmb3JtYXQgdXNlZCB3aGVuIGVkaXRhYmxlIGlucHV0IGlzIG5vdCBmb2N1c2VkLiBEZWZhdWx0cyB0byB0aGUgYGlucHV0Rm9ybWF0YCBpZiBub3Qgc2V0LlxuICAgICAqXG4gICAgICogQHJlbWFya3NcbiAgICAgKiBVc2VzIEFuZ3VsYXIncyBgRGF0ZVBpcGVgLlxuICAgICAqXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiBgYGBodG1sXG4gICAgICogPGlneC10aW1lLXBpY2tlciBkaXNwbGF5Rm9ybWF0PVwibW06c3NcIj48L2lneC10aW1lLXBpY2tlcj5cbiAgICAgKiBgYGBcbiAgICAgKlxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIG92ZXJyaWRlIGRpc3BsYXlGb3JtYXQ6IHN0cmluZztcblxuICAgIC8qKlxuICAgICAqIFRoZSBleHBlY3RlZCB1c2VyIGlucHV0IGZvcm1hdCBhbmQgcGxhY2Vob2xkZXIuXG4gICAgICpcbiAgICAgKiBAcmVtYXJrc1xuICAgICAqIERlZmF1bHQgaXMgYGhoOm1tIHR0YFxuICAgICAqXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiBgYGBodG1sXG4gICAgICogPGlneC10aW1lLXBpY2tlciBpbnB1dEZvcm1hdD1cIkhIOm1tXCI+PC9pZ3gtdGltZS1waWNrZXI+XG4gICAgICogYGBgXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgb3ZlcnJpZGUgaW5wdXRGb3JtYXQ6IHN0cmluZyA9IERhdGVUaW1lVXRpbC5ERUZBVUxUX1RJTUVfSU5QVVRfRk9STUFUO1xuXG4gICAgLyoqXG4gICAgICogR2V0cy9TZXRzIHRoZSBpbnRlcmFjdGlvbiBtb2RlIC0gZGlhbG9nIG9yIGRyb3AgZG93bi5cbiAgICAgKlxuICAgICAqIEBleGFtcGxlXG4gICAgICogYGBgaHRtbFxuICAgICAqIDxpZ3gtdGltZS1waWNrZXIgbW9kZT1cImRpYWxvZ1wiPjwvaWd4LXRpbWUtcGlja2VyPlxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIG92ZXJyaWRlIG1vZGU6IFBpY2tlckludGVyYWN0aW9uTW9kZSA9IFBpY2tlckludGVyYWN0aW9uTW9kZS5Ecm9wRG93bjtcblxuICAgIC8qKlxuICAgICAqIFRoZSBtaW5pbXVtIHZhbHVlIHRoZSBwaWNrZXIgd2lsbCBhY2NlcHQuXG4gICAgICpcbiAgICAgKiBAcmVtYXJrc1xuICAgICAqIElmIGEgYHN0cmluZ2AgdmFsdWUgaXMgcGFzc2VkIGluLCBpdCBtdXN0IGJlIGluIElTTyBmb3JtYXQuXG4gICAgICpcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIGBgYGh0bWxcbiAgICAgKiA8aWd4LXRpbWUtcGlja2VyIFttaW5WYWx1ZV09XCIxODowMDowMFwiPjwvaWd4LXRpbWUtcGlja2VyPlxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIHNldCBtaW5WYWx1ZSh2YWx1ZTogRGF0ZSB8IHN0cmluZykge1xuICAgICAgICB0aGlzLl9taW5WYWx1ZSA9IHZhbHVlO1xuICAgICAgICBjb25zdCBkYXRlID0gdGhpcy5wYXJzZVRvRGF0ZSh2YWx1ZSk7XG4gICAgICAgIGlmIChkYXRlKSB7XG4gICAgICAgICAgICB0aGlzLl9kYXRlTWluVmFsdWUgPSBuZXcgRGF0ZSgpO1xuICAgICAgICAgICAgdGhpcy5fZGF0ZU1pblZhbHVlLnNldEhvdXJzKGRhdGUuZ2V0SG91cnMoKSwgZGF0ZS5nZXRNaW51dGVzKCksIGRhdGUuZ2V0U2Vjb25kcygpLCBkYXRlLmdldE1pbGxpc2Vjb25kcygpKTtcbiAgICAgICAgICAgIHRoaXMubWluRHJvcGRvd25WYWx1ZSA9IHRoaXMuc2V0TWluTWF4RHJvcGRvd25WYWx1ZSgnbWluJywgdGhpcy5fZGF0ZU1pblZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnNldFNlbGVjdGVkVmFsdWUodGhpcy5fc2VsZWN0ZWREYXRlKTtcbiAgICAgICAgdGhpcy5fb25WYWxpZGF0b3JDaGFuZ2UoKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IG1pblZhbHVlKCk6IERhdGUgfCBzdHJpbmcge1xuICAgICAgICByZXR1cm4gdGhpcy5fbWluVmFsdWU7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogR2V0cyBpZiB0aGUgZHJvcGRvd24vZGlhbG9nIGlzIGNvbGxhcHNlZFxuICAgICAqXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIGxldCBpc0NvbGxhcHNlZCA9IHRoaXMudGltZVBpY2tlci5jb2xsYXBzZWQ7XG4gICAgICogYGBgXG4gICAgICovXG4gICAgcHVibGljIG92ZXJyaWRlIGdldCBjb2xsYXBzZWQoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLnRvZ2dsZVJlZj8uY29sbGFwc2VkO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoZSBtYXhpbXVtIHZhbHVlIHRoZSBwaWNrZXIgd2lsbCBhY2NlcHQuXG4gICAgICpcbiAgICAgKiBAcmVtYXJrc1xuICAgICAqIElmIGEgYHN0cmluZ2AgdmFsdWUgaXMgcGFzc2VkIGluLCBpdCBtdXN0IGJlIGluIElTTyBmb3JtYXQuXG4gICAgICpcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIGBgYGh0bWxcbiAgICAgKiA8aWd4LXRpbWUtcGlja2VyIFttYXhWYWx1ZV09XCIyMDozMDowMFwiPjwvaWd4LXRpbWUtcGlja2VyPlxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIHNldCBtYXhWYWx1ZSh2YWx1ZTogRGF0ZSB8IHN0cmluZykge1xuICAgICAgICB0aGlzLl9tYXhWYWx1ZSA9IHZhbHVlO1xuICAgICAgICBjb25zdCBkYXRlID0gdGhpcy5wYXJzZVRvRGF0ZSh2YWx1ZSk7XG4gICAgICAgIGlmIChkYXRlKSB7XG4gICAgICAgICAgICB0aGlzLl9kYXRlTWF4VmFsdWUgPSBuZXcgRGF0ZSgpO1xuICAgICAgICAgICAgdGhpcy5fZGF0ZU1heFZhbHVlLnNldEhvdXJzKGRhdGUuZ2V0SG91cnMoKSwgZGF0ZS5nZXRNaW51dGVzKCksIGRhdGUuZ2V0U2Vjb25kcygpLCBkYXRlLmdldE1pbGxpc2Vjb25kcygpKTtcbiAgICAgICAgICAgIHRoaXMubWF4RHJvcGRvd25WYWx1ZSA9IHRoaXMuc2V0TWluTWF4RHJvcGRvd25WYWx1ZSgnbWF4JywgdGhpcy5fZGF0ZU1heFZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnNldFNlbGVjdGVkVmFsdWUodGhpcy5fc2VsZWN0ZWREYXRlKTtcbiAgICAgICAgdGhpcy5fb25WYWxpZGF0b3JDaGFuZ2UoKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IG1heFZhbHVlKCk6IERhdGUgfCBzdHJpbmcge1xuICAgICAgICByZXR1cm4gdGhpcy5fbWF4VmFsdWU7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQW4gQElucHV0IHByb3BlcnR5IHRoYXQgZGV0ZXJtaW5lcyB0aGUgc3BpbiBiZWhhdmlvci4gQnkgZGVmYXVsdCBgc3Bpbkxvb3BgIGlzIHNldCB0byB0cnVlLlxuICAgICAqIFRoZSBzZWNvbmRzLCBtaW51dGVzIGFuZCBob3VyIHNwaW5uaW5nIHdpbGwgd3JhcCBhcm91bmQgYnkgZGVmYXVsdC5cbiAgICAgKiBgYGBodG1sXG4gICAgICogPGlneC10aW1lLXBpY2tlciBbc3Bpbkxvb3BdPVwiZmFsc2VcIj48L2lneC10aW1lLXBpY2tlcj5cbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBzcGluTG9vcCA9IHRydWU7XG5cbiAgICAvKipcbiAgICAgKiBHZXRzL1NldHMgYSBjdXN0b20gZm9ybWF0dGVyIGZ1bmN0aW9uIG9uIHRoZSBzZWxlY3RlZCBvciBwYXNzZWQgZGF0ZS5cbiAgICAgKlxuICAgICAqIEBleGFtcGxlXG4gICAgICogYGBgaHRtbFxuICAgICAqIDxpZ3gtdGltZS1waWNrZXIgW3ZhbHVlXT1cImRhdGVcIiBbZm9ybWF0dGVyXT1cImZvcm1hdHRlclwiPjwvaWd4LXRpbWUtcGlja2VyPlxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIGZvcm1hdHRlcjogKHZhbDogRGF0ZSkgPT4gc3RyaW5nO1xuXG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgb3JpZW50YXRpb24gb2YgdGhlIHBpY2tlcidzIGhlYWRlci5cbiAgICAgKlxuICAgICAqIEByZW1hcmtzXG4gICAgICogQXZhaWxhYmxlIGluIGRpYWxvZyBtb2RlIG9ubHkuIERlZmF1bHQgdmFsdWUgaXMgYGhvcml6b250YWxgLlxuICAgICAqXG4gICAgICogYGBgaHRtbFxuICAgICAqIDxpZ3gtdGltZS1waWNrZXIgW2hlYWRlck9yaWVudGF0aW9uXT1cIid2ZXJ0aWNhbCdcIj48L2lneC10aW1lLXBpY2tlcj5cbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBoZWFkZXJPcmllbnRhdGlvbjogUGlja2VySGVhZGVyT3JpZW50YXRpb24gPSBQaWNrZXJIZWFkZXJPcmllbnRhdGlvbi5Ib3Jpem9udGFsO1xuXG4gICAgLyoqIEBoaWRkZW4gQGludGVybmFsICovXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgcmVhZE9ubHkgPSBmYWxzZTtcblxuICAgIC8qKlxuICAgICAqIEVtaXR0ZWQgYWZ0ZXIgYSBzZWxlY3Rpb24gaGFzIGJlZW4gZG9uZS5cbiAgICAgKlxuICAgICAqIEBleGFtcGxlXG4gICAgICogYGBgaHRtbFxuICAgICAqIDxpZ3gtdGltZS1waWNrZXIgKHNlbGVjdGVkKT1cIm9uU2VsZWN0aW9uKCRldmVudClcIj48L2lneC10aW1lLXBpY2tlcj5cbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBAT3V0cHV0KClcbiAgICBwdWJsaWMgc2VsZWN0ZWQgPSBuZXcgRXZlbnRFbWl0dGVyPERhdGU+KCk7XG5cbiAgICAvKipcbiAgICAgKiBFbWl0dGVkIHdoZW4gdGhlIHBpY2tlcidzIHZhbHVlIGNoYW5nZXMuXG4gICAgICpcbiAgICAgKiBAcmVtYXJrc1xuICAgICAqIFVzZWQgZm9yIGB0d28td2F5YCBiaW5kaW5ncy5cbiAgICAgKlxuICAgICAqIEBleGFtcGxlXG4gICAgICogYGBgaHRtbFxuICAgICAqIDxpZ3gtdGltZS1waWNrZXIgWyh2YWx1ZSldPVwiZGF0ZVwiPjwvaWd4LXRpbWUtcGlja2VyPlxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIEBPdXRwdXQoKVxuICAgIHB1YmxpYyB2YWx1ZUNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8RGF0ZSB8IHN0cmluZz4oKTtcblxuICAgIC8qKlxuICAgICAqIEVtaXR0ZWQgd2hlbiB0aGUgdXNlciB0eXBlcy9zcGlucyBpbnZhbGlkIHRpbWUgaW4gdGhlIHRpbWUtcGlja2VyIGVkaXRvci5cbiAgICAgKlxuICAgICAqICBAZXhhbXBsZVxuICAgICAqIGBgYGh0bWxcbiAgICAgKiA8aWd4LXRpbWUtcGlja2VyICh2YWxpZGF0aW9uRmFpbGVkKT1cIm9uVmFsaWRhdGlvbkZhaWxlZCgkZXZlbnQpXCI+PC9pZ3gtdGltZS1waWNrZXI+XG4gICAgICogYGBgXG4gICAgICovXG4gICAgQE91dHB1dCgpXG4gICAgcHVibGljIHZhbGlkYXRpb25GYWlsZWQgPSBuZXcgRXZlbnRFbWl0dGVyPElneFRpbWVQaWNrZXJWYWxpZGF0aW9uRmFpbGVkRXZlbnRBcmdzPigpO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBAVmlld0NoaWxkKCdob3VyTGlzdCcpXG4gICAgcHVibGljIGhvdXJMaXN0OiBFbGVtZW50UmVmO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBAVmlld0NoaWxkKCdtaW51dGVMaXN0JylcbiAgICBwdWJsaWMgbWludXRlTGlzdDogRWxlbWVudFJlZjtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgQFZpZXdDaGlsZCgnc2Vjb25kc0xpc3QnKVxuICAgIHB1YmxpYyBzZWNvbmRzTGlzdDogRWxlbWVudFJlZjtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgQFZpZXdDaGlsZCgnYW1wbUxpc3QnKVxuICAgIHB1YmxpYyBhbXBtTGlzdDogRWxlbWVudFJlZjtcblxuICAgIC8qKiBAaGlkZGVuIEBpbnRlcm5hbCAqL1xuICAgIEBDb250ZW50Q2hpbGRyZW4oSWd4UGlja2VyQ2xlYXJDb21wb25lbnQpXG4gICAgcHVibGljIGNsZWFyQ29tcG9uZW50czogUXVlcnlMaXN0PElneFBpY2tlckNsZWFyQ29tcG9uZW50PjtcblxuICAgIC8qKiBAaGlkZGVuIEBpbnRlcm5hbCAqL1xuICAgIEBDb250ZW50Q2hpbGQoSWd4TGFiZWxEaXJlY3RpdmUpXG4gICAgcHVibGljIGxhYmVsOiBJZ3hMYWJlbERpcmVjdGl2ZTtcblxuICAgIC8qKiBAaGlkZGVuIEBpbnRlcm5hbCAqL1xuICAgIEBDb250ZW50Q2hpbGQoSWd4UGlja2VyQWN0aW9uc0RpcmVjdGl2ZSlcbiAgICBwdWJsaWMgdGltZVBpY2tlckFjdGlvbnNEaXJlY3RpdmU6IElneFBpY2tlckFjdGlvbnNEaXJlY3RpdmU7XG5cbiAgICBAVmlld0NoaWxkKElneElucHV0RGlyZWN0aXZlLCB7IHJlYWQ6IElneElucHV0RGlyZWN0aXZlIH0pXG4gICAgcHJpdmF0ZSBpbnB1dERpcmVjdGl2ZTogSWd4SW5wdXREaXJlY3RpdmU7XG5cbiAgICBAVmlld0NoaWxkKElneElucHV0R3JvdXBDb21wb25lbnQpXG4gICAgcHJpdmF0ZSBfaW5wdXRHcm91cDogSWd4SW5wdXRHcm91cENvbXBvbmVudDtcblxuICAgIEBWaWV3Q2hpbGQoSWd4RGF0ZVRpbWVFZGl0b3JEaXJlY3RpdmUsIHsgc3RhdGljOiB0cnVlIH0pXG4gICAgcHJpdmF0ZSBkYXRlVGltZUVkaXRvcjogSWd4RGF0ZVRpbWVFZGl0b3JEaXJlY3RpdmU7XG5cbiAgICBAVmlld0NoaWxkKElneFRvZ2dsZURpcmVjdGl2ZSlcbiAgICBwcml2YXRlIHRvZ2dsZVJlZjogSWd4VG9nZ2xlRGlyZWN0aXZlO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwdWJsaWMgY2xlYXJlZCA9IGZhbHNlO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwdWJsaWMgaXNOb3RFbXB0eSA9IGZhbHNlO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwdWJsaWMgY3VycmVudEhvdXI6IG51bWJlcjtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHVibGljIGN1cnJlbnRNaW51dGVzOiBudW1iZXI7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHB1YmxpYyBnZXQgc2hvd0NsZWFyQnV0dG9uKCk6IGJvb2xlYW4ge1xuICAgICAgICBpZiAodGhpcy5jbGVhckNvbXBvbmVudHMubGVuZ3RoKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKERhdGVUaW1lVXRpbC5pc1ZhbGlkRGF0ZSh0aGlzLnZhbHVlKSkge1xuICAgICAgICAgICAgLy8gVE9ETzogVXBkYXRlIHcvIGNsZWFyIGJlaGF2aW9yXG4gICAgICAgICAgICByZXR1cm4gdGhpcy52YWx1ZS5nZXRIb3VycygpICE9PSAwIHx8IHRoaXMudmFsdWUuZ2V0TWludXRlcygpICE9PSAwIHx8IHRoaXMudmFsdWUuZ2V0U2Vjb25kcygpICE9PSAwO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiAhIXRoaXMuZGF0ZVRpbWVFZGl0b3IudmFsdWU7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwdWJsaWMgZ2V0IHNob3dIb3Vyc0xpc3QoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLmlucHV0Rm9ybWF0LmluZGV4T2YoJ2gnKSAhPT0gLSAxIHx8IHRoaXMuaW5wdXRGb3JtYXQuaW5kZXhPZignSCcpICE9PSAtIDE7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwdWJsaWMgZ2V0IHNob3dNaW51dGVzTGlzdCgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaW5wdXRGb3JtYXQuaW5kZXhPZignbScpICE9PSAtIDE7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwdWJsaWMgZ2V0IHNob3dTZWNvbmRzTGlzdCgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaW5wdXRGb3JtYXQuaW5kZXhPZigncycpICE9PSAtIDE7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwdWJsaWMgZ2V0IHNob3dBbVBtTGlzdCgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaW5wdXRGb3JtYXQuaW5kZXhPZigndCcpICE9PSAtIDEgfHwgdGhpcy5pbnB1dEZvcm1hdC5pbmRleE9mKCdhJykgIT09IC0gMTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHB1YmxpYyBnZXQgaXNUd2VsdmVIb3VyRm9ybWF0KCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5pbnB1dEZvcm1hdC5pbmRleE9mKCdoJykgIT09IC0gMTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiBAaW50ZXJuYWwgKi9cbiAgICBwdWJsaWMgZ2V0IGlzVmVydGljYWwoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLmhlYWRlck9yaWVudGF0aW9uID09PSBQaWNrZXJIZWFkZXJPcmllbnRhdGlvbi5WZXJ0aWNhbDtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiBAaW50ZXJuYWwgKi9cbiAgICBwdWJsaWMgZ2V0IHNlbGVjdGVkRGF0ZSgpOiBEYXRlIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3NlbGVjdGVkRGF0ZTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiBAaW50ZXJuYWwgKi9cbiAgICBwdWJsaWMgZ2V0IG1pbkRhdGVWYWx1ZSgpOiBEYXRlIHtcbiAgICAgICAgaWYgKCF0aGlzLl9kYXRlTWluVmFsdWUpIHtcbiAgICAgICAgICAgIGNvbnN0IG1pbkRhdGUgPSBuZXcgRGF0ZSgpO1xuICAgICAgICAgICAgbWluRGF0ZS5zZXRIb3VycygwLCAwLCAwLCAwKTtcbiAgICAgICAgICAgIHJldHVybiBtaW5EYXRlO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuX2RhdGVNaW5WYWx1ZTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiBAaW50ZXJuYWwgKi9cbiAgICBwdWJsaWMgZ2V0IG1heERhdGVWYWx1ZSgpOiBEYXRlIHtcbiAgICAgICAgaWYgKCF0aGlzLl9kYXRlTWF4VmFsdWUpIHtcbiAgICAgICAgICAgIGNvbnN0IG1heERhdGUgPSBuZXcgRGF0ZSgpO1xuICAgICAgICAgICAgbWF4RGF0ZS5zZXRIb3VycygyMywgNTksIDU5LCA5OTkpO1xuICAgICAgICAgICAgcmV0dXJuIG1heERhdGU7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdGhpcy5fZGF0ZU1heFZhbHVlO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0IHJlcXVpcmVkKCk6IGJvb2xlYW4ge1xuICAgICAgICBpZiAodGhpcy5fbmdDb250cm9sICYmIHRoaXMuX25nQ29udHJvbC5jb250cm9sICYmIHRoaXMuX25nQ29udHJvbC5jb250cm9sLnZhbGlkYXRvcikge1xuICAgICAgICAgICAgLy8gUnVuIHRoZSB2YWxpZGF0aW9uIHdpdGggZW1wdHkgb2JqZWN0IHRvIGNoZWNrIGlmIHJlcXVpcmVkIGlzIGVuYWJsZWQuXG4gICAgICAgICAgICBjb25zdCBlcnJvciA9IHRoaXMuX25nQ29udHJvbC5jb250cm9sLnZhbGlkYXRvcih7fSBhcyBBYnN0cmFjdENvbnRyb2wpO1xuICAgICAgICAgICAgcmV0dXJuICEhKGVycm9yICYmIGVycm9yLnJlcXVpcmVkKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldCBkaWFsb2dPdmVybGF5U2V0dGluZ3MoKTogT3ZlcmxheVNldHRpbmdzIHtcbiAgICAgICAgcmV0dXJuIE9iamVjdC5hc3NpZ24oe30sIHRoaXMuX2RlZmF1bHREaWFsb2dPdmVybGF5U2V0dGluZ3MsIHRoaXMub3ZlcmxheVNldHRpbmdzKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldCBkcm9wRG93bk92ZXJsYXlTZXR0aW5ncygpOiBPdmVybGF5U2V0dGluZ3Mge1xuICAgICAgICByZXR1cm4gT2JqZWN0LmFzc2lnbih7fSwgdGhpcy5fZGVmYXVsdERyb3BEb3duT3ZlcmxheVNldHRpbmdzLCB0aGlzLm92ZXJsYXlTZXR0aW5ncyk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gQGludGVybmFsICovXG4gICAgcHVibGljIGRpc3BsYXlWYWx1ZTogUGlwZVRyYW5zZm9ybSA9IHsgdHJhbnNmb3JtOiAoZGF0ZTogRGF0ZSkgPT4gdGhpcy5mb3JtYXR0ZXIoZGF0ZSkgfTtcbiAgICAvKiogQGhpZGRlbiBAaW50ZXJuYWwgKi9cbiAgICBwdWJsaWMgbWluRHJvcGRvd25WYWx1ZTogRGF0ZTtcbiAgICAvKiogQGhpZGRlbiBAaW50ZXJuYWwgKi9cbiAgICBwdWJsaWMgbWF4RHJvcGRvd25WYWx1ZTogRGF0ZTtcbiAgICAvKiogQGhpZGRlbiBAaW50ZXJuYWwgKi9cbiAgICBwdWJsaWMgaG91ckl0ZW1zID0gW107XG4gICAgLyoqIEBoaWRkZW4gQGludGVybmFsICovXG4gICAgcHVibGljIG1pbnV0ZUl0ZW1zID0gW107XG4gICAgLyoqIEBoaWRkZW4gQGludGVybmFsICovXG4gICAgcHVibGljIHNlY29uZHNJdGVtcyA9IFtdO1xuICAgIC8qKiBAaGlkZGVuIEBpbnRlcm5hbCAqL1xuICAgIHB1YmxpYyBhbXBtSXRlbXMgPSBbXTtcblxuICAgIHByaXZhdGUgX3ZhbHVlOiBEYXRlIHwgc3RyaW5nO1xuICAgIHByaXZhdGUgX2RhdGVWYWx1ZTogRGF0ZTtcbiAgICBwcml2YXRlIF9kYXRlTWluVmFsdWU6IERhdGU7XG4gICAgcHJpdmF0ZSBfZGF0ZU1heFZhbHVlOiBEYXRlO1xuICAgIHByaXZhdGUgX3NlbGVjdGVkRGF0ZTogRGF0ZTtcbiAgICBwcml2YXRlIF9yZXNvdXJjZVN0cmluZ3MgPSBDdXJyZW50UmVzb3VyY2VTdHJpbmdzLlRpbWVQaWNrZXJSZXNTdHJpbmdzO1xuICAgIHByaXZhdGUgX29rQnV0dG9uTGFiZWwgPSBudWxsO1xuICAgIHByaXZhdGUgX2NhbmNlbEJ1dHRvbkxhYmVsID0gbnVsbDtcbiAgICBwcml2YXRlIF9pdGVtc0RlbHRhOiBQaWNrPERhdGVQYXJ0RGVsdGFzLCAnaG91cnMnIHwgJ21pbnV0ZXMnIHwgJ3NlY29uZHMnPiA9IHsgaG91cnM6IDEsIG1pbnV0ZXM6IDEsIHNlY29uZHM6IDEgfTtcblxuICAgIHByaXZhdGUgX3N0YXR1c0NoYW5nZXMkOiBTdWJzY3JpcHRpb247XG4gICAgcHJpdmF0ZSBfbmdDb250cm9sOiBOZ0NvbnRyb2wgPSBudWxsO1xuICAgIHByaXZhdGUgX29uQ2hhbmdlQ2FsbGJhY2s6IChfOiBEYXRlIHwgc3RyaW5nKSA9PiB2b2lkID0gbm9vcDtcbiAgICBwcml2YXRlIF9vblRvdWNoZWRDYWxsYmFjazogKCkgPT4gdm9pZCA9IG5vb3A7XG4gICAgcHJpdmF0ZSBfb25WYWxpZGF0b3JDaGFuZ2U6ICgpID0+IHZvaWQgPSBub29wO1xuXG4gICAgcHJpdmF0ZSBfZGVmYXVsdERpYWxvZ092ZXJsYXlTZXR0aW5nczogT3ZlcmxheVNldHRpbmdzID0ge1xuICAgICAgICBjbG9zZU9uT3V0c2lkZUNsaWNrOiB0cnVlLFxuICAgICAgICBtb2RhbDogdHJ1ZSxcbiAgICAgICAgY2xvc2VPbkVzY2FwZTogdHJ1ZSxcbiAgICAgICAgb3V0bGV0OiB0aGlzLm91dGxldFxuICAgIH07XG4gICAgcHJpdmF0ZSBfZGVmYXVsdERyb3BEb3duT3ZlcmxheVNldHRpbmdzOiBPdmVybGF5U2V0dGluZ3MgPSB7XG4gICAgICAgIHRhcmdldDogdGhpcy5lbGVtZW50Lm5hdGl2ZUVsZW1lbnQsXG4gICAgICAgIG1vZGFsOiBmYWxzZSxcbiAgICAgICAgY2xvc2VPbk91dHNpZGVDbGljazogdHJ1ZSxcbiAgICAgICAgc2Nyb2xsU3RyYXRlZ3k6IG5ldyBBYnNvbHV0ZVNjcm9sbFN0cmF0ZWd5KCksXG4gICAgICAgIHBvc2l0aW9uU3RyYXRlZ3k6IG5ldyBBdXRvUG9zaXRpb25TdHJhdGVneSgpLFxuICAgICAgICBvdXRsZXQ6IHRoaXMub3V0bGV0XG4gICAgfTtcblxuXG4gICAgLyoqXG4gICAgICogVGhlIGN1cnJlbnRseSBzZWxlY3RlZCB2YWx1ZSAvIHRpbWUgZnJvbSB0aGUgZHJvcC1kb3duL2RpYWxvZ1xuICAgICAqXG4gICAgICogQHJlbWFya3NcbiAgICAgKiBUaGUgY3VycmVudCB2YWx1ZSBpcyBvZiB0eXBlIGBEYXRlYFxuICAgICAqXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogY29uc3QgbmV3VmFsdWU6IERhdGUgPSBuZXcgRGF0ZSgyMDAwLCAyLCAyLCAxMCwgMTUsIDE1KTtcbiAgICAgKiB0aGlzLnRpbWVQaWNrZXIudmFsdWUgPSBuZXdWYWx1ZTtcbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0IHZhbHVlKCk6IERhdGUgfCBzdHJpbmcge1xuICAgICAgICByZXR1cm4gdGhpcy5fdmFsdWU7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQW4gYWNjZXNzb3IgdGhhdCBhbGxvd3MgeW91IHRvIHNldCBhIHRpbWUgdXNpbmcgdGhlIGB2YWx1ZWAgaW5wdXQuXG4gICAgICogYGBgaHRtbFxuICAgICAqIHB1YmxpYyBkYXRlOiBEYXRlID0gbmV3IERhdGUoRGF0ZS5ub3coKSk7XG4gICAgICogIC8vLi4uXG4gICAgICogPGlneC10aW1lLXBpY2tlciBbdmFsdWVdPVwiZGF0ZVwiIGZvcm1hdD1cImg6bW0gdHRcIj48L2lneC10aW1lLXBpY2tlcj5cbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBzZXQgdmFsdWUodmFsdWU6IERhdGUgfCBzdHJpbmcpIHtcbiAgICAgICAgY29uc3Qgb2xkVmFsdWUgPSB0aGlzLl92YWx1ZTtcbiAgICAgICAgdGhpcy5fdmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgY29uc3QgZGF0ZSA9IHRoaXMucGFyc2VUb0RhdGUodmFsdWUpO1xuICAgICAgICBpZiAoZGF0ZSkge1xuICAgICAgICAgICAgdGhpcy5fZGF0ZVZhbHVlID0gbmV3IERhdGUoKTtcbiAgICAgICAgICAgIHRoaXMuX2RhdGVWYWx1ZS5zZXRIb3VycyhkYXRlLmdldEhvdXJzKCksIGRhdGUuZ2V0TWludXRlcygpLCBkYXRlLmdldFNlY29uZHMoKSwgZGF0ZS5nZXRNaWxsaXNlY29uZHMoKSk7XG4gICAgICAgICAgICB0aGlzLnNldFNlbGVjdGVkVmFsdWUodGhpcy5fZGF0ZVZhbHVlKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuX2RhdGVWYWx1ZSA9IG51bGw7XG4gICAgICAgICAgICB0aGlzLnNldFNlbGVjdGVkVmFsdWUobnVsbCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuZGF0ZVRpbWVFZGl0b3IpIHtcbiAgICAgICAgICAgIHRoaXMuZGF0ZVRpbWVFZGl0b3IudmFsdWUgPSBkYXRlO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuZW1pdFZhbHVlQ2hhbmdlKG9sZFZhbHVlLCB0aGlzLl92YWx1ZSk7XG4gICAgICAgIHRoaXMuX29uQ2hhbmdlQ2FsbGJhY2sodGhpcy5fdmFsdWUpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEFuIGFjY2Vzc29yIHRoYXQgc2V0cyB0aGUgcmVzb3VyY2Ugc3RyaW5ncy5cbiAgICAgKiBCeSBkZWZhdWx0IGl0IHVzZXMgRU4gcmVzb3VyY2VzLlxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIHNldCByZXNvdXJjZVN0cmluZ3ModmFsdWU6IElUaW1lUGlja2VyUmVzb3VyY2VTdHJpbmdzKSB7XG4gICAgICAgIHRoaXMuX3Jlc291cmNlU3RyaW5ncyA9IE9iamVjdC5hc3NpZ24oe30sIHRoaXMuX3Jlc291cmNlU3RyaW5ncywgdmFsdWUpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEFuIGFjY2Vzc29yIHRoYXQgcmV0dXJucyB0aGUgcmVzb3VyY2Ugc3RyaW5ncy5cbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0IHJlc291cmNlU3RyaW5ncygpOiBJVGltZVBpY2tlclJlc291cmNlU3RyaW5ncyB7XG4gICAgICAgIHJldHVybiB0aGlzLl9yZXNvdXJjZVN0cmluZ3M7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQW4gQElucHV0IHByb3BlcnR5IHRoYXQgcmVuZGVycyBPSyBidXR0b24gd2l0aCBjdXN0b20gdGV4dC4gQnkgZGVmYXVsdCBgb2tCdXR0b25MYWJlbGAgaXMgc2V0IHRvIE9LLlxuICAgICAqIGBgYGh0bWxcbiAgICAgKiA8aWd4LXRpbWUtcGlja2VyIG9rQnV0dG9uTGFiZWw9J1NFVCcgW3ZhbHVlXT1cImRhdGVcIiBmb3JtYXQ9XCJoOm1tIHR0XCI+PC9pZ3gtdGltZS1waWNrZXI+XG4gICAgICogYGBgXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgc2V0IG9rQnV0dG9uTGFiZWwodmFsdWU6IHN0cmluZykge1xuICAgICAgICB0aGlzLl9va0J1dHRvbkxhYmVsID0gdmFsdWU7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQW4gYWNjZXNzb3IgdGhhdCByZXR1cm5zIHRoZSBsYWJlbCBvZiBvayBidXR0b24uXG4gICAgICovXG4gICAgcHVibGljIGdldCBva0J1dHRvbkxhYmVsKCk6IHN0cmluZyB7XG4gICAgICAgIGlmICh0aGlzLl9va0J1dHRvbkxhYmVsID09PSBudWxsKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5yZXNvdXJjZVN0cmluZ3MuaWd4X3RpbWVfcGlja2VyX29rO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLl9va0J1dHRvbkxhYmVsO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEFuIEBJbnB1dCBwcm9wZXJ0eSB0aGF0IHJlbmRlcnMgY2FuY2VsIGJ1dHRvbiB3aXRoIGN1c3RvbSB0ZXh0LlxuICAgICAqIEJ5IGRlZmF1bHQgYGNhbmNlbEJ1dHRvbkxhYmVsYCBpcyBzZXQgdG8gQ2FuY2VsLlxuICAgICAqIGBgYGh0bWxcbiAgICAgKiA8aWd4LXRpbWUtcGlja2VyIGNhbmNlbEJ1dHRvbkxhYmVsPSdFeGl0JyBbdmFsdWVdPVwiZGF0ZVwiIGZvcm1hdD1cImg6bW0gdHRcIj48L2lneC10aW1lLXBpY2tlcj5cbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBzZXQgY2FuY2VsQnV0dG9uTGFiZWwodmFsdWU6IHN0cmluZykge1xuICAgICAgICB0aGlzLl9jYW5jZWxCdXR0b25MYWJlbCA9IHZhbHVlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEFuIGFjY2Vzc29yIHRoYXQgcmV0dXJucyB0aGUgbGFiZWwgb2YgY2FuY2VsIGJ1dHRvbi5cbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0IGNhbmNlbEJ1dHRvbkxhYmVsKCk6IHN0cmluZyB7XG4gICAgICAgIGlmICh0aGlzLl9jYW5jZWxCdXR0b25MYWJlbCA9PT0gbnVsbCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMucmVzb3VyY2VTdHJpbmdzLmlneF90aW1lX3BpY2tlcl9jYW5jZWw7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuX2NhbmNlbEJ1dHRvbkxhYmVsO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIERlbHRhIHZhbHVlcyB1c2VkIHRvIGluY3JlbWVudCBvciBkZWNyZW1lbnQgZWFjaCBlZGl0b3IgZGF0ZSBwYXJ0IG9uIHNwaW4gYWN0aW9ucyBhbmRcbiAgICAgKiB0byBkaXNwbGF5IHRpbWUgcG9ydGlvbnMgaW4gdGhlIGRyb3Bkb3duL2RpYWxvZy5cbiAgICAgKiBCeSBkZWZhdWx0IGBpdGVtc0RlbHRhYCBpcyBzZXQgdG8gYHtob3VyOiAxLCBtaW51dGU6IDEsIHNlY29uZDogMX1gXG4gICAgICogYGBgaHRtbFxuICAgICAqIDxpZ3gtdGltZS1waWNrZXIgW2l0ZW1zRGVsdGFdPVwie2hvdXI6MywgbWludXRlOjUsIHNlY29uZDoxMH1cIiBpZD1cInRpbWUtcGlja2VyXCI+PC9pZ3gtdGltZS1waWNrZXI+XG4gICAgICogYGBgXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgc2V0IGl0ZW1zRGVsdGEodmFsdWU6IFBpY2s8RGF0ZVBhcnREZWx0YXMsICdob3VycycgfCAnbWludXRlcycgfCAnc2Vjb25kcyc+KSB7XG4gICAgICAgIE9iamVjdC5hc3NpZ24odGhpcy5faXRlbXNEZWx0YSwgdmFsdWUpO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgaXRlbXNEZWx0YSgpOiBQaWNrPERhdGVQYXJ0RGVsdGFzLCAnaG91cnMnIHwgJ21pbnV0ZXMnIHwgJ3NlY29uZHMnPiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9pdGVtc0RlbHRhO1xuICAgIH1cblxuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBlbGVtZW50OiBFbGVtZW50UmVmLFxuICAgICAgICBASW5qZWN0KExPQ0FMRV9JRCkgX2xvY2FsZUlkOiBzdHJpbmcsXG4gICAgICAgIEBPcHRpb25hbCgpIEBJbmplY3QoRGlzcGxheURlbnNpdHlUb2tlbikgX2Rpc3BsYXlEZW5zaXR5T3B0aW9uczogSURpc3BsYXlEZW5zaXR5T3B0aW9ucyxcbiAgICAgICAgQE9wdGlvbmFsKCkgQEluamVjdChJR1hfSU5QVVRfR1JPVVBfVFlQRSkgX2lucHV0R3JvdXBUeXBlOiBJZ3hJbnB1dEdyb3VwVHlwZSxcbiAgICAgICAgcHJpdmF0ZSBfaW5qZWN0b3I6IEluamVjdG9yLFxuICAgICAgICBwcml2YXRlIHBsYXRmb3JtOiBQbGF0Zm9ybVV0aWwsXG4gICAgICAgIHByaXZhdGUgY2RyOiBDaGFuZ2VEZXRlY3RvclJlZikge1xuICAgICAgICBzdXBlcihlbGVtZW50LCBfbG9jYWxlSWQsIF9kaXNwbGF5RGVuc2l0eU9wdGlvbnMsIF9pbnB1dEdyb3VwVHlwZSk7XG4gICAgICAgIHRoaXMubG9jYWxlID0gdGhpcy5sb2NhbGUgfHwgdGhpcy5fbG9jYWxlSWQ7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gQGludGVybmFsICovXG4gICAgQEhvc3RMaXN0ZW5lcigna2V5ZG93bicsIFsnJGV2ZW50J10pXG4gICAgcHVibGljIG9uS2V5RG93bihldmVudDogS2V5Ym9hcmRFdmVudCk6IHZvaWQge1xuICAgICAgICBzd2l0Y2ggKGV2ZW50LmtleSkge1xuICAgICAgICAgICAgY2FzZSB0aGlzLnBsYXRmb3JtLktFWU1BUC5BUlJPV19VUDpcbiAgICAgICAgICAgICAgICBpZiAoZXZlbnQuYWx0S2V5ICYmIHRoaXMuaXNEcm9wZG93bikge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmNsb3NlKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSB0aGlzLnBsYXRmb3JtLktFWU1BUC5BUlJPV19ET1dOOlxuICAgICAgICAgICAgICAgIGlmIChldmVudC5hbHRLZXkgJiYgdGhpcy5pc0Ryb3Bkb3duKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMub3BlbigpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgdGhpcy5wbGF0Zm9ybS5LRVlNQVAuRVNDQVBFOlxuICAgICAgICAgICAgICAgIHRoaXMuY2FuY2VsQnV0dG9uQ2xpY2soKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgdGhpcy5wbGF0Zm9ybS5LRVlNQVAuU1BBQ0U6XG4gICAgICAgICAgICAgICAgdGhpcy5vcGVuKCk7XG4gICAgICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuIEBpbnRlcm5hbCAqL1xuICAgIHB1YmxpYyBnZXRQYXJ0VmFsdWUodmFsdWU6IERhdGUsIHR5cGU6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgICAgIGNvbnN0IGlucHV0RGF0ZVBhcnRzID0gRGF0ZVRpbWVVdGlsLnBhcnNlRGF0ZVRpbWVGb3JtYXQodGhpcy5pbnB1dEZvcm1hdCk7XG4gICAgICAgIGNvbnN0IHBhcnQgPSBpbnB1dERhdGVQYXJ0cy5maW5kKGVsZW1lbnQgPT4gZWxlbWVudC50eXBlID09PSB0eXBlKTtcbiAgICAgICAgcmV0dXJuIERhdGVUaW1lVXRpbC5nZXRQYXJ0VmFsdWUodmFsdWUsIHBhcnQsIHBhcnQuZm9ybWF0Lmxlbmd0aCk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gQGludGVybmFsICovXG4gICAgcHVibGljIHRvSVNPU3RyaW5nKHZhbHVlOiBEYXRlKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIHZhbHVlLnRvTG9jYWxlVGltZVN0cmluZygnZW4tR0InLCB7XG4gICAgICAgICAgICBob3VyOiAnMi1kaWdpdCcsXG4gICAgICAgICAgICBtaW51dGU6ICcyLWRpZ2l0JyxcbiAgICAgICAgICAgIHNlY29uZDogJzItZGlnaXQnLFxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvLyAjcmVnaW9uIENvbnRyb2xWYWx1ZUFjY2Vzc29yXG5cbiAgICAvKiogQGhpZGRlbiBAaW50ZXJuYWwgKi9cbiAgICBwdWJsaWMgd3JpdGVWYWx1ZSh2YWx1ZTogRGF0ZSB8IHN0cmluZykge1xuICAgICAgICB0aGlzLl92YWx1ZSA9IHZhbHVlO1xuICAgICAgICBjb25zdCBkYXRlID0gdGhpcy5wYXJzZVRvRGF0ZSh2YWx1ZSk7XG4gICAgICAgIGlmIChkYXRlKSB7XG4gICAgICAgICAgICB0aGlzLl9kYXRlVmFsdWUgPSBuZXcgRGF0ZSgpO1xuICAgICAgICAgICAgdGhpcy5fZGF0ZVZhbHVlLnNldEhvdXJzKGRhdGUuZ2V0SG91cnMoKSwgZGF0ZS5nZXRNaW51dGVzKCksIGRhdGUuZ2V0U2Vjb25kcygpKTtcbiAgICAgICAgICAgIHRoaXMuc2V0U2VsZWN0ZWRWYWx1ZSh0aGlzLl9kYXRlVmFsdWUpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5zZXRTZWxlY3RlZFZhbHVlKG51bGwpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLmRhdGVUaW1lRWRpdG9yKSB7XG4gICAgICAgICAgICB0aGlzLmRhdGVUaW1lRWRpdG9yLnZhbHVlID0gZGF0ZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuIEBpbnRlcm5hbCAqL1xuICAgIHB1YmxpYyByZWdpc3Rlck9uQ2hhbmdlKGZuOiAoXzogRGF0ZSB8IHN0cmluZykgPT4gdm9pZCkge1xuICAgICAgICB0aGlzLl9vbkNoYW5nZUNhbGxiYWNrID0gZm47XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gQGludGVybmFsICovXG4gICAgcHVibGljIHJlZ2lzdGVyT25Ub3VjaGVkKGZuOiAoKSA9PiB2b2lkKSB7XG4gICAgICAgIHRoaXMuX29uVG91Y2hlZENhbGxiYWNrID0gZm47XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gQGludGVybmFsICovXG4gICAgcHVibGljIHJlZ2lzdGVyT25WYWxpZGF0b3JDaGFuZ2UoZm46IGFueSkge1xuICAgICAgICB0aGlzLl9vblZhbGlkYXRvckNoYW5nZSA9IGZuO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuIEBpbnRlcm5hbCAqL1xuICAgIHB1YmxpYyB2YWxpZGF0ZShjb250cm9sOiBBYnN0cmFjdENvbnRyb2wpOiBWYWxpZGF0aW9uRXJyb3JzIHwgbnVsbCB7XG4gICAgICAgIGlmICghY29udHJvbC52YWx1ZSkge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgLy8gSW52YWxpZERhdGUgaGFuZGxpbmdcbiAgICAgICAgaWYgKGlzRGF0ZShjb250cm9sLnZhbHVlKSAmJiAhRGF0ZVRpbWVVdGlsLmlzVmFsaWREYXRlKGNvbnRyb2wudmFsdWUpKSB7XG4gICAgICAgICAgICByZXR1cm4geyB2YWx1ZTogdHJ1ZSB9O1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgZXJyb3JzID0ge307XG4gICAgICAgIGNvbnN0IHZhbHVlID0gRGF0ZVRpbWVVdGlsLmlzVmFsaWREYXRlKGNvbnRyb2wudmFsdWUpID8gY29udHJvbC52YWx1ZSA6IERhdGVUaW1lVXRpbC5wYXJzZUlzb0RhdGUoY29udHJvbC52YWx1ZSk7XG4gICAgICAgIE9iamVjdC5hc3NpZ24oZXJyb3JzLCBEYXRlVGltZVV0aWwudmFsaWRhdGVNaW5NYXgodmFsdWUsIHRoaXMubWluVmFsdWUsIHRoaXMubWF4VmFsdWUsIHRydWUsIGZhbHNlKSk7XG4gICAgICAgIHJldHVybiBPYmplY3Qua2V5cyhlcnJvcnMpLmxlbmd0aCA+IDAgPyBlcnJvcnMgOiBudWxsO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuIEBpbnRlcm5hbCAqL1xuICAgIHB1YmxpYyBzZXREaXNhYmxlZFN0YXRlKGlzRGlzYWJsZWQ6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICAgICAgdGhpcy5kaXNhYmxlZCA9IGlzRGlzYWJsZWQ7XG4gICAgfVxuICAgIC8vI2VuZHJlZ2lvblxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwdWJsaWMgb3ZlcnJpZGUgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX25nQ29udHJvbCA9IHRoaXMuX2luamVjdG9yLmdldDxOZ0NvbnRyb2w+KE5nQ29udHJvbCwgbnVsbCk7XG4gICAgICAgIHRoaXMubWluRHJvcGRvd25WYWx1ZSA9IHRoaXMuc2V0TWluTWF4RHJvcGRvd25WYWx1ZSgnbWluJywgdGhpcy5taW5EYXRlVmFsdWUpO1xuICAgICAgICB0aGlzLm1heERyb3Bkb3duVmFsdWUgPSB0aGlzLnNldE1pbk1heERyb3Bkb3duVmFsdWUoJ21heCcsIHRoaXMubWF4RGF0ZVZhbHVlKTtcbiAgICAgICAgdGhpcy5zZXRTZWxlY3RlZFZhbHVlKHRoaXMuX2RhdGVWYWx1ZSk7XG4gICAgICAgIHN1cGVyLm5nT25Jbml0KCk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwdWJsaWMgb3ZlcnJpZGUgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xuICAgICAgICBzdXBlci5uZ0FmdGVyVmlld0luaXQoKTtcbiAgICAgICAgdGhpcy5zdWJzY3JpYmVUb0RhdGVFZGl0b3JFdmVudHMoKTtcbiAgICAgICAgdGhpcy5zdWJzY3JpYmVUb1RvZ2dsZURpcmVjdGl2ZUV2ZW50cygpO1xuXG4gICAgICAgIHRoaXMuX2RlZmF1bHREcm9wRG93bk92ZXJsYXlTZXR0aW5ncy5leGNsdWRlRnJvbU91dHNpZGVDbGljayA9IFt0aGlzLl9pbnB1dEdyb3VwLmVsZW1lbnQubmF0aXZlRWxlbWVudF07XG5cbiAgICAgICAgZnJvbUV2ZW50KHRoaXMuaW5wdXREaXJlY3RpdmUubmF0aXZlRWxlbWVudCwgJ2JsdXInKVxuICAgICAgICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMuX2Rlc3Ryb3kkKSlcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLmNvbGxhcHNlZCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnVwZGF0ZVZhbGlkaXR5T25CbHVyKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgdGhpcy5zdWJUb0ljb25zQ2xpY2tlZCh0aGlzLmNsZWFyQ29tcG9uZW50cywgKCkgPT4gdGhpcy5jbGVhcigpKTtcbiAgICAgICAgdGhpcy5jbGVhckNvbXBvbmVudHMuY2hhbmdlcy5waXBlKHRha2VVbnRpbCh0aGlzLl9kZXN0cm95JCkpXG4gICAgICAgICAgICAuc3Vic2NyaWJlKCgpID0+IHRoaXMuc3ViVG9JY29uc0NsaWNrZWQodGhpcy5jbGVhckNvbXBvbmVudHMsICgpID0+IHRoaXMuY2xlYXIoKSkpO1xuXG4gICAgICAgIGlmICh0aGlzLl9uZ0NvbnRyb2wpIHtcbiAgICAgICAgICAgIHRoaXMuX3N0YXR1c0NoYW5nZXMkID0gdGhpcy5fbmdDb250cm9sLnN0YXR1c0NoYW5nZXMuc3Vic2NyaWJlKHRoaXMub25TdGF0dXNDaGFuZ2VkLmJpbmQodGhpcykpO1xuICAgICAgICAgICAgdGhpcy5faW5wdXRHcm91cC5pc1JlcXVpcmVkID0gdGhpcy5yZXF1aXJlZDtcbiAgICAgICAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHVibGljIG92ZXJyaWRlIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgICAgICBzdXBlci5uZ09uRGVzdHJveSgpO1xuICAgICAgICBpZiAodGhpcy5fc3RhdHVzQ2hhbmdlcyQpIHtcbiAgICAgICAgICAgIHRoaXMuX3N0YXR1c0NoYW5nZXMkLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHB1YmxpYyBnZXRFZGl0RWxlbWVudCgpOiBIVE1MSW5wdXRFbGVtZW50IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZGF0ZVRpbWVFZGl0b3IubmF0aXZlRWxlbWVudDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBPcGVucyB0aGUgcGlja2VyJ3MgZGlhbG9nIFVJLlxuICAgICAqXG4gICAgICogQHBhcmFtIHNldHRpbmdzIE92ZXJsYXlTZXR0aW5ncyAtIHRoZSBvdmVybGF5IHNldHRpbmdzIHRvIHVzZSBmb3IgcG9zaXRpb25pbmcgdGhlIGRyb3AgZG93biBvciBkaWFsb2cgY29udGFpbmVyIGFjY29yZGluZyB0b1xuICAgICAqIGBgYGh0bWxcbiAgICAgKiA8aWd4LXRpbWUtcGlja2VyICNwaWNrZXIgW3ZhbHVlXT1cImRhdGVcIj48L2lneC10aW1lLXBpY2tlcj5cbiAgICAgKiA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBpZ3hCdXR0b24gKGNsaWNrKT1cInBpY2tlci5vcGVuKClcIj5PcGVuIERpYWxvZzwvYnV0dG9uPlxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIHB1YmxpYyBvcGVuKHNldHRpbmdzPzogT3ZlcmxheVNldHRpbmdzKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLmRpc2FibGVkIHx8ICF0aGlzLnRvZ2dsZVJlZi5jb2xsYXBzZWQpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuc2V0U2VsZWN0ZWRWYWx1ZSh0aGlzLl9kYXRlVmFsdWUpO1xuICAgICAgICBjb25zdCBvdmVybGF5U2V0dGluZ3MgPSBPYmplY3QuYXNzaWduKHt9LCB0aGlzLmlzRHJvcGRvd25cbiAgICAgICAgICAgID8gdGhpcy5kcm9wRG93bk92ZXJsYXlTZXR0aW5nc1xuICAgICAgICAgICAgOiB0aGlzLmRpYWxvZ092ZXJsYXlTZXR0aW5nc1xuICAgICAgICAgICAgLCBzZXR0aW5ncyk7XG5cbiAgICAgICAgdGhpcy50b2dnbGVSZWYub3BlbihvdmVybGF5U2V0dGluZ3MpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENsb3NlcyB0aGUgZHJvcGRvd24vZGlhbG9nLlxuICAgICAqIGBgYGh0bWxcbiAgICAgKiA8aWd4LXRpbWUtcGlja2VyICN0aW1lUGlja2VyPjwvaWd4LXRpbWUtcGlja2VyPlxuICAgICAqIGBgYFxuICAgICAqIGBgYHR5cGVzY3JpcHRcbiAgICAgKiBAVmlld0NoaWxkKCd0aW1lUGlja2VyJywgeyByZWFkOiBJZ3hUaW1lUGlja2VyQ29tcG9uZW50IH0pIHBpY2tlcjogSWd4VGltZVBpY2tlckNvbXBvbmVudDtcbiAgICAgKiBwaWNrZXIuY2xvc2UoKTtcbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBwdWJsaWMgY2xvc2UoKTogdm9pZCB7XG4gICAgICAgIHRoaXMudG9nZ2xlUmVmLmNsb3NlKCk7XG4gICAgfVxuXG4gICAgcHVibGljIHRvZ2dsZShzZXR0aW5ncz86IE92ZXJsYXlTZXR0aW5ncyk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy50b2dnbGVSZWYuY29sbGFwc2VkKSB7XG4gICAgICAgICAgICB0aGlzLm9wZW4oc2V0dGluZ3MpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5jbG9zZSgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ2xlYXJzIHRoZSB0aW1lIHBpY2tlciB2YWx1ZSBpZiBpdCBpcyBhIGBzdHJpbmdgIG9yIHJlc2V0cyB0aGUgdGltZSB0byBgMDA6MDA6MDBgIGlmIHRoZSB2YWx1ZSBpcyBhIERhdGUgb2JqZWN0LlxuICAgICAqXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogdGhpcy50aW1lUGlja2VyLmNsZWFyKCk7XG4gICAgICogYGBgXG4gICAgICovXG4gICAgcHVibGljIGNsZWFyKCk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5kaXNhYmxlZCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCF0aGlzLnRvZ2dsZVJlZi5jb2xsYXBzZWQpIHtcbiAgICAgICAgICAgIHRoaXMuY2xvc2UoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChEYXRlVGltZVV0aWwuaXNWYWxpZERhdGUodGhpcy52YWx1ZSkpIHtcbiAgICAgICAgICAgIGNvbnN0IG9sZFZhbHVlID0gbmV3IERhdGUodGhpcy52YWx1ZSk7XG4gICAgICAgICAgICB0aGlzLnZhbHVlLnNldEhvdXJzKDAsIDAsIDApO1xuICAgICAgICAgICAgaWYgKHRoaXMudmFsdWUuZ2V0VGltZSgpICE9PSBvbGRWYWx1ZS5nZXRUaW1lKCkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmVtaXRWYWx1ZUNoYW5nZShvbGRWYWx1ZSwgdGhpcy52YWx1ZSk7XG4gICAgICAgICAgICAgICAgdGhpcy5fZGF0ZVZhbHVlLnNldEhvdXJzKDAsIDAsIDApO1xuICAgICAgICAgICAgICAgIHRoaXMuZGF0ZVRpbWVFZGl0b3IudmFsdWUgPSBuZXcgRGF0ZSh0aGlzLnZhbHVlKTtcbiAgICAgICAgICAgICAgICB0aGlzLnNldFNlbGVjdGVkVmFsdWUodGhpcy5fZGF0ZVZhbHVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMudmFsdWUgPSBudWxsO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU2VsZWN0cyB0aW1lIGZyb20gdGhlIGlneFRpbWVQaWNrZXIuXG4gICAgICpcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIGBgYHR5cGVzY3JpcHRcbiAgICAgKiB0aGlzLnRpbWVQaWNrZXIuc2VsZWN0KGRhdGUpO1xuICAgICAqXG4gICAgICogQHBhcmFtIGRhdGUgRGF0ZSBvYmplY3QgY29udGFpbmluZyB0aGUgdGltZSB0byBiZSBzZWxlY3RlZC5cbiAgICAgKi9cbiAgICBwdWJsaWMgc2VsZWN0KGRhdGU6IERhdGUgfCBzdHJpbmcpOiB2b2lkIHtcbiAgICAgICAgdGhpcy52YWx1ZSA9IGRhdGU7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogSW5jcmVtZW50IGEgc3BlY2lmaWVkIGBEYXRlUGFydGAuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gZGF0ZVBhcnQgVGhlIG9wdGlvbmFsIERhdGVQYXJ0IHRvIGluY3JlbWVudC4gRGVmYXVsdHMgdG8gSG91ci5cbiAgICAgKiBAcGFyYW0gZGVsdGEgVGhlIG9wdGlvbmFsIGRlbHRhIHRvIGluY3JlbWVudCBieS4gT3ZlcnJpZGVzIGBpdGVtc0RlbHRhYC5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIGBgYHR5cGVzY3JpcHRcbiAgICAgKiB0aGlzLnRpbWVQaWNrZXIuaW5jcmVtZW50KERhdGVQYXJ0LkhvdXJzKTtcbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBwdWJsaWMgaW5jcmVtZW50KGRhdGVQYXJ0PzogRGF0ZVBhcnQsIGRlbHRhPzogbnVtYmVyKTogdm9pZCB7XG4gICAgICAgIHRoaXMuZGF0ZVRpbWVFZGl0b3IuaW5jcmVtZW50KGRhdGVQYXJ0LCBkZWx0YSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogRGVjcmVtZW50IGEgc3BlY2lmaWVkIGBEYXRlUGFydGBcbiAgICAgKlxuICAgICAqIEBwYXJhbSBkYXRlUGFydCBUaGUgb3B0aW9uYWwgRGF0ZVBhcnQgdG8gZGVjcmVtZW50LiBEZWZhdWx0cyB0byBIb3VyLlxuICAgICAqIEBwYXJhbSBkZWx0YSBUaGUgb3B0aW9uYWwgZGVsdGEgdG8gZGVjcmVtZW50IGJ5LiBPdmVycmlkZXMgYGl0ZW1zRGVsdGFgLlxuICAgICAqIEBleGFtcGxlXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIHRoaXMudGltZVBpY2tlci5kZWNyZW1lbnQoRGF0ZVBhcnQuU2Vjb25kcyk7XG4gICAgICogYGBgXG4gICAgICovXG4gICAgcHVibGljIGRlY3JlbWVudChkYXRlUGFydD86IERhdGVQYXJ0LCBkZWx0YT86IG51bWJlcik6IHZvaWQge1xuICAgICAgICB0aGlzLmRhdGVUaW1lRWRpdG9yLmRlY3JlbWVudChkYXRlUGFydCwgZGVsdGEpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuIEBpbnRlcm5hbCAqL1xuICAgIHB1YmxpYyBjYW5jZWxCdXR0b25DbGljaygpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5zZXRTZWxlY3RlZFZhbHVlKHRoaXMuX2RhdGVWYWx1ZSk7XG4gICAgICAgIHRoaXMuZGF0ZVRpbWVFZGl0b3IudmFsdWUgPSB0aGlzLnBhcnNlVG9EYXRlKHRoaXMudmFsdWUpO1xuICAgICAgICB0aGlzLmNsb3NlKCk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gQGludGVybmFsICovXG4gICAgcHVibGljIG9rQnV0dG9uQ2xpY2soKTogdm9pZCB7XG4gICAgICAgIHRoaXMudXBkYXRlVmFsdWUodGhpcy5fc2VsZWN0ZWREYXRlKTtcbiAgICAgICAgdGhpcy5jbG9zZSgpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuIEBpbnRlcm5hbCAqL1xuICAgIHB1YmxpYyBvbkl0ZW1DbGljayhpdGVtOiBzdHJpbmcsIGRhdGVUeXBlOiBzdHJpbmcpOiB2b2lkIHtcbiAgICAgICAgbGV0IGRhdGUgPSBuZXcgRGF0ZSh0aGlzLl9zZWxlY3RlZERhdGUpO1xuICAgICAgICBzd2l0Y2ggKGRhdGVUeXBlKSB7XG4gICAgICAgICAgICBjYXNlICdob3VyTGlzdCc6IHtcbiAgICAgICAgICAgICAgICBsZXQgYW1wbTogc3RyaW5nO1xuICAgICAgICAgICAgICAgIGNvbnN0IHNlbGVjdGVkSG91ciA9IHBhcnNlSW50KGl0ZW0sIDEwKTtcbiAgICAgICAgICAgICAgICBsZXQgaG91cnMgPSBzZWxlY3RlZEhvdXI7XG5cbiAgICAgICAgICAgICAgICBpZiAodGhpcy5zaG93QW1QbUxpc3QpIHtcbiAgICAgICAgICAgICAgICAgICAgYW1wbSA9IHRoaXMuZ2V0UGFydFZhbHVlKGRhdGUsICdhbXBtJyk7XG4gICAgICAgICAgICAgICAgICAgIGhvdXJzID0gdGhpcy50b1R3ZW50eUZvdXJIb3VyRm9ybWF0KGhvdXJzLCBhbXBtKTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgbWluSG91cnMgPSB0aGlzLm1pbkRyb3Bkb3duVmFsdWU/LmdldEhvdXJzKCkgfHwgMDtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgbWF4SG91cnMgPSB0aGlzLm1heERyb3Bkb3duVmFsdWU/LmdldEhvdXJzKCkgfHwgMjQ7XG4gICAgICAgICAgICAgICAgICAgIGlmIChob3VycyA8IG1pbkhvdXJzIHx8IGhvdXJzID4gbWF4SG91cnMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGhvdXJzID0gaG91cnMgPCAxMiA/IGhvdXJzICsgMTIgOiBob3VycyAtIDEyO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgZGF0ZS5zZXRIb3Vycyhob3Vycyk7XG4gICAgICAgICAgICAgICAgZGF0ZSA9IHRoaXMudmFsaWRhdGVEcm9wZG93blZhbHVlKGRhdGUpO1xuXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMudmFsdWVJblJhbmdlKGRhdGUsIHRoaXMubWluRHJvcGRvd25WYWx1ZSwgdGhpcy5tYXhEcm9wZG93blZhbHVlKSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnNldFNlbGVjdGVkVmFsdWUoZGF0ZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSAnbWludXRlTGlzdCc6IHtcbiAgICAgICAgICAgICAgICBjb25zdCBtaW51dGVzID0gcGFyc2VJbnQoaXRlbSwgMTApO1xuICAgICAgICAgICAgICAgIGRhdGUuc2V0TWludXRlcyhtaW51dGVzKTtcbiAgICAgICAgICAgICAgICBkYXRlID0gdGhpcy52YWxpZGF0ZURyb3Bkb3duVmFsdWUoZGF0ZSk7XG4gICAgICAgICAgICAgICAgdGhpcy5zZXRTZWxlY3RlZFZhbHVlKGRhdGUpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSAnc2Vjb25kc0xpc3QnOiB7XG4gICAgICAgICAgICAgICAgY29uc3Qgc2Vjb25kcyA9IHBhcnNlSW50KGl0ZW0sIDEwKTtcbiAgICAgICAgICAgICAgICBkYXRlLnNldFNlY29uZHMoc2Vjb25kcyk7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMudmFsdWVJblJhbmdlKGRhdGUsIHRoaXMubWluRHJvcGRvd25WYWx1ZSwgdGhpcy5tYXhEcm9wZG93blZhbHVlKSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnNldFNlbGVjdGVkVmFsdWUoZGF0ZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSAnYW1wbUxpc3QnOiB7XG4gICAgICAgICAgICAgICAgbGV0IGhvdXIgPSB0aGlzLl9zZWxlY3RlZERhdGUuZ2V0SG91cnMoKTtcbiAgICAgICAgICAgICAgICBob3VyID0gaXRlbSA9PT0gJ0FNJyA/IGhvdXIgLSAxMiA6IGhvdXIgKyAxMjtcbiAgICAgICAgICAgICAgICBkYXRlLnNldEhvdXJzKGhvdXIpO1xuICAgICAgICAgICAgICAgIGRhdGUgPSB0aGlzLnZhbGlkYXRlRHJvcGRvd25WYWx1ZShkYXRlLCB0cnVlKTtcbiAgICAgICAgICAgICAgICB0aGlzLnNldFNlbGVjdGVkVmFsdWUoZGF0ZSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy51cGRhdGVFZGl0b3JWYWx1ZSgpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuIEBpbnRlcm5hbCAqL1xuICAgIHB1YmxpYyBuZXh0SG91cihkZWx0YTogbnVtYmVyKSB7XG4gICAgICAgIGRlbHRhID0gZGVsdGEgPiAwID8gMSA6IC0xO1xuICAgICAgICBjb25zdCBwcmV2aW91c0RhdGUgPSBuZXcgRGF0ZSh0aGlzLl9zZWxlY3RlZERhdGUpO1xuICAgICAgICBjb25zdCBtaW5Ib3VycyA9IHRoaXMubWluRHJvcGRvd25WYWx1ZT8uZ2V0SG91cnMoKTtcbiAgICAgICAgY29uc3QgbWF4SG91cnMgPSB0aGlzLm1heERyb3Bkb3duVmFsdWU/LmdldEhvdXJzKCk7XG4gICAgICAgIGNvbnN0IHByZXZpb3VzSG91cnMgPSBwcmV2aW91c0RhdGUuZ2V0SG91cnMoKTtcbiAgICAgICAgbGV0IGhvdXJzID0gcHJldmlvdXNIb3VycyArIGRlbHRhICogdGhpcy5pdGVtc0RlbHRhLmhvdXJzO1xuICAgICAgICBpZiAoKHByZXZpb3VzSG91cnMgPT09IG1heEhvdXJzICYmIGRlbHRhID4gMCkgfHwgKHByZXZpb3VzSG91cnMgPT09IG1pbkhvdXJzICYmIGRlbHRhIDwgMCkpIHtcbiAgICAgICAgICAgIGhvdXJzID0gIXRoaXMuc3Bpbkxvb3AgPyBwcmV2aW91c0hvdXJzIDogZGVsdGEgPiAwID8gbWluSG91cnMgOiBtYXhIb3VycztcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX3NlbGVjdGVkRGF0ZS5zZXRIb3Vycyhob3Vycyk7XG4gICAgICAgIHRoaXMuX3NlbGVjdGVkRGF0ZSA9IHRoaXMudmFsaWRhdGVEcm9wZG93blZhbHVlKHRoaXMuX3NlbGVjdGVkRGF0ZSk7XG4gICAgICAgIHRoaXMuX3NlbGVjdGVkRGF0ZSA9IG5ldyBEYXRlKHRoaXMuX3NlbGVjdGVkRGF0ZSk7XG4gICAgICAgIHRoaXMudXBkYXRlRWRpdG9yVmFsdWUoKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiBAaW50ZXJuYWwgKi9cbiAgICBwdWJsaWMgbmV4dE1pbnV0ZShkZWx0YTogbnVtYmVyKSB7XG4gICAgICAgIGRlbHRhID0gZGVsdGEgPiAwID8gMSA6IC0xO1xuICAgICAgICBjb25zdCBtaW5Ib3VycyA9IHRoaXMubWluRHJvcGRvd25WYWx1ZS5nZXRIb3VycygpO1xuICAgICAgICBjb25zdCBtYXhIb3VycyA9IHRoaXMubWF4RHJvcGRvd25WYWx1ZS5nZXRIb3VycygpO1xuICAgICAgICBjb25zdCBob3VycyA9IHRoaXMuX3NlbGVjdGVkRGF0ZS5nZXRIb3VycygpO1xuICAgICAgICBsZXQgbWludXRlcyA9IHRoaXMuX3NlbGVjdGVkRGF0ZS5nZXRNaW51dGVzKCk7XG4gICAgICAgIGNvbnN0IG1pbk1pbnV0ZXMgPSBob3VycyA9PT0gbWluSG91cnMgPyB0aGlzLm1pbkRyb3Bkb3duVmFsdWUuZ2V0TWludXRlcygpIDogMDtcbiAgICAgICAgY29uc3QgbWF4TWludXRlcyA9IGhvdXJzID09PSBtYXhIb3VycyA/IHRoaXMubWF4RHJvcGRvd25WYWx1ZS5nZXRNaW51dGVzKCkgOlxuICAgICAgICAgICAgNjAgJSB0aGlzLml0ZW1zRGVsdGEubWludXRlcyA+IDAgPyA2MCAtICg2MCAlIHRoaXMuaXRlbXNEZWx0YS5taW51dGVzKSA6XG4gICAgICAgICAgICAgICAgNjAgLSB0aGlzLml0ZW1zRGVsdGEubWludXRlcztcblxuICAgICAgICBpZiAoKGRlbHRhIDwgMCAmJiBtaW51dGVzID09PSBtaW5NaW51dGVzKSB8fCAoZGVsdGEgPiAwICYmIG1pbnV0ZXMgPT09IG1heE1pbnV0ZXMpKSB7XG4gICAgICAgICAgICBtaW51dGVzID0gdGhpcy5zcGluTG9vcCAmJiBtaW51dGVzID09PSBtaW5NaW51dGVzID8gbWF4TWludXRlcyA6IHRoaXMuc3Bpbkxvb3AgJiYgbWludXRlcyA9PT0gbWF4TWludXRlcyA/IG1pbk1pbnV0ZXMgOiBtaW51dGVzO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgbWludXRlcyA9IG1pbnV0ZXMgKyBkZWx0YSAqIHRoaXMuaXRlbXNEZWx0YS5taW51dGVzO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5fc2VsZWN0ZWREYXRlLnNldE1pbnV0ZXMobWludXRlcyk7XG4gICAgICAgIHRoaXMuX3NlbGVjdGVkRGF0ZSA9IHRoaXMudmFsaWRhdGVEcm9wZG93blZhbHVlKHRoaXMuX3NlbGVjdGVkRGF0ZSk7XG4gICAgICAgIHRoaXMuX3NlbGVjdGVkRGF0ZSA9IG5ldyBEYXRlKHRoaXMuX3NlbGVjdGVkRGF0ZSk7XG4gICAgICAgIHRoaXMudXBkYXRlRWRpdG9yVmFsdWUoKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiBAaW50ZXJuYWwgKi9cbiAgICBwdWJsaWMgbmV4dFNlY29uZHMoZGVsdGE6IG51bWJlcikge1xuICAgICAgICBkZWx0YSA9IGRlbHRhID4gMCA/IDEgOiAtMTtcbiAgICAgICAgY29uc3QgbWluSG91cnMgPSB0aGlzLm1pbkRyb3Bkb3duVmFsdWUuZ2V0SG91cnMoKTtcbiAgICAgICAgY29uc3QgbWF4SG91cnMgPSB0aGlzLm1heERyb3Bkb3duVmFsdWUuZ2V0SG91cnMoKTtcbiAgICAgICAgY29uc3QgaG91cnMgPSB0aGlzLl9zZWxlY3RlZERhdGUuZ2V0SG91cnMoKTtcbiAgICAgICAgY29uc3QgbWludXRlcyA9IHRoaXMuX3NlbGVjdGVkRGF0ZS5nZXRNaW51dGVzKCk7XG4gICAgICAgIGNvbnN0IG1pbk1pbnV0ZXMgPSB0aGlzLm1pbkRyb3Bkb3duVmFsdWUuZ2V0TWludXRlcygpO1xuICAgICAgICBjb25zdCBtYXhNaW51dGVzID0gdGhpcy5tYXhEcm9wZG93blZhbHVlLmdldE1pbnV0ZXMoKTtcbiAgICAgICAgbGV0IHNlY29uZHMgPSB0aGlzLl9zZWxlY3RlZERhdGUuZ2V0U2Vjb25kcygpO1xuICAgICAgICBjb25zdCBtaW5TZWNvbmRzID0gKGhvdXJzID09PSBtaW5Ib3VycyAmJiBtaW51dGVzID09PSBtaW5NaW51dGVzKSA/IHRoaXMubWluRHJvcGRvd25WYWx1ZS5nZXRTZWNvbmRzKCkgOiAwO1xuICAgICAgICBjb25zdCBtYXhTZWNvbmRzID0gKGhvdXJzID09PSBtYXhIb3VycyAmJiBtaW51dGVzID09PSBtYXhNaW51dGVzKSA/IHRoaXMubWF4RHJvcGRvd25WYWx1ZS5nZXRTZWNvbmRzKCkgOlxuICAgICAgICAgICAgNjAgJSB0aGlzLml0ZW1zRGVsdGEuc2Vjb25kcyA+IDAgPyA2MCAtICg2MCAlIHRoaXMuaXRlbXNEZWx0YS5zZWNvbmRzKSA6XG4gICAgICAgICAgICAgICAgNjAgLSB0aGlzLml0ZW1zRGVsdGEuc2Vjb25kcztcblxuICAgICAgICBpZiAoKGRlbHRhIDwgMCAmJiBzZWNvbmRzID09PSBtaW5TZWNvbmRzKSB8fCAoZGVsdGEgPiAwICYmIHNlY29uZHMgPT09IG1heFNlY29uZHMpKSB7XG4gICAgICAgICAgICBzZWNvbmRzID0gdGhpcy5zcGluTG9vcCAmJiBzZWNvbmRzID09PSBtaW5TZWNvbmRzID8gbWF4U2Vjb25kcyA6IHRoaXMuc3Bpbkxvb3AgJiYgc2Vjb25kcyA9PT0gbWF4U2Vjb25kcyA/IG1pblNlY29uZHMgOiBzZWNvbmRzO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgc2Vjb25kcyA9IHNlY29uZHMgKyBkZWx0YSAqIHRoaXMuaXRlbXNEZWx0YS5zZWNvbmRzO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5fc2VsZWN0ZWREYXRlLnNldFNlY29uZHMoc2Vjb25kcyk7XG4gICAgICAgIHRoaXMuX3NlbGVjdGVkRGF0ZSA9IHRoaXMudmFsaWRhdGVEcm9wZG93blZhbHVlKHRoaXMuX3NlbGVjdGVkRGF0ZSk7XG4gICAgICAgIHRoaXMuX3NlbGVjdGVkRGF0ZSA9IG5ldyBEYXRlKHRoaXMuX3NlbGVjdGVkRGF0ZSk7XG4gICAgICAgIHRoaXMudXBkYXRlRWRpdG9yVmFsdWUoKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiBAaW50ZXJuYWwgKi9cbiAgICBwdWJsaWMgbmV4dEFtUG0oZGVsdGE/OiBudW1iZXIpIHtcbiAgICAgICAgY29uc3QgYW1wbSA9IHRoaXMuZ2V0UGFydFZhbHVlKHRoaXMuX3NlbGVjdGVkRGF0ZSwgJ2FtcG0nKTtcbiAgICAgICAgaWYgKCFkZWx0YSB8fCAoYW1wbSA9PT0gJ0FNJyAmJiBkZWx0YSA+IDApIHx8IChhbXBtID09PSAnUE0nICYmIGRlbHRhIDwgMCkpIHtcbiAgICAgICAgICAgIGxldCBob3VycyA9IHRoaXMuX3NlbGVjdGVkRGF0ZS5nZXRIb3VycygpO1xuICAgICAgICAgICAgY29uc3Qgc2lnbiA9IGhvdXJzIDwgMTIgPyAxIDogLTE7XG4gICAgICAgICAgICBob3VycyA9IGhvdXJzICsgc2lnbiAqIDEyO1xuICAgICAgICAgICAgdGhpcy5fc2VsZWN0ZWREYXRlLnNldEhvdXJzKGhvdXJzKTtcbiAgICAgICAgICAgIHRoaXMuX3NlbGVjdGVkRGF0ZSA9IHRoaXMudmFsaWRhdGVEcm9wZG93blZhbHVlKHRoaXMuX3NlbGVjdGVkRGF0ZSwgdHJ1ZSk7XG4gICAgICAgICAgICB0aGlzLl9zZWxlY3RlZERhdGUgPSBuZXcgRGF0ZSh0aGlzLl9zZWxlY3RlZERhdGUpO1xuICAgICAgICAgICAgdGhpcy51cGRhdGVFZGl0b3JWYWx1ZSgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gQGludGVybmFsICovXG4gICAgcHVibGljIHNldFNlbGVjdGVkVmFsdWUodmFsdWU6IERhdGUpIHtcbiAgICAgICAgdGhpcy5fc2VsZWN0ZWREYXRlID0gdmFsdWUgPyBuZXcgRGF0ZSh2YWx1ZSkgOiBudWxsO1xuICAgICAgICBpZiAoIURhdGVUaW1lVXRpbC5pc1ZhbGlkRGF0ZSh0aGlzLl9zZWxlY3RlZERhdGUpKSB7XG4gICAgICAgICAgICB0aGlzLl9zZWxlY3RlZERhdGUgPSBuZXcgRGF0ZSh0aGlzLm1pbkRyb3Bkb3duVmFsdWUpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLm1pblZhbHVlICYmIERhdGVUaW1lVXRpbC5sZXNzVGhhbk1pblZhbHVlKHRoaXMuX3NlbGVjdGVkRGF0ZSwgdGhpcy5taW5Ecm9wZG93blZhbHVlLCB0cnVlLCBmYWxzZSkpIHtcbiAgICAgICAgICAgIHRoaXMuX3NlbGVjdGVkRGF0ZSA9IG5ldyBEYXRlKHRoaXMubWluRHJvcGRvd25WYWx1ZSk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMubWF4VmFsdWUgJiYgRGF0ZVRpbWVVdGlsLmdyZWF0ZXJUaGFuTWF4VmFsdWUodGhpcy5fc2VsZWN0ZWREYXRlLCB0aGlzLm1heERyb3Bkb3duVmFsdWUsIHRydWUsIGZhbHNlKSkge1xuICAgICAgICAgICAgdGhpcy5fc2VsZWN0ZWREYXRlID0gbmV3IERhdGUodGhpcy5tYXhEcm9wZG93blZhbHVlKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLl9zZWxlY3RlZERhdGUuZ2V0SG91cnMoKSAlIHRoaXMuaXRlbXNEZWx0YS5ob3VycyA+IDApIHtcbiAgICAgICAgICAgIHRoaXMuX3NlbGVjdGVkRGF0ZS5zZXRIb3VycyhcbiAgICAgICAgICAgICAgICB0aGlzLl9zZWxlY3RlZERhdGUuZ2V0SG91cnMoKSArIHRoaXMuaXRlbXNEZWx0YS5ob3VycyAtIHRoaXMuX3NlbGVjdGVkRGF0ZS5nZXRIb3VycygpICUgdGhpcy5pdGVtc0RlbHRhLmhvdXJzLFxuICAgICAgICAgICAgICAgIDAsXG4gICAgICAgICAgICAgICAgMFxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLl9zZWxlY3RlZERhdGUuZ2V0TWludXRlcygpICUgdGhpcy5pdGVtc0RlbHRhLm1pbnV0ZXMgPiAwKSB7XG4gICAgICAgICAgICB0aGlzLl9zZWxlY3RlZERhdGUuc2V0SG91cnMoXG4gICAgICAgICAgICAgICAgdGhpcy5fc2VsZWN0ZWREYXRlLmdldEhvdXJzKCksXG4gICAgICAgICAgICAgICAgdGhpcy5fc2VsZWN0ZWREYXRlLmdldE1pbnV0ZXMoKSArIHRoaXMuaXRlbXNEZWx0YS5taW51dGVzIC0gdGhpcy5fc2VsZWN0ZWREYXRlLmdldE1pbnV0ZXMoKSAlIHRoaXMuaXRlbXNEZWx0YS5taW51dGVzLFxuICAgICAgICAgICAgICAgIDBcbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5fc2VsZWN0ZWREYXRlLmdldFNlY29uZHMoKSAlIHRoaXMuaXRlbXNEZWx0YS5zZWNvbmRzID4gMCkge1xuICAgICAgICAgICAgdGhpcy5fc2VsZWN0ZWREYXRlLnNldFNlY29uZHMoXG4gICAgICAgICAgICAgICAgdGhpcy5fc2VsZWN0ZWREYXRlLmdldFNlY29uZHMoKSArIHRoaXMuaXRlbXNEZWx0YS5zZWNvbmRzIC0gdGhpcy5fc2VsZWN0ZWREYXRlLmdldFNlY29uZHMoKSAlIHRoaXMuaXRlbXNEZWx0YS5zZWNvbmRzXG4gICAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIG9uU3RhdHVzQ2hhbmdlZCgpIHtcbiAgICAgICAgaWYgKHRoaXMuX25nQ29udHJvbCAmJiAhdGhpcy5fbmdDb250cm9sLmRpc2FibGVkICYmIHRoaXMuaXNUb3VjaGVkT3JEaXJ0eSkge1xuICAgICAgICAgICAgaWYgKHRoaXMuaGFzVmFsaWRhdG9ycyAmJiB0aGlzLl9pbnB1dEdyb3VwLmlzRm9jdXNlZCkge1xuICAgICAgICAgICAgICAgIHRoaXMuaW5wdXREaXJlY3RpdmUudmFsaWQgPSB0aGlzLl9uZ0NvbnRyb2wudmFsaWQgPyBJZ3hJbnB1dFN0YXRlLlZBTElEIDogSWd4SW5wdXRTdGF0ZS5JTlZBTElEO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLmlucHV0RGlyZWN0aXZlLnZhbGlkID0gdGhpcy5fbmdDb250cm9sLnZhbGlkID8gSWd4SW5wdXRTdGF0ZS5JTklUSUFMIDogSWd4SW5wdXRTdGF0ZS5JTlZBTElEO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gQi5QLiAxOCBNYXkgMjAyMTogSWd4RGF0ZVBpY2tlciBkb2VzIG5vdCByZXNldCBpdHMgc3RhdGUgdXBvbiByZXNldEZvcm0gIzk1MjZcbiAgICAgICAgICAgIHRoaXMuaW5wdXREaXJlY3RpdmUudmFsaWQgPSBJZ3hJbnB1dFN0YXRlLklOSVRJQUw7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5faW5wdXRHcm91cCAmJiB0aGlzLl9pbnB1dEdyb3VwLmlzUmVxdWlyZWQgIT09IHRoaXMucmVxdWlyZWQpIHtcbiAgICAgICAgICAgIHRoaXMuX2lucHV0R3JvdXAuaXNSZXF1aXJlZCA9IHRoaXMucmVxdWlyZWQ7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGdldCBpc1RvdWNoZWRPckRpcnR5KCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gKHRoaXMuX25nQ29udHJvbC5jb250cm9sLnRvdWNoZWQgfHwgdGhpcy5fbmdDb250cm9sLmNvbnRyb2wuZGlydHkpO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0IGhhc1ZhbGlkYXRvcnMoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiAoISF0aGlzLl9uZ0NvbnRyb2wuY29udHJvbC52YWxpZGF0b3IgfHwgISF0aGlzLl9uZ0NvbnRyb2wuY29udHJvbC5hc3luY1ZhbGlkYXRvcik7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzZXRNaW5NYXhEcm9wZG93blZhbHVlKHR5cGU6IHN0cmluZywgdGltZTogRGF0ZSk6IERhdGUge1xuICAgICAgICBsZXQgZGVsdGE6IG51bWJlcjtcblxuICAgICAgICBjb25zdCBzaWduID0gdHlwZSA9PT0gJ21pbicgPyAxIDogLTE7XG5cbiAgICAgICAgY29uc3QgaG91cnMgPSB0aW1lLmdldEhvdXJzKCk7XG4gICAgICAgIGxldCBtaW51dGVzID0gdGltZS5nZXRNaW51dGVzKCk7XG4gICAgICAgIGxldCBzZWNvbmRzID0gdGltZS5nZXRTZWNvbmRzKCk7XG5cbiAgICAgICAgaWYgKHRoaXMuc2hvd0hvdXJzTGlzdCAmJiBob3VycyAlIHRoaXMuaXRlbXNEZWx0YS5ob3VycyA+IDApIHtcbiAgICAgICAgICAgIGRlbHRhID0gdHlwZSA9PT0gJ21pbicgPyB0aGlzLml0ZW1zRGVsdGEuaG91cnMgLSBob3VycyAlIHRoaXMuaXRlbXNEZWx0YS5ob3Vyc1xuICAgICAgICAgICAgICAgIDogaG91cnMgJSB0aGlzLml0ZW1zRGVsdGEuaG91cnM7XG4gICAgICAgICAgICBtaW51dGVzID0gdHlwZSA9PT0gJ21pbicgPyAwXG4gICAgICAgICAgICAgICAgOiA2MCAlIHRoaXMuaXRlbXNEZWx0YS5taW51dGVzID4gMCA/IDYwIC0gNjAgJSB0aGlzLml0ZW1zRGVsdGEubWludXRlc1xuICAgICAgICAgICAgICAgICAgICA6IDYwIC0gdGhpcy5pdGVtc0RlbHRhLm1pbnV0ZXM7XG4gICAgICAgICAgICBzZWNvbmRzID0gdHlwZSA9PT0gJ21pbicgPyAwXG4gICAgICAgICAgICAgICAgOiA2MCAlIHRoaXMuaXRlbXNEZWx0YS5zZWNvbmRzID4gMCA/IDYwIC0gNjAgJSB0aGlzLml0ZW1zRGVsdGEuc2Vjb25kc1xuICAgICAgICAgICAgICAgICAgICA6IDYwIC0gdGhpcy5pdGVtc0RlbHRhLnNlY29uZHM7XG4gICAgICAgICAgICB0aW1lLnNldEhvdXJzKGhvdXJzICsgc2lnbiAqIGRlbHRhLCBtaW51dGVzLCBzZWNvbmRzKTtcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLnNob3dNaW51dGVzTGlzdCAmJiBtaW51dGVzICUgdGhpcy5pdGVtc0RlbHRhLm1pbnV0ZXMgPiAwKSB7XG4gICAgICAgICAgICBkZWx0YSA9IHR5cGUgPT09ICdtaW4nID8gdGhpcy5pdGVtc0RlbHRhLm1pbnV0ZXMgLSBtaW51dGVzICUgdGhpcy5pdGVtc0RlbHRhLm1pbnV0ZXNcbiAgICAgICAgICAgICAgICA6IG1pbnV0ZXMgJSB0aGlzLml0ZW1zRGVsdGEubWludXRlcztcbiAgICAgICAgICAgIHNlY29uZHMgPSB0eXBlID09PSAnbWluJyA/IDBcbiAgICAgICAgICAgICAgICA6IDYwICUgdGhpcy5pdGVtc0RlbHRhLnNlY29uZHMgPiAwID8gNjAgLSA2MCAlIHRoaXMuaXRlbXNEZWx0YS5zZWNvbmRzXG4gICAgICAgICAgICAgICAgICAgIDogNjAgLSB0aGlzLml0ZW1zRGVsdGEuc2Vjb25kcztcbiAgICAgICAgICAgIHRpbWUuc2V0SG91cnMoaG91cnMsIG1pbnV0ZXMgKyBzaWduICogZGVsdGEsIHNlY29uZHMpO1xuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuc2hvd1NlY29uZHNMaXN0ICYmIHNlY29uZHMgJSB0aGlzLml0ZW1zRGVsdGEuc2Vjb25kcyA+IDApIHtcbiAgICAgICAgICAgIGRlbHRhID0gdHlwZSA9PT0gJ21pbicgPyB0aGlzLml0ZW1zRGVsdGEuc2Vjb25kcyAtIHNlY29uZHMgJSB0aGlzLml0ZW1zRGVsdGEuc2Vjb25kc1xuICAgICAgICAgICAgICAgIDogc2Vjb25kcyAlIHRoaXMuaXRlbXNEZWx0YS5zZWNvbmRzO1xuICAgICAgICAgICAgdGltZS5zZXRIb3Vycyhob3VycywgbWludXRlcywgc2Vjb25kcyArIHNpZ24gKiBkZWx0YSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdGltZTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGluaXRpYWxpemVDb250YWluZXIoKSB7XG4gICAgICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZSgoKSA9PiB7XG4gICAgICAgICAgICBpZiAodGhpcy5ob3VyTGlzdCkge1xuICAgICAgICAgICAgICAgIHRoaXMuaG91ckxpc3QubmF0aXZlRWxlbWVudC5mb2N1cygpO1xuICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLm1pbnV0ZUxpc3QpIHtcbiAgICAgICAgICAgICAgICB0aGlzLm1pbnV0ZUxpc3QubmF0aXZlRWxlbWVudC5mb2N1cygpO1xuICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLnNlY29uZHNMaXN0KSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zZWNvbmRzTGlzdC5uYXRpdmVFbGVtZW50LmZvY3VzKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgdmFsaWRhdGVEcm9wZG93blZhbHVlKGRhdGU6IERhdGUsIGlzQW1QbSA9IGZhbHNlKTogRGF0ZSB7XG4gICAgICAgIGlmIChkYXRlID4gdGhpcy5tYXhEcm9wZG93blZhbHVlKSB7XG4gICAgICAgICAgICBpZiAoaXNBbVBtICYmIGRhdGUuZ2V0SG91cnMoKSAhPT0gdGhpcy5tYXhEcm9wZG93blZhbHVlLmdldEhvdXJzKCkpIHtcbiAgICAgICAgICAgICAgICBkYXRlLnNldEhvdXJzKDEyKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgZGF0ZSA9IG5ldyBEYXRlKHRoaXMubWF4RHJvcGRvd25WYWx1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZGF0ZSA8IHRoaXMubWluRHJvcGRvd25WYWx1ZSkge1xuICAgICAgICAgICAgZGF0ZSA9IG5ldyBEYXRlKHRoaXMubWluRHJvcGRvd25WYWx1ZSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gZGF0ZTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGVtaXRWYWx1ZUNoYW5nZShvbGRWYWx1ZTogRGF0ZSB8IHN0cmluZywgbmV3VmFsdWU6IERhdGUgfCBzdHJpbmcpIHtcbiAgICAgICAgaWYgKCFpc0VxdWFsKG9sZFZhbHVlLCBuZXdWYWx1ZSkpIHtcbiAgICAgICAgICAgIHRoaXMudmFsdWVDaGFuZ2UuZW1pdChuZXdWYWx1ZSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGVtaXRWYWxpZGF0aW9uRmFpbGVkRXZlbnQocHJldmlvdXNWYWx1ZTogRGF0ZSB8IHN0cmluZykge1xuICAgICAgICBjb25zdCBhcmdzOiBJZ3hUaW1lUGlja2VyVmFsaWRhdGlvbkZhaWxlZEV2ZW50QXJncyA9IHtcbiAgICAgICAgICAgIG93bmVyOiB0aGlzLFxuICAgICAgICAgICAgcHJldmlvdXNWYWx1ZSxcbiAgICAgICAgICAgIGN1cnJlbnRWYWx1ZTogdGhpcy52YWx1ZVxuICAgICAgICB9O1xuICAgICAgICB0aGlzLnZhbGlkYXRpb25GYWlsZWQuZW1pdChhcmdzKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHVwZGF0ZVZhbGlkaXR5T25CbHVyKCkge1xuICAgICAgICB0aGlzLl9vblRvdWNoZWRDYWxsYmFjaygpO1xuICAgICAgICBpZiAodGhpcy5fbmdDb250cm9sKSB7XG4gICAgICAgICAgICBpZiAoIXRoaXMuX25nQ29udHJvbC52YWxpZCkge1xuICAgICAgICAgICAgICAgIHRoaXMuaW5wdXREaXJlY3RpdmUudmFsaWQgPSBJZ3hJbnB1dFN0YXRlLklOVkFMSUQ7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMuaW5wdXREaXJlY3RpdmUudmFsaWQgPSBJZ3hJbnB1dFN0YXRlLklOSVRJQUw7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIHZhbHVlSW5SYW5nZSh2YWx1ZTogRGF0ZSwgbWluVmFsdWU6IERhdGUsIG1heFZhbHVlOiBEYXRlKTogYm9vbGVhbiB7XG4gICAgICAgIGlmIChtaW5WYWx1ZSAmJiBEYXRlVGltZVV0aWwubGVzc1RoYW5NaW5WYWx1ZSh2YWx1ZSwgbWluVmFsdWUsIHRydWUsIGZhbHNlKSkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIGlmIChtYXhWYWx1ZSAmJiBEYXRlVGltZVV0aWwuZ3JlYXRlclRoYW5NYXhWYWx1ZSh2YWx1ZSwgbWF4VmFsdWUsIHRydWUsIGZhbHNlKSkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBwYXJzZVRvRGF0ZSh2YWx1ZTogRGF0ZSB8IHN0cmluZyk6IERhdGUgfCBudWxsIHtcbiAgICAgICAgcmV0dXJuIERhdGVUaW1lVXRpbC5pc1ZhbGlkRGF0ZSh2YWx1ZSkgPyB2YWx1ZSA6IERhdGVUaW1lVXRpbC5wYXJzZUlzb0RhdGUodmFsdWUpO1xuICAgIH1cblxuICAgIHByaXZhdGUgdG9Ud2VudHlGb3VySG91ckZvcm1hdChob3VyOiBudW1iZXIsIGFtcG06IHN0cmluZyk6IG51bWJlciB7XG4gICAgICAgIGlmIChhbXBtID09PSAnUE0nICYmIGhvdXIgPCAxMikge1xuICAgICAgICAgICAgaG91ciArPSAxMjtcbiAgICAgICAgfSBlbHNlIGlmIChhbXBtID09PSAnQU0nICYmIGhvdXIgPT09IDEyKSB7XG4gICAgICAgICAgICBob3VyID0gMDtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBob3VyO1xuICAgIH1cblxuICAgIHByaXZhdGUgdXBkYXRlVmFsdWUobmV3VmFsdWU6IERhdGUgfCBudWxsKTogdm9pZCB7XG4gICAgICAgIGlmICghdGhpcy52YWx1ZSkge1xuICAgICAgICAgICAgdGhpcy52YWx1ZSA9IG5ld1ZhbHVlID8gbmV3IERhdGUobmV3VmFsdWUpIDogbmV3VmFsdWU7XG4gICAgICAgIH0gZWxzZSBpZiAoaXNEYXRlKHRoaXMudmFsdWUpKSB7XG4gICAgICAgICAgICBjb25zdCBkYXRlID0gbmV3IERhdGUodGhpcy52YWx1ZSk7XG4gICAgICAgICAgICBkYXRlLnNldEhvdXJzKG5ld1ZhbHVlPy5nZXRIb3VycygpIHx8IDAsIG5ld1ZhbHVlPy5nZXRNaW51dGVzKCkgfHwgMCwgbmV3VmFsdWU/LmdldFNlY29uZHMoKSB8fCAwKTtcbiAgICAgICAgICAgIHRoaXMudmFsdWUgPSBkYXRlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy52YWx1ZSA9IG5ld1ZhbHVlID8gdGhpcy50b0lTT1N0cmluZyhuZXdWYWx1ZSkgOiBuZXdWYWx1ZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgdXBkYXRlRWRpdG9yVmFsdWUoKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGRhdGUgPSB0aGlzLmRhdGVUaW1lRWRpdG9yLnZhbHVlID8gbmV3IERhdGUodGhpcy5kYXRlVGltZUVkaXRvci52YWx1ZSkgOiBuZXcgRGF0ZSgpO1xuICAgICAgICBkYXRlLnNldEhvdXJzKHRoaXMuX3NlbGVjdGVkRGF0ZS5nZXRIb3VycygpLCB0aGlzLl9zZWxlY3RlZERhdGUuZ2V0TWludXRlcygpLCB0aGlzLl9zZWxlY3RlZERhdGUuZ2V0U2Vjb25kcygpKTtcbiAgICAgICAgdGhpcy5kYXRlVGltZUVkaXRvci52YWx1ZSA9IGRhdGU7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzdWJzY3JpYmVUb0RhdGVFZGl0b3JFdmVudHMoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuZGF0ZVRpbWVFZGl0b3IudmFsdWVDaGFuZ2UucGlwZShcbiAgICAgICAgICAgIC8vIGludGVybmFsIGRhdGUgZWRpdG9yIGRpcmVjdGl2ZSBpcyBvbmx5IHVzZWQgdy8gRGF0ZSBvYmplY3QgdmFsdWVzOlxuICAgICAgICAgICAgdGFrZVVudGlsKHRoaXMuX2Rlc3Ryb3kkKSkuc3Vic2NyaWJlKChkYXRlOiBEYXRlIHwgbnVsbCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMudXBkYXRlVmFsdWUoZGF0ZSk7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICB0aGlzLmRhdGVUaW1lRWRpdG9yLnZhbGlkYXRpb25GYWlsZWQucGlwZShcbiAgICAgICAgICAgIHRha2VVbnRpbCh0aGlzLl9kZXN0cm95JCkpLnN1YnNjcmliZSgoZXZlbnQpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLmVtaXRWYWxpZGF0aW9uRmFpbGVkRXZlbnQoZXZlbnQub2xkVmFsdWUpO1xuICAgICAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzdWJzY3JpYmVUb1RvZ2dsZURpcmVjdGl2ZUV2ZW50cygpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMudG9nZ2xlUmVmKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5faW5wdXRHcm91cCkge1xuICAgICAgICAgICAgICAgIHRoaXMudG9nZ2xlUmVmLmVsZW1lbnQuc3R5bGUud2lkdGggPSB0aGlzLl9pbnB1dEdyb3VwLmVsZW1lbnQubmF0aXZlRWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS53aWR0aCArICdweCc7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMudG9nZ2xlUmVmLm9wZW5pbmcucGlwZSh0YWtlVW50aWwodGhpcy5fZGVzdHJveSQpKS5zdWJzY3JpYmUoKGUpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBhcmdzOiBJQmFzZUNhbmNlbGFibGVCcm93c2VyRXZlbnRBcmdzID0geyBvd25lcjogdGhpcywgZXZlbnQ6IGUuZXZlbnQsIGNhbmNlbDogZmFsc2UgfTtcbiAgICAgICAgICAgICAgICB0aGlzLm9wZW5pbmcuZW1pdChhcmdzKTtcbiAgICAgICAgICAgICAgICBlLmNhbmNlbCA9IGFyZ3MuY2FuY2VsO1xuICAgICAgICAgICAgICAgIGlmIChhcmdzLmNhbmNlbCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRoaXMuaW5pdGlhbGl6ZUNvbnRhaW5lcigpO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIHRoaXMudG9nZ2xlUmVmLm9wZW5lZC5waXBlKHRha2VVbnRpbCh0aGlzLl9kZXN0cm95JCkpLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5vcGVuZWQuZW1pdCh7IG93bmVyOiB0aGlzIH0pO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIHRoaXMudG9nZ2xlUmVmLmNsb3NlZC5waXBlKHRha2VVbnRpbCh0aGlzLl9kZXN0cm95JCkpLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5jbG9zZWQuZW1pdCh7IG93bmVyOiB0aGlzIH0pO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIHRoaXMudG9nZ2xlUmVmLmNsb3NpbmcucGlwZSh0YWtlVW50aWwodGhpcy5fZGVzdHJveSQpKS5zdWJzY3JpYmUoKGUpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBhcmdzOiBJQmFzZUNhbmNlbGFibGVCcm93c2VyRXZlbnRBcmdzID0geyBvd25lcjogdGhpcywgZXZlbnQ6IGUuZXZlbnQsIGNhbmNlbDogZmFsc2UgfTtcbiAgICAgICAgICAgICAgICB0aGlzLmNsb3NpbmcuZW1pdChhcmdzKTtcbiAgICAgICAgICAgICAgICBlLmNhbmNlbCA9IGFyZ3MuY2FuY2VsO1xuICAgICAgICAgICAgICAgIGlmIChhcmdzLmNhbmNlbCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gdGhpcy5wYXJzZVRvRGF0ZSh0aGlzLnZhbHVlKTtcbiAgICAgICAgICAgICAgICBpZiAoKHRoaXMuZGF0ZVRpbWVFZGl0b3IudmFsdWUgYXMgRGF0ZSk/LmdldFRpbWUoKSAhPT0gdmFsdWU/LmdldFRpbWUoKSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnVwZGF0ZVZhbHVlKHRoaXMuX3NlbGVjdGVkRGF0ZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIC8vIERvIG5vdCBmb2N1cyB0aGUgaW5wdXQgaWYgY2xpY2tpbmcgb3V0c2lkZSBpbiBkcm9wZG93biBtb2RlXG4gICAgICAgICAgICAgICAgY29uc3QgaW5wdXQgPSB0aGlzLmdldEVkaXRFbGVtZW50KCk7XG4gICAgICAgICAgICAgICAgaWYgKGlucHV0ICYmICEoZS5ldmVudCAmJiB0aGlzLmlzRHJvcGRvd24pKSB7XG4gICAgICAgICAgICAgICAgICAgIGlucHV0LmZvY3VzKCk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy51cGRhdGVWYWxpZGl0eU9uQmx1cigpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxufVxuIiwiPGlneC1pbnB1dC1ncm91cCBbZGlzcGxheURlbnNpdHldPVwiZGlzcGxheURlbnNpdHlcIiBbdHlwZV09XCJ0eXBlXCIgW3N1cHByZXNzSW5wdXRBdXRvZm9jdXNdPVwiaXNEcm9wZG93blwiPlxuICAgIDxpbnB1dCBbZGlzcGxheVZhbHVlUGlwZV09XCJmb3JtYXR0ZXIgPyBkaXNwbGF5VmFsdWUgOiBudWxsXCIgaWd4SW5wdXQgW2lneERhdGVUaW1lRWRpdG9yXT1cImlucHV0Rm9ybWF0XCJcbiAgICAgICAgdHlwZT1cInRleHRcIiBbcmVhZG9ubHldPVwiIWlzRHJvcGRvd24gfHwgcmVhZE9ubHlcIiBbbWluVmFsdWVdPVwibWluVmFsdWVcIiBbbWF4VmFsdWVdPVwibWF4VmFsdWVcIlxuICAgICAgICBbbG9jYWxlXT1cImxvY2FsZVwiIFtzcGluRGVsdGFdPVwiaXRlbXNEZWx0YVwiIFtzcGluTG9vcF09XCJzcGluTG9vcFwiIFtwbGFjZWhvbGRlcl09XCJwbGFjZWhvbGRlclwiXG4gICAgICAgIFtkaXNhYmxlZF09XCJkaXNhYmxlZFwiIFtkaXNwbGF5Rm9ybWF0XT1cImRpc3BsYXlGb3JtYXRcIlxuICAgICAgICBbaWd4VGV4dFNlbGVjdGlvbl09XCJpc0Ryb3Bkb3duICYmICFyZWFkT25seVwiIHJvbGU9XCJjb21ib2JveFwiIGFyaWEtaGFzcG9wdXA9XCJkaWFsb2dcIlxuICAgICAgICBbYXR0ci5hcmlhLWV4cGFuZGVkXT1cIiF0b2dnbGVEaXJlY3RpdmUuY29sbGFwc2VkXCIgW2F0dHIuYXJpYS1sYWJlbGxlZGJ5XT1cImxhYmVsPy5pZFwiXG4gICAgICAgIChjbGljayk9XCIhaXNEcm9wZG93biAmJiB0b2dnbGUoKVwiLz5cblxuICAgIDxpZ3gtcHJlZml4ICpuZ0lmPVwiIXRvZ2dsZUNvbXBvbmVudHMubGVuZ3RoXCIgKGNsaWNrKT1cInRvZ2dsZSgpXCI+XG4gICAgICAgIDxpZ3gtaWNvbiBbdGl0bGVdPVwidmFsdWUgPyByZXNvdXJjZVN0cmluZ3MuaWd4X3RpbWVfcGlja2VyX2NoYW5nZV90aW1lIDogcmVzb3VyY2VTdHJpbmdzLmlneF90aW1lX3BpY2tlcl9jaG9vc2VfdGltZVwiPmFjY2Vzc190aW1lPC9pZ3gtaWNvbj5cbiAgICA8L2lneC1wcmVmaXg+XG5cbiAgICA8bmctY29udGFpbmVyIG5nUHJvamVjdEFzPVwiW2lneExhYmVsXVwiPlxuICAgICAgICA8bmctY29udGVudCBzZWxlY3Q9XCJbaWd4TGFiZWxdXCI+PC9uZy1jb250ZW50PlxuICAgIDwvbmctY29udGFpbmVyPlxuICAgIDxuZy1jb250YWluZXIgbmdQcm9qZWN0QXM9XCJpZ3gtcHJlZml4XCI+XG4gICAgICAgIDxuZy1jb250ZW50IHNlbGVjdD1cImlneC1wcmVmaXgsW2lneFByZWZpeF1cIj48L25nLWNvbnRlbnQ+XG4gICAgPC9uZy1jb250YWluZXI+XG5cbiAgICA8aWd4LXN1ZmZpeCAqbmdJZj1cInNob3dDbGVhckJ1dHRvblwiIChjbGljayk9XCJjbGVhcigpOyAkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcIj5cbiAgICAgICAgPGlneC1pY29uPmNsZWFyPC9pZ3gtaWNvbj5cbiAgICA8L2lneC1zdWZmaXg+XG5cbiAgICA8bmctY29udGFpbmVyIG5nUHJvamVjdEFzPVwiaWd4LXN1ZmZpeFwiPlxuICAgICAgICA8bmctY29udGVudCBzZWxlY3Q9XCJpZ3gtc3VmZml4LFtpZ3hTdWZmaXhdXCI+PC9uZy1jb250ZW50PlxuICAgIDwvbmctY29udGFpbmVyPlxuICAgIDxuZy1jb250YWluZXIgbmdQcm9qZWN0QXM9XCJpZ3gtaGludFwiPlxuICAgICAgICA8bmctY29udGVudCBzZWxlY3Q9XCJpZ3gtaGludCxbaWd4SGludF1cIj48L25nLWNvbnRlbnQ+XG4gICAgPC9uZy1jb250YWluZXI+XG48L2lneC1pbnB1dC1ncm91cD5cblxuPG5nLXRlbXBsYXRlICNkZWZhdWx0VGltZVBpY2tlckFjdGlvbnM+XG4gICAgPGRpdiAqbmdJZj1cImNhbmNlbEJ1dHRvbkxhYmVsIHx8IG9rQnV0dG9uTGFiZWxcIiBjbGFzcz1cImlneC10aW1lLXBpY2tlcl9fYnV0dG9uc1wiPlxuICAgICAgICA8YnV0dG9uICpuZ0lmPVwiY2FuY2VsQnV0dG9uTGFiZWxcIiB0eXBlPVwiYnV0dG9uXCIgaWd4QnV0dG9uPVwiZmxhdFwiIChjbGljayk9XCJjYW5jZWxCdXR0b25DbGljaygpXCI+XG4gICAgICAgICAgICB7e2NhbmNlbEJ1dHRvbkxhYmVsfX1cbiAgICAgICAgPC9idXR0b24+XG4gICAgICAgIDxidXR0b24gKm5nSWY9XCJva0J1dHRvbkxhYmVsXCIgdHlwZT1cImJ1dHRvblwiIGlneEJ1dHRvbj1cImZsYXRcIiAoY2xpY2spPVwib2tCdXR0b25DbGljaygpXCI+XG4gICAgICAgICAgICB7e29rQnV0dG9uTGFiZWx9fVxuICAgICAgICA8L2J1dHRvbj5cbiAgICA8L2Rpdj5cbjwvbmctdGVtcGxhdGU+XG5cbjxkaXYgI3RvZ2dsZURpcmVjdGl2ZT1cInRvZ2dsZVwiIGlneFRvZ2dsZSByb2xlPVwiZGlhbG9nXCIgY2xhc3M9XCJpZ3gtdGltZS1waWNrZXJcIlxuICAgIFtuZ0NsYXNzXT1cInsnaWd4LXRpbWUtcGlja2VyLS1kcm9wZG93bic6IGlzRHJvcGRvd24sICdpZ3gtdGltZS1waWNrZXItLXZlcnRpY2FsJzogaXNWZXJ0aWNhbCAmJiAhaXNEcm9wZG93bn1cIj5cbiAgICA8ZGl2ICpuZ0lmPVwiIWlzRHJvcGRvd25cIiBjbGFzcz1cImlneC10aW1lLXBpY2tlcl9faGVhZGVyXCI+XG4gICAgICAgIDxoMiBjbGFzcz1cImlneC10aW1lLXBpY2tlcl9faGVhZGVyLWhvdXJcIj5cbiAgICAgICAgICAgIDxzcGFuPnt7IHNlbGVjdGVkRGF0ZSB8IHRpbWVGb3JtYXRQaXBlIH19PC9zcGFuPlxuICAgICAgICA8L2gyPlxuICAgIDwvZGl2PlxuICAgIDxkaXYgY2xhc3M9XCJpZ3gtdGltZS1waWNrZXJfX21haW5cIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImlneC10aW1lLXBpY2tlcl9fYm9keVwiPlxuICAgICAgICAgICAgPGRpdiAqbmdJZj1cInNob3dIb3Vyc0xpc3RcIiAjaG91ckxpc3QgW2lneEl0ZW1MaXN0XT1cIidob3VyTGlzdCdcIj5cbiAgICAgICAgICAgICAgICA8c3BhbiBbaWd4VGltZUl0ZW1dPVwiaG91clwiICN0aW1lSXRlbT1cInRpbWVJdGVtXCIgYXJpYS1sYWJlbD1cImhvdXJcIlxuICAgICAgICAgICAgICAgICAgICBbYXR0ci5yb2xlXT1cInRpbWVJdGVtLmlzU2VsZWN0ZWRUaW1lID8gJ3NwaW5idXR0b24nIDogbnVsbFwiXG4gICAgICAgICAgICAgICAgICAgIFthdHRyLmFyaWEtdmFsdWVub3ddPVwidGltZUl0ZW0uaXNTZWxlY3RlZFRpbWUgPyB0aW1lSXRlbS5ob3VyVmFsdWUgOiBudWxsXCJcbiAgICAgICAgICAgICAgICAgICAgW2F0dHIuYXJpYS12YWx1ZW1pbl09XCJ0aW1lSXRlbS5pc1NlbGVjdGVkVGltZSA/IHRpbWVJdGVtLm1pblZhbHVlIDogbnVsbFwiXG4gICAgICAgICAgICAgICAgICAgIFthdHRyLmFyaWEtdmFsdWVtYXhdPVwidGltZUl0ZW0uaXNTZWxlY3RlZFRpbWUgPyB0aW1lSXRlbS5tYXhWYWx1ZSA6IG51bGxcIlxuICAgICAgICAgICAgICAgICAgICAqbmdGb3I9XCJsZXQgaG91ciBvZiBob3VySXRlbXMgfCB0aW1lSXRlbVBpcGU6J2hvdXInOnNlbGVjdGVkRGF0ZTptaW5Ecm9wZG93blZhbHVlOm1heERyb3Bkb3duVmFsdWVcIj57eyBob3VyIH19PC9zcGFuPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2ICpuZ0lmPVwic2hvd01pbnV0ZXNMaXN0XCIgI21pbnV0ZUxpc3QgW2lneEl0ZW1MaXN0XT1cIidtaW51dGVMaXN0J1wiPlxuICAgICAgICAgICAgICAgIDxzcGFuIFtpZ3hUaW1lSXRlbV09XCJtaW51dGVcIiAjdGltZUl0ZW09XCJ0aW1lSXRlbVwiIGFyaWEtbGFiZWw9XCJtaW51dGVzXCJcbiAgICAgICAgICAgICAgICAgICAgW2F0dHIucm9sZV09XCJ0aW1lSXRlbS5pc1NlbGVjdGVkVGltZSA/ICdzcGluYnV0dG9uJyA6IG51bGxcIlxuICAgICAgICAgICAgICAgICAgICBbYXR0ci5hcmlhLXZhbHVlbm93XT1cInRpbWVJdGVtLmlzU2VsZWN0ZWRUaW1lID8gbWludXRlIDogbnVsbFwiXG4gICAgICAgICAgICAgICAgICAgIFthdHRyLmFyaWEtdmFsdWVtaW5dPVwidGltZUl0ZW0uaXNTZWxlY3RlZFRpbWUgPyB0aW1lSXRlbS5taW5WYWx1ZSA6IG51bGxcIlxuICAgICAgICAgICAgICAgICAgICBbYXR0ci5hcmlhLXZhbHVlbWF4XT1cInRpbWVJdGVtLmlzU2VsZWN0ZWRUaW1lID8gdGltZUl0ZW0ubWF4VmFsdWUgOiBudWxsXCJcbiAgICAgICAgICAgICAgICAgICAgKm5nRm9yPVwibGV0IG1pbnV0ZSBvZiBtaW51dGVJdGVtcyB8IHRpbWVJdGVtUGlwZTonbWludXRlcyc6c2VsZWN0ZWREYXRlOm1pbkRyb3Bkb3duVmFsdWU6bWF4RHJvcGRvd25WYWx1ZVwiPnt7IG1pbnV0ZSB9fTwvc3Bhbj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiAqbmdJZj1cInNob3dTZWNvbmRzTGlzdFwiICNzZWNvbmRzTGlzdCBbaWd4SXRlbUxpc3RdPVwiJ3NlY29uZHNMaXN0J1wiPlxuICAgICAgICAgICAgICAgIDxzcGFuIFtpZ3hUaW1lSXRlbV09XCJzZWNvbmRzXCIgI3RpbWVJdGVtPVwidGltZUl0ZW1cIiBhcmlhLWxhYmVsPVwic2Vjb25kc1wiXG4gICAgICAgICAgICAgICAgICAgIFthdHRyLnJvbGVdPVwidGltZUl0ZW0uaXNTZWxlY3RlZFRpbWUgPyAnc3BpbmJ1dHRvbicgOiBudWxsXCJcbiAgICAgICAgICAgICAgICAgICAgW2F0dHIuYXJpYS12YWx1ZW5vd109XCJ0aW1lSXRlbS5pc1NlbGVjdGVkVGltZSA/IHNlY29uZHMgOiBudWxsXCJcbiAgICAgICAgICAgICAgICAgICAgW2F0dHIuYXJpYS12YWx1ZW1pbl09XCJ0aW1lSXRlbS5pc1NlbGVjdGVkVGltZSA/IHRpbWVJdGVtLm1pblZhbHVlIDogbnVsbFwiXG4gICAgICAgICAgICAgICAgICAgIFthdHRyLmFyaWEtdmFsdWVtYXhdPVwidGltZUl0ZW0uaXNTZWxlY3RlZFRpbWUgPyB0aW1lSXRlbS5tYXhWYWx1ZSA6IG51bGxcIlxuICAgICAgICAgICAgICAgICAgICAqbmdGb3I9XCJsZXQgc2Vjb25kcyBvZiBzZWNvbmRzSXRlbXMgfCB0aW1lSXRlbVBpcGU6J3NlY29uZHMnOnNlbGVjdGVkRGF0ZTptaW5Ecm9wZG93blZhbHVlOm1heERyb3Bkb3duVmFsdWVcIj57eyBzZWNvbmRzIH19PC9zcGFuPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2ICpuZ0lmPVwic2hvd0FtUG1MaXN0XCIgI2FtcG1MaXN0IFtpZ3hJdGVtTGlzdF09XCInYW1wbUxpc3QnXCI+XG4gICAgICAgICAgICAgICAgPHNwYW4gW2lneFRpbWVJdGVtXT1cImFtcG1cIiAjdGltZUl0ZW09XCJ0aW1lSXRlbVwiIGFyaWEtbGFiZWw9XCJhbXBtXCJcbiAgICAgICAgICAgICAgICAgICAgW2F0dHIucm9sZV09XCJ0aW1lSXRlbS5pc1NlbGVjdGVkVGltZSA/ICdzcGluYnV0dG9uJyA6IG51bGxcIlxuICAgICAgICAgICAgICAgICAgICBbYXR0ci5hcmlhLXZhbHVlbm93XT1cInRpbWVJdGVtLmlzU2VsZWN0ZWRUaW1lID8gYW1wbSA6IG51bGxcIlxuICAgICAgICAgICAgICAgICAgICBbYXR0ci5hcmlhLXZhbHVlbWluXT1cInRpbWVJdGVtLmlzU2VsZWN0ZWRUaW1lID8gdGltZUl0ZW0ubWluVmFsdWUgOiBudWxsXCJcbiAgICAgICAgICAgICAgICAgICAgW2F0dHIuYXJpYS12YWx1ZW1heF09XCJ0aW1lSXRlbS5pc1NlbGVjdGVkVGltZSA/IHRpbWVJdGVtLm1heFZhbHVlIDogbnVsbFwiXG4gICAgICAgICAgICAgICAgICAgICpuZ0Zvcj1cImxldCBhbXBtIG9mIGFtcG1JdGVtcyB8IHRpbWVJdGVtUGlwZTonYW1wbSc6c2VsZWN0ZWREYXRlOm1pbkRyb3Bkb3duVmFsdWU6bWF4RHJvcGRvd25WYWx1ZVwiPnt7IGFtcG0gfX08L3NwYW4+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAgICpuZ1RlbXBsYXRlT3V0bGV0PVwidGltZVBpY2tlckFjdGlvbnNEaXJlY3RpdmUgPyB0aW1lUGlja2VyQWN0aW9uc0RpcmVjdGl2ZS50ZW1wbGF0ZSA6IGRlZmF1bHRUaW1lUGlja2VyQWN0aW9uc1wiPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8L2Rpdj5cbjwvZGl2PlxuIl19
1109
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGltZS1waWNrZXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvaWduaXRldWktYW5ndWxhci9zcmMvbGliL3RpbWUtcGlja2VyL3RpbWUtcGlja2VyLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2lnbml0ZXVpLWFuZ3VsYXIvc3JjL2xpYi90aW1lLXBpY2tlci90aW1lLXBpY2tlci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUN6RSxPQUFPLEVBQ0gsU0FBUyxFQUVULFlBQVksRUFDWixXQUFXLEVBQ1gsS0FBSyxFQUdMLE1BQU0sRUFDTixTQUFTLEVBQ1QsWUFBWSxFQUNaLE1BQU0sRUFLTixTQUFTLEVBQUUsUUFBUSxFQUFFLGVBQWUsRUFBYSxZQUFZLEVBQ2hFLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFFSCxpQkFBaUIsRUFDakIsU0FBUyxFQUlULGFBQWEsRUFDaEIsTUFBTSxnQkFBZ0IsQ0FBQztBQUV4QixPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSxzQ0FBc0MsQ0FBQztBQUM5RSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsYUFBYSxFQUFFLE1BQU0scUNBQXFDLENBQUM7QUFDdkYsT0FBTyxFQUFxQixvQkFBb0IsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQ3BGLE9BQU8sRUFBRSxtQkFBbUIsRUFBMEIsTUFBTSxpQkFBaUIsQ0FBQztBQUM5RSxPQUFPLEVBQ0gsb0JBQW9CLEVBQ3BCLG9CQUFvQixFQUN2QixNQUFNLDBCQUEwQixDQUFDO0FBQ2xDLE9BQU8sRUFBZ0IsSUFBSSxFQUFFLFNBQVMsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUNyRCxPQUFPLEVBQXFCLHlCQUF5QixFQUFF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SztnQkFjQyxpQkFBaUI7c0JBRHZCLEtBQUs7Z0JBS0MsUUFBUTtzQkFEZCxLQUFLO2dCQVlDLFFBQVE7c0JBRGQsTUFBTTtnQkFlQSxXQUFXO3NCQURqQixNQUFNO2dCQVlBLGdCQUFnQjtzQkFEdEIsTUFBTTtnQkFLQSxRQUFRO3NCQURkLFNBQVM7dUJBQUMsVUFBVTtnQkFLZCxVQUFVO3NCQURoQixTQUFTO3VCQUFDLFlBQVk7Z0JBS2hCLFdBQVc7c0JBRGpCLFNBQVM7dUJBQUMsYUFBYTtnQkFLakIsUUFBUTtzQkFEZCxTQUFTO3VCQUFDLFVBQVU7Z0JBS2QsZUFBZTtzQkFEckIsZUFBZTt1QkFBQyx1QkFBdUI7Z0JBS2pDLEtBQUs7c0JBRFgsWUFBWTt1QkFBQyxpQkFBaUI7Z0JBS3hCLDBCQUEwQjtzQkFEaEMsWUFBWTt1QkFBQyx5QkFBeUI7Z0JBSS9CLGNBQWM7c0JBRHJCLFNBQVM7dUJBQUMsaUJBQWlCLEVBQUUsRUFBRSxJQUFJLEVBQUUsaUJBQWlCLEVBQUU7Z0JBSWpELFdBQVc7c0JBRGxCLFNBQVM7dUJBQUMsc0JBQXNCO2dCQUl6QixjQUFjO3NCQURyQixTQUFTO3VCQUFDLDBCQUEwQixFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRTtnQkFJL0MsU0FBUztzQkFEaEIsU0FBUzt1QkFBQyxrQkFBa0I7Z0JBOEtsQixLQUFLO3NCQURmLEtBQUs7Z0JBeUJLLGVBQWU7c0JBRHpCLEtBQUs7Z0JBbUJLLGFBQWE7c0JBRHZCLEtBQUs7Z0JBdUJLLGlCQUFpQjtzQkFEM0IsS0FBSztnQkF3QkssVUFBVTtzQkFEcEIsS0FBSztnQkF1QkMsU0FBUztzQkFEZixZQUFZO3VCQUFDLFNBQVMsRUFBRSxDQUFDLFFBQVEsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE5nSWYsIE5nQ2xhc3MsIE5nRm9yLCBOZ1RlbXBsYXRlT3V0bGV0IH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7XG4gICAgQ29tcG9uZW50LFxuICAgIEVsZW1lbnRSZWYsXG4gICAgRXZlbnRFbWl0dGVyLFxuICAgIEhvc3RCaW5kaW5nLFxuICAgIElucHV0LFxuICAgIE9uRGVzdHJveSxcbiAgICBPbkluaXQsXG4gICAgT3V0cHV0LFxuICAgIFZpZXdDaGlsZCxcbiAgICBDb250ZW50Q2hpbGQsXG4gICAgSW5qZWN0LFxuICAgIEFmdGVyVmlld0luaXQsXG4gICAgSW5qZWN0b3IsXG4gICAgUGlwZVRyYW5zZm9ybSxcbiAgICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICBMT0NBTEVfSUQsIE9wdGlvbmFsLCBDb250ZW50Q2hpbGRyZW4sIFF1ZXJ5TGlzdCwgSG9zdExpc3RlbmVyXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtcbiAgICBDb250cm9sVmFsdWVBY2Nlc3NvcixcbiAgICBOR19WQUxVRV9BQ0NFU1NPUixcbiAgICBOZ0NvbnRyb2wsXG4gICAgQWJzdHJhY3RDb250cm9sLFxuICAgIFZhbGlkYXRpb25FcnJvcnMsXG4gICAgVmFsaWRhdG9yLFxuICAgIE5HX1ZBTElEQVRPUlNcbn0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuXG5pbXBvcnQgeyBJZ3hJbnB1dEdyb3VwQ29tcG9uZW50IH0gZnJvbSAnLi4vaW5wdXQtZ3JvdXAvaW5wdXQtZ3JvdXAuY29tcG9uZW50JztcbmltcG9ydCB7IElneElucHV0RGlyZWN0aXZlLCBJZ3hJbnB1dFN0YXRlIH0gZnJvbSAnLi4vZGlyZWN0aXZlcy9pbnB1dC9pbnB1dC5kaXJlY3RpdmUnO1xuaW1wb3J0IHsgSWd4SW5wdXRHcm91cFR5cGUsIElHWF9JTlBVVF9HUk9VUF9UWVBFIH0gZnJvbSAnLi4vaW5wdXQtZ3JvdXAvcHVibGljX2FwaSc7XG5pbXBvcnQgeyBEaXNwbGF5RGVuc2l0eVRva2VuLCBJRGlzcGxheURlbnNpdHlPcHRpb25zIH0gZnJvbSAnLi4vY29yZS9kZW5zaXR5JztcbmltcG9ydCB7XG4gICAgSWd4SXRlbUxpc3REaXJlY3RpdmUsXG4gICAgSWd4VGltZUl0ZW1EaXJlY3RpdmVcbn0gZnJvbSAnLi90aW1lLXBpY2tlci5kaXJlY3RpdmVzJztcbmltcG9ydCB7IFN1YnNjcmlwdGlvbiwgbm9vcCwgZnJvbUV2ZW50IH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBJZ3hUaW1lUGlja2VyQmFzZSwgSUdYX1RJTUVfUElDS0VSX0NPTVBPTkVOVCB9IGZyb20gJy4vdGltZS1waWNrZXIuY29tbW9uJztcbmltcG9ydCB7IEFic29sdXRlU2Nyb2xsU3RyYXRlZ3kgfSBmcm9tICcuLi9zZXJ2aWNlcy9vdmVybGF5L3Njcm9sbCc7XG5pbXBvcnQgeyBBdXRvUG9zaXRpb25TdHJhdGVneSB9IGZyb20gJy4uL3NlcnZpY2VzL292ZXJsYXkvcG9zaXRpb24nO1xuaW1wb3J0IHsgT3ZlcmxheVNldHRpbmdzIH0gZnJvbSAnLi4vc2VydmljZXMvb3ZlcmxheS91dGlsaXRpZXMnO1xuaW1wb3J0IHsgdGFrZVVudGlsIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgSWd4QnV0dG9uRGlyZWN0aXZlIH0gZnJvbSAnLi4vZGlyZWN0aXZlcy9idXR0b24vYnV0dG9uLmRpcmVjdGl2ZSc7XG5cbmltcG9ydCB7IElneERhdGVUaW1lRWRpdG9yRGlyZWN0aXZlIH0gZnJvbSAnLi4vZGlyZWN0aXZlcy9kYXRlLXRpbWUtZWRpdG9yL2RhdGUtdGltZS1lZGl0b3IuZGlyZWN0aXZlJztcbmltcG9ydCB7IElneFRvZ2dsZURpcmVjdGl2ZSB9IGZyb20gJy4uL2RpcmVjdGl2ZXMvdG9nZ2xlL3RvZ2dsZS5kaXJlY3RpdmUnO1xuaW1wb3J0IHsgSVRpbWVQaWNrZXJSZXNvdXJjZVN0cmluZ3MgfSBmcm9tICcuLi9jb3JlL2kxOG4vdGltZS1waWNrZXItcmVzb3VyY2VzJztcbmltcG9ydCB7IEN1cnJlbnRSZXNvdXJjZVN0cmluZ3MgfSBmcm9tICcuLi9jb3JlL2kxOG4vcmVzb3VyY2VzJztcbmltcG9ydCB7IElCYXNlRXZlbnRBcmdzLCBpc0VxdWFsLCBpc0RhdGUsIFBsYXRmb3JtVXRpbCwgSUJhc2VDYW5jZWxhYmxlQnJvd3NlckV2ZW50QXJncyB9IGZyb20gJy4uL2NvcmUvdXRpbHMnO1xuaW1wb3J0IHsgUGlja2VySW50ZXJhY3Rpb25Nb2RlIH0gZnJvbSAnLi4vZGF0ZS1jb21tb24vdHlwZXMnO1xuaW1wb3J0IHsgSWd4VGV4dFNlbGVjdGlvbkRpcmVjdGl2ZSB9IGZyb20gJy4uL2RpcmVjdGl2ZXMvdGV4dC1zZWxlY3Rpb24vdGV4dC1zZWxlY3Rpb24uZGlyZWN0aXZlJztcbmltcG9ydCB7IElneExhYmVsRGlyZWN0aXZlIH0gZnJvbSAnLi4vZGlyZWN0aXZlcy9sYWJlbC9sYWJlbC5kaXJlY3RpdmUnO1xuaW1wb3J0IHsgUGlja2VyQmFzZURpcmVjdGl2ZSB9IGZyb20gJy4uL2RhdGUtY29tbW9uL3BpY2tlci1iYXNlLmRpcmVjdGl2ZSc7XG5pbXBvcnQgeyBEYXRlVGltZVV0aWwgfSBmcm9tICcuLi9kYXRlLWNvbW1vbi91dGlsL2RhdGUtdGltZS51dGlsJztcbmltcG9ydCB7IERhdGVQYXJ0LCBEYXRlUGFydERlbHRhcyB9IGZyb20gJy4uL2RpcmVjdGl2ZXMvZGF0ZS10aW1lLWVkaXRvci9wdWJsaWNfYXBpJztcbmltcG9ydCB7IFBpY2tlckhlYWRlck9yaWVudGF0aW9uIH0gZnJvbSAnLi4vZGF0ZS1jb21tb24vdHlwZXMnO1xuaW1wb3J0IHsgSWd4UGlja2VyQWN0aW9uc0RpcmVjdGl2ZSwgSWd4UGlja2VyQ2xlYXJDb21wb25lbnQgfSBmcm9tICcuLi9kYXRlLWNvbW1vbi9waWNrZXItaWNvbnMuY29tbW9uJztcbmltcG9ydCB7IFRpbWVGb3JtYXRQaXBlLCBUaW1lSXRlbVBpcGUgfSBmcm9tICcuL3RpbWUtcGlja2VyLnBpcGVzJztcbmltcG9ydCB7IElneFN1ZmZpeERpcmVjdGl2ZSB9IGZyb20gJy4uL2RpcmVjdGl2ZXMvc3VmZml4L3N1ZmZpeC5kaXJlY3RpdmUnO1xuaW1wb3J0IHsgSWd4SWNvbkNvbXBvbmVudCB9IGZyb20gJy4uL2ljb24vaWNvbi5jb21wb25lbnQnO1xuaW1wb3J0IHsgSWd4UHJlZml4RGlyZWN0aXZlIH0gZnJvbSAnLi4vZGlyZWN0aXZlcy9wcmVmaXgvcHJlZml4LmRpcmVjdGl2ZSc7XG5cbmxldCBORVhUX0lEID0gMDtcbmV4cG9ydCBpbnRlcmZhY2UgSWd4VGltZVBpY2tlclZhbGlkYXRpb25GYWlsZWRFdmVudEFyZ3MgZXh0ZW5kcyBJQmFzZUV2ZW50QXJncyB7XG4gICAgcHJldmlvdXNWYWx1ZTogRGF0ZSB8IHN0cmluZztcbiAgICBjdXJyZW50VmFsdWU6IERhdGUgfCBzdHJpbmc7XG59XG5cbkBDb21wb25lbnQoe1xuICAgIHByb3ZpZGVyczogW1xuICAgICAgICB7XG4gICAgICAgICAgICBwcm92aWRlOiBOR19WQUxVRV9BQ0NFU1NPUixcbiAgICAgICAgICAgIHVzZUV4aXN0aW5nOiBJZ3hUaW1lUGlja2VyQ29tcG9uZW50LFxuICAgICAgICAgICAgbXVsdGk6IHRydWVcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAgcHJvdmlkZTogSUdYX1RJTUVfUElDS0VSX0NPTVBPTkVOVCxcbiAgICAgICAgICAgIHVzZUV4aXN0aW5nOiBJZ3hUaW1lUGlja2VyQ29tcG9uZW50XG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIHByb3ZpZGU6IE5HX1ZBTElEQVRPUlMsXG4gICAgICAgICAgICB1c2VFeGlzdGluZzogSWd4VGltZVBpY2tlckNvbXBvbmVudCxcbiAgICAgICAgICAgIG11bHRpOiB0cnVlXG4gICAgICAgIH1cbiAgICBdLFxuICAgIHNlbGVjdG9yOiAnaWd4LXRpbWUtcGlja2VyJyxcbiAgICB0ZW1wbGF0ZVVybDogJ3RpbWUtcGlja2VyLmNvbXBvbmVudC5odG1sJyxcbiAgICBzdHlsZXM6IFtcbiAgICAgICAgYDpob3N0IHtcbiAgICAgICAgICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgICAgICB9YFxuICAgIF0sXG4gICAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgICBpbXBvcnRzOiBbSWd4SW5wdXRHcm91cENvbXBvbmVudCwgSWd4SW5wdXREaXJlY3RpdmUsIElneERhdGVUaW1lRWRpdG9yRGlyZWN0aXZlLCBJZ3hUZXh0U2VsZWN0aW9uRGlyZWN0aXZlLCBOZ0lmLCBJZ3hQcmVmaXhEaXJlY3RpdmUsIElneEljb25Db21wb25lbnQsIElneFN1ZmZpeERpcmVjdGl2ZSwgSWd4QnV0dG9uRGlyZWN0aXZlLCBJZ3hUb2dnbGVEaXJlY3RpdmUsIE5nQ2xhc3MsIElneEl0ZW1MaXN0RGlyZWN0aXZlLCBOZ0ZvciwgSWd4VGltZUl0ZW1EaXJlY3RpdmUsIE5nVGVtcGxhdGVPdXRsZXQsIFRpbWVGb3JtYXRQaXBlLCBUaW1lSXRlbVBpcGVdXG59KVxuZXhwb3J0IGNsYXNzIElneFRpbWVQaWNrZXJDb21wb25lbnQgZXh0ZW5kcyBQaWNrZXJCYXNlRGlyZWN0aXZlXG4gICAgaW1wbGVtZW50c1xuICAgIElneFRpbWVQaWNrZXJCYXNlLFxuICAgIENvbnRyb2xWYWx1ZUFjY2Vzc29yLFxuICAgIE9uSW5pdCxcbiAgICBPbkRlc3Ryb3ksXG4gICAgQWZ0ZXJWaWV3SW5pdCxcbiAgICBWYWxpZGF0b3Ige1xuICAgIC8qKlxuICAgICAqIEFuIEBJbnB1dCBwcm9wZXJ0eSB0aGF0IHNldHMgdGhlIHZhbHVlIG9mIHRoZSBgaWRgIGF0dHJpYnV0ZS5cbiAgICAgKiBgYGBodG1sXG4gICAgICogPGlneC10aW1lLXBpY2tlciBbaWRdPVwiJ2lneC10aW1lLXBpY2tlci01J1wiIFtkaXNwbGF5Rm9ybWF0XT1cImg6bW0gdHRcIiA+PC9pZ3gtdGltZS1waWNrZXI+XG4gICAgICogYGBgXG4gICAgICovXG4gICAgQEhvc3RCaW5kaW5nKCdhdHRyLmlkJylcbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBpZCA9IGBpZ3gtdGltZS1waWNrZXItJHtORVhUX0lEKyt9YDtcblxuICAgIC8qKlxuICAgICAqIFRoZSBmb3JtYXQgdXNlZCB3aGVuIGVkaXRhYmxlIGlucHV0IGlzIG5vdCBmb2N1c2VkLiBEZWZhdWx0cyB0byB0aGUgYGlucHV0Rm9ybWF0YCBpZiBub3Qgc2V0LlxuICAgICAqXG4gICAgICogQHJlbWFya3NcbiAgICAgKiBVc2VzIEFuZ3VsYXIncyBgRGF0ZVBpcGVgLlxuICAgICAqXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiBgYGBodG1sXG4gICAgICogPGlneC10aW1lLXBpY2tlciBkaXNwbGF5Rm9ybWF0PVwibW06c3NcIj48L2lneC10aW1lLXBpY2tlcj5cbiAgICAgKiBgYGBcbiAgICAgKlxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIG92ZXJyaWRlIGRpc3BsYXlGb3JtYXQ6IHN0cmluZztcblxuICAgIC8qKlxuICAgICAqIFRoZSBleHBlY3RlZCB1c2VyIGlucHV0IGZvcm1hdCBhbmQgcGxhY2Vob2xkZXIuXG4gICAgICpcbiAgICAgKiBAcmVtYXJrc1xuICAgICAqIERlZmF1bHQgaXMgYGhoOm1tIHR0YFxuICAgICAqXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiBgYGBodG1sXG4gICAgICogPGlneC10aW1lLXBpY2tlciBpbnB1dEZvcm1hdD1cIkhIOm1tXCI+PC9pZ3gtdGltZS1waWNrZXI+XG4gICAgICogYGBgXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgb3ZlcnJpZGUgaW5wdXRGb3JtYXQ6IHN0cmluZyA9IERhdGVUaW1lVXRpbC5ERUZBVUxUX1RJTUVfSU5QVVRfRk9STUFUO1xuXG4gICAgLyoqXG4gICAgICogR2V0cy9TZXRzIHRoZSBpbnRlcmFjdGlvbiBtb2RlIC0gZGlhbG9nIG9yIGRyb3AgZG93bi5cbiAgICAgKlxuICAgICAqIEBleGFtcGxlXG4gICAgICogYGBgaHRtbFxuICAgICAqIDxpZ3gtdGltZS1waWNrZXIgbW9kZT1cImRpYWxvZ1wiPjwvaWd4LXRpbWUtcGlja2VyPlxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIG92ZXJyaWRlIG1vZGU6IFBpY2tlckludGVyYWN0aW9uTW9kZSA9IFBpY2tlckludGVyYWN0aW9uTW9kZS5Ecm9wRG93bjtcblxuICAgIC8qKlxuICAgICAqIFRoZSBtaW5pbXVtIHZhbHVlIHRoZSBwaWNrZXIgd2lsbCBhY2NlcHQuXG4gICAgICpcbiAgICAgKiBAcmVtYXJrc1xuICAgICAqIElmIGEgYHN0cmluZ2AgdmFsdWUgaXMgcGFzc2VkIGluLCBpdCBtdXN0IGJlIGluIElTTyBmb3JtYXQuXG4gICAgICpcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIGBgYGh0bWxcbiAgICAgKiA8aWd4LXRpbWUtcGlja2VyIFttaW5WYWx1ZV09XCIxODowMDowMFwiPjwvaWd4LXRpbWUtcGlja2VyPlxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIHNldCBtaW5WYWx1ZSh2YWx1ZTogRGF0ZSB8IHN0cmluZykge1xuICAgICAgICB0aGlzLl9taW5WYWx1ZSA9IHZhbHVlO1xuICAgICAgICBjb25zdCBkYXRlID0gdGhpcy5wYXJzZVRvRGF0ZSh2YWx1ZSk7XG4gICAgICAgIGlmIChkYXRlKSB7XG4gICAgICAgICAgICB0aGlzLl9kYXRlTWluVmFsdWUgPSBuZXcgRGF0ZSgpO1xuICAgICAgICAgICAgdGhpcy5fZGF0ZU1pblZhbHVlLnNldEhvdXJzKGRhdGUuZ2V0SG91cnMoKSwgZGF0ZS5nZXRNaW51dGVzKCksIGRhdGUuZ2V0U2Vjb25kcygpLCBkYXRlLmdldE1pbGxpc2Vjb25kcygpKTtcbiAgICAgICAgICAgIHRoaXMubWluRHJvcGRvd25WYWx1ZSA9IHRoaXMuc2V0TWluTWF4RHJvcGRvd25WYWx1ZSgnbWluJywgdGhpcy5fZGF0ZU1pblZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnNldFNlbGVjdGVkVmFsdWUodGhpcy5fc2VsZWN0ZWREYXRlKTtcbiAgICAgICAgdGhpcy5fb25WYWxpZGF0b3JDaGFuZ2UoKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IG1pblZhbHVlKCk6IERhdGUgfCBzdHJpbmcge1xuICAgICAgICByZXR1cm4gdGhpcy5fbWluVmFsdWU7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogR2V0cyBpZiB0aGUgZHJvcGRvd24vZGlhbG9nIGlzIGNvbGxhcHNlZFxuICAgICAqXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIGxldCBpc0NvbGxhcHNlZCA9IHRoaXMudGltZVBpY2tlci5jb2xsYXBzZWQ7XG4gICAgICogYGBgXG4gICAgICovXG4gICAgcHVibGljIG92ZXJyaWRlIGdldCBjb2xsYXBzZWQoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLnRvZ2dsZVJlZj8uY29sbGFwc2VkO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoZSBtYXhpbXVtIHZhbHVlIHRoZSBwaWNrZXIgd2lsbCBhY2NlcHQuXG4gICAgICpcbiAgICAgKiBAcmVtYXJrc1xuICAgICAqIElmIGEgYHN0cmluZ2AgdmFsdWUgaXMgcGFzc2VkIGluLCBpdCBtdXN0IGJlIGluIElTTyBmb3JtYXQuXG4gICAgICpcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIGBgYGh0bWxcbiAgICAgKiA8aWd4LXRpbWUtcGlja2VyIFttYXhWYWx1ZV09XCIyMDozMDowMFwiPjwvaWd4LXRpbWUtcGlja2VyPlxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIHNldCBtYXhWYWx1ZSh2YWx1ZTogRGF0ZSB8IHN0cmluZykge1xuICAgICAgICB0aGlzLl9tYXhWYWx1ZSA9IHZhbHVlO1xuICAgICAgICBjb25zdCBkYXRlID0gdGhpcy5wYXJzZVRvRGF0ZSh2YWx1ZSk7XG4gICAgICAgIGlmIChkYXRlKSB7XG4gICAgICAgICAgICB0aGlzLl9kYXRlTWF4VmFsdWUgPSBuZXcgRGF0ZSgpO1xuICAgICAgICAgICAgdGhpcy5fZGF0ZU1heFZhbHVlLnNldEhvdXJzKGRhdGUuZ2V0SG91cnMoKSwgZGF0ZS5nZXRNaW51dGVzKCksIGRhdGUuZ2V0U2Vjb25kcygpLCBkYXRlLmdldE1pbGxpc2Vjb25kcygpKTtcbiAgICAgICAgICAgIHRoaXMubWF4RHJvcGRvd25WYWx1ZSA9IHRoaXMuc2V0TWluTWF4RHJvcGRvd25WYWx1ZSgnbWF4JywgdGhpcy5fZGF0ZU1heFZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnNldFNlbGVjdGVkVmFsdWUodGhpcy5fc2VsZWN0ZWREYXRlKTtcbiAgICAgICAgdGhpcy5fb25WYWxpZGF0b3JDaGFuZ2UoKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IG1heFZhbHVlKCk6IERhdGUgfCBzdHJpbmcge1xuICAgICAgICByZXR1cm4gdGhpcy5fbWF4VmFsdWU7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQW4gQElucHV0IHByb3BlcnR5IHRoYXQgZGV0ZXJtaW5lcyB0aGUgc3BpbiBiZWhhdmlvci4gQnkgZGVmYXVsdCBgc3Bpbkxvb3BgIGlzIHNldCB0byB0cnVlLlxuICAgICAqIFRoZSBzZWNvbmRzLCBtaW51dGVzIGFuZCBob3VyIHNwaW5uaW5nIHdpbGwgd3JhcCBhcm91bmQgYnkgZGVmYXVsdC5cbiAgICAgKiBgYGBodG1sXG4gICAgICogPGlneC10aW1lLXBpY2tlciBbc3Bpbkxvb3BdPVwiZmFsc2VcIj48L2lneC10aW1lLXBpY2tlcj5cbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBzcGluTG9vcCA9IHRydWU7XG5cbiAgICAvKipcbiAgICAgKiBHZXRzL1NldHMgYSBjdXN0b20gZm9ybWF0dGVyIGZ1bmN0aW9uIG9uIHRoZSBzZWxlY3RlZCBvciBwYXNzZWQgZGF0ZS5cbiAgICAgKlxuICAgICAqIEBleGFtcGxlXG4gICAgICogYGBgaHRtbFxuICAgICAqIDxpZ3gtdGltZS1waWNrZXIgW3ZhbHVlXT1cImRhdGVcIiBbZm9ybWF0dGVyXT1cImZvcm1hdHRlclwiPjwvaWd4LXRpbWUtcGlja2VyPlxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIGZvcm1hdHRlcjogKHZhbDogRGF0ZSkgPT4gc3RyaW5nO1xuXG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgb3JpZW50YXRpb24gb2YgdGhlIHBpY2tlcidzIGhlYWRlci5cbiAgICAgKlxuICAgICAqIEByZW1hcmtzXG4gICAgICogQXZhaWxhYmxlIGluIGRpYWxvZyBtb2RlIG9ubHkuIERlZmF1bHQgdmFsdWUgaXMgYGhvcml6b250YWxgLlxuICAgICAqXG4gICAgICogYGBgaHRtbFxuICAgICAqIDxpZ3gtdGltZS1waWNrZXIgW2hlYWRlck9yaWVudGF0aW9uXT1cIid2ZXJ0aWNhbCdcIj48L2lneC10aW1lLXBpY2tlcj5cbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBoZWFkZXJPcmllbnRhdGlvbjogUGlja2VySGVhZGVyT3JpZW50YXRpb24gPSBQaWNrZXJIZWFkZXJPcmllbnRhdGlvbi5Ib3Jpem9udGFsO1xuXG4gICAgLyoqIEBoaWRkZW4gQGludGVybmFsICovXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgcmVhZE9ubHkgPSBmYWxzZTtcblxuICAgIC8qKlxuICAgICAqIEVtaXR0ZWQgYWZ0ZXIgYSBzZWxlY3Rpb24gaGFzIGJlZW4gZG9uZS5cbiAgICAgKlxuICAgICAqIEBleGFtcGxlXG4gICAgICogYGBgaHRtbFxuICAgICAqIDxpZ3gtdGltZS1waWNrZXIgKHNlbGVjdGVkKT1cIm9uU2VsZWN0aW9uKCRldmVudClcIj48L2lneC10aW1lLXBpY2tlcj5cbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBAT3V0cHV0KClcbiAgICBwdWJsaWMgc2VsZWN0ZWQgPSBuZXcgRXZlbnRFbWl0dGVyPERhdGU+KCk7XG5cbiAgICAvKipcbiAgICAgKiBFbWl0dGVkIHdoZW4gdGhlIHBpY2tlcidzIHZhbHVlIGNoYW5nZXMuXG4gICAgICpcbiAgICAgKiBAcmVtYXJrc1xuICAgICAqIFVzZWQgZm9yIGB0d28td2F5YCBiaW5kaW5ncy5cbiAgICAgKlxuICAgICAqIEBleGFtcGxlXG4gICAgICogYGBgaHRtbFxuICAgICAqIDxpZ3gtdGltZS1waWNrZXIgWyh2YWx1ZSldPVwiZGF0ZVwiPjwvaWd4LXRpbWUtcGlja2VyPlxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIEBPdXRwdXQoKVxuICAgIHB1YmxpYyB2YWx1ZUNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8RGF0ZSB8IHN0cmluZz4oKTtcblxuICAgIC8qKlxuICAgICAqIEVtaXR0ZWQgd2hlbiB0aGUgdXNlciB0eXBlcy9zcGlucyBpbnZhbGlkIHRpbWUgaW4gdGhlIHRpbWUtcGlja2VyIGVkaXRvci5cbiAgICAgKlxuICAgICAqICBAZXhhbXBsZVxuICAgICAqIGBgYGh0bWxcbiAgICAgKiA8aWd4LXRpbWUtcGlja2VyICh2YWxpZGF0aW9uRmFpbGVkKT1cIm9uVmFsaWRhdGlvbkZhaWxlZCgkZXZlbnQpXCI+PC9pZ3gtdGltZS1waWNrZXI+XG4gICAgICogYGBgXG4gICAgICovXG4gICAgQE91dHB1dCgpXG4gICAgcHVibGljIHZhbGlkYXRpb25GYWlsZWQgPSBuZXcgRXZlbnRFbWl0dGVyPElneFRpbWVQaWNrZXJWYWxpZGF0aW9uRmFpbGVkRXZlbnRBcmdzPigpO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBAVmlld0NoaWxkKCdob3VyTGlzdCcpXG4gICAgcHVibGljIGhvdXJMaXN0OiBFbGVtZW50UmVmO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBAVmlld0NoaWxkKCdtaW51dGVMaXN0JylcbiAgICBwdWJsaWMgbWludXRlTGlzdDogRWxlbWVudFJlZjtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgQFZpZXdDaGlsZCgnc2Vjb25kc0xpc3QnKVxuICAgIHB1YmxpYyBzZWNvbmRzTGlzdDogRWxlbWVudFJlZjtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgQFZpZXdDaGlsZCgnYW1wbUxpc3QnKVxuICAgIHB1YmxpYyBhbXBtTGlzdDogRWxlbWVudFJlZjtcblxuICAgIC8qKiBAaGlkZGVuIEBpbnRlcm5hbCAqL1xuICAgIEBDb250ZW50Q2hpbGRyZW4oSWd4UGlja2VyQ2xlYXJDb21wb25lbnQpXG4gICAgcHVibGljIGNsZWFyQ29tcG9uZW50czogUXVlcnlMaXN0PElneFBpY2tlckNsZWFyQ29tcG9uZW50PjtcblxuICAgIC8qKiBAaGlkZGVuIEBpbnRlcm5hbCAqL1xuICAgIEBDb250ZW50Q2hpbGQoSWd4TGFiZWxEaXJlY3RpdmUpXG4gICAgcHVibGljIGxhYmVsOiBJZ3hMYWJlbERpcmVjdGl2ZTtcblxuICAgIC8qKiBAaGlkZGVuIEBpbnRlcm5hbCAqL1xuICAgIEBDb250ZW50Q2hpbGQoSWd4UGlja2VyQWN0aW9uc0RpcmVjdGl2ZSlcbiAgICBwdWJsaWMgdGltZVBpY2tlckFjdGlvbnNEaXJlY3RpdmU6IElneFBpY2tlckFjdGlvbnNEaXJlY3RpdmU7XG5cbiAgICBAVmlld0NoaWxkKElneElucHV0RGlyZWN0aXZlLCB7IHJlYWQ6IElneElucHV0RGlyZWN0aXZlIH0pXG4gICAgcHJpdmF0ZSBpbnB1dERpcmVjdGl2ZTogSWd4SW5wdXREaXJlY3RpdmU7XG5cbiAgICBAVmlld0NoaWxkKElneElucHV0R3JvdXBDb21wb25lbnQpXG4gICAgcHJpdmF0ZSBfaW5wdXRHcm91cDogSWd4SW5wdXRHcm91cENvbXBvbmVudDtcblxuICAgIEBWaWV3Q2hpbGQoSWd4RGF0ZVRpbWVFZGl0b3JEaXJlY3RpdmUsIHsgc3RhdGljOiB0cnVlIH0pXG4gICAgcHJpdmF0ZSBkYXRlVGltZUVkaXRvcjogSWd4RGF0ZVRpbWVFZGl0b3JEaXJlY3RpdmU7XG5cbiAgICBAVmlld0NoaWxkKElneFRvZ2dsZURpcmVjdGl2ZSlcbiAgICBwcml2YXRlIHRvZ2dsZVJlZjogSWd4VG9nZ2xlRGlyZWN0aXZlO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwdWJsaWMgY2xlYXJlZCA9IGZhbHNlO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwdWJsaWMgaXNOb3RFbXB0eSA9IGZhbHNlO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwdWJsaWMgY3VycmVudEhvdXI6IG51bWJlcjtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHVibGljIGN1cnJlbnRNaW51dGVzOiBudW1iZXI7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHB1YmxpYyBnZXQgc2hvd0NsZWFyQnV0dG9uKCk6IGJvb2xlYW4ge1xuICAgICAgICBpZiAodGhpcy5jbGVhckNvbXBvbmVudHMubGVuZ3RoKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKERhdGVUaW1lVXRpbC5pc1ZhbGlkRGF0ZSh0aGlzLnZhbHVlKSkge1xuICAgICAgICAgICAgLy8gVE9ETzogVXBkYXRlIHcvIGNsZWFyIGJlaGF2aW9yXG4gICAgICAgICAgICByZXR1cm4gdGhpcy52YWx1ZS5nZXRIb3VycygpICE9PSAwIHx8IHRoaXMudmFsdWUuZ2V0TWludXRlcygpICE9PSAwIHx8IHRoaXMudmFsdWUuZ2V0U2Vjb25kcygpICE9PSAwO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiAhIXRoaXMuZGF0ZVRpbWVFZGl0b3IudmFsdWU7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwdWJsaWMgZ2V0IHNob3dIb3Vyc0xpc3QoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLmlucHV0Rm9ybWF0LmluZGV4T2YoJ2gnKSAhPT0gLSAxIHx8IHRoaXMuaW5wdXRGb3JtYXQuaW5kZXhPZignSCcpICE9PSAtIDE7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwdWJsaWMgZ2V0IHNob3dNaW51dGVzTGlzdCgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaW5wdXRGb3JtYXQuaW5kZXhPZignbScpICE9PSAtIDE7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwdWJsaWMgZ2V0IHNob3dTZWNvbmRzTGlzdCgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaW5wdXRGb3JtYXQuaW5kZXhPZigncycpICE9PSAtIDE7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwdWJsaWMgZ2V0IHNob3dBbVBtTGlzdCgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaW5wdXRGb3JtYXQuaW5kZXhPZigndCcpICE9PSAtIDEgfHwgdGhpcy5pbnB1dEZvcm1hdC5pbmRleE9mKCdhJykgIT09IC0gMTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHB1YmxpYyBnZXQgaXNUd2VsdmVIb3VyRm9ybWF0KCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5pbnB1dEZvcm1hdC5pbmRleE9mKCdoJykgIT09IC0gMTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiBAaW50ZXJuYWwgKi9cbiAgICBwdWJsaWMgZ2V0IGlzVmVydGljYWwoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLmhlYWRlck9yaWVudGF0aW9uID09PSBQaWNrZXJIZWFkZXJPcmllbnRhdGlvbi5WZXJ0aWNhbDtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiBAaW50ZXJuYWwgKi9cbiAgICBwdWJsaWMgZ2V0IHNlbGVjdGVkRGF0ZSgpOiBEYXRlIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3NlbGVjdGVkRGF0ZTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiBAaW50ZXJuYWwgKi9cbiAgICBwdWJsaWMgZ2V0IG1pbkRhdGVWYWx1ZSgpOiBEYXRlIHtcbiAgICAgICAgaWYgKCF0aGlzLl9kYXRlTWluVmFsdWUpIHtcbiAgICAgICAgICAgIGNvbnN0IG1pbkRhdGUgPSBuZXcgRGF0ZSgpO1xuICAgICAgICAgICAgbWluRGF0ZS5zZXRIb3VycygwLCAwLCAwLCAwKTtcbiAgICAgICAgICAgIHJldHVybiBtaW5EYXRlO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuX2RhdGVNaW5WYWx1ZTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiBAaW50ZXJuYWwgKi9cbiAgICBwdWJsaWMgZ2V0IG1heERhdGVWYWx1ZSgpOiBEYXRlIHtcbiAgICAgICAgaWYgKCF0aGlzLl9kYXRlTWF4VmFsdWUpIHtcbiAgICAgICAgICAgIGNvbnN0IG1heERhdGUgPSBuZXcgRGF0ZSgpO1xuICAgICAgICAgICAgbWF4RGF0ZS5zZXRIb3VycygyMywgNTksIDU5LCA5OTkpO1xuICAgICAgICAgICAgcmV0dXJuIG1heERhdGU7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdGhpcy5fZGF0ZU1heFZhbHVlO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0IHJlcXVpcmVkKCk6IGJvb2xlYW4ge1xuICAgICAgICBpZiAodGhpcy5fbmdDb250cm9sICYmIHRoaXMuX25nQ29udHJvbC5jb250cm9sICYmIHRoaXMuX25nQ29udHJvbC5jb250cm9sLnZhbGlkYXRvcikge1xuICAgICAgICAgICAgLy8gUnVuIHRoZSB2YWxpZGF0aW9uIHdpdGggZW1wdHkgb2JqZWN0IHRvIGNoZWNrIGlmIHJlcXVpcmVkIGlzIGVuYWJsZWQuXG4gICAgICAgICAgICBjb25zdCBlcnJvciA9IHRoaXMuX25nQ29udHJvbC5jb250cm9sLnZhbGlkYXRvcih7fSBhcyBBYnN0cmFjdENvbnRyb2wpO1xuICAgICAgICAgICAgcmV0dXJuICEhKGVycm9yICYmIGVycm9yLnJlcXVpcmVkKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldCBkaWFsb2dPdmVybGF5U2V0dGluZ3MoKTogT3ZlcmxheVNldHRpbmdzIHtcbiAgICAgICAgcmV0dXJuIE9iamVjdC5hc3NpZ24oe30sIHRoaXMuX2RlZmF1bHREaWFsb2dPdmVybGF5U2V0dGluZ3MsIHRoaXMub3ZlcmxheVNldHRpbmdzKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldCBkcm9wRG93bk92ZXJsYXlTZXR0aW5ncygpOiBPdmVybGF5U2V0dGluZ3Mge1xuICAgICAgICByZXR1cm4gT2JqZWN0LmFzc2lnbih7fSwgdGhpcy5fZGVmYXVsdERyb3BEb3duT3ZlcmxheVNldHRpbmdzLCB0aGlzLm92ZXJsYXlTZXR0aW5ncyk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gQGludGVybmFsICovXG4gICAgcHVibGljIGRpc3BsYXlWYWx1ZTogUGlwZVRyYW5zZm9ybSA9IHsgdHJhbnNmb3JtOiAoZGF0ZTogRGF0ZSkgPT4gdGhpcy5mb3JtYXR0ZXIoZGF0ZSkgfTtcbiAgICAvKiogQGhpZGRlbiBAaW50ZXJuYWwgKi9cbiAgICBwdWJsaWMgbWluRHJvcGRvd25WYWx1ZTogRGF0ZTtcbiAgICAvKiogQGhpZGRlbiBAaW50ZXJuYWwgKi9cbiAgICBwdWJsaWMgbWF4RHJvcGRvd25WYWx1ZTogRGF0ZTtcbiAgICAvKiogQGhpZGRlbiBAaW50ZXJuYWwgKi9cbiAgICBwdWJsaWMgaG91ckl0ZW1zID0gW107XG4gICAgLyoqIEBoaWRkZW4gQGludGVybmFsICovXG4gICAgcHVibGljIG1pbnV0ZUl0ZW1zID0gW107XG4gICAgLyoqIEBoaWRkZW4gQGludGVybmFsICovXG4gICAgcHVibGljIHNlY29uZHNJdGVtcyA9IFtdO1xuICAgIC8qKiBAaGlkZGVuIEBpbnRlcm5hbCAqL1xuICAgIHB1YmxpYyBhbXBtSXRlbXMgPSBbXTtcblxuICAgIHByaXZhdGUgX3ZhbHVlOiBEYXRlIHwgc3RyaW5nO1xuICAgIHByaXZhdGUgX2RhdGVWYWx1ZTogRGF0ZTtcbiAgICBwcml2YXRlIF9kYXRlTWluVmFsdWU6IERhdGU7XG4gICAgcHJpdmF0ZSBfZGF0ZU1heFZhbHVlOiBEYXRlO1xuICAgIHByaXZhdGUgX3NlbGVjdGVkRGF0ZTogRGF0ZTtcbiAgICBwcml2YXRlIF9yZXNvdXJjZVN0cmluZ3MgPSBDdXJyZW50UmVzb3VyY2VTdHJpbmdzLlRpbWVQaWNrZXJSZXNTdHJpbmdzO1xuICAgIHByaXZhdGUgX29rQnV0dG9uTGFiZWwgPSBudWxsO1xuICAgIHByaXZhdGUgX2NhbmNlbEJ1dHRvbkxhYmVsID0gbnVsbDtcbiAgICBwcml2YXRlIF9pdGVtc0RlbHRhOiBQaWNrPERhdGVQYXJ0RGVsdGFzLCAnaG91cnMnIHwgJ21pbnV0ZXMnIHwgJ3NlY29uZHMnPiA9IHsgaG91cnM6IDEsIG1pbnV0ZXM6IDEsIHNlY29uZHM6IDEgfTtcblxuICAgIHByaXZhdGUgX3N0YXR1c0NoYW5nZXMkOiBTdWJzY3JpcHRpb247XG4gICAgcHJpdmF0ZSBfbmdDb250cm9sOiBOZ0NvbnRyb2wgPSBudWxsO1xuICAgIHByaXZhdGUgX29uQ2hhbmdlQ2FsbGJhY2s6IChfOiBEYXRlIHwgc3RyaW5nKSA9PiB2b2lkID0gbm9vcDtcbiAgICBwcml2YXRlIF9vblRvdWNoZWRDYWxsYmFjazogKCkgPT4gdm9pZCA9IG5vb3A7XG4gICAgcHJpdmF0ZSBfb25WYWxpZGF0b3JDaGFuZ2U6ICgpID0+IHZvaWQgPSBub29wO1xuXG4gICAgcHJpdmF0ZSBfZGVmYXVsdERpYWxvZ092ZXJsYXlTZXR0aW5nczogT3ZlcmxheVNldHRpbmdzID0ge1xuICAgICAgICBjbG9zZU9uT3V0c2lkZUNsaWNrOiB0cnVlLFxuICAgICAgICBtb2RhbDogdHJ1ZSxcbiAgICAgICAgY2xvc2VPbkVzY2FwZTogdHJ1ZSxcbiAgICAgICAgb3V0bGV0OiB0aGlzLm91dGxldFxuICAgIH07XG4gICAgcHJpdmF0ZSBfZGVmYXVsdERyb3BEb3duT3ZlcmxheVNldHRpbmdzOiBPdmVybGF5U2V0dGluZ3MgPSB7XG4gICAgICAgIHRhcmdldDogdGhpcy5lbGVtZW50Lm5hdGl2ZUVsZW1lbnQsXG4gICAgICAgIG1vZGFsOiBmYWxzZSxcbiAgICAgICAgY2xvc2VPbk91dHNpZGVDbGljazogdHJ1ZSxcbiAgICAgICAgc2Nyb2xsU3RyYXRlZ3k6IG5ldyBBYnNvbHV0ZVNjcm9sbFN0cmF0ZWd5KCksXG4gICAgICAgIHBvc2l0aW9uU3RyYXRlZ3k6IG5ldyBBdXRvUG9zaXRpb25TdHJhdGVneSgpLFxuICAgICAgICBvdXRsZXQ6IHRoaXMub3V0bGV0XG4gICAgfTtcblxuXG4gICAgLyoqXG4gICAgICogVGhlIGN1cnJlbnRseSBzZWxlY3RlZCB2YWx1ZSAvIHRpbWUgZnJvbSB0aGUgZHJvcC1kb3duL2RpYWxvZ1xuICAgICAqXG4gICAgICogQHJlbWFya3NcbiAgICAgKiBUaGUgY3VycmVudCB2YWx1ZSBpcyBvZiB0eXBlIGBEYXRlYFxuICAgICAqXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogY29uc3QgbmV3VmFsdWU6IERhdGUgPSBuZXcgRGF0ZSgyMDAwLCAyLCAyLCAxMCwgMTUsIDE1KTtcbiAgICAgKiB0aGlzLnRpbWVQaWNrZXIudmFsdWUgPSBuZXdWYWx1ZTtcbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0IHZhbHVlKCk6IERhdGUgfCBzdHJpbmcge1xuICAgICAgICByZXR1cm4gdGhpcy5fdmFsdWU7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQW4gYWNjZXNzb3IgdGhhdCBhbGxvd3MgeW91IHRvIHNldCBhIHRpbWUgdXNpbmcgdGhlIGB2YWx1ZWAgaW5wdXQuXG4gICAgICogYGBgaHRtbFxuICAgICAqIHB1YmxpYyBkYXRlOiBEYXRlID0gbmV3IERhdGUoRGF0ZS5ub3coKSk7XG4gICAgICogIC8vLi4uXG4gICAgICogPGlneC10aW1lLXBpY2tlciBbdmFsdWVdPVwiZGF0ZVwiIGZvcm1hdD1cImg6bW0gdHRcIj48L2lneC10aW1lLXBpY2tlcj5cbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBzZXQgdmFsdWUodmFsdWU6IERhdGUgfCBzdHJpbmcpIHtcbiAgICAgICAgY29uc3Qgb2xkVmFsdWUgPSB0aGlzLl92YWx1ZTtcbiAgICAgICAgdGhpcy5fdmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgY29uc3QgZGF0ZSA9IHRoaXMucGFyc2VUb0RhdGUodmFsdWUpO1xuICAgICAgICBpZiAoZGF0ZSkge1xuICAgICAgICAgICAgdGhpcy5fZGF0ZVZhbHVlID0gbmV3IERhdGUoKTtcbiAgICAgICAgICAgIHRoaXMuX2RhdGVWYWx1ZS5zZXRIb3VycyhkYXRlLmdldEhvdXJzKCksIGRhdGUuZ2V0TWludXRlcygpLCBkYXRlLmdldFNlY29uZHMoKSwgZGF0ZS5nZXRNaWxsaXNlY29uZHMoKSk7XG4gICAgICAgICAgICB0aGlzLnNldFNlbGVjdGVkVmFsdWUodGhpcy5fZGF0ZVZhbHVlKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuX2RhdGVWYWx1ZSA9IG51bGw7XG4gICAgICAgICAgICB0aGlzLnNldFNlbGVjdGVkVmFsdWUobnVsbCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuZGF0ZVRpbWVFZGl0b3IpIHtcbiAgICAgICAgICAgIHRoaXMuZGF0ZVRpbWVFZGl0b3IudmFsdWUgPSBkYXRlO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuZW1pdFZhbHVlQ2hhbmdlKG9sZFZhbHVlLCB0aGlzLl92YWx1ZSk7XG4gICAgICAgIHRoaXMuX29uQ2hhbmdlQ2FsbGJhY2sodGhpcy5fdmFsdWUpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEFuIGFjY2Vzc29yIHRoYXQgc2V0cyB0aGUgcmVzb3VyY2Ugc3RyaW5ncy5cbiAgICAgKiBCeSBkZWZhdWx0IGl0IHVzZXMgRU4gcmVzb3VyY2VzLlxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIHNldCByZXNvdXJjZVN0cmluZ3ModmFsdWU6IElUaW1lUGlja2VyUmVzb3VyY2VTdHJpbmdzKSB7XG4gICAgICAgIHRoaXMuX3Jlc291cmNlU3RyaW5ncyA9IE9iamVjdC5hc3NpZ24oe30sIHRoaXMuX3Jlc291cmNlU3RyaW5ncywgdmFsdWUpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEFuIGFjY2Vzc29yIHRoYXQgcmV0dXJucyB0aGUgcmVzb3VyY2Ugc3RyaW5ncy5cbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0IHJlc291cmNlU3RyaW5ncygpOiBJVGltZVBpY2tlclJlc291cmNlU3RyaW5ncyB7XG4gICAgICAgIHJldHVybiB0aGlzLl9yZXNvdXJjZVN0cmluZ3M7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQW4gQElucHV0IHByb3BlcnR5IHRoYXQgcmVuZGVycyBPSyBidXR0b24gd2l0aCBjdXN0b20gdGV4dC4gQnkgZGVmYXVsdCBgb2tCdXR0b25MYWJlbGAgaXMgc2V0IHRvIE9LLlxuICAgICAqIGBgYGh0bWxcbiAgICAgKiA8aWd4LXRpbWUtcGlja2VyIG9rQnV0dG9uTGFiZWw9J1NFVCcgW3ZhbHVlXT1cImRhdGVcIiBmb3JtYXQ9XCJoOm1tIHR0XCI+PC9pZ3gtdGltZS1waWNrZXI+XG4gICAgICogYGBgXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgc2V0IG9rQnV0dG9uTGFiZWwodmFsdWU6IHN0cmluZykge1xuICAgICAgICB0aGlzLl9va0J1dHRvbkxhYmVsID0gdmFsdWU7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQW4gYWNjZXNzb3IgdGhhdCByZXR1cm5zIHRoZSBsYWJlbCBvZiBvayBidXR0b24uXG4gICAgICovXG4gICAgcHVibGljIGdldCBva0J1dHRvbkxhYmVsKCk6IHN0cmluZyB7XG4gICAgICAgIGlmICh0aGlzLl9va0J1dHRvbkxhYmVsID09PSBudWxsKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5yZXNvdXJjZVN0cmluZ3MuaWd4X3RpbWVfcGlja2VyX29rO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLl9va0J1dHRvbkxhYmVsO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEFuIEBJbnB1dCBwcm9wZXJ0eSB0aGF0IHJlbmRlcnMgY2FuY2VsIGJ1dHRvbiB3aXRoIGN1c3RvbSB0ZXh0LlxuICAgICAqIEJ5IGRlZmF1bHQgYGNhbmNlbEJ1dHRvbkxhYmVsYCBpcyBzZXQgdG8gQ2FuY2VsLlxuICAgICAqIGBgYGh0bWxcbiAgICAgKiA8aWd4LXRpbWUtcGlja2VyIGNhbmNlbEJ1dHRvbkxhYmVsPSdFeGl0JyBbdmFsdWVdPVwiZGF0ZVwiIGZvcm1hdD1cImg6bW0gdHRcIj48L2lneC10aW1lLXBpY2tlcj5cbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBzZXQgY2FuY2VsQnV0dG9uTGFiZWwodmFsdWU6IHN0cmluZykge1xuICAgICAgICB0aGlzLl9jYW5jZWxCdXR0b25MYWJlbCA9IHZhbHVlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEFuIGFjY2Vzc29yIHRoYXQgcmV0dXJucyB0aGUgbGFiZWwgb2YgY2FuY2VsIGJ1dHRvbi5cbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0IGNhbmNlbEJ1dHRvbkxhYmVsKCk6IHN0cmluZyB7XG4gICAgICAgIGlmICh0aGlzLl9jYW5jZWxCdXR0b25MYWJlbCA9PT0gbnVsbCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMucmVzb3VyY2VTdHJpbmdzLmlneF90aW1lX3BpY2tlcl9jYW5jZWw7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuX2NhbmNlbEJ1dHRvbkxhYmVsO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIERlbHRhIHZhbHVlcyB1c2VkIHRvIGluY3JlbWVudCBvciBkZWNyZW1lbnQgZWFjaCBlZGl0b3IgZGF0ZSBwYXJ0IG9uIHNwaW4gYWN0aW9ucyBhbmRcbiAgICAgKiB0byBkaXNwbGF5IHRpbWUgcG9ydGlvbnMgaW4gdGhlIGRyb3Bkb3duL2RpYWxvZy5cbiAgICAgKiBCeSBkZWZhdWx0IGBpdGVtc0RlbHRhYCBpcyBzZXQgdG8gYHtob3VyOiAxLCBtaW51dGU6IDEsIHNlY29uZDogMX1gXG4gICAgICogYGBgaHRtbFxuICAgICAqIDxpZ3gtdGltZS1waWNrZXIgW2l0ZW1zRGVsdGFdPVwie2hvdXI6MywgbWludXRlOjUsIHNlY29uZDoxMH1cIiBpZD1cInRpbWUtcGlja2VyXCI+PC9pZ3gtdGltZS1waWNrZXI+XG4gICAgICogYGBgXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgc2V0IGl0ZW1zRGVsdGEodmFsdWU6IFBpY2s8RGF0ZVBhcnREZWx0YXMsICdob3VycycgfCAnbWludXRlcycgfCAnc2Vjb25kcyc+KSB7XG4gICAgICAgIE9iamVjdC5hc3NpZ24odGhpcy5faXRlbXNEZWx0YSwgdmFsdWUpO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgaXRlbXNEZWx0YSgpOiBQaWNrPERhdGVQYXJ0RGVsdGFzLCAnaG91cnMnIHwgJ21pbnV0ZXMnIHwgJ3NlY29uZHMnPiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9pdGVtc0RlbHRhO1xuICAgIH1cblxuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBlbGVtZW50OiBFbGVtZW50UmVmLFxuICAgICAgICBASW5qZWN0KExPQ0FMRV9JRCkgX2xvY2FsZUlkOiBzdHJpbmcsXG4gICAgICAgIEBPcHRpb25hbCgpIEBJbmplY3QoRGlzcGxheURlbnNpdHlUb2tlbikgX2Rpc3BsYXlEZW5zaXR5T3B0aW9uczogSURpc3BsYXlEZW5zaXR5T3B0aW9ucyxcbiAgICAgICAgQE9wdGlvbmFsKCkgQEluamVjdChJR1hfSU5QVVRfR1JPVVBfVFlQRSkgX2lucHV0R3JvdXBUeXBlOiBJZ3hJbnB1dEdyb3VwVHlwZSxcbiAgICAgICAgcHJpdmF0ZSBfaW5qZWN0b3I6IEluamVjdG9yLFxuICAgICAgICBwcml2YXRlIHBsYXRmb3JtOiBQbGF0Zm9ybVV0aWwsXG4gICAgICAgIHByaXZhdGUgY2RyOiBDaGFuZ2VEZXRlY3RvclJlZikge1xuICAgICAgICBzdXBlcihlbGVtZW50LCBfbG9jYWxlSWQsIF9kaXNwbGF5RGVuc2l0eU9wdGlvbnMsIF9pbnB1dEdyb3VwVHlwZSk7XG4gICAgICAgIHRoaXMubG9jYWxlID0gdGhpcy5sb2NhbGUgfHwgdGhpcy5fbG9jYWxlSWQ7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gQGludGVybmFsICovXG4gICAgQEhvc3RMaXN0ZW5lcigna2V5ZG93bicsIFsnJGV2ZW50J10pXG4gICAgcHVibGljIG9uS2V5RG93bihldmVudDogS2V5Ym9hcmRFdmVudCk6IHZvaWQge1xuICAgICAgICBzd2l0Y2ggKGV2ZW50LmtleSkge1xuICAgICAgICAgICAgY2FzZSB0aGlzLnBsYXRmb3JtLktFWU1BUC5BUlJPV19VUDpcbiAgICAgICAgICAgICAgICBpZiAoZXZlbnQuYWx0S2V5ICYmIHRoaXMuaXNEcm9wZG93bikge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmNsb3NlKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSB0aGlzLnBsYXRmb3JtLktFWU1BUC5BUlJPV19ET1dOOlxuICAgICAgICAgICAgICAgIGlmIChldmVudC5hbHRLZXkgJiYgdGhpcy5pc0Ryb3Bkb3duKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMub3BlbigpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgdGhpcy5wbGF0Zm9ybS5LRVlNQVAuRVNDQVBFOlxuICAgICAgICAgICAgICAgIHRoaXMuY2FuY2VsQnV0dG9uQ2xpY2soKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgdGhpcy5wbGF0Zm9ybS5LRVlNQVAuU1BBQ0U6XG4gICAgICAgICAgICAgICAgdGhpcy5vcGVuKCk7XG4gICAgICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuIEBpbnRlcm5hbCAqL1xuICAgIHB1YmxpYyBnZXRQYXJ0VmFsdWUodmFsdWU6IERhdGUsIHR5cGU6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgICAgIGNvbnN0IGlucHV0RGF0ZVBhcnRzID0gRGF0ZVRpbWVVdGlsLnBhcnNlRGF0ZVRpbWVGb3JtYXQodGhpcy5pbnB1dEZvcm1hdCk7XG4gICAgICAgIGNvbnN0IHBhcnQgPSBpbnB1dERhdGVQYXJ0cy5maW5kKGVsZW1lbnQgPT4gZWxlbWVudC50eXBlID09PSB0eXBlKTtcbiAgICAgICAgcmV0dXJuIERhdGVUaW1lVXRpbC5nZXRQYXJ0VmFsdWUodmFsdWUsIHBhcnQsIHBhcnQuZm9ybWF0Lmxlbmd0aCk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gQGludGVybmFsICovXG4gICAgcHVibGljIHRvSVNPU3RyaW5nKHZhbHVlOiBEYXRlKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIHZhbHVlLnRvTG9jYWxlVGltZVN0cmluZygnZW4tR0InLCB7XG4gICAgICAgICAgICBob3VyOiAnMi1kaWdpdCcsXG4gICAgICAgICAgICBtaW51dGU6ICcyLWRpZ2l0JyxcbiAgICAgICAgICAgIHNlY29uZDogJzItZGlnaXQnLFxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvLyAjcmVnaW9uIENvbnRyb2xWYWx1ZUFjY2Vzc29yXG5cbiAgICAvKiogQGhpZGRlbiBAaW50ZXJuYWwgKi9cbiAgICBwdWJsaWMgd3JpdGVWYWx1ZSh2YWx1ZTogRGF0ZSB8IHN0cmluZykge1xuICAgICAgICB0aGlzLl92YWx1ZSA9IHZhbHVlO1xuICAgICAgICBjb25zdCBkYXRlID0gdGhpcy5wYXJzZVRvRGF0ZSh2YWx1ZSk7XG4gICAgICAgIGlmIChkYXRlKSB7XG4gICAgICAgICAgICB0aGlzLl9kYXRlVmFsdWUgPSBuZXcgRGF0ZSgpO1xuICAgICAgICAgICAgdGhpcy5fZGF0ZVZhbHVlLnNldEhvdXJzKGRhdGUuZ2V0SG91cnMoKSwgZGF0ZS5nZXRNaW51dGVzKCksIGRhdGUuZ2V0U2Vjb25kcygpKTtcbiAgICAgICAgICAgIHRoaXMuc2V0U2VsZWN0ZWRWYWx1ZSh0aGlzLl9kYXRlVmFsdWUpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5zZXRTZWxlY3RlZFZhbHVlKG51bGwpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLmRhdGVUaW1lRWRpdG9yKSB7XG4gICAgICAgICAgICB0aGlzLmRhdGVUaW1lRWRpdG9yLnZhbHVlID0gZGF0ZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuIEBpbnRlcm5hbCAqL1xuICAgIHB1YmxpYyByZWdpc3Rlck9uQ2hhbmdlKGZuOiAoXzogRGF0ZSB8IHN0cmluZykgPT4gdm9pZCkge1xuICAgICAgICB0aGlzLl9vbkNoYW5nZUNhbGxiYWNrID0gZm47XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gQGludGVybmFsICovXG4gICAgcHVibGljIHJlZ2lzdGVyT25Ub3VjaGVkKGZuOiAoKSA9PiB2b2lkKSB7XG4gICAgICAgIHRoaXMuX29uVG91Y2hlZENhbGxiYWNrID0gZm47XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gQGludGVybmFsICovXG4gICAgcHVibGljIHJlZ2lzdGVyT25WYWxpZGF0b3JDaGFuZ2UoZm46IGFueSkge1xuICAgICAgICB0aGlzLl9vblZhbGlkYXRvckNoYW5nZSA9IGZuO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuIEBpbnRlcm5hbCAqL1xuICAgIHB1YmxpYyB2YWxpZGF0ZShjb250cm9sOiBBYnN0cmFjdENvbnRyb2wpOiBWYWxpZGF0aW9uRXJyb3JzIHwgbnVsbCB7XG4gICAgICAgIGlmICghY29udHJvbC52YWx1ZSkge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgLy8gSW52YWxpZERhdGUgaGFuZGxpbmdcbiAgICAgICAgaWYgKGlzRGF0ZShjb250cm9sLnZhbHVlKSAmJiAhRGF0ZVRpbWVVdGlsLmlzVmFsaWREYXRlKGNvbnRyb2wudmFsdWUpKSB7XG4gICAgICAgICAgICByZXR1cm4geyB2YWx1ZTogdHJ1ZSB9O1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgZXJyb3JzID0ge307XG4gICAgICAgIGNvbnN0IHZhbHVlID0gRGF0ZVRpbWVVdGlsLmlzVmFsaWREYXRlKGNvbnRyb2wudmFsdWUpID8gY29udHJvbC52YWx1ZSA6IERhdGVUaW1lVXRpbC5wYXJzZUlzb0RhdGUoY29udHJvbC52YWx1ZSk7XG4gICAgICAgIE9iamVjdC5hc3NpZ24oZXJyb3JzLCBEYXRlVGltZVV0aWwudmFsaWRhdGVNaW5NYXgodmFsdWUsIHRoaXMubWluVmFsdWUsIHRoaXMubWF4VmFsdWUsIHRydWUsIGZhbHNlKSk7XG4gICAgICAgIHJldHVybiBPYmplY3Qua2V5cyhlcnJvcnMpLmxlbmd0aCA+IDAgPyBlcnJvcnMgOiBudWxsO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuIEBpbnRlcm5hbCAqL1xuICAgIHB1YmxpYyBzZXREaXNhYmxlZFN0YXRlKGlzRGlzYWJsZWQ6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICAgICAgdGhpcy5kaXNhYmxlZCA9IGlzRGlzYWJsZWQ7XG4gICAgfVxuICAgIC8vI2VuZHJlZ2lvblxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwdWJsaWMgb3ZlcnJpZGUgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX25nQ29udHJvbCA9IHRoaXMuX2luamVjdG9yLmdldDxOZ0NvbnRyb2w+KE5nQ29udHJvbCwgbnVsbCk7XG4gICAgICAgIHRoaXMubWluRHJvcGRvd25WYWx1ZSA9IHRoaXMuc2V0TWluTWF4RHJvcGRvd25WYWx1ZSgnbWluJywgdGhpcy5taW5EYXRlVmFsdWUpO1xuICAgICAgICB0aGlzLm1heERyb3Bkb3duVmFsdWUgPSB0aGlzLnNldE1pbk1heERyb3Bkb3duVmFsdWUoJ21heCcsIHRoaXMubWF4RGF0ZVZhbHVlKTtcbiAgICAgICAgdGhpcy5zZXRTZWxlY3RlZFZhbHVlKHRoaXMuX2RhdGVWYWx1ZSk7XG4gICAgICAgIHN1cGVyLm5nT25Jbml0KCk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwdWJsaWMgb3ZlcnJpZGUgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xuICAgICAgICBzdXBlci5uZ0FmdGVyVmlld0luaXQoKTtcbiAgICAgICAgdGhpcy5zdWJzY3JpYmVUb0RhdGVFZGl0b3JFdmVudHMoKTtcbiAgICAgICAgdGhpcy5zdWJzY3JpYmVUb1RvZ2dsZURpcmVjdGl2ZUV2ZW50cygpO1xuXG4gICAgICAgIHRoaXMuX2RlZmF1bHREcm9wRG93bk92ZXJsYXlTZXR0aW5ncy5leGNsdWRlRnJvbU91dHNpZGVDbGljayA9IFt0aGlzLl9pbnB1dEdyb3VwLmVsZW1lbnQubmF0aXZlRWxlbWVudF07XG5cbiAgICAgICAgZnJvbUV2ZW50KHRoaXMuaW5wdXREaXJlY3RpdmUubmF0aXZlRWxlbWVudCwgJ2JsdXInKVxuICAgICAgICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMuX2Rlc3Ryb3kkKSlcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLmNvbGxhcHNlZCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnVwZGF0ZVZhbGlkaXR5T25CbHVyKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgdGhpcy5zdWJUb0ljb25zQ2xpY2tlZCh0aGlzLmNsZWFyQ29tcG9uZW50cywgKCkgPT4gdGhpcy5jbGVhcigpKTtcbiAgICAgICAgdGhpcy5jbGVhckNvbXBvbmVudHMuY2hhbmdlcy5waXBlKHRha2VVbnRpbCh0aGlzLl9kZXN0cm95JCkpXG4gICAgICAgICAgICAuc3Vic2NyaWJlKCgpID0+IHRoaXMuc3ViVG9JY29uc0NsaWNrZWQodGhpcy5jbGVhckNvbXBvbmVudHMsICgpID0+IHRoaXMuY2xlYXIoKSkpO1xuXG4gICAgICAgIGlmICh0aGlzLl9uZ0NvbnRyb2wpIHtcbiAgICAgICAgICAgIHRoaXMuX3N0YXR1c0NoYW5nZXMkID0gdGhpcy5fbmdDb250cm9sLnN0YXR1c0NoYW5nZXMuc3Vic2NyaWJlKHRoaXMub25TdGF0dXNDaGFuZ2VkLmJpbmQodGhpcykpO1xuICAgICAgICAgICAgdGhpcy5faW5wdXRHcm91cC5pc1JlcXVpcmVkID0gdGhpcy5yZXF1aXJlZDtcbiAgICAgICAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHVibGljIG92ZXJyaWRlIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgICAgICBzdXBlci5uZ09uRGVzdHJveSgpO1xuICAgICAgICBpZiAodGhpcy5fc3RhdHVzQ2hhbmdlcyQpIHtcbiAgICAgICAgICAgIHRoaXMuX3N0YXR1c0NoYW5nZXMkLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHB1YmxpYyBnZXRFZGl0RWxlbWVudCgpOiBIVE1MSW5wdXRFbGVtZW50IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZGF0ZVRpbWVFZGl0b3IubmF0aXZlRWxlbWVudDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBPcGVucyB0aGUgcGlja2VyJ3MgZGlhbG9nIFVJLlxuICAgICAqXG4gICAgICogQHBhcmFtIHNldHRpbmdzIE92ZXJsYXlTZXR0aW5ncyAtIHRoZSBvdmVybGF5IHNldHRpbmdzIHRvIHVzZSBmb3IgcG9zaXRpb25pbmcgdGhlIGRyb3AgZG93biBvciBkaWFsb2cgY29udGFpbmVyIGFjY29yZGluZyB0b1xuICAgICAqIGBgYGh0bWxcbiAgICAgKiA8aWd4LXRpbWUtcGlja2VyICNwaWNrZXIgW3ZhbHVlXT1cImRhdGVcIj48L2lneC10aW1lLXBpY2tlcj5cbiAgICAgKiA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBpZ3hCdXR0b24gKGNsaWNrKT1cInBpY2tlci5vcGVuKClcIj5PcGVuIERpYWxvZzwvYnV0dG9uPlxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIHB1YmxpYyBvcGVuKHNldHRpbmdzPzogT3ZlcmxheVNldHRpbmdzKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLmRpc2FibGVkIHx8ICF0aGlzLnRvZ2dsZVJlZi5jb2xsYXBzZWQpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuc2V0U2VsZWN0ZWRWYWx1ZSh0aGlzLl9kYXRlVmFsdWUpO1xuICAgICAgICBjb25zdCBvdmVybGF5U2V0dGluZ3MgPSBPYmplY3QuYXNzaWduKHt9LCB0aGlzLmlzRHJvcGRvd25cbiAgICAgICAgICAgID8gdGhpcy5kcm9wRG93bk92ZXJsYXlTZXR0aW5nc1xuICAgICAgICAgICAgOiB0aGlzLmRpYWxvZ092ZXJsYXlTZXR0aW5nc1xuICAgICAgICAgICAgLCBzZXR0aW5ncyk7XG5cbiAgICAgICAgdGhpcy50b2dnbGVSZWYub3BlbihvdmVybGF5U2V0dGluZ3MpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENsb3NlcyB0aGUgZHJvcGRvd24vZGlhbG9nLlxuICAgICAqIGBgYGh0bWxcbiAgICAgKiA8aWd4LXRpbWUtcGlja2VyICN0aW1lUGlja2VyPjwvaWd4LXRpbWUtcGlja2VyPlxuICAgICAqIGBgYFxuICAgICAqIGBgYHR5cGVzY3JpcHRcbiAgICAgKiBAVmlld0NoaWxkKCd0aW1lUGlja2VyJywgeyByZWFkOiBJZ3hUaW1lUGlja2VyQ29tcG9uZW50IH0pIHBpY2tlcjogSWd4VGltZVBpY2tlckNvbXBvbmVudDtcbiAgICAgKiBwaWNrZXIuY2xvc2UoKTtcbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBwdWJsaWMgY2xvc2UoKTogdm9pZCB7XG4gICAgICAgIHRoaXMudG9nZ2xlUmVmLmNsb3NlKCk7XG4gICAgfVxuXG4gICAgcHVibGljIHRvZ2dsZShzZXR0aW5ncz86IE92ZXJsYXlTZXR0aW5ncyk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy50b2dnbGVSZWYuY29sbGFwc2VkKSB7XG4gICAgICAgICAgICB0aGlzLm9wZW4oc2V0dGluZ3MpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5jbG9zZSgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ2xlYXJzIHRoZSB0aW1lIHBpY2tlciB2YWx1ZSBpZiBpdCBpcyBhIGBzdHJpbmdgIG9yIHJlc2V0cyB0aGUgdGltZSB0byBgMDA6MDA6MDBgIGlmIHRoZSB2YWx1ZSBpcyBhIERhdGUgb2JqZWN0LlxuICAgICAqXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogdGhpcy50aW1lUGlja2VyLmNsZWFyKCk7XG4gICAgICogYGBgXG4gICAgICovXG4gICAgcHVibGljIGNsZWFyKCk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5kaXNhYmxlZCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCF0aGlzLnRvZ2dsZVJlZi5jb2xsYXBzZWQpIHtcbiAgICAgICAgICAgIHRoaXMuY2xvc2UoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChEYXRlVGltZVV0aWwuaXNWYWxpZERhdGUodGhpcy52YWx1ZSkpIHtcbiAgICAgICAgICAgIGNvbnN0IG9sZFZhbHVlID0gbmV3IERhdGUodGhpcy52YWx1ZSk7XG4gICAgICAgICAgICB0aGlzLnZhbHVlLnNldEhvdXJzKDAsIDAsIDApO1xuICAgICAgICAgICAgaWYgKHRoaXMudmFsdWUuZ2V0VGltZSgpICE9PSBvbGRWYWx1ZS5nZXRUaW1lKCkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmVtaXRWYWx1ZUNoYW5nZShvbGRWYWx1ZSwgdGhpcy52YWx1ZSk7XG4gICAgICAgICAgICAgICAgdGhpcy5fZGF0ZVZhbHVlLnNldEhvdXJzKDAsIDAsIDApO1xuICAgICAgICAgICAgICAgIHRoaXMuZGF0ZVRpbWVFZGl0b3IudmFsdWUgPSBuZXcgRGF0ZSh0aGlzLnZhbHVlKTtcbiAgICAgICAgICAgICAgICB0aGlzLnNldFNlbGVjdGVkVmFsdWUodGhpcy5fZGF0ZVZhbHVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMudmFsdWUgPSBudWxsO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU2VsZWN0cyB0aW1lIGZyb20gdGhlIGlneFRpbWVQaWNrZXIuXG4gICAgICpcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIGBgYHR5cGVzY3JpcHRcbiAgICAgKiB0aGlzLnRpbWVQaWNrZXIuc2VsZWN0KGRhdGUpO1xuICAgICAqXG4gICAgICogQHBhcmFtIGRhdGUgRGF0ZSBvYmplY3QgY29udGFpbmluZyB0aGUgdGltZSB0byBiZSBzZWxlY3RlZC5cbiAgICAgKi9cbiAgICBwdWJsaWMgc2VsZWN0KGRhdGU6IERhdGUgfCBzdHJpbmcpOiB2b2lkIHtcbiAgICAgICAgdGhpcy52YWx1ZSA9IGRhdGU7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogSW5jcmVtZW50IGEgc3BlY2lmaWVkIGBEYXRlUGFydGAuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gZGF0ZVBhcnQgVGhlIG9wdGlvbmFsIERhdGVQYXJ0IHRvIGluY3JlbWVudC4gRGVmYXVsdHMgdG8gSG91ci5cbiAgICAgKiBAcGFyYW0gZGVsdGEgVGhlIG9wdGlvbmFsIGRlbHRhIHRvIGluY3JlbWVudCBieS4gT3ZlcnJpZGVzIGBpdGVtc0RlbHRhYC5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIGBgYHR5cGVzY3JpcHRcbiAgICAgKiB0aGlzLnRpbWVQaWNrZXIuaW5jcmVtZW50KERhdGVQYXJ0LkhvdXJzKTtcbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBwdWJsaWMgaW5jcmVtZW50KGRhdGVQYXJ0PzogRGF0ZVBhcnQsIGRlbHRhPzogbnVtYmVyKTogdm9pZCB7XG4gICAgICAgIHRoaXMuZGF0ZVRpbWVFZGl0b3IuaW5jcmVtZW50KGRhdGVQYXJ0LCBkZWx0YSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogRGVjcmVtZW50IGEgc3BlY2lmaWVkIGBEYXRlUGFydGBcbiAgICAgKlxuICAgICAqIEBwYXJhbSBkYXRlUGFydCBUaGUgb3B0aW9uYWwgRGF0ZVBhcnQgdG8gZGVjcmVtZW50LiBEZWZhdWx0cyB0byBIb3VyLlxuICAgICAqIEBwYXJhbSBkZWx0YSBUaGUgb3B0aW9uYWwgZGVsdGEgdG8gZGVjcmVtZW50IGJ5LiBPdmVycmlkZXMgYGl0ZW1zRGVsdGFgLlxuICAgICAqIEBleGFtcGxlXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIHRoaXMudGltZVBpY2tlci5kZWNyZW1lbnQoRGF0ZVBhcnQuU2Vjb25kcyk7XG4gICAgICogYGBgXG4gICAgICovXG4gICAgcHVibGljIGRlY3JlbWVudChkYXRlUGFydD86IERhdGVQYXJ0LCBkZWx0YT86IG51bWJlcik6IHZvaWQge1xuICAgICAgICB0aGlzLmRhdGVUaW1lRWRpdG9yLmRlY3JlbWVudChkYXRlUGFydCwgZGVsdGEpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuIEBpbnRlcm5hbCAqL1xuICAgIHB1YmxpYyBjYW5jZWxCdXR0b25DbGljaygpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5zZXRTZWxlY3RlZFZhbHVlKHRoaXMuX2RhdGVWYWx1ZSk7XG4gICAgICAgIHRoaXMuZGF0ZVRpbWVFZGl0b3IudmFsdWUgPSB0aGlzLnBhcnNlVG9EYXRlKHRoaXMudmFsdWUpO1xuICAgICAgICB0aGlzLmNsb3NlKCk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gQGludGVybmFsICovXG4gICAgcHVibGljIG9rQnV0dG9uQ2xpY2soKTogdm9pZCB7XG4gICAgICAgIHRoaXMudXBkYXRlVmFsdWUodGhpcy5fc2VsZWN0ZWREYXRlKTtcbiAgICAgICAgdGhpcy5jbG9zZSgpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuIEBpbnRlcm5hbCAqL1xuICAgIHB1YmxpYyBvbkl0ZW1DbGljayhpdGVtOiBzdHJpbmcsIGRhdGVUeXBlOiBzdHJpbmcpOiB2b2lkIHtcbiAgICAgICAgbGV0IGRhdGUgPSBuZXcgRGF0ZSh0aGlzLl9zZWxlY3RlZERhdGUpO1xuICAgICAgICBzd2l0Y2ggKGRhdGVUeXBlKSB7XG4gICAgICAgICAgICBjYXNlICdob3VyTGlzdCc6IHtcbiAgICAgICAgICAgICAgICBsZXQgYW1wbTogc3RyaW5nO1xuICAgICAgICAgICAgICAgIGNvbnN0IHNlbGVjdGVkSG91ciA9IHBhcnNlSW50KGl0ZW0sIDEwKTtcbiAgICAgICAgICAgICAgICBsZXQgaG91cnMgPSBzZWxlY3RlZEhvdXI7XG5cbiAgICAgICAgICAgICAgICBpZiAodGhpcy5zaG93QW1QbUxpc3QpIHtcbiAgICAgICAgICAgICAgICAgICAgYW1wbSA9IHRoaXMuZ2V0UGFydFZhbHVlKGRhdGUsICdhbXBtJyk7XG4gICAgICAgICAgICAgICAgICAgIGhvdXJzID0gdGhpcy50b1R3ZW50eUZvdXJIb3VyRm9ybWF0KGhvdXJzLCBhbXBtKTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgbWluSG91cnMgPSB0aGlzLm1pbkRyb3Bkb3duVmFsdWU/LmdldEhvdXJzKCkgfHwgMDtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgbWF4SG91cnMgPSB0aGlzLm1heERyb3Bkb3duVmFsdWU/LmdldEhvdXJzKCkgfHwgMjQ7XG4gICAgICAgICAgICAgICAgICAgIGlmIChob3VycyA8IG1pbkhvdXJzIHx8IGhvdXJzID4gbWF4SG91cnMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGhvdXJzID0gaG91cnMgPCAxMiA/IGhvdXJzICsgMTIgOiBob3VycyAtIDEyO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgZGF0ZS5zZXRIb3Vycyhob3Vycyk7XG4gICAgICAgICAgICAgICAgZGF0ZSA9IHRoaXMudmFsaWRhdGVEcm9wZG93blZhbHVlKGRhdGUpO1xuXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMudmFsdWVJblJhbmdlKGRhdGUsIHRoaXMubWluRHJvcGRvd25WYWx1ZSwgdGhpcy5tYXhEcm9wZG93blZhbHVlKSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnNldFNlbGVjdGVkVmFsdWUoZGF0ZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSAnbWludXRlTGlzdCc6IHtcbiAgICAgICAgICAgICAgICBjb25zdCBtaW51dGVzID0gcGFyc2VJbnQoaXRlbSwgMTApO1xuICAgICAgICAgICAgICAgIGRhdGUuc2V0TWludXRlcyhtaW51dGVzKTtcbiAgICAgICAgICAgICAgICBkYXRlID0gdGhpcy52YWxpZGF0ZURyb3Bkb3duVmFsdWUoZGF0ZSk7XG4gICAgICAgICAgICAgICAgdGhpcy5zZXRTZWxlY3RlZFZhbHVlKGRhdGUpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSAnc2Vjb25kc0xpc3QnOiB7XG4gICAgICAgICAgICAgICAgY29uc3Qgc2Vjb25kcyA9IHBhcnNlSW50KGl0ZW0sIDEwKTtcbiAgICAgICAgICAgICAgICBkYXRlLnNldFNlY29uZHMoc2Vjb25kcyk7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMudmFsdWVJblJhbmdlKGRhdGUsIHRoaXMubWluRHJvcGRvd25WYWx1ZSwgdGhpcy5tYXhEcm9wZG93blZhbHVlKSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnNldFNlbGVjdGVkVmFsdWUoZGF0ZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSAnYW1wbUxpc3QnOiB7XG4gICAgICAgICAgICAgICAgbGV0IGhvdXIgPSB0aGlzLl9zZWxlY3RlZERhdGUuZ2V0SG91cnMoKTtcbiAgICAgICAgICAgICAgICBob3VyID0gaXRlbSA9PT0gJ0FNJyA/IGhvdXIgLSAxMiA6IGhvdXIgKyAxMjtcbiAgICAgICAgICAgICAgICBkYXRlLnNldEhvdXJzKGhvdXIpO1xuICAgICAgICAgICAgICAgIGRhdGUgPSB0aGlzLnZhbGlkYXRlRHJvcGRvd25WYWx1ZShkYXRlLCB0cnVlKTtcbiAgICAgICAgICAgICAgICB0aGlzLnNldFNlbGVjdGVkVmFsdWUoZGF0ZSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy51cGRhdGVFZGl0b3JWYWx1ZSgpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuIEBpbnRlcm5hbCAqL1xuICAgIHB1YmxpYyBuZXh0SG91cihkZWx0YTogbnVtYmVyKSB7XG4gICAgICAgIGRlbHRhID0gZGVsdGEgPiAwID8gMSA6IC0xO1xuICAgICAgICBjb25zdCBwcmV2aW91c0RhdGUgPSBuZXcgRGF0ZSh0aGlzLl9zZWxlY3RlZERhdGUpO1xuICAgICAgICBjb25zdCBtaW5Ib3VycyA9IHRoaXMubWluRHJvcGRvd25WYWx1ZT8uZ2V0SG91cnMoKTtcbiAgICAgICAgY29uc3QgbWF4SG91cnMgPSB0aGlzLm1heERyb3Bkb3duVmFsdWU/LmdldEhvdXJzKCk7XG4gICAgICAgIGNvbnN0IHByZXZpb3VzSG91cnMgPSBwcmV2aW91c0RhdGUuZ2V0SG91cnMoKTtcbiAgICAgICAgbGV0IGhvdXJzID0gcHJldmlvdXNIb3VycyArIGRlbHRhICogdGhpcy5pdGVtc0RlbHRhLmhvdXJzO1xuICAgICAgICBpZiAoKHByZXZpb3VzSG91cnMgPT09IG1heEhvdXJzICYmIGRlbHRhID4gMCkgfHwgKHByZXZpb3VzSG91cnMgPT09IG1pbkhvdXJzICYmIGRlbHRhIDwgMCkpIHtcbiAgICAgICAgICAgIGhvdXJzID0gIXRoaXMuc3Bpbkxvb3AgPyBwcmV2aW91c0hvdXJzIDogZGVsdGEgPiAwID8gbWluSG91cnMgOiBtYXhIb3VycztcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX3NlbGVjdGVkRGF0ZS5zZXRIb3Vycyhob3Vycyk7XG4gICAgICAgIHRoaXMuX3NlbGVjdGVkRGF0ZSA9IHRoaXMudmFsaWRhdGVEcm9wZG93blZhbHVlKHRoaXMuX3NlbGVjdGVkRGF0ZSk7XG4gICAgICAgIHRoaXMuX3NlbGVjdGVkRGF0ZSA9IG5ldyBEYXRlKHRoaXMuX3NlbGVjdGVkRGF0ZSk7XG4gICAgICAgIHRoaXMudXBkYXRlRWRpdG9yVmFsdWUoKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiBAaW50ZXJuYWwgKi9cbiAgICBwdWJsaWMgbmV4dE1pbnV0ZShkZWx0YTogbnVtYmVyKSB7XG4gICAgICAgIGRlbHRhID0gZGVsdGEgPiAwID8gMSA6IC0xO1xuICAgICAgICBjb25zdCBtaW5Ib3VycyA9IHRoaXMubWluRHJvcGRvd25WYWx1ZS5nZXRIb3VycygpO1xuICAgICAgICBjb25zdCBtYXhIb3VycyA9IHRoaXMubWF4RHJvcGRvd25WYWx1ZS5nZXRIb3VycygpO1xuICAgICAgICBjb25zdCBob3VycyA9IHRoaXMuX3NlbGVjdGVkRGF0ZS5nZXRIb3VycygpO1xuICAgICAgICBsZXQgbWludXRlcyA9IHRoaXMuX3NlbGVjdGVkRGF0ZS5nZXRNaW51dGVzKCk7XG4gICAgICAgIGNvbnN0IG1pbk1pbnV0ZXMgPSBob3VycyA9PT0gbWluSG91cnMgPyB0aGlzLm1pbkRyb3Bkb3duVmFsdWUuZ2V0TWludXRlcygpIDogMDtcbiAgICAgICAgY29uc3QgbWF4TWludXRlcyA9IGhvdXJzID09PSBtYXhIb3VycyA/IHRoaXMubWF4RHJvcGRvd25WYWx1ZS5nZXRNaW51dGVzKCkgOlxuICAgICAgICAgICAgNjAgJSB0aGlzLml0ZW1zRGVsdGEubWludXRlcyA+IDAgPyA2MCAtICg2MCAlIHRoaXMuaXRlbXNEZWx0YS5taW51dGVzKSA6XG4gICAgICAgICAgICAgICAgNjAgLSB0aGlzLml0ZW1zRGVsdGEubWludXRlcztcblxuICAgICAgICBpZiAoKGRlbHRhIDwgMCAmJiBtaW51dGVzID09PSBtaW5NaW51dGVzKSB8fCAoZGVsdGEgPiAwICYmIG1pbnV0ZXMgPT09IG1heE1pbnV0ZXMpKSB7XG4gICAgICAgICAgICBtaW51dGVzID0gdGhpcy5zcGluTG9vcCAmJiBtaW51dGVzID09PSBtaW5NaW51dGVzID8gbWF4TWludXRlcyA6IHRoaXMuc3Bpbkxvb3AgJiYgbWludXRlcyA9PT0gbWF4TWludXRlcyA/IG1pbk1pbnV0ZXMgOiBtaW51dGVzO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgbWludXRlcyA9IG1pbnV0ZXMgKyBkZWx0YSAqIHRoaXMuaXRlbXNEZWx0YS5taW51dGVzO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5fc2VsZWN0ZWREYXRlLnNldE1pbnV0ZXMobWludXRlcyk7XG4gICAgICAgIHRoaXMuX3NlbGVjdGVkRGF0ZSA9IHRoaXMudmFsaWRhdGVEcm9wZG93blZhbHVlKHRoaXMuX3NlbGVjdGVkRGF0ZSk7XG4gICAgICAgIHRoaXMuX3NlbGVjdGVkRGF0ZSA9IG5ldyBEYXRlKHRoaXMuX3NlbGVjdGVkRGF0ZSk7XG4gICAgICAgIHRoaXMudXBkYXRlRWRpdG9yVmFsdWUoKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiBAaW50ZXJuYWwgKi9cbiAgICBwdWJsaWMgbmV4dFNlY29uZHMoZGVsdGE6IG51bWJlcikge1xuICAgICAgICBkZWx0YSA9IGRlbHRhID4gMCA/IDEgOiAtMTtcbiAgICAgICAgY29uc3QgbWluSG91cnMgPSB0aGlzLm1pbkRyb3Bkb3duVmFsdWUuZ2V0SG91cnMoKTtcbiAgICAgICAgY29uc3QgbWF4SG91cnMgPSB0aGlzLm1heERyb3Bkb3duVmFsdWUuZ2V0SG91cnMoKTtcbiAgICAgICAgY29uc3QgaG91cnMgPSB0aGlzLl9zZWxlY3RlZERhdGUuZ2V0SG91cnMoKTtcbiAgICAgICAgY29uc3QgbWludXRlcyA9IHRoaXMuX3NlbGVjdGVkRGF0ZS5nZXRNaW51dGVzKCk7XG4gICAgICAgIGNvbnN0IG1pbk1pbnV0ZXMgPSB0aGlzLm1pbkRyb3Bkb3duVmFsdWUuZ2V0TWludXRlcygpO1xuICAgICAgICBjb25zdCBtYXhNaW51dGVzID0gdGhpcy5tYXhEcm9wZG93blZhbHVlLmdldE1pbnV0ZXMoKTtcbiAgICAgICAgbGV0IHNlY29uZHMgPSB0aGlzLl9zZWxlY3RlZERhdGUuZ2V0U2Vjb25kcygpO1xuICAgICAgICBjb25zdCBtaW5TZWNvbmRzID0gKGhvdXJzID09PSBtaW5Ib3VycyAmJiBtaW51dGVzID09PSBtaW5NaW51dGVzKSA/IHRoaXMubWluRHJvcGRvd25WYWx1ZS5nZXRTZWNvbmRzKCkgOiAwO1xuICAgICAgICBjb25zdCBtYXhTZWNvbmRzID0gKGhvdXJzID09PSBtYXhIb3VycyAmJiBtaW51dGVzID09PSBtYXhNaW51dGVzKSA/IHRoaXMubWF4RHJvcGRvd25WYWx1ZS5nZXRTZWNvbmRzKCkgOlxuICAgICAgICAgICAgNjAgJSB0aGlzLml0ZW1zRGVsdGEuc2Vjb25kcyA+IDAgPyA2MCAtICg2MCAlIHRoaXMuaXRlbXNEZWx0YS5zZWNvbmRzKSA6XG4gICAgICAgICAgICAgICAgNjAgLSB0aGlzLml0ZW1zRGVsdGEuc2Vjb25kcztcblxuICAgICAgICBpZiAoKGRlbHRhIDwgMCAmJiBzZWNvbmRzID09PSBtaW5TZWNvbmRzKSB8fCAoZGVsdGEgPiAwICYmIHNlY29uZHMgPT09IG1heFNlY29uZHMpKSB7XG4gICAgICAgICAgICBzZWNvbmRzID0gdGhpcy5zcGluTG9vcCAmJiBzZWNvbmRzID09PSBtaW5TZWNvbmRzID8gbWF4U2Vjb25kcyA6IHRoaXMuc3Bpbkxvb3AgJiYgc2Vjb25kcyA9PT0gbWF4U2Vjb25kcyA/IG1pblNlY29uZHMgOiBzZWNvbmRzO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgc2Vjb25kcyA9IHNlY29uZHMgKyBkZWx0YSAqIHRoaXMuaXRlbXNEZWx0YS5zZWNvbmRzO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5fc2VsZWN0ZWREYXRlLnNldFNlY29uZHMoc2Vjb25kcyk7XG4gICAgICAgIHRoaXMuX3NlbGVjdGVkRGF0ZSA9IHRoaXMudmFsaWRhdGVEcm9wZG93blZhbHVlKHRoaXMuX3NlbGVjdGVkRGF0ZSk7XG4gICAgICAgIHRoaXMuX3NlbGVjdGVkRGF0ZSA9IG5ldyBEYXRlKHRoaXMuX3NlbGVjdGVkRGF0ZSk7XG4gICAgICAgIHRoaXMudXBkYXRlRWRpdG9yVmFsdWUoKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiBAaW50ZXJuYWwgKi9cbiAgICBwdWJsaWMgbmV4dEFtUG0oZGVsdGE/OiBudW1iZXIpIHtcbiAgICAgICAgY29uc3QgYW1wbSA9IHRoaXMuZ2V0UGFydFZhbHVlKHRoaXMuX3NlbGVjdGVkRGF0ZSwgJ2FtcG0nKTtcbiAgICAgICAgaWYgKCFkZWx0YSB8fCAoYW1wbSA9PT0gJ0FNJyAmJiBkZWx0YSA+IDApIHx8IChhbXBtID09PSAnUE0nICYmIGRlbHRhIDwgMCkpIHtcbiAgICAgICAgICAgIGxldCBob3VycyA9IHRoaXMuX3NlbGVjdGVkRGF0ZS5nZXRIb3VycygpO1xuICAgICAgICAgICAgY29uc3Qgc2lnbiA9IGhvdXJzIDwgMTIgPyAxIDogLTE7XG4gICAgICAgICAgICBob3VycyA9IGhvdXJzICsgc2lnbiAqIDEyO1xuICAgICAgICAgICAgdGhpcy5fc2VsZWN0ZWREYXRlLnNldEhvdXJzKGhvdXJzKTtcbiAgICAgICAgICAgIHRoaXMuX3NlbGVjdGVkRGF0ZSA9IHRoaXMudmFsaWRhdGVEcm9wZG93blZhbHVlKHRoaXMuX3NlbGVjdGVkRGF0ZSwgdHJ1ZSk7XG4gICAgICAgICAgICB0aGlzLl9zZWxlY3RlZERhdGUgPSBuZXcgRGF0ZSh0aGlzLl9zZWxlY3RlZERhdGUpO1xuICAgICAgICAgICAgdGhpcy51cGRhdGVFZGl0b3JWYWx1ZSgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gQGludGVybmFsICovXG4gICAgcHVibGljIHNldFNlbGVjdGVkVmFsdWUodmFsdWU6IERhdGUpIHtcbiAgICAgICAgdGhpcy5fc2VsZWN0ZWREYXRlID0gdmFsdWUgPyBuZXcgRGF0ZSh2YWx1ZSkgOiBudWxsO1xuICAgICAgICBpZiAoIURhdGVUaW1lVXRpbC5pc1ZhbGlkRGF0ZSh0aGlzLl9zZWxlY3RlZERhdGUpKSB7XG4gICAgICAgICAgICB0aGlzLl9zZWxlY3RlZERhdGUgPSBuZXcgRGF0ZSh0aGlzLm1pbkRyb3Bkb3duVmFsdWUpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLm1pblZhbHVlICYmIERhdGVUaW1lVXRpbC5sZXNzVGhhbk1pblZhbHVlKHRoaXMuX3NlbGVjdGVkRGF0ZSwgdGhpcy5taW5Ecm9wZG93blZhbHVlLCB0cnVlLCBmYWxzZSkpIHtcbiAgICAgICAgICAgIHRoaXMuX3NlbGVjdGVkRGF0ZSA9IG5ldyBEYXRlKHRoaXMubWluRHJvcGRvd25WYWx1ZSk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMubWF4VmFsdWUgJiYgRGF0ZVRpbWVVdGlsLmdyZWF0ZXJUaGFuTWF4VmFsdWUodGhpcy5fc2VsZWN0ZWREYXRlLCB0aGlzLm1heERyb3Bkb3duVmFsdWUsIHRydWUsIGZhbHNlKSkge1xuICAgICAgICAgICAgdGhpcy5fc2VsZWN0ZWREYXRlID0gbmV3IERhdGUodGhpcy5tYXhEcm9wZG93blZhbHVlKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLl9zZWxlY3RlZERhdGUuZ2V0SG91cnMoKSAlIHRoaXMuaXRlbXNEZWx0YS5ob3VycyA+IDApIHtcbiAgICAgICAgICAgIHRoaXMuX3NlbGVjdGVkRGF0ZS5zZXRIb3VycyhcbiAgICAgICAgICAgICAgICB0aGlzLl9zZWxlY3RlZERhdGUuZ2V0SG91cnMoKSArIHRoaXMuaXRlbXNEZWx0YS5ob3VycyAtIHRoaXMuX3NlbGVjdGVkRGF0ZS5nZXRIb3VycygpICUgdGhpcy5pdGVtc0RlbHRhLmhvdXJzLFxuICAgICAgICAgICAgICAgIDAsXG4gICAgICAgICAgICAgICAgMFxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLl9zZWxlY3RlZERhdGUuZ2V0TWludXRlcygpICUgdGhpcy5pdGVtc0RlbHRhLm1pbnV0ZXMgPiAwKSB7XG4gICAgICAgICAgICB0aGlzLl9zZWxlY3RlZERhdGUuc2V0SG91cnMoXG4gICAgICAgICAgICAgICAgdGhpcy5fc2VsZWN0ZWREYXRlLmdldEhvdXJzKCksXG4gICAgICAgICAgICAgICAgdGhpcy5fc2VsZWN0ZWREYXRlLmdldE1pbnV0ZXMoKSArIHRoaXMuaXRlbXNEZWx0YS5taW51dGVzIC0gdGhpcy5fc2VsZWN0ZWREYXRlLmdldE1pbnV0ZXMoKSAlIHRoaXMuaXRlbXNEZWx0YS5taW51dGVzLFxuICAgICAgICAgICAgICAgIDBcbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5fc2VsZWN0ZWREYXRlLmdldFNlY29uZHMoKSAlIHRoaXMuaXRlbXNEZWx0YS5zZWNvbmRzID4gMCkge1xuICAgICAgICAgICAgdGhpcy5fc2VsZWN0ZWREYXRlLnNldFNlY29uZHMoXG4gICAgICAgICAgICAgICAgdGhpcy5fc2VsZWN0ZWREYXRlLmdldFNlY29uZHMoKSArIHRoaXMuaXRlbXNEZWx0YS5zZWNvbmRzIC0gdGhpcy5fc2VsZWN0ZWREYXRlLmdldFNlY29uZHMoKSAlIHRoaXMuaXRlbXNEZWx0YS5zZWNvbmRzXG4gICAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIG9uU3RhdHVzQ2hhbmdlZCgpIHtcbiAgICAgICAgaWYgKHRoaXMuX25nQ29udHJvbCAmJiAhdGhpcy5fbmdDb250cm9sLmRpc2FibGVkICYmIHRoaXMuaXNUb3VjaGVkT3JEaXJ0eSkge1xuICAgICAgICAgICAgaWYgKHRoaXMuaGFzVmFsaWRhdG9ycyAmJiB0aGlzLl9pbnB1dEdyb3VwLmlzRm9jdXNlZCkge1xuICAgICAgICAgICAgICAgIHRoaXMuaW5wdXREaXJlY3RpdmUudmFsaWQgPSB0aGlzLl9uZ0NvbnRyb2wudmFsaWQgPyBJZ3hJbnB1dFN0YXRlLlZBTElEIDogSWd4SW5wdXRTdGF0ZS5JTlZBTElEO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLmlucHV0RGlyZWN0aXZlLnZhbGlkID0gdGhpcy5fbmdDb250cm9sLnZhbGlkID8gSWd4SW5wdXRTdGF0ZS5JTklUSUFMIDogSWd4SW5wdXRTdGF0ZS5JTlZBTElEO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gQi5QLiAxOCBNYXkgMjAyMTogSWd4RGF0ZVBpY2tlciBkb2VzIG5vdCByZXNldCBpdHMgc3RhdGUgdXBvbiByZXNldEZvcm0gIzk1MjZcbiAgICAgICAgICAgIHRoaXMuaW5wdXREaXJlY3RpdmUudmFsaWQgPSBJZ3hJbnB1dFN0YXRlLklOSVRJQUw7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5faW5wdXRHcm91cCAmJiB0aGlzLl9pbnB1dEdyb3VwLmlzUmVxdWlyZWQgIT09IHRoaXMucmVxdWlyZWQpIHtcbiAgICAgICAgICAgIHRoaXMuX2lucHV0R3JvdXAuaXNSZXF1aXJlZCA9IHRoaXMucmVxdWlyZWQ7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGdldCBpc1RvdWNoZWRPckRpcnR5KCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gKHRoaXMuX25nQ29udHJvbC5jb250cm9sLnRvdWNoZWQgfHwgdGhpcy5fbmdDb250cm9sLmNvbnRyb2wuZGlydHkpO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0IGhhc1ZhbGlkYXRvcnMoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiAoISF0aGlzLl9uZ0NvbnRyb2wuY29udHJvbC52YWxpZGF0b3IgfHwgISF0aGlzLl9uZ0NvbnRyb2wuY29udHJvbC5hc3luY1ZhbGlkYXRvcik7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzZXRNaW5NYXhEcm9wZG93blZhbHVlKHR5cGU6IHN0cmluZywgdGltZTogRGF0ZSk6IERhdGUge1xuICAgICAgICBsZXQgZGVsdGE6IG51bWJlcjtcblxuICAgICAgICBjb25zdCBzaWduID0gdHlwZSA9PT0gJ21pbicgPyAxIDogLTE7XG5cbiAgICAgICAgY29uc3QgaG91cnMgPSB0aW1lLmdldEhvdXJzKCk7XG4gICAgICAgIGxldCBtaW51dGVzID0gdGltZS5nZXRNaW51dGVzKCk7XG4gICAgICAgIGxldCBzZWNvbmRzID0gdGltZS5nZXRTZWNvbmRzKCk7XG5cbiAgICAgICAgaWYgKHRoaXMuc2hvd0hvdXJzTGlzdCAmJiBob3VycyAlIHRoaXMuaXRlbXNEZWx0YS5ob3VycyA+IDApIHtcbiAgICAgICAgICAgIGRlbHRhID0gdHlwZSA9PT0gJ21pbicgPyB0aGlzLml0ZW1zRGVsdGEuaG91cnMgLSBob3VycyAlIHRoaXMuaXRlbXNEZWx0YS5ob3Vyc1xuICAgICAgICAgICAgICAgIDogaG91cnMgJSB0aGlzLml0ZW1zRGVsdGEuaG91cnM7XG4gICAgICAgICAgICBtaW51dGVzID0gdHlwZSA9PT0gJ21pbicgPyAwXG4gICAgICAgICAgICAgICAgOiA2MCAlIHRoaXMuaXRlbXNEZWx0YS5taW51dGVzID4gMCA/IDYwIC0gNjAgJSB0aGlzLml0ZW1zRGVsdGEubWludXRlc1xuICAgICAgICAgICAgICAgICAgICA6IDYwIC0gdGhpcy5pdGVtc0RlbHRhLm1pbnV0ZXM7XG4gICAgICAgICAgICBzZWNvbmRzID0gdHlwZSA9PT0gJ21pbicgPyAwXG4gICAgICAgICAgICAgICAgOiA2MCAlIHRoaXMuaXRlbXNEZWx0YS5zZWNvbmRzID4gMCA/IDYwIC0gNjAgJSB0aGlzLml0ZW1zRGVsdGEuc2Vjb25kc1xuICAgICAgICAgICAgICAgICAgICA6IDYwIC0gdGhpcy5pdGVtc0RlbHRhLnNlY29uZHM7XG4gICAgICAgICAgICB0aW1lLnNldEhvdXJzKGhvdXJzICsgc2lnbiAqIGRlbHRhLCBtaW51dGVzLCBzZWNvbmRzKTtcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLnNob3dNaW51dGVzTGlzdCAmJiBtaW51dGVzICUgdGhpcy5pdGVtc0RlbHRhLm1pbnV0ZXMgPiAwKSB7XG4gICAgICAgICAgICBkZWx0YSA9IHR5cGUgPT09ICdtaW4nID8gdGhpcy5pdGVtc0RlbHRhLm1pbnV0ZXMgLSBtaW51dGVzICUgdGhpcy5pdGVtc0RlbHRhLm1pbnV0ZXNcbiAgICAgICAgICAgICAgICA6IG1pbnV0ZXMgJSB0aGlzLml0ZW1zRGVsdGEubWludXRlcztcbiAgICAgICAgICAgIHNlY29uZHMgPSB0eXBlID09PSAnbWluJyA/IDBcbiAgICAgICAgICAgICAgICA6IDYwICUgdGhpcy5pdGVtc0RlbHRhLnNlY29uZHMgPiAwID8gNjAgLSA2MCAlIHRoaXMuaXRlbXNEZWx0YS5zZWNvbmRzXG4gICAgICAgICAgICAgICAgICAgIDogNjAgLSB0aGlzLml0ZW1zRGVsdGEuc2Vjb25kcztcbiAgICAgICAgICAgIHRpbWUuc2V0SG91cnMoaG91cnMsIG1pbnV0ZXMgKyBzaWduICogZGVsdGEsIHNlY29uZHMpO1xuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuc2hvd1NlY29uZHNMaXN0ICYmIHNlY29uZHMgJSB0aGlzLml0ZW1zRGVsdGEuc2Vjb25kcyA+IDApIHtcbiAgICAgICAgICAgIGRlbHRhID0gdHlwZSA9PT0gJ21pbicgPyB0aGlzLml0ZW1zRGVsdGEuc2Vjb25kcyAtIHNlY29uZHMgJSB0aGlzLml0ZW1zRGVsdGEuc2Vjb25kc1xuICAgICAgICAgICAgICAgIDogc2Vjb25kcyAlIHRoaXMuaXRlbXNEZWx0YS5zZWNvbmRzO1xuICAgICAgICAgICAgdGltZS5zZXRIb3Vycyhob3VycywgbWludXRlcywgc2Vjb25kcyArIHNpZ24gKiBkZWx0YSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdGltZTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGluaXRpYWxpemVDb250YWluZXIoKSB7XG4gICAgICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZSgoKSA9PiB7XG4gICAgICAgICAgICBpZiAodGhpcy5ob3VyTGlzdCkge1xuICAgICAgICAgICAgICAgIHRoaXMuaG91ckxpc3QubmF0aXZlRWxlbWVudC5mb2N1cygpO1xuICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLm1pbnV0ZUxpc3QpIHtcbiAgICAgICAgICAgICAgICB0aGlzLm1pbnV0ZUxpc3QubmF0aXZlRWxlbWVudC5mb2N1cygpO1xuICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLnNlY29uZHNMaXN0KSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zZWNvbmRzTGlzdC5uYXRpdmVFbGVtZW50LmZvY3VzKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgdmFsaWRhdGVEcm9wZG93blZhbHVlKGRhdGU6IERhdGUsIGlzQW1QbSA9IGZhbHNlKTogRGF0ZSB7XG4gICAgICAgIGlmIChkYXRlID4gdGhpcy5tYXhEcm9wZG93blZhbHVlKSB7XG4gICAgICAgICAgICBpZiAoaXNBbVBtICYmIGRhdGUuZ2V0SG91cnMoKSAhPT0gdGhpcy5tYXhEcm9wZG93blZhbHVlLmdldEhvdXJzKCkpIHtcbiAgICAgICAgICAgICAgICBkYXRlLnNldEhvdXJzKDEyKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgZGF0ZSA9IG5ldyBEYXRlKHRoaXMubWF4RHJvcGRvd25WYWx1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZGF0ZSA8IHRoaXMubWluRHJvcGRvd25WYWx1ZSkge1xuICAgICAgICAgICAgZGF0ZSA9IG5ldyBEYXRlKHRoaXMubWluRHJvcGRvd25WYWx1ZSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gZGF0ZTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGVtaXRWYWx1ZUNoYW5nZShvbGRWYWx1ZTogRGF0ZSB8IHN0cmluZywgbmV3VmFsdWU6IERhdGUgfCBzdHJpbmcpIHtcbiAgICAgICAgaWYgKCFpc0VxdWFsKG9sZFZhbHVlLCBuZXdWYWx1ZSkpIHtcbiAgICAgICAgICAgIHRoaXMudmFsdWVDaGFuZ2UuZW1pdChuZXdWYWx1ZSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGVtaXRWYWxpZGF0aW9uRmFpbGVkRXZlbnQocHJldmlvdXNWYWx1ZTogRGF0ZSB8IHN0cmluZykge1xuICAgICAgICBjb25zdCBhcmdzOiBJZ3hUaW1lUGlja2VyVmFsaWRhdGlvbkZhaWxlZEV2ZW50QXJncyA9IHtcbiAgICAgICAgICAgIG93bmVyOiB0aGlzLFxuICAgICAgICAgICAgcHJldmlvdXNWYWx1ZSxcbiAgICAgICAgICAgIGN1cnJlbnRWYWx1ZTogdGhpcy52YWx1ZVxuICAgICAgICB9O1xuICAgICAgICB0aGlzLnZhbGlkYXRpb25GYWlsZWQuZW1pdChhcmdzKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHVwZGF0ZVZhbGlkaXR5T25CbHVyKCkge1xuICAgICAgICB0aGlzLl9vblRvdWNoZWRDYWxsYmFjaygpO1xuICAgICAgICBpZiAodGhpcy5fbmdDb250cm9sKSB7XG4gICAgICAgICAgICBpZiAoIXRoaXMuX25nQ29udHJvbC52YWxpZCkge1xuICAgICAgICAgICAgICAgIHRoaXMuaW5wdXREaXJlY3RpdmUudmFsaWQgPSBJZ3hJbnB1dFN0YXRlLklOVkFMSUQ7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMuaW5wdXREaXJlY3RpdmUudmFsaWQgPSBJZ3hJbnB1dFN0YXRlLklOSVRJQUw7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIHZhbHVlSW5SYW5nZSh2YWx1ZTogRGF0ZSwgbWluVmFsdWU6IERhdGUsIG1heFZhbHVlOiBEYXRlKTogYm9vbGVhbiB7XG4gICAgICAgIGlmIChtaW5WYWx1ZSAmJiBEYXRlVGltZVV0aWwubGVzc1RoYW5NaW5WYWx1ZSh2YWx1ZSwgbWluVmFsdWUsIHRydWUsIGZhbHNlKSkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIGlmIChtYXhWYWx1ZSAmJiBEYXRlVGltZVV0aWwuZ3JlYXRlclRoYW5NYXhWYWx1ZSh2YWx1ZSwgbWF4VmFsdWUsIHRydWUsIGZhbHNlKSkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBwYXJzZVRvRGF0ZSh2YWx1ZTogRGF0ZSB8IHN0cmluZyk6IERhdGUgfCBudWxsIHtcbiAgICAgICAgcmV0dXJuIERhdGVUaW1lVXRpbC5pc1ZhbGlkRGF0ZSh2YWx1ZSkgPyB2YWx1ZSA6IERhdGVUaW1lVXRpbC5wYXJzZUlzb0RhdGUodmFsdWUpO1xuICAgIH1cblxuICAgIHByaXZhdGUgdG9Ud2VudHlGb3VySG91ckZvcm1hdChob3VyOiBudW1iZXIsIGFtcG06IHN0cmluZyk6IG51bWJlciB7XG4gICAgICAgIGlmIChhbXBtID09PSAnUE0nICYmIGhvdXIgPCAxMikge1xuICAgICAgICAgICAgaG91ciArPSAxMjtcbiAgICAgICAgfSBlbHNlIGlmIChhbXBtID09PSAnQU0nICYmIGhvdXIgPT09IDEyKSB7XG4gICAgICAgICAgICBob3VyID0gMDtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBob3VyO1xuICAgIH1cblxuICAgIHByaXZhdGUgdXBkYXRlVmFsdWUobmV3VmFsdWU6IERhdGUgfCBudWxsKTogdm9pZCB7XG4gICAgICAgIGlmICghdGhpcy52YWx1ZSkge1xuICAgICAgICAgICAgdGhpcy52YWx1ZSA9IG5ld1ZhbHVlID8gbmV3IERhdGUobmV3VmFsdWUpIDogbmV3VmFsdWU7XG4gICAgICAgIH0gZWxzZSBpZiAoaXNEYXRlKHRoaXMudmFsdWUpKSB7XG4gICAgICAgICAgICBjb25zdCBkYXRlID0gbmV3IERhdGUodGhpcy52YWx1ZSk7XG4gICAgICAgICAgICBkYXRlLnNldEhvdXJzKG5ld1ZhbHVlPy5nZXRIb3VycygpIHx8IDAsIG5ld1ZhbHVlPy5nZXRNaW51dGVzKCkgfHwgMCwgbmV3VmFsdWU/LmdldFNlY29uZHMoKSB8fCAwKTtcbiAgICAgICAgICAgIHRoaXMudmFsdWUgPSBkYXRlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy52YWx1ZSA9IG5ld1ZhbHVlID8gdGhpcy50b0lTT1N0cmluZyhuZXdWYWx1ZSkgOiBuZXdWYWx1ZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgdXBkYXRlRWRpdG9yVmFsdWUoKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGRhdGUgPSB0aGlzLmRhdGVUaW1lRWRpdG9yLnZhbHVlID8gbmV3IERhdGUodGhpcy5kYXRlVGltZUVkaXRvci52YWx1ZSkgOiBuZXcgRGF0ZSgpO1xuICAgICAgICBkYXRlLnNldEhvdXJzKHRoaXMuX3NlbGVjdGVkRGF0ZS5nZXRIb3VycygpLCB0aGlzLl9zZWxlY3RlZERhdGUuZ2V0TWludXRlcygpLCB0aGlzLl9zZWxlY3RlZERhdGUuZ2V0U2Vjb25kcygpKTtcbiAgICAgICAgdGhpcy5kYXRlVGltZUVkaXRvci52YWx1ZSA9IGRhdGU7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzdWJzY3JpYmVUb0RhdGVFZGl0b3JFdmVudHMoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuZGF0ZVRpbWVFZGl0b3IudmFsdWVDaGFuZ2UucGlwZShcbiAgICAgICAgICAgIC8vIGludGVybmFsIGRhdGUgZWRpdG9yIGRpcmVjdGl2ZSBpcyBvbmx5IHVzZWQgdy8gRGF0ZSBvYmplY3QgdmFsdWVzOlxuICAgICAgICAgICAgdGFrZVVudGlsKHRoaXMuX2Rlc3Ryb3kkKSkuc3Vic2NyaWJlKChkYXRlOiBEYXRlIHwgbnVsbCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMudXBkYXRlVmFsdWUoZGF0ZSk7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICB0aGlzLmRhdGVUaW1lRWRpdG9yLnZhbGlkYXRpb25GYWlsZWQucGlwZShcbiAgICAgICAgICAgIHRha2VVbnRpbCh0aGlzLl9kZXN0cm95JCkpLnN1YnNjcmliZSgoZXZlbnQpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLmVtaXRWYWxpZGF0aW9uRmFpbGVkRXZlbnQoZXZlbnQub2xkVmFsdWUpO1xuICAgICAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzdWJzY3JpYmVUb1RvZ2dsZURpcmVjdGl2ZUV2ZW50cygpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMudG9nZ2xlUmVmKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5faW5wdXRHcm91cCkge1xuICAgICAgICAgICAgICAgIHRoaXMudG9nZ2xlUmVmLmVsZW1lbnQuc3R5bGUud2lkdGggPSB0aGlzLl9pbnB1dEdyb3VwLmVsZW1lbnQubmF0aXZlRWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS53aWR0aCArICdweCc7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMudG9nZ2xlUmVmLm9wZW5pbmcucGlwZSh0YWtlVW50aWwodGhpcy5fZGVzdHJveSQpKS5zdWJzY3JpYmUoKGUpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBhcmdzOiBJQmFzZUNhbmNlbGFibGVCcm93c2VyRXZlbnRBcmdzID0geyBvd25lcjogdGhpcywgZXZlbnQ6IGUuZXZlbnQsIGNhbmNlbDogZmFsc2UgfTtcbiAgICAgICAgICAgICAgICB0aGlzLm9wZW5pbmcuZW1pdChhcmdzKTtcbiAgICAgICAgICAgICAgICBlLmNhbmNlbCA9IGFyZ3MuY2FuY2VsO1xuICAgICAgICAgICAgICAgIGlmIChhcmdzLmNhbmNlbCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRoaXMuaW5pdGlhbGl6ZUNvbnRhaW5lcigpO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIHRoaXMudG9nZ2xlUmVmLm9wZW5lZC5waXBlKHRha2VVbnRpbCh0aGlzLl9kZXN0cm95JCkpLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5vcGVuZWQuZW1pdCh7IG93bmVyOiB0aGlzIH0pO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIHRoaXMudG9nZ2xlUmVmLmNsb3NlZC5waXBlKHRha2VVbnRpbCh0aGlzLl9kZXN0cm95JCkpLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5jbG9zZWQuZW1pdCh7IG93bmVyOiB0aGlzIH0pO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIHRoaXMudG9nZ2xlUmVmLmNsb3NpbmcucGlwZSh0YWtlVW50aWwodGhpcy5fZGVzdHJveSQpKS5zdWJzY3JpYmUoKGUpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBhcmdzOiBJQmFzZUNhbmNlbGFibGVCcm93c2VyRXZlbnRBcmdzID0geyBvd25lcjogdGhpcywgZXZlbnQ6IGUuZXZlbnQsIGNhbmNlbDogZmFsc2UgfTtcbiAgICAgICAgICAgICAgICB0aGlzLmNsb3NpbmcuZW1pdChhcmdzKTtcbiAgICAgICAgICAgICAgICBlLmNhbmNlbCA9IGFyZ3MuY2FuY2VsO1xuICAgICAgICAgICAgICAgIGlmIChhcmdzLmNhbmNlbCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gdGhpcy5wYXJzZVRvRGF0ZSh0aGlzLnZhbHVlKTtcbiAgICAgICAgICAgICAgICBpZiAoKHRoaXMuZGF0ZVRpbWVFZGl0b3IudmFsdWUgYXMgRGF0ZSk/LmdldFRpbWUoKSAhPT0gdmFsdWU/LmdldFRpbWUoKSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnVwZGF0ZVZhbHVlKHRoaXMuX3NlbGVjdGVkRGF0ZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIC8vIERvIG5vdCBmb2N1cyB0aGUgaW5wdXQgaWYgY2xpY2tpbmcgb3V0c2lkZSBpbiBkcm9wZG93biBtb2RlXG4gICAgICAgICAgICAgICAgY29uc3QgaW5wdXQgPSB0aGlzLmdldEVkaXRFbGVtZW50KCk7XG4gICAgICAgICAgICAgICAgaWYgKGlucHV0ICYmICEoZS5ldmVudCAmJiB0aGlzLmlzRHJvcGRvd24pKSB7XG4gICAgICAgICAgICAgICAgICAgIGlucHV0LmZvY3VzKCk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy51cGRhdGVWYWxpZGl0eU9uQmx1cigpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxufVxuIiwiPGlneC1pbnB1dC1ncm91cCBbZGlzcGxheURlbnNpdHldPVwiZGlzcGxheURlbnNpdHlcIiBbdHlwZV09XCJ0eXBlXCI+XG4gICAgPGlucHV0IFtkaXNwbGF5VmFsdWVQaXBlXT1cImZvcm1hdHRlciA/IGRpc3BsYXlWYWx1ZSA6IG51bGxcIiBpZ3hJbnB1dCBbaWd4RGF0ZVRpbWVFZGl0b3JdPVwiaW5wdXRGb3JtYXRcIlxuICAgICAgICB0eXBlPVwidGV4dFwiIFtyZWFkb25seV09XCIhaXNEcm9wZG93biB8fCByZWFkT25seVwiIFttaW5WYWx1ZV09XCJtaW5WYWx1ZVwiIFttYXhWYWx1ZV09XCJtYXhWYWx1ZVwiXG4gICAgICAgIFtsb2NhbGVdPVwibG9jYWxlXCIgW3NwaW5EZWx0YV09XCJpdGVtc0RlbHRhXCIgW3NwaW5Mb29wXT1cInNwaW5Mb29wXCIgW3BsYWNlaG9sZGVyXT1cInBsYWNlaG9sZGVyXCJcbiAgICAgICAgW2Rpc2FibGVkXT1cImRpc2FibGVkXCIgW2Rpc3BsYXlGb3JtYXRdPVwiZGlzcGxheUZvcm1hdFwiXG4gICAgICAgIFtpZ3hUZXh0U2VsZWN0aW9uXT1cImlzRHJvcGRvd24gJiYgIXJlYWRPbmx5XCIgcm9sZT1cImNvbWJvYm94XCIgYXJpYS1oYXNwb3B1cD1cImRpYWxvZ1wiXG4gICAgICAgIFthdHRyLmFyaWEtZXhwYW5kZWRdPVwiIXRvZ2dsZURpcmVjdGl2ZS5jb2xsYXBzZWRcIiBbYXR0ci5hcmlhLWxhYmVsbGVkYnldPVwibGFiZWw/LmlkXCJcbiAgICAgICAgKGNsaWNrKT1cIiFpc0Ryb3Bkb3duICYmIHRvZ2dsZSgpXCIvPlxuXG4gICAgPGlneC1wcmVmaXggKm5nSWY9XCIhdG9nZ2xlQ29tcG9uZW50cy5sZW5ndGhcIiAoY2xpY2spPVwidG9nZ2xlKClcIj5cbiAgICAgICAgPGlneC1pY29uIFt0aXRsZV09XCJ2YWx1ZSA/IHJlc291cmNlU3RyaW5ncy5pZ3hfdGltZV9waWNrZXJfY2hhbmdlX3RpbWUgOiByZXNvdXJjZVN0cmluZ3MuaWd4X3RpbWVfcGlja2VyX2Nob29zZV90aW1lXCI+YWNjZXNzX3RpbWU8L2lneC1pY29uPlxuICAgIDwvaWd4LXByZWZpeD5cblxuICAgIDxuZy1jb250YWluZXIgbmdQcm9qZWN0QXM9XCJbaWd4TGFiZWxdXCI+XG4gICAgICAgIDxuZy1jb250ZW50IHNlbGVjdD1cIltpZ3hMYWJlbF1cIj48L25nLWNvbnRlbnQ+XG4gICAgPC9uZy1jb250YWluZXI+XG4gICAgPG5nLWNvbnRhaW5lciBuZ1Byb2plY3RBcz1cImlneC1wcmVmaXhcIj5cbiAgICAgICAgPG5nLWNvbnRlbnQgc2VsZWN0PVwiaWd4LXByZWZpeCxbaWd4UHJlZml4XVwiPjwvbmctY29udGVudD5cbiAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgIDxpZ3gtc3VmZml4ICpuZ0lmPVwic2hvd0NsZWFyQnV0dG9uXCIgKGNsaWNrKT1cImNsZWFyKCk7ICRldmVudC5zdG9wUHJvcGFnYXRpb24oKVwiPlxuICAgICAgICA8aWd4LWljb24+Y2xlYXI8L2lneC1pY29uPlxuICAgIDwvaWd4LXN1ZmZpeD5cblxuICAgIDxuZy1jb250YWluZXIgbmdQcm9qZWN0QXM9XCJpZ3gtc3VmZml4XCI+XG4gICAgICAgIDxuZy1jb250ZW50IHNlbGVjdD1cImlneC1zdWZmaXgsW2lneFN1ZmZpeF1cIj48L25nLWNvbnRlbnQ+XG4gICAgPC9uZy1jb250YWluZXI+XG4gICAgPG5nLWNvbnRhaW5lciBuZ1Byb2plY3RBcz1cImlneC1oaW50XCI+XG4gICAgICAgIDxuZy1jb250ZW50IHNlbGVjdD1cImlneC1oaW50LFtpZ3hIaW50XVwiPjwvbmctY29udGVudD5cbiAgICA8L25nLWNvbnRhaW5lcj5cbjwvaWd4LWlucHV0LWdyb3VwPlxuXG48bmctdGVtcGxhdGUgI2RlZmF1bHRUaW1lUGlja2VyQWN0aW9ucz5cbiAgICA8ZGl2ICpuZ0lmPVwiY2FuY2VsQnV0dG9uTGFiZWwgfHwgb2tCdXR0b25MYWJlbFwiIGNsYXNzPVwiaWd4LXRpbWUtcGlja2VyX19idXR0b25zXCI+XG4gICAgICAgIDxidXR0b24gKm5nSWY9XCJjYW5jZWxCdXR0b25MYWJlbFwiIHR5cGU9XCJidXR0b25cIiBpZ3hCdXR0b249XCJmbGF0XCIgKGNsaWNrKT1cImNhbmNlbEJ1dHRvbkNsaWNrKClcIj5cbiAgICAgICAgICAgIHt7Y2FuY2VsQnV0dG9uTGFiZWx9fVxuICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgPGJ1dHRvbiAqbmdJZj1cIm9rQnV0dG9uTGFiZWxcIiB0eXBlPVwiYnV0dG9uXCIgaWd4QnV0dG9uPVwiZmxhdFwiIChjbGljayk9XCJva0J1dHRvbkNsaWNrKClcIj5cbiAgICAgICAgICAgIHt7b2tCdXR0b25MYWJlbH19XG4gICAgICAgIDwvYnV0dG9uPlxuICAgIDwvZGl2PlxuPC9uZy10ZW1wbGF0ZT5cblxuPGRpdiAjdG9nZ2xlRGlyZWN0aXZlPVwidG9nZ2xlXCIgaWd4VG9nZ2xlIHJvbGU9XCJkaWFsb2dcIiBjbGFzcz1cImlneC10aW1lLXBpY2tlclwiXG4gICAgW25nQ2xhc3NdPVwieydpZ3gtdGltZS1waWNrZXItLWRyb3Bkb3duJzogaXNEcm9wZG93biwgJ2lneC10aW1lLXBpY2tlci0tdmVydGljYWwnOiBpc1ZlcnRpY2FsICYmICFpc0Ryb3Bkb3dufVwiPlxuICAgIDxkaXYgKm5nSWY9XCIhaXNEcm9wZG93blwiIGNsYXNzPVwiaWd4LXRpbWUtcGlja2VyX19oZWFkZXJcIj5cbiAgICAgICAgPGgyIGNsYXNzPVwiaWd4LXRpbWUtcGlja2VyX19oZWFkZXItaG91clwiPlxuICAgICAgICAgICAgPHNwYW4+e3sgc2VsZWN0ZWREYXRlIHwgdGltZUZvcm1hdFBpcGUgfX08L3NwYW4+XG4gICAgICAgIDwvaDI+XG4gICAgPC9kaXY+XG4gICAgPGRpdiBjbGFzcz1cImlneC10aW1lLXBpY2tlcl9fbWFpblwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiaWd4LXRpbWUtcGlja2VyX19ib2R5XCI+XG4gICAgICAgICAgICA8ZGl2ICpuZ0lmPVwic2hvd0hvdXJzTGlzdFwiICNob3VyTGlzdCBbaWd4SXRlbUxpc3RdPVwiJ2hvdXJMaXN0J1wiPlxuICAgICAgICAgICAgICAgIDxzcGFuIFtpZ3hUaW1lSXRlbV09XCJob3VyXCIgI3RpbWVJdGVtPVwidGltZUl0ZW1cIiBhcmlhLWxhYmVsPVwiaG91clwiXG4gICAgICAgICAgICAgICAgICAgIFthdHRyLnJvbGVdPVwidGltZUl0ZW0uaXNTZWxlY3RlZFRpbWUgPyAnc3BpbmJ1dHRvbicgOiBudWxsXCJcbiAgICAgICAgICAgICAgICAgICAgW2F0dHIuYXJpYS12YWx1ZW5vd109XCJ0aW1lSXRlbS5pc1NlbGVjdGVkVGltZSA/IHRpbWVJdGVtLmhvdXJWYWx1ZSA6IG51bGxcIlxuICAgICAgICAgICAgICAgICAgICBbYXR0ci5hcmlhLXZhbHVlbWluXT1cInRpbWVJdGVtLmlzU2VsZWN0ZWRUaW1lID8gdGltZUl0ZW0ubWluVmFsdWUgOiBudWxsXCJcbiAgICAgICAgICAgICAgICAgICAgW2F0dHIuYXJpYS12YWx1ZW1heF09XCJ0aW1lSXRlbS5pc1NlbGVjdGVkVGltZSA/IHRpbWVJdGVtLm1heFZhbHVlIDogbnVsbFwiXG4gICAgICAgICAgICAgICAgICAgICpuZ0Zvcj1cImxldCBob3VyIG9mIGhvdXJJdGVtcyB8IHRpbWVJdGVtUGlwZTonaG91cic6c2VsZWN0ZWREYXRlOm1pbkRyb3Bkb3duVmFsdWU6bWF4RHJvcGRvd25WYWx1ZVwiPnt7IGhvdXIgfX08L3NwYW4+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJzaG93TWludXRlc0xpc3RcIiAjbWludXRlTGlzdCBbaWd4SXRlbUxpc3RdPVwiJ21pbnV0ZUxpc3QnXCI+XG4gICAgICAgICAgICAgICAgPHNwYW4gW2lneFRpbWVJdGVtXT1cIm1pbnV0ZVwiICN0aW1lSXRlbT1cInRpbWVJdGVtXCIgYXJpYS1sYWJlbD1cIm1pbnV0ZXNcIlxuICAgICAgICAgICAgICAgICAgICBbYXR0ci5yb2xlXT1cInRpbWVJdGVtLmlzU2VsZWN0ZWRUaW1lID8gJ3NwaW5idXR0b24nIDogbnVsbFwiXG4gICAgICAgICAgICAgICAgICAgIFthdHRyLmFyaWEtdmFsdWVub3ddPVwidGltZUl0ZW0uaXNTZWxlY3RlZFRpbWUgPyBtaW51dGUgOiBudWxsXCJcbiAgICAgICAgICAgICAgICAgICAgW2F0dHIuYXJpYS12YWx1ZW1pbl09XCJ0aW1lSXRlbS5pc1NlbGVjdGVkVGltZSA/IHRpbWVJdGVtLm1pblZhbHVlIDogbnVsbFwiXG4gICAgICAgICAgICAgICAgICAgIFthdHRyLmFyaWEtdmFsdWVtYXhdPVwidGltZUl0ZW0uaXNTZWxlY3RlZFRpbWUgPyB0aW1lSXRlbS5tYXhWYWx1ZSA6IG51bGxcIlxuICAgICAgICAgICAgICAgICAgICAqbmdGb3I9XCJsZXQgbWludXRlIG9mIG1pbnV0ZUl0ZW1zIHwgdGltZUl0ZW1QaXBlOidtaW51dGVzJzpzZWxlY3RlZERhdGU6bWluRHJvcGRvd25WYWx1ZTptYXhEcm9wZG93blZhbHVlXCI+e3sgbWludXRlIH19PC9zcGFuPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2ICpuZ0lmPVwic2hvd1NlY29uZHNMaXN0XCIgI3NlY29uZHNMaXN0IFtpZ3hJdGVtTGlzdF09XCInc2Vjb25kc0xpc3QnXCI+XG4gICAgICAgICAgICAgICAgPHNwYW4gW2lneFRpbWVJdGVtXT1cInNlY29uZHNcIiAjdGltZUl0ZW09XCJ0aW1lSXRlbVwiIGFyaWEtbGFiZWw9XCJzZWNvbmRzXCJcbiAgICAgICAgICAgICAgICAgICAgW2F0dHIucm9sZV09XCJ0aW1lSXRlbS5pc1NlbGVjdGVkVGltZSA/ICdzcGluYnV0dG9uJyA6IG51bGxcIlxuICAgICAgICAgICAgICAgICAgICBbYXR0ci5hcmlhLXZhbHVlbm93XT1cInRpbWVJdGVtLmlzU2VsZWN0ZWRUaW1lID8gc2Vjb25kcyA6IG51bGxcIlxuICAgICAgICAgICAgICAgICAgICBbYXR0ci5hcmlhLXZhbHVlbWluXT1cInRpbWVJdGVtLmlzU2VsZWN0ZWRUaW1lID8gdGltZUl0ZW0ubWluVmFsdWUgOiBudWxsXCJcbiAgICAgICAgICAgICAgICAgICAgW2F0dHIuYXJpYS12YWx1ZW1heF09XCJ0aW1lSXRlbS5pc1NlbGVjdGVkVGltZSA/IHRpbWVJdGVtLm1heFZhbHVlIDogbnVsbFwiXG4gICAgICAgICAgICAgICAgICAgICpuZ0Zvcj1cImxldCBzZWNvbmRzIG9mIHNlY29uZHNJdGVtcyB8IHRpbWVJdGVtUGlwZTonc2Vjb25kcyc6c2VsZWN0ZWREYXRlOm1pbkRyb3Bkb3duVmFsdWU6bWF4RHJvcGRvd25WYWx1ZVwiPnt7IHNlY29uZHMgfX08L3NwYW4+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJzaG93QW1QbUxpc3RcIiAjYW1wbUxpc3QgW2lneEl0ZW1MaXN0XT1cIidhbXBtTGlzdCdcIj5cbiAgICAgICAgICAgICAgICA8c3BhbiBbaWd4VGltZUl0ZW1dPVwiYW1wbVwiICN0aW1lSXRlbT1cInRpbWVJdGVtXCIgYXJpYS1sYWJlbD1cImFtcG1cIlxuICAgICAgICAgICAgICAgICAgICBbYXR0ci5yb2xlXT1cInRpbWVJdGVtLmlzU2VsZWN0ZWRUaW1lID8gJ3NwaW5idXR0b24nIDogbnVsbFwiXG4gICAgICAgICAgICAgICAgICAgIFthdHRyLmFyaWEtdmFsdWVub3ddPVwidGltZUl0ZW0uaXNTZWxlY3RlZFRpbWUgPyBhbXBtIDogbnVsbFwiXG4gICAgICAgICAgICAgICAgICAgIFthdHRyLmFyaWEtdmFsdWVtaW5dPVwidGltZUl0ZW0uaXNTZWxlY3RlZFRpbWUgPyB0aW1lSXRlbS5taW5WYWx1ZSA6IG51bGxcIlxuICAgICAgICAgICAgICAgICAgICBbYXR0ci5hcmlhLXZhbHVlbWF4XT1cInRpbWVJdGVtLmlzU2VsZWN0ZWRUaW1lID8gdGltZUl0ZW0ubWF4VmFsdWUgOiBudWxsXCJcbiAgICAgICAgICAgICAgICAgICAgKm5nRm9yPVwibGV0IGFtcG0gb2YgYW1wbUl0ZW1zIHwgdGltZUl0ZW1QaXBlOidhbXBtJzpzZWxlY3RlZERhdGU6bWluRHJvcGRvd25WYWx1ZTptYXhEcm9wZG93blZhbHVlXCI+e3sgYW1wbSB9fTwvc3Bhbj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJ0aW1lUGlja2VyQWN0aW9uc0RpcmVjdGl2ZSA/IHRpbWVQaWNrZXJBY3Rpb25zRGlyZWN0aXZlLnRlbXBsYXRlIDogZGVmYXVsdFRpbWVQaWNrZXJBY3Rpb25zXCI+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgIDwvZGl2PlxuPC9kaXY+XG4iXX0=