@c8y/ngx-components 1018.0.206 → 1018.0.208

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (69) hide show
  1. package/ecosystem/shared/ecosystem.constants.d.ts +1 -1
  2. package/esm2020/auth-configuration/sso-configuration/template-parts/external-token-config.component.mjs +3 -3
  3. package/esm2020/cockpit-config/cockpit-configuration.component.mjs +3 -3
  4. package/esm2020/cockpit-config/setup/cockpit-setup-step3.component.mjs +3 -3
  5. package/esm2020/core/file-picker-new/file-picker-new.component.mjs +3 -3
  6. package/esm2020/core/file-picker-new/file-picker-validators.mjs +4 -4
  7. package/esm2020/core/help/help.component.mjs +3 -3
  8. package/esm2020/ecosystem/license-confirm/license-confirm-modal.component.mjs +5 -5
  9. package/esm2020/ecosystem/shared/ecosystem.constants.mjs +2 -2
  10. package/esm2020/icon-selector/icons/hands/index.mjs +2 -2
  11. package/esm2020/map/map-status.component.mjs +3 -3
  12. package/esm2020/protocol-lwm2m/factories/lwm2m-device-grid.factory.mjs +2 -2
  13. package/esm2020/sub-assets/assign-devices/assign-devices.component.mjs +3 -3
  14. package/esm2020/widgets/implementations/map/map-widget-config.component.mjs +3 -3
  15. package/fesm2015/c8y-ngx-components-auth-configuration.mjs +2 -2
  16. package/fesm2015/c8y-ngx-components-auth-configuration.mjs.map +1 -1
  17. package/fesm2015/c8y-ngx-components-cockpit-config.mjs +4 -4
  18. package/fesm2015/c8y-ngx-components-cockpit-config.mjs.map +1 -1
  19. package/fesm2015/c8y-ngx-components-ecosystem-license-confirm.mjs +4 -4
  20. package/fesm2015/c8y-ngx-components-ecosystem-license-confirm.mjs.map +1 -1
  21. package/fesm2015/c8y-ngx-components-ecosystem-shared.mjs +1 -1
  22. package/fesm2015/c8y-ngx-components-ecosystem-shared.mjs.map +1 -1
  23. package/fesm2015/c8y-ngx-components-icon-selector-icons-hands.mjs +1 -1
  24. package/fesm2015/c8y-ngx-components-icon-selector-icons-hands.mjs.map +1 -1
  25. package/fesm2015/c8y-ngx-components-map.mjs +2 -2
  26. package/fesm2015/c8y-ngx-components-map.mjs.map +1 -1
  27. package/fesm2015/c8y-ngx-components-protocol-lwm2m-factories.mjs +1 -1
  28. package/fesm2015/c8y-ngx-components-protocol-lwm2m-factories.mjs.map +1 -1
  29. package/fesm2015/c8y-ngx-components-sub-assets.mjs +2 -2
  30. package/fesm2015/c8y-ngx-components-sub-assets.mjs.map +1 -1
  31. package/fesm2015/c8y-ngx-components-widgets-implementations-map.mjs +2 -2
  32. package/fesm2015/c8y-ngx-components-widgets-implementations-map.mjs.map +1 -1
  33. package/fesm2015/c8y-ngx-components.mjs +7 -7
  34. package/fesm2015/c8y-ngx-components.mjs.map +1 -1
  35. package/fesm2020/c8y-ngx-components-auth-configuration.mjs +2 -2
  36. package/fesm2020/c8y-ngx-components-auth-configuration.mjs.map +1 -1
  37. package/fesm2020/c8y-ngx-components-cockpit-config.mjs +4 -4
  38. package/fesm2020/c8y-ngx-components-cockpit-config.mjs.map +1 -1
  39. package/fesm2020/c8y-ngx-components-ecosystem-license-confirm.mjs +4 -4
  40. package/fesm2020/c8y-ngx-components-ecosystem-license-confirm.mjs.map +1 -1
  41. package/fesm2020/c8y-ngx-components-ecosystem-shared.mjs +1 -1
  42. package/fesm2020/c8y-ngx-components-ecosystem-shared.mjs.map +1 -1
  43. package/fesm2020/c8y-ngx-components-icon-selector-icons-hands.mjs +1 -1
  44. package/fesm2020/c8y-ngx-components-icon-selector-icons-hands.mjs.map +1 -1
  45. package/fesm2020/c8y-ngx-components-map.mjs +2 -2
  46. package/fesm2020/c8y-ngx-components-map.mjs.map +1 -1
  47. package/fesm2020/c8y-ngx-components-protocol-lwm2m-factories.mjs +1 -1
  48. package/fesm2020/c8y-ngx-components-protocol-lwm2m-factories.mjs.map +1 -1
  49. package/fesm2020/c8y-ngx-components-sub-assets.mjs +2 -2
  50. package/fesm2020/c8y-ngx-components-sub-assets.mjs.map +1 -1
  51. package/fesm2020/c8y-ngx-components-widgets-implementations-map.mjs +2 -2
  52. package/fesm2020/c8y-ngx-components-widgets-implementations-map.mjs.map +1 -1
  53. package/fesm2020/c8y-ngx-components.mjs +7 -7
  54. package/fesm2020/c8y-ngx-components.mjs.map +1 -1
  55. package/icon-selector/icons/hands/index.d.ts +1 -1
  56. package/locales/de.po +519 -166
  57. package/locales/en.po +4 -1
  58. package/locales/es.po +816 -305
  59. package/locales/fr.po +732 -220
  60. package/locales/ja_JP.po +812 -225
  61. package/locales/ko.po +940 -429
  62. package/locales/locales.pot +20 -38
  63. package/locales/nl.po +804 -293
  64. package/locales/pl.po +712 -222
  65. package/locales/pt_BR.po +875 -364
  66. package/locales/ru.po +752 -250
  67. package/locales/zh_CN.po +823 -312
  68. package/locales/zh_TW.po +1188 -677
  69. package/package.json +1 -1
@@ -28,7 +28,7 @@ export class Lwm2mDeviceGridFactory extends Lwm2mClientService {
28
28
  async onDelete(device) {
29
29
  if (this.tenantService.isMicroserviceSubscribedInCurrentTenant(agentName)) {
30
30
  try {
31
- await this.modal.confirm(gettext('Delete Lwm2m device'), this.translateService.instant(gettext(`You are about to delete device "{{ name }}". Do you want to proceed?`), device), Status.DANGER, { ok: gettext('Delete'), cancel: gettext('Cancel') });
31
+ await this.modal.confirm(gettext('Delete LWM2M device'), this.translateService.instant(gettext(`You are about to delete device "{{ name }}". Do you want to proceed?`), device), Status.DANGER, { ok: gettext('Delete'), cancel: gettext('Cancel') });
32
32
  await this.delete(device);
33
33
  this.alertService.success(gettext('Device deleted.'));
34
34
  return Promise.resolve();
@@ -57,4 +57,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.6", ngImpor
57
57
  providedIn: 'root'
58
58
  }]
59
59
  }], ctorParameters: function () { return [{ type: i1.FetchClient }, { type: i2.TenantUiService }, { type: i2.ModalService }, { type: i3.TranslateService }, { type: i2.AlertService }]; } });
60
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibHdtMm0tZGV2aWNlLWdyaWQuZmFjdG9yeS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb3RvY29sLWx3bTJtL2ZhY3Rvcmllcy9sd20ybS1kZXZpY2UtZ3JpZC5mYWN0b3J5LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDM0MsT0FBTyxFQUFFLFdBQVcsRUFBd0IsTUFBTSxhQUFhLENBQUM7QUFFaEUsT0FBTyxFQUNMLFlBQVksRUFDWixPQUFPLEVBQ1AsWUFBWSxFQUNaLE1BQU0sRUFDTixlQUFlLEVBRWhCLE1BQU0scUJBQXFCLENBQUM7QUFDN0IsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDdkQsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sNkNBQTZDLENBQUM7QUFDakYsT0FBTyxFQUFFLFNBQVMsRUFBc0IsTUFBTSwwQ0FBMEMsQ0FBQzs7Ozs7QUFLekYsTUFBTSxPQUFPLHNCQUNYLFNBQVEsa0JBQXNDO0lBSzlDLFlBQ0UsTUFBbUIsRUFDWCxhQUE4QixFQUM5QixLQUFtQixFQUNuQixnQkFBa0MsRUFDbEMsWUFBMEI7UUFFbEMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBTE4sa0JBQWEsR0FBYixhQUFhLENBQWlCO1FBQzlCLFVBQUssR0FBTCxLQUFLLENBQWM7UUFDbkIscUJBQWdCLEdBQWhCLGdCQUFnQixDQUFrQjtRQUNsQyxpQkFBWSxHQUFaLFlBQVksQ0FBYztRQVAxQixZQUFPLEdBQUcsb0JBQW9CLENBQUM7SUFVekMsQ0FBQztJQUVELEdBQUc7UUFDRCxPQUFPO1lBQ0wsSUFBSSx5Q0FBMEI7WUFDOUIsYUFBYSxFQUFFLENBQUMsRUFBc0IsRUFBRSxFQUFFLENBQUMsS0FBSyxDQUFDLGFBQWEsQ0FBQyxFQUFFLENBQUM7WUFDbEUsUUFBUSxFQUFFLENBQUMsRUFBc0IsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUM7WUFDdkQsc0JBQXNCLEVBQUUsSUFBSTtTQUNMLENBQUM7SUFDNUIsQ0FBQztJQUVELEtBQUssQ0FBQyxRQUFRLENBQUMsTUFBMEI7UUFDdkMsSUFBSSxJQUFJLENBQUMsYUFBYSxDQUFDLHVDQUF1QyxDQUFDLFNBQVMsQ0FBQyxFQUFFO1lBQ3pFLElBQUk7Z0JBQ0YsTUFBTSxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FDdEIsT0FBTyxDQUFDLHFCQUFxQixDQUFDLEVBQzlCLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxPQUFPLENBQzNCLE9BQU8sQ0FBQyxzRUFBc0UsQ0FBQyxFQUMvRSxNQUFNLENBQ1AsRUFDRCxNQUFNLENBQUMsTUFBTSxFQUNiLEVBQUUsRUFBRSxFQUFFLE9BQU8sQ0FBQyxRQUFRLENBQUMsRUFBRSxNQUFNLEVBQUUsT0FBTyxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQ3JELENBQUM7Z0JBQ0YsTUFBTSxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDO2dCQUMxQixJQUFJLENBQUMsWUFBWSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsaUJBQWlCLENBQUMsQ0FBQyxDQUFDO2dCQUN0RCxPQUFPLE9BQU8sQ0FBQyxPQUFPLEVBQUUsQ0FBQzthQUMxQjtZQUFDLE9BQU8sRUFBRSxFQUFFO2dCQUNYLElBQUksRUFBRSxFQUFFO29CQUNOLElBQUksQ0FBQyxZQUFZLENBQUMsZ0JBQWdCLENBQUMsRUFBRSxDQUFDLENBQUM7aUJBQ3hDO2dCQUNELE9BQU8sT0FBTyxDQUFDLE1BQU0sRUFBRSxDQUFDO2FBQ3pCO1NBQ0Y7YUFBTTtZQUNMLElBQUksQ0FBQyxZQUFZLENBQUMsTUFBTSxDQUN0QixJQUFJLENBQUMsZ0JBQWdCLENBQUMsT0FBTyxDQUMzQixPQUFPLENBQUMsMkVBQTJFLENBQUMsRUFDcEYsRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLENBQ3BCLENBQ0YsQ0FBQztZQUNGLE9BQU8sT0FBTyxDQUFDLE1BQU0sRUFBRSxDQUFDO1NBQ3pCO0lBQ0gsQ0FBQztJQUVELE1BQU0sQ0FBQyxVQUF5QztRQUM5QyxPQUFPLEtBQUssQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUM7SUFDbEMsQ0FBQzs7bUhBM0RVLHNCQUFzQjt1SEFBdEIsc0JBQXNCLGNBRnJCLE1BQU07MkZBRVAsc0JBQXNCO2tCQUhsQyxVQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEZldGNoQ2xpZW50LCBJSWRlbnRpZmllZCwgSVJlc3VsdCB9IGZyb20gJ0BjOHkvY2xpZW50JztcbmltcG9ydCB7IERldmljZUdyaWRFeHRlbnNpb25GYWN0b3J5LCBEZXZpY2VHcmlkQWN0aW9uSG9vayB9IGZyb20gJ0BjOHkvbmd4LWNvbXBvbmVudHMvZGV2aWNlLWdyaWQnO1xuaW1wb3J0IHtcbiAgQWxlcnRTZXJ2aWNlLFxuICBnZXR0ZXh0LFxuICBNb2RhbFNlcnZpY2UsXG4gIFN0YXR1cyxcbiAgVGVuYW50VWlTZXJ2aWNlLFxuICBCdWlsdEluQWN0aW9uVHlwZVxufSBmcm9tICdAYzh5L25neC1jb21wb25lbnRzJztcbmltcG9ydCB7IFRyYW5zbGF0ZVNlcnZpY2UgfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJztcbmltcG9ydCB7IEx3bTJtQ2xpZW50U2VydmljZSB9IGZyb20gJ0BjOHkvbmd4LWNvbXBvbmVudHMvcHJvdG9jb2wtbHdtMm0vc2VydmljZXMnO1xuaW1wb3J0IHsgYWdlbnROYW1lLCBMd20ybU1hbmFnZWRPYmplY3QgfSBmcm9tICdAYzh5L25neC1jb21wb25lbnRzL3Byb3RvY29sLWx3bTJtL21vZGVsJztcblxuQEluamVjdGFibGUoe1xuICBwcm92aWRlZEluOiAncm9vdCdcbn0pXG5leHBvcnQgY2xhc3MgTHdtMm1EZXZpY2VHcmlkRmFjdG9yeVxuICBleHRlbmRzIEx3bTJtQ2xpZW50U2VydmljZTxMd20ybU1hbmFnZWRPYmplY3Q+XG4gIGltcGxlbWVudHMgRGV2aWNlR3JpZEV4dGVuc2lvbkZhY3RvcnlcbntcbiAgcHJvdGVjdGVkIGxpc3RVcmwgPSAnZGV2aWNlUmVnaXN0cmF0aW9uJztcblxuICBjb25zdHJ1Y3RvcihcbiAgICBjbGllbnQ6IEZldGNoQ2xpZW50LFxuICAgIHByaXZhdGUgdGVuYW50U2VydmljZTogVGVuYW50VWlTZXJ2aWNlLFxuICAgIHByaXZhdGUgbW9kYWw6IE1vZGFsU2VydmljZSxcbiAgICBwcml2YXRlIHRyYW5zbGF0ZVNlcnZpY2U6IFRyYW5zbGF0ZVNlcnZpY2UsXG4gICAgcHJpdmF0ZSBhbGVydFNlcnZpY2U6IEFsZXJ0U2VydmljZVxuICApIHtcbiAgICBzdXBlcihjbGllbnQpO1xuICB9XG5cbiAgZ2V0KCkge1xuICAgIHJldHVybiB7XG4gICAgICB0eXBlOiBCdWlsdEluQWN0aW9uVHlwZS5EZWxldGUsXG4gICAgICBkZXZpY2VNYXRjaGVzOiAobW86IEx3bTJtTWFuYWdlZE9iamVjdCkgPT4gc3VwZXIuaXNMd20ybURldmljZShtbyksXG4gICAgICBvbkFjdGlvbjogKG1vOiBMd20ybU1hbmFnZWRPYmplY3QpID0+IHRoaXMub25EZWxldGUobW8pLFxuICAgICAgcmVmcmVzaEFmdGVyQWN0aW9uRG9uZTogdHJ1ZVxuICAgIH0gYXMgRGV2aWNlR3JpZEFjdGlvbkhvb2s7XG4gIH1cblxuICBhc3luYyBvbkRlbGV0ZShkZXZpY2U6IEx3bTJtTWFuYWdlZE9iamVjdCkge1xuICAgIGlmICh0aGlzLnRlbmFudFNlcnZpY2UuaXNNaWNyb3NlcnZpY2VTdWJzY3JpYmVkSW5DdXJyZW50VGVuYW50KGFnZW50TmFtZSkpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGF3YWl0IHRoaXMubW9kYWwuY29uZmlybShcbiAgICAgICAgICBnZXR0ZXh0KCdEZWxldGUgTHdtMm0gZGV2aWNlJyksXG4gICAgICAgICAgdGhpcy50cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQoXG4gICAgICAgICAgICBnZXR0ZXh0KGBZb3UgYXJlIGFib3V0IHRvIGRlbGV0ZSBkZXZpY2UgXCJ7eyBuYW1lIH19XCIuIERvIHlvdSB3YW50IHRvIHByb2NlZWQ/YCksXG4gICAgICAgICAgICBkZXZpY2VcbiAgICAgICAgICApLFxuICAgICAgICAgIFN0YXR1cy5EQU5HRVIsXG4gICAgICAgICAgeyBvazogZ2V0dGV4dCgnRGVsZXRlJyksIGNhbmNlbDogZ2V0dGV4dCgnQ2FuY2VsJykgfVxuICAgICAgICApO1xuICAgICAgICBhd2FpdCB0aGlzLmRlbGV0ZShkZXZpY2UpO1xuICAgICAgICB0aGlzLmFsZXJ0U2VydmljZS5zdWNjZXNzKGdldHRleHQoJ0RldmljZSBkZWxldGVkLicpKTtcbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO1xuICAgICAgfSBjYXRjaCAoZXgpIHtcbiAgICAgICAgaWYgKGV4KSB7XG4gICAgICAgICAgdGhpcy5hbGVydFNlcnZpY2UuYWRkU2VydmVyRmFpbHVyZShleCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KCk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuYWxlcnRTZXJ2aWNlLmRhbmdlcihcbiAgICAgICAgdGhpcy50cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQoXG4gICAgICAgICAgZ2V0dGV4dChgWW91IGNhbid0IGRlbGV0ZSB0aGlzIGRldmljZS4gVGhlIHNlcnZpY2UgXCJ7eyBuYW1lIH19XCIgaXMgbm90IHN1YnNjcmliZWQuYCksXG4gICAgICAgICAgeyBuYW1lOiBhZ2VudE5hbWUgfVxuICAgICAgICApXG4gICAgICApO1xuICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KCk7XG4gICAgfVxuICB9XG5cbiAgZGVsZXRlKGVudGl0eU9ySWQ6IHN0cmluZyB8IG51bWJlciB8IElJZGVudGlmaWVkKTogUHJvbWlzZTxJUmVzdWx0PG51bGw+PiB7XG4gICAgcmV0dXJuIHN1cGVyLmRlbGV0ZShlbnRpdHlPcklkKTtcbiAgfVxufVxuIl19
60
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibHdtMm0tZGV2aWNlLWdyaWQuZmFjdG9yeS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb3RvY29sLWx3bTJtL2ZhY3Rvcmllcy9sd20ybS1kZXZpY2UtZ3JpZC5mYWN0b3J5LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDM0MsT0FBTyxFQUFFLFdBQVcsRUFBd0IsTUFBTSxhQUFhLENBQUM7QUFFaEUsT0FBTyxFQUNMLFlBQVksRUFDWixPQUFPLEVBQ1AsWUFBWSxFQUNaLE1BQU0sRUFDTixlQUFlLEVBRWhCLE1BQU0scUJBQXFCLENBQUM7QUFDN0IsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDdkQsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sNkNBQTZDLENBQUM7QUFDakYsT0FBTyxFQUFFLFNBQVMsRUFBc0IsTUFBTSwwQ0FBMEMsQ0FBQzs7Ozs7QUFLekYsTUFBTSxPQUFPLHNCQUNYLFNBQVEsa0JBQXNDO0lBSzlDLFlBQ0UsTUFBbUIsRUFDWCxhQUE4QixFQUM5QixLQUFtQixFQUNuQixnQkFBa0MsRUFDbEMsWUFBMEI7UUFFbEMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBTE4sa0JBQWEsR0FBYixhQUFhLENBQWlCO1FBQzlCLFVBQUssR0FBTCxLQUFLLENBQWM7UUFDbkIscUJBQWdCLEdBQWhCLGdCQUFnQixDQUFrQjtRQUNsQyxpQkFBWSxHQUFaLFlBQVksQ0FBYztRQVAxQixZQUFPLEdBQUcsb0JBQW9CLENBQUM7SUFVekMsQ0FBQztJQUVELEdBQUc7UUFDRCxPQUFPO1lBQ0wsSUFBSSx5Q0FBMEI7WUFDOUIsYUFBYSxFQUFFLENBQUMsRUFBc0IsRUFBRSxFQUFFLENBQUMsS0FBSyxDQUFDLGFBQWEsQ0FBQyxFQUFFLENBQUM7WUFDbEUsUUFBUSxFQUFFLENBQUMsRUFBc0IsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUM7WUFDdkQsc0JBQXNCLEVBQUUsSUFBSTtTQUNMLENBQUM7SUFDNUIsQ0FBQztJQUVELEtBQUssQ0FBQyxRQUFRLENBQUMsTUFBMEI7UUFDdkMsSUFBSSxJQUFJLENBQUMsYUFBYSxDQUFDLHVDQUF1QyxDQUFDLFNBQVMsQ0FBQyxFQUFFO1lBQ3pFLElBQUk7Z0JBQ0YsTUFBTSxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FDdEIsT0FBTyxDQUFDLHFCQUFxQixDQUFDLEVBQzlCLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxPQUFPLENBQzNCLE9BQU8sQ0FBQyxzRUFBc0UsQ0FBQyxFQUMvRSxNQUFNLENBQ1AsRUFDRCxNQUFNLENBQUMsTUFBTSxFQUNiLEVBQUUsRUFBRSxFQUFFLE9BQU8sQ0FBQyxRQUFRLENBQUMsRUFBRSxNQUFNLEVBQUUsT0FBTyxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQ3JELENBQUM7Z0JBQ0YsTUFBTSxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDO2dCQUMxQixJQUFJLENBQUMsWUFBWSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsaUJBQWlCLENBQUMsQ0FBQyxDQUFDO2dCQUN0RCxPQUFPLE9BQU8sQ0FBQyxPQUFPLEVBQUUsQ0FBQzthQUMxQjtZQUFDLE9BQU8sRUFBRSxFQUFFO2dCQUNYLElBQUksRUFBRSxFQUFFO29CQUNOLElBQUksQ0FBQyxZQUFZLENBQUMsZ0JBQWdCLENBQUMsRUFBRSxDQUFDLENBQUM7aUJBQ3hDO2dCQUNELE9BQU8sT0FBTyxDQUFDLE1BQU0sRUFBRSxDQUFDO2FBQ3pCO1NBQ0Y7YUFBTTtZQUNMLElBQUksQ0FBQyxZQUFZLENBQUMsTUFBTSxDQUN0QixJQUFJLENBQUMsZ0JBQWdCLENBQUMsT0FBTyxDQUMzQixPQUFPLENBQUMsMkVBQTJFLENBQUMsRUFDcEYsRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLENBQ3BCLENBQ0YsQ0FBQztZQUNGLE9BQU8sT0FBTyxDQUFDLE1BQU0sRUFBRSxDQUFDO1NBQ3pCO0lBQ0gsQ0FBQztJQUVELE1BQU0sQ0FBQyxVQUF5QztRQUM5QyxPQUFPLEtBQUssQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUM7SUFDbEMsQ0FBQzs7bUhBM0RVLHNCQUFzQjt1SEFBdEIsc0JBQXNCLGNBRnJCLE1BQU07MkZBRVAsc0JBQXNCO2tCQUhsQyxVQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEZldGNoQ2xpZW50LCBJSWRlbnRpZmllZCwgSVJlc3VsdCB9IGZyb20gJ0BjOHkvY2xpZW50JztcbmltcG9ydCB7IERldmljZUdyaWRFeHRlbnNpb25GYWN0b3J5LCBEZXZpY2VHcmlkQWN0aW9uSG9vayB9IGZyb20gJ0BjOHkvbmd4LWNvbXBvbmVudHMvZGV2aWNlLWdyaWQnO1xuaW1wb3J0IHtcbiAgQWxlcnRTZXJ2aWNlLFxuICBnZXR0ZXh0LFxuICBNb2RhbFNlcnZpY2UsXG4gIFN0YXR1cyxcbiAgVGVuYW50VWlTZXJ2aWNlLFxuICBCdWlsdEluQWN0aW9uVHlwZVxufSBmcm9tICdAYzh5L25neC1jb21wb25lbnRzJztcbmltcG9ydCB7IFRyYW5zbGF0ZVNlcnZpY2UgfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJztcbmltcG9ydCB7IEx3bTJtQ2xpZW50U2VydmljZSB9IGZyb20gJ0BjOHkvbmd4LWNvbXBvbmVudHMvcHJvdG9jb2wtbHdtMm0vc2VydmljZXMnO1xuaW1wb3J0IHsgYWdlbnROYW1lLCBMd20ybU1hbmFnZWRPYmplY3QgfSBmcm9tICdAYzh5L25neC1jb21wb25lbnRzL3Byb3RvY29sLWx3bTJtL21vZGVsJztcblxuQEluamVjdGFibGUoe1xuICBwcm92aWRlZEluOiAncm9vdCdcbn0pXG5leHBvcnQgY2xhc3MgTHdtMm1EZXZpY2VHcmlkRmFjdG9yeVxuICBleHRlbmRzIEx3bTJtQ2xpZW50U2VydmljZTxMd20ybU1hbmFnZWRPYmplY3Q+XG4gIGltcGxlbWVudHMgRGV2aWNlR3JpZEV4dGVuc2lvbkZhY3RvcnlcbntcbiAgcHJvdGVjdGVkIGxpc3RVcmwgPSAnZGV2aWNlUmVnaXN0cmF0aW9uJztcblxuICBjb25zdHJ1Y3RvcihcbiAgICBjbGllbnQ6IEZldGNoQ2xpZW50LFxuICAgIHByaXZhdGUgdGVuYW50U2VydmljZTogVGVuYW50VWlTZXJ2aWNlLFxuICAgIHByaXZhdGUgbW9kYWw6IE1vZGFsU2VydmljZSxcbiAgICBwcml2YXRlIHRyYW5zbGF0ZVNlcnZpY2U6IFRyYW5zbGF0ZVNlcnZpY2UsXG4gICAgcHJpdmF0ZSBhbGVydFNlcnZpY2U6IEFsZXJ0U2VydmljZVxuICApIHtcbiAgICBzdXBlcihjbGllbnQpO1xuICB9XG5cbiAgZ2V0KCkge1xuICAgIHJldHVybiB7XG4gICAgICB0eXBlOiBCdWlsdEluQWN0aW9uVHlwZS5EZWxldGUsXG4gICAgICBkZXZpY2VNYXRjaGVzOiAobW86IEx3bTJtTWFuYWdlZE9iamVjdCkgPT4gc3VwZXIuaXNMd20ybURldmljZShtbyksXG4gICAgICBvbkFjdGlvbjogKG1vOiBMd20ybU1hbmFnZWRPYmplY3QpID0+IHRoaXMub25EZWxldGUobW8pLFxuICAgICAgcmVmcmVzaEFmdGVyQWN0aW9uRG9uZTogdHJ1ZVxuICAgIH0gYXMgRGV2aWNlR3JpZEFjdGlvbkhvb2s7XG4gIH1cblxuICBhc3luYyBvbkRlbGV0ZShkZXZpY2U6IEx3bTJtTWFuYWdlZE9iamVjdCkge1xuICAgIGlmICh0aGlzLnRlbmFudFNlcnZpY2UuaXNNaWNyb3NlcnZpY2VTdWJzY3JpYmVkSW5DdXJyZW50VGVuYW50KGFnZW50TmFtZSkpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGF3YWl0IHRoaXMubW9kYWwuY29uZmlybShcbiAgICAgICAgICBnZXR0ZXh0KCdEZWxldGUgTFdNMk0gZGV2aWNlJyksXG4gICAgICAgICAgdGhpcy50cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQoXG4gICAgICAgICAgICBnZXR0ZXh0KGBZb3UgYXJlIGFib3V0IHRvIGRlbGV0ZSBkZXZpY2UgXCJ7eyBuYW1lIH19XCIuIERvIHlvdSB3YW50IHRvIHByb2NlZWQ/YCksXG4gICAgICAgICAgICBkZXZpY2VcbiAgICAgICAgICApLFxuICAgICAgICAgIFN0YXR1cy5EQU5HRVIsXG4gICAgICAgICAgeyBvazogZ2V0dGV4dCgnRGVsZXRlJyksIGNhbmNlbDogZ2V0dGV4dCgnQ2FuY2VsJykgfVxuICAgICAgICApO1xuICAgICAgICBhd2FpdCB0aGlzLmRlbGV0ZShkZXZpY2UpO1xuICAgICAgICB0aGlzLmFsZXJ0U2VydmljZS5zdWNjZXNzKGdldHRleHQoJ0RldmljZSBkZWxldGVkLicpKTtcbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO1xuICAgICAgfSBjYXRjaCAoZXgpIHtcbiAgICAgICAgaWYgKGV4KSB7XG4gICAgICAgICAgdGhpcy5hbGVydFNlcnZpY2UuYWRkU2VydmVyRmFpbHVyZShleCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KCk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuYWxlcnRTZXJ2aWNlLmRhbmdlcihcbiAgICAgICAgdGhpcy50cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQoXG4gICAgICAgICAgZ2V0dGV4dChgWW91IGNhbid0IGRlbGV0ZSB0aGlzIGRldmljZS4gVGhlIHNlcnZpY2UgXCJ7eyBuYW1lIH19XCIgaXMgbm90IHN1YnNjcmliZWQuYCksXG4gICAgICAgICAgeyBuYW1lOiBhZ2VudE5hbWUgfVxuICAgICAgICApXG4gICAgICApO1xuICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KCk7XG4gICAgfVxuICB9XG5cbiAgZGVsZXRlKGVudGl0eU9ySWQ6IHN0cmluZyB8IG51bWJlciB8IElJZGVudGlmaWVkKTogUHJvbWlzZTxJUmVzdWx0PG51bGw+PiB7XG4gICAgcmV0dXJuIHN1cGVyLmRlbGV0ZShlbnRpdHlPcklkKTtcbiAgfVxufVxuIl19
@@ -126,7 +126,7 @@ AssignDevicesComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0",
126
126
  provide: DATA_GRID_CONFIGURATION_CONTEXT,
127
127
  useValue: AssignDevicesComponent.GRID_CONFIG_CONTEXT
128
128
  }
129
- ], viewQueries: [{ propertyName: "showDevicesToggle", first: true, predicate: ["showDevicesToggle"], descendants: true, read: TemplateRef }], ngImport: i0, template: "<div class=\"card-block flex-no-shrink separator-bottom col-xs-12 large-padding p-t-24 p-b-24\">\n <div class=\"row\">\n <div class=\"col-md-6 col-md-offset-3 col-lg-4 col-lg-offset-4\">\n <div class=\"h4 text-center text-medium\">\n {{ 'Assign devices' | translate }}\n </div>\n </div>\n </div>\n</div>\n<c8y-device-grid\n [title]=\"''\"\n [actionControls]=\"actionControls\"\n [infiniteScroll]=\"'auto'\"\n [selectable]=\"isSelectable\"\n [pagination]=\"pagination\"\n (itemsSelect)=\"onSelected($event)\"\n [refresh]=\"refresh\"\n [baseQuery]=\"baseQuery\"\n [headerActionControls]=\"headerActionControls\"\n [withChildren]=\"true\"\n class=\"flex-grow col-xs-12 no-gutter\"\n c8yProductExperience\n [actionName]=\"PRODUCT_EXPERIENCE.EVENT\"\n [actionData]=\"{ component: PRODUCT_EXPERIENCE.ASSIGN_DEVICES.COMPONENTS.ASSIGN_DEVICES }\"\n></c8y-device-grid>\n\n<div class=\"text-center card-footer p-24 separator\">\n <button\n class=\"btn btn-default\"\n type=\"button\"\n title=\"{{ 'Cancel' | translate }}\"\n (click)=\"onCancel.emit()\"\n c8yProductExperience\n [actionName]=\"PRODUCT_EXPERIENCE.EVENT\"\n [actionData]=\"{\n component: PRODUCT_EXPERIENCE.ASSIGN_DEVICES.COMPONENTS.ASSIGN_DEVICES,\n action: PRODUCT_EXPERIENCE.ASSIGN_DEVICES.ACTIONS.CANCEL\n }\"\n >\n <span>{{ 'Cancel' | translate }}</span>\n </button>\n <button\n class=\"btn btn-primary\"\n [ngClass]=\"{ 'btn-pending': pendingStatus }\"\n type=\"button\"\n title=\"{{ 'Assign' | translate }}\"\n (click)=\"assignDevices()\"\n [disabled]=\"selected.length === 0 || !canAssignDevice\"\n c8yProductExperience\n [actionName]=\"PRODUCT_EXPERIENCE.EVENT\"\n [actionData]=\"{\n component: PRODUCT_EXPERIENCE.ASSIGN_DEVICES.COMPONENTS.ASSIGN_DEVICES,\n action: PRODUCT_EXPERIENCE.ASSIGN_DEVICES.ACTIONS.ASSIGN\n }\"\n >\n <span>{{ 'Assign' | translate }}</span>\n </button>\n</div>\n\n<ng-template #showDevicesToggle let-control=\"headerActionControl\">\n <label class=\"c8y-switch a-s-center\" title=\"{{ control.text | translate }}\">\n <input type=\"checkbox\" [(ngModel)]=\"showChildren\" (click)=\"control.callback()\" />\n <span></span>\n <span>{{ control.text | translate }}</span>\n </label>\n <button\n class=\"btn-help m-r-16 a-s-center\"\n type=\"button\"\n [attr.aria-label]=\"'Help' | translate\"\n [popover]=\"childDevicesPop\"\n placement=\"bottom\"\n triggers=\"focus\"\n ></button>\n <ng-template #childDevicesPop>\n <span translate>\n Displays the button\n <span title=\"{{ 'Child devices icon' | translate }}\" class=\"btn btn-dot btn-icon no-pointer\">\n <i class=\"text-primary dlt-c8y-icon-enter-bottom\"></i>\n </span>\n next to target devices with children. Clicking it displays a list with all child devices of\n the selected target device.\n </span>\n </ng-template>\n</ng-template>\n", dependencies: [{ kind: "directive", type: i1.C8yTranslateDirective, selector: "[translate],[ngx-translate]" }, { kind: "directive", type: i4.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i5.CheckboxControlValueAccessor, selector: "input[type=checkbox][formControlName],input[type=checkbox][formControl],input[type=checkbox][ngModel]" }, { kind: "directive", type: i5.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i5.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i1.ProductExperienceDirective, selector: "[c8yProductExperience]", inputs: ["actionName", "actionData", "inherit", "suppressDataOverriding"] }, { kind: "component", type: i6.DeviceGridComponent, selector: "c8y-device-grid", inputs: ["dataCallback", "refresh", "title", "loadMoreItemsLabel", "loadingItemsLabel", "legacyConfigKey", "legacyFilterKey", "columns", "pagination", "infiniteScroll", "actionControls", "selectable", "baseQuery", "bulkActionControls", "headerActionControls", "childDeviceGrid", "parentDeviceId", "withChildren", "showSearch"], outputs: ["onColumnsChange", "onFilterChange", "onDeviceQueryStringChange", "itemsSelect"] }, { kind: "directive", type: i7.PopoverDirective, selector: "[popover]", inputs: ["adaptivePosition", "boundariesElement", "popover", "popoverContext", "popoverTitle", "placement", "outsideClick", "triggers", "container", "containerClass", "isOpen", "delay"], outputs: ["onShown", "onHidden"], exportAs: ["bs-popover"] }, { kind: "pipe", type: i1.C8yTranslatePipe, name: "translate" }] });
129
+ ], viewQueries: [{ propertyName: "showDevicesToggle", first: true, predicate: ["showDevicesToggle"], descendants: true, read: TemplateRef }], ngImport: i0, template: "<div class=\"card-block flex-no-shrink separator-bottom col-xs-12 large-padding p-t-24 p-b-24\">\n <div class=\"row\">\n <div class=\"col-md-6 col-md-offset-3 col-lg-4 col-lg-offset-4\">\n <div class=\"h4 text-center text-medium\">\n {{ 'Assign devices' | translate }}\n </div>\n </div>\n </div>\n</div>\n<c8y-device-grid\n [title]=\"''\"\n [actionControls]=\"actionControls\"\n [infiniteScroll]=\"'auto'\"\n [selectable]=\"isSelectable\"\n [pagination]=\"pagination\"\n (itemsSelect)=\"onSelected($event)\"\n [refresh]=\"refresh\"\n [baseQuery]=\"baseQuery\"\n [headerActionControls]=\"headerActionControls\"\n [withChildren]=\"true\"\n class=\"flex-grow col-xs-12 no-gutter\"\n c8yProductExperience\n [actionName]=\"PRODUCT_EXPERIENCE.EVENT\"\n [actionData]=\"{ component: PRODUCT_EXPERIENCE.ASSIGN_DEVICES.COMPONENTS.ASSIGN_DEVICES }\"\n></c8y-device-grid>\n\n<div class=\"text-center card-footer p-24 separator\">\n <button\n class=\"btn btn-default\"\n type=\"button\"\n title=\"{{ 'Cancel' | translate }}\"\n (click)=\"onCancel.emit()\"\n c8yProductExperience\n [actionName]=\"PRODUCT_EXPERIENCE.EVENT\"\n [actionData]=\"{\n component: PRODUCT_EXPERIENCE.ASSIGN_DEVICES.COMPONENTS.ASSIGN_DEVICES,\n action: PRODUCT_EXPERIENCE.ASSIGN_DEVICES.ACTIONS.CANCEL\n }\"\n >\n <span>{{ 'Cancel' | translate }}</span>\n </button>\n <button\n class=\"btn btn-primary\"\n [ngClass]=\"{ 'btn-pending': pendingStatus }\"\n type=\"button\"\n title=\"{{ 'Assign' | translate }}\"\n (click)=\"assignDevices()\"\n [disabled]=\"selected.length === 0 || !canAssignDevice\"\n c8yProductExperience\n [actionName]=\"PRODUCT_EXPERIENCE.EVENT\"\n [actionData]=\"{\n component: PRODUCT_EXPERIENCE.ASSIGN_DEVICES.COMPONENTS.ASSIGN_DEVICES,\n action: PRODUCT_EXPERIENCE.ASSIGN_DEVICES.ACTIONS.ASSIGN\n }\"\n >\n <span>{{ 'Assign' | translate }}</span>\n </button>\n</div>\n\n<ng-template #showDevicesToggle let-control=\"headerActionControl\">\n <label class=\"c8y-switch a-s-center\" title=\"{{ control.text | translate }}\">\n <input type=\"checkbox\" [(ngModel)]=\"showChildren\" (click)=\"control.callback()\" />\n <span></span>\n <span>{{ control.text | translate }}</span>\n </label>\n <button\n class=\"btn-help m-r-16 a-s-center\"\n type=\"button\"\n [attr.aria-label]=\"'Help' | translate\"\n [popover]=\"childDevicesPop\"\n placement=\"bottom\"\n triggers=\"focus\"\n ></button>\n <ng-template #childDevicesPop>\n <span translate>\n Displays the button\n <span title=\"Child devices icon\" class=\"btn btn-dot btn-icon no-pointer\">\n <i class=\"text-primary dlt-c8y-icon-enter-bottom\"></i>\n </span>\n next to target devices with children. Clicking it displays a list with all child devices of\n the selected target device.\n </span>\n </ng-template>\n</ng-template>\n", dependencies: [{ kind: "directive", type: i1.C8yTranslateDirective, selector: "[translate],[ngx-translate]" }, { kind: "directive", type: i4.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i5.CheckboxControlValueAccessor, selector: "input[type=checkbox][formControlName],input[type=checkbox][formControl],input[type=checkbox][ngModel]" }, { kind: "directive", type: i5.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i5.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i1.ProductExperienceDirective, selector: "[c8yProductExperience]", inputs: ["actionName", "actionData", "inherit", "suppressDataOverriding"] }, { kind: "component", type: i6.DeviceGridComponent, selector: "c8y-device-grid", inputs: ["dataCallback", "refresh", "title", "loadMoreItemsLabel", "loadingItemsLabel", "legacyConfigKey", "legacyFilterKey", "columns", "pagination", "infiniteScroll", "actionControls", "selectable", "baseQuery", "bulkActionControls", "headerActionControls", "childDeviceGrid", "parentDeviceId", "withChildren", "showSearch"], outputs: ["onColumnsChange", "onFilterChange", "onDeviceQueryStringChange", "itemsSelect"] }, { kind: "directive", type: i7.PopoverDirective, selector: "[popover]", inputs: ["adaptivePosition", "boundariesElement", "popover", "popoverContext", "popoverTitle", "placement", "outsideClick", "triggers", "container", "containerClass", "isOpen", "delay"], outputs: ["onShown", "onHidden"], exportAs: ["bs-popover"] }, { kind: "pipe", type: i1.C8yTranslatePipe, name: "translate" }] });
130
130
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.6", ngImport: i0, type: AssignDevicesComponent, decorators: [{
131
131
  type: Component,
132
132
  args: [{ selector: 'c8y-assign-devices', providers: [
@@ -138,7 +138,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.6", ngImpor
138
138
  provide: DATA_GRID_CONFIGURATION_CONTEXT,
139
139
  useValue: AssignDevicesComponent.GRID_CONFIG_CONTEXT
140
140
  }
141
- ], template: "<div class=\"card-block flex-no-shrink separator-bottom col-xs-12 large-padding p-t-24 p-b-24\">\n <div class=\"row\">\n <div class=\"col-md-6 col-md-offset-3 col-lg-4 col-lg-offset-4\">\n <div class=\"h4 text-center text-medium\">\n {{ 'Assign devices' | translate }}\n </div>\n </div>\n </div>\n</div>\n<c8y-device-grid\n [title]=\"''\"\n [actionControls]=\"actionControls\"\n [infiniteScroll]=\"'auto'\"\n [selectable]=\"isSelectable\"\n [pagination]=\"pagination\"\n (itemsSelect)=\"onSelected($event)\"\n [refresh]=\"refresh\"\n [baseQuery]=\"baseQuery\"\n [headerActionControls]=\"headerActionControls\"\n [withChildren]=\"true\"\n class=\"flex-grow col-xs-12 no-gutter\"\n c8yProductExperience\n [actionName]=\"PRODUCT_EXPERIENCE.EVENT\"\n [actionData]=\"{ component: PRODUCT_EXPERIENCE.ASSIGN_DEVICES.COMPONENTS.ASSIGN_DEVICES }\"\n></c8y-device-grid>\n\n<div class=\"text-center card-footer p-24 separator\">\n <button\n class=\"btn btn-default\"\n type=\"button\"\n title=\"{{ 'Cancel' | translate }}\"\n (click)=\"onCancel.emit()\"\n c8yProductExperience\n [actionName]=\"PRODUCT_EXPERIENCE.EVENT\"\n [actionData]=\"{\n component: PRODUCT_EXPERIENCE.ASSIGN_DEVICES.COMPONENTS.ASSIGN_DEVICES,\n action: PRODUCT_EXPERIENCE.ASSIGN_DEVICES.ACTIONS.CANCEL\n }\"\n >\n <span>{{ 'Cancel' | translate }}</span>\n </button>\n <button\n class=\"btn btn-primary\"\n [ngClass]=\"{ 'btn-pending': pendingStatus }\"\n type=\"button\"\n title=\"{{ 'Assign' | translate }}\"\n (click)=\"assignDevices()\"\n [disabled]=\"selected.length === 0 || !canAssignDevice\"\n c8yProductExperience\n [actionName]=\"PRODUCT_EXPERIENCE.EVENT\"\n [actionData]=\"{\n component: PRODUCT_EXPERIENCE.ASSIGN_DEVICES.COMPONENTS.ASSIGN_DEVICES,\n action: PRODUCT_EXPERIENCE.ASSIGN_DEVICES.ACTIONS.ASSIGN\n }\"\n >\n <span>{{ 'Assign' | translate }}</span>\n </button>\n</div>\n\n<ng-template #showDevicesToggle let-control=\"headerActionControl\">\n <label class=\"c8y-switch a-s-center\" title=\"{{ control.text | translate }}\">\n <input type=\"checkbox\" [(ngModel)]=\"showChildren\" (click)=\"control.callback()\" />\n <span></span>\n <span>{{ control.text | translate }}</span>\n </label>\n <button\n class=\"btn-help m-r-16 a-s-center\"\n type=\"button\"\n [attr.aria-label]=\"'Help' | translate\"\n [popover]=\"childDevicesPop\"\n placement=\"bottom\"\n triggers=\"focus\"\n ></button>\n <ng-template #childDevicesPop>\n <span translate>\n Displays the button\n <span title=\"{{ 'Child devices icon' | translate }}\" class=\"btn btn-dot btn-icon no-pointer\">\n <i class=\"text-primary dlt-c8y-icon-enter-bottom\"></i>\n </span>\n next to target devices with children. Clicking it displays a list with all child devices of\n the selected target device.\n </span>\n </ng-template>\n</ng-template>\n" }]
141
+ ], template: "<div class=\"card-block flex-no-shrink separator-bottom col-xs-12 large-padding p-t-24 p-b-24\">\n <div class=\"row\">\n <div class=\"col-md-6 col-md-offset-3 col-lg-4 col-lg-offset-4\">\n <div class=\"h4 text-center text-medium\">\n {{ 'Assign devices' | translate }}\n </div>\n </div>\n </div>\n</div>\n<c8y-device-grid\n [title]=\"''\"\n [actionControls]=\"actionControls\"\n [infiniteScroll]=\"'auto'\"\n [selectable]=\"isSelectable\"\n [pagination]=\"pagination\"\n (itemsSelect)=\"onSelected($event)\"\n [refresh]=\"refresh\"\n [baseQuery]=\"baseQuery\"\n [headerActionControls]=\"headerActionControls\"\n [withChildren]=\"true\"\n class=\"flex-grow col-xs-12 no-gutter\"\n c8yProductExperience\n [actionName]=\"PRODUCT_EXPERIENCE.EVENT\"\n [actionData]=\"{ component: PRODUCT_EXPERIENCE.ASSIGN_DEVICES.COMPONENTS.ASSIGN_DEVICES }\"\n></c8y-device-grid>\n\n<div class=\"text-center card-footer p-24 separator\">\n <button\n class=\"btn btn-default\"\n type=\"button\"\n title=\"{{ 'Cancel' | translate }}\"\n (click)=\"onCancel.emit()\"\n c8yProductExperience\n [actionName]=\"PRODUCT_EXPERIENCE.EVENT\"\n [actionData]=\"{\n component: PRODUCT_EXPERIENCE.ASSIGN_DEVICES.COMPONENTS.ASSIGN_DEVICES,\n action: PRODUCT_EXPERIENCE.ASSIGN_DEVICES.ACTIONS.CANCEL\n }\"\n >\n <span>{{ 'Cancel' | translate }}</span>\n </button>\n <button\n class=\"btn btn-primary\"\n [ngClass]=\"{ 'btn-pending': pendingStatus }\"\n type=\"button\"\n title=\"{{ 'Assign' | translate }}\"\n (click)=\"assignDevices()\"\n [disabled]=\"selected.length === 0 || !canAssignDevice\"\n c8yProductExperience\n [actionName]=\"PRODUCT_EXPERIENCE.EVENT\"\n [actionData]=\"{\n component: PRODUCT_EXPERIENCE.ASSIGN_DEVICES.COMPONENTS.ASSIGN_DEVICES,\n action: PRODUCT_EXPERIENCE.ASSIGN_DEVICES.ACTIONS.ASSIGN\n }\"\n >\n <span>{{ 'Assign' | translate }}</span>\n </button>\n</div>\n\n<ng-template #showDevicesToggle let-control=\"headerActionControl\">\n <label class=\"c8y-switch a-s-center\" title=\"{{ control.text | translate }}\">\n <input type=\"checkbox\" [(ngModel)]=\"showChildren\" (click)=\"control.callback()\" />\n <span></span>\n <span>{{ control.text | translate }}</span>\n </label>\n <button\n class=\"btn-help m-r-16 a-s-center\"\n type=\"button\"\n [attr.aria-label]=\"'Help' | translate\"\n [popover]=\"childDevicesPop\"\n placement=\"bottom\"\n triggers=\"focus\"\n ></button>\n <ng-template #childDevicesPop>\n <span translate>\n Displays the button\n <span title=\"Child devices icon\" class=\"btn btn-dot btn-icon no-pointer\">\n <i class=\"text-primary dlt-c8y-icon-enter-bottom\"></i>\n </span>\n next to target devices with children. Clicking it displays a list with all child devices of\n the selected target device.\n </span>\n </ng-template>\n</ng-template>\n" }]
142
142
  }], ctorParameters: function () { return [{ type: i1.AlertService }, { type: i2.SubAssetsService }, { type: i3.InventoryService }, { type: i1.GainsightService }]; }, propDecorators: { currentGroupId: [{
143
143
  type: Input
144
144
  }], refresh: [{
@@ -159,4 +159,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.6", ngImpor
159
159
  type: HostListener,
160
160
  args: ['document:keydown.escape', ['$event']]
161
161
  }] } });
162
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXNzaWduLWRldmljZXMuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3ViLWFzc2V0cy9hc3NpZ24tZGV2aWNlcy9hc3NpZ24tZGV2aWNlcy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi9zdWItYXNzZXRzL2Fzc2lnbi1kZXZpY2VzL2Fzc2lnbi1kZXZpY2VzLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCxTQUFTLEVBQ1QsWUFBWSxFQUNaLFlBQVksRUFDWixLQUFLLEVBQ0wsTUFBTSxFQUNOLFdBQVcsRUFDWCxTQUFTLEVBQ1YsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFrQixnQkFBZ0IsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUMvRCxPQUFPLEVBRUwsWUFBWSxFQUNaLCtCQUErQixFQUMvQixnQ0FBZ0MsRUFDaEMsZ0JBQWdCLEVBQ2hCLE9BQU8sRUFJUCxvQ0FBb0MsRUFFckMsTUFBTSxxQkFBcUIsQ0FBQztBQUM3QixPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUNoRSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQzs7Ozs7Ozs7O0FBZ0J6RCxNQUFNLE9BQU8sc0JBQXNCO0lBNkJqQyxZQUNVLEtBQW1CLEVBQ25CLGdCQUFrQyxFQUNsQyxnQkFBa0MsRUFDbEMsZ0JBQWtDO1FBSGxDLFVBQUssR0FBTCxLQUFLLENBQWM7UUFDbkIscUJBQWdCLEdBQWhCLGdCQUFnQixDQUFrQjtRQUNsQyxxQkFBZ0IsR0FBaEIsZ0JBQWdCLENBQWtCO1FBQ2xDLHFCQUFnQixHQUFoQixnQkFBZ0IsQ0FBa0I7UUF6QjVDLHFCQUFnQixHQUFHLFFBQVEsQ0FBQyxJQUFJLENBQUM7UUFDakMsdUJBQWtCLEdBQUcsa0JBQWtCLENBQUM7UUFHL0IsWUFBTyxHQUFHLElBQUksWUFBWSxFQUFPLENBQUM7UUFDakMs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IEV2ZW50RW1pdHRlcixcbiAgSG9zdExpc3RlbmVyLFxuICBJbnB1dCxcbiAgT3V0cHV0LFxuICBUZW1wbGF0ZVJlZixcbiAgVmlld0NoaWxkXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgSU1hbmFnZWRPYmplY3QsIEludmVudG9yeVNlcnZpY2UgfSBmcm9tICdAYzh5L2NsaWVudCc7XG5pbXBvcnQge1xuICBBY3Rpb25Db250cm9sLFxuICBBbGVydFNlcnZpY2UsXG4gIERBVEFfR1JJRF9DT05GSUdVUkFUSU9OX0NPTlRFWFQsXG4gIERBVEFfR1JJRF9DT05GSUdVUkFUSU9OX1NUUkFURUdZLFxuICBHYWluc2lnaHRTZXJ2aWNlLFxuICBnZXR0ZXh0LFxuICBIZWFkZXJBY3Rpb25Db250cm9sLFxuICBQYWdpbmF0aW9uLFxuICBSb3csXG4gIFVzZXJQcmVmZXJlbmNlc0NvbmZpZ3VyYXRpb25TdHJhdGVneSxcbiAgVXNlclByZWZlcmVuY2VzR3JpZENvbmZpZ0NvbnRleHRcbn0gZnJvbSAnQGM4eS9uZ3gtY29tcG9uZW50cyc7XG5pbXBvcnQgeyBQUk9EVUNUX0VYUEVSSUVOQ0UgfSBmcm9tICcuLi9zaGFyZWQvc3ViLWFzc2V0cy5tb2RlbCc7XG5pbXBvcnQgeyBTdWJBc3NldHNTZXJ2aWNlIH0gZnJvbSAnLi4vc3ViLWFzc2V0cy5zZXJ2aWNlJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnYzh5LWFzc2lnbi1kZXZpY2VzJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2Fzc2lnbi1kZXZpY2VzLmNvbXBvbmVudC5odG1sJyxcbiAgcHJvdmlkZXJzOiBbXG4gICAge1xuICAgICAgcHJvdmlkZTogREFUQV9HUklEX0NPTkZJR1VSQVRJT05fU1RSQVRFR1ksXG4gICAgICB1c2VDbGFzczogVXNlclByZWZlcmVuY2VzQ29uZmlndXJhdGlvblN0cmF0ZWd5XG4gICAgfSxcbiAgICB7XG4gICAgICBwcm92aWRlOiBEQVRBX0dSSURfQ09ORklHVVJBVElPTl9DT05URVhULFxuICAgICAgdXNlVmFsdWU6IEFzc2lnbkRldmljZXNDb21wb25lbnQuR1JJRF9DT05GSUdfQ09OVEVYVFxuICAgIH1cbiAgXVxufSlcbmV4cG9ydCBjbGFzcyBBc3NpZ25EZXZpY2VzQ29tcG9uZW50IHtcbiAgc3RhdGljIHJlYWRvbmx5IEdSSURfQ09ORklHX0NPTlRFWFQ6IFVzZXJQcmVmZXJlbmNlc0dyaWRDb25maWdDb250ZXh0ID0ge1xuICAgIGtleTogJ2Fzc2lnbi1kZXZpY2VzLWdyaWQnLFxuICAgIGNvbmZpZ0ZpbHRlcjoge1xuICAgICAgZmlsdGVyOiBmYWxzZVxuICAgIH1cbiAgfTtcblxuICBDVVJSRU5UX0xPQ0FUSU9OID0gbG9jYXRpb24uaHJlZjtcbiAgUFJPRFVDVF9FWFBFUklFTkNFID0gUFJPRFVDVF9FWFBFUklFTkNFO1xuXG4gIEBJbnB1dCgpIGN1cnJlbnRHcm91cElkOiBzdHJpbmc7XG4gIEBJbnB1dCgpIHJlZnJlc2ggPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcbiAgQE91dHB1dCgpIG9uQ2FuY2VsID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG4gIEBPdXRwdXQoKSBvblNob3dDaGlsZERldmljZXMgPSBuZXcgRXZlbnRFbWl0dGVyPGJvb2xlYW4+KCk7XG4gIEBPdXRwdXQoKSBzZWxlY3RlZERldmljZSA9IG5ldyBFdmVudEVtaXR0ZXI8SU1hbmFnZWRPYmplY3Q+KCk7XG4gIEBWaWV3Q2hpbGQoJ3Nob3dEZXZpY2VzVG9nZ2xlJywgeyByZWFkOiBUZW1wbGF0ZVJlZiB9KSBzaG93RGV2aWNlc1RvZ2dsZTogVGVtcGxhdGVSZWY8YW55PjtcblxuICBkZXZpY2VRdWVyeVN0cmluZ091dHB1dDogc3RyaW5nO1xuICBwZW5kaW5nU3RhdHVzID0gZmFsc2U7XG4gIHBhZ2luYXRpb246IFBhZ2luYXRpb24gPSB7IHBhZ2VTaXplOiAyMCwgY3VycmVudFBhZ2U6IDEgfTtcbiAgc2VsZWN0ZWQ6IHN0cmluZ1tdID0gW107XG4gIGJhc2VRdWVyeTogYW55O1xuICBjYW5Bc3NpZ25EZXZpY2UgPSBmYWxzZTtcbiAgYWN0aW9uQ29udHJvbHM6IEFjdGlvbkNvbnRyb2xbXSA9IFtdO1xuICBoZWFkZXJBY3Rpb25Db250cm9sczogSGVhZGVyQWN0aW9uQ29udHJvbFtdID0gW107XG4gIHNob3dDaGlsZHJlbiA9IGZhbHNlO1xuICByZWFkb25seSBpc1NlbGVjdGFibGUgPSB0cnVlO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgYWxlcnQ6IEFsZXJ0U2VydmljZSxcbiAgICBwcml2YXRlIHN1YkFzc2V0c1NlcnZpY2U6IFN1YkFzc2V0c1NlcnZpY2UsXG4gICAgcHJpdmF0ZSBpbnZlbnRvcnlTZXJ2aWNlOiBJbnZlbnRvcnlTZXJ2aWNlLFxuICAgIHByaXZhdGUgZ2FpbnNpZ2h0U2VydmljZTogR2FpbnNpZ2h0U2VydmljZVxuICApIHt9XG5cbiAgQEhvc3RMaXN0ZW5lcignZG9jdW1lbnQ6a2V5ZG93bi5lbnRlcicsIFsnJGV2ZW50J10pIG9uRW50ZXJLZXlEb3duKF9ldmVudDogS2V5Ym9hcmRFdmVudCkge1xuICAgIGlmICh0aGlzLnNlbGVjdGVkLmxlbmd0aCA+IDApIHtcbiAgICAgIHRoaXMuYXNzaWduRGV2aWNlcygpO1xuICAgIH1cbiAgfVxuXG4gIEBIb3N0TGlzdGVuZXIoJ2RvY3VtZW50OmtleWRvd24uZXNjYXBlJywgWyckZXZlbnQnXSkgb25Fc2NhcGVLZXlEb3duKF9ldmVudDogS2V5Ym9hcmRFdmVudCkge1xuICAgIHRoaXMub25DYW5jZWwuZW1pdCgpO1xuICB9XG5cbiAgYXN5bmMgbmdPbkluaXQoKSB7XG4gICAgdGhpcy5zZXROb3RJbmNsdWRlZEluR3JvdXBRdWVyeSgpO1xuICAgIHRoaXMuY2FuQXNzaWduRGV2aWNlID0gYXdhaXQgdGhpcy5zdWJBc3NldHNTZXJ2aWNlLmNhbkFzc2lnbkRldmljZSh7XG4gICAgICBpZDogdGhpcy5jdXJyZW50R3JvdXBJZFxuICAgIH0gYXMgSU1hbmFnZWRPYmplY3QpO1xuICAgIHRoaXMuc2V0SGVhZGVyQWN0aW9uQ29udHJvbHMoKTtcbiAgfVxuXG4gIHNldE5vdEluY2x1ZGVkSW5Hcm91cFF1ZXJ5KCkge1xuICAgIGNvbnN0IG5vdEluY2x1ZGVkSW5Hcm91cFF1ZXJ5ID0geyBfX25vdDogeyBfX2J5Z3JvdXBpZDogdGhpcy5jdXJyZW50R3JvdXBJZCB9IH07XG4gICAgdGhpcy5iYXNlUXVlcnkgPSBub3RJbmNsdWRlZEluR3JvdXBRdWVyeTtcbiAgfVxuXG4gIHNldEhlYWRlckFjdGlvbkNvbnRyb2xzKCkge1xuICAgIGNvbnN0IGhlYWRlckFjdGlvbkNvbnRyb2xzOiBIZWFkZXJBY3Rpb25Db250cm9sW10gPSBbXTtcbiAgICBjb25zdCBzaG93Q2hpbGREZXZpY2VzID0ge1xuICAgICAgdHlwZTogJ0RJU1BMQVlfQ0hJTERfREVWSUNFU19CVVRUT04nLFxuICAgICAgdGV4dDogZ2V0dGV4dCgnRW5hYmxlIGNoaWxkIGRldmljZXMgc2VsZWN0aW9uJyksXG4gICAgICB0ZW1wbGF0ZTogdGhpcy5zaG93RGV2aWNlc1RvZ2dsZSxcbiAgICAgIGNhbGxiYWNrOiAoKSA9PiB7XG4gICAgICAgIHRoaXMuc2hvd0NoaWxkcmVuID0gIXRoaXMuc2hvd0NoaWxkcmVuO1xuICAgICAgICB0aGlzLnNldEFjdGlvbkNvbnRyb2xzKHRoaXMuc2hvd0NoaWxkcmVuKTtcbiAgICAgICAgdGhpcy5nYWluc2lnaHRTZXJ2aWNlLnRyaWdnZXJFdmVudChQUk9EVUNUX0VYUEVSSUVOQ0UuRVZFTlQsIHtcbiAgICAgICAgICBjb21wb25lbnQ6IFBST0RVQ1RfRVhQRVJJRU5DRS5BU1NJR05fREVWSUNFUy5DT01QT05FTlRTLkFTU0lHTl9ERVZJQ0VTLFxuICAgICAgICAgIGFjdGlvbjogUFJPRFVDVF9FWFBFUklFTkNFLkFTU0lHTl9ERVZJQ0VTLkFDVElPTlMuRElTUExBWV9DSElMRF9ERVZJQ0VTLFxuICAgICAgICAgIHVybDogdGhpcy5DVVJSRU5UX0xPQ0FUSU9OXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH07XG4gICAgaGVhZGVyQWN0aW9uQ29udHJvbHMucHVzaChzaG93Q2hpbGREZXZpY2VzKTtcbiAgICB0aGlzLmhlYWRlckFjdGlvbkNvbnRyb2xzID0gaGVhZGVyQWN0aW9uQ29udHJvbHM7XG4gIH1cblxuICBzZXRBY3Rpb25Db250cm9scyhzaG93Q2hpbGRyZW46IGJvb2xlYW4pIHtcbiAgICBjb25zdCBhY3Rpb25Db250cm9sczogQWN0aW9uQ29udHJvbFtdID0gW107XG5cbiAgICBjb25zdCBzZWxlY3RDaGlsZHJlbkFjdGlvbjogQWN0aW9uQ29udHJvbCA9IHtcbiAgICAgIHR5cGU6ICdTSE9XX1RBUkdFVF9DSElMRF9ERVZJQ0VTJyxcbiAgICAgIGljb246ICdlbnRlci1ib3R0b20nLFxuICAgICAgdGV4dDogZ2V0dGV4dCgnU2VsZWN0IHRhcmdldCBjaGlsZCBkZXZpY2VzJyksXG4gICAgICBjYWxsYmFjazogKGFzc2V0OiBSb3cpID0+IHRoaXMuc2VsZWN0Q2hpbGRyZW4oYXNzZXQgYXMgSU1hbmFnZWRPYmplY3QpLFxuICAgICAgc2hvd0lmOiAoYXNzZXQ6IFJvdykgPT4gYXNzZXQuY2hpbGREZXZpY2VzLnJlZmVyZW5jZXMubGVuZ3RoID4gMFxuICAgIH07XG5cbiAgICBpZiAoc2hvd0NoaWxkcmVuKSB7XG4gICAgICBhY3Rpb25Db250cm9scy5wdXNoKHNlbGVjdENoaWxkcmVuQWN0aW9uKTtcbiAgICB9XG5cbiAgICB0aGlzLmFjdGlvbkNvbnRyb2xzID0gYWN0aW9uQ29udHJvbHM7XG4gICAgdGhpcy5yZWZyZXNoLmVtaXQoKTtcbiAgfVxuXG4gIGFzeW5jIGFzc2lnbkRldmljZXMoKSB7XG4gICAgaWYgKHRoaXMuY2FuQXNzaWduRGV2aWNlID09PSBmYWxzZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLnBlbmRpbmdTdGF0dXMgPSB0cnVlO1xuXG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IHRoaXMuaW52ZW50b3J5U2VydmljZS5jaGlsZEFzc2V0c0J1bGtBZGQodGhpcy5zZWxlY3RlZCwgdGhpcy5jdXJyZW50R3JvdXBJZCk7XG4gICAgICB0aGlzLnJlZnJlc2guZW1pdCgpO1xuICAgICAgdGhpcy5hbGVydC5zdWNjZXNzKGdldHRleHQoJ0RldmljZXMgYXNzaWduZWQuJykpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICB0aGlzLmFsZXJ0LmRhbmdlcihnZXR0ZXh0KCdDb3VsZCBub3QgYXNzaWduIGRldmljZXMuJyksIGVycm9yKTtcbiAgICB9XG4gICAgdGhpcy5wZW5kaW5nU3RhdHVzID0gZmFsc2U7XG4gICAgdGhpcy5zZWxlY3RlZCA9IFtdO1xuICAgIHRoaXMub25DYW5jZWwuZW1pdCgpO1xuICB9XG5cbiAgb25TZWxlY3RlZChzZWxlY3RlZERldmljZXNJRHM6IHN0cmluZ1tdKSB7XG4gICAgdGhpcy5zZWxlY3RlZCA9IHNlbGVjdGVkRGV2aWNlc0lEcztcbiAgfVxuXG4gIHNlbGVjdENoaWxkcmVuKGFzc2V0OiBJTWFuYWdlZE9iamVjdCkge1xuICAgIHRoaXMub25TaG93Q2hpbGREZXZpY2VzLmVtaXQodHJ1ZSk7XG4gICAgdGhpcy5zZWxlY3RlZERldmljZS5lbWl0KGFzc2V0KTtcbiAgfVxufVxuIiwiPGRpdiBjbGFzcz1cImNhcmQtYmxvY2sgZmxleC1uby1zaHJpbmsgc2VwYXJhdG9yLWJvdHRvbSBjb2wteHMtMTIgbGFyZ2UtcGFkZGluZyBwLXQtMjQgcC1iLTI0XCI+XG4gIDxkaXYgY2xhc3M9XCJyb3dcIj5cbiAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTYgY29sLW1kLW9mZnNldC0zIGNvbC1sZy00IGNvbC1sZy1vZmZzZXQtNFwiPlxuICAgICAgPGRpdiBjbGFzcz1cImg0IHRleHQtY2VudGVyIHRleHQtbWVkaXVtXCI+XG4gICAgICAgIHt7ICdBc3NpZ24gZGV2aWNlcycgfCB0cmFuc2xhdGUgfX1cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbjwvZGl2PlxuPGM4eS1kZXZpY2UtZ3JpZFxuICBbdGl0bGVdPVwiJydcIlxuICBbYWN0aW9uQ29udHJvbHNdPVwiYWN0aW9uQ29udHJvbHNcIlxuICBbaW5maW5pdGVTY3JvbGxdPVwiJ2F1dG8nXCJcbiAgW3NlbGVjdGFibGVdPVwiaXNTZWxlY3RhYmxlXCJcbiAgW3BhZ2luYXRpb25dPVwicGFnaW5hdGlvblwiXG4gIChpdGVtc1NlbGVjdCk9XCJvblNlbGVjdGVkKCRldmVudClcIlxuICBbcmVmcmVzaF09XCJyZWZyZXNoXCJcbiAgW2Jhc2VRdWVyeV09XCJiYXNlUXVlcnlcIlxuICBbaGVhZGVyQWN0aW9uQ29udHJvbHNdPVwiaGVhZGVyQWN0aW9uQ29udHJvbHNcIlxuICBbd2l0aENoaWxkcmVuXT1cInRydWVcIlxuICBjbGFzcz1cImZsZXgtZ3JvdyBjb2wteHMtMTIgbm8tZ3V0dGVyXCJcbiAgYzh5UHJvZHVjdEV4cGVyaWVuY2VcbiAgW2FjdGlvbk5hbWVdPVwiUFJPRFVDVF9FWFBFUklFTkNFLkVWRU5UXCJcbiAgW2FjdGlvbkRhdGFdPVwieyBjb21wb25lbnQ6IFBST0RVQ1RfRVhQRVJJRU5DRS5BU1NJR05fREVWSUNFUy5DT01QT05FTlRTLkFTU0lHTl9ERVZJQ0VTIH1cIlxuPjwvYzh5LWRldmljZS1ncmlkPlxuXG48ZGl2IGNsYXNzPVwidGV4dC1jZW50ZXIgY2FyZC1mb290ZXIgcC0yNCBzZXBhcmF0b3JcIj5cbiAgPGJ1dHRvblxuICAgIGNsYXNzPVwiYnRuIGJ0bi1kZWZhdWx0XCJcbiAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICB0aXRsZT1cInt7ICdDYW5jZWwnIHwgdHJhbnNsYXRlIH19XCJcbiAgICAoY2xpY2spPVwib25DYW5jZWwuZW1pdCgpXCJcbiAgICBjOHlQcm9kdWN0RXhwZXJpZW5jZVxuICAgIFthY3Rpb25OYW1lXT1cIlBST0RVQ1RfRVhQRVJJRU5DRS5FVkVOVFwiXG4gICAgW2FjdGlvbkRhdGFdPVwie1xuICAgICAgY29tcG9uZW50OiBQUk9EVUNUX0VYUEVSSUVOQ0UuQVNTSUdOX0RFVklDRVMuQ09NUE9ORU5UUy5BU1NJR05fREVWSUNFUyxcbiAgICAgIGFjdGlvbjogUFJPRFVDVF9FWFBFUklFTkNFLkFTU0lHTl9ERVZJQ0VTLkFDVElPTlMuQ0FOQ0VMXG4gICAgfVwiXG4gID5cbiAgICA8c3Bhbj57eyAnQ2FuY2VsJyB8IHRyYW5zbGF0ZSB9fTwvc3Bhbj5cbiAgPC9idXR0b24+XG4gIDxidXR0b25cbiAgICBjbGFzcz1cImJ0biBidG4tcHJpbWFyeVwiXG4gICAgW25nQ2xhc3NdPVwieyAnYnRuLXBlbmRpbmcnOiBwZW5kaW5nU3RhdHVzIH1cIlxuICAgIHR5cGU9XCJidXR0b25cIlxuICAgIHRpdGxlPVwie3sgJ0Fzc2lnbicgfCB0cmFuc2xhdGUgfX1cIlxuICAgIChjbGljayk9XCJhc3NpZ25EZXZpY2VzKClcIlxuICAgIFtkaXNhYmxlZF09XCJzZWxlY3RlZC5sZW5ndGggPT09IDAgfHwgIWNhbkFzc2lnbkRldmljZVwiXG4gICAgYzh5UHJvZHVjdEV4cGVyaWVuY2VcbiAgICBbYWN0aW9uTmFtZV09XCJQUk9EVUNUX0VYUEVSSUVOQ0UuRVZFTlRcIlxuICAgIFthY3Rpb25EYXRhXT1cIntcbiAgICAgIGNvbXBvbmVudDogUFJPRFVDVF9FWFBFUklFTkNFLkFTU0lHTl9ERVZJQ0VTLkNPTVBPTkVOVFMuQVNTSUdOX0RFVklDRVMsXG4gICAgICBhY3Rpb246IFBST0RVQ1RfRVhQRVJJRU5DRS5BU1NJR05fREVWSUNFUy5BQ1RJT05TLkFTU0lHTlxuICAgIH1cIlxuICA+XG4gICAgPHNwYW4+e3sgJ0Fzc2lnbicgfCB0cmFuc2xhdGUgfX08L3NwYW4+XG4gIDwvYnV0dG9uPlxuPC9kaXY+XG5cbjxuZy10ZW1wbGF0ZSAjc2hvd0RldmljZXNUb2dnbGUgbGV0LWNvbnRyb2w9XCJoZWFkZXJBY3Rpb25Db250cm9sXCI+XG4gIDxsYWJlbCBjbGFzcz1cImM4eS1zd2l0Y2ggYS1zLWNlbnRlclwiIHRpdGxlPVwie3sgY29udHJvbC50ZXh0IHwgdHJhbnNsYXRlIH19XCI+XG4gICAgPGlucHV0IHR5cGU9XCJjaGVja2JveFwiIFsobmdNb2RlbCldPVwic2hvd0NoaWxkcmVuXCIgKGNsaWNrKT1cImNvbnRyb2wuY2FsbGJhY2soKVwiIC8+XG4gICAgPHNwYW4+PC9zcGFuPlxuICAgIDxzcGFuPnt7IGNvbnRyb2wudGV4dCB8IHRyYW5zbGF0ZSB9fTwvc3Bhbj5cbiAgPC9sYWJlbD5cbiAgPGJ1dHRvblxuICAgIGNsYXNzPVwiYnRuLWhlbHAgbS1yLTE2IGEtcy1jZW50ZXJcIlxuICAgIHR5cGU9XCJidXR0b25cIlxuICAgIFthdHRyLmFyaWEtbGFiZWxdPVwiJ0hlbHAnIHwgdHJhbnNsYXRlXCJcbiAgICBbcG9wb3Zlcl09XCJjaGlsZERldmljZXNQb3BcIlxuICAgIHBsYWNlbWVudD1cImJvdHRvbVwiXG4gICAgdHJpZ2dlcnM9XCJmb2N1c1wiXG4gID48L2J1dHRvbj5cbiAgPG5nLXRlbXBsYXRlICNjaGlsZERldmljZXNQb3A+XG4gICAgPHNwYW4gdHJhbnNsYXRlPlxuICAgICAgRGlzcGxheXMgdGhlIGJ1dHRvblxuICAgICAgPHNwYW4gdGl0bGU9XCJ7eyAnQ2hpbGQgZGV2aWNlcyBpY29uJyB8IHRyYW5zbGF0ZSB9fVwiIGNsYXNzPVwiYnRuIGJ0bi1kb3QgYnRuLWljb24gbm8tcG9pbnRlclwiPlxuICAgICAgICA8aSBjbGFzcz1cInRleHQtcHJpbWFyeSBkbHQtYzh5LWljb24tZW50ZXItYm90dG9tXCI+PC9pPlxuICAgICAgPC9zcGFuPlxuICAgICAgbmV4dCB0byB0YXJnZXQgZGV2aWNlcyB3aXRoIGNoaWxkcmVuLiBDbGlja2luZyBpdCBkaXNwbGF5cyBhIGxpc3Qgd2l0aCBhbGwgY2hpbGQgZGV2aWNlcyBvZlxuICAgICAgdGhlIHNlbGVjdGVkIHRhcmdldCBkZXZpY2UuXG4gICAgPC9zcGFuPlxuICA8L25nLXRlbXBsYXRlPlxuPC9uZy10ZW1wbGF0ZT5cbiJdfQ==
162
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXNzaWduLWRldmljZXMuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3ViLWFzc2V0cy9hc3NpZ24tZGV2aWNlcy9hc3NpZ24tZGV2aWNlcy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi9zdWItYXNzZXRzL2Fzc2lnbi1kZXZpY2VzL2Fzc2lnbi1kZXZpY2VzLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCxTQUFTLEVBQ1QsWUFBWSxFQUNaLFlBQVksRUFDWixLQUFLLEVBQ0wsTUFBTSxFQUNOLFdBQVcsRUFDWCxTQUFTLEVBQ1YsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFrQixnQkFBZ0IsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUMvRCxPQUFPLEVBRUwsWUFBWSxFQUNaLCtCQUErQixFQUMvQixnQ0FBZ0MsRUFDaEMsZ0JBQWdCLEVBQ2hCLE9BQU8sRUFJUCxvQ0FBb0MsRUFFckMsTUFBTSxxQkFBcUIsQ0FBQztBQUM3QixPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUNoRSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQzs7Ozs7Ozs7O0FBZ0J6RCxNQUFNLE9BQU8sc0JBQXNCO0lBNkJqQyxZQUNVLEtBQW1CLEVBQ25CLGdCQUFrQyxFQUNsQyxnQkFBa0MsRUFDbEMsZ0JBQWtDO1FBSGxDLFVBQUssR0FBTCxLQUFLLENBQWM7UUFDbkIscUJBQWdCLEdBQWhCLGdCQUFnQixDQUFrQjtRQUNsQyxxQkFBZ0IsR0FBaEIsZ0JBQWdCLENBQWtCO1FBQ2xDLHFCQUFnQixHQUFoQixnQkFBZ0IsQ0FBa0I7UUF6QjVDLHFCQUFnQixHQUFHLFFBQVEsQ0FBQyxJQUFJLENBQUM7UUFDakMsdUJBQWtCLEdBQUcsa0JBQWtCLENBQUM7UUFHL0IsWUFBTyxHQUFHLElBQUksWUFBWSxFQUFPLENBQUM7UUFDakMs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IEV2ZW50RW1pdHRlcixcbiAgSG9zdExpc3RlbmVyLFxuICBJbnB1dCxcbiAgT3V0cHV0LFxuICBUZW1wbGF0ZVJlZixcbiAgVmlld0NoaWxkXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgSU1hbmFnZWRPYmplY3QsIEludmVudG9yeVNlcnZpY2UgfSBmcm9tICdAYzh5L2NsaWVudCc7XG5pbXBvcnQge1xuICBBY3Rpb25Db250cm9sLFxuICBBbGVydFNlcnZpY2UsXG4gIERBVEFfR1JJRF9DT05GSUdVUkFUSU9OX0NPTlRFWFQsXG4gIERBVEFfR1JJRF9DT05GSUdVUkFUSU9OX1NUUkFURUdZLFxuICBHYWluc2lnaHRTZXJ2aWNlLFxuICBnZXR0ZXh0LFxuICBIZWFkZXJBY3Rpb25Db250cm9sLFxuICBQYWdpbmF0aW9uLFxuICBSb3csXG4gIFVzZXJQcmVmZXJlbmNlc0NvbmZpZ3VyYXRpb25TdHJhdGVneSxcbiAgVXNlclByZWZlcmVuY2VzR3JpZENvbmZpZ0NvbnRleHRcbn0gZnJvbSAnQGM4eS9uZ3gtY29tcG9uZW50cyc7XG5pbXBvcnQgeyBQUk9EVUNUX0VYUEVSSUVOQ0UgfSBmcm9tICcuLi9zaGFyZWQvc3ViLWFzc2V0cy5tb2RlbCc7XG5pbXBvcnQgeyBTdWJBc3NldHNTZXJ2aWNlIH0gZnJvbSAnLi4vc3ViLWFzc2V0cy5zZXJ2aWNlJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnYzh5LWFzc2lnbi1kZXZpY2VzJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2Fzc2lnbi1kZXZpY2VzLmNvbXBvbmVudC5odG1sJyxcbiAgcHJvdmlkZXJzOiBbXG4gICAge1xuICAgICAgcHJvdmlkZTogREFUQV9HUklEX0NPTkZJR1VSQVRJT05fU1RSQVRFR1ksXG4gICAgICB1c2VDbGFzczogVXNlclByZWZlcmVuY2VzQ29uZmlndXJhdGlvblN0cmF0ZWd5XG4gICAgfSxcbiAgICB7XG4gICAgICBwcm92aWRlOiBEQVRBX0dSSURfQ09ORklHVVJBVElPTl9DT05URVhULFxuICAgICAgdXNlVmFsdWU6IEFzc2lnbkRldmljZXNDb21wb25lbnQuR1JJRF9DT05GSUdfQ09OVEVYVFxuICAgIH1cbiAgXVxufSlcbmV4cG9ydCBjbGFzcyBBc3NpZ25EZXZpY2VzQ29tcG9uZW50IHtcbiAgc3RhdGljIHJlYWRvbmx5IEdSSURfQ09ORklHX0NPTlRFWFQ6IFVzZXJQcmVmZXJlbmNlc0dyaWRDb25maWdDb250ZXh0ID0ge1xuICAgIGtleTogJ2Fzc2lnbi1kZXZpY2VzLWdyaWQnLFxuICAgIGNvbmZpZ0ZpbHRlcjoge1xuICAgICAgZmlsdGVyOiBmYWxzZVxuICAgIH1cbiAgfTtcblxuICBDVVJSRU5UX0xPQ0FUSU9OID0gbG9jYXRpb24uaHJlZjtcbiAgUFJPRFVDVF9FWFBFUklFTkNFID0gUFJPRFVDVF9FWFBFUklFTkNFO1xuXG4gIEBJbnB1dCgpIGN1cnJlbnRHcm91cElkOiBzdHJpbmc7XG4gIEBJbnB1dCgpIHJlZnJlc2ggPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcbiAgQE91dHB1dCgpIG9uQ2FuY2VsID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG4gIEBPdXRwdXQoKSBvblNob3dDaGlsZERldmljZXMgPSBuZXcgRXZlbnRFbWl0dGVyPGJvb2xlYW4+KCk7XG4gIEBPdXRwdXQoKSBzZWxlY3RlZERldmljZSA9IG5ldyBFdmVudEVtaXR0ZXI8SU1hbmFnZWRPYmplY3Q+KCk7XG4gIEBWaWV3Q2hpbGQoJ3Nob3dEZXZpY2VzVG9nZ2xlJywgeyByZWFkOiBUZW1wbGF0ZVJlZiB9KSBzaG93RGV2aWNlc1RvZ2dsZTogVGVtcGxhdGVSZWY8YW55PjtcblxuICBkZXZpY2VRdWVyeVN0cmluZ091dHB1dDogc3RyaW5nO1xuICBwZW5kaW5nU3RhdHVzID0gZmFsc2U7XG4gIHBhZ2luYXRpb246IFBhZ2luYXRpb24gPSB7IHBhZ2VTaXplOiAyMCwgY3VycmVudFBhZ2U6IDEgfTtcbiAgc2VsZWN0ZWQ6IHN0cmluZ1tdID0gW107XG4gIGJhc2VRdWVyeTogYW55O1xuICBjYW5Bc3NpZ25EZXZpY2UgPSBmYWxzZTtcbiAgYWN0aW9uQ29udHJvbHM6IEFjdGlvbkNvbnRyb2xbXSA9IFtdO1xuICBoZWFkZXJBY3Rpb25Db250cm9sczogSGVhZGVyQWN0aW9uQ29udHJvbFtdID0gW107XG4gIHNob3dDaGlsZHJlbiA9IGZhbHNlO1xuICByZWFkb25seSBpc1NlbGVjdGFibGUgPSB0cnVlO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgYWxlcnQ6IEFsZXJ0U2VydmljZSxcbiAgICBwcml2YXRlIHN1YkFzc2V0c1NlcnZpY2U6IFN1YkFzc2V0c1NlcnZpY2UsXG4gICAgcHJpdmF0ZSBpbnZlbnRvcnlTZXJ2aWNlOiBJbnZlbnRvcnlTZXJ2aWNlLFxuICAgIHByaXZhdGUgZ2FpbnNpZ2h0U2VydmljZTogR2FpbnNpZ2h0U2VydmljZVxuICApIHt9XG5cbiAgQEhvc3RMaXN0ZW5lcignZG9jdW1lbnQ6a2V5ZG93bi5lbnRlcicsIFsnJGV2ZW50J10pIG9uRW50ZXJLZXlEb3duKF9ldmVudDogS2V5Ym9hcmRFdmVudCkge1xuICAgIGlmICh0aGlzLnNlbGVjdGVkLmxlbmd0aCA+IDApIHtcbiAgICAgIHRoaXMuYXNzaWduRGV2aWNlcygpO1xuICAgIH1cbiAgfVxuXG4gIEBIb3N0TGlzdGVuZXIoJ2RvY3VtZW50OmtleWRvd24uZXNjYXBlJywgWyckZXZlbnQnXSkgb25Fc2NhcGVLZXlEb3duKF9ldmVudDogS2V5Ym9hcmRFdmVudCkge1xuICAgIHRoaXMub25DYW5jZWwuZW1pdCgpO1xuICB9XG5cbiAgYXN5bmMgbmdPbkluaXQoKSB7XG4gICAgdGhpcy5zZXROb3RJbmNsdWRlZEluR3JvdXBRdWVyeSgpO1xuICAgIHRoaXMuY2FuQXNzaWduRGV2aWNlID0gYXdhaXQgdGhpcy5zdWJBc3NldHNTZXJ2aWNlLmNhbkFzc2lnbkRldmljZSh7XG4gICAgICBpZDogdGhpcy5jdXJyZW50R3JvdXBJZFxuICAgIH0gYXMgSU1hbmFnZWRPYmplY3QpO1xuICAgIHRoaXMuc2V0SGVhZGVyQWN0aW9uQ29udHJvbHMoKTtcbiAgfVxuXG4gIHNldE5vdEluY2x1ZGVkSW5Hcm91cFF1ZXJ5KCkge1xuICAgIGNvbnN0IG5vdEluY2x1ZGVkSW5Hcm91cFF1ZXJ5ID0geyBfX25vdDogeyBfX2J5Z3JvdXBpZDogdGhpcy5jdXJyZW50R3JvdXBJZCB9IH07XG4gICAgdGhpcy5iYXNlUXVlcnkgPSBub3RJbmNsdWRlZEluR3JvdXBRdWVyeTtcbiAgfVxuXG4gIHNldEhlYWRlckFjdGlvbkNvbnRyb2xzKCkge1xuICAgIGNvbnN0IGhlYWRlckFjdGlvbkNvbnRyb2xzOiBIZWFkZXJBY3Rpb25Db250cm9sW10gPSBbXTtcbiAgICBjb25zdCBzaG93Q2hpbGREZXZpY2VzID0ge1xuICAgICAgdHlwZTogJ0RJU1BMQVlfQ0hJTERfREVWSUNFU19CVVRUT04nLFxuICAgICAgdGV4dDogZ2V0dGV4dCgnRW5hYmxlIGNoaWxkIGRldmljZXMgc2VsZWN0aW9uJyksXG4gICAgICB0ZW1wbGF0ZTogdGhpcy5zaG93RGV2aWNlc1RvZ2dsZSxcbiAgICAgIGNhbGxiYWNrOiAoKSA9PiB7XG4gICAgICAgIHRoaXMuc2hvd0NoaWxkcmVuID0gIXRoaXMuc2hvd0NoaWxkcmVuO1xuICAgICAgICB0aGlzLnNldEFjdGlvbkNvbnRyb2xzKHRoaXMuc2hvd0NoaWxkcmVuKTtcbiAgICAgICAgdGhpcy5nYWluc2lnaHRTZXJ2aWNlLnRyaWdnZXJFdmVudChQUk9EVUNUX0VYUEVSSUVOQ0UuRVZFTlQsIHtcbiAgICAgICAgICBjb21wb25lbnQ6IFBST0RVQ1RfRVhQRVJJRU5DRS5BU1NJR05fREVWSUNFUy5DT01QT05FTlRTLkFTU0lHTl9ERVZJQ0VTLFxuICAgICAgICAgIGFjdGlvbjogUFJPRFVDVF9FWFBFUklFTkNFLkFTU0lHTl9ERVZJQ0VTLkFDVElPTlMuRElTUExBWV9DSElMRF9ERVZJQ0VTLFxuICAgICAgICAgIHVybDogdGhpcy5DVVJSRU5UX0xPQ0FUSU9OXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH07XG4gICAgaGVhZGVyQWN0aW9uQ29udHJvbHMucHVzaChzaG93Q2hpbGREZXZpY2VzKTtcbiAgICB0aGlzLmhlYWRlckFjdGlvbkNvbnRyb2xzID0gaGVhZGVyQWN0aW9uQ29udHJvbHM7XG4gIH1cblxuICBzZXRBY3Rpb25Db250cm9scyhzaG93Q2hpbGRyZW46IGJvb2xlYW4pIHtcbiAgICBjb25zdCBhY3Rpb25Db250cm9sczogQWN0aW9uQ29udHJvbFtdID0gW107XG5cbiAgICBjb25zdCBzZWxlY3RDaGlsZHJlbkFjdGlvbjogQWN0aW9uQ29udHJvbCA9IHtcbiAgICAgIHR5cGU6ICdTSE9XX1RBUkdFVF9DSElMRF9ERVZJQ0VTJyxcbiAgICAgIGljb246ICdlbnRlci1ib3R0b20nLFxuICAgICAgdGV4dDogZ2V0dGV4dCgnU2VsZWN0IHRhcmdldCBjaGlsZCBkZXZpY2VzJyksXG4gICAgICBjYWxsYmFjazogKGFzc2V0OiBSb3cpID0+IHRoaXMuc2VsZWN0Q2hpbGRyZW4oYXNzZXQgYXMgSU1hbmFnZWRPYmplY3QpLFxuICAgICAgc2hvd0lmOiAoYXNzZXQ6IFJvdykgPT4gYXNzZXQuY2hpbGREZXZpY2VzLnJlZmVyZW5jZXMubGVuZ3RoID4gMFxuICAgIH07XG5cbiAgICBpZiAoc2hvd0NoaWxkcmVuKSB7XG4gICAgICBhY3Rpb25Db250cm9scy5wdXNoKHNlbGVjdENoaWxkcmVuQWN0aW9uKTtcbiAgICB9XG5cbiAgICB0aGlzLmFjdGlvbkNvbnRyb2xzID0gYWN0aW9uQ29udHJvbHM7XG4gICAgdGhpcy5yZWZyZXNoLmVtaXQoKTtcbiAgfVxuXG4gIGFzeW5jIGFzc2lnbkRldmljZXMoKSB7XG4gICAgaWYgKHRoaXMuY2FuQXNzaWduRGV2aWNlID09PSBmYWxzZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLnBlbmRpbmdTdGF0dXMgPSB0cnVlO1xuXG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IHRoaXMuaW52ZW50b3J5U2VydmljZS5jaGlsZEFzc2V0c0J1bGtBZGQodGhpcy5zZWxlY3RlZCwgdGhpcy5jdXJyZW50R3JvdXBJZCk7XG4gICAgICB0aGlzLnJlZnJlc2guZW1pdCgpO1xuICAgICAgdGhpcy5hbGVydC5zdWNjZXNzKGdldHRleHQoJ0RldmljZXMgYXNzaWduZWQuJykpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICB0aGlzLmFsZXJ0LmRhbmdlcihnZXR0ZXh0KCdDb3VsZCBub3QgYXNzaWduIGRldmljZXMuJyksIGVycm9yKTtcbiAgICB9XG4gICAgdGhpcy5wZW5kaW5nU3RhdHVzID0gZmFsc2U7XG4gICAgdGhpcy5zZWxlY3RlZCA9IFtdO1xuICAgIHRoaXMub25DYW5jZWwuZW1pdCgpO1xuICB9XG5cbiAgb25TZWxlY3RlZChzZWxlY3RlZERldmljZXNJRHM6IHN0cmluZ1tdKSB7XG4gICAgdGhpcy5zZWxlY3RlZCA9IHNlbGVjdGVkRGV2aWNlc0lEcztcbiAgfVxuXG4gIHNlbGVjdENoaWxkcmVuKGFzc2V0OiBJTWFuYWdlZE9iamVjdCkge1xuICAgIHRoaXMub25TaG93Q2hpbGREZXZpY2VzLmVtaXQodHJ1ZSk7XG4gICAgdGhpcy5zZWxlY3RlZERldmljZS5lbWl0KGFzc2V0KTtcbiAgfVxufVxuIiwiPGRpdiBjbGFzcz1cImNhcmQtYmxvY2sgZmxleC1uby1zaHJpbmsgc2VwYXJhdG9yLWJvdHRvbSBjb2wteHMtMTIgbGFyZ2UtcGFkZGluZyBwLXQtMjQgcC1iLTI0XCI+XG4gIDxkaXYgY2xhc3M9XCJyb3dcIj5cbiAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTYgY29sLW1kLW9mZnNldC0zIGNvbC1sZy00IGNvbC1sZy1vZmZzZXQtNFwiPlxuICAgICAgPGRpdiBjbGFzcz1cImg0IHRleHQtY2VudGVyIHRleHQtbWVkaXVtXCI+XG4gICAgICAgIHt7ICdBc3NpZ24gZGV2aWNlcycgfCB0cmFuc2xhdGUgfX1cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbjwvZGl2PlxuPGM4eS1kZXZpY2UtZ3JpZFxuICBbdGl0bGVdPVwiJydcIlxuICBbYWN0aW9uQ29udHJvbHNdPVwiYWN0aW9uQ29udHJvbHNcIlxuICBbaW5maW5pdGVTY3JvbGxdPVwiJ2F1dG8nXCJcbiAgW3NlbGVjdGFibGVdPVwiaXNTZWxlY3RhYmxlXCJcbiAgW3BhZ2luYXRpb25dPVwicGFnaW5hdGlvblwiXG4gIChpdGVtc1NlbGVjdCk9XCJvblNlbGVjdGVkKCRldmVudClcIlxuICBbcmVmcmVzaF09XCJyZWZyZXNoXCJcbiAgW2Jhc2VRdWVyeV09XCJiYXNlUXVlcnlcIlxuICBbaGVhZGVyQWN0aW9uQ29udHJvbHNdPVwiaGVhZGVyQWN0aW9uQ29udHJvbHNcIlxuICBbd2l0aENoaWxkcmVuXT1cInRydWVcIlxuICBjbGFzcz1cImZsZXgtZ3JvdyBjb2wteHMtMTIgbm8tZ3V0dGVyXCJcbiAgYzh5UHJvZHVjdEV4cGVyaWVuY2VcbiAgW2FjdGlvbk5hbWVdPVwiUFJPRFVDVF9FWFBFUklFTkNFLkVWRU5UXCJcbiAgW2FjdGlvbkRhdGFdPVwieyBjb21wb25lbnQ6IFBST0RVQ1RfRVhQRVJJRU5DRS5BU1NJR05fREVWSUNFUy5DT01QT05FTlRTLkFTU0lHTl9ERVZJQ0VTIH1cIlxuPjwvYzh5LWRldmljZS1ncmlkPlxuXG48ZGl2IGNsYXNzPVwidGV4dC1jZW50ZXIgY2FyZC1mb290ZXIgcC0yNCBzZXBhcmF0b3JcIj5cbiAgPGJ1dHRvblxuICAgIGNsYXNzPVwiYnRuIGJ0bi1kZWZhdWx0XCJcbiAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICB0aXRsZT1cInt7ICdDYW5jZWwnIHwgdHJhbnNsYXRlIH19XCJcbiAgICAoY2xpY2spPVwib25DYW5jZWwuZW1pdCgpXCJcbiAgICBjOHlQcm9kdWN0RXhwZXJpZW5jZVxuICAgIFthY3Rpb25OYW1lXT1cIlBST0RVQ1RfRVhQRVJJRU5DRS5FVkVOVFwiXG4gICAgW2FjdGlvbkRhdGFdPVwie1xuICAgICAgY29tcG9uZW50OiBQUk9EVUNUX0VYUEVSSUVOQ0UuQVNTSUdOX0RFVklDRVMuQ09NUE9ORU5UUy5BU1NJR05fREVWSUNFUyxcbiAgICAgIGFjdGlvbjogUFJPRFVDVF9FWFBFUklFTkNFLkFTU0lHTl9ERVZJQ0VTLkFDVElPTlMuQ0FOQ0VMXG4gICAgfVwiXG4gID5cbiAgICA8c3Bhbj57eyAnQ2FuY2VsJyB8IHRyYW5zbGF0ZSB9fTwvc3Bhbj5cbiAgPC9idXR0b24+XG4gIDxidXR0b25cbiAgICBjbGFzcz1cImJ0biBidG4tcHJpbWFyeVwiXG4gICAgW25nQ2xhc3NdPVwieyAnYnRuLXBlbmRpbmcnOiBwZW5kaW5nU3RhdHVzIH1cIlxuICAgIHR5cGU9XCJidXR0b25cIlxuICAgIHRpdGxlPVwie3sgJ0Fzc2lnbicgfCB0cmFuc2xhdGUgfX1cIlxuICAgIChjbGljayk9XCJhc3NpZ25EZXZpY2VzKClcIlxuICAgIFtkaXNhYmxlZF09XCJzZWxlY3RlZC5sZW5ndGggPT09IDAgfHwgIWNhbkFzc2lnbkRldmljZVwiXG4gICAgYzh5UHJvZHVjdEV4cGVyaWVuY2VcbiAgICBbYWN0aW9uTmFtZV09XCJQUk9EVUNUX0VYUEVSSUVOQ0UuRVZFTlRcIlxuICAgIFthY3Rpb25EYXRhXT1cIntcbiAgICAgIGNvbXBvbmVudDogUFJPRFVDVF9FWFBFUklFTkNFLkFTU0lHTl9ERVZJQ0VTLkNPTVBPTkVOVFMuQVNTSUdOX0RFVklDRVMsXG4gICAgICBhY3Rpb246IFBST0RVQ1RfRVhQRVJJRU5DRS5BU1NJR05fREVWSUNFUy5BQ1RJT05TLkFTU0lHTlxuICAgIH1cIlxuICA+XG4gICAgPHNwYW4+e3sgJ0Fzc2lnbicgfCB0cmFuc2xhdGUgfX08L3NwYW4+XG4gIDwvYnV0dG9uPlxuPC9kaXY+XG5cbjxuZy10ZW1wbGF0ZSAjc2hvd0RldmljZXNUb2dnbGUgbGV0LWNvbnRyb2w9XCJoZWFkZXJBY3Rpb25Db250cm9sXCI+XG4gIDxsYWJlbCBjbGFzcz1cImM4eS1zd2l0Y2ggYS1zLWNlbnRlclwiIHRpdGxlPVwie3sgY29udHJvbC50ZXh0IHwgdHJhbnNsYXRlIH19XCI+XG4gICAgPGlucHV0IHR5cGU9XCJjaGVja2JveFwiIFsobmdNb2RlbCldPVwic2hvd0NoaWxkcmVuXCIgKGNsaWNrKT1cImNvbnRyb2wuY2FsbGJhY2soKVwiIC8+XG4gICAgPHNwYW4+PC9zcGFuPlxuICAgIDxzcGFuPnt7IGNvbnRyb2wudGV4dCB8IHRyYW5zbGF0ZSB9fTwvc3Bhbj5cbiAgPC9sYWJlbD5cbiAgPGJ1dHRvblxuICAgIGNsYXNzPVwiYnRuLWhlbHAgbS1yLTE2IGEtcy1jZW50ZXJcIlxuICAgIHR5cGU9XCJidXR0b25cIlxuICAgIFthdHRyLmFyaWEtbGFiZWxdPVwiJ0hlbHAnIHwgdHJhbnNsYXRlXCJcbiAgICBbcG9wb3Zlcl09XCJjaGlsZERldmljZXNQb3BcIlxuICAgIHBsYWNlbWVudD1cImJvdHRvbVwiXG4gICAgdHJpZ2dlcnM9XCJmb2N1c1wiXG4gID48L2J1dHRvbj5cbiAgPG5nLXRlbXBsYXRlICNjaGlsZERldmljZXNQb3A+XG4gICAgPHNwYW4gdHJhbnNsYXRlPlxuICAgICAgRGlzcGxheXMgdGhlIGJ1dHRvblxuICAgICAgPHNwYW4gdGl0bGU9XCJDaGlsZCBkZXZpY2VzIGljb25cIiBjbGFzcz1cImJ0biBidG4tZG90IGJ0bi1pY29uIG5vLXBvaW50ZXJcIj5cbiAgICAgICAgPGkgY2xhc3M9XCJ0ZXh0LXByaW1hcnkgZGx0LWM4eS1pY29uLWVudGVyLWJvdHRvbVwiPjwvaT5cbiAgICAgIDwvc3Bhbj5cbiAgICAgIG5leHQgdG8gdGFyZ2V0IGRldmljZXMgd2l0aCBjaGlsZHJlbi4gQ2xpY2tpbmcgaXQgZGlzcGxheXMgYSBsaXN0IHdpdGggYWxsIGNoaWxkIGRldmljZXMgb2ZcbiAgICAgIHRoZSBzZWxlY3RlZCB0YXJnZXQgZGV2aWNlLlxuICAgIDwvc3Bhbj5cbiAgPC9uZy10ZW1wbGF0ZT5cbjwvbmctdGVtcGxhdGU+XG4iXX0=
@@ -154,10 +154,10 @@ export class MapWidgetConfigComponent {
154
154
  }
155
155
  }
156
156
  MapWidgetConfigComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.0.6", ngImport: i0, type: MapWidgetConfigComponent, deps: [{ token: i1.MapService }, { token: i2.AlertService }, { token: i3.TranslateService }, { token: MAP_DEFAULT_CONFIG, optional: true }, { token: i4.IconSelectorService }], target: i0.ɵɵFactoryTarget.Component });
157
- MapWidgetConfigComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.0.6", type: MapWidgetConfigComponent, selector: "c8y-map-widget-config", inputs: { config: "config" }, viewQueries: [{ propertyName: "previewMap", first: true, predicate: MapComponent, descendants: true }], usesOnChanges: true, ngImport: i0, template: "<div class=\"row p-t-16\">\n <div class=\"col-xs-2\">\n <c8y-form-group class=\"m-b-0 text-center form-group-sm\">\n <label translate>Marker icon</label>\n <div class=\"icon-32 text-muted text-center p-b-8\" *ngIf=\"formConfig.icon\">\n <i [c8yIcon]=\"formConfig.icon\"></i>\n </div>\n <div class=\"icon-32 text-muted text-center\" *ngIf=\"!formConfig.icon\">\n <span class=\"d-block text-12 p-b-16 p-t-16\">\n <em>{{ 'Auto' | translate }}</em>\n </span>\n </div>\n <button\n type=\"button\"\n title=\"{{ 'Select icon to override default behavior' | translate }}\"\n class=\"btn btn-default btn-xs btn-block\"\n *ngIf=\"!formConfig.icon\"\n (click)=\"openIconSelector()\"\n >\n {{ 'Select' | translate }}\n </button>\n <button\n type=\"button\"\n title=\"{{ 'Change icon' | translate }}\"\n class=\"btn btn-default btn-xs btn-block\"\n *ngIf=\"formConfig.icon\"\n (click)=\"openIconSelector()\"\n >\n {{ 'Change' | translate }}\n </button>\n <button\n type=\"button\"\n title=\"{{ 'Remove icon and use default behavior' | translate }}\"\n class=\"btn btn-danger btn-xs btn-block\"\n *ngIf=\"formConfig.icon\"\n (click)=\"removeIcon()\"\n >\n {{ 'Remove' | translate }}\n </button>\n </c8y-form-group>\n </div>\n <div class=\"col-xs-10\">\n <div class=\"row tight-grid separator-bottom\">\n <div class=\"col-xs-4\">\n <div class=\"form-group form-group-sm\">\n <label translate>Zoom level</label>\n <c8y-range\n #range\n [(ngModel)]=\"formConfig.zoomLevel\"\n name=\"zoomLevel\"\n class=\"label-bottom\"\n (change)=\"zoomLevelChanged()\"\n >\n <input type=\"range\" min=\"2\" max=\"18\" step=\"1\" />\n </c8y-range>\n </div>\n </div>\n <div class=\"col-xs-8\">\n <c8y-form-group class=\"form-group-sm m-b-8\">\n <label translate>Center bound</label>\n <div class=\"input-group input-group-sm\">\n <input\n class=\"form-control\"\n type=\"number\"\n required\n placeholder=\"lat\"\n [(ngModel)]=\"formConfig.center[0]\"\n (change)=\"changeCenter()\"\n name=\"centerLat\"\n />\n <input\n class=\"form-control\"\n type=\"number\"\n required\n placeholder=\"lng\"\n [(ngModel)]=\"formConfig.center[1]\"\n (change)=\"changeCenter()\"\n name=\"centerLng\"\n />\n <div class=\"input-group-btn\">\n <button\n class=\"btn btn-default\"\n (click)=\"useOwnPosition()\"\n [attr.aria-label]=\"'Use your location' | translate\"\n [tooltip]=\"'Use your location' | translate\"\n container=\"body\"\n placement=\"top\"\n >\n <i c8yIcon=\"location-arrow\" class=\"icon-14\"></i>\n </button>\n </div>\n <div class=\"input-group-btn\" *ngIf=\"canAutoCenter\">\n <button\n class=\"btn btn-default\"\n [attr.aria-label]=\"'Use selected asset location' | translate\"\n [tooltip]=\"'Use selected asset location' | translate\"\n placement=\"top\"\n container=\"body\"\n (click)=\"centerToAsset()\"\n >\n <i c8yIcon=\"location\" class=\"icon-14\"></i>\n </button>\n </div>\n </div>\n <div class=\"help-block\">\n {{ 'Drag the map below to the desired position' | translate }}\n </div>\n </c8y-form-group>\n </div>\n </div>\n\n <div class=\"row tight-grid p-t-8 d-flex a-i-center\">\n <div class=\"col-xs-4\">\n <c8y-form-group class=\"m-b-0 form-group-sm\">\n <div class=\"c8y-select-wrapper\">\n <select\n id=\"selectExample\"\n class=\"form-control\"\n [(ngModel)]=\"refreshOptions\"\n name=\"refreshSelection\"\n title=\"{{ 'Refresh options' | translate }}\"\n (change)=\"updateRefreshOptions()\"\n >\n <option value=\"none\" [title]=\"'Only refreshing on interaction' | translate\" translate>\n No automatic refresh\n </option>\n <option\n value=\"interval\"\n *ngIf=\"!isPositionedDevice\"\n [title]=\"'Refreshing after a give interval and on interaction' | translate\"\n translate\n >\n Use refresh interval\n </option>\n <option\n value=\"realtime\"\n *ngIf=\"isPositionedDevice\"\n [title]=\"'Live updating on each position change' | translate\"\n translate\n >\n Realtime\n </option>\n </select>\n </div>\n </c8y-form-group>\n </div>\n <div class=\"col-xs-8\">\n <div class=\"form-group form-group-sm m-b-0\">\n <c8y-range\n #intervalRange\n [(ngModel)]=\"formConfig.refreshInterval\"\n name=\"refreshInterval\"\n class=\"label-bottom\"\n *ngIf=\"refreshOptions === 'interval'\"\n >\n <ng-template #c8yRangeValue>\n <div>\n <span\n translate\n [translateParams]=\"{ interval: intervalRange.value * 0.001 }\"\n ngNonBindable\n >\n {{ interval }}s\n </span>\n </div>\n </ng-template>\n <input type=\"range\" min=\"5000\" max=\"100000\" step=\"1000\" />\n </c8y-range>\n </div>\n <label class=\"c8y-switch c8y-switch--inline\" *ngIf=\"refreshOptions === 'realtime'\">\n <input type=\"checkbox\" [(ngModel)]=\"formConfig.follow\" name=\"follow\" />\n <span></span>\n <span class=\"text-12\" translate>Follow selected</span>\n </label>\n </div>\n </div>\n </div>\n</div>\n\n<div class=\"p-t-16 p-b-16\" style=\"width: 100%; height: 240px\">\n <c8y-map\n [assets]=\"assets\"\n (onMove)=\"onPreviewMapMove($event)\"\n (onZoomStart)=\"onPreviewZoomStart()\"\n (onZoomEnd)=\"onPreviewZoomEnd($event)\"\n [config]=\"config.mapConfig\"\n ></c8y-map>\n</div>\n", dependencies: [{ kind: "directive", type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i6.NgSelectOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i6.ɵNgSelectMultipleOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i6.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i6.NumberValueAccessor, selector: "input[type=number][formControlName],input[type=number][formControl],input[type=number][ngModel]" }, { kind: "directive", type: i6.CheckboxControlValueAccessor, selector: "input[type=checkbox][formControlName],input[type=checkbox][formControl],input[type=checkbox][ngModel]" }, { kind: "directive", type: i6.SelectControlValueAccessor, selector: "select:not([multiple])[formControlName],select:not([multiple])[formControl],select:not([multiple])[ngModel]", inputs: ["compareWith"] }, { kind: "directive", type: i6.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i6.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i6.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i2.IconDirective, selector: "[c8yIcon]", inputs: ["c8yIcon"] }, { kind: "directive", type: i2.C8yTranslateDirective, selector: "[translate],[ngx-translate]" }, { kind: "directive", type: i2.MinValidationDirective, selector: "[min]", inputs: ["min"] }, { kind: "directive", type: i2.MaxValidationDirective, selector: "[max]", inputs: ["max"] }, { kind: "component", type: i2.FormGroupComponent, selector: "c8y-form-group", inputs: ["hasError", "hasWarning", "hasSuccess", "novalidation", "status"] }, { kind: "directive", type: i2.RequiredInputPlaceholderDirective, selector: "input[required], input[formControlName]" }, { kind: "directive", type: i2.RangeDirective, selector: "input[type=\"range\"]" }, { kind: "component", type: i2.RangeComponent, selector: "c8y-range" }, { kind: "component", type: i1.MapComponent, selector: "c8y-map", inputs: ["config", "assets"], outputs: ["onMove", "onMoveEnd", "onZoomStart", "onZoomEnd"] }, { kind: "directive", type: i7.TooltipDirective, selector: "[tooltip], [tooltipHtml]", inputs: ["adaptivePosition", "tooltip", "placement", "triggers", "container", "containerClass", "boundariesElement", "isOpen", "isDisabled", "delay", "tooltipHtml", "tooltipPlacement", "tooltipIsOpen", "tooltipEnable", "tooltipAppendToBody", "tooltipAnimation", "tooltipClass", "tooltipContext", "tooltipPopupDelay", "tooltipFadeDuration", "tooltipTrigger"], outputs: ["tooltipChange", "onShown", "onHidden", "tooltipStateChanged"], exportAs: ["bs-tooltip"] }, { kind: "pipe", type: i2.C8yTranslatePipe, name: "translate" }], viewProviders: [{ provide: ControlContainer, useExisting: NgForm }] });
157
+ MapWidgetConfigComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.0.6", type: MapWidgetConfigComponent, selector: "c8y-map-widget-config", inputs: { config: "config" }, viewQueries: [{ propertyName: "previewMap", first: true, predicate: MapComponent, descendants: true }], usesOnChanges: true, ngImport: i0, template: "<div class=\"row p-t-16\">\n <div class=\"col-xs-2\">\n <c8y-form-group class=\"m-b-0 text-center form-group-sm\">\n <label translate>Marker icon</label>\n <div class=\"icon-32 text-muted text-center p-b-8\" *ngIf=\"formConfig.icon\">\n <i [c8yIcon]=\"formConfig.icon\"></i>\n </div>\n <div class=\"icon-32 text-muted text-center\" *ngIf=\"!formConfig.icon\">\n <span class=\"d-block text-12 p-b-16 p-t-16\">\n <em>{{ 'Auto' | translate }}</em>\n </span>\n </div>\n <button\n type=\"button\"\n title=\"{{ 'Select icon to override default behavior' | translate }}\"\n class=\"btn btn-default btn-xs btn-block\"\n *ngIf=\"!formConfig.icon\"\n (click)=\"openIconSelector()\"\n >\n {{ 'Select' | translate }}\n </button>\n <button\n type=\"button\"\n title=\"{{ 'Change icon' | translate }}\"\n class=\"btn btn-default btn-xs btn-block\"\n *ngIf=\"formConfig.icon\"\n (click)=\"openIconSelector()\"\n >\n {{ 'Change' | translate }}\n </button>\n <button\n type=\"button\"\n title=\"{{ 'Remove icon and use default behavior' | translate }}\"\n class=\"btn btn-danger btn-xs btn-block\"\n *ngIf=\"formConfig.icon\"\n (click)=\"removeIcon()\"\n >\n {{ 'Remove' | translate }}\n </button>\n </c8y-form-group>\n </div>\n <div class=\"col-xs-10\">\n <div class=\"row tight-grid separator-bottom\">\n <div class=\"col-xs-4\">\n <div class=\"form-group form-group-sm\">\n <label translate>Zoom level</label>\n <c8y-range\n #range\n [(ngModel)]=\"formConfig.zoomLevel\"\n name=\"zoomLevel\"\n class=\"label-bottom\"\n (change)=\"zoomLevelChanged()\"\n >\n <input type=\"range\" min=\"2\" max=\"18\" step=\"1\" />\n </c8y-range>\n </div>\n </div>\n <div class=\"col-xs-8\">\n <c8y-form-group class=\"form-group-sm m-b-8\">\n <label translate>Center bound</label>\n <div class=\"input-group input-group-sm\">\n <input\n class=\"form-control\"\n type=\"number\"\n required\n placeholder=\"lat\"\n [(ngModel)]=\"formConfig.center[0]\"\n (change)=\"changeCenter()\"\n name=\"centerLat\"\n />\n <input\n class=\"form-control\"\n type=\"number\"\n required\n placeholder=\"lng\"\n [(ngModel)]=\"formConfig.center[1]\"\n (change)=\"changeCenter()\"\n name=\"centerLng\"\n />\n <div class=\"input-group-btn\">\n <button\n class=\"btn btn-default\"\n (click)=\"useOwnPosition()\"\n [attr.aria-label]=\"'Use your location' | translate\"\n [tooltip]=\"'Use your location' | translate\"\n container=\"body\"\n placement=\"top\"\n >\n <i c8yIcon=\"location-arrow\" class=\"icon-14\"></i>\n </button>\n </div>\n <div class=\"input-group-btn\" *ngIf=\"canAutoCenter\">\n <button\n class=\"btn btn-default\"\n [attr.aria-label]=\"'Use selected asset location' | translate\"\n [tooltip]=\"'Use selected asset location' | translate\"\n placement=\"top\"\n container=\"body\"\n (click)=\"centerToAsset()\"\n >\n <i c8yIcon=\"location\" class=\"icon-14\"></i>\n </button>\n </div>\n </div>\n <div class=\"help-block\">\n {{ 'Drag the map to the desired position' | translate }}\n </div>\n </c8y-form-group>\n </div>\n </div>\n\n <div class=\"row tight-grid p-t-8 d-flex a-i-center\">\n <div class=\"col-xs-4\">\n <c8y-form-group class=\"m-b-0 form-group-sm\">\n <div class=\"c8y-select-wrapper\">\n <select\n id=\"selectExample\"\n class=\"form-control\"\n [(ngModel)]=\"refreshOptions\"\n name=\"refreshSelection\"\n title=\"{{ 'Refresh options' | translate }}\"\n (change)=\"updateRefreshOptions()\"\n >\n <option value=\"none\" [title]=\"'Only refreshing on interaction' | translate\" translate>\n No automatic refresh\n </option>\n <option\n value=\"interval\"\n *ngIf=\"!isPositionedDevice\"\n [title]=\"'Refreshing after a give interval and on interaction' | translate\"\n translate\n >\n Use refresh interval\n </option>\n <option\n value=\"realtime\"\n *ngIf=\"isPositionedDevice\"\n [title]=\"'Live updating on each position change' | translate\"\n translate\n >\n Realtime\n </option>\n </select>\n </div>\n </c8y-form-group>\n </div>\n <div class=\"col-xs-8\">\n <div class=\"form-group form-group-sm m-b-0\">\n <c8y-range\n #intervalRange\n [(ngModel)]=\"formConfig.refreshInterval\"\n name=\"refreshInterval\"\n class=\"label-bottom\"\n *ngIf=\"refreshOptions === 'interval'\"\n >\n <ng-template #c8yRangeValue>\n <div>\n <span\n translate\n [translateParams]=\"{ interval: intervalRange.value * 0.001 }\"\n ngNonBindable\n >\n {{ interval }}s\n </span>\n </div>\n </ng-template>\n <input type=\"range\" min=\"5000\" max=\"100000\" step=\"1000\" />\n </c8y-range>\n </div>\n <label class=\"c8y-switch c8y-switch--inline\" *ngIf=\"refreshOptions === 'realtime'\">\n <input type=\"checkbox\" [(ngModel)]=\"formConfig.follow\" name=\"follow\" />\n <span></span>\n <span class=\"text-12\" translate>Follow selected</span>\n </label>\n </div>\n </div>\n </div>\n</div>\n\n<div class=\"p-t-16 p-b-16\" style=\"width: 100%; height: 240px\">\n <c8y-map\n [assets]=\"assets\"\n (onMove)=\"onPreviewMapMove($event)\"\n (onZoomStart)=\"onPreviewZoomStart()\"\n (onZoomEnd)=\"onPreviewZoomEnd($event)\"\n [config]=\"config.mapConfig\"\n ></c8y-map>\n</div>\n", dependencies: [{ kind: "directive", type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i6.NgSelectOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i6.ɵNgSelectMultipleOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i6.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i6.NumberValueAccessor, selector: "input[type=number][formControlName],input[type=number][formControl],input[type=number][ngModel]" }, { kind: "directive", type: i6.CheckboxControlValueAccessor, selector: "input[type=checkbox][formControlName],input[type=checkbox][formControl],input[type=checkbox][ngModel]" }, { kind: "directive", type: i6.SelectControlValueAccessor, selector: "select:not([multiple])[formControlName],select:not([multiple])[formControl],select:not([multiple])[ngModel]", inputs: ["compareWith"] }, { kind: "directive", type: i6.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i6.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i6.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i2.IconDirective, selector: "[c8yIcon]", inputs: ["c8yIcon"] }, { kind: "directive", type: i2.C8yTranslateDirective, selector: "[translate],[ngx-translate]" }, { kind: "directive", type: i2.MinValidationDirective, selector: "[min]", inputs: ["min"] }, { kind: "directive", type: i2.MaxValidationDirective, selector: "[max]", inputs: ["max"] }, { kind: "component", type: i2.FormGroupComponent, selector: "c8y-form-group", inputs: ["hasError", "hasWarning", "hasSuccess", "novalidation", "status"] }, { kind: "directive", type: i2.RequiredInputPlaceholderDirective, selector: "input[required], input[formControlName]" }, { kind: "directive", type: i2.RangeDirective, selector: "input[type=\"range\"]" }, { kind: "component", type: i2.RangeComponent, selector: "c8y-range" }, { kind: "component", type: i1.MapComponent, selector: "c8y-map", inputs: ["config", "assets"], outputs: ["onMove", "onMoveEnd", "onZoomStart", "onZoomEnd"] }, { kind: "directive", type: i7.TooltipDirective, selector: "[tooltip], [tooltipHtml]", inputs: ["adaptivePosition", "tooltip", "placement", "triggers", "container", "containerClass", "boundariesElement", "isOpen", "isDisabled", "delay", "tooltipHtml", "tooltipPlacement", "tooltipIsOpen", "tooltipEnable", "tooltipAppendToBody", "tooltipAnimation", "tooltipClass", "tooltipContext", "tooltipPopupDelay", "tooltipFadeDuration", "tooltipTrigger"], outputs: ["tooltipChange", "onShown", "onHidden", "tooltipStateChanged"], exportAs: ["bs-tooltip"] }, { kind: "pipe", type: i2.C8yTranslatePipe, name: "translate" }], viewProviders: [{ provide: ControlContainer, useExisting: NgForm }] });
158
158
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.6", ngImport: i0, type: MapWidgetConfigComponent, decorators: [{
159
159
  type: Component,
160
- args: [{ selector: 'c8y-map-widget-config', viewProviders: [{ provide: ControlContainer, useExisting: NgForm }], template: "<div class=\"row p-t-16\">\n <div class=\"col-xs-2\">\n <c8y-form-group class=\"m-b-0 text-center form-group-sm\">\n <label translate>Marker icon</label>\n <div class=\"icon-32 text-muted text-center p-b-8\" *ngIf=\"formConfig.icon\">\n <i [c8yIcon]=\"formConfig.icon\"></i>\n </div>\n <div class=\"icon-32 text-muted text-center\" *ngIf=\"!formConfig.icon\">\n <span class=\"d-block text-12 p-b-16 p-t-16\">\n <em>{{ 'Auto' | translate }}</em>\n </span>\n </div>\n <button\n type=\"button\"\n title=\"{{ 'Select icon to override default behavior' | translate }}\"\n class=\"btn btn-default btn-xs btn-block\"\n *ngIf=\"!formConfig.icon\"\n (click)=\"openIconSelector()\"\n >\n {{ 'Select' | translate }}\n </button>\n <button\n type=\"button\"\n title=\"{{ 'Change icon' | translate }}\"\n class=\"btn btn-default btn-xs btn-block\"\n *ngIf=\"formConfig.icon\"\n (click)=\"openIconSelector()\"\n >\n {{ 'Change' | translate }}\n </button>\n <button\n type=\"button\"\n title=\"{{ 'Remove icon and use default behavior' | translate }}\"\n class=\"btn btn-danger btn-xs btn-block\"\n *ngIf=\"formConfig.icon\"\n (click)=\"removeIcon()\"\n >\n {{ 'Remove' | translate }}\n </button>\n </c8y-form-group>\n </div>\n <div class=\"col-xs-10\">\n <div class=\"row tight-grid separator-bottom\">\n <div class=\"col-xs-4\">\n <div class=\"form-group form-group-sm\">\n <label translate>Zoom level</label>\n <c8y-range\n #range\n [(ngModel)]=\"formConfig.zoomLevel\"\n name=\"zoomLevel\"\n class=\"label-bottom\"\n (change)=\"zoomLevelChanged()\"\n >\n <input type=\"range\" min=\"2\" max=\"18\" step=\"1\" />\n </c8y-range>\n </div>\n </div>\n <div class=\"col-xs-8\">\n <c8y-form-group class=\"form-group-sm m-b-8\">\n <label translate>Center bound</label>\n <div class=\"input-group input-group-sm\">\n <input\n class=\"form-control\"\n type=\"number\"\n required\n placeholder=\"lat\"\n [(ngModel)]=\"formConfig.center[0]\"\n (change)=\"changeCenter()\"\n name=\"centerLat\"\n />\n <input\n class=\"form-control\"\n type=\"number\"\n required\n placeholder=\"lng\"\n [(ngModel)]=\"formConfig.center[1]\"\n (change)=\"changeCenter()\"\n name=\"centerLng\"\n />\n <div class=\"input-group-btn\">\n <button\n class=\"btn btn-default\"\n (click)=\"useOwnPosition()\"\n [attr.aria-label]=\"'Use your location' | translate\"\n [tooltip]=\"'Use your location' | translate\"\n container=\"body\"\n placement=\"top\"\n >\n <i c8yIcon=\"location-arrow\" class=\"icon-14\"></i>\n </button>\n </div>\n <div class=\"input-group-btn\" *ngIf=\"canAutoCenter\">\n <button\n class=\"btn btn-default\"\n [attr.aria-label]=\"'Use selected asset location' | translate\"\n [tooltip]=\"'Use selected asset location' | translate\"\n placement=\"top\"\n container=\"body\"\n (click)=\"centerToAsset()\"\n >\n <i c8yIcon=\"location\" class=\"icon-14\"></i>\n </button>\n </div>\n </div>\n <div class=\"help-block\">\n {{ 'Drag the map below to the desired position' | translate }}\n </div>\n </c8y-form-group>\n </div>\n </div>\n\n <div class=\"row tight-grid p-t-8 d-flex a-i-center\">\n <div class=\"col-xs-4\">\n <c8y-form-group class=\"m-b-0 form-group-sm\">\n <div class=\"c8y-select-wrapper\">\n <select\n id=\"selectExample\"\n class=\"form-control\"\n [(ngModel)]=\"refreshOptions\"\n name=\"refreshSelection\"\n title=\"{{ 'Refresh options' | translate }}\"\n (change)=\"updateRefreshOptions()\"\n >\n <option value=\"none\" [title]=\"'Only refreshing on interaction' | translate\" translate>\n No automatic refresh\n </option>\n <option\n value=\"interval\"\n *ngIf=\"!isPositionedDevice\"\n [title]=\"'Refreshing after a give interval and on interaction' | translate\"\n translate\n >\n Use refresh interval\n </option>\n <option\n value=\"realtime\"\n *ngIf=\"isPositionedDevice\"\n [title]=\"'Live updating on each position change' | translate\"\n translate\n >\n Realtime\n </option>\n </select>\n </div>\n </c8y-form-group>\n </div>\n <div class=\"col-xs-8\">\n <div class=\"form-group form-group-sm m-b-0\">\n <c8y-range\n #intervalRange\n [(ngModel)]=\"formConfig.refreshInterval\"\n name=\"refreshInterval\"\n class=\"label-bottom\"\n *ngIf=\"refreshOptions === 'interval'\"\n >\n <ng-template #c8yRangeValue>\n <div>\n <span\n translate\n [translateParams]=\"{ interval: intervalRange.value * 0.001 }\"\n ngNonBindable\n >\n {{ interval }}s\n </span>\n </div>\n </ng-template>\n <input type=\"range\" min=\"5000\" max=\"100000\" step=\"1000\" />\n </c8y-range>\n </div>\n <label class=\"c8y-switch c8y-switch--inline\" *ngIf=\"refreshOptions === 'realtime'\">\n <input type=\"checkbox\" [(ngModel)]=\"formConfig.follow\" name=\"follow\" />\n <span></span>\n <span class=\"text-12\" translate>Follow selected</span>\n </label>\n </div>\n </div>\n </div>\n</div>\n\n<div class=\"p-t-16 p-b-16\" style=\"width: 100%; height: 240px\">\n <c8y-map\n [assets]=\"assets\"\n (onMove)=\"onPreviewMapMove($event)\"\n (onZoomStart)=\"onPreviewZoomStart()\"\n (onZoomEnd)=\"onPreviewZoomEnd($event)\"\n [config]=\"config.mapConfig\"\n ></c8y-map>\n</div>\n" }]
160
+ args: [{ selector: 'c8y-map-widget-config', viewProviders: [{ provide: ControlContainer, useExisting: NgForm }], template: "<div class=\"row p-t-16\">\n <div class=\"col-xs-2\">\n <c8y-form-group class=\"m-b-0 text-center form-group-sm\">\n <label translate>Marker icon</label>\n <div class=\"icon-32 text-muted text-center p-b-8\" *ngIf=\"formConfig.icon\">\n <i [c8yIcon]=\"formConfig.icon\"></i>\n </div>\n <div class=\"icon-32 text-muted text-center\" *ngIf=\"!formConfig.icon\">\n <span class=\"d-block text-12 p-b-16 p-t-16\">\n <em>{{ 'Auto' | translate }}</em>\n </span>\n </div>\n <button\n type=\"button\"\n title=\"{{ 'Select icon to override default behavior' | translate }}\"\n class=\"btn btn-default btn-xs btn-block\"\n *ngIf=\"!formConfig.icon\"\n (click)=\"openIconSelector()\"\n >\n {{ 'Select' | translate }}\n </button>\n <button\n type=\"button\"\n title=\"{{ 'Change icon' | translate }}\"\n class=\"btn btn-default btn-xs btn-block\"\n *ngIf=\"formConfig.icon\"\n (click)=\"openIconSelector()\"\n >\n {{ 'Change' | translate }}\n </button>\n <button\n type=\"button\"\n title=\"{{ 'Remove icon and use default behavior' | translate }}\"\n class=\"btn btn-danger btn-xs btn-block\"\n *ngIf=\"formConfig.icon\"\n (click)=\"removeIcon()\"\n >\n {{ 'Remove' | translate }}\n </button>\n </c8y-form-group>\n </div>\n <div class=\"col-xs-10\">\n <div class=\"row tight-grid separator-bottom\">\n <div class=\"col-xs-4\">\n <div class=\"form-group form-group-sm\">\n <label translate>Zoom level</label>\n <c8y-range\n #range\n [(ngModel)]=\"formConfig.zoomLevel\"\n name=\"zoomLevel\"\n class=\"label-bottom\"\n (change)=\"zoomLevelChanged()\"\n >\n <input type=\"range\" min=\"2\" max=\"18\" step=\"1\" />\n </c8y-range>\n </div>\n </div>\n <div class=\"col-xs-8\">\n <c8y-form-group class=\"form-group-sm m-b-8\">\n <label translate>Center bound</label>\n <div class=\"input-group input-group-sm\">\n <input\n class=\"form-control\"\n type=\"number\"\n required\n placeholder=\"lat\"\n [(ngModel)]=\"formConfig.center[0]\"\n (change)=\"changeCenter()\"\n name=\"centerLat\"\n />\n <input\n class=\"form-control\"\n type=\"number\"\n required\n placeholder=\"lng\"\n [(ngModel)]=\"formConfig.center[1]\"\n (change)=\"changeCenter()\"\n name=\"centerLng\"\n />\n <div class=\"input-group-btn\">\n <button\n class=\"btn btn-default\"\n (click)=\"useOwnPosition()\"\n [attr.aria-label]=\"'Use your location' | translate\"\n [tooltip]=\"'Use your location' | translate\"\n container=\"body\"\n placement=\"top\"\n >\n <i c8yIcon=\"location-arrow\" class=\"icon-14\"></i>\n </button>\n </div>\n <div class=\"input-group-btn\" *ngIf=\"canAutoCenter\">\n <button\n class=\"btn btn-default\"\n [attr.aria-label]=\"'Use selected asset location' | translate\"\n [tooltip]=\"'Use selected asset location' | translate\"\n placement=\"top\"\n container=\"body\"\n (click)=\"centerToAsset()\"\n >\n <i c8yIcon=\"location\" class=\"icon-14\"></i>\n </button>\n </div>\n </div>\n <div class=\"help-block\">\n {{ 'Drag the map to the desired position' | translate }}\n </div>\n </c8y-form-group>\n </div>\n </div>\n\n <div class=\"row tight-grid p-t-8 d-flex a-i-center\">\n <div class=\"col-xs-4\">\n <c8y-form-group class=\"m-b-0 form-group-sm\">\n <div class=\"c8y-select-wrapper\">\n <select\n id=\"selectExample\"\n class=\"form-control\"\n [(ngModel)]=\"refreshOptions\"\n name=\"refreshSelection\"\n title=\"{{ 'Refresh options' | translate }}\"\n (change)=\"updateRefreshOptions()\"\n >\n <option value=\"none\" [title]=\"'Only refreshing on interaction' | translate\" translate>\n No automatic refresh\n </option>\n <option\n value=\"interval\"\n *ngIf=\"!isPositionedDevice\"\n [title]=\"'Refreshing after a give interval and on interaction' | translate\"\n translate\n >\n Use refresh interval\n </option>\n <option\n value=\"realtime\"\n *ngIf=\"isPositionedDevice\"\n [title]=\"'Live updating on each position change' | translate\"\n translate\n >\n Realtime\n </option>\n </select>\n </div>\n </c8y-form-group>\n </div>\n <div class=\"col-xs-8\">\n <div class=\"form-group form-group-sm m-b-0\">\n <c8y-range\n #intervalRange\n [(ngModel)]=\"formConfig.refreshInterval\"\n name=\"refreshInterval\"\n class=\"label-bottom\"\n *ngIf=\"refreshOptions === 'interval'\"\n >\n <ng-template #c8yRangeValue>\n <div>\n <span\n translate\n [translateParams]=\"{ interval: intervalRange.value * 0.001 }\"\n ngNonBindable\n >\n {{ interval }}s\n </span>\n </div>\n </ng-template>\n <input type=\"range\" min=\"5000\" max=\"100000\" step=\"1000\" />\n </c8y-range>\n </div>\n <label class=\"c8y-switch c8y-switch--inline\" *ngIf=\"refreshOptions === 'realtime'\">\n <input type=\"checkbox\" [(ngModel)]=\"formConfig.follow\" name=\"follow\" />\n <span></span>\n <span class=\"text-12\" translate>Follow selected</span>\n </label>\n </div>\n </div>\n </div>\n</div>\n\n<div class=\"p-t-16 p-b-16\" style=\"width: 100%; height: 240px\">\n <c8y-map\n [assets]=\"assets\"\n (onMove)=\"onPreviewMapMove($event)\"\n (onZoomStart)=\"onPreviewZoomStart()\"\n (onZoomEnd)=\"onPreviewZoomEnd($event)\"\n [config]=\"config.mapConfig\"\n ></c8y-map>\n</div>\n" }]
161
161
  }], ctorParameters: function () { return [{ type: i1.MapService }, { type: i2.AlertService }, { type: i3.TranslateService }, { type: undefined, decorators: [{
162
162
  type: Optional
163
163
  }, {
@@ -169,4 +169,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.6", ngImpor
169
169
  type: ViewChild,
170
170
  args: [MapComponent]
171
171
  }] } });
172
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFwLXdpZGdldC1jb25maWcuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vd2lkZ2V0cy9pbXBsZW1lbnRhdGlvbnMvbWFwL21hcC13aWRnZXQtY29uZmlnLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3dpZGdldHMvaW1wbGVtZW50YXRpb25zL21hcC9tYXAtd2lkZ2V0LWNvbmZpZy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBRUwsU0FBUyxFQUNULE1BQU0sRUFDTixLQUFLLEVBR0wsUUFBUSxFQUVSLFNBQVMsRUFDVixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDMUQsT0FBTyxFQUFFLFlBQVksRUFBRSxPQUFPLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUM1RCxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQztBQUN4RSxPQUFPLEVBRUwsZ0JBQWdCLEVBQ2hCLFlBQVksRUFFWixVQUFVLEVBQ1Ysa0JBQWtCLEVBRW5CLE1BQU0seUJBQXlCLENBQUM7QUFDakMsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0scUJBQXFCLENBQUM7Ozs7Ozs7OztBQVN2RCxNQUFNLE9BQU8sd0JBQXdCO0lBa0JuQyxZQUNVLFVBQXNCLEVBQ3RCLFlBQTBCLEVBQzFCLGdCQUFrQyxFQUNNLGFBQStCLEVBQ3ZFLFlBQWlDO1FBSmpDLGVBQVUsR0FBVixVQUFVLENBQVk7UUFDdEIsaUJBQVksR0FBWixZQUFZLENBQWM7UUFDMUIscUJBQWdCLEdBQWhCLGdCQUFnQixDQUFrQjtRQUNNLGtCQUFhLEdBQWIsYUFBYSxDQUFrQjtRQUN2RSxpQkFBWSxHQUFaLFlBQVksQ0FBcUI7UUF0QmxDLFdBQU0sR0FBb0I7WUFDakMsU0FBUyxFQUFFLFNBQVM7U0FDckIsQ0FB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dEI3Qix3QkFBd0IsdUlBZXhCLFlBQVkscUVDL0N6QixtcE5BNExBLG1zR0Q5SmlCLENBQUMsRUFBRSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsV0FBVyxFQUFFLE1BQU0sRUFBRSxDQUFDOzJGQUV4RCx3QkFBd0I7a0JBTHBDLFNBQVM7K0JBQ0UsdUJBQXVCLGlCQUVsQixDQUFDLEVBQUUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLFdBQVcsRUFBRSxNQUFNLEVBQUUsQ0FBQzs7MEJBd0JoRSxRQUFROzswQkFBSSxNQUFNOzJCQUFDLGtCQUFrQjs4RUFyQi9CLE1BQU07c0JBQWQsS0FBSztnQkFlRSxVQUFVO3NCQURqQixTQUFTO3VCQUFDLFlBQVkiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBBZnRlclZpZXdJbml0LFxuICBDb21wb25lbnQsXG4gIEluamVjdCxcbiAgSW5wdXQsXG4gIE9uQ2hhbmdlcyxcbiAgT25Jbml0LFxuICBPcHRpb25hbCxcbiAgU2ltcGxlQ2hhbmdlcyxcbiAgVmlld0NoaWxkXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQ29udHJvbENvbnRhaW5lciwgTmdGb3JtIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgQWxlcnRTZXJ2aWNlLCBnZXR0ZXh0IH0gZnJvbSAnQGM4eS9uZ3gtY29tcG9uZW50cyc7XG5pbXBvcnQgeyBJY29uU2VsZWN0b3JTZXJ2aWNlIH0gZnJvbSAnQGM4eS9uZ3gtY29tcG9uZW50cy9pY29uLXNlbGVjdG9yJztcbmltcG9ydCB7XG4gIENsdXN0ZXJNYXBDb25maWcsXG4gIGRlZmF1bHRNYXBDb25maWcsXG4gIE1hcENvbXBvbmVudCxcbiAgTWFwRGVmYXVsdENvbmZpZyxcbiAgTWFwU2VydmljZSxcbiAgTUFQX0RFRkFVTFRfQ09ORklHLFxuICBQb3NpdGlvbk1hbmFnZWRPYmplY3Rcbn0gZnJvbSAnQGM4eS9uZ3gtY29tcG9uZW50cy9tYXAnO1xuaW1wb3J0IHsgVHJhbnNsYXRlU2VydmljZSB9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnO1xuaW1wb3J0IHR5cGUgTCBmcm9tICdsZWFmbGV0JztcbmltcG9ydCB7IE1hcFdpZGdldENvbmZpZywgUmVmcmVzaE9wdGlvbnMgfSBmcm9tICcuL21hcC13aWRnZXQubW9kZWwnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdjOHktbWFwLXdpZGdldC1jb25maWcnLFxuICB0ZW1wbGF0ZVVybDogJy4vbWFwLXdpZGdldC1jb25maWcuY29tcG9uZW50Lmh0bWwnLFxuICB2aWV3UHJvdmlkZXJzOiBbeyBwcm92aWRlOiBDb250cm9sQ29udGFpbmVyLCB1c2VFeGlzdGluZzogTmdGb3JtIH1dXG59KVxuZXhwb3J0IGNsYXNzIE1hcFdpZGdldENvbmZpZ0NvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgQWZ0ZXJWaWV3SW5pdCwgT25DaGFuZ2VzIHtcbiAgQElucHV0KCkgY29uZmlnOiBNYXBXaWRnZXRDb25maWcgPSB7XG4gICAgbWFwQ29uZmlnOiB1bmRlZmluZWRcbiAgfTtcblxuICBmb3JtQ29uZmlnOiBDbHVzdGVyTWFwQ29uZmlnO1xuXG4gIGNhbkF1dG9DZW50ZXIgPSB0cnVlO1xuICBpc1Bvc2l0aW9uZWREZXZpY2UgPSBmYWxzZTtcbiAgYXNzZXRzOiBQb3NpdGlvbk1hbmFnZWRPYmplY3RbXTtcbiAgcmVmcmVzaE9wdGlvbnM6IFJlZnJlc2hPcHRpb25zID0gJ25vbmUnO1xuXG4gIHByaXZhdGUgbGVhZmxldDogdHlwZW9mIEw7XG4gIHByaXZhdGUgY2VudGVySWNvbjogTC5NYXJrZXI7XG5cbiAgQFZpZXdDaGlsZChNYXBDb21wb25lbnQpXG4gIHByaXZhdGUgcHJldmlld01hcDogTWFwQ29tcG9uZW50O1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgbWFwU2VydmljZTogTWFwU2VydmljZSxcbiAgICBwcml2YXRlIGFsZXJ0U2VydmljZTogQWxlcnRTZXJ2aWNlLFxuICAgIHByaXZhdGUgdHJhbnNsYXRlU2VydmljZTogVHJhbnNsYXRlU2VydmljZSxcbiAgICBAT3B0aW9uYWwoKSBASW5qZWN0KE1BUF9ERUZBVUxUX0NPTkZJRykgcHJpdmF0ZSBkZWZhdWx0Q29uZmlnOiBNYXBEZWZhdWx0Q29uZmlnLFxuICAgIHByaXZhdGUgaWNvblNlbGVjdG9yOiBJY29uU2VsZWN0b3JTZXJ2aWNlXG4gICkge1xuICAgIGlmICghdGhpcy5kZWZhdWx0Q29uZmlnKSB7XG4gICAgICB0aGlzLmRlZmF1bHRDb25maWcgPSBkZWZhdWx0TWFwQ29uZmlnO1xuICAgIH1cbiAgICB0aGlzLmZvcm1Db25maWcgPSB7XG4gICAgICB6b29tTGV2ZWw6IHRoaXMuZGVmYXVsdENvbmZpZy56b29tTGV2ZWwsXG4gICAgICBjZW50ZXI6IHRoaXMuZGVmYXVsdENvbmZpZy5jZW50ZXJcbiAgICB9O1xuICB9XG5cbiAgYXN5bmMgbmdPbkluaXQoKSB7XG4gICAgaWYgKCF0aGlzLmNvbmZpZy5tYXBDb25maWcpIHtcbiAgICAgIHRoaXMuY29uZmlnLm1hcENvbmZpZyA9IHRoaXMuZm9ybUNvbmZpZztcbiAgICB9XG4gICAgdGhpcy5mb3JtQ29uZmlnID0ge1xuICAgICAgLi4udGhpcy5mb3JtQ29uZmlnLFxuICAgICAgLi4udGhpcy5jb25maWcubWFwQ29uZmlnLFxuICAgICAgZGlzYWJsZVBhbjogZmFsc2VcbiAgICB9O1xuICAgIGF3YWl0IHRoaXMudXBkYXRlQXNzZXQoKTtcbiAgfVxuXG4gIGFzeW5jIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpIHtcbiAgICBpZiAoXG4gICAgICBjaGFuZ2VzLmNvbmZpZy5jdXJyZW50VmFsdWUgIT09IGNoYW5nZXMuY29uZmlnLnByZXZpb3VzVmFsdWUgJiZcbiAgICAgICFjaGFuZ2VzLmNvbmZpZy5maXJzdENoYW5nZVxuICAgICkge1xuICAgICAgYXdhaXQgdGhpcy51cGRhdGVBc3NldCgpO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIG5nQWZ0ZXJWaWV3SW5pdCgpIHtcbiAgICB0aGlzLmxlYWZsZXQgPSBhd2FpdCB0aGlzLm1hcFNlcnZpY2UuZ2V0TGVhZmxldCgpO1xuICAgIHRoaXMuYWRkQ2VudGVySWNvbih0aGlzLmZvcm1Db25maWcuY2VudGVyWzBdLCB0aGlzLmZvcm1Db25maWcuY2VudGVyWzFdKTtcbiAgfVxuXG4gIG9uQmVmb3JlU2F2ZSgpIHtcbiAgICB0aGlzLmNvbmZpZy5tYXBDb25maWcgPSB0aGlzLmZvcm1Db25maWc7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICB6b29tTGV2ZWxDaGFuZ2VkKCkge1xuICAgIHRoaXMuY29uZmlnLm1hcENvbmZpZyA9IHtcbiAgICAgIC4uLnRoaXMuY29uZmlnLm1hcENvbmZpZyxcbiAgICAgIHpvb21MZXZlbDogdGhpcy5mb3JtQ29uZmlnLnpvb21MZXZlbFxuICAgIH07XG4gIH1cblxuICBjaGFuZ2VDZW50ZXIoKSB7XG4gICAgdGhpcy5jb25maWcubWFwQ29uZmlnID0geyAuLi50aGlzLmZvcm1Db25maWcsIGNlbnRlcjogdGhpcy5mb3JtQ29uZmlnLmNlbnRlciB9O1xuICB9XG5cbiAgb25QcmV2aWV3Wm9vbVN0YXJ0KCkge1xuICAgIHRoaXMuY2VudGVySWNvbi5yZW1vdmUoKTtcbiAgfVxuXG4gIG9uUHJldmlld1pvb21FbmQoZXZlbnQ6IEwuTGVhZmxldEV2ZW50KSB7XG4gICAgdGhpcy5mb3JtQ29uZmlnLnpvb21MZXZlbCA9IE1hdGguZmxvb3IoZXZlbnQudGFyZ2V0LmdldFpvb20oKSk7XG4gIH1cblxuICBvblByZXZpZXdNYXBNb3ZlKGV2ZW50OiBMLkxlYWZsZXRFdmVudCkge1xuICAgIGlmICh0aGlzLmNlbnRlckljb24pIHtcbiAgICAgIHRoaXMuY2VudGVySWNvbi5yZW1vdmUoKTtcbiAgICB9XG4gICAgY29uc3QgeyBsYXQsIGxuZyB9ID0gZXZlbnQudGFyZ2V0LmdldEJvdW5kcygpLmdldENlbnRlcigpO1xuICAgIHRoaXMuYWRkQ2VudGVySWNvbihsYXQsIGxuZyk7XG4gICAgdGhpcy5mb3JtQ29uZmlnLmNlbnRlciA9IFtsYXQsIGxuZ107XG4gIH1cblxuICB1c2VPd25Qb3NpdGlvbigpIHtcbiAgICBuYXZpZ2F0b3IuZ2VvbG9jYXRpb24uZ2V0Q3VycmVudFBvc2l0aW9uKCh7IGNvb3JkcyB9KSA9PiB7XG4gICAgICB0aGlzLmZvcm1Db25maWcuY2VudGVyID0gW2Nvb3Jkcy5sYXRpdHVkZSwgY29vcmRzLmxvbmdpdHVkZV07XG4gICAgICB0aGlzLmNoYW5nZUNlbnRlcigpO1xuICAgIH0pO1xuICB9XG5cbiAgY2VudGVyVG9Bc3NldCgpIHtcbiAgICB0aGlzLmZvcm1Db25maWcuY2VudGVyID0gW1xuICAgICAgdGhpcy5jb25maWcuZGV2aWNlLmM4eV9Qb3NpdGlvbi5sYXQsXG4gICAgICB0aGlzLmNvbmZpZy5kZXZpY2UuYzh5X1Bvc2l0aW9uLmxuZ1xuICAgIF07XG4gICAgdGhpcy5jaGFuZ2VDZW50ZXIoKTtcbiAgfVxuXG4gIHVwZGF0ZVJlZnJlc2hPcHRpb25zKCkge1xuICAgIHRoaXMuZm9ybUNvbmZpZy5yZWFsdGltZSA9IHRoaXMucmVmcmVzaE9wdGlvbnMgPT09ICdyZWFsdGltZSc7XG4gICAgdGhpcy5mb3JtQ29uZmlnLnJlZnJlc2hJbnRlcnZhbCA9IHRoaXMucmVmcmVzaE9wdGlvbnMgPT09ICdpbnRlcnZhbCcgPyA1MDAwIDogbnVsbDtcbiAgICBpZiAoIXRoaXMuZm9ybUNvbmZpZy5yZWFsdGltZSkge1xuICAgICAgdGhpcy5mb3JtQ29uZmlnLmZvbGxvdyA9IGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIG9wZW5JY29uU2VsZWN0b3IoKSB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGljb24gPSBhd2FpdCB0aGlzLmljb25TZWxlY3Rvci5zZWxlY3RJY29uKHtcbiAgICAgICAgY3VycmVudFNlbGVjdGlvbjogdGhpcy5mb3JtQ29uZmlnLmljb25cbiAgICAgIH0pO1xuICAgICAgdGhpcy5mb3JtQ29uZmlnLmljb24gPSBpY29uO1xuICAgICAgdGhpcy5jb25maWcubWFwQ29uZmlnID0geyAuLi50aGlzLmNvbmZpZy5tYXBDb25maWcsIGljb24gfTtcbiAgICB9IGNhdGNoIHtcbiAgICAgIC8vIG5vdGhpbmcgdG8gZG9cbiAgICB9XG4gIH1cblxuICByZW1vdmVJY29uKCkge1xuICAgIHRoaXMuZm9ybUNvbmZpZy5pY29uID0gdW5kZWZpbmVkO1xuICAgIHRoaXMuY29uZmlnLm1hcENvbmZpZy5pY29uID0gdW5kZWZpbmVkO1xuICAgIHRoaXMucHJldmlld01hcC5yZWZyZXNoTWFya2VycygpO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyB1cGRhdGVBc3NldCgpIHtcbiAgICB0aGlzLmNhbkF1dG9DZW50ZXIgPSB0aGlzLm1hcFNlcnZpY2UuaGFzUG9zaXRpb24odGhpcy5jb25maWcuZGV2aWNlKTtcbiAgICB0aGlzLmlzUG9zaXRpb25lZERldmljZSA9IHRoaXMubWFwU2VydmljZS5pc1Bvc2l0aW9uZWREZXZpY2UodGhpcy5jb25maWcuZGV2aWNlKTtcbiAgICB0aGlzLnJlZnJlc2hPcHRpb25zID0gdGhpcy5nZXRSZWZyZXNoT3B0aW9ucygpO1xuICAgIHRoaXMudXBkYXRlUmVmcmVzaE9wdGlvbnMoKTtcblxuICAgIGNvbnN0IHsgZGF0YSwgcGFnaW5nIH0gPSBhd2FpdCB0aGlzLm1hcFNlcnZpY2UuZ2V0QWxsUG9zaXRpb25zTU9zKHRoaXMuY29uZmlnLmRldmljZSk7XG4gICAgdGhpcy5hc3NldHMgPSBkYXRhO1xuICAgIGlmIChwYWdpbmcudG90YWxQYWdlcyA+IDEpIHtcbiAgICAgIHRoaXMuYWxlcnRTZXJ2aWNlLmRhbmdlcihcbiAgICAgICAgZ2V0dGV4dChcbiAgICAgICAgICAnSXQgbWlnaHQgYmUgcG9zc2libGUgdGhhdCBhc3NldHMgYXJlIG5vdCBzaG93biBpbiB0aGUgcHJldmlldywgYXMgdGhlIGN1cnJlbnQgc2VsZWN0aW9uIGhhcyBtb3JlIHRoYW4gNTAwIGFzc2V0cyBhbmQgdGhlIHByZXZpZXcgb25seSBzdXBwb3J0cyBhIG1heGltdW0gb2YgNTAwIGFzc2V0cy4nXG4gICAgICAgIClcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBnZXRSZWZyZXNoT3B0aW9ucygpOiBSZWZyZXNoT3B0aW9ucyB7XG4gICAgbGV0IG9wdGlvbjogUmVmcmVzaE9wdGlvbnMgPSAnbm9uZSc7XG4gICAgaWYgKHRoaXMuZm9ybUNvbmZpZy5yZWFsdGltZSkge1xuICAgICAgb3B0aW9uID0gJ3JlYWx0aW1lJztcbiAgICB9IGVsc2UgaWYgKHRoaXMuZm9ybUNvbmZpZy5yZWZyZXNoSW50ZXJ2YWwpIHtcbiAgICAgIG9wdGlvbiA9ICdpbnRlcnZhbCc7XG4gICAgfVxuICAgIGNvbnN0IGlzTm90QWxsb3dlZE9wdGlvbiA9XG4gICAgICAoIXRoaXMuaXNQb3NpdGlvbmVkRGV2aWNlICYmIG9wdGlvbiA9PT0gJ3JlYWx0aW1lJykgfHxcbiAgICAgICh0aGlzLmlzUG9zaXRpb25lZERldmljZSAmJiBvcHRpb24gPT09ICdpbnRlcnZhbCcpO1xuICAgIG9wdGlvbiA9IGlzTm90QWxsb3dlZE9wdGlvbiA/ICdub25lJyA6IG9wdGlvbjtcbiAgICByZXR1cm4gb3B0aW9uO1xuICB9XG5cbiAgcHJpdmF0ZSBhZGRDZW50ZXJJY29uKGxhdDogbnVtYmVyLCBsbmc6IG51bWJlcikge1xuICAgIGNvbnN0IHRpdGxlVGV4dCA9IHRoaXMudHJhbnNsYXRlU2VydmljZS5pbnN0YW50KGdldHRleHQoJ01hcCBjZW50ZXInKSk7XG4gICAgY29uc3QgaWNvbiA9IHRoaXMubGVhZmxldC5kaXZJY29uKHtcbiAgICAgIGh0bWw6IGA8aSBzdHlsZT1cInBvaW50ZXItZXZlbnRzOiBub25lXCIgY2xhc3M9XCJjOHktbWFwLW1hcmtlci1pY29uIHRleHQtbXV0ZWQgZGx0LWM4eS1pY29uLXRhcmdldCBpY29uLTJ4XCIgdGl0bGU9XCIke3RpdGxlVGV4dH1cIiAvPmBcbiAgICB9KTtcbiAgICB0aGlzLmNlbnRlckljb24gPSB0aGlzLmxlYWZsZXQubWFya2VyKFtsYXQsIGxuZ10sIHtcbiAgICAgIGljb25cbiAgICB9KTtcbiAgICB0aGlzLnByZXZpZXdNYXAuYWRkTWFya2VyVG9NYXAodGhpcy5jZW50ZXJJY29uKTtcbiAgfVxufVxuIiwiPGRpdiBjbGFzcz1cInJvdyBwLXQtMTZcIj5cbiAgPGRpdiBjbGFzcz1cImNvbC14cy0yXCI+XG4gICAgPGM4eS1mb3JtLWdyb3VwIGNsYXNzPVwibS1iLTAgdGV4dC1jZW50ZXIgZm9ybS1ncm91cC1zbVwiPlxuICAgICAgPGxhYmVsIHRyYW5zbGF0ZT5NYXJrZXIgaWNvbjwvbGFiZWw+XG4gICAgICA8ZGl2IGNsYXNzPVwiaWNvbi0zMiB0ZXh0LW11dGVkIHRleHQtY2VudGVyIHAtYi04XCIgKm5nSWY9XCJmb3JtQ29uZmlnLmljb25cIj5cbiAgICAgICAgPGkgW2M4eUljb25dPVwiZm9ybUNvbmZpZy5pY29uXCI+PC9pPlxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzPVwiaWNvbi0zMiB0ZXh0LW11dGVkIHRleHQtY2VudGVyXCIgKm5nSWY9XCIhZm9ybUNvbmZpZy5pY29uXCI+XG4gICAgICAgIDxzcGFuIGNsYXNzPVwiZC1ibG9jayB0ZXh0LTEyIHAtYi0xNiBwLXQtMTZcIj5cbiAgICAgICAgICA8ZW0+e3sgJ0F1dG8nIHwgdHJhbnNsYXRlIH19PC9lbT5cbiAgICAgICAgPC9zcGFuPlxuICAgICAgPC9kaXY+XG4gICAgICA8YnV0dG9uXG4gICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICB0aXRsZT1cInt7ICdTZWxlY3QgaWNvbiB0byBvdmVycmlkZSBkZWZhdWx0IGJlaGF2aW9yJyB8IHRyYW5zbGF0ZSB9fVwiXG4gICAgICAgIGNsYXNzPVwiYnRuIGJ0bi1kZWZhdWx0IGJ0bi14cyBidG4tYmxvY2tcIlxuICAgICAgICAqbmdJZj1cIiFmb3JtQ29uZmlnLmljb25cIlxuICAgICAgICAoY2xpY2spPVwib3Blbkljb25TZWxlY3RvcigpXCJcbiAgICAgID5cbiAgICAgICAge3sgJ1NlbGVjdCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgIDwvYnV0dG9uPlxuICAgICAgPGJ1dHRvblxuICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgdGl0bGU9XCJ7eyAnQ2hhbmdlIGljb24nIHwgdHJhbnNsYXRlIH19XCJcbiAgICAgICAgY2xhc3M9XCJidG4gYnRuLWRlZmF1bHQgYnRuLXhzIGJ0bi1ibG9ja1wiXG4gICAgICAgICpuZ0lmPVwiZm9ybUNvbmZpZy5pY29uXCJcbiAgICAgICAgKGNsaWNrKT1cIm9wZW5JY29uU2VsZWN0b3IoKVwiXG4gICAgICA+XG4gICAgICAgIHt7ICdDaGFuZ2UnIHwgdHJhbnNsYXRlIH19XG4gICAgICA8L2J1dHRvbj5cbiAgICAgIDxidXR0b25cbiAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgIHRpdGxlPVwie3sgJ1JlbW92ZSBpY29uIGFuZCB1c2UgZGVmYXVsdCBiZWhhdmlvcicgfCB0cmFuc2xhdGUgfX1cIlxuICAgICAgICBjbGFzcz1cImJ0biBidG4tZGFuZ2VyIGJ0bi14cyBidG4tYmxvY2tcIlxuICAgICAgICAqbmdJZj1cImZvcm1Db25maWcuaWNvblwiXG4gICAgICAgIChjbGljayk9XCJyZW1vdmVJY29uKClcIlxuICAgICAgPlxuICAgICAgICB7eyAnUmVtb3ZlJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgPC9idXR0b24+XG4gICAgPC9jOHktZm9ybS1ncm91cD5cbiAgPC9kaXY+XG4gIDxkaXYgY2xhc3M9XCJjb2wteHMtMTBcIj5cbiAgICA8ZGl2IGNsYXNzPVwicm93IHRpZ2h0LWdyaWQgc2VwYXJhdG9yLWJvdHRvbVwiPlxuICAgICAgPGRpdiBjbGFzcz1cImNvbC14cy00XCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwIGZvcm0tZ3JvdXAtc21cIj5cbiAgICAgICAgICA8bGFiZWwgdHJhbnNsYXRlPlpvb20gbGV2ZWw8L2xhYmVsPlxuICAgICAgICAgIDxjOHktcmFuZ2VcbiAgICAgICAgICAgICNyYW5nZVxuICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJmb3JtQ29uZmlnLnpvb21MZXZlbFwiXG4gICAgICAgICAgICBuYW1lPVwiem9vbUxldmVsXCJcbiAgICAgICAgICAgIGNsYXNzPVwibGFiZWwtYm90dG9tXCJcbiAgICAgICAgICAgIChjaGFuZ2UpPVwiem9vbUxldmVsQ2hhbmdlZCgpXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8aW5wdXQgdHlwZT1cInJhbmdlXCIgbWluPVwiMlwiIG1heD1cIjE4XCIgc3RlcD1cIjFcIiAvPlxuICAgICAgICAgIDwvYzh5LXJhbmdlPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiBjbGFzcz1cImNvbC14cy04XCI+XG4gICAgICAgIDxjOHktZm9ybS1ncm91cCBjbGFzcz1cImZvcm0tZ3JvdXAtc20gbS1iLThcIj5cbiAgICAgICAgICA8bGFiZWwgdHJhbnNsYXRlPkNlbnRlciBib3VuZDwvbGFiZWw+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0LWdyb3VwIGlucHV0LWdyb3VwLXNtXCI+XG4gICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIlxuICAgICAgICAgICAgICB0eXBlPVwibnVtYmVyXCJcbiAgICAgICAgICAgICAgcmVxdWlyZWRcbiAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJsYXRcIlxuICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cImZvcm1Db25maWcuY2VudGVyWzBdXCJcbiAgICAgICAgICAgICAgKGNoYW5nZSk9XCJjaGFuZ2VDZW50ZXIoKVwiXG4gICAgICAgICAgICAgIG5hbWU9XCJjZW50ZXJMYXRcIlxuICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICBjbGFzcz1cImZvcm0tY29udHJvbFwiXG4gICAgICAgICAgICAgIHR5cGU9XCJudW1iZXJcIlxuICAgICAgICAgICAgICByZXF1aXJlZFxuICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cImxuZ1wiXG4gICAgICAgICAgICAgIFsobmdNb2RlbCldPVwiZm9ybUNvbmZpZy5jZW50ZXJbMV1cIlxuICAgICAgICAgICAgICAoY2hhbmdlKT1cImNoYW5nZUNlbnRlcigpXCJcbiAgICAgICAgICAgICAgbmFtZT1cImNlbnRlckxuZ1wiXG4gICAgICAgICAgICAvPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0LWdyb3VwLWJ0blwiPlxuICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJidG4gYnRuLWRlZmF1bHRcIlxuICAgICAgICAgICAgICAgIChjbGljayk9XCJ1c2VPd25Qb3NpdGlvbigpXCJcbiAgICAgICAgICAgICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cIidVc2UgeW91ciBsb2NhdGlvbicgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgICAgICAgIFt0b29sdGlwXT1cIidVc2UgeW91ciBsb2NhdGlvbicgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgICAgICAgIGNvbnRhaW5lcj1cImJvZHlcIlxuICAgICAgICAgICAgICAgIHBsYWNlbWVudD1cInRvcFwiXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8aSBjOHlJY29uPVwibG9jYXRpb24tYXJyb3dcIiBjbGFzcz1cImljb24tMTRcIj48L2k+XG4gICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtZ3JvdXAtYnRuXCIgKm5nSWY9XCJjYW5BdXRvQ2VudGVyXCI+XG4gICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICBjbGFzcz1cImJ0biBidG4tZGVmYXVsdFwiXG4gICAgICAgICAgICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCInVXNlIHNlbGVjdGVkIGFzc2V0IGxvY2F0aW9uJyB8IHRyYW5zbGF0ZVwiXG4gICAgICAgICAgICAgICAgW3Rvb2x0aXBdPVwiJ1VzZSBzZWxlY3RlZCBhc3NldCBsb2NhdGlvbicgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgICAgICAgIHBsYWNlbWVudD1cInRvcFwiXG4gICAgICAgICAgICAgICAgY29udGFpbmVyPVwiYm9keVwiXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cImNlbnRlclRvQXNzZXQoKVwiXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8aSBjOHlJY29uPVwibG9jYXRpb25cIiBjbGFzcz1cImljb24tMTRcIj48L2k+XG4gICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImhlbHAtYmxvY2tcIj5cbiAgICAgICAgICAgIHt7ICdEcmFnIHRoZSBtYXAgYmVsb3cgdG8gdGhlIGRlc2lyZWQgcG9zaXRpb24nIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvYzh5LWZvcm0tZ3JvdXA+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cblxuICAgIDxkaXYgY2xhc3M9XCJyb3cgdGlnaHQtZ3JpZCBwLXQtOCBkLWZsZXggYS1pLWNlbnRlclwiPlxuICAgICAgPGRpdiBjbGFzcz1cImNvbC14cy00XCI+XG4gICAgICAgIDxjOHktZm9ybS1ncm91cCBjbGFzcz1cIm0tYi0wIGZvcm0tZ3JvdXAtc21cIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiYzh5LXNlbGVjdC13cmFwcGVyXCI+XG4gICAgICAgICAgICA8c2VsZWN0XG4gICAgICAgICAgICAgIGlkPVwic2VsZWN0RXhhbXBsZVwiXG4gICAgICAgICAgICAgIGNsYXNzPVwiZm9ybS1jb250cm9sXCJcbiAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJyZWZyZXNoT3B0aW9uc1wiXG4gICAgICAgICAgICAgIG5hbWU9XCJyZWZyZXNoU2VsZWN0aW9uXCJcbiAgICAgICAgICAgICAgdGl0bGU9XCJ7eyAnUmVmcmVzaCBvcHRpb25zJyB8IHRyYW5zbGF0ZSB9fVwiXG4gICAgICAgICAgICAgIChjaGFuZ2UpPVwidXBkYXRlUmVmcmVzaE9wdGlvbnMoKVwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCJub25lXCIgW3RpdGxlXT1cIidPbmx5IHJlZnJlc2hpbmcgb24gaW50ZXJhY3Rpb24nIHwgdHJhbnNsYXRlXCIgdHJhbnNsYXRlPlxuICAgICAgICAgICAgICAgIE5vIGF1dG9tYXRpYyByZWZyZXNoXG4gICAgICAgICAgICAgIDwvb3B0aW9uPlxuICAgICAgICAgICAgICA8b3B0aW9uXG4gICAgICAgICAgICAgICAgdmFsdWU9XCJpbnRlcnZhbFwiXG4gICAgICAgICAgICAgICAgKm5nSWY9XCIhaXNQb3NpdGlvbmVkRGV2aWNlXCJcbiAgICAgICAgICAgICAgICBbdGl0bGVdPVwiJ1JlZnJlc2hpbmcgYWZ0ZXIgYSBnaXZlIGludGVydmFsIGFuZCBvbiBpbnRlcmFjdGlvbicgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgICAgICAgIHRyYW5zbGF0ZVxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgVXNlIHJlZnJlc2ggaW50ZXJ2YWxcbiAgICAgICAgICAgICAgPC9vcHRpb24+XG4gICAgICAgICAgICAgIDxvcHRpb25cbiAgICAgICAgICAgICAgICB2YWx1ZT1cInJlYWx0aW1lXCJcbiAgICAgICAgICAgICAgICAqbmdJZj1cImlzUG9zaXRpb25lZERldmljZVwiXG4gICAgICAgICAgICAgICAgW3RpdGxlXT1cIidMaXZlIHVwZGF0aW5nIG9uIGVhY2ggcG9zaXRpb24gY2hhbmdlJyB8IHRyYW5zbGF0ZVwiXG4gICAgICAgICAgICAgICAgdHJhbnNsYXRlXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICBSZWFsdGltZVxuICAgICAgICAgICAgICA8L29wdGlvbj5cbiAgICAgICAgICAgIDwvc2VsZWN0PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2M4eS1mb3JtLWdyb3VwPlxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzPVwiY29sLXhzLThcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZ3JvdXAgZm9ybS1ncm91cC1zbSBtLWItMFwiPlxuICAgICAgICAgIDxjOHktcmFuZ2VcbiAgICAgICAgICAgICNpbnRlcnZhbFJhbmdlXG4gICAgICAgICAgICBbKG5nTW9kZWwpXT1cImZvcm1Db25maWcucmVmcmVzaEludGVydmFsXCJcbiAgICAgICAgICAgIG5hbWU9XCJyZWZyZXNoSW50ZXJ2YWxcIlxuICAgICAgICAgICAgY2xhc3M9XCJsYWJlbC1ib3R0b21cIlxuICAgICAgICAgICAgKm5nSWY9XCJyZWZyZXNoT3B0aW9ucyA9PT0gJ2ludGVydmFsJ1wiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNjOHlSYW5nZVZhbHVlPlxuICAgICAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAgICAgICB0cmFuc2xhdGVcbiAgICAgICAgICAgICAgICAgIFt0cmFuc2xhdGVQYXJhbXNdPVwieyBpbnRlcnZhbDogaW50ZXJ2YWxSYW5nZS52YWx1ZSAqIDAuMDAxIH1cIlxuICAgICAgICAgICAgICAgICAgbmdOb25CaW5kYWJsZVxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgIHt7IGludGVydmFsIH19c1xuICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJyYW5nZVwiIG1pbj1cIjUwMDBcIiBtYXg9XCIxMDAwMDBcIiBzdGVwPVwiMTAwMFwiIC8+XG4gICAgICAgICAgPC9jOHktcmFuZ2U+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8bGFiZWwgY2xhc3M9XCJjOHktc3dpdGNoIGM4eS1zd2l0Y2gtLWlubGluZVwiICpuZ0lmPVwicmVmcmVzaE9wdGlvbnMgPT09ICdyZWFsdGltZSdcIj5cbiAgICAgICAgICA8aW5wdXQgdHlwZT1cImNoZWNrYm94XCIgWyhuZ01vZGVsKV09XCJmb3JtQ29uZmlnLmZvbGxvd1wiIG5hbWU9XCJmb2xsb3dcIiAvPlxuICAgICAgICAgIDxzcGFuPjwvc3Bhbj5cbiAgICAgICAgICA8c3BhbiBjbGFzcz1cInRleHQtMTJcIiB0cmFuc2xhdGU+Rm9sbG93IHNlbGVjdGVkPC9zcGFuPlxuICAgICAgICA8L2xhYmVsPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuPC9kaXY+XG5cbjxkaXYgY2xhc3M9XCJwLXQtMTYgcC1iLTE2XCIgc3R5bGU9XCJ3aWR0aDogMTAwJTsgaGVpZ2h0OiAyNDBweFwiPlxuICA8Yzh5LW1hcFxuICAgIFthc3NldHNdPVwiYXNzZXRzXCJcbiAgICAob25Nb3ZlKT1cIm9uUHJldmlld01hcE1vdmUoJGV2ZW50KVwiXG4gICAgKG9uWm9vbVN0YXJ0KT1cIm9uUHJldmlld1pvb21TdGFydCgpXCJcbiAgICAob25ab29tRW5kKT1cIm9uUHJldmlld1pvb21FbmQoJGV2ZW50KVwiXG4gICAgW2NvbmZpZ109XCJjb25maWcubWFwQ29uZmlnXCJcbiAgPjwvYzh5LW1hcD5cbjwvZGl2PlxuIl19
172
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFwLXdpZGdldC1jb25maWcuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vd2lkZ2V0cy9pbXBsZW1lbnRhdGlvbnMvbWFwL21hcC13aWRnZXQtY29uZmlnLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3dpZGdldHMvaW1wbGVtZW50YXRpb25zL21hcC9tYXAtd2lkZ2V0LWNvbmZpZy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBRUwsU0FBUyxFQUNULE1BQU0sRUFDTixLQUFLLEVBR0wsUUFBUSxFQUVSLFNBQVMsRUFDVixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDMUQsT0FBTyxFQUFFLFlBQVksRUFBRSxPQUFPLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUM1RCxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQztBQUN4RSxPQUFPLEVBRUwsZ0JBQWdCLEVBQ2hCLFlBQVksRUFFWixVQUFVLEVBQ1Ysa0JBQWtCLEVBRW5CLE1BQU0seUJBQXlCLENBQUM7QUFDakMsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0scUJBQXFCLENBQUM7Ozs7Ozs7OztBQVN2RCxNQUFNLE9BQU8sd0JBQXdCO0lBa0JuQyxZQUNVLFVBQXNCLEVBQ3RCLFlBQTBCLEVBQzFCLGdCQUFrQyxFQUNNLGFBQStCLEVBQ3ZFLFlBQWlDO1FBSmpDLGVBQVUsR0FBVixVQUFVLENBQVk7UUFDdEIsaUJBQVksR0FBWixZQUFZLENBQWM7UUFDMUIscUJBQWdCLEdBQWhCLGdCQUFnQixDQUFrQjtRQUNNLGtCQUFhLEdBQWIsYUFBYSxDQUFrQjtRQUN2RSxpQkFBWSxHQUFaLFlBQVksQ0FBcUI7UUF0QmxDLFdBQU0sR0FBb0I7WUFDakMsU0FBUyxFQUFFLFNBQVM7U0FDckIsQ0FB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dEI3Qix3QkFBd0IsdUlBZXhCLFlBQVkscUVDL0N6Qiw2b05BNExBLG1zR0Q5SmlCLENBQUMsRUFBRSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsV0FBVyxFQUFFLE1BQU0sRUFBRSxDQUFDOzJGQUV4RCx3QkFBd0I7a0JBTHBDLFNBQVM7K0JBQ0UsdUJBQXVCLGlCQUVsQixDQUFDLEVBQUUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLFdBQVcsRUFBRSxNQUFNLEVBQUUsQ0FBQzs7MEJBd0JoRSxRQUFROzswQkFBSSxNQUFNOzJCQUFDLGtCQUFrQjs4RUFyQi9CLE1BQU07c0JBQWQsS0FBSztnQkFlRSxVQUFVO3NCQURqQixTQUFTO3VCQUFDLFlBQVkiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBBZnRlclZpZXdJbml0LFxuICBDb21wb25lbnQsXG4gIEluamVjdCxcbiAgSW5wdXQsXG4gIE9uQ2hhbmdlcyxcbiAgT25Jbml0LFxuICBPcHRpb25hbCxcbiAgU2ltcGxlQ2hhbmdlcyxcbiAgVmlld0NoaWxkXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQ29udHJvbENvbnRhaW5lciwgTmdGb3JtIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgQWxlcnRTZXJ2aWNlLCBnZXR0ZXh0IH0gZnJvbSAnQGM4eS9uZ3gtY29tcG9uZW50cyc7XG5pbXBvcnQgeyBJY29uU2VsZWN0b3JTZXJ2aWNlIH0gZnJvbSAnQGM4eS9uZ3gtY29tcG9uZW50cy9pY29uLXNlbGVjdG9yJztcbmltcG9ydCB7XG4gIENsdXN0ZXJNYXBDb25maWcsXG4gIGRlZmF1bHRNYXBDb25maWcsXG4gIE1hcENvbXBvbmVudCxcbiAgTWFwRGVmYXVsdENvbmZpZyxcbiAgTWFwU2VydmljZSxcbiAgTUFQX0RFRkFVTFRfQ09ORklHLFxuICBQb3NpdGlvbk1hbmFnZWRPYmplY3Rcbn0gZnJvbSAnQGM4eS9uZ3gtY29tcG9uZW50cy9tYXAnO1xuaW1wb3J0IHsgVHJhbnNsYXRlU2VydmljZSB9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnO1xuaW1wb3J0IHR5cGUgTCBmcm9tICdsZWFmbGV0JztcbmltcG9ydCB7IE1hcFdpZGdldENvbmZpZywgUmVmcmVzaE9wdGlvbnMgfSBmcm9tICcuL21hcC13aWRnZXQubW9kZWwnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdjOHktbWFwLXdpZGdldC1jb25maWcnLFxuICB0ZW1wbGF0ZVVybDogJy4vbWFwLXdpZGdldC1jb25maWcuY29tcG9uZW50Lmh0bWwnLFxuICB2aWV3UHJvdmlkZXJzOiBbeyBwcm92aWRlOiBDb250cm9sQ29udGFpbmVyLCB1c2VFeGlzdGluZzogTmdGb3JtIH1dXG59KVxuZXhwb3J0IGNsYXNzIE1hcFdpZGdldENvbmZpZ0NvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgQWZ0ZXJWaWV3SW5pdCwgT25DaGFuZ2VzIHtcbiAgQElucHV0KCkgY29uZmlnOiBNYXBXaWRnZXRDb25maWcgPSB7XG4gICAgbWFwQ29uZmlnOiB1bmRlZmluZWRcbiAgfTtcblxuICBmb3JtQ29uZmlnOiBDbHVzdGVyTWFwQ29uZmlnO1xuXG4gIGNhbkF1dG9DZW50ZXIgPSB0cnVlO1xuICBpc1Bvc2l0aW9uZWREZXZpY2UgPSBmYWxzZTtcbiAgYXNzZXRzOiBQb3NpdGlvbk1hbmFnZWRPYmplY3RbXTtcbiAgcmVmcmVzaE9wdGlvbnM6IFJlZnJlc2hPcHRpb25zID0gJ25vbmUnO1xuXG4gIHByaXZhdGUgbGVhZmxldDogdHlwZW9mIEw7XG4gIHByaXZhdGUgY2VudGVySWNvbjogTC5NYXJrZXI7XG5cbiAgQFZpZXdDaGlsZChNYXBDb21wb25lbnQpXG4gIHByaXZhdGUgcHJldmlld01hcDogTWFwQ29tcG9uZW50O1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgbWFwU2VydmljZTogTWFwU2VydmljZSxcbiAgICBwcml2YXRlIGFsZXJ0U2VydmljZTogQWxlcnRTZXJ2aWNlLFxuICAgIHByaXZhdGUgdHJhbnNsYXRlU2VydmljZTogVHJhbnNsYXRlU2VydmljZSxcbiAgICBAT3B0aW9uYWwoKSBASW5qZWN0KE1BUF9ERUZBVUxUX0NPTkZJRykgcHJpdmF0ZSBkZWZhdWx0Q29uZmlnOiBNYXBEZWZhdWx0Q29uZmlnLFxuICAgIHByaXZhdGUgaWNvblNlbGVjdG9yOiBJY29uU2VsZWN0b3JTZXJ2aWNlXG4gICkge1xuICAgIGlmICghdGhpcy5kZWZhdWx0Q29uZmlnKSB7XG4gICAgICB0aGlzLmRlZmF1bHRDb25maWcgPSBkZWZhdWx0TWFwQ29uZmlnO1xuICAgIH1cbiAgICB0aGlzLmZvcm1Db25maWcgPSB7XG4gICAgICB6b29tTGV2ZWw6IHRoaXMuZGVmYXVsdENvbmZpZy56b29tTGV2ZWwsXG4gICAgICBjZW50ZXI6IHRoaXMuZGVmYXVsdENvbmZpZy5jZW50ZXJcbiAgICB9O1xuICB9XG5cbiAgYXN5bmMgbmdPbkluaXQoKSB7XG4gICAgaWYgKCF0aGlzLmNvbmZpZy5tYXBDb25maWcpIHtcbiAgICAgIHRoaXMuY29uZmlnLm1hcENvbmZpZyA9IHRoaXMuZm9ybUNvbmZpZztcbiAgICB9XG4gICAgdGhpcy5mb3JtQ29uZmlnID0ge1xuICAgICAgLi4udGhpcy5mb3JtQ29uZmlnLFxuICAgICAgLi4udGhpcy5jb25maWcubWFwQ29uZmlnLFxuICAgICAgZGlzYWJsZVBhbjogZmFsc2VcbiAgICB9O1xuICAgIGF3YWl0IHRoaXMudXBkYXRlQXNzZXQoKTtcbiAgfVxuXG4gIGFzeW5jIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpIHtcbiAgICBpZiAoXG4gICAgICBjaGFuZ2VzLmNvbmZpZy5jdXJyZW50VmFsdWUgIT09IGNoYW5nZXMuY29uZmlnLnByZXZpb3VzVmFsdWUgJiZcbiAgICAgICFjaGFuZ2VzLmNvbmZpZy5maXJzdENoYW5nZVxuICAgICkge1xuICAgICAgYXdhaXQgdGhpcy51cGRhdGVBc3NldCgpO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIG5nQWZ0ZXJWaWV3SW5pdCgpIHtcbiAgICB0aGlzLmxlYWZsZXQgPSBhd2FpdCB0aGlzLm1hcFNlcnZpY2UuZ2V0TGVhZmxldCgpO1xuICAgIHRoaXMuYWRkQ2VudGVySWNvbih0aGlzLmZvcm1Db25maWcuY2VudGVyWzBdLCB0aGlzLmZvcm1Db25maWcuY2VudGVyWzFdKTtcbiAgfVxuXG4gIG9uQmVmb3JlU2F2ZSgpIHtcbiAgICB0aGlzLmNvbmZpZy5tYXBDb25maWcgPSB0aGlzLmZvcm1Db25maWc7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICB6b29tTGV2ZWxDaGFuZ2VkKCkge1xuICAgIHRoaXMuY29uZmlnLm1hcENvbmZpZyA9IHtcbiAgICAgIC4uLnRoaXMuY29uZmlnLm1hcENvbmZpZyxcbiAgICAgIHpvb21MZXZlbDogdGhpcy5mb3JtQ29uZmlnLnpvb21MZXZlbFxuICAgIH07XG4gIH1cblxuICBjaGFuZ2VDZW50ZXIoKSB7XG4gICAgdGhpcy5jb25maWcubWFwQ29uZmlnID0geyAuLi50aGlzLmZvcm1Db25maWcsIGNlbnRlcjogdGhpcy5mb3JtQ29uZmlnLmNlbnRlciB9O1xuICB9XG5cbiAgb25QcmV2aWV3Wm9vbVN0YXJ0KCkge1xuICAgIHRoaXMuY2VudGVySWNvbi5yZW1vdmUoKTtcbiAgfVxuXG4gIG9uUHJldmlld1pvb21FbmQoZXZlbnQ6IEwuTGVhZmxldEV2ZW50KSB7XG4gICAgdGhpcy5mb3JtQ29uZmlnLnpvb21MZXZlbCA9IE1hdGguZmxvb3IoZXZlbnQudGFyZ2V0LmdldFpvb20oKSk7XG4gIH1cblxuICBvblByZXZpZXdNYXBNb3ZlKGV2ZW50OiBMLkxlYWZsZXRFdmVudCkge1xuICAgIGlmICh0aGlzLmNlbnRlckljb24pIHtcbiAgICAgIHRoaXMuY2VudGVySWNvbi5yZW1vdmUoKTtcbiAgICB9XG4gICAgY29uc3QgeyBsYXQsIGxuZyB9ID0gZXZlbnQudGFyZ2V0LmdldEJvdW5kcygpLmdldENlbnRlcigpO1xuICAgIHRoaXMuYWRkQ2VudGVySWNvbihsYXQsIGxuZyk7XG4gICAgdGhpcy5mb3JtQ29uZmlnLmNlbnRlciA9IFtsYXQsIGxuZ107XG4gIH1cblxuICB1c2VPd25Qb3NpdGlvbigpIHtcbiAgICBuYXZpZ2F0b3IuZ2VvbG9jYXRpb24uZ2V0Q3VycmVudFBvc2l0aW9uKCh7IGNvb3JkcyB9KSA9PiB7XG4gICAgICB0aGlzLmZvcm1Db25maWcuY2VudGVyID0gW2Nvb3Jkcy5sYXRpdHVkZSwgY29vcmRzLmxvbmdpdHVkZV07XG4gICAgICB0aGlzLmNoYW5nZUNlbnRlcigpO1xuICAgIH0pO1xuICB9XG5cbiAgY2VudGVyVG9Bc3NldCgpIHtcbiAgICB0aGlzLmZvcm1Db25maWcuY2VudGVyID0gW1xuICAgICAgdGhpcy5jb25maWcuZGV2aWNlLmM4eV9Qb3NpdGlvbi5sYXQsXG4gICAgICB0aGlzLmNvbmZpZy5kZXZpY2UuYzh5X1Bvc2l0aW9uLmxuZ1xuICAgIF07XG4gICAgdGhpcy5jaGFuZ2VDZW50ZXIoKTtcbiAgfVxuXG4gIHVwZGF0ZVJlZnJlc2hPcHRpb25zKCkge1xuICAgIHRoaXMuZm9ybUNvbmZpZy5yZWFsdGltZSA9IHRoaXMucmVmcmVzaE9wdGlvbnMgPT09ICdyZWFsdGltZSc7XG4gICAgdGhpcy5mb3JtQ29uZmlnLnJlZnJlc2hJbnRlcnZhbCA9IHRoaXMucmVmcmVzaE9wdGlvbnMgPT09ICdpbnRlcnZhbCcgPyA1MDAwIDogbnVsbDtcbiAgICBpZiAoIXRoaXMuZm9ybUNvbmZpZy5yZWFsdGltZSkge1xuICAgICAgdGhpcy5mb3JtQ29uZmlnLmZvbGxvdyA9IGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIG9wZW5JY29uU2VsZWN0b3IoKSB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGljb24gPSBhd2FpdCB0aGlzLmljb25TZWxlY3Rvci5zZWxlY3RJY29uKHtcbiAgICAgICAgY3VycmVudFNlbGVjdGlvbjogdGhpcy5mb3JtQ29uZmlnLmljb25cbiAgICAgIH0pO1xuICAgICAgdGhpcy5mb3JtQ29uZmlnLmljb24gPSBpY29uO1xuICAgICAgdGhpcy5jb25maWcubWFwQ29uZmlnID0geyAuLi50aGlzLmNvbmZpZy5tYXBDb25maWcsIGljb24gfTtcbiAgICB9IGNhdGNoIHtcbiAgICAgIC8vIG5vdGhpbmcgdG8gZG9cbiAgICB9XG4gIH1cblxuICByZW1vdmVJY29uKCkge1xuICAgIHRoaXMuZm9ybUNvbmZpZy5pY29uID0gdW5kZWZpbmVkO1xuICAgIHRoaXMuY29uZmlnLm1hcENvbmZpZy5pY29uID0gdW5kZWZpbmVkO1xuICAgIHRoaXMucHJldmlld01hcC5yZWZyZXNoTWFya2VycygpO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyB1cGRhdGVBc3NldCgpIHtcbiAgICB0aGlzLmNhbkF1dG9DZW50ZXIgPSB0aGlzLm1hcFNlcnZpY2UuaGFzUG9zaXRpb24odGhpcy5jb25maWcuZGV2aWNlKTtcbiAgICB0aGlzLmlzUG9zaXRpb25lZERldmljZSA9IHRoaXMubWFwU2VydmljZS5pc1Bvc2l0aW9uZWREZXZpY2UodGhpcy5jb25maWcuZGV2aWNlKTtcbiAgICB0aGlzLnJlZnJlc2hPcHRpb25zID0gdGhpcy5nZXRSZWZyZXNoT3B0aW9ucygpO1xuICAgIHRoaXMudXBkYXRlUmVmcmVzaE9wdGlvbnMoKTtcblxuICAgIGNvbnN0IHsgZGF0YSwgcGFnaW5nIH0gPSBhd2FpdCB0aGlzLm1hcFNlcnZpY2UuZ2V0QWxsUG9zaXRpb25zTU9zKHRoaXMuY29uZmlnLmRldmljZSk7XG4gICAgdGhpcy5hc3NldHMgPSBkYXRhO1xuICAgIGlmIChwYWdpbmcudG90YWxQYWdlcyA+IDEpIHtcbiAgICAgIHRoaXMuYWxlcnRTZXJ2aWNlLmRhbmdlcihcbiAgICAgICAgZ2V0dGV4dChcbiAgICAgICAgICAnSXQgbWlnaHQgYmUgcG9zc2libGUgdGhhdCBhc3NldHMgYXJlIG5vdCBzaG93biBpbiB0aGUgcHJldmlldywgYXMgdGhlIGN1cnJlbnQgc2VsZWN0aW9uIGhhcyBtb3JlIHRoYW4gNTAwIGFzc2V0cyBhbmQgdGhlIHByZXZpZXcgb25seSBzdXBwb3J0cyBhIG1heGltdW0gb2YgNTAwIGFzc2V0cy4nXG4gICAgICAgIClcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBnZXRSZWZyZXNoT3B0aW9ucygpOiBSZWZyZXNoT3B0aW9ucyB7XG4gICAgbGV0IG9wdGlvbjogUmVmcmVzaE9wdGlvbnMgPSAnbm9uZSc7XG4gICAgaWYgKHRoaXMuZm9ybUNvbmZpZy5yZWFsdGltZSkge1xuICAgICAgb3B0aW9uID0gJ3JlYWx0aW1lJztcbiAgICB9IGVsc2UgaWYgKHRoaXMuZm9ybUNvbmZpZy5yZWZyZXNoSW50ZXJ2YWwpIHtcbiAgICAgIG9wdGlvbiA9ICdpbnRlcnZhbCc7XG4gICAgfVxuICAgIGNvbnN0IGlzTm90QWxsb3dlZE9wdGlvbiA9XG4gICAgICAoIXRoaXMuaXNQb3NpdGlvbmVkRGV2aWNlICYmIG9wdGlvbiA9PT0gJ3JlYWx0aW1lJykgfHxcbiAgICAgICh0aGlzLmlzUG9zaXRpb25lZERldmljZSAmJiBvcHRpb24gPT09ICdpbnRlcnZhbCcpO1xuICAgIG9wdGlvbiA9IGlzTm90QWxsb3dlZE9wdGlvbiA/ICdub25lJyA6IG9wdGlvbjtcbiAgICByZXR1cm4gb3B0aW9uO1xuICB9XG5cbiAgcHJpdmF0ZSBhZGRDZW50ZXJJY29uKGxhdDogbnVtYmVyLCBsbmc6IG51bWJlcikge1xuICAgIGNvbnN0IHRpdGxlVGV4dCA9IHRoaXMudHJhbnNsYXRlU2VydmljZS5pbnN0YW50KGdldHRleHQoJ01hcCBjZW50ZXInKSk7XG4gICAgY29uc3QgaWNvbiA9IHRoaXMubGVhZmxldC5kaXZJY29uKHtcbiAgICAgIGh0bWw6IGA8aSBzdHlsZT1cInBvaW50ZXItZXZlbnRzOiBub25lXCIgY2xhc3M9XCJjOHktbWFwLW1hcmtlci1pY29uIHRleHQtbXV0ZWQgZGx0LWM4eS1pY29uLXRhcmdldCBpY29uLTJ4XCIgdGl0bGU9XCIke3RpdGxlVGV4dH1cIiAvPmBcbiAgICB9KTtcbiAgICB0aGlzLmNlbnRlckljb24gPSB0aGlzLmxlYWZsZXQubWFya2VyKFtsYXQsIGxuZ10sIHtcbiAgICAgIGljb25cbiAgICB9KTtcbiAgICB0aGlzLnByZXZpZXdNYXAuYWRkTWFya2VyVG9NYXAodGhpcy5jZW50ZXJJY29uKTtcbiAgfVxufVxuIiwiPGRpdiBjbGFzcz1cInJvdyBwLXQtMTZcIj5cbiAgPGRpdiBjbGFzcz1cImNvbC14cy0yXCI+XG4gICAgPGM4eS1mb3JtLWdyb3VwIGNsYXNzPVwibS1iLTAgdGV4dC1jZW50ZXIgZm9ybS1ncm91cC1zbVwiPlxuICAgICAgPGxhYmVsIHRyYW5zbGF0ZT5NYXJrZXIgaWNvbjwvbGFiZWw+XG4gICAgICA8ZGl2IGNsYXNzPVwiaWNvbi0zMiB0ZXh0LW11dGVkIHRleHQtY2VudGVyIHAtYi04XCIgKm5nSWY9XCJmb3JtQ29uZmlnLmljb25cIj5cbiAgICAgICAgPGkgW2M4eUljb25dPVwiZm9ybUNvbmZpZy5pY29uXCI+PC9pPlxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzPVwiaWNvbi0zMiB0ZXh0LW11dGVkIHRleHQtY2VudGVyXCIgKm5nSWY9XCIhZm9ybUNvbmZpZy5pY29uXCI+XG4gICAgICAgIDxzcGFuIGNsYXNzPVwiZC1ibG9jayB0ZXh0LTEyIHAtYi0xNiBwLXQtMTZcIj5cbiAgICAgICAgICA8ZW0+e3sgJ0F1dG8nIHwgdHJhbnNsYXRlIH19PC9lbT5cbiAgICAgICAgPC9zcGFuPlxuICAgICAgPC9kaXY+XG4gICAgICA8YnV0dG9uXG4gICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICB0aXRsZT1cInt7ICdTZWxlY3QgaWNvbiB0byBvdmVycmlkZSBkZWZhdWx0IGJlaGF2aW9yJyB8IHRyYW5zbGF0ZSB9fVwiXG4gICAgICAgIGNsYXNzPVwiYnRuIGJ0bi1kZWZhdWx0IGJ0bi14cyBidG4tYmxvY2tcIlxuICAgICAgICAqbmdJZj1cIiFmb3JtQ29uZmlnLmljb25cIlxuICAgICAgICAoY2xpY2spPVwib3Blbkljb25TZWxlY3RvcigpXCJcbiAgICAgID5cbiAgICAgICAge3sgJ1NlbGVjdCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgIDwvYnV0dG9uPlxuICAgICAgPGJ1dHRvblxuICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgdGl0bGU9XCJ7eyAnQ2hhbmdlIGljb24nIHwgdHJhbnNsYXRlIH19XCJcbiAgICAgICAgY2xhc3M9XCJidG4gYnRuLWRlZmF1bHQgYnRuLXhzIGJ0bi1ibG9ja1wiXG4gICAgICAgICpuZ0lmPVwiZm9ybUNvbmZpZy5pY29uXCJcbiAgICAgICAgKGNsaWNrKT1cIm9wZW5JY29uU2VsZWN0b3IoKVwiXG4gICAgICA+XG4gICAgICAgIHt7ICdDaGFuZ2UnIHwgdHJhbnNsYXRlIH19XG4gICAgICA8L2J1dHRvbj5cbiAgICAgIDxidXR0b25cbiAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgIHRpdGxlPVwie3sgJ1JlbW92ZSBpY29uIGFuZCB1c2UgZGVmYXVsdCBiZWhhdmlvcicgfCB0cmFuc2xhdGUgfX1cIlxuICAgICAgICBjbGFzcz1cImJ0biBidG4tZGFuZ2VyIGJ0bi14cyBidG4tYmxvY2tcIlxuICAgICAgICAqbmdJZj1cImZvcm1Db25maWcuaWNvblwiXG4gICAgICAgIChjbGljayk9XCJyZW1vdmVJY29uKClcIlxuICAgICAgPlxuICAgICAgICB7eyAnUmVtb3ZlJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgPC9idXR0b24+XG4gICAgPC9jOHktZm9ybS1ncm91cD5cbiAgPC9kaXY+XG4gIDxkaXYgY2xhc3M9XCJjb2wteHMtMTBcIj5cbiAgICA8ZGl2IGNsYXNzPVwicm93IHRpZ2h0LWdyaWQgc2VwYXJhdG9yLWJvdHRvbVwiPlxuICAgICAgPGRpdiBjbGFzcz1cImNvbC14cy00XCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwIGZvcm0tZ3JvdXAtc21cIj5cbiAgICAgICAgICA8bGFiZWwgdHJhbnNsYXRlPlpvb20gbGV2ZWw8L2xhYmVsPlxuICAgICAgICAgIDxjOHktcmFuZ2VcbiAgICAgICAgICAgICNyYW5nZVxuICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJmb3JtQ29uZmlnLnpvb21MZXZlbFwiXG4gICAgICAgICAgICBuYW1lPVwiem9vbUxldmVsXCJcbiAgICAgICAgICAgIGNsYXNzPVwibGFiZWwtYm90dG9tXCJcbiAgICAgICAgICAgIChjaGFuZ2UpPVwiem9vbUxldmVsQ2hhbmdlZCgpXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8aW5wdXQgdHlwZT1cInJhbmdlXCIgbWluPVwiMlwiIG1heD1cIjE4XCIgc3RlcD1cIjFcIiAvPlxuICAgICAgICAgIDwvYzh5LXJhbmdlPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiBjbGFzcz1cImNvbC14cy04XCI+XG4gICAgICAgIDxjOHktZm9ybS1ncm91cCBjbGFzcz1cImZvcm0tZ3JvdXAtc20gbS1iLThcIj5cbiAgICAgICAgICA8bGFiZWwgdHJhbnNsYXRlPkNlbnRlciBib3VuZDwvbGFiZWw+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0LWdyb3VwIGlucHV0LWdyb3VwLXNtXCI+XG4gICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIlxuICAgICAgICAgICAgICB0eXBlPVwibnVtYmVyXCJcbiAgICAgICAgICAgICAgcmVxdWlyZWRcbiAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJsYXRcIlxuICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cImZvcm1Db25maWcuY2VudGVyWzBdXCJcbiAgICAgICAgICAgICAgKGNoYW5nZSk9XCJjaGFuZ2VDZW50ZXIoKVwiXG4gICAgICAgICAgICAgIG5hbWU9XCJjZW50ZXJMYXRcIlxuICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICBjbGFzcz1cImZvcm0tY29udHJvbFwiXG4gICAgICAgICAgICAgIHR5cGU9XCJudW1iZXJcIlxuICAgICAgICAgICAgICByZXF1aXJlZFxuICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cImxuZ1wiXG4gICAgICAgICAgICAgIFsobmdNb2RlbCldPVwiZm9ybUNvbmZpZy5jZW50ZXJbMV1cIlxuICAgICAgICAgICAgICAoY2hhbmdlKT1cImNoYW5nZUNlbnRlcigpXCJcbiAgICAgICAgICAgICAgbmFtZT1cImNlbnRlckxuZ1wiXG4gICAgICAgICAgICAvPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0LWdyb3VwLWJ0blwiPlxuICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJidG4gYnRuLWRlZmF1bHRcIlxuICAgICAgICAgICAgICAgIChjbGljayk9XCJ1c2VPd25Qb3NpdGlvbigpXCJcbiAgICAgICAgICAgICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cIidVc2UgeW91ciBsb2NhdGlvbicgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgICAgICAgIFt0b29sdGlwXT1cIidVc2UgeW91ciBsb2NhdGlvbicgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgICAgICAgIGNvbnRhaW5lcj1cImJvZHlcIlxuICAgICAgICAgICAgICAgIHBsYWNlbWVudD1cInRvcFwiXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8aSBjOHlJY29uPVwibG9jYXRpb24tYXJyb3dcIiBjbGFzcz1cImljb24tMTRcIj48L2k+XG4gICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtZ3JvdXAtYnRuXCIgKm5nSWY9XCJjYW5BdXRvQ2VudGVyXCI+XG4gICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICBjbGFzcz1cImJ0biBidG4tZGVmYXVsdFwiXG4gICAgICAgICAgICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCInVXNlIHNlbGVjdGVkIGFzc2V0IGxvY2F0aW9uJyB8IHRyYW5zbGF0ZVwiXG4gICAgICAgICAgICAgICAgW3Rvb2x0aXBdPVwiJ1VzZSBzZWxlY3RlZCBhc3NldCBsb2NhdGlvbicgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgICAgICAgIHBsYWNlbWVudD1cInRvcFwiXG4gICAgICAgICAgICAgICAgY29udGFpbmVyPVwiYm9keVwiXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cImNlbnRlclRvQXNzZXQoKVwiXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8aSBjOHlJY29uPVwibG9jYXRpb25cIiBjbGFzcz1cImljb24tMTRcIj48L2k+XG4gICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImhlbHAtYmxvY2tcIj5cbiAgICAgICAgICAgIHt7ICdEcmFnIHRoZSBtYXAgdG8gdGhlIGRlc2lyZWQgcG9zaXRpb24nIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvYzh5LWZvcm0tZ3JvdXA+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cblxuICAgIDxkaXYgY2xhc3M9XCJyb3cgdGlnaHQtZ3JpZCBwLXQtOCBkLWZsZXggYS1pLWNlbnRlclwiPlxuICAgICAgPGRpdiBjbGFzcz1cImNvbC14cy00XCI+XG4gICAgICAgIDxjOHktZm9ybS1ncm91cCBjbGFzcz1cIm0tYi0wIGZvcm0tZ3JvdXAtc21cIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiYzh5LXNlbGVjdC13cmFwcGVyXCI+XG4gICAgICAgICAgICA8c2VsZWN0XG4gICAgICAgICAgICAgIGlkPVwic2VsZWN0RXhhbXBsZVwiXG4gICAgICAgICAgICAgIGNsYXNzPVwiZm9ybS1jb250cm9sXCJcbiAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJyZWZyZXNoT3B0aW9uc1wiXG4gICAgICAgICAgICAgIG5hbWU9XCJyZWZyZXNoU2VsZWN0aW9uXCJcbiAgICAgICAgICAgICAgdGl0bGU9XCJ7eyAnUmVmcmVzaCBvcHRpb25zJyB8IHRyYW5zbGF0ZSB9fVwiXG4gICAgICAgICAgICAgIChjaGFuZ2UpPVwidXBkYXRlUmVmcmVzaE9wdGlvbnMoKVwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCJub25lXCIgW3RpdGxlXT1cIidPbmx5IHJlZnJlc2hpbmcgb24gaW50ZXJhY3Rpb24nIHwgdHJhbnNsYXRlXCIgdHJhbnNsYXRlPlxuICAgICAgICAgICAgICAgIE5vIGF1dG9tYXRpYyByZWZyZXNoXG4gICAgICAgICAgICAgIDwvb3B0aW9uPlxuICAgICAgICAgICAgICA8b3B0aW9uXG4gICAgICAgICAgICAgICAgdmFsdWU9XCJpbnRlcnZhbFwiXG4gICAgICAgICAgICAgICAgKm5nSWY9XCIhaXNQb3NpdGlvbmVkRGV2aWNlXCJcbiAgICAgICAgICAgICAgICBbdGl0bGVdPVwiJ1JlZnJlc2hpbmcgYWZ0ZXIgYSBnaXZlIGludGVydmFsIGFuZCBvbiBpbnRlcmFjdGlvbicgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgICAgICAgIHRyYW5zbGF0ZVxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgVXNlIHJlZnJlc2ggaW50ZXJ2YWxcbiAgICAgICAgICAgICAgPC9vcHRpb24+XG4gICAgICAgICAgICAgIDxvcHRpb25cbiAgICAgICAgICAgICAgICB2YWx1ZT1cInJlYWx0aW1lXCJcbiAgICAgICAgICAgICAgICAqbmdJZj1cImlzUG9zaXRpb25lZERldmljZVwiXG4gICAgICAgICAgICAgICAgW3RpdGxlXT1cIidMaXZlIHVwZGF0aW5nIG9uIGVhY2ggcG9zaXRpb24gY2hhbmdlJyB8IHRyYW5zbGF0ZVwiXG4gICAgICAgICAgICAgICAgdHJhbnNsYXRlXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICBSZWFsdGltZVxuICAgICAgICAgICAgICA8L29wdGlvbj5cbiAgICAgICAgICAgIDwvc2VsZWN0PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2M4eS1mb3JtLWdyb3VwPlxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzPVwiY29sLXhzLThcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZ3JvdXAgZm9ybS1ncm91cC1zbSBtLWItMFwiPlxuICAgICAgICAgIDxjOHktcmFuZ2VcbiAgICAgICAgICAgICNpbnRlcnZhbFJhbmdlXG4gICAgICAgICAgICBbKG5nTW9kZWwpXT1cImZvcm1Db25maWcucmVmcmVzaEludGVydmFsXCJcbiAgICAgICAgICAgIG5hbWU9XCJyZWZyZXNoSW50ZXJ2YWxcIlxuICAgICAgICAgICAgY2xhc3M9XCJsYWJlbC1ib3R0b21cIlxuICAgICAgICAgICAgKm5nSWY9XCJyZWZyZXNoT3B0aW9ucyA9PT0gJ2ludGVydmFsJ1wiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNjOHlSYW5nZVZhbHVlPlxuICAgICAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAgICAgICB0cmFuc2xhdGVcbiAgICAgICAgICAgICAgICAgIFt0cmFuc2xhdGVQYXJhbXNdPVwieyBpbnRlcnZhbDogaW50ZXJ2YWxSYW5nZS52YWx1ZSAqIDAuMDAxIH1cIlxuICAgICAgICAgICAgICAgICAgbmdOb25CaW5kYWJsZVxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgIHt7IGludGVydmFsIH19c1xuICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJyYW5nZVwiIG1pbj1cIjUwMDBcIiBtYXg9XCIxMDAwMDBcIiBzdGVwPVwiMTAwMFwiIC8+XG4gICAgICAgICAgPC9jOHktcmFuZ2U+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8bGFiZWwgY2xhc3M9XCJjOHktc3dpdGNoIGM4eS1zd2l0Y2gtLWlubGluZVwiICpuZ0lmPVwicmVmcmVzaE9wdGlvbnMgPT09ICdyZWFsdGltZSdcIj5cbiAgICAgICAgICA8aW5wdXQgdHlwZT1cImNoZWNrYm94XCIgWyhuZ01vZGVsKV09XCJmb3JtQ29uZmlnLmZvbGxvd1wiIG5hbWU9XCJmb2xsb3dcIiAvPlxuICAgICAgICAgIDxzcGFuPjwvc3Bhbj5cbiAgICAgICAgICA8c3BhbiBjbGFzcz1cInRleHQtMTJcIiB0cmFuc2xhdGU+Rm9sbG93IHNlbGVjdGVkPC9zcGFuPlxuICAgICAgICA8L2xhYmVsPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuPC9kaXY+XG5cbjxkaXYgY2xhc3M9XCJwLXQtMTYgcC1iLTE2XCIgc3R5bGU9XCJ3aWR0aDogMTAwJTsgaGVpZ2h0OiAyNDBweFwiPlxuICA8Yzh5LW1hcFxuICAgIFthc3NldHNdPVwiYXNzZXRzXCJcbiAgICAob25Nb3ZlKT1cIm9uUHJldmlld01hcE1vdmUoJGV2ZW50KVwiXG4gICAgKG9uWm9vbVN0YXJ0KT1cIm9uUHJldmlld1pvb21TdGFydCgpXCJcbiAgICAob25ab29tRW5kKT1cIm9uUHJldmlld1pvb21FbmQoJGV2ZW50KVwiXG4gICAgW2NvbmZpZ109XCJjb25maWcubWFwQ29uZmlnXCJcbiAgPjwvYzh5LW1hcD5cbjwvZGl2PlxuIl19
@@ -1697,10 +1697,10 @@ class ExternalTokenConfigComponent {
1697
1697
  }
1698
1698
  }
1699
1699
  ExternalTokenConfigComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.0.6", ngImport: i0, type: ExternalTokenConfigComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
1700
- ExternalTokenConfigComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.0.6", type: ExternalTokenConfigComponent, selector: "c8y-external-token-config", inputs: { templateModel: "templateModel" }, ngImport: i0, template: "<div class=\"col-md-12 p-16\">\n <div class=\"row m-l-8 m-r-8\">\n <div class=\"col-xs-12 col-sm-3 col-md-2\">\n <div class=\"h4 text-normal text-right text-left-xs\" translate>\n External token configuration\n </div>\n </div>\n\n <div class=\"col-xs-12 col-sm-9 col-md-10 col-lg-9 p-0\" *ngIf=\"templateModel\">\n <div class=\"row p-l-4\">\n <div class=\"col-md-8\">\n <label\n for=\"enabled\"\n title=\"{{\n 'Allow authentication with access token from external IAM system' | translate\n }}\"\n class=\"c8y-switch\"\n >\n <input\n id=\"enabled\"\n name=\"enabled\"\n type=\"checkbox\"\n [(ngModel)]=\"externalTokenConfig.enabled\"\n />\n <span></span>\n <span class=\"control-label\">\n {{ 'Allow authentication with access token from external IAM system' | translate }}\n </span>\n </label>\n </div>\n </div>\n <ng-container *ngIf=\"externalTokenConfig.enabled\">\n <c8y-user-id-configuration\n [userIdConfig]=\"externalTokenConfig.userOrAppIdConfig\"\n [withHeader]=\"false\"\n ></c8y-user-id-configuration>\n <div class=\"row p-l-4\">\n <div class=\"col-sm-6\">\n <label\n for=\"validationRequired\"\n title=\"{{ 'Validate access token' | translate }}\"\n class=\"c8y-switch\"\n >\n <input\n id=\"validationRequired\"\n name=\"validationRequired\"\n type=\"checkbox\"\n [(ngModel)]=\"externalTokenConfig.validationRequired\"\n />\n <span></span>\n <span class=\"control-label\">{{ 'Validate access token' | translate }}</span>\n </label>\n </div>\n </div>\n <ng-container *ngIf=\"externalTokenConfig.validationRequired\">\n <div class=\"row\">\n <div class=\"col-sm-6 m-t-16 m-l-8\">\n <label for=\"validationMethod\" class=\"control-label\" translate>\n Validation method\n </label>\n <div class=\"c8y-select-wrapper\">\n <select\n class=\"form-control\"\n id=\"validationMethod\"\n name=\"validationMethod\"\n [ngModel]=\"externalTokenConfig.validationMethod\"\n (ngModelChange)=\"onValidationMethodChange($event)\"\n >\n <option\n *ngFor=\"let validationMethod of validationMethods | keyvalue\"\n [ngValue]=\"validationMethod.key\"\n >\n {{ validationMethod.value.label | translate }}\n </option>\n </select>\n <span></span>\n </div>\n </div>\n </div>\n <div class=\"row\">\n <c8y-request-configuration\n [templateModel]=\"externalTokenConfig\"\n [requestName]=\"'Token validation request' | translate\"\n [requestType]=\"'tokenValidationRequest'\"\n ></c8y-request-configuration>\n </div>\n <div class=\"row\">\n <div class=\"col-sm-6 m-l-8\">\n <c8y-form-group>\n <label\n for=\"accessTokenValidityCheckIntervalInMinutes\"\n class=\"control-label\"\n translate\n >\n Access token validation frequency\n </label>\n <div class=\"input-group\">\n <input\n type=\"number\"\n class=\"form-control\"\n id=\"accessTokenValidityCheckIntervalInMinutes\"\n name=\"accessTokenValidityCheckIntervalInMinutes\"\n [(ngModel)]=\"externalTokenConfig.accessTokenValidityCheckIntervalInMinutes\"\n [placeholder]=\"'e.g. {{ example }}' | translate: { example: '1' }\"\n step=\"1\"\n required\n [min]=\"1\"\n />\n <span class=\"input-group-addon\" translate>minutes</span>\n </div>\n </c8y-form-group>\n </div>\n </div>\n </ng-container>\n </ng-container>\n </div>\n </div>\n</div>\n", dependencies: [{ kind: "directive", type: i1.C8yTranslateDirective, selector: "[translate],[ngx-translate]" }, { kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.MinValidationDirective, selector: "[min]", inputs: ["min"] }, { kind: "directive", type: i3.NgSelectOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i3.ɵNgSelectMultipleOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i3.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i3.NumberValueAccessor, selector: "input[type=number][formControlName],input[type=number][formControl],input[type=number][ngModel]" }, { kind: "directive", type: i3.CheckboxControlValueAccessor, selector: "input[type=checkbox][formControlName],input[type=checkbox][formControl],input[type=checkbox][ngModel]" }, { kind: "directive", type: i3.SelectControlValueAccessor, selector: "select:not([multiple])[formControlName],select:not([multiple])[formControl],select:not([multiple])[ngModel]", inputs: ["compareWith"] }, { kind: "directive", type: i3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i3.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i3.MinValidator, selector: "input[type=number][min][formControlName],input[type=number][min][formControl],input[type=number][min][ngModel]", inputs: ["min"] }, { kind: "directive", type: i3.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i1.FormGroupComponent, selector: "c8y-form-group", inputs: ["hasError", "hasWarning", "hasSuccess", "novalidation", "status"] }, { kind: "directive", type: i1.RequiredInputPlaceholderDirective, selector: "input[required], input[formControlName]" }, { kind: "component", type: RequestConfigurationComponent, selector: "c8y-request-configuration", inputs: ["templateModel", "requestName", "requestType"] }, { kind: "component", type: UserIdConfigurationComponent, selector: "c8y-user-id-configuration", inputs: ["userIdConfig", "withHeader"] }, { kind: "pipe", type: i1.C8yTranslatePipe, name: "translate" }, { kind: "pipe", type: i2.KeyValuePipe, name: "keyvalue" }], viewProviders: [{ provide: ControlContainer, useExisting: NgForm }] });
1700
+ ExternalTokenConfigComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.0.6", type: ExternalTokenConfigComponent, selector: "c8y-external-token-config", inputs: { templateModel: "templateModel" }, ngImport: i0, template: "<div class=\"col-md-12 p-16\">\n <div class=\"row m-l-8 m-r-8\">\n <div class=\"col-xs-12 col-sm-3 col-md-2\">\n <div class=\"h4 text-normal text-right text-left-xs\" translate>\n External token configuration\n </div>\n </div>\n\n <div class=\"col-xs-12 col-sm-9 col-md-10 col-lg-9 p-0\" *ngIf=\"templateModel\">\n <div class=\"row p-l-4\">\n <div class=\"col-md-8\">\n <label\n for=\"enabled\"\n title=\"{{\n 'Allow authentication with access token from external AIM system' | translate\n }}\"\n class=\"c8y-switch\"\n >\n <input\n id=\"enabled\"\n name=\"enabled\"\n type=\"checkbox\"\n [(ngModel)]=\"externalTokenConfig.enabled\"\n />\n <span></span>\n <span class=\"control-label\">\n {{ 'Allow authentication with access token from external AIM system' | translate }}\n </span>\n </label>\n </div>\n </div>\n <ng-container *ngIf=\"externalTokenConfig.enabled\">\n <c8y-user-id-configuration\n [userIdConfig]=\"externalTokenConfig.userOrAppIdConfig\"\n [withHeader]=\"false\"\n ></c8y-user-id-configuration>\n <div class=\"row p-l-4\">\n <div class=\"col-sm-6\">\n <label\n for=\"validationRequired\"\n title=\"{{ 'Validate access token' | translate }}\"\n class=\"c8y-switch\"\n >\n <input\n id=\"validationRequired\"\n name=\"validationRequired\"\n type=\"checkbox\"\n [(ngModel)]=\"externalTokenConfig.validationRequired\"\n />\n <span></span>\n <span class=\"control-label\">{{ 'Validate access token' | translate }}</span>\n </label>\n </div>\n </div>\n <ng-container *ngIf=\"externalTokenConfig.validationRequired\">\n <div class=\"row\">\n <div class=\"col-sm-6 m-t-16 m-l-8\">\n <label for=\"validationMethod\" class=\"control-label\" translate>\n Validation method\n </label>\n <div class=\"c8y-select-wrapper\">\n <select\n class=\"form-control\"\n id=\"validationMethod\"\n name=\"validationMethod\"\n [ngModel]=\"externalTokenConfig.validationMethod\"\n (ngModelChange)=\"onValidationMethodChange($event)\"\n >\n <option\n *ngFor=\"let validationMethod of validationMethods | keyvalue\"\n [ngValue]=\"validationMethod.key\"\n >\n {{ validationMethod.value.label | translate }}\n </option>\n </select>\n <span></span>\n </div>\n </div>\n </div>\n <div class=\"row\">\n <c8y-request-configuration\n [templateModel]=\"externalTokenConfig\"\n [requestName]=\"'Token validation request' | translate\"\n [requestType]=\"'tokenValidationRequest'\"\n ></c8y-request-configuration>\n </div>\n <div class=\"row\">\n <div class=\"col-sm-6 m-l-8\">\n <c8y-form-group>\n <label\n for=\"accessTokenValidityCheckIntervalInMinutes\"\n class=\"control-label\"\n translate\n >\n Access token validation frequency\n </label>\n <div class=\"input-group\">\n <input\n type=\"number\"\n class=\"form-control\"\n id=\"accessTokenValidityCheckIntervalInMinutes\"\n name=\"accessTokenValidityCheckIntervalInMinutes\"\n [(ngModel)]=\"externalTokenConfig.accessTokenValidityCheckIntervalInMinutes\"\n [placeholder]=\"'e.g. {{ example }}' | translate: { example: '1' }\"\n step=\"1\"\n required\n [min]=\"1\"\n />\n <span class=\"input-group-addon\" translate>minutes</span>\n </div>\n </c8y-form-group>\n </div>\n </div>\n </ng-container>\n </ng-container>\n </div>\n </div>\n</div>\n", dependencies: [{ kind: "directive", type: i1.C8yTranslateDirective, selector: "[translate],[ngx-translate]" }, { kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.MinValidationDirective, selector: "[min]", inputs: ["min"] }, { kind: "directive", type: i3.NgSelectOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i3.ɵNgSelectMultipleOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i3.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i3.NumberValueAccessor, selector: "input[type=number][formControlName],input[type=number][formControl],input[type=number][ngModel]" }, { kind: "directive", type: i3.CheckboxControlValueAccessor, selector: "input[type=checkbox][formControlName],input[type=checkbox][formControl],input[type=checkbox][ngModel]" }, { kind: "directive", type: i3.SelectControlValueAccessor, selector: "select:not([multiple])[formControlName],select:not([multiple])[formControl],select:not([multiple])[ngModel]", inputs: ["compareWith"] }, { kind: "directive", type: i3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i3.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i3.MinValidator, selector: "input[type=number][min][formControlName],input[type=number][min][formControl],input[type=number][min][ngModel]", inputs: ["min"] }, { kind: "directive", type: i3.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i1.FormGroupComponent, selector: "c8y-form-group", inputs: ["hasError", "hasWarning", "hasSuccess", "novalidation", "status"] }, { kind: "directive", type: i1.RequiredInputPlaceholderDirective, selector: "input[required], input[formControlName]" }, { kind: "component", type: RequestConfigurationComponent, selector: "c8y-request-configuration", inputs: ["templateModel", "requestName", "requestType"] }, { kind: "component", type: UserIdConfigurationComponent, selector: "c8y-user-id-configuration", inputs: ["userIdConfig", "withHeader"] }, { kind: "pipe", type: i1.C8yTranslatePipe, name: "translate" }, { kind: "pipe", type: i2.KeyValuePipe, name: "keyvalue" }], viewProviders: [{ provide: ControlContainer, useExisting: NgForm }] });
1701
1701
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.6", ngImport: i0, type: ExternalTokenConfigComponent, decorators: [{
1702
1702
  type: Component,
1703
- args: [{ selector: 'c8y-external-token-config', viewProviders: [{ provide: ControlContainer, useExisting: NgForm }], template: "<div class=\"col-md-12 p-16\">\n <div class=\"row m-l-8 m-r-8\">\n <div class=\"col-xs-12 col-sm-3 col-md-2\">\n <div class=\"h4 text-normal text-right text-left-xs\" translate>\n External token configuration\n </div>\n </div>\n\n <div class=\"col-xs-12 col-sm-9 col-md-10 col-lg-9 p-0\" *ngIf=\"templateModel\">\n <div class=\"row p-l-4\">\n <div class=\"col-md-8\">\n <label\n for=\"enabled\"\n title=\"{{\n 'Allow authentication with access token from external IAM system' | translate\n }}\"\n class=\"c8y-switch\"\n >\n <input\n id=\"enabled\"\n name=\"enabled\"\n type=\"checkbox\"\n [(ngModel)]=\"externalTokenConfig.enabled\"\n />\n <span></span>\n <span class=\"control-label\">\n {{ 'Allow authentication with access token from external IAM system' | translate }}\n </span>\n </label>\n </div>\n </div>\n <ng-container *ngIf=\"externalTokenConfig.enabled\">\n <c8y-user-id-configuration\n [userIdConfig]=\"externalTokenConfig.userOrAppIdConfig\"\n [withHeader]=\"false\"\n ></c8y-user-id-configuration>\n <div class=\"row p-l-4\">\n <div class=\"col-sm-6\">\n <label\n for=\"validationRequired\"\n title=\"{{ 'Validate access token' | translate }}\"\n class=\"c8y-switch\"\n >\n <input\n id=\"validationRequired\"\n name=\"validationRequired\"\n type=\"checkbox\"\n [(ngModel)]=\"externalTokenConfig.validationRequired\"\n />\n <span></span>\n <span class=\"control-label\">{{ 'Validate access token' | translate }}</span>\n </label>\n </div>\n </div>\n <ng-container *ngIf=\"externalTokenConfig.validationRequired\">\n <div class=\"row\">\n <div class=\"col-sm-6 m-t-16 m-l-8\">\n <label for=\"validationMethod\" class=\"control-label\" translate>\n Validation method\n </label>\n <div class=\"c8y-select-wrapper\">\n <select\n class=\"form-control\"\n id=\"validationMethod\"\n name=\"validationMethod\"\n [ngModel]=\"externalTokenConfig.validationMethod\"\n (ngModelChange)=\"onValidationMethodChange($event)\"\n >\n <option\n *ngFor=\"let validationMethod of validationMethods | keyvalue\"\n [ngValue]=\"validationMethod.key\"\n >\n {{ validationMethod.value.label | translate }}\n </option>\n </select>\n <span></span>\n </div>\n </div>\n </div>\n <div class=\"row\">\n <c8y-request-configuration\n [templateModel]=\"externalTokenConfig\"\n [requestName]=\"'Token validation request' | translate\"\n [requestType]=\"'tokenValidationRequest'\"\n ></c8y-request-configuration>\n </div>\n <div class=\"row\">\n <div class=\"col-sm-6 m-l-8\">\n <c8y-form-group>\n <label\n for=\"accessTokenValidityCheckIntervalInMinutes\"\n class=\"control-label\"\n translate\n >\n Access token validation frequency\n </label>\n <div class=\"input-group\">\n <input\n type=\"number\"\n class=\"form-control\"\n id=\"accessTokenValidityCheckIntervalInMinutes\"\n name=\"accessTokenValidityCheckIntervalInMinutes\"\n [(ngModel)]=\"externalTokenConfig.accessTokenValidityCheckIntervalInMinutes\"\n [placeholder]=\"'e.g. {{ example }}' | translate: { example: '1' }\"\n step=\"1\"\n required\n [min]=\"1\"\n />\n <span class=\"input-group-addon\" translate>minutes</span>\n </div>\n </c8y-form-group>\n </div>\n </div>\n </ng-container>\n </ng-container>\n </div>\n </div>\n</div>\n" }]
1703
+ args: [{ selector: 'c8y-external-token-config', viewProviders: [{ provide: ControlContainer, useExisting: NgForm }], template: "<div class=\"col-md-12 p-16\">\n <div class=\"row m-l-8 m-r-8\">\n <div class=\"col-xs-12 col-sm-3 col-md-2\">\n <div class=\"h4 text-normal text-right text-left-xs\" translate>\n External token configuration\n </div>\n </div>\n\n <div class=\"col-xs-12 col-sm-9 col-md-10 col-lg-9 p-0\" *ngIf=\"templateModel\">\n <div class=\"row p-l-4\">\n <div class=\"col-md-8\">\n <label\n for=\"enabled\"\n title=\"{{\n 'Allow authentication with access token from external AIM system' | translate\n }}\"\n class=\"c8y-switch\"\n >\n <input\n id=\"enabled\"\n name=\"enabled\"\n type=\"checkbox\"\n [(ngModel)]=\"externalTokenConfig.enabled\"\n />\n <span></span>\n <span class=\"control-label\">\n {{ 'Allow authentication with access token from external AIM system' | translate }}\n </span>\n </label>\n </div>\n </div>\n <ng-container *ngIf=\"externalTokenConfig.enabled\">\n <c8y-user-id-configuration\n [userIdConfig]=\"externalTokenConfig.userOrAppIdConfig\"\n [withHeader]=\"false\"\n ></c8y-user-id-configuration>\n <div class=\"row p-l-4\">\n <div class=\"col-sm-6\">\n <label\n for=\"validationRequired\"\n title=\"{{ 'Validate access token' | translate }}\"\n class=\"c8y-switch\"\n >\n <input\n id=\"validationRequired\"\n name=\"validationRequired\"\n type=\"checkbox\"\n [(ngModel)]=\"externalTokenConfig.validationRequired\"\n />\n <span></span>\n <span class=\"control-label\">{{ 'Validate access token' | translate }}</span>\n </label>\n </div>\n </div>\n <ng-container *ngIf=\"externalTokenConfig.validationRequired\">\n <div class=\"row\">\n <div class=\"col-sm-6 m-t-16 m-l-8\">\n <label for=\"validationMethod\" class=\"control-label\" translate>\n Validation method\n </label>\n <div class=\"c8y-select-wrapper\">\n <select\n class=\"form-control\"\n id=\"validationMethod\"\n name=\"validationMethod\"\n [ngModel]=\"externalTokenConfig.validationMethod\"\n (ngModelChange)=\"onValidationMethodChange($event)\"\n >\n <option\n *ngFor=\"let validationMethod of validationMethods | keyvalue\"\n [ngValue]=\"validationMethod.key\"\n >\n {{ validationMethod.value.label | translate }}\n </option>\n </select>\n <span></span>\n </div>\n </div>\n </div>\n <div class=\"row\">\n <c8y-request-configuration\n [templateModel]=\"externalTokenConfig\"\n [requestName]=\"'Token validation request' | translate\"\n [requestType]=\"'tokenValidationRequest'\"\n ></c8y-request-configuration>\n </div>\n <div class=\"row\">\n <div class=\"col-sm-6 m-l-8\">\n <c8y-form-group>\n <label\n for=\"accessTokenValidityCheckIntervalInMinutes\"\n class=\"control-label\"\n translate\n >\n Access token validation frequency\n </label>\n <div class=\"input-group\">\n <input\n type=\"number\"\n class=\"form-control\"\n id=\"accessTokenValidityCheckIntervalInMinutes\"\n name=\"accessTokenValidityCheckIntervalInMinutes\"\n [(ngModel)]=\"externalTokenConfig.accessTokenValidityCheckIntervalInMinutes\"\n [placeholder]=\"'e.g. {{ example }}' | translate: { example: '1' }\"\n step=\"1\"\n required\n [min]=\"1\"\n />\n <span class=\"input-group-addon\" translate>minutes</span>\n </div>\n </c8y-form-group>\n </div>\n </div>\n </ng-container>\n </ng-container>\n </div>\n </div>\n</div>\n" }]
1704
1704
  }], propDecorators: { templateModel: [{
1705
1705
  type: Input
1706
1706
  }] } });