@c8y/ngx-components 1020.33.1 → 1020.39.0

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 (140) hide show
  1. package/auth-configuration/sso-configuration/sso-configuration.model.d.ts +2 -0
  2. package/auth-configuration/sso-configuration/sso-configuration.model.d.ts.map +1 -1
  3. package/auth-configuration/sso-configuration/sso-configuration.service.d.ts.map +1 -1
  4. package/auth-configuration/sso-configuration/template-parts/access-mapping/access-mapping.component.d.ts +5 -0
  5. package/auth-configuration/sso-configuration/template-parts/access-mapping/access-mapping.component.d.ts.map +1 -1
  6. package/auth-configuration/sso-configuration/template-parts/user-data-mapping.component.d.ts +7 -0
  7. package/auth-configuration/sso-configuration/template-parts/user-data-mapping.component.d.ts.map +1 -1
  8. package/auth-configuration/sso-configuration/templates/aad-configuration-mapper.d.ts.map +1 -1
  9. package/auth-configuration/sso-configuration/templates/aad.model.d.ts +1 -0
  10. package/auth-configuration/sso-configuration/templates/aad.model.d.ts.map +1 -1
  11. package/auth-configuration/sso-configuration/templates/custom-configuration-mapper.d.ts.map +1 -1
  12. package/auth-configuration/sso-configuration/templates/custom.model.d.ts +1 -0
  13. package/auth-configuration/sso-configuration/templates/custom.model.d.ts.map +1 -1
  14. package/auth-configuration/sso-configuration/templates/key-cloak-configuration-mapper.d.ts.map +1 -1
  15. package/auth-configuration/sso-configuration/templates/key-cloak.model.d.ts +1 -0
  16. package/auth-configuration/sso-configuration/templates/key-cloak.model.d.ts.map +1 -1
  17. package/context-dashboard/context-dashboard.component.d.ts +4 -0
  18. package/context-dashboard/context-dashboard.component.d.ts.map +1 -1
  19. package/context-dashboard/context-dashboard.model.d.ts +2 -32
  20. package/context-dashboard/context-dashboard.model.d.ts.map +1 -1
  21. package/context-dashboard/dashboard-detail.component.d.ts +2 -0
  22. package/context-dashboard/dashboard-detail.component.d.ts.map +1 -1
  23. package/core/dynamic-component/dynamic-component.model.d.ts +135 -1
  24. package/core/dynamic-component/dynamic-component.model.d.ts.map +1 -1
  25. package/core/dynamic-forms/typeahead/typeahead.type.component.d.ts.map +1 -1
  26. package/core/product-experience/gainsight.service.d.ts +1 -0
  27. package/core/product-experience/gainsight.service.d.ts.map +1 -1
  28. package/core/select/typeahead.component.d.ts.map +1 -1
  29. package/esm2022/auth-configuration/sso-configuration/sso-configuration.model.mjs +1 -1
  30. package/esm2022/auth-configuration/sso-configuration/sso-configuration.service.mjs +5 -3
  31. package/esm2022/auth-configuration/sso-configuration/template-parts/access-mapping/access-mapping.component.mjs +25 -11
  32. package/esm2022/auth-configuration/sso-configuration/template-parts/user-data-mapping.component.mjs +18 -8
  33. package/esm2022/auth-configuration/sso-configuration/templates/aad-configuration-mapper.mjs +5 -3
  34. package/esm2022/auth-configuration/sso-configuration/templates/aad-template.component.mjs +3 -3
  35. package/esm2022/auth-configuration/sso-configuration/templates/aad.model.mjs +1 -1
  36. package/esm2022/auth-configuration/sso-configuration/templates/custom-configuration-mapper.mjs +5 -3
  37. package/esm2022/auth-configuration/sso-configuration/templates/custom-template.component.mjs +3 -3
  38. package/esm2022/auth-configuration/sso-configuration/templates/custom.model.mjs +1 -1
  39. package/esm2022/auth-configuration/sso-configuration/templates/key-cloak-configuration-mapper.mjs +5 -3
  40. package/esm2022/auth-configuration/sso-configuration/templates/key-cloak-template.component.mjs +3 -3
  41. package/esm2022/auth-configuration/sso-configuration/templates/key-cloak.model.mjs +1 -1
  42. package/esm2022/context-dashboard/context-dashboard.component.mjs +85 -23
  43. package/esm2022/context-dashboard/context-dashboard.model.mjs +1 -1
  44. package/esm2022/context-dashboard/dashboard-detail.component.mjs +42 -11
  45. package/esm2022/core/dynamic-component/dynamic-component.model.mjs +28 -1
  46. package/esm2022/core/dynamic-forms/typeahead/typeahead.type.component.mjs +2 -3
  47. package/esm2022/core/product-experience/gainsight.service.mjs +15 -1
  48. package/esm2022/core/select/typeahead.component.mjs +9 -4
  49. package/esm2022/repository/firmware/list/add-firmware-patch-modal.component.mjs +3 -3
  50. package/esm2022/trusted-certificates/list/trusted-certificate-list.component.mjs +2 -2
  51. package/esm2022/widgets/cockpit/index.mjs +1 -1
  52. package/esm2022/widgets/definitions/alarms/alarm-list/index.mjs +3 -3
  53. package/esm2022/widgets/definitions/alarms/all-critical-alarms/index.mjs +3 -3
  54. package/esm2022/widgets/definitions/alarms/recent-alarms/index.mjs +3 -3
  55. package/esm2022/widgets/definitions/applications/index.mjs +3 -3
  56. package/esm2022/widgets/definitions/cockpit-legacy-welcome/index.mjs +3 -3
  57. package/esm2022/widgets/definitions/cockpit-welcome/index.mjs +3 -3
  58. package/esm2022/widgets/definitions/device-control-message/index.mjs +3 -3
  59. package/esm2022/widgets/definitions/device-management-welcome/index.mjs +1 -1
  60. package/esm2022/widgets/definitions/help-and-service/index.mjs +3 -3
  61. package/esm2022/widgets/definitions/image/index.mjs +3 -3
  62. package/esm2022/widgets/definitions/info-gauge/index.mjs +3 -3
  63. package/esm2022/widgets/definitions/kpi/index.mjs +3 -3
  64. package/esm2022/widgets/definitions/map/index.mjs +3 -3
  65. package/esm2022/widgets/definitions/markdown/index.mjs +3 -3
  66. package/esm2022/widgets/definitions/three-d-rotation/index.mjs +3 -3
  67. package/esm2022/widgets/device-management/index.mjs +1 -1
  68. package/esm2022/widgets/widgets.module.mjs +3 -3
  69. package/fesm2022/c8y-ngx-components-auth-configuration.mjs +118 -86
  70. package/fesm2022/c8y-ngx-components-auth-configuration.mjs.map +1 -1
  71. package/fesm2022/c8y-ngx-components-context-dashboard.mjs +123 -31
  72. package/fesm2022/c8y-ngx-components-context-dashboard.mjs.map +1 -1
  73. package/fesm2022/c8y-ngx-components-repository-firmware.mjs +2 -2
  74. package/fesm2022/c8y-ngx-components-repository-firmware.mjs.map +1 -1
  75. package/fesm2022/c8y-ngx-components-trusted-certificates.mjs +1 -1
  76. package/fesm2022/c8y-ngx-components-trusted-certificates.mjs.map +1 -1
  77. package/fesm2022/c8y-ngx-components-widgets-cockpit.mjs.map +1 -1
  78. package/fesm2022/c8y-ngx-components-widgets-definitions-alarms-alarm-list.mjs +2 -2
  79. package/fesm2022/c8y-ngx-components-widgets-definitions-alarms-alarm-list.mjs.map +1 -1
  80. package/fesm2022/c8y-ngx-components-widgets-definitions-alarms-all-critical-alarms.mjs +2 -2
  81. package/fesm2022/c8y-ngx-components-widgets-definitions-alarms-all-critical-alarms.mjs.map +1 -1
  82. package/fesm2022/c8y-ngx-components-widgets-definitions-alarms-recent-alarms.mjs +2 -2
  83. package/fesm2022/c8y-ngx-components-widgets-definitions-alarms-recent-alarms.mjs.map +1 -1
  84. package/fesm2022/c8y-ngx-components-widgets-definitions-applications.mjs +2 -2
  85. package/fesm2022/c8y-ngx-components-widgets-definitions-applications.mjs.map +1 -1
  86. package/fesm2022/c8y-ngx-components-widgets-definitions-cockpit-legacy-welcome.mjs +2 -2
  87. package/fesm2022/c8y-ngx-components-widgets-definitions-cockpit-legacy-welcome.mjs.map +1 -1
  88. package/fesm2022/c8y-ngx-components-widgets-definitions-cockpit-welcome.mjs +2 -2
  89. package/fesm2022/c8y-ngx-components-widgets-definitions-cockpit-welcome.mjs.map +1 -1
  90. package/fesm2022/c8y-ngx-components-widgets-definitions-device-control-message.mjs +2 -2
  91. package/fesm2022/c8y-ngx-components-widgets-definitions-device-control-message.mjs.map +1 -1
  92. package/fesm2022/c8y-ngx-components-widgets-definitions-device-management-welcome.mjs.map +1 -1
  93. package/fesm2022/c8y-ngx-components-widgets-definitions-help-and-service.mjs +2 -2
  94. package/fesm2022/c8y-ngx-components-widgets-definitions-help-and-service.mjs.map +1 -1
  95. package/fesm2022/c8y-ngx-components-widgets-definitions-image.mjs +2 -2
  96. package/fesm2022/c8y-ngx-components-widgets-definitions-image.mjs.map +1 -1
  97. package/fesm2022/c8y-ngx-components-widgets-definitions-info-gauge.mjs +2 -2
  98. package/fesm2022/c8y-ngx-components-widgets-definitions-info-gauge.mjs.map +1 -1
  99. package/fesm2022/c8y-ngx-components-widgets-definitions-kpi.mjs +2 -2
  100. package/fesm2022/c8y-ngx-components-widgets-definitions-kpi.mjs.map +1 -1
  101. package/fesm2022/c8y-ngx-components-widgets-definitions-map.mjs +2 -2
  102. package/fesm2022/c8y-ngx-components-widgets-definitions-map.mjs.map +1 -1
  103. package/fesm2022/c8y-ngx-components-widgets-definitions-markdown.mjs +2 -2
  104. package/fesm2022/c8y-ngx-components-widgets-definitions-markdown.mjs.map +1 -1
  105. package/fesm2022/c8y-ngx-components-widgets-definitions-three-d-rotation.mjs +2 -2
  106. package/fesm2022/c8y-ngx-components-widgets-definitions-three-d-rotation.mjs.map +1 -1
  107. package/fesm2022/c8y-ngx-components-widgets-device-management.mjs.map +1 -1
  108. package/fesm2022/c8y-ngx-components-widgets.mjs +2 -2
  109. package/fesm2022/c8y-ngx-components-widgets.mjs.map +1 -1
  110. package/fesm2022/c8y-ngx-components.mjs +49 -4
  111. package/fesm2022/c8y-ngx-components.mjs.map +1 -1
  112. package/locales/de.po +46 -12
  113. package/locales/en.po +7 -7
  114. package/locales/es.po +40 -12
  115. package/locales/fr.po +40 -12
  116. package/locales/ja_JP.po +43 -12
  117. package/locales/locales.pot +35 -14
  118. package/locales/nl.po +40 -12
  119. package/locales/pl.po +40 -12
  120. package/locales/pt_BR.po +40 -12
  121. package/package.json +1 -1
  122. package/widgets/cockpit/index.d.ts.map +1 -1
  123. package/widgets/definitions/alarms/alarm-list/index.d.ts.map +1 -1
  124. package/widgets/definitions/alarms/all-critical-alarms/index.d.ts.map +1 -1
  125. package/widgets/definitions/alarms/recent-alarms/index.d.ts.map +1 -1
  126. package/widgets/definitions/applications/index.d.ts.map +1 -1
  127. package/widgets/definitions/cockpit-legacy-welcome/index.d.ts.map +1 -1
  128. package/widgets/definitions/cockpit-welcome/index.d.ts.map +1 -1
  129. package/widgets/definitions/device-control-message/index.d.ts.map +1 -1
  130. package/widgets/definitions/device-management-welcome/index.d.ts.map +1 -1
  131. package/widgets/definitions/help-and-service/index.d.ts.map +1 -1
  132. package/widgets/definitions/image/index.d.ts.map +1 -1
  133. package/widgets/definitions/info-gauge/index.d.ts.map +1 -1
  134. package/widgets/definitions/kpi/index.d.ts.map +1 -1
  135. package/widgets/definitions/map/index.d.ts.map +1 -1
  136. package/widgets/definitions/markdown/index.d.ts.map +1 -1
  137. package/widgets/definitions/three-d-rotation/index.d.ts.map +1 -1
  138. package/widgets/device-management/index.d.ts.map +1 -1
  139. package/widgets/widgets.module.d.ts +2 -2
  140. package/widgets/widgets.module.d.ts.map +1 -1
@@ -1,6 +1,7 @@
1
+ import { __decorate, __metadata } from "tslib";
1
2
  import { Component, EventEmitter, Input, Output } from '@angular/core';
2
3
  import { ActivatedRoute, Router } from '@angular/router';
3
- import { AppStateService, ContextRouteService, GainsightService, gettext, GroupService, ModalService, OptionsService, Status, TabsService } from '@c8y/ngx-components';
4
+ import { AppStateService, ContextRouteService, GainsightService, gettext, GroupService, memoize, ModalService, OptionsService, Status, TabsService } from '@c8y/ngx-components';
4
5
  import { TranslateService } from '@ngx-translate/core';
5
6
  import { clone, cloneDeep, isEqual } from 'lodash-es';
6
7
  import { Subject } from 'rxjs';
@@ -233,19 +234,43 @@ export class DashboardDetailComponent {
233
234
  }
234
235
  }
235
236
  async createNewDashboard() {
236
- const dashboardMO = await this.contextDashboardService.create(this.dashboard, this.currentContext);
237
+ const mo = await this.contextDashboardService.create(this.dashboard, this.currentContext);
238
+ await this.onCreateGSEvent(mo);
239
+ this.cleanupAfterDetailsClose();
240
+ await this.contextDashboardService.navigateToDashboard(mo);
241
+ }
242
+ async onCreateGSEvent(mo) {
243
+ const parentName = await this.convertStringToHash(this.context?.name);
244
+ const dashboardName = await this.convertStringToHash(this.dashboard?.name);
237
245
  this.gainsightService.triggerEvent(PRODUCT_EXPERIENCE.DASHBOARD.EVENTS.DASHBOARDS, {
238
246
  component: PRODUCT_EXPERIENCE.DASHBOARD.COMPONENTS.ADD_DASHBOARD,
239
247
  action: PRODUCT_EXPERIENCE.DASHBOARD.ACTIONS.CREATE,
240
- name: this.dashboard.name,
241
- id: dashboardMO.id,
242
- dashboardType: dashboardMO.c8y_Dashboard.deviceType
243
- ? dashboardMO.c8y_Dashboard.deviceTypeValue
244
- : null,
248
+ name: dashboardName,
249
+ id: mo.id,
250
+ nameId: `${dashboardName}_${this.mo.id}`,
251
+ parentAssetId: this.context?.id ? this.context.id : 'noContext',
252
+ parentAssetName: this.context?.id ? parentName : 'noContext',
253
+ parentAssetType: this.context?.id ? this.context.type : 'noContext',
254
+ parentAssetNameId: this.context?.id ? `${parentName}_${this.context.id}` : 'noContext',
255
+ parentAssetNameDashboardName: this.context?.id
256
+ ? `${parentName}_${dashboardName}`
257
+ : 'noContext',
258
+ parentAssetIdDashboardId: this.context?.id ? `${this.context.id}_${this.mo.id}` : 'noContext',
259
+ parentAssetNameDashboardId: this.context?.id ? `${parentName}_${this.mo.id}` : 'noContext',
260
+ parentAssetNameIdDashboardNameId: this.context?.id
261
+ ? `${parentName}_${this.context.id}_${dashboardName}_${this.mo.id}`
262
+ : 'noContext',
263
+ dashboardType: mo.c8y_Dashboard.deviceType ? mo.c8y_Dashboard.deviceTypeValue : null,
245
264
  context: this.contextDashboardService.getContextForGS(this.currentContext.contextData)
246
265
  });
247
- this.cleanupAfterDetailsClose();
248
- await this.contextDashboardService.navigateToDashboard(dashboardMO);
266
+ }
267
+ async convertStringToHash(str) {
268
+ if (!str) {
269
+ return null;
270
+ }
271
+ return (await this.gainsightService.shouldSendPiiData())
272
+ ? str
273
+ : await this.gainsightService.hashGroupName(str);
249
274
  }
250
275
  async createNewReport() {
251
276
  try {
@@ -362,6 +387,12 @@ export class DashboardDetailComponent {
362
387
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.9", ngImport: i0, type: DashboardDetailComponent, deps: [{ token: i1.ContextDashboardService }, { token: i2.TranslateService }, { token: i3.ContextRouteService }, { token: i4.ActivatedRoute }, { token: i3.TabsService }, { token: i4.Router }, { token: i5.InventoryService }, { token: i4.ActivatedRoute }, { token: i6.DashboardDetailService }, { token: i3.AppStateService }, { token: i3.OptionsService }, { token: i3.GroupService }, { token: i3.ModalService }, { token: i3.GainsightService }], target: i0.ɵɵFactoryTarget.Component }); }
363
388
  static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.9", type: DashboardDetailComponent, selector: "c8y-dashboard-detail", inputs: { isReport: "isReport", deviceType: "deviceType", context: "context", mo: "mo", dashboard: "dashboard", isNamedDashboard: "isNamedDashboard", hideAvailability: "hideAvailability" }, outputs: { dashboardSaved: "dashboardSaved", previewChanged: "previewChanged" }, usesOnChanges: true, ngImport: i0, template: "<div\n class=\"collapse c8y-top-drawer\"\n [collapse]=\"isCollapsed\"\n [isAnimated]=\"true\"\n>\n <div class=\"p-t-16 p-b-16 p-l-24 p-r-24 separator-bottom\">\n <span class=\"h4\">{{ 'Dashboard settings' | translate }}</span>\n </div>\n\n <div\n class=\"d-flex\"\n [formGroup]=\"dashboardDetailsForm\"\n *ngIf=\"!isCollapsed\"\n >\n <c8y-tabs-outlet\n [tabs]=\"tabs$ | async\"\n [outletName]=\"'dashboardTabs'\"\n [orientation]=\"'vertical'\"\n class=\"c8y-top-drawer--tabs\"\n ></c8y-tabs-outlet>\n <div class=\"inner-scroll c8y-top-drawer__tabs-container flex-grow p-l-24 p-r-lg-32 p-r-xs-24 p-r-sm-24\">\n <c8y-tab\n *ngIf=\"(!isNamedDashboard && !hideAvailability) || isReport\"\n [label]=\"TABS.general.label\"\n [icon]=\"'imac-settings'\"\n [priority]=\"100\"\n [tabsOutlet]=\"TABS_OUTLET_NAME\"\n (onSelect)=\"selectTab(TABS.general.featureId)\"\n [isActive]=\"selectedTab === TABS.general.featureId\"\n ></c8y-tab>\n <c8y-tab\n [label]=\"TABS.appearance.label\"\n [priority]=\"50\"\n [icon]=\"'web-design'\"\n [tabsOutlet]=\"TABS_OUTLET_NAME\"\n (onSelect)=\"selectTab(TABS.appearance.featureId)\"\n [isActive]=\"selectedTab === TABS.appearance.featureId\"\n ></c8y-tab>\n <c8y-tab\n *ngIf=\"mo?.c8y_DashboardHistory\"\n [label]=\"TABS.versionHistory.label\"\n [icon]=\"'versions'\"\n [priority]=\"10\"\n [tabsOutlet]=\"TABS_OUTLET_NAME\"\n (onSelect)=\"selectTab(TABS.versionHistory.featureId)\"\n [isActive]=\"selectedTab === TABS.versionHistory.featureId\"\n ></c8y-tab>\n <ng-container [ngSwitch]=\"selectedTab\">\n <c8y-dashboard-general-settings\n *ngSwitchCase=\"TABS.general.featureId\"\n [isReport]=\"isReport\"\n [isNamedDashboard]=\"isNamedDashboard\"\n [hideAvailability]=\"hideAvailability\"\n [dashboard]=\"dashboard\"\n [generalSettingsForm]=\"generalSettingsForm\"\n [deviceTypeValue]=\"deviceTypeValue\"\n [displayDeviceTypeValue]=\"displayDeviceTypeValue\"\n [mo]=\"mo\"\n [allowTypeDashboard]=\"allowTypeDashboard\"\n [isDevice]=\"!!context?.c8y_IsDevice\"\n class=\"animated fadeIn\"\n (onDuplicateWithoutType)=\"duplicateWithoutType()\"\n ></c8y-dashboard-general-settings>\n <c8y-dashboard-appearance-settings\n *ngSwitchCase=\"TABS.appearance.featureId\"\n [dashboard]=\"dashboard\"\n [appearanceSettingsForm]=\"appearanceSettingsForm\"\n (previewChanged)=\"previewChanged.emit($event)\"\n class=\"animated fadeIn\"\n ></c8y-dashboard-appearance-settings>\n <c8y-dashboard-version-history\n *ngSwitchCase=\"TABS.versionHistory.featureId\"\n [dashboardHistory]=\"mo.c8y_DashboardHistory\"\n [isReport]=\"isReport\"\n (onRevert)=\"revertDashboard($event)\"\n class=\"animated fadeIn\"\n ></c8y-dashboard-version-history>\n </ng-container>\n </div>\n </div>\n\n <div class=\"c8y-top-drawer--footer\">\n <button\n class=\"btn btn-default\"\n title=\"{{ 'Cancel' | translate }}\"\n type=\"button\"\n data-cy=\"dashboard-detail--cancel-dashboard\"\n (click)=\"cancel()\"\n >\n {{ 'Cancel' | translate }}\n </button>\n <button\n class=\"btn btn-primary\"\n title=\"{{ 'Save' | translate }}\"\n type=\"button\"\n data-cy=\"dashboard-detail--save-dashboard\"\n (click)=\"save()\"\n [disabled]=\"\n (dashboardDetailsForm?.invalid || dashboardDetailsForm?.pristine) && this.isEdit\n \"\n >\n {{ 'Save' | translate }}\n </button>\n </div>\n</div>\n", dependencies: [{ kind: "directive", type: i7.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i7.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { kind: "directive", type: i7.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { kind: "component", type: i3.TabsOutletComponent, selector: "c8y-tabs-outlet,c8y-ui-tabs", inputs: ["tabs", "orientation", "navigatorOpen", "outletName", "context"] }, { kind: "component", type: i3.TabComponent, selector: "c8y-tab", inputs: ["path", "label", "icon", "priority", "orientation", "injector", "tabsOutlet", "isActive"], outputs: ["onSelect"] }, { kind: "directive", type: i8.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i8.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i9.CollapseDirective, selector: "[collapse]", inputs: ["display", "isAnimated", "collapse"], outputs: ["collapsed", "collapses", "expanded", "expands"], exportAs: ["bs-collapse"] }, { kind: "component", type: i10.DashboardGeneralSettingsComponent, selector: "c8y-dashboard-general-settings", inputs: ["isReport", "isNamedDashboard", "hideAvailability", "dashboard", "generalSettingsForm", "deviceTypeValue", "displayDeviceTypeValue", "allowTypeDashboard", "isDevice", "mo"], outputs: ["onDuplicateWithoutType"] }, { kind: "component", type: i11.DashboardAppearanceSettingsComponent, selector: "c8y-dashboard-appearance-settings", inputs: ["dashboard", "appearanceSettingsForm"], outputs: ["previewChanged"] }, { kind: "component", type: i12.DashboardVersionHistoryComponent, selector: "c8y-dashboard-version-history", inputs: ["dashboardHistory", "isReport"], outputs: ["onRevert"] }, { kind: "pipe", type: i3.C8yTranslatePipe, name: "translate" }, { kind: "pipe", type: i7.AsyncPipe, name: "async" }] }); }
364
389
  }
390
+ __decorate([
391
+ memoize(),
392
+ __metadata("design:type", Function),
393
+ __metadata("design:paramtypes", [String]),
394
+ __metadata("design:returntype", Promise)
395
+ ], DashboardDetailComponent.prototype, "convertStringToHash", null);
365
396
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.9", ngImport: i0, type: DashboardDetailComponent, decorators: [{
366
397
  type: Component,
367
398
  args: [{ selector: 'c8y-dashboard-detail', template: "<div\n class=\"collapse c8y-top-drawer\"\n [collapse]=\"isCollapsed\"\n [isAnimated]=\"true\"\n>\n <div class=\"p-t-16 p-b-16 p-l-24 p-r-24 separator-bottom\">\n <span class=\"h4\">{{ 'Dashboard settings' | translate }}</span>\n </div>\n\n <div\n class=\"d-flex\"\n [formGroup]=\"dashboardDetailsForm\"\n *ngIf=\"!isCollapsed\"\n >\n <c8y-tabs-outlet\n [tabs]=\"tabs$ | async\"\n [outletName]=\"'dashboardTabs'\"\n [orientation]=\"'vertical'\"\n class=\"c8y-top-drawer--tabs\"\n ></c8y-tabs-outlet>\n <div class=\"inner-scroll c8y-top-drawer__tabs-container flex-grow p-l-24 p-r-lg-32 p-r-xs-24 p-r-sm-24\">\n <c8y-tab\n *ngIf=\"(!isNamedDashboard && !hideAvailability) || isReport\"\n [label]=\"TABS.general.label\"\n [icon]=\"'imac-settings'\"\n [priority]=\"100\"\n [tabsOutlet]=\"TABS_OUTLET_NAME\"\n (onSelect)=\"selectTab(TABS.general.featureId)\"\n [isActive]=\"selectedTab === TABS.general.featureId\"\n ></c8y-tab>\n <c8y-tab\n [label]=\"TABS.appearance.label\"\n [priority]=\"50\"\n [icon]=\"'web-design'\"\n [tabsOutlet]=\"TABS_OUTLET_NAME\"\n (onSelect)=\"selectTab(TABS.appearance.featureId)\"\n [isActive]=\"selectedTab === TABS.appearance.featureId\"\n ></c8y-tab>\n <c8y-tab\n *ngIf=\"mo?.c8y_DashboardHistory\"\n [label]=\"TABS.versionHistory.label\"\n [icon]=\"'versions'\"\n [priority]=\"10\"\n [tabsOutlet]=\"TABS_OUTLET_NAME\"\n (onSelect)=\"selectTab(TABS.versionHistory.featureId)\"\n [isActive]=\"selectedTab === TABS.versionHistory.featureId\"\n ></c8y-tab>\n <ng-container [ngSwitch]=\"selectedTab\">\n <c8y-dashboard-general-settings\n *ngSwitchCase=\"TABS.general.featureId\"\n [isReport]=\"isReport\"\n [isNamedDashboard]=\"isNamedDashboard\"\n [hideAvailability]=\"hideAvailability\"\n [dashboard]=\"dashboard\"\n [generalSettingsForm]=\"generalSettingsForm\"\n [deviceTypeValue]=\"deviceTypeValue\"\n [displayDeviceTypeValue]=\"displayDeviceTypeValue\"\n [mo]=\"mo\"\n [allowTypeDashboard]=\"allowTypeDashboard\"\n [isDevice]=\"!!context?.c8y_IsDevice\"\n class=\"animated fadeIn\"\n (onDuplicateWithoutType)=\"duplicateWithoutType()\"\n ></c8y-dashboard-general-settings>\n <c8y-dashboard-appearance-settings\n *ngSwitchCase=\"TABS.appearance.featureId\"\n [dashboard]=\"dashboard\"\n [appearanceSettingsForm]=\"appearanceSettingsForm\"\n (previewChanged)=\"previewChanged.emit($event)\"\n class=\"animated fadeIn\"\n ></c8y-dashboard-appearance-settings>\n <c8y-dashboard-version-history\n *ngSwitchCase=\"TABS.versionHistory.featureId\"\n [dashboardHistory]=\"mo.c8y_DashboardHistory\"\n [isReport]=\"isReport\"\n (onRevert)=\"revertDashboard($event)\"\n class=\"animated fadeIn\"\n ></c8y-dashboard-version-history>\n </ng-container>\n </div>\n </div>\n\n <div class=\"c8y-top-drawer--footer\">\n <button\n class=\"btn btn-default\"\n title=\"{{ 'Cancel' | translate }}\"\n type=\"button\"\n data-cy=\"dashboard-detail--cancel-dashboard\"\n (click)=\"cancel()\"\n >\n {{ 'Cancel' | translate }}\n </button>\n <button\n class=\"btn btn-primary\"\n title=\"{{ 'Save' | translate }}\"\n type=\"button\"\n data-cy=\"dashboard-detail--save-dashboard\"\n (click)=\"save()\"\n [disabled]=\"\n (dashboardDetailsForm?.invalid || dashboardDetailsForm?.pristine) && this.isEdit\n \"\n >\n {{ 'Save' | translate }}\n </button>\n </div>\n</div>\n" }]
@@ -383,5 +414,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.9", ngImpor
383
414
  type: Output
384
415
  }], previewChanged: [{
385
416
  type: Output
386
- }] } });
387
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGFzaGJvYXJkLWRldGFpbC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9jb250ZXh0LWRhc2hib2FyZC9kYXNoYm9hcmQtZGV0YWlsLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uL2NvbnRleHQtZGFzaGJvYXJkL2Rhc2hib2FyZC1kZXRhaWwuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLFNBQVMsRUFDVCxZQUFZLEVBQ1osS0FBSyxFQUlMLE1BQU0sRUFDUCxNQUFNLGVBQWUsQ0FBQztBQUV2QixPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3pELE9BQU8sRUFFTCxlQUFlLEVBRWYsbUJBQW1CLEVBQ25CLGdCQUFnQixFQUNoQixPQUFPLEVBQ1AsWUFBWSxFQUNaLFlBQVksRUFDWixjQUFjLEVBQ2QsTUFBTSxFQUVOLFdBQVcsRUFDWixNQUFNLHFCQUFxQixDQUFDO0FBQzdCLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ3ZELE9BQU8sRUFBRSxLQUFLLEVBQUUsU0FBUyxFQUFFLE9BQU8sRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUN0RCxPQUFPLEVBQWMsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQzNDLE9BQU8sRUFHTCwwQkFBMEIsRUFDMUIscUJBQXFCLEVBR3JCLGtCQUFrQixFQUNsQix1Q0FBdUMsRUFDeEMsTUFBTSwyQkFBMkIsQ0FBQztBQUNuQyxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUN0RSxPQUFPLEVBQWtCLGdCQUFnQixFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQy9ELE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUN2QyxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDeEQsT0FBTyxFQUFFLHNC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QUFTLENBQy9DLENBQUM7WUFDRixxR0FBcUc7WUFDckcsSUFBSSxDQUFDLGtCQUFrQixJQUFJLGdCQUFnQixFQUFFLGFBQWEsRUFBRSxDQUFDO2dCQUMzRCxPQUFPO1lBQ1QsQ0FBQztZQUNELHNFQUFzRTtZQUN0RSxrQkFBa0IsQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDO1lBQy9CLGtCQUFrQixDQUFDLFFBQVEsR0FBRyxDQUFDLFFBQVEsQ0FBQztZQUN4QyxJQUFJLENBQUMsV0FBVyxDQUFDLE9BQU8sRUFBRSxDQUFDO1FBQzdCLENBQUM7UUFDRCxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7SUFDM0MsQ0FBQzs4R0F0WlUsd0JBQXdCO2tHQUF4Qix3QkFBd0IsZ1dDaERyQyx3d0hBeUdBOzsyRkR6RGEsd0JBQXdCO2tCQUpwQyxTQUFTOytCQUNFLHNCQUFzQjswZEFPdkIsUUFBUTtzQkFBaEIsS0FBSztnQkFDRyxVQUFVO3NCQUFsQixLQUFLO2dCQUNHLE9BQU87c0JBQWYsS0FBSztnQkFDRyxFQUFFO3NCQUFWLEtBQUs7Z0JBQ0csU0FBUztzQkFBakIsS0FBSztnQkFDRyxnQkFBZ0I7c0JBQXhCLEtBQUs7Z0JBQ0csZ0JBQWdCO3NCQUF4QixLQUFLO2dCQVlJLGNBQWM7c0JBQXZCLE1BQU07Z0JBQ0csY0FBYztzQkFBdkIsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIENvbXBvbmVudCxcbiAgRXZlbnRFbWl0dGVyLFxuICBJbnB1dCxcbiAgT25DaGFuZ2VzLFxuICBPbkRlc3Ryb3ksXG4gIE9uSW5pdCxcbiAgT3V0cHV0XG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRm9ybUdyb3VwIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgQWN0aXZhdGVkUm91dGUsIFJvdXRlciB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQge1xuICBBcHBsaWNhdGlvbk9wdGlvbnMsXG4gIEFwcFN0YXRlU2VydmljZSxcbiAgQ29udGV4dERhdGEsXG4gIENvbnRleHRSb3V0ZVNlcnZpY2UsXG4gIEdhaW5zaWdodFNlcnZpY2UsXG4gIGdldHRleHQsXG4gIEdyb3VwU2VydmljZSxcbiAgTW9kYWxTZXJ2aWNlLFxuICBPcHRpb25zU2VydmljZSxcbiAgU3RhdHVzLFxuICBUYWIsXG4gIFRhYnNTZXJ2aWNlXG59IGZyb20gJ0BjOHkvbmd4LWNvbXBvbmVudHMnO1xuaW1wb3J0IHsgVHJhbnNsYXRlU2VydmljZSB9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnO1xuaW1wb3J0IHsgY2xvbmUsIGNsb25lRGVlcCwgaXNFcXVhbCB9IGZyb20gJ2xvZGFzaC1lcyc7XG5pbXBvcnQgeyBPYnNlcnZhYmxlLCBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5pbXBvcnQge1xuICBDb250ZXh0RGFzaGJvYXJkLFxuICBDb250ZXh0RGFzaGJvYXJkTWFuYWdlZE9iamVjdCxcbiAgREFTSEJPQVJEX1NFVFRJTkdTX0NIQU5HRVMsXG4gIERhc2hib2FyZERldGFpbHNUYWJJZCxcbiAgRGFzaGJvYXJkRGV0YWlsc1RhYnMsXG4gIERhc2hib2FyZEhpc3RvcnlEZXNjcmlwdGlvbixcbiAgUFJPRFVDVF9FWFBFUklFTkNFLFxuICBSRVBPUlRfREVGQVVMVF9OQVZJR0FUSU9OX05PREVfUFJJT1JJVFlcbn0gZnJvbSAnLi9jb250ZXh0LWRhc2hib2FyZC5tb2RlbCc7XG5pbXBvcnQgeyBDb250ZXh0RGFzaGJvYXJkU2VydmljZSB9IGZyb20gJy4vY29udGV4dC1kYXNoYm9hcmQuc2VydmljZSc7XG5pbXBvcnQgeyBJTWFuYWdlZE9iamVjdCwgSW52ZW50b3J5U2VydmljZSB9IGZyb20gJ0BjOHkvY2xpZW50JztcbmltcG9ydCB7IGZpcnN0IH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgbmV3RGFzaGJvYXJkVGFiIH0gZnJvbSAnLi9uZXctZGFzaGJvYXJkLmd1YXJkJztcbmltcG9ydCB7IERhc2hib2FyZERldGFpbFNlcnZpY2UgfSBmcm9tICcuL2Rhc2hib2FyZC1kZXRhaWwuc2VydmljZSc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2M4eS1kYXNoYm9hcmQtZGV0YWlsJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2Rhc2hib2FyZC1kZXRhaWwuY29tcG9uZW50Lmh0bWwnXG59KVxuZXhwb3J0IGNsYXNzIERhc2hib2FyZERldGFpbENvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25DaGFuZ2VzLCBPbkRlc3Ryb3kge1xuICBpc0NvbGxhcHNlZCA9IHRydWU7XG4gIGN1cnJlbnRDb250ZXh0OiBDb250ZXh0RGF0YTtcbiAgY3VycmVudERhc2hib2FyZDogQ29udGV4dERhc2hib2FyZDtcbiAgQElucHV0KCkgaXNSZXBvcnQ6IGJvb2xlYW47XG4gIEBJbnB1dCgpIGRldmljZVR5cGU6IHN0cmluZztcbiAgQElucHV0KCkgY29udGV4dDogYW55O1xuICBASW5wdXQoKSBtbzogQ29udGV4dERhc2hib2FyZE1hbmFnZWRPYmplY3Q7XG4gIEBJbnB1dCgpIGRhc2hib2FyZDogQ29udGV4dERhc2hib2FyZDtcbiAgQElucHV0KCkgaXNOYW1lZERhc2hib2FyZDogYm9vbGVhbjtcbiAgQElucHV0KCkgaGlkZUF2YWlsYWJpbGl0eSA9IGZhbHNlO1xuICBkZXZpY2VUeXBlVmFsdWU6IHN0cmluZztcbiAgZGlzcGxheURldmljZVR5cGVWYWx1ZTogc3RyaW5nO1xuICBpY29uczogc3RyaW5nW107XG4gIG5hbWVQbGFjZWhvbGRlcjogc3RyaW5nO1xuICB0YWJzJDogT2JzZXJ2YWJsZTxUYWJbXT47XG4gIHNlbGVjdGVkVGFiOiBEYXNoYm9hcmREZXRhaWxzVGFiSWQgPSBEYXNoYm9hcmREZXRhaWxzVGFiSWQuR0VORVJBTDtcbiAgZGFzaGJvYXJkRGV0YWlsc0Zvcm06IFJldHVyblR5cGU8RGFzaGJvYXJkRGV0YWlsU2VydmljZVsnaW5pdEZvcm0nXT47XG4gIGdlbmVyYWxTZXR0aW5nc0Zvcm06IFJldHVyblR5cGU8RGFzaGJvYXJkRGV0YWlsU2VydmljZVsnaW5pdEdlbmVyYWxTZXR0aW5nc0Zvcm0nXT47XG4gIGFwcGVhcmFuY2VTZXR0aW5nc0Zvcm06IFJldHVyblR5cGU8RGFzaGJvYXJkRGV0YWlsU2VydmljZVsnaW5pdEFwcGVhcmFuY2VTZXR0aW5nc0Zvcm0nXT47XG4gIGFsbG93VHlwZURhc2hib2FyZDogYm9vbGVhbjtcbiAgaXNFZGl0OiBib29sZWFuO1xuICBAT3V0cHV0KCkgZGFzaGJvYXJkU2F2ZWQgPSBuZXcgRXZlbnRFbWl0dGVyPENvbnRleHREYXNoYm9hcmQ+KCk7XG4gIEBPdXRwdXQoKSBwcmV2aWV3Q2hhbmdlZCA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuICByZWFkb25seSBISURFX1RZUEVfREFTSEJPQVJEX0ZPUl9BU1NFVFM6IGtleW9mIEFwcGxpY2F0aW9uT3B0aW9ucyA9ICdoaWRlVHlwZURhc2hib2FyZEZvckFzc2V0cyc7XG4gIHByaXZhdGUgZGVzdHJveSQ6IFN1YmplY3Q8dm9pZD4gPSBuZXcgU3ViamVjdCgpO1xuXG4gIHJlYWRvbmx5IFRBQlNfT1VUTEVUX05BTUUgPSAnZGFzaGJvYXJkVGFicyc7XG4gIHJlYWRvbmx5IFRBQlM6IERhc2hib2FyZERldGFpbHNUYWJzID0ge1xuICAgIGdlbmVyYWw6IHtcbiAgICAgIGZlYXR1cmVJZDogRGFzaGJvYXJkRGV0YWlsc1RhYklkLkdFTkVSQUwsXG4gICAgICBwcmlvcml0eTogMzAsXG4gICAgICBsYWJlbDogZ2V0dGV4dCgnR2VuZXJhbCcpXG4gICAgfSxcbiAgICBhcHBlYXJhbmNlOiB7XG4gICAgICBmZWF0dXJlSWQ6IERhc2hib2FyZERldGFpbHNUYWJJZC5BUFBFQVJBTkNFLFxuICAgICAgcHJpb3JpdHk6IDIwLFxuICAgICAgbGFiZWw6IGdldHRleHQoJ0FwcGVhcmFuY2UnKVxuICAgIH0sXG4gICAgdmVyc2lvbkhpc3Rvcnk6IHtcbiAgICAgIGZlYXR1cmVJZDogRGFzaGJvYXJkRGV0YWlsc1RhYklkLlZFUlNJT05ISVNUT1JZLFxuICAgICAgcHJpb3JpdHk6IDEwLFxuICAgICAgbGFiZWw6IGdldHRleHQoJ1ZlcnNpb24gaGlzdG9yeScpXG4gICAgfVxuICB9O1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgY29udGV4dERhc2hib2FyZFNlcnZpY2U6IENvbnRleHREYXNoYm9hcmRTZXJ2aWNlLFxuICAgIHByaXZhdGUgdHJhbnNsYXRlU2VydmljZTogVHJhbnNsYXRlU2VydmljZSxcbiAgICBwcml2YXRlIGNvbnRleHRSb3V0ZTogQ29udGV4dFJvdXRlU2VydmljZSxcbiAgICBwcml2YXRlIGFjdGl2YXRlZFJvdXRlOiBBY3RpdmF0ZWRSb3V0ZSxcbiAgICBwcml2YXRlIHRhYnNTZXJ2aWNlOiBUYWJzU2VydmljZSxcbiAgICBwcml2YXRlIHJvdXRlcjogUm91dGVyLFxuICAgIHByaXZhdGUgaW52ZW50b3J5OiBJbnZlbnRvcnlTZXJ2aWNlLFxuICAgIHByaXZhdGUgcm91dGU6IEFjdGl2YXRlZFJvdXRlLFxuICAgIHByaXZhdGUgZGFzaGJvYXJkRGV0YWlsU2VydmljZTogRGFzaGJvYXJkRGV0YWlsU2VydmljZSxcbiAgICBwcml2YXRlIGFwcFN0YXRlOiBBcHBTdGF0ZVNlcnZpY2UsXG4gICAgcHJpdmF0ZSBvcHRpb25zU2VydmljZTogT3B0aW9uc1NlcnZpY2UsXG4gICAgcHJpdmF0ZSBncm91cFNlcnZpY2U6IEdyb3VwU2VydmljZSxcbiAgICBwcml2YXRlIG1vZGFsOiBNb2RhbFNlcnZpY2UsXG4gICAgcHJpdmF0ZSBnYWluc2lnaHRTZXJ2aWNlOiBHYWluc2lnaHRTZXJ2aWNlXG4gICkge31cblxuICBuZ09uSW5pdCgpIHtcbiAgICB0aGlzLnRhYnMkID0gdGhpcy50YWJzU2VydmljZS5pdGVtcyQ7XG4gICAgdGhpcy5jdXJyZW50Q29udGV4dCA9IHRoaXMuY29udGV4dFJvdXRlLmdldENvbnRleHREYXRhKHRoaXMuYWN0aXZhdGVkUm91dGUpO1xuICAgIHRoaXMuZGV2aWNlVHlwZVZhbHVlID0gdGhpcy5nZXREZXZpY2VUeXBlVmFsdWUoKTtcbiAgICB0aGlzLmRpc3BsYXlEZXZpY2VUeXBlVmFsdWUgPVxuICAgICAgdGhpcy5jb250ZXh0ICYmXG4gICAgICB0aGlzLmdyb3VwU2VydmljZS5pc0dyb3VwKHRoaXMuY29udGV4dCkgJiZcbiAgICAgICF0aGlzLmdyb3VwU2VydmljZS5pc0Fzc2V0KHRoaXMuY29udGV4dClcbiAgICAgICAgPyB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudChnZXR0ZXh0KCdHcm91cCcpKVxuICAgICAgICA6IHRoaXMuZGV2aWNlVHlwZVZhbHVlO1xuXG4gICAgdGhpcy51cGRhdGVBbGxvd1R5cGVEYXNoYm9hcmQoKTtcbiAgICB0aGlzLmluaXRGb3JtKCk7XG4gIH1cblxuICBuZ09uQ2hhbmdlcygpOiB2b2lkIHtcbiAgICB0aGlzLnVwZGF0ZUFsbG93VHlwZURhc2hib2FyZCgpO1xuICB9XG5cbiAgbmdBZnRlckNvbnRlbnRJbml0KCk6IHZvaWQge1xuICAgIGlmICghdGhpcy5pc0VkaXQpIHtcbiAgICAgIHRoaXMuaW5pdGlhbGl6ZUNvbmZpZ3VyYXRpb24oKTtcbiAgICB9XG4gIH1cblxuICBuZ09uRGVzdHJveSgpIHtcbiAgICB0aGlzLmRlc3Ryb3kkLm5leHQoKTtcbiAgICB0aGlzLmRlc3Ryb3kkLmNvbXBsZXRlKCk7XG4gIH1cblxuICBhc3luYyBzYXZlKCkge1xuICAgIGNvbnN0IG9sZERhc2hib2FyZCA9IGNsb25lRGVlcCh0aGlzLmRhc2hib2FyZCk7XG4gICAgdGhpcy5kYXNoYm9hcmQgPSB7XG4gICAgICAuLi50aGlzLmRhc2hib2FyZCxcbiAgICAgIC4uLnRoaXMuZ2VuZXJhbFNldHRpbmdzRm9ybS52YWx1ZSxcbiAgICAgIC4uLnRoaXMuYXBwZWFyYW5jZVNldHRpbmdzRm9ybS52YWx1ZVxuICAgIH07XG4gICAgY29uc3QgZGFzaGJvYXJkU2V0dGluZ0NoYW5nZXM6IHN0cmluZ1tdID0gT2JqZWN0LmtleXModGhpcy5kYXNoYm9hcmQpLmZpbHRlcihrZXkgPT4ge1xuICAgICAgaWYgKGtleSA9PT0gJ2M4eV9Jc05hdmlnYXRvck5vZGUnKSB7XG4gICAgICAgIHJldHVybiAhIW9sZERhc2hib2FyZFtrZXldICE9PSAhIXRoaXMuZGFzaGJvYXJkW2tleV07XG4gICAgICB9XG4gICAgICByZXR1cm4gIWlzRXF1YWwob2xkRGFzaGJvYXJkW2tleV0sIHRoaXMuZGFzaGJvYXJkW2tleV0pO1xuICAgIH0pO1xuXG4gICAgdGhpcy5kYXNoYm9hcmQuYXV0aG9yID0gdGhpcy5hcHBTdGF0ZS5jdXJyZW50VXNlci52YWx1ZS51c2VyTmFtZTtcbiAgICB0aGlzLmRhc2hib2FyZC5jOHlfSXNOYXZpZ2F0b3JOb2RlID0gdGhpcy5kYXNoYm9hcmQuYzh5X0lzTmF2aWdhdG9yTm9kZVxuICAgICAgPyB7fVxuICAgICAgOiB0aGlzLmN1cnJlbnREYXNoYm9hcmRcbiAgICAgICAgPyBudWxsXG4gICAgICAgIDogdW5kZWZpbmVkO1xuXG4gICAgdGhpcy5kYXNoYm9hcmQuZGV2aWNlVHlwZVZhbHVlID8/PSB0aGlzLmRldmljZVR5cGVWYWx1ZTtcbiAgICB0aGlzLmRhc2hib2FyZC5oaXN0b3J5RGVzY3JpcHRpb24gPVxuICAgICAgdGhpcy51cGRhdGVEYXNoYm9hcmRIaXN0b3J5RGVzY3JpcHRpb24oZGFzaGJvYXJkU2V0dGluZ0NoYW5nZXMpO1xuICAgIGlmICghdGhpcy5pc0VkaXQgJiYgIXRoaXMuaXNSZXBvcnQpIHtcbiAgICAgIGF3YWl0IHRoaXMuY3JlYXRlTmV3RGFzaGJvYXJkKCk7XG4gICAgfSBlbHNlIGlmICghdGhpcy5pc0VkaXQgJiYgdGhpcy5pc1JlcG9ydCkge1xuICAgICAgYXdhaXQgdGhpcy5jcmVhdGVOZXdSZXBvcnQoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgYXdhaXQgdGhpcy51cGRhdGVEYXNoYm9hcmQoKTtcbiAgICAgIHRoaXMubW8uYzh5X0Rhc2hib2FyZEhpc3RvcnkgPSBbXG4gICAgICAgIHRoaXMuZGFzaGJvYXJkLFxuICAgICAgICAuLi4odGhpcy5tbz8uYzh5X0Rhc2hib2FyZEhpc3RvcnkgPyB0aGlzLm1vLmM4eV9EYXNoYm9hcmRIaXN0b3J5IDogW10pXG4gICAgICBdO1xuICAgIH1cbiAgfVxuXG4gIHVwZGF0ZURhc2hib2FyZEhpc3RvcnlEZXNjcmlwdGlvbihkYXNoYm9hcmRDaGFuZ2VzOiBzdHJpbmdbXSk6IERhc2hib2FyZEhpc3RvcnlEZXNjcmlwdGlvbiB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGNoYW5nZVR5cGU6IHRoaXMuaXNFZGl0ID8gJ3VwZGF0ZScgOiAnY3JlYXRlJyxcbiAgICAgIGRhc2hib2FyZFNldHRpbmdDaGFuZ2VzOiBkYXNoYm9hcmRDaGFuZ2VzXG4gICAgICAgIC5maWx0ZXIodmFsdWUgPT4gdmFsdWUgIT09ICdkZXZpY2VUeXBlJylcbiAgICAgICAgLm1hcCh2YWx1ZSA9PiBEQVNIQk9BUkRfU0VUVElOR1NfQ0hBTkdFU1t2YWx1ZV0gfHwgdmFsdWUpLFxuICAgICAgZGV2aWNlVHlwZTogZGFzaGJvYXJkQ2hhbmdlcy5maW5kKHZhbHVlID0+IHZhbHVlID09PSAnZGV2aWNlVHlwZScpXG4gICAgICAgID8gdGhpcy5kYXNoYm9hcmQuZGV2aWNlVHlwZVxuICAgICAgICA6IHVuZGVmaW5lZFxuICAgIH07XG4gIH1cblxuICBzZWxlY3RUYWIoc2VsZWN0ZWRUYWI6IERhc2hib2FyZERldGFpbHNUYWJJZCkge1xuICAgIHRoaXMuc2VsZWN0ZWRUYWIgPSBzZWxlY3RlZFRhYjtcbiAgICB0aGlzLnRhYnNTZXJ2aWNlLnJlZnJlc2goKTtcbiAgfVxuXG4gIGFzeW5jIGNhbmNlbCgpIHtcbiAgICBpZiAoIXRoaXMuaXNFZGl0ICYmICF0aGlzLmlzUmVwb3J0KSB7XG4gICAgICAvLyBkYXNoYm9hcmQgY3JlYXRpb24gaW4gaXQncyBvd24gdGFiLSBjb25maXJtIGFuZCBjbGVhbnVwIHRyaWdnZXJlZCBpbiBjYW5EZWFjdGl2YXRlIGR1cmluZyByb3V0aW5nXG4gICAgICB0aGlzLnRhYnNTZXJ2aWNlLml0ZW1zJC5waXBlKGZpcnN0KCkpLnN1YnNjcmliZSgodGFiczogVGFiW10pID0+IHtcbiAgICAgICAgY29uc3QgdGFiID0gdGFicy5maW5kKHQgPT4gdC5mZWF0dXJlSWQgIT09IG5ld0Rhc2hib2FyZFRhYi5mZWF0dXJlSWQpO1xuICAgICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZUJ5VXJsKHRhYi5wYXRoLCB7IHJlcGxhY2VVcmw6IHRydWUgfSk7XG4gICAgICB9KTtcbiAgICAgIHJldHVybjtcbiAgICB9IGVsc2UgaWYgKCF0aGlzLmlzRWRpdCAmJiB0aGlzLmlzUmVwb3J0KSB7XG4gICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbJ3JlcG9ydHMnXSk7XG4gICAgICByZXR1cm47XG4gICAgfSBlbHNlIGlmICh0aGlzLmRhc2hib2FyZERldGFpbHNGb3JtLmRpcnR5ICYmICEoYXdhaXQgdGhpcy5jb25maXJtQ2xvc2luZygpKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLmNsZWFudXBBZnRlckRldGFpbHNDbG9zZSgpO1xuICB9XG5cbiAgYXN5bmMgY2FuRGVhY3RpdmF0ZShvbWl0Q29uZmlybSA9IGZhbHNlKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgbGV0IGNhbkRlYWN0aXZhdGU6IGJvb2xlYW47XG4gICAgaWYgKHRoaXMuaXNDb2xsYXBzZWQgfHwgIXRoaXMuZGFzaGJvYXJkRGV0YWlsc0Zvcm0uZGlydHkpIHtcbiAgICAgIGNhbkRlYWN0aXZhdGUgPSB0cnVlO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAob21pdENvbmZpcm0pIHtcbiAgICAgICAgY2FuRGVhY3RpdmF0ZSA9IGZhbHNlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY2FuRGVhY3RpdmF0ZSA9IGF3YWl0IHRoaXMuY29uZmlybUNsb3NpbmcoKTtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKGNhbkRlYWN0aXZhdGUpIHtcbiAgICAgIHRoaXMuY2xlYW51cEFmdGVyRGV0YWlsc0Nsb3NlKCk7XG4gICAgfVxuICAgIHJldHVybiBjYW5EZWFjdGl2YXRlO1xuICB9XG5cbiAgc2hvdyhpc0VkaXQ6IGJvb2xlYW4pIHtcbiAgICB0aGlzLmlzRWRpdCA9IGlzRWRpdDtcbiAgICBpZiAodGhpcy5pc0VkaXQpIHtcbiAgICAgIHRoaXMuZWRpdCgpO1xuICAgIH1cbiAgICB0aGlzLmluaXRGb3JtKCk7XG4gICAgdGhpcy5pc0NvbGxhcHNlZCA9IGZhbHNlO1xuICB9XG5cbiAgYXN5bmMgcmV2ZXJ0RGFzaGJvYXJkKGRhc2hib2FyZDogQ29udGV4dERhc2hib2FyZCkge1xuICAgIHRoaXMuZGFzaGJvYXJkID0gZGFzaGJvYXJkO1xuICAgIHRoaXMuZGFzaGJvYXJkLmM4eV9Jc05hdmlnYXRvck5vZGUgPSB0aGlzLmRhc2hib2FyZC5jOHlfSXNOYXZpZ2F0b3JOb2RlXG4gICAgICA/IHt9XG4gICAgICA6IHRoaXMuY3VycmVudERhc2hib2FyZFxuICAgICAgICA/IG51bGxcbiAgICAgICAgOiB1bmRlZmluZWQ7XG4gICAgYXdhaXQgdGhpcy51cGRhdGVEYXNoYm9hcmQoKTtcbiAgfVxuXG4gIGFzeW5jIGR1cGxpY2F0ZVdpdGhvdXRUeXBlKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IG5ld0Rhc2hib2FyZE5hbWUgPSB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudChnZXR0ZXh0KCd7eyBkYXNoYm9hcmROYW1lIH19IChjb3B5KScpLCB7XG4gICAgICBkYXNoYm9hcmROYW1lOiB0aGlzLmdlbmVyYWxTZXR0aW5nc0Zvcm0udmFsdWUubmFtZVxuICAgIH0pO1xuICAgIHRoaXMuZ2VuZXJhbFNldHRpbmdzRm9ybS5wYXRjaFZhbHVlKHtcbiAgICAgIGRldmljZVR5cGU6IGZhbHNlLFxuICAgICAgbmFtZTogbmV3RGFzaGJvYXJkTmFtZVxuICAgIH0pO1xuICAgIC8vIHNldHRpbmcgZWRpdGlvbiB0byBmYWxzZSBzbyBuZXcgZGFzaGJvYXJkIGNhbiBiZSBjcmVhdGVkIGFzIGNvcHkgb2YgY3VycmVudCBvbmVcbiAgICB0aGlzLmlzRWRpdCA9IGZhbHNlO1xuICAgIGF3YWl0IHRoaXMuc2F2ZSgpO1xuICB9XG5cbiAgcHJpdmF0ZSB1cGRhdGVBbGxvd1R5cGVEYXNoYm9hcmQoKTogdm9pZCB7XG4gICAgdGhpcy5hbGxvd1R5cGVEYXNoYm9hcmQgPSB0aGlzLmNvbnRleHREYXNoYm9hcmRTZXJ2aWNlLnNob3VsZEFsbG93VG9TZXREYXNoYm9hcmRUeXBlKFxuICAgICAgdGhpcy5tbyxcbiAgICAgIHRoaXMuZGV2aWNlVHlwZVZhbHVlXG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0RGV2aWNlVHlwZVZhbHVlKCk6IHN0cmluZyB7XG4gICAgY29uc3QgaXNBbGxvd2VkVHlwZVZhbHVlID0gdGhpcy5vcHRpb25zU2VydmljZS5nZXQodGhpcy5ISURFX1RZUEVfREFTSEJPQVJEX0ZPUl9BU1NFVFMsIHRydWUpXG4gICAgICA/ICEhdGhpcy5jb250ZXh0Py5jOHlfSXNEZXZpY2VcbiAgICAgIDogISF0aGlzLmNvbnRleHQ/LmM4eV9Jc0RldmljZSB8fCAhIXRoaXMuY29udGV4dD8uYzh5X0lzRGV2aWNlR3JvdXA7XG4gICAgcmV0dXJuIGlzQWxsb3dlZFR5cGVWYWx1ZSA/IHRoaXMuY29udGV4dD8udHlwZSA6IG51bGw7XG4gIH1cblxuICBwcml2YXRlIGluaXRGb3JtKCk6IHZvaWQge1xuICAgIHRoaXMuZGFzaGJvYXJkRGV0YWlsc0Zvcm0gPSB0aGlzLmRhc2hib2FyZERldGFpbFNlcnZpY2UuaW5pdEZvcm0oXG4gICAgICB0aGlzLmRhc2hib2FyZCxcbiAgICAgIHRoaXMuaXNSZXBvcnQsXG4gICAgICB0aGlzLmFsbG93VHlwZURhc2hib2FyZCA/IHRoaXMuZ2V0RGV2aWNlVHlwZVZhbHVlKCkgOiBudWxsXG4gICAgKTtcbiAgICB0aGlzLmdlbmVyYWxTZXR0aW5nc0Zvcm0gPSB0aGlzLmRhc2hib2FyZERldGFpbHNGb3JtLmdldCgnZ2VuZXJhbFNldHRpbmdzRm9ybScpIGFzIEZvcm1Hcm91cDtcbiAgICB0aGlzLmFwcGVhcmFuY2VTZXR0aW5nc0Zvcm0gPSB0aGlzLmRhc2hib2FyZERldGFpbHNGb3JtLmdldChcbiAgICAgICdhcHBlYXJhbmNlU2V0dGluZ3NGb3JtJ1xuICAgICkgYXMgRm9ybUdyb3VwO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBjb25maXJtQ2xvc2luZygpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICB0cnkge1xuICAgICAgYXdhaXQgdGhpcy5tb2RhbC5jb25maXJtKFxuICAgICAgICBnZXR0ZXh0KCdDbG9zZSBkYXNoYm9hcmQgZGV0YWlscycpLFxuICAgICAgICBnZXR0ZXh0KFxuICAgICAgICAgICdBcmUgeW91IHN1cmUgeW91IHdhbnQgdG8gY2xvc2UgZGFzaGJvYXJkIGRldGFpbHM/IEFsbCB1bnNhdmVkIGNoYW5nZXMgd2lsbCBiZSBsb3N0LidcbiAgICAgICAgKSxcbiAgICAgICAgU3RhdHVzLldBUk5JTkcsXG4gICAgICAgIHtcbiAgICAgICAgICBvazogZ2V0dGV4dCgnQ2xvc2UnKSxcbiAgICAgICAgICBjYW5jZWw6IGdldHRleHQoJ0NhbmNlbCcpXG4gICAgICAgIH1cbiAgICAgICk7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBjcmVhdGVOZXdEYXNoYm9hcmQoKSB7XG4gICAgY29uc3QgZGFzaGJvYXJkTU86IENvbnRleHREYXNoYm9hcmRNYW5hZ2VkT2JqZWN0ID0gYXdhaXQgdGhpcy5jb250ZXh0RGFzaGJvYXJkU2VydmljZS5jcmVhdGUoXG4gICAgICB0aGlzLmRhc2hib2FyZCxcbiAgICAgIHRoaXMuY3VycmVudENvbnRleHRcbiAgICApO1xuICAgIHRoaXMuZ2FpbnNpZ2h0U2VydmljZS50cmlnZ2VyRXZlbnQoUFJPRFVDVF9FWFBFUklFTkNFLkRBU0hCT0FSRC5FVkVOVFMuREFTSEJPQVJEUywge1xuICAgICAgY29tcG9uZW50OiBQUk9EVUNUX0VYUEVSSUVOQ0UuREFTSEJPQVJELkNPTVBPTkVOVFMuQUREX0RBU0hCT0FSRCxcbiAgICAgIGFjdGlvbjogUFJPRFVDVF9FWFBFUklFTkNFLkRBU0hCT0FSRC5BQ1RJT05TLkNSRUFURSxcbiAgICAgIG5hbWU6IHRoaXMuZGFzaGJvYXJkLm5hbWUsXG4gICAgICBpZDogZGFzaGJvYXJkTU8uaWQsXG4gICAgICBkYXNoYm9hcmRUeXBlOiBkYXNoYm9hcmRNTy5jOHlfRGFzaGJvYXJkLmRldmljZVR5cGVcbiAgICAgICAgPyBkYXNoYm9hcmRNTy5jOHlfRGFzaGJvYXJkLmRldmljZVR5cGVWYWx1ZVxuICAgICAgICA6IG51bGwsXG4gICAgICBjb250ZXh0OiB0aGlzLmNvbnRleHREYXNoYm9hcmRTZXJ2aWNlLmdldENvbnRleHRGb3JHUyhcbiAgICAgICAgdGhpcy5jdXJyZW50Q29udGV4dC5jb250ZXh0RGF0YSBhcyBJTWFuYWdlZE9iamVjdFxuICAgICAgKVxuICAgIH0pO1xuICAgIHRoaXMuY2xlYW51cEFmdGVyRGV0YWlsc0Nsb3NlKCk7XG4gICAgYXdhaXQgdGhpcy5jb250ZXh0RGFzaGJvYXJkU2VydmljZS5uYXZpZ2F0ZVRvRGFzaGJvYXJkKGRhc2hib2FyZE1PKTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgY3JlYXRlTmV3UmVwb3J0KCkge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCB7IG5hbWUsIGljb24sIGM4eV9Jc05hdmlnYXRvck5vZGUsIHByaW9yaXR5LCBkZXNjcmlwdGlvbiB9ID0gdGhpcy5kYXNoYm9hcmQ7XG4gICAgICBjb25zdCByZXBvcnQgPSAoXG4gICAgICAgIGF3YWl0IHRoaXMuY29udGV4dERhc2hib2FyZFNlcnZpY2UuY3JlYXRlUmVwb3J0KHtcbiAgICAgICAgICBuYW1lLFxuICAgICAgICAgIGljb24sXG4gICAgICAgICAgYzh5X0lzTmF2aWdhdG9yTm9kZSxcbiAgICAgICAgICBwcmlvcml0eSxcbiAgICAgICAgICBkZXNjcmlwdGlvblxuICAgICAgICB9IGFzIFBhcnRpYWw8SU1hbmFnZWRPYmplY3Q+KVxuICAgICAgKS5kYXRhO1xuXG4gICAgICBhd2FpdCB0aGlzLmNvbnRleHREYXNoYm9hcmRTZXJ2aWNlLmNyZWF0ZShcbiAgICAgICAgdGhpcy5kYXNoYm9hcmQsXG4gICAgICAgIHVuZGVmaW5lZCxcbiAgICAgICAgYCR7dGhpcy5jb250ZXh0RGFzaGJvYXJkU2VydmljZS5SRVBPUlRfUEFSVElBTF9OQU1FfSR7cmVwb3J0LmlkfWBcbiAgICAgICk7XG4gICAgICB0aGlzLmdhaW5zaWdodFNlcnZpY2UudHJpZ2dlckV2ZW50KFBST0RVQ1RfRVhQRVJJRU5DRS5EQVNIQk9BUkQuRVZFTlRTLlJFUE9SVFMsIHtcbiAgICAgICAgY29tcG9uZW50OiBQUk9EVUNUX0VYUEVSSUVOQ0UuREFTSEJPQVJELkNPTVBPTkVOVFMuQUREX1JFUE9SVCxcbiAgICAgICAgYWN0aW9uOiBQUk9EVUNUX0VYUEVSSUVOQ0UuREFTSEJPQVJELkFDVElPTlMuQ1JFQVRFLFxuICAgICAgICBuYW1lOiByZXBvcnQubmFtZSxcbiAgICAgICAgaWQ6IHJlcG9ydC5pZCxcbiAgICAgICAgY29udGV4dDogUFJPRFVDVF9FWFBFUklFTkNFLkRBU0hCT0FSRC5DT05URVhULlJFUE9SVFxuICAgICAgfSk7XG4gICAgICBpZiAocmVwb3J0LmM4eV9Jc05hdmlnYXRvck5vZGUpIHtcbiAgICAgICAgdGhpcy5jb250ZXh0RGFzaGJvYXJkU2VydmljZS5hZGRSZXBvcnROYXZpZ2F0b3JOb2RlKHJlcG9ydCk7XG4gICAgICB9XG4gICAgICB0aGlzLmNsZWFudXBBZnRlckRldGFpbHNDbG9zZSgpO1xuICAgICAgYXdhaXQgdGhpcy5yb3V0ZXIubmF2aWdhdGUoWydyZXBvcnRzJywgcmVwb3J0LmlkXSk7XG4gICAgfSBjYXRjaCAoZXgpIHtcbiAgICAgIC8vIGludGVuZGVkIGVtcHR5XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyB1cGRhdGVEYXNoYm9hcmQoKSB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGRhc2hib2FyZE1POiBDb250ZXh0RGFzaGJvYXJkTWFuYWdlZE9iamVjdCA9IGNsb25lRGVlcCh0aGlzLm1vKTtcbiAgICAgIGNvbnN0IGNmZyA9IHRoaXMuZGFzaGJvYXJkO1xuICAgICAgaWYgKHRoaXMuaXNSZXBvcnQpIHtcbiAgICAgICAgY29uc3QgeyBuYW1lLCBpY29uLCBjOHlfSXNOYXZpZ2F0b3JOb2RlLCBwcmlvcml0eSwgZGVzY3JpcHRpb24gfSA9IGNmZztcbiAgICAgICAgZGFzaGJvYXJkTU8uYzh5X0Rhc2hib2FyZCA9IGNmZztcbiAgICAgICAgYXdhaXQgdGhpcy51cGRhdGVSZXBvcnQoe1xuICAgICAgICAgIGlkOiB0aGlzLmNvbnRleHQuaWQsXG4gICAgICAgICAgbmFtZSxcbiAgICAgICAgICBpY29uLFxuICAgICAgICAgIGM4eV9Jc05hdmlnYXRvck5vZGUsXG4gICAgICAgICAgcHJpb3JpdHksXG4gICAgICAgICAgZGVzY3JpcHRpb25cbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBkYXNoYm9hcmRNTy5jOHlfRGFzaGJvYXJkID0gY2ZnO1xuICAgICAgfVxuXG4gICAgICBjb25zdCB1cGRhdGVkRGFzaGJvYXJkTW8gPSBhd2FpdCB0aGlzLmNvbnRleHREYXNoYm9hcmRTZXJ2aWNlLnVwZGF0ZShcbiAgICAgICAgZGFzaGJvYXJkTU8sXG4gICAgICAgIHRoaXMuY3VycmVudENvbnRleHRcbiAgICAgICk7XG4gICAgICB0aGlzLmNsZWFudXBBZnRlckRldGFpbHNDbG9zZSgpO1xuXG4gICAgICB0aGlzLmRhc2hib2FyZFNhdmVkLmVtaXQodXBkYXRlZERhc2hib2FyZE1vKTtcbiAgICB9IGNhdGNoIChleCkge1xuICAgICAgLy8gaW50ZW5kZWQgZW1wdHlcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGVkaXQoKSB7XG4gICAgaWYgKHRoaXMuaXNSZXBvcnQpIHtcbiAgICAgIGNvbnN0IHsgbmFtZSwgaWNvbiwgcHJpb3JpdHksIGM4eV9Jc05hdmlnYXRvck5vZGUsIGRlc2NyaXB0aW9uIH0gPSB0aGlzLmNvbnRleHQ7XG4gICAgICBPYmplY3QuYXNzaWduKHRoaXMuZGFzaGJvYXJkLCB7IG5hbWUsIGljb24sIHByaW9yaXR5LCBjOHlfSXNOYXZpZ2F0b3JOb2RlLCBkZXNjcmlwdGlvbiB9KTtcbiAgICB9XG4gICAgdGhpcy5pc05hbWVkRGFzaGJvYXJkID0gdGhpcy5jb250ZXh0RGFzaGJvYXJkU2VydmljZS5pc05hbWVkKHRoaXMubW8pO1xuICAgIHRoaXMuc2VsZWN0ZWRUYWIgPVxuICAgICAgdGhpcy5oaWRlQXZhaWxhYmlsaXR5ICYmIHRoaXMuaXNOYW1lZERhc2hib2FyZFxuICAgICAgICA/IERhc2hib2FyZERldGFpbHNUYWJJZC5BUFBFQVJBTkNFXG4gICAgICAgIDogRGFzaGJvYXJkRGV0YWlsc1RhYklkLkdFTkVSQUw7XG4gICAgdGhpcy5pbml0aWFsaXplQ29uZmlndXJhdGlvbigpO1xuICB9XG5cbiAgcHJpdmF0ZSBpbml0aWFsaXplQ29uZmlndXJhdGlvbigpIHtcbiAgICBjb25zdCBkZWZhdWx0RGFzaGJvYXJkQ2ZnOiBQYXJ0aWFsPENvbnRleHREYXNoYm9hcmQ+ID0ge1xuICAgICAgbmFtZTogdGhpcy50cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQodGhpcy5pc1JlcG9ydCA/IGdldHRleHQoJ1JlcG9ydCcpIDogZ2V0dGV4dCgnRGFzaGJvYXJkJykpLFxuICAgICAgcHJpb3JpdHk6IHRoaXMuaXNSZXBvcnRcbiAgICAgICAgPyBSRVBPUlRfREVGQVVMVF9OQVZJR0FUSU9OX05PREVfUFJJT1JJVFlcbiAgICAgICAgOiB0aGlzLmRhc2hib2FyZERldGFpbFNlcnZpY2UuREVGQVVMVF9EQVNIQk9BUkRfUFJJT1JJVFksXG4gICAgICBpY29uOiB0aGlzLmRhc2hib2FyZERldGFpbFNlcnZpY2UuREVGQVVMVF9EQVNIQk9BUkRfSUNPTixcbiAgICAgIGRldmljZVR5cGVWYWx1ZTogdGhpcy5kZXZpY2VUeXBlLFxuICAgICAgY29sdW1uczogMjRcbiAgICB9O1xuXG4gICAgaWYgKHRoaXMuZGFzaGJvYXJkKSB7XG4gICAgICB0aGlzLmN1cnJlbnREYXNoYm9hcmQgPSBjbG9uZSh0aGlzLmRhc2hib2FyZCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuZGFzaGJvYXJkID0gZGVmYXVsdERhc2hib2FyZENmZztcbiAgICAgIHRoaXMuZGFzaGJvYXJkRGV0YWlsc0Zvcm0ubWFya0FzRGlydHkoKTtcbiAgICB9XG4gICAgdGhpcy5uYW1lUGxhY2Vob2xkZXIgPSB0aGlzLmlzUmVwb3J0ID8gZ2V0dGV4dCgnZS5nLiBNeSByZXBvcnQnKSA6IGdldHRleHQoJ2UuZy4gTXkgZGFzaGJvYXJkJyk7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIHVwZGF0ZVJlcG9ydChtbzogUGFydGlhbDxJTWFuYWdlZE9iamVjdD4pIHtcbiAgICBtby5jOHlfSXNOYXZpZ2F0b3JOb2RlID0gbW8uYzh5X0lzTmF2aWdhdG9yTm9kZSA/IHt9IDogbnVsbDtcbiAgICBjb25zdCByZXMgPSBhd2FpdCB0aGlzLmludmVudG9yeS51cGRhdGUobW8pO1xuICAgIHRoaXMuY29udGV4dCA9IHJlcy5kYXRhO1xuICAgIGlmICh0aGlzLnJvdXRlLnBhcmVudCkge1xuICAgICAgdGhpcy5yb3V0ZS5wYXJlbnQuc25hcHNob3QuZGF0YS5jb250ZXh0RGF0YSA9IHRoaXMuY29udGV4dDtcbiAgICB9XG4gICAgdGhpcy5jb250ZXh0RGFzaGJvYXJkU2VydmljZS51cGRhdGVOYXZpZ2F0b3JJdGVtKHJlcy5kYXRhKTtcbiAgfVxuXG4gIHByaXZhdGUgY2xlYW51cEFmdGVyRGV0YWlsc0Nsb3NlKCkge1xuICAgIHRoaXMuaXNDb2xsYXBzZWQgPSB0cnVlO1xuICAgIGlmICghdGhpcy5pc0VkaXQpIHtcbiAgICAgIGNvbnN0IGRhc2hib2FyZENvbnRleHQgPSB0aGlzLnJvdXRlLnNuYXBzaG90LmRhdGEuZGFzaGJvYXJkO1xuICAgICAgLy8gaGlkZSBOZXcgZGFzaGJvYXJkIHRhYlxuICAgICAgY29uc3QgdG1wTmV3RGFzaGJvYXJkVGFiID0gWy4uLnRoaXMudGFic1NlcnZpY2Uuc3RhdGVdLmZpbmQoXG4gICAgICAgIHQgPT4gdC5mZWF0dXJlSWQgPT09IG5ld0Rhc2hib2FyZFRhYi5mZWF0dXJlSWRcbiAgICAgICk7XG4gICAgICAvLyBkb24ndCBoaWRlIHRoZSBuZXcgZGFzaGJvYXJkIHRhYiB3aGVuIGNsaWNraW5nIG9uIHRoZSBhZGQgZGFzaGJvYXJkIGJ1dHRvbiBmcm9tIGFub3RoZXIgZGFzaGJvYXJkLlxuICAgICAgaWYgKCF0bXBOZXdEYXNoYm9hcmRUYWIgfHwgZGFzaGJvYXJkQ29udGV4dD8uYzh5X0Rhc2hib2FyZCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICAvLyBoaWRlIHRhYiBhbmQgbWFrZSBpdCBhcHBlYXIgYXMgbGFzdCBvbmUgdG8gcHJldmVudCBuYXZpZ2F0aW5nIHRvIGl0XG4gICAgICB0bXBOZXdEYXNoYm9hcmRUYWIuaGlkZSA9IHRydWU7XG4gICAgICB0bXBOZXdEYXNoYm9hcmRUYWIucHJpb3JpdHkgPSAtSW5maW5pdHk7XG4gICAgICB0aGlzLnRhYnNTZXJ2aWNlLnJlZnJlc2goKTtcbiAgICB9XG4gICAgdGhpcy5wcmV2aWV3Q2hhbmdlZC5lbWl0KHRoaXMuZGFzaGJvYXJkKTtcbiAgfVxufVxuIiwiPGRpdlxuICBjbGFzcz1cImNvbGxhcHNlIGM4eS10b3AtZHJhd2VyXCJcbiAgW2NvbGxhcHNlXT1cImlzQ29sbGFwc2VkXCJcbiAgW2lzQW5pbWF0ZWRdPVwidHJ1ZVwiXG4+XG4gIDxkaXYgY2xhc3M9XCJwLXQtMTYgcC1iLTE2IHAtbC0yNCBwLXItMjQgc2VwYXJhdG9yLWJvdHRvbVwiPlxuICAgIDxzcGFuIGNsYXNzPVwiaDRcIj57eyAnRGFzaGJvYXJkIHNldHRpbmdzJyB8IHRyYW5zbGF0ZSB9fTwvc3Bhbj5cbiAgPC9kaXY+XG5cbiAgPGRpdlxuICAgIGNsYXNzPVwiZC1mbGV4XCJcbiAgICBbZm9ybUdyb3VwXT1cImRhc2hib2FyZERldGFpbHNGb3JtXCJcbiAgICAqbmdJZj1cIiFpc0NvbGxhcHNlZFwiXG4gID5cbiAgICA8Yzh5LXRhYnMtb3V0bGV0XG4gICAgICBbdGFic109XCJ0YWJzJCB8IGFzeW5jXCJcbiAgICAgIFtvdXRsZXROYW1lXT1cIidkYXNoYm9hcmRUYWJzJ1wiXG4gICAgICBbb3JpZW50YXRpb25dPVwiJ3ZlcnRpY2FsJ1wiXG4gICAgICBjbGFzcz1cImM4eS10b3AtZHJhd2VyLS10YWJzXCJcbiAgICA+PC9jOHktdGFicy1vdXRsZXQ+XG4gICAgPGRpdiBjbGFzcz1cImlubmVyLXNjcm9sbCBjOHktdG9wLWRyYXdlcl9fdGFicy1jb250YWluZXIgZmxleC1ncm93IHAtbC0yNCBwLXItbGctMzIgcC1yLXhzLTI0IHAtci1zbS0yNFwiPlxuICAgICAgPGM4eS10YWJcbiAgICAgICAgKm5nSWY9XCIoIWlzTmFtZWREYXNoYm9hcmQgJiYgIWhpZGVBdmFpbGFiaWxpdHkpIHx8IGlzUmVwb3J0XCJcbiAgICAgICAgW2xhYmVsXT1cIlRBQlMuZ2VuZXJhbC5sYWJlbFwiXG4gICAgICAgIFtpY29uXT1cIidpbWFjLXNldHRpbmdzJ1wiXG4gICAgICAgIFtwcmlvcml0eV09XCIxMDBcIlxuICAgICAgICBbdGFic091dGxldF09XCJUQUJTX09VVExFVF9OQU1FXCJcbiAgICAgICAgKG9uU2VsZWN0KT1cInNlbGVjdFRhYihUQUJTLmdlbmVyYWwuZmVhdHVyZUlkKVwiXG4gICAgICAgIFtpc0FjdGl2ZV09XCJzZWxlY3RlZFRhYiA9PT0gVEFCUy5nZW5lcmFsLmZlYXR1cmVJZFwiXG4gICAgICA+PC9jOHktdGFiPlxuICAgICAgPGM4eS10YWJcbiAgICAgICAgW2xhYmVsXT1cIlRBQlMuYXBwZWFyYW5jZS5sYWJlbFwiXG4gICAgICAgIFtwcmlvcml0eV09XCI1MFwiXG4gICAgICAgIFtpY29uXT1cIid3ZWItZGVzaWduJ1wiXG4gICAgICAgIFt0YWJzT3V0bGV0XT1cIlRBQlNfT1VUTEVUX05BTUVcIlxuICAgICAgICAob25TZWxlY3QpPVwic2VsZWN0VGFiKFRBQlMuYXBwZWFyYW5jZS5mZWF0dXJlSWQpXCJcbiAgICAgICAgW2lzQWN0aXZlXT1cInNlbGVjdGVkVGFiID09PSBUQUJTLmFwcGVhcmFuY2UuZmVhdHVyZUlkXCJcbiAgICAgID48L2M4eS10YWI+XG4gICAgICA8Yzh5LXRhYlxuICAgICAgICAqbmdJZj1cIm1vPy5jOHlfRGFzaGJvYXJkSGlzdG9yeVwiXG4gICAgICAgIFtsYWJlbF09XCJUQUJTLnZlcnNpb25IaXN0b3J5LmxhYmVsXCJcbiAgICAgICAgW2ljb25dPVwiJ3ZlcnNpb25zJ1wiXG4gICAgICAgIFtwcmlvcml0eV09XCIxMFwiXG4gICAgICAgIFt0YWJzT3V0bGV0XT1cIlRBQlNfT1VUTEVUX05BTUVcIlxuICAgICAgICAob25TZWxlY3QpPVwic2VsZWN0VGFiKFRBQlMudmVyc2lvbkhpc3RvcnkuZmVhdHVyZUlkKVwiXG4gICAgICAgIFtpc0FjdGl2ZV09XCJzZWxlY3RlZFRhYiA9PT0gVEFCUy52ZXJzaW9uSGlzdG9yeS5mZWF0dXJlSWRcIlxuICAgICAgPjwvYzh5LXRhYj5cbiAgICAgIDxuZy1jb250YWluZXIgW25nU3dpdGNoXT1cInNlbGVjdGVkVGFiXCI+XG4gICAgICAgIDxjOHktZGFzaGJvYXJkLWdlbmVyYWwtc2V0dGluZ3NcbiAgICAgICAgICAqbmdTd2l0Y2hDYXNlPVwiVEFCUy5nZW5lcmFsLmZlYXR1cmVJZFwiXG4gICAgICAgICAgW2lzUmVwb3J0XT1cImlzUmVwb3J0XCJcbiAgICAgICAgICBbaXNOYW1lZERhc2hib2FyZF09XCJpc05hbWVkRGFzaGJvYXJkXCJcbiAgICAgICAgICBbaGlkZUF2YWlsYWJpbGl0eV09XCJoaWRlQXZhaWxhYmlsaXR5XCJcbiAgICAgICAgICBbZGFzaGJvYXJkXT1cImRhc2hib2FyZFwiXG4gICAgICAgICAgW2dlbmVyYWxTZXR0aW5nc0Zvcm1dPVwiZ2VuZXJhbFNldHRpbmdzRm9ybVwiXG4gICAgICAgICAgW2RldmljZVR5cGVWYWx1ZV09XCJkZXZpY2VUeXBlVmFsdWVcIlxuICAgICAgICAgIFtkaXNwbGF5RGV2aWNlVHlwZVZhbHVlXT1cImRpc3BsYXlEZXZpY2VUeXBlVmFsdWVcIlxuICAgICAgICAgIFttb109XCJtb1wiXG4gICAgICAgICAgW2FsbG93VHlwZURhc2hib2FyZF09XCJhbGxvd1R5cGVEYXNoYm9hcmRcIlxuICAgICAgICAgIFtpc0RldmljZV09XCIhIWNvbnRleHQ/LmM4eV9Jc0RldmljZVwiXG4gICAgICAgICAgY2xhc3M9XCJhbmltYXRlZCBmYWRlSW5cIlxuICAgICAgICAgIChvbkR1cGxpY2F0ZVdpdGhvdXRUeXBlKT1cImR1cGxpY2F0ZVdpdGhvdXRUeXBlKClcIlxuICAgICAgICA+PC9jOHktZGFzaGJvYXJkLWdlbmVyYWwtc2V0dGluZ3M+XG4gICAgICAgIDxjOHktZGFzaGJvYXJkLWFwcGVhcmFuY2Utc2V0dGluZ3NcbiAgICAgICAgICAqbmdTd2l0Y2hDYXNlPVwiVEFCUy5hcHBlYXJhbmNlLmZlYXR1cmVJZFwiXG4gICAgICAgICAgW2Rhc2hib2FyZF09XCJkYXNoYm9hcmRcIlxuICAgICAgICAgIFthcHBlYXJhbmNlU2V0dGluZ3NGb3JtXT1cImFwcGVhcmFuY2VTZXR0aW5nc0Zvcm1cIlxuICAgICAgICAgIChwcmV2aWV3Q2hhbmdlZCk9XCJwcmV2aWV3Q2hhbmdlZC5lbWl0KCRldmVudClcIlxuICAgICAgICAgIGNsYXNzPVwiYW5pbWF0ZWQgZmFkZUluXCJcbiAgICAgICAgPjwvYzh5LWRhc2hib2FyZC1hcHBlYXJhbmNlLXNldHRpbmdzPlxuICAgICAgICA8Yzh5LWRhc2hib2FyZC12ZXJzaW9uLWhpc3RvcnlcbiAgICAgICAgICAqbmdTd2l0Y2hDYXNlPVwiVEFCUy52ZXJzaW9uSGlzdG9yeS5mZWF0dXJlSWRcIlxuICAgICAgICAgIFtkYXNoYm9hcmRIaXN0b3J5XT1cIm1vLmM4eV9EYXNoYm9hcmRIaXN0b3J5XCJcbiAgICAgICAgICBbaXNSZXBvcnRdPVwiaXNSZXBvcnRcIlxuICAgICAgICAgIChvblJldmVydCk9XCJyZXZlcnREYXNoYm9hcmQoJGV2ZW50KVwiXG4gICAgICAgICAgY2xhc3M9XCJhbmltYXRlZCBmYWRlSW5cIlxuICAgICAgICA+PC9jOHktZGFzaGJvYXJkLXZlcnNpb24taGlzdG9yeT5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cblxuICA8ZGl2IGNsYXNzPVwiYzh5LXRvcC1kcmF3ZXItLWZvb3RlclwiPlxuICAgIDxidXR0b25cbiAgICAgIGNsYXNzPVwiYnRuIGJ0bi1kZWZhdWx0XCJcbiAgICAgIHRpdGxlPVwie3sgJ0NhbmNlbCcgfCB0cmFuc2xhdGUgfX1cIlxuICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICBkYXRhLWN5PVwiZGFzaGJvYXJkLWRldGFpbC0tY2FuY2VsLWRhc2hib2FyZFwiXG4gICAgICAoY2xpY2spPVwiY2FuY2VsKClcIlxuICAgID5cbiAgICAgIHt7ICdDYW5jZWwnIHwgdHJhbnNsYXRlIH19XG4gICAgPC9idXR0b24+XG4gICAgPGJ1dHRvblxuICAgICAgY2xhc3M9XCJidG4gYnRuLXByaW1hcnlcIlxuICAgICAgdGl0bGU9XCJ7eyAnU2F2ZScgfCB0cmFuc2xhdGUgfX1cIlxuICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICBkYXRhLWN5PVwiZGFzaGJvYXJkLWRldGFpbC0tc2F2ZS1kYXNoYm9hcmRcIlxuICAgICAgKGNsaWNrKT1cInNhdmUoKVwiXG4gICAgICBbZGlzYWJsZWRdPVwiXG4gICAgICAgIChkYXNoYm9hcmREZXRhaWxzRm9ybT8uaW52YWxpZCB8fCBkYXNoYm9hcmREZXRhaWxzRm9ybT8ucHJpc3RpbmUpICYmIHRoaXMuaXNFZGl0XG4gICAgICBcIlxuICAgID5cbiAgICAgIHt7ICdTYXZlJyB8IHRyYW5zbGF0ZSB9fVxuICAgIDwvYnV0dG9uPlxuICA8L2Rpdj5cbjwvZGl2PlxuIl19
417
+ }], convertStringToHash: [] } });
418
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGFzaGJvYXJkLWRldGFpbC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9jb250ZXh0LWRhc2hib2FyZC9kYXNoYm9hcmQtZGV0YWlsLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uL2NvbnRleHQtZGFzaGJvYXJkL2Rhc2hib2FyZC1kZXRhaWwuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFDTCxTQUFTLEVBQ1QsWUFBWSxFQUNaLEtBQUssRUFJTCxNQUFNLEVBQ1AsTUFBTSxlQUFlLENBQUM7QUFFdkIsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUN6RCxPQUFPLEVBRUwsZUFBZSxFQUVmLG1CQUFtQixFQUNuQixnQkFBZ0IsRUFDaEIsT0FBTyxFQUNQLFlBQVksRUFDWixPQUFPLEVBQ1AsWUFBWSxFQUNaLGNBQWMsRUFDZCxNQUFNLEVBRU4sV0FBVyxFQUNaLE1BQU0scUJBQXFCLENBQUM7QUFDN0IsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDdkQsT0FBTyxFQUFFLEtBQUssRUFBRSxTQUFTLEVBQUUsT0FBTyxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBQ3RELE9BQU8sRUFBYyxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDM0MsT0FBTyxFQUdMLDBCQUEwQixFQUMxQixxQkFBcUIsRUFHckIsa0JBQWtCLEVBQ2xCLHVDQUF1QyxFQUN4QyxNQUFNLDJCQUEyQixDQUFDO0FBQ25DLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQ3RFLE9BQU8sRUFBa0IsZ0JBQWdCLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDL0QsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3ZDLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUN4RCxP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LENBQUMsQ0FBQztJQUMzQyxDQUFDOzhHQW5iVSx3QkFBd0I7a0dBQXhCLHdCQUF3QixnV0NqRHJDLHd3SEF5R0E7O0FEbVBnQjtJQURiLE9BQU8sRUFBRTs7OzttRUFRVDsyRkFsVFUsd0JBQXdCO2tCQUpwQyxTQUFTOytCQUNFLHNCQUFzQjswZEFPdkIsUUFBUTtzQkFBaEIsS0FBSztnQkFDRyxVQUFVO3NCQUFsQixLQUFLO2dCQUNHLE9BQU87c0JBQWYsS0FBSztnQkFDRyxFQUFFO3NCQUFWLEtBQUs7Z0JBQ0csU0FBUztzQkFBakIsS0FBSztnQkFDRyxnQkFBZ0I7c0JBQXhCLEtBQUs7Z0JBQ0csZ0JBQWdCO3NCQUF4QixLQUFLO2dCQVlJLGNBQWM7c0JBQXZCLE1BQU07Z0JBQ0csY0FBYztzQkFBdkIsTUFBTTtnQkFvUk8sbUJBQW1CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQ29tcG9uZW50LFxuICBFdmVudEVtaXR0ZXIsXG4gIElucHV0LFxuICBPbkNoYW5nZXMsXG4gIE9uRGVzdHJveSxcbiAgT25Jbml0LFxuICBPdXRwdXRcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBGb3JtR3JvdXAgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBBY3RpdmF0ZWRSb3V0ZSwgUm91dGVyIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCB7XG4gIEFwcGxpY2F0aW9uT3B0aW9ucyxcbiAgQXBwU3RhdGVTZXJ2aWNlLFxuICBDb250ZXh0RGF0YSxcbiAgQ29udGV4dFJvdXRlU2VydmljZSxcbiAgR2FpbnNpZ2h0U2VydmljZSxcbiAgZ2V0dGV4dCxcbiAgR3JvdXBTZXJ2aWNlLFxuICBtZW1vaXplLFxuICBNb2RhbFNlcnZpY2UsXG4gIE9wdGlvbnNTZXJ2aWNlLFxuICBTdGF0dXMsXG4gIFRhYixcbiAgVGFic1NlcnZpY2Vcbn0gZnJvbSAnQGM4eS9uZ3gtY29tcG9uZW50cyc7XG5pbXBvcnQgeyBUcmFuc2xhdGVTZXJ2aWNlIH0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSc7XG5pbXBvcnQgeyBjbG9uZSwgY2xvbmVEZWVwLCBpc0VxdWFsIH0gZnJvbSAnbG9kYXNoLWVzJztcbmltcG9ydCB7IE9ic2VydmFibGUsIFN1YmplY3QgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7XG4gIENvbnRleHREYXNoYm9hcmQsXG4gIENvbnRleHREYXNoYm9hcmRNYW5hZ2VkT2JqZWN0LFxuICBEQVNIQk9BUkRfU0VUVElOR1NfQ0hBTkdFUyxcbiAgRGFzaGJvYXJkRGV0YWlsc1RhYklkLFxuICBEYXNoYm9hcmREZXRhaWxzVGFicyxcbiAgRGFzaGJvYXJkSGlzdG9yeURlc2NyaXB0aW9uLFxuICBQUk9EVUNUX0VYUEVSSUVOQ0UsXG4gIFJFUE9SVF9ERUZBVUxUX05BVklHQVRJT05fTk9ERV9QUklPUklUWVxufSBmcm9tICcuL2NvbnRleHQtZGFzaGJvYXJkLm1vZGVsJztcbmltcG9ydCB7IENvbnRleHREYXNoYm9hcmRTZXJ2aWNlIH0gZnJvbSAnLi9jb250ZXh0LWRhc2hib2FyZC5zZXJ2aWNlJztcbmltcG9ydCB7IElNYW5hZ2VkT2JqZWN0LCBJbnZlbnRvcnlTZXJ2aWNlIH0gZnJvbSAnQGM4eS9jbGllbnQnO1xuaW1wb3J0IHsgZmlyc3QgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBuZXdEYXNoYm9hcmRUYWIgfSBmcm9tICcuL25ldy1kYXNoYm9hcmQuZ3VhcmQnO1xuaW1wb3J0IHsgRGFzaGJvYXJkRGV0YWlsU2VydmljZSB9IGZyb20gJy4vZGFzaGJvYXJkLWRldGFpbC5zZXJ2aWNlJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnYzh5LWRhc2hib2FyZC1kZXRhaWwnLFxuICB0ZW1wbGF0ZVVybDogJy4vZGFzaGJvYXJkLWRldGFpbC5jb21wb25lbnQuaHRtbCdcbn0pXG5leHBvcnQgY2xhc3MgRGFzaGJvYXJkRGV0YWlsQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkNoYW5nZXMsIE9uRGVzdHJveSB7XG4gIGlzQ29sbGFwc2VkID0gdHJ1ZTtcbiAgY3VycmVudENvbnRleHQ6IENvbnRleHREYXRhO1xuICBjdXJyZW50RGFzaGJvYXJkOiBDb250ZXh0RGFzaGJvYXJkO1xuICBASW5wdXQoKSBpc1JlcG9ydDogYm9vbGVhbjtcbiAgQElucHV0KCkgZGV2aWNlVHlwZTogc3RyaW5nO1xuICBASW5wdXQoKSBjb250ZXh0OiBhbnk7XG4gIEBJbnB1dCgpIG1vOiBDb250ZXh0RGFzaGJvYXJkTWFuYWdlZE9iamVjdDtcbiAgQElucHV0KCkgZGFzaGJvYXJkOiBDb250ZXh0RGFzaGJvYXJkO1xuICBASW5wdXQoKSBpc05hbWVkRGFzaGJvYXJkOiBib29sZWFuO1xuICBASW5wdXQoKSBoaWRlQXZhaWxhYmlsaXR5ID0gZmFsc2U7XG4gIGRldmljZVR5cGVWYWx1ZTogc3RyaW5nO1xuICBkaXNwbGF5RGV2aWNlVHlwZVZhbHVlOiBzdHJpbmc7XG4gIGljb25zOiBzdHJpbmdbXTtcbiAgbmFtZVBsYWNlaG9sZGVyOiBzdHJpbmc7XG4gIHRhYnMkOiBPYnNlcnZhYmxlPFRhYltdPjtcbiAgc2VsZWN0ZWRUYWI6IERhc2hib2FyZERldGFpbHNUYWJJZCA9IERhc2hib2FyZERldGFpbHNUYWJJZC5HRU5FUkFMO1xuICBkYXNoYm9hcmREZXRhaWxzRm9ybTogUmV0dXJuVHlwZTxEYXNoYm9hcmREZXRhaWxTZXJ2aWNlWydpbml0Rm9ybSddPjtcbiAgZ2VuZXJhbFNldHRpbmdzRm9ybTogUmV0dXJuVHlwZTxEYXNoYm9hcmREZXRhaWxTZXJ2aWNlWydpbml0R2VuZXJhbFNldHRpbmdzRm9ybSddPjtcbiAgYXBwZWFyYW5jZVNldHRpbmdzRm9ybTogUmV0dXJuVHlwZTxEYXNoYm9hcmREZXRhaWxTZXJ2aWNlWydpbml0QXBwZWFyYW5jZVNldHRpbmdzRm9ybSddPjtcbiAgYWxsb3dUeXBlRGFzaGJvYXJkOiBib29sZWFuO1xuICBpc0VkaXQ6IGJvb2xlYW47XG4gIEBPdXRwdXQoKSBkYXNoYm9hcmRTYXZlZCA9IG5ldyBFdmVudEVtaXR0ZXI8Q29udGV4dERhc2hib2FyZD4oKTtcbiAgQE91dHB1dCgpIHByZXZpZXdDaGFuZ2VkID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG4gIHJlYWRvbmx5IEhJREVfVFlQRV9EQVNIQk9BUkRfRk9SX0FTU0VUUzoga2V5b2YgQXBwbGljYXRpb25PcHRpb25zID0gJ2hpZGVUeXBlRGFzaGJvYXJkRm9yQXNzZXRzJztcbiAgcHJpdmF0ZSBkZXN0cm95JDogU3ViamVjdDx2b2lkPiA9IG5ldyBTdWJqZWN0KCk7XG5cbiAgcmVhZG9ubHkgVEFCU19PVVRMRVRfTkFNRSA9ICdkYXNoYm9hcmRUYWJzJztcbiAgcmVhZG9ubHkgVEFCUzogRGFzaGJvYXJkRGV0YWlsc1RhYnMgPSB7XG4gICAgZ2VuZXJhbDoge1xuICAgICAgZmVhdHVyZUlkOiBEYXNoYm9hcmREZXRhaWxzVGFiSWQuR0VORVJBTCxcbiAgICAgIHByaW9yaXR5OiAzMCxcbiAgICAgIGxhYmVsOiBnZXR0ZXh0KCdHZW5lcmFsJylcbiAgICB9LFxuICAgIGFwcGVhcmFuY2U6IHtcbiAgICAgIGZlYXR1cmVJZDogRGFzaGJvYXJkRGV0YWlsc1RhYklkLkFQUEVBUkFOQ0UsXG4gICAgICBwcmlvcml0eTogMjAsXG4gICAgICBsYWJlbDogZ2V0dGV4dCgnQXBwZWFyYW5jZScpXG4gICAgfSxcbiAgICB2ZXJzaW9uSGlzdG9yeToge1xuICAgICAgZmVhdHVyZUlkOiBEYXNoYm9hcmREZXRhaWxzVGFiSWQuVkVSU0lPTkhJU1RPUlksXG4gICAgICBwcmlvcml0eTogMTAsXG4gICAgICBsYWJlbDogZ2V0dGV4dCgnVmVyc2lvbiBoaXN0b3J5JylcbiAgICB9XG4gIH07XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBjb250ZXh0RGFzaGJvYXJkU2VydmljZTogQ29udGV4dERhc2hib2FyZFNlcnZpY2UsXG4gICAgcHJpdmF0ZSB0cmFuc2xhdGVTZXJ2aWNlOiBUcmFuc2xhdGVTZXJ2aWNlLFxuICAgIHByaXZhdGUgY29udGV4dFJvdXRlOiBDb250ZXh0Um91dGVTZXJ2aWNlLFxuICAgIHByaXZhdGUgYWN0aXZhdGVkUm91dGU6IEFjdGl2YXRlZFJvdXRlLFxuICAgIHByaXZhdGUgdGFic1NlcnZpY2U6IFRhYnNTZXJ2aWNlLFxuICAgIHByaXZhdGUgcm91dGVyOiBSb3V0ZXIsXG4gICAgcHJpdmF0ZSBpbnZlbnRvcnk6IEludmVudG9yeVNlcnZpY2UsXG4gICAgcHJpdmF0ZSByb3V0ZTogQWN0aXZhdGVkUm91dGUsXG4gICAgcHJpdmF0ZSBkYXNoYm9hcmREZXRhaWxTZXJ2aWNlOiBEYXNoYm9hcmREZXRhaWxTZXJ2aWNlLFxuICAgIHByaXZhdGUgYXBwU3RhdGU6IEFwcFN0YXRlU2VydmljZSxcbiAgICBwcml2YXRlIG9wdGlvbnNTZXJ2aWNlOiBPcHRpb25zU2VydmljZSxcbiAgICBwcml2YXRlIGdyb3VwU2VydmljZTogR3JvdXBTZXJ2aWNlLFxuICAgIHByaXZhdGUgbW9kYWw6IE1vZGFsU2VydmljZSxcbiAgICBwcml2YXRlIGdhaW5zaWdodFNlcnZpY2U6IEdhaW5zaWdodFNlcnZpY2VcbiAgKSB7fVxuXG4gIG5nT25Jbml0KCkge1xuICAgIHRoaXMudGFicyQgPSB0aGlzLnRhYnNTZXJ2aWNlLml0ZW1zJDtcbiAgICB0aGlzLmN1cnJlbnRDb250ZXh0ID0gdGhpcy5jb250ZXh0Um91dGUuZ2V0Q29udGV4dERhdGEodGhpcy5hY3RpdmF0ZWRSb3V0ZSk7XG4gICAgdGhpcy5kZXZpY2VUeXBlVmFsdWUgPSB0aGlzLmdldERldmljZVR5cGVWYWx1ZSgpO1xuICAgIHRoaXMuZGlzcGxheURldmljZVR5cGVWYWx1ZSA9XG4gICAgICB0aGlzLmNvbnRleHQgJiZcbiAgICAgIHRoaXMuZ3JvdXBTZXJ2aWNlLmlzR3JvdXAodGhpcy5jb250ZXh0KSAmJlxuICAgICAgIXRoaXMuZ3JvdXBTZXJ2aWNlLmlzQXNzZXQodGhpcy5jb250ZXh0KVxuICAgICAgICA/IHRoaXMudHJhbnNsYXRlU2VydmljZS5pbnN0YW50KGdldHRleHQoJ0dyb3VwJykpXG4gICAgICAgIDogdGhpcy5kZXZpY2VUeXBlVmFsdWU7XG5cbiAgICB0aGlzLnVwZGF0ZUFsbG93VHlwZURhc2hib2FyZCgpO1xuICAgIHRoaXMuaW5pdEZvcm0oKTtcbiAgfVxuXG4gIG5nT25DaGFuZ2VzKCk6IHZvaWQge1xuICAgIHRoaXMudXBkYXRlQWxsb3dUeXBlRGFzaGJvYXJkKCk7XG4gIH1cblxuICBuZ0FmdGVyQ29udGVudEluaXQoKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLmlzRWRpdCkge1xuICAgICAgdGhpcy5pbml0aWFsaXplQ29uZmlndXJhdGlvbigpO1xuICAgIH1cbiAgfVxuXG4gIG5nT25EZXN0cm95KCkge1xuICAgIHRoaXMuZGVzdHJveSQubmV4dCgpO1xuICAgIHRoaXMuZGVzdHJveSQuY29tcGxldGUoKTtcbiAgfVxuXG4gIGFzeW5jIHNhdmUoKSB7XG4gICAgY29uc3Qgb2xkRGFzaGJvYXJkID0gY2xvbmVEZWVwKHRoaXMuZGFzaGJvYXJkKTtcbiAgICB0aGlzLmRhc2hib2FyZCA9IHtcbiAgICAgIC4uLnRoaXMuZGFzaGJvYXJkLFxuICAgICAgLi4udGhpcy5nZW5lcmFsU2V0dGluZ3NGb3JtLnZhbHVlLFxuICAgICAgLi4udGhpcy5hcHBlYXJhbmNlU2V0dGluZ3NGb3JtLnZhbHVlXG4gICAgfTtcbiAgICBjb25zdCBkYXNoYm9hcmRTZXR0aW5nQ2hhbmdlczogc3RyaW5nW10gPSBPYmplY3Qua2V5cyh0aGlzLmRhc2hib2FyZCkuZmlsdGVyKGtleSA9PiB7XG4gICAgICBpZiAoa2V5ID09PSAnYzh5X0lzTmF2aWdhdG9yTm9kZScpIHtcbiAgICAgICAgcmV0dXJuICEhb2xkRGFzaGJvYXJkW2tleV0gIT09ICEhdGhpcy5kYXNoYm9hcmRba2V5XTtcbiAgICAgIH1cbiAgICAgIHJldHVybiAhaXNFcXVhbChvbGREYXNoYm9hcmRba2V5XSwgdGhpcy5kYXNoYm9hcmRba2V5XSk7XG4gICAgfSk7XG5cbiAgICB0aGlzLmRhc2hib2FyZC5hdXRob3IgPSB0aGlzLmFwcFN0YXRlLmN1cnJlbnRVc2VyLnZhbHVlLnVzZXJOYW1lO1xuICAgIHRoaXMuZGFzaGJvYXJkLmM4eV9Jc05hdmlnYXRvck5vZGUgPSB0aGlzLmRhc2hib2FyZC5jOHlfSXNOYXZpZ2F0b3JOb2RlXG4gICAgICA/IHt9XG4gICAgICA6IHRoaXMuY3VycmVudERhc2hib2FyZFxuICAgICAgICA/IG51bGxcbiAgICAgICAgOiB1bmRlZmluZWQ7XG5cbiAgICB0aGlzLmRhc2hib2FyZC5kZXZpY2VUeXBlVmFsdWUgPz89IHRoaXMuZGV2aWNlVHlwZVZhbHVlO1xuICAgIHRoaXMuZGFzaGJvYXJkLmhpc3RvcnlEZXNjcmlwdGlvbiA9XG4gICAgICB0aGlzLnVwZGF0ZURhc2hib2FyZEhpc3RvcnlEZXNjcmlwdGlvbihkYXNoYm9hcmRTZXR0aW5nQ2hhbmdlcyk7XG4gICAgaWYgKCF0aGlzLmlzRWRpdCAmJiAhdGhpcy5pc1JlcG9ydCkge1xuICAgICAgYXdhaXQgdGhpcy5jcmVhdGVOZXdEYXNoYm9hcmQoKTtcbiAgICB9IGVsc2UgaWYgKCF0aGlzLmlzRWRpdCAmJiB0aGlzLmlzUmVwb3J0KSB7XG4gICAgICBhd2FpdCB0aGlzLmNyZWF0ZU5ld1JlcG9ydCgpO1xuICAgIH0gZWxzZSB7XG4gICAgICBhd2FpdCB0aGlzLnVwZGF0ZURhc2hib2FyZCgpO1xuICAgICAgdGhpcy5tby5jOHlfRGFzaGJvYXJkSGlzdG9yeSA9IFtcbiAgICAgICAgdGhpcy5kYXNoYm9hcmQsXG4gICAgICAgIC4uLih0aGlzLm1vPy5jOHlfRGFzaGJvYXJkSGlzdG9yeSA/IHRoaXMubW8uYzh5X0Rhc2hib2FyZEhpc3RvcnkgOiBbXSlcbiAgICAgIF07XG4gICAgfVxuICB9XG5cbiAgdXBkYXRlRGFzaGJvYXJkSGlzdG9yeURlc2NyaXB0aW9uKGRhc2hib2FyZENoYW5nZXM6IHN0cmluZ1tdKTogRGFzaGJvYXJkSGlzdG9yeURlc2NyaXB0aW9uIHtcbiAgICByZXR1cm4ge1xuICAgICAgY2hhbmdlVHlwZTogdGhpcy5pc0VkaXQgPyAndXBkYXRlJyA6ICdjcmVhdGUnLFxuICAgICAgZGFzaGJvYXJkU2V0dGluZ0NoYW5nZXM6IGRhc2hib2FyZENoYW5nZXNcbiAgICAgICAgLmZpbHRlcih2YWx1ZSA9PiB2YWx1ZSAhPT0gJ2RldmljZVR5cGUnKVxuICAgICAgICAubWFwKHZhbHVlID0+IERBU0hCT0FSRF9TRVRUSU5HU19DSEFOR0VTW3ZhbHVlXSB8fCB2YWx1ZSksXG4gICAgICBkZXZpY2VUeXBlOiBkYXNoYm9hcmRDaGFuZ2VzLmZpbmQodmFsdWUgPT4gdmFsdWUgPT09ICdkZXZpY2VUeXBlJylcbiAgICAgICAgPyB0aGlzLmRhc2hib2FyZC5kZXZpY2VUeXBlXG4gICAgICAgIDogdW5kZWZpbmVkXG4gICAgfTtcbiAgfVxuXG4gIHNlbGVjdFRhYihzZWxlY3RlZFRhYjogRGFzaGJvYXJkRGV0YWlsc1RhYklkKSB7XG4gICAgdGhpcy5zZWxlY3RlZFRhYiA9IHNlbGVjdGVkVGFiO1xuICAgIHRoaXMudGFic1NlcnZpY2UucmVmcmVzaCgpO1xuICB9XG5cbiAgYXN5bmMgY2FuY2VsKCkge1xuICAgIGlmICghdGhpcy5pc0VkaXQgJiYgIXRoaXMuaXNSZXBvcnQpIHtcbiAgICAgIC8vIGRhc2hib2FyZCBjcmVhdGlvbiBpbiBpdCdzIG93biB0YWItIGNvbmZpcm0gYW5kIGNsZWFudXAgdHJpZ2dlcmVkIGluIGNhbkRlYWN0aXZhdGUgZHVyaW5nIHJvdXRpbmdcbiAgICAgIHRoaXMudGFic1NlcnZpY2UuaXRlbXMkLnBpcGUoZmlyc3QoKSkuc3Vic2NyaWJlKCh0YWJzOiBUYWJbXSkgPT4ge1xuICAgICAgICBjb25zdCB0YWIgPSB0YWJzLmZpbmQodCA9PiB0LmZlYXR1cmVJZCAhPT0gbmV3RGFzaGJvYXJkVGFiLmZlYXR1cmVJZCk7XG4gICAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlQnlVcmwodGFiLnBhdGgsIHsgcmVwbGFjZVVybDogdHJ1ZSB9KTtcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuO1xuICAgIH0gZWxzZSBpZiAoIXRoaXMuaXNFZGl0ICYmIHRoaXMuaXNSZXBvcnQpIHtcbiAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFsncmVwb3J0cyddKTtcbiAgICAgIHJldHVybjtcbiAgICB9IGVsc2UgaWYgKHRoaXMuZGFzaGJvYXJkRGV0YWlsc0Zvcm0uZGlydHkgJiYgIShhd2FpdCB0aGlzLmNvbmZpcm1DbG9zaW5nKCkpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMuY2xlYW51cEFmdGVyRGV0YWlsc0Nsb3NlKCk7XG4gIH1cblxuICBhc3luYyBjYW5EZWFjdGl2YXRlKG9taXRDb25maXJtID0gZmFsc2UpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICBsZXQgY2FuRGVhY3RpdmF0ZTogYm9vbGVhbjtcbiAgICBpZiAodGhpcy5pc0NvbGxhcHNlZCB8fCAhdGhpcy5kYXNoYm9hcmREZXRhaWxzRm9ybS5kaXJ0eSkge1xuICAgICAgY2FuRGVhY3RpdmF0ZSA9IHRydWU7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmIChvbWl0Q29uZmlybSkge1xuICAgICAgICBjYW5EZWFjdGl2YXRlID0gZmFsc2U7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjYW5EZWFjdGl2YXRlID0gYXdhaXQgdGhpcy5jb25maXJtQ2xvc2luZygpO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAoY2FuRGVhY3RpdmF0ZSkge1xuICAgICAgdGhpcy5jbGVhbnVwQWZ0ZXJEZXRhaWxzQ2xvc2UoKTtcbiAgICB9XG4gICAgcmV0dXJuIGNhbkRlYWN0aXZhdGU7XG4gIH1cblxuICBzaG93KGlzRWRpdDogYm9vbGVhbikge1xuICAgIHRoaXMuaXNFZGl0ID0gaXNFZGl0O1xuICAgIGlmICh0aGlzLmlzRWRpdCkge1xuICAgICAgdGhpcy5lZGl0KCk7XG4gICAgfVxuICAgIHRoaXMuaW5pdEZvcm0oKTtcbiAgICB0aGlzLmlzQ29sbGFwc2VkID0gZmFsc2U7XG4gIH1cblxuICBhc3luYyByZXZlcnREYXNoYm9hcmQoZGFzaGJvYXJkOiBDb250ZXh0RGFzaGJvYXJkKSB7XG4gICAgdGhpcy5kYXNoYm9hcmQgPSBkYXNoYm9hcmQ7XG4gICAgdGhpcy5kYXNoYm9hcmQuYzh5X0lzTmF2aWdhdG9yTm9kZSA9IHRoaXMuZGFzaGJvYXJkLmM4eV9Jc05hdmlnYXRvck5vZGVcbiAgICAgID8ge31cbiAgICAgIDogdGhpcy5jdXJyZW50RGFzaGJvYXJkXG4gICAgICAgID8gbnVsbFxuICAgICAgICA6IHVuZGVmaW5lZDtcbiAgICBhd2FpdCB0aGlzLnVwZGF0ZURhc2hib2FyZCgpO1xuICB9XG5cbiAgYXN5bmMgZHVwbGljYXRlV2l0aG91dFR5cGUoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgbmV3RGFzaGJvYXJkTmFtZSA9IHRoaXMudHJhbnNsYXRlU2VydmljZS5pbnN0YW50KGdldHRleHQoJ3t7IGRhc2hib2FyZE5hbWUgfX0gKGNvcHkpJyksIHtcbiAgICAgIGRhc2hib2FyZE5hbWU6IHRoaXMuZ2VuZXJhbFNldHRpbmdzRm9ybS52YWx1ZS5uYW1lXG4gICAgfSk7XG4gICAgdGhpcy5nZW5lcmFsU2V0dGluZ3NGb3JtLnBhdGNoVmFsdWUoe1xuICAgICAgZGV2aWNlVHlwZTogZmFsc2UsXG4gICAgICBuYW1lOiBuZXdEYXNoYm9hcmROYW1lXG4gICAgfSk7XG4gICAgLy8gc2V0dGluZyBlZGl0aW9uIHRvIGZhbHNlIHNvIG5ldyBkYXNoYm9hcmQgY2FuIGJlIGNyZWF0ZWQgYXMgY29weSBvZiBjdXJyZW50IG9uZVxuICAgIHRoaXMuaXNFZGl0ID0gZmFsc2U7XG4gICAgYXdhaXQgdGhpcy5zYXZlKCk7XG4gIH1cblxuICBwcml2YXRlIHVwZGF0ZUFsbG93VHlwZURhc2hib2FyZCgpOiB2b2lkIHtcbiAgICB0aGlzLmFsbG93VHlwZURhc2hib2FyZCA9IHRoaXMuY29udGV4dERhc2hib2FyZFNlcnZpY2Uuc2hvdWxkQWxsb3dUb1NldERhc2hib2FyZFR5cGUoXG4gICAgICB0aGlzLm1vLFxuICAgICAgdGhpcy5kZXZpY2VUeXBlVmFsdWVcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXREZXZpY2VUeXBlVmFsdWUoKTogc3RyaW5nIHtcbiAgICBjb25zdCBpc0FsbG93ZWRUeXBlVmFsdWUgPSB0aGlzLm9wdGlvbnNTZXJ2aWNlLmdldCh0aGlzLkhJREVfVFlQRV9EQVNIQk9BUkRfRk9SX0FTU0VUUywgdHJ1ZSlcbiAgICAgID8gISF0aGlzLmNvbnRleHQ/LmM4eV9Jc0RldmljZVxuICAgICAgOiAhIXRoaXMuY29udGV4dD8uYzh5X0lzRGV2aWNlIHx8ICEhdGhpcy5jb250ZXh0Py5jOHlfSXNEZXZpY2VHcm91cDtcbiAgICByZXR1cm4gaXNBbGxvd2VkVHlwZVZhbHVlID8gdGhpcy5jb250ZXh0Py50eXBlIDogbnVsbDtcbiAgfVxuXG4gIHByaXZhdGUgaW5pdEZvcm0oKTogdm9pZCB7XG4gICAgdGhpcy5kYXNoYm9hcmREZXRhaWxzRm9ybSA9IHRoaXMuZGFzaGJvYXJkRGV0YWlsU2VydmljZS5pbml0Rm9ybShcbiAgICAgIHRoaXMuZGFzaGJvYXJkLFxuICAgICAgdGhpcy5pc1JlcG9ydCxcbiAgICAgIHRoaXMuYWxsb3dUeXBlRGFzaGJvYXJkID8gdGhpcy5nZXREZXZpY2VUeXBlVmFsdWUoKSA6IG51bGxcbiAgICApO1xuICAgIHRoaXMuZ2VuZXJhbFNldHRpbmdzRm9ybSA9IHRoaXMuZGFzaGJvYXJkRGV0YWlsc0Zvcm0uZ2V0KCdnZW5lcmFsU2V0dGluZ3NGb3JtJykgYXMgRm9ybUdyb3VwO1xuICAgIHRoaXMuYXBwZWFyYW5jZVNldHRpbmdzRm9ybSA9IHRoaXMuZGFzaGJvYXJkRGV0YWlsc0Zvcm0uZ2V0KFxuICAgICAgJ2FwcGVhcmFuY2VTZXR0aW5nc0Zvcm0nXG4gICAgKSBhcyBGb3JtR3JvdXA7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGNvbmZpcm1DbG9zaW5nKCk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIHRyeSB7XG4gICAgICBhd2FpdCB0aGlzLm1vZGFsLmNvbmZpcm0oXG4gICAgICAgIGdldHRleHQoJ0Nsb3NlIGRhc2hib2FyZCBkZXRhaWxzJyksXG4gICAgICAgIGdldHRleHQoXG4gICAgICAgICAgJ0FyZSB5b3Ugc3VyZSB5b3Ugd2FudCB0byBjbG9zZSBkYXNoYm9hcmQgZGV0YWlscz8gQWxsIHVuc2F2ZWQgY2hhbmdlcyB3aWxsIGJlIGxvc3QuJ1xuICAgICAgICApLFxuICAgICAgICBTdGF0dXMuV0FSTklORyxcbiAgICAgICAge1xuICAgICAgICAgIG9rOiBnZXR0ZXh0KCdDbG9zZScpLFxuICAgICAgICAgIGNhbmNlbDogZ2V0dGV4dCgnQ2FuY2VsJylcbiAgICAgICAgfVxuICAgICAgKTtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGNyZWF0ZU5ld0Rhc2hib2FyZCgpIHtcbiAgICBjb25zdCBtbzogQ29udGV4dERhc2hib2FyZE1hbmFnZWRPYmplY3QgPSBhd2FpdCB0aGlzLmNvbnRleHREYXNoYm9hcmRTZXJ2aWNlLmNyZWF0ZShcbiAgICAgIHRoaXMuZGFzaGJvYXJkLFxuICAgICAgdGhpcy5jdXJyZW50Q29udGV4dFxuICAgICk7XG5cbiAgICBhd2FpdCB0aGlzLm9uQ3JlYXRlR1NFdmVudChtbyk7XG4gICAgdGhpcy5jbGVhbnVwQWZ0ZXJEZXRhaWxzQ2xvc2UoKTtcbiAgICBhd2FpdCB0aGlzLmNvbnRleHREYXNoYm9hcmRTZXJ2aWNlLm5hdmlnYXRlVG9EYXNoYm9hcmQobW8pO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBvbkNyZWF0ZUdTRXZlbnQobW86IENvbnRleHREYXNoYm9hcmRNYW5hZ2VkT2JqZWN0KSB7XG4gICAgY29uc3QgcGFyZW50TmFtZSA9IGF3YWl0IHRoaXMuY29udmVydFN0cmluZ1RvSGFzaCh0aGlzLmNvbnRleHQ/Lm5hbWUpO1xuICAgIGNvbnN0IGRhc2hib2FyZE5hbWUgPSBhd2FpdCB0aGlzLmNvbnZlcnRTdHJpbmdUb0hhc2godGhpcy5kYXNoYm9hcmQ/Lm5hbWUpO1xuXG4gICAgdGhpcy5nYWluc2lnaHRTZXJ2aWNlLnRyaWdnZXJFdmVudChQUk9EVUNUX0VYUEVSSUVOQ0UuREFTSEJPQVJELkVWRU5UUy5EQVNIQk9BUkRTLCB7XG4gICAgICBjb21wb25lbnQ6IFBST0RVQ1RfRVhQRVJJRU5DRS5EQVNIQk9BUkQuQ09NUE9ORU5UUy5BRERfREFTSEJPQVJELFxuICAgICAgYWN0aW9uOiBQUk9EVUNUX0VYUEVSSUVOQ0UuREFTSEJPQVJELkFDVElPTlMuQ1JFQVRFLFxuICAgICAgbmFtZTogZGFzaGJvYXJkTmFtZSxcbiAgICAgIGlkOiBtby5pZCxcbiAgICAgIG5hbWVJZDogYCR7ZGFzaGJvYXJkTmFtZX1fJHt0aGlzLm1vLmlkfWAsXG4gICAgICBwYXJlbnRBc3NldElkOiB0aGlzLmNvbnRleHQ/LmlkID8gdGhpcy5jb250ZXh0LmlkIDogJ25vQ29udGV4dCcsXG4gICAgICBwYXJlbnRBc3NldE5hbWU6IHRoaXMuY29udGV4dD8uaWQgPyBwYXJlbnROYW1lIDogJ25vQ29udGV4dCcsXG4gICAgICBwYXJlbnRBc3NldFR5cGU6IHRoaXMuY29udGV4dD8uaWQgPyB0aGlzLmNvbnRleHQudHlwZSA6ICdub0NvbnRleHQnLFxuICAgICAgcGFyZW50QXNzZXROYW1lSWQ6IHRoaXMuY29udGV4dD8uaWQgPyBgJHtwYXJlbnROYW1lfV8ke3RoaXMuY29udGV4dC5pZH1gIDogJ25vQ29udGV4dCcsXG4gICAgICBwYXJlbnRBc3NldE5hbWVEYXNoYm9hcmROYW1lOiB0aGlzLmNvbnRleHQ/LmlkXG4gICAgICAgID8gYCR7cGFyZW50TmFtZX1fJHtkYXNoYm9hcmROYW1lfWBcbiAgICAgICAgOiAnbm9Db250ZXh0JyxcbiAgICAgIHBhcmVudEFzc2V0SWREYXNoYm9hcmRJZDogdGhpcy5jb250ZXh0Py5pZCA/IGAke3RoaXMuY29udGV4dC5pZH1fJHt0aGlzLm1vLmlkfWAgOiAnbm9Db250ZXh0JyxcbiAgICAgIHBhcmVudEFzc2V0TmFtZURhc2hib2FyZElkOiB0aGlzLmNvbnRleHQ/LmlkID8gYCR7cGFyZW50TmFtZX1fJHt0aGlzLm1vLmlkfWAgOiAnbm9Db250ZXh0JyxcbiAgICAgIHBhcmVudEFzc2V0TmFtZUlkRGFzaGJvYXJkTmFtZUlkOiB0aGlzLmNvbnRleHQ/LmlkXG4gICAgICAgID8gYCR7cGFyZW50TmFtZX1fJHt0aGlzLmNvbnRleHQuaWR9XyR7ZGFzaGJvYXJkTmFtZX1fJHt0aGlzLm1vLmlkfWBcbiAgICAgICAgOiAnbm9Db250ZXh0JyxcbiAgICAgIGRhc2hib2FyZFR5cGU6IG1vLmM4eV9EYXNoYm9hcmQuZGV2aWNlVHlwZSA/IG1vLmM4eV9EYXNoYm9hcmQuZGV2aWNlVHlwZVZhbHVlIDogbnVsbCxcbiAgICAgIGNvbnRleHQ6IHRoaXMuY29udGV4dERhc2hib2FyZFNlcnZpY2UuZ2V0Q29udGV4dEZvckdTKFxuICAgICAgICB0aGlzLmN1cnJlbnRDb250ZXh0LmNvbnRleHREYXRhIGFzIElNYW5hZ2VkT2JqZWN0XG4gICAgICApXG4gICAgfSk7XG4gIH1cblxuICBAbWVtb2l6ZSgpXG4gIHByaXZhdGUgYXN5bmMgY29udmVydFN0cmluZ1RvSGFzaChzdHI6IHN0cmluZykge1xuICAgIGlmICghc3RyKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgcmV0dXJuIChhd2FpdCB0aGlzLmdhaW5zaWdodFNlcnZpY2Uuc2hvdWxkU2VuZFBpaURhdGEoKSlcbiAgICAgID8gc3RyXG4gICAgICA6IGF3YWl0IHRoaXMuZ2FpbnNpZ2h0U2VydmljZS5oYXNoR3JvdXBOYW1lKHN0cik7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGNyZWF0ZU5ld1JlcG9ydCgpIHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgeyBuYW1lLCBpY29uLCBjOHlfSXNOYXZpZ2F0b3JOb2RlLCBwcmlvcml0eSwgZGVzY3JpcHRpb24gfSA9IHRoaXMuZGFzaGJvYXJkO1xuICAgICAgY29uc3QgcmVwb3J0ID0gKFxuICAgICAgICBhd2FpdCB0aGlzLmNvbnRleHREYXNoYm9hcmRTZXJ2aWNlLmNyZWF0ZVJlcG9ydCh7XG4gICAgICAgICAgbmFtZSxcbiAgICAgICAgICBpY29uLFxuICAgICAgICAgIGM4eV9Jc05hdmlnYXRvck5vZGUsXG4gICAgICAgICAgcHJpb3JpdHksXG4gICAgICAgICAgZGVzY3JpcHRpb25cbiAgICAgICAgfSBhcyBQYXJ0aWFsPElNYW5hZ2VkT2JqZWN0PilcbiAgICAgICkuZGF0YTtcblxuICAgICAgYXdhaXQgdGhpcy5jb250ZXh0RGFzaGJvYXJkU2VydmljZS5jcmVhdGUoXG4gICAgICAgIHRoaXMuZGFzaGJvYXJkLFxuICAgICAgICB1bmRlZmluZWQsXG4gICAgICAgIGAke3RoaXMuY29udGV4dERhc2hib2FyZFNlcnZpY2UuUkVQT1JUX1BBUlRJQUxfTkFNRX0ke3JlcG9ydC5pZH1gXG4gICAgICApO1xuICAgICAgdGhpcy5nYWluc2lnaHRTZXJ2aWNlLnRyaWdnZXJFdmVudChQUk9EVUNUX0VYUEVSSUVOQ0UuREFTSEJPQVJELkVWRU5UUy5SRVBPUlRTLCB7XG4gICAgICAgIGNvbXBvbmVudDogUFJPRFVDVF9FWFBFUklFTkNFLkRBU0hCT0FSRC5DT01QT05FTlRTLkFERF9SRVBPUlQsXG4gICAgICAgIGFjdGlvbjogUFJPRFVDVF9FWFBFUklFTkNFLkRBU0hCT0FSRC5BQ1RJT05TLkNSRUFURSxcbiAgICAgICAgbmFtZTogcmVwb3J0Lm5hbWUsXG4gICAgICAgIGlkOiByZXBvcnQuaWQsXG4gICAgICAgIGNvbnRleHQ6IFBST0RVQ1RfRVhQRVJJRU5DRS5EQVNIQk9BUkQuQ09OVEVYVC5SRVBPUlRcbiAgICAgIH0pO1xuICAgICAgaWYgKHJlcG9ydC5jOHlfSXNOYXZpZ2F0b3JOb2RlKSB7XG4gICAgICAgIHRoaXMuY29udGV4dERhc2hib2FyZFNlcnZpY2UuYWRkUmVwb3J0TmF2aWdhdG9yTm9kZShyZXBvcnQpO1xuICAgICAgfVxuICAgICAgdGhpcy5jbGVhbnVwQWZ0ZXJEZXRhaWxzQ2xvc2UoKTtcbiAgICAgIGF3YWl0IHRoaXMucm91dGVyLm5hdmlnYXRlKFsncmVwb3J0cycsIHJlcG9ydC5pZF0pO1xuICAgIH0gY2F0Y2ggKGV4KSB7XG4gICAgICAvLyBpbnRlbmRlZCBlbXB0eVxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgdXBkYXRlRGFzaGJvYXJkKCkge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBkYXNoYm9hcmRNTzogQ29udGV4dERhc2hib2FyZE1hbmFnZWRPYmplY3QgPSBjbG9uZURlZXAodGhpcy5tbyk7XG4gICAgICBjb25zdCBjZmcgPSB0aGlzLmRhc2hib2FyZDtcbiAgICAgIGlmICh0aGlzLmlzUmVwb3J0KSB7XG4gICAgICAgIGNvbnN0IHsgbmFtZSwgaWNvbiwgYzh5X0lzTmF2aWdhdG9yTm9kZSwgcHJpb3JpdHksIGRlc2NyaXB0aW9uIH0gPSBjZmc7XG4gICAgICAgIGRhc2hib2FyZE1PLmM4eV9EYXNoYm9hcmQgPSBjZmc7XG4gICAgICAgIGF3YWl0IHRoaXMudXBkYXRlUmVwb3J0KHtcbiAgICAgICAgICBpZDogdGhpcy5jb250ZXh0LmlkLFxuICAgICAgICAgIG5hbWUsXG4gICAgICAgICAgaWNvbixcbiAgICAgICAgICBjOHlfSXNOYXZpZ2F0b3JOb2RlLFxuICAgICAgICAgIHByaW9yaXR5LFxuICAgICAgICAgIGRlc2NyaXB0aW9uXG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZGFzaGJvYXJkTU8uYzh5X0Rhc2hib2FyZCA9IGNmZztcbiAgICAgIH1cblxuICAgICAgY29uc3QgdXBkYXRlZERhc2hib2FyZE1vID0gYXdhaXQgdGhpcy5jb250ZXh0RGFzaGJvYXJkU2VydmljZS51cGRhdGUoXG4gICAgICAgIGRhc2hib2FyZE1PLFxuICAgICAgICB0aGlzLmN1cnJlbnRDb250ZXh0XG4gICAgICApO1xuICAgICAgdGhpcy5jbGVhbnVwQWZ0ZXJEZXRhaWxzQ2xvc2UoKTtcblxuICAgICAgdGhpcy5kYXNoYm9hcmRTYXZlZC5lbWl0KHVwZGF0ZWREYXNoYm9hcmRNbyk7XG4gICAgfSBjYXRjaCAoZXgpIHtcbiAgICAgIC8vIGludGVuZGVkIGVtcHR5XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBlZGl0KCkge1xuICAgIGlmICh0aGlzLmlzUmVwb3J0KSB7XG4gICAgICBjb25zdCB7IG5hbWUsIGljb24sIHByaW9yaXR5LCBjOHlfSXNOYXZpZ2F0b3JOb2RlLCBkZXNjcmlwdGlvbiB9ID0gdGhpcy5jb250ZXh0O1xuICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLmRhc2hib2FyZCwgeyBuYW1lLCBpY29uLCBwcmlvcml0eSwgYzh5X0lzTmF2aWdhdG9yTm9kZSwgZGVzY3JpcHRpb24gfSk7XG4gICAgfVxuICAgIHRoaXMuaXNOYW1lZERhc2hib2FyZCA9IHRoaXMuY29udGV4dERhc2hib2FyZFNlcnZpY2UuaXNOYW1lZCh0aGlzLm1vKTtcbiAgICB0aGlzLnNlbGVjdGVkVGFiID1cbiAgICAgIHRoaXMuaGlkZUF2YWlsYWJpbGl0eSAmJiB0aGlzLmlzTmFtZWREYXNoYm9hcmRcbiAgICAgICAgPyBEYXNoYm9hcmREZXRhaWxzVGFiSWQuQVBQRUFSQU5DRVxuICAgICAgICA6IERhc2hib2FyZERldGFpbHNUYWJJZC5HRU5FUkFMO1xuICAgIHRoaXMuaW5pdGlhbGl6ZUNvbmZpZ3VyYXRpb24oKTtcbiAgfVxuXG4gIHByaXZhdGUgaW5pdGlhbGl6ZUNvbmZpZ3VyYXRpb24oKSB7XG4gICAgY29uc3QgZGVmYXVsdERhc2hib2FyZENmZzogUGFydGlhbDxDb250ZXh0RGFzaGJvYXJkPiA9IHtcbiAgICAgIG5hbWU6IHRoaXMudHJhbnNsYXRlU2VydmljZS5pbnN0YW50KHRoaXMuaXNSZXBvcnQgPyBnZXR0ZXh0KCdSZXBvcnQnKSA6IGdldHRleHQoJ0Rhc2hib2FyZCcpKSxcbiAgICAgIHByaW9yaXR5OiB0aGlzLmlzUmVwb3J0XG4gICAgICAgID8gUkVQT1JUX0RFRkFVTFRfTkFWSUdBVElPTl9OT0RFX1BSSU9SSVRZXG4gICAgICAgIDogdGhpcy5kYXNoYm9hcmREZXRhaWxTZXJ2aWNlLkRFRkFVTFRfREFTSEJPQVJEX1BSSU9SSVRZLFxuICAgICAgaWNvbjogdGhpcy5kYXNoYm9hcmREZXRhaWxTZXJ2aWNlLkRFRkFVTFRfREFTSEJPQVJEX0lDT04sXG4gICAgICBkZXZpY2VUeXBlVmFsdWU6IHRoaXMuZGV2aWNlVHlwZSxcbiAgICAgIGNvbHVtbnM6IDI0XG4gICAgfTtcblxuICAgIGlmICh0aGlzLmRhc2hib2FyZCkge1xuICAgICAgdGhpcy5jdXJyZW50RGFzaGJvYXJkID0gY2xvbmUodGhpcy5kYXNoYm9hcmQpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmRhc2hib2FyZCA9IGRlZmF1bHREYXNoYm9hcmRDZmc7XG4gICAgICB0aGlzLmRhc2hib2FyZERldGFpbHNGb3JtLm1hcmtBc0RpcnR5KCk7XG4gICAgfVxuICAgIHRoaXMubmFtZVBsYWNlaG9sZGVyID0gdGhpcy5pc1JlcG9ydCA/IGdldHRleHQoJ2UuZy4gTXkgcmVwb3J0JykgOiBnZXR0ZXh0KCdlLmcuIE15IGRhc2hib2FyZCcpO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyB1cGRhdGVSZXBvcnQobW86IFBhcnRpYWw8SU1hbmFnZWRPYmplY3Q+KSB7XG4gICAgbW8uYzh5X0lzTmF2aWdhdG9yTm9kZSA9IG1vLmM4eV9Jc05hdmlnYXRvck5vZGUgPyB7fSA6IG51bGw7XG4gICAgY29uc3QgcmVzID0gYXdhaXQgdGhpcy5pbnZlbnRvcnkudXBkYXRlKG1vKTtcbiAgICB0aGlzLmNvbnRleHQgPSByZXMuZGF0YTtcbiAgICBpZiAodGhpcy5yb3V0ZS5wYXJlbnQpIHtcbiAgICAgIHRoaXMucm91dGUucGFyZW50LnNuYXBzaG90LmRhdGEuY29udGV4dERhdGEgPSB0aGlzLmNvbnRleHQ7XG4gICAgfVxuICAgIHRoaXMuY29udGV4dERhc2hib2FyZFNlcnZpY2UudXBkYXRlTmF2aWdhdG9ySXRlbShyZXMuZGF0YSk7XG4gIH1cblxuICBwcml2YXRlIGNsZWFudXBBZnRlckRldGFpbHNDbG9zZSgpIHtcbiAgICB0aGlzLmlzQ29sbGFwc2VkID0gdHJ1ZTtcbiAgICBpZiAoIXRoaXMuaXNFZGl0KSB7XG4gICAgICBjb25zdCBkYXNoYm9hcmRDb250ZXh0ID0gdGhpcy5yb3V0ZS5zbmFwc2hvdC5kYXRhLmRhc2hib2FyZDtcbiAgICAgIC8vIGhpZGUgTmV3IGRhc2hib2FyZCB0YWJcbiAgICAgIGNvbnN0IHRtcE5ld0Rhc2hib2FyZFRhYiA9IFsuLi50aGlzLnRhYnNTZXJ2aWNlLnN0YXRlXS5maW5kKFxuICAgICAgICB0ID0+IHQuZmVhdHVyZUlkID09PSBuZXdEYXNoYm9hcmRUYWIuZmVhdHVyZUlkXG4gICAgICApO1xuICAgICAgLy8gZG9uJ3QgaGlkZSB0aGUgbmV3IGRhc2hib2FyZCB0YWIgd2hlbiBjbGlja2luZyBvbiB0aGUgYWRkIGRhc2hib2FyZCBidXR0b24gZnJvbSBhbm90aGVyIGRhc2hib2FyZC5cbiAgICAgIGlmICghdG1wTmV3RGFzaGJvYXJkVGFiIHx8IGRhc2hib2FyZENvbnRleHQ/LmM4eV9EYXNoYm9hcmQpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgLy8gaGlkZSB0YWIgYW5kIG1ha2UgaXQgYXBwZWFyIGFzIGxhc3Qgb25lIHRvIHByZXZlbnQgbmF2aWdhdGluZyB0byBpdFxuICAgICAgdG1wTmV3RGFzaGJvYXJkVGFiLmhpZGUgPSB0cnVlO1xuICAgICAgdG1wTmV3RGFzaGJvYXJkVGFiLnByaW9yaXR5ID0gLUluZmluaXR5O1xuICAgICAgdGhpcy50YWJzU2VydmljZS5yZWZyZXNoKCk7XG4gICAgfVxuICAgIHRoaXMucHJldmlld0NoYW5nZWQuZW1pdCh0aGlzLmRhc2hib2FyZCk7XG4gIH1cbn1cbiIsIjxkaXZcbiAgY2xhc3M9XCJjb2xsYXBzZSBjOHktdG9wLWRyYXdlclwiXG4gIFtjb2xsYXBzZV09XCJpc0NvbGxhcHNlZFwiXG4gIFtpc0FuaW1hdGVkXT1cInRydWVcIlxuPlxuICA8ZGl2IGNsYXNzPVwicC10LTE2IHAtYi0xNiBwLWwtMjQgcC1yLTI0IHNlcGFyYXRvci1ib3R0b21cIj5cbiAgICA8c3BhbiBjbGFzcz1cImg0XCI+e3sgJ0Rhc2hib2FyZCBzZXR0aW5ncycgfCB0cmFuc2xhdGUgfX08L3NwYW4+XG4gIDwvZGl2PlxuXG4gIDxkaXZcbiAgICBjbGFzcz1cImQtZmxleFwiXG4gICAgW2Zvcm1Hcm91cF09XCJkYXNoYm9hcmREZXRhaWxzRm9ybVwiXG4gICAgKm5nSWY9XCIhaXNDb2xsYXBzZWRcIlxuICA+XG4gICAgPGM4eS10YWJzLW91dGxldFxuICAgICAgW3RhYnNdPVwidGFicyQgfCBhc3luY1wiXG4gICAgICBbb3V0bGV0TmFtZV09XCInZGFzaGJvYXJkVGFicydcIlxuICAgICAgW29yaWVudGF0aW9uXT1cIid2ZXJ0aWNhbCdcIlxuICAgICAgY2xhc3M9XCJjOHktdG9wLWRyYXdlci0tdGFic1wiXG4gICAgPjwvYzh5LXRhYnMtb3V0bGV0PlxuICAgIDxkaXYgY2xhc3M9XCJpbm5lci1zY3JvbGwgYzh5LXRvcC1kcmF3ZXJfX3RhYnMtY29udGFpbmVyIGZsZXgtZ3JvdyBwLWwtMjQgcC1yLWxnLTMyIHAtci14cy0yNCBwLXItc20tMjRcIj5cbiAgICAgIDxjOHktdGFiXG4gICAgICAgICpuZ0lmPVwiKCFpc05hbWVkRGFzaGJvYXJkICYmICFoaWRlQXZhaWxhYmlsaXR5KSB8fCBpc1JlcG9ydFwiXG4gICAgICAgIFtsYWJlbF09XCJUQUJTLmdlbmVyYWwubGFiZWxcIlxuICAgICAgICBbaWNvbl09XCInaW1hYy1zZXR0aW5ncydcIlxuICAgICAgICBbcHJpb3JpdHldPVwiMTAwXCJcbiAgICAgICAgW3RhYnNPdXRsZXRdPVwiVEFCU19PVVRMRVRfTkFNRVwiXG4gICAgICAgIChvblNlbGVjdCk9XCJzZWxlY3RUYWIoVEFCUy5nZW5lcmFsLmZlYXR1cmVJZClcIlxuICAgICAgICBbaXNBY3RpdmVdPVwic2VsZWN0ZWRUYWIgPT09IFRBQlMuZ2VuZXJhbC5mZWF0dXJlSWRcIlxuICAgICAgPjwvYzh5LXRhYj5cbiAgICAgIDxjOHktdGFiXG4gICAgICAgIFtsYWJlbF09XCJUQUJTLmFwcGVhcmFuY2UubGFiZWxcIlxuICAgICAgICBbcHJpb3JpdHldPVwiNTBcIlxuICAgICAgICBbaWNvbl09XCInd2ViLWRlc2lnbidcIlxuICAgICAgICBbdGFic091dGxldF09XCJUQUJTX09VVExFVF9OQU1FXCJcbiAgICAgICAgKG9uU2VsZWN0KT1cInNlbGVjdFRhYihUQUJTLmFwcGVhcmFuY2UuZmVhdHVyZUlkKVwiXG4gICAgICAgIFtpc0FjdGl2ZV09XCJzZWxlY3RlZFRhYiA9PT0gVEFCUy5hcHBlYXJhbmNlLmZlYXR1cmVJZFwiXG4gICAgICA+PC9jOHktdGFiPlxuICAgICAgPGM4eS10YWJcbiAgICAgICAgKm5nSWY9XCJtbz8uYzh5X0Rhc2hib2FyZEhpc3RvcnlcIlxuICAgICAgICBbbGFiZWxdPVwiVEFCUy52ZXJzaW9uSGlzdG9yeS5sYWJlbFwiXG4gICAgICAgIFtpY29uXT1cIid2ZXJzaW9ucydcIlxuICAgICAgICBbcHJpb3JpdHldPVwiMTBcIlxuICAgICAgICBbdGFic091dGxldF09XCJUQUJTX09VVExFVF9OQU1FXCJcbiAgICAgICAgKG9uU2VsZWN0KT1cInNlbGVjdFRhYihUQUJTLnZlcnNpb25IaXN0b3J5LmZlYXR1cmVJZClcIlxuICAgICAgICBbaXNBY3RpdmVdPVwic2VsZWN0ZWRUYWIgPT09IFRBQlMudmVyc2lvbkhpc3RvcnkuZmVhdHVyZUlkXCJcbiAgICAgID48L2M4eS10YWI+XG4gICAgICA8bmctY29udGFpbmVyIFtuZ1N3aXRjaF09XCJzZWxlY3RlZFRhYlwiPlxuICAgICAgICA8Yzh5LWRhc2hib2FyZC1nZW5lcmFsLXNldHRpbmdzXG4gICAgICAgICAgKm5nU3dpdGNoQ2FzZT1cIlRBQlMuZ2VuZXJhbC5mZWF0dXJlSWRcIlxuICAgICAgICAgIFtpc1JlcG9ydF09XCJpc1JlcG9ydFwiXG4gICAgICAgICAgW2lzTmFtZWREYXNoYm9hcmRdPVwiaXNOYW1lZERhc2hib2FyZFwiXG4gICAgICAgICAgW2hpZGVBdmFpbGFiaWxpdHldPVwiaGlkZUF2YWlsYWJpbGl0eVwiXG4gICAgICAgICAgW2Rhc2hib2FyZF09XCJkYXNoYm9hcmRcIlxuICAgICAgICAgIFtnZW5lcmFsU2V0dGluZ3NGb3JtXT1cImdlbmVyYWxTZXR0aW5nc0Zvcm1cIlxuICAgICAgICAgIFtkZXZpY2VUeXBlVmFsdWVdPVwiZGV2aWNlVHlwZVZhbHVlXCJcbiAgICAgICAgICBbZGlzcGxheURldmljZVR5cGVWYWx1ZV09XCJkaXNwbGF5RGV2aWNlVHlwZVZhbHVlXCJcbiAgICAgICAgICBbbW9dPVwibW9cIlxuICAgICAgICAgIFthbGxvd1R5cGVEYXNoYm9hcmRdPVwiYWxsb3dUeXBlRGFzaGJvYXJkXCJcbiAgICAgICAgICBbaXNEZXZpY2VdPVwiISFjb250ZXh0Py5jOHlfSXNEZXZpY2VcIlxuICAgICAgICAgIGNsYXNzPVwiYW5pbWF0ZWQgZmFkZUluXCJcbiAgICAgICAgICAob25EdXBsaWNhdGVXaXRob3V0VHlwZSk9XCJkdXBsaWNhdGVXaXRob3V0VHlwZSgpXCJcbiAgICAgICAgPjwvYzh5LWRhc2hib2FyZC1nZW5lcmFsLXNldHRpbmdzPlxuICAgICAgICA8Yzh5LWRhc2hib2FyZC1hcHBlYXJhbmNlLXNldHRpbmdzXG4gICAgICAgICAgKm5nU3dpdGNoQ2FzZT1cIlRBQlMuYXBwZWFyYW5jZS5mZWF0dXJlSWRcIlxuICAgICAgICAgIFtkYXNoYm9hcmRdPVwiZGFzaGJvYXJkXCJcbiAgICAgICAgICBbYXBwZWFyYW5jZVNldHRpbmdzRm9ybV09XCJhcHBlYXJhbmNlU2V0dGluZ3NGb3JtXCJcbiAgICAgICAgICAocHJldmlld0NoYW5nZWQpPVwicHJldmlld0NoYW5nZWQuZW1pdCgkZXZlbnQpXCJcbiAgICAgICAgICBjbGFzcz1cImFuaW1hdGVkIGZhZGVJblwiXG4gICAgICAgID48L2M4eS1kYXNoYm9hcmQtYXBwZWFyYW5jZS1zZXR0aW5ncz5cbiAgICAgICAgPGM4eS1kYXNoYm9hcmQtdmVyc2lvbi1oaXN0b3J5XG4gICAgICAgICAgKm5nU3dpdGNoQ2FzZT1cIlRBQlMudmVyc2lvbkhpc3RvcnkuZmVhdHVyZUlkXCJcbiAgICAgICAgICBbZGFzaGJvYXJkSGlzdG9yeV09XCJtby5jOHlfRGFzaGJvYXJkSGlzdG9yeVwiXG4gICAgICAgICAgW2lzUmVwb3J0XT1cImlzUmVwb3J0XCJcbiAgICAgICAgICAob25SZXZlcnQpPVwicmV2ZXJ0RGFzaGJvYXJkKCRldmVudClcIlxuICAgICAgICAgIGNsYXNzPVwiYW5pbWF0ZWQgZmFkZUluXCJcbiAgICAgICAgPjwvYzh5LWRhc2hib2FyZC12ZXJzaW9uLWhpc3Rvcnk+XG4gICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG5cbiAgPGRpdiBjbGFzcz1cImM4eS10b3AtZHJhd2VyLS1mb290ZXJcIj5cbiAgICA8YnV0dG9uXG4gICAgICBjbGFzcz1cImJ0biBidG4tZGVmYXVsdFwiXG4gICAgICB0aXRsZT1cInt7ICdDYW5jZWwnIHwgdHJhbnNsYXRlIH19XCJcbiAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgZGF0YS1jeT1cImRhc2hib2FyZC1kZXRhaWwtLWNhbmNlbC1kYXNoYm9hcmRcIlxuICAgICAgKGNsaWNrKT1cImNhbmNlbCgpXCJcbiAgICA+XG4gICAgICB7eyAnQ2FuY2VsJyB8IHRyYW5zbGF0ZSB9fVxuICAgIDwvYnV0dG9uPlxuICAgIDxidXR0b25cbiAgICAgIGNsYXNzPVwiYnRuIGJ0bi1wcmltYXJ5XCJcbiAgICAgIHRpdGxlPVwie3sgJ1NhdmUnIHwgdHJhbnNsYXRlIH19XCJcbiAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgZGF0YS1jeT1cImRhc2hib2FyZC1kZXRhaWwtLXNhdmUtZGFzaGJvYXJkXCJcbiAgICAgIChjbGljayk9XCJzYXZlKClcIlxuICAgICAgW2Rpc2FibGVkXT1cIlxuICAgICAgICAoZGFzaGJvYXJkRGV0YWlsc0Zvcm0/LmludmFsaWQgfHwgZGFzaGJvYXJkRGV0YWlsc0Zvcm0/LnByaXN0aW5lKSAmJiB0aGlzLmlzRWRpdFxuICAgICAgXCJcbiAgICA+XG4gICAgICB7eyAnU2F2ZScgfCB0cmFuc2xhdGUgfX1cbiAgICA8L2J1dHRvbj5cbiAgPC9kaXY+XG48L2Rpdj5cbiJdfQ==
@@ -37,6 +37,33 @@ export const HOOK_COMPONENTS = new InjectionToken('HOOK_COMPONENTS');
37
37
  export function hookComponent(components, options) {
38
38
  return hookGeneric(components, HOOK_COMPONENTS, options);
39
39
  }
40
+ /**
41
+ * Hook to add dynamic widget components to the UI.
42
+ *
43
+ * You can either provide a single `DynamicWidgetDefinition` as parameter:
44
+ * ```typescript
45
+ * hookWidget(...)
46
+ * ```
47
+ *
48
+ * Or an array to directly register multiple:
49
+ * ```typescript
50
+ * hookWidget([...])
51
+ * ```
52
+ *
53
+ * * Or you provide a Service that implements `ExtensionFactory<DynamicWidgetDefinition>`
54
+ * ```typescript
55
+ * export class MyDynamicWidgetDefinitionFactory implements ExtensionFactory<DynamicWidgetDefinition> {...}
56
+ * ...
57
+ * hookWidget(MyDynamicWidgetDefinitionFactory)
58
+ * ```
59
+ * A widget specific alternative to `hookComponent`..
60
+ * @param components The `DynamicWidgetDefinition`'s or `ExtensionFactory` to be provided.
61
+ * @param options Options to configure the hook.
62
+ * @returns An `Provider` to be provided in your module.
63
+ */
64
+ export function hookWidget(components, options) {
65
+ return hookComponent(components, options);
66
+ }
40
67
  export function isLazyDynamicComponents(componentDefinition) {
41
68
  return !!componentDefinition?.loadComponent;
42
69
  }
@@ -58,4 +85,4 @@ export var DynamicComponentErrorStrategy;
58
85
  */
59
86
  DynamicComponentErrorStrategy["CUSTOM"] = "CUSTOM";
60
87
  })(DynamicComponentErrorStrategy || (DynamicComponentErrorStrategy = {}));
61
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHluYW1pYy1jb21wb25lbnQubW9kZWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9jb3JlL2R5bmFtaWMtY29tcG9uZW50L2R5bmFtaWMtY29tcG9uZW50Lm1vZGVsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxjQUFjLEVBQWtCLE1BQU0sZUFBZSxDQUFDO0FBRS9ELE9BQU8sRUFHTCxXQUFXLEVBRVosTUFBTSwyQkFBMkIsQ0FBQztBQUluQzs7OztHQUlHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sNkJBQTZCLEdBQUcsSUFBSSxjQUFjLENBQzdELCtCQUErQixDQUNoQyxDQUFDO0FBeUJGOzs7R0FHRztBQUNILE1BQU0sQ0FBQyxNQUFNLGVBQWUsR0FBRyxJQUFJLGNBQWMsQ0FBOEIsaUJBQWlCLENBQUMsQ0FBQztBQUVsRzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQXNCRztBQUNILE1BQU0sVUFBVSxhQUFhLENBQzNCLFVBQXVELEVBQ3ZELE9BQXFDO0lBRXJDLE9BQU8sV0FBVyxDQUE2QixVQUFVLEVBQUUsZUFBZSxFQUFFLE9BQU8sQ0FBQyxDQUFDO0FBQ3ZGLENBQUM7QUF5R0QsTUFBTSxVQUFVLHVCQUF1QixDQUNyQyxtQkFBc0M7SUFFdEMsT0FBTyxDQUFDLENBQUMsbUJBQW1CLEVBQUUsYUFBYSxDQUFDO0FBQzlDLENBQUM7QUFFRCxNQUFNLFVBQVUsd0JBQXdCLENBQ3RDLG1CQUFzQztJQUV0QyxPQUFPLENBQUMsQ0FBQyxtQkFBbUIsRUFBRSxTQUFTLENBQUM7QUFDMUMsQ0FBQztBQUVELE1BQU0sQ0FBTixJQUFZLDZCQWFYO0FBYkQsV0FBWSw2QkFBNkI7SUFDdkM7O09BRUc7SUFDSCwwREFBeUIsQ0FBQTtJQUN6Qjs7T0FFRztJQUNILGdFQUErQixDQUFBO0lBQy9COztPQUVHO0lBQ0gsa0RBQWlCLENBQUE7QUFDbkIsQ0FBQyxFQWJXLDZCQUE2QixLQUE3Qiw2QkFBNkIsUUFheEMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3Rpb25Ub2tlbiwgSW5qZWN0b3IsIFR5cGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE9ic2VydmFibGUgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7XG4gIEV4dGVuc2lvbkZhY3RvcnksXG4gIEdlbmVyaWNIb29rVHlwZSxcbiAgaG9va0dlbmVyaWMsXG4gIEdlbmVyaWNIb29rT3B0aW9uc1xufSBmcm9tICcuLi9jb21tb24vZXh0ZW5zaW9uLWhvb2tzJztcbmltcG9ydCB7IER5bmFtaWNDb21wb25lbnRBbGVydEFnZ3JlZ2F0b3IgfSBmcm9tICcuL2R5bmFtaWMtY29tcG9uZW50LWFsZXJ0LWFnZ3JlZ2F0b3InO1xuaW1wb3J0IHsgRHluYW1pY0RldGFpbHNSZXNvbHZlciB9IGZyb20gJy4vZHluYW1pYy1kZXRhaWxzLXJlc29sdmVyJztcblxuLyoqXG4gKiBUaW1lIHRoZSBob29rIHdhaXRzIHVudGlsIGl0IGVtaXRzIGFuIHVuZGVmaW5lZCB2YWx1ZS5cbiAqIFVzZWQgZm9yIG5vdCBkZWZpbmVkIHdpZGdldHMgLT4gYnkgZGVmYXVsdCBhZnRlciA1cyB3ZVxuICogc2hvdyBhbiBlcnJvciB0aGF0IHRoZSB3aWRnZXQgY291bGQgbm90IGJlIGxvYWRlZC5cbiAqL1xuZXhwb3J0IGNvbnN0IFJFU09MVklOR19DT01QT05FTlRfV0FJVF9USU1FID0gbmV3IEluamVjdGlvblRva2VuPG51bWJlcj4oXG4gICdSRVNPTFZJTkdfQ09NUE9ORU5UX1dBSVRfVElNRSdcbik7XG5cbi8qKlxuICogQW4gZXh0ZW5zaW9uIEhPT0sgY2FuIHVzZSBlaXRoZXIgYSBwdXJlIHZhbHVlOlxuICogYGBgdHlwZXNjcmlwdFxuICogIHsgcHJvdmlkZTogSE9PS19YLCB1c2VWYWx1ZTogeyAuLi5ob29rVmFsdWUgfSwgbXVsdGk6IHRydWUgfVxuICogYGBgXG4gKlxuICogT3IgYW4gYXJyYXkgdG8gZGlyZWN0bHkgcmVnaXN0ZXIgbXVsdGlwbGU6XG4gKiBgYGB0eXBlc2NyaXB0XG4gKiAgeyBwcm92aWRlOiBIT09LX1gsIHVzZVZhbHVlOiBbeyAuLi5ob29rVmFsdWVzIH1dLCBtdWx0aTogdHJ1ZSB9XG4gKiBgYGBcbiAqXG4gKiBPciBhbiBFeHRlbnNpb25GYWN0b3J5IHdoaWNoIGFsbG93cyB0byBkZWZpbmUgYSBnZXQoKSBmdW5jdGlvbi4gVGhpcyBmdW5jdGlvblxuICogZ2V0cyBjYWxsZWQgb24gZWFjaCBuYXZpZ2F0aW9uIHdpdGggdGhlIGN1cnJlbnQgcm91dGUgYW5kIGNhbiByZXR1cm4gdmFsdWVzXG4gKiBhc3luYyAob2JzZXJ2YWJsZSBvciBwcm9taXNlKS5cbiAqIGBgYHR5cGVzY3JpcHRcbiAqICB7IHByb3ZpZGU6IEhPT0tfWCwgdXNlRmFjdG9yeTogeyBnZXQ6IChyb3V0ZSkgPT4gZG9Tb21ldGhpbmdBc3luYyhyb3V0ZSkgfSwgbXVsdGk6IHRydWUgfVxuICogYGBgXG4gKi9cbmV4cG9ydCB0eXBlIER5bmFtaWNDb21wb25lbnRFeHRlbnNpb24gPVxuICB8IER5bmFtaWNDb21wb25lbnREZWZpbml0aW9uXG4gIHwgRHluYW1pY0NvbXBvbmVudERlZmluaXRpb25bXVxuICB8IEV4dGVuc2lvbkZhY3Rvcnk8RHluYW1pY0NvbXBvbmVudERlZmluaXRpb24+O1xuXG4vKipcbiAqIEEgaG9vayB0byBhZGQgZHluYW1pYyBjb21wb25lbnRzIHRvIHRoZSBVSSAoZS5nLiB3aWRnZXRzKS5cbiAqIEBkZXByZWNhdGVkIENvbnNpZGVyIHVzaW5nIHRoZSBgaG9va0NvbXBvbmVudGAgZnVuY3Rpb24gaW5zdGVhZC5cbiAqL1xuZXhwb3J0IGNvbnN0IEhPT0tfQ09NUE9ORU5UUyA9IG5ldyBJbmplY3Rpb25Ub2tlbjxEeW5hbWljQ29tcG9uZW50RXh0ZW5zaW9uW10+KCdIT09LX0NPTVBPTkVOVFMnKTtcblxuLyoqXG4gKiBBIGhvb2sgdG8gYWRkIGR5bmFtaWMgY29tcG9uZW50cyB0byB0aGUgVUkgKGUuZy4gd2lkZ2V0cykuXG4gKlxuICogWW91IGNhbiBlaXRoZXIgcHJvdmlkZSBhIHNpbmdsZSBgRHluYW1pY0NvbXBvbmVudERlZmluaXRpb25gIGFzIHBhcmFtZXRlcjpcbiAqIGBgYHR5cGVzY3JpcHRcbiAqICBob29rQ29tcG9uZW50KC4uLilcbiAqIGBgYFxuICpcbiAqIE9yIGFuIGFycmF5IHRvIGRpcmVjdGx5IHJlZ2lzdGVyIG11bHRpcGxlOlxuICogYGBgdHlwZXNjcmlwdFxuICogIGhvb2tDb21wb25lbnQoWy4uLl0pXG4gKiBgYGBcbiAqXG4gKiBPciB5b3UgcHJvdmlkZSBhbiBTZXJ2aWNlIHRoYXQgaW1wbGVtZW50cyBgRXh0ZW5zaW9uRmFjdG9yeTxEeW5hbWljQ29tcG9uZW50RGVmaW5pdGlvbj5gXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiAgZXhwb3J0IGNsYXNzIE15RHluYW1pY0NvbXBvbmVudERlZmluaXRpb25GYWN0b3J5IGltcGxlbWVudHMgRXh0ZW5zaW9uRmFjdG9yeTxEeW5hbWljQ29tcG9uZW50RGVmaW5pdGlvbj4gey4uLn1cbiAqICAuLi5cbiAqICBob29rQ29tcG9uZW50KE15RHluYW1pY0NvbXBvbmVudERlZmluaXRpb25GYWN0b3J5KVxuICogYGBgXG4gKiBBIHR5cGVkIGFsdGVybmF0aXZlIHRvIGBIT09LX0NPTVBPTkVOVFNgLlxuICogQHBhcmFtIGNvbXBvbmVudHMgVGhlIGBEeW5hbWljQ29tcG9uZW50RGVmaW5pdGlvbmAncyBvciBgRXh0ZW5zaW9uRmFjdG9yeWAgdG8gYmUgcHJvdmlkZWQuXG4gKiBAcmV0dXJucyBBbiBgUHJvdmlkZXJgIHRvIGJlIHByb3ZpZGVkIGluIHlvdXIgbW9kdWxlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gaG9va0NvbXBvbmVudChcbiAgY29tcG9uZW50czogR2VuZXJpY0hvb2tUeXBlPER5bmFtaWNDb21wb25lbnREZWZpbml0aW9uPixcbiAgb3B0aW9ucz86IFBhcnRpYWw8R2VuZXJpY0hvb2tPcHRpb25zPlxuKSB7XG4gIHJldHVybiBob29rR2VuZXJpYzxEeW5hbWljQ29tcG9uZW50RGVmaW5pdGlvbj4oY29tcG9uZW50cywgSE9PS19DT01QT05FTlRTLCBvcHRpb25zKTtcbn1cblxuLyoqXG4gKiBBIGR5bmFtaWMgY29tcG9uZW50IGNhbiBiZSBkZWZpbmVkIGluIGEgdGhlIEhPT0tfQ09NUE9ORU5UUyB0byBkaXNwbGF5IGFueSBraW5kXG4gKiBvZiBjb21wb25lbnQgZHluYW1pY2FsbHkganVzdCBieSByZWZlcmVuY2luZyBpdCdzIGlkLiBUaGUgbW9zdCBjb21tb24gdXNlIGNhc2UgaXMgb24gZGFzaGJvYXJkcyxcbiAqIHdoZXJlIHRoZSBgY29uZmlnQ29tcG9uZW50YCBpcyB1c2VkIHRvIGRlZmluZSB3aGF0IGlzIGRpc3BsYXllZCBvbiB0aGUgYGNvbXBvbmVudGBcbiAqIG9uIHRoZSBkYXNoYm9hcmQuXG4gKlxuICogVG8gdXNlIHRoZSBjb21wb25lbnQgeW91IGNhbiB1c2UgdGhlIGM4eS1keW5hbWljLWNvbXBvbmVudC5cbiAqXG4gKiBgYGBcbiAqICAgPGM4eS1keW5hbWljLWNvbXBvbmVudFxuICogICAgIGNvbXBvbmVudElkPVwiYW5ndWxhci53aWRnZXQuZGVtb1wiXG4gKiAgICAgW2NvbmZpZ109XCJ7IHRleHQ6ICdIZWxsbyB3b3JsZCcgfVwiXG4gKiAgICAgW21vZGVdPVwiZWRpdENvbXBvbmVudCA/ICdjb25maWcnIDogJ2NvbXBvbmVudCdcIlxuICogICA+PC9jOHktZHluYW1pYy1jb21wb25lbnQ+XG4gKiAgIGBgYFxuICovXG5leHBvcnQgdHlwZSBEeW5hbWljQ29tcG9uZW50RGVmaW5pdGlvbiA9IER5bmFtaWNDb21wb25lbnREZWZpbml0aW9uQmFzZSAmIER5bmFtaWNDb21wb25lbnRzO1xuXG5leHBvcnQgaW50ZXJmYWNlIER5bmFtaWNDb21wb25lbnREZWZpbml0aW9uQmFzZSB7XG4gIC8qKlxuICAgKiBVbmlxdWUgc2VyaWFsaXphYmxlIGlkXG4gICAqL1xuICBpZDogc3RyaW5nO1xuICAvKipcbiAgICogVGhlIGxhYmVsIHNob3duIGZvciB0aGlzIGR5bmFtaWMgY29tcG9uZW50IG9uIGFkZCB3aWRnZXRzXG4gICAqL1xuICBsYWJlbDogc3RyaW5nO1xuICAvKipcbiAgICogVGhlIGRlc2NyaXB0aW9uIHNob3duIG9uIGFkZCB3aWRnZXRcbiAgICovXG4gIGRlc2NyaXB0aW9uOiBzdHJpbmc7XG4gIC8qKlxuICAgKiBBZGQgYW55IHJhbmRvbSBkYXRhLCBzcGVjaWFsbHkgdG8gYW5ndWxhci5qcyBkYXNoYm9hcmRzLlxuICAgKiBTaG91bGQgYmUgc2VhcmlsemFibGVkIHRvIGFsbG93IHRvIHNhdmUgaXQgdG8gdGhlIEFQSS5cbiAgICovXG4gIGRhdGE/OiBhbnk7XG4gIC8qKlxuICAgKiBBbiB1cmwgdG8gYW4gcHJldmlldyBpbWFnZS5cbiAgICovXG4gIHByZXZpZXdJbWFnZT86IHN0cmluZztcbiAgLyoqXG4gICAqIFRoZSBpbmplY3RvciB0byB1c2UgdG8gaW5qZWN0IHRoaXMgY29tcG9uZW50LiBJZiB1c2VkIGluIGEgbW9kdWxlIGZlZGVyYXRpb25cbiAgICogcGx1Z2luLCB0aGUgaW5qZWN0b3Igb2YgdGhlIHBsdWdpbiBzaG91bGQgYmUgdXNlZC4gRGVmYXVsdHMgdG8gdGhlIHJvb3QgaW5qZWN0b3IuXG4gICAqL1xuICBpbmplY3Rvcj86IEluamVjdG9yO1xuICAvKipcbiAgICogQXR0cmlidXRlcyBvZiB0aGUgZHluYW1pYyBjb21wb25lbnRzIGNvbmZpZ3VyYXRpb24gdG8gYmUgcmVzb2x2ZWQuXG4gICAqL1xuICByZXNvbHZlPzogeyBba2V5OiBzdHJpbmddOiBUeXBlPER5bmFtaWNEZXRhaWxzUmVzb2x2ZXI+IH07XG4gIC8qKlxuICAgKiBEZXRlcm1pbmVzIGlmIGR5bmFtaWMgY29tcG9uZW50IG9yIHdpZGdldCBpdHNlbGYgc2hvdWxkIHJlbmRlciBhbGVydHMuXG4gICAqL1xuICBlcnJvclN0cmF0ZWd5PzogRHluYW1pY0NvbXBvbmVudEVycm9yU3RyYXRlZ3k7XG4gIC8qKlxuICAgKiBPcmRlcmluZyBvZiB0aGUgY29tcG9uZW50c1xuICAgKi9cbiAgcHJpb3JpdHk/OiBudW1iZXI7XG59XG5cbmV4cG9ydCB0eXBlIER5bmFtaWNDb21wb25lbnRzID0gRWFnZXJEeW5hbWljQ29tcG9uZW50cyB8IExhenlEeW5hbWljQ29tcG9uZW50cztcblxuZXhwb3J0IGludGVyZmFjZSBFYWdlckR5bmFtaWNDb21wb25lbnRzIHtcbiAgLyoqXG4gICAqIFRoZSBjb21wb25lbnQgd2hpY2ggaXMgdXNlZCB3aGVuIHRoZSBjb21wb25lbnQgc2hvdWxkIGJlIGRpc3BsYXllZCAoZS5nLiBvbiBhIGRhc2hib2FyZClcbiAgICovXG4gIGNvbXBvbmVudDogVHlwZTxhbnk+O1xuICBsb2FkQ29tcG9uZW50PzogbmV2ZXI7XG4gIC8qKlxuICAgKiBUaGUgY29uZmlndXJhdGlvbiBjb21wb25lbnQgdXNlZCB3aGVuIGEgd2lkZ2V0IGlzIGFkZGVkIG9yIGVkaXRlZC5cbiAgICovXG4gIGNvbmZpZ0NvbXBvbmVudD86IFR5cGU8YW55PjtcbiAgbG9hZENvbmZpZ0NvbXBvbmVudD86IG5ldmVyO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIExhenlEeW5hbWljQ29tcG9uZW50cyB7XG4gIC8qKlxuICAgKiBBIGZ1bmN0aW9uIHJldHVybmluZyBhIHByb21pc2Ugb2YgdGhlIGNvbXBvbmVudCB3aGljaCBpcyB1c2VkIHdoZW4gdGhlIGNvbXBvbmVudCBzaG91bGQgYmUgZGlzcGxheWVkIChlLmcuIG9uIGEgZGFzaGJvYXJkKVxuICAgKlxuICAgKiBBIHNhbXBsZSBmdW5jdGlvbiB0byBiZSBwcm92aWRlZCBjb3VsZCBsb29rIGxpa2UgdGhpczpcbiAgICogYGBgXG4gICAqIGFzeW5jIGZ1bmN0aW9uIGxvYWRWaWV3Q29tcG9uZW50KCkge1xuICAgKiAgY29uc3QgeyBMYXp5V2lkZ2V0Vmlld0NvbXBvbmVudCB9ID0gYXdhaXQgaW1wb3J0KCcuL2xhenktd2lkZ2V0LXZpZXcnKTtcbiAgICogIHJldHVybiBMYXp5V2lkZ2V0Vmlld0NvbXBvbmVudDtcbiAgICogfVxuICAgKiBgYGBcbiAgICovXG4gIGxvYWRDb21wb25lbnQ6ICgpID0+IFByb21pc2U8VHlwZTxhbnk+PjtcbiAgY29tcG9uZW50PzogbmV2ZXI7XG4gIC8qKlxuICAgKiBBIGZ1bmN0aW9uIHJldHVybmluZyBhIHByb21pc2Ugb2YgdGhlIGNvbmZpZ3VyYXRpb24gY29tcG9uZW50IHVzZWQgd2hlbiBhIHdpZGdldCBpcyBhZGRlZCBvciBlZGl0ZWQuXG4gICAqXG4gICAqIEEgc2FtcGxlIGZ1bmN0aW9uIHRvIGJlIHByb3ZpZGVkIGNvdWxkIGxvb2sgbGlrZSB0aGlzOlxuICAgKiBgYGBcbiAgICogYXN5bmMgZnVuY3Rpb24gbG9hZENvbmZpZ0NvbXBvbmVudCgpIHtcbiAgICogIGNvbnN0IHsgTGF6eVdpZGdldENvbmZpZ0NvbXBvbmVudCB9ID0gYXdhaXQgaW1wb3J0KCcuL2xhenktd2lkZ2V0LWNvbmZpZycpO1xuICAgKiAgcmV0dXJuIExhenlXaWRnZXRDb25maWdDb21wb25lbnQ7XG4gICAqIH1cbiAgICogYGBgXG4gICAqL1xuICBsb2FkQ29uZmlnQ29tcG9uZW50PzogKCkgPT4gUHJvbWlzZTxUeXBlPGFueT4+O1xuICBjb25maWdDb21wb25lbnQ/OiBuZXZlcjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzTGF6eUR5bmFtaWNDb21wb25lbnRzKFxuICBjb21wb25lbnREZWZpbml0aW9uOiBEeW5hbWljQ29tcG9uZW50c1xuKTogY29tcG9uZW50RGVmaW5pdGlvbiBpcyBMYXp5RHluYW1pY0NvbXBvbmVudHMge1xuICByZXR1cm4gISFjb21wb25lbnREZWZpbml0aW9uPy5sb2FkQ29tcG9uZW50O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNFYWdlckR5bmFtaWNDb21wb25lbnRzKFxuICBjb21wb25lbnREZWZpbml0aW9uOiBEeW5hbWljQ29tcG9uZW50c1xuKTogY29tcG9uZW50RGVmaW5pdGlvbiBpcyBFYWdlckR5bmFtaWNDb21wb25lbnRzIHtcbiAgcmV0dXJuICEhY29tcG9uZW50RGVmaW5pdGlvbj8uY29tcG9uZW50O1xufVxuXG5leHBvcnQgZW51bSBEeW5hbWljQ29tcG9uZW50RXJyb3JTdHJhdGVneSB7XG4gIC8qKlxuICAgKiBXaWxsIG5vdCByZW5kZXIvaW5pdGlhbGl6ZSB0aGUgV2lkZ2V0IGluIGNhc2UgYW4gZXJyb3Igd2FzIGRldGVjdGVkLlxuICAgKi9cbiAgTk9UX1JFTkRFUiA9ICdOT1RfUkVOREVSJyxcbiAgLyoqXG4gICAqIFdpbGwgYWRkIGFuIG92ZXJsYXkgb3ZlciB0aGUgV2lkZ2V0LCBkaXNwbGF5aW5nIHRoZSBlcnJvciBtZXNzYWdlLlxuICAgKi9cbiAgT1ZFUkxBWV9FUlJPUiA9ICdPVkVSTEFZX0VSUk9SJyxcbiAgLyoqXG4gICAqIFRoZSB3aWRnZXQgaW1wbGVtZW50cyBlcnJvciBoYW5kbGluZyBvbiBpdHMgb3duLlxuICAgKi9cbiAgQ1VTVE9NID0gJ0NVU1RPTSdcbn1cblxuLyoqXG4gKiBVc2UgdGhpcyBpbnRlcmZhY2Ugb24gYW55IGNvbXBvbmVudCB0byBkZWZpbmUgdGhlIGludGVyY2hhbmdlIGJldHdlZW5cbiAqIGNvbmZpZyBhbmQgZGlzcGxheSBjb21wb25lbnQuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRHluYW1pY0NvbXBvbmVudCB7XG4gIC8qKlxuICAgKiBUaGUgY29uZmlndXJhdGlvbiB3aGljaCBpcyBzaGFyZWQgYmV0d2VlbiBjb25maWd1cmF0aW9uIGNvbXBvbmVudCBhbmQgZGlzcGxheSBjb21wb25lbnQuXG4gICAqIFNob3VsZCBiZSBzZWFyaWx6YWJsZWQgdG8gYWxsb3cgdG8gc2F2ZSBpdCB0byB0aGUgQVBJLlxuICAgKi9cbiAgY29uZmlnOiBhbnk7XG4gIC8qKlxuICAgKiBBbGVydHMgcmVsYXRlZCB0byB0aGUgZHluYW1pYyBjb21wb25lbnQuXG4gICAqIENhbiBlaXRoZXIgYmUgc2V0IGJ5IHRoZSBkeW5hbWljIGNvbXBvbmVudCBpdCBzZWxmIG9yIHZpYSBpdCdzIHJlc29sdmVycy5cbiAgICovXG4gIGFsZXJ0cz86IER5bmFtaWNDb21wb25lbnRBbGVydEFnZ3JlZ2F0b3I7XG4gIC8qKlxuICAgKiBBIHJlZmVyZW5jZSB0byB0aGUgbmcxRm9ybSBvbiBhbmd1bGFyanMgZGFzaGJvYXJkcyB0byBkaXNhYmxlL2VuYWJsZSB0aGUgc2F2ZSBidXR0b24uXG4gICAqIEBkZXByZWNhdGVkOiBXaWxsIG5vdCB3b3JrIG9uIEFuZ3VsYXItRGFzaGJvYXJkcyAoMS42LjEuMCkuIFVzZSBgQ29udGV4dFNlcnZpY2VEYXNoYm9hcmQuZm9ybURpc2FibGVkYCBpbnN0ZWFkLlxuICAgKi9cbiAgbmcxRm9ybVJlZj86IGFueTtcbn1cblxuLyoqXG4gKiBBbiBsaWZlY3ljbGUgaG9vayB3aGljaCBpcyBjYWxsZWQgYmVmb3JlIGFuIGNvbmZpZ3VyYXRpb24gaXMgc2F2ZWQuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgT25CZWZvcmVTYXZlIHtcbiAgLyoqXG4gICAqIENhbGxlZCBiZWZvcmUgYSBjb25maWd1cmF0aW9uIG9iamVjdCBpcyBzYXZlZC4gVGhlIGZ1bmN0aW9uIGNhbiBiZSB1c2VkIHRvIG1hbmlwdWxhdGUgdGhlXG4gICAqIHBhc3NlZCBjb25maWcgb2JqZWN0IG9yIHRvIGNhbmNlbCB0aGUgc2F2aW5nIChyZXR1cm4gZmFsc2Ugb3IgT2JzZXJ2YWJsZTxib29sZWFuPikuXG4gICAqL1xuICBvbkJlZm9yZVNhdmUoY29uZmlnPzogYW55KTogYm9vbGVhbiB8IFByb21pc2U8Ym9vbGVhbj4gfCBPYnNlcnZhYmxlPGJvb2xlYW4+O1xufVxuIl19
88
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHluYW1pYy1jb21wb25lbnQubW9kZWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9jb3JlL2R5bmFtaWMtY29tcG9uZW50L2R5bmFtaWMtY29tcG9uZW50Lm1vZGVsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxjQUFjLEVBQWtCLE1BQU0sZUFBZSxDQUFDO0FBRS9ELE9BQU8sRUFHTCxXQUFXLEVBRVosTUFBTSwyQkFBMkIsQ0FBQztBQUluQzs7OztHQUlHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sNkJBQTZCLEdBQUcsSUFBSSxjQUFjLENBQzdELCtCQUErQixDQUNoQyxDQUFDO0FBeUJGOzs7R0FHRztBQUNILE1BQU0sQ0FBQyxNQUFNLGVBQWUsR0FBRyxJQUFJLGNBQWMsQ0FBOEIsaUJBQWlCLENBQUMsQ0FBQztBQUVsRzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQXNCRztBQUNILE1BQU0sVUFBVSxhQUFhLENBQzNCLFVBQXVELEVBQ3ZELE9BQXFDO0lBRXJDLE9BQU8sV0FBVyxDQUE2QixVQUFVLEVBQUUsZUFBZSxFQUFFLE9BQU8sQ0FBQyxDQUFDO0FBQ3ZGLENBQUM7QUFFRDs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0F1Qkc7QUFDSCxNQUFNLFVBQVUsVUFBVSxDQUN4QixVQUFvRCxFQUNwRCxPQUFxQztJQUVyQyxPQUFPLGFBQWEsQ0FBQyxVQUFVLEVBQUUsT0FBTyxDQUFDLENBQUM7QUFDNUMsQ0FBQztBQStORCxNQUFNLFVBQVUsdUJBQXVCLENBQ3JDLG1CQUFzQztJQUV0QyxPQUFPLENBQUMsQ0FBQyxtQkFBbUIsRUFBRSxhQUFhLENBQUM7QUFDOUMsQ0FBQztBQUVELE1BQU0sVUFBVSx3QkFBd0IsQ0FDdEMsbUJBQXNDO0lBRXRDLE9BQU8sQ0FBQyxDQUFDLG1CQUFtQixFQUFFLFNBQVMsQ0FBQztBQUMxQyxDQUFDO0FBRUQsTUFBTSxDQUFOLElBQVksNkJBYVg7QUFiRCxXQUFZLDZCQUE2QjtJQUN2Qzs7T0FFRztJQUNILDBEQUF5QixDQUFBO0lBQ3pCOztPQUVHO0lBQ0gsZ0VBQStCLENBQUE7SUFDL0I7O09BRUc7SUFDSCxrREFBaUIsQ0FBQTtBQUNuQixDQUFDLEVBYlcsNkJBQTZCLEtBQTdCLDZCQUE2QixRQWF4QyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGlvblRva2VuLCBJbmplY3RvciwgVHlwZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgT2JzZXJ2YWJsZSB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHtcbiAgRXh0ZW5zaW9uRmFjdG9yeSxcbiAgR2VuZXJpY0hvb2tUeXBlLFxuICBob29rR2VuZXJpYyxcbiAgR2VuZXJpY0hvb2tPcHRpb25zXG59IGZyb20gJy4uL2NvbW1vbi9leHRlbnNpb24taG9va3MnO1xuaW1wb3J0IHsgRHluYW1pY0NvbXBvbmVudEFsZXJ0QWdncmVnYXRvciB9IGZyb20gJy4vZHluYW1pYy1jb21wb25lbnQtYWxlcnQtYWdncmVnYXRvcic7XG5pbXBvcnQgeyBEeW5hbWljRGV0YWlsc1Jlc29sdmVyIH0gZnJvbSAnLi9keW5hbWljLWRldGFpbHMtcmVzb2x2ZXInO1xuXG4vKipcbiAqIFRpbWUgdGhlIGhvb2sgd2FpdHMgdW50aWwgaXQgZW1pdHMgYW4gdW5kZWZpbmVkIHZhbHVlLlxuICogVXNlZCBmb3Igbm90IGRlZmluZWQgd2lkZ2V0cyAtPiBieSBkZWZhdWx0IGFmdGVyIDVzIHdlXG4gKiBzaG93IGFuIGVycm9yIHRoYXQgdGhlIHdpZGdldCBjb3VsZCBub3QgYmUgbG9hZGVkLlxuICovXG5leHBvcnQgY29uc3QgUkVTT0xWSU5HX0NPTVBPTkVOVF9XQUlUX1RJTUUgPSBuZXcgSW5qZWN0aW9uVG9rZW48bnVtYmVyPihcbiAgJ1JFU09MVklOR19DT01QT05FTlRfV0FJVF9USU1FJ1xuKTtcblxuLyoqXG4gKiBBbiBleHRlbnNpb24gSE9PSyBjYW4gdXNlIGVpdGhlciBhIHB1cmUgdmFsdWU6XG4gKiBgYGB0eXBlc2NyaXB0XG4gKiAgeyBwcm92aWRlOiBIT09LX1gsIHVzZVZhbHVlOiB7IC4uLmhvb2tWYWx1ZSB9LCBtdWx0aTogdHJ1ZSB9XG4gKiBgYGBcbiAqXG4gKiBPciBhbiBhcnJheSB0byBkaXJlY3RseSByZWdpc3RlciBtdWx0aXBsZTpcbiAqIGBgYHR5cGVzY3JpcHRcbiAqICB7IHByb3ZpZGU6IEhPT0tfWCwgdXNlVmFsdWU6IFt7IC4uLmhvb2tWYWx1ZXMgfV0sIG11bHRpOiB0cnVlIH1cbiAqIGBgYFxuICpcbiAqIE9yIGFuIEV4dGVuc2lvbkZhY3Rvcnkgd2hpY2ggYWxsb3dzIHRvIGRlZmluZSBhIGdldCgpIGZ1bmN0aW9uLiBUaGlzIGZ1bmN0aW9uXG4gKiBnZXRzIGNhbGxlZCBvbiBlYWNoIG5hdmlnYXRpb24gd2l0aCB0aGUgY3VycmVudCByb3V0ZSBhbmQgY2FuIHJldHVybiB2YWx1ZXNcbiAqIGFzeW5jIChvYnNlcnZhYmxlIG9yIHByb21pc2UpLlxuICogYGBgdHlwZXNjcmlwdFxuICogIHsgcHJvdmlkZTogSE9PS19YLCB1c2VGYWN0b3J5OiB7IGdldDogKHJvdXRlKSA9PiBkb1NvbWV0aGluZ0FzeW5jKHJvdXRlKSB9LCBtdWx0aTogdHJ1ZSB9XG4gKiBgYGBcbiAqL1xuZXhwb3J0IHR5cGUgRHluYW1pY0NvbXBvbmVudEV4dGVuc2lvbiA9XG4gIHwgRHluYW1pY0NvbXBvbmVudERlZmluaXRpb25cbiAgfCBEeW5hbWljQ29tcG9uZW50RGVmaW5pdGlvbltdXG4gIHwgRXh0ZW5zaW9uRmFjdG9yeTxEeW5hbWljQ29tcG9uZW50RGVmaW5pdGlvbj47XG5cbi8qKlxuICogQSBob29rIHRvIGFkZCBkeW5hbWljIGNvbXBvbmVudHMgdG8gdGhlIFVJIChlLmcuIHdpZGdldHMpLlxuICogQGRlcHJlY2F0ZWQgQ29uc2lkZXIgdXNpbmcgdGhlIGBob29rQ29tcG9uZW50YCBmdW5jdGlvbiBpbnN0ZWFkLlxuICovXG5leHBvcnQgY29uc3QgSE9PS19DT01QT05FTlRTID0gbmV3IEluamVjdGlvblRva2VuPER5bmFtaWNDb21wb25lbnRFeHRlbnNpb25bXT4oJ0hPT0tfQ09NUE9ORU5UUycpO1xuXG4vKipcbiAqIEEgaG9vayB0byBhZGQgZHluYW1pYyBjb21wb25lbnRzIHRvIHRoZSBVSSAoZS5nLiB3aWRnZXRzKS5cbiAqXG4gKiBZb3UgY2FuIGVpdGhlciBwcm92aWRlIGEgc2luZ2xlIGBEeW5hbWljQ29tcG9uZW50RGVmaW5pdGlvbmAgYXMgcGFyYW1ldGVyOlxuICogYGBgdHlwZXNjcmlwdFxuICogIGhvb2tDb21wb25lbnQoLi4uKVxuICogYGBgXG4gKlxuICogT3IgYW4gYXJyYXkgdG8gZGlyZWN0bHkgcmVnaXN0ZXIgbXVsdGlwbGU6XG4gKiBgYGB0eXBlc2NyaXB0XG4gKiAgaG9va0NvbXBvbmVudChbLi4uXSlcbiAqIGBgYFxuICpcbiAqIE9yIHlvdSBwcm92aWRlIGFuIFNlcnZpY2UgdGhhdCBpbXBsZW1lbnRzIGBFeHRlbnNpb25GYWN0b3J5PER5bmFtaWNDb21wb25lbnREZWZpbml0aW9uPmBcbiAqIGBgYHR5cGVzY3JpcHRcbiAqICBleHBvcnQgY2xhc3MgTXlEeW5hbWljQ29tcG9uZW50RGVmaW5pdGlvbkZhY3RvcnkgaW1wbGVtZW50cyBFeHRlbnNpb25GYWN0b3J5PER5bmFtaWNDb21wb25lbnREZWZpbml0aW9uPiB7Li4ufVxuICogIC4uLlxuICogIGhvb2tDb21wb25lbnQoTXlEeW5hbWljQ29tcG9uZW50RGVmaW5pdGlvbkZhY3RvcnkpXG4gKiBgYGBcbiAqIEEgdHlwZWQgYWx0ZXJuYXRpdmUgdG8gYEhPT0tfQ09NUE9ORU5UU2AuXG4gKiBAcGFyYW0gY29tcG9uZW50cyBUaGUgYER5bmFtaWNDb21wb25lbnREZWZpbml0aW9uYCdzIG9yIGBFeHRlbnNpb25GYWN0b3J5YCB0byBiZSBwcm92aWRlZC5cbiAqIEByZXR1cm5zIEFuIGBQcm92aWRlcmAgdG8gYmUgcHJvdmlkZWQgaW4geW91ciBtb2R1bGUuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBob29rQ29tcG9uZW50KFxuICBjb21wb25lbnRzOiBHZW5lcmljSG9va1R5cGU8RHluYW1pY0NvbXBvbmVudERlZmluaXRpb24+LFxuICBvcHRpb25zPzogUGFydGlhbDxHZW5lcmljSG9va09wdGlvbnM+XG4pIHtcbiAgcmV0dXJuIGhvb2tHZW5lcmljPER5bmFtaWNDb21wb25lbnREZWZpbml0aW9uPihjb21wb25lbnRzLCBIT09LX0NPTVBPTkVOVFMsIG9wdGlvbnMpO1xufVxuXG4vKipcbiAqIEhvb2sgdG8gYWRkIGR5bmFtaWMgd2lkZ2V0IGNvbXBvbmVudHMgdG8gdGhlIFVJLlxuICpcbiAqIFlvdSBjYW4gZWl0aGVyIHByb3ZpZGUgYSBzaW5nbGUgYER5bmFtaWNXaWRnZXREZWZpbml0aW9uYCBhcyBwYXJhbWV0ZXI6XG4gKiBgYGB0eXBlc2NyaXB0XG4gKiAgaG9va1dpZGdldCguLi4pXG4gKiBgYGBcbiAqXG4gKiBPciBhbiBhcnJheSB0byBkaXJlY3RseSByZWdpc3RlciBtdWx0aXBsZTpcbiAqIGBgYHR5cGVzY3JpcHRcbiAqICBob29rV2lkZ2V0KFsuLi5dKVxuICogYGBgXG4gKlxuICogICogT3IgeW91IHByb3ZpZGUgYSBTZXJ2aWNlIHRoYXQgaW1wbGVtZW50cyBgRXh0ZW5zaW9uRmFjdG9yeTxEeW5hbWljV2lkZ2V0RGVmaW5pdGlvbj5gXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiAgZXhwb3J0IGNsYXNzIE15RHluYW1pY1dpZGdldERlZmluaXRpb25GYWN0b3J5IGltcGxlbWVudHMgRXh0ZW5zaW9uRmFjdG9yeTxEeW5hbWljV2lkZ2V0RGVmaW5pdGlvbj4gey4uLn1cbiAqICAuLi5cbiAqICBob29rV2lkZ2V0KE15RHluYW1pY1dpZGdldERlZmluaXRpb25GYWN0b3J5KVxuICogYGBgXG4gKiBBIHdpZGdldCBzcGVjaWZpYyBhbHRlcm5hdGl2ZSB0byBgaG9va0NvbXBvbmVudGAuLlxuICogQHBhcmFtIGNvbXBvbmVudHMgVGhlIGBEeW5hbWljV2lkZ2V0RGVmaW5pdGlvbmAncyBvciBgRXh0ZW5zaW9uRmFjdG9yeWAgdG8gYmUgcHJvdmlkZWQuXG4gKiBAcGFyYW0gb3B0aW9ucyBPcHRpb25zIHRvIGNvbmZpZ3VyZSB0aGUgaG9vay5cbiAqIEByZXR1cm5zIEFuIGBQcm92aWRlcmAgdG8gYmUgcHJvdmlkZWQgaW4geW91ciBtb2R1bGUuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBob29rV2lkZ2V0KFxuICBjb21wb25lbnRzOiBHZW5lcmljSG9va1R5cGU8RHluYW1pY1dpZGdldERlZmluaXRpb24+LFxuICBvcHRpb25zPzogUGFydGlhbDxHZW5lcmljSG9va09wdGlvbnM+XG4pIHtcbiAgcmV0dXJuIGhvb2tDb21wb25lbnQoY29tcG9uZW50cywgb3B0aW9ucyk7XG59XG5cbi8qKlxuICogQSBkeW5hbWljIGNvbXBvbmVudCBjYW4gYmUgZGVmaW5lZCBpbiBhIHRoZSBIT09LX0NPTVBPTkVOVFMgdG8gZGlzcGxheSBhbnkga2luZFxuICogb2YgY29tcG9uZW50IGR5bmFtaWNhbGx5IGp1c3QgYnkgcmVmZXJlbmNpbmcgaXQncyBpZC4gVGhlIG1vc3QgY29tbW9uIHVzZSBjYXNlIGlzIG9uIGRhc2hib2FyZHMsXG4gKiB3aGVyZSB0aGUgYGNvbmZpZ0NvbXBvbmVudGAgaXMgdXNlZCB0byBkZWZpbmUgd2hhdCBpcyBkaXNwbGF5ZWQgb24gdGhlIGBjb21wb25lbnRgXG4gKiBvbiB0aGUgZGFzaGJvYXJkLlxuICpcbiAqIFRvIHVzZSB0aGUgY29tcG9uZW50IHlvdSBjYW4gdXNlIHRoZSBjOHktZHluYW1pYy1jb21wb25lbnQuXG4gKlxuICogYGBgXG4gKiAgIDxjOHktZHluYW1pYy1jb21wb25lbnRcbiAqICAgICBjb21wb25lbnRJZD1cImFuZ3VsYXIud2lkZ2V0LmRlbW9cIlxuICogICAgIFtjb25maWddPVwieyB0ZXh0OiAnSGVsbG8gd29ybGQnIH1cIlxuICogICAgIFttb2RlXT1cImVkaXRDb21wb25lbnQgPyAnY29uZmlnJyA6ICdjb21wb25lbnQnXCJcbiAqICAgPjwvYzh5LWR5bmFtaWMtY29tcG9uZW50PlxuICogICBgYGBcbiAqL1xuZXhwb3J0IHR5cGUgRHluYW1pY0NvbXBvbmVudERlZmluaXRpb24gPSBEeW5hbWljQ29tcG9uZW50RGVmaW5pdGlvbkJhc2UgJiBEeW5hbWljQ29tcG9uZW50cztcblxuZXhwb3J0IHR5cGUgRHluYW1pY1dpZGdldERlZmluaXRpb24gPSBEeW5hbWljV2lkZ2V0RGVmaW5pdGlvbkJhc2UgJiBEeW5hbWljQ29tcG9uZW50cztcblxuZXhwb3J0IGludGVyZmFjZSBEeW5hbWljQ29tcG9uZW50RGVmaW5pdGlvbkJhc2UgZXh0ZW5kcyBEZWZpbml0aW9uQmFzZSB7XG4gIC8qKlxuICAgKiBBZGQgYW55IHJhbmRvbSBkYXRhLCBzcGVjaWFsbHkgdG8gYW5ndWxhci5qcyBkYXNoYm9hcmRzLlxuICAgKiBTaG91bGQgYmUgc2VyaWFsaXphYmxlIHRvIGFsbG93IHRvIHNhdmUgaXQgdG8gdGhlIEFQSS5cbiAgICovXG4gIGRhdGE/OiBhbnk7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRHluYW1pY1dpZGdldERlZmluaXRpb25CYXNlIGV4dGVuZHMgRGVmaW5pdGlvbkJhc2Uge1xuICAvKipcbiAgICogQWRkIGFueSByYW5kb20gZGF0YSwgc3BlY2lhbGx5IHRvIGFuZ3VsYXIuanMgZGFzaGJvYXJkcy5cbiAgICogU2hvdWxkIGJlIHNlcmlhbGl6YWJsZSB0byBhbGxvdyB0byBzYXZlIGl0IHRvIHRoZSBBUEkuXG4gICAqL1xuICBkYXRhPzogV2lkZ2V0RGF0YVR5cGU7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRGVmaW5pdGlvbkJhc2Uge1xuICAvKipcbiAgICogVW5pcXVlIHNlcmlhbGl6YWJsZSBpZFxuICAgKi9cbiAgaWQ6IHN0cmluZztcbiAgLyoqXG4gICAqIFRoZSBsYWJlbCBzaG93biBmb3IgdGhpcyBkeW5hbWljIGNvbXBvbmVudCBvbiBhZGQgd2lkZ2V0c1xuICAgKi9cbiAgbGFiZWw6IHN0cmluZztcbiAgLyoqXG4gICAqIFRoZSBkZXNjcmlwdGlvbiBzaG93biBvbiBhZGQgd2lkZ2V0XG4gICAqL1xuICBkZXNjcmlwdGlvbjogc3RyaW5nO1xuICAvKipcbiAgICogQWRkIGFueSByYW5kb20gZGF0YSwgc3BlY2lhbGx5IHRvIGFuZ3VsYXIuanMgZGFzaGJvYXJkcy5cbiAgICogU2hvdWxkIGJlIHNlYXJpbHphYmxlZCB0byBhbGxvdyB0byBzYXZlIGl0IHRvIHRoZSBBUEkuXG4gICAqL1xuICBkYXRhPzogYW55O1xuICAvKipcbiAgICogQW4gdXJsIHRvIGFuIHByZXZpZXcgaW1hZ2UuXG4gICAqL1xuICBwcmV2aWV3SW1hZ2U/OiBzdHJpbmc7XG4gIC8qKlxuICAgKiBUaGUgaW5qZWN0b3IgdG8gdXNlIHRvIGluamVjdCB0aGlzIGNvbXBvbmVudC4gSWYgdXNlZCBpbiBhIG1vZHVsZSBmZWRlcmF0aW9uXG4gICAqIHBsdWdpbiwgdGhlIGluamVjdG9yIG9mIHRoZSBwbHVnaW4gc2hvdWxkIGJlIHVzZWQuIERlZmF1bHRzIHRvIHRoZSByb290IGluamVjdG9yLlxuICAgKi9cbiAgaW5qZWN0b3I/OiBJbmplY3RvcjtcbiAgLyoqXG4gICAqIEF0dHJpYnV0ZXMgb2YgdGhlIGR5bmFtaWMgY29tcG9uZW50cyBjb25maWd1cmF0aW9uIHRvIGJlIHJlc29sdmVkLlxuICAgKi9cbiAgcmVzb2x2ZT86IHsgW2tleTogc3RyaW5nXTogVHlwZTxEeW5hbWljRGV0YWlsc1Jlc29sdmVyPiB9O1xuICAvKipcbiAgICogRGV0ZXJtaW5lcyBpZiBkeW5hbWljIGNvbXBvbmVudCBvciB3aWRnZXQgaXRzZWxmIHNob3VsZCByZW5kZXIgYWxlcnRzLlxuICAgKi9cbiAgZXJyb3JTdHJhdGVneT86IER5bmFtaWNDb21wb25lbnRFcnJvclN0cmF0ZWd5O1xuICAvKipcbiAgICogT3JkZXJpbmcgb2YgdGhlIGNvbXBvbmVudHNcbiAgICovXG4gIHByaW9yaXR5PzogbnVtYmVyO1xufVxuXG50eXBlIFdpZGdldERpc3BsYXlTZXR0aW5nc0NvcmUgPSB7XG4gIC8qKlxuICAgKiBJZiBlbmFibGVkIHRoZSB3aWRnZXQgaXMgYm91bmQgdG8gdGhlIGdsb2JhbCB0aW1lIGNvbnRleHQuIFlvdSBjYW4gbGlzdGVuIHRvIG5nT25DaGFuZ2VzKCkgY2hhbmdlIGRldGVjdGlvblxuICAgKiB0byByZWFjdCB0byBjaGFuZ2VzIG9uIHRoZSBjb250ZXh0LiBXaGVuIGEgbW9yZSBkZXRhaWxlZCBjb25maWd1cmF0aW9uIGlzIG5lZWRlZCwgdXNlIHRoZSA8Yzh5LXdpZGdldC10aW1lLWNvbnRleHQ+XG4gICAqIGNvbXBvbmVudCBpbnN0ZWFkLlxuICAgKi9cbiAgZ2xvYmFsVGltZUNvbnRleHQ/OiBib29sZWFuO1xuICAvKipcbiAgICogSWYgZW5hYmxlZCB0aGUgd2lkZ2V0IGlzIGJvdW5kIHRvIHRoZSBnbG9iYWwgcmVhbHRpbWUgY29udGV4dC4gWW91IGNhbiBsaXN0ZW4gdG8gbmdPbkNoYW5nZXMoKSBjaGFuZ2UgZGV0ZWN0aW9uXG4gICAqIHRvIHJlYWN0IHRvIGNoYW5nZXMgb24gdGhlIGNvbnRleHQuXG4gICAqL1xuICBnbG9iYWxSZWFsdGltZUNvbnRleHQ/OiBib29sZWFuO1xuICAvKipcbiAgICogSWYgZW5hYmxlZCB0aGUgd2lkZ2V0IGlzIGJvdW5kIHRvIHRoZSBnbG9iYWwgYWdncmVnYXRpb24gY29udGV4dC4gWW91IGNhbiBsaXN0ZW4gdG8gbmdPbkNoYW5nZXMoKSBjaGFuZ2UgZGV0ZWN0aW9uXG4gICAqIHRvIHJlYWN0IHRvIGNoYW5nZXMgb24gdGhlIGNvbnRleHQuXG4gICAqL1xuICBnbG9iYWxBZ2dyZWdhdGlvbkNvbnRleHQ/OiBib29sZWFuO1xufTtcblxuZXhwb3J0IGludGVyZmFjZSBXaWRnZXREYXRhVHlwZSB7XG4gIC8qKlxuICAgKiBTZXR0aW5ncyB0aGF0IGRlZmluZSB0aGUgY29udGV4dCB0byB3aGljaCB0aGUgd2lkZ2V0IGlzIGJvdW5kLlxuICAgKiBFLmcuIGdsb2JhbCB0aW1lIGNvbnRleHQsIGdsb2JhbCByZWFsdGltZSBjb250ZXh0LCBnbG9iYWwgYWdncmVnYXRpb24gY29udGV4dC5cbiAgICovXG4gIGRpc3BsYXlTZXR0aW5ncz86IFdpZGdldERpc3BsYXlTZXR0aW5nc0NvcmU7XG4gIC8qKlxuICAgKiBTZXR0aW5ncyB0aGF0IGFyZSB1c2VkIHRvIGNvbmZpZ3VyZSB0aGUgd2lkZ2V0LlxuICAgKiBUaGV5IGFyZSBzdGF0aWMgYW5kIHdpbGwgbm90IGJlIHNhdmVkLlxuICAgKi9cbiAgc2V0dGluZ3M/OiBXaWRnZXRTZXR0aW5ncztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBXaWRnZXRTZXR0aW5ncyB7XG4gIC8qKlxuICAgKiBBdm9pZHMgdG8gc2hvdyB0aGUgd2lkZ2V0IGluIHRoZSBcImFkZCB3aWRnZXRcIiBtb2RhbFxuICAgKi9cbiAgbm9OZXdXaWRnZXRzPzogYm9vbGVhbjtcbiAgdXBncmFkZT86IGJvb2xlYW47XG4gIHdpZGdldERlZmF1bHRzPzoge1xuICAgIF93aWR0aD86IG51bWJlcjtcbiAgICBfaGVpZ2h0PzogbnVtYmVyO1xuICAgIFtrZXk6IHN0cmluZ106IGFueTtcbiAgfTtcbiAgbmcxPzoge1xuICAgIG9wdGlvbnM/OiB7XG4gICAgICAvKipcbiAgICAgICAqIFNldCB0aGlzIHRvIGZhbHNlLCB0byBoaWRlIHRoZSBkZXZpY2UvZ3JvdXAgc2VsZWN0b3JcbiAgICAgICAqIEBkZXByZWNhdGVkOiBUaGlzIGlzIGN1cnJlbnRseSBvbmx5IGltcGxlbWVudGVkIGluIGFuZ3VsYXJqcyBhbmQgd2lsbCBiZSBleHBvcnRlZCB0byBhIHNlcGFyYXRlIGNvbXBvbmVudC5cbiAgICAgICAqL1xuICAgICAgbm9EZXZpY2VUYXJnZXQ/OiBib29sZWFuO1xuICAgICAgLyoqXG4gICAgICAgKiBTZXQgdGhpcyB0byBmYWxzZSB0byBvbmx5IHNlbGVjdCBkZXZpY2VzXG4gICAgICAgKiBAZGVwcmVjYXRlZDogVGhpcyBpcyBjdXJyZW50bHkgb25seSBpbXBsZW1lbnRlZCBpbiBhbmd1bGFyanMgYW5kIHdpbGwgYmUgZXhwb3J0ZWQgdG8gYSBzZXBhcmF0ZSBjb21wb25lbnQuXG4gICAgICAgKi9cbiAgICAgIGdyb3Vwc1NlbGVjdGFibGU/OiBib29sZWFuO1xuICAgICAgW2tleTogc3RyaW5nXTogYW55O1xuICAgIH07XG4gICAgLyoqXG4gICAgICogVGhlIGNvbnRleHQgZnJvbSB0aGUgZGV2aWNlIHNlbGVjdG9yLlxuICAgICAqL1xuICAgIGNvbnRleHQ/OiB7XG4gICAgICBpZD86IHN0cmluZztcbiAgICAgIG5hbWU/OiBzdHJpbmc7XG4gICAgICBba2V5OiBzdHJpbmddOiBhbnk7XG4gICAgfTtcbiAgICBba2V5OiBzdHJpbmddOiBhbnk7XG4gIH07XG4gIC8qKlxuICAgKiBBZGRpdGlvbmFsIHNldHRpbmdzIGZvciB0aGUgd2lkZ2V0LlxuICAgKi9cbiAgW2tleTogc3RyaW5nXTogYW55O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEFuZ3VsYXJKU1dpZGdldFNldHRpbmdzIGV4dGVuZHMgV2lkZ2V0U2V0dGluZ3Mge1xuICAvKipcbiAgICogVGhlIGNvbmZpZyBjb21wb25lbnQgbmFtZS5cbiAgICogQGRlcHJlY2F0ZWQ6IE9ubHkgdXNlZCBmb3IgYW5ndWxhcmpzIHBsdWdpbnMuXG4gICAqL1xuICBjb25maWdDb21wb25lbnQ/OiBzdHJpbmc7XG4gIC8qKlxuICAgKiBUaGUgd2lkZ2V0IGNvbXBvbmVudCBuYW1lLlxuICAgKiBAZGVwcmVjYXRlZDogT25seSB1c2VkIGZvciBhbmd1bGFyanMgcGx1Z2lucy5cbiAgICovXG4gIHdpZGdldENvbXBvbmVudD86IHN0cmluZztcbiAgLyoqXG4gICAqIFRoZSBjb25maWcgdGVtcGxhdGUgVVJMIGZvciBsZWdhY3kgcGx1Z2lucy5cbiAgICogQGRlcHJlY2F0ZWQ6IE9ubHkgdXNlZCBmb3IgYW5ndWxhcmpzIHBsdWdpbnMuXG4gICAqL1xuICBjb25maWdUZW1wbGF0ZVVybD86IHN0cmluZztcbiAgLyoqXG4gICAqIFRyYW5zZm9ybXMgd2lkZ2V0J3MgY29uZmlnIGJ5IGV4ZWN1dGluZyB0cmFuc2Zvcm0gZnVuY3Rpb24uXG4gICAqIFRoZSB0cmFuc2Zvcm0gZnVuY3Rpb24gY2FuIHRha2UgaW5qZWN0YWJsZSBhcmd1bWVudHNcbiAgICogQGRlcHJlY2F0ZWQ6IE9ubHkgdXNlZCBmb3IgYW5ndWxhcmpzIHBsdWdpbnMuXG4gICAqL1xuICB0cmFuc2Zvcm1Db25maWdXaXRoQ29udGV4dD86ICgpID0+IHZvaWQ7XG4gIC8qKlxuICAgKiBBdm9pZHMgdG8gc2hvdyB0aGUgd2lkZ2V0IGluIHRoZSBcImFkZCB3aWRnZXRcIiBtb2RhbFxuICAgKi9cbn1cblxuZXhwb3J0IHR5cGUgRHluYW1pY0NvbXBvbmVudHMgPSBFYWdlckR5bmFtaWNDb21wb25lbnRzIHwgTGF6eUR5bmFtaWNDb21wb25lbnRzO1xuXG5leHBvcnQgaW50ZXJmYWNlIEVhZ2VyRHluYW1pY0NvbXBvbmVudHMge1xuICAvKipcbiAgICogVGhlIGNvbXBvbmVudCB3aGljaCBpcyB1c2VkIHdoZW4gdGhlIGNvbXBvbmVudCBzaG91bGQgYmUgZGlzcGxheWVkIChlLmcuIG9uIGEgZGFzaGJvYXJkKVxuICAgKi9cbiAgY29tcG9uZW50OiBUeXBlPGFueT47XG4gIGxvYWRDb21wb25lbnQ/OiBuZXZlcjtcbiAgLyoqXG4gICAqIFRoZSBjb25maWd1cmF0aW9uIGNvbXBvbmVudCB1c2VkIHdoZW4gYSB3aWRnZXQgaXMgYWRkZWQgb3IgZWRpdGVkLlxuICAgKi9cbiAgY29uZmlnQ29tcG9uZW50PzogVHlwZTxhbnk+O1xuICBsb2FkQ29uZmlnQ29tcG9uZW50PzogbmV2ZXI7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgTGF6eUR5bmFtaWNDb21wb25lbnRzIHtcbiAgLyoqXG4gICAqIEEgZnVuY3Rpb24gcmV0dXJuaW5nIGEgcHJvbWlzZSBvZiB0aGUgY29tcG9uZW50IHdoaWNoIGlzIHVzZWQgd2hlbiB0aGUgY29tcG9uZW50IHNob3VsZCBiZSBkaXNwbGF5ZWQgKGUuZy4gb24gYSBkYXNoYm9hcmQpXG4gICAqXG4gICAqIEEgc2FtcGxlIGZ1bmN0aW9uIHRvIGJlIHByb3ZpZGVkIGNvdWxkIGxvb2sgbGlrZSB0aGlzOlxuICAgKiBgYGBcbiAgICogYXN5bmMgZnVuY3Rpb24gbG9hZFZpZXdDb21wb25lbnQoKSB7XG4gICAqICBjb25zdCB7IExhenlXaWRnZXRWaWV3Q29tcG9uZW50IH0gPSBhd2FpdCBpbXBvcnQoJy4vbGF6eS13aWRnZXQtdmlldycpO1xuICAgKiAgcmV0dXJuIExhenlXaWRnZXRWaWV3Q29tcG9uZW50O1xuICAgKiB9XG4gICAqIGBgYFxuICAgKi9cbiAgbG9hZENvbXBvbmVudDogKCkgPT4gUHJvbWlzZTxUeXBlPGFueT4+O1xuICBjb21wb25lbnQ/OiBuZXZlcjtcbiAgLyoqXG4gICAqIEEgZnVuY3Rpb24gcmV0dXJuaW5nIGEgcHJvbWlzZSBvZiB0aGUgY29uZmlndXJhdGlvbiBjb21wb25lbnQgdXNlZCB3aGVuIGEgd2lkZ2V0IGlzIGFkZGVkIG9yIGVkaXRlZC5cbiAgICpcbiAgICogQSBzYW1wbGUgZnVuY3Rpb24gdG8gYmUgcHJvdmlkZWQgY291bGQgbG9vayBsaWtlIHRoaXM6XG4gICAqIGBgYFxuICAgKiBhc3luYyBmdW5jdGlvbiBsb2FkQ29uZmlnQ29tcG9uZW50KCkge1xuICAgKiAgY29uc3QgeyBMYXp5V2lkZ2V0Q29uZmlnQ29tcG9uZW50IH0gPSBhd2FpdCBpbXBvcnQoJy4vbGF6eS13aWRnZXQtY29uZmlnJyk7XG4gICAqICByZXR1cm4gTGF6eVdpZGdldENvbmZpZ0NvbXBvbmVudDtcbiAgICogfVxuICAgKiBgYGBcbiAgICovXG4gIGxvYWRDb25maWdDb21wb25lbnQ/OiAoKSA9PiBQcm9taXNlPFR5cGU8YW55Pj47XG4gIGNvbmZpZ0NvbXBvbmVudD86IG5ldmVyO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNMYXp5RHluYW1pY0NvbXBvbmVudHMoXG4gIGNvbXBvbmVudERlZmluaXRpb246IER5bmFtaWNDb21wb25lbnRzXG4pOiBjb21wb25lbnREZWZpbml0aW9uIGlzIExhenlEeW5hbWljQ29tcG9uZW50cyB7XG4gIHJldHVybiAhIWNvbXBvbmVudERlZmluaXRpb24/LmxvYWRDb21wb25lbnQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc0VhZ2VyRHluYW1pY0NvbXBvbmVudHMoXG4gIGNvbXBvbmVudERlZmluaXRpb246IER5bmFtaWNDb21wb25lbnRzXG4pOiBjb21wb25lbnREZWZpbml0aW9uIGlzIEVhZ2VyRHluYW1pY0NvbXBvbmVudHMge1xuICByZXR1cm4gISFjb21wb25lbnREZWZpbml0aW9uPy5jb21wb25lbnQ7XG59XG5cbmV4cG9ydCBlbnVtIER5bmFtaWNDb21wb25lbnRFcnJvclN0cmF0ZWd5IHtcbiAgLyoqXG4gICAqIFdpbGwgbm90IHJlbmRlci9pbml0aWFsaXplIHRoZSBXaWRnZXQgaW4gY2FzZSBhbiBlcnJvciB3YXMgZGV0ZWN0ZWQuXG4gICAqL1xuICBOT1RfUkVOREVSID0gJ05PVF9SRU5ERVInLFxuICAvKipcbiAgICogV2lsbCBhZGQgYW4gb3ZlcmxheSBvdmVyIHRoZSBXaWRnZXQsIGRpc3BsYXlpbmcgdGhlIGVycm9yIG1lc3NhZ2UuXG4gICAqL1xuICBPVkVSTEFZX0VSUk9SID0gJ09WRVJMQVlfRVJST1InLFxuICAvKipcbiAgICogVGhlIHdpZGdldCBpbXBsZW1lbnRzIGVycm9yIGhhbmRsaW5nIG9uIGl0cyBvd24uXG4gICAqL1xuICBDVVNUT00gPSAnQ1VTVE9NJ1xufVxuXG4vKipcbiAqIFVzZSB0aGlzIGludGVyZmFjZSBvbiBhbnkgY29tcG9uZW50IHRvIGRlZmluZSB0aGUgaW50ZXJjaGFuZ2UgYmV0d2VlblxuICogY29uZmlnIGFuZCBkaXNwbGF5IGNvbXBvbmVudC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBEeW5hbWljQ29tcG9uZW50IHtcbiAgLyoqXG4gICAqIFRoZSBjb25maWd1cmF0aW9uIHdoaWNoIGlzIHNoYXJlZCBiZXR3ZWVuIGNvbmZpZ3VyYXRpb24gY29tcG9uZW50IGFuZCBkaXNwbGF5IGNvbXBvbmVudC5cbiAgICogU2hvdWxkIGJlIHNlYXJpbHphYmxlZCB0byBhbGxvdyB0byBzYXZlIGl0IHRvIHRoZSBBUEkuXG4gICAqL1xuICBjb25maWc6IGFueTtcbiAgLyoqXG4gICAqIEFsZXJ0cyByZWxhdGVkIHRvIHRoZSBkeW5hbWljIGNvbXBvbmVudC5cbiAgICogQ2FuIGVpdGhlciBiZSBzZXQgYnkgdGhlIGR5bmFtaWMgY29tcG9uZW50IGl0IHNlbGYgb3IgdmlhIGl0J3MgcmVzb2x2ZXJzLlxuICAgKi9cbiAgYWxlcnRzPzogRHluYW1pY0NvbXBvbmVudEFsZXJ0QWdncmVnYXRvcjtcbiAgLyoqXG4gICAqIEEgcmVmZXJlbmNlIHRvIHRoZSBuZzFGb3JtIG9uIGFuZ3VsYXJqcyBkYXNoYm9hcmRzIHRvIGRpc2FibGUvZW5hYmxlIHRoZSBzYXZlIGJ1dHRvbi5cbiAgICogQGRlcHJlY2F0ZWQ6IFdpbGwgbm90IHdvcmsgb24gQW5ndWxhci1EYXNoYm9hcmRzICgxLjYuMS4wKS4gVXNlIGBDb250ZXh0U2VydmljZURhc2hib2FyZC5mb3JtRGlzYWJsZWRgIGluc3RlYWQuXG4gICAqL1xuICBuZzFGb3JtUmVmPzogYW55O1xufVxuXG4vKipcbiAqIEFuIGxpZmVjeWNsZSBob29rIHdoaWNoIGlzIGNhbGxlZCBiZWZvcmUgYW4gY29uZmlndXJhdGlvbiBpcyBzYXZlZC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBPbkJlZm9yZVNhdmUge1xuICAvKipcbiAgICogQ2FsbGVkIGJlZm9yZSBhIGNvbmZpZ3VyYXRpb24gb2JqZWN0IGlzIHNhdmVkLiBUaGUgZnVuY3Rpb24gY2FuIGJlIHVzZWQgdG8gbWFuaXB1bGF0ZSB0aGVcbiAgICogcGFzc2VkIGNvbmZpZyBvYmplY3Qgb3IgdG8gY2FuY2VsIHRoZSBzYXZpbmcgKHJldHVybiBmYWxzZSBvciBPYnNlcnZhYmxlPGJvb2xlYW4+KS5cbiAgICovXG4gIG9uQmVmb3JlU2F2ZShjb25maWc/OiBhbnkpOiBib29sZWFuIHwgUHJvbWlzZTxib29sZWFuPiB8IE9ic2VydmFibGU8Ym9vbGVhbj47XG59XG4iXX0=
@@ -1,7 +1,7 @@
1
1
  import { ChangeDetectionStrategy, ChangeDetectorRef, Component, importProvidersFrom } from '@angular/core';
2
2
  import { FieldType, FormlyModule } from '@ngx-formly/core';
3
3
  import { TranslateService } from '@ngx-translate/core';
4
- import { pick, get } from 'lodash-es';
4
+ import { get, pick } from 'lodash-es';
5
5
  import { defer, isObservable, of, pipe } from 'rxjs';
6
6
  import { map, startWith, switchMap, tap } from 'rxjs/operators';
7
7
  import { gettext } from '../../i18n';
@@ -56,7 +56,6 @@ export class TypeaheadTypeComponent extends FieldType {
56
56
  ? this.valueProps
57
57
  : [...this.valueProps, this.labelProp];
58
58
  this.formControl.setValue(pick(opt, pickList));
59
- this.selected = { [this.labelProp]: opt[this.labelProp] };
60
59
  }
61
60
  else {
62
61
  this.formControl.setValue(opt);
@@ -79,4 +78,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.9", ngImpor
79
78
  type: Component,
80
79
  args: [{ selector: 'c8y-typeahead-type', changeDetection: ChangeDetectionStrategy.OnPush, template: "<c8y-typeahead\n [required]=\"to?.required || false\"\n [placeholder]=\"placeholder$ | async\"\n [displayProperty]=\"to?.displayProperty\"\n [selected]=\"selected\"\n [allowFreeEntries]=\"to?.allowFreeEntries || false\"\n [container]=\"to?.container || ''\"\n [disabled]=\"to?.disabled\"\n (onSearch)=\"setPipe($event)\"\n [formControl]=\"formControl\"\n [class.is-invalid]=\"showError\"\n [formlyAttributes]=\"field\">\n <c8y-li *c8yFor=\"let opt of to?.c8yForOptions; loadMore: to?.loadMore || 'auto'; pipe: filterPipe; notFound: notFoundTemplate; loadingTemplate: loading;\"\n (click)=\"selectOption(opt); setPipe('')\"\n class=\"p-l-8 p-r-8 c8y-list__item--link\"\n [attr.role]=\"'menuitem'\">\n <c8y-highlight [text]=\"opt[labelProp]\" [pattern]=\"pattern\"></c8y-highlight>\n </c8y-li>\n <ng-template #notFoundTemplate>\n <c8y-li class=\"bg-level-2 p-8\" *ngIf=\"pattern.length > 0 && !match\">\n <p><strong translate>No match found.</strong></p>\n </c8y-li>\n </ng-template>\n <ng-template #loading>\n <c8y-li class=\"text-center p-t-8 p-relative\">\n <c8y-loading></c8y-loading>\n </c8y-li>\n </ng-template>\n</c8y-typeahead>\n" }]
81
80
  }], ctorParameters: () => [{ type: i0.ChangeDetectorRef }, { type: i1.TranslateService }] });
82
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZWFoZWFkLnR5cGUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vY29yZS9keW5hbWljLWZvcm1zL3R5cGVhaGVhZC90eXBlYWhlYWQudHlwZS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9jb3JlL2R5bmFtaWMtZm9ybXMvdHlwZWFoZWFkL3R5cGVhaGVhZC50eXBlLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCx1QkFBdUIsRUFDdkIsaUJBQWlCLEVBQ2pCLFNBQVMsRUFHVCxtQkFBbUIsRUFDcEIsTUFBTSxlQUFlLENBQUM7QUFFdkIsT0FBTyxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUMzRCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUN2RCxPQUFPLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUN0QyxPQUFPLEVBQUUsS0FBSyxFQUFFLFlBQVksRUFBRSxFQUFFLEVBQUUsSUFBSSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ3JELE9BQU8sRUFBRSxHQUFHLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxHQUFHLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNoRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sWUFBWSxDQUFDOzs7Ozs7Ozs7Ozs7QUFHckMsTUFBTSxDQUFDLE1BQU0sbUJBQW1CLEdBQUcsR0FBeUIsRUFBRSxDQUM1RCxtQkFBbUIsQ0FDakIsWUFBWSxDQUFDLFFBQVEsQ0FBQztJQUNwQixLQUFLLEVBQUUsQ0FBQyxFQUFFLElBQUksRUFBRSxXQUFXLEVBQUUsU0FBUyxFQUFFLHNCQUFzQixFQUFFLENBQUM7Q0FDbEUsQ0FBQyxDQUNILENBQUM7QUFPSixNQUFNLE9BQU8sc0JBQXVCLFNBQVEsU0FBUztJQWtDbkQsWUFDVSxLQUF3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LFFBQVEsQ0FBQyxDQUFDLENBQUM7WUFDL0MsSUFBSSxDQUFDLFFBQVEsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQztRQUM1RCxDQUFDO2FBQU0sQ0FBQztZQUNOLElBQUksQ0FBQyxXQUFXLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ2pDLENBQUM7SUFDSCxDQUFDO0lBRUQsT0FBTyxDQUFDLFNBQWlCO1FBQ3ZCLElBQUksQ0FBQyxPQUFPLEdBQUcsU0FBUyxDQUFDO1FBQ3pCLElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUNwQixHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUU7WUFDVCxPQUFPLElBQUksQ0FBQyxNQUFNLENBQ2hCLEVBQUUsQ0FBQyxFQUFFLENBQ0gsRUFBRSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUM7Z0JBQ2xCLEVBQUUsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsV0FBVyxFQUFFLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUN6RSxDQUFDO1FBQ0osQ0FBQyxDQUFDLEVBQ0YsR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFFO1lBQ1QsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQztZQUM3QixJQUFJLENBQUMsS0FBSyxDQUFDLGFBQWEsRUFBRSxDQUFDO1FBQzdCLENBQUMsQ0FBQyxDQUNILENBQUM7SUFDSixDQUFDOzhHQXRGVSxzQkFBc0I7a0dBQXRCLHNCQUFzQixpRkM3Qm5DLHdyQ0E2QkE7OzJGREFhLHNCQUFzQjtrQkFMbEMsU0FBUzsrQkFDRSxvQkFBb0IsbUJBRWIsdUJBQXVCLENBQUMsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgQ29tcG9uZW50LFxuICBFbnZpcm9ubWVudFByb3ZpZGVycyxcbiAgT25Jbml0LFxuICBpbXBvcnRQcm92aWRlcnNGcm9tXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgSUlkZW50aWZpZWQgfSBmcm9tICdAYzh5L2NsaWVudCc7XG5pbXBvcnQgeyBGaWVsZFR5cGUsIEZvcm1seU1vZHVsZSB9IGZyb20gJ0BuZ3gtZm9ybWx5L2NvcmUnO1xuaW1wb3J0IHsgVHJhbnNsYXRlU2VydmljZSB9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnO1xuaW1wb3J0IHsgcGljaywgZ2V0IH0gZnJvbSAnbG9kYXNoLWVzJztcbmltcG9ydCB7IGRlZmVyLCBpc09ic2VydmFibGUsIG9mLCBwaXBlIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBtYXAsIHN0YXJ0V2l0aCwgc3dpdGNoTWFwLCB0YXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBnZXR0ZXh0IH0gZnJvbSAnLi4vLi4vaTE4bic7XG5pbXBvcnQgeyBGb3JPZkZpbHRlclBpcGUgfSBmcm9tICcuLi8uLi9jb21tb24nO1xuXG5leHBvcnQgY29uc3QgdHlwZWFoZWFkVHlwZUNvbmZpZyA9ICgpOiBFbnZpcm9ubWVudFByb3ZpZGVycyA9PlxuICBpbXBvcnRQcm92aWRlcnNGcm9tKFxuICAgIEZvcm1seU1vZHVsZS5mb3JDaGlsZCh7XG4gICAgICB0eXBlczogW3sgbmFtZTogJ3R5cGVhaGVhZCcsIGNvbXBvbmVudDogVHlwZWFoZWFkVHlwZUNvbXBvbmVudCB9XVxuICAgIH0pXG4gICk7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2M4eS10eXBlYWhlYWQtdHlwZScsXG4gIHRlbXBsYXRlVXJsOiAnLi90eXBlYWhlYWQudHlwZS5jb21wb25lbnQuaHRtbCcsXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoXG59KVxuZXhwb3J0IGNsYXNzIFR5cGVhaGVhZFR5cGVDb21wb25lbnQgZXh0ZW5kcyBGaWVsZFR5cGUgaW1wbGVtZW50cyBPbkluaXQge1xuICBmaWx0ZXJQaXBlOiBGb3JPZkZpbHRlclBpcGU7XG4gIHBhdHRlcm46IHN0cmluZztcbiAgc2VsZWN0ZWQ6IElJZGVudGlmaWVkO1xuICBsYWJlbFByb3A6IHN0cmluZztcbiAgbWF0Y2ggPSBmYWxzZTtcblxuICBwbGFjZWhvbGRlciQgPSBkZWZlcigoKSA9PiBvZih0aGlzLnRvPy5wbGFjZWhvbGRlcikpLnBpcGUoXG4gICAgc3dpdGNoTWFwKHBsYWNlaG9sZGVyID0+XG4gICAgICBwbGFjZWhvbGRlclxuICAgICAgICA/IG9mKHBsYWNlaG9sZGVyKVxuICAgICAgICA6IHRoaXMuZGVmYXVsdFBsYWNlaG9sZGVyJC5waXBlKFxuICAgICAgICAgICAgc3RhcnRXaXRoKHRoaXMudHJhbnNsYXRlU2VydmljZS5pbnN0YW50KGdldHRleHQoJ1N0YXJ0IHR5cGluZyB0byBzZWFyY2gnKSkpXG4gICAgICAgICAgKVxuICAgIClcbiAgKTtcblxuICBkZWZhdWx0UGxhY2Vob2xkZXIkID0gZGVmZXIoKCkgPT5cbiAgICBpc09ic2VydmFibGUodGhpcy50bz8uYzh5Rm9yT3B0aW9ucykgPyB0aGlzLnRvPy5jOHlGb3JPcHRpb25zIDogb2YodGhpcy50bz8uYzh5Rm9yT3B0aW9ucylcbiAgKS5waXBlKFxuICAgIG1hcCgoeyBkYXRhIH0pID0+IGdldChkYXRhWzBdLCB0aGlzLmxhYmVsUHJvcCB8fCAnbmFtZScpKSxcbiAgICBtYXAoZXhhbXBsZSA9PiB7XG4gICAgICByZXR1cm4gISFleGFtcGxlXG4gICAgICAgID8gdGhpcy50cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQoXG4gICAgICAgICAgICBnZXR0ZXh0KCdTdGFydCB0eXBpbmcgdG8gc2VhcmNoLCBmb3IgZXhhbXBsZSwge3sgZXhhbXBsZSB9fScpLFxuICAgICAgICAgICAgeyBleGFtcGxlIH1cbiAgICAgICAgICApXG4gICAgICAgIDogdGhpcy50cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQoZ2V0dGV4dCgnTm8gaXRlbXMnKSk7XG4gICAgfSlcbiAgKTtcblxuICBwcml2YXRlIHZhbHVlUHJvcHM6IHN0cmluZ1tdO1xuICBwcml2YXRlIGV4Y2x1ZGVMYWJlbFByb3AgPSBmYWxzZTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIGNkUmVmOiBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICBwcml2YXRlIHRyYW5zbGF0ZVNlcnZpY2U6IFRyYW5zbGF0ZVNlcnZpY2VcbiAgKSB7XG4gICAgc3VwZXIoKTtcbiAgfVxuXG4gIG5nT25Jbml0KCkge1xuICAgIGlmICh0aGlzLnRvKSB7XG4gICAgICBpZiAodGhpcy50by5leGNsdWRlRGlzcGxheVByb3BlcnR5KSB7XG4gICAgICAgIHRoaXMuZXhjbHVkZUxhYmVsUHJvcCA9IHRoaXMudG8uZXhjbHVkZURpc3BsYXlQcm9wZXJ0eTtcbiAgICAgIH1cblxuICAgICAgaWYgKHRoaXMudG8uZGlzcGxheVByb3BlcnR5KSB7XG4gICAgICAgIHRoaXMuc2V0UGlwZSgnJyk7XG4gICAgICAgIHRoaXMubGFiZWxQcm9wID0gdGhpcy50by5kaXNwbGF5UHJvcGVydHk7XG4gICAgICAgIHRoaXMudmFsdWVQcm9wcyA9IHRoaXMudG8udmFsdWVQcm9wZXJ0aWVzO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgICAnVG8gY29ycmVjdGx5IHVzZSB0aGUgdHlwZWFoZWFkIHNlbGVjdCB5b3UgbmVlZCB0byBzcGVjaWZ5IGRpc3BsYXlQcm9wZXJ0eTogc3RyaW5nIHdpdGhpbiB0ZW1wbGF0ZU9wdGlvbnMhJ1xuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHNlbGVjdE9wdGlvbihvcHQpIHtcbiAgICBpZiAodGhpcy52YWx1ZVByb3BzICYmIHRoaXMudmFsdWVQcm9wcy5sZW5ndGggPiAwKSB7XG4gICAgICBjb25zdCBwaWNrTGlzdDogc3RyaW5nW10gPSB0aGlzLmV4Y2x1ZGVMYWJlbFByb3BcbiAgICAgICAgPyB0aGlzLnZhbHVlUHJvcHNcbiAgICAgICAgOiBbLi4udGhpcy52YWx1ZVByb3BzLCB0aGlzLmxhYmVsUHJvcF07XG4gICAgICB0aGlzLmZvcm1Db250cm9sLnNldFZhbHVlKHBpY2sob3B0LCBwaWNrTGlzdCkpO1xuICAgICAgdGhpcy5zZWxlY3RlZCA9IHsgW3RoaXMubGFiZWxQcm9wXTogb3B0W3RoaXMubGFiZWxQcm9wXSB9O1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmZvcm1Db250cm9sLnNldFZhbHVlKG9wdCk7XG4gICAgfVxuICB9XG5cbiAgc2V0UGlwZShmaWx0ZXJTdHI6IHN0cmluZykge1xuICAgIHRoaXMucGF0dGVybiA9IGZpbHRlclN0cjtcbiAgICB0aGlzLmZpbHRlclBpcGUgPSBwaXBlKFxuICAgICAgbWFwKGRhdGEgPT4ge1xuICAgICAgICByZXR1cm4gZGF0YS5maWx0ZXIoXG4gICAgICAgICAgZWwgPT5cbiAgICAgICAgICAgIGVsW3RoaXMubGFiZWxQcm9wXSAmJlxuICAgICAgICAgICAgZWxbdGhpcy5sYWJlbFByb3BdLnRvTG93ZXJDYXNlKCkuaW5kZXhPZihmaWx0ZXJTdHIudG9Mb3dlckNhc2UoKSkgPiAtMVxuICAgICAgICApO1xuICAgICAgfSksXG4gICAgICB0YXAoZGF0YSA9PiB7XG4gICAgICAgIHRoaXMubWF0Y2ggPSBkYXRhLmxlbmd0aCA+IDA7XG4gICAgICAgIHRoaXMuY2RSZWYuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgfSlcbiAgICApO1xuICB9XG59XG4iLCI8Yzh5LXR5cGVhaGVhZFxuICBbcmVxdWlyZWRdPVwidG8/LnJlcXVpcmVkIHx8IGZhbHNlXCJcbiAgW3BsYWNlaG9sZGVyXT1cInBsYWNlaG9sZGVyJCB8IGFzeW5jXCJcbiAgW2Rpc3BsYXlQcm9wZXJ0eV09XCJ0bz8uZGlzcGxheVByb3BlcnR5XCJcbiAgW3NlbGVjdGVkXT1cInNlbGVjdGVkXCJcbiAgW2FsbG93RnJlZUVudHJpZXNdPVwidG8/LmFsbG93RnJlZUVudHJpZXMgfHwgZmFsc2VcIlxuICBbY29udGFpbmVyXT1cInRvPy5jb250YWluZXIgfHwgJydcIlxuICBbZGlzYWJsZWRdPVwidG8/LmRpc2FibGVkXCJcbiAgKG9uU2VhcmNoKT1cInNldFBpcGUoJGV2ZW50KVwiXG4gIFtmb3JtQ29udHJvbF09XCJmb3JtQ29udHJvbFwiXG4gIFtjbGFzcy5pcy1pbnZhbGlkXT1cInNob3dFcnJvclwiXG4gIFtmb3JtbHlBdHRyaWJ1dGVzXT1cImZpZWxkXCI+XG4gICAgPGM4eS1saSAqYzh5Rm9yPVwibGV0IG9wdCBvZiB0bz8uYzh5Rm9yT3B0aW9uczsgbG9hZE1vcmU6IHRvPy5sb2FkTW9yZSB8fCAnYXV0byc7IHBpcGU6IGZpbHRlclBpcGU7IG5vdEZvdW5kOiBub3RGb3VuZFRlbXBsYXRlOyBsb2FkaW5nVGVtcGxhdGU6IGxvYWRpbmc7XCJcbiAgICAgICAgICAoY2xpY2spPVwic2VsZWN0T3B0aW9uKG9wdCk7IHNldFBpcGUoJycpXCJcbiAgICAgICAgICBjbGFzcz1cInAtbC04IHAtci04IGM4eS1saXN0X19pdGVtLS1saW5rXCJcbiAgICAgICAgICBbYXR0ci5yb2xlXT1cIidtZW51aXRlbSdcIj5cbiAgICA8Yzh5LWhpZ2hsaWdodCBbdGV4dF09XCJvcHRbbGFiZWxQcm9wXVwiIFtwYXR0ZXJuXT1cInBhdHRlcm5cIj48L2M4eS1oaWdobGlnaHQ+XG4gIDwvYzh5LWxpPlxuICA8bmctdGVtcGxhdGUgI25vdEZvdW5kVGVtcGxhdGU+XG4gICAgPGM4eS1saSBjbGFzcz1cImJnLWxldmVsLTIgcC04XCIgKm5nSWY9XCJwYXR0ZXJuLmxlbmd0aCA+IDAgJiYgIW1hdGNoXCI+XG4gICAgICA8cD48c3Ryb25nIHRyYW5zbGF0ZT5ObyBtYXRjaCBmb3VuZC48L3N0cm9uZz48L3A+XG4gICAgPC9jOHktbGk+XG4gIDwvbmctdGVtcGxhdGU+XG4gIDxuZy10ZW1wbGF0ZSAjbG9hZGluZz5cbiAgICA8Yzh5LWxpIGNsYXNzPVwidGV4dC1jZW50ZXIgcC10LTggcC1yZWxhdGl2ZVwiPlxuICAgICAgPGM4eS1sb2FkaW5nPjwvYzh5LWxvYWRpbmc+XG4gICAgPC9jOHktbGk+XG4gIDwvbmctdGVtcGxhdGU+XG48L2M4eS10eXBlYWhlYWQ+XG4iXX0=
81
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZWFoZWFkLnR5cGUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vY29yZS9keW5hbWljLWZvcm1zL3R5cGVhaGVhZC90eXBlYWhlYWQudHlwZS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9jb3JlL2R5bmFtaWMtZm9ybXMvdHlwZWFoZWFkL3R5cGVhaGVhZC50eXBlLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCx1QkFBdUIsRUFDdkIsaUJBQWlCLEVBQ2pCLFNBQVMsRUFHVCxtQkFBbUIsRUFDcEIsTUFBTSxlQUFlLENBQUM7QUFFdkIsT0FBTyxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUMzRCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUN2RCxPQUFPLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUN0QyxPQUFPLEVBQUUsS0FBSyxFQUFFLFlBQVksRUFBRSxFQUFFLEVBQUUsSUFBSSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ3JELE9BQU8sRUFBRSxHQUFHLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxHQUFHLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUVoRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sWUFBWSxDQUFDOzs7Ozs7Ozs7Ozs7QUFFckMsTUFBTSxDQUFDLE1BQU0sbUJBQW1CLEdBQUcsR0FBeUIsRUFBRSxDQUM1RCxtQkFBbUIsQ0FDakIsWUFBWSxDQUFDLFFBQVEsQ0FBQztJQUNwQixLQUFLLEVBQUUsQ0FBQyxFQUFFLElBQUksRUFBRSxXQUFXLEVBQUUsU0FBUyxFQUFFLHNCQUFzQixFQUFFLENBQUM7Q0FDbEUsQ0FBQyxDQUNILENBQUM7QUFPSixNQUFNLE9BQU8sc0JBQXVCLFNBQVEsU0FBUztJQWtDbkQsWUFDVSxLQUF3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LFFBQVEsQ0FBQyxDQUFDLENBQUM7UUFDakQsQ0FBQzthQUFNLENBQUM7WUFDTixJQUFJLENBQUMsV0FBVyxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUNqQyxDQUFDO0lBQ0gsQ0FBQztJQUVELE9BQU8sQ0FBQyxTQUFpQjtRQUN2QixJQUFJLENBQUMsT0FBTyxHQUFHLFNBQVMsQ0FBQztRQUN6QixJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksQ0FDcEIsR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFFO1lBQ1QsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUNoQixFQUFFLENBQUMsRUFBRSxDQUNILEVBQUUsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDO2dCQUNsQixFQUFFLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLFdBQVcsRUFBRSxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsV0FBVyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FDekUsQ0FBQztRQUNKLENBQUMsQ0FBQyxFQUNGLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRTtZQUNULElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUM7WUFDN0IsSUFBSSxDQUFDLEtBQUssQ0FBQyxhQUFhLEVBQUUsQ0FBQztRQUM3QixDQUFDLENBQUMsQ0FDSCxDQUFDO0lBQ0osQ0FBQzs4R0FyRlUsc0JBQXNCO2tHQUF0QixzQkFBc0IsaUZDN0JuQyx3ckNBNkJBOzsyRkRBYSxzQkFBc0I7a0JBTGxDLFNBQVM7K0JBQ0Usb0JBQW9CLG1CQUViLHVCQUF1QixDQUFDLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gIENvbXBvbmVudCxcbiAgRW52aXJvbm1lbnRQcm92aWRlcnMsXG4gIE9uSW5pdCxcbiAgaW1wb3J0UHJvdmlkZXJzRnJvbVxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IElJZGVudGlmaWVkIH0gZnJvbSAnQGM4eS9jbGllbnQnO1xuaW1wb3J0IHsgRmllbGRUeXBlLCBGb3JtbHlNb2R1bGUgfSBmcm9tICdAbmd4LWZvcm1seS9jb3JlJztcbmltcG9ydCB7IFRyYW5zbGF0ZVNlcnZpY2UgfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJztcbmltcG9ydCB7IGdldCwgcGljayB9IGZyb20gJ2xvZGFzaC1lcyc7XG5pbXBvcnQgeyBkZWZlciwgaXNPYnNlcnZhYmxlLCBvZiwgcGlwZSB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgbWFwLCBzdGFydFdpdGgsIHN3aXRjaE1hcCwgdGFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgRm9yT2ZGaWx0ZXJQaXBlIH0gZnJvbSAnLi4vLi4vY29tbW9uJztcbmltcG9ydCB7IGdldHRleHQgfSBmcm9tICcuLi8uLi9pMThuJztcblxuZXhwb3J0IGNvbnN0IHR5cGVhaGVhZFR5cGVDb25maWcgPSAoKTogRW52aXJvbm1lbnRQcm92aWRlcnMgPT5cbiAgaW1wb3J0UHJvdmlkZXJzRnJvbShcbiAgICBGb3JtbHlNb2R1bGUuZm9yQ2hpbGQoe1xuICAgICAgdHlwZXM6IFt7IG5hbWU6ICd0eXBlYWhlYWQnLCBjb21wb25lbnQ6IFR5cGVhaGVhZFR5cGVDb21wb25lbnQgfV1cbiAgICB9KVxuICApO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdjOHktdHlwZWFoZWFkLXR5cGUnLFxuICB0ZW1wbGF0ZVVybDogJy4vdHlwZWFoZWFkLnR5cGUuY29tcG9uZW50Lmh0bWwnLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaFxufSlcbmV4cG9ydCBjbGFzcyBUeXBlYWhlYWRUeXBlQ29tcG9uZW50IGV4dGVuZHMgRmllbGRUeXBlIGltcGxlbWVudHMgT25Jbml0IHtcbiAgZmlsdGVyUGlwZTogRm9yT2ZGaWx0ZXJQaXBlO1xuICBwYXR0ZXJuOiBzdHJpbmc7XG4gIHNlbGVjdGVkOiBJSWRlbnRpZmllZDtcbiAgbGFiZWxQcm9wOiBzdHJpbmc7XG4gIG1hdGNoID0gZmFsc2U7XG5cbiAgcGxhY2Vob2xkZXIkID0gZGVmZXIoKCkgPT4gb2YodGhpcy50bz8ucGxhY2Vob2xkZXIpKS5waXBlKFxuICAgIHN3aXRjaE1hcChwbGFjZWhvbGRlciA9PlxuICAgICAgcGxhY2Vob2xkZXJcbiAgICAgICAgPyBvZihwbGFjZWhvbGRlcilcbiAgICAgICAgOiB0aGlzLmRlZmF1bHRQbGFjZWhvbGRlciQucGlwZShcbiAgICAgICAgICAgIHN0YXJ0V2l0aCh0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudChnZXR0ZXh0KCdTdGFydCB0eXBpbmcgdG8gc2VhcmNoJykpKVxuICAgICAgICAgIClcbiAgICApXG4gICk7XG5cbiAgZGVmYXVsdFBsYWNlaG9sZGVyJCA9IGRlZmVyKCgpID0+XG4gICAgaXNPYnNlcnZhYmxlKHRoaXMudG8/LmM4eUZvck9wdGlvbnMpID8gdGhpcy50bz8uYzh5Rm9yT3B0aW9ucyA6IG9mKHRoaXMudG8/LmM4eUZvck9wdGlvbnMpXG4gICkucGlwZShcbiAgICBtYXAoKHsgZGF0YSB9KSA9PiBnZXQoZGF0YVswXSwgdGhpcy5sYWJlbFByb3AgfHwgJ25hbWUnKSksXG4gICAgbWFwKGV4YW1wbGUgPT4ge1xuICAgICAgcmV0dXJuICEhZXhhbXBsZVxuICAgICAgICA/IHRoaXMudHJhbnNsYXRlU2VydmljZS5pbnN0YW50KFxuICAgICAgICAgICAgZ2V0dGV4dCgnU3RhcnQgdHlwaW5nIHRvIHNlYXJjaCwgZm9yIGV4YW1wbGUsIHt7IGV4YW1wbGUgfX0nKSxcbiAgICAgICAgICAgIHsgZXhhbXBsZSB9XG4gICAgICAgICAgKVxuICAgICAgICA6IHRoaXMudHJhbnNsYXRlU2VydmljZS5pbnN0YW50KGdldHRleHQoJ05vIGl0ZW1zJykpO1xuICAgIH0pXG4gICk7XG5cbiAgcHJpdmF0ZSB2YWx1ZVByb3BzOiBzdHJpbmdbXTtcbiAgcHJpdmF0ZSBleGNsdWRlTGFiZWxQcm9wID0gZmFsc2U7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBjZFJlZjogQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgcHJpdmF0ZSB0cmFuc2xhdGVTZXJ2aWNlOiBUcmFuc2xhdGVTZXJ2aWNlXG4gICkge1xuICAgIHN1cGVyKCk7XG4gIH1cblxuICBuZ09uSW5pdCgpIHtcbiAgICBpZiAodGhpcy50bykge1xuICAgICAgaWYgKHRoaXMudG8uZXhjbHVkZURpc3BsYXlQcm9wZXJ0eSkge1xuICAgICAgICB0aGlzLmV4Y2x1ZGVMYWJlbFByb3AgPSB0aGlzLnRvLmV4Y2x1ZGVEaXNwbGF5UHJvcGVydHk7XG4gICAgICB9XG5cbiAgICAgIGlmICh0aGlzLnRvLmRpc3BsYXlQcm9wZXJ0eSkge1xuICAgICAgICB0aGlzLnNldFBpcGUoJycpO1xuICAgICAgICB0aGlzLmxhYmVsUHJvcCA9IHRoaXMudG8uZGlzcGxheVByb3BlcnR5O1xuICAgICAgICB0aGlzLnZhbHVlUHJvcHMgPSB0aGlzLnRvLnZhbHVlUHJvcGVydGllcztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgJ1RvIGNvcnJlY3RseSB1c2UgdGhlIHR5cGVhaGVhZCBzZWxlY3QgeW91IG5lZWQgdG8gc3BlY2lmeSBkaXNwbGF5UHJvcGVydHk6IHN0cmluZyB3aXRoaW4gdGVtcGxhdGVPcHRpb25zISdcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBzZWxlY3RPcHRpb24ob3B0KSB7XG4gICAgaWYgKHRoaXMudmFsdWVQcm9wcyAmJiB0aGlzLnZhbHVlUHJvcHMubGVuZ3RoID4gMCkge1xuICAgICAgY29uc3QgcGlja0xpc3Q6IHN0cmluZ1tdID0gdGhpcy5leGNsdWRlTGFiZWxQcm9wXG4gICAgICAgID8gdGhpcy52YWx1ZVByb3BzXG4gICAgICAgIDogWy4uLnRoaXMudmFsdWVQcm9wcywgdGhpcy5sYWJlbFByb3BdO1xuICAgICAgdGhpcy5mb3JtQ29udHJvbC5zZXRWYWx1ZShwaWNrKG9wdCwgcGlja0xpc3QpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5mb3JtQ29udHJvbC5zZXRWYWx1ZShvcHQpO1xuICAgIH1cbiAgfVxuXG4gIHNldFBpcGUoZmlsdGVyU3RyOiBzdHJpbmcpIHtcbiAgICB0aGlzLnBhdHRlcm4gPSBmaWx0ZXJTdHI7XG4gICAgdGhpcy5maWx0ZXJQaXBlID0gcGlwZShcbiAgICAgIG1hcChkYXRhID0+IHtcbiAgICAgICAgcmV0dXJuIGRhdGEuZmlsdGVyKFxuICAgICAgICAgIGVsID0+XG4gICAgICAgICAgICBlbFt0aGlzLmxhYmVsUHJvcF0gJiZcbiAgICAgICAgICAgIGVsW3RoaXMubGFiZWxQcm9wXS50b0xvd2VyQ2FzZSgpLmluZGV4T2YoZmlsdGVyU3RyLnRvTG93ZXJDYXNlKCkpID4gLTFcbiAgICAgICAgKTtcbiAgICAgIH0pLFxuICAgICAgdGFwKGRhdGEgPT4ge1xuICAgICAgICB0aGlzLm1hdGNoID0gZGF0YS5sZW5ndGggPiAwO1xuICAgICAgICB0aGlzLmNkUmVmLmRldGVjdENoYW5nZXMoKTtcbiAgICAgIH0pXG4gICAgKTtcbiAgfVxufVxuIiwiPGM4eS10eXBlYWhlYWRcbiAgW3JlcXVpcmVkXT1cInRvPy5yZXF1aXJlZCB8fCBmYWxzZVwiXG4gIFtwbGFjZWhvbGRlcl09XCJwbGFjZWhvbGRlciQgfCBhc3luY1wiXG4gIFtkaXNwbGF5UHJvcGVydHldPVwidG8/LmRpc3BsYXlQcm9wZXJ0eVwiXG4gIFtzZWxlY3RlZF09XCJzZWxlY3RlZFwiXG4gIFthbGxvd0ZyZWVFbnRyaWVzXT1cInRvPy5hbGxvd0ZyZWVFbnRyaWVzIHx8IGZhbHNlXCJcbiAgW2NvbnRhaW5lcl09XCJ0bz8uY29udGFpbmVyIHx8ICcnXCJcbiAgW2Rpc2FibGVkXT1cInRvPy5kaXNhYmxlZFwiXG4gIChvblNlYXJjaCk9XCJzZXRQaXBlKCRldmVudClcIlxuICBbZm9ybUNvbnRyb2xdPVwiZm9ybUNvbnRyb2xcIlxuICBbY2xhc3MuaXMtaW52YWxpZF09XCJzaG93RXJyb3JcIlxuICBbZm9ybWx5QXR0cmlidXRlc109XCJmaWVsZFwiPlxuICAgIDxjOHktbGkgKmM4eUZvcj1cImxldCBvcHQgb2YgdG8/LmM4eUZvck9wdGlvbnM7IGxvYWRNb3JlOiB0bz8ubG9hZE1vcmUgfHwgJ2F1dG8nOyBwaXBlOiBmaWx0ZXJQaXBlOyBub3RGb3VuZDogbm90Rm91bmRUZW1wbGF0ZTsgbG9hZGluZ1RlbXBsYXRlOiBsb2FkaW5nO1wiXG4gICAgICAgICAgKGNsaWNrKT1cInNlbGVjdE9wdGlvbihvcHQpOyBzZXRQaXBlKCcnKVwiXG4gICAgICAgICAgY2xhc3M9XCJwLWwtOCBwLXItOCBjOHktbGlzdF9faXRlbS0tbGlua1wiXG4gICAgICAgICAgW2F0dHIucm9sZV09XCInbWVudWl0ZW0nXCI+XG4gICAgPGM4eS1oaWdobGlnaHQgW3RleHRdPVwib3B0W2xhYmVsUHJvcF1cIiBbcGF0dGVybl09XCJwYXR0ZXJuXCI+PC9jOHktaGlnaGxpZ2h0PlxuICA8L2M4eS1saT5cbiAgPG5nLXRlbXBsYXRlICNub3RGb3VuZFRlbXBsYXRlPlxuICAgIDxjOHktbGkgY2xhc3M9XCJiZy1sZXZlbC0yIHAtOFwiICpuZ0lmPVwicGF0dGVybi5sZW5ndGggPiAwICYmICFtYXRjaFwiPlxuICAgICAgPHA+PHN0cm9uZyB0cmFuc2xhdGU+Tm8gbWF0Y2ggZm91bmQuPC9zdHJvbmc+PC9wPlxuICAgIDwvYzh5LWxpPlxuICA8L25nLXRlbXBsYXRlPlxuICA8bmctdGVtcGxhdGUgI2xvYWRpbmc+XG4gICAgPGM4eS1saSBjbGFzcz1cInRleHQtY2VudGVyIHAtdC04IHAtcmVsYXRpdmVcIj5cbiAgICAgIDxjOHktbG9hZGluZz48L2M4eS1sb2FkaW5nPlxuICAgIDwvYzh5LWxpPlxuICA8L25nLXRlbXBsYXRlPlxuPC9jOHktdHlwZWFoZWFkPlxuIl19