@bizdoc/core 2.3.36 → 2.3.39

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.
@@ -64,7 +64,8 @@ let SystemDiffComponent = class SystemDiffComponent {
64
64
  * @param index
65
65
  */
66
66
  compare(index) {
67
- const { time: date1, file } = this.versions[index], version = this.versions.slice(index + 1).find(v => v.file === file);
67
+ const { time: date1, file } = this.versions[index], version = this.versions.slice(index + 1).
68
+ find(v => v.file === file);
68
69
  if (!version)
69
70
  return;
70
71
  const { time: date2 } = version;
@@ -536,7 +537,7 @@ let SystemDiffComponent = class SystemDiffComponent {
536
537
  this._destroy.complete();
537
538
  }
538
539
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.2.1", ngImport: i0, type: SystemDiffComponent, deps: [{ token: i1.PromptService }, { token: UtilityRef }, { token: i2.TranslateService }, { token: i3.DatasourceService }, { token: i4.AccountService }], target: i0.ɵɵFactoryTarget.Component }); }
539
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.2.1", type: SystemDiffComponent, selector: "ng-component", viewQueries: [{ propertyName: "contents", first: true, predicate: ["contents"], descendants: true }], ngImport: i0, template: "<mat-toolbar>\n <button mat-icon-button (click)=\"properties.toggle()\" [bizdocTooltip]=\"'Collapse' | translate\"><mat-icon>view_sidebar</mat-icon></button>\n <span class=\"divider\"></span>\n</mat-toolbar>\n<mat-sidenav-container autosize class=\"flex\">\n <mat-sidenav-content>\n <mat-progress-bar mode=\"buffer\" [value]=progress [bufferValue]=0 [style.visibility]=\"progress > 0 && progress < 100 ? 'visible':'hidden'\"></mat-progress-bar>\n <div [innerHTML]=\"html | sanitizeHtml\" (mouseleave)=\"focusOut()\" (mousemove)=\"focusIn($event)\" class=\"configuration-diff\" (click)=\"collapse($event)\" #contents></div>\n </mat-sidenav-content>\n <mat-sidenav mode=\"side\" opened #properties class=\"timeline\">\n @if (versions) {\n <mat-nav-list class=\"nav-list\">\n @for (v of versions; track v; let index = $index; let last = $last) {\n @if (!last) {\n <mat-list-item (click)=\"compare(index)\" [class.active]=\"v.time === activeDate\">\n <h3 matListItemTitle>\n {{(v.author || 'System') | userName | async }}\n </h3>\n <p class=\"time\" matListItemLine>\n {{v.time | amCalendar: null: CALENDAR_SPEC }}\n </p>\n </mat-list-item>\n }\n }\n </mat-nav-list>\n }\n </mat-sidenav>\n</mat-sidenav-container>\n", styles: [":host{flex:1 1 auto}.timeline{border:none;width:150px}.timeline .time{font-size:12px!important}:host ::ng-deep .mat-drawer-inner-container{overflow:auto}\n"], dependencies: [{ kind: "component", type: i5.MatProgressBar, selector: "mat-progress-bar", inputs: ["color", "value", "bufferValue", "mode"], outputs: ["animationEnd"], exportAs: ["matProgressBar"] }, { kind: "component", type: i6.MatNavList, selector: "mat-nav-list", exportAs: ["matNavList"] }, { kind: "component", type: i6.MatListItem, selector: "mat-list-item, a[mat-list-item], button[mat-list-item]", inputs: ["activated"], exportAs: ["matListItem"] }, { kind: "directive", type: i6.MatListItemLine, selector: "[matListItemLine]" }, { kind: "directive", type: i6.MatListItemTitle, selector: "[matListItemTitle]" }, { kind: "component", type: i7.MatSidenav, selector: "mat-sidenav", inputs: ["fixedInViewport", "fixedTopGap", "fixedBottomGap"], exportAs: ["matSidenav"] }, { kind: "component", type: i7.MatSidenavContainer, selector: "mat-sidenav-container", exportAs: ["matSidenavContainer"] }, { kind: "component", type: i7.MatSidenavContent, selector: "mat-sidenav-content" }, { kind: "component", type: i8.MatToolbar, selector: "mat-toolbar", inputs: ["color"], exportAs: ["matToolbar"] }, { kind: "component", type: i9.MatIconButton, selector: "button[mat-icon-button]", exportAs: ["matButton"] }, { kind: "component", type: i10.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: i11.TooltipDirective, selector: "[bizdocTooltip]", inputs: ["bizdocTooltip", "bizdocTooltipTemplate", "bizdocTooltipContext", "bizdocTooltipPosition", "bizdocTooltipDuration", "bizdocTooltipDisabled"] }, { kind: "pipe", type: i12.AsyncPipe, name: "async" }, { kind: "pipe", type: i13.CalendarPipe, name: "amCalendar" }, { kind: "pipe", type: i14.UserNamePipe, name: "userName" }, { kind: "pipe", type: i15.SanitizeHtmlPipe, name: "sanitizeHtml" }, { kind: "pipe", type: i16.TranslatePipe, name: "translate" }] }); }
540
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.2.1", type: SystemDiffComponent, selector: "ng-component", viewQueries: [{ propertyName: "contents", first: true, predicate: ["contents"], descendants: true }], ngImport: i0, template: "<mat-toolbar>\n <button mat-icon-button (click)=\"properties.toggle()\" [bizdocTooltip]=\"'Collapse' | translate\"><mat-icon>view_sidebar</mat-icon></button>\n <span class=\"divider\"></span>\n</mat-toolbar>\n<mat-sidenav-container autosize class=\"flex\">\n <mat-sidenav-content>\n <mat-progress-bar mode=\"buffer\" [value]=progress [bufferValue]=0 [style.visibility]=\"progress > 0 && progress < 100 ? 'visible':'hidden'\"></mat-progress-bar>\n <div [innerHTML]=\"html | sanitizeHtml\" (mouseleave)=\"focusOut()\" (mousemove)=\"focusIn($event)\" class=\"configuration-diff\" (click)=\"collapse($event)\" #contents></div>\n </mat-sidenav-content>\n <mat-sidenav mode=\"side\" opened #properties class=\"timeline\">\n @if (versions) {\n <mat-nav-list class=\"nav-list\">\n @for (v of versions; track v; let index = $index; let last = $last) {\n @if (!last) {\n <mat-list-item (click)=\"compare(index)\" [class.active]=\"v.time === activeDate\">\n <h3 matListItemTitle>\n {{(v.author || 'System') | userName | async }}\n </h3>\n <p class=\"time\" matListItemLine>\n {{v.time | amCalendar: null: CALENDAR_SPEC }}\n </p>\n </mat-list-item>\n }\n }\n </mat-nav-list>\n }\n </mat-sidenav>\n</mat-sidenav-container>\n", styles: [":host{display:flex;-ms-flex-direction:column;-webkit-flex-direction:column;flex-direction:column;height:100%}.timeline{border:none;width:150px}.timeline .time{font-size:12px!important}:host ::ng-deep .mat-drawer-inner-container{overflow:auto}\n"], dependencies: [{ kind: "component", type: i5.MatProgressBar, selector: "mat-progress-bar", inputs: ["color", "value", "bufferValue", "mode"], outputs: ["animationEnd"], exportAs: ["matProgressBar"] }, { kind: "component", type: i6.MatNavList, selector: "mat-nav-list", exportAs: ["matNavList"] }, { kind: "component", type: i6.MatListItem, selector: "mat-list-item, a[mat-list-item], button[mat-list-item]", inputs: ["activated"], exportAs: ["matListItem"] }, { kind: "directive", type: i6.MatListItemLine, selector: "[matListItemLine]" }, { kind: "directive", type: i6.MatListItemTitle, selector: "[matListItemTitle]" }, { kind: "component", type: i7.MatSidenav, selector: "mat-sidenav", inputs: ["fixedInViewport", "fixedTopGap", "fixedBottomGap"], exportAs: ["matSidenav"] }, { kind: "component", type: i7.MatSidenavContainer, selector: "mat-sidenav-container", exportAs: ["matSidenavContainer"] }, { kind: "component", type: i7.MatSidenavContent, selector: "mat-sidenav-content" }, { kind: "component", type: i8.MatToolbar, selector: "mat-toolbar", inputs: ["color"], exportAs: ["matToolbar"] }, { kind: "component", type: i9.MatIconButton, selector: "button[mat-icon-button]", exportAs: ["matButton"] }, { kind: "component", type: i10.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: i11.TooltipDirective, selector: "[bizdocTooltip]", inputs: ["bizdocTooltip", "bizdocTooltipTemplate", "bizdocTooltipContext", "bizdocTooltipPosition", "bizdocTooltipDuration", "bizdocTooltipDisabled"] }, { kind: "pipe", type: i12.AsyncPipe, name: "async" }, { kind: "pipe", type: i13.CalendarPipe, name: "amCalendar" }, { kind: "pipe", type: i14.UserNamePipe, name: "userName" }, { kind: "pipe", type: i15.SanitizeHtmlPipe, name: "sanitizeHtml" }, { kind: "pipe", type: i16.TranslatePipe, name: "translate" }] }); }
540
541
  };
541
542
  SystemDiffComponent = __decorate([
542
543
  BizDoc({ selector: 'bizdoc-configuration-diff' })
@@ -545,7 +546,7 @@ SystemDiffComponent = __decorate([
545
546
  export { SystemDiffComponent };
546
547
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.1", ngImport: i0, type: SystemDiffComponent, decorators: [{
547
548
  type: Component,
548
- args: [{ template: "<mat-toolbar>\n <button mat-icon-button (click)=\"properties.toggle()\" [bizdocTooltip]=\"'Collapse' | translate\"><mat-icon>view_sidebar</mat-icon></button>\n <span class=\"divider\"></span>\n</mat-toolbar>\n<mat-sidenav-container autosize class=\"flex\">\n <mat-sidenav-content>\n <mat-progress-bar mode=\"buffer\" [value]=progress [bufferValue]=0 [style.visibility]=\"progress > 0 && progress < 100 ? 'visible':'hidden'\"></mat-progress-bar>\n <div [innerHTML]=\"html | sanitizeHtml\" (mouseleave)=\"focusOut()\" (mousemove)=\"focusIn($event)\" class=\"configuration-diff\" (click)=\"collapse($event)\" #contents></div>\n </mat-sidenav-content>\n <mat-sidenav mode=\"side\" opened #properties class=\"timeline\">\n @if (versions) {\n <mat-nav-list class=\"nav-list\">\n @for (v of versions; track v; let index = $index; let last = $last) {\n @if (!last) {\n <mat-list-item (click)=\"compare(index)\" [class.active]=\"v.time === activeDate\">\n <h3 matListItemTitle>\n {{(v.author || 'System') | userName | async }}\n </h3>\n <p class=\"time\" matListItemLine>\n {{v.time | amCalendar: null: CALENDAR_SPEC }}\n </p>\n </mat-list-item>\n }\n }\n </mat-nav-list>\n }\n </mat-sidenav>\n</mat-sidenav-container>\n", styles: [":host{flex:1 1 auto}.timeline{border:none;width:150px}.timeline .time{font-size:12px!important}:host ::ng-deep .mat-drawer-inner-container{overflow:auto}\n"] }]
549
+ args: [{ template: "<mat-toolbar>\n <button mat-icon-button (click)=\"properties.toggle()\" [bizdocTooltip]=\"'Collapse' | translate\"><mat-icon>view_sidebar</mat-icon></button>\n <span class=\"divider\"></span>\n</mat-toolbar>\n<mat-sidenav-container autosize class=\"flex\">\n <mat-sidenav-content>\n <mat-progress-bar mode=\"buffer\" [value]=progress [bufferValue]=0 [style.visibility]=\"progress > 0 && progress < 100 ? 'visible':'hidden'\"></mat-progress-bar>\n <div [innerHTML]=\"html | sanitizeHtml\" (mouseleave)=\"focusOut()\" (mousemove)=\"focusIn($event)\" class=\"configuration-diff\" (click)=\"collapse($event)\" #contents></div>\n </mat-sidenav-content>\n <mat-sidenav mode=\"side\" opened #properties class=\"timeline\">\n @if (versions) {\n <mat-nav-list class=\"nav-list\">\n @for (v of versions; track v; let index = $index; let last = $last) {\n @if (!last) {\n <mat-list-item (click)=\"compare(index)\" [class.active]=\"v.time === activeDate\">\n <h3 matListItemTitle>\n {{(v.author || 'System') | userName | async }}\n </h3>\n <p class=\"time\" matListItemLine>\n {{v.time | amCalendar: null: CALENDAR_SPEC }}\n </p>\n </mat-list-item>\n }\n }\n </mat-nav-list>\n }\n </mat-sidenav>\n</mat-sidenav-container>\n", styles: [":host{display:flex;-ms-flex-direction:column;-webkit-flex-direction:column;flex-direction:column;height:100%}.timeline{border:none;width:150px}.timeline .time{font-size:12px!important}:host ::ng-deep .mat-drawer-inner-container{overflow:auto}\n"] }]
549
550
  }], ctorParameters: () => [{ type: i1.PromptService }, { type: i17.UtilityRef, decorators: [{
550
551
  type: Inject,
551
552
  args: [UtilityRef]
@@ -568,4 +569,4 @@ var TokenKind;
568
569
  TokenKind[TokenKind["ObjectStart"] = 3] = "ObjectStart";
569
570
  TokenKind[TokenKind["ObjectEnd"] = 4] = "ObjectEnd";
570
571
  })(TokenKind || (TokenKind = {}));
571
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uZmlndXJhdGlvbi1kaWZmLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnJhcmllcy9jb3JlL3NyYy9saWIvYWRtaW4vZGlmZi9jb25maWd1cmF0aW9uLWRpZmYuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vbGlicmFyaWVzL2NvcmUvc3JjL2xpYi9hZG1pbi9kaWZmL2NvbmZpZ3VyYXRpb24tZGlmZi5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUFFLFNBQVMsRUFBcUIsTUFBTSxFQUFFLFNBQVMsRUFBYyxNQUFNLGVBQWUsQ0FBQztBQUM1RixPQUFPLEVBQUUsY0FBYyxFQUFFLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUMvQyxPQUFPLEVBQUUsWUFBWSxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRXpELE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUMvQyxPQUFPLEVBQUUsT0FBTyxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUVuRSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFNNUMsTUFBTSxXQUFXLEdBQUcsQ0FBQyxRQUFRLEVBQUUsU0FBUyxFQUFFLGlCQUFpQixFQUFFLGlCQUFpQixFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsYUFBYSxFQUFFLE9BQU8sRUFBRSxRQUFRO0lBQ3BJLE9BQU8sRUFBRSxVQUFVLEVBQUUsUUFBUSxFQUFFLGNBQWMsRUFBRSxjQUFjLEVBQUUscUJBQXFCLEVBQUUsbUJBQW1CLEVBQUUsb0JBQW9CO0lBQy9ILHdCQUF3QixFQUFFLG1CQUFtQixFQUFFLHlCQUF5QixFQUFFLGdCQUFnQixDQUFDLEVBQzNGLGNBQWMsR0FBRyxjQUFjLEVBQy9CLGNBQWMs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SUFBSSxFQUFFLENBQUM7UUFDckIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxRQUFRLEVBQUUsQ0FBQztJQUMzQixDQUFDOzhHQTlmVSxtQkFBbUIsK0NBaUJwQixVQUFVO2tHQWpCVCxtQkFBbUIsMEpDekJoQyxpMkNBNEJBOztBREhhLG1CQUFtQjtJQUYvQixNQUFNLENBQUMsRUFBRSxRQUFRLEVBQUUsMkJBQTJCLEVBQUUsQ0FBQztJQUNsRCxlQUFlO0dBQ0YsbUJBQW1CLENBK2YvQjs7MkZBL2ZZLG1CQUFtQjtrQkFOL0IsU0FBUzs7OzBCQXVCTCxNQUFNOzJCQUFDLFVBQVU7cUlBaEJHLFFBQVE7c0JBQTlCLFNBQVM7dUJBQUMsVUFBVTs7QUErZ0J2QixJQUFLLFdBS0o7QUFMRCxXQUFLLFdBQVc7SUFDZCx1REFBUyxDQUFBO0lBQ1QsK0NBQUssQ0FBQTtJQUNMLHFEQUFRLENBQUE7SUFDUixtREFBTyxDQUFBO0FBQ1QsQ0FBQyxFQUxJLFdBQVcsS0FBWCxXQUFXLFFBS2Y7QUFDRCxJQUFLLFNBTUo7QUFORCxXQUFLLFNBQVM7SUFDWiwyQ0FBSyxDQUFBO0lBQ0wscURBQVUsQ0FBQTtJQUNWLGlEQUFRLENBQUE7SUFDUix1REFBVyxDQUFBO0lBQ1gsbURBQVMsQ0FBQTtBQUNYLENBQUMsRUFOSSxTQUFTLEtBQVQsU0FBUyxRQU1iIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBPbkluaXQsIE9uRGVzdHJveSwgSW5qZWN0LCBWaWV3Q2hpbGQsIEVsZW1lbnRSZWYgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgZmlyc3RWYWx1ZUZyb20sIFN1YmplY3QgfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgZGVib3VuY2VUaW1lLCB0YWtlVW50aWwgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XHJcbmltcG9ydCB7IENhbGVuZGFyU3BlYyB9IGZyb20gXCIuLi8uLi9jb3JlL3BpcGVzL2NhbGVuZGFyLnBpcGVcIjtcclxuaW1wb3J0IHsgQml6RG9jIH0gZnJvbSAnLi4vLi4vY29yZS9kZWNvcmF0b3JzJztcclxuaW1wb3J0IHsgaXNBcnJheSwgaXNPYmplY3QsIGlzU3RyaW5nIH0gZnJvbSAnLi4vLi4vY29yZS9mdW5jdGlvbnMnO1xyXG5pbXBvcnQgeyBVdGlsaXR5Q29tcG9uZW50IH0gZnJvbSAnLi4vLi4vY29yZS9iYXNlJztcclxuaW1wb3J0IHsgVXRpbGl0eVJlZiB9IGZyb20gJy4uL3V0aWxpdHktcmVmJztcclxuaW1wb3J0IHsgUHJvbXB0U2VydmljZSB9IGZyb20gJy4uLy4uL2NvcmUvcHJvbXB0LnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBBY2NvdW50U2VydmljZSB9IGZyb20gJy4uLy4uL2NvcmUvYWNjb3VudC5zZXJ2aWNlJztcclxuaW1wb3J0IHsgVHJhbnNsYXRlU2VydmljZSB9IGZyb20gJy4uLy4uL2NvcmUvdHJhbnNsYXRlLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBEYXRhc291cmNlU2VydmljZSB9IGZyb20gJy4uLy4uL2NvcmUvZGF0YXNvdXJjZS5zZXJ2aWNlJztcclxuXHJcbmNvbnN0IElHTk9SRV9OT0RFID0gWydhdXRob3InLCAnaGlzdG9yeScsICd0YXJnZXREZWNvcmF0b3InLCAnc291cmNlRGVjb3JhdG9yJywgJ29mZnNldFgnLCAnb2Zmc2V0WScsICdyb3RhdGVBbmdsZScsICd3aWR0aCcsICdoZWlnaHQnLFxyXG4gICdzdHlsZScsICdzZWdtZW50cycsICdvZmZzZXQnLCAndGFyZ2V0UG9ydElEJywgJ3NvdXJjZVBvcnRJRCcsICdob3Jpem9udGFsQWxpZ25tZW50JywgJ3ZlcnRpY2FsQWxpZ25tZW50JywgJ3dvcmtmbG93LnRpbWVzdGFtcCcsXHJcbiAgJ2Nvbm5lY3RvcnMuY29uc3RyYWludHMnLCAnbm9kZXMuY29uc3RyYWludHMnLCAnYW5ub3RhdGlvbnMuY29uc3RyYWludHMnLCAnYW5ub3RhdGlvbnMuaWQnXSxcclxuICBTVkdfUEFUSF9SRUdFWCA9IC9eW21NXS4rW3paXSQvLFxyXG4gIElOREVYX1BST1BFUlRZID0gWyduYW1lJywgJ2lkJywgJ2RhdGFUeXBlJywgJ05hbWUnXSwgREFUQV9UWVBFID0gJ2RhdGFUeXBlJywgT1JJR0lOQUxfVkFMVUUgPSAnXycsIFNUQVRFID0gJ19fJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHRlbXBsYXRlVXJsOiAnLi9jb25maWd1cmF0aW9uLWRpZmYuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL2NvbmZpZ3VyYXRpb24tZGlmZi5jb21wb25lbnQuc2NzcyddXHJcbn0pXHJcbkBCaXpEb2MoeyBzZWxlY3RvcjogJ2JpemRvYy1jb25maWd1cmF0aW9uLWRpZmYnIH0pXHJcbi8qKiBjb21wb25lbnQqL1xyXG5leHBvcnQgY2xhc3MgU3lzdGVtRGlmZkNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95LCBVdGlsaXR5Q29tcG9uZW50IHtcclxuICBAVmlld0NoaWxkKCdjb250ZW50cycpIGNvbnRlbnRzOiBFbGVtZW50UmVmPEhUTUxEaXZFbGVtZW50PjtcclxuICBodG1sID0gJyc7XHJcbiAgdmVyc2lvbnM6IFZlcnNpb25JbmZvW107XHJcbiAgYWN0aXZlRGF0ZTogRGF0ZTtcclxuICBwcm9ncmVzcyA9IDA7XHJcbiAgbm9uZTogYm9vbGVhbjtcclxuICBwcml2YXRlIF93b3JraW5nID0gbmV3IFN1YmplY3Q8bnVtYmVyPigpO1xyXG4gIHJlYWRvbmx5IENBTEVOREFSX1NQRUM6IENhbGVuZGFyU3BlYyA9IHtcclxuICAgIGxhc3REYXk6IHRoaXMuX3RyYW5zbGF0ZS5nZXQoJ1llc3RlcmRheUF0JywgJ0hIOm1tJyksXHJcbiAgICBsYXN0V2VlazogJ2RkZCBISDptbScsXHJcbiAgICBzYW1lRGF5OiAnSEg6bW0nLFxyXG4gICAgc2FtZUVsc2U6ICdNTU0gRCBISDptbSdcclxuICB9O1xyXG4gIHByaXZhdGUgcmVhZG9ubHkgX2Rlc3Ryb3kgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xyXG4gIC8qKiBjdG9yICovXHJcbiAgY29uc3RydWN0b3IocHJpdmF0ZSBfc2I6IFByb21wdFNlcnZpY2UsXHJcbiAgICBASW5qZWN0KFV0aWxpdHlSZWYpIHByaXZhdGUgX3V0aWxpdHlSZWY6IFV0aWxpdHlSZWY8Q29uZmlndXJ0aW9uSW5mb1tdLCBDb21wYXJlTW9kZWwsIFZlcnNpb25JbmZvW10sIG51bWJlcj4sXHJcbiAgICBwcml2YXRlIF90cmFuc2xhdGU6IFRyYW5zbGF0ZVNlcnZpY2UsXHJcbiAgICBwcml2YXRlIF9kczogRGF0YXNvdXJjZVNlcnZpY2UsXHJcbiAgICBwcml2YXRlIF9hY2NvdW50czogQWNjb3VudFNlcnZpY2UpIHtcclxuICB9XHJcbiAgbmdPbkluaXQoKTogdm9pZCB7XHJcbiAgICAvLyBkZWxheSBwcm9ncmVzc1xyXG4gICAgdGhpcy5fd29ya2luZy5waXBlKHRha2VVbnRpbCh0aGlzLl9kZXN0cm95KSwgZGVib3VuY2VUaW1lKDEwMCkpLnN1YnNjcmliZSh2ID0+IHYgJiYgKHRoaXMucHJvZ3Jlc3MgPSB2KSk7XHJcbiAgICB0aGlzLl93b3JraW5nLm5leHQoNTApO1xyXG4gICAgLy8gcG9wdWxhdGUgdmVyc2lvbnNcclxuICAgIHRoaXMuX3V0aWxpdHlSZWYucG9wdWxhdGUoKS5zdWJzY3JpYmUoe1xyXG4gICAgICBuZXh0OiBlID0+IHtcclxuICAgICAgICB0aGlzLnZlcnNpb25zID0gZTtcclxuICAgICAgICB0aGlzLl93b3JraW5nLm5leHQoMTAwKTtcclxuICAgICAgICBlLmxlbmd0aCA+IDEgJiZcclxuICAgICAgICAgIHRoaXMuY29tcGFyZSgwKTtcclxuICAgICAgfSwgZXJyb3I6ICgpID0+IHRoaXMuX3NiLmVycm9yKClcclxuICAgIH0pO1xyXG4gIH1cclxuICAvKipcclxuICAgKiBcclxuICAgKiBAcGFyYW0gaW5kZXhcclxuICAgKi9cclxuICBjb21wYXJlKGluZGV4OiBudW1iZXIpIHtcclxuICAgIGNvbnN0IHsgdGltZTogZGF0ZTEsIGZpbGUgfSA9IHRoaXMudmVyc2lvbnNbaW5kZXhdLFxyXG4gICAgICB2ZXJzaW9uID0gdGhpcy52ZXJzaW9ucy5zbGljZShpbmRleCArIDEpLmZpbmQodiA9PiB2LmZpbGUgPT09IGZpbGUpO1xyXG4gICAgaWYgKCF2ZXJzaW9uKSByZXR1cm47XHJcbiAgICBjb25zdCB7IHRpbWU6IGRhdGUyIH0gPSB2ZXJzaW9uO1xyXG4gICAgdGhpcy5fd29ya2luZy5uZXh0KDI1KTtcclxuICAgIHRoaXMuX3V0aWxpdHlSZWYuZXhlY3V0ZSh7IGRhdGUxLCBkYXRlMiB9KS5zdWJzY3JpYmUoe1xyXG4gICAgICBuZXh0OiByID0+IHtcclxuICAgICAgICB0aGlzLmh0bWwgPSAnJztcclxuICAgICAgICB0aGlzLl93b3JraW5nLm5leHQoNTApO1xyXG4gICAgICAgIHRoaXMuYWN0aXZlRGF0ZSA9IGRhdGUxO1xyXG4gICAgICAgIGNvbnN0IHJlc3VsdHMgPSB0aGlzLl9jb21wYXJlKHJbMF0sIHJbMV0pO1xyXG4gICAgICAgIGlmIChyZXN1bHRzKSByZXN1bHRzLnRoZW4oZCA9PiB7XHJcbiAgICAgICAgICB0aGlzLl93b3JraW5nLm5leHQoNzUpO1xyXG4gICAgICAgICAgdGhpcy5odG1sID0gdGhpcy5fZ2VuZXJhdGUoZCk7XHJcbiAgICAgICAgICB0aGlzLl9zY3JvbGxUb3AoKTtcclxuICAgICAgICAgIHRoaXMuX3dvcmtpbmcubmV4dCgxMDApO1xyXG4gICAgICAgICAgdGhpcy5ub25lID0gZmFsc2U7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICB0aGlzLl93b3JraW5nLm5leHQoMTAwKTtcclxuICAgICAgICAgIHRoaXMubm9uZSA9IHRydWU7XHJcbiAgICAgICAgfVxyXG4gICAgICB9LCBlcnJvcjogKCkgPT4gdGhpcy5fc2IuZXJyb3IoKVxyXG4gICAgfSk7XHJcbiAgfVxyXG4gIHByaXZhdGUgX3Njcm9sbFRvcCgpIHtcclxuICAgIHNldFRpbWVvdXQoKCkgPT4gdGhpcy5jb250ZW50cy5uYXRpdmVFbGVtZW50LnBhcmVudEVsZW1lbnQuc2Nyb2xsKHsgdG9wOiAwLCBiZWhhdmlvcjogJ3Ntb290aCcgfSkpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogXHJcbiAgICogQHBhcmFtIGFcclxuICAgKiBAcGFyYW0gYlxyXG4gICAqIEBwYXJhbSBkaWZmXHJcbiAgICogQHBhcmFtIHNjb3BlXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBfY29tcGFyZShhOiB7fSB8IFtdLCBiOiB7fSB8IFtdLCBkaWZmOiB7fSB8IFtdID0ge30sIHNjb3BlOiBTY29wZSA9IHsgbm9kZXM6IFtdIH0pOiBQcm9taXNlPHt9IHwgW10+IHwgZmFsc2Uge1xyXG4gICAgY29uc3QgcHJvbWlzZXM6IFByb21pc2U8YW55PltdID0gW107XHJcbiAgICBpZiAoaXNBcnJheShhKSkge1xyXG4gICAgICBhLmZvckVhY2goKGUsIGkpID0+IHtcclxuICAgICAgICBjb25zdCBiVmFsID0gYltpXTtcclxuICAgICAgICBpZiAoZSA9PT0gYlZhbCkgcmV0dXJuO1xyXG4gICAgICAgIGVsc2UgaWYgKGlzT2JqZWN0KGUpKSB7XHJcbiAgICAgICAgICBjb25zdCBhSnNvbiA9IEpTT04uc3RyaW5naWZ5KGUpLCBiSnNvbiA9IEpTT04uc3RyaW5naWZ5KGJWYWwpO1xyXG4gICAgICAgICAgaWYgKGFKc29uID09PSBiSnNvbikgcmV0dXJuO1xyXG4gICAgICAgICAgaWYgKGJWYWwgJiYgdGhpcy5fbWF0Y2goYlZhbCwgZSkpIHtcclxuICAgICAgICAgICAgY29uc3Qgb2JqID0ge307XHJcbiAgICAgICAgICAgIGNvbnN0IHByb21pc2UgPSB0aGlzLl9jb21wYXJlKGUsIGJWYWwsIG9iaiwgT2JqZWN0LmFzc2lnbih7XHJcbiAgICAgICAgICAgICAgdHlwZTogZVtEQVRBX1RZUEVdIHx8IHNjb3BlLnR5cGVcclxuICAgICAgICAgICAgfSwgc2NvcGUpKTtcclxuICAgICAgICAgICAgaWYgKCFwcm9taXNlKSByZXR1cm47XHJcbiAgICAgICAgICAgIChkaWZmIGFzIGFueVtdKS5wdXNoKHRoaXMuX3Jla2V5KGUsIG9iaiwgc2NvcGUubm9kZXMpKTtcclxuICAgICAgICAgICAgcHJvbWlzZXMucHVzaChwcm9taXNlKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGVsc2UgaWYgKChiIGFzIFtdKS5maW5kKGIgPT4gSlNPTi5zdHJpbmdpZnkoYikgPT09IGFKc29uKSkgcmV0dXJuO1xyXG4gICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGJPYmogPSAoYiBhcyBbXSkuZmluZChiID0+IHRoaXMuX21hdGNoKGIsIGUpKTtcclxuICAgICAgICAgICAgaWYgKGJPYmopIHtcclxuICAgICAgICAgICAgICBjb25zdCBvYmogPSB7fTtcclxuICAgICAgICAgICAgICBjb25zdCBwcm9taXNlID0gdGhpcy5fY29tcGFyZShlLCBiT2JqLCBvYmosIE9iamVjdC5hc3NpZ24oeyB0eXBlOiBlW0RBVEFfVFlQRV0gfHwgc2NvcGUudHlwZSB9LCBzY29wZSkpO1xyXG4gICAgICAgICAgICAgIGlmICghcHJvbWlzZSkgcmV0dXJuO1xyXG4gICAgICAgICAgICAgIChkaWZmIGFzIGFueVtdKS5wdXNoKHRoaXMuX3Jla2V5KGUsIG9iaiwgc2NvcGUubm9kZXMpKTtcclxuICAgICAgICAgICAgICBwcm9taXNlcy5wdXNoKHByb21pc2UpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgIGNvbnN0IG9iaiA9IGlzQXJyYXkoZSkgPyBbXSA6IHt9O1xyXG4gICAgICAgICAgICAgIGNvbnN0IHByb21pc2UgPSB0aGlzLl9icmFuY2goZSwgb2JqLCB7IG5vZGVzOiBzY29wZS5ub2RlcywgdHlwZTogZVtEQVRBX1RZUEVdIHx8IHNjb3BlLnR5cGUgfSk7XHJcbiAgICAgICAgICAgICAgaWYgKCFwcm9taXNlKSByZXR1cm47XHJcbiAgICAgICAgICAgICAgY29uc3QgbGVuZ3RoID0gKGRpZmYgYXMgYW55W10pLnB1c2gob2JqKTtcclxuICAgICAgICAgICAgICBkaWZmW1NUQVRFICsgKGxlbmd0aCAtIDEpLnRvU3RyaW5nKCldID0gQ2hhbmdlU3RhdGUuQWRkZWQ7XHJcbiAgICAgICAgICAgICAgcHJvbWlzZXMucHVzaChwcm9taXNlKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmICghKGIgYXMgW10pLmZpbmQoYiA9PiBiID09IGUpKSB7XHJcbiAgICAgICAgICBjb25zdCBsZW5ndGggPSAoZGlmZiBhcyBhbnlbXSkucHVzaChlKTtcclxuICAgICAgICAgIGlmIChzY29wZS5ub2Rlcy5pbmRleE9mKCdwb3NpdGlvbnMnKSA+IC0xKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHByb21pc2UgPSBmaXJzdFZhbHVlRnJvbSh0aGlzLl9hY2NvdW50cy5nZXQoZSkpLnRoZW4odiA9PlxyXG4gICAgICAgICAgICAgIGRpZmZbbGVuZ3RoIC0gMV0gPSB2Lm5hbWUpO1xyXG4gICAgICAgICAgICBwcm9taXNlcy5wdXNoKHByb21pc2UpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgZGlmZltTVEFURSArIChsZW5ndGggLSAxKS50b1N0cmluZygpXSA9IENoYW5nZVN0YXRlLkFkZGVkO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgICAgIGlmIChpc0FycmF5KGIpKVxyXG4gICAgICAgIChiIGFzIFtdKS5mb3JFYWNoKChlLCBpKSA9PiB7XHJcbiAgICAgICAgICBpZiAoZSAhPT0gYVtpXSkge1xyXG4gICAgICAgICAgICBpZiAoaXNPYmplY3QoZSkpIHtcclxuICAgICAgICAgICAgICBjb25zdCBiSnNvbiA9IEpTT04uc3RyaW5naWZ5KGUpO1xyXG4gICAgICAgICAgICAgIGlmIChiSnNvbiA9PT0gSlNPTi5zdHJpbmdpZnkoYVtpXSkgfHwgKGEgYXMgW10pLmZpbmQoYSA9PiBKU09OLnN0cmluZ2lmeShhKSA9PT0gYkpzb24gfHxcclxuICAgICAgICAgICAgICAgIHRoaXMuX21hdGNoKGEsIGUpKSkgcmV0dXJuO1xyXG4gICAgICAgICAgICAgIGNvbnN0IG9iaiA9IGlzQXJyYXkoZSkgPyBbXSA6IHt9O1xyXG4gICAgICAgICAgICAgIGNvbnN0IHByb21pc2UgPSB0aGlzLl9icmFuY2goZSwgb2JqLCB7IG5vZGVzOiBzY29wZS5ub2RlcywgdHlwZTogZVtEQVRBX1RZUEVdIHx8IHNjb3BlLnR5cGUgfSk7XHJcbiAgICAgICAgICAgICAgaWYgKCFwcm9taXNlKSByZXR1cm47XHJcbiAgICAgICAgICAgICAgY29uc3QgbGVuZ3RoID0gKGRpZmYgYXMgYW55W10pLnB1c2gob2JqKTtcclxuICAgICAgICAgICAgICBkaWZmW1NUQVRFICsgKGxlbmd0aCAtIDEpLnRvU3RyaW5nKCldID0gQ2hhbmdlU3RhdGUuUmVtb3ZlZDtcclxuICAgICAgICAgICAgICBwcm9taXNlcy5wdXNoKHByb21pc2UpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2UgaWYgKCEoYSBhcyBbXSkuZmluZChhID0+IGEgPT0gZSkpIHtcclxuICAgICAgICAgICAgICBjb25zdCBsZW5ndGggPSAoZGlmZiBhcyBbXSkucHVzaChlKTtcclxuICAgICAgICAgICAgICBpZiAoc2NvcGUubm9kZXMuaW5kZXhPZigncG9zaXRpb25zJykgPiAtMSkge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgcHJvbWlzZSA9IGZpcnN0VmFsdWVGcm9tKHRoaXMuX2FjY291bnRzLmdldChlKSkudGhlbih2ID0+XHJcbiAgICAgICAgICAgICAgICAgIGRpZmZbbGVuZ3RoIC0gMV0gPSB2Lm5hbWUpO1xyXG4gICAgICAgICAgICAgICAgcHJvbWlzZXMucHVzaChwcm9taXNlKTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgZGlmZltTVEFURSArIChsZW5ndGggLSAxKS50b1N0cmluZygpXSA9IENoYW5nZVN0YXRlLlJlbW92ZWQ7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgZWxzZSB7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKCEoZGlmZiBhcyBhbnlbXSkubGVuZ3RoKSByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgT2JqZWN0LmtleXMoYSkuZm9yRWFjaChrID0+IHtcclxuICAgICAgICBpZiAodGhpcy5faWdub3JlKGssIHNjb3BlLm5vZGVzKSkgcmV0dXJuO1xyXG4gICAgICAgIGNvbnN0IGFWYWwgPSBhW2tdLCBiVmFsID0gYltrXTtcclxuICAgICAgICBpZiAoYVZhbCA9PT0gYlZhbCkgcmV0dXJuO1xyXG4gICAgICAgIGVsc2UgaWYgKGlzT2JqZWN0KGFWYWwpKSB7XHJcbiAgICAgICAgICBpZiAoSlNPTi5zdHJpbmdpZnkoYVZhbCkgPT09IEpTT04uc3RyaW5naWZ5KGJWYWwpKSByZXR1cm47XHJcbiAgICAgICAgICBpZiAoYlZhbCAhPT0gdW5kZWZpbmVkICYmIGlzQXJyYXkoYlZhbCkgIT09IGlzQXJyYXkoYVZhbCkpIHtcclxuICAgICAgICAgICAgZGlmZltrXSA9IGFWYWw7XHJcbiAgICAgICAgICAgIGRpZmZbT1JJR0lOQUxfVkFMVUUgKyBrXSA9IGlzQXJyYXkoYlZhbCkgPyBiVmFsLmpvaW4oJywgJykgOiBiVmFsO1xyXG4gICAgICAgICAgICBkaWZmW1NUQVRFICsga10gPSBDaGFuZ2VTdGF0ZS5Nb2RpZmllZDtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBsZXQgb2JqID0gaXNBcnJheShhVmFsKSA/IFtdIDoge30sXHJcbiAgICAgICAgICAgICAgZXh0cmEgPSB7XHJcbiAgICAgICAgICAgICAgICB0eXBlOiBhVmFsW0RBVEFfVFlQRV0gfHwgc2NvcGUudHlwZSxcclxuICAgICAgICAgICAgICAgIG5vZGVzOiBbLi4uc2NvcGUubm9kZXMsIGtdLFxyXG4gICAgICAgICAgICAgICAgcHJvcGVydHlOYW1lOiBrXHJcbiAgICAgICAgICAgICAgfSBhcyBTY29wZTtcclxuICAgICAgICAgICAgaWYgKGJWYWwgIT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgICAgIGNvbnN0IHByb21pc2UgPSB0aGlzLl9jb21wYXJlKGFWYWwsIGJWYWwsIG9iaiwgZXh0cmEpO1xyXG4gICAgICAgICAgICAgIGlmICghcHJvbWlzZSkgcmV0dXJuO1xyXG4gICAgICAgICAgICAgIGlmICghaXNBcnJheShhVmFsKSlcclxuICAgICAgICAgICAgICAgIG9iaiA9IHRoaXMuX3Jla2V5KGFWYWwsIG9iaiwgc2NvcGUubm9kZXMpO1xyXG4gICAgICAgICAgICAgIHByb21pc2VzLnB1c2gocHJvbWlzZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgY29uc3QgcHJvbWlzZSA9IHRoaXMuX2JyYW5jaChhVmFsLCBvYmosIGV4dHJhKTtcclxuICAgICAgICAgICAgICBpZiAoIXByb21pc2UpIHJldHVybjtcclxuICAgICAgICAgICAgICBwcm9taXNlcy5wdXNoKHByb21pc2UpO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiAoc2NvcGUubm9kZXMuaW5kZXhPZigncG9zaXRpb25zJykgPiAtMSkge1xyXG4gICAgICAgICAgICAgIGRpZmZbT1JJR0lOQUxfVkFMVUUgKyBrXSA9IGFWYWw7XHJcbiAgICAgICAgICAgICAgY29uc3QgcHJvbWlzZSA9IGZpcnN0VmFsdWVGcm9tKHRoaXMuX2RzLmdldChzY29wZS50eXBlLCBrKSkudGhlbih2ID0+IHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IG5hbWUgPSBpc1N0cmluZyh2KSA/IHYgOiB2W09iamVjdC5rZXlzKHYpWzBdXTtcclxuICAgICAgICAgICAgICAgIGRpZmZbbmFtZV0gPSBvYmpcclxuICAgICAgICAgICAgICAgIGlmIChiVmFsID09PSB1bmRlZmluZWQpIGRpZmZbU1RBVEUgKyBuYW1lXSA9IENoYW5nZVN0YXRlLkFkZGVkO1xyXG4gICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgIHByb21pc2VzLnB1c2gocHJvbWlzZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgZGlmZltrXSA9IG9iajtcclxuICAgICAgICAgICAgICBpZiAoYlZhbCA9PT0gdW5kZWZpbmVkKSBkaWZmW1NUQVRFICsga10gPSBDaGFuZ2VTdGF0ZS5BZGRlZDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgIGRpZmZba10gPSBhVmFsO1xyXG4gICAgICAgICAgaWYgKGsgPT09ICd1c2VySWQnKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHByb21pc2UgPSBmaXJzdFZhbHVlRnJvbSh0aGlzLl9hY2NvdW50cy5nZXQoYVZhbCkpLnRoZW4odiA9PlxyXG4gICAgICAgICAgICAgIGRpZmZba10gPSB2Lm5hbWUpO1xyXG4gICAgICAgICAgICBwcm9taXNlcy5wdXNoKHByb21pc2UpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgaWYgKGJWYWwgIT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgICBpZiAoayA9PT0gJ3VzZXJJZCcpIHtcclxuICAgICAgICAgICAgICBjb25zdCBwcm9taXNlID0gZmlyc3RWYWx1ZUZyb20odGhpcy5fYWNjb3VudHMuZ2V0KGJWYWwpKS50aGVuKHYgPT5cclxuICAgICAgICAgICAgICAgIGRpZmZbT1JJR0lOQUxfVkFMVUUgKyBrXSA9IHYubmFtZSk7XHJcbiAgICAgICAgICAgICAgcHJvbWlzZXMucHVzaChwcm9taXNlKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlXHJcbiAgICAgICAgICAgICAgZGlmZltPUklHSU5BTF9WQUxVRSArIGtdID0gYlZhbDtcclxuICAgICAgICAgICAgZGlmZltTVEFURSArIGtdID0gQ2hhbmdlU3RhdGUuTW9kaWZpZWQ7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBlbHNlXHJcbiAgICAgICAgICAgIGRpZmZbU1RBVEUgKyBrXSA9IENoYW5nZVN0YXRlLkFkZGVkO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgICAgIGlmIChpc09iamVjdChiKSlcclxuICAgICAgICBPYmplY3Qua2V5cyhiKS5mb3JFYWNoKGsgPT4ge1xyXG4gICAgICAgICAgaWYgKGFba10gIT09IHVuZGVmaW5lZCB8fCB0aGlzLl9pZ25vcmUoaywgc2NvcGUubm9kZXMpKSByZXR1cm47XHJcbiAgICAgICAgICBjb25zdCBiVmFsID0gYltrXTtcclxuICAgICAgICAgIGlmIChzY29wZS5ub2Rlcy5pbmRleE9mKCdwb3NpdGlvbnMnKSA+IC0xKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IG9iaiA9IFtdO1xyXG4gICAgICAgICAgICBkaWZmW09SSUdJTkFMX1ZBTFVFICsga10gPSBiVmFsO1xyXG4gICAgICAgICAgICBjb25zdCBwcm9taXNlID0gZmlyc3RWYWx1ZUZyb20odGhpcy5fZHMuZ2V0KHNjb3BlLnR5cGUsIGspKS50aGVuKHYgPT4ge1xyXG4gICAgICAgICAgICAgIGNvbnN0IG5hbWUgPSBpc1N0cmluZyh2KSA/IHYgOiB2W09iamVjdC5rZXlzKHYpWzBdXTtcclxuICAgICAgICAgICAgICBkaWZmW25hbWVdID0gb2JqO1xyXG4gICAgICAgICAgICAgIGRpZmZbU1RBVEUgKyBuYW1lXSA9IENoYW5nZVN0YXRlLlJlbW92ZWQ7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICBwcm9taXNlcy5wdXNoKHByb21pc2UpO1xyXG4gICAgICAgICAgICBiVmFsICYmIChiVmFsIGFzIGFueVtdKS5mb3JFYWNoKChlLCBpKSA9PiB7XHJcbiAgICAgICAgICAgICAgY29uc3QgcHJvbWlzZSA9IGZpcnN0VmFsdWVGcm9tKHRoaXMuX2FjY291bnRzLmdldChlKSkudGhlbih2ID0+XHJcbiAgICAgICAgICAgICAgICBvYmpbaV0gPSB2Lm5hbWUpO1xyXG4gICAgICAgICAgICAgIHByb21pc2VzLnB1c2gocHJvbWlzZSk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIGlmIChpc09iamVjdChiVmFsKSkge1xyXG4gICAgICAgICAgICAgIGNvbnN0IG9iaiA9IGlzQXJyYXkoYlZhbCkgPyBbXSA6IHt9O1xyXG4gICAgICAgICAgICAgIGNvbnN0IHByb21pc2UgPSB0aGlzLl9icmFuY2goYlZhbCwgb2JqLCB7IHR5cGU6IGJWYWxbREFUQV9UWVBFXSB8fCBzY29wZS50eXBlLCBub2RlczogWy4uLnNjb3BlLm5vZGVzLCBrXSB9KTtcclxuICAgICAgICAgICAgICBpZiAoIXByb21pc2UpIHJldHVybjtcclxuICAgICAgICAgICAgICBkaWZmW2tdID0gb2JqO1xyXG4gICAgICAgICAgICAgIHByb21pc2UgJiYgcHJvbWlzZXMucHVzaChwcm9taXNlKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICBkaWZmW2tdID0gYlZhbDtcclxuICAgICAgICAgICAgICBpZiAoayA9PT0gJ3VzZXJJZCcpIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHByb21pc2UgPSBmaXJzdFZhbHVlRnJvbSh0aGlzLl9hY2NvdW50cy5nZXQoYlZhbCkpLnRoZW4odiA9PlxyXG4gICAgICAgICAgICAgICAgICBkaWZmW2tdID0gdi5uYW1lKTtcclxuICAgICAgICAgICAgICAgIHByb21pc2VzLnB1c2gocHJvbWlzZSk7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGRpZmZbU1RBVEUgKyBrXSA9IENoYW5nZVN0YXRlLlJlbW92ZWQ7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIGVsc2Uge1xyXG4gICAgICAgIGRpZmZbU1RBVEUgKyBzY29wZS5wcm9wZXJ0eU5hbWVdID0gQ2hhbmdlU3RhdGUuTW9kaWZpZWQ7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKCFPYmplY3Qua2V5cyhkaWZmKS5sZW5ndGgpIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuICAgIHJldHVybiBwcm9taXNlcy5sZW5ndGggPyBQcm9taXNlLmFsbChwcm9taXNlcykudGhlbigoKSA9PiBkaWZmKSA6IFByb21pc2UucmVzb2x2ZShkaWZmKTtcclxuICB9XHJcbiAgLyoqXHJcbiAgICogXHJcbiAgICogQHBhcmFtIG9iajFcclxuICAgKiBAcGFyYW0gb2JqMlxyXG4gICAqL1xyXG4gIHByaXZhdGUgX21hdGNoKG9iajE6IGFueSwgb2JqMjogYW55KSB7XHJcbiAgICByZXR1cm4gSU5ERVhfUFJPUEVSVFkuZmluZEluZGV4KGsgPT4gb2JqMVtrXSAmJiBvYmoxW2tdID09PSBvYmoyW2tdKSA+IC0xO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogXHJcbiAgICogQHBhcmFtIGJhc2VcclxuICAgKiBAcGFyYW0gb2JqXHJcbiAgICogQHBhcmFtIG5vZGVzXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBfcmVrZXkoYmFzZToge30sIG9iajoge30sIG5vZGVzOiBzdHJpbmdbXSkge1xyXG4gICAgY29uc3QgbmV3T2JqID0ge307XHJcbiAgICBsZXQgb2sgPSBmYWxzZTtcclxuICAgIElOREVYX1BST1BFUlRZLmZvckVhY2goayA9PiB7XHJcbiAgICAgIGlmICh0aGlzLl9pZ25vcmUoaywgbm9kZXMpKSByZXR1cm47XHJcbiAgICAgIGlmIChiYXNlW2tdKSB7XHJcbiAgICAgICAgbmV3T2JqW2tdID0gYmFzZVtrXTtcclxuICAgICAgICBvayA9IHRydWU7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gICAgcmV0dXJuIG9rID8gT2JqZWN0LmFzc2lnbihuZXdPYmosIG9iaikgOiBvYmo7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBcclxuICAgKiBAcGFyYW0gbmFtZVxyXG4gICAqIEBwYXJhbSBub2Rlc1xyXG4gICAqL1xyXG4gIHByaXZhdGUgX2lnbm9yZShuYW1lOiBzdHJpbmcsIG5vZGVzOiBzdHJpbmdbXSkge1xyXG4gICAgcmV0dXJuIElHTk9SRV9OT0RFLmluZGV4T2YobmFtZSkgPiAtMSB8fCBJR05PUkVfTk9ERS5pbmRleE9mKG5vZGVzW25vZGVzLmxlbmd0aCAtIDFdICsgJy4nICsgbmFtZSkgPiAtMTtcclxuICB9XHJcbiAgLyoqXHJcbiAgICogXHJcbiAgICogQHBhcmFtIGJhc2VcclxuICAgKiBAcGFyYW0gcHJlc3RpbmVcclxuICAgKiBAcGFyYW0gc2NvcGVcclxuICAgKi9cclxuICBwcml2YXRlIF9icmFuY2goYmFzZToge30gfCBbXSwgcHJlc3RpbmU6IHt9IHwgW10sIHNjb3BlOiBTY29wZSk6IFByb21pc2U8YW55PiB8IGZhbHNlIHtcclxuICAgIGNvbnN0IHByb21pc2VzOiBQcm9taXNlPGFueT5bXSA9IFtdO1xyXG4gICAgaWYgKGlzQXJyYXkoYmFzZSkpIHtcclxuICAgICAgYmFzZS5mb3JFYWNoKGUgPT4ge1xyXG4gICAgICAgIGlmIChpc09iamVjdChlKSkge1xyXG4gICAgICAgICAgY29uc3Qgb2JqID0gaXNBcnJheShlKSA/IFtdIDoge307XHJcbiAgICAgICAgICBjb25zdCBwcm9taXNlID0gdGhpcy5fYnJhbmNoKGUsIG9iaiwgeyBub2Rlczogc2NvcGUubm9kZXMsIHR5cGU6IGVbREFUQV9UWVBFXSB8fCBzY29wZS50eXBlIH0pO1xyXG4gICAgICAgICAgaWYgKCFwcm9taXNlKVxyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICBwcm9taXNlcy5wdXNoKHByb21pc2UpO1xyXG4gICAgICAgICAgKHByZXN0aW5lIGFzIGFueVtdKS5wdXNoKG9iaik7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgY29uc3QgbGVuZ3RoID0gKHByZXN0aW5lIGFzIGFueVtdKS5wdXNoKGUpO1xyXG4gICAgICAgICAgaWYgKHNjb3BlLm5vZGVzLmluZGV4T2YoJ3Bvc2l0aW9ucycpID4gLTEpIHtcclxuICAgICAgICAgICAgY29uc3QgcHJvbWlzZSA9IGZpcnN0VmFsdWVGcm9tKHRoaXMuX2FjY291bnRzLmdldChlKSkudGhlbih2ID0+XHJcbiAgICAgICAgICAgICAgcHJlc3RpbmVbbGVuZ3RoIC0gMV0gPSB2Lm5hbWUpO1xyXG4gICAgICAgICAgICBwcm9taXNlcy5wdXNoKHByb21pc2UpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgICAgIGlmICghKHByZXN0aW5lIGFzIGFueVtdKS5sZW5ndGgpIHJldHVybiBmYWxzZTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIE9iamVjdC5rZXlzKGJhc2UpLmZvckVhY2goayA9PiB7XHJcbiAgICAgICAgaWYgKHRoaXMuX2lnbm9yZShrLCBzY29wZS5ub2RlcykpIHJldHVybjtcclxuICAgICAgICBjb25zdCBhVmFsID0gYmFzZVtrXTtcclxuICAgICAgICBpZiAoaXNPYmplY3QoYVZhbCkpIHtcclxuICAgICAgICAgIGNvbnN0IG9iaiA9IGlzQXJyYXkoYVZhbCkgPyBbXSA6IHt9O1xyXG4gICAgICAgICAgY29uc3QgcHJvbWlzZSA9IHRoaXMuX2JyYW5jaChhVmFsLCBvYmosIHsgdHlwZTogYVZhbFtEQVRBX1RZUEVdIHx8IHNjb3BlLnR5cGUsIG5vZGVzOiBbLi4uc2NvcGUubm9kZXMsIGtdIH0pO1xyXG4gICAgICAgICAgaWYgKCFwcm9taXNlKVxyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICBwcm9taXNlcy5wdXNoKHByb21pc2UpO1xyXG4gICAgICAgICAgaWYgKHNjb3BlLm5vZGVzLmluZGV4T2YoJ3Bvc2l0aW9ucycpID4gLTEpIHtcclxuICAgICAgICAgICAgY29uc3QgcHJvbWlzZSA9IGZpcnN0VmFsdWVGcm9tKHRoaXMuX2RzLmdldChzY29wZS50eXBlLCBrKSkudGhlbih2ID0+XHJcbiAgICAgICAgICAgICAgcHJlc3RpbmVbaXNTdHJpbmcodikgPyB2IDogdltPYmplY3Qua2V5cyh2KVswXV1dID0gb2JqXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIHByb21pc2VzLnB1c2gocHJvbWlzZSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBlbHNlXHJcbiAgICAgICAgICAgIHByZXN0aW5lW2tdID0gb2JqO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgIHByZXN0aW5lW2tdID0gYVZhbDtcclxuICAgICAgICAgIGlmIChrID09PSAndXNlcklkJykge1xyXG4gICAgICAgICAgICBjb25zdCBwcm9taXNlID0gZmlyc3RWYWx1ZUZyb20odGhpcy5fYWNjb3VudHMuZ2V0KGFWYWwpKS50aGVuKHYgPT5cclxuICAgICAgICAgICAgICBwcmVzdGluZVtrXSA9IHYubmFtZSk7XHJcbiAgICAgICAgICAgIHByb21pc2VzLnB1c2gocHJvbWlzZSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgICAgaWYgKCFPYmplY3Qua2V5cyhwcmVzdGluZSkubGVuZ3RoKSByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gcHJvbWlzZXMubGVuZ3RoID8gUHJvbWlzZS5hbGwocHJvbWlzZXMpIDogUHJvbWlzZS5yZXNvbHZlKCk7XHJcbiAgfVxyXG4gIC8qKlxyXG4gICAqIHJldHVybiBodG1sIGZyb20gZGlmZiB0cmVlXHJcbiAgICogQHBhcmFtIGRpZmZcclxuICAgKiBAcGFyYW0gb2Jqc3RhdGVcclxuICAgKiBAcGFyYW0gcHJvcGVydHlOYW1lXHJcbiAgICogQHBhcmFtIHNpYmxpbmcgYXJyYXkgZW50cnlcclxuICAgKi9cclxuICBwcml2YXRlIF9nZW5lcmF0ZShkaWZmOiB7fSB8IFtdLCBvYmpzdGF0ZTogQ2hhbmdlU3RhdGUgPSBDaGFuZ2VTdGF0ZS5VbmNoYW5nZWQsXHJcbiAgICBwcm9wZXJ0eU5hbWUgPSB1bmRlZmluZWQsIHNpYmxpbmcgPSBmYWxzZSkge1xyXG4gICAgbGV0IGggPSAnJztcclxuICAgIGlmIChpc0FycmF5KGRpZmYpKSB7XHJcbiAgICAgIGggKz0gdGhpcy5fd3JpdGUob2Jqc3RhdGUsIFRva2VuS2luZC5BcnJheVN0YXJ0LCBmYWxzZSwgZmFsc2UsIHByb3BlcnR5TmFtZSk7XHJcbiAgICAgIGNvbnN0IG4gPSBkaWZmLmxlbmd0aDtcclxuICAgICAgZGlmZi5mb3JFYWNoKChlLCBpKSA9PiB7XHJcbiAgICAgICAgY29uc3Qgc3RhdGUgPSBkaWZmW1NUQVRFICsgaS50b1N0cmluZygpXTtcclxuICAgICAgICBpZiAoaXNPYmplY3QoZSkpXHJcbiAgICAgICAgICBoICs9IHRoaXMuX2dlbmVyYXRlKGUsIHN0YXRlLCB1bmRlZmluZWQsIGkgPCBuIC0gMSk7XHJcbiAgICAgICAgZWxzZVxyXG4gICAgICAgICAgaCArPSB0aGlzLl93cml0ZShzdGF0ZSwgVG9rZW5LaW5kLlZhbHVlLFxyXG4gICAgICAgICAgICBpID09PSBuIC0gMSB8fCBkaWZmW1NUQVRFICsgKGkgKyAxKS50b1N0cmluZygpXSAhPT0gc3RhdGUsXHJcbiAgICAgICAgICAgIGkgPCBuIC0gMSwgdW5kZWZpbmVkLCBlKTtcclxuICAgICAgfSk7XHJcbiAgICAgIGggKz0gdGhpcy5fd3JpdGUob2Jqc3RhdGUsIFRva2VuS2luZC5BcnJheUVuZCwgdHJ1ZSwgc2libGluZyk7XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgaCArPSB0aGlzLl93cml0ZShvYmpzdGF0ZSwgVG9rZW5LaW5kLk9iamVjdFN0YXJ0LCBmYWxzZSwgZmFsc2UsIHByb3BlcnR5TmFtZSk7XHJcbiAgICAgIGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyhkaWZmKS5maWx0ZXIoayA9PiAhay5zdGFydHNXaXRoKE9SSUdJTkFMX1ZBTFVFKSk7XHJcbiAgICAgIGtleXMuZm9yRWFjaCgoaywgaSkgPT4ge1xyXG4gICAgICAgIGNvbnN0IHZhbCA9IGRpZmZba10sIHN0YXRlID0gZGlmZltTVEFURSArIGtdLCBuID0ga2V5cy5sZW5ndGg7XHJcbiAgICAgICAgaWYgKGlzT2JqZWN0KHZhbCkpXHJcbiAgICAgICAgICBoICs9IHRoaXMuX2dlbmVyYXRlKHZhbCwgc3RhdGUsIGssIGkgPCBuIC0gMSk7XHJcbiAgICAgICAgZWxzZVxyXG4gICAgICAgICAgaCArPSB0aGlzLl93cml0ZShzdGF0ZSwgVG9rZW5LaW5kLlZhbHVlLCBzdGF0ZSAhPT0gb2Jqc3RhdGUsIGkgPCBuIC0gMSwgaywgdmFsLCBkaWZmW09SSUdJTkFMX1ZBTFVFICsga10pO1xyXG4gICAgICB9KTtcclxuICAgICAgaCArPSB0aGlzLl93cml0ZShvYmpzdGF0ZSwgVG9rZW5LaW5kLk9iamVjdEVuZCwgdHJ1ZSwgc2libGluZyk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gaDtcclxuICB9XHJcbiAgLyoqXHJcbiAgICogd3JpdGUgaHRtbCBsaW5lXHJcbiAgICogQHBhcmFtIHN0YXRlXHJcbiAgICogQHBhcmFtIGFubm90YXRlXHJcbiAgICogQHBhcmFtIHRva2VuXHJcbiAgICogQHBhcmFtIHNpYmxpbmcgYXJyYXkgZW50cnlcclxuICAgKiBAcGFyYW0gcHJvcGVydHlOYW1lXHJcbiAgICogQHBhcmFtIHZhbHVlXHJcbiAgICogQHBhcmFtIG9yaWdpbmFsVmFsdWVcclxuICAgKi9cclxuICBwcml2YXRlIF93cml0ZShzdGF0ZTogQ2hhbmdlU3RhdGUsXHJcbiAgICB0b2tlbjogVG9rZW5LaW5kLFxyXG4gICAgYW5ub3RhdGU6IGJvb2xlYW4sXHJcbiAgICBzaWJsaW5nPzogYm9vbGVhbixcclxuICAgIHByb3BlcnR5TmFtZT86IHN0cmluZyxcclxuICAgIHZhbHVlPzogc3RyaW5nIHwgbnVtYmVyIHwgYm9vbGVhbixcclxuICAgIG9yaWdpbmFsVmFsdWU/OiBzdHJpbmcgfCBudW1iZXIgfCBib29sZWFuXHJcbiAgKSB7XHJcbiAgICBsZXQgaCA9ICcnLCBicmFja2V0czogc3RyaW5nLCBjbHM6IHN0cmluZztcclxuICAgIHN3aXRjaCAoc3RhdGUpIHtcclxuICAgICAgY2FzZSBDaGFuZ2VTdGF0ZS5SZW1vdmVkOlxyXG4gICAgICAgIGNscyA9ICdjb21wYXJlIHJlbW92ZWQnO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIENoYW5nZVN0YXRlLkFkZGVkOlxyXG4gICAgICAgIGNscyA9ICdjb21wYXJlIGFkZGVkJztcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSBDaGFuZ2VTdGF0ZS5Nb2RpZmllZDpcclxuICAgICAgICBjbHMgPSAnY29tcGFyZSBtb2RpZmllZCc7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgY2xzID0gJyc7XHJcbiAgICB9XHJcbiAgICBzd2l0Y2ggKHRva2VuKSB7XHJcbiAgICAgIGNhc2UgVG9rZW5LaW5kLkFycmF5U3RhcnQ6XHJcbiAgICAgICAgYnJhY2tldHMgPSAnWyc7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgVG9rZW5LaW5kLk9iamVjdFN0YXJ0OlxyXG4gICAgICAgIGJyYWNrZXRzID0gJ3snO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIFRva2VuS2luZC5BcnJheUVuZDpcclxuICAgICAgICBicmFja2V0cyA9ICddJztcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSBUb2tlbktpbmQuT2JqZWN0RW5kOlxyXG4gICAgICAgIGJyYWNrZXRzID0gJ30nO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgfVxyXG4gICAgaWYgKHRva2VuID09IFRva2VuS2luZC5PYmplY3RTdGFydCB8fCB0b2tlbiA9PSBUb2tlbktpbmQuQXJyYXlTdGFydClcclxuICAgICAgaCA9IGA8ZGl2IGNsYXNzPVwic2NvcGUgJHtjbHN9XCI+YDtcclxuICAgIGlmIChwcm9wZXJ0eU5hbWUpXHJcbiAgICAgIGggKz0gYDxzcGFuIGNsYXNzPVwic3RydWN0dXJlICR7Y2xzfVwiPiR7cHJvcGVydHlOYW1lfTogPC9zcGFuPmA7XHJcbiAgICBpZiAoYnJhY2tldHMpIHtcclxuICAgICAgaWYgKHRva2VuID09IFRva2VuS2luZC5PYmplY3RFbmQgfHwgdG9rZW4gPT0gVG9rZW5LaW5kLkFycmF5RW5kKVxyXG4gICAgICAgIGggKz0gJzwvZGl2Pic7XHJcbiAgICAgIGggKz0gYDxzcGFuIGNsYXNzPVwiYnJhY2tldHNcIj4ke2JyYWNrZXRzfTwvc3Bhbj5gXHJcbiAgICAgIGlmICh0b2tlbiA9PSBUb2tlbktpbmQuT2JqZWN0U3RhcnQgfHwgdG9rZW4gPT0gVG9rZW5LaW5kLkFycmF5U3RhcnQpXHJcbiAgICAgICAgaCArPSAnPHNwYW4gY2xhc3M9XCJhbHRlcm5hdGVcIj4uLi48L3NwYW4+PGRpdiBjbGFzcz1cInNjb3BlLWNvbnRlbnRcIj4nO1xyXG4gICAgfVxyXG4gICAgaWYgKHRva2VuID09IFRva2VuS2luZC5WYWx1ZSkge1xyXG4gICAgICBpZiAocHJvcGVydHlOYW1lID09PSAnY29sb3InKSBoICs9IGA8ZGl2IGNsYXNzPVwiY29sb3JcIiBzdHlsZT1cImJhY2tncm91bmQtY29sb3I6JHt2YWx1ZX1cIj48L2Rpdj4mbmJzcDtgO1xyXG4gICAgICBlbHNlIGlmICgocHJvcGVydHlOYW1lID09PSAnc2hhcGUnIHx8IHByb3BlcnR5TmFtZSA9PT0gJ2RhdGEnKSAmJiBTVkdfUEFUSF9SRUdFWC50ZXN0KHZhbHVlIGFzIHN0cmluZykpIGggKz0gYDxzdmcgd2lkdGg9MTIgaGVpZ2h0PTEyIHZpZXdCb3g9XCIwIDAgMzUgMzVcIiBwcmVzZXJ2ZUFzcGVjdFJhdGlvPVwibm9uZVwiPjxwYXRoIGQ9XCIke3ZhbHVlfVwiPjwvcGF0aD48L3N2Zz4mbmJzcDtgO1xyXG4gICAgICBoICs9IGA8c3BhbiBjbGFzcz1cInZhbHVlICR7Y2xzfVwiPiR7dmFsdWV9PC9zcGFuPmA7XHJcbiAgICB9XHJcbiAgICBpZiAoc2libGluZykgaCArPSAnPHNwYW4gY2xhc3M9XCJzdHJ1Y3R1cmVcIj4sPC9zcGFuPic7XHJcbiAgICBpZiAoc3RhdGUgJiYgYW5ub3RhdGUpIHtcclxuICAgICAgY29uc3QgcmVzb3VyY2UgPSBzdGF0ZSA9PT0gQ2hhbmdlU3RhdGUuUmVtb3ZlZCA/ICdEZWxldGVkJyA6IHN0YXRlID09PSBDaGFuZ2VTdGF0ZS5BZGRlZCA/ICdBZGRlZCcgOiAnTW9kaWZpZWQnO1xyXG4gICAgICBoICs9IGA8ZGl2IGNsYXNzPVwiJHtjbHN9XCI+IDxkaXYgY2xhc3M9XCJsYWJlbFwiPjxzcGFuPiR7dGhpcy5fdHJhbnNsYXRlLmdldChyZXNvdXJjZSl9YDtcclxuICAgICAgaWYgKG9yaWdpbmFsVmFsdWUpXHJcbiAgICAgICAgaCArPSBgJm5ic3A7PHNwYW4gY2xhc3M9XCJvcmlnaW5hbFwiPiR7b3JpZ2luYWxWYWx1ZX08L3NwYW4+YDtcclxuICAgICAgaCArPSAnPC9zcGFuPjwvZGl2PjwvZGl2Pic7XHJcbiAgICB9XHJcbiAgICBlbHNlIGlmICh0b2tlbiA9PT0gVG9rZW5LaW5kLlZhbHVlKVxyXG4gICAgICBoICs9ICc8YnIvPic7XHJcbiAgICBpZiAodG9rZW4gPT0gVG9rZW5LaW5kLk9iamVjdEVuZCB8fCB0b2tlbiA9PSBUb2tlbktpbmQuQXJyYXlFbmQpXHJcbiAgICAgIGggKz0gJzwvZGl2Pic7XHJcbiAgICByZXR1cm4gaDtcclxuICB9XHJcbiAgLyoqXHJcbiAgICogdG9nZ2xlXHJcbiAgICogQHBhcmFtIGV2dFxyXG4gICAqL1xyXG4gIGNvbGxhcHNlKGV2dDogTW91c2VFdmVudCkge1xyXG4gICAgbGV0IGVsID0gZXZ0LnRhcmdldCBhcyBIVE1MRWxlbWVudDtcclxuICAgIHdoaWxlIChlbCAmJiAhZWwuY2xhc3NMaXN0LmNvbnRhaW5zKCdzY29wZScpKVxyXG4gICAgICBlbCA9IGVsLnBhcmVudEVsZW1lbnQ7XHJcbiAgICBlbCAmJiBlbC5jbGFzc0xpc3QudG9nZ2xlKCdjb2xsYXBzZScpICYmIGVsLmNsYXNzTGlzdC5yZW1vdmUoJ2ZvY3VzJyk7XHJcbiAgICBldnQuc3RvcFByb3BhZ2F0aW9uKCk7XHJcbiAgfVxyXG4gIC8qKlxyXG4gICAqIHJlbW92ZSBjbHNcclxuICAgKi9cclxuICBmb2N1c091dCgpIHtcclxuICAgIHRoaXMuY29udGVudHMubmF0aXZlRWxlbWVudC5xdWVyeVNlbGVjdG9yQWxsKCcuc2NvcGUuZm9jdXMnKS5mb3JFYWNoKGUgPT5cclxuICAgICAgZS5jbGFzc0xpc3QucmVtb3ZlKCdmb2N1cycpXHJcbiAgICApO1xyXG4gIH1cclxuICAvKipcclxuICAgKiBcclxuICAgKiBAcGFyYW0gZXZ0XHJcbiAgICovXHJcbiAgZm9jdXNJbihldnQ6IE1vdXNlRXZlbnQpIHtcclxuICAgIHRoaXMuZm9jdXNPdXQoKTtcclxuICAgIGxldCBlbCA9IGV2dC50YXJnZXQgYXMgSFRNTEVsZW1lbnQ7XHJcbiAgICB3aGlsZSAoZWwgJiYgIWVsLmNsYXNzTGlzdC5jb250YWlucygnc2NvcGUnKSlcclxuICAgICAgZWwgPSBlbC5wYXJlbnRFbGVtZW50O1xyXG4gICAgZWwgJiYgIWVsLmNsYXNzTGlzdC5jb250YWlucygnY29sbGFwc2UnKSAmJiBlbC5jbGFzc0xpc3QuYWRkKCdmb2N1cycpO1xyXG4gIH1cclxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcclxuICAgIHRoaXMuX2Rlc3Ryb3kubmV4dCgpO1xyXG4gICAgdGhpcy5fZGVzdHJveS5jb21wbGV0ZSgpO1xyXG4gIH1cclxufVxyXG5pbnRlcmZhY2UgVmVyc2lvbkluZm8ge1xyXG4gIHRpbWU6IERhdGU7XHJcbiAgYXV0aG9yOiBzdHJpbmc7XHJcbiAgZmlsZT86IHN0cmluZztcclxufVxyXG5pbnRlcmZhY2UgQ29uZmlndXJ0aW9uSW5mbyB7XHJcbn1cclxuaW50ZXJmYWNlIENvbXBhcmVNb2RlbCB7XHJcbiAgZGF0ZTE6IERhdGU7XHJcbiAgZGF0ZTI6IERhdGU7XHJcbn1cclxuaW50ZXJmYWNlIFNjb3BlIHtcclxuICB0eXBlPzogc3RyaW5nO1xyXG4gIHByb3BlcnR5TmFtZT86IHN0cmluZztcclxuICBub2Rlczogc3RyaW5nW107XHJcbn1cclxuZW51bSBDaGFuZ2VTdGF0ZSB7XHJcbiAgVW5jaGFuZ2VkLFxyXG4gIEFkZGVkLFxyXG4gIE1vZGlmaWVkLFxyXG4gIFJlbW92ZWRcclxufVxyXG5lbnVtIFRva2VuS2luZCB7XHJcbiAgVmFsdWUsXHJcbiAgQXJyYXlTdGFydCxcclxuICBBcnJheUVuZCxcclxuICBPYmplY3RTdGFydCxcclxuICBPYmplY3RFbmRcclxufVxyXG4iLCI8bWF0LXRvb2xiYXI+XG4gIDxidXR0b24gbWF0LWljb24tYnV0dG9uIChjbGljayk9XCJwcm9wZXJ0aWVzLnRvZ2dsZSgpXCIgW2JpemRvY1Rvb2x0aXBdPVwiJ0NvbGxhcHNlJyB8IHRyYW5zbGF0ZVwiPjxtYXQtaWNvbj52aWV3X3NpZGViYXI8L21hdC1pY29uPjwvYnV0dG9uPlxuICA8c3BhbiBjbGFzcz1cImRpdmlkZXJcIj48L3NwYW4+XG48L21hdC10b29sYmFyPlxuPG1hdC1zaWRlbmF2LWNvbnRhaW5lciBhdXRvc2l6ZSBjbGFzcz1cImZsZXhcIj5cbiAgPG1hdC1zaWRlbmF2LWNvbnRlbnQ+XG4gICAgPG1hdC1wcm9ncmVzcy1iYXIgbW9kZT1cImJ1ZmZlclwiIFt2YWx1ZV09cHJvZ3Jlc3MgW2J1ZmZlclZhbHVlXT0wIFtzdHlsZS52aXNpYmlsaXR5XT1cInByb2dyZXNzID4gMCAmJiBwcm9ncmVzcyA8IDEwMCA/ICd2aXNpYmxlJzonaGlkZGVuJ1wiPjwvbWF0LXByb2dyZXNzLWJhcj5cbiAgICA8ZGl2IFtpbm5lckhUTUxdPVwiaHRtbCB8IHNhbml0aXplSHRtbFwiIChtb3VzZWxlYXZlKT1cImZvY3VzT3V0KClcIiAobW91c2Vtb3ZlKT1cImZvY3VzSW4oJGV2ZW50KVwiIGNsYXNzPVwiY29uZmlndXJhdGlvbi1kaWZmXCIgKGNsaWNrKT1cImNvbGxhcHNlKCRldmVudClcIiAjY29udGVudHM+PC9kaXY+XG4gIDwvbWF0LXNpZGVuYXYtY29udGVudD5cbiAgPG1hdC1zaWRlbmF2IG1vZGU9XCJzaWRlXCIgb3BlbmVkICNwcm9wZXJ0aWVzIGNsYXNzPVwidGltZWxpbmVcIj5cbiAgICBAaWYgKHZlcnNpb25zKSB7XG4gICAgICA8bWF0LW5hdi1saXN0IGNsYXNzPVwibmF2LWxpc3RcIj5cbiAgICAgICAgQGZvciAodiBvZiB2ZXJzaW9uczsgdHJhY2sgdjsgbGV0IGluZGV4ID0gJGluZGV4OyBsZXQgbGFzdCA9ICRsYXN0KSB7XG4gICAgICAgICAgQGlmICghbGFzdCkge1xuICAgICAgICAgICAgPG1hdC1saXN0LWl0ZW0gKGNsaWNrKT1cImNvbXBhcmUoaW5kZXgpXCIgW2NsYXNzLmFjdGl2ZV09XCJ2LnRpbWUgPT09IGFjdGl2ZURhdGVcIj5cbiAgICAgICAgICAgICAgPGgzIG1hdExpc3RJdGVtVGl0bGU+XG4gICAgICAgICAgICAgICAge3sodi5hdXRob3IgfHwgJ1N5c3RlbScpIHwgdXNlck5hbWUgfCBhc3luYyB9fVxuICAgICAgICAgICAgICA8L2gzPlxuICAgICAgICAgICAgICA8cCBjbGFzcz1cInRpbWVcIiBtYXRMaXN0SXRlbUxpbmU+XG4gICAgICAgICAgICAgICAge3t2LnRpbWUgfCBhbUNhbGVuZGFyOiBudWxsOiBDQUxFTkRBUl9TUEVDIH19XG4gICAgICAgICAgICAgIDwvcD5cbiAgICAgICAgICAgIDwvbWF0LWxpc3QtaXRlbT5cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIDwvbWF0LW5hdi1saXN0PlxuICAgIH1cbiAgPC9tYXQtc2lkZW5hdj5cbjwvbWF0LXNpZGVuYXYtY29udGFpbmVyPlxuIl19
572
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uZmlndXJhdGlvbi1kaWZmLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnJhcmllcy9jb3JlL3NyYy9saWIvYWRtaW4vZGlmZi9jb25maWd1cmF0aW9uLWRpZmYuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vbGlicmFyaWVzL2NvcmUvc3JjL2xpYi9hZG1pbi9kaWZmL2NvbmZpZ3VyYXRpb24tZGlmZi5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUFFLFNBQVMsRUFBcUIsTUFBTSxFQUFFLFNBQVMsRUFBYyxNQUFNLGVBQWUsQ0FBQztBQUM1RixPQUFPLEVBQUUsY0FBYyxFQUFFLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUMvQyxPQUFPLEVBQUUsWUFBWSxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRXpELE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUMvQyxPQUFPLEVBQUUsT0FBTyxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUVuRSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFNNUMsTUFBTSxXQUFXLEdBQUcsQ0FBQyxRQUFRLEVBQUUsU0FBUyxFQUFFLGlCQUFpQixFQUFFLGlCQUFpQixFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsYUFBYSxFQUFFLE9BQU8sRUFBRSxRQUFRO0lBQ3BJLE9BQU8sRUFBRSxVQUFVLEVBQUUsUUFBUSxFQUFFLGNBQWMsRUFBRSxjQUFjLEVBQUUscUJBQXFCLEVBQUUsbUJBQW1CLEVBQUUsb0JBQW9CO0lBQy9ILHdCQUF3QixFQUFFLG1CQUFtQixFQUFFLHlCQUF5QixFQUFFLGdCQUFnQixDQUFDLEVBQzNGLGNBQWMsR0FBRyxjQUFjLEVBQy9CLGNBQWMs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LElBQUksRUFBRSxDQUFDO1FBQ3JCLElBQUksQ0FBQyxRQUFRLENBQUMsUUFBUSxFQUFFLENBQUM7SUFDM0IsQ0FBQzs4R0EvZlUsbUJBQW1CLCtDQWlCcEIsVUFBVTtrR0FqQlQsbUJBQW1CLDBKQ3pCaEMsaTJDQTRCQTs7QURIYSxtQkFBbUI7SUFGL0IsTUFBTSxDQUFDLEVBQUUsUUFBUSxFQUFFLDJCQUEyQixFQUFFLENBQUM7SUFDbEQsZUFBZTtHQUNGLG1CQUFtQixDQWdnQi9COzsyRkFoZ0JZLG1CQUFtQjtrQkFOL0IsU0FBUzs7OzBCQXVCTCxNQUFNOzJCQUFDLFVBQVU7cUlBaEJHLFFBQVE7c0JBQTlCLFNBQVM7dUJBQUMsVUFBVTs7QUFnaEJ2QixJQUFLLFdBS0o7QUFMRCxXQUFLLFdBQVc7SUFDZCx1REFBUyxDQUFBO0lBQ1QsK0NBQUssQ0FBQTtJQUNMLHFEQUFRLENBQUE7SUFDUixtREFBTyxDQUFBO0FBQ1QsQ0FBQyxFQUxJLFdBQVcsS0FBWCxXQUFXLFFBS2Y7QUFDRCxJQUFLLFNBTUo7QUFORCxXQUFLLFNBQVM7SUFDWiwyQ0FBSyxDQUFBO0lBQ0wscURBQVUsQ0FBQTtJQUNWLGlEQUFRLENBQUE7SUFDUix1REFBVyxDQUFBO0lBQ1gsbURBQVMsQ0FBQTtBQUNYLENBQUMsRUFOSSxTQUFTLEtBQVQsU0FBUyxRQU1iIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBPbkluaXQsIE9uRGVzdHJveSwgSW5qZWN0LCBWaWV3Q2hpbGQsIEVsZW1lbnRSZWYgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgZmlyc3RWYWx1ZUZyb20sIFN1YmplY3QgfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgZGVib3VuY2VUaW1lLCB0YWtlVW50aWwgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XHJcbmltcG9ydCB7IENhbGVuZGFyU3BlYyB9IGZyb20gXCIuLi8uLi9jb3JlL3BpcGVzL2NhbGVuZGFyLnBpcGVcIjtcclxuaW1wb3J0IHsgQml6RG9jIH0gZnJvbSAnLi4vLi4vY29yZS9kZWNvcmF0b3JzJztcclxuaW1wb3J0IHsgaXNBcnJheSwgaXNPYmplY3QsIGlzU3RyaW5nIH0gZnJvbSAnLi4vLi4vY29yZS9mdW5jdGlvbnMnO1xyXG5pbXBvcnQgeyBVdGlsaXR5Q29tcG9uZW50IH0gZnJvbSAnLi4vLi4vY29yZS9iYXNlJztcclxuaW1wb3J0IHsgVXRpbGl0eVJlZiB9IGZyb20gJy4uL3V0aWxpdHktcmVmJztcclxuaW1wb3J0IHsgUHJvbXB0U2VydmljZSB9IGZyb20gJy4uLy4uL2NvcmUvcHJvbXB0LnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBBY2NvdW50U2VydmljZSB9IGZyb20gJy4uLy4uL2NvcmUvYWNjb3VudC5zZXJ2aWNlJztcclxuaW1wb3J0IHsgVHJhbnNsYXRlU2VydmljZSB9IGZyb20gJy4uLy4uL2NvcmUvdHJhbnNsYXRlLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBEYXRhc291cmNlU2VydmljZSB9IGZyb20gJy4uLy4uL2NvcmUvZGF0YXNvdXJjZS5zZXJ2aWNlJztcclxuXHJcbmNvbnN0IElHTk9SRV9OT0RFID0gWydhdXRob3InLCAnaGlzdG9yeScsICd0YXJnZXREZWNvcmF0b3InLCAnc291cmNlRGVjb3JhdG9yJywgJ29mZnNldFgnLCAnb2Zmc2V0WScsICdyb3RhdGVBbmdsZScsICd3aWR0aCcsICdoZWlnaHQnLFxyXG4gICdzdHlsZScsICdzZWdtZW50cycsICdvZmZzZXQnLCAndGFyZ2V0UG9ydElEJywgJ3NvdXJjZVBvcnRJRCcsICdob3Jpem9udGFsQWxpZ25tZW50JywgJ3ZlcnRpY2FsQWxpZ25tZW50JywgJ3dvcmtmbG93LnRpbWVzdGFtcCcsXHJcbiAgJ2Nvbm5lY3RvcnMuY29uc3RyYWludHMnLCAnbm9kZXMuY29uc3RyYWludHMnLCAnYW5ub3RhdGlvbnMuY29uc3RyYWludHMnLCAnYW5ub3RhdGlvbnMuaWQnXSxcclxuICBTVkdfUEFUSF9SRUdFWCA9IC9eW21NXS4rW3paXSQvLFxyXG4gIElOREVYX1BST1BFUlRZID0gWyduYW1lJywgJ2lkJywgJ2RhdGFUeXBlJywgJ05hbWUnXSwgREFUQV9UWVBFID0gJ2RhdGFUeXBlJywgT1JJR0lOQUxfVkFMVUUgPSAnXycsIFNUQVRFID0gJ19fJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHRlbXBsYXRlVXJsOiAnLi9jb25maWd1cmF0aW9uLWRpZmYuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL2NvbmZpZ3VyYXRpb24tZGlmZi5jb21wb25lbnQuc2NzcyddXHJcbn0pXHJcbkBCaXpEb2MoeyBzZWxlY3RvcjogJ2JpemRvYy1jb25maWd1cmF0aW9uLWRpZmYnIH0pXHJcbi8qKiBjb21wb25lbnQqL1xyXG5leHBvcnQgY2xhc3MgU3lzdGVtRGlmZkNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95LCBVdGlsaXR5Q29tcG9uZW50IHtcclxuICBAVmlld0NoaWxkKCdjb250ZW50cycpIGNvbnRlbnRzOiBFbGVtZW50UmVmPEhUTUxEaXZFbGVtZW50PjtcclxuICBodG1sID0gJyc7XHJcbiAgdmVyc2lvbnM6IFZlcnNpb25JbmZvW107XHJcbiAgYWN0aXZlRGF0ZTogRGF0ZTtcclxuICBwcm9ncmVzcyA9IDA7XHJcbiAgbm9uZTogYm9vbGVhbjtcclxuICBwcml2YXRlIF93b3JraW5nID0gbmV3IFN1YmplY3Q8bnVtYmVyPigpO1xyXG4gIHJlYWRvbmx5IENBTEVOREFSX1NQRUM6IENhbGVuZGFyU3BlYyA9IHtcclxuICAgIGxhc3REYXk6IHRoaXMuX3RyYW5zbGF0ZS5nZXQoJ1llc3RlcmRheUF0JywgJ0hIOm1tJyksXHJcbiAgICBsYXN0V2VlazogJ2RkZCBISDptbScsXHJcbiAgICBzYW1lRGF5OiAnSEg6bW0nLFxyXG4gICAgc2FtZUVsc2U6ICdNTU0gRCBISDptbSdcclxuICB9O1xyXG4gIHByaXZhdGUgcmVhZG9ubHkgX2Rlc3Ryb3kgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xyXG4gIC8qKiBjdG9yICovXHJcbiAgY29uc3RydWN0b3IocHJpdmF0ZSBfc2I6IFByb21wdFNlcnZpY2UsXHJcbiAgICBASW5qZWN0KFV0aWxpdHlSZWYpIHByaXZhdGUgX3V0aWxpdHlSZWY6IFV0aWxpdHlSZWY8Q29uZmlndXJ0aW9uSW5mb1tdLCBDb21wYXJlTW9kZWwsIFZlcnNpb25JbmZvW10sIG51bWJlcj4sXHJcbiAgICBwcml2YXRlIF90cmFuc2xhdGU6IFRyYW5zbGF0ZVNlcnZpY2UsXHJcbiAgICBwcml2YXRlIF9kczogRGF0YXNvdXJjZVNlcnZpY2UsXHJcbiAgICBwcml2YXRlIF9hY2NvdW50czogQWNjb3VudFNlcnZpY2UpIHtcclxuICB9XHJcbiAgbmdPbkluaXQoKTogdm9pZCB7XHJcbiAgICAvLyBkZWxheSBwcm9ncmVzc1xyXG4gICAgdGhpcy5fd29ya2luZy5waXBlKHRha2VVbnRpbCh0aGlzLl9kZXN0cm95KSwgZGVib3VuY2VUaW1lKDEwMCkpLnN1YnNjcmliZSh2ID0+IHYgJiYgKHRoaXMucHJvZ3Jlc3MgPSB2KSk7XHJcbiAgICB0aGlzLl93b3JraW5nLm5leHQoNTApO1xyXG4gICAgLy8gcG9wdWxhdGUgdmVyc2lvbnNcclxuICAgIHRoaXMuX3V0aWxpdHlSZWYucG9wdWxhdGUoKS5zdWJzY3JpYmUoe1xyXG4gICAgICBuZXh0OiBlID0+IHtcclxuICAgICAgICB0aGlzLnZlcnNpb25zID0gZTtcclxuICAgICAgICB0aGlzLl93b3JraW5nLm5leHQoMTAwKTtcclxuICAgICAgICBlLmxlbmd0aCA+IDEgJiZcclxuICAgICAgICAgIHRoaXMuY29tcGFyZSgwKTtcclxuICAgICAgfSwgZXJyb3I6ICgpID0+IHRoaXMuX3NiLmVycm9yKClcclxuICAgIH0pO1xyXG4gIH1cclxuICAvKipcclxuICAgKiBcclxuICAgKiBAcGFyYW0gaW5kZXhcclxuICAgKi9cclxuICBjb21wYXJlKGluZGV4OiBudW1iZXIpIHtcclxuICAgIGNvbnN0IHsgdGltZTogZGF0ZTEsIGZpbGUgfSA9IHRoaXMudmVyc2lvbnNbaW5kZXhdLFxyXG4gICAgICB2ZXJzaW9uID0gdGhpcy52ZXJzaW9ucy5zbGljZShpbmRleCArIDEpLlxyXG4gICAgICAgIGZpbmQodiA9PiB2LmZpbGUgPT09IGZpbGUpO1xyXG4gICAgaWYgKCF2ZXJzaW9uKSByZXR1cm47XHJcbiAgICBjb25zdCB7IHRpbWU6IGRhdGUyIH0gPSB2ZXJzaW9uO1xyXG4gICAgdGhpcy5fd29ya2luZy5uZXh0KDI1KTtcclxuICAgIHRoaXMuX3V0aWxpdHlSZWYuZXhlY3V0ZSh7IGRhdGUxLCBkYXRlMiB9KS5zdWJzY3JpYmUoe1xyXG4gICAgICBuZXh0OiByID0+IHtcclxuICAgICAgICB0aGlzLmh0bWwgPSAnJztcclxuICAgICAgICB0aGlzLl93b3JraW5nLm5leHQoNTApO1xyXG4gICAgICAgIHRoaXMuYWN0aXZlRGF0ZSA9IGRhdGUxO1xyXG4gICAgICAgIGNvbnN0IHJlc3VsdHMgPSB0aGlzLl9jb21wYXJlKHJbMF0sIHJbMV0pO1xyXG4gICAgICAgIGlmIChyZXN1bHRzKSByZXN1bHRzLnRoZW4oZCA9PiB7XHJcbiAgICAgICAgICB0aGlzLl93b3JraW5nLm5leHQoNzUpO1xyXG4gICAgICAgICAgdGhpcy5odG1sID0gdGhpcy5fZ2VuZXJhdGUoZCk7XHJcbiAgICAgICAgICB0aGlzLl9zY3JvbGxUb3AoKTtcclxuICAgICAgICAgIHRoaXMuX3dvcmtpbmcubmV4dCgxMDApO1xyXG4gICAgICAgICAgdGhpcy5ub25lID0gZmFsc2U7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICB0aGlzLl93b3JraW5nLm5leHQoMTAwKTtcclxuICAgICAgICAgIHRoaXMubm9uZSA9IHRydWU7XHJcbiAgICAgICAgfVxyXG4gICAgICB9LCBlcnJvcjogKCkgPT4gdGhpcy5fc2IuZXJyb3IoKVxyXG4gICAgfSk7XHJcbiAgfVxyXG4gIHByaXZhdGUgX3Njcm9sbFRvcCgpIHtcclxuICAgIHNldFRpbWVvdXQoKCkgPT4gdGhpcy5jb250ZW50cy5uYXRpdmVFbGVtZW50LnBhcmVudEVsZW1lbnQuc2Nyb2xsKHsgdG9wOiAwLCBiZWhhdmlvcjogJ3Ntb290aCcgfSkpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogXHJcbiAgICogQHBhcmFtIGFcclxuICAgKiBAcGFyYW0gYlxyXG4gICAqIEBwYXJhbSBkaWZmXHJcbiAgICogQHBhcmFtIHNjb3BlXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBfY29tcGFyZShhOiB7fSB8IFtdLCBiOiB7fSB8IFtdLCBkaWZmOiB7fSB8IFtdID0ge30sIHNjb3BlOiBTY29wZSA9IHsgbm9kZXM6IFtdIH0pOiBQcm9taXNlPHt9IHwgW10+IHwgZmFsc2Uge1xyXG4gICAgY29uc3QgcHJvbWlzZXM6IFByb21pc2U8YW55PltdID0gW107XHJcbiAgICBpZiAoaXNBcnJheShhKSkge1xyXG4gICAgICBhLmZvckVhY2goKGUsIGkpID0+IHtcclxuICAgICAgICBjb25zdCBiVmFsID0gYltpXTtcclxuICAgICAgICBpZiAoZSA9PT0gYlZhbCkgcmV0dXJuO1xyXG4gICAgICAgIGVsc2UgaWYgKGlzT2JqZWN0KGUpKSB7XHJcbiAgICAgICAgICBjb25zdCBhSnNvbiA9IEpTT04uc3RyaW5naWZ5KGUpLCBiSnNvbiA9IEpTT04uc3RyaW5naWZ5KGJWYWwpO1xyXG4gICAgICAgICAgaWYgKGFKc29uID09PSBiSnNvbikgcmV0dXJuO1xyXG4gICAgICAgICAgaWYgKGJWYWwgJiYgdGhpcy5fbWF0Y2goYlZhbCwgZSkpIHtcclxuICAgICAgICAgICAgY29uc3Qgb2JqID0ge307XHJcbiAgICAgICAgICAgIGNvbnN0IHByb21pc2UgPSB0aGlzLl9jb21wYXJlKGUsIGJWYWwsIG9iaiwgT2JqZWN0LmFzc2lnbih7XHJcbiAgICAgICAgICAgICAgdHlwZTogZVtEQVRBX1RZUEVdIHx8IHNjb3BlLnR5cGVcclxuICAgICAgICAgICAgfSwgc2NvcGUpKTtcclxuICAgICAgICAgICAgaWYgKCFwcm9taXNlKSByZXR1cm47XHJcbiAgICAgICAgICAgIChkaWZmIGFzIGFueVtdKS5wdXNoKHRoaXMuX3Jla2V5KGUsIG9iaiwgc2NvcGUubm9kZXMpKTtcclxuICAgICAgICAgICAgcHJvbWlzZXMucHVzaChwcm9taXNlKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGVsc2UgaWYgKChiIGFzIFtdKS5maW5kKGIgPT4gSlNPTi5zdHJpbmdpZnkoYikgPT09IGFKc29uKSkgcmV0dXJuO1xyXG4gICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGJPYmogPSAoYiBhcyBbXSkuZmluZChiID0+IHRoaXMuX21hdGNoKGIsIGUpKTtcclxuICAgICAgICAgICAgaWYgKGJPYmopIHtcclxuICAgICAgICAgICAgICBjb25zdCBvYmogPSB7fTtcclxuICAgICAgICAgICAgICBjb25zdCBwcm9taXNlID0gdGhpcy5fY29tcGFyZShlLCBiT2JqLCBvYmosIE9iamVjdC5hc3NpZ24oeyB0eXBlOiBlW0RBVEFfVFlQRV0gfHwgc2NvcGUudHlwZSB9LCBzY29wZSkpO1xyXG4gICAgICAgICAgICAgIGlmICghcHJvbWlzZSkgcmV0dXJuO1xyXG4gICAgICAgICAgICAgIChkaWZmIGFzIGFueVtdKS5wdXNoKHRoaXMuX3Jla2V5KGUsIG9iaiwgc2NvcGUubm9kZXMpKTtcclxuICAgICAgICAgICAgICBwcm9taXNlcy5wdXNoKHByb21pc2UpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgIGNvbnN0IG9iaiA9IGlzQXJyYXkoZSkgPyBbXSA6IHt9O1xyXG4gICAgICAgICAgICAgIGNvbnN0IHByb21pc2UgPSB0aGlzLl9icmFuY2goZSwgb2JqLCB7IG5vZGVzOiBzY29wZS5ub2RlcywgdHlwZTogZVtEQVRBX1RZUEVdIHx8IHNjb3BlLnR5cGUgfSk7XHJcbiAgICAgICAgICAgICAgaWYgKCFwcm9taXNlKSByZXR1cm47XHJcbiAgICAgICAgICAgICAgY29uc3QgbGVuZ3RoID0gKGRpZmYgYXMgYW55W10pLnB1c2gob2JqKTtcclxuICAgICAgICAgICAgICBkaWZmW1NUQVRFICsgKGxlbmd0aCAtIDEpLnRvU3RyaW5nKCldID0gQ2hhbmdlU3RhdGUuQWRkZWQ7XHJcbiAgICAgICAgICAgICAgcHJvbWlzZXMucHVzaChwcm9taXNlKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmICghKGIgYXMgW10pLmZpbmQoYiA9PiBiID09IGUpKSB7XHJcbiAgICAgICAgICBjb25zdCBsZW5ndGggPSAoZGlmZiBhcyBhbnlbXSkucHVzaChlKTtcclxuICAgICAgICAgIGlmIChzY29wZS5ub2Rlcy5pbmRleE9mKCdwb3NpdGlvbnMnKSA+IC0xKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHByb21pc2UgPSBmaXJzdFZhbHVlRnJvbSh0aGlzLl9hY2NvdW50cy5nZXQoZSkpLnRoZW4odiA9PlxyXG4gICAgICAgICAgICAgIGRpZmZbbGVuZ3RoIC0gMV0gPSB2Lm5hbWUpO1xyXG4gICAgICAgICAgICBwcm9taXNlcy5wdXNoKHByb21pc2UpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgZGlmZltTVEFURSArIChsZW5ndGggLSAxKS50b1N0cmluZygpXSA9IENoYW5nZVN0YXRlLkFkZGVkO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgICAgIGlmIChpc0FycmF5KGIpKVxyXG4gICAgICAgIChiIGFzIFtdKS5mb3JFYWNoKChlLCBpKSA9PiB7XHJcbiAgICAgICAgICBpZiAoZSAhPT0gYVtpXSkge1xyXG4gICAgICAgICAgICBpZiAoaXNPYmplY3QoZSkpIHtcclxuICAgICAgICAgICAgICBjb25zdCBiSnNvbiA9IEpTT04uc3RyaW5naWZ5KGUpO1xyXG4gICAgICAgICAgICAgIGlmIChiSnNvbiA9PT0gSlNPTi5zdHJpbmdpZnkoYVtpXSkgfHwgKGEgYXMgW10pLmZpbmQoYSA9PiBKU09OLnN0cmluZ2lmeShhKSA9PT0gYkpzb24gfHxcclxuICAgICAgICAgICAgICAgIHRoaXMuX21hdGNoKGEsIGUpKSkgcmV0dXJuO1xyXG4gICAgICAgICAgICAgIGNvbnN0IG9iaiA9IGlzQXJyYXkoZSkgPyBbXSA6IHt9O1xyXG4gICAgICAgICAgICAgIGNvbnN0IHByb21pc2UgPSB0aGlzLl9icmFuY2goZSwgb2JqLCB7IG5vZGVzOiBzY29wZS5ub2RlcywgdHlwZTogZVtEQVRBX1RZUEVdIHx8IHNjb3BlLnR5cGUgfSk7XHJcbiAgICAgICAgICAgICAgaWYgKCFwcm9taXNlKSByZXR1cm47XHJcbiAgICAgICAgICAgICAgY29uc3QgbGVuZ3RoID0gKGRpZmYgYXMgYW55W10pLnB1c2gob2JqKTtcclxuICAgICAgICAgICAgICBkaWZmW1NUQVRFICsgKGxlbmd0aCAtIDEpLnRvU3RyaW5nKCldID0gQ2hhbmdlU3RhdGUuUmVtb3ZlZDtcclxuICAgICAgICAgICAgICBwcm9taXNlcy5wdXNoKHByb21pc2UpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2UgaWYgKCEoYSBhcyBbXSkuZmluZChhID0+IGEgPT0gZSkpIHtcclxuICAgICAgICAgICAgICBjb25zdCBsZW5ndGggPSAoZGlmZiBhcyBbXSkucHVzaChlKTtcclxuICAgICAgICAgICAgICBpZiAoc2NvcGUubm9kZXMuaW5kZXhPZigncG9zaXRpb25zJykgPiAtMSkge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgcHJvbWlzZSA9IGZpcnN0VmFsdWVGcm9tKHRoaXMuX2FjY291bnRzLmdldChlKSkudGhlbih2ID0+XHJcbiAgICAgICAgICAgICAgICAgIGRpZmZbbGVuZ3RoIC0gMV0gPSB2Lm5hbWUpO1xyXG4gICAgICAgICAgICAgICAgcHJvbWlzZXMucHVzaChwcm9taXNlKTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgZGlmZltTVEFURSArIChsZW5ndGggLSAxKS50b1N0cmluZygpXSA9IENoYW5nZVN0YXRlLlJlbW92ZWQ7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgZWxzZSB7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKCEoZGlmZiBhcyBhbnlbXSkubGVuZ3RoKSByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgT2JqZWN0LmtleXMoYSkuZm9yRWFjaChrID0+IHtcclxuICAgICAgICBpZiAodGhpcy5faWdub3JlKGssIHNjb3BlLm5vZGVzKSkgcmV0dXJuO1xyXG4gICAgICAgIGNvbnN0IGFWYWwgPSBhW2tdLCBiVmFsID0gYltrXTtcclxuICAgICAgICBpZiAoYVZhbCA9PT0gYlZhbCkgcmV0dXJuO1xyXG4gICAgICAgIGVsc2UgaWYgKGlzT2JqZWN0KGFWYWwpKSB7XHJcbiAgICAgICAgICBpZiAoSlNPTi5zdHJpbmdpZnkoYVZhbCkgPT09IEpTT04uc3RyaW5naWZ5KGJWYWwpKSByZXR1cm47XHJcbiAgICAgICAgICBpZiAoYlZhbCAhPT0gdW5kZWZpbmVkICYmIGlzQXJyYXkoYlZhbCkgIT09IGlzQXJyYXkoYVZhbCkpIHtcclxuICAgICAgICAgICAgZGlmZltrXSA9IGFWYWw7XHJcbiAgICAgICAgICAgIGRpZmZbT1JJR0lOQUxfVkFMVUUgKyBrXSA9IGlzQXJyYXkoYlZhbCkgPyBiVmFsLmpvaW4oJywgJykgOiBiVmFsO1xyXG4gICAgICAgICAgICBkaWZmW1NUQVRFICsga10gPSBDaGFuZ2VTdGF0ZS5Nb2RpZmllZDtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBsZXQgb2JqID0gaXNBcnJheShhVmFsKSA/IFtdIDoge30sXHJcbiAgICAgICAgICAgICAgZXh0cmEgPSB7XHJcbiAgICAgICAgICAgICAgICB0eXBlOiBhVmFsW0RBVEFfVFlQRV0gfHwgc2NvcGUudHlwZSxcclxuICAgICAgICAgICAgICAgIG5vZGVzOiBbLi4uc2NvcGUubm9kZXMsIGtdLFxyXG4gICAgICAgICAgICAgICAgcHJvcGVydHlOYW1lOiBrXHJcbiAgICAgICAgICAgICAgfSBhcyBTY29wZTtcclxuICAgICAgICAgICAgaWYgKGJWYWwgIT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgICAgIGNvbnN0IHByb21pc2UgPSB0aGlzLl9jb21wYXJlKGFWYWwsIGJWYWwsIG9iaiwgZXh0cmEpO1xyXG4gICAgICAgICAgICAgIGlmICghcHJvbWlzZSkgcmV0dXJuO1xyXG4gICAgICAgICAgICAgIGlmICghaXNBcnJheShhVmFsKSlcclxuICAgICAgICAgICAgICAgIG9iaiA9IHRoaXMuX3Jla2V5KGFWYWwsIG9iaiwgc2NvcGUubm9kZXMpO1xyXG4gICAgICAgICAgICAgIHByb21pc2VzLnB1c2gocHJvbWlzZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgY29uc3QgcHJvbWlzZSA9IHRoaXMuX2JyYW5jaChhVmFsLCBvYmosIGV4dHJhKTtcclxuICAgICAgICAgICAgICBpZiAoIXByb21pc2UpIHJldHVybjtcclxuICAgICAgICAgICAgICBwcm9taXNlcy5wdXNoKHByb21pc2UpO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiAoc2NvcGUubm9kZXMuaW5kZXhPZigncG9zaXRpb25zJykgPiAtMSkge1xyXG4gICAgICAgICAgICAgIGRpZmZbT1JJR0lOQUxfVkFMVUUgKyBrXSA9IGFWYWw7XHJcbiAgICAgICAgICAgICAgY29uc3QgcHJvbWlzZSA9IGZpcnN0VmFsdWVGcm9tKHRoaXMuX2RzLmdldChzY29wZS50eXBlLCBrKSkudGhlbih2ID0+IHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IG5hbWUgPSBpc1N0cmluZyh2KSA/IHYgOiB2W09iamVjdC5rZXlzKHYpWzBdXTtcclxuICAgICAgICAgICAgICAgIGRpZmZbbmFtZV0gPSBvYmpcclxuICAgICAgICAgICAgICAgIGlmIChiVmFsID09PSB1bmRlZmluZWQpIGRpZmZbU1RBVEUgKyBuYW1lXSA9IENoYW5nZVN0YXRlLkFkZGVkO1xyXG4gICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgIHByb21pc2VzLnB1c2gocHJvbWlzZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgZGlmZltrXSA9IG9iajtcclxuICAgICAgICAgICAgICBpZiAoYlZhbCA9PT0gdW5kZWZpbmVkKSBkaWZmW1NUQVRFICsga10gPSBDaGFuZ2VTdGF0ZS5BZGRlZDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgIGRpZmZba10gPSBhVmFsO1xyXG4gICAgICAgICAgaWYgKGsgPT09ICd1c2VySWQnKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHByb21pc2UgPSBmaXJzdFZhbHVlRnJvbSh0aGlzLl9hY2NvdW50cy5nZXQoYVZhbCkpLnRoZW4odiA9PlxyXG4gICAgICAgICAgICAgIGRpZmZba10gPSB2Lm5hbWUpO1xyXG4gICAgICAgICAgICBwcm9taXNlcy5wdXNoKHByb21pc2UpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgaWYgKGJWYWwgIT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgICBpZiAoayA9PT0gJ3VzZXJJZCcpIHtcclxuICAgICAgICAgICAgICBjb25zdCBwcm9taXNlID0gZmlyc3RWYWx1ZUZyb20odGhpcy5fYWNjb3VudHMuZ2V0KGJWYWwpKS50aGVuKHYgPT5cclxuICAgICAgICAgICAgICAgIGRpZmZbT1JJR0lOQUxfVkFMVUUgKyBrXSA9IHYubmFtZSk7XHJcbiAgICAgICAgICAgICAgcHJvbWlzZXMucHVzaChwcm9taXNlKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlXHJcbiAgICAgICAgICAgICAgZGlmZltPUklHSU5BTF9WQUxVRSArIGtdID0gYlZhbDtcclxuICAgICAgICAgICAgZGlmZltTVEFURSArIGtdID0gQ2hhbmdlU3RhdGUuTW9kaWZpZWQ7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBlbHNlXHJcbiAgICAgICAgICAgIGRpZmZbU1RBVEUgKyBrXSA9IENoYW5nZVN0YXRlLkFkZGVkO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgICAgIGlmIChpc09iamVjdChiKSlcclxuICAgICAgICBPYmplY3Qua2V5cyhiKS5mb3JFYWNoKGsgPT4ge1xyXG4gICAgICAgICAgaWYgKGFba10gIT09IHVuZGVmaW5lZCB8fCB0aGlzLl9pZ25vcmUoaywgc2NvcGUubm9kZXMpKSByZXR1cm47XHJcbiAgICAgICAgICBjb25zdCBiVmFsID0gYltrXTtcclxuICAgICAgICAgIGlmIChzY29wZS5ub2Rlcy5pbmRleE9mKCdwb3NpdGlvbnMnKSA+IC0xKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IG9iaiA9IFtdO1xyXG4gICAgICAgICAgICBkaWZmW09SSUdJTkFMX1ZBTFVFICsga10gPSBiVmFsO1xyXG4gICAgICAgICAgICBjb25zdCBwcm9taXNlID0gZmlyc3RWYWx1ZUZyb20odGhpcy5fZHMuZ2V0KHNjb3BlLnR5cGUsIGspKS50aGVuKHYgPT4ge1xyXG4gICAgICAgICAgICAgIGNvbnN0IG5hbWUgPSBpc1N0cmluZyh2KSA/IHYgOiB2W09iamVjdC5rZXlzKHYpWzBdXTtcclxuICAgICAgICAgICAgICBkaWZmW25hbWVdID0gb2JqO1xyXG4gICAgICAgICAgICAgIGRpZmZbU1RBVEUgKyBuYW1lXSA9IENoYW5nZVN0YXRlLlJlbW92ZWQ7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICBwcm9taXNlcy5wdXNoKHByb21pc2UpO1xyXG4gICAgICAgICAgICBiVmFsICYmIChiVmFsIGFzIGFueVtdKS5mb3JFYWNoKChlLCBpKSA9PiB7XHJcbiAgICAgICAgICAgICAgY29uc3QgcHJvbWlzZSA9IGZpcnN0VmFsdWVGcm9tKHRoaXMuX2FjY291bnRzLmdldChlKSkudGhlbih2ID0+XHJcbiAgICAgICAgICAgICAgICBvYmpbaV0gPSB2Lm5hbWUpO1xyXG4gICAgICAgICAgICAgIHByb21pc2VzLnB1c2gocHJvbWlzZSk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIGlmIChpc09iamVjdChiVmFsKSkge1xyXG4gICAgICAgICAgICAgIGNvbnN0IG9iaiA9IGlzQXJyYXkoYlZhbCkgPyBbXSA6IHt9O1xyXG4gICAgICAgICAgICAgIGNvbnN0IHByb21pc2UgPSB0aGlzLl9icmFuY2goYlZhbCwgb2JqLCB7IHR5cGU6IGJWYWxbREFUQV9UWVBFXSB8fCBzY29wZS50eXBlLCBub2RlczogWy4uLnNjb3BlLm5vZGVzLCBrXSB9KTtcclxuICAgICAgICAgICAgICBpZiAoIXByb21pc2UpIHJldHVybjtcclxuICAgICAgICAgICAgICBkaWZmW2tdID0gb2JqO1xyXG4gICAgICAgICAgICAgIHByb21pc2UgJiYgcHJvbWlzZXMucHVzaChwcm9taXNlKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICBkaWZmW2tdID0gYlZhbDtcclxuICAgICAgICAgICAgICBpZiAoayA9PT0gJ3VzZXJJZCcpIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHByb21pc2UgPSBmaXJzdFZhbHVlRnJvbSh0aGlzLl9hY2NvdW50cy5nZXQoYlZhbCkpLnRoZW4odiA9PlxyXG4gICAgICAgICAgICAgICAgICBkaWZmW2tdID0gdi5uYW1lKTtcclxuICAgICAgICAgICAgICAgIHByb21pc2VzLnB1c2gocHJvbWlzZSk7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGRpZmZbU1RBVEUgKyBrXSA9IENoYW5nZVN0YXRlLlJlbW92ZWQ7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIGVsc2Uge1xyXG4gICAgICAgIGRpZmZbU1RBVEUgKyBzY29wZS5wcm9wZXJ0eU5hbWVdID0gQ2hhbmdlU3RhdGUuTW9kaWZpZWQ7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKCFPYmplY3Qua2V5cyhkaWZmKS5sZW5ndGgpIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuICAgIHJldHVybiBwcm9taXNlcy5sZW5ndGggPyBQcm9taXNlLmFsbChwcm9taXNlcykudGhlbigoKSA9PiBkaWZmKSA6IFByb21pc2UucmVzb2x2ZShkaWZmKTtcclxuICB9XHJcbiAgLyoqXHJcbiAgICogXHJcbiAgICogQHBhcmFtIG9iajFcclxuICAgKiBAcGFyYW0gb2JqMlxyXG4gICAqL1xyXG4gIHByaXZhdGUgX21hdGNoKG9iajE6IGFueSwgb2JqMjogYW55KSB7XHJcbiAgICByZXR1cm4gSU5ERVhfUFJPUEVSVFkuZmluZEluZGV4KGsgPT4gb2JqMVtrXSAmJiBvYmoxW2tdID09PSBvYmoyW2tdKSA+IC0xO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogXHJcbiAgICogQHBhcmFtIGJhc2VcclxuICAgKiBAcGFyYW0gb2JqXHJcbiAgICogQHBhcmFtIG5vZGVzXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBfcmVrZXkoYmFzZToge30sIG9iajoge30sIG5vZGVzOiBzdHJpbmdbXSkge1xyXG4gICAgY29uc3QgbmV3T2JqID0ge307XHJcbiAgICBsZXQgb2sgPSBmYWxzZTtcclxuICAgIElOREVYX1BST1BFUlRZLmZvckVhY2goayA9PiB7XHJcbiAgICAgIGlmICh0aGlzLl9pZ25vcmUoaywgbm9kZXMpKSByZXR1cm47XHJcbiAgICAgIGlmIChiYXNlW2tdKSB7XHJcbiAgICAgICAgbmV3T2JqW2tdID0gYmFzZVtrXTtcclxuICAgICAgICBvayA9IHRydWU7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gICAgcmV0dXJuIG9rID8gT2JqZWN0LmFzc2lnbihuZXdPYmosIG9iaikgOiBvYmo7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBcclxuICAgKiBAcGFyYW0gbmFtZVxyXG4gICAqIEBwYXJhbSBub2Rlc1xyXG4gICAqL1xyXG4gIHByaXZhdGUgX2lnbm9yZShuYW1lOiBzdHJpbmcsIG5vZGVzOiBzdHJpbmdbXSkge1xyXG4gICAgcmV0dXJuIElHTk9SRV9OT0RFLmluZGV4T2YobmFtZSkgPiAtMSB8fCBJR05PUkVfTk9ERS5pbmRleE9mKG5vZGVzW25vZGVzLmxlbmd0aCAtIDFdICsgJy4nICsgbmFtZSkgPiAtMTtcclxuICB9XHJcbiAgLyoqXHJcbiAgICogXHJcbiAgICogQHBhcmFtIGJhc2VcclxuICAgKiBAcGFyYW0gcHJlc3RpbmVcclxuICAgKiBAcGFyYW0gc2NvcGVcclxuICAgKi9cclxuICBwcml2YXRlIF9icmFuY2goYmFzZToge30gfCBbXSwgcHJlc3RpbmU6IHt9IHwgW10sIHNjb3BlOiBTY29wZSk6IFByb21pc2U8YW55PiB8IGZhbHNlIHtcclxuICAgIGNvbnN0IHByb21pc2VzOiBQcm9taXNlPGFueT5bXSA9IFtdO1xyXG4gICAgaWYgKGlzQXJyYXkoYmFzZSkpIHtcclxuICAgICAgYmFzZS5mb3JFYWNoKGUgPT4ge1xyXG4gICAgICAgIGlmIChpc09iamVjdChlKSkge1xyXG4gICAgICAgICAgY29uc3Qgb2JqID0gaXNBcnJheShlKSA/IFtdIDoge307XHJcbiAgICAgICAgICBjb25zdCBwcm9taXNlID0gdGhpcy5fYnJhbmNoKGUsIG9iaiwgeyBub2Rlczogc2NvcGUubm9kZXMsIHR5cGU6IGVbREFUQV9UWVBFXSB8fCBzY29wZS50eXBlIH0pO1xyXG4gICAgICAgICAgaWYgKCFwcm9taXNlKVxyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICBwcm9taXNlcy5wdXNoKHByb21pc2UpO1xyXG4gICAgICAgICAgKHByZXN0aW5lIGFzIGFueVtdKS5wdXNoKG9iaik7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgY29uc3QgbGVuZ3RoID0gKHByZXN0aW5lIGFzIGFueVtdKS5wdXNoKGUpO1xyXG4gICAgICAgICAgaWYgKHNjb3BlLm5vZGVzLmluZGV4T2YoJ3Bvc2l0aW9ucycpID4gLTEpIHtcclxuICAgICAgICAgICAgY29uc3QgcHJvbWlzZSA9IGZpcnN0VmFsdWVGcm9tKHRoaXMuX2FjY291bnRzLmdldChlKSkudGhlbih2ID0+XHJcbiAgICAgICAgICAgICAgcHJlc3RpbmVbbGVuZ3RoIC0gMV0gPSB2Lm5hbWUpO1xyXG4gICAgICAgICAgICBwcm9taXNlcy5wdXNoKHByb21pc2UpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgICAgIGlmICghKHByZXN0aW5lIGFzIGFueVtdKS5sZW5ndGgpIHJldHVybiBmYWxzZTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIE9iamVjdC5rZXlzKGJhc2UpLmZvckVhY2goayA9PiB7XHJcbiAgICAgICAgaWYgKHRoaXMuX2lnbm9yZShrLCBzY29wZS5ub2RlcykpIHJldHVybjtcclxuICAgICAgICBjb25zdCBhVmFsID0gYmFzZVtrXTtcclxuICAgICAgICBpZiAoaXNPYmplY3QoYVZhbCkpIHtcclxuICAgICAgICAgIGNvbnN0IG9iaiA9IGlzQXJyYXkoYVZhbCkgPyBbXSA6IHt9O1xyXG4gICAgICAgICAgY29uc3QgcHJvbWlzZSA9IHRoaXMuX2JyYW5jaChhVmFsLCBvYmosIHsgdHlwZTogYVZhbFtEQVRBX1RZUEVdIHx8IHNjb3BlLnR5cGUsIG5vZGVzOiBbLi4uc2NvcGUubm9kZXMsIGtdIH0pO1xyXG4gICAgICAgICAgaWYgKCFwcm9taXNlKVxyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICBwcm9taXNlcy5wdXNoKHByb21pc2UpO1xyXG4gICAgICAgICAgaWYgKHNjb3BlLm5vZGVzLmluZGV4T2YoJ3Bvc2l0aW9ucycpID4gLTEpIHtcclxuICAgICAgICAgICAgY29uc3QgcHJvbWlzZSA9IGZpcnN0VmFsdWVGcm9tKHRoaXMuX2RzLmdldChzY29wZS50eXBlLCBrKSkudGhlbih2ID0+XHJcbiAgICAgICAgICAgICAgcHJlc3RpbmVbaXNTdHJpbmcodikgPyB2IDogdltPYmplY3Qua2V5cyh2KVswXV1dID0gb2JqXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIHByb21pc2VzLnB1c2gocHJvbWlzZSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBlbHNlXHJcbiAgICAgICAgICAgIHByZXN0aW5lW2tdID0gb2JqO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgIHByZXN0aW5lW2tdID0gYVZhbDtcclxuICAgICAgICAgIGlmIChrID09PSAndXNlcklkJykge1xyXG4gICAgICAgICAgICBjb25zdCBwcm9taXNlID0gZmlyc3RWYWx1ZUZyb20odGhpcy5fYWNjb3VudHMuZ2V0KGFWYWwpKS50aGVuKHYgPT5cclxuICAgICAgICAgICAgICBwcmVzdGluZVtrXSA9IHYubmFtZSk7XHJcbiAgICAgICAgICAgIHByb21pc2VzLnB1c2gocHJvbWlzZSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgICAgaWYgKCFPYmplY3Qua2V5cyhwcmVzdGluZSkubGVuZ3RoKSByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gcHJvbWlzZXMubGVuZ3RoID8gUHJvbWlzZS5hbGwocHJvbWlzZXMpIDogUHJvbWlzZS5yZXNvbHZlKCk7XHJcbiAgfVxyXG4gIC8qKlxyXG4gICAqIHJldHVybiBodG1sIGZyb20gZGlmZiB0cmVlXHJcbiAgICogQHBhcmFtIGRpZmZcclxuICAgKiBAcGFyYW0gb2Jqc3RhdGVcclxuICAgKiBAcGFyYW0gcHJvcGVydHlOYW1lXHJcbiAgICogQHBhcmFtIHNpYmxpbmcgYXJyYXkgZW50cnlcclxuICAgKi9cclxuICBwcml2YXRlIF9nZW5lcmF0ZShkaWZmOiB7fSB8IFtdLCBvYmpzdGF0ZTogQ2hhbmdlU3RhdGUgPSBDaGFuZ2VTdGF0ZS5VbmNoYW5nZWQsXHJcbiAgICBwcm9wZXJ0eU5hbWUgPSB1bmRlZmluZWQsIHNpYmxpbmcgPSBmYWxzZSkge1xyXG4gICAgbGV0IGggPSAnJztcclxuICAgIGlmIChpc0FycmF5KGRpZmYpKSB7XHJcbiAgICAgIGggKz0gdGhpcy5fd3JpdGUob2Jqc3RhdGUsIFRva2VuS2luZC5BcnJheVN0YXJ0LCBmYWxzZSwgZmFsc2UsIHByb3BlcnR5TmFtZSk7XHJcbiAgICAgIGNvbnN0IG4gPSBkaWZmLmxlbmd0aDtcclxuICAgICAgZGlmZi5mb3JFYWNoKChlLCBpKSA9PiB7XHJcbiAgICAgICAgY29uc3Qgc3RhdGUgPSBkaWZmW1NUQVRFICsgaS50b1N0cmluZygpXTtcclxuICAgICAgICBpZiAoaXNPYmplY3QoZSkpXHJcbiAgICAgICAgICBoICs9IHRoaXMuX2dlbmVyYXRlKGUsIHN0YXRlLCB1bmRlZmluZWQsIGkgPCBuIC0gMSk7XHJcbiAgICAgICAgZWxzZVxyXG4gICAgICAgICAgaCArPSB0aGlzLl93cml0ZShzdGF0ZSwgVG9rZW5LaW5kLlZhbHVlLFxyXG4gICAgICAgICAgICBpID09PSBuIC0gMSB8fCBkaWZmW1NUQVRFICsgKGkgKyAxKS50b1N0cmluZygpXSAhPT0gc3RhdGUsXHJcbiAgICAgICAgICAgIGkgPCBuIC0gMSwgdW5kZWZpbmVkLCBlKTtcclxuICAgICAgfSk7XHJcbiAgICAgIGggKz0gdGhpcy5fd3JpdGUob2Jqc3RhdGUsIFRva2VuS2luZC5BcnJheUVuZCwgdHJ1ZSwgc2libGluZyk7XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgaCArPSB0aGlzLl93cml0ZShvYmpzdGF0ZSwgVG9rZW5LaW5kLk9iamVjdFN0YXJ0LCBmYWxzZSwgZmFsc2UsIHByb3BlcnR5TmFtZSk7XHJcbiAgICAgIGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyhkaWZmKS5maWx0ZXIoayA9PiAhay5zdGFydHNXaXRoKE9SSUdJTkFMX1ZBTFVFKSk7XHJcbiAgICAgIGtleXMuZm9yRWFjaCgoaywgaSkgPT4ge1xyXG4gICAgICAgIGNvbnN0IHZhbCA9IGRpZmZba10sIHN0YXRlID0gZGlmZltTVEFURSArIGtdLCBuID0ga2V5cy5sZW5ndGg7XHJcbiAgICAgICAgaWYgKGlzT2JqZWN0KHZhbCkpXHJcbiAgICAgICAgICBoICs9IHRoaXMuX2dlbmVyYXRlKHZhbCwgc3RhdGUsIGssIGkgPCBuIC0gMSk7XHJcbiAgICAgICAgZWxzZVxyXG4gICAgICAgICAgaCArPSB0aGlzLl93cml0ZShzdGF0ZSwgVG9rZW5LaW5kLlZhbHVlLCBzdGF0ZSAhPT0gb2Jqc3RhdGUsIGkgPCBuIC0gMSwgaywgdmFsLCBkaWZmW09SSUdJTkFMX1ZBTFVFICsga10pO1xyXG4gICAgICB9KTtcclxuICAgICAgaCArPSB0aGlzLl93cml0ZShvYmpzdGF0ZSwgVG9rZW5LaW5kLk9iamVjdEVuZCwgdHJ1ZSwgc2libGluZyk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gaDtcclxuICB9XHJcbiAgLyoqXHJcbiAgICogd3JpdGUgaHRtbCBsaW5lXHJcbiAgICogQHBhcmFtIHN0YXRlXHJcbiAgICogQHBhcmFtIGFubm90YXRlXHJcbiAgICogQHBhcmFtIHRva2VuXHJcbiAgICogQHBhcmFtIHNpYmxpbmcgYXJyYXkgZW50cnlcclxuICAgKiBAcGFyYW0gcHJvcGVydHlOYW1lXHJcbiAgICogQHBhcmFtIHZhbHVlXHJcbiAgICogQHBhcmFtIG9yaWdpbmFsVmFsdWVcclxuICAgKi9cclxuICBwcml2YXRlIF93cml0ZShzdGF0ZTogQ2hhbmdlU3RhdGUsXHJcbiAgICB0b2tlbjogVG9rZW5LaW5kLFxyXG4gICAgYW5ub3RhdGU6IGJvb2xlYW4sXHJcbiAgICBzaWJsaW5nPzogYm9vbGVhbixcclxuICAgIHByb3BlcnR5TmFtZT86IHN0cmluZyxcclxuICAgIHZhbHVlPzogc3RyaW5nIHwgbnVtYmVyIHwgYm9vbGVhbixcclxuICAgIG9yaWdpbmFsVmFsdWU/OiBzdHJpbmcgfCBudW1iZXIgfCBib29sZWFuXHJcbiAgKSB7XHJcbiAgICBsZXQgaCA9ICcnLCBicmFja2V0czogc3RyaW5nLCBjbHM6IHN0cmluZztcclxuICAgIHN3aXRjaCAoc3RhdGUpIHtcclxuICAgICAgY2FzZSBDaGFuZ2VTdGF0ZS5SZW1vdmVkOlxyXG4gICAgICAgIGNscyA9ICdjb21wYXJlIHJlbW92ZWQnO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIENoYW5nZVN0YXRlLkFkZGVkOlxyXG4gICAgICAgIGNscyA9ICdjb21wYXJlIGFkZGVkJztcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSBDaGFuZ2VTdGF0ZS5Nb2RpZmllZDpcclxuICAgICAgICBjbHMgPSAnY29tcGFyZSBtb2RpZmllZCc7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgY2xzID0gJyc7XHJcbiAgICB9XHJcbiAgICBzd2l0Y2ggKHRva2VuKSB7XHJcbiAgICAgIGNhc2UgVG9rZW5LaW5kLkFycmF5U3RhcnQ6XHJcbiAgICAgICAgYnJhY2tldHMgPSAnWyc7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgVG9rZW5LaW5kLk9iamVjdFN0YXJ0OlxyXG4gICAgICAgIGJyYWNrZXRzID0gJ3snO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIFRva2VuS2luZC5BcnJheUVuZDpcclxuICAgICAgICBicmFja2V0cyA9ICddJztcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSBUb2tlbktpbmQuT2JqZWN0RW5kOlxyXG4gICAgICAgIGJyYWNrZXRzID0gJ30nO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgfVxyXG4gICAgaWYgKHRva2VuID09IFRva2VuS2luZC5PYmplY3RTdGFydCB8fCB0b2tlbiA9PSBUb2tlbktpbmQuQXJyYXlTdGFydClcclxuICAgICAgaCA9IGA8ZGl2IGNsYXNzPVwic2NvcGUgJHtjbHN9XCI+YDtcclxuICAgIGlmIChwcm9wZXJ0eU5hbWUpXHJcbiAgICAgIGggKz0gYDxzcGFuIGNsYXNzPVwic3RydWN0dXJlICR7Y2xzfVwiPiR7cHJvcGVydHlOYW1lfTogPC9zcGFuPmA7XHJcbiAgICBpZiAoYnJhY2tldHMpIHtcclxuICAgICAgaWYgKHRva2VuID09IFRva2VuS2luZC5PYmplY3RFbmQgfHwgdG9rZW4gPT0gVG9rZW5LaW5kLkFycmF5RW5kKVxyXG4gICAgICAgIGggKz0gJzwvZGl2Pic7XHJcbiAgICAgIGggKz0gYDxzcGFuIGNsYXNzPVwiYnJhY2tldHNcIj4ke2JyYWNrZXRzfTwvc3Bhbj5gXHJcbiAgICAgIGlmICh0b2tlbiA9PSBUb2tlbktpbmQuT2JqZWN0U3RhcnQgfHwgdG9rZW4gPT0gVG9rZW5LaW5kLkFycmF5U3RhcnQpXHJcbiAgICAgICAgaCArPSAnPHNwYW4gY2xhc3M9XCJhbHRlcm5hdGVcIj4uLi48L3NwYW4+PGRpdiBjbGFzcz1cInNjb3BlLWNvbnRlbnRcIj4nO1xyXG4gICAgfVxyXG4gICAgaWYgKHRva2VuID09IFRva2VuS2luZC5WYWx1ZSkge1xyXG4gICAgICBpZiAocHJvcGVydHlOYW1lID09PSAnY29sb3InKSBoICs9IGA8ZGl2IGNsYXNzPVwiY29sb3JcIiBzdHlsZT1cImJhY2tncm91bmQtY29sb3I6JHt2YWx1ZX1cIj48L2Rpdj4mbmJzcDtgO1xyXG4gICAgICBlbHNlIGlmICgocHJvcGVydHlOYW1lID09PSAnc2hhcGUnIHx8IHByb3BlcnR5TmFtZSA9PT0gJ2RhdGEnKSAmJiBTVkdfUEFUSF9SRUdFWC50ZXN0KHZhbHVlIGFzIHN0cmluZykpIGggKz0gYDxzdmcgd2lkdGg9MTIgaGVpZ2h0PTEyIHZpZXdCb3g9XCIwIDAgMzUgMzVcIiBwcmVzZXJ2ZUFzcGVjdFJhdGlvPVwibm9uZVwiPjxwYXRoIGQ9XCIke3ZhbHVlfVwiPjwvcGF0aD48L3N2Zz4mbmJzcDtgO1xyXG4gICAgICBoICs9IGA8c3BhbiBjbGFzcz1cInZhbHVlICR7Y2xzfVwiPiR7dmFsdWV9PC9zcGFuPmA7XHJcbiAgICB9XHJcbiAgICBpZiAoc2libGluZykgaCArPSAnPHNwYW4gY2xhc3M9XCJzdHJ1Y3R1cmVcIj4sPC9zcGFuPic7XHJcbiAgICBpZiAoc3RhdGUgJiYgYW5ub3RhdGUpIHtcclxuICAgICAgY29uc3QgcmVzb3VyY2UgPSBzdGF0ZSA9PT0gQ2hhbmdlU3RhdGUuUmVtb3ZlZCA/ICdEZWxldGVkJyA6IHN0YXRlID09PSBDaGFuZ2VTdGF0ZS5BZGRlZCA/ICdBZGRlZCcgOiAnTW9kaWZpZWQnO1xyXG4gICAgICBoICs9IGA8ZGl2IGNsYXNzPVwiJHtjbHN9XCI+IDxkaXYgY2xhc3M9XCJsYWJlbFwiPjxzcGFuPiR7dGhpcy5fdHJhbnNsYXRlLmdldChyZXNvdXJjZSl9YDtcclxuICAgICAgaWYgKG9yaWdpbmFsVmFsdWUpXHJcbiAgICAgICAgaCArPSBgJm5ic3A7PHNwYW4gY2xhc3M9XCJvcmlnaW5hbFwiPiR7b3JpZ2luYWxWYWx1ZX08L3NwYW4+YDtcclxuICAgICAgaCArPSAnPC9zcGFuPjwvZGl2PjwvZGl2Pic7XHJcbiAgICB9XHJcbiAgICBlbHNlIGlmICh0b2tlbiA9PT0gVG9rZW5LaW5kLlZhbHVlKVxyXG4gICAgICBoICs9ICc8YnIvPic7XHJcbiAgICBpZiAodG9rZW4gPT0gVG9rZW5LaW5kLk9iamVjdEVuZCB8fCB0b2tlbiA9PSBUb2tlbktpbmQuQXJyYXlFbmQpXHJcbiAgICAgIGggKz0gJzwvZGl2Pic7XHJcbiAgICByZXR1cm4gaDtcclxuICB9XHJcbiAgLyoqXHJcbiAgICogdG9nZ2xlXHJcbiAgICogQHBhcmFtIGV2dFxyXG4gICAqL1xyXG4gIGNvbGxhcHNlKGV2dDogTW91c2VFdmVudCkge1xyXG4gICAgbGV0IGVsID0gZXZ0LnRhcmdldCBhcyBIVE1MRWxlbWVudDtcclxuICAgIHdoaWxlIChlbCAmJiAhZWwuY2xhc3NMaXN0LmNvbnRhaW5zKCdzY29wZScpKVxyXG4gICAgICBlbCA9IGVsLnBhcmVudEVsZW1lbnQ7XHJcbiAgICBlbCAmJiBlbC5jbGFzc0xpc3QudG9nZ2xlKCdjb2xsYXBzZScpICYmIGVsLmNsYXNzTGlzdC5yZW1vdmUoJ2ZvY3VzJyk7XHJcbiAgICBldnQuc3RvcFByb3BhZ2F0aW9uKCk7XHJcbiAgfVxyXG4gIC8qKlxyXG4gICAqIHJlbW92ZSBjbHNcclxuICAgKi9cclxuICBmb2N1c091dCgpIHtcclxuICAgIHRoaXMuY29udGVudHMubmF0aXZlRWxlbWVudC5xdWVyeVNlbGVjdG9yQWxsKCcuc2NvcGUuZm9jdXMnKS5mb3JFYWNoKGUgPT5cclxuICAgICAgZS5jbGFzc0xpc3QucmVtb3ZlKCdmb2N1cycpXHJcbiAgICApO1xyXG4gIH1cclxuICAvKipcclxuICAgKiBcclxuICAgKiBAcGFyYW0gZXZ0XHJcbiAgICovXHJcbiAgZm9jdXNJbihldnQ6IE1vdXNlRXZlbnQpIHtcclxuICAgIHRoaXMuZm9jdXNPdXQoKTtcclxuICAgIGxldCBlbCA9IGV2dC50YXJnZXQgYXMgSFRNTEVsZW1lbnQ7XHJcbiAgICB3aGlsZSAoZWwgJiYgIWVsLmNsYXNzTGlzdC5jb250YWlucygnc2NvcGUnKSlcclxuICAgICAgZWwgPSBlbC5wYXJlbnRFbGVtZW50O1xyXG4gICAgZWwgJiYgIWVsLmNsYXNzTGlzdC5jb250YWlucygnY29sbGFwc2UnKSAmJiBlbC5jbGFzc0xpc3QuYWRkKCdmb2N1cycpO1xyXG4gIH1cclxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcclxuICAgIHRoaXMuX2Rlc3Ryb3kubmV4dCgpO1xyXG4gICAgdGhpcy5fZGVzdHJveS5jb21wbGV0ZSgpO1xyXG4gIH1cclxufVxyXG5pbnRlcmZhY2UgVmVyc2lvbkluZm8ge1xyXG4gIHRpbWU6IERhdGU7XHJcbiAgYXV0aG9yOiBzdHJpbmc7XHJcbiAgZmlsZT86IHN0cmluZztcclxufVxyXG5pbnRlcmZhY2UgQ29uZmlndXJ0aW9uSW5mbyB7XHJcbn1cclxuaW50ZXJmYWNlIENvbXBhcmVNb2RlbCB7XHJcbiAgZGF0ZTE6IERhdGU7XHJcbiAgZGF0ZTI6IERhdGU7XHJcbn1cclxuaW50ZXJmYWNlIFNjb3BlIHtcclxuICB0eXBlPzogc3RyaW5nO1xyXG4gIHByb3BlcnR5TmFtZT86IHN0cmluZztcclxuICBub2Rlczogc3RyaW5nW107XHJcbn1cclxuZW51bSBDaGFuZ2VTdGF0ZSB7XHJcbiAgVW5jaGFuZ2VkLFxyXG4gIEFkZGVkLFxyXG4gIE1vZGlmaWVkLFxyXG4gIFJlbW92ZWRcclxufVxyXG5lbnVtIFRva2VuS2luZCB7XHJcbiAgVmFsdWUsXHJcbiAgQXJyYXlTdGFydCxcclxuICBBcnJheUVuZCxcclxuICBPYmplY3RTdGFydCxcclxuICBPYmplY3RFbmRcclxufVxyXG4iLCI8bWF0LXRvb2xiYXI+XG4gIDxidXR0b24gbWF0LWljb24tYnV0dG9uIChjbGljayk9XCJwcm9wZXJ0aWVzLnRvZ2dsZSgpXCIgW2JpemRvY1Rvb2x0aXBdPVwiJ0NvbGxhcHNlJyB8IHRyYW5zbGF0ZVwiPjxtYXQtaWNvbj52aWV3X3NpZGViYXI8L21hdC1pY29uPjwvYnV0dG9uPlxuICA8c3BhbiBjbGFzcz1cImRpdmlkZXJcIj48L3NwYW4+XG48L21hdC10b29sYmFyPlxuPG1hdC1zaWRlbmF2LWNvbnRhaW5lciBhdXRvc2l6ZSBjbGFzcz1cImZsZXhcIj5cbiAgPG1hdC1zaWRlbmF2LWNvbnRlbnQ+XG4gICAgPG1hdC1wcm9ncmVzcy1iYXIgbW9kZT1cImJ1ZmZlclwiIFt2YWx1ZV09cHJvZ3Jlc3MgW2J1ZmZlclZhbHVlXT0wIFtzdHlsZS52aXNpYmlsaXR5XT1cInByb2dyZXNzID4gMCAmJiBwcm9ncmVzcyA8IDEwMCA/ICd2aXNpYmxlJzonaGlkZGVuJ1wiPjwvbWF0LXByb2dyZXNzLWJhcj5cbiAgICA8ZGl2IFtpbm5lckhUTUxdPVwiaHRtbCB8IHNhbml0aXplSHRtbFwiIChtb3VzZWxlYXZlKT1cImZvY3VzT3V0KClcIiAobW91c2Vtb3ZlKT1cImZvY3VzSW4oJGV2ZW50KVwiIGNsYXNzPVwiY29uZmlndXJhdGlvbi1kaWZmXCIgKGNsaWNrKT1cImNvbGxhcHNlKCRldmVudClcIiAjY29udGVudHM+PC9kaXY+XG4gIDwvbWF0LXNpZGVuYXYtY29udGVudD5cbiAgPG1hdC1zaWRlbmF2IG1vZGU9XCJzaWRlXCIgb3BlbmVkICNwcm9wZXJ0aWVzIGNsYXNzPVwidGltZWxpbmVcIj5cbiAgICBAaWYgKHZlcnNpb25zKSB7XG4gICAgICA8bWF0LW5hdi1saXN0IGNsYXNzPVwibmF2LWxpc3RcIj5cbiAgICAgICAgQGZvciAodiBvZiB2ZXJzaW9uczsgdHJhY2sgdjsgbGV0IGluZGV4ID0gJGluZGV4OyBsZXQgbGFzdCA9ICRsYXN0KSB7XG4gICAgICAgICAgQGlmICghbGFzdCkge1xuICAgICAgICAgICAgPG1hdC1saXN0LWl0ZW0gKGNsaWNrKT1cImNvbXBhcmUoaW5kZXgpXCIgW2NsYXNzLmFjdGl2ZV09XCJ2LnRpbWUgPT09IGFjdGl2ZURhdGVcIj5cbiAgICAgICAgICAgICAgPGgzIG1hdExpc3RJdGVtVGl0bGU+XG4gICAgICAgICAgICAgICAge3sodi5hdXRob3IgfHwgJ1N5c3RlbScpIHwgdXNlck5hbWUgfCBhc3luYyB9fVxuICAgICAgICAgICAgICA8L2gzPlxuICAgICAgICAgICAgICA8cCBjbGFzcz1cInRpbWVcIiBtYXRMaXN0SXRlbUxpbmU+XG4gICAgICAgICAgICAgICAge3t2LnRpbWUgfCBhbUNhbGVuZGFyOiBudWxsOiBDQUxFTkRBUl9TUEVDIH19XG4gICAgICAgICAgICAgIDwvcD5cbiAgICAgICAgICAgIDwvbWF0LWxpc3QtaXRlbT5cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIDwvbWF0LW5hdi1saXN0PlxuICAgIH1cbiAgPC9tYXQtc2lkZW5hdj5cbjwvbWF0LXNpZGVuYXYtY29udGFpbmVyPlxuIl19