@c8y/ngx-components 1021.22.0 → 1021.25.0

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 (69) hide show
  1. package/alarms/alarms-date-filter.component.d.ts +22 -10
  2. package/alarms/alarms-date-filter.component.d.ts.map +1 -1
  3. package/alarms/alarms-type-filter.component.d.ts +21 -14
  4. package/alarms/alarms-type-filter.component.d.ts.map +1 -1
  5. package/alarms/alarms-view.service.d.ts +7 -0
  6. package/alarms/alarms-view.service.d.ts.map +1 -1
  7. package/alarms/alarms.model.d.ts +1 -6
  8. package/alarms/alarms.model.d.ts.map +1 -1
  9. package/alarms/alarms.module.d.ts +1 -1
  10. package/alarms/index.d.ts +1 -0
  11. package/alarms/index.d.ts.map +1 -1
  12. package/context-dashboard/context-dashboard.service.d.ts.map +1 -1
  13. package/core/router/scoped-context-route.service.d.ts.map +1 -1
  14. package/datapoints-export-selector/datapoints-export-selector-modal/datapoints-export-selector-file-exporter/datapoints-export-selector-file-exporter.component.d.ts +4 -2
  15. package/datapoints-export-selector/datapoints-export-selector-modal/datapoints-export-selector-file-exporter/datapoints-export-selector-file-exporter.component.d.ts.map +1 -1
  16. package/datapoints-export-selector/datapoints-export-selector.component.d.ts +3 -1
  17. package/datapoints-export-selector/datapoints-export-selector.component.d.ts.map +1 -1
  18. package/datapoints-export-selector/datapoints-export-selector.model.d.ts +17 -0
  19. package/datapoints-export-selector/datapoints-export-selector.model.d.ts.map +1 -1
  20. package/esm2022/alarms/alarm-info.component.mjs +3 -3
  21. package/esm2022/alarms/alarm-severity-to-label.pipe.mjs +2 -2
  22. package/esm2022/alarms/alarms-date-filter.component.mjs +92 -42
  23. package/esm2022/alarms/alarms-type-filter.component.mjs +102 -72
  24. package/esm2022/alarms/alarms-view.service.mjs +16 -2
  25. package/esm2022/alarms/alarms.component.mjs +3 -3
  26. package/esm2022/alarms/alarms.model.mjs +1 -1
  27. package/esm2022/alarms/alarms.module.mjs +3 -3
  28. package/esm2022/alarms/index.mjs +2 -1
  29. package/esm2022/context-dashboard/context-dashboard.service.mjs +18 -5
  30. package/esm2022/core/router/scoped-context-route.service.mjs +9 -4
  31. package/esm2022/core/tabs/tabs-outlet.component.mjs +3 -3
  32. package/esm2022/datapoints-export-selector/datapoints-export-selector-modal/datapoints-export-selector-file-exporter/datapoints-export-selector-file-exporter.component.mjs +29 -6
  33. package/esm2022/datapoints-export-selector/datapoints-export-selector.component.mjs +11 -5
  34. package/esm2022/datapoints-export-selector/datapoints-export-selector.model.mjs +18 -1
  35. package/esm2022/interval-picker/interval-picker.component.mjs +1 -1
  36. package/esm2022/interval-picker/interval-picker.model.mjs +1 -1
  37. package/esm2022/widgets/definitions/alarms/alarm-list/index.mjs +2 -1
  38. package/esm2022/widgets/implementations/alarms/alarm-list-widget-config/alarm-list-widget-config.component.mjs +73 -4
  39. package/esm2022/widgets/implementations/alarms/alarm-list-widget-view/alarm-list-widget.component.mjs +29 -5
  40. package/esm2022/widgets/implementations/alarms/alarm-list-widget.model.mjs +7 -1
  41. package/esm2022/widgets/implementations/alarms/alarm-widget.service.mjs +11 -1
  42. package/fesm2022/c8y-ngx-components-alarms.mjs +199 -107
  43. package/fesm2022/c8y-ngx-components-alarms.mjs.map +1 -1
  44. package/fesm2022/c8y-ngx-components-context-dashboard.mjs +17 -4
  45. package/fesm2022/c8y-ngx-components-context-dashboard.mjs.map +1 -1
  46. package/fesm2022/c8y-ngx-components-datapoints-export-selector.mjs +52 -7
  47. package/fesm2022/c8y-ngx-components-datapoints-export-selector.mjs.map +1 -1
  48. package/fesm2022/c8y-ngx-components-interval-picker.mjs.map +1 -1
  49. package/fesm2022/c8y-ngx-components-widgets-definitions-alarms-alarm-list.mjs +1 -0
  50. package/fesm2022/c8y-ngx-components-widgets-definitions-alarms-alarm-list.mjs.map +1 -1
  51. package/fesm2022/c8y-ngx-components-widgets-implementations-alarms.mjs +123 -14
  52. package/fesm2022/c8y-ngx-components-widgets-implementations-alarms.mjs.map +1 -1
  53. package/fesm2022/c8y-ngx-components.mjs +10 -5
  54. package/fesm2022/c8y-ngx-components.mjs.map +1 -1
  55. package/interval-picker/interval-picker.component.d.ts +2 -2
  56. package/interval-picker/interval-picker.component.d.ts.map +1 -1
  57. package/interval-picker/interval-picker.model.d.ts +5 -0
  58. package/interval-picker/interval-picker.model.d.ts.map +1 -1
  59. package/locales/de.po +2 -2
  60. package/locales/locales.pot +18 -6
  61. package/package.json +1 -1
  62. package/widgets/definitions/alarms/alarm-list/index.d.ts.map +1 -1
  63. package/widgets/implementations/alarms/alarm-list-widget-config/alarm-list-widget-config.component.d.ts +12 -1
  64. package/widgets/implementations/alarms/alarm-list-widget-config/alarm-list-widget-config.component.d.ts.map +1 -1
  65. package/widgets/implementations/alarms/alarm-list-widget-view/alarm-list-widget.component.d.ts +12 -1
  66. package/widgets/implementations/alarms/alarm-list-widget-view/alarm-list-widget.component.d.ts.map +1 -1
  67. package/widgets/implementations/alarms/alarm-list-widget.model.d.ts +11 -1
  68. package/widgets/implementations/alarms/alarm-list-widget.model.d.ts.map +1 -1
  69. package/widgets/implementations/alarms/alarm-widget.service.d.ts.map +1 -1
@@ -13,8 +13,8 @@ import * as i1 from "../alarm-widget.service";
13
13
  import * as i2 from "@c8y/ngx-components";
14
14
  import * as i3 from "@c8y/client";
15
15
  import * as i4 from "@c8y/ngx-components/alarms";
16
- import * as i5 from "../alarm-widget-alarms-reload.component";
17
- import * as i6 from "@angular/common";
16
+ import * as i5 from "@angular/common";
17
+ import * as i6 from "../alarm-widget-alarms-reload.component";
18
18
  /**
19
19
  * To ensure backward compatibility, legacy widgets will be converted to the new implementation.
20
20
  */
@@ -66,6 +66,11 @@ export class AlarmListWidgetComponent {
66
66
  this.handleRealtimeAlarms(this.config, this.alarmWidgetAlarmsReloadComp.isRealtimeToggleOn);
67
67
  }
68
68
  }
69
+ ngOnChanges(changes) {
70
+ if (changes?.config?.currentValue?.date) {
71
+ this.config.dateFilter = changes.config.currentValue.date;
72
+ }
73
+ }
69
74
  ngOnDestroy() {
70
75
  if (this.config.isRealtime) {
71
76
  this.unsubscribe$.next();
@@ -78,8 +83,14 @@ export class AlarmListWidgetComponent {
78
83
  }
79
84
  }
80
85
  async fetchAlarms() {
86
+ this.updateDateFilter();
81
87
  this.alarms$.next(await this.getAlarms());
82
88
  }
89
+ async onDateFilterChange(event) {
90
+ this.config.dateFilter = event.selectedDates;
91
+ this.config.interval = event.interval;
92
+ await this.fetchAlarms();
93
+ }
83
94
  handleRealTimeToggleChange(isRealtimeToggleOn) {
84
95
  if (!isRealtimeToggleOn) {
85
96
  this.unsubscribe$.next();
@@ -88,6 +99,19 @@ export class AlarmListWidgetComponent {
88
99
  this.unsubscribe$ = new Subject();
89
100
  this.handleRealtimeAlarms(this.config, isRealtimeToggleOn);
90
101
  }
102
+ /**
103
+ * Updates the widget's date filter based on the currently selected interval.
104
+ * If the interval is set to last hour, we will configure the date filter to dynamically show alarms only from the last hour.
105
+ */
106
+ updateDateFilter() {
107
+ if (this.config.interval === 'custom' || this.config.widgetInstanceGlobalTimeContext) {
108
+ return;
109
+ }
110
+ if (!this.config.interval) {
111
+ this.config.interval = 'none';
112
+ }
113
+ this.config.dateFilter = this.alarmsViewService.getDateTimeContextByInterval(this.config.interval);
114
+ }
91
115
  /**
92
116
  * Updates the widget's refresh mode based on the current configuration and the interval refresh setting.
93
117
  * If the widget's 'isRealtime' configuration differs from the current global interval refresh setting (application options setting),
@@ -202,15 +226,15 @@ export class AlarmListWidgetComponent {
202
226
  .subscribe();
203
227
  }
204
228
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: AlarmListWidgetComponent, deps: [{ token: i1.AlarmWidgetService }, { token: i2.AlarmRealtimeService }, { token: i3.AlarmService }, { token: i4.AlarmsViewService }, { token: i2.AlarmWithChildrenRealtimeService }, { token: i2.DashboardChildComponent }, { token: i2.AlertService }, { token: i2.WidgetGlobalAutoRefreshService }], target: i0.ɵɵFactoryTarget.Component }); }
205
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.9", type: AlarmListWidgetComponent, selector: "c8y-alarm-list-widget", inputs: { config: "config" }, providers: [AlarmRealtimeService, AlarmWithChildrenRealtimeService], viewQueries: [{ propertyName: "alarmWidgetAlarmsReloadComp", first: true, predicate: AlarmWidgetAlarmsReloadComponent, descendants: true }], ngImport: i0, template: "<c8y-alarms-list\n #list\n [alarms]=\"alarms$ | async\"\n [navigationOptions]=\"{\n alwaysNavigateToAllAlarms: !config.device,\n allowNavigationToAlarmsView: true,\n includeClearedQueryParams: true,\n queryParamsHandling: ''\n }\"\n [isInitialLoading]=\"isLoading$ | async\"\n [hasPermissions]=\"!isDisabled\"\n>\n <c8y-alarm-widget-alarms-reload\n class=\"d-contents\"\n [isIntervalRefresh]=\"isIntervalRefresh\"\n [refreshInterval]=\"refreshInterval\"\n [config]=\"config\"\n [isLoading]=\"isLoading$\"\n [isScrolling]=\"list.isScrolling\"\n [isDisabled]=\"isDisabled\"\n (onCountdownEnded)=\"fetchAlarms()\"\n (onRealTimeToggleChanged)=\"handleRealTimeToggleChange($event)\"\n ></c8y-alarm-widget-alarms-reload>\n</c8y-alarms-list>\n", dependencies: [{ kind: "component", type: i4.AlarmsListComponent, selector: "c8y-alarms-list", inputs: ["alarms", "hasPermissions", "typeFilters", "loadMoreMode", "navigationOptions", "isInitialLoading", "splitView"], outputs: ["onSelectedAlarm", "onScrollingStateChange"] }, { kind: "component", type: i5.AlarmWidgetAlarmsReloadComponent, selector: "c8y-alarm-widget-alarms-reload", inputs: ["isIntervalRefresh", "refreshInterval", "config", "isLoading", "isScrolling", "isDisabled"], outputs: ["onCountdownEnded", "onRealTimeToggleChanged"] }, { kind: "pipe", type: i6.AsyncPipe, name: "async" }] }); }
229
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.9", type: AlarmListWidgetComponent, selector: "c8y-alarm-list-widget", inputs: { config: "config" }, providers: [AlarmRealtimeService, AlarmWithChildrenRealtimeService], viewQueries: [{ propertyName: "alarmWidgetAlarmsReloadComp", first: true, predicate: AlarmWidgetAlarmsReloadComponent, descendants: true }], usesOnChanges: true, ngImport: i0, template: "<c8y-alarms-list\n #list\n [alarms]=\"alarms$ | async\"\n [navigationOptions]=\"{\n alwaysNavigateToAllAlarms: !config.device,\n allowNavigationToAlarmsView: true,\n includeClearedQueryParams: true,\n queryParamsHandling: ''\n }\"\n [isInitialLoading]=\"isLoading$ | async\"\n [hasPermissions]=\"!isDisabled\"\n>\n <c8y-alarms-date-filter\n *ngIf=\"config.displayDateSelection\"\n [updateQueryParams]=\"false\"\n [date]=\"this.config.dateFilter\"\n [DEFAULT_INTERVAL]=\"config.interval || 'none'\"\n (dateFilterChange)=\"onDateFilterChange($event)\"\n ></c8y-alarms-date-filter>\n <c8y-alarm-widget-alarms-reload\n class=\"d-contents\"\n [isIntervalRefresh]=\"isIntervalRefresh\"\n [refreshInterval]=\"refreshInterval\"\n [config]=\"config\"\n [isLoading]=\"isLoading$\"\n [isScrolling]=\"list.isScrolling\"\n [isDisabled]=\"isDisabled\"\n (onCountdownEnded)=\"fetchAlarms()\"\n (onRealTimeToggleChanged)=\"handleRealTimeToggleChange($event)\"\n ></c8y-alarm-widget-alarms-reload>\n</c8y-alarms-list>\n", dependencies: [{ kind: "component", type: i4.AlarmsListComponent, selector: "c8y-alarms-list", inputs: ["alarms", "hasPermissions", "typeFilters", "loadMoreMode", "navigationOptions", "isInitialLoading", "splitView"], outputs: ["onSelectedAlarm", "onScrollingStateChange"] }, { kind: "component", type: i4.AlarmsDateFilterComponent, selector: "c8y-alarms-date-filter", inputs: ["DEFAULT_INTERVAL", "updateQueryParams", "date"], outputs: ["dateFilterChange"] }, { kind: "directive", type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i6.AlarmWidgetAlarmsReloadComponent, selector: "c8y-alarm-widget-alarms-reload", inputs: ["isIntervalRefresh", "refreshInterval", "config", "isLoading", "isScrolling", "isDisabled"], outputs: ["onCountdownEnded", "onRealTimeToggleChanged"] }, { kind: "pipe", type: i5.AsyncPipe, name: "async" }] }); }
206
230
  }
207
231
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: AlarmListWidgetComponent, decorators: [{
208
232
  type: Component,
209
- args: [{ selector: 'c8y-alarm-list-widget', providers: [AlarmRealtimeService, AlarmWithChildrenRealtimeService], template: "<c8y-alarms-list\n #list\n [alarms]=\"alarms$ | async\"\n [navigationOptions]=\"{\n alwaysNavigateToAllAlarms: !config.device,\n allowNavigationToAlarmsView: true,\n includeClearedQueryParams: true,\n queryParamsHandling: ''\n }\"\n [isInitialLoading]=\"isLoading$ | async\"\n [hasPermissions]=\"!isDisabled\"\n>\n <c8y-alarm-widget-alarms-reload\n class=\"d-contents\"\n [isIntervalRefresh]=\"isIntervalRefresh\"\n [refreshInterval]=\"refreshInterval\"\n [config]=\"config\"\n [isLoading]=\"isLoading$\"\n [isScrolling]=\"list.isScrolling\"\n [isDisabled]=\"isDisabled\"\n (onCountdownEnded)=\"fetchAlarms()\"\n (onRealTimeToggleChanged)=\"handleRealTimeToggleChange($event)\"\n ></c8y-alarm-widget-alarms-reload>\n</c8y-alarms-list>\n" }]
233
+ args: [{ selector: 'c8y-alarm-list-widget', providers: [AlarmRealtimeService, AlarmWithChildrenRealtimeService], template: "<c8y-alarms-list\n #list\n [alarms]=\"alarms$ | async\"\n [navigationOptions]=\"{\n alwaysNavigateToAllAlarms: !config.device,\n allowNavigationToAlarmsView: true,\n includeClearedQueryParams: true,\n queryParamsHandling: ''\n }\"\n [isInitialLoading]=\"isLoading$ | async\"\n [hasPermissions]=\"!isDisabled\"\n>\n <c8y-alarms-date-filter\n *ngIf=\"config.displayDateSelection\"\n [updateQueryParams]=\"false\"\n [date]=\"this.config.dateFilter\"\n [DEFAULT_INTERVAL]=\"config.interval || 'none'\"\n (dateFilterChange)=\"onDateFilterChange($event)\"\n ></c8y-alarms-date-filter>\n <c8y-alarm-widget-alarms-reload\n class=\"d-contents\"\n [isIntervalRefresh]=\"isIntervalRefresh\"\n [refreshInterval]=\"refreshInterval\"\n [config]=\"config\"\n [isLoading]=\"isLoading$\"\n [isScrolling]=\"list.isScrolling\"\n [isDisabled]=\"isDisabled\"\n (onCountdownEnded)=\"fetchAlarms()\"\n (onRealTimeToggleChanged)=\"handleRealTimeToggleChange($event)\"\n ></c8y-alarm-widget-alarms-reload>\n</c8y-alarms-list>\n" }]
210
234
  }], ctorParameters: () => [{ type: i1.AlarmWidgetService }, { type: i2.AlarmRealtimeService }, { type: i3.AlarmService }, { type: i4.AlarmsViewService }, { type: i2.AlarmWithChildrenRealtimeService }, { type: i2.DashboardChildComponent }, { type: i2.AlertService }, { type: i2.WidgetGlobalAutoRefreshService }], propDecorators: { config: [{
211
235
  type: Input
212
236
  }], alarmWidgetAlarmsReloadComp: [{
213
237
  type: ViewChild,
214
238
  args: [AlarmWidgetAlarmsReloadComponent]
215
239
  }] } });
216
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWxhcm0tbGlzdC13aWRnZXQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vd2lkZ2V0cy9pbXBsZW1lbnRhdGlvbnMvYWxhcm1zL2FsYXJtLWxpc3Qtd2lkZ2V0LXZpZXcvYWxhcm0tbGlzdC13aWRnZXQuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vd2lkZ2V0cy9pbXBsZW1lbnRhdGlvbnMvYWxhcm1zL2FsYXJtLWxpc3Qtd2lkZ2V0LXZpZXcvYWxhcm0tbGlzdC13aWRnZXQuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFpQixTQUFTLEVBQUUsS0FBSyxFQUFxQixTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDOUYsT0FBTyxFQUFFLFlBQVksRUFBZ0MsTUFBTSxhQUFhLENBQUM7QUFDekUsT0FBTyxFQUNMLG9CQUFvQixFQUNwQixnQ0FBZ0MsRUFDaEMsWUFBWSxFQUNaLHVCQUF1QixFQUN2QixvQkFBb0IsRUFFcEIscUJBQXFCLEVBRXJCLE9BQU8sRUFDUCx3QkFBd0IsRUFDeEIsOEJBQThCLEVBQy9CLE1BQU0scUJBQXFCLENBQUM7QUFDN0IsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDL0QsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFDN0MsT0FBTyxFQUFFLGVBQWUsRUFBYyxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDNUQsT0FBTyxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsR0FBRyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDdEQsT0FBTyxFQUNMLHNCQUFzQixFQUV0Qix1QkFBdUIsRUFDeEIsTUFBTSw0QkFBNEIsQ0FBQztBQUNwQyxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUM3RCxPQUFPLEVBQUUsZ0NBQWdD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LGtCQUFrQixDQUFDLDBCQUEwQixDQUN6RSxJQUFJLENBQUMsaUJBQWlCLEVBQ3RCLHVCQUF1QixDQUN4QixDQUFDO1lBQ0YsTUFBTSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLGdCQUFnQixDQUFDLENBQUM7WUFFN0MsT0FBTztRQUNULENBQUM7UUFFRCxJQUFJLFFBQVEsS0FBSyxzQkFBc0IsRUFBRSxDQUFDO1lBQ3hDLE1BQU0sZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLGtCQUFrQixDQUFDLDBCQUEwQixDQUN6RSxJQUFJLENBQUMsaUJBQWlCLENBQ3ZCLENBQUM7WUFDRixNQUFNLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsZ0JBQWdCLENBQUMsQ0FBQztRQUMvQyxDQUFDO0lBQ0gsQ0FBQztJQUVPLDBCQUEwQjtRQUNoQyxJQUFJLENBQUMsVUFBVTthQUNaLElBQUksQ0FDSCxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQ1Asd0JBQXdCLENBQUMsSUFBSSxDQUFDLHVCQUF1QixDQUFDLEVBQ3RELFNBQVMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQ3pCO2FBQ0EsU0FBUyxFQUFFLENBQUM7SUFDakIsQ0FBQzs4R0F2UVUsd0JBQXdCO2tHQUF4Qix3QkFBd0IsOEVBRnhCLENBQUMsb0JBQW9CLEVBQUUsZ0NBQWdDLENBQUMsdUZBMEJ4RCxnQ0FBZ0MsZ0RDM0Q3QyxpeEJBd0JBOzsyRkRXYSx3QkFBd0I7a0JBTHBDLFNBQVM7K0JBQ0UsdUJBQXVCLGFBRXRCLENBQUMsb0JBQW9CLEVBQUUsZ0NBQWdDLENBQUM7a1ZBUTFELE1BQU07c0JBQWQsS0FBSztnQkFtQk4sMkJBQTJCO3NCQUQxQixTQUFTO3VCQUFDLGdDQUFnQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFmdGVyVmlld0luaXQsIENvbXBvbmVudCwgSW5wdXQsIE9uRGVzdHJveSwgT25Jbml0LCBWaWV3Q2hpbGQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEFsYXJtU2VydmljZSwgSUFsYXJtLCBJUmVzdWx0LCBJUmVzdWx0TGlzdCB9IGZyb20gJ0BjOHkvY2xpZW50JztcbmltcG9ydCB7XG4gIEFsYXJtUmVhbHRpbWVTZXJ2aWNlLFxuICBBbGFybVdpdGhDaGlsZHJlblJlYWx0aW1lU2VydmljZSxcbiAgQWxlcnRTZXJ2aWNlLFxuICBEYXNoYm9hcmRDaGlsZENvbXBvbmVudCxcbiAgRGlzbWlzc0FsZXJ0U3RyYXRlZ3ksXG4gIER5bmFtaWNDb21wb25lbnQsXG4gIER5bmFtaWNDb21wb25lbnRBbGVydCxcbiAgRHluYW1pY0NvbXBvbmVudEFsZXJ0QWdncmVnYXRvcixcbiAgZ2V0dGV4dCxcbiAgZ2xvYmFsQXV0b1JlZnJlc2hMb2FkaW5nLFxuICBXaWRnZXRHbG9iYWxBdXRvUmVmcmVzaFNlcnZpY2Vcbn0gZnJvbSAnQGM4eS9uZ3gtY29tcG9uZW50cyc7XG5pbXBvcnQgeyBBbGFybXNWaWV3U2VydmljZSB9IGZyb20gJ0BjOHkvbmd4LWNvbXBvbmVudHMvYWxhcm1zJztcbmltcG9ydCB7IGlzRW1wdHksIGlzRXF1YWwgfSBmcm9tICdsb2Rhc2gtZXMnO1xuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBPYnNlcnZhYmxlLCBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBza2lwLCB0YWtlVW50aWwsIHRhcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7XG4gIEFTU0VUX0FMQVJNU19XSURHRVRfSUQsXG4gIEFsYXJtTGlzdFdpZGdldENvbmZpZyxcbiAgUkVDRU5UX0FMQVJNU19XSURHRVRfSURcbn0gZnJvbSAnLi4vYWxhcm0tbGlzdC13aWRnZXQubW9kZWwnO1xuaW1wb3J0IHsgQWxhcm1XaWRnZXRTZXJ2aWNlIH0gZnJvbSAnLi4vYWxhcm0td2lkZ2V0LnNlcnZpY2UnO1xuaW1wb3J0IHsgQWxhcm1XaWRnZXRBbGFybXNSZWxvYWRDb21wb25lbnQgfSBmcm9tICcuLi9hbGFybS13aWRnZXQtYWxhcm1zLXJlbG9hZC5jb21wb25lbnQnO1xuXG4vKipcbiAqIFRvIGVuc3VyZSBiYWNrd2FyZCBjb21wYXRpYmlsaXR5LCBsZWdhY3kgd2lkZ2V0cyB3aWxsIGJlIGNvbnZlcnRlZCB0byB0aGUgbmV3IGltcGxlbWVudGF0aW9uLlxuICovXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdjOHktYWxhcm0tbGlzdC13aWRnZXQnLFxuICB0ZW1wbGF0ZVVybDogJy4vYWxhcm0tbGlzdC13aWRnZXQuY29tcG9uZW50Lmh0bWwnLFxuICBwcm92aWRlcnM6IFtBbGFybVJlYWx0aW1lU2VydmljZSwgQWxhcm1XaXRoQ2hpbGRyZW5SZWFsdGltZVNlcnZpY2VdXG59KVxuZXhwb3J0IGNsYXNzIEFsYXJtTGlzdFdpZGdldENvbXBvbmVudFxuICBpbXBsZW1lbnRzIE9uSW5pdCwgQWZ0ZXJWaWV3SW5pdCwgT25EZXN0cm95LCBEeW5hbWljQ29tcG9uZW50XG57XG4gIC8qKlxuICAgKiAgQWxhcm0gd2lkZ2V0IGNvbmZpZy5cbiAgICovXG4gIEBJbnB1dCgpIGNvbmZpZzogQWxhcm1MaXN0V2lkZ2V0Q29uZmlnO1xuICAvKipcbiAgICogUmVwcmVzZW50cyBjdXJyZW50IGFsYXJtcy5cbiAgICovXG4gIGFsYXJtcyQ6IEJlaGF2aW9yU3ViamVjdDxJUmVzdWx0TGlzdDxJQWxhcm0+IHwgbnVsbD4gPSBuZXcgQmVoYXZpb3JTdWJqZWN0KG51bGwpO1xuICAvKipcbiAgICogQ3VycmVudCBpc0xvYWRpbmcgc3RhdGUuIEJhc2VkIG9uIGl0IG5leHQgY291bnRkb3duIGN5Y2xlIGlzIGJlaW5nIHN0YXJ0ZWQuXG4gICAqL1xuICBpc0xvYWRpbmckOiBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4gPSBuZXcgQmVoYXZpb3JTdWJqZWN0KHRydWUpO1xuICAvKipcbiAgICogU3RhdGUgb2YgdGhpcyBib29sZWFuIGRlcGVuZHMgb24gYW4gQXBwbGljYXRpb24gT3B0aW9ucyBcImFsYXJtc1JlZnJlc2hUeXBlXCIgc2V0dGluZy5cbiAgICovXG4gIGlzSW50ZXJ2YWxSZWZyZXNoOiBib29sZWFuO1xuICAvKipcbiAgICogQ3VycmVudCByZWZyZXNoIGludGVydmFsIHNldCBpbiBhIHdpZGdldCBjb25maWcuXG4gICAqL1xuICByZWZyZXNoSW50ZXJ2YWw6IG51bWJlcjtcblxuICBAVmlld0NoaWxkKEFsYXJtV2lkZ2V0QWxhcm1zUmVsb2FkQ29tcG9uZW50KVxuICBhbGFybVdpZGdldEFsYXJtc1JlbG9hZENvbXA6IEFsYXJtV2lkZ2V0QWxhcm1zUmVsb2FkQ29tcG9uZW50O1xuICBhbGVydHM6IER5bmFtaWNDb21wb25lbnRBbGVydEFnZ3JlZ2F0b3I7XG5cbiAgcHJpdmF0ZSBUSU1FT1VUX0VSUk9SX1RFWFQgPSBnZXR0ZXh0KFxuICAgICdUaGUgcmVxdWVzdCBpcyB0YWtpbmcgbG9uZ2VyIHRoYW4gdXN1YWwuIFdlIGFwb2xvZ2l6ZSBmb3IgdGhlIGluY29udmVuaWVuY2UuJ1xuICApO1xuICBwcml2YXRlIFNFUlZFUl9FUlJPUl9URVhUID0gZ2V0dGV4dCgnU2VydmVyIGVycm9yIG9jY3VycmVkLicpO1xuICBwcml2YXRlIHVuc3Vic2NyaWJlJCA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG4gIHByaXZhdGUgZGVzdHJveSQ6IFN1YmplY3Q8dm9pZD4gPSBuZXcgU3ViamVjdCgpO1xuICBpc0Rpc2FibGVkID0gZmFsc2U7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBhbGFybVdpZGdldFNlcnZpY2U6IEFsYXJtV2lkZ2V0U2VydmljZSxcbiAgICBwcml2YXRlIGFsYXJtUmVhbHRpbWVTZXJ2aWNlOiBBbGFybVJlYWx0aW1lU2VydmljZSxcbiAgICBwcml2YXRlIGFsYXJtU2VydmljZTogQWxhcm1TZXJ2aWNlLFxuICAgIHByaXZhdGUgYWxhcm1zVmlld1NlcnZpY2U6IEFsYXJtc1ZpZXdTZXJ2aWNlLFxuICAgIHByaXZhdGUgYWxhcm1XaXRoQ2hpbGRyZW5SZWFsdGltZVNlcnZpY2U6IEFsYXJtV2l0aENoaWxkcmVuUmVhbHRpbWVTZXJ2aWNlLFxuICAgIHByaXZhdGUgZGFzaGJvYXJkQ2hpbGQ6IERhc2hib2FyZENoaWxkQ29tcG9uZW50LFxuICAgIHByaXZhdGUgYWxlcnRTZXJ2aWNlOiBBbGVydFNlcnZpY2UsXG4gICAgcHJpdmF0ZSB3aWRnZXRHbG9iYWxBdXRvUmVmcmVzaDogV2lkZ2V0R2xvYmFsQXV0b1JlZnJlc2hTZXJ2aWNlXG4gICkge1xuICAgIHRoaXMuaXNJbnRlcnZhbFJlZnJlc2ggPSB0aGlzLmFsYXJtc1ZpZXdTZXJ2aWNlLmlzSW50ZXJ2YWxSZWZyZXNoKCk7XG4gIH1cblxuICBhc3luYyBuZ09uSW5pdCgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICB0aGlzLmFsZXJ0cy5zZXRBbGVydEdyb3VwRGlzbWlzc1N0cmF0ZWd5KFxuICAgICAgJ3dhcm5pbmcnLFxuICAgICAgRGlzbWlzc0FsZXJ0U3RyYXRlZ3kuVEVNUE9SQVJZX09SX1BFUk1BTkVOVFxuICAgICk7XG5cbiAgICBpZiAodGhpcy5hbGFybVdpZGdldFNlcnZpY2UuaXNPbGRBbGFybUNvbmZpZ1N0cnVjdHVyZSh0aGlzLmNvbmZpZykpIHtcbiAgICAgIGNvbnN0IG1hcHBlZENvbmZpZyA9IHRoaXMuYWxhcm1XaWRnZXRTZXJ2aWNlLm1hcFRvTmV3Q29uZmlnU3RydWN0dXJlKFxuICAgICAgICB0aGlzLmNvbmZpZyxcbiAgICAgICAgdGhpcy5pc0ludGVydmFsUmVmcmVzaFxuICAgICAgKTtcbiAgICAgIE9iamVjdC5hc3NpZ24odGhpcy5jb25maWcsIG1hcHBlZENvbmZpZyk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuY29uZmlnLndpZGdldEluc3RhbmNlR2xvYmFsQXV0b1JlZnJlc2hDb250ZXh0ICYmICF0aGlzLmNvbmZpZy5pc1JlYWx0aW1lKSB7XG4gICAgICB0aGlzLmhhbmRsZUdsb2JhbFJlZnJlc2hMb2FkaW5nKCk7XG4gICAgfVxuICAgIGNvbnN0IF9jb25maWcgPSB0aGlzLmRhc2hib2FyZENoaWxkWydkYXRhJ10/LmNvbmZpZztcbiAgICBjb25zdCBpc0xlZ2FjeVdpZGdldFdpdGhvdXRDb25maWd1cmF0aW9uID1cbiAgICAgIGlzRW1wdHkoX2NvbmZpZykgfHwgaXNFcXVhbChfY29uZmlnLCB7IGRpc3BsYXlTZXR0aW5nczogeyBnbG9iYWxBdXRvUmVmcmVzaENvbnRleHQ6IHRydWUgfSB9KTtcblxuICAgIGlmIChpc0xlZ2FjeVdpZGdldFdpdGhvdXRDb25maWd1cmF0aW9uKSB7XG4gICAgICB0aGlzLnNldExlZ2FjeVJlY2VudE9yQ3JpdGljYWxBbGFybVdpZGdldENvbmZpZygpO1xuICAgIH1cblxuICAgIHRoaXMudXBkYXRlV2lkZ2V0UmVmcmVzaE1vZGUoKTtcbiAgICB0aGlzLnJlZnJlc2hJbnRlcnZhbCA9ICEhdGhpcy5jb25maWc/LnJlZnJlc2hJbnRlcnZhbCAmJiB0aGlzLmNvbmZpZz8ucmVmcmVzaEludGVydmFsO1xuICAgIGF3YWl0IHRoaXMuZmV0Y2hBbGFybXMoKTtcbiAgfVxuXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuaXNJbnRlcnZhbFJlZnJlc2ggJiYgdGhpcy5jb25maWcucmVmcmVzaE9wdGlvbiA9PT0gJ2ludGVydmFsJykge1xuICAgICAgdGhpcy5oYW5kbGVSZWFsdGltZUFsYXJtcyh0aGlzLmNvbmZpZywgdGhpcy5hbGFybVdpZGdldEFsYXJtc1JlbG9hZENvbXAuaXNSZWFsdGltZVRvZ2dsZU9uKTtcbiAgICB9XG4gIH1cblxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5jb25maWcuaXNSZWFsdGltZSkge1xuICAgICAgdGhpcy51bnN1YnNjcmliZSQubmV4dCgpO1xuICAgICAgdGhpcy51bnN1YnNjcmliZSQuY29tcGxldGUoKTtcbiAgICB9XG5cbiAgICB0aGlzLmRlc3Ryb3kkLm5leHQoKTtcbiAgICB0aGlzLmRlc3Ryb3kkLmNvbXBsZXRlKCk7XG5cbiAgICBpZiAodGhpcy5jb25maWcud2lkZ2V0SW5zdGFuY2VHbG9iYWxBdXRvUmVmcmVzaENvbnRleHQgJiYgdGhpcy5pc0xvYWRpbmckLnZhbHVlKSB7XG4gICAgICB0aGlzLndpZGdldEdsb2JhbEF1dG9SZWZyZXNoLmRlY3JlbWVudExvYWRpbmcoKTtcbiAgICB9XG4gIH1cblxuICBhc3luYyBmZXRjaEFsYXJtcygpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICB0aGlzLmFsYXJtcyQubmV4dChhd2FpdCB0aGlzLmdldEFsYXJtcygpKTtcbiAgfVxuXG4gIGhhbmRsZVJlYWxUaW1lVG9nZ2xlQ2hhbmdlKGlzUmVhbHRpbWVUb2dnbGVPbjogYm9vbGVhbik6IHZvaWQge1xuICAgIGlmICghaXNSZWFsdGltZVRvZ2dsZU9uKSB7XG4gICAgICB0aGlzLnVuc3Vic2NyaWJlJC5uZXh0KCk7XG4gICAgICB0aGlzLnVuc3Vic2NyaWJlJC5jb21wbGV0ZSgpO1xuICAgIH1cblxuICAgIHRoaXMudW5zdWJzY3JpYmUkID0gbmV3IFN1YmplY3QoKTtcbiAgICB0aGlzLmhhbmRsZVJlYWx0aW1lQWxhcm1zKHRoaXMuY29uZmlnLCBpc1JlYWx0aW1lVG9nZ2xlT24pO1xuICB9XG5cbiAgLyoqXG4gICAqIFVwZGF0ZXMgdGhlIHdpZGdldCdzIHJlZnJlc2ggbW9kZSBiYXNlZCBvbiB0aGUgY3VycmVudCBjb25maWd1cmF0aW9uIGFuZCB0aGUgaW50ZXJ2YWwgcmVmcmVzaCBzZXR0aW5nLlxuICAgKiBJZiB0aGUgd2lkZ2V0J3MgJ2lzUmVhbHRpbWUnIGNvbmZpZ3VyYXRpb24gZGlmZmVycyBmcm9tIHRoZSBjdXJyZW50IGdsb2JhbCBpbnRlcnZhbCByZWZyZXNoIHNldHRpbmcgKGFwcGxpY2F0aW9uIG9wdGlvbnMgc2V0dGluZyksXG4gICAqIHRoZSB3aWRnZXQncyBtb2RlIGlzIHVwZGF0ZWQgdG8gZWl0aGVyICdyZWFsdGltZScgb3IgJ2ludGVydmFsJy4gSW4gJ3JlYWx0aW1lJyBtb2RlLCB0aGUgcmVmcmVzaCBpbnRlcnZhbCBpcyBudWxsLFxuICAgKiBhbmQgaW4gJ2ludGVydmFsJyBtb2RlLCBpdCBpcyBzZXQgdG8gdGhlIGRlZmF1bHQgaW50ZXJ2YWwgdmFsdWUuXG4gICAqL1xuICBwcml2YXRlIHVwZGF0ZVdpZGdldFJlZnJlc2hNb2RlKCk6IHZvaWQge1xuICAgIGNvbnN0IGlzUmVmcmVzaFR5cGVTd2l0Y2hlZCA9ICEhdGhpcy5jb25maWcuaXNSZWFsdGltZSAhPT0gIXRoaXMuaXNJbnRlcnZhbFJlZnJlc2g7XG4gICAgaWYgKCFpc1JlZnJlc2hUeXBlU3dpdGNoZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLmNvbmZpZy5pc1JlYWx0aW1lID0gIXRoaXMuaXNJbnRlcnZhbFJlZnJlc2g7XG5cbiAgICBpZiAodGhpcy5jb25maWcuaXNSZWFsdGltZSkge1xuICAgICAgLy8gU3dpdGNoaW5nIHdpZGdldCB0byByZWFsdGltZSBtb2RlXG4gICAgICB0aGlzLmNvbmZpZy5yZWZyZXNoSW50ZXJ2YWwgPSBudWxsO1xuICAgICAgdGhpcy5jb25maWcucmVmcmVzaE9wdGlvbiA9IG51bGw7XG4gICAgICB0aGlzLmNvbmZpZy53aWRnZXRJbnN0YW5jZUdsb2JhbEF1dG9SZWZyZXNoQ29udGV4dCA9IGZhbHNlO1xuICAgICAgdGhpcy5jb25maWcuaXNBdXRvUmVmcmVzaEVuYWJsZWQgPSB0cnVlO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBTd2l0Y2hpbmcgd2lkZ2V0IHRvIGludGVydmFsIG1vZGVcbiAgICAgIHRoaXMuY29uZmlnLnJlZnJlc2hJbnRlcnZhbCA9IHRoaXMuYWxhcm1zVmlld1NlcnZpY2UuREVGQVVMVF9JTlRFUlZBTF9WQUxVRTtcbiAgICAgIHRoaXMuY29uZmlnLnJlZnJlc2hPcHRpb24gPSB0aGlzLmFsYXJtc1ZpZXdTZXJ2aWNlLkRFRkFVTFRfUkVGUkVTSF9PUFRJT05fVkFMVUU7XG4gICAgICB0aGlzLmNvbmZpZy53aWRnZXRJbnN0YW5jZUdsb2JhbEF1dG9SZWZyZXNoQ29udGV4dCA9IGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgZ2V0QWxhcm1zKCk6IFByb21pc2U8SVJlc3VsdExpc3Q8SUFsYXJtPj4ge1xuICAgIHRyeSB7XG4gICAgICB0aGlzLmlzTG9hZGluZyQubmV4dCh0cnVlKTtcbiAgICAgIHJldHVybiBhd2FpdCB0aGlzLmFsYXJtU2VydmljZS5saXN0KFxuICAgICAgICB0aGlzLmFsYXJtV2lkZ2V0U2VydmljZS5tYXBDb25maWdUb1F1ZXJ5RmlsdGVyKHRoaXMuY29uZmlnKVxuICAgICAgKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgdGhpcy5hbGVydHMuYWRkQWxlcnRzKFxuICAgICAgICBuZXcgRHluYW1pY0NvbXBvbmVudEFsZXJ0KHtcbiAgICAgICAgICB0eXBlOiAnd2FybmluZycsXG4gICAgICAgICAgdGV4dDpcbiAgICAgICAgICAgIGVycm9yPy5uYW1lID09PSAnVGltZW91dEVycm9yJ1xuICAgICAgICAgICAgICA/IHRoaXMuVElNRU9VVF9FUlJPUl9URVhUXG4gICAgICAgICAgICAgIDogZXJyb3I/Lm1lc3NhZ2UgPz8gdGhpcy5TRVJWRVJfRVJST1JfVEVYVFxuICAgICAgICB9KVxuICAgICAgKTtcbiAgICAgIGlmIChlcnJvcj8ucmVzPy5zdGF0dXMgPT09IDQwMykge1xuICAgICAgICB0aGlzLmlzRGlzYWJsZWQgPSB0cnVlO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICB0aGlzLmFsZXJ0U2VydmljZS5hZGRTZXJ2ZXJGYWlsdXJlKGVycm9yKTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgdGhpcy5pc0xvYWRpbmckLm5leHQoZmFsc2UpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBIYW5kbGVzIHRoZSByZWFsdGltZSB1cGRhdGVzIG9mIGFsYXJtcyBiYXNlZCBvbiB0aGUgd2lkZ2V0IGNvbmZpZ3VyYXRpb24uXG4gICAqIElmIGEgc3BlY2lmaWMgZGV2aWNlIGlzIHByb3ZpZGVkIGluIHRoZSB3aWRnZXQgY29uZmlndXJhdGlvbiwgYWxsIGFsYXJtc1xuICAgKiBvcmlnaW5hdGluZyBmcm9tIHRoYXQgZGV2aWNlIGFuZCBpdHMgY2hpbGRyZW4gYXJlIGZpbHRlcmVkIGJhc2VkIG9uIHN0YXR1cywgc2V2ZXJpdHksIGFuZCB0eXBlLlxuICAgKiBPdGhlcndpc2UsIGl0IHByb2Nlc3NlcyBhbGwgaW5jb21pbmcgYWxhcm1zIGFuZCBmaWx0ZXJzIHRoZW0gYWNjb3JkaW5nIHRvIHN0YXR1cywgc2V2ZXJpdHksIGFuZCB0eXBlLFxuICAgKiBhcyBzcGVjaWZpZWQgaW4gdGhlIHdpZGdldCBjb25maWd1cmF0aW9uLiBJZiBuZXcgYWxhcm1zIG1lZXQgdGhlIHNwZWNpZmllZCBjcml0ZXJpYSwgaXQgc2V0cyBhIGZsYWdcbiAgICogdG8gaW5kaWNhdGUgdGhlIHByZXNlbmNlIG9mIG5ldyBhbGFybXMuXG4gICAqXG4gICAqIEBwYXJhbSBjb25maWcgLSBUaGUgY29uZmlndXJhdGlvbiBzZXR0aW5ncyBvZiB0aGUgYWxhcm0gbGlzdCB3aWRnZXQuXG4gICAqIEBwYXJhbSBpc1JlYWx0aW1lVG9nZ2xlT24gLSBBIGZsYWcgaW5kaWNhdGluZyB3aGV0aGVyIHRoZSByZWFsdGltZSB0b2dnbGUgaXMgb24uIElmIHRydWUsIHRoZSBhbGFybSBsaXN0IHdpbGwgYmUgcmVmcmVzaGVkLlxuICAgKiBJZiBmYWxzZSwgdGhlIHByZXNlbmNlIG9mIG5ldyBhbGFybXMgd2lsbCBiZSBkaXNwbGF5ZWQgYXMgXCJOZXcgQWxhcm1zXCIgZW50cnkgb24gd2lkZ2V0IHJlZnJlc2ggYnV0dG9uLCBidXQgdGhlIGxpc3Qgd29uJ3QgYmUgcmVmcmVzaGVkIGF1dG9tYXRpY2FsbHkuXG4gICAqL1xuICBwcml2YXRlIGhhbmRsZVJlYWx0aW1lQWxhcm1zKGNvbmZpZzogQWxhcm1MaXN0V2lkZ2V0Q29uZmlnLCBpc1JlYWx0aW1lVG9nZ2xlT246IGJvb2xlYW4pOiB2b2lkIHtcbiAgICBjb25zdCBjYWxsYmFjayA9IChkYXRhOiBudW1iZXIgfCBJQWxhcm0pID0+IHtcbiAgICAgIGlmIChcbiAgICAgICAgdGhpcy5hbGFybVdpZGdldFNlcnZpY2UuZmlsdGVyQWxhcm1zQnlTdGF0dXNTZXZlcml0eUFuZFR5cGUoXG4gICAgICAgICAgZGF0YSxcbiAgICAgICAgICB0aGlzLmFsYXJtcyQudmFsdWUuZGF0YSxcbiAgICAgICAgICBjb25maWdcbiAgICAgICAgKVxuICAgICAgKSB7XG4gICAgICAgIGlmIChpc1JlYWx0aW1lVG9nZ2xlT24pIHtcbiAgICAgICAgICB0aGlzLmZldGNoQWxhcm1zKCk7XG4gICAgICAgICAgdGhpcy5hbGFybVdpZGdldEFsYXJtc1JlbG9hZENvbXAuaXNOZXdBbGFybU1lc3NhZ2VDbGVhcmVkID0gdHJ1ZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLmFsYXJtV2lkZ2V0QWxhcm1zUmVsb2FkQ29tcC5pc05ld0FsYXJtTWVzc2FnZUNsZWFyZWQgPSBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH07XG5cbiAgICBpZiAodGhpcy5jb25maWcuZGV2aWNlKSB7XG4gICAgICB0aGlzLmhhbmRsZVJlYWx0aW1lKFxuICAgICAgICB0aGlzLmFsYXJtV2l0aENoaWxkcmVuUmVhbHRpbWVTZXJ2aWNlLm9uQWxsJC5iaW5kKHRoaXMuYWxhcm1XaXRoQ2hpbGRyZW5SZWFsdGltZVNlcnZpY2UpLFxuICAgICAgICBjYWxsYmFja1xuICAgICAgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5oYW5kbGVSZWFsdGltZShcbiAgICAgICAgdGhpcy5hbGFybVJlYWx0aW1lU2VydmljZS5vbkFsbCQuYmluZCh0aGlzLmFsYXJtUmVhbHRpbWVTZXJ2aWNlKSxcbiAgICAgICAgY2FsbGJhY2tcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFNldHMgdXAgYSBzdWJzY3JpcHRpb24gdG8gYSByZWFsdGltZSBkYXRhIHN0cmVhbS4gVGhpcyBmdW5jdGlvbiB0YWtlcyBhIHN1YnNjcmliZXIgZnVuY3Rpb24sXG4gICAqIHdoaWNoIGlzIHVzZWQgdG8gc3Vic2NyaWJlIHRvIHRoZSBkYXRhIHN0cmVhbSwgYW5kIGEgY2FsbGJhY2sgZnVuY3Rpb24sIHdoaWNoIGlzIGNhbGxlZCB3aXRoIGVhY2hcbiAgICogZGF0YSB1cGRhdGUgcmVjZWl2ZWQgZnJvbSB0aGUgc3RyZWFtLlxuICAgKlxuICAgKiBAcGFyYW0gc3Vic2NyaWJlckZuIC0gQSBmdW5jdGlvbiB0aGF0IHJldHVybnMgYW4gb2JzZXJ2YWJsZSBzdHJlYW0gb2YgYWxhcm0gZGF0YS5cbiAgICogQHBhcmFtIGNhbGxiYWNrIC0gQSBmdW5jdGlvbiB0byBiZSBleGVjdXRlZCB3aXRoIGVhY2ggYWxhcm0gZGF0YSB1cGRhdGUuXG4gICAqL1xuICBwcml2YXRlIGhhbmRsZVJlYWx0aW1lKFxuICAgIHN1YnNjcmliZXJGbjogKGlkPzogc3RyaW5nKSA9PiBPYnNlcnZhYmxlPElSZXN1bHQ8SUFsYXJtPj4sXG4gICAgY2FsbGJhY2s6IChkYXRhOiBJQWxhcm0pID0+IHZvaWRcbiAgKTogdm9pZCB7XG4gICAgc3Vic2NyaWJlckZuKHRoaXMuY29uZmlnLmRldmljZT8uaWQpXG4gICAgICAucGlwZShcbiAgICAgICAgdGFwKCh7IGRhdGEgfSkgPT4ge1xuICAgICAgICAgIGNhbGxiYWNrKGRhdGEpO1xuICAgICAgICB9KSxcbiAgICAgICAgdGFrZVVudGlsKHRoaXMudW5zdWJzY3JpYmUkKVxuICAgICAgKVxuICAgICAgLnN1YnNjcmliZSgpO1xuICB9XG5cbiAgcHJpdmF0ZSBzZXRMZWdhY3lSZWNlbnRPckNyaXRpY2FsQWxhcm1XaWRnZXRDb25maWcoKTogdm9pZCB7XG4gICAgY29uc3Qgd2lkZ2V0SWQgPSB0aGlzLmRhc2hib2FyZENoaWxkWydkYXRhJ10/LmNvbXBvbmVudElkXG4gICAgICA/IHRoaXMuZGFzaGJvYXJkQ2hpbGRbJ2RhdGEnXT8uY29tcG9uZW50SWQgLy9wcm9wZXJ0eSBpcyB1c2VkIGluIGNvY2twaXQgZGFzaGJvYXJkc1xuICAgICAgOiB0aGlzLmRhc2hib2FyZENoaWxkWydkYXRhJ10/Lm5hbWU7IC8vcHJvcGVydHkgaXMgdXNlZCBpbiBkZXZpY2UgbWFuYWdlbWVudCBkYXNoYm9hcmRzXG5cbiAgICBpZiAod2lkZ2V0SWQgPT09IFJFQ0VOVF9BTEFSTVNfV0lER0VUX0lEKSB7XG4gICAgICBjb25zdCBwcmVkZWZpbmVkQ29uZmlnID0gdGhpcy5hbGFybVdpZGdldFNlcnZpY2UuZ2V0UHJlZGVmaW5lZENvbmZpZ3VyYXRpb24oXG4gICAgICAgIHRoaXMuaXNJbnRlcnZhbFJlZnJlc2gsXG4gICAgICAgIFJFQ0VOVF9BTEFSTVNfV0lER0VUX0lEXG4gICAgICApO1xuICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLmNvbmZpZywgcHJlZGVmaW5lZENvbmZpZyk7XG5cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAod2lkZ2V0SWQgPT09IEFTU0VUX0FMQVJNU19XSURHRVRfSUQpIHtcbiAgICAgIGNvbnN0IHByZWRlZmluZWRDb25maWcgPSB0aGlzLmFsYXJtV2lkZ2V0U2VydmljZS5nZXRQcmVkZWZpbmVkQ29uZmlndXJhdGlvbihcbiAgICAgICAgdGhpcy5pc0ludGVydmFsUmVmcmVzaFxuICAgICAgKTtcbiAgICAgIE9iamVjdC5hc3NpZ24odGhpcy5jb25maWcsIHByZWRlZmluZWRDb25maWcpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgaGFuZGxlR2xvYmFsUmVmcmVzaExvYWRpbmcoKTogdm9pZCB7XG4gICAgdGhpcy5pc0xvYWRpbmckXG4gICAgICAucGlwZShcbiAgICAgICAgc2tpcCgxKSxcbiAgICAgICAgZ2xvYmFsQXV0b1JlZnJlc2hMb2FkaW5nKHRoaXMud2lkZ2V0R2xvYmFsQXV0b1JlZnJlc2gpLFxuICAgICAgICB0YWtlVW50aWwodGhpcy5kZXN0cm95JClcbiAgICAgIClcbiAgICAgIC5zdWJzY3JpYmUoKTtcbiAgfVxufVxuIiwiPGM4eS1hbGFybXMtbGlzdFxuICAjbGlzdFxuICBbYWxhcm1zXT1cImFsYXJtcyQgfCBhc3luY1wiXG4gIFtuYXZpZ2F0aW9uT3B0aW9uc109XCJ7XG4gICAgYWx3YXlzTmF2aWdhdGVUb0FsbEFsYXJtczogIWNvbmZpZy5kZXZpY2UsXG4gICAgYWxsb3dOYXZpZ2F0aW9uVG9BbGFybXNWaWV3OiB0cnVlLFxuICAgIGluY2x1ZGVDbGVhcmVkUXVlcnlQYXJhbXM6IHRydWUsXG4gICAgcXVlcnlQYXJhbXNIYW5kbGluZzogJydcbiAgfVwiXG4gIFtpc0luaXRpYWxMb2FkaW5nXT1cImlzTG9hZGluZyQgfCBhc3luY1wiXG4gIFtoYXNQZXJtaXNzaW9uc109XCIhaXNEaXNhYmxlZFwiXG4+XG4gIDxjOHktYWxhcm0td2lkZ2V0LWFsYXJtcy1yZWxvYWRcbiAgICBjbGFzcz1cImQtY29udGVudHNcIlxuICAgIFtpc0ludGVydmFsUmVmcmVzaF09XCJpc0ludGVydmFsUmVmcmVzaFwiXG4gICAgW3JlZnJlc2hJbnRlcnZhbF09XCJyZWZyZXNoSW50ZXJ2YWxcIlxuICAgIFtjb25maWddPVwiY29uZmlnXCJcbiAgICBbaXNMb2FkaW5nXT1cImlzTG9hZGluZyRcIlxuICAgIFtpc1Njcm9sbGluZ109XCJsaXN0LmlzU2Nyb2xsaW5nXCJcbiAgICBbaXNEaXNhYmxlZF09XCJpc0Rpc2FibGVkXCJcbiAgICAob25Db3VudGRvd25FbmRlZCk9XCJmZXRjaEFsYXJtcygpXCJcbiAgICAob25SZWFsVGltZVRvZ2dsZUNoYW5nZWQpPVwiaGFuZGxlUmVhbFRpbWVUb2dnbGVDaGFuZ2UoJGV2ZW50KVwiXG4gID48L2M4eS1hbGFybS13aWRnZXQtYWxhcm1zLXJlbG9hZD5cbjwvYzh5LWFsYXJtcy1saXN0PlxuIl19
240
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWxhcm0tbGlzdC13aWRnZXQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vd2lkZ2V0cy9pbXBsZW1lbnRhdGlvbnMvYWxhcm1zL2FsYXJtLWxpc3Qtd2lkZ2V0LXZpZXcvYWxhcm0tbGlzdC13aWRnZXQuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vd2lkZ2V0cy9pbXBsZW1lbnRhdGlvbnMvYWxhcm1zL2FsYXJtLWxpc3Qtd2lkZ2V0LXZpZXcvYWxhcm0tbGlzdC13aWRnZXQuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUVMLFNBQVMsRUFDVCxLQUFLLEVBSUwsU0FBUyxFQUNWLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxZQUFZLEVBQWdDLE1BQU0sYUFBYSxDQUFDO0FBQ3pFLE9BQU8sRUFDTCxvQkFBb0IsRUFDcEIsZ0NBQWdDLEVBQ2hDLFlBQVksRUFDWix1QkFBdUIsRUFDdkIsb0JBQW9CLEVBRXBCLHFCQUFxQixFQUVyQixPQUFPLEVBQ1Asd0JBQXdCLEVBQ3hCLDhCQUE4QixFQUMvQixNQUFNLHFCQUFxQixDQUFDO0FBQzdCLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQy9ELE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBQzdDLE9BQU8sRUFBRSxlQUFlLEVBQWMsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQzVELE9BQU8sRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLEdBQUcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3RELE9BQU8sRUFDTCxzQkFBc0IsRUFFdEIsdUJBQXVCLEVBQ3hCLE1BQU0sNEJBQTRCLENBQUM7QUFDcEMsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDN0QsT0FBTyxFQUFFLGdDQUFnQyxF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QztRQUVELElBQUksUUFBUSxLQUFLLHNCQUFzQixFQUFFLENBQUM7WUFDeEMsTUFBTSxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsa0JBQWtCLENBQUMsMEJBQTBCLENBQ3pFLElBQUksQ0FBQyxpQkFBaUIsQ0FDdkIsQ0FBQztZQUNGLE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxnQkFBZ0IsQ0FBQyxDQUFDO1FBQy9DLENBQUM7SUFDSCxDQUFDO0lBRU8sMEJBQTBCO1FBQ2hDLElBQUksQ0FBQyxVQUFVO2FBQ1osSUFBSSxDQUNILElBQUksQ0FBQyxDQUFDLENBQUMsRUFDUCx3QkFBd0IsQ0FBQyxJQUFJLENBQUMsdUJBQXVCLENBQUMsRUFDdEQsU0FBUyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FDekI7YUFDQSxTQUFTLEVBQUUsQ0FBQztJQUNqQixDQUFDOzhHQXpTVSx3QkFBd0I7a0dBQXhCLHdCQUF3Qiw4RUFGeEIsQ0FBQyxvQkFBb0IsRUFBRSxnQ0FBZ0MsQ0FBQyx1RkEwQnhELGdDQUFnQyxxRUNwRTdDLDRpQ0ErQkE7OzJGRGFhLHdCQUF3QjtrQkFMcEMsU0FBUzsrQkFDRSx1QkFBdUIsYUFFdEIsQ0FBQyxvQkFBb0IsRUFBRSxnQ0FBZ0MsQ0FBQztrVkFRMUQsTUFBTTtzQkFBZCxLQUFLO2dCQW1CTiwyQkFBMkI7c0JBRDFCLFNBQVM7dUJBQUMsZ0NBQWdDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQWZ0ZXJWaWV3SW5pdCxcbiAgQ29tcG9uZW50LFxuICBJbnB1dCxcbiAgT25EZXN0cm95LFxuICBPbkluaXQsXG4gIFNpbXBsZUNoYW5nZXMsXG4gIFZpZXdDaGlsZFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEFsYXJtU2VydmljZSwgSUFsYXJtLCBJUmVzdWx0LCBJUmVzdWx0TGlzdCB9IGZyb20gJ0BjOHkvY2xpZW50JztcbmltcG9ydCB7XG4gIEFsYXJtUmVhbHRpbWVTZXJ2aWNlLFxuICBBbGFybVdpdGhDaGlsZHJlblJlYWx0aW1lU2VydmljZSxcbiAgQWxlcnRTZXJ2aWNlLFxuICBEYXNoYm9hcmRDaGlsZENvbXBvbmVudCxcbiAgRGlzbWlzc0FsZXJ0U3RyYXRlZ3ksXG4gIER5bmFtaWNDb21wb25lbnQsXG4gIER5bmFtaWNDb21wb25lbnRBbGVydCxcbiAgRHluYW1pY0NvbXBvbmVudEFsZXJ0QWdncmVnYXRvcixcbiAgZ2V0dGV4dCxcbiAgZ2xvYmFsQXV0b1JlZnJlc2hMb2FkaW5nLFxuICBXaWRnZXRHbG9iYWxBdXRvUmVmcmVzaFNlcnZpY2Vcbn0gZnJvbSAnQGM4eS9uZ3gtY29tcG9uZW50cyc7XG5pbXBvcnQgeyBBbGFybXNWaWV3U2VydmljZSB9IGZyb20gJ0BjOHkvbmd4LWNvbXBvbmVudHMvYWxhcm1zJztcbmltcG9ydCB7IGlzRW1wdHksIGlzRXF1YWwgfSBmcm9tICdsb2Rhc2gtZXMnO1xuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBPYnNlcnZhYmxlLCBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBza2lwLCB0YWtlVW50aWwsIHRhcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7XG4gIEFTU0VUX0FMQVJNU19XSURHRVRfSUQsXG4gIEFsYXJtTGlzdFdpZGdldENvbmZpZyxcbiAgUkVDRU5UX0FMQVJNU19XSURHRVRfSURcbn0gZnJvbSAnLi4vYWxhcm0tbGlzdC13aWRnZXQubW9kZWwnO1xuaW1wb3J0IHsgQWxhcm1XaWRnZXRTZXJ2aWNlIH0gZnJvbSAnLi4vYWxhcm0td2lkZ2V0LnNlcnZpY2UnO1xuaW1wb3J0IHsgQWxhcm1XaWRnZXRBbGFybXNSZWxvYWRDb21wb25lbnQgfSBmcm9tICcuLi9hbGFybS13aWRnZXQtYWxhcm1zLXJlbG9hZC5jb21wb25lbnQnO1xuaW1wb3J0IHsgSW50ZXJ2YWwgfSBmcm9tICdAYzh5L25neC1jb21wb25lbnRzL2ludGVydmFsLXBpY2tlcic7XG5cbi8qKlxuICogVG8gZW5zdXJlIGJhY2t3YXJkIGNvbXBhdGliaWxpdHksIGxlZ2FjeSB3aWRnZXRzIHdpbGwgYmUgY29udmVydGVkIHRvIHRoZSBuZXcgaW1wbGVtZW50YXRpb24uXG4gKi9cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2M4eS1hbGFybS1saXN0LXdpZGdldCcsXG4gIHRlbXBsYXRlVXJsOiAnLi9hbGFybS1saXN0LXdpZGdldC5jb21wb25lbnQuaHRtbCcsXG4gIHByb3ZpZGVyczogW0FsYXJtUmVhbHRpbWVTZXJ2aWNlLCBBbGFybVdpdGhDaGlsZHJlblJlYWx0aW1lU2VydmljZV1cbn0pXG5leHBvcnQgY2xhc3MgQWxhcm1MaXN0V2lkZ2V0Q29tcG9uZW50XG4gIGltcGxlbWVudHMgT25Jbml0LCBBZnRlclZpZXdJbml0LCBPbkRlc3Ryb3ksIER5bmFtaWNDb21wb25lbnRcbntcbiAgLyoqXG4gICAqICBBbGFybSB3aWRnZXQgY29uZmlnLlxuICAgKi9cbiAgQElucHV0KCkgY29uZmlnOiBBbGFybUxpc3RXaWRnZXRDb25maWc7XG4gIC8qKlxuICAgKiBSZXByZXNlbnRzIGN1cnJlbnQgYWxhcm1zLlxuICAgKi9cbiAgYWxhcm1zJDogQmVoYXZpb3JTdWJqZWN0PElSZXN1bHRMaXN0PElBbGFybT4gfCBudWxsPiA9IG5ldyBCZWhhdmlvclN1YmplY3QobnVsbCk7XG4gIC8qKlxuICAgKiBDdXJyZW50IGlzTG9hZGluZyBzdGF0ZS4gQmFzZWQgb24gaXQgbmV4dCBjb3VudGRvd24gY3ljbGUgaXMgYmVpbmcgc3RhcnRlZC5cbiAgICovXG4gIGlzTG9hZGluZyQ6IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPiA9IG5ldyBCZWhhdmlvclN1YmplY3QodHJ1ZSk7XG4gIC8qKlxuICAgKiBTdGF0ZSBvZiB0aGlzIGJvb2xlYW4gZGVwZW5kcyBvbiBhbiBBcHBsaWNhdGlvbiBPcHRpb25zIFwiYWxhcm1zUmVmcmVzaFR5cGVcIiBzZXR0aW5nLlxuICAgKi9cbiAgaXNJbnRlcnZhbFJlZnJlc2g6IGJvb2xlYW47XG4gIC8qKlxuICAgKiBDdXJyZW50IHJlZnJlc2ggaW50ZXJ2YWwgc2V0IGluIGEgd2lkZ2V0IGNvbmZpZy5cbiAgICovXG4gIHJlZnJlc2hJbnRlcnZhbDogbnVtYmVyO1xuXG4gIEBWaWV3Q2hpbGQoQWxhcm1XaWRnZXRBbGFybXNSZWxvYWRDb21wb25lbnQpXG4gIGFsYXJtV2lkZ2V0QWxhcm1zUmVsb2FkQ29tcDogQWxhcm1XaWRnZXRBbGFybXNSZWxvYWRDb21wb25lbnQ7XG4gIGFsZXJ0czogRHluYW1pY0NvbXBvbmVudEFsZXJ0QWdncmVnYXRvcjtcblxuICBwcml2YXRlIFRJTUVPVVRfRVJST1JfVEVYVCA9IGdldHRleHQoXG4gICAgJ1RoZSByZXF1ZXN0IGlzIHRha2luZyBsb25nZXIgdGhhbiB1c3VhbC4gV2UgYXBvbG9naXplIGZvciB0aGUgaW5jb252ZW5pZW5jZS4nXG4gICk7XG4gIHByaXZhdGUgU0VSVkVSX0VSUk9SX1RFWFQgPSBnZXR0ZXh0KCdTZXJ2ZXIgZXJyb3Igb2NjdXJyZWQuJyk7XG4gIHByaXZhdGUgdW5zdWJzY3JpYmUkID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcbiAgcHJpdmF0ZSBkZXN0cm95JDogU3ViamVjdDx2b2lkPiA9IG5ldyBTdWJqZWN0KCk7XG4gIGlzRGlzYWJsZWQgPSBmYWxzZTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIGFsYXJtV2lkZ2V0U2VydmljZTogQWxhcm1XaWRnZXRTZXJ2aWNlLFxuICAgIHByaXZhdGUgYWxhcm1SZWFsdGltZVNlcnZpY2U6IEFsYXJtUmVhbHRpbWVTZXJ2aWNlLFxuICAgIHByaXZhdGUgYWxhcm1TZXJ2aWNlOiBBbGFybVNlcnZpY2UsXG4gICAgcHJpdmF0ZSBhbGFybXNWaWV3U2VydmljZTogQWxhcm1zVmlld1NlcnZpY2UsXG4gICAgcHJpdmF0ZSBhbGFybVdpdGhDaGlsZHJlblJlYWx0aW1lU2VydmljZTogQWxhcm1XaXRoQ2hpbGRyZW5SZWFsdGltZVNlcnZpY2UsXG4gICAgcHJpdmF0ZSBkYXNoYm9hcmRDaGlsZDogRGFzaGJvYXJkQ2hpbGRDb21wb25lbnQsXG4gICAgcHJpdmF0ZSBhbGVydFNlcnZpY2U6IEFsZXJ0U2VydmljZSxcbiAgICBwcml2YXRlIHdpZGdldEdsb2JhbEF1dG9SZWZyZXNoOiBXaWRnZXRHbG9iYWxBdXRvUmVmcmVzaFNlcnZpY2VcbiAgKSB7XG4gICAgdGhpcy5pc0ludGVydmFsUmVmcmVzaCA9IHRoaXMuYWxhcm1zVmlld1NlcnZpY2UuaXNJbnRlcnZhbFJlZnJlc2goKTtcbiAgfVxuXG4gIGFzeW5jIG5nT25Jbml0KCk6IFByb21pc2U8dm9pZD4ge1xuICAgIHRoaXMuYWxlcnRzLnNldEFsZXJ0R3JvdXBEaXNtaXNzU3RyYXRlZ3koXG4gICAgICAnd2FybmluZycsXG4gICAgICBEaXNtaXNzQWxlcnRTdHJhdGVneS5URU1QT1JBUllfT1JfUEVSTUFORU5UXG4gICAgKTtcblxuICAgIGlmICh0aGlzLmFsYXJtV2lkZ2V0U2VydmljZS5pc09sZEFsYXJtQ29uZmlnU3RydWN0dXJlKHRoaXMuY29uZmlnKSkge1xuICAgICAgY29uc3QgbWFwcGVkQ29uZmlnID0gdGhpcy5hbGFybVdpZGdldFNlcnZpY2UubWFwVG9OZXdDb25maWdTdHJ1Y3R1cmUoXG4gICAgICAgIHRoaXMuY29uZmlnLFxuICAgICAgICB0aGlzLmlzSW50ZXJ2YWxSZWZyZXNoXG4gICAgICApO1xuICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLmNvbmZpZywgbWFwcGVkQ29uZmlnKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5jb25maWcud2lkZ2V0SW5zdGFuY2VHbG9iYWxBdXRvUmVmcmVzaENvbnRleHQgJiYgIXRoaXMuY29uZmlnLmlzUmVhbHRpbWUpIHtcbiAgICAgIHRoaXMuaGFuZGxlR2xvYmFsUmVmcmVzaExvYWRpbmcoKTtcbiAgICB9XG4gICAgY29uc3QgX2NvbmZpZyA9IHRoaXMuZGFzaGJvYXJkQ2hpbGRbJ2RhdGEnXT8uY29uZmlnO1xuICAgIGNvbnN0IGlzTGVnYWN5V2lkZ2V0V2l0aG91dENvbmZpZ3VyYXRpb24gPVxuICAgICAgaXNFbXB0eShfY29uZmlnKSB8fCBpc0VxdWFsKF9jb25maWcsIHsgZGlzcGxheVNldHRpbmdzOiB7IGdsb2JhbEF1dG9SZWZyZXNoQ29udGV4dDogdHJ1ZSB9IH0pO1xuXG4gICAgaWYgKGlzTGVnYWN5V2lkZ2V0V2l0aG91dENvbmZpZ3VyYXRpb24pIHtcbiAgICAgIHRoaXMuc2V0TGVnYWN5UmVjZW50T3JDcml0aWNhbEFsYXJtV2lkZ2V0Q29uZmlnKCk7XG4gICAgfVxuXG4gICAgdGhpcy51cGRhdGVXaWRnZXRSZWZyZXNoTW9kZSgpO1xuICAgIHRoaXMucmVmcmVzaEludGVydmFsID0gISF0aGlzLmNvbmZpZz8ucmVmcmVzaEludGVydmFsICYmIHRoaXMuY29uZmlnPy5yZWZyZXNoSW50ZXJ2YWw7XG4gICAgYXdhaXQgdGhpcy5mZXRjaEFsYXJtcygpO1xuICB9XG5cbiAgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xuICAgIGlmICghdGhpcy5pc0ludGVydmFsUmVmcmVzaCAmJiB0aGlzLmNvbmZpZy5yZWZyZXNoT3B0aW9uID09PSAnaW50ZXJ2YWwnKSB7XG4gICAgICB0aGlzLmhhbmRsZVJlYWx0aW1lQWxhcm1zKHRoaXMuY29uZmlnLCB0aGlzLmFsYXJtV2lkZ2V0QWxhcm1zUmVsb2FkQ29tcC5pc1JlYWx0aW1lVG9nZ2xlT24pO1xuICAgIH1cbiAgfVxuXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcbiAgICBpZiAoY2hhbmdlcz8uY29uZmlnPy5jdXJyZW50VmFsdWU/LmRhdGUpIHtcbiAgICAgIHRoaXMuY29uZmlnLmRhdGVGaWx0ZXIgPSBjaGFuZ2VzLmNvbmZpZy5jdXJyZW50VmFsdWUuZGF0ZTtcbiAgICB9XG4gIH1cblxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5jb25maWcuaXNSZWFsdGltZSkge1xuICAgICAgdGhpcy51bnN1YnNjcmliZSQubmV4dCgpO1xuICAgICAgdGhpcy51bnN1YnNjcmliZSQuY29tcGxldGUoKTtcbiAgICB9XG5cbiAgICB0aGlzLmRlc3Ryb3kkLm5leHQoKTtcbiAgICB0aGlzLmRlc3Ryb3kkLmNvbXBsZXRlKCk7XG5cbiAgICBpZiAodGhpcy5jb25maWcud2lkZ2V0SW5zdGFuY2VHbG9iYWxBdXRvUmVmcmVzaENvbnRleHQgJiYgdGhpcy5pc0xvYWRpbmckLnZhbHVlKSB7XG4gICAgICB0aGlzLndpZGdldEdsb2JhbEF1dG9SZWZyZXNoLmRlY3JlbWVudExvYWRpbmcoKTtcbiAgICB9XG4gIH1cblxuICBhc3luYyBmZXRjaEFsYXJtcygpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICB0aGlzLnVwZGF0ZURhdGVGaWx0ZXIoKTtcbiAgICB0aGlzLmFsYXJtcyQubmV4dChhd2FpdCB0aGlzLmdldEFsYXJtcygpKTtcbiAgfVxuXG4gIGFzeW5jIG9uRGF0ZUZpbHRlckNoYW5nZShldmVudDoge1xuICAgIHNlbGVjdGVkRGF0ZXM6IFtEYXRlLCBEYXRlXTtcbiAgICBpbnRlcnZhbDogSW50ZXJ2YWxbJ2lkJ107XG4gIH0pOiBQcm9taXNlPHZvaWQ+IHtcbiAgICB0aGlzLmNvbmZpZy5kYXRlRmlsdGVyID0gZXZlbnQuc2VsZWN0ZWREYXRlcztcbiAgICB0aGlzLmNvbmZpZy5pbnRlcnZhbCA9IGV2ZW50LmludGVydmFsO1xuICAgIGF3YWl0IHRoaXMuZmV0Y2hBbGFybXMoKTtcbiAgfVxuXG4gIGhhbmRsZVJlYWxUaW1lVG9nZ2xlQ2hhbmdlKGlzUmVhbHRpbWVUb2dnbGVPbjogYm9vbGVhbik6IHZvaWQge1xuICAgIGlmICghaXNSZWFsdGltZVRvZ2dsZU9uKSB7XG4gICAgICB0aGlzLnVuc3Vic2NyaWJlJC5uZXh0KCk7XG4gICAgICB0aGlzLnVuc3Vic2NyaWJlJC5jb21wbGV0ZSgpO1xuICAgIH1cblxuICAgIHRoaXMudW5zdWJzY3JpYmUkID0gbmV3IFN1YmplY3QoKTtcbiAgICB0aGlzLmhhbmRsZVJlYWx0aW1lQWxhcm1zKHRoaXMuY29uZmlnLCBpc1JlYWx0aW1lVG9nZ2xlT24pO1xuICB9XG5cbiAgLyoqXG4gICAqIFVwZGF0ZXMgdGhlIHdpZGdldCdzIGRhdGUgZmlsdGVyIGJhc2VkIG9uIHRoZSBjdXJyZW50bHkgc2VsZWN0ZWQgaW50ZXJ2YWwuXG4gICAqIElmIHRoZSBpbnRlcnZhbCBpcyBzZXQgdG8gbGFzdCBob3VyLCB3ZSB3aWxsIGNvbmZpZ3VyZSB0aGUgZGF0ZSBmaWx0ZXIgdG8gZHluYW1pY2FsbHkgc2hvdyBhbGFybXMgb25seSBmcm9tIHRoZSBsYXN0IGhvdXIuXG4gICAqL1xuICBwcml2YXRlIHVwZGF0ZURhdGVGaWx0ZXIoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuY29uZmlnLmludGVydmFsID09PSAnY3VzdG9tJyB8fCB0aGlzLmNvbmZpZy53aWRnZXRJbnN0YW5jZUdsb2JhbFRpbWVDb250ZXh0KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKCF0aGlzLmNvbmZpZy5pbnRlcnZhbCkge1xuICAgICAgdGhpcy5jb25maWcuaW50ZXJ2YWwgPSAnbm9uZSc7XG4gICAgfVxuXG4gICAgdGhpcy5jb25maWcuZGF0ZUZpbHRlciA9IHRoaXMuYWxhcm1zVmlld1NlcnZpY2UuZ2V0RGF0ZVRpbWVDb250ZXh0QnlJbnRlcnZhbChcbiAgICAgIHRoaXMuY29uZmlnLmludGVydmFsXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBVcGRhdGVzIHRoZSB3aWRnZXQncyByZWZyZXNoIG1vZGUgYmFzZWQgb24gdGhlIGN1cnJlbnQgY29uZmlndXJhdGlvbiBhbmQgdGhlIGludGVydmFsIHJlZnJlc2ggc2V0dGluZy5cbiAgICogSWYgdGhlIHdpZGdldCdzICdpc1JlYWx0aW1lJyBjb25maWd1cmF0aW9uIGRpZmZlcnMgZnJvbSB0aGUgY3VycmVudCBnbG9iYWwgaW50ZXJ2YWwgcmVmcmVzaCBzZXR0aW5nIChhcHBsaWNhdGlvbiBvcHRpb25zIHNldHRpbmcpLFxuICAgKiB0aGUgd2lkZ2V0J3MgbW9kZSBpcyB1cGRhdGVkIHRvIGVpdGhlciAncmVhbHRpbWUnIG9yICdpbnRlcnZhbCcuIEluICdyZWFsdGltZScgbW9kZSwgdGhlIHJlZnJlc2ggaW50ZXJ2YWwgaXMgbnVsbCxcbiAgICogYW5kIGluICdpbnRlcnZhbCcgbW9kZSwgaXQgaXMgc2V0IHRvIHRoZSBkZWZhdWx0IGludGVydmFsIHZhbHVlLlxuICAgKi9cbiAgcHJpdmF0ZSB1cGRhdGVXaWRnZXRSZWZyZXNoTW9kZSgpOiB2b2lkIHtcbiAgICBjb25zdCBpc1JlZnJlc2hUeXBlU3dpdGNoZWQgPSAhIXRoaXMuY29uZmlnLmlzUmVhbHRpbWUgIT09ICF0aGlzLmlzSW50ZXJ2YWxSZWZyZXNoO1xuICAgIGlmICghaXNSZWZyZXNoVHlwZVN3aXRjaGVkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5jb25maWcuaXNSZWFsdGltZSA9ICF0aGlzLmlzSW50ZXJ2YWxSZWZyZXNoO1xuXG4gICAgaWYgKHRoaXMuY29uZmlnLmlzUmVhbHRpbWUpIHtcbiAgICAgIC8vIFN3aXRjaGluZyB3aWRnZXQgdG8gcmVhbHRpbWUgbW9kZVxuICAgICAgdGhpcy5jb25maWcucmVmcmVzaEludGVydmFsID0gbnVsbDtcbiAgICAgIHRoaXMuY29uZmlnLnJlZnJlc2hPcHRpb24gPSBudWxsO1xuICAgICAgdGhpcy5jb25maWcud2lkZ2V0SW5zdGFuY2VHbG9iYWxBdXRvUmVmcmVzaENvbnRleHQgPSBmYWxzZTtcbiAgICAgIHRoaXMuY29uZmlnLmlzQXV0b1JlZnJlc2hFbmFibGVkID0gdHJ1ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gU3dpdGNoaW5nIHdpZGdldCB0byBpbnRlcnZhbCBtb2RlXG4gICAgICB0aGlzLmNvbmZpZy5yZWZyZXNoSW50ZXJ2YWwgPSB0aGlzLmFsYXJtc1ZpZXdTZXJ2aWNlLkRFRkFVTFRfSU5URVJWQUxfVkFMVUU7XG4gICAgICB0aGlzLmNvbmZpZy5yZWZyZXNoT3B0aW9uID0gdGhpcy5hbGFybXNWaWV3U2VydmljZS5ERUZBVUxUX1JFRlJFU0hfT1BUSU9OX1ZBTFVFO1xuICAgICAgdGhpcy5jb25maWcud2lkZ2V0SW5zdGFuY2VHbG9iYWxBdXRvUmVmcmVzaENvbnRleHQgPSBmYWxzZTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGdldEFsYXJtcygpOiBQcm9taXNlPElSZXN1bHRMaXN0PElBbGFybT4+IHtcbiAgICB0cnkge1xuICAgICAgdGhpcy5pc0xvYWRpbmckLm5leHQodHJ1ZSk7XG4gICAgICByZXR1cm4gYXdhaXQgdGhpcy5hbGFybVNlcnZpY2UubGlzdChcbiAgICAgICAgdGhpcy5hbGFybVdpZGdldFNlcnZpY2UubWFwQ29uZmlnVG9RdWVyeUZpbHRlcih0aGlzLmNvbmZpZylcbiAgICAgICk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIHRoaXMuYWxlcnRzLmFkZEFsZXJ0cyhcbiAgICAgICAgbmV3IER5bmFtaWNDb21wb25lbnRBbGVydCh7XG4gICAgICAgICAgdHlwZTogJ3dhcm5pbmcnLFxuICAgICAgICAgIHRleHQ6XG4gICAgICAgICAgICBlcnJvcj8ubmFtZSA9PT0gJ1RpbWVvdXRFcnJvcidcbiAgICAgICAgICAgICAgPyB0aGlzLlRJTUVPVVRfRVJST1JfVEVYVFxuICAgICAgICAgICAgICA6IGVycm9yPy5tZXNzYWdlID8/IHRoaXMuU0VSVkVSX0VSUk9SX1RFWFRcbiAgICAgICAgfSlcbiAgICAgICk7XG4gICAgICBpZiAoZXJyb3I/LnJlcz8uc3RhdHVzID09PSA0MDMpIHtcbiAgICAgICAgdGhpcy5pc0Rpc2FibGVkID0gdHJ1ZTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgdGhpcy5hbGVydFNlcnZpY2UuYWRkU2VydmVyRmFpbHVyZShlcnJvcik7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIHRoaXMuaXNMb2FkaW5nJC5uZXh0KGZhbHNlKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogSGFuZGxlcyB0aGUgcmVhbHRpbWUgdXBkYXRlcyBvZiBhbGFybXMgYmFzZWQgb24gdGhlIHdpZGdldCBjb25maWd1cmF0aW9uLlxuICAgKiBJZiBhIHNwZWNpZmljIGRldmljZSBpcyBwcm92aWRlZCBpbiB0aGUgd2lkZ2V0IGNvbmZpZ3VyYXRpb24sIGFsbCBhbGFybXNcbiAgICogb3JpZ2luYXRpbmcgZnJvbSB0aGF0IGRldmljZSBhbmQgaXRzIGNoaWxkcmVuIGFyZSBmaWx0ZXJlZCBiYXNlZCBvbiBzdGF0dXMsIHNldmVyaXR5LCBhbmQgdHlwZS5cbiAgICogT3RoZXJ3aXNlLCBpdCBwcm9jZXNzZXMgYWxsIGluY29taW5nIGFsYXJtcyBhbmQgZmlsdGVycyB0aGVtIGFjY29yZGluZyB0byBzdGF0dXMsIHNldmVyaXR5LCBhbmQgdHlwZSxcbiAgICogYXMgc3BlY2lmaWVkIGluIHRoZSB3aWRnZXQgY29uZmlndXJhdGlvbi4gSWYgbmV3IGFsYXJtcyBtZWV0IHRoZSBzcGVjaWZpZWQgY3JpdGVyaWEsIGl0IHNldHMgYSBmbGFnXG4gICAqIHRvIGluZGljYXRlIHRoZSBwcmVzZW5jZSBvZiBuZXcgYWxhcm1zLlxuICAgKlxuICAgKiBAcGFyYW0gY29uZmlnIC0gVGhlIGNvbmZpZ3VyYXRpb24gc2V0dGluZ3Mgb2YgdGhlIGFsYXJtIGxpc3Qgd2lkZ2V0LlxuICAgKiBAcGFyYW0gaXNSZWFsdGltZVRvZ2dsZU9uIC0gQSBmbGFnIGluZGljYXRpbmcgd2hldGhlciB0aGUgcmVhbHRpbWUgdG9nZ2xlIGlzIG9uLiBJZiB0cnVlLCB0aGUgYWxhcm0gbGlzdCB3aWxsIGJlIHJlZnJlc2hlZC5cbiAgICogSWYgZmFsc2UsIHRoZSBwcmVzZW5jZSBvZiBuZXcgYWxhcm1zIHdpbGwgYmUgZGlzcGxheWVkIGFzIFwiTmV3IEFsYXJtc1wiIGVudHJ5IG9uIHdpZGdldCByZWZyZXNoIGJ1dHRvbiwgYnV0IHRoZSBsaXN0IHdvbid0IGJlIHJlZnJlc2hlZCBhdXRvbWF0aWNhbGx5LlxuICAgKi9cbiAgcHJpdmF0ZSBoYW5kbGVSZWFsdGltZUFsYXJtcyhjb25maWc6IEFsYXJtTGlzdFdpZGdldENvbmZpZywgaXNSZWFsdGltZVRvZ2dsZU9uOiBib29sZWFuKTogdm9pZCB7XG4gICAgY29uc3QgY2FsbGJhY2sgPSAoZGF0YTogbnVtYmVyIHwgSUFsYXJtKSA9PiB7XG4gICAgICBpZiAoXG4gICAgICAgIHRoaXMuYWxhcm1XaWRnZXRTZXJ2aWNlLmZpbHRlckFsYXJtc0J5U3RhdHVzU2V2ZXJpdHlBbmRUeXBlKFxuICAgICAgICAgIGRhdGEsXG4gICAgICAgICAgdGhpcy5hbGFybXMkLnZhbHVlLmRhdGEsXG4gICAgICAgICAgY29uZmlnXG4gICAgICAgIClcbiAgICAgICkge1xuICAgICAgICBpZiAoaXNSZWFsdGltZVRvZ2dsZU9uKSB7XG4gICAgICAgICAgdGhpcy5mZXRjaEFsYXJtcygpO1xuICAgICAgICAgIHRoaXMuYWxhcm1XaWRnZXRBbGFybXNSZWxvYWRDb21wLmlzTmV3QWxhcm1NZXNzYWdlQ2xlYXJlZCA9IHRydWU7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5hbGFybVdpZGdldEFsYXJtc1JlbG9hZENvbXAuaXNOZXdBbGFybU1lc3NhZ2VDbGVhcmVkID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9O1xuXG4gICAgaWYgKHRoaXMuY29uZmlnLmRldmljZSkge1xuICAgICAgdGhpcy5oYW5kbGVSZWFsdGltZShcbiAgICAgICAgdGhpcy5hbGFybVdpdGhDaGlsZHJlblJlYWx0aW1lU2VydmljZS5vbkFsbCQuYmluZCh0aGlzLmFsYXJtV2l0aENoaWxkcmVuUmVhbHRpbWVTZXJ2aWNlKSxcbiAgICAgICAgY2FsbGJhY2tcbiAgICAgICk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuaGFuZGxlUmVhbHRpbWUoXG4gICAgICAgIHRoaXMuYWxhcm1SZWFsdGltZVNlcnZpY2Uub25BbGwkLmJpbmQodGhpcy5hbGFybVJlYWx0aW1lU2VydmljZSksXG4gICAgICAgIGNhbGxiYWNrXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBTZXRzIHVwIGEgc3Vic2NyaXB0aW9uIHRvIGEgcmVhbHRpbWUgZGF0YSBzdHJlYW0uIFRoaXMgZnVuY3Rpb24gdGFrZXMgYSBzdWJzY3JpYmVyIGZ1bmN0aW9uLFxuICAgKiB3aGljaCBpcyB1c2VkIHRvIHN1YnNjcmliZSB0byB0aGUgZGF0YSBzdHJlYW0sIGFuZCBhIGNhbGxiYWNrIGZ1bmN0aW9uLCB3aGljaCBpcyBjYWxsZWQgd2l0aCBlYWNoXG4gICAqIGRhdGEgdXBkYXRlIHJlY2VpdmVkIGZyb20gdGhlIHN0cmVhbS5cbiAgICpcbiAgICogQHBhcmFtIHN1YnNjcmliZXJGbiAtIEEgZnVuY3Rpb24gdGhhdCByZXR1cm5zIGFuIG9ic2VydmFibGUgc3RyZWFtIG9mIGFsYXJtIGRhdGEuXG4gICAqIEBwYXJhbSBjYWxsYmFjayAtIEEgZnVuY3Rpb24gdG8gYmUgZXhlY3V0ZWQgd2l0aCBlYWNoIGFsYXJtIGRhdGEgdXBkYXRlLlxuICAgKi9cbiAgcHJpdmF0ZSBoYW5kbGVSZWFsdGltZShcbiAgICBzdWJzY3JpYmVyRm46IChpZD86IHN0cmluZykgPT4gT2JzZXJ2YWJsZTxJUmVzdWx0PElBbGFybT4+LFxuICAgIGNhbGxiYWNrOiAoZGF0YTogSUFsYXJtKSA9PiB2b2lkXG4gICk6IHZvaWQge1xuICAgIHN1YnNjcmliZXJGbih0aGlzLmNvbmZpZy5kZXZpY2U/LmlkKVxuICAgICAgLnBpcGUoXG4gICAgICAgIHRhcCgoeyBkYXRhIH0pID0+IHtcbiAgICAgICAgICBjYWxsYmFjayhkYXRhKTtcbiAgICAgICAgfSksXG4gICAgICAgIHRha2VVbnRpbCh0aGlzLnVuc3Vic2NyaWJlJClcbiAgICAgIClcbiAgICAgIC5zdWJzY3JpYmUoKTtcbiAgfVxuXG4gIHByaXZhdGUgc2V0TGVnYWN5UmVjZW50T3JDcml0aWNhbEFsYXJtV2lkZ2V0Q29uZmlnKCk6IHZvaWQge1xuICAgIGNvbnN0IHdpZGdldElkID0gdGhpcy5kYXNoYm9hcmRDaGlsZFsnZGF0YSddPy5jb21wb25lbnRJZFxuICAgICAgPyB0aGlzLmRhc2hib2FyZENoaWxkWydkYXRhJ10/LmNvbXBvbmVudElkIC8vcHJvcGVydHkgaXMgdXNlZCBpbiBjb2NrcGl0IGRhc2hib2FyZHNcbiAgICAgIDogdGhpcy5kYXNoYm9hcmRDaGlsZFsnZGF0YSddPy5uYW1lOyAvL3Byb3BlcnR5IGlzIHVzZWQgaW4gZGV2aWNlIG1hbmFnZW1lbnQgZGFzaGJvYXJkc1xuXG4gICAgaWYgKHdpZGdldElkID09PSBSRUNFTlRfQUxBUk1TX1dJREdFVF9JRCkge1xuICAgICAgY29uc3QgcHJlZGVmaW5lZENvbmZpZyA9IHRoaXMuYWxhcm1XaWRnZXRTZXJ2aWNlLmdldFByZWRlZmluZWRDb25maWd1cmF0aW9uKFxuICAgICAgICB0aGlzLmlzSW50ZXJ2YWxSZWZyZXNoLFxuICAgICAgICBSRUNFTlRfQUxBUk1TX1dJREdFVF9JRFxuICAgICAgKTtcbiAgICAgIE9iamVjdC5hc3NpZ24odGhpcy5jb25maWcsIHByZWRlZmluZWRDb25maWcpO1xuXG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHdpZGdldElkID09PSBBU1NFVF9BTEFSTVNfV0lER0VUX0lEKSB7XG4gICAgICBjb25zdCBwcmVkZWZpbmVkQ29uZmlnID0gdGhpcy5hbGFybVdpZGdldFNlcnZpY2UuZ2V0UHJlZGVmaW5lZENvbmZpZ3VyYXRpb24oXG4gICAgICAgIHRoaXMuaXNJbnRlcnZhbFJlZnJlc2hcbiAgICAgICk7XG4gICAgICBPYmplY3QuYXNzaWduKHRoaXMuY29uZmlnLCBwcmVkZWZpbmVkQ29uZmlnKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGhhbmRsZUdsb2JhbFJlZnJlc2hMb2FkaW5nKCk6IHZvaWQge1xuICAgIHRoaXMuaXNMb2FkaW5nJFxuICAgICAgLnBpcGUoXG4gICAgICAgIHNraXAoMSksXG4gICAgICAgIGdsb2JhbEF1dG9SZWZyZXNoTG9hZGluZyh0aGlzLndpZGdldEdsb2JhbEF1dG9SZWZyZXNoKSxcbiAgICAgICAgdGFrZVVudGlsKHRoaXMuZGVzdHJveSQpXG4gICAgICApXG4gICAgICAuc3Vic2NyaWJlKCk7XG4gIH1cbn1cbiIsIjxjOHktYWxhcm1zLWxpc3RcbiAgI2xpc3RcbiAgW2FsYXJtc109XCJhbGFybXMkIHwgYXN5bmNcIlxuICBbbmF2aWdhdGlvbk9wdGlvbnNdPVwie1xuICAgIGFsd2F5c05hdmlnYXRlVG9BbGxBbGFybXM6ICFjb25maWcuZGV2aWNlLFxuICAgIGFsbG93TmF2aWdhdGlvblRvQWxhcm1zVmlldzogdHJ1ZSxcbiAgICBpbmNsdWRlQ2xlYXJlZFF1ZXJ5UGFyYW1zOiB0cnVlLFxuICAgIHF1ZXJ5UGFyYW1zSGFuZGxpbmc6ICcnXG4gIH1cIlxuICBbaXNJbml0aWFsTG9hZGluZ109XCJpc0xvYWRpbmckIHwgYXN5bmNcIlxuICBbaGFzUGVybWlzc2lvbnNdPVwiIWlzRGlzYWJsZWRcIlxuPlxuICA8Yzh5LWFsYXJtcy1kYXRlLWZpbHRlclxuICAgICpuZ0lmPVwiY29uZmlnLmRpc3BsYXlEYXRlU2VsZWN0aW9uXCJcbiAgICBbdXBkYXRlUXVlcnlQYXJhbXNdPVwiZmFsc2VcIlxuICAgIFtkYXRlXT1cInRoaXMuY29uZmlnLmRhdGVGaWx0ZXJcIlxuICAgIFtERUZBVUxUX0lOVEVSVkFMXT1cImNvbmZpZy5pbnRlcnZhbCB8fCAnbm9uZSdcIlxuICAgIChkYXRlRmlsdGVyQ2hhbmdlKT1cIm9uRGF0ZUZpbHRlckNoYW5nZSgkZXZlbnQpXCJcbiAgPjwvYzh5LWFsYXJtcy1kYXRlLWZpbHRlcj5cbiAgPGM4eS1hbGFybS13aWRnZXQtYWxhcm1zLXJlbG9hZFxuICAgIGNsYXNzPVwiZC1jb250ZW50c1wiXG4gICAgW2lzSW50ZXJ2YWxSZWZyZXNoXT1cImlzSW50ZXJ2YWxSZWZyZXNoXCJcbiAgICBbcmVmcmVzaEludGVydmFsXT1cInJlZnJlc2hJbnRlcnZhbFwiXG4gICAgW2NvbmZpZ109XCJjb25maWdcIlxuICAgIFtpc0xvYWRpbmddPVwiaXNMb2FkaW5nJFwiXG4gICAgW2lzU2Nyb2xsaW5nXT1cImxpc3QuaXNTY3JvbGxpbmdcIlxuICAgIFtpc0Rpc2FibGVkXT1cImlzRGlzYWJsZWRcIlxuICAgIChvbkNvdW50ZG93bkVuZGVkKT1cImZldGNoQWxhcm1zKClcIlxuICAgIChvblJlYWxUaW1lVG9nZ2xlQ2hhbmdlZCk9XCJoYW5kbGVSZWFsVGltZVRvZ2dsZUNoYW5nZSgkZXZlbnQpXCJcbiAgPjwvYzh5LWFsYXJtLXdpZGdldC1hbGFybXMtcmVsb2FkPlxuPC9jOHktYWxhcm1zLWxpc3Q+XG4iXX0=
@@ -14,4 +14,10 @@ export const ALARM_ORDER_LABELS = {
14
14
  export const ASSET_ALARMS_WIDGET_ID = 'Asset Alarms';
15
15
  export const RECENT_ALARMS_WIDGET_ID = 'Recent Alarms';
16
16
  export const GLOBAL_INTERVAL_OPTION = 'global-interval';
17
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWxhcm0tbGlzdC13aWRnZXQubW9kZWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi93aWRnZXRzL2ltcGxlbWVudGF0aW9ucy9hbGFybXMvYWxhcm0tbGlzdC13aWRnZXQubW9kZWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLE9BQU8sRUFBaUMsTUFBTSxxQkFBcUIsQ0FBQztBQUc3RSxNQUFNLENBQUMsTUFBTSxrQkFBa0IsR0FBRztJQUNoQyxTQUFTLEVBQUUsV0FBVztJQUN0QixpQkFBaUIsRUFBRSxtQkFBbUI7SUFDdEMsa0JBQWtCLEVBQUUsb0JBQW9CO0lBQ3hDLFdBQVcsRUFBRSxhQUFhO0NBQ2xCLENBQUM7QUFFWCxNQUFNLENBQUMsTUFBTSxrQkFBa0IsR0FBRztJQUNoQyxTQUFTLEVBQUUsT0FBTyxDQUFDLGtCQUFrQixDQUF1QjtJQUM1RCxpQkFBaUIsRUFBRSxPQUFPLENBQUMscUJBQXFCLENBQTBCO0lBQzFFLGtCQUFrQixFQUFFLE9BQU8sQ0FBQyxzQkFBc0IsQ0FBMkI7SUFDN0UsV0FBVyxFQUFFLE9BQU8sQ0FBQyxhQUFhLENBQWtCO0NBQzVDLENBQUM7QUFNWCxNQUFNLENBQUMsTUFBTSxzQkFBc0IsR0FBRyxjQUFjLENBQUM7QUFFckQsTUFBTSxDQUFDLE1BQU0sdUJBQXVCLEdBQUcsZUFBZSxDQUFDO0FBSXZELE1BQU0sQ0FBQyxNQUFNLHNCQUFzQixHQUEyQixpQkFBaUIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGdldHRleHQsIEdsb2JhbEF1dG9SZWZyZXNoV2lkZ2V0Q29uZmlnIH0gZnJvbSAnQGM4eS9uZ3gtY29tcG9uZW50cyc7XG5pbXBvcnQgeyBTZXZlcml0eUZpbHRlciwgQWxhcm1TdGF0dXNTZXR0aW5ncyB9IGZyb20gJ0BjOHkvY2xpZW50JztcblxuZXhwb3J0IGNvbnN0IEFMQVJNX09SREVSX1ZBTFVFUyA9IHtcbiAgQllfQUNUSVZFOiAnQllfQUNUSVZFJyxcbiAgQllfREFURV9BU0NFTkRJTkc6ICdCWV9EQVRFX0FTQ0VORElORycsXG4gIEJZX0RBVEVfREVTQ0VORElORzogJ0JZX0RBVEVfREVTQ0VORElORycsXG4gIEJZX1NFVkVSSVRZOiAnQllfU0VWRVJJVFknXG59IGFzIGNvbnN0O1xuXG5leHBvcnQgY29uc3QgQUxBUk1fT1JERVJfTEFCRUxTID0ge1xuICBCWV9BQ1RJVkU6IGdldHRleHQoJ0J5IGFjdGl2ZSBzdGF0dXMnKSBhcyAnQnkgYWN0aXZlIHN0YXR1cycsXG4gIEJZX0RBVEVfQVNDRU5ESU5HOiBnZXR0ZXh0KCdCeSBkYXRlIChhc2NlbmRpbmcpJykgYXMgJ0J5IGRhdGUgKGFzY2VuZGluZyknLFxuICBCWV9EQVRFX0RFU0NFTkRJTkc6IGdldHRleHQoJ0J5IGRhdGUgKGRlc2NlbmRpbmcpJykgYXMgJ0J5IGRhdGUgKGRlc2NlbmRpbmcpJyxcbiAgQllfU0VWRVJJVFk6IGdldHRleHQoJ0J5IHNldmVyaXR5JykgYXMgJ0J5IHNldmVyaXR5J1xufSBhcyBjb25zdDtcblxuZXhwb3J0IHR5cGUgQWxhcm1PcmRlclR5cGUgPSBrZXlvZiB0eXBlb2YgQUxBUk1fT1JERVJfVkFMVUVTO1xuXG5leHBvcnQgdHlwZSBTZWxlY3RlZERldmljZSA9IHsgaWQ6IHN0cmluZzsgbmFtZTogc3RyaW5nIH07XG5cbmV4cG9ydCBjb25zdCBBU1NFVF9BTEFSTVNfV0lER0VUX0lEID0gJ0Fzc2V0IEFsYXJtcyc7XG5cbmV4cG9ydCBjb25zdCBSRUNFTlRfQUxBUk1TX1dJREdFVF9JRCA9ICdSZWNlbnQgQWxhcm1zJztcblxuZXhwb3J0IHR5cGUgQWxhcm1MaXN0UmVmcmVzaE9wdGlvbiA9ICdub25lJyB8ICdpbnRlcnZhbCcgfCAnZ2xvYmFsLWludGVydmFsJztcblxuZXhwb3J0IGNvbnN0IEdMT0JBTF9JTlRFUlZBTF9PUFRJT046IEFsYXJtTGlzdFJlZnJlc2hPcHRpb24gPSAnZ2xvYmFsLWludGVydmFsJztcblxuZXhwb3J0IHR5cGUgTGVnYWN5QWxhcm1MaXN0Q29uZmlnID0ge1xuICByZWFsdGltZTogYm9vbGVhbjtcbiAgb3B0aW9uczoge1xuICAgIHNldmVyaXR5OiBTZXZlcml0eUZpbHRlcjtcbiAgICB0eXBlczogc3RyaW5nW107XG4gICAgb3JkZXJNb2RlOiBzdHJpbmc7XG4gICAgZGV2aWNlOiBzdHJpbmc7XG4gICAgc3RhdHVzOiBBbGFybVN0YXR1c1NldHRpbmdzO1xuICB9O1xuICBkZXZpY2U/OiB7XG4gICAgbmFtZTogc3RyaW5nO1xuICAgIGlkOiBzdHJpbmc7XG4gIH07XG59O1xuXG5leHBvcnQgaW50ZXJmYWNlIEFsYXJtTGlzdFdpZGdldENvbmZpZyBleHRlbmRzIEdsb2JhbEF1dG9SZWZyZXNoV2lkZ2V0Q29uZmlnIHtcbiAgb3JkZXI6IEFsYXJtT3JkZXJUeXBlO1xuICBpc1JlYWx0aW1lPzogYm9vbGVhbjtcbiAgc2hvd0FsYXJtc0ZvckNoaWxkcmVuPzogYm9vbGVhbjtcbiAgcmVmcmVzaEludGVydmFsPzogbnVtYmVyO1xuICBpc0F1dG9SZWZyZXNoRW5hYmxlZD86IGJvb2xlYW47XG4gIHJlZnJlc2hPcHRpb24/OiBBbGFybUxpc3RSZWZyZXNoT3B0aW9uO1xuICBkZXZpY2U/OiBTZWxlY3RlZERldmljZTtcbiAgc2V2ZXJpdGllczogU2V2ZXJpdHlGaWx0ZXI7XG4gIHN0YXR1czogQWxhcm1TdGF0dXNTZXR0aW5ncztcbiAgdHlwZXM/OiBzdHJpbmdbXTtcbn1cbiJdfQ==
17
+ export var DATE_SELECTION;
18
+ (function (DATE_SELECTION) {
19
+ DATE_SELECTION["CONFIG"] = "config";
20
+ DATE_SELECTION["VIEW_AND_CONFIG"] = "view_and_config";
21
+ DATE_SELECTION["DASHBOARD_CONTEXT"] = "dashboard_context";
22
+ })(DATE_SELECTION || (DATE_SELECTION = {}));
23
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWxhcm0tbGlzdC13aWRnZXQubW9kZWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi93aWRnZXRzL2ltcGxlbWVudGF0aW9ucy9hbGFybXMvYWxhcm0tbGlzdC13aWRnZXQubW9kZWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLE9BQU8sRUFBa0QsTUFBTSxxQkFBcUIsQ0FBQztBQUk5RixNQUFNLENBQUMsTUFBTSxrQkFBa0IsR0FBRztJQUNoQyxTQUFTLEVBQUUsV0FBVztJQUN0QixpQkFBaUIsRUFBRSxtQkFBbUI7SUFDdEMsa0JBQWtCLEVBQUUsb0JBQW9CO0lBQ3hDLFdBQVcsRUFBRSxhQUFhO0NBQ2xCLENBQUM7QUFFWCxNQUFNLENBQUMsTUFBTSxrQkFBa0IsR0FBRztJQUNoQyxTQUFTLEVBQUUsT0FBTyxDQUFDLGtCQUFrQixDQUF1QjtJQUM1RCxpQkFBaUIsRUFBRSxPQUFPLENBQUMscUJBQXFCLENBQTBCO0lBQzFFLGtCQUFrQixFQUFFLE9BQU8sQ0FBQyxzQkFBc0IsQ0FBMkI7SUFDN0UsV0FBVyxFQUFFLE9BQU8sQ0FBQyxhQUFhLENBQWtCO0NBQzVDLENBQUM7QUFNWCxNQUFNLENBQUMsTUFBTSxzQkFBc0IsR0FBRyxjQUFjLENBQUM7QUFFckQsTUFBTSxDQUFDLE1BQU0sdUJBQXVCLEdBQUcsZUFBZSxDQUFDO0FBSXZELE1BQU0sQ0FBQyxNQUFNLHNCQUFzQixHQUEyQixpQkFBaUIsQ0FBQztBQWlCaEYsTUFBTSxDQUFOLElBQVksY0FJWDtBQUpELFdBQVksY0FBYztJQUN4QixtQ0FBaUIsQ0FBQTtJQUNqQixxREFBbUMsQ0FBQTtJQUNuQyx5REFBdUMsQ0FBQTtBQUN6QyxDQUFDLEVBSlcsY0FBYyxLQUFkLGNBQWMsUUFJekIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBnZXR0ZXh0LCBHbG9iYWxBdXRvUmVmcmVzaFdpZGdldENvbmZpZywgRGF0ZVRpbWVDb250ZXh0IH0gZnJvbSAnQGM4eS9uZ3gtY29tcG9uZW50cyc7XG5pbXBvcnQgeyBTZXZlcml0eUZpbHRlciwgQWxhcm1TdGF0dXNTZXR0aW5ncyB9IGZyb20gJ0BjOHkvY2xpZW50JztcbmltcG9ydCB7IEFsYXJtRmlsdGVySW50ZXJ2YWwgfSBmcm9tICdAYzh5L25neC1jb21wb25lbnRzL2ludGVydmFsLXBpY2tlcic7XG5cbmV4cG9ydCBjb25zdCBBTEFSTV9PUkRFUl9WQUxVRVMgPSB7XG4gIEJZX0FDVElWRTogJ0JZX0FDVElWRScsXG4gIEJZX0RBVEVfQVNDRU5ESU5HOiAnQllfREFURV9BU0NFTkRJTkcnLFxuICBCWV9EQVRFX0RFU0NFTkRJTkc6ICdCWV9EQVRFX0RFU0NFTkRJTkcnLFxuICBCWV9TRVZFUklUWTogJ0JZX1NFVkVSSVRZJ1xufSBhcyBjb25zdDtcblxuZXhwb3J0IGNvbnN0IEFMQVJNX09SREVSX0xBQkVMUyA9IHtcbiAgQllfQUNUSVZFOiBnZXR0ZXh0KCdCeSBhY3RpdmUgc3RhdHVzJykgYXMgJ0J5IGFjdGl2ZSBzdGF0dXMnLFxuICBCWV9EQVRFX0FTQ0VORElORzogZ2V0dGV4dCgnQnkgZGF0ZSAoYXNjZW5kaW5nKScpIGFzICdCeSBkYXRlIChhc2NlbmRpbmcpJyxcbiAgQllfREFURV9ERVNDRU5ESU5HOiBnZXR0ZXh0KCdCeSBkYXRlIChkZXNjZW5kaW5nKScpIGFzICdCeSBkYXRlIChkZXNjZW5kaW5nKScsXG4gIEJZX1NFVkVSSVRZOiBnZXR0ZXh0KCdCeSBzZXZlcml0eScpIGFzICdCeSBzZXZlcml0eSdcbn0gYXMgY29uc3Q7XG5cbmV4cG9ydCB0eXBlIEFsYXJtT3JkZXJUeXBlID0ga2V5b2YgdHlwZW9mIEFMQVJNX09SREVSX1ZBTFVFUztcblxuZXhwb3J0IHR5cGUgU2VsZWN0ZWREZXZpY2UgPSB7IGlkOiBzdHJpbmc7IG5hbWU6IHN0cmluZyB9O1xuXG5leHBvcnQgY29uc3QgQVNTRVRfQUxBUk1TX1dJREdFVF9JRCA9ICdBc3NldCBBbGFybXMnO1xuXG5leHBvcnQgY29uc3QgUkVDRU5UX0FMQVJNU19XSURHRVRfSUQgPSAnUmVjZW50IEFsYXJtcyc7XG5cbmV4cG9ydCB0eXBlIEFsYXJtTGlzdFJlZnJlc2hPcHRpb24gPSAnbm9uZScgfCAnaW50ZXJ2YWwnIHwgJ2dsb2JhbC1pbnRlcnZhbCc7XG5cbmV4cG9ydCBjb25zdCBHTE9CQUxfSU5URVJWQUxfT1BUSU9OOiBBbGFybUxpc3RSZWZyZXNoT3B0aW9uID0gJ2dsb2JhbC1pbnRlcnZhbCc7XG5cbmV4cG9ydCB0eXBlIExlZ2FjeUFsYXJtTGlzdENvbmZpZyA9IHtcbiAgcmVhbHRpbWU6IGJvb2xlYW47XG4gIG9wdGlvbnM6IHtcbiAgICBzZXZlcml0eTogU2V2ZXJpdHlGaWx0ZXI7XG4gICAgdHlwZXM6IHN0cmluZ1tdO1xuICAgIG9yZGVyTW9kZTogc3RyaW5nO1xuICAgIGRldmljZTogc3RyaW5nO1xuICAgIHN0YXR1czogQWxhcm1TdGF0dXNTZXR0aW5ncztcbiAgfTtcbiAgZGV2aWNlPzoge1xuICAgIG5hbWU6IHN0cmluZztcbiAgICBpZDogc3RyaW5nO1xuICB9O1xufTtcblxuZXhwb3J0IGVudW0gREFURV9TRUxFQ1RJT04ge1xuICBDT05GSUcgPSAnY29uZmlnJyxcbiAgVklFV19BTkRfQ09ORklHID0gJ3ZpZXdfYW5kX2NvbmZpZycsXG4gIERBU0hCT0FSRF9DT05URVhUID0gJ2Rhc2hib2FyZF9jb250ZXh0J1xufVxuZXhwb3J0IGludGVyZmFjZSBBbGFybUxpc3RXaWRnZXRDb25maWcgZXh0ZW5kcyBHbG9iYWxBdXRvUmVmcmVzaFdpZGdldENvbmZpZyB7XG4gIG9yZGVyOiBBbGFybU9yZGVyVHlwZTtcbiAgaXNSZWFsdGltZT86IGJvb2xlYW47XG4gIHNob3dBbGFybXNGb3JDaGlsZHJlbj86IGJvb2xlYW47XG4gIHJlZnJlc2hJbnRlcnZhbD86IG51bWJlcjtcbiAgaXNBdXRvUmVmcmVzaEVuYWJsZWQ/OiBib29sZWFuO1xuICByZWZyZXNoT3B0aW9uPzogQWxhcm1MaXN0UmVmcmVzaE9wdGlvbjtcbiAgZGV2aWNlPzogU2VsZWN0ZWREZXZpY2U7XG4gIHNldmVyaXRpZXM6IFNldmVyaXR5RmlsdGVyO1xuICBzdGF0dXM6IEFsYXJtU3RhdHVzU2V0dGluZ3M7XG4gIHR5cGVzPzogc3RyaW5nW107XG4gIGRhdGVGaWx0ZXI/OiBEYXRlVGltZUNvbnRleHQ7XG4gIHdpZGdldEluc3RhbmNlR2xvYmFsVGltZUNvbnRleHQ/OiBib29sZWFuO1xuICBkaXNwbGF5RGF0ZVNlbGVjdGlvbj86IGJvb2xlYW47XG4gIGludGVydmFsPzogQWxhcm1GaWx0ZXJJbnRlcnZhbFsnaWQnXTtcbn1cbiJdfQ==
@@ -142,6 +142,16 @@ export class AlarmWidgetService {
142
142
  type: (config.types || []).join(','),
143
143
  withTotalPages: true
144
144
  };
145
+ if (config.dateFilter) {
146
+ filter.lastUpdatedFrom =
147
+ typeof config.dateFilter[0] === 'string'
148
+ ? config.dateFilter[0]
149
+ : config.dateFilter[0].toISOString();
150
+ filter.createdTo =
151
+ typeof config.dateFilter[1] === 'string'
152
+ ? config.dateFilter[1]
153
+ : config.dateFilter[1].toISOString();
154
+ }
145
155
  if (config.device) {
146
156
  filter.source = config.device.id;
147
157
  filter.withSourceAssets = true;
@@ -331,4 +341,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.9", ngImpor
331
341
  type: Injectable,
332
342
  args: [{ providedIn: 'root' }]
333
343
  }], ctorParameters: () => [{ type: i1.AlarmsViewService }] });
334
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWxhcm0td2lkZ2V0LnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi93aWRnZXRzL2ltcGxlbWVudGF0aW9ucy9hbGFybXMvYWxhcm0td2lkZ2V0LnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzQyxPQUFPLEVBR0wsV0FBVyxFQUVYLFFBQVEsRUFFUixlQUFlLEVBQ2hCLE1BQU0sYUFBYSxDQUFDO0FBR3JCLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQy9ELE9BQU8sRUFDTCxrQkFBa0IsRUFJbEIsdUJBQXVCLEVBQ3hCLE1BQU0sMkJBQTJCLENBQUM7OztBQUVuQyxNQUFNLENBQUMsTUFBTSxpQkFBaUIsR0FBRyxFQUFFLENBQUM7QUFHcEMsTUFBTSxPQUFPLGtCQUFrQjtJQUM3QixZQUFvQixpQkFBb0M7UUFBcEMsc0JBQWlCLEdBQWpCLGlCQUFpQixDQUFtQjtJQUFHLENBQUM7SUFFNUQ7Ozs7Ozs7O09BUUc7SUFDSCx5QkFBeUIsQ0FDdkIsSUFBbUQ7UUFFbkQsT0FBTyxJQUFJLEtBQUssSUFBSSxJQUFJLE9BQU8sSUFBSSxLQUFLLFFBQVEsSUFBSSxTQUFTLElBQUksSUFBSSxDQUFDO0lBQ3hFLENBQUM7SUFFRDs7Ozs7Ozs7O09BU0c7SUFDSCwwQkFBMEIsQ0FBQyxpQkFBMEIsRUFBRSxRQUFpQjtRQUN0RSxPQUFPO1lBQ0wsS0FBSyxFQUFFLGtCQUFrQixDQUFDLFNBQVM7WUFDbkMsVUFBVSxFQUNSLFFBQVEsS0FBSyx1QkFBdUI7Z0JBQ2xDLENBQUMsQ0FBRTtvQkFDQyxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsRUFBRSxJQUFJO29CQUN6QixDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsRUFBRSxJQUFJO29CQUN0QixDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsRUFBRSxJ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QUFJLEtBQUssQ0FBQztJQUNsRCxDQUFDO0lBRUQ7Ozs7Ozs7Ozs7O09BV0c7SUFDSyxvQkFBb0IsQ0FBQyxXQUFxQjtRQUNoRCxPQUFPLFlBQVksV0FBVyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDO0lBQzdDLENBQUM7OEdBNVZVLGtCQUFrQjtrSEFBbEIsa0JBQWtCLGNBREwsTUFBTTs7MkZBQ25CLGtCQUFrQjtrQkFEOUIsVUFBVTttQkFBQyxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge1xuICBBbGFybVF1ZXJ5RmlsdGVyLFxuICBBbGFybVN0YXR1c1NldHRpbmdzLFxuICBBbGFybVN0YXR1cyxcbiAgSUFsYXJtLFxuICBTZXZlcml0eSxcbiAgU2V2ZXJpdHlGaWx0ZXIsXG4gIFNFVkVSSVRZX0xBQkVMU1xufSBmcm9tICdAYzh5L2NsaWVudCc7XG5cbmltcG9ydCB7IFNldmVyaXR5U2V0dGluZ3MsIFNldmVyaXR5VHlwZSB9IGZyb20gJ0BjOHkvY2xpZW50JztcbmltcG9ydCB7IEFsYXJtc1ZpZXdTZXJ2aWNlIH0gZnJvbSAnQGM4eS9uZ3gtY29tcG9uZW50cy9hbGFybXMnO1xuaW1wb3J0IHtcbiAgQUxBUk1fT1JERVJfVkFMVUVTLFxuICBBbGFybUxpc3RXaWRnZXRDb25maWcsXG4gIEFsYXJtT3JkZXJUeXBlLFxuICBMZWdhY3lBbGFybUxpc3RDb25maWcsXG4gIFJFQ0VOVF9BTEFSTVNfV0lER0VUX0lEXG59IGZyb20gJy4vYWxhcm0tbGlzdC13aWRnZXQubW9kZWwnO1xuXG5leHBvcnQgY29uc3QgREVGQVVMVF9QQUdFX1NJWkUgPSAyMDtcblxuQEluamVjdGFibGUoeyBwcm92aWRlZEluOiAncm9vdCcgfSlcbmV4cG9ydCBjbGFzcyBBbGFybVdpZGdldFNlcnZpY2Uge1xuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGFsYXJtc1ZpZXdTZXJ2aWNlOiBBbGFybXNWaWV3U2VydmljZSkge31cblxuICAvKipcbiAgICogQ2hlY2tzIGlmIHRoZSBwcm92aWRlZCBkYXRhIGZvbGxvd3MgdGhlIExlZ2FjeUFsYXJtQ29uZmlnIHN0cnVjdHVyZS5cbiAgICpcbiAgICogVGhpcyBmdW5jdGlvbiBkZXRlcm1pbmVzIGlmIGEgZ2l2ZW4gZGF0YSBvYmplY3QgaXMgYW4gaW5zdGFuY2Ugb2YgTGVnYWN5QWxhcm1Db25maWdcbiAgICogYnkgY2hlY2tpbmcgZm9yIHRoZSBwcmVzZW5jZSBvZiB0aGUgJ29wdGlvbnMnIHByb3BlcnR5LlxuICAgKlxuICAgKiBAcGFyYW0gZGF0YSAtIFRoZSBkYXRhIG9iamVjdCB0byBiZSBjaGVja2VkLlxuICAgKiBAcmV0dXJucyAtIFJldHVybnMgYHRydWVgIGlmIHRoZSBkYXRhIG9iamVjdCBpcyBhIExlZ2FjeUFsYXJtQ29uZmlnLCBvdGhlcndpc2UgYGZhbHNlYC5cbiAgICovXG4gIGlzT2xkQWxhcm1Db25maWdTdHJ1Y3R1cmUoXG4gICAgZGF0YTogTGVnYWN5QWxhcm1MaXN0Q29uZmlnIHwgQWxhcm1MaXN0V2lkZ2V0Q29uZmlnXG4gICk6IGRhdGEgaXMgTGVnYWN5QWxhcm1MaXN0Q29uZmlnIHtcbiAgICByZXR1cm4gZGF0YSAhPT0gbnVsbCAmJiB0eXBlb2YgZGF0YSA9PT0gJ29iamVjdCcgJiYgJ29wdGlvbnMnIGluIGRhdGE7XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlcyBwcmVkZWZpbmVkIHdpZGdldCBjb25maWd1cmF0aW9uIG9iamVjdC5cbiAgICpcbiAgICogVGhpcyBtZXRob2QgY3JlYXRlcyBhIG5ldyBjb25maWd1cmF0aW9uIG9iamVjdCBiYXNlZCBvblxuICAgKiBhIHdpZGdldHMgSUQgKHRoYXQgZGV0ZXJtaW5lcyBpZiBpcyBhIGxlZ2FjeSBSZWNlbnQgb3IgQ3JpdGljYWwgYWxhcm1zIHdpZGdldCkuXG4gICAqXG4gICAqIEBwYXJhbSBpc0ludGVydmFsUmVmcmVzaCAtIGRldGVybWluZXMgYSB0eXBlIG9mIGEgcmVmcmVzaC5cbiAgICogQHBhcmFtIHdpZGdldElkIC0gZGV0ZXJtaW5lcyBpZiBhIGNvbmZpZyBzaG91bGQgYmUgZG9uZSBmb3IgUmVjZW50IG9yIENyaXRpY2FsIGFsYXJtcyB3aWRnZXQuXG4gICAqIEByZXR1cm5zIFRoZSBuZXcsIHByZWRlZmluZWQgY29uZmlndXJhdGlvbiBvYmplY3QuXG4gICAqL1xuICBnZXRQcmVkZWZpbmVkQ29uZmlndXJhdGlvbihpc0ludGVydmFsUmVmcmVzaDogYm9vbGVhbiwgd2lkZ2V0SWQ/OiBzdHJpbmcpOiBBbGFybUxpc3RXaWRnZXRDb25maWcge1xuICAgIHJldHVybiB7XG4gICAgICBvcmRlcjogQUxBUk1fT1JERVJfVkFMVUVTLkJZX0FDVElWRSxcbiAgICAgIHNldmVyaXRpZXM6XG4gICAgICAgIHdpZGdldElkID09PSBSRUNFTlRfQUxBUk1TX1dJREdFVF9JRFxuICAgICAgICAgID8gKHtcbiAgICAgICAgICAgICAgW1NldmVyaXR5LkNSSVRJQ0FMXTogdHJ1ZSxcbiAgICAgICAgICAgICAgW1NldmVyaXR5Lk1BSk9SXTogdHJ1ZSxcbiAgICAgICAgICAgICAgW1NldmVyaXR5Lk1JTk9SXTogdHJ1ZSxcbiAgICAgICAgICAgICAgW1NldmVyaXR5LldBUk5JTkddOiB0cnVlXG4gICAgICAgICAgICB9IGFzIFNldmVyaXR5U2V0dGluZ3MpXG4gICAgICAgICAgOiAoe1xuICAgICAgICAgICAgICBbU2V2ZXJpdHkuQ1JJVElDQUxdOiB0cnVlLFxuICAgICAgICAgICAgICBbU2V2ZXJpdHkuTUFKT1JdOiBmYWxzZSxcbiAgICAgICAgICAgICAgW1NldmVyaXR5Lk1JTk9SXTogZmFsc2UsXG4gICAgICAgICAgICAgIFtTZXZlcml0eS5XQVJOSU5HXTogZmFsc2VcbiAgICAgICAgICAgIH0gYXMgU2V2ZXJpdHlTZXR0aW5ncyksXG4gICAgICBzdGF0dXM6XG4gICAgICAgIHdpZGdldElkID09PSBSRUNFTlRfQUxBUk1TX1dJREdFVF9JRFxuICAgICAgICAgID8gKHtcbiAgICAgICAgICAgICAgW0FsYXJtU3RhdHVzLkFDS05PV0xFREdFRF06IHRydWUsXG4gICAgICAgICAgICAgIFtBbGFybVN0YXR1cy5BQ1RJVkVdOiB0cnVlLFxuICAgICAgICAgICAgICBbQWxhcm1TdGF0dXMuQ0xFQVJFRF06IHRydWVcbiAgICAgICAgICAgIH0gYXMgQWxhcm1TdGF0dXNTZXR0aW5ncylcbiAgICAgICAgICA6ICh7XG4gICAgICAgICAgICAgIFtBbGFybVN0YXR1cy5BQ0tOT1dMRURHRURdOiBmYWxzZSxcbiAgICAgICAgICAgICAgW0FsYXJtU3RhdHVzLkFDVElWRV06IHRydWUsXG4gICAgICAgICAgICAgIFtBbGFybVN0YXR1cy5DTEVBUkVEXTogZmFsc2VcbiAgICAgICAgICAgIH0gYXMgQWxhcm1TdGF0dXNTZXR0aW5ncyksXG4gICAgICB0eXBlczogWycnXSxcbiAgICAgIGlzUmVhbHRpbWU6ICFpc0ludGVydmFsUmVmcmVzaCxcbiAgICAgIGlzQXV0b1JlZnJlc2hFbmFibGVkOiB0cnVlLFxuICAgICAgcmVmcmVzaEludGVydmFsOiBpc0ludGVydmFsUmVmcmVzaCA/IHRoaXMuYWxhcm1zVmlld1NlcnZpY2UuREVGQVVMVF9JTlRFUlZBTF9WQUxVRSA6IHVuZGVmaW5lZFxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogVHJhbnNmb3JtcyBhIExlZ2FjeUFsYXJtQ29uZmlnIG9iamVjdCBpbnRvIGFuIEFsYXJtTGlzdFdpZGdldENvbmZpZyBvYmplY3QuXG4gICAqXG4gICAqIFRoaXMgZnVuY3Rpb24gbWFwcyB0aGUgcHJvcGVydGllcyBmcm9tIGFuIG9sZCBjb25maWd1cmF0aW9uIHN0cnVjdHVyZSAoTGVnYWN5QWxhcm1Db25maWcpXG4gICAqIHRvIGEgbmV3IGNvbmZpZ3VyYXRpb24gc3RydWN0dXJlIChBbGFybUxpc3RXaWRnZXRDb25maWcpLlxuICAgKlxuICAgKiBAcGFyYW0gb2xkQ29uZmlnIC0gVGhlIG9sZCBjb25maWd1cmF0aW9uIG9iamVjdCB0byBiZSB0cmFuc2Zvcm1lZC5cbiAgICogQHJldHVybnMgLSBUaGUgbmV3IGNvbmZpZ3VyYXRpb24gb2JqZWN0IG1hcHBlZCBmcm9tIHRoZSBvbGQgb25lLlxuICAgKi9cbiAgbWFwVG9OZXdDb25maWdTdHJ1Y3R1cmUoXG4gICAgb2xkQ29uZmlnOiBMZWdhY3lBbGFybUxpc3RDb25maWcsXG4gICAgaXNJbnRlcnZhbFJlZnJlc2g6IGJvb2xlYW5cbiAgKTogQWxhcm1MaXN0V2lkZ2V0Q29uZmlnIHtcbiAgICBjb25zdCBvcmRlcjogQWxhcm1PcmRlclR5cGUgPVxuICAgICAgb2xkQ29uZmlnLm9wdGlvbnMub3JkZXJNb2RlID09PSAnQUNUSVZFX0ZJUlNUJ1xuICAgICAgICA/IEFMQVJNX09SREVSX1ZBTFVFUy5CWV9BQ1RJVkVcbiAgICAgICAgOiBBTEFSTV9PUkRFUl9WQUxVRVMuQllfU0VWRVJJVFk7XG5cbiAgICBpZiAoIXRoaXMuaXNDb250YWluaW5nQWxsU2V2ZXJpdHlUeXBlcyhvbGRDb25maWcub3B0aW9ucy5zZXZlcml0eSkpIHtcbiAgICAgIG9sZENvbmZpZy5vcHRpb25zLnNldmVyaXR5ID0gdGhpcy5hZGRBbGxNaXNzaW5nU2V2ZXJpdHlUeXBlcyhvbGRDb25maWcub3B0aW9ucy5zZXZlcml0eSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIG9yZGVyOiBvcmRlcixcbiAgICAgIGlzUmVhbHRpbWU6IG9sZENvbmZpZy5yZWFsdGltZSxcbiAgICAgIGRldmljZTogb2xkQ29uZmlnLmRldmljZSxcbiAgICAgIHNob3dBbGFybXNGb3JDaGlsZHJlbjogZmFsc2UsXG4gICAgICBzZXZlcml0aWVzOiBvbGRDb25maWcub3B0aW9ucy5zZXZlcml0eSxcbiAgICAgIHN0YXR1czogdGhpcy5hbGxWYWx1ZXNGYWxzZShvbGRDb25maWcub3B0aW9ucy5zdGF0dXMpXG4gICAgICAgID8gKHtcbiAgICAgICAgICAgIFtBbGFybVN0YXR1cy5BQ0tOT1dMRURHRURdOiB0cnVlLFxuICAgICAgICAgICAgW0FsYXJtU3RhdHVzLkFDVElWRV06IHRydWUsXG4gICAgICAgICAgICBbQWxhcm1TdGF0dXMuQ0xFQVJFRF06IHRydWVcbiAgICAgICAgICB9IGFzIEFsYXJtU3RhdHVzU2V0dGluZ3MpXG4gICAgICAgIDogb2xkQ29uZmlnLm9wdGlvbnMuc3RhdHVzLFxuICAgICAgdHlwZXM6IG9sZENvbmZpZy5vcHRpb25zLnR5cGVzLmxlbmd0aCA/IG9sZENvbmZpZy5vcHRpb25zLnR5cGVzIDogWycnXSxcbiAgICAgIGlzQXV0b1JlZnJlc2hFbmFibGVkOiB0cnVlLFxuICAgICAgcmVmcmVzaEludGVydmFsOiBpc0ludGVydmFsUmVmcmVzaCA/IHRoaXMuYWxhcm1zVmlld1NlcnZpY2UuREVGQVVMVF9JTlRFUlZBTF9WQUxVRSA6IHVuZGVmaW5lZFxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2tzIGlmIHRoZSBwcm92aWRlZCBzZXZlcml0eSBvYmplY3QgY29udGFpbnMgYWxsIHRoZSBwcmVkZWZpbmVkIHNldmVyaXR5IHR5cGVzLlxuICAgKlxuICAgKiBAcGFyYW0gc2V2ZXJpdHkgLSBBIHJlY29yZCBvYmplY3Qgd2hlcmUga2V5cyBhcmUgc2V2ZXJpdHkgdHlwZSBzdHJpbmdzIGFuZCB2YWx1ZXMgYXJlIGJvb2xlYW4uXG4gICAqICAgICAgICAgICAgICAgICAtIFRoaXMgb2JqZWN0IGlzIGNoZWNrZWQgYWdhaW5zdCB0aGUgcHJlZGVmaW5lZCBzZXZlcml0eSB0eXBlcy5cbiAgICogQHJldHVybnMgYHRydWVgIGlmIGFsbCBwcmVkZWZpbmVkIHNldmVyaXR5IHR5cGVzIGFyZSBwcmVzZW50IGluIHRoZSBzZXZlcml0eSBvYmplY3Q7IG90aGVyd2lzZSwgYGZhbHNlYC5cbiAgICovXG4gIGlzQ29udGFpbmluZ0FsbFNldmVyaXR5VHlwZXMoc2V2ZXJpdHk6IFNldmVyaXR5RmlsdGVyKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIE9iamVjdC5rZXlzKFNFVkVSSVRZX0xBQkVMUykuZXZlcnkoc2V2ZXJpdHlUeXBlID0+IHNldmVyaXR5VHlwZSBpbiBzZXZlcml0eSk7XG4gIH1cblxuICAvKipcbiAgICogQWRkcyBhbnkgbWlzc2luZyBzZXZlcml0eSB0eXBlcyB0byB0aGUgcHJvdmlkZWQgc2V2ZXJpdHkgb2JqZWN0IHdpdGggYSBkZWZhdWx0IHZhbHVlIG9mIGBmYWxzZWAuXG4gICAqXG4gICAqIEBwYXJhbSBzZXZlcml0eSAtIEEgcmVjb3JkIG9iamVjdCB3aGVyZSBrZXlzIGFyZSBzZXZlcml0eSB0eXBlIHN0cmluZ3MgYW5kIHZhbHVlcyBhcmUgYm9vbGVhbi5cbiAgICogICAgICAgICAgICAgICAgIC0gTWlzc2luZyBzZXZlcml0eSB0eXBlcyB3aWxsIGJlIGFkZGVkIHRvIHRoaXMgb2JqZWN0LlxuICAgKiBAcmV0dXJucyBUaGUgbW9kaWZpZWQgc2V2ZXJpdHkgb2JqZWN0LCB3aGljaCBpbmNsdWRlcyBhbGwgcHJlZGVmaW5lZCBzZXZlcml0eSB0eXBlcywgYWRkaW5nIGFueVxuICAgKiAgICAgICAgICB0aGF0IHdlcmUgbWlzc2luZyB3aXRoIGEgdmFsdWUgb2YgYGZhbHNlYC5cbiAgICovXG4gIGFkZEFsbE1pc3NpbmdTZXZlcml0eVR5cGVzKHNldmVyaXR5OiBTZXZlcml0eUZpbHRlcik6IFNldmVyaXR5RmlsdGVyIHtcbiAgICBPYmplY3Qua2V5cyhTRVZFUklUWV9MQUJFTFMpLmZvckVhY2goc2V2ZXJpdHlUeXBlID0+IHtcbiAgICAgIGlmICghKHNldmVyaXR5VHlwZSBpbiBzZXZlcml0eSkpIHtcbiAgICAgICAgc2V2ZXJpdHlbc2V2ZXJpdHlUeXBlXSA9IGZhbHNlO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiBzZXZlcml0eTtcbiAgfVxuXG4gIC8qKlxuICAgKiBNYXBzIGFuIEFsYXJtTGlzdFdpZGdldENvbmZpZyBvYmplY3QgdG8gYW4gQWxhcm1RdWVyeUZpbHRlci5cbiAgICpcbiAgICogVGhpcyBmdW5jdGlvbiBjb252ZXJ0cyB0aGUgcHJvdmlkZWQgQWxhcm1MaXN0V2lkZ2V0Q29uZmlnIGludG8gYSBmb3JtYXQgc3VpdGFibGUgZm9yIHF1ZXJ5aW5nIGFsYXJtcy5cbiAgICpcbiAgICogQHBhcmFtIGNvbmZpZyAtIFRoZSBjb25maWd1cmF0aW9uIG9iamVjdCBmb3IgdGhlIGFsYXJtIGxpc3Qgd2lkZ2V0LlxuICAgKiBAcGFyYW0gcGFnZVNpemUgLSBPcHRpb25hbCBudW1iZXIgc3BlY2lmeWluZyB0aGUgc2l6ZSBvZiB0aGUgcGFnZXMgdG8gYmUgcmV0dXJuZWQgaW4gdGhlIHF1ZXJ5LlxuICAgKiBAcmV0dXJucyAtIFRoZSBxdWVyeSBmaWx0ZXIgb2JqZWN0IGNvbnN0cnVjdGVkIGZyb20gdGhlIHByb3ZpZGVkIGNvbmZpZ3VyYXRpb24uXG4gICAqL1xuICBtYXBDb25maWdUb1F1ZXJ5RmlsdGVyKGNvbmZpZzogQWxhcm1MaXN0V2lkZ2V0Q29uZmlnLCBwYWdlU2l6ZT86IG51bWJlcik6IEFsYXJtUXVlcnlGaWx0ZXIge1xuICAgIGNvbnN0IGZpbHRlcjogQWxhcm1RdWVyeUZpbHRlciA9IHtcbiAgICAgIHBhZ2VTaXplOiBwYWdlU2l6ZSB8fCBERUZBVUxUX1BBR0VfU0laRSxcbiAgICAgIHF1ZXJ5OiB0aGlzLmdldE9yZGVyUGFyYW1ldGVycyhjb25maWcub3JkZXIpLFxuICAgICAgc2V2ZXJpdHk6IHRoaXMuZXh0cmFjdEZpbHRlclBhcmFtcyhjb25maWcuc2V2ZXJpdGllcyB8fCB7fSksXG4gICAgICBzdGF0dXM6IHRoaXMuZXh0cmFjdEZpbHRlclBhcmFtcyhjb25maWcuc3RhdHVzIHx8IHt9KSxcbiAgICAgIHR5cGU6IChjb25maWcudHlwZXMgfHwgW10pLmpvaW4oJywnKSxcbiAgICAgIHdpdGhUb3RhbFBhZ2VzOiB0cnVlXG4gICAgfTtcbiAgICBpZiAoY29uZmlnLmRldmljZSkge1xuICAgICAgZmlsdGVyLnNvdXJjZSA9IGNvbmZpZy5kZXZpY2UuaWQ7XG4gICAgICBmaWx0ZXIud2l0aFNvdXJjZUFzc2V0cyA9IHRydWU7XG4gICAgICBmaWx0ZXIud2l0aFNvdXJjZURldmljZXMgPSB0cnVlO1xuICAgICAgZmlsdGVyLndpdGhTb3VyY2VBc3NldHMgPSBjb25maWcuc2hvd0FsYXJtc0ZvckNoaWxkcmVuID8/IHRydWU7XG4gICAgICBmaWx0ZXIud2l0aFNvdXJjZURldmljZXMgPSBjb25maWcuc2hvd0FsYXJtc0ZvckNoaWxkcmVuID8/IHRydWU7XG4gICAgfVxuICAgIHJldHVybiBmaWx0ZXI7XG4gIH1cblxuICAvKipcbiAgICogRXh0cmFjdHMgYW5kIGNvbmNhdGVuYXRlcyBmaWx0ZXIgcGFyYW1ldGVycyBmcm9tIGEgZ2l2ZW4gb2JqZWN0LlxuICAgKlxuICAgKiBUaGlzIGZ1bmN0aW9uIHRha2VzIGFuIG9iamVjdCBjb250YWluaW5nIGZpbHRlciBzZXR0aW5ncyAoZWl0aGVyIFNldmVyaXR5RmlsdGVyXG4gICAqIG9yIEFsYXJtU3RhdHVzU2V0dGluZ3MpIGFuZCByZXR1cm5zIGEgc3RyaW5nIG9mIGFsbCBrZXlzIHdoZXJlIHRoZSBjb3JyZXNwb25kaW5nIHZhbHVlIGlzIHRydWUuXG4gICAqIElmIHRoZSBvYmplY3QgaXMgZW1wdHkgb3IgbnVsbCwgYW4gZW1wdHkgc3RyaW5nIGlzIHJldHVybmVkLlxuICAgKlxuICAgKiBAcGFyYW0gb2JqIC0gVGhlIG9iamVjdCBjb250YWluaW5nIGZpbHRlciBzZXR0aW5ncy5cbiAgICogQHJldHVybnMgLSBBIGNvbmNhdGVuYXRlZCBzdHJpbmcgb2Yga2V5cyB3aXRoIHRydWUgdmFsdWVzLCBzZXBhcmF0ZWQgYnkgY29tbWFzLlxuICAgKi9cbiAgZXh0cmFjdEZpbHRlclBhcmFtcyhvYmo6IFNldmVyaXR5RmlsdGVyIHwgQWxhcm1TdGF0dXNTZXR0aW5ncyk6IHN0cmluZyB7XG4gICAgaWYgKCFvYmopIHtcbiAgICAgIHJldHVybiAnJztcbiAgICB9XG4gICAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKG9iailcbiAgICAgIC5maWx0ZXIoKFssIHZhbHVlXSkgPT4gdmFsdWUpXG4gICAgICAubWFwKChba2V5XSkgPT4ga2V5KVxuICAgICAgLmpvaW4oJywnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEZXRlcm1pbmVzIGlmIGFuIGluY29taW5nIHJlYWwtdGltZSBhbGFybSBoYXMgYSBkaWZmZXJlbnQgc3RhdHVzIHRoYW4gYW4gZXhpc3RpbmcgYWxhcm0uXG4gICAqXG4gICAqIFRoaXMgZnVuY3Rpb24gY2hlY2tzIGlmIHRoZSBwcm92aWRlZCBpbmNvbWluZyByZWFsLXRpbWUgYWxhcm0ncyBzdGF0dXMgZGlmZmVyc1xuICAgKiBmcm9tIHRoYXQgb2YgYW4gZXhpc3RpbmcgYWxhcm0gd2l0aCB0aGUgc2FtZSBJRCBpbiB0aGUgZ2l2ZW4gYXJyYXkgb2YgYWxhcm1zLlxuICAgKlxuICAgKiBAcGFyYW0gZXhpc3RpbmdBbGFybXMgLSBUaGUgYXJyYXkgb2YgZXhpc3RpbmcgYWxhcm1zLlxuICAgKiBAcGFyYW0gaW5jb21pbmdSZWFsdGltZUFsYXJtIC0gVGhlIGluY29taW5nIHJlYWwtdGltZSBhbGFybSB0byBjaGVjay5cbiAgICogQHJldHVybnMgLSBUcnVlIGlmIHRoZSBleGlzdGluZyBhbGFybSdzIHN0YXR1cyBoYXMgY2hhbmdlZCwgb3RoZXJ3aXNlIGZhbHNlLlxuICAgKi9cbiAgaGFzRXhpc3RpbmdBbGFybUNoYW5nZWRTdGF0dXMoZXhpc3RpbmdBbGFybXM6IElBbGFybVtdLCBpbmNvbWluZ1JlYWx0aW1lQWxhcm06IElBbGFybSk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IGV4aXN0aW5nQWxhcm0gPSBleGlzdGluZ0FsYXJtcy5maW5kKGFsYXJtID0+IGFsYXJtLmlkID09PSBpbmNvbWluZ1JlYWx0aW1lQWxhcm0uaWQpO1xuICAgIHJldHVybiAhIWV4aXN0aW5nQWxhcm0gJiYgZXhpc3RpbmdBbGFybS5zdGF0dXMgIT09IGluY29taW5nUmVhbHRpbWVBbGFybS5zdGF0dXM7XG4gIH1cblxuICAvKipcbiAgICogRmlsdGVycyBhbGFybXMgYmFzZWQgb24gdGhlaXIgc3RhdHVzLCBzZXZlcml0eSwgYW5kIHR5cGUuXG4gICAqXG4gICAqIFRoaXMgbWV0aG9kIGRldGVybWluZXMgaWYgYSBnaXZlbiBhbGFybSwgaWRlbnRpZmllZCBlaXRoZXIgYnkgYSBudW1lcmljIElEIG9yIGFuIGBJQWxhcm1gIG9iamVjdCxcbiAgICogbWF0Y2hlcyBzcGVjaWZpYyBjcml0ZXJpYSBkZWZpbmVkIGluIGBhbGFybXNgIGFuZCBvcHRpb25hbGx5IGBjb25maWdgLlxuICAgKlxuICAgKiBAcGFyYW0gYWxhcm0gLSBUaGUgYWxhcm0gdG8gY2hlY2ssIHJlcHJlc2VudGVkIGVpdGhlciBieSBhIG51bWVyaWMgSUQgb3IgYW4gYElBbGFybWAgb2JqZWN0LlxuICAgKiBAcGFyYW0gYWxhcm1zIC0gQW4gYXJyYXkgb2YgYElBbGFybWAgb2JqZWN0cyBhZ2FpbnN0IHdoaWNoIHRoZSBnaXZlbiBhbGFybSBpcyBldmFsdWF0ZWQuXG4gICAqIEBwYXJhbSBjb25maWcgLSBPcHRpb25hbC4gQ29uZmlndXJhdGlvbiBmb3IgdGhlIGFsYXJtIGxpc3Qgd2lkZ2V0LCB1c2VkIHRvIGRlZmluZSBhZGRpdGlvbmFsXG4gICAqICAgICAgICAgICAgICAgICBmaWx0ZXJpbmcgY3JpdGVyaWEuXG4gICAqXG4gICAqIEByZXR1cm5zIGB0cnVlYCBpZiB0aGUgYWxhcm0gbWF0Y2hlcyB0aGUgc3BlY2lmaWVkIGNyaXRlcmlhOyBvdGhlcndpc2UsIGBmYWxzZWAuXG4gICAqICAgICAgICAgIElmIGBhbGFybWAgaXMgYSBudW1iZXIsIGl0IGFsd2F5cyByZXR1cm5zIGBmYWxzZWAuXG4gICAqICAgICAgICAgIElmIGBjb25maWdgIGlzIG5vdCBwcm92aWRlZCwgaXQgdXNlcyBhIGxlZ2FjeSBmaWx0ZXIgZm9yIGNyaXRpY2FsIGFsYXJtcy5cbiAgICpcbiAgICogQHJlbWFya3NcbiAgICogLSBXaGVuIGBhbGFybWAgaXMgYSBudW1lcmljIElELCB0aGUgZnVuY3Rpb24gcmV0dXJucyBgZmFsc2VgIGFzIGl0IGNhbm5vdCBtYXRjaCBhZ2FpbnN0IHR5cGUgYW5kIHNldmVyaXR5LlxuICAgKiAtIElmIGBjb25maWdgIGlzIG5vdCBwcm92aWRlZCwgdGhlIGZ1bmN0aW9uIGFzc3VtZXMgYSBsZWdhY3kgc2NlbmFyaW8gZm9yIGZpbHRlcmluZyBhbGwgY3JpdGljYWwgYWxhcm1zLlxuICAgKi9cbiAgZmlsdGVyQWxhcm1zQnlTdGF0dXNTZXZlcml0eUFuZFR5cGUoXG4gICAgYWxhcm06IG51bWJlciB8IElBbGFybSxcbiAgICBhbGFybXM6IElBbGFybVtdLFxuICAgIGNvbmZpZz86IEFsYXJtTGlzdFdpZGdldENvbmZpZ1xuICApOiBib29sZWFuIHtcbiAgICBpZiAodHlwZW9mIGFsYXJtID09PSAnbnVtYmVyJykge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLmlzQWxhcm1NYXRjaGVkQnlDb25maWcoYWxhcm0sIGFsYXJtcywgY29uZmlnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEZXRlcm1pbmVzIGlmIGFsbCB2YWx1ZXMgaW4gdGhlIGdpdmVuIG9iamVjdCBhcmUgZmFsc2UuXG4gICAqXG4gICAqIFRoaXMgZnVuY3Rpb24gY2hlY2tzIGV2ZXJ5IHZhbHVlIGluIHRoZSBwcm92aWRlZCBvYmplY3QgdG8gc2VlIGlmIHRoZXkgYXJlIGFsbCBmYWxzZS5cbiAgICpcbiAgICogQHBhcmFtIG9iaiAtIEFuIG9iamVjdCB3aXRoIGJvb2xlYW4gdmFsdWVzLlxuICAgKiBAcmV0dXJucyAtIFJldHVybnMgYHRydWVgIGlmIGFsbCB2YWx1ZXMgaW4gdGhlIG9iamVjdCBhcmUgZmFsc2UsIG90aGVyd2lzZSBgZmFsc2VgLlxuICAgKi9cbiAgYWxsVmFsdWVzRmFsc2Uob2JqOiB7IFtrZXk6IHN0cmluZ106IGJvb2xlYW4gfSk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBPYmplY3QudmFsdWVzKG9iaikuZXZlcnkodmFsdWUgPT4gIXZhbHVlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDb25zdHJ1Y3RzIGEgc3RyaW5nIG9mIG9yZGVyIHBhcmFtZXRlcnMgZm9yIGEgcXVlcnkgYmFzZWQgb24gdGhlIHNwZWNpZmllZCBhbGFybSBvcmRlci5cbiAgICpcbiAgICogVGhpcyBmdW5jdGlvbiB0YWtlcyBhbiBhbGFybSBvcmRlciBhbmQgbWFwcyBpdCB0byBhIGNvcnJlc3BvbmRpbmcgc2V0IG9mIG9yZGVyIHBhcmFtZXRlcnMuXG4gICAqIEl0IHN1cHBvcnRzIGRpZmZlcmVudCBvcmRlcmluZyB0eXBlcywgc3VjaCBhcyBCWV9BQ1RJVkUsIEJZX1NFVkVSSVRZLCBhbmQgQllfREFURV9BU0NFTkRJTkcuXG4gICAqIFRoZSBvcmRlciBwYXJhbWV0ZXJzIGFyZSB1c2VkIHRvIGNvbnN0cnVjdCBhIHF1ZXJ5IHN0cmluZyB0aGF0IGRldGVybWluZXMgdGhlIG9yZGVyXG4gICAqIGluIHdoaWNoIGFsYXJtcyBhcmUgcmV0cmlldmVkIG9yIGRpc3BsYXllZC5cbiAgICpcbiAgICogQHBhcmFtIG9yZGVyIC0gVGhlIHNwZWNpZmllZCBvcmRlciBmb3Igc29ydGluZyBhbGFybXMgKGUuZy4sIEJZX0FDVElWRSkuXG4gICAqIEByZXR1cm5zIC0gQSBzdHJpbmcgb2Ygb3JkZXIgcGFyYW1ldGVycyB0byBiZSB1c2VkIGluIGEgcXVlcnksIG9yIGFuIGVtcHR5IHN0cmluZyBpZiB0aGUgb3JkZXIgdHlwZSBpcyB1bnJlY29nbml6ZWQuXG4gICAqL1xuICBnZXRPcmRlclBhcmFtZXRlcnMob3JkZXI6IEFsYXJtT3JkZXJUeXBlKTogc3RyaW5nIHtcbiAgICBsZXQgb3JkZXJQYXJhbXM6IHN0cmluZ1tdO1xuXG4gICAgc3dpdGNoIChvcmRlcikge1xuICAgICAgY2FzZSBBTEFSTV9PUkRFUl9WQUxVRVMuQllfQUNUSVZFOlxuICAgICAgICBvcmRlclBhcmFtcyA9IFsnc3RhdHVzIGFzYycsICdzZXZlcml0eSBhc2MnLCAndGltZS5kYXRlIGRlc2MnLCAndGV4dCBhc2MnXTtcbiAgICAgICAgcmV0dXJuIHRoaXMuYnVpbGRPcmRlclBhcmFtZXRlcnMob3JkZXJQYXJhbXMpO1xuICAgICAgY2FzZSBBTEFSTV9PUkRFUl9WQUxVRVMuQllfU0VWRVJJVFk6XG4gICAgICAgIG9yZGVyUGFyYW1zID0gWydzZXZlcml0eSBhc2MnLCAndGltZS5kYXRlIGRlc2MnLCAndGV4dCBhc2MnXTtcbiAgICAgICAgcmV0dXJuIHRoaXMuYnVpbGRPcmRlclBhcmFtZXRlcnMob3JkZXJQYXJhbXMpO1xuICAgICAgY2FzZSBBTEFSTV9PUkRFUl9WQUxVRVMuQllfREFURV9BU0NFTkRJTkc6XG4gICAgICAgIG9yZGVyUGFyYW1zID0gWyd0aW1lLmRhdGUgYXNjJywgJ3RleHQgYXNjJ107XG4gICAgICAgIHJldHVybiB0aGlzLmJ1aWxkT3JkZXJQYXJhbWV0ZXJzKG9yZGVyUGFyYW1zKTtcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIG9yZGVyUGFyYW1zID0gWyd0aW1lLmRhdGUgZGVzYycsICd0ZXh0IGFzYyddO1xuICAgICAgICByZXR1cm4gdGhpcy5idWlsZE9yZGVyUGFyYW1ldGVycyhvcmRlclBhcmFtcyk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIERldGVybWluZXMgaWYgYW4gYWxhcm0gaXMgbWF0Y2hlZCBieSB0aGUgc3BlY2lmaWVkIHdpZGdldCBjb25maWd1cmF0aW9uLlxuICAgKlxuICAgKiBUaGlzIGZ1bmN0aW9uIGV2YWx1YXRlcyB3aGV0aGVyIGEgZ2l2ZW4gYWxhcm0gc2hvdWxkIGJlIGluY2x1ZGVkIGJhc2VkIG9uIHRoZSBzZXZlcml0eSxcbiAgICogc3RhdHVzLCBhbmQgdHlwZSBmaWx0ZXJzIGRlZmluZWQgaW4gdGhlIEFsYXJtTGlzdFdpZGdldENvbmZpZy4gSXQgY2hlY2tzIGlmIHRoZSBhbGFybSdzXG4gICAqIHNldmVyaXR5IGFuZCBzdGF0dXMgbWF0Y2ggdGhlIGNvbmZpZ3VyYXRpb24gc2V0dGluZ3MgYW5kIGlmIHRoZSBhbGFybSdzIHR5cGUgaXMgaW5jbHVkZWRcbiAgICogaW4gdGhlIGNvbmZpZ3VyYXRpb24ncyB0eXBlcyAoaWYgc3BlY2lmaWVkKS5cbiAgICpcbiAgICogQGlnbm9yZVxuICAgKiBAcGFyYW0gYWxhcm0gLSBUaGUgYWxhcm0gdG8gZXZhbHVhdGUuXG4gICAqIEBwYXJhbSBhbGFybXMgLSBBbiBhcnJheSBvZiBleGlzdGluZyBhbGFybXMsIHVzZWQgZm9yIHN0YXR1cyBtYXRjaGluZy5cbiAgICogQHBhcmFtIGNvbmZpZyAtIFRoZSBjb25maWd1cmF0aW9uIHNldHRpbmdzIHRvIG1hdGNoIGFnYWluc3QuXG4gICAqIEByZXR1cm5zIC0gUmV0dXJucyBgdHJ1ZWAgaWYgdGhlIGFsYXJtIG1hdGNoZXMgdGhlIGNvbmZpZ3VyYXRpb24gY3JpdGVyaWE7IG90aGVyd2lzZSwgYGZhbHNlYC5cbiAgICovXG4gIGlzQWxhcm1NYXRjaGVkQnlDb25maWcoYWxhcm06IElBbGFybSwgYWxhcm1zOiBJQWxhcm1bXSwgY29uZmlnOiBBbGFybUxpc3RXaWRnZXRDb25maWcpOiBib29sZWFuIHtcbiAgICBjb25zdCBpc1NldmVyaXR5TWF0Y2hlZCA9IHRoaXMuaXNTZXZlcml0eU1hdGNoaW5nKGFsYXJtLnNldmVyaXR5LCBjb25maWcpO1xuICAgIGNvbnN0IGlzU3RhdHVzTWF0Y2hlZCA9IHRoaXMuaXNTdGF0dXNNYXRjaGluZyhhbGFybSwgYWxhcm1zLCBjb25maWcpO1xuICAgIGNvbnN0IGlzVHlwZU1hdGNoZWQgPSB0aGlzLmlzVHlwZXNNYXRjaGluZyhjb25maWcsIGFsYXJtKTtcblxuICAgIHJldHVybiBpc1NldmVyaXR5TWF0Y2hlZCAmJiBpc1N0YXR1c01hdGNoZWQgJiYgaXNUeXBlTWF0Y2hlZDtcbiAgfVxuICAvKipcbiAgICogQ2hlY2tzIGlmIHRoZSBzZXZlcml0eSBvZiBhbiBhbGFybSBtYXRjaGVzIHRoZSBjb25maWd1cmF0aW9uIHNldHRpbmcuXG4gICAqXG4gICAqIFRoaXMgZnVuY3Rpb24gZGV0ZXJtaW5lcyB3aGV0aGVyIHRoZSBzZXZlcml0eSBvZiBhbiBhbGFybSBpcyBpbmNsdWRlZCBpbiB0aGVcbiAgICogc2V2ZXJpdHkgc2V0dGluZ3MgZGVmaW5lZCBpbiB0aGUgQWxhcm1MaXN0V2lkZ2V0Q29uZmlnLlxuICAgKlxuICAgKiBAaWdub3JlXG4gICAqIEBwYXJhbSBzZXZlcml0eSAtIFRoZSBzZXZlcml0eSBvZiB0aGUgYWxhcm0gdG8gY2hlY2suXG4gICAqIEBwYXJhbSBjb25maWcgLSBUaGUgY29uZmlndXJhdGlvbiB3aXRoIHNldmVyaXR5IHNldHRpbmdzLlxuICAgKiBAcmV0dXJucyAtIFJldHVybnMgYHRydWVgIGlmIHRoZSBhbGFybSdzIHNldmVyaXR5IG1hdGNoZXMgdGhlIGNvbmZpZ3VyYXRpb247IG90aGVyd2lzZSwgYGZhbHNlYC5cbiAgICovXG4gIGlzU2V2ZXJpdHlNYXRjaGluZyhzZXZlcml0eTogU2V2ZXJpdHlUeXBlLCBjb25maWc6IEFsYXJtTGlzdFdpZGdldENvbmZpZyk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAhIWNvbmZpZy5zZXZlcml0aWVzW3NldmVyaXR5XTtcbiAgfVxuXG4gIC8qKlxuICAgKiBFdmFsdWF0ZXMgaWYgdGhlIHN0YXR1cyBvZiBhbiBhbGFybSBtYXRjaGVzIHRoZSBjb25maWd1cmF0aW9uIHNldHRpbmcgb3IgaGFzIGNoYW5nZWQuXG4gICAqXG4gICAqIFRoaXMgZnVuY3Rpb24gY2hlY2tzIGlmIHRoZSBzdGF0dXMgb2YgYW4gYWxhcm0gaXMgaW5jbHVkZWQgaW4gdGhlIHN0YXR1cyBzZXR0aW5ncyBkZWZpbmVkIGluXG4gICAqIHRoZSBBbGFybUxpc3RXaWRnZXRDb25maWcsIG9yIGlmIHRoZSBhbGFybSdzIHN0YXR1cyBoYXMgY2hhbmdlZCBiYXNlZCBvbiB0aGUgZXhpc3RpbmcgYWxhcm1zLlxuICAgKlxuICAgKiBAaWdub3JlXG4gICAqIEBwYXJhbSBhbGFybSAtIFRoZSBhbGFybSB3aG9zZSBzdGF0dXMgaXMgdG8gYmUgZXZhbHVhdGVkLlxuICAgKiBAcGFyYW0gYWxhcm1zIC0gQW4gYXJyYXkgb2YgZXhpc3RpbmcgYWxhcm1zIHRvIGNvbXBhcmUgYWdhaW5zdCBmb3Igc3RhdHVzIGNoYW5nZXMuXG4gICAqIEBwYXJhbSBjb25maWcgLSBUaGUgY29uZmlndXJhdGlvbiB3aXRoIHN0YXR1cyBzZXR0aW5ncy5cbiAgICogQHJldHVybnMgLSBSZXR1cm5zIGB0cnVlYCBpZiB0aGUgYWxhcm0ncyBzdGF0dXMgbWF0Y2hlcyBvciBoYXMgY2hhbmdlZCBhcyBwZXIgdGhlIGNvbmZpZ3VyYXRpb247IG90aGVyd2lzZSwgYGZhbHNlYC5cbiAgICovXG4gIGlzU3RhdHVzTWF0Y2hpbmcoYWxhcm06IElBbGFybSwgYWxhcm1zOiBJQWxhcm1bXSwgY29uZmlnOiBBbGFybUxpc3RXaWRnZXRDb25maWcpOiBib29sZWFuIHtcbiAgICByZXR1cm4gISFjb25maWcuc3RhdHVzW2FsYXJtLnN0YXR1c10gfHwgdGhpcy5oYXNFeGlzdGluZ0FsYXJtQ2hhbmdlZFN0YXR1cyhhbGFybXMsIGFsYXJtKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVja3MgaWYgdGhlIGNvbmZpZ3VyYXRpb24ncyB0eXBlcyBhcnJheSBjb250YWlucyBvbmx5IGVtcHR5IHN0cmluZyBvciBpbmNsdWRlcyBhIHNwZWNpZmljIGFsYXJtIHR5cGUuXG4gICAqXG4gICAqIEBwYXJhbSBjb25maWcgLSBUaGUgY29uZmlndXJhdGlvbiBvYmplY3Qgd2l0aCBhIGB0eXBlc2AgcHJvcGVydHkuXG4gICAqIEBwYXJhbSBhbGFybSAtIFRoZSBhbGFybSBvYmplY3Qgd2l0aCBhIGB0eXBlYCBwcm9wZXJ0eSB0byBjaGVjayBhZ2FpbnN0IHRoZSBjb25maWcncyB0eXBlcy5cbiAgICogQHJldHVybnMgYHRydWVgIGlmIHRoZSBjb25maWcncyB0eXBlcyBhcnJheSBjb250YWlucyBvbmx5IGVtcHR5IHN0cmluZyBvciBpbmNsdWRlcyB0aGUgYWxhcm0ncyB0eXBlLCBvdGhlcndpc2UgYGZhbHNlYC5cbiAgICovXG4gIGlzVHlwZXNNYXRjaGluZyhjb25maWc6IEFsYXJtTGlzdFdpZGdldENvbmZpZywgYWxhcm06IElBbGFybSk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBBcnJheS5pc0FycmF5KGNvbmZpZy50eXBlcykgJiYgY29uZmlnLnR5cGVzLmxlbmd0aCA9PT0gMSAmJiBjb25maWcudHlwZXNbMF0gPT09ICcnXG4gICAgICA/IHRydWVcbiAgICAgIDogY29uZmlnLnR5cGVzPy5pbmNsdWRlcyhhbGFybS50eXBlKSA/PyBmYWxzZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDb25zdHJ1Y3RzIGEgcXVlcnkgc3RyaW5nIGZyb20gYW4gYXJyYXkgb2Ygb3JkZXIgcGFyYW1ldGVycy5cbiAgICpcbiAgICogVGhpcyBmdW5jdGlvbiB0YWtlcyBhbiBhcnJheSBvZiBvcmRlcmluZyBwYXJhbWV0ZXJzIGFuZCBjb25zdHJ1Y3RzIGEgcXVlcnkgc3RyaW5nXG4gICAqIGZvciB1c2UgaW4gYWxhcm0gb3JkZXJpbmcgcXVlcmllcy4gVGhlIHBhcmFtZXRlcnMgYXJlIGNvbmNhdGVuYXRlZCBpbnRvIGEgc2luZ2xlIHN0cmluZyxcbiAgICogcHJlZml4ZWQgd2l0aCAnJG9yZGVyYnk9Jy5cbiAgICpcbiAgICogQGlnbm9yZVxuICAgKiBAcHJpdmF0ZVxuICAgKiBAcGFyYW0gb3JkZXJQYXJhbXMgLSBUaGUgb3JkZXIgcGFyYW1ldGVycyB0byBiZSBpbmNsdWRlZCBpbiB0aGUgcXVlcnkuXG4gICAqIEByZXR1cm5zIC0gQSBxdWVyeSBzdHJpbmcgcmVwcmVzZW50aW5nIHRoZSBvcmRlciBwYXJhbWV0ZXJzLlxuICAgKi9cbiAgcHJpdmF0ZSBidWlsZE9yZGVyUGFyYW1ldGVycyhvcmRlclBhcmFtczogc3RyaW5nW10pOiBzdHJpbmcge1xuICAgIHJldHVybiBgJG9yZGVyYnk9JHtvcmRlclBhcmFtcy5qb2luKCcsJyl9YDtcbiAgfVxufVxuIl19
344
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWxhcm0td2lkZ2V0LnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi93aWRnZXRzL2ltcGxlbWVudGF0aW9ucy9hbGFybXMvYWxhcm0td2lkZ2V0LnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzQyxPQUFPLEVBR0wsV0FBVyxFQUVYLFFBQVEsRUFFUixlQUFlLEVBQ2hCLE1BQU0sYUFBYSxDQUFDO0FBR3JCLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQy9ELE9BQU8sRUFDTCxrQkFBa0IsRUFJbEIsdUJBQXVCLEVBQ3hCLE1BQU0sMkJBQTJCLENBQUM7OztBQUVuQyxNQUFNLENBQUMsTUFBTSxpQkFBaUIsR0FBRyxFQUFFLENBQUM7QUFHcEMsTUFBTSxPQUFPLGtCQUFrQjtJQUM3QixZQUFvQixpQkFBb0M7UUFBcEMsc0JBQWlCLEdBQWpCLGlCQUFpQixDQUFtQjtJQUFHLENBQUM7SUFFNUQ7Ozs7Ozs7O09BUUc7SUFDSCx5QkFBeUIsQ0FDdkIsSUFBbUQ7UUFFbkQsT0FBTyxJQUFJLEtBQUssSUFBSSxJQUFJLE9BQU8sSUFBSSxLQUFLLFFBQVEsSUFBSSxTQUFTLElBQUksSUFBSSxDQUFDO0lBQ3hFLENBQUM7SUFFRDs7Ozs7Ozs7O09BU0c7SUFDSCwwQkFBMEIsQ0FBQyxpQkFBMEIsRUFBRSxRQUFpQjtRQUN0RSxPQUFPO1lBQ0wsS0FBSyxFQUFFLGtCQUFrQixDQUFDLFNBQVM7WUFDbkMsVUFBVSxFQUNSLFFBQVEsS0FBSyx1QkFBdUI7Z0JBQ2xDLENBQUMsQ0FBRTtvQkFDQyxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsRUFBRSxJQUFJO29CQUN6QixDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsRUFBRSxJQUFJO29CQUN0QixDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsRUFBRSxJ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QUFhLEVBQUUsTUFBZ0IsRUFBRSxNQUE2QjtRQUM3RSxPQUFPLENBQUMsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsSUFBSSxJQUFJLENBQUMsNkJBQTZCLENBQUMsTUFBTSxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBQzVGLENBQUM7SUFFRDs7Ozs7O09BTUc7SUFDSCxlQUFlLENBQUMsTUFBNkIsRUFBRSxLQUFhO1FBQzFELE9BQU8sS0FBSyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLElBQUksTUFBTSxDQUFDLEtBQUssQ0FBQyxNQUFNLEtBQUssQ0FBQyxJQUFJLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEtBQUssRUFBRTtZQUN2RixDQUFDLENBQUMsSUFBSTtZQUNOLENBQUMsQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFLFFBQVEsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksS0FBSyxDQUFDO0lBQ2xELENBQUM7SUFFRDs7Ozs7Ozs7Ozs7T0FXRztJQUNLLG9CQUFvQixDQUFDLFdBQXFCO1FBQ2hELE9BQU8sWUFBWSxXQUFXLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUM7SUFDN0MsQ0FBQzs4R0F0V1Usa0JBQWtCO2tIQUFsQixrQkFBa0IsY0FETCxNQUFNOzsyRkFDbkIsa0JBQWtCO2tCQUQ5QixVQUFVO21CQUFDLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7XG4gIEFsYXJtUXVlcnlGaWx0ZXIsXG4gIEFsYXJtU3RhdHVzU2V0dGluZ3MsXG4gIEFsYXJtU3RhdHVzLFxuICBJQWxhcm0sXG4gIFNldmVyaXR5LFxuICBTZXZlcml0eUZpbHRlcixcbiAgU0VWRVJJVFlfTEFCRUxTXG59IGZyb20gJ0BjOHkvY2xpZW50JztcblxuaW1wb3J0IHsgU2V2ZXJpdHlTZXR0aW5ncywgU2V2ZXJpdHlUeXBlIH0gZnJvbSAnQGM4eS9jbGllbnQnO1xuaW1wb3J0IHsgQWxhcm1zVmlld1NlcnZpY2UgfSBmcm9tICdAYzh5L25neC1jb21wb25lbnRzL2FsYXJtcyc7XG5pbXBvcnQge1xuICBBTEFSTV9PUkRFUl9WQUxVRVMsXG4gIEFsYXJtTGlzdFdpZGdldENvbmZpZyxcbiAgQWxhcm1PcmRlclR5cGUsXG4gIExlZ2FjeUFsYXJtTGlzdENvbmZpZyxcbiAgUkVDRU5UX0FMQVJNU19XSURHRVRfSURcbn0gZnJvbSAnLi9hbGFybS1saXN0LXdpZGdldC5tb2RlbCc7XG5cbmV4cG9ydCBjb25zdCBERUZBVUxUX1BBR0VfU0laRSA9IDIwO1xuXG5ASW5qZWN0YWJsZSh7IHByb3ZpZGVkSW46ICdyb290JyB9KVxuZXhwb3J0IGNsYXNzIEFsYXJtV2lkZ2V0U2VydmljZSB7XG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgYWxhcm1zVmlld1NlcnZpY2U6IEFsYXJtc1ZpZXdTZXJ2aWNlKSB7fVxuXG4gIC8qKlxuICAgKiBDaGVja3MgaWYgdGhlIHByb3ZpZGVkIGRhdGEgZm9sbG93cyB0aGUgTGVnYWN5QWxhcm1Db25maWcgc3RydWN0dXJlLlxuICAgKlxuICAgKiBUaGlzIGZ1bmN0aW9uIGRldGVybWluZXMgaWYgYSBnaXZlbiBkYXRhIG9iamVjdCBpcyBhbiBpbnN0YW5jZSBvZiBMZWdhY3lBbGFybUNvbmZpZ1xuICAgKiBieSBjaGVja2luZyBmb3IgdGhlIHByZXNlbmNlIG9mIHRoZSAnb3B0aW9ucycgcHJvcGVydHkuXG4gICAqXG4gICAqIEBwYXJhbSBkYXRhIC0gVGhlIGRhdGEgb2JqZWN0IHRvIGJlIGNoZWNrZWQuXG4gICAqIEByZXR1cm5zIC0gUmV0dXJucyBgdHJ1ZWAgaWYgdGhlIGRhdGEgb2JqZWN0IGlzIGEgTGVnYWN5QWxhcm1Db25maWcsIG90aGVyd2lzZSBgZmFsc2VgLlxuICAgKi9cbiAgaXNPbGRBbGFybUNvbmZpZ1N0cnVjdHVyZShcbiAgICBkYXRhOiBMZWdhY3lBbGFybUxpc3RDb25maWcgfCBBbGFybUxpc3RXaWRnZXRDb25maWdcbiAgKTogZGF0YSBpcyBMZWdhY3lBbGFybUxpc3RDb25maWcge1xuICAgIHJldHVybiBkYXRhICE9PSBudWxsICYmIHR5cGVvZiBkYXRhID09PSAnb2JqZWN0JyAmJiAnb3B0aW9ucycgaW4gZGF0YTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGVzIHByZWRlZmluZWQgd2lkZ2V0IGNvbmZpZ3VyYXRpb24gb2JqZWN0LlxuICAgKlxuICAgKiBUaGlzIG1ldGhvZCBjcmVhdGVzIGEgbmV3IGNvbmZpZ3VyYXRpb24gb2JqZWN0IGJhc2VkIG9uXG4gICAqIGEgd2lkZ2V0cyBJRCAodGhhdCBkZXRlcm1pbmVzIGlmIGlzIGEgbGVnYWN5IFJlY2VudCBvciBDcml0aWNhbCBhbGFybXMgd2lkZ2V0KS5cbiAgICpcbiAgICogQHBhcmFtIGlzSW50ZXJ2YWxSZWZyZXNoIC0gZGV0ZXJtaW5lcyBhIHR5cGUgb2YgYSByZWZyZXNoLlxuICAgKiBAcGFyYW0gd2lkZ2V0SWQgLSBkZXRlcm1pbmVzIGlmIGEgY29uZmlnIHNob3VsZCBiZSBkb25lIGZvciBSZWNlbnQgb3IgQ3JpdGljYWwgYWxhcm1zIHdpZGdldC5cbiAgICogQHJldHVybnMgVGhlIG5ldywgcHJlZGVmaW5lZCBjb25maWd1cmF0aW9uIG9iamVjdC5cbiAgICovXG4gIGdldFByZWRlZmluZWRDb25maWd1cmF0aW9uKGlzSW50ZXJ2YWxSZWZyZXNoOiBib29sZWFuLCB3aWRnZXRJZD86IHN0cmluZyk6IEFsYXJtTGlzdFdpZGdldENvbmZpZyB7XG4gICAgcmV0dXJuIHtcbiAgICAgIG9yZGVyOiBBTEFSTV9PUkRFUl9WQUxVRVMuQllfQUNUSVZFLFxuICAgICAgc2V2ZXJpdGllczpcbiAgICAgICAgd2lkZ2V0SWQgPT09IFJFQ0VOVF9BTEFSTVNfV0lER0VUX0lEXG4gICAgICAgICAgPyAoe1xuICAgICAgICAgICAgICBbU2V2ZXJpdHkuQ1JJVElDQUxdOiB0cnVlLFxuICAgICAgICAgICAgICBbU2V2ZXJpdHkuTUFKT1JdOiB0cnVlLFxuICAgICAgICAgICAgICBbU2V2ZXJpdHkuTUlOT1JdOiB0cnVlLFxuICAgICAgICAgICAgICBbU2V2ZXJpdHkuV0FSTklOR106IHRydWVcbiAgICAgICAgICAgIH0gYXMgU2V2ZXJpdHlTZXR0aW5ncylcbiAgICAgICAgICA6ICh7XG4gICAgICAgICAgICAgIFtTZXZlcml0eS5DUklUSUNBTF06IHRydWUsXG4gICAgICAgICAgICAgIFtTZXZlcml0eS5NQUpPUl06IGZhbHNlLFxuICAgICAgICAgICAgICBbU2V2ZXJpdHkuTUlOT1JdOiBmYWxzZSxcbiAgICAgICAgICAgICAgW1NldmVyaXR5LldBUk5JTkddOiBmYWxzZVxuICAgICAgICAgICAgfSBhcyBTZXZlcml0eVNldHRpbmdzKSxcbiAgICAgIHN0YXR1czpcbiAgICAgICAgd2lkZ2V0SWQgPT09IFJFQ0VOVF9BTEFSTVNfV0lER0VUX0lEXG4gICAgICAgICAgPyAoe1xuICAgICAgICAgICAgICBbQWxhcm1TdGF0dXMuQUNLTk9XTEVER0VEXTogdHJ1ZSxcbiAgICAgICAgICAgICAgW0FsYXJtU3RhdHVzLkFDVElWRV06IHRydWUsXG4gICAgICAgICAgICAgIFtBbGFybVN0YXR1cy5DTEVBUkVEXTogdHJ1ZVxuICAgICAgICAgICAgfSBhcyBBbGFybVN0YXR1c1NldHRpbmdzKVxuICAgICAgICAgIDogKHtcbiAgICAgICAgICAgICAgW0FsYXJtU3RhdHVzLkFDS05PV0xFREdFRF06IGZhbHNlLFxuICAgICAgICAgICAgICBbQWxhcm1TdGF0dXMuQUNUSVZFXTogdHJ1ZSxcbiAgICAgICAgICAgICAgW0FsYXJtU3RhdHVzLkNMRUFSRURdOiBmYWxzZVxuICAgICAgICAgICAgfSBhcyBBbGFybVN0YXR1c1NldHRpbmdzKSxcbiAgICAgIHR5cGVzOiBbJyddLFxuICAgICAgaXNSZWFsdGltZTogIWlzSW50ZXJ2YWxSZWZyZXNoLFxuICAgICAgaXNBdXRvUmVmcmVzaEVuYWJsZWQ6IHRydWUsXG4gICAgICByZWZyZXNoSW50ZXJ2YWw6IGlzSW50ZXJ2YWxSZWZyZXNoID8gdGhpcy5hbGFybXNWaWV3U2VydmljZS5ERUZBVUxUX0lOVEVSVkFMX1ZBTFVFIDogdW5kZWZpbmVkXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUcmFuc2Zvcm1zIGEgTGVnYWN5QWxhcm1Db25maWcgb2JqZWN0IGludG8gYW4gQWxhcm1MaXN0V2lkZ2V0Q29uZmlnIG9iamVjdC5cbiAgICpcbiAgICogVGhpcyBmdW5jdGlvbiBtYXBzIHRoZSBwcm9wZXJ0aWVzIGZyb20gYW4gb2xkIGNvbmZpZ3VyYXRpb24gc3RydWN0dXJlIChMZWdhY3lBbGFybUNvbmZpZylcbiAgICogdG8gYSBuZXcgY29uZmlndXJhdGlvbiBzdHJ1Y3R1cmUgKEFsYXJtTGlzdFdpZGdldENvbmZpZykuXG4gICAqXG4gICAqIEBwYXJhbSBvbGRDb25maWcgLSBUaGUgb2xkIGNvbmZpZ3VyYXRpb24gb2JqZWN0IHRvIGJlIHRyYW5zZm9ybWVkLlxuICAgKiBAcmV0dXJucyAtIFRoZSBuZXcgY29uZmlndXJhdGlvbiBvYmplY3QgbWFwcGVkIGZyb20gdGhlIG9sZCBvbmUuXG4gICAqL1xuICBtYXBUb05ld0NvbmZpZ1N0cnVjdHVyZShcbiAgICBvbGRDb25maWc6IExlZ2FjeUFsYXJtTGlzdENvbmZpZyxcbiAgICBpc0ludGVydmFsUmVmcmVzaDogYm9vbGVhblxuICApOiBBbGFybUxpc3RXaWRnZXRDb25maWcge1xuICAgIGNvbnN0IG9yZGVyOiBBbGFybU9yZGVyVHlwZSA9XG4gICAgICBvbGRDb25maWcub3B0aW9ucy5vcmRlck1vZGUgPT09ICdBQ1RJVkVfRklSU1QnXG4gICAgICAgID8gQUxBUk1fT1JERVJfVkFMVUVTLkJZX0FDVElWRVxuICAgICAgICA6IEFMQVJNX09SREVSX1ZBTFVFUy5CWV9TRVZFUklUWTtcblxuICAgIGlmICghdGhpcy5pc0NvbnRhaW5pbmdBbGxTZXZlcml0eVR5cGVzKG9sZENvbmZpZy5vcHRpb25zLnNldmVyaXR5KSkge1xuICAgICAgb2xkQ29uZmlnLm9wdGlvbnMuc2V2ZXJpdHkgPSB0aGlzLmFkZEFsbE1pc3NpbmdTZXZlcml0eVR5cGVzKG9sZENvbmZpZy5vcHRpb25zLnNldmVyaXR5KTtcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgb3JkZXI6IG9yZGVyLFxuICAgICAgaXNSZWFsdGltZTogb2xkQ29uZmlnLnJlYWx0aW1lLFxuICAgICAgZGV2aWNlOiBvbGRDb25maWcuZGV2aWNlLFxuICAgICAgc2hvd0FsYXJtc0ZvckNoaWxkcmVuOiBmYWxzZSxcbiAgICAgIHNldmVyaXRpZXM6IG9sZENvbmZpZy5vcHRpb25zLnNldmVyaXR5LFxuICAgICAgc3RhdHVzOiB0aGlzLmFsbFZhbHVlc0ZhbHNlKG9sZENvbmZpZy5vcHRpb25zLnN0YXR1cylcbiAgICAgICAgPyAoe1xuICAgICAgICAgICAgW0FsYXJtU3RhdHVzLkFDS05PV0xFREdFRF06IHRydWUsXG4gICAgICAgICAgICBbQWxhcm1TdGF0dXMuQUNUSVZFXTogdHJ1ZSxcbiAgICAgICAgICAgIFtBbGFybVN0YXR1cy5DTEVBUkVEXTogdHJ1ZVxuICAgICAgICAgIH0gYXMgQWxhcm1TdGF0dXNTZXR0aW5ncylcbiAgICAgICAgOiBvbGRDb25maWcub3B0aW9ucy5zdGF0dXMsXG4gICAgICB0eXBlczogb2xkQ29uZmlnLm9wdGlvbnMudHlwZXMubGVuZ3RoID8gb2xkQ29uZmlnLm9wdGlvbnMudHlwZXMgOiBbJyddLFxuICAgICAgaXNBdXRvUmVmcmVzaEVuYWJsZWQ6IHRydWUsXG4gICAgICByZWZyZXNoSW50ZXJ2YWw6IGlzSW50ZXJ2YWxSZWZyZXNoID8gdGhpcy5hbGFybXNWaWV3U2VydmljZS5ERUZBVUxUX0lOVEVSVkFMX1ZBTFVFIDogdW5kZWZpbmVkXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVja3MgaWYgdGhlIHByb3ZpZGVkIHNldmVyaXR5IG9iamVjdCBjb250YWlucyBhbGwgdGhlIHByZWRlZmluZWQgc2V2ZXJpdHkgdHlwZXMuXG4gICAqXG4gICAqIEBwYXJhbSBzZXZlcml0eSAtIEEgcmVjb3JkIG9iamVjdCB3aGVyZSBrZXlzIGFyZSBzZXZlcml0eSB0eXBlIHN0cmluZ3MgYW5kIHZhbHVlcyBhcmUgYm9vbGVhbi5cbiAgICogICAgICAgICAgICAgICAgIC0gVGhpcyBvYmplY3QgaXMgY2hlY2tlZCBhZ2FpbnN0IHRoZSBwcmVkZWZpbmVkIHNldmVyaXR5IHR5cGVzLlxuICAgKiBAcmV0dXJucyBgdHJ1ZWAgaWYgYWxsIHByZWRlZmluZWQgc2V2ZXJpdHkgdHlwZXMgYXJlIHByZXNlbnQgaW4gdGhlIHNldmVyaXR5IG9iamVjdDsgb3RoZXJ3aXNlLCBgZmFsc2VgLlxuICAgKi9cbiAgaXNDb250YWluaW5nQWxsU2V2ZXJpdHlUeXBlcyhzZXZlcml0eTogU2V2ZXJpdHlGaWx0ZXIpOiBib29sZWFuIHtcbiAgICByZXR1cm4gT2JqZWN0LmtleXMoU0VWRVJJVFlfTEFCRUxTKS5ldmVyeShzZXZlcml0eVR5cGUgPT4gc2V2ZXJpdHlUeXBlIGluIHNldmVyaXR5KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBZGRzIGFueSBtaXNzaW5nIHNldmVyaXR5IHR5cGVzIHRvIHRoZSBwcm92aWRlZCBzZXZlcml0eSBvYmplY3Qgd2l0aCBhIGRlZmF1bHQgdmFsdWUgb2YgYGZhbHNlYC5cbiAgICpcbiAgICogQHBhcmFtIHNldmVyaXR5IC0gQSByZWNvcmQgb2JqZWN0IHdoZXJlIGtleXMgYXJlIHNldmVyaXR5IHR5cGUgc3RyaW5ncyBhbmQgdmFsdWVzIGFyZSBib29sZWFuLlxuICAgKiAgICAgICAgICAgICAgICAgLSBNaXNzaW5nIHNldmVyaXR5IHR5cGVzIHdpbGwgYmUgYWRkZWQgdG8gdGhpcyBvYmplY3QuXG4gICAqIEByZXR1cm5zIFRoZSBtb2RpZmllZCBzZXZlcml0eSBvYmplY3QsIHdoaWNoIGluY2x1ZGVzIGFsbCBwcmVkZWZpbmVkIHNldmVyaXR5IHR5cGVzLCBhZGRpbmcgYW55XG4gICAqICAgICAgICAgIHRoYXQgd2VyZSBtaXNzaW5nIHdpdGggYSB2YWx1ZSBvZiBgZmFsc2VgLlxuICAgKi9cbiAgYWRkQWxsTWlzc2luZ1NldmVyaXR5VHlwZXMoc2V2ZXJpdHk6IFNldmVyaXR5RmlsdGVyKTogU2V2ZXJpdHlGaWx0ZXIge1xuICAgIE9iamVjdC5rZXlzKFNFVkVSSVRZX0xBQkVMUykuZm9yRWFjaChzZXZlcml0eVR5cGUgPT4ge1xuICAgICAgaWYgKCEoc2V2ZXJpdHlUeXBlIGluIHNldmVyaXR5KSkge1xuICAgICAgICBzZXZlcml0eVtzZXZlcml0eVR5cGVdID0gZmFsc2U7XG4gICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIHNldmVyaXR5O1xuICB9XG5cbiAgLyoqXG4gICAqIE1hcHMgYW4gQWxhcm1MaXN0V2lkZ2V0Q29uZmlnIG9iamVjdCB0byBhbiBBbGFybVF1ZXJ5RmlsdGVyLlxuICAgKlxuICAgKiBUaGlzIGZ1bmN0aW9uIGNvbnZlcnRzIHRoZSBwcm92aWRlZCBBbGFybUxpc3RXaWRnZXRDb25maWcgaW50byBhIGZvcm1hdCBzdWl0YWJsZSBmb3IgcXVlcnlpbmcgYWxhcm1zLlxuICAgKlxuICAgKiBAcGFyYW0gY29uZmlnIC0gVGhlIGNvbmZpZ3VyYXRpb24gb2JqZWN0IGZvciB0aGUgYWxhcm0gbGlzdCB3aWRnZXQuXG4gICAqIEBwYXJhbSBwYWdlU2l6ZSAtIE9wdGlvbmFsIG51bWJlciBzcGVjaWZ5aW5nIHRoZSBzaXplIG9mIHRoZSBwYWdlcyB0byBiZSByZXR1cm5lZCBpbiB0aGUgcXVlcnkuXG4gICAqIEByZXR1cm5zIC0gVGhlIHF1ZXJ5IGZpbHRlciBvYmplY3QgY29uc3RydWN0ZWQgZnJvbSB0aGUgcHJvdmlkZWQgY29uZmlndXJhdGlvbi5cbiAgICovXG4gIG1hcENvbmZpZ1RvUXVlcnlGaWx0ZXIoY29uZmlnOiBBbGFybUxpc3RXaWRnZXRDb25maWcsIHBhZ2VTaXplPzogbnVtYmVyKTogQWxhcm1RdWVyeUZpbHRlciB7XG4gICAgY29uc3QgZmlsdGVyOiBBbGFybVF1ZXJ5RmlsdGVyID0ge1xuICAgICAgcGFnZVNpemU6IHBhZ2VTaXplIHx8IERFRkFVTFRfUEFHRV9TSVpFLFxuICAgICAgcXVlcnk6IHRoaXMuZ2V0T3JkZXJQYXJhbWV0ZXJzKGNvbmZpZy5vcmRlciksXG4gICAgICBzZXZlcml0eTogdGhpcy5leHRyYWN0RmlsdGVyUGFyYW1zKGNvbmZpZy5zZXZlcml0aWVzIHx8IHt9KSxcbiAgICAgIHN0YXR1czogdGhpcy5leHRyYWN0RmlsdGVyUGFyYW1zKGNvbmZpZy5zdGF0dXMgfHwge30pLFxuICAgICAgdHlwZTogKGNvbmZpZy50eXBlcyB8fCBbXSkuam9pbignLCcpLFxuICAgICAgd2l0aFRvdGFsUGFnZXM6IHRydWVcbiAgICB9O1xuICAgIGlmIChjb25maWcuZGF0ZUZpbHRlcikge1xuICAgICAgZmlsdGVyLmxhc3RVcGRhdGVkRnJvbSA9XG4gICAgICAgIHR5cGVvZiBjb25maWcuZGF0ZUZpbHRlclswXSA9PT0gJ3N0cmluZydcbiAgICAgICAgICA/IGNvbmZpZy5kYXRlRmlsdGVyWzBdXG4gICAgICAgICAgOiBjb25maWcuZGF0ZUZpbHRlclswXS50b0lTT1N0cmluZygpO1xuICAgICAgZmlsdGVyLmNyZWF0ZWRUbyA9XG4gICAgICAgIHR5cGVvZiBjb25maWcuZGF0ZUZpbHRlclsxXSA9PT0gJ3N0cmluZydcbiAgICAgICAgICA/IGNvbmZpZy5kYXRlRmlsdGVyWzFdXG4gICAgICAgICAgOiBjb25maWcuZGF0ZUZpbHRlclsxXS50b0lTT1N0cmluZygpO1xuICAgIH1cbiAgICBpZiAoY29uZmlnLmRldmljZSkge1xuICAgICAgZmlsdGVyLnNvdXJjZSA9IGNvbmZpZy5kZXZpY2UuaWQ7XG4gICAgICBmaWx0ZXIud2l0aFNvdXJjZUFzc2V0cyA9IHRydWU7XG4gICAgICBmaWx0ZXIud2l0aFNvdXJjZURldmljZXMgPSB0cnVlO1xuICAgICAgZmlsdGVyLndpdGhTb3VyY2VBc3NldHMgPSBjb25maWcuc2hvd0FsYXJtc0ZvckNoaWxkcmVuID8/IHRydWU7XG4gICAgICBmaWx0ZXIud2l0aFNvdXJjZURldmljZXMgPSBjb25maWcuc2hvd0FsYXJtc0ZvckNoaWxkcmVuID8/IHRydWU7XG4gICAgfVxuICAgIHJldHVybiBmaWx0ZXI7XG4gIH1cblxuICAvKipcbiAgICogRXh0cmFjdHMgYW5kIGNvbmNhdGVuYXRlcyBmaWx0ZXIgcGFyYW1ldGVycyBmcm9tIGEgZ2l2ZW4gb2JqZWN0LlxuICAgKlxuICAgKiBUaGlzIGZ1bmN0aW9uIHRha2VzIGFuIG9iamVjdCBjb250YWluaW5nIGZpbHRlciBzZXR0aW5ncyAoZWl0aGVyIFNldmVyaXR5RmlsdGVyXG4gICAqIG9yIEFsYXJtU3RhdHVzU2V0dGluZ3MpIGFuZCByZXR1cm5zIGEgc3RyaW5nIG9mIGFsbCBrZXlzIHdoZXJlIHRoZSBjb3JyZXNwb25kaW5nIHZhbHVlIGlzIHRydWUuXG4gICAqIElmIHRoZSBvYmplY3QgaXMgZW1wdHkgb3IgbnVsbCwgYW4gZW1wdHkgc3RyaW5nIGlzIHJldHVybmVkLlxuICAgKlxuICAgKiBAcGFyYW0gb2JqIC0gVGhlIG9iamVjdCBjb250YWluaW5nIGZpbHRlciBzZXR0aW5ncy5cbiAgICogQHJldHVybnMgLSBBIGNvbmNhdGVuYXRlZCBzdHJpbmcgb2Yga2V5cyB3aXRoIHRydWUgdmFsdWVzLCBzZXBhcmF0ZWQgYnkgY29tbWFzLlxuICAgKi9cbiAgZXh0cmFjdEZpbHRlclBhcmFtcyhvYmo6IFNldmVyaXR5RmlsdGVyIHwgQWxhcm1TdGF0dXNTZXR0aW5ncyk6IHN0cmluZyB7XG4gICAgaWYgKCFvYmopIHtcbiAgICAgIHJldHVybiAnJztcbiAgICB9XG4gICAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKG9iailcbiAgICAgIC5maWx0ZXIoKFssIHZhbHVlXSkgPT4gdmFsdWUpXG4gICAgICAubWFwKChba2V5XSkgPT4ga2V5KVxuICAgICAgLmpvaW4oJywnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEZXRlcm1pbmVzIGlmIGFuIGluY29taW5nIHJlYWwtdGltZSBhbGFybSBoYXMgYSBkaWZmZXJlbnQgc3RhdHVzIHRoYW4gYW4gZXhpc3RpbmcgYWxhcm0uXG4gICAqXG4gICAqIFRoaXMgZnVuY3Rpb24gY2hlY2tzIGlmIHRoZSBwcm92aWRlZCBpbmNvbWluZyByZWFsLXRpbWUgYWxhcm0ncyBzdGF0dXMgZGlmZmVyc1xuICAgKiBmcm9tIHRoYXQgb2YgYW4gZXhpc3RpbmcgYWxhcm0gd2l0aCB0aGUgc2FtZSBJRCBpbiB0aGUgZ2l2ZW4gYXJyYXkgb2YgYWxhcm1zLlxuICAgKlxuICAgKiBAcGFyYW0gZXhpc3RpbmdBbGFybXMgLSBUaGUgYXJyYXkgb2YgZXhpc3RpbmcgYWxhcm1zLlxuICAgKiBAcGFyYW0gaW5jb21pbmdSZWFsdGltZUFsYXJtIC0gVGhlIGluY29taW5nIHJlYWwtdGltZSBhbGFybSB0byBjaGVjay5cbiAgICogQHJldHVybnMgLSBUcnVlIGlmIHRoZSBleGlzdGluZyBhbGFybSdzIHN0YXR1cyBoYXMgY2hhbmdlZCwgb3RoZXJ3aXNlIGZhbHNlLlxuICAgKi9cbiAgaGFzRXhpc3RpbmdBbGFybUNoYW5nZWRTdGF0dXMoZXhpc3RpbmdBbGFybXM6IElBbGFybVtdLCBpbmNvbWluZ1JlYWx0aW1lQWxhcm06IElBbGFybSk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IGV4aXN0aW5nQWxhcm0gPSBleGlzdGluZ0FsYXJtcy5maW5kKGFsYXJtID0+IGFsYXJtLmlkID09PSBpbmNvbWluZ1JlYWx0aW1lQWxhcm0uaWQpO1xuICAgIHJldHVybiAhIWV4aXN0aW5nQWxhcm0gJiYgZXhpc3RpbmdBbGFybS5zdGF0dXMgIT09IGluY29taW5nUmVhbHRpbWVBbGFybS5zdGF0dXM7XG4gIH1cblxuICAvKipcbiAgICogRmlsdGVycyBhbGFybXMgYmFzZWQgb24gdGhlaXIgc3RhdHVzLCBzZXZlcml0eSwgYW5kIHR5cGUuXG4gICAqXG4gICAqIFRoaXMgbWV0aG9kIGRldGVybWluZXMgaWYgYSBnaXZlbiBhbGFybSwgaWRlbnRpZmllZCBlaXRoZXIgYnkgYSBudW1lcmljIElEIG9yIGFuIGBJQWxhcm1gIG9iamVjdCxcbiAgICogbWF0Y2hlcyBzcGVjaWZpYyBjcml0ZXJpYSBkZWZpbmVkIGluIGBhbGFybXNgIGFuZCBvcHRpb25hbGx5IGBjb25maWdgLlxuICAgKlxuICAgKiBAcGFyYW0gYWxhcm0gLSBUaGUgYWxhcm0gdG8gY2hlY2ssIHJlcHJlc2VudGVkIGVpdGhlciBieSBhIG51bWVyaWMgSUQgb3IgYW4gYElBbGFybWAgb2JqZWN0LlxuICAgKiBAcGFyYW0gYWxhcm1zIC0gQW4gYXJyYXkgb2YgYElBbGFybWAgb2JqZWN0cyBhZ2FpbnN0IHdoaWNoIHRoZSBnaXZlbiBhbGFybSBpcyBldmFsdWF0ZWQuXG4gICAqIEBwYXJhbSBjb25maWcgLSBPcHRpb25hbC4gQ29uZmlndXJhdGlvbiBmb3IgdGhlIGFsYXJtIGxpc3Qgd2lkZ2V0LCB1c2VkIHRvIGRlZmluZSBhZGRpdGlvbmFsXG4gICAqICAgICAgICAgICAgICAgICBmaWx0ZXJpbmcgY3JpdGVyaWEuXG4gICAqXG4gICAqIEByZXR1cm5zIGB0cnVlYCBpZiB0aGUgYWxhcm0gbWF0Y2hlcyB0aGUgc3BlY2lmaWVkIGNyaXRlcmlhOyBvdGhlcndpc2UsIGBmYWxzZWAuXG4gICAqICAgICAgICAgIElmIGBhbGFybWAgaXMgYSBudW1iZXIsIGl0IGFsd2F5cyByZXR1cm5zIGBmYWxzZWAuXG4gICAqICAgICAgICAgIElmIGBjb25maWdgIGlzIG5vdCBwcm92aWRlZCwgaXQgdXNlcyBhIGxlZ2FjeSBmaWx0ZXIgZm9yIGNyaXRpY2FsIGFsYXJtcy5cbiAgICpcbiAgICogQHJlbWFya3NcbiAgICogLSBXaGVuIGBhbGFybWAgaXMgYSBudW1lcmljIElELCB0aGUgZnVuY3Rpb24gcmV0dXJucyBgZmFsc2VgIGFzIGl0IGNhbm5vdCBtYXRjaCBhZ2FpbnN0IHR5cGUgYW5kIHNldmVyaXR5LlxuICAgKiAtIElmIGBjb25maWdgIGlzIG5vdCBwcm92aWRlZCwgdGhlIGZ1bmN0aW9uIGFzc3VtZXMgYSBsZWdhY3kgc2NlbmFyaW8gZm9yIGZpbHRlcmluZyBhbGwgY3JpdGljYWwgYWxhcm1zLlxuICAgKi9cbiAgZmlsdGVyQWxhcm1zQnlTdGF0dXNTZXZlcml0eUFuZFR5cGUoXG4gICAgYWxhcm06IG51bWJlciB8IElBbGFybSxcbiAgICBhbGFybXM6IElBbGFybVtdLFxuICAgIGNvbmZpZz86IEFsYXJtTGlzdFdpZGdldENvbmZpZ1xuICApOiBib29sZWFuIHtcbiAgICBpZiAodHlwZW9mIGFsYXJtID09PSAnbnVtYmVyJykge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLmlzQWxhcm1NYXRjaGVkQnlDb25maWcoYWxhcm0sIGFsYXJtcywgY29uZmlnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEZXRlcm1pbmVzIGlmIGFsbCB2YWx1ZXMgaW4gdGhlIGdpdmVuIG9iamVjdCBhcmUgZmFsc2UuXG4gICAqXG4gICAqIFRoaXMgZnVuY3Rpb24gY2hlY2tzIGV2ZXJ5IHZhbHVlIGluIHRoZSBwcm92aWRlZCBvYmplY3QgdG8gc2VlIGlmIHRoZXkgYXJlIGFsbCBmYWxzZS5cbiAgICpcbiAgICogQHBhcmFtIG9iaiAtIEFuIG9iamVjdCB3aXRoIGJvb2xlYW4gdmFsdWVzLlxuICAgKiBAcmV0dXJucyAtIFJldHVybnMgYHRydWVgIGlmIGFsbCB2YWx1ZXMgaW4gdGhlIG9iamVjdCBhcmUgZmFsc2UsIG90aGVyd2lzZSBgZmFsc2VgLlxuICAgKi9cbiAgYWxsVmFsdWVzRmFsc2Uob2JqOiB7IFtrZXk6IHN0cmluZ106IGJvb2xlYW4gfSk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBPYmplY3QudmFsdWVzKG9iaikuZXZlcnkodmFsdWUgPT4gIXZhbHVlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDb25zdHJ1Y3RzIGEgc3RyaW5nIG9mIG9yZGVyIHBhcmFtZXRlcnMgZm9yIGEgcXVlcnkgYmFzZWQgb24gdGhlIHNwZWNpZmllZCBhbGFybSBvcmRlci5cbiAgICpcbiAgICogVGhpcyBmdW5jdGlvbiB0YWtlcyBhbiBhbGFybSBvcmRlciBhbmQgbWFwcyBpdCB0byBhIGNvcnJlc3BvbmRpbmcgc2V0IG9mIG9yZGVyIHBhcmFtZXRlcnMuXG4gICAqIEl0IHN1cHBvcnRzIGRpZmZlcmVudCBvcmRlcmluZyB0eXBlcywgc3VjaCBhcyBCWV9BQ1RJVkUsIEJZX1NFVkVSSVRZLCBhbmQgQllfREFURV9BU0NFTkRJTkcuXG4gICAqIFRoZSBvcmRlciBwYXJhbWV0ZXJzIGFyZSB1c2VkIHRvIGNvbnN0cnVjdCBhIHF1ZXJ5IHN0cmluZyB0aGF0IGRldGVybWluZXMgdGhlIG9yZGVyXG4gICAqIGluIHdoaWNoIGFsYXJtcyBhcmUgcmV0cmlldmVkIG9yIGRpc3BsYXllZC5cbiAgICpcbiAgICogQHBhcmFtIG9yZGVyIC0gVGhlIHNwZWNpZmllZCBvcmRlciBmb3Igc29ydGluZyBhbGFybXMgKGUuZy4sIEJZX0FDVElWRSkuXG4gICAqIEByZXR1cm5zIC0gQSBzdHJpbmcgb2Ygb3JkZXIgcGFyYW1ldGVycyB0byBiZSB1c2VkIGluIGEgcXVlcnksIG9yIGFuIGVtcHR5IHN0cmluZyBpZiB0aGUgb3JkZXIgdHlwZSBpcyB1bnJlY29nbml6ZWQuXG4gICAqL1xuICBnZXRPcmRlclBhcmFtZXRlcnMob3JkZXI6IEFsYXJtT3JkZXJUeXBlKTogc3RyaW5nIHtcbiAgICBsZXQgb3JkZXJQYXJhbXM6IHN0cmluZ1tdO1xuXG4gICAgc3dpdGNoIChvcmRlcikge1xuICAgICAgY2FzZSBBTEFSTV9PUkRFUl9WQUxVRVMuQllfQUNUSVZFOlxuICAgICAgICBvcmRlclBhcmFtcyA9IFsnc3RhdHVzIGFzYycsICdzZXZlcml0eSBhc2MnLCAndGltZS5kYXRlIGRlc2MnLCAndGV4dCBhc2MnXTtcbiAgICAgICAgcmV0dXJuIHRoaXMuYnVpbGRPcmRlclBhcmFtZXRlcnMob3JkZXJQYXJhbXMpO1xuICAgICAgY2FzZSBBTEFSTV9PUkRFUl9WQUxVRVMuQllfU0VWRVJJVFk6XG4gICAgICAgIG9yZGVyUGFyYW1zID0gWydzZXZlcml0eSBhc2MnLCAndGltZS5kYXRlIGRlc2MnLCAndGV4dCBhc2MnXTtcbiAgICAgICAgcmV0dXJuIHRoaXMuYnVpbGRPcmRlclBhcmFtZXRlcnMob3JkZXJQYXJhbXMpO1xuICAgICAgY2FzZSBBTEFSTV9PUkRFUl9WQUxVRVMuQllfREFURV9BU0NFTkRJTkc6XG4gICAgICAgIG9yZGVyUGFyYW1zID0gWyd0aW1lLmRhdGUgYXNjJywgJ3RleHQgYXNjJ107XG4gICAgICAgIHJldHVybiB0aGlzLmJ1aWxkT3JkZXJQYXJhbWV0ZXJzKG9yZGVyUGFyYW1zKTtcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIG9yZGVyUGFyYW1zID0gWyd0aW1lLmRhdGUgZGVzYycsICd0ZXh0IGFzYyddO1xuICAgICAgICByZXR1cm4gdGhpcy5idWlsZE9yZGVyUGFyYW1ldGVycyhvcmRlclBhcmFtcyk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIERldGVybWluZXMgaWYgYW4gYWxhcm0gaXMgbWF0Y2hlZCBieSB0aGUgc3BlY2lmaWVkIHdpZGdldCBjb25maWd1cmF0aW9uLlxuICAgKlxuICAgKiBUaGlzIGZ1bmN0aW9uIGV2YWx1YXRlcyB3aGV0aGVyIGEgZ2l2ZW4gYWxhcm0gc2hvdWxkIGJlIGluY2x1ZGVkIGJhc2VkIG9uIHRoZSBzZXZlcml0eSxcbiAgICogc3RhdHVzLCBhbmQgdHlwZSBmaWx0ZXJzIGRlZmluZWQgaW4gdGhlIEFsYXJtTGlzdFdpZGdldENvbmZpZy4gSXQgY2hlY2tzIGlmIHRoZSBhbGFybSdzXG4gICAqIHNldmVyaXR5IGFuZCBzdGF0dXMgbWF0Y2ggdGhlIGNvbmZpZ3VyYXRpb24gc2V0dGluZ3MgYW5kIGlmIHRoZSBhbGFybSdzIHR5cGUgaXMgaW5jbHVkZWRcbiAgICogaW4gdGhlIGNvbmZpZ3VyYXRpb24ncyB0eXBlcyAoaWYgc3BlY2lmaWVkKS5cbiAgICpcbiAgICogQGlnbm9yZVxuICAgKiBAcGFyYW0gYWxhcm0gLSBUaGUgYWxhcm0gdG8gZXZhbHVhdGUuXG4gICAqIEBwYXJhbSBhbGFybXMgLSBBbiBhcnJheSBvZiBleGlzdGluZyBhbGFybXMsIHVzZWQgZm9yIHN0YXR1cyBtYXRjaGluZy5cbiAgICogQHBhcmFtIGNvbmZpZyAtIFRoZSBjb25maWd1cmF0aW9uIHNldHRpbmdzIHRvIG1hdGNoIGFnYWluc3QuXG4gICAqIEByZXR1cm5zIC0gUmV0dXJucyBgdHJ1ZWAgaWYgdGhlIGFsYXJtIG1hdGNoZXMgdGhlIGNvbmZpZ3VyYXRpb24gY3JpdGVyaWE7IG90aGVyd2lzZSwgYGZhbHNlYC5cbiAgICovXG4gIGlzQWxhcm1NYXRjaGVkQnlDb25maWcoYWxhcm06IElBbGFybSwgYWxhcm1zOiBJQWxhcm1bXSwgY29uZmlnOiBBbGFybUxpc3RXaWRnZXRDb25maWcpOiBib29sZWFuIHtcbiAgICBjb25zdCBpc1NldmVyaXR5TWF0Y2hlZCA9IHRoaXMuaXNTZXZlcml0eU1hdGNoaW5nKGFsYXJtLnNldmVyaXR5LCBjb25maWcpO1xuICAgIGNvbnN0IGlzU3RhdHVzTWF0Y2hlZCA9IHRoaXMuaXNTdGF0dXNNYXRjaGluZyhhbGFybSwgYWxhcm1zLCBjb25maWcpO1xuICAgIGNvbnN0IGlzVHlwZU1hdGNoZWQgPSB0aGlzLmlzVHlwZXNNYXRjaGluZyhjb25maWcsIGFsYXJtKTtcblxuICAgIHJldHVybiBpc1NldmVyaXR5TWF0Y2hlZCAmJiBpc1N0YXR1c01hdGNoZWQgJiYgaXNUeXBlTWF0Y2hlZDtcbiAgfVxuICAvKipcbiAgICogQ2hlY2tzIGlmIHRoZSBzZXZlcml0eSBvZiBhbiBhbGFybSBtYXRjaGVzIHRoZSBjb25maWd1cmF0aW9uIHNldHRpbmcuXG4gICAqXG4gICAqIFRoaXMgZnVuY3Rpb24gZGV0ZXJtaW5lcyB3aGV0aGVyIHRoZSBzZXZlcml0eSBvZiBhbiBhbGFybSBpcyBpbmNsdWRlZCBpbiB0aGVcbiAgICogc2V2ZXJpdHkgc2V0dGluZ3MgZGVmaW5lZCBpbiB0aGUgQWxhcm1MaXN0V2lkZ2V0Q29uZmlnLlxuICAgKlxuICAgKiBAaWdub3JlXG4gICAqIEBwYXJhbSBzZXZlcml0eSAtIFRoZSBzZXZlcml0eSBvZiB0aGUgYWxhcm0gdG8gY2hlY2suXG4gICAqIEBwYXJhbSBjb25maWcgLSBUaGUgY29uZmlndXJhdGlvbiB3aXRoIHNldmVyaXR5IHNldHRpbmdzLlxuICAgKiBAcmV0dXJucyAtIFJldHVybnMgYHRydWVgIGlmIHRoZSBhbGFybSdzIHNldmVyaXR5IG1hdGNoZXMgdGhlIGNvbmZpZ3VyYXRpb247IG90aGVyd2lzZSwgYGZhbHNlYC5cbiAgICovXG4gIGlzU2V2ZXJpdHlNYXRjaGluZyhzZXZlcml0eTogU2V2ZXJpdHlUeXBlLCBjb25maWc6IEFsYXJtTGlzdFdpZGdldENvbmZpZyk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAhIWNvbmZpZy5zZXZlcml0aWVzW3NldmVyaXR5XTtcbiAgfVxuXG4gIC8qKlxuICAgKiBFdmFsdWF0ZXMgaWYgdGhlIHN0YXR1cyBvZiBhbiBhbGFybSBtYXRjaGVzIHRoZSBjb25maWd1cmF0aW9uIHNldHRpbmcgb3IgaGFzIGNoYW5nZWQuXG4gICAqXG4gICAqIFRoaXMgZnVuY3Rpb24gY2hlY2tzIGlmIHRoZSBzdGF0dXMgb2YgYW4gYWxhcm0gaXMgaW5jbHVkZWQgaW4gdGhlIHN0YXR1cyBzZXR0aW5ncyBkZWZpbmVkIGluXG4gICAqIHRoZSBBbGFybUxpc3RXaWRnZXRDb25maWcsIG9yIGlmIHRoZSBhbGFybSdzIHN0YXR1cyBoYXMgY2hhbmdlZCBiYXNlZCBvbiB0aGUgZXhpc3RpbmcgYWxhcm1zLlxuICAgKlxuICAgKiBAaWdub3JlXG4gICAqIEBwYXJhbSBhbGFybSAtIFRoZSBhbGFybSB3aG9zZSBzdGF0dXMgaXMgdG8gYmUgZXZhbHVhdGVkLlxuICAgKiBAcGFyYW0gYWxhcm1zIC0gQW4gYXJyYXkgb2YgZXhpc3RpbmcgYWxhcm1zIHRvIGNvbXBhcmUgYWdhaW5zdCBmb3Igc3RhdHVzIGNoYW5nZXMuXG4gICAqIEBwYXJhbSBjb25maWcgLSBUaGUgY29uZmlndXJhdGlvbiB3aXRoIHN0YXR1cyBzZXR0aW5ncy5cbiAgICogQHJldHVybnMgLSBSZXR1cm5zIGB0cnVlYCBpZiB0aGUgYWxhcm0ncyBzdGF0dXMgbWF0Y2hlcyBvciBoYXMgY2hhbmdlZCBhcyBwZXIgdGhlIGNvbmZpZ3VyYXRpb247IG90aGVyd2lzZSwgYGZhbHNlYC5cbiAgICovXG4gIGlzU3RhdHVzTWF0Y2hpbmcoYWxhcm06IElBbGFybSwgYWxhcm1zOiBJQWxhcm1bXSwgY29uZmlnOiBBbGFybUxpc3RXaWRnZXRDb25maWcpOiBib29sZWFuIHtcbiAgICByZXR1cm4gISFjb25maWcuc3RhdHVzW2FsYXJtLnN0YXR1c10gfHwgdGhpcy5oYXNFeGlzdGluZ0FsYXJtQ2hhbmdlZFN0YXR1cyhhbGFybXMsIGFsYXJtKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVja3MgaWYgdGhlIGNvbmZpZ3VyYXRpb24ncyB0eXBlcyBhcnJheSBjb250YWlucyBvbmx5IGVtcHR5IHN0cmluZyBvciBpbmNsdWRlcyBhIHNwZWNpZmljIGFsYXJtIHR5cGUuXG4gICAqXG4gICAqIEBwYXJhbSBjb25maWcgLSBUaGUgY29uZmlndXJhdGlvbiBvYmplY3Qgd2l0aCBhIGB0eXBlc2AgcHJvcGVydHkuXG4gICAqIEBwYXJhbSBhbGFybSAtIFRoZSBhbGFybSBvYmplY3Qgd2l0aCBhIGB0eXBlYCBwcm9wZXJ0eSB0byBjaGVjayBhZ2FpbnN0IHRoZSBjb25maWcncyB0eXBlcy5cbiAgICogQHJldHVybnMgYHRydWVgIGlmIHRoZSBjb25maWcncyB0eXBlcyBhcnJheSBjb250YWlucyBvbmx5IGVtcHR5IHN0cmluZyBvciBpbmNsdWRlcyB0aGUgYWxhcm0ncyB0eXBlLCBvdGhlcndpc2UgYGZhbHNlYC5cbiAgICovXG4gIGlzVHlwZXNNYXRjaGluZyhjb25maWc6IEFsYXJtTGlzdFdpZGdldENvbmZpZywgYWxhcm06IElBbGFybSk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBBcnJheS5pc0FycmF5KGNvbmZpZy50eXBlcykgJiYgY29uZmlnLnR5cGVzLmxlbmd0aCA9PT0gMSAmJiBjb25maWcudHlwZXNbMF0gPT09ICcnXG4gICAgICA/IHRydWVcbiAgICAgIDogY29uZmlnLnR5cGVzPy5pbmNsdWRlcyhhbGFybS50eXBlKSA/PyBmYWxzZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDb25zdHJ1Y3RzIGEgcXVlcnkgc3RyaW5nIGZyb20gYW4gYXJyYXkgb2Ygb3JkZXIgcGFyYW1ldGVycy5cbiAgICpcbiAgICogVGhpcyBmdW5jdGlvbiB0YWtlcyBhbiBhcnJheSBvZiBvcmRlcmluZyBwYXJhbWV0ZXJzIGFuZCBjb25zdHJ1Y3RzIGEgcXVlcnkgc3RyaW5nXG4gICAqIGZvciB1c2UgaW4gYWxhcm0gb3JkZXJpbmcgcXVlcmllcy4gVGhlIHBhcmFtZXRlcnMgYXJlIGNvbmNhdGVuYXRlZCBpbnRvIGEgc2luZ2xlIHN0cmluZyxcbiAgICogcHJlZml4ZWQgd2l0aCAnJG9yZGVyYnk9Jy5cbiAgICpcbiAgICogQGlnbm9yZVxuICAgKiBAcHJpdmF0ZVxuICAgKiBAcGFyYW0gb3JkZXJQYXJhbXMgLSBUaGUgb3JkZXIgcGFyYW1ldGVycyB0byBiZSBpbmNsdWRlZCBpbiB0aGUgcXVlcnkuXG4gICAqIEByZXR1cm5zIC0gQSBxdWVyeSBzdHJpbmcgcmVwcmVzZW50aW5nIHRoZSBvcmRlciBwYXJhbWV0ZXJzLlxuICAgKi9cbiAgcHJpdmF0ZSBidWlsZE9yZGVyUGFyYW1ldGVycyhvcmRlclBhcmFtczogc3RyaW5nW10pOiBzdHJpbmcge1xuICAgIHJldHVybiBgJG9yZGVyYnk9JHtvcmRlclBhcmFtcy5qb2luKCcsJyl9YDtcbiAgfVxufVxuIl19