@c8y/ngx-components 1021.21.0 → 1021.22.26

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 (185) hide show
  1. package/alarms/alarm-details.component.d.ts +1 -3
  2. package/alarms/alarm-details.component.d.ts.map +1 -1
  3. package/alarms/alarm-info.component.d.ts +9 -14
  4. package/alarms/alarm-info.component.d.ts.map +1 -1
  5. package/alarms/alarms-date-filter.component.d.ts +23 -10
  6. package/alarms/alarms-date-filter.component.d.ts.map +1 -1
  7. package/alarms/alarms-type-filter.component.d.ts +21 -14
  8. package/alarms/alarms-type-filter.component.d.ts.map +1 -1
  9. package/alarms/alarms-view.service.d.ts +7 -0
  10. package/alarms/alarms-view.service.d.ts.map +1 -1
  11. package/alarms/alarms.component.d.ts.map +1 -1
  12. package/alarms/alarms.helper.d.ts +5 -0
  13. package/alarms/alarms.helper.d.ts.map +1 -0
  14. package/alarms/alarms.model.d.ts +1 -6
  15. package/alarms/alarms.model.d.ts.map +1 -1
  16. package/alarms/alarms.module.d.ts +1 -1
  17. package/alarms/alarms.module.d.ts.map +1 -1
  18. package/alarms/cockpit/index.d.ts.map +1 -1
  19. package/alarms/devicemanagement/index.d.ts.map +1 -1
  20. package/alarms/index.d.ts +6 -4
  21. package/alarms/index.d.ts.map +1 -1
  22. package/branding/shared/data/branding-tracking.service.d.ts +20 -0
  23. package/branding/shared/data/branding-tracking.service.d.ts.map +1 -0
  24. package/branding/shared/data/branding-version.service.d.ts.map +1 -1
  25. package/branding/shared/data/index.d.ts +1 -0
  26. package/branding/shared/data/index.d.ts.map +1 -1
  27. package/branding/shared/data/store-branding.service.d.ts +8 -1
  28. package/branding/shared/data/store-branding.service.d.ts.map +1 -1
  29. package/branding/shared/lazy/branding/branding.component.d.ts +3 -2
  30. package/branding/shared/lazy/branding/branding.component.d.ts.map +1 -1
  31. package/branding/shared/lazy/branding-theme-form/branding-theme-form.component.d.ts.map +1 -1
  32. package/branding/shared/lazy/edit-branding-router-outlet/edit-branding-router-outlet.component.d.ts.map +1 -1
  33. package/cockpit-config/cockpit-config.module.d.ts +1 -1
  34. package/cockpit-config/cockpit-config.module.d.ts.map +1 -1
  35. package/context-dashboard/context-dashboard.service.d.ts +1 -1
  36. package/context-dashboard/context-dashboard.service.d.ts.map +1 -1
  37. package/core/bootstrap/bootstrap.component.d.ts.map +1 -1
  38. package/core/common/service-registry.model.d.ts +2 -1
  39. package/core/common/service-registry.model.d.ts.map +1 -1
  40. package/core/common/ui-state.service.d.ts +0 -1
  41. package/core/common/ui-state.service.d.ts.map +1 -1
  42. package/core/i18n/missing-translation-custom.handler.d.ts +1 -0
  43. package/core/i18n/missing-translation-custom.handler.d.ts.map +1 -1
  44. package/core/plugins/index.d.ts +1 -0
  45. package/core/plugins/index.d.ts.map +1 -1
  46. package/core/plugins/plugin-loaded.pipe.d.ts +12 -0
  47. package/core/plugins/plugin-loaded.pipe.d.ts.map +1 -0
  48. package/core/plugins/plugins-resolve.service.d.ts +4 -2
  49. package/core/plugins/plugins-resolve.service.d.ts.map +1 -1
  50. package/core/plugins/plugins.model.d.ts +3 -1
  51. package/core/plugins/plugins.model.d.ts.map +1 -1
  52. package/core/plugins/plugins.service.d.ts +3 -0
  53. package/core/plugins/plugins.service.d.ts.map +1 -1
  54. package/core/router/context-route.component.d.ts +8 -3
  55. package/core/router/context-route.component.d.ts.map +1 -1
  56. package/core/router/context-route.service.d.ts +29 -3
  57. package/core/router/context-route.service.d.ts.map +1 -1
  58. package/core/router/router-tabs.resolver.d.ts +6 -3
  59. package/core/router/router-tabs.resolver.d.ts.map +1 -1
  60. package/core/router/router.model.d.ts +40 -3
  61. package/core/router/router.model.d.ts.map +1 -1
  62. package/core/router/router.module.d.ts +2 -1
  63. package/core/router/router.module.d.ts.map +1 -1
  64. package/core/router/router.service.d.ts +5 -4
  65. package/core/router/router.service.d.ts.map +1 -1
  66. package/core/router/scoped-context-route.service.d.ts +57 -0
  67. package/core/router/scoped-context-route.service.d.ts.map +1 -0
  68. package/core/router/view-context.service.d.ts +8 -18
  69. package/core/router/view-context.service.d.ts.map +1 -1
  70. package/ecosystem/application-plugins/application-plugins.component.d.ts.map +1 -1
  71. package/ecosystem/application-plugins/application-plugins.guard.d.ts.map +1 -1
  72. package/ecosystem/application-plugins/orphaned-status-cell-renderer.component.d.ts.map +1 -1
  73. package/esm2022/alarms/alarm-details.component.mjs +7 -9
  74. package/esm2022/alarms/alarm-info.component.mjs +23 -33
  75. package/esm2022/alarms/alarm-severity-to-label.pipe.mjs +2 -2
  76. package/esm2022/alarms/alarms-date-filter.component.mjs +94 -42
  77. package/esm2022/alarms/alarms-type-filter.component.mjs +102 -72
  78. package/esm2022/alarms/alarms-view.service.mjs +17 -3
  79. package/esm2022/alarms/alarms.component.mjs +12 -5
  80. package/esm2022/alarms/alarms.helper.mjs +32 -0
  81. package/esm2022/alarms/alarms.model.mjs +1 -1
  82. package/esm2022/alarms/alarms.module.mjs +7 -7
  83. package/esm2022/alarms/cockpit/index.mjs +13 -17
  84. package/esm2022/alarms/devicemanagement/index.mjs +15 -18
  85. package/esm2022/alarms/index.mjs +7 -5
  86. package/esm2022/branding/shared/data/branding-tracking.service.mjs +58 -0
  87. package/esm2022/branding/shared/data/branding-version.service.mjs +9 -5
  88. package/esm2022/branding/shared/data/index.mjs +2 -1
  89. package/esm2022/branding/shared/data/store-branding.service.mjs +15 -4
  90. package/esm2022/branding/shared/lazy/branding/branding.component.mjs +16 -12
  91. package/esm2022/branding/shared/lazy/branding-theme-form/branding-theme-form.component.mjs +5 -2
  92. package/esm2022/branding/shared/lazy/edit-branding-router-outlet/edit-branding-router-outlet.component.mjs +2 -2
  93. package/esm2022/cockpit-config/cockpit-config.module.mjs +6 -3
  94. package/esm2022/cockpit-config/feature-config.component.mjs +5 -4
  95. package/esm2022/context-dashboard/context-dashboard.service.mjs +47 -13
  96. package/esm2022/core/bootstrap/bootstrap.component.mjs +4 -3
  97. package/esm2022/core/common/service-registry.model.mjs +1 -1
  98. package/esm2022/core/common/ui-state.service.mjs +1 -19
  99. package/esm2022/core/i18n/missing-translation-custom.handler.mjs +5 -1
  100. package/esm2022/core/i18n/translation-loader.service.mjs +2 -2
  101. package/esm2022/core/plugins/index.mjs +2 -1
  102. package/esm2022/core/plugins/plugin-loaded.pipe.mjs +26 -0
  103. package/esm2022/core/plugins/plugins-resolve.service.mjs +5 -1
  104. package/esm2022/core/plugins/plugins.model.mjs +2 -1
  105. package/esm2022/core/plugins/plugins.service.mjs +13 -5
  106. package/esm2022/core/router/context-route.component.mjs +23 -13
  107. package/esm2022/core/router/context-route.service.mjs +37 -5
  108. package/esm2022/core/router/router-tabs.resolver.mjs +66 -21
  109. package/esm2022/core/router/router.model.mjs +6 -1
  110. package/esm2022/core/router/router.module.mjs +20 -13
  111. package/esm2022/core/router/router.service.mjs +24 -10
  112. package/esm2022/core/router/scoped-context-route.service.mjs +157 -0
  113. package/esm2022/core/router/view-context.service.mjs +59 -16
  114. package/esm2022/core/tabs/tabs-outlet.component.mjs +3 -3
  115. package/esm2022/core/version/websdk-plugin-version.factory.mjs +2 -2
  116. package/esm2022/datapoint-selector/datapoint-selection-list/datapoint-selection-list.component.mjs +3 -3
  117. package/esm2022/ecosystem/activity-log/activity-log.component.mjs +3 -3
  118. package/esm2022/ecosystem/application-plugins/application-plugins.component.mjs +67 -23
  119. package/esm2022/ecosystem/application-plugins/application-plugins.guard.mjs +8 -2
  120. package/esm2022/ecosystem/application-plugins/orphaned-status-cell-renderer.component.mjs +7 -1
  121. package/esm2022/interval-picker/interval-picker.component.mjs +1 -1
  122. package/esm2022/interval-picker/interval-picker.model.mjs +1 -1
  123. package/esm2022/protocol-lwm2m/ng1/plugin-checker.service.mjs +5 -1
  124. package/esm2022/widgets/definitions/alarms/alarm-list/index.mjs +2 -1
  125. package/esm2022/widgets/implementations/alarms/alarm-list-widget-config/alarm-list-widget-config.component.mjs +73 -4
  126. package/esm2022/widgets/implementations/alarms/alarm-list-widget-view/alarm-list-widget.component.mjs +29 -5
  127. package/esm2022/widgets/implementations/alarms/alarm-list-widget.model.mjs +7 -1
  128. package/esm2022/widgets/implementations/alarms/alarm-widget.service.mjs +12 -2
  129. package/fesm2022/c8y-ngx-components-alarms-cockpit.mjs +12 -16
  130. package/fesm2022/c8y-ngx-components-alarms-cockpit.mjs.map +1 -1
  131. package/fesm2022/c8y-ngx-components-alarms-devicemanagement.mjs +14 -17
  132. package/fesm2022/c8y-ngx-components-alarms-devicemanagement.mjs.map +1 -1
  133. package/fesm2022/c8y-ngx-components-alarms.mjs +389 -268
  134. package/fesm2022/c8y-ngx-components-alarms.mjs.map +1 -1
  135. package/fesm2022/c8y-ngx-components-branding-shared-data.mjs +76 -9
  136. package/fesm2022/c8y-ngx-components-branding-shared-data.mjs.map +1 -1
  137. package/fesm2022/c8y-ngx-components-branding-shared-lazy.mjs +19 -12
  138. package/fesm2022/c8y-ngx-components-branding-shared-lazy.mjs.map +1 -1
  139. package/fesm2022/c8y-ngx-components-cockpit-config.mjs +7 -5
  140. package/fesm2022/c8y-ngx-components-cockpit-config.mjs.map +1 -1
  141. package/fesm2022/c8y-ngx-components-context-dashboard.mjs +46 -12
  142. package/fesm2022/c8y-ngx-components-context-dashboard.mjs.map +1 -1
  143. package/fesm2022/c8y-ngx-components-datapoint-selector.mjs +2 -2
  144. package/fesm2022/c8y-ngx-components-datapoint-selector.mjs.map +1 -1
  145. package/fesm2022/c8y-ngx-components-ecosystem-application-plugins.mjs +79 -23
  146. package/fesm2022/c8y-ngx-components-ecosystem-application-plugins.mjs.map +1 -1
  147. package/fesm2022/c8y-ngx-components-ecosystem.mjs +81 -25
  148. package/fesm2022/c8y-ngx-components-ecosystem.mjs.map +1 -1
  149. package/fesm2022/c8y-ngx-components-interval-picker.mjs.map +1 -1
  150. package/fesm2022/c8y-ngx-components-protocol-lwm2m.mjs +4 -0
  151. package/fesm2022/c8y-ngx-components-protocol-lwm2m.mjs.map +1 -1
  152. package/fesm2022/c8y-ngx-components-widgets-definitions-alarms-alarm-list.mjs +1 -0
  153. package/fesm2022/c8y-ngx-components-widgets-definitions-alarms-alarm-list.mjs.map +1 -1
  154. package/fesm2022/c8y-ngx-components-widgets-implementations-alarms.mjs +124 -15
  155. package/fesm2022/c8y-ngx-components-widgets-implementations-alarms.mjs.map +1 -1
  156. package/fesm2022/c8y-ngx-components.mjs +489 -176
  157. package/fesm2022/c8y-ngx-components.mjs.map +1 -1
  158. package/interval-picker/interval-picker.component.d.ts +2 -2
  159. package/interval-picker/interval-picker.component.d.ts.map +1 -1
  160. package/interval-picker/interval-picker.model.d.ts +5 -0
  161. package/interval-picker/interval-picker.model.d.ts.map +1 -1
  162. package/locales/de.po +431 -538
  163. package/locales/en.po +2 -889
  164. package/locales/en_US.po +2 -880
  165. package/locales/es.po +462 -540
  166. package/locales/fr.po +470 -549
  167. package/locales/ja_JP.po +405 -598
  168. package/locales/ko.po +649 -502
  169. package/locales/locales.pot +27 -12
  170. package/locales/nl.po +463 -541
  171. package/locales/pl.po +504 -554
  172. package/locales/pt_BR.po +466 -543
  173. package/locales/zh_CN.po +650 -498
  174. package/locales/zh_TW.po +650 -498
  175. package/package.json +1 -1
  176. package/protocol-lwm2m/ng1/plugin-checker.service.d.ts +4 -0
  177. package/protocol-lwm2m/ng1/plugin-checker.service.d.ts.map +1 -1
  178. package/widgets/definitions/alarms/alarm-list/index.d.ts.map +1 -1
  179. package/widgets/implementations/alarms/alarm-list-widget-config/alarm-list-widget-config.component.d.ts +12 -1
  180. package/widgets/implementations/alarms/alarm-list-widget-config/alarm-list-widget-config.component.d.ts.map +1 -1
  181. package/widgets/implementations/alarms/alarm-list-widget-view/alarm-list-widget.component.d.ts +12 -1
  182. package/widgets/implementations/alarms/alarm-list-widget-view/alarm-list-widget.component.d.ts.map +1 -1
  183. package/widgets/implementations/alarms/alarm-list-widget.model.d.ts +11 -1
  184. package/widgets/implementations/alarms/alarm-list-widget.model.d.ts.map +1 -1
  185. package/widgets/implementations/alarms/alarm-widget.service.d.ts.map +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"orphaned-status-cell-renderer.component.d.ts","sourceRoot":"","sources":["../../../ecosystem/application-plugins/orphaned-status-cell-renderer.component.ts"],"names":[],"mappings":"AACA,OAAO,EAA2B,mBAAmB,EAAW,MAAM,qBAAqB,CAAC;;AAE5F,qBAIa,mCAAmC;IAE3B,OAAO,EAAE,mBAAmB;IAD/C,KAAK,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,CAAC;gBAC1C,OAAO,EAAE,mBAAmB;IAI/C,OAAO,CAAC,QAAQ;yCANL,mCAAmC;2CAAnC,mCAAmC;CAwC/C"}
1
+ {"version":3,"file":"orphaned-status-cell-renderer.component.d.ts","sourceRoot":"","sources":["../../../ecosystem/application-plugins/orphaned-status-cell-renderer.component.ts"],"names":[],"mappings":"AACA,OAAO,EAA2B,mBAAmB,EAAW,MAAM,qBAAqB,CAAC;;AAE5F,qBAIa,mCAAmC;IAE3B,OAAO,EAAE,mBAAmB;IAD/C,KAAK,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,CAAC;gBAC1C,OAAO,EAAE,mBAAmB;IAI/C,OAAO,CAAC,QAAQ;yCANL,mCAAmC;2CAAnC,mCAAmC;CA8C/C"}
@@ -58,10 +58,12 @@ export class AlarmDetailsComponent {
58
58
  this.customFragments = null;
59
59
  }
60
60
  async ngOnInit() {
61
+ const isSmartRulesServiceSubscribed = !!(await this.alarmDetailsService.getApplication(this.alarmDetailsService.SMART_RULES_APPLICATION_KEY));
62
+ const hasAnyRoleAllowingToCreateSmartRule = this.alarmDetailsService.checkIfHasAnyRoleAllowingToCreateSmartRule();
61
63
  this.isCreateSmartRulesButtonAvailable =
62
64
  !!this.ng1SmartRulesUpgradeService &&
63
- this.isSmartRulesServiceSubscribed &&
64
- this.hasAnyRoleAllowingToCreateSmartRule;
65
+ isSmartRulesServiceSubscribed &&
66
+ hasAnyRoleAllowingToCreateSmartRule;
65
67
  this.userDeviceManagementApp = await this.alarmDetailsService.getApplication(this.alarmDetailsService.DEVICE_MANAGEMENT_APPLICATION_KEY);
66
68
  this.showSourceNavigationLink =
67
69
  !!this.userDeviceManagementApp && !this.isDeviceManagementView();
@@ -336,18 +338,14 @@ export class AlarmDetailsComponent {
336
338
  return customProperties;
337
339
  }
338
340
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: AlarmDetailsComponent, deps: [{ token: i1.AlarmDetailsService }, { token: i2.AlarmService }, { token: i3.AlertService }, { token: i3.AppStateService }, { token: i2.AuditService }, { token: i3.RelativeTimePipe }, { token: i4.Ng1SmartRulesUpgradeService, optional: true }, { token: i5.TranslateService }, { token: i2.InventoryService }, { token: i6.AlarmsViewService }, { token: i3.ColorService }], target: i0.ɵɵFactoryTarget.Component }); }
339
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.9", type: AlarmDetailsComponent, selector: "c8y-alarm-details", inputs: { selectedAlarm: "selectedAlarm", hasAnyRoleAllowingToCreateSmartRule: "hasAnyRoleAllowingToCreateSmartRule", isSmartRulesServiceSubscribed: "isSmartRulesServiceSubscribed" }, usesOnChanges: true, ngImport: i0, template: "<div class=\"d-flex row tight-grid flex-wrap a-i-stretch\">\n <div class=\"col-xs-12 col-md-6 d-flex p-b-8\">\n <div class=\"border-all fit-w d-flex\">\n <div class=\"p-8\">\n <i\n class=\"icon-24 text-gray-dark m-t-4 c8y-icon\"\n [c8yIcon]=\"selectedAlarm.status | AlarmStatusToIcon\"\n ></i>\n </div>\n <div class=\"p-t-8 p-b-8 p-r-8\">\n <p class=\"text-label-small m-b-0 m-r-8\">{{ 'Status' | translate }}</p>\n <p class=\"small\">{{ statusMessage }}</p>\n </div>\n </div>\n </div>\n <div class=\"col-xs-12 col-md-6 d-flex p-b-8\">\n <div class=\"border-all fit-w d-flex\">\n <div class=\"p-8\">\n <i\n class=\"icon-24 text-gray-dark m-t-4 stroked-icon status\"\n [c8yIcon]=\"selectedAlarm.severity | AlarmSeverityToIcon\"\n [ngClass]=\"selectedAlarm.severity?.toString() | lowercase\"\n ></i>\n </div>\n <div class=\"p-t-8 p-b-8 p-r-8\">\n <p class=\"text-label-small m-b-0 m-r-8\">{{ 'Severity' | translate }}</p>\n <p class=\"small\">{{ SEVERITY_LABELS[selectedAlarm.severity] | translate }}</p>\n </div>\n </div>\n </div>\n <div class=\"col-xs-12 col-md-6 d-flex p-b-8\">\n <div class=\"border-all fit-w d-flex\">\n <div class=\"p-8\">\n <i\n class=\"icon-24 text-gray-dark m-t-4 stroked-icon status\"\n c8yIcon=\"contactless-payment\"\n ></i>\n </div>\n <div class=\"p-t-8 p-b-8 p-r-8\">\n <p class=\"text-label-small m-b-0 m-r-8\">{{ 'Source' | translate }}</p>\n <p class=\"small\">\n <button\n class=\"btn-link text-muted p-0 m-r-8\"\n title=\"{{ selectedAlarm.source.name }}\"\n type=\"button\"\n routerLink=\"{{ selectedAlarmMO | assetLink }}\"\n >\n <small class=\"icon-flex\">\n <i c8yIcon=\"exchange\"></i>\n {{ selectedAlarm.source.name || selectedAlarm.source.id }}\n </small>\n </button>\n <ng-container *ngIf=\"showSourceNavigationLink\">\n <button\n class=\"btn-link p-0\"\n title=\"{{\n linkTitle\n | translate: { appName: userDeviceManagementApp | humanizeAppName | async }\n }}\"\n type=\"button\"\n (click)=\"goToAlarmSource(selectedAlarm.id)\"\n data-cy=\"alarm-details-device-management-link\"\n >\n {{ userDeviceManagementApp | humanizeAppName | async }}\n <i c8yIcon=\"external-link\"></i>\n </button>\n </ng-container>\n </p>\n </div>\n </div>\n </div>\n <div class=\"col-xs-12 col-md-6 d-flex p-b-8\">\n <div class=\"border-all fit-w d-flex\">\n <div class=\"p-8\">\n <span\n class=\"circle-icon-wrapper\"\n [ngStyle]=\"{ 'background-color': typeColor }\"\n >\n <i\n class=\"stroked-icon\"\n c8yIcon=\"bell\"\n ></i>\n </span>\n </div>\n <div class=\"p-t-8 p-b-8 p-r-8 min-width-0\">\n <p class=\"text-label-small m-b-0 m-r-8\">{{ 'Type' | translate }}</p>\n <p\n class=\"small text-truncate\"\n title=\"{{ selectedAlarm.type }}\"\n >\n <code>{{ selectedAlarm.type }}</code>\n </p>\n </div>\n </div>\n </div>\n\n <div class=\"col-xs-12 col-md-12 p-b-16\">\n <div class=\"border-all fit-w d-flex\">\n <div class=\"p-8\">\n <i\n class=\"icon-24 text-gray-dark m-t-4\"\n c8yIcon=\"calendar\"\n ></i>\n </div>\n <div class=\"p-t-8 p-b-0 p-r-8 flex-grow\">\n <div class=\"content-flex-50\">\n <div class=\"col-4 p-b-8\">\n <p class=\"text-label-small m-b-0 m-r-8\">{{ 'Last updated' | translate }}</p>\n <p class=\"small\">\n {{ lastUpdated | c8yDate: 'medium' }}\n </p>\n </div>\n <div\n class=\"col-4 p-b-8\"\n *ngIf=\"selectedAlarm.count > 1\"\n >\n <p class=\"text-label-small m-b-0 m-r-8\">{{ 'Number of occurrences' | translate }}</p>\n <p>\n <span class=\"badge badge-info\">{{ selectedAlarm.count }}</span>\n </p>\n </div>\n <div\n class=\"col-4 p-b-8\"\n *ngIf=\"selectedAlarm.count > 1\"\n >\n <p class=\"text-label-small m-b-0 m-r-8\">{{ 'First occurrence' | translate }}</p>\n <p class=\"small\">\n {{ selectedAlarm.creationTime | c8yDate: 'medium' }}\n </p>\n </div>\n </div>\n </div>\n </div>\n </div>\n\n <div\n class=\"col-xs-12 col-md-12 p-b-16\"\n *ngIf=\"customFragments\"\n >\n <div class=\"border-all fit-w d-flex\">\n <div class=\"p-8\">\n <i\n class=\"icon-24 text-gray-dark m-t-4\"\n c8yIcon=\"outgoing-data\"\n ></i>\n </div>\n <div\n class=\"p-t-8 p-b-0 p-r-8 flex-grow\"\n data-cy=\"alarm-details-custom-data\"\n >\n <p class=\"text-label-small m-b-4 m-r-8\">{{ 'Custom data' | translate }}</p>\n <pre><code>{{ customFragments | json }}</code></pre>\n </div>\n </div>\n </div>\n</div>\n\n<div class=\"d-flex flex-wrap gap-8\">\n <button\n class=\"btn btn-default btn-sm\"\n [title]=\"'Reload audit logs' | translate\"\n type=\"submit\"\n (click)=\"reloadAuditLog(true, true)\"\n >\n <i\n c8yIcon=\"refresh\"\n [ngClass]=\"{ 'icon-spin': isLoading }\"\n ></i>\n {{ 'Reload audit logs' | translate }}\n </button>\n\n <button\n class=\"btn btn-default btn-sm\"\n [title]=\"\n selectedAlarm.status !== ACKNOWLEDGED_STATUS_VALUE\n ? (ACKNOWLEDGE_LABEL | translate)\n : (REACTIVATE_LABEL | translate)\n \"\n type=\"submit\"\n (click)=\"\n onUpdateDetails(\n selectedAlarm.status !== ACKNOWLEDGED_STATUS_VALUE\n ? ACKNOWLEDGED_STATUS_VALUE\n : ACTIVE_STATUS_VALUE\n )\n \"\n [disabled]=\"selectedAlarm.status === CLEARED_STATUS_VALUE || isAlarmStatusChanging\"\n >\n <i\n [c8yIcon]=\"selectedAlarm.status !== ACKNOWLEDGED_STATUS_VALUE ? BELL_SLASH_ICON : BELL_ICON\"\n ></i>\n {{\n selectedAlarm.status !== ACKNOWLEDGED_STATUS_VALUE\n ? (ACKNOWLEDGE_LABEL | translate)\n : (REACTIVATE_LABEL | translate)\n }}\n </button>\n\n <button\n class=\"btn btn-default btn-sm\"\n [title]=\"'Create smart rule' | translate\"\n type=\"submit\"\n *ngIf=\"isCreateSmartRulesButtonAvailable\"\n (click)=\"createSmartRule()\"\n >\n <i c8yIcon=\"c8y-icon c8y-icon-smart-rules\"></i>\n {{ 'Create smart rule' | translate }}\n </button>\n <button\n class=\"btn btn-default btn-sm\"\n [title]=\"'Clear`alarm`' | translate\"\n type=\"submit\"\n (click)=\"onUpdateDetails(CLEARED_STATUS_VALUE)\"\n [disabled]=\"selectedAlarm.status === CLEARED_STATUS_VALUE\"\n >\n <i c8yIcon=\"c8y-alert-idle\"></i>\n {{ 'Clear`alarm`' | translate }}\n </button>\n\n <button\n *ngFor=\"let button of selectedAlarm | alarmDetailsButton: selectedAlarmMO | async\"\n class=\"btn btn-default btn-sm\"\n [ngClass]=\"button.additionalButtonClasses\"\n [title]=\"button.title | translate\"\n type=\"button\"\n (click)=\"detailsButtonAction(button, selectedAlarm)\"\n [disabled]=\"button.disabled\"\n >\n <i [ngClass]=\"button.additionalIconClasses\" [c8yIcon]=\"button.icon\"></i>\n <span *ngIf=\"button.label\">{{ button.label | translate }}</span>\n </button>\n</div>\n\n<ng-template #noAuditLogAvailable>\n <div class=\"p-16\">\n <c8y-ui-empty-state\n [icon]=\"'archive'\"\n [title]=\"'No audit logs found.' | translate\"\n [horizontal]=\"true\"\n ></c8y-ui-empty-state>\n </div>\n</ng-template>\n\n<div class=\"legend form-block\">{{ 'Audit logs' | translate }}</div>\n\n<ng-container *ngIf=\"isLoading || auditLog?.data.length; else noAuditLogAvailable\">\n <c8y-loading *ngIf=\"isLoading\"></c8y-loading>\n\n <c8y-list-group\n data-cy=\"c8y-alarms-details--audit-logs\"\n *ngIf=\"!isLoading\"\n >\n <c8y-li-timeline *c8yFor=\"let log of auditLog; loadMore: 'hidden'\">\n {{ log.creationTime | date: 'mediumDate' }}\n {{ log.creationTime | date: 'mediumTime' }}\n <c8y-li>\n <c8y-li-body>\n <p class=\"text-truncate-wrap separator-bottom p-b-4\">\n {{ log | auditChangesMessage }}\n </p>\n <div class=\"c8y-list__item__footer\">\n <span\n class=\"m-r-16 small\"\n *ngIf=\"log.user\"\n >\n <span class=\"text-label-small\">\n {{ 'by`user`' | translate }}\n </span>\n {{ log.user }}\n </span>\n <span class=\"small\">\n <span class=\"text-label-small\">\n {{ 'device time' | translate }}\n </span>\n {{ log.time | c8yDate: 'medium' }}\n </span>\n </div>\n </c8y-li-body>\n </c8y-li>\n </c8y-li-timeline>\n </c8y-list-group>\n</ng-container>\n", dependencies: [{ kind: "component", type: i3.EmptyStateComponent, selector: "c8y-ui-empty-state", inputs: ["icon", "title", "subtitle", "horizontal"] }, { kind: "directive", type: i3.IconDirective, selector: "[c8yIcon]", inputs: ["c8yIcon"] }, { kind: "directive", type: i7.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i7.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i7.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i7.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "directive", type: i3.ForOfDirective, selector: "[c8yFor]", inputs: ["c8yForOf", "c8yForLoadMore", "c8yForPipe", "c8yForNotFound", "c8yForMaxIterations", "c8yForLoadingTemplate", "c8yForLoadNextLabel", "c8yForLoadingLabel", "c8yForRealtime", "c8yForRealtimeOptions", "c8yForComparator", "c8yForEnableVirtualScroll", "c8yForVirtualScrollElementSize", "c8yForVirtualScrollStrategy", "c8yForVirtualScrollContainerHeight"], outputs: ["c8yForCount", "c8yForChange", "c8yForLoadMoreComponent"] }, { kind: "component", type: i3.LoadingComponent, selector: "c8y-loading", inputs: ["layout", "progress", "message"] }, { kind: "component", type: i3.ListGroupComponent, selector: "c8y-list-group" }, { kind: "component", type: i3.ListItemComponent, selector: "c8y-list-item, c8y-li", inputs: ["active", "highlighted", "emptyActions", "dense", "collapsed", "selectable"], outputs: ["collapsedChange"] }, { kind: "component", type: i3.ListItemBodyComponent, selector: "c8y-list-item-body, c8y-li-body", inputs: ["body"] }, { kind: "component", type: i3.ListItemTimelineComponent, selector: "c8y-list-item-timeline, c8y-li-timeline" }, { kind: "directive", type: i8.RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "pipe", type: i7.AsyncPipe, name: "async" }, { kind: "pipe", type: i7.LowerCasePipe, name: "lowercase" }, { kind: "pipe", type: i7.JsonPipe, name: "json" }, { kind: "pipe", type: i7.DatePipe, name: "date" }, { kind: "pipe", type: i3.HumanizeAppNamePipe, name: "humanizeAppName" }, { kind: "pipe", type: i3.DatePipe, name: "c8yDate" }, { kind: "pipe", type: i3.AssetLinkPipe, name: "assetLink" }, { kind: "pipe", type: i5.TranslatePipe, name: "translate" }, { kind: "pipe", type: i9.AlarmDetailsButtonPipe, name: "alarmDetailsButton" }, { kind: "pipe", type: i10.AlarmSeverityToIconPipe, name: "AlarmSeverityToIcon" }, { kind: "pipe", type: i11.AlarmStatusToIconPipe, name: "AlarmStatusToIcon" }, { kind: "pipe", type: i12.AuditChangesMessagePipe, name: "auditChangesMessage" }] }); }
341
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.9", type: AlarmDetailsComponent, selector: "c8y-alarm-details", inputs: { selectedAlarm: "selectedAlarm" }, usesOnChanges: true, ngImport: i0, template: "<div class=\"d-flex row tight-grid flex-wrap a-i-stretch\">\n <div class=\"col-xs-12 col-md-6 d-flex p-b-8\">\n <div class=\"border-all fit-w d-flex\">\n <div class=\"p-8\">\n <i\n class=\"icon-24 text-gray-dark m-t-4 c8y-icon\"\n [c8yIcon]=\"selectedAlarm.status | AlarmStatusToIcon\"\n ></i>\n </div>\n <div class=\"p-t-8 p-b-8 p-r-8\">\n <p class=\"text-label-small m-b-0 m-r-8\">{{ 'Status' | translate }}</p>\n <p class=\"small\">{{ statusMessage }}</p>\n </div>\n </div>\n </div>\n <div class=\"col-xs-12 col-md-6 d-flex p-b-8\">\n <div class=\"border-all fit-w d-flex\">\n <div class=\"p-8\">\n <i\n class=\"icon-24 text-gray-dark m-t-4 stroked-icon status\"\n [c8yIcon]=\"selectedAlarm.severity | AlarmSeverityToIcon\"\n [ngClass]=\"selectedAlarm.severity?.toString() | lowercase\"\n ></i>\n </div>\n <div class=\"p-t-8 p-b-8 p-r-8\">\n <p class=\"text-label-small m-b-0 m-r-8\">{{ 'Severity' | translate }}</p>\n <p class=\"small\">{{ SEVERITY_LABELS[selectedAlarm.severity] | translate }}</p>\n </div>\n </div>\n </div>\n <div class=\"col-xs-12 col-md-6 d-flex p-b-8\">\n <div class=\"border-all fit-w d-flex\">\n <div class=\"p-8\">\n <i\n class=\"icon-24 text-gray-dark m-t-4 stroked-icon status\"\n c8yIcon=\"contactless-payment\"\n ></i>\n </div>\n <div class=\"p-t-8 p-b-8 p-r-8\">\n <p class=\"text-label-small m-b-0 m-r-8\">{{ 'Source' | translate }}</p>\n <p class=\"small\">\n <button\n class=\"btn-link text-muted p-0 m-r-8 text-left\"\n title=\"{{ selectedAlarm.source.name }}\"\n type=\"button\"\n routerLink=\"{{ selectedAlarmMO | assetLink }}\"\n >\n <small class=\"icon-flex\">\n <i c8yIcon=\"exchange\"></i>\n {{ selectedAlarm.source.name || selectedAlarm.source.id }}\n </small>\n </button>\n <ng-container *ngIf=\"showSourceNavigationLink\">\n <button\n class=\"btn-link p-0 text-left\"\n title=\"{{\n linkTitle\n | translate: { appName: userDeviceManagementApp | humanizeAppName | async }\n }}\"\n type=\"button\"\n (click)=\"goToAlarmSource(selectedAlarm.id)\"\n data-cy=\"alarm-details-device-management-link\"\n >\n {{ userDeviceManagementApp | humanizeAppName | async }}\n <i c8yIcon=\"external-link\"></i>\n </button>\n </ng-container>\n </p>\n </div>\n </div>\n </div>\n <div class=\"col-xs-12 col-md-6 d-flex p-b-8\">\n <div class=\"border-all fit-w d-flex\">\n <div class=\"p-8\">\n <span\n class=\"circle-icon-wrapper\"\n [ngStyle]=\"{ 'background-color': typeColor }\"\n >\n <i\n class=\"stroked-icon\"\n c8yIcon=\"bell\"\n ></i>\n </span>\n </div>\n <div class=\"p-t-8 p-b-8 p-r-8 min-width-0\">\n <p class=\"text-label-small m-b-0 m-r-8\">{{ 'Type' | translate }}</p>\n <p\n class=\"small text-truncate\"\n title=\"{{ selectedAlarm.type }}\"\n >\n <code>{{ selectedAlarm.type }}</code>\n </p>\n </div>\n </div>\n </div>\n\n <div class=\"col-xs-12 col-md-12 p-b-16\">\n <div class=\"border-all fit-w d-flex\">\n <div class=\"p-8\">\n <i\n class=\"icon-24 text-gray-dark m-t-4\"\n c8yIcon=\"calendar\"\n ></i>\n </div>\n <div class=\"p-t-8 p-b-0 p-r-8 flex-grow\">\n <div class=\"content-flex-50\">\n <div class=\"col-4 p-b-8\">\n <p class=\"text-label-small m-b-0 m-r-8\">{{ 'Last updated' | translate }}</p>\n <p class=\"small\">\n {{ lastUpdated | c8yDate: 'medium' }}\n </p>\n </div>\n <div\n class=\"col-4 p-b-8\"\n *ngIf=\"selectedAlarm.count > 1\"\n >\n <p class=\"text-label-small m-b-0 m-r-8\">{{ 'Number of occurrences' | translate }}</p>\n <p>\n <span class=\"badge badge-info\">{{ selectedAlarm.count }}</span>\n </p>\n </div>\n <div\n class=\"col-4 p-b-8\"\n *ngIf=\"selectedAlarm.count > 1\"\n >\n <p class=\"text-label-small m-b-0 m-r-8\">{{ 'First occurrence' | translate }}</p>\n <p class=\"small\">\n {{ selectedAlarm.creationTime | c8yDate: 'medium' }}\n </p>\n </div>\n </div>\n </div>\n </div>\n </div>\n\n <div\n class=\"col-xs-12 col-md-12 p-b-16\"\n *ngIf=\"customFragments\"\n >\n <div class=\"border-all fit-w d-flex\">\n <div class=\"p-8\">\n <i\n class=\"icon-24 text-gray-dark m-t-4\"\n c8yIcon=\"outgoing-data\"\n ></i>\n </div>\n <div\n class=\"p-t-8 p-b-0 p-r-8 flex-grow\"\n data-cy=\"alarm-details-custom-data\"\n >\n <p class=\"text-label-small m-b-4 m-r-8\">{{ 'Custom data' | translate }}</p>\n <pre><code>{{ customFragments | json }}</code></pre>\n </div>\n </div>\n </div>\n</div>\n\n<div class=\"d-flex flex-wrap gap-8\">\n <button\n class=\"btn btn-default btn-sm\"\n [title]=\"'Reload audit logs' | translate\"\n type=\"submit\"\n (click)=\"reloadAuditLog(true, true)\"\n >\n <i\n c8yIcon=\"refresh\"\n [ngClass]=\"{ 'icon-spin': isLoading }\"\n ></i>\n {{ 'Reload audit logs' | translate }}\n </button>\n\n <button\n class=\"btn btn-default btn-sm\"\n [title]=\"\n selectedAlarm.status !== ACKNOWLEDGED_STATUS_VALUE\n ? (ACKNOWLEDGE_LABEL | translate)\n : (REACTIVATE_LABEL | translate)\n \"\n type=\"submit\"\n (click)=\"\n onUpdateDetails(\n selectedAlarm.status !== ACKNOWLEDGED_STATUS_VALUE\n ? ACKNOWLEDGED_STATUS_VALUE\n : ACTIVE_STATUS_VALUE\n )\n \"\n [disabled]=\"selectedAlarm.status === CLEARED_STATUS_VALUE || isAlarmStatusChanging\"\n >\n <i\n [c8yIcon]=\"selectedAlarm.status !== ACKNOWLEDGED_STATUS_VALUE ? BELL_SLASH_ICON : BELL_ICON\"\n ></i>\n {{\n selectedAlarm.status !== ACKNOWLEDGED_STATUS_VALUE\n ? (ACKNOWLEDGE_LABEL | translate)\n : (REACTIVATE_LABEL | translate)\n }}\n </button>\n\n <button\n class=\"btn btn-default btn-sm\"\n [title]=\"'Create smart rule' | translate\"\n type=\"submit\"\n *ngIf=\"isCreateSmartRulesButtonAvailable\"\n (click)=\"createSmartRule()\"\n >\n <i c8yIcon=\"c8y-icon c8y-icon-smart-rules\"></i>\n {{ 'Create smart rule' | translate }}\n </button>\n <button\n class=\"btn btn-default btn-sm\"\n [title]=\"'Clear`alarm`' | translate\"\n type=\"submit\"\n (click)=\"onUpdateDetails(CLEARED_STATUS_VALUE)\"\n [disabled]=\"selectedAlarm.status === CLEARED_STATUS_VALUE\"\n >\n <i c8yIcon=\"c8y-alert-idle\"></i>\n {{ 'Clear`alarm`' | translate }}\n </button>\n\n <button\n *ngFor=\"let button of selectedAlarm | alarmDetailsButton: selectedAlarmMO | async\"\n class=\"btn btn-default btn-sm\"\n [ngClass]=\"button.additionalButtonClasses\"\n [title]=\"button.title | translate\"\n type=\"button\"\n (click)=\"detailsButtonAction(button, selectedAlarm)\"\n [disabled]=\"button.disabled\"\n >\n <i [ngClass]=\"button.additionalIconClasses\" [c8yIcon]=\"button.icon\"></i>\n <span *ngIf=\"button.label\">{{ button.label | translate }}</span>\n </button>\n</div>\n\n<ng-template #noAuditLogAvailable>\n <div class=\"p-16\">\n <c8y-ui-empty-state\n [icon]=\"'archive'\"\n [title]=\"'No audit logs found.' | translate\"\n [horizontal]=\"true\"\n ></c8y-ui-empty-state>\n </div>\n</ng-template>\n\n<div class=\"legend form-block\">{{ 'Audit logs' | translate }}</div>\n\n<ng-container *ngIf=\"isLoading || auditLog?.data.length; else noAuditLogAvailable\">\n <c8y-loading *ngIf=\"isLoading\"></c8y-loading>\n\n <c8y-list-group\n data-cy=\"c8y-alarms-details--audit-logs\"\n *ngIf=\"!isLoading\"\n >\n <c8y-li-timeline *c8yFor=\"let log of auditLog; loadMore: 'hidden'\">\n {{ log.creationTime | date: 'mediumDate' }}\n {{ log.creationTime | date: 'mediumTime' }}\n <c8y-li>\n <c8y-li-body>\n <p class=\"text-truncate-wrap separator-bottom p-b-4\">\n {{ log | auditChangesMessage }}\n </p>\n <div class=\"c8y-list__item__footer\">\n <span\n class=\"m-r-16 small\"\n *ngIf=\"log.user\"\n >\n <span class=\"text-label-small\">\n {{ 'by`user`' | translate }}\n </span>\n {{ log.user }}\n </span>\n <span class=\"small\">\n <span class=\"text-label-small\">\n {{ 'device time' | translate }}\n </span>\n {{ log.time | c8yDate: 'medium' }}\n </span>\n </div>\n </c8y-li-body>\n </c8y-li>\n </c8y-li-timeline>\n </c8y-list-group>\n</ng-container>\n", dependencies: [{ kind: "component", type: i3.EmptyStateComponent, selector: "c8y-ui-empty-state", inputs: ["icon", "title", "subtitle", "horizontal"] }, { kind: "directive", type: i3.IconDirective, selector: "[c8yIcon]", inputs: ["c8yIcon"] }, { kind: "directive", type: i7.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i7.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i7.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i7.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "directive", type: i3.ForOfDirective, selector: "[c8yFor]", inputs: ["c8yForOf", "c8yForLoadMore", "c8yForPipe", "c8yForNotFound", "c8yForMaxIterations", "c8yForLoadingTemplate", "c8yForLoadNextLabel", "c8yForLoadingLabel", "c8yForRealtime", "c8yForRealtimeOptions", "c8yForComparator", "c8yForEnableVirtualScroll", "c8yForVirtualScrollElementSize", "c8yForVirtualScrollStrategy", "c8yForVirtualScrollContainerHeight"], outputs: ["c8yForCount", "c8yForChange", "c8yForLoadMoreComponent"] }, { kind: "component", type: i3.LoadingComponent, selector: "c8y-loading", inputs: ["layout", "progress", "message"] }, { kind: "component", type: i3.ListGroupComponent, selector: "c8y-list-group" }, { kind: "component", type: i3.ListItemComponent, selector: "c8y-list-item, c8y-li", inputs: ["active", "highlighted", "emptyActions", "dense", "collapsed", "selectable"], outputs: ["collapsedChange"] }, { kind: "component", type: i3.ListItemBodyComponent, selector: "c8y-list-item-body, c8y-li-body", inputs: ["body"] }, { kind: "component", type: i3.ListItemTimelineComponent, selector: "c8y-list-item-timeline, c8y-li-timeline" }, { kind: "directive", type: i8.RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "pipe", type: i7.AsyncPipe, name: "async" }, { kind: "pipe", type: i7.LowerCasePipe, name: "lowercase" }, { kind: "pipe", type: i7.JsonPipe, name: "json" }, { kind: "pipe", type: i7.DatePipe, name: "date" }, { kind: "pipe", type: i3.HumanizeAppNamePipe, name: "humanizeAppName" }, { kind: "pipe", type: i3.DatePipe, name: "c8yDate" }, { kind: "pipe", type: i3.AssetLinkPipe, name: "assetLink" }, { kind: "pipe", type: i5.TranslatePipe, name: "translate" }, { kind: "pipe", type: i9.AlarmDetailsButtonPipe, name: "alarmDetailsButton" }, { kind: "pipe", type: i10.AlarmSeverityToIconPipe, name: "AlarmSeverityToIcon" }, { kind: "pipe", type: i11.AlarmStatusToIconPipe, name: "AlarmStatusToIcon" }, { kind: "pipe", type: i12.AuditChangesMessagePipe, name: "auditChangesMessage" }] }); }
340
342
  }
341
343
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: AlarmDetailsComponent, decorators: [{
342
344
  type: Component,
343
- args: [{ selector: 'c8y-alarm-details', template: "<div class=\"d-flex row tight-grid flex-wrap a-i-stretch\">\n <div class=\"col-xs-12 col-md-6 d-flex p-b-8\">\n <div class=\"border-all fit-w d-flex\">\n <div class=\"p-8\">\n <i\n class=\"icon-24 text-gray-dark m-t-4 c8y-icon\"\n [c8yIcon]=\"selectedAlarm.status | AlarmStatusToIcon\"\n ></i>\n </div>\n <div class=\"p-t-8 p-b-8 p-r-8\">\n <p class=\"text-label-small m-b-0 m-r-8\">{{ 'Status' | translate }}</p>\n <p class=\"small\">{{ statusMessage }}</p>\n </div>\n </div>\n </div>\n <div class=\"col-xs-12 col-md-6 d-flex p-b-8\">\n <div class=\"border-all fit-w d-flex\">\n <div class=\"p-8\">\n <i\n class=\"icon-24 text-gray-dark m-t-4 stroked-icon status\"\n [c8yIcon]=\"selectedAlarm.severity | AlarmSeverityToIcon\"\n [ngClass]=\"selectedAlarm.severity?.toString() | lowercase\"\n ></i>\n </div>\n <div class=\"p-t-8 p-b-8 p-r-8\">\n <p class=\"text-label-small m-b-0 m-r-8\">{{ 'Severity' | translate }}</p>\n <p class=\"small\">{{ SEVERITY_LABELS[selectedAlarm.severity] | translate }}</p>\n </div>\n </div>\n </div>\n <div class=\"col-xs-12 col-md-6 d-flex p-b-8\">\n <div class=\"border-all fit-w d-flex\">\n <div class=\"p-8\">\n <i\n class=\"icon-24 text-gray-dark m-t-4 stroked-icon status\"\n c8yIcon=\"contactless-payment\"\n ></i>\n </div>\n <div class=\"p-t-8 p-b-8 p-r-8\">\n <p class=\"text-label-small m-b-0 m-r-8\">{{ 'Source' | translate }}</p>\n <p class=\"small\">\n <button\n class=\"btn-link text-muted p-0 m-r-8\"\n title=\"{{ selectedAlarm.source.name }}\"\n type=\"button\"\n routerLink=\"{{ selectedAlarmMO | assetLink }}\"\n >\n <small class=\"icon-flex\">\n <i c8yIcon=\"exchange\"></i>\n {{ selectedAlarm.source.name || selectedAlarm.source.id }}\n </small>\n </button>\n <ng-container *ngIf=\"showSourceNavigationLink\">\n <button\n class=\"btn-link p-0\"\n title=\"{{\n linkTitle\n | translate: { appName: userDeviceManagementApp | humanizeAppName | async }\n }}\"\n type=\"button\"\n (click)=\"goToAlarmSource(selectedAlarm.id)\"\n data-cy=\"alarm-details-device-management-link\"\n >\n {{ userDeviceManagementApp | humanizeAppName | async }}\n <i c8yIcon=\"external-link\"></i>\n </button>\n </ng-container>\n </p>\n </div>\n </div>\n </div>\n <div class=\"col-xs-12 col-md-6 d-flex p-b-8\">\n <div class=\"border-all fit-w d-flex\">\n <div class=\"p-8\">\n <span\n class=\"circle-icon-wrapper\"\n [ngStyle]=\"{ 'background-color': typeColor }\"\n >\n <i\n class=\"stroked-icon\"\n c8yIcon=\"bell\"\n ></i>\n </span>\n </div>\n <div class=\"p-t-8 p-b-8 p-r-8 min-width-0\">\n <p class=\"text-label-small m-b-0 m-r-8\">{{ 'Type' | translate }}</p>\n <p\n class=\"small text-truncate\"\n title=\"{{ selectedAlarm.type }}\"\n >\n <code>{{ selectedAlarm.type }}</code>\n </p>\n </div>\n </div>\n </div>\n\n <div class=\"col-xs-12 col-md-12 p-b-16\">\n <div class=\"border-all fit-w d-flex\">\n <div class=\"p-8\">\n <i\n class=\"icon-24 text-gray-dark m-t-4\"\n c8yIcon=\"calendar\"\n ></i>\n </div>\n <div class=\"p-t-8 p-b-0 p-r-8 flex-grow\">\n <div class=\"content-flex-50\">\n <div class=\"col-4 p-b-8\">\n <p class=\"text-label-small m-b-0 m-r-8\">{{ 'Last updated' | translate }}</p>\n <p class=\"small\">\n {{ lastUpdated | c8yDate: 'medium' }}\n </p>\n </div>\n <div\n class=\"col-4 p-b-8\"\n *ngIf=\"selectedAlarm.count > 1\"\n >\n <p class=\"text-label-small m-b-0 m-r-8\">{{ 'Number of occurrences' | translate }}</p>\n <p>\n <span class=\"badge badge-info\">{{ selectedAlarm.count }}</span>\n </p>\n </div>\n <div\n class=\"col-4 p-b-8\"\n *ngIf=\"selectedAlarm.count > 1\"\n >\n <p class=\"text-label-small m-b-0 m-r-8\">{{ 'First occurrence' | translate }}</p>\n <p class=\"small\">\n {{ selectedAlarm.creationTime | c8yDate: 'medium' }}\n </p>\n </div>\n </div>\n </div>\n </div>\n </div>\n\n <div\n class=\"col-xs-12 col-md-12 p-b-16\"\n *ngIf=\"customFragments\"\n >\n <div class=\"border-all fit-w d-flex\">\n <div class=\"p-8\">\n <i\n class=\"icon-24 text-gray-dark m-t-4\"\n c8yIcon=\"outgoing-data\"\n ></i>\n </div>\n <div\n class=\"p-t-8 p-b-0 p-r-8 flex-grow\"\n data-cy=\"alarm-details-custom-data\"\n >\n <p class=\"text-label-small m-b-4 m-r-8\">{{ 'Custom data' | translate }}</p>\n <pre><code>{{ customFragments | json }}</code></pre>\n </div>\n </div>\n </div>\n</div>\n\n<div class=\"d-flex flex-wrap gap-8\">\n <button\n class=\"btn btn-default btn-sm\"\n [title]=\"'Reload audit logs' | translate\"\n type=\"submit\"\n (click)=\"reloadAuditLog(true, true)\"\n >\n <i\n c8yIcon=\"refresh\"\n [ngClass]=\"{ 'icon-spin': isLoading }\"\n ></i>\n {{ 'Reload audit logs' | translate }}\n </button>\n\n <button\n class=\"btn btn-default btn-sm\"\n [title]=\"\n selectedAlarm.status !== ACKNOWLEDGED_STATUS_VALUE\n ? (ACKNOWLEDGE_LABEL | translate)\n : (REACTIVATE_LABEL | translate)\n \"\n type=\"submit\"\n (click)=\"\n onUpdateDetails(\n selectedAlarm.status !== ACKNOWLEDGED_STATUS_VALUE\n ? ACKNOWLEDGED_STATUS_VALUE\n : ACTIVE_STATUS_VALUE\n )\n \"\n [disabled]=\"selectedAlarm.status === CLEARED_STATUS_VALUE || isAlarmStatusChanging\"\n >\n <i\n [c8yIcon]=\"selectedAlarm.status !== ACKNOWLEDGED_STATUS_VALUE ? BELL_SLASH_ICON : BELL_ICON\"\n ></i>\n {{\n selectedAlarm.status !== ACKNOWLEDGED_STATUS_VALUE\n ? (ACKNOWLEDGE_LABEL | translate)\n : (REACTIVATE_LABEL | translate)\n }}\n </button>\n\n <button\n class=\"btn btn-default btn-sm\"\n [title]=\"'Create smart rule' | translate\"\n type=\"submit\"\n *ngIf=\"isCreateSmartRulesButtonAvailable\"\n (click)=\"createSmartRule()\"\n >\n <i c8yIcon=\"c8y-icon c8y-icon-smart-rules\"></i>\n {{ 'Create smart rule' | translate }}\n </button>\n <button\n class=\"btn btn-default btn-sm\"\n [title]=\"'Clear`alarm`' | translate\"\n type=\"submit\"\n (click)=\"onUpdateDetails(CLEARED_STATUS_VALUE)\"\n [disabled]=\"selectedAlarm.status === CLEARED_STATUS_VALUE\"\n >\n <i c8yIcon=\"c8y-alert-idle\"></i>\n {{ 'Clear`alarm`' | translate }}\n </button>\n\n <button\n *ngFor=\"let button of selectedAlarm | alarmDetailsButton: selectedAlarmMO | async\"\n class=\"btn btn-default btn-sm\"\n [ngClass]=\"button.additionalButtonClasses\"\n [title]=\"button.title | translate\"\n type=\"button\"\n (click)=\"detailsButtonAction(button, selectedAlarm)\"\n [disabled]=\"button.disabled\"\n >\n <i [ngClass]=\"button.additionalIconClasses\" [c8yIcon]=\"button.icon\"></i>\n <span *ngIf=\"button.label\">{{ button.label | translate }}</span>\n </button>\n</div>\n\n<ng-template #noAuditLogAvailable>\n <div class=\"p-16\">\n <c8y-ui-empty-state\n [icon]=\"'archive'\"\n [title]=\"'No audit logs found.' | translate\"\n [horizontal]=\"true\"\n ></c8y-ui-empty-state>\n </div>\n</ng-template>\n\n<div class=\"legend form-block\">{{ 'Audit logs' | translate }}</div>\n\n<ng-container *ngIf=\"isLoading || auditLog?.data.length; else noAuditLogAvailable\">\n <c8y-loading *ngIf=\"isLoading\"></c8y-loading>\n\n <c8y-list-group\n data-cy=\"c8y-alarms-details--audit-logs\"\n *ngIf=\"!isLoading\"\n >\n <c8y-li-timeline *c8yFor=\"let log of auditLog; loadMore: 'hidden'\">\n {{ log.creationTime | date: 'mediumDate' }}\n {{ log.creationTime | date: 'mediumTime' }}\n <c8y-li>\n <c8y-li-body>\n <p class=\"text-truncate-wrap separator-bottom p-b-4\">\n {{ log | auditChangesMessage }}\n </p>\n <div class=\"c8y-list__item__footer\">\n <span\n class=\"m-r-16 small\"\n *ngIf=\"log.user\"\n >\n <span class=\"text-label-small\">\n {{ 'by`user`' | translate }}\n </span>\n {{ log.user }}\n </span>\n <span class=\"small\">\n <span class=\"text-label-small\">\n {{ 'device time' | translate }}\n </span>\n {{ log.time | c8yDate: 'medium' }}\n </span>\n </div>\n </c8y-li-body>\n </c8y-li>\n </c8y-li-timeline>\n </c8y-list-group>\n</ng-container>\n" }]
345
+ args: [{ selector: 'c8y-alarm-details', template: "<div class=\"d-flex row tight-grid flex-wrap a-i-stretch\">\n <div class=\"col-xs-12 col-md-6 d-flex p-b-8\">\n <div class=\"border-all fit-w d-flex\">\n <div class=\"p-8\">\n <i\n class=\"icon-24 text-gray-dark m-t-4 c8y-icon\"\n [c8yIcon]=\"selectedAlarm.status | AlarmStatusToIcon\"\n ></i>\n </div>\n <div class=\"p-t-8 p-b-8 p-r-8\">\n <p class=\"text-label-small m-b-0 m-r-8\">{{ 'Status' | translate }}</p>\n <p class=\"small\">{{ statusMessage }}</p>\n </div>\n </div>\n </div>\n <div class=\"col-xs-12 col-md-6 d-flex p-b-8\">\n <div class=\"border-all fit-w d-flex\">\n <div class=\"p-8\">\n <i\n class=\"icon-24 text-gray-dark m-t-4 stroked-icon status\"\n [c8yIcon]=\"selectedAlarm.severity | AlarmSeverityToIcon\"\n [ngClass]=\"selectedAlarm.severity?.toString() | lowercase\"\n ></i>\n </div>\n <div class=\"p-t-8 p-b-8 p-r-8\">\n <p class=\"text-label-small m-b-0 m-r-8\">{{ 'Severity' | translate }}</p>\n <p class=\"small\">{{ SEVERITY_LABELS[selectedAlarm.severity] | translate }}</p>\n </div>\n </div>\n </div>\n <div class=\"col-xs-12 col-md-6 d-flex p-b-8\">\n <div class=\"border-all fit-w d-flex\">\n <div class=\"p-8\">\n <i\n class=\"icon-24 text-gray-dark m-t-4 stroked-icon status\"\n c8yIcon=\"contactless-payment\"\n ></i>\n </div>\n <div class=\"p-t-8 p-b-8 p-r-8\">\n <p class=\"text-label-small m-b-0 m-r-8\">{{ 'Source' | translate }}</p>\n <p class=\"small\">\n <button\n class=\"btn-link text-muted p-0 m-r-8 text-left\"\n title=\"{{ selectedAlarm.source.name }}\"\n type=\"button\"\n routerLink=\"{{ selectedAlarmMO | assetLink }}\"\n >\n <small class=\"icon-flex\">\n <i c8yIcon=\"exchange\"></i>\n {{ selectedAlarm.source.name || selectedAlarm.source.id }}\n </small>\n </button>\n <ng-container *ngIf=\"showSourceNavigationLink\">\n <button\n class=\"btn-link p-0 text-left\"\n title=\"{{\n linkTitle\n | translate: { appName: userDeviceManagementApp | humanizeAppName | async }\n }}\"\n type=\"button\"\n (click)=\"goToAlarmSource(selectedAlarm.id)\"\n data-cy=\"alarm-details-device-management-link\"\n >\n {{ userDeviceManagementApp | humanizeAppName | async }}\n <i c8yIcon=\"external-link\"></i>\n </button>\n </ng-container>\n </p>\n </div>\n </div>\n </div>\n <div class=\"col-xs-12 col-md-6 d-flex p-b-8\">\n <div class=\"border-all fit-w d-flex\">\n <div class=\"p-8\">\n <span\n class=\"circle-icon-wrapper\"\n [ngStyle]=\"{ 'background-color': typeColor }\"\n >\n <i\n class=\"stroked-icon\"\n c8yIcon=\"bell\"\n ></i>\n </span>\n </div>\n <div class=\"p-t-8 p-b-8 p-r-8 min-width-0\">\n <p class=\"text-label-small m-b-0 m-r-8\">{{ 'Type' | translate }}</p>\n <p\n class=\"small text-truncate\"\n title=\"{{ selectedAlarm.type }}\"\n >\n <code>{{ selectedAlarm.type }}</code>\n </p>\n </div>\n </div>\n </div>\n\n <div class=\"col-xs-12 col-md-12 p-b-16\">\n <div class=\"border-all fit-w d-flex\">\n <div class=\"p-8\">\n <i\n class=\"icon-24 text-gray-dark m-t-4\"\n c8yIcon=\"calendar\"\n ></i>\n </div>\n <div class=\"p-t-8 p-b-0 p-r-8 flex-grow\">\n <div class=\"content-flex-50\">\n <div class=\"col-4 p-b-8\">\n <p class=\"text-label-small m-b-0 m-r-8\">{{ 'Last updated' | translate }}</p>\n <p class=\"small\">\n {{ lastUpdated | c8yDate: 'medium' }}\n </p>\n </div>\n <div\n class=\"col-4 p-b-8\"\n *ngIf=\"selectedAlarm.count > 1\"\n >\n <p class=\"text-label-small m-b-0 m-r-8\">{{ 'Number of occurrences' | translate }}</p>\n <p>\n <span class=\"badge badge-info\">{{ selectedAlarm.count }}</span>\n </p>\n </div>\n <div\n class=\"col-4 p-b-8\"\n *ngIf=\"selectedAlarm.count > 1\"\n >\n <p class=\"text-label-small m-b-0 m-r-8\">{{ 'First occurrence' | translate }}</p>\n <p class=\"small\">\n {{ selectedAlarm.creationTime | c8yDate: 'medium' }}\n </p>\n </div>\n </div>\n </div>\n </div>\n </div>\n\n <div\n class=\"col-xs-12 col-md-12 p-b-16\"\n *ngIf=\"customFragments\"\n >\n <div class=\"border-all fit-w d-flex\">\n <div class=\"p-8\">\n <i\n class=\"icon-24 text-gray-dark m-t-4\"\n c8yIcon=\"outgoing-data\"\n ></i>\n </div>\n <div\n class=\"p-t-8 p-b-0 p-r-8 flex-grow\"\n data-cy=\"alarm-details-custom-data\"\n >\n <p class=\"text-label-small m-b-4 m-r-8\">{{ 'Custom data' | translate }}</p>\n <pre><code>{{ customFragments | json }}</code></pre>\n </div>\n </div>\n </div>\n</div>\n\n<div class=\"d-flex flex-wrap gap-8\">\n <button\n class=\"btn btn-default btn-sm\"\n [title]=\"'Reload audit logs' | translate\"\n type=\"submit\"\n (click)=\"reloadAuditLog(true, true)\"\n >\n <i\n c8yIcon=\"refresh\"\n [ngClass]=\"{ 'icon-spin': isLoading }\"\n ></i>\n {{ 'Reload audit logs' | translate }}\n </button>\n\n <button\n class=\"btn btn-default btn-sm\"\n [title]=\"\n selectedAlarm.status !== ACKNOWLEDGED_STATUS_VALUE\n ? (ACKNOWLEDGE_LABEL | translate)\n : (REACTIVATE_LABEL | translate)\n \"\n type=\"submit\"\n (click)=\"\n onUpdateDetails(\n selectedAlarm.status !== ACKNOWLEDGED_STATUS_VALUE\n ? ACKNOWLEDGED_STATUS_VALUE\n : ACTIVE_STATUS_VALUE\n )\n \"\n [disabled]=\"selectedAlarm.status === CLEARED_STATUS_VALUE || isAlarmStatusChanging\"\n >\n <i\n [c8yIcon]=\"selectedAlarm.status !== ACKNOWLEDGED_STATUS_VALUE ? BELL_SLASH_ICON : BELL_ICON\"\n ></i>\n {{\n selectedAlarm.status !== ACKNOWLEDGED_STATUS_VALUE\n ? (ACKNOWLEDGE_LABEL | translate)\n : (REACTIVATE_LABEL | translate)\n }}\n </button>\n\n <button\n class=\"btn btn-default btn-sm\"\n [title]=\"'Create smart rule' | translate\"\n type=\"submit\"\n *ngIf=\"isCreateSmartRulesButtonAvailable\"\n (click)=\"createSmartRule()\"\n >\n <i c8yIcon=\"c8y-icon c8y-icon-smart-rules\"></i>\n {{ 'Create smart rule' | translate }}\n </button>\n <button\n class=\"btn btn-default btn-sm\"\n [title]=\"'Clear`alarm`' | translate\"\n type=\"submit\"\n (click)=\"onUpdateDetails(CLEARED_STATUS_VALUE)\"\n [disabled]=\"selectedAlarm.status === CLEARED_STATUS_VALUE\"\n >\n <i c8yIcon=\"c8y-alert-idle\"></i>\n {{ 'Clear`alarm`' | translate }}\n </button>\n\n <button\n *ngFor=\"let button of selectedAlarm | alarmDetailsButton: selectedAlarmMO | async\"\n class=\"btn btn-default btn-sm\"\n [ngClass]=\"button.additionalButtonClasses\"\n [title]=\"button.title | translate\"\n type=\"button\"\n (click)=\"detailsButtonAction(button, selectedAlarm)\"\n [disabled]=\"button.disabled\"\n >\n <i [ngClass]=\"button.additionalIconClasses\" [c8yIcon]=\"button.icon\"></i>\n <span *ngIf=\"button.label\">{{ button.label | translate }}</span>\n </button>\n</div>\n\n<ng-template #noAuditLogAvailable>\n <div class=\"p-16\">\n <c8y-ui-empty-state\n [icon]=\"'archive'\"\n [title]=\"'No audit logs found.' | translate\"\n [horizontal]=\"true\"\n ></c8y-ui-empty-state>\n </div>\n</ng-template>\n\n<div class=\"legend form-block\">{{ 'Audit logs' | translate }}</div>\n\n<ng-container *ngIf=\"isLoading || auditLog?.data.length; else noAuditLogAvailable\">\n <c8y-loading *ngIf=\"isLoading\"></c8y-loading>\n\n <c8y-list-group\n data-cy=\"c8y-alarms-details--audit-logs\"\n *ngIf=\"!isLoading\"\n >\n <c8y-li-timeline *c8yFor=\"let log of auditLog; loadMore: 'hidden'\">\n {{ log.creationTime | date: 'mediumDate' }}\n {{ log.creationTime | date: 'mediumTime' }}\n <c8y-li>\n <c8y-li-body>\n <p class=\"text-truncate-wrap separator-bottom p-b-4\">\n {{ log | auditChangesMessage }}\n </p>\n <div class=\"c8y-list__item__footer\">\n <span\n class=\"m-r-16 small\"\n *ngIf=\"log.user\"\n >\n <span class=\"text-label-small\">\n {{ 'by`user`' | translate }}\n </span>\n {{ log.user }}\n </span>\n <span class=\"small\">\n <span class=\"text-label-small\">\n {{ 'device time' | translate }}\n </span>\n {{ log.time | c8yDate: 'medium' }}\n </span>\n </div>\n </c8y-li-body>\n </c8y-li>\n </c8y-li-timeline>\n </c8y-list-group>\n</ng-container>\n" }]
344
346
  }], ctorParameters: () => [{ type: i1.AlarmDetailsService }, { type: i2.AlarmService }, { type: i3.AlertService }, { type: i3.AppStateService }, { type: i2.AuditService }, { type: i3.RelativeTimePipe }, { type: i4.Ng1SmartRulesUpgradeService, decorators: [{
345
347
  type: Optional
346
348
  }] }, { type: i5.TranslateService }, { type: i2.InventoryService }, { type: i6.AlarmsViewService }, { type: i3.ColorService }], propDecorators: { selectedAlarm: [{
347
349
  type: Input
348
- }], hasAnyRoleAllowingToCreateSmartRule: [{
349
- type: Input
350
- }], isSmartRulesServiceSubscribed: [{
351
- type: Input
352
350
  }] } });
353
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWxhcm0tZGV0YWlscy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9hbGFybXMvYWxhcm0tZGV0YWlscy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi9hbGFybXMvYWxhcm0tZGV0YWlscy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBYSxRQUFRLEVBQWlCLE1BQU0sZUFBZSxDQUFDO0FBQ3JGLE9BQU8sRUFDTCxtQkFBbUIsRUFDbkIsV0FBVyxFQUNYLFlBQVksRUFFWixZQUFZLEVBTVosZ0JBQWdCLEVBQ2hCLGVBQWUsRUFDaEIsTUFBTSxhQUFhLENBQUM7QUFDckIsT0FBTyxFQUNMLFlBQVksRUFDWixlQUFlLEVBQ2YsWUFBWSxFQUNaLGdCQUFnQixFQUNoQixPQUFPLEVBQ1IsTUFBTSxxQkFBcUIsQ0FBQztBQUM3QixPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUN2RCxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBQ3RDLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQzlELE9BQU8sRUFDTCx3QkFBd0IsRUFDeEIsaUJBQWlCLEVBR2xCLE1BQU0sZ0JBQWdCLENBQUM7QUFDeEIsT0FBTyxFQUFFLDJCQUEyQixFQUFFLE1BQU0sbUNBQW1DLENBQUM7QUFDaEYsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7Ozs7Ozs7Ozs7Ozs7O0FBTTFELE1BQU0sT0FBTyxxQkFBcUI7SUF3RWhDLFlBQ1UsbUJBQXdDLEVBQ3hDLFlBQTBCLEVBQzFCLFlBQTBCLEVBQzFCLFFBQXlCLEVBQ3pCLFlBQTBCLEVBQzFCLFlBQThCLEVBQ2xCLDJCQUF3RCxFQUNwRSxnQkFBa0MsRUFDbEMsZ0JBQWtDLEVBQ2xDLGlCQUFvQyxFQUNwQyxZQUEwQjtRQVYx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Q0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLE1BQU0sSUFBSSxJQUFJLENBQUMsU0FBUyxDQUFDO0lBQ3JELENBQUM7SUFFRDs7Ozs7O09BTUc7SUFDSyxzQkFBc0I7UUFDNUIsT0FBTyxNQUFNLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLHVCQUF1QixDQUFDLFdBQVcsQ0FBQyxDQUFDO0lBQ2pGLENBQUM7SUFFTyxrQkFBa0IsQ0FBQyxhQUFxQjtRQUM5QyxJQUFJLGdCQUFnQixHQUFHLElBQUksQ0FBQztRQUM1QixLQUFLLE1BQU0sR0FBRyxJQUFJLGFBQWEsRUFBRSxDQUFDO1lBQ2hDLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEtBQUssR0FBRyxDQUFDLEVBQUUsQ0FBQztnQkFDbkQsSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUM7b0JBQ3RCLGdCQUFnQixHQUFHLEVBQUUsQ0FBQztnQkFDeEIsQ0FBQztnQkFDRCxnQkFBZ0IsQ0FBQyxHQUFHLENBQUMsR0FBRyxhQUFhLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDN0MsQ0FBQztRQUNILENBQUM7UUFFRCxPQUFPLGdCQUFnQixDQUFDO0lBQzFCLENBQUM7OEdBNVpVLHFCQUFxQjtrR0FBckIscUJBQXFCLHNRQ3RDbEMsc21TQTBSQTs7MkZEcFBhLHFCQUFxQjtrQkFKakMsU0FBUzsrQkFDRSxtQkFBbUI7OzBCQWtGMUIsUUFBUTtrS0E5RUYsYUFBYTtzQkFBckIsS0FBSztnQkFDRyxtQ0FBbUM7c0JBQTNDLEtBQUs7Z0JBQ0csNkJBQTZCO3NCQUFyQyxLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBJbnB1dCwgT25DaGFuZ2VzLCBPcHRpb25hbCwgU2ltcGxlQ2hhbmdlcyB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtcbiAgQUxBUk1fU1RBVFVTX0xBQkVMUyxcbiAgQWxhcm1TdGF0dXMsXG4gIEFsYXJtU2VydmljZSxcbiAgQWxhcm1TdGF0dXNUeXBlLFxuICBBdWRpdFNlcnZpY2UsXG4gIElBbGFybSxcbiAgSUFwcGxpY2F0aW9uLFxuICBJQXVkaXRSZWNvcmQsXG4gIElNYW5hZ2VkT2JqZWN0LFxuICBJUmVzdWx0TGlzdCxcbiAgSW52ZW50b3J5U2VydmljZSxcbiAgU0VWRVJJVFlfTEFCRUxTXG59IGZyb20gJ0BjOHkvY2xpZW50JztcbmltcG9ydCB7XG4gIEFsZXJ0U2VydmljZSxcbiAgQXBwU3RhdGVTZXJ2aWNlLFxuICBDb2xvclNlcnZpY2UsXG4gIFJlbGF0aXZlVGltZVBpcGUsXG4gIGdldHRleHRcbn0gZnJvbSAnQGM4eS9uZ3gtY29tcG9uZW50cyc7XG5pbXBvcnQgeyBUcmFuc2xhdGVTZXJ2aWNlIH0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSc7XG5pbXBvcnQgeyBjbG9uZURlZXAgfSBmcm9tICdsb2Rhc2gtZXMnO1xuaW1wb3J0IHsgQWxhcm1EZXRhaWxzU2VydmljZSB9IGZyb20gJy4vYWxhcm0tZGV0YWlscy5zZXJ2aWNlJztcbmltcG9ydCB7XG4gIEFMQVJNX0RFRkFVTFRfUFJPUEVSVElFUyxcbiAgQUxBUk1fU1RBVFVTX0lDT04sXG4gIEFsYXJtRGV0YWlsc0J1dHRvbixcbiAgQ3VzdG9tRnJhZ21lbnRcbn0gZnJvbSAnLi9hbGFybXMubW9kZWwnO1xuaW1wb3J0IHsgTmcxU21hcnRSdWxlc1VwZ3JhZGVTZXJ2aWNlIH0gZnJvbSAnLi9uZzEtc21hcnQtcnVsZXMtdXBncmFkZS5zZXJ2aWNlJztcbmltcG9ydCB7IEFsYXJtc1ZpZXdTZXJ2aWNlIH0gZnJvbSAnLi9hbGFybXMtdmlldy5zZXJ2aWNlJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnYzh5LWFsYXJtLWRldGFpbHMnLFxuICB0ZW1wbGF0ZVVybDogJy4vYWxhcm0tZGV0YWlscy5jb21wb25lbnQuaHRtbCdcbn0pXG5leHBvcnQgY2xhc3MgQWxhcm1EZXRhaWxzQ29tcG9uZW50IGltcGxlbWVudHMgT25DaGFuZ2VzIHtcbiAgQElucHV0KCkgc2VsZWN0ZWRBbGFybTogSUFsYXJtO1xuICBASW5wdXQoKSBoYXNBbnlSb2xlQWxsb3dpbmdUb0NyZWF0ZVNtYXJ0UnVsZTogYm9vbGVhbjtcbiAgQElucHV0KCkgaXNTbWFydFJ1bGVzU2VydmljZVN1YnNjcmliZWQ6IGJvb2xlYW47XG5cbiAgcmVhZG9ubHkgQUNLTk9XTEVER0VEX1NUQVRVU19WQUxVRSA9IEFsYXJtU3RhdHVzLkFDS05PV0xFREdFRDtcbiAgcmVhZG9ubHkgQUNUSVZFX1NUQVRVU19WQUxVRSA9IEFsYXJtU3RhdHVzLkFDVElWRTtcbiAgcmVhZG9ubHkgQ0xFQVJFRF9TVEFUVVNfVkFMVUUgPSBBbGFybVN0YXR1cy5DTEVBUkVEO1xuICByZWFkb25seSBBQ0tOT1dMRURHRV9MQUJFTCA9IGdldHRleHQoJ0Fja25vd2xlZGdlJyk7XG4gIHJlYWRvbmx5IFJFQUNUSVZBVEVfTEFCRUwgPSBnZXR0ZXh0KCdSZWFjdGl2YXRlJyk7XG4gIHJlYWRvbmx5IFNFVkVSSVRZX0xBQkVMUyA9IFNFVkVSSVRZX0xBQkVMUztcbiAgcmVhZG9ubHkgQkVMTF9TTEFTSF9JQ09OID0gQUxBUk1fU1RBVFVTX0lDT04uQkVMTF9TTEFTSDtcbiAgcmVhZG9ubHkgQkVMTF9JQ09OID0gQUxBUk1fU1RBVFVTX0lDT04uQkVMTDtcblxuICAvKipcbiAgICogUmVwcmVzZW50cyBhIERldmljZSBNYW5hZ2VtZW50IGFwcGxpY2F0aW9uIHVzZWQgYnkgdGhlIHVzZXIuXG4gICAqIERldGVybWluZXMgdGhlIGFjY3VyYXRlIG5hbWUgYW5kIGNvbnRleHQgcGF0aCByZXF1aXJlZCBmb3IgbmF2aWdhdGluZyB0byBhbGFybXMgb2YgdGhlIGN1cnJlbnQgZGV2aWNlXG4gICAqL1xuICB1c2VyRGV2aWNlTWFuYWdlbWVudEFwcDogSUFwcGxpY2F0aW9uO1xuICAvKipcbiAgICogTWFuYWdlcyB0aGUgdmlzaWJpbGl0eSBvZiB0aGUgbmF2aWdhdGlvbiBsaW5rLlxuICAgKiBJZiBzZXQgdG8gdHJ1ZSwgdGhlIGxpbmsgaXMgdmlzaWJsZSwgb3RoZXJ3aXNlLCBpdCByZW1haW5zIGhpZGRlbi5cbiAgICovXG4gIHNob3dTb3VyY2VOYXZpZ2F0aW9uTGluayA9IGZhbHNlO1xuICByZWFkb25seSBsaW5rVGl0bGUgPSBnZXR0ZXh0KCdPcGVuIGluIHt7IGFwcE5hbWUgfX0nKTtcbiAgLyoqXG4gICAqIENvbnRhaW5zIGF1ZGl0IGxvZ3MsIGluY2x1ZGluZyB0aGUgdmVyeSBmaXJzdCBhdWRpdCBsb2cgcmVjb3JkIGluIHRoZSBhbGFybXMnIGhpc3RvcnkuXG4gICAqIFRoaXMgZW5zdXJlcyB0aGF0IHRoZSBoaXN0b3JpY2FsIHN0YXJ0aW5nIHBvaW50IG9mIHRoZSBhdWRpdCBsb2dzIGlzIGFsd2F5cyBpbmNsdWRlZCBpbiB0aGUgZGF0YSBzZXQuXG4gICAqIFVzdWFsbHkgaXQncyBhbiAnQWxhcm0gY3JlYXRlZCcgYXVkaXQgbG9nLlxuICAgKlxuICAgKiBPbmx5IHVzZWQgd2hlbiBhdWRpdCBsb2dzIGV4Y2VlZCBQQUdFX1NJWkUuXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBwcml2YXRlIGV4dGVuZGVkQXVkaXRMb2dzOiBJUmVzdWx0TGlzdDxJQXVkaXRSZWNvcmQ+O1xuICBwcml2YXRlIHJlYWRvbmx5IFBBR0VfU0laRSA9IDEwMDtcblxuICAvKipcbiAgICogUHJldmVudHMgdGhlIHBpcGVsaW5lIGZyb20gZmFpbGluZyBmb3IgYSB0dXRvcmlhbCBhcHBsaWNhdGlvblxuICAgKiBiZWNhdXNlIGl0J3MgYSBwdXJlIEFuZ3VsYXIgYXBwbGljYXRpb24gYW5kIGRvZXNuJ3Qgc3VwcG9ydCBhbnlcbiAgICogQW5ndWxhckpTIHNlcnZpY2VzLlxuICAgKi9cbiAgaXNDcmVhdGVTbWFydFJ1bGVzQnV0dG9uQXZhaWxhYmxlOiBib29sZWFuO1xuICAvKipcbiAgICogUHJvcGVydHkgY29udGFpbnMgYSAxMDAgKHNlZSBQQUdFX1NJWkUpIG9mIG1vc3QgcmVjZW50IGF1ZGl0IGxvZ3MgcmVjb3Jkcy5cbiAgICovXG4gIGF1ZGl0TG9nOiBJUmVzdWx0TGlzdDxJQXVkaXRSZWNvcmQ+O1xuXG4gIGlzTG9hZGluZzogYm9vbGVhbjtcbiAgLyoqXG4gICAqIEluZGljYXRlcyB3aGVuIGFsYXJtcyBzdGF0dXMgY2hhbmdlIHdhcyBzdGFydGVkIChBY2tub3dsZWRnZS9SZWFjdGl2YXRlKVxuICAgKi9cbiAgaXNBbGFybVN0YXR1c0NoYW5naW5nID0gZmFsc2U7XG4gIC8qKlxuICAgKiBSZXByZXNlbnRzIGEgdmFsdWUgZm9yIGEgJ0xhc3QgdXBkYXRlZCcgc2VjdGlvbiBpbiBkZXRhaWxzLlxuICAgKi9cbiAgbGFzdFVwZGF0ZWQ6IHN0cmluZztcbiAgLyoqXG4gICAqIFJlcHJlc2VudHMgYSB2YWx1ZSBmb3IgYSAnU3RhdHVzJyBzZWN0aW9uIGluIGRldGFpbHMuXG4gICAqL1xuICBzdGF0dXNNZXNzYWdlOiBzdHJpbmc7XG4gIC8qKlxuICAgKiBUaGUgY29sb3Igb2YgdGhlIGFsYXJtIHR5cGUuXG4gICAqL1xuICB0eXBlQ29sb3I6IHN0cmluZztcbiAgLyoqXG4gICAqIEN1c3RvbSBmcmFnbWVudHMgb2YgdGhlIHNlbGVjdGVkIGFsYXJtLiBJZiBub25lIGV4aXN0LCBudWxsIGlzIHJldHVybmVkLlxuICAgKi9cbiAgY3VzdG9tRnJhZ21lbnRzOiBDdXN0b21GcmFnbWVudCA9IG51bGw7XG5cbiAgc2VsZWN0ZWRBbGFybU1POiBJTWFuYWdlZE9iamVjdDtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIGFsYXJtRGV0YWlsc1NlcnZpY2U6IEFsYXJtRGV0YWlsc1NlcnZpY2UsXG4gICAgcHJpdmF0ZSBhbGFybVNlcnZpY2U6IEFsYXJtU2VydmljZSxcbiAgICBwcml2YXRlIGFsZXJ0U2VydmljZTogQWxlcnRTZXJ2aWNlLFxuICAgIHByaXZhdGUgYXBwU3RhdGU6IEFwcFN0YXRlU2VydmljZSxcbiAgICBwcml2YXRlIGF1ZGl0U2VydmljZTogQXVkaXRTZXJ2aWNlLFxuICAgIHByaXZhdGUgcmVsYXRpdmVUaW1lOiBSZWxhdGl2ZVRpbWVQaXBlLFxuICAgIEBPcHRpb25hbCgpIHByaXZhdGUgbmcxU21hcnRSdWxlc1VwZ3JhZGVTZXJ2aWNlOiBOZzFTbWFydFJ1bGVzVXBncmFkZVNlcnZpY2UsXG4gICAgcHJpdmF0ZSB0cmFuc2xhdGVTZXJ2aWNlOiBUcmFuc2xhdGVTZXJ2aWNlLFxuICAgIHByaXZhdGUgaW52ZW50b3J5U2VydmljZTogSW52ZW50b3J5U2VydmljZSxcbiAgICBwcml2YXRlIGFsYXJtc1ZpZXdTZXJ2aWNlOiBBbGFybXNWaWV3U2VydmljZSxcbiAgICBwcml2YXRlIGNvbG9yU2VydmljZTogQ29sb3JTZXJ2aWNlXG4gICkge31cblxuICBhc3luYyBuZ09uSW5pdCgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICB0aGlzLmlzQ3JlYXRlU21hcnRSdWxlc0J1dHRvbkF2YWlsYWJsZSA9XG4gICAgICAhIXRoaXMubmcxU21hcnRSdWxlc1VwZ3JhZGVTZXJ2aWNlICYmXG4gICAgICB0aGlzLmlzU21hcnRSdWxlc1NlcnZpY2VTdWJzY3JpYmVkICYmXG4gICAgICB0aGlzLmhhc0FueVJvbGVBbGxvd2luZ1RvQ3JlYXRlU21hcnRSdWxlO1xuICAgIHRoaXMudXNlckRldmljZU1hbmFnZW1lbnRBcHAgPSBhd2FpdCB0aGlzLmFsYXJtRGV0YWlsc1NlcnZpY2UuZ2V0QXBwbGljYXRpb24oXG4gICAgICB0aGlzLmFsYXJtRGV0YWlsc1NlcnZpY2UuREVWSUNFX01BTkFHRU1FTlRfQVBQTElDQVRJT05fS0VZXG4gICAgKTtcbiAgICB0aGlzLnNob3dTb3VyY2VOYXZpZ2F0aW9uTGluayA9XG4gICAgICAhIXRoaXMudXNlckRldmljZU1hbmFnZW1lbnRBcHAgJiYgIXRoaXMuaXNEZXZpY2VNYW5hZ2VtZW50VmlldygpO1xuICAgIHRoaXMudHlwZUNvbG9yID0gYXdhaXQgdGhpcy5jb2xvclNlcnZpY2UuZ2VuZXJhdGVDb2xvcih0aGlzLnNlbGVjdGVkQWxhcm0udHlwZSk7XG4gIH1cblxuICBhc3luYyBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKGNoYW5nZXMuc2VsZWN0ZWRBbGFybSAmJiBjaGFuZ2VzLnNlbGVjdGVkQWxhcm0uY3VycmVudFZhbHVlKSB7XG4gICAgICBhd2FpdCB0aGlzLnJlbG9hZEF1ZGl0TG9nKHRydWUsIHRydWUpO1xuICAgICAgYXdhaXQgdGhpcy51cGRhdGVTdGF0dXNNZXNzYWdlKCk7XG4gICAgICBjb25zdCB7IGRhdGEgfSA9IGF3YWl0IHRoaXMuaW52ZW50b3J5U2VydmljZS5kZXRhaWwodGhpcy5zZWxlY3RlZEFsYXJtLnNvdXJjZS5pZCk7XG4gICAgICB0aGlzLnNlbGVjdGVkQWxhcm1NTyA9IGRhdGE7XG4gICAgICB0aGlzLnVwZGF0ZUxhc3RVcGRhdGVkRGF0ZSh0aGlzLmF1ZGl0TG9nLmRhdGFbMF0pO1xuICAgICAgdGhpcy5jdXN0b21GcmFnbWVudHMgPSB0aGlzLmdldEN1c3RvbUZyYWdtZW50cyh0aGlzLnNlbGVjdGVkQWxhcm0pO1xuICAgIH1cbiAgfVxuXG4gIGNyZWF0ZVNtYXJ0UnVsZSgpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuaXNDcmVhdGVTbWFydFJ1bGVzQnV0dG9uQXZhaWxhYmxlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMubmcxU21hcnRSdWxlc1VwZ3JhZGVTZXJ2aWNlLmFkZE5ld0ZvcklucHV0QWxhcm1BbmRPdXRwdXRVc2VyV2l0aFVJKFxuICAgICAgdGhpcy5zZWxlY3RlZEFsYXJtLFxuICAgICAgdGhpcy5hcHBTdGF0ZS5jdXJyZW50VXNlci52YWx1ZVxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogTmF2aWdhdGVzIHRvIGEgc3BlY2lmaWMgYWxhcm0gc291cmNlIGRldmljZSBiYXNlZCBvbiB0aGUgcHJvdmlkZWQgc291cmNlLlxuICAgKlxuICAgKiBAcGFyYW0gc291cmNlSWQgLSBUaGUgc291cmNlIGlkLlxuICAgKi9cbiAgYXN5bmMgZ29Ub0FsYXJtU291cmNlKHNvdXJjZUlkOiBzdHJpbmcgfCBudW1iZXIpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCB7IGRhdGEgfSA9IGF3YWl0IHRoaXMuYWxhcm1TZXJ2aWNlLmRldGFpbChzb3VyY2VJZCk7XG4gICAgY29uc3QgYmFzZVVybCA9IGAvYXBwcy8ke3RoaXMudXNlckRldmljZU1hbmFnZW1lbnRBcHAuY29udGV4dFBhdGh9YDtcbiAgICBjb25zdCBwYXRoID0gYCMvZGV2aWNlLyR7ZGF0YS5zb3VyY2UuaWR9L2FsYXJtc2A7XG4gICAgY29uc3QgdXJsID0gYCR7YmFzZVVybH0vJHtwYXRofWA7XG5cbiAgICB3aW5kb3cub3Blbih1cmwsICdfYmxhbmsnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZWxvYWRzIGF1ZGl0IGxvZyBkYXRhIGFzeW5jaHJvbm91c2x5LlxuICAgKlxuICAgKiBUaGlzIG1ldGhvZCBmZXRjaGVzIGF1ZGl0IHJlY29yZHMgdXNpbmcgYGdldEFsYXJtQXVkaXRSZWNvcmRzYCBhbmQgb3B0aW9uYWxseSB1cGRhdGVzIHRoZSBhdWRpdCBsb2dzXG4gICAqIHN0YXRlIGluIHRoZSBjb21wb25lbnQgYmFzZWQgb24gdGhlIGBpc1NldEF1ZGl0TG9nc2AgZmxhZy4gSXQgaGFuZGxlcyB0aGUgbG9hZGluZyBzdGF0ZSBhbmQgcG90ZW50aWFsXG4gICAqIGVycm9ycyBkdXJpbmcgdGhlIGZldGNoIG9wZXJhdGlvbi5cbiAgICpcbiAgICogQHBhcmFtIGlzUmV2ZXJ0IC0gQSBib29sZWFuIGZsYWcgaW5kaWNhdGluZyB3aGV0aGVyIHRvIHJldHJpZXZlIGEgMTAwIChzZWUgUEFHRV9TSVpFKSByZWNvcmRzICh0cnVlKVxuICAgKiAgICAgICAgICAgICAgICAgICBvciBvbmx5IHJlY29yZCwgdGhhdCBjaHJvbm9sb2dpY2FsbHkgd2lsbCBiZSB0aGUgb2xkZXN0IG9uZSAoZmFsc2UpLiBEZWZhdWx0cyB0byB0cnVlLlxuICAgKiAgICAgICAgICAgICAgICAgICBJZiBzZXQgdG8gZmFsc2UsIGl0IHdpbGwgc2V0IFBBR0VfU0laRSB0byAxIGFuZCB0cmlnZ2VyIGEgbG9naWNcbiAgICogICAgICAgICAgICAgICAgICAgY29uY2F0ZW5hdGluZyBhIG1vc3QgcmVjZW50IHJlY29yZCB3aXRoIHRoZSB2ZXJ5IGZpcnN0IG9uZSB0b1xuICAgKiAgICAgICAgICAgICAgICAgICBjYWxjdWxhdGUgdGhlIGFsYXJtIGR1cmF0aW9uIChjaGFuZ2UgdG8gQ0xFQVJFRCBzdGF0dXMpLlxuICAgKiAgICAgICAgICAgICAgICAgICBJdCdzIHBhc3NlZCB0byB0aGUgYGdldEFsYXJtQXVkaXRSZWNvcmRzYCBtZXRob2QuXG4gICAqIEBwYXJhbSBpc1NldEF1ZGl0TG9ncyAtIEEgYm9vbGVhbiBmbGFnIHRvIGRldGVybWluZSBpZiB0aGUgZmV0Y2hlZCBhdWRpdCBsb2dzIHNob3VsZCBiZSBzZXQgaW4gdGhlIGNvbXBvbmVudCBzdGF0ZS4gRGVmYXVsdHMgdG8gYGZhbHNlYC5cbiAgICogQHJldHVybnMgQSBwcm9taXNlIHRoYXQgcmVzb2x2ZXMgdG8gYSBsaXN0IG9mIGBJQXVkaXRSZWNvcmRgIG9iamVjdHMuXG4gICAqL1xuICBhc3luYyByZWxvYWRBdWRpdExvZyhcbiAgICBpc1JldmVydCA9IHRydWUsXG4gICAgaXNTZXRBdWRpdExvZ3MgPSBmYWxzZVxuICApOiBQcm9taXNlPElSZXN1bHRMaXN0PElBdWRpdFJlY29yZD4+IHtcbiAgICB0cnkge1xuICAgICAgdGhpcy5pc0xvYWRpbmcgPSB0cnVlO1xuICAgICAgY29uc3QgYXVkaXRMb2dzID0gYXdhaXQgdGhpcy5nZXRBbGFybUF1ZGl0UmVjb3Jkcyhpc1JldmVydCk7XG5cbiAgICAgIGlmIChpc1NldEF1ZGl0TG9ncykge1xuICAgICAgICB0aGlzLnNldEF1ZGl0TG9ncyhhdWRpdExvZ3MpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gYXVkaXRMb2dzO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICB0aGlzLmFsZXJ0U2VydmljZS5hZGRTZXJ2ZXJGYWlsdXJlKGVycm9yKTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgdGhpcy5pc0xvYWRpbmcgPSBmYWxzZTtcbiAgICB9XG4gIH1cblxuICBhc3luYyBvblVwZGF0ZURldGFpbHMoc3RhdHVzOiBBbGFybVN0YXR1c1R5cGUpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICB0cnkge1xuICAgICAgdGhpcy5pc0FsYXJtU3RhdHVzQ2hhbmdpbmcgPSB0cnVlO1xuICAgICAgYXdhaXQgdGhpcy51cGRhdGVBbGFybVN0YXR1cyhzdGF0dXMpO1xuICAgICAgYXdhaXQgdGhpcy5yZWxvYWRBdWRpdExvZyh0cnVlLCB0cnVlKTtcbiAgICAgIGF3YWl0IHRoaXMudXBkYXRlU3RhdHVzTWVzc2FnZSgpO1xuICAgICAgdGhpcy51cGRhdGVMYXN0VXBkYXRlZERhdGUodGhpcy5hdWRpdExvZy5kYXRhWzBdKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgdGhpcy5hbGVydFNlcnZpY2UuYWRkU2VydmVyRmFpbHVyZShlcnJvcik7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIHRoaXMuaXNBbGFybVN0YXR1c0NoYW5naW5nID0gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgZGV0YWlsc0J1dHRvbkFjdGlvbihidXR0b246IEFsYXJtRGV0YWlsc0J1dHRvbiwgYWxhcm06IElBbGFybSk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IHJlc3VsdCA9IGJ1dHRvbi5hY3Rpb24oYWxhcm0pO1xuICAgIGxldCBzaG91bGRSZWxvYWQ6IGJvb2xlYW4gfCBJQWxhcm0gPSBmYWxzZTtcbiAgICBpZiAocmVzdWx0IGluc3RhbmNlb2YgUHJvbWlzZSkge1xuICAgICAgc2hvdWxkUmVsb2FkID0gYXdhaXQgcmVzdWx0O1xuICAgIH0gZWxzZSB7XG4gICAgICBzaG91bGRSZWxvYWQgPSByZXN1bHQ7XG4gICAgfVxuXG4gICAgaWYgKHNob3VsZFJlbG9hZCkge1xuICAgICAgbGV0IGFsYXJtOiBJQWxhcm07XG4gICAgICBpZiAoc2hvdWxkUmVsb2FkID09PSB0cnVlKSB7XG4gICAgICAgIGNvbnN0IHsgZGF0YTogdXBkYXRlZEFsYXJtIH0gPSBhd2FpdCB0aGlzLmFsYXJtU2VydmljZS5kZXRhaWwodGhpcy5zZWxlY3RlZEFsYXJtLmlkKTtcbiAgICAgICAgYWxhcm0gPSB1cGRhdGVkQWxhcm07XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBhbGFybSA9IHNob3VsZFJlbG9hZDtcbiAgICAgIH1cbiAgICAgIHRoaXMuYWxhcm1zVmlld1NlcnZpY2UudXBkYXRlQWxhcm1MaXN0KCk7XG5cbiAgICAgIGNvbnN0IHByZXZpb3VzVmFsdWUgPSB0aGlzLnNlbGVjdGVkQWxhcm07XG4gICAgICB0aGlzLnNlbGVjdGVkQWxhcm0gPSBhbGFybTtcbiAgICAgIHRoaXMubmdPbkNoYW5nZXMoe1xuICAgICAgICBzZWxlY3RlZEFsYXJtOiB7XG4gICAgICAgICAgY3VycmVudFZhbHVlOiBhbGFybSxcbiAgICAgICAgICBwcmV2aW91c1ZhbHVlLFxuICAgICAgICAgIGZpcnN0Q2hhbmdlOiBmYWxzZSxcbiAgICAgICAgICBpc0ZpcnN0Q2hhbmdlOiAoKSA9PiBmYWxzZVxuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIHVwZGF0ZUFsYXJtU3RhdHVzKHN0YXR1czogQWxhcm1TdGF0dXNUeXBlKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgcGFydGlhbGx5VXBkYXRlZEFsYXJtOiBQYXJ0aWFsPElBbGFybT4gPSB7IGlkOiB0aGlzLnNlbGVjdGVkQWxhcm0uaWQsIHN0YXR1cyB9O1xuICAgIGF3YWl0IHRoaXMuYWxhcm1TZXJ2aWNlLnVwZGF0ZShwYXJ0aWFsbHlVcGRhdGVkQWxhcm0pO1xuICAgIGNvbnN0IHRyYW5zbGF0ZWRTdGF0dXNMYWJlbCA9IHRoaXMudHJhbnNsYXRlU2VydmljZS5pbnN0YW50KEFMQVJNX1NUQVRVU19MQUJFTFNbc3RhdHVzXSk7XG4gICAgdGhpcy5hbGVydFNlcnZpY2Uuc3VjY2VzcyhcbiAgICAgIHRoaXMudHJhbnNsYXRlU2VydmljZS5pbnN0YW50KGdldHRleHQoJ0FsYXJtIHN0YXR1cyBjaGFuZ2VkIHRvIHt7IHN0YXR1cyB9fScpLCB7XG4gICAgICAgIHN0YXR1czogdHJhbnNsYXRlZFN0YXR1c0xhYmVsLnRvVXBwZXJDYXNlKClcbiAgICAgIH0pXG4gICAgKTtcbiAgICB0aGlzLnNlbGVjdGVkQWxhcm0uc3RhdHVzID0gc3RhdHVzO1xuICAgIHRoaXMuYWxhcm1zVmlld1NlcnZpY2UudXBkYXRlQWxhcm1MaXN0KCk7XG4gIH1cblxuICAvKipcbiAgICogUmV0cmlldmVzIHRoZSBhdWRpdCBsb2cgYW5kIGFwcGVuZHMgdGhlIGxhc3QgYXVkaXQgcmVjb3JkIHRvIGl0LlxuICAgKlxuICAgKiBUaGlzIG1ldGhvZCBmZXRjaGVzIHRoZSBleGlzdGluZyBhdWRpdCBsb2cgZGF0YSBhbmQgbWFrZXMgYSBkZWVwIGNvcHkgb2YgaXQuIEl0IHRoZW5cbiAgICogcmV0cmlldmVzIHRoZSBsYXN0IGF1ZGl0IHJlY29yZCBhbmQgYXBwZW5kcyBpdCB0byB0aGUgY29waWVkIGF1ZGl0IGxvZyBkYXRhLiBUaGlzIGlzXG4gICAqIHVzZWZ1bCBmb3Igc2NlbmFyaW9zIHdoZXJlIHRoZSBtb3N0IHJlY2VudCBhdWRpdCByZWNvcmQgbmVlZHMgdG8gYmUgaW5jbHVkZWQgaW4gdGhlXG4gICAqIGV4aXN0aW5nIGF1ZGl0IGxvZyBkYXRhIChjYWxjdWxhdGluZyB0aGUgQ0xFQVJFRCBwZXJpb2QpLlxuICAgKlxuICAgKiBAcmV0dXJucyBBIHByb21pc2Ugb2YgYElSZXN1bHRMaXN0PElBdWRpdFJlY29yZD5gLCB3aGljaCBpbmNsdWRlcyB0aGVcbiAgICogICAgICAgICAgZXhpc3RpbmcgYXVkaXQgbG9nIGRhdGEgYWxvbmcgd2l0aCB0aGUgbGFzdCBhdWRpdCByZWNvcmQgYXBwZW5kZWQuXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBwcml2YXRlIGFzeW5jIGF1ZGl0TG9nV2l0aEZpcnN0UmVjb3JkKCk6IFByb21pc2U8SVJlc3VsdExpc3Q8SUF1ZGl0UmVjb3JkPj4ge1xuICAgIGNvbnN0IGV4aXN0aW5nRGF0YSA9IHRoaXMuYXVkaXRMb2c7XG4gICAgY29uc3QgY29waWVkRXhpc3RpbmdEYXRhID0gY2xvbmVEZWVwKGV4aXN0aW5nRGF0YSk7XG5cbiAgICBjb25zdCBsYXN0QXVkaXRSZWNvcmQgPSBhd2FpdCB0aGlzLnJlbG9hZEF1ZGl0TG9nKGZhbHNlKTtcbiAgICBjb25zdCBsYXN0UmVjb3JkID0gbGFzdEF1ZGl0UmVjb3JkLmRhdGFbbGFzdEF1ZGl0UmVjb3JkLmRhdGEubGVuZ3RoIC0gMV07XG4gICAgY29waWVkRXhpc3RpbmdEYXRhLmRhdGEucHVzaChsYXN0UmVjb3JkKTtcbiAgICByZXR1cm4gY29waWVkRXhpc3RpbmdEYXRhO1xuICB9XG5cbiAgcHJpdmF0ZSBzZXRBdWRpdExvZ3MoYXVkaXRMb2dzOiBJUmVzdWx0TGlzdDxJQXVkaXRSZWNvcmQ+KTogdm9pZCB7XG4gICAgdGhpcy5hdWRpdExvZyA9IGF1ZGl0TG9ncztcbiAgfVxuXG4gIHByaXZhdGUgdXBkYXRlTGFzdFVwZGF0ZWREYXRlKHVwZGF0ZWRBdWRpdFJlY29yZHM6IElBdWRpdFJlY29yZCk6IHZvaWQge1xuICAgIGlmICghdXBkYXRlZEF1ZGl0UmVjb3Jkcykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IHsgY3JlYXRpb25UaW1lIH0gPSB1cGRhdGVkQXVkaXRSZWNvcmRzO1xuICAgIHRoaXMubGFzdFVwZGF0ZWQgPSBjcmVhdGlvblRpbWU7XG4gIH1cblxuICBwcml2YXRlIGdldEFjdGl2ZVN0YXR1c01lc3NhZ2UodGltZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy50cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQoZ2V0dGV4dCgnQUNUSVZFYGFsYXJtYDogdHJpZ2dlcmVkIHt7YWxhcm1UaW1lRnJvbU5vd319JyksIHtcbiAgICAgIGFsYXJtVGltZUZyb21Ob3c6IHRoaXMucmVsYXRpdmVUaW1lLnRyYW5zZm9ybShuZXcgRGF0ZSh0aW1lKSlcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0QWNrbm93bGVkZ2VkU3RhdHVzTWVzc2FnZShzdGF0dXM6IEFsYXJtU3RhdHVzVHlwZSwgY2hhbmdlTG9nOiBJQXVkaXRSZWNvcmRbXSk6IHN0cmluZyB7XG4gICAgaWYgKGNoYW5nZUxvZy5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybiB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudChnZXR0ZXh0KCdBQ0tOT1dMRURHRURgYWxhcm1gJykpO1xuICAgIH1cblxuICAgIGNvbnN0IGFja25vd2xlZGdlZEJ5ID0gdGhpcy5hbGFybURldGFpbHNTZXJ2aWNlLmdldEFja25vd2xlZGdlZEJ5KHN0YXR1cywgY2hhbmdlTG9nKTtcbiAgICBjb25zdCBhY2tub3dsZWRnZVRpbWUgPSB0aGlzLmFsYXJtRGV0YWlsc1NlcnZpY2UuZ2V0QWNrbm93bGVkZ2VUaW1lKGNoYW5nZUxvZyk7XG5cbiAgICBpZiAoYWNrbm93bGVkZ2VkQnkpIHtcbiAgICAgIHJldHVybiB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudChcbiAgICAgICAgZ2V0dGV4dCgnQUNLTk9XTEVER0VEYGFsYXJtYCBieToge3thY2tCeX19IHt7YWNrVGltZUZyb21Ob3d9fScpLFxuICAgICAgICB7XG4gICAgICAgICAgYWNrQnk6IGFja25vd2xlZGdlZEJ5LFxuICAgICAgICAgIGFja1RpbWVGcm9tTm93OiB0aGlzLnJlbGF0aXZlVGltZS50cmFuc2Zvcm0obmV3IERhdGUoYWNrbm93bGVkZ2VUaW1lKSlcbiAgICAgICAgfVxuICAgICAgKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy50cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQoZ2V0dGV4dCgnQUNLTk9XTEVER0VEYGFsYXJtYCB7e2Fja1RpbWVGcm9tTm93fX0nKSwge1xuICAgICAgYWNrVGltZUZyb21Ob3c6IHRoaXMucmVsYXRpdmVUaW1lLnRyYW5zZm9ybShuZXcgRGF0ZShhY2tub3dsZWRnZVRpbWUpKVxuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRDbGVhcmVkU3RhdHVzTWVzc2FnZShhdWRpdExvZzogSUF1ZGl0UmVjb3JkW10pOiBzdHJpbmcge1xuICAgIGlmIChhdWRpdExvZy5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybiB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudChnZXR0ZXh0KCdDTEVBUkVEYGFsYXJtYCcpKTtcbiAgICB9XG5cbiAgICBjb25zdCBkaWZmZXJlbmNlSW5NcyA9IHRoaXMuY2FsY3VsYXRlQWxhcm1EdXJhdGlvbihhdWRpdExvZyk7XG5cbiAgICByZXR1cm4gdGhpcy50cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQoXG4gICAgICBnZXR0ZXh0KCdDTEVBUkVEYGFsYXJtYDogd2FzIGFjdGl2ZSBmb3Ige3thbGFybUR1cmF0aW9ufX0nKSxcbiAgICAgIHtcbiAgICAgICAgYWxhcm1EdXJhdGlvbjogdGhpcy5yZWxhdGl2ZVRpbWUudHJhbnNmb3JtKGRpZmZlcmVuY2VJbk1zLCB0cnVlKVxuICAgICAgfVxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogQ2FsY3VsYXRlcyB0aGUgZHVyYXRpb24gb2YgYW4gYWxhcm0gYmFzZWQgb24gYXVkaXQgbG9nIHJlY29yZHMuXG4gICAqXG4gICAqIFRoaXMgbWV0aG9kIGNvbXB1dGVzIHRoZSBkdXJhdGlvbiBvZiBhbiBhbGFybSBieSBmaW5kaW5nIHRoZSBkaWZmZXJlbmNlXG4gICAqIGJldHdlZW4gdGhlIHN0YXJ0IGFuZCBlbmQgdGltZXMgb2YgdGhlIGFsYXJtLiBUaGUgc3RhcnQgdGltZSBpcyBkZXRlcm1pbmVkXG4gICAqIGZyb20gdGhlIGxhc3QgcmVjb3JkIGluIHRoZSBhdWRpdCBsb2csIHVzaW5nIHRoZSBmaXJzdCBhdmFpbGFibGUgdGltZSBmaWVsZFxuICAgKiAoYGZpcnN0T2NjdXJyZW5jZVRpbWVgLCBgdGltZWAsIG9yIGBjcmVhdGlvblRpbWVgKS4gVGhlIGVuZCB0aW1lIGlzIG9idGFpbmVkXG4gICAqIGZyb20gdGhlIGBhbGFybURldGFpbHNTZXJ2aWNlYC5cbiAgICpcbiAgICogQHBhcmFtIGF1ZGl0TG9nIC0gQW4gYXJyYXkgb2YgYElBdWRpdFJlY29yZGAgb2JqZWN0cyByZXByZXNlbnRpbmcgdGhlIGF1ZGl0IGxvZyByZWNvcmRzLlxuICAgKiBAcmV0dXJucyBUaGUgZHVyYXRpb24gb2YgdGhlIGFsYXJtIGluIG1pbGxpc2Vjb25kcywgb3IgYG51bGxgIGlmIHRoZSBlbmQgdGltZSBpcyBub3QgYXZhaWxhYmxlLlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgcHJpdmF0ZSBjYWxjdWxhdGVBbGFybUR1cmF0aW9uKGF1ZGl0TG9nOiBJQXVkaXRSZWNvcmRbXSk6IG51bWJlciB8IG51bGwge1xuICAgIGNvbnN0IGZpcnN0QWxhcm0gPSBhdWRpdExvZ1thdWRpdExvZy5sZW5ndGggLSAxXTtcbiAgICBjb25zdCBzdGFydFRpbWUgPSBmaXJzdEFsYXJtLmZpcnN0T2NjdXJyZW5jZVRpbWUgfHwgZmlyc3RBbGFybS50aW1lIHx8IGZpcnN0QWxhcm0uY3JlYXRpb25UaW1lO1xuICAgIGNvbnN0IGVuZFRpbWUgPSB0aGlzLmFsYXJtRGV0YWlsc1NlcnZpY2UuZ2V0RW5kVGltZShhdWRpdExvZyk7XG5cbiAgICBpZiAoIWVuZFRpbWUpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGNvbnN0IHN0YXJ0VGltZVRvRGF0ZSA9IG5ldyBEYXRlKHN0YXJ0VGltZSk7XG4gICAgY29uc3QgZW5kVGltZVRvRGF0ZSA9IG5ldyBEYXRlKGVuZFRpbWUpO1xuXG4gICAgcmV0dXJuIGVuZFRpbWVUb0RhdGUuZ2V0VGltZSgpIC0gc3RhcnRUaW1lVG9EYXRlLmdldFRpbWUoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXRyaWV2ZXMgYSBsaXN0IG9mIGF1ZGl0IHJlY29yZHMgZm9yIGEgc2VsZWN0ZWQgYWxhcm0uXG4gICAqXG4gICAqIFRoaXMgbWV0aG9kIGZldGNoZXMgYXVkaXQgcmVjb3JkcyBiYXNlZCBvbiB0aGUgc3BlY2lmaWVkIHByb3BlcnRpZXMsIGluY2x1ZGluZ1xuICAgKiB0aGUgZGF0ZSwgcGFnZSBzaXplLCB3aGV0aGVyIHRvIHJldmVydCwgdGhlIHNvdXJjZSBhbGFybSBJRCwgYW5kIHdoZXRoZXIgdG8gaW5jbHVkZSB0b3RhbCBwYWdlcy5cbiAgICpcbiAgICogQHBhcmFtIGlzUmV2ZXJ0IC0gQSBib29sZWFuIGZsYWcgaW5kaWNhdGluZyB3aGV0aGVyIHRvIHJldHJpZXZlIGEgMTAwIChzZWUgUEFHRV9TSVpFKSByZWNvcmRzICh0cnVlKVxuICAgKiAgICAgICAgICAgICAgICAgICBvciBvbmx5IHJlY29yZCwgdGhhdCBjaHJvbm9sb2dpY2FsbHkgd2lsbCBiZSB0aGUgb2xkZXN0IG9uZSAoZmFsc2UpLiBEZWZhdWx0cyB0byB0cnVlLlxuICAgKiAgICAgICAgICAgICAgICAgICBJZiBzZXQgdG8gZmFsc2UsIGl0IHdpbGwgc2V0IFBBR0VfU0laRSB0byAxIGFuZCB0cmlnZ2VyIGEgbG9naWNcbiAgICogICAgICAgICAgICAgICAgICAgY29uY2F0ZW5hdGluZyBhIG1vc3QgcmVjZW50IHJlY29yZCB3aXRoIHRoZSB2ZXJ5IGZpcnN0IG9uZSB0b1xuICAgKiAgICAgICAgICAgICAgICAgICBjYWxjdWxhdGUgdGhlIGFsYXJtIGR1cmF0aW9uIChjaGFuZ2UgdG8gQ0xFQVJFRCBzdGF0dXMpLlxuICAgKiBAcmV0dXJucyBBIFByb21pc2UgdGhhdCByZXNvbHZlcyB0byBhbiBJUmVzdWx0TGlzdCBvZiBJQXVkaXRSZWNvcmQgb2JqZWN0cywgcmVwcmVzZW50aW5nIHRoZSBhdWRpdCByZWNvcmRzLlxuICAgKiBAYXN5bmNcbiAgICogQHByaXZhdGVcbiAgICovXG4gIHByaXZhdGUgYXN5bmMgZ2V0QWxhcm1BdWRpdFJlY29yZHMoaXNSZXZlcnQgPSB0cnVlKTogUHJvbWlzZTxJUmVzdWx0TGlzdDxJQXVkaXRSZWNvcmQ+PiB7XG4gICAgY29uc3QgcHJvcGVydGllcyA9IHtcbiAgICAgIGRhdGVUbzogbmV3IERhdGUoRGF0ZS5ub3coKSkudG9JU09TdHJpbmcoKSxcbiAgICAgIHBhZ2VTaXplOiBpc1JldmVydCA/IHRoaXMuUEFHRV9TSVpFIDogMSxcbiAgICAgIHJldmVydDogaXNSZXZlcnQsXG4gICAgICBzb3VyY2U6IHRoaXMuc2VsZWN0ZWRBbGFybS5pZCxcbiAgICAgIHdpdGhUb3RhbFBhZ2VzOiB0cnVlXG4gICAgfTtcblxuICAgIHJldHVybiBhd2FpdCB0aGlzLmF1ZGl0U2VydmljZS5saXN0KHByb3BlcnRpZXMpO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyB1cGRhdGVTdGF0dXNNZXNzYWdlKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIHN3aXRjaCAodGhpcy5zZWxlY3RlZEFsYXJtLnN0YXR1cykge1xuICAgICAgY2FzZSB0aGlzLkFDVElWRV9TVEFUVVNfVkFMVUU6XG4gICAgICAgIHRoaXMuc3RhdHVzTWVzc2FnZSA9IHRoaXMuZ2V0QWN0aXZlU3RhdHVzTWVzc2FnZSh0aGlzLnNlbGVjdGVkQWxhcm0udGltZSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSB0aGlzLkFDS05PV0xFREdFRF9TVEFUVVNfVkFMVUU6XG4gICAgICAgIHRoaXMuc3RhdHVzTWVzc2FnZSA9IHRoaXMuZ2V0QWNrbm93bGVkZ2VkU3RhdHVzTWVzc2FnZShcbiAgICAgICAgICB0aGlzLnNlbGVjdGVkQWxhcm0uc3RhdHVzIGFzIHVua25vd24gYXMgQWxhcm1TdGF0dXNUeXBlLFxuICAgICAgICAgIHRoaXMuYXVkaXRMb2cuZGF0YVxuICAgICAgICApO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgdGhpcy5DTEVBUkVEX1NUQVRVU19WQUxVRTpcbiAgICAgICAgaWYgKHRoaXMuaGFzUmVhY2hlZE9yRXhjZWVkZWRQYWdlU2l6ZUxpbWl0KCkpIHtcbiAgICAgICAgICB0aGlzLmV4dGVuZGVkQXVkaXRMb2dzID0gYXdhaXQgdGhpcy5hdWRpdExvZ1dpdGhGaXJzdFJlY29yZCgpO1xuICAgICAgICAgIHRoaXMuc3RhdHVzTWVzc2FnZSA9IHRoaXMuZ2V0Q2xlYXJlZFN0YXR1c01lc3NhZ2UodGhpcy5leHRlbmRlZEF1ZGl0TG9ncy5kYXRhKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5zdGF0dXNNZXNzYWdlID0gdGhpcy5nZXRDbGVhcmVkU3RhdHVzTWVzc2FnZSh0aGlzLmF1ZGl0TG9nLmRhdGEpO1xuICAgICAgICBicmVhaztcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGhhc1JlYWNoZWRPckV4Y2VlZGVkUGFnZVNpemVMaW1pdCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5hdWRpdExvZy5kYXRhLmxlbmd0aCA+PSB0aGlzLlBBR0VfU0laRTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGlzIG1ldGhvZCBjaGVja3MgaWYgdGhlIGN1cnJlbnQgVVJMIGluY2x1ZGVzIHRoZSBjb250ZXh0IHBhdGggb2YgdGhlXG4gICAqIGRldmljZSBtYW5hZ2VtZW50IGFwcGxpY2F0aW9uLCBpbmRpY2F0aW5nIHdoZXRoZXIgdGhlIHVzZXIgaXMgaW4gdGhlXG4gICAqIGRldmljZSBtYW5hZ2VtZW50IHZpZXcuXG4gICAqXG4gICAqIEByZXR1cm5zIFJldHVybnMgYHRydWVgIGlmIHRoZSBjdXJyZW50IHZpZXcgaXMgaW4gZGV2aWNlIG1hbmFnZW1lbnQsIG90aGVyd2lzZSwgcmV0dXJucyBgZmFsc2VgLlxuICAgKi9cbiAgcHJpdmF0ZSBpc0RldmljZU1hbmFnZW1lbnRWaWV3KCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB3aW5kb3cubG9jYXRpb24uaHJlZi5pbmNsdWRlcyh0aGlzLnVzZXJEZXZpY2VNYW5hZ2VtZW50QXBwLmNvbnRleHRQYXRoKTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0Q3VzdG9tRnJhZ21lbnRzKHNlbGVjdGVkQWxhcm06IElBbGFybSk6IEN1c3RvbUZyYWdtZW50IHtcbiAgICBsZXQgY3VzdG9tUHJvcGVydGllcyA9IG51bGw7XG4gICAgZm9yIChjb25zdCBrZXkgaW4gc2VsZWN0ZWRBbGFybSkge1xuICAgICAgaWYgKCFBTEFSTV9ERUZBVUxUX1BST1BFUlRJRVMuZmluZChrID0+IGsgPT09IGtleSkpIHtcbiAgICAgICAgaWYgKCFjdXN0b21Qcm9wZXJ0aWVzKSB7XG4gICAgICAgICAgY3VzdG9tUHJvcGVydGllcyA9IHt9O1xuICAgICAgICB9XG4gICAgICAgIGN1c3RvbVByb3BlcnRpZXNba2V5XSA9IHNlbGVjdGVkQWxhcm1ba2V5XTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gY3VzdG9tUHJvcGVydGllcztcbiAgfVxufVxuIiwiPGRpdiBjbGFzcz1cImQtZmxleCByb3cgdGlnaHQtZ3JpZCBmbGV4LXdyYXAgYS1pLXN0cmV0Y2hcIj5cbiAgPGRpdiBjbGFzcz1cImNvbC14cy0xMiBjb2wtbWQtNiBkLWZsZXggcC1iLThcIj5cbiAgICA8ZGl2IGNsYXNzPVwiYm9yZGVyLWFsbCBmaXQtdyBkLWZsZXhcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJwLThcIj5cbiAgICAgICAgPGlcbiAgICAgICAgICBjbGFzcz1cImljb24tMjQgdGV4dC1ncmF5LWRhcmsgbS10LTQgYzh5LWljb25cIlxuICAgICAgICAgIFtjOHlJY29uXT1cInNlbGVjdGVkQWxhcm0uc3RhdHVzIHwgQWxhcm1TdGF0dXNUb0ljb25cIlxuICAgICAgICA+PC9pPlxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzPVwicC10LTggcC1iLTggcC1yLThcIj5cbiAgICAgICAgPHAgY2xhc3M9XCJ0ZXh0LWxhYmVsLXNtYWxsIG0tYi0wIG0tci04XCI+e3sgJ1N0YXR1cycgfCB0cmFuc2xhdGUgfX08L3A+XG4gICAgICAgIDxwIGNsYXNzPVwic21hbGxcIj57eyBzdGF0dXNNZXNzYWdlIH19PC9wPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuICA8ZGl2IGNsYXNzPVwiY29sLXhzLTEyIGNvbC1tZC02IGQtZmxleCBwLWItOFwiPlxuICAgIDxkaXYgY2xhc3M9XCJib3JkZXItYWxsIGZpdC13IGQtZmxleFwiPlxuICAgICAgPGRpdiBjbGFzcz1cInAtOFwiPlxuICAgICAgICA8aVxuICAgICAgICAgIGNsYXNzPVwiaWNvbi0yNCB0ZXh0LWdyYXktZGFyayBtLXQtNCBzdHJva2VkLWljb24gc3RhdHVzXCJcbiAgICAgICAgICBbYzh5SWNvbl09XCJzZWxlY3RlZEFsYXJtLnNldmVyaXR5IHwgQWxhcm1TZXZlcml0eVRvSWNvblwiXG4gICAgICAgICAgW25nQ2xhc3NdPVwic2VsZWN0ZWRBbGFybS5zZXZlcml0eT8udG9TdHJpbmcoKSB8IGxvd2VyY2FzZVwiXG4gICAgICAgID48L2k+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9XCJwLXQtOCBwLWItOCBwLXItOFwiPlxuICAgICAgICA8cCBjbGFzcz1cInRleHQtbGFiZWwtc21hbGwgbS1iLTAgbS1yLThcIj57eyAnU2V2ZXJpdHknIHwgdHJhbnNsYXRlIH19PC9wPlxuICAgICAgICA8cCBjbGFzcz1cInNtYWxsXCI+e3sgU0VWRVJJVFlfTEFCRUxTW3NlbGVjdGVkQWxhcm0uc2V2ZXJpdHldIHwgdHJhbnNsYXRlIH19PC9wPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuICA8ZGl2IGNsYXNzPVwiY29sLXhzLTEyIGNvbC1tZC02IGQtZmxleCBwLWItOFwiPlxuICAgIDxkaXYgY2xhc3M9XCJib3JkZXItYWxsIGZpdC13IGQtZmxleFwiPlxuICAgICAgPGRpdiBjbGFzcz1cInAtOFwiPlxuICAgICAgICA8aVxuICAgICAgICAgIGNsYXNzPVwiaWNvbi0yNCB0ZXh0LWdyYXktZGFyayBtLXQtNCBzdHJva2VkLWljb24gc3RhdHVzXCJcbiAgICAgICAgICBjOHlJY29uPVwiY29udGFjdGxlc3MtcGF5bWVudFwiXG4gICAgICAgID48L2k+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9XCJwLXQtOCBwLWItOCBwLXItOFwiPlxuICAgICAgICA8cCBjbGFzcz1cInRleHQtbGFiZWwtc21hbGwgbS1iLTAgbS1yLThcIj57eyAnU291cmNlJyB8IHRyYW5zbGF0ZSB9fTwvcD5cbiAgICAgICAgPHAgY2xhc3M9XCJzbWFsbFwiPlxuICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgIGNsYXNzPVwiYnRuLWxpbmsgdGV4dC1tdXRlZCBwLTAgbS1yLThcIlxuICAgICAgICAgICAgdGl0bGU9XCJ7eyBzZWxlY3RlZEFsYXJtLnNvdXJjZS5uYW1lIH19XCJcbiAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgcm91dGVyTGluaz1cInt7IHNlbGVjdGVkQWxhcm1NTyB8IGFzc2V0TGluayB9fVwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPHNtYWxsIGNsYXNzPVwiaWNvbi1mbGV4XCI+XG4gICAgICAgICAgICAgIDxpIGM4eUljb249XCJleGNoYW5nZVwiPjwvaT5cbiAgICAgICAgICAgICAge3sgc2VsZWN0ZWRBbGFybS5zb3VyY2UubmFtZSB8fCBzZWxlY3RlZEFsYXJtLnNvdXJjZS5pZCB9fVxuICAgICAgICAgICAgPC9zbWFsbD5cbiAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwic2hvd1NvdXJjZU5hdmlnYXRpb25MaW5rXCI+XG4gICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgIGNsYXNzPVwiYnRuLWxpbmsgcC0wXCJcbiAgICAgICAgICAgICAgdGl0bGU9XCJ7e1xuICAgICAgICAgICAgICAgIGxpbmtUaXRsZVxuICAgICAgICAgICAgICAgICAgfCB0cmFuc2xhdGU6IHsgYXBwTmFtZTogdXNlckRldmljZU1hbmFnZW1lbnRBcHAgfCBodW1hbml6ZUFwcE5hbWUgfCBhc3luYyB9XG4gICAgICAgICAgICAgIH19XCJcbiAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgIChjbGljayk9XCJnb1RvQWxhcm1Tb3VyY2Uoc2VsZWN0ZWRBbGFybS5pZClcIlxuICAgICAgICAgICAgICBkYXRhLWN5PVwiYWxhcm0tZGV0YWlscy1kZXZpY2UtbWFuYWdlbWVudC1saW5rXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAge3sgdXNlckRldmljZU1hbmFnZW1lbnRBcHAgfCBodW1hbml6ZUFwcE5hbWUgfCBhc3luYyB9fVxuICAgICAgICAgICAgICA8aSBjOHlJY29uPVwiZXh0ZXJuYWwtbGlua1wiPjwvaT5cbiAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8L3A+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG4gIDxkaXYgY2xhc3M9XCJjb2wteHMtMTIgY29sLW1kLTYgZC1mbGV4IHAtYi04XCI+XG4gICAgPGRpdiBjbGFzcz1cImJvcmRlci1hbGwgZml0LXcgZC1mbGV4XCI+XG4gICAgICA8ZGl2IGNsYXNzPVwicC04XCI+XG4gICAgICAgIDxzcGFuXG4gICAgICAgICAgY2xhc3M9XCJjaXJjbGUtaWNvbi13cmFwcGVyXCJcbiAgICAgICAgICBbbmdTdHlsZV09XCJ7ICdiYWNrZ3JvdW5kLWNvbG9yJzogdHlwZUNvbG9yIH1cIlxuICAgICAgICA+XG4gICAgICAgICAgPGlcbiAgICAgICAgICAgIGNsYXNzPVwic3Ryb2tlZC1pY29uXCJcbiAgICAgICAgICAgIGM4eUljb249XCJiZWxsXCJcbiAgICAgICAgICA+PC9pPlxuICAgICAgICA8L3NwYW4+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9XCJwLXQtOCBwLWItOCBwLXItOCBtaW4td2lkdGgtMFwiPlxuICAgICAgICA8cCBjbGFzcz1cInRleHQtbGFiZWwtc21hbGwgbS1iLTAgbS1yLThcIj57eyAnVHlwZScgfCB0cmFuc2xhdGUgfX08L3A+XG4gICAgICAgIDxwXG4gICAgICAgICAgY2xhc3M9XCJzbWFsbCB0ZXh0LXRydW5jYXRlXCJcbiAgICAgICAgICB0aXRsZT1cInt7IHNlbGVjdGVkQWxhcm0udHlwZSB9fVwiXG4gICAgICAgID5cbiAgICAgICAgICA8Y29kZT57eyBzZWxlY3RlZEFsYXJtLnR5cGUgfX08L2NvZGU+XG4gICAgICAgIDwvcD5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cblxuICA8ZGl2IGNsYXNzPVwiY29sLXhzLTEyIGNvbC1tZC0xMiBwLWItMTZcIj5cbiAgICA8ZGl2IGNsYXNzPVwiYm9yZGVyLWFsbCBmaXQtdyBkLWZsZXhcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJwLThcIj5cbiAgICAgICAgPGlcbiAgICAgICAgICBjbGFzcz1cImljb24tMjQgdGV4dC1ncmF5LWRhcmsgbS10LTRcIlxuICAgICAgICAgIGM4eUljb249XCJjYWxlbmRhclwiXG4gICAgICAgID48L2k+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9XCJwLXQtOCBwLWItMCBwLXItOCBmbGV4LWdyb3dcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImNvbnRlbnQtZmxleC01MFwiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtNCBwLWItOFwiPlxuICAgICAgICAgICAgPHAgY2xhc3M9XCJ0ZXh0LWxhYmVsLXNtYWxsIG0tYi0wIG0tci04XCI+e3sgJ0xhc3QgdXBkYXRlZCcgfCB0cmFuc2xhdGUgfX08L3A+XG4gICAgICAgICAgICA8cCBjbGFzcz1cInNtYWxsXCI+XG4gICAgICAgICAgICAgIHt7IGxhc3RVcGRhdGVkIHwgYzh5RGF0ZTogJ21lZGl1bScgfX1cbiAgICAgICAgICAgIDwvcD5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICBjbGFzcz1cImNvbC00IHAtYi04XCJcbiAgICAgICAgICAgICpuZ0lmPVwic2VsZWN0ZWRBbGFybS5jb3VudCA+IDFcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxwIGNsYXNzPVwidGV4dC1sYWJlbC1zbWFsbCBtLWItMCBtLXItOFwiPnt7ICdOdW1iZXIgb2Ygb2NjdXJyZW5jZXMnIHwgdHJhbnNsYXRlIH19PC9wPlxuICAgICAgICAgICAgPHA+XG4gICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiYmFkZ2UgYmFkZ2UtaW5mb1wiPnt7IHNlbGVjdGVkQWxhcm0uY291bnQgfX08L3NwYW4+XG4gICAgICAgICAgICA8L3A+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGRpdlxuICAgICAgICAgICAgY2xhc3M9XCJjb2wtNCBwLWItOFwiXG4gICAgICAgICAgICAqbmdJZj1cInNlbGVjdGVkQWxhcm0uY291bnQgPiAxXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8cCBjbGFzcz1cInRleHQtbGFiZWwtc21hbGwgbS1iLTAgbS1yLThcIj57eyAnRmlyc3Qgb2NjdXJyZW5jZScgfCB0cmFuc2xhdGUgfX08L3A+XG4gICAgICAgICAgICA8cCBjbGFzcz1cInNtYWxsXCI+XG4gICAgICAgICAgICAgIHt7IHNlbGVjdGVkQWxhcm0uY3JlYXRpb25UaW1lIHwgYzh5RGF0ZTogJ21lZGl1bScgfX1cbiAgICAgICAgICAgIDwvcD5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG5cbiAgPGRpdlxuICAgIGNsYXNzPVwiY29sLXhzLTEyIGNvbC1tZC0xMiBwLWItMTZcIlxuICAgICpuZ0lmPVwiY3VzdG9tRnJhZ21lbnRzXCJcbiAgPlxuICAgIDxkaXYgY2xhc3M9XCJib3JkZXItYWxsIGZpdC13IGQtZmxleFwiPlxuICAgICAgPGRpdiBjbGFzcz1cInAtOFwiPlxuICAgICAgICA8aVxuICAgICAgICAgIGNsYXNzPVwiaWNvbi0yNCB0ZXh0LWdyYXktZGFyayBtLXQtNFwiXG4gICAgICAgICAgYzh5SWNvbj1cIm91dGdvaW5nLWRhdGFcIlxuICAgICAgICA+PC9pPlxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2XG4gICAgICAgIGNsYXNzPVwicC10LTggcC1iLTAgcC1yLTggZmxleC1ncm93XCJcbiAgICAgICAgZGF0YS1jeT1cImFsYXJtLWRldGFpbHMtY3VzdG9tLWRhdGFcIlxuICAgICAgPlxuICAgICAgICA8cCBjbGFzcz1cInRleHQtbGFiZWwtc21hbGwgbS1iLTQgbS1yLThcIj57eyAnQ3VzdG9tIGRhdGEnIHwgdHJhbnNsYXRlIH19PC9wPlxuICAgICAgICA8cHJlPjxjb2RlPnt7IGN1c3RvbUZyYWdtZW50cyB8IGpzb24gfX08L2NvZGU+PC9wcmU+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG48L2Rpdj5cblxuPGRpdiBjbGFzcz1cImQtZmxleCBmbGV4LXdyYXAgZ2FwLThcIj5cbiAgPGJ1dHRvblxuICAgIGNsYXNzPVwiYnRuIGJ0bi1kZWZhdWx0IGJ0bi1zbVwiXG4gICAgW3RpdGxlXT1cIidSZWxvYWQgYXVkaXQgbG9ncycgfCB0cmFuc2xhdGVcIlxuICAgIHR5cGU9XCJzdWJtaXRcIlxuICAgIChjbGljayk9XCJyZWxvYWRBdWRpdExvZyh0cnVlLCB0cnVlKVwiXG4gID5cbiAgICA8aVxuICAgICAgYzh5SWNvbj1cInJlZnJlc2hcIlxuICAgICAgW25nQ2xhc3NdPVwieyAnaWNvbi1zcGluJzogaXNMb2FkaW5nIH1cIlxuICAgID48L2k+XG4gICAge3sgJ1JlbG9hZCBhdWRpdCBsb2dzJyB8IHRyYW5zbGF0ZSB9fVxuICA8L2J1dHRvbj5cblxuICA8YnV0dG9uXG4gICAgY2xhc3M9XCJidG4gYnRuLWRlZmF1bHQgYnRuLXNtXCJcbiAgICBbdGl0bGVdPVwiXG4gICAgICBzZWxlY3RlZEFsYXJtLnN0YXR1cyAhPT0gQUNLTk9XTEVER0VEX1NUQVRVU19WQUxVRVxuICAgICAgICA/IChBQ0tOT1dMRURHRV9MQUJFTCB8IHRyYW5zbGF0ZSlcbiAgICAgICAgOiAoUkVBQ1RJVkFURV9MQUJFTCB8IHRyYW5zbGF0ZSlcbiAgICBcIlxuICAgIHR5cGU9XCJzdWJtaXRcIlxuICAgIChjbGljayk9XCJcbiAgICAgIG9uVXBkYXRlRGV0YWlscyhcbiAgICAgICAgc2VsZWN0ZWRBbGFybS5zdGF0dXMgIT09IEFDS05PV0xFREdFRF9TVEFUVVNfVkFMVUVcbiAgICAgICAgICA/IEFDS05PV0xFREdFRF9TVEFUVVNfVkFMVUVcbiAgICAgICAgICA6IEFDVElWRV9TVEFUVVNfVkFMVUVcbiAgICAgIClcbiAgICBcIlxuICAgIFtkaXNhYmxlZF09XCJzZWxlY3RlZEFsYXJtLnN0YXR1cyA9PT0gQ0xFQVJFRF9TVEFUVVNfVkFMVUUgfHwgaXNBbGFybVN0YXR1c0NoYW5naW5nXCJcbiAgPlxuICAgIDxpXG4gICAgICBbYzh5SWNvbl09XCJzZWxlY3RlZEFsYXJtLnN0YXR1cyAhPT0gQUNLTk9XTEVER0VEX1NUQVRVU19WQUxVRSA/IEJFTExfU0xBU0hfSUNPTiA6IEJFTExfSUNPTlwiXG4gICAgPjwvaT5cbiAgICB7e1xuICAgICAgc2VsZWN0ZWRBbGFybS5zdGF0dXMgIT09IEFDS05PV0xFREdFRF9TVEFUVVNfVkFMVUVcbiAgICAgICAgPyAoQUNLTk9XTEVER0VfTEFCRUwgfCB0cmFuc2xhdGUpXG4gICAgICAgIDogKFJFQUNUSVZBVEVfTEFCRUwgfCB0cmFuc2xhdGUpXG4gICAgfX1cbiAgPC9idXR0b24+XG5cbiAgPGJ1dHRvblxuICAgIGNsYXNzPVwiYnRuIGJ0bi1kZWZhdWx0IGJ0bi1zbVwiXG4gICAgW3RpdGxlXT1cIidDcmVhdGUgc21hcnQgcnVsZScgfCB0cmFuc2xhdGVcIlxuICAgIHR5cGU9XCJzdWJtaXRcIlxuICAgICpuZ0lmPVwiaXNDcmVhdGVTbWFydFJ1bGVzQnV0dG9uQXZhaWxhYmxlXCJcbiAgICAoY2xpY2spPVwiY3JlYXRlU21hcnRSdWxlKClcIlxuICA+XG4gICAgPGkgYzh5SWNvbj1cImM4eS1pY29uIGM4eS1pY29uLXNtYXJ0LXJ1bGVzXCI+PC9pPlxuICAgIHt7ICdDcmVhdGUgc21hcnQgcnVsZScgfCB0cmFuc2xhdGUgfX1cbiAgPC9idXR0b24+XG4gIDxidXR0b25cbiAgICBjbGFzcz1cImJ0biBidG4tZGVmYXVsdCBidG4tc21cIlxuICAgIFt0aXRsZV09XCInQ2xlYXJgYWxhcm1gJyB8IHRyYW5zbGF0ZVwiXG4gICAgdHlwZT1cInN1Ym1pdFwiXG4gICAgKGNsaWNrKT1cIm9uVXBkYXRlRGV0YWlscyhDTEVBUkVEX1NUQVRVU19WQUxVRSlcIlxuICAgIFtkaXNhYmxlZF09XCJzZWxlY3RlZEFsYXJtLnN0YXR1cyA9PT0gQ0xFQVJFRF9TVEFUVVNfVkFMVUVcIlxuICA+XG4gICAgPGkgYzh5SWNvbj1cImM4eS1hbGVydC1pZGxlXCI+PC9pPlxuICAgIHt7ICdDbGVhcmBhbGFybWAnIHwgdHJhbnNsYXRlIH19XG4gIDwvYnV0dG9uPlxuXG4gIDxidXR0b25cbiAgICAqbmdGb3I9XCJsZXQgYnV0dG9uIG9mIHNlbGVjdGVkQWxhcm0gfCBhbGFybURldGFpbHNCdXR0b246IHNlbGVjdGVkQWxhcm1NTyB8IGFzeW5jXCJcbiAgICBjbGFzcz1cImJ0biBidG4tZGVmYXVsdCBidG4tc21cIlxuICAgIFtuZ0NsYXNzXT1cImJ1dHRvbi5hZGRpdGlvbmFsQnV0dG9uQ2xhc3Nlc1wiXG4gICAgW3RpdGxlXT1cImJ1dHRvbi50aXRsZSB8IHRyYW5zbGF0ZVwiXG4gICAgdHlwZT1cImJ1dHRvblwiXG4gICAgKGNsaWNrKT1cImRldGFpbHNCdXR0b25BY3Rpb24oYnV0dG9uLCBzZWxlY3RlZEFsYXJtKVwiXG4gICAgW2Rpc2FibGVkXT1cImJ1dHRvbi5kaXNhYmxlZFwiXG4gID5cbiAgICA8aSBbbmdDbGFzc109XCJidXR0b24uYWRkaXRpb25hbEljb25DbGFzc2VzXCIgW2M4eUljb25dPVwiYnV0dG9uLmljb25cIj48L2k+XG4gICAgPHNwYW4gKm5nSWY9XCJidXR0b24ubGFiZWxcIj57eyBidXR0b24ubGFiZWwgfCB0cmFuc2xhdGUgfX08L3NwYW4+XG4gIDwvYnV0dG9uPlxuPC9kaXY+XG5cbjxuZy10ZW1wbGF0ZSAjbm9BdWRpdExvZ0F2YWlsYWJsZT5cbiAgPGRpdiBjbGFzcz1cInAtMTZcIj5cbiAgICA8Yzh5LXVpLWVtcHR5LXN0YXRlXG4gICAgICBbaWNvbl09XCInYXJjaGl2ZSdcIlxuICAgICAgW3RpdGxlXT1cIidObyBhdWRpdCBsb2dzIGZvdW5kLicgfCB0cmFuc2xhdGVcIlxuICAgICAgW2hvcml6b250YWxdPVwidHJ1ZVwiXG4gICAgPjwvYzh5LXVpLWVtcHR5LXN0YXRlPlxuICA8L2Rpdj5cbjwvbmctdGVtcGxhdGU+XG5cbjxkaXYgY2xhc3M9XCJsZWdlbmQgZm9ybS1ibG9ja1wiPnt7ICdBdWRpdCBsb2dzJyB8IHRyYW5zbGF0ZSB9fTwvZGl2PlxuXG48bmctY29udGFpbmVyICpuZ0lmPVwiaXNMb2FkaW5nIHx8IGF1ZGl0TG9nPy5kYXRhLmxlbmd0aDsgZWxzZSBub0F1ZGl0TG9nQXZhaWxhYmxlXCI+XG4gIDxjOHktbG9hZGluZyAqbmdJZj1cImlzTG9hZGluZ1wiPjwvYzh5LWxvYWRpbmc+XG5cbiAgPGM4eS1saXN0LWdyb3VwXG4gICAgZGF0YS1jeT1cImM4eS1hbGFybXMtZGV0YWlscy0tYXVkaXQtbG9nc1wiXG4gICAgKm5nSWY9XCIhaXNMb2FkaW5nXCJcbiAgPlxuICAgIDxjOHktbGktdGltZWxpbmUgKmM4eUZvcj1cImxldCBsb2cgb2YgYXVkaXRMb2c7IGxvYWRNb3JlOiAnaGlkZGVuJ1wiPlxuICAgICAge3sgbG9nLmNyZWF0aW9uVGltZSB8IGRhdGU6ICdtZWRpdW1EYXRlJyB9fVxuICAgICAge3sgbG9nLmNyZWF0aW9uVGltZSB8IGRhdGU6ICdtZWRpdW1UaW1lJyB9fVxuICAgICAgPGM4eS1saT5cbiAgICAgICAgPGM4eS1saS1ib2R5PlxuICAgICAgICAgIDxwIGNsYXNzPVwidGV4dC10cnVuY2F0ZS13cmFwIHNlcGFyYXRvci1ib3R0b20gcC1iLTRcIj5cbiAgICAgICAgICAgIHt7IGxvZyB8IGF1ZGl0Q2hhbmdlc01lc3NhZ2UgfX1cbiAgICAgICAgICA8L3A+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImM4eS1saXN0X19pdGVtX19mb290ZXJcIj5cbiAgICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAgIGNsYXNzPVwibS1yLTE2IHNtYWxsXCJcbiAgICAgICAgICAgICAgKm5nSWY9XCJsb2cudXNlclwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidGV4dC1sYWJlbC1zbWFsbFwiPlxuICAgICAgICAgICAgICAgIHt7ICdieWB1c2VyYCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICB7eyBsb2cudXNlciB9fVxuICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJzbWFsbFwiPlxuICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInRleHQtbGFiZWwtc21hbGxcIj5cbiAgICAgICAgICAgICAgICB7eyAnZGV2aWNlIHRpbWUnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAge3sgbG9nLnRpbWUgfCBjOHlEYXRlOiAnbWVkaXVtJyB9fVxuICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2M4eS1saS1ib2R5PlxuICAgICAgPC9jOHktbGk+XG4gICAgPC9jOHktbGktdGltZWxpbmU+XG4gIDwvYzh5LWxpc3QtZ3JvdXA+XG48L25nLWNvbnRhaW5lcj5cbiJdfQ==
351
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWxhcm0tZGV0YWlscy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9hbGFybXMvYWxhcm0tZGV0YWlscy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi9hbGFybXMvYWxhcm0tZGV0YWlscy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBYSxRQUFRLEVBQWlCLE1BQU0sZUFBZSxDQUFDO0FBQ3JGLE9BQU8sRUFDTCxtQkFBbUIsRUFDbkIsV0FBVyxFQUNYLFlBQVksRUFFWixZQUFZLEVBTVosZ0JBQWdCLEVBQ2hCLGVBQWUsRUFDaEIsTUFBTSxhQUFhLENBQUM7QUFDckIsT0FBTyxFQUNMLFlBQVksRUFDWixlQUFlLEVBQ2YsWUFBWSxFQUNaLGdCQUFnQixFQUNoQixPQUFPLEVBQ1IsTUFBTSxxQkFBcUIsQ0FBQztBQUM3QixPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUN2RCxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBQ3RDLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQzlELE9BQU8sRUFDTCx3QkFBd0IsRUFDeEIsaUJBQWlCLEVBR2xCLE1BQU0sZ0JBQWdCLENBQUM7QUFDeEIsT0FBTyxFQUFFLDJCQUEyQixFQUFFLE1BQU0sbUNBQW1DLENBQUM7QUFDaEYsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7Ozs7Ozs7Ozs7Ozs7O0FBTTFELE1BQU0sT0FBTyxxQkFBcUI7SUFzRWhDLFlBQ1UsbUJBQXdDLEVBQ3hDLFlBQTBCLEVBQzFCLFlBQTBCLEVBQzFCLFFBQXlCLEVBQ3pCLFlBQTBCLEVBQzFCLFlBQThCLEVBQ2xCLDJCQUF3RCxFQUNwRSxnQkFBa0MsRUFDbEMsZ0JBQWtDLEVBQ2xDLGlCQUFvQyxFQUNwQyxZQUEwQjtRQVYx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YW5nZXMsIE9wdGlvbmFsLCBTaW1wbGVDaGFuZ2VzIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge1xuICBBTEFSTV9TVEFUVVNfTEFCRUxTLFxuICBBbGFybVN0YXR1cyxcbiAgQWxhcm1TZXJ2aWNlLFxuICBBbGFybVN0YXR1c1R5cGUsXG4gIEF1ZGl0U2VydmljZSxcbiAgSUFsYXJtLFxuICBJQXBwbGljYXRpb24sXG4gIElBdWRpdFJlY29yZCxcbiAgSU1hbmFnZWRPYmplY3QsXG4gIElSZXN1bHRMaXN0LFxuICBJbnZlbnRvcnlTZXJ2aWNlLFxuICBTRVZFUklUWV9MQUJFTFNcbn0gZnJvbSAnQGM4eS9jbGllbnQnO1xuaW1wb3J0IHtcbiAgQWxlcnRTZXJ2aWNlLFxuICBBcHBTdGF0ZVNlcnZpY2UsXG4gIENvbG9yU2VydmljZSxcbiAgUmVsYXRpdmVUaW1lUGlwZSxcbiAgZ2V0dGV4dFxufSBmcm9tICdAYzh5L25neC1jb21wb25lbnRzJztcbmltcG9ydCB7IFRyYW5zbGF0ZVNlcnZpY2UgfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJztcbmltcG9ydCB7IGNsb25lRGVlcCB9IGZyb20gJ2xvZGFzaC1lcyc7XG5pbXBvcnQgeyBBbGFybURldGFpbHNTZXJ2aWNlIH0gZnJvbSAnLi9hbGFybS1kZXRhaWxzLnNlcnZpY2UnO1xuaW1wb3J0IHtcbiAgQUxBUk1fREVGQVVMVF9QUk9QRVJUSUVTLFxuICBBTEFSTV9TVEFUVVNfSUNPTixcbiAgQWxhcm1EZXRhaWxzQnV0dG9uLFxuICBDdXN0b21GcmFnbWVudFxufSBmcm9tICcuL2FsYXJtcy5tb2RlbCc7XG5pbXBvcnQgeyBOZzFTbWFydFJ1bGVzVXBncmFkZVNlcnZpY2UgfSBmcm9tICcuL25nMS1zbWFydC1ydWxlcy11cGdyYWRlLnNlcnZpY2UnO1xuaW1wb3J0IHsgQWxhcm1zVmlld1NlcnZpY2UgfSBmcm9tICcuL2FsYXJtcy12aWV3LnNlcnZpY2UnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdjOHktYWxhcm0tZGV0YWlscycsXG4gIHRlbXBsYXRlVXJsOiAnLi9hbGFybS1kZXRhaWxzLmNvbXBvbmVudC5odG1sJ1xufSlcbmV4cG9ydCBjbGFzcyBBbGFybURldGFpbHNDb21wb25lbnQgaW1wbGVtZW50cyBPbkNoYW5nZXMge1xuICBASW5wdXQoKSBzZWxlY3RlZEFsYXJtOiBJQWxhcm07XG5cbiAgcmVhZG9ubHkgQUNLTk9XTEVER0VEX1NUQVRVU19WQUxVRSA9IEFsYXJtU3RhdHVzLkFDS05PV0xFREdFRDtcbiAgcmVhZG9ubHkgQUNUSVZFX1NUQVRVU19WQUxVRSA9IEFsYXJtU3RhdHVzLkFDVElWRTtcbiAgcmVhZG9ubHkgQ0xFQVJFRF9TVEFUVVNfVkFMVUUgPSBBbGFybVN0YXR1cy5DTEVBUkVEO1xuICByZWFkb25seSBBQ0tOT1dMRURHRV9MQUJFTCA9IGdldHRleHQoJ0Fja25vd2xlZGdlJyk7XG4gIHJlYWRvbmx5IFJFQUNUSVZBVEVfTEFCRUwgPSBnZXR0ZXh0KCdSZWFjdGl2YXRlJyk7XG4gIHJlYWRvbmx5IFNFVkVSSVRZX0xBQkVMUyA9IFNFVkVSSVRZX0xBQkVMUztcbiAgcmVhZG9ubHkgQkVMTF9TTEFTSF9JQ09OID0gQUxBUk1fU1RBVFVTX0lDT04uQkVMTF9TTEFTSDtcbiAgcmVhZG9ubHkgQkVMTF9JQ09OID0gQUxBUk1fU1RBVFVTX0lDT04uQkVMTDtcblxuICAvKipcbiAgICogUmVwcmVzZW50cyBhIERldmljZSBNYW5hZ2VtZW50IGFwcGxpY2F0aW9uIHVzZWQgYnkgdGhlIHVzZXIuXG4gICAqIERldGVybWluZXMgdGhlIGFjY3VyYXRlIG5hbWUgYW5kIGNvbnRleHQgcGF0aCByZXF1aXJlZCBmb3IgbmF2aWdhdGluZyB0byBhbGFybXMgb2YgdGhlIGN1cnJlbnQgZGV2aWNlXG4gICAqL1xuICB1c2VyRGV2aWNlTWFuYWdlbWVudEFwcDogSUFwcGxpY2F0aW9uO1xuICAvKipcbiAgICogTWFuYWdlcyB0aGUgdmlzaWJpbGl0eSBvZiB0aGUgbmF2aWdhdGlvbiBsaW5rLlxuICAgKiBJZiBzZXQgdG8gdHJ1ZSwgdGhlIGxpbmsgaXMgdmlzaWJsZSwgb3RoZXJ3aXNlLCBpdCByZW1haW5zIGhpZGRlbi5cbiAgICovXG4gIHNob3dTb3VyY2VOYXZpZ2F0aW9uTGluayA9IGZhbHNlO1xuICByZWFkb25seSBsaW5rVGl0bGUgPSBnZXR0ZXh0KCdPcGVuIGluIHt7IGFwcE5hbWUgfX0nKTtcbiAgLyoqXG4gICAqIENvbnRhaW5zIGF1ZGl0IGxvZ3MsIGluY2x1ZGluZyB0aGUgdmVyeSBmaXJzdCBhdWRpdCBsb2cgcmVjb3JkIGluIHRoZSBhbGFybXMnIGhpc3RvcnkuXG4gICAqIFRoaXMgZW5zdXJlcyB0aGF0IHRoZSBoaXN0b3JpY2FsIHN0YXJ0aW5nIHBvaW50IG9mIHRoZSBhdWRpdCBsb2dzIGlzIGFsd2F5cyBpbmNsdWRlZCBpbiB0aGUgZGF0YSBzZXQuXG4gICAqIFVzdWFsbHkgaXQncyBhbiAnQWxhcm0gY3JlYXRlZCcgYXVkaXQgbG9nLlxuICAgKlxuICAgKiBPbmx5IHVzZWQgd2hlbiBhdWRpdCBsb2dzIGV4Y2VlZCBQQUdFX1NJWkUuXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBwcml2YXRlIGV4dGVuZGVkQXVkaXRMb2dzOiBJUmVzdWx0TGlzdDxJQXVkaXRSZWNvcmQ+O1xuICBwcml2YXRlIHJlYWRvbmx5IFBBR0VfU0laRSA9IDEwMDtcblxuICAvKipcbiAgICogUHJldmVudHMgdGhlIHBpcGVsaW5lIGZyb20gZmFpbGluZyBmb3IgYSB0dXRvcmlhbCBhcHBsaWNhdGlvblxuICAgKiBiZWNhdXNlIGl0J3MgYSBwdXJlIEFuZ3VsYXIgYXBwbGljYXRpb24gYW5kIGRvZXNuJ3Qgc3VwcG9ydCBhbnlcbiAgICogQW5ndWxhckpTIHNlcnZpY2VzLlxuICAgKi9cbiAgaXNDcmVhdGVTbWFydFJ1bGVzQnV0dG9uQXZhaWxhYmxlOiBib29sZWFuO1xuICAvKipcbiAgICogUHJvcGVydHkgY29udGFpbnMgYSAxMDAgKHNlZSBQQUdFX1NJWkUpIG9mIG1vc3QgcmVjZW50IGF1ZGl0IGxvZ3MgcmVjb3Jkcy5cbiAgICovXG4gIGF1ZGl0TG9nOiBJUmVzdWx0TGlzdDxJQXVkaXRSZWNvcmQ+O1xuXG4gIGlzTG9hZGluZzogYm9vbGVhbjtcbiAgLyoqXG4gICAqIEluZGljYXRlcyB3aGVuIGFsYXJtcyBzdGF0dXMgY2hhbmdlIHdhcyBzdGFydGVkIChBY2tub3dsZWRnZS9SZWFjdGl2YXRlKVxuICAgKi9cbiAgaXNBbGFybVN0YXR1c0NoYW5naW5nID0gZmFsc2U7XG4gIC8qKlxuICAgKiBSZXByZXNlbnRzIGEgdmFsdWUgZm9yIGEgJ0xhc3QgdXBkYXRlZCcgc2VjdGlvbiBpbiBkZXRhaWxzLlxuICAgKi9cbiAgbGFzdFVwZGF0ZWQ6IHN0cmluZztcbiAgLyoqXG4gICAqIFJlcHJlc2VudHMgYSB2YWx1ZSBmb3IgYSAnU3RhdHVzJyBzZWN0aW9uIGluIGRldGFpbHMuXG4gICAqL1xuICBzdGF0dXNNZXNzYWdlOiBzdHJpbmc7XG4gIC8qKlxuICAgKiBUaGUgY29sb3Igb2YgdGhlIGFsYXJtIHR5cGUuXG4gICAqL1xuICB0eXBlQ29sb3I6IHN0cmluZztcbiAgLyoqXG4gICAqIEN1c3RvbSBmcmFnbWVudHMgb2YgdGhlIHNlbGVjdGVkIGFsYXJtLiBJZiBub25lIGV4aXN0LCBudWxsIGlzIHJldHVybmVkLlxuICAgKi9cbiAgY3VzdG9tRnJhZ21lbnRzOiBDdXN0b21GcmFnbWVudCA9IG51bGw7XG5cbiAgc2VsZWN0ZWRBbGFybU1POiBJTWFuYWdlZE9iamVjdDtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIGFsYXJtRGV0YWlsc1NlcnZpY2U6IEFsYXJtRGV0YWlsc1NlcnZpY2UsXG4gICAgcHJpdmF0ZSBhbGFybVNlcnZpY2U6IEFsYXJtU2VydmljZSxcbiAgICBwcml2YXRlIGFsZXJ0U2VydmljZTogQWxlcnRTZXJ2aWNlLFxuICAgIHByaXZhdGUgYXBwU3RhdGU6IEFwcFN0YXRlU2VydmljZSxcbiAgICBwcml2YXRlIGF1ZGl0U2VydmljZTogQXVkaXRTZXJ2aWNlLFxuICAgIHByaXZhdGUgcmVsYXRpdmVUaW1lOiBSZWxhdGl2ZVRpbWVQaXBlLFxuICAgIEBPcHRpb25hbCgpIHByaXZhdGUgbmcxU21hcnRSdWxlc1VwZ3JhZGVTZXJ2aWNlOiBOZzFTbWFydFJ1bGVzVXBncmFkZVNlcnZpY2UsXG4gICAgcHJpdmF0ZSB0cmFuc2xhdGVTZXJ2aWNlOiBUcmFuc2xhdGVTZXJ2aWNlLFxuICAgIHByaXZhdGUgaW52ZW50b3J5U2VydmljZTogSW52ZW50b3J5U2VydmljZSxcbiAgICBwcml2YXRlIGFsYXJtc1ZpZXdTZXJ2aWNlOiBBbGFybXNWaWV3U2VydmljZSxcbiAgICBwcml2YXRlIGNvbG9yU2VydmljZTogQ29sb3JTZXJ2aWNlXG4gICkge31cblxuICBhc3luYyBuZ09uSW5pdCgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCBpc1NtYXJ0UnVsZXNTZXJ2aWNlU3Vic2NyaWJlZCA9ICEhKGF3YWl0IHRoaXMuYWxhcm1EZXRhaWxzU2VydmljZS5nZXRBcHBsaWNhdGlvbihcbiAgICAgIHRoaXMuYWxhcm1EZXRhaWxzU2VydmljZS5TTUFSVF9SVUxFU19BUFBMSUNBVElPTl9LRVlcbiAgICApKTtcbiAgICBjb25zdCBoYXNBbnlSb2xlQWxsb3dpbmdUb0NyZWF0ZVNtYXJ0UnVsZSA9XG4gICAgICB0aGlzLmFsYXJtRGV0YWlsc1NlcnZpY2UuY2hlY2tJZkhhc0FueVJvbGVBbGxvd2luZ1RvQ3JlYXRlU21hcnRSdWxlKCk7XG4gICAgdGhpcy5pc0NyZWF0ZVNtYXJ0UnVsZXNCdXR0b25BdmFpbGFibGUgPVxuICAgICAgISF0aGlzLm5nMVNtYXJ0UnVsZXNVcGdyYWRlU2VydmljZSAmJlxuICAgICAgaXNTbWFydFJ1bGVzU2VydmljZVN1YnNjcmliZWQgJiZcbiAgICAgIGhhc0FueVJvbGVBbGxvd2luZ1RvQ3JlYXRlU21hcnRSdWxlO1xuICAgIHRoaXMudXNlckRldmljZU1hbmFnZW1lbnRBcHAgPSBhd2FpdCB0aGlzLmFsYXJtRGV0YWlsc1NlcnZpY2UuZ2V0QXBwbGljYXRpb24oXG4gICAgICB0aGlzLmFsYXJtRGV0YWlsc1NlcnZpY2UuREVWSUNFX01BTkFHRU1FTlRfQVBQTElDQVRJT05fS0VZXG4gICAgKTtcbiAgICB0aGlzLnNob3dTb3VyY2VOYXZpZ2F0aW9uTGluayA9XG4gICAgICAhIXRoaXMudXNlckRldmljZU1hbmFnZW1lbnRBcHAgJiYgIXRoaXMuaXNEZXZpY2VNYW5hZ2VtZW50VmlldygpO1xuICAgIHRoaXMudHlwZUNvbG9yID0gYXdhaXQgdGhpcy5jb2xvclNlcnZpY2UuZ2VuZXJhdGVDb2xvcih0aGlzLnNlbGVjdGVkQWxhcm0udHlwZSk7XG4gIH1cblxuICBhc3luYyBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKGNoYW5nZXMuc2VsZWN0ZWRBbGFybSAmJiBjaGFuZ2VzLnNlbGVjdGVkQWxhcm0uY3VycmVudFZhbHVlKSB7XG4gICAgICBhd2FpdCB0aGlzLnJlbG9hZEF1ZGl0TG9nKHRydWUsIHRydWUpO1xuICAgICAgYXdhaXQgdGhpcy51cGRhdGVTdGF0dXNNZXNzYWdlKCk7XG4gICAgICBjb25zdCB7IGRhdGEgfSA9IGF3YWl0IHRoaXMuaW52ZW50b3J5U2VydmljZS5kZXRhaWwodGhpcy5zZWxlY3RlZEFsYXJtLnNvdXJjZS5pZCk7XG4gICAgICB0aGlzLnNlbGVjdGVkQWxhcm1NTyA9IGRhdGE7XG4gICAgICB0aGlzLnVwZGF0ZUxhc3RVcGRhdGVkRGF0ZSh0aGlzLmF1ZGl0TG9nLmRhdGFbMF0pO1xuICAgICAgdGhpcy5jdXN0b21GcmFnbWVudHMgPSB0aGlzLmdldEN1c3RvbUZyYWdtZW50cyh0aGlzLnNlbGVjdGVkQWxhcm0pO1xuICAgIH1cbiAgfVxuXG4gIGNyZWF0ZVNtYXJ0UnVsZSgpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuaXNDcmVhdGVTbWFydFJ1bGVzQnV0dG9uQXZhaWxhYmxlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMubmcxU21hcnRSdWxlc1VwZ3JhZGVTZXJ2aWNlLmFkZE5ld0ZvcklucHV0QWxhcm1BbmRPdXRwdXRVc2VyV2l0aFVJKFxuICAgICAgdGhpcy5zZWxlY3RlZEFsYXJtLFxuICAgICAgdGhpcy5hcHBTdGF0ZS5jdXJyZW50VXNlci52YWx1ZVxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogTmF2aWdhdGVzIHRvIGEgc3BlY2lmaWMgYWxhcm0gc291cmNlIGRldmljZSBiYXNlZCBvbiB0aGUgcHJvdmlkZWQgc291cmNlLlxuICAgKlxuICAgKiBAcGFyYW0gc291cmNlSWQgLSBUaGUgc291cmNlIGlkLlxuICAgKi9cbiAgYXN5bmMgZ29Ub0FsYXJtU291cmNlKHNvdXJjZUlkOiBzdHJpbmcgfCBudW1iZXIpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCB7IGRhdGEgfSA9IGF3YWl0IHRoaXMuYWxhcm1TZXJ2aWNlLmRldGFpbChzb3VyY2VJZCk7XG4gICAgY29uc3QgYmFzZVVybCA9IGAvYXBwcy8ke3RoaXMudXNlckRldmljZU1hbmFnZW1lbnRBcHAuY29udGV4dFBhdGh9YDtcbiAgICBjb25zdCBwYXRoID0gYCMvZGV2aWNlLyR7ZGF0YS5zb3VyY2UuaWR9L2FsYXJtc2A7XG4gICAgY29uc3QgdXJsID0gYCR7YmFzZVVybH0vJHtwYXRofWA7XG5cbiAgICB3aW5kb3cub3Blbih1cmwsICdfYmxhbmsnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZWxvYWRzIGF1ZGl0IGxvZyBkYXRhIGFzeW5jaHJvbm91c2x5LlxuICAgKlxuICAgKiBUaGlzIG1ldGhvZCBmZXRjaGVzIGF1ZGl0IHJlY29yZHMgdXNpbmcgYGdldEFsYXJtQXVkaXRSZWNvcmRzYCBhbmQgb3B0aW9uYWxseSB1cGRhdGVzIHRoZSBhdWRpdCBsb2dzXG4gICAqIHN0YXRlIGluIHRoZSBjb21wb25lbnQgYmFzZWQgb24gdGhlIGBpc1NldEF1ZGl0TG9nc2AgZmxhZy4gSXQgaGFuZGxlcyB0aGUgbG9hZGluZyBzdGF0ZSBhbmQgcG90ZW50aWFsXG4gICAqIGVycm9ycyBkdXJpbmcgdGhlIGZldGNoIG9wZXJhdGlvbi5cbiAgICpcbiAgICogQHBhcmFtIGlzUmV2ZXJ0IC0gQSBib29sZWFuIGZsYWcgaW5kaWNhdGluZyB3aGV0aGVyIHRvIHJldHJpZXZlIGEgMTAwIChzZWUgUEFHRV9TSVpFKSByZWNvcmRzICh0cnVlKVxuICAgKiAgICAgICAgICAgICAgICAgICBvciBvbmx5IHJlY29yZCwgdGhhdCBjaHJvbm9sb2dpY2FsbHkgd2lsbCBiZSB0aGUgb2xkZXN0IG9uZSAoZmFsc2UpLiBEZWZhdWx0cyB0byB0cnVlLlxuICAgKiAgICAgICAgICAgICAgICAgICBJZiBzZXQgdG8gZmFsc2UsIGl0IHdpbGwgc2V0IFBBR0VfU0laRSB0byAxIGFuZCB0cmlnZ2VyIGEgbG9naWNcbiAgICogICAgICAgICAgICAgICAgICAgY29uY2F0ZW5hdGluZyBhIG1vc3QgcmVjZW50IHJlY29yZCB3aXRoIHRoZSB2ZXJ5IGZpcnN0IG9uZSB0b1xuICAgKiAgICAgICAgICAgICAgICAgICBjYWxjdWxhdGUgdGhlIGFsYXJtIGR1cmF0aW9uIChjaGFuZ2UgdG8gQ0xFQVJFRCBzdGF0dXMpLlxuICAgKiAgICAgICAgICAgICAgICAgICBJdCdzIHBhc3NlZCB0byB0aGUgYGdldEFsYXJtQXVkaXRSZWNvcmRzYCBtZXRob2QuXG4gICAqIEBwYXJhbSBpc1NldEF1ZGl0TG9ncyAtIEEgYm9vbGVhbiBmbGFnIHRvIGRldGVybWluZSBpZiB0aGUgZmV0Y2hlZCBhdWRpdCBsb2dzIHNob3VsZCBiZSBzZXQgaW4gdGhlIGNvbXBvbmVudCBzdGF0ZS4gRGVmYXVsdHMgdG8gYGZhbHNlYC5cbiAgICogQHJldHVybnMgQSBwcm9taXNlIHRoYXQgcmVzb2x2ZXMgdG8gYSBsaXN0IG9mIGBJQXVkaXRSZWNvcmRgIG9iamVjdHMuXG4gICAqL1xuICBhc3luYyByZWxvYWRBdWRpdExvZyhcbiAgICBpc1JldmVydCA9IHRydWUsXG4gICAgaXNTZXRBdWRpdExvZ3MgPSBmYWxzZVxuICApOiBQcm9taXNlPElSZXN1bHRMaXN0PElBdWRpdFJlY29yZD4+IHtcbiAgICB0cnkge1xuICAgICAgdGhpcy5pc0xvYWRpbmcgPSB0cnVlO1xuICAgICAgY29uc3QgYXVkaXRMb2dzID0gYXdhaXQgdGhpcy5nZXRBbGFybUF1ZGl0UmVjb3Jkcyhpc1JldmVydCk7XG5cbiAgICAgIGlmIChpc1NldEF1ZGl0TG9ncykge1xuICAgICAgICB0aGlzLnNldEF1ZGl0TG9ncyhhdWRpdExvZ3MpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gYXVkaXRMb2dzO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICB0aGlzLmFsZXJ0U2VydmljZS5hZGRTZXJ2ZXJGYWlsdXJlKGVycm9yKTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgdGhpcy5pc0xvYWRpbmcgPSBmYWxzZTtcbiAgICB9XG4gIH1cblxuICBhc3luYyBvblVwZGF0ZURldGFpbHMoc3RhdHVzOiBBbGFybVN0YXR1c1R5cGUpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICB0cnkge1xuICAgICAgdGhpcy5pc0FsYXJtU3RhdHVzQ2hhbmdpbmcgPSB0cnVlO1xuICAgICAgYXdhaXQgdGhpcy51cGRhdGVBbGFybVN0YXR1cyhzdGF0dXMpO1xuICAgICAgYXdhaXQgdGhpcy5yZWxvYWRBdWRpdExvZyh0cnVlLCB0cnVlKTtcbiAgICAgIGF3YWl0IHRoaXMudXBkYXRlU3RhdHVzTWVzc2FnZSgpO1xuICAgICAgdGhpcy51cGRhdGVMYXN0VXBkYXRlZERhdGUodGhpcy5hdWRpdExvZy5kYXRhWzBdKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgdGhpcy5hbGVydFNlcnZpY2UuYWRkU2VydmVyRmFpbHVyZShlcnJvcik7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIHRoaXMuaXNBbGFybVN0YXR1c0NoYW5naW5nID0gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgZGV0YWlsc0J1dHRvbkFjdGlvbihidXR0b246IEFsYXJtRGV0YWlsc0J1dHRvbiwgYWxhcm06IElBbGFybSk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IHJlc3VsdCA9IGJ1dHRvbi5hY3Rpb24oYWxhcm0pO1xuICAgIGxldCBzaG91bGRSZWxvYWQ6IGJvb2xlYW4gfCBJQWxhcm0gPSBmYWxzZTtcbiAgICBpZiAocmVzdWx0IGluc3RhbmNlb2YgUHJvbWlzZSkge1xuICAgICAgc2hvdWxkUmVsb2FkID0gYXdhaXQgcmVzdWx0O1xuICAgIH0gZWxzZSB7XG4gICAgICBzaG91bGRSZWxvYWQgPSByZXN1bHQ7XG4gICAgfVxuXG4gICAgaWYgKHNob3VsZFJlbG9hZCkge1xuICAgICAgbGV0IGFsYXJtOiBJQWxhcm07XG4gICAgICBpZiAoc2hvdWxkUmVsb2FkID09PSB0cnVlKSB7XG4gICAgICAgIGNvbnN0IHsgZGF0YTogdXBkYXRlZEFsYXJtIH0gPSBhd2FpdCB0aGlzLmFsYXJtU2VydmljZS5kZXRhaWwodGhpcy5zZWxlY3RlZEFsYXJtLmlkKTtcbiAgICAgICAgYWxhcm0gPSB1cGRhdGVkQWxhcm07XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBhbGFybSA9IHNob3VsZFJlbG9hZDtcbiAgICAgIH1cbiAgICAgIHRoaXMuYWxhcm1zVmlld1NlcnZpY2UudXBkYXRlQWxhcm1MaXN0KCk7XG5cbiAgICAgIGNvbnN0IHByZXZpb3VzVmFsdWUgPSB0aGlzLnNlbGVjdGVkQWxhcm07XG4gICAgICB0aGlzLnNlbGVjdGVkQWxhcm0gPSBhbGFybTtcbiAgICAgIHRoaXMubmdPbkNoYW5nZXMoe1xuICAgICAgICBzZWxlY3RlZEFsYXJtOiB7XG4gICAgICAgICAgY3VycmVudFZhbHVlOiBhbGFybSxcbiAgICAgICAgICBwcmV2aW91c1ZhbHVlLFxuICAgICAgICAgIGZpcnN0Q2hhbmdlOiBmYWxzZSxcbiAgICAgICAgICBpc0ZpcnN0Q2hhbmdlOiAoKSA9PiBmYWxzZVxuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIHVwZGF0ZUFsYXJtU3RhdHVzKHN0YXR1czogQWxhcm1TdGF0dXNUeXBlKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgcGFydGlhbGx5VXBkYXRlZEFsYXJtOiBQYXJ0aWFsPElBbGFybT4gPSB7IGlkOiB0aGlzLnNlbGVjdGVkQWxhcm0uaWQsIHN0YXR1cyB9O1xuICAgIGF3YWl0IHRoaXMuYWxhcm1TZXJ2aWNlLnVwZGF0ZShwYXJ0aWFsbHlVcGRhdGVkQWxhcm0pO1xuICAgIGNvbnN0IHRyYW5zbGF0ZWRTdGF0dXNMYWJlbCA9IHRoaXMudHJhbnNsYXRlU2VydmljZS5pbnN0YW50KEFMQVJNX1NUQVRVU19MQUJFTFNbc3RhdHVzXSk7XG4gICAgdGhpcy5hbGVydFNlcnZpY2Uuc3VjY2VzcyhcbiAgICAgIHRoaXMudHJhbnNsYXRlU2VydmljZS5pbnN0YW50KGdldHRleHQoJ0FsYXJtIHN0YXR1cyBjaGFuZ2VkIHRvIHt7IHN0YXR1cyB9fScpLCB7XG4gICAgICAgIHN0YXR1czogdHJhbnNsYXRlZFN0YXR1c0xhYmVsLnRvVXBwZXJDYXNlKClcbiAgICAgIH0pXG4gICAgKTtcbiAgICB0aGlzLnNlbGVjdGVkQWxhcm0uc3RhdHVzID0gc3RhdHVzO1xuICAgIHRoaXMuYWxhcm1zVmlld1NlcnZpY2UudXBkYXRlQWxhcm1MaXN0KCk7XG4gIH1cblxuICAvKipcbiAgICogUmV0cmlldmVzIHRoZSBhdWRpdCBsb2cgYW5kIGFwcGVuZHMgdGhlIGxhc3QgYXVkaXQgcmVjb3JkIHRvIGl0LlxuICAgKlxuICAgKiBUaGlzIG1ldGhvZCBmZXRjaGVzIHRoZSBleGlzdGluZyBhdWRpdCBsb2cgZGF0YSBhbmQgbWFrZXMgYSBkZWVwIGNvcHkgb2YgaXQuIEl0IHRoZW5cbiAgICogcmV0cmlldmVzIHRoZSBsYXN0IGF1ZGl0IHJlY29yZCBhbmQgYXBwZW5kcyBpdCB0byB0aGUgY29waWVkIGF1ZGl0IGxvZyBkYXRhLiBUaGlzIGlzXG4gICAqIHVzZWZ1bCBmb3Igc2NlbmFyaW9zIHdoZXJlIHRoZSBtb3N0IHJlY2VudCBhdWRpdCByZWNvcmQgbmVlZHMgdG8gYmUgaW5jbHVkZWQgaW4gdGhlXG4gICAqIGV4aXN0aW5nIGF1ZGl0IGxvZyBkYXRhIChjYWxjdWxhdGluZyB0aGUgQ0xFQVJFRCBwZXJpb2QpLlxuICAgKlxuICAgKiBAcmV0dXJucyBBIHByb21pc2Ugb2YgYElSZXN1bHRMaXN0PElBdWRpdFJlY29yZD5gLCB3aGljaCBpbmNsdWRlcyB0aGVcbiAgICogICAgICAgICAgZXhpc3RpbmcgYXVkaXQgbG9nIGRhdGEgYWxvbmcgd2l0aCB0aGUgbGFzdCBhdWRpdCByZWNvcmQgYXBwZW5kZWQuXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBwcml2YXRlIGFzeW5jIGF1ZGl0TG9nV2l0aEZpcnN0UmVjb3JkKCk6IFByb21pc2U8SVJlc3VsdExpc3Q8SUF1ZGl0UmVjb3JkPj4ge1xuICAgIGNvbnN0IGV4aXN0aW5nRGF0YSA9IHRoaXMuYXVkaXRMb2c7XG4gICAgY29uc3QgY29waWVkRXhpc3RpbmdEYXRhID0gY2xvbmVEZWVwKGV4aXN0aW5nRGF0YSk7XG5cbiAgICBjb25zdCBsYXN0QXVkaXRSZWNvcmQgPSBhd2FpdCB0aGlzLnJlbG9hZEF1ZGl0TG9nKGZhbHNlKTtcbiAgICBjb25zdCBsYXN0UmVjb3JkID0gbGFzdEF1ZGl0UmVjb3JkLmRhdGFbbGFzdEF1ZGl0UmVjb3JkLmRhdGEubGVuZ3RoIC0gMV07XG4gICAgY29waWVkRXhpc3RpbmdEYXRhLmRhdGEucHVzaChsYXN0UmVjb3JkKTtcbiAgICByZXR1cm4gY29waWVkRXhpc3RpbmdEYXRhO1xuICB9XG5cbiAgcHJpdmF0ZSBzZXRBdWRpdExvZ3MoYXVkaXRMb2dzOiBJUmVzdWx0TGlzdDxJQXVkaXRSZWNvcmQ+KTogdm9pZCB7XG4gICAgdGhpcy5hdWRpdExvZyA9IGF1ZGl0TG9ncztcbiAgfVxuXG4gIHByaXZhdGUgdXBkYXRlTGFzdFVwZGF0ZWREYXRlKHVwZGF0ZWRBdWRpdFJlY29yZHM6IElBdWRpdFJlY29yZCk6IHZvaWQge1xuICAgIGlmICghdXBkYXRlZEF1ZGl0UmVjb3Jkcykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IHsgY3JlYXRpb25UaW1lIH0gPSB1cGRhdGVkQXVkaXRSZWNvcmRzO1xuICAgIHRoaXMubGFzdFVwZGF0ZWQgPSBjcmVhdGlvblRpbWU7XG4gIH1cblxuICBwcml2YXRlIGdldEFjdGl2ZVN0YXR1c01lc3NhZ2UodGltZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy50cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQoZ2V0dGV4dCgnQUNUSVZFYGFsYXJtYDogdHJpZ2dlcmVkIHt7YWxhcm1UaW1lRnJvbU5vd319JyksIHtcbiAgICAgIGFsYXJtVGltZUZyb21Ob3c6IHRoaXMucmVsYXRpdmVUaW1lLnRyYW5zZm9ybShuZXcgRGF0ZSh0aW1lKSlcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0QWNrbm93bGVkZ2VkU3RhdHVzTWVzc2FnZShzdGF0dXM6IEFsYXJtU3RhdHVzVHlwZSwgY2hhbmdlTG9nOiBJQXVkaXRSZWNvcmRbXSk6IHN0cmluZyB7XG4gICAgaWYgKGNoYW5nZUxvZy5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybiB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudChnZXR0ZXh0KCdBQ0tOT1dMRURHRURgYWxhcm1gJykpO1xuICAgIH1cblxuICAgIGNvbnN0IGFja25vd2xlZGdlZEJ5ID0gdGhpcy5hbGFybURldGFpbHNTZXJ2aWNlLmdldEFja25vd2xlZGdlZEJ5KHN0YXR1cywgY2hhbmdlTG9nKTtcbiAgICBjb25zdCBhY2tub3dsZWRnZVRpbWUgPSB0aGlzLmFsYXJtRGV0YWlsc1NlcnZpY2UuZ2V0QWNrbm93bGVkZ2VUaW1lKGNoYW5nZUxvZyk7XG5cbiAgICBpZiAoYWNrbm93bGVkZ2VkQnkpIHtcbiAgICAgIHJldHVybiB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudChcbiAgICAgICAgZ2V0dGV4dCgnQUNLTk9XTEVER0VEYGFsYXJtYCBieToge3thY2tCeX19IHt7YWNrVGltZUZyb21Ob3d9fScpLFxuICAgICAgICB7XG4gICAgICAgICAgYWNrQnk6IGFja25vd2xlZGdlZEJ5LFxuICAgICAgICAgIGFja1RpbWVGcm9tTm93OiB0aGlzLnJlbGF0aXZlVGltZS50cmFuc2Zvcm0obmV3IERhdGUoYWNrbm93bGVkZ2VUaW1lKSlcbiAgICAgICAgfVxuICAgICAgKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy50cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQoZ2V0dGV4dCgnQUNLTk9XTEVER0VEYGFsYXJtYCB7e2Fja1RpbWVGcm9tTm93fX0nKSwge1xuICAgICAgYWNrVGltZUZyb21Ob3c6IHRoaXMucmVsYXRpdmVUaW1lLnRyYW5zZm9ybShuZXcgRGF0ZShhY2tub3dsZWRnZVRpbWUpKVxuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRDbGVhcmVkU3RhdHVzTWVzc2FnZShhdWRpdExvZzogSUF1ZGl0UmVjb3JkW10pOiBzdHJpbmcge1xuICAgIGlmIChhdWRpdExvZy5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybiB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudChnZXR0ZXh0KCdDTEVBUkVEYGFsYXJtYCcpKTtcbiAgICB9XG5cbiAgICBjb25zdCBkaWZmZXJlbmNlSW5NcyA9IHRoaXMuY2FsY3VsYXRlQWxhcm1EdXJhdGlvbihhdWRpdExvZyk7XG5cbiAgICByZXR1cm4gdGhpcy50cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQoXG4gICAgICBnZXR0ZXh0KCdDTEVBUkVEYGFsYXJtYDogd2FzIGFjdGl2ZSBmb3Ige3thbGFybUR1cmF0aW9ufX0nKSxcbiAgICAgIHtcbiAgICAgICAgYWxhcm1EdXJhdGlvbjogdGhpcy5yZWxhdGl2ZVRpbWUudHJhbnNmb3JtKGRpZmZlcmVuY2VJbk1zLCB0cnVlKVxuICAgICAgfVxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogQ2FsY3VsYXRlcyB0aGUgZHVyYXRpb24gb2YgYW4gYWxhcm0gYmFzZWQgb24gYXVkaXQgbG9nIHJlY29yZHMuXG4gICAqXG4gICAqIFRoaXMgbWV0aG9kIGNvbXB1dGVzIHRoZSBkdXJhdGlvbiBvZiBhbiBhbGFybSBieSBmaW5kaW5nIHRoZSBkaWZmZXJlbmNlXG4gICAqIGJldHdlZW4gdGhlIHN0YXJ0IGFuZCBlbmQgdGltZXMgb2YgdGhlIGFsYXJtLiBUaGUgc3RhcnQgdGltZSBpcyBkZXRlcm1pbmVkXG4gICAqIGZyb20gdGhlIGxhc3QgcmVjb3JkIGluIHRoZSBhdWRpdCBsb2csIHVzaW5nIHRoZSBmaXJzdCBhdmFpbGFibGUgdGltZSBmaWVsZFxuICAgKiAoYGZpcnN0T2NjdXJyZW5jZVRpbWVgLCBgdGltZWAsIG9yIGBjcmVhdGlvblRpbWVgKS4gVGhlIGVuZCB0aW1lIGlzIG9idGFpbmVkXG4gICAqIGZyb20gdGhlIGBhbGFybURldGFpbHNTZXJ2aWNlYC5cbiAgICpcbiAgICogQHBhcmFtIGF1ZGl0TG9nIC0gQW4gYXJyYXkgb2YgYElBdWRpdFJlY29yZGAgb2JqZWN0cyByZXByZXNlbnRpbmcgdGhlIGF1ZGl0IGxvZyByZWNvcmRzLlxuICAgKiBAcmV0dXJucyBUaGUgZHVyYXRpb24gb2YgdGhlIGFsYXJtIGluIG1pbGxpc2Vjb25kcywgb3IgYG51bGxgIGlmIHRoZSBlbmQgdGltZSBpcyBub3QgYXZhaWxhYmxlLlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgcHJpdmF0ZSBjYWxjdWxhdGVBbGFybUR1cmF0aW9uKGF1ZGl0TG9nOiBJQXVkaXRSZWNvcmRbXSk6IG51bWJlciB8IG51bGwge1xuICAgIGNvbnN0IGZpcnN0QWxhcm0gPSBhdWRpdExvZ1thdWRpdExvZy5sZW5ndGggLSAxXTtcbiAgICBjb25zdCBzdGFydFRpbWUgPSBmaXJzdEFsYXJtLmZpcnN0T2NjdXJyZW5jZVRpbWUgfHwgZmlyc3RBbGFybS50aW1lIHx8IGZpcnN0QWxhcm0uY3JlYXRpb25UaW1lO1xuICAgIGNvbnN0IGVuZFRpbWUgPSB0aGlzLmFsYXJtRGV0YWlsc1NlcnZpY2UuZ2V0RW5kVGltZShhdWRpdExvZyk7XG5cbiAgICBpZiAoIWVuZFRpbWUpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGNvbnN0IHN0YXJ0VGltZVRvRGF0ZSA9IG5ldyBEYXRlKHN0YXJ0VGltZSk7XG4gICAgY29uc3QgZW5kVGltZVRvRGF0ZSA9IG5ldyBEYXRlKGVuZFRpbWUpO1xuXG4gICAgcmV0dXJuIGVuZFRpbWVUb0RhdGUuZ2V0VGltZSgpIC0gc3RhcnRUaW1lVG9EYXRlLmdldFRpbWUoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXRyaWV2ZXMgYSBsaXN0IG9mIGF1ZGl0IHJlY29yZHMgZm9yIGEgc2VsZWN0ZWQgYWxhcm0uXG4gICAqXG4gICAqIFRoaXMgbWV0aG9kIGZldGNoZXMgYXVkaXQgcmVjb3JkcyBiYXNlZCBvbiB0aGUgc3BlY2lmaWVkIHByb3BlcnRpZXMsIGluY2x1ZGluZ1xuICAgKiB0aGUgZGF0ZSwgcGFnZSBzaXplLCB3aGV0aGVyIHRvIHJldmVydCwgdGhlIHNvdXJjZSBhbGFybSBJRCwgYW5kIHdoZXRoZXIgdG8gaW5jbHVkZSB0b3RhbCBwYWdlcy5cbiAgICpcbiAgICogQHBhcmFtIGlzUmV2ZXJ0IC0gQSBib29sZWFuIGZsYWcgaW5kaWNhdGluZyB3aGV0aGVyIHRvIHJldHJpZXZlIGEgMTAwIChzZWUgUEFHRV9TSVpFKSByZWNvcmRzICh0cnVlKVxuICAgKiAgICAgICAgICAgICAgICAgICBvciBvbmx5IHJlY29yZCwgdGhhdCBjaHJvbm9sb2dpY2FsbHkgd2lsbCBiZSB0aGUgb2xkZXN0IG9uZSAoZmFsc2UpLiBEZWZhdWx0cyB0byB0cnVlLlxuICAgKiAgICAgICAgICAgICAgICAgICBJZiBzZXQgdG8gZmFsc2UsIGl0IHdpbGwgc2V0IFBBR0VfU0laRSB0byAxIGFuZCB0cmlnZ2VyIGEgbG9naWNcbiAgICogICAgICAgICAgICAgICAgICAgY29uY2F0ZW5hdGluZyBhIG1vc3QgcmVjZW50IHJlY29yZCB3aXRoIHRoZSB2ZXJ5IGZpcnN0IG9uZSB0b1xuICAgKiAgICAgICAgICAgICAgICAgICBjYWxjdWxhdGUgdGhlIGFsYXJtIGR1cmF0aW9uIChjaGFuZ2UgdG8gQ0xFQVJFRCBzdGF0dXMpLlxuICAgKiBAcmV0dXJucyBBIFByb21pc2UgdGhhdCByZXNvbHZlcyB0byBhbiBJUmVzdWx0TGlzdCBvZiBJQXVkaXRSZWNvcmQgb2JqZWN0cywgcmVwcmVzZW50aW5nIHRoZSBhdWRpdCByZWNvcmRzLlxuICAgKiBAYXN5bmNcbiAgICogQHByaXZhdGVcbiAgICovXG4gIHByaXZhdGUgYXN5bmMgZ2V0QWxhcm1BdWRpdFJlY29yZHMoaXNSZXZlcnQgPSB0cnVlKTogUHJvbWlzZTxJUmVzdWx0TGlzdDxJQXVkaXRSZWNvcmQ+PiB7XG4gICAgY29uc3QgcHJvcGVydGllcyA9IHtcbiAgICAgIGRhdGVUbzogbmV3IERhdGUoRGF0ZS5ub3coKSkudG9JU09TdHJpbmcoKSxcbiAgICAgIHBhZ2VTaXplOiBpc1JldmVydCA/IHRoaXMuUEFHRV9TSVpFIDogMSxcbiAgICAgIHJldmVydDogaXNSZXZlcnQsXG4gICAgICBzb3VyY2U6IHRoaXMuc2VsZWN0ZWRBbGFybS5pZCxcbiAgICAgIHdpdGhUb3RhbFBhZ2VzOiB0cnVlXG4gICAgfTtcblxuICAgIHJldHVybiBhd2FpdCB0aGlzLmF1ZGl0U2VydmljZS5saXN0KHByb3BlcnRpZXMpO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyB1cGRhdGVTdGF0dXNNZXNzYWdlKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIHN3aXRjaCAodGhpcy5zZWxlY3RlZEFsYXJtLnN0YXR1cykge1xuICAgICAgY2FzZSB0aGlzLkFDVElWRV9TVEFUVVNfVkFMVUU6XG4gICAgICAgIHRoaXMuc3RhdHVzTWVzc2FnZSA9IHRoaXMuZ2V0QWN0aXZlU3RhdHVzTWVzc2FnZSh0aGlzLnNlbGVjdGVkQWxhcm0udGltZSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSB0aGlzLkFDS05PV0xFREdFRF9TVEFUVVNfVkFMVUU6XG4gICAgICAgIHRoaXMuc3RhdHVzTWVzc2FnZSA9IHRoaXMuZ2V0QWNrbm93bGVkZ2VkU3RhdHVzTWVzc2FnZShcbiAgICAgICAgICB0aGlzLnNlbGVjdGVkQWxhcm0uc3RhdHVzIGFzIHVua25vd24gYXMgQWxhcm1TdGF0dXNUeXBlLFxuICAgICAgICAgIHRoaXMuYXVkaXRMb2cuZGF0YVxuICAgICAgICApO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgdGhpcy5DTEVBUkVEX1NUQVRVU19WQUxVRTpcbiAgICAgICAgaWYgKHRoaXMuaGFzUmVhY2hlZE9yRXhjZWVkZWRQYWdlU2l6ZUxpbWl0KCkpIHtcbiAgICAgICAgICB0aGlzLmV4dGVuZGVkQXVkaXRMb2dzID0gYXdhaXQgdGhpcy5hdWRpdExvZ1dpdGhGaXJzdFJlY29yZCgpO1xuICAgICAgICAgIHRoaXMuc3RhdHVzTWVzc2FnZSA9IHRoaXMuZ2V0Q2xlYXJlZFN0YXR1c01lc3NhZ2UodGhpcy5leHRlbmRlZEF1ZGl0TG9ncy5kYXRhKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5zdGF0dXNNZXNzYWdlID0gdGhpcy5nZXRDbGVhcmVkU3RhdHVzTWVzc2FnZSh0aGlzLmF1ZGl0TG9nLmRhdGEpO1xuICAgICAgICBicmVhaztcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGhhc1JlYWNoZWRPckV4Y2VlZGVkUGFnZVNpemVMaW1pdCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5hdWRpdExvZy5kYXRhLmxlbmd0aCA+PSB0aGlzLlBBR0VfU0laRTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGlzIG1ldGhvZCBjaGVja3MgaWYgdGhlIGN1cnJlbnQgVVJMIGluY2x1ZGVzIHRoZSBjb250ZXh0IHBhdGggb2YgdGhlXG4gICAqIGRldmljZSBtYW5hZ2VtZW50IGFwcGxpY2F0aW9uLCBpbmRpY2F0aW5nIHdoZXRoZXIgdGhlIHVzZXIgaXMgaW4gdGhlXG4gICAqIGRldmljZSBtYW5hZ2VtZW50IHZpZXcuXG4gICAqXG4gICAqIEByZXR1cm5zIFJldHVybnMgYHRydWVgIGlmIHRoZSBjdXJyZW50IHZpZXcgaXMgaW4gZGV2aWNlIG1hbmFnZW1lbnQsIG90aGVyd2lzZSwgcmV0dXJucyBgZmFsc2VgLlxuICAgKi9cbiAgcHJpdmF0ZSBpc0RldmljZU1hbmFnZW1lbnRWaWV3KCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB3aW5kb3cubG9jYXRpb24uaHJlZi5pbmNsdWRlcyh0aGlzLnVzZXJEZXZpY2VNYW5hZ2VtZW50QXBwLmNvbnRleHRQYXRoKTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0Q3VzdG9tRnJhZ21lbnRzKHNlbGVjdGVkQWxhcm06IElBbGFybSk6IEN1c3RvbUZyYWdtZW50IHtcbiAgICBsZXQgY3VzdG9tUHJvcGVydGllcyA9IG51bGw7XG4gICAgZm9yIChjb25zdCBrZXkgaW4gc2VsZWN0ZWRBbGFybSkge1xuICAgICAgaWYgKCFBTEFSTV9ERUZBVUxUX1BST1BFUlRJRVMuZmluZChrID0+IGsgPT09IGtleSkpIHtcbiAgICAgICAgaWYgKCFjdXN0b21Qcm9wZXJ0aWVzKSB7XG4gICAgICAgICAgY3VzdG9tUHJvcGVydGllcyA9IHt9O1xuICAgICAgICB9XG4gICAgICAgIGN1c3RvbVByb3BlcnRpZXNba2V5XSA9IHNlbGVjdGVkQWxhcm1ba2V5XTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gY3VzdG9tUHJvcGVydGllcztcbiAgfVxufVxuIiwiPGRpdiBjbGFzcz1cImQtZmxleCByb3cgdGlnaHQtZ3JpZCBmbGV4LXdyYXAgYS1pLXN0cmV0Y2hcIj5cbiAgPGRpdiBjbGFzcz1cImNvbC14cy0xMiBjb2wtbWQtNiBkLWZsZXggcC1iLThcIj5cbiAgICA8ZGl2IGNsYXNzPVwiYm9yZGVyLWFsbCBmaXQtdyBkLWZsZXhcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJwLThcIj5cbiAgICAgICAgPGlcbiAgICAgICAgICBjbGFzcz1cImljb24tMjQgdGV4dC1ncmF5LWRhcmsgbS10LTQgYzh5LWljb25cIlxuICAgICAgICAgIFtjOHlJY29uXT1cInNlbGVjdGVkQWxhcm0uc3RhdHVzIHwgQWxhcm1TdGF0dXNUb0ljb25cIlxuICAgICAgICA+PC9pPlxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzPVwicC10LTggcC1iLTggcC1yLThcIj5cbiAgICAgICAgPHAgY2xhc3M9XCJ0ZXh0LWxhYmVsLXNtYWxsIG0tYi0wIG0tci04XCI+e3sgJ1N0YXR1cycgfCB0cmFuc2xhdGUgfX08L3A+XG4gICAgICAgIDxwIGNsYXNzPVwic21hbGxcIj57eyBzdGF0dXNNZXNzYWdlIH19PC9wPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuICA8ZGl2IGNsYXNzPVwiY29sLXhzLTEyIGNvbC1tZC02IGQtZmxleCBwLWItOFwiPlxuICAgIDxkaXYgY2xhc3M9XCJib3JkZXItYWxsIGZpdC13IGQtZmxleFwiPlxuICAgICAgPGRpdiBjbGFzcz1cInAtOFwiPlxuICAgICAgICA8aVxuICAgICAgICAgIGNsYXNzPVwiaWNvbi0yNCB0ZXh0LWdyYXktZGFyayBtLXQtNCBzdHJva2VkLWljb24gc3RhdHVzXCJcbiAgICAgICAgICBbYzh5SWNvbl09XCJzZWxlY3RlZEFsYXJtLnNldmVyaXR5IHwgQWxhcm1TZXZlcml0eVRvSWNvblwiXG4gICAgICAgICAgW25nQ2xhc3NdPVwic2VsZWN0ZWRBbGFybS5zZXZlcml0eT8udG9TdHJpbmcoKSB8IGxvd2VyY2FzZVwiXG4gICAgICAgID48L2k+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9XCJwLXQtOCBwLWItOCBwLXItOFwiPlxuICAgICAgICA8cCBjbGFzcz1cInRleHQtbGFiZWwtc21hbGwgbS1iLTAgbS1yLThcIj57eyAnU2V2ZXJpdHknIHwgdHJhbnNsYXRlIH19PC9wPlxuICAgICAgICA8cCBjbGFzcz1cInNtYWxsXCI+e3sgU0VWRVJJVFlfTEFCRUxTW3NlbGVjdGVkQWxhcm0uc2V2ZXJpdHldIHwgdHJhbnNsYXRlIH19PC9wPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuICA8ZGl2IGNsYXNzPVwiY29sLXhzLTEyIGNvbC1tZC02IGQtZmxleCBwLWItOFwiPlxuICAgIDxkaXYgY2xhc3M9XCJib3JkZXItYWxsIGZpdC13IGQtZmxleFwiPlxuICAgICAgPGRpdiBjbGFzcz1cInAtOFwiPlxuICAgICAgICA8aVxuICAgICAgICAgIGNsYXNzPVwiaWNvbi0yNCB0ZXh0LWdyYXktZGFyayBtLXQtNCBzdHJva2VkLWljb24gc3RhdHVzXCJcbiAgICAgICAgICBjOHlJY29uPVwiY29udGFjdGxlc3MtcGF5bWVudFwiXG4gICAgICAgID48L2k+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9XCJwLXQtOCBwLWItOCBwLXItOFwiPlxuICAgICAgICA8cCBjbGFzcz1cInRleHQtbGFiZWwtc21hbGwgbS1iLTAgbS1yLThcIj57eyAnU291cmNlJyB8IHRyYW5zbGF0ZSB9fTwvcD5cbiAgICAgICAgPHAgY2xhc3M9XCJzbWFsbFwiPlxuICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgIGNsYXNzPVwiYnRuLWxpbmsgdGV4dC1tdXRlZCBwLTAgbS1yLTggdGV4dC1sZWZ0XCJcbiAgICAgICAgICAgIHRpdGxlPVwie3sgc2VsZWN0ZWRBbGFybS5zb3VyY2UubmFtZSB9fVwiXG4gICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgIHJvdXRlckxpbms9XCJ7eyBzZWxlY3RlZEFsYXJtTU8gfCBhc3NldExpbmsgfX1cIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxzbWFsbCBjbGFzcz1cImljb24tZmxleFwiPlxuICAgICAgICAgICAgICA8aSBjOHlJY29uPVwiZXhjaGFuZ2VcIj48L2k+XG4gICAgICAgICAgICAgIHt7IHNlbGVjdGVkQWxhcm0uc291cmNlLm5hbWUgfHwgc2VsZWN0ZWRBbGFybS5zb3VyY2UuaWQgfX1cbiAgICAgICAgICAgIDwvc21hbGw+XG4gICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInNob3dTb3VyY2VOYXZpZ2F0aW9uTGlua1wiPlxuICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICBjbGFzcz1cImJ0bi1saW5rIHAtMCB0ZXh0LWxlZnRcIlxuICAgICAgICAgICAgICB0aXRsZT1cInt7XG4gICAgICAgICAgICAgICAgbGlua1RpdGxlXG4gICAgICAgICAgICAgICAgICB8IHRyYW5zbGF0ZTogeyBhcHBOYW1lOiB1c2VyRGV2aWNlTWFuYWdlbWVudEFwcCB8IGh1bWFuaXplQXBwTmFtZSB8IGFzeW5jIH1cbiAgICAgICAgICAgICAgfX1cIlxuICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgKGNsaWNrKT1cImdvVG9BbGFybVNvdXJjZShzZWxlY3RlZEFsYXJtLmlkKVwiXG4gICAgICAgICAgICAgIGRhdGEtY3k9XCJhbGFybS1kZXRhaWxzLWRldmljZS1tYW5hZ2VtZW50LWxpbmtcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICB7eyB1c2VyRGV2aWNlTWFuYWdlbWVudEFwcCB8IGh1bWFuaXplQXBwTmFtZSB8IGFzeW5jIH19XG4gICAgICAgICAgICAgIDxpIGM4eUljb249XCJleHRlcm5hbC1saW5rXCI+PC9pPlxuICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDwvcD5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbiAgPGRpdiBjbGFzcz1cImNvbC14cy0xMiBjb2wtbWQtNiBkLWZsZXggcC1iLThcIj5cbiAgICA8ZGl2IGNsYXNzPVwiYm9yZGVyLWFsbCBmaXQtdyBkLWZsZXhcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJwLThcIj5cbiAgICAgICAgPHNwYW5cbiAgICAgICAgICBjbGFzcz1cImNpcmNsZS1pY29uLXdyYXBwZXJcIlxuICAgICAgICAgIFtuZ1N0eWxlXT1cInsgJ2JhY2tncm91bmQtY29sb3InOiB0eXBlQ29sb3IgfVwiXG4gICAgICAgID5cbiAgICAgICAgICA8aVxuICAgICAgICAgICAgY2xhc3M9XCJzdHJva2VkLWljb25cIlxuICAgICAgICAgICAgYzh5SWNvbj1cImJlbGxcIlxuICAgICAgICAgID48L2k+XG4gICAgICAgIDwvc3Bhbj5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiBjbGFzcz1cInAtdC04IHAtYi04IHAtci04IG1pbi13aWR0aC0wXCI+XG4gICAgICAgIDxwIGNsYXNzPVwidGV4dC1sYWJlbC1zbWFsbCBtLWItMCBtLXItOFwiPnt7ICdUeXBlJyB8IHRyYW5zbGF0ZSB9fTwvcD5cbiAgICAgICAgPHBcbiAgICAgICAgICBjbGFzcz1cInNtYWxsIHRleHQtdHJ1bmNhdGVcIlxuICAgICAgICAgIHRpdGxlPVwie3sgc2VsZWN0ZWRBbGFybS50eXBlIH19XCJcbiAgICAgICAgPlxuICAgICAgICAgIDxjb2RlPnt7IHNlbGVjdGVkQWxhcm0udHlwZSB9fTwvY29kZT5cbiAgICAgICAgPC9wPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuXG4gIDxkaXYgY2xhc3M9XCJjb2wteHMtMTIgY29sLW1kLTEyIHAtYi0xNlwiPlxuICAgIDxkaXYgY2xhc3M9XCJib3JkZXItYWxsIGZpdC13IGQtZmxleFwiPlxuICAgICAgPGRpdiBjbGFzcz1cInAtOFwiPlxuICAgICAgICA8aVxuICAgICAgICAgIGNsYXNzPVwiaWNvbi0yNCB0ZXh0LWdyYXktZGFyayBtLXQtNFwiXG4gICAgICAgICAgYzh5SWNvbj1cImNhbGVuZGFyXCJcbiAgICAgICAgPjwvaT5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiBjbGFzcz1cInAtdC04IHAtYi0wIHAtci04IGZsZXgtZ3Jvd1wiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiY29udGVudC1mbGV4LTUwXCI+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC00IHAtYi04XCI+XG4gICAgICAgICAgICA8cCBjbGFzcz1cInRleHQtbGFiZWwtc21hbGwgbS1iLTAgbS1yLThcIj57eyAnTGFzdCB1cGRhdGVkJyB8IHRyYW5zbGF0ZSB9fTwvcD5cbiAgICAgICAgICAgIDxwIGNsYXNzPVwic21hbGxcIj5cbiAgICAgICAgICAgICAge3sgbGFzdFVwZGF0ZWQgfCBjOHlEYXRlOiAnbWVkaXVtJyB9fVxuICAgICAgICAgICAgPC9wPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgIGNsYXNzPVwiY29sLTQgcC1iLThcIlxuICAgICAgICAgICAgKm5nSWY9XCJzZWxlY3RlZEFsYXJtLmNvdW50ID4gMVwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPHAgY2xhc3M9XCJ0ZXh0LWxhYmVsLXNtYWxsIG0tYi0wIG0tci04XCI+e3sgJ051bWJlciBvZiBvY2N1cnJlbmNlcycgfCB0cmFuc2xhdGUgfX08L3A+XG4gICAgICAgICAgICA8cD5cbiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJiYWRnZSBiYWRnZS1pbmZvXCI+e3sgc2VsZWN0ZWRBbGFybS5jb3VudCB9fTwvc3Bhbj5cbiAgICAgICAgICAgIDwvcD5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICBjbGFzcz1cImNvbC00IHAtYi04XCJcbiAgICAgICAgICAgICpuZ0lmPVwic2VsZWN0ZWRBbGFybS5jb3VudCA+IDFcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxwIGNsYXNzPVwidGV4dC1sYWJlbC1zbWFsbCBtLWItMCBtLXItOFwiPnt7ICdGaXJzdCBvY2N1cnJlbmNlJyB8IHRyYW5zbGF0ZSB9fTwvcD5cbiAgICAgICAgICAgIDxwIGNsYXNzPVwic21hbGxcIj5cbiAgICAgICAgICAgICAge3sgc2VsZWN0ZWRBbGFybS5jcmVhdGlvblRpbWUgfCBjOHlEYXRlOiAnbWVkaXVtJyB9fVxuICAgICAgICAgICAgPC9wPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cblxuICA8ZGl2XG4gICAgY2xhc3M9XCJjb2wteHMtMTIgY29sLW1kLTEyIHAtYi0xNlwiXG4gICAgKm5nSWY9XCJjdXN0b21GcmFnbWVudHNcIlxuICA+XG4gICAgPGRpdiBjbGFzcz1cImJvcmRlci1hbGwgZml0LXcgZC1mbGV4XCI+XG4gICAgICA8ZGl2IGNsYXNzPVwicC04XCI+XG4gICAgICAgIDxpXG4gICAgICAgICAgY2xhc3M9XCJpY29uLTI0IHRleHQtZ3JheS1kYXJrIG0tdC00XCJcbiAgICAgICAgICBjOHlJY29uPVwib3V0Z29pbmctZGF0YVwiXG4gICAgICAgID48L2k+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXZcbiAgICAgICAgY2xhc3M9XCJwLXQtOCBwLWItMCBwLXItOCBmbGV4LWdyb3dcIlxuICAgICAgICBkYXRhLWN5PVwiYWxhcm0tZGV0YWlscy1jdXN0b20tZGF0YVwiXG4gICAgICA+XG4gICAgICAgIDxwIGNsYXNzPVwidGV4dC1sYWJlbC1zbWFsbCBtLWItNCBtLXItOFwiPnt7ICdDdXN0b20gZGF0YScgfCB0cmFuc2xhdGUgfX08L3A+XG4gICAgICAgIDxwcmU+PGNvZGU+e3sgY3VzdG9tRnJhZ21lbnRzIHwganNvbiB9fTwvY29kZT48L3ByZT5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbjwvZGl2PlxuXG48ZGl2IGNsYXNzPVwiZC1mbGV4IGZsZXgtd3JhcCBnYXAtOFwiPlxuICA8YnV0dG9uXG4gICAgY2xhc3M9XCJidG4gYnRuLWRlZmF1bHQgYnRuLXNtXCJcbiAgICBbdGl0bGVdPVwiJ1JlbG9hZCBhdWRpdCBsb2dzJyB8IHRyYW5zbGF0ZVwiXG4gICAgdHlwZT1cInN1Ym1pdFwiXG4gICAgKGNsaWNrKT1cInJlbG9hZEF1ZGl0TG9nKHRydWUsIHRydWUpXCJcbiAgPlxuICAgIDxpXG4gICAgICBjOHlJY29uPVwicmVmcmVzaFwiXG4gICAgICBbbmdDbGFzc109XCJ7ICdpY29uLXNwaW4nOiBpc0xvYWRpbmcgfVwiXG4gICAgPjwvaT5cbiAgICB7eyAnUmVsb2FkIGF1ZGl0IGxvZ3MnIHwgdHJhbnNsYXRlIH19XG4gIDwvYnV0dG9uPlxuXG4gIDxidXR0b25cbiAgICBjbGFzcz1cImJ0biBidG4tZGVmYXVsdCBidG4tc21cIlxuICAgIFt0aXRsZV09XCJcbiAgICAgIHNlbGVjdGVkQWxhcm0uc3RhdHVzICE9PSBBQ0tOT1dMRURHRURfU1RBVFVTX1ZBTFVFXG4gICAgICAgID8gKEFDS05PV0xFREdFX0xBQkVMIHwgdHJhbnNsYXRlKVxuICAgICAgICA6IChSRUFDVElWQVRFX0xBQkVMIHwgdHJhbnNsYXRlKVxuICAgIFwiXG4gICAgdHlwZT1cInN1Ym1pdFwiXG4gICAgKGNsaWNrKT1cIlxuICAgICAgb25VcGRhdGVEZXRhaWxzKFxuICAgICAgICBzZWxlY3RlZEFsYXJtLnN0YXR1cyAhPT0gQUNLTk9XTEVER0VEX1NUQVRVU19WQUxVRVxuICAgICAgICAgID8gQUNLTk9XTEVER0VEX1NUQVRVU19WQUxVRVxuICAgICAgICAgIDogQUNUSVZFX1NUQVRVU19WQUxVRVxuICAgICAgKVxuICAgIFwiXG4gICAgW2Rpc2FibGVkXT1cInNlbGVjdGVkQWxhcm0uc3RhdHVzID09PSBDTEVBUkVEX1NUQVRVU19WQUxVRSB8fCBpc0FsYXJtU3RhdHVzQ2hhbmdpbmdcIlxuICA+XG4gICAgPGlcbiAgICAgIFtjOHlJY29uXT1cInNlbGVjdGVkQWxhcm0uc3RhdHVzICE9PSBBQ0tOT1dMRURHRURfU1RBVFVTX1ZBTFVFID8gQkVMTF9TTEFTSF9JQ09OIDogQkVMTF9JQ09OXCJcbiAgICA+PC9pPlxuICAgIHt7XG4gICAgICBzZWxlY3RlZEFsYXJtLnN0YXR1cyAhPT0gQUNLTk9XTEVER0VEX1NUQVRVU19WQUxVRVxuICAgICAgICA/IChBQ0tOT1dMRURHRV9MQUJFTCB8IHRyYW5zbGF0ZSlcbiAgICAgICAgOiAoUkVBQ1RJVkFURV9MQUJFTCB8IHRyYW5zbGF0ZSlcbiAgICB9fVxuICA8L2J1dHRvbj5cblxuICA8YnV0dG9uXG4gICAgY2xhc3M9XCJidG4gYnRuLWRlZmF1bHQgYnRuLXNtXCJcbiAgICBbdGl0bGVdPVwiJ0NyZWF0ZSBzbWFydCBydWxlJyB8IHRyYW5zbGF0ZVwiXG4gICAgdHlwZT1cInN1Ym1pdFwiXG4gICAgKm5nSWY9XCJpc0NyZWF0ZVNtYXJ0UnVsZXNCdXR0b25BdmFpbGFibGVcIlxuICAgIChjbGljayk9XCJjcmVhdGVTbWFydFJ1bGUoKVwiXG4gID5cbiAgICA8aSBjOHlJY29uPVwiYzh5LWljb24gYzh5LWljb24tc21hcnQtcnVsZXNcIj48L2k+XG4gICAge3sgJ0NyZWF0ZSBzbWFydCBydWxlJyB8IHRyYW5zbGF0ZSB9fVxuICA8L2J1dHRvbj5cbiAgPGJ1dHRvblxuICAgIGNsYXNzPVwiYnRuIGJ0bi1kZWZhdWx0IGJ0bi1zbVwiXG4gICAgW3RpdGxlXT1cIidDbGVhcmBhbGFybWAnIHwgdHJhbnNsYXRlXCJcbiAgICB0eXBlPVwic3VibWl0XCJcbiAgICAoY2xpY2spPVwib25VcGRhdGVEZXRhaWxzKENMRUFSRURfU1RBVFVTX1ZBTFVFKVwiXG4gICAgW2Rpc2FibGVkXT1cInNlbGVjdGVkQWxhcm0uc3RhdHVzID09PSBDTEVBUkVEX1NUQVRVU19WQUxVRVwiXG4gID5cbiAgICA8aSBjOHlJY29uPVwiYzh5LWFsZXJ0LWlkbGVcIj48L2k+XG4gICAge3sgJ0NsZWFyYGFsYXJtYCcgfCB0cmFuc2xhdGUgfX1cbiAgPC9idXR0b24+XG5cbiAgPGJ1dHRvblxuICAgICpuZ0Zvcj1cImxldCBidXR0b24gb2Ygc2VsZWN0ZWRBbGFybSB8IGFsYXJtRGV0YWlsc0J1dHRvbjogc2VsZWN0ZWRBbGFybU1PIHwgYXN5bmNcIlxuICAgIGNsYXNzPVwiYnRuIGJ0bi1kZWZhdWx0IGJ0bi1zbVwiXG4gICAgW25nQ2xhc3NdPVwiYnV0dG9uLmFkZGl0aW9uYWxCdXR0b25DbGFzc2VzXCJcbiAgICBbdGl0bGVdPVwiYnV0dG9uLnRpdGxlIHwgdHJhbnNsYXRlXCJcbiAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAoY2xpY2spPVwiZGV0YWlsc0J1dHRvbkFjdGlvbihidXR0b24sIHNlbGVjdGVkQWxhcm0pXCJcbiAgICBbZGlzYWJsZWRdPVwiYnV0dG9uLmRpc2FibGVkXCJcbiAgPlxuICAgIDxpIFtuZ0NsYXNzXT1cImJ1dHRvbi5hZGRpdGlvbmFsSWNvbkNsYXNzZXNcIiBbYzh5SWNvbl09XCJidXR0b24uaWNvblwiPjwvaT5cbiAgICA8c3BhbiAqbmdJZj1cImJ1dHRvbi5sYWJlbFwiPnt7IGJ1dHRvbi5sYWJlbCB8IHRyYW5zbGF0ZSB9fTwvc3Bhbj5cbiAgPC9idXR0b24+XG48L2Rpdj5cblxuPG5nLXRlbXBsYXRlICNub0F1ZGl0TG9nQXZhaWxhYmxlPlxuICA8ZGl2IGNsYXNzPVwicC0xNlwiPlxuICAgIDxjOHktdWktZW1wdHktc3RhdGVcbiAgICAgIFtpY29uXT1cIidhcmNoaXZlJ1wiXG4gICAgICBbdGl0bGVdPVwiJ05vIGF1ZGl0IGxvZ3MgZm91bmQuJyB8IHRyYW5zbGF0ZVwiXG4gICAgICBbaG9yaXpvbnRhbF09XCJ0cnVlXCJcbiAgICA+PC9jOHktdWktZW1wdHktc3RhdGU+XG4gIDwvZGl2PlxuPC9uZy10ZW1wbGF0ZT5cblxuPGRpdiBjbGFzcz1cImxlZ2VuZCBmb3JtLWJsb2NrXCI+e3sgJ0F1ZGl0IGxvZ3MnIHwgdHJhbnNsYXRlIH19PC9kaXY+XG5cbjxuZy1jb250YWluZXIgKm5nSWY9XCJpc0xvYWRpbmcgfHwgYXVkaXRMb2c/LmRhdGEubGVuZ3RoOyBlbHNlIG5vQXVkaXRMb2dBdmFpbGFibGVcIj5cbiAgPGM4eS1sb2FkaW5nICpuZ0lmPVwiaXNMb2FkaW5nXCI+PC9jOHktbG9hZGluZz5cblxuICA8Yzh5LWxpc3QtZ3JvdXBcbiAgICBkYXRhLWN5PVwiYzh5LWFsYXJtcy1kZXRhaWxzLS1hdWRpdC1sb2dzXCJcbiAgICAqbmdJZj1cIiFpc0xvYWRpbmdcIlxuICA+XG4gICAgPGM4eS1saS10aW1lbGluZSAqYzh5Rm9yPVwibGV0IGxvZyBvZiBhdWRpdExvZzsgbG9hZE1vcmU6ICdoaWRkZW4nXCI+XG4gICAgICB7eyBsb2cuY3JlYXRpb25UaW1lIHwgZGF0ZTogJ21lZGl1bURhdGUnIH19XG4gICAgICB7eyBsb2cuY3JlYXRpb25UaW1lIHwgZGF0ZTogJ21lZGl1bVRpbWUnIH19XG4gICAgICA8Yzh5LWxpPlxuICAgICAgICA8Yzh5LWxpLWJvZHk+XG4gICAgICAgICAgPHAgY2xhc3M9XCJ0ZXh0LXRydW5jYXRlLXdyYXAgc2VwYXJhdG9yLWJvdHRvbSBwLWItNFwiPlxuICAgICAgICAgICAge3sgbG9nIHwgYXVkaXRDaGFuZ2VzTWVzc2FnZSB9fVxuICAgICAgICAgIDwvcD5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiYzh5LWxpc3RfX2l0ZW1fX2Zvb3RlclwiPlxuICAgICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICAgY2xhc3M9XCJtLXItMTYgc21hbGxcIlxuICAgICAgICAgICAgICAqbmdJZj1cImxvZy51c2VyXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ0ZXh0LWxhYmVsLXNtYWxsXCI+XG4gICAgICAgICAgICAgICAge3sgJ2J5YHVzZXJgJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgIHt7IGxvZy51c2VyIH19XG4gICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cInNtYWxsXCI+XG4gICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidGV4dC1sYWJlbC1zbWFsbFwiPlxuICAgICAgICAgICAgICAgIHt7ICdkZXZpY2UgdGltZScgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICB7eyBsb2cudGltZSB8IGM4eURhdGU6ICdtZWRpdW0nIH19XG4gICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvYzh5LWxpLWJvZHk+XG4gICAgICA8L2M4eS1saT5cbiAgICA8L2M4eS1saS10aW1lbGluZT5cbiAgPC9jOHktbGlzdC1ncm91cD5cbjwvbmctY29udGFpbmVyPlxuIl19
@@ -1,52 +1,42 @@
1
1
  import { Component } from '@angular/core';
2
2
  import { ActivatedRoute, Router } from '@angular/router';
3
- import { AlarmService } from '@c8y/client';
4
- import { map, switchMap, tap, Subject, takeUntil, shareReplay } from 'rxjs';
5
- import { AlarmDetailsService } from './alarm-details.service';
6
- import { ContextRouteService } from '@c8y/ngx-components';
3
+ import { ContextRouteService, gettext, ViewContext } from '@c8y/ngx-components';
4
+ import { of } from 'rxjs';
7
5
  import { AlarmsViewService } from './alarms-view.service';
8
6
  import * as i0 from "@angular/core";
9
- import * as i1 from "./alarm-details.service";
10
- import * as i2 from "@angular/router";
11
- import * as i3 from "@c8y/client";
12
- import * as i4 from "@c8y/ngx-components";
13
- import * as i5 from "./alarms-view.service";
14
- import * as i6 from "@angular/common";
15
- import * as i7 from "./alarm-details.component";
16
- import * as i8 from "@ngx-translate/core";
7
+ import * as i1 from "@angular/router";
8
+ import * as i2 from "@c8y/ngx-components";
9
+ import * as i3 from "./alarms-view.service";
10
+ import * as i4 from "@angular/common";
11
+ import * as i5 from "./alarm-details.component";
12
+ import * as i6 from "@ngx-translate/core";
17
13
  export class AlarmInfoComponent {
18
- constructor(alarmDetailsService, activatedRoute, alarmsService, router, contextRouteService, alarmsViewService) {
19
- this.alarmDetailsService = alarmDetailsService;
14
+ constructor(activatedRoute, router, contextRouteService, alarmsViewService) {
20
15
  this.activatedRoute = activatedRoute;
21
- this.alarmsService = alarmsService;
22
16
  this.router = router;
23
17
  this.contextRouteService = contextRouteService;
24
18
  this.alarmsViewService = alarmsViewService;
25
- this.destroy$ = new Subject();
19
+ this.isContextRoute = false;
20
+ this.TITLE = gettext('Alarms');
26
21
  }
27
- ngOnInit() {
28
- this.selectedAlarm$ = this.activatedRoute.params.pipe(tap(() => (this.isLoading = true)), switchMap(params => this.alarmsService.detail(params.id)), map(alarmResult => alarmResult.data), tap(() => this.loadingDone()), shareReplay(), takeUntil(this.destroy$));
29
- }
30
- ngOnDestroy() {
31
- this.destroy$.next();
32
- this.destroy$.complete();
33
- }
34
- async loadingDone() {
35
- this.isSmartRulesServiceSubscribed = !!(await this.alarmDetailsService.getApplication(this.alarmDetailsService.SMART_RULES_APPLICATION_KEY));
36
- this.hasAnyRoleAllowingToCreateSmartRule =
37
- this.alarmDetailsService.checkIfHasAnyRoleAllowingToCreateSmartRule();
38
- this.isLoading = false;
22
+ async ngOnInit() {
23
+ const contextData = this.contextRouteService.getContextData(this.activatedRoute);
24
+ this.selectedAlarm$ = of(contextData.contextData);
25
+ this.isContextRoute = this.contextRouteService.isContextRoute(this.router.url, [
26
+ ViewContext.Device,
27
+ ViewContext.Group
28
+ ]);
39
29
  }
40
30
  back() {
41
31
  const contextData = this.contextRouteService.getContextData(this.activatedRoute);
42
32
  const backLink = this.alarmsViewService.getRouterNavigationArray(contextData);
43
33
  this.router.navigate(backLink, { queryParamsHandling: 'preserve' });
44
34
  }
45
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: AlarmInfoComponent, deps: [{ token: i1.AlarmDetailsService }, { token: i2.ActivatedRoute }, { token: i3.AlarmService }, { token: i2.Router }, { token: i4.ContextRouteService }, { token: i5.AlarmsViewService }], target: i0.ɵɵFactoryTarget.Component }); }
46
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.9", type: AlarmInfoComponent, selector: "c8y-alarm-info", ngImport: i0, template: "<div\n class=\"inner-scroll split-view__detail split-view__detail--selected\"\n *ngIf=\"selectedAlarm$ | async\"\n>\n <div\n class=\"card-header gap-16 d-block-xs d-block-sm p-l-24 p-r-24 p-t-16 separator sticky-top bg-component\"\n >\n <button\n class=\"btn btn-clean text-primary visible-sm visible-xs\"\n [title]=\"'Back' | translate\"\n (click)=\"back()\"\n >\n <i c8yIcon=\"chevron-left\"></i>\n <span>{{ 'Back' | translate }}</span>\n </button>\n\n <div class=\"flex-no-shrink a-s-start\"></div>\n <div class=\"flex-grow d-col\">\n <div class=\"text-break-word flex-grow text-16\">\n {{ (selectedAlarm$ | async)?.text | translate }}\n </div>\n </div>\n </div>\n <div\n class=\"card-block overflow-visible p-l-24 p-r-24\"\n *ngIf=\"!isLoading; else loading\"\n >\n <c8y-alarm-details\n [isSmartRulesServiceSubscribed]=\"isSmartRulesServiceSubscribed\"\n [hasAnyRoleAllowingToCreateSmartRule]=\"hasAnyRoleAllowingToCreateSmartRule\"\n [selectedAlarm]=\"selectedAlarm$ | async\"\n ></c8y-alarm-details>\n </div>\n <ng-template #loading>\n <div class=\"d-flex d-col a-i-center j-c-center fit-h\">\n <c8y-loading></c8y-loading>\n </div>\n </ng-template>\n</div>\n", dependencies: [{ kind: "directive", type: i4.IconDirective, selector: "[c8yIcon]", inputs: ["c8yIcon"] }, { kind: "directive", type: i6.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i4.LoadingComponent, selector: "c8y-loading", inputs: ["layout", "progress", "message"] }, { kind: "component", type: i7.AlarmDetailsComponent, selector: "c8y-alarm-details", inputs: ["selectedAlarm", "hasAnyRoleAllowingToCreateSmartRule", "isSmartRulesServiceSubscribed"] }, { kind: "pipe", type: i6.AsyncPipe, name: "async" }, { kind: "pipe", type: i8.TranslatePipe, name: "translate" }] }); }
35
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: AlarmInfoComponent, deps: [{ token: i1.ActivatedRoute }, { token: i1.Router }, { token: i2.ContextRouteService }, { token: i3.AlarmsViewService }], target: i0.ɵɵFactoryTarget.Component }); }
36
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.9", type: AlarmInfoComponent, selector: "c8y-alarm-info", ngImport: i0, template: "<ng-container *ngIf=\"!isContextRoute\">\n <c8y-title>{{ TITLE | translate }}</c8y-title>\n</ng-container>\n\n<div\n class=\"inner-scroll split-view__detail split-view__detail--selected\"\n *ngIf=\"selectedAlarm$ | async\"\n>\n <div class=\"sticky-top bg-component\">\n <div class=\"card-header gap-16 d-block-xs d-block-sm p-l-24 p-r-24 p-t-16 separator\">\n <button\n class=\"btn btn-clean text-primary visible-sm visible-xs\"\n [title]=\"'Back' | translate\"\n (click)=\"back()\"\n >\n <i c8yIcon=\"chevron-left\"></i>\n <span>{{ 'Back' | translate }}</span>\n </button>\n\n <div class=\"flex-no-shrink a-s-start\"></div>\n <div class=\"flex-grow d-col\">\n <div\n class=\"text-break-word flex-grow text-16\"\n data-cy=\"c8y-alarms-info--title\"\n >\n {{ (selectedAlarm$ | async)?.text | translate }}\n </div>\n </div>\n </div>\n <div class=\"p-relative\">\n <c8y-tabs-outlet\n outletName=\"alarms\"\n orientation=\"horizontal\"\n ></c8y-tabs-outlet>\n </div>\n <div class=\"card-block overflow-visible p-l-24 p-r-24\">\n <c8y-alarm-details [selectedAlarm]=\"selectedAlarm$ | async\"></c8y-alarm-details>\n </div>\n </div>\n</div>\n", dependencies: [{ kind: "directive", type: i2.IconDirective, selector: "[c8yIcon]", inputs: ["c8yIcon"] }, { kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i2.TitleComponent, selector: "c8y-title", inputs: ["pageTitleUpdate"] }, { kind: "component", type: i2.TabsOutletComponent, selector: "c8y-tabs-outlet,c8y-ui-tabs", inputs: ["tabs", "orientation", "navigatorOpen", "outletName", "context", "hasHeader"] }, { kind: "component", type: i5.AlarmDetailsComponent, selector: "c8y-alarm-details", inputs: ["selectedAlarm"] }, { kind: "pipe", type: i4.AsyncPipe, name: "async" }, { kind: "pipe", type: i6.TranslatePipe, name: "translate" }] }); }
47
37
  }
48
38
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: AlarmInfoComponent, decorators: [{
49
39
  type: Component,
50
- args: [{ selector: 'c8y-alarm-info', template: "<div\n class=\"inner-scroll split-view__detail split-view__detail--selected\"\n *ngIf=\"selectedAlarm$ | async\"\n>\n <div\n class=\"card-header gap-16 d-block-xs d-block-sm p-l-24 p-r-24 p-t-16 separator sticky-top bg-component\"\n >\n <button\n class=\"btn btn-clean text-primary visible-sm visible-xs\"\n [title]=\"'Back' | translate\"\n (click)=\"back()\"\n >\n <i c8yIcon=\"chevron-left\"></i>\n <span>{{ 'Back' | translate }}</span>\n </button>\n\n <div class=\"flex-no-shrink a-s-start\"></div>\n <div class=\"flex-grow d-col\">\n <div class=\"text-break-word flex-grow text-16\">\n {{ (selectedAlarm$ | async)?.text | translate }}\n </div>\n </div>\n </div>\n <div\n class=\"card-block overflow-visible p-l-24 p-r-24\"\n *ngIf=\"!isLoading; else loading\"\n >\n <c8y-alarm-details\n [isSmartRulesServiceSubscribed]=\"isSmartRulesServiceSubscribed\"\n [hasAnyRoleAllowingToCreateSmartRule]=\"hasAnyRoleAllowingToCreateSmartRule\"\n [selectedAlarm]=\"selectedAlarm$ | async\"\n ></c8y-alarm-details>\n </div>\n <ng-template #loading>\n <div class=\"d-flex d-col a-i-center j-c-center fit-h\">\n <c8y-loading></c8y-loading>\n </div>\n </ng-template>\n</div>\n" }]
51
- }], ctorParameters: () => [{ type: i1.AlarmDetailsService }, { type: i2.ActivatedRoute }, { type: i3.AlarmService }, { type: i2.Router }, { type: i4.ContextRouteService }, { type: i5.AlarmsViewService }] });
52
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWxhcm0taW5mby5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9hbGFybXMvYWxhcm0taW5mby5jb21wb25lbnQudHMiLCIuLi8uLi8uLi9hbGFybXMvYWxhcm0taW5mby5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFxQixNQUFNLGVBQWUsQ0FBQztBQUM3RCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3pELE9BQU8sRUFBRSxZQUFZLEVBQVUsTUFBTSxhQUFhLENBQUM7QUFDbkQsT0FBTyxFQUFjLEdBQUcsRUFBRSxTQUFTLEVBQUUsR0FBRyxFQUFFLE9BQU8sRUFBRSxTQUFTLEVBQUUsV0FBVyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ3hGLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQzlELE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQzFELE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLHVCQUF1QixDQUFDOzs7Ozs7Ozs7O0FBTTFELE1BQU0sT0FBTyxrQkFBa0I7SUFRN0IsWUFDVSxtQkFBd0MsRUFDeEMsY0FBOEIsRUFDOUIsYUFBMkIsRUFDM0IsTUFBYyxFQUNkLG1CQUF3QyxFQUN4QyxpQkFBb0M7UUFMcEMsd0JBQW1CLEdBQW5CLG1CQUFtQixDQUFxQjtRQUN4QyxtQkFBYyxHQUFkLGNBQWMsQ0FBZ0I7UUFDOUIsa0JBQWEsR0FBYixhQUFhLENBQWM7UUFDM0IsV0FBTSxHQUFOLE1BQU0sQ0FBUTtRQUNkLHdCQUFtQixHQUFuQixtQkFBbUIsQ0FBcUI7UUFDeEMsc0JBQWlCLEdBQWpCLGlCQUFpQixDQUFtQjtRQVJ0QyxhQUFRLEdBQUcsSUFBSSxPQUFPLEVBQVEsQ0FBQztJQVNwQyxDQUFDO0lBRUosUUFBUTtRQUNOLElBQUksQ0FBQyxjQUFjLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUNuRCxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxDQUFDLEVBQ2xDLFNBQVMsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUN6RCxHQUFHLENBQUMsV0FBVyxDQUFDLEVBQUUsQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLEVBQ3BDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUMsRUFDN0IsV0FBVyxFQUFFLEVBQ2IsU0FBUyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FDekIsQ0FBQztJQUNKLENBQUM7SUFFRCxXQUFXO1FBQ1QsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUNyQixJQUFJLENBQUMsUUFBUSxDQUFDLFFBQVEsRUFBRSxDQUFDO0lBQzNCLENBQUM7SUFFRCxLQUFLLENBQUMsV0FBVztRQUNmLElBQUksQ0FBQyw2QkFBNkIsR0FBRyxDQUFDLENBQUMsQ0FBQyxNQUFNLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxjQUFjLENBQ25GLElBQUksQ0FBQyxtQkFBbUIsQ0FBQywyQkFBMkIsQ0FDckQsQ0FBQyxDQUFDO1FBQ0gsSUFBSSxDQUFDLG1DQUFtQztZQUN0QyxJQUFJLENBQUMsbUJBQW1CLENBQUMsMENBQTBDLEVBQUUsQ0FBQztRQUN4RSxJQUFJLENBQUMsU0FBUyxHQUFHLEtBQUssQ0FBQztJQUN6QixDQUFDO0lBRUQsSUFBSTtRQUNGLE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDO1FBQ2pGLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyx3QkFBd0IsQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUM5RSxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxRQUFRLEVBQUUsRUFBRSxtQkFBbUIsRUFBRSxVQUFVLEVBQUUsQ0FBQyxDQUFDO0lBQ3RFLENBQUM7OEdBOUNVLGtCQUFrQjtrR0FBbEIsa0JBQWtCLHNEQ1ovQiw2dkNBdUNBOzsyRkQzQmEsa0JBQWtCO2tCQUo5QixTQUFTOytCQUNFLGdCQUFnQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgT25EZXN0cm95LCBPbkluaXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEFjdGl2YXRlZFJvdXRlLCBSb3V0ZXIgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuaW1wb3J0IHsgQWxhcm1TZXJ2aWNlLCBJQWxhcm0gfSBmcm9tICdAYzh5L2NsaWVudCc7XG5pbXBvcnQgeyBPYnNlcnZhYmxlLCBtYXAsIHN3aXRjaE1hcCwgdGFwLCBTdWJqZWN0LCB0YWtlVW50aWwsIHNoYXJlUmVwbGF5IH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBBbGFybURldGFpbHNTZXJ2aWNlIH0gZnJvbSAnLi9hbGFybS1kZXRhaWxzLnNlcnZpY2UnO1xuaW1wb3J0IHsgQ29udGV4dFJvdXRlU2VydmljZSB9IGZyb20gJ0BjOHkvbmd4LWNvbXBvbmVudHMnO1xuaW1wb3J0IHsgQWxhcm1zVmlld1NlcnZpY2UgfSBmcm9tICcuL2FsYXJtcy12aWV3LnNlcnZpY2UnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdjOHktYWxhcm0taW5mbycsXG4gIHRlbXBsYXRlVXJsOiAnLi9hbGFybS1pbmZvLmNvbXBvbmVudC5odG1sJ1xufSlcbmV4cG9ydCBjbGFzcyBBbGFybUluZm9Db21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSB7XG4gIHNlbGVjdGVkQWxhcm0kOiBPYnNlcnZhYmxlPElBbGFybT47XG5cbiAgaGFzQW55Um9sZUFsbG93aW5nVG9DcmVhdGVTbWFydFJ1bGU6IGJvb2xlYW47XG4gIGlzTG9hZGluZzogYm9vbGVhbjtcbiAgaXNTbWFydFJ1bGVzU2VydmljZVN1YnNjcmliZWQ6IGJvb2xlYW47XG4gIHByaXZhdGUgZGVzdHJveSQgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgYWxhcm1EZXRhaWxzU2VydmljZTogQWxhcm1EZXRhaWxzU2VydmljZSxcbiAgICBwcml2YXRlIGFjdGl2YXRlZFJvdXRlOiBBY3RpdmF0ZWRSb3V0ZSxcbiAgICBwcml2YXRlIGFsYXJtc1NlcnZpY2U6IEFsYXJtU2VydmljZSxcbiAgICBwcml2YXRlIHJvdXRlcjogUm91dGVyLFxuICAgIHByaXZhdGUgY29udGV4dFJvdXRlU2VydmljZTogQ29udGV4dFJvdXRlU2VydmljZSxcbiAgICBwcml2YXRlIGFsYXJtc1ZpZXdTZXJ2aWNlOiBBbGFybXNWaWV3U2VydmljZVxuICApIHt9XG5cbiAgbmdPbkluaXQoKSB7XG4gICAgdGhpcy5zZWxlY3RlZEFsYXJtJCA9IHRoaXMuYWN0aXZhdGVkUm91dGUucGFyYW1zLnBpcGUoXG4gICAgICB0YXAoKCkgPT4gKHRoaXMuaXNMb2FkaW5nID0gdHJ1ZSkpLFxuICAgICAgc3dpdGNoTWFwKHBhcmFtcyA9PiB0aGlzLmFsYXJtc1NlcnZpY2UuZGV0YWlsKHBhcmFtcy5pZCkpLFxuICAgICAgbWFwKGFsYXJtUmVzdWx0ID0+IGFsYXJtUmVzdWx0LmRhdGEpLFxuICAgICAgdGFwKCgpID0+IHRoaXMubG9hZGluZ0RvbmUoKSksXG4gICAgICBzaGFyZVJlcGxheSgpLFxuICAgICAgdGFrZVVudGlsKHRoaXMuZGVzdHJveSQpXG4gICAgKTtcbiAgfVxuXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIHRoaXMuZGVzdHJveSQubmV4dCgpO1xuICAgIHRoaXMuZGVzdHJveSQuY29tcGxldGUoKTtcbiAgfVxuXG4gIGFzeW5jIGxvYWRpbmdEb25lKCkge1xuICAgIHRoaXMuaXNTbWFydFJ1bGVzU2VydmljZVN1YnNjcmliZWQgPSAhIShhd2FpdCB0aGlzLmFsYXJtRGV0YWlsc1NlcnZpY2UuZ2V0QXBwbGljYXRpb24oXG4gICAgICB0aGlzLmFsYXJtRGV0YWlsc1NlcnZpY2UuU01BUlRfUlVMRVNfQVBQTElDQVRJT05fS0VZXG4gICAgKSk7XG4gICAgdGhpcy5oYXNBbnlSb2xlQWxsb3dpbmdUb0NyZWF0ZVNtYXJ0UnVsZSA9XG4gICAgICB0aGlzLmFsYXJtRGV0YWlsc1NlcnZpY2UuY2hlY2tJZkhhc0FueVJvbGVBbGxvd2luZ1RvQ3JlYXRlU21hcnRSdWxlKCk7XG4gICAgdGhpcy5pc0xvYWRpbmcgPSBmYWxzZTtcbiAgfVxuXG4gIGJhY2soKTogdm9pZCB7XG4gICAgY29uc3QgY29udGV4dERhdGEgPSB0aGlzLmNvbnRleHRSb3V0ZVNlcnZpY2UuZ2V0Q29udGV4dERhdGEodGhpcy5hY3RpdmF0ZWRSb3V0ZSk7XG4gICAgY29uc3QgYmFja0xpbmsgPSB0aGlzLmFsYXJtc1ZpZXdTZXJ2aWNlLmdldFJvdXRlck5hdmlnYXRpb25BcnJheShjb250ZXh0RGF0YSk7XG4gICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoYmFja0xpbmssIHsgcXVlcnlQYXJhbXNIYW5kbGluZzogJ3ByZXNlcnZlJyB9KTtcbiAgfVxufVxuIiwiPGRpdlxuICBjbGFzcz1cImlubmVyLXNjcm9sbCBzcGxpdC12aWV3X19kZXRhaWwgc3BsaXQtdmlld19fZGV0YWlsLS1zZWxlY3RlZFwiXG4gICpuZ0lmPVwic2VsZWN0ZWRBbGFybSQgfCBhc3luY1wiXG4+XG4gIDxkaXZcbiAgICBjbGFzcz1cImNhcmQtaGVhZGVyIGdhcC0xNiBkLWJsb2NrLXhzIGQtYmxvY2stc20gcC1sLTI0IHAtci0yNCBwLXQtMTYgc2VwYXJhdG9yIHN0aWNreS10b3AgYmctY29tcG9uZW50XCJcbiAgPlxuICAgIDxidXR0b25cbiAgICAgIGNsYXNzPVwiYnRuIGJ0bi1jbGVhbiB0ZXh0LXByaW1hcnkgdmlzaWJsZS1zbSB2aXNpYmxlLXhzXCJcbiAgICAgIFt0aXRsZV09XCInQmFjaycgfCB0cmFuc2xhdGVcIlxuICAgICAgKGNsaWNrKT1cImJhY2soKVwiXG4gICAgPlxuICAgICAgPGkgYzh5SWNvbj1cImNoZXZyb24tbGVmdFwiPjwvaT5cbiAgICAgIDxzcGFuPnt7ICdCYWNrJyB8IHRyYW5zbGF0ZSB9fTwvc3Bhbj5cbiAgICA8L2J1dHRvbj5cblxuICAgIDxkaXYgY2xhc3M9XCJmbGV4LW5vLXNocmluayBhLXMtc3RhcnRcIj48L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPVwiZmxleC1ncm93IGQtY29sXCI+XG4gICAgICA8ZGl2IGNsYXNzPVwidGV4dC1icmVhay13b3JkIGZsZXgtZ3JvdyB0ZXh0LTE2XCI+XG4gICAgICAgIHt7IChzZWxlY3RlZEFsYXJtJCB8IGFzeW5jKT8udGV4dCB8IHRyYW5zbGF0ZSB9fVxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuICA8ZGl2XG4gICAgY2xhc3M9XCJjYXJkLWJsb2NrIG92ZXJmbG93LXZpc2libGUgcC1sLTI0IHAtci0yNFwiXG4gICAgKm5nSWY9XCIhaXNMb2FkaW5nOyBlbHNlIGxvYWRpbmdcIlxuICA+XG4gICAgPGM4eS1hbGFybS1kZXRhaWxzXG4gICAgICBbaXNTbWFydFJ1bGVzU2VydmljZVN1YnNjcmliZWRdPVwiaXNTbWFydFJ1bGVzU2VydmljZVN1YnNjcmliZWRcIlxuICAgICAgW2hhc0FueVJvbGVBbGxvd2luZ1RvQ3JlYXRlU21hcnRSdWxlXT1cImhhc0FueVJvbGVBbGxvd2luZ1RvQ3JlYXRlU21hcnRSdWxlXCJcbiAgICAgIFtzZWxlY3RlZEFsYXJtXT1cInNlbGVjdGVkQWxhcm0kIHwgYXN5bmNcIlxuICAgID48L2M4eS1hbGFybS1kZXRhaWxzPlxuICA8L2Rpdj5cbiAgPG5nLXRlbXBsYXRlICNsb2FkaW5nPlxuICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggZC1jb2wgYS1pLWNlbnRlciBqLWMtY2VudGVyIGZpdC1oXCI+XG4gICAgICA8Yzh5LWxvYWRpbmc+PC9jOHktbG9hZGluZz5cbiAgICA8L2Rpdj5cbiAgPC9uZy10ZW1wbGF0ZT5cbjwvZGl2PlxuIl19
40
+ args: [{ selector: 'c8y-alarm-info', template: "<ng-container *ngIf=\"!isContextRoute\">\n <c8y-title>{{ TITLE | translate }}</c8y-title>\n</ng-container>\n\n<div\n class=\"inner-scroll split-view__detail split-view__detail--selected\"\n *ngIf=\"selectedAlarm$ | async\"\n>\n <div class=\"sticky-top bg-component\">\n <div class=\"card-header gap-16 d-block-xs d-block-sm p-l-24 p-r-24 p-t-16 separator\">\n <button\n class=\"btn btn-clean text-primary visible-sm visible-xs\"\n [title]=\"'Back' | translate\"\n (click)=\"back()\"\n >\n <i c8yIcon=\"chevron-left\"></i>\n <span>{{ 'Back' | translate }}</span>\n </button>\n\n <div class=\"flex-no-shrink a-s-start\"></div>\n <div class=\"flex-grow d-col\">\n <div\n class=\"text-break-word flex-grow text-16\"\n data-cy=\"c8y-alarms-info--title\"\n >\n {{ (selectedAlarm$ | async)?.text | translate }}\n </div>\n </div>\n </div>\n <div class=\"p-relative\">\n <c8y-tabs-outlet\n outletName=\"alarms\"\n orientation=\"horizontal\"\n ></c8y-tabs-outlet>\n </div>\n <div class=\"card-block overflow-visible p-l-24 p-r-24\">\n <c8y-alarm-details [selectedAlarm]=\"selectedAlarm$ | async\"></c8y-alarm-details>\n </div>\n </div>\n</div>\n" }]
41
+ }], ctorParameters: () => [{ type: i1.ActivatedRoute }, { type: i1.Router }, { type: i2.ContextRouteService }, { type: i3.AlarmsViewService }] });
42
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWxhcm0taW5mby5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9hbGFybXMvYWxhcm0taW5mby5jb21wb25lbnQudHMiLCIuLi8uLi8uLi9hbGFybXMvYWxhcm0taW5mby5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFVLE1BQU0sZUFBZSxDQUFDO0FBQ2xELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFFekQsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUNoRixPQUFPLEVBQWMsRUFBRSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ3RDLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLHVCQUF1QixDQUFDOzs7Ozs7OztBQU0xRCxNQUFNLE9BQU8sa0JBQWtCO0lBUTdCLFlBQ1MsY0FBOEIsRUFDN0IsTUFBYyxFQUNkLG1CQUF3QyxFQUN4QyxpQkFBb0M7UUFIckMsbUJBQWMsR0FBZCxjQUFjLENBQWdCO1FBQzdCLFdBQU0sR0FBTixNQUFNLENBQVE7UUFDZCx3QkFBbUIsR0FBbkIsbUJBQW1CLENBQXFCO1FBQ3hDLHNCQUFpQixHQUFqQixpQkFBaUIsQ0FBbUI7UUFQOUMsbUJBQWMsR0FBRyxLQUFLLENBQUM7UUFDZCxVQUFLLEdBQUcsT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBT2hDLENBQUM7SUFFSixLQUFLLENBQUMsUUFBUTtRQUNaLE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDO1FBQ2pGLElBQUksQ0FBQyxjQUFjLEdBQUcsRUFBRSxDQUFDLFdBQVcsQ0FBQyxXQUFxQixDQUFDLENBQUM7UUFDNUQsSUFBSSxDQUFDLGNBQWMsR0FBRyxJQUFJLENBQUMsbUJBQW1CLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxFQUFFO1lBQzdFLFdBQVcsQ0FBQyxNQUFNO1lBQ2xCLFdBQVcsQ0FBQyxLQUFLO1NBQ2xCLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRCxJQUFJO1FBQ0YsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLG1CQUFtQixDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUM7UUFDakYsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixDQUFDLHdCQUF3QixDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBQzlFLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLFFBQVEsRUFBRSxFQUFFLG1CQUFtQixFQUFFLFVBQVUsRUFBRSxDQUFDLENBQUM7SUFDdEUsQ0FBQzs4R0E1QlUsa0JBQWtCO2tHQUFsQixrQkFBa0Isc0RDWC9CLHN4Q0F3Q0E7OzJGRDdCYSxrQkFBa0I7a0JBSjlCLFNBQVM7K0JBQ0UsZ0JBQWdCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBPbkluaXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEFjdGl2YXRlZFJvdXRlLCBSb3V0ZXIgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuaW1wb3J0IHsgSUFsYXJtIH0gZnJvbSAnQGM4eS9jbGllbnQnO1xuaW1wb3J0IHsgQ29udGV4dFJvdXRlU2VydmljZSwgZ2V0dGV4dCwgVmlld0NvbnRleHQgfSBmcm9tICdAYzh5L25neC1jb21wb25lbnRzJztcbmltcG9ydCB7IE9ic2VydmFibGUsIG9mIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBBbGFybXNWaWV3U2VydmljZSB9IGZyb20gJy4vYWxhcm1zLXZpZXcuc2VydmljZSc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2M4eS1hbGFybS1pbmZvJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2FsYXJtLWluZm8uY29tcG9uZW50Lmh0bWwnXG59KVxuZXhwb3J0IGNsYXNzIEFsYXJtSW5mb0NvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gIHNlbGVjdGVkQWxhcm0kOiBPYnNlcnZhYmxlPElBbGFybT47XG5cbiAgaGFzQW55Um9sZUFsbG93aW5nVG9DcmVhdGVTbWFydFJ1bGU6IGJvb2xlYW47XG4gIGlzU21hcnRSdWxlc1NlcnZpY2VTdWJzY3JpYmVkOiBib29sZWFuO1xuICBpc0NvbnRleHRSb3V0ZSA9IGZhbHNlO1xuICByZWFkb25seSBUSVRMRSA9IGdldHRleHQoJ0FsYXJtcycpO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHB1YmxpYyBhY3RpdmF0ZWRSb3V0ZTogQWN0aXZhdGVkUm91dGUsXG4gICAgcHJpdmF0ZSByb3V0ZXI6IFJvdXRlcixcbiAgICBwcml2YXRlIGNvbnRleHRSb3V0ZVNlcnZpY2U6IENvbnRleHRSb3V0ZVNlcnZpY2UsXG4gICAgcHJpdmF0ZSBhbGFybXNWaWV3U2VydmljZTogQWxhcm1zVmlld1NlcnZpY2VcbiAgKSB7fVxuXG4gIGFzeW5jIG5nT25Jbml0KCkge1xuICAgIGNvbnN0IGNvbnRleHREYXRhID0gdGhpcy5jb250ZXh0Um91dGVTZXJ2aWNlLmdldENvbnRleHREYXRhKHRoaXMuYWN0aXZhdGVkUm91dGUpO1xuICAgIHRoaXMuc2VsZWN0ZWRBbGFybSQgPSBvZihjb250ZXh0RGF0YS5jb250ZXh0RGF0YSBhcyBJQWxhcm0pO1xuICAgIHRoaXMuaXNDb250ZXh0Um91dGUgPSB0aGlzLmNvbnRleHRSb3V0ZVNlcnZpY2UuaXNDb250ZXh0Um91dGUodGhpcy5yb3V0ZXIudXJsLCBbXG4gICAgICBWaWV3Q29udGV4dC5EZXZpY2UsXG4gICAgICBWaWV3Q29udGV4dC5Hcm91cFxuICAgIF0pO1xuICB9XG5cbiAgYmFjaygpOiB2b2lkIHtcbiAgICBjb25zdCBjb250ZXh0RGF0YSA9IHRoaXMuY29udGV4dFJvdXRlU2VydmljZS5nZXRDb250ZXh0RGF0YSh0aGlzLmFjdGl2YXRlZFJvdXRlKTtcbiAgICBjb25zdCBiYWNrTGluayA9IHRoaXMuYWxhcm1zVmlld1NlcnZpY2UuZ2V0Um91dGVyTmF2aWdhdGlvbkFycmF5KGNvbnRleHREYXRhKTtcbiAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShiYWNrTGluaywgeyBxdWVyeVBhcmFtc0hhbmRsaW5nOiAncHJlc2VydmUnIH0pO1xuICB9XG59XG4iLCI8bmctY29udGFpbmVyICpuZ0lmPVwiIWlzQ29udGV4dFJvdXRlXCI+XG4gIDxjOHktdGl0bGU+e3sgVElUTEUgfCB0cmFuc2xhdGUgfX08L2M4eS10aXRsZT5cbjwvbmctY29udGFpbmVyPlxuXG48ZGl2XG4gIGNsYXNzPVwiaW5uZXItc2Nyb2xsIHNwbGl0LXZpZXdfX2RldGFpbCBzcGxpdC12aWV3X19kZXRhaWwtLXNlbGVjdGVkXCJcbiAgKm5nSWY9XCJzZWxlY3RlZEFsYXJtJCB8IGFzeW5jXCJcbj5cbiAgPGRpdiBjbGFzcz1cInN0aWNreS10b3AgYmctY29tcG9uZW50XCI+XG4gICAgPGRpdiBjbGFzcz1cImNhcmQtaGVhZGVyIGdhcC0xNiBkLWJsb2NrLXhzIGQtYmxvY2stc20gcC1sLTI0IHAtci0yNCBwLXQtMTYgc2VwYXJhdG9yXCI+XG4gICAgICA8YnV0dG9uXG4gICAgICAgIGNsYXNzPVwiYnRuIGJ0bi1jbGVhbiB0ZXh0LXByaW1hcnkgdmlzaWJsZS1zbSB2aXNpYmxlLXhzXCJcbiAgICAgICAgW3RpdGxlXT1cIidCYWNrJyB8IHRyYW5zbGF0ZVwiXG4gICAgICAgIChjbGljayk9XCJiYWNrKClcIlxuICAgICAgPlxuICAgICAgICA8aSBjOHlJY29uPVwiY2hldnJvbi1sZWZ0XCI+PC9pPlxuICAgICAgICA8c3Bhbj57eyAnQmFjaycgfCB0cmFuc2xhdGUgfX08L3NwYW4+XG4gICAgICA8L2J1dHRvbj5cblxuICAgICAgPGRpdiBjbGFzcz1cImZsZXgtbm8tc2hyaW5rIGEtcy1zdGFydFwiPjwvZGl2PlxuICAgICAgPGRpdiBjbGFzcz1cImZsZXgtZ3JvdyBkLWNvbFwiPlxuICAgICAgICA8ZGl2XG4gICAgICAgICAgY2xhc3M9XCJ0ZXh0LWJyZWFrLXdvcmQgZmxleC1ncm93IHRleHQtMTZcIlxuICAgICAgICAgIGRhdGEtY3k9XCJjOHktYWxhcm1zLWluZm8tLXRpdGxlXCJcbiAgICAgICAgPlxuICAgICAgICAgIHt7IChzZWxlY3RlZEFsYXJtJCB8IGFzeW5jKT8udGV4dCB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICAgIDxkaXYgY2xhc3M9XCJwLXJlbGF0aXZlXCI+XG4gICAgICA8Yzh5LXRhYnMtb3V0bGV0XG4gICAgICAgIG91dGxldE5hbWU9XCJhbGFybXNcIlxuICAgICAgICBvcmllbnRhdGlvbj1cImhvcml6b250YWxcIlxuICAgICAgPjwvYzh5LXRhYnMtb3V0bGV0PlxuICAgIDwvZGl2PlxuICAgIDxkaXYgY2xhc3M9XCJjYXJkLWJsb2NrIG92ZXJmbG93LXZpc2libGUgcC1sLTI0IHAtci0yNFwiPlxuICAgICAgPGM4eS1hbGFybS1kZXRhaWxzIFtzZWxlY3RlZEFsYXJtXT1cInNlbGVjdGVkQWxhcm0kIHwgYXN5bmNcIj48L2M4eS1hbGFybS1kZXRhaWxzPlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbjwvZGl2PlxuIl19
@@ -17,7 +17,7 @@ export class AlarmSeverityToLabelPipe {
17
17
  */
18
18
  transform(alarmSeverity) {
19
19
  const alarmStatusMapped = SEVERITY_LABELS[alarmSeverity?.toUpperCase()];
20
- return this.translateService.instant(alarmStatusMapped);
20
+ return this.translateService.instant(alarmStatusMapped ?? alarmSeverity);
21
21
  }
22
22
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: AlarmSeverityToLabelPipe, deps: [{ token: i1.TranslateService }], target: i0.ɵɵFactoryTarget.Pipe }); }
23
23
  static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "18.2.9", ngImport: i0, type: AlarmSeverityToLabelPipe, name: "AlarmSeverityToLabel" }); }
@@ -28,4 +28,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.9", ngImpor
28
28
  name: 'AlarmSeverityToLabel'
29
29
  }]
30
30
  }], ctorParameters: () => [{ type: i1.TranslateService }] });
31
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWxhcm0tc2V2ZXJpdHktdG8tbGFiZWwucGlwZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL2FsYXJtcy9hbGFybS1zZXZlcml0eS10by1sYWJlbC5waXBlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxJQUFJLEVBQWlCLE1BQU0sZUFBZSxDQUFDO0FBQ3BELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDOUMsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0scUJBQXFCLENBQUM7OztBQUV2RDs7R0FFRztBQUlILE1BQU0sT0FBTyx3QkFBd0I7SUFDbkMsWUFBb0IsZ0JBQWtDO1FBQWxDLHFCQUFnQixHQUFoQixnQkFBZ0IsQ0FBa0I7SUFBRyxDQUFDO0lBRTFEOzs7O09BSUc7SUFDSCxTQUFTLENBQUMsYUFBcUI7UUFDN0IsTUFBTSxpQkFBaUIsR0FBRyxlQUFlLENBQUMsYUFBYSxFQUFFLFdBQVcsRUFBRSxDQUFDLENBQUM7UUFDeEUsT0FBTyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsT0FBTyxDQUFDLGlCQUFpQixDQUFDLENBQUM7SUFDMUQsQ0FBQzs4R0FYVSx3QkFBd0I7NEdBQXhCLHdCQUF3Qjs7MkZBQXhCLHdCQUF3QjtrQkFIcEMsSUFBSTttQkFBQztvQkFDSixJQUFJLEVBQUUsc0JBQXNCO2lCQUM3QiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFBpcGUsIFBpcGVUcmFuc2Zvcm0gfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFNFVkVSSVRZX0xBQkVMUyB9IGZyb20gJ0BjOHkvY2xpZW50JztcbmltcG9ydCB7IFRyYW5zbGF0ZVNlcnZpY2UgfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJztcblxuLyoqXG4gKiBQaXBlIHRvIHRyYW5zZm9ybSBhbGFybSBzZXZlcml0eSB0byBjb3JyZXNwb25kaW5nIGxhYmVsLlxuICovXG5AUGlwZSh7XG4gIG5hbWU6ICdBbGFybVNldmVyaXR5VG9MYWJlbCdcbn0pXG5leHBvcnQgY2xhc3MgQWxhcm1TZXZlcml0eVRvTGFiZWxQaXBlIGltcGxlbWVudHMgUGlwZVRyYW5zZm9ybSB7XG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgdHJhbnNsYXRlU2VydmljZTogVHJhbnNsYXRlU2VydmljZSkge31cblxuICAvKipcbiAgICogVHJhbnNmb3JtcyBhbiBhbGFybSBzZXZlcml0eSB0byBpdHMgY29ycmVzcG9uZGluZyBsYWJlbC5cbiAgICogQHBhcmFtIGFsYXJtU2V2ZXJpdHkgLSBUaGUgYWxhcm0gc2V2ZXJpdHkgdG8gdHJhbnNmb3JtLlxuICAgKiBAcmV0dXJucyBUaGUgdHJhbnNsYXRlZCBsYWJlbCBjb3JyZXNwb25kaW5nIHRvIHRoZSBnaXZlbiBhbGFybSBzZXZlcml0eS5cbiAgICovXG4gIHRyYW5zZm9ybShhbGFybVNldmVyaXR5OiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIGNvbnN0IGFsYXJtU3RhdHVzTWFwcGVkID0gU0VWRVJJVFlfTEFCRUxTW2FsYXJtU2V2ZXJpdHk/LnRvVXBwZXJDYXNlKCldO1xuICAgIHJldHVybiB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudChhbGFybVN0YXR1c01hcHBlZCk7XG4gIH1cbn1cbiJdfQ==
31
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWxhcm0tc2V2ZXJpdHktdG8tbGFiZWwucGlwZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL2FsYXJtcy9hbGFybS1zZXZlcml0eS10by1sYWJlbC5waXBlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxJQUFJLEVBQWlCLE1BQU0sZUFBZSxDQUFDO0FBQ3BELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDOUMsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0scUJBQXFCLENBQUM7OztBQUV2RDs7R0FFRztBQUlILE1BQU0sT0FBTyx3QkFBd0I7SUFDbkMsWUFBb0IsZ0JBQWtDO1FBQWxDLHFCQUFnQixHQUFoQixnQkFBZ0IsQ0FBa0I7SUFBRyxDQUFDO0lBRTFEOzs7O09BSUc7SUFDSCxTQUFTLENBQUMsYUFBcUI7UUFDN0IsTUFBTSxpQkFBaUIsR0FBRyxlQUFlLENBQUMsYUFBYSxFQUFFLFdBQVcsRUFBRSxDQUFDLENBQUM7UUFDeEUsT0FBTyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsT0FBTyxDQUFDLGlCQUFpQixJQUFJLGFBQWEsQ0FBQyxDQUFDO0lBQzNFLENBQUM7OEdBWFUsd0JBQXdCOzRHQUF4Qix3QkFBd0I7OzJGQUF4Qix3QkFBd0I7a0JBSHBDLElBQUk7bUJBQUM7b0JBQ0osSUFBSSxFQUFFLHNCQUFzQjtpQkFDN0IiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBQaXBlLCBQaXBlVHJhbnNmb3JtIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBTRVZFUklUWV9MQUJFTFMgfSBmcm9tICdAYzh5L2NsaWVudCc7XG5pbXBvcnQgeyBUcmFuc2xhdGVTZXJ2aWNlIH0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSc7XG5cbi8qKlxuICogUGlwZSB0byB0cmFuc2Zvcm0gYWxhcm0gc2V2ZXJpdHkgdG8gY29ycmVzcG9uZGluZyBsYWJlbC5cbiAqL1xuQFBpcGUoe1xuICBuYW1lOiAnQWxhcm1TZXZlcml0eVRvTGFiZWwnXG59KVxuZXhwb3J0IGNsYXNzIEFsYXJtU2V2ZXJpdHlUb0xhYmVsUGlwZSBpbXBsZW1lbnRzIFBpcGVUcmFuc2Zvcm0ge1xuICBjb25zdHJ1Y3Rvcihwcml2YXRlIHRyYW5zbGF0ZVNlcnZpY2U6IFRyYW5zbGF0ZVNlcnZpY2UpIHt9XG5cbiAgLyoqXG4gICAqIFRyYW5zZm9ybXMgYW4gYWxhcm0gc2V2ZXJpdHkgdG8gaXRzIGNvcnJlc3BvbmRpbmcgbGFiZWwuXG4gICAqIEBwYXJhbSBhbGFybVNldmVyaXR5IC0gVGhlIGFsYXJtIHNldmVyaXR5IHRvIHRyYW5zZm9ybS5cbiAgICogQHJldHVybnMgVGhlIHRyYW5zbGF0ZWQgbGFiZWwgY29ycmVzcG9uZGluZyB0byB0aGUgZ2l2ZW4gYWxhcm0gc2V2ZXJpdHkuXG4gICAqL1xuICB0cmFuc2Zvcm0oYWxhcm1TZXZlcml0eTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICBjb25zdCBhbGFybVN0YXR1c01hcHBlZCA9IFNFVkVSSVRZX0xBQkVMU1thbGFybVNldmVyaXR5Py50b1VwcGVyQ2FzZSgpXTtcbiAgICByZXR1cm4gdGhpcy50cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQoYWxhcm1TdGF0dXNNYXBwZWQgPz8gYWxhcm1TZXZlcml0eSk7XG4gIH1cbn1cbiJdfQ==