gamma-app-controller 1.2.3 → 1.2.5

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.
Files changed (27) hide show
  1. package/esm2020/lib/application-controller/support-components/dash-chart/dash-chart.component.mjs +4 -3
  2. package/esm2020/lib/shared/advanced-component/gamma-advance-operator-table/gamma-advance-operator-table.component.mjs +4 -4
  3. package/esm2020/lib/template-module/bookmarked-template/bookmarked-template.component.mjs +7 -11
  4. package/esm2020/lib/template-module/defaulLandingComponent/landing-component.component.mjs +7 -11
  5. package/esm2020/lib/template-module/kpiWithMultiLayout/kpi-with-multilayout.component.mjs +2 -2
  6. package/esm2020/lib/template-module/kpiWithMultiLayout/kpiWithMultiayout.module.mjs +2 -2
  7. package/esm2020/lib/template-module/kpiWithMultiLayout/muili.tokenStorage.servce.mjs +36 -0
  8. package/esm2020/lib/template-module/kpiWithSingleLayout/kpi-with-dataset.component.mjs +140 -42
  9. package/esm2020/lib/template-module/kpiWithSingleLayout/kpiWithSingleLayout.module.mjs +4 -3
  10. package/esm2020/lib/template-module/kpiWithSingleLayout/single-layout-dataset-call.service.mjs +3 -2
  11. package/esm2020/lib/template-module/kpiWithSingleLayout/single.tokenStorage.servce.mjs +36 -0
  12. package/esm2020/public-api.mjs +3 -3
  13. package/fesm2015/gamma-app-controller.mjs +155 -60
  14. package/fesm2015/gamma-app-controller.mjs.map +1 -1
  15. package/fesm2020/gamma-app-controller.mjs +154 -60
  16. package/fesm2020/gamma-app-controller.mjs.map +1 -1
  17. package/lib/shared/advanced-component/gamma-advance-operator-table/gamma-advance-operator-table.component.d.ts +1 -1
  18. package/lib/template-module/bookmarked-template/bookmarked-template.component.d.ts +1 -3
  19. package/lib/template-module/defaulLandingComponent/landing-component.component.d.ts +1 -3
  20. package/lib/template-module/kpiWithMultiLayout/kpi-with-multilayout.component.d.ts +1 -1
  21. package/lib/template-module/kpiWithSingleLayout/kpi-with-dataset.component.d.ts +6 -2
  22. package/package.json +1 -1
  23. package/public-api.d.ts +2 -2
  24. package/esm2020/lib/template-module/kpiWithMultiLayout/tokenStorage.servce.mjs +0 -36
  25. package/esm2020/lib/template-module/kpiWithSingleLayout/tokenStorage.servce.mjs +0 -36
  26. /package/lib/template-module/kpiWithMultiLayout/{tokenStorage.servce.d.ts → muili.tokenStorage.servce.d.ts} +0 -0
  27. /package/lib/template-module/kpiWithSingleLayout/{tokenStorage.servce.d.ts → single.tokenStorage.servce.d.ts} +0 -0
@@ -14,11 +14,10 @@ import * as i2 from "@angular/router";
14
14
  import * as i3 from "./bookmarked-layout.service";
15
15
  import * as i4 from "ngx-toastr";
16
16
  import * as i5 from "./bookmarked-dataset-call.service";
17
- import * as i6 from "../../application-controller/tokenStorage.servce";
18
- import * as i7 from "@angular/common";
19
- import * as i8 from "../../shared/loading/loading.component";
17
+ import * as i6 from "@angular/common";
18
+ import * as i7 from "../../shared/loading/loading.component";
20
19
  export class BookmarkedTemplateComponent {
21
- constructor(commonService, activatedRoute, viewContainerRef, componentFactoryResolver, service, toastr, router, datasetService, storage) {
20
+ constructor(commonService, activatedRoute, viewContainerRef, componentFactoryResolver, service, toastr, router, datasetService) {
22
21
  this.commonService = commonService;
23
22
  this.activatedRoute = activatedRoute;
24
23
  this.viewContainerRef = viewContainerRef;
@@ -27,7 +26,6 @@ export class BookmarkedTemplateComponent {
27
26
  this.toastr = toastr;
28
27
  this.router = router;
29
28
  this.datasetService = datasetService;
30
- this.storage = storage;
31
29
  this.dashbord_container = [];
32
30
  this.widget_width = ['w-full', 'w-1/2', 'w-1/3', 'w-1/4', 'w-1/5', 'w-1/6'];
33
31
  this.page_title = 'Dashboard';
@@ -402,7 +400,6 @@ export class BookmarkedTemplateComponent {
402
400
  containerElement.appendChild(this.CompRefs.location.nativeElement);
403
401
  }
404
402
  loadFilterComponent(indexObj, containerElement, filterItems) {
405
- let userName = this.storage.get('user_name');
406
403
  let selectedDates = { startDate: this.defaultStartDate, endDate: this.defaultEndDate };
407
404
  const componentClass = this.componentClassMap['AppAdvanceHeaderComponent'];
408
405
  this.CompRefs = this.viewContainerRef.createComponent(componentClass);
@@ -411,7 +408,6 @@ export class BookmarkedTemplateComponent {
411
408
  dynamicComponentInstance.filterItems = filterItems;
412
409
  dynamicComponentInstance.pageTitle = this.pageTitle;
413
410
  dynamicComponentInstance.bread_crumbs_container = this.kpi_breadcrumbs_container;
414
- dynamicComponentInstance.isEditButton = (userName && userName == "admin") ? true : false;
415
411
  dynamicComponentInstance.isAdvanceButton = true;
416
412
  dynamicComponentInstance.getFilterPageConfig.subscribe((value) => {
417
413
  this.getFiltersForTemplate(value);
@@ -799,12 +795,12 @@ export class BookmarkedTemplateComponent {
799
795
  });
800
796
  }
801
797
  }
802
- BookmarkedTemplateComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: BookmarkedTemplateComponent, deps: [{ token: i1.CommonService }, { token: i2.ActivatedRoute }, { token: i0.ViewContainerRef }, { token: i0.ComponentFactoryResolver }, { token: i3.BookmarkedService }, { token: i4.ToastrService }, { token: i2.Router }, { token: i5.BookmarkedApplicationDatssetsCall }, { token: i6.AppLocalStorage }], target: i0.ɵɵFactoryTarget.Component });
803
- BookmarkedTemplateComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: BookmarkedTemplateComponent, selector: "app-bookmarked-template", viewQueries: [{ propertyName: "dynamicComponentContainer", first: true, predicate: ["dynamicComponentContainer"], descendants: true, read: ViewContainerRef }, { propertyName: "containerRef", first: true, predicate: ["container"], descendants: true, read: ViewContainerRef }, { propertyName: "dynamicContainer", first: true, predicate: ["dynamicContainer"], descendants: true, static: true }], ngImport: i0, template: "<app-loading *ngIf=\"loadingModal\"></app-loading>\n\n<div class=\"w-full\">\n <div class=\"flex flex-wrap \" #dynamicContainer></div>\n</div>", styles: [""], dependencies: [{ kind: "directive", type: i7.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i8.LoadingComponent, selector: "app-loading" }] });
798
+ BookmarkedTemplateComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: BookmarkedTemplateComponent, deps: [{ token: i1.CommonService }, { token: i2.ActivatedRoute }, { token: i0.ViewContainerRef }, { token: i0.ComponentFactoryResolver }, { token: i3.BookmarkedService }, { token: i4.ToastrService }, { token: i2.Router }, { token: i5.BookmarkedApplicationDatssetsCall }], target: i0.ɵɵFactoryTarget.Component });
799
+ BookmarkedTemplateComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: BookmarkedTemplateComponent, selector: "app-bookmarked-template", viewQueries: [{ propertyName: "dynamicComponentContainer", first: true, predicate: ["dynamicComponentContainer"], descendants: true, read: ViewContainerRef }, { propertyName: "containerRef", first: true, predicate: ["container"], descendants: true, read: ViewContainerRef }, { propertyName: "dynamicContainer", first: true, predicate: ["dynamicContainer"], descendants: true, static: true }], ngImport: i0, template: "<app-loading *ngIf=\"loadingModal\"></app-loading>\n\n<div class=\"w-full\">\n <div class=\"flex flex-wrap \" #dynamicContainer></div>\n</div>", styles: [""], dependencies: [{ kind: "directive", type: i6.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i7.LoadingComponent, selector: "app-loading" }] });
804
800
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: BookmarkedTemplateComponent, decorators: [{
805
801
  type: Component,
806
802
  args: [{ selector: 'app-bookmarked-template', template: "<app-loading *ngIf=\"loadingModal\"></app-loading>\n\n<div class=\"w-full\">\n <div class=\"flex flex-wrap \" #dynamicContainer></div>\n</div>" }]
807
- }], ctorParameters: function () { return [{ type: i1.CommonService }, { type: i2.ActivatedRoute }, { type: i0.ViewContainerRef }, { type: i0.ComponentFactoryResolver }, { type: i3.BookmarkedService }, { type: i4.ToastrService }, { type: i2.Router }, { type: i5.BookmarkedApplicationDatssetsCall }, { type: i6.AppLocalStorage }]; }, propDecorators: { dynamicComponentContainer: [{
803
+ }], ctorParameters: function () { return [{ type: i1.CommonService }, { type: i2.ActivatedRoute }, { type: i0.ViewContainerRef }, { type: i0.ComponentFactoryResolver }, { type: i3.BookmarkedService }, { type: i4.ToastrService }, { type: i2.Router }, { type: i5.BookmarkedApplicationDatssetsCall }]; }, propDecorators: { dynamicComponentContainer: [{
808
804
  type: ViewChild,
809
805
  args: ['dynamicComponentContainer', { read: ViewContainerRef }]
810
806
  }], containerRef: [{
@@ -814,4 +810,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImpor
814
810
  type: ViewChild,
815
811
  args: ['dynamicContainer', { static: true }]
816
812
  }] } });
817
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYm9va21hcmtlZC10ZW1wbGF0ZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9nYW1tYS1hcHAtY29udHJvbGxlci9zcmMvbGliL3RlbXBsYXRlLW1vZHVsZS9ib29rbWFya2VkLXRlbXBsYXRlL2Jvb2ttYXJrZWQtdGVtcGxhdGUuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZ2FtbWEtYXBwLWNvbnRyb2xsZXIvc3JjL2xpYi90ZW1wbGF0ZS1tb2R1bGUvYm9va21hcmtlZC10ZW1wbGF0ZS9ib29rbWFya2VkLXRlbXBsYXRlLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBaUIsU0FBUyxFQUFrRyxTQUFTLEVBQWdCLGdCQUFnQixFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRXBNLE9BQU8sTUFBTSxNQUFNLDRDQUE0QyxDQUFDO0FBRWhFLE9BQU8sRUFBRSwwQkFBMEIsRUFBRSxNQUFNLG1GQUFtRixDQUFDO0FBQy9ILE9BQU8sRUFBRSwyQkFBMkIsRUFBRSxNQUFNLHFGQUFxRixDQUFDO0FBQ2xJLE9BQU8sRUFBRSx5QkFBeUIsRUFBRSxNQUFNLHlFQUF5RSxDQUFDO0FBQ3BILE9BQU8sRUFBRSxpQ0FBaUMsRUFBRSxNQUFNLG1HQUFtRyxDQUFDO0FBQ3RKLE9BQU8sRUFBRSw2QkFBNkIsRUFBRSxNQUFNLDJGQUEyRixDQUFDO0FBQzFJLE9BQU8sRUFBRSxrQ0FBa0MsRUFBRSxNQUFNLHFHQUFxRyxDQUFDO0FBQ3pKLE9BQU8sRUFBRSxrQ0FBa0MsRUFBRSxNQUFNLHFHQUFxRyxDQUFDO0FBS3pKLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxNQUFNLENBQUM7Ozs7Ozs7Ozs7QUFTaEMsTUFBTSxPQUFPLDJCQUEyQjtJQTRFdEMsWUFDUyxhQUE0QixFQUMzQixjQUE4QixFQUM5QixnQkFBa0MsRUFDbEMsd0JB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OytCQUNFLHlCQUF5QjtzV0FpQm5DLHlCQUF5QjtzQkFEeEIsU0FBUzt1QkFBQywyQkFBMkIsRUFBRSxFQUFFLElBQUksRUFBRSxnQkFBZ0IsRUFBRTtnQkFHbEUsWUFBWTtzQkFEWCxTQUFTO3VCQUFDLFdBQVcsRUFBRSxFQUFFLElBQUksRUFBRSxnQkFBZ0IsRUFBRTtnQkFFRCxnQkFBZ0I7c0JBQWhFLFNBQVM7dUJBQUMsa0JBQWtCLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFIiwic291cmNlc0NvbnRlbnQiOlsiXG5pbXBvcnQgeyBBZnRlclZpZXdJbml0LCBDb21wb25lbnQsIENvbXBvbmVudEZhY3RvcnlSZXNvbHZlciwgQ29tcG9uZW50UmVmLCBFbGVtZW50UmVmLCBIb3N0TGlzdGVuZXIsIE9uRGVzdHJveSwgT25Jbml0LCBRdWVyeUxpc3QsIFZpZXdDaGlsZCwgVmlld0NoaWxkcmVuLCBWaWV3Q29udGFpbmVyUmVmIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBBY3RpdmF0ZWRSb3V0ZSwgTmF2aWdhdGlvbkV4dHJhcywgUm91dGVyIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCBtb21lbnQgZnJvbSAnLi4vLi4vYXBwbGljYXRpb24tY29udHJvbGxlci9tb21lbnQtaGVscGVyJztcbmltcG9ydCB7IENvbW1vblNlcnZpY2UgfSBmcm9tICcuLi8uLi9hcHBsaWNhdGlvbi1jb250cm9sbGVyL2NvbW1vbic7XG5pbXBvcnQgeyBHYW1tYUFkdmFuY2VDaGFydENvbXBvbmVudCB9IGZyb20gJy4uLy4uL3NoYXJlZC9hZHZhbmNlZC1jb21wb25lbnQvZ2FtbWEtYWR2YW5jZS1jaGFydC9nYW1tYS1hZHZhbmNlLWNoYXJ0LmNvbXBvbmVudCc7XG5pbXBvcnQgeyBHYW1tYVRvZGF5UHJldmlvdXNDb21wb25lbnQgfSBmcm9tICcuLi8uLi9zaGFyZWQvYWR2YW5jZWQtY29tcG9uZW50L2dhbW1hLXRvZGF5LXByZXZpb3VzL2dhbW1hLXRvZGF5LXByZXZpb3VzLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBBcHBBZHZhbmNlSGVhZGVyQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vc2hhcmVkL2FkdmFuY2VkLWNvbXBvbmVudC9hcHAtYWR2YW5jZS1oZWFkZXIvYXBwLWhlYWRlci5jb21wb25lbnQnO1xuaW1wb3J0IHsgR2FtbWFUYWJsZVdpdGhQZXJjZW50YWdlQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vc2hhcmVkL2FkdmFuY2VkLWNvbXBvbmVudC9nYW1tYS10YWJsZS13aXRoLXBlcmNlbnRhZ2UvZ2FtbWEtdGFibGUtd2l0aC1wZXJjZW50YWdlLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBHYW1tU2luZ2xlTnVtYmVyQ2FyZENvbXBvbmVudCB9IGZyb20gJy4uLy4uL3NoYXJlZC9hZHZhbmNlZC1jb21wb25lbnQvZ2FtbS1zaW5nbGUtbnVtYmVyLWNhcmQvZ2FtbS1zaW5nbGUtbnVtYmVyLWNhcmQuY29tcG9uZW50JztcbmltcG9ydCB7IEdhbW1hQWR2YW5jZU9wZXJhdG9yVGFibGVDb21wb25lbnQgfSBmcm9tICcuLi8uLi9zaGFyZWQvYWR2YW5jZWQtY29tcG9uZW50L2dhbW1hLWFkdmFuY2Utb3BlcmF0b3ItdGFibGUvZ2FtbWEtYWR2YW5jZS1vcGVyYXRvci10YWJsZS5jb21wb25lbnQnO1xuaW1wb3J0IHsgQWR2YW5jZVdpZGdldEhlYWRlckZpbHRlckNvbXBvbmVudCB9IGZyb20gJy4uLy4uL3NoYXJlZC9hZHZhbmNlZC1jb21wb25lbnQvYWR2YW5jZS13aWRnZXQtaGVhZGVyLWZpbHRlci9hZHZhbmNlLXdpZGdldC1oZWFkZXItZmlsdGVyLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBHYW1tYUdlb0NoYXJ0Q29tcG9uZW50IH0gZnJvbSAnLi4vLi4vc2hhcmVkL2FkdmFuY2VkLWNvbXBvbmVudC9nYW1tYS1nZW8tY2hhcnQvZ2FtbWEtZ2VvLWNoYXJ0LmNvbXBvbmVudCc7XG5pbXBvcnQgeyBHYW1tYUhlYXRDaGFydENvbXBvbmVudCB9IGZyb20gJy4uLy4uL3NoYXJlZC9hZHZhbmNlZC1jb21wb25lbnQvZ2FtbWEtaGVhdG1hcC9nYW1tYS1oZWF0bWFwLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBCb29rbWFya2VkQXBwbGljYXRpb25EYXRzc2V0c0NhbGwgfSBmcm9tICcuL2Jvb2ttYXJrZWQtZGF0YXNldC1jYWxsLnNlcnZpY2UnO1xuaW1wb3J0IHsgVG9hc3RyU2VydmljZSB9IGZyb20gJ25neC10b2FzdHInO1xuaW1wb3J0IHsgZm9ya0pvaW4gfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IEJvb2ttYXJrZWRTZXJ2aWNlIH0gZnJvbSAnLi9ib29rbWFya2VkLWxheW91dC5zZXJ2aWNlJztcbmltcG9ydCB7IEFwcExvY2FsU3RvcmFnZSB9IGZyb20gJy4uLy4uL2FwcGxpY2F0aW9uLWNvbnRyb2xsZXIvdG9rZW5TdG9yYWdlLnNlcnZjZSc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2FwcC1ib29rbWFya2VkLXRlbXBsYXRlJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2Jvb2ttYXJrZWQtdGVtcGxhdGUuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9ib29rbWFya2VkLXRlbXBsYXRlLmNvbXBvbmVudC5zY3NzJ11cbn0pXG5leHBvcnQgY2xhc3MgQm9va21hcmtlZFRlbXBsYXRlQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcbiAgZGFzaGJvcmRfY29udGFpbmVyOiBhbnkgPSBbXTtcbiAgc2VsZWN0ZWRfd2lkdGg6IGFueTtcbiAgd2lkZ2V0X3dpZHRoID0gWyd3LWZ1bGwnLCAndy0xLzInLCAndy0xLzMnLCAndy0xLzQnLCAndy0xLzUnLCAndy0xLzYnXVxuICBsb2FkaW5nTW9kYWw6IGJvb2xlYW47XG4gIHBhZ2VfdGl0bGUgPSAnRGFzaGJvYXJkJztcbiAgZGVmYXVsdFN0YXJ0RGF0ZTtcbiAgZGVmYXVsdEVuZERhdGU7XG4gIC8qKlxuICAgKiBDb25zdHJ1Y3RvclxuICAgKi9cblxuICBAVmlld0NoaWxkKCdkeW5hbWljQ29tcG9uZW50Q29udGFpbmVyJywgeyByZWFkOiBWaWV3Q29udGFpbmVyUmVmIH0pXG4gIGR5bmFtaWNDb21wb25lbnRDb250YWluZXI6IFZpZXdDb250YWluZXJSZWY7XG4gIEBWaWV3Q2hpbGQoJ2NvbnRhaW5lcicsIHsgcmVhZDogVmlld0NvbnRhaW5lclJlZiB9KVxuICBjb250YWluZXJSZWY6IFZpZXdDb250YWluZXJSZWY7XG4gIEBWaWV3Q2hpbGQoJ2R5bmFtaWNDb250YWluZXInLCB7IHN0YXRpYzogdHJ1ZSB9KSBkeW5hbWljQ29udGFpbmVyOiBFbGVtZW50UmVmO1xuXG4gIGR5bmFtaWNDb21wb25lbnRSZWZzOiBDb21wb25lbnRSZWY8YW55PltdID0gW107XG4gIC8vIGR5bmFtaWNDb21wb25lbnRSZWZzOiBDb21wb25lbnRSZWY8YW55PltdID0gW107XG5cbiAgQ29tcFJlZnM6IENvbXBvbmVudFJlZjxhbnk+O1xuXG4gIGNvbXBvbmVudENsYXNzTWFwID0ge1xuICAgIEdhbW1hQWR2YW5jZUNoYXJ0Q29tcG9uZW50LFxuICAgIEdhbW1hVG9kYXlQcmV2aW91c0NvbXBvbmVudCxcbiAgICBBcHBBZHZhbmNlSGVhZGVyQ29tcG9uZW50LFxuICAgIEdhbW1hVGFibGVXaXRoUGVyY2VudGFnZUNvbXBvbmVudCxcbiAgICBHYW1tU2luZ2xlTnVtYmVyQ2FyZENvbXBvbmVudCxcbiAgICBHYW1tYUFkdmFuY2VPcGVyYXRvclRhYmxlQ29tcG9uZW50LFxuICAgIEFkdmFuY2VXaWRnZXRIZWFkZXJGaWx0ZXJDb21wb25lbnRcbiAgfTtcbiAgZGF0YVNvdXJjZU1hdGFEYXRhOiBhbnkgPSBbXTtcbiAgcXVlcnlUeXBlID0gXCJtb25nb1wiO1xuICBkYXRhU2V0TW9kYWw6IGFueSA9IFtdO1xuICBjb21wb25lbnRDb25maWdEYXRhU291cmNlOiBhbnkgPSBbXTtcbiAgc2VsZXNjZWREYXRhU291cmNlOiBhbnk7XG4gIGRhdGFTb3VyY2VNb2RhbDogYW55ID0ge307XG4gIGlzRGFzaEJvYXJkQ29udGVudDogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIHNlbGVjdGVkVmlld0Zvcm1Db21wb25lbnQ6IGFueSA9IHt9O1xuICBhZGRlZHdpZEdldENvbmZpZyA9IHtcbiAgICBcImRpc3BsYXlcIjogdHJ1ZSxcbiAgICBcIndpZGdldFRpdGxlXCI6IFwiXCIsXG4gICAgXCJ3aWR0aFwiOiBcIlwiLFxuICAgIFwiaGVpZ2h0XCI6IFwiXCJcbiAgfVxuXG5cbiAgZGFzaEJvYXJkV2lkZ2V0Q29uZmlnOiBhbnkgPSBbXG5cbiAgXTtcbiAgaXNXaWRnZXRDcmVhdGlvbkNvbnRlbnQ6IGJvb2xlYW47XG4gIHNlbGVjdGVkV2lkdGg6IGFueTtcbiAgc2VsZWN0ZWRIZWlnaHQ6IGFueTtcbiAgbmV3V2lkZ2V0SW5kZXg6IGFueTtcbiAgc2VsZWN0ZWRJbmRleE9iakZvckNoYXJ0OiBhbnkgPSB7fTtcbiAgc2VsZWN0ZWRDb250YWluZXJPYmplY3RGb3JDaGFydDogYW55ID0ge307XG4gIGRhdGFTZXR0YWJsZURhdGFTb3VyY2U6IGFueTtcbiAgdW5pcXVlRGF0YVNldE9iamVjdCA9IHt9O1xuXG4gIGlzRGFzaEJvYXJkQ29udGVudFR5cGVWaWV3OiBib29sZWFuID0gdHJ1ZTtcbiAgZmlsdGVyczogYW55O1xuICBhbGxXaWRnZXRCeURhdGFzZXQgPSBbXTtcbiAgcGFnZVRpdGxlOiBhbnk7XG4gIHN0YXRlRGF0YVNvdXJjZSA9IG5ldyBNYXAoKTtcbiAgbWFpblBhZ2VEaXZFbGVtZW50OiBhbnk7XG4gIGNvbnRleHRNZW51RGF0YVNvdXJjZTogYW55ID0gW107XG4gIGhhdmluZ0RhdGFPYmplY3Q6IGFueSA9IHt9O1xuICBpc1dpZGdldEZpbHRlcnM6IGJvb2xlYW47XG4gIG5vZGVwcm9wZXJ0aWNlRmlsdGVyRGF0YVNvdXJjZTogYW55O1xuICBnbG9iYWxEZWZhdWx0RmlsdGVyOiBhbnkgPSB7fTtcbiAgcGFnZUlkOiBhbnk7XG5cbiAga3BpX2JyZWFkY3J1bWJzX2NvbnRhaW5lcjogYW55ID0gW107XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHVibGljIGNvbW1vblNlcnZpY2U6IENvbW1vblNlcnZpY2UsXG4gICAgcHJpdmF0ZSBhY3RpdmF0ZWRSb3V0ZTogQWN0aXZhdGVkUm91dGUsXG4gICAgcHJpdmF0ZSB2aWV3Q29udGFpbmVyUmVmOiBWaWV3Q29udGFpbmVyUmVmLFxuICAgIHByaXZhdGUgY29tcG9uZW50RmFjdG9yeVJlc29sdmVyOiBDb21wb25lbnRGYWN0b3J5UmVzb2x2ZXIsXG4gICAgcHJpdmF0ZSBzZXJ2aWNlOiBCb29rbWFya2VkU2VydmljZSxcbiAgICBwcml2YXRlIHRvYXN0cjogVG9hc3RyU2VydmljZSxcbiAgICBwcml2YXRlIHJvdXRlcjogUm91dGVyLFxuICAgIHByaXZhdGUgZGF0YXNldFNlcnZpY2U6IEJvb2ttYXJrZWRBcHBsaWNhdGlvbkRhdHNzZXRzQ2FsbCxcbiAgICBwcml2YXRlIHN0b3JhZ2U6IEFwcExvY2FsU3RvcmFnZVxuXG5cbiAgKSB7IH1cblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcblxuICAgIC8vIHRoaXMua3BpbGlzdFNlcnZpY2UubG9hZGVkJC5waXBlKHRha2UoMSksIHRhcChsb2FkZWQgPT4ge1xuICAgIC8vICAgaWYgKCFsb2FkZWQpIHtcbiAgICAvLyAgICAgdGhpcy5rcGlsaXN0U2VydmljZS5nZXRBbGwoKTtcbiAgICAvLyAgIH1cbiAgICAvLyB9KVxuICAgIC8vICkuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAvLyAgIHRoaXMua3BpbGlzdFNlcnZpY2UuZW50aXRpZXMkLnN1YnNjcmliZShyZXNvbHZlZERhdGEgPT4ge1xuICAgIC8vICAgICB0aGlzLmtwaV9icmVhZGNydW1ic19jb250YWluZXIgPSByZXNvbHZlZERhdGE7XG4gICAgLy8gICB9KTtcbiAgICAvLyB9KTtcblxuICAgIHRoaXMubG9hZGluZ01vZGFsID0gdHJ1ZTtcbiAgICB0aGlzLnBhZ2VJZCA9IHRoaXMuYWN0aXZhdGVkUm91dGUuc25hcHNob3QuZGF0YVsncGFnZUlkJ107XG4gICAgLy8gdGhpcy5wYWdlSWQgPSBcIjYxODI4OTg5LTkxYjEtNDNiMC05YmY5LTc5MGJhYmJmYzEwN1wiO1xuICAgIHRoaXMuZ2V0UGFkZURhdGFTb3VyY2UoZmFsc2UpO1xuICB9XG5cbiAgYXN5bmMgZ2V0RmlsdGVyc0ZvclRlbXBsYXRlKGZpbHRlcikge1xuICAgIHRoaXMuZmlsdGVycyA9IGZpbHRlcjtcbiAgICB0aGlzLmRlZmF1bHRTdGFydERhdGUgPSBmaWx0ZXIuc3RhcnREYXRlO1xuICAgIHRoaXMuZGVmYXVsdEVuZERhdGUgPSBmaWx0ZXIuZW5kRGF0ZTtcbiAgICBmaWx0ZXIub3BlcmF0aW9uRmlsdGVyWydzdGFydERhdGUnXSA9IGZpbHRlci5zdGFydERhdGU7XG4gICAgZmlsdGVyLm9wZXJhdGlvbkZpbHRlclsnZW5kRGF0ZSddID0gZmlsdGVyLmVuZERhdGU7XG4gICAgdGhpcy5sb2FkaW5nTW9kYWwgPSB0cnVlO1xuICAgIHRoaXMuZGFzaEJvYXJkV2lkZ2V0Q29uZmlnID0gW107XG4gICAgYXdhaXQgdGhpcy5nZXRQYWRlRGF0YVNvdXJjZSh0cnVlKTtcbiAgICB0aGlzLnVuaXF1ZURhdGFTZXRPYmplY3QgPSB7fTtcbiAgICBsZXQgYXBpQ2FsbHMgPSBbXTtcblxuICAgIHRoaXMuYWxsV2lkZ2V0QnlEYXRhc2V0LmZvckVhY2godmlldyA9PiB7XG4gICAgICB2aWV3LmRhdGFzZXRJZHMuZm9yRWFjaChpZCA9PiB7XG4gICAgICAgIGxldCBmb3VuZCA9ICh0aGlzLmRhdGFTZXRNb2RhbCBhcyBhbnlbXSkuZmluZChkID0+IGQuZGF0YXNldElkID09PSBpZCk7XG4gICAgICAgIGlmIChmb3VuZCkge1xuICAgICAgICAgIGFwaUNhbGxzLnB1c2godGhpcy5kYXRhc2V0U2VydmljZS5nZXREYXRhRnJvbURhdGFTZXQoZm91bmQsIGlkLCBmaWx0ZXIpKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBQcm9taXNlLmFsbChhcGlDYWxscykudGhlbigoKSA9PiB7XG4gICAgICB0aGlzLmdsb2JhbERlZmF1bHRGaWx0ZXIgPSBmaWx0ZXI7XG4gICAgICB0aGlzLnVuaXF1ZURhdGFTZXRPYmplY3QgPSB0aGlzLmRhdGFzZXRTZXJ2aWNlLmdldFVuaXF1ZURhdGFTZXRPYmplY3QoKTtcbiAgICAgIHRoaXMuY3JlYXRlRGl2RWxlbWVudHModGhpcy51bmlxdWVEYXRhU2V0T2JqZWN0LCB0cnVlKTtcbiAgICAgIHRoaXMubG9hZGluZ01vZGFsID0gZmFsc2U7XG4gICAgfSk7XG4gIH1cblxuICBnZXRQYWRlRGF0YVNvdXJjZShjb250ZXh0KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIHRoaXMuc2VydmljZS5nZXRBcHBQYWdlRGV0YWlsQ29uZmlnKHRoaXMucGFnZUlkKS5zdWJzY3JpYmUoe1xuICAgICAgICBuZXh0OiAoZGF0YTogYW55KSA9PiB7XG5cbiAgICAgICAgICB0aGlzLnBhZ2VUaXRsZSA9IGRhdGEucGFnZU5hbWU7XG4gICAgICAgICAgdGhpcy5kYXNoQm9hcmRXaWRnZXRDb25maWcgPSBkYXRhO1xuXG4gICAgICAgICAgaWYgKCFjb250ZXh0KSB7XG4gICAgICAgICAgICB0aGlzLmRlZmF1bHRTdGFydERhdGUgPSBtb21lbnQoKS5zdWJ0cmFjdCgnMzAnLCAnZGF5cycpLmZvcm1hdCgnWVlZWS1NTS1ERCcpO1xuICAgICAgICAgICAgdGhpcy5kZWZhdWx0RW5kRGF0ZSA9IG1vbWVudCgpLnN1YnRyYWN0KCcxJywgJ2RheXMnKS5mb3JtYXQoJ1lZWVktTU0tREQnKTtcbiAgICAgICAgICAgIHRoaXMuY3JlYXRlRGl2RWxlbWVudHModGhpcy51bmlxdWVEYXRhU2V0T2JqZWN0LCBmYWxzZSk7XG4gICAgICAgICAgICB0aGlzLmdldENvbXBvbmVudENvbmZpZ1NldCgpO1xuICAgICAgICAgICAgdGhpcy5sb2FkaW5nTW9kYWwgPSBmYWxzZTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmVzb2x2ZSgpO1xuICAgICAgICB9LFxuICAgICAgICBlcnJvcjogKGVycjogYW55KSA9PiB7XG4gICAgICAgICAgdGhpcy50b2FzdHIuZXJyb3IoJ1VuZXhwZWN0ZWQgU2VydmVyIEV4Y2VwdGlvbi4gUGxlYXNlIGNvbnRhY3QgU3lzdGVtIEFkbWluLicsICdFcnJvcicpO1xuICAgICAgICAgIHJlamVjdChlcnIpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxuXG5cblxuICBnZXRDb21wb25lbnRDb25maWdTZXQoKSB7XG4gICAgbGV0IGRhdGFzZXQgPSB0aGlzLnNlcnZpY2UuZ2V0QXBwRGF0YXNldENvbmZpZ3MoKTtcbiAgICBsZXQgdmlld0NvbXBvbmVudCA9IHRoaXMuc2VydmljZS5nZXRBcHBWaWV3Q29uZmlncygpO1xuXG4gICAgZm9ya0pvaW4oe1xuICAgICAgZGF0YXNldENvbmZpZzogZGF0YXNldCxcbiAgICAgIHZpZXdDb25maWc6IHZpZXdDb21wb25lbnRcbiAgICB9KS5zdWJzY3JpYmUoe1xuICAgICAgbmV4dDogKCh7IGRhdGFzZXRDb25maWcsIHZpZXdDb25maWcgfSkgPT4ge1xuICAgICAgICB0aGlzLmNvbXBvbmVudENvbmZpZ0RhdGFTb3VyY2UgPSB2aWV3Q29uZmlnO1xuICAgICAgICB0aGlzLmRhdGFTZXRNb2RhbCA9IGRhdGFzZXRDb25maWc7XG4gICAgICAgIHRoaXMuYWxsV2lkZ2V0QnlEYXRhc2V0ID0gW107XG5cbiAgICAgICAgdGhpcy5kYXNoQm9hcmRXaWRnZXRDb25maWcud2lkZ2V0cy5mb3JFYWNoKHdpZGdldCA9PiB7XG4gICAgICAgICAgbGV0IGRlZmF1bHRGaWx0ZXJzID0geyBvcGVyYXRpb25GaWx0ZXI6IHsgc3RhcnREYXRlOiBcIlwiLCBlbmREYXRlOiBcIlwiIH0gfTtcbiAgICAgICAgICB3aWRnZXQuZmlsdGVycy5maWx0ZXJJdGVtcy5mb3JFYWNoKGVsZW1lbnQgPT4ge1xuXG4gICAgICAgICAgICBpZiAoZWxlbWVudC5maWx0ZXJUeXBlID09PSAnZGF0ZScgfHwgZWxlbWVudC5maWx0ZXJUeXBlID09PSAnZGF0ZXRpbWUnKSB7XG4gICAgICAgICAgICAgIGlmIChlbGVtZW50LmRlZmF1bHRGaWx0ZXJUeXBlID09PSBcImR5bmFtaWNcIiAmJiBlbGVtZW50Lm1vbWVudEZ1bmN0aW9uICE9PSBcIlwiICYmIGVsZW1lbnQuZGVmYXVsdEZpbHRlclZhbHVlICE9PSBcIlwiICYmIGVsZW1lbnQubW9tZW50Rm9ybWF0ICE9PSBcIlwiKSB7XG4gICAgICAgICAgICAgICAgbGV0IFtjb3VudCwgdW5pdF0gPSBlbGVtZW50LmRlZmF1bHRGaWx0ZXJWYWx1ZS5zcGxpdCgnLCcpO1xuICAgICAgICAgICAgICAgIGlmIChlbGVtZW50LmFwaU5hbWUgPT09IFwiZW5kRGF0ZVwiKSB7XG4gICAgICAgICAgICAgICAgICBpZiAoZWxlbWVudC5kaXNwbGF5KSB7XG4gICAgICAgICAgICAgICAgICAgIGRlZmF1bHRGaWx0ZXJzLm9wZXJhdGlvbkZpbHRlci5lbmREYXRlID0gbW9tZW50KClbZWxlbWVudC5tb21lbnRGdW5jdGlvbl0ocGFyc2VJbnQoY291bnQpLCB1bml0KS5mb3JtYXQoZWxlbWVudC5tb21lbnRGb3JtYXQpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmRlZmF1bHRFbmREYXRlID0gbW9tZW50KClbZWxlbWVudC5tb21lbnRGdW5jdGlvbl0ocGFyc2VJbnQoY291bnQpLCB1bml0KS5mb3JtYXQoZWxlbWVudC5tb21lbnRGb3JtYXQpO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoZWxlbWVudC5hcGlOYW1lID09PSBcInN0YXJ0RGF0ZVwiKSB7XG4gICAgICAgICAgICAgICAgICBkZWZhdWx0RmlsdGVycy5vcGVyYXRpb25GaWx0ZXIuc3RhcnREYXRlID0gbW9tZW50KClbZWxlbWVudC5tb21lbnRGdW5jdGlvbl0ocGFyc2VJbnQoY291bnQpLCB1bml0KS5mb3JtYXQoZWxlbWVudC5tb21lbnRGb3JtYXQpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICh0eXBlb2YgZWxlbWVudC5maWx0ZXJEYXRhU291cmNlVmFsdWUgPT09IFwic3RyaW5nXCIgJiYgZWxlbWVudC5maWx0ZXJEYXRhU291cmNlVmFsdWUgIT09IFwiXCIpIHx8XG4gICAgICAgICAgICAgICAgKEFycmF5LmlzQXJyYXkoZWxlbWVudC5maWx0ZXJEYXRhU291cmNlVmFsdWUpICYmIGVsZW1lbnQuZmlsdGVyRGF0YVNvdXJjZVZhbHVlLmxlbmd0aCA+IDApXG4gICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIGlmIChlbGVtZW50Lm9wZXJhdG9yTmFtZSAhPT0gXCJcIikge1xuICAgICAgICAgICAgICAgICAgZGVmYXVsdEZpbHRlcnMub3BlcmF0aW9uRmlsdGVyW2VsZW1lbnQub3BlcmF0b3JOYW1lXSA9IEFycmF5LmlzQXJyYXkoZWxlbWVudC5maWx0ZXJEYXRhU291cmNlVmFsdWUpXG4gICAgICAgICAgICAgICAgICAgID8gZWxlbWVudC5maWx0ZXJEYXRhU291cmNlVmFsdWVcbiAgICAgICAgICAgICAgICAgICAgOiBbZWxlbWVudC5maWx0ZXJEYXRhU291cmNlVmFsdWVdO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICBkZWZhdWx0RmlsdGVycy5vcGVyYXRpb25GaWx0ZXJbZWxlbWVudC5hcGlOYW1lXSA9IGVsZW1lbnQuZmlsdGVyRGF0YVNvdXJjZVZhbHVlLmpvaW4oXCIsXCIpO1xuXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICB9KTtcbiAgICAgICAgICBsZXQgdXJsUGFyYW1zOiBhbnkgPSBkZWZhdWx0RmlsdGVycy5vcGVyYXRpb25GaWx0ZXJcbiAgICAgICAgICB1cmxQYXJhbXNbJ3BhZ2VJZCddID0gdGhpcy5wYWdlSWRcbiAgICAgICAgICBsZXQgbmF2aWdhdGlvbjogTmF2aWdhdGlvbkV4dHJhcyA9IHtcbiAgICAgICAgICAgIHF1ZXJ5UGFyYW1zOiB1cmxQYXJhbXMsXG4gICAgICAgICAgICBxdWVyeVBhcmFtc0hhbmRsaW5nOiBcIm1lcmdlXCJcbiAgICAgICAgICB9O1xuICAgICAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFtdLCBuYXZpZ2F0aW9uKTtcblxuICAgICAgICAgIGxldCBkYXRhc2V0SWRzOiBTZXQ8c3RyaW5nPiA9IG5ldyBTZXQoKTtcbiAgICAgICAgICBsZXQgdmlld0lkczogU2V0PHN0cmluZz4gPSBuZXcgU2V0KCk7XG4gICAgICAgICAgd2lkZ2V0LndpZGdldE5vZGUuZm9yRWFjaChub2RlID0+IHtcbiAgICAgICAgICAgIGlmIChub2RlLm5vZGVQcm9wZXJ0aWVzLmRpc3BsYXkpIHtcbiAgICAgICAgICAgICAgbm9kZS5jb21wQ29uZmlnLnZpZXdDb25maWcuZm9yRWFjaCh2aWV3ID0+IHtcbiAgICAgICAgICAgICAgICBkYXRhc2V0SWRzLmFkZCh2aWV3LmRhdGFzZXRJZCk7XG4gICAgICAgICAgICAgICAgdmlld0lkcy5hZGQodmlldy52aWV3SWQpO1xuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIG5vZGUuY29tcENvbmZpZy52aWV3Q29uZmlnLmZvckVhY2godmlldyA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5jb250ZXh0TWVudURhdGFTb3VyY2UucHVzaCh7IHZpZXdJZDogdmlldy52aWV3SWQsIHZpZXdOYW1lOiBub2RlLm5vZGVQcm9wZXJ0aWVzLndpZGdldFRpdGxlLCBkaXNwbGF5S2V5OiB2aWV3LmtwaUNvbmZpZy5rZXlUb1Bhc3MgfSlcbiAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcblxuICAgICAgICAgIHZpZXdJZHMuZm9yRWFjaChlbGVtZW50ID0+IHtcbiAgICAgICAgICAgIGxldCBvYmogPSB7XG4gICAgICAgICAgICAgIFwiZmlsdGVyc1wiOiBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KGRlZmF1bHRGaWx0ZXJzKSksXG4gICAgICAgICAgICAgIFwia2V5VG9QYXNzXCI6IFtdLFxuICAgICAgICAgICAgICBcImRyaWxsRG93blR5cGVcIjogXCJuYXR1cmFsXCIsXG4gICAgICAgICAgICAgIFwiZHJpbGxkb3duRnJvbVwiOiBcIlwiXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLnN0YXRlRGF0YVNvdXJjZS5zZXQoZWxlbWVudCwgb2JqKVxuICAgICAgICAgIH0pO1xuICAgICAgICAgIGxldCBvYmogPSB7XG4gICAgICAgICAgICB3aWRnZXRJZDogd2lkZ2V0LndpZGdldElkLFxuICAgICAgICAgICAgcGFnZUlkOiB3aWRnZXQucGFnZUlkLFxuICAgICAgICAgICAgZmlsdGVyczogZGVmYXVsdEZpbHRlcnMsXG4gICAgICAgICAgICBkYXRhc2V0SWRzOiBkYXRhc2V0SWRzXG4gICAgICAgICAgfVxuICAgICAgICAgIHRoaXMuYWxsV2lkZ2V0QnlEYXRhc2V0LnB1c2gob2JqKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgY29uc29sZS5sb2codGhpcy5zdGF0ZURhdGFTb3VyY2UpO1xuXG5cbiAgICAgICAgdGhpcy51bmlxdWVEYXRhU2V0T2JqZWN0ID0ge307XG4gICAgICAgIGxldCBhcGlDYWxscyA9IFtdO1xuXG5cbiAgICAgICAgdGhpcy5hbGxXaWRnZXRCeURhdGFzZXQuZm9yRWFjaCh2aWV3ID0+IHtcbiAgICAgICAgICB2aWV3LmRhdGFzZXRJZHMuZm9yRWFjaChpZCA9PiB7XG4gICAgICAgICAgICBsZXQgZm91bmQgPSAoZGF0YXNldENvbmZpZyBhcyBhbnlbXSkuZmluZChkID0+IGQuZGF0YXNldElkID09PSBpZCk7XG4gICAgICAgICAgICBpZiAoZm91bmQpIHtcbiAgICAgICAgICAgICAgYXBpQ2FsbHMucHVzaCh0aGlzLmRhdGFzZXRTZXJ2aWNlLmdldERhdGFGcm9tRGF0YVNldChmb3VuZCwgaWQsIHZpZXcuZmlsdGVycykpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICAgICAgUHJvbWlzZS5hbGwoYXBpQ2FsbHMpLnRoZW4oKCkgPT4ge1xuICAgICAgICAgIHRoaXMudW5pcXVlRGF0YVNldE9iamVjdCA9IHRoaXMuZGF0YXNldFNlcnZpY2UuZ2V0VW5pcXVlRGF0YVNldE9iamVjdCgpO1xuICAgICAgICAgIHRoaXMuY3JlYXRlRGl2RWxlbWVudHModGhpcy51bmlxdWVEYXRhU2V0T2JqZWN0LCBmYWxzZSk7XG4gICAgICAgICAgdGhpcy5sb2FkaW5nTW9kYWwgPSBmYWxzZTtcbiAgICAgICAgfSk7XG4gICAgICB9KSwgZXJyb3I6IChlcnI6IGFueSkgPT4ge1xuICAgICAgICB0aGlzLnRvYXN0ci5lcnJvcignVW5leHBlY3RlZCBTZXJ2ZXIgRXhjZXB0aW9uLiBQbGVhc2UgY29udGFjdCBTeXN0ZW0gQWRtaW4uJywgJ0Vycm9yJyk7XG4gICAgICB9XG4gICAgfSlcbiAgfVxuXG4gIGdldERhdGFTZXQoKSB7XG4gICAgdGhpcy5zZXJ2aWNlLmdldEFwcERhdGFzZXRDb25maWdzKCkuc3Vic2NyaWJlKHtcbiAgICAgIG5leHQ6IChkYXRhOiBhbnkpID0+IHtcbiAgICAgICAgdGhpcy5kYXRhU2V0dGFibGVEYXRhU291cmNlID0gZGF0YTtcbiAgICAgIH0sIGVycm9yOiAoZXJyOiBhbnkpID0+IHtcbiAgICAgICAgdGhpcy50b2FzdHIuZXJyb3IoJ1VuZXhwZWN0ZWQgU2VydmVyIEV4Y2VwdGlvbi4gUGxlYXNlIGNvbnRhY3QgU3lzdGVtIEFkbWluLicsICdEYXRhc2V0IENyZWF0aW9uJylcblxuICAgICAgfVxuICAgIH0pXG4gIH1cblxuXG4gIGFzeW5jIGNyZWF0ZURpdkVsZW1lbnRzKGRhdGFzZXRCeUlkLCBjb250ZXh0KSB7XG4gICAgY29uc3QgY29udGFpbmVyID0gdGhpcy5keW5hbWljQ29udGFpbmVyLm5hdGl2ZUVsZW1lbnQ7XG4gICAgY29udGFpbmVyLmlubmVySFRNTCA9IFwiXCI7XG5cbiAgICB0aGlzLmRhc2hCb2FyZFdpZGdldENvbmZpZy53aWRnZXRzLmZvckVhY2goYXN5bmMgZGl2ID0+IHtcbiAgICAgIGNvbnN0IHJvd0RpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgbGV0IHdfaGVpZ2h0ID0gKGRpdi53aWRnZXRQcm9wZXJ0aWVzLmhlaWdodCA9PSBcIlwiKSA/IFwiaC1hdXRvXCIgOiAnaC1bJyArIGRpdi53aWRnZXRQcm9wZXJ0aWVzLmhlaWdodCArICddJztcbiAgICAgIHJvd0Rpdi5jbGFzc0xpc3QuYWRkKGRpdi53aWRnZXRQcm9wZXJ0aWVzLndpZHRoLCB3X2hlaWdodCk7XG4gICAgICBjb25zdCBmaWx0ZXJEaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICAgIHRoaXMubG9hZEZpbHRlckNvbXBvbmVudChkaXYsIGZpbHRlckRpdiwgZGl2LmZpbHRlcnMuZmlsdGVySXRlbXMpO1xuICAgICAgcm93RGl2LmFwcGVuZENoaWxkKGZpbHRlckRpdik7XG5cbiAgICAgIGlmIChkaXYud2lkZ2V0Tm9kZS5sZW5ndGggIT0gMCkge1xuICAgICAgICBsZXQgbWFpbkl0ZW1EaXYgPSByb3dEaXYucXVlcnlTZWxlY3RvcignLmZsZXguZmxleC13cmFwJyk7XG5cblxuXG4gICAgICAgIC8vIElmIGNvbnRleHQgaXMgdHJ1ZSBhbmQgbWFpbkl0ZW1EaXYgZXhpc3RzLCBjbGVhciBpdHMgY29udGVudHNcbiAgICAgICAgaWYgKGNvbnRleHQgJiYgbWFpbkl0ZW1EaXYpIHtcbiAgICAgICAgICBtYWluSXRlbURpdi5pbm5lckhUTUwgPSBcIlwiO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIENyZWF0ZSBtYWluSXRlbURpdiBpZiBpdCBkb2Vzbid0IGV4aXN0XG4gICAgICAgICAgbWFpbkl0ZW1EaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICAgICAgICBtYWluSXRlbURpdi5jbGFzc0xpc3QuYWRkKFwiZmxleFwiLCBcImZsZXgtd3JhcFwiKTtcbiAgICAgICAgICByb3dEaXYuYXBwZW5kQ2hpbGQobWFpbkl0ZW1EaXYpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5sb2FkV2lkZ2V0Tm9kZXMoZGl2LCBtYWluSXRlbURpdiwgZGF0YXNldEJ5SWQpO1xuICAgICAgfVxuXG4gICAgICBjb250YWluZXIuYXBwZW5kQ2hpbGQocm93RGl2KTtcbiAgICB9KTtcbiAgfVxuICBsb2FkV2lkZ2V0Tm9kZXMoZGl2OiBhbnksIG1haW5JdGVtRGl2OiBhbnksIGRhdGFzZXRCeUlkOiBhbnkpIHtcbiAgICB0aGlzLm1haW5QYWdlRGl2RWxlbWVudCA9IG1haW5JdGVtRGl2O1xuICAgIGRpdi53aWRnZXROb2RlLmZvckVhY2goaXRlbSA9PiB7XG5cbiAgICAgIHRoaXMubG9hZFNpbmdsZVdpZGdldE5vZGUoaXRlbSwgbWFpbkl0ZW1EaXYsIGRhdGFzZXRCeUlkKTtcbiAgICB9KTtcbiAgfVxuXG5cbiAgbG9hZFNpbmdsZVdpZGdldE5vZGUoaXRlbTogYW55LCBjb250YWluZXJFbGVtZW50OiBIVE1MRWxlbWVudCwgZGF0YXNldEJ5SWQ6IGFueSkge1xuICAgIGNvbnN0IGVsZW1lbnRJZCA9IGBpZC0ke2l0ZW0uaWR9YDtcbiAgICBjb25zdCBleGlzdGluZ0VsZW1lbnQgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKGAjJHtlbGVtZW50SWR9YCk7XG4gICAgaWYgKGl0ZW0ubm9kZVByb3BlcnRpZXMuZGlzcGxheSAmJiAhZXhpc3RpbmdFbGVtZW50KSB7XG4gICAgICBjb25zdCB3X2hlaWdodCA9IGl0ZW0ubm9kZVByb3BlcnRpZXMuaGVpZ2h0ID09PSBcIlwiID8gXCJoLWF1dG9cIiA6IGBoLVske2l0ZW0ubm9kZVByb3BlcnRpZXMuaGVpZ2h0fV1gO1xuICAgICAgY29uc3QgaXRlbURpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgaXRlbURpdi5pZCA9IGVsZW1lbnRJZDtcbiAgICAgIGl0ZW1EaXYuY2xhc3NMaXN0LmFkZChpdGVtLm5vZGVQcm9wZXJ0aWVzLndpZHRoLCB3X2hlaWdodCwgJ21iLTInKTtcbiAgICAgIGNvbnN0IHdpZGdldERpdiA9IHRoaXMuZ2V0V2lkZ2V0VGl0bGVEaXYoaXRlbSk7XG4gICAgICBpdGVtRGl2LmFwcGVuZENoaWxkKHdpZGdldERpdik7XG4gICAgICBjb25zdCBpbm5lckRpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgaW5uZXJEaXYuY2xhc3NMaXN0LmFkZCgncm91bmRlZCcsICdqdXN0aWZ5LWNlbnRlcicsICdpdGVtcy1jZW50ZXInLCAnYm9yZGVyJywgJ3AtMScsICdtLTEnLCAnZmxleCcsICdmbGV4LXJvdycpO1xuICAgICAgaXRlbS5jb21wQ29uZmlnLnZpZXdDb25maWcuZm9yRWFjaChlbGVtZW50ID0+IHtcbiAgICAgICAgZWxlbWVudC5rcGlDb25maWdbJ2RhdGFTb3VyY2UnXSA9IGRhdGFzZXRCeUlkW2VsZW1lbnQuZGF0YXNldElkXTtcbiAgICAgICAgZWxlbWVudC5rcGlDb25maWdbJ2NvbnRleHRNZW51J10gPSB0aGlzLmNvbnRleHRNZW51RGF0YVNvdXJjZTtcbiAgICAgICAgZWxlbWVudFsndGl0bGVQYXJhbXMnXSA9IGl0ZW0ubm9kZVByb3BlcnRpZXMud2lkZ2V0UGFyYW1zIHx8IFwiXCI7XG4gICAgICAgIGNvbnN0IGNvbXBfb2JqZWN0ID0gdGhpcy5maW5kV2lkZ2V0QnlJZCh0aGlzLmRhc2hCb2FyZFdpZGdldENvbmZpZy53aWRnZXRzLCBpdGVtLmlkKTtcbiAgICAgICAgdGhpcy5sb2FkRHluYW1pY0NvbXBvbmVudChlbGVtZW50LCBjb21wX29iamVjdCwgaXRlbURpdik7XG4gICAgICB9KTtcbiAgICAgIGNvbnRhaW5lckVsZW1lbnQuYXBwZW5kQ2hpbGQoaXRlbURpdik7XG4gICAgICBpZiAoIXRoaXMuaXNEYXNoQm9hcmRDb250ZW50VHlwZVZpZXcpIHtcbiAgICAgICAgaXRlbURpdi5hcHBlbmRDaGlsZChpbm5lckRpdik7XG4gICAgICB9XG5cbiAgICB9IGVsc2UgaWYgKGV4aXN0aW5nRWxlbWVudCkge1xuICAgICAgY29uc3QgaXRlbURpdiA9IGV4aXN0aW5nRWxlbWVudCBhcyBIVE1MRWxlbWVudDtcbiAgICAgIGl0ZW1EaXYuaW5uZXJIVE1MID0gJyc7XG4gICAgICBjb25zdCB3aWRnZXREaXYgPSB0aGlzLmdldFdpZGdldFRpdGxlRGl2KGl0ZW0pO1xuICAgICAgaXRlbURpdi5hcHBlbmRDaGlsZCh3aWRnZXREaXYpO1xuICAgICAgaXRlbS5jb21wQ29uZmlnLnZpZXdDb25maWcuZm9yRWFjaChlbGVtZW50ID0+IHtcbiAgICAgICAgZWxlbWVudC5rcGlDb25maWdbJ2RhdGFTb3VyY2UnXSA9IGRhdGFzZXRCeUlkW2VsZW1lbnQuZGF0YXNldElkXTtcbiAgICAgICAgZWxlbWVudC5rcGlDb25maWdbJ2NvbnRleHRNZW51J10gPSB0aGlzLmNvbnRleHRNZW51RGF0YVNvdXJjZTtcbiAgICAgICAgZWxlbWVudFsndGl0bGVQYXJhbXMnXSA9IGl0ZW0ubm9kZVByb3BlcnRpZXMud2lkZ2V0UGFyYW1zIHx8IFwiXCI7XG4gICAgICAgIGNvbnN0IGNvbXBfb2JqZWN0ID0gdGhpcy5maW5kV2lkZ2V0QnlJZCh0aGlzLmRhc2hCb2FyZFdpZGdldENvbmZpZy53aWRnZXRzLCBpdGVtLmlkKTtcbiAgICAgICAgdGhpcy5sb2FkRHluYW1pY0NvbXBvbmVudChlbGVtZW50LCBjb21wX29iamVjdCwgaXRlbURpdik7XG4gICAgICB9KTtcblxuICAgICAgaWYgKCF0aGlzLmlzRGFzaEJvYXJkQ29udGVudFR5cGVWaWV3KSB7XG4gICAgICAgIGNvbnN0IGlubmVyRGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgICAgIGlubmVyRGl2LmNsYXNzTGlzdC5hZGQoJ3JvdW5kZWQnLCAnanVzdGlmeS1jZW50ZXInLCAnaXRlbXMtY2VudGVyJywgJ2JvcmRlcicsICdwLTEnLCAnbS0xJywgJ2ZsZXgnLCAnZmxleC1yb3cnKTtcbiAgICAgICAgaXRlbURpdi5hcHBlbmRDaGlsZChpbm5lckRpdik7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgZ2V0V2lkZ2V0VGl0bGVEaXYoaXRlbSkge1xuICAgIGNvbnN0IHdpZGdldERpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgIHdpZGdldERpdi5jbGFzc0xpc3QuYWRkKCdmbGV4JywgJ2l0ZW1zLWNlbnRlcicsICdqdXN0aWZ5LWJldHdlZW4nLCAnZm9udC1ib2xkJywgJ3RleHQtbWQnLCAndGV4dC1ncmF5LTkwMCcsICdkYXJrOnRleHQtd2hpdGUnLCAnYm9yZGVyLWInLCAncC0zJywgJ2JnLWdyYXktODAwJywgJ214LTInLCAncm91bmRlZC10LWxnJyk7XG4gICAgY29uc3QgdGl0bGVEaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICBjb25zdCBwYXJhbXMgPSBpdGVtLm5vZGVQcm9wZXJ0aWVzLndpZGdldFBhcmFtcyB8fCBcIlwiO1xuICAgIHRpdGxlRGl2LmlubmVyVGV4dCA9IGl0ZW0ubm9kZVByb3BlcnRpZXMud2lkZ2V0VGl0bGUgKyBwYXJhbXM7XG4gICAgd2lkZ2V0RGl2LmFwcGVuZENoaWxkKHRpdGxlRGl2KTtcblxuICAgIGNvbnN0IHNlYXJjaENvbnRhaW5lckRpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgIHNlYXJjaENvbnRhaW5lckRpdi5jbGFzc0xpc3QuYWRkKCdmbGV4JywgJ2l0ZW1zLWNlbnRlcicsICdtbC1hdXRvJywgJ3NwYWNlLXgtMicsICdqdXN0aWZ5LWVuZCcpOyAvLyBtbC1hdXRvIHB1c2hlcyBjb250ZW50IHRvIHRoZSByaWdodCBzaWRlXG5cbiAgICAvLyBDaGVjayBmb3Igd2lkZ2V0IGZpbHRlclxuICAgIGlmIChpdGVtLm5vZGVQcm9wZXJ0aWVzLmlzV2lkZ2V0RmlsdGVyKSB7XG4gICAgICBjb25zdCBzZWFyY2hCdXR0b24gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdidXR0b24nKTtcbiAgICAgIHNlYXJjaEJ1dHRvbi5pbm5lclRleHQgPSAnRmlsdGVyJztcbiAgICAgIHNlYXJjaEJ1dHRvbi5jbGFzc0xpc3QuYWRkKCdweC0zJywgJ3B5LTEuNScsICdiZy1ibHVlLTYwMCcsICdtci0yJywgJ3RleHQtd2hpdGUnLCAncm91bmRlZCcsICdob3ZlcjpiZy1ibHVlLTcwMCcpO1xuICAgICAgdGhpcy5ub2RlcHJvcGVydGljZUZpbHRlckRhdGFTb3VyY2UgPSB7fTtcbiAgICAgIHRoaXMubm9kZXByb3BlcnRpY2VGaWx0ZXJEYXRhU291cmNlWyd2aWV3Q29uZmlnJ10gPSBpdGVtO1xuICAgICAgdGhpcy5ub2RlcHJvcGVydGljZUZpbHRlckRhdGFTb3VyY2VbJ2hhdmluZ0NvbmZpZyddID0gW107XG5cbiAgICAgIHNlYXJjaEJ1dHRvbi5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsICgpID0+IHtcbiAgICAgICAgdGhpcy5pc1dpZGdldEZpbHRlcnMgPSB0cnVlO1xuICAgICAgICBsZXQgZmlsdGVQcm9wZXJ0aWNlID0gW107XG4gICAgICAgIGl0ZW0uY29tcENvbmZpZy52aWV3Q29uZmlnLmZvckVhY2goZWxlbWVudCA9PiB7XG4gICAgICAgICAgbGV0IGtleV9uYW1lID0gdGhpcy51bmlxdWVEYXRhU2V0T2JqZWN0W2VsZW1lbnQuZGF0YXNldElkXVswXTtcbiAgICAgICAgICBPYmplY3Qua2V5cyhrZXlfbmFtZSkuZm9yRWFjaChrZXkgPT4ge1xuICAgICAgICAgICAgaWYgKCFmaWx0ZVByb3BlcnRpY2UuaW5jbHVkZXMoa2V5KSkge1xuICAgICAgICAgICAgICBmaWx0ZVByb3BlcnRpY2UucHVzaChrZXkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICAgICAgZmlsdGVQcm9wZXJ0aWNlLmZvckVhY2goZWxlbWVudCA9PiB7XG4gICAgICAgICAgbGV0IG9iaiA9IHtcbiAgICAgICAgICAgIGNvbHVtbk5hbWU6IGVsZW1lbnQsXG4gICAgICAgICAgICBkYXRhVHlwZTogXCJmbG9hdFwiLFxuICAgICAgICAgICAgb3BlcmF0b3I6IFwiXCIsXG4gICAgICAgICAgICB2YWx1ZTogXCJcIixcbiAgICAgICAgICB9XG4gICAgICAgICAgdGhpcy5ub2RlcHJvcGVydGljZUZpbHRlckRhdGFTb3VyY2UuaGF2aW5nQ29uZmlnLnB1c2gob2JqKVxuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgICAgc2VhcmNoQ29udGFpbmVyRGl2LmFwcGVuZENoaWxkKHNlYXJjaEJ1dHRvbilcbiAgICB9XG5cbiAgICAvLyBDaGVjayBmb3IgaXRlbSBmaWx0ZXJJZFxuICAgIGlmIChpdGVtLmZpbHRlcklkKSB7XG4gICAgICB0aGlzLm5vZGVwcm9wZXJ0aWNlRmlsdGVyRGF0YVNvdXJjZSA9IHt9O1xuICAgICAgdGhpcy5ub2RlcHJvcGVydGljZUZpbHRlckRhdGFTb3VyY2VbJ3ZpZXdDb25maWcnXSA9IGl0ZW07XG4gICAgICB0aGlzLm5vZGVwcm9wZXJ0aWNlRmlsdGVyRGF0YVNvdXJjZVsnaGF2aW5nQ29uZmlnJ10gPSBbXTtcblxuICAgICAgdGhpcy5zZXJ2aWNlLmdldEFwcEZpbHRlckNvbmZpZyhpdGVtLmZpbHRlcklkKS5zdWJzY3JpYmUoe1xuICAgICAgICBuZXh0OiAoZGF0YTogYW55KSA9PiB7XG4gICAgICAgICAgY29uc3QgZmlsdGVyRGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgICAgICAgdGhpcy5sb2FkV2lkZ2V0RmlsdGVyQ29tcG9uZW50KGl0ZW0sIHdpZGdldERpdiwgZGF0YS5maWx0ZXJJdGVtcywgaXRlbSk7XG4gICAgICAgIH0sIGVycm9yOiAoZXJyOiBhbnkpID0+IHtcblxuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICAvLyBDaGVjayBmb3Igbm9kZSBmaWx0ZXJzXG4gICAgaWYgKGl0ZW0ubm9kZVByb3BlcnRpZXMubm9kZWZpbHRlcnMgJiYgaXRlbS5ub2RlUHJvcGVydGllcy5ub2RlZmlsdGVycy5sZW5ndGggIT09IDApIHtcbiAgICAgIGl0ZW0ubm9kZVByb3BlcnRpZXMubm9kZWZpbHRlcnMuZm9yRWFjaChmaWx0ZXIgPT4ge1xuICAgICAgICBjb25zdCBmaWx0ZXJEaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICAgICAgZmlsdGVyRGl2LmNsYXNzTGlzdC5hZGQoJ2ZsZXgnLCAnaXRlbXMtY2VudGVyJyk7XG5cbiAgICAgICAgaWYgKGZpbHRlci5pbnB1dF90eXBlID09PSAndGV4dCcpIHtcbiAgICAgICAgICBjb25zdCB0ZXh0Qm94ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnaW5wdXQnKTtcbiAgICAgICAgICB0ZXh0Qm94LnR5cGUgPSAndGV4dCc7XG4gICAgICAgICAgdGV4dEJveC5wbGFjZWhvbGRlciA9IGBFbnRlciAke2ZpbHRlci5sb2NhbF9jb2x1bW59YDtcbiAgICAgICAgICB0ZXh0Qm94LmNsYXNzTGlzdC5hZGQoJ3B4LTInLCAncHktMS41JywgJ3JvdW5kZWQnLCAnYm9yZGVyJywgJ21yLTEnLCAnYm9yZGVyLWdyYXktNTAwJywgJ3RleHQtZ3JheS05MDAnLCAnZGFyazpiZy1ncmF5LTcwMCcsICdkYXJrOnRleHQtd2hpdGUnKTtcblxuICAgICAgICAgIGNvbnN0IHNlYXJjaEJ1dHRvbiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2J1dHRvbicpO1xuICAgICAgICAgIHNlYXJjaEJ1dHRvbi5pbm5lclRleHQgPSAnU2VhcmNoJztcbiAgICAgICAgICBzZWFyY2hCdXR0b24uY2xhc3NMaXN0LmFkZCgncHgtMycsICdweS0xLjUnLCAnYmctYmx1ZS02MDAnLCAnbXItMicsICd0ZXh0LXdoaXRlJywgJ3JvdW5kZWQnLCAnaG92ZXI6YmctYmx1ZS03MDAnKTtcblxuICAgICAgICAgIGNvbnN0IHNlcGFyZXJvdEJ1dHRvbiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgICAgIHNlcGFyZXJvdEJ1dHRvbi5pbm5lckhUTUwgPSAnfCc7XG5cbiAgICAgICAgICBzZWFyY2hCdXR0b24uYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCAoKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBzZWFyY2hUZXJtID0gdGV4dEJveC52YWx1ZTtcbiAgICAgICAgICAgIHRoaXMuZ2V0UmVhcmNoUmVzdWx0RnJvbUlucHV0Qm94KHNlYXJjaFRlcm0sIGl0ZW0sIGZpbHRlcik7XG4gICAgICAgICAgfSk7XG5cbiAgICAgICAgICBmaWx0ZXJEaXYuYXBwZW5kQ2hpbGQodGV4dEJveCk7XG4gICAgICAgICAgZmlsdGVyRGl2LmFwcGVuZENoaWxkKHNlYXJjaEJ1dHRvbik7XG4gICAgICAgICAgZmlsdGVyRGl2LmFwcGVuZENoaWxkKHNlcGFyZXJvdEJ1dHRvbik7XG4gICAgICAgIH1cblxuICAgICAgICBzZWFyY2hDb250YWluZXJEaXYuYXBwZW5kQ2hpbGQoZmlsdGVyRGl2KTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHdpZGdldERpdi5hcHBlbmRDaGlsZChzZWFyY2hDb250YWluZXJEaXYpO1xuICAgIHJldHVybiB3aWRnZXREaXY7XG4gIH1cblxuXG5cbiAgbG9hZER5bmFtaWNDb21wb25lbnQoZGF0YSwgaW5kZXhPYmosIGNvbnRhaW5lckVsZW1lbnQpOiBhbnkge1xuICAgIGNvbnN0IGNvbXBvbmVudENsYXNzID0gdGhpcy5jb21wb25lbnRDbGFzc01hcFtkYXRhLmtwaUNvbmZpZy5jb21wb25lbnROYW1lXTtcbiAgICB0aGlzLkNvbXBSZWZzID0gdGhpcy52aWV3Q29udGFpbmVyUmVmLmNyZWF0ZUNvbXBvbmVudChjb21wb25lbnRDbGFzcyk7XG4gICAgY29uc3QgZHluYW1pY0NvbXBvbmVudEluc3RhbmNlID0gdGhpcy5Db21wUmVmcy5pbnN0YW5jZTtcblxuICAgIGR5bmFtaWNDb21wb25lbnRJbnN0YW5jZS5jaGFydERhdGFTb3VyY2UgPSBkYXRhO1xuICAgIGR5bmFtaWNDb21wb25lbnRJbnN0YW5jZS5rcGlfbmFtZSA9IFwiXCI7XG4gICAgaWYgKGRhdGEua3BpQ29uZmlnLmNvbXBvbmVudE5hbWUgPT0gXCJHYW1tYUFkdmFuY2VPcGVyYXRvclRhYmxlQ29tcG9uZW50XCIpIHtcbiAgICAgIGR5bmFtaWNDb21wb25lbnRJbnN0YW5jZS5vUm93Q2xpY2suc3Vic2NyaWJlKCh2YWx1ZTogc3RyaW5nKSA9PiB7XG4gICAgICAgIHRoaXMuZ2V0Um93Q2xpY2sodmFsdWUpO1xuICAgICAgfSk7XG4gICAgICBkeW5hbWljQ29tcG9uZW50SW5zdGFuY2Uub25yaWdodENsaWNrQ29udGV4dFNlbGVjdGlvbi5zdWJzY3JpYmUoKHZhbHVlOiBzdHJpbmcpID0+IHtcbiAgICAgICAgdGhpcy5nZXRDb250ZXh0Q2xpY2sodmFsdWUpO1xuICAgICAgfSk7XG4gICAgfVxuICAgIC8vIGluZGV4T2JqLmNvbXBDb25maWcuZHluYW1pY0NvbXBvbmVudFJlZnMucHVzaCh0aGlzLkNvbXBSZWZzKTtcbiAgICBjb25zdCBjc3NDbGFzcyA9IFwidy1mdWxsXCI7XG4gICAgdGhpcy5Db21wUmVmcy5sb2NhdGlvbi5uYXRpdmVFbGVtZW50LmNsYXNzTGlzdC5hZGQoY3NzQ2xhc3MpO1xuICAgIGNvbnRhaW5lckVsZW1lbnQuYXBwZW5kQ2hpbGQodGhpcy5Db21wUmVmcy5sb2NhdGlvbi5uYXRpdmVFbGVtZW50KTtcbiAgfVxuXG4gIGxvYWRGaWx0ZXJDb21wb25lbnQoaW5kZXhPYmosIGNvbnRhaW5lckVsZW1lbnQsIGZpbHRlckl0ZW1zKSB7XG4gICAgbGV0IHVzZXJOYW1lID0gdGhpcy5zdG9yYWdlLmdldCgndXNlcl9uYW1lJylcbiAgICBsZXQgc2VsZWN0ZWREYXRlcyA9IHsgc3RhcnREYXRlOiB0aGlzLmRlZmF1bHRTdGFydERhdGUsIGVuZERhdGU6IHRoaXMuZGVmYXVsdEVuZERhdGUgfVxuICAgIGNvbnN0IGNvbXBvbmVudENsYXNzID0gdGhpcy5jb21wb25lbnRDbGFzc01hcFsnQXBwQWR2YW5jZUhlYWRlckNvbXBvbmVudCddO1xuICAgIHRoaXMuQ29tcFJlZnMgPSB0aGlzLnZpZXdDb250YWluZXJSZWYuY3JlYXRlQ29tcG9uZW50KGNvbXBvbmVudENsYXNzKTtcbiAgICBjb25zdCBkeW5hbWljQ29tcG9uZW50SW5zdGFuY2UgPSB0aGlzLkNvbXBSZWZzLmluc3RhbmNlO1xuICAgIGR5bmFtaWNDb21wb25lbnRJbnN0YW5jZS5zZWxlY3RlZERhdGVzID0gc2VsZWN0ZWREYXRlcztcbiAgICBkeW5hbWljQ29tcG9uZW50SW5zdGFuY2UuZmlsdGVySXRlbXMgPSBmaWx0ZXJJdGVtcztcbiAgICBkeW5hbWljQ29tcG9uZW50SW5zdGFuY2UucGFnZVRpdGxlID0gdGhpcy5wYWdlVGl0bGU7XG4gICAgZHluYW1pY0NvbXBvbmVudEluc3RhbmNlLmJyZWFkX2NydW1ic19jb250YWluZXIgPSB0aGlzLmtwaV9icmVhZGNydW1ic19jb250YWluZXI7XG4gICAgZHluYW1pY0NvbXBvbmVudEluc3RhbmNlLmlzRWRpdEJ1dHRvbiA9ICh1c2VyTmFtZSAmJiB1c2VyTmFtZSA9PSBcImFkbWluXCIpID8gdHJ1ZSA6IGZhbHNlO1xuICAgIGR5bmFtaWNDb21wb25lbnRJbnN0YW5jZS5pc0FkdmFuY2VCdXR0b24gPSB0cnVlO1xuICAgIGR5bmFtaWNDb21wb25lbnRJbnN0YW5jZS5nZXRGaWx0ZXJQYWdlQ29uZmlnLnN1YnNjcmliZSgodmFsdWU6IHN0cmluZykgPT4ge1xuICAgICAgdGhpcy5nZXRGaWx0ZXJzRm9yVGVtcGxhdGUodmFsdWUpO1xuICAgIH0pO1xuXG4gICAgaW5kZXhPYmouY29tcENvbmZpZy5keW5hbWljQ29tcG9uZW50UmVmcy5wdXNoKHRoaXMuQ29tcFJlZnMpO1xuICAgIGNvbnN0IGNzc0NsYXNzID0gXCJ3LWZ1bGxcIjtcbiAgICB0aGlzLkNvbXBSZWZzLmxvY2F0aW9uLm5hdGl2ZUVsZW1lbnQuY2xhc3NMaXN0LmFkZChjc3NDbGFzcyk7XG4gICAgY29udGFpbmVyRWxlbWVudC5hcHBlbmRDaGlsZCh0aGlzLkNvbXBSZWZzLmxvY2F0aW9uLm5hdGl2ZUVsZW1lbnQpO1xuICB9XG4gIGxvYWRXaWRnZXRGaWx0ZXJDb21wb25lbnQoaW5kZXhPYmosIGNvbnRhaW5lckVsZW1lbnQsIGZpbHRlckl0ZW1zLCB2aWV3SWRzKSB7XG4gICAgbGV0IHNlbGVjdGVkRGF0ZXMgPSB7IHN0YXJ0RGF0ZTogdGhpcy5kZWZhdWx0U3RhcnREYXRlLCBlbmREYXRlOiB0aGlzLmRlZmF1bHRFbmREYXRlIH1cbiAgICBjb25zdCBjb21wb25lbnRDbGFzcyA9IHRoaXMuY29tcG9uZW50Q2xhc3NNYXBbJ0FkdmFuY2VXaWRnZXRIZWFkZXJGaWx0ZXJDb21wb25lbnQnXTtcbiAgICB0aGlzLkNvbXBSZWZzID0gdGhpcy52aWV3Q29udGFpbmVyUmVmLmNyZWF0ZUNvbXBvbmVudChjb21wb25lbnRDbGFzcyk7XG4gICAgY29uc3QgZHluYW1pY0NvbXBvbmVudEluc3RhbmNlID0gdGhpcy5Db21wUmVmcy5pbnN0YW5jZTtcbiAgICBkeW5hbWljQ29tcG9uZW50SW5zdGFuY2Uuc2VsZWN0ZWREYXRlcyA9IHNlbGVjdGVkRGF0ZXM7XG4gICAgZHluYW1pY0NvbXBvbmVudEluc3RhbmNlLmZpbHRlckl0ZW1zID0gZmlsdGVySXRlbXM7XG4gICAgZHluYW1pY0NvbXBvbmVudEluc3RhbmNlLnZpZXdJZHMgPSB2aWV3SWRzO1xuXG4gICAgZHluYW1pY0NvbXBvbmVudEluc3RhbmNlLmdldFdpZGdldEZpbHRlckNvbmZpZy5zdWJzY3JpYmUoKHZhbHVlOiBzdHJpbmcpID0+IHtcbiAgICAgIHRoaXMuZ2V0V2lkZ2V0RmlsdGVyRm9yVGVtcGxhdGUodmFsdWUpO1xuICAgIH0pO1xuXG4gICAgaW5kZXhPYmouY29tcENvbmZpZy5keW5hbWljQ29tcG9uZW50UmVmcy5wdXNoKHRoaXMuQ29tcFJlZnMpO1xuICAgIGNvbnRhaW5lckVsZW1lbnQuYXBwZW5kQ2hpbGQodGhpcy5Db21wUmVmcy5sb2NhdGlvbi5uYXRpdmVFbGVtZW50KTtcbiAgfVxuXG4gIC8vIGZvciBjb250ZXh0IG1lbnUgZnVuY3Rpb25cbiAgZ2V0Q29udGV4dENsaWNrKGV2ZW50KSB7XG4gICAgY29uc3Qgc3RhdGVEYXRhID0gQXJyYXkuZnJvbSh0aGlzLnN0YXRlRGF0YVNvdXJjZS5rZXlzKCkpO1xuICAgIGNvbnN0IGN1cnJlbnRWaWV3SW5kZXggPSBzdGF0ZURhdGEuaW5kZXhPZihldmVudC52aWV3SWQpO1xuICAgIGNvbnN0IGRlbGV0ZWRWaWV3SWRzID0gW107XG4gICAgZm9yIChsZXQgaSA9IGN1cnJlbnRWaWV3SW5kZXggKyAxOyBpIDwgc3RhdGVEYXRhLmxlbmd0aDsgaSsrKSB7XG4gICAgICBkZWxldGVkVmlld0lkcy5wdXNoKHN0YXRlRGF0YVtpXSlcbiAgICB9XG4gICAgdGhpcy5sb2FkaW5nTW9kYWwgPSB0cnVlO1xuICAgIHRoaXMuZGFzaEJvYXJkV2lkZ2V0Q29uZmlnLndpZGdldHMuZm9yRWFjaChlbGVtZW50ID0+IHtcbiAgICAgIGVsZW1lbnQud2lkZ2V0Tm9kZS5mb3JFYWNoKChub2RlOiBhbnksIG5vZGVJbmRleDogbnVtYmVyKSA9PiB7XG4gICAgICAgIGlmICh0aGlzLmdldEVsZW1lbnRPZkN1cnJlbnRWaWV3KG5vZGUsIGV2ZW50LmRyaWxsZG93blRvKSkge1xuICAgICAgICAgIGxldCB2aWV3ID0gZWxlbWVudC53aWRnZXROb2RlW25vZGVJbmRleF07XG4gICAgICAgICAgbGV0IGFwaUNhbGxzID0gW107XG4gICAgICAgICAgbGV0IGFwcGxpZWRGaWx0ZXJzID0gdGhpcy5nZXRTZXRPcGVyYXRvckZpbHRlcihldmVudCwgdGhpcy5zdGF0ZURhdGFTb3VyY2UuZ2V0KGV2ZW50LmRyaWxsZG93bkZyb20pKTtcbiAgICAgICAgICB2aWV3LmNvbXBDb25maWcudmlld0NvbmZpZy5mb3JFYWNoKGNvbnRlbnRWaWV3ID0+IHtcbiAgICAgICAgICAgIGxldCBmb3VuZCA9ICh0aGlzLmRhdGFTZXRNb2RhbCBhcyBhbnlbXSkuZmluZChkID0+IGQuZGF0YXNldElkID09PSBjb250ZW50Vmlldy5kYXRhc2V0SWQpO1xuICAgICAgICAgICAgaWYgKGZvdW5kKSB7XG4gICAgICAgICAgICAgIGFwaUNhbGxzLnB1c2godGhpcy5kYXRhc2V0U2VydmljZS5nZXREYXRhRnJvbURhdGFTZXQoZm91bmQsIGNvbnRlbnRWaWV3LmRhdGFzZXRJZCwgYXBwbGllZEZpbHRlcnMpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcbiAgICAgICAgICBQcm9taXNlLmFsbChhcGlDYWxscykudGhlbigoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLnVuaXF1ZURhdGFTZXRPYmplY3QgPSB0aGlzLmRhdGFzZXRTZXJ2aWNlLmdldFVuaXF1ZURhdGFTZXRPYmplY3QoKTtcbiAgICAgICAgICAgIGZvciAobGV0IGVudHJ5IG9mIGRlbGV0ZWRWaWV3SWRzKSB7XG4gICAgICAgICAgICAgIGVsZW1lbnQud2lkZ2V0Tm9kZS5mb3JFYWNoKHZpZXdWYWx1ZSA9PiB7XG4gICAgICAgICAgICAgICAgdmlld1ZhbHVlLmNvbXBDb25maWcudmlld0NvbmZpZy5mb3JFYWNoKHZpZXdJZCA9PiB7XG4gICAgICAgICAgICAgICAgICBpZiAodmlld0lkLnZpZXdJZCA9PSBlbnRyeSkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBleGlzdHMgPSB0aGlzLmNvbnRleHRNZW51RGF0YVNvdXJjZS5zb21lKGl0ZW0gPT4gaXRlbS52aWV3SWQgPT09IHZpZXdJZC52aWV3SWQpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoIWV4aXN0cykge1xuICAgICAgICAgICAgICAgICAgICAgIC8vIElmIG5vdCBleGlzdHMsIHB1c2ggdGhlIG5ldyBvYmplY3RcbiAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNvbnRleHRNZW51RGF0YVNvdXJjZS5wdXNoKHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZpZXdJZDogdmlld0lkLnZpZXdJZCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHZpZXdOYW1lOiBub2RlLm5vZGVQcm9wZXJ0aWVzLndpZGdldFRpdGxlLFxuICAgICAgICAgICAgICAgICAgICAgICAgZGlzcGxheUtleTogdmlld0lkLmtwaUNvbmZpZy5rZXlUb1Bhc3NcbiAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB0aGlzLnN0YXRlRGF0YVNvdXJjZS5kZWxldGUoZW50cnkpXG4gICAgICAgICAgICAgICAgICAgIHZpZXdWYWx1ZS5ub2RlUHJvcGVydGllc1snZGlzcGxheSddID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHByZWZpeGVkSWQgPSBgaWQtJHt2aWV3VmFsdWUuaWR9YDtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZWxlbWVudFRvSGlkZSA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoYCMke3ByZWZpeGVkSWR9YCkgYXMgSFRNTEVsZW1lbnQ7IC8vIENhc3QgdG8gSFRNTEVsZW1lbnRcbiAgICAgICAgICAgICAgICAgICAgaWYgKGVsZW1lbnRUb0hpZGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICBlbGVtZW50VG9IaWRlLnJlbW92ZSgpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLmNvbnRleHRNZW51RGF0YVNvdXJjZSA9IHRoaXMuY29udGV4dE1lbnVEYXRhU291cmNlLmZpbHRlcihlID0+IGUuZGlzcGxheUtleSAhPT0gZXZlbnQua2V5VG9QYXNzKTtcbiAgICAgICAgICAgIHZpZXcuY29tcENvbmZpZy52aWV3Q29uZmlnLmZvckVhY2godmFsID0+IHtcbiAgICAgICAgICAgICAgbGV0IG9iaiA9IHtcbiAgICAgICAgICAgICAgICBcImZpbHRlcnNcIjogYXBwbGllZEZpbHRlcnMsXG4gICAgICAgICAgICAgICAgXCJrZXlUb1Bhc3NcIjogdGhpcy51cGRhdGVPcGVyYXRvckRhdGEoZXZlbnQua2V5VG9QYXNzLCBldmVudC5kYXRhKSxcbiAgICAgICAgICAgICAgICBcImRyaWxsRG93blR5cGVcIjogZXZlbnQuZHJpbGxEb3duVHlwZSxcbiAgICAgICAgICAgICAgICBcImRyaWxsZG93bkZyb21cIjogZXZlbnQuZHJpbGxkb3duRnJvbVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIHRoaXMuc3RhdGVEYXRhU291cmNlLnNldCh2YWxbJ3ZpZXdJZCddLCBvYmopXG5cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgdmlldy5ub2RlUHJvcGVydGllc1snZGlzcGxheSddID0gdHJ1ZTtcbiAgICAgICAgICAgIHZpZXcubm9kZVByb3BlcnRpZXNbJ3dpZGdldFBhcmFtcyddID0gZXZlbnQudGFibGVUaXRsZTtcbiAgICAgICAgICAgIGNvbnN0IHByZWZpeGVkSWQgPSBgaWQtJHt2aWV3LmlkfWA7XG4gICAgICAgICAgICBjb25zdCBjb250YWluZXJFbGVtZW50ID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihgIyR7cHJlZml4ZWRJZH1gKSBhcyBIVE1MRWxlbWVudDtcbiAgICAgICAgICAgIHRoaXMubG9hZFNpbmdsZVdpZGdldE5vZGUodmlldywgdGhpcy5tYWluUGFnZURpdkVsZW1lbnQsIHRoaXMudW5pcXVlRGF0YVNldE9iamVjdCk7XG4gICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgdGhpcy5zY3JvbGxUb0JvdHRvbSh0aGlzLm1haW5QYWdlRGl2RWxlbWVudCk7XG4gICAgICAgICAgICB9LCAyMDApO1xuXG5cbiAgICAgICAgICAgIGxldCBuYXZpZ2F0aW9uOiBOYXZpZ2F0aW9uRXh0cmFzID0ge1xuICAgICAgICAgICAgICBxdWVyeVBhcmFtczogYXBwbGllZEZpbHRlcnNbJ29wZXJhdGlvbkZpbHRlciddLFxuICAgICAgICAgICAgICBxdWVyeVBhcmFtc0hhbmRsaW5nOiBcIm1lcmdlXCJcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbXSwgbmF2aWdhdGlvbik7XG4gICAgICAgICAgfSk7XG5cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyBub2RlLm5vZGVQcm9wZXJ0aWVzWydkaXNwbGF5J10gPSBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cbiAgLy8gZm9yIHJvdyBjbGljayBmdW5jdGlvblxuICBnZXRSb3dDbGljayhldmVudCkge1xuXG4gICAgY29uc3Qgc3RhdGVEYXRhID0gQXJyYXkuZnJvbSh0aGlzLnN0YXRlRGF0YVNvdXJjZS5rZXlzKCkpO1xuICAgIGNvbnN0IGN1cnJlbnRWaWV3SW5kZXggPSBzdGF0ZURhdGEuaW5kZXhPZihldmVudC52aWV3SWQpO1xuICAgIGNvbnN0IGRlbGV0ZWRWaWV3SWRzID0gW107XG4gICAgZm9yIChsZXQgaSA9IGN1cnJlbnRWaWV3SW5kZXggKyAxOyBpIDwgc3RhdGVEYXRhLmxlbmd0aDsgaSsrKSB7XG4gICAgICBkZWxldGVkVmlld0lkcy5wdXNoKHN0YXRlRGF0YVtpXSk7XG4gICAgfVxuICAgIGNvbnN0IGhvdXJseU5vZGUgPSB0aGlzLmRhc2hCb2FyZFdpZGdldENvbmZpZy53aWRnZXRzXG4gICAgICAubWFwKHdpZGdldCA9PiB3aWRnZXQud2lkZ2V0Tm9kZS5maW5kKG5vZGUgPT4gdGhpcy5nZXRIb3VybHlEYXRhKG5vZGUpKSlcbiAgICAgIC5maW5kKG5vZGUgPT4gbm9kZSk7XG5cbiAgICBpZiAoaG91cmx5Tm9kZSAmJiBldmVudC5rZXlUb1Bhc3MuaW5jbHVkZXMoXCJyZWNvcmREYXRlXCIpKSB7XG4gICAgICB0aGlzLmdldFZpZXdCeVJvd0NMaWNrRm9ySG91cmx5Q2hhcnQoZXZlbnQsIGhvdXJseU5vZGUpO1xuICAgIH1cbiAgICBjb25zdCBjdXJyZW50Vmlld05vZGUgPSB0aGlzLmRhc2hCb2FyZFdpZGdldENvbmZpZy53aWRnZXRzXG4gICAgICAubWFwKHdpZGdldCA9PiB3aWRnZXQud2lkZ2V0Tm9kZS5maW5kKG5vZGUgPT4gdGhpcy5nZXRFbGVtZW50T2ZDdXJyZW50Vmlldyhub2RlLCBldmVudC52aWV3SWQpKSlcbiAgICAgIC5maW5kKG5vZGUgPT4gbm9kZSk7XG4gICAgaWYgKGN1cnJlbnRWaWV3Tm9kZSkge1xuICAgICAgY29uc3QgbmV4dFZpZXdJbmRleCA9IHN0YXRlRGF0YS5pbmRleE9mKGV2ZW50LnZpZXdJZCkgKyAxO1xuICAgICAgY29uc3QgbmV4dFZpZXcgPSB0aGlzLmRhc2hCb2FyZFdpZGdldENvbmZpZy53aWRnZXRzXG4gICAgICAgIC5tYXAod2lkZ2V0ID0+IHdpZGdldC53aWRnZXROb2RlW25leHRWaWV3SW5kZXhdKVxuICAgICAgICAuZmluZChub2RlID0+IG5vZGUpO1xuXG4gICAgICBpZiAobmV4dFZpZXcpIHtcbiAgICAgICAgdGhpcy5sb2FkaW5nTW9kYWwgPSB0cnVlO1xuICAgICAgICB0aGlzLmdldFZpZXdCeVJvd0NMaWNrKGV2ZW50LCBuZXh0VmlldywgZGVsZXRlZFZpZXdJZHMsIGN1cnJlbnRWaWV3Tm9kZSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgZ2V0Vmlld0J5Um93Q0xpY2tGb3JIb3VybHlDaGFydChldmVudCwgbm9kZSkge1xuICAgIGxldCBhcGlDYWxscyA9IFtdO1xuICAgIGNvbnN0IGRlbGV0ZWRWaWV3SWRzID0gW107XG4gICAgbm9kZS5jb21wQ29uZmlnLnZpZXdDb25maWcuZm9yRWFjaChpdGVtID0+IHtcbiAgICAgIGxldCBhcHBsaWVkRmlsdGVycyA9IHRoaXMuZ2V0U2V0T3BlcmF0b3JGaWx0ZXIoZXZlbnQsIHRoaXMuc3RhdGVEYXRhU291cmNlLmdldChpdGVtLnZpZXdJZCkpO1xuICAgICAgbGV0IGZvdW5kID0gKHRoaXMuZGF0YVNldE1vZGFsIGFzIGFueVtdKS5maW5kKGQgPT4gZC5kYXRhc2V0SWQgPT09IGl0ZW0uZGF0YXNldElkKTtcbiAgICAgIGRlbGV0ZWRWaWV3SWRzLnB1c2goaXRlbS52aWV3SWQpO1xuICAgICAgaWYgKGZvdW5kKSB7XG4gICAgICAgIGFwaUNhbGxzLnB1c2godGhpcy5kYXRhc2V0U2VydmljZS5nZXREYXRhRnJvbURhdGFTZXQoZm91bmQsIGl0ZW0uZGF0YXNldElkLCBhcHBsaWVkRmlsdGVycykpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIFByb21pc2UuYWxsKGFwaUNhbGxzKS50aGVuKCgpID0+IHtcbiAgICAgIHRoaXMudW5pcXVlRGF0YVNldE9iamVjdCA9IHRoaXMuZGF0YXNldFNlcnZpY2UuZ2V0VW5pcXVlRGF0YVNldE9iamVjdCgpO1xuICAgICAgLy8gbm9kZS5ub2RlUHJvcGVydGllc1snd2lkZ2V0UGFyYW1zJ10gPSBldmVudC50YWJsZVRpdGxlO1xuICAgICAgdGhpcy5sb2FkU2luZ2xlV2lkZ2V0Tm9kZShub2RlLCB0aGlzLm1haW5QYWdlRGl2RWxlbWVudCwgdGhpcy51bmlxdWVEYXRhU2V0T2JqZWN0KTtcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICB0aGlzLnNjcm9sbFRvQm90dG9tKHRoaXMubWFpblBhZ2VEaXZFbGVtZW50KTtcbiAgICAgIH0sIDIwMCk7XG5cbiAgICB9KTtcbiAgICAvLyB9XG4gICAgY29uc29sZS5sb2codGhpcy5zdGF0ZURhdGFTb3VyY2UpO1xuICB9XG5cbiAgZ2V0Vmlld0J5Um93Q0xpY2soZXZlbnQsIHZpZXcsIGRlbGV0ZWRWaWV3SWRzLCBub2RlKSB7XG4gICAgbGV0IGFwaUNhbGxzID0gW107XG4gICAgbGV0IGFwcGxpZWRGaWx0ZXJzID0gdGhpcy5nZXRTZXRPcGVyYXRvckZpbHRlcihldmVudCwgdGhpcy5zdGF0ZURhdGFTb3VyY2UuZ2V0KGV2ZW50LnZpZXdJZCkpO1xuICAgIHZpZXcuY29tcENvbmZpZy52aWV3Q29uZmlnLmZvckVhY2goY29udGVudFZpZXcgPT4ge1xuICAgICAgbGV0IGZvdW5kID0gKHRoaXMuZGF0YVNldE1vZGFsIGFzIGFueVtdKS5maW5kKGQgPT4gZC5kYXRhc2V0SWQgPT09IGNvbnRlbnRWaWV3LmRhdGFzZXRJZCk7XG4gICAgICBpZiAoZm91bmQpIHtcbiAgICAgICAgYXBpQ2FsbHMucHVzaCh0aGlzLmRhdGFzZXRTZXJ2aWNlLmdldERhdGFGcm9tRGF0YVNldChmb3VuZCwgY29udGVudFZpZXcuZGF0YXNldElkLCBhcHBsaWVkRmlsdGVycykpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIFByb21pc2UuYWxsKGFwaUNhbGxzKS50aGVuKCgpID0+IHtcbiAgICAgIHRoaXMuZGFzaEJvYXJkV2lkZ2V0Q29uZmlnLndpZGdldHMuZm9yRWFjaChlbGVtZW50ID0+IHtcbiAgICAgICAgZm9yIChsZXQgZW50cnkgb2YgZGVsZXRlZFZpZXdJZHMpIHtcbiAgICAgICAgICBlbGVtZW50LndpZGdldE5vZGUuZm9yRWFjaCh2aWV3VmFsdWUgPT4ge1xuICAgICAgICAgICAgdmlld1ZhbHVlLmNvbXBDb25maWcudmlld0NvbmZpZy5mb3JFYWNoKHZpZXdJZCA9PiB7XG4gICAgICAgICAgICAgIGlmICh2aWV3SWQudmlld0lkID09IGVudHJ5KSB7XG4gICAgICAgICAgICAgICAgY29uc3QgZXhpc3RzID0gdGhpcy5jb250ZXh0TWVudURhdGFTb3VyY2Uuc29tZShpdGVtID0+IGl0ZW0udmlld0lkID09PSB2aWV3SWQudmlld0lkKTtcbiAgICAgICAgICAgICAgICBpZiAoIWV4aXN0cykge1xuICAgICAgICAgICAgICAgICAgdGhpcy5jb250ZXh0TWVudURhdGFTb3VyY2UucHVzaCh7XG4gICAgICAgICAgICAgICAgICAgIHZpZXdJZDogdmlld0lkLnZpZXdJZCxcbiAgICAgICAgICAgICAgICAgICAgdmlld05hbWU6IG5vZGUubm9kZVByb3BlcnRpZXMud2lkZ2V0VGl0bGUsXG4gICAgICAgICAgICAgICAgICAgIGRpc3BsYXlLZXk6IHZpZXdJZC5rcGlDb25maWcua2V5VG9QYXNzXG4gICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICB0aGlzLnN0YXRlRGF0YVNvdXJjZS5kZWxldGUoZW50cnkpXG4gICAgICAgICAgICAgICAgdmlld1ZhbHVlLm5vZGVQcm9wZXJ0aWVzWydkaXNwbGF5J10gPSBmYWxzZTtcbiAgICAgICAgICAgICAgICBjb25zdCBwcmVmaXhlZElkID0gYGlkLSR7dmlld1ZhbHVlLmlkfWA7XG4gICAgICAgICAgICAgICAgY29uc3QgZWxlbWVudFRvSGlkZSA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoYCMke3ByZWZpeGVkSWR9YCkgYXMgSFRNTEVsZW1lbnQ7IC8vIENhc3QgdG8gSFRNTEVsZW1lbnRcbiAgICAgICAgICAgICAgICBpZiAoZWxlbWVudFRvSGlkZSkge1xuICAgICAgICAgICAgICAgICAgZWxlbWVudFRvSGlkZS5yZW1vdmUoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgICAgZm9yIChsZXQgZW50cnkgb2YgZGVsZXRlZFZpZXdJZHMpIHtcbiAgICAgICAgdmlldy5jb21wQ29uZmlnLnZpZXdDb25maWcuZm9yRWFjaCh2aWV3SWQgPT4ge1xuICAgICAgICAgIGlmICh2aWV3SWQudmlld0lkID09IGVudHJ5KSB7XG4gICAgICAgICAgICBjb25zdCBleGlzdHMgPSB0aGlzLmNvbnRleHRNZW51RGF0YVNvdXJjZS5zb21lKGl0ZW0gPT4gaXRlbS52aWV3SWQgPT09IHZpZXdJZC52aWV3SWQpO1xuICAgICAgICAgICAgaWYgKCFleGlzdHMpIHtcbiAgICAgICAgICAgICAgdGhpcy5jb250ZXh0TWVudURhdGFTb3VyY2UucHVzaCh7XG4gICAgICAgICAgICAgICAgdmlld0lkOiB2aWV3SWQudmlld0lkLFxuICAgICAgICAgICAgICAgIHZpZXdOYW1lOiB2aWV3Lm5vZGVQcm9wZXJ0aWVzLndpZGdldFRpdGxlLFxuICAgICAgICAgICAgICAgIGRpc3BsYXlLZXk6IHZpZXdJZC5rcGlDb25maWcua2V5VG9QYXNzXG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLnN0YXRlRGF0YVNvdXJjZS5kZWxldGUoZW50cnkpXG4gICAgICAgICAgICB2aWV3Lm5vZGVQcm9wZXJ0aWVzWydkaXNwbGF5J10gPSBmYWxzZTtcbiAgICAgICAgICAgIGNvbnN0IHByZWZpeGVkSWQgPSBgaWQtJHt2aWV3LmlkfWA7XG4gICAgICAgICAgICBjb25zdCBlbGVtZW50VG9IaWRlID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihgIyR7cHJlZml4ZWRJZH1gKSBhcyBIVE1MRWxlbWVudDsgLy8gQ2FzdCB0byBIVE1MRWxlbWVudFxuICAgICAgICAgICAgaWYgKGVsZW1lbnRUb0hpZGUpIHtcbiAgICAgICAgICAgICAgZWxlbWVudFRvSGlkZS5yZW1vdmUoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICB0aGlzLmNvbnRleHRNZW51RGF0YVNvdXJjZSA9IHRoaXMuY29udGV4dE1lbnVEYXRhU291cmNlLmZpbHRlcihlID0+IGUuZGlzcGxheUtleSAhPT0gZXZlbnQua2V5VG9QYXNzKTtcbiAgICAgIHZpZXcuY29tcENvbmZpZy52aWV3Q29uZmlnLmZvckVhY2godmlld2ZvckRhdGFTZXQgPT4ge1xuXG4gICAgICAgIGxldCBvYmogPSB7XG4gICAgICAgICAgXCJmaWx0ZXJzXCI6IGFwcGxpZWRGaWx0ZXJzLFxuICAgICAgICAgIFwia2V5VG9QYXNzXCI6IHRoaXMudXBkYXRlT3BlcmF0b3JEYXRhKGV2ZW50LmtleVRvUGFzcywgZXZlbnQuZGF0YSksXG4gICAgICAgICAgXCJkcmlsbERvd25UeXBlXCI6IGV2ZW50LmRyaWxsRG93blR5cGUsXG4gICAgICAgICAgXCJkcmlsbGRvd25Gcm9tXCI6IGV2ZW50LmRyaWxsZG93bkZyb21cbiAgICAgICAgfVxuICAgICAgICB0aGlzLnN0YXRlRGF0YVNvdXJjZS5zZXQodmlld2ZvckRhdGFTZXRbJ3ZpZXdJZCddLCBvYmopXG4gICAgICB9KTtcbiAgICAgIHZpZXcubm9kZVByb3BlcnRpZXNbJ2Rpc3BsYXknXSA9IHRydWU7XG4gICAgICB2aWV3Lm5vZGVQcm9wZXJ0aWVzWyd3aWRnZXRQYXJhbXMnXSA9IGV2ZW50LnRhYmxlVGl0bGU7XG4gICAgICBjb25zdCBwcmVmaXhlZElkID0gYGlkLSR7dmlldy5pZH1gO1xuICAgICAgY29uc3QgY29udGFpbmVyRWxlbWVudCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoYCMke3ByZWZpeGVkSWR9YCkgYXMgSFRNTEVsZW1lbnQ7XG4gICAgICB0aGlzLnVuaXF1ZURhdGFTZXRPYmplY3QgPSB0aGlzLmRhdGFzZXRTZXJ2aWNlLmdldFVuaXF1ZURhdGFTZXRPYmplY3QoKTtcbiAgICAgIHRoaXMubG9hZFNpbmdsZVdpZGdldE5vZGUodmlldywgdGhpcy5tYWluUGFnZURpdkVsZW1lbnQsIHRoaXMudW5pcXVlRGF0YVNldE9iamVjdCk7XG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgdGhpcy5zY3JvbGxUb0JvdHRvbSh0aGlzLm1haW5QYWdlRGl2RWxlbWVudCk7XG4gICAgICB9LCAyMDApO1xuICAgICAgbGV0IG5hdmlnYXRpb246IE5hdmlnYXRpb25FeHRyYXMgPSB7XG4gICAgICAgIHF1ZXJ5UGFyYW1zOiBhcHBsaWVkRmlsdGVyc1snb3BlcmF0aW9uRmlsdGVyJ10sXG4gICAgICAgIHF1ZXJ5UGFyYW1zSGFuZGxpbmc6IFwibWVyZ2VcIlxuICAgICAgfTtcbiAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFtdLCBuYXZpZ2F0aW9uKTtcbiAgICB9KTtcbiAgICAvLyB9XG4gICAgY29uc29sZS5sb2codGhpcy5zdGF0ZURhdGFTb3VyY2UpO1xuICB9XG5cbiAgc2Nyb2xsVG9Cb3R0b20oY29udGFpbmVyOiBIVE1MRWxlbWVudCkge1xuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgY29udGFpbmVyLnNjcm9sbEludG9WaWV3KHsgYmxvY2s6ICdlbmQnIH0pO1xuICAgICAgdGhpcy5sb2FkaW5nTW9kYWwgPSBmYWxzZTtcbiAgICB9LCAwKTtcbiAgfVxuXG4gIGZpbmRXaWRnZXRCeUlkKGNvbmZpZ3M6IGFueVtdLCBpZDogc3RyaW5nKTogYW55IHwgdW5kZWZpbmVkIHtcbiAgICBmb3IgKGNvbnN0IGNvbmZpZyBvZiBjb25maWdzKSB7XG4gICAgICBpZiAoY29uZmlnLmlkID09PSBpZCkge1xuICAgICAgICByZXR1cm4gY29uZmlnO1xuICAgICAgfVxuICAgICAgaWYgKGNvbmZpZy53aWRnZXROb2RlICYmIGNvbmZpZy53aWRnZXROb2RlLmxlbmd0aCA+IDApIHtcbiAgICAgICAgY29uc3QgZm91bmQgPSB0aGlzLmZpbmRXaWRnZXRCeUlkKGNvbmZpZy53aWRnZXROb2RlLCBpZCk7XG4gICAgICAgIGlmIChmb3VuZCkge1xuICAgICAgICAgIHJldHVybiBmb3VuZDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG5cbiAgdXBkYXRlT3BlcmF0b3JEYXRhKGtleV9uYW1lOiBzdHJpbmdbXSwgdmFsdWVfZGF0YTogYW55KTogYW55IHtcbiAgICBsZXQgb3BlcmF0b3IgPSBbXTtcbiAgICBmb3IgKGNvbnN0IGtleSBvZiBrZXlfbmFtZSkge1xuICAgICAgbGV0IG9iajogYW55ID0ge307XG4gICAgICBvYmpba2V5XSA9IHZhbHVlX2RhdGFba2V5XTtcbiAgICAgIG9wZXJhdG9yLnB1c2gob2JqKVxuICAgIH1cbiAgICByZXR1cm4gb3BlcmF0b3I7XG4gIH1cblxuXG4gIGdldEVsZW1lbnRPZkN1cnJlbnRWaWV3KG5vZGUsIHZpZXdJZCkge1xuICAgIGNvbnN0IG1hdGNoZWRPYmplY3QgPSBub2RlLmNvbXBDb25maWcudmlld0NvbmZpZy5maW5kKG9iamVjdCA9PiBvYmplY3Qudmlld0lkID09PSB2aWV3SWQpO1xuICAgIHJldHVybiBtYXRjaGVkT2JqZWN0ID8gbm9kZSA6IG51bGw7XG4gIH1cbiAgZ2V0SG91cmx5RGF0YShub2RlKSB7XG4gICAgY29uc3QgbWF0Y2hlZE9iamVjdCA9IG5vZGUuY29tcENvbmZpZy52aWV3Q29uZmlnLmZpbmQob2JqZWN0ID0+IG9iamVjdC5rcGlDb25maWcuZm9ybWF0ZSA9PT0gJ2hvdXJseScpO1xuICAgIHJldHVybiBtYXRjaGVkT2JqZWN0ID8gbm9kZSA6IG51bGw7XG4gIH1cblxuICBnZXRTZXRPcGVyYXRvckZpbHRlcihvYmplY3REYXRhLCBwcmV2aW91c1ZpZXdTdGF0ZXMpIHtcblxuICAgIGNvbnN0IHsgZGF0YSwga2V5VG9QYXNzIH0gPSBvYmplY3REYXRhO1xuICAgIGNvbnN0IGFwcGxpZWRGaWx0ZXIgPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KHByZXZpb3VzVmlld1N0YXRlcy5maWx0ZXJzLm9wZXJhdGlvbkZpbHRlcikpO1xuXG4gICAga2V5VG9QYXNzLmZvckVhY2goa2V5ID0+IHtcbiAgICAgIGlmIChrZXkgaW4gZGF0YSkge1xuICAgICAgICBpZiAoa2V5ID09PSBcInJlY29yZERhdGVcIiAmJiBcInN0YXJ0RGF0ZVwiIGluIGFwcGxpZWRGaWx0ZXIgJiYgXCJlbmREYXRlXCIgaW4gYXBwbGllZEZpbHRlcikge1xuICAgICAgICAgIGFwcGxpZWRGaWx0ZXIuc3RhcnREYXRlID0gZGF0YVtrZXldO1xuICAgICAgICAgIGFwcGxpZWRGaWx0ZXIuZW5kRGF0ZSA9IGRhdGFba2V5XTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBhcHBsaWVkRmlsdGVyW2tleV0gPSBkYXRhW2tleV07XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcbiAgICBjb25zdCBkZWZhdWx0b3BlcmF0aW9uRmlsdGVyID0gdGhpcy5nbG9iYWxEZWZhdWx0RmlsdGVyLm9wZXJhdGlvbkZpbHRlcjtcbiAgICBpZiAoZGVmYXVsdG9wZXJhdGlvbkZpbHRlcikge1xuICAgICAgT2JqZWN0LmtleXMoZGVmYXVsdG9wZXJhdGlvbkZpbHRlcikuZm9yRWFjaChrZXkgPT4ge1xuICAgICAgICBpZiAoIWFwcGxpZWRGaWx0ZXIuaGFzT3duUHJvcGVydHkoa2V5KSkge1xuICAgICAgICAgIGFwcGxpZWRGaWx0ZXJba2V5XSA9IGRlZmF1bHRvcGVyYXRpb25GaWx0ZXJba2V5XTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgY29uc3Qgb3BlcmF0aW9uRmlsdGVyID0ge307XG4gICAgb3BlcmF0aW9uRmlsdGVyWydvcGVyYXRpb25GaWx0ZXInXSA9IGFwcGxpZWRGaWx0ZXI7XG4gICAgcmV0dXJuIG9wZXJhdGlvbkZpbHRlcjtcbiAgfVxuXG5cbiAgZ2V0UmVhcmNoUmVzdWx0RnJvbUlucHV0Qm94KGlucHV0VmFsdWUsIHZpZXdDb25maWcsIGZpbHRlck9iamVjdCkge1xuICAgIGxldCB2aWV3ID0gdmlld0NvbmZpZztcbiAgICBsZXQgZXZlbnROb2RlID0geyBkYXRhOiB7fSwga2V5VG9QYXNzOiBbXSB9XG4gICAgZXZlbnROb2RlLmRhdGFbZmlsdGVyT2JqZWN0LnNlcnZlcl9jb2x1bW5dID0gaW5wdXRWYWx1ZTtcbiAgICBldmVudE5vZGVbJ2tleVRvUGFzcyddID0gW2ZpbHRlck9iamVjdC5zZXJ2ZXJfY29sdW1uXTtcbiAgICBsZXQgYXBpQ2FsbHMgPSBbXTtcblxuICAgIHZpZXcuY29tcENvbmZpZy52aWV3Q29uZmlnLmZvckVhY2goY29udGVudFZpZXcgPT4ge1xuICAgICAgbGV0IGFwcGxpZWRGaWx0ZXJzID0gdGhpcy5nZXRTZXRPcGVyYXRvckZpbHRlcihldmVudE5vZGUsIHRoaXMuc3RhdGVEYXRhU291cmNlLmdldChjb250ZW50Vmlldy52aWV3SWQpKTtcbiAgICAgIGxldCBmb3VuZCA9ICh0aGlzLmRhdGFTZXRNb2RhbCBhcyBhbnlbXSkuZmluZChkID0+IGQuZGF0YXNldElkID09PSBjb250ZW50Vmlldy5kYXRhc2V0SWQpO1xuICAgICAgaWYgKGZvdW5kKSB7XG4gICAgICAgIGFwaUNhbGxzLnB1c2godGhpcy5kYXRhc2V0U2VydmljZS5nZXREYXRhRnJvbURhdGFTZXQoZm91bmQsIGNvbnRlbnRWaWV3LmRhdGFzZXRJZCwgYXBwbGllZEZpbHRlcnMpKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICB2aWV3Q29uZmlnLm5vZGVQcm9wZXJ0aWVzWydkaXNwbGF5J10gPSBmYWxzZTtcbiAgICBjb25zdCBwcmVmaXhlZElkID0gYGlkLSR7dmlld0NvbmZpZy5pZH1gO1xuICAgIGNvbnN0IGVsZW1lbnRUb0hpZGUgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKGAjJHtwcmVmaXhlZElkfWApIGFzIEhUTUxFbGVtZW50OyAvLyBDYXN0IHRvIEhUTUxFbGVtZW50XG4gICAgaWYgKGVsZW1lbnRUb0hpZGUpIHtcbiAgICAgIGVsZW1lbnRUb0hpZGUucmVtb3ZlKCk7XG4gICAgfVxuXG4gICAgUHJvbWlzZS5hbGwoYXBpQ2FsbHMpLnRoZW4oKCkgPT4ge1xuICAgICAgdGhpcy51bmlxdWVEYXRhU2V0T2JqZWN0ID0gdGhpcy5kYXRhc2V0U2VydmljZS5nZXRVbmlxdWVEYXRhU2V0T2JqZWN0KCk7XG5cbiAgICAgIHRoaXMubG9hZGluZ01vZGFsID0gdHJ1ZTtcbiAgICAgIHRoaXMuY29udGV4dE1lbnVEYXRhU291cmNlID0gdGhpcy5jb250ZXh0TWVudURhdGFTb3VyY2UuZmlsdGVyKGUgPT4gZS5kaXNwbGF5S2V5ICE9PSB2aWV3Q29uZmlnLmtleVRvUGFzcyk7XG5cbiAgICAgIHZpZXcubm9kZVByb3BlcnRpZXNbJ2Rpc3BsYXknXSA9IHRydWU7XG4gICAgICAvLyB2aWV3Lm5vZGVQcm9wZXJ0aWVzWyd3aWRnZXRQYXJhbXMnXSA9IGV2ZW50LnRhYmxlVGl0bGU7XG4gICAgICBjb25zdCBwcmVmaXhlZElkID0gYGlkLSR7dmlldy5pZH1gO1xuICAgICAgY29uc3QgY29udGFpbmVyRWxlbWVudCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoYCMke3ByZWZpeGVkSWR9YCkgYXMgSFRNTEVsZW1lbnQ7XG4gICAgICB0aGlzLmxvYWRTaW5nbGVXaWRnZXROb2RlKHZpZXcsIHRoaXMubWFpblBhZ2VEaXZFbGVtZW50LCB0aGlzLnVuaXF1ZURhdGFTZXRPYmplY3QpO1xuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIHRoaXMuc2Nyb2xsVG9Cb3R0b20odGhpcy5tYWluUGFnZURpdkVsZW1lbnQpO1xuICAgICAgfSwgMjAwKTtcbiAgICAgIGxldCBwYXJhbXMgPSB7fTtcbiAgICAgIHBhcmFtc1tmaWx0ZXJPYmplY3Quc2VydmVyX2NvbHVtbl0gPSBpbnB1dFZhbHVlO1xuICAgICAgbGV0IG5hdmlnYXRpb246IE5hdmlnYXRpb25FeHRyYXMgPSB7XG4gICAgICAgIHF1ZXJ5UGFyYW1zOiBwYXJhbXMsXG4gICAgICAgIHF1ZXJ5UGFyYW1zSGFuZGxpbmc6IFwibWVyZ2VcIlxuICAgICAgfTtcbiAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFtdLCBuYXZpZ2F0aW9uKTtcbiAgICB9KTtcbiAgfVxuXG5cbiAgc3VibWl0RmlsdGVyKCkge1xuICAgIGxldCB2aWV3ID0gdGhpcy5ub2RlcHJvcGVydGljZUZpbHRlckRhdGFTb3VyY2Uudmlld0NvbmZpZztcbiAgICAvLyBsZXQgY2FsX3ZhbHVlID0gKHBhcnNlRmxvYXQoc2VhcmNoVGVybSkgLyAxMDApXG4gICAgbGV0IGFwaUNhbGxzID0gW107XG4gICAgdGhpcy5oYXZpbmdEYXRhT2JqZWN0ID0gdGhpcy5ub2RlcHJvcGVydGljZUZpbHRlckRhdGFTb3VyY2UuaGF2aW5nQ29uZmlnLmZpbHRlcih2YWx1ZSA9PiB2YWx1ZS52YWx1ZSAhPT0gXCJcIik7XG4gICAgdmlldy5jb21wQ29uZmlnLnZpZXdDb25maWcuZm9yRWFjaChjb250ZW50VmlldyA9PiB7XG4gICAgICBsZXQgYXBwbGllZEZpbHRlcnMgPSB0aGlzLnN0YXRlRGF0YVNvdXJjZS5nZXQoY29udGVudFZpZXcudmlld0lkKTtcbiAgICAgIGxldCBmb3VuZCA9ICh0aGlzLmRhdGFTZXRNb2RhbCBhcyBhbnlbXSkuZmluZChkID0+IGQuZGF0YXNldElkID09PSBjb250ZW50Vmlldy5kYXRhc2V0SWQpO1xuICAgICAgaWYgKGZvdW5kKSB7XG4gICAgICAgIGFwaUNhbGxzLnB1c2godGhpcy5kYXRhc2V0U2VydmljZS5nZXREYXRhRnJvbURhdGFTZXQoZm91bmQsIGNvbnRlbnRWaWV3LmRhdGFzZXRJZCwgYXBwbGllZEZpbHRlcnMuZmlsdGVycykpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIFByb21pc2UuYWxsKGFwaUNhbGxzKS50aGVuKCgpID0+IHtcbiAgICAgIHRoaXMudW5pcXVlRGF0YVNldE9iamVjdCA9IHRoaXMuZGF0YXNldFNlcnZpY2UuZ2V0VW5pcXVlRGF0YVNldE9iamVjdCgpO1xuXG4gICAgICB0aGlzLm5vZGVwcm9wZXJ0aWNlRmlsdGVyRGF0YVNvdXJjZS52aWV3Q29uZmlnLm5vZGVQcm9wZXJ0aWVzWydkaXNwbGF5J10gPSBmYWxzZTtcbiAgICAgIGNvbnN0IHByZWZpeGVkSWQgPSBgaWQtJHt0aGlzLm5vZGVwcm9wZXJ0aWNlRmlsdGVyRGF0YVNvdXJjZS52aWV3Q29uZmlnLmlkfWA7XG4gICAgICBjb25zdCBlbGVtZW50VG9IaWRlID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihgIyR7cHJlZml4ZWRJZH1gKSBhcyBIVE1MRWxlbWVudDsgLy8gQ2FzdCB0byBIVE1MRWxlbWVudFxuICAgICAgaWYgKGVsZW1lbnRUb0hpZGUpIHtcbiAgICAgICAgZWxlbWVudFRvSGlkZS5yZW1vdmUoKTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5sb2FkaW5nTW9kYWwgPSB0cnVlO1xuICAgICAgdGhpcy5jb250ZXh0TWVudURhdGFTb3VyY2UgPSB0aGlzLmNvbnRleHRNZW51RGF0YVNvdXJjZS5maWx0ZXIoZSA9PiBlLmRpc3BsYXlLZXkgIT09IHRoaXMubm9kZXByb3BlcnRpY2VGaWx0ZXJEYXRhU291cmNlLnZpZXdDb25maWcua2V5VG9QYXNzKTtcbiAgICAgIHRoaXMuaXNXaWRnZXRGaWx0ZXJzID0gZmFsc2U7XG4gICAgICB2aWV3Lm5vZGVQcm9wZXJ0aWVzWydkaXNwbGF5J10gPSB0cnVlO1xuICAgICAgLy8gdmlldy5ub2RlUHJvcGVydGllc1snd2lkZ2V0UGFyYW1zJ10gPSBldmVudC50YWJsZVRpdGxlO1xuICAgICAgLy8gY29uc3QgcHJlZml4ZWRJZCA9IGBpZC0ke3ZpZXcuaWR9YDtcbiAgICAgIC8vIGNvbnN0IGNvbnRhaW5lckVsZW1lbnQgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKGAjJHtwcmVmaXhlZElkfWApIGFzIEhUTUxFbGVtZW50O1xuICAgICAgdGhpcy5sb2FkU2luZ2xlV2lkZ2V0Tm9kZSh2aWV3LCB0aGlzLm1haW5QYWdlRGl2RWxlbWVudCwgdGhpcy51bmlxdWVEYXRhU2V0T2JqZWN0KTtcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICB0aGlzLnNjcm9sbFRvQm90dG9tKHRoaXMubWFpblBhZ2VEaXZFbGVtZW50KTtcbiAgICAgIH0sIDIwMCk7XG4gICAgfSk7XG4gIH1cblxuXG4gIGdldFdpZGdldEZpbHRlckZvclRlbXBsYXRlKHZhbHVlKSB7XG4gICAgbGV0IGFwaUNhbGxzID0gW107XG4gICAgY29uc3QgZGVsZXRlZFZpZXdJZHMgPSBbXTtcbiAgICB2YWx1ZS52aWV3Tm9kZXMuY29tcENvbmZpZy52aWV3Q29uZmlnLmZvckVhY2goaXRlbSA9PiB7XG4gICAgICBsZXQgd2lkZ2V0RmlsdGVyID0gdGhpcy5zdGF0ZURhdGFTb3VyY2UuZ2V0KGl0ZW0udmlld0lkKTtcbiAgICAgIGxldCBhcHBsaWVkRmlsdGVycyA9IHdpZGdldEZpbHRlci5maWx0ZXJzO1xuICAgICAgbGV0IGZvdW5kID0gKHRoaXMuZGF0YVNldE1vZGFsIGFzIGFueVtdKS5maW5kKGQgPT4gZC5kYXRhc2V0SWQgPT09IGl0ZW0uZGF0YXNldElkKTtcbiAgICAgIGRlbGV0ZWRWaWV3SWRzLnB1c2goaXRlbS52aWV3SWQpO1xuICAgICAgY29uc3QgaGF2aW5nID0gT2JqZWN0LmVudHJpZXModmFsdWUub3BlcmF0aW9uRmlsdGVyKS5tYXAoKFtrZXksIHZhbHVlXSkgPT4gKHtcbiAgICAgICAgY29sdW1uTmFtZToga2V5LFxuICAgICAgICBkYXRhVHlwZTogXCJmbG9hdFwiLFxuICAgICAgICBvcGVyYXRvcjogXCJndGVcIixcbiAgICAgICAgdmFsdWU6IHZhbHVlXG4gICAgICB9KSk7XG5cbiAgICAgIGlmIChmb3VuZCkge1xuICAgICAgICBmb3VuZC5jb25maWcucXVlcnlDb25maWdbJ2hhdmluZ3MnXSA9IGhhdmluZztcbiAgICAgICAgYXBpQ2FsbHMucHVzaCh0aGlzLmRhdGFzZXRTZXJ2aWNlLmdldERhdGFGcm9tRGF0YVNldChmb3VuZCwgaXRlbS5kYXRhc2V0SWQsIGFwcGxpZWRGaWx0ZXJzKSk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgUHJvbWlzZS5hbGwoYXBpQ2FsbHMpLnRoZW4oKCkgPT4ge1xuICAgICAgdGhpcy51bmlxdWVEYXRhU2V0T2JqZWN0ID0gdGhpcy5kYXRhc2V0U2VydmljZS5nZXRVbmlxdWVEYXRhU2V0T2JqZWN0KCk7XG4gICAgICAvLyB2YWx1ZS52aWV3Tm9kZXMubm9kZVByb3BlcnRpZXNbJ3dpZGdldFBhcmFtcyddID0gZXZlbnQudGFibGVUaXRsZTtcbiAgICAgIHRoaXMubG9hZFNpbmdsZVdpZGdldE5vZGUodmFsdWUudmlld05vZGVzLCB0aGlzLm1haW5QYWdlRGl2RWxlbWVudCwgdGhpcy51bmlxdWVEYXRhU2V0T2JqZWN0KTtcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICB0aGlzLnNjcm9sbFRvQm90dG9tKHRoaXMubWFpblBhZ2VEaXZFbGVtZW50KTtcbiAgICAgIH0sIDIwMCk7XG5cbiAgICB9KTtcbiAgICAvLyB9XG4gIH1cblxufVxuIiwiPGFwcC1sb2FkaW5nICpuZ0lmPVwibG9hZGluZ01vZGFsXCI+PC9hcHAtbG9hZGluZz5cblxuPGRpdiBjbGFzcz1cInctZnVsbFwiPlxuICAgIDxkaXYgY2xhc3M9XCJmbGV4IGZsZXgtd3JhcCBcIiAjZHluYW1pY0NvbnRhaW5lcj48L2Rpdj5cbjwvZGl2PiJdfQ==
813
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYm9va21hcmtlZC10ZW1wbGF0ZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9nYW1tYS1hcHAtY29udHJvbGxlci9zcmMvbGliL3RlbXBsYXRlLW1vZHVsZS9ib29rbWFya2VkLXRlbXBsYXRlL2Jvb2ttYXJrZWQtdGVtcGxhdGUuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZ2FtbWEtYXBwLWNvbnRyb2xsZXIvc3JjL2xpYi90ZW1wbGF0ZS1tb2R1bGUvYm9va21hcmtlZC10ZW1wbGF0ZS9ib29rbWFya2VkLXRlbXBsYXRlLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBaUIsU0FBUyxFQUFrRyxTQUFTLEVBQWdCLGdCQUFnQixFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRXBNLE9BQU8sTUFBTSxNQUFNLDRDQUE0QyxDQUFDO0FBRWhFLE9BQU8sRUFBRSwwQkFBMEIsRUFBRSxNQUFNLG1GQUFtRixDQUFDO0FBQy9ILE9BQU8sRUFBRSwyQkFBMkIsRUFBRSxNQUFNLHFGQUFxRixDQUFDO0FBQ2xJLE9BQU8sRUFBRSx5QkFBeUIsRUFBRSxNQUFNLHlFQUF5RSxDQUFDO0FBQ3BILE9BQU8sRUFBRSxpQ0FBaUMsRUFBRSxNQUFNLG1HQUFtRyxDQUFDO0FBQ3RKLE9BQU8sRUFBRSw2QkFBNkIsRUFBRSxNQUFNLDJGQUEyRixDQUFDO0FBQzFJLE9BQU8sRUFBRSxrQ0FBa0MsRUFBRSxNQUFNLHFHQUFxRyxDQUFDO0FBQ3pKLE9BQU8sRUFBRSxrQ0FBa0MsRUFBRSxNQUFNLHFHQUFxRyxDQUFDO0FBS3pKLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxNQUFNLENBQUM7Ozs7Ozs7OztBQVNoQyxNQUFNLE9BQU8sMkJBQTJCO0lBNEV0QyxZQUNTLGFBQTRCLEVBQzNCLGNBQThCLEVBQzlCLGdCQUFrQyxFQUNsQyx3QkFB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LEVBQUUiLCJzb3VyY2VzQ29udGVudCI6WyJcbmltcG9ydCB7IEFmdGVyVmlld0luaXQsIENvbXBvbmVudCwgQ29tcG9uZW50RmFjdG9yeVJlc29sdmVyLCBDb21wb25lbnRSZWYsIEVsZW1lbnRSZWYsIEhvc3RMaXN0ZW5lciwgT25EZXN0cm95LCBPbkluaXQsIFF1ZXJ5TGlzdCwgVmlld0NoaWxkLCBWaWV3Q2hpbGRyZW4sIFZpZXdDb250YWluZXJSZWYgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEFjdGl2YXRlZFJvdXRlLCBOYXZpZ2F0aW9uRXh0cmFzLCBSb3V0ZXIgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuaW1wb3J0IG1vbWVudCBmcm9tICcuLi8uLi9hcHBsaWNhdGlvbi1jb250cm9sbGVyL21vbWVudC1oZWxwZXInO1xuaW1wb3J0IHsgQ29tbW9uU2VydmljZSB9IGZyb20gJy4uLy4uL2FwcGxpY2F0aW9uLWNvbnRyb2xsZXIvY29tbW9uJztcbmltcG9ydCB7IEdhbW1hQWR2YW5jZUNoYXJ0Q29tcG9uZW50IH0gZnJvbSAnLi4vLi4vc2hhcmVkL2FkdmFuY2VkLWNvbXBvbmVudC9nYW1tYS1hZHZhbmNlLWNoYXJ0L2dhbW1hLWFkdmFuY2UtY2hhcnQuY29tcG9uZW50JztcbmltcG9ydCB7IEdhbW1hVG9kYXlQcmV2aW91c0NvbXBvbmVudCB9IGZyb20gJy4uLy4uL3NoYXJlZC9hZHZhbmNlZC1jb21wb25lbnQvZ2FtbWEtdG9kYXktcHJldmlvdXMvZ2FtbWEtdG9kYXktcHJldmlvdXMuY29tcG9uZW50JztcbmltcG9ydCB7IEFwcEFkdmFuY2VIZWFkZXJDb21wb25lbnQgfSBmcm9tICcuLi8uLi9zaGFyZWQvYWR2YW5jZWQtY29tcG9uZW50L2FwcC1hZHZhbmNlLWhlYWRlci9hcHAtaGVhZGVyLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBHYW1tYVRhYmxlV2l0aFBlcmNlbnRhZ2VDb21wb25lbnQgfSBmcm9tICcuLi8uLi9zaGFyZWQvYWR2YW5jZWQtY29tcG9uZW50L2dhbW1hLXRhYmxlLXdpdGgtcGVyY2VudGFnZS9nYW1tYS10YWJsZS13aXRoLXBlcmNlbnRhZ2UuY29tcG9uZW50JztcbmltcG9ydCB7IEdhbW1TaW5nbGVOdW1iZXJDYXJkQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vc2hhcmVkL2FkdmFuY2VkLWNvbXBvbmVudC9nYW1tLXNpbmdsZS1udW1iZXItY2FyZC9nYW1tLXNpbmdsZS1udW1iZXItY2FyZC5jb21wb25lbnQnO1xuaW1wb3J0IHsgR2FtbWFBZHZhbmNlT3BlcmF0b3JUYWJsZUNvbXBvbmVudCB9IGZyb20gJy4uLy4uL3NoYXJlZC9hZHZhbmNlZC1jb21wb25lbnQvZ2FtbWEtYWR2YW5jZS1vcGVyYXRvci10YWJsZS9nYW1tYS1hZHZhbmNlLW9wZXJhdG9yLXRhYmxlLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBBZHZhbmNlV2lkZ2V0SGVhZGVyRmlsdGVyQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vc2hhcmVkL2FkdmFuY2VkLWNvbXBvbmVudC9hZHZhbmNlLXdpZGdldC1oZWFkZXItZmlsdGVyL2FkdmFuY2Utd2lkZ2V0LWhlYWRlci1maWx0ZXIuY29tcG9uZW50JztcbmltcG9ydCB7IEdhbW1hR2VvQ2hhcnRDb21wb25lbnQgfSBmcm9tICcuLi8uLi9zaGFyZWQvYWR2YW5jZWQtY29tcG9uZW50L2dhbW1hLWdlby1jaGFydC9nYW1tYS1nZW8tY2hhcnQuY29tcG9uZW50JztcbmltcG9ydCB7IEdhbW1hSGVhdENoYXJ0Q29tcG9uZW50IH0gZnJvbSAnLi4vLi4vc2hhcmVkL2FkdmFuY2VkLWNvbXBvbmVudC9nYW1tYS1oZWF0bWFwL2dhbW1hLWhlYXRtYXAuY29tcG9uZW50JztcbmltcG9ydCB7IEJvb2ttYXJrZWRBcHBsaWNhdGlvbkRhdHNzZXRzQ2FsbCB9IGZyb20gJy4vYm9va21hcmtlZC1kYXRhc2V0LWNhbGwuc2VydmljZSc7XG5pbXBvcnQgeyBUb2FzdHJTZXJ2aWNlIH0gZnJvbSAnbmd4LXRvYXN0cic7XG5pbXBvcnQgeyBmb3JrSm9pbiB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgQm9va21hcmtlZFNlcnZpY2UgfSBmcm9tICcuL2Jvb2ttYXJrZWQtbGF5b3V0LnNlcnZpY2UnO1xuLy8gaW1wb3J0IHsgQXBwTG9jYWxTdG9yYWdlIH0gZnJvbSAnLi4vLi4vYXBwbGljYXRpb24tY29udHJvbGxlci90b2tlblN0b3JhZ2Uuc2VydmNlJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnYXBwLWJvb2ttYXJrZWQtdGVtcGxhdGUnLFxuICB0ZW1wbGF0ZVVybDogJy4vYm9va21hcmtlZC10ZW1wbGF0ZS5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2Jvb2ttYXJrZWQtdGVtcGxhdGUuY29tcG9uZW50LnNjc3MnXVxufSlcbmV4cG9ydCBjbGFzcyBCb29rbWFya2VkVGVtcGxhdGVDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xuICBkYXNoYm9yZF9jb250YWluZXI6IGFueSA9IFtdO1xuICBzZWxlY3RlZF93aWR0aDogYW55O1xuICB3aWRnZXRfd2lkdGggPSBbJ3ctZnVsbCcsICd3LTEvMicsICd3LTEvMycsICd3LTEvNCcsICd3LTEvNScsICd3LTEvNiddXG4gIGxvYWRpbmdNb2RhbDogYm9vbGVhbjtcbiAgcGFnZV90aXRsZSA9ICdEYXNoYm9hcmQnO1xuICBkZWZhdWx0U3RhcnREYXRlO1xuICBkZWZhdWx0RW5kRGF0ZTtcbiAgLyoqXG4gICAqIENvbnN0cnVjdG9yXG4gICAqL1xuXG4gIEBWaWV3Q2hpbGQoJ2R5bmFtaWNDb21wb25lbnRDb250YWluZXInLCB7IHJlYWQ6IFZpZXdDb250YWluZXJSZWYgfSlcbiAgZHluYW1pY0NvbXBvbmVudENvbnRhaW5lcjogVmlld0NvbnRhaW5lclJlZjtcbiAgQFZpZXdDaGlsZCgnY29udGFpbmVyJywgeyByZWFkOiBWaWV3Q29udGFpbmVyUmVmIH0pXG4gIGNvbnRhaW5lclJlZjogVmlld0NvbnRhaW5lclJlZjtcbiAgQFZpZXdDaGlsZCgnZHluYW1pY0NvbnRhaW5lcicsIHsgc3RhdGljOiB0cnVlIH0pIGR5bmFtaWNDb250YWluZXI6IEVsZW1lbnRSZWY7XG5cbiAgZHluYW1pY0NvbXBvbmVudFJlZnM6IENvbXBvbmVudFJlZjxhbnk+W10gPSBbXTtcbiAgLy8gZHluYW1pY0NvbXBvbmVudFJlZnM6IENvbXBvbmVudFJlZjxhbnk+W10gPSBbXTtcblxuICBDb21wUmVmczogQ29tcG9uZW50UmVmPGFueT47XG5cbiAgY29tcG9uZW50Q2xhc3NNYXAgPSB7XG4gICAgR2FtbWFBZHZhbmNlQ2hhcnRDb21wb25lbnQsXG4gICAgR2FtbWFUb2RheVByZXZpb3VzQ29tcG9uZW50LFxuICAgIEFwcEFkdmFuY2VIZWFkZXJDb21wb25lbnQsXG4gICAgR2FtbWFUYWJsZVdpdGhQZXJjZW50YWdlQ29tcG9uZW50LFxuICAgIEdhbW1TaW5nbGVOdW1iZXJDYXJkQ29tcG9uZW50LFxuICAgIEdhbW1hQWR2YW5jZU9wZXJhdG9yVGFibGVDb21wb25lbnQsXG4gICAgQWR2YW5jZVdpZGdldEhlYWRlckZpbHRlckNvbXBvbmVudFxuICB9O1xuICBkYXRhU291cmNlTWF0YURhdGE6IGFueSA9IFtdO1xuICBxdWVyeVR5cGUgPSBcIm1vbmdvXCI7XG4gIGRhdGFTZXRNb2RhbDogYW55ID0gW107XG4gIGNvbXBvbmVudENvbmZpZ0RhdGFTb3VyY2U6IGFueSA9IFtdO1xuICBzZWxlc2NlZERhdGFTb3VyY2U6IGFueTtcbiAgZGF0YVNvdXJjZU1vZGFsOiBhbnkgPSB7fTtcbiAgaXNEYXNoQm9hcmRDb250ZW50OiBib29sZWFuID0gZmFsc2U7XG5cbiAgc2VsZWN0ZWRWaWV3Rm9ybUNvbXBvbmVudDogYW55ID0ge307XG4gIGFkZGVkd2lkR2V0Q29uZmlnID0ge1xuICAgIFwiZGlzcGxheVwiOiB0cnVlLFxuICAgIFwid2lkZ2V0VGl0bGVcIjogXCJcIixcbiAgICBcIndpZHRoXCI6IFwiXCIsXG4gICAgXCJoZWlnaHRcIjogXCJcIlxuICB9XG5cblxuICBkYXNoQm9hcmRXaWRnZXRDb25maWc6IGFueSA9IFtcblxuICBdO1xuICBpc1dpZGdldENyZWF0aW9uQ29udGVudDogYm9vbGVhbjtcbiAgc2VsZWN0ZWRXaWR0aDogYW55O1xuICBzZWxlY3RlZEhlaWdodDogYW55O1xuICBuZXdXaWRnZXRJbmRleDogYW55O1xuICBzZWxlY3RlZEluZGV4T2JqRm9yQ2hhcnQ6IGFueSA9IHt9O1xuICBzZWxlY3RlZENvbnRhaW5lck9iamVjdEZvckNoYXJ0OiBhbnkgPSB7fTtcbiAgZGF0YVNldHRhYmxlRGF0YVNvdXJjZTogYW55O1xuICB1bmlxdWVEYXRhU2V0T2JqZWN0ID0ge307XG5cbiAgaXNEYXNoQm9hcmRDb250ZW50VHlwZVZpZXc6IGJvb2xlYW4gPSB0cnVlO1xuICBmaWx0ZXJzOiBhbnk7XG4gIGFsbFdpZGdldEJ5RGF0YXNldCA9IFtdO1xuICBwYWdlVGl0bGU6IGFueTtcbiAgc3RhdGVEYXRhU291cmNlID0gbmV3IE1hcCgpO1xuICBtYWluUGFnZURpdkVsZW1lbnQ6IGFueTtcbiAgY29udGV4dE1lbnVEYXRhU291cmNlOiBhbnkgPSBbXTtcbiAgaGF2aW5nRGF0YU9iamVjdDogYW55ID0ge307XG4gIGlzV2lkZ2V0RmlsdGVyczogYm9vbGVhbjtcbiAgbm9kZXByb3BlcnRpY2VGaWx0ZXJEYXRhU291cmNlOiBhbnk7XG4gIGdsb2JhbERlZmF1bHRGaWx0ZXI6IGFueSA9IHt9O1xuICBwYWdlSWQ6IGFueTtcblxuICBrcGlfYnJlYWRjcnVtYnNfY29udGFpbmVyOiBhbnkgPSBbXTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwdWJsaWMgY29tbW9uU2VydmljZTogQ29tbW9uU2VydmljZSxcbiAgICBwcml2YXRlIGFjdGl2YXRlZFJvdXRlOiBBY3RpdmF0ZWRSb3V0ZSxcbiAgICBwcml2YXRlIHZpZXdDb250YWluZXJSZWY6IFZpZXdDb250YWluZXJSZWYsXG4gICAgcHJpdmF0ZSBjb21wb25lbnRGYWN0b3J5UmVzb2x2ZXI6IENvbXBvbmVudEZhY3RvcnlSZXNvbHZlcixcbiAgICBwcml2YXRlIHNlcnZpY2U6IEJvb2ttYXJrZWRTZXJ2aWNlLFxuICAgIHByaXZhdGUgdG9hc3RyOiBUb2FzdHJTZXJ2aWNlLFxuICAgIHByaXZhdGUgcm91dGVyOiBSb3V0ZXIsXG4gICAgcHJpdmF0ZSBkYXRhc2V0U2VydmljZTogQm9va21hcmtlZEFwcGxpY2F0aW9uRGF0c3NldHNDYWxsLFxuICAgIC8vIHByaXZhdGUgc3RvcmFnZTogQXBwTG9jYWxTdG9yYWdlXG5cblxuICApIHsgfVxuXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuXG4gICAgLy8gdGhpcy5rcGlsaXN0U2VydmljZS5sb2FkZWQkLnBpcGUodGFrZSgxKSwgdGFwKGxvYWRlZCA9PiB7XG4gICAgLy8gICBpZiAoIWxvYWRlZCkge1xuICAgIC8vICAgICB0aGlzLmtwaWxpc3RTZXJ2aWNlLmdldEFsbCgpO1xuICAgIC8vICAgfVxuICAgIC8vIH0pXG4gICAgLy8gKS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgIC8vICAgdGhpcy5rcGlsaXN0U2VydmljZS5lbnRpdGllcyQuc3Vic2NyaWJlKHJlc29sdmVkRGF0YSA9PiB7XG4gICAgLy8gICAgIHRoaXMua3BpX2JyZWFkY3J1bWJzX2NvbnRhaW5lciA9IHJlc29sdmVkRGF0YTtcbiAgICAvLyAgIH0pO1xuICAgIC8vIH0pO1xuXG4gICAgdGhpcy5sb2FkaW5nTW9kYWwgPSB0cnVlO1xuICAgIHRoaXMucGFnZUlkID0gdGhpcy5hY3RpdmF0ZWRSb3V0ZS5zbmFwc2hvdC5kYXRhWydwYWdlSWQnXTtcbiAgICAvLyB0aGlzLnBhZ2VJZCA9IFwiNjE4Mjg5ODktOTFiMS00M2IwLTliZjktNzkwYmFiYmZjMTA3XCI7XG4gICAgdGhpcy5nZXRQYWRlRGF0YVNvdXJjZShmYWxzZSk7XG4gIH1cblxuICBhc3luYyBnZXRGaWx0ZXJzRm9yVGVtcGxhdGUoZmlsdGVyKSB7XG4gICAgdGhpcy5maWx0ZXJzID0gZmlsdGVyO1xuICAgIHRoaXMuZGVmYXVsdFN0YXJ0RGF0ZSA9IGZpbHRlci5zdGFydERhdGU7XG4gICAgdGhpcy5kZWZhdWx0RW5kRGF0ZSA9IGZpbHRlci5lbmREYXRlO1xuICAgIGZpbHRlci5vcGVyYXRpb25GaWx0ZXJbJ3N0YXJ0RGF0ZSddID0gZmlsdGVyLnN0YXJ0RGF0ZTtcbiAgICBmaWx0ZXIub3BlcmF0aW9uRmlsdGVyWydlbmREYXRlJ10gPSBmaWx0ZXIuZW5kRGF0ZTtcbiAgICB0aGlzLmxvYWRpbmdNb2RhbCA9IHRydWU7XG4gICAgdGhpcy5kYXNoQm9hcmRXaWRnZXRDb25maWcgPSBbXTtcbiAgICBhd2FpdCB0aGlzLmdldFBhZGVEYXRhU291cmNlKHRydWUpO1xuICAgIHRoaXMudW5pcXVlRGF0YVNldE9iamVjdCA9IHt9O1xuICAgIGxldCBhcGlDYWxscyA9IFtdO1xuXG4gICAgdGhpcy5hbGxXaWRnZXRCeURhdGFzZXQuZm9yRWFjaCh2aWV3ID0+IHtcbiAgICAgIHZpZXcuZGF0YXNldElkcy5mb3JFYWNoKGlkID0+IHtcbiAgICAgICAgbGV0IGZvdW5kID0gKHRoaXMuZGF0YVNldE1vZGFsIGFzIGFueVtdKS5maW5kKGQgPT4gZC5kYXRhc2V0SWQgPT09IGlkKTtcbiAgICAgICAgaWYgKGZvdW5kKSB7XG4gICAgICAgICAgYXBpQ2FsbHMucHVzaCh0aGlzLmRhdGFzZXRTZXJ2aWNlLmdldERhdGFGcm9tRGF0YVNldChmb3VuZCwgaWQsIGZpbHRlcikpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIFByb21pc2UuYWxsKGFwaUNhbGxzKS50aGVuKCgpID0+IHtcbiAgICAgIHRoaXMuZ2xvYmFsRGVmYXVsdEZpbHRlciA9IGZpbHRlcjtcbiAgICAgIHRoaXMudW5pcXVlRGF0YVNldE9iamVjdCA9IHRoaXMuZGF0YXNldFNlcnZpY2UuZ2V0VW5pcXVlRGF0YVNldE9iamVjdCgpO1xuICAgICAgdGhpcy5jcmVhdGVEaXZFbGVtZW50cyh0aGlzLnVuaXF1ZURhdGFTZXRPYmplY3QsIHRydWUpO1xuICAgICAgdGhpcy5sb2FkaW5nTW9kYWwgPSBmYWxzZTtcbiAgICB9KTtcbiAgfVxuXG4gIGdldFBhZGVEYXRhU291cmNlKGNvbnRleHQpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgdGhpcy5zZXJ2aWNlLmdldEFwcFBhZ2VEZXRhaWxDb25maWcodGhpcy5wYWdlSWQpLnN1YnNjcmliZSh7XG4gICAgICAgIG5leHQ6IChkYXRhOiBhbnkpID0+IHtcblxuICAgICAgICAgIHRoaXMucGFnZVRpdGxlID0gZGF0YS5wYWdlTmFtZTtcbiAgICAgICAgICB0aGlzLmRhc2hCb2FyZFdpZGdldENvbmZpZyA9IGRhdGE7XG5cbiAgICAgICAgICBpZiAoIWNvbnRleHQpIHtcbiAgICAgICAgICAgIHRoaXMuZGVmYXVsdFN0YXJ0RGF0ZSA9IG1vbWVudCgpLnN1YnRyYWN0KCczMCcsICdkYXlzJykuZm9ybWF0KCdZWVlZLU1NLUREJyk7XG4gICAgICAgICAgICB0aGlzLmRlZmF1bHRFbmREYXRlID0gbW9tZW50KCkuc3VidHJhY3QoJzEnLCAnZGF5cycpLmZvcm1hdCgnWVlZWS1NTS1ERCcpO1xuICAgICAgICAgICAgdGhpcy5jcmVhdGVEaXZFbGVtZW50cyh0aGlzLnVuaXF1ZURhdGFTZXRPYmplY3QsIGZhbHNlKTtcbiAgICAgICAgICAgIHRoaXMuZ2V0Q29tcG9uZW50Q29uZmlnU2V0KCk7XG4gICAgICAgICAgICB0aGlzLmxvYWRpbmdNb2RhbCA9IGZhbHNlO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXNvbHZlKCk7XG4gICAgICAgIH0sXG4gICAgICAgIGVycm9yOiAoZXJyOiBhbnkpID0+IHtcbiAgICAgICAgICB0aGlzLnRvYXN0ci5lcnJvcignVW5leHBlY3RlZCBTZXJ2ZXIgRXhjZXB0aW9uLiBQbGVhc2UgY29udGFjdCBTeXN0ZW0gQWRtaW4uJywgJ0Vycm9yJyk7XG4gICAgICAgICAgcmVqZWN0KGVycik7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG5cblxuXG4gIGdldENvbXBvbmVudENvbmZpZ1NldCgpIHtcbiAgICBsZXQgZGF0YXNldCA9IHRoaXMuc2VydmljZS5nZXRBcHBEYXRhc2V0Q29uZmlncygpO1xuICAgIGxldCB2aWV3Q29tcG9uZW50ID0gdGhpcy5zZXJ2aWNlLmdldEFwcFZpZXdDb25maWdzKCk7XG5cbiAgICBmb3JrSm9pbih7XG4gICAgICBkYXRhc2V0Q29uZmlnOiBkYXRhc2V0LFxuICAgICAgdmlld0NvbmZpZzogdmlld0NvbXBvbmVudFxuICAgIH0pLnN1YnNjcmliZSh7XG4gICAgICBuZXh0OiAoKHsgZGF0YXNldENvbmZpZywgdmlld0NvbmZpZyB9KSA9PiB7XG4gICAgICAgIHRoaXMuY29tcG9uZW50Q29uZmlnRGF0YVNvdXJjZSA9IHZpZXdDb25maWc7XG4gICAgICAgIHRoaXMuZGF0YVNldE1vZGFsID0gZGF0YXNldENvbmZpZztcbiAgICAgICAgdGhpcy5hbGxXaWRnZXRCeURhdGFzZXQgPSBbXTtcblxuICAgICAgICB0aGlzLmRhc2hCb2FyZFdpZGdldENvbmZpZy53aWRnZXRzLmZvckVhY2god2lkZ2V0ID0+IHtcbiAgICAgICAgICBsZXQgZGVmYXVsdEZpbHRlcnMgPSB7IG9wZXJhdGlvbkZpbHRlcjogeyBzdGFydERhdGU6IFwiXCIsIGVuZERhdGU6IFwiXCIgfSB9O1xuICAgICAgICAgIHdpZGdldC5maWx0ZXJzLmZpbHRlckl0ZW1zLmZvckVhY2goZWxlbWVudCA9PiB7XG5cbiAgICAgICAgICAgIGlmIChlbGVtZW50LmZpbHRlclR5cGUgPT09ICdkYXRlJyB8fCBlbGVtZW50LmZpbHRlclR5cGUgPT09ICdkYXRldGltZScpIHtcbiAgICAgICAgICAgICAgaWYgKGVsZW1lbnQuZGVmYXVsdEZpbHRlclR5cGUgPT09IFwiZHluYW1pY1wiICYmIGVsZW1lbnQubW9tZW50RnVuY3Rpb24gIT09IFwiXCIgJiYgZWxlbWVudC5kZWZhdWx0RmlsdGVyVmFsdWUgIT09IFwiXCIgJiYgZWxlbWVudC5tb21lbnRGb3JtYXQgIT09IFwiXCIpIHtcbiAgICAgICAgICAgICAgICBsZXQgW2NvdW50LCB1bml0XSA9IGVsZW1lbnQuZGVmYXVsdEZpbHRlclZhbHVlLnNwbGl0KCcsJyk7XG4gICAgICAgICAgICAgICAgaWYgKGVsZW1lbnQuYXBpTmFtZSA9PT0gXCJlbmREYXRlXCIpIHtcbiAgICAgICAgICAgICAgICAgIGlmIChlbGVtZW50LmRpc3BsYXkpIHtcbiAgICAgICAgICAgICAgICAgICAgZGVmYXVsdEZpbHRlcnMub3BlcmF0aW9uRmlsdGVyLmVuZERhdGUgPSBtb21lbnQoKVtlbGVtZW50Lm1vbWVudEZ1bmN0aW9uXShwYXJzZUludChjb3VudCksIHVuaXQpLmZvcm1hdChlbGVtZW50Lm1vbWVudEZvcm1hdCk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZGVmYXVsdEVuZERhdGUgPSBtb21lbnQoKVtlbGVtZW50Lm1vbWVudEZ1bmN0aW9uXShwYXJzZUludChjb3VudCksIHVuaXQpLmZvcm1hdChlbGVtZW50Lm1vbWVudEZvcm1hdCk7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChlbGVtZW50LmFwaU5hbWUgPT09IFwic3RhcnREYXRlXCIpIHtcbiAgICAgICAgICAgICAgICAgIGRlZmF1bHRGaWx0ZXJzLm9wZXJhdGlvbkZpbHRlci5zdGFydERhdGUgPSBtb21lbnQoKVtlbGVtZW50Lm1vbWVudEZ1bmN0aW9uXShwYXJzZUludChjb3VudCksIHVuaXQpLmZvcm1hdChlbGVtZW50Lm1vbWVudEZvcm1hdCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgKHR5cGVvZiBlbGVtZW50LmZpbHRlckRhdGFTb3VyY2VWYWx1ZSA9PT0gXCJzdHJpbmdcIiAmJiBlbGVtZW50LmZpbHRlckRhdGFTb3VyY2VWYWx1ZSAhPT0gXCJcIikgfHxcbiAgICAgICAgICAgICAgICAoQXJyYXkuaXNBcnJheShlbGVtZW50LmZpbHRlckRhdGFTb3VyY2VWYWx1ZSkgJiYgZWxlbWVudC5maWx0ZXJEYXRhU291cmNlVmFsdWUubGVuZ3RoID4gMClcbiAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgaWYgKGVsZW1lbnQub3BlcmF0b3JOYW1lICE9PSBcIlwiKSB7XG4gICAgICAgICAgICAgICAgICBkZWZhdWx0RmlsdGVycy5vcGVyYXRpb25GaWx0ZXJbZWxlbWVudC5vcGVyYXRvck5hbWVdID0gQXJyYXkuaXNBcnJheShlbGVtZW50LmZpbHRlckRhdGFTb3VyY2VWYWx1ZSlcbiAgICAgICAgICAgICAgICAgICAgPyBlbGVtZW50LmZpbHRlckRhdGFTb3VyY2VWYWx1ZVxuICAgICAgICAgICAgICAgICAgICA6IFtlbGVtZW50LmZpbHRlckRhdGFTb3VyY2VWYWx1ZV07XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgIGRlZmF1bHRGaWx0ZXJzLm9wZXJhdGlvbkZpbHRlcltlbGVtZW50LmFwaU5hbWVdID0gZWxlbWVudC5maWx0ZXJEYXRhU291cmNlVmFsdWUuam9pbihcIixcIik7XG5cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgIH0pO1xuICAgICAgICAgIGxldCB1cmxQYXJhbXM6IGFueSA9IGRlZmF1bHRGaWx0ZXJzLm9wZXJhdGlvbkZpbHRlclxuICAgICAgICAgIHVybFBhcmFtc1sncGFnZUlkJ10gPSB0aGlzLnBhZ2VJZFxuICAgICAgICAgIGxldCBuYXZpZ2F0aW9uOiBOYXZpZ2F0aW9uRXh0cmFzID0ge1xuICAgICAgICAgICAgcXVlcnlQYXJhbXM6IHVybFBhcmFtcyxcbiAgICAgICAgICAgIHF1ZXJ5UGFyYW1zSGFuZGxpbmc6IFwibWVyZ2VcIlxuICAgICAgICAgIH07XG4gICAgICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoW10sIG5hdmlnYXRpb24pO1xuXG4gICAgICAgICAgbGV0IGRhdGFzZXRJZHM6IFNldDxzdHJpbmc+ID0gbmV3IFNldCgpO1xuICAgICAgICAgIGxldCB2aWV3SWRzOiBTZXQ8c3RyaW5nPiA9IG5ldyBTZXQoKTtcbiAgICAgICAgICB3aWRnZXQud2lkZ2V0Tm9kZS5mb3JFYWNoKG5vZGUgPT4ge1xuICAgICAgICAgICAgaWYgKG5vZGUubm9kZVByb3BlcnRpZXMuZGlzcGxheSkge1xuICAgICAgICAgICAgICBub2RlLmNvbXBDb25maWcudmlld0NvbmZpZy5mb3JFYWNoKHZpZXcgPT4ge1xuICAgICAgICAgICAgICAgIGRhdGFzZXRJZHMuYWRkKHZpZXcuZGF0YXNldElkKTtcbiAgICAgICAgICAgICAgICB2aWV3SWRzLmFkZCh2aWV3LnZpZXdJZCk7XG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgbm9kZS5jb21wQ29uZmlnLnZpZXdDb25maWcuZm9yRWFjaCh2aWV3ID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLmNvbnRleHRNZW51RGF0YVNvdXJjZS5wdXNoKHsgdmlld0lkOiB2aWV3LnZpZXdJZCwgdmlld05hbWU6IG5vZGUubm9kZVByb3BlcnRpZXMud2lkZ2V0VGl0bGUsIGRpc3BsYXlLZXk6IHZpZXcua3BpQ29uZmlnLmtleVRvUGFzcyB9KVxuICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgdmlld0lkcy5mb3JFYWNoKGVsZW1lbnQgPT4ge1xuICAgICAgICAgICAgbGV0IG9iaiA9IHtcbiAgICAgICAgICAgICAgXCJmaWx0ZXJzXCI6IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkoZGVmYXVsdEZpbHRlcnMpKSxcbiAgICAgICAgICAgICAgXCJrZXlUb1Bhc3NcIjogW10sXG4gICAgICAgICAgICAgIFwiZHJpbGxEb3duVHlwZVwiOiBcIm5hdHVyYWxcIixcbiAgICAgICAgICAgICAgXCJkcmlsbGRvd25Gcm9tXCI6IFwiXCJcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuc3RhdGVEYXRhU291cmNlLnNldChlbGVtZW50LCBvYmopXG4gICAgICAgICAgfSk7XG4gICAgICAgICAgbGV0IG9iaiA9IHtcbiAgICAgICAgICAgIHdpZGdldElkOiB3aWRnZXQud2lkZ2V0SWQsXG4gICAgICAgICAgICBwYWdlSWQ6IHdpZGdldC5wYWdlSWQsXG4gICAgICAgICAgICBmaWx0ZXJzOiBkZWZhdWx0RmlsdGVycyxcbiAgICAgICAgICAgIGRhdGFzZXRJZHM6IGRhdGFzZXRJZHNcbiAgICAgICAgICB9XG4gICAgICAgICAgdGhpcy5hbGxXaWRnZXRCeURhdGFzZXQucHVzaChvYmopO1xuICAgICAgICB9KTtcblxuICAgICAgICBjb25zb2xlLmxvZyh0aGlzLnN0YXRlRGF0YVNvdXJjZSk7XG5cblxuICAgICAgICB0aGlzLnVuaXF1ZURhdGFTZXRPYmplY3QgPSB7fTtcbiAgICAgICAgbGV0IGFwaUNhbGxzID0gW107XG5cblxuICAgICAgICB0aGlzLmFsbFdpZGdldEJ5RGF0YXNldC5mb3JFYWNoKHZpZXcgPT4ge1xuICAgICAgICAgIHZpZXcuZGF0YXNldElkcy5mb3JFYWNoKGlkID0+IHtcbiAgICAgICAgICAgIGxldCBmb3VuZCA9IChkYXRhc2V0Q29uZmlnIGFzIGFueVtdKS5maW5kKGQgPT4gZC5kYXRhc2V0SWQgPT09IGlkKTtcbiAgICAgICAgICAgIGlmIChmb3VuZCkge1xuICAgICAgICAgICAgICBhcGlDYWxscy5wdXNoKHRoaXMuZGF0YXNldFNlcnZpY2UuZ2V0RGF0YUZyb21EYXRhU2V0KGZvdW5kLCBpZCwgdmlldy5maWx0ZXJzKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgICAgICBQcm9taXNlLmFsbChhcGlDYWxscykudGhlbigoKSA9PiB7XG4gICAgICAgICAgdGhpcy51bmlxdWVEYXRhU2V0T2JqZWN0ID0gdGhpcy5kYXRhc2V0U2VydmljZS5nZXRVbmlxdWVEYXRhU2V0T2JqZWN0KCk7XG4gICAgICAgICAgdGhpcy5jcmVhdGVEaXZFbGVtZW50cyh0aGlzLnVuaXF1ZURhdGFTZXRPYmplY3QsIGZhbHNlKTtcbiAgICAgICAgICB0aGlzLmxvYWRpbmdNb2RhbCA9IGZhbHNlO1xuICAgICAgICB9KTtcbiAgICAgIH0pLCBlcnJvcjogKGVycjogYW55KSA9PiB7XG4gICAgICAgIHRoaXMudG9hc3RyLmVycm9yKCdVbmV4cGVjdGVkIFNlcnZlciBFeGNlcHRpb24uIFBsZWFzZSBjb250YWN0IFN5c3RlbSBBZG1pbi4nLCAnRXJyb3InKTtcbiAgICAgIH1cbiAgICB9KVxuICB9XG5cbiAgZ2V0RGF0YVNldCgpIHtcbiAgICB0aGlzLnNlcnZpY2UuZ2V0QXBwRGF0YXNldENvbmZpZ3MoKS5zdWJzY3JpYmUoe1xuICAgICAgbmV4dDogKGRhdGE6IGFueSkgPT4ge1xuICAgICAgICB0aGlzLmRhdGFTZXR0YWJsZURhdGFTb3VyY2UgPSBkYXRhO1xuICAgICAgfSwgZXJyb3I6IChlcnI6IGFueSkgPT4ge1xuICAgICAgICB0aGlzLnRvYXN0ci5lcnJvcignVW5leHBlY3RlZCBTZXJ2ZXIgRXhjZXB0aW9uLiBQbGVhc2UgY29udGFjdCBTeXN0ZW0gQWRtaW4uJywgJ0RhdGFzZXQgQ3JlYXRpb24nKVxuXG4gICAgICB9XG4gICAgfSlcbiAgfVxuXG5cbiAgYXN5bmMgY3JlYXRlRGl2RWxlbWVudHMoZGF0YXNldEJ5SWQsIGNvbnRleHQpIHtcbiAgICBjb25zdCBjb250YWluZXIgPSB0aGlzLmR5bmFtaWNDb250YWluZXIubmF0aXZlRWxlbWVudDtcbiAgICBjb250YWluZXIuaW5uZXJIVE1MID0gXCJcIjtcblxuICAgIHRoaXMuZGFzaEJvYXJkV2lkZ2V0Q29uZmlnLndpZGdldHMuZm9yRWFjaChhc3luYyBkaXYgPT4ge1xuICAgICAgY29uc3Qgcm93RGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgICBsZXQgd19oZWlnaHQgPSAoZGl2LndpZGdldFByb3BlcnRpZXMuaGVpZ2h0ID09IFwiXCIpID8gXCJoLWF1dG9cIiA6ICdoLVsnICsgZGl2LndpZGdldFByb3BlcnRpZXMuaGVpZ2h0ICsgJ10nO1xuICAgICAgcm93RGl2LmNsYXNzTGlzdC5hZGQoZGl2LndpZGdldFByb3BlcnRpZXMud2lkdGgsIHdfaGVpZ2h0KTtcbiAgICAgIGNvbnN0IGZpbHRlckRpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgdGhpcy5sb2FkRmlsdGVyQ29tcG9uZW50KGRpdiwgZmlsdGVyRGl2LCBkaXYuZmlsdGVycy5maWx0ZXJJdGVtcyk7XG4gICAgICByb3dEaXYuYXBwZW5kQ2hpbGQoZmlsdGVyRGl2KTtcblxuICAgICAgaWYgKGRpdi53aWRnZXROb2RlLmxlbmd0aCAhPSAwKSB7XG4gICAgICAgIGxldCBtYWluSXRlbURpdiA9IHJvd0Rpdi5xdWVyeVNlbGVjdG9yKCcuZmxleC5mbGV4LXdyYXAnKTtcblxuXG5cbiAgICAgICAgLy8gSWYgY29udGV4dCBpcyB0cnVlIGFuZCBtYWluSXRlbURpdiBleGlzdHMsIGNsZWFyIGl0cyBjb250ZW50c1xuICAgICAgICBpZiAoY29udGV4dCAmJiBtYWluSXRlbURpdikge1xuICAgICAgICAgIG1haW5JdGVtRGl2LmlubmVySFRNTCA9IFwiXCI7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8gQ3JlYXRlIG1haW5JdGVtRGl2IGlmIGl0IGRvZXNuJ3QgZXhpc3RcbiAgICAgICAgICBtYWluSXRlbURpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgICAgIG1haW5JdGVtRGl2LmNsYXNzTGlzdC5hZGQoXCJmbGV4XCIsIFwiZmxleC13cmFwXCIpO1xuICAgICAgICAgIHJvd0Rpdi5hcHBlbmRDaGlsZChtYWluSXRlbURpdik7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmxvYWRXaWRnZXROb2RlcyhkaXYsIG1haW5JdGVtRGl2LCBkYXRhc2V0QnlJZCk7XG4gICAgICB9XG5cbiAgICAgIGNvbnRhaW5lci5hcHBlbmRDaGlsZChyb3dEaXYpO1xuICAgIH0pO1xuICB9XG4gIGxvYWRXaWRnZXROb2RlcyhkaXY6IGFueSwgbWFpbkl0ZW1EaXY6IGFueSwgZGF0YXNldEJ5SWQ6IGFueSkge1xuICAgIHRoaXMubWFpblBhZ2VEaXZFbGVtZW50ID0gbWFpbkl0ZW1EaXY7XG4gICAgZGl2LndpZGdldE5vZGUuZm9yRWFjaChpdGVtID0+IHtcblxuICAgICAgdGhpcy5sb2FkU2luZ2xlV2lkZ2V0Tm9kZShpdGVtLCBtYWluSXRlbURpdiwgZGF0YXNldEJ5SWQpO1xuICAgIH0pO1xuICB9XG5cblxuICBsb2FkU2luZ2xlV2lkZ2V0Tm9kZShpdGVtOiBhbnksIGNvbnRhaW5lckVsZW1lbnQ6IEhUTUxFbGVtZW50LCBkYXRhc2V0QnlJZDogYW55KSB7XG4gICAgY29uc3QgZWxlbWVudElkID0gYGlkLSR7aXRlbS5pZH1gO1xuICAgIGNvbnN0IGV4aXN0aW5nRWxlbWVudCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoYCMke2VsZW1lbnRJZH1gKTtcbiAgICBpZiAoaXRlbS5ub2RlUHJvcGVydGllcy5kaXNwbGF5ICYmICFleGlzdGluZ0VsZW1lbnQpIHtcbiAgICAgIGNvbnN0IHdfaGVpZ2h0ID0gaXRlbS5ub2RlUHJvcGVydGllcy5oZWlnaHQgPT09IFwiXCIgPyBcImgtYXV0b1wiIDogYGgtWyR7aXRlbS5ub2RlUHJvcGVydGllcy5oZWlnaHR9XWA7XG4gICAgICBjb25zdCBpdGVtRGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgICBpdGVtRGl2LmlkID0gZWxlbWVudElkO1xuICAgICAgaXRlbURpdi5jbGFzc0xpc3QuYWRkKGl0ZW0ubm9kZVByb3BlcnRpZXMud2lkdGgsIHdfaGVpZ2h0LCAnbWItMicpO1xuICAgICAgY29uc3Qgd2lkZ2V0RGl2ID0gdGhpcy5nZXRXaWRnZXRUaXRsZURpdihpdGVtKTtcbiAgICAgIGl0ZW1EaXYuYXBwZW5kQ2hpbGQod2lkZ2V0RGl2KTtcbiAgICAgIGNvbnN0IGlubmVyRGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgICBpbm5lckRpdi5jbGFzc0xpc3QuYWRkKCdyb3VuZGVkJywgJ2p1c3RpZnktY2VudGVyJywgJ2l0ZW1zLWNlbnRlcicsICdib3JkZXInLCAncC0xJywgJ20tMScsICdmbGV4JywgJ2ZsZXgtcm93Jyk7XG4gICAgICBpdGVtLmNvbXBDb25maWcudmlld0NvbmZpZy5mb3JFYWNoKGVsZW1lbnQgPT4ge1xuICAgICAgICBlbGVtZW50LmtwaUNvbmZpZ1snZGF0YVNvdXJjZSddID0gZGF0YXNldEJ5SWRbZWxlbWVudC5kYXRhc2V0SWRdO1xuICAgICAgICBlbGVtZW50LmtwaUNvbmZpZ1snY29udGV4dE1lbnUnXSA9IHRoaXMuY29udGV4dE1lbnVEYXRhU291cmNlO1xuICAgICAgICBlbGVtZW50Wyd0aXRsZVBhcmFtcyddID0gaXRlbS5ub2RlUHJvcGVydGllcy53aWRnZXRQYXJhbXMgfHwgXCJcIjtcbiAgICAgICAgY29uc3QgY29tcF9vYmplY3QgPSB0aGlzLmZpbmRXaWRnZXRCeUlkKHRoaXMuZGFzaEJvYXJkV2lkZ2V0Q29uZmlnLndpZGdldHMsIGl0ZW0uaWQpO1xuICAgICAgICB0aGlzLmxvYWREeW5hbWljQ29tcG9uZW50KGVsZW1lbnQsIGNvbXBfb2JqZWN0LCBpdGVtRGl2KTtcbiAgICAgIH0pO1xuICAgICAgY29udGFpbmVyRWxlbWVudC5hcHBlbmRDaGlsZChpdGVtRGl2KTtcbiAgICAgIGlmICghdGhpcy5pc0Rhc2hCb2FyZENvbnRlbnRUeXBlVmlldykge1xuICAgICAgICBpdGVtRGl2LmFwcGVuZENoaWxkKGlubmVyRGl2KTtcbiAgICAgIH1cblxuICAgIH0gZWxzZSBpZiAoZXhpc3RpbmdFbGVtZW50KSB7XG4gICAgICBjb25zdCBpdGVtRGl2ID0gZXhpc3RpbmdFbGVtZW50IGFzIEhUTUxFbGVtZW50O1xuICAgICAgaXRlbURpdi5pbm5lckhUTUwgPSAnJztcbiAgICAgIGNvbnN0IHdpZGdldERpdiA9IHRoaXMuZ2V0V2lkZ2V0VGl0bGVEaXYoaXRlbSk7XG4gICAgICBpdGVtRGl2LmFwcGVuZENoaWxkKHdpZGdldERpdik7XG4gICAgICBpdGVtLmNvbXBDb25maWcudmlld0NvbmZpZy5mb3JFYWNoKGVsZW1lbnQgPT4ge1xuICAgICAgICBlbGVtZW50LmtwaUNvbmZpZ1snZGF0YVNvdXJjZSddID0gZGF0YXNldEJ5SWRbZWxlbWVudC5kYXRhc2V0SWRdO1xuICAgICAgICBlbGVtZW50LmtwaUNvbmZpZ1snY29udGV4dE1lbnUnXSA9IHRoaXMuY29udGV4dE1lbnVEYXRhU291cmNlO1xuICAgICAgICBlbGVtZW50Wyd0aXRsZVBhcmFtcyddID0gaXRlbS5ub2RlUHJvcGVydGllcy53aWRnZXRQYXJhbXMgfHwgXCJcIjtcbiAgICAgICAgY29uc3QgY29tcF9vYmplY3QgPSB0aGlzLmZpbmRXaWRnZXRCeUlkKHRoaXMuZGFzaEJvYXJkV2lkZ2V0Q29uZmlnLndpZGdldHMsIGl0ZW0uaWQpO1xuICAgICAgICB0aGlzLmxvYWREeW5hbWljQ29tcG9uZW50KGVsZW1lbnQsIGNvbXBfb2JqZWN0LCBpdGVtRGl2KTtcbiAgICAgIH0pO1xuXG4gICAgICBpZiAoIXRoaXMuaXNEYXNoQm9hcmRDb250ZW50VHlwZVZpZXcpIHtcbiAgICAgICAgY29uc3QgaW5uZXJEaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICAgICAgaW5uZXJEaXYuY2xhc3NMaXN0LmFkZCgncm91bmRlZCcsICdqdXN0aWZ5LWNlbnRlcicsICdpdGVtcy1jZW50ZXInLCAnYm9yZGVyJywgJ3AtMScsICdtLTEnLCAnZmxleCcsICdmbGV4LXJvdycpO1xuICAgICAgICBpdGVtRGl2LmFwcGVuZENoaWxkKGlubmVyRGl2KTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBnZXRXaWRnZXRUaXRsZURpdihpdGVtKSB7XG4gICAgY29uc3Qgd2lkZ2V0RGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgd2lkZ2V0RGl2LmNsYXNzTGlzdC5hZGQoJ2ZsZXgnLCAnaXRlbXMtY2VudGVyJywgJ2p1c3RpZnktYmV0d2VlbicsICdmb250LWJvbGQnLCAndGV4dC1tZCcsICd0ZXh0LWdyYXktOTAwJywgJ2Rhcms6dGV4dC13aGl0ZScsICdib3JkZXItYicsICdwLTMnLCAnYmctZ3JheS04MDAnLCAnbXgtMicsICdyb3VuZGVkLXQtbGcnKTtcbiAgICBjb25zdCB0aXRsZURpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgIGNvbnN0IHBhcmFtcyA9IGl0ZW0ubm9kZVByb3BlcnRpZXMud2lkZ2V0UGFyYW1zIHx8IFwiXCI7XG4gICAgdGl0bGVEaXYuaW5uZXJUZXh0ID0gaXRlbS5ub2RlUHJvcGVydGllcy53aWRnZXRUaXRsZSArIHBhcmFtcztcbiAgICB3aWRnZXREaXYuYXBwZW5kQ2hpbGQodGl0bGVEaXYpO1xuXG4gICAgY29uc3Qgc2VhcmNoQ29udGFpbmVyRGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgc2VhcmNoQ29udGFpbmVyRGl2LmNsYXNzTGlzdC5hZGQoJ2ZsZXgnLCAnaXRlbXMtY2VudGVyJywgJ21sLWF1dG8nLCAnc3BhY2UteC0yJywgJ2p1c3RpZnktZW5kJyk7IC8vIG1sLWF1dG8gcHVzaGVzIGNvbnRlbnQgdG8gdGhlIHJpZ2h0IHNpZGVcblxuICAgIC8vIENoZWNrIGZvciB3aWRnZXQgZmlsdGVyXG4gICAgaWYgKGl0ZW0ubm9kZVByb3BlcnRpZXMuaXNXaWRnZXRGaWx0ZXIpIHtcbiAgICAgIGNvbnN0IHNlYXJjaEJ1dHRvbiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2J1dHRvbicpO1xuICAgICAgc2VhcmNoQnV0dG9uLmlubmVyVGV4dCA9ICdGaWx0ZXInO1xuICAgICAgc2VhcmNoQnV0dG9uLmNsYXNzTGlzdC5hZGQoJ3B4LTMnLCAncHktMS41JywgJ2JnLWJsdWUtNjAwJywgJ21yLTInLCAndGV4dC13aGl0ZScsICdyb3VuZGVkJywgJ2hvdmVyOmJnLWJsdWUtNzAwJyk7XG4gICAgICB0aGlzLm5vZGVwcm9wZXJ0aWNlRmlsdGVyRGF0YVNvdXJjZSA9IHt9O1xuICAgICAgdGhpcy5ub2RlcHJvcGVydGljZUZpbHRlckRhdGFTb3VyY2VbJ3ZpZXdDb25maWcnXSA9IGl0ZW07XG4gICAgICB0aGlzLm5vZGVwcm9wZXJ0aWNlRmlsdGVyRGF0YVNvdXJjZVsnaGF2aW5nQ29uZmlnJ10gPSBbXTtcblxuICAgICAgc2VhcmNoQnV0dG9uLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgKCkgPT4ge1xuICAgICAgICB0aGlzLmlzV2lkZ2V0RmlsdGVycyA9IHRydWU7XG4gICAgICAgIGxldCBmaWx0ZVByb3BlcnRpY2UgPSBbXTtcbiAgICAgICAgaXRlbS5jb21wQ29uZmlnLnZpZXdDb25maWcuZm9yRWFjaChlbGVtZW50ID0+IHtcbiAgICAgICAgICBsZXQga2V5X25hbWUgPSB0aGlzLnVuaXF1ZURhdGFTZXRPYmplY3RbZWxlbWVudC5kYXRhc2V0SWRdWzBdO1xuICAgICAgICAgIE9iamVjdC5rZXlzKGtleV9uYW1lKS5mb3JFYWNoKGtleSA9PiB7XG4gICAgICAgICAgICBpZiAoIWZpbHRlUHJvcGVydGljZS5pbmNsdWRlcyhrZXkpKSB7XG4gICAgICAgICAgICAgIGZpbHRlUHJvcGVydGljZS5wdXNoKGtleSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgICAgICBmaWx0ZVByb3BlcnRpY2UuZm9yRWFjaChlbGVtZW50ID0+IHtcbiAgICAgICAgICBsZXQgb2JqID0ge1xuICAgICAgICAgICAgY29sdW1uTmFtZTogZWxlbWVudCxcbiAgICAgICAgICAgIGRhdGFUeXBlOiBcImZsb2F0XCIsXG4gICAgICAgICAgICBvcGVyYXRvcjogXCJcIixcbiAgICAgICAgICAgIHZhbHVlOiBcIlwiLFxuICAgICAgICAgIH1cbiAgICAgICAgICB0aGlzLm5vZGVwcm9wZXJ0aWNlRmlsdGVyRGF0YVNvdXJjZS5oYXZpbmdDb25maWcucHVzaChvYmopXG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgICBzZWFyY2hDb250YWluZXJEaXYuYXBwZW5kQ2hpbGQoc2VhcmNoQnV0dG9uKVxuICAgIH1cblxuICAgIC8vIENoZWNrIGZvciBpdGVtIGZpbHRlcklkXG4gICAgaWYgKGl0ZW0uZmlsdGVySWQpIHtcbiAgICAgIHRoaXMubm9kZXByb3BlcnRpY2VGaWx0ZXJEYXRhU291cmNlID0ge307XG4gICAgICB0aGlzLm5vZGVwcm9wZXJ0aWNlRmlsdGVyRGF0YVNvdXJjZVsndmlld0NvbmZpZyddID0gaXRlbTtcbiAgICAgIHRoaXMubm9kZXByb3BlcnRpY2VGaWx0ZXJEYXRhU291cmNlWydoYXZpbmdDb25maWcnXSA9IFtdO1xuXG4gICAgICB0aGlzLnNlcnZpY2UuZ2V0QXBwRmlsdGVyQ29uZmlnKGl0ZW0uZmlsdGVySWQpLnN1YnNjcmliZSh7XG4gICAgICAgIG5leHQ6IChkYXRhOiBhbnkpID0+IHtcbiAgICAgICAgICBjb25zdCBmaWx0ZXJEaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICAgICAgICB0aGlzLmxvYWRXaWRnZXRGaWx0ZXJDb21wb25lbnQoaXRlbSwgd2lkZ2V0RGl2LCBkYXRhLmZpbHRlckl0ZW1zLCBpdGVtKTtcbiAgICAgICAgfSwgZXJyb3I6IChlcnI6IGFueSkgPT4ge1xuXG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cblxuICAgIC8vIENoZWNrIGZvciBub2RlIGZpbHRlcnNcbiAgICBpZiAoaXRlbS5ub2RlUHJvcGVydGllcy5ub2RlZmlsdGVycyAmJiBpdGVtLm5vZGVQcm9wZXJ0aWVzLm5vZGVmaWx0ZXJzLmxlbmd0aCAhPT0gMCkge1xuICAgICAgaXRlbS5ub2RlUHJvcGVydGllcy5ub2RlZmlsdGVycy5mb3JFYWNoKGZpbHRlciA9PiB7XG4gICAgICAgIGNvbnN0IGZpbHRlckRpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgICBmaWx0ZXJEaXYuY2xhc3NMaXN0LmFkZCgnZmxleCcsICdpdGVtcy1jZW50ZXInKTtcblxuICAgICAgICBpZiAoZmlsdGVyLmlucHV0X3R5cGUgPT09ICd0ZXh0Jykge1xuICAgICAgICAgIGNvbnN0IHRleHRCb3ggPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdpbnB1dCcpO1xuICAgICAgICAgIHRleHRCb3gudHlwZSA9ICd0ZXh0JztcbiAgICAgICAgICB0ZXh0Qm94LnBsYWNlaG9sZGVyID0gYEVudGVyICR7ZmlsdGVyLmxvY2FsX2NvbHVtbn1gO1xuICAgICAgICAgIHRleHRCb3guY2xhc3NMaXN0LmFkZCgncHgtMicsICdweS0xLjUnLCAncm91bmRlZCcsICdib3JkZXInLCAnbXItMScsICdib3JkZXItZ3JheS01MDAnLCAndGV4dC1ncmF5LTkwMCcsICdkYXJrOmJnLWdyYXktNzAwJywgJ2Rhcms6dGV4dC13aGl0ZScpO1xuXG4gICAgICAgICAgY29uc3Qgc2VhcmNoQnV0dG9uID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYnV0dG9uJyk7XG4gICAgICAgICAgc2VhcmNoQnV0dG9uLmlubmVyVGV4dCA9ICdTZWFyY2gnO1xuICAgICAgICAgIHNlYXJjaEJ1dHRvbi5jbGFzc0xpc3QuYWRkKCdweC0zJywgJ3B5LTEuNScsICdiZy1ibHVlLTYwMCcsICdtci0yJywgJ3RleHQtd2hpdGUnLCAncm91bmRlZCcsICdob3ZlcjpiZy1ibHVlLTcwMCcpO1xuXG4gICAgICAgICAgY29uc3Qgc2VwYXJlcm90QnV0dG9uID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgICAgICAgc2VwYXJlcm90QnV0dG9uLmlubmVySFRNTCA9ICd8JztcblxuICAgICAgICAgIHNlYXJjaEJ1dHRvbi5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsICgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHNlYXJjaFRlcm0gPSB0ZXh0Qm94LnZhbHVlO1xuICAgICAgICAgICAgdGhpcy5nZXRSZWFyY2hSZXN1bHRGcm9tSW5wdXRCb3goc2VhcmNoVGVybSwgaXRlbSwgZmlsdGVyKTtcbiAgICAgICAgICB9KTtcblxuICAgICAgICAgIGZpbHRlckRpdi5hcHBlbmRDaGlsZCh0ZXh0Qm94KTtcbiAgICAgICAgICBmaWx0ZXJEaXYuYXBwZW5kQ2hpbGQoc2VhcmNoQnV0dG9uKTtcbiAgICAgICAgICBmaWx0ZXJEaXYuYXBwZW5kQ2hpbGQoc2VwYXJlcm90QnV0dG9uKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHNlYXJjaENvbnRhaW5lckRpdi5hcHBlbmRDaGlsZChmaWx0ZXJEaXYpO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgd2lkZ2V0RGl2LmFwcGVuZENoaWxkKHNlYXJjaENvbnRhaW5lckRpdik7XG4gICAgcmV0dXJuIHdpZGdldERpdjtcbiAgfVxuXG5cblxuICBsb2FkRHluYW1pY0NvbXBvbmVudChkYXRhLCBpbmRleE9iaiwgY29udGFpbmVyRWxlbWVudCk6IGFueSB7XG4gICAgY29uc3QgY29tcG9uZW50Q2xhc3MgPSB0aGlzLmNvbXBvbmVudENsYXNzTWFwW2RhdGEua3BpQ29uZmlnLmNvbXBvbmVudE5hbWVdO1xuICAgIHRoaXMuQ29tcFJlZnMgPSB0aGlzLnZpZXdDb250YWluZXJSZWYuY3JlYXRlQ29tcG9uZW50KGNvbXBvbmVudENsYXNzKTtcbiAgICBjb25zdCBkeW5hbWljQ29tcG9uZW50SW5zdGFuY2UgPSB0aGlzLkNvbXBSZWZzLmluc3RhbmNlO1xuXG4gICAgZHluYW1pY0NvbXBvbmVudEluc3RhbmNlLmNoYXJ0RGF0YVNvdXJjZSA9IGRhdGE7XG4gICAgZHluYW1pY0NvbXBvbmVudEluc3RhbmNlLmtwaV9uYW1lID0gXCJcIjtcbiAgICBpZiAoZGF0YS5rcGlDb25maWcuY29tcG9uZW50TmFtZSA9PSBcIkdhbW1hQWR2YW5jZU9wZXJhdG9yVGFibGVDb21wb25lbnRcIikge1xuICAgICAgZHluYW1pY0NvbXBvbmVudEluc3RhbmNlLm9Sb3dDbGljay5zdWJzY3JpYmUoKHZhbHVlOiBzdHJpbmcpID0+IHtcbiAgICAgICAgdGhpcy5nZXRSb3dDbGljayh2YWx1ZSk7XG4gICAgICB9KTtcbiAgICAgIGR5bmFtaWNDb21wb25lbnRJbnN0YW5jZS5vbnJpZ2h0Q2xpY2tDb250ZXh0U2VsZWN0aW9uLnN1YnNjcmliZSgodmFsdWU6IHN0cmluZykgPT4ge1xuICAgICAgICB0aGlzLmdldENvbnRleHRDbGljayh2YWx1ZSk7XG4gICAgICB9KTtcbiAgICB9XG4gICAgLy8gaW5kZXhPYmouY29tcENvbmZpZy5keW5hbWljQ29tcG9uZW50UmVmcy5wdXNoKHRoaXMuQ29tcFJlZnMpO1xuICAgIGNvbnN0IGNzc0NsYXNzID0gXCJ3LWZ1bGxcIjtcbiAgICB0aGlzLkNvbXBSZWZzLmxvY2F0aW9uLm5hdGl2ZUVsZW1lbnQuY2xhc3NMaXN0LmFkZChjc3NDbGFzcyk7XG4gICAgY29udGFpbmVyRWxlbWVudC5hcHBlbmRDaGlsZCh0aGlzLkNvbXBSZWZzLmxvY2F0aW9uLm5hdGl2ZUVsZW1lbnQpO1xuICB9XG5cbiAgbG9hZEZpbHRlckNvbXBvbmVudChpbmRleE9iaiwgY29udGFpbmVyRWxlbWVudCwgZmlsdGVySXRlbXMpIHtcbiAgICAvLyBsZXQgdXNlck5hbWUgPSB0aGlzLnN0b3JhZ2UuZ2V0KCd1c2VyX25hbWUnKVxuICAgIGxldCBzZWxlY3RlZERhdGVzID0geyBzdGFydERhdGU6IHRoaXMuZGVmYXVsdFN0YXJ0RGF0ZSwgZW5kRGF0ZTogdGhpcy5kZWZhdWx0RW5kRGF0ZSB9XG4gICAgY29uc3QgY29tcG9uZW50Q2xhc3MgPSB0aGlzLmNvbXBvbmVudENsYXNzTWFwWydBcHBBZHZhbmNlSGVhZGVyQ29tcG9uZW50J107XG4gICAgdGhpcy5Db21wUmVmcyA9IHRoaXMudmlld0NvbnRhaW5lclJlZi5jcmVhdGVDb21wb25lbnQoY29tcG9uZW50Q2xhc3MpO1xuICAgIGNvbnN0IGR5bmFtaWNDb21wb25lbnRJbnN0YW5jZSA9IHRoaXMuQ29tcFJlZnMuaW5zdGFuY2U7XG4gICAgZHluYW1pY0NvbXBvbmVudEluc3RhbmNlLnNlbGVjdGVkRGF0ZXMgPSBzZWxlY3RlZERhdGVzO1xuICAgIGR5bmFtaWNDb21wb25lbnRJbnN0YW5jZS5maWx0ZXJJdGVtcyA9IGZpbHRlckl0ZW1zO1xuICAgIGR5bmFtaWNDb21wb25lbnRJbnN0YW5jZS5wYWdlVGl0bGUgPSB0aGlzLnBhZ2VUaXRsZTtcbiAgICBkeW5hbWljQ29tcG9uZW50SW5zdGFuY2UuYnJlYWRfY3J1bWJzX2NvbnRhaW5lciA9IHRoaXMua3BpX2JyZWFkY3J1bWJzX2NvbnRhaW5lcjtcbiAgICAvLyBkeW5hbWljQ29tcG9uZW50SW5zdGFuY2UuaXNFZGl0QnV0dG9uID0gKHVzZXJOYW1lICYmIHVzZXJOYW1lID09IFwiYWRtaW5cIikgPyB0cnVlIDogZmFsc2U7XG4gICAgZHluYW1pY0NvbXBvbmVudEluc3RhbmNlLmlzQWR2YW5jZUJ1dHRvbiA9IHRydWU7XG4gICAgZHluYW1pY0NvbXBvbmVudEluc3RhbmNlLmdldEZpbHRlclBhZ2VDb25maWcuc3Vic2NyaWJlKCh2YWx1ZTogc3RyaW5nKSA9PiB7XG4gICAgICB0aGlzLmdldEZpbHRlcnNGb3JUZW1wbGF0ZSh2YWx1ZSk7XG4gICAgfSk7XG5cbiAgICBpbmRleE9iai5jb21wQ29uZmlnLmR5bmFtaWNDb21wb25lbnRSZWZzLnB1c2godGhpcy5Db21wUmVmcyk7XG4gICAgY29uc3QgY3NzQ2xhc3MgPSBcInctZnVsbFwiO1xuICAgIHRoaXMuQ29tcFJlZnMubG9jYXRpb24ubmF0aXZlRWxlbWVudC5jbGFzc0xpc3QuYWRkKGNzc0NsYXNzKTtcbiAgICBjb250YWluZXJFbGVtZW50LmFwcGVuZENoaWxkKHRoaXMuQ29tcFJlZnMubG9jYXRpb24ubmF0aXZlRWxlbWVudCk7XG4gIH1cbiAgbG9hZFdpZGdldEZpbHRlckNvbXBvbmVudChpbmRleE9iaiwgY29udGFpbmVyRWxlbWVudCwgZmlsdGVySXRlbXMsIHZpZXdJZHMpIHtcbiAgICBsZXQgc2VsZWN0ZWREYXRlcyA9IHsgc3RhcnREYXRlOiB0aGlzLmRlZmF1bHRTdGFydERhdGUsIGVuZERhdGU6IHRoaXMuZGVmYXVsdEVuZERhdGUgfVxuICAgIGNvbnN0IGNvbXBvbmVudENsYXNzID0gdGhpcy5jb21wb25lbnRDbGFzc01hcFsnQWR2YW5jZVdpZGdldEhlYWRlckZpbHRlckNvbXBvbmVudCddO1xuICAgIHRoaXMuQ29tcFJlZnMgPSB0aGlzLnZpZXdDb250YWluZXJSZWYuY3JlYXRlQ29tcG9uZW50KGNvbXBvbmVudENsYXNzKTtcbiAgICBjb25zdCBkeW5hbWljQ29tcG9uZW50SW5zdGFuY2UgPSB0aGlzLkNvbXBSZWZzLmluc3RhbmNlO1xuICAgIGR5bmFtaWNDb21wb25lbnRJbnN0YW5jZS5zZWxlY3RlZERhdGVzID0gc2VsZWN0ZWREYXRlcztcbiAgICBkeW5hbWljQ29tcG9uZW50SW5zdGFuY2UuZmlsdGVySXRlbXMgPSBmaWx0ZXJJdGVtcztcbiAgICBkeW5hbWljQ29tcG9uZW50SW5zdGFuY2Uudmlld0lkcyA9IHZpZXdJZHM7XG5cbiAgICBkeW5hbWljQ29tcG9uZW50SW5zdGFuY2UuZ2V0V2lkZ2V0RmlsdGVyQ29uZmlnLnN1YnNjcmliZSgodmFsdWU6IHN0cmluZykgPT4ge1xuICAgICAgdGhpcy5nZXRXaWRnZXRGaWx0ZXJGb3JUZW1wbGF0ZSh2YWx1ZSk7XG4gICAgfSk7XG5cbiAgICBpbmRleE9iai5jb21wQ29uZmlnLmR5bmFtaWNDb21wb25lbnRSZWZzLnB1c2godGhpcy5Db21wUmVmcyk7XG4gICAgY29udGFpbmVyRWxlbWVudC5hcHBlbmRDaGlsZCh0aGlzLkNvbXBSZWZzLmxvY2F0aW9uLm5hdGl2ZUVsZW1lbnQpO1xuICB9XG5cbiAgLy8gZm9yIGNvbnRleHQgbWVudSBmdW5jdGlvblxuICBnZXRDb250ZXh0Q2xpY2soZXZlbnQpIHtcbiAgICBjb25zdCBzdGF0ZURhdGEgPSBBcnJheS5mcm9tKHRoaXMuc3RhdGVEYXRhU291cmNlLmtleXMoKSk7XG4gICAgY29uc3QgY3VycmVudFZpZXdJbmRleCA9IHN0YXRlRGF0YS5pbmRleE9mKGV2ZW50LnZpZXdJZCk7XG4gICAgY29uc3QgZGVsZXRlZFZpZXdJZHMgPSBbXTtcbiAgICBmb3IgKGxldCBpID0gY3VycmVudFZpZXdJbmRleCArIDE7IGkgPCBzdGF0ZURhdGEubGVuZ3RoOyBpKyspIHtcbiAgICAgIGRlbGV0ZWRWaWV3SWRzLnB1c2goc3RhdGVEYXRhW2ldKVxuICAgIH1cbiAgICB0aGlzLmxvYWRpbmdNb2RhbCA9IHRydWU7XG4gICAgdGhpcy5kYXNoQm9hcmRXaWRnZXRDb25maWcud2lkZ2V0cy5mb3JFYWNoKGVsZW1lbnQgPT4ge1xuICAgICAgZWxlbWVudC53aWRnZXROb2RlLmZvckVhY2goKG5vZGU6IGFueSwgbm9kZUluZGV4OiBudW1iZXIpID0+IHtcbiAgICAgICAgaWYgKHRoaXMuZ2V0RWxlbWVudE9mQ3VycmVudFZpZXcobm9kZSwgZXZlbnQuZHJpbGxkb3duVG8pKSB7XG4gICAgICAgICAgbGV0IHZpZXcgPSBlbGVtZW50LndpZGdldE5vZGVbbm9kZUluZGV4XTtcbiAgICAgICAgICBsZXQgYXBpQ2FsbHMgPSBbXTtcbiAgICAgICAgICBsZXQgYXBwbGllZEZpbHRlcnMgPSB0aGlzLmdldFNldE9wZXJhdG9yRmlsdGVyKGV2ZW50LCB0aGlzLnN0YXRlRGF0YVNvdXJjZS5nZXQoZXZlbnQuZHJpbGxkb3duRnJvbSkpO1xuICAgICAgICAgIHZpZXcuY29tcENvbmZpZy52aWV3Q29uZmlnLmZvckVhY2goY29udGVudFZpZXcgPT4ge1xuICAgICAgICAgICAgbGV0IGZvdW5kID0gKHRoaXMuZGF0YVNldE1vZGFsIGFzIGFueVtdKS5maW5kKGQgPT4gZC5kYXRhc2V0SWQgPT09IGNvbnRlbnRWaWV3LmRhdGFzZXRJZCk7XG4gICAgICAgICAgICBpZiAoZm91bmQpIHtcbiAgICAgICAgICAgICAgYXBpQ2FsbHMucHVzaCh0aGlzLmRhdGFzZXRTZXJ2aWNlLmdldERhdGFGcm9tRGF0YVNldChmb3VuZCwgY29udGVudFZpZXcuZGF0YXNldElkLCBhcHBsaWVkRmlsdGVycykpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICAgIFByb21pc2UuYWxsKGFwaUNhbGxzKS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMudW5pcXVlRGF0YVNldE9iamVjdCA9IHRoaXMuZGF0YXNldFNlcnZpY2UuZ2V0VW5pcXVlRGF0YVNldE9iamVjdCgpO1xuICAgICAgICAgICAgZm9yIChsZXQgZW50cnkgb2YgZGVsZXRlZFZpZXdJZHMpIHtcbiAgICAgICAgICAgICAgZWxlbWVudC53aWRnZXROb2RlLmZvckVhY2godmlld1ZhbHVlID0+IHtcbiAgICAgICAgICAgICAgICB2aWV3VmFsdWUuY29tcENvbmZpZy52aWV3Q29uZmlnLmZvckVhY2godmlld0lkID0+IHtcbiAgICAgICAgICAgICAgICAgIGlmICh2aWV3SWQudmlld0lkID09IGVudHJ5KSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGV4aXN0cyA9IHRoaXMuY29udGV4dE1lbnVEYXRhU291cmNlLnNvbWUoaXRlbSA9PiBpdGVtLnZpZXdJZCA9PT0gdmlld0lkLnZpZXdJZCk7XG4gICAgICAgICAgICAgICAgICAgIGlmICghZXhpc3RzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgLy8gSWYgbm90IGV4aXN0cywgcHVzaCB0aGUgbmV3IG9iamVjdFxuICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY29udGV4dE1lbnVEYXRhU291cmNlLnB1c2goe1xuICAgICAgICAgICAgICAgICAgICAgICAgdmlld0lkOiB2aWV3SWQudmlld0lkLFxuICAgICAgICAgICAgICAgICAgICAgICAgdmlld05hbWU6IG5vZGUubm9kZVByb3BlcnRpZXMud2lkZ2V0VGl0bGUsXG4gICAgICAgICAgICAgICAgICAgICAgICBkaXNwbGF5S2V5OiB2aWV3SWQua3BpQ29uZmlnLmtleVRvUGFzc1xuICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc3RhdGVEYXRhU291cmNlLmRlbGV0ZShlbnRyeSlcbiAgICAgICAgICAgICAgICAgICAgdmlld1ZhbHVlLm5vZGVQcm9wZXJ0aWVzWydkaXNwbGF5J10gPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcHJlZml4ZWRJZCA9IGBpZC0ke3ZpZXdWYWx1ZS5pZH1gO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBlbGVtZW50VG9IaWRlID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihgIyR7cHJlZml4ZWRJZH1gKSBhcyBIVE1MRWxlbWVudDsgLy8gQ2FzdCB0byBIVE1MRWxlbWVudFxuICAgICAgICAgICAgICAgICAgICBpZiAoZWxlbWVudFRvSGlkZSkge1xuICAgICAgICAgICAgICAgICAgICAgIGVsZW1lbnRUb0hpZGUucmVtb3ZlKCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMuY29udGV4dE1lbnVEYXRhU291cmNlID0gdGhpcy5jb250ZXh0TWVudURhdGFTb3VyY2UuZmlsdGVyKGUgPT4gZS5kaXNwbGF5S2V5ICE9PSBldmVudC5rZXlUb1Bhc3MpO1xuICAgICAgICAgICAgdmlldy5jb21wQ29uZmlnLnZpZXdDb25maWcuZm9yRWFjaCh2YWwgPT4ge1xuICAgICAgICAgICAgICBsZXQgb2JqID0ge1xuICAgICAgICAgICAgICAgIFwiZmlsdGVyc1wiOiBhcHBsaWVkRmlsdGVycyxcbiAgICAgICAgICAgICAgICBcImtleVRvUGFzc1wiOiB0aGlzLnVwZGF0ZU9wZXJhdG9yRGF0YShldmVudC5rZXlUb1Bhc3MsIGV2ZW50LmRhdGEpLFxuICAgICAgICAgICAgICAgIFwiZHJpbGxEb3duVHlwZVwiOiBldmVudC5kcmlsbERvd25UeXBlLFxuICAgICAgICAgICAgICAgIFwiZHJpbGxkb3duRnJvbVwiOiBldmVudC5kcmlsbGRvd25Gcm9tXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgdGhpcy5zdGF0ZURhdGFTb3VyY2Uuc2V0KHZhbFsndmlld0lkJ10sIG9iailcblxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB2aWV3Lm5vZGVQcm9wZXJ0aWVzWydkaXNwbGF5J10gPSB0cnVlO1xuICAgICAgICAgICAgdmlldy5ub2RlUHJvcGVydGllc1snd2lkZ2V0UGFyYW1zJ10gPSBldmVudC50YWJsZVRpdGxlO1xuICAgICAgICAgICAgY29uc3QgcHJlZml4ZWRJZCA9IGBpZC0ke3ZpZXcuaWR9YDtcbiAgICAgICAgICAgIGNvbnN0IGNvbnRhaW5lckVsZW1lbnQgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKGAjJHtwcmVmaXhlZElkfWApIGFzIEhUTUxFbGVtZW50O1xuICAgICAgICAgICAgdGhpcy5sb2FkU2luZ2xlV2lkZ2V0Tm9kZSh2aWV3LCB0aGlzLm1haW5QYWdlRGl2RWxlbWVudCwgdGhpcy51bmlxdWVEYXRhU2V0T2JqZWN0KTtcbiAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICB0aGlzLnNjcm9sbFRvQm90dG9tKHRoaXMubWFpblBhZ2VEaXZFbGVtZW50KTtcbiAgICAgICAgICAgIH0sIDIwMCk7XG5cblxuICAgICAgICAgICAgbGV0IG5hdmlnYXRpb246IE5hdmlnYXRpb25FeHRyYXMgPSB7XG4gICAgICAgICAgICAgIHF1ZXJ5UGFyYW1zOiBhcHBsaWVkRmlsdGVyc1snb3BlcmF0aW9uRmlsdGVyJ10sXG4gICAgICAgICAgICAgIHF1ZXJ5UGFyYW1zSGFuZGxpbmc6IFwibWVyZ2VcIlxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFtdLCBuYXZpZ2F0aW9uKTtcbiAgICAgICAgICB9KTtcblxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIG5vZGUubm9kZVByb3BlcnRpZXNbJ2Rpc3BsYXknXSA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxuICAvLyBmb3Igcm93IGNsaWNrIGZ1bmN0aW9uXG4gIGdldFJvd0NsaWNrKGV2ZW50KSB7XG5cbiAgICBjb25zdCBzdGF0ZURhdGEgPSBBcnJheS5mcm9tKHRoaXMuc3RhdGVEYXRhU291cmNlLmtleXMoKSk7XG4gICAgY29uc3QgY3VycmVudFZpZXdJbmRleCA9IHN0YXRlRGF0YS5pbmRleE9mKGV2ZW50LnZpZXdJZCk7XG4gICAgY29uc3QgZGVsZXRlZFZpZXdJZHMgPSBbXTtcbiAgICBmb3IgKGxldCBpID0gY3VycmVudFZpZXdJbmRleCArIDE7IGkgPCBzdGF0ZURhdGEubGVuZ3RoOyBpKyspIHtcbiAgICAgIGRlbGV0ZWRWaWV3SWRzLnB1c2goc3RhdGVEYXRhW2ldKTtcbiAgICB9XG4gICAgY29uc3QgaG91cmx5Tm9kZSA9IHRoaXMuZGFzaEJvYXJkV2lkZ2V0Q29uZmlnLndpZGdldHNcbiAgICAgIC5tYXAod2lkZ2V0ID0+IHdpZGdldC53aWRnZXROb2RlLmZpbmQobm9kZSA9PiB0aGlzLmdldEhvdXJseURhdGEobm9kZSkpKVxuICAgICAgLmZpbmQobm9kZSA9PiBub2RlKTtcblxuICAgIGlmIChob3VybHlOb2RlICYmIGV2ZW50LmtleVRvUGFzcy5pbmNsdWRlcyhcInJlY29yZERhdGVcIikpIHtcbiAgICAgIHRoaXMuZ2V0Vmlld0J5Um93Q0xpY2tGb3JIb3VybHlDaGFydChldmVudCwgaG91cmx5Tm9kZSk7XG4gICAgfVxuICAgIGNvbnN0IGN1cnJlbnRWaWV3Tm9kZSA9IHRoaXMuZGFzaEJvYXJkV2lkZ2V0Q29uZmlnLndpZGdldHNcbiAgICAgIC5tYXAod2lkZ2V0ID0+IHdpZGdldC53aWRnZXROb2RlLmZpbmQobm9kZSA9PiB0aGlzLmdldEVsZW1lbnRPZkN1cnJlbnRWaWV3KG5vZGUsIGV2ZW50LnZpZXdJZCkpKVxuICAgICAgLmZpbmQobm9kZSA9PiBub2RlKTtcbiAgICBpZiAoY3VycmVudFZpZXdOb2RlKSB7XG4gICAgICBjb25zdCBuZXh0Vmlld0luZGV4ID0gc3RhdGVEYXRhLmluZGV4T2YoZXZlbnQudmlld0lkKSArIDE7XG4gICAgICBjb25zdCBuZXh0VmlldyA9IHRoaXMuZGFzaEJvYXJkV2lkZ2V0Q29uZmlnLndpZGdldHNcbiAgICAgICAgLm1hcCh3aWRnZXQgPT4gd2lkZ2V0LndpZGdldE5vZGVbbmV4dFZpZXdJbmRleF0pXG4gICAgICAgIC5maW5kKG5vZGUgPT4gbm9kZSk7XG5cbiAgICAgIGlmIChuZXh0Vmlldykge1xuICAgICAgICB0aGlzLmxvYWRpbmdNb2RhbCA9IHRydWU7XG4gICAgICAgIHRoaXMuZ2V0Vmlld0J5Um93Q0xpY2soZXZlbnQsIG5leHRWaWV3LCBkZWxldGVkVmlld0lkcywgY3VycmVudFZpZXdOb2RlKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBnZXRWaWV3QnlSb3dDTGlja0ZvckhvdXJseUNoYXJ0KGV2ZW50LCBub2RlKSB7XG4gICAgbGV0IGFwaUNhbGxzID0gW107XG4gICAgY29uc3QgZGVsZXRlZFZpZXdJZHMgPSBbXTtcbiAgICBub2RlLmNvbXBDb25maWcudmlld0NvbmZpZy5mb3JFYWNoKGl0ZW0gPT4ge1xuICAgICAgbGV0IGFwcGxpZWRGaWx0ZXJzID0gdGhpcy5nZXRTZXRPcGVyYXRvckZpbHRlcihldmVudCwgdGhpcy5zdGF0ZURhdGFTb3VyY2UuZ2V0KGl0ZW0udmlld0lkKSk7XG4gICAgICBsZXQgZm91bmQgPSAodGhpcy5kYXRhU2V0TW9kYWwgYXMgYW55W10pLmZpbmQoZCA9PiBkLmRhdGFzZXRJZCA9PT0gaXRlbS5kYXRhc2V0SWQpO1xuICAgICAgZGVsZXRlZFZpZXdJZHMucHVzaChpdGVtLnZpZXdJZCk7XG4gICAgICBpZiAoZm91bmQpIHtcbiAgICAgICAgYXBpQ2FsbHMucHVzaCh0aGlzLmRhdGFzZXRTZXJ2aWNlLmdldERhdGFGcm9tRGF0YVNldChmb3VuZCwgaXRlbS5kYXRhc2V0SWQsIGFwcGxpZWRGaWx0ZXJzKSk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgUHJvbWlzZS5hbGwoYXBpQ2FsbHMpLnRoZW4oKCkgPT4ge1xuICAgICAgdGhpcy51bmlxdWVEYXRhU2V0T2JqZWN0ID0gdGhpcy5kYXRhc2V0U2VydmljZS5nZXRVbmlxdWVEYXRhU2V0T2JqZWN0KCk7XG4gICAgICAvLyBub2RlLm5vZGVQcm9wZXJ0aWVzWyd3aWRnZXRQYXJhbXMnXSA9IGV2ZW50LnRhYmxlVGl0bGU7XG4gICAgICB0aGlzLmxvYWRTaW5nbGVXaWRnZXROb2RlKG5vZGUsIHRoaXMubWFpblBhZ2VEaXZFbGVtZW50LCB0aGlzLnVuaXF1ZURhdGFTZXRPYmplY3QpO1xuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIHRoaXMuc2Nyb2xsVG9Cb3R0b20odGhpcy5tYWluUGFnZURpdkVsZW1lbnQpO1xuICAgICAgfSwgMjAwKTtcblxuICAgIH0pO1xuICAgIC8vIH1cbiAgICBjb25zb2xlLmxvZyh0aGlzLnN0YXRlRGF0YVNvdXJjZSk7XG4gIH1cblxuICBnZXRWaWV3QnlSb3dDTGljayhldmVudCwgdmlldywgZGVsZXRlZFZpZXdJZHMsIG5vZGUpIHtcbiAgICBsZXQgYXBpQ2FsbHMgPSBbXTtcbiAgICBsZXQgYXBwbGllZEZpbHRlcnMgPSB0aGlzLmdldFNldE9wZXJhdG9yRmlsdGVyKGV2ZW50LCB0aGlzLnN0YXRlRGF0YVNvdXJjZS5nZXQoZXZlbnQudmlld0lkKSk7XG4gICAgdmlldy5jb21wQ29uZmlnLnZpZXdDb25maWcuZm9yRWFjaChjb250ZW50VmlldyA9PiB7XG4gICAgICBsZXQgZm91bmQgPSAodGhpcy5kYXRhU2V0TW9kYWwgYXMgYW55W10pLmZpbmQoZCA9PiBkLmRhdGFzZXRJZCA9PT0gY29udGVudFZpZXcuZGF0YXNldElkKTtcbiAgICAgIGlmIChmb3VuZCkge1xuICAgICAgICBhcGlDYWxscy5wdXNoKHRoaXMuZGF0YXNldFNlcnZpY2UuZ2V0RGF0YUZyb21EYXRhU2V0KGZvdW5kLCBjb250ZW50Vmlldy5kYXRhc2V0SWQsIGFwcGxpZWRGaWx0ZXJzKSk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgUHJvbWlzZS5hbGwoYXBpQ2FsbHMpLnRoZW4oKCkgPT4ge1xuICAgICAgdGhpcy5kYXNoQm9hcmRXaWRnZXRDb25maWcud2lkZ2V0cy5mb3JFYWNoKGVsZW1lbnQgPT4ge1xuICAgICAgICBmb3IgKGxldCBlbnRyeSBvZiBkZWxldGVkVmlld0lkcykge1xuICAgICAgICAgIGVsZW1lbnQud2lkZ2V0Tm9kZS5mb3JFYWNoKHZpZXdWYWx1ZSA9PiB7XG4gICAgICAgICAgICB2aWV3VmFsdWUuY29tcENvbmZpZy52aWV3Q29uZmlnLmZvckVhY2godmlld0lkID0+IHtcbiAgICAgICAgICAgICAgaWYgKHZpZXdJZC52aWV3SWQgPT0gZW50cnkpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBleGlzdHMgPSB0aGlzLmNvbnRleHRNZW51RGF0YVNvdXJjZS5zb21lKGl0ZW0gPT4gaXRlbS52aWV3SWQgPT09IHZpZXdJZC52aWV3SWQpO1xuICAgICAgICAgICAgICAgIGlmICghZXhpc3RzKSB7XG4gICAgICAgICAgICAgICAgICB0aGlzLmNvbnRleHRNZW51RGF0YVNvdXJjZS5wdXNoKHtcbiAgICAgICAgICAgICAgICAgICAgdmlld0lkOiB2aWV3SWQudmlld0lkLFxuICAgICAgICAgICAgICAgICAgICB2aWV3TmFtZTogbm9kZS5ub2RlUHJvcGVydGllcy53aWRnZXRUaXRsZSxcbiAgICAgICAgICAgICAgICAgICAgZGlzcGxheUtleTogdmlld0lkLmtwaUNvbmZpZy5rZXlUb1Bhc3NcbiAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHRoaXMuc3RhdGVEYXRhU291cmNlLmRlbGV0ZShlbnRyeSlcbiAgICAgICAgICAgICAgICB2aWV3VmFsdWUubm9kZVByb3BlcnRpZXNbJ2Rpc3BsYXknXSA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIGNvbnN0IHByZWZpeGVkSWQgPSBgaWQtJHt2aWV3VmFsdWUuaWR9YDtcbiAgICAgICAgICAgICAgICBjb25zdCBlbGVtZW50VG9IaWRlID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihgIyR7cHJlZml4ZWRJZH1gKSBhcyBIVE1MRWxlbWVudDsgLy8gQ2FzdCB0byBIVE1MRWxlbWVudFxuICAgICAgICAgICAgICAgIGlmIChlbGVtZW50VG9IaWRlKSB7XG4gICAgICAgICAgICAgICAgICBlbGVtZW50VG9IaWRlLnJlbW92ZSgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgICBmb3IgKGxldCBlbnRyeSBvZiBkZWxldGVkVmlld0lkcykge1xuICAgICAgICB2aWV3LmNvbXBDb25maWcudmlld0NvbmZpZy5mb3JFYWNoKHZpZXdJZCA9PiB7XG4gICAgICAgICAgaWYgKHZpZXdJZC52aWV3SWQgPT0gZW50cnkpIHtcbiAgICAgICAgICAgIGNvbnN0IGV4aXN0cyA9IHRoaXMuY29udGV4dE1lbnVEYXRhU291cmNlLnNvbWUoaXRlbSA9PiBpdGVtLnZpZXdJZCA9PT0gdmlld0lkLnZpZXdJZCk7XG4gICAgICAgICAgICBpZiAoIWV4aXN0cykge1xuICAgICAgICAgICAgICB0aGlzLmNvbnRleHRNZW51RGF0YVNvdXJjZS5wdXNoKHtcbiAgICAgICAgICAgICAgICB2aWV3SWQ6IHZpZXdJZC52aWV3SWQsXG4gICAgICAgICAgICAgICAgdmlld05hbWU6IHZpZXcubm9kZVByb3BlcnRpZXMud2lkZ2V0VGl0bGUsXG4gICAgICAgICAgICAgICAgZGlzcGxheUtleTogdmlld0lkLmtwaUNvbmZpZy5rZXlUb1Bhc3NcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMuc3RhdGVEYXRhU291cmNlLmRlbGV0ZShlbnRyeSlcbiAgICAgICAgICAgIHZpZXcubm9kZVByb3BlcnRpZXNbJ2Rpc3BsYXknXSA9IGZhbHNlO1xuICAgICAgICAgICAgY29uc3QgcHJlZml4ZWRJZCA9IGBpZC0ke3ZpZXcuaWR9YDtcbiAgICAgICAgICAgIGNvbnN0IGVsZW1lbnRUb0hpZGUgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKGAjJHtwcmVmaXhlZElkfWApIGFzIEhUTUxFbGVtZW50OyAvLyBDYXN0IHRvIEhUTUxFbGVtZW50XG4gICAgICAgICAgICBpZiAoZWxlbWVudFRvSGlkZSkge1xuICAgICAgICAgICAgICBlbGVtZW50VG9IaWRlLnJlbW92ZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9XG5cbiAgICAgIHRoaXMuY29udGV4dE1lbnVEYXRhU291cmNlID0gdGhpcy5jb250ZXh0TWVudURhdGFTb3VyY2UuZmlsdGVyKGUgPT4gZS5kaXNwbGF5S2V5ICE9PSBldmVudC5rZXlUb1Bhc3MpO1xuICAgICAgdmlldy5jb21wQ29uZmlnLnZpZXdDb25maWcuZm9yRWFjaCh2aWV3Zm9yRGF0YVNldCA9PiB7XG5cbiAgICAgICAgbGV0IG9iaiA9IHtcbiAgICAgICAgICBcImZpbHRlcnNcIjogYXBwbGllZEZpbHRlcnMsXG4gICAgICAgICAgXCJrZXlUb1Bhc3NcIjogdGhpcy51cGRhdGVPcGVyYXRvckRhdGEoZXZlbnQua2V5VG9QYXNzLCBldmVudC5kYXRhKSxcbiAgICAgICAgICBcImRyaWxsRG93blR5cGVcIjogZXZlbnQuZHJpbGxEb3duVHlwZSxcbiAgICAgICAgICBcImRyaWxsZG93bkZyb21cIjogZXZlbnQuZHJpbGxkb3duRnJvbVxuICAgICAgICB9XG4gICAgICAgIHRoaXMuc3RhdGVEYXRhU291cmNlLnNldCh2aWV3Zm9yRGF0YVNldFsndmlld0lkJ10sIG9iailcbiAgICAgIH0pO1xuICAgICAgdmlldy5ub2RlUHJvcGVydGllc1snZGlzcGxheSddID0gdHJ1ZTtcbiAgICAgIHZpZXcubm9kZVByb3BlcnRpZXNbJ3dpZGdldFBhcmFtcyddID0gZXZlbnQudGFibGVUaXRsZTtcbiAgICAgIGNvbnN0IHByZWZpeGVkSWQgPSBgaWQtJHt2aWV3LmlkfWA7XG4gICAgICBjb25zdCBjb250YWluZXJFbGVtZW50ID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihgIyR7cHJlZml4ZWRJZH1gKSBhcyBIVE1MRWxlbWVudDtcbiAgICAgIHRoaXMudW5pcXVlRGF0YVNldE9iamVjdCA9IHRoaXMuZGF0YXNldFNlcnZpY2UuZ2V0VW5pcXVlRGF0YVNldE9iamVjdCgpO1xuICAgICAgdGhpcy5sb2FkU2luZ2xlV2lkZ2V0Tm9kZSh2aWV3LCB0aGlzLm1haW5QYWdlRGl2RWxlbWVudCwgdGhpcy51bmlxdWVEYXRhU2V0T2JqZWN0KTtcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICB0aGlzLnNjcm9sbFRvQm90dG9tKHRoaXMubWFpblBhZ2VEaXZFbGVtZW50KTtcbiAgICAgIH0sIDIwMCk7XG4gICAgICBsZXQgbmF2aWdhdGlvbjogTmF2aWdhdGlvbkV4dHJhcyA9IHtcbiAgICAgICAgcXVlcnlQYXJhbXM6IGFwcGxpZWRGaWx0ZXJzWydvcGVyYXRpb25GaWx0ZXInXSxcbiAgICAgICAgcXVlcnlQYXJhbXNIYW5kbGluZzogXCJtZXJnZVwiXG4gICAgICB9O1xuICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoW10sIG5hdmlnYXRpb24pO1xuICAgIH0pO1xuICAgIC8vIH1cbiAgICBjb25zb2xlLmxvZyh0aGlzLnN0YXRlRGF0YVNvdXJjZSk7XG4gIH1cblxuICBzY3JvbGxUb0JvdHRvbShjb250YWluZXI6IEhUTUxFbGVtZW50KSB7XG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICBjb250YWluZXIuc2Nyb2xsSW50b1ZpZXcoeyBibG9jazogJ2VuZCcgfSk7XG4gICAgICB0aGlzLmxvYWRpbmdNb2RhbCA9IGZhbHNlO1xuICAgIH0sIDApO1xuICB9XG5cbiAgZmluZFdpZGdldEJ5SWQoY29uZmlnczogYW55W10sIGlkOiBzdHJpbmcpOiBhbnkgfCB1bmRlZmluZWQge1xuICAgIGZvciAoY29uc3QgY29uZmlnIG9mIGNvbmZpZ3MpIHtcbiAgICAgIGlmIChjb25maWcuaWQgPT09IGlkKSB7XG4gICAgICAgIHJldHVybiBjb25maWc7XG4gICAgICB9XG4gICAgICBpZiAoY29uZmlnLndpZGdldE5vZGUgJiYgY29uZmlnLndpZGdldE5vZGUubGVuZ3RoID4gMCkge1xuICAgICAgICBjb25zdCBmb3VuZCA9IHRoaXMuZmluZFdpZGdldEJ5SWQoY29uZmlnLndpZGdldE5vZGUsIGlkKTtcbiAgICAgICAgaWYgKGZvdW5kKSB7XG4gICAgICAgICAgcmV0dXJuIGZvdW5kO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cblxuICB1cGRhdGVPcGVyYXRvckRhdGEoa2V5X25hbWU6IHN0cmluZ1tdLCB2YWx1ZV9kYXRhOiBhbnkpOiBhbnkge1xuICAgIGxldCBvcGVyYXRvciA9IFtdO1xuICAgIGZvciAoY29uc3Qga2V5IG9mIGtleV9uYW1lKSB7XG4gICAgICBsZXQgb2JqOiBhbnkgPSB7fTtcbiAgICAgIG9ialtrZXldID0gdmFsdWVfZGF0YVtrZXldO1xuICAgICAgb3BlcmF0b3IucHVzaChvYmopXG4gICAgfVxuICAgIHJldHVybiBvcGVyYXRvcjtcbiAgfVxuXG5cbiAgZ2V0RWxlbWVudE9mQ3VycmVudFZpZXcobm9kZSwgdmlld0lkKSB7XG4gICAgY29uc3QgbWF0Y2hlZE9iamVjdCA9IG5vZGUuY29tcENvbmZpZy52aWV3Q29uZmlnLmZpbmQob2JqZWN0ID0+IG9iamVjdC52aWV3SWQgPT09IHZpZXdJZCk7XG4gICAgcmV0dXJuIG1hdGNoZWRPYmplY3QgPyBub2RlIDogbnVsbDtcbiAgfVxuICBnZXRIb3VybHlEYXRhKG5vZGUpIHtcbiAgICBjb25zdCBtYXRjaGVkT2JqZWN0ID0gbm9kZS5jb21wQ29uZmlnLnZpZXdDb25maWcuZmluZChvYmplY3QgPT4gb2JqZWN0LmtwaUNvbmZpZy5mb3JtYXRlID09PSAnaG91cmx5Jyk7XG4gICAgcmV0dXJuIG1hdGNoZWRPYmplY3QgPyBub2RlIDogbnVsbDtcbiAgfVxuXG4gIGdldFNldE9wZXJhdG9yRmlsdGVyKG9iamVjdERhdGEsIHByZXZpb3VzVmlld1N0YXRlcykge1xuXG4gICAgY29uc3QgeyBkYXRhLCBrZXlUb1Bhc3MgfSA9IG9iamVjdERhdGE7XG4gICAgY29uc3QgYXBwbGllZEZpbHRlciA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkocHJldmlvdXNWaWV3U3RhdGVzLmZpbHRlcnMub3BlcmF0aW9uRmlsdGVyKSk7XG5cbiAgICBrZXlUb1Bhc3MuZm9yRWFjaChrZXkgPT4ge1xuICAgICAgaWYgKGtleSBpbiBkYXRhKSB7XG4gICAgICAgIGlmIChrZXkgPT09IFwicmVjb3JkRGF0ZVwiICYmIFwic3RhcnREYXRlXCIgaW4gYXBwbGllZEZpbHRlciAmJiBcImVuZERhdGVcIiBpbiBhcHBsaWVkRmlsdGVyKSB7XG4gICAgICAgICAgYXBwbGllZEZpbHRlci5zdGFydERhdGUgPSBkYXRhW2tleV07XG4gICAgICAgICAgYXBwbGllZEZpbHRlci5lbmREYXRlID0gZGF0YVtrZXldO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGFwcGxpZWRGaWx0ZXJba2V5XSA9IGRhdGFba2V5XTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuICAgIGNvbnN0IGRlZmF1bHRvcGVyYXRpb25GaWx0ZXIgPSB0aGlzLmdsb2JhbERlZmF1bHRGaWx0ZXIub3BlcmF0aW9uRmlsdGVyO1xuICAgIGlmIChkZWZhdWx0b3BlcmF0aW9uRmlsdGVyKSB7XG4gICAgICBPYmplY3Qua2V5cyhkZWZhdWx0b3BlcmF0aW9uRmlsdGVyKS5mb3JFYWNoKGtleSA9PiB7XG4gICAgICAgIGlmICghYXBwbGllZEZpbHRlci5oYXNPd25Qcm9wZXJ0eShrZXkpKSB7XG4gICAgICAgICAgYXBwbGllZEZpbHRlcltrZXldID0gZGVmYXVsdG9wZXJhdGlvbkZpbHRlcltrZXldO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBjb25zdCBvcGVyYXRpb25GaWx0ZXIgPSB7fTtcbiAgICBvcGVyYXRpb25GaWx0ZXJbJ29wZXJhdGlvbkZpbHRlciddID0gYXBwbGllZEZpbHRlcjtcbiAgICByZXR1cm4gb3BlcmF0aW9uRmlsdGVyO1xuICB9XG5cblxuICBnZXRSZWFyY2hSZXN1bHRGcm9tSW5wdXRCb3goaW5wdXRWYWx1ZSwgdmlld0NvbmZpZywgZmlsdGVyT2JqZWN0KSB7XG4gICAgbGV0IHZpZXcgPSB2aWV3Q29uZmlnO1xuICAgIGxldCBldmVudE5vZGUgPSB7IGRhdGE6IHt9LCBrZXlUb1Bhc3M6IFtdIH1cbiAgICBldmVudE5vZGUuZGF0YVtmaWx0ZXJPYmplY3Quc2VydmVyX2NvbHVtbl0gPSBpbnB1dFZhbHVlO1xuICAgIGV2ZW50Tm9kZVsna2V5VG9QYXNzJ10gPSBbZmlsdGVyT2JqZWN0LnNlcnZlcl9jb2x1bW5dO1xuICAgIGxldCBhcGlDYWxscyA9IFtdO1xuXG4gICAgdmlldy5jb21wQ29uZmlnLnZpZXdDb25maWcuZm9yRWFjaChjb250ZW50VmlldyA9PiB7XG4gICAgICBsZXQgYXBwbGllZEZpbHRlcnMgPSB0aGlzLmdldFNldE9wZXJhdG9yRmlsdGVyKGV2ZW50Tm9kZSwgdGhpcy5zdGF0ZURhdGFTb3VyY2UuZ2V0KGNvbnRlbnRWaWV3LnZpZXdJZCkpO1xuICAgICAgbGV0IGZvdW5kID0gKHRoaXMuZGF0YVNldE1vZGFsIGFzIGFueVtdKS5maW5kKGQgPT4gZC5kYXRhc2V0SWQgPT09IGNvbnRlbnRWaWV3LmRhdGFzZXRJZCk7XG4gICAgICBpZiAoZm91bmQpIHtcbiAgICAgICAgYXBpQ2FsbHMucHVzaCh0aGlzLmRhdGFzZXRTZXJ2aWNlLmdldERhdGFGcm9tRGF0YVNldChmb3VuZCwgY29udGVudFZpZXcuZGF0YXNldElkLCBhcHBsaWVkRmlsdGVycykpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHZpZXdDb25maWcubm9kZVByb3BlcnRpZXNbJ2Rpc3BsYXknXSA9IGZhbHNlO1xuICAgIGNvbnN0IHByZWZpeGVkSWQgPSBgaWQtJHt2aWV3Q29uZmlnLmlkfWA7XG4gICAgY29uc3QgZWxlbWVudFRvSGlkZSA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoYCMke3ByZWZpeGVkSWR9YCkgYXMgSFRNTEVsZW1lbnQ7IC8vIENhc3QgdG8gSFRNTEVsZW1lbnRcbiAgICBpZiAoZWxlbWVudFRvSGlkZSkge1xuICAgICAgZWxlbWVudFRvSGlkZS5yZW1vdmUoKTtcbiAgICB9XG5cbiAgICBQcm9taXNlLmFsbChhcGlDYWxscykudGhlbigoKSA9PiB7XG4gICAgICB0aGlzLnVuaXF1ZURhdGFTZXRPYmplY3QgPSB0aGlzLmRhdGFzZXRTZXJ2aWNlLmdldFVuaXF1ZURhdGFTZXRPYmplY3QoKTtcblxuICAgICAgdGhpcy5sb2FkaW5nTW9kYWwgPSB0cnVlO1xuICAgICAgdGhpcy5jb250ZXh0TWVudURhdGFTb3VyY2UgPSB0aGlzLmNvbnRleHRNZW51RGF0YVNvdXJjZS5maWx0ZXIoZSA9PiBlLmRpc3BsYXlLZXkgIT09IHZpZXdDb25maWcua2V5VG9QYXNzKTtcblxuICAgICAgdmlldy5ub2RlUHJvcGVydGllc1snZGlzcGxheSddID0gdHJ1ZTtcbiAgICAgIC8vIHZpZXcubm9kZVByb3BlcnRpZXNbJ3dpZGdldFBhcmFtcyddID0gZXZlbnQudGFibGVUaXRsZTtcbiAgICAgIGNvbnN0IHByZWZpeGVkSWQgPSBgaWQtJHt2aWV3LmlkfWA7XG4gICAgICBjb25zdCBjb250YWluZXJFbGVtZW50ID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihgIyR7cHJlZml4ZWRJZH1gKSBhcyBIVE1MRWxlbWVudDtcbiAgICAgIHRoaXMubG9hZFNpbmdsZVdpZGdldE5vZGUodmlldywgdGhpcy5tYWluUGFnZURpdkVsZW1lbnQsIHRoaXMudW5pcXVlRGF0YVNldE9iamVjdCk7XG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgdGhpcy5zY3JvbGxUb0JvdHRvbSh0aGlzLm1haW5QYWdlRGl2RWxlbWVudCk7XG4gICAgICB9LCAyMDApO1xuICAgICAgbGV0IHBhcmFtcyA9IHt9O1xuICAgICAgcGFyYW1zW2ZpbHRlck9iamVjdC5zZXJ2ZXJfY29sdW1uXSA9IGlucHV0VmFsdWU7XG4gICAgICBsZXQgbmF2aWdhdGlvbjogTmF2aWdhdGlvbkV4dHJhcyA9IHtcbiAgICAgICAgcXVlcnlQYXJhbXM6IHBhcmFtcyxcbiAgICAgICAgcXVlcnlQYXJhbXNIYW5kbGluZzogXCJtZXJnZVwiXG4gICAgICB9O1xuICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoW10sIG5hdmlnYXRpb24pO1xuICAgIH0pO1xuICB9XG5cblxuICBzdWJtaXRGaWx0ZXIoKSB7XG4gICAgbGV0IHZpZXcgPSB0aGlzLm5vZGVwcm9wZXJ0aWNlRmlsdGVyRGF0YVNvdXJjZS52aWV3Q29uZmlnO1xuICAgIC8vIGxldCBjYWxfdmFsdWUgPSAocGFyc2VGbG9hdChzZWFyY2hUZXJtKSAvIDEwMClcbiAgICBsZXQgYXBpQ2FsbHMgPSBbXTtcbiAgICB0aGlzLmhhdmluZ0RhdGFPYmplY3QgPSB0aGlzLm5vZGVwcm9wZXJ0aWNlRmlsdGVyRGF0YVNvdXJjZS5oYXZpbmdDb25maWcuZmlsdGVyKHZhbHVlID0+IHZhbHVlLnZhbHVlICE9PSBcIlwiKTtcbiAgICB2aWV3LmNvbXBDb25maWcudmlld0NvbmZpZy5mb3JFYWNoKGNvbnRlbnRWaWV3ID0+IHtcbiAgICAgIGxldCBhcHBsaWVkRmlsdGVycyA9IHRoaXMuc3RhdGVEYXRhU291cmNlLmdldChjb250ZW50Vmlldy52aWV3SWQpO1xuICAgICAgbGV0IGZvdW5kID0gKHRoaXMuZGF0YVNldE1vZGFsIGFzIGFueVtdKS5maW5kKGQgPT4gZC5kYXRhc2V0SWQgPT09IGNvbnRlbnRWaWV3LmRhdGFzZXRJZCk7XG4gICAgICBpZiAoZm91bmQpIHtcbiAgICAgICAgYXBpQ2FsbHMucHVzaCh0aGlzLmRhdGFzZXRTZXJ2aWNlLmdldERhdGFGcm9tRGF0YVNldChmb3VuZCwgY29udGVudFZpZXcuZGF0YXNldElkLCBhcHBsaWVkRmlsdGVycy5maWx0ZXJzKSk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgUHJvbWlzZS5hbGwoYXBpQ2FsbHMpLnRoZW4oKCkgPT4ge1xuICAgICAgdGhpcy51bmlxdWVEYXRhU2V0T2JqZWN0ID0gdGhpcy5kYXRhc2V0U2VydmljZS5nZXRVbmlxdWVEYXRhU2V0T2JqZWN0KCk7XG5cbiAgICAgIHRoaXMubm9kZXByb3BlcnRpY2VGaWx0ZXJEYXRhU291cmNlLnZpZXdDb25maWcubm9kZVByb3BlcnRpZXNbJ2Rpc3BsYXknXSA9IGZhbHNlO1xuICAgICAgY29uc3QgcHJlZml4ZWRJZCA9IGBpZC0ke3RoaXMubm9kZXByb3BlcnRpY2VGaWx0ZXJEYXRhU291cmNlLnZpZXdDb25maWcuaWR9YDtcbiAgICAgIGNvbnN0IGVsZW1lbnRUb0hpZGUgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKGAjJHtwcmVmaXhlZElkfWApIGFzIEhUTUxFbGVtZW50OyAvLyBDYXN0IHRvIEhUTUxFbGVtZW50XG4gICAgICBpZiAoZWxlbWVudFRvSGlkZSkge1xuICAgICAgICBlbGVtZW50VG9IaWRlLnJlbW92ZSgpO1xuICAgICAgfVxuXG4gICAgICB0aGlzLmxvYWRpbmdNb2RhbCA9IHRydWU7XG4gICAgICB0aGlzLmNvbnRleHRNZW51RGF0YVNvdXJjZSA9IHRoaXMuY29udGV4dE1lbnVEYXRhU291cmNlLmZpbHRlcihlID0+IGUuZGlzcGxheUtleSAhPT0gdGhpcy5ub2RlcHJvcGVydGljZUZpbHRlckRhdGFTb3VyY2Uudmlld0NvbmZpZy5rZXlUb1Bhc3MpO1xuICAgICAgdGhpcy5pc1dpZGdldEZpbHRlcnMgPSBmYWxzZTtcbiAgICAgIHZpZXcubm9kZVByb3BlcnRpZXNbJ2Rpc3BsYXknXSA9IHRydWU7XG4gICAgICAvLyB2aWV3Lm5vZGVQcm9wZXJ0aWVzWyd3aWRnZXRQYXJhbXMnXSA9IGV2ZW50LnRhYmxlVGl0bGU7XG4gICAgICAvLyBjb25zdCBwcmVmaXhlZElkID0gYGlkLSR7dmlldy5pZH1gO1xuICAgICAgLy8gY29uc3QgY29udGFpbmVyRWxlbWVudCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoYCMke3ByZWZpeGVkSWR9YCkgYXMgSFRNTEVsZW1lbnQ7XG4gICAgICB0aGlzLmxvYWRTaW5nbGVXaWRnZXROb2RlKHZpZXcsIHRoaXMubWFpblBhZ2VEaXZFbGVtZW50LCB0aGlzLnVuaXF1ZURhdGFTZXRPYmplY3QpO1xuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIHRoaXMuc2Nyb2xsVG9Cb3R0b20odGhpcy5tYWluUGFnZURpdkVsZW1lbnQpO1xuICAgICAgfSwgMjAwKTtcbiAgICB9KTtcbiAgfVxuXG5cbiAgZ2V0V2lkZ2V0RmlsdGVyRm9yVGVtcGxhdGUodmFsdWUpIHtcbiAgICBsZXQgYXBpQ2FsbHMgPSBbXTtcbiAgICBjb25zdCBkZWxldGVkVmlld0lkcyA9IFtdO1xuICAgIHZhbHVlLnZpZXdOb2Rlcy5jb21wQ29uZmlnLnZpZXdDb25maWcuZm9yRWFjaChpdGVtID0+IHtcbiAgICAgIGxldCB3aWRnZXRGaWx0ZXIgPSB0aGlzLnN0YXRlRGF0YVNvdXJjZS5nZXQoaXRlbS52aWV3SWQpO1xuICAgICAgbGV0IGFwcGxpZWRGaWx0ZXJzID0gd2lkZ2V0RmlsdGVyLmZpbHRlcnM7XG4gICAgICBsZXQgZm91bmQgPSAodGhpcy5kYXRhU2V0TW9kYWwgYXMgYW55W10pLmZpbmQoZCA9PiBkLmRhdGFzZXRJZCA9PT0gaXRlbS5kYXRhc2V0SWQpO1xuICAgICAgZGVsZXRlZFZpZXdJZHMucHVzaChpdGVtLnZpZXdJZCk7XG4gICAgICBjb25zdCBoYXZpbmcgPSBPYmplY3QuZW50cmllcyh2YWx1ZS5vcGVyYXRpb25GaWx0ZXIpLm1hcCgoW2tleSwgdmFsdWVdKSA9PiAoe1xuICAgICAgICBjb2x1bW5OYW1lOiBrZXksXG4gICAgICAgIGRhdGFUeXBlOiBcImZsb2F0XCIsXG4gICAgICAgIG9wZXJhdG9yOiBcImd0ZVwiLFxuICAgICAgICB2YWx1ZTogdmFsdWVcbiAgICAgIH0pKTtcblxuICAgICAgaWYgKGZvdW5kKSB7XG4gICAgICAgIGZvdW5kLmNvbmZpZy5xdWVyeUNvbmZpZ1snaGF2aW5ncyddID0gaGF2aW5nO1xuICAgICAgICBhcGlDYWxscy5wdXNoKHRoaXMuZGF0YXNldFNlcnZpY2UuZ2V0RGF0YUZyb21EYXRhU2V0KGZvdW5kLCBpdGVtLmRhdGFzZXRJZCwgYXBwbGllZEZpbHRlcnMpKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICBQcm9taXNlLmFsbChhcGlDYWxscykudGhlbigoKSA9PiB7XG4gICAgICB0aGlzLnVuaXF1ZURhdGFTZXRPYmplY3QgPSB0aGlzLmRhdGFzZXRTZXJ2aWNlLmdldFVuaXF1ZURhdGFTZXRPYmplY3QoKTtcbiAgICAgIC8vIHZhbHVlLnZpZXdOb2Rlcy5ub2RlUHJvcGVydGllc1snd2lkZ2V0UGFyYW1zJ10gPSBldmVudC50YWJsZVRpdGxlO1xuICAgICAgdGhpcy5sb2FkU2luZ2xlV2lkZ2V0Tm9kZSh2YWx1ZS52aWV3Tm9kZXMsIHRoaXMubWFpblBhZ2VEaXZFbGVtZW50LCB0aGlzLnVuaXF1ZURhdGFTZXRPYmplY3QpO1xuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIHRoaXMuc2Nyb2xsVG9Cb3R0b20odGhpcy5tYWluUGFnZURpdkVsZW1lbnQpO1xuICAgICAgfSwgMjAwKTtcblxuICAgIH0pO1xuICAgIC8vIH1cbiAgfVxuXG59XG4iLCI8YXBwLWxvYWRpbmcgKm5nSWY9XCJsb2FkaW5nTW9kYWxcIj48L2FwcC1sb2FkaW5nPlxuXG48ZGl2IGNsYXNzPVwidy1mdWxsXCI+XG4gICAgPGRpdiBjbGFzcz1cImZsZXggZmxleC13cmFwIFwiICNkeW5hbWljQ29udGFpbmVyPjwvZGl2PlxuPC9kaXY+Il19