@c8y/ngx-components 1021.55.1 → 1021.55.3
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.
- package/core/common/interval-based-reload.abstract.d.ts +13 -3
- package/core/common/interval-based-reload.abstract.d.ts.map +1 -1
- package/core/dashboard/widget-auto-refresh-context/auto-refresh-control.component.d.ts +3 -4
- package/core/dashboard/widget-auto-refresh-context/auto-refresh-control.component.d.ts.map +1 -1
- package/core/dashboard/widget-auto-refresh-context/widget-auto-refresh-context.component.d.ts +1 -0
- package/core/dashboard/widget-auto-refresh-context/widget-auto-refresh-context.component.d.ts.map +1 -1
- package/core/dashboard/widgets-dashboard-event.service.d.ts +7 -0
- package/core/dashboard/widgets-dashboard-event.service.d.ts.map +1 -1
- package/core/dashboard/wiget-time-context/widget-time-context.component.d.ts +6 -2
- package/core/dashboard/wiget-time-context/widget-time-context.component.d.ts.map +1 -1
- package/datapoint-explorer/view/configuration/workspace-configuration.component.d.ts.map +1 -1
- package/datapoints-export-selector/datapoints-export-selector-modal/datapoints-export-selector-file-exporter/data-fetching.service.d.ts.map +1 -1
- package/datapoints-export-selector/datapoints-export-selector.component.d.ts +3 -1
- package/datapoints-export-selector/datapoints-export-selector.component.d.ts.map +1 -1
- package/echart/charts.component.d.ts.map +1 -1
- package/esm2022/core/aggregation/aggregation.model.mjs +2 -2
- package/esm2022/core/common/interval-based-reload.abstract.mjs +13 -13
- package/esm2022/core/dashboard/dashboard-child.component.mjs +3 -3
- package/esm2022/core/dashboard/widget-auto-refresh-context/auto-refresh-control.component.mjs +6 -8
- package/esm2022/core/dashboard/widget-auto-refresh-context/widget-auto-refresh-context.component.mjs +9 -1
- package/esm2022/core/dashboard/widgets-dashboard-event.service.mjs +19 -2
- package/esm2022/core/dashboard/widgets-dashboard.component.mjs +3 -3
- package/esm2022/core/dashboard/wiget-time-context/widget-time-context-icon-bar/widget-time-context-icon-bar.component.mjs +3 -3
- package/esm2022/core/dashboard/wiget-time-context/widget-time-context.component.mjs +48 -23
- package/esm2022/datapoint-explorer/view/configuration/workspace-configuration.component.mjs +13 -8
- package/esm2022/datapoint-explorer/view/datapoint-explorer.component.mjs +2 -2
- package/esm2022/datapoints-export-selector/datapoints-export-selector-modal/datapoints-export-selector-file-exporter/data-fetching.service.mjs +1 -3
- package/esm2022/datapoints-export-selector/datapoints-export-selector.component.mjs +9 -5
- package/esm2022/echart/charts.component.mjs +22 -84
- package/esm2022/widgets/definitions/datapoints-table/index.mjs +3 -2
- package/esm2022/widgets/implementations/alarms/alarm-list-widget-view/alarm-list-widget.component.mjs +3 -3
- package/esm2022/widgets/implementations/alarms/alarm-widget-alarms-reload.component.mjs +17 -100
- package/esm2022/widgets/implementations/datapoints-table/datapoints-table-config/datapoints-table-config.component.mjs +47 -34
- package/esm2022/widgets/implementations/datapoints-table/datapoints-table-view/datapoints-reload/datapoints-reload.component.mjs +35 -13
- package/esm2022/widgets/implementations/datapoints-table/datapoints-table-view/datapoints-table/datapoints-table.component.mjs +3 -3
- package/esm2022/widgets/implementations/datapoints-table/datapoints-table-view/datapoints-table-view.component.mjs +75 -35
- package/esm2022/widgets/implementations/datapoints-table/datapoints-table-widget.model.mjs +3 -5
- package/fesm2022/c8y-ngx-components-datapoint-explorer-view.mjs +13 -8
- package/fesm2022/c8y-ngx-components-datapoint-explorer-view.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-datapoints-export-selector.mjs +7 -6
- package/fesm2022/c8y-ngx-components-datapoints-export-selector.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-echart.mjs +21 -83
- package/fesm2022/c8y-ngx-components-echart.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-widgets-definitions-datapoints-table.mjs +2 -1
- package/fesm2022/c8y-ngx-components-widgets-definitions-datapoints-table.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-widgets-implementations-alarms.mjs +18 -101
- package/fesm2022/c8y-ngx-components-widgets-implementations-alarms.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-widgets-implementations-datapoints-table.mjs +147 -76
- package/fesm2022/c8y-ngx-components-widgets-implementations-datapoints-table.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components.mjs +209 -162
- package/fesm2022/c8y-ngx-components.mjs.map +1 -1
- package/locales/locales.pot +3 -7
- package/package.json +1 -1
- package/widgets/definitions/datapoints-table/index.d.ts.map +1 -1
- package/widgets/implementations/alarms/alarm-widget-alarms-reload.component.d.ts +18 -63
- package/widgets/implementations/alarms/alarm-widget-alarms-reload.component.d.ts.map +1 -1
- package/widgets/implementations/datapoints-table/datapoints-table-config/datapoints-table-config.component.d.ts +4 -2
- package/widgets/implementations/datapoints-table/datapoints-table-config/datapoints-table-config.component.d.ts.map +1 -1
- package/widgets/implementations/datapoints-table/datapoints-table-view/datapoints-reload/datapoints-reload.component.d.ts +16 -8
- package/widgets/implementations/datapoints-table/datapoints-table-view/datapoints-reload/datapoints-reload.component.d.ts.map +1 -1
- package/widgets/implementations/datapoints-table/datapoints-table-view/datapoints-table-view.component.d.ts +21 -4
- package/widgets/implementations/datapoints-table/datapoints-table-view/datapoints-table-view.component.d.ts.map +1 -1
- package/widgets/implementations/datapoints-table/datapoints-table-widget.model.d.ts +4 -1
- package/widgets/implementations/datapoints-table/datapoints-table-widget.model.d.ts.map +1 -1
|
@@ -226,15 +226,15 @@ export class AlarmListWidgetComponent {
|
|
|
226
226
|
.subscribe();
|
|
227
227
|
}
|
|
228
228
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", 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 }); }
|
|
229
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", 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 [
|
|
229
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", 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 [isRefreshDisabled]=\"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", "isRefreshDisabled"], outputs: ["onCountdownEnded", "onRealTimeToggleChanged"] }, { kind: "pipe", type: i5.AsyncPipe, name: "async" }] }); }
|
|
230
230
|
}
|
|
231
231
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: AlarmListWidgetComponent, decorators: [{
|
|
232
232
|
type: Component,
|
|
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 [
|
|
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 [isRefreshDisabled]=\"isDisabled\"\n (onCountdownEnded)=\"fetchAlarms()\"\n (onRealTimeToggleChanged)=\"handleRealTimeToggleChange($event)\"\n ></c8y-alarm-widget-alarms-reload>\n</c8y-alarms-list>\n" }]
|
|
234
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: [{
|
|
235
235
|
type: Input
|
|
236
236
|
}], alarmWidgetAlarmsReloadComp: [{
|
|
237
237
|
type: ViewChild,
|
|
238
238
|
args: [AlarmWidgetAlarmsReloadComponent]
|
|
239
239
|
}] } });
|
|
240
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWxhcm0tbGlzdC13aWRnZXQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vd2lkZ2V0cy9pbXBsZW1lbnRhdGlvbnMvYWxhcm1zL2FsYXJtLWxpc3Qtd2lkZ2V0LXZpZXcvYWxhcm0tbGlzdC13aWRnZXQuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vd2lkZ2V0cy9pbXBsZW1lbnRhdGlvbnMvYWxhcm1zL2FsYXJtLWxpc3Qtd2lkZ2V0LXZpZXcvYWxhcm0tbGlzdC13aWRnZXQuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUVMLFNBQVMsRUFDVCxLQUFLLEVBSUwsU0FBUyxFQUNWLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxZQUFZLEVBQWdDLE1BQU0sYUFBYSxDQUFDO0FBQ3pFLE9BQU8sRUFDTCxvQkFBb0IsRUFDcEIsZ0NBQWdDLEVBQ2hDLFlBQVksRUFDWix1QkFBdUIsRUFDdkIsb0JBQW9CLEVBRXBCLHFCQUFxQixFQUVyQixPQUFPLEVBQ1Asd0JBQXdCLEVBQ3hCLDhCQUE4QixFQUMvQixNQUFNLHFCQUFxQixDQUFDO0FBQzdCLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQy9ELE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBQzdDLE9BQU8sRUFBRSxlQUFlLEVBQWMsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQzVELE9BQU8sRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLEdBQUcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3RELE9BQU8sRUFDTCxzQkFBc0IsRUFFdEIsdUJBQXVCLEVBQ3hCLE1BQU0sNEJBQTRCLENBQUM7QUFDcEMsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDN0QsT0FBTyxFQUFFLGdDQUFnQyxF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QztRQUVELElBQUksUUFBUSxLQUFLLHNCQUFzQixFQUFFLENBQUM7WUFDeEMsTUFBTSxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsa0JBQWtCLENBQUMsMEJBQTBCLENBQ3pFLElBQUksQ0FBQyxpQkFBaUIsQ0FDdkIsQ0FBQztZQUNGLE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxnQkFBZ0IsQ0FBQyxDQUFDO1FBQy9DLENBQUM7SUFDSCxDQUFDO0lBRU8sMEJBQTBCO1FBQ2hDLElBQUksQ0FBQyxVQUFVO2FBQ1osSUFBSSxDQUNILElBQUksQ0FBQyxDQUFDLENBQUMsRUFDUCx3QkFBd0IsQ0FBQyxJQUFJLENBQUMsdUJBQXVCLENBQUMsRUFDdEQsU0FBUyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FDekI7YUFDQSxTQUFTLEVBQUUsQ0FBQztJQUNqQixDQUFDOytHQXpTVSx3QkFBd0I7bUdBQXhCLHdCQUF3Qiw4RUFGeEIsQ0FBQyxvQkFBb0IsRUFBRSxnQ0FBZ0MsQ0FBQyx1RkEwQnhELGdDQUFnQyxxRUNwRTdDLDRpQ0ErQkE7OzRGRGFhLHdCQUF3QjtrQkFMcEMsU0FBUzsrQkFDRSx1QkFBdUIsYUFFdEIsQ0FBQyxvQkFBb0IsRUFBRSxnQ0FBZ0MsQ0FBQztrVkFRMUQsTUFBTTtzQkFBZCxLQUFLO2dCQW1CTiwyQkFBMkI7c0JBRDFCLFNBQVM7dUJBQUMsZ0NBQWdDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQWZ0ZXJWaWV3SW5pdCxcbiAgQ29tcG9uZW50LFxuICBJbnB1dCxcbiAgT25EZXN0cm95LFxuICBPbkluaXQsXG4gIFNpbXBsZUNoYW5nZXMsXG4gIFZpZXdDaGlsZFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEFsYXJtU2VydmljZSwgSUFsYXJtLCBJUmVzdWx0LCBJUmVzdWx0TGlzdCB9IGZyb20gJ0BjOHkvY2xpZW50JztcbmltcG9ydCB7XG4gIEFsYXJtUmVhbHRpbWVTZXJ2aWNlLFxuICBBbGFybVdpdGhDaGlsZHJlblJlYWx0aW1lU2VydmljZSxcbiAgQWxlcnRTZXJ2aWNlLFxuICBEYXNoYm9hcmRDaGlsZENvbXBvbmVudCxcbiAgRGlzbWlzc0FsZXJ0U3RyYXRlZ3ksXG4gIER5bmFtaWNDb21wb25lbnQsXG4gIER5bmFtaWNDb21wb25lbnRBbGVydCxcbiAgRHluYW1pY0NvbXBvbmVudEFsZXJ0QWdncmVnYXRvcixcbiAgZ2V0dGV4dCxcbiAgZ2xvYmFsQXV0b1JlZnJlc2hMb2FkaW5nLFxuICBXaWRnZXRHbG9iYWxBdXRvUmVmcmVzaFNlcnZpY2Vcbn0gZnJvbSAnQGM4eS9uZ3gtY29tcG9uZW50cyc7XG5pbXBvcnQgeyBBbGFybXNWaWV3U2VydmljZSB9IGZyb20gJ0BjOHkvbmd4LWNvbXBvbmVudHMvYWxhcm1zJztcbmltcG9ydCB7IGlzRW1wdHksIGlzRXF1YWwgfSBmcm9tICdsb2Rhc2gtZXMnO1xuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBPYnNlcnZhYmxlLCBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBza2lwLCB0YWtlVW50aWwsIHRhcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7XG4gIEFTU0VUX0FMQVJNU19XSURHRVRfSUQsXG4gIEFsYXJtTGlzdFdpZGdldENvbmZpZyxcbiAgUkVDRU5UX0FMQVJNU19XSURHRVRfSURcbn0gZnJvbSAnLi4vYWxhcm0tbGlzdC13aWRnZXQubW9kZWwnO1xuaW1wb3J0IHsgQWxhcm1XaWRnZXRTZXJ2aWNlIH0gZnJvbSAnLi4vYWxhcm0td2lkZ2V0LnNlcnZpY2UnO1xuaW1wb3J0IHsgQWxhcm1XaWRnZXRBbGFybXNSZWxvYWRDb21wb25lbnQgfSBmcm9tICcuLi9hbGFybS13aWRnZXQtYWxhcm1zLXJlbG9hZC5jb21wb25lbnQnO1xuaW1wb3J0IHsgSW50ZXJ2YWwgfSBmcm9tICdAYzh5L25neC1jb21wb25lbnRzL2ludGVydmFsLXBpY2tlcic7XG5cbi8qKlxuICogVG8gZW5zdXJlIGJhY2t3YXJkIGNvbXBhdGliaWxpdHksIGxlZ2FjeSB3aWRnZXRzIHdpbGwgYmUgY29udmVydGVkIHRvIHRoZSBuZXcgaW1wbGVtZW50YXRpb24uXG4gKi9cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2M4eS1hbGFybS1saXN0LXdpZGdldCcsXG4gIHRlbXBsYXRlVXJsOiAnLi9hbGFybS1saXN0LXdpZGdldC5jb21wb25lbnQuaHRtbCcsXG4gIHByb3ZpZGVyczogW0FsYXJtUmVhbHRpbWVTZXJ2aWNlLCBBbGFybVdpdGhDaGlsZHJlblJlYWx0aW1lU2VydmljZV1cbn0pXG5leHBvcnQgY2xhc3MgQWxhcm1MaXN0V2lkZ2V0Q29tcG9uZW50XG4gIGltcGxlbWVudHMgT25Jbml0LCBBZnRlclZpZXdJbml0LCBPbkRlc3Ryb3ksIER5bmFtaWNDb21wb25lbnRcbntcbiAgLyoqXG4gICAqICBBbGFybSB3aWRnZXQgY29uZmlnLlxuICAgKi9cbiAgQElucHV0KCkgY29uZmlnOiBBbGFybUxpc3RXaWRnZXRDb25maWc7XG4gIC8qKlxuICAgKiBSZXByZXNlbnRzIGN1cnJlbnQgYWxhcm1zLlxuICAgKi9cbiAgYWxhcm1zJDogQmVoYXZpb3JTdWJqZWN0PElSZXN1bHRMaXN0PElBbGFybT4gfCBudWxsPiA9IG5ldyBCZWhhdmlvclN1YmplY3QobnVsbCk7XG4gIC8qKlxuICAgKiBDdXJyZW50IGlzTG9hZGluZyBzdGF0ZS4gQmFzZWQgb24gaXQgbmV4dCBjb3VudGRvd24gY3ljbGUgaXMgYmVpbmcgc3RhcnRlZC5cbiAgICovXG4gIGlzTG9hZGluZyQ6IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPiA9IG5ldyBCZWhhdmlvclN1YmplY3QodHJ1ZSk7XG4gIC8qKlxuICAgKiBTdGF0ZSBvZiB0aGlzIGJvb2xlYW4gZGVwZW5kcyBvbiBhbiBBcHBsaWNhdGlvbiBPcHRpb25zIFwiYWxhcm1zUmVmcmVzaFR5cGVcIiBzZXR0aW5nLlxuICAgKi9cbiAgaXNJbnRlcnZhbFJlZnJlc2g6IGJvb2xlYW47XG4gIC8qKlxuICAgKiBDdXJyZW50IHJlZnJlc2ggaW50ZXJ2YWwgc2V0IGluIGEgd2lkZ2V0IGNvbmZpZy5cbiAgICovXG4gIHJlZnJlc2hJbnRlcnZhbDogbnVtYmVyO1xuXG4gIEBWaWV3Q2hpbGQoQWxhcm1XaWRnZXRBbGFybXNSZWxvYWRDb21wb25lbnQpXG4gIGFsYXJtV2lkZ2V0QWxhcm1zUmVsb2FkQ29tcDogQWxhcm1XaWRnZXRBbGFybXNSZWxvYWRDb21wb25lbnQ7XG4gIGFsZXJ0czogRHluYW1pY0NvbXBvbmVudEFsZXJ0QWdncmVnYXRvcjtcblxuICBwcml2YXRlIFRJTUVPVVRfRVJST1JfVEVYVCA9IGdldHRleHQoXG4gICAgJ1RoZSByZXF1ZXN0IGlzIHRha2luZyBsb25nZXIgdGhhbiB1c3VhbC4gV2UgYXBvbG9naXplIGZvciB0aGUgaW5jb252ZW5pZW5jZS4nXG4gICk7XG4gIHByaXZhdGUgU0VSVkVSX0VSUk9SX1RFWFQgPSBnZXR0ZXh0KCdTZXJ2ZXIgZXJyb3Igb2NjdXJyZWQuJyk7XG4gIHByaXZhdGUgdW5zdWJzY3JpYmUkID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcbiAgcHJpdmF0ZSBkZXN0cm95JDogU3ViamVjdDx2b2lkPiA9IG5ldyBTdWJqZWN0KCk7XG4gIGlzRGlzYWJsZWQgPSBmYWxzZTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIGFsYXJtV2lkZ2V0U2VydmljZTogQWxhcm1XaWRnZXRTZXJ2aWNlLFxuICAgIHByaXZhdGUgYWxhcm1SZWFsdGltZVNlcnZpY2U6IEFsYXJtUmVhbHRpbWVTZXJ2aWNlLFxuICAgIHByaXZhdGUgYWxhcm1TZXJ2aWNlOiBBbGFybVNlcnZpY2UsXG4gICAgcHJpdmF0ZSBhbGFybXNWaWV3U2VydmljZTogQWxhcm1zVmlld1NlcnZpY2UsXG4gICAgcHJpdmF0ZSBhbGFybVdpdGhDaGlsZHJlblJlYWx0aW1lU2VydmljZTogQWxhcm1XaXRoQ2hpbGRyZW5SZWFsdGltZVNlcnZpY2UsXG4gICAgcHJpdmF0ZSBkYXNoYm9hcmRDaGlsZDogRGFzaGJvYXJkQ2hpbGRDb21wb25lbnQsXG4gICAgcHJpdmF0ZSBhbGVydFNlcnZpY2U6IEFsZXJ0U2VydmljZSxcbiAgICBwcml2YXRlIHdpZGdldEdsb2JhbEF1dG9SZWZyZXNoOiBXaWRnZXRHbG9iYWxBdXRvUmVmcmVzaFNlcnZpY2VcbiAgKSB7XG4gICAgdGhpcy5pc0ludGVydmFsUmVmcmVzaCA9IHRoaXMuYWxhcm1zVmlld1NlcnZpY2UuaXNJbnRlcnZhbFJlZnJlc2goKTtcbiAgfVxuXG4gIGFzeW5jIG5nT25Jbml0KCk6IFByb21pc2U8dm9pZD4ge1xuICAgIHRoaXMuYWxlcnRzLnNldEFsZXJ0R3JvdXBEaXNtaXNzU3RyYXRlZ3koXG4gICAgICAnd2FybmluZycsXG4gICAgICBEaXNtaXNzQWxlcnRTdHJhdGVneS5URU1QT1JBUllfT1JfUEVSTUFORU5UXG4gICAgKTtcblxuICAgIGlmICh0aGlzLmFsYXJtV2lkZ2V0U2VydmljZS5pc09sZEFsYXJtQ29uZmlnU3RydWN0dXJlKHRoaXMuY29uZmlnKSkge1xuICAgICAgY29uc3QgbWFwcGVkQ29uZmlnID0gdGhpcy5hbGFybVdpZGdldFNlcnZpY2UubWFwVG9OZXdDb25maWdTdHJ1Y3R1cmUoXG4gICAgICAgIHRoaXMuY29uZmlnLFxuICAgICAgICB0aGlzLmlzSW50ZXJ2YWxSZWZyZXNoXG4gICAgICApO1xuICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLmNvbmZpZywgbWFwcGVkQ29uZmlnKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5jb25maWcud2lkZ2V0SW5zdGFuY2VHbG9iYWxBdXRvUmVmcmVzaENvbnRleHQgJiYgIXRoaXMuY29uZmlnLmlzUmVhbHRpbWUpIHtcbiAgICAgIHRoaXMuaGFuZGxlR2xvYmFsUmVmcmVzaExvYWRpbmcoKTtcbiAgICB9XG4gICAgY29uc3QgX2NvbmZpZyA9IHRoaXMuZGFzaGJvYXJkQ2hpbGRbJ2RhdGEnXT8uY29uZmlnO1xuICAgIGNvbnN0IGlzTGVnYWN5V2lkZ2V0V2l0aG91dENvbmZpZ3VyYXRpb24gPVxuICAgICAgaXNFbXB0eShfY29uZmlnKSB8fCBpc0VxdWFsKF9jb25maWcsIHsgZGlzcGxheVNldHRpbmdzOiB7IGdsb2JhbEF1dG9SZWZyZXNoQ29udGV4dDogdHJ1ZSB9IH0pO1xuXG4gICAgaWYgKGlzTGVnYWN5V2lkZ2V0V2l0aG91dENvbmZpZ3VyYXRpb24pIHtcbiAgICAgIHRoaXMuc2V0TGVnYWN5UmVjZW50T3JDcml0aWNhbEFsYXJtV2lkZ2V0Q29uZmlnKCk7XG4gICAgfVxuXG4gICAgdGhpcy51cGRhdGVXaWRnZXRSZWZyZXNoTW9kZSgpO1xuICAgIHRoaXMucmVmcmVzaEludGVydmFsID0gISF0aGlzLmNvbmZpZz8ucmVmcmVzaEludGVydmFsICYmIHRoaXMuY29uZmlnPy5yZWZyZXNoSW50ZXJ2YWw7XG4gICAgYXdhaXQgdGhpcy5mZXRjaEFsYXJtcygpO1xuICB9XG5cbiAgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xuICAgIGlmICghdGhpcy5pc0ludGVydmFsUmVmcmVzaCAmJiB0aGlzLmNvbmZpZy5yZWZyZXNoT3B0aW9uID09PSAnaW50ZXJ2YWwnKSB7XG4gICAgICB0aGlzLmhhbmRsZVJlYWx0aW1lQWxhcm1zKHRoaXMuY29uZmlnLCB0aGlzLmFsYXJtV2lkZ2V0QWxhcm1zUmVsb2FkQ29tcC5pc1JlYWx0aW1lVG9nZ2xlT24pO1xuICAgIH1cbiAgfVxuXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcbiAgICBpZiAoY2hhbmdlcz8uY29uZmlnPy5jdXJyZW50VmFsdWU/LmRhdGUpIHtcbiAgICAgIHRoaXMuY29uZmlnLmRhdGVGaWx0ZXIgPSBjaGFuZ2VzLmNvbmZpZy5jdXJyZW50VmFsdWUuZGF0ZTtcbiAgICB9XG4gIH1cblxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5jb25maWcuaXNSZWFsdGltZSkge1xuICAgICAgdGhpcy51bnN1YnNjcmliZSQubmV4dCgpO1xuICAgICAgdGhpcy51bnN1YnNjcmliZSQuY29tcGxldGUoKTtcbiAgICB9XG5cbiAgICB0aGlzLmRlc3Ryb3kkLm5leHQoKTtcbiAgICB0aGlzLmRlc3Ryb3kkLmNvbXBsZXRlKCk7XG5cbiAgICBpZiAodGhpcy5jb25maWcud2lkZ2V0SW5zdGFuY2VHbG9iYWxBdXRvUmVmcmVzaENvbnRleHQgJiYgdGhpcy5pc0xvYWRpbmckLnZhbHVlKSB7XG4gICAgICB0aGlzLndpZGdldEdsb2JhbEF1dG9SZWZyZXNoLmRlY3JlbWVudExvYWRpbmcoKTtcbiAgICB9XG4gIH1cblxuICBhc3luYyBmZXRjaEFsYXJtcygpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICB0aGlzLnVwZGF0ZURhdGVGaWx0ZXIoKTtcbiAgICB0aGlzLmFsYXJtcyQubmV4dChhd2FpdCB0aGlzLmdldEFsYXJtcygpKTtcbiAgfVxuXG4gIGFzeW5jIG9uRGF0ZUZpbHRlckNoYW5nZShldmVudDoge1xuICAgIHNlbGVjdGVkRGF0ZXM6IFtEYXRlLCBEYXRlXTtcbiAgICBpbnRlcnZhbDogSW50ZXJ2YWxbJ2lkJ107XG4gIH0pOiBQcm9taXNlPHZvaWQ+IHtcbiAgICB0aGlzLmNvbmZpZy5kYXRlRmlsdGVyID0gZXZlbnQuc2VsZWN0ZWREYXRlcztcbiAgICB0aGlzLmNvbmZpZy5pbnRlcnZhbCA9IGV2ZW50LmludGVydmFsO1xuICAgIGF3YWl0IHRoaXMuZmV0Y2hBbGFybXMoKTtcbiAgfVxuXG4gIGhhbmRsZVJlYWxUaW1lVG9nZ2xlQ2hhbmdlKGlzUmVhbHRpbWVUb2dnbGVPbjogYm9vbGVhbik6IHZvaWQge1xuICAgIGlmICghaXNSZWFsdGltZVRvZ2dsZU9uKSB7XG4gICAgICB0aGlzLnVuc3Vic2NyaWJlJC5uZXh0KCk7XG4gICAgICB0aGlzLnVuc3Vic2NyaWJlJC5jb21wbGV0ZSgpO1xuICAgIH1cblxuICAgIHRoaXMudW5zdWJzY3JpYmUkID0gbmV3IFN1YmplY3QoKTtcbiAgICB0aGlzLmhhbmRsZVJlYWx0aW1lQWxhcm1zKHRoaXMuY29uZmlnLCBpc1JlYWx0aW1lVG9nZ2xlT24pO1xuICB9XG5cbiAgLyoqXG4gICAqIFVwZGF0ZXMgdGhlIHdpZGdldCdzIGRhdGUgZmlsdGVyIGJhc2VkIG9uIHRoZSBjdXJyZW50bHkgc2VsZWN0ZWQgaW50ZXJ2YWwuXG4gICAqIElmIHRoZSBpbnRlcnZhbCBpcyBzZXQgdG8gbGFzdCBob3VyLCB3ZSB3aWxsIGNvbmZpZ3VyZSB0aGUgZGF0ZSBmaWx0ZXIgdG8gZHluYW1pY2FsbHkgc2hvdyBhbGFybXMgb25seSBmcm9tIHRoZSBsYXN0IGhvdXIuXG4gICAqL1xuICBwcml2YXRlIHVwZGF0ZURhdGVGaWx0ZXIoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuY29uZmlnLmludGVydmFsID09PSAnY3VzdG9tJyB8fCB0aGlzLmNvbmZpZy53aWRnZXRJbnN0YW5jZUdsb2JhbFRpbWVDb250ZXh0KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKCF0aGlzLmNvbmZpZy5pbnRlcnZhbCkge1xuICAgICAgdGhpcy5jb25maWcuaW50ZXJ2YWwgPSAnbm9uZSc7XG4gICAgfVxuXG4gICAgdGhpcy5jb25maWcuZGF0ZUZpbHRlciA9IHRoaXMuYWxhcm1zVmlld1NlcnZpY2UuZ2V0RGF0ZVRpbWVDb250ZXh0QnlJbnRlcnZhbChcbiAgICAgIHRoaXMuY29uZmlnLmludGVydmFsXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBVcGRhdGVzIHRoZSB3aWRnZXQncyByZWZyZXNoIG1vZGUgYmFzZWQgb24gdGhlIGN1cnJlbnQgY29uZmlndXJhdGlvbiBhbmQgdGhlIGludGVydmFsIHJlZnJlc2ggc2V0dGluZy5cbiAgICogSWYgdGhlIHdpZGdldCdzICdpc1JlYWx0aW1lJyBjb25maWd1cmF0aW9uIGRpZmZlcnMgZnJvbSB0aGUgY3VycmVudCBnbG9iYWwgaW50ZXJ2YWwgcmVmcmVzaCBzZXR0aW5nIChhcHBsaWNhdGlvbiBvcHRpb25zIHNldHRpbmcpLFxuICAgKiB0aGUgd2lkZ2V0J3MgbW9kZSBpcyB1cGRhdGVkIHRvIGVpdGhlciAncmVhbHRpbWUnIG9yICdpbnRlcnZhbCcuIEluICdyZWFsdGltZScgbW9kZSwgdGhlIHJlZnJlc2ggaW50ZXJ2YWwgaXMgbnVsbCxcbiAgICogYW5kIGluICdpbnRlcnZhbCcgbW9kZSwgaXQgaXMgc2V0IHRvIHRoZSBkZWZhdWx0IGludGVydmFsIHZhbHVlLlxuICAgKi9cbiAgcHJpdmF0ZSB1cGRhdGVXaWRnZXRSZWZyZXNoTW9kZSgpOiB2b2lkIHtcbiAgICBjb25zdCBpc1JlZnJlc2hUeXBlU3dpdGNoZWQgPSAhIXRoaXMuY29uZmlnLmlzUmVhbHRpbWUgIT09ICF0aGlzLmlzSW50ZXJ2YWxSZWZyZXNoO1xuICAgIGlmICghaXNSZWZyZXNoVHlwZVN3aXRjaGVkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5jb25maWcuaXNSZWFsdGltZSA9ICF0aGlzLmlzSW50ZXJ2YWxSZWZyZXNoO1xuXG4gICAgaWYgKHRoaXMuY29uZmlnLmlzUmVhbHRpbWUpIHtcbiAgICAgIC8vIFN3aXRjaGluZyB3aWRnZXQgdG8gcmVhbHRpbWUgbW9kZVxuICAgICAgdGhpcy5jb25maWcucmVmcmVzaEludGVydmFsID0gbnVsbDtcbiAgICAgIHRoaXMuY29uZmlnLnJlZnJlc2hPcHRpb24gPSBudWxsO1xuICAgICAgdGhpcy5jb25maWcud2lkZ2V0SW5zdGFuY2VHbG9iYWxBdXRvUmVmcmVzaENvbnRleHQgPSBmYWxzZTtcbiAgICAgIHRoaXMuY29uZmlnLmlzQXV0b1JlZnJlc2hFbmFibGVkID0gdHJ1ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gU3dpdGNoaW5nIHdpZGdldCB0byBpbnRlcnZhbCBtb2RlXG4gICAgICB0aGlzLmNvbmZpZy5yZWZyZXNoSW50ZXJ2YWwgPSB0aGlzLmFsYXJtc1ZpZXdTZXJ2aWNlLkRFRkFVTFRfSU5URVJWQUxfVkFMVUU7XG4gICAgICB0aGlzLmNvbmZpZy5yZWZyZXNoT3B0aW9uID0gdGhpcy5hbGFybXNWaWV3U2VydmljZS5ERUZBVUxUX1JFRlJFU0hfT1BUSU9OX1ZBTFVFO1xuICAgICAgdGhpcy5jb25maWcud2lkZ2V0SW5zdGFuY2VHbG9iYWxBdXRvUmVmcmVzaENvbnRleHQgPSBmYWxzZTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGdldEFsYXJtcygpOiBQcm9taXNlPElSZXN1bHRMaXN0PElBbGFybT4+IHtcbiAgICB0cnkge1xuICAgICAgdGhpcy5pc0xvYWRpbmckLm5leHQodHJ1ZSk7XG4gICAgICByZXR1cm4gYXdhaXQgdGhpcy5hbGFybVNlcnZpY2UubGlzdChcbiAgICAgICAgdGhpcy5hbGFybVdpZGdldFNlcnZpY2UubWFwQ29uZmlnVG9RdWVyeUZpbHRlcih0aGlzLmNvbmZpZylcbiAgICAgICk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIHRoaXMuYWxlcnRzLmFkZEFsZXJ0cyhcbiAgICAgICAgbmV3IER5bmFtaWNDb21wb25lbnRBbGVydCh7XG4gICAgICAgICAgdHlwZTogJ3dhcm5pbmcnLFxuICAgICAgICAgIHRleHQ6XG4gICAgICAgICAgICBlcnJvcj8ubmFtZSA9PT0gJ1RpbWVvdXRFcnJvcidcbiAgICAgICAgICAgICAgPyB0aGlzLlRJTUVPVVRfRVJST1JfVEVYVFxuICAgICAgICAgICAgICA6IGVycm9yPy5tZXNzYWdlID8/IHRoaXMuU0VSVkVSX0VSUk9SX1RFWFRcbiAgICAgICAgfSlcbiAgICAgICk7XG4gICAgICBpZiAoZXJyb3I/LnJlcz8uc3RhdHVzID09PSA0MDMpIHtcbiAgICAgICAgdGhpcy5pc0Rpc2FibGVkID0gdHJ1ZTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgdGhpcy5hbGVydFNlcnZpY2UuYWRkU2VydmVyRmFpbHVyZShlcnJvcik7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIHRoaXMuaXNMb2FkaW5nJC5uZXh0KGZhbHNlKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogSGFuZGxlcyB0aGUgcmVhbHRpbWUgdXBkYXRlcyBvZiBhbGFybXMgYmFzZWQgb24gdGhlIHdpZGdldCBjb25maWd1cmF0aW9uLlxuICAgKiBJZiBhIHNwZWNpZmljIGRldmljZSBpcyBwcm92aWRlZCBpbiB0aGUgd2lkZ2V0IGNvbmZpZ3VyYXRpb24sIGFsbCBhbGFybXNcbiAgICogb3JpZ2luYXRpbmcgZnJvbSB0aGF0IGRldmljZSBhbmQgaXRzIGNoaWxkcmVuIGFyZSBmaWx0ZXJlZCBiYXNlZCBvbiBzdGF0dXMsIHNldmVyaXR5LCBhbmQgdHlwZS5cbiAgICogT3RoZXJ3aXNlLCBpdCBwcm9jZXNzZXMgYWxsIGluY29taW5nIGFsYXJtcyBhbmQgZmlsdGVycyB0aGVtIGFjY29yZGluZyB0byBzdGF0dXMsIHNldmVyaXR5LCBhbmQgdHlwZSxcbiAgICogYXMgc3BlY2lmaWVkIGluIHRoZSB3aWRnZXQgY29uZmlndXJhdGlvbi4gSWYgbmV3IGFsYXJtcyBtZWV0IHRoZSBzcGVjaWZpZWQgY3JpdGVyaWEsIGl0IHNldHMgYSBmbGFnXG4gICAqIHRvIGluZGljYXRlIHRoZSBwcmVzZW5jZSBvZiBuZXcgYWxhcm1zLlxuICAgKlxuICAgKiBAcGFyYW0gY29uZmlnIC0gVGhlIGNvbmZpZ3VyYXRpb24gc2V0dGluZ3Mgb2YgdGhlIGFsYXJtIGxpc3Qgd2lkZ2V0LlxuICAgKiBAcGFyYW0gaXNSZWFsdGltZVRvZ2dsZU9uIC0gQSBmbGFnIGluZGljYXRpbmcgd2hldGhlciB0aGUgcmVhbHRpbWUgdG9nZ2xlIGlzIG9uLiBJZiB0cnVlLCB0aGUgYWxhcm0gbGlzdCB3aWxsIGJlIHJlZnJlc2hlZC5cbiAgICogSWYgZmFsc2UsIHRoZSBwcmVzZW5jZSBvZiBuZXcgYWxhcm1zIHdpbGwgYmUgZGlzcGxheWVkIGFzIFwiTmV3IEFsYXJtc1wiIGVudHJ5IG9uIHdpZGdldCByZWZyZXNoIGJ1dHRvbiwgYnV0IHRoZSBsaXN0IHdvbid0IGJlIHJlZnJlc2hlZCBhdXRvbWF0aWNhbGx5LlxuICAgKi9cbiAgcHJpdmF0ZSBoYW5kbGVSZWFsdGltZUFsYXJtcyhjb25maWc6IEFsYXJtTGlzdFdpZGdldENvbmZpZywgaXNSZWFsdGltZVRvZ2dsZU9uOiBib29sZWFuKTogdm9pZCB7XG4gICAgY29uc3QgY2FsbGJhY2sgPSAoZGF0YTogbnVtYmVyIHwgSUFsYXJtKSA9PiB7XG4gICAgICBpZiAoXG4gICAgICAgIHRoaXMuYWxhcm1XaWRnZXRTZXJ2aWNlLmZpbHRlckFsYXJtc0J5U3RhdHVzU2V2ZXJpdHlBbmRUeXBlKFxuICAgICAgICAgIGRhdGEsXG4gICAgICAgICAgdGhpcy5hbGFybXMkLnZhbHVlLmRhdGEsXG4gICAgICAgICAgY29uZmlnXG4gICAgICAgIClcbiAgICAgICkge1xuICAgICAgICBpZiAoaXNSZWFsdGltZVRvZ2dsZU9uKSB7XG4gICAgICAgICAgdGhpcy5mZXRjaEFsYXJtcygpO1xuICAgICAgICAgIHRoaXMuYWxhcm1XaWRnZXRBbGFybXNSZWxvYWRDb21wLmlzTmV3QWxhcm1NZXNzYWdlQ2xlYXJlZCA9IHRydWU7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5hbGFybVdpZGdldEFsYXJtc1JlbG9hZENvbXAuaXNOZXdBbGFybU1lc3NhZ2VDbGVhcmVkID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9O1xuXG4gICAgaWYgKHRoaXMuY29uZmlnLmRldmljZSkge1xuICAgICAgdGhpcy5oYW5kbGVSZWFsdGltZShcbiAgICAgICAgdGhpcy5hbGFybVdpdGhDaGlsZHJlblJlYWx0aW1lU2VydmljZS5vbkFsbCQuYmluZCh0aGlzLmFsYXJtV2l0aENoaWxkcmVuUmVhbHRpbWVTZXJ2aWNlKSxcbiAgICAgICAgY2FsbGJhY2tcbiAgICAgICk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuaGFuZGxlUmVhbHRpbWUoXG4gICAgICAgIHRoaXMuYWxhcm1SZWFsdGltZVNlcnZpY2Uub25BbGwkLmJpbmQodGhpcy5hbGFybVJlYWx0aW1lU2VydmljZSksXG4gICAgICAgIGNhbGxiYWNrXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBTZXRzIHVwIGEgc3Vic2NyaXB0aW9uIHRvIGEgcmVhbHRpbWUgZGF0YSBzdHJlYW0uIFRoaXMgZnVuY3Rpb24gdGFrZXMgYSBzdWJzY3JpYmVyIGZ1bmN0aW9uLFxuICAgKiB3aGljaCBpcyB1c2VkIHRvIHN1YnNjcmliZSB0byB0aGUgZGF0YSBzdHJlYW0sIGFuZCBhIGNhbGxiYWNrIGZ1bmN0aW9uLCB3aGljaCBpcyBjYWxsZWQgd2l0aCBlYWNoXG4gICAqIGRhdGEgdXBkYXRlIHJlY2VpdmVkIGZyb20gdGhlIHN0cmVhbS5cbiAgICpcbiAgICogQHBhcmFtIHN1YnNjcmliZXJGbiAtIEEgZnVuY3Rpb24gdGhhdCByZXR1cm5zIGFuIG9ic2VydmFibGUgc3RyZWFtIG9mIGFsYXJtIGRhdGEuXG4gICAqIEBwYXJhbSBjYWxsYmFjayAtIEEgZnVuY3Rpb24gdG8gYmUgZXhlY3V0ZWQgd2l0aCBlYWNoIGFsYXJtIGRhdGEgdXBkYXRlLlxuICAgKi9cbiAgcHJpdmF0ZSBoYW5kbGVSZWFsdGltZShcbiAgICBzdWJzY3JpYmVyRm46IChpZD86IHN0cmluZykgPT4gT2JzZXJ2YWJsZTxJUmVzdWx0PElBbGFybT4+LFxuICAgIGNhbGxiYWNrOiAoZGF0YTogSUFsYXJtKSA9PiB2b2lkXG4gICk6IHZvaWQge1xuICAgIHN1YnNjcmliZXJGbih0aGlzLmNvbmZpZy5kZXZpY2U/LmlkKVxuICAgICAgLnBpcGUoXG4gICAgICAgIHRhcCgoeyBkYXRhIH0pID0+IHtcbiAgICAgICAgICBjYWxsYmFjayhkYXRhKTtcbiAgICAgICAgfSksXG4gICAgICAgIHRha2VVbnRpbCh0aGlzLnVuc3Vic2NyaWJlJClcbiAgICAgIClcbiAgICAgIC5zdWJzY3JpYmUoKTtcbiAgfVxuXG4gIHByaXZhdGUgc2V0TGVnYWN5UmVjZW50T3JDcml0aWNhbEFsYXJtV2lkZ2V0Q29uZmlnKCk6IHZvaWQge1xuICAgIGNvbnN0IHdpZGdldElkID0gdGhpcy5kYXNoYm9hcmRDaGlsZFsnZGF0YSddPy5jb21wb25lbnRJZFxuICAgICAgPyB0aGlzLmRhc2hib2FyZENoaWxkWydkYXRhJ10/LmNvbXBvbmVudElkIC8vcHJvcGVydHkgaXMgdXNlZCBpbiBjb2NrcGl0IGRhc2hib2FyZHNcbiAgICAgIDogdGhpcy5kYXNoYm9hcmRDaGlsZFsnZGF0YSddPy5uYW1lOyAvL3Byb3BlcnR5IGlzIHVzZWQgaW4gZGV2aWNlIG1hbmFnZW1lbnQgZGFzaGJvYXJkc1xuXG4gICAgaWYgKHdpZGdldElkID09PSBSRUNFTlRfQUxBUk1TX1dJREdFVF9JRCkge1xuICAgICAgY29uc3QgcHJlZGVmaW5lZENvbmZpZyA9IHRoaXMuYWxhcm1XaWRnZXRTZXJ2aWNlLmdldFByZWRlZmluZWRDb25maWd1cmF0aW9uKFxuICAgICAgICB0aGlzLmlzSW50ZXJ2YWxSZWZyZXNoLFxuICAgICAgICBSRUNFTlRfQUxBUk1TX1dJREdFVF9JRFxuICAgICAgKTtcbiAgICAgIE9iamVjdC5hc3NpZ24odGhpcy5jb25maWcsIHByZWRlZmluZWRDb25maWcpO1xuXG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHdpZGdldElkID09PSBBU1NFVF9BTEFSTVNfV0lER0VUX0lEKSB7XG4gICAgICBjb25zdCBwcmVkZWZpbmVkQ29uZmlnID0gdGhpcy5hbGFybVdpZGdldFNlcnZpY2UuZ2V0UHJlZGVmaW5lZENvbmZpZ3VyYXRpb24oXG4gICAgICAgIHRoaXMuaXNJbnRlcnZhbFJlZnJlc2hcbiAgICAgICk7XG4gICAgICBPYmplY3QuYXNzaWduKHRoaXMuY29uZmlnLCBwcmVkZWZpbmVkQ29uZmlnKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGhhbmRsZUdsb2JhbFJlZnJlc2hMb2FkaW5nKCk6IHZvaWQge1xuICAgIHRoaXMuaXNMb2FkaW5nJFxuICAgICAgLnBpcGUoXG4gICAgICAgIHNraXAoMSksXG4gICAgICAgIGdsb2JhbEF1dG9SZWZyZXNoTG9hZGluZyh0aGlzLndpZGdldEdsb2JhbEF1dG9SZWZyZXNoKSxcbiAgICAgICAgdGFrZVVudGlsKHRoaXMuZGVzdHJveSQpXG4gICAgICApXG4gICAgICAuc3Vic2NyaWJlKCk7XG4gIH1cbn1cbiIsIjxjOHktYWxhcm1zLWxpc3RcbiAgI2xpc3RcbiAgW2FsYXJtc109XCJhbGFybXMkIHwgYXN5bmNcIlxuICBbbmF2aWdhdGlvbk9wdGlvbnNdPVwie1xuICAgIGFsd2F5c05hdmlnYXRlVG9BbGxBbGFybXM6ICFjb25maWcuZGV2aWNlLFxuICAgIGFsbG93TmF2aWdhdGlvblRvQWxhcm1zVmlldzogdHJ1ZSxcbiAgICBpbmNsdWRlQ2xlYXJlZFF1ZXJ5UGFyYW1zOiB0cnVlLFxuICAgIHF1ZXJ5UGFyYW1zSGFuZGxpbmc6ICcnXG4gIH1cIlxuICBbaXNJbml0aWFsTG9hZGluZ109XCJpc0xvYWRpbmckIHwgYXN5bmNcIlxuICBbaGFzUGVybWlzc2lvbnNdPVwiIWlzRGlzYWJsZWRcIlxuPlxuICA8Yzh5LWFsYXJtcy1kYXRlLWZpbHRlclxuICAgICpuZ0lmPVwiY29uZmlnLmRpc3BsYXlEYXRlU2VsZWN0aW9uXCJcbiAgICBbdXBkYXRlUXVlcnlQYXJhbXNdPVwiZmFsc2VcIlxuICAgIFtkYXRlXT1cInRoaXMuY29uZmlnLmRhdGVGaWx0ZXJcIlxuICAgIFtERUZBVUxUX0lOVEVSVkFMXT1cImNvbmZpZy5pbnRlcnZhbCB8fCAnbm9uZSdcIlxuICAgIChkYXRlRmlsdGVyQ2hhbmdlKT1cIm9uRGF0ZUZpbHRlckNoYW5nZSgkZXZlbnQpXCJcbiAgPjwvYzh5LWFsYXJtcy1kYXRlLWZpbHRlcj5cbiAgPGM4eS1hbGFybS13aWRnZXQtYWxhcm1zLXJlbG9hZFxuICAgIGNsYXNzPVwiZC1jb250ZW50c1wiXG4gICAgW2lzSW50ZXJ2YWxSZWZyZXNoXT1cImlzSW50ZXJ2YWxSZWZyZXNoXCJcbiAgICBbcmVmcmVzaEludGVydmFsXT1cInJlZnJlc2hJbnRlcnZhbFwiXG4gICAgW2NvbmZpZ109XCJjb25maWdcIlxuICAgIFtpc0xvYWRpbmddPVwiaXNMb2FkaW5nJFwiXG4gICAgW2lzU2Nyb2xsaW5nXT1cImxpc3QuaXNTY3JvbGxpbmdcIlxuICAgIFtpc0Rpc2FibGVkXT1cImlzRGlzYWJsZWRcIlxuICAgIChvbkNvdW50ZG93bkVuZGVkKT1cImZldGNoQWxhcm1zKClcIlxuICAgIChvblJlYWxUaW1lVG9nZ2xlQ2hhbmdlZCk9XCJoYW5kbGVSZWFsVGltZVRvZ2dsZUNoYW5nZSgkZXZlbnQpXCJcbiAgPjwvYzh5LWFsYXJtLXdpZGdldC1hbGFybXMtcmVsb2FkPlxuPC9jOHktYWxhcm1zLWxpc3Q+XG4iXX0=
|
|
240
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWxhcm0tbGlzdC13aWRnZXQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vd2lkZ2V0cy9pbXBsZW1lbnRhdGlvbnMvYWxhcm1zL2FsYXJtLWxpc3Qtd2lkZ2V0LXZpZXcvYWxhcm0tbGlzdC13aWRnZXQuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vd2lkZ2V0cy9pbXBsZW1lbnRhdGlvbnMvYWxhcm1zL2FsYXJtLWxpc3Qtd2lkZ2V0LXZpZXcvYWxhcm0tbGlzdC13aWRnZXQuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUVMLFNBQVMsRUFDVCxLQUFLLEVBSUwsU0FBUyxFQUNWLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxZQUFZLEVBQWdDLE1BQU0sYUFBYSxDQUFDO0FBQ3pFLE9BQU8sRUFDTCxvQkFBb0IsRUFDcEIsZ0NBQWdDLEVBQ2hDLFlBQVksRUFDWix1QkFBdUIsRUFDdkIsb0JBQW9CLEVBRXBCLHFCQUFxQixFQUVyQixPQUFPLEVBQ1Asd0JBQXdCLEVBQ3hCLDhCQUE4QixFQUMvQixNQUFNLHFCQUFxQixDQUFDO0FBQzdCLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQy9ELE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBQzdDLE9BQU8sRUFBRSxlQUFlLEVBQWMsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQzVELE9BQU8sRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLEdBQUcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3RELE9BQU8sRUFDTCxzQkFBc0IsRUFFdEIsdUJBQXVCLEVBQ3hCLE1BQU0sNEJBQTRCLENBQUM7QUFDcEMsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDN0QsT0FBTyxFQUFFLGdDQUFnQyxF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QztRQUVELElBQUksUUFBUSxLQUFLLHNCQUFzQixFQUFFLENBQUM7WUFDeEMsTUFBTSxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsa0JBQWtCLENBQUMsMEJBQTBCLENBQ3pFLElBQUksQ0FBQyxpQkFBaUIsQ0FDdkIsQ0FBQztZQUNGLE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxnQkFBZ0IsQ0FBQyxDQUFDO1FBQy9DLENBQUM7SUFDSCxDQUFDO0lBRU8sMEJBQTBCO1FBQ2hDLElBQUksQ0FBQyxVQUFVO2FBQ1osSUFBSSxDQUNILElBQUksQ0FBQyxDQUFDLENBQUMsRUFDUCx3QkFBd0IsQ0FBQyxJQUFJLENBQUMsdUJBQXVCLENBQUMsRUFDdEQsU0FBUyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FDekI7YUFDQSxTQUFTLEVBQUUsQ0FBQztJQUNqQixDQUFDOytHQXpTVSx3QkFBd0I7bUdBQXhCLHdCQUF3Qiw4RUFGeEIsQ0FBQyxvQkFBb0IsRUFBRSxnQ0FBZ0MsQ0FBQyx1RkEwQnhELGdDQUFnQyxxRUNwRTdDLG1qQ0ErQkE7OzRGRGFhLHdCQUF3QjtrQkFMcEMsU0FBUzsrQkFDRSx1QkFBdUIsYUFFdEIsQ0FBQyxvQkFBb0IsRUFBRSxnQ0FBZ0MsQ0FBQztrVkFRMUQsTUFBTTtzQkFBZCxLQUFLO2dCQW1CTiwyQkFBMkI7c0JBRDFCLFNBQVM7dUJBQUMsZ0NBQWdDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQWZ0ZXJWaWV3SW5pdCxcbiAgQ29tcG9uZW50LFxuICBJbnB1dCxcbiAgT25EZXN0cm95LFxuICBPbkluaXQsXG4gIFNpbXBsZUNoYW5nZXMsXG4gIFZpZXdDaGlsZFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEFsYXJtU2VydmljZSwgSUFsYXJtLCBJUmVzdWx0LCBJUmVzdWx0TGlzdCB9IGZyb20gJ0BjOHkvY2xpZW50JztcbmltcG9ydCB7XG4gIEFsYXJtUmVhbHRpbWVTZXJ2aWNlLFxuICBBbGFybVdpdGhDaGlsZHJlblJlYWx0aW1lU2VydmljZSxcbiAgQWxlcnRTZXJ2aWNlLFxuICBEYXNoYm9hcmRDaGlsZENvbXBvbmVudCxcbiAgRGlzbWlzc0FsZXJ0U3RyYXRlZ3ksXG4gIER5bmFtaWNDb21wb25lbnQsXG4gIER5bmFtaWNDb21wb25lbnRBbGVydCxcbiAgRHluYW1pY0NvbXBvbmVudEFsZXJ0QWdncmVnYXRvcixcbiAgZ2V0dGV4dCxcbiAgZ2xvYmFsQXV0b1JlZnJlc2hMb2FkaW5nLFxuICBXaWRnZXRHbG9iYWxBdXRvUmVmcmVzaFNlcnZpY2Vcbn0gZnJvbSAnQGM4eS9uZ3gtY29tcG9uZW50cyc7XG5pbXBvcnQgeyBBbGFybXNWaWV3U2VydmljZSB9IGZyb20gJ0BjOHkvbmd4LWNvbXBvbmVudHMvYWxhcm1zJztcbmltcG9ydCB7IGlzRW1wdHksIGlzRXF1YWwgfSBmcm9tICdsb2Rhc2gtZXMnO1xuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBPYnNlcnZhYmxlLCBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBza2lwLCB0YWtlVW50aWwsIHRhcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7XG4gIEFTU0VUX0FMQVJNU19XSURHRVRfSUQsXG4gIEFsYXJtTGlzdFdpZGdldENvbmZpZyxcbiAgUkVDRU5UX0FMQVJNU19XSURHRVRfSURcbn0gZnJvbSAnLi4vYWxhcm0tbGlzdC13aWRnZXQubW9kZWwnO1xuaW1wb3J0IHsgQWxhcm1XaWRnZXRTZXJ2aWNlIH0gZnJvbSAnLi4vYWxhcm0td2lkZ2V0LnNlcnZpY2UnO1xuaW1wb3J0IHsgQWxhcm1XaWRnZXRBbGFybXNSZWxvYWRDb21wb25lbnQgfSBmcm9tICcuLi9hbGFybS13aWRnZXQtYWxhcm1zLXJlbG9hZC5jb21wb25lbnQnO1xuaW1wb3J0IHsgSW50ZXJ2YWwgfSBmcm9tICdAYzh5L25neC1jb21wb25lbnRzL2ludGVydmFsLXBpY2tlcic7XG5cbi8qKlxuICogVG8gZW5zdXJlIGJhY2t3YXJkIGNvbXBhdGliaWxpdHksIGxlZ2FjeSB3aWRnZXRzIHdpbGwgYmUgY29udmVydGVkIHRvIHRoZSBuZXcgaW1wbGVtZW50YXRpb24uXG4gKi9cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2M4eS1hbGFybS1saXN0LXdpZGdldCcsXG4gIHRlbXBsYXRlVXJsOiAnLi9hbGFybS1saXN0LXdpZGdldC5jb21wb25lbnQuaHRtbCcsXG4gIHByb3ZpZGVyczogW0FsYXJtUmVhbHRpbWVTZXJ2aWNlLCBBbGFybVdpdGhDaGlsZHJlblJlYWx0aW1lU2VydmljZV1cbn0pXG5leHBvcnQgY2xhc3MgQWxhcm1MaXN0V2lkZ2V0Q29tcG9uZW50XG4gIGltcGxlbWVudHMgT25Jbml0LCBBZnRlclZpZXdJbml0LCBPbkRlc3Ryb3ksIER5bmFtaWNDb21wb25lbnRcbntcbiAgLyoqXG4gICAqICBBbGFybSB3aWRnZXQgY29uZmlnLlxuICAgKi9cbiAgQElucHV0KCkgY29uZmlnOiBBbGFybUxpc3RXaWRnZXRDb25maWc7XG4gIC8qKlxuICAgKiBSZXByZXNlbnRzIGN1cnJlbnQgYWxhcm1zLlxuICAgKi9cbiAgYWxhcm1zJDogQmVoYXZpb3JTdWJqZWN0PElSZXN1bHRMaXN0PElBbGFybT4gfCBudWxsPiA9IG5ldyBCZWhhdmlvclN1YmplY3QobnVsbCk7XG4gIC8qKlxuICAgKiBDdXJyZW50IGlzTG9hZGluZyBzdGF0ZS4gQmFzZWQgb24gaXQgbmV4dCBjb3VudGRvd24gY3ljbGUgaXMgYmVpbmcgc3RhcnRlZC5cbiAgICovXG4gIGlzTG9hZGluZyQ6IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPiA9IG5ldyBCZWhhdmlvclN1YmplY3QodHJ1ZSk7XG4gIC8qKlxuICAgKiBTdGF0ZSBvZiB0aGlzIGJvb2xlYW4gZGVwZW5kcyBvbiBhbiBBcHBsaWNhdGlvbiBPcHRpb25zIFwiYWxhcm1zUmVmcmVzaFR5cGVcIiBzZXR0aW5nLlxuICAgKi9cbiAgaXNJbnRlcnZhbFJlZnJlc2g6IGJvb2xlYW47XG4gIC8qKlxuICAgKiBDdXJyZW50IHJlZnJlc2ggaW50ZXJ2YWwgc2V0IGluIGEgd2lkZ2V0IGNvbmZpZy5cbiAgICovXG4gIHJlZnJlc2hJbnRlcnZhbDogbnVtYmVyO1xuXG4gIEBWaWV3Q2hpbGQoQWxhcm1XaWRnZXRBbGFybXNSZWxvYWRDb21wb25lbnQpXG4gIGFsYXJtV2lkZ2V0QWxhcm1zUmVsb2FkQ29tcDogQWxhcm1XaWRnZXRBbGFybXNSZWxvYWRDb21wb25lbnQ7XG4gIGFsZXJ0czogRHluYW1pY0NvbXBvbmVudEFsZXJ0QWdncmVnYXRvcjtcblxuICBwcml2YXRlIFRJTUVPVVRfRVJST1JfVEVYVCA9IGdldHRleHQoXG4gICAgJ1RoZSByZXF1ZXN0IGlzIHRha2luZyBsb25nZXIgdGhhbiB1c3VhbC4gV2UgYXBvbG9naXplIGZvciB0aGUgaW5jb252ZW5pZW5jZS4nXG4gICk7XG4gIHByaXZhdGUgU0VSVkVSX0VSUk9SX1RFWFQgPSBnZXR0ZXh0KCdTZXJ2ZXIgZXJyb3Igb2NjdXJyZWQuJyk7XG4gIHByaXZhdGUgdW5zdWJzY3JpYmUkID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcbiAgcHJpdmF0ZSBkZXN0cm95JDogU3ViamVjdDx2b2lkPiA9IG5ldyBTdWJqZWN0KCk7XG4gIGlzRGlzYWJsZWQgPSBmYWxzZTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIGFsYXJtV2lkZ2V0U2VydmljZTogQWxhcm1XaWRnZXRTZXJ2aWNlLFxuICAgIHByaXZhdGUgYWxhcm1SZWFsdGltZVNlcnZpY2U6IEFsYXJtUmVhbHRpbWVTZXJ2aWNlLFxuICAgIHByaXZhdGUgYWxhcm1TZXJ2aWNlOiBBbGFybVNlcnZpY2UsXG4gICAgcHJpdmF0ZSBhbGFybXNWaWV3U2VydmljZTogQWxhcm1zVmlld1NlcnZpY2UsXG4gICAgcHJpdmF0ZSBhbGFybVdpdGhDaGlsZHJlblJlYWx0aW1lU2VydmljZTogQWxhcm1XaXRoQ2hpbGRyZW5SZWFsdGltZVNlcnZpY2UsXG4gICAgcHJpdmF0ZSBkYXNoYm9hcmRDaGlsZDogRGFzaGJvYXJkQ2hpbGRDb21wb25lbnQsXG4gICAgcHJpdmF0ZSBhbGVydFNlcnZpY2U6IEFsZXJ0U2VydmljZSxcbiAgICBwcml2YXRlIHdpZGdldEdsb2JhbEF1dG9SZWZyZXNoOiBXaWRnZXRHbG9iYWxBdXRvUmVmcmVzaFNlcnZpY2VcbiAgKSB7XG4gICAgdGhpcy5pc0ludGVydmFsUmVmcmVzaCA9IHRoaXMuYWxhcm1zVmlld1NlcnZpY2UuaXNJbnRlcnZhbFJlZnJlc2goKTtcbiAgfVxuXG4gIGFzeW5jIG5nT25Jbml0KCk6IFByb21pc2U8dm9pZD4ge1xuICAgIHRoaXMuYWxlcnRzLnNldEFsZXJ0R3JvdXBEaXNtaXNzU3RyYXRlZ3koXG4gICAgICAnd2FybmluZycsXG4gICAgICBEaXNtaXNzQWxlcnRTdHJhdGVneS5URU1QT1JBUllfT1JfUEVSTUFORU5UXG4gICAgKTtcblxuICAgIGlmICh0aGlzLmFsYXJtV2lkZ2V0U2VydmljZS5pc09sZEFsYXJtQ29uZmlnU3RydWN0dXJlKHRoaXMuY29uZmlnKSkge1xuICAgICAgY29uc3QgbWFwcGVkQ29uZmlnID0gdGhpcy5hbGFybVdpZGdldFNlcnZpY2UubWFwVG9OZXdDb25maWdTdHJ1Y3R1cmUoXG4gICAgICAgIHRoaXMuY29uZmlnLFxuICAgICAgICB0aGlzLmlzSW50ZXJ2YWxSZWZyZXNoXG4gICAgICApO1xuICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLmNvbmZpZywgbWFwcGVkQ29uZmlnKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5jb25maWcud2lkZ2V0SW5zdGFuY2VHbG9iYWxBdXRvUmVmcmVzaENvbnRleHQgJiYgIXRoaXMuY29uZmlnLmlzUmVhbHRpbWUpIHtcbiAgICAgIHRoaXMuaGFuZGxlR2xvYmFsUmVmcmVzaExvYWRpbmcoKTtcbiAgICB9XG4gICAgY29uc3QgX2NvbmZpZyA9IHRoaXMuZGFzaGJvYXJkQ2hpbGRbJ2RhdGEnXT8uY29uZmlnO1xuICAgIGNvbnN0IGlzTGVnYWN5V2lkZ2V0V2l0aG91dENvbmZpZ3VyYXRpb24gPVxuICAgICAgaXNFbXB0eShfY29uZmlnKSB8fCBpc0VxdWFsKF9jb25maWcsIHsgZGlzcGxheVNldHRpbmdzOiB7IGdsb2JhbEF1dG9SZWZyZXNoQ29udGV4dDogdHJ1ZSB9IH0pO1xuXG4gICAgaWYgKGlzTGVnYWN5V2lkZ2V0V2l0aG91dENvbmZpZ3VyYXRpb24pIHtcbiAgICAgIHRoaXMuc2V0TGVnYWN5UmVjZW50T3JDcml0aWNhbEFsYXJtV2lkZ2V0Q29uZmlnKCk7XG4gICAgfVxuXG4gICAgdGhpcy51cGRhdGVXaWRnZXRSZWZyZXNoTW9kZSgpO1xuICAgIHRoaXMucmVmcmVzaEludGVydmFsID0gISF0aGlzLmNvbmZpZz8ucmVmcmVzaEludGVydmFsICYmIHRoaXMuY29uZmlnPy5yZWZyZXNoSW50ZXJ2YWw7XG4gICAgYXdhaXQgdGhpcy5mZXRjaEFsYXJtcygpO1xuICB9XG5cbiAgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xuICAgIGlmICghdGhpcy5pc0ludGVydmFsUmVmcmVzaCAmJiB0aGlzLmNvbmZpZy5yZWZyZXNoT3B0aW9uID09PSAnaW50ZXJ2YWwnKSB7XG4gICAgICB0aGlzLmhhbmRsZVJlYWx0aW1lQWxhcm1zKHRoaXMuY29uZmlnLCB0aGlzLmFsYXJtV2lkZ2V0QWxhcm1zUmVsb2FkQ29tcC5pc1JlYWx0aW1lVG9nZ2xlT24pO1xuICAgIH1cbiAgfVxuXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcbiAgICBpZiAoY2hhbmdlcz8uY29uZmlnPy5jdXJyZW50VmFsdWU/LmRhdGUpIHtcbiAgICAgIHRoaXMuY29uZmlnLmRhdGVGaWx0ZXIgPSBjaGFuZ2VzLmNvbmZpZy5jdXJyZW50VmFsdWUuZGF0ZTtcbiAgICB9XG4gIH1cblxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5jb25maWcuaXNSZWFsdGltZSkge1xuICAgICAgdGhpcy51bnN1YnNjcmliZSQubmV4dCgpO1xuICAgICAgdGhpcy51bnN1YnNjcmliZSQuY29tcGxldGUoKTtcbiAgICB9XG5cbiAgICB0aGlzLmRlc3Ryb3kkLm5leHQoKTtcbiAgICB0aGlzLmRlc3Ryb3kkLmNvbXBsZXRlKCk7XG5cbiAgICBpZiAodGhpcy5jb25maWcud2lkZ2V0SW5zdGFuY2VHbG9iYWxBdXRvUmVmcmVzaENvbnRleHQgJiYgdGhpcy5pc0xvYWRpbmckLnZhbHVlKSB7XG4gICAgICB0aGlzLndpZGdldEdsb2JhbEF1dG9SZWZyZXNoLmRlY3JlbWVudExvYWRpbmcoKTtcbiAgICB9XG4gIH1cblxuICBhc3luYyBmZXRjaEFsYXJtcygpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICB0aGlzLnVwZGF0ZURhdGVGaWx0ZXIoKTtcbiAgICB0aGlzLmFsYXJtcyQubmV4dChhd2FpdCB0aGlzLmdldEFsYXJtcygpKTtcbiAgfVxuXG4gIGFzeW5jIG9uRGF0ZUZpbHRlckNoYW5nZShldmVudDoge1xuICAgIHNlbGVjdGVkRGF0ZXM6IFtEYXRlLCBEYXRlXTtcbiAgICBpbnRlcnZhbDogSW50ZXJ2YWxbJ2lkJ107XG4gIH0pOiBQcm9taXNlPHZvaWQ+IHtcbiAgICB0aGlzLmNvbmZpZy5kYXRlRmlsdGVyID0gZXZlbnQuc2VsZWN0ZWREYXRlcztcbiAgICB0aGlzLmNvbmZpZy5pbnRlcnZhbCA9IGV2ZW50LmludGVydmFsO1xuICAgIGF3YWl0IHRoaXMuZmV0Y2hBbGFybXMoKTtcbiAgfVxuXG4gIGhhbmRsZVJlYWxUaW1lVG9nZ2xlQ2hhbmdlKGlzUmVhbHRpbWVUb2dnbGVPbjogYm9vbGVhbik6IHZvaWQge1xuICAgIGlmICghaXNSZWFsdGltZVRvZ2dsZU9uKSB7XG4gICAgICB0aGlzLnVuc3Vic2NyaWJlJC5uZXh0KCk7XG4gICAgICB0aGlzLnVuc3Vic2NyaWJlJC5jb21wbGV0ZSgpO1xuICAgIH1cblxuICAgIHRoaXMudW5zdWJzY3JpYmUkID0gbmV3IFN1YmplY3QoKTtcbiAgICB0aGlzLmhhbmRsZVJlYWx0aW1lQWxhcm1zKHRoaXMuY29uZmlnLCBpc1JlYWx0aW1lVG9nZ2xlT24pO1xuICB9XG5cbiAgLyoqXG4gICAqIFVwZGF0ZXMgdGhlIHdpZGdldCdzIGRhdGUgZmlsdGVyIGJhc2VkIG9uIHRoZSBjdXJyZW50bHkgc2VsZWN0ZWQgaW50ZXJ2YWwuXG4gICAqIElmIHRoZSBpbnRlcnZhbCBpcyBzZXQgdG8gbGFzdCBob3VyLCB3ZSB3aWxsIGNvbmZpZ3VyZSB0aGUgZGF0ZSBmaWx0ZXIgdG8gZHluYW1pY2FsbHkgc2hvdyBhbGFybXMgb25seSBmcm9tIHRoZSBsYXN0IGhvdXIuXG4gICAqL1xuICBwcml2YXRlIHVwZGF0ZURhdGVGaWx0ZXIoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuY29uZmlnLmludGVydmFsID09PSAnY3VzdG9tJyB8fCB0aGlzLmNvbmZpZy53aWRnZXRJbnN0YW5jZUdsb2JhbFRpbWVDb250ZXh0KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKCF0aGlzLmNvbmZpZy5pbnRlcnZhbCkge1xuICAgICAgdGhpcy5jb25maWcuaW50ZXJ2YWwgPSAnbm9uZSc7XG4gICAgfVxuXG4gICAgdGhpcy5jb25maWcuZGF0ZUZpbHRlciA9IHRoaXMuYWxhcm1zVmlld1NlcnZpY2UuZ2V0RGF0ZVRpbWVDb250ZXh0QnlJbnRlcnZhbChcbiAgICAgIHRoaXMuY29uZmlnLmludGVydmFsXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBVcGRhdGVzIHRoZSB3aWRnZXQncyByZWZyZXNoIG1vZGUgYmFzZWQgb24gdGhlIGN1cnJlbnQgY29uZmlndXJhdGlvbiBhbmQgdGhlIGludGVydmFsIHJlZnJlc2ggc2V0dGluZy5cbiAgICogSWYgdGhlIHdpZGdldCdzICdpc1JlYWx0aW1lJyBjb25maWd1cmF0aW9uIGRpZmZlcnMgZnJvbSB0aGUgY3VycmVudCBnbG9iYWwgaW50ZXJ2YWwgcmVmcmVzaCBzZXR0aW5nIChhcHBsaWNhdGlvbiBvcHRpb25zIHNldHRpbmcpLFxuICAgKiB0aGUgd2lkZ2V0J3MgbW9kZSBpcyB1cGRhdGVkIHRvIGVpdGhlciAncmVhbHRpbWUnIG9yICdpbnRlcnZhbCcuIEluICdyZWFsdGltZScgbW9kZSwgdGhlIHJlZnJlc2ggaW50ZXJ2YWwgaXMgbnVsbCxcbiAgICogYW5kIGluICdpbnRlcnZhbCcgbW9kZSwgaXQgaXMgc2V0IHRvIHRoZSBkZWZhdWx0IGludGVydmFsIHZhbHVlLlxuICAgKi9cbiAgcHJpdmF0ZSB1cGRhdGVXaWRnZXRSZWZyZXNoTW9kZSgpOiB2b2lkIHtcbiAgICBjb25zdCBpc1JlZnJlc2hUeXBlU3dpdGNoZWQgPSAhIXRoaXMuY29uZmlnLmlzUmVhbHRpbWUgIT09ICF0aGlzLmlzSW50ZXJ2YWxSZWZyZXNoO1xuICAgIGlmICghaXNSZWZyZXNoVHlwZVN3aXRjaGVkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5jb25maWcuaXNSZWFsdGltZSA9ICF0aGlzLmlzSW50ZXJ2YWxSZWZyZXNoO1xuXG4gICAgaWYgKHRoaXMuY29uZmlnLmlzUmVhbHRpbWUpIHtcbiAgICAgIC8vIFN3aXRjaGluZyB3aWRnZXQgdG8gcmVhbHRpbWUgbW9kZVxuICAgICAgdGhpcy5jb25maWcucmVmcmVzaEludGVydmFsID0gbnVsbDtcbiAgICAgIHRoaXMuY29uZmlnLnJlZnJlc2hPcHRpb24gPSBudWxsO1xuICAgICAgdGhpcy5jb25maWcud2lkZ2V0SW5zdGFuY2VHbG9iYWxBdXRvUmVmcmVzaENvbnRleHQgPSBmYWxzZTtcbiAgICAgIHRoaXMuY29uZmlnLmlzQXV0b1JlZnJlc2hFbmFibGVkID0gdHJ1ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gU3dpdGNoaW5nIHdpZGdldCB0byBpbnRlcnZhbCBtb2RlXG4gICAgICB0aGlzLmNvbmZpZy5yZWZyZXNoSW50ZXJ2YWwgPSB0aGlzLmFsYXJtc1ZpZXdTZXJ2aWNlLkRFRkFVTFRfSU5URVJWQUxfVkFMVUU7XG4gICAgICB0aGlzLmNvbmZpZy5yZWZyZXNoT3B0aW9uID0gdGhpcy5hbGFybXNWaWV3U2VydmljZS5ERUZBVUxUX1JFRlJFU0hfT1BUSU9OX1ZBTFVFO1xuICAgICAgdGhpcy5jb25maWcud2lkZ2V0SW5zdGFuY2VHbG9iYWxBdXRvUmVmcmVzaENvbnRleHQgPSBmYWxzZTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGdldEFsYXJtcygpOiBQcm9taXNlPElSZXN1bHRMaXN0PElBbGFybT4+IHtcbiAgICB0cnkge1xuICAgICAgdGhpcy5pc0xvYWRpbmckLm5leHQodHJ1ZSk7XG4gICAgICByZXR1cm4gYXdhaXQgdGhpcy5hbGFybVNlcnZpY2UubGlzdChcbiAgICAgICAgdGhpcy5hbGFybVdpZGdldFNlcnZpY2UubWFwQ29uZmlnVG9RdWVyeUZpbHRlcih0aGlzLmNvbmZpZylcbiAgICAgICk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIHRoaXMuYWxlcnRzLmFkZEFsZXJ0cyhcbiAgICAgICAgbmV3IER5bmFtaWNDb21wb25lbnRBbGVydCh7XG4gICAgICAgICAgdHlwZTogJ3dhcm5pbmcnLFxuICAgICAgICAgIHRleHQ6XG4gICAgICAgICAgICBlcnJvcj8ubmFtZSA9PT0gJ1RpbWVvdXRFcnJvcidcbiAgICAgICAgICAgICAgPyB0aGlzLlRJTUVPVVRfRVJST1JfVEVYVFxuICAgICAgICAgICAgICA6IGVycm9yPy5tZXNzYWdlID8/IHRoaXMuU0VSVkVSX0VSUk9SX1RFWFRcbiAgICAgICAgfSlcbiAgICAgICk7XG4gICAgICBpZiAoZXJyb3I/LnJlcz8uc3RhdHVzID09PSA0MDMpIHtcbiAgICAgICAgdGhpcy5pc0Rpc2FibGVkID0gdHJ1ZTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgdGhpcy5hbGVydFNlcnZpY2UuYWRkU2VydmVyRmFpbHVyZShlcnJvcik7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIHRoaXMuaXNMb2FkaW5nJC5uZXh0KGZhbHNlKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogSGFuZGxlcyB0aGUgcmVhbHRpbWUgdXBkYXRlcyBvZiBhbGFybXMgYmFzZWQgb24gdGhlIHdpZGdldCBjb25maWd1cmF0aW9uLlxuICAgKiBJZiBhIHNwZWNpZmljIGRldmljZSBpcyBwcm92aWRlZCBpbiB0aGUgd2lkZ2V0IGNvbmZpZ3VyYXRpb24sIGFsbCBhbGFybXNcbiAgICogb3JpZ2luYXRpbmcgZnJvbSB0aGF0IGRldmljZSBhbmQgaXRzIGNoaWxkcmVuIGFyZSBmaWx0ZXJlZCBiYXNlZCBvbiBzdGF0dXMsIHNldmVyaXR5LCBhbmQgdHlwZS5cbiAgICogT3RoZXJ3aXNlLCBpdCBwcm9jZXNzZXMgYWxsIGluY29taW5nIGFsYXJtcyBhbmQgZmlsdGVycyB0aGVtIGFjY29yZGluZyB0byBzdGF0dXMsIHNldmVyaXR5LCBhbmQgdHlwZSxcbiAgICogYXMgc3BlY2lmaWVkIGluIHRoZSB3aWRnZXQgY29uZmlndXJhdGlvbi4gSWYgbmV3IGFsYXJtcyBtZWV0IHRoZSBzcGVjaWZpZWQgY3JpdGVyaWEsIGl0IHNldHMgYSBmbGFnXG4gICAqIHRvIGluZGljYXRlIHRoZSBwcmVzZW5jZSBvZiBuZXcgYWxhcm1zLlxuICAgKlxuICAgKiBAcGFyYW0gY29uZmlnIC0gVGhlIGNvbmZpZ3VyYXRpb24gc2V0dGluZ3Mgb2YgdGhlIGFsYXJtIGxpc3Qgd2lkZ2V0LlxuICAgKiBAcGFyYW0gaXNSZWFsdGltZVRvZ2dsZU9uIC0gQSBmbGFnIGluZGljYXRpbmcgd2hldGhlciB0aGUgcmVhbHRpbWUgdG9nZ2xlIGlzIG9uLiBJZiB0cnVlLCB0aGUgYWxhcm0gbGlzdCB3aWxsIGJlIHJlZnJlc2hlZC5cbiAgICogSWYgZmFsc2UsIHRoZSBwcmVzZW5jZSBvZiBuZXcgYWxhcm1zIHdpbGwgYmUgZGlzcGxheWVkIGFzIFwiTmV3IEFsYXJtc1wiIGVudHJ5IG9uIHdpZGdldCByZWZyZXNoIGJ1dHRvbiwgYnV0IHRoZSBsaXN0IHdvbid0IGJlIHJlZnJlc2hlZCBhdXRvbWF0aWNhbGx5LlxuICAgKi9cbiAgcHJpdmF0ZSBoYW5kbGVSZWFsdGltZUFsYXJtcyhjb25maWc6IEFsYXJtTGlzdFdpZGdldENvbmZpZywgaXNSZWFsdGltZVRvZ2dsZU9uOiBib29sZWFuKTogdm9pZCB7XG4gICAgY29uc3QgY2FsbGJhY2sgPSAoZGF0YTogbnVtYmVyIHwgSUFsYXJtKSA9PiB7XG4gICAgICBpZiAoXG4gICAgICAgIHRoaXMuYWxhcm1XaWRnZXRTZXJ2aWNlLmZpbHRlckFsYXJtc0J5U3RhdHVzU2V2ZXJpdHlBbmRUeXBlKFxuICAgICAgICAgIGRhdGEsXG4gICAgICAgICAgdGhpcy5hbGFybXMkLnZhbHVlLmRhdGEsXG4gICAgICAgICAgY29uZmlnXG4gICAgICAgIClcbiAgICAgICkge1xuICAgICAgICBpZiAoaXNSZWFsdGltZVRvZ2dsZU9uKSB7XG4gICAgICAgICAgdGhpcy5mZXRjaEFsYXJtcygpO1xuICAgICAgICAgIHRoaXMuYWxhcm1XaWRnZXRBbGFybXNSZWxvYWRDb21wLmlzTmV3QWxhcm1NZXNzYWdlQ2xlYXJlZCA9IHRydWU7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5hbGFybVdpZGdldEFsYXJtc1JlbG9hZENvbXAuaXNOZXdBbGFybU1lc3NhZ2VDbGVhcmVkID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9O1xuXG4gICAgaWYgKHRoaXMuY29uZmlnLmRldmljZSkge1xuICAgICAgdGhpcy5oYW5kbGVSZWFsdGltZShcbiAgICAgICAgdGhpcy5hbGFybVdpdGhDaGlsZHJlblJlYWx0aW1lU2VydmljZS5vbkFsbCQuYmluZCh0aGlzLmFsYXJtV2l0aENoaWxkcmVuUmVhbHRpbWVTZXJ2aWNlKSxcbiAgICAgICAgY2FsbGJhY2tcbiAgICAgICk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuaGFuZGxlUmVhbHRpbWUoXG4gICAgICAgIHRoaXMuYWxhcm1SZWFsdGltZVNlcnZpY2Uub25BbGwkLmJpbmQodGhpcy5hbGFybVJlYWx0aW1lU2VydmljZSksXG4gICAgICAgIGNhbGxiYWNrXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBTZXRzIHVwIGEgc3Vic2NyaXB0aW9uIHRvIGEgcmVhbHRpbWUgZGF0YSBzdHJlYW0uIFRoaXMgZnVuY3Rpb24gdGFrZXMgYSBzdWJzY3JpYmVyIGZ1bmN0aW9uLFxuICAgKiB3aGljaCBpcyB1c2VkIHRvIHN1YnNjcmliZSB0byB0aGUgZGF0YSBzdHJlYW0sIGFuZCBhIGNhbGxiYWNrIGZ1bmN0aW9uLCB3aGljaCBpcyBjYWxsZWQgd2l0aCBlYWNoXG4gICAqIGRhdGEgdXBkYXRlIHJlY2VpdmVkIGZyb20gdGhlIHN0cmVhbS5cbiAgICpcbiAgICogQHBhcmFtIHN1YnNjcmliZXJGbiAtIEEgZnVuY3Rpb24gdGhhdCByZXR1cm5zIGFuIG9ic2VydmFibGUgc3RyZWFtIG9mIGFsYXJtIGRhdGEuXG4gICAqIEBwYXJhbSBjYWxsYmFjayAtIEEgZnVuY3Rpb24gdG8gYmUgZXhlY3V0ZWQgd2l0aCBlYWNoIGFsYXJtIGRhdGEgdXBkYXRlLlxuICAgKi9cbiAgcHJpdmF0ZSBoYW5kbGVSZWFsdGltZShcbiAgICBzdWJzY3JpYmVyRm46IChpZD86IHN0cmluZykgPT4gT2JzZXJ2YWJsZTxJUmVzdWx0PElBbGFybT4+LFxuICAgIGNhbGxiYWNrOiAoZGF0YTogSUFsYXJtKSA9PiB2b2lkXG4gICk6IHZvaWQge1xuICAgIHN1YnNjcmliZXJGbih0aGlzLmNvbmZpZy5kZXZpY2U/LmlkKVxuICAgICAgLnBpcGUoXG4gICAgICAgIHRhcCgoeyBkYXRhIH0pID0+IHtcbiAgICAgICAgICBjYWxsYmFjayhkYXRhKTtcbiAgICAgICAgfSksXG4gICAgICAgIHRha2VVbnRpbCh0aGlzLnVuc3Vic2NyaWJlJClcbiAgICAgIClcbiAgICAgIC5zdWJzY3JpYmUoKTtcbiAgfVxuXG4gIHByaXZhdGUgc2V0TGVnYWN5UmVjZW50T3JDcml0aWNhbEFsYXJtV2lkZ2V0Q29uZmlnKCk6IHZvaWQge1xuICAgIGNvbnN0IHdpZGdldElkID0gdGhpcy5kYXNoYm9hcmRDaGlsZFsnZGF0YSddPy5jb21wb25lbnRJZFxuICAgICAgPyB0aGlzLmRhc2hib2FyZENoaWxkWydkYXRhJ10/LmNvbXBvbmVudElkIC8vcHJvcGVydHkgaXMgdXNlZCBpbiBjb2NrcGl0IGRhc2hib2FyZHNcbiAgICAgIDogdGhpcy5kYXNoYm9hcmRDaGlsZFsnZGF0YSddPy5uYW1lOyAvL3Byb3BlcnR5IGlzIHVzZWQgaW4gZGV2aWNlIG1hbmFnZW1lbnQgZGFzaGJvYXJkc1xuXG4gICAgaWYgKHdpZGdldElkID09PSBSRUNFTlRfQUxBUk1TX1dJREdFVF9JRCkge1xuICAgICAgY29uc3QgcHJlZGVmaW5lZENvbmZpZyA9IHRoaXMuYWxhcm1XaWRnZXRTZXJ2aWNlLmdldFByZWRlZmluZWRDb25maWd1cmF0aW9uKFxuICAgICAgICB0aGlzLmlzSW50ZXJ2YWxSZWZyZXNoLFxuICAgICAgICBSRUNFTlRfQUxBUk1TX1dJREdFVF9JRFxuICAgICAgKTtcbiAgICAgIE9iamVjdC5hc3NpZ24odGhpcy5jb25maWcsIHByZWRlZmluZWRDb25maWcpO1xuXG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHdpZGdldElkID09PSBBU1NFVF9BTEFSTVNfV0lER0VUX0lEKSB7XG4gICAgICBjb25zdCBwcmVkZWZpbmVkQ29uZmlnID0gdGhpcy5hbGFybVdpZGdldFNlcnZpY2UuZ2V0UHJlZGVmaW5lZENvbmZpZ3VyYXRpb24oXG4gICAgICAgIHRoaXMuaXNJbnRlcnZhbFJlZnJlc2hcbiAgICAgICk7XG4gICAgICBPYmplY3QuYXNzaWduKHRoaXMuY29uZmlnLCBwcmVkZWZpbmVkQ29uZmlnKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGhhbmRsZUdsb2JhbFJlZnJlc2hMb2FkaW5nKCk6IHZvaWQge1xuICAgIHRoaXMuaXNMb2FkaW5nJFxuICAgICAgLnBpcGUoXG4gICAgICAgIHNraXAoMSksXG4gICAgICAgIGdsb2JhbEF1dG9SZWZyZXNoTG9hZGluZyh0aGlzLndpZGdldEdsb2JhbEF1dG9SZWZyZXNoKSxcbiAgICAgICAgdGFrZVVudGlsKHRoaXMuZGVzdHJveSQpXG4gICAgICApXG4gICAgICAuc3Vic2NyaWJlKCk7XG4gIH1cbn1cbiIsIjxjOHktYWxhcm1zLWxpc3RcbiAgI2xpc3RcbiAgW2FsYXJtc109XCJhbGFybXMkIHwgYXN5bmNcIlxuICBbbmF2aWdhdGlvbk9wdGlvbnNdPVwie1xuICAgIGFsd2F5c05hdmlnYXRlVG9BbGxBbGFybXM6ICFjb25maWcuZGV2aWNlLFxuICAgIGFsbG93TmF2aWdhdGlvblRvQWxhcm1zVmlldzogdHJ1ZSxcbiAgICBpbmNsdWRlQ2xlYXJlZFF1ZXJ5UGFyYW1zOiB0cnVlLFxuICAgIHF1ZXJ5UGFyYW1zSGFuZGxpbmc6ICcnXG4gIH1cIlxuICBbaXNJbml0aWFsTG9hZGluZ109XCJpc0xvYWRpbmckIHwgYXN5bmNcIlxuICBbaGFzUGVybWlzc2lvbnNdPVwiIWlzRGlzYWJsZWRcIlxuPlxuICA8Yzh5LWFsYXJtcy1kYXRlLWZpbHRlclxuICAgICpuZ0lmPVwiY29uZmlnLmRpc3BsYXlEYXRlU2VsZWN0aW9uXCJcbiAgICBbdXBkYXRlUXVlcnlQYXJhbXNdPVwiZmFsc2VcIlxuICAgIFtkYXRlXT1cInRoaXMuY29uZmlnLmRhdGVGaWx0ZXJcIlxuICAgIFtERUZBVUxUX0lOVEVSVkFMXT1cImNvbmZpZy5pbnRlcnZhbCB8fCAnbm9uZSdcIlxuICAgIChkYXRlRmlsdGVyQ2hhbmdlKT1cIm9uRGF0ZUZpbHRlckNoYW5nZSgkZXZlbnQpXCJcbiAgPjwvYzh5LWFsYXJtcy1kYXRlLWZpbHRlcj5cbiAgPGM4eS1hbGFybS13aWRnZXQtYWxhcm1zLXJlbG9hZFxuICAgIGNsYXNzPVwiZC1jb250ZW50c1wiXG4gICAgW2lzSW50ZXJ2YWxSZWZyZXNoXT1cImlzSW50ZXJ2YWxSZWZyZXNoXCJcbiAgICBbcmVmcmVzaEludGVydmFsXT1cInJlZnJlc2hJbnRlcnZhbFwiXG4gICAgW2NvbmZpZ109XCJjb25maWdcIlxuICAgIFtpc0xvYWRpbmddPVwiaXNMb2FkaW5nJFwiXG4gICAgW2lzU2Nyb2xsaW5nXT1cImxpc3QuaXNTY3JvbGxpbmdcIlxuICAgIFtpc1JlZnJlc2hEaXNhYmxlZF09XCJpc0Rpc2FibGVkXCJcbiAgICAob25Db3VudGRvd25FbmRlZCk9XCJmZXRjaEFsYXJtcygpXCJcbiAgICAob25SZWFsVGltZVRvZ2dsZUNoYW5nZWQpPVwiaGFuZGxlUmVhbFRpbWVUb2dnbGVDaGFuZ2UoJGV2ZW50KVwiXG4gID48L2M4eS1hbGFybS13aWRnZXQtYWxhcm1zLXJlbG9hZD5cbjwvYzh5LWFsYXJtcy1saXN0PlxuIl19
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import { ChangeDetectorRef, Component, EventEmitter, Input, Output, ViewChild } from '@angular/core';
|
|
2
|
-
import { CountdownIntervalComponent, gettext, WidgetGlobalAutoRefreshService } from '@c8y/ngx-components';
|
|
2
|
+
import { CountdownIntervalComponent, gettext, IntervalBasedReload, WidgetGlobalAutoRefreshService } from '@c8y/ngx-components';
|
|
3
3
|
import { AlarmsViewService } from '@c8y/ngx-components/alarms';
|
|
4
4
|
import { TranslateService } from '@ngx-translate/core';
|
|
5
5
|
import { BehaviorSubject } from 'rxjs';
|
|
6
|
-
import {
|
|
6
|
+
import { tap } from 'rxjs/operators';
|
|
7
7
|
import { GLOBAL_INTERVAL_OPTION } from './alarm-list-widget.model';
|
|
8
8
|
import * as i0 from "@angular/core";
|
|
9
9
|
import * as i1 from "@c8y/ngx-components/alarms";
|
|
@@ -11,16 +11,16 @@ import * as i2 from "@ngx-translate/core";
|
|
|
11
11
|
import * as i3 from "@c8y/ngx-components";
|
|
12
12
|
import * as i4 from "@angular/common";
|
|
13
13
|
import * as i5 from "ngx-bootstrap/tooltip";
|
|
14
|
-
export class AlarmWidgetAlarmsReloadComponent {
|
|
14
|
+
export class AlarmWidgetAlarmsReloadComponent extends IntervalBasedReload {
|
|
15
15
|
constructor(alarmsViewService, cdRef, translateService, widgetGlobalAutoRefreshService) {
|
|
16
|
+
super();
|
|
16
17
|
this.alarmsViewService = alarmsViewService;
|
|
17
18
|
this.cdRef = cdRef;
|
|
18
19
|
this.translateService = translateService;
|
|
19
20
|
this.widgetGlobalAutoRefreshService = widgetGlobalAutoRefreshService;
|
|
20
21
|
this.REALTIME_UPDATE_ALARMS_MESSAGE = this.alarmsViewService.REALTIME_UPDATE_ALARMS_MESSAGE;
|
|
21
|
-
this.isDisabled = false;
|
|
22
22
|
/**
|
|
23
|
-
*
|
|
23
|
+
* @inheritdoc
|
|
24
24
|
*/
|
|
25
25
|
this.onCountdownEnded = new EventEmitter();
|
|
26
26
|
/**
|
|
@@ -32,7 +32,7 @@ export class AlarmWidgetAlarmsReloadComponent {
|
|
|
32
32
|
*/
|
|
33
33
|
this.isNewAlarmMessageCleared = true;
|
|
34
34
|
/**
|
|
35
|
-
*
|
|
35
|
+
* @inheritdoc
|
|
36
36
|
*/
|
|
37
37
|
this.manuallyDisabledCountdown = false;
|
|
38
38
|
}
|
|
@@ -43,7 +43,7 @@ export class AlarmWidgetAlarmsReloadComponent {
|
|
|
43
43
|
}
|
|
44
44
|
else {
|
|
45
45
|
this.isIntervalRefreshToggleOn =
|
|
46
|
-
!this.
|
|
46
|
+
!this.isRefreshDisabled && (this.config.isAutoRefreshEnabled || !!this.refreshInterval);
|
|
47
47
|
this.updateCountdownButtonTooltipText();
|
|
48
48
|
}
|
|
49
49
|
}
|
|
@@ -64,7 +64,7 @@ export class AlarmWidgetAlarmsReloadComponent {
|
|
|
64
64
|
}
|
|
65
65
|
if (isDisabled) {
|
|
66
66
|
this.isIntervalRefreshToggleOn =
|
|
67
|
-
!this.
|
|
67
|
+
!this.isRefreshDisabled && (this.config.isAutoRefreshEnabled || !!this.refreshInterval);
|
|
68
68
|
this.updateCountdownButtonTooltipText(gettext('Disabled'));
|
|
69
69
|
}
|
|
70
70
|
if (!this.isIntervalRefresh ||
|
|
@@ -80,53 +80,12 @@ export class AlarmWidgetAlarmsReloadComponent {
|
|
|
80
80
|
}
|
|
81
81
|
}
|
|
82
82
|
/**
|
|
83
|
-
*
|
|
84
|
-
* Once a falsy value is detected (indicating that loading has finished), it attempts to start the countdown.
|
|
85
|
-
*
|
|
86
|
-
* IMPORTANT: If the widget's configuration (refreshInterval, check template) is not set prior to executing countdownIntervalComponent?.start,
|
|
87
|
-
* the countdown interval will not start!
|
|
88
|
-
*/
|
|
89
|
-
startCountdown() {
|
|
90
|
-
this.countdownSubscription = this.isLoading
|
|
91
|
-
.pipe(filter(isLoading => !Boolean(isLoading)), tap(() => {
|
|
92
|
-
this.countdownIntervalComponent?.start();
|
|
93
|
-
}))
|
|
94
|
-
.subscribe();
|
|
95
|
-
}
|
|
96
|
-
/**
|
|
97
|
-
* Handles the toggle state of the countdown on button click.
|
|
98
|
-
*
|
|
99
|
-
* This method is triggered by a mouse event, typically a click on the countdown toggle button.
|
|
100
|
-
* It toggles `isIntervalRefreshToggleOn` to reflect the current state of the countdown timer.
|
|
101
|
-
*
|
|
102
|
-
* - If `isIntervalRefreshToggleOn` is set to false, indicating that the countdown should be stopped,
|
|
103
|
-
* `disableCountdown` is called, and `manuallyDisabledCountdown` is set to true.
|
|
104
|
-
*
|
|
105
|
-
* - If `isIntervalRefreshToggleOn` is true and the countdown subscription is closed, indicating that
|
|
106
|
-
* the countdown can be started, `enableCountdown` is called, and `manuallyDisabledCountdown`
|
|
107
|
-
* is set to false.
|
|
108
|
-
*
|
|
109
|
-
* @param $event - The MouseEvent that triggered this method.
|
|
110
|
-
*/
|
|
111
|
-
onToggleCountdownButtonState($event) {
|
|
112
|
-
$event.preventDefault();
|
|
113
|
-
this.isIntervalRefreshToggleOn = !this.isDisabled && !this.isIntervalRefreshToggleOn;
|
|
114
|
-
this.updateCountdownButtonTooltipText();
|
|
115
|
-
if (!this.isIntervalRefreshToggleOn) {
|
|
116
|
-
this.disableCountdown();
|
|
117
|
-
this.manuallyDisabledCountdown = true;
|
|
118
|
-
return;
|
|
119
|
-
}
|
|
120
|
-
const onRefreshToggleOn = this.isIntervalRefreshToggleOn && this.countdownSubscription.closed;
|
|
121
|
-
if (onRefreshToggleOn) {
|
|
122
|
-
this.enableCountdown();
|
|
123
|
-
this.manuallyDisabledCountdown = false;
|
|
124
|
-
}
|
|
125
|
-
}
|
|
126
|
-
/**
|
|
127
|
-
* Wrapper method where it's name better describes a context where it was called.
|
|
83
|
+
* @inheritdoc
|
|
128
84
|
*/
|
|
129
85
|
countdownEnded() {
|
|
86
|
+
/**
|
|
87
|
+
* @inheritdoc
|
|
88
|
+
*/
|
|
130
89
|
this.autoRefreshList();
|
|
131
90
|
}
|
|
132
91
|
reload() {
|
|
@@ -172,35 +131,6 @@ export class AlarmWidgetAlarmsReloadComponent {
|
|
|
172
131
|
? this.translateService.instant(gettext('Realtime active'))
|
|
173
132
|
: this.translateService.instant(gettext('Realtime inactive'));
|
|
174
133
|
}
|
|
175
|
-
/**
|
|
176
|
-
* Manages the countdown timer's visibility and state in response to user scrolling.
|
|
177
|
-
*
|
|
178
|
-
* This method toggles the countdown timer based on the user's scrolling behavior. It uses
|
|
179
|
-
* the `disableCountdown` and `enableCountdown` methods for handling the countdown state.
|
|
180
|
-
*
|
|
181
|
-
* - If the user is scrolling down while the countdown is visible (`isScrolling` is true and
|
|
182
|
-
* `hideCountdown` is false), `disableCountdown` is called to stop and hide the countdown,
|
|
183
|
-
* and `isIntervalRefreshToggleOn` is set to false.
|
|
184
|
-
*
|
|
185
|
-
* - If the user has stopped scrolling, the countdown subscription is closed, and the countdown
|
|
186
|
-
* is hidden (`!isScrolling`, `countdownSubscription?.closed`, `hideCountdown`), `enableCountdown`
|
|
187
|
-
* is called to show and restart the countdown, and `isIntervalRefreshToggleOn` is set to true.
|
|
188
|
-
*/
|
|
189
|
-
handleScrolling() {
|
|
190
|
-
// Checks if the user has scrolled down while the countdown is visible
|
|
191
|
-
const onUserScrollDownHide = this.isScrolling && !this.hideCountdown;
|
|
192
|
-
if (onUserScrollDownHide) {
|
|
193
|
-
this.disableCountdown();
|
|
194
|
-
this.isIntervalRefreshToggleOn = false;
|
|
195
|
-
return;
|
|
196
|
-
}
|
|
197
|
-
// Checks if the user has stopped scrolling and the countdown is currently hidden
|
|
198
|
-
const onUserScrollTopShow = !this.isScrolling && this.countdownSubscription?.closed && this.hideCountdown;
|
|
199
|
-
if (onUserScrollTopShow) {
|
|
200
|
-
this.isIntervalRefreshToggleOn = true;
|
|
201
|
-
this.enableCountdown();
|
|
202
|
-
}
|
|
203
|
-
}
|
|
204
134
|
/**
|
|
205
135
|
* Enables and starts the countdown timer.
|
|
206
136
|
*
|
|
@@ -216,20 +146,7 @@ export class AlarmWidgetAlarmsReloadComponent {
|
|
|
216
146
|
this.startCountdown();
|
|
217
147
|
}
|
|
218
148
|
/**
|
|
219
|
-
*
|
|
220
|
-
*
|
|
221
|
-
* This method stops the ongoing countdown process by unsubscribing from `countdownSubscription`
|
|
222
|
-
* and stopping the `countdownIntervalComponent` if it exists. It then hides the countdown timer
|
|
223
|
-
* by setting `hideCountdown` to true. This method encapsulates the logic required to halt and
|
|
224
|
-
* conceal the countdown timer.
|
|
225
|
-
*/
|
|
226
|
-
disableCountdown() {
|
|
227
|
-
this.countdownSubscription.unsubscribe();
|
|
228
|
-
this.countdownIntervalComponent?.stop();
|
|
229
|
-
this.hideCountdown = true;
|
|
230
|
-
}
|
|
231
|
-
/**
|
|
232
|
-
* Updates the countdown button tooltip text based on the state of the interval refresh toggle state.
|
|
149
|
+
* @inheritdoc
|
|
233
150
|
*/
|
|
234
151
|
updateCountdownButtonTooltipText(customText) {
|
|
235
152
|
if (customText) {
|
|
@@ -241,11 +158,11 @@ export class AlarmWidgetAlarmsReloadComponent {
|
|
|
241
158
|
: this.translateService.instant(gettext('Enable auto refresh'));
|
|
242
159
|
}
|
|
243
160
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: AlarmWidgetAlarmsReloadComponent, deps: [{ token: i1.AlarmsViewService }, { token: i0.ChangeDetectorRef }, { token: i2.TranslateService }, { token: i3.WidgetGlobalAutoRefreshService }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
244
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: AlarmWidgetAlarmsReloadComponent, selector: "c8y-alarm-widget-alarms-reload", inputs: { isIntervalRefresh: "isIntervalRefresh", refreshInterval: "refreshInterval", config: "config", isLoading: "isLoading", isScrolling: "isScrolling",
|
|
161
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: AlarmWidgetAlarmsReloadComponent, selector: "c8y-alarm-widget-alarms-reload", inputs: { isIntervalRefresh: "isIntervalRefresh", refreshInterval: "refreshInterval", config: "config", isLoading: "isLoading", isScrolling: "isScrolling", isRefreshDisabled: "isRefreshDisabled" }, outputs: { onCountdownEnded: "onCountdownEnded", onRealTimeToggleChanged: "onRealTimeToggleChanged" }, viewQueries: [{ propertyName: "countdownIntervalComponent", first: true, predicate: CountdownIntervalComponent, descendants: true }], usesInheritance: true, usesOnChanges: true, ngImport: i0, template: "<div\n class=\"m-l-auto d-flex p-t-4 p-b-4\"\n *ngIf=\"!globalAutoRefreshEnabled\"\n>\n <div class=\"m-l-auto d-flex a-i-center\">\n <label\n class=\"m-b-0 m-r-8 text-label-small text-truncate flex-no-shrink\"\n title=\" {{ 'Auto refresh' | translate }}\"\n *ngIf=\"isIntervalRefresh && refreshInterval && config.isAutoRefreshEnabled\"\n >\n {{ 'Auto refresh' | translate }}\n </label>\n <div class=\"input-group\">\n <label\n class=\"toggle-countdown\"\n [class.toggle-countdown-disabled]=\"isRefreshDisabled\"\n [attr.aria-label]=\"toggleCountdownButtonTooltipText\"\n [tooltip]=\"toggleCountdownButtonTooltipText\"\n placement=\"bottom\"\n *ngIf=\"isIntervalRefresh && refreshInterval && config.isAutoRefreshEnabled\"\n [adaptivePosition]=\"false\"\n [container]=\"'body'\"\n [delay]=\"500\"\n >\n <input\n type=\"checkbox\"\n data-cy=\"c8y-alarms-widget--interval-toggle-button\"\n (click)=\"onToggleCountdownButtonState($event)\"\n />\n <c8y-countdown-interval\n *ngIf=\"isIntervalRefreshToggleOn\"\n [countdownInterval]=\"refreshInterval\"\n (countdownEnded)=\"countdownEnded()\"\n ></c8y-countdown-interval>\n <i\n c8yIcon=\"pause\"\n *ngIf=\"!isIntervalRefreshToggleOn\"\n ></i>\n </label>\n\n <div class=\"input-group-btn\">\n <button\n class=\"btn btn-default\"\n [attr.aria-label]=\"'Refresh' | translate\"\n [tooltip]=\"\n !isNewAlarmMessageCleared\n ? (REALTIME_UPDATE_ALARMS_MESSAGE | translate)\n : ('Refresh' | translate)\n \"\n placement=\"bottom\"\n type=\"button\"\n [adaptivePosition]=\"false\"\n [container]=\"'body'\"\n [delay]=\"500\"\n [disabled]=\"isRefreshDisabled || (isLoading | async)\"\n (click)=\"reload()\"\n data-cy=\"c8y-alarms-widget--reload-button\"\n >\n <span\n class=\"tag tag--info m-r-8\"\n *ngIf=\"!isNewAlarmMessageCleared\"\n >\n {{ 'New alarms' | translate }}\n </span>\n <i\n c8yIcon=\"refresh\"\n [ngClass]=\"{ 'icon-spin': isLoading | async }\"\n ></i>\n </button>\n </div>\n <div\n class=\"input-group-btn input-group-btn--last\"\n *ngIf=\"!isIntervalRefresh\"\n >\n <button\n class=\"c8y-realtime btn btn-default\"\n [attr.aria-label]=\"realtimeIconTitle\"\n [tooltip]=\"realtimeIconTitle\"\n placement=\"bottom\"\n type=\"button\"\n [container]=\"'body'\"\n (click)=\"toggleRealtimeState()\"\n [disabled]=\"isRefreshDisabled\"\n >\n <span\n class=\"c8y-pulse m-0\"\n [ngClass]=\"{\n active: isRealtimeToggleOn,\n inactive: !isRealtimeToggleOn\n }\"\n ></span>\n </button>\n </div>\n </div>\n </div>\n</div>\n", dependencies: [{ kind: "directive", type: i3.IconDirective, selector: "[c8yIcon]", inputs: ["c8yIcon"] }, { kind: "directive", type: i4.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i3.CountdownIntervalComponent, selector: "c8y-countdown-interval", inputs: ["countdownInterval"], outputs: ["countdownEnded"] }, { kind: "directive", type: i5.TooltipDirective, selector: "[tooltip], [tooltipHtml]", inputs: ["adaptivePosition", "tooltip", "placement", "triggers", "container", "containerClass", "boundariesElement", "isOpen", "isDisabled", "delay", "tooltipHtml", "tooltipPlacement", "tooltipIsOpen", "tooltipEnable", "tooltipAppendToBody", "tooltipAnimation", "tooltipClass", "tooltipContext", "tooltipPopupDelay", "tooltipFadeDuration", "tooltipTrigger"], outputs: ["tooltipChange", "onShown", "onHidden", "tooltipStateChanged"], exportAs: ["bs-tooltip"] }, { kind: "pipe", type: i3.C8yTranslatePipe, name: "translate" }, { kind: "pipe", type: i4.AsyncPipe, name: "async" }] }); }
|
|
245
162
|
}
|
|
246
163
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: AlarmWidgetAlarmsReloadComponent, decorators: [{
|
|
247
164
|
type: Component,
|
|
248
|
-
args: [{ selector: 'c8y-alarm-widget-alarms-reload', template: "<div\n class=\"m-l-auto d-flex p-t-4 p-b-4\"\n *ngIf=\"!globalAutoRefreshEnabled\"\n>\n <div class=\"m-l-auto d-flex a-i-center\">\n <label\n class=\"m-b-0 m-r-8 text-label-small text-truncate flex-no-shrink\"\n title=\" {{ 'Auto refresh' | translate }}\"\n *ngIf=\"isIntervalRefresh && refreshInterval && config.isAutoRefreshEnabled\"\n >\n {{ 'Auto refresh' | translate }}\n </label>\n <div class=\"input-group\">\n <label\n class=\"toggle-countdown\"\n [class.toggle-countdown-disabled]=\"
|
|
165
|
+
args: [{ selector: 'c8y-alarm-widget-alarms-reload', template: "<div\n class=\"m-l-auto d-flex p-t-4 p-b-4\"\n *ngIf=\"!globalAutoRefreshEnabled\"\n>\n <div class=\"m-l-auto d-flex a-i-center\">\n <label\n class=\"m-b-0 m-r-8 text-label-small text-truncate flex-no-shrink\"\n title=\" {{ 'Auto refresh' | translate }}\"\n *ngIf=\"isIntervalRefresh && refreshInterval && config.isAutoRefreshEnabled\"\n >\n {{ 'Auto refresh' | translate }}\n </label>\n <div class=\"input-group\">\n <label\n class=\"toggle-countdown\"\n [class.toggle-countdown-disabled]=\"isRefreshDisabled\"\n [attr.aria-label]=\"toggleCountdownButtonTooltipText\"\n [tooltip]=\"toggleCountdownButtonTooltipText\"\n placement=\"bottom\"\n *ngIf=\"isIntervalRefresh && refreshInterval && config.isAutoRefreshEnabled\"\n [adaptivePosition]=\"false\"\n [container]=\"'body'\"\n [delay]=\"500\"\n >\n <input\n type=\"checkbox\"\n data-cy=\"c8y-alarms-widget--interval-toggle-button\"\n (click)=\"onToggleCountdownButtonState($event)\"\n />\n <c8y-countdown-interval\n *ngIf=\"isIntervalRefreshToggleOn\"\n [countdownInterval]=\"refreshInterval\"\n (countdownEnded)=\"countdownEnded()\"\n ></c8y-countdown-interval>\n <i\n c8yIcon=\"pause\"\n *ngIf=\"!isIntervalRefreshToggleOn\"\n ></i>\n </label>\n\n <div class=\"input-group-btn\">\n <button\n class=\"btn btn-default\"\n [attr.aria-label]=\"'Refresh' | translate\"\n [tooltip]=\"\n !isNewAlarmMessageCleared\n ? (REALTIME_UPDATE_ALARMS_MESSAGE | translate)\n : ('Refresh' | translate)\n \"\n placement=\"bottom\"\n type=\"button\"\n [adaptivePosition]=\"false\"\n [container]=\"'body'\"\n [delay]=\"500\"\n [disabled]=\"isRefreshDisabled || (isLoading | async)\"\n (click)=\"reload()\"\n data-cy=\"c8y-alarms-widget--reload-button\"\n >\n <span\n class=\"tag tag--info m-r-8\"\n *ngIf=\"!isNewAlarmMessageCleared\"\n >\n {{ 'New alarms' | translate }}\n </span>\n <i\n c8yIcon=\"refresh\"\n [ngClass]=\"{ 'icon-spin': isLoading | async }\"\n ></i>\n </button>\n </div>\n <div\n class=\"input-group-btn input-group-btn--last\"\n *ngIf=\"!isIntervalRefresh\"\n >\n <button\n class=\"c8y-realtime btn btn-default\"\n [attr.aria-label]=\"realtimeIconTitle\"\n [tooltip]=\"realtimeIconTitle\"\n placement=\"bottom\"\n type=\"button\"\n [container]=\"'body'\"\n (click)=\"toggleRealtimeState()\"\n [disabled]=\"isRefreshDisabled\"\n >\n <span\n class=\"c8y-pulse m-0\"\n [ngClass]=\"{\n active: isRealtimeToggleOn,\n inactive: !isRealtimeToggleOn\n }\"\n ></span>\n </button>\n </div>\n </div>\n </div>\n</div>\n" }]
|
|
249
166
|
}], ctorParameters: () => [{ type: i1.AlarmsViewService }, { type: i0.ChangeDetectorRef }, { type: i2.TranslateService }, { type: i3.WidgetGlobalAutoRefreshService }], propDecorators: { isIntervalRefresh: [{
|
|
250
167
|
type: Input
|
|
251
168
|
}], refreshInterval: [{
|
|
@@ -256,7 +173,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
|
|
|
256
173
|
type: Input
|
|
257
174
|
}], isScrolling: [{
|
|
258
175
|
type: Input
|
|
259
|
-
}],
|
|
176
|
+
}], isRefreshDisabled: [{
|
|
260
177
|
type: Input
|
|
261
178
|
}], onCountdownEnded: [{
|
|
262
179
|
type: Output
|
|
@@ -266,4 +183,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
|
|
|
266
183
|
type: ViewChild,
|
|
267
184
|
args: [CountdownIntervalComponent, { static: false }]
|
|
268
185
|
}] } });
|
|
269
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWxhcm0td2lkZ2V0LWFsYXJtcy1yZWxvYWQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vd2lkZ2V0cy9pbXBsZW1lbnRhdGlvbnMvYWxhcm1zL2FsYXJtLXdpZGdldC1hbGFybXMtcmVsb2FkLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3dpZGdldHMvaW1wbGVtZW50YXRpb25zL2FsYXJtcy9hbGFybS13aWRnZXQtYWxhcm1zLXJlbG9hZC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBRUwsaUJBQWlCLEVBQ2pCLFNBQVMsRUFDVCxZQUFZLEVBQ1osS0FBSyxFQUlMLE1BQU0sRUFFTixTQUFTLEVBQ1YsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUNMLDBCQUEwQixFQUMxQixPQUFPLEVBQ1AsOEJBQThCLEVBQy9CLE1BQU0scUJBQXFCLENBQUM7QUFDN0IsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDL0QsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDdkQsT0FBTyxFQUFFLGVBQWUsRUFBZ0IsTUFBTSxNQUFNLENBQUM7QUFDckQsT0FBTyxFQUFFLE1BQU0sRUFBRSxHQUFHLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM3QyxPQUFPLEVBQXlCLHNCQUFzQixFQUFFLE1BQU0sMkJBQTJCLENBQUM7Ozs7Ozs7QUFNMUYsTUFBTSxPQUFPLGdDQUFnQztJQXFFM0MsWUFDVSxpQkFBb0MsRUFDcEMsS0FBd0IsRUFDeEIsZ0JBQWtDLEVBQ2xDLDhCQUE4RDtRQUg5RCxzQkFBaUIsR0FBakIsaUJBQWlCLENBQW1CO1FBQ3BDLFVBQUssR0FBTCxLQUFLLENBQW1CO1FBQ3hCLHFCQUFnQixHQUFoQixnQkFBZ0IsQ0FBa0I7UUFDbEMsbUNBQThCLEdBQTlCLDhCQUE4QixDQUFnQztRQXRFL0Qs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QWdDO2tNQVdqQyxpQkFBaUI7c0JBQXpCLEtBQUs7Z0JBSUcsZUFBZTtzQkFBdkIsS0FBSztnQkFJRyxNQUFNO3NCQUFkLEtBQUs7Z0JBSUcsU0FBUztzQkFBakIsS0FBSztnQkFJRyxXQUFXO3NCQUFuQixLQUFLO2dCQUNHLFVBQVU7c0JBQWxCLEtBQUs7Z0JBSUksZ0JBQWdCO3NCQUF6QixNQUFNO2dCQUlHLHVCQUF1QjtzQkFBaEMsTUFBTTtnQkFHUCwwQkFBMEI7c0JBRHpCLFNBQVM7dUJBQUMsMEJBQTBCLEVBQUUsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQWZ0ZXJWaWV3SW5pdCxcbiAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gIENvbXBvbmVudCxcbiAgRXZlbnRFbWl0dGVyLFxuICBJbnB1dCxcbiAgT25DaGFuZ2VzLFxuICBPbkRlc3Ryb3ksXG4gIE9uSW5pdCxcbiAgT3V0cHV0LFxuICBTaW1wbGVDaGFuZ2VzLFxuICBWaWV3Q2hpbGRcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge1xuICBDb3VudGRvd25JbnRlcnZhbENvbXBvbmVudCxcbiAgZ2V0dGV4dCxcbiAgV2lkZ2V0R2xvYmFsQXV0b1JlZnJlc2hTZXJ2aWNlXG59IGZyb20gJ0BjOHkvbmd4LWNvbXBvbmVudHMnO1xuaW1wb3J0IHsgQWxhcm1zVmlld1NlcnZpY2UgfSBmcm9tICdAYzh5L25neC1jb21wb25lbnRzL2FsYXJtcyc7XG5pbXBvcnQgeyBUcmFuc2xhdGVTZXJ2aWNlIH0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSc7XG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QsIFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgZmlsdGVyLCB0YXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBBbGFybUxpc3RXaWRnZXRDb25maWcsIEdMT0JBTF9JTlRFUlZBTF9PUFRJT04gfSBmcm9tICcuL2FsYXJtLWxpc3Qtd2lkZ2V0Lm1vZGVsJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnYzh5LWFsYXJtLXdpZGdldC1hbGFybXMtcmVsb2FkJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2FsYXJtLXdpZGdldC1hbGFybXMtcmVsb2FkLmNvbXBvbmVudC5odG1sJ1xufSlcbmV4cG9ydCBjbGFzcyBBbGFybVdpZGdldEFsYXJtc1JlbG9hZENvbXBvbmVudFxuICBpbXBsZW1lbnRzIE9uSW5pdCwgQWZ0ZXJWaWV3SW5pdCwgT25DaGFuZ2VzLCBPbkRlc3Ryb3lcbntcbiAgcmVhZG9ubHkgUkVBTFRJTUVfVVBEQVRFX0FMQVJNU19NRVNTQUdFID0gdGhpcy5hbGFybXNWaWV3U2VydmljZS5SRUFMVElNRV9VUERBVEVfQUxBUk1TX01FU1NBR0U7XG5cbiAgLyoqXG4gICAqIFN0YXRlIG9mIHRoaXMgYm9vbGVhbiBkZXBlbmRzIG9uIGFuIEFwcGxpY2F0aW9uIE9wdGlvbnMgXCJhbGFybXNSZWZyZXNoVHlwZVwiIHNldHRpbmcuXG4gICAqL1xuICBASW5wdXQoKSBpc0ludGVydmFsUmVmcmVzaDogYm9vbGVhbjtcbiAgLyoqXG4gICAqIEN1cnJlbnQgcmVmcmVzaCBpbnRlcnZhbCBzZXQgaW4gYSB3aWRnZXQgY29uZmlnLlxuICAgKi9cbiAgQElucHV0KCkgcmVmcmVzaEludGVydmFsOiBudW1iZXI7XG4gIC8qKlxuICAgKiBBbGFybSB3aWRnZXRzIGNvbmZpZy5cbiAgICovXG4gIEBJbnB1dCgpIGNvbmZpZzogQWxhcm1MaXN0V2lkZ2V0Q29uZmlnO1xuICAvKipcbiAgICogQ3VycmVudCBpc0xvYWRpbmcgc3RhdGUuIEJhc2VkIG9uIGl0IG5leHQgY291bnRkb3duIGN5Y2xlIGlzIGJlaW5nIHN0YXJ0ZWQuXG4gICAqL1xuICBASW5wdXQoKSBpc0xvYWRpbmc6IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPjtcbiAgLyoqXG4gICAqIEluZGljYXRlcyB3aGV0aGVyIHRoZSBhbGFybSBsaXN0IGlzIGJlaW5nIHNjcm9sbGVkIG9yIG5vdC5cbiAgICovXG4gIEBJbnB1dCgpIGlzU2Nyb2xsaW5nOiBib29sZWFuO1xuICBASW5wdXQoKSBpc0Rpc2FibGVkID0gZmFsc2U7XG4gIC8qKlxuICAgKiBJbmRpY2F0ZXMgdGhhdCBhIGNvdW50ZG93biBjeWNsZSBoYXMgZW5kZWQuXG4gICAqL1xuICBAT3V0cHV0KCkgb25Db3VudGRvd25FbmRlZCA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcbiAgLyoqXG4gICAqIEVtaXR0ZWQgdG8gaW5kaWNhdGUgdGhhdCB0aGUgd2lkZ2V0cyByZWFsdGltZSBidXR0b24gc3RhdGUgaGFzIGNoYW5nZWQuXG4gICAqL1xuICBAT3V0cHV0KCkgb25SZWFsVGltZVRvZ2dsZUNoYW5nZWQ6IEV2ZW50RW1pdHRlcjxib29sZWFuPiA9IG5ldyBFdmVudEVtaXR0ZXI8Ym9vbGVhbj4oKTtcblxuICBAVmlld0NoaWxkKENvdW50ZG93bkludGVydmFsQ29tcG9uZW50LCB7IHN0YXRpYzogZmFsc2UgfSlcbiAgY291bnRkb3duSW50ZXJ2YWxDb21wb25lbnQ6IENvdW50ZG93bkludGVydmFsQ29tcG9uZW50O1xuICAvKipcbiAgICogQ29udHJvbHMgdGhlIHZpc2liaWxpdHkgb2YgdGhlIGNvdW50ZG93biB0aW1lciBjb21wb25lbnQgaW4gdGhlIGN1cnJlbnQgY29tcG9uZW50J3MgVUkuXG4gICAqL1xuICBoaWRlQ291bnRkb3duOiBib29sZWFuO1xuICAvKipcbiAgICogVG9vbHRpcCBmb3IgYSBuZXcgcmVhbHRpbWUgYWxhcm0gaW5kaWNhdG9yLlxuICAgKi9cbiAgcmVhbHRpbWVJY29uVGl0bGU6IHN0cmluZztcbiAgLyoqXG4gICAqIEluZGljYXRlcyB3aGV0aGVyIHRoZSBjb3VudGRvd24gaGFzIGJlZW4gY2xlYXJlZCBhbHJlYWR5LlxuICAgKi9cbiAgaXNOZXdBbGFybU1lc3NhZ2VDbGVhcmVkID0gdHJ1ZTtcbiAgLyoqXG4gICAqIEluZGljYXRlcyB0aGUgY3VycmVudCBzdGF0ZSBvZiBhbiBpbnRlcnZhbCByZWZyZXNoIHRvZ2dsZSBidXR0b24uXG4gICAqL1xuICBpc0ludGVydmFsUmVmcmVzaFRvZ2dsZU9uOiBib29sZWFuO1xuICAvKipcbiAgICogSW5kaWNhdGVzIHRoZSBjdXJyZW50IHN0YXRlIG9mIGFuIHJlYWx0aW1lIHRvZ2dsZSBidXR0b24uXG4gICAqL1xuICBpc1JlYWx0aW1lVG9nZ2xlT246IGJvb2xlYW47XG4gIC8qKlxuICAgKiBIb2xkcyB0aGUgc3Vic2NyaXB0aW9uIHRvIGEgY291bnRkb3duIG9ic2VydmFibGUuXG4gICAqL1xuICBjb3VudGRvd25TdWJzY3JpcHRpb246IFN1YnNjcmlwdGlvbjtcbiAgLyoqXG4gICAqIEluZGljYXRlcyB3aGV0aGVyIHRoZSBjb3VudGRvd24gaGFzIGJlZW4gbWFudWFsbHkgZGlzYWJsZWQgYnkgdGhlIHVzZXIuXG4gICAqL1xuICBtYW51YWxseURpc2FibGVkQ291bnRkb3duID0gZmFsc2U7XG5cbiAgdG9nZ2xlQ291bnRkb3duQnV0dG9uVG9vbHRpcFRleHQ6IHN0cmluZztcbiAgZ2xvYmFsQXV0b1JlZnJlc2hFbmFibGVkOiBib29sZWFuO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgYWxhcm1zVmlld1NlcnZpY2U6IEFsYXJtc1ZpZXdTZXJ2aWNlLFxuICAgIHByaXZhdGUgY2RSZWY6IENoYW5nZURldGVjdG9yUmVmLFxuICAgIHByaXZhdGUgdHJhbnNsYXRlU2VydmljZTogVHJhbnNsYXRlU2VydmljZSxcbiAgICBwcml2YXRlIHdpZGdldEdsb2JhbEF1dG9SZWZyZXNoU2VydmljZTogV2lkZ2V0R2xvYmFsQXV0b1JlZnJlc2hTZXJ2aWNlXG4gICkge31cblxuICBuZ09uSW5pdCgpIHtcbiAgICBpZiAoIXRoaXMuaXNJbnRlcnZhbFJlZnJlc2gpIHtcbiAgICAgIHRoaXMuaXNSZWFsdGltZVRvZ2dsZU9uID0gdGhpcy5jb25maWcuaXNBdXRvUmVmcmVzaEVuYWJsZWQ7XG4gICAgICB0aGlzLnJlYWx0aW1lSWNvblRpdGxlID0gdGhpcy5nZXRSZWFsdGltZUljb25UaXRsZSgpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmlzSW50ZXJ2YWxSZWZyZXNoVG9nZ2xlT24gPVxuICAgICAgICAhdGhpcy5pc0Rpc2FibGVkICYmICh0aGlzLmNvbmZpZy5pc0F1dG9SZWZyZXNoRW5hYmxlZCB8fCAhIXRoaXMucmVmcmVzaEludGVydmFsKTtcbiAgICAgIHRoaXMudXBkYXRlQ291bnRkb3duQnV0dG9uVG9vbHRpcFRleHQoKTtcbiAgICB9XG4gIH1cblxuICBuZ0FmdGVyVmlld0luaXQoKSB7XG4gICAgaWYgKHRoaXMuaXNJbnRlcnZhbFJlZnJlc2ggJiYgdGhpcy5yZWZyZXNoSW50ZXJ2YWwpIHtcbiAgICAgIHRoaXMuc3RhcnRDb3VudGRvd24oKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5nbG9iYWxBdXRvUmVmcmVzaEVuYWJsZWQpIHtcbiAgICAgIHRoaXMud2lkZ2V0R2xvYmFsQXV0b1JlZnJlc2hTZXJ2aWNlLmNvdW50ZG93bkFjdGlvbnMuY291bnRkb3duRW5kZWQkXG4gICAgICAgIC5waXBlKHRhcCgoKSA9PiB0aGlzLm9uQ291bnRkb3duRW5kZWQuZW1pdCgpKSlcbiAgICAgICAgLnN1YnNjcmliZSgpO1xuICAgIH1cbiAgfVxuXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcbiAgICBjb25zdCB7IGlzRGlzYWJsZWQsIGNvbmZpZyB9ID0gY2hhbmdlcztcbiAgICBpZiAoY29uZmlnKSB7XG4gICAgICB0aGlzLmdsb2JhbEF1dG9SZWZyZXNoRW5hYmxlZCA9IHRoaXMuY29uZmlnLnJlZnJlc2hPcHRpb24gPT09IEdMT0JBTF9JTlRFUlZBTF9PUFRJT047XG4gICAgfVxuICAgIGlmIChpc0Rpc2FibGVkKSB7XG4gICAgICB0aGlzLmlzSW50ZXJ2YWxSZWZyZXNoVG9nZ2xlT24gPVxuICAgICAgICAhdGhpcy5pc0Rpc2FibGVkICYmICh0aGlzLmNvbmZpZy5pc0F1dG9SZWZyZXNoRW5hYmxlZCB8fCAhIXRoaXMucmVmcmVzaEludGVydmFsKTtcbiAgICAgIHRoaXMudXBkYXRlQ291bnRkb3duQnV0dG9uVG9vbHRpcFRleHQoZ2V0dGV4dCgnRGlzYWJsZWQnKSk7XG4gICAgfVxuXG4gICAgaWYgKFxuICAgICAgIXRoaXMuaXNJbnRlcnZhbFJlZnJlc2ggfHxcbiAgICAgIHRoaXMubWFudWFsbHlEaXNhYmxlZENvdW50ZG93biB8fFxuICAgICAgIXRoaXMuY29uZmlnLmlzQXV0b1JlZnJlc2hFbmFibGVkXG4gICAgKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5oYW5kbGVTY3JvbGxpbmcoKTtcbiAgfVxuXG4gIG5nT25EZXN0cm95KCkge1xuICAgIGlmICh0aGlzLmNvdW50ZG93blN1YnNjcmlwdGlvbikge1xuICAgICAgdGhpcy5jb3VudGRvd25TdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogVGhpcyBmdW5jdGlvbiBsaXN0ZW5zIGZvciBjaGFuZ2VzIGluIHRoZSBgaXNMb2FkaW5nYCBvYnNlcnZhYmxlLCBmaWx0ZXJpbmcgb3V0IGFueSB0cnV0aHkgdmFsdWVzLlxuICAgKiBPbmNlIGEgZmFsc3kgdmFsdWUgaXMgZGV0ZWN0ZWQgKGluZGljYXRpbmcgdGhhdCBsb2FkaW5nIGhhcyBmaW5pc2hlZCksIGl0IGF0dGVtcHRzIHRvIHN0YXJ0IHRoZSBjb3VudGRvd24uXG4gICAqXG4gICAqIElNUE9SVEFOVDogSWYgdGhlIHdpZGdldCdzIGNvbmZpZ3VyYXRpb24gKHJlZnJlc2hJbnRlcnZhbCwgY2hlY2sgdGVtcGxhdGUpIGlzIG5vdCBzZXQgcHJpb3IgdG8gZXhlY3V0aW5nIGNvdW50ZG93bkludGVydmFsQ29tcG9uZW50Py5zdGFydCxcbiAgICogdGhlIGNvdW50ZG93biBpbnRlcnZhbCB3aWxsIG5vdCBzdGFydCFcbiAgICovXG4gIHN0YXJ0Q291bnRkb3duKCk6IHZvaWQge1xuICAgIHRoaXMuY291bnRkb3duU3Vic2NyaXB0aW9uID0gdGhpcy5pc0xvYWRpbmdcbiAgICAgIC5waXBlKFxuICAgICAgICBmaWx0ZXIoaXNMb2FkaW5nID0+ICFCb29sZWFuKGlzTG9hZGluZykpLFxuICAgICAgICB0YXAoKCkgPT4ge1xuICAgICAgICAgIHRoaXMuY291bnRkb3duSW50ZXJ2YWxDb21wb25lbnQ/LnN0YXJ0KCk7XG4gICAgICAgIH0pXG4gICAgICApXG4gICAgICAuc3Vic2NyaWJlKCk7XG4gIH1cblxuICAvKipcbiAgICogSGFuZGxlcyB0aGUgdG9nZ2xlIHN0YXRlIG9mIHRoZSBjb3VudGRvd24gb24gYnV0dG9uIGNsaWNrLlxuICAgKlxuICAgKiBUaGlzIG1ldGhvZCBpcyB0cmlnZ2VyZWQgYnkgYSBtb3VzZSBldmVudCwgdHlwaWNhbGx5IGEgY2xpY2sgb24gdGhlIGNvdW50ZG93biB0b2dnbGUgYnV0dG9uLlxuICAgKiBJdCB0b2dnbGVzIGBpc0ludGVydmFsUmVmcmVzaFRvZ2dsZU9uYCB0byByZWZsZWN0IHRoZSBjdXJyZW50IHN0YXRlIG9mIHRoZSBjb3VudGRvd24gdGltZXIuXG4gICAqXG4gICAqIC0gSWYgYGlzSW50ZXJ2YWxSZWZyZXNoVG9nZ2xlT25gIGlzIHNldCB0byBmYWxzZSwgaW5kaWNhdGluZyB0aGF0IHRoZSBjb3VudGRvd24gc2hvdWxkIGJlIHN0b3BwZWQsXG4gICAqICAgYGRpc2FibGVDb3VudGRvd25gIGlzIGNhbGxlZCwgYW5kIGBtYW51YWxseURpc2FibGVkQ291bnRkb3duYCBpcyBzZXQgdG8gdHJ1ZS5cbiAgICpcbiAgICogLSBJZiBgaXNJbnRlcnZhbFJlZnJlc2hUb2dnbGVPbmAgaXMgdHJ1ZSBhbmQgdGhlIGNvdW50ZG93biBzdWJzY3JpcHRpb24gaXMgY2xvc2VkLCBpbmRpY2F0aW5nIHRoYXRcbiAgICogICB0aGUgY291bnRkb3duIGNhbiBiZSBzdGFydGVkLCBgZW5hYmxlQ291bnRkb3duYCBpcyBjYWxsZWQsIGFuZCBgbWFudWFsbHlEaXNhYmxlZENvdW50ZG93bmBcbiAgICogICBpcyBzZXQgdG8gZmFsc2UuXG4gICAqXG4gICAqIEBwYXJhbSAkZXZlbnQgLSBUaGUgTW91c2VFdmVudCB0aGF0IHRyaWdnZXJlZCB0aGlzIG1ldGhvZC5cbiAgICovXG4gIG9uVG9nZ2xlQ291bnRkb3duQnV0dG9uU3RhdGUoJGV2ZW50OiBNb3VzZUV2ZW50KTogdm9pZCB7XG4gICAgJGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgdGhpcy5pc0ludGVydmFsUmVmcmVzaFRvZ2dsZU9uID0gIXRoaXMuaXNEaXNhYmxlZCAmJiAhdGhpcy5pc0ludGVydmFsUmVmcmVzaFRvZ2dsZU9uO1xuICAgIHRoaXMudXBkYXRlQ291bnRkb3duQnV0dG9uVG9vbHRpcFRleHQoKTtcblxuICAgIGlmICghdGhpcy5pc0ludGVydmFsUmVmcmVzaFRvZ2dsZU9uKSB7XG4gICAgICB0aGlzLmRpc2FibGVDb3VudGRvd24oKTtcbiAgICAgIHRoaXMubWFudWFsbHlEaXNhYmxlZENvdW50ZG93biA9IHRydWU7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3Qgb25SZWZyZXNoVG9nZ2xlT24gPSB0aGlzLmlzSW50ZXJ2YWxSZWZyZXNoVG9nZ2xlT24gJiYgdGhpcy5jb3VudGRvd25TdWJzY3JpcHRpb24uY2xvc2VkO1xuXG4gICAgaWYgKG9uUmVmcmVzaFRvZ2dsZU9uKSB7XG4gICAgICB0aGlzLmVuYWJsZUNvdW50ZG93bigpO1xuICAgICAgdGhpcy5tYW51YWxseURpc2FibGVkQ291bnRkb3duID0gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFdyYXBwZXIgbWV0aG9kIHdoZXJlIGl0J3MgbmFtZSBiZXR0ZXIgZGVzY3JpYmVzIGEgY29udGV4dCB3aGVyZSBpdCB3YXMgY2FsbGVkLlxuICAgKi9cbiAgY291bnRkb3duRW5kZWQoKTogdm9pZCB7XG4gICAgdGhpcy5hdXRvUmVmcmVzaExpc3QoKTtcbiAgfVxuXG4gIHJlbG9hZCgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5pc0ludGVydmFsUmVmcmVzaCkge1xuICAgICAgdGhpcy5hdXRvUmVmcmVzaExpc3QoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5vbkNvdW50ZG93bkVuZGVkLmVtaXQoKTtcbiAgICAgIHRoaXMuaXNOZXdBbGFybU1lc3NhZ2VDbGVhcmVkID0gdHJ1ZTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogVG9nZ2xlcyB0aGUgcmVhbC10aW1lIHN0YXRlIG9mIHRoZSBjb21wb25lbnQuXG4gICAqXG4gICAqIFRoaXMgbWV0aG9kIHN3aXRjaGVzIHRoZSBgaXNSZWFsdGltZVRvZ2dsZU9uYCBzdGF0ZSBiZXR3ZWVuIHRydWUgYW5kIGZhbHNlLlxuICAgKiBXaGVuIHRoZSBzdGF0ZSBpcyB0b2dnbGVkLCBpdCBlbWl0cyB0aGUgY3VycmVudCBzdGF0ZSB0aHJvdWdoIGBvblJlYWxUaW1lVG9nZ2xlQ2hhbmdlZGAgZXZlbnQuXG4gICAqIEl0IGFsc28gdXBkYXRlcyB0aGUgYHJlYWx0aW1lSWNvblRpdGxlYCBiYXNlZCBvbiB0aGUgbmV3IHN0YXRlLlxuICAgKi9cbiAgdG9nZ2xlUmVhbHRpbWVTdGF0ZSgpOiB2b2lkIHtcbiAgICB0aGlzLmlzUmVhbHRpbWVUb2dnbGVPbiA9ICF0aGlzLmlzUmVhbHRpbWVUb2dnbGVPbjtcbiAgICB0aGlzLm9uUmVhbFRpbWVUb2dnbGVDaGFuZ2VkLmVtaXQodGhpcy5pc1JlYWx0aW1lVG9nZ2xlT24pO1xuICAgIHRoaXMucmVhbHRpbWVJY29uVGl0bGUgPSB0aGlzLmdldFJlYWx0aW1lSWNvblRpdGxlKCk7XG4gIH1cblxuICAvKipcbiAgICogU3RvcHMgdGhlIGNvdW50ZG93biBhbmQgdHJpZ2dlcnMgYSByZWZyZXNoIGFjdGlvbi5cbiAgICogVGhpcyBmdW5jdGlvbiBpcyByZXNwb25zaWJsZSBmb3IgaGFsdGluZyB0aGUgY291bnRkb3duIGludGVydmFsIGNvbXBvbmVudCdzIG9wZXJhdGlvbi5cbiAgICogQWZ0ZXIgc3RvcHBpbmcgdGhlIGNvdW50ZG93biwgaXQgZW1pdHMgYW4gYG9uQ291bnRkb3duRW5kZWRgIGV2ZW50LlxuICAgKiBUaGlzIGV2ZW50IGlzIHVzZWQgdG8gaW5mb3JtIGV4dGVybmFsIGNvbXBvbmVudHMgdGhhdCB0aGUgY291bnRkb3duIGhhcyBlbmRlZCxcbiAgICogdHlwaWNhbGx5IHByb21wdGluZyB0aGVtIHRvIHJlbG9hZCBvciByZWZyZXNoIHRoZWlyIGRhdGEuXG4gICAqL1xuICBhdXRvUmVmcmVzaExpc3QoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuaXNJbnRlcnZhbFJlZnJlc2hUb2dnbGVPbiAmJiB0aGlzLmNvbmZpZy5pc0F1dG9SZWZyZXNoRW5hYmxlZCkge1xuICAgICAgdGhpcy5jb3VudGRvd25JbnRlcnZhbENvbXBvbmVudC5zdG9wKCk7XG4gICAgfVxuICAgIHRoaXMub25Db3VudGRvd25FbmRlZC5lbWl0KCk7XG4gIH1cblxuICAvKipcbiAgICogU2V0cyB0aGUgdG9vbHRpcCBtZXNzYWdlIGZvciBhIG5ldyByZWFsdGltZSBhbGFybSBpbmRpY2F0b3IuXG4gICAqIEByZXR1cm5zIFRvb2x0aXAgbWVzc2FnZS5cbiAgICovXG4gIGdldFJlYWx0aW1lSWNvblRpdGxlKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuaXNSZWFsdGltZVRvZ2dsZU9uXG4gICAgICA/IHRoaXMudHJhbnNsYXRlU2VydmljZS5pbnN0YW50KGdldHRleHQoJ1JlYWx0aW1lIGFjdGl2ZScpKVxuICAgICAgOiB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudChnZXR0ZXh0KCdSZWFsdGltZSBpbmFjdGl2ZScpKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBNYW5hZ2VzIHRoZSBjb3VudGRvd24gdGltZXIncyB2aXNpYmlsaXR5IGFuZCBzdGF0ZSBpbiByZXNwb25zZSB0byB1c2VyIHNjcm9sbGluZy5cbiAgICpcbiAgICogVGhpcyBtZXRob2QgdG9nZ2xlcyB0aGUgY291bnRkb3duIHRpbWVyIGJhc2VkIG9uIHRoZSB1c2VyJ3Mgc2Nyb2xsaW5nIGJlaGF2aW9yLiBJdCB1c2VzXG4gICAqIHRoZSBgZGlzYWJsZUNvdW50ZG93bmAgYW5kIGBlbmFibGVDb3VudGRvd25gIG1ldGhvZHMgZm9yIGhhbmRsaW5nIHRoZSBjb3VudGRvd24gc3RhdGUuXG4gICAqXG4gICAqIC0gSWYgdGhlIHVzZXIgaXMgc2Nyb2xsaW5nIGRvd24gd2hpbGUgdGhlIGNvdW50ZG93biBpcyB2aXNpYmxlIChgaXNTY3JvbGxpbmdgIGlzIHRydWUgYW5kXG4gICAqICAgYGhpZGVDb3VudGRvd25gIGlzIGZhbHNlKSwgYGRpc2FibGVDb3VudGRvd25gIGlzIGNhbGxlZCB0byBzdG9wIGFuZCBoaWRlIHRoZSBjb3VudGRvd24sXG4gICAqICAgYW5kIGBpc0ludGVydmFsUmVmcmVzaFRvZ2dsZU9uYCBpcyBzZXQgdG8gZmFsc2UuXG4gICAqXG4gICAqIC0gSWYgdGhlIHVzZXIgaGFzIHN0b3BwZWQgc2Nyb2xsaW5nLCB0aGUgY291bnRkb3duIHN1YnNjcmlwdGlvbiBpcyBjbG9zZWQsIGFuZCB0aGUgY291bnRkb3duXG4gICAqICAgaXMgaGlkZGVuIChgIWlzU2Nyb2xsaW5nYCwgYGNvdW50ZG93blN1YnNjcmlwdGlvbj8uY2xvc2VkYCwgYGhpZGVDb3VudGRvd25gKSwgYGVuYWJsZUNvdW50ZG93bmBcbiAgICogICBpcyBjYWxsZWQgdG8gc2hvdyBhbmQgcmVzdGFydCB0aGUgY291bnRkb3duLCBhbmQgYGlzSW50ZXJ2YWxSZWZyZXNoVG9nZ2xlT25gIGlzIHNldCB0byB0cnVlLlxuICAgKi9cbiAgaGFuZGxlU2Nyb2xsaW5nKCk6IHZvaWQge1xuICAgIC8vIENoZWNrcyBpZiB0aGUgdXNlciBoYXMgc2Nyb2xsZWQgZG93biB3aGlsZSB0aGUgY291bnRkb3duIGlzIHZpc2libGVcbiAgICBjb25zdCBvblVzZXJTY3JvbGxEb3duSGlkZSA9IHRoaXMuaXNTY3JvbGxpbmcgJiYgIXRoaXMuaGlkZUNvdW50ZG93bjtcblxuICAgIGlmIChvblVzZXJTY3JvbGxEb3duSGlkZSkge1xuICAgICAgdGhpcy5kaXNhYmxlQ291bnRkb3duKCk7XG4gICAgICB0aGlzLmlzSW50ZXJ2YWxSZWZyZXNoVG9nZ2xlT24gPSBmYWxzZTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBDaGVja3MgaWYgdGhlIHVzZXIgaGFzIHN0b3BwZWQgc2Nyb2xsaW5nIGFuZCB0aGUgY291bnRkb3duIGlzIGN1cnJlbnRseSBoaWRkZW5cbiAgICBjb25zdCBvblVzZXJTY3JvbGxUb3BTaG93ID1cbiAgICAgICF0aGlzLmlzU2Nyb2xsaW5nICYmIHRoaXMuY291bnRkb3duU3Vic2NyaXB0aW9uPy5jbG9zZWQgJiYgdGhpcy5oaWRlQ291bnRkb3duO1xuXG4gICAgaWYgKG9uVXNlclNjcm9sbFRvcFNob3cpIHtcbiAgICAgIHRoaXMuaXNJbnRlcnZhbFJlZnJlc2hUb2dnbGVPbiA9IHRydWU7XG4gICAgICB0aGlzLmVuYWJsZUNvdW50ZG93bigpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBFbmFibGVzIGFuZCBzdGFydHMgdGhlIGNvdW50ZG93biB0aW1lci5cbiAgICpcbiAgICogVGhpcyBtZXRob2QgbWFrZXMgdGhlIGNvdW50ZG93biB2aXNpYmxlIChgaGlkZUNvdW50ZG93bmAgaXMgc2V0IHRvIGZhbHNlKSBhbmQgdGhlblxuICAgKiBzdGFydHMgdGhlIGNvdW50ZG93biBwcm9jZXNzLiBJdCBlbnN1cmVzIHRoZSBjb3VudGRvd24gdGltZXIgaXMgdXBkYXRlZCBpbW1lZGlhdGVseVxuICAgKiBieSB0cmlnZ2VyaW5nIGNoYW5nZSBkZXRlY3Rpb24gd2l0aCBgY2RSZWYuZGV0ZWN0Q2hhbmdlcygpYCBiZWZvcmUgc3RhcnRpbmcgdGhlIGNvdW50ZG93bi5cbiAgICogVGhpcyBtZXRob2QgZW5jYXBzdWxhdGVzIHRoZSBsb2dpYyByZXF1aXJlZCB0byBpbml0aWF0ZSB0aGUgY291bnRkb3duIHRpbWVyLlxuICAgKi9cbiAgZW5hYmxlQ291bnRkb3duKCk6IHZvaWQge1xuICAgIHRoaXMuaGlkZUNvdW50ZG93biA9IGZhbHNlO1xuICAgIC8vIFByZXZlbnRzIHRoZSBjb3VudGRvd24gZnJvbSBnZXR0aW5nIHN0dWNrIG9uIGFuIGluaXRpYWwgdmFsdWUuXG4gICAgdGhpcy5jZFJlZi5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgdGhpcy5zdGFydENvdW50ZG93bigpO1xuICB9XG5cbiAgLyoqXG4gICAqIERpc2FibGVzIGFuZCBoaWRlcyB0aGUgY291bnRkb3duIHRpbWVyLlxuICAgKlxuICAgKiBUaGlzIG1ldGhvZCBzdG9wcyB0aGUgb25nb2luZyBjb3VudGRvd24gcHJvY2VzcyBieSB1bnN1YnNjcmliaW5nIGZyb20gYGNvdW50ZG93blN1YnNjcmlwdGlvbmBcbiAgICogYW5kIHN0b3BwaW5nIHRoZSBgY291bnRkb3duSW50ZXJ2YWxDb21wb25lbnRgIGlmIGl0IGV4aXN0cy4gSXQgdGhlbiBoaWRlcyB0aGUgY291bnRkb3duIHRpbWVyXG4gICAqIGJ5IHNldHRpbmcgYGhpZGVDb3VudGRvd25gIHRvIHRydWUuIFRoaXMgbWV0aG9kIGVuY2Fwc3VsYXRlcyB0aGUgbG9naWMgcmVxdWlyZWQgdG8gaGFsdCBhbmRcbiAgICogY29uY2VhbCB0aGUgY291bnRkb3duIHRpbWVyLlxuICAgKi9cbiAgZGlzYWJsZUNvdW50ZG93bigpOiB2b2lkIHtcbiAgICB0aGlzLmNvdW50ZG93blN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgIHRoaXMuY291bnRkb3duSW50ZXJ2YWxDb21wb25lbnQ/LnN0b3AoKTtcbiAgICB0aGlzLmhpZGVDb3VudGRvd24gPSB0cnVlO1xuICB9XG5cbiAgLyoqXG4gICAqIFVwZGF0ZXMgdGhlIGNvdW50ZG93biBidXR0b24gdG9vbHRpcCB0ZXh0IGJhc2VkIG9uIHRoZSBzdGF0ZSBvZiB0aGUgaW50ZXJ2YWwgcmVmcmVzaCB0b2dnbGUgc3RhdGUuXG4gICAqL1xuICBwcml2YXRlIHVwZGF0ZUNvdW50ZG93bkJ1dHRvblRvb2x0aXBUZXh0KGN1c3RvbVRleHQ/OiBzdHJpbmcpOiB2b2lkIHtcbiAgICBpZiAoY3VzdG9tVGV4dCkge1xuICAgICAgdGhpcy50b2dnbGVDb3VudGRvd25CdXR0b25Ub29sdGlwVGV4dCA9IGN1c3RvbVRleHQ7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMudG9nZ2xlQ291bnRkb3duQnV0dG9uVG9vbHRpcFRleHQgPSB0aGlzLmlzSW50ZXJ2YWxSZWZyZXNoVG9nZ2xlT25cbiAgICAgID8gdGhpcy50cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQoZ2V0dGV4dCgnRGlzYWJsZSBhdXRvIHJlZnJlc2gnKSlcbiAgICAgIDogdGhpcy50cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQoZ2V0dGV4dCgnRW5hYmxlIGF1dG8gcmVmcmVzaCcpKTtcbiAgfVxufVxuIiwiPGRpdlxuICBjbGFzcz1cIm0tbC1hdXRvIGQtZmxleCBwLXQtNCBwLWItNFwiXG4gICpuZ0lmPVwiIWdsb2JhbEF1dG9SZWZyZXNoRW5hYmxlZFwiXG4+XG4gIDxkaXYgY2xhc3M9XCJtLWwtYXV0byBkLWZsZXggYS1pLWNlbnRlclwiPlxuICAgIDxsYWJlbFxuICAgICAgY2xhc3M9XCJtLWItMCBtLXItOCB0ZXh0LWxhYmVsLXNtYWxsIHRleHQtdHJ1bmNhdGUgZmxleC1uby1zaHJpbmtcIlxuICAgICAgdGl0bGU9XCIge3sgJ0F1dG8gcmVmcmVzaCcgfCB0cmFuc2xhdGUgfX1cIlxuICAgICAgKm5nSWY9XCJpc0ludGVydmFsUmVmcmVzaCAmJiByZWZyZXNoSW50ZXJ2YWwgJiYgY29uZmlnLmlzQXV0b1JlZnJlc2hFbmFibGVkXCJcbiAgICA+XG4gICAgICB7eyAnQXV0byByZWZyZXNoJyB8IHRyYW5zbGF0ZSB9fVxuICAgIDwvbGFiZWw+XG4gICAgPGRpdiBjbGFzcz1cImlucHV0LWdyb3VwXCI+XG4gICAgICA8bGFiZWxcbiAgICAgICAgY2xhc3M9XCJ0b2dnbGUtY291bnRkb3duXCJcbiAgICAgICAgW2NsYXNzLnRvZ2dsZS1jb3VudGRvd24tZGlzYWJsZWRdPVwiaXNEaXNhYmxlZFwiXG4gICAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwidG9nZ2xlQ291bnRkb3duQnV0dG9uVG9vbHRpcFRleHRcIlxuICAgICAgICBbdG9vbHRpcF09XCJ0b2dnbGVDb3VudGRvd25CdXR0b25Ub29sdGlwVGV4dFwiXG4gICAgICAgIHBsYWNlbWVudD1cImJvdHRvbVwiXG4gICAgICAgICpuZ0lmPVwiaXNJbnRlcnZhbFJlZnJlc2ggJiYgcmVmcmVzaEludGVydmFsICYmIGNvbmZpZy5pc0F1dG9SZWZyZXNoRW5hYmxlZFwiXG4gICAgICAgIFthZGFwdGl2ZVBvc2l0aW9uXT1cImZhbHNlXCJcbiAgICAgICAgW2NvbnRhaW5lcl09XCInYm9keSdcIlxuICAgICAgICBbZGVsYXldPVwiNTAwXCJcbiAgICAgID5cbiAgICAgICAgPGlucHV0XG4gICAgICAgICAgdHlwZT1cImNoZWNrYm94XCJcbiAgICAgICAgICBkYXRhLWN5PVwiYzh5LWFsYXJtcy13aWRnZXQtLWludGVydmFsLXRvZ2dsZS1idXR0b25cIlxuICAgICAgICAgIChjbGljayk9XCJvblRvZ2dsZUNvdW50ZG93bkJ1dHRvblN0YXRlKCRldmVudClcIlxuICAgICAgICAvPlxuICAgICAgICA8Yzh5LWNvdW50ZG93bi1pbnRlcnZhbFxuICAgICAgICAgICpuZ0lmPVwiaXNJbnRlcnZhbFJlZnJlc2hUb2dnbGVPblwiXG4gICAgICAgICAgW2NvdW50ZG93bkludGVydmFsXT1cInJlZnJlc2hJbnRlcnZhbFwiXG4gICAgICAgICAgKGNvdW50ZG93bkVuZGVkKT1cImNvdW50ZG93bkVuZGVkKClcIlxuICAgICAgICA+PC9jOHktY291bnRkb3duLWludGVydmFsPlxuICAgICAgICA8aVxuICAgICAgICAgIGM4eUljb249XCJwYXVzZVwiXG4gICAgICAgICAgKm5nSWY9XCIhaXNJbnRlcnZhbFJlZnJlc2hUb2dnbGVPblwiXG4gICAgICAgID48L2k+XG4gICAgICA8L2xhYmVsPlxuXG4gICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtZ3JvdXAtYnRuXCI+XG4gICAgICAgIDxidXR0b25cbiAgICAgICAgICBjbGFzcz1cImJ0biBidG4tZGVmYXVsdFwiXG4gICAgICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCInUmVmcmVzaCcgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgIFt0b29sdGlwXT1cIlxuICAgICAgICAgICAgIWlzTmV3QWxhcm1NZXNzYWdlQ2xlYXJlZFxuICAgICAgICAgICAgICA/IChSRUFMVElNRV9VUERBVEVfQUxBUk1TX01FU1NBR0UgfCB0cmFuc2xhdGUpXG4gICAgICAgICAgICAgIDogKCdSZWZyZXNoJyB8IHRyYW5zbGF0ZSlcbiAgICAgICAgICBcIlxuICAgICAgICAgIHBsYWNlbWVudD1cImJvdHRvbVwiXG4gICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgW2FkYXB0aXZlUG9zaXRpb25dPVwiZmFsc2VcIlxuICAgICAgICAgIFtjb250YWluZXJdPVwiJ2JvZHknXCJcbiAgICAgICAgICBbZGVsYXldPVwiNTAwXCJcbiAgICAgICAgICBbZGlzYWJsZWRdPVwiaXNEaXNhYmxlZCB8fCAoaXNMb2FkaW5nIHwgYXN5bmMpXCJcbiAgICAgICAgICAoY2xpY2spPVwicmVsb2FkKClcIlxuICAgICAgICAgIGRhdGEtY3k9XCJjOHktYWxhcm1zLXdpZGdldC0tcmVsb2FkLWJ1dHRvblwiXG4gICAgICAgID5cbiAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgY2xhc3M9XCJ0YWcgdGFnLS1pbmZvIG0tci04XCJcbiAgICAgICAgICAgICpuZ0lmPVwiIWlzTmV3QWxhcm1NZXNzYWdlQ2xlYXJlZFwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAge3sgJ05ldyBhbGFybXMnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgIDxpXG4gICAgICAgICAgICBjOHlJY29uPVwicmVmcmVzaFwiXG4gICAgICAgICAgICBbbmdDbGFzc109XCJ7ICdpY29uLXNwaW4nOiBpc0xvYWRpbmcgfCBhc3luYyB9XCJcbiAgICAgICAgICA+PC9pPlxuICAgICAgICA8L2J1dHRvbj5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdlxuICAgICAgICBjbGFzcz1cImlucHV0LWdyb3VwLWJ0biBpbnB1dC1ncm91cC1idG4tLWxhc3RcIlxuICAgICAgICAqbmdJZj1cIiFpc0ludGVydmFsUmVmcmVzaFwiXG4gICAgICA+XG4gICAgICAgIDxidXR0b25cbiAgICAgICAgICBjbGFzcz1cImM4eS1yZWFsdGltZSBidG4gYnRuLWRlZmF1bHRcIlxuICAgICAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwicmVhbHRpbWVJY29uVGl0bGVcIlxuICAgICAgICAgIFt0b29sdGlwXT1cInJlYWx0aW1lSWNvblRpdGxlXCJcbiAgICAgICAgICBwbGFjZW1lbnQ9XCJib3R0b21cIlxuICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgIFtjb250YWluZXJdPVwiJ2JvZHknXCJcbiAgICAgICAgICAoY2xpY2spPVwidG9nZ2xlUmVhbHRpbWVTdGF0ZSgpXCJcbiAgICAgICAgICBbZGlzYWJsZWRdPVwiaXNEaXNhYmxlZFwiXG4gICAgICAgID5cbiAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgY2xhc3M9XCJjOHktcHVsc2UgbS0wXCJcbiAgICAgICAgICAgIFtuZ0NsYXNzXT1cIntcbiAgICAgICAgICAgICAgYWN0aXZlOiBpc1JlYWx0aW1lVG9nZ2xlT24sXG4gICAgICAgICAgICAgIGluYWN0aXZlOiAhaXNSZWFsdGltZVRvZ2dsZU9uXG4gICAgICAgICAgICB9XCJcbiAgICAgICAgICA+PC9zcGFuPlxuICAgICAgICA8L2J1dHRvbj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbjwvZGl2PlxuIl19
|
|
186
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWxhcm0td2lkZ2V0LWFsYXJtcy1yZWxvYWQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vd2lkZ2V0cy9pbXBsZW1lbnRhdGlvbnMvYWxhcm1zL2FsYXJtLXdpZGdldC1hbGFybXMtcmVsb2FkLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3dpZGdldHMvaW1wbGVtZW50YXRpb25zL2FsYXJtcy9hbGFybS13aWRnZXQtYWxhcm1zLXJlbG9hZC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBRUwsaUJBQWlCLEVBQ2pCLFNBQVMsRUFDVCxZQUFZLEVBQ1osS0FBSyxFQUlMLE1BQU0sRUFFTixTQUFTLEVBQ1YsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUNMLDBCQUEwQixFQUMxQixPQUFPLEVBQ1AsbUJBQW1CLEVBQ25CLDhCQUE4QixFQUMvQixNQUFNLHFCQUFxQixDQUFDO0FBQzdCLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQy9ELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ3ZELE9BQU8sRUFBRSxlQUFlLEVBQWdCLE1BQU0sTUFBTSxDQUFDO0FBQ3JELE9BQU8sRUFBRSxHQUFHLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNyQyxPQUFPLEVBQXlCLHNCQUFzQixFQUFFLE1BQU0sMkJBQTJCLENBQUM7Ozs7Ozs7QUFNMUYsTUFBTSxPQUFPLGdDQUNYLFNBQVEsbUJBQW1CO0lBd0UzQixZQUNVLGlCQUFvQyxFQUNwQyxLQUF3QixFQUN4QixnQkFBa0MsRUFDbEMsOEJBQThEO1FBRXRFLEtBQUssRUFBRSxDQUFDO1FBTEEsc0JBQWlCLEdBQWpCLGlCQUFpQixDQUFtQjtRQUNwQyxVQUFLLEdBQUwsS0FBSyxDQUFtQjtRQUN4QixxQkFBZ0IsR0FBaEIsZ0JBQWdCLENBQWtCO1FBQ2xD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O09BRUc7SUFDTyxnQ0FBZ0MsQ0FBQyxVQUFtQjtRQUM1RCxJQUFJLFVBQVUsRUFBRSxDQUFDO1lBQ2YsSUFBSSxDQUFDLGdDQUFnQyxHQUFHLFVBQVUsQ0FBQztZQUNuRCxPQUFPO1FBQ1QsQ0FBQztRQUNELElBQUksQ0FBQyxnQ0FBZ0MsR0FBRyxJQUFJLENBQUMseUJBQXlCO1lBQ3BFLENBQUMsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxzQkFBc0IsQ0FBQyxDQUFDO1lBQ2hFLENBQUMsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDLENBQUM7SUFDcEUsQ0FBQzsrR0F2TlUsZ0NBQWdDO21HQUFoQyxnQ0FBZ0MsK2FBdUNoQywwQkFBMEIsNEZDcEV2QywrbEdBZ0dBOzs0RkRuRWEsZ0NBQWdDO2tCQUo1QyxTQUFTOytCQUNFLGdDQUFnQztrTUFZakMsaUJBQWlCO3NCQUF6QixLQUFLO2dCQUlHLGVBQWU7c0JBQXZCLEtBQUs7Z0JBSUcsTUFBTTtzQkFBZCxLQUFLO2dCQUlHLFNBQVM7c0JBQWpCLEtBQUs7Z0JBSUcsV0FBVztzQkFBbkIsS0FBSztnQkFJRyxpQkFBaUI7c0JBQXpCLEtBQUs7Z0JBSUksZ0JBQWdCO3NCQUF6QixNQUFNO2dCQUlHLHVCQUF1QjtzQkFBaEMsTUFBTTtnQkFHUCwwQkFBMEI7c0JBRHpCLFNBQVM7dUJBQUMsMEJBQTBCLEVBQUUsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQWZ0ZXJWaWV3SW5pdCxcbiAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gIENvbXBvbmVudCxcbiAgRXZlbnRFbWl0dGVyLFxuICBJbnB1dCxcbiAgT25DaGFuZ2VzLFxuICBPbkRlc3Ryb3ksXG4gIE9uSW5pdCxcbiAgT3V0cHV0LFxuICBTaW1wbGVDaGFuZ2VzLFxuICBWaWV3Q2hpbGRcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge1xuICBDb3VudGRvd25JbnRlcnZhbENvbXBvbmVudCxcbiAgZ2V0dGV4dCxcbiAgSW50ZXJ2YWxCYXNlZFJlbG9hZCxcbiAgV2lkZ2V0R2xvYmFsQXV0b1JlZnJlc2hTZXJ2aWNlXG59IGZyb20gJ0BjOHkvbmd4LWNvbXBvbmVudHMnO1xuaW1wb3J0IHsgQWxhcm1zVmlld1NlcnZpY2UgfSBmcm9tICdAYzh5L25neC1jb21wb25lbnRzL2FsYXJtcyc7XG5pbXBvcnQgeyBUcmFuc2xhdGVTZXJ2aWNlIH0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSc7XG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QsIFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgdGFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgQWxhcm1MaXN0V2lkZ2V0Q29uZmlnLCBHTE9CQUxfSU5URVJWQUxfT1BUSU9OIH0gZnJvbSAnLi9hbGFybS1saXN0LXdpZGdldC5tb2RlbCc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2M4eS1hbGFybS13aWRnZXQtYWxhcm1zLXJlbG9hZCcsXG4gIHRlbXBsYXRlVXJsOiAnLi9hbGFybS13aWRnZXQtYWxhcm1zLXJlbG9hZC5jb21wb25lbnQuaHRtbCdcbn0pXG5leHBvcnQgY2xhc3MgQWxhcm1XaWRnZXRBbGFybXNSZWxvYWRDb21wb25lbnRcbiAgZXh0ZW5kcyBJbnRlcnZhbEJhc2VkUmVsb2FkXG4gIGltcGxlbWVudHMgT25Jbml0LCBBZnRlclZpZXdJbml0LCBPbkNoYW5nZXMsIE9uRGVzdHJveVxue1xuICByZWFkb25seSBSRUFMVElNRV9VUERBVEVfQUxBUk1TX01FU1NBR0UgPSB0aGlzLmFsYXJtc1ZpZXdTZXJ2aWNlLlJFQUxUSU1FX1VQREFURV9BTEFSTVNfTUVTU0FHRTtcblxuICAvKipcbiAgICogU3RhdGUgb2YgdGhpcyBib29sZWFuIGRlcGVuZHMgb24gYW4gQXBwbGljYXRpb24gT3B0aW9ucyBcImFsYXJtc1JlZnJlc2hUeXBlXCIgc2V0dGluZy5cbiAgICovXG4gIEBJbnB1dCgpIGlzSW50ZXJ2YWxSZWZyZXNoOiBib29sZWFuO1xuICAvKipcbiAgICogQGluaGVyaXRkb2NcbiAgICovXG4gIEBJbnB1dCgpIHJlZnJlc2hJbnRlcnZhbDogbnVtYmVyO1xuICAvKipcbiAgICogQWxhcm0gd2lkZ2V0cyBjb25maWcuXG4gICAqL1xuICBASW5wdXQoKSBjb25maWc6IEFsYXJtTGlzdFdpZGdldENvbmZpZztcbiAgLyoqXG4gICAqIEBpbmhlcml0ZG9jXG4gICAqL1xuICBASW5wdXQoKSBpc0xvYWRpbmc6IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPjtcbiAgLyoqXG4gICAqIEluZGljYXRlcyB3aGV0aGVyIHRoZSBhbGFybSBsaXN0IGlzIGJlaW5nIHNjcm9sbGVkIG9yIG5vdC5cbiAgICovXG4gIEBJbnB1dCgpIGlzU2Nyb2xsaW5nOiBib29sZWFuO1xuICAvKipcbiAgICogQGluaGVyaXRkb2NcbiAgICovXG4gIEBJbnB1dCgpIGlzUmVmcmVzaERpc2FibGVkOiBib29sZWFuO1xuICAvKipcbiAgICogQGluaGVyaXRkb2NcbiAgICovXG4gIEBPdXRwdXQoKSBvbkNvdW50ZG93bkVuZGVkID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xuICAvKipcbiAgICogRW1pdHRlZCB0byBpbmRpY2F0ZSB0aGF0IHRoZSB3aWRnZXRzIHJlYWx0aW1lIGJ1dHRvbiBzdGF0ZSBoYXMgY2hhbmdlZC5cbiAgICovXG4gIEBPdXRwdXQoKSBvblJlYWxUaW1lVG9nZ2xlQ2hhbmdlZDogRXZlbnRFbWl0dGVyPGJvb2xlYW4+ID0gbmV3IEV2ZW50RW1pdHRlcjxib29sZWFuPigpO1xuXG4gIEBWaWV3Q2hpbGQoQ291bnRkb3duSW50ZXJ2YWxDb21wb25lbnQsIHsgc3RhdGljOiBmYWxzZSB9KVxuICBjb3VudGRvd25JbnRlcnZhbENvbXBvbmVudDogQ291bnRkb3duSW50ZXJ2YWxDb21wb25lbnQ7XG4gIC8qKlxuICAgKiBAaW5oZXJpdGRvY1xuICAgKi9cbiAgcHJvdGVjdGVkIGhpZGVDb3VudGRvd246IGJvb2xlYW47XG4gIC8qKlxuICAgKiBUb29sdGlwIGZvciBhIG5ldyByZWFsdGltZSBhbGFybSBpbmRpY2F0b3IuXG4gICAqL1xuICByZWFsdGltZUljb25UaXRsZTogc3RyaW5nO1xuICAvKipcbiAgICogSW5kaWNhdGVzIHdoZXRoZXIgdGhlIGNvdW50ZG93biBoYXMgYmVlbiBjbGVhcmVkIGFscmVhZHkuXG4gICAqL1xuICBpc05ld0FsYXJtTWVzc2FnZUNsZWFyZWQgPSB0cnVlO1xuICAvKipcbiAgICogQGluaGVyaXRkb2NcbiAgICovXG4gIGlzSW50ZXJ2YWxSZWZyZXNoVG9nZ2xlT246IGJvb2xlYW47XG4gIC8qKlxuICAgKiBJbmRpY2F0ZXMgdGhlIGN1cnJlbnQgc3RhdGUgb2YgYW4gcmVhbHRpbWUgdG9nZ2xlIGJ1dHRvbi5cbiAgICovXG4gIGlzUmVhbHRpbWVUb2dnbGVPbjogYm9vbGVhbjtcbiAgLyoqXG4gICAqIEhvbGRzIHRoZSBzdWJzY3JpcHRpb24gdG8gYSBjb3VudGRvd24gb2JzZXJ2YWJsZS5cbiAgICovXG4gIGNvdW50ZG93blN1YnNjcmlwdGlvbjogU3Vic2NyaXB0aW9uO1xuICAvKipcbiAgICogQGluaGVyaXRkb2NcbiAgICovXG4gIHByb3RlY3RlZCBtYW51YWxseURpc2FibGVkQ291bnRkb3duID0gZmFsc2U7XG5cbiAgdG9nZ2xlQ291bnRkb3duQnV0dG9uVG9vbHRpcFRleHQ6IHN0cmluZztcbiAgZ2xvYmFsQXV0b1JlZnJlc2hFbmFibGVkOiBib29sZWFuO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgYWxhcm1zVmlld1NlcnZpY2U6IEFsYXJtc1ZpZXdTZXJ2aWNlLFxuICAgIHByaXZhdGUgY2RSZWY6IENoYW5nZURldGVjdG9yUmVmLFxuICAgIHByaXZhdGUgdHJhbnNsYXRlU2VydmljZTogVHJhbnNsYXRlU2VydmljZSxcbiAgICBwcml2YXRlIHdpZGdldEdsb2JhbEF1dG9SZWZyZXNoU2VydmljZTogV2lkZ2V0R2xvYmFsQXV0b1JlZnJlc2hTZXJ2aWNlXG4gICkge1xuICAgIHN1cGVyKCk7XG4gIH1cblxuICBuZ09uSW5pdCgpIHtcbiAgICBpZiAoIXRoaXMuaXNJbnRlcnZhbFJlZnJlc2gpIHtcbiAgICAgIHRoaXMuaXNSZWFsdGltZVRvZ2dsZU9uID0gdGhpcy5jb25maWcuaXNBdXRvUmVmcmVzaEVuYWJsZWQ7XG4gICAgICB0aGlzLnJlYWx0aW1lSWNvblRpdGxlID0gdGhpcy5nZXRSZWFsdGltZUljb25UaXRsZSgpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmlzSW50ZXJ2YWxSZWZyZXNoVG9nZ2xlT24gPVxuICAgICAgICAhdGhpcy5pc1JlZnJlc2hEaXNhYmxlZCAmJiAodGhpcy5jb25maWcuaXNBdXRvUmVmcmVzaEVuYWJsZWQgfHwgISF0aGlzLnJlZnJlc2hJbnRlcnZhbCk7XG4gICAgICB0aGlzLnVwZGF0ZUNvdW50ZG93bkJ1dHRvblRvb2x0aXBUZXh0KCk7XG4gICAgfVxuICB9XG5cbiAgbmdBZnRlclZpZXdJbml0KCkge1xuICAgIGlmICh0aGlzLmlzSW50ZXJ2YWxSZWZyZXNoICYmIHRoaXMucmVmcmVzaEludGVydmFsKSB7XG4gICAgICB0aGlzLnN0YXJ0Q291bnRkb3duKCk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuZ2xvYmFsQXV0b1JlZnJlc2hFbmFibGVkKSB7XG4gICAgICB0aGlzLndpZGdldEdsb2JhbEF1dG9SZWZyZXNoU2VydmljZS5jb3VudGRvd25BY3Rpb25zLmNvdW50ZG93bkVuZGVkJFxuICAgICAgICAucGlwZSh0YXAoKCkgPT4gdGhpcy5vbkNvdW50ZG93bkVuZGVkLmVtaXQoKSkpXG4gICAgICAgIC5zdWJzY3JpYmUoKTtcbiAgICB9XG4gIH1cblxuICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XG4gICAgY29uc3QgeyBpc0Rpc2FibGVkLCBjb25maWcgfSA9IGNoYW5nZXM7XG4gICAgaWYgKGNvbmZpZykge1xuICAgICAgdGhpcy5nbG9iYWxBdXRvUmVmcmVzaEVuYWJsZWQgPSB0aGlzLmNvbmZpZy5yZWZyZXNoT3B0aW9uID09PSBHTE9CQUxfSU5URVJWQUxfT1BUSU9OO1xuICAgIH1cbiAgICBpZiAoaXNEaXNhYmxlZCkge1xuICAgICAgdGhpcy5pc0ludGVydmFsUmVmcmVzaFRvZ2dsZU9uID1cbiAgICAgICAgIXRoaXMuaXNSZWZyZXNoRGlzYWJsZWQgJiYgKHRoaXMuY29uZmlnLmlzQXV0b1JlZnJlc2hFbmFibGVkIHx8ICEhdGhpcy5yZWZyZXNoSW50ZXJ2YWwpO1xuICAgICAgdGhpcy51cGRhdGVDb3VudGRvd25CdXR0b25Ub29sdGlwVGV4dChnZXR0ZXh0KCdEaXNhYmxlZCcpKTtcbiAgICB9XG5cbiAgICBpZiAoXG4gICAgICAhdGhpcy5pc0ludGVydmFsUmVmcmVzaCB8fFxuICAgICAgdGhpcy5tYW51YWxseURpc2FibGVkQ291bnRkb3duIHx8XG4gICAgICAhdGhpcy5jb25maWcuaXNBdXRvUmVmcmVzaEVuYWJsZWRcbiAgICApIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLmhhbmRsZVNjcm9sbGluZygpO1xuICB9XG5cbiAgbmdPbkRlc3Ryb3koKSB7XG4gICAgaWYgKHRoaXMuY291bnRkb3duU3Vic2NyaXB0aW9uKSB7XG4gICAgICB0aGlzLmNvdW50ZG93blN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBAaW5oZXJpdGRvY1xuICAgKi9cbiAgY291bnRkb3duRW5kZWQoKTogdm9pZCB7XG4gICAgLyoqXG4gICAgICogQGluaGVyaXRkb2NcbiAgICAgKi9cbiAgICB0aGlzLmF1dG9SZWZyZXNoTGlzdCgpO1xuICB9XG5cbiAgcmVsb2FkKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmlzSW50ZXJ2YWxSZWZyZXNoKSB7XG4gICAgICB0aGlzLmF1dG9SZWZyZXNoTGlzdCgpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLm9uQ291bnRkb3duRW5kZWQuZW1pdCgpO1xuICAgICAgdGhpcy5pc05ld0FsYXJtTWVzc2FnZUNsZWFyZWQgPSB0cnVlO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBUb2dnbGVzIHRoZSByZWFsLXRpbWUgc3RhdGUgb2YgdGhlIGNvbXBvbmVudC5cbiAgICpcbiAgICogVGhpcyBtZXRob2Qgc3dpdGNoZXMgdGhlIGBpc1JlYWx0aW1lVG9nZ2xlT25gIHN0YXRlIGJldHdlZW4gdHJ1ZSBhbmQgZmFsc2UuXG4gICAqIFdoZW4gdGhlIHN0YXRlIGlzIHRvZ2dsZWQsIGl0IGVtaXRzIHRoZSBjdXJyZW50IHN0YXRlIHRocm91Z2ggYG9uUmVhbFRpbWVUb2dnbGVDaGFuZ2VkYCBldmVudC5cbiAgICogSXQgYWxzbyB1cGRhdGVzIHRoZSBgcmVhbHRpbWVJY29uVGl0bGVgIGJhc2VkIG9uIHRoZSBuZXcgc3RhdGUuXG4gICAqL1xuICB0b2dnbGVSZWFsdGltZVN0YXRlKCk6IHZvaWQge1xuICAgIHRoaXMuaXNSZWFsdGltZVRvZ2dsZU9uID0gIXRoaXMuaXNSZWFsdGltZVRvZ2dsZU9uO1xuICAgIHRoaXMub25SZWFsVGltZVRvZ2dsZUNoYW5nZWQuZW1pdCh0aGlzLmlzUmVhbHRpbWVUb2dnbGVPbik7XG4gICAgdGhpcy5yZWFsdGltZUljb25UaXRsZSA9IHRoaXMuZ2V0UmVhbHRpbWVJY29uVGl0bGUoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTdG9wcyB0aGUgY291bnRkb3duIGFuZCB0cmlnZ2VycyBhIHJlZnJlc2ggYWN0aW9uLlxuICAgKiBUaGlzIGZ1bmN0aW9uIGlzIHJlc3BvbnNpYmxlIGZvciBoYWx0aW5nIHRoZSBjb3VudGRvd24gaW50ZXJ2YWwgY29tcG9uZW50J3Mgb3BlcmF0aW9uLlxuICAgKiBBZnRlciBzdG9wcGluZyB0aGUgY291bnRkb3duLCBpdCBlbWl0cyBhbiBgb25Db3VudGRvd25FbmRlZGAgZXZlbnQuXG4gICAqIFRoaXMgZXZlbnQgaXMgdXNlZCB0byBpbmZvcm0gZXh0ZXJuYWwgY29tcG9uZW50cyB0aGF0IHRoZSBjb3VudGRvd24gaGFzIGVuZGVkLFxuICAgKiB0eXBpY2FsbHkgcHJvbXB0aW5nIHRoZW0gdG8gcmVsb2FkIG9yIHJlZnJlc2ggdGhlaXIgZGF0YS5cbiAgICovXG4gIGF1dG9SZWZyZXNoTGlzdCgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5pc0ludGVydmFsUmVmcmVzaFRvZ2dsZU9uICYmIHRoaXMuY29uZmlnLmlzQXV0b1JlZnJlc2hFbmFibGVkKSB7XG4gICAgICB0aGlzLmNvdW50ZG93bkludGVydmFsQ29tcG9uZW50LnN0b3AoKTtcbiAgICB9XG4gICAgdGhpcy5vbkNvdW50ZG93bkVuZGVkLmVtaXQoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXRzIHRoZSB0b29sdGlwIG1lc3NhZ2UgZm9yIGEgbmV3IHJlYWx0aW1lIGFsYXJtIGluZGljYXRvci5cbiAgICogQHJldHVybnMgVG9vbHRpcCBtZXNzYWdlLlxuICAgKi9cbiAgZ2V0UmVhbHRpbWVJY29uVGl0bGUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5pc1JlYWx0aW1lVG9nZ2xlT25cbiAgICAgID8gdGhpcy50cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQoZ2V0dGV4dCgnUmVhbHRpbWUgYWN0aXZlJykpXG4gICAgICA6IHRoaXMudHJhbnNsYXRlU2VydmljZS5pbnN0YW50KGdldHRleHQoJ1JlYWx0aW1lIGluYWN0aXZlJykpO1xuICB9XG5cbiAgLyoqXG4gICAqIEVuYWJsZXMgYW5kIHN0YXJ0cyB0aGUgY291bnRkb3duIHRpbWVyLlxuICAgKlxuICAgKiBUaGlzIG1ldGhvZCBtYWtlcyB0aGUgY291bnRkb3duIHZpc2libGUgKGBoaWRlQ291bnRkb3duYCBpcyBzZXQgdG8gZmFsc2UpIGFuZCB0aGVuXG4gICAqIHN0YXJ0cyB0aGUgY291bnRkb3duIHByb2Nlc3MuIEl0IGVuc3VyZXMgdGhlIGNvdW50ZG93biB0aW1lciBpcyB1cGRhdGVkIGltbWVkaWF0ZWx5XG4gICAqIGJ5IHRyaWdnZXJpbmcgY2hhbmdlIGRldGVjdGlvbiB3aXRoIGBjZFJlZi5kZXRlY3RDaGFuZ2VzKClgIGJlZm9yZSBzdGFydGluZyB0aGUgY291bnRkb3duLlxuICAgKiBUaGlzIG1ldGhvZCBlbmNhcHN1bGF0ZXMgdGhlIGxvZ2ljIHJlcXVpcmVkIHRvIGluaXRpYXRlIHRoZSBjb3VudGRvd24gdGltZXIuXG4gICAqL1xuICBlbmFibGVDb3VudGRvd24oKTogdm9pZCB7XG4gICAgdGhpcy5oaWRlQ291bnRkb3duID0gZmFsc2U7XG4gICAgLy8gUHJldmVudHMgdGhlIGNvdW50ZG93biBmcm9tIGdldHRpbmcgc3R1Y2sgb24gYW4gaW5pdGlhbCB2YWx1ZS5cbiAgICB0aGlzLmNkUmVmLmRldGVjdENoYW5nZXMoKTtcbiAgICB0aGlzLnN0YXJ0Q291bnRkb3duKCk7XG4gIH1cblxuICAvKipcbiAgICogQGluaGVyaXRkb2NcbiAgICovXG4gIHByb3RlY3RlZCB1cGRhdGVDb3VudGRvd25CdXR0b25Ub29sdGlwVGV4dChjdXN0b21UZXh0Pzogc3RyaW5nKTogdm9pZCB7XG4gICAgaWYgKGN1c3RvbVRleHQpIHtcbiAgICAgIHRoaXMudG9nZ2xlQ291bnRkb3duQnV0dG9uVG9vbHRpcFRleHQgPSBjdXN0b21UZXh0O1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLnRvZ2dsZUNvdW50ZG93bkJ1dHRvblRvb2x0aXBUZXh0ID0gdGhpcy5pc0ludGVydmFsUmVmcmVzaFRvZ2dsZU9uXG4gICAgICA/IHRoaXMudHJhbnNsYXRlU2VydmljZS5pbnN0YW50KGdldHRleHQoJ0Rpc2FibGUgYXV0byByZWZyZXNoJykpXG4gICAgICA6IHRoaXMudHJhbnNsYXRlU2VydmljZS5pbnN0YW50KGdldHRleHQoJ0VuYWJsZSBhdXRvIHJlZnJlc2gnKSk7XG4gIH1cbn1cbiIsIjxkaXZcbiAgY2xhc3M9XCJtLWwtYXV0byBkLWZsZXggcC10LTQgcC1iLTRcIlxuICAqbmdJZj1cIiFnbG9iYWxBdXRvUmVmcmVzaEVuYWJsZWRcIlxuPlxuICA8ZGl2IGNsYXNzPVwibS1sLWF1dG8gZC1mbGV4IGEtaS1jZW50ZXJcIj5cbiAgICA8bGFiZWxcbiAgICAgIGNsYXNzPVwibS1iLTAgbS1yLTggdGV4dC1sYWJlbC1zbWFsbCB0ZXh0LXRydW5jYXRlIGZsZXgtbm8tc2hyaW5rXCJcbiAgICAgIHRpdGxlPVwiIHt7ICdBdXRvIHJlZnJlc2gnIHwgdHJhbnNsYXRlIH19XCJcbiAgICAgICpuZ0lmPVwiaXNJbnRlcnZhbFJlZnJlc2ggJiYgcmVmcmVzaEludGVydmFsICYmIGNvbmZpZy5pc0F1dG9SZWZyZXNoRW5hYmxlZFwiXG4gICAgPlxuICAgICAge3sgJ0F1dG8gcmVmcmVzaCcgfCB0cmFuc2xhdGUgfX1cbiAgICA8L2xhYmVsPlxuICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1ncm91cFwiPlxuICAgICAgPGxhYmVsXG4gICAgICAgIGNsYXNzPVwidG9nZ2xlLWNvdW50ZG93blwiXG4gICAgICAgIFtjbGFzcy50b2dnbGUtY291bnRkb3duLWRpc2FibGVkXT1cImlzUmVmcmVzaERpc2FibGVkXCJcbiAgICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCJ0b2dnbGVDb3VudGRvd25CdXR0b25Ub29sdGlwVGV4dFwiXG4gICAgICAgIFt0b29sdGlwXT1cInRvZ2dsZUNvdW50ZG93bkJ1dHRvblRvb2x0aXBUZXh0XCJcbiAgICAgICAgcGxhY2VtZW50PVwiYm90dG9tXCJcbiAgICAgICAgKm5nSWY9XCJpc0ludGVydmFsUmVmcmVzaCAmJiByZWZyZXNoSW50ZXJ2YWwgJiYgY29uZmlnLmlzQXV0b1JlZnJlc2hFbmFibGVkXCJcbiAgICAgICAgW2FkYXB0aXZlUG9zaXRpb25dPVwiZmFsc2VcIlxuICAgICAgICBbY29udGFpbmVyXT1cIidib2R5J1wiXG4gICAgICAgIFtkZWxheV09XCI1MDBcIlxuICAgICAgPlxuICAgICAgICA8aW5wdXRcbiAgICAgICAgICB0eXBlPVwiY2hlY2tib3hcIlxuICAgICAgICAgIGRhdGEtY3k9XCJjOHktYWxhcm1zLXdpZGdldC0taW50ZXJ2YWwtdG9nZ2xlLWJ1dHRvblwiXG4gICAgICAgICAgKGNsaWNrKT1cIm9uVG9nZ2xlQ291bnRkb3duQnV0dG9uU3RhdGUoJGV2ZW50KVwiXG4gICAgICAgIC8+XG4gICAgICAgIDxjOHktY291bnRkb3duLWludGVydmFsXG4gICAgICAgICAgKm5nSWY9XCJpc0ludGVydmFsUmVmcmVzaFRvZ2dsZU9uXCJcbiAgICAgICAgICBbY291bnRkb3duSW50ZXJ2YWxdPVwicmVmcmVzaEludGVydmFsXCJcbiAgICAgICAgICAoY291bnRkb3duRW5kZWQpPVwiY291bnRkb3duRW5kZWQoKVwiXG4gICAgICAgID48L2M4eS1jb3VudGRvd24taW50ZXJ2YWw+XG4gICAgICAgIDxpXG4gICAgICAgICAgYzh5SWNvbj1cInBhdXNlXCJcbiAgICAgICAgICAqbmdJZj1cIiFpc0ludGVydmFsUmVmcmVzaFRvZ2dsZU9uXCJcbiAgICAgICAgPjwvaT5cbiAgICAgIDwvbGFiZWw+XG5cbiAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1ncm91cC1idG5cIj5cbiAgICAgICAgPGJ1dHRvblxuICAgICAgICAgIGNsYXNzPVwiYnRuIGJ0bi1kZWZhdWx0XCJcbiAgICAgICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cIidSZWZyZXNoJyB8IHRyYW5zbGF0ZVwiXG4gICAgICAgICAgW3Rvb2x0aXBdPVwiXG4gICAgICAgICAgICAhaXNOZXdBbGFybU1lc3NhZ2VDbGVhcmVkXG4gICAgICAgICAgICAgID8gKFJFQUxUSU1FX1VQREFURV9BTEFSTVNfTUVTU0FHRSB8IHRyYW5zbGF0ZSlcbiAgICAgICAgICAgICAgOiAoJ1JlZnJlc2gnIHwgdHJhbnNsYXRlKVxuICAgICAgICAgIFwiXG4gICAgICAgICAgcGxhY2VtZW50PVwiYm90dG9tXCJcbiAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICBbYWRhcHRpdmVQb3NpdGlvbl09XCJmYWxzZVwiXG4gICAgICAgICAgW2NvbnRhaW5lcl09XCInYm9keSdcIlxuICAgICAgICAgIFtkZWxheV09XCI1MDBcIlxuICAgICAgICAgIFtkaXNhYmxlZF09XCJpc1JlZnJlc2hEaXNhYmxlZCB8fCAoaXNMb2FkaW5nIHwgYXN5bmMpXCJcbiAgICAgICAgICAoY2xpY2spPVwicmVsb2FkKClcIlxuICAgICAgICAgIGRhdGEtY3k9XCJjOHktYWxhcm1zLXdpZGdldC0tcmVsb2FkLWJ1dHRvblwiXG4gICAgICAgID5cbiAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgY2xhc3M9XCJ0YWcgdGFnLS1pbmZvIG0tci04XCJcbiAgICAgICAgICAgICpuZ0lmPVwiIWlzTmV3QWxhcm1NZXNzYWdlQ2xlYXJlZFwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAge3sgJ05ldyBhbGFybXMnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgIDxpXG4gICAgICAgICAgICBjOHlJY29uPVwicmVmcmVzaFwiXG4gICAgICAgICAgICBbbmdDbGFzc109XCJ7ICdpY29uLXNwaW4nOiBpc0xvYWRpbmcgfCBhc3luYyB9XCJcbiAgICAgICAgICA+PC9pPlxuICAgICAgICA8L2J1dHRvbj5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdlxuICAgICAgICBjbGFzcz1cImlucHV0LWdyb3VwLWJ0biBpbnB1dC1ncm91cC1idG4tLWxhc3RcIlxuICAgICAgICAqbmdJZj1cIiFpc0ludGVydmFsUmVmcmVzaFwiXG4gICAgICA+XG4gICAgICAgIDxidXR0b25cbiAgICAgICAgICBjbGFzcz1cImM4eS1yZWFsdGltZSBidG4gYnRuLWRlZmF1bHRcIlxuICAgICAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwicmVhbHRpbWVJY29uVGl0bGVcIlxuICAgICAgICAgIFt0b29sdGlwXT1cInJlYWx0aW1lSWNvblRpdGxlXCJcbiAgICAgICAgICBwbGFjZW1lbnQ9XCJib3R0b21cIlxuICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgIFtjb250YWluZXJdPVwiJ2JvZHknXCJcbiAgICAgICAgICAoY2xpY2spPVwidG9nZ2xlUmVhbHRpbWVTdGF0ZSgpXCJcbiAgICAgICAgICBbZGlzYWJsZWRdPVwiaXNSZWZyZXNoRGlzYWJsZWRcIlxuICAgICAgICA+XG4gICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgIGNsYXNzPVwiYzh5LXB1bHNlIG0tMFwiXG4gICAgICAgICAgICBbbmdDbGFzc109XCJ7XG4gICAgICAgICAgICAgIGFjdGl2ZTogaXNSZWFsdGltZVRvZ2dsZU9uLFxuICAgICAgICAgICAgICBpbmFjdGl2ZTogIWlzUmVhbHRpbWVUb2dnbGVPblxuICAgICAgICAgICAgfVwiXG4gICAgICAgICAgPjwvc3Bhbj5cbiAgICAgICAgPC9idXR0b24+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG48L2Rpdj5cbiJdfQ==
|