@c8y/ngx-components 1021.22.137 → 1021.22.139

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.
@@ -22,12 +22,12 @@ export class TrackingMarkerPopupComponent {
22
22
  }
23
23
  }
24
24
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: TrackingMarkerPopupComponent, deps: [{ token: i1.TrackingService }], target: i0.ɵɵFactoryTarget.Component }); }
25
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.9", type: TrackingMarkerPopupComponent, isStandalone: true, selector: "c8y-tracking-marker-popup", inputs: { context: "context" }, ngImport: i0, template: "<div class=\"map-marker\">\n <a\n class=\"text-truncate text-14 text-medium p-0 m-b-8 deviceLink\"\n [title]=\"context?.name\"\n *ngIf=\"isDevice\"\n [routerLink]=\"['/device/', context?.id]\"\n >\n {{ context?.name }}\n </a>\n <div\n class=\"m-b-8\"\n ng-if=\"lastUpdated\"\n >\n <p class=\"m-0\">{{ 'Position:' | translate }}</p>\n <span class=\"text-muted\">\n {{ context?.c8y_Position?.lat + ', ' + context?.c8y_Position?.lng }}\n </span>\n <p class=\"m-0 p-t-4\">{{ 'Date and time:' | translate }}</p>\n <span class=\"text-muted\">{{ date | c8yDate }}</span>\n </div>\n\n <ng-container *ngIf=\"isDevice\">\n <div class=\"d-flex a-i-center\">\n <label\n class=\"c8y-switch\"\n for=\"switch\"\n >\n <input\n id=\"switch\"\n type=\"checkbox\"\n [checked]=\"trackingService.trackVisible\"\n (change)=\"trackingService.toggleTrack()\"\n />\n <span></span>\n </label>\n <div class=\"description p-b-0\">\n {{ 'Show track' | translate }}\n </div>\n </div>\n </ng-container>\n</div>\n", dependencies: [{ kind: "ngmodule", type: CoreModule }, { kind: "pipe", type: i2.C8yTranslatePipe, name: "translate" }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "pipe", type: i2.DatePipe, name: "c8yDate" }, { kind: "ngmodule", type: RouterModule }, { kind: "directive", type: i4.RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "ngmodule", type: FormsModule }] }); }
25
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.9", type: TrackingMarkerPopupComponent, isStandalone: true, selector: "c8y-tracking-marker-popup", inputs: { context: "context" }, ngImport: i0, template: "<div class=\"map-marker\">\n @if (isDevice) {\n <a\n class=\"text-truncate text-14 text-medium p-0 m-b-8 deviceLink\"\n [title]=\"context?.name\"\n [routerLink]=\"['/device/', context?.id]\"\n >\n {{ context?.name }}\n </a>\n }\n <div\n class=\"m-b-8\"\n ng-if=\"lastUpdated\"\n >\n <p class=\"m-0\">{{ 'Position:' | translate }}</p>\n <span class=\"text-muted\">\n {{ context?.c8y_Position?.lat + ', ' + context?.c8y_Position?.lng }}\n </span>\n <p class=\"m-0 p-t-4\">{{ 'Date and time:' | translate }}</p>\n <span class=\"text-muted\">{{ date | c8yDate }}</span>\n </div>\n\n <ng-container *ngIf=\"isDevice\">\n <div class=\"d-flex a-i-center\">\n <label\n class=\"c8y-switch\"\n for=\"switch\"\n >\n <input\n id=\"switch\"\n type=\"checkbox\"\n [checked]=\"trackingService.trackVisible\"\n (change)=\"trackingService.toggleTrack()\"\n />\n <span></span>\n </label>\n <div class=\"description p-b-0\">\n {{ 'Show track' | translate }}\n </div>\n </div>\n </ng-container>\n</div>\n", dependencies: [{ kind: "ngmodule", type: CoreModule }, { kind: "pipe", type: i2.C8yTranslatePipe, name: "translate" }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "pipe", type: i2.DatePipe, name: "c8yDate" }, { kind: "ngmodule", type: RouterModule }, { kind: "directive", type: i4.RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "ngmodule", type: FormsModule }] }); }
26
26
  }
27
27
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: TrackingMarkerPopupComponent, decorators: [{
28
28
  type: Component,
29
- args: [{ standalone: true, selector: 'c8y-tracking-marker-popup', imports: [CoreModule, RouterModule, FormsModule], template: "<div class=\"map-marker\">\n <a\n class=\"text-truncate text-14 text-medium p-0 m-b-8 deviceLink\"\n [title]=\"context?.name\"\n *ngIf=\"isDevice\"\n [routerLink]=\"['/device/', context?.id]\"\n >\n {{ context?.name }}\n </a>\n <div\n class=\"m-b-8\"\n ng-if=\"lastUpdated\"\n >\n <p class=\"m-0\">{{ 'Position:' | translate }}</p>\n <span class=\"text-muted\">\n {{ context?.c8y_Position?.lat + ', ' + context?.c8y_Position?.lng }}\n </span>\n <p class=\"m-0 p-t-4\">{{ 'Date and time:' | translate }}</p>\n <span class=\"text-muted\">{{ date | c8yDate }}</span>\n </div>\n\n <ng-container *ngIf=\"isDevice\">\n <div class=\"d-flex a-i-center\">\n <label\n class=\"c8y-switch\"\n for=\"switch\"\n >\n <input\n id=\"switch\"\n type=\"checkbox\"\n [checked]=\"trackingService.trackVisible\"\n (change)=\"trackingService.toggleTrack()\"\n />\n <span></span>\n </label>\n <div class=\"description p-b-0\">\n {{ 'Show track' | translate }}\n </div>\n </div>\n </ng-container>\n</div>\n" }]
29
+ args: [{ standalone: true, selector: 'c8y-tracking-marker-popup', imports: [CoreModule, RouterModule, FormsModule], template: "<div class=\"map-marker\">\n @if (isDevice) {\n <a\n class=\"text-truncate text-14 text-medium p-0 m-b-8 deviceLink\"\n [title]=\"context?.name\"\n [routerLink]=\"['/device/', context?.id]\"\n >\n {{ context?.name }}\n </a>\n }\n <div\n class=\"m-b-8\"\n ng-if=\"lastUpdated\"\n >\n <p class=\"m-0\">{{ 'Position:' | translate }}</p>\n <span class=\"text-muted\">\n {{ context?.c8y_Position?.lat + ', ' + context?.c8y_Position?.lng }}\n </span>\n <p class=\"m-0 p-t-4\">{{ 'Date and time:' | translate }}</p>\n <span class=\"text-muted\">{{ date | c8yDate }}</span>\n </div>\n\n <ng-container *ngIf=\"isDevice\">\n <div class=\"d-flex a-i-center\">\n <label\n class=\"c8y-switch\"\n for=\"switch\"\n >\n <input\n id=\"switch\"\n type=\"checkbox\"\n [checked]=\"trackingService.trackVisible\"\n (change)=\"trackingService.toggleTrack()\"\n />\n <span></span>\n </label>\n <div class=\"description p-b-0\">\n {{ 'Show track' | translate }}\n </div>\n </div>\n </ng-container>\n</div>\n" }]
30
30
  }], ctorParameters: () => [{ type: i1.TrackingService }], propDecorators: { context: [{
31
31
  type: Input
32
32
  }] } });
33
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhY2tpbmctbWFya2VyLXBvcHVwLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3RyYWNraW5nL3RyYWNraW5nLW1hcmtlci1wb3B1cC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi90cmFja2luZy90cmFja2luZy1tYXJrZXItcG9wdXAuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQVUsTUFBTSxlQUFlLENBQUM7QUFDekQsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzdDLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUUvQyxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFFakQsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLG9CQUFvQixDQUFDOzs7Ozs7QUFRckQsTUFBTSxPQUFPLDRCQUE0QjtJQU92QyxZQUFtQixlQUFnQztRQUFoQyxvQkFBZSxHQUFmLGVBQWUsQ0FBaUI7SUFBRyxDQUFDO0lBRXZELEtBQUssQ0FBQyxRQUFRO1FBQ1osSUFBSSxDQUFDLFFBQVEsR0FBRyxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMscUJBQXFCLENBQUMsSUFBSSxDQUFDLE9BQTRCLENBQUMsQ0FBQztRQUMvRixJQUFJLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUNsQixJQUFJLENBQUMsSUFBSSxHQUFHLE1BQU0sSUFBSSxDQUFDLGVBQWUsQ0FBQyxvQkFBb0IsQ0FDekQsSUFBSSxDQUFDLE9BQWdDLENBQ3RDLENBQUM7UUFDSixDQUFDO2FBQU0sQ0FBQztZQUNOLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUM7UUFDaEMsQ0FBQztJQUNILENBQUM7OEdBbEJVLDRCQUE0QjtrR0FBNUIsNEJBQTRCLHFIQ2R6QyxxbkNBeUNBLDJDRDdCWSxVQUFVLHdQQUFFLFlBQVksK1FBQUUsV0FBVzs7MkZBRXBDLDRCQUE0QjtrQkFOeEMsU0FBUztpQ0FDSSxJQUFJLFlBQ04sMkJBQTJCLFdBRTVCLENBQUMsVUFBVSxFQUFFLFlBQVksRUFBRSxXQUFXLENBQUM7b0ZBSWhELE9BQU87c0JBRE4sS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgSW5wdXQsIE9uSW5pdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRm9ybXNNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBSb3V0ZXJNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuaW1wb3J0IHsgSUV2ZW50IH0gZnJvbSAnQGM4eS9jbGllbnQnO1xuaW1wb3J0IHsgQ29yZU1vZHVsZSB9IGZyb20gJ0BjOHkvbmd4LWNvbXBvbmVudHMnO1xuaW1wb3J0IHsgUG9zaXRpb25NYW5hZ2VkT2JqZWN0IH0gZnJvbSAnQGM4eS9uZ3gtY29tcG9uZW50cy9tYXAnO1xuaW1wb3J0IHsgVHJhY2tpbmdTZXJ2aWNlIH0gZnJvbSAnLi90cmFja2luZy5zZXJ2aWNlJztcblxuQENvbXBvbmVudCh7XG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIHNlbGVjdG9yOiAnYzh5LXRyYWNraW5nLW1hcmtlci1wb3B1cCcsXG4gIHRlbXBsYXRlVXJsOiAnLi90cmFja2luZy1tYXJrZXItcG9wdXAuY29tcG9uZW50Lmh0bWwnLFxuICBpbXBvcnRzOiBbQ29yZU1vZHVsZSwgUm91dGVyTW9kdWxlLCBGb3Jtc01vZHVsZV1cbn0pXG5leHBvcnQgY2xhc3MgVHJhY2tpbmdNYXJrZXJQb3B1cENvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gIEBJbnB1dCgpXG4gIGNvbnRleHQ6IFBvc2l0aW9uTWFuYWdlZE9iamVjdCB8IElFdmVudDtcblxuICBpc0RldmljZTogYm9vbGVhbjtcbiAgZGF0ZTogRGF0ZTtcblxuICBjb25zdHJ1Y3RvcihwdWJsaWMgdHJhY2tpbmdTZXJ2aWNlOiBUcmFja2luZ1NlcnZpY2UpIHt9XG5cbiAgYXN5bmMgbmdPbkluaXQoKSB7XG4gICAgdGhpcy5pc0RldmljZSA9ICF0aGlzLnRyYWNraW5nU2VydmljZS5pc0xvY2F0aW9uVXBkYXRlRXZlbnQodGhpcy5jb250ZXh0IGFzIHVua25vd24gYXMgSUV2ZW50KTtcbiAgICBpZiAodGhpcy5pc0RldmljZSkge1xuICAgICAgdGhpcy5kYXRlID0gYXdhaXQgdGhpcy50cmFja2luZ1NlcnZpY2UubGF0ZXN0UG9zaXRpb25VcGRhdGUoXG4gICAgICAgIHRoaXMuY29udGV4dCBhcyBQb3NpdGlvbk1hbmFnZWRPYmplY3RcbiAgICAgICk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuZGF0ZSA9IHRoaXMuY29udGV4dC50aW1lO1xuICAgIH1cbiAgfVxufVxuIiwiPGRpdiBjbGFzcz1cIm1hcC1tYXJrZXJcIj5cbiAgPGFcbiAgICBjbGFzcz1cInRleHQtdHJ1bmNhdGUgdGV4dC0xNCB0ZXh0LW1lZGl1bSBwLTAgbS1iLTggZGV2aWNlTGlua1wiXG4gICAgW3RpdGxlXT1cImNvbnRleHQ/Lm5hbWVcIlxuICAgICpuZ0lmPVwiaXNEZXZpY2VcIlxuICAgIFtyb3V0ZXJMaW5rXT1cIlsnL2RldmljZS8nLCBjb250ZXh0Py5pZF1cIlxuICA+XG4gICAge3sgY29udGV4dD8ubmFtZSB9fVxuICA8L2E+XG4gIDxkaXZcbiAgICBjbGFzcz1cIm0tYi04XCJcbiAgICBuZy1pZj1cImxhc3RVcGRhdGVkXCJcbiAgPlxuICAgIDxwIGNsYXNzPVwibS0wXCI+e3sgJ1Bvc2l0aW9uOicgfCB0cmFuc2xhdGUgfX08L3A+XG4gICAgPHNwYW4gY2xhc3M9XCJ0ZXh0LW11dGVkXCI+XG4gICAgICB7eyBjb250ZXh0Py5jOHlfUG9zaXRpb24/LmxhdCArICcsICcgKyBjb250ZXh0Py5jOHlfUG9zaXRpb24/LmxuZyB9fVxuICAgIDwvc3Bhbj5cbiAgICA8cCBjbGFzcz1cIm0tMCBwLXQtNFwiPnt7ICdEYXRlIGFuZCB0aW1lOicgfCB0cmFuc2xhdGUgfX08L3A+XG4gICAgPHNwYW4gY2xhc3M9XCJ0ZXh0LW11dGVkXCI+e3sgZGF0ZSB8IGM4eURhdGUgfX08L3NwYW4+XG4gIDwvZGl2PlxuXG4gIDxuZy1jb250YWluZXIgKm5nSWY9XCJpc0RldmljZVwiPlxuICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggYS1pLWNlbnRlclwiPlxuICAgICAgPGxhYmVsXG4gICAgICAgIGNsYXNzPVwiYzh5LXN3aXRjaFwiXG4gICAgICAgIGZvcj1cInN3aXRjaFwiXG4gICAgICA+XG4gICAgICAgIDxpbnB1dFxuICAgICAgICAgIGlkPVwic3dpdGNoXCJcbiAgICAgICAgICB0eXBlPVwiY2hlY2tib3hcIlxuICAgICAgICAgIFtjaGVja2VkXT1cInRyYWNraW5nU2VydmljZS50cmFja1Zpc2libGVcIlxuICAgICAgICAgIChjaGFuZ2UpPVwidHJhY2tpbmdTZXJ2aWNlLnRvZ2dsZVRyYWNrKClcIlxuICAgICAgICAvPlxuICAgICAgICA8c3Bhbj48L3NwYW4+XG4gICAgICA8L2xhYmVsPlxuICAgICAgPGRpdiBjbGFzcz1cImRlc2NyaXB0aW9uIHAtYi0wXCI+XG4gICAgICAgIHt7ICdTaG93IHRyYWNrJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIDwvbmctY29udGFpbmVyPlxuPC9kaXY+XG4iXX0=
33
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhY2tpbmctbWFya2VyLXBvcHVwLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3RyYWNraW5nL3RyYWNraW5nLW1hcmtlci1wb3B1cC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi90cmFja2luZy90cmFja2luZy1tYXJrZXItcG9wdXAuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQVUsTUFBTSxlQUFlLENBQUM7QUFDekQsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzdDLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUUvQyxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFFakQsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLG9CQUFvQixDQUFDOzs7Ozs7QUFRckQsTUFBTSxPQUFPLDRCQUE0QjtJQU92QyxZQUFtQixlQUFnQztRQUFoQyxvQkFBZSxHQUFmLGVBQWUsQ0FBaUI7SUFBRyxDQUFDO0lBRXZELEtBQUssQ0FBQyxRQUFRO1FBQ1osSUFBSSxDQUFDLFFBQVEsR0FBRyxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMscUJBQXFCLENBQUMsSUFBSSxDQUFDLE9BQTRCLENBQUMsQ0FBQztRQUMvRixJQUFJLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUNsQixJQUFJLENBQUMsSUFBSSxHQUFHLE1BQU0sSUFBSSxDQUFDLGVBQWUsQ0FBQyxvQkFBb0IsQ0FDekQsSUFBSSxDQUFDLE9BQWdDLENBQ3RDLENBQUM7UUFDSixDQUFDO2FBQU0sQ0FBQztZQUNOLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUM7UUFDaEMsQ0FBQztJQUNILENBQUM7OEdBbEJVLDRCQUE0QjtrR0FBNUIsNEJBQTRCLHFIQ2R6Qyxvb0NBMENBLDJDRDlCWSxVQUFVLHdQQUFFLFlBQVksK1FBQUUsV0FBVzs7MkZBRXBDLDRCQUE0QjtrQkFOeEMsU0FBUztpQ0FDSSxJQUFJLFlBQ04sMkJBQTJCLFdBRTVCLENBQUMsVUFBVSxFQUFFLFlBQVksRUFBRSxXQUFXLENBQUM7b0ZBSWhELE9BQU87c0JBRE4sS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgSW5wdXQsIE9uSW5pdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRm9ybXNNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBSb3V0ZXJNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuaW1wb3J0IHsgSUV2ZW50IH0gZnJvbSAnQGM4eS9jbGllbnQnO1xuaW1wb3J0IHsgQ29yZU1vZHVsZSB9IGZyb20gJ0BjOHkvbmd4LWNvbXBvbmVudHMnO1xuaW1wb3J0IHsgUG9zaXRpb25NYW5hZ2VkT2JqZWN0IH0gZnJvbSAnQGM4eS9uZ3gtY29tcG9uZW50cy9tYXAnO1xuaW1wb3J0IHsgVHJhY2tpbmdTZXJ2aWNlIH0gZnJvbSAnLi90cmFja2luZy5zZXJ2aWNlJztcblxuQENvbXBvbmVudCh7XG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIHNlbGVjdG9yOiAnYzh5LXRyYWNraW5nLW1hcmtlci1wb3B1cCcsXG4gIHRlbXBsYXRlVXJsOiAnLi90cmFja2luZy1tYXJrZXItcG9wdXAuY29tcG9uZW50Lmh0bWwnLFxuICBpbXBvcnRzOiBbQ29yZU1vZHVsZSwgUm91dGVyTW9kdWxlLCBGb3Jtc01vZHVsZV1cbn0pXG5leHBvcnQgY2xhc3MgVHJhY2tpbmdNYXJrZXJQb3B1cENvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gIEBJbnB1dCgpXG4gIGNvbnRleHQ6IFBvc2l0aW9uTWFuYWdlZE9iamVjdCB8IElFdmVudDtcblxuICBpc0RldmljZTogYm9vbGVhbjtcbiAgZGF0ZTogRGF0ZTtcblxuICBjb25zdHJ1Y3RvcihwdWJsaWMgdHJhY2tpbmdTZXJ2aWNlOiBUcmFja2luZ1NlcnZpY2UpIHt9XG5cbiAgYXN5bmMgbmdPbkluaXQoKSB7XG4gICAgdGhpcy5pc0RldmljZSA9ICF0aGlzLnRyYWNraW5nU2VydmljZS5pc0xvY2F0aW9uVXBkYXRlRXZlbnQodGhpcy5jb250ZXh0IGFzIHVua25vd24gYXMgSUV2ZW50KTtcbiAgICBpZiAodGhpcy5pc0RldmljZSkge1xuICAgICAgdGhpcy5kYXRlID0gYXdhaXQgdGhpcy50cmFja2luZ1NlcnZpY2UubGF0ZXN0UG9zaXRpb25VcGRhdGUoXG4gICAgICAgIHRoaXMuY29udGV4dCBhcyBQb3NpdGlvbk1hbmFnZWRPYmplY3RcbiAgICAgICk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuZGF0ZSA9IHRoaXMuY29udGV4dC50aW1lO1xuICAgIH1cbiAgfVxufVxuIiwiPGRpdiBjbGFzcz1cIm1hcC1tYXJrZXJcIj5cbiAgQGlmIChpc0RldmljZSkge1xuICAgIDxhXG4gICAgICBjbGFzcz1cInRleHQtdHJ1bmNhdGUgdGV4dC0xNCB0ZXh0LW1lZGl1bSBwLTAgbS1iLTggZGV2aWNlTGlua1wiXG4gICAgICBbdGl0bGVdPVwiY29udGV4dD8ubmFtZVwiXG4gICAgICBbcm91dGVyTGlua109XCJbJy9kZXZpY2UvJywgY29udGV4dD8uaWRdXCJcbiAgICA+XG4gICAgICB7eyBjb250ZXh0Py5uYW1lIH19XG4gICAgPC9hPlxuICB9XG4gIDxkaXZcbiAgICBjbGFzcz1cIm0tYi04XCJcbiAgICBuZy1pZj1cImxhc3RVcGRhdGVkXCJcbiAgPlxuICAgIDxwIGNsYXNzPVwibS0wXCI+e3sgJ1Bvc2l0aW9uOicgfCB0cmFuc2xhdGUgfX08L3A+XG4gICAgPHNwYW4gY2xhc3M9XCJ0ZXh0LW11dGVkXCI+XG4gICAgICB7eyBjb250ZXh0Py5jOHlfUG9zaXRpb24/LmxhdCArICcsICcgKyBjb250ZXh0Py5jOHlfUG9zaXRpb24/LmxuZyB9fVxuICAgIDwvc3Bhbj5cbiAgICA8cCBjbGFzcz1cIm0tMCBwLXQtNFwiPnt7ICdEYXRlIGFuZCB0aW1lOicgfCB0cmFuc2xhdGUgfX08L3A+XG4gICAgPHNwYW4gY2xhc3M9XCJ0ZXh0LW11dGVkXCI+e3sgZGF0ZSB8IGM4eURhdGUgfX08L3NwYW4+XG4gIDwvZGl2PlxuXG4gIDxuZy1jb250YWluZXIgKm5nSWY9XCJpc0RldmljZVwiPlxuICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggYS1pLWNlbnRlclwiPlxuICAgICAgPGxhYmVsXG4gICAgICAgIGNsYXNzPVwiYzh5LXN3aXRjaFwiXG4gICAgICAgIGZvcj1cInN3aXRjaFwiXG4gICAgICA+XG4gICAgICAgIDxpbnB1dFxuICAgICAgICAgIGlkPVwic3dpdGNoXCJcbiAgICAgICAgICB0eXBlPVwiY2hlY2tib3hcIlxuICAgICAgICAgIFtjaGVja2VkXT1cInRyYWNraW5nU2VydmljZS50cmFja1Zpc2libGVcIlxuICAgICAgICAgIChjaGFuZ2UpPVwidHJhY2tpbmdTZXJ2aWNlLnRvZ2dsZVRyYWNrKClcIlxuICAgICAgICAvPlxuICAgICAgICA8c3Bhbj48L3NwYW4+XG4gICAgICA8L2xhYmVsPlxuICAgICAgPGRpdiBjbGFzcz1cImRlc2NyaXB0aW9uIHAtYi0wXCI+XG4gICAgICAgIHt7ICdTaG93IHRyYWNrJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIDwvbmctY29udGFpbmVyPlxuPC9kaXY+XG4iXX0=
@@ -69,7 +69,7 @@ export class TrackingComponent {
69
69
  }
70
70
  }
71
71
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: TrackingComponent, deps: [{ token: i1.TrackingService }, { token: i2.EventRealtimeService }, { token: i2.ContextRouteService }, { token: i3.ActivatedRoute }], target: i0.ɵɵFactoryTarget.Component }); }
72
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.9", type: TrackingComponent, isStandalone: true, selector: "c8y-tracking", providers: [TrackingService, EventRealtimeService], viewQueries: [{ propertyName: "map", first: true, predicate: MapComponent, descendants: true }], ngImport: i0, template: "<c8y-action-bar-item\n [placement]=\"'right'\"\n [priority]=\"100\"\n>\n <c8y-realtime-btn\n [service]=\"realtime\"\n [disabled]=\"realtimeDisabled\"\n (onToggle)=\"togglePositionRealtime($event)\"\n ></c8y-realtime-btn>\n</c8y-action-bar-item>\n<c8y-action-bar-item\n [placement]=\"'right'\"\n [priority]=\"60\"\n>\n <c8y-time-interval\n [maxCustomDate]=\"maxDate\"\n [dateRangePickerConfig]=\"dateRangePickerConfig\"\n (interval)=\"service.setInterval($event); toggleRealtime($event)\"\n ></c8y-time-interval>\n</c8y-action-bar-item>\n\n<div class=\"card card--grid content-fullpage d-grid grid__col--8-4--md\">\n <div class=\"bg-white p-relative\">\n <c8y-map\n [config]=\"config\"\n [assets]=\"device\"\n [polyline$]=\"service.polyline$\"\n [polylineOptions]=\"{ color: 'darkblue' }\"\n >\n <div *c8yMapPopup=\"let context\">\n <c8y-tracking-marker-popup [context]=\"context\"></c8y-tracking-marker-popup>\n </div>\n </c8y-map>\n </div>\n\n <div class=\"d-flex d-col bg-inherit content-fullpage bg-gray-white\">\n <div class=\"card-header large-padding separator sticky-top\">\n <span\n class=\"card-title\"\n translate\n >\n Tracking events\n </span>\n </div>\n <div class=\"inner-scroll\">\n <c8y-list-group class=\"c8y-list__group--strip\">\n <ng-template\n c8yFor\n let-event\n [c8yForOf]=\"service.events$\"\n [c8yForPipe]=\"service.pipe\"\n [c8yForRealtime]=\"realtime\"\n [c8yForRealtimeOptions]=\"{ entityOrId: device }\"\n [c8yForLoadMore]=\"'hidden'\"\n [c8yForNotFound]=\"empty\"\n (c8yForLoadMoreComponent)=\"\n loadMoreComponent = $event; loadMoreComponent.useIntersection = false\n \"\n >\n <c8y-li\n class=\"pointer\"\n [ngClass]=\"{ 'text-primary text-bold': activeMarkers['p' + event?.id] }\"\n (click)=\"toggleMarker(event)\"\n [attr.data-cy]=\"'c8y-tracking--tracking-event-item-' + event?.id\"\n >\n <c8y-li-icon [ngClass]=\"{ 'text-primary': activeMarkers['p' + event?.id] }\">\n <i c8yIcon=\"c8y-location\"></i>\n </c8y-li-icon>\n <c8y-li-body>\n <div class=\"d-flex\">\n <span>\n {{ event.time | date: 'mediumDate' }}\n </span>\n <span class=\"m-l-auto\">\n {{ event.time | date: 'mediumTime' }}\n </span>\n </div>\n </c8y-li-body>\n </c8y-li>\n </ng-template>\n </c8y-list-group>\n </div>\n\n <!-- empty state -->\n <ng-template #empty>\n <c8y-ui-empty-state\n icon=\"c8y-location\"\n [title]=\"'No tracking events found.' | translate\"\n [subtitle]=\"'Select another time range.' | translate\"\n *ngIf=\"!service.hasEvents\"\n [horizontal]=\"true\"\n ></c8y-ui-empty-state>\n </ng-template>\n\n <div *ngIf=\"loadMoreComponent?.hasMore\">\n <button\n class=\"btn btn-link fit-w sticky-bottom separator-top\"\n [title]=\"'Load more' | translate\"\n type=\"button\"\n [disabled]=\"loadMoreComponent?.isLoading\"\n (click)=\"loadMoreComponent.loadMore()\"\n data-cy=\"c8y-tracking--load-more\"\n >\n {{ 'Load more' | translate }}\n </button>\n </div>\n\n <div class=\"card-footer separator\">\n <button\n class=\"btn btn-default\"\n [title]=\"'Deselect all markers' | translate\"\n type=\"button\"\n [disabled]=\"(activeMarkers | json) === '{}'\"\n (click)=\"map.clearMarkers('event'); activeMarkers = {}\"\n >\n {{ 'Deselect all markers' | translate }}\n </button>\n </div>\n </div>\n</div>\n", dependencies: [{ kind: "ngmodule", type: MapModule }, { kind: "component", type: i4.MapComponent, selector: "c8y-map", inputs: ["config", "assets", "polyline$", "polylineOptions"], outputs: ["onRealtimeUpdate", "onMove", "onMoveEnd", "onZoomStart", "onZoomEnd", "onMap", "onInit"] }, { kind: "directive", type: i4.MapPopupDirective, selector: "[c8yMapPopup]" }, { kind: "ngmodule", type: ActionBarModule }, { kind: "component", type: i2.ActionBarItemComponent, selector: "c8y-action-bar-item", inputs: ["placement", "priority", "itemClass", "injector", "groupId", "inGroupPriority"] }, { kind: "ngmodule", type: CoreModule }, { kind: "component", type: i2.EmptyStateComponent, selector: "c8y-ui-empty-state", inputs: ["icon", "title", "subtitle", "horizontal"] }, { kind: "directive", type: i2.IconDirective, selector: "[c8yIcon]", inputs: ["c8yIcon"] }, { kind: "pipe", type: i2.C8yTranslatePipe, name: "translate" }, { kind: "directive", type: i2.C8yTranslateDirective, selector: "[translate],[ngx-translate]" }, { kind: "directive", type: i5.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "pipe", type: i5.JsonPipe, name: "json" }, { kind: "pipe", type: i5.DatePipe, name: "date" }, { kind: "directive", type: i2.ForOfDirective, selector: "[c8yFor]", inputs: ["c8yForOf", "c8yForLoadMore", "c8yForPipe", "c8yForNotFound", "c8yForMaxIterations", "c8yForLoadingTemplate", "c8yForLoadNextLabel", "c8yForLoadingLabel", "c8yForRealtime", "c8yForRealtimeOptions", "c8yForComparator", "c8yForEnableVirtualScroll", "c8yForVirtualScrollElementSize", "c8yForVirtualScrollStrategy", "c8yForVirtualScrollContainerHeight"], outputs: ["c8yForCount", "c8yForChange", "c8yForLoadMoreComponent"] }, { kind: "component", type: i2.ListGroupComponent, selector: "c8y-list-group" }, { kind: "component", type: i2.ListItemComponent, selector: "c8y-list-item, c8y-li", inputs: ["active", "highlighted", "emptyActions", "dense", "collapsed", "selectable"], outputs: ["collapsedChange"] }, { kind: "component", type: i2.ListItemIconComponent, selector: "c8y-list-item-icon, c8y-li-icon", inputs: ["icon", "status"] }, { kind: "component", type: i2.ListItemBodyComponent, selector: "c8y-list-item-body, c8y-li-body", inputs: ["body"] }, { kind: "component", type: i2.RealtimeButtonComponent, selector: "c8y-realtime-btn", inputs: ["service", "label", "title", "disabled"], outputs: ["onToggle"] }, { kind: "component", type: i2.TimeIntervalComponent, selector: "c8y-time-interval", inputs: ["minCustomDate", "maxCustomDate", "dateRangePickerConfig", "selectedInterval"], outputs: ["interval"] }, { kind: "ngmodule", type: FormsModule }, { kind: "component", type: TrackingMarkerPopupComponent, selector: "c8y-tracking-marker-popup", inputs: ["context"] }] }); }
72
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.9", type: TrackingComponent, isStandalone: true, selector: "c8y-tracking", providers: [TrackingService, EventRealtimeService], viewQueries: [{ propertyName: "map", first: true, predicate: MapComponent, descendants: true }], ngImport: i0, template: "<c8y-action-bar-item\n [placement]=\"'right'\"\n [priority]=\"100\"\n>\n <c8y-realtime-btn\n [service]=\"realtime\"\n [disabled]=\"realtimeDisabled\"\n (onToggle)=\"togglePositionRealtime($event)\"\n ></c8y-realtime-btn>\n</c8y-action-bar-item>\n<c8y-action-bar-item\n [placement]=\"'right'\"\n [priority]=\"60\"\n>\n <c8y-time-interval\n [maxCustomDate]=\"maxDate\"\n [dateRangePickerConfig]=\"dateRangePickerConfig\"\n (interval)=\"service.setInterval($event); toggleRealtime($event)\"\n ></c8y-time-interval>\n</c8y-action-bar-item>\n\n<div class=\"card card--grid content-fullpage d-grid grid__col--8-4--md\">\n <div\n class=\"bg-white p-relative\"\n style=\"min-height: 30vh\"\n >\n <c8y-map\n [config]=\"config\"\n [assets]=\"device\"\n [polyline$]=\"service.polyline$\"\n [polylineOptions]=\"{ color: 'darkblue' }\"\n >\n <div *c8yMapPopup=\"let context\">\n <c8y-tracking-marker-popup [context]=\"context\"></c8y-tracking-marker-popup>\n </div>\n </c8y-map>\n </div>\n\n <div class=\"d-flex d-col bg-inherit content-fullpage bg-gray-white\">\n <div class=\"card-header large-padding separator sticky-top\">\n <span\n class=\"card-title\"\n translate\n >\n Tracking events\n </span>\n </div>\n <div class=\"inner-scroll\">\n <c8y-list-group class=\"c8y-list__group--strip\">\n <ng-template\n c8yFor\n let-event\n [c8yForOf]=\"service.events$\"\n [c8yForPipe]=\"service.pipe\"\n [c8yForRealtime]=\"realtime\"\n [c8yForRealtimeOptions]=\"{ entityOrId: device }\"\n [c8yForLoadMore]=\"'hidden'\"\n [c8yForNotFound]=\"empty\"\n (c8yForLoadMoreComponent)=\"\n loadMoreComponent = $event; loadMoreComponent.useIntersection = false\n \"\n >\n <c8y-li\n class=\"pointer\"\n [ngClass]=\"{ 'text-primary text-bold': activeMarkers['p' + event?.id] }\"\n (click)=\"toggleMarker(event)\"\n [attr.data-cy]=\"'c8y-tracking--tracking-event-item-' + event?.id\"\n >\n <c8y-li-icon [ngClass]=\"{ 'text-primary': activeMarkers['p' + event?.id] }\">\n <i c8yIcon=\"c8y-location\"></i>\n </c8y-li-icon>\n <c8y-li-body>\n <div class=\"d-flex\">\n <span>\n {{ event.time | date: 'mediumDate' }}\n </span>\n <span class=\"m-l-auto\">\n {{ event.time | date: 'mediumTime' }}\n </span>\n </div>\n </c8y-li-body>\n </c8y-li>\n </ng-template>\n </c8y-list-group>\n </div>\n\n <!-- empty state -->\n <ng-template #empty>\n @if (!service.hasEvents) {\n <c8y-ui-empty-state\n icon=\"c8y-location\"\n [title]=\"'No tracking events found.' | translate\"\n [subtitle]=\"'Select another time range.' | translate\"\n [horizontal]=\"true\"\n ></c8y-ui-empty-state>\n }\n </ng-template>\n\n @if (loadMoreComponent?.hasMore) {\n <div>\n <button\n class=\"btn btn-link fit-w sticky-bottom separator-top\"\n [title]=\"'Load more' | translate\"\n type=\"button\"\n [disabled]=\"loadMoreComponent?.isLoading\"\n (click)=\"loadMoreComponent.loadMore()\"\n data-cy=\"c8y-tracking--load-more\"\n >\n {{ 'Load more' | translate }}\n </button>\n </div>\n }\n\n <div class=\"card-footer separator\">\n <button\n class=\"btn btn-default\"\n [title]=\"'Deselect all markers' | translate\"\n type=\"button\"\n [disabled]=\"(activeMarkers | json) === '{}'\"\n (click)=\"map.clearMarkers('event'); activeMarkers = {}\"\n >\n {{ 'Deselect all markers' | translate }}\n </button>\n </div>\n </div>\n</div>\n", dependencies: [{ kind: "ngmodule", type: MapModule }, { kind: "component", type: i4.MapComponent, selector: "c8y-map", inputs: ["config", "assets", "polyline$", "polylineOptions"], outputs: ["onRealtimeUpdate", "onMove", "onMoveEnd", "onZoomStart", "onZoomEnd", "onMap", "onInit"] }, { kind: "directive", type: i4.MapPopupDirective, selector: "[c8yMapPopup]" }, { kind: "ngmodule", type: ActionBarModule }, { kind: "component", type: i2.ActionBarItemComponent, selector: "c8y-action-bar-item", inputs: ["placement", "priority", "itemClass", "injector", "groupId", "inGroupPriority"] }, { kind: "ngmodule", type: CoreModule }, { kind: "component", type: i2.EmptyStateComponent, selector: "c8y-ui-empty-state", inputs: ["icon", "title", "subtitle", "horizontal"] }, { kind: "directive", type: i2.IconDirective, selector: "[c8yIcon]", inputs: ["c8yIcon"] }, { kind: "pipe", type: i2.C8yTranslatePipe, name: "translate" }, { kind: "directive", type: i2.C8yTranslateDirective, selector: "[translate],[ngx-translate]" }, { kind: "directive", type: i5.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "pipe", type: i5.JsonPipe, name: "json" }, { kind: "pipe", type: i5.DatePipe, name: "date" }, { kind: "directive", type: i2.ForOfDirective, selector: "[c8yFor]", inputs: ["c8yForOf", "c8yForLoadMore", "c8yForPipe", "c8yForNotFound", "c8yForMaxIterations", "c8yForLoadingTemplate", "c8yForLoadNextLabel", "c8yForLoadingLabel", "c8yForRealtime", "c8yForRealtimeOptions", "c8yForComparator", "c8yForEnableVirtualScroll", "c8yForVirtualScrollElementSize", "c8yForVirtualScrollStrategy", "c8yForVirtualScrollContainerHeight"], outputs: ["c8yForCount", "c8yForChange", "c8yForLoadMoreComponent"] }, { kind: "component", type: i2.ListGroupComponent, selector: "c8y-list-group" }, { kind: "component", type: i2.ListItemComponent, selector: "c8y-list-item, c8y-li", inputs: ["active", "highlighted", "emptyActions", "dense", "collapsed", "selectable"], outputs: ["collapsedChange"] }, { kind: "component", type: i2.ListItemIconComponent, selector: "c8y-list-item-icon, c8y-li-icon", inputs: ["icon", "status"] }, { kind: "component", type: i2.ListItemBodyComponent, selector: "c8y-list-item-body, c8y-li-body", inputs: ["body"] }, { kind: "component", type: i2.RealtimeButtonComponent, selector: "c8y-realtime-btn", inputs: ["service", "label", "title", "disabled"], outputs: ["onToggle"] }, { kind: "component", type: i2.TimeIntervalComponent, selector: "c8y-time-interval", inputs: ["minCustomDate", "maxCustomDate", "dateRangePickerConfig", "selectedInterval"], outputs: ["interval"] }, { kind: "ngmodule", type: FormsModule }, { kind: "component", type: TrackingMarkerPopupComponent, selector: "c8y-tracking-marker-popup", inputs: ["context"] }] }); }
73
73
  }
74
74
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: TrackingComponent, decorators: [{
75
75
  type: Component,
@@ -80,9 +80,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.9", ngImpor
80
80
  TimeIntervalComponent,
81
81
  FormsModule,
82
82
  TrackingMarkerPopupComponent
83
- ], providers: [TrackingService, EventRealtimeService], selector: 'c8y-tracking', template: "<c8y-action-bar-item\n [placement]=\"'right'\"\n [priority]=\"100\"\n>\n <c8y-realtime-btn\n [service]=\"realtime\"\n [disabled]=\"realtimeDisabled\"\n (onToggle)=\"togglePositionRealtime($event)\"\n ></c8y-realtime-btn>\n</c8y-action-bar-item>\n<c8y-action-bar-item\n [placement]=\"'right'\"\n [priority]=\"60\"\n>\n <c8y-time-interval\n [maxCustomDate]=\"maxDate\"\n [dateRangePickerConfig]=\"dateRangePickerConfig\"\n (interval)=\"service.setInterval($event); toggleRealtime($event)\"\n ></c8y-time-interval>\n</c8y-action-bar-item>\n\n<div class=\"card card--grid content-fullpage d-grid grid__col--8-4--md\">\n <div class=\"bg-white p-relative\">\n <c8y-map\n [config]=\"config\"\n [assets]=\"device\"\n [polyline$]=\"service.polyline$\"\n [polylineOptions]=\"{ color: 'darkblue' }\"\n >\n <div *c8yMapPopup=\"let context\">\n <c8y-tracking-marker-popup [context]=\"context\"></c8y-tracking-marker-popup>\n </div>\n </c8y-map>\n </div>\n\n <div class=\"d-flex d-col bg-inherit content-fullpage bg-gray-white\">\n <div class=\"card-header large-padding separator sticky-top\">\n <span\n class=\"card-title\"\n translate\n >\n Tracking events\n </span>\n </div>\n <div class=\"inner-scroll\">\n <c8y-list-group class=\"c8y-list__group--strip\">\n <ng-template\n c8yFor\n let-event\n [c8yForOf]=\"service.events$\"\n [c8yForPipe]=\"service.pipe\"\n [c8yForRealtime]=\"realtime\"\n [c8yForRealtimeOptions]=\"{ entityOrId: device }\"\n [c8yForLoadMore]=\"'hidden'\"\n [c8yForNotFound]=\"empty\"\n (c8yForLoadMoreComponent)=\"\n loadMoreComponent = $event; loadMoreComponent.useIntersection = false\n \"\n >\n <c8y-li\n class=\"pointer\"\n [ngClass]=\"{ 'text-primary text-bold': activeMarkers['p' + event?.id] }\"\n (click)=\"toggleMarker(event)\"\n [attr.data-cy]=\"'c8y-tracking--tracking-event-item-' + event?.id\"\n >\n <c8y-li-icon [ngClass]=\"{ 'text-primary': activeMarkers['p' + event?.id] }\">\n <i c8yIcon=\"c8y-location\"></i>\n </c8y-li-icon>\n <c8y-li-body>\n <div class=\"d-flex\">\n <span>\n {{ event.time | date: 'mediumDate' }}\n </span>\n <span class=\"m-l-auto\">\n {{ event.time | date: 'mediumTime' }}\n </span>\n </div>\n </c8y-li-body>\n </c8y-li>\n </ng-template>\n </c8y-list-group>\n </div>\n\n <!-- empty state -->\n <ng-template #empty>\n <c8y-ui-empty-state\n icon=\"c8y-location\"\n [title]=\"'No tracking events found.' | translate\"\n [subtitle]=\"'Select another time range.' | translate\"\n *ngIf=\"!service.hasEvents\"\n [horizontal]=\"true\"\n ></c8y-ui-empty-state>\n </ng-template>\n\n <div *ngIf=\"loadMoreComponent?.hasMore\">\n <button\n class=\"btn btn-link fit-w sticky-bottom separator-top\"\n [title]=\"'Load more' | translate\"\n type=\"button\"\n [disabled]=\"loadMoreComponent?.isLoading\"\n (click)=\"loadMoreComponent.loadMore()\"\n data-cy=\"c8y-tracking--load-more\"\n >\n {{ 'Load more' | translate }}\n </button>\n </div>\n\n <div class=\"card-footer separator\">\n <button\n class=\"btn btn-default\"\n [title]=\"'Deselect all markers' | translate\"\n type=\"button\"\n [disabled]=\"(activeMarkers | json) === '{}'\"\n (click)=\"map.clearMarkers('event'); activeMarkers = {}\"\n >\n {{ 'Deselect all markers' | translate }}\n </button>\n </div>\n </div>\n</div>\n" }]
83
+ ], providers: [TrackingService, EventRealtimeService], selector: 'c8y-tracking', template: "<c8y-action-bar-item\n [placement]=\"'right'\"\n [priority]=\"100\"\n>\n <c8y-realtime-btn\n [service]=\"realtime\"\n [disabled]=\"realtimeDisabled\"\n (onToggle)=\"togglePositionRealtime($event)\"\n ></c8y-realtime-btn>\n</c8y-action-bar-item>\n<c8y-action-bar-item\n [placement]=\"'right'\"\n [priority]=\"60\"\n>\n <c8y-time-interval\n [maxCustomDate]=\"maxDate\"\n [dateRangePickerConfig]=\"dateRangePickerConfig\"\n (interval)=\"service.setInterval($event); toggleRealtime($event)\"\n ></c8y-time-interval>\n</c8y-action-bar-item>\n\n<div class=\"card card--grid content-fullpage d-grid grid__col--8-4--md\">\n <div\n class=\"bg-white p-relative\"\n style=\"min-height: 30vh\"\n >\n <c8y-map\n [config]=\"config\"\n [assets]=\"device\"\n [polyline$]=\"service.polyline$\"\n [polylineOptions]=\"{ color: 'darkblue' }\"\n >\n <div *c8yMapPopup=\"let context\">\n <c8y-tracking-marker-popup [context]=\"context\"></c8y-tracking-marker-popup>\n </div>\n </c8y-map>\n </div>\n\n <div class=\"d-flex d-col bg-inherit content-fullpage bg-gray-white\">\n <div class=\"card-header large-padding separator sticky-top\">\n <span\n class=\"card-title\"\n translate\n >\n Tracking events\n </span>\n </div>\n <div class=\"inner-scroll\">\n <c8y-list-group class=\"c8y-list__group--strip\">\n <ng-template\n c8yFor\n let-event\n [c8yForOf]=\"service.events$\"\n [c8yForPipe]=\"service.pipe\"\n [c8yForRealtime]=\"realtime\"\n [c8yForRealtimeOptions]=\"{ entityOrId: device }\"\n [c8yForLoadMore]=\"'hidden'\"\n [c8yForNotFound]=\"empty\"\n (c8yForLoadMoreComponent)=\"\n loadMoreComponent = $event; loadMoreComponent.useIntersection = false\n \"\n >\n <c8y-li\n class=\"pointer\"\n [ngClass]=\"{ 'text-primary text-bold': activeMarkers['p' + event?.id] }\"\n (click)=\"toggleMarker(event)\"\n [attr.data-cy]=\"'c8y-tracking--tracking-event-item-' + event?.id\"\n >\n <c8y-li-icon [ngClass]=\"{ 'text-primary': activeMarkers['p' + event?.id] }\">\n <i c8yIcon=\"c8y-location\"></i>\n </c8y-li-icon>\n <c8y-li-body>\n <div class=\"d-flex\">\n <span>\n {{ event.time | date: 'mediumDate' }}\n </span>\n <span class=\"m-l-auto\">\n {{ event.time | date: 'mediumTime' }}\n </span>\n </div>\n </c8y-li-body>\n </c8y-li>\n </ng-template>\n </c8y-list-group>\n </div>\n\n <!-- empty state -->\n <ng-template #empty>\n @if (!service.hasEvents) {\n <c8y-ui-empty-state\n icon=\"c8y-location\"\n [title]=\"'No tracking events found.' | translate\"\n [subtitle]=\"'Select another time range.' | translate\"\n [horizontal]=\"true\"\n ></c8y-ui-empty-state>\n }\n </ng-template>\n\n @if (loadMoreComponent?.hasMore) {\n <div>\n <button\n class=\"btn btn-link fit-w sticky-bottom separator-top\"\n [title]=\"'Load more' | translate\"\n type=\"button\"\n [disabled]=\"loadMoreComponent?.isLoading\"\n (click)=\"loadMoreComponent.loadMore()\"\n data-cy=\"c8y-tracking--load-more\"\n >\n {{ 'Load more' | translate }}\n </button>\n </div>\n }\n\n <div class=\"card-footer separator\">\n <button\n class=\"btn btn-default\"\n [title]=\"'Deselect all markers' | translate\"\n type=\"button\"\n [disabled]=\"(activeMarkers | json) === '{}'\"\n (click)=\"map.clearMarkers('event'); activeMarkers = {}\"\n >\n {{ 'Deselect all markers' | translate }}\n </button>\n </div>\n </div>\n</div>\n" }]
84
84
  }], ctorParameters: () => [{ type: i1.TrackingService }, { type: i2.EventRealtimeService }, { type: i2.ContextRouteService }, { type: i3.ActivatedRoute }], propDecorators: { map: [{
85
85
  type: ViewChild,
86
86
  args: [MapComponent]
87
87
  }] } });
88
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhY2tpbmcuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vdHJhY2tpbmcvdHJhY2tpbmcuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vdHJhY2tpbmcvdHJhY2tpbmcuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFpQixTQUFTLEVBQVUsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzVFLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM3QyxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFFakQsT0FBTyxFQUNMLGVBQWUsRUFDZixtQkFBbUIsRUFDbkIsVUFBVSxFQUVWLG9CQUFvQixFQUdwQixxQkFBcUIsRUFDdEIsTUFBTSxxQkFBcUIsQ0FBQztBQUM3QixPQUFPLEVBQUUsWUFBWSxFQUFhLFNBQVMsRUFBeUIsTUFBTSx5QkFBeUIsQ0FBQztBQUNwRyxPQUFPLEVBQUUsNEJBQTRCLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQztBQUNqRixPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sb0JBQW9CLENBQUM7Ozs7Ozs7QUFnQnJELE1BQU0sT0FBTyxpQkFBaUI7SUF5QjVCLFlBQ1MsT0FBd0IsRUFDeEIsUUFBOEIsRUFDN0IsbUJBQXdDLEVBQ3hDLGNBQThCO1FBSC9CLFlBQU8sR0FBUCxPQUFPLENBQWlCO1FBQ3hCLGFBQVEsR0FBUixRQUFRLENBQXNCO1FBQzdCLHdCQUFtQixHQUFuQixtQkFBbUIsQ0FBcUI7UUFDeEMsbUJBQWMsR0FBZCxjQUFjLENBQWdCO1FBekJ4QywwQkFBcUIsR0FBMEI7WUFDN0MsZ0JBQWdCLEVBQUUsSUFBSTtZQUN0QixpQkFBaUIsRUFBRSxJQUFJO1lBQ3ZCLHdCQUF3QixFQUFFLElBQUk7U0FDL0IsQ0FBQztRQUVGLFdBQU0sR0FBYztZQUNsQixRQUFRLEVBQUUsSUFBSTtZQUNkLE1BQU0sRUFB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IjpbImltcG9ydCB7IEFmdGVyVmlld0luaXQsIENvbXBvbmVudCwgT25Jbml0LCBWaWV3Q2hpbGQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEZvcm1zTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgQWN0aXZhdGVkUm91dGUgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuaW1wb3J0IHsgSUV2ZW50IH0gZnJvbSAnQGM4eS9jbGllbnQnO1xuaW1wb3J0IHtcbiAgQWN0aW9uQmFyTW9kdWxlLFxuICBDb250ZXh0Um91dGVTZXJ2aWNlLFxuICBDb3JlTW9kdWxlLFxuICBEYXRlUmFuZ2VQaWNrZXJDb25maWcsXG4gIEV2ZW50UmVhbHRpbWVTZXJ2aWNlLFxuICBMb2FkTW9yZUNvbXBvbmVudCxcbiAgVGltZUludGVydmFsLFxuICBUaW1lSW50ZXJ2YWxDb21wb25lbnRcbn0gZnJvbSAnQGM4eS9uZ3gtY29tcG9uZW50cyc7XG5pbXBvcnQgeyBNYXBDb21wb25lbnQsIE1hcENvbmZpZywgTWFwTW9kdWxlLCBQb3NpdGlvbk1hbmFnZWRPYmplY3QgfSBmcm9tICdAYzh5L25neC1jb21wb25lbnRzL21hcCc7XG5pbXBvcnQgeyBUcmFja2luZ01hcmtlclBvcHVwQ29tcG9uZW50IH0gZnJvbSAnLi90cmFja2luZy1tYXJrZXItcG9wdXAuY29tcG9uZW50JztcbmltcG9ydCB7IFRyYWNraW5nU2VydmljZSB9IGZyb20gJy4vdHJhY2tpbmcuc2VydmljZSc7XG5cbkBDb21wb25lbnQoe1xuICBzdGFuZGFsb25lOiB0cnVlLFxuICB0ZW1wbGF0ZVVybDogJy4vdHJhY2tpbmcuY29tcG9uZW50Lmh0bWwnLFxuICBpbXBvcnRzOiBbXG4gICAgTWFwTW9kdWxlLFxuICAgIEFjdGlvbkJhck1vZHVsZSxcbiAgICBDb3JlTW9kdWxlLFxuICAgIFRpbWVJbnRlcnZhbENvbXBvbmVudCxcbiAgICBGb3Jtc01vZHVsZSxcbiAgICBUcmFja2luZ01hcmtlclBvcHVwQ29tcG9uZW50XG4gIF0sXG4gIHByb3ZpZGVyczogW1RyYWNraW5nU2VydmljZSwgRXZlbnRSZWFsdGltZVNlcnZpY2VdLFxuICBzZWxlY3RvcjogJ2M4eS10cmFja2luZydcbn0pXG5leHBvcnQgY2xhc3MgVHJhY2tpbmdDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIEFmdGVyVmlld0luaXQge1xuICBAVmlld0NoaWxkKE1hcENvbXBvbmVudClcbiAgbWFwOiBNYXBDb21wb25lbnQ7XG5cbiAgZGF0ZVJhbmdlUGlja2VyQ29uZmlnOiBEYXRlUmFuZ2VQaWNrZXJDb25maWcgPSB7XG4gICAgYWRhcHRpdmVQb3NpdGlvbjogdHJ1ZSxcbiAgICBzaG93UHJldmlvdXNNb250aDogdHJ1ZSxcbiAgICBwcmV2ZW50Q2hhbmdlVG9OZXh0TW9udGg6IHRydWVcbiAgfTtcblxuICBjb25maWc6IE1hcENvbmZpZyA9IHtcbiAgICByZWFsdGltZTogdHJ1ZSxcbiAgICBmb2xsb3c6IGZhbHNlLFxuICAgIHpvb21MZXZlbDogMTIsXG4gICAgZml0Qm91bmRzT3B0aW9uczoge1xuICAgICAgcGFkZGluZzogWzUwLCA1MF1cbiAgICB9XG4gIH07XG5cbiAgbWF4RGF0ZSA9IG5ldyBEYXRlKCk7XG4gIGFjdGl2ZU1hcmtlcnM6IHsgW2tleTogc3RyaW5nXTogYm9vbGVhbiB9ID0ge307XG4gIHJlYWx0aW1lRGlzYWJsZWQgPSBmYWxzZTtcbiAgZGV2aWNlOiBQb3NpdGlvbk1hbmFnZWRPYmplY3Q7XG4gIGxvYWRNb3JlQ29tcG9uZW50OiBMb2FkTW9yZUNvbXBvbmVudDtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwdWJsaWMgc2VydmljZTogVHJhY2tpbmdTZXJ2aWNlLFxuICAgIHB1YmxpYyByZWFsdGltZTogRXZlbnRSZWFsdGltZVNlcnZpY2UsXG4gICAgcHJpdmF0ZSBjb250ZXh0Um91dGVTZXJ2aWNlOiBDb250ZXh0Um91dGVTZXJ2aWNlLFxuICAgIHByaXZhdGUgYWN0aXZhdGVkUm91dGU6IEFjdGl2YXRlZFJvdXRlXG4gICkge31cblxuICBhc3luYyBuZ09uSW5pdCgpIHtcbiAgICBjb25zdCB7IGNvbnRleHREYXRhIH0gPSB0aGlzLmNvbnRleHRSb3V0ZVNlcnZpY2UuZ2V0Q29udGV4dERhdGEodGhpcy5hY3RpdmF0ZWRSb3V0ZSk7XG4gICAgdGhpcy5kZXZpY2UgPSBjb250ZXh0RGF0YSBhcyBQb3NpdGlvbk1hbmFnZWRPYmplY3Q7XG4gIH1cblxuICBhc3luYyBuZ0FmdGVyVmlld0luaXQoKSB7XG4gICAgdGhpcy5zZXJ2aWNlLnNldERldmljZUlkKHRoaXMuZGV2aWNlLmlkKTtcbiAgICB0aGlzLnRvZ2dsZVBvc2l0aW9uUmVhbHRpbWUodGhpcy5yZWFsdGltZS5hY3RpdmUpO1xuICB9XG5cbiAgdG9nZ2xlTWFya2VyKGV2ZW50OiBJRXZlbnQpIHtcbiAgICBsZXQgbWFya2VyID0gdGhpcy5tYXAuZmluZE1hcmtlcihldmVudCk7XG5cbiAgICBpZiAobWFya2VyKSB7XG4gICAgICB0aGlzLm1hcC5yZW1vdmVNYXJrZXIobWFya2VyKTtcbiAgICAgIGRlbGV0ZSB0aGlzLmFjdGl2ZU1hcmtlcnNbYHAke2V2ZW50LmlkfWBdO1xuICAgIH0gZWxzZSB7XG4gICAgICBtYXJrZXIgPSB0aGlzLm1hcC5nZXRUcmFja2luZ01hcmtlcihldmVudCk7XG4gICAgICB0aGlzLm1hcC5hZGRNYXJrZXJUb01hcChtYXJrZXIpO1xuICAgICAgdGhpcy5hY3RpdmVNYXJrZXJzW2BwJHtldmVudC5pZH1gXSA9IHRydWU7XG4gICAgfVxuICB9XG5cbiAgdG9nZ2xlUG9zaXRpb25SZWFsdGltZShhY3RpdmU6IGJvb2xlYW4pIHtcbiAgICB0aGlzLmNvbmZpZyA9IHsgLi4udGhpcy5jb25maWcsIHJlYWx0aW1lOiBhY3RpdmUgfTtcbiAgfVxuXG4gIHRvZ2dsZVJlYWx0aW1lKGludGVydmFsOiBUaW1lSW50ZXJ2YWwpIHtcbiAgICBjb25zdCBjdXJyZW50VGltZUluUmFuZ2UgPSBEYXRlLm5vdygpIDw9IGludGVydmFsPy5kYXRlVG8/LmdldFRpbWUoKTtcbiAgICB0aGlzLnRvZ2dsZVBvc2l0aW9uUmVhbHRpbWUoY3VycmVudFRpbWVJblJhbmdlKTtcbiAgICB0aGlzLnJlYWx0aW1lRGlzYWJsZWQgPSAhY3VycmVudFRpbWVJblJhbmdlO1xuXG4gICAgaWYgKGN1cnJlbnRUaW1lSW5SYW5nZSkge1xuICAgICAgdGhpcy5yZWFsdGltZS5zdGFydCgpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnJlYWx0aW1lLnN0b3AoKTtcbiAgICB9XG4gIH1cbn1cbiIsIjxjOHktYWN0aW9uLWJhci1pdGVtXG4gIFtwbGFjZW1lbnRdPVwiJ3JpZ2h0J1wiXG4gIFtwcmlvcml0eV09XCIxMDBcIlxuPlxuICA8Yzh5LXJlYWx0aW1lLWJ0blxuICAgIFtzZXJ2aWNlXT1cInJlYWx0aW1lXCJcbiAgICBbZGlzYWJsZWRdPVwicmVhbHRpbWVEaXNhYmxlZFwiXG4gICAgKG9uVG9nZ2xlKT1cInRvZ2dsZVBvc2l0aW9uUmVhbHRpbWUoJGV2ZW50KVwiXG4gID48L2M4eS1yZWFsdGltZS1idG4+XG48L2M4eS1hY3Rpb24tYmFyLWl0ZW0+XG48Yzh5LWFjdGlvbi1iYXItaXRlbVxuICBbcGxhY2VtZW50XT1cIidyaWdodCdcIlxuICBbcHJpb3JpdHldPVwiNjBcIlxuPlxuICA8Yzh5LXRpbWUtaW50ZXJ2YWxcbiAgICBbbWF4Q3VzdG9tRGF0ZV09XCJtYXhEYXRlXCJcbiAgICBbZGF0ZVJhbmdlUGlja2VyQ29uZmlnXT1cImRhdGVSYW5nZVBpY2tlckNvbmZpZ1wiXG4gICAgKGludGVydmFsKT1cInNlcnZpY2Uuc2V0SW50ZXJ2YWwoJGV2ZW50KTsgdG9nZ2xlUmVhbHRpbWUoJGV2ZW50KVwiXG4gID48L2M4eS10aW1lLWludGVydmFsPlxuPC9jOHktYWN0aW9uLWJhci1pdGVtPlxuXG48ZGl2IGNsYXNzPVwiY2FyZCBjYXJkLS1ncmlkIGNvbnRlbnQtZnVsbHBhZ2UgZC1ncmlkIGdyaWRfX2NvbC0tOC00LS1tZFwiPlxuICA8ZGl2IGNsYXNzPVwiYmctd2hpdGUgcC1yZWxhdGl2ZVwiPlxuICAgIDxjOHktbWFwXG4gICAgICBbY29uZmlnXT1cImNvbmZpZ1wiXG4gICAgICBbYXNzZXRzXT1cImRldmljZVwiXG4gICAgICBbcG9seWxpbmUkXT1cInNlcnZpY2UucG9seWxpbmUkXCJcbiAgICAgIFtwb2x5bGluZU9wdGlvbnNdPVwieyBjb2xvcjogJ2RhcmtibHVlJyB9XCJcbiAgICA+XG4gICAgICA8ZGl2ICpjOHlNYXBQb3B1cD1cImxldCBjb250ZXh0XCI+XG4gICAgICAgIDxjOHktdHJhY2tpbmctbWFya2VyLXBvcHVwIFtjb250ZXh0XT1cImNvbnRleHRcIj48L2M4eS10cmFja2luZy1tYXJrZXItcG9wdXA+XG4gICAgICA8L2Rpdj5cbiAgICA8L2M4eS1tYXA+XG4gIDwvZGl2PlxuXG4gIDxkaXYgY2xhc3M9XCJkLWZsZXggZC1jb2wgYmctaW5oZXJpdCBjb250ZW50LWZ1bGxwYWdlIGJnLWdyYXktd2hpdGVcIj5cbiAgICA8ZGl2IGNsYXNzPVwiY2FyZC1oZWFkZXIgbGFyZ2UtcGFkZGluZyBzZXBhcmF0b3Igc3RpY2t5LXRvcFwiPlxuICAgICAgPHNwYW5cbiAgICAgICAgY2xhc3M9XCJjYXJkLXRpdGxlXCJcbiAgICAgICAgdHJhbnNsYXRlXG4gICAgICA+XG4gICAgICAgIFRyYWNraW5nIGV2ZW50c1xuICAgICAgPC9zcGFuPlxuICAgIDwvZGl2PlxuICAgIDxkaXYgY2xhc3M9XCJpbm5lci1zY3JvbGxcIj5cbiAgICAgIDxjOHktbGlzdC1ncm91cCBjbGFzcz1cImM4eS1saXN0X19ncm91cC0tc3RyaXBcIj5cbiAgICAgICAgPG5nLXRlbXBsYXRlXG4gICAgICAgICAgYzh5Rm9yXG4gICAgICAgICAgbGV0LWV2ZW50XG4gICAgICAgICAgW2M4eUZvck9mXT1cInNlcnZpY2UuZXZlbnRzJFwiXG4gICAgICAgICAgW2M4eUZvclBpcGVdPVwic2VydmljZS5waXBlXCJcbiAgICAgICAgICBbYzh5Rm9yUmVhbHRpbWVdPVwicmVhbHRpbWVcIlxuICAgICAgICAgIFtjOHlGb3JSZWFsdGltZU9wdGlvbnNdPVwieyBlbnRpdHlPcklkOiBkZXZpY2UgfVwiXG4gICAgICAgICAgW2M4eUZvckxvYWRNb3JlXT1cIidoaWRkZW4nXCJcbiAgICAgICAgICBbYzh5Rm9yTm90Rm91bmRdPVwiZW1wdHlcIlxuICAgICAgICAgIChjOHlGb3JMb2FkTW9yZUNvbXBvbmVudCk9XCJcbiAgICAgICAgICAgIGxvYWRNb3JlQ29tcG9uZW50ID0gJGV2ZW50OyBsb2FkTW9yZUNvbXBvbmVudC51c2VJbnRlcnNlY3Rpb24gPSBmYWxzZVxuICAgICAgICAgIFwiXG4gICAgICAgID5cbiAgICAgICAgICA8Yzh5LWxpXG4gICAgICAgICAgICBjbGFzcz1cInBvaW50ZXJcIlxuICAgICAgICAgICAgW25nQ2xhc3NdPVwieyAndGV4dC1wcmltYXJ5IHRleHQtYm9sZCc6IGFjdGl2ZU1hcmtlcnNbJ3AnICsgZXZlbnQ/LmlkXSB9XCJcbiAgICAgICAgICAgIChjbGljayk9XCJ0b2dnbGVNYXJrZXIoZXZlbnQpXCJcbiAgICAgICAgICAgIFthdHRyLmRhdGEtY3ldPVwiJ2M4eS10cmFja2luZy0tdHJhY2tpbmctZXZlbnQtaXRlbS0nICsgZXZlbnQ/LmlkXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8Yzh5LWxpLWljb24gW25nQ2xhc3NdPVwieyAndGV4dC1wcmltYXJ5JzogYWN0aXZlTWFya2Vyc1sncCcgKyBldmVudD8uaWRdIH1cIj5cbiAgICAgICAgICAgICAgPGkgYzh5SWNvbj1cImM4eS1sb2NhdGlvblwiPjwvaT5cbiAgICAgICAgICAgIDwvYzh5LWxpLWljb24+XG4gICAgICAgICAgICA8Yzh5LWxpLWJvZHk+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXhcIj5cbiAgICAgICAgICAgICAgICA8c3Bhbj5cbiAgICAgICAgICAgICAgICAgIHt7IGV2ZW50LnRpbWUgfCBkYXRlOiAnbWVkaXVtRGF0ZScgfX1cbiAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJtLWwtYXV0b1wiPlxuICAgICAgICAgICAgICAgICAge3sgZXZlbnQudGltZSB8IGRhdGU6ICdtZWRpdW1UaW1lJyB9fVxuICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2M4eS1saS1ib2R5PlxuICAgICAgICAgIDwvYzh5LWxpPlxuICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgPC9jOHktbGlzdC1ncm91cD5cbiAgICA8L2Rpdj5cblxuICAgIDwhLS0gZW1wdHkgc3RhdGUgLS0+XG4gICAgPG5nLXRlbXBsYXRlICNlbXB0eT5cbiAgICAgIDxjOHktdWktZW1wdHktc3RhdGVcbiAgICAgICAgaWNvbj1cImM4eS1sb2NhdGlvblwiXG4gICAgICAgIFt0aXRsZV09XCInTm8gdHJhY2tpbmcgZXZlbnRzIGZvdW5kLicgfCB0cmFuc2xhdGVcIlxuICAgICAgICBbc3VidGl0bGVdPVwiJ1NlbGVjdCBhbm90aGVyIHRpbWUgcmFuZ2UuJyB8IHRyYW5zbGF0ZVwiXG4gICAgICAgICpuZ0lmPVwiIXNlcnZpY2UuaGFzRXZlbnRzXCJcbiAgICAgICAgW2hvcml6b250YWxdPVwidHJ1ZVwiXG4gICAgICA+PC9jOHktdWktZW1wdHktc3RhdGU+XG4gICAgPC9uZy10ZW1wbGF0ZT5cblxuICAgIDxkaXYgKm5nSWY9XCJsb2FkTW9yZUNvbXBvbmVudD8uaGFzTW9yZVwiPlxuICAgICAgPGJ1dHRvblxuICAgICAgICBjbGFzcz1cImJ0biBidG4tbGluayBmaXQtdyBzdGlja3ktYm90dG9tIHNlcGFyYXRvci10b3BcIlxuICAgICAgICBbdGl0bGVdPVwiJ0xvYWQgbW9yZScgfCB0cmFuc2xhdGVcIlxuICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgW2Rpc2FibGVkXT1cImxvYWRNb3JlQ29tcG9uZW50Py5pc0xvYWRpbmdcIlxuICAgICAgICAoY2xpY2spPVwibG9hZE1vcmVDb21wb25lbnQubG9hZE1vcmUoKVwiXG4gICAgICAgIGRhdGEtY3k9XCJjOHktdHJhY2tpbmctLWxvYWQtbW9yZVwiXG4gICAgICA+XG4gICAgICAgIHt7ICdMb2FkIG1vcmUnIHwgdHJhbnNsYXRlIH19XG4gICAgICA8L2J1dHRvbj5cbiAgICA8L2Rpdj5cblxuICAgIDxkaXYgY2xhc3M9XCJjYXJkLWZvb3RlciBzZXBhcmF0b3JcIj5cbiAgICAgIDxidXR0b25cbiAgICAgICAgY2xhc3M9XCJidG4gYnRuLWRlZmF1bHRcIlxuICAgICAgICBbdGl0bGVdPVwiJ0Rlc2VsZWN0IGFsbCBtYXJrZXJzJyB8IHRyYW5zbGF0ZVwiXG4gICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICBbZGlzYWJsZWRdPVwiKGFjdGl2ZU1hcmtlcnMgfCBqc29uKSA9PT0gJ3t9J1wiXG4gICAgICAgIChjbGljayk9XCJtYXAuY2xlYXJNYXJrZXJzKCdldmVudCcpOyBhY3RpdmVNYXJrZXJzID0ge31cIlxuICAgICAgPlxuICAgICAgICB7eyAnRGVzZWxlY3QgYWxsIG1hcmtlcnMnIHwgdHJhbnNsYXRlIH19XG4gICAgICA8L2J1dHRvbj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG48L2Rpdj5cbiJdfQ==
88
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhY2tpbmcuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vdHJhY2tpbmcvdHJhY2tpbmcuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vdHJhY2tpbmcvdHJhY2tpbmcuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFpQixTQUFTLEVBQVUsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzVFLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM3QyxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFFakQsT0FBTyxFQUNMLGVBQWUsRUFDZixtQkFBbUIsRUFDbkIsVUFBVSxFQUVWLG9CQUFvQixFQUdwQixxQkFBcUIsRUFDdEIsTUFBTSxxQkFBcUIsQ0FBQztBQUM3QixPQUFPLEVBQUUsWUFBWSxFQUFhLFNBQVMsRUFBeUIsTUFBTSx5QkFBeUIsQ0FBQztBQUNwRyxPQUFPLEVBQUUsNEJBQTRCLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQztBQUNqRixPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sb0JBQW9CLENBQUM7Ozs7Ozs7QUFnQnJELE1BQU0sT0FBTyxpQkFBaUI7SUF5QjVCLFlBQ1MsT0FBd0IsRUFDeEIsUUFBOEIsRUFDN0IsbUJBQXdDLEVBQ3hDLGNBQThCO1FBSC9CLFlBQU8sR0FBUCxPQUFPLENBQWlCO1FBQ3hCLGFBQVEsR0FBUixRQUFRLENBQXNCO1FBQzdCLHdCQUFtQixHQUFuQixtQkFBbUIsQ0FBcUI7UUFDeEMsbUJBQWMsR0FBZCxjQUFjLENBQWdCO1FBekJ4QywwQkFBcUIsR0FBMEI7WUFDN0MsZ0JBQWdCLEVBQUUsSUFBSTtZQUN0QixpQkFBaUIsRUFBRSxJQUFJO1lBQ3ZCLHdCQUF3QixFQUFFLElBQUk7U0FDL0IsQ0FBQztRQUVGLFdBQU0sR0FBYztZQUNsQixRQUFRLEVBQUUsSUFBSTtZQUNkLE1BQU0sRUFB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IjpbImltcG9ydCB7IEFmdGVyVmlld0luaXQsIENvbXBvbmVudCwgT25Jbml0LCBWaWV3Q2hpbGQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEZvcm1zTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgQWN0aXZhdGVkUm91dGUgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuaW1wb3J0IHsgSUV2ZW50IH0gZnJvbSAnQGM4eS9jbGllbnQnO1xuaW1wb3J0IHtcbiAgQWN0aW9uQmFyTW9kdWxlLFxuICBDb250ZXh0Um91dGVTZXJ2aWNlLFxuICBDb3JlTW9kdWxlLFxuICBEYXRlUmFuZ2VQaWNrZXJDb25maWcsXG4gIEV2ZW50UmVhbHRpbWVTZXJ2aWNlLFxuICBMb2FkTW9yZUNvbXBvbmVudCxcbiAgVGltZUludGVydmFsLFxuICBUaW1lSW50ZXJ2YWxDb21wb25lbnRcbn0gZnJvbSAnQGM4eS9uZ3gtY29tcG9uZW50cyc7XG5pbXBvcnQgeyBNYXBDb21wb25lbnQsIE1hcENvbmZpZywgTWFwTW9kdWxlLCBQb3NpdGlvbk1hbmFnZWRPYmplY3QgfSBmcm9tICdAYzh5L25neC1jb21wb25lbnRzL21hcCc7XG5pbXBvcnQgeyBUcmFja2luZ01hcmtlclBvcHVwQ29tcG9uZW50IH0gZnJvbSAnLi90cmFja2luZy1tYXJrZXItcG9wdXAuY29tcG9uZW50JztcbmltcG9ydCB7IFRyYWNraW5nU2VydmljZSB9IGZyb20gJy4vdHJhY2tpbmcuc2VydmljZSc7XG5cbkBDb21wb25lbnQoe1xuICBzdGFuZGFsb25lOiB0cnVlLFxuICB0ZW1wbGF0ZVVybDogJy4vdHJhY2tpbmcuY29tcG9uZW50Lmh0bWwnLFxuICBpbXBvcnRzOiBbXG4gICAgTWFwTW9kdWxlLFxuICAgIEFjdGlvbkJhck1vZHVsZSxcbiAgICBDb3JlTW9kdWxlLFxuICAgIFRpbWVJbnRlcnZhbENvbXBvbmVudCxcbiAgICBGb3Jtc01vZHVsZSxcbiAgICBUcmFja2luZ01hcmtlclBvcHVwQ29tcG9uZW50XG4gIF0sXG4gIHByb3ZpZGVyczogW1RyYWNraW5nU2VydmljZSwgRXZlbnRSZWFsdGltZVNlcnZpY2VdLFxuICBzZWxlY3RvcjogJ2M4eS10cmFja2luZydcbn0pXG5leHBvcnQgY2xhc3MgVHJhY2tpbmdDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIEFmdGVyVmlld0luaXQge1xuICBAVmlld0NoaWxkKE1hcENvbXBvbmVudClcbiAgbWFwOiBNYXBDb21wb25lbnQ7XG5cbiAgZGF0ZVJhbmdlUGlja2VyQ29uZmlnOiBEYXRlUmFuZ2VQaWNrZXJDb25maWcgPSB7XG4gICAgYWRhcHRpdmVQb3NpdGlvbjogdHJ1ZSxcbiAgICBzaG93UHJldmlvdXNNb250aDogdHJ1ZSxcbiAgICBwcmV2ZW50Q2hhbmdlVG9OZXh0TW9udGg6IHRydWVcbiAgfTtcblxuICBjb25maWc6IE1hcENvbmZpZyA9IHtcbiAgICByZWFsdGltZTogdHJ1ZSxcbiAgICBmb2xsb3c6IGZhbHNlLFxuICAgIHpvb21MZXZlbDogMTIsXG4gICAgZml0Qm91bmRzT3B0aW9uczoge1xuICAgICAgcGFkZGluZzogWzUwLCA1MF1cbiAgICB9XG4gIH07XG5cbiAgbWF4RGF0ZSA9IG5ldyBEYXRlKCk7XG4gIGFjdGl2ZU1hcmtlcnM6IHsgW2tleTogc3RyaW5nXTogYm9vbGVhbiB9ID0ge307XG4gIHJlYWx0aW1lRGlzYWJsZWQgPSBmYWxzZTtcbiAgZGV2aWNlOiBQb3NpdGlvbk1hbmFnZWRPYmplY3Q7XG4gIGxvYWRNb3JlQ29tcG9uZW50OiBMb2FkTW9yZUNvbXBvbmVudDtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwdWJsaWMgc2VydmljZTogVHJhY2tpbmdTZXJ2aWNlLFxuICAgIHB1YmxpYyByZWFsdGltZTogRXZlbnRSZWFsdGltZVNlcnZpY2UsXG4gICAgcHJpdmF0ZSBjb250ZXh0Um91dGVTZXJ2aWNlOiBDb250ZXh0Um91dGVTZXJ2aWNlLFxuICAgIHByaXZhdGUgYWN0aXZhdGVkUm91dGU6IEFjdGl2YXRlZFJvdXRlXG4gICkge31cblxuICBhc3luYyBuZ09uSW5pdCgpIHtcbiAgICBjb25zdCB7IGNvbnRleHREYXRhIH0gPSB0aGlzLmNvbnRleHRSb3V0ZVNlcnZpY2UuZ2V0Q29udGV4dERhdGEodGhpcy5hY3RpdmF0ZWRSb3V0ZSk7XG4gICAgdGhpcy5kZXZpY2UgPSBjb250ZXh0RGF0YSBhcyBQb3NpdGlvbk1hbmFnZWRPYmplY3Q7XG4gIH1cblxuICBhc3luYyBuZ0FmdGVyVmlld0luaXQoKSB7XG4gICAgdGhpcy5zZXJ2aWNlLnNldERldmljZUlkKHRoaXMuZGV2aWNlLmlkKTtcbiAgICB0aGlzLnRvZ2dsZVBvc2l0aW9uUmVhbHRpbWUodGhpcy5yZWFsdGltZS5hY3RpdmUpO1xuICB9XG5cbiAgdG9nZ2xlTWFya2VyKGV2ZW50OiBJRXZlbnQpIHtcbiAgICBsZXQgbWFya2VyID0gdGhpcy5tYXAuZmluZE1hcmtlcihldmVudCk7XG5cbiAgICBpZiAobWFya2VyKSB7XG4gICAgICB0aGlzLm1hcC5yZW1vdmVNYXJrZXIobWFya2VyKTtcbiAgICAgIGRlbGV0ZSB0aGlzLmFjdGl2ZU1hcmtlcnNbYHAke2V2ZW50LmlkfWBdO1xuICAgIH0gZWxzZSB7XG4gICAgICBtYXJrZXIgPSB0aGlzLm1hcC5nZXRUcmFja2luZ01hcmtlcihldmVudCk7XG4gICAgICB0aGlzLm1hcC5hZGRNYXJrZXJUb01hcChtYXJrZXIpO1xuICAgICAgdGhpcy5hY3RpdmVNYXJrZXJzW2BwJHtldmVudC5pZH1gXSA9IHRydWU7XG4gICAgfVxuICB9XG5cbiAgdG9nZ2xlUG9zaXRpb25SZWFsdGltZShhY3RpdmU6IGJvb2xlYW4pIHtcbiAgICB0aGlzLmNvbmZpZyA9IHsgLi4udGhpcy5jb25maWcsIHJlYWx0aW1lOiBhY3RpdmUgfTtcbiAgfVxuXG4gIHRvZ2dsZVJlYWx0aW1lKGludGVydmFsOiBUaW1lSW50ZXJ2YWwpIHtcbiAgICBjb25zdCBjdXJyZW50VGltZUluUmFuZ2UgPSBEYXRlLm5vdygpIDw9IGludGVydmFsPy5kYXRlVG8/LmdldFRpbWUoKTtcbiAgICB0aGlzLnRvZ2dsZVBvc2l0aW9uUmVhbHRpbWUoY3VycmVudFRpbWVJblJhbmdlKTtcbiAgICB0aGlzLnJlYWx0aW1lRGlzYWJsZWQgPSAhY3VycmVudFRpbWVJblJhbmdlO1xuXG4gICAgaWYgKGN1cnJlbnRUaW1lSW5SYW5nZSkge1xuICAgICAgdGhpcy5yZWFsdGltZS5zdGFydCgpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnJlYWx0aW1lLnN0b3AoKTtcbiAgICB9XG4gIH1cbn1cbiIsIjxjOHktYWN0aW9uLWJhci1pdGVtXG4gIFtwbGFjZW1lbnRdPVwiJ3JpZ2h0J1wiXG4gIFtwcmlvcml0eV09XCIxMDBcIlxuPlxuICA8Yzh5LXJlYWx0aW1lLWJ0blxuICAgIFtzZXJ2aWNlXT1cInJlYWx0aW1lXCJcbiAgICBbZGlzYWJsZWRdPVwicmVhbHRpbWVEaXNhYmxlZFwiXG4gICAgKG9uVG9nZ2xlKT1cInRvZ2dsZVBvc2l0aW9uUmVhbHRpbWUoJGV2ZW50KVwiXG4gID48L2M4eS1yZWFsdGltZS1idG4+XG48L2M4eS1hY3Rpb24tYmFyLWl0ZW0+XG48Yzh5LWFjdGlvbi1iYXItaXRlbVxuICBbcGxhY2VtZW50XT1cIidyaWdodCdcIlxuICBbcHJpb3JpdHldPVwiNjBcIlxuPlxuICA8Yzh5LXRpbWUtaW50ZXJ2YWxcbiAgICBbbWF4Q3VzdG9tRGF0ZV09XCJtYXhEYXRlXCJcbiAgICBbZGF0ZVJhbmdlUGlja2VyQ29uZmlnXT1cImRhdGVSYW5nZVBpY2tlckNvbmZpZ1wiXG4gICAgKGludGVydmFsKT1cInNlcnZpY2Uuc2V0SW50ZXJ2YWwoJGV2ZW50KTsgdG9nZ2xlUmVhbHRpbWUoJGV2ZW50KVwiXG4gID48L2M4eS10aW1lLWludGVydmFsPlxuPC9jOHktYWN0aW9uLWJhci1pdGVtPlxuXG48ZGl2IGNsYXNzPVwiY2FyZCBjYXJkLS1ncmlkIGNvbnRlbnQtZnVsbHBhZ2UgZC1ncmlkIGdyaWRfX2NvbC0tOC00LS1tZFwiPlxuICA8ZGl2XG4gICAgY2xhc3M9XCJiZy13aGl0ZSBwLXJlbGF0aXZlXCJcbiAgICBzdHlsZT1cIm1pbi1oZWlnaHQ6IDMwdmhcIlxuICA+XG4gICAgPGM4eS1tYXBcbiAgICAgIFtjb25maWddPVwiY29uZmlnXCJcbiAgICAgIFthc3NldHNdPVwiZGV2aWNlXCJcbiAgICAgIFtwb2x5bGluZSRdPVwic2VydmljZS5wb2x5bGluZSRcIlxuICAgICAgW3BvbHlsaW5lT3B0aW9uc109XCJ7IGNvbG9yOiAnZGFya2JsdWUnIH1cIlxuICAgID5cbiAgICAgIDxkaXYgKmM4eU1hcFBvcHVwPVwibGV0IGNvbnRleHRcIj5cbiAgICAgICAgPGM4eS10cmFja2luZy1tYXJrZXItcG9wdXAgW2NvbnRleHRdPVwiY29udGV4dFwiPjwvYzh5LXRyYWNraW5nLW1hcmtlci1wb3B1cD5cbiAgICAgIDwvZGl2PlxuICAgIDwvYzh5LW1hcD5cbiAgPC9kaXY+XG5cbiAgPGRpdiBjbGFzcz1cImQtZmxleCBkLWNvbCBiZy1pbmhlcml0IGNvbnRlbnQtZnVsbHBhZ2UgYmctZ3JheS13aGl0ZVwiPlxuICAgIDxkaXYgY2xhc3M9XCJjYXJkLWhlYWRlciBsYXJnZS1wYWRkaW5nIHNlcGFyYXRvciBzdGlja3ktdG9wXCI+XG4gICAgICA8c3BhblxuICAgICAgICBjbGFzcz1cImNhcmQtdGl0bGVcIlxuICAgICAgICB0cmFuc2xhdGVcbiAgICAgID5cbiAgICAgICAgVHJhY2tpbmcgZXZlbnRzXG4gICAgICA8L3NwYW4+XG4gICAgPC9kaXY+XG4gICAgPGRpdiBjbGFzcz1cImlubmVyLXNjcm9sbFwiPlxuICAgICAgPGM4eS1saXN0LWdyb3VwIGNsYXNzPVwiYzh5LWxpc3RfX2dyb3VwLS1zdHJpcFwiPlxuICAgICAgICA8bmctdGVtcGxhdGVcbiAgICAgICAgICBjOHlGb3JcbiAgICAgICAgICBsZXQtZXZlbnRcbiAgICAgICAgICBbYzh5Rm9yT2ZdPVwic2VydmljZS5ldmVudHMkXCJcbiAgICAgICAgICBbYzh5Rm9yUGlwZV09XCJzZXJ2aWNlLnBpcGVcIlxuICAgICAgICAgIFtjOHlGb3JSZWFsdGltZV09XCJyZWFsdGltZVwiXG4gICAgICAgICAgW2M4eUZvclJlYWx0aW1lT3B0aW9uc109XCJ7IGVudGl0eU9ySWQ6IGRldmljZSB9XCJcbiAgICAgICAgICBbYzh5Rm9yTG9hZE1vcmVdPVwiJ2hpZGRlbidcIlxuICAgICAgICAgIFtjOHlGb3JOb3RGb3VuZF09XCJlbXB0eVwiXG4gICAgICAgICAgKGM4eUZvckxvYWRNb3JlQ29tcG9uZW50KT1cIlxuICAgICAgICAgICAgbG9hZE1vcmVDb21wb25lbnQgPSAkZXZlbnQ7IGxvYWRNb3JlQ29tcG9uZW50LnVzZUludGVyc2VjdGlvbiA9IGZhbHNlXG4gICAgICAgICAgXCJcbiAgICAgICAgPlxuICAgICAgICAgIDxjOHktbGlcbiAgICAgICAgICAgIGNsYXNzPVwicG9pbnRlclwiXG4gICAgICAgICAgICBbbmdDbGFzc109XCJ7ICd0ZXh0LXByaW1hcnkgdGV4dC1ib2xkJzogYWN0aXZlTWFya2Vyc1sncCcgKyBldmVudD8uaWRdIH1cIlxuICAgICAgICAgICAgKGNsaWNrKT1cInRvZ2dsZU1hcmtlcihldmVudClcIlxuICAgICAgICAgICAgW2F0dHIuZGF0YS1jeV09XCInYzh5LXRyYWNraW5nLS10cmFja2luZy1ldmVudC1pdGVtLScgKyBldmVudD8uaWRcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxjOHktbGktaWNvbiBbbmdDbGFzc109XCJ7ICd0ZXh0LXByaW1hcnknOiBhY3RpdmVNYXJrZXJzWydwJyArIGV2ZW50Py5pZF0gfVwiPlxuICAgICAgICAgICAgICA8aSBjOHlJY29uPVwiYzh5LWxvY2F0aW9uXCI+PC9pPlxuICAgICAgICAgICAgPC9jOHktbGktaWNvbj5cbiAgICAgICAgICAgIDxjOHktbGktYm9keT5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleFwiPlxuICAgICAgICAgICAgICAgIDxzcGFuPlxuICAgICAgICAgICAgICAgICAge3sgZXZlbnQudGltZSB8IGRhdGU6ICdtZWRpdW1EYXRlJyB9fVxuICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm0tbC1hdXRvXCI+XG4gICAgICAgICAgICAgICAgICB7eyBldmVudC50aW1lIHwgZGF0ZTogJ21lZGl1bVRpbWUnIH19XG4gICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvYzh5LWxpLWJvZHk+XG4gICAgICAgICAgPC9jOHktbGk+XG4gICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICA8L2M4eS1saXN0LWdyb3VwPlxuICAgIDwvZGl2PlxuXG4gICAgPCEtLSBlbXB0eSBzdGF0ZSAtLT5cbiAgICA8bmctdGVtcGxhdGUgI2VtcHR5PlxuICAgICAgQGlmICghc2VydmljZS5oYXNFdmVudHMpIHtcbiAgICAgICAgPGM4eS11aS1lbXB0eS1zdGF0ZVxuICAgICAgICAgIGljb249XCJjOHktbG9jYXRpb25cIlxuICAgICAgICAgIFt0aXRsZV09XCInTm8gdHJhY2tpbmcgZXZlbnRzIGZvdW5kLicgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgIFtzdWJ0aXRsZV09XCInU2VsZWN0IGFub3RoZXIgdGltZSByYW5nZS4nIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICBbaG9yaXpvbnRhbF09XCJ0cnVlXCJcbiAgICAgICAgPjwvYzh5LXVpLWVtcHR5LXN0YXRlPlxuICAgICAgfVxuICAgIDwvbmctdGVtcGxhdGU+XG5cbiAgICBAaWYgKGxvYWRNb3JlQ29tcG9uZW50Py5oYXNNb3JlKSB7XG4gICAgICA8ZGl2PlxuICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgY2xhc3M9XCJidG4gYnRuLWxpbmsgZml0LXcgc3RpY2t5LWJvdHRvbSBzZXBhcmF0b3ItdG9wXCJcbiAgICAgICAgICBbdGl0bGVdPVwiJ0xvYWQgbW9yZScgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgIFtkaXNhYmxlZF09XCJsb2FkTW9yZUNvbXBvbmVudD8uaXNMb2FkaW5nXCJcbiAgICAgICAgICAoY2xpY2spPVwibG9hZE1vcmVDb21wb25lbnQubG9hZE1vcmUoKVwiXG4gICAgICAgICAgZGF0YS1jeT1cImM4eS10cmFja2luZy0tbG9hZC1tb3JlXCJcbiAgICAgICAgPlxuICAgICAgICAgIHt7ICdMb2FkIG1vcmUnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgPC9kaXY+XG4gICAgfVxuXG4gICAgPGRpdiBjbGFzcz1cImNhcmQtZm9vdGVyIHNlcGFyYXRvclwiPlxuICAgICAgPGJ1dHRvblxuICAgICAgICBjbGFzcz1cImJ0biBidG4tZGVmYXVsdFwiXG4gICAgICAgIFt0aXRsZV09XCInRGVzZWxlY3QgYWxsIG1hcmtlcnMnIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgIFtkaXNhYmxlZF09XCIoYWN0aXZlTWFya2VycyB8IGpzb24pID09PSAne30nXCJcbiAgICAgICAgKGNsaWNrKT1cIm1hcC5jbGVhck1hcmtlcnMoJ2V2ZW50Jyk7IGFjdGl2ZU1hcmtlcnMgPSB7fVwiXG4gICAgICA+XG4gICAgICAgIHt7ICdEZXNlbGVjdCBhbGwgbWFya2VycycgfCB0cmFuc2xhdGUgfX1cbiAgICAgIDwvYnV0dG9uPlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbjwvZGl2PlxuIl19
@@ -17,6 +17,7 @@ export class BridgeService {
17
17
  this.fixE2eIssues();
18
18
  this.$ng1RouteChangeSuccess = this.fromNg1Event(this.injector.get('$rootScope'), '$routeChangeSuccess');
19
19
  this.$ng1RouteChangeStart = this.fromNg1Event(this.injector.get('$rootScope'), '$routeChangeStart');
20
+ this.$ng1RouteUpdate = this.fromNg1Event(this.injector.get('$rootScope'), '$routeUpdate');
20
21
  this.hookLanguage();
21
22
  this.hookTab();
22
23
  this.hookNavigator();
@@ -34,21 +35,11 @@ export class BridgeService {
34
35
  // fix to trigger an angularjs route change success
35
36
  // event on context route match to make legacy
36
37
  // view-providers resolve.
37
- // reloadOnUrl: true ensures that navigating between different IDs
38
- // (e.g., /device/123 -> /device/456) triggers $routeChangeSuccess
39
- // reloadOnSearch: true ensures that navigating to different subpaths with the same ID
40
- // (e.g., /group/123/dashboard -> /group/123/subassets) also triggers $routeChangeSuccess
41
- // Both are needed because AngularJS checks: "is update-only if reloadOnUrl is set
42
- // BUT reloadOnSearch is false AND pathParams are equal"
43
38
  c8yViews.when('/device/:id', {
44
- template: '',
45
- reloadOnUrl: true,
46
- reloadOnSearch: true
39
+ template: ''
47
40
  });
48
41
  c8yViews.when('/group/:id', {
49
- template: '',
50
- reloadOnUrl: true,
51
- reloadOnSearch: true
42
+ template: ''
52
43
  });
53
44
  c8yViews.contextViews.subscribe(cfg => this.addRoute(cfg));
54
45
  }
@@ -91,9 +82,7 @@ export class BridgeService {
91
82
  fallbackRoutes.push({
92
83
  keys: [{ name: ViewContextLegacyParameter[context], optional: false }],
93
84
  regexp,
94
- template,
95
- reloadOnUrl: true,
96
- reloadOnSearch: true
85
+ template
97
86
  });
98
87
  }
99
88
  /**
@@ -201,8 +190,15 @@ export class BridgeService {
201
190
  liveTabs = [];
202
191
  this.$liveTabs.next(liveTabs);
203
192
  });
204
- this.$ng1RouteChangeSuccess.subscribe(() => {
193
+ const syncRouters = () => {
205
194
  const path = $location.path();
195
+ // Don't sync if Angular Router is using secondary outlets
196
+ // (e.g., /device/123/(dashboard-details:general))
197
+ // Let Angular Router handle these advanced navigation scenarios
198
+ if (this.router.url.includes('(') && this.router.url.includes(':')) {
199
+ return;
200
+ }
201
+ // Only sync if paths differ and initial navigation is complete
206
202
  if (this.router.url !== path) {
207
203
  this.router.navigate(path === '/' ? '' : path.split('/'), {
208
204
  queryParams: $location.search(),
@@ -212,7 +208,18 @@ export class BridgeService {
212
208
  if (this.actionService) {
213
209
  this.actionService.refresh();
214
210
  }
215
- });
211
+ };
212
+ // Listen to $routeChangeSuccess (full navigation - always sync)
213
+ this.$ng1RouteChangeSuccess.subscribe(syncRouters);
214
+ // Listen to $routeUpdate (skip if query-param-only)
215
+ this.$ng1RouteUpdate
216
+ .pipe(filter(() => {
217
+ const path = $location.path();
218
+ const angularPath = this.router.url.split('?')[0];
219
+ // Only process if path actually changed (not just query params)
220
+ return angularPath !== path;
221
+ }))
222
+ .subscribe(syncRouters);
216
223
  this.$routeChanges = merge(this.$ng1RouteChangeSuccess, this.fromNg1Event(c8yTabs, c8yTabs.EVENT_UPDATE), of(1)).pipe(debounceTime(100));
217
224
  }
218
225
  hookNavigator() {
@@ -337,4 +344,4 @@ export const bridgeServiceProvider = {
337
344
  PluginsResolveService
338
345
  ]
339
346
  };
340
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnJpZGdlLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi91cGdyYWRlL2JyaWRnZS5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFHTCxhQUFhLEVBQ2IsZUFBZSxFQUlmLGNBQWMsRUFDZCxPQUFPLEVBQ1AscUJBQXFCLEVBQ3JCLGFBQWEsRUFHYixXQUFXLEVBQ1osTUFBTSxxQkFBcUIsQ0FBQztBQUM3QixPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBQ3BDLE9BQU8sRUFDTCxlQUFlLEVBQ2YsYUFBYSxFQUNiLElBQUksRUFDSixnQkFBZ0IsRUFDaEIsS0FBSyxFQUNMLFVBQVUsRUFDVixFQUFFLEVBRUgsTUFBTSxNQUFNLENBQUM7QUFDZCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sRUFBRSxHQUFHLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUV2RixPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3ZDLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDeEQsT0FBTyxFQUFFLDBCQUEwQixFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFFbEUsTUFBTSxPQUFPLGFBQWE7SUFNeEIsWUFDUyxRQUFhLEVBQ1osUUFBeUIsRUFDMUIsTUFBYyxFQUNiLE1BQWMsRUFDZCxhQUE0QixFQUM1QixhQUE0QixFQUNwQyxPQUE4QjtRQU52QixhQUFRLEdBQVIsUUFBUSxDQUFLO1FBQ1osYUFBUSxHQUFSLFFBQVEsQ0FBaUI7UUFDMUIsV0FBTSxHQUFOLE1BQU0sQ0FBUTtRQUNiLFdBQU0sR0FBTixNQUFNLENBQVE7UUFDZCxrQkFBYSxHQUFiLGFBQWEsQ0FBZTtRQUM1QixrQkFBYSxHQUFiLGFBQWEsQ0FBZTtRQVJ0QyxjQUFTLEdBQW1CLElBQUksZUFBZSxDQUFD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QUNkLGFBQTRCLEVBQzVCLGFBQTRCLEVBQzVCLE9BQThCO0lBRTlCLE9BQU8sSUFBSSxhQUFhLENBQ3RCLFFBQVEsRUFDUixRQUFRLEVBQ1IsTUFBTSxFQUNOLE1BQU0sRUFDTixhQUFhLEVBQ2IsYUFBYSxFQUNiLE9BQU8sQ0FDUixDQUFDO0FBQ0osQ0FBQztBQUVELE1BQU0sQ0FBQyxNQUFNLHFCQUFxQixHQUFHO0lBQ25DLE9BQU8sRUFBRSxhQUFhO0lBQ3RCLFVBQVUsRUFBRSxvQkFBb0I7SUFDaEMsSUFBSSxFQUFFO1FBQ0osV0FBVztRQUNYLGVBQWU7UUFDZixNQUFNO1FBQ04sTUFBTTtRQUNOLGFBQWE7UUFDYixhQUFhO1FBQ2IscUJBQXFCO0tBQ3RCO0NBQ0YsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIEFjdGlvbixcbiAgQWN0aW9uQmFySXRlbSxcbiAgQWN0aW9uU2VydmljZSxcbiAgQXBwU3RhdGVTZXJ2aWNlLFxuICBCcmVhZGNydW1iLFxuICBCcmVhZGNydW1iSXRlbSxcbiAgRG9jTGluayxcbiAgRW1wdHlDb21wb25lbnQsXG4gIGdldHRleHQsXG4gIFBsdWdpbnNSZXNvbHZlU2VydmljZSxcbiAgUm91dGVyU2VydmljZSxcbiAgU2VhcmNoLFxuICBUYWIsXG4gIFZpZXdDb250ZXh0XG59IGZyb20gJ0BjOHkvbmd4LWNvbXBvbmVudHMnO1xuaW1wb3J0IHsgaXNBcnJheSB9IGZyb20gJ2xvZGFzaC1lcyc7XG5pbXBvcnQge1xuICBCZWhhdmlvclN1YmplY3QsXG4gIGNvbWJpbmVMYXRlc3QsXG4gIGZyb20sXG4gIGZyb21FdmVudFBhdHRlcm4sXG4gIG1lcmdlLFxuICBPYnNlcnZhYmxlLFxuICBvZixcbiAgU3ViamVjdFxufSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGRlYm91bmNlVGltZSwgZmlsdGVyLCBtYXAsIHN0YXJ0V2l0aCwgc3dpdGNoTWFwLCB0YWtlIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuXG5pbXBvcnQgeyBOZ1pvbmUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEFjdGl2YXRpb25FbmQsIFJvdXRlciB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQgeyBWaWV3Q29udGV4dExlZ2FjeVBhcmFtZXRlciB9IGZyb20gJy4vbmcxL3ZpZXdzLnByb3ZpZGVyJztcblxuZXhwb3J0IGNsYXNzIEJyaWRnZVNlcnZpY2Uge1xuICAkcm91dGVDaGFuZ2VzOiBPYnNlcnZhYmxlPGFueT47XG4gICRuZzFSb3V0ZUNoYW5nZVN1Y2Nlc3M6IE9ic2VydmFibGU8YW55PjtcbiAgJG5nMVJvdXRlQ2hhbmdlU3RhcnQ6IE9ic2VydmFibGU8YW55PjtcbiAgJGxpdmVUYWJzOiBTdWJqZWN0PFRhYltdPiA9IG5ldyBCZWhhdmlvclN1YmplY3QoW10pO1xuICBuYXZpZ2F0aW9uTm9kZXMkOiBPYnNlcnZhYmxlPGFueT47XG4gIGNvbnN0cnVjdG9yKFxuICAgIHB1YmxpYyBpbmplY3RvcjogYW55LFxuICAgIHByaXZhdGUgYXBwU3RhdGU6IEFwcFN0YXRlU2VydmljZSxcbiAgICBwdWJsaWMgcm91dGVyOiBSb3V0ZXIsXG4gICAgcHJpdmF0ZSBuZ1pvbmU6IE5nWm9uZSxcbiAgICBwcml2YXRlIHJvdXRlclNlcnZpY2U6IFJvdXRlclNlcnZpY2UsXG4gICAgcHJpdmF0ZSBhY3Rpb25TZXJ2aWNlOiBBY3Rpb25TZXJ2aWNlLFxuICAgIHBsdWdpbnM6IFBsdWdpbnNSZXNvbHZlU2VydmljZVxuICApIHtcbiAgICB0aGlzLmZpeEUyZUlzc3VlcygpO1xuICAgIHRoaXMuJG5nMVJvdXRlQ2hhbmdlU3VjY2VzcyA9IHRoaXMuZnJvbU5nMUV2ZW50KFxuICAgICAgdGhpcy5pbmplY3Rvci5nZXQoJyRyb290U2NvcGUnKSxcbiAgICAgICckcm91dGVDaGFuZ2VTdWNjZXNzJ1xuICAgICk7XG4gICAgdGhpcy4kbmcxUm91dGVDaGFuZ2VTdGFydCA9IHRoaXMuZnJvbU5nMUV2ZW50KFxuICAgICAgdGhpcy5pbmplY3Rvci5nZXQoJyRyb290U2NvcGUnKSxcbiAgICAgICckcm91dGVDaGFuZ2VTdGFydCdcbiAgICApO1xuICAgIHRoaXMuaG9va0xhbmd1YWdlKCk7XG4gICAgdGhpcy5ob29rVGFiKCk7XG4gICAgdGhpcy5ob29rTmF2aWdhdG9yKCk7XG4gICAgdGhpcy5ob29rVXNlck1lbnUoKTtcbiAgICB0aGlzLmhvb2tWaWV3UHJvdmlkZXIoKTtcbiAgICBwbHVnaW5zLmFsbFBsdWdpbnNMb2FkZWQkXG4gICAgICAucGlwZShcbiAgICAgICAgZmlsdGVyKHRtcCA9PiAhIXRtcCksXG4gICAgICAgIHRha2UoMSlcbiAgICAgIClcbiAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICB0aGlzLnJvdXRlci5pbml0aWFsTmF2aWdhdGlvbigpO1xuICAgICAgfSk7XG4gICAgdGhpcy5uZzFSb3V0ZXMoKTtcbiAgfVxuXG4gIGhvb2tWaWV3UHJvdmlkZXIoKSB7XG4gICAgY29uc3QgYzh5Vmlld3MgPSB0aGlzLmluamVjdG9yLmdldCgnYzh5Vmlld3MnKTtcbiAgICAvLyBmaXggdG8gdHJpZ2dlciBhbiBhbmd1bGFyanMgcm91dGUgY2hhbmdlIHN1Y2Nlc3NcbiAgICAvLyBldmVudCBvbiBjb250ZXh0IHJvdXRlIG1hdGNoIHRvIG1ha2UgbGVnYWN5XG4gICAgLy8gdmlldy1wcm92aWRlcnMgcmVzb2x2ZS5cbiAgICAvLyByZWxvYWRPblVybDogdHJ1ZSBlbnN1cmVzIHRoYXQgbmF2aWdhdGluZyBiZXR3ZWVuIGRpZmZlcmVudCBJRHNcbiAgICAvLyAoZS5nLiwgL2RldmljZS8xMjMgLT4gL2RldmljZS80NTYpIHRyaWdnZXJzICRyb3V0ZUNoYW5nZVN1Y2Nlc3NcbiAgICAvLyByZWxvYWRPblNlYXJjaDogdHJ1ZSBlbnN1cmVzIHRoYXQgbmF2aWdhdGluZyB0byBkaWZmZXJlbnQgc3VicGF0aHMgd2l0aCB0aGUgc2FtZSBJRFxuICAgIC8vIChlLmcuLCAvZ3JvdXAvMTIzL2Rhc2hib2FyZCAtPiAvZ3JvdXAvMTIzL3N1YmFzc2V0cykgYWxzbyB0cmlnZ2VycyAkcm91dGVDaGFuZ2VTdWNjZXNzXG4gICAgLy8gQm90aCBhcmUgbmVlZGVkIGJlY2F1c2UgQW5ndWxhckpTIGNoZWNrczogXCJpcyB1cGRhdGUtb25seSBpZiByZWxvYWRPblVybCBpcyBzZXRcbiAgICAvLyBCVVQgcmVsb2FkT25TZWFyY2ggaXMgZmFsc2UgQU5EIHBhdGhQYXJhbXMgYXJlIGVxdWFsXCJcbiAgICBjOHlWaWV3cy53aGVuKCcvZGV2aWNlLzppZCcsIHtcbiAgICAgIHRlbXBsYXRlOiAnJyxcbiAgICAgIHJlbG9hZE9uVXJsOiB0cnVlLFxuICAgICAgcmVsb2FkT25TZWFyY2g6IHRydWVcbiAgICB9KTtcbiAgICBjOHlWaWV3cy53aGVuKCcvZ3JvdXAvOmlkJywge1xuICAgICAgdGVtcGxhdGU6ICcnLFxuICAgICAgcmVsb2FkT25Vcmw6IHRydWUsXG4gICAgICByZWxvYWRPblNlYXJjaDogdHJ1ZVxuICAgIH0pO1xuICAgIGM4eVZpZXdzLmNvbnRleHRWaWV3cy5zdWJzY3JpYmUoY2ZnID0+IHRoaXMuYWRkUm91dGUoY2ZnKSk7XG4gIH1cblxuICBhZGRSb3V0ZShjZmcpIHtcbiAgICB0aGlzLnJvdXRlclNlcnZpY2UuYWRkUm91dGUoe1xuICAgICAgbGFiZWw6IGNmZy5sYWJlbCB8fCBjZmcubmFtZSxcbiAgICAgIHBhdGg6IGNmZy5wYXRoLFxuICAgICAgaWNvbjogY2ZnLmljb24sXG4gICAgICBjb250ZXh0OiBWaWV3Q29udGV4dFtjZmcuY29udGV4dEtleV0gYXMgVmlld0NvbnRleHQsXG4gICAgICBwcmlvcml0eTogY2ZnLnByaW9yaXR5LFxuICAgICAgY29tcG9uZW50OiBFbXB0eUNvbXBvbmVudCxcbiAgICAgIGRhdGE6IHtcbiAgICAgICAgc2hvd0lmOiBjZmcuc2hvd0lmXG4gICAgICAgICAgPyBuZ3hSb3V0ZSA9PiB7XG4gICAgICAgICAgICAgIGNvbnN0IHBhcmFtcyA9IHtcbiAgICAgICAgICAgICAgICAuLi5uZ3hSb3V0ZS5wYXJhbXMsXG4gICAgICAgICAgICAgICAgW1ZpZXdDb250ZXh0TGVnYWN5UGFyYW1ldGVyW2NmZy5jb250ZXh0S2V5XV06IG5neFJvdXRlLnBhcmFtcy5pZFxuICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICBjb25zdCBzaG93SWZSZXN1bHQgPSB0aGlzLmluamVjdG9yLmludm9rZShjZmcuc2hvd0lmLCB1bmRlZmluZWQsIHtcbiAgICAgICAgICAgICAgICAkcm91dGVQYXJhbXM6IHBhcmFtc1xuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgLy8gbWFrZSBzdXJlIHNob3dJZiByZXN1bHQgaXMgYSBwcm9taXNlIHdpdGggYm9vbGVhbiByZXN1bHQ6XG4gICAgICAgICAgICAgIHJldHVybiB0aGlzLmluamVjdG9yLmdldCgnJHEnKS53aGVuKHNob3dJZlJlc3VsdCkudGhlbihCb29sZWFuKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICA6IHVuZGVmaW5lZFxuICAgICAgfSxcbiAgICAgIC4uLihjZmcuZmVhdHVyZUlkICYmIHsgZmVhdHVyZUlkOiBjZmcuZmVhdHVyZUlkIH0pXG4gICAgfSk7XG5cbiAgICBpZiAoY2ZnLnJ1blBoYXNlKSB7XG4gICAgICB0aGlzLnJvdXRlclNlcnZpY2UucmVmcmVzaCgpO1xuICAgIH1cbiAgfVxuXG4gIG5nMVJvdXRlcygpIHtcbiAgICBjb25zdCB0ZW1wbGF0ZSA9ICcnO1xuICAgIGNvbnN0IGZhbGxiYWNrUm91dGVzID0gW107XG5cbiAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6IGZvcmluXG4gICAgZm9yIChjb25zdCBjb250ZXh0IGluIFZpZXdDb250ZXh0KSB7XG4gICAgICBjb25zdCBwYXRoID0gVmlld0NvbnRleHRbY29udGV4dF0ubWF0Y2goLyhcXHcrKVxcLy8pWzFdO1xuICAgICAgY29uc3QgcmVnZXhwID0gbmV3IFJlZ0V4cChgXi8ke3BhdGh9Lyg/OihbXi9dKykpLiokYCk7XG4gICAgICBmYWxsYmFja1JvdXRlcy5wdXNoKHtcbiAgICAgICAga2V5czogW3sgbmFtZTogVmlld0NvbnRleHRMZWdhY3lQYXJhbWV0ZXJbY29udGV4dF0sIG9wdGlvbmFsOiBmYWxzZSB9XSxcbiAgICAgICAgcmVnZXhwLFxuICAgICAgICB0ZW1wbGF0ZSxcbiAgICAgICAgcmVsb2FkT25Vcmw6IHRydWUsXG4gICAgICAgIHJlbG9hZE9uU2VhcmNoOiB0cnVlXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBXaGVuIGFzc2V0IGRldGFpbCByb3V0ZXMgKC9kZXZpY2UvOmlkLCAgL2dyb3VwLzppZCkgYXJlIG1hdGNoZWQgaW4gQW5ndWxhciBSb3V0ZXIsIG5nUm91dGUgaW5cbiAgICAgKiBhbmd1bGFyLmpzIG11c3QgYWxzbyBoYXZlIG1hdGNoaW5nIGdlbmVyaWMgcm91dGVzIHNvIHRoYXQgdGhlIGlkcyBjYW4gYmUgZXh0cmFjdGVkIGZyb20gdGhlIHBhdGhzIGFuZFxuICAgICAqIGluamVjdGVkIGluIG11bHRpcGxlIGNhbGxzIChzaG93SWYsIGM4eUFjdGlvbnMsIGV0YykgYXMgcHJvcGVydGllcyBvZiAkcm91dGVQYXJhbXMuXG4gICAgICpcbiAgICAgKiBUaGUgZnVuY3Rpb24gaW4gc3JjL25nUm91dGUvcm91dGUuanMgKGFuZ3VsYXIuanMpIHdoZXJlIHRoZSByb3V0ZXMgYXJlIG1hdGNoZWQgaXMgY2FsbGVkIHBhcnNlUm91dGUoKS4gVGhpc1xuICAgICAqIGZ1bmN0aW9uIGNhbGxzIGFuZ3VsYXIuZm9yRWFjaCBhbmQgaW4gdHVybiB0aGlzIGZ1bmN0aW9uIGNoZWNrcyBmb3IgdGhlIHByZXNlbmNlIG9mIGEgZm9yRWFjaCBtZXRob2QgYmVmb3JlXG4gICAgICogdHJ5aW5nIG9iamVjdCBrZXkgaXRlcmF0aW9uLlxuICAgICAqIEJ5IGF0dGFjaGluZyBhIG5vbiBlbnVtZXJhYmxlIGZvckVhY2ggbWV0aG9kIHRvIHRoZSByb3V0ZXMgb2JqZWN0IHdlIGd1YXJhbnRlZSB0aGF0IHRoZSBmYWxsYmFjayBnZW5lcmljIHJvdXRlc1xuICAgICAqIGFyZSBvbmx5IG1hdGNoZWQgYWZ0ZXIgYW55IG90aGVyIHJlZ2lzdGVyZWQgdGhyb3VnaCAkcm91dGVQcm92aWRlci53aGVuLlxuICAgICAqL1xuICAgIGNvbnN0ICRyb3V0ZSA9IHRoaXMuaW5qZWN0b3IuZ2V0KCckcm91dGUnKTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoJHJvdXRlLnJvdXRlcywgJ2ZvckVhY2gnLCB7XG4gICAgICAvLyBtYWtlIG5vbiBlbnVtZXJhYmxlXG4gICAgICB2YWx1ZTogZnVuY3Rpb24gZm9yRWFjaChpdGVyYXRvciwgY29udGV4dCkge1xuICAgICAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6IGZvcmluXG4gICAgICAgIGZvciAoY29uc3Qga2V5IGluIHRoaXMpIHtcbiAgICAgICAgICBpdGVyYXRvci5jYWxsKGNvbnRleHQsIHRoaXNba2V5XSwga2V5LCB0aGlzKTtcbiAgICAgICAgfVxuICAgICAgICBmYWxsYmFja1JvdXRlcy5mb3JFYWNoKHIgPT4gaXRlcmF0b3IuY2FsbChjb250ZXh0LCByKSk7XG4gICAgICB9LFxuICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG5cbiAgICAvKipcbiAgICAgKiBTb21lIGZ1bmN0aW9ucyB1c2UgdGhlIGN1cnJlbnQgY29udGV4dC4gQXMgc29tZSBwYXJ0cyBhcmUgdXBncmFkZWQgYW5kIHNvbWUgbm90LCB0aGUgZm9sbG93aW5nIHVwZGF0ZXMgdGhlXG4gICAgICogYW5ndWxhcmpzIGdldENvbnRleHQgZnVuY3Rpb24gdG8gcmVzb2x2ZSBhbHdheXMgdGhlIHJpZ2h0IGNvbnRleHQuXG4gICAgICovXG4gICAgY29uc3QgYzh5VWlVdGlsID0gdGhpcy5pbmplY3Rvci5nZXQoJ2M4eVVpVXRpbCcpO1xuICAgIGNvbnN0IF9nZXRDb250ZXh0ID0gYzh5VWlVdGlsLmdldENvbnRleHQ7XG4gICAgdGhpcy5yb3V0ZXIuZXZlbnRzXG4gICAgICAucGlwZShmaWx0ZXIoZXZlbnQgPT4gZXZlbnQgaW5zdGFuY2VvZiBBY3RpdmF0aW9uRW5kKSlcbiAgICAgIC5zdWJzY3JpYmUoKGV2ZW50OiBBY3RpdmF0aW9uRW5kKSA9PiB7XG4gICAgICAgIGlmIChldmVudC5zbmFwc2hvdC5yb3V0ZUNvbmZpZy5wYXRoID09PSAnKionKSB7XG4gICAgICAgICAgYzh5VWlVdGlsLmdldENvbnRleHQgPSBfZ2V0Q29udGV4dDtcbiAgICAgICAgfSBlbHNlIGlmIChldmVudC5zbmFwc2hvdC5kYXRhICYmIGV2ZW50LnNuYXBzaG90LmRhdGEuY29udGV4dCkge1xuICAgICAgICAgIGM4eVVpVXRpbC5nZXRDb250ZXh0ID0gKCkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgY29udGV4dDogZXZlbnQuc25hcHNob3QuZGF0YS5jb250ZXh0LnJlcGxhY2UoJy86aWQnLCAnJyksXG4gICAgICAgICAgICAgIGlkOiBldmVudC5zbmFwc2hvdC5kYXRhLmNvbnRleHREYXRhLmlkLFxuICAgICAgICAgICAgICBjb250ZXh0RGF0YTogZXZlbnQuc25hcHNob3QuZGF0YS5jb250ZXh0RGF0YVxuICAgICAgICAgICAgfTtcbiAgICAgICAgICB9O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGM4eVVpVXRpbC5nZXRDb250ZXh0ID0gKCkgPT4gKHsgY29udGV4dDogbnVsbCwgaWQ6IG51bGwgfSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICB9XG5cbiAgZml4RTJlSXNzdWVzKCkge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCB7IG5nWm9uZSB9ID0gdGhpcztcbiAgICAgIGNvbnN0IHsgVXRpbHMgfSA9ICh3aW5kb3cgYXMgYW55KS5vcmcuY29tZXRkO1xuICAgICAgY29uc3QgdGltZW91dEZuID0gVXRpbHMuc2V0VGltZW91dDtcbiAgICAgIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTpvbmx5LWFycm93LWZ1bmN0aW9uc1xuICAgICAgVXRpbHMuc2V0VGltZW91dCA9IGZ1bmN0aW9uICguLi5hcmdzKSB7XG4gICAgICAgIHJldHVybiBuZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCkgPT4gdGltZW91dEZuLmFwcGx5KFV0aWxzLCBhcmdzKSk7XG4gICAgICB9O1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIC8vIGRvIG5vdGhpbmdcbiAgICB9XG5cbiAgICB0cnkge1xuICAgICAgY29uc3QgeyBhY2UgfSA9IHdpbmRvdyBhcyBhbnk7XG4gICAgICBjb25zdCBlZGl0Rm4gPSBhY2UuZWRpdDtcbiAgICAgIGNvbnN0IHsgbmdab25lIH0gPSB0aGlzO1xuICAgICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOm9ubHktYXJyb3ctZnVuY3Rpb25zXG4gICAgICBhY2UuZWRpdCA9IGZ1bmN0aW9uICguLi5hcmdzKSB7XG4gICAgICAgIHJldHVybiBuZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCkgPT4gZWRpdEZuLmFwcGx5KGFjZSwgYXJncykpO1xuICAgICAgfTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICAvLyBkbyBub3RoaW5nXG4gICAgfVxuICB9XG5cbiAgaG9va0xhbmd1YWdlKCkge1xuICAgIGxldCBmaXJzdCA9IHRydWU7XG4gICAgdGhpcy5hcHBTdGF0ZVxuICAgICAgLm1hcChzdG9yZSA9PiBzdG9yZS5sYW5nKVxuICAgICAgLnN1YnNjcmliZShsYW5nID0+IHtcbiAgICAgICAgdGhpcy5pbmplY3Rvci5nZXQoJ2M4eUxvY2FsZXMnKS5zd2l0Y2hUb0xhbmd1YWdlKGxhbmcpO1xuICAgICAgICBpZiAoIWZpcnN0KSB7XG4gICAgICAgICAgdGhpcy5pbmplY3Rvci5nZXQoJyRyb290U2NvcGUnKS4kYXBwbHkoKTtcbiAgICAgICAgfVxuICAgICAgICBmaXJzdCA9IGZhbHNlO1xuICAgICAgfSk7XG4gIH1cblxuICBob29rVGFiKCkge1xuICAgIC8vIEp1c3QgZm9yIGluc3RhbnRpYXRpb24gb2YgdGhlIGM4eUFjdGlvbiBzZXJ2aWNlXG4gICAgdGhpcy5pbmplY3Rvci5nZXQoJ2M4eUFjdGlvbnMnKTtcbiAgICBjb25zdCAkbG9jYXRpb24gPSB0aGlzLmluamVjdG9yLmdldCgnJGxvY2F0aW9uJyk7XG4gICAgY29uc3QgYzh5VGFicyA9IHRoaXMuaW5qZWN0b3IuZ2V0KCdjOHlUYWJzJyk7XG4gICAgbGV0IGxpdmVUYWJzID0gW107XG4gICAgYzh5VGFicy5hZGRUYWIgPSB0YWIgPT4ge1xuICAgICAgbGl2ZVRhYnMucHVzaCh7XG4gICAgICAgIC4uLnRhYixcbiAgICAgICAgbGFiZWw6IHRhYi5sYWJlbCB8fCB0YWIubmFtZSxcbiAgICAgICAgcGF0aDogZGVjb2RlVVJJQ29tcG9uZW50KHRhYi5wYXRoKVxuICAgICAgfSk7XG4gICAgICB0aGlzLiRsaXZlVGFicy5uZXh0KGxpdmVUYWJzKTtcbiAgICB9O1xuICAgIHRoaXMuJG5nMVJvdXRlQ2hhbmdlU3RhcnQuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgIGxpdmVUYWJzID0gW107XG4gICAgICB0aGlzLiRsaXZlVGFicy5uZXh0KGxpdmVUYWJzKTtcbiAgICB9KTtcbiAgICB0aGlzLiRuZzFSb3V0ZUNoYW5nZVN1Y2Nlc3Muc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgIGNvbnN0IHBhdGggPSAkbG9jYXRpb24ucGF0aCgpO1xuICAgICAgaWYgKHRoaXMucm91dGVyLnVybCAhPT0gcGF0aCkge1xuICAgICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShwYXRoID09PSAnLycgPyAnJyA6IHBhdGguc3BsaXQoJy8nKSwge1xuICAgICAgICAgIHF1ZXJ5UGFyYW1zOiAkbG9jYXRpb24uc2VhcmNoKCksXG4gICAgICAgICAgc2tpcExvY2F0aW9uQ2hhbmdlOiB0cnVlXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgaWYgKHRoaXMuYWN0aW9uU2VydmljZSkge1xuICAgICAgICB0aGlzLmFjdGlvblNlcnZpY2UucmVmcmVzaCgpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHRoaXMuJHJvdXRlQ2hhbmdlcyA9IG1lcmdlKFxuICAgICAgdGhpcy4kbmcxUm91dGVDaGFuZ2VTdWNjZXNzLFxuICAgICAgdGhpcy5mcm9tTmcxRXZlbnQoYzh5VGFicywgYzh5VGFicy5FVkVOVF9VUERBVEUpLFxuICAgICAgb2YoMSlcbiAgICApLnBpcGUoZGVib3VuY2VUaW1lKDEwMCkpO1xuICB9XG5cbiAgaG9va05hdmlnYXRvcigpIHtcbiAgICB0aGlzLm5hdmlnYXRpb25Ob2RlcyQgPSB0aGlzLmluamVjdG9yLmdldCgnYzh5TmF2aWdhdG9yJykucm9vdE5vZGVzJDtcbiAgfVxuXG4gIGdldFRhYnMoKTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgICBjb25zdCBvbmx5VmlzaWJsZSA9ICh7IHNob3cgfSkgPT4gc2hvdztcbiAgICBjb25zdCB1cGdyYWRlVGFiID0gdGFiID0+ICh7XG4gICAgICAuLi50YWIsXG4gICAgICBsYWJlbDogdGFiLmxhYmVsIHx8IHRhYi5uYW1lLFxuICAgICAgcGF0aDogZGVjb2RlVVJJQ29tcG9uZW50KHRhYi5wYXRoKVxuICAgIH0pO1xuICAgIGNvbnN0IHJvdXRlVGFicyA9IHRoaXMuJHJvdXRlQ2hhbmdlcy5waXBlKFxuICAgICAgc3dpdGNoTWFwKCgpID0+IHtcbiAgICAgICAgY29uc3Qgcm91dGVzID0gdGhpcy5pbmplY3Rvci5nZXQoJ2M4eVRhYnMnKS5yb3V0ZVRhYnM7XG4gICAgICAgIGNvbnN0IHZpc2liaWxpdHlQcm9taXNlID0gUHJvbWlzZS5hbGwoXG4gICAgICAgICAgcm91dGVzLm1hcCgoeyBjaGVja2luZ1Zpc2liaWxpdHkgfSkgPT4gY2hlY2tpbmdWaXNpYmlsaXR5KVxuICAgICAgICApO1xuICAgICAgICByZXR1cm4gdmlzaWJpbGl0eVByb21pc2UudGhlbigoKSA9PiByb3V0ZXMuZmlsdGVyKG9ubHlWaXNpYmxlKS5tYXAodXBncmFkZVRhYikpO1xuICAgICAgfSksXG4gICAgICBzdGFydFdpdGgoW10pXG4gICAgKTtcbiAgICByZXR1cm4gY29tYmluZUxhdGVzdChbcm91dGVUYWJzLCB0aGlzLiRsaXZlVGFic10pLnBpcGUoXG4gICAgICBtYXAoKFtyb3V0ZSwgbGl2ZV0pID0+IHJvdXRlLmNvbmNhdChsaXZlKSlcbiAgICApO1xuICB9XG5cbiAgZ2V0UXVpY2tMaW5rcygpOiBQcm9taXNlPERvY0xpbmtbXT4ge1xuICAgIGNvbnN0IGM4eVF1aWNrTGlua3MgPSB0aGlzLmluamVjdG9yLmdldCgnYzh5UXVpY2tMaW5rcycpO1xuICAgIHJldHVybiBjOHlRdWlja0xpbmtzLmxpc3QoKTtcbiAgfVxuXG4gIGdldEFjdGlvbkJhckl0ZW1zKCk6IE9ic2VydmFibGU8QWN0aW9uQmFySXRlbT4ge1xuICAgIGNvbnN0IGM4eUFjdGlvbkJhciA9IHRoaXMuaW5qZWN0b3IuZ2V0KCdjOHlBY3Rpb25CYXInKTtcbiAgICBjb25zdCAkcm9vdFNjb3BlID0gdGhpcy5pbmplY3Rvci5nZXQoJyRyb290U2NvcGUnKTtcbiAgICBjb25zdCBnZXRBY3Rpb25CYXJFbGVtZW50cyA9ICgpID0+XG4gICAgICBjOHlBY3Rpb25CYXIuZWxlbWVudHMubWFwKGVsZW1lbnQgPT4gKHtcbiAgICAgICAgcHJpb3JpdHk6IGVsZW1lbnQuZ2V0QXR0cmlidXRlKCdhY3Rpb24tYmFyLXByaW9yaXR5JykgfHwgMCxcbiAgICAgICAgdGVtcGxhdGU6IGVsZW1lbnQsXG4gICAgICAgIHBsYWNlbWVudDogZWxlbWVudC5nZXRBdHRyaWJ1dGUoJ2FjdGlvbi1iYXItcG9zaXRpb24nKSB8fCAncmlnaHQnXG4gICAgICB9KSk7XG4gICAgcmV0dXJuIHRoaXMuZnJvbU5nMUV2ZW50KCRyb290U2NvcGUsICdjOHlBY3Rpb25CYXJDaGFuZ2VkJykucGlwZShcbiAgICAgIHN0YXJ0V2l0aCgxKSxcbiAgICAgIG1hcChnZXRBY3Rpb25CYXJFbGVtZW50cylcbiAgICApO1xuICB9XG5cbiAgZ2V0QnJlYWRjcnVtYnMoKTogT2JzZXJ2YWJsZTxCcmVhZGNydW1iW10+IHtcbiAgICBjb25zdCAkbG9jYXRpb24gPSB0aGlzLmluamVjdG9yLmdldCgnJGxvY2F0aW9uJyk7XG4gICAgY29uc3QgYzh5QnJlYWRjcnVtYnMgPSB0aGlzLmluamVjdG9yLmdldCgnYzh5QnJlYWRjcnVtYnMnKTtcbiAgICBjb25zdCBicmVhZGNydW1ic1VwZGF0ZSQgPSBuZXcgT2JzZXJ2YWJsZShzdWJzY3JpYmVyID0+XG4gICAgICBjOHlCcmVhZGNydW1icy4kb24oJ3VwZGF0ZScsICgpID0+IHN1YnNjcmliZXIubmV4dCgpKVxuICAgICk7XG4gICAgcmV0dXJuIGJyZWFkY3J1bWJzVXBkYXRlJC5waXBlKFxuICAgICAgc3RhcnRXaXRoKDApLFxuICAgICAgc3dpdGNoTWFwKCgpID0+IHtcbiAgICAgICAgY29uc3QgcGF0aCA9ICRsb2NhdGlvbi5wYXRoKCk7XG4gICAgICAgIGNvbnN0IGJyZWFkY3J1bWJzID0gYzh5QnJlYWRjcnVtYnMuZ2V0KHBhdGgpIHx8IHt9O1xuICAgICAgICBjb25zdCBicmVhZGNydW1ic0RhdGEgPSB0aGlzLnJlc29sdmVCcmVhZGNydW1ic0RhdGEoYnJlYWRjcnVtYnMuZGF0YSk7XG4gICAgICAgIHJldHVybiBmcm9tKGJyZWFkY3J1bWJzRGF0YSkucGlwZShcbiAgICAgICAgICBtYXAoKHZhbHVlOiBhbnlbXSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgbGl2ZUJyZWFkY3J1bWJzID0gYzh5QnJlYWRjcnVtYnMuZ2V0TGl2ZUJyZWFkY3J1bWJzKCk7XG4gICAgICAgICAgICB2YWx1ZSA9IHZhbHVlLmNvbmNhdChsaXZlQnJlYWRjcnVtYnMpO1xuICAgICAgICAgICAgcmV0dXJuIHZhbHVlLm1hcChpdGVtcyA9PiAoeyBpdGVtczogaXRlbXMgYXMgQnJlYWRjcnVtYkl0ZW1bXSB9KSBhcyBCcmVhZGNydW1iKTtcbiAgICAgICAgICB9KVxuICAgICAgICApO1xuICAgICAgfSlcbiAgICApO1xuICB9XG5cbiAgcmVzb2x2ZUJyZWFkY3J1bWJzRGF0YShkYXRhKTogT2JzZXJ2YWJsZTxhbnlbXT4ge1xuICAgIHRyeSB7XG4gICAgICByZXR1cm4gdGhpcy5pbmplY3Rvci5pbnZva2UoZGF0YSk7XG4gICAgfSBjYXRjaCAoZXgpIHtcbiAgICAgIC8vIGVtcHR5XG4gICAgfVxuICAgIGlmIChpc0FycmF5KGRhdGEpKSB7XG4gICAgICByZXR1cm4gb2YoW2RhdGFdKTtcbiAgICB9XG4gICAgcmV0dXJuIG9mKFtdKTtcbiAgfVxuXG4gIGdldFNlYXJjaCgpOiBTZWFyY2hbXSB7XG4gICAgY29uc3QgYzh5U2VhcmNoID0gdGhpcy5pbmplY3Rvci5nZXQoJ2M4eVNlYXJjaCcpO1xuICAgIHJldHVybiBjOHlTZWFyY2gubGlzdCgpLm1hcChpdGVtID0+IHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGljb246ICdzZWFyY2gnLFxuICAgICAgICBuYW1lOiBpdGVtLm5hbWUsXG4gICAgICAgIHRlcm06ICcnLFxuICAgICAgICBvblNlYXJjaCgpIHtcbiAgICAgICAgICBpZiAodGhpcy50ZXJtKSB7XG4gICAgICAgICAgICBjOHlTZWFyY2guc2VhcmNoKHRoaXMudGVybSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9IGFzIFNlYXJjaDtcbiAgICB9KTtcbiAgfVxuXG4gIGdldEFjdGlvbnMoKTogT2JzZXJ2YWJsZTxBY3Rpb24+IHtcbiAgICBjb25zdCByZWdpc3RlcmVkQWN0aW9ucyA9IHRoaXMuaW5qZWN0b3IuZ2V0KCdjOHlBY3Rpb25zJykucmVnaXN0ZXJlZEFjdGlvbnM7XG4gICAgcmV0dXJuIG9mKFxuICAgICAgcmVnaXN0ZXJlZEFjdGlvbnNcbiAgICAgICAgLmZpbHRlcihhY3Rpb24gPT4gIWFjdGlvbi5oaWRkZW4pXG4gICAgICAgIC5tYXAoYWN0aW9uID0+ICh7XG4gICAgICAgICAgLy8gVGhlIHByaW9yaXR5IHdhcyByZXZlcnNlZDogQWxpZ25lZCBpdCB0byBkYXNoYm9hcmQsIGhpZ2ggZmlyc3QsIGxvdyBsYXN0LlxuICAgICAgICAgIHByaW9yaXR5OiAoYWN0aW9uLnByaW9yaXR5IHx8IDApICogLTEsXG4gICAgICAgICAgbGFiZWw6IGFjdGlvbi50ZXh0LFxuICAgICAgICAgIGljb246IGFjdGlvbi5pY29uLFxuICAgICAgICAgIGRpc2FibGVkOiBhY3Rpb24uZGlzYWJsZWQsXG4gICAgICAgICAgYWN0aW9uOiAoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLmluamVjdG9yLmludm9rZShhY3Rpb24uYWN0aW9uLCBhY3Rpb24pO1xuICAgICAgICAgIH1cbiAgICAgICAgfSkpXG4gICAgKTtcbiAgfVxuXG4gIGZyb21OZzFFdmVudChvYmosIGV2dCkge1xuICAgIGxldCBzdG9wTGlzdGVuaW5nO1xuICAgIGZ1bmN0aW9uIGFkZChoYW5kbGVyKSB7XG4gICAgICBzdG9wTGlzdGVuaW5nID0gb2JqLiRvbihldnQsIGhhbmRsZXIpO1xuICAgIH1cbiAgICByZXR1cm4gZnJvbUV2ZW50UGF0dGVybihhZGQsICgpID0+IHN0b3BMaXN0ZW5pbmcoKSk7XG4gIH1cblxuICBwcml2YXRlIGhvb2tVc2VyTWVudSgpIHtcbiAgICBjb25zdCB1c2VyTWVudVNlcnZpY2UgPSB0aGlzLmluamVjdG9yLmdldCgnYzh5VXNlck1lbnVTZXJ2aWNlJyk7XG4gICAgY29uc3QgYzh5QWNjZXNzRGVuaWVkID0gdGhpcy5pbmplY3Rvci5nZXQoJ2M4eUFjY2Vzc0RlbmllZCcpO1xuICAgIHVzZXJNZW51U2VydmljZS5hZGQoe1xuICAgICAgaWNvbjogJ2FjY2VzcycsXG4gICAgICBwcmlvcml0eTogMTAsXG4gICAgICBsYWJlbDogZ2V0dGV4dCgnQWNjZXNzIGRlbmllZCByZXF1ZXN0cycpLFxuICAgICAgY2xpY2s6IGM4eUFjY2Vzc0RlbmllZC5zaG93QWNjZXNzRGVuaWVkUmVxdWVzdHNMaXN0XG4gICAgfSk7XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGJyaWRnZVNlcnZpY2VGYWN0b3J5KFxuICBpbmplY3RvcjogYW55LFxuICBhcHBTdGF0ZTogQXBwU3RhdGVTZXJ2aWNlLFxuICByb3V0ZXI6IFJvdXRlcixcbiAgbmdab25lOiBOZ1pvbmUsXG4gIHJvdXRlclNlcnZpY2U6IFJvdXRlclNlcnZpY2UsXG4gIGFjdGlvblNlcnZpY2U6IEFjdGlvblNlcnZpY2UsXG4gIHBsdWdpbnM6IFBsdWdpbnNSZXNvbHZlU2VydmljZVxuKSB7XG4gIHJldHVybiBuZXcgQnJpZGdlU2VydmljZShcbiAgICBpbmplY3RvcixcbiAgICBhcHBTdGF0ZSxcbiAgICByb3V0ZXIsXG4gICAgbmdab25lLFxuICAgIHJvdXRlclNlcnZpY2UsXG4gICAgYWN0aW9uU2VydmljZSxcbiAgICBwbHVnaW5zXG4gICk7XG59XG5cbmV4cG9ydCBjb25zdCBicmlkZ2VTZXJ2aWNlUHJvdmlkZXIgPSB7XG4gIHByb3ZpZGU6IEJyaWRnZVNlcnZpY2UsXG4gIHVzZUZhY3Rvcnk6IGJyaWRnZVNlcnZpY2VGYWN0b3J5LFxuICBkZXBzOiBbXG4gICAgJyRpbmplY3RvcicsXG4gICAgQXBwU3RhdGVTZXJ2aWNlLFxuICAgIFJvdXRlcixcbiAgICBOZ1pvbmUsXG4gICAgUm91dGVyU2VydmljZSxcbiAgICBBY3Rpb25TZXJ2aWNlLFxuICAgIFBsdWdpbnNSZXNvbHZlU2VydmljZVxuICBdXG59O1xuIl19
347
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnJpZGdlLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi91cGdyYWRlL2JyaWRnZS5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFHTCxhQUFhLEVBQ2IsZUFBZSxFQUlmLGNBQWMsRUFDZCxPQUFPLEVBQ1AscUJBQXFCLEVBQ3JCLGFBQWEsRUFHYixXQUFXLEVBQ1osTUFBTSxxQkFBcUIsQ0FBQztBQUM3QixPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBQ3BDLE9BQU8sRUFDTCxlQUFlLEVBQ2YsYUFBYSxFQUNiLElBQUksRUFDSixnQkFBZ0IsRUFDaEIsS0FBSyxFQUNMLFVBQVUsRUFDVixFQUFFLEVBRUgsTUFBTSxNQUFNLENBQUM7QUFDZCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sRUFBRSxHQUFHLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUV2RixPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3ZDLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDeEQsT0FBTyxFQUFFLDBCQUEwQixFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFFbEUsTUFBTSxPQUFPLGFBQWE7SUFPeEIsWUFDUyxRQUFhLEVBQ1osUUFBeUIsRUFDMUIsTUFBYyxFQUNiLE1BQWMsRUFDZCxhQUE0QixFQUM1QixhQUE0QixFQUNwQyxPQUE4QjtRQU52QixhQUFRLEdBQVIsUUFBUSxDQUFLO1FBQ1osYUFBUSxHQUFSLFFBQVEsQ0FBaUI7UUFDMUIsV0FBTSxHQUFOLE1BQU0sQ0FBUTtRQUNiLFdBQU0sR0FBTixNQUFNLENBQVE7UUFDZCxrQkFBYSxHQUFiLGFBQWEsQ0FBZTtRQUM1QixrQkFBYSxHQUFiLGFBQWEsQ0FBZTtRQVJ0QyxjQUFTLEdBQW1CLElBQUksZUFBZSxDQUFD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Z0IsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUMsYUFBYSxFQUFFLENBQUMsQ0FBQztJQUN0RCxDQUFDO0lBRU8sWUFBWTtRQUNsQixNQUFNLGVBQWUsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDO1FBQ2hFLE1BQU0sZUFBZSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLGlCQUFpQixDQUFDLENBQUM7UUFDN0QsZUFBZSxDQUFDLEdBQUcsQ0FBQztZQUNsQixJQUFJLEVBQUUsUUFBUTtZQUNkLFFBQVEsRUFBRSxFQUFFO1lBQ1osS0FBSyxFQUFFLE9BQU8sQ0FBQyx3QkFBd0IsQ0FBQztZQUN4QyxLQUFLLEVBQUUsZUFBZSxDQUFDLDRCQUE0QjtTQUNwRCxDQUFDLENBQUM7SUFDTCxDQUFDO0NBQ0Y7QUFFRCxNQUFNLFVBQVUsb0JBQW9CLENBQ2xDLFFBQWEsRUFDYixRQUF5QixFQUN6QixNQUFjLEVBQ2QsTUFBYyxFQUNkLGFBQTRCLEVBQzVCLGFBQTRCLEVBQzVCLE9BQThCO0lBRTlCLE9BQU8sSUFBSSxhQUFhLENBQ3RCLFFBQVEsRUFDUixRQUFRLEVBQ1IsTUFBTSxFQUNOLE1BQU0sRUFDTixhQUFhLEVBQ2IsYUFBYSxFQUNiLE9BQU8sQ0FDUixDQUFDO0FBQ0osQ0FBQztBQUVELE1BQU0sQ0FBQyxNQUFNLHFCQUFxQixHQUFHO0lBQ25DLE9BQU8sRUFBRSxhQUFhO0lBQ3RCLFVBQVUsRUFBRSxvQkFBb0I7SUFDaEMsSUFBSSxFQUFFO1FBQ0osV0FBVztRQUNYLGVBQWU7UUFDZixNQUFNO1FBQ04sTUFBTTtRQUNOLGFBQWE7UUFDYixhQUFhO1FBQ2IscUJBQXFCO0tBQ3RCO0NBQ0YsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIEFjdGlvbixcbiAgQWN0aW9uQmFySXRlbSxcbiAgQWN0aW9uU2VydmljZSxcbiAgQXBwU3RhdGVTZXJ2aWNlLFxuICBCcmVhZGNydW1iLFxuICBCcmVhZGNydW1iSXRlbSxcbiAgRG9jTGluayxcbiAgRW1wdHlDb21wb25lbnQsXG4gIGdldHRleHQsXG4gIFBsdWdpbnNSZXNvbHZlU2VydmljZSxcbiAgUm91dGVyU2VydmljZSxcbiAgU2VhcmNoLFxuICBUYWIsXG4gIFZpZXdDb250ZXh0XG59IGZyb20gJ0BjOHkvbmd4LWNvbXBvbmVudHMnO1xuaW1wb3J0IHsgaXNBcnJheSB9IGZyb20gJ2xvZGFzaC1lcyc7XG5pbXBvcnQge1xuICBCZWhhdmlvclN1YmplY3QsXG4gIGNvbWJpbmVMYXRlc3QsXG4gIGZyb20sXG4gIGZyb21FdmVudFBhdHRlcm4sXG4gIG1lcmdlLFxuICBPYnNlcnZhYmxlLFxuICBvZixcbiAgU3ViamVjdFxufSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGRlYm91bmNlVGltZSwgZmlsdGVyLCBtYXAsIHN0YXJ0V2l0aCwgc3dpdGNoTWFwLCB0YWtlIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuXG5pbXBvcnQgeyBOZ1pvbmUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEFjdGl2YXRpb25FbmQsIFJvdXRlciB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQgeyBWaWV3Q29udGV4dExlZ2FjeVBhcmFtZXRlciB9IGZyb20gJy4vbmcxL3ZpZXdzLnByb3ZpZGVyJztcblxuZXhwb3J0IGNsYXNzIEJyaWRnZVNlcnZpY2Uge1xuICAkcm91dGVDaGFuZ2VzOiBPYnNlcnZhYmxlPGFueT47XG4gICRuZzFSb3V0ZUNoYW5nZVN1Y2Nlc3M6IE9ic2VydmFibGU8YW55PjtcbiAgJG5nMVJvdXRlQ2hhbmdlU3RhcnQ6IE9ic2VydmFibGU8YW55PjtcbiAgJG5nMVJvdXRlVXBkYXRlOiBPYnNlcnZhYmxlPGFueT47XG4gICRsaXZlVGFiczogU3ViamVjdDxUYWJbXT4gPSBuZXcgQmVoYXZpb3JTdWJqZWN0KFtdKTtcbiAgbmF2aWdhdGlvbk5vZGVzJDogT2JzZXJ2YWJsZTxhbnk+O1xuICBjb25zdHJ1Y3RvcihcbiAgICBwdWJsaWMgaW5qZWN0b3I6IGFueSxcbiAgICBwcml2YXRlIGFwcFN0YXRlOiBBcHBTdGF0ZVNlcnZpY2UsXG4gICAgcHVibGljIHJvdXRlcjogUm91dGVyLFxuICAgIHByaXZhdGUgbmdab25lOiBOZ1pvbmUsXG4gICAgcHJpdmF0ZSByb3V0ZXJTZXJ2aWNlOiBSb3V0ZXJTZXJ2aWNlLFxuICAgIHByaXZhdGUgYWN0aW9uU2VydmljZTogQWN0aW9uU2VydmljZSxcbiAgICBwbHVnaW5zOiBQbHVnaW5zUmVzb2x2ZVNlcnZpY2VcbiAgKSB7XG4gICAgdGhpcy5maXhFMmVJc3N1ZXMoKTtcbiAgICB0aGlzLiRuZzFSb3V0ZUNoYW5nZVN1Y2Nlc3MgPSB0aGlzLmZyb21OZzFFdmVudChcbiAgICAgIHRoaXMuaW5qZWN0b3IuZ2V0KCckcm9vdFNjb3BlJyksXG4gICAgICAnJHJvdXRlQ2hhbmdlU3VjY2VzcydcbiAgICApO1xuICAgIHRoaXMuJG5nMVJvdXRlQ2hhbmdlU3RhcnQgPSB0aGlzLmZyb21OZzFFdmVudChcbiAgICAgIHRoaXMuaW5qZWN0b3IuZ2V0KCckcm9vdFNjb3BlJyksXG4gICAgICAnJHJvdXRlQ2hhbmdlU3RhcnQnXG4gICAgKTtcbiAgICB0aGlzLiRuZzFSb3V0ZVVwZGF0ZSA9IHRoaXMuZnJvbU5nMUV2ZW50KHRoaXMuaW5qZWN0b3IuZ2V0KCckcm9vdFNjb3BlJyksICckcm91dGVVcGRhdGUnKTtcbiAgICB0aGlzLmhvb2tMYW5ndWFnZSgpO1xuICAgIHRoaXMuaG9va1RhYigpO1xuICAgIHRoaXMuaG9va05hdmlnYXRvcigpO1xuICAgIHRoaXMuaG9va1VzZXJNZW51KCk7XG4gICAgdGhpcy5ob29rVmlld1Byb3ZpZGVyKCk7XG4gICAgcGx1Z2lucy5hbGxQbHVnaW5zTG9hZGVkJFxuICAgICAgLnBpcGUoXG4gICAgICAgIGZpbHRlcih0bXAgPT4gISF0bXApLFxuICAgICAgICB0YWtlKDEpXG4gICAgICApXG4gICAgICAuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgdGhpcy5yb3V0ZXIuaW5pdGlhbE5hdmlnYXRpb24oKTtcbiAgICAgIH0pO1xuICAgIHRoaXMubmcxUm91dGVzKCk7XG4gIH1cblxuICBob29rVmlld1Byb3ZpZGVyKCkge1xuICAgIGNvbnN0IGM4eVZpZXdzID0gdGhpcy5pbmplY3Rvci5nZXQoJ2M4eVZpZXdzJyk7XG4gICAgLy8gZml4IHRvIHRyaWdnZXIgYW4gYW5ndWxhcmpzIHJvdXRlIGNoYW5nZSBzdWNjZXNzXG4gICAgLy8gZXZlbnQgb24gY29udGV4dCByb3V0ZSBtYXRjaCB0byBtYWtlIGxlZ2FjeVxuICAgIC8vIHZpZXctcHJvdmlkZXJzIHJlc29sdmUuXG4gICAgYzh5Vmlld3Mud2hlbignL2RldmljZS86aWQnLCB7XG4gICAgICB0ZW1wbGF0ZTogJydcbiAgICB9KTtcbiAgICBjOHlWaWV3cy53aGVuKCcvZ3JvdXAvOmlkJywge1xuICAgICAgdGVtcGxhdGU6ICcnXG4gICAgfSk7XG4gICAgYzh5Vmlld3MuY29udGV4dFZpZXdzLnN1YnNjcmliZShjZmcgPT4gdGhpcy5hZGRSb3V0ZShjZmcpKTtcbiAgfVxuXG4gIGFkZFJvdXRlKGNmZykge1xuICAgIHRoaXMucm91dGVyU2VydmljZS5hZGRSb3V0ZSh7XG4gICAgICBsYWJlbDogY2ZnLmxhYmVsIHx8IGNmZy5uYW1lLFxuICAgICAgcGF0aDogY2ZnLnBhdGgsXG4gICAgICBpY29uOiBjZmcuaWNvbixcbiAgICAgIGNvbnRleHQ6IFZpZXdDb250ZXh0W2NmZy5jb250ZXh0S2V5XSBhcyBWaWV3Q29udGV4dCxcbiAgICAgIHByaW9yaXR5OiBjZmcucHJpb3JpdHksXG4gICAgICBjb21wb25lbnQ6IEVtcHR5Q29tcG9uZW50LFxuICAgICAgZGF0YToge1xuICAgICAgICBzaG93SWY6IGNmZy5zaG93SWZcbiAgICAgICAgICA/IG5neFJvdXRlID0+IHtcbiAgICAgICAgICAgICAgY29uc3QgcGFyYW1zID0ge1xuICAgICAgICAgICAgICAgIC4uLm5neFJvdXRlLnBhcmFtcyxcbiAgICAgICAgICAgICAgICBbVmlld0NvbnRleHRMZWdhY3lQYXJhbWV0ZXJbY2ZnLmNvbnRleHRLZXldXTogbmd4Um91dGUucGFyYW1zLmlkXG4gICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgIGNvbnN0IHNob3dJZlJlc3VsdCA9IHRoaXMuaW5qZWN0b3IuaW52b2tlKGNmZy5zaG93SWYsIHVuZGVmaW5lZCwge1xuICAgICAgICAgICAgICAgICRyb3V0ZVBhcmFtczogcGFyYW1zXG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAvLyBtYWtlIHN1cmUgc2hvd0lmIHJlc3VsdCBpcyBhIHByb21pc2Ugd2l0aCBib29sZWFuIHJlc3VsdDpcbiAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuaW5qZWN0b3IuZ2V0KCckcScpLndoZW4oc2hvd0lmUmVzdWx0KS50aGVuKEJvb2xlYW4pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIDogdW5kZWZpbmVkXG4gICAgICB9LFxuICAgICAgLi4uKGNmZy5mZWF0dXJlSWQgJiYgeyBmZWF0dXJlSWQ6IGNmZy5mZWF0dXJlSWQgfSlcbiAgICB9KTtcblxuICAgIGlmIChjZmcucnVuUGhhc2UpIHtcbiAgICAgIHRoaXMucm91dGVyU2VydmljZS5yZWZyZXNoKCk7XG4gICAgfVxuICB9XG5cbiAgbmcxUm91dGVzKCkge1xuICAgIGNvbnN0IHRlbXBsYXRlID0gJyc7XG4gICAgY29uc3QgZmFsbGJhY2tSb3V0ZXMgPSBbXTtcblxuICAgIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTogZm9yaW5cbiAgICBmb3IgKGNvbnN0IGNvbnRleHQgaW4gVmlld0NvbnRleHQpIHtcbiAgICAgIGNvbnN0IHBhdGggPSBWaWV3Q29udGV4dFtjb250ZXh0XS5tYXRjaCgvKFxcdyspXFwvLylbMV07XG4gICAgICBjb25zdCByZWdleHAgPSBuZXcgUmVnRXhwKGBeLyR7cGF0aH0vKD86KFteL10rKSkuKiRgKTtcbiAgICAgIGZhbGxiYWNrUm91dGVzLnB1c2goe1xuICAgICAgICBrZXlzOiBbeyBuYW1lOiBWaWV3Q29udGV4dExlZ2FjeVBhcmFtZXRlcltjb250ZXh0XSwgb3B0aW9uYWw6IGZhbHNlIH1dLFxuICAgICAgICByZWdleHAsXG4gICAgICAgIHRlbXBsYXRlXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBXaGVuIGFzc2V0IGRldGFpbCByb3V0ZXMgKC9kZXZpY2UvOmlkLCAgL2dyb3VwLzppZCkgYXJlIG1hdGNoZWQgaW4gQW5ndWxhciBSb3V0ZXIsIG5nUm91dGUgaW5cbiAgICAgKiBhbmd1bGFyLmpzIG11c3QgYWxzbyBoYXZlIG1hdGNoaW5nIGdlbmVyaWMgcm91dGVzIHNvIHRoYXQgdGhlIGlkcyBjYW4gYmUgZXh0cmFjdGVkIGZyb20gdGhlIHBhdGhzIGFuZFxuICAgICAqIGluamVjdGVkIGluIG11bHRpcGxlIGNhbGxzIChzaG93SWYsIGM4eUFjdGlvbnMsIGV0YykgYXMgcHJvcGVydGllcyBvZiAkcm91dGVQYXJhbXMuXG4gICAgICpcbiAgICAgKiBUaGUgZnVuY3Rpb24gaW4gc3JjL25nUm91dGUvcm91dGUuanMgKGFuZ3VsYXIuanMpIHdoZXJlIHRoZSByb3V0ZXMgYXJlIG1hdGNoZWQgaXMgY2FsbGVkIHBhcnNlUm91dGUoKS4gVGhpc1xuICAgICAqIGZ1bmN0aW9uIGNhbGxzIGFuZ3VsYXIuZm9yRWFjaCBhbmQgaW4gdHVybiB0aGlzIGZ1bmN0aW9uIGNoZWNrcyBmb3IgdGhlIHByZXNlbmNlIG9mIGEgZm9yRWFjaCBtZXRob2QgYmVmb3JlXG4gICAgICogdHJ5aW5nIG9iamVjdCBrZXkgaXRlcmF0aW9uLlxuICAgICAqIEJ5IGF0dGFjaGluZyBhIG5vbiBlbnVtZXJhYmxlIGZvckVhY2ggbWV0aG9kIHRvIHRoZSByb3V0ZXMgb2JqZWN0IHdlIGd1YXJhbnRlZSB0aGF0IHRoZSBmYWxsYmFjayBnZW5lcmljIHJvdXRlc1xuICAgICAqIGFyZSBvbmx5IG1hdGNoZWQgYWZ0ZXIgYW55IG90aGVyIHJlZ2lzdGVyZWQgdGhyb3VnaCAkcm91dGVQcm92aWRlci53aGVuLlxuICAgICAqL1xuICAgIGNvbnN0ICRyb3V0ZSA9IHRoaXMuaW5qZWN0b3IuZ2V0KCckcm91dGUnKTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoJHJvdXRlLnJvdXRlcywgJ2ZvckVhY2gnLCB7XG4gICAgICAvLyBtYWtlIG5vbiBlbnVtZXJhYmxlXG4gICAgICB2YWx1ZTogZnVuY3Rpb24gZm9yRWFjaChpdGVyYXRvciwgY29udGV4dCkge1xuICAgICAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6IGZvcmluXG4gICAgICAgIGZvciAoY29uc3Qga2V5IGluIHRoaXMpIHtcbiAgICAgICAgICBpdGVyYXRvci5jYWxsKGNvbnRleHQsIHRoaXNba2V5XSwga2V5LCB0aGlzKTtcbiAgICAgICAgfVxuICAgICAgICBmYWxsYmFja1JvdXRlcy5mb3JFYWNoKHIgPT4gaXRlcmF0b3IuY2FsbChjb250ZXh0LCByKSk7XG4gICAgICB9LFxuICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG5cbiAgICAvKipcbiAgICAgKiBTb21lIGZ1bmN0aW9ucyB1c2UgdGhlIGN1cnJlbnQgY29udGV4dC4gQXMgc29tZSBwYXJ0cyBhcmUgdXBncmFkZWQgYW5kIHNvbWUgbm90LCB0aGUgZm9sbG93aW5nIHVwZGF0ZXMgdGhlXG4gICAgICogYW5ndWxhcmpzIGdldENvbnRleHQgZnVuY3Rpb24gdG8gcmVzb2x2ZSBhbHdheXMgdGhlIHJpZ2h0IGNvbnRleHQuXG4gICAgICovXG4gICAgY29uc3QgYzh5VWlVdGlsID0gdGhpcy5pbmplY3Rvci5nZXQoJ2M4eVVpVXRpbCcpO1xuICAgIGNvbnN0IF9nZXRDb250ZXh0ID0gYzh5VWlVdGlsLmdldENvbnRleHQ7XG4gICAgdGhpcy5yb3V0ZXIuZXZlbnRzXG4gICAgICAucGlwZShmaWx0ZXIoZXZlbnQgPT4gZXZlbnQgaW5zdGFuY2VvZiBBY3RpdmF0aW9uRW5kKSlcbiAgICAgIC5zdWJzY3JpYmUoKGV2ZW50OiBBY3RpdmF0aW9uRW5kKSA9PiB7XG4gICAgICAgIGlmIChldmVudC5zbmFwc2hvdC5yb3V0ZUNvbmZpZy5wYXRoID09PSAnKionKSB7XG4gICAgICAgICAgYzh5VWlVdGlsLmdldENvbnRleHQgPSBfZ2V0Q29udGV4dDtcbiAgICAgICAgfSBlbHNlIGlmIChldmVudC5zbmFwc2hvdC5kYXRhICYmIGV2ZW50LnNuYXBzaG90LmRhdGEuY29udGV4dCkge1xuICAgICAgICAgIGM4eVVpVXRpbC5nZXRDb250ZXh0ID0gKCkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgY29udGV4dDogZXZlbnQuc25hcHNob3QuZGF0YS5jb250ZXh0LnJlcGxhY2UoJy86aWQnLCAnJyksXG4gICAgICAgICAgICAgIGlkOiBldmVudC5zbmFwc2hvdC5kYXRhLmNvbnRleHREYXRhLmlkLFxuICAgICAgICAgICAgICBjb250ZXh0RGF0YTogZXZlbnQuc25hcHNob3QuZGF0YS5jb250ZXh0RGF0YVxuICAgICAgICAgICAgfTtcbiAgICAgICAgICB9O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGM4eVVpVXRpbC5nZXRDb250ZXh0ID0gKCkgPT4gKHsgY29udGV4dDogbnVsbCwgaWQ6IG51bGwgfSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICB9XG5cbiAgZml4RTJlSXNzdWVzKCkge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCB7IG5nWm9uZSB9ID0gdGhpcztcbiAgICAgIGNvbnN0IHsgVXRpbHMgfSA9ICh3aW5kb3cgYXMgYW55KS5vcmcuY29tZXRkO1xuICAgICAgY29uc3QgdGltZW91dEZuID0gVXRpbHMuc2V0VGltZW91dDtcbiAgICAgIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTpvbmx5LWFycm93LWZ1bmN0aW9uc1xuICAgICAgVXRpbHMuc2V0VGltZW91dCA9IGZ1bmN0aW9uICguLi5hcmdzKSB7XG4gICAgICAgIHJldHVybiBuZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCkgPT4gdGltZW91dEZuLmFwcGx5KFV0aWxzLCBhcmdzKSk7XG4gICAgICB9O1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIC8vIGRvIG5vdGhpbmdcbiAgICB9XG5cbiAgICB0cnkge1xuICAgICAgY29uc3QgeyBhY2UgfSA9IHdpbmRvdyBhcyBhbnk7XG4gICAgICBjb25zdCBlZGl0Rm4gPSBhY2UuZWRpdDtcbiAgICAgIGNvbnN0IHsgbmdab25lIH0gPSB0aGlzO1xuICAgICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOm9ubHktYXJyb3ctZnVuY3Rpb25zXG4gICAgICBhY2UuZWRpdCA9IGZ1bmN0aW9uICguLi5hcmdzKSB7XG4gICAgICAgIHJldHVybiBuZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCkgPT4gZWRpdEZuLmFwcGx5KGFjZSwgYXJncykpO1xuICAgICAgfTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICAvLyBkbyBub3RoaW5nXG4gICAgfVxuICB9XG5cbiAgaG9va0xhbmd1YWdlKCkge1xuICAgIGxldCBmaXJzdCA9IHRydWU7XG4gICAgdGhpcy5hcHBTdGF0ZVxuICAgICAgLm1hcChzdG9yZSA9PiBzdG9yZS5sYW5nKVxuICAgICAgLnN1YnNjcmliZShsYW5nID0+IHtcbiAgICAgICAgdGhpcy5pbmplY3Rvci5nZXQoJ2M4eUxvY2FsZXMnKS5zd2l0Y2hUb0xhbmd1YWdlKGxhbmcpO1xuICAgICAgICBpZiAoIWZpcnN0KSB7XG4gICAgICAgICAgdGhpcy5pbmplY3Rvci5nZXQoJyRyb290U2NvcGUnKS4kYXBwbHkoKTtcbiAgICAgICAgfVxuICAgICAgICBmaXJzdCA9IGZhbHNlO1xuICAgICAgfSk7XG4gIH1cblxuICBob29rVGFiKCkge1xuICAgIC8vIEp1c3QgZm9yIGluc3RhbnRpYXRpb24gb2YgdGhlIGM4eUFjdGlvbiBzZXJ2aWNlXG4gICAgdGhpcy5pbmplY3Rvci5nZXQoJ2M4eUFjdGlvbnMnKTtcbiAgICBjb25zdCAkbG9jYXRpb24gPSB0aGlzLmluamVjdG9yLmdldCgnJGxvY2F0aW9uJyk7XG4gICAgY29uc3QgYzh5VGFicyA9IHRoaXMuaW5qZWN0b3IuZ2V0KCdjOHlUYWJzJyk7XG4gICAgbGV0IGxpdmVUYWJzID0gW107XG4gICAgYzh5VGFicy5hZGRUYWIgPSB0YWIgPT4ge1xuICAgICAgbGl2ZVRhYnMucHVzaCh7XG4gICAgICAgIC4uLnRhYixcbiAgICAgICAgbGFiZWw6IHRhYi5sYWJlbCB8fCB0YWIubmFtZSxcbiAgICAgICAgcGF0aDogZGVjb2RlVVJJQ29tcG9uZW50KHRhYi5wYXRoKVxuICAgICAgfSk7XG4gICAgICB0aGlzLiRsaXZlVGFicy5uZXh0KGxpdmVUYWJzKTtcbiAgICB9O1xuICAgIHRoaXMuJG5nMVJvdXRlQ2hhbmdlU3RhcnQuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgIGxpdmVUYWJzID0gW107XG4gICAgICB0aGlzLiRsaXZlVGFicy5uZXh0KGxpdmVUYWJzKTtcbiAgICB9KTtcblxuICAgIGNvbnN0IHN5bmNSb3V0ZXJzID0gKCkgPT4ge1xuICAgICAgY29uc3QgcGF0aCA9ICRsb2NhdGlvbi5wYXRoKCk7XG5cbiAgICAgIC8vIERvbid0IHN5bmMgaWYgQW5ndWxhciBSb3V0ZXIgaXMgdXNpbmcgc2Vjb25kYXJ5IG91dGxldHNcbiAgICAgIC8vIChlLmcuLCAvZGV2aWNlLzEyMy8oZGFzaGJvYXJkLWRldGFpbHM6Z2VuZXJhbCkpXG4gICAgICAvLyBMZXQgQW5ndWxhciBSb3V0ZXIgaGFuZGxlIHRoZXNlIGFkdmFuY2VkIG5hdmlnYXRpb24gc2NlbmFyaW9zXG4gICAgICBpZiAodGhpcy5yb3V0ZXIudXJsLmluY2x1ZGVzKCcoJykgJiYgdGhpcy5yb3V0ZXIudXJsLmluY2x1ZGVzKCc6JykpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICAvLyBPbmx5IHN5bmMgaWYgcGF0aHMgZGlmZmVyIGFuZCBpbml0aWFsIG5hdmlnYXRpb24gaXMgY29tcGxldGVcbiAgICAgIGlmICh0aGlzLnJvdXRlci51cmwgIT09IHBhdGgpIHtcbiAgICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUocGF0aCA9PT0gJy8nID8gJycgOiBwYXRoLnNwbGl0KCcvJyksIHtcbiAgICAgICAgICBxdWVyeVBhcmFtczogJGxvY2F0aW9uLnNlYXJjaCgpLFxuICAgICAgICAgIHNraXBMb2NhdGlvbkNoYW5nZTogdHJ1ZVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLmFjdGlvblNlcnZpY2UpIHtcbiAgICAgICAgdGhpcy5hY3Rpb25TZXJ2aWNlLnJlZnJlc2goKTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgLy8gTGlzdGVuIHRvICRyb3V0ZUNoYW5nZVN1Y2Nlc3MgKGZ1bGwgbmF2aWdhdGlvbiAtIGFsd2F5cyBzeW5jKVxuICAgIHRoaXMuJG5nMVJvdXRlQ2hhbmdlU3VjY2Vzcy5zdWJzY3JpYmUoc3luY1JvdXRlcnMpO1xuICAgIC8vIExpc3RlbiB0byAkcm91dGVVcGRhdGUgKHNraXAgaWYgcXVlcnktcGFyYW0tb25seSlcbiAgICB0aGlzLiRuZzFSb3V0ZVVwZGF0ZVxuICAgICAgLnBpcGUoXG4gICAgICAgIGZpbHRlcigoKSA9PiB7XG4gICAgICAgICAgY29uc3QgcGF0aCA9ICRsb2NhdGlvbi5wYXRoKCk7XG4gICAgICAgICAgY29uc3QgYW5ndWxhclBhdGggPSB0aGlzLnJvdXRlci51cmwuc3BsaXQoJz8nKVswXTtcbiAgICAgICAgICAvLyBPbmx5IHByb2Nlc3MgaWYgcGF0aCBhY3R1YWxseSBjaGFuZ2VkIChub3QganVzdCBxdWVyeSBwYXJhbXMpXG4gICAgICAgICAgcmV0dXJuIGFuZ3VsYXJQYXRoICE9PSBwYXRoO1xuICAgICAgICB9KVxuICAgICAgKVxuICAgICAgLnN1YnNjcmliZShzeW5jUm91dGVycyk7XG4gICAgdGhpcy4kcm91dGVDaGFuZ2VzID0gbWVyZ2UoXG4gICAgICB0aGlzLiRuZzFSb3V0ZUNoYW5nZVN1Y2Nlc3MsXG4gICAgICB0aGlzLmZyb21OZzFFdmVudChjOHlUYWJzLCBjOHlUYWJzLkVWRU5UX1VQREFURSksXG4gICAgICBvZigxKVxuICAgICkucGlwZShkZWJvdW5jZVRpbWUoMTAwKSk7XG4gIH1cblxuICBob29rTmF2aWdhdG9yKCkge1xuICAgIHRoaXMubmF2aWdhdGlvbk5vZGVzJCA9IHRoaXMuaW5qZWN0b3IuZ2V0KCdjOHlOYXZpZ2F0b3InKS5yb290Tm9kZXMkO1xuICB9XG5cbiAgZ2V0VGFicygpOiBPYnNlcnZhYmxlPGFueT4ge1xuICAgIGNvbnN0IG9ubHlWaXNpYmxlID0gKHsgc2hvdyB9KSA9PiBzaG93O1xuICAgIGNvbnN0IHVwZ3JhZGVUYWIgPSB0YWIgPT4gKHtcbiAgICAgIC4uLnRhYixcbiAgICAgIGxhYmVsOiB0YWIubGFiZWwgfHwgdGFiLm5hbWUsXG4gICAgICBwYXRoOiBkZWNvZGVVUklDb21wb25lbnQodGFiLnBhdGgpXG4gICAgfSk7XG4gICAgY29uc3Qgcm91dGVUYWJzID0gdGhpcy4kcm91dGVDaGFuZ2VzLnBpcGUoXG4gICAgICBzd2l0Y2hNYXAoKCkgPT4ge1xuICAgICAgICBjb25zdCByb3V0ZXMgPSB0aGlzLmluamVjdG9yLmdldCgnYzh5VGFicycpLnJvdXRlVGFicztcbiAgICAgICAgY29uc3QgdmlzaWJpbGl0eVByb21pc2UgPSBQcm9taXNlLmFsbChcbiAgICAgICAgICByb3V0ZXMubWFwKCh7IGNoZWNraW5nVmlzaWJpbGl0eSB9KSA9PiBjaGVja2luZ1Zpc2liaWxpdHkpXG4gICAgICAgICk7XG4gICAgICAgIHJldHVybiB2aXNpYmlsaXR5UHJvbWlzZS50aGVuKCgpID0+IHJvdXRlcy5maWx0ZXIob25seVZpc2libGUpLm1hcCh1cGdyYWRlVGFiKSk7XG4gICAgICB9KSxcbiAgICAgIHN0YXJ0V2l0aChbXSlcbiAgICApO1xuICAgIHJldHVybiBjb21iaW5lTGF0ZXN0KFtyb3V0ZVRhYnMsIHRoaXMuJGxpdmVUYWJzXSkucGlwZShcbiAgICAgIG1hcCgoW3JvdXRlLCBsaXZlXSkgPT4gcm91dGUuY29uY2F0KGxpdmUpKVxuICAgICk7XG4gIH1cblxuICBnZXRRdWlja0xpbmtzKCk6IFByb21pc2U8RG9jTGlua1tdPiB7XG4gICAgY29uc3QgYzh5UXVpY2tMaW5rcyA9IHRoaXMuaW5qZWN0b3IuZ2V0KCdjOHlRdWlja0xpbmtzJyk7XG4gICAgcmV0dXJuIGM4eVF1aWNrTGlua3MubGlzdCgpO1xuICB9XG5cbiAgZ2V0QWN0aW9uQmFySXRlbXMoKTogT2JzZXJ2YWJsZTxBY3Rpb25CYXJJdGVtPiB7XG4gICAgY29uc3QgYzh5QWN0aW9uQmFyID0gdGhpcy5pbmplY3Rvci5nZXQoJ2M4eUFjdGlvbkJhcicpO1xuICAgIGNvbnN0ICRyb290U2NvcGUgPSB0aGlzLmluamVjdG9yLmdldCgnJHJvb3RTY29wZScpO1xuICAgIGNvbnN0IGdldEFjdGlvbkJhckVsZW1lbnRzID0gKCkgPT5cbiAgICAgIGM4eUFjdGlvbkJhci5lbGVtZW50cy5tYXAoZWxlbWVudCA9PiAoe1xuICAgICAgICBwcmlvcml0eTogZWxlbWVudC5nZXRBdHRyaWJ1dGUoJ2FjdGlvbi1iYXItcHJpb3JpdHknKSB8fCAwLFxuICAgICAgICB0ZW1wbGF0ZTogZWxlbWVudCxcbiAgICAgICAgcGxhY2VtZW50OiBlbGVtZW50LmdldEF0dHJpYnV0ZSgnYWN0aW9uLWJhci1wb3NpdGlvbicpIHx8ICdyaWdodCdcbiAgICAgIH0pKTtcbiAgICByZXR1cm4gdGhpcy5mcm9tTmcxRXZlbnQoJHJvb3RTY29wZSwgJ2M4eUFjdGlvbkJhckNoYW5nZWQnKS5waXBlKFxuICAgICAgc3RhcnRXaXRoKDEpLFxuICAgICAgbWFwKGdldEFjdGlvbkJhckVsZW1lbnRzKVxuICAgICk7XG4gIH1cblxuICBnZXRCcmVhZGNydW1icygpOiBPYnNlcnZhYmxlPEJyZWFkY3J1bWJbXT4ge1xuICAgIGNvbnN0ICRsb2NhdGlvbiA9IHRoaXMuaW5qZWN0b3IuZ2V0KCckbG9jYXRpb24nKTtcbiAgICBjb25zdCBjOHlCcmVhZGNydW1icyA9IHRoaXMuaW5qZWN0b3IuZ2V0KCdjOHlCcmVhZGNydW1icycpO1xuICAgIGNvbnN0IGJyZWFkY3J1bWJzVXBkYXRlJCA9IG5ldyBPYnNlcnZhYmxlKHN1YnNjcmliZXIgPT5cbiAgICAgIGM4eUJyZWFkY3J1bWJzLiRvbigndXBkYXRlJywgKCkgPT4gc3Vic2NyaWJlci5uZXh0KCkpXG4gICAgKTtcbiAgICByZXR1cm4gYnJlYWRjcnVtYnNVcGRhdGUkLnBpcGUoXG4gICAgICBzdGFydFdpdGgoMCksXG4gICAgICBzd2l0Y2hNYXAoKCkgPT4ge1xuICAgICAgICBjb25zdCBwYXRoID0gJGxvY2F0aW9uLnBhdGgoKTtcbiAgICAgICAgY29uc3QgYnJlYWRjcnVtYnMgPSBjOHlCcmVhZGNydW1icy5nZXQocGF0aCkgfHwge307XG4gICAgICAgIGNvbnN0IGJyZWFkY3J1bWJzRGF0YSA9IHRoaXMucmVzb2x2ZUJyZWFkY3J1bWJzRGF0YShicmVhZGNydW1icy5kYXRhKTtcbiAgICAgICAgcmV0dXJuIGZyb20oYnJlYWRjcnVtYnNEYXRhKS5waXBlKFxuICAgICAgICAgIG1hcCgodmFsdWU6IGFueVtdKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBsaXZlQnJlYWRjcnVtYnMgPSBjOHlCcmVhZGNydW1icy5nZXRMaXZlQnJlYWRjcnVtYnMoKTtcbiAgICAgICAgICAgIHZhbHVlID0gdmFsdWUuY29uY2F0KGxpdmVCcmVhZGNydW1icyk7XG4gICAgICAgICAgICByZXR1cm4gdmFsdWUubWFwKGl0ZW1zID0+ICh7IGl0ZW1zOiBpdGVtcyBhcyBCcmVhZGNydW1iSXRlbVtdIH0pIGFzIEJyZWFkY3J1bWIpO1xuICAgICAgICAgIH0pXG4gICAgICAgICk7XG4gICAgICB9KVxuICAgICk7XG4gIH1cblxuICByZXNvbHZlQnJlYWRjcnVtYnNEYXRhKGRhdGEpOiBPYnNlcnZhYmxlPGFueVtdPiB7XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiB0aGlzLmluamVjdG9yLmludm9rZShkYXRhKTtcbiAgICB9IGNhdGNoIChleCkge1xuICAgICAgLy8gZW1wdHlcbiAgICB9XG4gICAgaWYgKGlzQXJyYXkoZGF0YSkpIHtcbiAgICAgIHJldHVybiBvZihbZGF0YV0pO1xuICAgIH1cbiAgICByZXR1cm4gb2YoW10pO1xuICB9XG5cbiAgZ2V0U2VhcmNoKCk6IFNlYXJjaFtdIHtcbiAgICBjb25zdCBjOHlTZWFyY2ggPSB0aGlzLmluamVjdG9yLmdldCgnYzh5U2VhcmNoJyk7XG4gICAgcmV0dXJuIGM4eVNlYXJjaC5saXN0KCkubWFwKGl0ZW0gPT4ge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgaWNvbjogJ3NlYXJjaCcsXG4gICAgICAgIG5hbWU6IGl0ZW0ubmFtZSxcbiAgICAgICAgdGVybTogJycsXG4gICAgICAgIG9uU2VhcmNoKCkge1xuICAgICAgICAgIGlmICh0aGlzLnRlcm0pIHtcbiAgICAgICAgICAgIGM4eVNlYXJjaC5zZWFyY2godGhpcy50ZXJtKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0gYXMgU2VhcmNoO1xuICAgIH0pO1xuICB9XG5cbiAgZ2V0QWN0aW9ucygpOiBPYnNlcnZhYmxlPEFjdGlvbj4ge1xuICAgIGNvbnN0IHJlZ2lzdGVyZWRBY3Rpb25zID0gdGhpcy5pbmplY3Rvci5nZXQoJ2M4eUFjdGlvbnMnKS5yZWdpc3RlcmVkQWN0aW9ucztcbiAgICByZXR1cm4gb2YoXG4gICAgICByZWdpc3RlcmVkQWN0aW9uc1xuICAgICAgICAuZmlsdGVyKGFjdGlvbiA9PiAhYWN0aW9uLmhpZGRlbilcbiAgICAgICAgLm1hcChhY3Rpb24gPT4gKHtcbiAgICAgICAgICAvLyBUaGUgcHJpb3JpdHkgd2FzIHJldmVyc2VkOiBBbGlnbmVkIGl0IHRvIGRhc2hib2FyZCwgaGlnaCBmaXJzdCwgbG93IGxhc3QuXG4gICAgICAgICAgcHJpb3JpdHk6IChhY3Rpb24ucHJpb3JpdHkgfHwgMCkgKiAtMSxcbiAgICAgICAgICBsYWJlbDogYWN0aW9uLnRleHQsXG4gICAgICAgICAgaWNvbjogYWN0aW9uLmljb24sXG4gICAgICAgICAgZGlzYWJsZWQ6IGFjdGlvbi5kaXNhYmxlZCxcbiAgICAgICAgICBhY3Rpb246ICgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuaW5qZWN0b3IuaW52b2tlKGFjdGlvbi5hY3Rpb24sIGFjdGlvbik7XG4gICAgICAgICAgfVxuICAgICAgICB9KSlcbiAgICApO1xuICB9XG5cbiAgZnJvbU5nMUV2ZW50KG9iaiwgZXZ0KSB7XG4gICAgbGV0IHN0b3BMaXN0ZW5pbmc7XG4gICAgZnVuY3Rpb24gYWRkKGhhbmRsZXIpIHtcbiAgICAgIHN0b3BMaXN0ZW5pbmcgPSBvYmouJG9uKGV2dCwgaGFuZGxlcik7XG4gICAgfVxuICAgIHJldHVybiBmcm9tRXZlbnRQYXR0ZXJuKGFkZCwgKCkgPT4gc3RvcExpc3RlbmluZygpKTtcbiAgfVxuXG4gIHByaXZhdGUgaG9va1VzZXJNZW51KCkge1xuICAgIGNvbnN0IHVzZXJNZW51U2VydmljZSA9IHRoaXMuaW5qZWN0b3IuZ2V0KCdjOHlVc2VyTWVudVNlcnZpY2UnKTtcbiAgICBjb25zdCBjOHlBY2Nlc3NEZW5pZWQgPSB0aGlzLmluamVjdG9yLmdldCgnYzh5QWNjZXNzRGVuaWVkJyk7XG4gICAgdXNlck1lbnVTZXJ2aWNlLmFkZCh7XG4gICAgICBpY29uOiAnYWNjZXNzJyxcbiAgICAgIHByaW9yaXR5OiAxMCxcbiAgICAgIGxhYmVsOiBnZXR0ZXh0KCdBY2Nlc3MgZGVuaWVkIHJlcXVlc3RzJyksXG4gICAgICBjbGljazogYzh5QWNjZXNzRGVuaWVkLnNob3dBY2Nlc3NEZW5pZWRSZXF1ZXN0c0xpc3RcbiAgICB9KTtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gYnJpZGdlU2VydmljZUZhY3RvcnkoXG4gIGluamVjdG9yOiBhbnksXG4gIGFwcFN0YXRlOiBBcHBTdGF0ZVNlcnZpY2UsXG4gIHJvdXRlcjogUm91dGVyLFxuICBuZ1pvbmU6IE5nWm9uZSxcbiAgcm91dGVyU2VydmljZTogUm91dGVyU2VydmljZSxcbiAgYWN0aW9uU2VydmljZTogQWN0aW9uU2VydmljZSxcbiAgcGx1Z2luczogUGx1Z2luc1Jlc29sdmVTZXJ2aWNlXG4pIHtcbiAgcmV0dXJuIG5ldyBCcmlkZ2VTZXJ2aWNlKFxuICAgIGluamVjdG9yLFxuICAgIGFwcFN0YXRlLFxuICAgIHJvdXRlcixcbiAgICBuZ1pvbmUsXG4gICAgcm91dGVyU2VydmljZSxcbiAgICBhY3Rpb25TZXJ2aWNlLFxuICAgIHBsdWdpbnNcbiAgKTtcbn1cblxuZXhwb3J0IGNvbnN0IGJyaWRnZVNlcnZpY2VQcm92aWRlciA9IHtcbiAgcHJvdmlkZTogQnJpZGdlU2VydmljZSxcbiAgdXNlRmFjdG9yeTogYnJpZGdlU2VydmljZUZhY3RvcnksXG4gIGRlcHM6IFtcbiAgICAnJGluamVjdG9yJyxcbiAgICBBcHBTdGF0ZVNlcnZpY2UsXG4gICAgUm91dGVyLFxuICAgIE5nWm9uZSxcbiAgICBSb3V0ZXJTZXJ2aWNlLFxuICAgIEFjdGlvblNlcnZpY2UsXG4gICAgUGx1Z2luc1Jlc29sdmVTZXJ2aWNlXG4gIF1cbn07XG4iXX0=
@@ -115,11 +115,11 @@ class TrackingMarkerPopupComponent {
115
115
  }
116
116
  }
117
117
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: TrackingMarkerPopupComponent, deps: [{ token: TrackingService }], target: i0.ɵɵFactoryTarget.Component }); }
118
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.9", type: TrackingMarkerPopupComponent, isStandalone: true, selector: "c8y-tracking-marker-popup", inputs: { context: "context" }, ngImport: i0, template: "<div class=\"map-marker\">\n <a\n class=\"text-truncate text-14 text-medium p-0 m-b-8 deviceLink\"\n [title]=\"context?.name\"\n *ngIf=\"isDevice\"\n [routerLink]=\"['/device/', context?.id]\"\n >\n {{ context?.name }}\n </a>\n <div\n class=\"m-b-8\"\n ng-if=\"lastUpdated\"\n >\n <p class=\"m-0\">{{ 'Position:' | translate }}</p>\n <span class=\"text-muted\">\n {{ context?.c8y_Position?.lat + ', ' + context?.c8y_Position?.lng }}\n </span>\n <p class=\"m-0 p-t-4\">{{ 'Date and time:' | translate }}</p>\n <span class=\"text-muted\">{{ date | c8yDate }}</span>\n </div>\n\n <ng-container *ngIf=\"isDevice\">\n <div class=\"d-flex a-i-center\">\n <label\n class=\"c8y-switch\"\n for=\"switch\"\n >\n <input\n id=\"switch\"\n type=\"checkbox\"\n [checked]=\"trackingService.trackVisible\"\n (change)=\"trackingService.toggleTrack()\"\n />\n <span></span>\n </label>\n <div class=\"description p-b-0\">\n {{ 'Show track' | translate }}\n </div>\n </div>\n </ng-container>\n</div>\n", dependencies: [{ kind: "ngmodule", type: CoreModule }, { kind: "pipe", type: i2.C8yTranslatePipe, name: "translate" }, { kind: "directive", type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "pipe", type: i2.DatePipe, name: "c8yDate" }, { kind: "ngmodule", type: RouterModule }, { kind: "directive", type: i3.RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "ngmodule", type: FormsModule }] }); }
118
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.9", type: TrackingMarkerPopupComponent, isStandalone: true, selector: "c8y-tracking-marker-popup", inputs: { context: "context" }, ngImport: i0, template: "<div class=\"map-marker\">\n @if (isDevice) {\n <a\n class=\"text-truncate text-14 text-medium p-0 m-b-8 deviceLink\"\n [title]=\"context?.name\"\n [routerLink]=\"['/device/', context?.id]\"\n >\n {{ context?.name }}\n </a>\n }\n <div\n class=\"m-b-8\"\n ng-if=\"lastUpdated\"\n >\n <p class=\"m-0\">{{ 'Position:' | translate }}</p>\n <span class=\"text-muted\">\n {{ context?.c8y_Position?.lat + ', ' + context?.c8y_Position?.lng }}\n </span>\n <p class=\"m-0 p-t-4\">{{ 'Date and time:' | translate }}</p>\n <span class=\"text-muted\">{{ date | c8yDate }}</span>\n </div>\n\n <ng-container *ngIf=\"isDevice\">\n <div class=\"d-flex a-i-center\">\n <label\n class=\"c8y-switch\"\n for=\"switch\"\n >\n <input\n id=\"switch\"\n type=\"checkbox\"\n [checked]=\"trackingService.trackVisible\"\n (change)=\"trackingService.toggleTrack()\"\n />\n <span></span>\n </label>\n <div class=\"description p-b-0\">\n {{ 'Show track' | translate }}\n </div>\n </div>\n </ng-container>\n</div>\n", dependencies: [{ kind: "ngmodule", type: CoreModule }, { kind: "pipe", type: i2.C8yTranslatePipe, name: "translate" }, { kind: "directive", type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "pipe", type: i2.DatePipe, name: "c8yDate" }, { kind: "ngmodule", type: RouterModule }, { kind: "directive", type: i3.RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "ngmodule", type: FormsModule }] }); }
119
119
  }
120
120
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: TrackingMarkerPopupComponent, decorators: [{
121
121
  type: Component,
122
- args: [{ standalone: true, selector: 'c8y-tracking-marker-popup', imports: [CoreModule, RouterModule, FormsModule], template: "<div class=\"map-marker\">\n <a\n class=\"text-truncate text-14 text-medium p-0 m-b-8 deviceLink\"\n [title]=\"context?.name\"\n *ngIf=\"isDevice\"\n [routerLink]=\"['/device/', context?.id]\"\n >\n {{ context?.name }}\n </a>\n <div\n class=\"m-b-8\"\n ng-if=\"lastUpdated\"\n >\n <p class=\"m-0\">{{ 'Position:' | translate }}</p>\n <span class=\"text-muted\">\n {{ context?.c8y_Position?.lat + ', ' + context?.c8y_Position?.lng }}\n </span>\n <p class=\"m-0 p-t-4\">{{ 'Date and time:' | translate }}</p>\n <span class=\"text-muted\">{{ date | c8yDate }}</span>\n </div>\n\n <ng-container *ngIf=\"isDevice\">\n <div class=\"d-flex a-i-center\">\n <label\n class=\"c8y-switch\"\n for=\"switch\"\n >\n <input\n id=\"switch\"\n type=\"checkbox\"\n [checked]=\"trackingService.trackVisible\"\n (change)=\"trackingService.toggleTrack()\"\n />\n <span></span>\n </label>\n <div class=\"description p-b-0\">\n {{ 'Show track' | translate }}\n </div>\n </div>\n </ng-container>\n</div>\n" }]
122
+ args: [{ standalone: true, selector: 'c8y-tracking-marker-popup', imports: [CoreModule, RouterModule, FormsModule], template: "<div class=\"map-marker\">\n @if (isDevice) {\n <a\n class=\"text-truncate text-14 text-medium p-0 m-b-8 deviceLink\"\n [title]=\"context?.name\"\n [routerLink]=\"['/device/', context?.id]\"\n >\n {{ context?.name }}\n </a>\n }\n <div\n class=\"m-b-8\"\n ng-if=\"lastUpdated\"\n >\n <p class=\"m-0\">{{ 'Position:' | translate }}</p>\n <span class=\"text-muted\">\n {{ context?.c8y_Position?.lat + ', ' + context?.c8y_Position?.lng }}\n </span>\n <p class=\"m-0 p-t-4\">{{ 'Date and time:' | translate }}</p>\n <span class=\"text-muted\">{{ date | c8yDate }}</span>\n </div>\n\n <ng-container *ngIf=\"isDevice\">\n <div class=\"d-flex a-i-center\">\n <label\n class=\"c8y-switch\"\n for=\"switch\"\n >\n <input\n id=\"switch\"\n type=\"checkbox\"\n [checked]=\"trackingService.trackVisible\"\n (change)=\"trackingService.toggleTrack()\"\n />\n <span></span>\n </label>\n <div class=\"description p-b-0\">\n {{ 'Show track' | translate }}\n </div>\n </div>\n </ng-container>\n</div>\n" }]
123
123
  }], ctorParameters: () => [{ type: TrackingService }], propDecorators: { context: [{
124
124
  type: Input
125
125
  }] } });
@@ -202,7 +202,7 @@ class TrackingComponent {
202
202
  }
203
203
  }
204
204
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: TrackingComponent, deps: [{ token: TrackingService }, { token: i2.EventRealtimeService }, { token: i2.ContextRouteService }, { token: i3.ActivatedRoute }], target: i0.ɵɵFactoryTarget.Component }); }
205
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.9", type: TrackingComponent, isStandalone: true, selector: "c8y-tracking", providers: [TrackingService, EventRealtimeService], viewQueries: [{ propertyName: "map", first: true, predicate: MapComponent, descendants: true }], ngImport: i0, template: "<c8y-action-bar-item\n [placement]=\"'right'\"\n [priority]=\"100\"\n>\n <c8y-realtime-btn\n [service]=\"realtime\"\n [disabled]=\"realtimeDisabled\"\n (onToggle)=\"togglePositionRealtime($event)\"\n ></c8y-realtime-btn>\n</c8y-action-bar-item>\n<c8y-action-bar-item\n [placement]=\"'right'\"\n [priority]=\"60\"\n>\n <c8y-time-interval\n [maxCustomDate]=\"maxDate\"\n [dateRangePickerConfig]=\"dateRangePickerConfig\"\n (interval)=\"service.setInterval($event); toggleRealtime($event)\"\n ></c8y-time-interval>\n</c8y-action-bar-item>\n\n<div class=\"card card--grid content-fullpage d-grid grid__col--8-4--md\">\n <div class=\"bg-white p-relative\">\n <c8y-map\n [config]=\"config\"\n [assets]=\"device\"\n [polyline$]=\"service.polyline$\"\n [polylineOptions]=\"{ color: 'darkblue' }\"\n >\n <div *c8yMapPopup=\"let context\">\n <c8y-tracking-marker-popup [context]=\"context\"></c8y-tracking-marker-popup>\n </div>\n </c8y-map>\n </div>\n\n <div class=\"d-flex d-col bg-inherit content-fullpage bg-gray-white\">\n <div class=\"card-header large-padding separator sticky-top\">\n <span\n class=\"card-title\"\n translate\n >\n Tracking events\n </span>\n </div>\n <div class=\"inner-scroll\">\n <c8y-list-group class=\"c8y-list__group--strip\">\n <ng-template\n c8yFor\n let-event\n [c8yForOf]=\"service.events$\"\n [c8yForPipe]=\"service.pipe\"\n [c8yForRealtime]=\"realtime\"\n [c8yForRealtimeOptions]=\"{ entityOrId: device }\"\n [c8yForLoadMore]=\"'hidden'\"\n [c8yForNotFound]=\"empty\"\n (c8yForLoadMoreComponent)=\"\n loadMoreComponent = $event; loadMoreComponent.useIntersection = false\n \"\n >\n <c8y-li\n class=\"pointer\"\n [ngClass]=\"{ 'text-primary text-bold': activeMarkers['p' + event?.id] }\"\n (click)=\"toggleMarker(event)\"\n [attr.data-cy]=\"'c8y-tracking--tracking-event-item-' + event?.id\"\n >\n <c8y-li-icon [ngClass]=\"{ 'text-primary': activeMarkers['p' + event?.id] }\">\n <i c8yIcon=\"c8y-location\"></i>\n </c8y-li-icon>\n <c8y-li-body>\n <div class=\"d-flex\">\n <span>\n {{ event.time | date: 'mediumDate' }}\n </span>\n <span class=\"m-l-auto\">\n {{ event.time | date: 'mediumTime' }}\n </span>\n </div>\n </c8y-li-body>\n </c8y-li>\n </ng-template>\n </c8y-list-group>\n </div>\n\n <!-- empty state -->\n <ng-template #empty>\n <c8y-ui-empty-state\n icon=\"c8y-location\"\n [title]=\"'No tracking events found.' | translate\"\n [subtitle]=\"'Select another time range.' | translate\"\n *ngIf=\"!service.hasEvents\"\n [horizontal]=\"true\"\n ></c8y-ui-empty-state>\n </ng-template>\n\n <div *ngIf=\"loadMoreComponent?.hasMore\">\n <button\n class=\"btn btn-link fit-w sticky-bottom separator-top\"\n [title]=\"'Load more' | translate\"\n type=\"button\"\n [disabled]=\"loadMoreComponent?.isLoading\"\n (click)=\"loadMoreComponent.loadMore()\"\n data-cy=\"c8y-tracking--load-more\"\n >\n {{ 'Load more' | translate }}\n </button>\n </div>\n\n <div class=\"card-footer separator\">\n <button\n class=\"btn btn-default\"\n [title]=\"'Deselect all markers' | translate\"\n type=\"button\"\n [disabled]=\"(activeMarkers | json) === '{}'\"\n (click)=\"map.clearMarkers('event'); activeMarkers = {}\"\n >\n {{ 'Deselect all markers' | translate }}\n </button>\n </div>\n </div>\n</div>\n", dependencies: [{ kind: "ngmodule", type: MapModule }, { kind: "component", type: i4.MapComponent, selector: "c8y-map", inputs: ["config", "assets", "polyline$", "polylineOptions"], outputs: ["onRealtimeUpdate", "onMove", "onMoveEnd", "onZoomStart", "onZoomEnd", "onMap", "onInit"] }, { kind: "directive", type: i4.MapPopupDirective, selector: "[c8yMapPopup]" }, { kind: "ngmodule", type: ActionBarModule }, { kind: "component", type: i2.ActionBarItemComponent, selector: "c8y-action-bar-item", inputs: ["placement", "priority", "itemClass", "injector", "groupId", "inGroupPriority"] }, { kind: "ngmodule", type: CoreModule }, { kind: "component", type: i2.EmptyStateComponent, selector: "c8y-ui-empty-state", inputs: ["icon", "title", "subtitle", "horizontal"] }, { kind: "directive", type: i2.IconDirective, selector: "[c8yIcon]", inputs: ["c8yIcon"] }, { kind: "pipe", type: i2.C8yTranslatePipe, name: "translate" }, { kind: "directive", type: i2.C8yTranslateDirective, selector: "[translate],[ngx-translate]" }, { kind: "directive", type: i5.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "pipe", type: i5.JsonPipe, name: "json" }, { kind: "pipe", type: i5.DatePipe, name: "date" }, { kind: "directive", type: i2.ForOfDirective, selector: "[c8yFor]", inputs: ["c8yForOf", "c8yForLoadMore", "c8yForPipe", "c8yForNotFound", "c8yForMaxIterations", "c8yForLoadingTemplate", "c8yForLoadNextLabel", "c8yForLoadingLabel", "c8yForRealtime", "c8yForRealtimeOptions", "c8yForComparator", "c8yForEnableVirtualScroll", "c8yForVirtualScrollElementSize", "c8yForVirtualScrollStrategy", "c8yForVirtualScrollContainerHeight"], outputs: ["c8yForCount", "c8yForChange", "c8yForLoadMoreComponent"] }, { kind: "component", type: i2.ListGroupComponent, selector: "c8y-list-group" }, { kind: "component", type: i2.ListItemComponent, selector: "c8y-list-item, c8y-li", inputs: ["active", "highlighted", "emptyActions", "dense", "collapsed", "selectable"], outputs: ["collapsedChange"] }, { kind: "component", type: i2.ListItemIconComponent, selector: "c8y-list-item-icon, c8y-li-icon", inputs: ["icon", "status"] }, { kind: "component", type: i2.ListItemBodyComponent, selector: "c8y-list-item-body, c8y-li-body", inputs: ["body"] }, { kind: "component", type: i2.RealtimeButtonComponent, selector: "c8y-realtime-btn", inputs: ["service", "label", "title", "disabled"], outputs: ["onToggle"] }, { kind: "component", type: i2.TimeIntervalComponent, selector: "c8y-time-interval", inputs: ["minCustomDate", "maxCustomDate", "dateRangePickerConfig", "selectedInterval"], outputs: ["interval"] }, { kind: "ngmodule", type: FormsModule }, { kind: "component", type: TrackingMarkerPopupComponent, selector: "c8y-tracking-marker-popup", inputs: ["context"] }] }); }
205
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.9", type: TrackingComponent, isStandalone: true, selector: "c8y-tracking", providers: [TrackingService, EventRealtimeService], viewQueries: [{ propertyName: "map", first: true, predicate: MapComponent, descendants: true }], ngImport: i0, template: "<c8y-action-bar-item\n [placement]=\"'right'\"\n [priority]=\"100\"\n>\n <c8y-realtime-btn\n [service]=\"realtime\"\n [disabled]=\"realtimeDisabled\"\n (onToggle)=\"togglePositionRealtime($event)\"\n ></c8y-realtime-btn>\n</c8y-action-bar-item>\n<c8y-action-bar-item\n [placement]=\"'right'\"\n [priority]=\"60\"\n>\n <c8y-time-interval\n [maxCustomDate]=\"maxDate\"\n [dateRangePickerConfig]=\"dateRangePickerConfig\"\n (interval)=\"service.setInterval($event); toggleRealtime($event)\"\n ></c8y-time-interval>\n</c8y-action-bar-item>\n\n<div class=\"card card--grid content-fullpage d-grid grid__col--8-4--md\">\n <div\n class=\"bg-white p-relative\"\n style=\"min-height: 30vh\"\n >\n <c8y-map\n [config]=\"config\"\n [assets]=\"device\"\n [polyline$]=\"service.polyline$\"\n [polylineOptions]=\"{ color: 'darkblue' }\"\n >\n <div *c8yMapPopup=\"let context\">\n <c8y-tracking-marker-popup [context]=\"context\"></c8y-tracking-marker-popup>\n </div>\n </c8y-map>\n </div>\n\n <div class=\"d-flex d-col bg-inherit content-fullpage bg-gray-white\">\n <div class=\"card-header large-padding separator sticky-top\">\n <span\n class=\"card-title\"\n translate\n >\n Tracking events\n </span>\n </div>\n <div class=\"inner-scroll\">\n <c8y-list-group class=\"c8y-list__group--strip\">\n <ng-template\n c8yFor\n let-event\n [c8yForOf]=\"service.events$\"\n [c8yForPipe]=\"service.pipe\"\n [c8yForRealtime]=\"realtime\"\n [c8yForRealtimeOptions]=\"{ entityOrId: device }\"\n [c8yForLoadMore]=\"'hidden'\"\n [c8yForNotFound]=\"empty\"\n (c8yForLoadMoreComponent)=\"\n loadMoreComponent = $event; loadMoreComponent.useIntersection = false\n \"\n >\n <c8y-li\n class=\"pointer\"\n [ngClass]=\"{ 'text-primary text-bold': activeMarkers['p' + event?.id] }\"\n (click)=\"toggleMarker(event)\"\n [attr.data-cy]=\"'c8y-tracking--tracking-event-item-' + event?.id\"\n >\n <c8y-li-icon [ngClass]=\"{ 'text-primary': activeMarkers['p' + event?.id] }\">\n <i c8yIcon=\"c8y-location\"></i>\n </c8y-li-icon>\n <c8y-li-body>\n <div class=\"d-flex\">\n <span>\n {{ event.time | date: 'mediumDate' }}\n </span>\n <span class=\"m-l-auto\">\n {{ event.time | date: 'mediumTime' }}\n </span>\n </div>\n </c8y-li-body>\n </c8y-li>\n </ng-template>\n </c8y-list-group>\n </div>\n\n <!-- empty state -->\n <ng-template #empty>\n @if (!service.hasEvents) {\n <c8y-ui-empty-state\n icon=\"c8y-location\"\n [title]=\"'No tracking events found.' | translate\"\n [subtitle]=\"'Select another time range.' | translate\"\n [horizontal]=\"true\"\n ></c8y-ui-empty-state>\n }\n </ng-template>\n\n @if (loadMoreComponent?.hasMore) {\n <div>\n <button\n class=\"btn btn-link fit-w sticky-bottom separator-top\"\n [title]=\"'Load more' | translate\"\n type=\"button\"\n [disabled]=\"loadMoreComponent?.isLoading\"\n (click)=\"loadMoreComponent.loadMore()\"\n data-cy=\"c8y-tracking--load-more\"\n >\n {{ 'Load more' | translate }}\n </button>\n </div>\n }\n\n <div class=\"card-footer separator\">\n <button\n class=\"btn btn-default\"\n [title]=\"'Deselect all markers' | translate\"\n type=\"button\"\n [disabled]=\"(activeMarkers | json) === '{}'\"\n (click)=\"map.clearMarkers('event'); activeMarkers = {}\"\n >\n {{ 'Deselect all markers' | translate }}\n </button>\n </div>\n </div>\n</div>\n", dependencies: [{ kind: "ngmodule", type: MapModule }, { kind: "component", type: i4.MapComponent, selector: "c8y-map", inputs: ["config", "assets", "polyline$", "polylineOptions"], outputs: ["onRealtimeUpdate", "onMove", "onMoveEnd", "onZoomStart", "onZoomEnd", "onMap", "onInit"] }, { kind: "directive", type: i4.MapPopupDirective, selector: "[c8yMapPopup]" }, { kind: "ngmodule", type: ActionBarModule }, { kind: "component", type: i2.ActionBarItemComponent, selector: "c8y-action-bar-item", inputs: ["placement", "priority", "itemClass", "injector", "groupId", "inGroupPriority"] }, { kind: "ngmodule", type: CoreModule }, { kind: "component", type: i2.EmptyStateComponent, selector: "c8y-ui-empty-state", inputs: ["icon", "title", "subtitle", "horizontal"] }, { kind: "directive", type: i2.IconDirective, selector: "[c8yIcon]", inputs: ["c8yIcon"] }, { kind: "pipe", type: i2.C8yTranslatePipe, name: "translate" }, { kind: "directive", type: i2.C8yTranslateDirective, selector: "[translate],[ngx-translate]" }, { kind: "directive", type: i5.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "pipe", type: i5.JsonPipe, name: "json" }, { kind: "pipe", type: i5.DatePipe, name: "date" }, { kind: "directive", type: i2.ForOfDirective, selector: "[c8yFor]", inputs: ["c8yForOf", "c8yForLoadMore", "c8yForPipe", "c8yForNotFound", "c8yForMaxIterations", "c8yForLoadingTemplate", "c8yForLoadNextLabel", "c8yForLoadingLabel", "c8yForRealtime", "c8yForRealtimeOptions", "c8yForComparator", "c8yForEnableVirtualScroll", "c8yForVirtualScrollElementSize", "c8yForVirtualScrollStrategy", "c8yForVirtualScrollContainerHeight"], outputs: ["c8yForCount", "c8yForChange", "c8yForLoadMoreComponent"] }, { kind: "component", type: i2.ListGroupComponent, selector: "c8y-list-group" }, { kind: "component", type: i2.ListItemComponent, selector: "c8y-list-item, c8y-li", inputs: ["active", "highlighted", "emptyActions", "dense", "collapsed", "selectable"], outputs: ["collapsedChange"] }, { kind: "component", type: i2.ListItemIconComponent, selector: "c8y-list-item-icon, c8y-li-icon", inputs: ["icon", "status"] }, { kind: "component", type: i2.ListItemBodyComponent, selector: "c8y-list-item-body, c8y-li-body", inputs: ["body"] }, { kind: "component", type: i2.RealtimeButtonComponent, selector: "c8y-realtime-btn", inputs: ["service", "label", "title", "disabled"], outputs: ["onToggle"] }, { kind: "component", type: i2.TimeIntervalComponent, selector: "c8y-time-interval", inputs: ["minCustomDate", "maxCustomDate", "dateRangePickerConfig", "selectedInterval"], outputs: ["interval"] }, { kind: "ngmodule", type: FormsModule }, { kind: "component", type: TrackingMarkerPopupComponent, selector: "c8y-tracking-marker-popup", inputs: ["context"] }] }); }
206
206
  }
207
207
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: TrackingComponent, decorators: [{
208
208
  type: Component,
@@ -213,7 +213,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.9", ngImpor
213
213
  TimeIntervalComponent,
214
214
  FormsModule,
215
215
  TrackingMarkerPopupComponent
216
- ], providers: [TrackingService, EventRealtimeService], selector: 'c8y-tracking', template: "<c8y-action-bar-item\n [placement]=\"'right'\"\n [priority]=\"100\"\n>\n <c8y-realtime-btn\n [service]=\"realtime\"\n [disabled]=\"realtimeDisabled\"\n (onToggle)=\"togglePositionRealtime($event)\"\n ></c8y-realtime-btn>\n</c8y-action-bar-item>\n<c8y-action-bar-item\n [placement]=\"'right'\"\n [priority]=\"60\"\n>\n <c8y-time-interval\n [maxCustomDate]=\"maxDate\"\n [dateRangePickerConfig]=\"dateRangePickerConfig\"\n (interval)=\"service.setInterval($event); toggleRealtime($event)\"\n ></c8y-time-interval>\n</c8y-action-bar-item>\n\n<div class=\"card card--grid content-fullpage d-grid grid__col--8-4--md\">\n <div class=\"bg-white p-relative\">\n <c8y-map\n [config]=\"config\"\n [assets]=\"device\"\n [polyline$]=\"service.polyline$\"\n [polylineOptions]=\"{ color: 'darkblue' }\"\n >\n <div *c8yMapPopup=\"let context\">\n <c8y-tracking-marker-popup [context]=\"context\"></c8y-tracking-marker-popup>\n </div>\n </c8y-map>\n </div>\n\n <div class=\"d-flex d-col bg-inherit content-fullpage bg-gray-white\">\n <div class=\"card-header large-padding separator sticky-top\">\n <span\n class=\"card-title\"\n translate\n >\n Tracking events\n </span>\n </div>\n <div class=\"inner-scroll\">\n <c8y-list-group class=\"c8y-list__group--strip\">\n <ng-template\n c8yFor\n let-event\n [c8yForOf]=\"service.events$\"\n [c8yForPipe]=\"service.pipe\"\n [c8yForRealtime]=\"realtime\"\n [c8yForRealtimeOptions]=\"{ entityOrId: device }\"\n [c8yForLoadMore]=\"'hidden'\"\n [c8yForNotFound]=\"empty\"\n (c8yForLoadMoreComponent)=\"\n loadMoreComponent = $event; loadMoreComponent.useIntersection = false\n \"\n >\n <c8y-li\n class=\"pointer\"\n [ngClass]=\"{ 'text-primary text-bold': activeMarkers['p' + event?.id] }\"\n (click)=\"toggleMarker(event)\"\n [attr.data-cy]=\"'c8y-tracking--tracking-event-item-' + event?.id\"\n >\n <c8y-li-icon [ngClass]=\"{ 'text-primary': activeMarkers['p' + event?.id] }\">\n <i c8yIcon=\"c8y-location\"></i>\n </c8y-li-icon>\n <c8y-li-body>\n <div class=\"d-flex\">\n <span>\n {{ event.time | date: 'mediumDate' }}\n </span>\n <span class=\"m-l-auto\">\n {{ event.time | date: 'mediumTime' }}\n </span>\n </div>\n </c8y-li-body>\n </c8y-li>\n </ng-template>\n </c8y-list-group>\n </div>\n\n <!-- empty state -->\n <ng-template #empty>\n <c8y-ui-empty-state\n icon=\"c8y-location\"\n [title]=\"'No tracking events found.' | translate\"\n [subtitle]=\"'Select another time range.' | translate\"\n *ngIf=\"!service.hasEvents\"\n [horizontal]=\"true\"\n ></c8y-ui-empty-state>\n </ng-template>\n\n <div *ngIf=\"loadMoreComponent?.hasMore\">\n <button\n class=\"btn btn-link fit-w sticky-bottom separator-top\"\n [title]=\"'Load more' | translate\"\n type=\"button\"\n [disabled]=\"loadMoreComponent?.isLoading\"\n (click)=\"loadMoreComponent.loadMore()\"\n data-cy=\"c8y-tracking--load-more\"\n >\n {{ 'Load more' | translate }}\n </button>\n </div>\n\n <div class=\"card-footer separator\">\n <button\n class=\"btn btn-default\"\n [title]=\"'Deselect all markers' | translate\"\n type=\"button\"\n [disabled]=\"(activeMarkers | json) === '{}'\"\n (click)=\"map.clearMarkers('event'); activeMarkers = {}\"\n >\n {{ 'Deselect all markers' | translate }}\n </button>\n </div>\n </div>\n</div>\n" }]
216
+ ], providers: [TrackingService, EventRealtimeService], selector: 'c8y-tracking', template: "<c8y-action-bar-item\n [placement]=\"'right'\"\n [priority]=\"100\"\n>\n <c8y-realtime-btn\n [service]=\"realtime\"\n [disabled]=\"realtimeDisabled\"\n (onToggle)=\"togglePositionRealtime($event)\"\n ></c8y-realtime-btn>\n</c8y-action-bar-item>\n<c8y-action-bar-item\n [placement]=\"'right'\"\n [priority]=\"60\"\n>\n <c8y-time-interval\n [maxCustomDate]=\"maxDate\"\n [dateRangePickerConfig]=\"dateRangePickerConfig\"\n (interval)=\"service.setInterval($event); toggleRealtime($event)\"\n ></c8y-time-interval>\n</c8y-action-bar-item>\n\n<div class=\"card card--grid content-fullpage d-grid grid__col--8-4--md\">\n <div\n class=\"bg-white p-relative\"\n style=\"min-height: 30vh\"\n >\n <c8y-map\n [config]=\"config\"\n [assets]=\"device\"\n [polyline$]=\"service.polyline$\"\n [polylineOptions]=\"{ color: 'darkblue' }\"\n >\n <div *c8yMapPopup=\"let context\">\n <c8y-tracking-marker-popup [context]=\"context\"></c8y-tracking-marker-popup>\n </div>\n </c8y-map>\n </div>\n\n <div class=\"d-flex d-col bg-inherit content-fullpage bg-gray-white\">\n <div class=\"card-header large-padding separator sticky-top\">\n <span\n class=\"card-title\"\n translate\n >\n Tracking events\n </span>\n </div>\n <div class=\"inner-scroll\">\n <c8y-list-group class=\"c8y-list__group--strip\">\n <ng-template\n c8yFor\n let-event\n [c8yForOf]=\"service.events$\"\n [c8yForPipe]=\"service.pipe\"\n [c8yForRealtime]=\"realtime\"\n [c8yForRealtimeOptions]=\"{ entityOrId: device }\"\n [c8yForLoadMore]=\"'hidden'\"\n [c8yForNotFound]=\"empty\"\n (c8yForLoadMoreComponent)=\"\n loadMoreComponent = $event; loadMoreComponent.useIntersection = false\n \"\n >\n <c8y-li\n class=\"pointer\"\n [ngClass]=\"{ 'text-primary text-bold': activeMarkers['p' + event?.id] }\"\n (click)=\"toggleMarker(event)\"\n [attr.data-cy]=\"'c8y-tracking--tracking-event-item-' + event?.id\"\n >\n <c8y-li-icon [ngClass]=\"{ 'text-primary': activeMarkers['p' + event?.id] }\">\n <i c8yIcon=\"c8y-location\"></i>\n </c8y-li-icon>\n <c8y-li-body>\n <div class=\"d-flex\">\n <span>\n {{ event.time | date: 'mediumDate' }}\n </span>\n <span class=\"m-l-auto\">\n {{ event.time | date: 'mediumTime' }}\n </span>\n </div>\n </c8y-li-body>\n </c8y-li>\n </ng-template>\n </c8y-list-group>\n </div>\n\n <!-- empty state -->\n <ng-template #empty>\n @if (!service.hasEvents) {\n <c8y-ui-empty-state\n icon=\"c8y-location\"\n [title]=\"'No tracking events found.' | translate\"\n [subtitle]=\"'Select another time range.' | translate\"\n [horizontal]=\"true\"\n ></c8y-ui-empty-state>\n }\n </ng-template>\n\n @if (loadMoreComponent?.hasMore) {\n <div>\n <button\n class=\"btn btn-link fit-w sticky-bottom separator-top\"\n [title]=\"'Load more' | translate\"\n type=\"button\"\n [disabled]=\"loadMoreComponent?.isLoading\"\n (click)=\"loadMoreComponent.loadMore()\"\n data-cy=\"c8y-tracking--load-more\"\n >\n {{ 'Load more' | translate }}\n </button>\n </div>\n }\n\n <div class=\"card-footer separator\">\n <button\n class=\"btn btn-default\"\n [title]=\"'Deselect all markers' | translate\"\n type=\"button\"\n [disabled]=\"(activeMarkers | json) === '{}'\"\n (click)=\"map.clearMarkers('event'); activeMarkers = {}\"\n >\n {{ 'Deselect all markers' | translate }}\n </button>\n </div>\n </div>\n</div>\n" }]
217
217
  }], ctorParameters: () => [{ type: TrackingService }, { type: i2.EventRealtimeService }, { type: i2.ContextRouteService }, { type: i3.ActivatedRoute }], propDecorators: { map: [{
218
218
  type: ViewChild,
219
219
  args: [MapComponent]