@c8y/ngx-components 1021.75.7 → 1021.76.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.
Files changed (39) hide show
  1. package/branding/shared/supports-branding.service.d.ts.map +1 -1
  2. package/core/dashboard/widgets-dashboard.component.d.ts +4 -2
  3. package/core/dashboard/widgets-dashboard.component.d.ts.map +1 -1
  4. package/core/navigator/navigator-bottom/navigator-bottom.service.d.ts +3 -1
  5. package/core/navigator/navigator-bottom/navigator-bottom.service.d.ts.map +1 -1
  6. package/esm2022/branding/shared/supports-branding.service.mjs +6 -3
  7. package/esm2022/core/dashboard/widgets-dashboard.component.mjs +9 -5
  8. package/esm2022/core/navigator/navigator-bottom/navigator-bottom.service.mjs +13 -6
  9. package/esm2022/device-map/device-map.component.mjs +2 -2
  10. package/esm2022/map/cluster-map.component.mjs +6 -3
  11. package/esm2022/map/map-status.component.mjs +23 -5
  12. package/esm2022/map/map.model.mjs +5 -2
  13. package/esm2022/map/map.service.mjs +17 -1
  14. package/esm2022/widgets/implementations/map/map-widget-config.component.mjs +25 -6
  15. package/esm2022/widgets/implementations/map/map-widget.component.mjs +40 -11
  16. package/fesm2022/c8y-ngx-components-branding-shared.mjs +5 -2
  17. package/fesm2022/c8y-ngx-components-branding-shared.mjs.map +1 -1
  18. package/fesm2022/c8y-ngx-components-device-map.mjs +1 -1
  19. package/fesm2022/c8y-ngx-components-device-map.mjs.map +1 -1
  20. package/fesm2022/c8y-ngx-components-map.mjs +47 -7
  21. package/fesm2022/c8y-ngx-components-map.mjs.map +1 -1
  22. package/fesm2022/c8y-ngx-components-widgets-implementations-map.mjs +67 -19
  23. package/fesm2022/c8y-ngx-components-widgets-implementations-map.mjs.map +1 -1
  24. package/fesm2022/c8y-ngx-components.mjs +17 -8
  25. package/fesm2022/c8y-ngx-components.mjs.map +1 -1
  26. package/locales/locales.pot +3 -0
  27. package/map/cluster-map.component.d.ts +2 -1
  28. package/map/cluster-map.component.d.ts.map +1 -1
  29. package/map/map-status.component.d.ts +7 -2
  30. package/map/map-status.component.d.ts.map +1 -1
  31. package/map/map.model.d.ts +1 -0
  32. package/map/map.model.d.ts.map +1 -1
  33. package/map/map.service.d.ts +1 -0
  34. package/map/map.service.d.ts.map +1 -1
  35. package/package.json +1 -1
  36. package/widgets/implementations/map/map-widget-config.component.d.ts +1 -0
  37. package/widgets/implementations/map/map-widget-config.component.d.ts.map +1 -1
  38. package/widgets/implementations/map/map-widget.component.d.ts +10 -4
  39. package/widgets/implementations/map/map-widget.component.d.ts.map +1 -1
@@ -1,4 +1,4 @@
1
- import { Component, EventEmitter, Inject, Input, IterableDiffers, Output, SimpleChange } from '@angular/core';
1
+ import { Component, ElementRef, EventEmitter, Inject, Input, IterableDiffers, Output, SimpleChange, ViewChild } from '@angular/core';
2
2
  import { ColorService, DatePipe, GeoService, ManagedObjectRealtimeService, WidgetGlobalAutoRefreshService, globalAutoRefreshLoading } from '@c8y/ngx-components';
3
3
  import { TranslateService } from '@ngx-translate/core';
4
4
  import { BehaviorSubject, EMPTY, Observable, combineLatest, from, fromEvent, merge, of } from 'rxjs';
@@ -239,7 +239,7 @@ export class ClusterMapComponent extends MapComponent {
239
239
  });
240
240
  }
241
241
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ClusterMapComponent, deps: [{ token: i1.ManagedObjectRealtimeService }, { token: i2.MapService }, { token: MAP_TILE_LAYER }, { token: MAP_DEFAULT_CONFIG }, { token: i3.TranslateService }, { token: i1.WidgetGlobalAutoRefreshService }, { token: i0.IterableDiffers }, { token: i1.ColorService }, { token: i1.GeoService }, { token: i1.DatePipe }], target: i0.ɵɵFactoryTarget.Component }); }
242
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: ClusterMapComponent, selector: "c8y-cluster-map", inputs: { config: "config", rootNode: "rootNode", assets: ["asset", "assets"], showClusterColor: "showClusterColor" }, outputs: { mapChange: "mapChange" }, providers: [ManagedObjectRealtimeService], usesInheritance: true, usesOnChanges: true, ngImport: i0, template: "<div class=\"c8y-map\">\n <div #map></div>\n</div>\n<ng-content></ng-content>\n" }); }
242
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: ClusterMapComponent, selector: "c8y-cluster-map", inputs: { config: "config", rootNode: "rootNode", assets: ["asset", "assets"], showClusterColor: "showClusterColor" }, outputs: { mapChange: "mapChange" }, providers: [ManagedObjectRealtimeService], viewQueries: [{ propertyName: "mapElement", first: true, predicate: ["map"], descendants: true }], usesInheritance: true, usesOnChanges: true, ngImport: i0, template: "<div class=\"c8y-map\">\n <div #map></div>\n</div>\n<ng-content></ng-content>\n" }); }
243
243
  }
244
244
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ClusterMapComponent, decorators: [{
245
245
  type: Component,
@@ -261,5 +261,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
261
261
  type: Input
262
262
  }], mapChange: [{
263
263
  type: Output
264
+ }], mapElement: [{
265
+ type: ViewChild,
266
+ args: ['map']
264
267
  }] } });
265
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2x1c3Rlci1tYXAuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vbWFwL2NsdXN0ZXItbWFwLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uL21hcC9jbHVzdGVyLW1hcC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsU0FBUyxFQUNULFlBQVksRUFDWixNQUFNLEVBQ04sS0FBSyxFQUNMLGVBQWUsRUFDZixNQUFNLEVBQ04sWUFBWSxFQUViLE1BQU0sZUFBZSxDQUFDO0FBR3ZCLE9BQU8sRUFDTCxZQUFZLEVBRVosUUFBUSxFQUNSLFVBQVUsRUFDViw0QkFBNEIsRUFDNUIsOEJBQThCLEVBQzlCLHdCQUF3QixFQUd6QixNQUFNLHFCQUFxQixDQUFDO0FBQzdCLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBRXZELE9BQU8sRUFDTCxlQUFlLEVBQ2YsS0FBSyxFQUNMLFVBQVUsRUFDVixhQUFhLEVBQ2IsSUFBSSxFQUNKLFNBQVMsRUFDVCxLQUFLLEVBQ0wsRUFBRSxFQUNILE1BQU0sTUFBTSxDQUFDO0FBQ2QsT0FBTyxFQUNMLFVBQVUsRUFDVixZQUFZLEVBQ1osUUFBUSxFQUNSLElBQUksRUFDSixTQUFTLEVBQ1QsU0FBUyxFQUNULEdBQUcsRUFDSixNQUFNLGdCQUFnQixDQUFDO0FBQ3hCLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDM0MsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFFTCxXQUFXLEVBQ1gsa0JBQWtCLEVBQ2xCLGNBQWMsRUFFZixNQUFNLGFBQWEsQ0FBQztBQUNyQixPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDOzs7Ozs7QUFPM0MsTUFBTSxPQUFPLG1CQUFvQixTQUFRLFlBQVk7SUEwQm5ELFlBQ1ksaUJBQStDLEVBQy9DLFVBQXNCLEVB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RW1pdHRlcixcbiAgSW5qZWN0LFxuICBJbnB1dCxcbiAgSXRlcmFibGVEaWZmZXJzLFxuICBPdXRwdXQsXG4gIFNpbXBsZUNoYW5nZSxcbiAgU2ltcGxlQ2hhbmdlc1xufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IElNYW5hZ2VkT2JqZWN0IH0gZnJvbSAnQGM4eS9jbGllbnQnO1xuaW1wb3J0IHR5cGUgeyBNYXBEZWZhdWx0Q29uZmlnLCBNYXBUaWxlTGF5ZXIgfSBmcm9tICdAYzh5L29wdGlvbnMnO1xuaW1wb3J0IHtcbiAgQ29sb3JTZXJ2aWNlLFxuICBDb3VudGRvd25JbnRlcnZhbENvbXBvbmVudCxcbiAgRGF0ZVBpcGUsXG4gIEdlb1NlcnZpY2UsXG4gIE1hbmFnZWRPYmplY3RSZWFsdGltZVNlcnZpY2UsXG4gIFdpZGdldEdsb2JhbEF1dG9SZWZyZXNoU2VydmljZSxcbiAgZ2xvYmFsQXV0b1JlZnJlc2hMb2FkaW5nLFxuICBEeW5hbWljQ29tcG9uZW50LFxuICBEeW5hbWljQ29tcG9uZW50QWxlcnRBZ2dyZWdhdG9yXG59IGZyb20gJ0BjOHkvbmd4LWNvbXBvbmVudHMnO1xuaW1wb3J0IHsgVHJhbnNsYXRlU2VydmljZSB9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnO1xuaW1wb3J0IHR5cGUgKiBhcyBMIGZyb20gJ2xlYWZsZXQnO1xuaW1wb3J0IHtcbiAgQmVoYXZpb3JTdWJqZWN0LFxuICBFTVBUWSxcbiAgT2JzZXJ2YWJsZSxcbiAgY29tYmluZUxhdGVzdCxcbiAgZnJvbSxcbiAgZnJvbUV2ZW50LFxuICBtZXJnZSxcbiAgb2Zcbn0gZnJvbSAncnhqcyc7XG5pbXBvcnQge1xuICBjYXRjaEVycm9yLFxuICBkZWJvdW5jZVRpbWUsXG4gIG1lcmdlTWFwLFxuICBza2lwLFxuICBzd2l0Y2hNYXAsXG4gIHRha2VVbnRpbCxcbiAgdGFwXG59IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IENsdXN0ZXJNYXAgfSBmcm9tICcuL2NsdXN0ZXItbWFwJztcbmltcG9ydCB7IE1hcENvbXBvbmVudCB9IGZyb20gJy4vbWFwLmNvbXBvbmVudCc7XG5pbXBvcnQge1xuICBDbHVzdGVyTWFwQ29uZmlnLFxuICBDbHVzdGVyU2l6ZSxcbiAgTUFQX0RFRkFVTFRfQ09ORklHLFxuICBNQVBfVElMRV9MQVlFUixcbiAgUG9zaXRpb25NYW5hZ2VkT2JqZWN0XG59IGZyb20gJy4vbWFwLm1vZGVsJztcbmltcG9ydCB7IE1hcFNlcnZpY2UgfSBmcm9tICcuL21hcC5zZXJ2aWNlJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnYzh5LWNsdXN0ZXItbWFwJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2NsdXN0ZXItbWFwLmNvbXBvbmVudC5odG1sJyxcbiAgcHJvdmlkZXJzOiBbTWFuYWdlZE9iamVjdFJlYWx0aW1lU2VydmljZV1cbn0pXG5leHBvcnQgY2xhc3MgQ2x1c3Rlck1hcENvbXBvbmVudCBleHRlbmRzIE1hcENvbXBvbmVudCBpbXBsZW1lbnRzIER5bmFtaWNDb21wb25lbnQge1xuICBpc0xvYWRpbmckID0gbmV3IEJlaGF2aW9yU3ViamVjdChmYWxzZSk7XG4gIGNvdW50ZG93bkludGVydmFsQ29tcDogQ291bnRkb3duSW50ZXJ2YWxDb21wb25lbnQ7XG5cbiAgQElucHV0KClcbiAgY29uZmlnOiBDbHVzdGVyTWFwQ29uZmlnO1xuXG4gIEBJbnB1dCgpXG4gIHJvb3ROb2RlOiBJTWFuYWdlZE9iamVjdDtcblxuICBASW5wdXQoJ2Fzc2V0JylcbiAgYXNzZXRzOiBQb3NpdGlvbk1hbmFnZWRPYmplY3Q7XG5cbiAgQElucHV0KClcbiAgc2hvd0NsdXN0ZXJDb2xvciA9IGZhbHNlO1xuXG4gIEBPdXRwdXQoKVxuICBtYXBDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPEwuTGVhZmxldEV2ZW50PigpO1xuXG4gIGFsZXJ0czogRHluYW1pY0NvbXBvbmVudEFsZXJ0QWdncmVnYXRvcjtcblxuICBlcnJvck5vdGlmaWVyID0gbmV3IEJlaGF2aW9yU3ViamVjdChudWxsKTtcbiAgcHJpdmF0ZSByZWxvYWRUcmlnZ2VyJCA9IG5ldyBCZWhhdmlvclN1YmplY3QoZmFsc2UpO1xuICBwcml2YXRlIGNsdXN0ZXJzOiBDbHVzdGVyTWFwW10gPSBbXTtcbiAgcHJpdmF0ZSByZWFkb25seSBFVkVOVF9USFJPVFRMRV9USU1FID0gNzUwO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByb3RlY3RlZCBtb1JlYWx0aW1lU2VydmljZTogTWFuYWdlZE9iamVjdFJlYWx0aW1lU2VydmljZSxcbiAgICBwcm90ZWN0ZWQgbWFwU2VydmljZTogTWFwU2VydmljZSxcbiAgICBASW5qZWN0KE1BUF9USUxFX0xBWUVSKSBwcm90ZWN0ZWQgbGF5ZXJzJDogT2JzZXJ2YWJsZTxNYXBUaWxlTGF5ZXJbXT4sXG4gICAgQEluamVjdChNQVBfREVGQVVMVF9DT05GSUcpXG4gICAgcHJvdGVjdGVkIGRlZmF1bHRDb25maWckOiBPYnNlcnZhYmxlPE1hcERlZmF1bHRDb25maWc+LFxuICAgIHByb3RlY3RlZCB0cmFuc2xhdGVTZXJ2aWNlOiBUcmFuc2xhdGVTZXJ2aWNlLFxuICAgIHByb3RlY3RlZCB3aWRnZXRHbG9iYWxBdXRvUmVmcmVzaFNlcnZpY2U6IFdpZGdldEdsb2JhbEF1dG9SZWZyZXNoU2VydmljZSxcbiAgICBwcml2YXRlIGl0ZXJhYmxlOiBJdGVyYWJsZURpZmZlcnMsXG4gICAgcHJpdmF0ZSBjb2xvclNlcnZpY2U6IENvbG9yU2VydmljZSxcbiAgICBnZW86IEdlb1NlcnZpY2UsXG4gICAgZGF0ZVBpcGU6IERhdGVQaXBlXG4gICkge1xuICAgIHN1cGVyKFxuICAgICAgbW9SZWFsdGltZVNlcnZpY2UsXG4gICAgICBtYXBTZXJ2aWNlLFxuICAgICAgbGF5ZXJzJCxcbiAgICAgIGRlZmF1bHRDb25maWckLFxuICAgICAgdHJhbnNsYXRlU2VydmljZSxcbiAgICAgIGdlbyxcbiAgICAgIGRhdGVQaXBlLFxuICAgICAgd2lkZ2V0R2xvYmFsQXV0b1JlZnJlc2hTZXJ2aWNlXG4gICAgKTtcbiAgfVxuXG4gIGFzeW5jIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpIHtcbiAgICBpZiAoY2hhbmdlcy5jb25maWc/LmZpcnN0Q2hhbmdlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKGNoYW5nZXMucm9vdE5vZGU/LnByZXZpb3VzVmFsdWUgIT09IGNoYW5nZXMucm9vdE5vZGU/LmN1cnJlbnRWYWx1ZSkge1xuICAgICAgdGhpcy5jaGFuZ2VSb290Tm9kZShjaGFuZ2VzLnJvb3ROb2RlLmN1cnJlbnRWYWx1ZSk7XG4gICAgfVxuXG4gICAgaWYgKGNoYW5nZXMuY29uZmlnPy5jdXJyZW50VmFsdWUpIHtcbiAgICAgIHRoaXMuY2hhbmdlQ29uZmlnKGNoYW5nZXMuY29uZmlnKTtcbiAgICB9XG4gIH1cblxuICBjaGFuZ2VDb25maWcoY2hhbmdlOiBTaW1wbGVDaGFuZ2UpIHtcbiAgICAvLyBvbiBmb2xsb3dpbmcsIGNhbmNlbCByZWxvYWQgdG8gYXZvaWQgc3RhbGUgc3RhdGVcbiAgICBpZiAoY2hhbmdlLmN1cnJlbnRWYWx1ZS5mb2xsb3cgPT09IHRydWUpIHtcbiAgICAgIHRoaXMuY2FuY2VsUmVsb2FkKCk7XG4gICAgICB0aGlzLmlzTG9hZGluZyQubmV4dChmYWxzZSk7XG4gICAgfVxuXG4gICAgaWYgKGNoYW5nZS5jdXJyZW50VmFsdWUucmVmcmVzaEludGVydmFsICE9PSBjaGFuZ2UucHJldmlvdXNWYWx1ZS5yZWZyZXNoSW50ZXJ2YWwpIHtcbiAgICAgIHRoaXMucmVsb2FkKCk7XG4gICAgfVxuICAgIHN1cGVyLmNoYW5nZUNvbmZpZyhjaGFuZ2UpO1xuICB9XG5cbiAgYXN5bmMgbmdBZnRlclZpZXdJbml0KCkge1xuICAgIGlmICghdGhpcy5sZWFmbGV0KSB7XG4gICAgICB0aGlzLmxlYWZsZXQgPSBhd2FpdCB0aGlzLm1hcFNlcnZpY2UuZ2V0TGVhZmxldCgpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmNvbmZpZy53aWRnZXRJbnN0YW5jZUdsb2JhbEF1dG9SZWZyZXNoQ29udGV4dCkge1xuICAgICAgdGhpcy5oYW5kbGVHbG9iYWxSZWZyZXNoTG9hZGluZygpO1xuICAgIH1cbiAgICBjb21iaW5lTGF0ZXN0KFt0aGlzLmxheWVycyQsIHRoaXMuZGVmYXVsdENvbmZpZyRdKVxuICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMudW5zdWJzY3JpYmVUcmlnZ2VyJCkpXG4gICAgICAuc3Vic2NyaWJlKChbbGF5ZXJzLCBkZWZhdWx0Q29uZmlnXSkgPT4ge1xuICAgICAgICB0aGlzLmluaXRNYXAobGF5ZXJzLCBkZWZhdWx0Q29uZmlnKTtcbiAgICAgICAgdGhpcy5jaGFuZ2VSb290Tm9kZSh0aGlzLnJvb3ROb2RlKTtcbiAgICAgICAgdGhpcy5jaGFuZ2VDb25maWcobmV3IFNpbXBsZUNoYW5nZSh7fSwgdGhpcy5jb25maWcsIGZhbHNlKSk7XG4gICAgICB9KTtcbiAgfVxuXG4gIGFzeW5jIHJlc2V0KCkge1xuICAgIHRoaXMubmdPbkRlc3Ryb3koKTtcbiAgICBhd2FpdCB0aGlzLm5nQWZ0ZXJWaWV3SW5pdCgpO1xuICB9XG5cbiAgcmVsb2FkKCkge1xuICAgIHRoaXMucmVsb2FkVHJpZ2dlciQubmV4dCh0cnVlKTtcbiAgfVxuXG4gIGNhbmNlbFJlbG9hZCgpIHtcbiAgICB0aGlzLnJlbG9hZFRyaWdnZXIkLm5leHQoZmFsc2UpO1xuICB9XG5cbiAgbGlzdGVuVG9DbHVzdGVyQW5kSW50ZXJ2YWxDaGFuZ2VzKCkge1xuICAgIGNvbnN0IGNvdW50ZG93bkVuZGVkJCA9IHRoaXMuY29uZmlnLndpZGdldEluc3RhbmNlR2xvYmFsQXV0b1JlZnJlc2hDb250ZXh0XG4gICAgICA/IHRoaXMud2lkZ2V0R2xvYmFsQXV0b1JlZnJlc2hTZXJ2aWNlLmNvdW50ZG93bkFjdGlvbnMuY291bnRkb3duRW5kZWQkLnBpcGUoXG4gICAgICAgICAgdGFrZVVudGlsKHRoaXMuZGVzdHJveSQpXG4gICAgICAgIClcbiAgICAgIDogdGhpcy5jb3VudGRvd25JbnRlcnZhbENvbXBcbiAgICAgICAgPyB0aGlzLmNvdW50ZG93bkludGVydmFsQ29tcC5jb3VudGRvd25FbmRlZC5waXBlKHRha2VVbnRpbCh0aGlzLnVuc3Vic2NyaWJlVHJpZ2dlciQpKVxuICAgICAgICA6IEVNUFRZO1xuXG4gICAgY29uc3QgbWFwQ2hhbmdlJCA9IHRoaXMuZ2V0TWFwQ2hhbmdlT2JzZXJ2YWJsZSgpO1xuICAgIG1lcmdlKHRoaXMucmVsb2FkVHJpZ2dlciQsIG1hcENoYW5nZSQsIGNvdW50ZG93bkVuZGVkJClcbiAgICAgIC5waXBlKFxuICAgICAgICB0YXAodmFsdWUgPT4ge1xuICAgICAgICAgIGlmICh0aGlzLmNvbmZpZy53aWRnZXRJbnN0YW5jZUdsb2JhbEF1dG9SZWZyZXNoQ29udGV4dCkge1xuICAgICAgICAgICAgIXRoaXMuaXNMZWFmbGV0RXZlbnRJbnRlcmZhY2UodmFsdWUpICYmIHRoaXMuaXNMb2FkaW5nJC5uZXh0KHRydWUpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cbiAgICAgICAgICB0aGlzLmlzTG9hZGluZyQubmV4dCh0cnVlKTtcbiAgICAgICAgICB0aGlzLmNvdW50ZG93bkludGVydmFsQ29tcD8uc3RvcCh0cnVlKTtcbiAgICAgICAgfSksXG4gICAgICAgIHN3aXRjaE1hcCh2YWx1ZSA9PlxuICAgICAgICAgIHZhbHVlID09PSBmYWxzZVxuICAgICAgICAgICAgPyBvZihbXSlcbiAgICAgICAgICAgIDogZnJvbSh0aGlzLm1hcFNlcnZpY2UuZ2V0Q2x1c3RlclNpemUodGhpcy5tYXAuZ2V0Qm91bmRzKCkpKS5waXBlKFxuICAgICAgICAgICAgICAgIG1lcmdlTWFwKChjbHVzdGVyU2l6ZTogQ2x1c3RlclNpemUpID0+XG4gICAgICAgICAgICAgICAgICB0aGlzLmdldENsdXN0ZXJSZWN0cyhjbHVzdGVyU2l6ZSwgdGhpcy5tYXAuZ2V0Qm91bmRzKCkpXG4gICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICBtZXJnZU1hcChyZWN0cyA9PiB0aGlzLmNyZWF0ZU9yVXBkYXRlQ2x1c3RlcihyZWN0cykpLFxuICAgICAgICAgICAgICAgIGNhdGNoRXJyb3IoZXJyb3IgPT4ge1xuICAgICAgICAgICAgICAgICAgdGhpcy5lcnJvck5vdGlmaWVyLm5leHQoZXJyb3IpO1xuXG4gICAgICAgICAgICAgICAgICByZXR1cm4gb2YoW10pO1xuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgIClcbiAgICAgICAgKSxcbiAgICAgICAgdGFrZVVudGlsKHRoaXMudW5zdWJzY3JpYmVUcmlnZ2VyJClcbiAgICAgIClcbiAgICAgIC5zdWJzY3JpYmUoKGNsdXN0ZXJzOiBDbHVzdGVyTWFwW10pID0+IHtcbiAgICAgICAgY2x1c3RlcnMuZm9yRWFjaChjbHVzdGVyID0+IGNsdXN0ZXIucmVuZGVyKHRoaXMubWFwKSk7XG4gICAgICAgIHRoaXMuaXNMb2FkaW5nJC5uZXh0KGZhbHNlKTtcbiAgICAgICAgaWYgKHRoaXMuY29uZmlnLndpZGdldEluc3RhbmNlR2xvYmFsQXV0b1JlZnJlc2hDb250ZXh0KSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuY291bnRkb3duSW50ZXJ2YWxDb21wPy5zdGFydCgpO1xuICAgICAgfSk7XG4gIH1cblxuICBsaXN0ZW5Ub0NsdXN0ZXJNYXBDaGFuZ2VzKCkge1xuICAgIHRoaXMuZ2V0TWFwQ2hhbmdlT2JzZXJ2YWJsZSgpLnN1YnNjcmliZSgpO1xuICB9XG5cbiAgcmVmcmVzaE1hcmtlcnMoKSB7XG4gICAgaWYgKHRoaXMuYXNzZXRzKSB7XG4gICAgICBzdXBlci5yZWZyZXNoTWFya2VycygpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLmNsdXN0ZXJzLmZvckVhY2goY2x1c3RlciA9PiB7XG4gICAgICBjbHVzdGVyLmNsZWFyKHRoaXMubWFwKTtcbiAgICB9KTtcbiAgICB0aGlzLnJlbG9hZCgpO1xuICB9XG5cbiAgcHJpdmF0ZSBjaGFuZ2VSb290Tm9kZShtbzogSU1hbmFnZWRPYmplY3QpIHtcbiAgICB0aGlzLnVuc3Vic2NyaWJlQWxsTGlzdGVuZXJzKCk7XG4gICAgdGhpcy5jbGVhck1hcmtlcnMoKTtcbiAgICB0aGlzLmNsZWFyQ2x1c3RlcnMoKTtcblxuICAgIGNvbnN0IGlzUG9zaXRpb25EZXZpY2UgPSBtbz8uYzh5X1Bvc2l0aW9uICYmIG1vPy5jOHlfSXNEZXZpY2U7XG4gICAgaWYgKGlzUG9zaXRpb25EZXZpY2UpIHtcbiAgICAgIHRoaXMuYXNzZXRzID0gbW8gYXMgUG9zaXRpb25NYW5hZ2VkT2JqZWN0O1xuICAgICAgdGhpcy5yZWZyZXNoTWFya2VycygpO1xuICAgICAgdGhpcy5saXN0ZW5Ub0NsdXN0ZXJNYXBDaGFuZ2VzKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuYXNzZXRzID0gbnVsbDtcbiAgICAgIHRoaXMubGlzdGVuVG9DbHVzdGVyQW5kSW50ZXJ2YWxDaGFuZ2VzKCk7XG4gICAgICB0aGlzLnJlbG9hZCgpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgZ2V0Q2x1c3RlclJlY3RzKFxuICAgIGxldmVsVGhyZXNob2xkOiBDbHVzdGVyU2l6ZSA9IENsdXN0ZXJTaXplLkZPVVIsXG4gICAgdmlld0JvdW5kczogTC5MYXRMbmdCb3VuZHMsXG4gICAgbGV2ZWwgPSAwXG4gICk6IFByb21pc2U8TC5SZWN0YW5nbGVbXT4ge1xuICAgIGxldCByZWN0cyA9IFtdO1xuXG4gICAgaWYgKGxldmVsVGhyZXNob2xkID09PSBDbHVzdGVyU2l6ZS5OT05FKSB7XG4gICAgICBjb25zdCByZWN0ID0gYXdhaXQgdGhpcy5nZXRSZWN0KHZpZXdCb3VuZHMpO1xuICAgICAgcmVjdHMucHVzaChyZWN0KTtcbiAgICAgIHJldHVybiByZWN0cztcbiAgICB9XG5cbiAgICBpZiAobGV2ZWwgPj0gbGV2ZWxUaHJlc2hvbGQpIHtcbiAgICAgIHJldHVybiByZWN0cztcbiAgICB9XG4gICAgbGV2ZWwrKztcblxuICAgIGNvbnN0IHsgbGF0OiB4MSwgbG5nOiB5MSB9ID0gdmlld0JvdW5kcy5nZXRTb3V0aFdlc3QoKTtcbiAgICBjb25zdCB7IGxhdDogeDIsIGxuZzogeTIgfSA9IHZpZXdCb3VuZHMuZ2V0Tm9ydGhFYXN0KCk7XG4gICAgY29uc3QgbmV3WDIgPSAoeDEgKyB4MikgLyAyO1xuICAgIGNvbnN0IG5ld1kyID0gKHkxICsgeTIpIC8gMjtcblxuICAgIGNvbnN0IGJvdW5kczogW1tudW1iZXIsIG51bWJlcl0sIFtudW1iZXIsIG51bWJlcl1dW10gPSBbXG4gICAgICBbXG4gICAgICAgIFt4MSwgeTFdLFxuICAgICAgICBbbmV3WDIsIG5ld1kyXVxuICAgICAgXSxcbiAgICAgIFtcbiAgICAgICAgW25ld1gyLCBuZXdZMl0sXG4gICAgICAgIFt4MiwgeTJdXG4gICAgICBdLFxuICAgICAgW1xuICAgICAgICBbeDEsIG5ld1kyXSxcbiAgICAgICAgW25ld1gyLCB5Ml1cbiAgICAgIF0sXG4gICAgICBbXG4gICAgICAgIFtuZXdYMiwgeTFdLFxuICAgICAgICBbeDIsIG5ld1kyXVxuICAgICAgXVxuICAgIF07XG4gICAgZm9yIChjb25zdCBib3VuZCBvZiBib3VuZHMpIHtcbiAgICAgIGNvbnN0IGxhdExuZ0JvdW5kID0gdGhpcy5sZWFmbGV0LmxhdExuZ0JvdW5kcyhib3VuZCk7XG4gICAgICBjb25zdCByZWN0ID0gYXdhaXQgdGhpcy5nZXRSZWN0KGxhdExuZ0JvdW5kKTtcbiAgICAgIHJlY3RzID0gWy4uLnJlY3RzLCAuLi4oYXdhaXQgdGhpcy5nZXRDbHVzdGVyUmVjdHMobGV2ZWxUaHJlc2hvbGQsIGxhdExuZ0JvdW5kLCBsZXZlbCkpXTtcblxuICAgICAgaWYgKGxldmVsID09PSBsZXZlbFRocmVzaG9sZCkge1xuICAgICAgICByZWN0cy5wdXNoKHJlY3QpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiByZWN0cztcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgZ2V0UmVjdChsYXRMbmdCb3VuZDogTC5MYXRMbmdCb3VuZHMpIHtcbiAgICBsZXQgY29sb3IgPSAnbm9uZSc7XG4gICAgaWYgKHRoaXMuc2hvd0NsdXN0ZXJDb2xvcikge1xuICAgICAgY29sb3IgPSBhd2FpdCB0aGlzLmNvbG9yU2VydmljZS5nZW5lcmF0ZUNvbG9yKGxhdExuZ0JvdW5kLnRvQkJveFN0cmluZygpKTtcbiAgICB9XG4gICAgY29uc3QgcmVjdCA9IHRoaXMubGVhZmxldC5yZWN0YW5nbGUobGF0TG5nQm91bmQsIHtcbiAgICAgIGNvbG9yLFxuICAgICAgd2VpZ2h0OiBjb2xvciA9PT0gJ25vbmUnID8gMCA6IDEsXG4gICAgICBpbnRlcmFjdGl2ZTogZmFsc2VcbiAgICB9KTtcbiAgICByZXR1cm4gcmVjdDtcbiAgfVxuXG4gIHByaXZhdGUgY2xlYXJDbHVzdGVycygpIHtcbiAgICB0aGlzLmNsdXN0ZXJzLmZvckVhY2goY2x1c3RlciA9PiB7XG4gICAgICBjbHVzdGVyLmNsZWFyKHRoaXMubWFwKTtcbiAgICB9KTtcbiAgICB0aGlzLmNsdXN0ZXJzID0gW107XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIHVwZGF0ZUNsdXN0ZXIoY2x1c3RlcjogQ2x1c3Rlck1hcCkge1xuICAgIGNvbnN0IGNsdXN0ZXJDb3VudCA9IGF3YWl0IHRoaXMubWFwU2VydmljZS5nZXRQb3NpdGlvbk1Pc0Zyb21Cb3VuZENvdW50KFxuICAgICAgY2x1c3Rlci5yZWN0LmdldEJvdW5kcygpLFxuICAgICAgdGhpcy5yb290Tm9kZVxuICAgICk7XG4gICAgaWYgKGNsdXN0ZXJDb3VudCA+IHRoaXMubWFwU2VydmljZS5NQVhfREVWSUNFX1BFUl9DTFVTVEVSKSB7XG4gICAgICBjbHVzdGVyLnNldENsdXN0ZXJUb0JpZ01hcmtlcih0aGlzLm1hcCwgY2x1c3RlckNvdW50LCB0aGlzLmxlYWZsZXQpO1xuICAgICAgY2x1c3Rlci5wb3NpdGlvbnMgPSBbXTtcbiAgICAgIHJldHVybiBjbHVzdGVyO1xuICAgIH1cblxuICAgIGNsdXN0ZXIucmVtb3ZlQ2x1c3RlclRvQmlnTWFya2VyKCk7XG4gICAgY2x1c3Rlci5wb3NpdGlvbnMgPSBhd2FpdCB0aGlzLm1hcFNlcnZpY2UuZ2V0UG9zaXRpb25NT3NGcm9tQm91bmQoXG4gICAgICBjbHVzdGVyLnJlY3QuZ2V0Qm91bmRzKCksXG4gICAgICB0aGlzLnJvb3ROb2RlXG4gICAgKTtcbiAgICByZXR1cm4gY2x1c3RlcjtcbiAgfVxuXG4gIHByaXZhdGUgY3JlYXRlT3JVcGRhdGVDbHVzdGVyKHJlY3RzOiBMLlJlY3RhbmdsZTx1bmtub3duPltdKSB7XG4gICAgY29uc3QgaXNOZXcgPSByZWN0cy5sZW5ndGggIT09IHRoaXMuY2x1c3RlcnMubGVuZ3RoO1xuICAgIGlmIChpc05ldykge1xuICAgICAgdGhpcy5jbGVhckNsdXN0ZXJzKCk7XG4gICAgfVxuICAgIGNvbnN0IHVwZGF0ZVByb21pc2UgPSByZWN0cy5tYXAoKHJlY3QsIGluZGV4KSA9PiB7XG4gICAgICBpZiAoaXNOZXcpIHtcbiAgICAgICAgY29uc3QgY2x1c3RlciA9IG5ldyBDbHVzdGVyTWFwKFxuICAgICAgICAgIHRoaXMuaXRlcmFibGUsXG4gICAgICAgICAgYXNzZXQgPT4gdGhpcy5nZXRBc3NldE1hcmtlcihhc3NldCksXG4gICAgICAgICAgdGhpcy50cmFuc2xhdGVTZXJ2aWNlXG4gICAgICAgICk7XG4gICAgICAgIHRoaXMuY2x1c3RlcnMucHVzaChjbHVzdGVyKTtcbiAgICAgIH1cbiAgICAgIHRoaXMuY2x1c3RlcnNbaW5kZXhdLnJlY3QgPSByZWN0O1xuICAgICAgcmV0dXJuIHRoaXMudXBkYXRlQ2x1c3Rlcih0aGlzLmNsdXN0ZXJzW2luZGV4XSk7XG4gICAgfSk7XG5cbiAgICByZXR1cm4gUHJvbWlzZS5hbGwodXBkYXRlUHJvbWlzZSk7XG4gIH1cblxuICBwcml2YXRlIGdldE1hcENoYW5nZU9ic2VydmFibGUoKSB7XG4gICAgcmV0dXJuIG1lcmdlKFxuICAgICAgZnJvbUV2ZW50PEwuTGVhZmxldEV2ZW50Pih0aGlzLm1hcCwgJ21vdmUnKSxcbiAgICAgIGZyb21FdmVudDxMLkxlYWZsZXRFdmVudD4odGhpcy5tYXAsICdtb3ZlZW5kJylcbiAgICApLnBpcGUoXG4gICAgICBkZWJvdW5jZVRpbWUodGhpcy5FVkVOVF9USFJPVFRMRV9USU1FKSxcbiAgICAgIHRhcChldmVudCA9PiB0aGlzLm1hcENoYW5nZS5lbWl0KGV2ZW50KSksXG4gICAgICB0YWtlVW50aWwodGhpcy51bnN1YnNjcmliZVRyaWdnZXIkKVxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIGlzTGVhZmxldEV2ZW50SW50ZXJmYWNlKFxuICAgIExlYWZsZXRFdmVudE9iamVjdDogTC5MZWFmbGV0RXZlbnQgfCBib29sZWFuIHwgdm9pZFxuICApOiBMZWFmbGV0RXZlbnRPYmplY3QgaXMgTC5MZWFmbGV0RXZlbnQge1xuICAgIHJldHVybiAoTGVhZmxldEV2ZW50T2JqZWN0IGFzIEwuTGVhZmxldEV2ZW50KT8udHlwZSAhPT0gdW5kZWZpbmVkO1xuICB9XG5cbiAgcHJpdmF0ZSBoYW5kbGVHbG9iYWxSZWZyZXNoTG9hZGluZygpOiB2b2lkIHtcbiAgICB0aGlzLmlzTG9hZGluZyRcbiAgICAgIC5waXBlKFxuICAgICAgICBza2lwKDEpLFxuICAgICAgICBnbG9iYWxBdXRvUmVmcmVzaExvYWRpbmcodGhpcy53aWRnZXRHbG9iYWxBdXRvUmVmcmVzaFNlcnZpY2UpLFxuICAgICAgICB0YWtlVW50aWwodGhpcy5kZXN0cm95JClcbiAgICAgIClcbiAgICAgIC5zdWJzY3JpYmUoKTtcblxuICAgIHRoaXMuZGVzdHJveSQuc3Vic2NyaWJlKHtcbiAgICAgIGNvbXBsZXRlOiAoKSA9PlxuICAgICAgICB0aGlzLmlzTG9hZGluZyQudmFsdWUgJiYgdGhpcy53aWRnZXRHbG9iYWxBdXRvUmVmcmVzaFNlcnZpY2UuZGVjcmVtZW50TG9hZGluZygpXG4gICAgfSk7XG4gIH1cbn1cbiIsIjxkaXYgY2xhc3M9XCJjOHktbWFwXCI+XG4gIDxkaXYgI21hcD48L2Rpdj5cbjwvZGl2PlxuPG5nLWNvbnRlbnQ+PC9uZy1jb250ZW50PlxuIl19
268
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2x1c3Rlci1tYXAuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vbWFwL2NsdXN0ZXItbWFwLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uL21hcC9jbHVzdGVyLW1hcC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsU0FBUyxFQUNULFVBQVUsRUFDVixZQUFZLEVBQ1osTUFBTSxFQUNOLEtBQUssRUFDTCxlQUFlLEVBQ2YsTUFBTSxFQUNOLFlBQVksRUFFWixTQUFTLEVBQ1YsTUFBTSxlQUFlLENBQUM7QUFHdkIsT0FBTyxFQUNMLFlBQVksRUFFWixRQUFRLEVBQ1IsVUFBVSxFQUNWLDRCQUE0QixFQUM1Qiw4QkFBOEIsRUFDOUIsd0JBQXdCLEVBR3pCLE1BQU0scUJBQXFCLENBQUM7QUFDN0IsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFFdkQsT0FBTyxFQUNMLGVBQWUsRUFDZixLQUFLLEVBQ0wsVUFBVSxFQUNWLGFBQWEsRUFDYixJQUFJLEVBQ0osU0FBUyxFQUNULEtBQUssRUFDTCxFQUFFLEVBQ0gsTUFBTSxNQUFNLENBQUM7QUFDZCxPQUFPLEVBQ0wsVUFBVSxFQUNWLFlBQVksRUFDWixRQUFRLEVBQ1IsSUFBSSxFQUNKLFNBQVMsRUFDVCxTQUFTLEVBQ1QsR0FBRyxFQUNKLE1BQU0sZ0JBQWdCLENBQUM7QUFDeEIsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzQyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUVMLFdBQVcsRUFDWCxrQkFBa0IsRUFDbEIsY0FBYyxFQUVmLE1BQU0sYUFBYSxDQUFDO0FBQ3JCLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7Ozs7OztBQU8zQyxNQUFNLE9BQU8sbUJBQW9CLFNBQVEsWUFBWTtJQTZCbkQsWUFDWSxp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SyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIENvbXBvbmVudCxcbiAgRWxlbWVudFJlZixcbiAgRXZlbnRFbWl0dGVyLFxuICBJbmplY3QsXG4gIElucHV0LFxuICBJdGVyYWJsZURpZmZlcnMsXG4gIE91dHB1dCxcbiAgU2ltcGxlQ2hhbmdlLFxuICBTaW1wbGVDaGFuZ2VzLFxuICBWaWV3Q2hpbGRcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBJTWFuYWdlZE9iamVjdCB9IGZyb20gJ0BjOHkvY2xpZW50JztcbmltcG9ydCB0eXBlIHsgTWFwRGVmYXVsdENvbmZpZywgTWFwVGlsZUxheWVyIH0gZnJvbSAnQGM4eS9vcHRpb25zJztcbmltcG9ydCB7XG4gIENvbG9yU2VydmljZSxcbiAgQ291bnRkb3duSW50ZXJ2YWxDb21wb25lbnQsXG4gIERhdGVQaXBlLFxuICBHZW9TZXJ2aWNlLFxuICBNYW5hZ2VkT2JqZWN0UmVhbHRpbWVTZXJ2aWNlLFxuICBXaWRnZXRHbG9iYWxBdXRvUmVmcmVzaFNlcnZpY2UsXG4gIGdsb2JhbEF1dG9SZWZyZXNoTG9hZGluZyxcbiAgRHluYW1pY0NvbXBvbmVudCxcbiAgRHluYW1pY0NvbXBvbmVudEFsZXJ0QWdncmVnYXRvclxufSBmcm9tICdAYzh5L25neC1jb21wb25lbnRzJztcbmltcG9ydCB7IFRyYW5zbGF0ZVNlcnZpY2UgfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJztcbmltcG9ydCB0eXBlICogYXMgTCBmcm9tICdsZWFmbGV0JztcbmltcG9ydCB7XG4gIEJlaGF2aW9yU3ViamVjdCxcbiAgRU1QVFksXG4gIE9ic2VydmFibGUsXG4gIGNvbWJpbmVMYXRlc3QsXG4gIGZyb20sXG4gIGZyb21FdmVudCxcbiAgbWVyZ2UsXG4gIG9mXG59IGZyb20gJ3J4anMnO1xuaW1wb3J0IHtcbiAgY2F0Y2hFcnJvcixcbiAgZGVib3VuY2VUaW1lLFxuICBtZXJnZU1hcCxcbiAgc2tpcCxcbiAgc3dpdGNoTWFwLFxuICB0YWtlVW50aWwsXG4gIHRhcFxufSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBDbHVzdGVyTWFwIH0gZnJvbSAnLi9jbHVzdGVyLW1hcCc7XG5pbXBvcnQgeyBNYXBDb21wb25lbnQgfSBmcm9tICcuL21hcC5jb21wb25lbnQnO1xuaW1wb3J0IHtcbiAgQ2x1c3Rlck1hcENvbmZpZyxcbiAgQ2x1c3RlclNpemUsXG4gIE1BUF9ERUZBVUxUX0NPTkZJRyxcbiAgTUFQX1RJTEVfTEFZRVIsXG4gIFBvc2l0aW9uTWFuYWdlZE9iamVjdFxufSBmcm9tICcuL21hcC5tb2RlbCc7XG5pbXBvcnQgeyBNYXBTZXJ2aWNlIH0gZnJvbSAnLi9tYXAuc2VydmljZSc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2M4eS1jbHVzdGVyLW1hcCcsXG4gIHRlbXBsYXRlVXJsOiAnLi9jbHVzdGVyLW1hcC5jb21wb25lbnQuaHRtbCcsXG4gIHByb3ZpZGVyczogW01hbmFnZWRPYmplY3RSZWFsdGltZVNlcnZpY2VdXG59KVxuZXhwb3J0IGNsYXNzIENsdXN0ZXJNYXBDb21wb25lbnQgZXh0ZW5kcyBNYXBDb21wb25lbnQgaW1wbGVtZW50cyBEeW5hbWljQ29tcG9uZW50IHtcbiAgaXNMb2FkaW5nJCA9IG5ldyBCZWhhdmlvclN1YmplY3QoZmFsc2UpO1xuICBjb3VudGRvd25JbnRlcnZhbENvbXA6IENvdW50ZG93bkludGVydmFsQ29tcG9uZW50O1xuXG4gIEBJbnB1dCgpXG4gIGNvbmZpZzogQ2x1c3Rlck1hcENvbmZpZztcblxuICBASW5wdXQoKVxuICByb290Tm9kZTogSU1hbmFnZWRPYmplY3Q7XG5cbiAgQElucHV0KCdhc3NldCcpXG4gIGFzc2V0czogUG9zaXRpb25NYW5hZ2VkT2JqZWN0O1xuXG4gIEBJbnB1dCgpXG4gIHNob3dDbHVzdGVyQ29sb3IgPSBmYWxzZTtcblxuICBAT3V0cHV0KClcbiAgbWFwQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxMLkxlYWZsZXRFdmVudD4oKTtcblxuICBAVmlld0NoaWxkKCdtYXAnKVxuICBtYXBFbGVtZW50OiBFbGVtZW50UmVmO1xuXG4gIGFsZXJ0czogRHluYW1pY0NvbXBvbmVudEFsZXJ0QWdncmVnYXRvcjtcblxuICBlcnJvck5vdGlmaWVyID0gbmV3IEJlaGF2aW9yU3ViamVjdChudWxsKTtcbiAgcHJpdmF0ZSByZWxvYWRUcmlnZ2VyJCA9IG5ldyBCZWhhdmlvclN1YmplY3QoZmFsc2UpO1xuICBwcml2YXRlIGNsdXN0ZXJzOiBDbHVzdGVyTWFwW10gPSBbXTtcbiAgcHJpdmF0ZSByZWFkb25seSBFVkVOVF9USFJPVFRMRV9USU1FID0gNzUwO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByb3RlY3RlZCBtb1JlYWx0aW1lU2VydmljZTogTWFuYWdlZE9iamVjdFJlYWx0aW1lU2VydmljZSxcbiAgICBwcm90ZWN0ZWQgbWFwU2VydmljZTogTWFwU2VydmljZSxcbiAgICBASW5qZWN0KE1BUF9USUxFX0xBWUVSKSBwcm90ZWN0ZWQgbGF5ZXJzJDogT2JzZXJ2YWJsZTxNYXBUaWxlTGF5ZXJbXT4sXG4gICAgQEluamVjdChNQVBfREVGQVVMVF9DT05GSUcpXG4gICAgcHJvdGVjdGVkIGRlZmF1bHRDb25maWckOiBPYnNlcnZhYmxlPE1hcERlZmF1bHRDb25maWc+LFxuICAgIHByb3RlY3RlZCB0cmFuc2xhdGVTZXJ2aWNlOiBUcmFuc2xhdGVTZXJ2aWNlLFxuICAgIHByb3RlY3RlZCB3aWRnZXRHbG9iYWxBdXRvUmVmcmVzaFNlcnZpY2U6IFdpZGdldEdsb2JhbEF1dG9SZWZyZXNoU2VydmljZSxcbiAgICBwcml2YXRlIGl0ZXJhYmxlOiBJdGVyYWJsZURpZmZlcnMsXG4gICAgcHJpdmF0ZSBjb2xvclNlcnZpY2U6IENvbG9yU2VydmljZSxcbiAgICBnZW86IEdlb1NlcnZpY2UsXG4gICAgZGF0ZVBpcGU6IERhdGVQaXBlXG4gICkge1xuICAgIHN1cGVyKFxuICAgICAgbW9SZWFsdGltZVNlcnZpY2UsXG4gICAgICBtYXBTZXJ2aWNlLFxuICAgICAgbGF5ZXJzJCxcbiAgICAgIGRlZmF1bHRDb25maWckLFxuICAgICAgdHJhbnNsYXRlU2VydmljZSxcbiAgICAgIGdlbyxcbiAgICAgIGRhdGVQaXBlLFxuICAgICAgd2lkZ2V0R2xvYmFsQXV0b1JlZnJlc2hTZXJ2aWNlXG4gICAgKTtcbiAgfVxuXG4gIGFzeW5jIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpIHtcbiAgICBpZiAoY2hhbmdlcy5jb25maWc/LmZpcnN0Q2hhbmdlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKGNoYW5nZXMucm9vdE5vZGU/LnByZXZpb3VzVmFsdWUgIT09IGNoYW5nZXMucm9vdE5vZGU/LmN1cnJlbnRWYWx1ZSkge1xuICAgICAgdGhpcy5jaGFuZ2VSb290Tm9kZShjaGFuZ2VzLnJvb3ROb2RlLmN1cnJlbnRWYWx1ZSk7XG4gICAgfVxuXG4gICAgaWYgKGNoYW5nZXMuY29uZmlnPy5jdXJyZW50VmFsdWUpIHtcbiAgICAgIHRoaXMuY2hhbmdlQ29uZmlnKGNoYW5nZXMuY29uZmlnKTtcbiAgICB9XG4gIH1cblxuICBjaGFuZ2VDb25maWcoY2hhbmdlOiBTaW1wbGVDaGFuZ2UpIHtcbiAgICAvLyBvbiBmb2xsb3dpbmcsIGNhbmNlbCByZWxvYWQgdG8gYXZvaWQgc3RhbGUgc3RhdGVcbiAgICBpZiAoY2hhbmdlLmN1cnJlbnRWYWx1ZS5mb2xsb3cgPT09IHRydWUpIHtcbiAgICAgIHRoaXMuY2FuY2VsUmVsb2FkKCk7XG4gICAgICB0aGlzLmlzTG9hZGluZyQubmV4dChmYWxzZSk7XG4gICAgfVxuXG4gICAgaWYgKGNoYW5nZS5jdXJyZW50VmFsdWUucmVmcmVzaEludGVydmFsICE9PSBjaGFuZ2UucHJldmlvdXNWYWx1ZS5yZWZyZXNoSW50ZXJ2YWwpIHtcbiAgICAgIHRoaXMucmVsb2FkKCk7XG4gICAgfVxuICAgIHN1cGVyLmNoYW5nZUNvbmZpZyhjaGFuZ2UpO1xuICB9XG5cbiAgYXN5bmMgbmdBZnRlclZpZXdJbml0KCkge1xuICAgIGlmICghdGhpcy5sZWFmbGV0KSB7XG4gICAgICB0aGlzLmxlYWZsZXQgPSBhd2FpdCB0aGlzLm1hcFNlcnZpY2UuZ2V0TGVhZmxldCgpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmNvbmZpZy53aWRnZXRJbnN0YW5jZUdsb2JhbEF1dG9SZWZyZXNoQ29udGV4dCkge1xuICAgICAgdGhpcy5oYW5kbGVHbG9iYWxSZWZyZXNoTG9hZGluZygpO1xuICAgIH1cbiAgICBjb21iaW5lTGF0ZXN0KFt0aGlzLmxheWVycyQsIHRoaXMuZGVmYXVsdENvbmZpZyRdKVxuICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMudW5zdWJzY3JpYmVUcmlnZ2VyJCkpXG4gICAgICAuc3Vic2NyaWJlKChbbGF5ZXJzLCBkZWZhdWx0Q29uZmlnXSkgPT4ge1xuICAgICAgICB0aGlzLmluaXRNYXAobGF5ZXJzLCBkZWZhdWx0Q29uZmlnKTtcbiAgICAgICAgdGhpcy5jaGFuZ2VSb290Tm9kZSh0aGlzLnJvb3ROb2RlKTtcbiAgICAgICAgdGhpcy5jaGFuZ2VDb25maWcobmV3IFNpbXBsZUNoYW5nZSh7fSwgdGhpcy5jb25maWcsIGZhbHNlKSk7XG4gICAgICB9KTtcbiAgfVxuXG4gIGFzeW5jIHJlc2V0KCkge1xuICAgIHRoaXMubmdPbkRlc3Ryb3koKTtcbiAgICBhd2FpdCB0aGlzLm5nQWZ0ZXJWaWV3SW5pdCgpO1xuICB9XG5cbiAgcmVsb2FkKCkge1xuICAgIHRoaXMucmVsb2FkVHJpZ2dlciQubmV4dCh0cnVlKTtcbiAgfVxuXG4gIGNhbmNlbFJlbG9hZCgpIHtcbiAgICB0aGlzLnJlbG9hZFRyaWdnZXIkLm5leHQoZmFsc2UpO1xuICB9XG5cbiAgbGlzdGVuVG9DbHVzdGVyQW5kSW50ZXJ2YWxDaGFuZ2VzKCkge1xuICAgIGNvbnN0IGNvdW50ZG93bkVuZGVkJCA9IHRoaXMuY29uZmlnLndpZGdldEluc3RhbmNlR2xvYmFsQXV0b1JlZnJlc2hDb250ZXh0XG4gICAgICA/IHRoaXMud2lkZ2V0R2xvYmFsQXV0b1JlZnJlc2hTZXJ2aWNlLmNvdW50ZG93bkFjdGlvbnMuY291bnRkb3duRW5kZWQkLnBpcGUoXG4gICAgICAgICAgdGFrZVVudGlsKHRoaXMuZGVzdHJveSQpXG4gICAgICAgIClcbiAgICAgIDogdGhpcy5jb3VudGRvd25JbnRlcnZhbENvbXBcbiAgICAgICAgPyB0aGlzLmNvdW50ZG93bkludGVydmFsQ29tcC5jb3VudGRvd25FbmRlZC5waXBlKHRha2VVbnRpbCh0aGlzLnVuc3Vic2NyaWJlVHJpZ2dlciQpKVxuICAgICAgICA6IEVNUFRZO1xuXG4gICAgY29uc3QgbWFwQ2hhbmdlJCA9IHRoaXMuZ2V0TWFwQ2hhbmdlT2JzZXJ2YWJsZSgpO1xuICAgIG1lcmdlKHRoaXMucmVsb2FkVHJpZ2dlciQsIG1hcENoYW5nZSQsIGNvdW50ZG93bkVuZGVkJClcbiAgICAgIC5waXBlKFxuICAgICAgICB0YXAodmFsdWUgPT4ge1xuICAgICAgICAgIGlmICh0aGlzLmNvbmZpZy53aWRnZXRJbnN0YW5jZUdsb2JhbEF1dG9SZWZyZXNoQ29udGV4dCkge1xuICAgICAgICAgICAgIXRoaXMuaXNMZWFmbGV0RXZlbnRJbnRlcmZhY2UodmFsdWUpICYmIHRoaXMuaXNMb2FkaW5nJC5uZXh0KHRydWUpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cbiAgICAgICAgICB0aGlzLmlzTG9hZGluZyQubmV4dCh0cnVlKTtcbiAgICAgICAgICB0aGlzLmNvdW50ZG93bkludGVydmFsQ29tcD8uc3RvcCh0cnVlKTtcbiAgICAgICAgfSksXG4gICAgICAgIHN3aXRjaE1hcCh2YWx1ZSA9PlxuICAgICAgICAgIHZhbHVlID09PSBmYWxzZVxuICAgICAgICAgICAgPyBvZihbXSlcbiAgICAgICAgICAgIDogZnJvbSh0aGlzLm1hcFNlcnZpY2UuZ2V0Q2x1c3RlclNpemUodGhpcy5tYXAuZ2V0Qm91bmRzKCkpKS5waXBlKFxuICAgICAgICAgICAgICAgIG1lcmdlTWFwKChjbHVzdGVyU2l6ZTogQ2x1c3RlclNpemUpID0+XG4gICAgICAgICAgICAgICAgICB0aGlzLmdldENsdXN0ZXJSZWN0cyhjbHVzdGVyU2l6ZSwgdGhpcy5tYXAuZ2V0Qm91bmRzKCkpXG4gICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICBtZXJnZU1hcChyZWN0cyA9PiB0aGlzLmNyZWF0ZU9yVXBkYXRlQ2x1c3RlcihyZWN0cykpLFxuICAgICAgICAgICAgICAgIGNhdGNoRXJyb3IoZXJyb3IgPT4ge1xuICAgICAgICAgICAgICAgICAgdGhpcy5lcnJvck5vdGlmaWVyLm5leHQoZXJyb3IpO1xuXG4gICAgICAgICAgICAgICAgICByZXR1cm4gb2YoW10pO1xuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgIClcbiAgICAgICAgKSxcbiAgICAgICAgdGFrZVVudGlsKHRoaXMudW5zdWJzY3JpYmVUcmlnZ2VyJClcbiAgICAgIClcbiAgICAgIC5zdWJzY3JpYmUoKGNsdXN0ZXJzOiBDbHVzdGVyTWFwW10pID0+IHtcbiAgICAgICAgY2x1c3RlcnMuZm9yRWFjaChjbHVzdGVyID0+IGNsdXN0ZXIucmVuZGVyKHRoaXMubWFwKSk7XG4gICAgICAgIHRoaXMuaXNMb2FkaW5nJC5uZXh0KGZhbHNlKTtcbiAgICAgICAgaWYgKHRoaXMuY29uZmlnLndpZGdldEluc3RhbmNlR2xvYmFsQXV0b1JlZnJlc2hDb250ZXh0KSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuY291bnRkb3duSW50ZXJ2YWxDb21wPy5zdGFydCgpO1xuICAgICAgfSk7XG4gIH1cblxuICBsaXN0ZW5Ub0NsdXN0ZXJNYXBDaGFuZ2VzKCkge1xuICAgIHRoaXMuZ2V0TWFwQ2hhbmdlT2JzZXJ2YWJsZSgpLnN1YnNjcmliZSgpO1xuICB9XG5cbiAgcmVmcmVzaE1hcmtlcnMoKSB7XG4gICAgaWYgKHRoaXMuYXNzZXRzKSB7XG4gICAgICBzdXBlci5yZWZyZXNoTWFya2VycygpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLmNsdXN0ZXJzLmZvckVhY2goY2x1c3RlciA9PiB7XG4gICAgICBjbHVzdGVyLmNsZWFyKHRoaXMubWFwKTtcbiAgICB9KTtcbiAgICB0aGlzLnJlbG9hZCgpO1xuICB9XG5cbiAgcHJpdmF0ZSBjaGFuZ2VSb290Tm9kZShtbzogSU1hbmFnZWRPYmplY3QpIHtcbiAgICB0aGlzLnVuc3Vic2NyaWJlQWxsTGlzdGVuZXJzKCk7XG4gICAgdGhpcy5jbGVhck1hcmtlcnMoKTtcbiAgICB0aGlzLmNsZWFyQ2x1c3RlcnMoKTtcblxuICAgIGNvbnN0IGlzUG9zaXRpb25EZXZpY2UgPSBtbz8uYzh5X1Bvc2l0aW9uICYmIG1vPy5jOHlfSXNEZXZpY2U7XG4gICAgaWYgKGlzUG9zaXRpb25EZXZpY2UpIHtcbiAgICAgIHRoaXMuYXNzZXRzID0gbW8gYXMgUG9zaXRpb25NYW5hZ2VkT2JqZWN0O1xuICAgICAgdGhpcy5yZWZyZXNoTWFya2VycygpO1xuICAgICAgdGhpcy5saXN0ZW5Ub0NsdXN0ZXJNYXBDaGFuZ2VzKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuYXNzZXRzID0gbnVsbDtcbiAgICAgIHRoaXMubGlzdGVuVG9DbHVzdGVyQW5kSW50ZXJ2YWxDaGFuZ2VzKCk7XG4gICAgICB0aGlzLnJlbG9hZCgpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgZ2V0Q2x1c3RlclJlY3RzKFxuICAgIGxldmVsVGhyZXNob2xkOiBDbHVzdGVyU2l6ZSA9IENsdXN0ZXJTaXplLkZPVVIsXG4gICAgdmlld0JvdW5kczogTC5MYXRMbmdCb3VuZHMsXG4gICAgbGV2ZWwgPSAwXG4gICk6IFByb21pc2U8TC5SZWN0YW5nbGVbXT4ge1xuICAgIGxldCByZWN0cyA9IFtdO1xuXG4gICAgaWYgKGxldmVsVGhyZXNob2xkID09PSBDbHVzdGVyU2l6ZS5OT05FKSB7XG4gICAgICBjb25zdCByZWN0ID0gYXdhaXQgdGhpcy5nZXRSZWN0KHZpZXdCb3VuZHMpO1xuICAgICAgcmVjdHMucHVzaChyZWN0KTtcbiAgICAgIHJldHVybiByZWN0cztcbiAgICB9XG5cbiAgICBpZiAobGV2ZWwgPj0gbGV2ZWxUaHJlc2hvbGQpIHtcbiAgICAgIHJldHVybiByZWN0cztcbiAgICB9XG4gICAgbGV2ZWwrKztcblxuICAgIGNvbnN0IHsgbGF0OiB4MSwgbG5nOiB5MSB9ID0gdmlld0JvdW5kcy5nZXRTb3V0aFdlc3QoKTtcbiAgICBjb25zdCB7IGxhdDogeDIsIGxuZzogeTIgfSA9IHZpZXdCb3VuZHMuZ2V0Tm9ydGhFYXN0KCk7XG4gICAgY29uc3QgbmV3WDIgPSAoeDEgKyB4MikgLyAyO1xuICAgIGNvbnN0IG5ld1kyID0gKHkxICsgeTIpIC8gMjtcblxuICAgIGNvbnN0IGJvdW5kczogW1tudW1iZXIsIG51bWJlcl0sIFtudW1iZXIsIG51bWJlcl1dW10gPSBbXG4gICAgICBbXG4gICAgICAgIFt4MSwgeTFdLFxuICAgICAgICBbbmV3WDIsIG5ld1kyXVxuICAgICAgXSxcbiAgICAgIFtcbiAgICAgICAgW25ld1gyLCBuZXdZMl0sXG4gICAgICAgIFt4MiwgeTJdXG4gICAgICBdLFxuICAgICAgW1xuICAgICAgICBbeDEsIG5ld1kyXSxcbiAgICAgICAgW25ld1gyLCB5Ml1cbiAgICAgIF0sXG4gICAgICBbXG4gICAgICAgIFtuZXdYMiwgeTFdLFxuICAgICAgICBbeDIsIG5ld1kyXVxuICAgICAgXVxuICAgIF07XG4gICAgZm9yIChjb25zdCBib3VuZCBvZiBib3VuZHMpIHtcbiAgICAgIGNvbnN0IGxhdExuZ0JvdW5kID0gdGhpcy5sZWFmbGV0LmxhdExuZ0JvdW5kcyhib3VuZCk7XG4gICAgICBjb25zdCByZWN0ID0gYXdhaXQgdGhpcy5nZXRSZWN0KGxhdExuZ0JvdW5kKTtcbiAgICAgIHJlY3RzID0gWy4uLnJlY3RzLCAuLi4oYXdhaXQgdGhpcy5nZXRDbHVzdGVyUmVjdHMobGV2ZWxUaHJlc2hvbGQsIGxhdExuZ0JvdW5kLCBsZXZlbCkpXTtcblxuICAgICAgaWYgKGxldmVsID09PSBsZXZlbFRocmVzaG9sZCkge1xuICAgICAgICByZWN0cy5wdXNoKHJlY3QpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiByZWN0cztcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgZ2V0UmVjdChsYXRMbmdCb3VuZDogTC5MYXRMbmdCb3VuZHMpIHtcbiAgICBsZXQgY29sb3IgPSAnbm9uZSc7XG4gICAgaWYgKHRoaXMuc2hvd0NsdXN0ZXJDb2xvcikge1xuICAgICAgY29sb3IgPSBhd2FpdCB0aGlzLmNvbG9yU2VydmljZS5nZW5lcmF0ZUNvbG9yKGxhdExuZ0JvdW5kLnRvQkJveFN0cmluZygpKTtcbiAgICB9XG4gICAgY29uc3QgcmVjdCA9IHRoaXMubGVhZmxldC5yZWN0YW5nbGUobGF0TG5nQm91bmQsIHtcbiAgICAgIGNvbG9yLFxuICAgICAgd2VpZ2h0OiBjb2xvciA9PT0gJ25vbmUnID8gMCA6IDEsXG4gICAgICBpbnRlcmFjdGl2ZTogZmFsc2VcbiAgICB9KTtcbiAgICByZXR1cm4gcmVjdDtcbiAgfVxuXG4gIHByaXZhdGUgY2xlYXJDbHVzdGVycygpIHtcbiAgICB0aGlzLmNsdXN0ZXJzLmZvckVhY2goY2x1c3RlciA9PiB7XG4gICAgICBjbHVzdGVyLmNsZWFyKHRoaXMubWFwKTtcbiAgICB9KTtcbiAgICB0aGlzLmNsdXN0ZXJzID0gW107XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIHVwZGF0ZUNsdXN0ZXIoY2x1c3RlcjogQ2x1c3Rlck1hcCkge1xuICAgIGNvbnN0IGNsdXN0ZXJDb3VudCA9IGF3YWl0IHRoaXMubWFwU2VydmljZS5nZXRQb3NpdGlvbk1Pc0Zyb21Cb3VuZENvdW50KFxuICAgICAgY2x1c3Rlci5yZWN0LmdldEJvdW5kcygpLFxuICAgICAgdGhpcy5yb290Tm9kZVxuICAgICk7XG4gICAgaWYgKGNsdXN0ZXJDb3VudCA+IHRoaXMubWFwU2VydmljZS5NQVhfREVWSUNFX1BFUl9DTFVTVEVSKSB7XG4gICAgICBjbHVzdGVyLnNldENsdXN0ZXJUb0JpZ01hcmtlcih0aGlzLm1hcCwgY2x1c3RlckNvdW50LCB0aGlzLmxlYWZsZXQpO1xuICAgICAgY2x1c3Rlci5wb3NpdGlvbnMgPSBbXTtcbiAgICAgIHJldHVybiBjbHVzdGVyO1xuICAgIH1cblxuICAgIGNsdXN0ZXIucmVtb3ZlQ2x1c3RlclRvQmlnTWFya2VyKCk7XG4gICAgY2x1c3Rlci5wb3NpdGlvbnMgPSBhd2FpdCB0aGlzLm1hcFNlcnZpY2UuZ2V0UG9zaXRpb25NT3NGcm9tQm91bmQoXG4gICAgICBjbHVzdGVyLnJlY3QuZ2V0Qm91bmRzKCksXG4gICAgICB0aGlzLnJvb3ROb2RlXG4gICAgKTtcbiAgICByZXR1cm4gY2x1c3RlcjtcbiAgfVxuXG4gIHByaXZhdGUgY3JlYXRlT3JVcGRhdGVDbHVzdGVyKHJlY3RzOiBMLlJlY3RhbmdsZTx1bmtub3duPltdKSB7XG4gICAgY29uc3QgaXNOZXcgPSByZWN0cy5sZW5ndGggIT09IHRoaXMuY2x1c3RlcnMubGVuZ3RoO1xuICAgIGlmIChpc05ldykge1xuICAgICAgdGhpcy5jbGVhckNsdXN0ZXJzKCk7XG4gICAgfVxuICAgIGNvbnN0IHVwZGF0ZVByb21pc2UgPSByZWN0cy5tYXAoKHJlY3QsIGluZGV4KSA9PiB7XG4gICAgICBpZiAoaXNOZXcpIHtcbiAgICAgICAgY29uc3QgY2x1c3RlciA9IG5ldyBDbHVzdGVyTWFwKFxuICAgICAgICAgIHRoaXMuaXRlcmFibGUsXG4gICAgICAgICAgYXNzZXQgPT4gdGhpcy5nZXRBc3NldE1hcmtlcihhc3NldCksXG4gICAgICAgICAgdGhpcy50cmFuc2xhdGVTZXJ2aWNlXG4gICAgICAgICk7XG4gICAgICAgIHRoaXMuY2x1c3RlcnMucHVzaChjbHVzdGVyKTtcbiAgICAgIH1cbiAgICAgIHRoaXMuY2x1c3RlcnNbaW5kZXhdLnJlY3QgPSByZWN0O1xuICAgICAgcmV0dXJuIHRoaXMudXBkYXRlQ2x1c3Rlcih0aGlzLmNsdXN0ZXJzW2luZGV4XSk7XG4gICAgfSk7XG5cbiAgICByZXR1cm4gUHJvbWlzZS5hbGwodXBkYXRlUHJvbWlzZSk7XG4gIH1cblxuICBwcml2YXRlIGdldE1hcENoYW5nZU9ic2VydmFibGUoKSB7XG4gICAgcmV0dXJuIG1lcmdlKFxuICAgICAgZnJvbUV2ZW50PEwuTGVhZmxldEV2ZW50Pih0aGlzLm1hcCwgJ21vdmUnKSxcbiAgICAgIGZyb21FdmVudDxMLkxlYWZsZXRFdmVudD4odGhpcy5tYXAsICdtb3ZlZW5kJylcbiAgICApLnBpcGUoXG4gICAgICBkZWJvdW5jZVRpbWUodGhpcy5FVkVOVF9USFJPVFRMRV9USU1FKSxcbiAgICAgIHRhcChldmVudCA9PiB0aGlzLm1hcENoYW5nZS5lbWl0KGV2ZW50KSksXG4gICAgICB0YWtlVW50aWwodGhpcy51bnN1YnNjcmliZVRyaWdnZXIkKVxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIGlzTGVhZmxldEV2ZW50SW50ZXJmYWNlKFxuICAgIExlYWZsZXRFdmVudE9iamVjdDogTC5MZWFmbGV0RXZlbnQgfCBib29sZWFuIHwgdm9pZFxuICApOiBMZWFmbGV0RXZlbnRPYmplY3QgaXMgTC5MZWFmbGV0RXZlbnQge1xuICAgIHJldHVybiAoTGVhZmxldEV2ZW50T2JqZWN0IGFzIEwuTGVhZmxldEV2ZW50KT8udHlwZSAhPT0gdW5kZWZpbmVkO1xuICB9XG5cbiAgcHJpdmF0ZSBoYW5kbGVHbG9iYWxSZWZyZXNoTG9hZGluZygpOiB2b2lkIHtcbiAgICB0aGlzLmlzTG9hZGluZyRcbiAgICAgIC5waXBlKFxuICAgICAgICBza2lwKDEpLFxuICAgICAgICBnbG9iYWxBdXRvUmVmcmVzaExvYWRpbmcodGhpcy53aWRnZXRHbG9iYWxBdXRvUmVmcmVzaFNlcnZpY2UpLFxuICAgICAgICB0YWtlVW50aWwodGhpcy5kZXN0cm95JClcbiAgICAgIClcbiAgICAgIC5zdWJzY3JpYmUoKTtcblxuICAgIHRoaXMuZGVzdHJveSQuc3Vic2NyaWJlKHtcbiAgICAgIGNvbXBsZXRlOiAoKSA9PlxuICAgICAgICB0aGlzLmlzTG9hZGluZyQudmFsdWUgJiYgdGhpcy53aWRnZXRHbG9iYWxBdXRvUmVmcmVzaFNlcnZpY2UuZGVjcmVtZW50TG9hZGluZygpXG4gICAgfSk7XG4gIH1cbn1cbiIsIjxkaXYgY2xhc3M9XCJjOHktbWFwXCI+XG4gIDxkaXYgI21hcD48L2Rpdj5cbjwvZGl2PlxuPG5nLWNvbnRlbnQ+PC9uZy1jb250ZW50PlxuIl19
@@ -12,6 +12,7 @@ export class MapStatusComponent {
12
12
  constructor() {
13
13
  this.configChange = new EventEmitter();
14
14
  this.onUnfollow = new EventEmitter();
15
+ this.fitAssetsToBounds = new EventEmitter();
15
16
  this.buttonsConfig = {};
16
17
  this.centerMapButtonDisabled = true;
17
18
  this.refreshPaused = false;
@@ -34,6 +35,10 @@ export class MapStatusComponent {
34
35
  center() {
35
36
  this.clusterMap.center();
36
37
  }
38
+ fitToBounds() {
39
+ this.fitToBoundsButtonDisabled = true;
40
+ this.fitAssetsToBounds.emit();
41
+ }
37
42
  reload() {
38
43
  this.clusterMap.reload();
39
44
  }
@@ -78,9 +83,12 @@ export class MapStatusComponent {
78
83
  }
79
84
  checkIfMapIsAlreadyCentered() {
80
85
  this.clusterMap.mapChange.pipe(takeUntil(this.destroy$)).subscribe((event) => {
81
- if (this.config?.center && event.sourceTarget?.getBounds) {
86
+ if (event.sourceTarget?.getBounds) {
82
87
  const bounds = event.sourceTarget.getBounds();
83
- this.centerMapButtonDisabled = this.shouldDisableCenterButton(bounds);
88
+ this.fitToBoundsButtonDisabled = this.shouldDisableFitToBoundsButton(bounds);
89
+ if (this.config?.center) {
90
+ this.centerMapButtonDisabled = this.shouldDisableCenterButton(bounds);
91
+ }
84
92
  }
85
93
  });
86
94
  }
@@ -98,23 +106,33 @@ export class MapStatusComponent {
98
106
  const shrunkBounds = bounds.pad(-0.25);
99
107
  return shrunkBounds.contains(this.config.center);
100
108
  }
109
+ shouldDisableFitToBoundsButton(bounds) {
110
+ if (!this.assets) {
111
+ return true;
112
+ }
113
+ return this.assets.every(({ c8y_Position }) => bounds.contains([c8y_Position.lat, c8y_Position.lng]));
114
+ }
101
115
  defaultButtonsConfig() {
102
116
  return {
103
117
  realtime: { show: this.config.realtime || this.clusterMap.config.follow, disabled: false }
104
118
  };
105
119
  }
106
120
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: MapStatusComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
107
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: MapStatusComponent, selector: "c8y-map-status", inputs: { config: "config", clusterMap: "clusterMap", buttonsConfig: "buttonsConfig" }, outputs: { configChange: "configChange", onUnfollow: "onUnfollow" }, viewQueries: [{ propertyName: "countdownIntervalComp", first: true, predicate: CountdownIntervalComponent, descendants: true }], usesOnChanges: true, ngImport: i0, template: "<div class=\"c8y-map-status\">\n <div class=\"leaflet-touch\">\n <div\n class=\"leaflet-bar\"\n role=\"group\"\n >\n <button\n class=\"c8y-realtime\"\n title=\"{{ 'Realtime' | translate }}\"\n type=\"button\"\n *ngIf=\"buttonsConfig.realtime.show\"\n (click)=\"toggleRealtime()\"\n [disabled]=\"buttonsConfig.realtime.disabled\"\n >\n <span\n class=\"c8y-pulse\"\n [ngClass]=\"{\n active: clusterMap?.config.realtime,\n inactive: !clusterMap?.config.realtime\n }\"\n ></span>\n </button>\n\n <label\n class=\"toggle-countdown vertical\"\n [attr.aria-label]=\"\n refreshPaused ? ('Enable auto refresh' | translate) : ('Disable auto refresh' | translate)\n \"\n [tooltip]=\"\n refreshPaused ? ('Enable auto refresh' | translate) : ('Disable auto refresh' | translate)\n \"\n placement=\"left\"\n *ngIf=\"\n !config.widgetInstanceGlobalAutoRefreshContext &&\n clusterMap?.config.refreshInterval &&\n !clusterMap?.config.follow\n \"\n [adaptivePosition]=\"false\"\n [container]=\"'body'\"\n [delay]=\"1000\"\n >\n <input\n type=\"checkbox\"\n (click)=\"toggleAutoRefresh($event)\"\n />\n <c8y-countdown-interval\n [hidden]=\"refreshPaused\"\n [countdownInterval]=\"clusterMap?.config.refreshInterval\"\n ></c8y-countdown-interval>\n <i\n c8yIcon=\"pause\"\n *ngIf=\"refreshPaused\"\n ></i>\n </label>\n\n <button\n title=\"{{ 'Cancel reload' | translate }}\"\n type=\"button\"\n *ngIf=\"(clusterMap?.isLoading$ | async) && !config.widgetInstanceGlobalAutoRefreshContext\"\n (click)=\"cancelReload()\"\n >\n <i\n class=\"icon-spin\"\n c8yIcon=\"refresh\"\n ></i>\n </button>\n <button\n [title]=\"'Reload' | translate\"\n type=\"button\"\n *ngIf=\"\n !clusterMap?.config.realtime &&\n !clusterMap?.assets &&\n !(clusterMap?.isLoading$ | async) &&\n !config.widgetInstanceGlobalAutoRefreshContext\n \"\n (click)=\"reload()\"\n >\n <i c8yIcon=\"refresh\"></i>\n </button>\n <button\n title=\"{{ 'Center map' | translate }}\"\n type=\"button\"\n (click)=\"center()\"\n [disabled]=\"centerMapButtonDisabled || clusterMap?.config.follow\"\n >\n <i c8yIcon=\"target1\"></i>\n </button>\n <button\n title=\"{{ 'Unfollow' | translate }}\"\n type=\"button\"\n *ngIf=\"clusterMap?.config.follow\"\n (click)=\"unfollow()\"\n >\n <i c8yIcon=\"marker-off\"></i>\n </button>\n\n <button\n title=\"{{ 'Follow' | translate }}\"\n type=\"button\"\n *ngIf=\"initConfig.follow && !clusterMap?.config.follow\"\n (click)=\"follow()\"\n >\n <i c8yIcon=\"marker\"></i>\n </button>\n </div>\n </div>\n</div>\n", dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.IconDirective, selector: "[c8yIcon]", inputs: ["c8yIcon"] }, { kind: "component", type: i2.CountdownIntervalComponent, selector: "c8y-countdown-interval", inputs: ["countdownInterval"], outputs: ["countdownEnded"] }, { kind: "directive", type: i3.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: i1.AsyncPipe, name: "async" }, { kind: "pipe", type: i2.C8yTranslatePipe, name: "translate" }] }); }
121
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: MapStatusComponent, selector: "c8y-map-status", inputs: { config: "config", assets: "assets", clusterMap: "clusterMap", buttonsConfig: "buttonsConfig" }, outputs: { configChange: "configChange", onUnfollow: "onUnfollow", fitAssetsToBounds: "fitAssetsToBounds" }, viewQueries: [{ propertyName: "countdownIntervalComp", first: true, predicate: CountdownIntervalComponent, descendants: true }], usesOnChanges: true, ngImport: i0, template: "<div class=\"c8y-map-status\">\n <div class=\"leaflet-touch\">\n <div\n class=\"leaflet-bar\"\n role=\"group\"\n >\n <button\n class=\"c8y-realtime\"\n title=\"{{ 'Realtime' | translate }}\"\n type=\"button\"\n *ngIf=\"buttonsConfig.realtime.show\"\n (click)=\"toggleRealtime()\"\n [disabled]=\"buttonsConfig.realtime.disabled\"\n >\n <span\n class=\"c8y-pulse\"\n [ngClass]=\"{\n active: clusterMap?.config.realtime,\n inactive: !clusterMap?.config.realtime\n }\"\n ></span>\n </button>\n\n <label\n class=\"toggle-countdown vertical\"\n [attr.aria-label]=\"\n refreshPaused ? ('Enable auto refresh' | translate) : ('Disable auto refresh' | translate)\n \"\n [tooltip]=\"\n refreshPaused ? ('Enable auto refresh' | translate) : ('Disable auto refresh' | translate)\n \"\n placement=\"left\"\n *ngIf=\"\n !config.widgetInstanceGlobalAutoRefreshContext &&\n clusterMap?.config.refreshInterval &&\n !clusterMap?.config.follow\n \"\n [adaptivePosition]=\"false\"\n [container]=\"'body'\"\n [delay]=\"1000\"\n >\n <input\n type=\"checkbox\"\n (click)=\"toggleAutoRefresh($event)\"\n />\n <c8y-countdown-interval\n [hidden]=\"refreshPaused\"\n [countdownInterval]=\"clusterMap?.config.refreshInterval\"\n ></c8y-countdown-interval>\n <i\n c8yIcon=\"pause\"\n *ngIf=\"refreshPaused\"\n ></i>\n </label>\n\n <button\n title=\"{{ 'Cancel reload' | translate }}\"\n type=\"button\"\n *ngIf=\"(clusterMap?.isLoading$ | async) && !config.widgetInstanceGlobalAutoRefreshContext\"\n (click)=\"cancelReload()\"\n >\n <i\n class=\"icon-spin\"\n c8yIcon=\"refresh\"\n ></i>\n </button>\n <button\n [title]=\"'Reload' | translate\"\n type=\"button\"\n *ngIf=\"\n !clusterMap?.config.realtime &&\n !clusterMap?.assets &&\n !(clusterMap?.isLoading$ | async) &&\n !config.widgetInstanceGlobalAutoRefreshContext\n \"\n (click)=\"reload()\"\n >\n <i c8yIcon=\"refresh\"></i>\n </button>\n <button\n title=\"{{ 'Center map' | translate }}\"\n type=\"button\"\n (click)=\"center()\"\n [disabled]=\"centerMapButtonDisabled || clusterMap?.config.follow\"\n >\n <i c8yIcon=\"target1\"></i>\n </button>\n <button\n title=\"{{ 'Fit to assets bounds' | translate }}\"\n type=\"button\"\n (click)=\"fitToBounds()\"\n [disabled]=\"fitToBoundsButtonDisabled || clusterMap?.config.follow\"\n >\n <i c8yIcon=\"waypoint-map\"></i>\n </button>\n <button\n title=\"{{ 'Unfollow' | translate }}\"\n type=\"button\"\n *ngIf=\"clusterMap?.config.follow\"\n (click)=\"unfollow()\"\n >\n <i c8yIcon=\"marker-off\"></i>\n </button>\n\n <button\n title=\"{{ 'Follow' | translate }}\"\n type=\"button\"\n *ngIf=\"initConfig.follow && !clusterMap?.config.follow\"\n (click)=\"follow()\"\n >\n <i c8yIcon=\"marker\"></i>\n </button>\n </div>\n </div>\n</div>\n", dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.IconDirective, selector: "[c8yIcon]", inputs: ["c8yIcon"] }, { kind: "component", type: i2.CountdownIntervalComponent, selector: "c8y-countdown-interval", inputs: ["countdownInterval"], outputs: ["countdownEnded"] }, { kind: "directive", type: i3.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: i1.AsyncPipe, name: "async" }, { kind: "pipe", type: i2.C8yTranslatePipe, name: "translate" }] }); }
108
122
  }
109
123
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: MapStatusComponent, decorators: [{
110
124
  type: Component,
111
- args: [{ selector: 'c8y-map-status', template: "<div class=\"c8y-map-status\">\n <div class=\"leaflet-touch\">\n <div\n class=\"leaflet-bar\"\n role=\"group\"\n >\n <button\n class=\"c8y-realtime\"\n title=\"{{ 'Realtime' | translate }}\"\n type=\"button\"\n *ngIf=\"buttonsConfig.realtime.show\"\n (click)=\"toggleRealtime()\"\n [disabled]=\"buttonsConfig.realtime.disabled\"\n >\n <span\n class=\"c8y-pulse\"\n [ngClass]=\"{\n active: clusterMap?.config.realtime,\n inactive: !clusterMap?.config.realtime\n }\"\n ></span>\n </button>\n\n <label\n class=\"toggle-countdown vertical\"\n [attr.aria-label]=\"\n refreshPaused ? ('Enable auto refresh' | translate) : ('Disable auto refresh' | translate)\n \"\n [tooltip]=\"\n refreshPaused ? ('Enable auto refresh' | translate) : ('Disable auto refresh' | translate)\n \"\n placement=\"left\"\n *ngIf=\"\n !config.widgetInstanceGlobalAutoRefreshContext &&\n clusterMap?.config.refreshInterval &&\n !clusterMap?.config.follow\n \"\n [adaptivePosition]=\"false\"\n [container]=\"'body'\"\n [delay]=\"1000\"\n >\n <input\n type=\"checkbox\"\n (click)=\"toggleAutoRefresh($event)\"\n />\n <c8y-countdown-interval\n [hidden]=\"refreshPaused\"\n [countdownInterval]=\"clusterMap?.config.refreshInterval\"\n ></c8y-countdown-interval>\n <i\n c8yIcon=\"pause\"\n *ngIf=\"refreshPaused\"\n ></i>\n </label>\n\n <button\n title=\"{{ 'Cancel reload' | translate }}\"\n type=\"button\"\n *ngIf=\"(clusterMap?.isLoading$ | async) && !config.widgetInstanceGlobalAutoRefreshContext\"\n (click)=\"cancelReload()\"\n >\n <i\n class=\"icon-spin\"\n c8yIcon=\"refresh\"\n ></i>\n </button>\n <button\n [title]=\"'Reload' | translate\"\n type=\"button\"\n *ngIf=\"\n !clusterMap?.config.realtime &&\n !clusterMap?.assets &&\n !(clusterMap?.isLoading$ | async) &&\n !config.widgetInstanceGlobalAutoRefreshContext\n \"\n (click)=\"reload()\"\n >\n <i c8yIcon=\"refresh\"></i>\n </button>\n <button\n title=\"{{ 'Center map' | translate }}\"\n type=\"button\"\n (click)=\"center()\"\n [disabled]=\"centerMapButtonDisabled || clusterMap?.config.follow\"\n >\n <i c8yIcon=\"target1\"></i>\n </button>\n <button\n title=\"{{ 'Unfollow' | translate }}\"\n type=\"button\"\n *ngIf=\"clusterMap?.config.follow\"\n (click)=\"unfollow()\"\n >\n <i c8yIcon=\"marker-off\"></i>\n </button>\n\n <button\n title=\"{{ 'Follow' | translate }}\"\n type=\"button\"\n *ngIf=\"initConfig.follow && !clusterMap?.config.follow\"\n (click)=\"follow()\"\n >\n <i c8yIcon=\"marker\"></i>\n </button>\n </div>\n </div>\n</div>\n" }]
125
+ args: [{ selector: 'c8y-map-status', template: "<div class=\"c8y-map-status\">\n <div class=\"leaflet-touch\">\n <div\n class=\"leaflet-bar\"\n role=\"group\"\n >\n <button\n class=\"c8y-realtime\"\n title=\"{{ 'Realtime' | translate }}\"\n type=\"button\"\n *ngIf=\"buttonsConfig.realtime.show\"\n (click)=\"toggleRealtime()\"\n [disabled]=\"buttonsConfig.realtime.disabled\"\n >\n <span\n class=\"c8y-pulse\"\n [ngClass]=\"{\n active: clusterMap?.config.realtime,\n inactive: !clusterMap?.config.realtime\n }\"\n ></span>\n </button>\n\n <label\n class=\"toggle-countdown vertical\"\n [attr.aria-label]=\"\n refreshPaused ? ('Enable auto refresh' | translate) : ('Disable auto refresh' | translate)\n \"\n [tooltip]=\"\n refreshPaused ? ('Enable auto refresh' | translate) : ('Disable auto refresh' | translate)\n \"\n placement=\"left\"\n *ngIf=\"\n !config.widgetInstanceGlobalAutoRefreshContext &&\n clusterMap?.config.refreshInterval &&\n !clusterMap?.config.follow\n \"\n [adaptivePosition]=\"false\"\n [container]=\"'body'\"\n [delay]=\"1000\"\n >\n <input\n type=\"checkbox\"\n (click)=\"toggleAutoRefresh($event)\"\n />\n <c8y-countdown-interval\n [hidden]=\"refreshPaused\"\n [countdownInterval]=\"clusterMap?.config.refreshInterval\"\n ></c8y-countdown-interval>\n <i\n c8yIcon=\"pause\"\n *ngIf=\"refreshPaused\"\n ></i>\n </label>\n\n <button\n title=\"{{ 'Cancel reload' | translate }}\"\n type=\"button\"\n *ngIf=\"(clusterMap?.isLoading$ | async) && !config.widgetInstanceGlobalAutoRefreshContext\"\n (click)=\"cancelReload()\"\n >\n <i\n class=\"icon-spin\"\n c8yIcon=\"refresh\"\n ></i>\n </button>\n <button\n [title]=\"'Reload' | translate\"\n type=\"button\"\n *ngIf=\"\n !clusterMap?.config.realtime &&\n !clusterMap?.assets &&\n !(clusterMap?.isLoading$ | async) &&\n !config.widgetInstanceGlobalAutoRefreshContext\n \"\n (click)=\"reload()\"\n >\n <i c8yIcon=\"refresh\"></i>\n </button>\n <button\n title=\"{{ 'Center map' | translate }}\"\n type=\"button\"\n (click)=\"center()\"\n [disabled]=\"centerMapButtonDisabled || clusterMap?.config.follow\"\n >\n <i c8yIcon=\"target1\"></i>\n </button>\n <button\n title=\"{{ 'Fit to assets bounds' | translate }}\"\n type=\"button\"\n (click)=\"fitToBounds()\"\n [disabled]=\"fitToBoundsButtonDisabled || clusterMap?.config.follow\"\n >\n <i c8yIcon=\"waypoint-map\"></i>\n </button>\n <button\n title=\"{{ 'Unfollow' | translate }}\"\n type=\"button\"\n *ngIf=\"clusterMap?.config.follow\"\n (click)=\"unfollow()\"\n >\n <i c8yIcon=\"marker-off\"></i>\n </button>\n\n <button\n title=\"{{ 'Follow' | translate }}\"\n type=\"button\"\n *ngIf=\"initConfig.follow && !clusterMap?.config.follow\"\n (click)=\"follow()\"\n >\n <i c8yIcon=\"marker\"></i>\n </button>\n </div>\n </div>\n</div>\n" }]
112
126
  }], propDecorators: { config: [{
113
127
  type: Input
128
+ }], assets: [{
129
+ type: Input
114
130
  }], configChange: [{
115
131
  type: Output
116
132
  }], onUnfollow: [{
117
133
  type: Output
134
+ }], fitAssetsToBounds: [{
135
+ type: Output
118
136
  }], clusterMap: [{
119
137
  type: Input
120
138
  }], buttonsConfig: [{
@@ -123,4 +141,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
123
141
  type: ViewChild,
124
142
  args: [CountdownIntervalComponent]
125
143
  }] } });
126
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFwLXN0YXR1cy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9tYXAvbWFwLXN0YXR1cy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi9tYXAvbWFwLXN0YXR1cy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFpQixTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDakcsT0FBTyxFQUFFLDBCQUEwQixFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDakUsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUN0QyxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQy9CLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUMzQyxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQzs7Ozs7QUFPOUQsTUFBTSxPQUFPLGtCQUFrQjtJQUovQjtRQVNFLGlCQUFZLEdBQUcsSUFBSSxZQUFZLEVBQW9CLENBQUM7UUFHcEQsZUFBVSxHQUFHLElBQUksWUFBWSxFQUFvQixDQUFDO1FBS3pDLGtCQUFhLEdBQW9DLEVBQUUsQ0FBQztRQUU3RCw0QkFBdUIsR0FBRyxJQUFJLENBQUM7UUFJL0Isa0JBQWEsR0FBRyxLQUFLLENBQUM7UUFDZCxhQUFRLEdBQUcsSUFBSSxPQUFPLEVBQVEsQ0FBQztLQW9HeEM7SUFsR0MsUUFBUTtRQUNOLElBQUksQ0FBQyxVQUFVLEdBQUcsU0FBUyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUN6QyxJQUFJLENBQUMsYUFBYSxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLG9CQUFvQixFQUFFLEVBQUUsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDO0lBQ3RGLENBQUM7SUFFRCxlQUFlO1FBQ2Is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O0lBQ0sseUJBQXlCLENBQUMsTUFBc0I7UUFDdEQsTUFBTSxZQUFZLEdBQUcsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3ZDLE9BQU8sWUFBWSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQ25ELENBQUM7SUFFTyxvQkFBb0I7UUFDMUIsT0FBTztZQUNMLFFBQVEsRUFBRSxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsSUFBSSxJQUFJLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxNQUFNLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBRTtTQUMzRixDQUFDO0lBQ0osQ0FBQzsrR0F2SFUsa0JBQWtCO21HQUFsQixrQkFBa0IsMFFBZ0JsQiwwQkFBMEIscUVDNUJ2QyxzbUdBMkdBOzs0RkQvRmEsa0JBQWtCO2tCQUo5QixTQUFTOytCQUNFLGdCQUFnQjs4QkFLMUIsTUFBTTtzQkFETCxLQUFLO2dCQUlOLFlBQVk7c0JBRFgsTUFBTTtnQkFJUCxVQUFVO3NCQURULE1BQU07Z0JBSVAsVUFBVTtzQkFEVCxLQUFLO2dCQUdHLGFBQWE7c0JBQXJCLEtBQUs7Z0JBR2lDLHFCQUFxQjtzQkFBM0QsU0FBUzt1QkFBQywwQkFBMEIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIEV2ZW50RW1pdHRlciwgSW5wdXQsIE91dHB1dCwgU2ltcGxlQ2hhbmdlcywgVmlld0NoaWxkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDb3VudGRvd25JbnRlcnZhbENvbXBvbmVudCB9IGZyb20gJ0BjOHkvbmd4LWNvbXBvbmVudHMnO1xuaW1wb3J0IHsgY2xvbmVEZWVwIH0gZnJvbSAnbG9kYXNoLWVzJztcbmltcG9ydCB7IFN1YmplY3QgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IHRha2VVbnRpbCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IENsdXN0ZXJNYXBDb21wb25lbnQgfSBmcm9tICcuL2NsdXN0ZXItbWFwLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBDbHVzdGVyTWFwQ29uZmlnLCBNYXBTdGF0dXNCdXR0b25zQ29uZmlnIH0gZnJvbSAnLi9tYXAubW9kZWwnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdjOHktbWFwLXN0YXR1cycsXG4gIHRlbXBsYXRlVXJsOiAnLi9tYXAtc3RhdHVzLmNvbXBvbmVudC5odG1sJ1xufSlcbmV4cG9ydCBjbGFzcyBNYXBTdGF0dXNDb21wb25lbnQge1xuICBASW5wdXQoKVxuICBjb25maWc6IENsdXN0ZXJNYXBDb25maWc7XG5cbiAgQE91dHB1dCgpXG4gIGNvbmZpZ0NoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8Q2x1c3Rlck1hcENvbmZpZz4oKTtcblxuICBAT3V0cHV0KClcbiAgb25VbmZvbGxvdyA9IG5ldyBFdmVudEVtaXR0ZXI8Q2x1c3Rlck1hcENvbmZpZz4oKTtcblxuICBASW5wdXQoKVxuICBjbHVzdGVyTWFwOiBDbHVzdGVyTWFwQ29tcG9uZW50O1xuXG4gIEBJbnB1dCgpIGJ1dHRvbnNDb25maWc6IFBhcnRpYWw8TWFwU3RhdHVzQnV0dG9uc0NvbmZpZz4gPSB7fTtcblxuICBjZW50ZXJNYXBCdXR0b25EaXNhYmxlZCA9IHRydWU7XG4gIEBWaWV3Q2hpbGQoQ291bnRkb3duSW50ZXJ2YWxDb21wb25lbnQpIGNvdW50ZG93bkludGVydmFsQ29tcDogQ291bnRkb3duSW50ZXJ2YWxDb21wb25lbnQ7XG5cbiAgaW5pdENvbmZpZzogQ2x1c3Rlck1hcENvbmZpZztcbiAgcmVmcmVzaFBhdXNlZCA9IGZhbHNlO1xuICBwcml2YXRlIGRlc3Ryb3kkID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLmluaXRDb25maWcgPSBjbG9uZURlZXAodGhpcy5jb25maWcpO1xuICAgIHRoaXMuYnV0dG9uc0NvbmZpZyA9IE9iamVjdC5hc3NpZ24odGhpcy5kZWZhdWx0QnV0dG9uc0NvbmZpZygpLCB0aGlzLmJ1dHRvbnNDb25maWcpO1xuICB9XG5cbiAgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xuICAgIGlmICghdGhpcy5jb25maWcud2lkZ2V0SW5zdGFuY2VHbG9iYWxBdXRvUmVmcmVzaENvbnRleHQpIHtcbiAgICAgIHRoaXMuY2x1c3Rlck1hcC5jb3VudGRvd25JbnRlcnZhbENvbXAgPSB0aGlzLmNvdW50ZG93bkludGVydmFsQ29tcDtcbiAgICB9XG4gIH1cblxuICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XG4gICAgaWYgKGNoYW5nZXMuY2x1c3Rlck1hcD8ucHJldmlvdXNWYWx1ZSAhPT0gY2hhbmdlcy5jbHVzdGVyTWFwPy5jdXJyZW50VmFsdWUpIHtcbiAgICAgIHRoaXMuY2hlY2tJZk1hcElzQWxyZWFkeUNlbnRlcmVkKCk7XG4gICAgfVxuICB9XG5cbiAgY2VudGVyKCkge1xuICAgIHRoaXMuY2x1c3Rlck1hcC5jZW50ZXIoKTtcbiAgfVxuXG4gIHJlbG9hZCgpIHtcbiAgICB0aGlzLmNsdXN0ZXJNYXAucmVsb2FkKCk7XG4gIH1cblxuICBjYW5jZWxSZWxvYWQoKSB7XG4gICAgdGhpcy5jbHVzdGVyTWFwLmNhbmNlbFJlbG9hZCgpO1xuICB9XG5cbiAgdG9nZ2xlUmVhbHRpbWUoKSB7XG4gICAgdGhpcy5jb25maWcgPSB7XG4gICAgICAuLi50aGlzLmNvbmZpZyxcbiAgICAgIHJlYWx0aW1lOiAhdGhpcy5jb25maWcucmVhbHRpbWVcbiAgICB9O1xuICAgIHRoaXMuY29uZmlnQ2hhbmdlLmVtaXQodGhpcy5jb25maWcpO1xuICB9XG5cbiAgdG9nZ2xlQXV0b1JlZnJlc2goJGV2ZW50OiBNb3VzZUV2ZW50KSB7XG4gICAgJGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIHRoaXMucmVmcmVzaFBhdXNlZCA9ICF0aGlzLnJlZnJlc2hQYXVzZWQ7XG4gICAgaWYgKHRoaXMucmVmcmVzaFBhdXNlZCkge1xuICAgICAgdGhpcy5jb3VudGRvd25JbnRlcnZhbENvbXAuc3RvcCh0cnVlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5jb3VudGRvd25JbnRlcnZhbENvbXAuc3RhcnQoKTtcbiAgICB9XG4gIH1cblxuICB1bmZvbGxvdygpIHtcbiAgICB0aGlzLmNvbmZpZyA9IHtcbiAgICAgIC4uLnRoaXMuY2x1c3Rlck1hcC5jb25maWcsXG4gICAgICBmb2xsb3c6IGZhbHNlXG4gICAgfTtcbiAgICB0aGlzLmNvbmZpZ0NoYW5nZS5lbWl0KHRoaXMuY29uZmlnKTtcbiAgICB0aGlzLm9uVW5mb2xsb3cuZW1pdCh0aGlzLmNvbmZpZyk7XG4gIH1cblxuICBmb2xsb3coKSB7XG4gICAgdGhpcy5jb25maWcgPSB7XG4gICAgICAuLi50aGlzLmNvbmZpZyxcbiAgICAgIGZvbGxvdzogdHJ1ZVxuICAgIH07XG4gICAgdGhpcy5jb25maWdDaGFuZ2UuZW1pdCh0aGlzLmNvbmZpZyk7XG4gIH1cblxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICB0aGlzLmRlc3Ryb3kkLm5leHQoKTtcbiAgfVxuXG4gIHByaXZhdGUgY2hlY2tJZk1hcElzQWxyZWFkeUNlbnRlcmVkKCkge1xuICAgIHRoaXMuY2x1c3Rlck1hcC5tYXBDaGFuZ2UucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpLnN1YnNjcmliZSgoZXZlbnQ6IEwuTGVhZmxldEV2ZW50KSA9PiB7XG4gICAgICBpZiAodGhpcy5jb25maWc/LmNlbnRlciAmJiBldmVudC5zb3VyY2VUYXJnZXQ/LmdldEJvdW5kcykge1xuICAgICAgICBjb25zdCBib3VuZHM6IEwuTGF0TG5nQm91bmRzID0gZXZlbnQuc291cmNlVGFyZ2V0LmdldEJvdW5kcygpO1xuICAgICAgICB0aGlzLmNlbnRlck1hcEJ1dHRvbkRpc2FibGVkID0gdGhpcy5zaG91bGREaXNhYmxlQ2VudGVyQnV0dG9uKGJvdW5kcyk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2tzIGlmIENlbnRlciBidXR0b24gc2hvdWxkIGJlIGRpc2FibGVkIGFjY29yZGluZyB0byBwcm92aWRlZCBib3VuZHMuXG4gICAqIFByb3ZpZGVkIGJvdW5kcyBjb250YWluIGNvb3JkaW5hdGVzIG9mIGN1cnJlbnQgbWFwIHJlY3RhbmdsZSBjb3JuZXJzLlxuICAgKiBDZW50ZXIgYnV0dG9uIHNob3VsZCBiZSBkaXNhYmxlZCBpZiBkaXN0YW5jZSBiZXR3ZWVuIGNlbnRlciBjb29yZGluYXRlcyAoZnJvbSBjb25maWcpIGFuZCBjZW50ZXIgb2YgY3VycmVudCBib3VuZHNcbiAgICogaXMgbGVzcyB0aGFuIDEvNCBvZiBib3VuZHMgZGltZW5zaW9ucy5cbiAgICogVG8gYWNoaWV2ZSBpdCB3ZSBqdXN0IG5lZWQgdG8gY2hlY2sgaWYgY2VudGVyIGNvb3JkaW5hdGVzIChmcm9tIGNvbmZpZykgYXJlIGNvbnRhaW5lZCBpbiB0aGUgYm91bmRhcmllcyBvZlxuICAgKiBjdXJyZW50IGJvdW5kcyBzaHJ1bmsgYnkgMjUlLlxuICAgKiBAcGFyYW0gYm91bmRzIEN1cnJlbnQgbWFwIHZpZXcgYm91bmRhcmllcy5cbiAgICogQHJldHVybnMgVHJ1ZSBpZiBkaXN0YW5jZSBiZXR3ZWVuIGNvbmZpZyBjZW50ZXIgYW5kIGN1cnJlbnQgYm91bmRhcmllcyBjZW50ZXIgaXMgYmlnZ2VyIHRoYW4gMS80IG9mIGJvdW5kYXJpZXMgZGltZW5zaW9uc1xuICAgKi9cbiAgcHJpdmF0ZSBzaG91bGREaXNhYmxlQ2VudGVyQnV0dG9uKGJvdW5kczogTC5MYXRMbmdCb3VuZHMpOiBib29sZWFuIHtcbiAgICBjb25zdCBzaHJ1bmtCb3VuZHMgPSBib3VuZHMucGFkKC0wLjI1KTtcbiAgICByZXR1cm4gc2hydW5rQm91bmRzLmNvbnRhaW5zKHRoaXMuY29uZmlnLmNlbnRlcik7XG4gIH1cblxuICBwcml2YXRlIGRlZmF1bHRCdXR0b25zQ29uZmlnKCk6IE1hcFN0YXR1c0J1dHRvbnNDb25maWcge1xuICAgIHJldHVybiB7XG4gICAgICByZWFsdGltZTogeyBzaG93OiB0aGlzLmNvbmZpZy5yZWFsdGltZSB8fCB0aGlzLmNsdXN0ZXJNYXAuY29uZmlnLmZvbGxvdywgZGlzYWJsZWQ6IGZhbHNlIH1cbiAgICB9O1xuICB9XG59XG4iLCI8ZGl2IGNsYXNzPVwiYzh5LW1hcC1zdGF0dXNcIj5cbiAgPGRpdiBjbGFzcz1cImxlYWZsZXQtdG91Y2hcIj5cbiAgICA8ZGl2XG4gICAgICBjbGFzcz1cImxlYWZsZXQtYmFyXCJcbiAgICAgIHJvbGU9XCJncm91cFwiXG4gICAgPlxuICAgICAgPGJ1dHRvblxuICAgICAgICBjbGFzcz1cImM4eS1yZWFsdGltZVwiXG4gICAgICAgIHRpdGxlPVwie3sgJ1JlYWx0aW1lJyB8IHRyYW5zbGF0ZSB9fVwiXG4gICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAqbmdJZj1cImJ1dHRvbnNDb25maWcucmVhbHRpbWUuc2hvd1wiXG4gICAgICAgIChjbGljayk9XCJ0b2dnbGVSZWFsdGltZSgpXCJcbiAgICAgICAgW2Rpc2FibGVkXT1cImJ1dHRvbnNDb25maWcucmVhbHRpbWUuZGlzYWJsZWRcIlxuICAgICAgPlxuICAgICAgICA8c3BhblxuICAgICAgICAgIGNsYXNzPVwiYzh5LXB1bHNlXCJcbiAgICAgICAgICBbbmdDbGFzc109XCJ7XG4gICAgICAgICAgICBhY3RpdmU6IGNsdXN0ZXJNYXA/LmNvbmZpZy5yZWFsdGltZSxcbiAgICAgICAgICAgIGluYWN0aXZlOiAhY2x1c3Rlck1hcD8uY29uZmlnLnJlYWx0aW1lXG4gICAgICAgICAgfVwiXG4gICAgICAgID48L3NwYW4+XG4gICAgICA8L2J1dHRvbj5cblxuICAgICAgPGxhYmVsXG4gICAgICAgIGNsYXNzPVwidG9nZ2xlLWNvdW50ZG93biB2ZXJ0aWNhbFwiXG4gICAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwiXG4gICAgICAgICAgcmVmcmVzaFBhdXNlZCA/ICgnRW5hYmxlIGF1dG8gcmVmcmVzaCcgfCB0cmFuc2xhdGUpIDogKCdEaXNhYmxlIGF1dG8gcmVmcmVzaCcgfCB0cmFuc2xhdGUpXG4gICAgICAgIFwiXG4gICAgICAgIFt0b29sdGlwXT1cIlxuICAgICAgICAgIHJlZnJlc2hQYXVzZWQgPyAoJ0VuYWJsZSBhdXRvIHJlZnJlc2gnIHwgdHJhbnNsYXRlKSA6ICgnRGlzYWJsZSBhdXRvIHJlZnJlc2gnIHwgdHJhbnNsYXRlKVxuICAgICAgICBcIlxuICAgICAgICBwbGFjZW1lbnQ9XCJsZWZ0XCJcbiAgICAgICAgKm5nSWY9XCJcbiAgICAgICAgICAhY29uZmlnLndpZGdldEluc3RhbmNlR2xvYmFsQXV0b1JlZnJlc2hDb250ZXh0ICYmXG4gICAgICAgICAgY2x1c3Rlck1hcD8uY29uZmlnLnJlZnJlc2hJbnRlcnZhbCAmJlxuICAgICAgICAgICFjbHVzdGVyTWFwPy5jb25maWcuZm9sbG93XG4gICAgICAgIFwiXG4gICAgICAgIFthZGFwdGl2ZVBvc2l0aW9uXT1cImZhbHNlXCJcbiAgICAgICAgW2NvbnRhaW5lcl09XCInYm9keSdcIlxuICAgICAgICBbZGVsYXldPVwiMTAwMFwiXG4gICAgICA+XG4gICAgICAgIDxpbnB1dFxuICAgICAgICAgIHR5cGU9XCJjaGVja2JveFwiXG4gICAgICAgICAgKGNsaWNrKT1cInRvZ2dsZUF1dG9SZWZyZXNoKCRldmVudClcIlxuICAgICAgICAvPlxuICAgICAgICA8Yzh5LWNvdW50ZG93bi1pbnRlcnZhbFxuICAgICAgICAgIFtoaWRkZW5dPVwicmVmcmVzaFBhdXNlZFwiXG4gICAgICAgICAgW2NvdW50ZG93bkludGVydmFsXT1cImNsdXN0ZXJNYXA/LmNvbmZpZy5yZWZyZXNoSW50ZXJ2YWxcIlxuICAgICAgICA+PC9jOHktY291bnRkb3duLWludGVydmFsPlxuICAgICAgICA8aVxuICAgICAgICAgIGM4eUljb249XCJwYXVzZVwiXG4gICAgICAgICAgKm5nSWY9XCJyZWZyZXNoUGF1c2VkXCJcbiAgICAgICAgPjwvaT5cbiAgICAgIDwvbGFiZWw+XG5cbiAgICAgIDxidXR0b25cbiAgICAgICAgdGl0bGU9XCJ7eyAnQ2FuY2VsIHJlbG9hZCcgfCB0cmFuc2xhdGUgfX1cIlxuICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgKm5nSWY9XCIoY2x1c3Rlck1hcD8uaXNMb2FkaW5nJCB8IGFzeW5jKSAmJiAhY29uZmlnLndpZGdldEluc3RhbmNlR2xvYmFsQXV0b1JlZnJlc2hDb250ZXh0XCJcbiAgICAgICAgKGNsaWNrKT1cImNhbmNlbFJlbG9hZCgpXCJcbiAgICAgID5cbiAgICAgICAgPGlcbiAgICAgICAgICBjbGFzcz1cImljb24tc3BpblwiXG4gICAgICAgICAgYzh5SWNvbj1cInJlZnJlc2hcIlxuICAgICAgICA+PC9pPlxuICAgICAgPC9idXR0b24+XG4gICAgICA8YnV0dG9uXG4gICAgICAgIFt0aXRsZV09XCInUmVsb2FkJyB8IHRyYW5zbGF0ZVwiXG4gICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAqbmdJZj1cIlxuICAgICAgICAgICFjbHVzdGVyTWFwPy5jb25maWcucmVhbHRpbWUgJiZcbiAgICAgICAgICAhY2x1c3Rlck1hcD8uYXNzZXRzICYmXG4gICAgICAgICAgIShjbHVzdGVyTWFwPy5pc0xvYWRpbmckIHwgYXN5bmMpICYmXG4gICAgICAgICAgIWNvbmZpZy53aWRnZXRJbnN0YW5jZUdsb2JhbEF1dG9SZWZyZXNoQ29udGV4dFxuICAgICAgICBcIlxuICAgICAgICAoY2xpY2spPVwicmVsb2FkKClcIlxuICAgICAgPlxuICAgICAgICA8aSBjOHlJY29uPVwicmVmcmVzaFwiPjwvaT5cbiAgICAgIDwvYnV0dG9uPlxuICAgICAgPGJ1dHRvblxuICAgICAgICB0aXRsZT1cInt7ICdDZW50ZXIgbWFwJyB8IHRyYW5zbGF0ZSB9fVwiXG4gICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAoY2xpY2spPVwiY2VudGVyKClcIlxuICAgICAgICBbZGlzYWJsZWRdPVwiY2VudGVyTWFwQnV0dG9uRGlzYWJsZWQgfHwgY2x1c3Rlck1hcD8uY29uZmlnLmZvbGxvd1wiXG4gICAgICA+XG4gICAgICAgIDxpIGM4eUljb249XCJ0YXJnZXQxXCI+PC9pPlxuICAgICAgPC9idXR0b24+XG4gICAgICA8YnV0dG9uXG4gICAgICAgIHRpdGxlPVwie3sgJ1VuZm9sbG93JyB8IHRyYW5zbGF0ZSB9fVwiXG4gICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAqbmdJZj1cImNsdXN0ZXJNYXA/LmNvbmZpZy5mb2xsb3dcIlxuICAgICAgICAoY2xpY2spPVwidW5mb2xsb3coKVwiXG4gICAgICA+XG4gICAgICAgIDxpIGM4eUljb249XCJtYXJrZXItb2ZmXCI+PC9pPlxuICAgICAgPC9idXR0b24+XG5cbiAgICAgIDxidXR0b25cbiAgICAgICAgdGl0bGU9XCJ7eyAnRm9sbG93JyB8IHRyYW5zbGF0ZSB9fVwiXG4gICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAqbmdJZj1cImluaXRDb25maWcuZm9sbG93ICYmICFjbHVzdGVyTWFwPy5jb25maWcuZm9sbG93XCJcbiAgICAgICAgKGNsaWNrKT1cImZvbGxvdygpXCJcbiAgICAgID5cbiAgICAgICAgPGkgYzh5SWNvbj1cIm1hcmtlclwiPjwvaT5cbiAgICAgIDwvYnV0dG9uPlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbjwvZGl2PlxuIl19
144
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFwLXN0YXR1cy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9tYXAvbWFwLXN0YXR1cy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi9tYXAvbWFwLXN0YXR1cy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFpQixTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDakcsT0FBTyxFQUFFLDBCQUEwQixFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDakUsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUN0QyxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQy9CLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUMzQyxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQzs7Ozs7QUFPOUQsTUFBTSxPQUFPLGtCQUFrQjtJQUovQjtRQVdFLGlCQUFZLEdBQUcsSUFBSSxZQUFZLEVBQW9CLENBQUM7UUFHcEQsZUFBVSxHQUFHLElBQUksWUFBWSxFQUFvQixDQUFDO1FBRXhDLHNCQUFpQixHQUFHLElBQUksWUFBWSxFQUFRLENBQUM7UUFLOUMsa0JBQWEsR0FBb0MsRUFBRSxDQUFDO1FBRTdELDRCQUF1QixHQUFHLElBQUksQ0FBQztRQUkvQixrQkFBYSxHQUFHLEtBQUssQ0FBQztRQUVkLGFBQVEsR0FBRyxJQUFJLE9BQU8sRUFBUSxDQUFDO0tBcUh4QztJQW5IQyxRQUFRO1FBQ04sSUFBSSxDQUFDLFVBQVUsR0FBRyxTQUFTLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ3pDLElBQUksQ0FBQyxhQUFhLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsb0JBQW9CLEVBQUUsRUFBRSxJQUFJLENBQUMsYUFB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QixTQUFTOytCQUNFLGdCQUFnQjs4QkFLMUIsTUFBTTtzQkFETCxLQUFLO2dCQUdHLE1BQU07c0JBQWQsS0FBSztnQkFHTixZQUFZO3NCQURYLE1BQU07Z0JBSVAsVUFBVTtzQkFEVCxNQUFNO2dCQUdHLGlCQUFpQjtzQkFBMUIsTUFBTTtnQkFHUCxVQUFVO3NCQURULEtBQUs7Z0JBR0csYUFBYTtzQkFBckIsS0FBSztnQkFHaUMscUJBQXFCO3NCQUEzRCxTQUFTO3VCQUFDLDBCQUEwQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgRXZlbnRFbWl0dGVyLCBJbnB1dCwgT3V0cHV0LCBTaW1wbGVDaGFuZ2VzLCBWaWV3Q2hpbGQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENvdW50ZG93bkludGVydmFsQ29tcG9uZW50IH0gZnJvbSAnQGM4eS9uZ3gtY29tcG9uZW50cyc7XG5pbXBvcnQgeyBjbG9uZURlZXAgfSBmcm9tICdsb2Rhc2gtZXMnO1xuaW1wb3J0IHsgU3ViamVjdCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgdGFrZVVudGlsIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgQ2x1c3Rlck1hcENvbXBvbmVudCB9IGZyb20gJy4vY2x1c3Rlci1tYXAuY29tcG9uZW50JztcbmltcG9ydCB7IENsdXN0ZXJNYXBDb25maWcsIE1hcFN0YXR1c0J1dHRvbnNDb25maWcsIFBvc2l0aW9uTWFuYWdlZE9iamVjdCB9IGZyb20gJy4vbWFwLm1vZGVsJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnYzh5LW1hcC1zdGF0dXMnLFxuICB0ZW1wbGF0ZVVybDogJy4vbWFwLXN0YXR1cy5jb21wb25lbnQuaHRtbCdcbn0pXG5leHBvcnQgY2xhc3MgTWFwU3RhdHVzQ29tcG9uZW50IHtcbiAgQElucHV0KClcbiAgY29uZmlnOiBDbHVzdGVyTWFwQ29uZmlnO1xuXG4gIEBJbnB1dCgpIGFzc2V0czogUG9zaXRpb25NYW5hZ2VkT2JqZWN0W107XG5cbiAgQE91dHB1dCgpXG4gIGNvbmZpZ0NoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8Q2x1c3Rlck1hcENvbmZpZz4oKTtcblxuICBAT3V0cHV0KClcbiAgb25VbmZvbGxvdyA9IG5ldyBFdmVudEVtaXR0ZXI8Q2x1c3Rlck1hcENvbmZpZz4oKTtcblxuICBAT3V0cHV0KCkgZml0QXNzZXRzVG9Cb3VuZHMgPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XG5cbiAgQElucHV0KClcbiAgY2x1c3Rlck1hcDogQ2x1c3Rlck1hcENvbXBvbmVudDtcblxuICBASW5wdXQoKSBidXR0b25zQ29uZmlnOiBQYXJ0aWFsPE1hcFN0YXR1c0J1dHRvbnNDb25maWc+ID0ge307XG5cbiAgY2VudGVyTWFwQnV0dG9uRGlzYWJsZWQgPSB0cnVlO1xuICBAVmlld0NoaWxkKENvdW50ZG93bkludGVydmFsQ29tcG9uZW50KSBjb3VudGRvd25JbnRlcnZhbENvbXA6IENvdW50ZG93bkludGVydmFsQ29tcG9uZW50O1xuXG4gIGluaXRDb25maWc6IENsdXN0ZXJNYXBDb25maWc7XG4gIHJlZnJlc2hQYXVzZWQgPSBmYWxzZTtcbiAgZml0VG9Cb3VuZHNCdXR0b25EaXNhYmxlZDogYm9vbGVhbjtcbiAgcHJpdmF0ZSBkZXN0cm95JCA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG5cbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgdGhpcy5pbml0Q29uZmlnID0gY2xvbmVEZWVwKHRoaXMuY29uZmlnKTtcbiAgICB0aGlzLmJ1dHRvbnNDb25maWcgPSBPYmplY3QuYXNzaWduKHRoaXMuZGVmYXVsdEJ1dHRvbnNDb25maWcoKSwgdGhpcy5idXR0b25zQ29uZmlnKTtcbiAgfVxuXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuY29uZmlnLndpZGdldEluc3RhbmNlR2xvYmFsQXV0b1JlZnJlc2hDb250ZXh0KSB7XG4gICAgICB0aGlzLmNsdXN0ZXJNYXAuY291bnRkb3duSW50ZXJ2YWxDb21wID0gdGhpcy5jb3VudGRvd25JbnRlcnZhbENvbXA7XG4gICAgfVxuICB9XG5cbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xuICAgIGlmIChjaGFuZ2VzLmNsdXN0ZXJNYXA/LnByZXZpb3VzVmFsdWUgIT09IGNoYW5nZXMuY2x1c3Rlck1hcD8uY3VycmVudFZhbHVlKSB7XG4gICAgICB0aGlzLmNoZWNrSWZNYXBJc0FscmVhZHlDZW50ZXJlZCgpO1xuICAgIH1cbiAgfVxuXG4gIGNlbnRlcigpIHtcbiAgICB0aGlzLmNsdXN0ZXJNYXAuY2VudGVyKCk7XG4gIH1cblxuICBmaXRUb0JvdW5kcygpIHtcbiAgICB0aGlzLmZpdFRvQm91bmRzQnV0dG9uRGlzYWJsZWQgPSB0cnVlO1xuICAgIHRoaXMuZml0QXNzZXRzVG9Cb3VuZHMuZW1pdCgpO1xuICB9XG5cbiAgcmVsb2FkKCkge1xuICAgIHRoaXMuY2x1c3Rlck1hcC5yZWxvYWQoKTtcbiAgfVxuXG4gIGNhbmNlbFJlbG9hZCgpIHtcbiAgICB0aGlzLmNsdXN0ZXJNYXAuY2FuY2VsUmVsb2FkKCk7XG4gIH1cblxuICB0b2dnbGVSZWFsdGltZSgpIHtcbiAgICB0aGlzLmNvbmZpZyA9IHtcbiAgICAgIC4uLnRoaXMuY29uZmlnLFxuICAgICAgcmVhbHRpbWU6ICF0aGlzLmNvbmZpZy5yZWFsdGltZVxuICAgIH07XG4gICAgdGhpcy5jb25maWdDaGFuZ2UuZW1pdCh0aGlzLmNvbmZpZyk7XG4gIH1cblxuICB0b2dnbGVBdXRvUmVmcmVzaCgkZXZlbnQ6IE1vdXNlRXZlbnQpIHtcbiAgICAkZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgdGhpcy5yZWZyZXNoUGF1c2VkID0gIXRoaXMucmVmcmVzaFBhdXNlZDtcbiAgICBpZiAodGhpcy5yZWZyZXNoUGF1c2VkKSB7XG4gICAgICB0aGlzLmNvdW50ZG93bkludGVydmFsQ29tcC5zdG9wKHRydWUpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmNvdW50ZG93bkludGVydmFsQ29tcC5zdGFydCgpO1xuICAgIH1cbiAgfVxuXG4gIHVuZm9sbG93KCkge1xuICAgIHRoaXMuY29uZmlnID0ge1xuICAgICAgLi4udGhpcy5jbHVzdGVyTWFwLmNvbmZpZyxcbiAgICAgIGZvbGxvdzogZmFsc2VcbiAgICB9O1xuICAgIHRoaXMuY29uZmlnQ2hhbmdlLmVtaXQodGhpcy5jb25maWcpO1xuICAgIHRoaXMub25VbmZvbGxvdy5lbWl0KHRoaXMuY29uZmlnKTtcbiAgfVxuXG4gIGZvbGxvdygpIHtcbiAgICB0aGlzLmNvbmZpZyA9IHtcbiAgICAgIC4uLnRoaXMuY29uZmlnLFxuICAgICAgZm9sbG93OiB0cnVlXG4gICAgfTtcbiAgICB0aGlzLmNvbmZpZ0NoYW5nZS5lbWl0KHRoaXMuY29uZmlnKTtcbiAgfVxuXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIHRoaXMuZGVzdHJveSQubmV4dCgpO1xuICB9XG5cbiAgcHJpdmF0ZSBjaGVja0lmTWFwSXNBbHJlYWR5Q2VudGVyZWQoKSB7XG4gICAgdGhpcy5jbHVzdGVyTWFwLm1hcENoYW5nZS5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSkuc3Vic2NyaWJlKChldmVudDogTC5MZWFmbGV0RXZlbnQpID0+IHtcbiAgICAgIGlmIChldmVudC5zb3VyY2VUYXJnZXQ/LmdldEJvdW5kcykge1xuICAgICAgICBjb25zdCBib3VuZHM6IEwuTGF0TG5nQm91bmRzID0gZXZlbnQuc291cmNlVGFyZ2V0LmdldEJvdW5kcygpO1xuICAgICAgICB0aGlzLmZpdFRvQm91bmRzQnV0dG9uRGlzYWJsZWQgPSB0aGlzLnNob3VsZERpc2FibGVGaXRUb0JvdW5kc0J1dHRvbihib3VuZHMpO1xuICAgICAgICBpZiAodGhpcy5jb25maWc/LmNlbnRlcikge1xuICAgICAgICAgIHRoaXMuY2VudGVyTWFwQnV0dG9uRGlzYWJsZWQgPSB0aGlzLnNob3VsZERpc2FibGVDZW50ZXJCdXR0b24oYm91bmRzKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrcyBpZiBDZW50ZXIgYnV0dG9uIHNob3VsZCBiZSBkaXNhYmxlZCBhY2NvcmRpbmcgdG8gcHJvdmlkZWQgYm91bmRzLlxuICAgKiBQcm92aWRlZCBib3VuZHMgY29udGFpbiBjb29yZGluYXRlcyBvZiBjdXJyZW50IG1hcCByZWN0YW5nbGUgY29ybmVycy5cbiAgICogQ2VudGVyIGJ1dHRvbiBzaG91bGQgYmUgZGlzYWJsZWQgaWYgZGlzdGFuY2UgYmV0d2VlbiBjZW50ZXIgY29vcmRpbmF0ZXMgKGZyb20gY29uZmlnKSBhbmQgY2VudGVyIG9mIGN1cnJlbnQgYm91bmRzXG4gICAqIGlzIGxlc3MgdGhhbiAxLzQgb2YgYm91bmRzIGRpbWVuc2lvbnMuXG4gICAqIFRvIGFjaGlldmUgaXQgd2UganVzdCBuZWVkIHRvIGNoZWNrIGlmIGNlbnRlciBjb29yZGluYXRlcyAoZnJvbSBjb25maWcpIGFyZSBjb250YWluZWQgaW4gdGhlIGJvdW5kYXJpZXMgb2ZcbiAgICogY3VycmVudCBib3VuZHMgc2hydW5rIGJ5IDI1JS5cbiAgICogQHBhcmFtIGJvdW5kcyBDdXJyZW50IG1hcCB2aWV3IGJvdW5kYXJpZXMuXG4gICAqIEByZXR1cm5zIFRydWUgaWYgZGlzdGFuY2UgYmV0d2VlbiBjb25maWcgY2VudGVyIGFuZCBjdXJyZW50IGJvdW5kYXJpZXMgY2VudGVyIGlzIGJpZ2dlciB0aGFuIDEvNCBvZiBib3VuZGFyaWVzIGRpbWVuc2lvbnNcbiAgICovXG4gIHByaXZhdGUgc2hvdWxkRGlzYWJsZUNlbnRlckJ1dHRvbihib3VuZHM6IEwuTGF0TG5nQm91bmRzKTogYm9vbGVhbiB7XG4gICAgY29uc3Qgc2hydW5rQm91bmRzID0gYm91bmRzLnBhZCgtMC4yNSk7XG4gICAgcmV0dXJuIHNocnVua0JvdW5kcy5jb250YWlucyh0aGlzLmNvbmZpZy5jZW50ZXIpO1xuICB9XG5cbiAgcHJpdmF0ZSBzaG91bGREaXNhYmxlRml0VG9Cb3VuZHNCdXR0b24oYm91bmRzOiBMLkxhdExuZ0JvdW5kcyk6IGJvb2xlYW4ge1xuICAgIGlmICghdGhpcy5hc3NldHMpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5hc3NldHMuZXZlcnkoKHsgYzh5X1Bvc2l0aW9uIH0pID0+XG4gICAgICBib3VuZHMuY29udGFpbnMoW2M4eV9Qb3NpdGlvbi5sYXQsIGM4eV9Qb3NpdGlvbi5sbmddKVxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIGRlZmF1bHRCdXR0b25zQ29uZmlnKCk6IE1hcFN0YXR1c0J1dHRvbnNDb25maWcge1xuICAgIHJldHVybiB7XG4gICAgICByZWFsdGltZTogeyBzaG93OiB0aGlzLmNvbmZpZy5yZWFsdGltZSB8fCB0aGlzLmNsdXN0ZXJNYXAuY29uZmlnLmZvbGxvdywgZGlzYWJsZWQ6IGZhbHNlIH1cbiAgICB9O1xuICB9XG59XG4iLCI8ZGl2IGNsYXNzPVwiYzh5LW1hcC1zdGF0dXNcIj5cbiAgPGRpdiBjbGFzcz1cImxlYWZsZXQtdG91Y2hcIj5cbiAgICA8ZGl2XG4gICAgICBjbGFzcz1cImxlYWZsZXQtYmFyXCJcbiAgICAgIHJvbGU9XCJncm91cFwiXG4gICAgPlxuICAgICAgPGJ1dHRvblxuICAgICAgICBjbGFzcz1cImM4eS1yZWFsdGltZVwiXG4gICAgICAgIHRpdGxlPVwie3sgJ1JlYWx0aW1lJyB8IHRyYW5zbGF0ZSB9fVwiXG4gICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAqbmdJZj1cImJ1dHRvbnNDb25maWcucmVhbHRpbWUuc2hvd1wiXG4gICAgICAgIChjbGljayk9XCJ0b2dnbGVSZWFsdGltZSgpXCJcbiAgICAgICAgW2Rpc2FibGVkXT1cImJ1dHRvbnNDb25maWcucmVhbHRpbWUuZGlzYWJsZWRcIlxuICAgICAgPlxuICAgICAgICA8c3BhblxuICAgICAgICAgIGNsYXNzPVwiYzh5LXB1bHNlXCJcbiAgICAgICAgICBbbmdDbGFzc109XCJ7XG4gICAgICAgICAgICBhY3RpdmU6IGNsdXN0ZXJNYXA/LmNvbmZpZy5yZWFsdGltZSxcbiAgICAgICAgICAgIGluYWN0aXZlOiAhY2x1c3Rlck1hcD8uY29uZmlnLnJlYWx0aW1lXG4gICAgICAgICAgfVwiXG4gICAgICAgID48L3NwYW4+XG4gICAgICA8L2J1dHRvbj5cblxuICAgICAgPGxhYmVsXG4gICAgICAgIGNsYXNzPVwidG9nZ2xlLWNvdW50ZG93biB2ZXJ0aWNhbFwiXG4gICAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwiXG4gICAgICAgICAgcmVmcmVzaFBhdXNlZCA/ICgnRW5hYmxlIGF1dG8gcmVmcmVzaCcgfCB0cmFuc2xhdGUpIDogKCdEaXNhYmxlIGF1dG8gcmVmcmVzaCcgfCB0cmFuc2xhdGUpXG4gICAgICAgIFwiXG4gICAgICAgIFt0b29sdGlwXT1cIlxuICAgICAgICAgIHJlZnJlc2hQYXVzZWQgPyAoJ0VuYWJsZSBhdXRvIHJlZnJlc2gnIHwgdHJhbnNsYXRlKSA6ICgnRGlzYWJsZSBhdXRvIHJlZnJlc2gnIHwgdHJhbnNsYXRlKVxuICAgICAgICBcIlxuICAgICAgICBwbGFjZW1lbnQ9XCJsZWZ0XCJcbiAgICAgICAgKm5nSWY9XCJcbiAgICAgICAgICAhY29uZmlnLndpZGdldEluc3RhbmNlR2xvYmFsQXV0b1JlZnJlc2hDb250ZXh0ICYmXG4gICAgICAgICAgY2x1c3Rlck1hcD8uY29uZmlnLnJlZnJlc2hJbnRlcnZhbCAmJlxuICAgICAgICAgICFjbHVzdGVyTWFwPy5jb25maWcuZm9sbG93XG4gICAgICAgIFwiXG4gICAgICAgIFthZGFwdGl2ZVBvc2l0aW9uXT1cImZhbHNlXCJcbiAgICAgICAgW2NvbnRhaW5lcl09XCInYm9keSdcIlxuICAgICAgICBbZGVsYXldPVwiMTAwMFwiXG4gICAgICA+XG4gICAgICAgIDxpbnB1dFxuICAgICAgICAgIHR5cGU9XCJjaGVja2JveFwiXG4gICAgICAgICAgKGNsaWNrKT1cInRvZ2dsZUF1dG9SZWZyZXNoKCRldmVudClcIlxuICAgICAgICAvPlxuICAgICAgICA8Yzh5LWNvdW50ZG93bi1pbnRlcnZhbFxuICAgICAgICAgIFtoaWRkZW5dPVwicmVmcmVzaFBhdXNlZFwiXG4gICAgICAgICAgW2NvdW50ZG93bkludGVydmFsXT1cImNsdXN0ZXJNYXA/LmNvbmZpZy5yZWZyZXNoSW50ZXJ2YWxcIlxuICAgICAgICA+PC9jOHktY291bnRkb3duLWludGVydmFsPlxuICAgICAgICA8aVxuICAgICAgICAgIGM4eUljb249XCJwYXVzZVwiXG4gICAgICAgICAgKm5nSWY9XCJyZWZyZXNoUGF1c2VkXCJcbiAgICAgICAgPjwvaT5cbiAgICAgIDwvbGFiZWw+XG5cbiAgICAgIDxidXR0b25cbiAgICAgICAgdGl0bGU9XCJ7eyAnQ2FuY2VsIHJlbG9hZCcgfCB0cmFuc2xhdGUgfX1cIlxuICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgKm5nSWY9XCIoY2x1c3Rlck1hcD8uaXNMb2FkaW5nJCB8IGFzeW5jKSAmJiAhY29uZmlnLndpZGdldEluc3RhbmNlR2xvYmFsQXV0b1JlZnJlc2hDb250ZXh0XCJcbiAgICAgICAgKGNsaWNrKT1cImNhbmNlbFJlbG9hZCgpXCJcbiAgICAgID5cbiAgICAgICAgPGlcbiAgICAgICAgICBjbGFzcz1cImljb24tc3BpblwiXG4gICAgICAgICAgYzh5SWNvbj1cInJlZnJlc2hcIlxuICAgICAgICA+PC9pPlxuICAgICAgPC9idXR0b24+XG4gICAgICA8YnV0dG9uXG4gICAgICAgIFt0aXRsZV09XCInUmVsb2FkJyB8IHRyYW5zbGF0ZVwiXG4gICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAqbmdJZj1cIlxuICAgICAgICAgICFjbHVzdGVyTWFwPy5jb25maWcucmVhbHRpbWUgJiZcbiAgICAgICAgICAhY2x1c3Rlck1hcD8uYXNzZXRzICYmXG4gICAgICAgICAgIShjbHVzdGVyTWFwPy5pc0xvYWRpbmckIHwgYXN5bmMpICYmXG4gICAgICAgICAgIWNvbmZpZy53aWRnZXRJbnN0YW5jZUdsb2JhbEF1dG9SZWZyZXNoQ29udGV4dFxuICAgICAgICBcIlxuICAgICAgICAoY2xpY2spPVwicmVsb2FkKClcIlxuICAgICAgPlxuICAgICAgICA8aSBjOHlJY29uPVwicmVmcmVzaFwiPjwvaT5cbiAgICAgIDwvYnV0dG9uPlxuICAgICAgPGJ1dHRvblxuICAgICAgICB0aXRsZT1cInt7ICdDZW50ZXIgbWFwJyB8IHRyYW5zbGF0ZSB9fVwiXG4gICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAoY2xpY2spPVwiY2VudGVyKClcIlxuICAgICAgICBbZGlzYWJsZWRdPVwiY2VudGVyTWFwQnV0dG9uRGlzYWJsZWQgfHwgY2x1c3Rlck1hcD8uY29uZmlnLmZvbGxvd1wiXG4gICAgICA+XG4gICAgICAgIDxpIGM4eUljb249XCJ0YXJnZXQxXCI+PC9pPlxuICAgICAgPC9idXR0b24+XG4gICAgICA8YnV0dG9uXG4gICAgICB0aXRsZT1cInt7ICdGaXQgdG8gYXNzZXRzIGJvdW5kcycgfCB0cmFuc2xhdGUgfX1cIlxuICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAoY2xpY2spPVwiZml0VG9Cb3VuZHMoKVwiXG4gICAgICBbZGlzYWJsZWRdPVwiZml0VG9Cb3VuZHNCdXR0b25EaXNhYmxlZCB8fCBjbHVzdGVyTWFwPy5jb25maWcuZm9sbG93XCJcbiAgICA+XG4gICAgICA8aSBjOHlJY29uPVwid2F5cG9pbnQtbWFwXCI+PC9pPlxuICAgIDwvYnV0dG9uPlxuICAgICAgPGJ1dHRvblxuICAgICAgICB0aXRsZT1cInt7ICdVbmZvbGxvdycgfCB0cmFuc2xhdGUgfX1cIlxuICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgKm5nSWY9XCJjbHVzdGVyTWFwPy5jb25maWcuZm9sbG93XCJcbiAgICAgICAgKGNsaWNrKT1cInVuZm9sbG93KClcIlxuICAgICAgPlxuICAgICAgICA8aSBjOHlJY29uPVwibWFya2VyLW9mZlwiPjwvaT5cbiAgICAgIDwvYnV0dG9uPlxuXG4gICAgICA8YnV0dG9uXG4gICAgICAgIHRpdGxlPVwie3sgJ0ZvbGxvdycgfCB0cmFuc2xhdGUgfX1cIlxuICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgKm5nSWY9XCJpbml0Q29uZmlnLmZvbGxvdyAmJiAhY2x1c3Rlck1hcD8uY29uZmlnLmZvbGxvd1wiXG4gICAgICAgIChjbGljayk9XCJmb2xsb3coKVwiXG4gICAgICA+XG4gICAgICAgIDxpIGM4eUljb249XCJtYXJrZXJcIj48L2k+XG4gICAgICA8L2J1dHRvbj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG48L2Rpdj5cbiJdfQ==
@@ -23,7 +23,7 @@ export const defaultLayer = {
23
23
  priority: 1000,
24
24
  options: {
25
25
  maxZoom: 18,
26
- minZoom: 2,
26
+ minZoom: 0,
27
27
  attribution: '&copy;<a href="http://www.openstreetmap.org/copyright" rel="noreferrer nofollow">OpenStreetMap</a>',
28
28
  noWrap: false
29
29
  }
@@ -32,4 +32,7 @@ export const defaultMapConfig = {
32
32
  center: [51.23544, 6.79599], // Düsseldorf
33
33
  zoomLevel: 2
34
34
  };
35
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFwLm1vZGVsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vbWFwL21hcC5tb2RlbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBTy9DLE1BQU0sVUFBVSxZQUFZLENBQUMsTUFBZ0IsRUFBRSxLQUE2QixFQUFFLEtBQWM7SUFDekYsTUFBb0IsQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO0lBQ25DLE1BQW9CLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQztJQUNwQyxPQUFPLE1BQW1CLENBQUM7QUFDN0IsQ0FBQztBQUVELE1BQU0sQ0FBQyxNQUFNLGNBQWMsR0FBRyxJQUFJLGNBQWMsQ0FBNkIsZ0JBQWdCLENBQUMsQ0FBQztBQWMvRixNQUFNLENBQU4sSUFBWSxXQUlYO0FBSkQsV0FBWSxXQUFXO0lBQ3JCLDZDQUFRLENBQUE7SUFDUiw2Q0FBUSxDQUFBO0lBQ1IsbURBQVcsQ0FBQTtBQUNiLENBQUMsRUFKVyxXQUFXLEtBQVgsV0FBVyxRQUl0QjtBQUVELE1BQU0sQ0FBTixJQUFZLG1CQUdYO0FBSEQsV0FBWSxtQkFBbUI7SUFDN0IsNENBQXFCLENBQUE7SUFDckIsNENBQXFCLENBQUE7QUFDdkIsQ0FBQyxFQUhXLG1CQUFtQixLQUFuQixtQkFBbUIsUUFHOUI7QUFxQ0QsTUFBTSxDQUFDLE1BQU0sa0JBQWtCLEdBQUcsSUFBSSxjQUFjLENBQ2xELG9CQUFvQixDQUNyQixDQUFDO0FBRUYsTUFBTSxDQUFDLE1BQU0sWUFBWSxHQUFpQjtJQUN4QyxRQUFRLEVBQUUsb0RBQW9EO0lBQzlELEtBQUssRUFBRSxlQUFlO0lBQ3RCLFFBQVEsRUFBRSxJQUFJO0lBQ2QsT0FBTyxFQUFFO1FBQ1AsT0FBTyxFQUFFLEVBQUU7UUFDWCxPQUFPLEVBQUUsQ0FBQztRQUNWLFdBQVcsRUFDVCxvR0FBb0c7UUFDdEcsTUFBTSxFQUFFLEtBQUs7S0FDZDtDQUNGLENBQUM7QUFFRixNQUFNLENBQUMsTUFBTSxnQkFBZ0IsR0FBcUI7SUFDaEQsTUFBTSxFQUFFLENBQUMsUUFBUSxFQUFFLE9BQU8sQ0FBQyxFQUFFLGFBQWE7SUFDMUMsU0FBUyxFQUFFLENBQUM7Q0FDYixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0aW9uVG9rZW4gfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IElFdmVudCwgSU1hbmFnZWRPYmplY3QgfSBmcm9tICdAYzh5L2NsaWVudCc7XG5pbXBvcnQgdHlwZSB7IE1hcERlZmF1bHRDb25maWcsIE1hcFRpbGVMYXllciB9IGZyb20gJ0BjOHkvb3B0aW9ucyc7XG5pbXBvcnQgdHlwZSAqIGFzIEwgZnJvbSAnbGVhZmxldCc7XG5pbXBvcnQgeyBPYnNlcnZhYmxlIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBHbG9iYWxBdXRvUmVmcmVzaFdpZGdldENvbmZpZyB9IGZyb20gJ0BjOHkvbmd4LWNvbXBvbmVudHMnO1xuXG5leHBvcnQgZnVuY3Rpb24gZ2V0Qzh5TWFya2VyKG1hcmtlcjogTC5NYXJrZXIsIGFzc2V0PzogUG9zaXRpb25NYW5hZ2VkT2JqZWN0LCBldmVudD86IElFdmVudCkge1xuICAobWFya2VyIGFzIEM4eU1hcmtlcikuYXNzZXQgPSBhc3NldDtcbiAgKG1hcmtlciBhcyBDOHlNYXJrZXIpLmV2ZW50ID0gZXZlbnQ7XG4gIHJldHVybiBtYXJrZXIgYXMgQzh5TWFya2VyO1xufVxuXG5leHBvcnQgY29uc3QgTUFQX1RJTEVfTEFZRVIgPSBuZXcgSW5qZWN0aW9uVG9rZW48T2JzZXJ2YWJsZTxNYXBUaWxlTGF5ZXJbXT4+KCdNQVBfVElMRV9MQVlFUicpO1xuXG50eXBlIFJlcXVpcmVPbmx5T25lPFQsIEtleXMgZXh0ZW5kcyBrZXlvZiBUID0ga2V5b2YgVD4gPSBQaWNrPFQsIEV4Y2x1ZGU8a2V5b2YgVCwgS2V5cz4+ICZcbiAgeyBbSyBpbiBLZXlzXS0/OiBSZXF1aXJlZDxQaWNrPFQsIEs+PiAmIFBhcnRpYWw8UmVjb3JkPEV4Y2x1ZGU8S2V5cywgSz4sIHVuZGVmaW5lZD4+IH1bS2V5c107XG5cbmludGVyZmFjZSBDOHlNYXJrZXJBdHRyIHtcbiAgYXNzZXQ6IFBvc2l0aW9uTWFuYWdlZE9iamVjdDtcbiAgZXZlbnQ6IElFdmVudDtcbn1cblxuZXhwb3J0IHR5cGUgQzh5TWFya2VyQXR0cmlidXRlcyA9IGtleW9mIEM4eU1hcmtlckF0dHI7XG5cbmV4cG9ydCB0eXBlIEM4eU1hcmtlciA9IEwuTWFya2VyICYgUmVxdWlyZU9ubHlPbmU8Qzh5TWFya2VyQXR0ciwgJ2Fzc2V0JyB8ICdldmVudCc+O1xuXG5leHBvcnQgZW51bSBDbHVzdGVyU2l6ZSB7XG4gIE5PTkUgPSAwLFxuICBGT1VSID0gMSxcbiAgU0lYVEVFTiA9IDJcbn1cblxuZXhwb3J0IGVudW0gTWFwVGVuYW50T3B0aW9uS2V5cyB7XG4gIENPTkZJRyA9ICdtYXAtY29uZmlnJyxcbiAgTEFZRVJTID0gJ21hcC1sYXllcnMnXG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUG9zaXRpb25NYW5hZ2VkT2JqZWN0IGV4dGVuZHMgSU1hbmFnZWRPYmplY3Qge1xuICBjOHlfUG9zaXRpb246IHtcbiAgICBsYXQ6IG51bWJlcjtcbiAgICBsbmc6IG51bWJlcjtcbiAgICBhbHQ/OiBudW1iZXI7XG4gIH07XG5cbiAgYzh5X0FjdGl2ZUFsYXJtc1N0YXR1cz86IHtcbiAgICBtaW5vcjogbnVtYmVyO1xuICAgIG1ham9yOiBudW1iZXI7XG4gICAgd2FybmluZzogbnVtYmVyO1xuICAgIGNyaXRpY2FsOiBudW1iZXI7XG4gIH07XG5cbiAgaWNvbj86IHtcbiAgICBuYW1lOiBzdHJpbmc7XG4gIH07XG59XG5cbmV4cG9ydCB0eXBlIENsdXN0ZXJNYXBDb25maWcgPSBNYXBDb25maWcgJiB7XG4gIGNlbnRlcjogW251bWJlciwgbnVtYmVyXTtcbiAgcmVmcmVzaEludGVydmFsPzogbnVtYmVyIHwgbnVsbDtcbn07XG5cbmV4cG9ydCB0eXBlIE1hcENvbmZpZyA9IE1hcERlZmF1bHRDb25maWcgJiB7XG4gIGZvbGxvdz86IGJvb2xlYW47XG4gIHJlYWx0aW1lPzogYm9vbGVhbjtcbiAgaWNvbj86IHN0cmluZztcbiAgY29sb3I/OiBzdHJpbmc7XG4gIGRpc2FibGVab29tPzogYm9vbGVhbjtcbiAgZGlzYWJsZVBhbj86IGJvb2xlYW47XG4gIGJvdW5kcz86IEwuTGF0TG5nQm91bmRzO1xuICBmaXRCb3VuZHNPcHRpb25zPzogTC5GaXRCb3VuZHNPcHRpb25zO1xufSAmIEdsb2JhbEF1dG9SZWZyZXNoV2lkZ2V0Q29uZmlnO1xuXG5leHBvcnQgY29uc3QgTUFQX0RFRkFVTFRfQ09ORklHID0gbmV3IEluamVjdGlvblRva2VuPE9ic2VydmFibGU8TWFwRGVmYXVsdENvbmZpZz4+KFxuICAnTUFQX0RFRkFVTFRfQ09ORklHJ1xuKTtcblxuZXhwb3J0IGNvbnN0IGRlZmF1bHRMYXllcjogTWFwVGlsZUxheWVyID0ge1xuICBsYXllclVybDogJ2h0dHBzOi8ve3N9LnRpbGUub3BlbnN0cmVldG1hcC5vcmcve3p9L3t4fS97eX0ucG5nJyxcbiAgbGFiZWw6ICdPcGVuU3RyZWV0TWFwJyxcbiAgcHJpb3JpdHk6IDEwMDAsXG4gIG9wdGlvbnM6IHtcbiAgICBtYXhab29tOiAxOCxcbiAgICBtaW5ab29tOiAyLFxuICAgIGF0dHJpYnV0aW9uOlxuICAgICAgJyZjb3B5OzxhIGhyZWY9XCJodHRwOi8vd3d3Lm9wZW5zdHJlZXRtYXAub3JnL2NvcHlyaWdodFwiIHJlbD1cIm5vcmVmZXJyZXIgbm9mb2xsb3dcIj5PcGVuU3RyZWV0TWFwPC9hPicsXG4gICAgbm9XcmFwOiBmYWxzZVxuICB9XG59O1xuXG5leHBvcnQgY29uc3QgZGVmYXVsdE1hcENvbmZpZzogTWFwRGVmYXVsdENvbmZpZyA9IHtcbiAgY2VudGVyOiBbNTEuMjM1NDQsIDYuNzk1OTldLCAvLyBEw7xzc2VsZG9yZlxuICB6b29tTGV2ZWw6IDJcbn07XG5cbmV4cG9ydCB0eXBlIE1hcFN0YXR1c0J1dHRvbnNDb25maWcgPSBSZWNvcmQ8J3JlYWx0aW1lJywgeyBzaG93OiBib29sZWFuOyBkaXNhYmxlZD86IGJvb2xlYW4gfT47XG4iXX0=
35
+ export const defaultFitBoundsOptions = {
36
+ padding: [50, 50]
37
+ };
38
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFwLm1vZGVsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vbWFwL21hcC5tb2RlbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBTy9DLE1BQU0sVUFBVSxZQUFZLENBQUMsTUFBZ0IsRUFBRSxLQUE2QixFQUFFLEtBQWM7SUFDekYsTUFBb0IsQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO0lBQ25DLE1BQW9CLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQztJQUNwQyxPQUFPLE1BQW1CLENBQUM7QUFDN0IsQ0FBQztBQUVELE1BQU0sQ0FBQyxNQUFNLGNBQWMsR0FBRyxJQUFJLGNBQWMsQ0FBNkIsZ0JBQWdCLENBQUMsQ0FBQztBQWMvRixNQUFNLENBQU4sSUFBWSxXQUlYO0FBSkQsV0FBWSxXQUFXO0lBQ3JCLDZDQUFRLENBQUE7SUFDUiw2Q0FBUSxDQUFBO0lBQ1IsbURBQVcsQ0FBQTtBQUNiLENBQUMsRUFKVyxXQUFXLEtBQVgsV0FBVyxRQUl0QjtBQUVELE1BQU0sQ0FBTixJQUFZLG1CQUdYO0FBSEQsV0FBWSxtQkFBbUI7SUFDN0IsNENBQXFCLENBQUE7SUFDckIsNENBQXFCLENBQUE7QUFDdkIsQ0FBQyxFQUhXLG1CQUFtQixLQUFuQixtQkFBbUIsUUFHOUI7QUFxQ0QsTUFBTSxDQUFDLE1BQU0sa0JBQWtCLEdBQUcsSUFBSSxjQUFjLENBQ2xELG9CQUFvQixDQUNyQixDQUFDO0FBRUYsTUFBTSxDQUFDLE1BQU0sWUFBWSxHQUFpQjtJQUN4QyxRQUFRLEVBQUUsb0RBQW9EO0lBQzlELEtBQUssRUFBRSxlQUFlO0lBQ3RCLFFBQVEsRUFBRSxJQUFJO0lBQ2QsT0FBTyxFQUFFO1FBQ1AsT0FBTyxFQUFFLEVBQUU7UUFDWCxPQUFPLEVBQUUsQ0FBQztRQUNWLFdBQVcsRUFDVCxvR0FBb0c7UUFDdEcsTUFBTSxFQUFFLEtBQUs7S0FDZDtDQUNGLENBQUM7QUFFRixNQUFNLENBQUMsTUFBTSxnQkFBZ0IsR0FBcUI7SUFDaEQsTUFBTSxFQUFFLENBQUMsUUFBUSxFQUFFLE9BQU8sQ0FBQyxFQUFFLGFBQWE7SUFDMUMsU0FBUyxFQUFFLENBQUM7Q0FDYixDQUFDO0FBRUYsTUFBTSxDQUFDLE1BQU0sdUJBQXVCLEdBQXVCO0lBQ3pELE9BQU8sRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUM7Q0FDbEIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGlvblRva2VuIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBJRXZlbnQsIElNYW5hZ2VkT2JqZWN0IH0gZnJvbSAnQGM4eS9jbGllbnQnO1xuaW1wb3J0IHR5cGUgeyBNYXBEZWZhdWx0Q29uZmlnLCBNYXBUaWxlTGF5ZXIgfSBmcm9tICdAYzh5L29wdGlvbnMnO1xuaW1wb3J0IHR5cGUgKiBhcyBMIGZyb20gJ2xlYWZsZXQnO1xuaW1wb3J0IHsgT2JzZXJ2YWJsZSB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgR2xvYmFsQXV0b1JlZnJlc2hXaWRnZXRDb25maWcgfSBmcm9tICdAYzh5L25neC1jb21wb25lbnRzJztcblxuZXhwb3J0IGZ1bmN0aW9uIGdldEM4eU1hcmtlcihtYXJrZXI6IEwuTWFya2VyLCBhc3NldD86IFBvc2l0aW9uTWFuYWdlZE9iamVjdCwgZXZlbnQ/OiBJRXZlbnQpIHtcbiAgKG1hcmtlciBhcyBDOHlNYXJrZXIpLmFzc2V0ID0gYXNzZXQ7XG4gIChtYXJrZXIgYXMgQzh5TWFya2VyKS5ldmVudCA9IGV2ZW50O1xuICByZXR1cm4gbWFya2VyIGFzIEM4eU1hcmtlcjtcbn1cblxuZXhwb3J0IGNvbnN0IE1BUF9USUxFX0xBWUVSID0gbmV3IEluamVjdGlvblRva2VuPE9ic2VydmFibGU8TWFwVGlsZUxheWVyW10+PignTUFQX1RJTEVfTEFZRVInKTtcblxudHlwZSBSZXF1aXJlT25seU9uZTxULCBLZXlzIGV4dGVuZHMga2V5b2YgVCA9IGtleW9mIFQ+ID0gUGljazxULCBFeGNsdWRlPGtleW9mIFQsIEtleXM+PiAmXG4gIHsgW0sgaW4gS2V5c10tPzogUmVxdWlyZWQ8UGljazxULCBLPj4gJiBQYXJ0aWFsPFJlY29yZDxFeGNsdWRlPEtleXMsIEs+LCB1bmRlZmluZWQ+PiB9W0tleXNdO1xuXG5pbnRlcmZhY2UgQzh5TWFya2VyQXR0ciB7XG4gIGFzc2V0OiBQb3NpdGlvbk1hbmFnZWRPYmplY3Q7XG4gIGV2ZW50OiBJRXZlbnQ7XG59XG5cbmV4cG9ydCB0eXBlIEM4eU1hcmtlckF0dHJpYnV0ZXMgPSBrZXlvZiBDOHlNYXJrZXJBdHRyO1xuXG5leHBvcnQgdHlwZSBDOHlNYXJrZXIgPSBMLk1hcmtlciAmIFJlcXVpcmVPbmx5T25lPEM4eU1hcmtlckF0dHIsICdhc3NldCcgfCAnZXZlbnQnPjtcblxuZXhwb3J0IGVudW0gQ2x1c3RlclNpemUge1xuICBOT05FID0gMCxcbiAgRk9VUiA9IDEsXG4gIFNJWFRFRU4gPSAyXG59XG5cbmV4cG9ydCBlbnVtIE1hcFRlbmFudE9wdGlvbktleXMge1xuICBDT05GSUcgPSAnbWFwLWNvbmZpZycsXG4gIExBWUVSUyA9ICdtYXAtbGF5ZXJzJ1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFBvc2l0aW9uTWFuYWdlZE9iamVjdCBleHRlbmRzIElNYW5hZ2VkT2JqZWN0IHtcbiAgYzh5X1Bvc2l0aW9uOiB7XG4gICAgbGF0OiBudW1iZXI7XG4gICAgbG5nOiBudW1iZXI7XG4gICAgYWx0PzogbnVtYmVyO1xuICB9O1xuXG4gIGM4eV9BY3RpdmVBbGFybXNTdGF0dXM/OiB7XG4gICAgbWlub3I6IG51bWJlcjtcbiAgICBtYWpvcjogbnVtYmVyO1xuICAgIHdhcm5pbmc6IG51bWJlcjtcbiAgICBjcml0aWNhbDogbnVtYmVyO1xuICB9O1xuXG4gIGljb24/OiB7XG4gICAgbmFtZTogc3RyaW5nO1xuICB9O1xufVxuXG5leHBvcnQgdHlwZSBDbHVzdGVyTWFwQ29uZmlnID0gTWFwQ29uZmlnICYge1xuICBjZW50ZXI6IFtudW1iZXIsIG51bWJlcl07XG4gIHJlZnJlc2hJbnRlcnZhbD86IG51bWJlciB8IG51bGw7XG59O1xuXG5leHBvcnQgdHlwZSBNYXBDb25maWcgPSBNYXBEZWZhdWx0Q29uZmlnICYge1xuICBmb2xsb3c/OiBib29sZWFuO1xuICByZWFsdGltZT86IGJvb2xlYW47XG4gIGljb24/OiBzdHJpbmc7XG4gIGNvbG9yPzogc3RyaW5nO1xuICBkaXNhYmxlWm9vbT86IGJvb2xlYW47XG4gIGRpc2FibGVQYW4/OiBib29sZWFuO1xuICBib3VuZHM/OiBMLkxhdExuZ0JvdW5kcztcbiAgZml0Qm91bmRzT3B0aW9ucz86IEwuRml0Qm91bmRzT3B0aW9ucztcbn0gJiBHbG9iYWxBdXRvUmVmcmVzaFdpZGdldENvbmZpZztcblxuZXhwb3J0IGNvbnN0IE1BUF9ERUZBVUxUX0NPTkZJRyA9IG5ldyBJbmplY3Rpb25Ub2tlbjxPYnNlcnZhYmxlPE1hcERlZmF1bHRDb25maWc+PihcbiAgJ01BUF9ERUZBVUxUX0NPTkZJRydcbik7XG5cbmV4cG9ydCBjb25zdCBkZWZhdWx0TGF5ZXI6IE1hcFRpbGVMYXllciA9IHtcbiAgbGF5ZXJVcmw6ICdodHRwczovL3tzfS50aWxlLm9wZW5zdHJlZXRtYXAub3JnL3t6fS97eH0ve3l9LnBuZycsXG4gIGxhYmVsOiAnT3BlblN0cmVldE1hcCcsXG4gIHByaW9yaXR5OiAxMDAwLFxuICBvcHRpb25zOiB7XG4gICAgbWF4Wm9vbTogMTgsXG4gICAgbWluWm9vbTogMCxcbiAgICBhdHRyaWJ1dGlvbjpcbiAgICAgICcmY29weTs8YSBocmVmPVwiaHR0cDovL3d3dy5vcGVuc3RyZWV0bWFwLm9yZy9jb3B5cmlnaHRcIiByZWw9XCJub3JlZmVycmVyIG5vZm9sbG93XCI+T3BlblN0cmVldE1hcDwvYT4nLFxuICAgIG5vV3JhcDogZmFsc2VcbiAgfVxufTtcblxuZXhwb3J0IGNvbnN0IGRlZmF1bHRNYXBDb25maWc6IE1hcERlZmF1bHRDb25maWcgPSB7XG4gIGNlbnRlcjogWzUxLjIzNTQ0LCA2Ljc5NTk5XSwgLy8gRMO8c3NlbGRvcmZcbiAgem9vbUxldmVsOiAyXG59O1xuXG5leHBvcnQgY29uc3QgZGVmYXVsdEZpdEJvdW5kc09wdGlvbnM6IEwuRml0Qm91bmRzT3B0aW9ucyA9IHtcbiAgcGFkZGluZzogWzUwLCA1MF1cbn07XG5cbmV4cG9ydCB0eXBlIE1hcFN0YXR1c0J1dHRvbnNDb25maWcgPSBSZWNvcmQ8J3JlYWx0aW1lJywgeyBzaG93OiBib29sZWFuOyBkaXNhYmxlZD86IGJvb2xlYW4gfT47XG4iXX0=
@@ -218,6 +218,22 @@ export class MapService {
218
218
  const shiftWorld = (lngRevMin?.lng ?? 0) - (lngRevMax?.lng ?? 0) > 180;
219
219
  return latLngBounds(latLng(latMin?.lat, shiftWorld ? lngRevMin?.lng : lngMin?.lng), latLng(latMax?.lat, shiftWorld ? lngRevMax?.lng + 360 : lngMax?.lng));
220
220
  }
221
+ async getAssetsBounds(assets) {
222
+ const leaflet = await this.getLeaflet();
223
+ const bounds = leaflet.latLngBounds([]);
224
+ let hasValidPositions = false;
225
+ assets.forEach(asset => {
226
+ const position = asset.c8y_Position;
227
+ if (position && typeof position.lat === 'number' && typeof position.lng === 'number') {
228
+ bounds.extend([position.lat, position.lng]);
229
+ hasValidPositions = true;
230
+ }
231
+ });
232
+ if (!hasValidPositions || !bounds.isValid()) {
233
+ return;
234
+ }
235
+ return bounds;
236
+ }
221
237
  /**
222
238
  * Returns the cluster size for clustered maps. Counting the position MOs in a bounding
223
239
  * and if it reach a threshold, returning a [[ClusterSize]].
@@ -282,4 +298,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
282
298
  providedIn: 'root'
283
299
  }]
284
300
  }], ctorParameters: () => [{ type: i1.InventoryService }, { type: i2.OptionsService }, { type: i2.ServiceRegistry }] });
285
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFwLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9tYXAvbWFwLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzQyxPQUFPLEVBQWtCLGdCQUFnQixFQUF1QixNQUFNLGFBQWEsQ0FBQztBQUNwRixPQUFPLEVBQUUsY0FBYyxFQUFFLGVBQWUsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBR3RFLE9BQU8sRUFBRSxNQUFNLEVBQUUsWUFBWSxFQUFFLE1BQU0sU0FBUyxDQUFDO0FBQy9DLE9BQU8sRUFBRSxHQUFHLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFDaEMsT0FBTyxFQUFFLGFBQWEsRUFBRSxLQUFLLEVBQWMsRUFBRSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQzVELE9BQU8sRUFBRSxHQUFHLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNyQyxPQUFPLEVBQ0wsV0FBVyxFQUNYLFlBQVksRUFDWixnQkFBZ0IsRUFDaEIsbUJBQW1CLEVBRXBCLE1BQU0sYUFBYSxDQUFDOzs7O0FBS3JCLE1BQU0sT0FBTyxVQUFVO0lBQ3JCOzs7O09BSUc7SUFDSCxNQUFNLENBQUMsU0FBUyxDQUFDLE1BQTZCO1FBQzVDLElBQUksQ0FBQyxNQUFNLENBQUMsc0JBQXNCLEVBQUUsQ0FBQztZQUNuQyxPQUFPLFlBQVksQ0FBQztRQUN0QixDQUFDO1FBQ0QsSUFBSSxNQUFNLENBQUMsc0JBQXNCLENBQUMsUUFBUSxFQUFFLENBQUM7WUFDM0MsT0FBTyxpQkFBaUIsQ0FBQztRQUMzQixDQUFDO1FBQ0QsSUFBSSxNQUFNLENBQUMsc0JBQXNCLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDeEMsT0FBTyxjQUFjLENBQUM7UUFDeEIsQ0FBQztRQUNELElBQUksTUFBTSxDQUFDLHNCQUFzQixDQUFDLEtBQUssRUFBRSxDQUFDO1lBQ3hDLE9BQU8sY0FBYyxDQUFD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dXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IElNYW5hZ2VkT2JqZWN0LCBJbnZlbnRvcnlTZXJ2aWNlLCBJUmVzdWx0TGlzdCwgUGFnaW5nIH0gZnJvbSAnQGM4eS9jbGllbnQnO1xuaW1wb3J0IHsgT3B0aW9uc1NlcnZpY2UsIFNlcnZpY2VSZWdpc3RyeSB9IGZyb20gJ0BjOHkvbmd4LWNvbXBvbmVudHMnO1xuaW1wb3J0IHR5cGUgeyBNYXBEZWZhdWx0Q29uZmlnLCBNYXBUaWxlTGF5ZXIgfSBmcm9tICdAYzh5L29wdGlvbnMnO1xuaW1wb3J0IHR5cGUgKiBhcyBMIGZyb20gJ2xlYWZsZXQnO1xuaW1wb3J0IHsgbGF0TG5nLCBsYXRMbmdCb3VuZHMgfSBmcm9tICdsZWFmbGV0JztcbmltcG9ydCB7IGdldCB9IGZyb20gJ2xvZGFzaC1lcyc7XG5pbXBvcnQgeyBjb21iaW5lTGF0ZXN0LCBkZWZlciwgT2JzZXJ2YWJsZSwgb2YgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IG1hcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7XG4gIENsdXN0ZXJTaXplLFxuICBkZWZhdWx0TGF5ZXIsXG4gIGRlZmF1bHRNYXBDb25maWcsXG4gIE1hcFRlbmFudE9wdGlvbktleXMsXG4gIFBvc2l0aW9uTWFuYWdlZE9iamVjdFxufSBmcm9tICcuL21hcC5tb2RlbCc7XG5cbkBJbmplY3RhYmxlKHtcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnXG59KVxuZXhwb3J0IGNsYXNzIE1hcFNlcnZpY2Uge1xuICAvKipcbiAgICogUmV0dXJucyBhc3NldCBpY29uIHN0YXR1cyBmb3IgaGlnaGVzdCBhbGFybSBzZXZlcml0eSBmb3VuZCBpbiBkZXZpY2Ugb2JqZWN0LlxuICAgKiBAcGFyYW0gZGV2aWNlIERldmljZSB0aGF0IGNvbnRhaW5zIGFsYXJtcyBpbmZvcm1hdGlvbi5cbiAgICogQHJldHVybnMgU3RhdHVzIHN0cmluZyBhY2NvcmRpbmcgdG8gYWxhcm0gc2V2ZXJpdHlcbiAgICovXG4gIHN0YXRpYyBnZXRTdGF0dXMoZGV2aWNlOiBQb3NpdGlvbk1hbmFnZWRPYmplY3QpIHtcbiAgICBpZiAoIWRldmljZS5jOHlfQWN0aXZlQWxhcm1zU3RhdHVzKSB7XG4gICAgICByZXR1cm4gJ3RleHQtbXV0ZWQnO1xuICAgIH1cbiAgICBpZiAoZGV2aWNlLmM4eV9BY3RpdmVBbGFybXNTdGF0dXMuY3JpdGljYWwpIHtcbiAgICAgIHJldHVybiAnc3RhdHVzIGNyaXRpY2FsJztcbiAgICB9XG4gICAgaWYgKGRldmljZS5jOHlfQWN0aXZlQWxhcm1zU3RhdHVzLm1ham9yKSB7XG4gICAgICByZXR1cm4gJ3N0YXR1cyBtYWpvcic7XG4gICAgfVxuICAgIGlmIChkZXZpY2UuYzh5X0FjdGl2ZUFsYXJtc1N0YXR1cy5taW5vcikge1xuICAgICAgcmV0dXJuICdzdGF0dXMgbWlub3InO1xuICAgIH1cbiAgICBpZiAoZGV2aWNlLmM4eV9BY3RpdmVBbGFybXNTdGF0dXMud2FybmluZykge1xuICAgICAgcmV0dXJuICdzdGF0dXMgd2FybmluZyc7XG4gICAgfVxuICAgIHJldHVybiAndGV4dC1tdXRlZCc7XG4gIH1cbiAgLyoqXG4gICAqIFRoZSBkZXZpY2VzIHRoYXQgYXJlIG1heGltYWwgZGlzcGxheWVkIGluIG9uZSBjbHVzdGVyLlxuICAgKi9cbiAgTUFYX0RFVklDRV9QRVJfQ0xVU1RFUiA9IDIwMDtcbiAgLyoqXG4gICAqIFRoZSBjb3VudCB1bnRpbCB0aGUgY2x1c3RlciBpcyBzaXplZC4gVGhlcmUgYXJlIGEgbWF4aW11bSBvZlxuICAgKiB0aHJlZSBjbHVzdGVyczogMSwgNCBvciAxNi5cbiAgICovXG4gIENMVVNURVJfTEVWRUxfVEhSRVNIT0xEID0gNTAwO1xuXG4gIC8qKlxuICAgKiBAaWdub3JlOiBPbmx5IERJLlxuICAgKi9cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBpbnZlbnRvcnk6IEludmVudG9yeVNlcnZpY2UsXG4gICAgcHJpdmF0ZSBvcHRpb25zOiBPcHRpb25zU2VydmljZSxcbiAgICBwcml2YXRlIHNlcnZpY2VSZWdpc3RyeTogU2VydmljZVJlZ2lzdHJ5XG4gICkge31cblxuICAvKipcbiAgICogUmV0dXJucyB0aGUgbGVhZmxldCBpbnN0YW5jZSB1c2VkIGJ5IHRoZSBjdW11bG9jaXR5IGNvcmUuXG4gICAqL1xuICBhc3luYyBnZXRMZWFmbGV0KCkge1xuICAgIGNvbnN0IG9yaWdpbmFsTGVmbGV0ID0gd2luZG93Lkw7XG4gICAgY29uc3QgYzh5TGVhZmxldEluc3RhbmNlID0gKGF3YWl0IGltcG9ydCgnbGVhZmxldCcpKS5kZWZhdWx0O1xuICAgIGM4eUxlYWZsZXRJbnN0YW5jZS5ub0NvbmZsaWN0KCk7XG4gICAgd2luZG93LkwgPSBvcmlnaW5hbExlZmxldDtcbiAgICByZXR1cm4gYzh5TGVhZmxldEluc3RhbmNlO1xuICB9XG5cbiAgLyoqXG4gICAqIFZlcmlmaWVzIGlmIGEgZ2l2ZW4gbWFuYWdlZCBvYmplY3QgaXMgYSBkZXZpY2Ugd2l0aCBhIHBvc2l0aW9uIGZyYWdtZW50LlxuICAgKiBAcGFyYW0gbW8gVGhlIGdpdmVuIG1hbmFnZWQgb2JqZWN0LlxuICAgKi9cbiAgaXNQb3NpdGlvbmVkRGV2aWNlKG1vOiBJTWFuYWdlZE9iamVjdCkge1xuICAgIHJldHVybiAhIShtbz8uYzh5X0lzRGV2aWNlICYmIHRoaXMuaGFzUG9zaXRpb24obW8pKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBWZXJpZmllcyBpZiBhIGdpdmVuIG1hbmFnZWQgb2JqZWN0IGhhcyBhIHBvc2l0aW9uIGZyYWdtZW50LlxuICAgKiBAcGFyYW0gbW8gVGhlIGdpdmVuIG1hbmFnZWQgb2JqZWN0LlxuICAgKi9cbiAgaGFzUG9zaXRpb24obW86IElNYW5hZ2VkT2JqZWN0KSB7XG4gICAgcmV0dXJuIG1vPy5jOHlfUG9zaXRpb247XG4gIH1cblxuICBnZXRNYXBUaWxlTGF5ZXJQcm92aWRlcnMoKTogQ3VtdWxvY2l0eVNlcnZpY2VSZWdpc3RyeS5NYXBUaWxlTGF5ZXJQcm92aWRlcltdIHtcbiAgICBjb25zdCBsYXllclByb3ZpZGVycyA9IHRoaXMuc2VydmljZVJlZ2lzdHJ5LmdldCgnbWFwVGlsZUxheWVySG9vaycpO1xuXG4gICAgcmV0dXJuIGxheWVyUHJvdmlkZXJzO1xuICB9XG5cbiAgZ2V0TWFwVGlsZUxheWVyc0Zyb21Ib29rZWRQcm92aWRlcnMkKFxuICAgIGxheWVyUHJvdmlkZXJzOiBDdW11bG9jaXR5U2VydmljZVJlZ2lzdHJ5Lk1hcFRpbGVMYXllclByb3ZpZGVyW11cbiAgKTogT2JzZXJ2YWJsZTxNYXBUaWxlTGF5ZXJbXT4ge1xuICAgIGlmICghbGF5ZXJQcm92aWRlcnMubGVuZ3RoKSB7XG4gICAgICByZXR1cm4gb2YoW10pO1xuICAgIH1cbiAgICBjb25zdCBsYXllcnMgPSBjb21iaW5lTGF0ZXN0KGxheWVyUHJvdmlkZXJzLm1hcChwcm92aWRlciA9PiBwcm92aWRlci5nZXRNYXBUaWxlTGF5ZXJzJCgpKSk7XG4gICAgcmV0dXJuIGxheWVycy5waXBlKG1hcChsYXllcnMgPT4gbGF5ZXJzLmZsYXQoKSkpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIGxheWVycyBhdmFpbGFibGUgaW4gdGhpcyBhcHBsaWNhdGlvbi5cbiAgICogTGF5ZXJzIGFyZSB0YWtlbiBmcm9tIHBsdWdpbnMgaW5zdGFsbGVkIHRvIHRoaXMgYXBwbGljYXRpb24uXG4gICAqIEluIGNhc2Ugbm9uZSBvZiB0aGUgcGx1Z2lucyBvdmVycmlkZSB0aGUgZGVmYXVsdCBsYXllcnMsIHRoZSBkZWZhdWx0IGxheWVycyBhcmUgYWxzbyBjb25zaWRlcmVkLlxuICAgKiBAcmV0dXJucyBUaGUgbGF5ZXJzLlxuICAgKi9cbiAgZ2V0TWFwVGlsZUxheWVycyQoKTogT2JzZXJ2YWJsZTxNYXBUaWxlTGF5ZXJbXT4ge1xuICAgIHJldHVybiBkZWZlcigoKSA9PiB7XG4gICAgICBjb25zdCBsYXllclByb3ZpZGVycyA9IHRoaXMuZ2V0TWFwVGlsZUxheWVyUHJvdmlkZXJzKCk7XG4gICAgICBjb25zdCBvdmVycmlkZXNEZWZhdWx0TGF5ZXIgPSBsYXllclByb3ZpZGVycy5zb21lKHByb3ZpZGVyID0+XG4gICAgICAgIHByb3ZpZGVyLm92ZXJyaWRlc0RlZmF1bHRMYXllcj8uKClcbiAgICAgICk7XG4gICAgICBjb25zdCBsYXllcnNGcm9tUHJvdmlkZXJzID0gZGVmZXIoKCkgPT5cbiAgICAgICAgdGhpcy5nZXRNYXBUaWxlTGF5ZXJzRnJvbUhvb2tlZFByb3ZpZGVycyQobGF5ZXJQcm92aWRlcnMpXG4gICAgICApO1xuICAgICAgaWYgKG92ZXJyaWRlc0RlZmF1bHRMYXllcikge1xuICAgICAgICByZXR1cm4gbGF5ZXJzRnJvbVByb3ZpZGVycztcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGNvbWJpbmVMYXRlc3QoW3RoaXMuZ2V0RGVmYXVsdExheWVycygpLCBsYXllcnNGcm9tUHJvdmlkZXJzXSkucGlwZShcbiAgICAgICAgbWFwKGxheWVycyA9PiB7XG4gICAgICAgICAgcmV0dXJuIGxheWVycy5mbGF0KCk7XG4gICAgICAgIH0pXG4gICAgICApO1xuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIGxheWVycyBjb25maWd1cmVkIGluIHRoZSBjdXJyZW50IHBsYXRmb3JtIHZpYSB0ZW5hbnQgb3B0aW9ucy5cbiAgICogQHJldHVybnMgVGhlIGxheWVycy4gSWYgbm90IHNldCBpbiB0ZW5hbnQgb3B0aW9ucyB0aGUgZGVmYXVsdCBsYXllcnMuXG4gICAqL1xuICBnZXREZWZhdWx0TGF5ZXJzKCk6IE9ic2VydmFibGU8TWFwVGlsZUxheWVyW10+IHtcbiAgICByZXR1cm4gdGhpcy5nZXRNYXBPcHRpb248TWFwVGlsZUxheWVyW10+KFxuICAgICAgTWFwVGVuYW50T3B0aW9uS2V5cy5MQVlFUlMsXG4gICAgICB0aGlzLm9wdGlvbnMubWFwTGF5ZXJzIHx8IFtkZWZhdWx0TGF5ZXJdXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBtYXAgY29uZmlndXJhdGlvbiBjb25maWd1cmVkIG9uIHRoZSB0ZW5hbnQuXG4gICAqIEByZXR1cm5zIFRoZSBjb25maWd1cmF0aW9uLiBJZiBub3Qgc2V0IGluIHRlbmFudCBvcHRpb25zIHRoZSBkZWZhdWx0IGNvbmZpZ3VyYXRpb24uXG4gICAqL1xuICBnZXREZWZhdWx0Q29uZmlnKCk6IE9ic2VydmFibGU8TWFwRGVmYXVsdENvbmZpZz4ge1xuICAgIHJldHVybiB0aGlzLmdldE1hcE9wdGlvbjxNYXBEZWZhdWx0Q29uZmlnPihcbiAgICAgIE1hcFRlbmFudE9wdGlvbktleXMuQ09ORklHLFxuICAgICAgdGhpcy5vcHRpb25zLm1hcENvbmZpZyB8fCBkZWZhdWx0TWFwQ29uZmlnXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDb3VudHMgYWxsIG1hbmFnZWQgb2JqZWN0cyBpbiBhIGdpdmVuIGJvdW5kIHdpdGggYSBjOHlfUG9zaXRpb24gZnJhZ21lbnQuXG4gICAqIEBwYXJhbSBib3VuZCBUaGUgbGF0IGxuZyBib3VuZCB0byByZXF1ZXN0IHRoZSBtYW5hZ2VkIG9iamVjdHMgZm9yLlxuICAgKiBAcGFyYW0gYnlHcm91cElkTU8gVGhlIGdyb3VwIG1hbmFnZWQgb2JqZWN0IG9mIHdoaWNoIGRpcmVjdCBjaGlsZHJlbiBzaG91bGQgYmUgc2VhcmNoZWQgZm9yLlxuICAgKiBAcmV0dXJucyBUaGUgbnVtYmVyIG9mIGFsbCBwb3NpdGlvbiBtYW5hZ2VkIG9iamVjdHMgaW4gdGhlIGdpdmVuIGJvdW5kIChhbmQgZ3JvdXApLlxuICAgKi9cbiAgYXN5bmMgZ2V0UG9zaXRpb25NT3NGcm9tQm91bmRDb3VudChcbiAgICBib3VuZDogTC5MYXRMbmdCb3VuZHMsXG4gICAgYnlHcm91cElkTU8/OiBJTWFuYWdlZE9iamVjdFxuICApOiBQcm9taXNlPG51bWJlcj4ge1xuICAgIHJldHVybiB0aGlzLmdldFBvc2l0aW9uTU9zRnJvbUJvdW5kKGJvdW5kLCBieUdyb3VwSWRNTywgdHJ1ZSkgYXMgUHJvbWlzZTxudW1iZXI+O1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgYWxsIG1hbmFnZWQgb2JqZWN0cyB3aXRoIGEgYzh5X1Bvc2l0aW9uIGZyYWdtZW50IGluIGEgY2VydGFpbiBib3VuZGFyeS5cbiAgICogQHBhcmFtIGJvdW5kIFRoZSBsYXQgbG5nIGJvdW5kIHRvIHJlcXVlc3QgdGhlIG1hbmFnZWQgb2JqZWN0cyBmb3IuXG4gICAqIEByZXR1cm5zIEFsbCBwb3NpdGlvbiBtYW5hZ2VkIG9iamVjdHMgaW4gdGhlIGdpdmVuIGJvdW5kLlxuICAgKi9cbiAgYXN5bmMgZ2V0UG9zaXRpb25NT3NGcm9tQm91bmQoYm91bmQ6IEwuTGF0TG5nQm91bmRzKTogUHJvbWlzZTxQb3NpdGlvbk1hbmFnZWRPYmplY3RbXT47XG4gIC8qKlxuICAgKiBSZXR1cm5zIGFsbCBtYW5hZ2VkIG9iamVjdHMgd2l0aCBhIGM4eV9Qb3NpdGlvbiBmcmFnbWVudCBpbiBhIGNlcnRhaW4gYm91bmRhcnkgdGhhdCBiZWxvbmdzIHRvIGEgY2VydGFpbiBncm91cC5cbiAgICogQHBhcmFtIGJvdW5kIFRoZSBsYXQgbG5nIGJvdW5kIHRvIHJlcXVlc3QgdGhlIG1hbmFnZWQgb2JqZWN0cyBmb3IuXG4gICAqIEBwYXJhbSBieUdyb3VwSWRNTyBUaGUgZ3JvdXAgbWFuYWdlZCBvYmplY3Qgb2Ygd2hpY2ggZGlyZWN0IGNoaWxkcmVuIHNob3VsZCBiZSBzZWFyY2hlZCBmb3IuXG4gICAqIEByZXR1cm5zIEFsbCBwb3NpdGlvbiBtYW5hZ2VkIG9iamVjdHMgaW4gdGhlIGdpdmVuIGJvdW5kIHRoYXQgYXJlIGNoaWxkcmVuIG9mIHRoZSBnaXZlbiBncm91cC5cbiAgICovXG4gIGFzeW5jIGdldFBvc2l0aW9uTU9zRnJvbUJvdW5kKFxuICAgIGJvdW5kOiBMLkxhdExuZ0JvdW5kcyxcbiAgICBieUdyb3VwSWRNTzogSU1hbmFnZWRPYmplY3RcbiAgKTogUHJvbWlzZTxQb3NpdGlvbk1hbmFnZWRPYmplY3RbXT47XG4gIC8qKlxuICAgKiBDb3VudHMgdGhlIG1hbmFnZWQgb2JqZWN0cyBpbiBhIGNlcnRhaW4gYm91bmRhcnkgYmVsb25naW5nIHRvIGEgZ3JvdXAuXG4gICAqIEBwYXJhbSBib3VuZCBUaGUgbGF0IGxuZyBib3VuZCB0byByZXF1ZXN0IHRoZSBtYW5hZ2VkIG9iamVjdHMgZm9yLlxuICAgKiBAcGFyYW0gYnlHcm91cElkTU8gVGhlIGdyb3VwIG1hbmFnZWQgb2JqZWN0IG9mIHdoaWNoIGRpcmVjdCBjaGlsZHJlbiBzaG91bGQgYmUgc2VhcmNoZWQgZm9yLlxuICAgKiBAcmV0dXJuIFRoZSBjb3VudCBvZiB0aGUgbWFuYWdlZCBvYmplY3RzLlxuICAgKi9cbiAgYXN5bmMgZ2V0UG9zaXRpb25NT3NGcm9tQm91bmQoXG4gICAgYm91bmQ6IEwuTGF0TG5nQm91bmRzLFxuICAgIGJ5R3JvdXBJZE1POiBJTWFuYWdlZE9iamVjdCxcbiAgICBjb3VudDogdHJ1ZVxuICApOiBQcm9taXNlPG51bWJlcj47XG4gIGFzeW5jIGdldFBvc2l0aW9uTU9zRnJvbUJvdW5kKFxuICAgIGJvdW5kOiBMLkxhdExuZ0JvdW5kcyxcbiAgICBieUdyb3VwSWRNTz86IElNYW5hZ2VkT2JqZWN0LFxuICAgIGNvdW50ID0gZmFsc2VcbiAgKTogUHJvbWlzZTxQb3NpdGlvbk1hbmFnZWRPYmplY3RbXSB8IG51bWJlcj4ge1xuICAgIGNvbnN0IHsgbGF0OiBsYXRNaW4sIGxuZzogbG5nTWluUmF3IH0gPSBib3VuZC5nZXRTb3V0aFdlc3QoKTtcbiAgICBjb25zdCB7IGxhdDogbGF0TWF4LCBsbmc6IGxuZ01heFJhdyB9ID0gYm91bmQuZ2V0Tm9ydGhFYXN0KCk7XG5cbiAgICBjb25zdCBsbmdNaW4gPSBsbmdNYXhSYXcgLSBsbmdNaW5SYXcgPiAzNjAgPyAtMTgwIDogdGhpcy5ub3JtYWxpemVMb25naXR1ZGUobG5nTWluUmF3KTtcbiAgICBjb25zdCBsbmdNYXggPSBsbmdNYXhSYXcgLSBsbmdNaW5SYXcgPiAzNjAgPyAxODAgOiB0aGlzLm5vcm1hbGl6ZUxvbmdpdHVkZShsbmdNYXhSYXcpO1xuXG4gICAgY29uc3QgYnlHcm91cElkRmlsdGVyID0gYnlHcm91cElkTU9cbiAgICAgID8gYChieWdyb3VwaWQoJHtieUdyb3VwSWRNTy5pZH0pIG9yIGlkIGVxICcke2J5R3JvdXBJZE1PLmlkfScpIGFuZCBgXG4gICAgICA6ICcnO1xuICAgIGxldCBib3VuZEZpbHRlciA9IGAkZmlsdGVyPSR7YnlHcm91cElkRmlsdGVyfWhhcyhjOHlfUG9zaXRpb24pIGFuZCBjOHlfUG9zaXRpb24ubGF0IGd0ICR7bGF0TWlufWQgYW5kIGM4eV9Qb3NpdGlvbi5sYXQgbHQgJHtsYXRNYXh9ZGA7XG5cbiAgICBpZiAobG5nTWluIDwgbG5nTWF4KSB7XG4gICAgICBib3VuZEZpbHRlciA9IGAke2JvdW5kRmlsdGVyfSBhbmQgYzh5X1Bvc2l0aW9uLmxuZyBndCAke2xuZ01pbn1kIGFuZCBjOHlfUG9zaXRpb24ubG5nIGx0ICR7bG5nTWF4fWRgO1xuICAgIH0gZWxzZSB7XG4gICAgICBib3VuZEZpbHRlciA9IGAke2JvdW5kRmlsdGVyfSBhbmQgKGM4eV9Qb3NpdGlvbi5sbmcgZ3QgJHtsbmdNaW59ZCBvciBjOHlfUG9zaXRpb24ubG5nIGx0ICR7bG5nTWF4fWQpYDtcbiAgICB9XG5cbiAgICBjb25zdCB7IHBhZ2luZywgZGF0YSB9ID0gYXdhaXQgdGhpcy5pbnZlbnRvcnkubGlzdCh7XG4gICAgICBwYWdlU2l6ZTogY291bnQgPyAxIDogdGhpcy5NQVhfREVWSUNFX1BFUl9DTFVTVEVSLFxuICAgICAgd2l0aFRvdGFsUGFnZXM6IGNvdW50LFxuICAgICAgcXVlcnk6IGJvdW5kRmlsdGVyXG4gICAgfSk7XG4gICAgaWYgKGNvdW50KSB7XG4gICAgICByZXR1cm4gcGFnaW5nLnRvdGFsUGFnZXM7XG4gICAgfVxuICAgIHJldHVybiBkYXRhLm1hcCgocG1vOiBQb3NpdGlvbk1hbmFnZWRPYmplY3QpID0+XG4gICAgICBib3VuZC5jb250YWlucyhsYXRMbmcocG1vLmM4eV9Qb3NpdGlvbi5sYXQsIHBtby5jOHlfUG9zaXRpb24ubG5nKSlcbiAgICAgICAgPyBwbW9cbiAgICAgICAgOiB0aGlzLmRlbm9ybWFsaXplUE1PKHBtbywgYm91bmQpXG4gICAgKSBhcyBQb3NpdGlvbk1hbmFnZWRPYmplY3RbXTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIGFsbCBkZXZpY2VzIHdpdGggYzh5X1Bvc2l0aW9uLlxuICAgKi9cbiAgYXN5bmMgZ2V0UG9zaXRpb25EZXZpY2VzKCk6IFByb21pc2U8UG9zaXRpb25NYW5hZ2VkT2JqZWN0W10+O1xuICAvKipcbiAgICogUmV0dXJucyBhbGwgZGV2aWNlcyB3aXRoIGM4eV9Qb3NpdGlvbi5cbiAgICogQHBhcmFtIHBhZ2VTaXplIFRoZSBwYWdlIHNpemUgdG8gcmV0dXJuLlxuICAgKi9cbiAgYXN5bmMgZ2V0UG9zaXRpb25EZXZpY2VzKHBhZ2VTaXplOiBudW1iZXIpOiBQcm9taXNlPFBvc2l0aW9uTWFuYWdlZE9iamVjdFtdPjtcbiAgLyoqXG4gICAqIFJldHVybnMgYWxsIGRldmljZXMgd2l0aCBjOHlfUG9zaXRpb24uXG4gICAqIEBwYXJhbSBwYWdlU2l6ZSBUaGUgcGFnZSBzaXplIHRvIHJldHVybi5cbiAgICogQHBhcmFtIGNvdW50IENvdW50aW5nIGlzIGRpc2FibGVkXG4gICAqL1xuICBhc3luYyBnZXRQb3NpdGlvbkRldmljZXMocGFnZVNpemU6IG51bWJlciwgY291bnQ6IGZhbHNlKTogUHJvbWlzZTxQb3NpdGlvbk1hbmFnZWRPYmplY3RbXT47XG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBudW1iZXIgb2YgYWxsIGRldmljZXMgd2l0aCBjOHlfUG9zaXRpb24uXG4gICAqIEBwYXJhbSBwYWdlU2l6ZSBUaGUgcGFnZSBzaXplIHRvIHJldHVybi5cbiAgICogQHBhcmFtIGNvdW50IENvdW50aW5nIGlzIGVuYWJsZWRcbiAgICovXG4gIGFzeW5jIGdldFBvc2l0aW9uRGV2aWNlcyhwYWdlU2l6ZTogbnVtYmVyLCBjb3VudDogdHJ1ZSk6IFByb21pc2U8bnVtYmVyPjtcbiAgLyoqXG4gICAqIFJldHVybnMgYWxsIGRldmljZXMgd2l0aCBjOHlfUG9zaXRpb24uXG4gICAqIEBwYXJhbSBwYWdlU2l6ZSBUaGUgcGFnZSBzaXplIHRvIHJldHVybi5cbiAgICogQHBhcmFtIGNvdW50IFN3aXRjaGVzIHRvIGNvdW50aW5nIG9ubHkuXG4gICAqIEByZXR1cm5zIEFsbCBkZXZpY2VzIG9yIHRoZSBkZXZpY2UgY291bnQgd2l0aCBhIGM4eV9Qb3NpdGlvbiBmcmFnbWVudC5cbiAgICovXG4gIGFzeW5jIGdldFBvc2l0aW9uRGV2aWNlcyhcbiAgICBwYWdlU2l6ZSA9IHRoaXMuTUFYX0RFVklDRV9QRVJfQ0xVU1RFUixcbiAgICBjb3VudD86IGJvb2xlYW5cbiAgKTogUHJvbWlzZTxudW1iZXIgfCBQb3NpdGlvbk1hbmFnZWRPYmplY3RbXT4ge1xuICAgIGNvbnN0IHsgcGFnaW5nLCBkYXRhIH0gPSBhd2FpdCB0aGlzLmludmVudG9yeS5saXN0KHtcbiAgICAgIHBhZ2VTaXplOiBjb3VudCA/IDEgOiBwYWdlU2l6ZSxcbiAgICAgIHdpdGhUb3RhbFBhZ2VzOiAhIWNvdW50LFxuICAgICAgcXVlcnk6ICckZmlsdGVyPWhhcyhjOHlfUG9zaXRpb24pIGFuZCBoYXMoYzh5X0lzRGV2aWNlKSdcbiAgICB9KTtcbiAgICBpZiAoY291bnQpIHtcbiAgICAgIHJldHVybiBwYWdpbmcudG90YWxQYWdlcztcbiAgICB9XG4gICAgcmV0dXJuIGRhdGEgYXMgUG9zaXRpb25NYW5hZ2VkT2JqZWN0W107XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyBhbGwgbWFuYWdlZCBvYmplY3Qgd2l0aCBhIGM4eV9Qb3NpdGlvbiBmcmFnbWVudC5cbiAgICogQHBhcmFtIGJ5R3JvdXBJZE1PIFRoZSBncm91cCBtYW5hZ2VkIG9iamVjdCBvZiB3aGljaCBkaXJlY3QgY2hpbGRyZW4gc2hvdWxkIGJlIHNlYXJjaGVkIGZvci5cbiAgICogQHBhcmFtIHBhZ2VTaXplIERlZmluZXMgaG93IG1hbnkgcmVzdWx0cyBzaG91bGQgYmUgcmV0dXJuZWQuXG4gICAqIEByZXR1cm5zIFRoZSBtYW5hZ2VkIG9iamVjdHMgd2l0aCBwb3NpdGlvbi5cbiAgICovXG4gIGFzeW5jIGdldEFsbFBvc2l0aW9uTU9zKFxuICAgIGJ5R3JvdXBJZE1PPzogSU1hbmFnZWRPYmplY3QsXG4gICAgcGFnZVNpemUgPSA1MDBcbiAgKTogUHJvbWlzZTxJUmVzdWx0TGlzdDxQb3NpdGlvbk1hbmFnZWRPYmplY3Q+PiB7XG4gICAgY29uc3QgZmlsdGVyOiB7IHBhZ2VTaXplOiBudW1iZXI7IHdpdGhUb3RhbFBhZ2VzOiBib29sZWFuOyBxdWVyeTogc3RyaW5nIH0gPSB7XG4gICAgICBwYWdlU2l6ZSxcbiAgICAgIHdpdGhUb3RhbFBhZ2VzOiB0cnVlLFxuICAgICAgcXVlcnk6ICdoYXMoYzh5X1Bvc2l0aW9uKSdcbiAgICB9O1xuXG4gICAgaWYgKGJ5R3JvdXBJZE1PKSB7XG4gICAgICBmaWx0ZXIucXVlcnkgPSBgJGZpbHRlcj0oYnlncm91cGlkKCR7YnlHcm91cElkTU8uaWR9KSBvciBpZCBlcSAnJHtieUdyb3VwSWRNTy5pZH0nKSBhbmQgaGFzKGM4eV9Qb3NpdGlvbilgO1xuICAgIH1cblxuICAgIGNvbnN0IHsgcGFnaW5nLCBkYXRhLCByZXMgfSA9IGF3YWl0IHRoaXMuaW52ZW50b3J5Lmxpc3QoZmlsdGVyKTtcblxuICAgIHJldHVybiB7XG4gICAgICByZXMsXG4gICAgICBwYWdpbmc6IHBhZ2luZyBhcyBQYWdpbmc8UG9zaXRpb25NYW5hZ2VkT2JqZWN0PixcbiAgICAgIGRhdGE6IGRhdGEgYXMgUG9zaXRpb25NYW5hZ2VkT2JqZWN0W11cbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIERldGVybWluZXMgYSByZWN0YW5ndWxhciBnZW9ncmFwaGljYWwgYXJlYSBiYXNlZCBvbiB0aGUgcG9zaXRpb25zIG9mIGFsbCBkZXZpY2VzLlxuICAgKlxuICAgKiBAcmV0dXJucyBBIFtbTGF0TG5nQm91bmRzXV0gb2JqZWN0IGZpdHRpbmcgYWxsIGRldmljZXMnIGdlbyBwb3NpdGlvbnMuXG4gICAqL1xuICBhc3luYyBnZXRBbGxEZXZpY2VzQm91bmRzKCk6IFByb21pc2U8TC5MYXRMbmdCb3VuZHM+IHtcbiAgICBjb25zdCBmaWx0ZXIgPSAoY29vcmQ6ICdsYXQnIHwgJ2xuZycsIG9yZGVyOiAnYXNjJyB8ICdkZXNjJykgPT4gKHtcbiAgICAgIHBhZ2VTaXplOiAxLFxuICAgICAgcTogYCRmaWx0ZXI9aGFzKGM4eV9Qb3NpdGlvbikgJG9yZGVyYnk9Yzh5X1Bvc2l0aW9uLiR7Y29vcmR9ICR7b3JkZXJ9YFxuICAgIH0pO1xuXG4gICAgY29uc3QgZmlsdGVyUmV2ZXJzZSA9IChvcDogJ2x0JyB8ICdndCcsIG9yZGVyOiAnYXNjJyB8ICdkZXNjJykgPT4gKHtcbiAgICAgIHBhZ2VTaXplOiAxLFxuICAgICAgcTogYCRmaWx0ZXI9aGFzKGM4eV9Qb3NpdGlvbikgYW5kIGM4eV9Qb3NpdGlvbi5sbmcgJHtvcH0gMGQgJG9yZGVyYnk9Yzh5X1Bvc2l0aW9uLmxuZyAke29yZGVyfWBcbiAgICB9KTtcblxuICAgIGNvbnN0IFtsYXRNaW4sIGxhdE1heCwgbG5nTWluLCBsbmdNYXgsIGxuZ1Jldk1pbiwgbG5nUmV2TWF4XSA9IGF3YWl0IFByb21pc2UuYWxsKFtcbiAgICAgIHRoaXMuaW52ZW50b3J5Lmxpc3QoZmlsdGVyKCdsYXQnLCAnYXNjJykpLFxuICAgICAgdGhpcy5pbnZlbnRvcnkubGlzdChmaWx0ZXIoJ2xhdCcsICdkZXNjJykpLFxuICAgICAgdGhpcy5pbnZlbnRvcnkubGlzdChmaWx0ZXIoJ2xuZycsICdhc2MnKSksXG4gICAgICB0aGlzLmludmVudG9yeS5saXN0KGZpbHRlcignbG5nJywgJ2Rlc2MnKSksXG4gICAgICB0aGlzLmludmVudG9yeS5saXN0KGZpbHRlclJldmVyc2UoJ2d0JywgJ2FzYycpKSxcbiAgICAgIHRoaXMuaW52ZW50b3J5Lmxpc3QoZmlsdGVyUmV2ZXJzZSgnbHQnLCAnZGVzYycpKVxuICAgIF0pLnRoZW4ocmVzdWx0ID0+IHJlc3VsdC5tYXAociA9PiBnZXQoci5kYXRhLCAnWzBdLmM4eV9Qb3NpdGlvbicpKSk7XG5cbiAgICBjb25zdCBzaGlmdFdvcmxkID0gKGxuZ1Jldk1pbj8ubG5nID8/IDApIC0gKGxuZ1Jldk1heD8ubG5nID8/IDApID4gMTgwO1xuXG4gICAgcmV0dXJuIGxhdExuZ0JvdW5kcyhcbiAgICAgIGxhdExuZyhsYXRNaW4/LmxhdCwgc2hpZnRXb3JsZCA/IGxuZ1Jldk1pbj8ubG5nIDogbG5nTWluPy5sbmcpLFxuICAgICAgbGF0TG5nKGxhdE1heD8ubGF0LCBzaGlmdFdvcmxkID8gbG5nUmV2TWF4Py5sbmcgKyAzNjAgOiBsbmdNYXg/LmxuZylcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIGNsdXN0ZXIgc2l6ZSBmb3IgY2x1c3RlcmVkIG1hcHMuIENvdW50aW5nIHRoZSBwb3NpdGlvbiBNT3MgaW4gYSBib3VuZGluZ1xuICAgKiBhbmQgaWYgaXQgcmVhY2ggYSB0aHJlc2hvbGQsIHJldHVybmluZyBhIFtbQ2x1c3RlclNpemVdXS5cbiAgICogQHBhcmFtIGJvdW5kIFRoZSBib3VuZGluZyB0byBjaGVjayBmb3IgY2x1c3RlciBzaXplLlxuICAgKiBAcmV0dXJucyBUaGUgY2x1c3RlciBzaXplLCBjYW4gYmUgTk9ORSwgRk9VUiBvciBTSVhURUVOLlxuICAgKi9cbiAgYXN5bmMgZ2V0Q2x1c3RlclNpemUoYm91bmQ6IEwuTGF0TG5nQm91bmRzKSB7XG4gICAgY29uc3QgY291bnQgPSBhd2FpdCB0aGlzLmdldFBvc2l0aW9uTU9zRnJvbUJvdW5kQ291bnQoYm91bmQpO1xuICAgIGxldCBjbHVzdGVyU2l6ZSA9IENsdXN0ZXJTaXplLk5PTkU7XG4gICAgaWYgKGNvdW50ID4gdGhpcy5DTFVTVEVSX0xFVkVMX1RIUkVTSE9MRCkge1xuICAgICAgY2x1c3RlclNpemUgPSBDbHVzdGVyU2l6ZS5TSVhURUVOO1xuICAgIH0gZWxzZSBpZiAoY291bnQgPiB0aGlzLk1BWF9ERVZJQ0VfUEVSX0NMVVNURVIpIHtcbiAgICAgIGNsdXN0ZXJTaXplID0gQ2x1c3RlclNpemUuRk9VUjtcbiAgICB9XG4gICAgcmV0dXJuIGNsdXN0ZXJTaXplO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRNYXBPcHRpb248VD4oa2V5OiBNYXBUZW5hbnRPcHRpb25LZXlzLCBkZWZhdWx0VmFsdWU6IFQpIHtcbiAgICByZXR1cm4gZGVmZXIoKCkgPT5cbiAgICAgIHRoaXMub3B0aW9ucy5nZXRUZW5hbnRPcHRpb248VCB8IHN0cmluZz4oJ2NvbmZpZ3VyYXRpb24nLCBrZXksIGRlZmF1bHRWYWx1ZSlcbiAgICApLnBpcGUoXG4gICAgICBtYXAoY29uZmlnID0+IHtcbiAgICAgICAgaWYgKHR5cGVvZiBjb25maWcgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgICAgIGBUaGUgdGVuYW50IG9wdGlvbiBmb3IgbWFwcyAnY29uZmlndXJhdGlvbi4ke2tleX0nIGlzIG5vdCBhIHZhbGlkIEpTT04gc3RydWN0dXJlLmBcbiAgICAgICAgICApO1xuICAgICAgICAgIHJldHVybiBkZWZhdWx0VmFsdWU7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGNvbmZpZztcbiAgICAgIH0pXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTaGlmdHMgbG9uZ2l0dWRlcyByZWNlaXZlZCBmcm9tIExlYWZsZXQuanMgaW4gdGhlIFstMTgwIC0gayozNjA7IDE4MCArIGsqMzYwXSByYW5nZXdoZW5cbiAgICogYG5vV3JhcGAgaXMgZW5hYmxlZCB0byB0aGUgWy0xODA7IDE4MF0gcmFuZ2UgZXhwZWN0ZWQgZm9yIHZhbHVlcyBvZiB0aGUgYzh5X1Bvc2l0aW9uIGZyYWdtZW50LlxuICAgKlxuICAgKiBAcGFyYW0gbG5nIExvbmdpdHVkZSB0byBzaGlmdC5cbiAgICogQHJldHVybnMgIExvbmdpdHVkZSB2YWx1ZSBpbiB0aGUgWy0xODA7IDE4MF0gcmFuZ2VcbiAgICovXG4gIHByaXZhdGUgbm9ybWFsaXplTG9uZ2l0dWRlKGxuZzogbnVtYmVyKTogbnVtYmVyIHtcbiAgICByZXR1cm4gKCgoKGxuZyArIDE4MCkgJSAzNjApICsgMzYwKSAlIDM2MCkgLSAxODA7XG4gIH1cblxuICAvKipcbiAgICogU2hpZnRzIGxvbmdpdHVkZXMgaW4gdGhlIFstMTgwOyAxODBdIHJhbmdlIGV4cGVjdGVkIGZvciB2YWx1ZXMgb2YgdGhlIGM4eV9Qb3NpdGlvbiBmcmFnbWVudFxuICAgKiB0aGUgdGhlIFstMTgwIC0gayozNjA7IDE4MCArIGsqMzYwXSByYW5nZSBleHBlY3RlZCBmcm9tIExlYWZsZXQuanMgd2hlbiBgbm9XcmFwYCBpcyBlbmFibGVkLlxuICAgKlxuICAgKiBUaGUgbWV0aG9kIG5haXZlbHkgYWRkcy9zdWJ0cmFjdHMgMzYwIGRlZ3JlZXMgdG8gdGhlIG9yaWdpbmFsIHZhbHVlIHVudGlsIHRoZSBwb3NpdGlvbiBmaXRzIGluIHRoZSBleHBlY3RlZCBib3VuZHMuXG4gICAqXG4gICAqIEBwYXJhbSBwbW8gQSBtYW5hZ2VkIG9iamVjdCB3aXRoIGEgYGM4eV9Qb3NpdGlvbmAgZnJhZ21lbnRcbiAgICogQHBhcmFtIGJvdW5kcyBUaGUgYm91bmRzIHdoZXJlIHRoZSBwb3NpdGlvbiBzaG91bGQgZml0XG4gICAqIEByZXR1cm5zIEEgbWFuYWdlZCBvYmplY3Qgd2hvc2UgYGM4eV9Qb3NpdGlvbmAncyBgbG5nYCB2YWx1ZXMgaGFzIGJlZW4gc2hpZnRlZCB0byBmaXQgaW4gYm91bmRzXG4gICAqL1xuICBwcml2YXRlIGRlbm9ybWFsaXplUE1PKFxuICAgIHBtbzogUG9zaXRpb25NYW5hZ2VkT2JqZWN0LFxuICAgIGJvdW5kczogTC5MYXRMbmdCb3VuZHNcbiAgKTogUG9zaXRpb25NYW5hZ2VkT2JqZWN0IHtcbiAgICBsZXQgeyBsbmcgfSA9IHBtby5jOHlfUG9zaXRpb247XG4gICAgY29uc3Qgc2hpZnRGYWN0b3IgPSBsbmcgPiBib3VuZHMuZ2V0RWFzdCgpID8gLTEgOiAxO1xuXG4gICAgd2hpbGUgKCFib3VuZHMuY29udGFpbnMobGF0TG5nKHBtby5jOHlfUG9zaXRpb24ubGF0LCBsbmcpKSkge1xuICAgICAgbG5nICs9IHNoaWZ0RmFjdG9yICogMzYwO1xuICAgIH1cblxuICAgIHBtby5jOHlfUG9zaXRpb24ubG5nID0gbG5nO1xuICAgIHJldHVybiBwbW87XG4gIH1cbn1cbiJdfQ==
301
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFwLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9tYXAvbWFwLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzQyxPQUFPLEVBQWtCLGdCQUFnQixFQUF1QixNQUFNLGFBQWEsQ0FBQztBQUNwRixPQUFPLEVBQUUsY0FBYyxFQUFFLGVBQWUsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBR3RFLE9BQU8sRUFBRSxNQUFNLEVBQUUsWUFBWSxFQUFFLE1BQU0sU0FBUyxDQUFDO0FBQy9DLE9BQU8sRUFBRSxHQUFHLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFDaEMsT0FBTyxFQUFFLGFBQWEsRUFBRSxLQUFLLEVBQWMsRUFBRSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQzVELE9BQU8sRUFBRSxHQUFHLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNyQyxPQUFPLEVBQ0wsV0FBVyxFQUNYLFlBQVksRUFDWixnQkFBZ0IsRUFDaEIsbUJBQW1CLEVBRXBCLE1BQU0sYUFBYSxDQUFDOzs7O0FBS3JCLE1BQU0sT0FBTyxVQUFVO0lBQ3JCOzs7O09BSUc7SUFDSCxNQUFNLENBQUMsU0FBUyxDQUFDLE1BQTZCO1FBQzVDLElBQUksQ0FBQyxNQUFNLENBQUMsc0JBQXNCLEVBQUUsQ0FBQztZQUNuQyxPQUFPLFlBQVksQ0FBQztRQUN0QixDQUFDO1FBQ0QsSUFBSSxNQUFNLENBQUMsc0JBQXNCLENBQUMsUUFBUSxFQUFFLENBQUM7WUFDM0MsT0FBTyxpQkFBaUIsQ0FBQztRQUMzQixDQUFDO1FBQ0QsSUFBSSxNQUFNLENBQUMsc0JBQXNCLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDeEMsT0FBTyxjQUFjLENBQUM7UUFDeEIsQ0FBQztRQUNELElBQUksTUFBTSxDQUFDLHNCQUFzQixDQUFDLEtBQUssRUFBRSxDQUFDO1lBQ3hDLE9BQU8sY0FBYyxDQUFD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LEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztJQUNuRCxDQUFDO0lBRUQ7Ozs7Ozs7OztPQVNHO0lBQ0ssY0FBYyxDQUNwQixHQUEwQixFQUMxQixNQUFzQjtRQUV0QixJQUFJLEVBQUUsR0FBRyxFQUFFLEdBQUcsR0FBRyxDQUFDLFlBQVksQ0FBQztRQUMvQixNQUFNLFdBQVcsR0FBRyxHQUFHLEdBQUcsTUFBTSxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBRXBELE9BQU8sQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsWUFBWSxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUM7WUFDM0QsR0FBRyxJQUFJLFdBQVcsR0FBRyxHQUFHLENBQUM7UUFDM0IsQ0FBQztRQUVELEdBQUcsQ0FBQyxZQUFZLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQztRQUMzQixPQUFPLEdBQUcsQ0FBQztJQUNiLENBQUM7K0dBaFpVLFVBQVU7bUhBQVYsVUFBVSxjQUZULE1BQU07OzRGQUVQLFVBQVU7a0JBSHRCLFVBQVU7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgSU1hbmFnZWRPYmplY3QsIEludmVudG9yeVNlcnZpY2UsIElSZXN1bHRMaXN0LCBQYWdpbmcgfSBmcm9tICdAYzh5L2NsaWVudCc7XG5pbXBvcnQgeyBPcHRpb25zU2VydmljZSwgU2VydmljZVJlZ2lzdHJ5IH0gZnJvbSAnQGM4eS9uZ3gtY29tcG9uZW50cyc7XG5pbXBvcnQgdHlwZSB7IE1hcERlZmF1bHRDb25maWcsIE1hcFRpbGVMYXllciB9IGZyb20gJ0BjOHkvb3B0aW9ucyc7XG5pbXBvcnQgdHlwZSAqIGFzIEwgZnJvbSAnbGVhZmxldCc7XG5pbXBvcnQgeyBsYXRMbmcsIGxhdExuZ0JvdW5kcyB9IGZyb20gJ2xlYWZsZXQnO1xuaW1wb3J0IHsgZ2V0IH0gZnJvbSAnbG9kYXNoLWVzJztcbmltcG9ydCB7IGNvbWJpbmVMYXRlc3QsIGRlZmVyLCBPYnNlcnZhYmxlLCBvZiB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgbWFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHtcbiAgQ2x1c3RlclNpemUsXG4gIGRlZmF1bHRMYXllcixcbiAgZGVmYXVsdE1hcENvbmZpZyxcbiAgTWFwVGVuYW50T3B0aW9uS2V5cyxcbiAgUG9zaXRpb25NYW5hZ2VkT2JqZWN0XG59IGZyb20gJy4vbWFwLm1vZGVsJztcblxuQEluamVjdGFibGUoe1xuICBwcm92aWRlZEluOiAncm9vdCdcbn0pXG5leHBvcnQgY2xhc3MgTWFwU2VydmljZSB7XG4gIC8qKlxuICAgKiBSZXR1cm5zIGFzc2V0IGljb24gc3RhdHVzIGZvciBoaWdoZXN0IGFsYXJtIHNldmVyaXR5IGZvdW5kIGluIGRldmljZSBvYmplY3QuXG4gICAqIEBwYXJhbSBkZXZpY2UgRGV2aWNlIHRoYXQgY29udGFpbnMgYWxhcm1zIGluZm9ybWF0aW9uLlxuICAgKiBAcmV0dXJucyBTdGF0dXMgc3RyaW5nIGFjY29yZGluZyB0byBhbGFybSBzZXZlcml0eVxuICAgKi9cbiAgc3RhdGljIGdldFN0YXR1cyhkZXZpY2U6IFBvc2l0aW9uTWFuYWdlZE9iamVjdCkge1xuICAgIGlmICghZGV2aWNlLmM4eV9BY3RpdmVBbGFybXNTdGF0dXMpIHtcbiAgICAgIHJldHVybiAndGV4dC1tdXRlZCc7XG4gICAgfVxuICAgIGlmIChkZXZpY2UuYzh5X0FjdGl2ZUFsYXJtc1N0YXR1cy5jcml0aWNhbCkge1xuICAgICAgcmV0dXJuICdzdGF0dXMgY3JpdGljYWwnO1xuICAgIH1cbiAgICBpZiAoZGV2aWNlLmM4eV9BY3RpdmVBbGFybXNTdGF0dXMubWFqb3IpIHtcbiAgICAgIHJldHVybiAnc3RhdHVzIG1ham9yJztcbiAgICB9XG4gICAgaWYgKGRldmljZS5jOHlfQWN0aXZlQWxhcm1zU3RhdHVzLm1pbm9yKSB7XG4gICAgICByZXR1cm4gJ3N0YXR1cyBtaW5vcic7XG4gICAgfVxuICAgIGlmIChkZXZpY2UuYzh5X0FjdGl2ZUFsYXJtc1N0YXR1cy53YXJuaW5nKSB7XG4gICAgICByZXR1cm4gJ3N0YXR1cyB3YXJuaW5nJztcbiAgICB9XG4gICAgcmV0dXJuICd0ZXh0LW11dGVkJztcbiAgfVxuICAvKipcbiAgICogVGhlIGRldmljZXMgdGhhdCBhcmUgbWF4aW1hbCBkaXNwbGF5ZWQgaW4gb25lIGNsdXN0ZXIuXG4gICAqL1xuICBNQVhfREVWSUNFX1BFUl9DTFVTVEVSID0gMjAwO1xuICAvKipcbiAgICogVGhlIGNvdW50IHVudGlsIHRoZSBjbHVzdGVyIGlzIHNpemVkLiBUaGVyZSBhcmUgYSBtYXhpbXVtIG9mXG4gICAqIHRocmVlIGNsdXN0ZXJzOiAxLCA0IG9yIDE2LlxuICAgKi9cbiAgQ0xVU1RFUl9MRVZFTF9USFJFU0hPTEQgPSA1MDA7XG5cbiAgLyoqXG4gICAqIEBpZ25vcmU6IE9ubHkgREkuXG4gICAqL1xuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIGludmVudG9yeTogSW52ZW50b3J5U2VydmljZSxcbiAgICBwcml2YXRlIG9wdGlvbnM6IE9wdGlvbnNTZXJ2aWNlLFxuICAgIHByaXZhdGUgc2VydmljZVJlZ2lzdHJ5OiBTZXJ2aWNlUmVnaXN0cnlcbiAgKSB7fVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBsZWFmbGV0IGluc3RhbmNlIHVzZWQgYnkgdGhlIGN1bXVsb2NpdHkgY29yZS5cbiAgICovXG4gIGFzeW5jIGdldExlYWZsZXQoKSB7XG4gICAgY29uc3Qgb3JpZ2luYWxMZWZsZXQgPSB3aW5kb3cuTDtcbiAgICBjb25zdCBjOHlMZWFmbGV0SW5zdGFuY2UgPSAoYXdhaXQgaW1wb3J0KCdsZWFmbGV0JykpLmRlZmF1bHQ7XG4gICAgYzh5TGVhZmxldEluc3RhbmNlLm5vQ29uZmxpY3QoKTtcbiAgICB3aW5kb3cuTCA9IG9yaWdpbmFsTGVmbGV0O1xuICAgIHJldHVybiBjOHlMZWFmbGV0SW5zdGFuY2U7XG4gIH1cblxuICAvKipcbiAgICogVmVyaWZpZXMgaWYgYSBnaXZlbiBtYW5hZ2VkIG9iamVjdCBpcyBhIGRldmljZSB3aXRoIGEgcG9zaXRpb24gZnJhZ21lbnQuXG4gICAqIEBwYXJhbSBtbyBUaGUgZ2l2ZW4gbWFuYWdlZCBvYmplY3QuXG4gICAqL1xuICBpc1Bvc2l0aW9uZWREZXZpY2UobW86IElNYW5hZ2VkT2JqZWN0KSB7XG4gICAgcmV0dXJuICEhKG1vPy5jOHlfSXNEZXZpY2UgJiYgdGhpcy5oYXNQb3NpdGlvbihtbykpO1xuICB9XG5cbiAgLyoqXG4gICAqIFZlcmlmaWVzIGlmIGEgZ2l2ZW4gbWFuYWdlZCBvYmplY3QgaGFzIGEgcG9zaXRpb24gZnJhZ21lbnQuXG4gICAqIEBwYXJhbSBtbyBUaGUgZ2l2ZW4gbWFuYWdlZCBvYmplY3QuXG4gICAqL1xuICBoYXNQb3NpdGlvbihtbzogSU1hbmFnZWRPYmplY3QpIHtcbiAgICByZXR1cm4gbW8/LmM4eV9Qb3NpdGlvbjtcbiAgfVxuXG4gIGdldE1hcFRpbGVMYXllclByb3ZpZGVycygpOiBDdW11bG9jaXR5U2VydmljZVJlZ2lzdHJ5Lk1hcFRpbGVMYXllclByb3ZpZGVyW10ge1xuICAgIGNvbnN0IGxheWVyUHJvdmlkZXJzID0gdGhpcy5zZXJ2aWNlUmVnaXN0cnkuZ2V0KCdtYXBUaWxlTGF5ZXJIb29rJyk7XG5cbiAgICByZXR1cm4gbGF5ZXJQcm92aWRlcnM7XG4gIH1cblxuICBnZXRNYXBUaWxlTGF5ZXJzRnJvbUhvb2tlZFByb3ZpZGVycyQoXG4gICAgbGF5ZXJQcm92aWRlcnM6IEN1bXVsb2NpdHlTZXJ2aWNlUmVnaXN0cnkuTWFwVGlsZUxheWVyUHJvdmlkZXJbXVxuICApOiBPYnNlcnZhYmxlPE1hcFRpbGVMYXllcltdPiB7XG4gICAgaWYgKCFsYXllclByb3ZpZGVycy5sZW5ndGgpIHtcbiAgICAgIHJldHVybiBvZihbXSk7XG4gICAgfVxuICAgIGNvbnN0IGxheWVycyA9IGNvbWJpbmVMYXRlc3QobGF5ZXJQcm92aWRlcnMubWFwKHByb3ZpZGVyID0+IHByb3ZpZGVyLmdldE1hcFRpbGVMYXllcnMkKCkpKTtcbiAgICByZXR1cm4gbGF5ZXJzLnBpcGUobWFwKGxheWVycyA9PiBsYXllcnMuZmxhdCgpKSk7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyB0aGUgbGF5ZXJzIGF2YWlsYWJsZSBpbiB0aGlzIGFwcGxpY2F0aW9uLlxuICAgKiBMYXllcnMgYXJlIHRha2VuIGZyb20gcGx1Z2lucyBpbnN0YWxsZWQgdG8gdGhpcyBhcHBsaWNhdGlvbi5cbiAgICogSW4gY2FzZSBub25lIG9mIHRoZSBwbHVnaW5zIG92ZXJyaWRlIHRoZSBkZWZhdWx0IGxheWVycywgdGhlIGRlZmF1bHQgbGF5ZXJzIGFyZSBhbHNvIGNvbnNpZGVyZWQuXG4gICAqIEByZXR1cm5zIFRoZSBsYXllcnMuXG4gICAqL1xuICBnZXRNYXBUaWxlTGF5ZXJzJCgpOiBPYnNlcnZhYmxlPE1hcFRpbGVMYXllcltdPiB7XG4gICAgcmV0dXJuIGRlZmVyKCgpID0+IHtcbiAgICAgIGNvbnN0IGxheWVyUHJvdmlkZXJzID0gdGhpcy5nZXRNYXBUaWxlTGF5ZXJQcm92aWRlcnMoKTtcbiAgICAgIGNvbnN0IG92ZXJyaWRlc0RlZmF1bHRMYXllciA9IGxheWVyUHJvdmlkZXJzLnNvbWUocHJvdmlkZXIgPT5cbiAgICAgICAgcHJvdmlkZXIub3ZlcnJpZGVzRGVmYXVsdExheWVyPy4oKVxuICAgICAgKTtcbiAgICAgIGNvbnN0IGxheWVyc0Zyb21Qcm92aWRlcnMgPSBkZWZlcigoKSA9PlxuICAgICAgICB0aGlzLmdldE1hcFRpbGVMYXllcnNGcm9tSG9va2VkUHJvdmlkZXJzJChsYXllclByb3ZpZGVycylcbiAgICAgICk7XG4gICAgICBpZiAob3ZlcnJpZGVzRGVmYXVsdExheWVyKSB7XG4gICAgICAgIHJldHVybiBsYXllcnNGcm9tUHJvdmlkZXJzO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gY29tYmluZUxhdGVzdChbdGhpcy5nZXREZWZhdWx0TGF5ZXJzKCksIGxheWVyc0Zyb21Qcm92aWRlcnNdKS5waXBlKFxuICAgICAgICBtYXAobGF5ZXJzID0+IHtcbiAgICAgICAgICByZXR1cm4gbGF5ZXJzLmZsYXQoKTtcbiAgICAgICAgfSlcbiAgICAgICk7XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyB0aGUgbGF5ZXJzIGNvbmZpZ3VyZWQgaW4gdGhlIGN1cnJlbnQgcGxhdGZvcm0gdmlhIHRlbmFudCBvcHRpb25zLlxuICAgKiBAcmV0dXJucyBUaGUgbGF5ZXJzLiBJZiBub3Qgc2V0IGluIHRlbmFudCBvcHRpb25zIHRoZSBkZWZhdWx0IGxheWVycy5cbiAgICovXG4gIGdldERlZmF1bHRMYXllcnMoKTogT2JzZXJ2YWJsZTxNYXBUaWxlTGF5ZXJbXT4ge1xuICAgIHJldHVybiB0aGlzLmdldE1hcE9wdGlvbjxNYXBUaWxlTGF5ZXJbXT4oXG4gICAgICBNYXBUZW5hbnRPcHRpb25LZXlzLkxBWUVSUyxcbiAgICAgIHRoaXMub3B0aW9ucy5tYXBMYXllcnMgfHwgW2RlZmF1bHRMYXllcl1cbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIG1hcCBjb25maWd1cmF0aW9uIGNvbmZpZ3VyZWQgb24gdGhlIHRlbmFudC5cbiAgICogQHJldHVybnMgVGhlIGNvbmZpZ3VyYXRpb24uIElmIG5vdCBzZXQgaW4gdGVuYW50IG9wdGlvbnMgdGhlIGRlZmF1bHQgY29uZmlndXJhdGlvbi5cbiAgICovXG4gIGdldERlZmF1bHRDb25maWcoKTogT2JzZXJ2YWJsZTxNYXBEZWZhdWx0Q29uZmlnPiB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0TWFwT3B0aW9uPE1hcERlZmF1bHRDb25maWc+KFxuICAgICAgTWFwVGVuYW50T3B0aW9uS2V5cy5DT05GSUcsXG4gICAgICB0aGlzLm9wdGlvbnMubWFwQ29uZmlnIHx8IGRlZmF1bHRNYXBDb25maWdcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIENvdW50cyBhbGwgbWFuYWdlZCBvYmplY3RzIGluIGEgZ2l2ZW4gYm91bmQgd2l0aCBhIGM4eV9Qb3NpdGlvbiBmcmFnbWVudC5cbiAgICogQHBhcmFtIGJvdW5kIFRoZSBsYXQgbG5nIGJvdW5kIHRvIHJlcXVlc3QgdGhlIG1hbmFnZWQgb2JqZWN0cyBmb3IuXG4gICAqIEBwYXJhbSBieUdyb3VwSWRNTyBUaGUgZ3JvdXAgbWFuYWdlZCBvYmplY3Qgb2Ygd2hpY2ggZGlyZWN0IGNoaWxkcmVuIHNob3VsZCBiZSBzZWFyY2hlZCBmb3IuXG4gICAqIEByZXR1cm5zIFRoZSBudW1iZXIgb2YgYWxsIHBvc2l0aW9uIG1hbmFnZWQgb2JqZWN0cyBpbiB0aGUgZ2l2ZW4gYm91bmQgKGFuZCBncm91cCkuXG4gICAqL1xuICBhc3luYyBnZXRQb3NpdGlvbk1Pc0Zyb21Cb3VuZENvdW50KFxuICAgIGJvdW5kOiBMLkxhdExuZ0JvdW5kcyxcbiAgICBieUdyb3VwSWRNTz86IElNYW5hZ2VkT2JqZWN0XG4gICk6IFByb21pc2U8bnVtYmVyPiB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UG9zaXRpb25NT3NGcm9tQm91bmQoYm91bmQsIGJ5R3JvdXBJZE1PLCB0cnVlKSBhcyBQcm9taXNlPG51bWJlcj47XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyBhbGwgbWFuYWdlZCBvYmplY3RzIHdpdGggYSBjOHlfUG9zaXRpb24gZnJhZ21lbnQgaW4gYSBjZXJ0YWluIGJvdW5kYXJ5LlxuICAgKiBAcGFyYW0gYm91bmQgVGhlIGxhdCBsbmcgYm91bmQgdG8gcmVxdWVzdCB0aGUgbWFuYWdlZCBvYmplY3RzIGZvci5cbiAgICogQHJldHVybnMgQWxsIHBvc2l0aW9uIG1hbmFnZWQgb2JqZWN0cyBpbiB0aGUgZ2l2ZW4gYm91bmQuXG4gICAqL1xuICBhc3luYyBnZXRQb3NpdGlvbk1Pc0Zyb21Cb3VuZChib3VuZDogTC5MYXRMbmdCb3VuZHMpOiBQcm9taXNlPFBvc2l0aW9uTWFuYWdlZE9iamVjdFtdPjtcbiAgLyoqXG4gICAqIFJldHVybnMgYWxsIG1hbmFnZWQgb2JqZWN0cyB3aXRoIGEgYzh5X1Bvc2l0aW9uIGZyYWdtZW50IGluIGEgY2VydGFpbiBib3VuZGFyeSB0aGF0IGJlbG9uZ3MgdG8gYSBjZXJ0YWluIGdyb3VwLlxuICAgKiBAcGFyYW0gYm91bmQgVGhlIGxhdCBsbmcgYm91bmQgdG8gcmVxdWVzdCB0aGUgbWFuYWdlZCBvYmplY3RzIGZvci5cbiAgICogQHBhcmFtIGJ5R3JvdXBJZE1PIFRoZSBncm91cCBtYW5hZ2VkIG9iamVjdCBvZiB3aGljaCBkaXJlY3QgY2hpbGRyZW4gc2hvdWxkIGJlIHNlYXJjaGVkIGZvci5cbiAgICogQHJldHVybnMgQWxsIHBvc2l0aW9uIG1hbmFnZWQgb2JqZWN0cyBpbiB0aGUgZ2l2ZW4gYm91bmQgdGhhdCBhcmUgY2hpbGRyZW4gb2YgdGhlIGdpdmVuIGdyb3VwLlxuICAgKi9cbiAgYXN5bmMgZ2V0UG9zaXRpb25NT3NGcm9tQm91bmQoXG4gICAgYm91bmQ6IEwuTGF0TG5nQm91bmRzLFxuICAgIGJ5R3JvdXBJZE1POiBJTWFuYWdlZE9iamVjdFxuICApOiBQcm9taXNlPFBvc2l0aW9uTWFuYWdlZE9iamVjdFtdPjtcbiAgLyoqXG4gICAqIENvdW50cyB0aGUgbWFuYWdlZCBvYmplY3RzIGluIGEgY2VydGFpbiBib3VuZGFyeSBiZWxvbmdpbmcgdG8gYSBncm91cC5cbiAgICogQHBhcmFtIGJvdW5kIFRoZSBsYXQgbG5nIGJvdW5kIHRvIHJlcXVlc3QgdGhlIG1hbmFnZWQgb2JqZWN0cyBmb3IuXG4gICAqIEBwYXJhbSBieUdyb3VwSWRNTyBUaGUgZ3JvdXAgbWFuYWdlZCBvYmplY3Qgb2Ygd2hpY2ggZGlyZWN0IGNoaWxkcmVuIHNob3VsZCBiZSBzZWFyY2hlZCBmb3IuXG4gICAqIEByZXR1cm4gVGhlIGNvdW50IG9mIHRoZSBtYW5hZ2VkIG9iamVjdHMuXG4gICAqL1xuICBhc3luYyBnZXRQb3NpdGlvbk1Pc0Zyb21Cb3VuZChcbiAgICBib3VuZDogTC5MYXRMbmdCb3VuZHMsXG4gICAgYnlHcm91cElkTU86IElNYW5hZ2VkT2JqZWN0LFxuICAgIGNvdW50OiB0cnVlXG4gICk6IFByb21pc2U8bnVtYmVyPjtcbiAgYXN5bmMgZ2V0UG9zaXRpb25NT3NGcm9tQm91bmQoXG4gICAgYm91bmQ6IEwuTGF0TG5nQm91bmRzLFxuICAgIGJ5R3JvdXBJZE1PPzogSU1hbmFnZWRPYmplY3QsXG4gICAgY291bnQgPSBmYWxzZVxuICApOiBQcm9taXNlPFBvc2l0aW9uTWFuYWdlZE9iamVjdFtdIHwgbnVtYmVyPiB7XG4gICAgY29uc3QgeyBsYXQ6IGxhdE1pbiwgbG5nOiBsbmdNaW5SYXcgfSA9IGJvdW5kLmdldFNvdXRoV2VzdCgpO1xuICAgIGNvbnN0IHsgbGF0OiBsYXRNYXgsIGxuZzogbG5nTWF4UmF3IH0gPSBib3VuZC5nZXROb3J0aEVhc3QoKTtcblxuICAgIGNvbnN0IGxuZ01pbiA9IGxuZ01heFJhdyAtIGxuZ01pblJhdyA+IDM2MCA/IC0xODAgOiB0aGlzLm5vcm1hbGl6ZUxvbmdpdHVkZShsbmdNaW5SYXcpO1xuICAgIGNvbnN0IGxuZ01heCA9IGxuZ01heFJhdyAtIGxuZ01pblJhdyA+IDM2MCA/IDE4MCA6IHRoaXMubm9ybWFsaXplTG9uZ2l0dWRlKGxuZ01heFJhdyk7XG5cbiAgICBjb25zdCBieUdyb3VwSWRGaWx0ZXIgPSBieUdyb3VwSWRNT1xuICAgICAgPyBgKGJ5Z3JvdXBpZCgke2J5R3JvdXBJZE1PLmlkfSkgb3IgaWQgZXEgJyR7YnlHcm91cElkTU8uaWR9JykgYW5kIGBcbiAgICAgIDogJyc7XG4gICAgbGV0IGJvdW5kRmlsdGVyID0gYCRmaWx0ZXI9JHtieUdyb3VwSWRGaWx0ZXJ9aGFzKGM4eV9Qb3NpdGlvbikgYW5kIGM4eV9Qb3NpdGlvbi5sYXQgZ3QgJHtsYXRNaW59ZCBhbmQgYzh5X1Bvc2l0aW9uLmxhdCBsdCAke2xhdE1heH1kYDtcblxuICAgIGlmIChsbmdNaW4gPCBsbmdNYXgpIHtcbiAgICAgIGJvdW5kRmlsdGVyID0gYCR7Ym91bmRGaWx0ZXJ9IGFuZCBjOHlfUG9zaXRpb24ubG5nIGd0ICR7bG5nTWlufWQgYW5kIGM4eV9Qb3NpdGlvbi5sbmcgbHQgJHtsbmdNYXh9ZGA7XG4gICAgfSBlbHNlIHtcbiAgICAgIGJvdW5kRmlsdGVyID0gYCR7Ym91bmRGaWx0ZXJ9IGFuZCAoYzh5X1Bvc2l0aW9uLmxuZyBndCAke2xuZ01pbn1kIG9yIGM4eV9Qb3NpdGlvbi5sbmcgbHQgJHtsbmdNYXh9ZClgO1xuICAgIH1cblxuICAgIGNvbnN0IHsgcGFnaW5nLCBkYXRhIH0gPSBhd2FpdCB0aGlzLmludmVudG9yeS5saXN0KHtcbiAgICAgIHBhZ2VTaXplOiBjb3VudCA/IDEgOiB0aGlzLk1BWF9ERVZJQ0VfUEVSX0NMVVNURVIsXG4gICAgICB3aXRoVG90YWxQYWdlczogY291bnQsXG4gICAgICBxdWVyeTogYm91bmRGaWx0ZXJcbiAgICB9KTtcbiAgICBpZiAoY291bnQpIHtcbiAgICAgIHJldHVybiBwYWdpbmcudG90YWxQYWdlcztcbiAgICB9XG4gICAgcmV0dXJuIGRhdGEubWFwKChwbW86IFBvc2l0aW9uTWFuYWdlZE9iamVjdCkgPT5cbiAgICAgIGJvdW5kLmNvbnRhaW5zKGxhdExuZyhwbW8uYzh5X1Bvc2l0aW9uLmxhdCwgcG1vLmM4eV9Qb3NpdGlvbi5sbmcpKVxuICAgICAgICA/IHBtb1xuICAgICAgICA6IHRoaXMuZGVub3JtYWxpemVQTU8ocG1vLCBib3VuZClcbiAgICApIGFzIFBvc2l0aW9uTWFuYWdlZE9iamVjdFtdO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgYWxsIGRldmljZXMgd2l0aCBjOHlfUG9zaXRpb24uXG4gICAqL1xuICBhc3luYyBnZXRQb3NpdGlvbkRldmljZXMoKTogUHJvbWlzZTxQb3NpdGlvbk1hbmFnZWRPYmplY3RbXT47XG4gIC8qKlxuICAgKiBSZXR1cm5zIGFsbCBkZXZpY2VzIHdpdGggYzh5X1Bvc2l0aW9uLlxuICAgKiBAcGFyYW0gcGFnZVNpemUgVGhlIHBhZ2Ugc2l6ZSB0byByZXR1cm4uXG4gICAqL1xuICBhc3luYyBnZXRQb3NpdGlvbkRldmljZXMocGFnZVNpemU6IG51bWJlcik6IFByb21pc2U8UG9zaXRpb25NYW5hZ2VkT2JqZWN0W10+O1xuICAvKipcbiAgICogUmV0dXJucyBhbGwgZGV2aWNlcyB3aXRoIGM4eV9Qb3NpdGlvbi5cbiAgICogQHBhcmFtIHBhZ2VTaXplIFRoZSBwYWdlIHNpemUgdG8gcmV0dXJuLlxuICAgKiBAcGFyYW0gY291bnQgQ291bnRpbmcgaXMgZGlzYWJsZWRcbiAgICovXG4gIGFzeW5jIGdldFBvc2l0aW9uRGV2aWNlcyhwYWdlU2l6ZTogbnVtYmVyLCBjb3VudDogZmFsc2UpOiBQcm9taXNlPFBvc2l0aW9uTWFuYWdlZE9iamVjdFtdPjtcbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIG51bWJlciBvZiBhbGwgZGV2aWNlcyB3aXRoIGM4eV9Qb3NpdGlvbi5cbiAgICogQHBhcmFtIHBhZ2VTaXplIFRoZSBwYWdlIHNpemUgdG8gcmV0dXJuLlxuICAgKiBAcGFyYW0gY291bnQgQ291bnRpbmcgaXMgZW5hYmxlZFxuICAgKi9cbiAgYXN5bmMgZ2V0UG9zaXRpb25EZXZpY2VzKHBhZ2VTaXplOiBudW1iZXIsIGNvdW50OiB0cnVlKTogUHJvbWlzZTxudW1iZXI+O1xuICAvKipcbiAgICogUmV0dXJucyBhbGwgZGV2aWNlcyB3aXRoIGM4eV9Qb3NpdGlvbi5cbiAgICogQHBhcmFtIHBhZ2VTaXplIFRoZSBwYWdlIHNpemUgdG8gcmV0dXJuLlxuICAgKiBAcGFyYW0gY291bnQgU3dpdGNoZXMgdG8gY291bnRpbmcgb25seS5cbiAgICogQHJldHVybnMgQWxsIGRldmljZXMgb3IgdGhlIGRldmljZSBjb3VudCB3aXRoIGEgYzh5X1Bvc2l0aW9uIGZyYWdtZW50LlxuICAgKi9cbiAgYXN5bmMgZ2V0UG9zaXRpb25EZXZpY2VzKFxuICAgIHBhZ2VTaXplID0gdGhpcy5NQVhfREVWSUNFX1BFUl9DTFVTVEVSLFxuICAgIGNvdW50PzogYm9vbGVhblxuICApOiBQcm9taXNlPG51bWJlciB8IFBvc2l0aW9uTWFuYWdlZE9iamVjdFtdPiB7XG4gICAgY29uc3QgeyBwYWdpbmcsIGRhdGEgfSA9IGF3YWl0IHRoaXMuaW52ZW50b3J5Lmxpc3Qoe1xuICAgICAgcGFnZVNpemU6IGNvdW50ID8gMSA6IHBhZ2VTaXplLFxuICAgICAgd2l0aFRvdGFsUGFnZXM6ICEhY291bnQsXG4gICAgICBxdWVyeTogJyRmaWx0ZXI9aGFzKGM4eV9Qb3NpdGlvbikgYW5kIGhhcyhjOHlfSXNEZXZpY2UpJ1xuICAgIH0pO1xuICAgIGlmIChjb3VudCkge1xuICAgICAgcmV0dXJuIHBhZ2luZy50b3RhbFBhZ2VzO1xuICAgIH1cbiAgICByZXR1cm4gZGF0YSBhcyBQb3NpdGlvbk1hbmFnZWRPYmplY3RbXTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIGFsbCBtYW5hZ2VkIG9iamVjdCB3aXRoIGEgYzh5X1Bvc2l0aW9uIGZyYWdtZW50LlxuICAgKiBAcGFyYW0gYnlHcm91cElkTU8gVGhlIGdyb3VwIG1hbmFnZWQgb2JqZWN0IG9mIHdoaWNoIGRpcmVjdCBjaGlsZHJlbiBzaG91bGQgYmUgc2VhcmNoZWQgZm9yLlxuICAgKiBAcGFyYW0gcGFnZVNpemUgRGVmaW5lcyBob3cgbWFueSByZXN1bHRzIHNob3VsZCBiZSByZXR1cm5lZC5cbiAgICogQHJldHVybnMgVGhlIG1hbmFnZWQgb2JqZWN0cyB3aXRoIHBvc2l0aW9uLlxuICAgKi9cbiAgYXN5bmMgZ2V0QWxsUG9zaXRpb25NT3MoXG4gICAgYnlHcm91cElkTU8/OiBJTWFuYWdlZE9iamVjdCxcbiAgICBwYWdlU2l6ZSA9IDUwMFxuICApOiBQcm9taXNlPElSZXN1bHRMaXN0PFBvc2l0aW9uTWFuYWdlZE9iamVjdD4+IHtcbiAgICBjb25zdCBmaWx0ZXI6IHsgcGFnZVNpemU6IG51bWJlcjsgd2l0aFRvdGFsUGFnZXM6IGJvb2xlYW47IHF1ZXJ5OiBzdHJpbmcgfSA9IHtcbiAgICAgIHBhZ2VTaXplLFxuICAgICAgd2l0aFRvdGFsUGFnZXM6IHRydWUsXG4gICAgICBxdWVyeTogJ2hhcyhjOHlfUG9zaXRpb24pJ1xuICAgIH07XG5cbiAgICBpZiAoYnlHcm91cElkTU8pIHtcbiAgICAgIGZpbHRlci5xdWVyeSA9IGAkZmlsdGVyPShieWdyb3VwaWQoJHtieUdyb3VwSWRNTy5pZH0pIG9yIGlkIGVxICcke2J5R3JvdXBJZE1PLmlkfScpIGFuZCBoYXMoYzh5X1Bvc2l0aW9uKWA7XG4gICAgfVxuXG4gICAgY29uc3QgeyBwYWdpbmcsIGRhdGEsIHJlcyB9ID0gYXdhaXQgdGhpcy5pbnZlbnRvcnkubGlzdChmaWx0ZXIpO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIHJlcyxcbiAgICAgIHBhZ2luZzogcGFnaW5nIGFzIFBhZ2luZzxQb3NpdGlvbk1hbmFnZWRPYmplY3Q+LFxuICAgICAgZGF0YTogZGF0YSBhcyBQb3NpdGlvbk1hbmFnZWRPYmplY3RbXVxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogRGV0ZXJtaW5lcyBhIHJlY3Rhbmd1bGFyIGdlb2dyYXBoaWNhbCBhcmVhIGJhc2VkIG9uIHRoZSBwb3NpdGlvbnMgb2YgYWxsIGRldmljZXMuXG4gICAqXG4gICAqIEByZXR1cm5zIEEgW1tMYXRMbmdCb3VuZHNdXSBvYmplY3QgZml0dGluZyBhbGwgZGV2aWNlcycgZ2VvIHBvc2l0aW9ucy5cbiAgICovXG4gIGFzeW5jIGdldEFsbERldmljZXNCb3VuZHMoKTogUHJvbWlzZTxMLkxhdExuZ0JvdW5kcz4ge1xuICAgIGNvbnN0IGZpbHRlciA9IChjb29yZDogJ2xhdCcgfCAnbG5nJywgb3JkZXI6ICdhc2MnIHwgJ2Rlc2MnKSA9PiAoe1xuICAgICAgcGFnZVNpemU6IDEsXG4gICAgICBxOiBgJGZpbHRlcj1oYXMoYzh5X1Bvc2l0aW9uKSAkb3JkZXJieT1jOHlfUG9zaXRpb24uJHtjb29yZH0gJHtvcmRlcn1gXG4gICAgfSk7XG5cbiAgICBjb25zdCBmaWx0ZXJSZXZlcnNlID0gKG9wOiAnbHQnIHwgJ2d0Jywgb3JkZXI6ICdhc2MnIHwgJ2Rlc2MnKSA9PiAoe1xuICAgICAgcGFnZVNpemU6IDEsXG4gICAgICBxOiBgJGZpbHRlcj1oYXMoYzh5X1Bvc2l0aW9uKSBhbmQgYzh5X1Bvc2l0aW9uLmxuZyAke29wfSAwZCAkb3JkZXJieT1jOHlfUG9zaXRpb24ubG5nICR7b3JkZXJ9YFxuICAgIH0pO1xuXG4gICAgY29uc3QgW2xhdE1pbiwgbGF0TWF4LCBsbmdNaW4sIGxuZ01heCwgbG5nUmV2TWluLCBsbmdSZXZNYXhdID0gYXdhaXQgUHJvbWlzZS5hbGwoW1xuICAgICAgdGhpcy5pbnZlbnRvcnkubGlzdChmaWx0ZXIoJ2xhdCcsICdhc2MnKSksXG4gICAgICB0aGlzLmludmVudG9yeS5saXN0KGZpbHRlcignbGF0JywgJ2Rlc2MnKSksXG4gICAgICB0aGlzLmludmVudG9yeS5saXN0KGZpbHRlcignbG5nJywgJ2FzYycpKSxcbiAgICAgIHRoaXMuaW52ZW50b3J5Lmxpc3QoZmlsdGVyKCdsbmcnLCAnZGVzYycpKSxcbiAgICAgIHRoaXMuaW52ZW50b3J5Lmxpc3QoZmlsdGVyUmV2ZXJzZSgnZ3QnLCAnYXNjJykpLFxuICAgICAgdGhpcy5pbnZlbnRvcnkubGlzdChmaWx0ZXJSZXZlcnNlKCdsdCcsICdkZXNjJykpXG4gICAgXSkudGhlbihyZXN1bHQgPT4gcmVzdWx0Lm1hcChyID0+IGdldChyLmRhdGEsICdbMF0uYzh5X1Bvc2l0aW9uJykpKTtcblxuICAgIGNvbnN0IHNoaWZ0V29ybGQgPSAobG5nUmV2TWluPy5sbmcgPz8gMCkgLSAobG5nUmV2TWF4Py5sbmcgPz8gMCkgPiAxODA7XG5cbiAgICByZXR1cm4gbGF0TG5nQm91bmRzKFxuICAgICAgbGF0TG5nKGxhdE1pbj8ubGF0LCBzaGlmdFdvcmxkID8gbG5nUmV2TWluPy5sbmcgOiBsbmdNaW4/LmxuZyksXG4gICAgICBsYXRMbmcobGF0TWF4Py5sYXQsIHNoaWZ0V29ybGQgPyBsbmdSZXZNYXg/LmxuZyArIDM2MCA6IGxuZ01heD8ubG5nKVxuICAgICk7XG4gIH1cblxuICBhc3luYyBnZXRBc3NldHNCb3VuZHMoYXNzZXRzOiBQb3NpdGlvbk1hbmFnZWRPYmplY3RbXSk6IFByb21pc2U8TC5MYXRMbmdCb3VuZHMgfCB1bmRlZmluZWQ+IHtcbiAgICBjb25zdCBsZWFmbGV0ID0gYXdhaXQgdGhpcy5nZXRMZWFmbGV0KCk7XG4gICAgY29uc3QgYm91bmRzID0gbGVhZmxldC5sYXRMbmdCb3VuZHMoW10pO1xuICAgIGxldCBoYXNWYWxpZFBvc2l0aW9ucyA9IGZhbHNlO1xuICAgIGFzc2V0cy5mb3JFYWNoKGFzc2V0ID0+IHtcbiAgICAgIGNvbnN0IHBvc2l0aW9uID0gYXNzZXQuYzh5X1Bvc2l0aW9uO1xuICAgICAgaWYgKHBvc2l0aW9uICYmIHR5cGVvZiBwb3NpdGlvbi5sYXQgPT09ICdudW1iZXInICYmIHR5cGVvZiBwb3NpdGlvbi5sbmcgPT09ICdudW1iZXInKSB7XG4gICAgICAgIGJvdW5kcy5leHRlbmQoW3Bvc2l0aW9uLmxhdCwgcG9zaXRpb24ubG5nXSk7XG4gICAgICAgIGhhc1ZhbGlkUG9zaXRpb25zID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICBpZiAoIWhhc1ZhbGlkUG9zaXRpb25zIHx8ICFib3VuZHMuaXNWYWxpZCgpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHJldHVybiBib3VuZHM7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyB0aGUgY2x1c3RlciBzaXplIGZvciBjbHVzdGVyZWQgbWFwcy4gQ291bnRpbmcgdGhlIHBvc2l0aW9uIE1PcyBpbiBhIGJvdW5kaW5nXG4gICAqIGFuZCBpZiBpdCByZWFjaCBhIHRocmVzaG9sZCwgcmV0dXJuaW5nIGEgW1tDbHVzdGVyU2l6ZV1dLlxuICAgKiBAcGFyYW0gYm91bmQgVGhlIGJvdW5kaW5nIHRvIGNoZWNrIGZvciBjbHVzdGVyIHNpemUuXG4gICAqIEByZXR1cm5zIFRoZSBjbHVzdGVyIHNpemUsIGNhbiBiZSBOT05FLCBGT1VSIG9yIFNJWFRFRU4uXG4gICAqL1xuICBhc3luYyBnZXRDbHVzdGVyU2l6ZShib3VuZDogTC5MYXRMbmdCb3VuZHMpIHtcbiAgICBjb25zdCBjb3VudCA9IGF3YWl0IHRoaXMuZ2V0UG9zaXRpb25NT3NGcm9tQm91bmRDb3VudChib3VuZCk7XG4gICAgbGV0IGNsdXN0ZXJTaXplID0gQ2x1c3RlclNpemUuTk9ORTtcbiAgICBpZiAoY291bnQgPiB0aGlzLkNMVVNURVJfTEVWRUxfVEhSRVNIT0xEKSB7XG4gICAgICBjbHVzdGVyU2l6ZSA9IENsdXN0ZXJTaXplLlNJWFRFRU47XG4gICAgfSBlbHNlIGlmIChjb3VudCA+IHRoaXMuTUFYX0RFVklDRV9QRVJfQ0xVU1RFUikge1xuICAgICAgY2x1c3RlclNpemUgPSBDbHVzdGVyU2l6ZS5GT1VSO1xuICAgIH1cbiAgICByZXR1cm4gY2x1c3RlclNpemU7XG4gIH1cblxuICBwcml2YXRlIGdldE1hcE9wdGlvbjxUPihrZXk6IE1hcFRlbmFudE9wdGlvbktleXMsIGRlZmF1bHRWYWx1ZTogVCkge1xuICAgIHJldHVybiBkZWZlcigoKSA9PlxuICAgICAgdGhpcy5vcHRpb25zLmdldFRlbmFudE9wdGlvbjxUIHwgc3RyaW5nPignY29uZmlndXJhdGlvbicsIGtleSwgZGVmYXVsdFZhbHVlKVxuICAgICkucGlwZShcbiAgICAgIG1hcChjb25maWcgPT4ge1xuICAgICAgICBpZiAodHlwZW9mIGNvbmZpZyA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICAgICAgYFRoZSB0ZW5hbnQgb3B0aW9uIGZvciBtYXBzICdjb25maWd1cmF0aW9uLiR7a2V5fScgaXMgbm90IGEgdmFsaWQgSlNPTiBzdHJ1Y3R1cmUuYFxuICAgICAgICAgICk7XG4gICAgICAgICAgcmV0dXJuIGRlZmF1bHRWYWx1ZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gY29uZmlnO1xuICAgICAgfSlcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIFNoaWZ0cyBsb25naXR1ZGVzIHJlY2VpdmVkIGZyb20gTGVhZmxldC5qcyBpbiB0aGUgWy0xODAgLSBrKjM2MDsgMTgwICsgayozNjBdIHJhbmdld2hlblxuICAgKiBgbm9XcmFwYCBpcyBlbmFibGVkIHRvIHRoZSBbLTE4MDsgMTgwXSByYW5nZSBleHBlY3RlZCBmb3IgdmFsdWVzIG9mIHRoZSBjOHlfUG9zaXRpb24gZnJhZ21lbnQuXG4gICAqXG4gICAqIEBwYXJhbSBsbmcgTG9uZ2l0dWRlIHRvIHNoaWZ0LlxuICAgKiBAcmV0dXJucyAgTG9uZ2l0dWRlIHZhbHVlIGluIHRoZSBbLTE4MDsgMTgwXSByYW5nZVxuICAgKi9cbiAgcHJpdmF0ZSBub3JtYWxpemVMb25naXR1ZGUobG5nOiBudW1iZXIpOiBudW1iZXIge1xuICAgIHJldHVybiAoKCgobG5nICsgMTgwKSAlIDM2MCkgKyAzNjApICUgMzYwKSAtIDE4MDtcbiAgfVxuXG4gIC8qKlxuICAgKiBTaGlmdHMgbG9uZ2l0dWRlcyBpbiB0aGUgWy0xODA7IDE4MF0gcmFuZ2UgZXhwZWN0ZWQgZm9yIHZhbHVlcyBvZiB0aGUgYzh5X1Bvc2l0aW9uIGZyYWdtZW50XG4gICAqIHRoZSB0aGUgWy0xODAgLSBrKjM2MDsgMTgwICsgayozNjBdIHJhbmdlIGV4cGVjdGVkIGZyb20gTGVhZmxldC5qcyB3aGVuIGBub1dyYXBgIGlzIGVuYWJsZWQuXG4gICAqXG4gICAqIFRoZSBtZXRob2QgbmFpdmVseSBhZGRzL3N1YnRyYWN0cyAzNjAgZGVncmVlcyB0byB0aGUgb3JpZ2luYWwgdmFsdWUgdW50aWwgdGhlIHBvc2l0aW9uIGZpdHMgaW4gdGhlIGV4cGVjdGVkIGJvdW5kcy5cbiAgICpcbiAgICogQHBhcmFtIHBtbyBBIG1hbmFnZWQgb2JqZWN0IHdpdGggYSBgYzh5X1Bvc2l0aW9uYCBmcmFnbWVudFxuICAgKiBAcGFyYW0gYm91bmRzIFRoZSBib3VuZHMgd2hlcmUgdGhlIHBvc2l0aW9uIHNob3VsZCBmaXRcbiAgICogQHJldHVybnMgQSBtYW5hZ2VkIG9iamVjdCB3aG9zZSBgYzh5X1Bvc2l0aW9uYCdzIGBsbmdgIHZhbHVlcyBoYXMgYmVlbiBzaGlmdGVkIHRvIGZpdCBpbiBib3VuZHNcbiAgICovXG4gIHByaXZhdGUgZGVub3JtYWxpemVQTU8oXG4gICAgcG1vOiBQb3NpdGlvbk1hbmFnZWRPYmplY3QsXG4gICAgYm91bmRzOiBMLkxhdExuZ0JvdW5kc1xuICApOiBQb3NpdGlvbk1hbmFnZWRPYmplY3Qge1xuICAgIGxldCB7IGxuZyB9ID0gcG1vLmM4eV9Qb3NpdGlvbjtcbiAgICBjb25zdCBzaGlmdEZhY3RvciA9IGxuZyA+IGJvdW5kcy5nZXRFYXN0KCkgPyAtMSA6IDE7XG5cbiAgICB3aGlsZSAoIWJvdW5kcy5jb250YWlucyhsYXRMbmcocG1vLmM4eV9Qb3NpdGlvbi5sYXQsIGxuZykpKSB7XG4gICAgICBsbmcgKz0gc2hpZnRGYWN0b3IgKiAzNjA7XG4gICAgfVxuXG4gICAgcG1vLmM4eV9Qb3NpdGlvbi5sbmcgPSBsbmc7XG4gICAgcmV0dXJuIHBtbztcbiAgfVxufVxuIl19