@huntsman-cancer-institute/navigation 15.0.3 → 16.0.1

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 (46) hide show
  1. package/components/badge.component.d.ts +1 -1
  2. package/components/brand-nav.component.d.ts +1 -1
  3. package/components/div-nav.component.d.ts +1 -1
  4. package/components/li-dd-nav.component.d.ts +1 -1
  5. package/components/li-exp-nav.component.d.ts +1 -1
  6. package/components/li-nav.component.d.ts +1 -1
  7. package/components/nav.component.d.ts +1 -1
  8. package/components/search-list/search-list-controller.component.d.ts +1 -1
  9. package/components/search-list/search-list.component.d.ts +1 -1
  10. package/components/search-tree/search-tree-controller.component.d.ts +1 -1
  11. package/components/search-tree/search-tree.component.d.ts +2 -2
  12. package/components/template.component.d.ts +1 -1
  13. package/components/ul-nav.component.d.ts +1 -1
  14. package/directives/top-margin.directive.d.ts +1 -1
  15. package/{esm2020 → esm2022}/components/badge.component.mjs +6 -6
  16. package/{esm2020 → esm2022}/components/brand-nav.component.mjs +6 -6
  17. package/{esm2020 → esm2022}/components/div-nav.component.mjs +6 -6
  18. package/{esm2020 → esm2022}/components/li-dd-nav.component.mjs +6 -6
  19. package/{esm2020 → esm2022}/components/li-exp-nav.component.mjs +6 -6
  20. package/{esm2020 → esm2022}/components/li-nav.component.mjs +6 -6
  21. package/{esm2020 → esm2022}/components/nav.component.mjs +5 -5
  22. package/{esm2020 → esm2022}/components/search-list/search-list-controller.component.mjs +7 -7
  23. package/{esm2020 → esm2022}/components/search-list/search-list.component.mjs +7 -7
  24. package/{esm2020 → esm2022}/components/search-tree/search-tree-controller.component.mjs +6 -6
  25. package/{esm2020 → esm2022}/components/search-tree/search-tree.component.mjs +8 -8
  26. package/{esm2020 → esm2022}/components/template.component.mjs +6 -6
  27. package/{esm2020 → esm2022}/components/ul-nav.component.mjs +6 -6
  28. package/{esm2020 → esm2022}/directives/top-margin.directive.mjs +4 -4
  29. package/{esm2020 → esm2022}/impl/app-footer.component.mjs +8 -8
  30. package/{esm2020 → esm2022}/impl/app-header.component.mjs +8 -8
  31. package/{esm2020 → esm2022}/impl/sidebar.component.mjs +8 -8
  32. package/{esm2020 → esm2022}/navigation.module.mjs +67 -67
  33. package/{esm2020 → esm2022}/services/navigation-global.service.mjs +4 -4
  34. package/{esm2020 → esm2022}/services/navigation.service.mjs +4 -4
  35. package/{fesm2020 → fesm2022}/huntsman-cancer-institute-navigation.mjs +163 -163
  36. package/{fesm2020 → fesm2022}/huntsman-cancer-institute-navigation.mjs.map +1 -1
  37. package/impl/app-footer.component.d.ts +1 -1
  38. package/impl/app-header.component.d.ts +1 -1
  39. package/impl/sidebar.component.d.ts +1 -1
  40. package/navigation.module.d.ts +1 -1
  41. package/package.json +17 -21
  42. package/fesm2015/huntsman-cancer-institute-navigation.mjs +0 -6366
  43. package/fesm2015/huntsman-cancer-institute-navigation.mjs.map +0 -1
  44. /package/{esm2020 → esm2022}/components/search-list/row-group.mjs +0 -0
  45. /package/{esm2020 → esm2022}/huntsman-cancer-institute-navigation.mjs +0 -0
  46. /package/{esm2020 → esm2022}/index.mjs +0 -0
@@ -1061,9 +1061,8 @@ let SearchListComponent = class SearchListComponent extends NavComponent {
1061
1061
  this.searchResultMessage = "";
1062
1062
  }
1063
1063
  }
1064
- };
1065
- SearchListComponentfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: SearchListComponent, deps: [{ token: i0.ElementRef }, { token: i0.Renderer2 }, { token: i0.ComponentFactoryResolver }, { token: i1.NavigationGlobalService }, { token: i2.NavigationService, optional: true }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
1066
- SearchListComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: SearchListComponent, selector: "hci-search-list", inputs: { controller: "controller", boundData: ["data", "boundData"], dataSubject: "dataSubject", externalDataCall: ["dataCall", "externalDataCall"], loadingSubjects: "loadingSubjects", loading: "loading", route: "route", inlineExpand: "inlineExpand", rowId: "rowId", groupClass: "groupClass", rowClass: "rowClass", groupDisplay: "groupDisplay", closeOthers: "closeOthers", groupingFields: "groupingFields", groupByAllowedFields: "groupByAllowedFields", pageSize: "pageSize", groupPageSize: "groupPageSize", groupCacheNumPages: "groupCacheNumPages", dropdown: "dropdown", busyIcon: "busyIcon", showResultsCount: "showResultsCount", onGroupClick: "onGroupClick", onRowClick: "onRowClick", groupTemplate: "groupTemplate", groupSelectedTemplate: "groupSelectedTemplate", itemTemplate: "itemTemplate", onGroupClose: "onGroupClose" }, outputs: { groupClick: "groupClick", rowClick: "rowClick", dataChange: "dataChange" }, viewQueries: [{ propertyName: "defaultGroupTemplate", first: true, predicate: ["defaultGroupTemplate"], descendants: true, read: TemplateRef, static: true }, { propertyName: "defaultGroupSelectedTemplate", first: true, predicate: ["defaultGroupSelectedTemplate"], descendants: true, read: TemplateRef, static: true }, { propertyName: "selectedRowGroupContainerSetter", first: true, predicate: ["selectedRowGroupContainer"], descendants: true, read: ElementRef }, { propertyName: "rowParents", predicate: ["rowParent"], descendants: true, read: ElementRef }], usesInheritance: true, usesOnChanges: true, ngImport: i0, template: `
1064
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: SearchListComponent, deps: [{ token: i0.ElementRef }, { token: i0.Renderer2 }, { token: i0.ComponentFactoryResolver }, { token: i1.NavigationGlobalService }, { token: i2.NavigationService, optional: true }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component }); }
1065
+ static { thiscmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: SearchListComponent, selector: "hci-search-list", inputs: { controller: "controller", boundData: ["data", "boundData"], dataSubject: "dataSubject", externalDataCall: ["dataCall", "externalDataCall"], loadingSubjects: "loadingSubjects", loading: "loading", route: "route", inlineExpand: "inlineExpand", rowId: "rowId", groupClass: "groupClass", rowClass: "rowClass", groupDisplay: "groupDisplay", closeOthers: "closeOthers", groupingFields: "groupingFields", groupByAllowedFields: "groupByAllowedFields", pageSize: "pageSize", groupPageSize: "groupPageSize", groupCacheNumPages: "groupCacheNumPages", dropdown: "dropdown", busyIcon: "busyIcon", showResultsCount: "showResultsCount", onGroupClick: "onGroupClick", onRowClick: "onRowClick", groupTemplate: "groupTemplate", groupSelectedTemplate: "groupSelectedTemplate", itemTemplate: "itemTemplate", onGroupClose: "onGroupClose" }, outputs: { groupClick: "groupClick", rowClick: "rowClick", dataChange: "dataChange" }, viewQueries: [{ propertyName: "defaultGroupTemplate", first: true, predicate: ["defaultGroupTemplate"], descendants: true, read: TemplateRef, static: true }, { propertyName: "defaultGroupSelectedTemplate", first: true, predicate: ["defaultGroupSelectedTemplate"], descendants: true, read: TemplateRef, static: true }, { propertyName: "selectedRowGroupContainerSetter", first: true, predicate: ["selectedRowGroupContainer"], descendants: true, read: ElementRef }, { propertyName: "rowParents", predicate: ["rowParent"], descendants: true, read: ElementRef }], usesInheritance: true, usesOnChanges: true, ngImport: i0, template: `
1067
1066
  <div
1068
1067
  class="results-count" [ngClass]="{ 'format-bottom-padding': this.searchResultMessage === '' }">
1069
1068
  {{ this.searchResultMessage }}
@@ -1224,7 +1223,8 @@ SearchListComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", ve
1224
1223
  <div class="font-weight-bold mr-auto">{{getGroupDisplay(rowGroup)}}</div>
1225
1224
  </div>
1226
1225
  </ng-template>
1227
- `, isInline: true, styles: [".results-count{background-color:var(--greywarm-meddark);color:#fff;font-size:17.3px;padding-left:18px}.format-bottom-padding{padding-bottom:25px}:host::ng-deep div[id^=row-]:nth-child(even){background-color:var(--white-medium)!important}:host::ng-deep div[id^=row-]{border:0!important}:host::ng-deep div.row-parent.active{color:#fff!important;background-color:var(--bluewarmvivid-lightest)!important}:host::ng-deep .ri-sidebar-cell{background-color:transparent!important}\n"], dependencies: [{ kind: "directive", type: i3.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i3.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i4.RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "directive", type: i4.RouterLinkActive, selector: "[routerLinkActive]", inputs: ["routerLinkActiveOptions", "ariaCurrentWhenActive", "routerLinkActive"], outputs: ["isActiveChange"], exportAs: ["routerLinkActive"] }, { kind: "component", type: i5.BusyComponent, selector: "hci-busy", inputs: ["busy", "busySubjects", "getBusySubjects", "parentSelector", "rootClass", "icon", "iconSize", "showIcon", "mxAuto", "myAuto", "text", "template", "config"] }] });
1226
+ `, isInline: true, styles: [".results-count{background-color:var(--greywarm-meddark);color:#fff;font-size:17.3px;padding-left:18px}.format-bottom-padding{padding-bottom:25px}:host::ng-deep div[id^=row-]:nth-child(2n){background-color:var(--white-medium)!important}:host::ng-deep div[id^=row-]{border:0!important}:host::ng-deep div.row-parent.active{color:#fff!important;background-color:var(--bluewarmvivid-lightest)!important}:host::ng-deep .ri-sidebar-cell{background-color:transparent!important}\n"], dependencies: [{ kind: "directive", type: i3.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i3.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i4.RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "directive", type: i4.RouterLinkActive, selector: "[routerLinkActive]", inputs: ["routerLinkActiveOptions", "ariaCurrentWhenActive", "routerLinkActive"], outputs: ["isActiveChange"], exportAs: ["routerLinkActive"] }, { kind: "component", type: i5.BusyComponent, selector: "hci-busy", inputs: ["busy", "busySubjects", "getBusySubjects", "parentSelector", "rootClass", "icon", "iconSize", "showIcon", "mxAuto", "myAuto", "text", "template", "config"] }] }); }
1227
+ };
1228
1228
  SearchListComponent = __decorate([
1229
1229
  ComponentType("SearchListComponent"),
1230
1230
  __metadata("design:paramtypes", [ElementRef,
@@ -1235,7 +1235,7 @@ SearchListComponent = __decorate([
1235
1235
  ChangeDetectorRef])
1236
1236
  ], SearchListComponent);
1237
1237
  export { SearchListComponent };
1238
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: SearchListComponent, decorators: [{
1238
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: SearchListComponent, decorators: [{
1239
1239
  type: Component,
1240
1240
  args: [{ selector: "hci-search-list", template: `
1241
1241
  <div
@@ -1398,7 +1398,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImpo
1398
1398
  <div class="font-weight-bold mr-auto">{{getGroupDisplay(rowGroup)}}</div>
1399
1399
  </div>
1400
1400
  </ng-template>
1401
- `, styles: [".results-count{background-color:var(--greywarm-meddark);color:#fff;font-size:17.3px;padding-left:18px}.format-bottom-padding{padding-bottom:25px}:host::ng-deep div[id^=row-]:nth-child(even){background-color:var(--white-medium)!important}:host::ng-deep div[id^=row-]{border:0!important}:host::ng-deep div.row-parent.active{color:#fff!important;background-color:var(--bluewarmvivid-lightest)!important}:host::ng-deep .ri-sidebar-cell{background-color:transparent!important}\n"] }]
1401
+ `, styles: [".results-count{background-color:var(--greywarm-meddark);color:#fff;font-size:17.3px;padding-left:18px}.format-bottom-padding{padding-bottom:25px}:host::ng-deep div[id^=row-]:nth-child(2n){background-color:var(--white-medium)!important}:host::ng-deep div[id^=row-]{border:0!important}:host::ng-deep div.row-parent.active{color:#fff!important;background-color:var(--bluewarmvivid-lightest)!important}:host::ng-deep .ri-sidebar-cell{background-color:transparent!important}\n"] }]
1402
1402
  }], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: i0.Renderer2 }, { type: i0.ComponentFactoryResolver }, { type: i1.NavigationGlobalService }, { type: i2.NavigationService, decorators: [{
1403
1403
  type: Optional
1404
1404
  }] }, { type: i0.ChangeDetectorRef }]; }, propDecorators: { controller: [{
@@ -1483,4 +1483,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImpo
1483
1483
  static: false
1484
1484
  }]
1485
1485
  }] } });
1486
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VhcmNoLWxpc3QuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmF2aWdhdGlvbi9zcmMvY29tcG9uZW50cy9zZWFyY2gtbGlzdC9zZWFyY2gtbGlzdC5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7O0FBQUEsT0FBTyxFQUNMLGlCQUFpQixFQUNqQixTQUFTLEVBQ1Qsd0JBQXdCLEVBQ3hCLFVBQVUsRUFDVixZQUFZLEVBQ1osS0FBSyxFQUNMLFNBQVMsRUFDVCxRQUFRLEVBQ1IsTUFBTSxFQUNOLFNBQVMsRUFDVCxTQUFTLEVBR1QsV0FBVyxFQUNYLFNBQVMsRUFDVCxZQUFZLEVBQ2IsTUFBTSxlQUFlLENBQUM7QUFFdkIsT0FBTyxFQUFDLGVBQWUsRUFBYyxFQUFFLEVBQVUsTUFBTSxNQUFNLENBQUM7QUFDOUQsT0FBTyxFQUFDLEtBQUssRUFBRSxRQUFRLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUMvQyxPQUFPLEVBQUMsV0FBVyxFQUFDLE1BQU0sNEJBQTRCLENBQUM7QUFFdkQsT0FBTyxFQUFhLFlBQVksRUFBRSxVQUFVLEVBQUUsY0FBYyxFQUFFLFlBQVksRUFBYSxNQUFNLDRDQUE0QyxDQUFDO0FBQzFJLE9BQU8sRUFBQyxhQUFhLEVBQUMsTUFBTSxrQ0FBa0MsQ0FBQztBQUUvRCxPQUFPLEVBQUMsWUFBWSxFQUFDLE1BQU0sa0JBQWtCLENBQUM7QUFDOUMsT0FBTyxFQUFDLGlCQUFpQixFQUFDLE1BQU0sbUNBQW1DLENBQUM7QUFDcEUsT0FBTyxFQUFDLFFBQVEsRUFBQyxNQUFNLGFBQWEsQ0FBQztBQUNyQyxPQUFPLEVBQUMsdUJBQXVCLEVBQUMsTUFBTSwwQ0FBMEMsQ0FBQztBQUNqRixPQUFPLEVBQUMsNkJBQTZCLEVBQUMsTUFBTSxvQ0FBb0MsQ0FBQzs7Ozs7OztBQUVqRjs7O0dBR0c7QUF5TUksSUFBTSxtQkFBbUIsR0FBekIsTUFB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bXBvcnQge1xyXG4gIENoYW5nZURldGVjdG9yUmVmLFxyXG4gIENvbXBvbmVudCxcclxuICBDb21wb25lbnRGYWN0b3J5UmVzb2x2ZXIsXHJcbiAgRWxlbWVudFJlZixcclxuICBFdmVudEVtaXR0ZXIsXHJcbiAgSW5wdXQsXHJcbiAgaXNEZXZNb2RlLFxyXG4gIE9wdGlvbmFsLFxyXG4gIE91dHB1dCxcclxuICBRdWVyeUxpc3QsXHJcbiAgUmVuZGVyZXIyLFxyXG4gIFNpbXBsZUNoYW5nZSxcclxuICBTaW1wbGVDaGFuZ2VzLFxyXG4gIFRlbXBsYXRlUmVmLFxyXG4gIFZpZXdDaGlsZCxcclxuICBWaWV3Q2hpbGRyZW5cclxufSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xyXG5cclxuaW1wb3J0IHtCZWhhdmlvclN1YmplY3QsIE9ic2VydmFibGUsIG9mLCBTdWJqZWN0fSBmcm9tIFwicnhqc1wiO1xyXG5pbXBvcnQge2RlbGF5LCBmaW5hbGl6ZX0gZnJvbSBcInJ4anMvb3BlcmF0b3JzXCI7XHJcbmltcG9ydCB7TmdiRHJvcGRvd259IGZyb20gXCJAbmctYm9vdHN0cmFwL25nLWJvb3RzdHJhcFwiO1xyXG5cclxuaW1wb3J0IHtIY2lEYXRhRHRvLCBIY2lGaWx0ZXJEdG8sIEhjaUdyaWREdG8sIEhjaUdyb3VwaW5nRHRvLCBIY2lQYWdpbmdEdG8sIEhjaVNvcnREdG99IGZyb20gXCJAaHVudHNtYW4tY2FuY2VyLWluc3RpdHV0ZS9oY2ktbmctZ3JpZC1kdG9cIjtcclxuaW1wb3J0IHtDb21wb25lbnRUeXBlfSBmcm9tIFwiQGh1bnRzbWFuLWNhbmNlci1pbnN0aXR1dGUvdXRpbHNcIjtcclxuXHJcbmltcG9ydCB7TmF2Q29tcG9uZW50fSBmcm9tIFwiLi4vbmF2LmNvbXBvbmVudFwiO1xyXG5pbXBvcnQge05hdmlnYXRpb25TZXJ2aWNlfSBmcm9tIFwiLi4vLi4vc2VydmljZXMvbmF2aWdhdGlvbi5zZXJ2aWNlXCI7XHJcbmltcG9ydCB7Um93R3JvdXB9IGZyb20gXCIuL3Jvdy1ncm91cFwiO1xyXG5pbXBvcnQge05hdmlnYXRpb25HbG9iYWxTZXJ2aWNlfSBmcm9tIFwiLi4vLi4vc2VydmljZXMvbmF2aWdhdGlvbi1nbG9iYWwuc2VydmljZVwiO1xyXG5pbXBvcnQge1NlYXJjaExpc3RDb250cm9sbGVyQ29tcG9uZW50fSBmcm9tIFwiLi9zZWFyY2gtbGlzdC1jb250cm9sbGVyLmNvbXBvbmVudFwiO1xyXG5cclxuLyoqXHJcbiAqIFNob3dzIGEgbGlzdCBvZiBpdGVtcyB0aGF0IGNhbiBiZSBncm91cGVkIG9yIG5vdCBncm91cGVkLiAgVGhlIGRhdGEgY2FuIGJlIGdlbmVyYXRlZCBmcm9tIGFuIGFycmF5LCBvciBmcm9tIGFuIGV4dGVybmFsXHJcbiAqIGRhdGEgY2FsbCB1c2luZyBqcGEtc2VydmljZXMuXHJcbiAqL1xyXG5AQ29tcG9uZW50VHlwZShcIlNlYXJjaExpc3RDb21wb25lbnRcIilcclxuQENvbXBvbmVudChcclxuICB7XHJcbiAgICBzZWxlY3RvcjogXCJoY2ktc2VhcmNoLWxpc3RcIixcclxuICAgIHN0eWxlczogW1xyXG4gICAgICBgXHJcbiAgICAgICAgLnJlc3VsdHMtY291bnQge1xyXG4gICAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tZ3JleXdhcm0tbWVkZGFyayk7XHJcbiAgICAgICAgICBjb2xvcjogd2hpdGU7XHJcbiAgICAgICAgICBmb250LXNpemU6IDE3LjNweDtcclxuICAgICAgICAgIHBhZGRpbmctbGVmdDogMThweDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC5mb3JtYXQtYm90dG9tLXBhZGRpbmcge1xyXG4gICAgICAgICAgcGFkZGluZy1ib3R0b206IDI1cHg7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICA6aG9zdDo6bmctZGVlcCBkaXZbaWRePSdyb3ctJ106bnRoLWNoaWxkKGV2ZW4pIHtcclxuICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLXdoaXRlLW1lZGl1bSkgIWltcG9ydGFudDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIDpob3N0OjpuZy1kZWVwIGRpdltpZF49J3Jvdy0nXSB7XHJcbiAgICAgICAgICBib3JkZXI6IDAgIWltcG9ydGFudDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIDpob3N0OjpuZy1kZWVwIGRpdi5yb3ctcGFyZW50LmFjdGl2ZSB7XHJcbiAgICAgICAgICBjb2xvcjogd2hpdGUgIWltcG9ydGFudDtcclxuICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWJsdWV3YXJtdml2aWQtbGlnaHRlc3QpICFpbXBvcnRhbnQ7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICA6aG9zdDo6bmctZGVlcCAucmktc2lkZWJhci1jZWxsIHtcclxuICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50ICFpbXBvcnRhbnQ7XHJcbiAgICAgICAgfVxyXG4gICAgICBgXHJcbiAgICBdLFxyXG4gICAgdGVtcGxhdGU6XHJcbiAgICAgIGBcclxuICAgICAgICA8ZGl2XHJcbiAgICAgICAgICBjbGFzcz1cInJlc3VsdHMtY291bnRcIiBbbmdDbGFzc109XCJ7ICdmb3JtYXQtYm90dG9tLXBhZGRpbmcnOiB0aGlzLnNlYXJjaFJlc3VsdE1lc3NhZ2UgPT09ICcnIH1cIj5cclxuICAgICAgICAgIHt7IHRoaXMuc2VhcmNoUmVzdWx0TWVzc2FnZSB9fVxyXG4gICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IHNjcm9sbGFibGVcIj5cclxuICAgICAgICAgIDxkaXYgaWQ9XCJuby1yZXN1bHRzLWZvdW5kXCI+PC9kaXY+XHJcbiAgICAgICAgICA8ZGl2IGlkPVwic2VhcmNoLXRpdGxlXCIgY2xhc3M9XCJkLWZsZXggZmxleC1jb2x1bW5cIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBwbC0zXCI+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8ZGl2IGlkPVwicmVzdWx0LWxpc3RcIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBmbGV4LWNvbHVtblwiIFtjbGFzcy55LWhpZGRlbl09XCJzZWxlY3RlZFJvd0dyb3VwXCI+XHJcbiAgICAgICAgICAgICAgPGhjaS1idXN5IFtidXN5U3ViamVjdHNdPVwibG9hZGluZ1N1YmplY3RzXCIgcGFyZW50U2VsZWN0b3I9XCIuc2Nyb2xsYWJsZVwiIFtpY29uXT1cImJ1c3lJY29uXCI+PC9oY2ktYnVzeT5cclxuICAgICAgICAgICAgICA8IS0tIE5vIGdyb3VwaW5nIC0tPlxyXG4gICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhZ3JvdXBpbmcuZmllbGRzIHx8IGdyb3VwaW5nLmZpZWxkcy5sZW5ndGggPT09IDBcIj5cclxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IHJvd0dyb3VwIG9mIHZpZXdEYXRhXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJyb3V0ZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgI3Jvd1BhcmVudFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgW2lkXT1cImdldFJvd0lkKHJvd0dyb3VwLnJnUm93c1swXSlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJyb3ctcGFyZW50IG5hdi1pdGVtXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgIFtyb3V0ZXJMaW5rXT1cInJvdXRlKHJvd0dyb3VwLCByb3dHcm91cC5yZ1Jvd3NbMF0pXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgIHJvdXRlckxpbmtBY3RpdmU9XCJhY3RpdmVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgW3JvdXRlckxpbmtBY3RpdmVPcHRpb25zXT1cIntjaGFuZ2VEZXRlY3Rpb246IHJvd1JlZnJlc2h9XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJvblJvd0NsaWNrKCRldmVudCwgY21wdCwgcm93R3JvdXAsIHJvd0dyb3VwLnJnUm93c1swXSlcIj5cclxuICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJpdGVtVGVtcGxhdGU7IGNvbnRleHQ6IHtyb3c6IHJvd0dyb3VwLnJnUm93c1swXX1cIj48L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhcm91dGVcIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2ICNyb3dQYXJlbnRcclxuICAgICAgICAgICAgICAgICAgICAgICAgIFtpZF09XCJnZXRSb3dJZChyb3dHcm91cC5yZ1Jvd3NbMF0pXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwicm93LXBhcmVudCBuYXYtaXRlbVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwib25Sb3dDbGljaygkZXZlbnQsIGNtcHQsIHJvd0dyb3VwLCByb3dHcm91cC5yZ1Jvd3NbMF0pXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiaXRlbVRlbXBsYXRlOyBjb250ZXh0OiB7cm93OiByb3dHcm91cC5yZ1Jvd3NbMF19XCI+PC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcblxyXG4gICAgICAgICAgICAgIDwhLS0gR3JvdXBpbmcgd2l0aCBpbmxpbmUgZXhwYW5zaW9uIC0tPlxyXG4gICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJncm91cGluZy5maWVsZHMgJiYgZ3JvdXBpbmcuZmllbGRzLmxlbmd0aCA+IDAgJiYgIXNlbGVjdGVkUm93R3JvdXBcIj5cclxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IHJvd0dyb3VwIG9mIHZpZXdEYXRhOyBsZXQgaSA9IGluZGV4O1wiPlxyXG4gICAgICAgICAgICAgICAgICA8ZGl2IFtpZF09XCJnZXRSb3dHcm91cElkKHJvd0dyb3VwKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJncm91cC1wYXJlbnQgbmF2LWl0ZW0gZ3JvdXAge3tncm91cENsYXNzfX1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJvbkdyb3VwQ2xpY2soJGV2ZW50LCBjbXB0LCByb3dHcm91cClcIj5cclxuICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyXHJcbiAgICAgICAgICAgICAgICAgICAgICAqbmdUZW1wbGF0ZU91dGxldD1cImdyb3VwVGVtcGxhdGU7IGNvbnRleHQ6IHtyb3dHcm91cDogcm93R3JvdXAsIGNtcHQ6IGNtcHR9XCI+PC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwicm93R3JvdXAucmdFeHBhbmRlZFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJuYXYtY29udGFpbmVyXCIgKGNsaWNrKT1cIm9uR3JvdXBDbGljaygkZXZlbnQsIGNtcHQsIHJvd0dyb3VwKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgcm93IG9mIHJvd0dyb3VwLnJnUm93c1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwicm91dGVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICNyb3dQYXJlbnRcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtpZF09XCJnZXRSb3dJZChyb3cpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwicm93LXBhcmVudCBuYXYtaXRlbVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcm91dGVyTGlua109XCJyb3V0ZShyb3dHcm91cCwgcm93KVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByb3V0ZXJMaW5rQWN0aXZlPVwiYWN0aXZlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtyb3V0ZXJMaW5rQWN0aXZlT3B0aW9uc109XCJ7Y2hhbmdlRGV0ZWN0aW9uOiByb3dSZWZyZXNofVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwib25Sb3dDbGljaygkZXZlbnQsIGNtcHQsIHJvd0dyb3VwLCByb3cpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiaXRlbVRlbXBsYXRlOyBjb250ZXh0OiB7cm93OiByb3d9XCI+PC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIXJvdXRlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAjcm93UGFyZW50XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbaWRdPVwiZ2V0Um93SWQocm93KVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInJvdy1wYXJlbnQgbmF2LWl0ZW1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIm9uUm93Q2xpY2soJGV2ZW50LCBjbXB0LCByb3dHcm91cCwgcm93KVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cIml0ZW1UZW1wbGF0ZTsgY29udGV4dDoge3Jvdzogcm93fVwiPjwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG5cclxuICAgICAgICAgICAgICA8IS0tIEdyb3VwaW5nIHdpdGggc2VwYXJhdGUgaW5kaXZpZHVhbCBleHBhbnNpb24gLS0+XHJcbiAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cImdyb3VwaW5nLmZpZWxkcyAmJiBncm91cGluZy5maWVsZHMubGVuZ3RoID4gMCAmJiBzZWxlY3RlZFJvd0dyb3VwXCJcclxuICAgICAgICAgICAgICAgICAgICNncm91cFNlbGVjdGVkUGFyZW50XHJcbiAgICAgICAgICAgICAgICAgICBjbGFzcz1cImdyb3VwLXNlbGVjdGVkLXBhcmVudCBmbGV4LWNvbHVtbiB7e2dyb3VwQ2xhc3N9fVwiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBbaWRdPVwiZ2V0Um93R3JvdXBJZChzZWxlY3RlZFJvd0dyb3VwKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZ3JvdXAtcGFyZW50IG5hdi1pdGVtIGdyb3VwIGFjdGl2ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJvbkdyb3VwQ2xpY2soJGV2ZW50LCBjbXB0LCBzZWxlY3RlZFJvd0dyb3VwKVwiPlxyXG4gICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyXHJcbiAgICAgICAgICAgICAgICAgICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJncm91cFNlbGVjdGVkVGVtcGxhdGU7IGNvbnRleHQ6IHtyb3dHcm91cDogc2VsZWN0ZWRSb3dHcm91cCwgY21wdDogY21wdH1cIj48L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICAgIDxkaXYgI3NlbGVjdGVkUm93R3JvdXBDb250YWluZXIgaWQ9XCJzZWxlY3RlZC1ncm91cC1jb250YWluZXJcIiBjbGFzcz1cImQtZmxleCBmbGV4LWNvbHVtbiB5LWF1dG9cIj5cclxuICAgICAgICAgICAgICAgICAgPGRpdiBpZD1cImlubmVyUm93R3JvdXBDb250YWluZXJcIiBjbGFzcz1cImQtZmxleCBmbGV4LWNvbHVtblwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IHJvdyBvZiBzZWxlY3RlZFJvd0dyb3VwLnJnUm93c1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInJvdXRlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgI3Jvd1BhcmVudFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtpZF09XCJnZXRSb3dJZChyb3cpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInJvdy1wYXJlbnQgbmF2LWl0ZW1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtyb3V0ZXJMaW5rXT1cInJvdXRlKHJvd0dyb3VwLCByb3cpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICByb3V0ZXJMaW5rQWN0aXZlPVwiYWN0aXZlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwib25Sb3dDbGljaygkZXZlbnQsIGNtcHQsIHJvd0dyb3VwLCByb3cpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cIml0ZW1UZW1wbGF0ZTsgY29udGV4dDoge3Jvdzogcm93fVwiPjwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFyb3V0ZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICNyb3dQYXJlbnRcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbaWRdPVwiZ2V0Um93SWQocm93KVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJyb3ctcGFyZW50IG5hdi1pdGVtXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwib25Sb3dDbGljaygkZXZlbnQsIGNtcHQsIHJvd0dyb3VwLCByb3cpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cIml0ZW1UZW1wbGF0ZTsgY29udGV4dDoge3Jvdzogcm93fVwiPjwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwhLS0gUGFnaW5nIGZvb3RlciAtLT5cclxuICAgICAgICA8ZGl2ICpuZ0lmPVwicGFnaW5nLnBhZ2VTaXplID4gMFwiIGNsYXNzPVwiZC1mbGV4IGZsZXgtc2hyaW5rLTAgcGFnaW5nLWZvb3RlciBqdXN0aWZ5LWNvbnRlbnQtYmV0d2VlbiBwbC0zIHByLTNcIlxyXG4gICAgICAgICAgICAgc3R5bGU9XCJtaW4taGVpZ2h0OiAxcmVtOyBhbGlnbi1pdGVtczogY2VudGVyO1wiPlxyXG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFzZWxlY3RlZFJvd0dyb3VwXCI+XHJcbiAgICAgICAgICAgIDxkaXYgKGNsaWNrKT1cImRvUGFnZUZpcnN0KClcIiBjbGFzcz1cImQtZmxleCBtdC0xIG1iLTFcIiBbY2xhc3MuZGlzYWJsZWRdPVwicGFnaW5nLnBhZ2UgPT09IDBcIj48aVxyXG4gICAgICAgICAgICAgIGNsYXNzPVwiZmFzIGZhLWZhc3QtYmFja3dhcmQgZmEteHNcIj48L2k+PC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgKGNsaWNrKT1cImRvUGFnZVByZXZpb3VzKClcIiBjbGFzcz1cImQtZmxleCBtdC0xIG1iLTFcIiBbY2xhc3MuZGlzYWJsZWRdPVwicGFnaW5nLnBhZ2UgPT09IDBcIj48aVxyXG4gICAgICAgICAgICAgIGNsYXNzPVwiZmFzIGZhLWJhY2t3YXJkIGZhLXhzXCI+PC9pPjwvZGl2PlxyXG4gICAgICAgICAgICA8ZGl2IHN0eWxlPVwiZm9udC1zaXplOiAwLjhyZW07XCI+e3twYWdpbmcucGFnZSArIDF9fSBvZiB7e3BhZ2luZy5udW1QYWdlc319PC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgKGNsaWNrKT1cImRvUGFnZU5leHQoKVwiIGNsYXNzPVwiZC1mbGV4IG10LTEgbWItMVwiIFtjbGFzcy5kaXNhYmxlZF09XCJwYWdpbmcucGFnZSA9PT0gcGFnaW5nLm51bVBhZ2VzIC0gMVwiPlxyXG4gICAgICAgICAgICAgIDxpXHJcbiAgICAgICAgICAgICAgICBjbGFzcz1cImZhcyBmYS1mb3J3YXJkIGZhLXhzXCI+PC9pPjwvZGl2PlxyXG4gICAgICAgICAgICA8ZGl2IChjbGljayk9XCJkb1BhZ2VMYXN0KClcIiBjbGFzcz1cImQtZmxleCBtdC0xIG1iLTFcIiBbY2xhc3MuZGlzYWJsZWRdPVwicGFnaW5nLnBhZ2UgPT09IHBhZ2luZy5udW1QYWdlcyAtIDFcIj5cclxuICAgICAgICAgICAgICA8aVxyXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJmYXMgZmEtZmFzdC1mb3J3YXJkIGZhLXhzXCI+PC9pPjwvZGl2PlxyXG4gICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgIDwhLS0gRGVmYXVsdCB0ZW1wbGF0ZSBmb3IgYSBncm91cCAtLT5cclxuICAgICAgICA8bmctdGVtcGxhdGUgI2RlZmF1bHRHcm91cFRlbXBsYXRlIGxldC1yb3dHcm91cD1cInJvd0dyb3VwXCI+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGZsZXgtZ3Jvdy0xIHBsLTJcIiBzdHlsZT1cImFsaWduLWl0ZW1zOiBjZW50ZXI7XCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb250LXdlaWdodC1ib2xkIG1yLWF1dG9cIj57e2dldEdyb3VwRGlzcGxheShyb3dHcm91cCl9fTwvZGl2PlxyXG4gICAgICAgICAgICA8bmctY29udGFpbmVyIGNsYXNzPVwiZC1mbGV4IG1yLTFcIiBzdHlsZT1cImFsaWduLWl0ZW1zOiBjZW50ZXI7XCI+XHJcbiAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cInJvd0dyb3VwLnJnRXhwYW5kZWQgPT09IHRydWU7IGVsc2UgcGx1c1RlbXBsYXRlXCI+XHJcbiAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImZhcyBmYS1taW51cyBmYS1zbSBtci0xXCI+PC9pPlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjcGx1c1RlbXBsYXRlPlxyXG4gICAgICAgICAgICAgICAgPGRpdj5cclxuICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmYXMgZmEtcGx1cyBmYS1zbSBtci0xXCI+PC9pPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgICAgICAgICAoe3tyb3dHcm91cC5yZ0NvdW50fX0pXHJcbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuXHJcbiAgICAgICAgPCEtLSBEZWZhdWx0IHRlbXBsYXRlIGZvciBhbiBpbmRpdmlkdWFsIHNlbGVjdGVkIGdyb3VwIC0tPlxyXG4gICAgICAgIDxuZy10ZW1wbGF0ZSAjZGVmYXVsdEdyb3VwU2VsZWN0ZWRUZW1wbGF0ZSBsZXQtcm93R3JvdXA9XCJyb3dHcm91cFwiPlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBmbGV4LWdyb3ctMSBwbC0yXCIgc3R5bGU9XCJhbGlnbi1pdGVtczogY2VudGVyO1wiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwibXItM1wiPlxyXG4gICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmFzIGZhLWxldmVsLXVwLWFsdFwiIGRhdGEtZmEtdHJhbnNmb3JtPVwiZmxpcC1oXCI+PC9pPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvbnQtd2VpZ2h0LWJvbGQgbXItYXV0b1wiPnt7Z2V0R3JvdXBEaXNwbGF5KHJvd0dyb3VwKX19PC9kaXY+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICBgXHJcbiAgfVxyXG4pXHJcbmV4cG9ydCBjbGFzcyBTZWFyY2hMaXN0Q29tcG9uZW50IGV4dGVuZHMgTmF2Q29tcG9uZW50IHtcclxuXHJcbiAgc2VhcmNoUmVzdWx0TWVzc2FnZSA9IFwiXCI7XHJcblxyXG4gIC8vIFRoZSBkYXRhIHRoYXQgaXMgYWN0dWFsbHkgcmVuZGVyZWQuXHJcbiAgdmlld0RhdGE6IFJvd0dyb3VwW107XHJcblxyXG4gIC8vIEEgcmVmZXJlbmNlIHRvIHRoZSBzZWFyY2ggbGlzdCBjb250cm9sbGVyIGlmIGFwcGxpY2FibGUuXHJcbiAgQElucHV0KCkgY29udHJvbGxlcjogU2VhcmNoTGlzdENvbnRyb2xsZXJDb21wb25lbnQ7XHJcblxyXG4gIC8vIEFuIGFycmF5IG9mIGRhdGEuXHJcbiAgQElucHV0KFwiZGF0YVwiKSBib3VuZERhdGE6IE9iamVjdFtdO1xyXG5cclxuICAvLyBBIHN1YmplY3QgdGhhdCByZXByZXNlbnRzIGFuIGFycmF5IG9mIGRhdGEuXHJcbiAgQElucHV0KFwiZGF0YVN1YmplY3RcIikgZGF0YVN1YmplY3Q6IEJlaGF2aW9yU3ViamVjdDxPYmplY3RbXT47XHJcblxyXG4gIC8vIEEgZnVuY3Rpb24gd2hpY2ggdGFrZXMgaW4gYSBIY2lHcmlkRHRvIGFuZCByZXR1cm5zIGEgSGNpRGF0YUR0byB3aGljaCB3cmFwcyBhbiBhcnJheSBvZiBkYXRhLlxyXG4gIEBJbnB1dChcImRhdGFDYWxsXCIpIGV4dGVybmFsRGF0YUNhbGw6IChkdG86IEhjaUdyaWREdG8pID0+IE9ic2VydmFibGU8SGNpRGF0YUR0bz47XHJcblxyXG4gIC8vIEFuIGFycmF5IG9mIHN1YmplY3RzIHdpdGggYm9vbGVhbnMgdG8gY29udHJvbCB0aGUgaGNpLWJ1c3kgb3ZlcmxheWluZyB0aGUgc2VhcmNoLWxpc3QuXHJcbiAgQElucHV0KCkgbG9hZGluZ1N1YmplY3RzOiBTdWJqZWN0PGJvb2xlYW4+W107XHJcblxyXG4gIC8vIEFuIGFycmF5IG9mIGJvb2xlYW5zIHRvIGNvbnRyb2wgdGhlIGhjaS1idXN5IG92ZXJsYXlpbmcgdGhlIHNlYXJjaC1saXN0LlxyXG4gIEBJbnB1dCgpIGxvYWRpbmc6IGJvb2xlYW5bXSA9IFtmYWxzZV07XHJcblxyXG4gIC8vIElmIGNsaWNraW5nIGEgcm93IGNoYW5nZXMgYSByb3V0ZSwgdGhpcyBmdW5jdGlvbiBzcGVjaWZpZXMgdGhlIHJvdXRlIHRvIHVzZS5cclxuICBASW5wdXQoKSByb3V0ZTogKHJvd0dyb3VwOiBhbnksIHJvdzogYW55KSA9PiBhbnlbXTtcclxuXHJcbiAgLy8gRXhwYW5kIHRoZSBzZWxlY3RlZCByb3cgZ3JvdXAgYXMgaXRzIG93biBzY3JlZW4sIG9yIHNob3cgcm93cyB1bmRlciBzZWxlY3RlZCByb3cgZ3JvdXBzIGluIHRoZSBzYW1lIHZpZXcuXHJcbiAgQElucHV0KCkgaW5saW5lRXhwYW5kOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gIC8vIFdpdGhvdXQgYW55IG90aGVyIG1ldGFkYXRhIGZvciB3aGF0IGEgcm93IGlzLCBwcm92aWRlIHRoZSBmaWVsZCB0byBiZSB1c2VkIGZvciB0aGUgaWQuXHJcbiAgLy8gVGhpcyBpcyBhY3R1YWxseSB0aGUgZmllbGQgdGhhdCBoYXMgdGhlIChkZWZpbmVkKSByb3dJZCAtLSB3aGF0ZXZlciBpdCBpcyB1bmRlciBkaWZmZXJlbnRcclxuICAvLyBzdHJ1Y3R1cmVzOiBpZFBhdGllbnQsIGlkTWVkaWNhbEV2ZW50IGV0Y1xyXG4gIEBJbnB1dCgpIHJvd0lkOiBhbnk7XHJcblxyXG4gIC8vIENzcyBjbGFzcyBhcHBsaWVkIHRvIHRoZSByb3cgZ3JvdXAgcGFyZW50LlxyXG4gIEBJbnB1dCgpIGdyb3VwQ2xhc3M6IHN0cmluZyA9IFwiXCI7XHJcblxyXG4gIC8vIENzcyBjbGFzcyBhcHBsaWVkIHRvIHRoZSByb3cgcGFyZW50LlxyXG4gIEBJbnB1dCgpIHJvd0NsYXNzOiBzdHJpbmcgPSBcIlwiO1xyXG5cclxuICAvLyBBIHRlbXBsYXRlIGZvciBob3cgdG8gZGlzcGxheSByb3cgZ3JvdXAgaW5mbyBpZiB1c2luZyB0aGUgZGVmYXVsdCB0ZW1wbGF0ZS4gIGUuZy4gXCJsYXN0TmFtZSwgZmlyc3ROYW1lXCIgZmllbGQgbmFtZXMgZ2V0IHJlcGxhY2VkIHdpdGggdmFsdWVzLlxyXG4gIEBJbnB1dCgpIGdyb3VwRGlzcGxheTogc3RyaW5nO1xyXG5cclxuICAvLyBUT0RPOiBSZWltcGxlbWVudFxyXG4gIEBJbnB1dCgpIGNsb3NlT3RoZXJzOiBib29sZWFuID0gdHJ1ZTtcclxuXHJcbiAgLy8gVGhlIGxpc3Qgb2YgZmllbGRzIHRvIGdyb3VwIGJ5LlxyXG4gIEBJbnB1dCgpIGdyb3VwaW5nRmllbGRzOiBzdHJpbmdbXSA9IFtdO1xyXG5cclxuICAvLyBUT0RPOiBSZWltcGxlbWVudCBpZiB3ZSB3YW50IHVzZXJzIHRvIGJlIGFibGUgdG8gY29udHJvbCBncm91cGluZy5cclxuICBASW5wdXQoKSBncm91cEJ5QWxsb3dlZEZpZWxkczogc3RyaW5nW10gPSBbXTtcclxuXHJcbiAgLy8gVGhlIHBhZ2Ugc2l6ZSBvZiByb3cgZ3JvdXBzIG9yIHJvd3MgaWYgbm8gZ3JvdXBpbmcuXHJcbiAgQElucHV0KCkgcGFnZVNpemU6IG51bWJlcjtcclxuXHJcbiAgLy8gVGhlIHBhZ2Ugc2l6ZSBvZiByb3dzIGluIGEgc2VsZWN0ZWQgZ3JvdXAuXHJcbiAgQElucHV0KCkgZ3JvdXBQYWdlU2l6ZTogbnVtYmVyID0gNTA7XHJcblxyXG4gIC8vIFRoZSBudW1iZXIgb2YgcGFnZXMgb2Ygcm93cyB0byBjYWNoZSBpbnRlcm5hbGx5IGJlZm9yZSBhbiBleHRlcm5hbCBjYWxsIGlzIG1hZGUuXHJcbiAgQElucHV0KCkgZ3JvdXBDYWNoZU51bVBhZ2VzOiBudW1iZXI7XHJcblxyXG4gIC8vIEEgcmVmZXJlbmNlIHRvIGEgcGFyZW50IGRyb3Bkb3duIGlmIGFwcGxpY2FibGUuXHJcbiAgQElucHV0KCkgZHJvcGRvd246IE5nYkRyb3Bkb3duO1xyXG5cclxuICAvL1doaWNoIGljb24gdG8gdXNlIGZvciB0aGUgYnVzeSBzcGlubmVyXHJcbiAgQElucHV0KCkgYnVzeUljb246IHN0cmluZyA9IFwiaGNpIGZhLWNvcmUgZmEtc3BpblwiO1xyXG5cclxuICBASW5wdXQoKSBzaG93UmVzdWx0c0NvdW50OiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gIC8vIElmIG5vIG9uR3JvdXBDbGljayBmdW5jdGlvbiBpcyBwcm92aWRlZCwgdGhpcyBpcyB1c2VkLiAgVGhlIG92ZXJyaWRpbmcgZnVuY3Rpb24gc2hvdWxkIHN0aWxsIGNhbGwgdGhpcy5cclxuICBkZWZhdWx0R3JvdXBDbGljazogKGV2ZW50OiBNb3VzZUV2ZW50LCBjbXB0OiBTZWFyY2hMaXN0Q29tcG9uZW50LCByb3dHcm91cDogUm93R3JvdXApID0+IHZvaWQgPSAoZXZlbnQ6IE1vdXNlRXZlbnQsIGNtcHQ6IFNlYXJjaExpc3RDb21wb25lbnQsIHJvd0dyb3VwOiBSb3dHcm91cCkgPT4ge1xyXG4gICAgY21wdC5zZXRHcm91cEV4cGFuZGVkKGV2ZW50LCByb3dHcm91cCk7XHJcblxyXG4gICAgdGhpcy5ncm91cENsaWNrLmVtaXQoe1xyXG4gICAgICBldmVudDogZXZlbnQsXHJcbiAgICAgIHJvd0dyb3VwOiByb3dHcm91cFxyXG4gICAgfSk7XHJcbiAgfTtcclxuXHJcbiAgQElucHV0KCkgb25Hcm91cENsaWNrOiAoZXZlbnQ6IE1vdXNlRXZlbnQsIGNtcHQ6IFNlYXJjaExpc3RDb21wb25lbnQsIHJvd0dyb3VwOiBSb3dHcm91cCkgPT4gdm9pZDtcclxuXHJcbiAgLy8gSWYgbm8gb25Sb3dDbGljayBmdW5jdGlvbiBpcyBwcm92aWRlZCwgdGhpcyBpcyB1c2VkLiAgVGhlIG92ZXJyaWRpbmcgZnVuY3Rpb24gc2hvdWxkIHN0aWxsIGNhbGwgdGhpcy5cclxuICBkZWZhdWx0Um93Q2xpY2s6IChldmVudDogTW91c2VFdmVudCwgY21wdDogU2VhcmNoTGlzdENvbXBvbmVudCwgcm93R3JvdXA6IFJvd0dyb3VwLCByb3c6IGFueSkgPT4gdm9pZCA9IChldmVudDogTW91c2VFdmVudCwgY21wdDogU2VhcmNoTGlzdENvbXBvbmVudCwgcm93R3JvdXA6IFJvd0dyb3VwLCByb3c6IGFueSkgPT4ge1xyXG4gICAgaWYgKHRoaXMuZHJvcGRvd24pIHtcclxuICAgICAgdGhpcy5kcm9wZG93bi5jbG9zZSgpO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuc2VsZWN0ZWRSb3cgPSByb3c7XHJcblxyXG4gICAgdGhpcy5yb3dDbGljay5lbWl0KHtcclxuICAgICAgZXZlbnQ6IGV2ZW50LFxyXG4gICAgICByb3c6IHJvdyxcclxuICAgICAgcm93R3JvdXA6IHJvd0dyb3VwXHJcbiAgICB9KTtcclxuXHJcbiAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcclxuICB9O1xyXG4gIEBJbnB1dCgpIG9uUm93Q2xpY2s6IChldmVudDogTW91c2VFdmVudCwgY21wdDogU2VhcmNoTGlzdENvbXBvbmVudCwgcm93R3JvdXA6IFJvd0dyb3VwLCByb3c6IGFueSkgPT4gdm9pZDtcclxuXHJcbiAgQElucHV0KCkgZ3JvdXBUZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PjtcclxuICBASW5wdXQoKSBncm91cFNlbGVjdGVkVGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT47XHJcbiAgQElucHV0KCkgaXRlbVRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+O1xyXG5cclxuICBASW5wdXQoKSBvbkdyb3VwQ2xvc2U6IEZ1bmN0aW9uO1xyXG5cclxuICBAT3V0cHV0KCkgZ3JvdXBDbGljazogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcclxuICBAT3V0cHV0KCkgcm93Q2xpY2s6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XHJcbiAgQE91dHB1dCgpIGRhdGFDaGFuZ2U6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XHJcblxyXG4gIEBWaWV3Q2hpbGQoXCJkZWZhdWx0R3JvdXBUZW1wbGF0ZVwiLCB7cmVhZDogVGVtcGxhdGVSZWYsIHN0YXRpYzogdHJ1ZX0pIGRlZmF1bHRHcm91cFRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+O1xyXG4gIEBWaWV3Q2hpbGQoXCJkZWZhdWx0R3JvdXBTZWxlY3RlZFRlbXBsYXRlXCIsIHtcclxuICAgIHJlYWQ6IFRlbXBsYXRlUmVmLFxyXG4gICAgc3RhdGljOiB0cnVlXHJcbiAgfSkgZGVmYXVsdEdyb3VwU2VsZWN0ZWRUZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PjtcclxuXHJcbiAgc2VsZWN0ZWRSb3c6IGFueTtcclxuICBzZWxlY3RlZFJvd0dyb3VwOiBSb3dHcm91cDtcclxuICBzZWxlY3RlZFJvd0dyb3VwQ29udGFpbmVyOiBIVE1MRWxlbWVudDtcclxuICBpbm5lclJvd0dyb3VwQ29udGFpbmVyOiBIVE1MRWxlbWVudDtcclxuXHJcbiAgLy8gR3JpZCBEVE8gaW5mbyBuZWVkZWQgdG8gYnVpbGQgZXh0ZXJuYWwgZGF0YSByZXF1ZXN0cy5cclxuICBzb3J0czogSGNpU29ydER0b1tdID0gW107XHJcbiAgZmlsdGVyczogSGNpRmlsdGVyRHRvW10gPSBbXTtcclxuICBwYWdpbmc6IEhjaVBhZ2luZ0R0byA9IG5ldyBIY2lQYWdpbmdEdG8oMCwgLTEpO1xyXG4gIGdyb3VwaW5nOiBIY2lHcm91cGluZ0R0byA9IG5ldyBIY2lHcm91cGluZ0R0byhbXSk7XHJcblxyXG4gIC8vZ2xvYmFsUm93R3JvdXBNYXA6IE1hcDxzdHJpbmcsIG51bWJlcj4gPSBuZXcgTWFwPHN0cmluZywgbnVtYmVyPigpO1xyXG4gIGdyb3VwZWREYXRhU2V0ID0gW107XHJcblxyXG4gIHBhZ2luZ1N1YmplY3Q6IFN1YmplY3Q8SGNpUGFnaW5nRHRvPiA9IG5ldyBCZWhhdmlvclN1YmplY3Q8SGNpUGFnaW5nRHRvPih0aGlzLnBhZ2luZyk7XHJcblxyXG4gIC8vIEEgZHVtbXkgbnVtYmVyIHRoYXQgaW5jcmVtZW50cyBiYXNlZCBvbiBzZWxlY3Rpb24gY2hhbmdlcy4gIEZvcmNlcyByb3V0ZXJMaW5rQWN0aXZlIHRvIHJlY2hlY2suXHJcbiAgcm93UmVmcmVzaDogbnVtYmVyID0gMDtcclxuXHJcbiAgYnVzeTogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICBsYXN0U2Nyb2xsVG9wOiBudW1iZXIgPSAtMTtcclxuICBsYXN0U2Nyb2xsUG9zaXRpb246IG51bWJlciA9IDE7XHJcbiAgc2V0U2Nyb2xsVG9wOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gIGNtcHQ6IFNlYXJjaExpc3RDb21wb25lbnQgPSB0aGlzO1xyXG5cclxuICBsYXN0RXZlbnQ6IGFueTtcclxuXHJcbiAgY29uc3RydWN0b3IoZWxlbWVudFJlZjogRWxlbWVudFJlZixcclxuICAgICAgICAgICAgICByZW5kZXJlcjogUmVuZGVyZXIyLFxyXG4gICAgICAgICAgICAgIHJlc29sdmVyOiBDb21wb25lbnRGYWN0b3J5UmVzb2x2ZXIsXHJcbiAgICAgICAgICAgICAgbmF2aWdhdGlvbkdsb2JhbFNlcnZpY2U6IE5hdmlnYXRpb25HbG9iYWxTZXJ2aWNlLFxyXG4gICAgICAgICAgICAgIEBPcHRpb25hbCgpIG5hdmlnYXRpb25TZXJ2aWNlOiBOYXZpZ2F0aW9uU2VydmljZSxcclxuICAgICAgICAgICAgICBjaGFuZ2VEZXRlY3RvclJlZjogQ2hhbmdlRGV0ZWN0b3JSZWYpIHtcclxuICAgIHN1cGVyKGVsZW1lbnRSZWYsIHJlbmRlcmVyLCByZXNvbHZlciwgbmF2aWdhdGlvblNlcnZpY2UsIGNoYW5nZURldGVjdG9yUmVmKTtcclxuXHJcbiAgICBpZiAoIW5hdmlnYXRpb25TZXJ2aWNlKSB7XHJcbiAgICAgIHRoaXMubmF2aWdhdGlvblNlcnZpY2UgPSBuZXcgTmF2aWdhdGlvblNlcnZpY2UobmF2aWdhdGlvbkdsb2JhbFNlcnZpY2UpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLm5hdmlnYXRpb25TZXJ2aWNlLmdldElkKCkgPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICB0aGlzLmlzUm9vdCA9IHRydWU7XHJcbiAgICAgIHRoaXMuc2V0Q29uZmlnKHt9KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFJldHVybiB0aGUgaWQgZm9yIHRoZSByb3cgZ3JvdXAgYmFzZWQgdXBvbiB0aGUgZ3JvdXAga2V5IG9yIGlmIHVuZGVmaW5lZCwgdGhlIGZpcnN0IHJvdydzIGlkLiAgZS5nLiBcInJvdy1ncm91cC1ib2Itc21pdGhcIlxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtSb3dHcm91cH0gcm93R3JvdXBcclxuICAgKiBAcmV0dXJucyB7c3RyaW5nfVxyXG4gICAqL1xyXG4gIGdldFJvd0dyb3VwSWQocm93R3JvdXA6IFJvd0dyb3VwKTogc3RyaW5nIHtcclxuICAgIGlmIChyb3dHcm91cC5yZ0tleSkge1xyXG4gICAgICByZXR1cm4gXCJyb3ctZ3JvdXAtXCIgKyByb3dHcm91cC5yZ0tleTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGxldCByb3dJZDogc3RyaW5nID0gdGhpcy5nZXRSb3dJZChyb3dHcm91cC5yZ1Jvd3NbMF0pO1xyXG4gICAgICByZXR1cm4gcm93SWQucmVwbGFjZShcInJvdy1cIiwgXCJyb3ctZ3JvdXAtXCIpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUmV0dXJuIHRoZSByb3cgaWQuICBlLmcuIFwicm93LTFcIi5cclxuICAgKlxyXG4gICAqIEBwYXJhbSByb3dcclxuICAgKiBAcmV0dXJucyB7c3RyaW5nfVxyXG4gICAqL1xyXG4gIGdldFJvd0lkKHJvdzogYW55KTogc3RyaW5nIHtcclxuICAgIGlmICh0aGlzLnJvd0lkKSB7XHJcbiAgICAgIHJldHVybiBcInJvdy1cIiArIDxzdHJpbmc+PGFueT5yb3dbdGhpcy5yb3dJZF07XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICByZXR1cm4gXCJyb3ctdW5kZWZpbmVkXCI7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBPbiBpbml0LCBsaXN0ZW4gZm9yIGxvYWRpbmcgc3ViamVjdHMgYW5kIGxpc3RlbiBmb3IgcGFnZSBjaGFuZ2VzLlxyXG4gICAqL1xyXG4gIG5nT25Jbml0KCk6IHZvaWQge1xyXG4gICAgc3VwZXIubmdPbkluaXQoKTtcclxuXHJcbiAgICBpZiAodGhpcy5sb2FkaW5nU3ViamVjdHMpIHtcclxuICAgICAgdGhpcy5sb2FkaW5nU3ViamVjdHNbMF0uc3Vic2NyaWJlKChidXN5OiBib29sZWFuKSA9PiB7XHJcbiAgICAgICAgdGhpcy5idXN5ID0gYnVzeTtcclxuICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5wYWdpbmdTdWJqZWN0LnN1YnNjcmliZSgocGFnaW5nOiBIY2lQYWdpbmdEdG8pID0+IHtcclxuICAgICAgdGhpcy5wYWdpbmcgPSBwYWdpbmc7XHJcbiAgICAgIHRoaXMuc2V0RGF0YSgpO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBDYWxsZWQgd2hlbiBpbnB1dHMgY2hhbmdlLlxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtTaW1wbGVDaGFuZ2VzfSBjaGFuZ2VzXHJcbiAgICovXHJcbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xyXG4gICAgc3VwZXIubmdPbkNoYW5nZXMoY2hhbmdlcyk7XHJcbiAgICBpZiAoY2hhbmdlc1tcImdyb3VwaW5nRmllbGRzXCJdKSB7XHJcbiAgICAgIGxldCBjaGFuZ2U6IFNpbXBsZUNoYW5nZSA9IDxTaW1wbGVDaGFuZ2U+Y2hhbmdlc1tcImdyb3VwaW5nRmllbGRzXCJdO1xyXG4gICAgICBpZiAoY2hhbmdlLmN1cnJlbnRWYWx1ZSkge1xyXG4gICAgICAgIHRoaXMuZ3JvdXBpbmcuc2V0RmllbGRzKGNoYW5nZS5jdXJyZW50VmFsdWUpO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMuZ3JvdXBpbmcuc2V0RmllbGRzKFtdKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogU2V0IGRhdGEgb25seSB3aGVuIHRoZSBjb21wb25lbnQgaGFzIGZ1bGx5IGluaXRpYWxpemVkIGFuZCBpcyByZW5kZXJlZC5cclxuICAgKi9cclxuICBjaGVja0luaXRpYWxpemVkKCkge1xyXG4gICAgaWYgKHRoaXMuYWZ0ZXJWaWV3SW5pdCkge1xyXG4gICAgICB0aGlzLmluaXRpYWxpemVkID0gdHJ1ZTtcclxuICAgICAgdGhpcy51cGRhdGVDb25maWcodGhpcy5jb25maWcpO1xyXG4gICAgICB0aGlzLnBvc3RJbml0KCk7XHJcblxyXG4gICAgICBpZiAodGhpcy5kYXRhU3ViamVjdCkge1xyXG4gICAgICAgIC8vTWF5IGFzIHdlbGwgbWFrZSBpdCBzcGluIHdoaWxlIHByb2Nlc3NpbmcsIGFzIHdlbGwgYXMgbG9hZGluZy4gT3RoZXJ3aXNlIGl0IGxvb2tzIGZyb3plblxyXG4gICAgICAgIGlmICh0aGlzLmxvYWRpbmdTdWJqZWN0cykge1xyXG4gICAgICAgICAgdGhpcy5sb2FkaW5nU3ViamVjdHNbMF0ubmV4dCh0cnVlKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuZGF0YVN1YmplY3RcclxuICAgICAgICAgIC5waXBlKGRlbGF5KDApKVxyXG4gICAgICAgICAgLnN1YnNjcmliZSgoZGF0YTogT2JqZWN0W10pID0+IHtcclxuICAgICAgICAgICAgdGhpcy5ib3VuZERhdGEgPSBkYXRhO1xyXG4gICAgICAgICAgICB0aGlzLnNldFJlc3VsdE1lc3NhZ2UodGhpcy5ib3VuZERhdGEpO1xyXG4gICAgICAgICAgICB0aGlzLnNldERhdGEoKTtcclxuXHJcbiAgICAgICAgICAgIC8vTm93IGRvbmUgbG9hZGluZ1xyXG4gICAgICAgICAgICBpZiAodGhpcy5sb2FkaW5nU3ViamVjdHMpIHtcclxuICAgICAgICAgICAgICB0aGlzLmxvYWRpbmdTdWJqZWN0c1swXS5uZXh0KGZhbHNlKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy5zZXREYXRhKCk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFVwb24gbmV3IHJvd1BhcmVudCBiZWluZyBzZXQsIGFkZCBhbnkgY2xhc3NlcyBpZiByb3dDbGFzcyBpcyBkZWZpbmVkLlxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtRdWVyeUxpc3Q8RWxlbWVudFJlZj59IHJvd1BhcmVudHNcclxuICAgKi9cclxuICBAVmlld0NoaWxkcmVuKFwicm93UGFyZW50XCIsIHtyZWFkOiBFbGVtZW50UmVmfSkgc2V0IHJvd1BhcmVudHMocm93UGFyZW50czogUXVlcnlMaXN0PEVsZW1lbnRSZWY+KSB7XHJcbiAgICBpZiAocm93UGFyZW50cyAmJiB0aGlzLnJvd0NsYXNzKSB7XHJcbiAgICAgIHJvd1BhcmVudHMuZm9yRWFjaCgoZTogRWxlbWVudFJlZikgPT4ge1xyXG4gICAgICAgIGxldCBjbGFzc2VzOiBzdHJpbmdbXSA9IHRoaXMucm93Q2xhc3Muc3BsaXQoXCIgXCIpO1xyXG4gICAgICAgIGZvciAobGV0IGNsYXNzTmFtZSBvZiBjbGFzc2VzKSB7XHJcbiAgICAgICAgICB0aGlzLnJlbmRlcmVyLmFkZENsYXNzKGUubmF0aXZlRWxlbWVudCwgY2xhc3NOYW1lKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gICAgICB0aGlzLnJvd1JlZnJlc2ggKz0gMTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHBvc3RJbml0KCk6IHZvaWQge1xyXG4gICAgaWYgKGlzRGV2TW9kZSgpKSB7XHJcbiAgICAgIGNvbnNvbGUuZGVidWcoXCJTZWFyY2hMaXN0Q29tcG9uZW50LnBvc3RJbml0OiBcIiArIHRoaXMuaWQpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLmdldFBhcmVudCgpKSB7XHJcbiAgICAgIHRoaXMuY29udHJvbGxlciA9IDxTZWFyY2hMaXN0Q29udHJvbGxlckNvbXBvbmVudD50aGlzLmdldFBhcmVudCgpLmdldENvbXBvbmVudEJ5VHlwZShcIlNlYXJjaExpc3RDb250cm9sbGVyQ29tcG9uZW50XCIpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLmNvbnRyb2xsZXIpIHtcclxuICAgICAgaWYgKGlzRGV2TW9kZSgpKSB7XHJcbiAgICAgICAgY29uc29sZS5kZWJ1ZyhcIlNlYXJjaExpc3RDb21wb25lbnQ6IHVzaW5nIGNvbnRyb2xsZXJcIik7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHRoaXMuY29udHJvbGxlci5hZGRTZWFyY2hMaXN0KHRoaXMudGl0bGUpO1xyXG5cclxuICAgICAgdGhpcy5jb250cm9sbGVyLmZpbHRlcnNTdWJqZWN0LnN1YnNjcmliZSgoZmlsdGVyczogSGNpRmlsdGVyRHRvW10pID0+IHtcclxuICAgICAgICB0aGlzLmZpbHRlcnMgPSBmaWx0ZXJzO1xyXG4gICAgICAgIHRoaXMuc2V0RGF0YSgpO1xyXG4gICAgICAgIHRoaXMucmVzZXRQYWdpbmcoKTtcclxuICAgICAgfSk7XHJcblxyXG4gICAgICB0aGlzLmNvbnRyb2xsZXIuc29ydHNTdWJqZWN0LnN1YnNjcmliZSgoc29ydHM6IEhjaVNvcnREdG9bXSkgPT4ge1xyXG4gICAgICAgIHRoaXMuc29ydHMgPSBzb3J0cztcclxuICAgICAgICB0aGlzLnNldERhdGEoKTtcclxuICAgICAgfSk7XHJcblxyXG4gICAgICB0aGlzLmNvbnRyb2xsZXIuc2VsZWN0ZWRTZWFyY2hMaXN0U3ViamVjdC5zdWJzY3JpYmUoKHRpdGxlOiBzdHJpbmcpID0+IHtcclxuICAgICAgICBpZiAoaXNEZXZNb2RlKCkpIHtcclxuICAgICAgICAgIGNvbnNvbGUuZGVidWcoXCJzZWxlY3RlZFNlYXJjaExpc3RTdWJqZWN0LnN1YnNjcmliZTogXCIgKyB0aGlzLnRpdGxlICsgXCIsIFwiICsgdGl0bGUpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgbGV0IHZpc2libGU6IGJvb2xlYW4gPSB0cnVlO1xyXG5cclxuICAgICAgICBpZiAodGhpcy50aXRsZSAmJiB0aXRsZSAmJiB0aGlzLnRpdGxlICE9PSB0aXRsZSkge1xyXG4gICAgICAgICAgdmlzaWJsZSA9IGZhbHNlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHZpc2libGUpIHtcclxuICAgICAgICAgIHRoaXMucmVuZGVyZXIuc2V0U3R5bGUodGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQsIFwiZGlzcGxheVwiLCBcImZsZXhcIik7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHRoaXMucmVuZGVyZXIuc2V0U3R5bGUodGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQsIFwiZGlzcGxheVwiLCBcIm5vbmVcIik7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFRoaXMgZnVuY3Rpb24gd291bGQgcmVzZXQgcGFnaW5nIGFuZCBmaXJlc1xyXG4gICAqL1xyXG4gIHJlc2V0UGFnaW5nKCkge1xyXG4gICAgdGhpcy5wYWdpbmcuc2V0UGFnZSgwKTtcclxuICAgIHRoaXMucGFnaW5nU3ViamVjdC5uZXh0KHRoaXMucGFnaW5nKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFVwZGF0ZXMgdGhlIGNvbmZpZyB3aXRoIG9wdGlvbnMgYW5kIHJlLWZldGNoZXMgZGF0YS5cclxuICAgKlxyXG4gICAqIEBwYXJhbSBjb25maWdcclxuICAgKi9cclxuICB1cGRhdGVDb25maWcoY29uZmlnKSB7XHJcbiAgICBpZiAoaXNEZXZNb2RlKCkpIHtcclxuICAgICAgY29uc29sZS5kZWJ1ZyhcInVwZGF0ZUNvbmZpZ1wiKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoY29uZmlnKSB7XHJcbiAgICAgIHRoaXMuY29uZmlnID0gT2JqZWN0LmFzc2lnbih7fSwgdGhpcy5jb25maWcsIGNvbmZpZyk7XHJcblxyXG4gICAgICBpZiAoY29uZmlnLnJvdXRlKSB7XHJcbiAgICAgICAgdGhpcy5yb3V0ZSA9IGNvbmZpZy5yb3V0ZTtcclxuICAgICAgfVxyXG4gICAgICBpZiAoY29uZmlnLmdyb3VwQnlBbGxvd2VkRmllbGRzKSB7XHJcbiAgICAgICAgdGhpcy5ncm91cEJ5QWxsb3dlZEZpZWxkcyA9IGNvbmZpZy5ncm91cEJ5QWxsb3dlZEZpZWxkcztcclxuICAgICAgfVxyXG4gICAgICBpZiAoY29uZmlnLnNvcnRzKSB7XHJcbiAgICAgICAgdGhpcy5zb3J0cyA9IGNvbmZpZy5zb3J0cztcclxuICAgICAgfVxyXG4gICAgICBpZiAoY29uZmlnLmdyb3VwaW5nRmllbGRzKSB7XHJcbiAgICAgICAgdGhpcy5ncm91cGluZ0ZpZWxkcyA9IGNvbmZpZy5ncm91cGluZ0ZpZWxkcztcclxuICAgICAgICB0aGlzLmdyb3VwaW5nLnNldEZpZWxkcyhjb25maWcuZ3JvdXBpbmdGaWVsZHMpO1xyXG4gICAgICB9XHJcbiAgICAgIGlmIChjb25maWcucGFnZVNpemUpIHtcclxuICAgICAgICB0aGlzLnBhZ2VTaXplID0gY29uZmlnLnBhZ2VTaXplO1xyXG4gICAgICAgIHRoaXMucGFnaW5nLnNldFBhZ2VTaXplKGNvbmZpZy5wYWdlU2l6ZSk7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKGNvbmZpZy5ncm91cERpc3BsYXkpIHtcclxuICAgICAgICB0aGlzLmdyb3VwRGlzcGxheSA9IGNvbmZpZy5ncm91cERpc3BsYXk7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKGNvbmZpZy5jbG9zZU90aGVycyAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgdGhpcy5jbG9zZU90aGVycyA9IGNvbmZpZy5jbG9zZU90aGVycztcclxuICAgICAgfVxyXG4gICAgICBpZiAoY29uZmlnLmdyb3VwVGVtcGxhdGUpIHtcclxuICAgICAgICB0aGlzLmdyb3VwVGVtcGxhdGUgPSBjb25maWcuZ3JvdXBUZW1wbGF0ZTtcclxuICAgICAgICB0aGlzLmdyb3VwU2VsZWN0ZWRUZW1wbGF0ZSA9IGNvbmZpZy5ncm91cFRlbXBsYXRlO1xyXG4gICAgICB9XHJcbiAgICAgIGlmIChjb25maWcuZ3JvdXBTZWxlY3RlZFRlbXBsYXRlKSB7XHJcbiAgICAgICAgdGhpcy5ncm91cFNlbGVjdGVkVGVtcGxhdGUgPSBjb25maWcuZ3JvdXBTZWxlY3RlZFRlbXBsYXRlO1xyXG4gICAgICB9XHJcbiAgICAgIGlmIChjb25maWcuaXRlbVRlbXBsYXRlKSB7XHJcbiAgICAgICAgdGhpcy5pdGVtVGVtcGxhdGUgPSBjb25maWcuaXRlbVRlbXBsYXRlO1xyXG4gICAgICB9XHJcbiAgICAgIGlmIChjb25maWcuZGF0YSkge1xyXG4gICAgICAgIHRoaXMuYm91bmREYXRhID0gY29uZmlnLmRhdGE7XHJcbiAgICAgICAgdGhpcy5zZXRSZXN1bHRNZXNzYWdlKHRoaXMuYm91bmREYXRhKTtcclxuICAgICAgfVxyXG4gICAgICBpZiAoY29uZmlnLmRhdGFTdWJqZWN0KSB7XHJcbiAgICAgICAgdGhpcy5kYXRhU3ViamVjdCA9IGNvbmZpZy5kYXRhU3ViamVjdDtcclxuICAgICAgfVxyXG4gICAgICBpZiAoY29uZmlnLmRhdGFDYWxsKSB7XHJcbiAgICAgICAgdGhpcy5leHRlcm5hbERhdGFDYWxsID0gY29uZmlnLmRhdGFDYWxsO1xyXG4gICAgICB9XHJcbiAgICAgIGlmIChjb25maWcub25Hcm91cENsaWNrKSB7XHJcbiAgICAgICAgdGhpcy5vbkdyb3VwQ2xpY2sgPSBjb25maWcub25Hcm91cENsaWNrO1xyXG4gICAgICB9XHJcbiAgICAgIGlmIChjb25maWcuaW5saW5lRXhwYW5kICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgICB0aGlzLmlubGluZUV4cGFuZCA9IGNvbmZpZy5pbmxpbmVFeHBhbmQ7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKGNvbmZpZy5ncm91cENsYXNzKSB7XHJcbiAgICAgICAgdGhpcy5ncm91cENsYXNzID0gY29uZmlnLmdyb3VwQ2xhc3M7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKGNvbmZpZy5yb3dDbGFzcykge1xyXG4gICAgICAgIHRoaXMucm93Q2xhc3MgPSBjb25maWcucm93Q2xhc3M7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKGNvbmZpZy5yb3dJZCkge1xyXG4gICAgICAgIHRoaXMucm93SWQgPSBjb25maWcucm93SWQ7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKGNvbmZpZy5vbkdyb3VwQ2xpY2spIHtcclxuICAgICAgICB0aGlzLm9uR3JvdXBDbGljayA9IGNvbmZpZy5vbkdyb3VwQ2xpY2s7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKGNvbmZpZy5vblJvd0NsaWNrKSB7XHJcbiAgICAgICAgdGhpcy5vblJvd0NsaWNrID0gY29uZmlnLm9uUm93Q2xpY2s7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKGNvbmZpZy5sb2FkaW5nU3ViamVjdHMpIHtcclxuICAgICAgICB0aGlzLmxvYWRpbmdTdWJqZWN0cyA9IGNvbmZpZy5sb2FkaW5nU3ViamVjdHM7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKGNvbmZpZy5ncm91cFBhZ2VTaXplKSB7XHJcbiAgICAgICAgdGhpcy5ncm91cFBhZ2VTaXplID0gY29uZmlnLmdyb3VwUGFnZVNpemU7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKGNvbmZpZy5ncm91cENhY2hlTnVtUGFnZXMpIHtcclxuICAgICAgICBpZiAoY29uZmlnLmdyb3VwQ2FjaGVOdW1QYWdlcyA+PSAyKSB7XHJcbiAgICAgICAgICB0aGlzLmdyb3VwQ2FjaGVOdW1QYWdlcyA9IGNvbmZpZy5ncm91cENhY2hlTnVtUGFnZXM7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIGNvbnNvbGUud2FybihcImdyb3VwQ2FjaGVOdW1QYWdlcyBtdXN0IGJlIDIgb3IgbW9yZS5cIik7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIGlmIChjb25maWcub25Hcm91cENsb3NlKSB7XHJcbiAgICAgICAgdGhpcy5vbkdyb3VwQ2xvc2UgPSBjb25maWcub25Hcm91cENsb3NlO1xyXG4gICAgICB9XHJcbiAgICAgIGlmIChjb25maWcuYnVzeUljb24pIHtcclxuICAgICAgICB0aGlzLmJ1c3lJY29uID0gY29uZmlnLmJ1c3lJY29uO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAoY29uZmlnLnNob3dSZXN1bHRzQ291bnQpIHtcclxuICAgICAgICB0aGlzLnNob3dSZXN1bHRzQ291bnQgPSBjb25maWcuc2hvd1Jlc3VsdHNDb3VudDtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGlmICghdGhpcy5vbkdyb3VwQ2xpY2spIHtcclxuICAgICAgdGhpcy5vbkdyb3VwQ2xpY2sgPSB0aGlzLmRlZmF1bHRHcm91cENsaWNrO1xyXG4gICAgfVxyXG4gICAgaWYgKCF0aGlzLm9uUm93Q2xpY2spIHtcclxuICAgICAgdGhpcy5vblJvd0NsaWNrID0gdGhpcy5kZWZhdWx0Um93Q2xpY2s7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKCF0aGlzLml0ZW1UZW1wbGF0ZSkge1xyXG4gICAgICBjb25zb2xlLndhcm4oXCJTZWFyY2hMaXN0Q29tcG9uZW50OiBBbiBpdGVtVGVtcGxhdGUgbXVzdCBiZSBwcm92aWRlZCFcIik7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKCF0aGlzLmdyb3VwVGVtcGxhdGUpIHtcclxuICAgICAgdGhpcy5ncm91cFRlbXBsYXRlID0gdGhpcy5kZWZhdWx0R3JvdXBUZW1wbGF0ZTtcclxuICAgIH1cclxuICAgIGlmICghdGhpcy5ncm91cFNlbGVjdGVkVGVtcGxhdGUpIHtcclxuICAgICAgdGhpcy5ncm91cFNlbGVjdGVkVGVtcGxhdGUgPSB0aGlzLmRlZmF1bHRHcm91cFNlbGVjdGVkVGVtcGxhdGU7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMuZXh0ZXJuYWxEYXRhQ2FsbCkge1xyXG4gICAgICB0aGlzLmxvYWRpbmdTdWJqZWN0cyA9IFtuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKV07XHJcbiAgICB9XHJcblxyXG5cclxuICAgIHN1cGVyLnVwZGF0ZUNvbmZpZyhjb25maWcpO1xyXG5cclxuICAgIHRoaXMuc2V0RGF0YSgpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogR2VuZXJhdGVzIHRoZSBkYXRhIGlmIGFuIGFycmF5LCBjYWxscyB0aGUgZGF0YSBpZiBleHRlcm5hbCBjYWxsLlxyXG4gICAqL1xyXG4gIHNldERhdGEoZGF0YT86IE9iamVjdFtdKTogdm9pZCB7XHJcbiAgICBpZiAoaXNEZXZNb2RlKCkpIHtcclxuICAgICAgY29uc29sZS5kZWJ1ZyhcInNldERhdGFcIik7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGRhdGEpIHtcclxuICAgICAgdGhpcy5ib3VuZERhdGEgPSBkYXRhO1xyXG4gICAgICB0aGlzLnNldFJlc3VsdE1lc3NhZ2UodGhpcy5ib3VuZERhdGEpO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuc2VsZWN0ZWRSb3dHcm91cCA9IHVuZGVmaW5lZDtcclxuICAgIHRoaXMuc2VsZWN0ZWRSb3dHcm91cENvbnRhaW5lciA9IHVuZGVmaW5lZDtcclxuXHJcbiAgICBpZiAodGhpcy5leHRlcm5hbERhdGFDYWxsKSB7XHJcbiAgICAgIGlmICghdGhpcy5idXN5KSB7XHJcbiAgICAgICAgdGhpcy5idXN5ID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLmxvYWRpbmdTdWJqZWN0c1swXS5uZXh0KHRydWUpO1xyXG5cclxuICAgICAgICB0aGlzLmV4dGVybmFsRGF0YUNhbGwobmV3IEhjaUdyaWREdG8odGhpcy5maWx0ZXJzLCB0aGlzLnNvcnRzLCB0aGlzLnBhZ2luZywgbmV3IEhjaUdyb3VwaW5nRHRvKHRoaXMuZ3JvdXBpbmcuZmllbGRzLCB0aGlzLmdyb3VwaW5nLmZpZWxkcyAmJiB0aGlzLmdyb3VwaW5nLmZpZWxkcy5sZW5ndGggPiAwKSkpXHJcbiAgICAgICAgICAucGlwZShmaW5hbGl6ZSgoKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMubG9hZGluZ1N1YmplY3RzWzBdLm5leHQoZmFsc2UpO1xyXG4gICAgICAgICAgICB0aGlzLmJ1c3kgPSBmYWxzZTtcclxuICAgICAgICAgIH0pKVxyXG4gICAgICAgICAgLnN1YnNjcmliZSgoZXh0ZXJuYWxEYXRhOiBIY2lEYXRhRHRvKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuZ2VuZXJhdGVEYXRhKGV4dGVybmFsRGF0YSk7XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5nZW5lcmF0ZURhdGEoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEdlbmVyYXRlcyB0aGUgZGF0YSBhcnJheSB0aGF0IHRoZSBpbnRlcmZhY2UgdXNlcyB0byByZW5kZXIgKHJlZ2FyZGxlc3Mgb2Ygc291cmNlKS5cclxuICAgKlxyXG4gICAqIEBwYXJhbSB7SGNpRGF0YUR0b30gZXh0ZXJuYWxEYXRhXHJcbiAgICovXHJcbiAgZ2VuZXJhdGVEYXRhKGV4dGVybmFsRGF0YT86IEhjaURhdGFEdG8pOiB2b2lkIHtcclxuICAgIGlmIChpc0Rldk1vZGUoKSkge1xyXG4gICAgICBjb25zb2xlLmRlYnVnKFwiZ2VuZXJhdGVEYXRhXCIpO1xyXG4gICAgICBjb25zb2xlLmRlYnVnKGV4dGVybmFsRGF0YSk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGV4dGVybmFsRGF0YSkge1xyXG4gICAgICB0aGlzLmJvdW5kRGF0YSA9IGV4dGVybmFsRGF0YS5kYXRhO1xyXG4gICAgICB0aGlzLnNldFJlc3VsdE1lc3NhZ2UodGhpcy5ib3VuZERhdGEpO1xyXG4gICAgICB0aGlzLnBhZ2luZy5zZXREYXRhU2l6ZShleHRlcm5hbERhdGEuZ3JpZER0by5wYWdpbmcuZGF0YVNpemUpO1xyXG5cclxuICAgICAgLy8gQ3JlYXRlIHJvdyBncm91cHMuXHJcbiAgICAgIHRoaXMudmlld0RhdGEgPSBbXTtcclxuICAgICAgbGV0IHJvd0dyb3VwOiBSb3dHcm91cDtcclxuXHJcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5ib3VuZERhdGEubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICByb3dHcm91cCA9IG5ldyBSb3dHcm91cCh1bmRlZmluZWQsIHRoaXMuYm91bmREYXRhW2ldLCAoZXh0ZXJuYWxEYXRhLmRhdGFDb3VudHMgJiYgZXh0ZXJuYWxEYXRhLmRhdGFDb3VudHMgIT09IG51bGwpID8gZXh0ZXJuYWxEYXRhLmRhdGFDb3VudHNbaV0gOiAwKTtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMuZ3JvdXBpbmcuZmllbGRzLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgIGZvciAobGV0IGdyb3VwaW5nRmllbGQgb2YgdGhpcy5ncm91cGluZy5maWVsZHMpIHtcclxuICAgICAgICAgICAgcm93R3JvdXBbZ3JvdXBpbmdGaWVsZF0gPSB0aGlzLmJvdW5kRGF0YVtpXVtncm91cGluZ0ZpZWxkXTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMudmlld0RhdGEucHVzaChyb3dHcm91cCk7XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIC8vIENyZWF0ZSBhbmQgcG9wdWxhdGUgcm93IGdyb3Vwcy5cclxuICAgICAgdGhpcy5wb3B1bGF0ZUZyb21Cb3VuZERhdGEoKTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmRldGVjdENoYW5nZXMoKTtcclxuXHJcbiAgICB0aGlzLmRhdGFDaGFuZ2UuZW1pdChPYmplY3QuYXNzaWduKHt0eXBlOiBcIm5vbmVcIn0sIHRoaXMubGFzdEV2ZW50LCB7XHJcbiAgICAgIHBhZ2luZzogdGhpcy5wYWdpbmcsXHJcbiAgICAgIG5WaWV3RGF0YTogdGhpcy52aWV3RGF0YS5sZW5ndGhcclxuICAgIH0pKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEdlbmVyYXRlcyB0aGUgZGF0YSBpZiB0aGUgZGF0YSBpcyBhbiBhcnJheSAobm90IGV4dGVybmFsKS5cclxuICAgKi9cclxuICBwb3B1bGF0ZUZyb21Cb3VuZERhdGEoKTogdm9pZCB7XHJcbiAgICBpZiAoaXNEZXZNb2RlKCkpIHtcclxuICAgICAgY29uc29sZS5kZWJ1ZyhcInBvcHVsYXRlRnJvbUJvdW5kRGF0YVwiKTtcclxuICAgICAgY29uc29sZS5kZWJ1Zyh0aGlzLmJvdW5kRGF0YSk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKCF0aGlzLmJvdW5kRGF0YSkge1xyXG4gICAgICB0aGlzLnZpZXdEYXRhID0gW107XHJcbiAgICAgIHRoaXMucGFnaW5nLnNldFBhZ2UoMCk7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5ib3VuZERhdGEubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgIGNvbnNvbGUuZGVidWcoXCJCb3VuZCBEYXRhIGxlbmd0aCBmb3VuZCBhcyAwXCIpO1xyXG4gICAgICB0aGlzLnBhZ2luZy5zZXRQYWdlKDApO1xyXG4gICAgICB0aGlzLnBhZ2luZy5zZXROdW1QYWdlcygxKTtcclxuICAgICAgdGhpcy5wYWdpbmcuc2V0RGF0YVNpemUoMCk7XHJcbiAgICB9XHJcblxyXG4gICAgbGV0IHByZXBhcmVkRGF0YSA9IFtdO1xyXG4gICAgdGhpcy5ncm91cGVkRGF0YVNldCA9IFtdO1xyXG5cclxuICAgIGxldCByb3dHcm91cE1hcDogTWFwPHN0cmluZywgbnVtYmVyPiA9IG5ldyBNYXA8c3RyaW5nLCBudW1iZXI+KCk7XHJcblxyXG4gICAgbGV0IGRvUm93R3JvdXBpbmc6IGJvb2xlYW4gPSB0aGlzLmdyb3VwaW5nLmZpZWxkcyAmJiB0aGlzLmdyb3VwaW5nLmZpZWxkcy5sZW5ndGggPiAwO1xyXG4gICAgZm9yIChsZXQgcm93IG9mIHRoaXMuYm91bmREYXRhKSB7XHJcbiAgICAgIGxldCBncm91cEtleTogc3RyaW5nO1xyXG4gICAgICBpZiAoZG9Sb3dHcm91cGluZykge1xyXG4gICAgICAgIGZvciAobGV0IGZpZWxkIG9mIHRoaXMuZ3JvdXBpbmcuZmllbGRzKSB7XHJcbiAgICAgICAgICBncm91cEtleSA9IChncm91cEtleSkgPyBncm91cEtleSArIFwiOlwiICsgcm93W2ZpZWxkXSA6IHJvd1tmaWVsZF07XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAodGhpcy5maWx0ZXJzICYmIHRoaXMuZmlsdGVycy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgbGV0IGluY2x1ZGU6IGJvb2xlYW4gPSB0cnVlO1xyXG5cclxuICAgICAgICBmb3IgKGxldCBmaWx0ZXIgb2YgdGhpcy5maWx0ZXJzKSB7XHJcblxyXG4gICAgICAgICAgaWYgKGZpbHRlci5nZXRGaWVsZCgpLmluZGV4T2YoXCIgb3IgXCIpICE9PSAtMSkge1xyXG4gICAgICAgICAgICBsZXQgaW5uZXJJbmNsdWRlOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gICAgICAgICAgICBmb3IgKGxldCBmaWVsZCBvZiBmaWx0ZXIuZ2V0RmllbGQoKS5zcGxpdChcIiBvciBcIikpIHtcclxuICAgICAgICAgICAgICAvLyBjaGVjayByb3dbZmllbGRdIGlzIGEgbnVtYmVyIGFuZCBpZiB5ZXMsIHNraXAgYXBwbHlpbmcgdGhlIHRvTG93ZXJDYXNlKCkgZnVuY3Rpb24uXHJcbiAgICAgICAgICAgICAgLy8gKiB0byBjb3ZlciB0aGUgaGFuZGxpbmcgb2YgdGhlIHNlYXJjaCBieSBwZXJzb24gaWQgc2NlbmFyaW8gZnJvbSB3aXRoaW4gdGhlIHF1aWNrIHNlYXJjaCBmdW5jdGlvbmFsaXR5LlxyXG4gICAgICAgICAgICAgIGlmIChyb3dbZmllbGRdICYmIHR5cGVvZiByb3dbZmllbGRdID09IFwibnVtYmVyXCIpIHtcclxuICAgICAgICAgICAgICAgIGlmIChyb3dbZmllbGRdID09IGZpbHRlci5nZXRWYWx1ZSgpKSB7XHJcbiAgICAgICAgICAgICAgICAgIGlubmVySW5jbHVkZSA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgfSBlbHNlIGlmIChyb3dbZmllbGRdIGluc3RhbmNlb2YgRGF0ZSB8fCBmaWx0ZXIuZ2V0VmFsdWUoKSBpbnN0YW5jZW9mIERhdGUgfHwgZmlsdGVyLmdldERhdGFUeXBlKCkgPT0gXCJkYXRlXCIpIHtcclxuICAgICAgICAgICAgICAgIGlmIChyb3dbZmllbGRdICYmIGZpbHRlci5nZXRWYWx1ZSgpICYmIChuZXcgRGF0ZShyb3dbZmllbGRdKSkuZ2V0VGltZSgpID09IChuZXcgRGF0ZShmaWx0ZXIuZ2V0VmFsdWUoKSkpLmdldFRpbWUoKSkge1xyXG4gICAgICAgICAgICAgICAgICBmaWx0ZXIuZ2V0VmFsdWUoKTtcclxuICAgICAgICAgICAgICAgICAgaW5uZXJJbmNsdWRlID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICB9IGVsc2UgaWYgKHJvd1tmaWVsZF0gJiYgcm93W2ZpZWxkXS50b0xvd2VyQ2FzZSgpLmluZGV4T2YoZmlsdGVyLmdldFZhbHVlKCkudG9Mb3dlckNhc2UoKSkgIT09IC0xKSB7XHJcbiAgICAgICAgICAgICAgICBpbm5lckluY2x1ZGUgPSB0cnVlO1xyXG4gICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmICghaW5uZXJJbmNsdWRlKSB7XHJcbiAgICAgICAgICAgICAgaW5jbHVkZSA9IGZhbHNlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBpZiAoIWZpbHRlci52YWxpZCB8fCAhZmlsdGVyLmdldFZhbHVlKCkpIHtcclxuICAgICAgICAgICAgfSBlbHNlIGlmICgoZmlsdGVyLnZhbGlkIHx8IGZpbHRlci5nZXRWYWx1ZSgpKSAmJiAodGhpcy5jb250cm9sbGVyLmFkdmFuY2VkU2VhcmNoLmxlbmd0aCAhPT0gdW5kZWZpbmVkICYmIHRoaXMuY29udHJvbGxlci5hZHZhbmNlZFNlYXJjaC5sZW5ndGggPiAwKSkge1xyXG4gICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICB9IGVsc2UgaWYgKCFyb3dbZmlsdGVyLmZpZWxkXSkge1xyXG4gICAgICAgICAgICAgIGluY2x1ZGUgPSBmYWxzZTtcclxuICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgfSBlbHNlIGlmIChyb3dbZmlsdGVyLmZpZWxkXSBpbnN0YW5jZW9mIERhdGUgfHwgZmlsdGVyLmdldFZhbHVlKCkgaW5zdGFuY2VvZiBEYXRlIHx8IGZpbHRlci5nZXREYXRhVHlwZSgpID09IFwiZGF0ZVwiKSB7XHJcbiAgICAgICAgICAgICAgZmlsdGVyLmdldFZhbHVlKCk7XHJcbiAgICAgICAgICAgICAgaWYgKChuZXcgRGF0ZShyb3dbZmlsdGVyLmZpZWxkXSkpLmdldFRpbWUoKSAhPSAobmV3IERhdGUoZmlsdGVyLmdldFZhbHVlKCkpKS5nZXRUaW1lKCkpIHtcclxuICAgICAgICAgICAgICAgIGluY2x1ZGUgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSBlbHNlIGlmIChyb3dbZmlsdGVyLmZpZWxkXS50b0xvd2VyQ2FzZSgpLmluZGV4T2YoZmlsdGVyLmdldFZhbHVlKCkudG9Mb3dlckNhc2UoKSkgPT09IC0xKSB7XHJcbiAgICAgICAgICAgICAgaW5jbHVkZSA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoIWluY2x1ZGUpIHtcclxuICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKGRvUm93R3JvdXBpbmcpIHtcclxuICAgICAgICBpZiAocm93R3JvdXBNYXAuZ2V0KGdyb3VwS2V5KSA+PSAwKSB7XHJcbiAgICAgICAgICBwcmVwYXJlZERhdGFbcm93R3JvdXBNYXAuZ2V0KGdyb3VwS2V5KV0ucmdSb3dzLnB1c2gocm93KTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgcm93R3JvdXBNYXAuc2V0KGdyb3VwS2V5LCBwcmVwYXJlZERhdGEubGVuZ3RoKTtcclxuXHJcbiAgICAgICAgICBsZXQgcm93R3JvdXA6IFJvd0dyb3VwID0gbmV3IFJvd0dyb3VwKGdyb3VwS2V5LCByb3cpO1xyXG4gICAgICAgICAgZm9yIChsZXQgZmllbGQgb2YgdGhpcy5ncm91cGluZy5maWVsZHMpIHtcclxuICAgICAgICAgICAgcm93R3JvdXBbZmllbGRdID0gcm93W2ZpZWxkXTtcclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICBwcmVwYXJlZERhdGEucHVzaChyb3dHcm91cCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHByZXBhcmVkRGF0YS5wdXNoKG5ldyBSb3dHcm91cChncm91cEtleSwgcm93KSk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIC8vdGhpcy5nbG9iYWxSb3dHcm91cE1hcCA9IHJvd0dyb3VwTWFwO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLnNvcnRzLmxlbmd0aCA+IDApIHtcclxuICAgICAgcHJlcGFyZWREYXRhLnNvcnQoKGE6IFJvd0dyb3VwLCBiOiBSb3dHcm91cCkgPT4ge1xyXG4gICAgICAgIGxldCB2OiBudW1iZXIgPSAwO1xyXG5cclxuICAgICAgICBmb3IgKGxldCBzb3J0IG9mIHRoaXMuc29ydHMpIHtcclxuICAgICAgICAgIGlmICh0aGlzLmlzU29ydEZpZWxkR3JvdXBGaWVsZChzb3J0LmdldEZpZWxkKCkpKSB7XHJcbiAgICAgICAgICAgIGlmIChzb3J0LmdldEFzYygpKSB7XHJcbiAgICAgICAgICAgICAgaWYgKGFbc29ydC5nZXRGaWVsZCgpXSA8IGJbc29ydC5nZXRGaWVsZCgpXSkge1xyXG4gICAgICAgICAgICAgICAgdiA9IC0xO1xyXG4gICAgICAgICAgICAgIH0gZWxzZSBpZiAoYVtzb3J0LmdldEZpZWxkKCldID4gYltzb3J0LmdldEZpZWxkKCldKSB7XHJcbiAgICAgICAgICAgICAgICB2ID0gMTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgaWYgKGFbc29ydC5nZXRGaWVsZCgpXSA+IGJbc29ydC5nZXRGaWVsZCgpXSkge1xyXG4gICAgICAgICAgICAgICAgdiA9IC0xO1xyXG4gICAgICAgICAgICAgIH0gZWxzZSBpZiAoYVtzb3J0LmdldEZpZWxkKCldIDwgYltzb3J0LmdldEZpZWxkKCldKSB7XHJcbiAgICAgICAgICAgICAgICB2ID0gMTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmICh2ICE9IDApIHtcclxuICAgICAgICAgICAgICByZXR1cm4gdjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSBlbHNlIGlmICh0aGlzLmdyb3VwaW5nLmdldEZpZWxkcygpLmxlbmd0aCA9PT0gMCkge1xyXG4gICAgICAgICAgICBpZiAoc29ydC5nZXRBc2MoKSkge1xyXG4gICAgICAgICAgICAgIGlmIChhLnJnUm93c1swXVtzb3J0LmdldEZpZWxkKCldIDwgYi5yZ1Jvd3NbMF1bc29ydC5nZXRGaWVsZCgpXSkge1xyXG4gICAgICAgICAgICAgICAgdiA9IC0xO1xyXG4gICAgICAgICAgICAgIH0gZWxzZSBpZiAoYS5yZ1Jvd3NbMF1bc29ydC5nZXRGaWVsZCgpXSA+IGIucmdSb3dzWzBdW3NvcnQuZ2V0RmllbGQoKV0pIHtcclxuICAgICAgICAgICAgICAgIHYgPSAxO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICBpZiAoYS5yZ1Jvd3NbMF1bc29ydC5nZXRGaWVsZCgpXSA+IGIucmdSb3dzWzBdW3NvcnQuZ2V0RmllbGQoKV0pIHtcclxuICAgICAgICAgICAgICAgIHYgPSAtMTtcclxuICAgICAgICAgICAgICB9IGVsc2UgaWYgKGEucmdSb3dzWzBdW3NvcnQuZ2V0RmllbGQoKV0gPCBiLnJnUm93c1swXVtzb3J0LmdldEZpZWxkKCldKSB7XHJcbiAgICAgICAgICAgICAgICB2ID0gMTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmICh2ICE9IDApIHtcclxuICAgICAgICAgICAgICByZXR1cm4gdjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHY7XHJcbiAgICAgIH0pO1xyXG5cclxuICAgICAgaWYgKHRoaXMuZ3JvdXBpbmcuZ2V0RmllbGRzKCkubGVuZ3RoID4gMCkge1xyXG4gICAgICAgIGZvciAobGV0IHJvd0dyb3VwIG9mIHByZXBhcmVkRGF0YSkge1xyXG4gICAgICAgICAgcm93R3JvdXAucmdSb3dzLnNvcnQoKGE6IE9iamVjdCwgYjogT2JqZWN0KSA9PiB7XHJcbiAgICAgICAgICAgIGxldCB2OiBudW1iZXIgPSAwO1xyXG5cclxuICAgICAgICAgICAgZm9yIChsZXQgc29ydCBvZiB0aGlzLnNvcnRzKSB7XHJcbiAgICAgICAgICAgICAgaWYgKCF0aGlzLmlzU29ydEZpZWxkR3JvdXBGaWVsZChzb3J0LmdldEZpZWxkKCkpKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoc29ydC5nZXRBc2MoKSkge1xyXG4gICAgICAgICAgICAgICAgICBpZiAoYVtzb3J0LmdldEZpZWxkKCldIDwgYltzb3J0LmdldEZpZWxkKCldKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdiA9IC0xO1xyXG4gICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGFbc29ydC5nZXRGaWVsZCgpXSA+IGJbc29ydC5nZXRGaWVsZCgpXSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHYgPSAxO1xyXG4gICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICBpZiAoYVtzb3J0LmdldEZpZWxkKCldID4gYltzb3J0LmdldEZpZWxkKCldKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdiA9IC0xO1xyXG4gICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGFbc29ydC5nZXRGaWVsZCgpXSA8IGJbc29ydC5nZXRGaWVsZCgpXSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHYgPSAxO1xyXG4gICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKHYgIT0gMCkge1xyXG4gICAgICAgICAgICAgICAgICByZXR1cm4gdjtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHJldHVybiB2O1xyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5wYWdpbmcuc2V0RGF0YVNpemUocHJlcGFyZWREYXRhLmxlbmd0aCk7XHJcblxyXG4gICAgdGhpcy5ncm91cGVkRGF0YVNldCA9IHByZXBhcmVkRGF0YTtcclxuXHJcbiAgICBpZiAodGhpcy5wYWdpbmcuZ2V0UGFnZVNpemUoKSA+IDApIHtcclxuICAgICAgdGhpcy52aWV3RGF0YSA9IFtdO1xyXG4gICAgICBmb3IgKHZhciBpID0gdGhpcy5wYWdpbmcuZ2V0UGFnZSgpICogdGhpcy5wYWdpbmcuZ2V0UGFnZVNpemUoKTsgaSA8IE1hdGgubWluKHByZXBhcmVkRGF0YS5sZW5ndGgsICh0aGlzLnBhZ2luZy5nZXRQYWdlKCkgKyAxKSAqIHRoaXMucGFnaW5nLmdldFBhZ2VTaXplKCkpOyBpKyspIHtcclxuICAgICAgICB0aGlzLnZpZXdEYXRhLnB1c2gocHJlcGFyZWREYXRhW2ldKTtcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5wYWdpbmcuc2V0RGF0YVNpemUocHJlcGFyZWREYXRhLmxlbmd0aCk7XHJcbiAgICAgIHRoaXMudmlld0RhdGEgPSBwcmVwYXJlZERhdGE7XHJcbiAgICB9XHJcblxyXG4gICAgZm9yIChsZXQgcm93R3JvdXAgb2YgdGhpcy52aWV3RGF0YSkge1xyXG4gICAgICByb3dHcm91cC5yZ0NvdW50ID0gcm93R3JvdXAucmdSb3dzLmxlbmd0aDtcclxuICAgIH1cclxuICB9XHJcblxyXG5cclxuICAvKipcclxuICAgKiBSZXR1cm4gdHJ1ZSBpZiB0aGUgc29ydCBmaWVsZCBpcyBhIGdyb3VwaW5nIGZpZWxkLlxyXG4gICAqXHJcbiAgICogQHBhcmFtIHNvcnRGaWVsZFxyXG4gICAqL1xyXG4gIGlzU29ydEZpZWxkR3JvdXBGaWVsZChzb3J0RmllbGQ6IHN0cmluZyk6IGJvb2xlYW4ge1xyXG4gICAgaWYgKCF0aGlzLmdyb3VwaW5nIHx8ICF0aGlzLmdyb3VwaW5nLmZpZWxkcyB8fCB0aGlzLmdyb3VwaW5nLmZpZWxkcy5sZW5ndGggPT09IDApIHtcclxuICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG5cclxuICAgIGZvciAobGV0IGdyb3VwRmllbGQgb2YgdGhpcy5ncm91cGluZy5maWVsZHMpIHtcclxuICAgICAgaWYgKHNvcnRGaWVsZCA9PT0gZ3JvdXBGaWVsZCkge1xyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBTZWxlY3QgYSBncm91cCBvZiBkYXRhLiAgQ2FsbCB0aGUgZmlyc3QgcGFnZSBvZiBkYXRhIHVwb24gZXhwYW5kaW5nLiAgSWYgYWxyZWFkeSBleHBhbmRlZCwgY2xvc2UgYW5kIGdvIGJhY2sgdG8gdGhlXHJcbiAgICogbGlzdCBvZiBncm91cHMuXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge1Jvd0dyb3VwfSByb3dHcm91cFxyXG4gICAqL1xyXG4gIHNldEdyb3VwRXhwYW5kZWQoZXZlbnQ6IE1vdXNlRXZlbnQsIHJvd0dyb3VwOiBSb3dHcm91cCkge1xyXG4gICAgaWYgKGlzRGV2TW9kZSgpKSB7XHJcbiAgICAgIGNvbnNvbGUuZGVidWcoXCJzZXRHcm91cEV4cGFuZGVkOiBcIiArIHJvd0dyb3VwLnJnRXhwYW5kZWQpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLmV4dGVybmFsRGF0YUNhbGwgJiYgIXJvd0dyb3VwLnJnRXhwYW5kZWQpIHtcclxuICAgICAgaWYgKCF0aGlzLmJ1c3kpIHtcclxuICAgICAgICB0aGlzLmJ1c3kgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMubG9hZGluZ1N1YmplY3RzWzBdLm5leHQodHJ1ZSk7XHJcblxyXG4gICAgICAgIGxldCBncm91cEZpbHRlcnM6IEhjaUZpbHRlckR0b1tdID0gdGhpcy5maWx0ZXJzLnNsaWNlKCk7XHJcbiAgICAgICAgZm9yIChsZXQgZ3JvdXBGaWVsZCBvZiB0aGlzLmdyb3VwaW5nLmZpZWxkcykge1xyXG4gICAgICAgICAgZ3JvdXBGaWx0ZXJzLnB1c2gobmV3IEhjaUZpbHRlckR0byhncm91cEZpZWxkLCBcInN0cmluZ1wiLCByb3dHcm91cFtncm91cEZpZWxkXSwgdW5kZWZpbmVkLCBcIkVcIiwgdHJ1ZSkpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcm93R3JvdXAucmdQYWdlTWluID0gMDtcclxuICAgICAgICByb3dHcm91cC5yZ1BhZ2VNYXggPSAwO1xyXG5cclxuICAgICAgICB0aGlzLmV4dGVybmFsRGF0YUNhbGwobmV3IEhjaUdyaWREdG8oZ3JvdXBGaWx0ZXJzLCB0aGlzLnNvcnRzLCBuZXcgSGNpUGFnaW5nRHRvKDAsIHRoaXMuZ3JvdXBQYWdlU2l6ZSksIG5ldyBIY2lHcm91cGluZ0R0byh0aGlzLmdyb3VwaW5nLmZpZWxkcywgZmFsc2UpKSlcclxuICAgICAgICAgIC5waXBlKGZpbmFsaXplKCgpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5sb2FkaW5nU3ViamVjdHNbMF0ubmV4dChmYWxzZSk7XHJcbiAgICAgICAgICAgIHRoaXMuYnVzeSA9IGZhbHNlO1xyXG4gICAgICAgICAgfSkpXHJcbiAgICAgICAgICAuc3Vic2NyaWJlKChleHRlcm5hbERhdGE6IEhjaURhdGFEdG8pID0+IHtcclxuICAgICAgICAgICAgcm93R3JvdXAucmdSb3dzID0gZXh0ZXJuYWxEYXRhLmRhdGE7XHJcblxyXG4gICAgICAgICAgICBpZiAoIXRoaXMuaW5saW5lRXhwYW5kKSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZFJvd0dyb3VwID0gcm93R3JvdXA7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHRoaXMuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgICAgICAgfSk7XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSBpZiAoIXJvd0dyb3VwLnJnRXhwYW5kZWQpIHtcclxuICAgICAgcm93R3JvdXAucmdQYWdlTWluID0gMDtcclxuICAgICAgcm93R3JvdXAucmdQYWdlTWF4ID0gMDtcclxuICAgICAgaWYgKCF0aGlzLmlubGluZUV4cGFuZCkge1xyXG4gICAgICAgIHRoaXMuc2VsZWN0ZWRSb3dHcm91cCA9IHJvd0dyb3VwO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHJvd0dyb3VwLnJnRXhwYW5kZWQpIHtcclxuICAgICAgaWYgKHRoaXMuaW5saW5lRXhwYW5kKSB7XHJcbiAgICAgICAgbGV0IGdyb3VwU2VsZWN0ZWRQYXJlbnQ6IEhUTUxFbGVtZW50O1xyXG4gICAgICAgIGlmIChldmVudCkge1xyXG4gICAgICAgICAgZ3JvdXBTZWxlY3RlZFBhcmVudCA9IDxIVE1MRWxlbWVudD4oPEhUTUxFbGVtZW50PmV2ZW50LnRhcmdldCkuY2xvc2VzdChcIi5ncm91cC1wYXJlbnRcIik7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIGdyb3VwU2VsZWN0ZWRQYXJlbnQgPSA8SFRNTEVsZW1lbnQ+PHVua25vd24+ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQodGhpcy5nZXRSb3dHcm91cElkKHJvd0dyb3VwKSk7XHJcbiAgICAgICAgICAvL2dyb3VwU2VsZWN0ZWRQYXJlbnQuY2xpY2soKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5yZW5kZXJlci5yZW1vdmVDbGFzcyhncm91cFNlbGVjdGVkUGFyZW50LCBcImFjdGl2ZVwiKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgb2YobnVsbCkucGlwZShkZWxheSgyNTApKS5zdWJzY3JpYmUoKCkgPT4ge1xyXG4gICAgICAgIHRoaXMuc2VsZWN0ZWRSb3dHcm91cCA9IHVuZGVmaW5lZDtcclxuICAgICAgICB0aGlzLnNlbGVjdGVkUm93R3JvdXBDb250YWluZXIgPSB1bmRlZmluZWQ7XHJcbiAgICAgIH0pO1xyXG5cclxuICAgICAgaWYgKHRoaXMub25Hcm91cENsb3NlKSB7XHJcbiAgICAgICAgdGhpcy5vbkdyb3VwQ2xvc2UoKTtcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIGlmICghcm93R3JvdXAucmdFeHBhbmRlZCAmJiB0aGlzLmlubGluZUV4cGFuZCkge1xyXG4gICAgICBsZXQgZ3JvdXBTZWxlY3RlZFBhcmVudDogSFRNTEVsZW1lbnQ7XHJcbiAgICAgIGlmIChldmVudCkge1xyXG4gICAgICAgIGdyb3VwU2VsZWN0ZWRQYXJlbnQgPSA8SFRNTEVsZW1lbnQ+KDxIVE1MRWxlbWVudD5ldmVudC50YXJnZXQpLmNsb3Nlc3QoXCIuZ3JvdXAtcGFyZW50XCIpO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGdyb3VwU2VsZWN0ZWRQYXJlbnQgPSA8SFRNTEVsZW1lbnQ+PHVua25vd24+ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQodGhpcy5nZXRSb3dHcm91cElkKHJvd0dyb3VwKSk7XHJcbiAgICAgICAgLy9ncm91cFNlbGVjdGVkUGFyZW50LmNsaWNrKCk7XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5yZW5kZXJlci5hZGRDbGFzcyhncm91cFNlbGVjdGVkUGFyZW50LCBcImFjdGl2ZVwiKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoaXNEZXZNb2RlKCkgJiYgIXRoaXMuaW5saW5lRXhwYW5kKSB7XHJcbiAgICAgIGNvbnNvbGUuZGVidWcoXCJ0aGlzLnNlbGVjdGVkUm93R3JvdXBcIik7XHJcbiAgICAgIGNvbnNvbGUuZGVidWcodGhpcy5zZWxlY3RlZFJvd0dyb3VwKTtcclxuICAgIH1cclxuXHJcbiAgICByb3dHcm91cC5yZ0V4cGFuZGVkID0gIXJvd0dyb3VwLnJnRXhwYW5kZWQ7XHJcblxyXG4gICAgdGhpcy5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBBZGQgdGhlIHNjcm9sbCBsaXN0ZW5lciB0byB0aGUgZ3JvdXAgY29udGFpbmVyLlxyXG4gICAqL1xyXG4gIGFkZEdyb3VwU2Nyb2xsTGlzdGVuZXIoKTogdm9pZCB7XHJcbiAgICB0aGlzLnJlbW92ZUdyb3VwU2Nyb2xsTGlzdGVuZXIoKTtcclxuXHJcbiAgICB0aGlzLmxhc3RTY3JvbGxUb3AgPSAtMTtcclxuXHJcbiAgICBpZiAodGhpcy5zZWxlY3RlZFJvd0dyb3VwICYmIHRoaXMuc2VsZWN0ZWRSb3dHcm91cC5yZ0NvdW50ICE9PSB0aGlzLnNlbGVjdGVkUm93R3JvdXAucmdSb3dzLmxlbmd0aCkge1xyXG4gICAgICB0aGlzLnNlbGVjdGVkUm93R3JvdXBDb250YWluZXIgPSB0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5xdWVyeVNlbGVjdG9yKFwiI3NlbGVjdGVkLWdyb3VwLWNvbnRhaW5lclwiKTtcclxuICAgICAgdGhpcy5zZWxlY3RlZFJvd0dyb3VwQ29udGFpbmVyLmFkZEV2ZW50TGlzdGVuZXIoXCJzY3JvbGxcIiwgdGhpcy5vbkdyb3VwU2Nyb2xsLmJpbmQodGhpcyksIHRydWUpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUmVtb3ZlIHRoZSBzY3JvbGwgbGlzdGVuZXIgZnJvbSB0aGUgZ3JvdXAgY29udGFpbmVyLlxyXG4gICAqL1xyXG4gIHJlbW92ZUdyb3VwU2Nyb2xsTGlzdGVuZXIoKTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5zZWxlY3RlZFJvd0dyb3VwQ29udGFpbmVyKSB7XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRSb3dHcm91cENvbnRhaW5lci5yZW1vdmVFdmVudExpc3RlbmVyKFwic2Nyb2xsXCIsIHRoaXMub25Hcm91cFNjcm9sbC5iaW5kKHRoaXMpKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIExpc3RlbiBmb3IgdGhlIHNjcm9sbCBldmVudCwgZGV0ZXJtaW5lIGlmIHRoZSBzY3JvbGwgaGl0IHRoZSB0b3Agb3IgYm90dG9tIG9mIHRoZSBjb250YWluZXIuXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge0V2ZW50fSBldmVudFxyXG4gICAqL1xyXG4gIG9uR3JvdXBTY3JvbGwoZXZlbnQ6IEV2ZW50KTogdm9pZCB7XHJcbiAgICBpZiAoIXRoaXMuYnVzeSkge1xyXG4gICAgICBsZXQgbmV3U2Nyb2xsVG9wOiBudW1iZXIgPSBNYXRoLnJvdW5kKHRoaXMuc2VsZWN0ZWRSb3dHcm91cENvbnRhaW5lci5zY3JvbGxUb3ApO1xyXG4gICAgICBsZXQgc2Nyb2xsUG9zaXRpb246IG51bWJlciA9IDE7XHJcbiAgICAgIGlmIChuZXdTY3JvbGxUb3AgPT09IDAgJiYgc2Nyb2xsUG9zaXRpb24gIT09IDApIHtcclxuICAgICAgICBzY3JvbGxQb3NpdGlvbiA9IDA7XHJcbiAgICAgIH0gZWxzZSBpZiAoc2Nyb2xsUG9zaXRpb24gIT09IDIgJiYgTWF0aC5hYnModGhpcy5zZWxlY3RlZFJvd0dyb3VwQ29udGFpbmVyLnNjcm9sbEhlaWdodCAtIChuZXdTY3JvbGxUb3AgKyB0aGlzLnNlbGVjdGVkUm93R3JvdXBDb250YWluZXIub2Zmc2V0SGVpZ2h0KSkgPCAzKSB7XHJcbiAgICAgICAgc2Nyb2xsUG9zaXRpb24gPSAyO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHNjcm9sbFBvc2l0aW9uID0gMTtcclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKHRoaXMubGFzdFNjcm9sbFBvc2l0aW9uICE9PSBzY3JvbGxQb3NpdGlvbiAmJiB0aGlzLmxhc3RTY3JvbGxQb3NpdGlvbiA9PT0gMSkge1xyXG4gICAgICAgIGlmIChzY3JvbGxQb3NpdGlvbiA9PT0gMCkge1xyXG4gICAgICAgICAgdGhpcy5ncm91cFByZXZpb3VzUGFnZSgpO1xyXG4gICAgICAgIH0gZWxzZSBpZiAoc2Nyb2xsUG9zaXRpb24gPT09IDIpIHtcclxuICAgICAgICAgIHRoaXMuZ3JvdXBOZXh0UGFnZSgpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG5cclxuICAgICAgdGhpcy5sYXN0U2Nyb2xsVG9wID0gbmV3U2Nyb2xsVG9wO1xyXG4gICAgICB0aGlzLmxhc3RTY3JvbGxQb3NpdGlvbiA9IHNjcm9sbFBvc2l0aW9uO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogV2hlbiBzY3JvbGxpbmcgaGl0cyB0aGUgdG9wLCBsb2FkIHRoZSBwcmV2aW91cyBwYWdlIG9mIGdyb3VwIGRhdGEuXHJcbiAgICovXHJcbiAgZ3JvdXBQcmV2aW91c1BhZ2UoKTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5zZWxlY3RlZFJvd0dyb3VwLnJnUGFnZU1pbiA9PT0gMCkge1xyXG4gICAgICBjb25zb2xlLndhcm4oXCJGaXJzdCBwYWdlIGFscmVhZHkgbG9hZGVkLlwiKTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMucmVtb3ZlR3JvdXBTY3JvbGxMaXN0ZW5lcigpO1xyXG5cclxuICAgIGxldCBncm91cEZpbHRlcnM6IEhjaUZpbHRlckR0b1tdID0gdGhpcy5maWx0ZXJzLnNsaWNlKCk7XHJcbiAgICBmb3IgKGxldCBncm91cEZpZWxkIG9mIHRoaXMuZ3JvdXBpbmcuZmllbGRzKSB7XHJcbiAgICAgIGdyb3VwRmlsdGVycy5wdXNoKG5ldyBIY2lGaWx0ZXJEdG8oZ3JvdXBGaWVsZCwgXCJzdHJpbmdcIiwgdGhpcy5zZWxlY3RlZFJvd0dyb3VwW2dyb3VwRmllbGRdLCB1bmRlZmluZWQsIFwiRVwiLCB0cnVlKSk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKCF0aGlzLmJ1c3kpIHtcclxuICAgICAgdGhpcy5idXN5ID0gdHJ1ZTtcclxuICAgICAgdGhpcy5sb2FkaW5nU3ViamVjdHNbMF0ubmV4dCh0cnVlKTtcclxuICAgICAgdGhpcy5leHRlcm5hbERhdGFDYWxsKG5ldyBIY2lHcmlkRHRvKGdyb3VwRmlsdGVycywgdGhpcy5zb3J0cywgbmV3IEhjaVBhZ2luZ0R0byh0aGlzLnNlbGVjdGVkUm93R3JvdXAucmdQYWdlTWluIC0gMSwgdGhpcy5ncm91cFBhZ2VTaXplKSwgbmV3IEhjaUdyb3VwaW5nRHRvKHRoaXMuZ3JvdXBpbmcuZmllbGRzLCBmYWxzZSkpKVxyXG4gICAgICAgIC5waXBlKGZpbmFsaXplKCgpID0+IHtcclxuICAgICAgICAgIHRoaXMubG9hZGluZ1N1YmplY3RzWzBdLm5leHQoZmFsc2UpO1xyXG4gICAgICAgICAgdGhpcy5idXN5ID0gZmFsc2U7XHJcblxyXG4gICAgICAgICAgb2YodW5kZWZpbmVkKS5waXBlKGRlbGF5KDUwKSkuc3Vic2NyaWJlKCgpID0+IHtcclxuICAgICAgICAgICAgaWYgKHRoaXMuc2VsZWN0ZWRSb3dHcm91cENvbnRhaW5lci5zY3JvbGxUb3AgPT09IDApIHtcclxuICAgICAgICAgICAgICB0aGlzLnJlbmRlcmVyLnNldFN0eWxlKHRoaXMuc2VsZWN0ZWRSb3dHcm91cENvbnRhaW5lciwgXCJzY3JvbGxUb3BcIiwgXCIxXCIpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICB0aGlzLmFkZEdyb3VwU2Nyb2xsTGlzdGVuZXIoKTtcclxuICAgICAgICB9KSlcclxuICAgICAgICAuc3Vic2NyaWJlKChleHRlcm5hbERhdGE6IEhjaURhdGFEdG8pID0+IHtcclxuICAgICAgICAgIHRoaXMuc2VsZWN0ZWRSb3dHcm91cC5yZ1Jvd3MgPSBleHRlcm5hbERhdGEuZGF0YS5jb25jYXQodGhpcy5zZWxlY3RlZFJvd0dyb3VwLnJnUm93cyk7XHJcbiAgICAgICAgICB0aGlzLnNlbGVjdGVkUm93R3JvdXAucmdQYWdlTWluIC09IDE7XHJcblxyXG4gICAgICAgICAgaWYgKHRoaXMuZ3JvdXBDYWNoZU51bVBhZ2VzICYmIHRoaXMuc2VsZWN0ZWRSb3dHcm91cC5yZ1BhZ2VNYXggLSB0aGlzLnNlbGVjdGVkUm93R3JvdXAucmdQYWdlTWluID49IHRoaXMuZ3JvdXBDYWNoZU51bVBhZ2VzKSB7XHJcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRSb3dHcm91cC5yZ1Jvd3Muc3BsaWNlKHRoaXMuZ3JvdXBDYWNoZU51bVBhZ2VzICogdGhpcy5ncm91cFBhZ2VTaXplKTtcclxuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZFJvd0dyb3VwLnJnUGFnZU1heCAtPSAxO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogV2hlbiBzY3JvbGxpbmcgaGl0cyB0aGUgYm90dG9tLCBsb2FkIHRoZSBuZXh0IHBhZ2Ugb2YgZ3JvdXAgZGF0YS5cclxuICAgKi9cclxuICBncm91cE5leHRQYWdlKCk6IHZvaWQge1xyXG4gICAgaWYgKCh0aGlzLnNlbGVjdGVkUm93R3JvdXAucmdQYWdlTWF4ICsgMSkgKiB0aGlzLmdyb3VwUGFnZVNpemUgPj0gdGhpcy5zZWxlY3RlZFJvd0dyb3VwLnJnQ291bnQpIHtcclxuICAgICAgY29uc29sZS53YXJuKFwiQWxsIHJvd3MgYWxyZWFkeSBsb2FkZWRcIik7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLnJlbW92ZUdyb3VwU2Nyb2xsTGlzdGVuZXIoKTtcclxuXHJcbiAgICBsZXQgZ3JvdXBGaWx0ZXJzOiBIY2lGaWx0ZXJEdG9bXSA9IHRoaXMuZmlsdGVycy5zbGljZSgpO1xyXG4gICAgZm9yIChsZXQgZ3JvdXBGaWVsZCBvZiB0aGlzLmdyb3VwaW5nLmZpZWxkcykge1xyXG4gICAgICBncm91cEZpbHRlcnMucHVzaChuZXcgSGNpRmlsdGVyRHRvKGdyb3VwRmllbGQsIFwic3RyaW5nXCIsIHRoaXMuc2VsZWN0ZWRSb3dHcm91cFtncm91cEZpZWxkXSwgdW5kZWZpbmVkLCBcIkVcIiwgdHJ1ZSkpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICghdGhpcy5idXN5KSB7XHJcbiAgICAgIHRoaXMuYnVzeSA9IHRydWU7XHJcbiAgICAgIHRoaXMubG9hZGluZ1N1YmplY3RzWzBdLm5leHQodHJ1ZSk7XHJcbiAgICAgIHRoaXMuZXh0ZXJuYWxEYXRhQ2FsbChuZXcgSGNpR3JpZER0byhncm91cEZpbHRlcnMsIHRoaXMuc29ydHMsIG5ldyBIY2lQYWdpbmdEdG8odGhpcy5zZWxlY3RlZFJvd0dyb3VwLnJnUGFnZU1heCArIDEsIHRoaXMuZ3JvdXBQYWdlU2l6ZSksIG5ldyBIY2lHcm91cGluZ0R0byh0aGlzLmdyb3VwaW5nLmZpZWxkcywgZmFsc2UpKSlcclxuICAgICAgICAucGlwZShmaW5hbGl6ZSgoKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLmxvYWRpbmdTdWJqZWN0c1swXS5uZXh0KGZhbHNlKTtcclxuICAgICAgICAgIHRoaXMuYnVzeSA9IGZhbHNlO1xyXG5cclxuICAgICAgICAgIG9mKHVuZGVmaW5lZCkucGlwZShkZWxheSg1MCkpLnN1YnNjcmliZSgoKSA9PiB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLnNlbGVjdGVkUm93R3JvdXBDb250YWluZXIuc2Nyb2xsVG9wID09PSAwKSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5yZW5kZXJlci5zZXRTdHlsZSh0aGlzLnNlbGVjdGVkUm93R3JvdXBDb250YWluZXIsIFwic2Nyb2xsVG9wXCIsIFwiMVwiKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgdGhpcy5hZGRHcm91cFNjcm9sbExpc3RlbmVyKCk7XHJcbiAgICAgICAgfSkpXHJcbiAgICAgICAgLnN1YnNjcmliZSgoZXh0ZXJuYWxEYXRhOiBIY2lEYXRhRHRvKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLnNlbGVjdGVkUm93R3JvdXAucmdSb3dzID0gdGhpcy5zZWxlY3RlZFJvd0dyb3VwLnJnUm93cy5jb25jYXQoZXh0ZXJuYWxEYXRhLmRhdGEpO1xyXG4gICAgICAgICAgdGhpcy5zZWxlY3RlZFJvd0dyb3VwLnJnUGFnZU1heCArPSAxO1xyXG5cclxuICAgICAgICAgIGlmICh0aGlzLmdyb3VwQ2FjaGVOdW1QYWdlcyAmJiB0aGlzLnNlbGVjdGVkUm93R3JvdXAucmdQYWdlTWF4IC0gdGhpcy5zZWxlY3RlZFJvd0dyb3VwLnJnUGFnZU1pbiA+PSB0aGlzLmdyb3VwQ2FjaGVOdW1QYWdlcykge1xyXG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkUm93R3JvdXAucmdSb3dzLnNwbGljZSgwLCB0aGlzLmdyb3VwUGFnZVNpemUpO1xyXG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkUm93R3JvdXAucmdQYWdlTWluICs9IDE7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBHbyB0byB0aGUgZmlyc3QgcGFnZS5cclxuICAgKi9cclxuICBwdWJsaWMgZG9QYWdlRmlyc3QoKTogdm9pZCB7XHJcbiAgICBpZiAoIXRoaXMuYnVzeSkge1xyXG4gICAgICB0aGlzLnBhZ2luZy5zZXRQYWdlKDApO1xyXG4gICAgICB0aGlzLnBhZ2luZ1N1YmplY3QubmV4dCh0aGlzLnBhZ2luZyk7XHJcbiAgICAgIHRoaXMuY2hlY2tBY3RpdmVSb3dJZCgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogR28gdG8gdGhlIHByZXZpb3VzIHBhZ2UuXHJcbiAgICovXHJcbiAgcHVibGljIGRvUGFnZVByZXZpb3VzKCk6IHZvaWQge1xyXG4gICAgaWYgKCF0aGlzLmJ1c3kpIHtcclxuICAgICAgaWYgKHRoaXMucGFnaW5nLmdldFBhZ2UoKSA+IDApIHtcclxuICAgICAgICB0aGlzLnBhZ2luZy5zZXRQYWdlKHRoaXMucGFnaW5nLmdldFBhZ2UoKSAtIDEpO1xyXG4gICAgICAgIHRoaXMucGFnaW5nU3ViamVjdC5uZXh0KHRoaXMucGFnaW5nKTtcclxuICAgICAgICB0aGlzLmNoZWNrQWN0aXZlUm93SWQoKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogR28gdG8gdGhlIG5leHQgcGFnZS5cclxuICAgKi9cclxuICBwdWJsaWMgZG9QYWdlTmV4dCgpOiB2b2lkIHtcclxuICAgIGlmICghdGhpcy5idXN5KSB7XHJcbiAgICAgIGlmICh0aGlzLnBhZ2luZy5nZXRQYWdlKCkgPCB0aGlzLnBhZ2luZy5nZXROdW1QYWdlcygpIC0gMSkge1xyXG4gICAgICAgIHRoaXMucGFnaW5nLnNldFBhZ2UodGhpcy5wYWdpbmcuZ2V0UGFnZSgpICsgMSk7XHJcbiAgICAgICAgdGhpcy5wYWdpbmdTdWJqZWN0Lm5leHQodGhpcy5wYWdpbmcpO1xyXG4gICAgICAgIHRoaXMuY2hlY2tBY3RpdmVSb3dJZCgpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBHbyB0byB0aGUgbGFzdCBwYWdlLlxyXG4gICAqL1xyXG4gIHB1YmxpYyBkb1BhZ2VMYXN0KCk6IHZvaWQge1xyXG4gICAgaWYgKCF0aGlzLmJ1c3kpIHtcclxuICAgICAgdGhpcy5wYWdpbmcuc2V0UGFnZSh0aGlzLnBhZ2luZy5nZXROdW1QYWdlcygpIC0gMSk7XHJcbiAgICAgIHRoaXMucGFnaW5nU3ViamVjdC5uZXh0KHRoaXMucGFnaW5nKTtcclxuICAgICAgdGhpcy5jaGVja0FjdGl2ZVJvd0lkKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBBZnRlciBwYWdlIHR1cm5zLCBjaGVjayBpZiB0aGUgcGFnZSBoYXMgdGhlIHJvdyB0aGF0IG5lZWQgdG8gYmUgaGlnaGxpZ2h0ZWRcclxuICAgKi9cclxuICBwcml2YXRlIGNoZWNrQWN0aXZlUm93SWQoKTogdm9pZCB7XHJcbiAgICAvL2lmIGEgcm93IGlzIHNlbGVjdGVkLCBhbmQgcm93SWQgZmllbGQgaXMgc3BlY2lmaWVkICh1c3VhbGx5IGNvbmZpZ3VyZWQgYnkgY29uZmlnKVxyXG4gICAgaWYgKHRoaXMuc2VsZWN0ZWRSb3cgJiYgdGhpcy5yb3dJZCkge1xyXG4gICAgICBsZXQgaWQgPSB0aGlzLnNlbGVjdGVkUm93W3RoaXMucm93SWRdO1xyXG4gICAgICBpZiAoaWQpIHtcclxuICAgICAgICB0aGlzLmFjdGl2YXRlUm93QnlJZChpZCk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIENvbmNhdCBncm91cCBieSBmaWVsZHMgdG8gY29tbWEgZGVsaW1pdGVkIHdvcmRzLlxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtSb3dHcm91cH0gcm93R3JvdXBcclxuICAgKiBAcmV0dXJucyB7c3RyaW5nfVxyXG4gICAqL1xyXG4gIGdldEdyb3VwRGlzcGxheShyb3dHcm91cDogUm93R3JvdXApOiBzdHJpbmcge1xyXG4gICAgbGV0IGRpc3BsYXk6IHN0cmluZztcclxuXHJcbiAgICBpZiAodGhpcy5ncm91cERpc3BsYXkpIHtcclxuICAgICAgZGlzcGxheSA9IHRoaXMuZ3JvdXBEaXNwbGF5O1xyXG4gICAgICBmb3IgKGxldCBmaWVsZCBvZiB0aGlzLmdyb3VwaW5nLmZpZWxkcykge1xyXG4gICAgICAgIGRpc3BsYXkgPSBkaXNwbGF5LnJlcGxhY2UoZmllbGQsIHJvd0dyb3VwW2ZpZWxkXSk7XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGZvciAobGV0IGZpZWxkIG9mIHRoaXMuZ3JvdXBpbmcuZmllbGRzKSB7XHJcbiAgICAgICAgZGlzcGxheSA9IChkaXNwbGF5KSA/IGRpc3BsYXkgKyBcIiwgXCIgKyByb3dHcm91cFtmaWVsZF0gOiByb3dHcm91cFtmaWVsZF07XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gZGlzcGxheTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFNldHMgdGhlIHNlbGVjdGVkUm93R3JvdXBDb250YWluZXIgZWxlbWVudC5cclxuICAgKlxyXG4gICAqIEBwYXJhbSB7RWxlbWVudFJlZn0gc2VsZWN0ZWRSb3dHcm91cENvbnRhaW5lclxyXG4gICAqL1xyXG4gIEBWaWV3Q2hpbGQoXCJzZWxlY3RlZFJvd0dyb3VwQ29udGFpbmVyXCIsIHtcclxuICAgIHJlYWQ6IEVsZW1lbnRSZWYsXHJcbiAgICBzdGF0aWM6IGZhbHNlXHJcbiAgfSkgc2V0IHNlbGVjdGVkUm93R3JvdXBDb250YWluZXJTZXR0ZXIoc2VsZWN0ZWRSb3dHcm91cENvbnRhaW5lcjogRWxlbWVudFJlZikge1xyXG4gICAgaWYgKHRoaXMuc2VsZWN0ZWRSb3dHcm91cENvbnRhaW5lciAmJiB0aGlzLnNldFNjcm9sbFRvcCkge1xyXG4gICAgICB0aGlzLnNlbGVjdGVkUm93R3JvdXBDb250YWluZXIuc2Nyb2xsVG9wID0gKDxIVE1MRWxlbWVudD50aGlzLnNlbGVjdGVkUm93R3JvdXBDb250YWluZXIucXVlcnlTZWxlY3RvcihcIiNpbm5lclJvd0dyb3VwQ29udGFpbmVyXCIpKS5vZmZzZXRIZWlnaHQ7XHJcbiAgICAgIHRoaXMuc2V0U2Nyb2xsVG9wID0gZmFsc2U7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKCF0aGlzLnNlbGVjdGVkUm93R3JvdXBDb250YWluZXIgJiYgc2VsZWN0ZWRSb3dHcm91cENvbnRhaW5lcikge1xyXG4gICAgICB0aGlzLnNlbGVjdGVkUm93R3JvdXBDb250YWluZXIgPSBzZWxlY3RlZFJvd0dyb3VwQ29udGFpbmVyLm5hdGl2ZUVsZW1lbnQ7XHJcblxyXG4gICAgICBsZXQgZ3JvdXBTZWxlY3RlZFBhcmVudDogSFRNTEVsZW1lbnQgPSA8SFRNTEVsZW1lbnQ+dGhpcy5zZWxlY3RlZFJvd0dyb3VwQ29udGFpbmVyLmNsb3Nlc3QoXCIuZ3JvdXAtc2VsZWN0ZWQtcGFyZW50XCIpO1xyXG4gICAgICB0aGlzLnJlbmRlcmVyLnNldFN0eWxlKGdyb3VwU2VsZWN0ZWRQYXJlbnQsIFwiZGlzcGxheVwiLCBcImZsZXhcIik7XHJcblxyXG4gICAgICBvZihudWxsKS5waXBlKGRlbGF5KDUwKSkuc3Vic2NyaWJlKCgpID0+IHtcclxuICAgICAgICB0aGlzLnJlbmRlcmVyLmFkZENsYXNzKGdyb3VwU2VsZWN0ZWRQYXJlbnQsIFwiYWN0aXZlXCIpO1xyXG4gICAgICAgIHRoaXMuaW5uZXJSb3dHcm91cENvbnRhaW5lciA9IHRoaXMuc2VsZWN0ZWRSb3dHcm91cENvbnRhaW5lci5xdWVyeVNlbGVjdG9yKFwiI2lubmVyUm93R3JvdXBDb250YWluZXJcIik7XHJcbiAgICAgICAgdGhpcy5yZW5kZXJlci5zZXRTdHlsZSh0aGlzLnNlbGVjdGVkUm93R3JvdXBDb250YWluZXIsIFwiaGVpZ2h0XCIsIHRoaXMuaW5uZXJSb3dHcm91cENvbnRhaW5lci5vZmZzZXRIZWlnaHQgKyBcInB4XCIpO1xyXG4gICAgICAgIHRoaXMucmVuZGVyZXIuc2V0U3R5bGUodGhpcy5pbm5lclJvd0dyb3VwQ29udGFpbmVyLCBcIm1pbi1oZWlnaHRcIiwgKHRoaXMuaW5uZXJSb3dHcm91cENvbnRhaW5lci5vZmZzZXRIZWlnaHQgKyAzMCkgKyBcInB4XCIpO1xyXG4gICAgICAgIHRoaXMucmVuZGVyZXIuc2V0U3R5bGUodGhpcy5zZWxlY3RlZFJvd0dyb3VwQ29udGFpbmVyLCBcInNjcm9sbFRvcFwiLCBcIjFcIik7XHJcblxyXG4gICAgICAgIHRoaXMuYWRkR3JvdXBTY3JvbGxMaXN0ZW5lcigpO1xyXG4gICAgICB9KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEFsbG93IGEgY3VzdG9tIHJvdyBjbGljayBmdW5jdGlvbiB0byBjb250cm9sIGRlc2VsZWN0aW9uLlxyXG4gICAqL1xyXG4gIGRlc2VsZWN0QWxsUm93cygpOiB2b2lkIHtcclxuICAgIGxldCBlczogSFRNTEVsZW1lbnRbXSA9IHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoXCIucm93LXBhcmVudFwiKTtcclxuICAgIGZvciAobGV0IGUgb2YgZXMpIHtcclxuICAgICAgdGhpcy5yZW5kZXJlci5yZW1vdmVDbGFzcyhlLCBcImFjdGl2ZVwiKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEFsbG93IGEgY3VzdG9tIGdyb3VwIGNsaWNrIGZ1bmN0aW9uIHRvIGNvbnRyb2wgZGVzZWxlY3Rpb24uXHJcbiAgICovXHJcbiAgZGVzZWxlY3RBbGxHcm91cHMoKTogdm9pZCB7XHJcbiAgICBsZXQgZXM6IEhUTUxFbGVtZW50W10gPSB0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5xdWVyeVNlbGVjdG9yQWxsKFwiLmdyb3VwLXBhcmVudFwiKTtcclxuICAgIGZvciAobGV0IGUgb2YgZXMpIHtcclxuICAgICAgdGhpcy5yZW5kZXJlci5yZW1vdmVDbGFzcyhlLCBcImFjdGl2ZVwiKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEFsbG93IGEgY3VzdG9tIHJvdyBjbGljayBmdW5jdGlvbiB0byBzZWxlY3QgYSByb3cuXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge3N0cmluZ30gaWRcclxuICAgKi9cclxuICBhY3RpdmF0ZVJvd0J5SWQoaWQ6IHN0cmluZyk6IHZvaWQge1xyXG4gICAgbGV0IGU6IEhUTUxFbGVtZW50ID0gdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3RvcihcIiNyb3ctXCIgKyBpZCk7XHJcbiAgICBpZiAoZSkge1xyXG4gICAgICB0aGlzLnJlbmRlcmVyLmFkZENsYXNzKGUsIFwiYWN0aXZlXCIpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgYWN0aXZhdGVHcm91cEJ5SWQoaWQ6IHN0cmluZyk6IHZvaWQge1xyXG4gICAgbGV0IGU6IEhUTUxFbGVtZW50ID0gdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3RvcihcIiNyb3ctZ3JvdXAtXCIgKyBpZCk7XHJcbiAgICBpZiAoZSkge1xyXG4gICAgICB0aGlzLnJlbmRlcmVyLmFkZENsYXNzKGUsIFwiYWN0aXZlXCIpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogVGhpcyBmdW5jdGlvbiB3aWxsIHJldHVybiB3aGV0aGVyIGEgcGFydGljdWxhciBncm91cCBpcyBleHBhbmRlZCBvciBjb2xsYXBzZWRcclxuICAgKiBAcGFyYW0gcm93R3JvdXBcclxuICAgKi9cclxuICBnZXRHcm91cEV4cGFuZGVkSW5kaWNhdG9yKHJvd0dyb3VwOiBSb3dHcm91cCkge1xyXG4gICAgaWYgKHJvd0dyb3VwLnJnRXhwYW5kZWQgPT09IHRydWUpIHtcclxuICAgICAgcmV0dXJuIFwibWludXNcIjtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHJldHVybiBcInBsdXNcIjtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8vVE9EbyA6IEhhbmRsZSB0aGUgY2FzZSB3aGVyZSB0aGUgdXNlciB1c2VzIGEgY3VzdG9tIGdyb3VwVGVtcGxhdGVcclxuICAvKipcclxuICAgKiBUaGlzIGZ1bmN0aW9uIHdpbGwgY2F1c2UgU2VhcmNoTGlzdENvbXBvbmVudCB0byBuYXZpZ2F0ZSB0byBhIHBhZ2UgYW5kIGhpZ2hsaWdodCB0aGUgZ2l2ZW4gZ3JvdXAgaXRlbSwgb3JcclxuICAgKiB0aGUgcm93IChpbi1jYXNlIG9mIG5vbi1ncm91cGVkIGxpc3QpXHJcbiAgICogVGhpc1xyXG4gICAqIEBwYXJhbSBncm91cElkIDogVGhpcyBzaG91bGQgY29udGFpbiBhIHN0cmluZyB0byB1bmlxdWVseSBpZGVudGlmeSBhIHBhcnRpY3VsYXIgZ3JvdXAtZGlzcGxheVxyXG4gICAqIEBwYXJhbSByb3dJZCA6IFRoaXMgaXMgdGhlIGFjdHVhbCByb3dJZCBmb3IgdGhlIHJvdyB0byBiZSBzZWxlY3RlZC5cclxuICAgKi9cclxuICBuYXZpZ2F0ZVRvUGFnZUNvbnRhaW5pbmdFbGVtZW50KGdyb3VwSWQ6IHN0cmluZywgcm93SWQ6IHN0cmluZykge1xyXG5cclxuICAgIC8vSW50cm9kdWNpbmcgdGhlIGFkZGl0aW9uYWwgY2hlY2sgYmVsb3cgdG8gYWRkcmVzcyBDQ1JVSS0xMTYzLlxyXG4gICAgaWYgKCF0aGlzLmJvdW5kRGF0YSB8fCB0aGlzLmJvdW5kRGF0YS5sZW5ndGggPT09IDApIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgLy8gQ2hlY2sgaWYgZ3JvdXBlZFxyXG4gICAgbGV0IHJvd0dyb3VwZWQ6IGJvb2xlYW4gPSB0aGlzLmdyb3VwaW5nLmZpZWxkcyAmJiB0aGlzLmdyb3VwaW5nLmZpZWxkcy5sZW5ndGggPiAwO1xyXG5cclxuICAgIGlmIChyb3dHcm91cGVkKSB7XHJcbiAgICAgIHRoaXMuZ3JvdXBlZERhdGFTZXQuZm9yRWFjaCgocm93R3JvdXAsIGluZGV4KSA9PiB7XHJcbiAgICAgICAgbGV0IGdyb3VwRGlzcGxheSA9IHRoaXMuZ2V0R3JvdXBEaXNwbGF5KHJvd0dyb3VwKTtcclxuICAgICAgICBpZiAoZ3JvdXBEaXNwbGF5LmluY2x1ZGVzKGdyb3VwSWQpKSB7XHJcbiAgICAgICAgICAvL1NldCB0aGUgcGFnZSB0byB0aGUgaW5kZXhcclxuICAgICAgICAgIGlmICghdGhpcy5idXN5KSB7XHJcbiAgICAgICAgICAgIGxldCBwYWdlID0gTWF0aC5mbG9vcihpbmRleCAvIHRoaXMucGFnaW5nLmdldFBhZ2VTaXplKCkpO1xyXG4gICAgICAgICAgICBpZiAodGhpcy5wYWdpbmcuZ2V0TnVtUGFnZXMoKSAtIDEgPj0gcGFnZSkge1xyXG4gICAgICAgICAgICAgIHRoaXMucGFnaW5nLnNldFBhZ2UocGFnZSk7XHJcbiAgICAgICAgICAgICAgdGhpcy5wYWdpbmdTdWJqZWN0Lm5leHQodGhpcy5wYWdpbmcpO1xyXG4gICAgICAgICAgICAgIC8vdGhpcy5kZWZhdWx0R3JvdXBDbGljayhudWxsLCB0aGlzLCByb3dHcm91cCk7XHJcbiAgICAgICAgICAgICAgbGV0IGdyb3VwU2VsZWN0ZWRQYXJlbnQgPSA8SFRNTEVsZW1lbnQ+PHVua25vd24+ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQodGhpcy5nZXRSb3dHcm91cElkKHJvd0dyb3VwKSk7XHJcbiAgICAgICAgICAgICAgZ3JvdXBTZWxlY3RlZFBhcmVudC5jbGljaygpO1xyXG4gICAgICAgICAgICAgIHRoaXMuZGVzZWxlY3RBbGxSb3dzKCk7XHJcbiAgICAgICAgICAgICAgdGhpcy5hY3RpdmF0ZVJvd0J5SWQocm93SWQucmVwbGFjZShcInJvdy1cIiwgXCJcIikpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuYm91bmREYXRhLmZvckVhY2goKHJvdywgaW5kZXgpID0+IHtcclxuICAgICAgICBpZiAodGhpcy5nZXRSb3dJZChyb3cpID09PSByb3dJZCkge1xyXG4gICAgICAgICAgaWYgKCF0aGlzLmJ1c3kpIHtcclxuICAgICAgICAgICAgbGV0IHBhZ2UgPSBNYXRoLmZsb29yKGluZGV4IC8gdGhpcy5wYWdpbmcuZ2V0UGFnZVNpemUoKSk7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLnBhZ2luZy5nZXROdW1QYWdlcygpIC0gMSA+PSBwYWdlKSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5wYWdpbmcuc2V0UGFnZShwYWdlKTtcclxuICAgICAgICAgICAgICB0aGlzLnBhZ2luZ1N1YmplY3QubmV4dCh0aGlzLnBhZ2luZyk7XHJcbiAgICAgICAgICAgICAgdGhpcy5hY3RpdmF0ZVJvd0J5SWQocm93SWQucmVwbGFjZShcInJvdy1cIiwgXCJcIikpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgc2V0UmVzdWx0TWVzc2FnZShkYXRhOiBPYmplY3RbXSkge1xyXG4gICAgaWYgKHRoaXMuc2hvd1Jlc3VsdHNDb3VudCAmJiBkYXRhICYmIGRhdGEubGVuZ3RoID4gMCkge1xyXG4gICAgICB0aGlzLnNlYXJjaFJlc3VsdE1lc3NhZ2UgPSBkYXRhLmxlbmd0aCArIFwiIHJlc3VsdChzKVwiO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5zZWFyY2hSZXN1bHRNZXNzYWdlID0gXCJcIjtcclxuICAgIH1cclxuICB9XHJcbn1cclxuIl19
1486
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VhcmNoLWxpc3QuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmF2aWdhdGlvbi9zcmMvY29tcG9uZW50cy9zZWFyY2gtbGlzdC9zZWFyY2gtbGlzdC5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7O0FBQUEsT0FBTyxFQUNMLGlCQUFpQixFQUNqQixTQUFTLEVBQ1Qsd0JBQXdCLEVBQ3hCLFVBQVUsRUFDVixZQUFZLEVBQ1osS0FBSyxFQUNMLFNBQVMsRUFDVCxRQUFRLEVBQ1IsTUFBTSxFQUNOLFNBQVMsRUFDVCxTQUFTLEVBR1QsV0FBVyxFQUNYLFNBQVMsRUFDVCxZQUFZLEVBQ2IsTUFBTSxlQUFlLENBQUM7QUFFdkIsT0FBTyxFQUFDLGVBQWUsRUFBYyxFQUFFLEVBQVUsTUFBTSxNQUFNLENBQUM7QUFDOUQsT0FBTyxFQUFDLEtBQUssRUFBRSxRQUFRLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUMvQyxPQUFPLEVBQUMsV0FBVyxFQUFDLE1BQU0sNEJBQTRCLENBQUM7QUFFdkQsT0FBTyxFQUFhLFlBQVksRUFBRSxVQUFVLEVBQUUsY0FBYyxFQUFFLFlBQVksRUFBYSxNQUFNLDRDQUE0QyxDQUFDO0FBQzFJLE9BQU8sRUFBQyxhQUFhLEVBQUMsTUFBTSxrQ0FBa0MsQ0FBQztBQUUvRCxPQUFPLEVBQUMsWUFBWSxFQUFDLE1BQU0sa0JBQWtCLENBQUM7QUFDOUMsT0FBTyxFQUFDLGlCQUFpQixFQUFDLE1BQU0sbUNBQW1DLENBQUM7QUFDcEUsT0FBTyxFQUFDLFFBQVEsRUFBQyxNQUFNLGFBQWEsQ0FBQztBQUNyQyxPQUFPLEVBQUMsdUJBQXVCLEVBQUMsTUFBTSwwQ0FBMEMsQ0FBQztBQUNqRixPQUFPLEVBQUMsNkJBQTZCLEVBQUMsTUFBTSxvQ0FBb0MsQ0FBQzs7Ozs7OztBQUVqRjs7O0dBR0c7QUF5TUksSUFBTSxtQkFBbUIsR0FBekIsTUFB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bXBvcnQge1xyXG4gIENoYW5nZURldGVjdG9yUmVmLFxyXG4gIENvbXBvbmVudCxcclxuICBDb21wb25lbnRGYWN0b3J5UmVzb2x2ZXIsXHJcbiAgRWxlbWVudFJlZixcclxuICBFdmVudEVtaXR0ZXIsXHJcbiAgSW5wdXQsXHJcbiAgaXNEZXZNb2RlLFxyXG4gIE9wdGlvbmFsLFxyXG4gIE91dHB1dCxcclxuICBRdWVyeUxpc3QsXHJcbiAgUmVuZGVyZXIyLFxyXG4gIFNpbXBsZUNoYW5nZSxcclxuICBTaW1wbGVDaGFuZ2VzLFxyXG4gIFRlbXBsYXRlUmVmLFxyXG4gIFZpZXdDaGlsZCxcclxuICBWaWV3Q2hpbGRyZW5cclxufSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xyXG5cclxuaW1wb3J0IHtCZWhhdmlvclN1YmplY3QsIE9ic2VydmFibGUsIG9mLCBTdWJqZWN0fSBmcm9tIFwicnhqc1wiO1xyXG5pbXBvcnQge2RlbGF5LCBmaW5hbGl6ZX0gZnJvbSBcInJ4anMvb3BlcmF0b3JzXCI7XHJcbmltcG9ydCB7TmdiRHJvcGRvd259IGZyb20gXCJAbmctYm9vdHN0cmFwL25nLWJvb3RzdHJhcFwiO1xyXG5cclxuaW1wb3J0IHtIY2lEYXRhRHRvLCBIY2lGaWx0ZXJEdG8sIEhjaUdyaWREdG8sIEhjaUdyb3VwaW5nRHRvLCBIY2lQYWdpbmdEdG8sIEhjaVNvcnREdG99IGZyb20gXCJAaHVudHNtYW4tY2FuY2VyLWluc3RpdHV0ZS9oY2ktbmctZ3JpZC1kdG9cIjtcclxuaW1wb3J0IHtDb21wb25lbnRUeXBlfSBmcm9tIFwiQGh1bnRzbWFuLWNhbmNlci1pbnN0aXR1dGUvdXRpbHNcIjtcclxuXHJcbmltcG9ydCB7TmF2Q29tcG9uZW50fSBmcm9tIFwiLi4vbmF2LmNvbXBvbmVudFwiO1xyXG5pbXBvcnQge05hdmlnYXRpb25TZXJ2aWNlfSBmcm9tIFwiLi4vLi4vc2VydmljZXMvbmF2aWdhdGlvbi5zZXJ2aWNlXCI7XHJcbmltcG9ydCB7Um93R3JvdXB9IGZyb20gXCIuL3Jvdy1ncm91cFwiO1xyXG5pbXBvcnQge05hdmlnYXRpb25HbG9iYWxTZXJ2aWNlfSBmcm9tIFwiLi4vLi4vc2VydmljZXMvbmF2aWdhdGlvbi1nbG9iYWwuc2VydmljZVwiO1xyXG5pbXBvcnQge1NlYXJjaExpc3RDb250cm9sbGVyQ29tcG9uZW50fSBmcm9tIFwiLi9zZWFyY2gtbGlzdC1jb250cm9sbGVyLmNvbXBvbmVudFwiO1xyXG5cclxuLyoqXHJcbiAqIFNob3dzIGEgbGlzdCBvZiBpdGVtcyB0aGF0IGNhbiBiZSBncm91cGVkIG9yIG5vdCBncm91cGVkLiAgVGhlIGRhdGEgY2FuIGJlIGdlbmVyYXRlZCBmcm9tIGFuIGFycmF5LCBvciBmcm9tIGFuIGV4dGVybmFsXHJcbiAqIGRhdGEgY2FsbCB1c2luZyBqcGEtc2VydmljZXMuXHJcbiAqL1xyXG5AQ29tcG9uZW50VHlwZShcIlNlYXJjaExpc3RDb21wb25lbnRcIilcclxuQENvbXBvbmVudChcclxuICB7XHJcbiAgICBzZWxlY3RvcjogXCJoY2ktc2VhcmNoLWxpc3RcIixcclxuICAgIHN0eWxlczogW1xyXG4gICAgICBgXHJcbiAgICAgICAgLnJlc3VsdHMtY291bnQge1xyXG4gICAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tZ3JleXdhcm0tbWVkZGFyayk7XHJcbiAgICAgICAgICBjb2xvcjogd2hpdGU7XHJcbiAgICAgICAgICBmb250LXNpemU6IDE3LjNweDtcclxuICAgICAgICAgIHBhZGRpbmctbGVmdDogMThweDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC5mb3JtYXQtYm90dG9tLXBhZGRpbmcge1xyXG4gICAgICAgICAgcGFkZGluZy1ib3R0b206IDI1cHg7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICA6aG9zdDo6bmctZGVlcCBkaXZbaWRePSdyb3ctJ106bnRoLWNoaWxkKGV2ZW4pIHtcclxuICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLXdoaXRlLW1lZGl1bSkgIWltcG9ydGFudDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIDpob3N0OjpuZy1kZWVwIGRpdltpZF49J3Jvdy0nXSB7XHJcbiAgICAgICAgICBib3JkZXI6IDAgIWltcG9ydGFudDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIDpob3N0OjpuZy1kZWVwIGRpdi5yb3ctcGFyZW50LmFjdGl2ZSB7XHJcbiAgICAgICAgICBjb2xvcjogd2hpdGUgIWltcG9ydGFudDtcclxuICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWJsdWV3YXJtdml2aWQtbGlnaHRlc3QpICFpbXBvcnRhbnQ7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICA6aG9zdDo6bmctZGVlcCAucmktc2lkZWJhci1jZWxsIHtcclxuICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50ICFpbXBvcnRhbnQ7XHJcbiAgICAgICAgfVxyXG4gICAgICBgXHJcbiAgICBdLFxyXG4gICAgdGVtcGxhdGU6XHJcbiAgICAgIGBcclxuICAgICAgICA8ZGl2XHJcbiAgICAgICAgICBjbGFzcz1cInJlc3VsdHMtY291bnRcIiBbbmdDbGFzc109XCJ7ICdmb3JtYXQtYm90dG9tLXBhZGRpbmcnOiB0aGlzLnNlYXJjaFJlc3VsdE1lc3NhZ2UgPT09ICcnIH1cIj5cclxuICAgICAgICAgIHt7IHRoaXMuc2VhcmNoUmVzdWx0TWVzc2FnZSB9fVxyXG4gICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IHNjcm9sbGFibGVcIj5cclxuICAgICAgICAgIDxkaXYgaWQ9XCJuby1yZXN1bHRzLWZvdW5kXCI+PC9kaXY+XHJcbiAgICAgICAgICA8ZGl2IGlkPVwic2VhcmNoLXRpdGxlXCIgY2xhc3M9XCJkLWZsZXggZmxleC1jb2x1bW5cIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBwbC0zXCI+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8ZGl2IGlkPVwicmVzdWx0LWxpc3RcIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBmbGV4LWNvbHVtblwiIFtjbGFzcy55LWhpZGRlbl09XCJzZWxlY3RlZFJvd0dyb3VwXCI+XHJcbiAgICAgICAgICAgICAgPGhjaS1idXN5IFtidXN5U3ViamVjdHNdPVwibG9hZGluZ1N1YmplY3RzXCIgcGFyZW50U2VsZWN0b3I9XCIuc2Nyb2xsYWJsZVwiIFtpY29uXT1cImJ1c3lJY29uXCI+PC9oY2ktYnVzeT5cclxuICAgICAgICAgICAgICA8IS0tIE5vIGdyb3VwaW5nIC0tPlxyXG4gICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhZ3JvdXBpbmcuZmllbGRzIHx8IGdyb3VwaW5nLmZpZWxkcy5sZW5ndGggPT09IDBcIj5cclxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IHJvd0dyb3VwIG9mIHZpZXdEYXRhXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJyb3V0ZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgI3Jvd1BhcmVudFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgW2lkXT1cImdldFJvd0lkKHJvd0dyb3VwLnJnUm93c1swXSlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJyb3ctcGFyZW50IG5hdi1pdGVtXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgIFtyb3V0ZXJMaW5rXT1cInJvdXRlKHJvd0dyb3VwLCByb3dHcm91cC5yZ1Jvd3NbMF0pXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgIHJvdXRlckxpbmtBY3RpdmU9XCJhY3RpdmVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgW3JvdXRlckxpbmtBY3RpdmVPcHRpb25zXT1cIntjaGFuZ2VEZXRlY3Rpb246IHJvd1JlZnJlc2h9XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJvblJvd0NsaWNrKCRldmVudCwgY21wdCwgcm93R3JvdXAsIHJvd0dyb3VwLnJnUm93c1swXSlcIj5cclxuICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJpdGVtVGVtcGxhdGU7IGNvbnRleHQ6IHtyb3c6IHJvd0dyb3VwLnJnUm93c1swXX1cIj48L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhcm91dGVcIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2ICNyb3dQYXJlbnRcclxuICAgICAgICAgICAgICAgICAgICAgICAgIFtpZF09XCJnZXRSb3dJZChyb3dHcm91cC5yZ1Jvd3NbMF0pXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwicm93LXBhcmVudCBuYXYtaXRlbVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwib25Sb3dDbGljaygkZXZlbnQsIGNtcHQsIHJvd0dyb3VwLCByb3dHcm91cC5yZ1Jvd3NbMF0pXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiaXRlbVRlbXBsYXRlOyBjb250ZXh0OiB7cm93OiByb3dHcm91cC5yZ1Jvd3NbMF19XCI+PC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcblxyXG4gICAgICAgICAgICAgIDwhLS0gR3JvdXBpbmcgd2l0aCBpbmxpbmUgZXhwYW5zaW9uIC0tPlxyXG4gICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJncm91cGluZy5maWVsZHMgJiYgZ3JvdXBpbmcuZmllbGRzLmxlbmd0aCA+IDAgJiYgIXNlbGVjdGVkUm93R3JvdXBcIj5cclxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IHJvd0dyb3VwIG9mIHZpZXdEYXRhOyBsZXQgaSA9IGluZGV4O1wiPlxyXG4gICAgICAgICAgICAgICAgICA8ZGl2IFtpZF09XCJnZXRSb3dHcm91cElkKHJvd0dyb3VwKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJncm91cC1wYXJlbnQgbmF2LWl0ZW0gZ3JvdXAge3tncm91cENsYXNzfX1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJvbkdyb3VwQ2xpY2soJGV2ZW50LCBjbXB0LCByb3dHcm91cClcIj5cclxuICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyXHJcbiAgICAgICAgICAgICAgICAgICAgICAqbmdUZW1wbGF0ZU91dGxldD1cImdyb3VwVGVtcGxhdGU7IGNvbnRleHQ6IHtyb3dHcm91cDogcm93R3JvdXAsIGNtcHQ6IGNtcHR9XCI+PC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwicm93R3JvdXAucmdFeHBhbmRlZFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJuYXYtY29udGFpbmVyXCIgKGNsaWNrKT1cIm9uR3JvdXBDbGljaygkZXZlbnQsIGNtcHQsIHJvd0dyb3VwKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgcm93IG9mIHJvd0dyb3VwLnJnUm93c1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwicm91dGVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICNyb3dQYXJlbnRcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtpZF09XCJnZXRSb3dJZChyb3cpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwicm93LXBhcmVudCBuYXYtaXRlbVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcm91dGVyTGlua109XCJyb3V0ZShyb3dHcm91cCwgcm93KVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByb3V0ZXJMaW5rQWN0aXZlPVwiYWN0aXZlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtyb3V0ZXJMaW5rQWN0aXZlT3B0aW9uc109XCJ7Y2hhbmdlRGV0ZWN0aW9uOiByb3dSZWZyZXNofVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwib25Sb3dDbGljaygkZXZlbnQsIGNtcHQsIHJvd0dyb3VwLCByb3cpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiaXRlbVRlbXBsYXRlOyBjb250ZXh0OiB7cm93OiByb3d9XCI+PC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIXJvdXRlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAjcm93UGFyZW50XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbaWRdPVwiZ2V0Um93SWQocm93KVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInJvdy1wYXJlbnQgbmF2LWl0ZW1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIm9uUm93Q2xpY2soJGV2ZW50LCBjbXB0LCByb3dHcm91cCwgcm93KVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cIml0ZW1UZW1wbGF0ZTsgY29udGV4dDoge3Jvdzogcm93fVwiPjwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG5cclxuICAgICAgICAgICAgICA8IS0tIEdyb3VwaW5nIHdpdGggc2VwYXJhdGUgaW5kaXZpZHVhbCBleHBhbnNpb24gLS0+XHJcbiAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cImdyb3VwaW5nLmZpZWxkcyAmJiBncm91cGluZy5maWVsZHMubGVuZ3RoID4gMCAmJiBzZWxlY3RlZFJvd0dyb3VwXCJcclxuICAgICAgICAgICAgICAgICAgICNncm91cFNlbGVjdGVkUGFyZW50XHJcbiAgICAgICAgICAgICAgICAgICBjbGFzcz1cImdyb3VwLXNlbGVjdGVkLXBhcmVudCBmbGV4LWNvbHVtbiB7e2dyb3VwQ2xhc3N9fVwiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBbaWRdPVwiZ2V0Um93R3JvdXBJZChzZWxlY3RlZFJvd0dyb3VwKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZ3JvdXAtcGFyZW50IG5hdi1pdGVtIGdyb3VwIGFjdGl2ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJvbkdyb3VwQ2xpY2soJGV2ZW50LCBjbXB0LCBzZWxlY3RlZFJvd0dyb3VwKVwiPlxyXG4gICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyXHJcbiAgICAgICAgICAgICAgICAgICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJncm91cFNlbGVjdGVkVGVtcGxhdGU7IGNvbnRleHQ6IHtyb3dHcm91cDogc2VsZWN0ZWRSb3dHcm91cCwgY21wdDogY21wdH1cIj48L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICAgIDxkaXYgI3NlbGVjdGVkUm93R3JvdXBDb250YWluZXIgaWQ9XCJzZWxlY3RlZC1ncm91cC1jb250YWluZXJcIiBjbGFzcz1cImQtZmxleCBmbGV4LWNvbHVtbiB5LWF1dG9cIj5cclxuICAgICAgICAgICAgICAgICAgPGRpdiBpZD1cImlubmVyUm93R3JvdXBDb250YWluZXJcIiBjbGFzcz1cImQtZmxleCBmbGV4LWNvbHVtblwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IHJvdyBvZiBzZWxlY3RlZFJvd0dyb3VwLnJnUm93c1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInJvdXRlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgI3Jvd1BhcmVudFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtpZF09XCJnZXRSb3dJZChyb3cpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInJvdy1wYXJlbnQgbmF2LWl0ZW1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtyb3V0ZXJMaW5rXT1cInJvdXRlKHJvd0dyb3VwLCByb3cpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICByb3V0ZXJMaW5rQWN0aXZlPVwiYWN0aXZlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwib25Sb3dDbGljaygkZXZlbnQsIGNtcHQsIHJvd0dyb3VwLCByb3cpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cIml0ZW1UZW1wbGF0ZTsgY29udGV4dDoge3Jvdzogcm93fVwiPjwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFyb3V0ZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICNyb3dQYXJlbnRcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbaWRdPVwiZ2V0Um93SWQocm93KVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJyb3ctcGFyZW50IG5hdi1pdGVtXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwib25Sb3dDbGljaygkZXZlbnQsIGNtcHQsIHJvd0dyb3VwLCByb3cpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cIml0ZW1UZW1wbGF0ZTsgY29udGV4dDoge3Jvdzogcm93fVwiPjwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwhLS0gUGFnaW5nIGZvb3RlciAtLT5cclxuICAgICAgICA8ZGl2ICpuZ0lmPVwicGFnaW5nLnBhZ2VTaXplID4gMFwiIGNsYXNzPVwiZC1mbGV4IGZsZXgtc2hyaW5rLTAgcGFnaW5nLWZvb3RlciBqdXN0aWZ5LWNvbnRlbnQtYmV0d2VlbiBwbC0zIHByLTNcIlxyXG4gICAgICAgICAgICAgc3R5bGU9XCJtaW4taGVpZ2h0OiAxcmVtOyBhbGlnbi1pdGVtczogY2VudGVyO1wiPlxyXG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFzZWxlY3RlZFJvd0dyb3VwXCI+XHJcbiAgICAgICAgICAgIDxkaXYgKGNsaWNrKT1cImRvUGFnZUZpcnN0KClcIiBjbGFzcz1cImQtZmxleCBtdC0xIG1iLTFcIiBbY2xhc3MuZGlzYWJsZWRdPVwicGFnaW5nLnBhZ2UgPT09IDBcIj48aVxyXG4gICAgICAgICAgICAgIGNsYXNzPVwiZmFzIGZhLWZhc3QtYmFja3dhcmQgZmEteHNcIj48L2k+PC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgKGNsaWNrKT1cImRvUGFnZVByZXZpb3VzKClcIiBjbGFzcz1cImQtZmxleCBtdC0xIG1iLTFcIiBbY2xhc3MuZGlzYWJsZWRdPVwicGFnaW5nLnBhZ2UgPT09IDBcIj48aVxyXG4gICAgICAgICAgICAgIGNsYXNzPVwiZmFzIGZhLWJhY2t3YXJkIGZhLXhzXCI+PC9pPjwvZGl2PlxyXG4gICAgICAgICAgICA8ZGl2IHN0eWxlPVwiZm9udC1zaXplOiAwLjhyZW07XCI+e3twYWdpbmcucGFnZSArIDF9fSBvZiB7e3BhZ2luZy5udW1QYWdlc319PC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgKGNsaWNrKT1cImRvUGFnZU5leHQoKVwiIGNsYXNzPVwiZC1mbGV4IG10LTEgbWItMVwiIFtjbGFzcy5kaXNhYmxlZF09XCJwYWdpbmcucGFnZSA9PT0gcGFnaW5nLm51bVBhZ2VzIC0gMVwiPlxyXG4gICAgICAgICAgICAgIDxpXHJcbiAgICAgICAgICAgICAgICBjbGFzcz1cImZhcyBmYS1mb3J3YXJkIGZhLXhzXCI+PC9pPjwvZGl2PlxyXG4gICAgICAgICAgICA8ZGl2IChjbGljayk9XCJkb1BhZ2VMYXN0KClcIiBjbGFzcz1cImQtZmxleCBtdC0xIG1iLTFcIiBbY2xhc3MuZGlzYWJsZWRdPVwicGFnaW5nLnBhZ2UgPT09IHBhZ2luZy5udW1QYWdlcyAtIDFcIj5cclxuICAgICAgICAgICAgICA8aVxyXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJmYXMgZmEtZmFzdC1mb3J3YXJkIGZhLXhzXCI+PC9pPjwvZGl2PlxyXG4gICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgIDwhLS0gRGVmYXVsdCB0ZW1wbGF0ZSBmb3IgYSBncm91cCAtLT5cclxuICAgICAgICA8bmctdGVtcGxhdGUgI2RlZmF1bHRHcm91cFRlbXBsYXRlIGxldC1yb3dHcm91cD1cInJvd0dyb3VwXCI+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGZsZXgtZ3Jvdy0xIHBsLTJcIiBzdHlsZT1cImFsaWduLWl0ZW1zOiBjZW50ZXI7XCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb250LXdlaWdodC1ib2xkIG1yLWF1dG9cIj57e2dldEdyb3VwRGlzcGxheShyb3dHcm91cCl9fTwvZGl2PlxyXG4gICAgICAgICAgICA8bmctY29udGFpbmVyIGNsYXNzPVwiZC1mbGV4IG1yLTFcIiBzdHlsZT1cImFsaWduLWl0ZW1zOiBjZW50ZXI7XCI+XHJcbiAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cInJvd0dyb3VwLnJnRXhwYW5kZWQgPT09IHRydWU7IGVsc2UgcGx1c1RlbXBsYXRlXCI+XHJcbiAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImZhcyBmYS1taW51cyBmYS1zbSBtci0xXCI+PC9pPlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjcGx1c1RlbXBsYXRlPlxyXG4gICAgICAgICAgICAgICAgPGRpdj5cclxuICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmYXMgZmEtcGx1cyBmYS1zbSBtci0xXCI+PC9pPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgICAgICAgICAoe3tyb3dHcm91cC5yZ0NvdW50fX0pXHJcbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuXHJcbiAgICAgICAgPCEtLSBEZWZhdWx0IHRlbXBsYXRlIGZvciBhbiBpbmRpdmlkdWFsIHNlbGVjdGVkIGdyb3VwIC0tPlxyXG4gICAgICAgIDxuZy10ZW1wbGF0ZSAjZGVmYXVsdEdyb3VwU2VsZWN0ZWRUZW1wbGF0ZSBsZXQtcm93R3JvdXA9XCJyb3dHcm91cFwiPlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBmbGV4LWdyb3ctMSBwbC0yXCIgc3R5bGU9XCJhbGlnbi1pdGVtczogY2VudGVyO1wiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwibXItM1wiPlxyXG4gICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmFzIGZhLWxldmVsLXVwLWFsdFwiIGRhdGEtZmEtdHJhbnNmb3JtPVwiZmxpcC1oXCI+PC9pPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvbnQtd2VpZ2h0LWJvbGQgbXItYXV0b1wiPnt7Z2V0R3JvdXBEaXNwbGF5KHJvd0dyb3VwKX19PC9kaXY+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICBgXHJcbiAgfVxyXG4pXHJcbmV4cG9ydCBjbGFzcyBTZWFyY2hMaXN0Q29tcG9uZW50IGV4dGVuZHMgTmF2Q29tcG9uZW50IHtcclxuXHJcbiAgc2VhcmNoUmVzdWx0TWVzc2FnZSA9IFwiXCI7XHJcblxyXG4gIC8vIFRoZSBkYXRhIHRoYXQgaXMgYWN0dWFsbHkgcmVuZGVyZWQuXHJcbiAgdmlld0RhdGE6IFJvd0dyb3VwW107XHJcblxyXG4gIC8vIEEgcmVmZXJlbmNlIHRvIHRoZSBzZWFyY2ggbGlzdCBjb250cm9sbGVyIGlmIGFwcGxpY2FibGUuXHJcbiAgQElucHV0KCkgY29udHJvbGxlcjogU2VhcmNoTGlzdENvbnRyb2xsZXJDb21wb25lbnQ7XHJcblxyXG4gIC8vIEFuIGFycmF5IG9mIGRhdGEuXHJcbiAgQElucHV0KFwiZGF0YVwiKSBib3VuZERhdGE6IE9iamVjdFtdO1xyXG5cclxuICAvLyBBIHN1YmplY3QgdGhhdCByZXByZXNlbnRzIGFuIGFycmF5IG9mIGRhdGEuXHJcbiAgQElucHV0KFwiZGF0YVN1YmplY3RcIikgZGF0YVN1YmplY3Q6IEJlaGF2aW9yU3ViamVjdDxPYmplY3RbXT47XHJcblxyXG4gIC8vIEEgZnVuY3Rpb24gd2hpY2ggdGFrZXMgaW4gYSBIY2lHcmlkRHRvIGFuZCByZXR1cm5zIGEgSGNpRGF0YUR0byB3aGljaCB3cmFwcyBhbiBhcnJheSBvZiBkYXRhLlxyXG4gIEBJbnB1dChcImRhdGFDYWxsXCIpIGV4dGVybmFsRGF0YUNhbGw6IChkdG86IEhjaUdyaWREdG8pID0+IE9ic2VydmFibGU8SGNpRGF0YUR0bz47XHJcblxyXG4gIC8vIEFuIGFycmF5IG9mIHN1YmplY3RzIHdpdGggYm9vbGVhbnMgdG8gY29udHJvbCB0aGUgaGNpLWJ1c3kgb3ZlcmxheWluZyB0aGUgc2VhcmNoLWxpc3QuXHJcbiAgQElucHV0KCkgbG9hZGluZ1N1YmplY3RzOiBTdWJqZWN0PGJvb2xlYW4+W107XHJcblxyXG4gIC8vIEFuIGFycmF5IG9mIGJvb2xlYW5zIHRvIGNvbnRyb2wgdGhlIGhjaS1idXN5IG92ZXJsYXlpbmcgdGhlIHNlYXJjaC1saXN0LlxyXG4gIEBJbnB1dCgpIGxvYWRpbmc6IGJvb2xlYW5bXSA9IFtmYWxzZV07XHJcblxyXG4gIC8vIElmIGNsaWNraW5nIGEgcm93IGNoYW5nZXMgYSByb3V0ZSwgdGhpcyBmdW5jdGlvbiBzcGVjaWZpZXMgdGhlIHJvdXRlIHRvIHVzZS5cclxuICBASW5wdXQoKSByb3V0ZTogKHJvd0dyb3VwOiBhbnksIHJvdzogYW55KSA9PiBhbnlbXTtcclxuXHJcbiAgLy8gRXhwYW5kIHRoZSBzZWxlY3RlZCByb3cgZ3JvdXAgYXMgaXRzIG93biBzY3JlZW4sIG9yIHNob3cgcm93cyB1bmRlciBzZWxlY3RlZCByb3cgZ3JvdXBzIGluIHRoZSBzYW1lIHZpZXcuXHJcbiAgQElucHV0KCkgaW5saW5lRXhwYW5kOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gIC8vIFdpdGhvdXQgYW55IG90aGVyIG1ldGFkYXRhIGZvciB3aGF0IGEgcm93IGlzLCBwcm92aWRlIHRoZSBmaWVsZCB0byBiZSB1c2VkIGZvciB0aGUgaWQuXHJcbiAgLy8gVGhpcyBpcyBhY3R1YWxseSB0aGUgZmllbGQgdGhhdCBoYXMgdGhlIChkZWZpbmVkKSByb3dJZCAtLSB3aGF0ZXZlciBpdCBpcyB1bmRlciBkaWZmZXJlbnRcclxuICAvLyBzdHJ1Y3R1cmVzOiBpZFBhdGllbnQsIGlkTWVkaWNhbEV2ZW50IGV0Y1xyXG4gIEBJbnB1dCgpIHJvd0lkOiBhbnk7XHJcblxyXG4gIC8vIENzcyBjbGFzcyBhcHBsaWVkIHRvIHRoZSByb3cgZ3JvdXAgcGFyZW50LlxyXG4gIEBJbnB1dCgpIGdyb3VwQ2xhc3M6IHN0cmluZyA9IFwiXCI7XHJcblxyXG4gIC8vIENzcyBjbGFzcyBhcHBsaWVkIHRvIHRoZSByb3cgcGFyZW50LlxyXG4gIEBJbnB1dCgpIHJvd0NsYXNzOiBzdHJpbmcgPSBcIlwiO1xyXG5cclxuICAvLyBBIHRlbXBsYXRlIGZvciBob3cgdG8gZGlzcGxheSByb3cgZ3JvdXAgaW5mbyBpZiB1c2luZyB0aGUgZGVmYXVsdCB0ZW1wbGF0ZS4gIGUuZy4gXCJsYXN0TmFtZSwgZmlyc3ROYW1lXCIgZmllbGQgbmFtZXMgZ2V0IHJlcGxhY2VkIHdpdGggdmFsdWVzLlxyXG4gIEBJbnB1dCgpIGdyb3VwRGlzcGxheTogc3RyaW5nO1xyXG5cclxuICAvLyBUT0RPOiBSZWltcGxlbWVudFxyXG4gIEBJbnB1dCgpIGNsb3NlT3RoZXJzOiBib29sZWFuID0gdHJ1ZTtcclxuXHJcbiAgLy8gVGhlIGxpc3Qgb2YgZmllbGRzIHRvIGdyb3VwIGJ5LlxyXG4gIEBJbnB1dCgpIGdyb3VwaW5nRmllbGRzOiBzdHJpbmdbXSA9IFtdO1xyXG5cclxuICAvLyBUT0RPOiBSZWltcGxlbWVudCBpZiB3ZSB3YW50IHVzZXJzIHRvIGJlIGFibGUgdG8gY29udHJvbCBncm91cGluZy5cclxuICBASW5wdXQoKSBncm91cEJ5QWxsb3dlZEZpZWxkczogc3RyaW5nW10gPSBbXTtcclxuXHJcbiAgLy8gVGhlIHBhZ2Ugc2l6ZSBvZiByb3cgZ3JvdXBzIG9yIHJvd3MgaWYgbm8gZ3JvdXBpbmcuXHJcbiAgQElucHV0KCkgcGFnZVNpemU6IG51bWJlcjtcclxuXHJcbiAgLy8gVGhlIHBhZ2Ugc2l6ZSBvZiByb3dzIGluIGEgc2VsZWN0ZWQgZ3JvdXAuXHJcbiAgQElucHV0KCkgZ3JvdXBQYWdlU2l6ZTogbnVtYmVyID0gNTA7XHJcblxyXG4gIC8vIFRoZSBudW1iZXIgb2YgcGFnZXMgb2Ygcm93cyB0byBjYWNoZSBpbnRlcm5hbGx5IGJlZm9yZSBhbiBleHRlcm5hbCBjYWxsIGlzIG1hZGUuXHJcbiAgQElucHV0KCkgZ3JvdXBDYWNoZU51bVBhZ2VzOiBudW1iZXI7XHJcblxyXG4gIC8vIEEgcmVmZXJlbmNlIHRvIGEgcGFyZW50IGRyb3Bkb3duIGlmIGFwcGxpY2FibGUuXHJcbiAgQElucHV0KCkgZHJvcGRvd246IE5nYkRyb3Bkb3duO1xyXG5cclxuICAvL1doaWNoIGljb24gdG8gdXNlIGZvciB0aGUgYnVzeSBzcGlubmVyXHJcbiAgQElucHV0KCkgYnVzeUljb246IHN0cmluZyA9IFwiaGNpIGZhLWNvcmUgZmEtc3BpblwiO1xyXG5cclxuICBASW5wdXQoKSBzaG93UmVzdWx0c0NvdW50OiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gIC8vIElmIG5vIG9uR3JvdXBDbGljayBmdW5jdGlvbiBpcyBwcm92aWRlZCwgdGhpcyBpcyB1c2VkLiAgVGhlIG92ZXJyaWRpbmcgZnVuY3Rpb24gc2hvdWxkIHN0aWxsIGNhbGwgdGhpcy5cclxuICBkZWZhdWx0R3JvdXBDbGljazogKGV2ZW50OiBNb3VzZUV2ZW50LCBjbXB0OiBTZWFyY2hMaXN0Q29tcG9uZW50LCByb3dHcm91cDogUm93R3JvdXApID0+IHZvaWQgPSAoZXZlbnQ6IE1vdXNlRXZlbnQsIGNtcHQ6IFNlYXJjaExpc3RDb21wb25lbnQsIHJvd0dyb3VwOiBSb3dHcm91cCkgPT4ge1xyXG4gICAgY21wdC5zZXRHcm91cEV4cGFuZGVkKGV2ZW50LCByb3dHcm91cCk7XHJcblxyXG4gICAgdGhpcy5ncm91cENsaWNrLmVtaXQoe1xyXG4gICAgICBldmVudDogZXZlbnQsXHJcbiAgICAgIHJvd0dyb3VwOiByb3dHcm91cFxyXG4gICAgfSk7XHJcbiAgfTtcclxuXHJcbiAgQElucHV0KCkgb25Hcm91cENsaWNrOiAoZXZlbnQ6IE1vdXNlRXZlbnQsIGNtcHQ6IFNlYXJjaExpc3RDb21wb25lbnQsIHJvd0dyb3VwOiBSb3dHcm91cCkgPT4gdm9pZDtcclxuXHJcbiAgLy8gSWYgbm8gb25Sb3dDbGljayBmdW5jdGlvbiBpcyBwcm92aWRlZCwgdGhpcyBpcyB1c2VkLiAgVGhlIG92ZXJyaWRpbmcgZnVuY3Rpb24gc2hvdWxkIHN0aWxsIGNhbGwgdGhpcy5cclxuICBkZWZhdWx0Um93Q2xpY2s6IChldmVudDogTW91c2VFdmVudCwgY21wdDogU2VhcmNoTGlzdENvbXBvbmVudCwgcm93R3JvdXA6IFJvd0dyb3VwLCByb3c6IGFueSkgPT4gdm9pZCA9IChldmVudDogTW91c2VFdmVudCwgY21wdDogU2VhcmNoTGlzdENvbXBvbmVudCwgcm93R3JvdXA6IFJvd0dyb3VwLCByb3c6IGFueSkgPT4ge1xyXG4gICAgaWYgKHRoaXMuZHJvcGRvd24pIHtcclxuICAgICAgdGhpcy5kcm9wZG93bi5jbG9zZSgpO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuc2VsZWN0ZWRSb3cgPSByb3c7XHJcblxyXG4gICAgdGhpcy5yb3dDbGljay5lbWl0KHtcclxuICAgICAgZXZlbnQ6IGV2ZW50LFxyXG4gICAgICByb3c6IHJvdyxcclxuICAgICAgcm93R3JvdXA6IHJvd0dyb3VwXHJcbiAgICB9KTtcclxuXHJcbiAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcclxuICB9O1xyXG4gIEBJbnB1dCgpIG9uUm93Q2xpY2s6IChldmVudDogTW91c2VFdmVudCwgY21wdDogU2VhcmNoTGlzdENvbXBvbmVudCwgcm93R3JvdXA6IFJvd0dyb3VwLCByb3c6IGFueSkgPT4gdm9pZDtcclxuXHJcbiAgQElucHV0KCkgZ3JvdXBUZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PjtcclxuICBASW5wdXQoKSBncm91cFNlbGVjdGVkVGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT47XHJcbiAgQElucHV0KCkgaXRlbVRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+O1xyXG5cclxuICBASW5wdXQoKSBvbkdyb3VwQ2xvc2U6IEZ1bmN0aW9uO1xyXG5cclxuICBAT3V0cHV0KCkgZ3JvdXBDbGljazogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcclxuICBAT3V0cHV0KCkgcm93Q2xpY2s6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XHJcbiAgQE91dHB1dCgpIGRhdGFDaGFuZ2U6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XHJcblxyXG4gIEBWaWV3Q2hpbGQoXCJkZWZhdWx0R3JvdXBUZW1wbGF0ZVwiLCB7cmVhZDogVGVtcGxhdGVSZWYsIHN0YXRpYzogdHJ1ZX0pIGRlZmF1bHRHcm91cFRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+O1xyXG4gIEBWaWV3Q2hpbGQoXCJkZWZhdWx0R3JvdXBTZWxlY3RlZFRlbXBsYXRlXCIsIHtcclxuICAgIHJlYWQ6IFRlbXBsYXRlUmVmLFxyXG4gICAgc3RhdGljOiB0cnVlXHJcbiAgfSkgZGVmYXVsdEdyb3VwU2VsZWN0ZWRUZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PjtcclxuXHJcbiAgc2VsZWN0ZWRSb3c6IGFueTtcclxuICBzZWxlY3RlZFJvd0dyb3VwOiBSb3dHcm91cDtcclxuICBzZWxlY3RlZFJvd0dyb3VwQ29udGFpbmVyOiBIVE1MRWxlbWVudDtcclxuICBpbm5lclJvd0dyb3VwQ29udGFpbmVyOiBIVE1MRWxlbWVudDtcclxuXHJcbiAgLy8gR3JpZCBEVE8gaW5mbyBuZWVkZWQgdG8gYnVpbGQgZXh0ZXJuYWwgZGF0YSByZXF1ZXN0cy5cclxuICBzb3J0czogSGNpU29ydER0b1tdID0gW107XHJcbiAgZmlsdGVyczogSGNpRmlsdGVyRHRvW10gPSBbXTtcclxuICBwYWdpbmc6IEhjaVBhZ2luZ0R0byA9IG5ldyBIY2lQYWdpbmdEdG8oMCwgLTEpO1xyXG4gIGdyb3VwaW5nOiBIY2lHcm91cGluZ0R0byA9IG5ldyBIY2lHcm91cGluZ0R0byhbXSk7XHJcblxyXG4gIC8vZ2xvYmFsUm93R3JvdXBNYXA6IE1hcDxzdHJpbmcsIG51bWJlcj4gPSBuZXcgTWFwPHN0cmluZywgbnVtYmVyPigpO1xyXG4gIGdyb3VwZWREYXRhU2V0ID0gW107XHJcblxyXG4gIHBhZ2luZ1N1YmplY3Q6IFN1YmplY3Q8SGNpUGFnaW5nRHRvPiA9IG5ldyBCZWhhdmlvclN1YmplY3Q8SGNpUGFnaW5nRHRvPih0aGlzLnBhZ2luZyk7XHJcblxyXG4gIC8vIEEgZHVtbXkgbnVtYmVyIHRoYXQgaW5jcmVtZW50cyBiYXNlZCBvbiBzZWxlY3Rpb24gY2hhbmdlcy4gIEZvcmNlcyByb3V0ZXJMaW5rQWN0aXZlIHRvIHJlY2hlY2suXHJcbiAgcm93UmVmcmVzaDogbnVtYmVyID0gMDtcclxuXHJcbiAgYnVzeTogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICBsYXN0U2Nyb2xsVG9wOiBudW1iZXIgPSAtMTtcclxuICBsYXN0U2Nyb2xsUG9zaXRpb246IG51bWJlciA9IDE7XHJcbiAgc2V0U2Nyb2xsVG9wOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gIGNtcHQ6IFNlYXJjaExpc3RDb21wb25lbnQgPSB0aGlzO1xyXG5cclxuICBsYXN0RXZlbnQ6IGFueTtcclxuXHJcbiAgY29uc3RydWN0b3IoZWxlbWVudFJlZjogRWxlbWVudFJlZixcclxuICAgICAgICAgICAgICByZW5kZXJlcjogUmVuZGVyZXIyLFxyXG4gICAgICAgICAgICAgIHJlc29sdmVyOiBDb21wb25lbnRGYWN0b3J5UmVzb2x2ZXIsXHJcbiAgICAgICAgICAgICAgbmF2aWdhdGlvbkdsb2JhbFNlcnZpY2U6IE5hdmlnYXRpb25HbG9iYWxTZXJ2aWNlLFxyXG4gICAgICAgICAgICAgIEBPcHRpb25hbCgpIG5hdmlnYXRpb25TZXJ2aWNlOiBOYXZpZ2F0aW9uU2VydmljZSxcclxuICAgICAgICAgICAgICBjaGFuZ2VEZXRlY3RvclJlZjogQ2hhbmdlRGV0ZWN0b3JSZWYpIHtcclxuICAgIHN1cGVyKGVsZW1lbnRSZWYsIHJlbmRlcmVyLCByZXNvbHZlciwgbmF2aWdhdGlvblNlcnZpY2UsIGNoYW5nZURldGVjdG9yUmVmKTtcclxuXHJcbiAgICBpZiAoIW5hdmlnYXRpb25TZXJ2aWNlKSB7XHJcbiAgICAgIHRoaXMubmF2aWdhdGlvblNlcnZpY2UgPSBuZXcgTmF2aWdhdGlvblNlcnZpY2UobmF2aWdhdGlvbkdsb2JhbFNlcnZpY2UpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLm5hdmlnYXRpb25TZXJ2aWNlLmdldElkKCkgPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICB0aGlzLmlzUm9vdCA9IHRydWU7XHJcbiAgICAgIHRoaXMuc2V0Q29uZmlnKHt9KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFJldHVybiB0aGUgaWQgZm9yIHRoZSByb3cgZ3JvdXAgYmFzZWQgdXBvbiB0aGUgZ3JvdXAga2V5IG9yIGlmIHVuZGVmaW5lZCwgdGhlIGZpcnN0IHJvdydzIGlkLiAgZS5nLiBcInJvdy1ncm91cC1ib2Itc21pdGhcIlxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtSb3dHcm91cH0gcm93R3JvdXBcclxuICAgKiBAcmV0dXJucyB7c3RyaW5nfVxyXG4gICAqL1xyXG4gIGdldFJvd0dyb3VwSWQocm93R3JvdXA6IFJvd0dyb3VwKTogc3RyaW5nIHtcclxuICAgIGlmIChyb3dHcm91cC5yZ0tleSkge1xyXG4gICAgICByZXR1cm4gXCJyb3ctZ3JvdXAtXCIgKyByb3dHcm91cC5yZ0tleTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGxldCByb3dJZDogc3RyaW5nID0gdGhpcy5nZXRSb3dJZChyb3dHcm91cC5yZ1Jvd3NbMF0pO1xyXG4gICAgICByZXR1cm4gcm93SWQucmVwbGFjZShcInJvdy1cIiwgXCJyb3ctZ3JvdXAtXCIpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUmV0dXJuIHRoZSByb3cgaWQuICBlLmcuIFwicm93LTFcIi5cclxuICAgKlxyXG4gICAqIEBwYXJhbSByb3dcclxuICAgKiBAcmV0dXJucyB7c3RyaW5nfVxyXG4gICAqL1xyXG4gIGdldFJvd0lkKHJvdzogYW55KTogc3RyaW5nIHtcclxuICAgIGlmICh0aGlzLnJvd0lkKSB7XHJcbiAgICAgIHJldHVybiBcInJvdy1cIiArIDxzdHJpbmc+PGFueT5yb3dbdGhpcy5yb3dJZF07XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICByZXR1cm4gXCJyb3ctdW5kZWZpbmVkXCI7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBPbiBpbml0LCBsaXN0ZW4gZm9yIGxvYWRpbmcgc3ViamVjdHMgYW5kIGxpc3RlbiBmb3IgcGFnZSBjaGFuZ2VzLlxyXG4gICAqL1xyXG4gIG5nT25Jbml0KCk6IHZvaWQge1xyXG4gICAgc3VwZXIubmdPbkluaXQoKTtcclxuXHJcbiAgICBpZiAodGhpcy5sb2FkaW5nU3ViamVjdHMpIHtcclxuICAgICAgdGhpcy5sb2FkaW5nU3ViamVjdHNbMF0uc3Vic2NyaWJlKChidXN5OiBib29sZWFuKSA9PiB7XHJcbiAgICAgICAgdGhpcy5idXN5ID0gYnVzeTtcclxuICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5wYWdpbmdTdWJqZWN0LnN1YnNjcmliZSgocGFnaW5nOiBIY2lQYWdpbmdEdG8pID0+IHtcclxuICAgICAgdGhpcy5wYWdpbmcgPSBwYWdpbmc7XHJcbiAgICAgIHRoaXMuc2V0RGF0YSgpO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBDYWxsZWQgd2hlbiBpbnB1dHMgY2hhbmdlLlxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtTaW1wbGVDaGFuZ2VzfSBjaGFuZ2VzXHJcbiAgICovXHJcbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xyXG4gICAgc3VwZXIubmdPbkNoYW5nZXMoY2hhbmdlcyk7XHJcbiAgICBpZiAoY2hhbmdlc1tcImdyb3VwaW5nRmllbGRzXCJdKSB7XHJcbiAgICAgIGxldCBjaGFuZ2U6IFNpbXBsZUNoYW5nZSA9IDxTaW1wbGVDaGFuZ2U+Y2hhbmdlc1tcImdyb3VwaW5nRmllbGRzXCJdO1xyXG4gICAgICBpZiAoY2hhbmdlLmN1cnJlbnRWYWx1ZSkge1xyXG4gICAgICAgIHRoaXMuZ3JvdXBpbmcuc2V0RmllbGRzKGNoYW5nZS5jdXJyZW50VmFsdWUpO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMuZ3JvdXBpbmcuc2V0RmllbGRzKFtdKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogU2V0IGRhdGEgb25seSB3aGVuIHRoZSBjb21wb25lbnQgaGFzIGZ1bGx5IGluaXRpYWxpemVkIGFuZCBpcyByZW5kZXJlZC5cclxuICAgKi9cclxuICBjaGVja0luaXRpYWxpemVkKCkge1xyXG4gICAgaWYgKHRoaXMuYWZ0ZXJWaWV3SW5pdCkge1xyXG4gICAgICB0aGlzLmluaXRpYWxpemVkID0gdHJ1ZTtcclxuICAgICAgdGhpcy51cGRhdGVDb25maWcodGhpcy5jb25maWcpO1xyXG4gICAgICB0aGlzLnBvc3RJbml0KCk7XHJcblxyXG4gICAgICBpZiAodGhpcy5kYXRhU3ViamVjdCkge1xyXG4gICAgICAgIC8vTWF5IGFzIHdlbGwgbWFrZSBpdCBzcGluIHdoaWxlIHByb2Nlc3NpbmcsIGFzIHdlbGwgYXMgbG9hZGluZy4gT3RoZXJ3aXNlIGl0IGxvb2tzIGZyb3plblxyXG4gICAgICAgIGlmICh0aGlzLmxvYWRpbmdTdWJqZWN0cykge1xyXG4gICAgICAgICAgdGhpcy5sb2FkaW5nU3ViamVjdHNbMF0ubmV4dCh0cnVlKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuZGF0YVN1YmplY3RcclxuICAgICAgICAgIC5waXBlKGRlbGF5KDApKVxyXG4gICAgICAgICAgLnN1YnNjcmliZSgoZGF0YTogT2JqZWN0W10pID0+IHtcclxuICAgICAgICAgICAgdGhpcy5ib3VuZERhdGEgPSBkYXRhO1xyXG4gICAgICAgICAgICB0aGlzLnNldFJlc3VsdE1lc3NhZ2UodGhpcy5ib3VuZERhdGEpO1xyXG4gICAgICAgICAgICB0aGlzLnNldERhdGEoKTtcclxuXHJcbiAgICAgICAgICAgIC8vTm93IGRvbmUgbG9hZGluZ1xyXG4gICAgICAgICAgICBpZiAodGhpcy5sb2FkaW5nU3ViamVjdHMpIHtcclxuICAgICAgICAgICAgICB0aGlzLmxvYWRpbmdTdWJqZWN0c1swXS5uZXh0KGZhbHNlKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy5zZXREYXRhKCk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFVwb24gbmV3IHJvd1BhcmVudCBiZWluZyBzZXQsIGFkZCBhbnkgY2xhc3NlcyBpZiByb3dDbGFzcyBpcyBkZWZpbmVkLlxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtRdWVyeUxpc3Q8RWxlbWVudFJlZj59IHJvd1BhcmVudHNcclxuICAgKi9cclxuICBAVmlld0NoaWxkcmVuKFwicm93UGFyZW50XCIsIHtyZWFkOiBFbGVtZW50UmVmfSkgc2V0IHJvd1BhcmVudHMocm93UGFyZW50czogUXVlcnlMaXN0PEVsZW1lbnRSZWY+KSB7XHJcbiAgICBpZiAocm93UGFyZW50cyAmJiB0aGlzLnJvd0NsYXNzKSB7XHJcbiAgICAgIHJvd1BhcmVudHMuZm9yRWFjaCgoZTogRWxlbWVudFJlZikgPT4ge1xyXG4gICAgICAgIGxldCBjbGFzc2VzOiBzdHJpbmdbXSA9IHRoaXMucm93Q2xhc3Muc3BsaXQoXCIgXCIpO1xyXG4gICAgICAgIGZvciAobGV0IGNsYXNzTmFtZSBvZiBjbGFzc2VzKSB7XHJcbiAgICAgICAgICB0aGlzLnJlbmRlcmVyLmFkZENsYXNzKGUubmF0aXZlRWxlbWVudCwgY2xhc3NOYW1lKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gICAgICB0aGlzLnJvd1JlZnJlc2ggKz0gMTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHBvc3RJbml0KCk6IHZvaWQge1xyXG4gICAgaWYgKGlzRGV2TW9kZSgpKSB7XHJcbiAgICAgIGNvbnNvbGUuZGVidWcoXCJTZWFyY2hMaXN0Q29tcG9uZW50LnBvc3RJbml0OiBcIiArIHRoaXMuaWQpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLmdldFBhcmVudCgpKSB7XHJcbiAgICAgIHRoaXMuY29udHJvbGxlciA9IDxTZWFyY2hMaXN0Q29udHJvbGxlckNvbXBvbmVudD50aGlzLmdldFBhcmVudCgpLmdldENvbXBvbmVudEJ5VHlwZShcIlNlYXJjaExpc3RDb250cm9sbGVyQ29tcG9uZW50XCIpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLmNvbnRyb2xsZXIpIHtcclxuICAgICAgaWYgKGlzRGV2TW9kZSgpKSB7XHJcbiAgICAgICAgY29uc29sZS5kZWJ1ZyhcIlNlYXJjaExpc3RDb21wb25lbnQ6IHVzaW5nIGNvbnRyb2xsZXJcIik7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHRoaXMuY29udHJvbGxlci5hZGRTZWFyY2hMaXN0KHRoaXMudGl0bGUpO1xyXG5cclxuICAgICAgdGhpcy5jb250cm9sbGVyLmZpbHRlcnNTdWJqZWN0LnN1YnNjcmliZSgoZmlsdGVyczogSGNpRmlsdGVyRHRvW10pID0+IHtcclxuICAgICAgICB0aGlzLmZpbHRlcnMgPSBmaWx0ZXJzO1xyXG4gICAgICAgIHRoaXMuc2V0RGF0YSgpO1xyXG4gICAgICAgIHRoaXMucmVzZXRQYWdpbmcoKTtcclxuICAgICAgfSk7XHJcblxyXG4gICAgICB0aGlzLmNvbnRyb2xsZXIuc29ydHNTdWJqZWN0LnN1YnNjcmliZSgoc29ydHM6IEhjaVNvcnREdG9bXSkgPT4ge1xyXG4gICAgICAgIHRoaXMuc29ydHMgPSBzb3J0cztcclxuICAgICAgICB0aGlzLnNldERhdGEoKTtcclxuICAgICAgfSk7XHJcblxyXG4gICAgICB0aGlzLmNvbnRyb2xsZXIuc2VsZWN0ZWRTZWFyY2hMaXN0U3ViamVjdC5zdWJzY3JpYmUoKHRpdGxlOiBzdHJpbmcpID0+IHtcclxuICAgICAgICBpZiAoaXNEZXZNb2RlKCkpIHtcclxuICAgICAgICAgIGNvbnNvbGUuZGVidWcoXCJzZWxlY3RlZFNlYXJjaExpc3RTdWJqZWN0LnN1YnNjcmliZTogXCIgKyB0aGlzLnRpdGxlICsgXCIsIFwiICsgdGl0bGUpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgbGV0IHZpc2libGU6IGJvb2xlYW4gPSB0cnVlO1xyXG5cclxuICAgICAgICBpZiAodGhpcy50aXRsZSAmJiB0aXRsZSAmJiB0aGlzLnRpdGxlICE9PSB0aXRsZSkge1xyXG4gICAgICAgICAgdmlzaWJsZSA9IGZhbHNlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHZpc2libGUpIHtcclxuICAgICAgICAgIHRoaXMucmVuZGVyZXIuc2V0U3R5bGUodGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQsIFwiZGlzcGxheVwiLCBcImZsZXhcIik7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHRoaXMucmVuZGVyZXIuc2V0U3R5bGUodGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQsIFwiZGlzcGxheVwiLCBcIm5vbmVcIik7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFRoaXMgZnVuY3Rpb24gd291bGQgcmVzZXQgcGFnaW5nIGFuZCBmaXJlc1xyXG4gICAqL1xyXG4gIHJlc2V0UGFnaW5nKCkge1xyXG4gICAgdGhpcy5wYWdpbmcuc2V0UGFnZSgwKTtcclxuICAgIHRoaXMucGFnaW5nU3ViamVjdC5uZXh0KHRoaXMucGFnaW5nKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFVwZGF0ZXMgdGhlIGNvbmZpZyB3aXRoIG9wdGlvbnMgYW5kIHJlLWZldGNoZXMgZGF0YS5cclxuICAgKlxyXG4gICAqIEBwYXJhbSBjb25maWdcclxuICAgKi9cclxuICB1cGRhdGVDb25maWcoY29uZmlnKSB7XHJcbiAgICBpZiAoaXNEZXZNb2RlKCkpIHtcclxuICAgICAgY29uc29sZS5kZWJ1ZyhcInVwZGF0ZUNvbmZpZ1wiKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoY29uZmlnKSB7XHJcbiAgICAgIHRoaXMuY29uZmlnID0gT2JqZWN0LmFzc2lnbih7fSwgdGhpcy5jb25maWcsIGNvbmZpZyk7XHJcblxyXG4gICAgICBpZiAoY29uZmlnLnJvdXRlKSB7XHJcbiAgICAgICAgdGhpcy5yb3V0ZSA9IGNvbmZpZy5yb3V0ZTtcclxuICAgICAgfVxyXG4gICAgICBpZiAoY29uZmlnLmdyb3VwQnlBbGxvd2VkRmllbGRzKSB7XHJcbiAgICAgICAgdGhpcy5ncm91cEJ5QWxsb3dlZEZpZWxkcyA9IGNvbmZpZy5ncm91cEJ5QWxsb3dlZEZpZWxkcztcclxuICAgICAgfVxyXG4gICAgICBpZiAoY29uZmlnLnNvcnRzKSB7XHJcbiAgICAgICAgdGhpcy5zb3J0cyA9IGNvbmZpZy5zb3J0cztcclxuICAgICAgfVxyXG4gICAgICBpZiAoY29uZmlnLmdyb3VwaW5nRmllbGRzKSB7XHJcbiAgICAgICAgdGhpcy5ncm91cGluZ0ZpZWxkcyA9IGNvbmZpZy5ncm91cGluZ0ZpZWxkcztcclxuICAgICAgICB0aGlzLmdyb3VwaW5nLnNldEZpZWxkcyhjb25maWcuZ3JvdXBpbmdGaWVsZHMpO1xyXG4gICAgICB9XHJcbiAgICAgIGlmIChjb25maWcucGFnZVNpemUpIHtcclxuICAgICAgICB0aGlzLnBhZ2VTaXplID0gY29uZmlnLnBhZ2VTaXplO1xyXG4gICAgICAgIHRoaXMucGFnaW5nLnNldFBhZ2VTaXplKGNvbmZpZy5wYWdlU2l6ZSk7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKGNvbmZpZy5ncm91cERpc3BsYXkpIHtcclxuICAgICAgICB0aGlzLmdyb3VwRGlzcGxheSA9IGNvbmZpZy5ncm91cERpc3BsYXk7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKGNvbmZpZy5jbG9zZU90aGVycyAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgdGhpcy5jbG9zZU90aGVycyA9IGNvbmZpZy5jbG9zZU90aGVycztcclxuICAgICAgfVxyXG4gICAgICBpZiAoY29uZmlnLmdyb3VwVGVtcGxhdGUpIHtcclxuICAgICAgICB0aGlzLmdyb3VwVGVtcGxhdGUgPSBjb25maWcuZ3JvdXBUZW1wbGF0ZTtcclxuICAgICAgICB0aGlzLmdyb3VwU2VsZWN0ZWRUZW1wbGF0ZSA9IGNvbmZpZy5ncm91cFRlbXBsYXRlO1xyXG4gICAgICB9XHJcbiAgICAgIGlmIChjb25maWcuZ3JvdXBTZWxlY3RlZFRlbXBsYXRlKSB7XHJcbiAgICAgICAgdGhpcy5ncm91cFNlbGVjdGVkVGVtcGxhdGUgPSBjb25maWcuZ3JvdXBTZWxlY3RlZFRlbXBsYXRlO1xyXG4gICAgICB9XHJcbiAgICAgIGlmIChjb25maWcuaXRlbVRlbXBsYXRlKSB7XHJcbiAgICAgICAgdGhpcy5pdGVtVGVtcGxhdGUgPSBjb25maWcuaXRlbVRlbXBsYXRlO1xyXG4gICAgICB9XHJcbiAgICAgIGlmIChjb25maWcuZGF0YSkge1xyXG4gICAgICAgIHRoaXMuYm91bmREYXRhID0gY29uZmlnLmRhdGE7XHJcbiAgICAgICAgdGhpcy5zZXRSZXN1bHRNZXNzYWdlKHRoaXMuYm91bmREYXRhKTtcclxuICAgICAgfVxyXG4gICAgICBpZiAoY29uZmlnLmRhdGFTdWJqZWN0KSB7XHJcbiAgICAgICAgdGhpcy5kYXRhU3ViamVjdCA9IGNvbmZpZy5kYXRhU3ViamVjdDtcclxuICAgICAgfVxyXG4gICAgICBpZiAoY29uZmlnLmRhdGFDYWxsKSB7XHJcbiAgICAgICAgdGhpcy5leHRlcm5hbERhdGFDYWxsID0gY29uZmlnLmRhdGFDYWxsO1xyXG4gICAgICB9XHJcbiAgICAgIGlmIChjb25maWcub25Hcm91cENsaWNrKSB7XHJcbiAgICAgICAgdGhpcy5vbkdyb3VwQ2xpY2sgPSBjb25maWcub25Hcm91cENsaWNrO1xyXG4gICAgICB9XHJcbiAgICAgIGlmIChjb25maWcuaW5saW5lRXhwYW5kICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgICB0aGlzLmlubGluZUV4cGFuZCA9IGNvbmZpZy5pbmxpbmVFeHBhbmQ7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKGNvbmZpZy5ncm91cENsYXNzKSB7XHJcbiAgICAgICAgdGhpcy5ncm91cENsYXNzID0gY29uZmlnLmdyb3VwQ2xhc3M7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKGNvbmZpZy5yb3dDbGFzcykge1xyXG4gICAgICAgIHRoaXMucm93Q2xhc3MgPSBjb25maWcucm93Q2xhc3M7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKGNvbmZpZy5yb3dJZCkge1xyXG4gICAgICAgIHRoaXMucm93SWQgPSBjb25maWcucm93SWQ7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKGNvbmZpZy5vbkdyb3VwQ2xpY2spIHtcclxuICAgICAgICB0aGlzLm9uR3JvdXBDbGljayA9IGNvbmZpZy5vbkdyb3VwQ2xpY2s7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKGNvbmZpZy5vblJvd0NsaWNrKSB7XHJcbiAgICAgICAgdGhpcy5vblJvd0NsaWNrID0gY29uZmlnLm9uUm93Q2xpY2s7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKGNvbmZpZy5sb2FkaW5nU3ViamVjdHMpIHtcclxuICAgICAgICB0aGlzLmxvYWRpbmdTdWJqZWN0cyA9IGNvbmZpZy5sb2FkaW5nU3ViamVjdHM7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKGNvbmZpZy5ncm91cFBhZ2VTaXplKSB7XHJcbiAgICAgICAgdGhpcy5ncm91cFBhZ2VTaXplID0gY29uZmlnLmdyb3VwUGFnZVNpemU7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKGNvbmZpZy5ncm91cENhY2hlTnVtUGFnZXMpIHtcclxuICAgICAgICBpZiAoY29uZmlnLmdyb3VwQ2FjaGVOdW1QYWdlcyA+PSAyKSB7XHJcbiAgICAgICAgICB0aGlzLmdyb3VwQ2FjaGVOdW1QYWdlcyA9IGNvbmZpZy5ncm91cENhY2hlTnVtUGFnZXM7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIGNvbnNvbGUud2FybihcImdyb3VwQ2FjaGVOdW1QYWdlcyBtdXN0IGJlIDIgb3IgbW9yZS5cIik7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIGlmIChjb25maWcub25Hcm91cENsb3NlKSB7XHJcbiAgICAgICAgdGhpcy5vbkdyb3VwQ2xvc2UgPSBjb25maWcub25Hcm91cENsb3NlO1xyXG4gICAgICB9XHJcbiAgICAgIGlmIChjb25maWcuYnVzeUljb24pIHtcclxuICAgICAgICB0aGlzLmJ1c3lJY29uID0gY29uZmlnLmJ1c3lJY29uO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAoY29uZmlnLnNob3dSZXN1bHRzQ291bnQpIHtcclxuICAgICAgICB0aGlzLnNob3dSZXN1bHRzQ291bnQgPSBjb25maWcuc2hvd1Jlc3VsdHNDb3VudDtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGlmICghdGhpcy5vbkdyb3VwQ2xpY2spIHtcclxuICAgICAgdGhpcy5vbkdyb3VwQ2xpY2sgPSB0aGlzLmRlZmF1bHRHcm91cENsaWNrO1xyXG4gICAgfVxyXG4gICAgaWYgKCF0aGlzLm9uUm93Q2xpY2spIHtcclxuICAgICAgdGhpcy5vblJvd0NsaWNrID0gdGhpcy5kZWZhdWx0Um93Q2xpY2s7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKCF0aGlzLml0ZW1UZW1wbGF0ZSkge1xyXG4gICAgICBjb25zb2xlLndhcm4oXCJTZWFyY2hMaXN0Q29tcG9uZW50OiBBbiBpdGVtVGVtcGxhdGUgbXVzdCBiZSBwcm92aWRlZCFcIik7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKCF0aGlzLmdyb3VwVGVtcGxhdGUpIHtcclxuICAgICAgdGhpcy5ncm91cFRlbXBsYXRlID0gdGhpcy5kZWZhdWx0R3JvdXBUZW1wbGF0ZTtcclxuICAgIH1cclxuICAgIGlmICghdGhpcy5ncm91cFNlbGVjdGVkVGVtcGxhdGUpIHtcclxuICAgICAgdGhpcy5ncm91cFNlbGVjdGVkVGVtcGxhdGUgPSB0aGlzLmRlZmF1bHRHcm91cFNlbGVjdGVkVGVtcGxhdGU7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMuZXh0ZXJuYWxEYXRhQ2FsbCkge1xyXG4gICAgICB0aGlzLmxvYWRpbmdTdWJqZWN0cyA9IFtuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKV07XHJcbiAgICB9XHJcblxyXG5cclxuICAgIHN1cGVyLnVwZGF0ZUNvbmZpZyhjb25maWcpO1xyXG5cclxuICAgIHRoaXMuc2V0RGF0YSgpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogR2VuZXJhdGVzIHRoZSBkYXRhIGlmIGFuIGFycmF5LCBjYWxscyB0aGUgZGF0YSBpZiBleHRlcm5hbCBjYWxsLlxyXG4gICAqL1xyXG4gIHNldERhdGEoZGF0YT86IE9iamVjdFtdKTogdm9pZCB7XHJcbiAgICBpZiAoaXNEZXZNb2RlKCkpIHtcclxuICAgICAgY29uc29sZS5kZWJ1ZyhcInNldERhdGFcIik7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGRhdGEpIHtcclxuICAgICAgdGhpcy5ib3VuZERhdGEgPSBkYXRhO1xyXG4gICAgICB0aGlzLnNldFJlc3VsdE1lc3NhZ2UodGhpcy5ib3VuZERhdGEpO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuc2VsZWN0ZWRSb3dHcm91cCA9IHVuZGVmaW5lZDtcclxuICAgIHRoaXMuc2VsZWN0ZWRSb3dHcm91cENvbnRhaW5lciA9IHVuZGVmaW5lZDtcclxuXHJcbiAgICBpZiAodGhpcy5leHRlcm5hbERhdGFDYWxsKSB7XHJcbiAgICAgIGlmICghdGhpcy5idXN5KSB7XHJcbiAgICAgICAgdGhpcy5idXN5ID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLmxvYWRpbmdTdWJqZWN0c1swXS5uZXh0KHRydWUpO1xyXG5cclxuICAgICAgICB0aGlzLmV4dGVybmFsRGF0YUNhbGwobmV3IEhjaUdyaWREdG8odGhpcy5maWx0ZXJzLCB0aGlzLnNvcnRzLCB0aGlzLnBhZ2luZywgbmV3IEhjaUdyb3VwaW5nRHRvKHRoaXMuZ3JvdXBpbmcuZmllbGRzLCB0aGlzLmdyb3VwaW5nLmZpZWxkcyAmJiB0aGlzLmdyb3VwaW5nLmZpZWxkcy5sZW5ndGggPiAwKSkpXHJcbiAgICAgICAgICAucGlwZShmaW5hbGl6ZSgoKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMubG9hZGluZ1N1YmplY3RzWzBdLm5leHQoZmFsc2UpO1xyXG4gICAgICAgICAgICB0aGlzLmJ1c3kgPSBmYWxzZTtcclxuICAgICAgICAgIH0pKVxyXG4gICAgICAgICAgLnN1YnNjcmliZSgoZXh0ZXJuYWxEYXRhOiBIY2lEYXRhRHRvKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuZ2VuZXJhdGVEYXRhKGV4dGVybmFsRGF0YSk7XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5nZW5lcmF0ZURhdGEoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEdlbmVyYXRlcyB0aGUgZGF0YSBhcnJheSB0aGF0IHRoZSBpbnRlcmZhY2UgdXNlcyB0byByZW5kZXIgKHJlZ2FyZGxlc3Mgb2Ygc291cmNlKS5cclxuICAgKlxyXG4gICAqIEBwYXJhbSB7SGNpRGF0YUR0b30gZXh0ZXJuYWxEYXRhXHJcbiAgICovXHJcbiAgZ2VuZXJhdGVEYXRhKGV4dGVybmFsRGF0YT86IEhjaURhdGFEdG8pOiB2b2lkIHtcclxuICAgIGlmIChpc0Rldk1vZGUoKSkge1xyXG4gICAgICBjb25zb2xlLmRlYnVnKFwiZ2VuZXJhdGVEYXRhXCIpO1xyXG4gICAgICBjb25zb2xlLmRlYnVnKGV4dGVybmFsRGF0YSk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGV4dGVybmFsRGF0YSkge1xyXG4gICAgICB0aGlzLmJvdW5kRGF0YSA9IGV4dGVybmFsRGF0YS5kYXRhO1xyXG4gICAgICB0aGlzLnNldFJlc3VsdE1lc3NhZ2UodGhpcy5ib3VuZERhdGEpO1xyXG4gICAgICB0aGlzLnBhZ2luZy5zZXREYXRhU2l6ZShleHRlcm5hbERhdGEuZ3JpZER0by5wYWdpbmcuZGF0YVNpemUpO1xyXG5cclxuICAgICAgLy8gQ3JlYXRlIHJvdyBncm91cHMuXHJcbiAgICAgIHRoaXMudmlld0RhdGEgPSBbXTtcclxuICAgICAgbGV0IHJvd0dyb3VwOiBSb3dHcm91cDtcclxuXHJcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5ib3VuZERhdGEubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICByb3dHcm91cCA9IG5ldyBSb3dHcm91cCh1bmRlZmluZWQsIHRoaXMuYm91bmREYXRhW2ldLCAoZXh0ZXJuYWxEYXRhLmRhdGFDb3VudHMgJiYgZXh0ZXJuYWxEYXRhLmRhdGFDb3VudHMgIT09IG51bGwpID8gZXh0ZXJuYWxEYXRhLmRhdGFDb3VudHNbaV0gOiAwKTtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMuZ3JvdXBpbmcuZmllbGRzLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgIGZvciAobGV0IGdyb3VwaW5nRmllbGQgb2YgdGhpcy5ncm91cGluZy5maWVsZHMpIHtcclxuICAgICAgICAgICAgcm93R3JvdXBbZ3JvdXBpbmdGaWVsZF0gPSB0aGlzLmJvdW5kRGF0YVtpXVtncm91cGluZ0ZpZWxkXTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMudmlld0RhdGEucHVzaChyb3dHcm91cCk7XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIC8vIENyZWF0ZSBhbmQgcG9wdWxhdGUgcm93IGdyb3Vwcy5cclxuICAgICAgdGhpcy5wb3B1bGF0ZUZyb21Cb3VuZERhdGEoKTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmRldGVjdENoYW5nZXMoKTtcclxuXHJcbiAgICB0aGlzLmRhdGFDaGFuZ2UuZW1pdChPYmplY3QuYXNzaWduKHt0eXBlOiBcIm5vbmVcIn0sIHRoaXMubGFzdEV2ZW50LCB7XHJcbiAgICAgIHBhZ2luZzogdGhpcy5wYWdpbmcsXHJcbiAgICAgIG5WaWV3RGF0YTogdGhpcy52aWV3RGF0YS5sZW5ndGhcclxuICAgIH0pKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEdlbmVyYXRlcyB0aGUgZGF0YSBpZiB0aGUgZGF0YSBpcyBhbiBhcnJheSAobm90IGV4dGVybmFsKS5cclxuICAgKi9cclxuICBwb3B1bGF0ZUZyb21Cb3VuZERhdGEoKTogdm9pZCB7XHJcbiAgICBpZiAoaXNEZXZNb2RlKCkpIHtcclxuICAgICAgY29uc29sZS5kZWJ1ZyhcInBvcHVsYXRlRnJvbUJvdW5kRGF0YVwiKTtcclxuICAgICAgY29uc29sZS5kZWJ1Zyh0aGlzLmJvdW5kRGF0YSk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKCF0aGlzLmJvdW5kRGF0YSkge1xyXG4gICAgICB0aGlzLnZpZXdEYXRhID0gW107XHJcbiAgICAgIHRoaXMucGFnaW5nLnNldFBhZ2UoMCk7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5ib3VuZERhdGEubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgIGNvbnNvbGUuZGVidWcoXCJCb3VuZCBEYXRhIGxlbmd0aCBmb3VuZCBhcyAwXCIpO1xyXG4gICAgICB0aGlzLnBhZ2luZy5zZXRQYWdlKDApO1xyXG4gICAgICB0aGlzLnBhZ2luZy5zZXROdW1QYWdlcygxKTtcclxuICAgICAgdGhpcy5wYWdpbmcuc2V0RGF0YVNpemUoMCk7XHJcbiAgICB9XHJcblxyXG4gICAgbGV0IHByZXBhcmVkRGF0YSA9IFtdO1xyXG4gICAgdGhpcy5ncm91cGVkRGF0YVNldCA9IFtdO1xyXG5cclxuICAgIGxldCByb3dHcm91cE1hcDogTWFwPHN0cmluZywgbnVtYmVyPiA9IG5ldyBNYXA8c3RyaW5nLCBudW1iZXI+KCk7XHJcblxyXG4gICAgbGV0IGRvUm93R3JvdXBpbmc6IGJvb2xlYW4gPSB0aGlzLmdyb3VwaW5nLmZpZWxkcyAmJiB0aGlzLmdyb3VwaW5nLmZpZWxkcy5sZW5ndGggPiAwO1xyXG4gICAgZm9yIChsZXQgcm93IG9mIHRoaXMuYm91bmREYXRhKSB7XHJcbiAgICAgIGxldCBncm91cEtleTogc3RyaW5nO1xyXG4gICAgICBpZiAoZG9Sb3dHcm91cGluZykge1xyXG4gICAgICAgIGZvciAobGV0IGZpZWxkIG9mIHRoaXMuZ3JvdXBpbmcuZmllbGRzKSB7XHJcbiAgICAgICAgICBncm91cEtleSA9IChncm91cEtleSkgPyBncm91cEtleSArIFwiOlwiICsgcm93W2ZpZWxkXSA6IHJvd1tmaWVsZF07XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAodGhpcy5maWx0ZXJzICYmIHRoaXMuZmlsdGVycy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgbGV0IGluY2x1ZGU6IGJvb2xlYW4gPSB0cnVlO1xyXG5cclxuICAgICAgICBmb3IgKGxldCBmaWx0ZXIgb2YgdGhpcy5maWx0ZXJzKSB7XHJcblxyXG4gICAgICAgICAgaWYgKGZpbHRlci5nZXRGaWVsZCgpLmluZGV4T2YoXCIgb3IgXCIpICE9PSAtMSkge1xyXG4gICAgICAgICAgICBsZXQgaW5uZXJJbmNsdWRlOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gICAgICAgICAgICBmb3IgKGxldCBmaWVsZCBvZiBmaWx0ZXIuZ2V0RmllbGQoKS5zcGxpdChcIiBvciBcIikpIHtcclxuICAgICAgICAgICAgICAvLyBjaGVjayByb3dbZmllbGRdIGlzIGEgbnVtYmVyIGFuZCBpZiB5ZXMsIHNraXAgYXBwbHlpbmcgdGhlIHRvTG93ZXJDYXNlKCkgZnVuY3Rpb24uXHJcbiAgICAgICAgICAgICAgLy8gKiB0byBjb3ZlciB0aGUgaGFuZGxpbmcgb2YgdGhlIHNlYXJjaCBieSBwZXJzb24gaWQgc2NlbmFyaW8gZnJvbSB3aXRoaW4gdGhlIHF1aWNrIHNlYXJjaCBmdW5jdGlvbmFsaXR5LlxyXG4gICAgICAgICAgICAgIGlmIChyb3dbZmllbGRdICYmIHR5cGVvZiByb3dbZmllbGRdID09IFwibnVtYmVyXCIpIHtcclxuICAgICAgICAgICAgICAgIGlmIChyb3dbZmllbGRdID09IGZpbHRlci5nZXRWYWx1ZSgpKSB7XHJcbiAgICAgICAgICAgICAgICAgIGlubmVySW5jbHVkZSA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgfSBlbHNlIGlmIChyb3dbZmllbGRdIGluc3RhbmNlb2YgRGF0ZSB8fCBmaWx0ZXIuZ2V0VmFsdWUoKSBpbnN0YW5jZW9mIERhdGUgfHwgZmlsdGVyLmdldERhdGFUeXBlKCkgPT0gXCJkYXRlXCIpIHtcclxuICAgICAgICAgICAgICAgIGlmIChyb3dbZmllbGRdICYmIGZpbHRlci5nZXRWYWx1ZSgpICYmIChuZXcgRGF0ZShyb3dbZmllbGRdKSkuZ2V0VGltZSgpID09IChuZXcgRGF0ZShmaWx0ZXIuZ2V0VmFsdWUoKSkpLmdldFRpbWUoKSkge1xyXG4gICAgICAgICAgICAgICAgICBmaWx0ZXIuZ2V0VmFsdWUoKTtcclxuICAgICAgICAgICAgICAgICAgaW5uZXJJbmNsdWRlID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICB9IGVsc2UgaWYgKHJvd1tmaWVsZF0gJiYgcm93W2ZpZWxkXS50b0xvd2VyQ2FzZSgpLmluZGV4T2YoZmlsdGVyLmdldFZhbHVlKCkudG9Mb3dlckNhc2UoKSkgIT09IC0xKSB7XHJcbiAgICAgICAgICAgICAgICBpbm5lckluY2x1ZGUgPSB0cnVlO1xyXG4gICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmICghaW5uZXJJbmNsdWRlKSB7XHJcbiAgICAgICAgICAgICAgaW5jbHVkZSA9IGZhbHNlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBpZiAoIWZpbHRlci52YWxpZCB8fCAhZmlsdGVyLmdldFZhbHVlKCkpIHtcclxuICAgICAgICAgICAgfSBlbHNlIGlmICgoZmlsdGVyLnZhbGlkIHx8IGZpbHRlci5nZXRWYWx1ZSgpKSAmJiAodGhpcy5jb250cm9sbGVyLmFkdmFuY2VkU2VhcmNoLmxlbmd0aCAhPT0gdW5kZWZpbmVkICYmIHRoaXMuY29udHJvbGxlci5hZHZhbmNlZFNlYXJjaC5sZW5ndGggPiAwKSkge1xyXG4gICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICB9IGVsc2UgaWYgKCFyb3dbZmlsdGVyLmZpZWxkXSkge1xyXG4gICAgICAgICAgICAgIGluY2x1ZGUgPSBmYWxzZTtcclxuICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgfSBlbHNlIGlmIChyb3dbZmlsdGVyLmZpZWxkXSBpbnN0YW5jZW9mIERhdGUgfHwgZmlsdGVyLmdldFZhbHVlKCkgaW5zdGFuY2VvZiBEYXRlIHx8IGZpbHRlci5nZXREYXRhVHlwZSgpID09IFwiZGF0ZVwiKSB7XHJcbiAgICAgICAgICAgICAgZmlsdGVyLmdldFZhbHVlKCk7XHJcbiAgICAgICAgICAgICAgaWYgKChuZXcgRGF0ZShyb3dbZmlsdGVyLmZpZWxkXSkpLmdldFRpbWUoKSAhPSAobmV3IERhdGUoZmlsdGVyLmdldFZhbHVlKCkpKS5nZXRUaW1lKCkpIHtcclxuICAgICAgICAgICAgICAgIGluY2x1ZGUgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSBlbHNlIGlmIChyb3dbZmlsdGVyLmZpZWxkXS50b0xvd2VyQ2FzZSgpLmluZGV4T2YoZmlsdGVyLmdldFZhbHVlKCkudG9Mb3dlckNhc2UoKSkgPT09IC0xKSB7XHJcbiAgICAgICAgICAgICAgaW5jbHVkZSA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoIWluY2x1ZGUpIHtcclxuICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKGRvUm93R3JvdXBpbmcpIHtcclxuICAgICAgICBpZiAocm93R3JvdXBNYXAuZ2V0KGdyb3VwS2V5KSA+PSAwKSB7XHJcbiAgICAgICAgICBwcmVwYXJlZERhdGFbcm93R3JvdXBNYXAuZ2V0KGdyb3VwS2V5KV0ucmdSb3dzLnB1c2gocm93KTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgcm93R3JvdXBNYXAuc2V0KGdyb3VwS2V5LCBwcmVwYXJlZERhdGEubGVuZ3RoKTtcclxuXHJcbiAgICAgICAgICBsZXQgcm93R3JvdXA6IFJvd0dyb3VwID0gbmV3IFJvd0dyb3VwKGdyb3VwS2V5LCByb3cpO1xyXG4gICAgICAgICAgZm9yIChsZXQgZmllbGQgb2YgdGhpcy5ncm91cGluZy5maWVsZHMpIHtcclxuICAgICAgICAgICAgcm93R3JvdXBbZmllbGRdID0gcm93W2ZpZWxkXTtcclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICBwcmVwYXJlZERhdGEucHVzaChyb3dHcm91cCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHByZXBhcmVkRGF0YS5wdXNoKG5ldyBSb3dHcm91cChncm91cEtleSwgcm93KSk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIC8vdGhpcy5nbG9iYWxSb3dHcm91cE1hcCA9IHJvd0dyb3VwTWFwO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLnNvcnRzLmxlbmd0aCA+IDApIHtcclxuICAgICAgcHJlcGFyZWREYXRhLnNvcnQoKGE6IFJvd0dyb3VwLCBiOiBSb3dHcm91cCkgPT4ge1xyXG4gICAgICAgIGxldCB2OiBudW1iZXIgPSAwO1xyXG5cclxuICAgICAgICBmb3IgKGxldCBzb3J0IG9mIHRoaXMuc29ydHMpIHtcclxuICAgICAgICAgIGlmICh0aGlzLmlzU29ydEZpZWxkR3JvdXBGaWVsZChzb3J0LmdldEZpZWxkKCkpKSB7XHJcbiAgICAgICAgICAgIGlmIChzb3J0LmdldEFzYygpKSB7XHJcbiAgICAgICAgICAgICAgaWYgKGFbc29ydC5nZXRGaWVsZCgpXSA8IGJbc29ydC5nZXRGaWVsZCgpXSkge1xyXG4gICAgICAgICAgICAgICAgdiA9IC0xO1xyXG4gICAgICAgICAgICAgIH0gZWxzZSBpZiAoYVtzb3J0LmdldEZpZWxkKCldID4gYltzb3J0LmdldEZpZWxkKCldKSB7XHJcbiAgICAgICAgICAgICAgICB2ID0gMTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgaWYgKGFbc29ydC5nZXRGaWVsZCgpXSA+IGJbc29ydC5nZXRGaWVsZCgpXSkge1xyXG4gICAgICAgICAgICAgICAgdiA9IC0xO1xyXG4gICAgICAgICAgICAgIH0gZWxzZSBpZiAoYVtzb3J0LmdldEZpZWxkKCldIDwgYltzb3J0LmdldEZpZWxkKCldKSB7XHJcbiAgICAgICAgICAgICAgICB2ID0gMTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmICh2ICE9IDApIHtcclxuICAgICAgICAgICAgICByZXR1cm4gdjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSBlbHNlIGlmICh0aGlzLmdyb3VwaW5nLmdldEZpZWxkcygpLmxlbmd0aCA9PT0gMCkge1xyXG4gICAgICAgICAgICBpZiAoc29ydC5nZXRBc2MoKSkge1xyXG4gICAgICAgICAgICAgIGlmIChhLnJnUm93c1swXVtzb3J0LmdldEZpZWxkKCldIDwgYi5yZ1Jvd3NbMF1bc29ydC5nZXRGaWVsZCgpXSkge1xyXG4gICAgICAgICAgICAgICAgdiA9IC0xO1xyXG4gICAgICAgICAgICAgIH0gZWxzZSBpZiAoYS5yZ1Jvd3NbMF1bc29ydC5nZXRGaWVsZCgpXSA+IGIucmdSb3dzWzBdW3NvcnQuZ2V0RmllbGQoKV0pIHtcclxuICAgICAgICAgICAgICAgIHYgPSAxO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICBpZiAoYS5yZ1Jvd3NbMF1bc29ydC5nZXRGaWVsZCgpXSA+IGIucmdSb3dzWzBdW3NvcnQuZ2V0RmllbGQoKV0pIHtcclxuICAgICAgICAgICAgICAgIHYgPSAtMTtcclxuICAgICAgICAgICAgICB9IGVsc2UgaWYgKGEucmdSb3dzWzBdW3NvcnQuZ2V0RmllbGQoKV0gPCBiLnJnUm93c1swXVtzb3J0LmdldEZpZWxkKCldKSB7XHJcbiAgICAgICAgICAgICAgICB2ID0gMTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmICh2ICE9IDApIHtcclxuICAgICAgICAgICAgICByZXR1cm4gdjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHY7XHJcbiAgICAgIH0pO1xyXG5cclxuICAgICAgaWYgKHRoaXMuZ3JvdXBpbmcuZ2V0RmllbGRzKCkubGVuZ3RoID4gMCkge1xyXG4gICAgICAgIGZvciAobGV0IHJvd0dyb3VwIG9mIHByZXBhcmVkRGF0YSkge1xyXG4gICAgICAgICAgcm93R3JvdXAucmdSb3dzLnNvcnQoKGE6IE9iamVjdCwgYjogT2JqZWN0KSA9PiB7XHJcbiAgICAgICAgICAgIGxldCB2OiBudW1iZXIgPSAwO1xyXG5cclxuICAgICAgICAgICAgZm9yIChsZXQgc29ydCBvZiB0aGlzLnNvcnRzKSB7XHJcbiAgICAgICAgICAgICAgaWYgKCF0aGlzLmlzU29ydEZpZWxkR3JvdXBGaWVsZChzb3J0LmdldEZpZWxkKCkpKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoc29ydC5nZXRBc2MoKSkge1xyXG4gICAgICAgICAgICAgICAgICBpZiAoYVtzb3J0LmdldEZpZWxkKCldIDwgYltzb3J0LmdldEZpZWxkKCldKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdiA9IC0xO1xyXG4gICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGFbc29ydC5nZXRGaWVsZCgpXSA+IGJbc29ydC5nZXRGaWVsZCgpXSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHYgPSAxO1xyXG4gICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICBpZiAoYVtzb3J0LmdldEZpZWxkKCldID4gYltzb3J0LmdldEZpZWxkKCldKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdiA9IC0xO1xyXG4gICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGFbc29ydC5nZXRGaWVsZCgpXSA8IGJbc29ydC5nZXRGaWVsZCgpXSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHYgPSAxO1xyXG4gICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKHYgIT0gMCkge1xyXG4gICAgICAgICAgICAgICAgICByZXR1cm4gdjtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHJldHVybiB2O1xyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5wYWdpbmcuc2V0RGF0YVNpemUocHJlcGFyZWREYXRhLmxlbmd0aCk7XHJcblxyXG4gICAgdGhpcy5ncm91cGVkRGF0YVNldCA9IHByZXBhcmVkRGF0YTtcclxuXHJcbiAgICBpZiAodGhpcy5wYWdpbmcuZ2V0UGFnZVNpemUoKSA+IDApIHtcclxuICAgICAgdGhpcy52aWV3RGF0YSA9IFtdO1xyXG4gICAgICBmb3IgKHZhciBpID0gdGhpcy5wYWdpbmcuZ2V0UGFnZSgpICogdGhpcy5wYWdpbmcuZ2V0UGFnZVNpemUoKTsgaSA8IE1hdGgubWluKHByZXBhcmVkRGF0YS5sZW5ndGgsICh0aGlzLnBhZ2luZy5nZXRQYWdlKCkgKyAxKSAqIHRoaXMucGFnaW5nLmdldFBhZ2VTaXplKCkpOyBpKyspIHtcclxuICAgICAgICB0aGlzLnZpZXdEYXRhLnB1c2gocHJlcGFyZWREYXRhW2ldKTtcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5wYWdpbmcuc2V0RGF0YVNpemUocHJlcGFyZWREYXRhLmxlbmd0aCk7XHJcbiAgICAgIHRoaXMudmlld0RhdGEgPSBwcmVwYXJlZERhdGE7XHJcbiAgICB9XHJcblxyXG4gICAgZm9yIChsZXQgcm93R3JvdXAgb2YgdGhpcy52aWV3RGF0YSkge1xyXG4gICAgICByb3dHcm91cC5yZ0NvdW50ID0gcm93R3JvdXAucmdSb3dzLmxlbmd0aDtcclxuICAgIH1cclxuICB9XHJcblxyXG5cclxuICAvKipcclxuICAgKiBSZXR1cm4gdHJ1ZSBpZiB0aGUgc29ydCBmaWVsZCBpcyBhIGdyb3VwaW5nIGZpZWxkLlxyXG4gICAqXHJcbiAgICogQHBhcmFtIHNvcnRGaWVsZFxyXG4gICAqL1xyXG4gIGlzU29ydEZpZWxkR3JvdXBGaWVsZChzb3J0RmllbGQ6IHN0cmluZyk6IGJvb2xlYW4ge1xyXG4gICAgaWYgKCF0aGlzLmdyb3VwaW5nIHx8ICF0aGlzLmdyb3VwaW5nLmZpZWxkcyB8fCB0aGlzLmdyb3VwaW5nLmZpZWxkcy5sZW5ndGggPT09IDApIHtcclxuICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG5cclxuICAgIGZvciAobGV0IGdyb3VwRmllbGQgb2YgdGhpcy5ncm91cGluZy5maWVsZHMpIHtcclxuICAgICAgaWYgKHNvcnRGaWVsZCA9PT0gZ3JvdXBGaWVsZCkge1xyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBTZWxlY3QgYSBncm91cCBvZiBkYXRhLiAgQ2FsbCB0aGUgZmlyc3QgcGFnZSBvZiBkYXRhIHVwb24gZXhwYW5kaW5nLiAgSWYgYWxyZWFkeSBleHBhbmRlZCwgY2xvc2UgYW5kIGdvIGJhY2sgdG8gdGhlXHJcbiAgICogbGlzdCBvZiBncm91cHMuXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge1Jvd0dyb3VwfSByb3dHcm91cFxyXG4gICAqL1xyXG4gIHNldEdyb3VwRXhwYW5kZWQoZXZlbnQ6IE1vdXNlRXZlbnQsIHJvd0dyb3VwOiBSb3dHcm91cCkge1xyXG4gICAgaWYgKGlzRGV2TW9kZSgpKSB7XHJcbiAgICAgIGNvbnNvbGUuZGVidWcoXCJzZXRHcm91cEV4cGFuZGVkOiBcIiArIHJvd0dyb3VwLnJnRXhwYW5kZWQpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLmV4dGVybmFsRGF0YUNhbGwgJiYgIXJvd0dyb3VwLnJnRXhwYW5kZWQpIHtcclxuICAgICAgaWYgKCF0aGlzLmJ1c3kpIHtcclxuICAgICAgICB0aGlzLmJ1c3kgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMubG9hZGluZ1N1YmplY3RzWzBdLm5leHQodHJ1ZSk7XHJcblxyXG4gICAgICAgIGxldCBncm91cEZpbHRlcnM6IEhjaUZpbHRlckR0b1tdID0gdGhpcy5maWx0ZXJzLnNsaWNlKCk7XHJcbiAgICAgICAgZm9yIChsZXQgZ3JvdXBGaWVsZCBvZiB0aGlzLmdyb3VwaW5nLmZpZWxkcykge1xyXG4gICAgICAgICAgZ3JvdXBGaWx0ZXJzLnB1c2gobmV3IEhjaUZpbHRlckR0byhncm91cEZpZWxkLCBcInN0cmluZ1wiLCByb3dHcm91cFtncm91cEZpZWxkXSwgdW5kZWZpbmVkLCBcIkVcIiwgdHJ1ZSkpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcm93R3JvdXAucmdQYWdlTWluID0gMDtcclxuICAgICAgICByb3dHcm91cC5yZ1BhZ2VNYXggPSAwO1xyXG5cclxuICAgICAgICB0aGlzLmV4dGVybmFsRGF0YUNhbGwobmV3IEhjaUdyaWREdG8oZ3JvdXBGaWx0ZXJzLCB0aGlzLnNvcnRzLCBuZXcgSGNpUGFnaW5nRHRvKDAsIHRoaXMuZ3JvdXBQYWdlU2l6ZSksIG5ldyBIY2lHcm91cGluZ0R0byh0aGlzLmdyb3VwaW5nLmZpZWxkcywgZmFsc2UpKSlcclxuICAgICAgICAgIC5waXBlKGZpbmFsaXplKCgpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5sb2FkaW5nU3ViamVjdHNbMF0ubmV4dChmYWxzZSk7XHJcbiAgICAgICAgICAgIHRoaXMuYnVzeSA9IGZhbHNlO1xyXG4gICAgICAgICAgfSkpXHJcbiAgICAgICAgICAuc3Vic2NyaWJlKChleHRlcm5hbERhdGE6IEhjaURhdGFEdG8pID0+IHtcclxuICAgICAgICAgICAgcm93R3JvdXAucmdSb3dzID0gZXh0ZXJuYWxEYXRhLmRhdGE7XHJcblxyXG4gICAgICAgICAgICBpZiAoIXRoaXMuaW5saW5lRXhwYW5kKSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZFJvd0dyb3VwID0gcm93R3JvdXA7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHRoaXMuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgICAgICAgfSk7XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSBpZiAoIXJvd0dyb3VwLnJnRXhwYW5kZWQpIHtcclxuICAgICAgcm93R3JvdXAucmdQYWdlTWluID0gMDtcclxuICAgICAgcm93R3JvdXAucmdQYWdlTWF4ID0gMDtcclxuICAgICAgaWYgKCF0aGlzLmlubGluZUV4cGFuZCkge1xyXG4gICAgICAgIHRoaXMuc2VsZWN0ZWRSb3dHcm91cCA9IHJvd0dyb3VwO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHJvd0dyb3VwLnJnRXhwYW5kZWQpIHtcclxuICAgICAgaWYgKHRoaXMuaW5saW5lRXhwYW5kKSB7XHJcbiAgICAgICAgbGV0IGdyb3VwU2VsZWN0ZWRQYXJlbnQ6IEhUTUxFbGVtZW50O1xyXG4gICAgICAgIGlmIChldmVudCkge1xyXG4gICAgICAgICAgZ3JvdXBTZWxlY3RlZFBhcmVudCA9IDxIVE1MRWxlbWVudD4oPEhUTUxFbGVtZW50PmV2ZW50LnRhcmdldCkuY2xvc2VzdChcIi5ncm91cC1wYXJlbnRcIik7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIGdyb3VwU2VsZWN0ZWRQYXJlbnQgPSA8SFRNTEVsZW1lbnQ+PHVua25vd24+ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQodGhpcy5nZXRSb3dHcm91cElkKHJvd0dyb3VwKSk7XHJcbiAgICAgICAgICAvL2dyb3VwU2VsZWN0ZWRQYXJlbnQuY2xpY2soKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5yZW5kZXJlci5yZW1vdmVDbGFzcyhncm91cFNlbGVjdGVkUGFyZW50LCBcImFjdGl2ZVwiKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgb2YobnVsbCkucGlwZShkZWxheSgyNTApKS5zdWJzY3JpYmUoKCkgPT4ge1xyXG4gICAgICAgIHRoaXMuc2VsZWN0ZWRSb3dHcm91cCA9IHVuZGVmaW5lZDtcclxuICAgICAgICB0aGlzLnNlbGVjdGVkUm93R3JvdXBDb250YWluZXIgPSB1bmRlZmluZWQ7XHJcbiAgICAgIH0pO1xyXG5cclxuICAgICAgaWYgKHRoaXMub25Hcm91cENsb3NlKSB7XHJcbiAgICAgICAgdGhpcy5vbkdyb3VwQ2xvc2UoKTtcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIGlmICghcm93R3JvdXAucmdFeHBhbmRlZCAmJiB0aGlzLmlubGluZUV4cGFuZCkge1xyXG4gICAgICBsZXQgZ3JvdXBTZWxlY3RlZFBhcmVudDogSFRNTEVsZW1lbnQ7XHJcbiAgICAgIGlmIChldmVudCkge1xyXG4gICAgICAgIGdyb3VwU2VsZWN0ZWRQYXJlbnQgPSA8SFRNTEVsZW1lbnQ+KDxIVE1MRWxlbWVudD5ldmVudC50YXJnZXQpLmNsb3Nlc3QoXCIuZ3JvdXAtcGFyZW50XCIpO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGdyb3VwU2VsZWN0ZWRQYXJlbnQgPSA8SFRNTEVsZW1lbnQ+PHVua25vd24+ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQodGhpcy5nZXRSb3dHcm91cElkKHJvd0dyb3VwKSk7XHJcbiAgICAgICAgLy9ncm91cFNlbGVjdGVkUGFyZW50LmNsaWNrKCk7XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5yZW5kZXJlci5hZGRDbGFzcyhncm91cFNlbGVjdGVkUGFyZW50LCBcImFjdGl2ZVwiKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoaXNEZXZNb2RlKCkgJiYgIXRoaXMuaW5saW5lRXhwYW5kKSB7XHJcbiAgICAgIGNvbnNvbGUuZGVidWcoXCJ0aGlzLnNlbGVjdGVkUm93R3JvdXBcIik7XHJcbiAgICAgIGNvbnNvbGUuZGVidWcodGhpcy5zZWxlY3RlZFJvd0dyb3VwKTtcclxuICAgIH1cclxuXHJcbiAgICByb3dHcm91cC5yZ0V4cGFuZGVkID0gIXJvd0dyb3VwLnJnRXhwYW5kZWQ7XHJcblxyXG4gICAgdGhpcy5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBBZGQgdGhlIHNjcm9sbCBsaXN0ZW5lciB0byB0aGUgZ3JvdXAgY29udGFpbmVyLlxyXG4gICAqL1xyXG4gIGFkZEdyb3VwU2Nyb2xsTGlzdGVuZXIoKTogdm9pZCB7XHJcbiAgICB0aGlzLnJlbW92ZUdyb3VwU2Nyb2xsTGlzdGVuZXIoKTtcclxuXHJcbiAgICB0aGlzLmxhc3RTY3JvbGxUb3AgPSAtMTtcclxuXHJcbiAgICBpZiAodGhpcy5zZWxlY3RlZFJvd0dyb3VwICYmIHRoaXMuc2VsZWN0ZWRSb3dHcm91cC5yZ0NvdW50ICE9PSB0aGlzLnNlbGVjdGVkUm93R3JvdXAucmdSb3dzLmxlbmd0aCkge1xyXG4gICAgICB0aGlzLnNlbGVjdGVkUm93R3JvdXBDb250YWluZXIgPSB0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5xdWVyeVNlbGVjdG9yKFwiI3NlbGVjdGVkLWdyb3VwLWNvbnRhaW5lclwiKTtcclxuICAgICAgdGhpcy5zZWxlY3RlZFJvd0dyb3VwQ29udGFpbmVyLmFkZEV2ZW50TGlzdGVuZXIoXCJzY3JvbGxcIiwgdGhpcy5vbkdyb3VwU2Nyb2xsLmJpbmQodGhpcyksIHRydWUpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUmVtb3ZlIHRoZSBzY3JvbGwgbGlzdGVuZXIgZnJvbSB0aGUgZ3JvdXAgY29udGFpbmVyLlxyXG4gICAqL1xyXG4gIHJlbW92ZUdyb3VwU2Nyb2xsTGlzdGVuZXIoKTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5zZWxlY3RlZFJvd0dyb3VwQ29udGFpbmVyKSB7XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRSb3dHcm91cENvbnRhaW5lci5yZW1vdmVFdmVudExpc3RlbmVyKFwic2Nyb2xsXCIsIHRoaXMub25Hcm91cFNjcm9sbC5iaW5kKHRoaXMpKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIExpc3RlbiBmb3IgdGhlIHNjcm9sbCBldmVudCwgZGV0ZXJtaW5lIGlmIHRoZSBzY3JvbGwgaGl0IHRoZSB0b3Agb3IgYm90dG9tIG9mIHRoZSBjb250YWluZXIuXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge0V2ZW50fSBldmVudFxyXG4gICAqL1xyXG4gIG9uR3JvdXBTY3JvbGwoZXZlbnQ6IEV2ZW50KTogdm9pZCB7XHJcbiAgICBpZiAoIXRoaXMuYnVzeSkge1xyXG4gICAgICBsZXQgbmV3U2Nyb2xsVG9wOiBudW1iZXIgPSBNYXRoLnJvdW5kKHRoaXMuc2VsZWN0ZWRSb3dHcm91cENvbnRhaW5lci5zY3JvbGxUb3ApO1xyXG4gICAgICBsZXQgc2Nyb2xsUG9zaXRpb246IG51bWJlciA9IDE7XHJcbiAgICAgIGlmIChuZXdTY3JvbGxUb3AgPT09IDAgJiYgc2Nyb2xsUG9zaXRpb24gIT09IDApIHtcclxuICAgICAgICBzY3JvbGxQb3NpdGlvbiA9IDA7XHJcbiAgICAgIH0gZWxzZSBpZiAoc2Nyb2xsUG9zaXRpb24gIT09IDIgJiYgTWF0aC5hYnModGhpcy5zZWxlY3RlZFJvd0dyb3VwQ29udGFpbmVyLnNjcm9sbEhlaWdodCAtIChuZXdTY3JvbGxUb3AgKyB0aGlzLnNlbGVjdGVkUm93R3JvdXBDb250YWluZXIub2Zmc2V0SGVpZ2h0KSkgPCAzKSB7XHJcbiAgICAgICAgc2Nyb2xsUG9zaXRpb24gPSAyO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHNjcm9sbFBvc2l0aW9uID0gMTtcclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKHRoaXMubGFzdFNjcm9sbFBvc2l0aW9uICE9PSBzY3JvbGxQb3NpdGlvbiAmJiB0aGlzLmxhc3RTY3JvbGxQb3NpdGlvbiA9PT0gMSkge1xyXG4gICAgICAgIGlmIChzY3JvbGxQb3NpdGlvbiA9PT0gMCkge1xyXG4gICAgICAgICAgdGhpcy5ncm91cFByZXZpb3VzUGFnZSgpO1xyXG4gICAgICAgIH0gZWxzZSBpZiAoc2Nyb2xsUG9zaXRpb24gPT09IDIpIHtcclxuICAgICAgICAgIHRoaXMuZ3JvdXBOZXh0UGFnZSgpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG5cclxuICAgICAgdGhpcy5sYXN0U2Nyb2xsVG9wID0gbmV3U2Nyb2xsVG9wO1xyXG4gICAgICB0aGlzLmxhc3RTY3JvbGxQb3NpdGlvbiA9IHNjcm9sbFBvc2l0aW9uO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogV2hlbiBzY3JvbGxpbmcgaGl0cyB0aGUgdG9wLCBsb2FkIHRoZSBwcmV2aW91cyBwYWdlIG9mIGdyb3VwIGRhdGEuXHJcbiAgICovXHJcbiAgZ3JvdXBQcmV2aW91c1BhZ2UoKTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5zZWxlY3RlZFJvd0dyb3VwLnJnUGFnZU1pbiA9PT0gMCkge1xyXG4gICAgICBjb25zb2xlLndhcm4oXCJGaXJzdCBwYWdlIGFscmVhZHkgbG9hZGVkLlwiKTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMucmVtb3ZlR3JvdXBTY3JvbGxMaXN0ZW5lcigpO1xyXG5cclxuICAgIGxldCBncm91cEZpbHRlcnM6IEhjaUZpbHRlckR0b1tdID0gdGhpcy5maWx0ZXJzLnNsaWNlKCk7XHJcbiAgICBmb3IgKGxldCBncm91cEZpZWxkIG9mIHRoaXMuZ3JvdXBpbmcuZmllbGRzKSB7XHJcbiAgICAgIGdyb3VwRmlsdGVycy5wdXNoKG5ldyBIY2lGaWx0ZXJEdG8oZ3JvdXBGaWVsZCwgXCJzdHJpbmdcIiwgdGhpcy5zZWxlY3RlZFJvd0dyb3VwW2dyb3VwRmllbGRdLCB1bmRlZmluZWQsIFwiRVwiLCB0cnVlKSk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKCF0aGlzLmJ1c3kpIHtcclxuICAgICAgdGhpcy5idXN5ID0gdHJ1ZTtcclxuICAgICAgdGhpcy5sb2FkaW5nU3ViamVjdHNbMF0ubmV4dCh0cnVlKTtcclxuICAgICAgdGhpcy5leHRlcm5hbERhdGFDYWxsKG5ldyBIY2lHcmlkRHRvKGdyb3VwRmlsdGVycywgdGhpcy5zb3J0cywgbmV3IEhjaVBhZ2luZ0R0byh0aGlzLnNlbGVjdGVkUm93R3JvdXAucmdQYWdlTWluIC0gMSwgdGhpcy5ncm91cFBhZ2VTaXplKSwgbmV3IEhjaUdyb3VwaW5nRHRvKHRoaXMuZ3JvdXBpbmcuZmllbGRzLCBmYWxzZSkpKVxyXG4gICAgICAgIC5waXBlKGZpbmFsaXplKCgpID0+IHtcclxuICAgICAgICAgIHRoaXMubG9hZGluZ1N1YmplY3RzWzBdLm5leHQoZmFsc2UpO1xyXG4gICAgICAgICAgdGhpcy5idXN5ID0gZmFsc2U7XHJcblxyXG4gICAgICAgICAgb2YodW5kZWZpbmVkKS5waXBlKGRlbGF5KDUwKSkuc3Vic2NyaWJlKCgpID0+IHtcclxuICAgICAgICAgICAgaWYgKHRoaXMuc2VsZWN0ZWRSb3dHcm91cENvbnRhaW5lci5zY3JvbGxUb3AgPT09IDApIHtcclxuICAgICAgICAgICAgICB0aGlzLnJlbmRlcmVyLnNldFN0eWxlKHRoaXMuc2VsZWN0ZWRSb3dHcm91cENvbnRhaW5lciwgXCJzY3JvbGxUb3BcIiwgXCIxXCIpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICB0aGlzLmFkZEdyb3VwU2Nyb2xsTGlzdGVuZXIoKTtcclxuICAgICAgICB9KSlcclxuICAgICAgICAuc3Vic2NyaWJlKChleHRlcm5hbERhdGE6IEhjaURhdGFEdG8pID0+IHtcclxuICAgICAgICAgIHRoaXMuc2VsZWN0ZWRSb3dHcm91cC5yZ1Jvd3MgPSBleHRlcm5hbERhdGEuZGF0YS5jb25jYXQodGhpcy5zZWxlY3RlZFJvd0dyb3VwLnJnUm93cyk7XHJcbiAgICAgICAgICB0aGlzLnNlbGVjdGVkUm93R3JvdXAucmdQYWdlTWluIC09IDE7XHJcblxyXG4gICAgICAgICAgaWYgKHRoaXMuZ3JvdXBDYWNoZU51bVBhZ2VzICYmIHRoaXMuc2VsZWN0ZWRSb3dHcm91cC5yZ1BhZ2VNYXggLSB0aGlzLnNlbGVjdGVkUm93R3JvdXAucmdQYWdlTWluID49IHRoaXMuZ3JvdXBDYWNoZU51bVBhZ2VzKSB7XHJcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRSb3dHcm91cC5yZ1Jvd3Muc3BsaWNlKHRoaXMuZ3JvdXBDYWNoZU51bVBhZ2VzICogdGhpcy5ncm91cFBhZ2VTaXplKTtcclxuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZFJvd0dyb3VwLnJnUGFnZU1heCAtPSAxO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogV2hlbiBzY3JvbGxpbmcgaGl0cyB0aGUgYm90dG9tLCBsb2FkIHRoZSBuZXh0IHBhZ2Ugb2YgZ3JvdXAgZGF0YS5cclxuICAgKi9cclxuICBncm91cE5leHRQYWdlKCk6IHZvaWQge1xyXG4gICAgaWYgKCh0aGlzLnNlbGVjdGVkUm93R3JvdXAucmdQYWdlTWF4ICsgMSkgKiB0aGlzLmdyb3VwUGFnZVNpemUgPj0gdGhpcy5zZWxlY3RlZFJvd0dyb3VwLnJnQ291bnQpIHtcclxuICAgICAgY29uc29sZS53YXJuKFwiQWxsIHJvd3MgYWxyZWFkeSBsb2FkZWRcIik7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLnJlbW92ZUdyb3VwU2Nyb2xsTGlzdGVuZXIoKTtcclxuXHJcbiAgICBsZXQgZ3JvdXBGaWx0ZXJzOiBIY2lGaWx0ZXJEdG9bXSA9IHRoaXMuZmlsdGVycy5zbGljZSgpO1xyXG4gICAgZm9yIChsZXQgZ3JvdXBGaWVsZCBvZiB0aGlzLmdyb3VwaW5nLmZpZWxkcykge1xyXG4gICAgICBncm91cEZpbHRlcnMucHVzaChuZXcgSGNpRmlsdGVyRHRvKGdyb3VwRmllbGQsIFwic3RyaW5nXCIsIHRoaXMuc2VsZWN0ZWRSb3dHcm91cFtncm91cEZpZWxkXSwgdW5kZWZpbmVkLCBcIkVcIiwgdHJ1ZSkpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICghdGhpcy5idXN5KSB7XHJcbiAgICAgIHRoaXMuYnVzeSA9IHRydWU7XHJcbiAgICAgIHRoaXMubG9hZGluZ1N1YmplY3RzWzBdLm5leHQodHJ1ZSk7XHJcbiAgICAgIHRoaXMuZXh0ZXJuYWxEYXRhQ2FsbChuZXcgSGNpR3JpZER0byhncm91cEZpbHRlcnMsIHRoaXMuc29ydHMsIG5ldyBIY2lQYWdpbmdEdG8odGhpcy5zZWxlY3RlZFJvd0dyb3VwLnJnUGFnZU1heCArIDEsIHRoaXMuZ3JvdXBQYWdlU2l6ZSksIG5ldyBIY2lHcm91cGluZ0R0byh0aGlzLmdyb3VwaW5nLmZpZWxkcywgZmFsc2UpKSlcclxuICAgICAgICAucGlwZShmaW5hbGl6ZSgoKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLmxvYWRpbmdTdWJqZWN0c1swXS5uZXh0KGZhbHNlKTtcclxuICAgICAgICAgIHRoaXMuYnVzeSA9IGZhbHNlO1xyXG5cclxuICAgICAgICAgIG9mKHVuZGVmaW5lZCkucGlwZShkZWxheSg1MCkpLnN1YnNjcmliZSgoKSA9PiB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLnNlbGVjdGVkUm93R3JvdXBDb250YWluZXIuc2Nyb2xsVG9wID09PSAwKSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5yZW5kZXJlci5zZXRTdHlsZSh0aGlzLnNlbGVjdGVkUm93R3JvdXBDb250YWluZXIsIFwic2Nyb2xsVG9wXCIsIFwiMVwiKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgdGhpcy5hZGRHcm91cFNjcm9sbExpc3RlbmVyKCk7XHJcbiAgICAgICAgfSkpXHJcbiAgICAgICAgLnN1YnNjcmliZSgoZXh0ZXJuYWxEYXRhOiBIY2lEYXRhRHRvKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLnNlbGVjdGVkUm93R3JvdXAucmdSb3dzID0gdGhpcy5zZWxlY3RlZFJvd0dyb3VwLnJnUm93cy5jb25jYXQoZXh0ZXJuYWxEYXRhLmRhdGEpO1xyXG4gICAgICAgICAgdGhpcy5zZWxlY3RlZFJvd0dyb3VwLnJnUGFnZU1heCArPSAxO1xyXG5cclxuICAgICAgICAgIGlmICh0aGlzLmdyb3VwQ2FjaGVOdW1QYWdlcyAmJiB0aGlzLnNlbGVjdGVkUm93R3JvdXAucmdQYWdlTWF4IC0gdGhpcy5zZWxlY3RlZFJvd0dyb3VwLnJnUGFnZU1pbiA+PSB0aGlzLmdyb3VwQ2FjaGVOdW1QYWdlcykge1xyXG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkUm93R3JvdXAucmdSb3dzLnNwbGljZSgwLCB0aGlzLmdyb3VwUGFnZVNpemUpO1xyXG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkUm93R3JvdXAucmdQYWdlTWluICs9IDE7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBHbyB0byB0aGUgZmlyc3QgcGFnZS5cclxuICAgKi9cclxuICBwdWJsaWMgZG9QYWdlRmlyc3QoKTogdm9pZCB7XHJcbiAgICBpZiAoIXRoaXMuYnVzeSkge1xyXG4gICAgICB0aGlzLnBhZ2luZy5zZXRQYWdlKDApO1xyXG4gICAgICB0aGlzLnBhZ2luZ1N1YmplY3QubmV4dCh0aGlzLnBhZ2luZyk7XHJcbiAgICAgIHRoaXMuY2hlY2tBY3RpdmVSb3dJZCgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogR28gdG8gdGhlIHByZXZpb3VzIHBhZ2UuXHJcbiAgICovXHJcbiAgcHVibGljIGRvUGFnZVByZXZpb3VzKCk6IHZvaWQge1xyXG4gICAgaWYgKCF0aGlzLmJ1c3kpIHtcclxuICAgICAgaWYgKHRoaXMucGFnaW5nLmdldFBhZ2UoKSA+IDApIHtcclxuICAgICAgICB0aGlzLnBhZ2luZy5zZXRQYWdlKHRoaXMucGFnaW5nLmdldFBhZ2UoKSAtIDEpO1xyXG4gICAgICAgIHRoaXMucGFnaW5nU3ViamVjdC5uZXh0KHRoaXMucGFnaW5nKTtcclxuICAgICAgICB0aGlzLmNoZWNrQWN0aXZlUm93SWQoKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogR28gdG8gdGhlIG5leHQgcGFnZS5cclxuICAgKi9cclxuICBwdWJsaWMgZG9QYWdlTmV4dCgpOiB2b2lkIHtcclxuICAgIGlmICghdGhpcy5idXN5KSB7XHJcbiAgICAgIGlmICh0aGlzLnBhZ2luZy5nZXRQYWdlKCkgPCB0aGlzLnBhZ2luZy5nZXROdW1QYWdlcygpIC0gMSkge1xyXG4gICAgICAgIHRoaXMucGFnaW5nLnNldFBhZ2UodGhpcy5wYWdpbmcuZ2V0UGFnZSgpICsgMSk7XHJcbiAgICAgICAgdGhpcy5wYWdpbmdTdWJqZWN0Lm5leHQodGhpcy5wYWdpbmcpO1xyXG4gICAgICAgIHRoaXMuY2hlY2tBY3RpdmVSb3dJZCgpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBHbyB0byB0aGUgbGFzdCBwYWdlLlxyXG4gICAqL1xyXG4gIHB1YmxpYyBkb1BhZ2VMYXN0KCk6IHZvaWQge1xyXG4gICAgaWYgKCF0aGlzLmJ1c3kpIHtcclxuICAgICAgdGhpcy5wYWdpbmcuc2V0UGFnZSh0aGlzLnBhZ2luZy5nZXROdW1QYWdlcygpIC0gMSk7XHJcbiAgICAgIHRoaXMucGFnaW5nU3ViamVjdC5uZXh0KHRoaXMucGFnaW5nKTtcclxuICAgICAgdGhpcy5jaGVja0FjdGl2ZVJvd0lkKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBBZnRlciBwYWdlIHR1cm5zLCBjaGVjayBpZiB0aGUgcGFnZSBoYXMgdGhlIHJvdyB0aGF0IG5lZWQgdG8gYmUgaGlnaGxpZ2h0ZWRcclxuICAgKi9cclxuICBwcml2YXRlIGNoZWNrQWN0aXZlUm93SWQoKTogdm9pZCB7XHJcbiAgICAvL2lmIGEgcm93IGlzIHNlbGVjdGVkLCBhbmQgcm93SWQgZmllbGQgaXMgc3BlY2lmaWVkICh1c3VhbGx5IGNvbmZpZ3VyZWQgYnkgY29uZmlnKVxyXG4gICAgaWYgKHRoaXMuc2VsZWN0ZWRSb3cgJiYgdGhpcy5yb3dJZCkge1xyXG4gICAgICBsZXQgaWQgPSB0aGlzLnNlbGVjdGVkUm93W3RoaXMucm93SWRdO1xyXG4gICAgICBpZiAoaWQpIHtcclxuICAgICAgICB0aGlzLmFjdGl2YXRlUm93QnlJZChpZCk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIENvbmNhdCBncm91cCBieSBmaWVsZHMgdG8gY29tbWEgZGVsaW1pdGVkIHdvcmRzLlxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtSb3dHcm91cH0gcm93R3JvdXBcclxuICAgKiBAcmV0dXJucyB7c3RyaW5nfVxyXG4gICAqL1xyXG4gIGdldEdyb3VwRGlzcGxheShyb3dHcm91cDogUm93R3JvdXApOiBzdHJpbmcge1xyXG4gICAgbGV0IGRpc3BsYXk6IHN0cmluZztcclxuXHJcbiAgICBpZiAodGhpcy5ncm91cERpc3BsYXkpIHtcclxuICAgICAgZGlzcGxheSA9IHRoaXMuZ3JvdXBEaXNwbGF5O1xyXG4gICAgICBmb3IgKGxldCBmaWVsZCBvZiB0aGlzLmdyb3VwaW5nLmZpZWxkcykge1xyXG4gICAgICAgIGRpc3BsYXkgPSBkaXNwbGF5LnJlcGxhY2UoZmllbGQsIHJvd0dyb3VwW2ZpZWxkXSk7XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGZvciAobGV0IGZpZWxkIG9mIHRoaXMuZ3JvdXBpbmcuZmllbGRzKSB7XHJcbiAgICAgICAgZGlzcGxheSA9IChkaXNwbGF5KSA/IGRpc3BsYXkgKyBcIiwgXCIgKyByb3dHcm91cFtmaWVsZF0gOiByb3dHcm91cFtmaWVsZF07XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gZGlzcGxheTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFNldHMgdGhlIHNlbGVjdGVkUm93R3JvdXBDb250YWluZXIgZWxlbWVudC5cclxuICAgKlxyXG4gICAqIEBwYXJhbSB7RWxlbWVudFJlZn0gc2VsZWN0ZWRSb3dHcm91cENvbnRhaW5lclxyXG4gICAqL1xyXG4gIEBWaWV3Q2hpbGQoXCJzZWxlY3RlZFJvd0dyb3VwQ29udGFpbmVyXCIsIHtcclxuICAgIHJlYWQ6IEVsZW1lbnRSZWYsXHJcbiAgICBzdGF0aWM6IGZhbHNlXHJcbiAgfSkgc2V0IHNlbGVjdGVkUm93R3JvdXBDb250YWluZXJTZXR0ZXIoc2VsZWN0ZWRSb3dHcm91cENvbnRhaW5lcjogRWxlbWVudFJlZikge1xyXG4gICAgaWYgKHRoaXMuc2VsZWN0ZWRSb3dHcm91cENvbnRhaW5lciAmJiB0aGlzLnNldFNjcm9sbFRvcCkge1xyXG4gICAgICB0aGlzLnNlbGVjdGVkUm93R3JvdXBDb250YWluZXIuc2Nyb2xsVG9wID0gKDxIVE1MRWxlbWVudD50aGlzLnNlbGVjdGVkUm93R3JvdXBDb250YWluZXIucXVlcnlTZWxlY3RvcihcIiNpbm5lclJvd0dyb3VwQ29udGFpbmVyXCIpKS5vZmZzZXRIZWlnaHQ7XHJcbiAgICAgIHRoaXMuc2V0U2Nyb2xsVG9wID0gZmFsc2U7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKCF0aGlzLnNlbGVjdGVkUm93R3JvdXBDb250YWluZXIgJiYgc2VsZWN0ZWRSb3dHcm91cENvbnRhaW5lcikge1xyXG4gICAgICB0aGlzLnNlbGVjdGVkUm93R3JvdXBDb250YWluZXIgPSBzZWxlY3RlZFJvd0dyb3VwQ29udGFpbmVyLm5hdGl2ZUVsZW1lbnQ7XHJcblxyXG4gICAgICBsZXQgZ3JvdXBTZWxlY3RlZFBhcmVudDogSFRNTEVsZW1lbnQgPSA8SFRNTEVsZW1lbnQ+dGhpcy5zZWxlY3RlZFJvd0dyb3VwQ29udGFpbmVyLmNsb3Nlc3QoXCIuZ3JvdXAtc2VsZWN0ZWQtcGFyZW50XCIpO1xyXG4gICAgICB0aGlzLnJlbmRlcmVyLnNldFN0eWxlKGdyb3VwU2VsZWN0ZWRQYXJlbnQsIFwiZGlzcGxheVwiLCBcImZsZXhcIik7XHJcblxyXG4gICAgICBvZihudWxsKS5waXBlKGRlbGF5KDUwKSkuc3Vic2NyaWJlKCgpID0+IHtcclxuICAgICAgICB0aGlzLnJlbmRlcmVyLmFkZENsYXNzKGdyb3VwU2VsZWN0ZWRQYXJlbnQsIFwiYWN0aXZlXCIpO1xyXG4gICAgICAgIHRoaXMuaW5uZXJSb3dHcm91cENvbnRhaW5lciA9IHRoaXMuc2VsZWN0ZWRSb3dHcm91cENvbnRhaW5lci5xdWVyeVNlbGVjdG9yKFwiI2lubmVyUm93R3JvdXBDb250YWluZXJcIik7XHJcbiAgICAgICAgdGhpcy5yZW5kZXJlci5zZXRTdHlsZSh0aGlzLnNlbGVjdGVkUm93R3JvdXBDb250YWluZXIsIFwiaGVpZ2h0XCIsIHRoaXMuaW5uZXJSb3dHcm91cENvbnRhaW5lci5vZmZzZXRIZWlnaHQgKyBcInB4XCIpO1xyXG4gICAgICAgIHRoaXMucmVuZGVyZXIuc2V0U3R5bGUodGhpcy5pbm5lclJvd0dyb3VwQ29udGFpbmVyLCBcIm1pbi1oZWlnaHRcIiwgKHRoaXMuaW5uZXJSb3dHcm91cENvbnRhaW5lci5vZmZzZXRIZWlnaHQgKyAzMCkgKyBcInB4XCIpO1xyXG4gICAgICAgIHRoaXMucmVuZGVyZXIuc2V0U3R5bGUodGhpcy5zZWxlY3RlZFJvd0dyb3VwQ29udGFpbmVyLCBcInNjcm9sbFRvcFwiLCBcIjFcIik7XHJcblxyXG4gICAgICAgIHRoaXMuYWRkR3JvdXBTY3JvbGxMaXN0ZW5lcigpO1xyXG4gICAgICB9KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEFsbG93IGEgY3VzdG9tIHJvdyBjbGljayBmdW5jdGlvbiB0byBjb250cm9sIGRlc2VsZWN0aW9uLlxyXG4gICAqL1xyXG4gIGRlc2VsZWN0QWxsUm93cygpOiB2b2lkIHtcclxuICAgIGxldCBlczogSFRNTEVsZW1lbnRbXSA9IHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoXCIucm93LXBhcmVudFwiKTtcclxuICAgIGZvciAobGV0IGUgb2YgZXMpIHtcclxuICAgICAgdGhpcy5yZW5kZXJlci5yZW1vdmVDbGFzcyhlLCBcImFjdGl2ZVwiKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEFsbG93IGEgY3VzdG9tIGdyb3VwIGNsaWNrIGZ1bmN0aW9uIHRvIGNvbnRyb2wgZGVzZWxlY3Rpb24uXHJcbiAgICovXHJcbiAgZGVzZWxlY3RBbGxHcm91cHMoKTogdm9pZCB7XHJcbiAgICBsZXQgZXM6IEhUTUxFbGVtZW50W10gPSB0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5xdWVyeVNlbGVjdG9yQWxsKFwiLmdyb3VwLXBhcmVudFwiKTtcclxuICAgIGZvciAobGV0IGUgb2YgZXMpIHtcclxuICAgICAgdGhpcy5yZW5kZXJlci5yZW1vdmVDbGFzcyhlLCBcImFjdGl2ZVwiKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEFsbG93IGEgY3VzdG9tIHJvdyBjbGljayBmdW5jdGlvbiB0byBzZWxlY3QgYSByb3cuXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge3N0cmluZ30gaWRcclxuICAgKi9cclxuICBhY3RpdmF0ZVJvd0J5SWQoaWQ6IHN0cmluZyk6IHZvaWQge1xyXG4gICAgbGV0IGU6IEhUTUxFbGVtZW50ID0gdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3RvcihcIiNyb3ctXCIgKyBpZCk7XHJcbiAgICBpZiAoZSkge1xyXG4gICAgICB0aGlzLnJlbmRlcmVyLmFkZENsYXNzKGUsIFwiYWN0aXZlXCIpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgYWN0aXZhdGVHcm91cEJ5SWQoaWQ6IHN0cmluZyk6IHZvaWQge1xyXG4gICAgbGV0IGU6IEhUTUxFbGVtZW50ID0gdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3RvcihcIiNyb3ctZ3JvdXAtXCIgKyBpZCk7XHJcbiAgICBpZiAoZSkge1xyXG4gICAgICB0aGlzLnJlbmRlcmVyLmFkZENsYXNzKGUsIFwiYWN0aXZlXCIpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogVGhpcyBmdW5jdGlvbiB3aWxsIHJldHVybiB3aGV0aGVyIGEgcGFydGljdWxhciBncm91cCBpcyBleHBhbmRlZCBvciBjb2xsYXBzZWRcclxuICAgKiBAcGFyYW0gcm93R3JvdXBcclxuICAgKi9cclxuICBnZXRHcm91cEV4cGFuZGVkSW5kaWNhdG9yKHJvd0dyb3VwOiBSb3dHcm91cCkge1xyXG4gICAgaWYgKHJvd0dyb3VwLnJnRXhwYW5kZWQgPT09IHRydWUpIHtcclxuICAgICAgcmV0dXJuIFwibWludXNcIjtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHJldHVybiBcInBsdXNcIjtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8vVE9EbyA6IEhhbmRsZSB0aGUgY2FzZSB3aGVyZSB0aGUgdXNlciB1c2VzIGEgY3VzdG9tIGdyb3VwVGVtcGxhdGVcclxuICAvKipcclxuICAgKiBUaGlzIGZ1bmN0aW9uIHdpbGwgY2F1c2UgU2VhcmNoTGlzdENvbXBvbmVudCB0byBuYXZpZ2F0ZSB0byBhIHBhZ2UgYW5kIGhpZ2hsaWdodCB0aGUgZ2l2ZW4gZ3JvdXAgaXRlbSwgb3JcclxuICAgKiB0aGUgcm93IChpbi1jYXNlIG9mIG5vbi1ncm91cGVkIGxpc3QpXHJcbiAgICogVGhpc1xyXG4gICAqIEBwYXJhbSBncm91cElkIDogVGhpcyBzaG91bGQgY29udGFpbiBhIHN0cmluZyB0byB1bmlxdWVseSBpZGVudGlmeSBhIHBhcnRpY3VsYXIgZ3JvdXAtZGlzcGxheVxyXG4gICAqIEBwYXJhbSByb3dJZCA6IFRoaXMgaXMgdGhlIGFjdHVhbCByb3dJZCBmb3IgdGhlIHJvdyB0byBiZSBzZWxlY3RlZC5cclxuICAgKi9cclxuICBuYXZpZ2F0ZVRvUGFnZUNvbnRhaW5pbmdFbGVtZW50KGdyb3VwSWQ6IHN0cmluZywgcm93SWQ6IHN0cmluZykge1xyXG5cclxuICAgIC8vSW50cm9kdWNpbmcgdGhlIGFkZGl0aW9uYWwgY2hlY2sgYmVsb3cgdG8gYWRkcmVzcyBDQ1JVSS0xMTYzLlxyXG4gICAgaWYgKCF0aGlzLmJvdW5kRGF0YSB8fCB0aGlzLmJvdW5kRGF0YS5sZW5ndGggPT09IDApIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgLy8gQ2hlY2sgaWYgZ3JvdXBlZFxyXG4gICAgbGV0IHJvd0dyb3VwZWQ6IGJvb2xlYW4gPSB0aGlzLmdyb3VwaW5nLmZpZWxkcyAmJiB0aGlzLmdyb3VwaW5nLmZpZWxkcy5sZW5ndGggPiAwO1xyXG5cclxuICAgIGlmIChyb3dHcm91cGVkKSB7XHJcbiAgICAgIHRoaXMuZ3JvdXBlZERhdGFTZXQuZm9yRWFjaCgocm93R3JvdXAsIGluZGV4KSA9PiB7XHJcbiAgICAgICAgbGV0IGdyb3VwRGlzcGxheSA9IHRoaXMuZ2V0R3JvdXBEaXNwbGF5KHJvd0dyb3VwKTtcclxuICAgICAgICBpZiAoZ3JvdXBEaXNwbGF5LmluY2x1ZGVzKGdyb3VwSWQpKSB7XHJcbiAgICAgICAgICAvL1NldCB0aGUgcGFnZSB0byB0aGUgaW5kZXhcclxuICAgICAgICAgIGlmICghdGhpcy5idXN5KSB7XHJcbiAgICAgICAgICAgIGxldCBwYWdlID0gTWF0aC5mbG9vcihpbmRleCAvIHRoaXMucGFnaW5nLmdldFBhZ2VTaXplKCkpO1xyXG4gICAgICAgICAgICBpZiAodGhpcy5wYWdpbmcuZ2V0TnVtUGFnZXMoKSAtIDEgPj0gcGFnZSkge1xyXG4gICAgICAgICAgICAgIHRoaXMucGFnaW5nLnNldFBhZ2UocGFnZSk7XHJcbiAgICAgICAgICAgICAgdGhpcy5wYWdpbmdTdWJqZWN0Lm5leHQodGhpcy5wYWdpbmcpO1xyXG4gICAgICAgICAgICAgIC8vdGhpcy5kZWZhdWx0R3JvdXBDbGljayhudWxsLCB0aGlzLCByb3dHcm91cCk7XHJcbiAgICAgICAgICAgICAgbGV0IGdyb3VwU2VsZWN0ZWRQYXJlbnQgPSA8SFRNTEVsZW1lbnQ+PHVua25vd24+ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQodGhpcy5nZXRSb3dHcm91cElkKHJvd0dyb3VwKSk7XHJcbiAgICAgICAgICAgICAgZ3JvdXBTZWxlY3RlZFBhcmVudC5jbGljaygpO1xyXG4gICAgICAgICAgICAgIHRoaXMuZGVzZWxlY3RBbGxSb3dzKCk7XHJcbiAgICAgICAgICAgICAgdGhpcy5hY3RpdmF0ZVJvd0J5SWQocm93SWQucmVwbGFjZShcInJvdy1cIiwgXCJcIikpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuYm91bmREYXRhLmZvckVhY2goKHJvdywgaW5kZXgpID0+IHtcclxuICAgICAgICBpZiAodGhpcy5nZXRSb3dJZChyb3cpID09PSByb3dJZCkge1xyXG4gICAgICAgICAgaWYgKCF0aGlzLmJ1c3kpIHtcclxuICAgICAgICAgICAgbGV0IHBhZ2UgPSBNYXRoLmZsb29yKGluZGV4IC8gdGhpcy5wYWdpbmcuZ2V0UGFnZVNpemUoKSk7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLnBhZ2luZy5nZXROdW1QYWdlcygpIC0gMSA+PSBwYWdlKSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5wYWdpbmcuc2V0UGFnZShwYWdlKTtcclxuICAgICAgICAgICAgICB0aGlzLnBhZ2luZ1N1YmplY3QubmV4dCh0aGlzLnBhZ2luZyk7XHJcbiAgICAgICAgICAgICAgdGhpcy5hY3RpdmF0ZVJvd0J5SWQocm93SWQucmVwbGFjZShcInJvdy1cIiwgXCJcIikpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgc2V0UmVzdWx0TWVzc2FnZShkYXRhOiBPYmplY3RbXSkge1xyXG4gICAgaWYgKHRoaXMuc2hvd1Jlc3VsdHNDb3VudCAmJiBkYXRhICYmIGRhdGEubGVuZ3RoID4gMCkge1xyXG4gICAgICB0aGlzLnNlYXJjaFJlc3VsdE1lc3NhZ2UgPSBkYXRhLmxlbmd0aCArIFwiIHJlc3VsdChzKVwiO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5zZWFyY2hSZXN1bHRNZXNzYWdlID0gXCJcIjtcclxuICAgIH1cclxuICB9XHJcbn1cclxuIl19