ids-enterprise-ng 13.5.1 → 13.5.2

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.
@@ -357,10 +357,10 @@ SohoButtonComponent.FAVORITE = 'favorite';
357
357
  SohoButtonComponent.MODAL = 'modal';
358
358
  SohoButtonComponent.MODAL_PRIMARY = 'modal-primary';
359
359
  SohoButtonComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.4", ngImport: i0, type: SohoButtonComponent, deps: [{ token: i0.ElementRef }, { token: i0.NgZone }], target: i0.ɵɵFactoryTarget.Component });
360
- SohoButtonComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.4", type: SohoButtonComponent, selector: "button[soho-button]", inputs: { sohoButton: ["soho-button", "sohoButton"], buttonOptions: "buttonOptions", toggleOnIcon: "toggleOnIcon", toggleOffIcon: "toggleOffIcon", replaceText: "replaceText", hideMenuArrow: "hideMenuArrow", hitbox: "hitbox", notificationBadge: "notificationBadge", notificationBadgeOptions: "notificationBadgeOptions", extraIconClass: "extraIconClass", isToggle: "isToggle", isTogglePressed: "isTogglePressed", icon: "icon", isSubmit: "isSubmit", ripple: "ripple", state: "state", toggle: "toggle", expandableExpander: "expandableExpander", moveToLeft: "moveToLeft", moveToRight: "moveToRight", moveToSelected: "moveToSelected" }, host: { listeners: { "click": "toggleState()" }, properties: { "class.btn": "this.btn", "class.btn-primary": "this.btnPrimary", "class.btn-secondary": "this.btnSecondary", "class.btn-tertiary": "this.btnTertiary", "class.btn-icon": "this.btnIcon", "class.btn-toggle": "this.btnToggle", "class.btn-modal": "this.btnModal", "class.btn-modal-primary": "this.btnModalPrimary", "class.is-pressed": "this.btnTogglePressed", "class.icon-favorite": "this.iconFavorite", "class.btn-moveto-left": "this.moveToLeft", "class.btn-moveto-right": "this.moveToRight", "class.btn-moveto-selected": "this.moveToSelected", "class.no-ripple": "this.noRipple", "attr.type": "this.type", "class.expandable-expander": "this.isExpandableExpander", "attr.aria-pressed": "this.ariaPressed" } }, ngImport: i0, template: "<svg soho-icon *ngIf=\"hasIcon\" [icon]=\"currentIcon\" [extraIconClass]=\"extraIconClass\"></svg>\n<span>\n <ng-content></ng-content>\n</span>\n<ng-content select=\"div.disabled-tooltip\"></ng-content>\n", components: [{ type: i1.SohoIconComponent, selector: "svg[soho-icon]", inputs: ["isEmptyState", "extraIconClass", "alert", "icon"] }], directives: [{ type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
360
+ SohoButtonComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.4", type: SohoButtonComponent, selector: "button[soho-button]", inputs: { sohoButton: ["soho-button", "sohoButton"], buttonOptions: "buttonOptions", toggleOnIcon: "toggleOnIcon", toggleOffIcon: "toggleOffIcon", replaceText: "replaceText", hideMenuArrow: "hideMenuArrow", hitbox: "hitbox", notificationBadge: "notificationBadge", notificationBadgeOptions: "notificationBadgeOptions", extraIconClass: "extraIconClass", isToggle: "isToggle", isTogglePressed: "isTogglePressed", icon: "icon", isSubmit: "isSubmit", ripple: "ripple", state: "state", toggle: "toggle", expandableExpander: "expandableExpander", moveToLeft: "moveToLeft", moveToRight: "moveToRight", moveToSelected: "moveToSelected" }, host: { listeners: { "click": "toggleState()" }, properties: { "class.btn": "this.btn", "class.btn-primary": "this.btnPrimary", "class.btn-secondary": "this.btnSecondary", "class.btn-tertiary": "this.btnTertiary", "class.btn-icon": "this.btnIcon", "class.btn-toggle": "this.btnToggle", "class.btn-modal": "this.btnModal", "class.btn-modal-primary": "this.btnModalPrimary", "class.is-pressed": "this.btnTogglePressed", "class.icon-favorite": "this.iconFavorite", "class.btn-moveto-left": "this.moveToLeft", "class.btn-moveto-right": "this.moveToRight", "class.btn-moveto-selected": "this.moveToSelected", "class.no-ripple": "this.noRipple", "attr.type": "this.type", "class.expandable-expander": "this.isExpandableExpander", "attr.aria-pressed": "this.ariaPressed" } }, ngImport: i0, template: "<span>\n <ng-content></ng-content>\n</span>\n<svg soho-icon *ngIf=\"hasIcon\" [icon]=\"currentIcon\" [extraIconClass]=\"extraIconClass\"></svg>\n<ng-content select=\"div.disabled-tooltip\"></ng-content>\n", components: [{ type: i1.SohoIconComponent, selector: "svg[soho-icon]", inputs: ["isEmptyState", "extraIconClass", "alert", "icon"] }], directives: [{ type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
361
361
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.4", ngImport: i0, type: SohoButtonComponent, decorators: [{
362
362
  type: Component,
363
- args: [{ selector: 'button[soho-button]', changeDetection: ChangeDetectionStrategy.OnPush, template: "<svg soho-icon *ngIf=\"hasIcon\" [icon]=\"currentIcon\" [extraIconClass]=\"extraIconClass\"></svg>\n<span>\n <ng-content></ng-content>\n</span>\n<ng-content select=\"div.disabled-tooltip\"></ng-content>\n" }]
363
+ args: [{ selector: 'button[soho-button]', changeDetection: ChangeDetectionStrategy.OnPush, template: "<span>\n <ng-content></ng-content>\n</span>\n<svg soho-icon *ngIf=\"hasIcon\" [icon]=\"currentIcon\" [extraIconClass]=\"extraIconClass\"></svg>\n<ng-content select=\"div.disabled-tooltip\"></ng-content>\n" }]
364
364
  }], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: i0.NgZone }]; }, propDecorators: { sohoButton: [{
365
365
  type: Input,
366
366
  args: ['soho-button']
@@ -459,4 +459,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.4", ngImpor
459
459
  type: HostBinding,
460
460
  args: ['attr.aria-pressed']
461
461
  }] } });
462
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic29oby1idXR0b24uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvaWRzLWVudGVycHJpc2Utbmcvc3JjL2xpYi9idXR0b24vc29oby1idXR0b24uY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvaWRzLWVudGVycHJpc2Utbmcvc3JjL2xpYi9idXR0b24vc29oby1idXR0b24uY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUVMLHVCQUF1QixFQUN2QixTQUFTLEVBRVQsV0FBVyxFQUNYLFlBQVksRUFDWixLQUFLLEdBSU4sTUFBTSxlQUFlLENBQUM7QUFFdkIsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLDBCQUEwQixDQUFDOzs7O0FBWTFELE1BQU0sT0FBTyxtQkFBbUI7SUErUTlCOzs7O09BSUc7SUFDSCxZQUFvQixPQUFtQixFQUFVLE1BQWM7UUFBM0MsWUFBTyxHQUFQLE9BQU8sQ0FBWTtRQUFVLFdBQU0sR0FBTixNQUFNLENBQVE7UUF4UHZELG1CQUFjLEdBQXNCLEVBQUUsQ0FBQztRQUN2QyxjQUFTLEdBQUcsS0FBSyxDQUFDO1FBQ2xCLHFCQUFnQixHQUFHLEtBQUssQ0FBQztRQUN6QixlQUFVLEdBQUcsS0FBSyxDQUFDO1FBd0kzQixrREFBa0Q7UUFDekMsYUFBUSxHQUFHLEtBQUssQ0FBQztRQUUxQixvRUFBb0U7UUFDM0QsV0FBTSxHQUFHLElBQUksQ0FBQztRQWtCdkI7Ozs7V0FJRztRQUNNLHVCQUFrQixHQUFHLEtBQUssQ0FBQztJQW1GcEMsQ0FBQztJQXBQRDs7OztPQUlHO0lBQ0gsMkRBQTJEO0lBQzNELElBQTBCLFVBQVUsQ0FBQyxJQUFvQjtRQUN2RCxJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxtQkFBbUIsQ0FBQyxTQUFTLENBQUM7SUFD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QkFBa0I7Z0JBSVMsWUFBWTtzQkFBbkQsV0FBVzt1QkFBQyxxQkFBcUI7Z0JBSWEsVUFBVTtzQkFBeEQsV0FBVzt1QkFBQyx1QkFBdUI7O3NCQUFHLEtBQUs7Z0JBQ0ksV0FBVztzQkFBMUQsV0FBVzt1QkFBQyx3QkFBd0I7O3NCQUFHLEtBQUs7Z0JBQ00sY0FBYztzQkFBaEUsV0FBVzt1QkFBQywyQkFBMkI7O3NCQUFHLEtBQUs7Z0JBRzVDLFFBQVE7c0JBRFgsV0FBVzt1QkFBQyxpQkFBaUI7Z0JBS0EsSUFBSTtzQkFBakMsV0FBVzt1QkFBQyxXQUFXO2dCQUlzQixvQkFBb0I7c0JBQWpFLFdBQVc7dUJBQUMsMkJBQTJCO2dCQU9qQixXQUFXO3NCQUFqQyxZQUFZO3VCQUFDLE9BQU87Z0JBTWlCLFdBQVc7c0JBQWhELFdBQVc7dUJBQUMsbUJBQW1CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQWZ0ZXJWaWV3SW5pdCxcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gIENvbXBvbmVudCxcbiAgRWxlbWVudFJlZixcbiAgSG9zdEJpbmRpbmcsXG4gIEhvc3RMaXN0ZW5lcixcbiAgSW5wdXQsXG4gIE5nWm9uZSxcbiAgT25EZXN0cm95LFxuICBPbkluaXQsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5pbXBvcnQgeyBBcmd1bWVudEhlbHBlciB9IGZyb20gJy4uL3V0aWxzL2FyZ3VtZW50LmhlbHBlcic7XG5cbi8qKlxuICogU3VwcG9ydGVkIGJ1dHRvbiB0eXBlcy5cbiAqL1xuZXhwb3J0IHR5cGUgU29ob0J1dHRvblR5cGUgPSAnYnRuJyB8ICdwcmltYXJ5JyB8ICdzZWNvbmRhcnknIHwgJ3RlcnRpYXJ5JyB8ICdpY29uJyB8ICdmYXZvcml0ZScgfCAnbW9kYWwnIHwgJ21vZGFsLXByaW1hcnknO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdidXR0b25bc29oby1idXR0b25dJywgLy8gZXNsaW50LWRpc2FibGUtbGluZVxuICB0ZW1wbGF0ZVVybDogJ3NvaG8tYnV0dG9uLmNvbXBvbmVudC5odG1sJyxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2hcbn0pXG5leHBvcnQgY2xhc3MgU29ob0J1dHRvbkNvbXBvbmVudCBpbXBsZW1lbnRzIEFmdGVyVmlld0luaXQsIE9uRGVzdHJveSwgT25Jbml0IHtcblxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gIC8vIFN1cHBvcnRlZCBidXR0b24gdHlwZXMuXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuICBzdGF0aWMgQlROOiBTb2hvQnV0dG9uVHlwZSA9ICdidG4nO1xuICBzdGF0aWMgUFJJTUFSWTogU29ob0J1dHRvblR5cGUgPSAncHJpbWFyeSc7XG4gIHN0YXRpYyBTRUNPTkRBUlk6IFNvaG9CdXR0b25UeXBlID0gJ3NlY29uZGFyeSc7XG4gIHN0YXRpYyBURVJUSUFSWTogU29ob0J1dHRvblR5cGUgPSAndGVydGlhcnknO1xuICBzdGF0aWMgSUNPTjogU29ob0J1dHRvblR5cGUgPSAnaWNvbic7XG4gIHN0YXRpYyBGQVZPUklURTogU29ob0J1dHRvblR5cGUgPSAnZmF2b3JpdGUnO1xuICBzdGF0aWMgTU9EQUw6IFNvaG9CdXR0b25UeXBlID0gJ21vZGFsJztcbiAgc3RhdGljIE1PREFMX1BSSU1BUlk6IFNvaG9CdXR0b25UeXBlID0gJ21vZGFsLXByaW1hcnknO1xuXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgLy8gUHJpdmF0ZSBNZW1iZXIgRGF0YVxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbiAgLyoqIFJlZmVyZW5jZSB0byB0aGUgalF1ZXJ5IGNvbnRyb2wuICovXG4gIHByaXZhdGUgalF1ZXJ5RWxlbWVudD86IEpRdWVyeTtcblxuICAvKiogUmVmZXJlbmNlIHRvIHRoZSBTb2hvIGNvbnRyb2wgYXBpLiAqL1xuICBwcml2YXRlIGJ1dHRvbj86IFNvaG9CdXR0b25TdGF0aWMgfCBudWxsO1xuXG4gIC8qKiBUaGUgdHlwZSBvZiB0aGUgYnV0dG9uLiAqL1xuICBwcml2YXRlIGJ1dHRvblR5cGU/OiBTb2hvQnV0dG9uVHlwZTtcblxuICBwcml2YXRlIF9idXR0b25PcHRpb25zOiBTb2hvQnV0dG9uT3B0aW9ucyA9IHt9O1xuICBwcml2YXRlIF9pc1RvZ2dsZSA9IGZhbHNlO1xuICBwcml2YXRlIF9pc1RvZ2dsZVByZXNzZWQgPSBmYWxzZTtcbiAgcHJpdmF0ZSBfaXNQcmVzc2VkID0gZmFsc2U7XG5cbiAgLyoqXG4gICAqIFRoZSB0eXBlIG9mIHRoZSBidXR0b24sIGRlZmF1bHRpbmcgdG8gJ3NlY29uZGFyeScuXG4gICAqXG4gICAqIEFsbG93IG92ZXJyaWRlIG9mIGlucHV0LCB0byBtYXRjaCBjb21wb25lbnQgc2VsZWN0b3IuXG4gICAqL1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQGFuZ3VsYXItZXNsaW50L25vLWlucHV0LXJlbmFtZVxuICBASW5wdXQoJ3NvaG8tYnV0dG9uJykgc2V0IHNvaG9CdXR0b24odHlwZTogU29ob0J1dHRvblR5cGUpIHtcbiAgICB0aGlzLmJ1dHRvblR5cGUgPSB0eXBlID8gdHlwZSA6IFNvaG9CdXR0b25Db21wb25lbnQuU0VDT05EQVJZO1xuICB9XG5cbiAgLyoqXG4gICAqIFNldHMgdGhlIGJ1dHRvbiBvcHRpb25zXG4gICAqL1xuICBASW5wdXQoKSBzZXQgYnV0dG9uT3B0aW9ucyhidXR0b25PcHRpb25zOiBTb2hvQnV0dG9uT3B0aW9ucykge1xuICAgIEFyZ3VtZW50SGVscGVyLmNoZWNrTm90TnVsbCgnYnV0dG9uT3B0aW9ucycsIGJ1dHRvbk9wdGlvbnMpO1xuXG4gICAgdGhpcy5fYnV0dG9uT3B0aW9ucyA9IGJ1dHRvbk9wdGlvbnM7XG4gICAgaWYgKHRoaXMuYnV0dG9uKSB7XG4gICAgICAvLyB0b2RvOiBob3cgdG8gdXBkYXRlIHRoZSBidXR0b24gd2hlbiBvcHRpb25zIGNoYW5nZT9cbiAgICB9XG4gIH1cbiAgZ2V0IGJ1dHRvbk9wdGlvbnMoKTogU29ob0J1dHRvbk9wdGlvbnMge1xuICAgIHJldHVybiB0aGlzLl9idXR0b25PcHRpb25zO1xuICB9XG5cbiAgQElucHV0KCkgc2V0IHRvZ2dsZU9uSWNvbih0b2dnbGVPbkljb246IHN0cmluZykge1xuICAgIHRoaXMuX2J1dHRvbk9wdGlvbnMudG9nZ2xlT25JY29uID0gdG9nZ2xlT25JY29uO1xuICAgIGlmICh0aGlzLmpRdWVyeUVsZW1lbnQpIHtcbiAgICAgIC8vIHRvZG86IGhvdyB0byB1cGRhdGUgdGhlIGJ1dHRvbiB3aGVuIHRvZ2dsZU9uSWNvbiBjaGFuZ2VzP1xuICAgIH1cbiAgfVxuXG4gIEBJbnB1dCgpIHNldCB0b2dnbGVPZmZJY29uKHRvZ2dsZU9mZkljb246IHN0cmluZykge1xuICAgIHRoaXMuX2J1dHRvbk9wdGlvbnMudG9nZ2xlT2ZmSWNvbiA9IHRvZ2dsZU9mZkljb247XG4gICAgaWYgKHRoaXMualF1ZXJ5RWxlbWVudCkge1xuICAgICAgLy8gdG9kbzogaG93IHRvIHVwZGF0ZSB0aGUgYnV0dG9uIHdoZW4gdG9nZ2xlT2ZmSWNvbiBjaGFuZ2VzP1xuICAgIH1cbiAgfVxuXG4gIEBJbnB1dCgpIHNldCByZXBsYWNlVGV4dChyZXBsYWNlVGV4dDogYm9vbGVhbikge1xuICAgIHRoaXMuX2J1dHRvbk9wdGlvbnMucmVwbGFjZVRleHQgPSByZXBsYWNlVGV4dDtcbiAgICBpZiAodGhpcy5qUXVlcnlFbGVtZW50KSB7XG4gICAgICAoKHRoaXMuYnV0dG9uIGFzIGFueSkuc2V0dGluZ3MgYXMgYW55KS5yZXBsYWNlVGV4dCA9IHJlcGxhY2VUZXh0O1xuICAgIH1cbiAgfVxuXG4gIEBJbnB1dCgpIHNldCBoaWRlTWVudUFycm93KHZhbHVlOiBib29sZWFuIHwgdW5kZWZpbmVkKSB7XG4gICAgdGhpcy5fYnV0dG9uT3B0aW9ucy5oaWRlTWVudUFycm93ID0gdmFsdWU7XG4gICAgaWYgKHRoaXMuYnV0dG9uKSB7XG4gICAgICB0aGlzLmJ1dHRvbi5zZXR0aW5ncy5oaWRlTWVudUFycm93ID0gdmFsdWU7XG4gICAgfVxuICB9XG5cbiAgZ2V0IGhpZGVNZW51QXJyb3coKTogYm9vbGVhbiB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuX2J1dHRvbk9wdGlvbnMuaGlkZU1lbnVBcnJvdztcbiAgfVxuXG4gIC8qKlxuICAgKiBVc2VkIHRvIGFkZCBhIGJpZ2dlciBoaXQgYXJlYSAoZm9yIG1vYmlsZSlcbiAgICovXG4gIEBJbnB1dCgpIHNldCBoaXRib3godmFsdWU6IGJvb2xlYW4gfCB1bmRlZmluZWQpIHtcbiAgICB0aGlzLl9idXR0b25PcHRpb25zLmhpdGJveCA9IHZhbHVlO1xuICAgIGlmICh0aGlzLmJ1dHRvbikge1xuICAgICAgdGhpcy5idXR0b24uc2V0dGluZ3MuaGl0Ym94ID0gdmFsdWU7XG4gICAgfVxuICB9XG5cbiAgZ2V0IGhpdGJveCgpOiBib29sZWFuIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy5fYnV0dG9uT3B0aW9ucy5oaXRib3g7XG4gIH1cblxuICAvKipcbiAgICogVXNlZCB0byBzZXQgYSBub3RpZmljYXRpb24gYmFkZ2Ugb24gdGhlIGJ1dHRvblxuICAgKi9cbiAgQElucHV0KCkgc2V0IG5vdGlmaWNhdGlvbkJhZGdlKHZhbHVlOiBib29sZWFuIHwgdW5kZWZpbmVkKSB7XG4gICAgdGhpcy5fYnV0dG9uT3B0aW9ucy5ub3RpZmljYXRpb25CYWRnZSA9IHZhbHVlO1xuICAgIGlmICh0aGlzLmJ1dHRvbikge1xuICAgICAgdGhpcy5idXR0b24uc2V0dGluZ3Mubm90aWZpY2F0aW9uQmFkZ2UgPSB2YWx1ZTtcbiAgICB9XG4gIH1cblxuICBnZXQgbm90aWZpY2F0aW9uQmFkZ2UoKTogYm9vbGVhbiB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuX2J1dHRvbk9wdGlvbnMubm90aWZpY2F0aW9uQmFkZ2U7XG4gIH1cblxuICAvKipcbiAgICogU2V0IHRoZSBwb3NpdGlvbiBhbmQgY29sb3Igb2YgdGhlIG5vdGlmaWNhdGlvbiBiYWRnZSBvbiB0aGUgYnV0dG9uXG4gICAqL1xuICBASW5wdXQoKSBzZXQgbm90aWZpY2F0aW9uQmFkZ2VPcHRpb25zKHZhbHVlOiBTb2hvTm90aWZpY2F0aW9uQmFkZ2VPcHRpb25zIHwgdW5kZWZpbmVkKSB7XG4gICAgdGhpcy5fYnV0dG9uT3B0aW9ucy5ub3RpZmljYXRpb25CYWRnZU9wdGlvbnMgPSB2YWx1ZTtcbiAgICBpZiAodGhpcy5idXR0b24pIHtcbiAgICAgIHRoaXMuYnV0dG9uLnNldHRpbmdzLm5vdGlmaWNhdGlvbkJhZGdlT3B0aW9ucyA9IHZhbHVlO1xuICAgIH1cbiAgfVxuXG4gIGdldCBub3RpZmljYXRpb25CYWRnZU9wdGlvbnMoKTogU29ob05vdGlmaWNhdGlvbkJhZGdlT3B0aW9ucyB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuX2J1dHRvbk9wdGlvbnMubm90aWZpY2F0aW9uQmFkZ2VPcHRpb25zO1xuICB9XG5cbiAgLyoqXG4gICAqIFVzZWQgdG8gc2V0IGFuIGV4dHJhIGNsYXNzIG9uIHRoZSBzb2hvLWljb24gYmVpbmcgdXNlZCBieSBzb2hvLWJ1dHRvbi5cbiAgICogVXNlZnVsIHRvIHNldCBlbWVyYWxkMDYtY29sb3IgYXp1cmUxMC1jb2xvciB0byBjaGFuZ2UgdGhlIGljb24gY29sb3IuXG4gICAqL1xuICBASW5wdXQoKSBleHRyYUljb25DbGFzcz86IHN0cmluZztcblxuICAvKipcbiAgICogV2hldGhlciB0aGlzIGJ1dHRvbiBzaG91bGQgYmUgYSB0b2dnbGUgYnV0dG9uIG9yIG5vdC4gQWx0ZXJuYXRlIHRvZ2dsZSBvbi9vZmYgaWNvbnNcbiAgICogY2FuIGJlIHVzZWQgdGhyb3VnaCB0b2dnbGVPbkljb24vdG9nZ2xlT2ZmSWNvbiBpbnB1dHMuXG4gICAqL1xuICBASW5wdXQoKSBzZXQgaXNUb2dnbGUoaXNUb2dnbGU6IGJvb2xlYW4pIHtcbiAgICB0aGlzLl9pc1RvZ2dsZSA9IGlzVG9nZ2xlO1xuICB9XG5cbiAgZ2V0IGlzVG9nZ2xlKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLl9pc1RvZ2dsZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRoZSB0b2dnbGUgYnV0dG9uIHNob3VsZCBiZSBpbiBhIHByZXNzZWQgc3RhdGUgb3Igbm90LlxuICAgKi9cbiAgQElucHV0KCkgc2V0IGlzVG9nZ2xlUHJlc3NlZChpc1RvZ2dsZVByZXNzZWQ6IGJvb2xlYW4pIHtcbiAgICB0aGlzLl9pc1RvZ2dsZVByZXNzZWQgPSBpc1RvZ2dsZVByZXNzZWQ7XG4gIH1cblxuICBnZXQgaXNUb2dnbGVQcmVzc2VkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLl9pc1RvZ2dsZVByZXNzZWQ7XG4gIH1cblxuICAvKipcbiAgICogVGhlIGljb24gdG8gYmUgdXNlZFxuICAgKiAgLSBzaG93cyB3aGVuIHRoZSBzdGF0ZSBpcyB0cnVlIGlmIHRvZ2dsZSBoYXMgYSB2YWx1ZVxuICAgKi9cbiAgQElucHV0KCkgaWNvbj86IHN0cmluZztcblxuICAvKiogU2V0cyB0aGUgYnV0dG9uIHR5cGUgdG8gJ3N1Ym1pdCcgd2hlbiB0cnVlLiAqL1xuICBASW5wdXQoKSBpc1N1Ym1pdCA9IGZhbHNlO1xuXG4gIC8qKiBTZXRzIHdoZXRoZXIgdGhlIGJ1dHRvbiBzaG91bGQgaGF2ZSBhIHJpcHBsZSBlZmZlY3Qgb24gY2xpY2suICovXG4gIEBJbnB1dCgpIHJpcHBsZSA9IHRydWU7XG5cbiAgLyoqXG4gICAqIEJpbmFyeSBzdGF0ZSAodG9nZ2xlKTpcbiAgICogIDAgLSBzaG93cyB0b2dnbGVcbiAgICogIDEgLSBzaG93cyBpY29uIChkZWZhdWx0KVxuICAgKlxuICAgKiAgQGRlcHJlY2F0ZWQgdXNlIGlzVG9nZ2xlPXRydWUgaW5wdXQgaW5zdGVhZCBhbG9uZyB3aXRoIHRvZ2dsZU9uSWNvbi90b2dnbGVPZmZJY29uIG9wdGlvbnNcbiAgICovXG4gIEBJbnB1dCgpIHN0YXRlPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogVGhlIGljb24gdG8gYmUgdXNlZCB3aGVuIHRoZSBzdGF0ZSBpcyBmYWxzZS5cbiAgICpcbiAgICogQGRlcHJlY2F0ZWQgdXNlIGlzVG9nZ2xlPXRydWUgaW5wdXQgaW5zdGVhZCBhbG9uZyB3aXRoIHRvZ2dsZU9uSWNvbi90b2dnbGVPZmZJY29uIG9wdGlvbnNcbiAgICovXG4gIEBJbnB1dCgpIHRvZ2dsZT86IHN0cmluZztcblxuICAvKipcbiAgICogU2V0cyB0aGUgZXhwYW5kYWJsZS1leHBhbmRlciBjbGFzcyB0byBiZSBwbGFjZWQgb24gdGhlIGJ1dHRvbiBmb3IgdGhlXG4gICAqIHNvaG8tZXhwYW5kYWJsZWFyZWEgdG8gdXNlIGFzIGl0J3MgZXhwYW5kL2NvbGxhcHNlIHRyaWdnZXJcbiAgICpcbiAgICovXG4gIEBJbnB1dCgpIGV4cGFuZGFibGVFeHBhbmRlciA9IGZhbHNlO1xuXG4gIEBIb3N0QmluZGluZygnY2xhc3MuYnRuJylcbiAgZ2V0IGJ0bigpIHtcbiAgICByZXR1cm4gdGhpcy5idXR0b25UeXBlID09PSBTb2hvQnV0dG9uQ29tcG9uZW50LkJUTjtcbiAgfVxuXG4gIEBIb3N0QmluZGluZygnY2xhc3MuYnRuLXByaW1hcnknKVxuICBnZXQgYnRuUHJpbWFyeSgpIHtcbiAgICByZXR1cm4gdGhpcy5idXR0b25UeXBlID09PSBTb2hvQnV0dG9uQ29tcG9uZW50LlBSSU1BUlk7XG4gIH1cblxuICBASG9zdEJpbmRpbmcoJ2NsYXNzLmJ0bi1zZWNvbmRhcnknKVxuICBnZXQgYnRuU2Vjb25kYXJ5KCkge1xuICAgIHJldHVybiB0aGlzLmJ1dHRvblR5cGUgPT09IFNvaG9CdXR0b25Db21wb25lbnQuU0VDT05EQVJZO1xuICB9XG5cbiAgQEhvc3RCaW5kaW5nKCdjbGFzcy5idG4tdGVydGlhcnknKVxuICBnZXQgYnRuVGVydGlhcnkoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuYnV0dG9uVHlwZSA9PT0gU29ob0J1dHRvbkNvbXBvbmVudC5URVJUSUFSWTtcbiAgfVxuXG4gIEBIb3N0QmluZGluZygnY2xhc3MuYnRuLWljb24nKVxuICBnZXQgYnRuSWNvbigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5idXR0b25UeXBlID09PSBTb2hvQnV0dG9uQ29tcG9uZW50LklDT04gfHwgdGhpcy5idXR0b25UeXBlID09PSBTb2hvQnV0dG9uQ29tcG9uZW50LkZBVk9SSVRFO1xuICB9XG5cbiAgQEhvc3RCaW5kaW5nKCdjbGFzcy5idG4tdG9nZ2xlJykgZ2V0IGJ0blRvZ2dsZSgpIHtcbiAgICByZXR1cm4gdGhpcy5pc1RvZ2dsZTtcbiAgfVxuXG4gIEBIb3N0QmluZGluZygnY2xhc3MuYnRuLW1vZGFsJykgZ2V0IGJ0bk1vZGFsKCkge1xuICAgIHJldHVybiB0aGlzLmJ1dHRvblR5cGUgPT09IFNvaG9CdXR0b25Db21wb25lbnQuTU9EQUw7XG4gIH1cblxuICBASG9zdEJpbmRpbmcoJ2NsYXNzLmJ0bi1tb2RhbC1wcmltYXJ5JykgZ2V0IGJ0bk1vZGFsUHJpbWFyeSgpIHtcbiAgICByZXR1cm4gdGhpcy5idXR0b25UeXBlID09PSBTb2hvQnV0dG9uQ29tcG9uZW50Lk1PREFMX1BSSU1BUlk7XG4gIH1cblxuICBASG9zdEJpbmRpbmcoJ2NsYXNzLmlzLXByZXNzZWQnKSBnZXQgYnRuVG9nZ2xlUHJlc3NlZCgpIHtcbiAgICByZXR1cm4gdGhpcy5pc1RvZ2dsZVByZXNzZWQ7XG4gIH1cblxuICBASG9zdEJpbmRpbmcoJ2NsYXNzLmljb24tZmF2b3JpdGUnKSBnZXQgaWNvbkZhdm9yaXRlKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmJ1dHRvblR5cGUgPT09IFNvaG9CdXR0b25Db21wb25lbnQuRkFWT1JJVEU7XG4gIH1cblxuICBASG9zdEJpbmRpbmcoJ2NsYXNzLmJ0bi1tb3ZldG8tbGVmdCcpIEBJbnB1dCgpIG1vdmVUb0xlZnQ6IGFueTtcbiAgQEhvc3RCaW5kaW5nKCdjbGFzcy5idG4tbW92ZXRvLXJpZ2h0JykgQElucHV0KCkgbW92ZVRvUmlnaHQ6IGFueTtcbiAgQEhvc3RCaW5kaW5nKCdjbGFzcy5idG4tbW92ZXRvLXNlbGVjdGVkJykgQElucHV0KCkgbW92ZVRvU2VsZWN0ZWQ6IGFueTtcblxuICBASG9zdEJpbmRpbmcoJ2NsYXNzLm5vLXJpcHBsZScpXG4gIGdldCBub1JpcHBsZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gIXRoaXMucmlwcGxlO1xuICB9XG5cbiAgQEhvc3RCaW5kaW5nKCdhdHRyLnR5cGUnKSBnZXQgdHlwZSgpIHtcbiAgICByZXR1cm4gdGhpcy5pc1N1Ym1pdCA/ICdzdWJtaXQnIDogJ2J1dHRvbic7XG4gIH1cblxuICBASG9zdEJpbmRpbmcoJ2NsYXNzLmV4cGFuZGFibGUtZXhwYW5kZXInKSBnZXQgaXNFeHBhbmRhYmxlRXhwYW5kZXIoKSB7XG4gICAgcmV0dXJuIHRoaXMuZXhwYW5kYWJsZUV4cGFuZGVyO1xuICB9XG5cbiAgLyoqXG4gICAqIEBkZXByZWNhdGVkIG5vIGxvbmdlciBuZWVkZWQgb25jZSB0aGlzLnRvZ2dsZSBpcyByZW1vdmVkLlxuICAgKi9cbiAgQEhvc3RMaXN0ZW5lcignY2xpY2snKSB0b2dnbGVTdGF0ZSgpIHtcbiAgICBpZiAodGhpcy50b2dnbGUpIHsgIC8vIGVzbGludC1kaXNhYmxlLWxpbmVcbiAgICAgIHRoaXMuc3RhdGUgPSAhdGhpcy5zdGF0ZTsgLy8gZXNsaW50LWRpc2FibGUtbGluZVxuICAgIH1cbiAgfVxuXG4gIEBIb3N0QmluZGluZygnYXR0ci5hcmlhLXByZXNzZWQnKSBnZXQgYXJpYVByZXNzZWQoKSB7XG4gICAgcmV0dXJuIHRoaXMuaXNUb2dnbGVQcmVzc2VkO1xuICB9XG5cbiAgLyoqXG4gICAqIENvbnN0cnVjdG9yLlxuICAgKlxuICAgKiBAcGFyYW0gZWxlbWVudFJlZiAtIHRoZSBlbGVtZW50IG1hdGNoaW5nIHRoZSBjb21wb25lbnQncyBzZWxlY3Rvci5cbiAgICovXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgZWxlbWVudDogRWxlbWVudFJlZiwgcHJpdmF0ZSBuZ1pvbmU6IE5nWm9uZSkge1xuICB9XG5cbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gIC8vIExpZmVjeWNsZSBFdmVudHNcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbiAgbmdPbkluaXQoKSB7XG4gICAgaWYgKHRoaXMuYnV0dG9uVHlwZSA9PT0gU29ob0J1dHRvbkNvbXBvbmVudC5GQVZPUklURSkge1xuICAgICAgaWYgKHRoaXMuaXNUb2dnbGUpIHtcbiAgICAgICAgdGhpcy50b2dnbGVPZmZJY29uID0gJ3N0YXItb3V0bGluZWQnO1xuICAgICAgICB0aGlzLnRvZ2dsZU9uSWNvbiA9ICdzdGFyLWZpbGxlZCc7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBkZXByZWNhdGVkIGluIDQuMy4wIHNvaG94aVxuICAgICAgICB0aGlzLnRvZ2dsZSA9ICdzdGFyLW91dGxpbmVkJzsgLy8gZXNsaW50LWRpc2FibGUtbGluZVxuICAgICAgICB0aGlzLmljb24gPSAnc3Rhci1maWxsZWQnO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpIHtcblxuICAgIHRoaXMubmdab25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpID0+IHtcbiAgICAgIGNvbnN0IHNlbGYgPSB0aGlzO1xuICAgICAgLy8gV3JhcCB0aGUgZWxlbWVudCBpbiBhIGpRdWVyeSBzZWxlY3Rvci5cbiAgICAgIHRoaXMualF1ZXJ5RWxlbWVudCA9IGpRdWVyeSh0aGlzLmVsZW1lbnQubmF0aXZlRWxlbWVudCk7XG4gICAgICAvLyBJbml0aWFsaXNlIHRoZSBTb2hvIGNvbnRyb2wuXG4gICAgICB0aGlzLmpRdWVyeUVsZW1lbnQuYnV0dG9uKHRoaXMuX2J1dHRvbk9wdGlvbnMpO1xuXG4gICAgICAvLyBJbml0aWFsaXplIHRpdGxlIGF0dHJpYnV0ZSBhcyBhIHNvaG8gdG9vbHRpcFxuICAgICAgaWYgKHRoaXMualF1ZXJ5RWxlbWVudC5oYXMoJ1t0aXRsZV0nKSAmJiAhdGhpcy5qUXVlcnlFbGVtZW50LmhhcygnW3BvcG92ZXJdJykpIHtcbiAgICAgICAgdGhpcy5qUXVlcnlFbGVtZW50LnRvb2x0aXAoKTtcbiAgICAgIH1cblxuICAgICAgLy8gT25jZSB0aGUgY29udHJvbCBpcyBpbml0aWFsaXNlZCwgZXh0cmFjdCB0aGUgY29udHJvbFxuICAgICAgLy8gcGx1Zy1pbiBmcm9tIHRoZSBlbGVtZW50LiAgVGhlIGVsZW1lbnQgbmFtZSBpcyBkZWZpbmVkXG4gICAgICAvLyBieSB0aGUgcGx1Zy1pbiwgYnV0IGluIHRoaXMgY2FzZSBpcyAnYnV0dG9uJy5cbiAgICAgIHRoaXMuYnV0dG9uID0gdGhpcy5qUXVlcnlFbGVtZW50LmRhdGEoJ2J1dHRvbicpO1xuXG4gICAgICBpZiAodGhpcy5zdGF0ZSAhPT0gdW5kZWZpbmVkKSB7IC8vIGVzbGludC1kaXNhYmxlLWxpbmVcbiAgICAgICAgLy8gdHVybiBvZmYgdGhlIGRlZmF1bHQgaGFuZGxpbmcgb2YgdGhlIGZhdm9yaXRlIGljb24gc3dpdGNoaW5nXG4gICAgICAgIC8vIGluIHRoZSBzb2hveGkgY29udHJvbHMgKGJ1dHRvbi5qcykuIFRoaXMgaXMgc28gdGhhdCBvbmx5IHRoaXNcbiAgICAgICAgLy8gYnV0dG9uLWNvbXBvbmVudCBoYW5kbGVzIHRoZSBzd2l0Y2hpbmcgb2YgdGhlIHRvZ2dsZSBpY29uIGZvclxuICAgICAgICAvLyBmYXZvcml0ZS5cbiAgICAgICAgaWYgKHRoaXMuYnV0dG9uVHlwZSA9PT0gU29ob0J1dHRvbkNvbXBvbmVudC5GQVZPUklURSkge1xuICAgICAgICAgIHRoaXMualF1ZXJ5RWxlbWVudC5vZmYoJ2NsaWNrLmZhdm9yaXRlJyk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gUmVtb3ZlIGFyaWEtcHJlc3NlZCBhdHRyaWJ1dGUgaWYgYnV0dG9uIGlzIG5vdCB0b2dnbGVcbiAgICAgIGlmICghdGhpcy5pc1RvZ2dsZSkge1xuICAgICAgICBpZiAodGhpcy5qUXVlcnlFbGVtZW50LmF0dHIoJ2FyaWEtcHJlc3NlZCcpICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICB0aGlzLmpRdWVyeUVsZW1lbnQucmVtb3ZlQXR0cignYXJpYS1wcmVzc2VkJyk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gVGhlcmUgYXJlIG5vICdleHRyYScgZXZlbnQgaGFuZGxlcnMgZm9yIGJ1dHRvbi5cblxuICAgICAgLy8gQWRkIG9ic2VydmVyIGZvciBidXR0b24gY2hhbmdlcyBpbiBodG1sXG4gICAgICBjb25zdCBvYnNlcnZlciA9IG5ldyBNdXRhdGlvbk9ic2VydmVyKGZ1bmN0aW9uIChtdXRhdGlvbnMpIHtcbiAgICAgICAgaWYgKG11dGF0aW9uc1swXS5hdHRyaWJ1dGVOYW1lID09PSAnc29oby1idXR0b24nICYmIHNlbGYualF1ZXJ5RWxlbWVudCkge1xuICAgICAgICAgIGNvbnN0IGJ1dHRvblN0eWxlcyA9IFtcbiAgICAgICAgICAgICdidG4nLFxuICAgICAgICAgICAgJ2J0bi1wcmltYXJ5JyxcbiAgICAgICAgICAgICdidG4tc2Vjb25kYXJ5JyxcbiAgICAgICAgICAgICdidG4tdGVydGlhcnknLFxuICAgICAgICAgICAgJ2J0bi1pY29uJyxcbiAgICAgICAgICAgICdpY29uLWZhdm9yaXRlJyxcbiAgICAgICAgICAgICdkZWZhdWx0J1xuICAgICAgICAgIF07XG4gICAgICAgICAgY29uc3QgcmVtb3ZlQ2xhc3NTdHlsZXMgPSAoKSA9PiB7XG4gICAgICAgICAgICBpZiAoc2VsZi5qUXVlcnlFbGVtZW50KSB7XG4gICAgICAgICAgICAgIGJ1dHRvblN0eWxlcy5mb3JFYWNoKHN0eWxlID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoc2VsZi5qUXVlcnlFbGVtZW50Py5oYXNDbGFzcyhzdHlsZSkpIHtcbiAgICAgICAgICAgICAgICAgIHNlbGYualF1ZXJ5RWxlbWVudC5yZW1vdmVDbGFzcyhzdHlsZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBjb25zdCB0eXBlID0gc2VsZi5qUXVlcnlFbGVtZW50LmF0dHIoJ3NvaG8tYnV0dG9uJyk7XG4gICAgICAgICAgY29uc3QgYnV0dG9uT3B0aW9uczogU29ob0J1dHRvbk9wdGlvbnMgPSB7IHN0eWxlOiBzZWxmLl9idXR0b25PcHRpb25zLnN0eWxlLCB0eXBlOiBzZWxmLl9idXR0b25PcHRpb25zLnR5cGUgfTtcblxuICAgICAgICAgIHN3aXRjaCAodHlwZSkge1xuICAgICAgICAgICAgY2FzZSAnYnRuJzpcbiAgICAgICAgICAgICAgcmVtb3ZlQ2xhc3NTdHlsZXMoKTtcbiAgICAgICAgICAgICAgc2VsZi5idXR0b25UeXBlID0gU29ob0J1dHRvbkNvbXBvbmVudC5CVE47XG4gICAgICAgICAgICAgIGJ1dHRvbk9wdGlvbnMuc3R5bGUgPSAnYnRuJztcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdwcmltYXJ5JzpcbiAgICAgICAgICAgICAgcmVtb3ZlQ2xhc3NTdHlsZXMoKTtcbiAgICAgICAgICAgICAgc2VsZi5idXR0b25UeXBlID0gU29ob0J1dHRvbkNvbXBvbmVudC5QUklNQVJZO1xuICAgICAgICAgICAgICBidXR0b25PcHRpb25zLnN0eWxlID0gJ2J0bi1wcmltYXJ5JztcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdzZWNvbmRhcnknOlxuICAgICAgICAgICAgICByZW1vdmVDbGFzc1N0eWxlcygpO1xuICAgICAgICAgICAgICBzZWxmLmJ1dHRvblR5cGUgPSBTb2hvQnV0dG9uQ29tcG9uZW50LlNFQ09OREFSWTtcbiAgICAgICAgICAgICAgYnV0dG9uT3B0aW9ucy5zdHlsZSA9ICdidG4tc2Vjb25kYXJ5JztcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICd0ZXJ0aWFyeSc6XG4gICAgICAgICAgICAgIHJlbW92ZUNsYXNzU3R5bGVzKCk7XG4gICAgICAgICAgICAgIHNlbGYuYnV0dG9uVHlwZSA9IFNvaG9CdXR0b25Db21wb25lbnQuVEVSVElBUlk7XG4gICAgICAgICAgICAgIGJ1dHRvbk9wdGlvbnMuc3R5bGUgPSAnYnRuLXRlcnRpYXJ5JztcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdpY29uJzpcbiAgICAgICAgICAgICAgcmVtb3ZlQ2xhc3NTdHlsZXMoKTtcbiAgICAgICAgICAgICAgc2VsZi5idXR0b25UeXBlID0gU29ob0J1dHRvbkNvbXBvbmVudC5JQ09OO1xuICAgICAgICAgICAgICBidXR0b25PcHRpb25zLnR5cGUgPSAnYnRuLWljb24nO1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ2Zhdm9yaXRlJzpcbiAgICAgICAgICAgICAgcmVtb3ZlQ2xhc3NTdHlsZXMoKTtcbiAgICAgICAgICAgICAgc2VsZi5idXR0b25UeXBlID0gU29ob0J1dHRvbkNvbXBvbmVudC5GQVZPUklURTtcbiAgICAgICAgICAgICAgYnV0dG9uT3B0aW9ucy50eXBlID0gJ2ljb24tZmF2b3JpdGUnO1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ2RlZmF1bHQnOlxuICAgICAgICAgICAgICByZW1vdmVDbGFzc1N0eWxlcygpO1xuICAgICAgICAgICAgICBidXR0b25PcHRpb25zLnN0eWxlID0gJ2RlZmF1bHQnO1xuICAgICAgICAgICAgICBidXR0b25PcHRpb25zLnR5cGUgPSAnZGVmYXVsdCc7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgICBzZWxmLnVwZGF0ZWQoYnV0dG9uT3B0aW9ucyk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgb2JzZXJ2ZXIub2JzZXJ2ZSh0aGlzLmVsZW1lbnQubmF0aXZlRWxlbWVudCwge1xuICAgICAgICBhdHRyaWJ1dGVzOiB0cnVlLFxuICAgICAgICBhdHRyaWJ1dGVGaWx0ZXI6IFsnc29oby1idXR0b24nXVxuICAgICAgfVxuICAgICAgKTtcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEZXN0cnVjdG9yLlxuICAgKi9cbiAgbmdPbkRlc3Ryb3koKSB7XG4gICAgdGhpcy5uZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCkgPT4ge1xuICAgICAgaWYgKHRoaXMualF1ZXJ5RWxlbWVudCkge1xuICAgICAgICB0aGlzLmpRdWVyeUVsZW1lbnQub2ZmKCk7XG4gICAgICAgIHRoaXMualF1ZXJ5RWxlbWVudCA9IHVuZGVmaW5lZDtcbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLmJ1dHRvbikge1xuICAgICAgICB0aGlzLmJ1dHRvbi5kZXN0cm95KCk7XG4gICAgICAgIHRoaXMuYnV0dG9uID0gbnVsbDtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIGdldCBoYXNJY29uKCkge1xuICAgIHJldHVybiAodGhpcy5pY29uIHx8ICh0aGlzLmJ1dHRvbk9wdGlvbnMudG9nZ2xlT25JY29uICYmIHRoaXMuYnV0dG9uT3B0aW9ucy50b2dnbGVPZmZJY29uKSk7XG4gIH1cblxuICBnZXQgY3VycmVudEljb24oKSB7XG4gICAgaWYgKHRoaXMuaXNUb2dnbGUgJiYgdGhpcy5idXR0b25PcHRpb25zLnRvZ2dsZU9uSWNvbiAmJiB0aGlzLmJ1dHRvbk9wdGlvbnMudG9nZ2xlT2ZmSWNvbikge1xuICAgICAgcmV0dXJuIHRoaXMuaXNUb2dnbGVQcmVzc2VkID8gdGhpcy5idXR0b25PcHRpb25zLnRvZ2dsZU9uSWNvbiA6IHRoaXMuYnV0dG9uT3B0aW9ucy50b2dnbGVPZmZJY29uO1xuICAgIH1cblxuICAgIGlmICh0aGlzLnRvZ2dsZSkgeyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lXG4gICAgICByZXR1cm4gdGhpcy5zdGF0ZSA/IHRoaXMuaWNvbiA6IHRoaXMudG9nZ2xlOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lXG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuaWNvbjtcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVwcmVjYXRlZCB1c2UgaXNUb2dnbGUgYW5kIGlzVG9nZ2xlUHJlc3NlZCBpbnN0ZWFkLlxuICAgKi9cbiAgcHVibGljIGlzUHJlc3NlZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5uZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCkgPT4ge1xuICAgICAgY29uc3QgcHJlc3NlZCA9IHRoaXMuZWxlbWVudC5uYXRpdmVFbGVtZW50LmdldEF0dHJpYnV0ZSgnYXJpYS1wcmVzc2VkJyk7XG4gICAgICB0aGlzLl9pc1ByZXNzZWQgPSAocHJlc3NlZCA9PT0gdHJ1ZSB8fCBwcmVzc2VkID09PSAndHJ1ZScpO1xuICAgICAgcmV0dXJuIHRoaXMuX2lzUHJlc3NlZDtcbiAgICB9KTtcbiAgfVxuXG4gIHVwZGF0ZWQoc2V0dGluZ3M/OiBTb2hvQnV0dG9uT3B0aW9ucykge1xuICAgIGlmIChzZXR0aW5ncykge1xuICAgICAgdGhpcy5fYnV0dG9uT3B0aW9ucyA9IFNvaG8udXRpbHMubWVyZ2VTZXR0aW5ncygodGhpcy5lbGVtZW50IGFzIGFueSlbMF0sIHNldHRpbmdzLCB0aGlzLl9idXR0b25PcHRpb25zKTtcbiAgICB9XG5cbiAgICB0aGlzLm5nWm9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKSA9PiB7XG4gICAgICBpZiAodGhpcy5idXR0b24pIHtcbiAgICAgICAgdGhpcy5idXR0b24udXBkYXRlZCh0aGlzLl9idXR0b25PcHRpb25zKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxufVxuIiwiPHN2ZyBzb2hvLWljb24gKm5nSWY9XCJoYXNJY29uXCIgW2ljb25dPVwiY3VycmVudEljb25cIiBbZXh0cmFJY29uQ2xhc3NdPVwiZXh0cmFJY29uQ2xhc3NcIj48L3N2Zz5cbjxzcGFuPlxuICA8bmctY29udGVudD48L25nLWNvbnRlbnQ+XG48L3NwYW4+XG48bmctY29udGVudCBzZWxlY3Q9XCJkaXYuZGlzYWJsZWQtdG9vbHRpcFwiPjwvbmctY29udGVudD5cbiJdfQ==
462
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic29oby1idXR0b24uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvaWRzLWVudGVycHJpc2Utbmcvc3JjL2xpYi9idXR0b24vc29oby1idXR0b24uY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvaWRzLWVudGVycHJpc2Utbmcvc3JjL2xpYi9idXR0b24vc29oby1idXR0b24uY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUVMLHVCQUF1QixFQUN2QixTQUFTLEVBRVQsV0FBVyxFQUNYLFlBQVksRUFDWixLQUFLLEdBSU4sTUFBTSxlQUFlLENBQUM7QUFFdkIsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLDBCQUEwQixDQUFDOzs7O0FBWTFELE1BQU0sT0FBTyxtQkFBbUI7SUErUTlCOzs7O09BSUc7SUFDSCxZQUFvQixPQUFtQixFQUFVLE1BQWM7UUFBM0MsWUFBTyxHQUFQLE9BQU8sQ0FBWTtRQUFVLFdBQU0sR0FBTixNQUFNLENBQVE7UUF4UHZELG1CQUFjLEdBQXNCLEVBQUUsQ0FBQztRQUN2QyxjQUFTLEdBQUcsS0FBSyxDQUFDO1FBQ2xCLHFCQUFnQixHQUFHLEtBQUssQ0FBQztRQUN6QixlQUFVLEdBQUcsS0FBSyxDQUFDO1FBd0kzQixrREFBa0Q7UUFDekMsYUFBUSxHQUFHLEtBQUssQ0FBQztRQUUxQixvRUFBb0U7UUFDM0QsV0FBTSxHQUFHLElBQUksQ0FBQztRQWtCdkI7Ozs7V0FJRztRQUNNLHVCQUFrQixHQUFHLEtBQUssQ0FBQztJQW1GcEMsQ0FBQztJQXBQRDs7OztPQUlHO0lBQ0gsMkRBQTJEO0lBQzNELElBQTBCLFVBQVUsQ0FBQyxJQUFvQjtRQUN2RCxJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxtQkFBbUIsQ0FBQyxTQUFTLENBQUM7SUFD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QkFBa0I7Z0JBSVMsWUFBWTtzQkFBbkQsV0FBVzt1QkFBQyxxQkFBcUI7Z0JBSWEsVUFBVTtzQkFBeEQsV0FBVzt1QkFBQyx1QkFBdUI7O3NCQUFHLEtBQUs7Z0JBQ0ksV0FBVztzQkFBMUQsV0FBVzt1QkFBQyx3QkFBd0I7O3NCQUFHLEtBQUs7Z0JBQ00sY0FBYztzQkFBaEUsV0FBVzt1QkFBQywyQkFBMkI7O3NCQUFHLEtBQUs7Z0JBRzVDLFFBQVE7c0JBRFgsV0FBVzt1QkFBQyxpQkFBaUI7Z0JBS0EsSUFBSTtzQkFBakMsV0FBVzt1QkFBQyxXQUFXO2dCQUlzQixvQkFBb0I7c0JBQWpFLFdBQVc7dUJBQUMsMkJBQTJCO2dCQU9qQixXQUFXO3NCQUFqQyxZQUFZO3VCQUFDLE9BQU87Z0JBTWlCLFdBQVc7c0JBQWhELFdBQVc7dUJBQUMsbUJBQW1CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQWZ0ZXJWaWV3SW5pdCxcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gIENvbXBvbmVudCxcbiAgRWxlbWVudFJlZixcbiAgSG9zdEJpbmRpbmcsXG4gIEhvc3RMaXN0ZW5lcixcbiAgSW5wdXQsXG4gIE5nWm9uZSxcbiAgT25EZXN0cm95LFxuICBPbkluaXQsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5pbXBvcnQgeyBBcmd1bWVudEhlbHBlciB9IGZyb20gJy4uL3V0aWxzL2FyZ3VtZW50LmhlbHBlcic7XG5cbi8qKlxuICogU3VwcG9ydGVkIGJ1dHRvbiB0eXBlcy5cbiAqL1xuZXhwb3J0IHR5cGUgU29ob0J1dHRvblR5cGUgPSAnYnRuJyB8ICdwcmltYXJ5JyB8ICdzZWNvbmRhcnknIHwgJ3RlcnRpYXJ5JyB8ICdpY29uJyB8ICdmYXZvcml0ZScgfCAnbW9kYWwnIHwgJ21vZGFsLXByaW1hcnknO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdidXR0b25bc29oby1idXR0b25dJywgLy8gZXNsaW50LWRpc2FibGUtbGluZVxuICB0ZW1wbGF0ZVVybDogJ3NvaG8tYnV0dG9uLmNvbXBvbmVudC5odG1sJyxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2hcbn0pXG5leHBvcnQgY2xhc3MgU29ob0J1dHRvbkNvbXBvbmVudCBpbXBsZW1lbnRzIEFmdGVyVmlld0luaXQsIE9uRGVzdHJveSwgT25Jbml0IHtcblxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gIC8vIFN1cHBvcnRlZCBidXR0b24gdHlwZXMuXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuICBzdGF0aWMgQlROOiBTb2hvQnV0dG9uVHlwZSA9ICdidG4nO1xuICBzdGF0aWMgUFJJTUFSWTogU29ob0J1dHRvblR5cGUgPSAncHJpbWFyeSc7XG4gIHN0YXRpYyBTRUNPTkRBUlk6IFNvaG9CdXR0b25UeXBlID0gJ3NlY29uZGFyeSc7XG4gIHN0YXRpYyBURVJUSUFSWTogU29ob0J1dHRvblR5cGUgPSAndGVydGlhcnknO1xuICBzdGF0aWMgSUNPTjogU29ob0J1dHRvblR5cGUgPSAnaWNvbic7XG4gIHN0YXRpYyBGQVZPUklURTogU29ob0J1dHRvblR5cGUgPSAnZmF2b3JpdGUnO1xuICBzdGF0aWMgTU9EQUw6IFNvaG9CdXR0b25UeXBlID0gJ21vZGFsJztcbiAgc3RhdGljIE1PREFMX1BSSU1BUlk6IFNvaG9CdXR0b25UeXBlID0gJ21vZGFsLXByaW1hcnknO1xuXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgLy8gUHJpdmF0ZSBNZW1iZXIgRGF0YVxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbiAgLyoqIFJlZmVyZW5jZSB0byB0aGUgalF1ZXJ5IGNvbnRyb2wuICovXG4gIHByaXZhdGUgalF1ZXJ5RWxlbWVudD86IEpRdWVyeTtcblxuICAvKiogUmVmZXJlbmNlIHRvIHRoZSBTb2hvIGNvbnRyb2wgYXBpLiAqL1xuICBwcml2YXRlIGJ1dHRvbj86IFNvaG9CdXR0b25TdGF0aWMgfCBudWxsO1xuXG4gIC8qKiBUaGUgdHlwZSBvZiB0aGUgYnV0dG9uLiAqL1xuICBwcml2YXRlIGJ1dHRvblR5cGU/OiBTb2hvQnV0dG9uVHlwZTtcblxuICBwcml2YXRlIF9idXR0b25PcHRpb25zOiBTb2hvQnV0dG9uT3B0aW9ucyA9IHt9O1xuICBwcml2YXRlIF9pc1RvZ2dsZSA9IGZhbHNlO1xuICBwcml2YXRlIF9pc1RvZ2dsZVByZXNzZWQgPSBmYWxzZTtcbiAgcHJpdmF0ZSBfaXNQcmVzc2VkID0gZmFsc2U7XG5cbiAgLyoqXG4gICAqIFRoZSB0eXBlIG9mIHRoZSBidXR0b24sIGRlZmF1bHRpbmcgdG8gJ3NlY29uZGFyeScuXG4gICAqXG4gICAqIEFsbG93IG92ZXJyaWRlIG9mIGlucHV0LCB0byBtYXRjaCBjb21wb25lbnQgc2VsZWN0b3IuXG4gICAqL1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQGFuZ3VsYXItZXNsaW50L25vLWlucHV0LXJlbmFtZVxuICBASW5wdXQoJ3NvaG8tYnV0dG9uJykgc2V0IHNvaG9CdXR0b24odHlwZTogU29ob0J1dHRvblR5cGUpIHtcbiAgICB0aGlzLmJ1dHRvblR5cGUgPSB0eXBlID8gdHlwZSA6IFNvaG9CdXR0b25Db21wb25lbnQuU0VDT05EQVJZO1xuICB9XG5cbiAgLyoqXG4gICAqIFNldHMgdGhlIGJ1dHRvbiBvcHRpb25zXG4gICAqL1xuICBASW5wdXQoKSBzZXQgYnV0dG9uT3B0aW9ucyhidXR0b25PcHRpb25zOiBTb2hvQnV0dG9uT3B0aW9ucykge1xuICAgIEFyZ3VtZW50SGVscGVyLmNoZWNrTm90TnVsbCgnYnV0dG9uT3B0aW9ucycsIGJ1dHRvbk9wdGlvbnMpO1xuXG4gICAgdGhpcy5fYnV0dG9uT3B0aW9ucyA9IGJ1dHRvbk9wdGlvbnM7XG4gICAgaWYgKHRoaXMuYnV0dG9uKSB7XG4gICAgICAvLyB0b2RvOiBob3cgdG8gdXBkYXRlIHRoZSBidXR0b24gd2hlbiBvcHRpb25zIGNoYW5nZT9cbiAgICB9XG4gIH1cbiAgZ2V0IGJ1dHRvbk9wdGlvbnMoKTogU29ob0J1dHRvbk9wdGlvbnMge1xuICAgIHJldHVybiB0aGlzLl9idXR0b25PcHRpb25zO1xuICB9XG5cbiAgQElucHV0KCkgc2V0IHRvZ2dsZU9uSWNvbih0b2dnbGVPbkljb246IHN0cmluZykge1xuICAgIHRoaXMuX2J1dHRvbk9wdGlvbnMudG9nZ2xlT25JY29uID0gdG9nZ2xlT25JY29uO1xuICAgIGlmICh0aGlzLmpRdWVyeUVsZW1lbnQpIHtcbiAgICAgIC8vIHRvZG86IGhvdyB0byB1cGRhdGUgdGhlIGJ1dHRvbiB3aGVuIHRvZ2dsZU9uSWNvbiBjaGFuZ2VzP1xuICAgIH1cbiAgfVxuXG4gIEBJbnB1dCgpIHNldCB0b2dnbGVPZmZJY29uKHRvZ2dsZU9mZkljb246IHN0cmluZykge1xuICAgIHRoaXMuX2J1dHRvbk9wdGlvbnMudG9nZ2xlT2ZmSWNvbiA9IHRvZ2dsZU9mZkljb247XG4gICAgaWYgKHRoaXMualF1ZXJ5RWxlbWVudCkge1xuICAgICAgLy8gdG9kbzogaG93IHRvIHVwZGF0ZSB0aGUgYnV0dG9uIHdoZW4gdG9nZ2xlT2ZmSWNvbiBjaGFuZ2VzP1xuICAgIH1cbiAgfVxuXG4gIEBJbnB1dCgpIHNldCByZXBsYWNlVGV4dChyZXBsYWNlVGV4dDogYm9vbGVhbikge1xuICAgIHRoaXMuX2J1dHRvbk9wdGlvbnMucmVwbGFjZVRleHQgPSByZXBsYWNlVGV4dDtcbiAgICBpZiAodGhpcy5qUXVlcnlFbGVtZW50KSB7XG4gICAgICAoKHRoaXMuYnV0dG9uIGFzIGFueSkuc2V0dGluZ3MgYXMgYW55KS5yZXBsYWNlVGV4dCA9IHJlcGxhY2VUZXh0O1xuICAgIH1cbiAgfVxuXG4gIEBJbnB1dCgpIHNldCBoaWRlTWVudUFycm93KHZhbHVlOiBib29sZWFuIHwgdW5kZWZpbmVkKSB7XG4gICAgdGhpcy5fYnV0dG9uT3B0aW9ucy5oaWRlTWVudUFycm93ID0gdmFsdWU7XG4gICAgaWYgKHRoaXMuYnV0dG9uKSB7XG4gICAgICB0aGlzLmJ1dHRvbi5zZXR0aW5ncy5oaWRlTWVudUFycm93ID0gdmFsdWU7XG4gICAgfVxuICB9XG5cbiAgZ2V0IGhpZGVNZW51QXJyb3coKTogYm9vbGVhbiB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuX2J1dHRvbk9wdGlvbnMuaGlkZU1lbnVBcnJvdztcbiAgfVxuXG4gIC8qKlxuICAgKiBVc2VkIHRvIGFkZCBhIGJpZ2dlciBoaXQgYXJlYSAoZm9yIG1vYmlsZSlcbiAgICovXG4gIEBJbnB1dCgpIHNldCBoaXRib3godmFsdWU6IGJvb2xlYW4gfCB1bmRlZmluZWQpIHtcbiAgICB0aGlzLl9idXR0b25PcHRpb25zLmhpdGJveCA9IHZhbHVlO1xuICAgIGlmICh0aGlzLmJ1dHRvbikge1xuICAgICAgdGhpcy5idXR0b24uc2V0dGluZ3MuaGl0Ym94ID0gdmFsdWU7XG4gICAgfVxuICB9XG5cbiAgZ2V0IGhpdGJveCgpOiBib29sZWFuIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy5fYnV0dG9uT3B0aW9ucy5oaXRib3g7XG4gIH1cblxuICAvKipcbiAgICogVXNlZCB0byBzZXQgYSBub3RpZmljYXRpb24gYmFkZ2Ugb24gdGhlIGJ1dHRvblxuICAgKi9cbiAgQElucHV0KCkgc2V0IG5vdGlmaWNhdGlvbkJhZGdlKHZhbHVlOiBib29sZWFuIHwgdW5kZWZpbmVkKSB7XG4gICAgdGhpcy5fYnV0dG9uT3B0aW9ucy5ub3RpZmljYXRpb25CYWRnZSA9IHZhbHVlO1xuICAgIGlmICh0aGlzLmJ1dHRvbikge1xuICAgICAgdGhpcy5idXR0b24uc2V0dGluZ3Mubm90aWZpY2F0aW9uQmFkZ2UgPSB2YWx1ZTtcbiAgICB9XG4gIH1cblxuICBnZXQgbm90aWZpY2F0aW9uQmFkZ2UoKTogYm9vbGVhbiB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuX2J1dHRvbk9wdGlvbnMubm90aWZpY2F0aW9uQmFkZ2U7XG4gIH1cblxuICAvKipcbiAgICogU2V0IHRoZSBwb3NpdGlvbiBhbmQgY29sb3Igb2YgdGhlIG5vdGlmaWNhdGlvbiBiYWRnZSBvbiB0aGUgYnV0dG9uXG4gICAqL1xuICBASW5wdXQoKSBzZXQgbm90aWZpY2F0aW9uQmFkZ2VPcHRpb25zKHZhbHVlOiBTb2hvTm90aWZpY2F0aW9uQmFkZ2VPcHRpb25zIHwgdW5kZWZpbmVkKSB7XG4gICAgdGhpcy5fYnV0dG9uT3B0aW9ucy5ub3RpZmljYXRpb25CYWRnZU9wdGlvbnMgPSB2YWx1ZTtcbiAgICBpZiAodGhpcy5idXR0b24pIHtcbiAgICAgIHRoaXMuYnV0dG9uLnNldHRpbmdzLm5vdGlmaWNhdGlvbkJhZGdlT3B0aW9ucyA9IHZhbHVlO1xuICAgIH1cbiAgfVxuXG4gIGdldCBub3RpZmljYXRpb25CYWRnZU9wdGlvbnMoKTogU29ob05vdGlmaWNhdGlvbkJhZGdlT3B0aW9ucyB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuX2J1dHRvbk9wdGlvbnMubm90aWZpY2F0aW9uQmFkZ2VPcHRpb25zO1xuICB9XG5cbiAgLyoqXG4gICAqIFVzZWQgdG8gc2V0IGFuIGV4dHJhIGNsYXNzIG9uIHRoZSBzb2hvLWljb24gYmVpbmcgdXNlZCBieSBzb2hvLWJ1dHRvbi5cbiAgICogVXNlZnVsIHRvIHNldCBlbWVyYWxkMDYtY29sb3IgYXp1cmUxMC1jb2xvciB0byBjaGFuZ2UgdGhlIGljb24gY29sb3IuXG4gICAqL1xuICBASW5wdXQoKSBleHRyYUljb25DbGFzcz86IHN0cmluZztcblxuICAvKipcbiAgICogV2hldGhlciB0aGlzIGJ1dHRvbiBzaG91bGQgYmUgYSB0b2dnbGUgYnV0dG9uIG9yIG5vdC4gQWx0ZXJuYXRlIHRvZ2dsZSBvbi9vZmYgaWNvbnNcbiAgICogY2FuIGJlIHVzZWQgdGhyb3VnaCB0b2dnbGVPbkljb24vdG9nZ2xlT2ZmSWNvbiBpbnB1dHMuXG4gICAqL1xuICBASW5wdXQoKSBzZXQgaXNUb2dnbGUoaXNUb2dnbGU6IGJvb2xlYW4pIHtcbiAgICB0aGlzLl9pc1RvZ2dsZSA9IGlzVG9nZ2xlO1xuICB9XG5cbiAgZ2V0IGlzVG9nZ2xlKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLl9pc1RvZ2dsZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRoZSB0b2dnbGUgYnV0dG9uIHNob3VsZCBiZSBpbiBhIHByZXNzZWQgc3RhdGUgb3Igbm90LlxuICAgKi9cbiAgQElucHV0KCkgc2V0IGlzVG9nZ2xlUHJlc3NlZChpc1RvZ2dsZVByZXNzZWQ6IGJvb2xlYW4pIHtcbiAgICB0aGlzLl9pc1RvZ2dsZVByZXNzZWQgPSBpc1RvZ2dsZVByZXNzZWQ7XG4gIH1cblxuICBnZXQgaXNUb2dnbGVQcmVzc2VkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLl9pc1RvZ2dsZVByZXNzZWQ7XG4gIH1cblxuICAvKipcbiAgICogVGhlIGljb24gdG8gYmUgdXNlZFxuICAgKiAgLSBzaG93cyB3aGVuIHRoZSBzdGF0ZSBpcyB0cnVlIGlmIHRvZ2dsZSBoYXMgYSB2YWx1ZVxuICAgKi9cbiAgQElucHV0KCkgaWNvbj86IHN0cmluZztcblxuICAvKiogU2V0cyB0aGUgYnV0dG9uIHR5cGUgdG8gJ3N1Ym1pdCcgd2hlbiB0cnVlLiAqL1xuICBASW5wdXQoKSBpc1N1Ym1pdCA9IGZhbHNlO1xuXG4gIC8qKiBTZXRzIHdoZXRoZXIgdGhlIGJ1dHRvbiBzaG91bGQgaGF2ZSBhIHJpcHBsZSBlZmZlY3Qgb24gY2xpY2suICovXG4gIEBJbnB1dCgpIHJpcHBsZSA9IHRydWU7XG5cbiAgLyoqXG4gICAqIEJpbmFyeSBzdGF0ZSAodG9nZ2xlKTpcbiAgICogIDAgLSBzaG93cyB0b2dnbGVcbiAgICogIDEgLSBzaG93cyBpY29uIChkZWZhdWx0KVxuICAgKlxuICAgKiAgQGRlcHJlY2F0ZWQgdXNlIGlzVG9nZ2xlPXRydWUgaW5wdXQgaW5zdGVhZCBhbG9uZyB3aXRoIHRvZ2dsZU9uSWNvbi90b2dnbGVPZmZJY29uIG9wdGlvbnNcbiAgICovXG4gIEBJbnB1dCgpIHN0YXRlPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogVGhlIGljb24gdG8gYmUgdXNlZCB3aGVuIHRoZSBzdGF0ZSBpcyBmYWxzZS5cbiAgICpcbiAgICogQGRlcHJlY2F0ZWQgdXNlIGlzVG9nZ2xlPXRydWUgaW5wdXQgaW5zdGVhZCBhbG9uZyB3aXRoIHRvZ2dsZU9uSWNvbi90b2dnbGVPZmZJY29uIG9wdGlvbnNcbiAgICovXG4gIEBJbnB1dCgpIHRvZ2dsZT86IHN0cmluZztcblxuICAvKipcbiAgICogU2V0cyB0aGUgZXhwYW5kYWJsZS1leHBhbmRlciBjbGFzcyB0byBiZSBwbGFjZWQgb24gdGhlIGJ1dHRvbiBmb3IgdGhlXG4gICAqIHNvaG8tZXhwYW5kYWJsZWFyZWEgdG8gdXNlIGFzIGl0J3MgZXhwYW5kL2NvbGxhcHNlIHRyaWdnZXJcbiAgICpcbiAgICovXG4gIEBJbnB1dCgpIGV4cGFuZGFibGVFeHBhbmRlciA9IGZhbHNlO1xuXG4gIEBIb3N0QmluZGluZygnY2xhc3MuYnRuJylcbiAgZ2V0IGJ0bigpIHtcbiAgICByZXR1cm4gdGhpcy5idXR0b25UeXBlID09PSBTb2hvQnV0dG9uQ29tcG9uZW50LkJUTjtcbiAgfVxuXG4gIEBIb3N0QmluZGluZygnY2xhc3MuYnRuLXByaW1hcnknKVxuICBnZXQgYnRuUHJpbWFyeSgpIHtcbiAgICByZXR1cm4gdGhpcy5idXR0b25UeXBlID09PSBTb2hvQnV0dG9uQ29tcG9uZW50LlBSSU1BUlk7XG4gIH1cblxuICBASG9zdEJpbmRpbmcoJ2NsYXNzLmJ0bi1zZWNvbmRhcnknKVxuICBnZXQgYnRuU2Vjb25kYXJ5KCkge1xuICAgIHJldHVybiB0aGlzLmJ1dHRvblR5cGUgPT09IFNvaG9CdXR0b25Db21wb25lbnQuU0VDT05EQVJZO1xuICB9XG5cbiAgQEhvc3RCaW5kaW5nKCdjbGFzcy5idG4tdGVydGlhcnknKVxuICBnZXQgYnRuVGVydGlhcnkoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuYnV0dG9uVHlwZSA9PT0gU29ob0J1dHRvbkNvbXBvbmVudC5URVJUSUFSWTtcbiAgfVxuXG4gIEBIb3N0QmluZGluZygnY2xhc3MuYnRuLWljb24nKVxuICBnZXQgYnRuSWNvbigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5idXR0b25UeXBlID09PSBTb2hvQnV0dG9uQ29tcG9uZW50LklDT04gfHwgdGhpcy5idXR0b25UeXBlID09PSBTb2hvQnV0dG9uQ29tcG9uZW50LkZBVk9SSVRFO1xuICB9XG5cbiAgQEhvc3RCaW5kaW5nKCdjbGFzcy5idG4tdG9nZ2xlJykgZ2V0IGJ0blRvZ2dsZSgpIHtcbiAgICByZXR1cm4gdGhpcy5pc1RvZ2dsZTtcbiAgfVxuXG4gIEBIb3N0QmluZGluZygnY2xhc3MuYnRuLW1vZGFsJykgZ2V0IGJ0bk1vZGFsKCkge1xuICAgIHJldHVybiB0aGlzLmJ1dHRvblR5cGUgPT09IFNvaG9CdXR0b25Db21wb25lbnQuTU9EQUw7XG4gIH1cblxuICBASG9zdEJpbmRpbmcoJ2NsYXNzLmJ0bi1tb2RhbC1wcmltYXJ5JykgZ2V0IGJ0bk1vZGFsUHJpbWFyeSgpIHtcbiAgICByZXR1cm4gdGhpcy5idXR0b25UeXBlID09PSBTb2hvQnV0dG9uQ29tcG9uZW50Lk1PREFMX1BSSU1BUlk7XG4gIH1cblxuICBASG9zdEJpbmRpbmcoJ2NsYXNzLmlzLXByZXNzZWQnKSBnZXQgYnRuVG9nZ2xlUHJlc3NlZCgpIHtcbiAgICByZXR1cm4gdGhpcy5pc1RvZ2dsZVByZXNzZWQ7XG4gIH1cblxuICBASG9zdEJpbmRpbmcoJ2NsYXNzLmljb24tZmF2b3JpdGUnKSBnZXQgaWNvbkZhdm9yaXRlKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmJ1dHRvblR5cGUgPT09IFNvaG9CdXR0b25Db21wb25lbnQuRkFWT1JJVEU7XG4gIH1cblxuICBASG9zdEJpbmRpbmcoJ2NsYXNzLmJ0bi1tb3ZldG8tbGVmdCcpIEBJbnB1dCgpIG1vdmVUb0xlZnQ6IGFueTtcbiAgQEhvc3RCaW5kaW5nKCdjbGFzcy5idG4tbW92ZXRvLXJpZ2h0JykgQElucHV0KCkgbW92ZVRvUmlnaHQ6IGFueTtcbiAgQEhvc3RCaW5kaW5nKCdjbGFzcy5idG4tbW92ZXRvLXNlbGVjdGVkJykgQElucHV0KCkgbW92ZVRvU2VsZWN0ZWQ6IGFueTtcblxuICBASG9zdEJpbmRpbmcoJ2NsYXNzLm5vLXJpcHBsZScpXG4gIGdldCBub1JpcHBsZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gIXRoaXMucmlwcGxlO1xuICB9XG5cbiAgQEhvc3RCaW5kaW5nKCdhdHRyLnR5cGUnKSBnZXQgdHlwZSgpIHtcbiAgICByZXR1cm4gdGhpcy5pc1N1Ym1pdCA/ICdzdWJtaXQnIDogJ2J1dHRvbic7XG4gIH1cblxuICBASG9zdEJpbmRpbmcoJ2NsYXNzLmV4cGFuZGFibGUtZXhwYW5kZXInKSBnZXQgaXNFeHBhbmRhYmxlRXhwYW5kZXIoKSB7XG4gICAgcmV0dXJuIHRoaXMuZXhwYW5kYWJsZUV4cGFuZGVyO1xuICB9XG5cbiAgLyoqXG4gICAqIEBkZXByZWNhdGVkIG5vIGxvbmdlciBuZWVkZWQgb25jZSB0aGlzLnRvZ2dsZSBpcyByZW1vdmVkLlxuICAgKi9cbiAgQEhvc3RMaXN0ZW5lcignY2xpY2snKSB0b2dnbGVTdGF0ZSgpIHtcbiAgICBpZiAodGhpcy50b2dnbGUpIHsgIC8vIGVzbGludC1kaXNhYmxlLWxpbmVcbiAgICAgIHRoaXMuc3RhdGUgPSAhdGhpcy5zdGF0ZTsgLy8gZXNsaW50LWRpc2FibGUtbGluZVxuICAgIH1cbiAgfVxuXG4gIEBIb3N0QmluZGluZygnYXR0ci5hcmlhLXByZXNzZWQnKSBnZXQgYXJpYVByZXNzZWQoKSB7XG4gICAgcmV0dXJuIHRoaXMuaXNUb2dnbGVQcmVzc2VkO1xuICB9XG5cbiAgLyoqXG4gICAqIENvbnN0cnVjdG9yLlxuICAgKlxuICAgKiBAcGFyYW0gZWxlbWVudFJlZiAtIHRoZSBlbGVtZW50IG1hdGNoaW5nIHRoZSBjb21wb25lbnQncyBzZWxlY3Rvci5cbiAgICovXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgZWxlbWVudDogRWxlbWVudFJlZiwgcHJpdmF0ZSBuZ1pvbmU6IE5nWm9uZSkge1xuICB9XG5cbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gIC8vIExpZmVjeWNsZSBFdmVudHNcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbiAgbmdPbkluaXQoKSB7XG4gICAgaWYgKHRoaXMuYnV0dG9uVHlwZSA9PT0gU29ob0J1dHRvbkNvbXBvbmVudC5GQVZPUklURSkge1xuICAgICAgaWYgKHRoaXMuaXNUb2dnbGUpIHtcbiAgICAgICAgdGhpcy50b2dnbGVPZmZJY29uID0gJ3N0YXItb3V0bGluZWQnO1xuICAgICAgICB0aGlzLnRvZ2dsZU9uSWNvbiA9ICdzdGFyLWZpbGxlZCc7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBkZXByZWNhdGVkIGluIDQuMy4wIHNvaG94aVxuICAgICAgICB0aGlzLnRvZ2dsZSA9ICdzdGFyLW91dGxpbmVkJzsgLy8gZXNsaW50LWRpc2FibGUtbGluZVxuICAgICAgICB0aGlzLmljb24gPSAnc3Rhci1maWxsZWQnO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpIHtcblxuICAgIHRoaXMubmdab25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpID0+IHtcbiAgICAgIGNvbnN0IHNlbGYgPSB0aGlzO1xuICAgICAgLy8gV3JhcCB0aGUgZWxlbWVudCBpbiBhIGpRdWVyeSBzZWxlY3Rvci5cbiAgICAgIHRoaXMualF1ZXJ5RWxlbWVudCA9IGpRdWVyeSh0aGlzLmVsZW1lbnQubmF0aXZlRWxlbWVudCk7XG4gICAgICAvLyBJbml0aWFsaXNlIHRoZSBTb2hvIGNvbnRyb2wuXG4gICAgICB0aGlzLmpRdWVyeUVsZW1lbnQuYnV0dG9uKHRoaXMuX2J1dHRvbk9wdGlvbnMpO1xuXG4gICAgICAvLyBJbml0aWFsaXplIHRpdGxlIGF0dHJpYnV0ZSBhcyBhIHNvaG8gdG9vbHRpcFxuICAgICAgaWYgKHRoaXMualF1ZXJ5RWxlbWVudC5oYXMoJ1t0aXRsZV0nKSAmJiAhdGhpcy5qUXVlcnlFbGVtZW50LmhhcygnW3BvcG92ZXJdJykpIHtcbiAgICAgICAgdGhpcy5qUXVlcnlFbGVtZW50LnRvb2x0aXAoKTtcbiAgICAgIH1cblxuICAgICAgLy8gT25jZSB0aGUgY29udHJvbCBpcyBpbml0aWFsaXNlZCwgZXh0cmFjdCB0aGUgY29udHJvbFxuICAgICAgLy8gcGx1Zy1pbiBmcm9tIHRoZSBlbGVtZW50LiAgVGhlIGVsZW1lbnQgbmFtZSBpcyBkZWZpbmVkXG4gICAgICAvLyBieSB0aGUgcGx1Zy1pbiwgYnV0IGluIHRoaXMgY2FzZSBpcyAnYnV0dG9uJy5cbiAgICAgIHRoaXMuYnV0dG9uID0gdGhpcy5qUXVlcnlFbGVtZW50LmRhdGEoJ2J1dHRvbicpO1xuXG4gICAgICBpZiAodGhpcy5zdGF0ZSAhPT0gdW5kZWZpbmVkKSB7IC8vIGVzbGludC1kaXNhYmxlLWxpbmVcbiAgICAgICAgLy8gdHVybiBvZmYgdGhlIGRlZmF1bHQgaGFuZGxpbmcgb2YgdGhlIGZhdm9yaXRlIGljb24gc3dpdGNoaW5nXG4gICAgICAgIC8vIGluIHRoZSBzb2hveGkgY29udHJvbHMgKGJ1dHRvbi5qcykuIFRoaXMgaXMgc28gdGhhdCBvbmx5IHRoaXNcbiAgICAgICAgLy8gYnV0dG9uLWNvbXBvbmVudCBoYW5kbGVzIHRoZSBzd2l0Y2hpbmcgb2YgdGhlIHRvZ2dsZSBpY29uIGZvclxuICAgICAgICAvLyBmYXZvcml0ZS5cbiAgICAgICAgaWYgKHRoaXMuYnV0dG9uVHlwZSA9PT0gU29ob0J1dHRvbkNvbXBvbmVudC5GQVZPUklURSkge1xuICAgICAgICAgIHRoaXMualF1ZXJ5RWxlbWVudC5vZmYoJ2NsaWNrLmZhdm9yaXRlJyk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gUmVtb3ZlIGFyaWEtcHJlc3NlZCBhdHRyaWJ1dGUgaWYgYnV0dG9uIGlzIG5vdCB0b2dnbGVcbiAgICAgIGlmICghdGhpcy5pc1RvZ2dsZSkge1xuICAgICAgICBpZiAodGhpcy5qUXVlcnlFbGVtZW50LmF0dHIoJ2FyaWEtcHJlc3NlZCcpICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICB0aGlzLmpRdWVyeUVsZW1lbnQucmVtb3ZlQXR0cignYXJpYS1wcmVzc2VkJyk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gVGhlcmUgYXJlIG5vICdleHRyYScgZXZlbnQgaGFuZGxlcnMgZm9yIGJ1dHRvbi5cblxuICAgICAgLy8gQWRkIG9ic2VydmVyIGZvciBidXR0b24gY2hhbmdlcyBpbiBodG1sXG4gICAgICBjb25zdCBvYnNlcnZlciA9IG5ldyBNdXRhdGlvbk9ic2VydmVyKGZ1bmN0aW9uIChtdXRhdGlvbnMpIHtcbiAgICAgICAgaWYgKG11dGF0aW9uc1swXS5hdHRyaWJ1dGVOYW1lID09PSAnc29oby1idXR0b24nICYmIHNlbGYualF1ZXJ5RWxlbWVudCkge1xuICAgICAgICAgIGNvbnN0IGJ1dHRvblN0eWxlcyA9IFtcbiAgICAgICAgICAgICdidG4nLFxuICAgICAgICAgICAgJ2J0bi1wcmltYXJ5JyxcbiAgICAgICAgICAgICdidG4tc2Vjb25kYXJ5JyxcbiAgICAgICAgICAgICdidG4tdGVydGlhcnknLFxuICAgICAgICAgICAgJ2J0bi1pY29uJyxcbiAgICAgICAgICAgICdpY29uLWZhdm9yaXRlJyxcbiAgICAgICAgICAgICdkZWZhdWx0J1xuICAgICAgICAgIF07XG4gICAgICAgICAgY29uc3QgcmVtb3ZlQ2xhc3NTdHlsZXMgPSAoKSA9PiB7XG4gICAgICAgICAgICBpZiAoc2VsZi5qUXVlcnlFbGVtZW50KSB7XG4gICAgICAgICAgICAgIGJ1dHRvblN0eWxlcy5mb3JFYWNoKHN0eWxlID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoc2VsZi5qUXVlcnlFbGVtZW50Py5oYXNDbGFzcyhzdHlsZSkpIHtcbiAgICAgICAgICAgICAgICAgIHNlbGYualF1ZXJ5RWxlbWVudC5yZW1vdmVDbGFzcyhzdHlsZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBjb25zdCB0eXBlID0gc2VsZi5qUXVlcnlFbGVtZW50LmF0dHIoJ3NvaG8tYnV0dG9uJyk7XG4gICAgICAgICAgY29uc3QgYnV0dG9uT3B0aW9uczogU29ob0J1dHRvbk9wdGlvbnMgPSB7IHN0eWxlOiBzZWxmLl9idXR0b25PcHRpb25zLnN0eWxlLCB0eXBlOiBzZWxmLl9idXR0b25PcHRpb25zLnR5cGUgfTtcblxuICAgICAgICAgIHN3aXRjaCAodHlwZSkge1xuICAgICAgICAgICAgY2FzZSAnYnRuJzpcbiAgICAgICAgICAgICAgcmVtb3ZlQ2xhc3NTdHlsZXMoKTtcbiAgICAgICAgICAgICAgc2VsZi5idXR0b25UeXBlID0gU29ob0J1dHRvbkNvbXBvbmVudC5CVE47XG4gICAgICAgICAgICAgIGJ1dHRvbk9wdGlvbnMuc3R5bGUgPSAnYnRuJztcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdwcmltYXJ5JzpcbiAgICAgICAgICAgICAgcmVtb3ZlQ2xhc3NTdHlsZXMoKTtcbiAgICAgICAgICAgICAgc2VsZi5idXR0b25UeXBlID0gU29ob0J1dHRvbkNvbXBvbmVudC5QUklNQVJZO1xuICAgICAgICAgICAgICBidXR0b25PcHRpb25zLnN0eWxlID0gJ2J0bi1wcmltYXJ5JztcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdzZWNvbmRhcnknOlxuICAgICAgICAgICAgICByZW1vdmVDbGFzc1N0eWxlcygpO1xuICAgICAgICAgICAgICBzZWxmLmJ1dHRvblR5cGUgPSBTb2hvQnV0dG9uQ29tcG9uZW50LlNFQ09OREFSWTtcbiAgICAgICAgICAgICAgYnV0dG9uT3B0aW9ucy5zdHlsZSA9ICdidG4tc2Vjb25kYXJ5JztcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICd0ZXJ0aWFyeSc6XG4gICAgICAgICAgICAgIHJlbW92ZUNsYXNzU3R5bGVzKCk7XG4gICAgICAgICAgICAgIHNlbGYuYnV0dG9uVHlwZSA9IFNvaG9CdXR0b25Db21wb25lbnQuVEVSVElBUlk7XG4gICAgICAgICAgICAgIGJ1dHRvbk9wdGlvbnMuc3R5bGUgPSAnYnRuLXRlcnRpYXJ5JztcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdpY29uJzpcbiAgICAgICAgICAgICAgcmVtb3ZlQ2xhc3NTdHlsZXMoKTtcbiAgICAgICAgICAgICAgc2VsZi5idXR0b25UeXBlID0gU29ob0J1dHRvbkNvbXBvbmVudC5JQ09OO1xuICAgICAgICAgICAgICBidXR0b25PcHRpb25zLnR5cGUgPSAnYnRuLWljb24nO1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ2Zhdm9yaXRlJzpcbiAgICAgICAgICAgICAgcmVtb3ZlQ2xhc3NTdHlsZXMoKTtcbiAgICAgICAgICAgICAgc2VsZi5idXR0b25UeXBlID0gU29ob0J1dHRvbkNvbXBvbmVudC5GQVZPUklURTtcbiAgICAgICAgICAgICAgYnV0dG9uT3B0aW9ucy50eXBlID0gJ2ljb24tZmF2b3JpdGUnO1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ2RlZmF1bHQnOlxuICAgICAgICAgICAgICByZW1vdmVDbGFzc1N0eWxlcygpO1xuICAgICAgICAgICAgICBidXR0b25PcHRpb25zLnN0eWxlID0gJ2RlZmF1bHQnO1xuICAgICAgICAgICAgICBidXR0b25PcHRpb25zLnR5cGUgPSAnZGVmYXVsdCc7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgICBzZWxmLnVwZGF0ZWQoYnV0dG9uT3B0aW9ucyk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgb2JzZXJ2ZXIub2JzZXJ2ZSh0aGlzLmVsZW1lbnQubmF0aXZlRWxlbWVudCwge1xuICAgICAgICBhdHRyaWJ1dGVzOiB0cnVlLFxuICAgICAgICBhdHRyaWJ1dGVGaWx0ZXI6IFsnc29oby1idXR0b24nXVxuICAgICAgfVxuICAgICAgKTtcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEZXN0cnVjdG9yLlxuICAgKi9cbiAgbmdPbkRlc3Ryb3koKSB7XG4gICAgdGhpcy5uZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCkgPT4ge1xuICAgICAgaWYgKHRoaXMualF1ZXJ5RWxlbWVudCkge1xuICAgICAgICB0aGlzLmpRdWVyeUVsZW1lbnQub2ZmKCk7XG4gICAgICAgIHRoaXMualF1ZXJ5RWxlbWVudCA9IHVuZGVmaW5lZDtcbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLmJ1dHRvbikge1xuICAgICAgICB0aGlzLmJ1dHRvbi5kZXN0cm95KCk7XG4gICAgICAgIHRoaXMuYnV0dG9uID0gbnVsbDtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIGdldCBoYXNJY29uKCkge1xuICAgIHJldHVybiAodGhpcy5pY29uIHx8ICh0aGlzLmJ1dHRvbk9wdGlvbnMudG9nZ2xlT25JY29uICYmIHRoaXMuYnV0dG9uT3B0aW9ucy50b2dnbGVPZmZJY29uKSk7XG4gIH1cblxuICBnZXQgY3VycmVudEljb24oKSB7XG4gICAgaWYgKHRoaXMuaXNUb2dnbGUgJiYgdGhpcy5idXR0b25PcHRpb25zLnRvZ2dsZU9uSWNvbiAmJiB0aGlzLmJ1dHRvbk9wdGlvbnMudG9nZ2xlT2ZmSWNvbikge1xuICAgICAgcmV0dXJuIHRoaXMuaXNUb2dnbGVQcmVzc2VkID8gdGhpcy5idXR0b25PcHRpb25zLnRvZ2dsZU9uSWNvbiA6IHRoaXMuYnV0dG9uT3B0aW9ucy50b2dnbGVPZmZJY29uO1xuICAgIH1cblxuICAgIGlmICh0aGlzLnRvZ2dsZSkgeyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lXG4gICAgICByZXR1cm4gdGhpcy5zdGF0ZSA/IHRoaXMuaWNvbiA6IHRoaXMudG9nZ2xlOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lXG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuaWNvbjtcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVwcmVjYXRlZCB1c2UgaXNUb2dnbGUgYW5kIGlzVG9nZ2xlUHJlc3NlZCBpbnN0ZWFkLlxuICAgKi9cbiAgcHVibGljIGlzUHJlc3NlZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5uZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCkgPT4ge1xuICAgICAgY29uc3QgcHJlc3NlZCA9IHRoaXMuZWxlbWVudC5uYXRpdmVFbGVtZW50LmdldEF0dHJpYnV0ZSgnYXJpYS1wcmVzc2VkJyk7XG4gICAgICB0aGlzLl9pc1ByZXNzZWQgPSAocHJlc3NlZCA9PT0gdHJ1ZSB8fCBwcmVzc2VkID09PSAndHJ1ZScpO1xuICAgICAgcmV0dXJuIHRoaXMuX2lzUHJlc3NlZDtcbiAgICB9KTtcbiAgfVxuXG4gIHVwZGF0ZWQoc2V0dGluZ3M/OiBTb2hvQnV0dG9uT3B0aW9ucykge1xuICAgIGlmIChzZXR0aW5ncykge1xuICAgICAgdGhpcy5fYnV0dG9uT3B0aW9ucyA9IFNvaG8udXRpbHMubWVyZ2VTZXR0aW5ncygodGhpcy5lbGVtZW50IGFzIGFueSlbMF0sIHNldHRpbmdzLCB0aGlzLl9idXR0b25PcHRpb25zKTtcbiAgICB9XG5cbiAgICB0aGlzLm5nWm9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKSA9PiB7XG4gICAgICBpZiAodGhpcy5idXR0b24pIHtcbiAgICAgICAgdGhpcy5idXR0b24udXBkYXRlZCh0aGlzLl9idXR0b25PcHRpb25zKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxufVxuIiwiPHNwYW4+XG4gIDxuZy1jb250ZW50PjwvbmctY29udGVudD5cbjwvc3Bhbj5cbjxzdmcgc29oby1pY29uICpuZ0lmPVwiaGFzSWNvblwiIFtpY29uXT1cImN1cnJlbnRJY29uXCIgW2V4dHJhSWNvbkNsYXNzXT1cImV4dHJhSWNvbkNsYXNzXCI+PC9zdmc+XG48bmctY29udGVudCBzZWxlY3Q9XCJkaXYuZGlzYWJsZWQtdG9vbHRpcFwiPjwvbmctY29udGVudD5cbiJdfQ==
@@ -17,6 +17,7 @@ export class SohoDatePickerComponent extends BaseControlValueAccessor {
17
17
  this.isDisabled = undefined;
18
18
  this.isReadOnly = undefined;
19
19
  this._options = {};
20
+ this.updateLegend = false;
20
21
  /**
21
22
  * Called when the datepicker value changes
22
23
  *
@@ -24,6 +25,22 @@ export class SohoDatePickerComponent extends BaseControlValueAccessor {
24
25
  */
25
26
  // eslint-disable-next-line @angular-eslint/no-output-rename, @angular-eslint/no-output-native
26
27
  this.change = new EventEmitter();
28
+ /**
29
+ * Called when the datepicker is closed.
30
+ */
31
+ this.listclosed = new EventEmitter();
32
+ /**
33
+ * Called when the datepicker is opened.
34
+ */
35
+ this.listopened = new EventEmitter();
36
+ /**
37
+ * Called before a month will be rendered in the datepicker
38
+ */
39
+ this.beforemonthrendered = new EventEmitter();
40
+ /**
41
+ * Called after a month has been rendered in the datepicker
42
+ */
43
+ this.monthrendered = new EventEmitter();
27
44
  }
28
45
  /**
29
46
  * Indicates to display the timepicker; defaults to false.
@@ -224,7 +241,9 @@ export class SohoDatePickerComponent extends BaseControlValueAccessor {
224
241
  set legend(legend) {
225
242
  this._options.legend = legend;
226
243
  if (this.datepicker) {
227
- this.markForRefresh();
244
+ this.datepicker.settings.legend = legend;
245
+ this.updateLegend = true;
246
+ this.ref.markForCheck();
228
247
  }
229
248
  }
230
249
  /**
@@ -355,6 +374,9 @@ export class SohoDatePickerComponent extends BaseControlValueAccessor {
355
374
  this.datepicker.element.trigger('focus');
356
375
  }
357
376
  }
377
+ openCalendar() {
378
+ this.datepicker?.openCalendar();
379
+ }
358
380
  /**
359
381
  * Bind attributes to the host input element
360
382
  */
@@ -378,7 +400,11 @@ export class SohoDatePickerComponent extends BaseControlValueAccessor {
378
400
  * Bind to jQueryElement's events
379
401
  */
380
402
  this.jQueryElement
381
- .on('change', (args) => this.onChange(args));
403
+ .on('change', (args) => this.onChange(args))
404
+ .on('listclosed', () => this.onListClosed())
405
+ .on('listopened', () => this.onListOpened())
406
+ .on('beforemonthrendered', () => this.onBeforeMonthRendered())
407
+ .on('monthrendered', (e, args) => this.onMonthRendered(args));
382
408
  if (this.internalValue) {
383
409
  this.datepicker?.setValue(this.internalValue, false);
384
410
  }
@@ -386,6 +412,10 @@ export class SohoDatePickerComponent extends BaseControlValueAccessor {
386
412
  });
387
413
  }
388
414
  ngAfterViewChecked() {
415
+ if (this.updateLegend && this.datepicker) {
416
+ this.datepicker.loadLegend(this._options.legend);
417
+ this.updateLegend = false;
418
+ }
389
419
  if (this.runUpdatedOnCheck) {
390
420
  // Ensure the enabled/disabled flags are set.
391
421
  if (this.isDisabled !== null && this.isDisabled !== undefined) {
@@ -433,8 +463,8 @@ export class SohoDatePickerComponent extends BaseControlValueAccessor {
433
463
  // in the control.
434
464
  if (typeof value === 'string' && this._options.range?.useRange) {
435
465
  const dates = value.split('-');
436
- const startValue = new Date(dates[0]);
437
- const endValue = new Date(dates[1]);
466
+ const startValue = Soho.Locale.parseDate(dates[0].trim()) || Soho.Locale.parseDate(dates[0].trim(), { pattern: this._options?.dateFormat });
467
+ const endValue = Soho.Locale.parseDate(dates[1].trim()) || Soho.Locale.parseDate(dates[1].trim(), { pattern: this._options?.dateFormat });
438
468
  this.datepicker.settings.range.start = startValue;
439
469
  this.datepicker.settings.range.end = endValue;
440
470
  this.datepicker.setValue(startValue, false);
@@ -474,9 +504,29 @@ export class SohoDatePickerComponent extends BaseControlValueAccessor {
474
504
  // updating.
475
505
  this.ref.markForCheck();
476
506
  }
507
+ onListClosed() {
508
+ this.ngZone.run(() => {
509
+ this.listclosed.emit();
510
+ });
511
+ }
512
+ onListOpened() {
513
+ this.ngZone.run(() => {
514
+ this.listopened.emit();
515
+ });
516
+ }
517
+ onBeforeMonthRendered() {
518
+ this.ngZone.run(() => {
519
+ this.beforemonthrendered.emit();
520
+ });
521
+ }
522
+ onMonthRendered(args) {
523
+ this.ngZone.run(() => {
524
+ this.monthrendered.emit(args);
525
+ });
526
+ }
477
527
  }
478
528
  SohoDatePickerComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.4", ngImport: i0, type: SohoDatePickerComponent, deps: [{ token: i0.ElementRef }, { token: i0.NgZone }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
479
- SohoDatePickerComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.4", type: SohoDatePickerComponent, selector: "input[soho-datepicker]", inputs: { showTime: "showTime", useCurrentTime: "useCurrentTime", timeFormat: "timeFormat", minuteInterval: "minuteInterval", secondInterval: "secondInterval", firstDayOfWeek: "firstDayOfWeek", autoSize: "autoSize", showToday: "showToday", attributes: "attributes", mode: "mode", range: "range", roundToInterval: "roundToInterval", dateFormat: "dateFormat", placeholder: "placeholder", disable: "disable", showLegend: "showLegend", showMonthYearPicker: "showMonthYearPicker", hideDays: "hideDays", yearsAhead: "yearsAhead", yearsBack: "yearsBack", legend: "legend", locale: "locale", calendarName: "calendarName", useUTC: "useUTC", tabbable: "tabbable", options: "options", disabled: "disabled", readonly: "readonly" }, outputs: { change: "change" }, host: { properties: { "class.datepicker": "this.isDatepicker", "class.timepicker": "this.isTimepicker" } }, providers: [provideControlValueAccessor(SohoDatePickerComponent)], usesInheritance: true, ngImport: i0, template: '<ng-content></ng-content>', isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush });
529
+ SohoDatePickerComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.4", type: SohoDatePickerComponent, selector: "input[soho-datepicker]", inputs: { showTime: "showTime", useCurrentTime: "useCurrentTime", timeFormat: "timeFormat", minuteInterval: "minuteInterval", secondInterval: "secondInterval", firstDayOfWeek: "firstDayOfWeek", autoSize: "autoSize", showToday: "showToday", attributes: "attributes", mode: "mode", range: "range", roundToInterval: "roundToInterval", dateFormat: "dateFormat", placeholder: "placeholder", disable: "disable", showLegend: "showLegend", showMonthYearPicker: "showMonthYearPicker", hideDays: "hideDays", yearsAhead: "yearsAhead", yearsBack: "yearsBack", legend: "legend", locale: "locale", calendarName: "calendarName", useUTC: "useUTC", tabbable: "tabbable", options: "options", disabled: "disabled", readonly: "readonly" }, outputs: { change: "change", listclosed: "listclosed", listopened: "listopened", beforemonthrendered: "beforemonthrendered", monthrendered: "monthrendered" }, host: { properties: { "class.datepicker": "this.isDatepicker", "class.timepicker": "this.isTimepicker" } }, providers: [provideControlValueAccessor(SohoDatePickerComponent)], usesInheritance: true, ngImport: i0, template: '<ng-content></ng-content>', isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush });
480
530
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.4", ngImport: i0, type: SohoDatePickerComponent, decorators: [{
481
531
  type: Component,
482
532
  args: [{
@@ -543,6 +593,14 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.4", ngImpor
543
593
  type: Input
544
594
  }], change: [{
545
595
  type: Output
596
+ }], listclosed: [{
597
+ type: Output
598
+ }], listopened: [{
599
+ type: Output
600
+ }], beforemonthrendered: [{
601
+ type: Output
602
+ }], monthrendered: [{
603
+ type: Output
546
604
  }], isDatepicker: [{
547
605
  type: HostBinding,
548
606
  args: ['class.datepicker']
@@ -550,4 +608,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.4", ngImpor
550
608
  type: HostBinding,
551
609
  args: ['class.timepicker']
552
610
  }] } });
553
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic29oby1kYXRlcGlja2VyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2lkcy1lbnRlcnByaXNlLW5nL3NyYy9saWIvZGF0ZXBpY2tlci9zb2hvLWRhdGVwaWNrZXIuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFHTCx1QkFBdUIsRUFDdkIsU0FBUyxFQUVULFlBQVksRUFDWixXQUFXLEVBQ1gsS0FBSyxFQUVMLE1BQU0sRUFHUCxNQUFNLGVBQWUsQ0FBQztBQUV2QixPQUFPLEVBQ0wsd0JBQXdCLEVBQ3hCLDJCQUEyQixFQUM1QixNQUFNLHNDQUFzQyxDQUFDOztBQVE5QyxNQUFNLE9BQU8sdUJBQXdCLFNBQVEsd0JBQXVFO0lBd1psSDs7Ozs7O09BTUc7SUFDSCxZQUFvQixPQUFtQixFQUM3QixNQUFjLEVBQ2YsR0FBc0I7UUFDN0IsS0FBSyxFQUFFLENBQUM7UUFIVSxZQUFPLEdBQVAsT0FBTyxDQUFZO1FBQzdCLFdBQU0sR0FBTixNQUFNLENBQVE7UUFDZixRQUFHLEdBQUgsR0FBRyxDQUFtQjtRQW5adkIsZUFBVSxHQUFhLFNBQVMsQ0FBQztRQUVqQyxlQUFVLEdBQWEsU0FBUyxDQUFDO1FBRWpDLGFBQVEsR0FBMEIsRUFBRSxDQUFDO1FBc1Y3Qzs7OztXQUlHO1FBQ0gsOEZBQThGO1FBQ3BGLFdBQU0sR0FBRyxJQUFJLFlBQVksRUFBdUIsQ0FBQztJQXFEM0QsQ0FBQztJQS9ZRDs7T0FFRztJQUNILElBQWEsUUFBUSxDQUFDLFFBQWlCO1FBQ3JDLElBQUksQ0FBQyxRQUFRLENBQUMsUUFBUSxHQUFHLFFBQVEsQ0FBQztRQUNsQyxJQUFJLElBQUksQ0FBQyxVQUFVLEVBQUU7WUFDbkIsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO1NBQ3ZCO0lBQ0gsQ0FBQztJQUVEOztPQUVHO0lBQ0gsSUFBYSxjQUFjLENBQUMsY0FBdUI7UUFDakQsSUFB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QUF0QixLQUFLO2dCQVVPLG1CQUFtQjtzQkFBL0IsS0FBSztnQkFVTyxRQUFRO3NCQUFwQixLQUFLO2dCQVVPLFVBQVU7c0JBQXRCLEtBQUs7Z0JBVU8sU0FBUztzQkFBckIsS0FBSztnQkFVTyxNQUFNO3NCQUFsQixLQUFLO2dCQVVPLE1BQU07c0JBQWxCLEtBQUs7Z0JBVU8sWUFBWTtzQkFBeEIsS0FBSztnQkFVTyxNQUFNO3NCQUFsQixLQUFLO2dCQVVPLFFBQVE7c0JBQXBCLEtBQUs7Z0JBVU8sT0FBTztzQkFBbkIsS0FBSztnQkFjTyxRQUFRO3NCQUFwQixLQUFLO2dCQWdDTyxRQUFRO3NCQUFwQixLQUFLO2dCQWlDSSxNQUFNO3NCQUFmLE1BQU07Z0JBbUM4QixZQUFZO3NCQUFoRCxXQUFXO3VCQUFDLGtCQUFrQjtnQkFHTSxZQUFZO3NCQUFoRCxXQUFXO3VCQUFDLGtCQUFrQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIEFmdGVyVmlld0NoZWNrZWQsXG4gIEFmdGVyVmlld0luaXQsXG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICBDb21wb25lbnQsXG4gIEVsZW1lbnRSZWYsXG4gIEV2ZW50RW1pdHRlcixcbiAgSG9zdEJpbmRpbmcsXG4gIElucHV0LFxuICBPbkRlc3Ryb3ksXG4gIE91dHB1dCxcbiAgTmdab25lLFxuICBDaGFuZ2VEZXRlY3RvclJlZlxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuaW1wb3J0IHtcbiAgQmFzZUNvbnRyb2xWYWx1ZUFjY2Vzc29yLFxuICBwcm92aWRlQ29udHJvbFZhbHVlQWNjZXNzb3Jcbn0gZnJvbSAnLi4vdXRpbHMvYmFzZS1jb250cm9sLXZhbHVlLWFjY2Vzc29yJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnaW5wdXRbc29oby1kYXRlcGlja2VyXScsIC8vIGVzbGludC1kaXNhYmxlLWxpbmVcbiAgdGVtcGxhdGU6ICc8bmctY29udGVudD48L25nLWNvbnRlbnQ+JyxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gIHByb3ZpZGVyczogW3Byb3ZpZGVDb250cm9sVmFsdWVBY2Nlc3NvcihTb2hvRGF0ZVBpY2tlckNvbXBvbmVudCldXG59KVxuZXhwb3J0IGNsYXNzIFNvaG9EYXRlUGlja2VyQ29tcG9uZW50IGV4dGVuZHMgQmFzZUNvbnRyb2xWYWx1ZUFjY2Vzc29yPHN0cmluZyB8IG51bWJlciB8IHN0cmluZ1tdIHwgRGF0ZSB8IHVuZGVmaW5lZD4gaW1wbGVtZW50cyBBZnRlclZpZXdJbml0LCBBZnRlclZpZXdDaGVja2VkLCBPbkRlc3Ryb3kge1xuXG4gIC8qKlxuICAgKiBGbGFnIHRvIGZvcmNlIGFuIHVwZGF0ZSBvZiB0aGUgY29udHJvbCBhZnRlciB0aGUgdmlldyBpcyBjcmVhdGVkLlxuICAgKi9cbiAgcHJpdmF0ZSBydW5VcGRhdGVkT25DaGVjaz86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIExvY2FsIHZhcmlhYmxlc1xuICAgKi9cbiAgcHJpdmF0ZSBqUXVlcnlFbGVtZW50PzogSlF1ZXJ5O1xuXG4gIHByaXZhdGUgZGF0ZXBpY2tlcj86IFNvaG9EYXRlUGlja2VyU3RhdGljIHwgbnVsbDtcblxuICBwcml2YXRlIGlzRGlzYWJsZWQ/OiBib29sZWFuID0gdW5kZWZpbmVkO1xuXG4gIHByaXZhdGUgaXNSZWFkT25seT86IGJvb2xlYW4gPSB1bmRlZmluZWQ7XG5cbiAgcHJpdmF0ZSBfb3B0aW9uczogU29ob0RhdGVQaWNrZXJPcHRpb25zID0ge307XG5cbiAgLyoqXG4gICAqIEluZGljYXRlcyB0byBkaXNwbGF5IHRoZSB0aW1lcGlja2VyOyBkZWZhdWx0cyB0byBmYWxzZS5cbiAgICovXG4gIEBJbnB1dCgpIHNldCBzaG93VGltZShzaG93VGltZTogYm9vbGVhbikge1xuICAgIHRoaXMuX29wdGlvbnMuc2hvd1RpbWUgPSBzaG93VGltZTtcbiAgICBpZiAodGhpcy5kYXRlcGlja2VyKSB7XG4gICAgICB0aGlzLm1hcmtGb3JSZWZyZXNoKCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIElmIHRydWUgY3VycmVudCB0aW1lIHdpbGwgYmUgdXNlZCBmb3IgdGhlIHRpbWUgcG9ydGlvbiBvdGhlcndpc2UgMTI6MDAgbWlkbmlnaHQgaXMgdXNlZC5cbiAgICovXG4gIEBJbnB1dCgpIHNldCB1c2VDdXJyZW50VGltZSh1c2VDdXJyZW50VGltZTogYm9vbGVhbikge1xuICAgIHRoaXMuX29wdGlvbnMudXNlQ3VycmVudFRpbWUgPSB1c2VDdXJyZW50VGltZTtcbiAgICBpZiAodGhpcy5kYXRlcGlja2VyKSB7XG4gICAgICB0aGlzLm1hcmtGb3JSZWZyZXNoKCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEluZGljYXRlcyB0aGUgcGF0dGVybiBmb3IgdGhlIHRpbWUgZm9ybWF0LlxuICAgKi9cbiAgQElucHV0KCkgc2V0IHRpbWVGb3JtYXQodGltZUZvcm1hdDogc3RyaW5nKSB7XG4gICAgdGhpcy5fb3B0aW9ucy50aW1lRm9ybWF0ID0gdGltZUZvcm1hdDtcbiAgICBpZiAodGhpcy5kYXRlcGlja2VyKSB7XG4gICAgICB0aGlzLm1hcmtGb3JSZWZyZXNoKCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEFuIGludGVnZXIgZnJvbSAxIHRvIDYwOyBtdWx0aXBsZXMgb2YgdGhpcyB2YWx1ZSBhcmUgZGlzcGxheWVkIGFzIG9wdGlvbnMgaW4gdGhlIG1pbnV0ZXMgZHJvcGRvd24uXG4gICAqL1xuICBASW5wdXQoKSBzZXQgbWludXRlSW50ZXJ2YWwobWludXRlSW50ZXJ2YWw6IG51bWJlcikge1xuICAgIHRoaXMuX29wdGlvbnMubWludXRlSW50ZXJ2YWwgPSBtaW51dGVJbnRlcnZhbDtcbiAgICBpZiAodGhpcy5kYXRlcGlja2VyKSB7XG4gICAgICB0aGlzLm1hcmtGb3JSZWZyZXNoKCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEFuIGludGVnZXIgZnJvbSAxIHRvIDYwOyBtdWx0aXBsZXMgb2YgdGhpcyB2YWx1ZSBhcmUgZGlzcGxheWVkIGFzIG9wdGlvbnMgaW4gdGhlIHNlY29uZHMgZHJvcGRvd24uXG4gICAqL1xuICBASW5wdXQoKSBzZXQgc2Vjb25kSW50ZXJ2YWwoc2Vjb25kSW50ZXJ2YWw6IG51bWJlcikge1xuICAgIHRoaXMuX29wdGlvbnMuc2Vjb25kSW50ZXJ2YWwgPSBzZWNvbmRJbnRlcnZhbDtcbiAgICBpZiAodGhpcy5kYXRlcGlja2VyKSB7XG4gICAgICB0aGlzLm1hcmtGb3JSZWZyZXNoKCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIENoYW5nZSB0aGUgZGF0ZXBpY2tlcnMgZmlyc3QgZGF5IG9mIHRoZSB3ZWVrLlxuICAgKiBBbiBpbnRlZ2VyIGZyb20gMCAtIDYgd2hlcmUgMCA9IFN1bmRheSwgMSA9IE1vbmRheSwgZXRjLi4uXG4gICAqL1xuICBASW5wdXQoKSBzZXQgZmlyc3REYXlPZldlZWsoZmlyc3REYXlPZldlZWs6IFNvaG9EYXRlUGlja2VyRGF5T2ZXZWVrKSB7XG4gICAgdGhpcy5fb3B0aW9ucy5maXJzdERheU9mV2VlayA9IGZpcnN0RGF5T2ZXZWVrO1xuICAgIGlmICh0aGlzLmRhdGVwaWNrZXIpIHtcbiAgICAgIHRoaXMubWFya0ZvclJlZnJlc2goKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogSWYgdHJ1ZSB0aGUgZmllbGQgd2lsbCBiZSBzaXplZCB0byB0aGUgd2lkdGggb2YgdGhlIGRhdGUuXG4gICAqL1xuICBASW5wdXQoKSBzZXQgYXV0b1NpemUoYXV0b1NpemU6IGJvb2xlYW4pIHtcbiAgICB0aGlzLl9vcHRpb25zLmF1dG9TaXplID0gYXV0b1NpemU7XG4gICAgaWYgKHRoaXMuZGF0ZXBpY2tlcikge1xuICAgICAgdGhpcy5tYXJrRm9yUmVmcmVzaCgpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBTaG93IHRoZSB0b2RheSBidXR0b24gb24gdGhlIGhlYWRlci5cbiAgICovXG4gIEBJbnB1dCgpIHNldCBzaG93VG9kYXkoc2hvd1RvZGF5OiBib29sZWFuKSB7XG4gICAgdGhpcy5fb3B0aW9ucy5zaG93VG9kYXkgPSBzaG93VG9kYXk7XG4gICAgaWYgKHRoaXMuZGF0ZXBpY2tlcikge1xuICAgICAgdGhpcy5tYXJrRm9yUmVmcmVzaCgpO1xuICAgIH1cbiAgfVxuXG4gIC8qKiBBZGQgZXh0cmEgYXR0cmlidXRlcyBsaWtlIGlkJ3MgdG8gdGhlIGNvbXBvbmVudCAqKi9cbiAgQElucHV0KCkgc2V0IGF0dHJpYnV0ZXMoYXR0cmlidXRlczogQXJyYXk8T2JqZWN0PiB8IE9iamVjdCkge1xuICAgIHRoaXMuX29wdGlvbnMuYXR0cmlidXRlcyA9IGF0dHJpYnV0ZXM7XG4gICAgaWYgKHRoaXMuZGF0ZXBpY2tlcikge1xuICAgICAgdGhpcy5tYXJrRm9yUmVmcmVzaCgpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBJbmRpY2F0ZXMgbW9kZSwgZWl0aGVyICdzdGFuZGFyZCcgb3IgJ3JhbmdlJy5cbiAgICovXG4gIEBJbnB1dCgpIHNldCBtb2RlKG1vZGU6IFNvaG9EYXRlUGlja2VyTW9kZSkge1xuICAgIHRoaXMuX29wdGlvbnMubW9kZSA9IG1vZGU7XG5cbiAgICBpZiAobW9kZSA9PT0gJ3JhbmdlJykge1xuICAgICAgaWYgKHRoaXMuX29wdGlvbnMucmFuZ2UpIHtcbiAgICAgICAgdGhpcy5fb3B0aW9ucy5yYW5nZS51c2VSYW5nZSA9IHRydWU7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLl9vcHRpb25zLnJhbmdlID0ge307XG4gICAgICAgIHRoaXMuX29wdGlvbnMucmFuZ2UudXNlUmFuZ2UgPSB0cnVlO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBpZiAodGhpcy5fb3B0aW9ucy5yYW5nZSkge1xuICAgICAgICB0aGlzLl9vcHRpb25zLnJhbmdlLnVzZVJhbmdlID0gZmFsc2U7XG4gICAgICB9XG4gICAgfVxuICAgIGlmICh0aGlzLmRhdGVwaWNrZXIpIHtcbiAgICAgIHRoaXMubWFya0ZvclJlZnJlc2goKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogVXNlIHJhbmdlIG9mIHR3byBkYXRlcyBvcHRpb25zLlxuICAgKi9cbiAgQElucHV0KCkgc2V0IHJhbmdlKHJhbmdlOiBTb2hvRGF0ZVBpY2tlclJhbmdlKSB7XG4gICAgdGhpcy5fb3B0aW9ucy5yYW5nZSA9IHJhbmdlO1xuXG4gICAgaWYgKHRoaXMuZGF0ZXBpY2tlcikge1xuICAgICAgdGhpcy5tYXJrRm9yUmVmcmVzaCgpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBJZiBhIG5vbi1tYXRjaGluZyBtaW51dGVzIHZhbHVlIGlzIGVudGVyZWQsIHdpbGwgcm91bmQgdGhlIG1pbnV0ZXMgdmFsdWUgdG8gdGhlIG5lYXJlc3QgaW50ZXJ2YWwgb24gdGhlIGJsdXIgZXZlbnQuXG4gICAqL1xuICBASW5wdXQoKSBzZXQgcm91bmRUb0ludGVydmFsKHJvdW5kVG9JbnRlcnZhbDogYm9vbGVhbikge1xuICAgIHRoaXMuX29wdGlvbnMucm91bmRUb0ludGVydmFsID0gcm91bmRUb0ludGVydmFsO1xuXG4gICAgaWYgKHRoaXMuZGF0ZXBpY2tlcikge1xuICAgICAgdGhpcy5tYXJrRm9yUmVmcmVzaCgpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBJbmRpY2F0ZXMgdGhlIHBhdHRlcm4gZm9yIHRoZSBkYXRlIGZvcm1hdCBvciB0aGUgdmFsdWUgb2YgJ2xvY2FsZScuXG4gICAqL1xuICBASW5wdXQoKSBzZXQgZGF0ZUZvcm1hdChkYXRlRm9ybWF0OiBzdHJpbmcpIHtcbiAgICB0aGlzLl9vcHRpb25zLmRhdGVGb3JtYXQgPSBkYXRlRm9ybWF0O1xuICAgIGlmICh0aGlzLmRhdGVwaWNrZXIpIHtcbiAgICAgIHRoaXMubWFya0ZvclJlZnJlc2goKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogSW5kaWNhdGVzIGEgcGxhY2Vob2xkZXIgZm9yIGFuIGVtcHR5IHZhbHVlOyBkZWZhdWx0cyB0byBmYWxzZS5cbiAgICovXG4gIEBJbnB1dCgpIHNldCBwbGFjZWhvbGRlcihwbGFjZWhvbGRlcjogc3RyaW5nKSB7XG4gICAgdGhpcy5fb3B0aW9ucy5wbGFjZWhvbGRlciA9IHBsYWNlaG9sZGVyO1xuICAgIGlmICh0aGlzLmRhdGVwaWNrZXIpIHtcbiAgICAgIHRoaXMubWFya0ZvclJlZnJlc2goKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogSW5kaWNhdGVzIGFuIG9iamVjdCBjb250YWluaW5nIGEgZGF0ZSBvciByYW5nZSBvZiBkYXRlcyB0aGF0IGFyZSBlbmFibGVkIG9yIGRpc2FibGVkLlxuICAgKi9cbiAgQElucHV0KCkgc2V0IGRpc2FibGUoZGlzYWJsZTogYW55KSB7XG4gICAgdGhpcy5fb3B0aW9ucy5kaXNhYmxlID0gZGlzYWJsZTtcbiAgICBpZiAodGhpcy5kYXRlcGlja2VyKSB7XG4gICAgICB0aGlzLm1hcmtGb3JSZWZyZXNoKCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEluZGljYXRlcyBhIGxlZ2VuZCBpcyBzaG93biB0byBhc3NvY2lhdGUgZGF0ZXNcbiAgICovXG4gIEBJbnB1dCgpIHNldCBzaG93TGVnZW5kKHNob3dMZWdlbmQ6IGJvb2xlYW4pIHtcbiAgICB0aGlzLl9vcHRpb25zLnNob3dMZWdlbmQgPSBzaG93TGVnZW5kO1xuICAgIGlmICh0aGlzLmRhdGVwaWNrZXIpIHtcbiAgICAgIHRoaXMubWFya0ZvclJlZnJlc2goKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogSW5kaWNhdGVzIGlmIHRoZSBtb250aCBhbmQgeWVhciB3aWxsIHJlbmRlciBhcyBkcm9wZG93bnMuXG4gICAqL1xuICBASW5wdXQoKSBzZXQgc2hvd01vbnRoWWVhclBpY2tlcihzaG93TW9udGhZZWFyUGlja2VyOiBib29sZWFuKSB7XG4gICAgdGhpcy5fb3B0aW9ucy5zaG93TW9udGhZZWFyUGlja2VyID0gc2hvd01vbnRoWWVhclBpY2tlcjtcbiAgICBpZiAodGhpcy5kYXRlcGlja2VyKSB7XG4gICAgICB0aGlzLm1hcmtGb3JSZWZyZXNoKCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEluZGljYXRlcyBpZiB0aGUgZGF5cyBwb3J0aW9uIG9mIHRoZSBjYWxlbmRhciB3aWxsIGJlIGhpZGRlbi5cbiAgICovXG4gIEBJbnB1dCgpIHNldCBoaWRlRGF5cyhoaWRlRGF5czogYm9vbGVhbikge1xuICAgIHRoaXMuX29wdGlvbnMuaGlkZURheXMgPSBoaWRlRGF5cztcbiAgICBpZiAodGhpcy5kYXRlcGlja2VyKSB7XG4gICAgICB0aGlzLm1hcmtGb3JSZWZyZXNoKCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFRoZSBudW1iZXIgb2YgeWVhcnMgYWhlYWQgdG8gc2hvdyBpbiB0aGUgbW9udGgveWVhciBwaWNrZXIgc2hvdWxkIHRvdGFsIDkgd2l0aCB5ZWFyc0JhY2suXG4gICAqL1xuICBASW5wdXQoKSBzZXQgeWVhcnNBaGVhZCh5ZWFyc0FoZWFkOiBudW1iZXIpIHtcbiAgICB0aGlzLl9vcHRpb25zLnllYXJzQWhlYWQgPSB5ZWFyc0FoZWFkO1xuICAgIGlmICh0aGlzLmRhdGVwaWNrZXIpIHtcbiAgICAgIHRoaXMubWFya0ZvclJlZnJlc2goKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogVGhlIG51bWJlciBvZiB5ZWFycyBiYWNrIHRvIHNob3cgaW4gdGhlIG1vbnRoL3llYXIgcGlja2VyIHNob3VsZCB0b3RhbCA5IHdpdGggeWVhcnNBaGVhZC5cbiAgICovXG4gIEBJbnB1dCgpIHNldCB5ZWFyc0JhY2soeWVhcnNCYWNrOiBudW1iZXIpIHtcbiAgICB0aGlzLl9vcHRpb25zLnllYXJzQmFjayA9IHllYXJzQmFjaztcbiAgICBpZiAodGhpcy5kYXRlcGlja2VyKSB7XG4gICAgICB0aGlzLm1hcmtGb3JSZWZyZXNoKCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIE9wdGlvbnMgZm9yIGhvdyB0aGUgbGVnZW5kIGRpc3BsYXlzXG4gICAqL1xuICBASW5wdXQoKSBzZXQgbGVnZW5kKGxlZ2VuZDogQXJyYXk8U29ob0RhdGVQaWNrZXJMZWdlbmQ+KSB7XG4gICAgdGhpcy5fb3B0aW9ucy5sZWdlbmQgPSBsZWdlbmQ7XG4gICAgaWYgKHRoaXMuZGF0ZXBpY2tlcikge1xuICAgICAgdGhpcy5tYXJrRm9yUmVmcmVzaCgpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBUaGUgbmFtZSBvZiB0aGUgbG9jYWxlIHRvIHVzZSBmb3IgdGhpcyBpbnN0YW5jZS4gSWYgbm90IHNldCwgdGhlIGN1cnJlbnQgbG9jYWxlIHdpbGwgYmUgdXNlZC5cbiAgICovXG4gIEBJbnB1dCgpIHNldCBsb2NhbGUobG9jYWxlOiBzdHJpbmcpIHtcbiAgICB0aGlzLl9vcHRpb25zLmxvY2FsZSA9IGxvY2FsZTtcbiAgICBpZiAodGhpcy5kYXRlcGlja2VyKSB7XG4gICAgICB0aGlzLm1hcmtGb3JSZWZyZXNoKCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIENhbGVuZGFyJ3MgbmFtZS4gQ3VycmVudGx5IGp1c3QgJ2dyZWdvcmlhbicgb3IgJ2lzbGFtaWMtdW1hbHF1cmEnXG4gICAqL1xuICBASW5wdXQoKSBzZXQgY2FsZW5kYXJOYW1lKGNhbGVuZGFyTmFtZTogU29ob0RhdGVQaWNrZXJDYWxlbmRhck5hbWUpIHtcbiAgICB0aGlzLl9vcHRpb25zLmNhbGVuZGFyTmFtZSA9IGNhbGVuZGFyTmFtZTtcbiAgICBpZiAodGhpcy5kYXRlcGlja2VyKSB7XG4gICAgICB0aGlzLm1hcmtGb3JSZWZyZXNoKCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEluZGljYXRlcyBpZiB0aGUgZGF0ZXMgd2lsbCB1c2UgVVRDIGZvcm1hdFxuICAgKi9cbiAgQElucHV0KCkgc2V0IHVzZVVUQyh1c2VVVEM6IGJvb2xlYW4pIHtcbiAgICB0aGlzLl9vcHRpb25zLnVzZVVUQyA9IHVzZVVUQztcbiAgICBpZiAodGhpcy5kYXRlcGlja2VyKSB7XG4gICAgICB0aGlzLm1hcmtGb3JSZWZyZXNoKCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFNldCB0aGUgaW5wdXQgdG8gdGFiYmFibGVcbiAgICovXG4gIEBJbnB1dCgpIHNldCB0YWJiYWJsZSh0YWJiYWJsZTogYm9vbGVhbikge1xuICAgIHRoaXMuX29wdGlvbnMudGFiYmFibGUgPSB0YWJiYWJsZTtcbiAgICBpZiAodGhpcy5kYXRlcGlja2VyKSB7XG4gICAgICB0aGlzLm1hcmtGb3JSZWZyZXNoKCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFNldHMgdGhlIG9wdGlvbnMgZm9yIHRoZSBkYXRlIHBpY2tlclxuICAgKi9cbiAgQElucHV0KCkgc2V0IG9wdGlvbnMob3B0aW9uczogU29ob0RhdGVQaWNrZXJPcHRpb25zKSB7XG4gICAgdGhpcy5fb3B0aW9ucyA9IG9wdGlvbnM7XG4gICAgaWYgKHRoaXMuZGF0ZXBpY2tlcikge1xuICAgICAgdGhpcy5tYXJrRm9yUmVmcmVzaCgpO1xuICAgIH1cbiAgfVxuXG4gIGdldCBvcHRpb25zKCk6IFNvaG9EYXRlUGlja2VyT3B0aW9ucyB7XG4gICAgcmV0dXJuIHRoaXMuX29wdGlvbnM7XG4gIH1cblxuICAvKipcbiAgICogRW5hYmxlcyBvciBkaXNhYmxlcyB0aGUgY29udHJvbFxuICAgKi9cbiAgQElucHV0KCkgc2V0IGRpc2FibGVkKHZhbHVlOiBib29sZWFuIHwgdW5kZWZpbmVkKSB7XG4gICAgLy8gQXZvaWQgc2V0dGluZyB0aGUgdmFsdWUgaWYgbm90IHJlcXVpcmVkLFxuICAgIC8vIHRoaXMgY2F1c2VzIGlzc3VlIG9uIGNvbXBvbmVudCBpbml0aWFsaXNhdGlvblxuICAgIC8vIGFzIGVuYWJsZSgpIGlzIGNhbGxlZCBieSBib3RoIGRpc2FibGVkKClcbiAgICAvLyBhbmQgcmVhZG9ubHkoKS5cbiAgICBpZiAodGhpcy5kYXRlcGlja2VyID09IG51bGwpIHtcbiAgICAgIHRoaXMuaXNEaXNhYmxlZCA9IHZhbHVlO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIFNldCB0aGUgc3RhdHVzIGxvY2FsbHkgKGZvciByZWZyZXNoaW5nKVxuICAgIHRoaXMuaXNEaXNhYmxlZCA9IHZhbHVlO1xuXG4gICAgaWYgKHZhbHVlKSB7XG4gICAgICB0aGlzLm5nWm9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKSA9PiB7XG4gICAgICAgIHRoaXMuZGF0ZXBpY2tlcj8uZGlzYWJsZSgpO1xuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMubmdab25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpID0+IHtcbiAgICAgICAgdGhpcy5kYXRlcGlja2VyPy5lbmFibGUoKTtcbiAgICAgICAgdGhpcy5pc1JlYWRPbmx5ID0gZmFsc2U7XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBnZXQgZGlzYWJsZWQoKTogYm9vbGVhbiB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuaXNEaXNhYmxlZDtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXRzIHRoZSBjb250cm9sIHRvIHJlYWRvbmx5XG4gICAqL1xuICBASW5wdXQoKSBzZXQgcmVhZG9ubHkodmFsdWU6IGJvb2xlYW4gfCB1bmRlZmluZWQpIHtcbiAgICAvLyBBdm9pZCBzZXR0aW5nIHRoZSB2YWx1ZSBpZiBub3QgcmVxdWlyZWQsXG4gICAgLy8gdGhpcyBjYXVzZXMgaXNzdWUgb24gY29tcG9uZW50IGluaXRpYWxpc2F0aW9uXG4gICAgLy8gYXMgZW5hYmxlKCkgaXMgY2FsbGVkIGJ5IGJvdGggZGlzYWJsZWQoKVxuICAgIC8vIGFuZCByZWFkb25seSgpLlxuICAgIGlmICh0aGlzLmRhdGVwaWNrZXIgPT0gbnVsbCkge1xuICAgICAgdGhpcy5pc1JlYWRPbmx5ID0gdmFsdWU7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gU2V0IHRoZSBzdGF0dXMgbG9jYWxseSAoZm9yIHJlZnJlc2hpbmcpXG4gICAgdGhpcy5pc1JlYWRPbmx5ID0gdmFsdWU7XG5cbiAgICBpZiAodmFsdWUpIHtcbiAgICAgIHRoaXMubmdab25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpID0+IHRoaXMuZGF0ZXBpY2tlcj8ucmVhZG9ubHkoKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMubmdab25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpID0+IHtcbiAgICAgICAgdGhpcy5kYXRlcGlja2VyPy5lbmFibGUoKTtcbiAgICAgICAgdGhpcy5pc0Rpc2FibGVkID0gZmFsc2U7XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBnZXQgcmVhZG9ubHkoKTogYm9vbGVhbiB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuaXNSZWFkT25seTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDYWxsZWQgd2hlbiB0aGUgZGF0ZXBpY2tlciB2YWx1ZSBjaGFuZ2VzXG4gICAqXG4gICAqIEB0b2RvIHJlcGxhY2Ugb3ZlcnJpZGUgb2YgbmF0aXZlIGF0dHJpYnV0ZVxuICAgKi9cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEBhbmd1bGFyLWVzbGludC9uby1vdXRwdXQtcmVuYW1lLCBAYW5ndWxhci1lc2xpbnQvbm8tb3V0cHV0LW5hdGl2ZVxuICBAT3V0cHV0KCkgY2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxTb2hvRGF0ZVBpY2tlckV2ZW50PigpO1xuXG4gIC8qKlxuICAgKiBQdWJsaWMgQVBJXG4gICAqL1xuXG4gIHB1YmxpYyBzZXRWYWx1ZSh2YWx1ZTogc3RyaW5nIHwgRGF0ZSB8IG51bWJlciB8IHN0cmluZ1tdLCB0cmlnZ2VyOiBib29sZWFuLCBpc1RpbWU6IGJvb2xlYW4pIHtcbiAgICB0aGlzLmRhdGVwaWNrZXI/LnNldFZhbHVlKHZhbHVlLCB0cmlnZ2VyLCBpc1RpbWUpO1xuICB9XG5cbiAgcHVibGljIGdldFZhbHVlKGFzRGF0ZTogYm9vbGVhbiA9IGZhbHNlKTogc3RyaW5nIHwgRGF0ZSB8IG51bWJlciB8IHN0cmluZ1tdIHtcbiAgICBpZiAoYXNEYXRlICYmICh0eXBlb2YgdGhpcy5pbnRlcm5hbFZhbHVlID09PSAnc3RyaW5nJykpIHtcbiAgICAgIGNvbnN0IGNhbGVuZGFyID0gU29oby5Mb2NhbGUuY2FsZW5kYXIoKTtcbiAgICAgIGNvbnN0IGRhdGVGb3JtYXQgPSB0aGlzLl9vcHRpb25zLmRhdGVGb3JtYXQgfHwgY2FsZW5kYXIuZGF0ZUZvcm1hdC5zaG9ydDtcbiAgICAgIGNvbnN0IHRpbWVGb3JtYXQgPSB0aGlzLl9vcHRpb25zLnRpbWVGb3JtYXQgfHwgY2FsZW5kYXIudGltZUZvcm1hdDtcbiAgICAgIGxldCBmb3JtYXQgPSBkYXRlRm9ybWF0O1xuICAgICAgaWYgKHRoaXMuX29wdGlvbnMuc2hvd1RpbWUpIHtcbiAgICAgICAgZm9ybWF0ICs9ICdUJyArIHRpbWVGb3JtYXQ7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBTb2hvLkxvY2FsZS5wYXJzZURhdGUodGhpcy5pbnRlcm5hbFZhbHVlIHx8ICcnLCBmb3JtYXQpO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLmludGVybmFsVmFsdWUgfHwgJyc7XG4gIH1cblxuICBwdWJsaWMgZm9jdXMoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuZGF0ZXBpY2tlcikge1xuICAgICAgdGhpcy5kYXRlcGlja2VyLmVsZW1lbnQudHJpZ2dlcignZm9jdXMnKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQmluZCBhdHRyaWJ1dGVzIHRvIHRoZSBob3N0IGlucHV0IGVsZW1lbnRcbiAgICovXG4gIEBIb3N0QmluZGluZygnY2xhc3MuZGF0ZXBpY2tlcicpIGdldCBpc0RhdGVwaWNrZXIoKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgQEhvc3RCaW5kaW5nKCdjbGFzcy50aW1lcGlja2VyJykgZ2V0IGlzVGltZXBpY2tlcigpIHtcbiAgICByZXR1cm4gISF0aGlzLl9vcHRpb25zLnNob3dUaW1lO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgYW4gaW5zdGFuY2Ugb2YgU29ob0RhdGVQaWNrZXJDb21wb25lbnQuXG4gICAqXG4gICAqIEBwYXJhbSBlbGVtZW50IHRoZSBlbGVtZW50IHRoaXMgY29tcG9uZW50IGVuY2Fwc3VsYXRlcy5cbiAgICogQHBhcmFtIG5nWm9uZSB0aGUgYW5ndWxhciB6b25lIGZvciB0aGlzIGNvbXBvbmVudC5cbiAgICogQHBhcmFtIHJlZiByZWZlcmVuY2UgdG8gdGhlIGNoYW5nZSBkZXRlY3RvclxuICAgKi9cbiAgY29uc3RydWN0b3IocHJpdmF0ZSBlbGVtZW50OiBFbGVtZW50UmVmLFxuICAgIHByaXZhdGUgbmdab25lOiBOZ1pvbmUsXG4gICAgcHVibGljIHJlZjogQ2hhbmdlRGV0ZWN0b3JSZWYpIHtcbiAgICBzdXBlcigpO1xuICB9XG5cbiAgbmdBZnRlclZpZXdJbml0KCkge1xuXG4gICAgLy8gY2FsbCBvdXRzaWRlIHRoZSBhbmd1bGFyIHpvbmUgc28gY2hhbmdlIGRldGVjdGlvblxuICAgIC8vIGlzbid0IHRyaWdnZXJlZCBieSB0aGUgc29obyBjb21wb25lbnQuXG4gICAgdGhpcy5uZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCkgPT4ge1xuICAgICAgLy8gYXNzaWduIGVsZW1lbnQgdG8gbG9jYWwgdmFyaWFibGVcbiAgICAgIHRoaXMualF1ZXJ5RWxlbWVudCA9IGpRdWVyeSh0aGlzLmVsZW1lbnQubmF0aXZlRWxlbWVudCk7XG5cbiAgICAgIC8vIGluaXRpYWxpc2UgdGhlIGNvbG9ycGlja2VyIGNvbnRyb2xcbiAgICAgIHRoaXMualF1ZXJ5RWxlbWVudC5kYXRlcGlja2VyKHRoaXMuX29wdGlvbnMpO1xuXG4gICAgICAvLyBleHRyYWN0IHRoZSBhcGlcbiAgICAgIHRoaXMuZGF0ZXBpY2tlciA9IHRoaXMualF1ZXJ5RWxlbWVudC5kYXRhKCdkYXRlcGlja2VyJyk7XG5cbiAgICAgIC8qKlxuICAgICAgICogQmluZCB0byBqUXVlcnlFbGVtZW50J3MgZXZlbnRzXG4gICAgICAgKi9cbiAgICAgIHRoaXMualF1ZXJ5RWxlbWVudFxuICAgICAgICAub24oJ2NoYW5nZScsIChhcmdzOiBhbnkpID0+IHRoaXMub25DaGFuZ2UoYXJncykpO1xuXG4gICAgICBpZiAodGhpcy5pbnRlcm5hbFZhbHVlKSB7XG4gICAgICAgIHRoaXMuZGF0ZXBpY2tlcj8uc2V0VmFsdWUodGhpcy5pbnRlcm5hbFZhbHVlLCBmYWxzZSk7XG4gICAgICB9XG4gICAgICB0aGlzLnJ1blVwZGF0ZWRPbkNoZWNrID0gdHJ1ZTtcbiAgICB9KTtcbiAgfVxuXG4gIG5nQWZ0ZXJWaWV3Q2hlY2tlZCgpIHtcbiAgICBpZiAodGhpcy5ydW5VcGRhdGVkT25DaGVjaykge1xuICAgICAgLy8gRW5zdXJlIHRoZSBlbmFibGVkL2Rpc2FibGVkIGZsYWdzIGFyZSBzZXQuXG4gICAgICBpZiAodGhpcy5pc0Rpc2FibGVkICE9PSBudWxsICYmIHRoaXMuaXNEaXNhYmxlZCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHRoaXMuZGlzYWJsZWQgPSB0aGlzLmlzRGlzYWJsZWQ7XG4gICAgICB9XG4gICAgICBpZiAodGhpcy5pc1JlYWRPbmx5ICE9PSBudWxsICYmIHRoaXMuaXNSZWFkT25seSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHRoaXMucmVhZG9ubHkgPSB0aGlzLmlzUmVhZE9ubHk7XG4gICAgICB9XG5cbiAgICAgIHRoaXMubmdab25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpID0+IHtcbiAgICAgICAgLy8gV2UgbmVlZCB0byB1cGRhdGUgdGhlIGNvbnRyb2wgQUZURVIgdGhlIG1vZGVsXG4gICAgICAgIC8vIGhhcyBiZWVuIHVwZGF0ZWQgKGFzc3VtaW5nIHRoZXJlIGlzIG9uZSksIHNvXG4gICAgICAgIC8vIGV4ZWN1dGUgdXBkYXRlZCBhZnRlciBhbmd1bGFyIGhhcyBnZW5lcmF0ZWRcbiAgICAgICAgLy8gdGhlIG1vZGVsIGFuZCB0aGUgdmlldyBtYXJrdXAuXG4gICAgICAgIGlmICh0aGlzLmRhdGVwaWNrZXIpIHtcbiAgICAgICAgICB0aGlzLmRhdGVwaWNrZXIudXBkYXRlZCh0aGlzLl9vcHRpb25zKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnJ1blVwZGF0ZWRPbkNoZWNrID0gZmFsc2U7XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogSGFuZGxlIHRoZSBjb250cm9sIGJlaW5nIGNoYW5nZWQuXG4gICAqL1xuICBvbkNoYW5nZShldmVudDogU29ob0RhdGVQaWNrZXJFdmVudCkge1xuICAgIHRoaXMuaW50ZXJuYWxWYWx1ZSA9IHRoaXMuZGF0ZXBpY2tlcj8uZWxlbWVudC52YWwoKTtcblxuICAgIC8vIFNldCB0aGUgZGF0ZSBvbiB0aGUgZXZlbnQuXG4gICAgZXZlbnQuZGF0YSA9IHRoaXMuaW50ZXJuYWxWYWx1ZTtcblxuICAgIC8vIFdoZW4gdGhlIHJlcXVlc3QgZm9yIGRhdGEgaGFzIGNvbXBsZXRlZCwgbWFrZSBzdXJlIHdlXG4gICAgLy8gdXBkYXRlIHRoZSAnZHJvcGRvd24nIGNvbnRyb2wuXG4gICAgdGhpcy5uZ1pvbmUucnVuKCgpID0+IHtcbiAgICAgIC8vIEZpcmUgdGhlIGV2ZW50XG4gICAgICB0aGlzLmNoYW5nZS5lbWl0KGV2ZW50KTtcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBPdmVycmlkZSB3cml0ZVZhbHVlIHRvIGFsbG93IHRoZSBkYXRlIHBpY2tlclxuICAgKiBlbGVtZW50IHRvIGJlIHVwZGF0ZWQgY29ycmVjdGx5LlxuICAgKlxuICAgKiBAcGFyYW0gdmFsdWUgLSB0aGUgbmV3IHZhbHVlXG4gICAqL1xuICB3cml0ZVZhbHVlKHZhbHVlOiBEYXRlIHwgc3RyaW5nIHwgbnVtYmVyIHwgc3RyaW5nW10pIHtcbiAgICBzdXBlci53cml0ZVZhbHVlKHZhbHVlKTtcbiAgICBpZiAodGhpcy5kYXRlcGlja2VyKSB7XG4gICAgICAvLyBUaGUgcHJvY2Vzc2luZyBpcyByZXF1aXJlZCB0byBlbnN1cmUgd2UgdXNlIHRoZSBjb3JyZWN0IGZvcm1hdFxuICAgICAgLy8gaW4gdGhlIGNvbnRyb2wuXG4gICAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJyAmJiB0aGlzLl9vcHRpb25zLnJhbmdlPy51c2VSYW5nZSkge1xuICAgICAgICBjb25zdCBkYXRlcyA9IHZhbHVlLnNwbGl0KCctJyk7XG4gICAgICAgIGNvbnN0IHN0YXJ0VmFsdWUgPSBuZXcgRGF0ZShkYXRlc1swXSk7XG4gICAgICAgIGNvbnN0IGVuZFZhbHVlID0gbmV3IERhdGUoZGF0ZXNbMV0pO1xuXG4gICAgICAgICh0aGlzLmRhdGVwaWNrZXIgYXMgYW55KS5zZXR0aW5ncy5yYW5nZS5zdGFydCA9IHN0YXJ0VmFsdWU7XG4gICAgICAgICh0aGlzLmRhdGVwaWNrZXIgYXMgYW55KS5zZXR0aW5ncy5yYW5nZS5lbmQgPSBlbmRWYWx1ZTtcbiAgICAgICAgdGhpcy5kYXRlcGlja2VyLnNldFZhbHVlKHN0YXJ0VmFsdWUsIGZhbHNlKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuZGF0ZXBpY2tlci5zZXRWYWx1ZSh2YWx1ZSwgZmFsc2UpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCB3aGVuIHRoZSBjb250cm9sIHN0YXR1cyBjaGFuZ2VzIHRvIG9yIGZyb20gXCJESVNBQkxFRFwiLlxuICAgKiBEZXBlbmRpbmcgb24gdGhlIHZhbHVlLCBpdCB3aWxsIGVuYWJsZSBvciBkaXNhYmxlIHRoZSBhcHByb3ByaWF0ZSBET00gZWxlbWVudC5cbiAgICovXG4gIHNldERpc2FibGVkU3RhdGUoaXNEaXNhYmxlZDogYm9vbGVhbik6IHZvaWQge1xuICAgIHRoaXMuZGlzYWJsZWQgPSBpc0Rpc2FibGVkO1xuICB9XG5cbiAgbmdPbkRlc3Ryb3koKSB7XG4gICAgdGhpcy5uZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCkgPT4ge1xuXG4gICAgICBpZiAodGhpcy5qUXVlcnlFbGVtZW50KSB7XG4gICAgICAgIHRoaXMualF1ZXJ5RWxlbWVudC5vZmYoKTtcbiAgICAgICAgdGhpcy5qUXVlcnlFbGVtZW50ID0gdW5kZWZpbmVkO1xuICAgICAgfVxuXG4gICAgICBpZiAodGhpcy5kYXRlcGlja2VyKSB7XG4gICAgICAgIHRoaXMuZGF0ZXBpY2tlci5kZXN0cm95KCk7XG4gICAgICAgIHRoaXMuZGF0ZXBpY2tlciA9IG51bGw7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogTWFya3MgdGhlIGNvbXBvbmVudHMgYXMgcmVxdWlyaW5nIGEgcmVidWlsZCBhZnRlciB0aGUgbmV4dCB1cGRhdGUuXG4gICAqL1xuICBtYXJrRm9yUmVmcmVzaCgpIHtcbiAgICAvLyBSdW4gdXBkYXRlZCBvbiB0aGUgbmV4dCB1cGRhdGVkIGNoZWNrLlxuICAgIHRoaXMucnVuVXBkYXRlZE9uQ2hlY2sgPSB0cnVlO1xuXG4gICAgLy8gLi4uIG1ha2Ugc3VyZSB0aGUgY2hhbmdlIGRldGVjdG9yIGtpY2tzIGluLCBvdGhlcndpc2UgaWYgdGhlIGlucHV0c1xuICAgIC8vIHdlcmUgY2hhbmdlIHByb2dyYW1tYXRpYWxseSB0aGUgY29tcG9uZW50IG1heSBub3QgYmUgZWxpZ2libGUgZm9yXG4gICAgLy8gdXBkYXRpbmcuXG4gICAgdGhpcy5yZWYubWFya0ZvckNoZWNrKCk7XG4gIH1cbn1cbiJdfQ==
611
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic29oby1kYXRlcGlja2VyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2lkcy1lbnRlcnByaXNlLW5nL3NyYy9saWIvZGF0ZXBpY2tlci9zb2hvLWRhdGVwaWNrZXIuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFHTCx1QkFBdUIsRUFDdkIsU0FBUyxFQUVULFlBQVksRUFDWixXQUFXLEVBQ1gsS0FBSyxFQUVMLE1BQU0sRUFHUCxNQUFNLGVBQWUsQ0FBQztBQUV2QixPQUFPLEVBQ0wsd0JBQXdCLEVBQ3hCLDJCQUEyQixFQUM1QixNQUFNLHNDQUFzQyxDQUFDOztBQVE5QyxNQUFNLE9BQU8sdUJBQXdCLFNBQVEsd0JBQXVFO0lBb2JsSDs7Ozs7O09BTUc7SUFDSCxZQUFvQixPQUFtQixFQUM3QixNQUFjLEVBQ2YsR0FBc0I7UUFDN0IsS0FBSyxFQUFFLENBQUM7UUFIVSxZQUFPLEdBQVAsT0FBTyxDQUFZO1FBQzdCLFdBQU0sR0FBTixNQUFNLENBQVE7UUFDZixRQUFHLEdBQUgsR0FBRyxDQUFtQjtRQS9hdkIsZUFBVSxHQUFhLFNBQVMsQ0FBQztRQUVqQyxlQUFVLEdBQWEsU0FBUyxDQUFDO1FBRWpDLGFBQVEsR0FBMEIsRUFBRSxDQUFDO1FBRXJDLGlCQUFZLEdBQVksS0FBSyxDQUFDO1FBd1Z0Qzs7OztXQUlHO1FBQ0gsOEZBQThGO1FBQ3BGLFdBQU0sR0FBRyxJQUFJLFlBQVksRUFBdUIsQ0FBQztRQUUzRDs7V0FFRztRQUNPLGVBQVUsR0FBRyxJQUFJLFlBQVksRUFBRSxDQUFDO1FBRTFDOztXQUVHO1FBQ08sZUFBVSxHQUFHLElBQUksWUFBWSxFQUFFLENBQUM7UUFFMUM7O1dBRUc7UUFDTyx3QkFBbUIsR0FBRyxJQUFJLFlBQVksRUFBRSxDQUFDO1FBRW5EOztXQUVHO1FBQ08sa0JBQWEsR0FBRyxJQUFJLFlBQVksRUFBb0MsQ0FBQztJ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Z0JBVU8sTUFBTTtzQkFBbEIsS0FBSztnQkFZTyxNQUFNO3NCQUFsQixLQUFLO2dCQVVPLFlBQVk7c0JBQXhCLEtBQUs7Z0JBVU8sTUFBTTtzQkFBbEIsS0FBSztnQkFVTyxRQUFRO3NCQUFwQixLQUFLO2dCQVVPLE9BQU87c0JBQW5CLEtBQUs7Z0JBY08sUUFBUTtzQkFBcEIsS0FBSztnQkFnQ08sUUFBUTtzQkFBcEIsS0FBSztnQkFpQ0ksTUFBTTtzQkFBZixNQUFNO2dCQUtHLFVBQVU7c0JBQW5CLE1BQU07Z0JBS0csVUFBVTtzQkFBbkIsTUFBTTtnQkFLRyxtQkFBbUI7c0JBQTVCLE1BQU07Z0JBS0csYUFBYTtzQkFBdEIsTUFBTTtnQkF1QzhCLFlBQVk7c0JBQWhELFdBQVc7dUJBQUMsa0JBQWtCO2dCQUdNLFlBQVk7c0JBQWhELFdBQVc7dUJBQUMsa0JBQWtCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQWZ0ZXJWaWV3Q2hlY2tlZCxcbiAgQWZ0ZXJWaWV3SW5pdCxcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gIENvbXBvbmVudCxcbiAgRWxlbWVudFJlZixcbiAgRXZlbnRFbWl0dGVyLFxuICBIb3N0QmluZGluZyxcbiAgSW5wdXQsXG4gIE9uRGVzdHJveSxcbiAgT3V0cHV0LFxuICBOZ1pvbmUsXG4gIENoYW5nZURldGVjdG9yUmVmXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5pbXBvcnQge1xuICBCYXNlQ29udHJvbFZhbHVlQWNjZXNzb3IsXG4gIHByb3ZpZGVDb250cm9sVmFsdWVBY2Nlc3NvclxufSBmcm9tICcuLi91dGlscy9iYXNlLWNvbnRyb2wtdmFsdWUtYWNjZXNzb3InO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdpbnB1dFtzb2hvLWRhdGVwaWNrZXJdJywgLy8gZXNsaW50LWRpc2FibGUtbGluZVxuICB0ZW1wbGF0ZTogJzxuZy1jb250ZW50PjwvbmctY29udGVudD4nLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgcHJvdmlkZXJzOiBbcHJvdmlkZUNvbnRyb2xWYWx1ZUFjY2Vzc29yKFNvaG9EYXRlUGlja2VyQ29tcG9uZW50KV1cbn0pXG5leHBvcnQgY2xhc3MgU29ob0RhdGVQaWNrZXJDb21wb25lbnQgZXh0ZW5kcyBCYXNlQ29udHJvbFZhbHVlQWNjZXNzb3I8c3RyaW5nIHwgbnVtYmVyIHwgc3RyaW5nW10gfCBEYXRlIHwgdW5kZWZpbmVkPiBpbXBsZW1lbnRzIEFmdGVyVmlld0luaXQsIEFmdGVyVmlld0NoZWNrZWQsIE9uRGVzdHJveSB7XG5cbiAgLyoqXG4gICAqIEZsYWcgdG8gZm9yY2UgYW4gdXBkYXRlIG9mIHRoZSBjb250cm9sIGFmdGVyIHRoZSB2aWV3IGlzIGNyZWF0ZWQuXG4gICAqL1xuICBwcml2YXRlIHJ1blVwZGF0ZWRPbkNoZWNrPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogTG9jYWwgdmFyaWFibGVzXG4gICAqL1xuICBwcml2YXRlIGpRdWVyeUVsZW1lbnQ/OiBKUXVlcnk7XG5cbiAgcHJpdmF0ZSBkYXRlcGlja2VyPzogU29ob0RhdGVQaWNrZXJTdGF0aWMgfCBudWxsO1xuXG4gIHByaXZhdGUgaXNEaXNhYmxlZD86IGJvb2xlYW4gPSB1bmRlZmluZWQ7XG5cbiAgcHJpdmF0ZSBpc1JlYWRPbmx5PzogYm9vbGVhbiA9IHVuZGVmaW5lZDtcblxuICBwcml2YXRlIF9vcHRpb25zOiBTb2hvRGF0ZVBpY2tlck9wdGlvbnMgPSB7fTtcblxuICBwcml2YXRlIHVwZGF0ZUxlZ2VuZDogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIC8qKlxuICAgKiBJbmRpY2F0ZXMgdG8gZGlzcGxheSB0aGUgdGltZXBpY2tlcjsgZGVmYXVsdHMgdG8gZmFsc2UuXG4gICAqL1xuICBASW5wdXQoKSBzZXQgc2hvd1RpbWUoc2hvd1RpbWU6IGJvb2xlYW4pIHtcbiAgICB0aGlzLl9vcHRpb25zLnNob3dUaW1lID0gc2hvd1RpbWU7XG4gICAgaWYgKHRoaXMuZGF0ZXBpY2tlcikge1xuICAgICAgdGhpcy5tYXJrRm9yUmVmcmVzaCgpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBJZiB0cnVlIGN1cnJlbnQgdGltZSB3aWxsIGJlIHVzZWQgZm9yIHRoZSB0aW1lIHBvcnRpb24gb3RoZXJ3aXNlIDEyOjAwIG1pZG5pZ2h0IGlzIHVzZWQuXG4gICAqL1xuICBASW5wdXQoKSBzZXQgdXNlQ3VycmVudFRpbWUodXNlQ3VycmVudFRpbWU6IGJvb2xlYW4pIHtcbiAgICB0aGlzLl9vcHRpb25zLnVzZUN1cnJlbnRUaW1lID0gdXNlQ3VycmVudFRpbWU7XG4gICAgaWYgKHRoaXMuZGF0ZXBpY2tlcikge1xuICAgICAgdGhpcy5tYXJrRm9yUmVmcmVzaCgpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBJbmRpY2F0ZXMgdGhlIHBhdHRlcm4gZm9yIHRoZSB0aW1lIGZvcm1hdC5cbiAgICovXG4gIEBJbnB1dCgpIHNldCB0aW1lRm9ybWF0KHRpbWVGb3JtYXQ6IHN0cmluZykge1xuICAgIHRoaXMuX29wdGlvbnMudGltZUZvcm1hdCA9IHRpbWVGb3JtYXQ7XG4gICAgaWYgKHRoaXMuZGF0ZXBpY2tlcikge1xuICAgICAgdGhpcy5tYXJrRm9yUmVmcmVzaCgpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBBbiBpbnRlZ2VyIGZyb20gMSB0byA2MDsgbXVsdGlwbGVzIG9mIHRoaXMgdmFsdWUgYXJlIGRpc3BsYXllZCBhcyBvcHRpb25zIGluIHRoZSBtaW51dGVzIGRyb3Bkb3duLlxuICAgKi9cbiAgQElucHV0KCkgc2V0IG1pbnV0ZUludGVydmFsKG1pbnV0ZUludGVydmFsOiBudW1iZXIpIHtcbiAgICB0aGlzLl9vcHRpb25zLm1pbnV0ZUludGVydmFsID0gbWludXRlSW50ZXJ2YWw7XG4gICAgaWYgKHRoaXMuZGF0ZXBpY2tlcikge1xuICAgICAgdGhpcy5tYXJrRm9yUmVmcmVzaCgpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBBbiBpbnRlZ2VyIGZyb20gMSB0byA2MDsgbXVsdGlwbGVzIG9mIHRoaXMgdmFsdWUgYXJlIGRpc3BsYXllZCBhcyBvcHRpb25zIGluIHRoZSBzZWNvbmRzIGRyb3Bkb3duLlxuICAgKi9cbiAgQElucHV0KCkgc2V0IHNlY29uZEludGVydmFsKHNlY29uZEludGVydmFsOiBudW1iZXIpIHtcbiAgICB0aGlzLl9vcHRpb25zLnNlY29uZEludGVydmFsID0gc2Vjb25kSW50ZXJ2YWw7XG4gICAgaWYgKHRoaXMuZGF0ZXBpY2tlcikge1xuICAgICAgdGhpcy5tYXJrRm9yUmVmcmVzaCgpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBDaGFuZ2UgdGhlIGRhdGVwaWNrZXJzIGZpcnN0IGRheSBvZiB0aGUgd2Vlay5cbiAgICogQW4gaW50ZWdlciBmcm9tIDAgLSA2IHdoZXJlIDAgPSBTdW5kYXksIDEgPSBNb25kYXksIGV0Yy4uLlxuICAgKi9cbiAgQElucHV0KCkgc2V0IGZpcnN0RGF5T2ZXZWVrKGZpcnN0RGF5T2ZXZWVrOiBTb2hvRGF0ZVBpY2tlckRheU9mV2Vlaykge1xuICAgIHRoaXMuX29wdGlvbnMuZmlyc3REYXlPZldlZWsgPSBmaXJzdERheU9mV2VlaztcbiAgICBpZiAodGhpcy5kYXRlcGlja2VyKSB7XG4gICAgICB0aGlzLm1hcmtGb3JSZWZyZXNoKCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIElmIHRydWUgdGhlIGZpZWxkIHdpbGwgYmUgc2l6ZWQgdG8gdGhlIHdpZHRoIG9mIHRoZSBkYXRlLlxuICAgKi9cbiAgQElucHV0KCkgc2V0IGF1dG9TaXplKGF1dG9TaXplOiBib29sZWFuKSB7XG4gICAgdGhpcy5fb3B0aW9ucy5hdXRvU2l6ZSA9IGF1dG9TaXplO1xuICAgIGlmICh0aGlzLmRhdGVwaWNrZXIpIHtcbiAgICAgIHRoaXMubWFya0ZvclJlZnJlc2goKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogU2hvdyB0aGUgdG9kYXkgYnV0dG9uIG9uIHRoZSBoZWFkZXIuXG4gICAqL1xuICBASW5wdXQoKSBzZXQgc2hvd1RvZGF5KHNob3dUb2RheTogYm9vbGVhbikge1xuICAgIHRoaXMuX29wdGlvbnMuc2hvd1RvZGF5ID0gc2hvd1RvZGF5O1xuICAgIGlmICh0aGlzLmRhdGVwaWNrZXIpIHtcbiAgICAgIHRoaXMubWFya0ZvclJlZnJlc2goKTtcbiAgICB9XG4gIH1cblxuICAvKiogQWRkIGV4dHJhIGF0dHJpYnV0ZXMgbGlrZSBpZCdzIHRvIHRoZSBjb21wb25lbnQgKiovXG4gIEBJbnB1dCgpIHNldCBhdHRyaWJ1dGVzKGF0dHJpYnV0ZXM6IEFycmF5PE9iamVjdD4gfCBPYmplY3QpIHtcbiAgICB0aGlzLl9vcHRpb25zLmF0dHJpYnV0ZXMgPSBhdHRyaWJ1dGVzO1xuICAgIGlmICh0aGlzLmRhdGVwaWNrZXIpIHtcbiAgICAgIHRoaXMubWFya0ZvclJlZnJlc2goKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogSW5kaWNhdGVzIG1vZGUsIGVpdGhlciAnc3RhbmRhcmQnIG9yICdyYW5nZScuXG4gICAqL1xuICBASW5wdXQoKSBzZXQgbW9kZShtb2RlOiBTb2hvRGF0ZVBpY2tlck1vZGUpIHtcbiAgICB0aGlzLl9vcHRpb25zLm1vZGUgPSBtb2RlO1xuXG4gICAgaWYgKG1vZGUgPT09ICdyYW5nZScpIHtcbiAgICAgIGlmICh0aGlzLl9vcHRpb25zLnJhbmdlKSB7XG4gICAgICAgIHRoaXMuX29wdGlvbnMucmFuZ2UudXNlUmFuZ2UgPSB0cnVlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5fb3B0aW9ucy5yYW5nZSA9IHt9O1xuICAgICAgICB0aGlzLl9vcHRpb25zLnJhbmdlLnVzZVJhbmdlID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKHRoaXMuX29wdGlvbnMucmFuZ2UpIHtcbiAgICAgICAgdGhpcy5fb3B0aW9ucy5yYW5nZS51c2VSYW5nZSA9IGZhbHNlO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAodGhpcy5kYXRlcGlja2VyKSB7XG4gICAgICB0aGlzLm1hcmtGb3JSZWZyZXNoKCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFVzZSByYW5nZSBvZiB0d28gZGF0ZXMgb3B0aW9ucy5cbiAgICovXG4gIEBJbnB1dCgpIHNldCByYW5nZShyYW5nZTogU29ob0RhdGVQaWNrZXJSYW5nZSkge1xuICAgIHRoaXMuX29wdGlvbnMucmFuZ2UgPSByYW5nZTtcblxuICAgIGlmICh0aGlzLmRhdGVwaWNrZXIpIHtcbiAgICAgIHRoaXMubWFya0ZvclJlZnJlc2goKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogSWYgYSBub24tbWF0Y2hpbmcgbWludXRlcyB2YWx1ZSBpcyBlbnRlcmVkLCB3aWxsIHJvdW5kIHRoZSBtaW51dGVzIHZhbHVlIHRvIHRoZSBuZWFyZXN0IGludGVydmFsIG9uIHRoZSBibHVyIGV2ZW50LlxuICAgKi9cbiAgQElucHV0KCkgc2V0IHJvdW5kVG9JbnRlcnZhbChyb3VuZFRvSW50ZXJ2YWw6IGJvb2xlYW4pIHtcbiAgICB0aGlzLl9vcHRpb25zLnJvdW5kVG9JbnRlcnZhbCA9IHJvdW5kVG9JbnRlcnZhbDtcblxuICAgIGlmICh0aGlzLmRhdGVwaWNrZXIpIHtcbiAgICAgIHRoaXMubWFya0ZvclJlZnJlc2goKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogSW5kaWNhdGVzIHRoZSBwYXR0ZXJuIGZvciB0aGUgZGF0ZSBmb3JtYXQgb3IgdGhlIHZhbHVlIG9mICdsb2NhbGUnLlxuICAgKi9cbiAgQElucHV0KCkgc2V0IGRhdGVGb3JtYXQoZGF0ZUZvcm1hdDogc3RyaW5nKSB7XG4gICAgdGhpcy5fb3B0aW9ucy5kYXRlRm9ybWF0ID0gZGF0ZUZvcm1hdDtcbiAgICBpZiAodGhpcy5kYXRlcGlja2VyKSB7XG4gICAgICB0aGlzLm1hcmtGb3JSZWZyZXNoKCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEluZGljYXRlcyBhIHBsYWNlaG9sZGVyIGZvciBhbiBlbXB0eSB2YWx1ZTsgZGVmYXVsdHMgdG8gZmFsc2UuXG4gICAqL1xuICBASW5wdXQoKSBzZXQgcGxhY2Vob2xkZXIocGxhY2Vob2xkZXI6IHN0cmluZykge1xuICAgIHRoaXMuX29wdGlvbnMucGxhY2Vob2xkZXIgPSBwbGFjZWhvbGRlcjtcbiAgICBpZiAodGhpcy5kYXRlcGlja2VyKSB7XG4gICAgICB0aGlzLm1hcmtGb3JSZWZyZXNoKCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEluZGljYXRlcyBhbiBvYmplY3QgY29udGFpbmluZyBhIGRhdGUgb3IgcmFuZ2Ugb2YgZGF0ZXMgdGhhdCBhcmUgZW5hYmxlZCBvciBkaXNhYmxlZC5cbiAgICovXG4gIEBJbnB1dCgpIHNldCBkaXNhYmxlKGRpc2FibGU6IGFueSkge1xuICAgIHRoaXMuX29wdGlvbnMuZGlzYWJsZSA9IGRpc2FibGU7XG4gICAgaWYgKHRoaXMuZGF0ZXBpY2tlcikge1xuICAgICAgdGhpcy5tYXJrRm9yUmVmcmVzaCgpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBJbmRpY2F0ZXMgYSBsZWdlbmQgaXMgc2hvd24gdG8gYXNzb2NpYXRlIGRhdGVzXG4gICAqL1xuICBASW5wdXQoKSBzZXQgc2hvd0xlZ2VuZChzaG93TGVnZW5kOiBib29sZWFuKSB7XG4gICAgdGhpcy5fb3B0aW9ucy5zaG93TGVnZW5kID0gc2hvd0xlZ2VuZDtcbiAgICBpZiAodGhpcy5kYXRlcGlja2VyKSB7XG4gICAgICB0aGlzLm1hcmtGb3JSZWZyZXNoKCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEluZGljYXRlcyBpZiB0aGUgbW9udGggYW5kIHllYXIgd2lsbCByZW5kZXIgYXMgZHJvcGRvd25zLlxuICAgKi9cbiAgQElucHV0KCkgc2V0IHNob3dNb250aFllYXJQaWNrZXIoc2hvd01vbnRoWWVhclBpY2tlcjogYm9vbGVhbikge1xuICAgIHRoaXMuX29wdGlvbnMuc2hvd01vbnRoWWVhclBpY2tlciA9IHNob3dNb250aFllYXJQaWNrZXI7XG4gICAgaWYgKHRoaXMuZGF0ZXBpY2tlcikge1xuICAgICAgdGhpcy5tYXJrRm9yUmVmcmVzaCgpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBJbmRpY2F0ZXMgaWYgdGhlIGRheXMgcG9ydGlvbiBvZiB0aGUgY2FsZW5kYXIgd2lsbCBiZSBoaWRkZW4uXG4gICAqL1xuICBASW5wdXQoKSBzZXQgaGlkZURheXMoaGlkZURheXM6IGJvb2xlYW4pIHtcbiAgICB0aGlzLl9vcHRpb25zLmhpZGVEYXlzID0gaGlkZURheXM7XG4gICAgaWYgKHRoaXMuZGF0ZXBpY2tlcikge1xuICAgICAgdGhpcy5tYXJrRm9yUmVmcmVzaCgpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBUaGUgbnVtYmVyIG9mIHllYXJzIGFoZWFkIHRvIHNob3cgaW4gdGhlIG1vbnRoL3llYXIgcGlja2VyIHNob3VsZCB0b3RhbCA5IHdpdGggeWVhcnNCYWNrLlxuICAgKi9cbiAgQElucHV0KCkgc2V0IHllYXJzQWhlYWQoeWVhcnNBaGVhZDogbnVtYmVyKSB7XG4gICAgdGhpcy5fb3B0aW9ucy55ZWFyc0FoZWFkID0geWVhcnNBaGVhZDtcbiAgICBpZiAodGhpcy5kYXRlcGlja2VyKSB7XG4gICAgICB0aGlzLm1hcmtGb3JSZWZyZXNoKCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFRoZSBudW1iZXIgb2YgeWVhcnMgYmFjayB0byBzaG93IGluIHRoZSBtb250aC95ZWFyIHBpY2tlciBzaG91bGQgdG90YWwgOSB3aXRoIHllYXJzQWhlYWQuXG4gICAqL1xuICBASW5wdXQoKSBzZXQgeWVhcnNCYWNrKHllYXJzQmFjazogbnVtYmVyKSB7XG4gICAgdGhpcy5fb3B0aW9ucy55ZWFyc0JhY2sgPSB5ZWFyc0JhY2s7XG4gICAgaWYgKHRoaXMuZGF0ZXBpY2tlcikge1xuICAgICAgdGhpcy5tYXJrRm9yUmVmcmVzaCgpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBPcHRpb25zIGZvciBob3cgdGhlIGxlZ2VuZCBkaXNwbGF5c1xuICAgKi9cbiAgQElucHV0KCkgc2V0IGxlZ2VuZChsZWdlbmQ6IEFycmF5PFNvaG9EYXRlUGlja2VyTGVnZW5kPikge1xuICAgIHRoaXMuX29wdGlvbnMubGVnZW5kID0gbGVnZW5kO1xuICAgIGlmICh0aGlzLmRhdGVwaWNrZXIpIHtcbiAgICAgICh0aGlzLmRhdGVwaWNrZXIgYXMgYW55KS5zZXR0aW5ncy5sZWdlbmQgPSBsZWdlbmQ7XG4gICAgICB0aGlzLnVwZGF0ZUxlZ2VuZCA9IHRydWU7XG4gICAgICB0aGlzLnJlZi5tYXJrRm9yQ2hlY2soKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogVGhlIG5hbWUgb2YgdGhlIGxvY2FsZSB0byB1c2UgZm9yIHRoaXMgaW5zdGFuY2UuIElmIG5vdCBzZXQsIHRoZSBjdXJyZW50IGxvY2FsZSB3aWxsIGJlIHVzZWQuXG4gICAqL1xuICBASW5wdXQoKSBzZXQgbG9jYWxlKGxvY2FsZTogc3RyaW5nKSB7XG4gICAgdGhpcy5fb3B0aW9ucy5sb2NhbGUgPSBsb2NhbGU7XG4gICAgaWYgKHRoaXMuZGF0ZXBpY2tlcikge1xuICAgICAgdGhpcy5tYXJrRm9yUmVmcmVzaCgpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBDYWxlbmRhcidzIG5hbWUuIEN1cnJlbnRseSBqdXN0ICdncmVnb3JpYW4nIG9yICdpc2xhbWljLXVtYWxxdXJhJ1xuICAgKi9cbiAgQElucHV0KCkgc2V0IGNhbGVuZGFyTmFtZShjYWxlbmRhck5hbWU6IFNvaG9EYXRlUGlja2VyQ2FsZW5kYXJOYW1lKSB7XG4gICAgdGhpcy5fb3B0aW9ucy5jYWxlbmRhck5hbWUgPSBjYWxlbmRhck5hbWU7XG4gICAgaWYgKHRoaXMuZGF0ZXBpY2tlcikge1xuICAgICAgdGhpcy5tYXJrRm9yUmVmcmVzaCgpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBJbmRpY2F0ZXMgaWYgdGhlIGRhdGVzIHdpbGwgdXNlIFVUQyBmb3JtYXRcbiAgICovXG4gIEBJbnB1dCgpIHNldCB1c2VVVEModXNlVVRDOiBib29sZWFuKSB7XG4gICAgdGhpcy5fb3B0aW9ucy51c2VVVEMgPSB1c2VVVEM7XG4gICAgaWYgKHRoaXMuZGF0ZXBpY2tlcikge1xuICAgICAgdGhpcy5tYXJrRm9yUmVmcmVzaCgpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBTZXQgdGhlIGlucHV0IHRvIHRhYmJhYmxlXG4gICAqL1xuICBASW5wdXQoKSBzZXQgdGFiYmFibGUodGFiYmFibGU6IGJvb2xlYW4pIHtcbiAgICB0aGlzLl9vcHRpb25zLnRhYmJhYmxlID0gdGFiYmFibGU7XG4gICAgaWYgKHRoaXMuZGF0ZXBpY2tlcikge1xuICAgICAgdGhpcy5tYXJrRm9yUmVmcmVzaCgpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBTZXRzIHRoZSBvcHRpb25zIGZvciB0aGUgZGF0ZSBwaWNrZXJcbiAgICovXG4gIEBJbnB1dCgpIHNldCBvcHRpb25zKG9wdGlvbnM6IFNvaG9EYXRlUGlja2VyT3B0aW9ucykge1xuICAgIHRoaXMuX29wdGlvbnMgPSBvcHRpb25zO1xuICAgIGlmICh0aGlzLmRhdGVwaWNrZXIpIHtcbiAgICAgIHRoaXMubWFya0ZvclJlZnJlc2goKTtcbiAgICB9XG4gIH1cblxuICBnZXQgb3B0aW9ucygpOiBTb2hvRGF0ZVBpY2tlck9wdGlvbnMge1xuICAgIHJldHVybiB0aGlzLl9vcHRpb25zO1xuICB9XG5cbiAgLyoqXG4gICAqIEVuYWJsZXMgb3IgZGlzYWJsZXMgdGhlIGNvbnRyb2xcbiAgICovXG4gIEBJbnB1dCgpIHNldCBkaXNhYmxlZCh2YWx1ZTogYm9vbGVhbiB8IHVuZGVmaW5lZCkge1xuICAgIC8vIEF2b2lkIHNldHRpbmcgdGhlIHZhbHVlIGlmIG5vdCByZXF1aXJlZCxcbiAgICAvLyB0aGlzIGNhdXNlcyBpc3N1ZSBvbiBjb21wb25lbnQgaW5pdGlhbGlzYXRpb25cbiAgICAvLyBhcyBlbmFibGUoKSBpcyBjYWxsZWQgYnkgYm90aCBkaXNhYmxlZCgpXG4gICAgLy8gYW5kIHJlYWRvbmx5KCkuXG4gICAgaWYgKHRoaXMuZGF0ZXBpY2tlciA9PSBudWxsKSB7XG4gICAgICB0aGlzLmlzRGlzYWJsZWQgPSB2YWx1ZTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBTZXQgdGhlIHN0YXR1cyBsb2NhbGx5IChmb3IgcmVmcmVzaGluZylcbiAgICB0aGlzLmlzRGlzYWJsZWQgPSB2YWx1ZTtcblxuICAgIGlmICh2YWx1ZSkge1xuICAgICAgdGhpcy5uZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCkgPT4ge1xuICAgICAgICB0aGlzLmRhdGVwaWNrZXI/LmRpc2FibGUoKTtcbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLm5nWm9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKSA9PiB7XG4gICAgICAgIHRoaXMuZGF0ZXBpY2tlcj8uZW5hYmxlKCk7XG4gICAgICAgIHRoaXMuaXNSZWFkT25seSA9IGZhbHNlO1xuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgZ2V0IGRpc2FibGVkKCk6IGJvb2xlYW4gfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLmlzRGlzYWJsZWQ7XG4gIH1cblxuICAvKipcbiAgICogU2V0cyB0aGUgY29udHJvbCB0byByZWFkb25seVxuICAgKi9cbiAgQElucHV0KCkgc2V0IHJlYWRvbmx5KHZhbHVlOiBib29sZWFuIHwgdW5kZWZpbmVkKSB7XG4gICAgLy8gQXZvaWQgc2V0dGluZyB0aGUgdmFsdWUgaWYgbm90IHJlcXVpcmVkLFxuICAgIC8vIHRoaXMgY2F1c2VzIGlzc3VlIG9uIGNvbXBvbmVudCBpbml0aWFsaXNhdGlvblxuICAgIC8vIGFzIGVuYWJsZSgpIGlzIGNhbGxlZCBieSBib3RoIGRpc2FibGVkKClcbiAgICAvLyBhbmQgcmVhZG9ubHkoKS5cbiAgICBpZiAodGhpcy5kYXRlcGlja2VyID09IG51bGwpIHtcbiAgICAgIHRoaXMuaXNSZWFkT25seSA9IHZhbHVlO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIFNldCB0aGUgc3RhdHVzIGxvY2FsbHkgKGZvciByZWZyZXNoaW5nKVxuICAgIHRoaXMuaXNSZWFkT25seSA9IHZhbHVlO1xuXG4gICAgaWYgKHZhbHVlKSB7XG4gICAgICB0aGlzLm5nWm9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKSA9PiB0aGlzLmRhdGVwaWNrZXI/LnJlYWRvbmx5KCkpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLm5nWm9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKSA9PiB7XG4gICAgICAgIHRoaXMuZGF0ZXBpY2tlcj8uZW5hYmxlKCk7XG4gICAgICAgIHRoaXMuaXNEaXNhYmxlZCA9IGZhbHNlO1xuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgZ2V0IHJlYWRvbmx5KCk6IGJvb2xlYW4gfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLmlzUmVhZE9ubHk7XG4gIH1cblxuICAvKipcbiAgICogQ2FsbGVkIHdoZW4gdGhlIGRhdGVwaWNrZXIgdmFsdWUgY2hhbmdlc1xuICAgKlxuICAgKiBAdG9kbyByZXBsYWNlIG92ZXJyaWRlIG9mIG5hdGl2ZSBhdHRyaWJ1dGVcbiAgICovXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAYW5ndWxhci1lc2xpbnQvbm8tb3V0cHV0LXJlbmFtZSwgQGFuZ3VsYXItZXNsaW50L25vLW91dHB1dC1uYXRpdmVcbiAgQE91dHB1dCgpIGNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8U29ob0RhdGVQaWNrZXJFdmVudD4oKTtcblxuICAvKipcbiAgICogQ2FsbGVkIHdoZW4gdGhlIGRhdGVwaWNrZXIgaXMgY2xvc2VkLlxuICAgKi9cbiAgQE91dHB1dCgpIGxpc3RjbG9zZWQgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cbiAgLyoqXG4gICAqIENhbGxlZCB3aGVuIHRoZSBkYXRlcGlja2VyIGlzIG9wZW5lZC5cbiAgICovXG4gIEBPdXRwdXQoKSBsaXN0b3BlbmVkID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXG4gIC8qKlxuICAgKiBDYWxsZWQgYmVmb3JlIGEgbW9udGggd2lsbCBiZSByZW5kZXJlZCBpbiB0aGUgZGF0ZXBpY2tlclxuICAgKi9cbiAgQE91dHB1dCgpIGJlZm9yZW1vbnRocmVuZGVyZWQgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cbiAgLyoqXG4gICAqIENhbGxlZCBhZnRlciBhIG1vbnRoIGhhcyBiZWVuIHJlbmRlcmVkIGluIHRoZSBkYXRlcGlja2VyXG4gICAqL1xuICBAT3V0cHV0KCkgbW9udGhyZW5kZXJlZCA9IG5ldyBFdmVudEVtaXR0ZXI8U29ob0RhdGVQaWNrZXJNb250aFJlbmRlcmVkRXZlbnQ+KCk7XG5cbiAgLyoqXG4gICAqIFB1YmxpYyBBUElcbiAgICovXG5cbiAgcHVibGljIHNldFZhbHVlKHZhbHVlOiBzdHJpbmcgfCBEYXRlIHwgbnVtYmVyIHwgc3RyaW5nW10sIHRyaWdnZXI6IGJvb2xlYW4sIGlzVGltZTogYm9vbGVhbikge1xuICAgIHRoaXMuZGF0ZXBpY2tlcj8uc2V0VmFsdWUodmFsdWUsIHRyaWdnZXIsIGlzVGltZSk7XG4gIH1cblxuICBwdWJsaWMgZ2V0VmFsdWUoYXNEYXRlOiBib29sZWFuID0gZmFsc2UpOiBzdHJpbmcgfCBEYXRlIHwgbnVtYmVyIHwgc3RyaW5nW10ge1xuICAgIGlmIChhc0RhdGUgJiYgKHR5cGVvZiB0aGlzLmludGVybmFsVmFsdWUgPT09ICdzdHJpbmcnKSkge1xuICAgICAgY29uc3QgY2FsZW5kYXIgPSBTb2hvLkxvY2FsZS5jYWxlbmRhcigpO1xuICAgICAgY29uc3QgZGF0ZUZvcm1hdCA9IHRoaXMuX29wdGlvbnMuZGF0ZUZvcm1hdCB8fCBjYWxlbmRhci5kYXRlRm9ybWF0LnNob3J0O1xuICAgICAgY29uc3QgdGltZUZvcm1hdCA9IHRoaXMuX29wdGlvbnMudGltZUZvcm1hdCB8fCBjYWxlbmRhci50aW1lRm9ybWF0O1xuICAgICAgbGV0IGZvcm1hdCA9IGRhdGVGb3JtYXQ7XG4gICAgICBpZiAodGhpcy5fb3B0aW9ucy5zaG93VGltZSkge1xuICAgICAgICBmb3JtYXQgKz0gJ1QnICsgdGltZUZvcm1hdDtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIFNvaG8uTG9jYWxlLnBhcnNlRGF0ZSh0aGlzLmludGVybmFsVmFsdWUgfHwgJycsIGZvcm1hdCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuaW50ZXJuYWxWYWx1ZSB8fCAnJztcbiAgfVxuXG4gIHB1YmxpYyBmb2N1cygpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5kYXRlcGlja2VyKSB7XG4gICAgICB0aGlzLmRhdGVwaWNrZXIuZWxlbWVudC50cmlnZ2VyKCdmb2N1cycpO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBvcGVuQ2FsZW5kYXIoKTogdm9pZCB7XG4gICAgdGhpcy5kYXRlcGlja2VyPy5vcGVuQ2FsZW5kYXIoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBCaW5kIGF0dHJpYnV0ZXMgdG8gdGhlIGhvc3QgaW5wdXQgZWxlbWVudFxuICAgKi9cbiAgQEhvc3RCaW5kaW5nKCdjbGFzcy5kYXRlcGlja2VyJykgZ2V0IGlzRGF0ZXBpY2tlcigpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICBASG9zdEJpbmRpbmcoJ2NsYXNzLnRpbWVwaWNrZXInKSBnZXQgaXNUaW1lcGlja2VyKCkge1xuICAgIHJldHVybiAhIXRoaXMuX29wdGlvbnMuc2hvd1RpbWU7XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlcyBhbiBpbnN0YW5jZSBvZiBTb2hvRGF0ZVBpY2tlckNvbXBvbmVudC5cbiAgICpcbiAgICogQHBhcmFtIGVsZW1lbnQgdGhlIGVsZW1lbnQgdGhpcyBjb21wb25lbnQgZW5jYXBzdWxhdGVzLlxuICAgKiBAcGFyYW0gbmdab25lIHRoZSBhbmd1bGFyIHpvbmUgZm9yIHRoaXMgY29tcG9uZW50LlxuICAgKiBAcGFyYW0gcmVmIHJlZmVyZW5jZSB0byB0aGUgY2hhbmdlIGRldGVjdG9yXG4gICAqL1xuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGVsZW1lbnQ6IEVsZW1lbnRSZWYsXG4gICAgcHJpdmF0ZSBuZ1pvbmU6IE5nWm9uZSxcbiAgICBwdWJsaWMgcmVmOiBDaGFuZ2VEZXRlY3RvclJlZikge1xuICAgIHN1cGVyKCk7XG4gIH1cblxuICBuZ0FmdGVyVmlld0luaXQoKSB7XG5cbiAgICAvLyBjYWxsIG91dHNpZGUgdGhlIGFuZ3VsYXIgem9uZSBzbyBjaGFuZ2UgZGV0ZWN0aW9uXG4gICAgLy8gaXNuJ3QgdHJpZ2dlcmVkIGJ5IHRoZSBzb2hvIGNvbXBvbmVudC5cbiAgICB0aGlzLm5nWm9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKSA9PiB7XG4gICAgICAvLyBhc3NpZ24gZWxlbWVudCB0byBsb2NhbCB2YXJpYWJsZVxuICAgICAgdGhpcy5qUXVlcnlFbGVtZW50ID0galF1ZXJ5KHRoaXMuZWxlbWVudC5uYXRpdmVFbGVtZW50KTtcblxuICAgICAgLy8gaW5pdGlhbGlzZSB0aGUgY29sb3JwaWNrZXIgY29udHJvbFxuICAgICAgdGhpcy5qUXVlcnlFbGVtZW50LmRhdGVwaWNrZXIodGhpcy5fb3B0aW9ucyk7XG5cbiAgICAgIC8vIGV4dHJhY3QgdGhlIGFwaVxuICAgICAgdGhpcy5kYXRlcGlja2VyID0gdGhpcy5qUXVlcnlFbGVtZW50LmRhdGEoJ2RhdGVwaWNrZXInKTtcblxuICAgICAgLyoqXG4gICAgICAgKiBCaW5kIHRvIGpRdWVyeUVsZW1lbnQncyBldmVudHNcbiAgICAgICAqL1xuICAgICAgdGhpcy5qUXVlcnlFbGVtZW50XG4gICAgICAgIC5vbignY2hhbmdlJywgKGFyZ3M6IGFueSkgPT4gdGhpcy5vbkNoYW5nZShhcmdzKSlcbiAgICAgICAgLm9uKCdsaXN0Y2xvc2VkJywgKCkgPT4gdGhpcy5vbkxpc3RDbG9zZWQoKSlcbiAgICAgICAgLm9uKCdsaXN0b3BlbmVkJywgKCkgPT4gdGhpcy5vbkxpc3RPcGVuZWQoKSlcbiAgICAgICAgLm9uKCdiZWZvcmVtb250aHJlbmRlcmVkJywgKCkgPT4gdGhpcy5vbkJlZm9yZU1vbnRoUmVuZGVyZWQoKSlcbiAgICAgICAgLm9uKCdtb250aHJlbmRlcmVkJywgKGUsIGFyZ3MpID0+IHRoaXMub25Nb250aFJlbmRlcmVkKGFyZ3MpKVxuXG4gICAgICBpZiAodGhpcy5pbnRlcm5hbFZhbHVlKSB7XG4gICAgICAgIHRoaXMuZGF0ZXBpY2tlcj8uc2V0VmFsdWUodGhpcy5pbnRlcm5hbFZhbHVlLCBmYWxzZSk7XG4gICAgICB9XG4gICAgICB0aGlzLnJ1blVwZGF0ZWRPbkNoZWNrID0gdHJ1ZTtcbiAgICB9KTtcbiAgfVxuXG4gIG5nQWZ0ZXJWaWV3Q2hlY2tlZCgpIHtcblxuICAgIGlmICh0aGlzLnVwZGF0ZUxlZ2VuZCAmJiB0aGlzLmRhdGVwaWNrZXIpIHtcbiAgICAgIHRoaXMuZGF0ZXBpY2tlci5sb2FkTGVnZW5kKHRoaXMuX29wdGlvbnMubGVnZW5kKTtcbiAgICAgIHRoaXMudXBkYXRlTGVnZW5kID0gZmFsc2U7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMucnVuVXBkYXRlZE9uQ2hlY2spIHtcbiAgICAgIC8vIEVuc3VyZSB0aGUgZW5hYmxlZC9kaXNhYmxlZCBmbGFncyBhcmUgc2V0LlxuICAgICAgaWYgKHRoaXMuaXNEaXNhYmxlZCAhPT0gbnVsbCAmJiB0aGlzLmlzRGlzYWJsZWQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICB0aGlzLmRpc2FibGVkID0gdGhpcy5pc0Rpc2FibGVkO1xuICAgICAgfVxuICAgICAgaWYgKHRoaXMuaXNSZWFkT25seSAhPT0gbnVsbCAmJiB0aGlzLmlzUmVhZE9ubHkgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICB0aGlzLnJlYWRvbmx5ID0gdGhpcy5pc1JlYWRPbmx5O1xuICAgICAgfVxuXG4gICAgICB0aGlzLm5nWm9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKSA9PiB7XG4gICAgICAgIC8vIFdlIG5lZWQgdG8gdXBkYXRlIHRoZSBjb250cm9sIEFGVEVSIHRoZSBtb2RlbFxuICAgICAgICAvLyBoYXMgYmVlbiB1cGRhdGVkIChhc3N1bWluZyB0aGVyZSBpcyBvbmUpLCBzb1xuICAgICAgICAvLyBleGVjdXRlIHVwZGF0ZWQgYWZ0ZXIgYW5ndWxhciBoYXMgZ2VuZXJhdGVkXG4gICAgICAgIC8vIHRoZSBtb2RlbCBhbmQgdGhlIHZpZXcgbWFya3VwLlxuICAgICAgICBpZiAodGhpcy5kYXRlcGlja2VyKSB7XG4gICAgICAgICAgdGhpcy5kYXRlcGlja2VyLnVwZGF0ZWQodGhpcy5fb3B0aW9ucyk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5ydW5VcGRhdGVkT25DaGVjayA9IGZhbHNlO1xuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEhhbmRsZSB0aGUgY29udHJvbCBiZWluZyBjaGFuZ2VkLlxuICAgKi9cbiAgb25DaGFuZ2UoZXZlbnQ6IFNvaG9EYXRlUGlja2VyRXZlbnQpIHtcbiAgICB0aGlzLmludGVybmFsVmFsdWUgPSB0aGlzLmRhdGVwaWNrZXI/LmVsZW1lbnQudmFsKCk7XG5cbiAgICAvLyBTZXQgdGhlIGRhdGUgb24gdGhlIGV2ZW50LlxuICAgIGV2ZW50LmRhdGEgPSB0aGlzLmludGVybmFsVmFsdWU7XG5cbiAgICAvLyBXaGVuIHRoZSByZXF1ZXN0IGZvciBkYXRhIGhhcyBjb21wbGV0ZWQsIG1ha2Ugc3VyZSB3ZVxuICAgIC8vIHVwZGF0ZSB0aGUgJ2Ryb3Bkb3duJyBjb250cm9sLlxuICAgIHRoaXMubmdab25lLnJ1bigoKSA9PiB7XG4gICAgICAvLyBGaXJlIHRoZSBldmVudFxuICAgICAgdGhpcy5jaGFuZ2UuZW1pdChldmVudCk7XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogT3ZlcnJpZGUgd3JpdGVWYWx1ZSB0byBhbGxvdyB0aGUgZGF0ZSBwaWNrZXJcbiAgICogZWxlbWVudCB0byBiZSB1cGRhdGVkIGNvcnJlY3RseS5cbiAgICpcbiAgICogQHBhcmFtIHZhbHVlIC0gdGhlIG5ldyB2YWx1ZVxuICAgKi9cbiAgd3JpdGVWYWx1ZSh2YWx1ZTogRGF0ZSB8IHN0cmluZyB8IG51bWJlciB8IHN0cmluZ1tdKSB7XG4gICAgc3VwZXIud3JpdGVWYWx1ZSh2YWx1ZSk7XG4gICAgaWYgKHRoaXMuZGF0ZXBpY2tlcikge1xuICAgICAgLy8gVGhlIHByb2Nlc3NpbmcgaXMgcmVxdWlyZWQgdG8gZW5zdXJlIHdlIHVzZSB0aGUgY29ycmVjdCBmb3JtYXRcbiAgICAgIC8vIGluIHRoZSBjb250cm9sLlxuICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycgJiYgdGhpcy5fb3B0aW9ucy5yYW5nZT8udXNlUmFuZ2UpIHtcbiAgICAgICAgY29uc3QgZGF0ZXMgPSB2YWx1ZS5zcGxpdCgnLScpO1xuICAgICAgICBjb25zdCBzdGFydFZhbHVlID0gU29oby5Mb2NhbGUucGFyc2VEYXRlKGRhdGVzWzBdLnRyaW0oKSkgfHwgU29oby5Mb2NhbGUucGFyc2VEYXRlKGRhdGVzWzBdLnRyaW0oKSwgeyBwYXR0ZXJuOiB0aGlzLl9vcHRpb25zPy5kYXRlRm9ybWF0IH0pO1xuICAgICAgICBjb25zdCBlbmRWYWx1ZSA9IFNvaG8uTG9jYWxlLnBhcnNlRGF0ZShkYXRlc1sxXS50cmltKCkpIHx8IFNvaG8uTG9jYWxlLnBhcnNlRGF0ZShkYXRlc1sxXS50cmltKCksIHsgcGF0dGVybjogdGhpcy5fb3B0aW9ucz8uZGF0ZUZvcm1hdCB9KTtcblxuICAgICAgICAodGhpcy5kYXRlcGlja2VyIGFzIGFueSkuc2V0dGluZ3MucmFuZ2Uuc3RhcnQgPSBzdGFydFZhbHVlO1xuICAgICAgICAodGhpcy5kYXRlcGlja2VyIGFzIGFueSkuc2V0dGluZ3MucmFuZ2UuZW5kID0gZW5kVmFsdWU7XG4gICAgICAgIHRoaXMuZGF0ZXBpY2tlci5zZXRWYWx1ZShzdGFydFZhbHVlLCBmYWxzZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmRhdGVwaWNrZXIuc2V0VmFsdWUodmFsdWUsIGZhbHNlKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgd2hlbiB0aGUgY29udHJvbCBzdGF0dXMgY2hhbmdlcyB0byBvciBmcm9tIFwiRElTQUJMRURcIi5cbiAgICogRGVwZW5kaW5nIG9uIHRoZSB2YWx1ZSwgaXQgd2lsbCBlbmFibGUgb3IgZGlzYWJsZSB0aGUgYXBwcm9wcmlhdGUgRE9NIGVsZW1lbnQuXG4gICAqL1xuICBzZXREaXNhYmxlZFN0YXRlKGlzRGlzYWJsZWQ6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICB0aGlzLmRpc2FibGVkID0gaXNEaXNhYmxlZDtcbiAgfVxuXG4gIG5nT25EZXN0cm95KCkge1xuICAgIHRoaXMubmdab25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpID0+IHtcblxuICAgICAgaWYgKHRoaXMualF1ZXJ5RWxlbWVudCkge1xuICAgICAgICB0aGlzLmpRdWVyeUVsZW1lbnQub2ZmKCk7XG4gICAgICAgIHRoaXMualF1ZXJ5RWxlbWVudCA9IHVuZGVmaW5lZDtcbiAgICAgIH1cblxuICAgICAgaWYgKHRoaXMuZGF0ZXBpY2tlcikge1xuICAgICAgICB0aGlzLmRhdGVwaWNrZXIuZGVzdHJveSgpO1xuICAgICAgICB0aGlzLmRhdGVwaWNrZXIgPSBudWxsO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIE1hcmtzIHRoZSBjb21wb25lbnRzIGFzIHJlcXVpcmluZyBhIHJlYnVpbGQgYWZ0ZXIgdGhlIG5leHQgdXBkYXRlLlxuICAgKi9cbiAgbWFya0ZvclJlZnJlc2goKSB7XG4gICAgLy8gUnVuIHVwZGF0ZWQgb24gdGhlIG5leHQgdXBkYXRlZCBjaGVjay5cbiAgICB0aGlzLnJ1blVwZGF0ZWRPbkNoZWNrID0gdHJ1ZTtcblxuICAgIC8vIC4uLiBtYWtlIHN1cmUgdGhlIGNoYW5nZSBkZXRlY3RvciBraWNrcyBpbiwgb3RoZXJ3aXNlIGlmIHRoZSBpbnB1dHNcbiAgICAvLyB3ZXJlIGNoYW5nZSBwcm9ncmFtbWF0aWFsbHkgdGhlIGNvbXBvbmVudCBtYXkgbm90IGJlIGVsaWdpYmxlIGZvclxuICAgIC8vIHVwZGF0aW5nLlxuICAgIHRoaXMucmVmLm1hcmtGb3JDaGVjaygpO1xuICB9XG5cbiAgcHJpdmF0ZSBvbkxpc3RDbG9zZWQoKTogdm9pZCB7XG4gICAgdGhpcy5uZ1pvbmUucnVuKCgpID0+IHtcbiAgICAgIHRoaXMubGlzdGNsb3NlZC5lbWl0KCk7XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIG9uTGlzdE9wZW5lZCgpOiB2b2lkIHtcbiAgICB0aGlzLm5nWm9uZS5ydW4oKCkgPT4ge1xuICAgICAgdGhpcy5saXN0b3BlbmVkLmVtaXQoKTtcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgb25CZWZvcmVNb250aFJlbmRlcmVkKCk6IHZvaWQge1xuICAgIHRoaXMubmdab25lLnJ1bigoKSA9PiB7XG4gICAgICB0aGlzLmJlZm9yZW1vbnRocmVuZGVyZWQuZW1pdCgpO1xuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBvbk1vbnRoUmVuZGVyZWQoYXJnczogYW55KTogdm9pZCB7XG4gICAgdGhpcy5uZ1pvbmUucnVuKCgpID0+IHtcbiAgICAgIHRoaXMubW9udGhyZW5kZXJlZC5lbWl0KGFyZ3MpO1xuICAgIH0pO1xuICB9XG59XG4iXX0=