@mediusinc/mng-commons 0.2.20 → 0.2.23

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 (47) hide show
  1. package/assets/i18n/en.json +13 -12
  2. package/assets/i18n/sl.json +13 -12
  3. package/esm2020/lib/api/models/query-param.model.mjs +3 -3
  4. package/esm2020/lib/api/utils/object-serializer.util.mjs +7 -2
  5. package/esm2020/lib/components/action/action.component.mjs +3 -3
  6. package/esm2020/lib/components/action/editor/action-editor.component.mjs +2 -2
  7. package/esm2020/lib/components/form/dropdown/dropdown.component.mjs +66 -15
  8. package/esm2020/lib/components/form/formly/fields/formly-field-dropdown/formly-field-dropdown.component.mjs +3 -3
  9. package/esm2020/lib/components/form/formly/fields/formly-field-lookup-dialog/formly-field-lookup-dialog.component.mjs +1 -1
  10. package/esm2020/lib/components/form/formly/fields/formly-field-table-dialog-form/formly-field-table-dialog-form.component.mjs +57 -21
  11. package/esm2020/lib/components/form/formly/fields/formly-field-table-dialog-multiselect/formly-field-table-dialog-multiselect.component.mjs +1 -1
  12. package/esm2020/lib/components/tableview/route/tableview-route.component.mjs +2 -2
  13. package/esm2020/lib/components/tableview/table/column-filter/column-filter.component.mjs +16 -3
  14. package/esm2020/lib/components/tableview/table/column-value/column-value.component.mjs +3 -3
  15. package/esm2020/lib/components/tableview/table/table.component.mjs +7 -3
  16. package/esm2020/lib/components/tableview/tableview.component.mjs +3 -3
  17. package/esm2020/lib/descriptors/action.descriptor.mjs +6 -1
  18. package/esm2020/lib/descriptors/editor.descriptor.mjs +74 -16
  19. package/esm2020/lib/descriptors/table.descriptor.mjs +31 -6
  20. package/esm2020/lib/descriptors/tableview.descriptor.mjs +7 -6
  21. package/esm2020/lib/models/enum.model.mjs +1 -1
  22. package/esm2020/lib/pipes/boolean.pipe.mjs +8 -3
  23. package/esm2020/lib/router/route-builder.mjs +31 -25
  24. package/esm2020/lib/services/action-executor.service.mjs +4 -3
  25. package/esm2020/lib/services/commons.service.mjs +1 -2
  26. package/esm2020/lib/utils/model.util.mjs +9 -7
  27. package/fesm2015/mediusinc-mng-commons.mjs +332 -123
  28. package/fesm2015/mediusinc-mng-commons.mjs.map +1 -1
  29. package/fesm2020/mediusinc-mng-commons.mjs +332 -123
  30. package/fesm2020/mediusinc-mng-commons.mjs.map +1 -1
  31. package/lib/components/form/dropdown/dropdown.component.d.ts +10 -4
  32. package/lib/components/form/formly/fields/formly-field-table-dialog-form/formly-field-table-dialog-form.component.d.ts +8 -2
  33. package/lib/components/tableview/table/column-filter/column-filter.component.d.ts +1 -0
  34. package/lib/components/tableview/table/table.component.d.ts +2 -1
  35. package/lib/descriptors/action.descriptor.d.ts +2 -1
  36. package/lib/descriptors/editor.descriptor.d.ts +32 -9
  37. package/lib/descriptors/table.descriptor.d.ts +11 -3
  38. package/lib/descriptors/tableview.descriptor.d.ts +1 -1
  39. package/lib/models/enum.model.d.ts +1 -0
  40. package/lib/pipes/boolean.pipe.d.ts +1 -1
  41. package/lib/router/route-builder.d.ts +2 -0
  42. package/lib/services/action-executor.service.d.ts +3 -2
  43. package/lib/utils/model.util.d.ts +1 -1
  44. package/package.json +1 -1
  45. package/scss/mng-overrides/_layout_dialog.scss +0 -7
  46. package/scss/mng-overrides/_theme_dialog.scss +3 -1
  47. package/scss/mng-overrides/_theme_tableview.scss +10 -10
@@ -12,25 +12,8 @@ export class RoutesBuilder {
12
12
  return new RoutesBuilder();
13
13
  }
14
14
  static createWithLayout(layoutComponent = MngMainLayoutComponent, topbarComponent, breadcrumbComponent, menuComponent, footerComponent) {
15
- const layoutRoute = RouteBuilder.create('', layoutComponent);
16
- if (topbarComponent || breadcrumbComponent || menuComponent || footerComponent) {
17
- const dataBuilder = RouteDataBuilder.create();
18
- if (topbarComponent) {
19
- dataBuilder.withTopbarComponent(topbarComponent);
20
- }
21
- if (breadcrumbComponent) {
22
- dataBuilder.withBreadcrumbComponent(breadcrumbComponent);
23
- }
24
- if (menuComponent) {
25
- dataBuilder.withMenuComponent(menuComponent);
26
- }
27
- if (footerComponent) {
28
- dataBuilder.withFooterComponent(footerComponent);
29
- }
30
- layoutRoute.withDataBuilder(dataBuilder);
31
- }
32
- const routesBuilder = new RoutesBuilder(layoutRoute);
33
- return routesBuilder;
15
+ const layoutRoute = RouteBuilder.createLayoutRoute('', layoutComponent, topbarComponent, breadcrumbComponent, menuComponent, footerComponent);
16
+ return new RoutesBuilder(layoutRoute);
34
17
  }
35
18
  addAngularRoute(route) {
36
19
  return this.addRouteBuilder(RouteBuilder.createFromRoute(route));
@@ -39,11 +22,7 @@ export class RoutesBuilder {
39
22
  return this.addRouteBuilder(RouteBuilder.createRedirect(path, redirectTo, pathMatch));
40
23
  }
41
24
  addLazyRoute(path, loadChildren, canLoad) {
42
- const route = { path: path, loadChildren: loadChildren };
43
- if (canLoad?.length) {
44
- route.canLoad = canLoad;
45
- }
46
- return this.addRouteBuilder(RouteBuilder.createFromRoute(route));
25
+ return this.addRouteBuilder(RouteBuilder.createLazyRoute(path, loadChildren, canLoad));
47
26
  }
48
27
  addRoute(path, component) {
49
28
  return this.addRouteBuilder(RouteBuilder.create(path, component));
@@ -116,9 +95,36 @@ export class RouteBuilder {
116
95
  pathMatch: pathMatch
117
96
  });
118
97
  }
98
+ static createLazyRoute(path, loadChildren, canLoad) {
99
+ const route = { path: path, loadChildren: loadChildren };
100
+ if (canLoad?.length) {
101
+ route.canLoad = canLoad;
102
+ }
103
+ return new RouteBuilder(route);
104
+ }
119
105
  static createFromRoute(route) {
120
106
  return new RouteBuilder(route);
121
107
  }
108
+ static createLayoutRoute(path, layoutComponent = MngMainLayoutComponent, topbarComponent, breadcrumbComponent, menuComponent, footerComponent) {
109
+ const layoutRoute = RouteBuilder.create(path, layoutComponent);
110
+ if (topbarComponent || breadcrumbComponent || menuComponent || footerComponent) {
111
+ const dataBuilder = RouteDataBuilder.create();
112
+ if (topbarComponent) {
113
+ dataBuilder.withTopbarComponent(topbarComponent);
114
+ }
115
+ if (breadcrumbComponent) {
116
+ dataBuilder.withBreadcrumbComponent(breadcrumbComponent);
117
+ }
118
+ if (menuComponent) {
119
+ dataBuilder.withMenuComponent(menuComponent);
120
+ }
121
+ if (footerComponent) {
122
+ dataBuilder.withFooterComponent(footerComponent);
123
+ }
124
+ layoutRoute.withDataBuilder(dataBuilder);
125
+ }
126
+ return layoutRoute;
127
+ }
122
128
  static createTableviewRoutes(path, descriptor, dataProvider, actions, hasDetails = true, hasEdit = true, hasAdd = true) {
123
129
  const tableviewRoute = RouteBuilder.createFromRoute({
124
130
  data: RouteDataBuilder.create().withTableview(descriptor, dataProvider, actions).build(),
@@ -423,4 +429,4 @@ export class RouteDataBuilder {
423
429
  return this.data;
424
430
  }
425
431
  }
426
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGUtYnVpbGRlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9saWIvcm91dGVyL3JvdXRlLWJ1aWxkZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBR0EsT0FBTyxFQUFDLHVCQUF1QixFQUFDLE1BQU0sc0JBQXNCLENBQUM7QUFDN0QsT0FBTyxFQUFDLHNCQUFzQixFQUFDLE1BQU0sc0JBQXNCLENBQUM7QUFDNUQsT0FBTyxFQUFDLDBCQUEwQixFQUFDLE1BQU0seUJBQXlCLENBQUM7QUFJbkUsT0FBTyxFQUFDLFNBQVMsRUFBQyxNQUFNLHFCQUFxQixDQUFDO0FBRzlDLE1BQU0sT0FBTyxhQUFhO0lBS3RCLFlBQW9CLFdBQTBCO1FBSHRDLFdBQU0sR0FBd0IsRUFBRSxDQUFDO1FBSXJDLElBQUksQ0FBQyxXQUFXLEdBQUcsV0FBVyxFQUFFLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUMvQyxJQUFJLENBQUMsWUFBWSxHQUFHLFdBQVcsQ0FBQztJQUNwQyxDQUFDO0lBRU0sTUFBTSxDQUFDLE1BQU07UUFDaEIsT0FBTyxJQUFJLGFBQWEsRUFBRSxDQUFDO0lBQy9CLENBQUM7SUFFTSxNQUFNLENBQUMsZ0JBQWdCLENBQzFCLGVBQWUsR0FBRyxzQkFBc0IsRUFDeEMsZUFBMkIsRUFDM0IsbUJBQStCLEVBQy9CLGFBQXlCLEVBQ3pCLGVBQTJCO1FBRTNCLE1BQU0sV0FBVyxHQUFHLFlBQVksQ0FBQyxNQUFNLENBQUMsRUFBRSxFQUFFLGVBQWUsQ0FBQyxDQUFDO1FBQzdELElBQUksZUFBZSxJQUFJLG1CQUFtQixJQUFJLGFBQWEsSUFBSSxlQUFlLEVBQUU7WUFDNUUsTUFBTSxXQUFXLEdBQUcsZ0JBQWdCLENBQUMsTUFBTSxFQUFFLENBQUM7WUFDOUMsSUFBSSxlQUFlLEVBQUU7Z0JBQ2pCLFdBQVcsQ0FBQyxtQkFBbUIsQ0FBQyxlQUFlLENBQUMsQ0FBQzthQUNwRDtZQUNELElBQUksbUJBQW1CLEVB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QyxTQUFvQjtRQUNwQyxJQUFJLENBQUMsSUFBSSxDQUFDLGVBQWUsR0FBRyxTQUFTLENBQUM7UUFDdEMsT0FBTyxJQUFJLENBQUM7SUFDaEIsQ0FBQztJQUVELHVCQUF1QixDQUFDLFNBQW9CO1FBQ3hDLElBQUksQ0FBQyxJQUFJLENBQUMsbUJBQW1CLEdBQUcsU0FBUyxDQUFDO1FBQzFDLE9BQU8sSUFBSSxDQUFDO0lBQ2hCLENBQUM7SUFFRCxpQkFBaUIsQ0FBQyxTQUFvQjtRQUNsQyxJQUFJLENBQUMsSUFBSSxDQUFDLGFBQWEsR0FBRyxTQUFTLENBQUM7UUFDcEMsT0FBTyxJQUFJLENBQUM7SUFDaEIsQ0FBQztJQUVELG1CQUFtQixDQUFDLFNBQW9CO1FBQ3BDLElBQUksQ0FBQyxJQUFJLENBQUMsZUFBZSxHQUFHLFNBQVMsQ0FBQztRQUN0QyxPQUFPLElBQUksQ0FBQztJQUNoQixDQUFDO0lBRUQsS0FBSztRQUNELE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQztJQUNyQixDQUFDO0NBQ0oiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1R5cGV9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtEYXRhLCBMb2FkQ2hpbGRyZW4sIFJvdXRlLCBSb3V0ZXN9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5cbmltcG9ydCB7TW5nQWN0aW9uUm91dGVDb21wb25lbnR9IGZyb20gJy4uL2NvbXBvbmVudHMvYWN0aW9uJztcbmltcG9ydCB7TW5nTWFpbkxheW91dENvbXBvbmVudH0gZnJvbSAnLi4vY29tcG9uZW50cy9sYXlvdXQnO1xuaW1wb3J0IHtNbmdUYWJsZXZpZXdSb3V0ZUNvbXBvbmVudH0gZnJvbSAnLi4vY29tcG9uZW50cy90YWJsZXZpZXcnO1xuaW1wb3J0IHtJVGFibGV2aWV3RGF0YVByb3ZpZGVyfSBmcm9tICcuLi9kYXRhLXByb3ZpZGVycyc7XG5pbXBvcnQge0FjdGlvbkRlc2NyaXB0b3IsIFRhYmxldmlld0Rlc2NyaXB0b3J9IGZyb20gJy4uL2Rlc2NyaXB0b3JzJztcbmltcG9ydCB7TW5nTWVudUl0ZW19IGZyb20gJy4uL21vZGVscyc7XG5pbXBvcnQge1JvdXRlVXRpbH0gZnJvbSAnLi4vdXRpbHMvcm91dGUudXRpbCc7XG5pbXBvcnQge0JyZWFkY3J1bWJUeXBlLCBNbmdSb3V0ZXJEYXRhfSBmcm9tICcuL21vZGVscyc7XG5cbmV4cG9ydCBjbGFzcyBSb3V0ZXNCdWlsZGVyIHtcbiAgICBwcml2YXRlIHJlYWRvbmx5IGxheW91dFJvdXRlPzogUm91dGVCdWlsZGVyO1xuICAgIHByaXZhdGUgcm91dGVzOiBBcnJheTxSb3V0ZUJ1aWxkZXI+ID0gW107XG4gICAgcHJpdmF0ZSBjdXJyZW50Um91dGU/OiBSb3V0ZUJ1aWxkZXI7XG5cbiAgICBwcml2YXRlIGNvbnN0cnVjdG9yKGxheW91dFJvdXRlPzogUm91dGVCdWlsZGVyKSB7XG4gICAgICAgIHRoaXMubGF5b3V0Um91dGUgPSBsYXlvdXRSb3V0ZT8ud2l0aFJvb3QodGhpcyk7XG4gICAgICAgIHRoaXMuY3VycmVudFJvdXRlID0gbGF5b3V0Um91dGU7XG4gICAgfVxuXG4gICAgcHVibGljIHN0YXRpYyBjcmVhdGUoKTogUm91dGVzQnVpbGRlciB7XG4gICAgICAgIHJldHVybiBuZXcgUm91dGVzQnVpbGRlcigpO1xuICAgIH1cblxuICAgIHB1YmxpYyBzdGF0aWMgY3JlYXRlV2l0aExheW91dChcbiAgICAgICAgbGF5b3V0Q29tcG9uZW50ID0gTW5nTWFpbkxheW91dENvbXBvbmVudCxcbiAgICAgICAgdG9wYmFyQ29tcG9uZW50PzogVHlwZTxhbnk+LFxuICAgICAgICBicmVhZGNydW1iQ29tcG9uZW50PzogVHlwZTxhbnk+LFxuICAgICAgICBtZW51Q29tcG9uZW50PzogVHlwZTxhbnk+LFxuICAgICAgICBmb290ZXJDb21wb25lbnQ/OiBUeXBlPGFueT5cbiAgICApOiBSb3V0ZXNCdWlsZGVyIHtcbiAgICAgICAgY29uc3QgbGF5b3V0Um91dGUgPSBSb3V0ZUJ1aWxkZXIuY3JlYXRlKCcnLCBsYXlvdXRDb21wb25lbnQpO1xuICAgICAgICBpZiAodG9wYmFyQ29tcG9uZW50IHx8IGJyZWFkY3J1bWJDb21wb25lbnQgfHwgbWVudUNvbXBvbmVudCB8fCBmb290ZXJDb21wb25lbnQpIHtcbiAgICAgICAgICAgIGNvbnN0IGRhdGFCdWlsZGVyID0gUm91dGVEYXRhQnVpbGRlci5jcmVhdGUoKTtcbiAgICAgICAgICAgIGlmICh0b3BiYXJDb21wb25lbnQpIHtcbiAgICAgICAgICAgICAgICBkYXRhQnVpbGRlci53aXRoVG9wYmFyQ29tcG9uZW50KHRvcGJhckNvbXBvbmVudCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoYnJlYWRjcnVtYkNvbXBvbmVudCkge1xuICAgICAgICAgICAgICAgIGRhdGFCdWlsZGVyLndpdGhCcmVhZGNydW1iQ29tcG9uZW50KGJyZWFkY3J1bWJDb21wb25lbnQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKG1lbnVDb21wb25lbnQpIHtcbiAgICAgICAgICAgICAgICBkYXRhQnVpbGRlci53aXRoTWVudUNvbXBvbmVudChtZW51Q29tcG9uZW50KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChmb290ZXJDb21wb25lbnQpIHtcbiAgICAgICAgICAgICAgICBkYXRhQnVpbGRlci53aXRoRm9vdGVyQ29tcG9uZW50KGZvb3RlckNvbXBvbmVudCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBsYXlvdXRSb3V0ZS53aXRoRGF0YUJ1aWxkZXIoZGF0YUJ1aWxkZXIpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHJvdXRlc0J1aWxkZXIgPSBuZXcgUm91dGVzQnVpbGRlcihsYXlvdXRSb3V0ZSk7XG4gICAgICAgIHJldHVybiByb3V0ZXNCdWlsZGVyO1xuICAgIH1cblxuICAgIHB1YmxpYyBhZGRBbmd1bGFyUm91dGUocm91dGU6IFJvdXRlKTogdGhpcyB7XG4gICAgICAgIHJldHVybiB0aGlzLmFkZFJvdXRlQnVpbGRlcihSb3V0ZUJ1aWxkZXIuY3JlYXRlRnJvbVJvdXRlKHJvdXRlKSk7XG4gICAgfVxuXG4gICAgcHVibGljIGFkZFJvdXRlUmVkaXJlY3QocGF0aDogc3RyaW5nLCByZWRpcmVjdFRvOiBzdHJpbmcsIHBhdGhNYXRjaDogJ2Z1bGwnIHwgJ3ByZWZpeCcgPSAncHJlZml4Jyk6IHRoaXMge1xuICAgICAgICByZXR1cm4gdGhpcy5hZGRSb3V0ZUJ1aWxkZXIoUm91dGVCdWlsZGVyLmNyZWF0ZVJlZGlyZWN0KHBhdGgsIHJlZGlyZWN0VG8sIHBhdGhNYXRjaCkpO1xuICAgIH1cblxuICAgIHB1YmxpYyBhZGRMYXp5Um91dGUocGF0aDogc3RyaW5nLCBsb2FkQ2hpbGRyZW46IExvYWRDaGlsZHJlbiwgY2FuTG9hZD86IEFycmF5PGFueT4pOiB0aGlzIHtcbiAgICAgICAgY29uc3Qgcm91dGU6IFJvdXRlID0ge3BhdGg6IHBhdGgsIGxvYWRDaGlsZHJlbjogbG9hZENoaWxkcmVufTtcbiAgICAgICAgaWYgKGNhbkxvYWQ/Lmxlbmd0aCkge1xuICAgICAgICAgICAgcm91dGUuY2FuTG9hZCA9IGNhbkxvYWQ7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuYWRkUm91dGVCdWlsZGVyKFJvdXRlQnVpbGRlci5jcmVhdGVGcm9tUm91dGUocm91dGUpKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYWRkUm91dGUocGF0aDogc3RyaW5nLCBjb21wb25lbnQ6IFR5cGU8YW55Pik6IHRoaXMge1xuICAgICAgICByZXR1cm4gdGhpcy5hZGRSb3V0ZUJ1aWxkZXIoUm91dGVCdWlsZGVyLmNyZWF0ZShwYXRoLCBjb21wb25lbnQpKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYWRkVGFibGV2aWV3Um91dGVzPFQsIFM+KFxuICAgICAgICBwYXRoOiBzdHJpbmcsXG4gICAgICAgIGRlc2NyaXB0b3I6IFRhYmxldmlld0Rlc2NyaXB0b3I8VD4sXG4gICAgICAgIHRhYmxldmlld0RhdGFQcm92aWRlcjogSVRhYmxldmlld0RhdGFQcm92aWRlcjxULCBTPixcbiAgICAgICAgYWN0aW9ucz86IEFycmF5PEFjdGlvbkRlc2NyaXB0b3I8VD4+LFxuICAgICAgICBoYXNEZXRhaWxzID0gdHJ1ZSxcbiAgICAgICAgaGFzRWRpdCA9IHRydWUsXG4gICAgICAgIGhhc0FkZCA9IHRydWVcbiAgICApOiB0aGlzIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuYWRkUm91dGVCdWlsZGVyKFJvdXRlQnVpbGRlci5jcmVhdGVUYWJsZXZpZXdSb3V0ZXMocGF0aCwgZGVzY3JpcHRvciwgdGFibGV2aWV3RGF0YVByb3ZpZGVyLCBhY3Rpb25zLCBoYXNEZXRhaWxzLCBoYXNFZGl0LCBoYXNBZGQpKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYWRkVGFibGV2aWV3Um91dGVzRnJvbUNvbXBvbmVudChwYXRoOiBzdHJpbmcsIGNvbXBvbmVudDogVHlwZTxhbnk+LCBoYXNEZXRhaWxzID0gdHJ1ZSwgaGFzRWRpdCA9IHRydWUsIGhhc0FkZCA9IHRydWUpOiB0aGlzIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuYWRkUm91dGVCdWlsZGVyKFJvdXRlQnVpbGRlci5jcmVhdGVUYWJsZXZpZXdSb3V0ZXNGcm9tQ29tcG9uZW50KHBhdGgsIGNvbXBvbmVudCwgaGFzRGV0YWlscywgaGFzRWRpdCwgaGFzQWRkKSk7XG4gICAgfVxuXG4gICAgcHVibGljIGFkZFJvdXRlQnVpbGRlcihyb3V0ZUJ1aWxkZXI6IFJvdXRlQnVpbGRlcik6IHRoaXMge1xuICAgICAgICB0aGlzLmN1cnJlbnRSb3V0ZSA9IHJvdXRlQnVpbGRlci53aXRoUm9vdCh0aGlzKTtcbiAgICAgICAgdGhpcy5yb3V0ZXMucHVzaChyb3V0ZUJ1aWxkZXIpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBwdWJsaWMgdG9Sb3V0ZSgpOiBSb3V0ZUJ1aWxkZXIge1xuICAgICAgICBpZiAoIXRoaXMuY3VycmVudFJvdXRlKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ05vIHJvdXRlcyB3ZXJlIGFkZGVkIScpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLmN1cnJlbnRSb3V0ZTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYnVpbGRSb3V0ZXMoKTogUm91dGVzIHtcbiAgICAgICAgbGV0IGFuZ3VsYXJSb3V0ZXM6IFJvdXRlcyA9IFtdO1xuICAgICAgICBmb3IgKGNvbnN0IHJvdXRlIG9mIHRoaXMucm91dGVzKSB7XG4gICAgICAgICAgICBhbmd1bGFyUm91dGVzLnB1c2gocm91dGUuYnVpbGRSb3V0ZSgpKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLmxheW91dFJvdXRlKSB7XG4gICAgICAgICAgICBjb25zdCBsYXlvdXRBbmd1bGFyUm91dGUgPSB0aGlzLmxheW91dFJvdXRlLmJ1aWxkUm91dGUoKTtcbiAgICAgICAgICAgIGlmIChhbmd1bGFyUm91dGVzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICBsYXlvdXRBbmd1bGFyUm91dGUuY2hpbGRyZW4gPSBhbmd1bGFyUm91dGVzO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYW5ndWxhclJvdXRlcyA9IFtsYXlvdXRBbmd1bGFyUm91dGVdO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGFuZ3VsYXJSb3V0ZXM7XG4gICAgfVxuXG4gICAgcHVibGljIGJ1aWxkTWVudSgpOiBBcnJheTxNbmdNZW51SXRlbT4ge1xuICAgICAgICBjb25zdCBtZW51SXRlbXM6IEFycmF5PE1uZ01lbnVJdGVtPiA9IFtdO1xuICAgICAgICBmb3IgKGNvbnN0IHJvdXRlIG9mIHRoaXMucm91dGVzKSB7XG4gICAgICAgICAgICBtZW51SXRlbXMucHVzaCguLi5yb3V0ZS5idWlsZE1lbnUoKSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG1lbnVJdGVtcy5mbGF0KCk7XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgUm91dGVCdWlsZGVyIHtcbiAgICBwcml2YXRlIHJlYWRvbmx5IHJvdXRlOiBSb3V0ZTtcbiAgICBwcml2YXRlIHJvdXRlUGF0aDogQXJyYXk8c3RyaW5nPiA9IFtdO1xuICAgIHByaXZhdGUgcm9vdD86IFJvdXRlc0J1aWxkZXI7XG4gICAgcHJpdmF0ZSBwYXJlbnQ/OiBSb3V0ZUJ1aWxkZXI7XG4gICAgcHJpdmF0ZSBjaGlsZHJlbjogQXJyYXk8Um91dGVCdWlsZGVyPiA9IFtdO1xuICAgIHByaXZhdGUgbWVudUl0ZW0/OiBNbmdNZW51SXRlbTtcbiAgICBwcml2YXRlIG1lbnVJdGVtQ2hpbGRyZW46IEFycmF5PE1uZ01lbnVJdGVtPiA9IFtdO1xuXG4gICAgcHJpdmF0ZSBicmVhZGNydW1iPzogQnJlYWRjcnVtYlR5cGU7XG4gICAgcHJpdmF0ZSBwYWdlVGl0bGU/OiBzdHJpbmc7XG5cbiAgICBwcml2YXRlIGNvbnN0cnVjdG9yKHJvdXRlOiBSb3V0ZSkge1xuICAgICAgICBpZiAoIXJvdXRlLmRhdGEpIHtcbiAgICAgICAgICAgIHJvdXRlLmRhdGEgPSB7fTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIXJvdXRlLmRhdGFbJ2JyZWFkY3J1bWInXSkge1xuICAgICAgICAgICAgcm91dGUuZGF0YVsnYnJlYWRjcnVtYiddID0gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnJvdXRlID0gcm91dGU7XG4gICAgICAgIGlmICh0aGlzLnJvdXRlLnBhdGggJiYgdGhpcy5yb3V0ZS5wYXRoLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIHRoaXMucm91dGVQYXRoID0gW3RoaXMucm91dGUucGF0aF07XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgc3RhdGljIGNyZWF0ZShwYXRoOiBzdHJpbmcsIGNvbXBvbmVudDogVHlwZTxhbnk+KTogUm91dGVCdWlsZGVyIHtcbiAgICAgICAgcmV0dXJuIG5ldyBSb3V0ZUJ1aWxkZXIoe1xuICAgICAgICAgICAgcGF0aDogcGF0aCxcbiAgICAgICAgICAgIGNvbXBvbmVudDogY29tcG9uZW50XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHB1YmxpYyBzdGF0aWMgY3JlYXRlUmVkaXJlY3QocGF0aDogc3RyaW5nLCByZWRpcmVjdFRvOiBzdHJpbmcsIHBhdGhNYXRjaDogJ2Z1bGwnIHwgJ3ByZWZpeCcgPSAncHJlZml4Jyk6IFJvdXRlQnVpbGRlciB7XG4gICAgICAgIHJldHVybiBuZXcgUm91dGVCdWlsZGVyKHtcbiAgICAgICAgICAgIHBhdGg6IHBhdGgsXG4gICAgICAgICAgICByZWRpcmVjdFRvOiByZWRpcmVjdFRvLFxuICAgICAgICAgICAgcGF0aE1hdGNoOiBwYXRoTWF0Y2hcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHVibGljIHN0YXRpYyBjcmVhdGVGcm9tUm91dGUocm91dGU6IFJvdXRlKTogUm91dGVCdWlsZGVyIHtcbiAgICAgICAgcmV0dXJuIG5ldyBSb3V0ZUJ1aWxkZXIocm91dGUpO1xuICAgIH1cblxuICAgIHB1YmxpYyBzdGF0aWMgY3JlYXRlVGFibGV2aWV3Um91dGVzPFQsIFM+KFxuICAgICAgICBwYXRoOiBzdHJpbmcsXG4gICAgICAgIGRlc2NyaXB0b3I6IFRhYmxldmlld0Rlc2NyaXB0b3I8VD4sXG4gICAgICAgIGRhdGFQcm92aWRlcjogSVRhYmxldmlld0RhdGFQcm92aWRlcjxULCBTPixcbiAgICAgICAgYWN0aW9ucz86IEFycmF5PEFjdGlvbkRlc2NyaXB0b3I8VD4+LFxuICAgICAgICBoYXNEZXRhaWxzID0gdHJ1ZSxcbiAgICAgICAgaGFzRWRpdCA9IHRydWUsXG4gICAgICAgIGhhc0FkZCA9IHRydWVcbiAgICApOiBSb3V0ZUJ1aWxkZXIge1xuICAgICAgICBjb25zdCB0YWJsZXZpZXdSb3V0ZSA9IFJvdXRlQnVpbGRlci5jcmVhdGVGcm9tUm91dGUoe1xuICAgICAgICAgICAgZGF0YTogUm91dGVEYXRhQnVpbGRlci5jcmVhdGUoKS53aXRoVGFibGV2aWV3KGRlc2NyaXB0b3IsIGRhdGFQcm92aWRlciwgYWN0aW9ucykuYnVpbGQoKSxcbiAgICAgICAgICAgIHBhdGg6IHBhdGgsXG4gICAgICAgICAgICBjb21wb25lbnQ6IE1uZ1RhYmxldmlld1JvdXRlQ29tcG9uZW50XG4gICAgICAgIH0pO1xuICAgICAgICBSb3V0ZUJ1aWxkZXIuYWRkQWN0aW9uc1N1YnJvdXRlc1RvVGFibGV2aWV3UGFyZW50KHRhYmxldmlld1JvdXRlLCBoYXNEZXRhaWxzLCBoYXNFZGl0LCBoYXNBZGQpO1xuICAgICAgICByZXR1cm4gdGFibGV2aWV3Um91dGU7XG4gICAgfVxuXG4gICAgcHVibGljIHN0YXRpYyBjcmVhdGVUYWJsZXZpZXdSb3V0ZXNGcm9tQ29tcG9uZW50KHBhdGg6IHN0cmluZywgY29tcG9uZW50OiBUeXBlPGFueT4sIGhhc0RldGFpbHMgPSB0cnVlLCBoYXNFZGl0ID0gdHJ1ZSwgaGFzQWRkID0gdHJ1ZSk6IFJvdXRlQnVpbGRlciB7XG4gICAgICAgIGNvbnN0IGFjdGlvbkNydWRSb3V0ZSA9IFJvdXRlQnVpbGRlci5jcmVhdGUocGF0aCwgY29tcG9uZW50KTtcbiAgICAgICAgUm91dGVCdWlsZGVyLmFkZEFjdGlvbnNTdWJyb3V0ZXNUb1RhYmxldmlld1BhcmVudChhY3Rpb25DcnVkUm91dGUsIGhhc0RldGFpbHMsIGhhc0VkaXQsIGhhc0FkZCk7XG4gICAgICAgIHJldHVybiBhY3Rpb25DcnVkUm91dGU7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzdGF0aWMgYWRkQWN0aW9uc1N1YnJvdXRlc1RvVGFibGV2aWV3UGFyZW50KHBhcmVudFJvdXRlOiBSb3V0ZUJ1aWxkZXIsIGhhc0RldGFpbHM6IGJvb2xlYW4sIGhhc0VkaXQ6IGJvb2xlYW4sIGhhc0FkZDogYm9vbGVhbikge1xuICAgICAgICBwYXJlbnRSb3V0ZS5hZGRDaGlsZCgnJywgTW5nQWN0aW9uUm91dGVDb21wb25lbnQpO1xuXG4gICAgICAgIGlmIChoYXNBZGQpIHtcbiAgICAgICAgICAgIHBhcmVudFJvdXRlLmFkZENoaWxkKCdhZGQnLCBNbmdBY3Rpb25Sb3V0ZUNvbXBvbmVudCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGhhc0RldGFpbHMpIHtcbiAgICAgICAgICAgIHBhcmVudFJvdXRlLmFkZENoaWxkKCc6aXRlbUlkJywgTW5nQWN0aW9uUm91dGVDb21wb25lbnQpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChoYXNFZGl0KSB7XG4gICAgICAgICAgICBwYXJlbnRSb3V0ZS5hZGRDaGlsZCgnOml0ZW1JZC9lZGl0JywgTW5nQWN0aW9uUm91dGVDb21wb25lbnQpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgd2l0aFJvb3Qocm91dGVzQnVpbGRlcjogUm91dGVzQnVpbGRlcik6IHRoaXMge1xuICAgICAgICB0aGlzLnJvb3QgPSByb3V0ZXNCdWlsZGVyO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICB3aXRoUGFyZW50KHBhcmVudDogUm91dGVCdWlsZGVyKTogdGhpcyB7XG4gICAgICAgIHRoaXMucGFyZW50ID0gcGFyZW50O1xuICAgICAgICB0aGlzLnJvdXRlUGF0aCA9IFJvdXRlVXRpbC5yZW1vdmVFbXB0eVBhdGhTZWdtZW50cyhbLi4udGhpcy5wYXJlbnQucm91dGVQYXRoLCB0aGlzLnJvdXRlLnBhdGggPz8gJyddKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgd2l0aEJyZWFkY3J1bWIoYnJlYWRjcnVtYjogQnJlYWRjcnVtYlR5cGUpOiB0aGlzIHtcbiAgICAgICAgdGhpcy5icmVhZGNydW1iID0gYnJlYWRjcnVtYjtcbiAgICAgICAgdGhpcy5yb3V0ZS5kYXRhIVsnYnJlYWRjcnVtYiddID0gYnJlYWRjcnVtYjtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgd2l0aFBhZ2VUaXRsZShwYWdlVGl0bGU6IHN0cmluZyk6IHRoaXMge1xuICAgICAgICB0aGlzLnBhZ2VUaXRsZSA9IHBhZ2VUaXRsZTtcbiAgICAgICAgdGhpcy5yb3V0ZS5kYXRhIVsncGFnZVRpdGxlJ10gPSBwYWdlVGl0bGU7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHdpdGhSZWRpcmVjdFRvKHJlZGlyZWN0VG86IHN0cmluZyk6IHRoaXMge1xuICAgICAgICB0aGlzLnJvdXRlLnJlZGlyZWN0VG8gPSByZWRpcmVjdFRvO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICB3aXRoUGF0aE1hdGNoKHBhdGhNYXRjaDogJ2Z1bGwnIHwgJ3ByZWZpeCcpOiB0aGlzIHtcbiAgICAgICAgdGhpcy5yb3V0ZS5wYXRoTWF0Y2ggPSBwYXRoTWF0Y2g7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHdpdGhUaXRsZSh0aXRsZTogc3RyaW5nKTogdGhpcyB7XG4gICAgICAgIHRoaXMud2l0aFBhZ2VUaXRsZSh0aXRsZSk7XG4gICAgICAgIHRoaXMud2l0aEJyZWFkY3J1bWIodGl0bGUpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICB3aXRoQ2FuQWN0aXZhdGUoZGlUb2tlbjogYW55KTogdGhpcyB7XG4gICAgICAgIGlmICghdGhpcy5yb3V0ZS5jYW5BY3RpdmF0ZSkge1xuICAgICAgICAgICAgdGhpcy5yb3V0ZS5jYW5BY3RpdmF0ZSA9IFtdO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMucm91dGUuY2FuQWN0aXZhdGUucHVzaChkaVRva2VuKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgd2l0aENhbkRlYWN0aXZhdGUoZGlUb2tlbjogYW55KTogdGhpcyB7XG4gICAgICAgIGlmICghdGhpcy5yb3V0ZS5jYW5EZWFjdGl2YXRlKSB7XG4gICAgICAgICAgICB0aGlzLnJvdXRlLmNhbkRlYWN0aXZhdGUgPSBbXTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnJvdXRlLmNhbkRlYWN0aXZhdGUucHVzaChkaVRva2VuKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgd2l0aFJlc29sdmVyKGRpVG9rZW46IGFueSwgbmFtZTogc3RyaW5nKTogdGhpcyB7XG4gICAgICAgIGlmICghdGhpcy5yb3V0ZS5yZXNvbHZlKSB7XG4gICAgICAgICAgICB0aGlzLnJvdXRlLnJlc29sdmUgPSB7fTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnJvdXRlLnJlc29sdmVbbmFtZV0gPSBkaVRva2VuO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICB3aXRoRGF0YShkYXRhOiBhbnkpOiB0aGlzIHtcbiAgICAgICAgdGhpcy5yb3V0ZS5kYXRhID0gZGF0YTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgd2l0aERhdGFCdWlsZGVyKGRhdGFCdWlsZGVyOiBSb3V0ZURhdGFCdWlsZGVyKTogdGhpcyB7XG4gICAgICAgIHRoaXMucm91dGUuZGF0YSA9IGRhdGFCdWlsZGVyLmJ1aWxkKCk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHdpdGhNbmdNZW51SXRlbShtZW51SXRlbTogTW5nTWVudUl0ZW0pOiB0aGlzIHtcbiAgICAgICAgdGhpcy5tZW51SXRlbSA9IG1lbnVJdGVtO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICB3aXRoTWVudUl0ZW0oaWNvbj86IHN0cmluZywgbGFiZWw/OiBzdHJpbmcsIHJvdXRlckxpbms/OiBBcnJheTxzdHJpbmc+KTogdGhpcyB7XG4gICAgICAgIHRoaXMubWVudUl0ZW0gPSB0aGlzLmNyZWF0ZU1lbnVJdGVtKGljb24sIGxhYmVsLCByb3V0ZXJMaW5rKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgd2l0aE1lbnVJdGVtQ2hpbGQobGFiZWw6IHN0cmluZywgaWNvbj86IHN0cmluZywgcm91dGVyTGluaz86IEFycmF5PHN0cmluZz4pOiB0aGlzIHtcbiAgICAgICAgdGhpcy5tZW51SXRlbUNoaWxkcmVuLnB1c2godGhpcy5jcmVhdGVNZW51SXRlbShpY29uLCBsYWJlbCwgcm91dGVyTGluaykpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICB3aXRoTWVudUl0ZW1DaGlsZHJlbihyb3V0ZXNCdWlsZGVyOiBSb3V0ZXNCdWlsZGVyKTogdGhpcyB7XG4gICAgICAgIGNvbnN0IG1lbnUgPSByb3V0ZXNCdWlsZGVyLmJ1aWxkTWVudSgpO1xuICAgICAgICB0aGlzLmFkanVzdE1lbnVSb3V0ZXJMaW5rc0Zyb21CdWlsZGVyKG1lbnUpO1xuICAgICAgICB0aGlzLm1lbnVJdGVtQ2hpbGRyZW4ucHVzaCguLi5tZW51KTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgcHVibGljIGFkZENoaWxkKHBhdGg6IHN0cmluZywgY29tcG9uZW50OiBUeXBlPGFueT4pOiBSb3V0ZUJ1aWxkZXIge1xuICAgICAgICBjb25zdCBjaGlsZFJvdXRlQnVpbGRlciA9IFJvdXRlQnVpbGRlci5jcmVhdGUocGF0aCwgY29tcG9uZW50KTtcbiAgICAgICAgdGhpcy5hZGRDaGlsZEJ1aWxkZXIoY2hpbGRSb3V0ZUJ1aWxkZXIpO1xuICAgICAgICByZXR1cm4gY2hpbGRSb3V0ZUJ1aWxkZXI7XG4gICAgfVxuXG4gICAgcHVibGljIGFkZENoaWxkQnVpbGRlcihyb3V0ZUJ1aWxkZXI6IFJvdXRlQnVpbGRlcik6IHRoaXMge1xuICAgICAgICByb3V0ZUJ1aWxkZXIud2l0aFBhcmVudCh0aGlzKTtcbiAgICAgICAgaWYgKHRoaXMucm9vdCkge1xuICAgICAgICAgICAgcm91dGVCdWlsZGVyLndpdGhSb290KHRoaXMucm9vdCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5jaGlsZHJlbi5wdXNoKHJvdXRlQnVpbGRlcik7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHB1YmxpYyBhZGRUYWJsZXZpZXdSb3V0ZXM8VCwgUz4oXG4gICAgICAgIHBhdGg6IHN0cmluZyxcbiAgICAgICAgZGVzY3JpcHRvcjogVGFibGV2aWV3RGVzY3JpcHRvcjxUPixcbiAgICAgICAgdGFibGV2aWV3RGF0YVByb3ZpZGVyOiBJVGFibGV2aWV3RGF0YVByb3ZpZGVyPFQsIFM+LFxuICAgICAgICBhY3Rpb25zPzogQXJyYXk8QWN0aW9uRGVzY3JpcHRvcjxUPj4sXG4gICAgICAgIGhhc0RldGFpbHMgPSB0cnVlLFxuICAgICAgICBoYXNFZGl0ID0gdHJ1ZSxcbiAgICAgICAgaGFzQWRkID0gdHJ1ZVxuICAgICk6IFJvdXRlQnVpbGRlciB7XG4gICAgICAgIGNvbnN0IHJvdXRlQnVpbGRlciA9IFJvdXRlQnVpbGRlci5jcmVhdGVUYWJsZXZpZXdSb3V0ZXMocGF0aCwgZGVzY3JpcHRvciwgdGFibGV2aWV3RGF0YVByb3ZpZGVyLCBhY3Rpb25zLCBoYXNEZXRhaWxzLCBoYXNFZGl0LCBoYXNBZGQpO1xuICAgICAgICB0aGlzLmFkZENoaWxkQnVpbGRlcihyb3V0ZUJ1aWxkZXIpO1xuICAgICAgICByZXR1cm4gcm91dGVCdWlsZGVyO1xuICAgIH1cblxuICAgIHB1YmxpYyBhZGRUYWJsZXZpZXdSb3V0ZXNGcm9tQ29tcG9uZW50KHBhdGg6IHN0cmluZywgY29tcG9uZW50OiBUeXBlPGFueT4sIGhhc0RldGFpbHMgPSB0cnVlLCBoYXNFZGl0ID0gdHJ1ZSwgaGFzQWRkID0gdHJ1ZSk6IFJvdXRlQnVpbGRlciB7XG4gICAgICAgIGNvbnN0IHJvdXRlQnVpbGRlciA9IFJvdXRlQnVpbGRlci5jcmVhdGVUYWJsZXZpZXdSb3V0ZXNGcm9tQ29tcG9uZW50KHBhdGgsIGNvbXBvbmVudCwgaGFzRGV0YWlscywgaGFzRWRpdCwgaGFzQWRkKTtcbiAgICAgICAgdGhpcy5hZGRDaGlsZEJ1aWxkZXIocm91dGVCdWlsZGVyKTtcbiAgICAgICAgcmV0dXJuIHJvdXRlQnVpbGRlcjtcbiAgICB9XG5cbiAgICBwdWJsaWMgdG9QYXJlbnQoKTogUm91dGVCdWlsZGVyIHtcbiAgICAgICAgaWYgKCF0aGlzLnBhcmVudCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdQYXJlbnQgd2FzIG5vdCBwcm92aWRlZC4nKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5wYXJlbnQ7XG4gICAgfVxuXG4gICAgcHVibGljIHRvUm9vdCgpOiBSb3V0ZXNCdWlsZGVyIHtcbiAgICAgICAgaWYgKCF0aGlzLnJvb3QpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignUm9vdCB3YXMgbm90IHByb3ZpZGVkLicpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLnJvb3Q7XG4gICAgfVxuXG4gICAgcHVibGljIGZpbmlzaCgpOiBSb3V0ZXNCdWlsZGVyIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudG9Sb290KCk7XG4gICAgfVxuXG4gICAgcHVibGljIGJ1aWxkUm91dGUoKTogUm91dGUge1xuICAgICAgICBjb25zdCBhbmd1bGFyUm91dGU6IFJvdXRlID0ge1xuICAgICAgICAgICAgLi4udGhpcy5yb3V0ZVxuICAgICAgICB9O1xuXG4gICAgICAgIGlmICgodGhpcy5yb3V0ZS5jaGlsZHJlbj8ubGVuZ3RoID8/IDApID4gMCB8fCB0aGlzLmNoaWxkcmVuLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIC8vIHJvdXRlIGhhcyBjaGlsZHJlblxuICAgICAgICAgICAgYW5ndWxhclJvdXRlLmNoaWxkcmVuID0gW107XG4gICAgICAgICAgICBpZiAodGhpcy5yb3V0ZS5jaGlsZHJlbj8ubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgYW5ndWxhclJvdXRlLmNoaWxkcmVuLnB1c2goLi4udGhpcy5yb3V0ZS5jaGlsZHJlbik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodGhpcy5jaGlsZHJlbi5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGNoaWxkUm91dGUgb2YgdGhpcy5jaGlsZHJlbikge1xuICAgICAgICAgICAgICAgICAgICBhbmd1bGFyUm91dGUuY2hpbGRyZW4ucHVzaChjaGlsZFJvdXRlLmJ1aWxkUm91dGUoKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMucm91dGUuY2FuQWN0aXZhdGUpIHtcbiAgICAgICAgICAgIGFuZ3VsYXJSb3V0ZS5jYW5BY3RpdmF0ZSA9IFsuLi50aGlzLnJvdXRlLmNhbkFjdGl2YXRlXTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5yb3V0ZS5jYW5BY3RpdmF0ZUNoaWxkKSB7XG4gICAgICAgICAgICBhbmd1bGFyUm91dGUuY2FuQWN0aXZhdGVDaGlsZCA9IFsuLi50aGlzLnJvdXRlLmNhbkFjdGl2YXRlQ2hpbGRdO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLnJvdXRlLmNhbkxvYWQpIHtcbiAgICAgICAgICAgIGFuZ3VsYXJSb3V0ZS5jYW5Mb2FkID0gWy4uLnRoaXMucm91dGUuY2FuTG9hZF07XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMucm91dGUuY2FuRGVhY3RpdmF0ZSkge1xuICAgICAgICAgICAgYW5ndWxhclJvdXRlLmNhbkRlYWN0aXZhdGUgPSBbLi4udGhpcy5yb3V0ZS5jYW5EZWFjdGl2YXRlXTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5yb3V0ZS5yZXNvbHZlKSB7XG4gICAgICAgICAgICBhbmd1bGFyUm91dGUucmVzb2x2ZSA9IHsuLi50aGlzLnJvdXRlLnJlc29sdmV9O1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGFuZ3VsYXJSb3V0ZTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYnVpbGRNZW51KCk6IEFycmF5PE1uZ01lbnVJdGVtPiB7XG4gICAgICAgIGNvbnN0IG1lbnVJdGVtQnVpbGQ6IE1uZ01lbnVJdGVtIHwgbnVsbCA9IHRoaXMubWVudUl0ZW0gPyB7Li4udGhpcy5tZW51SXRlbX0gOiBudWxsO1xuICAgICAgICBjb25zdCByb3V0ZUNoaWxkcmVuTWVudUl0ZW1zOiBBcnJheTxNbmdNZW51SXRlbT4gPSB0aGlzLmNoaWxkcmVuLmZsYXRNYXAoY2hpbGQgPT4gY2hpbGQuYnVpbGRNZW51KCkpO1xuICAgICAgICBjb25zdCBtZW51SXRlbUNoaWxkcmVuOiBBcnJheTxNbmdNZW51SXRlbT4gPSBbXTtcbiAgICAgICAgY29uc3QgbWVudUl0ZW1DaGlsZHJlbkJ1aWxkOiBBcnJheTxNbmdNZW51SXRlbT4gPSBbXTtcblxuICAgICAgICBpZiAobWVudUl0ZW1CdWlsZD8uaXRlbXMpIHtcbiAgICAgICAgICAgIG1lbnVJdGVtQ2hpbGRyZW5CdWlsZC5wdXNoKC4uLm1lbnVJdGVtQnVpbGQuaXRlbXMpO1xuICAgICAgICB9XG5cbiAgICAgICAgZm9yIChjb25zdCBtZW51SXRlbUNoaWxkIG9mIHRoaXMubWVudUl0ZW1DaGlsZHJlbikge1xuICAgICAgICAgICAgY29uc3QgZmluYWxNZW51SXRlbUNoaWxkOiBNbmdNZW51SXRlbSA9IHsuLi5tZW51SXRlbUNoaWxkfTtcbiAgICAgICAgICAgIGlmICghZmluYWxNZW51SXRlbUNoaWxkLnJvdXRlckxpbmspIHtcbiAgICAgICAgICAgICAgICBmaW5hbE1lbnVJdGVtQ2hpbGQucm91dGVyTGluayA9IHRoaXMucm91dGVQYXRoO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHR5cGVvZiBmaW5hbE1lbnVJdGVtQ2hpbGQucm91dGVyTGluayA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgICAgICBmaW5hbE1lbnVJdGVtQ2hpbGQucm91dGVyTGluayA9IFtmaW5hbE1lbnVJdGVtQ2hpbGQucm91dGVyTGlua107XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBmaW5hbE1lbnVJdGVtQ2hpbGQucm91dGVyTGluayA9IFJvdXRlVXRpbC5yZW1vdmVFbXB0eVBhdGhTZWdtZW50cyhmaW5hbE1lbnVJdGVtQ2hpbGQucm91dGVyTGluayk7XG4gICAgICAgICAgICBtZW51SXRlbUNoaWxkcmVuLnB1c2goZmluYWxNZW51SXRlbUNoaWxkKTtcbiAgICAgICAgfVxuXG4gICAgICAgIG1lbnVJdGVtQ2hpbGRyZW5CdWlsZC5wdXNoKC4uLm1lbnVJdGVtQ2hpbGRyZW4sIC4uLnJvdXRlQ2hpbGRyZW5NZW51SXRlbXMpO1xuXG4gICAgICAgIGlmICghbWVudUl0ZW1CdWlsZCkge1xuICAgICAgICAgICAgcmV0dXJuIG1lbnVJdGVtQ2hpbGRyZW5CdWlsZDtcbiAgICAgICAgfVxuXG4gICAgICAgIG1lbnVJdGVtQnVpbGQubGFiZWwgPSBtZW51SXRlbUJ1aWxkLmxhYmVsID8/IHRoaXMucGFnZVRpdGxlO1xuICAgICAgICBpZiAodHlwZW9mIG1lbnVJdGVtQnVpbGQucm91dGVyTGluayA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgIG1lbnVJdGVtQnVpbGQucm91dGVyTGluayA9IFttZW51SXRlbUJ1aWxkLnJvdXRlckxpbmtdO1xuICAgICAgICB9XG4gICAgICAgIG1lbnVJdGVtQnVpbGQucm91dGVyTGluayA9IFJvdXRlVXRpbC5yZW1vdmVFbXB0eVBhdGhTZWdtZW50cyhtZW51SXRlbUJ1aWxkLnJvdXRlckxpbmsgPz8gdGhpcy5yb3V0ZVBhdGgpO1xuICAgICAgICBpZiAobWVudUl0ZW1DaGlsZHJlbkJ1aWxkLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIG1lbnVJdGVtQnVpbGQuaXRlbXMgPSBtZW51SXRlbUNoaWxkcmVuQnVpbGQ7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIW1lbnVJdGVtQnVpbGQuZ3VhcmRzKSB7XG4gICAgICAgICAgICBjb25zdCBndWFyZHMgPSB0aGlzLmZpbmRNZW51SXRlbUd1YXJkcygpO1xuICAgICAgICAgICAgaWYgKGd1YXJkcy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgbWVudUl0ZW1CdWlsZC5ndWFyZHMgPSBndWFyZHM7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gW21lbnVJdGVtQnVpbGRdO1xuICAgIH1cblxuICAgIHByaXZhdGUgY3JlYXRlTWVudUl0ZW0oaWNvbj86IHN0cmluZywgbGFiZWw/OiBzdHJpbmcsIHJvdXRlckxpbms/OiBBcnJheTxzdHJpbmc+KSB7XG4gICAgICAgIGNvbnN0IG1lbnVJdGVtOiBNbmdNZW51SXRlbSA9IHt9O1xuICAgICAgICBpZiAoaWNvbikge1xuICAgICAgICAgICAgbWVudUl0ZW0uaWNvbiA9IGljb247XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGxhYmVsKSB7XG4gICAgICAgICAgICBtZW51SXRlbS5sYWJlbCA9IGxhYmVsO1xuICAgICAgICB9XG4gICAgICAgIGlmIChyb3V0ZXJMaW5rKSB7XG4gICAgICAgICAgICBtZW51SXRlbS5yb3V0ZXJMaW5rID0gcm91dGVyTGluaztcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbWVudUl0ZW07XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhZGp1c3RNZW51Um91dGVyTGlua3NGcm9tQnVpbGRlcihtZW51SXRlbXM6IEFycmF5PE1uZ01lbnVJdGVtPikge1xuICAgICAgICBmb3IgKGNvbnN0IG1lbnVJdGVtIG9mIG1lbnVJdGVtcykge1xuICAgICAgICAgICAgaWYgKG1lbnVJdGVtLnJvdXRlckxpbmspIHtcbiAgICAgICAgICAgICAgICBtZW51SXRlbS5yb3V0ZXJMaW5rID0gUm91dGVVdGlsLmFwcGVuZFBhdGhUb0Jhc2VQYXRoKHRoaXMucm91dGVQYXRoLCB0eXBlb2YgbWVudUl0ZW0ucm91dGVyTGluayA9PT0gJ3N0cmluZycgPyBbbWVudUl0ZW0ucm91dGVyTGlua10gOiBtZW51SXRlbS5yb3V0ZXJMaW5rKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KG1lbnVJdGVtLml0ZW1zKSkge1xuICAgICAgICAgICAgICAgIHRoaXMuYWRqdXN0TWVudVJvdXRlckxpbmtzRnJvbUJ1aWxkZXIobWVudUl0ZW0uaXRlbXMpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBmaW5kTWVudUl0ZW1HdWFyZHMoKTogQXJyYXk8YW55PiB7XG4gICAgICAgIGNvbnN0IGd1YXJkczogQXJyYXk8YW55PiA9IFtdO1xuICAgICAgICBpZiAodGhpcy5yb3V0ZS5jYW5BY3RpdmF0ZT8ubGVuZ3RoKSB7XG4gICAgICAgICAgICBndWFyZHMucHVzaCguLi50aGlzLnJvdXRlLmNhbkFjdGl2YXRlKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5wYXJlbnQpIHtcbiAgICAgICAgICAgIC8vIENoZWNrIGZvciBwYXJlbnQgZ3VhcmRzIHRoYXQgc2hvdWxkIGJlIGluY2x1ZGVkIGluIGRlY2lzaW9uIHRvIGhpZGUgbWVudSBpdGVtIVxuICAgICAgICAgICAgLy8gU29tZSBwYXJlbnQgcm91dGVzIG1pZ2h0IGhhdmUgZ3VhcmRzLCBidXQgbm8gbWVudSBpdGVtcywgc28gdGhpcyBndWFyZHMgbXVzdCBiZSB0YWtlbiBpbnRvIGFjY291bnQgaGVyZSxcbiAgICAgICAgICAgIC8vIGJlY2F1c2UgdGhlcmUgaXMgbm8gcGFyZW50IG1lbnUgaXRlbSB0byBoaWRlLlxuICAgICAgICAgICAgdGhpcy5wYXJlbnQuZmluZE1lbnVJdGVtR3VhcmRzKCkuZm9yRWFjaChnID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoZ3VhcmRzLmluZGV4T2YoZykgPCAwKSB7XG4gICAgICAgICAgICAgICAgICAgIGd1YXJkcy5wdXNoKGcpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBndWFyZHM7XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgUm91dGVEYXRhQnVpbGRlciB7XG4gICAgcHJpdmF0ZSBkYXRhOiBNbmdSb3V0ZXJEYXRhO1xuXG4gICAgY29uc3RydWN0b3IoaW5pdD86IERhdGEpIHtcbiAgICAgICAgdGhpcy5kYXRhID0gaW5pdCA/PyB7fTtcbiAgICAgICAgaWYgKCF0aGlzLmRhdGEuYnJlYWRjcnVtYikge1xuICAgICAgICAgICAgdGhpcy5kYXRhLmJyZWFkY3J1bWIgPSBudWxsO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIHN0YXRpYyBjcmVhdGUoZGF0YT86IERhdGEpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBSb3V0ZURhdGFCdWlsZGVyKGRhdGEpO1xuICAgIH1cblxuICAgIHdpdGhCcmVhZGNydW1iKGJyZWFkY3J1bWI6IEJyZWFkY3J1bWJUeXBlKTogdGhpcyB7XG4gICAgICAgIHRoaXMuZGF0YS5icmVhZGNydW1iID0gYnJlYWRjcnVtYjtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgd2l0aFBhZ2VUaXRsZShwYWdlVGl0bGU6IHN0cmluZyk6IHRoaXMge1xuICAgICAgICB0aGlzLmRhdGEucGFnZVRpdGxlID0gcGFnZVRpdGxlO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICB3aXRoVGFibGV2aWV3KGRlc2NyaXB0b3I6IFRhYmxldmlld0Rlc2NyaXB0b3I8YW55PiwgZGF0YVByb3ZpZGVyOiBJVGFibGV2aWV3RGF0YVByb3ZpZGVyPGFueSwgYW55PiwgYWN0aW9ucz86IEFycmF5PEFjdGlvbkRlc2NyaXB0b3I8YW55Pj4pOiB0aGlzIHtcbiAgICAgICAgdGhpcy5kYXRhLnRhYmxldmlldyA9IHtcbiAgICAgICAgICAgIGRlc2NyaXB0b3I6IGRlc2NyaXB0b3IsXG4gICAgICAgICAgICBkYXRhUHJvdmlkZXI6IGRhdGFQcm92aWRlclxuICAgICAgICB9O1xuICAgICAgICBpZiAoYWN0aW9ucykge1xuICAgICAgICAgICAgdGhpcy5kYXRhLnRhYmxldmlldy5hY3Rpb25zID0gYWN0aW9ucztcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICB3aXRoVG9wYmFyQ29tcG9uZW50KGNvbXBvbmVudDogVHlwZTxhbnk+KTogdGhpcyB7XG4gICAgICAgIHRoaXMuZGF0YS50b3BiYXJDb21wb25lbnQgPSBjb21wb25lbnQ7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHdpdGhCcmVhZGNydW1iQ29tcG9uZW50KGNvbXBvbmVudDogVHlwZTxhbnk+KTogdGhpcyB7XG4gICAgICAgIHRoaXMuZGF0YS5icmVhZGNydW1iQ29tcG9uZW50ID0gY29tcG9uZW50O1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICB3aXRoTWVudUNvbXBvbmVudChjb21wb25lbnQ6IFR5cGU8YW55Pik6IHRoaXMge1xuICAgICAgICB0aGlzLmRhdGEubWVudUNvbXBvbmVudCA9IGNvbXBvbmVudDtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgd2l0aEZvb3RlckNvbXBvbmVudChjb21wb25lbnQ6IFR5cGU8YW55Pik6IHRoaXMge1xuICAgICAgICB0aGlzLmRhdGEuZm9vdGVyQ29tcG9uZW50ID0gY29tcG9uZW50O1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBidWlsZCgpOiBNbmdSb3V0ZXJEYXRhIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZGF0YTtcbiAgICB9XG59XG4iXX0=
432
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGUtYnVpbGRlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9saWIvcm91dGVyL3JvdXRlLWJ1aWxkZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBR0EsT0FBTyxFQUFDLHVCQUF1QixFQUFDLE1BQU0sc0JBQXNCLENBQUM7QUFDN0QsT0FBTyxFQUFDLHNCQUFzQixFQUFDLE1BQU0sc0JBQXNCLENBQUM7QUFDNUQsT0FBTyxFQUFDLDBCQUEwQixFQUFDLE1BQU0seUJBQXlCLENBQUM7QUFJbkUsT0FBTyxFQUFDLFNBQVMsRUFBQyxNQUFNLHFCQUFxQixDQUFDO0FBRzlDLE1BQU0sT0FBTyxhQUFhO0lBS3RCLFlBQW9CLFdBQTBCO1FBSHRDLFdBQU0sR0FBd0IsRUFBRSxDQUFDO1FBSXJDLElBQUksQ0FBQyxXQUFXLEdBQUcsV0FBVyxFQUFFLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUMvQyxJQUFJLENBQUMsWUFBWSxHQUFHLFdBQVcsQ0FBQztJQUNwQyxDQUFDO0lBRU0sTUFBTSxDQUFDLE1BQU07UUFDaEIsT0FBTyxJQUFJLGFBQWEsRUFBRSxDQUFDO0lBQy9CLENBQUM7SUFFTSxNQUFNLENBQUMsZ0JBQWdCLENBQzFCLGVBQWUsR0FBRyxzQkFBc0IsRUFDeEMsZUFBMkIsRUFDM0IsbUJBQStCLEVBQy9CLGFBQXlCLEVBQ3pCLGVBQTJCO1FBRTNCLE1BQU0sV0FBVyxHQUFHLFlBQVksQ0FBQyxpQkFBaUIsQ0FBQyxFQUFFLEVBQUUsZUFBZSxFQUFFLGVBQWUsRUFBRSxtQkFBbUIsRUFBRSxhQUFhLEVBQUUsZUFBZSxDQUFDLENBQUM7UUFDOUksT0FBTyxJQUFJLGFBQWEsQ0FBQyxXQUFXLENBQUMsQ0FBQztJQUMxQyxDQUFDO0lBRU0sZUFBZSxDQUFDLEtBQVk7UUFDL0IsT0FBTyxJQUFJLENBQUMsZUFBZSxDQUFDLFlBQVksQ0FBQyxlQUFlLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztJQUNyRSxDQUFDO0lBRU0sZ0JBQWdCLENBQUMsSUFBWSxFQUFFLFVBQWtCLEVBQUUsWUFBK0IsUUFBUTtRQUM3RixPQUFPLElBQUksQ0FBQyxlQUFlLENBQUMsWUFBWSxDQUFDLGNBQWMsQ0FBQyxJQUFJLEVBQUUsVUFBVSxFQUFFLFNBQVMsQ0FBQyxDQUFDLENBQUM7SUFDMUYsQ0FBQztJQUVNLFlBQVksQ0FBQyxJQUFZLEVBQUUsWUFBMEIsRUFBRSxPQUFvQjtRQUM5RSxPQUFPLElBQUksQ0FBQyxlQUFlLENBQUMsWUFBWSxDQUFDLGVBQWUsQ0FBQyxJQUFJLEVBQUUsWUFBWSxFQUFFLE9BQU8sQ0FBQyxDQUFDLENBQUM7SUFDM0YsQ0FBQztJQUVNLFFBQVEsQ0FBQyxJQUFZLEVBQUUsU0FBb0I7UUFDOUMsT0FBTyxJQUFJLENBQUMsZUFBZSxDQUFDLFlBQVksQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLFNBQVMsQ0FBQyxDQUFDLENBQUM7SUFDdEUsQ0FBQztJQUVNLGtCQUFrQixDQUNyQixJQUFZLEVBQ1osVUFBa0MsRUFDbEMscUJBQW1ELEVBQ25ELE9BQW9DLEVBQ3BDLFVBQVUsR0FBRyxJQUFJLEVBQ2pCLE9BQU8sR0FBRyxJQUFJLEVBQ2QsTUFBTSxHQUFHLElBQUk7UUFFYixPQUFPLElBQUksQ0FBQyxlQUFlLENBQUMsWUFBWSxDQUFDLHFCQUFxQixDQUFDLElBQUksRUFBRSxVQUFVLEVBQUUscUJBQXFCLEVBQUUsT0FBTyxFQUFFLFVBQVUsRUFBRSxPQUFPLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQztJQUNuSixDQUFDO0lBRU0sK0JBQStCLENBQUMsSUFBWSxFQUFFLFNBQW9CLEVBQUUsVUFBVSxHQUFHLElBQUksRUFBRSxPQUFPLEdBQUcsSUFBSSxFQUFFLE1BQU0sR0FBRyxJQUFJO1FBQ3ZILE9BQU8sSUFBSSxDQUFDLGVBQWUsQ0FBQyxZQUFZLENBQUMsa0NBQWtDLENBQUMsSUFBSSxFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQUUsT0FBTyxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUM7SUFDL0gsQ0FBQztJQUVNLGVBQWUsQ0FBQyxZQUEwQjtRQUM3QyxJQUFJLENBQUMsWUFBWSxHQUFHLFlBQVksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDaEQsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUM7UUFDL0IsT0FBTyxJQUFJLENBQUM7SUFDaEIsQ0FBQztJQUVNLE9BQU87UUFDVixJQUFJLENBQUMsSUFBSSxDQUFDLFlBQVksRUFBRTtZQUNwQixNQUFNLElBQUksS0FBSyxDQUFDLHVCQUF1QixDQUFDLENBQUM7U0FDNUM7UUFDRCxPQUFPLElBQUksQ0FBQyxZQUFZLENBQUM7SUFDN0IsQ0FBQztJQUVNLFdBQVc7UUFDZCxJQUFJLGFBQWEsR0FBVyxFQUFFLENBQUM7UUFDL0IsS0FBSyxNQUFNLEtBQUssSUFBSSxJQUFJLENBQUMsTUFBTSxFQUFFO1lBQzdCLGFBQWEsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLFVBQVUsRUFBRSxDQUFDLENBQUM7U0FDMUM7UUFFRCxJQUFJLElBQUksQ0FBQyxXQUFXLEVBQUU7WUFDbEIsTUFBTSxrQkFBa0IsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLFVBQVUsRUFBRSxDQUFDO1lBQ3pELElBQUksYUFBYSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7Z0JBQzFCLGtCQUFrQixDQUFDLFFBQVEsR0FBRyxhQUFhLENBQUM7YUFDL0M7WUFDRCxhQUFhLEdBQUcsQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO1NBQ3hDO1FBRUQsT0FBTyxhQUFhLENBQUM7SUFDekIsQ0FBQztJQUVNLFNBQVM7UUFDWixNQUFNLFNBQVMsR0FBdUIsRUFBRSxDQUFDO1FBQ3pDLEtBQUssTUFBTSxLQUFLLElBQUksSUFBSSxDQUFDLE1BQU0sRUFBRTtZQUM3QixTQUFTLENBQUMsSUFBSSxDQUFDLEdBQUcsS0FBSyxDQUFDLFNBQVMsRUFBRSxDQUFDLENBQUM7U0FDeEM7UUFDRCxPQUFPLFNBQVMsQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUM1QixDQUFDO0NBQ0o7QUFFRCxNQUFNLE9BQU8sWUFBWTtJQVlyQixZQUFvQixLQUFZO1FBVnhCLGNBQVMsR0FBa0IsRUFBRSxDQUFDO1FBRzlCLGFBQVEsR0FBd0IsRUFBRSxDQUFDO1FBRW5DLHFCQUFnQixHQUF1QixFQUFFLENBQUM7UUFNOUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLEVBQUU7WUFDYixLQUFLLENBQUMsSUFBSSxHQUFHLEVBQUUsQ0FBQztTQUNuQjtRQUNELElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxFQUFFO1lBQzNCLEtBQUssQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLEdBQUcsSUFBSSxDQUFDO1NBQ25DO1FBQ0QsSUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUM7UUFDbkIsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO1lBQy9DLElBQUksQ0FBQyxTQUFTLEdBQUcsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO1NBQ3RDO0lBQ0wsQ0FBQztJQUVNLE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBWSxFQUFFLFNBQW9CO1FBQ25ELE9BQU8sSUFBSSxZQUFZLENBQUM7WUFDcEIsSUFBSSxFQUFFLElBQUk7WUFDVixTQUFTLEVBQUUsU0FBUztTQUN2QixDQUFDLENBQUM7SUFDUCxDQUFDO0lBRU0sTUFBTSxDQUFDLGNBQWMsQ0FBQyxJQUFZLEVBQUUsVUFBa0IsRUFBRSxZQUErQixRQUFRO1FBQ2xHLE9BQU8sSUFBSSxZQUFZLENBQUM7WUFDcEIsSUFBSSxFQUFFLElBQUk7WUFDVixVQUFVLEVBQUUsVUFBVTtZQUN0QixTQUFTLEVBQUUsU0FBUztTQUN2QixDQUFDLENBQUM7SUFDUCxDQUFDO0lBRU0sTUFBTSxDQUFDLGVBQWUsQ0FBQyxJQUFZLEVBQUUsWUFBMEIsRUFBRSxPQUFvQjtRQUN4RixNQUFNLEtBQUssR0FBVSxFQUFDLElBQUksRUFBRSxJQUFJLEVBQUUsWUFBWSxFQUFFLFlBQVksRUFBQyxDQUFDO1FBQzlELElBQUksT0FBTyxFQUFFLE1BQU0sRUFBRTtZQUNqQixLQUFLLENBQUMsT0FBTyxHQUFHLE9BQU8sQ0FBQztTQUMzQjtRQUNELE9BQU8sSUFBSSxZQUFZLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDbkMsQ0FBQztJQUVNLE1BQU0sQ0FBQyxlQUFlLENBQUMsS0FBWTtRQUN0QyxPQUFPLElBQUksWUFBWSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ25DLENBQUM7SUFFTSxNQUFNLENBQUMsaUJBQWlCLENBQzNCLElBQVksRUFDWixlQUFlLEdBQUcsc0JBQXNCLEVBQ3hDLGVBQTJCLEVBQzNCLG1CQUErQixFQUMvQixhQUF5QixFQUN6QixlQUEyQjtRQUUzQixNQUFNLFdBQVcsR0FBRyxZQUFZLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxlQUFlLENBQUMsQ0FBQztRQUMvRCxJQUFJLGVBQWUsSUFBSSxtQkFBbUIsSUFBSSxhQUFhLElBQUksZUFBZSxFQUFFO1lBQzVFLE1BQU0sV0FBVyxHQUFHLGdCQUFnQixDQUFDLE1BQU0sRUFBRSxDQUFDO1lBQzlDLElBQUksZUFBZSxFQUFFO2dCQUNqQixXQUFXLENBQUMsbUJBQW1CLENBQUMsZUFBZSxDQUFDLENBQUM7YUFDcEQ7WUFDRCxJQUFJLG1CQUFtQixFQUFFO2dCQUNyQixXQUFXLENBQUMsdUJBQXVCLENBQUMsbUJBQW1CLENBQUMsQ0FBQzthQUM1RDtZQUNELElBQUksYUFBYSxFQUFFO2dCQUNmLFdBQVcsQ0FBQyxpQkFBaUIsQ0FBQyxhQUFhLENBQUMsQ0FBQzthQUNoRDtZQUNELElBQUksZUFBZSxFQUFFO2dCQUNqQixXQUFXLENBQUMsbUJBQW1CLENBQUMsZUFBZSxDQUFDLENBQUM7YUFDcEQ7WUFDRCxXQUFXLENBQUMsZUFBZSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1NBQzVDO1FBQ0QsT0FBTyxXQUFXLENBQUM7SUFDdkIsQ0FBQztJQUVNLE1BQU0sQ0FBQyxxQkFBcUIsQ0FDL0IsSUFBWSxFQUNaLFVBQWtDLEVBQ2xDLFlBQTBDLEVBQzFDLE9BQW9DLEVBQ3BDLFVBQVUsR0FBRyxJQUFJLEVBQ2pCLE9BQU8sR0FBRyxJQUFJLEVBQ2QsTUFBTSxHQUFHLElBQUk7UUFFYixNQUFNLGNBQWMsR0FBRyxZQUFZLENBQUMsZUFBZSxDQUFDO1lBQ2hELElBQUksRUFBRSxnQkFBZ0IsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxhQUFhLENBQUMsVUFBVSxFQUFFLFlBQVksRUFBRSxPQUFPLENBQUMsQ0FBQyxLQUFLLEVBQUU7WUFDeEYsSUFBSSxFQUFFLElBQUk7WUFDVixTQUFTLEVBQUUsMEJBQTBCO1NBQ3hDLENBQUMsQ0FBQztRQUNILFlBQVksQ0FBQyxvQ0FBb0MsQ0FBQyxjQUFjLEVBQUUsVUFBVSxFQUFFLE9BQU8sRUFBRSxNQUFNLENBQUMsQ0FBQztRQUMvRixPQUFPLGNBQWMsQ0FBQztJQUMxQixDQUFDO0lBRU0sTUFBTSxDQUFDLGtDQUFrQyxDQUFDLElBQVksRUFBRSxTQUFvQixFQUFFLFVBQVUsR0FBRyxJQUFJLEVBQUUsT0FBTyxHQUFHLElBQUksRUFBRSxNQUFNLEdBQUcsSUFBSTtRQUNqSSxNQUFNLGVBQWUsR0FBRyxZQUFZLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxTQUFTLENBQUMsQ0FBQztRQUM3RCxZQUFZLENBQUMsb0NBQW9DLENBQUMsZUFBZSxFQUFFLFVBQVUsRUFBRSxPQUFPLEVBQUUsTUFBTSxDQUFDLENBQUM7UUFDaEcsT0FBTyxlQUFlLENBQUM7SUFDM0IsQ0FBQztJQUVPLE1BQU0sQ0FBQyxvQ0FBb0MsQ0FBQyxXQUF5QixFQUFFLFVBQW1CLEVBQUUsT0FBZ0IsRUFBRSxNQUFlO1FBQ2pJLFdBQVcsQ0FBQyxRQUFRLENBQUMsRUFBRSxFQUFFLHVCQUF1QixDQUFDLENBQUM7UUFFbEQsSUFBSSxNQUFNLEVBQUU7WUFDUixXQUFXLENBQUMsUUFBUSxDQUFDLEtBQUssRUFBRSx1QkFBdUIsQ0FBQyxDQUFDO1NBQ3hEO1FBQ0QsSUFBSSxVQUFVLEVBQUU7WUFDWixXQUFXLENBQUMsUUFBUSxDQUFDLFNBQVMsRUFBRSx1QkFBdUIsQ0FBQyxDQUFDO1NBQzVEO1FBQ0QsSUFBSSxPQUFPLEVBQUU7WUFDVCxXQUFXLENBQUMsUUFBUSxDQUFDLGNBQWMsRUFBRSx1QkFBdUIsQ0FBQyxDQUFDO1NBQ2pFO0lBQ0wsQ0FBQztJQUVELFFBQVEsQ0FBQyxhQUE0QjtRQUNqQyxJQUFJLENBQUMsSUFBSSxHQUFHLGFBQWEsQ0FBQztRQUMxQixPQUFPLElBQUksQ0FBQztJQUNoQixDQUFDO0lBRUQsVUFBVSxDQUFDLE1BQW9CO1FBQzNCLElBQUksQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFDO1FBQ3JCLElBQUksQ0FBQyxTQUFTLEdBQUcsU0FBUyxDQUFDLHVCQUF1QixDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLFNBQVMsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQ3RHLE9BQU8sSUFBSSxDQUFDO0lBQ2hCLENBQUM7SUFFRCxjQUFjLENBQUMsVUFBMEI7UUFDckMsSUFBSSxDQUFDLFVBQVUsR0FBRyxVQUFVLENBQUM7UUFDN0IsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFLLENBQUMsWUFBWSxDQUFDLEdBQUcsVUFBVSxDQUFDO1FBQzVDLE9BQU8sSUFBSSxDQUFDO0lBQ2hCLENBQUM7SUFFRCxhQUFhLENBQUMsU0FBaUI7UUFDM0IsSUFBSSxDQUFDLFNBQVMsR0FBRyxTQUFTLENBQUM7UUFDM0IsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFLLENBQUMsV0FBVyxDQUFDLEdBQUcsU0FBUyxDQUFDO1FBQzFDLE9BQU8sSUFBSSxDQUFDO0lBQ2hCLENBQUM7SUFFRCxjQUFjLENBQUMsVUFBa0I7UUFDN0IsSUFBSSxDQUFDLEtBQUssQ0FBQyxVQUFVLEdBQUcsVUFBVSxDQUFDO1FBQ25DLE9BQU8sSUFBSSxDQUFDO0lBQ2hCLENBQUM7SUFFRCxhQUFhLENBQUMsU0FBNEI7UUFDdEMsSUFBSSxDQUFDLEtBQUssQ0FBQyxTQUFTLEdBQUcsU0FBUyxDQUFDO1FBQ2pDLE9BQU8sSUFBSSxDQUFDO0lBQ2hCLENBQUM7SUFFRCxTQUFTLENBQUMsS0FBYTtRQUNuQixJQUFJLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQzFCLElBQUksQ0FBQyxjQUFjLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDM0IsT0FBTyxJQUFJLENBQUM7SUFDaEIsQ0FBQztJQUVELGVBQWUsQ0FBQyxPQUFZO1FBQ3hCLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLFdBQVcsRUFBRTtZQUN6QixJQUFJLENBQUMsS0FBSyxDQUFDLFdBQVcsR0FBRyxFQUFFLENBQUM7U0FDL0I7UUFDRCxJQUFJLENBQUMsS0FBSyxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDckMsT0FBTyxJQUFJLENBQUM7SUFDaEIsQ0FBQztJQUVELGlCQUFpQixDQUFDLE9BQVk7UUFDMUIsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsYUFBYSxFQUFFO1lBQzNCLElBQUksQ0FBQyxLQUFLLENBQUMsYUFBYSxHQUFHLEVBQUUsQ0FBQztTQUNqQztRQUNELElBQUksQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUN2QyxPQUFPLElBQUksQ0FBQztJQUNoQixDQUFDO0lBRUQsWUFBWSxDQUFDLE9BQVksRUFBRSxJQUFZO1FBQ25DLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sRUFBRTtZQUNyQixJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sR0FBRyxFQUFFLENBQUM7U0FDM0I7UUFDRCxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsR0FBRyxPQUFPLENBQUM7UUFDbkMsT0FBTyxJQUFJLENBQUM7SUFDaEIsQ0FBQztJQUVELFFBQVEsQ0FBQyxJQUFTO1FBQ2QsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDO1FBQ3ZCLE9BQU8sSUFBSSxDQUFDO0lBQ2hCLENBQUM7SUFFRCxlQUFlLENBQUMsV0FBNkI7UUFDekMsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLEdBQUcsV0FBVyxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQ3RDLE9BQU8sSUFBSSxDQUFDO0lBQ2hCLENBQUM7SUFFRCxlQUFlLENBQUMsUUFBcUI7UUFDakMsSUFBSSxDQUFDLFFBQVEsR0FBRyxRQUFRLENBQUM7UUFDekIsT0FBTyxJQUFJLENBQUM7SUFDaEIsQ0FBQztJQUVELFlBQVksQ0FBQyxJQUFhLEVBQUUsS0FBYyxFQUFFLFVBQTBCO1FBQ2xFLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLEVBQUUsS0FBSyxFQUFFLFVBQVUsQ0FBQyxDQUFDO1FBQzdELE9BQU8sSUFBSSxDQUFDO0lBQ2hCLENBQUM7SUFFRCxpQkFBaUIsQ0FBQyxLQUFhLEVBQUUsSUFBYSxFQUFFLFVBQTBCO1FBQ3RFLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLEVBQUUsS0FBSyxFQUFFLFVBQVUsQ0FBQyxDQUFDLENBQUM7UUFDekUsT0FBTyxJQUFJLENBQUM7SUFDaEIsQ0FBQztJQUVELG9CQUFvQixDQUFDLGFBQTRCO1FBQzdDLE1BQU0sSUFBSSxHQUFHLGFBQWEsQ0FBQyxTQUFTLEVBQUUsQ0FBQztRQUN2QyxJQUFJLENBQUMsZ0NBQWdDLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDNUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDO1FBQ3BDLE9BQU8sSUFBSSxDQUFDO0lBQ2hCLENBQUM7SUFFTSxRQUFRLENBQUMsSUFBWSxFQUFFLFNBQW9CO1FBQzlDLE1BQU0saUJBQWlCLEdBQUcsWUFBWSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsU0FBUyxDQUFDLENBQUM7UUFDL0QsSUFBSSxDQUFDLGVBQWUsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO1FBQ3hDLE9BQU8saUJBQWlCLENBQUM7SUFDN0IsQ0FBQztJQUVNLGVBQWUsQ0FBQyxZQUEwQjtRQUM3QyxZQUFZLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQzlCLElBQUksSUFBSSxDQUFDLElBQUksRUFBRTtZQUNYLFlBQVksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1NBQ3BDO1FBQ0QsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUM7UUFDakMsT0FBTyxJQUFJLENBQUM7SUFDaEIsQ0FBQztJQUVNLGtCQUFrQixDQUNyQixJQUFZLEVBQ1osVUFBa0MsRUFDbEMscUJBQW1ELEVBQ25ELE9BQW9DLEVBQ3BDLFVBQVUsR0FBRyxJQUFJLEVBQ2pCLE9BQU8sR0FBRyxJQUFJLEVBQ2QsTUFBTSxHQUFHLElBQUk7UUFFYixNQUFNLFlBQVksR0FBRyxZQUFZLENBQUMscUJBQXFCLENBQUMsSUFBSSxFQUFFLFVBQVUsRUFBRSxxQkFBcUIsRUFBRSxPQUFPLEVBQUUsVUFBVSxFQUFFLE9BQU8sRUFBRSxNQUFNLENBQUMsQ0FBQztRQUN2SSxJQUFJLENBQUMsZUFBZSxDQUFDLFlBQVksQ0FBQyxDQUFDO1FBQ25DLE9BQU8sWUFBWSxDQUFDO0lBQ3hCLENBQUM7SUFFTSwrQkFBK0IsQ0FBQyxJQUFZLEVBQUUsU0FBb0IsRUFBRSxVQUFVLEdBQUcsSUFBSSxFQUFFLE9BQU8sR0FBRyxJQUFJLEVBQUUsTUFBTSxHQUFHLElBQUk7UUFDdkgsTUFBTSxZQUFZLEdBQUcsWUFBWSxDQUFDLGtDQUFrQyxDQUFDLElBQUksRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFFLE9BQU8sRUFBRSxNQUFNLENBQUMsQ0FBQztRQUNuSCxJQUFJLENBQUMsZUFBZSxDQUFDLFlBQVksQ0FBQyxDQUFDO1FBQ25DLE9BQU8sWUFBWSxDQUFDO0lBQ3hCLENBQUM7SUFFTSxRQUFRO1FBQ1gsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUU7WUFDZCxNQUFNLElBQUksS0FBSyxDQUFDLDBCQUEwQixDQUFDLENBQUM7U0FDL0M7UUFDRCxPQUFPLElBQUksQ0FBQyxNQUFNLENBQUM7SUFDdkIsQ0FBQztJQUVNLE1BQU07UUFDVCxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRTtZQUNaLE1BQU0sSUFBSSxLQUFLLENBQUMsd0JBQXdCLENBQUMsQ0FBQztTQUM3QztRQUNELE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQztJQUNyQixDQUFDO0lBRU0sTUFBTTtRQUNULE9BQU8sSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO0lBQ3pCLENBQUM7SUFFTSxVQUFVO1FBQ2IsTUFBTSxZQUFZLEdBQVU7WUFDeEIsR0FBRyxJQUFJLENBQUMsS0FBSztTQUNoQixDQUFDO1FBRUYsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxFQUFFLE1BQU0sSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO1lBQ3BFLHFCQUFxQjtZQUNyQixZQUFZLENBQUMsUUFBUSxHQUFHLEVBQUUsQ0FBQztZQUMzQixJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxFQUFFLE1BQU0sRUFBRTtnQkFDN0IsWUFBWSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFDO2FBQ3REO1lBQ0QsSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sRUFBRTtnQkFDdEIsS0FBSyxNQUFNLFVBQVUsSUFBSSxJQUFJLENBQUMsUUFBUSxFQUFFO29CQUNwQyxZQUFZLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsVUFBVSxFQUFFLENBQUMsQ0FBQztpQkFDdkQ7YUFDSjtTQUNKO1FBRUQsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLFdBQVcsRUFBRTtZQUN4QixZQUFZLENBQUMsV0FBVyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLFdBQVcsQ0FBQyxDQUFDO1NBQzFEO1FBQ0QsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLGdCQUFnQixFQUFFO1lBQzdCLFlBQVksQ0FBQyxnQkFBZ0IsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO1NBQ3BFO1FBQ0QsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sRUFBRTtZQUNwQixZQUFZLENBQUMsT0FBTyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1NBQ2xEO1FBQ0QsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLGFBQWEsRUFBRTtZQUMxQixZQUFZLENBQUMsYUFBYSxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLGFBQWEsQ0FBQyxDQUFDO1NBQzlEO1FBQ0QsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sRUFBRTtZQUNwQixZQUFZLENBQUMsT0FBTyxHQUFHLEVBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sRUFBQyxDQUFDO1NBQ2xEO1FBRUQsT0FBTyxZQUFZLENBQUM7SUFDeEIsQ0FBQztJQUVNLFNBQVM7UUFDWixNQUFNLGFBQWEsR0FBdUIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsRUFBQyxHQUFHLElBQUksQ0FBQyxRQUFRLEVBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO1FBQ3BGLE1BQU0sc0JBQXNCLEdBQXVCLElBQUksQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLFNBQVMsRUFBRSxDQUFDLENBQUM7UUFDckcsTUFBTSxnQkFBZ0IsR0FBdUIsRUFBRSxDQUFDO1FBQ2hELE1BQU0scUJBQXFCLEdBQXVCLEVBQUUsQ0FBQztRQUVyRCxJQUFJLGFBQWEsRUFBRSxLQUFLLEVBQUU7WUFDdEIscUJBQXFCLENBQUMsSUFBSSxDQUFDLEdBQUcsYUFBYSxDQUFDLEtBQUssQ0FBQyxDQUFDO1NBQ3REO1FBRUQsS0FBSyxNQUFNLGFBQWEsSUFBSSxJQUFJLENBQUMsZ0JBQWdCLEVBQUU7WUFDL0MsTUFBTSxrQkFBa0IsR0FBZ0IsRUFBQyxHQUFHLGFBQWEsRUFBQyxDQUFDO1lBQzNELElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxVQUFVLEVBQUU7Z0JBQ2hDLGtCQUFrQixDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDO2FBQ2xEO1lBQ0QsSUFBSSxPQUFPLGtCQUFrQixDQUFDLFVBQVUsS0FBSyxRQUFRLEVBQUU7Z0JBQ25ELGtCQUFrQixDQUFDLFVBQVUsR0FBRyxDQUFDLGtCQUFrQixDQUFDLFVBQVUsQ0FBQyxDQUFDO2FBQ25FO1lBQ0Qsa0JBQWtCLENBQUMsVUFBVSxHQUFHLFNBQVMsQ0FBQyx1QkFBdUIsQ0FBQyxrQkFBa0IsQ0FBQyxVQUFVLENBQUMsQ0FBQztZQUNqRyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsQ0FBQztTQUM3QztRQUVELHFCQUFxQixDQUFDLElBQUksQ0FBQyxHQUFHLGdCQUFnQixFQUFFLEdBQUcsc0JBQXNCLENBQUMsQ0FBQztRQUUzRSxJQUFJLENBQUMsYUFBYSxFQUFFO1lBQ2hCLE9BQU8scUJBQXFCLENBQUM7U0FDaEM7UUFFRCxhQUFhLENBQUMsS0FBSyxHQUFHLGFBQWEsQ0FBQyxLQUFLLElBQUksSUFBSSxDQUFDLFNBQVMsQ0FBQztRQUM1RCxJQUFJLE9BQU8sYUFBYSxDQUFDLFVBQVUsS0FBSyxRQUFRLEVBQUU7WUFDOUMsYUFBYSxDQUFDLFVBQVUsR0FBRyxDQUFDLGFBQWEsQ0FBQyxVQUFVLENBQUMsQ0FBQztTQUN6RDtRQUNELGFBQWEsQ0FBQyxVQUFVLEdBQUcsU0FBUyxDQUFDLHVCQUF1QixDQUFDLGFBQWEsQ0FBQyxVQUFVLElBQUksSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQ3pHLElBQUkscUJBQXFCLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTtZQUNsQyxhQUFhLENBQUMsS0FBSyxHQUFHLHFCQUFxQixDQUFDO1NBQy9DO1FBRUQsSUFBSSxDQUFDLGFBQWEsQ0FBQyxNQUFNLEVBQUU7WUFDdkIsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLGtCQUFrQixFQUFFLENBQUM7WUFDekMsSUFBSSxNQUFNLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTtnQkFDbkIsYUFBYSxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUM7YUFDakM7U0FDSjtRQUVELE9BQU8sQ0FBQyxhQUFhLENBQUMsQ0FBQztJQUMzQixDQUFDO0lBRU8sY0FBYyxDQUFDLElBQWEsRUFBRSxLQUFjLEVBQUUsVUFBMEI7UUFDNUUsTUFBTSxRQUFRLEdBQWdCLEVBQUUsQ0FBQztRQUNqQyxJQUFJLElBQUksRUFBRTtZQUNOLFFBQVEsQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDO1NBQ3hCO1FBQ0QsSUFBSSxLQUFLLEVBQUU7WUFDUCxRQUFRLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQztTQUMxQjtRQUNELElBQUksVUFBVSxFQUFFO1lBQ1osUUFBUSxDQUFDLFVBQVUsR0FBRyxVQUFVLENBQUM7U0FDcEM7UUFDRCxPQUFPLFFBQVEsQ0FBQztJQUNwQixDQUFDO0lBRU8sZ0NBQWdDLENBQUMsU0FBNkI7UUFDbEUsS0FBSyxNQUFNLFFBQVEsSUFBSSxTQUFTLEVBQUU7WUFDOUIsSUFBSSxRQUFRLENBQUMsVUFBVSxFQUFFO2dCQUNyQixRQUFRLENBQUMsVUFBVSxHQUFHLFNBQVMsQ0FBQyxvQkFBb0IsQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLE9BQU8sUUFBUSxDQUFDLFVBQVUsS0FBSyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDLENBQUM7YUFDL0o7WUFDRCxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxFQUFFO2dCQUMvQixJQUFJLENBQUMsZ0NBQWdDLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDO2FBQ3pEO1NBQ0o7SUFDTCxDQUFDO0lBRU8sa0JBQWtCO1FBQ3RCLE1BQU0sTUFBTSxHQUFlLEVBQUUsQ0FBQztRQUM5QixJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsV0FBVyxFQUFFLE1BQU0sRUFBRTtZQUNoQyxNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxXQUFXLENBQUMsQ0FBQztTQUMxQztRQUNELElBQUksSUFBSSxDQUFDLE1BQU0sRUFBRTtZQUNiLGlGQUFpRjtZQUNqRiwyR0FBMkc7WUFDM0csZ0RBQWdEO1lBQ2hELElBQUksQ0FBQyxNQUFNLENBQUMsa0JBQWtCLEVBQUUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUU7Z0JBQ3pDLElBQUksTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUU7b0JBQ3ZCLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7aUJBQ2xCO1lBQ0wsQ0FBQyxDQUFDLENBQUM7U0FDTjtRQUNELE9BQU8sTUFBTSxDQUFDO0lBQ2xCLENBQUM7Q0FDSjtBQUVELE1BQU0sT0FBTyxnQkFBZ0I7SUFHekIsWUFBWSxJQUFXO1FBQ25CLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxJQUFJLEVBQUUsQ0FBQztRQUN2QixJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUU7WUFDdkIsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDO1NBQy9CO0lBQ0wsQ0FBQztJQUVNLE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBVztRQUM1QixPQUFPLElBQUksZ0JBQWdCLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDdEMsQ0FBQztJQUVELGNBQWMsQ0FBQyxVQUEwQjtRQUNyQyxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsR0FBRyxVQUFVLENBQUM7UUFDbEMsT0FBTyxJQUFJLENBQUM7SUFDaEIsQ0FBQztJQUVELGFBQWEsQ0FBQyxTQUFpQjtRQUMzQixJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsR0FBRyxTQUFTLENBQUM7UUFDaEMsT0FBTyxJQUFJLENBQUM7SUFDaEIsQ0FBQztJQUVELGFBQWEsQ0FBQyxVQUFvQyxFQUFFLFlBQThDLEVBQUUsT0FBc0M7UUFDdEksSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLEdBQUc7WUFDbEIsVUFBVSxFQUFFLFVBQVU7WUFDdEIsWUFBWSxFQUFFLFlBQVk7U0FDN0IsQ0FBQztRQUNGLElBQUksT0FBTyxFQUFFO1lBQ1QsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxHQUFHLE9BQU8sQ0FBQztTQUN6QztRQUNELE9BQU8sSUFBSSxDQUFDO0lBQ2hCLENBQUM7SUFFRCxtQkFBbUIsQ0FBQyxTQUFvQjtRQUNwQyxJQUFJLENBQUMsSUFBSSxDQUFDLGVBQWUsR0FBRyxTQUFTLENBQUM7UUFDdEMsT0FBTyxJQUFJLENBQUM7SUFDaEIsQ0FBQztJQUVELHVCQUF1QixDQUFDLFNBQW9CO1FBQ3hDLElBQUksQ0FBQyxJQUFJLENBQUMsbUJBQW1CLEdBQUcsU0FBUyxDQUFDO1FBQzFDLE9BQU8sSUFBSSxDQUFDO0lBQ2hCLENBQUM7SUFFRCxpQkFBaUIsQ0FBQyxTQUFvQjtRQUNsQyxJQUFJLENBQUMsSUFBSSxDQUFDLGFBQWEsR0FBRyxTQUFTLENBQUM7UUFDcEMsT0FBTyxJQUFJLENBQUM7SUFDaEIsQ0FBQztJQUVELG1CQUFtQixDQUFDLFNBQW9CO1FBQ3BDLElBQUksQ0FBQyxJQUFJLENBQUMsZUFBZSxHQUFHLFNBQVMsQ0FBQztRQUN0QyxPQUFPLElBQUksQ0FBQztJQUNoQixDQUFDO0lBRUQsS0FBSztRQUNELE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQztJQUNyQixDQUFDO0NBQ0oiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1R5cGV9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtEYXRhLCBMb2FkQ2hpbGRyZW4sIFJvdXRlLCBSb3V0ZXN9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5cbmltcG9ydCB7TW5nQWN0aW9uUm91dGVDb21wb25lbnR9IGZyb20gJy4uL2NvbXBvbmVudHMvYWN0aW9uJztcbmltcG9ydCB7TW5nTWFpbkxheW91dENvbXBvbmVudH0gZnJvbSAnLi4vY29tcG9uZW50cy9sYXlvdXQnO1xuaW1wb3J0IHtNbmdUYWJsZXZpZXdSb3V0ZUNvbXBvbmVudH0gZnJvbSAnLi4vY29tcG9uZW50cy90YWJsZXZpZXcnO1xuaW1wb3J0IHtJVGFibGV2aWV3RGF0YVByb3ZpZGVyfSBmcm9tICcuLi9kYXRhLXByb3ZpZGVycyc7XG5pbXBvcnQge0FjdGlvbkRlc2NyaXB0b3IsIFRhYmxldmlld0Rlc2NyaXB0b3J9IGZyb20gJy4uL2Rlc2NyaXB0b3JzJztcbmltcG9ydCB7TW5nTWVudUl0ZW19IGZyb20gJy4uL21vZGVscyc7XG5pbXBvcnQge1JvdXRlVXRpbH0gZnJvbSAnLi4vdXRpbHMvcm91dGUudXRpbCc7XG5pbXBvcnQge0JyZWFkY3J1bWJUeXBlLCBNbmdSb3V0ZXJEYXRhfSBmcm9tICcuL21vZGVscyc7XG5cbmV4cG9ydCBjbGFzcyBSb3V0ZXNCdWlsZGVyIHtcbiAgICBwcml2YXRlIHJlYWRvbmx5IGxheW91dFJvdXRlPzogUm91dGVCdWlsZGVyO1xuICAgIHByaXZhdGUgcm91dGVzOiBBcnJheTxSb3V0ZUJ1aWxkZXI+ID0gW107XG4gICAgcHJpdmF0ZSBjdXJyZW50Um91dGU/OiBSb3V0ZUJ1aWxkZXI7XG5cbiAgICBwcml2YXRlIGNvbnN0cnVjdG9yKGxheW91dFJvdXRlPzogUm91dGVCdWlsZGVyKSB7XG4gICAgICAgIHRoaXMubGF5b3V0Um91dGUgPSBsYXlvdXRSb3V0ZT8ud2l0aFJvb3QodGhpcyk7XG4gICAgICAgIHRoaXMuY3VycmVudFJvdXRlID0gbGF5b3V0Um91dGU7XG4gICAgfVxuXG4gICAgcHVibGljIHN0YXRpYyBjcmVhdGUoKTogUm91dGVzQnVpbGRlciB7XG4gICAgICAgIHJldHVybiBuZXcgUm91dGVzQnVpbGRlcigpO1xuICAgIH1cblxuICAgIHB1YmxpYyBzdGF0aWMgY3JlYXRlV2l0aExheW91dChcbiAgICAgICAgbGF5b3V0Q29tcG9uZW50ID0gTW5nTWFpbkxheW91dENvbXBvbmVudCxcbiAgICAgICAgdG9wYmFyQ29tcG9uZW50PzogVHlwZTxhbnk+LFxuICAgICAgICBicmVhZGNydW1iQ29tcG9uZW50PzogVHlwZTxhbnk+LFxuICAgICAgICBtZW51Q29tcG9uZW50PzogVHlwZTxhbnk+LFxuICAgICAgICBmb290ZXJDb21wb25lbnQ/OiBUeXBlPGFueT5cbiAgICApOiBSb3V0ZXNCdWlsZGVyIHtcbiAgICAgICAgY29uc3QgbGF5b3V0Um91dGUgPSBSb3V0ZUJ1aWxkZXIuY3JlYXRlTGF5b3V0Um91dGUoJycsIGxheW91dENvbXBvbmVudCwgdG9wYmFyQ29tcG9uZW50LCBicmVhZGNydW1iQ29tcG9uZW50LCBtZW51Q29tcG9uZW50LCBmb290ZXJDb21wb25lbnQpO1xuICAgICAgICByZXR1cm4gbmV3IFJvdXRlc0J1aWxkZXIobGF5b3V0Um91dGUpO1xuICAgIH1cblxuICAgIHB1YmxpYyBhZGRBbmd1bGFyUm91dGUocm91dGU6IFJvdXRlKTogdGhpcyB7XG4gICAgICAgIHJldHVybiB0aGlzLmFkZFJvdXRlQnVpbGRlcihSb3V0ZUJ1aWxkZXIuY3JlYXRlRnJvbVJvdXRlKHJvdXRlKSk7XG4gICAgfVxuXG4gICAgcHVibGljIGFkZFJvdXRlUmVkaXJlY3QocGF0aDogc3RyaW5nLCByZWRpcmVjdFRvOiBzdHJpbmcsIHBhdGhNYXRjaDogJ2Z1bGwnIHwgJ3ByZWZpeCcgPSAncHJlZml4Jyk6IHRoaXMge1xuICAgICAgICByZXR1cm4gdGhpcy5hZGRSb3V0ZUJ1aWxkZXIoUm91dGVCdWlsZGVyLmNyZWF0ZVJlZGlyZWN0KHBhdGgsIHJlZGlyZWN0VG8sIHBhdGhNYXRjaCkpO1xuICAgIH1cblxuICAgIHB1YmxpYyBhZGRMYXp5Um91dGUocGF0aDogc3RyaW5nLCBsb2FkQ2hpbGRyZW46IExvYWRDaGlsZHJlbiwgY2FuTG9hZD86IEFycmF5PGFueT4pOiB0aGlzIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuYWRkUm91dGVCdWlsZGVyKFJvdXRlQnVpbGRlci5jcmVhdGVMYXp5Um91dGUocGF0aCwgbG9hZENoaWxkcmVuLCBjYW5Mb2FkKSk7XG4gICAgfVxuXG4gICAgcHVibGljIGFkZFJvdXRlKHBhdGg6IHN0cmluZywgY29tcG9uZW50OiBUeXBlPGFueT4pOiB0aGlzIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuYWRkUm91dGVCdWlsZGVyKFJvdXRlQnVpbGRlci5jcmVhdGUocGF0aCwgY29tcG9uZW50KSk7XG4gICAgfVxuXG4gICAgcHVibGljIGFkZFRhYmxldmlld1JvdXRlczxULCBTPihcbiAgICAgICAgcGF0aDogc3RyaW5nLFxuICAgICAgICBkZXNjcmlwdG9yOiBUYWJsZXZpZXdEZXNjcmlwdG9yPFQ+LFxuICAgICAgICB0YWJsZXZpZXdEYXRhUHJvdmlkZXI6IElUYWJsZXZpZXdEYXRhUHJvdmlkZXI8VCwgUz4sXG4gICAgICAgIGFjdGlvbnM/OiBBcnJheTxBY3Rpb25EZXNjcmlwdG9yPFQ+PixcbiAgICAgICAgaGFzRGV0YWlscyA9IHRydWUsXG4gICAgICAgIGhhc0VkaXQgPSB0cnVlLFxuICAgICAgICBoYXNBZGQgPSB0cnVlXG4gICAgKTogdGhpcyB7XG4gICAgICAgIHJldHVybiB0aGlzLmFkZFJvdXRlQnVpbGRlcihSb3V0ZUJ1aWxkZXIuY3JlYXRlVGFibGV2aWV3Um91dGVzKHBhdGgsIGRlc2NyaXB0b3IsIHRhYmxldmlld0RhdGFQcm92aWRlciwgYWN0aW9ucywgaGFzRGV0YWlscywgaGFzRWRpdCwgaGFzQWRkKSk7XG4gICAgfVxuXG4gICAgcHVibGljIGFkZFRhYmxldmlld1JvdXRlc0Zyb21Db21wb25lbnQocGF0aDogc3RyaW5nLCBjb21wb25lbnQ6IFR5cGU8YW55PiwgaGFzRGV0YWlscyA9IHRydWUsIGhhc0VkaXQgPSB0cnVlLCBoYXNBZGQgPSB0cnVlKTogdGhpcyB7XG4gICAgICAgIHJldHVybiB0aGlzLmFkZFJvdXRlQnVpbGRlcihSb3V0ZUJ1aWxkZXIuY3JlYXRlVGFibGV2aWV3Um91dGVzRnJvbUNvbXBvbmVudChwYXRoLCBjb21wb25lbnQsIGhhc0RldGFpbHMsIGhhc0VkaXQsIGhhc0FkZCkpO1xuICAgIH1cblxuICAgIHB1YmxpYyBhZGRSb3V0ZUJ1aWxkZXIocm91dGVCdWlsZGVyOiBSb3V0ZUJ1aWxkZXIpOiB0aGlzIHtcbiAgICAgICAgdGhpcy5jdXJyZW50Um91dGUgPSByb3V0ZUJ1aWxkZXIud2l0aFJvb3QodGhpcyk7XG4gICAgICAgIHRoaXMucm91dGVzLnB1c2gocm91dGVCdWlsZGVyKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgcHVibGljIHRvUm91dGUoKTogUm91dGVCdWlsZGVyIHtcbiAgICAgICAgaWYgKCF0aGlzLmN1cnJlbnRSb3V0ZSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdObyByb3V0ZXMgd2VyZSBhZGRlZCEnKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5jdXJyZW50Um91dGU7XG4gICAgfVxuXG4gICAgcHVibGljIGJ1aWxkUm91dGVzKCk6IFJvdXRlcyB7XG4gICAgICAgIGxldCBhbmd1bGFyUm91dGVzOiBSb3V0ZXMgPSBbXTtcbiAgICAgICAgZm9yIChjb25zdCByb3V0ZSBvZiB0aGlzLnJvdXRlcykge1xuICAgICAgICAgICAgYW5ndWxhclJvdXRlcy5wdXNoKHJvdXRlLmJ1aWxkUm91dGUoKSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5sYXlvdXRSb3V0ZSkge1xuICAgICAgICAgICAgY29uc3QgbGF5b3V0QW5ndWxhclJvdXRlID0gdGhpcy5sYXlvdXRSb3V0ZS5idWlsZFJvdXRlKCk7XG4gICAgICAgICAgICBpZiAoYW5ndWxhclJvdXRlcy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgbGF5b3V0QW5ndWxhclJvdXRlLmNoaWxkcmVuID0gYW5ndWxhclJvdXRlcztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGFuZ3VsYXJSb3V0ZXMgPSBbbGF5b3V0QW5ndWxhclJvdXRlXTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBhbmd1bGFyUm91dGVzO1xuICAgIH1cblxuICAgIHB1YmxpYyBidWlsZE1lbnUoKTogQXJyYXk8TW5nTWVudUl0ZW0+IHtcbiAgICAgICAgY29uc3QgbWVudUl0ZW1zOiBBcnJheTxNbmdNZW51SXRlbT4gPSBbXTtcbiAgICAgICAgZm9yIChjb25zdCByb3V0ZSBvZiB0aGlzLnJvdXRlcykge1xuICAgICAgICAgICAgbWVudUl0ZW1zLnB1c2goLi4ucm91dGUuYnVpbGRNZW51KCkpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBtZW51SXRlbXMuZmxhdCgpO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIFJvdXRlQnVpbGRlciB7XG4gICAgcHJpdmF0ZSByZWFkb25seSByb3V0ZTogUm91dGU7XG4gICAgcHJpdmF0ZSByb3V0ZVBhdGg6IEFycmF5PHN0cmluZz4gPSBbXTtcbiAgICBwcml2YXRlIHJvb3Q/OiBSb3V0ZXNCdWlsZGVyO1xuICAgIHByaXZhdGUgcGFyZW50PzogUm91dGVCdWlsZGVyO1xuICAgIHByaXZhdGUgY2hpbGRyZW46IEFycmF5PFJvdXRlQnVpbGRlcj4gPSBbXTtcbiAgICBwcml2YXRlIG1lbnVJdGVtPzogTW5nTWVudUl0ZW07XG4gICAgcHJpdmF0ZSBtZW51SXRlbUNoaWxkcmVuOiBBcnJheTxNbmdNZW51SXRlbT4gPSBbXTtcblxuICAgIHByaXZhdGUgYnJlYWRjcnVtYj86IEJyZWFkY3J1bWJUeXBlO1xuICAgIHByaXZhdGUgcGFnZVRpdGxlPzogc3RyaW5nO1xuXG4gICAgcHJpdmF0ZSBjb25zdHJ1Y3Rvcihyb3V0ZTogUm91dGUpIHtcbiAgICAgICAgaWYgKCFyb3V0ZS5kYXRhKSB7XG4gICAgICAgICAgICByb3V0ZS5kYXRhID0ge307XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFyb3V0ZS5kYXRhWydicmVhZGNydW1iJ10pIHtcbiAgICAgICAgICAgIHJvdXRlLmRhdGFbJ2JyZWFkY3J1bWInXSA9IG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5yb3V0ZSA9IHJvdXRlO1xuICAgICAgICBpZiAodGhpcy5yb3V0ZS5wYXRoICYmIHRoaXMucm91dGUucGF0aC5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICB0aGlzLnJvdXRlUGF0aCA9IFt0aGlzLnJvdXRlLnBhdGhdO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIHN0YXRpYyBjcmVhdGUocGF0aDogc3RyaW5nLCBjb21wb25lbnQ6IFR5cGU8YW55Pik6IFJvdXRlQnVpbGRlciB7XG4gICAgICAgIHJldHVybiBuZXcgUm91dGVCdWlsZGVyKHtcbiAgICAgICAgICAgIHBhdGg6IHBhdGgsXG4gICAgICAgICAgICBjb21wb25lbnQ6IGNvbXBvbmVudFxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgc3RhdGljIGNyZWF0ZVJlZGlyZWN0KHBhdGg6IHN0cmluZywgcmVkaXJlY3RUbzogc3RyaW5nLCBwYXRoTWF0Y2g6ICdmdWxsJyB8ICdwcmVmaXgnID0gJ3ByZWZpeCcpOiBSb3V0ZUJ1aWxkZXIge1xuICAgICAgICByZXR1cm4gbmV3IFJvdXRlQnVpbGRlcih7XG4gICAgICAgICAgICBwYXRoOiBwYXRoLFxuICAgICAgICAgICAgcmVkaXJlY3RUbzogcmVkaXJlY3RUbyxcbiAgICAgICAgICAgIHBhdGhNYXRjaDogcGF0aE1hdGNoXG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHB1YmxpYyBzdGF0aWMgY3JlYXRlTGF6eVJvdXRlKHBhdGg6IHN0cmluZywgbG9hZENoaWxkcmVuOiBMb2FkQ2hpbGRyZW4sIGNhbkxvYWQ/OiBBcnJheTxhbnk+KTogUm91dGVCdWlsZGVyIHtcbiAgICAgICAgY29uc3Qgcm91dGU6IFJvdXRlID0ge3BhdGg6IHBhdGgsIGxvYWRDaGlsZHJlbjogbG9hZENoaWxkcmVufTtcbiAgICAgICAgaWYgKGNhbkxvYWQ/Lmxlbmd0aCkge1xuICAgICAgICAgICAgcm91dGUuY2FuTG9hZCA9IGNhbkxvYWQ7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG5ldyBSb3V0ZUJ1aWxkZXIocm91dGUpO1xuICAgIH1cblxuICAgIHB1YmxpYyBzdGF0aWMgY3JlYXRlRnJvbVJvdXRlKHJvdXRlOiBSb3V0ZSk6IFJvdXRlQnVpbGRlciB7XG4gICAgICAgIHJldHVybiBuZXcgUm91dGVCdWlsZGVyKHJvdXRlKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgc3RhdGljIGNyZWF0ZUxheW91dFJvdXRlKFxuICAgICAgICBwYXRoOiBzdHJpbmcsXG4gICAgICAgIGxheW91dENvbXBvbmVudCA9IE1uZ01haW5MYXlvdXRDb21wb25lbnQsXG4gICAgICAgIHRvcGJhckNvbXBvbmVudD86IFR5cGU8YW55PixcbiAgICAgICAgYnJlYWRjcnVtYkNvbXBvbmVudD86IFR5cGU8YW55PixcbiAgICAgICAgbWVudUNvbXBvbmVudD86IFR5cGU8YW55PixcbiAgICAgICAgZm9vdGVyQ29tcG9uZW50PzogVHlwZTxhbnk+XG4gICAgKTogUm91dGVCdWlsZGVyIHtcbiAgICAgICAgY29uc3QgbGF5b3V0Um91dGUgPSBSb3V0ZUJ1aWxkZXIuY3JlYXRlKHBhdGgsIGxheW91dENvbXBvbmVudCk7XG4gICAgICAgIGlmICh0b3BiYXJDb21wb25lbnQgfHwgYnJlYWRjcnVtYkNvbXBvbmVudCB8fCBtZW51Q29tcG9uZW50IHx8IGZvb3RlckNvbXBvbmVudCkge1xuICAgICAgICAgICAgY29uc3QgZGF0YUJ1aWxkZXIgPSBSb3V0ZURhdGFCdWlsZGVyLmNyZWF0ZSgpO1xuICAgICAgICAgICAgaWYgKHRvcGJhckNvbXBvbmVudCkge1xuICAgICAgICAgICAgICAgIGRhdGFCdWlsZGVyLndpdGhUb3BiYXJDb21wb25lbnQodG9wYmFyQ29tcG9uZW50KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChicmVhZGNydW1iQ29tcG9uZW50KSB7XG4gICAgICAgICAgICAgICAgZGF0YUJ1aWxkZXIud2l0aEJyZWFkY3J1bWJDb21wb25lbnQoYnJlYWRjcnVtYkNvbXBvbmVudCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAobWVudUNvbXBvbmVudCkge1xuICAgICAgICAgICAgICAgIGRhdGFCdWlsZGVyLndpdGhNZW51Q29tcG9uZW50KG1lbnVDb21wb25lbnQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGZvb3RlckNvbXBvbmVudCkge1xuICAgICAgICAgICAgICAgIGRhdGFCdWlsZGVyLndpdGhGb290ZXJDb21wb25lbnQoZm9vdGVyQ29tcG9uZW50KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGxheW91dFJvdXRlLndpdGhEYXRhQnVpbGRlcihkYXRhQnVpbGRlcik7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGxheW91dFJvdXRlO1xuICAgIH1cblxuICAgIHB1YmxpYyBzdGF0aWMgY3JlYXRlVGFibGV2aWV3Um91dGVzPFQsIFM+KFxuICAgICAgICBwYXRoOiBzdHJpbmcsXG4gICAgICAgIGRlc2NyaXB0b3I6IFRhYmxldmlld0Rlc2NyaXB0b3I8VD4sXG4gICAgICAgIGRhdGFQcm92aWRlcjogSVRhYmxldmlld0RhdGFQcm92aWRlcjxULCBTPixcbiAgICAgICAgYWN0aW9ucz86IEFycmF5PEFjdGlvbkRlc2NyaXB0b3I8VD4+LFxuICAgICAgICBoYXNEZXRhaWxzID0gdHJ1ZSxcbiAgICAgICAgaGFzRWRpdCA9IHRydWUsXG4gICAgICAgIGhhc0FkZCA9IHRydWVcbiAgICApOiBSb3V0ZUJ1aWxkZXIge1xuICAgICAgICBjb25zdCB0YWJsZXZpZXdSb3V0ZSA9IFJvdXRlQnVpbGRlci5jcmVhdGVGcm9tUm91dGUoe1xuICAgICAgICAgICAgZGF0YTogUm91dGVEYXRhQnVpbGRlci5jcmVhdGUoKS53aXRoVGFibGV2aWV3KGRlc2NyaXB0b3IsIGRhdGFQcm92aWRlciwgYWN0aW9ucykuYnVpbGQoKSxcbiAgICAgICAgICAgIHBhdGg6IHBhdGgsXG4gICAgICAgICAgICBjb21wb25lbnQ6IE1uZ1RhYmxldmlld1JvdXRlQ29tcG9uZW50XG4gICAgICAgIH0pO1xuICAgICAgICBSb3V0ZUJ1aWxkZXIuYWRkQWN0aW9uc1N1YnJvdXRlc1RvVGFibGV2aWV3UGFyZW50KHRhYmxldmlld1JvdXRlLCBoYXNEZXRhaWxzLCBoYXNFZGl0LCBoYXNBZGQpO1xuICAgICAgICByZXR1cm4gdGFibGV2aWV3Um91dGU7XG4gICAgfVxuXG4gICAgcHVibGljIHN0YXRpYyBjcmVhdGVUYWJsZXZpZXdSb3V0ZXNGcm9tQ29tcG9uZW50KHBhdGg6IHN0cmluZywgY29tcG9uZW50OiBUeXBlPGFueT4sIGhhc0RldGFpbHMgPSB0cnVlLCBoYXNFZGl0ID0gdHJ1ZSwgaGFzQWRkID0gdHJ1ZSk6IFJvdXRlQnVpbGRlciB7XG4gICAgICAgIGNvbnN0IGFjdGlvbkNydWRSb3V0ZSA9IFJvdXRlQnVpbGRlci5jcmVhdGUocGF0aCwgY29tcG9uZW50KTtcbiAgICAgICAgUm91dGVCdWlsZGVyLmFkZEFjdGlvbnNTdWJyb3V0ZXNUb1RhYmxldmlld1BhcmVudChhY3Rpb25DcnVkUm91dGUsIGhhc0RldGFpbHMsIGhhc0VkaXQsIGhhc0FkZCk7XG4gICAgICAgIHJldHVybiBhY3Rpb25DcnVkUm91dGU7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzdGF0aWMgYWRkQWN0aW9uc1N1YnJvdXRlc1RvVGFibGV2aWV3UGFyZW50KHBhcmVudFJvdXRlOiBSb3V0ZUJ1aWxkZXIsIGhhc0RldGFpbHM6IGJvb2xlYW4sIGhhc0VkaXQ6IGJvb2xlYW4sIGhhc0FkZDogYm9vbGVhbikge1xuICAgICAgICBwYXJlbnRSb3V0ZS5hZGRDaGlsZCgnJywgTW5nQWN0aW9uUm91dGVDb21wb25lbnQpO1xuXG4gICAgICAgIGlmIChoYXNBZGQpIHtcbiAgICAgICAgICAgIHBhcmVudFJvdXRlLmFkZENoaWxkKCdhZGQnLCBNbmdBY3Rpb25Sb3V0ZUNvbXBvbmVudCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGhhc0RldGFpbHMpIHtcbiAgICAgICAgICAgIHBhcmVudFJvdXRlLmFkZENoaWxkKCc6aXRlbUlkJywgTW5nQWN0aW9uUm91dGVDb21wb25lbnQpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChoYXNFZGl0KSB7XG4gICAgICAgICAgICBwYXJlbnRSb3V0ZS5hZGRDaGlsZCgnOml0ZW1JZC9lZGl0JywgTW5nQWN0aW9uUm91dGVDb21wb25lbnQpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgd2l0aFJvb3Qocm91dGVzQnVpbGRlcjogUm91dGVzQnVpbGRlcik6IHRoaXMge1xuICAgICAgICB0aGlzLnJvb3QgPSByb3V0ZXNCdWlsZGVyO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICB3aXRoUGFyZW50KHBhcmVudDogUm91dGVCdWlsZGVyKTogdGhpcyB7XG4gICAgICAgIHRoaXMucGFyZW50ID0gcGFyZW50O1xuICAgICAgICB0aGlzLnJvdXRlUGF0aCA9IFJvdXRlVXRpbC5yZW1vdmVFbXB0eVBhdGhTZWdtZW50cyhbLi4udGhpcy5wYXJlbnQucm91dGVQYXRoLCB0aGlzLnJvdXRlLnBhdGggPz8gJyddKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgd2l0aEJyZWFkY3J1bWIoYnJlYWRjcnVtYjogQnJlYWRjcnVtYlR5cGUpOiB0aGlzIHtcbiAgICAgICAgdGhpcy5icmVhZGNydW1iID0gYnJlYWRjcnVtYjtcbiAgICAgICAgdGhpcy5yb3V0ZS5kYXRhIVsnYnJlYWRjcnVtYiddID0gYnJlYWRjcnVtYjtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgd2l0aFBhZ2VUaXRsZShwYWdlVGl0bGU6IHN0cmluZyk6IHRoaXMge1xuICAgICAgICB0aGlzLnBhZ2VUaXRsZSA9IHBhZ2VUaXRsZTtcbiAgICAgICAgdGhpcy5yb3V0ZS5kYXRhIVsncGFnZVRpdGxlJ10gPSBwYWdlVGl0bGU7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHdpdGhSZWRpcmVjdFRvKHJlZGlyZWN0VG86IHN0cmluZyk6IHRoaXMge1xuICAgICAgICB0aGlzLnJvdXRlLnJlZGlyZWN0VG8gPSByZWRpcmVjdFRvO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICB3aXRoUGF0aE1hdGNoKHBhdGhNYXRjaDogJ2Z1bGwnIHwgJ3ByZWZpeCcpOiB0aGlzIHtcbiAgICAgICAgdGhpcy5yb3V0ZS5wYXRoTWF0Y2ggPSBwYXRoTWF0Y2g7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHdpdGhUaXRsZSh0aXRsZTogc3RyaW5nKTogdGhpcyB7XG4gICAgICAgIHRoaXMud2l0aFBhZ2VUaXRsZSh0aXRsZSk7XG4gICAgICAgIHRoaXMud2l0aEJyZWFkY3J1bWIodGl0bGUpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICB3aXRoQ2FuQWN0aXZhdGUoZGlUb2tlbjogYW55KTogdGhpcyB7XG4gICAgICAgIGlmICghdGhpcy5yb3V0ZS5jYW5BY3RpdmF0ZSkge1xuICAgICAgICAgICAgdGhpcy5yb3V0ZS5jYW5BY3RpdmF0ZSA9IFtdO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMucm91dGUuY2FuQWN0aXZhdGUucHVzaChkaVRva2VuKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgd2l0aENhbkRlYWN0aXZhdGUoZGlUb2tlbjogYW55KTogdGhpcyB7XG4gICAgICAgIGlmICghdGhpcy5yb3V0ZS5jYW5EZWFjdGl2YXRlKSB7XG4gICAgICAgICAgICB0aGlzLnJvdXRlLmNhbkRlYWN0aXZhdGUgPSBbXTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnJvdXRlLmNhbkRlYWN0aXZhdGUucHVzaChkaVRva2VuKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgd2l0aFJlc29sdmVyKGRpVG9rZW46IGFueSwgbmFtZTogc3RyaW5nKTogdGhpcyB7XG4gICAgICAgIGlmICghdGhpcy5yb3V0ZS5yZXNvbHZlKSB7XG4gICAgICAgICAgICB0aGlzLnJvdXRlLnJlc29sdmUgPSB7fTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnJvdXRlLnJlc29sdmVbbmFtZV0gPSBkaVRva2VuO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICB3aXRoRGF0YShkYXRhOiBhbnkpOiB0aGlzIHtcbiAgICAgICAgdGhpcy5yb3V0ZS5kYXRhID0gZGF0YTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgd2l0aERhdGFCdWlsZGVyKGRhdGFCdWlsZGVyOiBSb3V0ZURhdGFCdWlsZGVyKTogdGhpcyB7XG4gICAgICAgIHRoaXMucm91dGUuZGF0YSA9IGRhdGFCdWlsZGVyLmJ1aWxkKCk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHdpdGhNbmdNZW51SXRlbShtZW51SXRlbTogTW5nTWVudUl0ZW0pOiB0aGlzIHtcbiAgICAgICAgdGhpcy5tZW51SXRlbSA9IG1lbnVJdGVtO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICB3aXRoTWVudUl0ZW0oaWNvbj86IHN0cmluZywgbGFiZWw/OiBzdHJpbmcsIHJvdXRlckxpbms/OiBBcnJheTxzdHJpbmc+KTogdGhpcyB7XG4gICAgICAgIHRoaXMubWVudUl0ZW0gPSB0aGlzLmNyZWF0ZU1lbnVJdGVtKGljb24sIGxhYmVsLCByb3V0ZXJMaW5rKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgd2l0aE1lbnVJdGVtQ2hpbGQobGFiZWw6IHN0cmluZywgaWNvbj86IHN0cmluZywgcm91dGVyTGluaz86IEFycmF5PHN0cmluZz4pOiB0aGlzIHtcbiAgICAgICAgdGhpcy5tZW51SXRlbUNoaWxkcmVuLnB1c2godGhpcy5jcmVhdGVNZW51SXRlbShpY29uLCBsYWJlbCwgcm91dGVyTGluaykpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICB3aXRoTWVudUl0ZW1DaGlsZHJlbihyb3V0ZXNCdWlsZGVyOiBSb3V0ZXNCdWlsZGVyKTogdGhpcyB7XG4gICAgICAgIGNvbnN0IG1lbnUgPSByb3V0ZXNCdWlsZGVyLmJ1aWxkTWVudSgpO1xuICAgICAgICB0aGlzLmFkanVzdE1lbnVSb3V0ZXJMaW5rc0Zyb21CdWlsZGVyKG1lbnUpO1xuICAgICAgICB0aGlzLm1lbnVJdGVtQ2hpbGRyZW4ucHVzaCguLi5tZW51KTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgcHVibGljIGFkZENoaWxkKHBhdGg6IHN0cmluZywgY29tcG9uZW50OiBUeXBlPGFueT4pOiBSb3V0ZUJ1aWxkZXIge1xuICAgICAgICBjb25zdCBjaGlsZFJvdXRlQnVpbGRlciA9IFJvdXRlQnVpbGRlci5jcmVhdGUocGF0aCwgY29tcG9uZW50KTtcbiAgICAgICAgdGhpcy5hZGRDaGlsZEJ1aWxkZXIoY2hpbGRSb3V0ZUJ1aWxkZXIpO1xuICAgICAgICByZXR1cm4gY2hpbGRSb3V0ZUJ1aWxkZXI7XG4gICAgfVxuXG4gICAgcHVibGljIGFkZENoaWxkQnVpbGRlcihyb3V0ZUJ1aWxkZXI6IFJvdXRlQnVpbGRlcik6IHRoaXMge1xuICAgICAgICByb3V0ZUJ1aWxkZXIud2l0aFBhcmVudCh0aGlzKTtcbiAgICAgICAgaWYgKHRoaXMucm9vdCkge1xuICAgICAgICAgICAgcm91dGVCdWlsZGVyLndpdGhSb290KHRoaXMucm9vdCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5jaGlsZHJlbi5wdXNoKHJvdXRlQnVpbGRlcik7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHB1YmxpYyBhZGRUYWJsZXZpZXdSb3V0ZXM8VCwgUz4oXG4gICAgICAgIHBhdGg6IHN0cmluZyxcbiAgICAgICAgZGVzY3JpcHRvcjogVGFibGV2aWV3RGVzY3JpcHRvcjxUPixcbiAgICAgICAgdGFibGV2aWV3RGF0YVByb3ZpZGVyOiBJVGFibGV2aWV3RGF0YVByb3ZpZGVyPFQsIFM+LFxuICAgICAgICBhY3Rpb25zPzogQXJyYXk8QWN0aW9uRGVzY3JpcHRvcjxUPj4sXG4gICAgICAgIGhhc0RldGFpbHMgPSB0cnVlLFxuICAgICAgICBoYXNFZGl0ID0gdHJ1ZSxcbiAgICAgICAgaGFzQWRkID0gdHJ1ZVxuICAgICk6IFJvdXRlQnVpbGRlciB7XG4gICAgICAgIGNvbnN0IHJvdXRlQnVpbGRlciA9IFJvdXRlQnVpbGRlci5jcmVhdGVUYWJsZXZpZXdSb3V0ZXMocGF0aCwgZGVzY3JpcHRvciwgdGFibGV2aWV3RGF0YVByb3ZpZGVyLCBhY3Rpb25zLCBoYXNEZXRhaWxzLCBoYXNFZGl0LCBoYXNBZGQpO1xuICAgICAgICB0aGlzLmFkZENoaWxkQnVpbGRlcihyb3V0ZUJ1aWxkZXIpO1xuICAgICAgICByZXR1cm4gcm91dGVCdWlsZGVyO1xuICAgIH1cblxuICAgIHB1YmxpYyBhZGRUYWJsZXZpZXdSb3V0ZXNGcm9tQ29tcG9uZW50KHBhdGg6IHN0cmluZywgY29tcG9uZW50OiBUeXBlPGFueT4sIGhhc0RldGFpbHMgPSB0cnVlLCBoYXNFZGl0ID0gdHJ1ZSwgaGFzQWRkID0gdHJ1ZSk6IFJvdXRlQnVpbGRlciB7XG4gICAgICAgIGNvbnN0IHJvdXRlQnVpbGRlciA9IFJvdXRlQnVpbGRlci5jcmVhdGVUYWJsZXZpZXdSb3V0ZXNGcm9tQ29tcG9uZW50KHBhdGgsIGNvbXBvbmVudCwgaGFzRGV0YWlscywgaGFzRWRpdCwgaGFzQWRkKTtcbiAgICAgICAgdGhpcy5hZGRDaGlsZEJ1aWxkZXIocm91dGVCdWlsZGVyKTtcbiAgICAgICAgcmV0dXJuIHJvdXRlQnVpbGRlcjtcbiAgICB9XG5cbiAgICBwdWJsaWMgdG9QYXJlbnQoKTogUm91dGVCdWlsZGVyIHtcbiAgICAgICAgaWYgKCF0aGlzLnBhcmVudCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdQYXJlbnQgd2FzIG5vdCBwcm92aWRlZC4nKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5wYXJlbnQ7XG4gICAgfVxuXG4gICAgcHVibGljIHRvUm9vdCgpOiBSb3V0ZXNCdWlsZGVyIHtcbiAgICAgICAgaWYgKCF0aGlzLnJvb3QpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignUm9vdCB3YXMgbm90IHByb3ZpZGVkLicpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLnJvb3Q7XG4gICAgfVxuXG4gICAgcHVibGljIGZpbmlzaCgpOiBSb3V0ZXNCdWlsZGVyIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudG9Sb290KCk7XG4gICAgfVxuXG4gICAgcHVibGljIGJ1aWxkUm91dGUoKTogUm91dGUge1xuICAgICAgICBjb25zdCBhbmd1bGFyUm91dGU6IFJvdXRlID0ge1xuICAgICAgICAgICAgLi4udGhpcy5yb3V0ZVxuICAgICAgICB9O1xuXG4gICAgICAgIGlmICgodGhpcy5yb3V0ZS5jaGlsZHJlbj8ubGVuZ3RoID8/IDApID4gMCB8fCB0aGlzLmNoaWxkcmVuLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIC8vIHJvdXRlIGhhcyBjaGlsZHJlblxuICAgICAgICAgICAgYW5ndWxhclJvdXRlLmNoaWxkcmVuID0gW107XG4gICAgICAgICAgICBpZiAodGhpcy5yb3V0ZS5jaGlsZHJlbj8ubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgYW5ndWxhclJvdXRlLmNoaWxkcmVuLnB1c2goLi4udGhpcy5yb3V0ZS5jaGlsZHJlbik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodGhpcy5jaGlsZHJlbi5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGNoaWxkUm91dGUgb2YgdGhpcy5jaGlsZHJlbikge1xuICAgICAgICAgICAgICAgICAgICBhbmd1bGFyUm91dGUuY2hpbGRyZW4ucHVzaChjaGlsZFJvdXRlLmJ1aWxkUm91dGUoKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMucm91dGUuY2FuQWN0aXZhdGUpIHtcbiAgICAgICAgICAgIGFuZ3VsYXJSb3V0ZS5jYW5BY3RpdmF0ZSA9IFsuLi50aGlzLnJvdXRlLmNhbkFjdGl2YXRlXTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5yb3V0ZS5jYW5BY3RpdmF0ZUNoaWxkKSB7XG4gICAgICAgICAgICBhbmd1bGFyUm91dGUuY2FuQWN0aXZhdGVDaGlsZCA9IFsuLi50aGlzLnJvdXRlLmNhbkFjdGl2YXRlQ2hpbGRdO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLnJvdXRlLmNhbkxvYWQpIHtcbiAgICAgICAgICAgIGFuZ3VsYXJSb3V0ZS5jYW5Mb2FkID0gWy4uLnRoaXMucm91dGUuY2FuTG9hZF07XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMucm91dGUuY2FuRGVhY3RpdmF0ZSkge1xuICAgICAgICAgICAgYW5ndWxhclJvdXRlLmNhbkRlYWN0aXZhdGUgPSBbLi4udGhpcy5yb3V0ZS5jYW5EZWFjdGl2YXRlXTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5yb3V0ZS5yZXNvbHZlKSB7XG4gICAgICAgICAgICBhbmd1bGFyUm91dGUucmVzb2x2ZSA9IHsuLi50aGlzLnJvdXRlLnJlc29sdmV9O1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGFuZ3VsYXJSb3V0ZTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYnVpbGRNZW51KCk6IEFycmF5PE1uZ01lbnVJdGVtPiB7XG4gICAgICAgIGNvbnN0IG1lbnVJdGVtQnVpbGQ6IE1uZ01lbnVJdGVtIHwgbnVsbCA9IHRoaXMubWVudUl0ZW0gPyB7Li4udGhpcy5tZW51SXRlbX0gOiBudWxsO1xuICAgICAgICBjb25zdCByb3V0ZUNoaWxkcmVuTWVudUl0ZW1zOiBBcnJheTxNbmdNZW51SXRlbT4gPSB0aGlzLmNoaWxkcmVuLmZsYXRNYXAoY2hpbGQgPT4gY2hpbGQuYnVpbGRNZW51KCkpO1xuICAgICAgICBjb25zdCBtZW51SXRlbUNoaWxkcmVuOiBBcnJheTxNbmdNZW51SXRlbT4gPSBbXTtcbiAgICAgICAgY29uc3QgbWVudUl0ZW1DaGlsZHJlbkJ1aWxkOiBBcnJheTxNbmdNZW51SXRlbT4gPSBbXTtcblxuICAgICAgICBpZiAobWVudUl0ZW1CdWlsZD8uaXRlbXMpIHtcbiAgICAgICAgICAgIG1lbnVJdGVtQ2hpbGRyZW5CdWlsZC5wdXNoKC4uLm1lbnVJdGVtQnVpbGQuaXRlbXMpO1xuICAgICAgICB9XG5cbiAgICAgICAgZm9yIChjb25zdCBtZW51SXRlbUNoaWxkIG9mIHRoaXMubWVudUl0ZW1DaGlsZHJlbikge1xuICAgICAgICAgICAgY29uc3QgZmluYWxNZW51SXRlbUNoaWxkOiBNbmdNZW51SXRlbSA9IHsuLi5tZW51SXRlbUNoaWxkfTtcbiAgICAgICAgICAgIGlmICghZmluYWxNZW51SXRlbUNoaWxkLnJvdXRlckxpbmspIHtcbiAgICAgICAgICAgICAgICBmaW5hbE1lbnVJdGVtQ2hpbGQucm91dGVyTGluayA9IHRoaXMucm91dGVQYXRoO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHR5cGVvZiBmaW5hbE1lbnVJdGVtQ2hpbGQucm91dGVyTGluayA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgICAgICBmaW5hbE1lbnVJdGVtQ2hpbGQucm91dGVyTGluayA9IFtmaW5hbE1lbnVJdGVtQ2hpbGQucm91dGVyTGlua107XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBmaW5hbE1lbnVJdGVtQ2hpbGQucm91dGVyTGluayA9IFJvdXRlVXRpbC5yZW1vdmVFbXB0eVBhdGhTZWdtZW50cyhmaW5hbE1lbnVJdGVtQ2hpbGQucm91dGVyTGluayk7XG4gICAgICAgICAgICBtZW51SXRlbUNoaWxkcmVuLnB1c2goZmluYWxNZW51SXRlbUNoaWxkKTtcbiAgICAgICAgfVxuXG4gICAgICAgIG1lbnVJdGVtQ2hpbGRyZW5CdWlsZC5wdXNoKC4uLm1lbnVJdGVtQ2hpbGRyZW4sIC4uLnJvdXRlQ2hpbGRyZW5NZW51SXRlbXMpO1xuXG4gICAgICAgIGlmICghbWVudUl0ZW1CdWlsZCkge1xuICAgICAgICAgICAgcmV0dXJuIG1lbnVJdGVtQ2hpbGRyZW5CdWlsZDtcbiAgICAgICAgfVxuXG4gICAgICAgIG1lbnVJdGVtQnVpbGQubGFiZWwgPSBtZW51SXRlbUJ1aWxkLmxhYmVsID8/IHRoaXMucGFnZVRpdGxlO1xuICAgICAgICBpZiAodHlwZW9mIG1lbnVJdGVtQnVpbGQucm91dGVyTGluayA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgIG1lbnVJdGVtQnVpbGQucm91dGVyTGluayA9IFttZW51SXRlbUJ1aWxkLnJvdXRlckxpbmtdO1xuICAgICAgICB9XG4gICAgICAgIG1lbnVJdGVtQnVpbGQucm91dGVyTGluayA9IFJvdXRlVXRpbC5yZW1vdmVFbXB0eVBhdGhTZWdtZW50cyhtZW51SXRlbUJ1aWxkLnJvdXRlckxpbmsgPz8gdGhpcy5yb3V0ZVBhdGgpO1xuICAgICAgICBpZiAobWVudUl0ZW1DaGlsZHJlbkJ1aWxkLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIG1lbnVJdGVtQnVpbGQuaXRlbXMgPSBtZW51SXRlbUNoaWxkcmVuQnVpbGQ7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIW1lbnVJdGVtQnVpbGQuZ3VhcmRzKSB7XG4gICAgICAgICAgICBjb25zdCBndWFyZHMgPSB0aGlzLmZpbmRNZW51SXRlbUd1YXJkcygpO1xuICAgICAgICAgICAgaWYgKGd1YXJkcy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgbWVudUl0ZW1CdWlsZC5ndWFyZHMgPSBndWFyZHM7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gW21lbnVJdGVtQnVpbGRdO1xuICAgIH1cblxuICAgIHByaXZhdGUgY3JlYXRlTWVudUl0ZW0oaWNvbj86IHN0cmluZywgbGFiZWw/OiBzdHJpbmcsIHJvdXRlckxpbms/OiBBcnJheTxzdHJpbmc+KSB7XG4gICAgICAgIGNvbnN0IG1lbnVJdGVtOiBNbmdNZW51SXRlbSA9IHt9O1xuICAgICAgICBpZiAoaWNvbikge1xuICAgICAgICAgICAgbWVudUl0ZW0uaWNvbiA9IGljb247XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGxhYmVsKSB7XG4gICAgICAgICAgICBtZW51SXRlbS5sYWJlbCA9IGxhYmVsO1xuICAgICAgICB9XG4gICAgICAgIGlmIChyb3V0ZXJMaW5rKSB7XG4gICAgICAgICAgICBtZW51SXRlbS5yb3V0ZXJMaW5rID0gcm91dGVyTGluaztcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbWVudUl0ZW07XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhZGp1c3RNZW51Um91dGVyTGlua3NGcm9tQnVpbGRlcihtZW51SXRlbXM6IEFycmF5PE1uZ01lbnVJdGVtPikge1xuICAgICAgICBmb3IgKGNvbnN0IG1lbnVJdGVtIG9mIG1lbnVJdGVtcykge1xuICAgICAgICAgICAgaWYgKG1lbnVJdGVtLnJvdXRlckxpbmspIHtcbiAgICAgICAgICAgICAgICBtZW51SXRlbS5yb3V0ZXJMaW5rID0gUm91dGVVdGlsLmFwcGVuZFBhdGhUb0Jhc2VQYXRoKHRoaXMucm91dGVQYXRoLCB0eXBlb2YgbWVudUl0ZW0ucm91dGVyTGluayA9PT0gJ3N0cmluZycgPyBbbWVudUl0ZW0ucm91dGVyTGlua10gOiBtZW51SXRlbS5yb3V0ZXJMaW5rKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KG1lbnVJdGVtLml0ZW1zKSkge1xuICAgICAgICAgICAgICAgIHRoaXMuYWRqdXN0TWVudVJvdXRlckxpbmtzRnJvbUJ1aWxkZXIobWVudUl0ZW0uaXRlbXMpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBmaW5kTWVudUl0ZW1HdWFyZHMoKTogQXJyYXk8YW55PiB7XG4gICAgICAgIGNvbnN0IGd1YXJkczogQXJyYXk8YW55PiA9IFtdO1xuICAgICAgICBpZiAodGhpcy5yb3V0ZS5jYW5BY3RpdmF0ZT8ubGVuZ3RoKSB7XG4gICAgICAgICAgICBndWFyZHMucHVzaCguLi50aGlzLnJvdXRlLmNhbkFjdGl2YXRlKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5wYXJlbnQpIHtcbiAgICAgICAgICAgIC8vIENoZWNrIGZvciBwYXJlbnQgZ3VhcmRzIHRoYXQgc2hvdWxkIGJlIGluY2x1ZGVkIGluIGRlY2lzaW9uIHRvIGhpZGUgbWVudSBpdGVtIVxuICAgICAgICAgICAgLy8gU29tZSBwYXJlbnQgcm91dGVzIG1pZ2h0IGhhdmUgZ3VhcmRzLCBidXQgbm8gbWVudSBpdGVtcywgc28gdGhpcyBndWFyZHMgbXVzdCBiZSB0YWtlbiBpbnRvIGFjY291bnQgaGVyZSxcbiAgICAgICAgICAgIC8vIGJlY2F1c2UgdGhlcmUgaXMgbm8gcGFyZW50IG1lbnUgaXRlbSB0byBoaWRlLlxuICAgICAgICAgICAgdGhpcy5wYXJlbnQuZmluZE1lbnVJdGVtR3VhcmRzKCkuZm9yRWFjaChnID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoZ3VhcmRzLmluZGV4T2YoZykgPCAwKSB7XG4gICAgICAgICAgICAgICAgICAgIGd1YXJkcy5wdXNoKGcpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBndWFyZHM7XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgUm91dGVEYXRhQnVpbGRlciB7XG4gICAgcHJpdmF0ZSBkYXRhOiBNbmdSb3V0ZXJEYXRhO1xuXG4gICAgY29uc3RydWN0b3IoaW5pdD86IERhdGEpIHtcbiAgICAgICAgdGhpcy5kYXRhID0gaW5pdCA/PyB7fTtcbiAgICAgICAgaWYgKCF0aGlzLmRhdGEuYnJlYWRjcnVtYikge1xuICAgICAgICAgICAgdGhpcy5kYXRhLmJyZWFkY3J1bWIgPSBudWxsO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIHN0YXRpYyBjcmVhdGUoZGF0YT86IERhdGEpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBSb3V0ZURhdGFCdWlsZGVyKGRhdGEpO1xuICAgIH1cblxuICAgIHdpdGhCcmVhZGNydW1iKGJyZWFkY3J1bWI6IEJyZWFkY3J1bWJUeXBlKTogdGhpcyB7XG4gICAgICAgIHRoaXMuZGF0YS5icmVhZGNydW1iID0gYnJlYWRjcnVtYjtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgd2l0aFBhZ2VUaXRsZShwYWdlVGl0bGU6IHN0cmluZyk6IHRoaXMge1xuICAgICAgICB0aGlzLmRhdGEucGFnZVRpdGxlID0gcGFnZVRpdGxlO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICB3aXRoVGFibGV2aWV3KGRlc2NyaXB0b3I6IFRhYmxldmlld0Rlc2NyaXB0b3I8YW55PiwgZGF0YVByb3ZpZGVyOiBJVGFibGV2aWV3RGF0YVByb3ZpZGVyPGFueSwgYW55PiwgYWN0aW9ucz86IEFycmF5PEFjdGlvbkRlc2NyaXB0b3I8YW55Pj4pOiB0aGlzIHtcbiAgICAgICAgdGhpcy5kYXRhLnRhYmxldmlldyA9IHtcbiAgICAgICAgICAgIGRlc2NyaXB0b3I6IGRlc2NyaXB0b3IsXG4gICAgICAgICAgICBkYXRhUHJvdmlkZXI6IGRhdGFQcm92aWRlclxuICAgICAgICB9O1xuICAgICAgICBpZiAoYWN0aW9ucykge1xuICAgICAgICAgICAgdGhpcy5kYXRhLnRhYmxldmlldy5hY3Rpb25zID0gYWN0aW9ucztcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICB3aXRoVG9wYmFyQ29tcG9uZW50KGNvbXBvbmVudDogVHlwZTxhbnk+KTogdGhpcyB7XG4gICAgICAgIHRoaXMuZGF0YS50b3BiYXJDb21wb25lbnQgPSBjb21wb25lbnQ7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHdpdGhCcmVhZGNydW1iQ29tcG9uZW50KGNvbXBvbmVudDogVHlwZTxhbnk+KTogdGhpcyB7XG4gICAgICAgIHRoaXMuZGF0YS5icmVhZGNydW1iQ29tcG9uZW50ID0gY29tcG9uZW50O1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICB3aXRoTWVudUNvbXBvbmVudChjb21wb25lbnQ6IFR5cGU8YW55Pik6IHRoaXMge1xuICAgICAgICB0aGlzLmRhdGEubWVudUNvbXBvbmVudCA9IGNvbXBvbmVudDtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgd2l0aEZvb3RlckNvbXBvbmVudChjb21wb25lbnQ6IFR5cGU8YW55Pik6IHRoaXMge1xuICAgICAgICB0aGlzLmRhdGEuZm9vdGVyQ29tcG9uZW50ID0gY29tcG9uZW50O1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBidWlsZCgpOiBNbmdSb3V0ZXJEYXRhIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZGF0YTtcbiAgICB9XG59XG4iXX0=
@@ -140,14 +140,15 @@ export class MngActionExecutorService {
140
140
  * Runs editor action fetch function.
141
141
  *
142
142
  * @param action Action descriptor.
143
+ * @param item Item instance (if exists).
143
144
  * @param itemId Item id.
144
145
  * @param dataProvider Data provider
145
146
  * @param sourceComponent Source component from where the fetch function was called.
146
147
  * @param viewContainer View container/service. Tableview component.
147
148
  * @param actionData Additional action data.
148
149
  */
149
- runEditorFetch(action, itemId, dataProvider, sourceComponent, viewContainer, actionData) {
150
- const context = this.prepareExecContextForEditor(action, undefined, itemId, dataProvider, sourceComponent, viewContainer, actionData);
150
+ runEditorFetch(action, item, itemId, dataProvider, sourceComponent, viewContainer, actionData) {
151
+ const context = this.prepareExecContextForEditor(action, item, itemId, dataProvider, sourceComponent, viewContainer, actionData);
151
152
  return action.fetchFunction(context).pipe(map(res => new ActionRunResult(context, res)));
152
153
  // TODO: error handling
153
154
  }
@@ -340,4 +341,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.1.3", ngImpor
340
341
  type: Inject,
341
342
  args: [ACTION_EDITOR_DIALOG_COMPONENT_SETTING]
342
343
  }] }]; } });
343
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWN0aW9uLWV4ZWN1dG9yLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvbGliL3NlcnZpY2VzL2FjdGlvbi1leGVjdXRvci5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBQyxpQkFBaUIsRUFBQyxNQUFNLHNCQUFzQixDQUFDO0FBQ3ZELE9BQU8sRUFBQyxNQUFNLEVBQUUsVUFBVSxFQUFpQixNQUFNLGVBQWUsQ0FBQztBQU1qRSxPQUFPLEVBQUMsVUFBVSxFQUFFLElBQUksRUFBRSxFQUFFLEVBQUMsTUFBTSxNQUFNLENBQUM7QUFDMUMsT0FBTyxFQUFDLFVBQVUsRUFBRSxLQUFLLEVBQUUsR0FBRyxFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFFdEQsT0FBTyxFQUFDLHNCQUFzQixFQUFjLFdBQVcsRUFBRSxpQkFBaUIsRUFBRSxlQUFlLEVBQUUsbUJBQW1CLEVBQTZCLE1BQU0sNkJBQTZCLENBQUM7QUFHakwsT0FBTyxFQUFDLDJCQUEyQixFQUFvQixzQkFBc0IsRUFBRSxjQUFjLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUdySCxPQUFPLEVBQUMsUUFBUSxFQUFFLFNBQVMsRUFBQyxNQUFNLFVBQVUsQ0FBQztBQUc3QyxPQUFPLEVBQUMsc0NBQXNDLEVBQUMsTUFBTSxVQUFVLENBQUM7Ozs7Ozs7O0FBR2hFLE1BQU0sT0FBTyx3QkFBd0I7SUFDakMsWUFDWSxRQUFrQixFQUNsQixNQUFjLEVBQ2QsYUFBNEIsRUFDNUIsbUJBQXdDLEVBQ3hDLFNBQTJCLEVBQzNCLGlCQUF1QyxFQUN2QyxXQUFrQyxFQUNjLDRCQUF1QztRQVB2RixhQUFRLEdBQVIsUUFBUSxDQUFVO1FBQ2xCLFdBQU0sR0FBTixNQUFNLENBQVE7UUFDZCxrQkFBYSxHQUFiLGFBQWEsQ0FBZTtRQUM1Qix3QkFBbUIsR0FBbkIsbUJBQW1CLENBQXFCO1FBQ3hDLGNBQVMsR0FBVCxTQUFTLENBQWtCO1FB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Z0JBQzFHLElBQUksQ0FBQyxNQUFNLENBQUMsYUFBYSxDQUFDLElBQUksV0FBVyxFQUFFLEVBQUUsRUFBQyxVQUFVLEVBQUUsSUFBSSxFQUFDLENBQUMsQ0FBQzthQUNwRTtTQUNKO0lBQ0wsQ0FBQztJQUVPLGdCQUFnQixDQUFDLEtBQVc7UUFDaEMsTUFBTSxXQUFXLEdBQWE7WUFDMUIsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLElBQUksY0FBYztZQUNuQyxPQUFPLEVBQUUsS0FBSyxFQUFFLE9BQU8sSUFBSSxlQUFlO1lBQzFDLEtBQUssRUFBRSxLQUFLO1NBQ2YsQ0FBQztRQUNGLElBQUksS0FBSyxZQUFZLGlCQUFpQixFQUFFO1lBQ3BDLFdBQVcsQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDLE1BQU0sQ0FBQztZQUNsQyxXQUFXLENBQUMsaUJBQWlCLEdBQUcsS0FBSyxDQUFDLFVBQVUsQ0FBQztZQUNqRCxXQUFXLENBQUMsR0FBRyxHQUFHLEtBQUssQ0FBQyxHQUFHLElBQUksU0FBUyxDQUFDO1NBQzVDO1FBQ0QsT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDLFVBQVUsQ0FBQyxLQUFLLEVBQUUsV0FBVyxDQUFDLENBQUM7SUFDM0QsQ0FBQzs7cUhBamJRLHdCQUF3Qix5T0FTckIsc0NBQXNDO3lIQVR6Qyx3QkFBd0I7MkZBQXhCLHdCQUF3QjtrQkFEcEMsVUFBVTs7MEJBVUYsTUFBTTsyQkFBQyxzQ0FBc0MiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0h0dHBFcnJvclJlc3BvbnNlfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XG5pbXBvcnQge0luamVjdCwgSW5qZWN0YWJsZSwgSW5qZWN0b3IsIFR5cGV9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtBY3RpdmF0ZWRSb3V0ZSwgUm91dGVyLCBVcmxUcmVlfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuXG5pbXBvcnQge1RyYW5zbGF0ZVNlcnZpY2V9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnO1xuaW1wb3J0IHtDb25maXJtYXRpb24sIENvbmZpcm1hdGlvblNlcnZpY2V9IGZyb20gJ3ByaW1lbmcvYXBpJztcbmltcG9ydCB7RGlhbG9nU2VydmljZSwgRHluYW1pY0RpYWxvZ0NvbmZpZ30gZnJvbSAncHJpbWVuZy9keW5hbWljZGlhbG9nJztcbmltcG9ydCB7T2JzZXJ2YWJsZSwgZnJvbSwgb2Z9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHtjYXRjaEVycm9yLCBmaXJzdCwgbWFwfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5cbmltcG9ydCB7QWN0aW9uQWN0aXZhdGlvblJlc3VsdCwgQWN0aW9uRGF0YSwgQWN0aW9uRXJyb3IsIEFjdGlvbkV4ZWNDb250ZXh0LCBBY3Rpb25SdW5SZXN1bHQsIEFjdGlvblRyaWdnZXJSZXN1bHQsIElBY3Rpb25Db25maXJtYXRpb25TZXJ2aWNlfSBmcm9tICcuLi9jb21wb25lbnRzL2FjdGlvbi9tb2RlbHMnO1xuaW1wb3J0IHtNbmdUYWJsZUNlbGxDbGlja0V2ZW50fSBmcm9tICcuLi9jb21wb25lbnRzL3RhYmxldmlldy9tb2RlbHMnO1xuaW1wb3J0IHtJRGF0YVByb3ZpZGVyLCBJRWRpdG9yRGF0YVByb3ZpZGVyfSBmcm9tICcuLi9kYXRhLXByb3ZpZGVycyc7XG5pbXBvcnQge0FjdGlvbkFjdGl2YXRpb25UcmlnZ2VyRW51bSwgQWN0aW9uRGVzY3JpcHRvciwgQWN0aW9uRWRpdG9yRGVzY3JpcHRvciwgQWN0aW9uVHlwZUVudW19IGZyb20gJy4uL2Rlc2NyaXB0b3JzJztcbmltcG9ydCB7SVZpZXdDb250YWluZXIsIE1uZ0Vycm9yfSBmcm9tICcuLi9tb2RlbHMnO1xuaW1wb3J0IHtJZFR5cGV9IGZyb20gJy4uL3R5cGVzJztcbmltcG9ydCB7STE4blV0aWwsIFRvYXN0VXRpbH0gZnJvbSAnLi4vdXRpbHMnO1xuaW1wb3J0IHtNbmdFcnJvck1hcHBlclNlcnZpY2V9IGZyb20gJy4vZXJyb3ItbWFwcGVyLnNlcnZpY2UnO1xuaW1wb3J0IHtNbmdOYXZpZ2F0aW9uU2VydmljZX0gZnJvbSAnLi9uYXZpZ2F0aW9uLnNlcnZpY2UnO1xuaW1wb3J0IHtBQ1RJT05fRURJVE9SX0RJQUxPR19DT01QT05FTlRfU0VUVElOR30gZnJvbSAnLi90b2tlbnMnO1xuXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgTW5nQWN0aW9uRXhlY3V0b3JTZXJ2aWNlIHtcbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgcHJpdmF0ZSBpbmplY3RvcjogSW5qZWN0b3IsXG4gICAgICAgIHByaXZhdGUgcm91dGVyOiBSb3V0ZXIsXG4gICAgICAgIHByaXZhdGUgZGlhbG9nU2VydmljZTogRGlhbG9nU2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSBjb25maXJtYXRpb25TZXJ2aWNlOiBDb25maXJtYXRpb25TZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIHRyYW5zbGF0ZTogVHJhbnNsYXRlU2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSBuYXZpZ2F0aW9uU2VydmljZTogTW5nTmF2aWdhdGlvblNlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgZXJyb3JNYXBwZXI6IE1uZ0Vycm9yTWFwcGVyU2VydmljZSxcbiAgICAgICAgQEluamVjdChBQ1RJT05fRURJVE9SX0RJQUxPR19DT01QT05FTlRfU0VUVElORykgcHJpdmF0ZSBkZWZhdWx0RWRpdG9yRGlhbG9nQ29tcG9uZW50OiBUeXBlPGFueT5cbiAgICApIHt9XG5cbiAgICBwdWJsaWMgcHJlcGFyZUFjdGlvbkV4ZWNDb250ZXh0PFQsIFM+KFxuICAgICAgICBhY3Rpb246IEFjdGlvbkRlc2NyaXB0b3I8VD4sXG4gICAgICAgIGl0ZW1JZD86IElkVHlwZSxcbiAgICAgICAgaXRlbT86IFQsXG4gICAgICAgIGRhdGFQcm92aWRlcj86IElEYXRhUHJvdmlkZXI8VCwgUz4sXG4gICAgICAgIHZpZXdDb250YWluZXI/OiBJVmlld0NvbnRhaW5lcjxULCBTPixcbiAgICAgICAgc291cmNlQ29tcG9uZW50PzogYW55LFxuICAgICAgICBhY3Rpb25EYXRhPzogQWN0aW9uRGF0YVxuICAgICk6IEFjdGlvbkV4ZWNDb250ZXh0PFQsIFMsIElEYXRhUHJvdmlkZXI8VCwgUz4+IHtcbiAgICAgICAgcmV0dXJuIG5ldyBBY3Rpb25FeGVjQ29udGV4dDxULCBTLCBJRGF0YVByb3ZpZGVyPFQsIFM+PihcbiAgICAgICAgICAgIGRhdGFQcm92aWRlciA/PyBhY3Rpb24uZGF0YVByb3ZpZGVyID8/IHZpZXdDb250YWluZXI/LmdldERhdGFQcm92aWRlcigpLFxuICAgICAgICAgICAgdGhpcy5nZXREYXRhUHJvdmlkZXJTZXJ2aWNlKGRhdGFQcm92aWRlcikgPz8gdW5kZWZpbmVkLFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGl0ZW0sXG4gICAgICAgICAgICAgICAgaXRlbUlkLFxuICAgICAgICAgICAgICAgIGFjdGlvbkRhdGFcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBzb3VyY2VDb21wb25lbnQsXG4gICAgICAgICAgICB2aWV3Q29udGFpbmVyXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgcHVibGljIHJ1bkFjdGlvbjxULCBTPihcbiAgICAgICAgYWN0aW9uOiBBY3Rpb25EZXNjcmlwdG9yPFQ+LFxuICAgICAgICBpdGVtSWQ/OiBJZFR5cGUsXG4gICAgICAgIGl0ZW0/OiBULFxuICAgICAgICBkYXRhUHJvdmlkZXI/OiBJRGF0YVByb3ZpZGVyPFQsIFM+LFxuICAgICAgICBzb3VyY2VDb21wb25lbnQ/OiBhbnksXG4gICAgICAgIHZpZXdDb250YWluZXI/OiBJVmlld0NvbnRhaW5lcjxULCBTPixcbiAgICAgICAgYWN0aW9uRGF0YT86IEFjdGlvbkRhdGFcbiAgICApOiBPYnNlcnZhYmxlPEFjdGlvblJ1blJlc3VsdDxULCBTLCBJRGF0YVByb3ZpZGVyPFQsIFM+Pj4ge1xuICAgICAgICBjb25zdCBjb250ZXh0ID0gdGhpcy5wcmVwYXJlQWN0aW9uRXhlY0NvbnRleHQoYWN0aW9uLCBpdGVtSWQsIGl0ZW0sIGRhdGFQcm92aWRlciwgdmlld0NvbnRhaW5lciwgc291cmNlQ29tcG9uZW50LCBhY3Rpb25EYXRhKTtcbiAgICAgICAgaWYgKGFjdGlvbi5oYXNSdW5Db25maXJtYXRpb24pIHtcbiAgICAgICAgICAgIGlmICh0eXBlb2Ygc291cmNlQ29tcG9uZW50Py5nZXRDb25maXJtYXRpb25TZXJ2aWNlICE9PSAnZnVuY3Rpb24nIHx8IHR5cGVvZiBzb3VyY2VDb21wb25lbnQ/LmdldENvbmZpcm1hdGlvblNlcnZpY2VJbnN0YW5jZUtleSAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgICAgIHRocm93IEVycm9yKGBTb3VyY2UgY29tcG9uZW50ICR7c291cmNlQ29tcG9uZW50fSBzaG91bGQgYmUgaW1wbGVtZW50aW5nIElDb25maXJtYXRpb25TZXJ2aWNlIGludGVyZmFjZSB0byBiZSBhYmxlIHRvIHByb3ZpZGUgY29uZmlybWF0aW9uIGZ1bmN0aW9uYWxpdHkuYCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IHNyY0NvbmZpcm1Db21wb25lbnQgPSBzb3VyY2VDb21wb25lbnQgYXMgSUFjdGlvbkNvbmZpcm1hdGlvblNlcnZpY2U7XG4gICAgICAgICAgICBjb25zdCBjb25maXJtUGFyYW1zOiBDb25maXJtYXRpb24gPSB7XG4gICAgICAgICAgICAgICAga2V5OiBzcmNDb25maXJtQ29tcG9uZW50LmdldENvbmZpcm1hdGlvblNlcnZpY2VJbnN0YW5jZUtleShhY3Rpb24pLFxuICAgICAgICAgICAgICAgIGFjY2VwdFZpc2libGU6IGZhbHNlLFxuICAgICAgICAgICAgICAgIHJlamVjdFZpc2libGU6IGZhbHNlXG4gICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICBpZiAoYWN0aW9uLnJ1bkNvbmZpcm1hdGlvblRpdGxlICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgY29uZmlybVBhcmFtcy5oZWFkZXIgPVxuICAgICAgICAgICAgICAgICAgICBJMThuVXRpbC5pbnN0YW50QWN0aW9uVHJhbnNsYXRpb24odGhpcy50cmFuc2xhdGUsIGFjdGlvbiwgJ2NvbmZpcm0udGl0bGUnLCBhY3Rpb24ucnVuQ29uZmlybWF0aW9uVGl0bGUsIGl0ZW0sICdnZW5lcmFsLmNvbmZpcm1hdGlvbicpID8/IHVuZGVmaW5lZDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChhY3Rpb24ucnVuQ29uZmlybWF0aW9uTWVzc2FnZSAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIGNvbmZpcm1QYXJhbXMubWVzc2FnZSA9XG4gICAgICAgICAgICAgICAgICAgIEkxOG5VdGlsLmluc3RhbnRBY3Rpb25UcmFuc2xhdGlvbih0aGlzLnRyYW5zbGF0ZSwgYWN0aW9uLCAnY29uZmlybS5tZXNzYWdlJywgYWN0aW9uLnJ1bkNvbmZpcm1hdGlvbk1lc3NhZ2UsIGl0ZW0sICdnZW5lcmFsLmNvbmZpcm1hdGlvbicpID8/IHVuZGVmaW5lZDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChhY3Rpb24ucnVuQ29uZmlybWF0aW9uSWNvbiAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIGNvbmZpcm1QYXJhbXMuaWNvbiA9IGFjdGlvbi5ydW5Db25maXJtYXRpb25JY29uID09PSB1bmRlZmluZWQgPyAncGkgcGktZXhjbGFtYXRpb24tdHJpYW5nbGUnIDogYWN0aW9uLnJ1bkNvbmZpcm1hdGlvbkljb247XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoYWN0aW9uLnJ1bkNvbmZpcm1hdGlvbkFjY2VwdFRpdGxlICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgY29uZmlybVBhcmFtcy5hY2NlcHRMYWJlbCA9XG4gICAgICAgICAgICAgICAgICAgIEkxOG5VdGlsLmluc3RhbnRBY3Rpb25UcmFuc2xhdGlvbih0aGlzLnRyYW5zbGF0ZSwgYWN0aW9uLCAnY29uZmlybS5hY2NlcHQnLCBhY3Rpb24ucnVuQ29uZmlybWF0aW9uQWNjZXB0VGl0bGUsIGl0ZW0sICdnZW5lcmFsLnllcycpID8/IHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICBjb25maXJtUGFyYW1zLmFjY2VwdFZpc2libGUgPSB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGFjdGlvbi5ydW5Db25maXJtYXRpb25SZWplY3RUaXRsZSAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIGNvbmZpcm1QYXJhbXMucmVqZWN0TGFiZWwgPVxuICAgICAgICAgICAgICAgICAgICBJMThuVXRpbC5pbnN0YW50QWN0aW9uVHJhbnNsYXRpb24odGhpcy50cmFuc2xhdGUsIGFjdGlvbiwgJ2NvbmZpcm0ucmVqZWN0JywgYWN0aW9uLnJ1bkNvbmZpcm1hdGlvblJlamVjdFRpdGxlLCBpdGVtLCAnZ2VuZXJhbC5ubycpID8/IHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICBjb25maXJtUGFyYW1zLnJlamVjdFZpc2libGUgPSB0cnVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCBvYnNlcnZhYmxlID0gbmV3IE9ic2VydmFibGU8QWN0aW9uUnVuUmVzdWx0PFQsIFMsIElEYXRhUHJvdmlkZXI8VCwgUz4+PihvYnNlcnZlciA9PiB7XG4gICAgICAgICAgICAgICAgY29uZmlybVBhcmFtcy5hY2NlcHQgPSAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGFjdGlvblxuICAgICAgICAgICAgICAgICAgICAgICAgLnJ1bkZ1bmN0aW9uKGNvbnRleHQpXG4gICAgICAgICAgICAgICAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaXJzdCgpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hcChyZXMgPT4gbmV3IEFjdGlvblJ1blJlc3VsdChjb250ZXh0LCByZXMpKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXAodmFsdWUgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYWN0aW9uLmhhc1J1bk5vdGlmaWNhdGlvblN1Y2Nlc3MpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRvYXN0VXRpbC5hY3Rpb25Ob3RpZmljYXRpb25TdWNjZXNzKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudHJhbnNsYXRlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFjdGlvbixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncnVuJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhY3Rpb24ucnVuTm90aWZpY2F0aW9uU3VjY2Vzc1RpdGxlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFjdGlvbi5ydW5Ob3RpZmljYXRpb25TdWNjZXNzTWVzc2FnZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2aWV3Q29udGFpbmVyLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhdGNoRXJyb3IoZXJyID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgYWN0aW9uRXJyb3IgPSB0aGlzLnRvTW5nQWN0aW9uRXJyb3IoZXJyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGFjdGlvbi5oYXNSdW5Ob3RpZmljYXRpb25FcnJvcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVG9hc3RVdGlsLmFjdGlvbk5vdGlmaWNhdGlvbkVycm9yKHRoaXMudHJhbnNsYXRlLCBhY3Rpb24sIGFjdGlvbkVycm9yLCAncnVuJywgdmlld0NvbnRhaW5lciwgaXRlbSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgYWN0aW9uRXJyb3I7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgICAgIC5zdWJzY3JpYmUocmVzID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvYnNlcnZlci5uZXh0KHJlcyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb2JzZXJ2ZXIuY29tcGxldGUoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICBjb25maXJtUGFyYW1zLnJlamVjdCA9ICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgb2JzZXJ2ZXIuZXJyb3IobmV3IEFjdGlvblJ1blJlc3VsdChjb250ZXh0LCB1bmRlZmluZWQsIG5ldyBBY3Rpb25FcnJvcihudWxsLCB0cnVlKSkpO1xuICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICBzcmNDb25maXJtQ29tcG9uZW50LmdldENvbmZpcm1hdGlvblNlcnZpY2UoKS5jb25maXJtKGNvbmZpcm1QYXJhbXMpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICByZXR1cm4gb2JzZXJ2YWJsZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBhY3Rpb24ucnVuRnVuY3Rpb24oY29udGV4dCkucGlwZShcbiAgICAgICAgICAgICAgICBtYXAocmVzID0+IG5ldyBBY3Rpb25SdW5SZXN1bHQoY29udGV4dCwgcmVzKSksXG4gICAgICAgICAgICAgICAgbWFwKHZhbHVlID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGFjdGlvbi5oYXNSdW5Ob3RpZmljYXRpb25TdWNjZXNzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBUb2FzdFV0aWwuYWN0aW9uTm90aWZpY2F0aW9uU3VjY2VzcyhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnRyYW5zbGF0ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhY3Rpb24sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3J1bicsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYWN0aW9uLnJ1bk5vdGlmaWNhdGlvblN1Y2Nlc3NUaXRsZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhY3Rpb24ucnVuTm90aWZpY2F0aW9uU3VjY2Vzc01lc3NhZ2UsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmlld0NvbnRhaW5lcixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtXG4gICAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICBjYXRjaEVycm9yKGVyciA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGFjdGlvbkVycm9yID0gdGhpcy50b01uZ0FjdGlvbkVycm9yKGVycik7XG4gICAgICAgICAgICAgICAgICAgIGlmIChhY3Rpb24uaGFzUnVuTm90aWZpY2F0aW9uRXJyb3IpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIFRvYXN0VXRpbC5hY3Rpb25Ob3RpZmljYXRpb25FcnJvcih0aGlzLnRyYW5zbGF0ZSwgYWN0aW9uLCBhY3Rpb25FcnJvciwgJ3J1bicsIHZpZXdDb250YWluZXIsIGl0ZW0pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHRocm93IGFjdGlvbkVycm9yO1xuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUnVucyBlZGl0b3IgYWN0aW9uIHNhdmUgZnVuY3Rpb24gdXN1YWxseSB0cmlnZ2VyZWQgb24gZm9ybSBzdWJtaXQuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gYWN0aW9uIEFjdGlvbiBkZXNjcmlwdG9yLlxuICAgICAqIEBwYXJhbSBpdGVtSWQgSXRlbSBpZCAoaWYgZXhpc3RzKS5cbiAgICAgKiBAcGFyYW0gZm9ybUl0ZW0gSXRlbSBpbnN0YW5jZSAoZnJvbSBmb3JtKS5cbiAgICAgKiBAcGFyYW0gZGF0YVByb3ZpZGVyIERhdGEgcHJvdmlkZXJcbiAgICAgKiBAcGFyYW0gc291cmNlQ29tcG9uZW50IFNvdXJjZSBjb21wb25lbnQgZnJvbSB3aGVyZSB0aGUgZmV0Y2ggZnVuY3Rpb24gd2FzIGNhbGxlZC5cbiAgICAgKiBAcGFyYW0gdmlld0NvbnRhaW5lciBWaWV3IGNvbnRhaW5lci9zZXJ2aWNlLlxuICAgICAqIEBwYXJhbSBhY3Rpb25EYXRhIEFkZGl0aW9uYWwgYWN0aW9uIGRhdGEuXG4gICAgICovXG4gICAgcHVibGljIHJ1bkVkaXRvclNhdmU8VCwgUz4oXG4gICAgICAgIGFjdGlvbjogQWN0aW9uRWRpdG9yRGVzY3JpcHRvcjxUPixcbiAgICAgICAgaXRlbUlkPzogSWRUeXBlLFxuICAgICAgICBmb3JtSXRlbT86IFQsXG4gICAgICAgIGRhdGFQcm92aWRlcj86IElFZGl0b3JEYXRhUHJvdmlkZXI8VCwgUz4sXG4gICAgICAgIHNvdXJjZUNvbXBvbmVudD86IGFueSxcbiAgICAgICAgdmlld0NvbnRhaW5lcj86IElWaWV3Q29udGFpbmVyPFQsIFM+LFxuICAgICAgICBhY3Rpb25EYXRhPzogQWN0aW9uRGF0YVxuICAgICk6IE9ic2VydmFibGU8QWN0aW9uUnVuUmVzdWx0PFQsIFMsIElFZGl0b3JEYXRhUHJvdmlkZXI8VCwgUz4+PiB7XG4gICAgICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzLnByZXBhcmVFeGVjQ29udGV4dEZvckVkaXRvcihhY3Rpb24sIGZvcm1JdGVtLCBpdGVtSWQsIGRhdGFQcm92aWRlciwgc291cmNlQ29tcG9uZW50LCB2aWV3Q29udGFpbmVyLCBhY3Rpb25EYXRhKTtcbiAgICAgICAgaWYgKHR5cGVvZiBhY3Rpb24uc3VibWl0RnVuY3Rpb24gIT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgU3VibWl0IGZ1bmN0aW9uIGZvciBhY3Rpb24gJHthY3Rpb24uYWN0aW9uTmFtZX0gY2Fubm90IGJlIGludm9rZWQuYCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGFjdGlvbi5zdWJtaXRGdW5jdGlvbihjb250ZXh0KS5waXBlKFxuICAgICAgICAgICAgbWFwKHJlcyA9PiBuZXcgQWN0aW9uUnVuUmVzdWx0KGNvbnRleHQsIHJlcykpLFxuICAgICAgICAgICAgbWFwKHZhbHVlID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoYWN0aW9uLmhhc1J1bk5vdGlmaWNhdGlvblN1Y2Nlc3MpIHtcbiAgICAgICAgICAgICAgICAgICAgVG9hc3RVdGlsLmFjdGlvbk5vdGlmaWNhdGlvblN1Y2Nlc3MoXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnRyYW5zbGF0ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGFjdGlvbixcbiAgICAgICAgICAgICAgICAgICAgICAgICdzdWJtaXQnLFxuICAgICAgICAgICAgICAgICAgICAgICAgYWN0aW9uLnJ1bk5vdGlmaWNhdGlvblN1Y2Nlc3NUaXRsZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGFjdGlvbi5ydW5Ob3RpZmljYXRpb25TdWNjZXNzTWVzc2FnZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHZpZXdDb250YWluZXIsXG4gICAgICAgICAgICAgICAgICAgICAgICBmb3JtSXRlbVxuICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIGNhdGNoRXJyb3IoZXJyID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBhY3Rpb25FcnJvciA9IHRoaXMudG9NbmdBY3Rpb25FcnJvcihlcnIpO1xuICAgICAgICAgICAgICAgIGlmIChhY3Rpb24uaGFzUnVuTm90aWZpY2F0aW9uRXJyb3IpIHtcbiAgICAgICAgICAgICAgICAgICAgVG9hc3RVdGlsLmFjdGlvbk5vdGlmaWNhdGlvbkVycm9yKHRoaXMudHJhbnNsYXRlLCBhY3Rpb24sIGFjdGlvbkVycm9yLCAnc3VibWl0Jywgdmlld0NvbnRhaW5lciwgZm9ybUl0ZW0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aHJvdyBhY3Rpb25FcnJvcjtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUnVucyBlZGl0b3IgYWN0aW9uIGZldGNoIGZ1bmN0aW9uLlxuICAgICAqXG4gICAgICogQHBhcmFtIGFjdGlvbiBBY3Rpb24gZGVzY3JpcHRvci5cbiAgICAgKiBAcGFyYW0gaXRlbUlkIEl0ZW0gaWQuXG4gICAgICogQHBhcmFtIGRhdGFQcm92aWRlciBEYXRhIHByb3ZpZGVyXG4gICAgICogQHBhcmFtIHNvdXJjZUNvbXBvbmVudCBTb3VyY2UgY29tcG9uZW50IGZyb20gd2hlcmUgdGhlIGZldGNoIGZ1bmN0aW9uIHdhcyBjYWxsZWQuXG4gICAgICogQHBhcmFtIHZpZXdDb250YWluZXIgVmlldyBjb250YWluZXIvc2VydmljZS4gVGFibGV2aWV3IGNvbXBvbmVudC5cbiAgICAgKiBAcGFyYW0gYWN0aW9uRGF0YSBBZGRpdGlvbmFsIGFjdGlvbiBkYXRhLlxuICAgICAqL1xuICAgIHB1YmxpYyBydW5FZGl0b3JGZXRjaDxULCBTPihcbiAgICAgICAgYWN0aW9uOiBBY3Rpb25FZGl0b3JEZXNjcmlwdG9yPFQ+LFxuICAgICAgICBpdGVtSWQ/OiBJZFR5cGUsXG4gICAgICAgIGRhdGFQcm92aWRlcj86IElFZGl0b3JEYXRhUHJvdmlkZXI8VCwgUz4sXG4gICAgICAgIHNvdXJjZUNvbXBvbmVudD86IGFueSxcbiAgICAgICAgdmlld0NvbnRhaW5lcj86IElWaWV3Q29udGFpbmVyPFQsIFM+LFxuICAgICAgICBhY3Rpb25EYXRhPzogQWN0aW9uRGF0YVxuICAgICk6IE9ic2VydmFibGU8QWN0aW9uUnVuUmVzdWx0PFQsIFMsIElFZGl0b3JEYXRhUHJvdmlkZXI8VCwgUz4+PiB7XG4gICAgICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzLnByZXBhcmVFeGVjQ29udGV4dEZvckVkaXRvcihhY3Rpb24sIHVuZGVmaW5lZCwgaXRlbUlkLCBkYXRhUHJvdmlkZXIsIHNvdXJjZUNvbXBvbmVudCwgdmlld0NvbnRhaW5lciwgYWN0aW9uRGF0YSk7XG4gICAgICAgIHJldHVybiBhY3Rpb24uZmV0Y2hGdW5jdGlvbihjb250ZXh0KS5waXBlKG1hcChyZXMgPT4gbmV3IEFjdGlvblJ1blJlc3VsdChjb250ZXh0LCByZXMpKSk7XG4gICAgICAgIC8vIFRPRE86IGVycm9yIGhhbmRsaW5nXG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUHJlcGFyZXMgYWN0aW9uIGV4ZWMgY29udGV4dCBmb3IgYWN0aW9uIG9mIHR5cGUgZWRpdG9yLlxuICAgICAqXG4gICAgICogQHBhcmFtIGl0ZW0gSXRlbSBpbnN0YW5jZSAoaWYgZXhpc3RzKS5cbiAgICAgKiBAcGFyYW0gaXRlbUlkIEl0ZW0gaWQgKGlmIGV4aXN0cykuXG4gICAgICogQHBhcmFtIGRhdGFQcm92aWRlciBEYXRhIHByb3ZpZGVyLlxuICAgICAqIEBwYXJhbSBzb3VyY2VDb21wb25lbnQgU291cmNlIGNvbXBvbmVudCBmcm9tIHdoZXJlIHRoZSBjb250ZXh0IHByZXBhcmF0aW9uIHdhcyBjYWxsZWQuXG4gICAgICogQHBhcmFtIHZpZXdDb250YWluZXIgVmlldyBjb250YWluZXIvc2VydmljZS5cbiAgICAgKiBAcGFyYW0gYWN0aW9uRGF0YSBBZGRpdGlvbmFsIGFjdGlvbiBkYXRhLlxuICAgICAqL1xuICAgIHByaXZhdGUgcHJlcGFyZUV4ZWNDb250ZXh0Rm9yRWRpdG9yPFQsIFM+KFxuICAgICAgICBhY3Rpb246IEFjdGlvbkVkaXRvckRlc2NyaXB0b3I8VD4sXG4gICAgICAgIGl0ZW0/OiBULFxuICAgICAgICBpdGVtSWQ/OiBJZFR5cGUsXG4gICAgICAgIGRhdGFQcm92aWRlcj86IElFZGl0b3JEYXRhUHJvdmlkZXI8VCwgUz4sXG4gICAgICAgIHNvdXJjZUNvbXBvbmVudD86IGFueSxcbiAgICAgICAgdmlld0NvbnRhaW5lcj86IElWaWV3Q29udGFpbmVyPFQsIFM+LFxuICAgICAgICBhY3Rpb25EYXRhPzogQWN0aW9uRGF0YVxuICAgICk6IEFjdGlvbkV4ZWNDb250ZXh0PFQsIFMsIElFZGl0b3JEYXRhUHJvdmlkZXI8VCwgUz4+IHtcbiAgICAgICAgbGV0IGN0eERhdGFQcm92aWRlciA9IGRhdGFQcm92aWRlcjtcbiAgICAgICAgaWYgKCFjdHhEYXRhUHJvdmlkZXIgJiYgYWN0aW9uLmRhdGFQcm92aWRlcikge1xuICAgICAgICAgICAgY3R4RGF0YVByb3ZpZGVyID0gYWN0aW9uLmRhdGFQcm92aWRlcjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIWN0eERhdGFQcm92aWRlcikge1xuICAgICAgICAgICAgY29uc3Qgdmlld0NvbnRhaW5lckRhdGFQcm92aWRlciA9IHZpZXdDb250YWluZXI/LmdldERhdGFQcm92aWRlcigpO1xuICAgICAgICAgICAgaWYgKHZpZXdDb250YWluZXJEYXRhUHJvdmlkZXIpIHtcbiAgICAgICAgICAgICAgICBjdHhEYXRhUHJvdmlkZXIgPSBhY3Rpb24uZGF0YVByb3ZpZGVyO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGNvbnRleHQgPSBuZXcgQWN0aW9uRXhlY0NvbnRleHQ8VCwgUywgSUVkaXRvckRhdGFQcm92aWRlcjxULCBTPj4oXG4gICAgICAgICAgICBjdHhEYXRhUHJvdmlkZXIsXG4gICAgICAgICAgICB0aGlzLmdldERhdGFQcm92aWRlclNlcnZpY2UoY3R4RGF0YVByb3ZpZGVyKSA/PyB1bmRlZmluZWQsXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgaXRlbSxcbiAgICAgICAgICAgICAgICBpdGVtSWQsXG4gICAgICAgICAgICAgICAgYWN0aW9uRGF0YVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHNvdXJjZUNvbXBvbmVudCxcbiAgICAgICAgICAgIHZpZXdDb250YWluZXJcbiAgICAgICAgKTtcbiAgICAgICAgcmV0dXJuIGNvbnRleHQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogR2V0cyBzZXJ2aWNlIGluc3RhbmNlIG9mIGRhdGEgcHJvdmlkZXIuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gZGF0YVByb3ZpZGVyIERhdGEgcHJvdmlkZXIgaW5zdGFuY2UuXG4gICAgICovXG4gICAgcHJpdmF0ZSBnZXREYXRhUHJvdmlkZXJTZXJ2aWNlPFQsIFM+KGRhdGFQcm92aWRlcj86IElEYXRhUHJvdmlkZXI8VCwgUz4pOiBTIHwgbnVsbCB7XG4gICAgICAgIGlmIChkYXRhUHJvdmlkZXI/LnNlcnZpY2VUeXBlKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5pbmplY3Rvci5nZXQ8Uz4oZGF0YVByb3ZpZGVyLnNlcnZpY2VUeXBlKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQWN0aXZhdGVzIGFjdGlvbi5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBhY3Rpb24gQWN0aW9uIGRlc2NyaXB0b3IuXG4gICAgICogQHBhcmFtIGl0ZW0gSXRlbSBpbnN0YW5jZSAoaWYgZXhpc3RzKS5cbiAgICAgKiBAcGFyYW0gaXRlbUlkIEl0ZW0gaWQgKGlmIGV4aXN0cykuXG4gICAgICogQHBhcmFtIGFjdGlvbkRhdGEgT3B0aW9uYWwgYWRkaXRpb25hbCBhY3Rpb24gZGF0YS5cbiAgICAgKiBAcGFyYW0gdmlld0NvbnRhaW5lciBWaWV3IGNvbnRhaW5lciBjb21wb25lbnQvc2VydmljZS5cbiAgICAgKiBAcGFyYW0gc291cmNlQ29tcG9uZW50IFNvdXJjZSBhY3RpdmF0aW9uIGNvbXBvbmVudC5cbiAgICAgKi9cbiAgICBwdWJsaWMgYWN0aXZhdGVBY3Rpb248VCwgUz4oXG4gICAgICAgIGFjdGlvbjogQWN0aW9uRGVzY3JpcHRvcjxUPixcbiAgICAgICAgaXRlbUlkPzogSWRUeXBlLFxuICAgICAgICBpdGVtPzogVCxcbiAgICAgICAgYWN0aW9uRGF0YT86IEFjdGlvbkRhdGEsXG4gICAgICAgIHZpZXdDb250YWluZXI/OiBJVmlld0NvbnRhaW5lcjxULCBTPixcbiAgICAgICAgc291cmNlQ29tcG9uZW50PzogYW55XG4gICAgKTogT2JzZXJ2YWJsZTxBY3Rpb25BY3RpdmF0aW9uUmVzdWx0PFQsIFMsIElEYXRhUHJvdmlkZXI8VCwgUz4+PiB7XG4gICAgICAgIGlmIChhY3Rpb24udHlwZSA9PT0gQWN0aW9uVHlwZUVudW0uRWRpdG9yKSB7XG4gICAgICAgICAgICBsZXQgZGlhbG9nQ29tcG9uZW50ID0gdGhpcy5kZWZhdWx0RWRpdG9yRGlhbG9nQ29tcG9uZW50O1xuICAgICAgICAgICAgaWYgKGFjdGlvbiBpbnN0YW5jZW9mIEFjdGlvbkVkaXRvckRlc2NyaXB0b3IgJiYgYWN0aW9uLmVkaXRvckNvbXBvbmVudCkge1xuICAgICAgICAgICAgICAgIGRpYWxvZ0NvbXBvbmVudCA9IGFjdGlvbi5lZGl0b3JDb21wb25lbnQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBkaWFsb2dDb25maWc6IER5bmFtaWNEaWFsb2dDb25maWcgPSB7XG4gICAgICAgICAgICAgICAgZGF0YToge1xuICAgICAgICAgICAgICAgICAgICBhY3Rpb25cbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIHN0eWxlQ2xhc3M6IGFjdGlvbi5jbGFzc05hbWVcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBpZiAoaXRlbUlkKSB7XG4gICAgICAgICAgICAgICAgZGlhbG9nQ29uZmlnLmRhdGEuaXRlbUlkID0gaXRlbUlkO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGl0ZW0pIHtcbiAgICAgICAgICAgICAgICBkaWFsb2dDb25maWcuZGF0YS5pdGVtID0gaXRlbTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChhY3Rpb25EYXRhKSB7XG4gICAgICAgICAgICAgICAgZGlhbG9nQ29uZmlnLmRhdGEuYWN0aW9uRGF0YSA9IGFjdGlvbkRhdGE7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodmlld0NvbnRhaW5lcikge1xuICAgICAgICAgICAgICAgIGRpYWxvZ0NvbmZpZy5kYXRhLnZpZXdDb250YWluZXIgPSB2aWV3Q29udGFpbmVyO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHNvdXJjZUNvbXBvbmVudCkge1xuICAgICAgICAgICAgICAgIGRpYWxvZ0NvbmZpZy5kYXRhLnNvdXJjZUNvbXBvbmVudCA9IHNvdXJjZUNvbXBvbmVudDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IGRpYWxvZ1JlZiA9IHRoaXMuZGlhbG9nU2VydmljZS5vcGVuKGRpYWxvZ0NvbXBvbmVudCwgZGlhbG9nQ29uZmlnKTtcbiAgICAgICAgICAgIHJldHVybiBvZihuZXcgQWN0aW9uQWN0aXZhdGlvblJlc3VsdDxULCBTLCBJRGF0YVByb3ZpZGVyPFQsIFM+Pih1bmRlZmluZWQsIGRpYWxvZ1JlZikpO1xuICAgICAgICB9IGVsc2UgaWYgKGFjdGlvbi50eXBlID09PSBBY3Rpb25UeXBlRW51bS5FdmVudCkge1xuICAgICAgICAgICAgLy8ganVzdCBlbWl0IGV2ZW50XG4gICAgICAgICAgICByZXR1cm4gb2YobmV3IEFjdGlvbkFjdGl2YXRpb25SZXN1bHQ8VCwgUywgSURhdGFQcm92aWRlcjxULCBTPj4odW5kZWZpbmVkKSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyBkaXJlY3RseSBleGVjdXRlIGFjdGlvblxuICAgICAgICAgICAgcmV0dXJuIHRoaXMucnVuQWN0aW9uPFQsIFM+KGFjdGlvbiwgaXRlbUlkLCBpdGVtLCB1bmRlZmluZWQsIHNvdXJjZUNvbXBvbmVudCwgdmlld0NvbnRhaW5lciwgYWN0aW9uRGF0YSkucGlwZShcbiAgICAgICAgICAgICAgICBtYXAocmVzID0+IG5ldyBBY3Rpb25BY3RpdmF0aW9uUmVzdWx0PFQsIFMsIElEYXRhUHJvdmlkZXI8VCwgUz4+KHJlcykpXG4gICAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVHJpZ2dlcnMgYWN0aW9uIGZyb20gdGFibGUgcm93IGNsaWNrIHBvc2l0aW9uLlxuICAgICAqXG4gICAgICogQHBhcmFtIGFjdGlvbiBBY3Rpb24gZGVzY3JpcHRvci5cbiAgICAgKiBAcGFyYW0gZXZlbnQgVGFyZ2V0IHRhYmxlIGNsaWNrIGV2ZW50LlxuICAgICAqIEBwYXJhbSByb3V0ZSBDdXJyZW50bHkgYWN0aXZhdGUgcm91dGUuXG4gICAgICovXG4gICAgcHVibGljIHRyaWdnZXJSb3dDbGlja0FjdGlvbjxUPihhY3Rpb246IEFjdGlvbkRlc2NyaXB0b3I8VD4sIGV2ZW50OiBNbmdUYWJsZUNlbGxDbGlja0V2ZW50PFQ+LCByb3V0ZTogQWN0aXZhdGVkUm91dGUpIHtcbiAgICAgICAgaWYgKCFhY3Rpb24ubW9kZWwuaWRQcm9wZXJ0eU5hbWUpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgUm93IGNsaWNrIGFjdGlvbiAke2FjdGlvbi5hY3Rpb25OYW1lfSBjYW4gbm90IGJlIHRyaWdnZXJlZCwgYmVjYXVzZSBtb2RlbCBpZCBwcm9wZXJ0eSBuYW1lIGlzIG5vdCBkZWZpbmVkLmApO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHJvd0l0ZW0gPSBldmVudD8ucm93SXRlbSBhcyBhbnk7XG4gICAgICAgIHJldHVybiB0aGlzLnRyaWdnZXJBY3Rpb24oYWN0aW9uLCByb3dJdGVtW2FjdGlvbi5tb2RlbC5pZFByb3BlcnR5TmFtZV0sIGV2ZW50LnJvd0l0ZW0sIHVuZGVmaW5lZCwgcm91dGUpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRyaWdnZXJzIGFjdGlvbiB3aXRoIG9wdGlvbmFsIGRhdGEgKGl0ZW0sIGl0ZW1JZCwgLi4uKSBhbmQgY3VycmVudGx5IGFjdGl2YXRlZCByb3V0ZS5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBhY3Rpb24gQWN0aW9uLlxuICAgICAqIEBwYXJhbSBhY3Rpb25EYXRhIE9wdGlvbmFsIGFjdGlvbiBkYXRhLlxuICAgICAqIEBwYXJhbSByb3V0ZSBPcHRpb25hbCBhY3RpdmF0ZWQgcm91dGUuXG4gICAgICovXG4gICAgcHVibGljIHRyaWdnZXJBY3Rpb248VCwgUz4oXG4gICAgICAgIGFjdGlvbjogQWN0aW9uRGVzY3JpcHRvcjxUPixcbiAgICAgICAgaXRlbUlkPzogSWRUeXBlLFxuICAgICAgICBpdGVtPzogVCxcbiAgICAgICAgYWN0aW9uRGF0YT86IEFjdGlvbkRhdGEsXG4gICAgICAgIHJvdXRlPzogQWN0aXZhdGVkUm91dGUsXG4gICAgICAgIHZpZXdDb250YWluZXI/OiBJVmlld0NvbnRhaW5lcjxULCBTPixcbiAgICAgICAgc291cmNlQ29tcG9uZW50PzogYW55XG4gICAgKTogT2JzZXJ2YWJsZTxBY3Rpb25UcmlnZ2VyUmVzdWx0PFQsIFMsIElEYXRhUHJvdmlkZXI8VCwgUz4+PiB7XG4gICAgICAgIGlmIChhY3Rpb24uYWN0aXZhdGlvblRyaWdnZXIgPT09IEFjdGlvbkFjdGl2YXRpb25UcmlnZ2VyRW51bS5PblJvdXRlKSB7XG4gICAgICAgICAgICBjb25zdCBiYXNlVXJsID0gdGhpcy5yb3V0ZXIudXJsLnNwbGl0KCc/JylbMF07XG4gICAgICAgICAgICBjb25zdCBwYXJzZWRVcmw6IFVybFRyZWUgPSB0aGlzLnJvdXRlci5wYXJzZVVybCh0aGlzLnJvdXRlci51cmwpO1xuICAgICAgICAgICAgbGV0IGFjdGlvblVybCA9IGFjdGlvbi5yb3V0ZVVybCA/PyAnJztcbiAgICAgICAgICAgIC8vIFRPRE86IGRvbnQgc3RyaXAgJy8nLCBidXQgdXNlIGl0IGFjY29yZGluZ2x5IHdpdGggQW5ndWxhcidzIHJvdXRlciBwYXR0ZXJucyAoLywgLi8sIC4uLylcbiAgICAgICAgICAgIGlmIChhY3Rpb25Vcmwuc3RhcnRzV2l0aCgnLycpKSB7XG4gICAgICAgICAgICAgICAgYWN0aW9uVXJsID0gYWN0aW9uVXJsLnN1YnN0cmluZygxKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IGl0ZW1BbnkgPSAoaXRlbSA/PyB7fSkgYXMgYW55O1xuICAgICAgICAgICAgY29uc3QgYWN0aW9uVXJsU2VnbWVudHMgPSBhY3Rpb25Vcmwuc3BsaXQoJy8nKS5tYXAocyA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKHMgPT09ICc6aXRlbUlkJykge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gaXRlbUlkO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAocy5zdGFydHNXaXRoKGA6JHthY3Rpb24ubW9kZWwudHlwZU5hbWV9LmApKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBpdGVtQW55W3Muc3Vic3RyaW5nKGFjdGlvbi5tb2RlbC50eXBlTmFtZS5sZW5ndGggKyAyKV0gPz8gJyc7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChzLnN0YXJ0c1dpdGgoJzonKSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gYWN0aW9uRGF0YT8uW3Muc3Vic3RyaW5nKDEpXSA/PyAnJztcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHJldHVybiBvZihcbiAgICAgICAgICAgICAgICBuZXcgQWN0aW9uVHJpZ2dlclJlc3VsdDxULCBTLCBJRGF0YVByb3ZpZGVyPFQsIFM+PihcbiAgICAgICAgICAgICAgICAgICAgdW5kZWZpbmVkLFxuICAgICAgICAgICAgICAgICAgICBmcm9tKHRoaXMucm91dGVyLm5hdmlnYXRlKFtiYXNlVXJsLCAuLi5hY3Rpb25VcmxTZWdtZW50c10sIHtyZWxhdGl2ZVRvOiByb3V0ZSwgcXVlcnlQYXJhbXM6IHBhcnNlZFVybC5xdWVyeVBhcmFtc30pKVxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5hY3RpdmF0ZUFjdGlvbihhY3Rpb24sIGl0ZW1JZCwgaXRlbSwgYWN0aW9uRGF0YSwgdmlld0NvbnRhaW5lciwgc291cmNlQ29tcG9uZW50KS5waXBlKG1hcChyZXMgPT4gbmV3IEFjdGlvblRyaWdnZXJSZXN1bHQ8VCwgUywgSURhdGFQcm92aWRlcjxULCBTPj4ocmVzKSkpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIGRlYWN0aXZhdGVBY3Rpb248VD4oYWN0aW9uOiBBY3Rpb25EZXNjcmlwdG9yPFQ+KSB7XG4gICAgICAgIGlmICh0aGlzLm5hdmlnYXRpb25TZXJ2aWNlLmdldFByZXZpb3VzTG9jYXRpb24oKSkge1xuICAgICAgICAgICAgLy8gdGhlcmUgYXJlIGludGVybmFsIGhpc3RvcnkgcmVjb3Jkcywgc28gYmFjayBjYW4gYmUgbm9ybWFsbHkgY2FsbGVkXG4gICAgICAgICAgICB0aGlzLm5hdmlnYXRpb25TZXJ2aWNlLmJhY2soKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vIHRoZXJlIGlzIG5vIGludGVybmFsIGhpc3RvcnkgcmVjb3JkcywgZmlndXJlIG91dCB0aGUgYmFzZSB1cmwgYnkgZWxpbWluYXRpbmcgYWN0aW9uIHNwZWNpZmljIHVybFxuICAgICAgICAgICAgbGV0IHVybCA9IHRoaXMubmF2aWdhdGlvblNlcnZpY2UuZ2V0Q3VycmVudExvY2F0aW9uKCk7XG4gICAgICAgICAgICBpZiAoIXVybCkge1xuICAgICAgICAgICAgICAgIHRoaXMubmF2aWdhdGlvblNlcnZpY2UuYmFjaygpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBpZiAodXJsLnN0YXJ0c1dpdGgoJy8nKSkge1xuICAgICAgICAgICAgICAgICAgICB1cmwgPSB1cmwuc3Vic3RyaW5nKDEpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjb25zdCB1cmxQYXRoU2VnbWVudHMgPSB1cmwuc3BsaXQoJz8nKVswXS5zcGxpdCgnIycpWzBdLnNwbGl0KCcvJyk7XG4gICAgICAgICAgICAgICAgbGV0IGFjdGlvblVybCA9IGFjdGlvbj8ucm91dGVVcmwgPz8gJyc7XG4gICAgICAgICAgICAgICAgaWYgKGFjdGlvblVybC5zdGFydHNXaXRoKCcvJykpIHtcbiAgICAgICAgICAgICAgICAgICAgYWN0aW9uVXJsID0gYWN0aW9uVXJsLnN1YnN0cmluZygxKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY29uc3QgYWN0aW9uVXJsU2VnbWVudHMgPSBhY3Rpb25Vcmwuc3BsaXQoJy8nKTtcbiAgICAgICAgICAgICAgICBjb25zdCByZWRpcmVjdFVybCA9IHVybFBhdGhTZWdtZW50cy5zbGljZSgwLCB1cmxQYXRoU2VnbWVudHMubGVuZ3RoIC0gYWN0aW9uVXJsU2VnbWVudHMubGVuZ3RoKS5qb2luKCcvJyk7XG4gICAgICAgICAgICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGVCeVVybChgLyR7cmVkaXJlY3RVcmx9YCwge3JlcGxhY2VVcmw6IHRydWV9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgdG9NbmdBY3Rpb25FcnJvcihlcnJvcj86IGFueSk6IE1uZ0Vycm9yIHtcbiAgICAgICAgY29uc3QgYWN0aW9uRXJyb3I6IE1uZ0Vycm9yID0ge1xuICAgICAgICAgICAgbmFtZTogZXJyb3I/Lm5hbWUgPz8gJ1Vua25vd25FcnJvcicsXG4gICAgICAgICAgICBtZXNzYWdlOiBlcnJvcj8ubWVzc2FnZSA/PyAnVW5rbm93biBlcnJvcicsXG4gICAgICAgICAgICBjYXVzZTogZXJyb3JcbiAgICAgICAgfTtcbiAgICAgICAgaWYgKGVycm9yIGluc3RhbmNlb2YgSHR0cEVycm9yUmVzcG9uc2UpIHtcbiAgICAgICAgICAgIGFjdGlvbkVycm9yLnN0YXR1cyA9IGVycm9yLnN0YXR1cztcbiAgICAgICAgICAgIGFjdGlvbkVycm9yLnN0YXR1c0Rlc2NyaXB0aW9uID0gZXJyb3Iuc3RhdHVzVGV4dDtcbiAgICAgICAgICAgIGFjdGlvbkVycm9yLnVybCA9IGVycm9yLnVybCA/PyB1bmRlZmluZWQ7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuZXJyb3JNYXBwZXIudG9NbmdFcnJvcihlcnJvciwgYWN0aW9uRXJyb3IpO1xuICAgIH1cbn1cbiJdfQ==
344
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWN0aW9uLWV4ZWN1dG9yLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvbGliL3NlcnZpY2VzL2FjdGlvbi1leGVjdXRvci5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBQyxpQkFBaUIsRUFBQyxNQUFNLHNCQUFzQixDQUFDO0FBQ3ZELE9BQU8sRUFBQyxNQUFNLEVBQUUsVUFBVSxFQUFpQixNQUFNLGVBQWUsQ0FBQztBQU1qRSxPQUFPLEVBQUMsVUFBVSxFQUFFLElBQUksRUFBRSxFQUFFLEVBQUMsTUFBTSxNQUFNLENBQUM7QUFDMUMsT0FBTyxFQUFDLFVBQVUsRUFBRSxLQUFLLEVBQUUsR0FBRyxFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFFdEQsT0FBTyxFQUFDLHNCQUFzQixFQUFjLFdBQVcsRUFBRSxpQkFBaUIsRUFBRSxlQUFlLEVBQUUsbUJBQW1CLEVBQTZCLE1BQU0sNkJBQTZCLENBQUM7QUFHakwsT0FBTyxFQUFDLDJCQUEyQixFQUFvQixzQkFBc0IsRUFBRSxjQUFjLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUdySCxPQUFPLEVBQUMsUUFBUSxFQUFFLFNBQVMsRUFBQyxNQUFNLFVBQVUsQ0FBQztBQUc3QyxPQUFPLEVBQUMsc0NBQXNDLEVBQUMsTUFBTSxVQUFVLENBQUM7Ozs7Ozs7O0FBR2hFLE1BQU0sT0FBTyx3QkFBd0I7SUFDakMsWUFDWSxRQUFrQixFQUNsQixNQUFjLEVBQ2QsYUFBNEIsRUFDNUIsbUJBQXdDLEVBQ3hDLFNBQTJCLEVBQzNCLGlCQUF1QyxFQUN2QyxXQUFrQyxFQUNjLDRCQUF1QztRQVB2RixhQUFRLEdBQVIsUUFBUSxDQUFVO1FBQ2xCLFdBQU0sR0FBTixNQUFNLENBQVE7UUFDZCxrQkFBYSxHQUFiLGFBQWEsQ0FBZTtRQUM1Qix3QkFBbUIsR0FBbkIsbUJBQW1CLENBQXFCO1FBQ3hDLGNBQVMsR0FBVCxTQUFTLENBQWtCO1FB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LENBQUMsQ0FBQztnQkFDMUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxhQUFhLENBQUMsSUFBSSxXQUFXLEVBQUUsRUFBRSxFQUFDLFVBQVUsRUFBRSxJQUFJLEVBQUMsQ0FBQyxDQUFDO2FBQ3BFO1NBQ0o7SUFDTCxDQUFDO0lBRU8sZ0JBQWdCLENBQUMsS0FBVztRQUNoQyxNQUFNLFdBQVcsR0FBYTtZQUMxQixJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksSUFBSSxjQUFjO1lBQ25DLE9BQU8sRUFBRSxLQUFLLEVBQUUsT0FBTyxJQUFJLGVBQWU7WUFDMUMsS0FBSyxFQUFFLEtBQUs7U0FDZixDQUFDO1FBQ0YsSUFBSSxLQUFLLFlBQVksaUJBQWlCLEVBQUU7WUFDcEMsV0FBVyxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUMsTUFBTSxDQUFDO1lBQ2xDLFdBQVcsQ0FBQyxpQkFBaUIsR0FBRyxLQUFLLENBQUMsVUFBVSxDQUFDO1lBQ2pELFdBQVcsQ0FBQyxHQUFHLEdBQUcsS0FBSyxDQUFDLEdBQUcsSUFBSSxTQUFTLENBQUM7U0FDNUM7UUFDRCxPQUFPLElBQUksQ0FBQyxXQUFXLENBQUMsVUFBVSxDQUFDLEtBQUssRUFBRSxXQUFXLENBQUMsQ0FBQztJQUMzRCxDQUFDOztxSEFuYlEsd0JBQXdCLHlPQVNyQixzQ0FBc0M7eUhBVHpDLHdCQUF3QjsyRkFBeEIsd0JBQXdCO2tCQURwQyxVQUFVOzswQkFVRixNQUFNOzJCQUFDLHNDQUFzQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7SHR0cEVycm9yUmVzcG9uc2V9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcbmltcG9ydCB7SW5qZWN0LCBJbmplY3RhYmxlLCBJbmplY3RvciwgVHlwZX0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge0FjdGl2YXRlZFJvdXRlLCBSb3V0ZXIsIFVybFRyZWV9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5cbmltcG9ydCB7VHJhbnNsYXRlU2VydmljZX0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSc7XG5pbXBvcnQge0NvbmZpcm1hdGlvbiwgQ29uZmlybWF0aW9uU2VydmljZX0gZnJvbSAncHJpbWVuZy9hcGknO1xuaW1wb3J0IHtEaWFsb2dTZXJ2aWNlLCBEeW5hbWljRGlhbG9nQ29uZmlnfSBmcm9tICdwcmltZW5nL2R5bmFtaWNkaWFsb2cnO1xuaW1wb3J0IHtPYnNlcnZhYmxlLCBmcm9tLCBvZn0gZnJvbSAncnhqcyc7XG5pbXBvcnQge2NhdGNoRXJyb3IsIGZpcnN0LCBtYXB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcblxuaW1wb3J0IHtBY3Rpb25BY3RpdmF0aW9uUmVzdWx0LCBBY3Rpb25EYXRhLCBBY3Rpb25FcnJvciwgQWN0aW9uRXhlY0NvbnRleHQsIEFjdGlvblJ1blJlc3VsdCwgQWN0aW9uVHJpZ2dlclJlc3VsdCwgSUFjdGlvbkNvbmZpcm1hdGlvblNlcnZpY2V9IGZyb20gJy4uL2NvbXBvbmVudHMvYWN0aW9uL21vZGVscyc7XG5pbXBvcnQge01uZ1RhYmxlQ2VsbENsaWNrRXZlbnR9IGZyb20gJy4uL2NvbXBvbmVudHMvdGFibGV2aWV3L21vZGVscyc7XG5pbXBvcnQge0lEYXRhUHJvdmlkZXIsIElFZGl0b3JEYXRhUHJvdmlkZXJ9IGZyb20gJy4uL2RhdGEtcHJvdmlkZXJzJztcbmltcG9ydCB7QWN0aW9uQWN0aXZhdGlvblRyaWdnZXJFbnVtLCBBY3Rpb25EZXNjcmlwdG9yLCBBY3Rpb25FZGl0b3JEZXNjcmlwdG9yLCBBY3Rpb25UeXBlRW51bX0gZnJvbSAnLi4vZGVzY3JpcHRvcnMnO1xuaW1wb3J0IHtJVmlld0NvbnRhaW5lciwgTW5nRXJyb3J9IGZyb20gJy4uL21vZGVscyc7XG5pbXBvcnQge0lkVHlwZX0gZnJvbSAnLi4vdHlwZXMnO1xuaW1wb3J0IHtJMThuVXRpbCwgVG9hc3RVdGlsfSBmcm9tICcuLi91dGlscyc7XG5pbXBvcnQge01uZ0Vycm9yTWFwcGVyU2VydmljZX0gZnJvbSAnLi9lcnJvci1tYXBwZXIuc2VydmljZSc7XG5pbXBvcnQge01uZ05hdmlnYXRpb25TZXJ2aWNlfSBmcm9tICcuL25hdmlnYXRpb24uc2VydmljZSc7XG5pbXBvcnQge0FDVElPTl9FRElUT1JfRElBTE9HX0NPTVBPTkVOVF9TRVRUSU5HfSBmcm9tICcuL3Rva2Vucyc7XG5cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBNbmdBY3Rpb25FeGVjdXRvclNlcnZpY2Uge1xuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBwcml2YXRlIGluamVjdG9yOiBJbmplY3RvcixcbiAgICAgICAgcHJpdmF0ZSByb3V0ZXI6IFJvdXRlcixcbiAgICAgICAgcHJpdmF0ZSBkaWFsb2dTZXJ2aWNlOiBEaWFsb2dTZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIGNvbmZpcm1hdGlvblNlcnZpY2U6IENvbmZpcm1hdGlvblNlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgdHJhbnNsYXRlOiBUcmFuc2xhdGVTZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIG5hdmlnYXRpb25TZXJ2aWNlOiBNbmdOYXZpZ2F0aW9uU2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSBlcnJvck1hcHBlcjogTW5nRXJyb3JNYXBwZXJTZXJ2aWNlLFxuICAgICAgICBASW5qZWN0KEFDVElPTl9FRElUT1JfRElBTE9HX0NPTVBPTkVOVF9TRVRUSU5HKSBwcml2YXRlIGRlZmF1bHRFZGl0b3JEaWFsb2dDb21wb25lbnQ6IFR5cGU8YW55PlxuICAgICkge31cblxuICAgIHB1YmxpYyBwcmVwYXJlQWN0aW9uRXhlY0NvbnRleHQ8VCwgUz4oXG4gICAgICAgIGFjdGlvbjogQWN0aW9uRGVzY3JpcHRvcjxUPixcbiAgICAgICAgaXRlbUlkPzogSWRUeXBlLFxuICAgICAgICBpdGVtPzogVCxcbiAgICAgICAgZGF0YVByb3ZpZGVyPzogSURhdGFQcm92aWRlcjxULCBTPixcbiAgICAgICAgdmlld0NvbnRhaW5lcj86IElWaWV3Q29udGFpbmVyPFQsIFM+LFxuICAgICAgICBzb3VyY2VDb21wb25lbnQ/OiBhbnksXG4gICAgICAgIGFjdGlvbkRhdGE/OiBBY3Rpb25EYXRhXG4gICAgKTogQWN0aW9uRXhlY0NvbnRleHQ8VCwgUywgSURhdGFQcm92aWRlcjxULCBTPj4ge1xuICAgICAgICByZXR1cm4gbmV3IEFjdGlvbkV4ZWNDb250ZXh0PFQsIFMsIElEYXRhUHJvdmlkZXI8VCwgUz4+KFxuICAgICAgICAgICAgZGF0YVByb3ZpZGVyID8/IGFjdGlvbi5kYXRhUHJvdmlkZXIgPz8gdmlld0NvbnRhaW5lcj8uZ2V0RGF0YVByb3ZpZGVyKCksXG4gICAgICAgICAgICB0aGlzLmdldERhdGFQcm92aWRlclNlcnZpY2UoZGF0YVByb3ZpZGVyKSA/PyB1bmRlZmluZWQsXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgaXRlbSxcbiAgICAgICAgICAgICAgICBpdGVtSWQsXG4gICAgICAgICAgICAgICAgYWN0aW9uRGF0YVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHNvdXJjZUNvbXBvbmVudCxcbiAgICAgICAgICAgIHZpZXdDb250YWluZXJcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgcnVuQWN0aW9uPFQsIFM+KFxuICAgICAgICBhY3Rpb246IEFjdGlvbkRlc2NyaXB0b3I8VD4sXG4gICAgICAgIGl0ZW1JZD86IElkVHlwZSxcbiAgICAgICAgaXRlbT86IFQsXG4gICAgICAgIGRhdGFQcm92aWRlcj86IElEYXRhUHJvdmlkZXI8VCwgUz4sXG4gICAgICAgIHNvdXJjZUNvbXBvbmVudD86IGFueSxcbiAgICAgICAgdmlld0NvbnRhaW5lcj86IElWaWV3Q29udGFpbmVyPFQsIFM+LFxuICAgICAgICBhY3Rpb25EYXRhPzogQWN0aW9uRGF0YVxuICAgICk6IE9ic2VydmFibGU8QWN0aW9uUnVuUmVzdWx0PFQsIFMsIElEYXRhUHJvdmlkZXI8VCwgUz4+PiB7XG4gICAgICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzLnByZXBhcmVBY3Rpb25FeGVjQ29udGV4dChhY3Rpb24sIGl0ZW1JZCwgaXRlbSwgZGF0YVByb3ZpZGVyLCB2aWV3Q29udGFpbmVyLCBzb3VyY2VDb21wb25lbnQsIGFjdGlvbkRhdGEpO1xuICAgICAgICBpZiAoYWN0aW9uLmhhc1J1bkNvbmZpcm1hdGlvbikge1xuICAgICAgICAgICAgaWYgKHR5cGVvZiBzb3VyY2VDb21wb25lbnQ/LmdldENvbmZpcm1hdGlvblNlcnZpY2UgIT09ICdmdW5jdGlvbicgfHwgdHlwZW9mIHNvdXJjZUNvbXBvbmVudD8uZ2V0Q29uZmlybWF0aW9uU2VydmljZUluc3RhbmNlS2V5ICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgRXJyb3IoYFNvdXJjZSBjb21wb25lbnQgJHtzb3VyY2VDb21wb25lbnR9IHNob3VsZCBiZSBpbXBsZW1lbnRpbmcgSUNvbmZpcm1hdGlvblNlcnZpY2UgaW50ZXJmYWNlIHRvIGJlIGFibGUgdG8gcHJvdmlkZSBjb25maXJtYXRpb24gZnVuY3Rpb25hbGl0eS5gKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc3Qgc3JjQ29uZmlybUNvbXBvbmVudCA9IHNvdXJjZUNvbXBvbmVudCBhcyBJQWN0aW9uQ29uZmlybWF0aW9uU2VydmljZTtcbiAgICAgICAgICAgIGNvbnN0IGNvbmZpcm1QYXJhbXM6IENvbmZpcm1hdGlvbiA9IHtcbiAgICAgICAgICAgICAgICBrZXk6IHNyY0NvbmZpcm1Db21wb25lbnQuZ2V0Q29uZmlybWF0aW9uU2VydmljZUluc3RhbmNlS2V5KGFjdGlvbiksXG4gICAgICAgICAgICAgICAgYWNjZXB0VmlzaWJsZTogZmFsc2UsXG4gICAgICAgICAgICAgICAgcmVqZWN0VmlzaWJsZTogZmFsc2VcbiAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgIGlmIChhY3Rpb24ucnVuQ29uZmlybWF0aW9uVGl0bGUgIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICBjb25maXJtUGFyYW1zLmhlYWRlciA9XG4gICAgICAgICAgICAgICAgICAgIEkxOG5VdGlsLmluc3RhbnRBY3Rpb25UcmFuc2xhdGlvbih0aGlzLnRyYW5zbGF0ZSwgYWN0aW9uLCAnY29uZmlybS50aXRsZScsIGFjdGlvbi5ydW5Db25maXJtYXRpb25UaXRsZSwgaXRlbSwgJ2dlbmVyYWwuY29uZmlybWF0aW9uJykgPz8gdW5kZWZpbmVkO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGFjdGlvbi5ydW5Db25maXJtYXRpb25NZXNzYWdlICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgY29uZmlybVBhcmFtcy5tZXNzYWdlID1cbiAgICAgICAgICAgICAgICAgICAgSTE4blV0aWwuaW5zdGFudEFjdGlvblRyYW5zbGF0aW9uKHRoaXMudHJhbnNsYXRlLCBhY3Rpb24sICdjb25maXJtLm1lc3NhZ2UnLCBhY3Rpb24ucnVuQ29uZmlybWF0aW9uTWVzc2FnZSwgaXRlbSwgJ2dlbmVyYWwuY29uZmlybWF0aW9uJykgPz8gdW5kZWZpbmVkO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGFjdGlvbi5ydW5Db25maXJtYXRpb25JY29uICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgY29uZmlybVBhcmFtcy5pY29uID0gYWN0aW9uLnJ1bkNvbmZpcm1hdGlvbkljb24gPT09IHVuZGVmaW5lZCA/ICdwaSBwaS1leGNsYW1hdGlvbi10cmlhbmdsZScgOiBhY3Rpb24ucnVuQ29uZmlybWF0aW9uSWNvbjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChhY3Rpb24ucnVuQ29uZmlybWF0aW9uQWNjZXB0VGl0bGUgIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICBjb25maXJtUGFyYW1zLmFjY2VwdExhYmVsID1cbiAgICAgICAgICAgICAgICAgICAgSTE4blV0aWwuaW5zdGFudEFjdGlvblRyYW5zbGF0aW9uKHRoaXMudHJhbnNsYXRlLCBhY3Rpb24sICdjb25maXJtLmFjY2VwdCcsIGFjdGlvbi5ydW5Db25maXJtYXRpb25BY2NlcHRUaXRsZSwgaXRlbSwgJ2dlbmVyYWwueWVzJykgPz8gdW5kZWZpbmVkO1xuICAgICAgICAgICAgICAgIGNvbmZpcm1QYXJhbXMuYWNjZXB0VmlzaWJsZSA9IHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoYWN0aW9uLnJ1bkNvbmZpcm1hdGlvblJlamVjdFRpdGxlICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgY29uZmlybVBhcmFtcy5yZWplY3RMYWJlbCA9XG4gICAgICAgICAgICAgICAgICAgIEkxOG5VdGlsLmluc3RhbnRBY3Rpb25UcmFuc2xhdGlvbih0aGlzLnRyYW5zbGF0ZSwgYWN0aW9uLCAnY29uZmlybS5yZWplY3QnLCBhY3Rpb24ucnVuQ29uZmlybWF0aW9uUmVqZWN0VGl0bGUsIGl0ZW0sICdnZW5lcmFsLm5vJykgPz8gdW5kZWZpbmVkO1xuICAgICAgICAgICAgICAgIGNvbmZpcm1QYXJhbXMucmVqZWN0VmlzaWJsZSA9IHRydWU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IG9ic2VydmFibGUgPSBuZXcgT2JzZXJ2YWJsZTxBY3Rpb25SdW5SZXN1bHQ8VCwgUywgSURhdGFQcm92aWRlcjxULCBTPj4+KG9ic2VydmVyID0+IHtcbiAgICAgICAgICAgICAgICBjb25maXJtUGFyYW1zLmFjY2VwdCA9ICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgYWN0aW9uXG4gICAgICAgICAgICAgICAgICAgICAgICAucnVuRnVuY3Rpb24oY29udGV4dClcbiAgICAgICAgICAgICAgICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpcnN0KCksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFwKHJlcyA9PiBuZXcgQWN0aW9uUnVuUmVzdWx0KGNvbnRleHQsIHJlcykpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hcCh2YWx1ZSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhY3Rpb24uaGFzUnVuTm90aWZpY2F0aW9uU3VjY2Vzcykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVG9hc3RVdGlsLmFjdGlvbk5vdGlmaWNhdGlvblN1Y2Nlc3MoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy50cmFuc2xhdGUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWN0aW9uLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdydW4nLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFjdGlvbi5ydW5Ob3RpZmljYXRpb25TdWNjZXNzVGl0bGUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWN0aW9uLnJ1bk5vdGlmaWNhdGlvblN1Y2Nlc3NNZXNzYWdlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZpZXdDb250YWluZXIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2F0Y2hFcnJvcihlcnIgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBhY3Rpb25FcnJvciA9IHRoaXMudG9NbmdBY3Rpb25FcnJvcihlcnIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYWN0aW9uLmhhc1J1bk5vdGlmaWNhdGlvbkVycm9yKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUb2FzdFV0aWwuYWN0aW9uTm90aWZpY2F0aW9uRXJyb3IodGhpcy50cmFuc2xhdGUsIGFjdGlvbiwgYWN0aW9uRXJyb3IsICdydW4nLCB2aWV3Q29udGFpbmVyLCBpdGVtKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBhY3Rpb25FcnJvcjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICAgICAgLnN1YnNjcmliZShyZXMgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9ic2VydmVyLm5leHQocmVzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvYnNlcnZlci5jb21wbGV0ZSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgIGNvbmZpcm1QYXJhbXMucmVqZWN0ID0gKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBvYnNlcnZlci5lcnJvcihuZXcgQWN0aW9uUnVuUmVzdWx0KGNvbnRleHQsIHVuZGVmaW5lZCwgbmV3IEFjdGlvbkVycm9yKG51bGwsIHRydWUpKSk7XG4gICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgIHNyY0NvbmZpcm1Db21wb25lbnQuZ2V0Q29uZmlybWF0aW9uU2VydmljZSgpLmNvbmZpcm0oY29uZmlybVBhcmFtcyk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHJldHVybiBvYnNlcnZhYmxlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIGFjdGlvbi5ydW5GdW5jdGlvbihjb250ZXh0KS5waXBlKFxuICAgICAgICAgICAgICAgIG1hcChyZXMgPT4gbmV3IEFjdGlvblJ1blJlc3VsdChjb250ZXh0LCByZXMpKSxcbiAgICAgICAgICAgICAgICBtYXAodmFsdWUgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAoYWN0aW9uLmhhc1J1bk5vdGlmaWNhdGlvblN1Y2Nlc3MpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIFRvYXN0VXRpbC5hY3Rpb25Ob3RpZmljYXRpb25TdWNjZXNzKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudHJhbnNsYXRlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFjdGlvbixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAncnVuJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhY3Rpb24ucnVuTm90aWZpY2F0aW9uU3VjY2Vzc1RpdGxlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFjdGlvbi5ydW5Ob3RpZmljYXRpb25TdWNjZXNzTWVzc2FnZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2aWV3Q29udGFpbmVyLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW1cbiAgICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgIGNhdGNoRXJyb3IoZXJyID0+IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgYWN0aW9uRXJyb3IgPSB0aGlzLnRvTW5nQWN0aW9uRXJyb3IoZXJyKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGFjdGlvbi5oYXNSdW5Ob3RpZmljYXRpb25FcnJvcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgVG9hc3RVdGlsLmFjdGlvbk5vdGlmaWNhdGlvbkVycm9yKHRoaXMudHJhbnNsYXRlLCBhY3Rpb24sIGFjdGlvbkVycm9yLCAncnVuJywgdmlld0NvbnRhaW5lciwgaXRlbSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgYWN0aW9uRXJyb3I7XG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSdW5zIGVkaXRvciBhY3Rpb24gc2F2ZSBmdW5jdGlvbiB1c3VhbGx5IHRyaWdnZXJlZCBvbiBmb3JtIHN1Ym1pdC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBhY3Rpb24gQWN0aW9uIGRlc2NyaXB0b3IuXG4gICAgICogQHBhcmFtIGl0ZW1JZCBJdGVtIGlkIChpZiBleGlzdHMpLlxuICAgICAqIEBwYXJhbSBmb3JtSXRlbSBJdGVtIGluc3RhbmNlIChmcm9tIGZvcm0pLlxuICAgICAqIEBwYXJhbSBkYXRhUHJvdmlkZXIgRGF0YSBwcm92aWRlclxuICAgICAqIEBwYXJhbSBzb3VyY2VDb21wb25lbnQgU291cmNlIGNvbXBvbmVudCBmcm9tIHdoZXJlIHRoZSBmZXRjaCBmdW5jdGlvbiB3YXMgY2FsbGVkLlxuICAgICAqIEBwYXJhbSB2aWV3Q29udGFpbmVyIFZpZXcgY29udGFpbmVyL3NlcnZpY2UuXG4gICAgICogQHBhcmFtIGFjdGlvbkRhdGEgQWRkaXRpb25hbCBhY3Rpb24gZGF0YS5cbiAgICAgKi9cbiAgICBwdWJsaWMgcnVuRWRpdG9yU2F2ZTxULCBTPihcbiAgICAgICAgYWN0aW9uOiBBY3Rpb25FZGl0b3JEZXNjcmlwdG9yPFQ+LFxuICAgICAgICBpdGVtSWQ/OiBJZFR5cGUsXG4gICAgICAgIGZvcm1JdGVtPzogVCxcbiAgICAgICAgZGF0YVByb3ZpZGVyPzogSUVkaXRvckRhdGFQcm92aWRlcjxULCBTPixcbiAgICAgICAgc291cmNlQ29tcG9uZW50PzogYW55LFxuICAgICAgICB2aWV3Q29udGFpbmVyPzogSVZpZXdDb250YWluZXI8VCwgUz4sXG4gICAgICAgIGFjdGlvbkRhdGE/OiBBY3Rpb25EYXRhXG4gICAgKTogT2JzZXJ2YWJsZTxBY3Rpb25SdW5SZXN1bHQ8VCwgUywgSUVkaXRvckRhdGFQcm92aWRlcjxULCBTPj4+IHtcbiAgICAgICAgY29uc3QgY29udGV4dCA9IHRoaXMucHJlcGFyZUV4ZWNDb250ZXh0Rm9yRWRpdG9yKGFjdGlvbiwgZm9ybUl0ZW0sIGl0ZW1JZCwgZGF0YVByb3ZpZGVyLCBzb3VyY2VDb21wb25lbnQsIHZpZXdDb250YWluZXIsIGFjdGlvbkRhdGEpO1xuICAgICAgICBpZiAodHlwZW9mIGFjdGlvbi5zdWJtaXRGdW5jdGlvbiAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBTdWJtaXQgZnVuY3Rpb24gZm9yIGFjdGlvbiAke2FjdGlvbi5hY3Rpb25OYW1lfSBjYW5ub3QgYmUgaW52b2tlZC5gKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gYWN0aW9uLnN1Ym1pdEZ1bmN0aW9uKGNvbnRleHQpLnBpcGUoXG4gICAgICAgICAgICBtYXAocmVzID0+IG5ldyBBY3Rpb25SdW5SZXN1bHQoY29udGV4dCwgcmVzKSksXG4gICAgICAgICAgICBtYXAodmFsdWUgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChhY3Rpb24uaGFzUnVuTm90aWZpY2F0aW9uU3VjY2Vzcykge1xuICAgICAgICAgICAgICAgICAgICBUb2FzdFV0aWwuYWN0aW9uTm90aWZpY2F0aW9uU3VjY2VzcyhcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudHJhbnNsYXRlLFxuICAgICAgICAgICAgICAgICAgICAgICAgYWN0aW9uLFxuICAgICAgICAgICAgICAgICAgICAgICAgJ3N1Ym1pdCcsXG4gICAgICAgICAgICAgICAgICAgICAgICBhY3Rpb24ucnVuTm90aWZpY2F0aW9uU3VjY2Vzc1RpdGxlLFxuICAgICAgICAgICAgICAgICAgICAgICAgYWN0aW9uLnJ1bk5vdGlmaWNhdGlvblN1Y2Nlc3NNZXNzYWdlLFxuICAgICAgICAgICAgICAgICAgICAgICAgdmlld0NvbnRhaW5lcixcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1JdGVtXG4gICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgY2F0Y2hFcnJvcihlcnIgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IGFjdGlvbkVycm9yID0gdGhpcy50b01uZ0FjdGlvbkVycm9yKGVycik7XG4gICAgICAgICAgICAgICAgaWYgKGFjdGlvbi5oYXNSdW5Ob3RpZmljYXRpb25FcnJvcikge1xuICAgICAgICAgICAgICAgICAgICBUb2FzdFV0aWwuYWN0aW9uTm90aWZpY2F0aW9uRXJyb3IodGhpcy50cmFuc2xhdGUsIGFjdGlvbiwgYWN0aW9uRXJyb3IsICdzdWJtaXQnLCB2aWV3Q29udGFpbmVyLCBmb3JtSXRlbSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRocm93IGFjdGlvbkVycm9yO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSdW5zIGVkaXRvciBhY3Rpb24gZmV0Y2ggZnVuY3Rpb24uXG4gICAgICpcbiAgICAgKiBAcGFyYW0gYWN0aW9uIEFjdGlvbiBkZXNjcmlwdG9yLlxuICAgICAqIEBwYXJhbSBpdGVtIEl0ZW0gaW5zdGFuY2UgKGlmIGV4aXN0cykuXG4gICAgICogQHBhcmFtIGl0ZW1JZCBJdGVtIGlkLlxuICAgICAqIEBwYXJhbSBkYXRhUHJvdmlkZXIgRGF0YSBwcm92aWRlclxuICAgICAqIEBwYXJhbSBzb3VyY2VDb21wb25lbnQgU291cmNlIGNvbXBvbmVudCBmcm9tIHdoZXJlIHRoZSBmZXRjaCBmdW5jdGlvbiB3YXMgY2FsbGVkLlxuICAgICAqIEBwYXJhbSB2aWV3Q29udGFpbmVyIFZpZXcgY29udGFpbmVyL3NlcnZpY2UuIFRhYmxldmlldyBjb21wb25lbnQuXG4gICAgICogQHBhcmFtIGFjdGlvbkRhdGEgQWRkaXRpb25hbCBhY3Rpb24gZGF0YS5cbiAgICAgKi9cbiAgICBwdWJsaWMgcnVuRWRpdG9yRmV0Y2g8VCwgUz4oXG4gICAgICAgIGFjdGlvbjogQWN0aW9uRWRpdG9yRGVzY3JpcHRvcjxUPixcbiAgICAgICAgaXRlbT86IFQsXG4gICAgICAgIGl0ZW1JZD86IElkVHlwZSxcbiAgICAgICAgZGF0YVByb3ZpZGVyPzogSUVkaXRvckRhdGFQcm92aWRlcjxULCBTPixcbiAgICAgICAgc291cmNlQ29tcG9uZW50PzogYW55LFxuICAgICAgICB2aWV3Q29udGFpbmVyPzogSVZpZXdDb250YWluZXI8VCwgUz4sXG4gICAgICAgIGFjdGlvbkRhdGE/OiBBY3Rpb25EYXRhXG4gICAgKTogT2JzZXJ2YWJsZTxBY3Rpb25SdW5SZXN1bHQ8VCwgUywgSUVkaXRvckRhdGFQcm92aWRlcjxULCBTPj4+IHtcbiAgICAgICAgY29uc3QgY29udGV4dCA9IHRoaXMucHJlcGFyZUV4ZWNDb250ZXh0Rm9yRWRpdG9yKGFjdGlvbiwgaXRlbSwgaXRlbUlkLCBkYXRhUHJvdmlkZXIsIHNvdXJjZUNvbXBvbmVudCwgdmlld0NvbnRhaW5lciwgYWN0aW9uRGF0YSk7XG4gICAgICAgIHJldHVybiBhY3Rpb24uZmV0Y2hGdW5jdGlvbihjb250ZXh0KS5waXBlKG1hcChyZXMgPT4gbmV3IEFjdGlvblJ1blJlc3VsdChjb250ZXh0LCByZXMpKSk7XG4gICAgICAgIC8vIFRPRE86IGVycm9yIGhhbmRsaW5nXG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUHJlcGFyZXMgYWN0aW9uIGV4ZWMgY29udGV4dCBmb3IgYWN0aW9uIG9mIHR5cGUgZWRpdG9yLlxuICAgICAqXG4gICAgICogQHBhcmFtIGl0ZW0gSXRlbSBpbnN0YW5jZSAoaWYgZXhpc3RzKS5cbiAgICAgKiBAcGFyYW0gaXRlbUlkIEl0ZW0gaWQgKGlmIGV4aXN0cykuXG4gICAgICogQHBhcmFtIGRhdGFQcm92aWRlciBEYXRhIHByb3ZpZGVyLlxuICAgICAqIEBwYXJhbSBzb3VyY2VDb21wb25lbnQgU291cmNlIGNvbXBvbmVudCBmcm9tIHdoZXJlIHRoZSBjb250ZXh0IHByZXBhcmF0aW9uIHdhcyBjYWxsZWQuXG4gICAgICogQHBhcmFtIHZpZXdDb250YWluZXIgVmlldyBjb250YWluZXIvc2VydmljZS5cbiAgICAgKiBAcGFyYW0gYWN0aW9uRGF0YSBBZGRpdGlvbmFsIGFjdGlvbiBkYXRhLlxuICAgICAqL1xuICAgIHByaXZhdGUgcHJlcGFyZUV4ZWNDb250ZXh0Rm9yRWRpdG9yPFQsIFM+KFxuICAgICAgICBhY3Rpb246IEFjdGlvbkVkaXRvckRlc2NyaXB0b3I8VD4sXG4gICAgICAgIGl0ZW0/OiBULFxuICAgICAgICBpdGVtSWQ/OiBJZFR5cGUsXG4gICAgICAgIGRhdGFQcm92aWRlcj86IElFZGl0b3JEYXRhUHJvdmlkZXI8VCwgUz4sXG4gICAgICAgIHNvdXJjZUNvbXBvbmVudD86IGFueSxcbiAgICAgICAgdmlld0NvbnRhaW5lcj86IElWaWV3Q29udGFpbmVyPFQsIFM+LFxuICAgICAgICBhY3Rpb25EYXRhPzogQWN0aW9uRGF0YVxuICAgICk6IEFjdGlvbkV4ZWNDb250ZXh0PFQsIFMsIElFZGl0b3JEYXRhUHJvdmlkZXI8VCwgUz4+IHtcbiAgICAgICAgbGV0IGN0eERhdGFQcm92aWRlciA9IGRhdGFQcm92aWRlcjtcbiAgICAgICAgaWYgKCFjdHhEYXRhUHJvdmlkZXIgJiYgYWN0aW9uLmRhdGFQcm92aWRlcikge1xuICAgICAgICAgICAgY3R4RGF0YVByb3ZpZGVyID0gYWN0aW9uLmRhdGFQcm92aWRlcjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIWN0eERhdGFQcm92aWRlcikge1xuICAgICAgICAgICAgY29uc3Qgdmlld0NvbnRhaW5lckRhdGFQcm92aWRlciA9IHZpZXdDb250YWluZXI/LmdldERhdGFQcm92aWRlcigpO1xuICAgICAgICAgICAgaWYgKHZpZXdDb250YWluZXJEYXRhUHJvdmlkZXIpIHtcbiAgICAgICAgICAgICAgICBjdHhEYXRhUHJvdmlkZXIgPSBhY3Rpb24uZGF0YVByb3ZpZGVyO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGNvbnRleHQgPSBuZXcgQWN0aW9uRXhlY0NvbnRleHQ8VCwgUywgSUVkaXRvckRhdGFQcm92aWRlcjxULCBTPj4oXG4gICAgICAgICAgICBjdHhEYXRhUHJvdmlkZXIsXG4gICAgICAgICAgICB0aGlzLmdldERhdGFQcm92aWRlclNlcnZpY2UoY3R4RGF0YVByb3ZpZGVyKSA/PyB1bmRlZmluZWQsXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgaXRlbSxcbiAgICAgICAgICAgICAgICBpdGVtSWQsXG4gICAgICAgICAgICAgICAgYWN0aW9uRGF0YVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHNvdXJjZUNvbXBvbmVudCxcbiAgICAgICAgICAgIHZpZXdDb250YWluZXJcbiAgICAgICAgKTtcbiAgICAgICAgcmV0dXJuIGNvbnRleHQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogR2V0cyBzZXJ2aWNlIGluc3RhbmNlIG9mIGRhdGEgcHJvdmlkZXIuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gZGF0YVByb3ZpZGVyIERhdGEgcHJvdmlkZXIgaW5zdGFuY2UuXG4gICAgICovXG4gICAgcHJpdmF0ZSBnZXREYXRhUHJvdmlkZXJTZXJ2aWNlPFQsIFM+KGRhdGFQcm92aWRlcj86IElEYXRhUHJvdmlkZXI8VCwgUz4pOiBTIHwgbnVsbCB7XG4gICAgICAgIGlmIChkYXRhUHJvdmlkZXI/LnNlcnZpY2VUeXBlKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5pbmplY3Rvci5nZXQ8Uz4oZGF0YVByb3ZpZGVyLnNlcnZpY2VUeXBlKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQWN0aXZhdGVzIGFjdGlvbi5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBhY3Rpb24gQWN0aW9uIGRlc2NyaXB0b3IuXG4gICAgICogQHBhcmFtIGl0ZW0gSXRlbSBpbnN0YW5jZSAoaWYgZXhpc3RzKS5cbiAgICAgKiBAcGFyYW0gaXRlbUlkIEl0ZW0gaWQgKGlmIGV4aXN0cykuXG4gICAgICogQHBhcmFtIGFjdGlvbkRhdGEgT3B0aW9uYWwgYWRkaXRpb25hbCBhY3Rpb24gZGF0YS5cbiAgICAgKiBAcGFyYW0gdmlld0NvbnRhaW5lciBWaWV3IGNvbnRhaW5lciBjb21wb25lbnQvc2VydmljZS5cbiAgICAgKiBAcGFyYW0gc291cmNlQ29tcG9uZW50IFNvdXJjZSBhY3RpdmF0aW9uIGNvbXBvbmVudC5cbiAgICAgKi9cbiAgICBwdWJsaWMgYWN0aXZhdGVBY3Rpb248VCwgUz4oXG4gICAgICAgIGFjdGlvbjogQWN0aW9uRGVzY3JpcHRvcjxUPixcbiAgICAgICAgaXRlbUlkPzogSWRUeXBlLFxuICAgICAgICBpdGVtPzogVCxcbiAgICAgICAgYWN0aW9uRGF0YT86IEFjdGlvbkRhdGEsXG4gICAgICAgIHZpZXdDb250YWluZXI/OiBJVmlld0NvbnRhaW5lcjxULCBTPixcbiAgICAgICAgc291cmNlQ29tcG9uZW50PzogYW55XG4gICAgKTogT2JzZXJ2YWJsZTxBY3Rpb25BY3RpdmF0aW9uUmVzdWx0PFQsIFMsIElEYXRhUHJvdmlkZXI8VCwgUz4+PiB7XG4gICAgICAgIGlmIChhY3Rpb24udHlwZSA9PT0gQWN0aW9uVHlwZUVudW0uRWRpdG9yKSB7XG4gICAgICAgICAgICBsZXQgZGlhbG9nQ29tcG9uZW50ID0gdGhpcy5kZWZhdWx0RWRpdG9yRGlhbG9nQ29tcG9uZW50O1xuICAgICAgICAgICAgaWYgKGFjdGlvbiBpbnN0YW5jZW9mIEFjdGlvbkVkaXRvckRlc2NyaXB0b3IgJiYgYWN0aW9uLmVkaXRvckNvbXBvbmVudCkge1xuICAgICAgICAgICAgICAgIGRpYWxvZ0NvbXBvbmVudCA9IGFjdGlvbi5lZGl0b3JDb21wb25lbnQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBkaWFsb2dDb25maWc6IER5bmFtaWNEaWFsb2dDb25maWcgPSB7XG4gICAgICAgICAgICAgICAgZGF0YToge1xuICAgICAgICAgICAgICAgICAgICBhY3Rpb25cbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIHN0eWxlQ2xhc3M6IGFjdGlvbi5jbGFzc05hbWVcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBpZiAoaXRlbUlkKSB7XG4gICAgICAgICAgICAgICAgZGlhbG9nQ29uZmlnLmRhdGEuaXRlbUlkID0gaXRlbUlkO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGl0ZW0pIHtcbiAgICAgICAgICAgICAgICBkaWFsb2dDb25maWcuZGF0YS5pdGVtID0gaXRlbTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChhY3Rpb25EYXRhKSB7XG4gICAgICAgICAgICAgICAgZGlhbG9nQ29uZmlnLmRhdGEuYWN0aW9uRGF0YSA9IGFjdGlvbkRhdGE7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodmlld0NvbnRhaW5lcikge1xuICAgICAgICAgICAgICAgIGRpYWxvZ0NvbmZpZy5kYXRhLnZpZXdDb250YWluZXIgPSB2aWV3Q29udGFpbmVyO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHNvdXJjZUNvbXBvbmVudCkge1xuICAgICAgICAgICAgICAgIGRpYWxvZ0NvbmZpZy5kYXRhLnNvdXJjZUNvbXBvbmVudCA9IHNvdXJjZUNvbXBvbmVudDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IGRpYWxvZ1JlZiA9IHRoaXMuZGlhbG9nU2VydmljZS5vcGVuKGRpYWxvZ0NvbXBvbmVudCwgZGlhbG9nQ29uZmlnKTtcbiAgICAgICAgICAgIHJldHVybiBvZihuZXcgQWN0aW9uQWN0aXZhdGlvblJlc3VsdDxULCBTLCBJRGF0YVByb3ZpZGVyPFQsIFM+Pih1bmRlZmluZWQsIGRpYWxvZ1JlZikpO1xuICAgICAgICB9IGVsc2UgaWYgKGFjdGlvbi50eXBlID09PSBBY3Rpb25UeXBlRW51bS5FdmVudCkge1xuICAgICAgICAgICAgLy8ganVzdCBlbWl0IGV2ZW50XG4gICAgICAgICAgICByZXR1cm4gb2YobmV3IEFjdGlvbkFjdGl2YXRpb25SZXN1bHQ8VCwgUywgSURhdGFQcm92aWRlcjxULCBTPj4odW5kZWZpbmVkKSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyBkaXJlY3RseSBleGVjdXRlIGFjdGlvblxuICAgICAgICAgICAgcmV0dXJuIHRoaXMucnVuQWN0aW9uPFQsIFM+KGFjdGlvbiwgaXRlbUlkLCBpdGVtLCB1bmRlZmluZWQsIHNvdXJjZUNvbXBvbmVudCwgdmlld0NvbnRhaW5lciwgYWN0aW9uRGF0YSkucGlwZShcbiAgICAgICAgICAgICAgICBtYXAocmVzID0+IG5ldyBBY3Rpb25BY3RpdmF0aW9uUmVzdWx0PFQsIFMsIElEYXRhUHJvdmlkZXI8VCwgUz4+KHJlcykpXG4gICAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVHJpZ2dlcnMgYWN0aW9uIGZyb20gdGFibGUgcm93IGNsaWNrIHBvc2l0aW9uLlxuICAgICAqXG4gICAgICogQHBhcmFtIGFjdGlvbiBBY3Rpb24gZGVzY3JpcHRvci5cbiAgICAgKiBAcGFyYW0gZXZlbnQgVGFyZ2V0IHRhYmxlIGNsaWNrIGV2ZW50LlxuICAgICAqIEBwYXJhbSByb3V0ZSBDdXJyZW50bHkgYWN0aXZhdGUgcm91dGUuXG4gICAgICovXG4gICAgcHVibGljIHRyaWdnZXJSb3dDbGlja0FjdGlvbjxUPihhY3Rpb246IEFjdGlvbkRlc2NyaXB0b3I8VD4sIGV2ZW50OiBNbmdUYWJsZUNlbGxDbGlja0V2ZW50PFQ+LCByb3V0ZT86IEFjdGl2YXRlZFJvdXRlKSB7XG4gICAgICAgIGlmICghYWN0aW9uLm1vZGVsLmlkUHJvcGVydHlOYW1lKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFJvdyBjbGljayBhY3Rpb24gJHthY3Rpb24uYWN0aW9uTmFtZX0gY2FuIG5vdCBiZSB0cmlnZ2VyZWQsIGJlY2F1c2UgbW9kZWwgaWQgcHJvcGVydHkgbmFtZSBpcyBub3QgZGVmaW5lZC5gKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCByb3dJdGVtID0gZXZlbnQ/LnJvd0l0ZW0gYXMgYW55O1xuICAgICAgICByZXR1cm4gdGhpcy50cmlnZ2VyQWN0aW9uKGFjdGlvbiwgcm93SXRlbVthY3Rpb24ubW9kZWwuaWRQcm9wZXJ0eU5hbWVdLCBldmVudC5yb3dJdGVtLCB1bmRlZmluZWQsIHJvdXRlKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUcmlnZ2VycyBhY3Rpb24gd2l0aCBvcHRpb25hbCBkYXRhIChpdGVtLCBpdGVtSWQsIC4uLikgYW5kIGN1cnJlbnRseSBhY3RpdmF0ZWQgcm91dGUuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gYWN0aW9uIEFjdGlvbi5cbiAgICAgKiBAcGFyYW0gYWN0aW9uRGF0YSBPcHRpb25hbCBhY3Rpb24gZGF0YS5cbiAgICAgKiBAcGFyYW0gcm91dGUgT3B0aW9uYWwgYWN0aXZhdGVkIHJvdXRlLlxuICAgICAqL1xuICAgIHB1YmxpYyB0cmlnZ2VyQWN0aW9uPFQsIFM+KFxuICAgICAgICBhY3Rpb246IEFjdGlvbkRlc2NyaXB0b3I8VD4sXG4gICAgICAgIGl0ZW1JZD86IElkVHlwZSxcbiAgICAgICAgaXRlbT86IFQsXG4gICAgICAgIGFjdGlvbkRhdGE/OiBBY3Rpb25EYXRhLFxuICAgICAgICByb3V0ZT86IEFjdGl2YXRlZFJvdXRlLFxuICAgICAgICB2aWV3Q29udGFpbmVyPzogSVZpZXdDb250YWluZXI8VCwgUz4sXG4gICAgICAgIHNvdXJjZUNvbXBvbmVudD86IGFueVxuICAgICk6IE9ic2VydmFibGU8QWN0aW9uVHJpZ2dlclJlc3VsdDxULCBTLCBJRGF0YVByb3ZpZGVyPFQsIFM+Pj4ge1xuICAgICAgICBpZiAoYWN0aW9uLmFjdGl2YXRpb25UcmlnZ2VyID09PSBBY3Rpb25BY3RpdmF0aW9uVHJpZ2dlckVudW0uT25Sb3V0ZSkge1xuICAgICAgICAgICAgY29uc3QgYmFzZVVybCA9IHRoaXMucm91dGVyLnVybC5zcGxpdCgnPycpWzBdO1xuICAgICAgICAgICAgY29uc3QgcGFyc2VkVXJsOiBVcmxUcmVlID0gdGhpcy5yb3V0ZXIucGFyc2VVcmwodGhpcy5yb3V0ZXIudXJsKTtcbiAgICAgICAgICAgIGxldCBhY3Rpb25VcmwgPSBhY3Rpb24ucm91dGVVcmwgPz8gJyc7XG4gICAgICAgICAgICAvLyBUT0RPOiBkb250IHN0cmlwICcvJywgYnV0IHVzZSBpdCBhY2NvcmRpbmdseSB3aXRoIEFuZ3VsYXIncyByb3V0ZXIgcGF0dGVybnMgKC8sIC4vLCAuLi8pXG4gICAgICAgICAgICBpZiAoYWN0aW9uVXJsLnN0YXJ0c1dpdGgoJy8nKSkge1xuICAgICAgICAgICAgICAgIGFjdGlvblVybCA9IGFjdGlvblVybC5zdWJzdHJpbmcoMSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBpdGVtQW55ID0gKGl0ZW0gPz8ge30pIGFzIGFueTtcbiAgICAgICAgICAgIGNvbnN0IGFjdGlvblVybFNlZ21lbnRzID0gYWN0aW9uVXJsLnNwbGl0KCcvJykubWFwKHMgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChzID09PSAnOml0ZW1JZCcpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGl0ZW1JZDtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHMuc3RhcnRzV2l0aChgOiR7YWN0aW9uLm1vZGVsLnR5cGVOYW1lfS5gKSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gaXRlbUFueVtzLnN1YnN0cmluZyhhY3Rpb24ubW9kZWwudHlwZU5hbWUubGVuZ3RoICsgMildID8/ICcnO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAocy5zdGFydHNXaXRoKCc6JykpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGFjdGlvbkRhdGE/LltzLnN1YnN0cmluZygxKV0gPz8gJyc7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHM7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICByZXR1cm4gb2YoXG4gICAgICAgICAgICAgICAgbmV3IEFjdGlvblRyaWdnZXJSZXN1bHQ8VCwgUywgSURhdGFQcm92aWRlcjxULCBTPj4oXG4gICAgICAgICAgICAgICAgICAgIHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgICAgICAgZnJvbSh0aGlzLnJvdXRlci5uYXZpZ2F0ZShbYmFzZVVybCwgLi4uYWN0aW9uVXJsU2VnbWVudHNdLCB7cmVsYXRpdmVUbzogcm91dGUsIHF1ZXJ5UGFyYW1zOiBwYXJzZWRVcmwucXVlcnlQYXJhbXN9KSlcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICApO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuYWN0aXZhdGVBY3Rpb24oYWN0aW9uLCBpdGVtSWQsIGl0ZW0sIGFjdGlvbkRhdGEsIHZpZXdDb250YWluZXIsIHNvdXJjZUNvbXBvbmVudCkucGlwZShtYXAocmVzID0+IG5ldyBBY3Rpb25UcmlnZ2VyUmVzdWx0PFQsIFMsIElEYXRhUHJvdmlkZXI8VCwgUz4+KHJlcykpKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBkZWFjdGl2YXRlQWN0aW9uPFQ+KGFjdGlvbjogQWN0aW9uRGVzY3JpcHRvcjxUPikge1xuICAgICAgICBpZiAodGhpcy5uYXZpZ2F0aW9uU2VydmljZS5nZXRQcmV2aW91c0xvY2F0aW9uKCkpIHtcbiAgICAgICAgICAgIC8vIHRoZXJlIGFyZSBpbnRlcm5hbCBoaXN0b3J5IHJlY29yZHMsIHNvIGJhY2sgY2FuIGJlIG5vcm1hbGx5IGNhbGxlZFxuICAgICAgICAgICAgdGhpcy5uYXZpZ2F0aW9uU2VydmljZS5iYWNrKCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyB0aGVyZSBpcyBubyBpbnRlcm5hbCBoaXN0b3J5IHJlY29yZHMsIGZpZ3VyZSBvdXQgdGhlIGJhc2UgdXJsIGJ5IGVsaW1pbmF0aW5nIGFjdGlvbiBzcGVjaWZpYyB1cmxcbiAgICAgICAgICAgIGxldCB1cmwgPSB0aGlzLm5hdmlnYXRpb25TZXJ2aWNlLmdldEN1cnJlbnRMb2NhdGlvbigpO1xuICAgICAgICAgICAgaWYgKCF1cmwpIHtcbiAgICAgICAgICAgICAgICB0aGlzLm5hdmlnYXRpb25TZXJ2aWNlLmJhY2soKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgaWYgKHVybC5zdGFydHNXaXRoKCcvJykpIHtcbiAgICAgICAgICAgICAgICAgICAgdXJsID0gdXJsLnN1YnN0cmluZygxKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY29uc3QgdXJsUGF0aFNlZ21lbnRzID0gdXJsLnNwbGl0KCc/JylbMF0uc3BsaXQoJyMnKVswXS5zcGxpdCgnLycpO1xuICAgICAgICAgICAgICAgIGxldCBhY3Rpb25VcmwgPSBhY3Rpb24/LnJvdXRlVXJsID8/ICcnO1xuICAgICAgICAgICAgICAgIGlmIChhY3Rpb25Vcmwuc3RhcnRzV2l0aCgnLycpKSB7XG4gICAgICAgICAgICAgICAgICAgIGFjdGlvblVybCA9IGFjdGlvblVybC5zdWJzdHJpbmcoMSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNvbnN0IGFjdGlvblVybFNlZ21lbnRzID0gYWN0aW9uVXJsLnNwbGl0KCcvJyk7XG4gICAgICAgICAgICAgICAgY29uc3QgcmVkaXJlY3RVcmwgPSB1cmxQYXRoU2VnbWVudHMuc2xpY2UoMCwgdXJsUGF0aFNlZ21lbnRzLmxlbmd0aCAtIGFjdGlvblVybFNlZ21lbnRzLmxlbmd0aCkuam9pbignLycpO1xuICAgICAgICAgICAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlQnlVcmwoYC8ke3JlZGlyZWN0VXJsfWAsIHtyZXBsYWNlVXJsOiB0cnVlfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIHRvTW5nQWN0aW9uRXJyb3IoZXJyb3I/OiBhbnkpOiBNbmdFcnJvciB7XG4gICAgICAgIGNvbnN0IGFjdGlvbkVycm9yOiBNbmdFcnJvciA9IHtcbiAgICAgICAgICAgIG5hbWU6IGVycm9yPy5uYW1lID8/ICdVbmtub3duRXJyb3InLFxuICAgICAgICAgICAgbWVzc2FnZTogZXJyb3I/Lm1lc3NhZ2UgPz8gJ1Vua25vd24gZXJyb3InLFxuICAgICAgICAgICAgY2F1c2U6IGVycm9yXG4gICAgICAgIH07XG4gICAgICAgIGlmIChlcnJvciBpbnN0YW5jZW9mIEh0dHBFcnJvclJlc3BvbnNlKSB7XG4gICAgICAgICAgICBhY3Rpb25FcnJvci5zdGF0dXMgPSBlcnJvci5zdGF0dXM7XG4gICAgICAgICAgICBhY3Rpb25FcnJvci5zdGF0dXNEZXNjcmlwdGlvbiA9IGVycm9yLnN0YXR1c1RleHQ7XG4gICAgICAgICAgICBhY3Rpb25FcnJvci51cmwgPSBlcnJvci51cmwgPz8gdW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLmVycm9yTWFwcGVyLnRvTW5nRXJyb3IoZXJyb3IsIGFjdGlvbkVycm9yKTtcbiAgICB9XG59XG4iXX0=