@c8y/ngx-components 1021.0.4 → 1021.0.11

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (30) hide show
  1. package/esm2022/branding/shared/data/store-branding.service.mjs +2 -2
  2. package/esm2022/location/location.component.mjs +1 -1
  3. package/esm2022/map/map.component.mjs +23 -21
  4. package/esm2022/sensor-phone/sensor-phone-modal/sensor-phone-modal.component.mjs +3 -3
  5. package/esm2022/sub-assets/location/asset-location.component.mjs +1 -1
  6. package/esm2022/tracking/tracking.component.mjs +2 -2
  7. package/esm2022/widgets/implementations/cockpit-welcome/welcome.component.mjs +3 -3
  8. package/esm2022/widgets/implementations/map/map-widget-config.component.mjs +7 -3
  9. package/fesm2022/c8y-ngx-components-branding-shared-data.mjs +1 -1
  10. package/fesm2022/c8y-ngx-components-branding-shared-data.mjs.map +1 -1
  11. package/fesm2022/c8y-ngx-components-location.mjs +1 -1
  12. package/fesm2022/c8y-ngx-components-location.mjs.map +1 -1
  13. package/fesm2022/c8y-ngx-components-map.mjs +22 -20
  14. package/fesm2022/c8y-ngx-components-map.mjs.map +1 -1
  15. package/fesm2022/c8y-ngx-components-sensor-phone-sensor-phone-modal.mjs +2 -2
  16. package/fesm2022/c8y-ngx-components-sensor-phone-sensor-phone-modal.mjs.map +1 -1
  17. package/fesm2022/c8y-ngx-components-sub-assets.mjs +1 -1
  18. package/fesm2022/c8y-ngx-components-sub-assets.mjs.map +1 -1
  19. package/fesm2022/c8y-ngx-components-tracking.mjs +1 -1
  20. package/fesm2022/c8y-ngx-components-tracking.mjs.map +1 -1
  21. package/fesm2022/c8y-ngx-components-widgets-implementations-cockpit-welcome.mjs +2 -2
  22. package/fesm2022/c8y-ngx-components-widgets-implementations-cockpit-welcome.mjs.map +1 -1
  23. package/fesm2022/c8y-ngx-components-widgets-implementations-map.mjs +6 -2
  24. package/fesm2022/c8y-ngx-components-widgets-implementations-map.mjs.map +1 -1
  25. package/locales/locales.pot +1 -1
  26. package/map/map.component.d.ts +8 -6
  27. package/map/map.component.d.ts.map +1 -1
  28. package/package.json +1 -1
  29. package/widgets/implementations/map/map-widget-config.component.d.ts +2 -2
  30. package/widgets/implementations/map/map-widget-config.component.d.ts.map +1 -1
@@ -169,7 +169,7 @@ export class AssetLocationComponent {
169
169
  return value === null || value === undefined;
170
170
  }
171
171
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: AssetLocationComponent, deps: [{ token: i1.ActivatedRoute }, { token: i2.MapService }], target: i0.ɵɵFactoryTarget.Component }); }
172
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.9", type: AssetLocationComponent, selector: "c8y-asset-location", inputs: { isEdit: "isEdit", locationMO: "locationMO", form: "form" }, viewQueries: [{ propertyName: "mapView", first: true, predicate: MapComponent, descendants: true }], usesOnChanges: true, ngImport: i0, template: "<div [hidden]=\"!showMap\">\n <div class=\"row\">\n <button\n class=\"btn btn-link pull-right\"\n style=\"margin-right: 12px\"\n title=\"Full screen\"\n type=\"button\"\n data-cy=\"asset-location-full-screen\"\n (click)=\"enableFullscreen()\"\n >\n <i c8yIcon=\"expand\"></i>\n </button>\n </div>\n <div style=\"width: 100%; height: 400px\">\n <c8y-map\n #map\n [assets]=\"assets\"\n [config]=\"config\"\n ></c8y-map>\n </div>\n</div>\n", dependencies: [{ kind: "directive", type: i3.IconDirective, selector: "[c8yIcon]", inputs: ["c8yIcon"] }, { kind: "component", type: i2.MapComponent, selector: "c8y-map", inputs: ["config", "assets", "polyline$", "polylineOptions"], outputs: ["onMove", "onMoveEnd", "onZoomStart", "onZoomEnd", "onRealtimeUpdate", "onInit"] }] }); }
172
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.9", type: AssetLocationComponent, selector: "c8y-asset-location", inputs: { isEdit: "isEdit", locationMO: "locationMO", form: "form" }, viewQueries: [{ propertyName: "mapView", first: true, predicate: MapComponent, descendants: true }], usesOnChanges: true, ngImport: i0, template: "<div [hidden]=\"!showMap\">\n <div class=\"row\">\n <button\n class=\"btn btn-link pull-right\"\n style=\"margin-right: 12px\"\n title=\"Full screen\"\n type=\"button\"\n data-cy=\"asset-location-full-screen\"\n (click)=\"enableFullscreen()\"\n >\n <i c8yIcon=\"expand\"></i>\n </button>\n </div>\n <div style=\"width: 100%; height: 400px\">\n <c8y-map\n #map\n [assets]=\"assets\"\n [config]=\"config\"\n ></c8y-map>\n </div>\n</div>\n", dependencies: [{ kind: "directive", type: i3.IconDirective, selector: "[c8yIcon]", inputs: ["c8yIcon"] }, { kind: "component", type: i2.MapComponent, selector: "c8y-map", inputs: ["config", "assets", "polyline$", "polylineOptions"], outputs: ["onRealtimeUpdate", "onMove", "onMoveEnd", "onZoomStart", "onZoomEnd", "onMap", "onInit"] }] }); }
173
173
  }
174
174
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: AssetLocationComponent, decorators: [{
175
175
  type: Component,
@@ -70,7 +70,7 @@ export class TrackingComponent {
70
70
  }
71
71
  }
72
72
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: TrackingComponent, deps: [{ token: i1.TrackingService }, { token: i2.EventRealtimeService }, { token: i2.ContextRouteService }, { token: i3.ActivatedRoute }], target: i0.ɵɵFactoryTarget.Component }); }
73
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.9", type: TrackingComponent, isStandalone: true, selector: "c8y-tracking", providers: [TrackingService, EventRealtimeService], viewQueries: [{ propertyName: "map", first: true, predicate: MapComponent, descendants: true }], ngImport: i0, template: "<c8y-action-bar-item\n [placement]=\"'right'\"\n [priority]=\"100\"\n>\n <c8y-realtime-btn\n [service]=\"realtime\"\n [disabled]=\"realtimeDisabled\"\n (onToggle)=\"togglePositionRealtime($event)\"\n ></c8y-realtime-btn>\n</c8y-action-bar-item>\n<c8y-action-bar-item\n [placement]=\"'right'\"\n [priority]=\"60\"\n>\n <c8y-time-interval\n [maxCustomDate]=\"maxDate\"\n [dateRangePickerConfig]=\"dateRangePickerConfig\"\n (interval)=\"service.setInterval($event); toggleRealtime($event)\"\n ></c8y-time-interval>\n</c8y-action-bar-item>\n\n<div class=\"card card--grid content-fullpage d-grid grid__col--8-4--md\">\n <div class=\"bg-white p-relative\">\n <c8y-map\n [config]=\"config\"\n [assets]=\"device\"\n [polyline$]=\"service.polyline$\"\n [polylineOptions]=\"{ color: 'darkblue' }\"\n >\n <div *c8yMapPopup=\"let context\">\n <c8y-tracking-marker-popup [context]=\"context\"></c8y-tracking-marker-popup>\n </div>\n </c8y-map>\n </div>\n\n <div class=\"d-flex d-col bg-inherit content-fullpage bg-gray-white\">\n <div class=\"card-header large-padding separator sticky-top\">\n <span\n class=\"card-title\"\n translate\n >\n Tracking events\n </span>\n </div>\n <div class=\"inner-scroll\">\n <c8y-list-group class=\"c8y-list__group--strip\">\n <ng-template\n c8yFor\n let-event\n [c8yForOf]=\"service.events$\"\n [c8yForPipe]=\"service.pipe\"\n [c8yForRealtime]=\"realtime\"\n [c8yForRealtimeOptions]=\"{ entityOrId: device }\"\n [c8yForLoadMore]=\"'hidden'\"\n [c8yForNotFound]=\"empty\"\n (c8yForLoadMoreComponent)=\"\n loadMoreComponent = $event; loadMoreComponent.useIntersection = false\n \"\n >\n <c8y-li\n class=\"pointer\"\n [ngClass]=\"{ 'text-primary text-bold': activeMarkers['p' + event?.id] }\"\n (click)=\"toggleMarker(event)\"\n >\n <c8y-li-icon [ngClass]=\"{ 'text-primary': activeMarkers['p' + event?.id] }\">\n <i c8yIcon=\"c8y-location\"></i>\n </c8y-li-icon>\n <c8y-li-body>\n <div class=\"d-flex\">\n <span>\n {{ event.time | date: 'mediumDate' }}\n </span>\n <span class=\"m-l-auto\">\n {{ event.time | date: 'mediumTime' }}\n </span>\n </div>\n </c8y-li-body>\n </c8y-li>\n </ng-template>\n </c8y-list-group>\n </div>\n\n <!-- empty state -->\n <ng-template #empty>\n <c8y-ui-empty-state\n icon=\"c8y-location\"\n [title]=\"'No tracking events found.' | translate\"\n [subtitle]=\"'Select another time range.' | translate\"\n *ngIf=\"!service.hasEvents\"\n [horizontal]=\"true\"\n ></c8y-ui-empty-state>\n </ng-template>\n\n <div *ngIf=\"loadMoreComponent?.hasMore\">\n <button\n class=\"btn btn-link fit-w sticky-bottom separator-top\"\n [title]=\"'Load more' | translate\"\n type=\"button\"\n [disabled]=\"loadMoreComponent?.isLoading\"\n (click)=\"loadMoreComponent.loadMore()\"\n >\n {{ 'Load more' | translate }}\n </button>\n </div>\n\n <div class=\"card-footer separator\">\n <button\n class=\"btn btn-default\"\n [title]=\"'Deselect all markers' | translate\"\n type=\"button\"\n [disabled]=\"(activeMarkers | json) === '{}'\"\n (click)=\"map.clearMarkers('event'); activeMarkers = {}\"\n >\n {{ 'Deselect all markers' | translate }}\n </button>\n </div>\n </div>\n</div>\n", dependencies: [{ kind: "ngmodule", type: MapModule }, { kind: "component", type: i4.MapComponent, selector: "c8y-map", inputs: ["config", "assets", "polyline$", "polylineOptions"], outputs: ["onMove", "onMoveEnd", "onZoomStart", "onZoomEnd", "onRealtimeUpdate", "onInit"] }, { kind: "directive", type: i4.MapPopupDirective, selector: "[c8yMapPopup]" }, { kind: "ngmodule", type: ActionBarModule }, { kind: "component", type: i2.ActionBarItemComponent, selector: "c8y-action-bar-item", inputs: ["placement", "priority", "itemClass", "injector", "groupId", "inGroupPriority"] }, { kind: "ngmodule", type: CoreModule }, { kind: "component", type: i2.EmptyStateComponent, selector: "c8y-ui-empty-state", inputs: ["icon", "title", "subtitle", "horizontal"] }, { kind: "directive", type: i2.IconDirective, selector: "[c8yIcon]", inputs: ["c8yIcon"] }, { kind: "pipe", type: i2.C8yTranslatePipe, name: "translate" }, { kind: "directive", type: i2.C8yTranslateDirective, selector: "[translate],[ngx-translate]" }, { kind: "directive", type: i5.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "pipe", type: i5.JsonPipe, name: "json" }, { kind: "pipe", type: i5.DatePipe, name: "date" }, { kind: "directive", type: i2.ForOfDirective, selector: "[c8yFor]", inputs: ["c8yForOf", "c8yForLoadMore", "c8yForPipe", "c8yForNotFound", "c8yForMaxIterations", "c8yForLoadingTemplate", "c8yForLoadNextLabel", "c8yForLoadingLabel", "c8yForRealtime", "c8yForRealtimeOptions", "c8yForComparator", "c8yForEnableVirtualScroll", "c8yForVirtualScrollElementSize", "c8yForVirtualScrollStrategy", "c8yForVirtualScrollContainerHeight"], outputs: ["c8yForCount", "c8yForChange", "c8yForLoadMoreComponent"] }, { kind: "component", type: i2.ListGroupComponent, selector: "c8y-list-group" }, { kind: "component", type: i2.ListItemComponent, selector: "c8y-list-item, c8y-li", inputs: ["active", "highlighted", "emptyActions", "dense", "collapsed", "selectable"], outputs: ["collapsedChange"] }, { kind: "component", type: i2.ListItemIconComponent, selector: "c8y-list-item-icon, c8y-li-icon", inputs: ["icon", "status"] }, { kind: "component", type: i2.ListItemBodyComponent, selector: "c8y-list-item-body, c8y-li-body", inputs: ["body"] }, { kind: "component", type: i2.RealtimeButtonComponent, selector: "c8y-realtime-btn", inputs: ["service", "label", "title", "disabled"], outputs: ["onToggle"] }, { kind: "component", type: i2.TimeIntervalComponent, selector: "c8y-time-interval", inputs: ["minCustomDate", "maxCustomDate", "dateRangePickerConfig", "selectedInterval"], outputs: ["interval"] }, { kind: "ngmodule", type: FormsModule }, { kind: "component", type: TrackingMarkerPopupComponent, selector: "c8y-tracking-marker-popup", inputs: ["context"] }] }); }
73
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.9", type: TrackingComponent, isStandalone: true, selector: "c8y-tracking", providers: [TrackingService, EventRealtimeService], viewQueries: [{ propertyName: "map", first: true, predicate: MapComponent, descendants: true }], ngImport: i0, template: "<c8y-action-bar-item\n [placement]=\"'right'\"\n [priority]=\"100\"\n>\n <c8y-realtime-btn\n [service]=\"realtime\"\n [disabled]=\"realtimeDisabled\"\n (onToggle)=\"togglePositionRealtime($event)\"\n ></c8y-realtime-btn>\n</c8y-action-bar-item>\n<c8y-action-bar-item\n [placement]=\"'right'\"\n [priority]=\"60\"\n>\n <c8y-time-interval\n [maxCustomDate]=\"maxDate\"\n [dateRangePickerConfig]=\"dateRangePickerConfig\"\n (interval)=\"service.setInterval($event); toggleRealtime($event)\"\n ></c8y-time-interval>\n</c8y-action-bar-item>\n\n<div class=\"card card--grid content-fullpage d-grid grid__col--8-4--md\">\n <div class=\"bg-white p-relative\">\n <c8y-map\n [config]=\"config\"\n [assets]=\"device\"\n [polyline$]=\"service.polyline$\"\n [polylineOptions]=\"{ color: 'darkblue' }\"\n >\n <div *c8yMapPopup=\"let context\">\n <c8y-tracking-marker-popup [context]=\"context\"></c8y-tracking-marker-popup>\n </div>\n </c8y-map>\n </div>\n\n <div class=\"d-flex d-col bg-inherit content-fullpage bg-gray-white\">\n <div class=\"card-header large-padding separator sticky-top\">\n <span\n class=\"card-title\"\n translate\n >\n Tracking events\n </span>\n </div>\n <div class=\"inner-scroll\">\n <c8y-list-group class=\"c8y-list__group--strip\">\n <ng-template\n c8yFor\n let-event\n [c8yForOf]=\"service.events$\"\n [c8yForPipe]=\"service.pipe\"\n [c8yForRealtime]=\"realtime\"\n [c8yForRealtimeOptions]=\"{ entityOrId: device }\"\n [c8yForLoadMore]=\"'hidden'\"\n [c8yForNotFound]=\"empty\"\n (c8yForLoadMoreComponent)=\"\n loadMoreComponent = $event; loadMoreComponent.useIntersection = false\n \"\n >\n <c8y-li\n class=\"pointer\"\n [ngClass]=\"{ 'text-primary text-bold': activeMarkers['p' + event?.id] }\"\n (click)=\"toggleMarker(event)\"\n >\n <c8y-li-icon [ngClass]=\"{ 'text-primary': activeMarkers['p' + event?.id] }\">\n <i c8yIcon=\"c8y-location\"></i>\n </c8y-li-icon>\n <c8y-li-body>\n <div class=\"d-flex\">\n <span>\n {{ event.time | date: 'mediumDate' }}\n </span>\n <span class=\"m-l-auto\">\n {{ event.time | date: 'mediumTime' }}\n </span>\n </div>\n </c8y-li-body>\n </c8y-li>\n </ng-template>\n </c8y-list-group>\n </div>\n\n <!-- empty state -->\n <ng-template #empty>\n <c8y-ui-empty-state\n icon=\"c8y-location\"\n [title]=\"'No tracking events found.' | translate\"\n [subtitle]=\"'Select another time range.' | translate\"\n *ngIf=\"!service.hasEvents\"\n [horizontal]=\"true\"\n ></c8y-ui-empty-state>\n </ng-template>\n\n <div *ngIf=\"loadMoreComponent?.hasMore\">\n <button\n class=\"btn btn-link fit-w sticky-bottom separator-top\"\n [title]=\"'Load more' | translate\"\n type=\"button\"\n [disabled]=\"loadMoreComponent?.isLoading\"\n (click)=\"loadMoreComponent.loadMore()\"\n >\n {{ 'Load more' | translate }}\n </button>\n </div>\n\n <div class=\"card-footer separator\">\n <button\n class=\"btn btn-default\"\n [title]=\"'Deselect all markers' | translate\"\n type=\"button\"\n [disabled]=\"(activeMarkers | json) === '{}'\"\n (click)=\"map.clearMarkers('event'); activeMarkers = {}\"\n >\n {{ 'Deselect all markers' | translate }}\n </button>\n </div>\n </div>\n</div>\n", dependencies: [{ kind: "ngmodule", type: MapModule }, { kind: "component", type: i4.MapComponent, selector: "c8y-map", inputs: ["config", "assets", "polyline$", "polylineOptions"], outputs: ["onRealtimeUpdate", "onMove", "onMoveEnd", "onZoomStart", "onZoomEnd", "onMap", "onInit"] }, { kind: "directive", type: i4.MapPopupDirective, selector: "[c8yMapPopup]" }, { kind: "ngmodule", type: ActionBarModule }, { kind: "component", type: i2.ActionBarItemComponent, selector: "c8y-action-bar-item", inputs: ["placement", "priority", "itemClass", "injector", "groupId", "inGroupPriority"] }, { kind: "ngmodule", type: CoreModule }, { kind: "component", type: i2.EmptyStateComponent, selector: "c8y-ui-empty-state", inputs: ["icon", "title", "subtitle", "horizontal"] }, { kind: "directive", type: i2.IconDirective, selector: "[c8yIcon]", inputs: ["c8yIcon"] }, { kind: "pipe", type: i2.C8yTranslatePipe, name: "translate" }, { kind: "directive", type: i2.C8yTranslateDirective, selector: "[translate],[ngx-translate]" }, { kind: "directive", type: i5.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "pipe", type: i5.JsonPipe, name: "json" }, { kind: "pipe", type: i5.DatePipe, name: "date" }, { kind: "directive", type: i2.ForOfDirective, selector: "[c8yFor]", inputs: ["c8yForOf", "c8yForLoadMore", "c8yForPipe", "c8yForNotFound", "c8yForMaxIterations", "c8yForLoadingTemplate", "c8yForLoadNextLabel", "c8yForLoadingLabel", "c8yForRealtime", "c8yForRealtimeOptions", "c8yForComparator", "c8yForEnableVirtualScroll", "c8yForVirtualScrollElementSize", "c8yForVirtualScrollStrategy", "c8yForVirtualScrollContainerHeight"], outputs: ["c8yForCount", "c8yForChange", "c8yForLoadMoreComponent"] }, { kind: "component", type: i2.ListGroupComponent, selector: "c8y-list-group" }, { kind: "component", type: i2.ListItemComponent, selector: "c8y-list-item, c8y-li", inputs: ["active", "highlighted", "emptyActions", "dense", "collapsed", "selectable"], outputs: ["collapsedChange"] }, { kind: "component", type: i2.ListItemIconComponent, selector: "c8y-list-item-icon, c8y-li-icon", inputs: ["icon", "status"] }, { kind: "component", type: i2.ListItemBodyComponent, selector: "c8y-list-item-body, c8y-li-body", inputs: ["body"] }, { kind: "component", type: i2.RealtimeButtonComponent, selector: "c8y-realtime-btn", inputs: ["service", "label", "title", "disabled"], outputs: ["onToggle"] }, { kind: "component", type: i2.TimeIntervalComponent, selector: "c8y-time-interval", inputs: ["minCustomDate", "maxCustomDate", "dateRangePickerConfig", "selectedInterval"], outputs: ["interval"] }, { kind: "ngmodule", type: FormsModule }, { kind: "component", type: TrackingMarkerPopupComponent, selector: "c8y-tracking-marker-popup", inputs: ["context"] }] }); }
74
74
  }
75
75
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: TrackingComponent, decorators: [{
76
76
  type: Component,
@@ -87,4 +87,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.9", ngImpor
87
87
  type: ViewChild,
88
88
  args: [MapComponent]
89
89
  }] } });
90
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhY2tpbmcuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vdHJhY2tpbmcvdHJhY2tpbmcuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vdHJhY2tpbmcvdHJhY2tpbmcuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQzVDLE9BQU8sRUFBaUIsU0FBUyxFQUFVLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUM1RSxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDN0MsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBRWpELE9BQU8sRUFDTCxlQUFlLEVBQ2YsbUJBQW1CLEVBQ25CLFVBQVUsRUFFVixvQkFBb0IsRUFHcEIscUJBQXFCLEVBQ3RCLE1BQU0scUJBQXFCLENBQUM7QUFDN0IsT0FBTyxFQUFFLFlBQVksRUFBYSxTQUFTLEVBQXlCLE1BQU0seUJBQXlCLENBQUM7QUFDcEcsT0FBTyxFQUFFLDRCQUE0QixFQUFFLE1BQU0sbUNBQW1DLENBQUM7QUFDakYsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLG9CQUFvQixDQUFDOzs7Ozs7O0FBaUJyRCxNQUFNLE9BQU8saUJBQWlCO0lBeUI1QixZQUNTLE9BQXdCLEVBQ3hCLFFBQThCLEVBQzdCLG1CQUF3QyxFQUN4QyxjQUE4QjtRQUgvQixZQUFPLEdBQVAsT0FBTyxDQUFpQjtRQUN4QixhQUFRLEdBQVIsUUFBUSxDQUFzQjtRQUM3Qix3QkFBbUIsR0FBbkIsbUJBQW1CLENBQXFCO1FBQ3hDLG1CQUFjLEdBQWQsY0FBYyxDQUFnQjtRQXpCeEMsMEJBQXFCLEdBQTBCO1lBQzdDLGdCQUFnQixFQUFFLElBQUk7WUFDdEIsaUJBQWlCLEVBQUUsSUFBSTtZQUN2Qix3QkFBd0IsRUFBRSxJQUFJO1NBQy9CLENBQUM7UUFFRixX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QUFjO3NMQUl4QixHQUFHO3NCQURGLFNBQVM7dUJBQUMsWUFBWSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFzeW5jUGlwZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBBZnRlclZpZXdJbml0LCBDb21wb25lbnQsIE9uSW5pdCwgVmlld0NoaWxkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBGb3Jtc01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IEFjdGl2YXRlZFJvdXRlIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCB7IElFdmVudCB9IGZyb20gJ0BjOHkvY2xpZW50JztcbmltcG9ydCB7XG4gIEFjdGlvbkJhck1vZHVsZSxcbiAgQ29udGV4dFJvdXRlU2VydmljZSxcbiAgQ29yZU1vZHVsZSxcbiAgRGF0ZVJhbmdlUGlja2VyQ29uZmlnLFxuICBFdmVudFJlYWx0aW1lU2VydmljZSxcbiAgTG9hZE1vcmVDb21wb25lbnQsXG4gIFRpbWVJbnRlcnZhbCxcbiAgVGltZUludGVydmFsQ29tcG9uZW50XG59IGZyb20gJ0BjOHkvbmd4LWNvbXBvbmVudHMnO1xuaW1wb3J0IHsgTWFwQ29tcG9uZW50LCBNYXBDb25maWcsIE1hcE1vZHVsZSwgUG9zaXRpb25NYW5hZ2VkT2JqZWN0IH0gZnJvbSAnQGM4eS9uZ3gtY29tcG9uZW50cy9tYXAnO1xuaW1wb3J0IHsgVHJhY2tpbmdNYXJrZXJQb3B1cENvbXBvbmVudCB9IGZyb20gJy4vdHJhY2tpbmctbWFya2VyLXBvcHVwLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBUcmFja2luZ1NlcnZpY2UgfSBmcm9tICcuL3RyYWNraW5nLnNlcnZpY2UnO1xuXG5AQ29tcG9uZW50KHtcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgdGVtcGxhdGVVcmw6ICcuL3RyYWNraW5nLmNvbXBvbmVudC5odG1sJyxcbiAgaW1wb3J0czogW1xuICAgIE1hcE1vZHVsZSxcbiAgICBBc3luY1BpcGUsXG4gICAgQWN0aW9uQmFyTW9kdWxlLFxuICAgIENvcmVNb2R1bGUsXG4gICAgVGltZUludGVydmFsQ29tcG9uZW50LFxuICAgIEZvcm1zTW9kdWxlLFxuICAgIFRyYWNraW5nTWFya2VyUG9wdXBDb21wb25lbnRcbiAgXSxcbiAgcHJvdmlkZXJzOiBbVHJhY2tpbmdTZXJ2aWNlLCBFdmVudFJlYWx0aW1lU2VydmljZV0sXG4gIHNlbGVjdG9yOiAnYzh5LXRyYWNraW5nJ1xufSlcbmV4cG9ydCBjbGFzcyBUcmFja2luZ0NvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgQWZ0ZXJWaWV3SW5pdCB7XG4gIEBWaWV3Q2hpbGQoTWFwQ29tcG9uZW50KVxuICBtYXA6IE1hcENvbXBvbmVudDtcblxuICBkYXRlUmFuZ2VQaWNrZXJDb25maWc6IERhdGVSYW5nZVBpY2tlckNvbmZpZyA9IHtcbiAgICBhZGFwdGl2ZVBvc2l0aW9uOiB0cnVlLFxuICAgIHNob3dQcmV2aW91c01vbnRoOiB0cnVlLFxuICAgIHByZXZlbnRDaGFuZ2VUb05leHRNb250aDogdHJ1ZVxuICB9O1xuXG4gIGNvbmZpZzogTWFwQ29uZmlnID0ge1xuICAgIHJlYWx0aW1lOiBmYWxzZSxcbiAgICBmb2xsb3c6IGZhbHNlLFxuICAgIHpvb21MZXZlbDogMTIsXG4gICAgZml0Qm91bmRzT3B0aW9uczoge1xuICAgICAgcGFkZGluZzogWzUwLCA1MF1cbiAgICB9XG4gIH07XG5cbiAgbWF4RGF0ZSA9IG5ldyBEYXRlKCk7XG4gIGFjdGl2ZU1hcmtlcnM6IHsgW2tleTogc3RyaW5nXTogYm9vbGVhbiB9ID0ge307XG4gIHJlYWx0aW1lRGlzYWJsZWQgPSBmYWxzZTtcbiAgZGV2aWNlOiBQb3NpdGlvbk1hbmFnZWRPYmplY3Q7XG4gIGxvYWRNb3JlQ29tcG9uZW50OiBMb2FkTW9yZUNvbXBvbmVudDtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwdWJsaWMgc2VydmljZTogVHJhY2tpbmdTZXJ2aWNlLFxuICAgIHB1YmxpYyByZWFsdGltZTogRXZlbnRSZWFsdGltZVNlcnZpY2UsXG4gICAgcHJpdmF0ZSBjb250ZXh0Um91dGVTZXJ2aWNlOiBDb250ZXh0Um91dGVTZXJ2aWNlLFxuICAgIHByaXZhdGUgYWN0aXZhdGVkUm91dGU6IEFjdGl2YXRlZFJvdXRlXG4gICkge31cblxuICBhc3luYyBuZ09uSW5pdCgpIHtcbiAgICBjb25zdCB7IGNvbnRleHREYXRhIH0gPSB0aGlzLmNvbnRleHRSb3V0ZVNlcnZpY2UuZ2V0Q29udGV4dERhdGEodGhpcy5hY3RpdmF0ZWRSb3V0ZSk7XG4gICAgdGhpcy5kZXZpY2UgPSBjb250ZXh0RGF0YSBhcyBQb3NpdGlvbk1hbmFnZWRPYmplY3Q7XG4gIH1cblxuICBhc3luYyBuZ0FmdGVyVmlld0luaXQoKSB7XG4gICAgdGhpcy5zZXJ2aWNlLnNldERldmljZUlkKHRoaXMuZGV2aWNlLmlkKTtcbiAgICB0aGlzLnRvZ2dsZVBvc2l0aW9uUmVhbHRpbWUodGhpcy5yZWFsdGltZS5hY3RpdmUpO1xuICB9XG5cbiAgdG9nZ2xlTWFya2VyKGV2ZW50OiBJRXZlbnQpIHtcbiAgICBsZXQgbWFya2VyID0gdGhpcy5tYXAuZmluZE1hcmtlcihldmVudCk7XG5cbiAgICBpZiAobWFya2VyKSB7XG4gICAgICB0aGlzLm1hcC5yZW1vdmVNYXJrZXIobWFya2VyKTtcbiAgICAgIGRlbGV0ZSB0aGlzLmFjdGl2ZU1hcmtlcnNbYHAke2V2ZW50LmlkfWBdO1xuICAgIH0gZWxzZSB7XG4gICAgICBtYXJrZXIgPSB0aGlzLm1hcC5nZXRUcmFja2luZ01hcmtlcihldmVudCk7XG4gICAgICB0aGlzLm1hcC5hZGRNYXJrZXJUb01hcChtYXJrZXIpO1xuICAgICAgdGhpcy5hY3RpdmVNYXJrZXJzW2BwJHtldmVudC5pZH1gXSA9IHRydWU7XG4gICAgfVxuICB9XG5cbiAgdG9nZ2xlUG9zaXRpb25SZWFsdGltZShhY3RpdmU6IGJvb2xlYW4pIHtcbiAgICB0aGlzLmNvbmZpZyA9IHsgLi4udGhpcy5jb25maWcsIHJlYWx0aW1lOiBhY3RpdmUgfTtcbiAgfVxuXG4gIHRvZ2dsZVJlYWx0aW1lKGludGVydmFsOiBUaW1lSW50ZXJ2YWwpIHtcbiAgICBjb25zdCBjdXJyZW50VGltZUluUmFuZ2UgPSBEYXRlLm5vdygpIDw9IGludGVydmFsPy5kYXRlVG8/LmdldFRpbWUoKTtcbiAgICB0aGlzLnRvZ2dsZVBvc2l0aW9uUmVhbHRpbWUoY3VycmVudFRpbWVJblJhbmdlKTtcbiAgICB0aGlzLnJlYWx0aW1lRGlzYWJsZWQgPSAhY3VycmVudFRpbWVJblJhbmdlO1xuXG4gICAgaWYgKGN1cnJlbnRUaW1lSW5SYW5nZSkge1xuICAgICAgdGhpcy5yZWFsdGltZS5zdGFydCgpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnJlYWx0aW1lLnN0b3AoKTtcbiAgICB9XG4gIH1cbn1cbiIsIjxjOHktYWN0aW9uLWJhci1pdGVtXG4gIFtwbGFjZW1lbnRdPVwiJ3JpZ2h0J1wiXG4gIFtwcmlvcml0eV09XCIxMDBcIlxuPlxuICA8Yzh5LXJlYWx0aW1lLWJ0blxuICAgIFtzZXJ2aWNlXT1cInJlYWx0aW1lXCJcbiAgICBbZGlzYWJsZWRdPVwicmVhbHRpbWVEaXNhYmxlZFwiXG4gICAgKG9uVG9nZ2xlKT1cInRvZ2dsZVBvc2l0aW9uUmVhbHRpbWUoJGV2ZW50KVwiXG4gID48L2M4eS1yZWFsdGltZS1idG4+XG48L2M4eS1hY3Rpb24tYmFyLWl0ZW0+XG48Yzh5LWFjdGlvbi1iYXItaXRlbVxuICBbcGxhY2VtZW50XT1cIidyaWdodCdcIlxuICBbcHJpb3JpdHldPVwiNjBcIlxuPlxuICA8Yzh5LXRpbWUtaW50ZXJ2YWxcbiAgICBbbWF4Q3VzdG9tRGF0ZV09XCJtYXhEYXRlXCJcbiAgICBbZGF0ZVJhbmdlUGlja2VyQ29uZmlnXT1cImRhdGVSYW5nZVBpY2tlckNvbmZpZ1wiXG4gICAgKGludGVydmFsKT1cInNlcnZpY2Uuc2V0SW50ZXJ2YWwoJGV2ZW50KTsgdG9nZ2xlUmVhbHRpbWUoJGV2ZW50KVwiXG4gID48L2M4eS10aW1lLWludGVydmFsPlxuPC9jOHktYWN0aW9uLWJhci1pdGVtPlxuXG48ZGl2IGNsYXNzPVwiY2FyZCBjYXJkLS1ncmlkIGNvbnRlbnQtZnVsbHBhZ2UgZC1ncmlkIGdyaWRfX2NvbC0tOC00LS1tZFwiPlxuICA8ZGl2IGNsYXNzPVwiYmctd2hpdGUgcC1yZWxhdGl2ZVwiPlxuICAgIDxjOHktbWFwXG4gICAgICBbY29uZmlnXT1cImNvbmZpZ1wiXG4gICAgICBbYXNzZXRzXT1cImRldmljZVwiXG4gICAgICBbcG9seWxpbmUkXT1cInNlcnZpY2UucG9seWxpbmUkXCJcbiAgICAgIFtwb2x5bGluZU9wdGlvbnNdPVwieyBjb2xvcjogJ2RhcmtibHVlJyB9XCJcbiAgICA+XG4gICAgICA8ZGl2ICpjOHlNYXBQb3B1cD1cImxldCBjb250ZXh0XCI+XG4gICAgICAgIDxjOHktdHJhY2tpbmctbWFya2VyLXBvcHVwIFtjb250ZXh0XT1cImNvbnRleHRcIj48L2M4eS10cmFja2luZy1tYXJrZXItcG9wdXA+XG4gICAgICA8L2Rpdj5cbiAgICA8L2M4eS1tYXA+XG4gIDwvZGl2PlxuXG4gIDxkaXYgY2xhc3M9XCJkLWZsZXggZC1jb2wgYmctaW5oZXJpdCBjb250ZW50LWZ1bGxwYWdlIGJnLWdyYXktd2hpdGVcIj5cbiAgICA8ZGl2IGNsYXNzPVwiY2FyZC1oZWFkZXIgbGFyZ2UtcGFkZGluZyBzZXBhcmF0b3Igc3RpY2t5LXRvcFwiPlxuICAgICAgPHNwYW5cbiAgICAgICAgY2xhc3M9XCJjYXJkLXRpdGxlXCJcbiAgICAgICAgdHJhbnNsYXRlXG4gICAgICA+XG4gICAgICAgIFRyYWNraW5nIGV2ZW50c1xuICAgICAgPC9zcGFuPlxuICAgIDwvZGl2PlxuICAgIDxkaXYgY2xhc3M9XCJpbm5lci1zY3JvbGxcIj5cbiAgICAgIDxjOHktbGlzdC1ncm91cCBjbGFzcz1cImM4eS1saXN0X19ncm91cC0tc3RyaXBcIj5cbiAgICAgICAgPG5nLXRlbXBsYXRlXG4gICAgICAgICAgYzh5Rm9yXG4gICAgICAgICAgbGV0LWV2ZW50XG4gICAgICAgICAgW2M4eUZvck9mXT1cInNlcnZpY2UuZXZlbnRzJFwiXG4gICAgICAgICAgW2M4eUZvclBpcGVdPVwic2VydmljZS5waXBlXCJcbiAgICAgICAgICBbYzh5Rm9yUmVhbHRpbWVdPVwicmVhbHRpbWVcIlxuICAgICAgICAgIFtjOHlGb3JSZWFsdGltZU9wdGlvbnNdPVwieyBlbnRpdHlPcklkOiBkZXZpY2UgfVwiXG4gICAgICAgICAgW2M4eUZvckxvYWRNb3JlXT1cIidoaWRkZW4nXCJcbiAgICAgICAgICBbYzh5Rm9yTm90Rm91bmRdPVwiZW1wdHlcIlxuICAgICAgICAgIChjOHlGb3JMb2FkTW9yZUNvbXBvbmVudCk9XCJcbiAgICAgICAgICAgIGxvYWRNb3JlQ29tcG9uZW50ID0gJGV2ZW50OyBsb2FkTW9yZUNvbXBvbmVudC51c2VJbnRlcnNlY3Rpb24gPSBmYWxzZVxuICAgICAgICAgIFwiXG4gICAgICAgID5cbiAgICAgICAgICA8Yzh5LWxpXG4gICAgICAgICAgICBjbGFzcz1cInBvaW50ZXJcIlxuICAgICAgICAgICAgW25nQ2xhc3NdPVwieyAndGV4dC1wcmltYXJ5IHRleHQtYm9sZCc6IGFjdGl2ZU1hcmtlcnNbJ3AnICsgZXZlbnQ/LmlkXSB9XCJcbiAgICAgICAgICAgIChjbGljayk9XCJ0b2dnbGVNYXJrZXIoZXZlbnQpXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8Yzh5LWxpLWljb24gW25nQ2xhc3NdPVwieyAndGV4dC1wcmltYXJ5JzogYWN0aXZlTWFya2Vyc1sncCcgKyBldmVudD8uaWRdIH1cIj5cbiAgICAgICAgICAgICAgPGkgYzh5SWNvbj1cImM4eS1sb2NhdGlvblwiPjwvaT5cbiAgICAgICAgICAgIDwvYzh5LWxpLWljb24+XG4gICAgICAgICAgICA8Yzh5LWxpLWJvZHk+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXhcIj5cbiAgICAgICAgICAgICAgICA8c3Bhbj5cbiAgICAgICAgICAgICAgICAgIHt7IGV2ZW50LnRpbWUgfCBkYXRlOiAnbWVkaXVtRGF0ZScgfX1cbiAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJtLWwtYXV0b1wiPlxuICAgICAgICAgICAgICAgICAge3sgZXZlbnQudGltZSB8IGRhdGU6ICdtZWRpdW1UaW1lJyB9fVxuICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2M4eS1saS1ib2R5PlxuICAgICAgICAgIDwvYzh5LWxpPlxuICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgPC9jOHktbGlzdC1ncm91cD5cbiAgICA8L2Rpdj5cblxuICAgIDwhLS0gZW1wdHkgc3RhdGUgLS0+XG4gICAgPG5nLXRlbXBsYXRlICNlbXB0eT5cbiAgICAgIDxjOHktdWktZW1wdHktc3RhdGVcbiAgICAgICAgaWNvbj1cImM4eS1sb2NhdGlvblwiXG4gICAgICAgIFt0aXRsZV09XCInTm8gdHJhY2tpbmcgZXZlbnRzIGZvdW5kLicgfCB0cmFuc2xhdGVcIlxuICAgICAgICBbc3VidGl0bGVdPVwiJ1NlbGVjdCBhbm90aGVyIHRpbWUgcmFuZ2UuJyB8IHRyYW5zbGF0ZVwiXG4gICAgICAgICpuZ0lmPVwiIXNlcnZpY2UuaGFzRXZlbnRzXCJcbiAgICAgICAgW2hvcml6b250YWxdPVwidHJ1ZVwiXG4gICAgICA+PC9jOHktdWktZW1wdHktc3RhdGU+XG4gICAgPC9uZy10ZW1wbGF0ZT5cblxuICAgIDxkaXYgKm5nSWY9XCJsb2FkTW9yZUNvbXBvbmVudD8uaGFzTW9yZVwiPlxuICAgICAgPGJ1dHRvblxuICAgICAgICBjbGFzcz1cImJ0biBidG4tbGluayBmaXQtdyBzdGlja3ktYm90dG9tIHNlcGFyYXRvci10b3BcIlxuICAgICAgICBbdGl0bGVdPVwiJ0xvYWQgbW9yZScgfCB0cmFuc2xhdGVcIlxuICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgW2Rpc2FibGVkXT1cImxvYWRNb3JlQ29tcG9uZW50Py5pc0xvYWRpbmdcIlxuICAgICAgICAoY2xpY2spPVwibG9hZE1vcmVDb21wb25lbnQubG9hZE1vcmUoKVwiXG4gICAgICA+XG4gICAgICAgIHt7ICdMb2FkIG1vcmUnIHwgdHJhbnNsYXRlIH19XG4gICAgICA8L2J1dHRvbj5cbiAgICA8L2Rpdj5cblxuICAgIDxkaXYgY2xhc3M9XCJjYXJkLWZvb3RlciBzZXBhcmF0b3JcIj5cbiAgICAgIDxidXR0b25cbiAgICAgICAgY2xhc3M9XCJidG4gYnRuLWRlZmF1bHRcIlxuICAgICAgICBbdGl0bGVdPVwiJ0Rlc2VsZWN0IGFsbCBtYXJrZXJzJyB8IHRyYW5zbGF0ZVwiXG4gICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICBbZGlzYWJsZWRdPVwiKGFjdGl2ZU1hcmtlcnMgfCBqc29uKSA9PT0gJ3t9J1wiXG4gICAgICAgIChjbGljayk9XCJtYXAuY2xlYXJNYXJrZXJzKCdldmVudCcpOyBhY3RpdmVNYXJrZXJzID0ge31cIlxuICAgICAgPlxuICAgICAgICB7eyAnRGVzZWxlY3QgYWxsIG1hcmtlcnMnIHwgdHJhbnNsYXRlIH19XG4gICAgICA8L2J1dHRvbj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG48L2Rpdj5cbiJdfQ==
90
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhY2tpbmcuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vdHJhY2tpbmcvdHJhY2tpbmcuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vdHJhY2tpbmcvdHJhY2tpbmcuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQzVDLE9BQU8sRUFBaUIsU0FBUyxFQUFVLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUM1RSxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDN0MsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBRWpELE9BQU8sRUFDTCxlQUFlLEVBQ2YsbUJBQW1CLEVBQ25CLFVBQVUsRUFFVixvQkFBb0IsRUFHcEIscUJBQXFCLEVBQ3RCLE1BQU0scUJBQXFCLENBQUM7QUFDN0IsT0FBTyxFQUFFLFlBQVksRUFBYSxTQUFTLEVBQXlCLE1BQU0seUJBQXlCLENBQUM7QUFDcEcsT0FBTyxFQUFFLDRCQUE0QixFQUFFLE1BQU0sbUNBQW1DLENBQUM7QUFDakYsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLG9CQUFvQixDQUFDOzs7Ozs7O0FBaUJyRCxNQUFNLE9BQU8saUJBQWlCO0lBeUI1QixZQUNTLE9BQXdCLEVBQ3hCLFFBQThCLEVBQzdCLG1CQUF3QyxFQUN4QyxjQUE4QjtRQUgvQixZQUFPLEdBQVAsT0FBTyxDQUFpQjtRQUN4QixhQUFRLEdBQVIsUUFBUSxDQUFzQjtRQUM3Qix3QkFBbUIsR0FBbkIsbUJBQW1CLENBQXFCO1FBQ3hDLG1CQUFjLEdBQWQsY0FBYyxDQUFnQjtRQXpCeEMsMEJBQXFCLEdBQTBCO1lBQzdDLGdCQUFnQixFQUFFLElBQUk7WUFDdEIsaUJBQWlCLEVBQUUsSUFBSTtZQUN2Qix3QkFBd0IsRUFBRSxJQUFJO1NBQy9CLENBQUM7UUFFRixX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QUFjO3NMQUl4QixHQUFHO3NCQURGLFNBQVM7dUJBQUMsWUFBWSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFzeW5jUGlwZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBBZnRlclZpZXdJbml0LCBDb21wb25lbnQsIE9uSW5pdCwgVmlld0NoaWxkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBGb3Jtc01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IEFjdGl2YXRlZFJvdXRlIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCB7IElFdmVudCB9IGZyb20gJ0BjOHkvY2xpZW50JztcbmltcG9ydCB7XG4gIEFjdGlvbkJhck1vZHVsZSxcbiAgQ29udGV4dFJvdXRlU2VydmljZSxcbiAgQ29yZU1vZHVsZSxcbiAgRGF0ZVJhbmdlUGlja2VyQ29uZmlnLFxuICBFdmVudFJlYWx0aW1lU2VydmljZSxcbiAgTG9hZE1vcmVDb21wb25lbnQsXG4gIFRpbWVJbnRlcnZhbCxcbiAgVGltZUludGVydmFsQ29tcG9uZW50XG59IGZyb20gJ0BjOHkvbmd4LWNvbXBvbmVudHMnO1xuaW1wb3J0IHsgTWFwQ29tcG9uZW50LCBNYXBDb25maWcsIE1hcE1vZHVsZSwgUG9zaXRpb25NYW5hZ2VkT2JqZWN0IH0gZnJvbSAnQGM4eS9uZ3gtY29tcG9uZW50cy9tYXAnO1xuaW1wb3J0IHsgVHJhY2tpbmdNYXJrZXJQb3B1cENvbXBvbmVudCB9IGZyb20gJy4vdHJhY2tpbmctbWFya2VyLXBvcHVwLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBUcmFja2luZ1NlcnZpY2UgfSBmcm9tICcuL3RyYWNraW5nLnNlcnZpY2UnO1xuXG5AQ29tcG9uZW50KHtcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgdGVtcGxhdGVVcmw6ICcuL3RyYWNraW5nLmNvbXBvbmVudC5odG1sJyxcbiAgaW1wb3J0czogW1xuICAgIE1hcE1vZHVsZSxcbiAgICBBc3luY1BpcGUsXG4gICAgQWN0aW9uQmFyTW9kdWxlLFxuICAgIENvcmVNb2R1bGUsXG4gICAgVGltZUludGVydmFsQ29tcG9uZW50LFxuICAgIEZvcm1zTW9kdWxlLFxuICAgIFRyYWNraW5nTWFya2VyUG9wdXBDb21wb25lbnRcbiAgXSxcbiAgcHJvdmlkZXJzOiBbVHJhY2tpbmdTZXJ2aWNlLCBFdmVudFJlYWx0aW1lU2VydmljZV0sXG4gIHNlbGVjdG9yOiAnYzh5LXRyYWNraW5nJ1xufSlcbmV4cG9ydCBjbGFzcyBUcmFja2luZ0NvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgQWZ0ZXJWaWV3SW5pdCB7XG4gIEBWaWV3Q2hpbGQoTWFwQ29tcG9uZW50KVxuICBtYXA6IE1hcENvbXBvbmVudDtcblxuICBkYXRlUmFuZ2VQaWNrZXJDb25maWc6IERhdGVSYW5nZVBpY2tlckNvbmZpZyA9IHtcbiAgICBhZGFwdGl2ZVBvc2l0aW9uOiB0cnVlLFxuICAgIHNob3dQcmV2aW91c01vbnRoOiB0cnVlLFxuICAgIHByZXZlbnRDaGFuZ2VUb05leHRNb250aDogdHJ1ZVxuICB9O1xuXG4gIGNvbmZpZzogTWFwQ29uZmlnID0ge1xuICAgIHJlYWx0aW1lOiBmYWxzZSxcbiAgICBmb2xsb3c6IGZhbHNlLFxuICAgIHpvb21MZXZlbDogMTIsXG4gICAgZml0Qm91bmRzT3B0aW9uczoge1xuICAgICAgcGFkZGluZzogWzUwLCA1MF1cbiAgICB9XG4gIH07XG5cbiAgbWF4RGF0ZSA9IG5ldyBEYXRlKCk7XG4gIGFjdGl2ZU1hcmtlcnM6IHsgW2tleTogc3RyaW5nXTogYm9vbGVhbiB9ID0ge307XG4gIHJlYWx0aW1lRGlzYWJsZWQgPSBmYWxzZTtcbiAgZGV2aWNlOiBQb3NpdGlvbk1hbmFnZWRPYmplY3Q7XG4gIGxvYWRNb3JlQ29tcG9uZW50OiBMb2FkTW9yZUNvbXBvbmVudDtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwdWJsaWMgc2VydmljZTogVHJhY2tpbmdTZXJ2aWNlLFxuICAgIHB1YmxpYyByZWFsdGltZTogRXZlbnRSZWFsdGltZVNlcnZpY2UsXG4gICAgcHJpdmF0ZSBjb250ZXh0Um91dGVTZXJ2aWNlOiBDb250ZXh0Um91dGVTZXJ2aWNlLFxuICAgIHByaXZhdGUgYWN0aXZhdGVkUm91dGU6IEFjdGl2YXRlZFJvdXRlXG4gICkge31cblxuICBhc3luYyBuZ09uSW5pdCgpIHtcbiAgICBjb25zdCB7IGNvbnRleHREYXRhIH0gPSB0aGlzLmNvbnRleHRSb3V0ZVNlcnZpY2UuZ2V0Q29udGV4dERhdGEodGhpcy5hY3RpdmF0ZWRSb3V0ZSk7XG4gICAgdGhpcy5kZXZpY2UgPSBjb250ZXh0RGF0YSBhcyBQb3NpdGlvbk1hbmFnZWRPYmplY3Q7XG4gIH1cblxuICBhc3luYyBuZ0FmdGVyVmlld0luaXQoKSB7XG4gICAgdGhpcy5zZXJ2aWNlLnNldERldmljZUlkKHRoaXMuZGV2aWNlLmlkKTtcbiAgICB0aGlzLnRvZ2dsZVBvc2l0aW9uUmVhbHRpbWUodGhpcy5yZWFsdGltZS5hY3RpdmUpO1xuICB9XG5cbiAgdG9nZ2xlTWFya2VyKGV2ZW50OiBJRXZlbnQpIHtcbiAgICBsZXQgbWFya2VyID0gdGhpcy5tYXAuZmluZE1hcmtlcihldmVudCk7XG5cbiAgICBpZiAobWFya2VyKSB7XG4gICAgICB0aGlzLm1hcC5yZW1vdmVNYXJrZXIobWFya2VyKTtcbiAgICAgIGRlbGV0ZSB0aGlzLmFjdGl2ZU1hcmtlcnNbYHAke2V2ZW50LmlkfWBdO1xuICAgIH0gZWxzZSB7XG4gICAgICBtYXJrZXIgPSB0aGlzLm1hcC5nZXRUcmFja2luZ01hcmtlcihldmVudCk7XG4gICAgICB0aGlzLm1hcC5hZGRNYXJrZXJUb01hcChtYXJrZXIpO1xuICAgICAgdGhpcy5hY3RpdmVNYXJrZXJzW2BwJHtldmVudC5pZH1gXSA9IHRydWU7XG4gICAgfVxuICB9XG5cbiAgdG9nZ2xlUG9zaXRpb25SZWFsdGltZShhY3RpdmU6IGJvb2xlYW4pIHtcbiAgICB0aGlzLmNvbmZpZyA9IHsgLi4udGhpcy5jb25maWcsIHJlYWx0aW1lOiBhY3RpdmUgfTtcbiAgfVxuXG4gIHRvZ2dsZVJlYWx0aW1lKGludGVydmFsOiBUaW1lSW50ZXJ2YWwpIHtcbiAgICBjb25zdCBjdXJyZW50VGltZUluUmFuZ2UgPSBEYXRlLm5vdygpIDw9IGludGVydmFsPy5kYXRlVG8/LmdldFRpbWUoKTtcbiAgICB0aGlzLnRvZ2dsZVBvc2l0aW9uUmVhbHRpbWUoY3VycmVudFRpbWVJblJhbmdlKTtcbiAgICB0aGlzLnJlYWx0aW1lRGlzYWJsZWQgPSAhY3VycmVudFRpbWVJblJhbmdlO1xuXG4gICAgaWYgKGN1cnJlbnRUaW1lSW5SYW5nZSkge1xuICAgICAgdGhpcy5yZWFsdGltZS5zdGFydCgpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnJlYWx0aW1lLnN0b3AoKTtcbiAgICB9XG4gIH1cbn1cbiIsIjxjOHktYWN0aW9uLWJhci1pdGVtXG4gIFtwbGFjZW1lbnRdPVwiJ3JpZ2h0J1wiXG4gIFtwcmlvcml0eV09XCIxMDBcIlxuPlxuICA8Yzh5LXJlYWx0aW1lLWJ0blxuICAgIFtzZXJ2aWNlXT1cInJlYWx0aW1lXCJcbiAgICBbZGlzYWJsZWRdPVwicmVhbHRpbWVEaXNhYmxlZFwiXG4gICAgKG9uVG9nZ2xlKT1cInRvZ2dsZVBvc2l0aW9uUmVhbHRpbWUoJGV2ZW50KVwiXG4gID48L2M4eS1yZWFsdGltZS1idG4+XG48L2M4eS1hY3Rpb24tYmFyLWl0ZW0+XG48Yzh5LWFjdGlvbi1iYXItaXRlbVxuICBbcGxhY2VtZW50XT1cIidyaWdodCdcIlxuICBbcHJpb3JpdHldPVwiNjBcIlxuPlxuICA8Yzh5LXRpbWUtaW50ZXJ2YWxcbiAgICBbbWF4Q3VzdG9tRGF0ZV09XCJtYXhEYXRlXCJcbiAgICBbZGF0ZVJhbmdlUGlja2VyQ29uZmlnXT1cImRhdGVSYW5nZVBpY2tlckNvbmZpZ1wiXG4gICAgKGludGVydmFsKT1cInNlcnZpY2Uuc2V0SW50ZXJ2YWwoJGV2ZW50KTsgdG9nZ2xlUmVhbHRpbWUoJGV2ZW50KVwiXG4gID48L2M4eS10aW1lLWludGVydmFsPlxuPC9jOHktYWN0aW9uLWJhci1pdGVtPlxuXG48ZGl2IGNsYXNzPVwiY2FyZCBjYXJkLS1ncmlkIGNvbnRlbnQtZnVsbHBhZ2UgZC1ncmlkIGdyaWRfX2NvbC0tOC00LS1tZFwiPlxuICA8ZGl2IGNsYXNzPVwiYmctd2hpdGUgcC1yZWxhdGl2ZVwiPlxuICAgIDxjOHktbWFwXG4gICAgICBbY29uZmlnXT1cImNvbmZpZ1wiXG4gICAgICBbYXNzZXRzXT1cImRldmljZVwiXG4gICAgICBbcG9seWxpbmUkXT1cInNlcnZpY2UucG9seWxpbmUkXCJcbiAgICAgIFtwb2x5bGluZU9wdGlvbnNdPVwieyBjb2xvcjogJ2RhcmtibHVlJyB9XCJcbiAgICA+XG4gICAgICA8ZGl2ICpjOHlNYXBQb3B1cD1cImxldCBjb250ZXh0XCI+XG4gICAgICAgIDxjOHktdHJhY2tpbmctbWFya2VyLXBvcHVwIFtjb250ZXh0XT1cImNvbnRleHRcIj48L2M4eS10cmFja2luZy1tYXJrZXItcG9wdXA+XG4gICAgICA8L2Rpdj5cbiAgICA8L2M4eS1tYXA+XG4gIDwvZGl2PlxuXG4gIDxkaXYgY2xhc3M9XCJkLWZsZXggZC1jb2wgYmctaW5oZXJpdCBjb250ZW50LWZ1bGxwYWdlIGJnLWdyYXktd2hpdGVcIj5cbiAgICA8ZGl2IGNsYXNzPVwiY2FyZC1oZWFkZXIgbGFyZ2UtcGFkZGluZyBzZXBhcmF0b3Igc3RpY2t5LXRvcFwiPlxuICAgICAgPHNwYW5cbiAgICAgICAgY2xhc3M9XCJjYXJkLXRpdGxlXCJcbiAgICAgICAgdHJhbnNsYXRlXG4gICAgICA+XG4gICAgICAgIFRyYWNraW5nIGV2ZW50c1xuICAgICAgPC9zcGFuPlxuICAgIDwvZGl2PlxuICAgIDxkaXYgY2xhc3M9XCJpbm5lci1zY3JvbGxcIj5cbiAgICAgIDxjOHktbGlzdC1ncm91cCBjbGFzcz1cImM4eS1saXN0X19ncm91cC0tc3RyaXBcIj5cbiAgICAgICAgPG5nLXRlbXBsYXRlXG4gICAgICAgICAgYzh5Rm9yXG4gICAgICAgICAgbGV0LWV2ZW50XG4gICAgICAgICAgW2M4eUZvck9mXT1cInNlcnZpY2UuZXZlbnRzJFwiXG4gICAgICAgICAgW2M4eUZvclBpcGVdPVwic2VydmljZS5waXBlXCJcbiAgICAgICAgICBbYzh5Rm9yUmVhbHRpbWVdPVwicmVhbHRpbWVcIlxuICAgICAgICAgIFtjOHlGb3JSZWFsdGltZU9wdGlvbnNdPVwieyBlbnRpdHlPcklkOiBkZXZpY2UgfVwiXG4gICAgICAgICAgW2M4eUZvckxvYWRNb3JlXT1cIidoaWRkZW4nXCJcbiAgICAgICAgICBbYzh5Rm9yTm90Rm91bmRdPVwiZW1wdHlcIlxuICAgICAgICAgIChjOHlGb3JMb2FkTW9yZUNvbXBvbmVudCk9XCJcbiAgICAgICAgICAgIGxvYWRNb3JlQ29tcG9uZW50ID0gJGV2ZW50OyBsb2FkTW9yZUNvbXBvbmVudC51c2VJbnRlcnNlY3Rpb24gPSBmYWxzZVxuICAgICAgICAgIFwiXG4gICAgICAgID5cbiAgICAgICAgICA8Yzh5LWxpXG4gICAgICAgICAgICBjbGFzcz1cInBvaW50ZXJcIlxuICAgICAgICAgICAgW25nQ2xhc3NdPVwieyAndGV4dC1wcmltYXJ5IHRleHQtYm9sZCc6IGFjdGl2ZU1hcmtlcnNbJ3AnICsgZXZlbnQ/LmlkXSB9XCJcbiAgICAgICAgICAgIChjbGljayk9XCJ0b2dnbGVNYXJrZXIoZXZlbnQpXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8Yzh5LWxpLWljb24gW25nQ2xhc3NdPVwieyAndGV4dC1wcmltYXJ5JzogYWN0aXZlTWFya2Vyc1sncCcgKyBldmVudD8uaWRdIH1cIj5cbiAgICAgICAgICAgICAgPGkgYzh5SWNvbj1cImM4eS1sb2NhdGlvblwiPjwvaT5cbiAgICAgICAgICAgIDwvYzh5LWxpLWljb24+XG4gICAgICAgICAgICA8Yzh5LWxpLWJvZHk+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXhcIj5cbiAgICAgICAgICAgICAgICA8c3Bhbj5cbiAgICAgICAgICAgICAgICAgIHt7IGV2ZW50LnRpbWUgfCBkYXRlOiAnbWVkaXVtRGF0ZScgfX1cbiAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJtLWwtYXV0b1wiPlxuICAgICAgICAgICAgICAgICAge3sgZXZlbnQudGltZSB8IGRhdGU6ICdtZWRpdW1UaW1lJyB9fVxuICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2M4eS1saS1ib2R5PlxuICAgICAgICAgIDwvYzh5LWxpPlxuICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgPC9jOHktbGlzdC1ncm91cD5cbiAgICA8L2Rpdj5cblxuICAgIDwhLS0gZW1wdHkgc3RhdGUgLS0+XG4gICAgPG5nLXRlbXBsYXRlICNlbXB0eT5cbiAgICAgIDxjOHktdWktZW1wdHktc3RhdGVcbiAgICAgICAgaWNvbj1cImM4eS1sb2NhdGlvblwiXG4gICAgICAgIFt0aXRsZV09XCInTm8gdHJhY2tpbmcgZXZlbnRzIGZvdW5kLicgfCB0cmFuc2xhdGVcIlxuICAgICAgICBbc3VidGl0bGVdPVwiJ1NlbGVjdCBhbm90aGVyIHRpbWUgcmFuZ2UuJyB8IHRyYW5zbGF0ZVwiXG4gICAgICAgICpuZ0lmPVwiIXNlcnZpY2UuaGFzRXZlbnRzXCJcbiAgICAgICAgW2hvcml6b250YWxdPVwidHJ1ZVwiXG4gICAgICA+PC9jOHktdWktZW1wdHktc3RhdGU+XG4gICAgPC9uZy10ZW1wbGF0ZT5cblxuICAgIDxkaXYgKm5nSWY9XCJsb2FkTW9yZUNvbXBvbmVudD8uaGFzTW9yZVwiPlxuICAgICAgPGJ1dHRvblxuICAgICAgICBjbGFzcz1cImJ0biBidG4tbGluayBmaXQtdyBzdGlja3ktYm90dG9tIHNlcGFyYXRvci10b3BcIlxuICAgICAgICBbdGl0bGVdPVwiJ0xvYWQgbW9yZScgfCB0cmFuc2xhdGVcIlxuICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgW2Rpc2FibGVkXT1cImxvYWRNb3JlQ29tcG9uZW50Py5pc0xvYWRpbmdcIlxuICAgICAgICAoY2xpY2spPVwibG9hZE1vcmVDb21wb25lbnQubG9hZE1vcmUoKVwiXG4gICAgICA+XG4gICAgICAgIHt7ICdMb2FkIG1vcmUnIHwgdHJhbnNsYXRlIH19XG4gICAgICA8L2J1dHRvbj5cbiAgICA8L2Rpdj5cblxuICAgIDxkaXYgY2xhc3M9XCJjYXJkLWZvb3RlciBzZXBhcmF0b3JcIj5cbiAgICAgIDxidXR0b25cbiAgICAgICAgY2xhc3M9XCJidG4gYnRuLWRlZmF1bHRcIlxuICAgICAgICBbdGl0bGVdPVwiJ0Rlc2VsZWN0IGFsbCBtYXJrZXJzJyB8IHRyYW5zbGF0ZVwiXG4gICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICBbZGlzYWJsZWRdPVwiKGFjdGl2ZU1hcmtlcnMgfCBqc29uKSA9PT0gJ3t9J1wiXG4gICAgICAgIChjbGljayk9XCJtYXAuY2xlYXJNYXJrZXJzKCdldmVudCcpOyBhY3RpdmVNYXJrZXJzID0ge31cIlxuICAgICAgPlxuICAgICAgICB7eyAnRGVzZWxlY3QgYWxsIG1hcmtlcnMnIHwgdHJhbnNsYXRlIH19XG4gICAgICA8L2J1dHRvbj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG48L2Rpdj5cbiJdfQ==