@c8y/ngx-components 1021.73.8 → 1021.74.1

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.
@@ -1,6 +1,6 @@
1
1
  import { Component } from '@angular/core';
2
2
  import { ActivatedRoute } from '@angular/router';
3
- import { ActionBarItemComponent, AlertService, BuiltInActionType, C8yTranslateDirective, C8yTranslatePipe, DataGridModule, EmptyComponent, EmptyStateComponent, gettext, IconDirective, ModalService, Status, TitleComponent } from '@c8y/ngx-components';
3
+ import { ActionBarItemComponent, AlertService, BuiltInActionType, C8yTranslateDirective, C8yTranslatePipe, ContextRouteService, DataGridModule, EmptyComponent, EmptyStateComponent, gettext, IconDirective, ModalService, Status, TitleComponent } from '@c8y/ngx-components';
4
4
  import { RemoteAccessService } from '@c8y/ngx-components/remote-access/data';
5
5
  import { RemoteAccessConnectButtonComponent } from './remote-access-connect-button/remote-access-connect-button.component';
6
6
  import { BsModalService } from 'ngx-bootstrap/modal';
@@ -14,13 +14,14 @@ import * as i3 from "@c8y/ngx-components";
14
14
  import * as i4 from "ngx-bootstrap/modal";
15
15
  import * as i5 from "@ngx-translate/core";
16
16
  export class RemoteAccessConfigurationListComponent {
17
- constructor(remoteAccess, activatedRoute, modalService, alert, bsModalService, translateService) {
17
+ constructor(remoteAccess, activatedRoute, modalService, alert, bsModalService, translateService, ctx) {
18
18
  this.remoteAccess = remoteAccess;
19
19
  this.activatedRoute = activatedRoute;
20
20
  this.modalService = modalService;
21
21
  this.alert = alert;
22
22
  this.bsModalService = bsModalService;
23
23
  this.translateService = translateService;
24
+ this.ctx = ctx;
24
25
  this.rows = [];
25
26
  this.columns = [
26
27
  new IconDeviceGridColumn({
@@ -113,8 +114,9 @@ export class RemoteAccessConfigurationListComponent {
113
114
  };
114
115
  this.protocolProviders = [];
115
116
  this.gridTitle = gettext('Remote access endpoints');
116
- this.protocolProviders = this.remoteAccess.getProtocolProviders();
117
- this.deviceId = this.activatedRoute.parent.snapshot.params.id;
117
+ this.device = this.ctx.getContextData(this.activatedRoute)?.contextData;
118
+ this.deviceId = this.device?.id;
119
+ this.protocolProviders = this.remoteAccess.getSupportedProtocolProvidersFor(this.device);
118
120
  const connectColum = this.columns.find(c => c.name === 'connect');
119
121
  if (connectColum) {
120
122
  connectColum.target = this.deviceId;
@@ -125,14 +127,17 @@ export class RemoteAccessConfigurationListComponent {
125
127
  }
126
128
  async reload() {
127
129
  const configurations = await this.remoteAccess.listConfigurations(this.deviceId);
128
- const supportedProtocols = this.protocolProviders.map(p => p.protocolName);
129
- this.rows = configurations.filter(c => supportedProtocols.includes(c.protocol));
130
+ const supportedProtocols = this.remoteAccess.getSupportedProtocolProvidersFor(this.device);
131
+ const supportedProtocolsNames = supportedProtocols.map(p => p.protocolName);
132
+ this.rows = configurations.filter(c => supportedProtocolsNames.includes(c.protocol.toUpperCase()));
130
133
  }
131
134
  async addEndpoint() {
132
135
  let provider = null;
133
136
  if (this.protocolProviders.length > 1) {
134
137
  try {
135
- const modalRef = this.bsModalService.show(RemoteAccessPickProtocolModalComponent);
138
+ const modalRef = this.bsModalService.show(RemoteAccessPickProtocolModalComponent, {
139
+ initialState: { protocolProviders: this.protocolProviders }
140
+ });
136
141
  provider = await modalRef.content.result;
137
142
  }
138
143
  catch (e) {
@@ -200,7 +205,7 @@ export class RemoteAccessConfigurationListComponent {
200
205
  return null;
201
206
  }
202
207
  }
203
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: RemoteAccessConfigurationListComponent, deps: [{ token: i1.RemoteAccessService }, { token: i2.ActivatedRoute }, { token: i3.ModalService }, { token: i3.AlertService }, { token: i4.BsModalService }, { token: i5.TranslateService }], target: i0.ɵɵFactoryTarget.Component }); }
208
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: RemoteAccessConfigurationListComponent, deps: [{ token: i1.RemoteAccessService }, { token: i2.ActivatedRoute }, { token: i3.ModalService }, { token: i3.AlertService }, { token: i4.BsModalService }, { token: i5.TranslateService }, { token: i3.ContextRouteService }], target: i0.ɵɵFactoryTarget.Component }); }
204
209
  static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: RemoteAccessConfigurationListComponent, isStandalone: true, selector: "c8y-remote-access-configuration-list", ngImport: i0, template: "<c8y-title translate>Remote access</c8y-title>\n\n<c8y-action-bar-item [placement]=\"'right'\">\n <button\n class=\"btn btn-link\"\n (click)=\"addEndpoint()\"\n [disabled]=\"!protocolProviders?.length\"\n [attr.data-cy]=\"'remoteAccessConfigurationList--add-endpoint'\"\n >\n <i [c8yIcon]=\"'plus-circle'\"></i>\n <span translate>Add endpoint</span>\n </button>\n</c8y-action-bar-item>\n\n<div class=\"content-fullpage d-flex d-col border-top\">\n <c8y-data-grid\n [title]=\"gridTitle\"\n [rows]=\"rows\"\n [columns]=\"columns\"\n [pagination]=\"pagination\"\n (onReload)=\"reload()\"\n [actionControls]=\"actionControls\"\n [displayOptions]=\"displayOptions\"\n >\n <c8y-ui-empty-state\n [icon]=\"'window-restore'\"\n [title]=\"'No endpoints configured.' | translate\"\n [subtitle]=\"'Click below to add your first endpoint.' | translate\"\n [horizontal]=\"false\"\n >\n <button\n class=\"btn btn-default\"\n (click)=\"addEndpoint()\"\n translate\n >\n Add endpoint\n </button>\n </c8y-ui-empty-state>\n </c8y-data-grid>\n</div>\n", dependencies: [{ kind: "ngmodule", type: DataGridModule }, { kind: "component", type: i3.DataGridComponent, selector: "c8y-data-grid", inputs: ["title", "loadMoreItemsLabel", "loadingItemsLabel", "showSearch", "refresh", "columns", "rows", "pagination", "infiniteScroll", "serverSideDataCallback", "selectable", "singleSelection", "selectionPrimaryKey", "displayOptions", "actionControls", "bulkActionControls", "headerActionControls", "searchText", "configureColumnsEnabled", "showCounterWarning", "activeClassName", "expandableRows", "hideReload"], outputs: ["rowMouseOver", "rowMouseLeave", "rowClick", "onConfigChange", "onBeforeFilter", "onBeforeSearch", "onFilter", "itemsSelect", "onReload", "onAddCustomColumn", "onRemoveCustomColumn", "onColumnFilterReset", "onSort", "onPageSizeChange", "onColumnReordered", "onColumnVisibilityChange"] }, { kind: "component", type: TitleComponent, selector: "c8y-title", inputs: ["pageTitleUpdate"] }, { kind: "directive", type: C8yTranslateDirective, selector: "[translate],[ngx-translate]" }, { kind: "component", type: ActionBarItemComponent, selector: "c8y-action-bar-item", inputs: ["placement", "priority", "itemClass", "injector", "groupId", "inGroupPriority"] }, { kind: "directive", type: IconDirective, selector: "[c8yIcon]", inputs: ["c8yIcon"] }, { kind: "component", type: EmptyStateComponent, selector: "c8y-ui-empty-state", inputs: ["icon", "title", "subtitle", "horizontal"] }, { kind: "pipe", type: C8yTranslatePipe, name: "translate" }] }); }
205
210
  }
206
211
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: RemoteAccessConfigurationListComponent, decorators: [{
@@ -214,5 +219,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
214
219
  EmptyStateComponent,
215
220
  C8yTranslatePipe
216
221
  ], template: "<c8y-title translate>Remote access</c8y-title>\n\n<c8y-action-bar-item [placement]=\"'right'\">\n <button\n class=\"btn btn-link\"\n (click)=\"addEndpoint()\"\n [disabled]=\"!protocolProviders?.length\"\n [attr.data-cy]=\"'remoteAccessConfigurationList--add-endpoint'\"\n >\n <i [c8yIcon]=\"'plus-circle'\"></i>\n <span translate>Add endpoint</span>\n </button>\n</c8y-action-bar-item>\n\n<div class=\"content-fullpage d-flex d-col border-top\">\n <c8y-data-grid\n [title]=\"gridTitle\"\n [rows]=\"rows\"\n [columns]=\"columns\"\n [pagination]=\"pagination\"\n (onReload)=\"reload()\"\n [actionControls]=\"actionControls\"\n [displayOptions]=\"displayOptions\"\n >\n <c8y-ui-empty-state\n [icon]=\"'window-restore'\"\n [title]=\"'No endpoints configured.' | translate\"\n [subtitle]=\"'Click below to add your first endpoint.' | translate\"\n [horizontal]=\"false\"\n >\n <button\n class=\"btn btn-default\"\n (click)=\"addEndpoint()\"\n translate\n >\n Add endpoint\n </button>\n </c8y-ui-empty-state>\n </c8y-data-grid>\n</div>\n" }]
217
- }], ctorParameters: () => [{ type: i1.RemoteAccessService }, { type: i2.ActivatedRoute }, { type: i3.ModalService }, { type: i3.AlertService }, { type: i4.BsModalService }, { type: i5.TranslateService }] });
218
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVtb3RlLWFjY2Vzcy1jb25maWd1cmF0aW9uLWxpc3QuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcmVtb3RlLWFjY2Vzcy9jb25maWd1cmF0aW9ucy9yZW1vdGUtYWNjZXNzLWNvbmZpZ3VyYXRpb24tbGlzdC9yZW1vdGUtYWNjZXNzLWNvbmZpZ3VyYXRpb24tbGlzdC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9yZW1vdGUtYWNjZXNzL2NvbmZpZ3VyYXRpb25zL3JlbW90ZS1hY2Nlc3MtY29uZmlndXJhdGlvbi1saXN0L3JlbW90ZS1hY2Nlc3MtY29uZmlndXJhdGlvbi1saXN0LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQVUsTUFBTSxlQUFlLENBQUM7QUFDbEQsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ2pELE9BQU8sRUFDTCxzQkFBc0IsRUFFdEIsWUFBWSxFQUNaLGlCQUFpQixFQUNqQixxQkFBcUIsRUFDckIsZ0JBQWdCLEVBRWhCLGNBQWMsRUFFZCxjQUFjLEVBQ2QsbUJBQW1CLEVBQ25CLE9BQU8sRUFDUCxhQUFhLEVBQ2IsWUFBWSxFQUVaLE1BQU0sRUFDTixjQUFjLEVBQ2YsTUFBTSxxQkFBcUIsQ0FBQztBQUM3QixPQUFPLEVBR0wsbUJBQW1CLEVBQ3BCLE1BQU0sd0NBQXdDLENBQUM7QUFDaEQsT0FBTyxFQUFFLGtDQUFrQyxFQUFFLE1BQU0sdUVBQXVFLENBQUM7QUFDM0gsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ3JELE9BQU8sRUFBRSxzQ0FBc0MsRUFBRSxNQUFNLGtGQUFrRixDQUFDO0FBQzFJLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBQ3ZFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHFCQUFxQixDQUFD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T25Jbml0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBBY3RpdmF0ZWRSb3V0ZSB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQge1xuICBBY3Rpb25CYXJJdGVtQ29tcG9uZW50LFxuICBBY3Rpb25Db250cm9sLFxuICBBbGVydFNlcnZpY2UsXG4gIEJ1aWx0SW5BY3Rpb25UeXBlLFxuICBDOHlUcmFuc2xhdGVEaXJlY3RpdmUsXG4gIEM4eVRyYW5zbGF0ZVBpcGUsXG4gIENvbHVtbixcbiAgRGF0YUdyaWRNb2R1bGUsXG4gIERpc3BsYXlPcHRpb25zLFxuICBFbXB0eUNvbXBvbmVudCxcbiAgRW1wdHlTdGF0ZUNvbXBvbmVudCxcbiAgZ2V0dGV4dCxcbiAgSWNvbkRpcmVjdGl2ZSxcbiAgTW9kYWxTZXJ2aWNlLFxuICBQYWdpbmF0aW9uLFxuICBTdGF0dXMsXG4gIFRpdGxlQ29tcG9uZW50XG59IGZyb20gJ0BjOHkvbmd4LWNvbXBvbmVudHMnO1xuaW1wb3J0IHtcbiAgUmVtb3RlQWNjZXNzQ29uZmlndXJhdGlvbixcbiAgUmVtb3RlQWNjZXNzUHJvdG9jb2xQcm92aWRlcixcbiAgUmVtb3RlQWNjZXNzU2VydmljZVxufSBmcm9tICdAYzh5L25neC1jb21wb25lbnRzL3JlbW90ZS1hY2Nlc3MvZGF0YSc7XG5pbXBvcnQgeyBSZW1vdGVBY2Nlc3NDb25uZWN0QnV0dG9uQ29tcG9uZW50IH0gZnJvbSAnLi9yZW1vdGUtYWNjZXNzLWNvbm5lY3QtYnV0dG9uL3JlbW90ZS1hY2Nlc3MtY29ubmVjdC1idXR0b24uY29tcG9uZW50JztcbmltcG9ydCB7IEJzTW9kYWxTZXJ2aWNlIH0gZnJvbSAnbmd4LWJvb3RzdHJhcC9tb2RhbCc7XG5pbXBvcnQgeyBSZW1vdGVBY2Nlc3NQaWNrUHJvdG9jb2xNb2RhbENvbXBvbmVudCB9IGZyb20gJy4uL3JlbW90ZS1hY2Nlc3MtcGljay1wcm90b2NvbC1tb2RhbC9yZW1vdGUtYWNjZXNzLXBpY2stcHJvdG9jb2wtbW9kYWwuY29tcG9uZW50JztcbmltcG9ydCB7IEljb25EZXZpY2VHcmlkQ29sdW1uIH0gZnJvbSAnQGM4eS9uZ3gtY29tcG9uZW50cy9kZXZpY2UtZ3JpZCc7XG5pbXBvcnQgeyBUcmFuc2xhdGVTZXJ2aWNlIH0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2M4eS1yZW1vdGUtYWNjZXNzLWNvbmZpZ3VyYXRpb24tbGlzdCcsXG4gIHRlbXBsYXRlVXJsOiAnLi9yZW1vdGUtYWNjZXNzLWNvbmZpZ3VyYXRpb24tbGlzdC5jb21wb25lbnQuaHRtbCcsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGltcG9ydHM6IFtcbiAgICBEYXRhR3JpZE1vZHVsZSxcbiAgICBUaXRsZUNvbXBvbmVudCxcbiAgICBDOHlUcmFuc2xhdGVEaXJlY3RpdmUsXG4gICAgQWN0aW9uQmFySXRlbUNvbXBvbmVudCxcbiAgICBJY29uRGlyZWN0aXZlLFxuICAgIEVtcHR5U3RhdGVDb21wb25lbnQsXG4gICAgQzh5VHJhbnNsYXRlUGlwZVxuICBdXG59KVxuZXhwb3J0IGNsYXNzIFJlbW90ZUFjY2Vzc0NvbmZpZ3VyYXRpb25MaXN0Q29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcbiAgcm93czogUmVtb3RlQWNjZXNzQ29uZmlndXJhdGlvbltdID0gW107XG4gIGNvbHVtbnM6IENvbHVtbltdID0gW1xuICAgIG5ldyBJY29uRGV2aWNlR3JpZENvbHVtbihcbiAgICAgIHtcbiAgICAgICAgaGVhZGVyQ2VsbFJlbmRlcmVyQ29tcG9uZW50OiBFbXB0eUNvbXBvbmVudFxuICAgICAgfSxcbiAgICAgIGNvbnRleHQgPT4ge1xuICAgICAgICBjb25zdCBwcm92aWRlciA9IHRoaXMucHJvdG9jb2xQcm92aWRlcnMuZmluZChwID0+IHAucHJvdG9jb2xOYW1lID09PSBjb250ZXh0Lml0ZW0ucHJvdG9jb2wpO1xuICAgICAgICByZXR1cm4gcHJvdmlkZXI/LnByb3RvY29sSWNvbiB8fCAnbGFwdG9wJztcbiAgICAgIH1cbiAgICApLFxuICAgIHtcbiAgICAgIG5hbWU6ICduYW1lJyxcbiAgICAgIGhlYWRlcjogZ2V0dGV4dCgnRW5kcG9pbnQnKSxcbiAgICAgIHBhdGg6ICduYW1lJ1xuICAgIH0sXG4gICAge1xuICAgICAgbmFtZTogJ2hvc3RuYW1lJyxcbiAgICAgIGhlYWRlcjogZ2V0dGV4dCgnSG9zdCcpLFxuICAgICAgcGF0aDogJ2hvc3RuYW1lJ1xuICAgIH0sXG4gICAge1xuICAgICAgbmFtZTogJ3BvcnQnLFxuICAgICAgaGVhZGVyOiBnZXR0ZXh0KCdQb3J0JyksXG4gICAgICBwYXRoOiAncG9ydCdcbiAgICB9LFxuICAgIHtcbiAgICAgIG5hbWU6ICdwcm90b2NvbCcsXG4gICAgICBoZWFkZXI6IGdldHRleHQoJ1Byb3RvY29sJyksXG4gICAgICBwYXRoOiAncHJvdG9jb2wnXG4gICAgfSxcbiAgICB7XG4gICAgICBuYW1lOiAnY29ubmVjdCcsXG4gICAgICBoZWFkZXI6IGdldHRleHQoJ0Nvbm5lY3QnKSxcbiAgICAgIGNlbGxSZW5kZXJlckNvbXBvbmVudDogUmVtb3RlQWNjZXNzQ29ubmVjdEJ1dHRvbkNvbXBvbmVudFxuICAgIH1cbiAgXTtcbiAgYWN0aW9uQ29udHJvbHM6IEFjdGlvbkNvbnRyb2xbXSA9IFtcbiAgICB7XG4gICAgICB0eXBlOiBCdWlsdEluQWN0aW9uVHlwZS5FZGl0LFxuICAgICAgY2FsbGJhY2s6IGFzeW5jIChlbnRyeTogUmVtb3RlQWNjZXNzQ29uZmlndXJhdGlvbikgPT4ge1xuICAgICAgICBjb25zdCBwcm92aWRlciA9IHRoaXMuZ2V0UHJvdG9jb2xQcm92aWRlckZvckNvbmZpZ3VyYXRpb24oZW50cnkpO1xuXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgbGV0IHJlc3VsdDogUmVtb3RlQWNjZXNzQ29uZmlndXJhdGlvbjtcbiAgICAgICAgICBpZiAocHJvdmlkZXIuZWRpdEVuZHBvaW50KSB7XG4gICAgICAgICAgICByZXN1bHQgPSBhd2FpdCBwcm92aWRlci5lZGl0RW5kcG9pbnQodGhpcy5kZXZpY2VJZCwgZW50cnkpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXN1bHQgPSBhd2FpdCB0aGlzLmRlZmF1bHRFZGl0RW5kcG9pbnQodGhpcy5kZXZpY2VJZCwgZW50cnkpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmICghcmVzdWx0KSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgdGhpcy5hbGVydC5zdWNjZXNzKGdldHRleHQoJ0VuZHBvaW50IHNhdmVkLicpKTtcbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgIGNvbnNvbGUud2FybihlKTtcbiAgICAgICAgICB0aGlzLmFsZXJ0LmRhbmdlcihnZXR0ZXh0KCdGYWlsZWQgdG8gc2F2ZSBlbmRwb2ludC4nKSwgZSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5yZWxvYWQoKTtcbiAgICAgIH1cbiAgICB9LFxuICAgIHtcbiAgICAgIHR5cGU6IEJ1aWx0SW5BY3Rpb25UeXBlLkRlbGV0ZSxcbiAgICAgIGNhbGxiYWNrOiBhc3luYyAoZW50cnk6IFJlbW90ZUFjY2Vzc0NvbmZpZ3VyYXRpb24pID0+IHtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgdGhpcy5tb2RhbFNlcnZpY2UuY29uZmlybShcbiAgICAgICAgICBnZXR0ZXh0KCdEZWxldGUgZW5kcG9pbnQnKSxcbiAgICAgICAgICB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudChcbiAgICAgICAgICAgIGdldHRleHQoXG4gICAgICAgICAgICAgIGBZb3UgYXJlIGFib3V0IHRvIGRlbGV0ZSBlbmRwb2ludCBcInt7IGVuZHBvaW50TmFtZSB9fVwiLiBEbyB5b3Ugd2FudCB0byBwcm9jZWVkP2BcbiAgICAgICAgICAgICksXG4gICAgICAgICAgICB7IGVuZHBvaW50TmFtZTogZW50cnkubmFtZSB9XG4gICAgICAgICAgKSxcbiAgICAgICAgICBTdGF0dXMuREFOR0VSLFxuICAgICAgICAgIHsgY2FuY2VsOiBnZXR0ZXh0KCdDYW5jZWwnKSwgb2s6IGdldHRleHQoJ0RlbGV0ZScpIH1cbiAgICAgICAgKTtcbiAgICAgICAgaWYgKCFyZXN1bHQpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBwcm92aWRlciA9IHRoaXMuZ2V0UHJvdG9jb2xQcm92aWRlckZvckNvbmZpZ3VyYXRpb24oZW50cnkpO1xuXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgYXdhaXQgcHJvdmlkZXIucmVtb3ZlRW5kcG9pbnQodGhpcy5kZXZpY2VJZCwgZW50cnkpO1xuICAgICAgICAgIHRoaXMuYWxlcnQuc3VjY2VzcyhnZXR0ZXh0KCdFbmRwb2ludCBkZWxldGVkLicpKTtcbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgIGNvbnNvbGUud2FybihlKTtcbiAgICAgICAgICB0aGlzLmFsZXJ0LmRhbmdlcihnZXR0ZXh0KCdGYWlsZWQgdG8gZGVsZXRlIGVuZHBvaW50LicpLCBlKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnJlbG9hZCgpO1xuICAgICAgfVxuICAgIH1cbiAgXTtcbiAgZGV2aWNlSWQ6IHN0cmluZztcbiAgcGFnaW5hdGlvbjogUGFnaW5hdGlvbiA9IHtcbiAgICBwYWdlU2l6ZTogMTAsXG4gICAgY3VycmVudFBhZ2U6IDFcbiAgfTtcbiAgZGlzcGxheU9wdGlvbnM6IERpc3BsYXlPcHRpb25zID0ge1xuICAgIGJvcmRlcmVkOiBmYWxzZSxcbiAgICBzdHJpcGVkOiB0cnVlLFxuICAgIGZpbHRlcjogdHJ1ZSxcbiAgICBncmlkSGVhZGVyOiB0cnVlLFxuICAgIGhvdmVyOiB0cnVlXG4gIH07XG4gIHByb3RvY29sUHJvdmlkZXJzOiBSZW1vdGVBY2Nlc3NQcm90b2NvbFByb3ZpZGVyW10gPSBbXTtcbiAgZ3JpZFRpdGxlID0gZ2V0dGV4dCgnUmVtb3RlIGFjY2VzcyBlbmRwb2ludHMnKTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIHJlbW90ZUFjY2VzczogUmVtb3RlQWNjZXNzU2VydmljZSxcbiAgICBwcml2YXRlIGFjdGl2YXRlZFJvdXRlOiBBY3RpdmF0ZWRSb3V0ZSxcbiAgICBwcml2YXRlIG1vZGFsU2VydmljZTogTW9kYWxTZXJ2aWNlLFxuICAgIHByaXZhdGUgYWxlcnQ6IEFsZXJ0U2VydmljZSxcbiAgICBwcml2YXRlIGJzTW9kYWxTZXJ2aWNlOiBCc01vZGFsU2VydmljZSxcbiAgICBwcml2YXRlIHRyYW5zbGF0ZVNlcnZpY2U6IFRyYW5zbGF0ZVNlcnZpY2VcbiAgKSB7XG4gICAgdGhpcy5wcm90b2NvbFByb3ZpZGVycyA9IHRoaXMucmVtb3RlQWNjZXNzLmdldFByb3RvY29sUHJvdmlkZXJzKCk7XG4gICAgdGhpcy5kZXZpY2VJZCA9IHRoaXMuYWN0aXZhdGVkUm91dGUucGFyZW50LnNuYXBzaG90LnBhcmFtcy5pZDtcbiAgICBjb25zdCBjb25uZWN0Q29sdW0gPSB0aGlzLmNvbHVtbnMuZmluZChjID0+IGMubmFtZSA9PT0gJ2Nvbm5lY3QnKTtcbiAgICBpZiAoY29ubmVjdENvbHVtKSB7XG4gICAgICAoPGFueT5jb25uZWN0Q29sdW0pLnRhcmdldCA9IHRoaXMuZGV2aWNlSWQ7XG4gICAgfVxuICB9XG5cbiAgbmdPbkluaXQoKSB7XG4gICAgdGhpcy5yZWxvYWQoKTtcbiAgfVxuXG4gIGFzeW5jIHJlbG9hZCgpIHtcbiAgICBjb25zdCBjb25maWd1cmF0aW9ucyA9IGF3YWl0IHRoaXMucmVtb3RlQWNjZXNzLmxpc3RDb25maWd1cmF0aW9ucyh0aGlzLmRldmljZUlkKTtcbiAgICBjb25zdCBzdXBwb3J0ZWRQcm90b2NvbHMgPSB0aGlzLnByb3RvY29sUHJvdmlkZXJzLm1hcChwID0+IHAucHJvdG9jb2xOYW1lKTtcbiAgICB0aGlzLnJvd3MgPSBjb25maWd1cmF0aW9ucy5maWx0ZXIoYyA9PiBzdXBwb3J0ZWRQcm90b2NvbHMuaW5jbHVkZXMoYy5wcm90b2NvbCkpO1xuICB9XG5cbiAgYXN5bmMgYWRkRW5kcG9pbnQoKSB7XG4gICAgbGV0IHByb3ZpZGVyOiBSZW1vdGVBY2Nlc3NQcm90b2NvbFByb3ZpZGVyID0gbnVsbDtcbiAgICBpZiAodGhpcy5wcm90b2NvbFByb3ZpZGVycy5sZW5ndGggPiAxKSB7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCBtb2RhbFJlZiA9IHRoaXMuYnNNb2RhbFNlcnZpY2Uuc2hvdyhSZW1vdGVBY2Nlc3NQaWNrUHJvdG9jb2xNb2RhbENvbXBvbmVudCk7XG4gICAgICAgIHByb3ZpZGVyID0gYXdhaXQgbW9kYWxSZWYuY29udGVudC5yZXN1bHQ7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIC8vIG1vZGFsIGNsb3NlZFxuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgfSBlbHNlIGlmICh0aGlzLnByb3RvY29sUHJvdmlkZXJzLmxlbmd0aCA9PT0gMSkge1xuICAgICAgcHJvdmlkZXIgPSB0aGlzLnByb3RvY29sUHJvdmlkZXJzWzBdO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdHJ5IHtcbiAgICAgIGxldCBhZGRNb2RhbFJlc3VsdDogUmVtb3RlQWNjZXNzQ29uZmlndXJhdGlvbiA9IG51bGw7XG4gICAgICBpZiAocHJvdmlkZXIuYWRkRW5kcG9pbnQpIHtcbiAgICAgICAgYWRkTW9kYWxSZXN1bHQgPSBhd2FpdCBwcm92aWRlci5hZGRFbmRwb2ludCh0aGlzLmRldmljZUlkKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGFkZE1vZGFsUmVzdWx0ID0gYXdhaXQgdGhpcy5kZWZhdWx0QWRkRW5kcG9pbnQodGhpcy5kZXZpY2VJZCwgcHJvdmlkZXIpO1xuICAgICAgfVxuICAgICAgaWYgKCFhZGRNb2RhbFJlc3VsdCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICB0aGlzLmFsZXJ0LnN1Y2Nlc3MoZ2V0dGV4dCgnRW5kcG9pbnQgYWRkZWQuJykpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGNvbnNvbGUud2FybihlKTtcbiAgICAgIHRoaXMuYWxlcnQuZGFuZ2VyKGdldHRleHQoJ0ZhaWxlZCB0byBhZGQgZW5kcG9pbnQuJyksIGUpO1xuICAgIH1cbiAgICB0aGlzLnJlbG9hZCgpO1xuICB9XG5cbiAgZ2V0UHJvdG9jb2xQcm92aWRlckZvckNvbmZpZ3VyYXRpb24oY29uZmlndXJhdGlvbjogUmVtb3RlQWNjZXNzQ29uZmlndXJhdGlvbikge1xuICAgIHJldHVybiB0aGlzLnByb3RvY29sUHJvdmlkZXJzLmZpbmQocCA9PiBwLnByb3RvY29sTmFtZSA9PT0gY29uZmlndXJhdGlvbi5wcm90b2NvbCk7XG4gIH1cblxuICBhc3luYyBkZWZhdWx0RWRpdEVuZHBvaW50KGRldmljZUlkOiBzdHJpbmcsIGNvbmZpZ3VyYXRpb246IFJlbW90ZUFjY2Vzc0NvbmZpZ3VyYXRpb24pIHtcbiAgICBjb25zdCBtb2RhbFJlc3VsdCA9IGF3YWl0IHRoaXMub3BlbkJhc2ljRW5kcG9pbnRNb2RhbChjb25maWd1cmF0aW9uKTtcbiAgICBpZiAoIW1vZGFsUmVzdWx0KSB7XG4gICAgICByZXR1cm4gbW9kYWxSZXN1bHQ7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMucmVtb3RlQWNjZXNzLnVwZGF0ZUNvbmZpZ3VyYXRpb24oZGV2aWNlSWQsIG1vZGFsUmVzdWx0KTtcbiAgfVxuXG4gIGFzeW5jIGRlZmF1bHRBZGRFbmRwb2ludChkZXZpY2VJZDogc3RyaW5nLCBwcm92aWRlcjogUmVtb3RlQWNjZXNzUHJvdG9jb2xQcm92aWRlcikge1xuICAgIGxldCBkZWZhdWx0Q29uZmlnID0geyBwcm90b2NvbDogcHJvdmlkZXIucHJvdG9jb2xOYW1lIH07XG4gICAgaWYgKHByb3ZpZGVyLmdldERlZmF1bHRFbmRwb2ludENvbmZpZ3VyYXRpb24pIHtcbiAgICAgIGNvbnN0IGRlZmF1bHRDb25maWdGcm9tUHJvdmlkZXIgPSBhd2FpdCBwcm92aWRlci5nZXREZWZhdWx0RW5kcG9pbnRDb25maWd1cmF0aW9uKCk7XG4gICAgICBkZWZhdWx0Q29uZmlnID0geyAuLi5kZWZhdWx0Q29uZmlnLCAuLi5kZWZhdWx0Q29uZmlnRnJvbVByb3ZpZGVyIH07XG4gICAgfVxuICAgIGNvbnN0IG1vZGFsUmVzdWx0ID0gYXdhaXQgdGhpcy5vcGVuQmFzaWNFbmRwb2ludE1vZGFsKGRlZmF1bHRDb25maWcpO1xuICAgIGlmICghbW9kYWxSZXN1bHQpIHtcbiAgICAgIHJldHVybiBtb2RhbFJlc3VsdDtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5yZW1vdGVBY2Nlc3MuYWRkQ29uZmlndXJhdGlvbihkZXZpY2VJZCwgbW9kYWxSZXN1bHQpO1xuICB9XG5cbiAgYXN5bmMgb3BlbkJhc2ljRW5kcG9pbnRNb2RhbChcbiAgICBjdXJyZW50Q29uZmlndXJhdGlvbjogUGFydGlhbDxSZW1vdGVBY2Nlc3NDb25maWd1cmF0aW9uPlxuICApOiBQcm9taXNlPFJlbW90ZUFjY2Vzc0NvbmZpZ3VyYXRpb24gfCBudWxsPiB7XG4gICAgY29uc3QgeyBSZW1vdGVBY2Nlc3NCYXNpY0VuZHBvaW50TW9kYWxDb21wb25lbnQgfSA9IGF3YWl0IGltcG9ydChcbiAgICAgICdAYzh5L25neC1jb21wb25lbnRzL3JlbW90ZS1hY2Nlc3Mvc2hhcmVkJ1xuICAgICk7XG5cbiAgICB0cnkge1xuICAgICAgY29uc3QgbW9kYWxSZWYgPSB0aGlzLmJzTW9kYWxTZXJ2aWNlLnNob3coUmVtb3RlQWNjZXNzQmFzaWNFbmRwb2ludE1vZGFsQ29tcG9uZW50LCB7XG4gICAgICAgIGluaXRpYWxTdGF0ZTogeyBjdXJyZW50VmFsdWU6IGN1cnJlbnRDb25maWd1cmF0aW9uIH1cbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIChhd2FpdCBtb2RhbFJlZi5jb250ZW50LnJlc3VsdCkgYXMgUmVtb3RlQWNjZXNzQ29uZmlndXJhdGlvbjtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICAvLyBtb2RhbCBjbG9zZWRcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgfVxufVxuIiwiPGM4eS10aXRsZSB0cmFuc2xhdGU+UmVtb3RlIGFjY2VzczwvYzh5LXRpdGxlPlxuXG48Yzh5LWFjdGlvbi1iYXItaXRlbSBbcGxhY2VtZW50XT1cIidyaWdodCdcIj5cbiAgPGJ1dHRvblxuICAgIGNsYXNzPVwiYnRuIGJ0bi1saW5rXCJcbiAgICAoY2xpY2spPVwiYWRkRW5kcG9pbnQoKVwiXG4gICAgW2Rpc2FibGVkXT1cIiFwcm90b2NvbFByb3ZpZGVycz8ubGVuZ3RoXCJcbiAgICBbYXR0ci5kYXRhLWN5XT1cIidyZW1vdGVBY2Nlc3NDb25maWd1cmF0aW9uTGlzdC0tYWRkLWVuZHBvaW50J1wiXG4gID5cbiAgICA8aSBbYzh5SWNvbl09XCIncGx1cy1jaXJjbGUnXCI+PC9pPlxuICAgIDxzcGFuIHRyYW5zbGF0ZT5BZGQgZW5kcG9pbnQ8L3NwYW4+XG4gIDwvYnV0dG9uPlxuPC9jOHktYWN0aW9uLWJhci1pdGVtPlxuXG48ZGl2IGNsYXNzPVwiY29udGVudC1mdWxscGFnZSBkLWZsZXggZC1jb2wgYm9yZGVyLXRvcFwiPlxuICA8Yzh5LWRhdGEtZ3JpZFxuICAgIFt0aXRsZV09XCJncmlkVGl0bGVcIlxuICAgIFtyb3dzXT1cInJvd3NcIlxuICAgIFtjb2x1bW5zXT1cImNvbHVtbnNcIlxuICAgIFtwYWdpbmF0aW9uXT1cInBhZ2luYXRpb25cIlxuICAgIChvblJlbG9hZCk9XCJyZWxvYWQoKVwiXG4gICAgW2FjdGlvbkNvbnRyb2xzXT1cImFjdGlvbkNvbnRyb2xzXCJcbiAgICBbZGlzcGxheU9wdGlvbnNdPVwiZGlzcGxheU9wdGlvbnNcIlxuICA+XG4gICAgPGM4eS11aS1lbXB0eS1zdGF0ZVxuICAgICAgW2ljb25dPVwiJ3dpbmRvdy1yZXN0b3JlJ1wiXG4gICAgICBbdGl0bGVdPVwiJ05vIGVuZHBvaW50cyBjb25maWd1cmVkLicgfCB0cmFuc2xhdGVcIlxuICAgICAgW3N1YnRpdGxlXT1cIidDbGljayBiZWxvdyB0byBhZGQgeW91ciBmaXJzdCBlbmRwb2ludC4nIHwgdHJhbnNsYXRlXCJcbiAgICAgIFtob3Jpem9udGFsXT1cImZhbHNlXCJcbiAgICA+XG4gICAgICA8YnV0dG9uXG4gICAgICAgIGNsYXNzPVwiYnRuIGJ0bi1kZWZhdWx0XCJcbiAgICAgICAgKGNsaWNrKT1cImFkZEVuZHBvaW50KClcIlxuICAgICAgICB0cmFuc2xhdGVcbiAgICAgID5cbiAgICAgICAgQWRkIGVuZHBvaW50XG4gICAgICA8L2J1dHRvbj5cbiAgICA8L2M4eS11aS1lbXB0eS1zdGF0ZT5cbiAgPC9jOHktZGF0YS1ncmlkPlxuPC9kaXY+XG4iXX0=
222
+ }], ctorParameters: () => [{ type: i1.RemoteAccessService }, { type: i2.ActivatedRoute }, { type: i3.ModalService }, { type: i3.AlertService }, { type: i4.BsModalService }, { type: i5.TranslateService }, { type: i3.ContextRouteService }] });
223
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVtb3RlLWFjY2Vzcy1jb25maWd1cmF0aW9uLWxpc3QuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcmVtb3RlLWFjY2Vzcy9jb25maWd1cmF0aW9ucy9yZW1vdGUtYWNjZXNzLWNvbmZpZ3VyYXRpb24tbGlzdC9yZW1vdGUtYWNjZXNzLWNvbmZpZ3VyYXRpb24tbGlzdC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9yZW1vdGUtYWNjZXNzL2NvbmZpZ3VyYXRpb25zL3JlbW90ZS1hY2Nlc3MtY29uZmlndXJhdGlvbi1saXN0L3JlbW90ZS1hY2Nlc3MtY29uZmlndXJhdGlvbi1saXN0LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQVUsTUFBTSxlQUFlLENBQUM7QUFDbEQsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ2pELE9BQU8sRUFDTCxzQkFBc0IsRUFFdEIsWUFBWSxFQUNaLGlCQUFpQixFQUNqQixxQkFBcUIsRUFDckIsZ0JBQWdCLEVBRWhCLG1CQUFtQixFQUNuQixjQUFjLEVBRWQsY0FBYyxFQUNkLG1CQUFtQixFQUNuQixPQUFPLEVBQ1AsYUFBYSxFQUNiLFlBQVksRUFFWixNQUFNLEVBQ04sY0FBYyxFQUNmLE1BQU0scUJBQXFCLENBQUM7QUFDN0IsT0FBTyxFQUdMLG1CQUFtQixFQUNwQixNQUFNLHdDQUF3QyxDQUFDO0FBQ2hELE9BQU8sRUFBRSxrQ0FBa0MsRUFBRSxNQUFNLHVFQUF1RSxDQUFDO0FBQzNILE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUNyRCxPQUFPLEVBQUUsc0NBQXNDLEVBQUUsTUFBTSxrRkFBa0YsQ0FBQztBQUMxSSxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUN2RSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFB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OG5DQXdDQSwyQ0RESSxjQUFjLHF6QkFDZCxjQUFjLG1GQUNkLHFCQUFxQix3RUFDckIsc0JBQXNCLDBKQUN0QixhQUFhLDJFQUNiLG1CQUFtQiwrR0FDbkIsZ0JBQWdCOzs0RkFHUCxzQ0FBc0M7a0JBZGxELFNBQVM7K0JBQ0Usc0NBQXNDLGNBRXBDLElBQUksV0FDUDt3QkFDUCxjQUFjO3dCQUNkLGNBQWM7d0JBQ2QscUJBQXFCO3dCQUNyQixzQkFBc0I7d0JBQ3RCLGFBQWE7d0JBQ2IsbUJBQW1CO3dCQUNuQixnQkFBZ0I7cUJBQ2pCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBPbkluaXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEFjdGl2YXRlZFJvdXRlIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCB7XG4gIEFjdGlvbkJhckl0ZW1Db21wb25lbnQsXG4gIEFjdGlvbkNvbnRyb2wsXG4gIEFsZXJ0U2VydmljZSxcbiAgQnVpbHRJbkFjdGlvblR5cGUsXG4gIEM4eVRyYW5zbGF0ZURpcmVjdGl2ZSxcbiAgQzh5VHJhbnNsYXRlUGlwZSxcbiAgQ29sdW1uLFxuICBDb250ZXh0Um91dGVTZXJ2aWNlLFxuICBEYXRhR3JpZE1vZHVsZSxcbiAgRGlzcGxheU9wdGlvbnMsXG4gIEVtcHR5Q29tcG9uZW50LFxuICBFbXB0eVN0YXRlQ29tcG9uZW50LFxuICBnZXR0ZXh0LFxuICBJY29uRGlyZWN0aXZlLFxuICBNb2RhbFNlcnZpY2UsXG4gIFBhZ2luYXRpb24sXG4gIFN0YXR1cyxcbiAgVGl0bGVDb21wb25lbnRcbn0gZnJvbSAnQGM4eS9uZ3gtY29tcG9uZW50cyc7XG5pbXBvcnQge1xuICBSZW1vdGVBY2Nlc3NDb25maWd1cmF0aW9uLFxuICBSZW1vdGVBY2Nlc3NQcm90b2NvbFByb3ZpZGVyLFxuICBSZW1vdGVBY2Nlc3NTZXJ2aWNlXG59IGZyb20gJ0BjOHkvbmd4LWNvbXBvbmVudHMvcmVtb3RlLWFjY2Vzcy9kYXRhJztcbmltcG9ydCB7IFJlbW90ZUFjY2Vzc0Nvbm5lY3RCdXR0b25Db21wb25lbnQgfSBmcm9tICcuL3JlbW90ZS1hY2Nlc3MtY29ubmVjdC1idXR0b24vcmVtb3RlLWFjY2Vzcy1jb25uZWN0LWJ1dHRvbi5jb21wb25lbnQnO1xuaW1wb3J0IHsgQnNNb2RhbFNlcnZpY2UgfSBmcm9tICduZ3gtYm9vdHN0cmFwL21vZGFsJztcbmltcG9ydCB7IFJlbW90ZUFjY2Vzc1BpY2tQcm90b2NvbE1vZGFsQ29tcG9uZW50IH0gZnJvbSAnLi4vcmVtb3RlLWFjY2Vzcy1waWNrLXByb3RvY29sLW1vZGFsL3JlbW90ZS1hY2Nlc3MtcGljay1wcm90b2NvbC1tb2RhbC5jb21wb25lbnQnO1xuaW1wb3J0IHsgSWNvbkRldmljZUdyaWRDb2x1bW4gfSBmcm9tICdAYzh5L25neC1jb21wb25lbnRzL2RldmljZS1ncmlkJztcbmltcG9ydCB7IFRyYW5zbGF0ZVNlcnZpY2UgfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJztcbmltcG9ydCB7IElNYW5hZ2VkT2JqZWN0IH0gZnJvbSAnQGM4eS9jbGllbnQnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdjOHktcmVtb3RlLWFjY2Vzcy1jb25maWd1cmF0aW9uLWxpc3QnLFxuICB0ZW1wbGF0ZVVybDogJy4vcmVtb3RlLWFjY2Vzcy1jb25maWd1cmF0aW9uLWxpc3QuY29tcG9uZW50Lmh0bWwnLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBpbXBvcnRzOiBbXG4gICAgRGF0YUdyaWRNb2R1bGUsXG4gICAgVGl0bGVDb21wb25lbnQsXG4gICAgQzh5VHJhbnNsYXRlRGlyZWN0aXZlLFxuICAgIEFjdGlvbkJhckl0ZW1Db21wb25lbnQsXG4gICAgSWNvbkRpcmVjdGl2ZSxcbiAgICBFbXB0eVN0YXRlQ29tcG9uZW50LFxuICAgIEM4eVRyYW5zbGF0ZVBpcGVcbiAgXVxufSlcbmV4cG9ydCBjbGFzcyBSZW1vdGVBY2Nlc3NDb25maWd1cmF0aW9uTGlzdENvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gIHJvd3M6IFJlbW90ZUFjY2Vzc0NvbmZpZ3VyYXRpb25bXSA9IFtdO1xuICBjb2x1bW5zOiBDb2x1bW5bXSA9IFtcbiAgICBuZXcgSWNvbkRldmljZUdyaWRDb2x1bW4oXG4gICAgICB7XG4gICAgICAgIGhlYWRlckNlbGxSZW5kZXJlckNvbXBvbmVudDogRW1wdHlDb21wb25lbnRcbiAgICAgIH0sXG4gICAgICBjb250ZXh0ID0+IHtcbiAgICAgICAgY29uc3QgcHJvdmlkZXIgPSB0aGlzLnByb3RvY29sUHJvdmlkZXJzLmZpbmQocCA9PiBwLnByb3RvY29sTmFtZSA9PT0gY29udGV4dC5pdGVtLnByb3RvY29sKTtcbiAgICAgICAgcmV0dXJuIHByb3ZpZGVyPy5wcm90b2NvbEljb24gfHwgJ2xhcHRvcCc7XG4gICAgICB9XG4gICAgKSxcbiAgICB7XG4gICAgICBuYW1lOiAnbmFtZScsXG4gICAgICBoZWFkZXI6IGdldHRleHQoJ0VuZHBvaW50JyksXG4gICAgICBwYXRoOiAnbmFtZSdcbiAgICB9LFxuICAgIHtcbiAgICAgIG5hbWU6ICdob3N0bmFtZScsXG4gICAgICBoZWFkZXI6IGdldHRleHQoJ0hvc3QnKSxcbiAgICAgIHBhdGg6ICdob3N0bmFtZSdcbiAgICB9LFxuICAgIHtcbiAgICAgIG5hbWU6ICdwb3J0JyxcbiAgICAgIGhlYWRlcjogZ2V0dGV4dCgnUG9ydCcpLFxuICAgICAgcGF0aDogJ3BvcnQnXG4gICAgfSxcbiAgICB7XG4gICAgICBuYW1lOiAncHJvdG9jb2wnLFxuICAgICAgaGVhZGVyOiBnZXR0ZXh0KCdQcm90b2NvbCcpLFxuICAgICAgcGF0aDogJ3Byb3RvY29sJ1xuICAgIH0sXG4gICAge1xuICAgICAgbmFtZTogJ2Nvbm5lY3QnLFxuICAgICAgaGVhZGVyOiBnZXR0ZXh0KCdDb25uZWN0JyksXG4gICAgICBjZWxsUmVuZGVyZXJDb21wb25lbnQ6IFJlbW90ZUFjY2Vzc0Nvbm5lY3RCdXR0b25Db21wb25lbnRcbiAgICB9XG4gIF07XG4gIGFjdGlvbkNvbnRyb2xzOiBBY3Rpb25Db250cm9sW10gPSBbXG4gICAge1xuICAgICAgdHlwZTogQnVpbHRJbkFjdGlvblR5cGUuRWRpdCxcbiAgICAgIGNhbGxiYWNrOiBhc3luYyAoZW50cnk6IFJlbW90ZUFjY2Vzc0NvbmZpZ3VyYXRpb24pID0+IHtcbiAgICAgICAgY29uc3QgcHJvdmlkZXIgPSB0aGlzLmdldFByb3RvY29sUHJvdmlkZXJGb3JDb25maWd1cmF0aW9uKGVudHJ5KTtcblxuICAgICAgICB0cnkge1xuICAgICAgICAgIGxldCByZXN1bHQ6IFJlbW90ZUFjY2Vzc0NvbmZpZ3VyYXRpb247XG4gICAgICAgICAgaWYgKHByb3ZpZGVyLmVkaXRFbmRwb2ludCkge1xuICAgICAgICAgICAgcmVzdWx0ID0gYXdhaXQgcHJvdmlkZXIuZWRpdEVuZHBvaW50KHRoaXMuZGV2aWNlSWQsIGVudHJ5KTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmVzdWx0ID0gYXdhaXQgdGhpcy5kZWZhdWx0RWRpdEVuZHBvaW50KHRoaXMuZGV2aWNlSWQsIGVudHJ5KTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoIXJlc3VsdCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHRoaXMuYWxlcnQuc3VjY2VzcyhnZXR0ZXh0KCdFbmRwb2ludCBzYXZlZC4nKSk7XG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICBjb25zb2xlLndhcm4oZSk7XG4gICAgICAgICAgdGhpcy5hbGVydC5kYW5nZXIoZ2V0dGV4dCgnRmFpbGVkIHRvIHNhdmUgZW5kcG9pbnQuJyksIGUpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMucmVsb2FkKCk7XG4gICAgICB9XG4gICAgfSxcbiAgICB7XG4gICAgICB0eXBlOiBCdWlsdEluQWN0aW9uVHlwZS5EZWxldGUsXG4gICAgICBjYWxsYmFjazogYXN5bmMgKGVudHJ5OiBSZW1vdGVBY2Nlc3NDb25maWd1cmF0aW9uKSA9PiB7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHRoaXMubW9kYWxTZXJ2aWNlLmNvbmZpcm0oXG4gICAgICAgICAgZ2V0dGV4dCgnRGVsZXRlIGVuZHBvaW50JyksXG4gICAgICAgICAgdGhpcy50cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQoXG4gICAgICAgICAgICBnZXR0ZXh0KFxuICAgICAgICAgICAgICBgWW91IGFyZSBhYm91dCB0byBkZWxldGUgZW5kcG9pbnQgXCJ7eyBlbmRwb2ludE5hbWUgfX1cIi4gRG8geW91IHdhbnQgdG8gcHJvY2VlZD9gXG4gICAgICAgICAgICApLFxuICAgICAgICAgICAgeyBlbmRwb2ludE5hbWU6IGVudHJ5Lm5hbWUgfVxuICAgICAgICAgICksXG4gICAgICAgICAgU3RhdHVzLkRBTkdFUixcbiAgICAgICAgICB7IGNhbmNlbDogZ2V0dGV4dCgnQ2FuY2VsJyksIG9rOiBnZXR0ZXh0KCdEZWxldGUnKSB9XG4gICAgICAgICk7XG4gICAgICAgIGlmICghcmVzdWx0KSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgcHJvdmlkZXIgPSB0aGlzLmdldFByb3RvY29sUHJvdmlkZXJGb3JDb25maWd1cmF0aW9uKGVudHJ5KTtcblxuICAgICAgICB0cnkge1xuICAgICAgICAgIGF3YWl0IHByb3ZpZGVyLnJlbW92ZUVuZHBvaW50KHRoaXMuZGV2aWNlSWQsIGVudHJ5KTtcbiAgICAgICAgICB0aGlzLmFsZXJ0LnN1Y2Nlc3MoZ2V0dGV4dCgnRW5kcG9pbnQgZGVsZXRlZC4nKSk7XG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICBjb25zb2xlLndhcm4oZSk7XG4gICAgICAgICAgdGhpcy5hbGVydC5kYW5nZXIoZ2V0dGV4dCgnRmFpbGVkIHRvIGRlbGV0ZSBlbmRwb2ludC4nKSwgZSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5yZWxvYWQoKTtcbiAgICAgIH1cbiAgICB9XG4gIF07XG4gIGRldmljZUlkOiBzdHJpbmc7XG4gIHBhZ2luYXRpb246IFBhZ2luYXRpb24gPSB7XG4gICAgcGFnZVNpemU6IDEwLFxuICAgIGN1cnJlbnRQYWdlOiAxXG4gIH07XG4gIGRpc3BsYXlPcHRpb25zOiBEaXNwbGF5T3B0aW9ucyA9IHtcbiAgICBib3JkZXJlZDogZmFsc2UsXG4gICAgc3RyaXBlZDogdHJ1ZSxcbiAgICBmaWx0ZXI6IHRydWUsXG4gICAgZ3JpZEhlYWRlcjogdHJ1ZSxcbiAgICBob3ZlcjogdHJ1ZVxuICB9O1xuICBwcm90b2NvbFByb3ZpZGVyczogUmVtb3RlQWNjZXNzUHJvdG9jb2xQcm92aWRlcltdID0gW107XG4gIGdyaWRUaXRsZSA9IGdldHRleHQoJ1JlbW90ZSBhY2Nlc3MgZW5kcG9pbnRzJyk7XG5cbiAgcHJpdmF0ZSBkZXZpY2U6IElNYW5hZ2VkT2JqZWN0O1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgcmVtb3RlQWNjZXNzOiBSZW1vdGVBY2Nlc3NTZXJ2aWNlLFxuICAgIHByaXZhdGUgYWN0aXZhdGVkUm91dGU6IEFjdGl2YXRlZFJvdXRlLFxuICAgIHByaXZhdGUgbW9kYWxTZXJ2aWNlOiBNb2RhbFNlcnZpY2UsXG4gICAgcHJpdmF0ZSBhbGVydDogQWxlcnRTZXJ2aWNlLFxuICAgIHByaXZhdGUgYnNNb2RhbFNlcnZpY2U6IEJzTW9kYWxTZXJ2aWNlLFxuICAgIHByaXZhdGUgdHJhbnNsYXRlU2VydmljZTogVHJhbnNsYXRlU2VydmljZSxcbiAgICBwcml2YXRlIGN0eDogQ29udGV4dFJvdXRlU2VydmljZVxuICApIHtcbiAgICB0aGlzLmRldmljZSA9IHRoaXMuY3R4LmdldENvbnRleHREYXRhKHRoaXMuYWN0aXZhdGVkUm91dGUpPy5jb250ZXh0RGF0YSBhcyBJTWFuYWdlZE9iamVjdDtcbiAgICB0aGlzLmRldmljZUlkID0gdGhpcy5kZXZpY2U/LmlkIGFzIHN0cmluZztcbiAgICB0aGlzLnByb3RvY29sUHJvdmlkZXJzID0gdGhpcy5yZW1vdGVBY2Nlc3MuZ2V0U3VwcG9ydGVkUHJvdG9jb2xQcm92aWRlcnNGb3IodGhpcy5kZXZpY2UpO1xuICAgIGNvbnN0IGNvbm5lY3RDb2x1bSA9IHRoaXMuY29sdW1ucy5maW5kKGMgPT4gYy5uYW1lID09PSAnY29ubmVjdCcpO1xuICAgIGlmIChjb25uZWN0Q29sdW0pIHtcbiAgICAgICg8YW55PmNvbm5lY3RDb2x1bSkudGFyZ2V0ID0gdGhpcy5kZXZpY2VJZDtcbiAgICB9XG4gIH1cblxuICBuZ09uSW5pdCgpIHtcbiAgICB0aGlzLnJlbG9hZCgpO1xuICB9XG5cbiAgYXN5bmMgcmVsb2FkKCkge1xuICAgIGNvbnN0IGNvbmZpZ3VyYXRpb25zID0gYXdhaXQgdGhpcy5yZW1vdGVBY2Nlc3MubGlzdENvbmZpZ3VyYXRpb25zKHRoaXMuZGV2aWNlSWQpO1xuICAgIGNvbnN0IHN1cHBvcnRlZFByb3RvY29scyA9IHRoaXMucmVtb3RlQWNjZXNzLmdldFN1cHBvcnRlZFByb3RvY29sUHJvdmlkZXJzRm9yKHRoaXMuZGV2aWNlKTtcbiAgICBjb25zdCBzdXBwb3J0ZWRQcm90b2NvbHNOYW1lcyA9IHN1cHBvcnRlZFByb3RvY29scy5tYXAocCA9PiBwLnByb3RvY29sTmFtZSk7XG4gICAgdGhpcy5yb3dzID0gY29uZmlndXJhdGlvbnMuZmlsdGVyKGMgPT5cbiAgICAgIHN1cHBvcnRlZFByb3RvY29sc05hbWVzLmluY2x1ZGVzKGMucHJvdG9jb2wudG9VcHBlckNhc2UoKSlcbiAgICApO1xuICB9XG5cbiAgYXN5bmMgYWRkRW5kcG9pbnQoKSB7XG4gICAgbGV0IHByb3ZpZGVyOiBSZW1vdGVBY2Nlc3NQcm90b2NvbFByb3ZpZGVyID0gbnVsbDtcbiAgICBpZiAodGhpcy5wcm90b2NvbFByb3ZpZGVycy5sZW5ndGggPiAxKSB7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCBtb2RhbFJlZiA9IHRoaXMuYnNNb2RhbFNlcnZpY2Uuc2hvdyhSZW1vdGVBY2Nlc3NQaWNrUHJvdG9jb2xNb2RhbENvbXBvbmVudCwge1xuICAgICAgICAgIGluaXRpYWxTdGF0ZTogeyBwcm90b2NvbFByb3ZpZGVyczogdGhpcy5wcm90b2NvbFByb3ZpZGVycyB9XG4gICAgICAgIH0pO1xuICAgICAgICBwcm92aWRlciA9IGF3YWl0IG1vZGFsUmVmLmNvbnRlbnQucmVzdWx0O1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAvLyBtb2RhbCBjbG9zZWRcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAodGhpcy5wcm90b2NvbFByb3ZpZGVycy5sZW5ndGggPT09IDEpIHtcbiAgICAgIHByb3ZpZGVyID0gdGhpcy5wcm90b2NvbFByb3ZpZGVyc1swXTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRyeSB7XG4gICAgICBsZXQgYWRkTW9kYWxSZXN1bHQ6IFJlbW90ZUFjY2Vzc0NvbmZpZ3VyYXRpb24gPSBudWxsO1xuICAgICAgaWYgKHByb3ZpZGVyLmFkZEVuZHBvaW50KSB7XG4gICAgICAgIGFkZE1vZGFsUmVzdWx0ID0gYXdhaXQgcHJvdmlkZXIuYWRkRW5kcG9pbnQodGhpcy5kZXZpY2VJZCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBhZGRNb2RhbFJlc3VsdCA9IGF3YWl0IHRoaXMuZGVmYXVsdEFkZEVuZHBvaW50KHRoaXMuZGV2aWNlSWQsIHByb3ZpZGVyKTtcbiAgICAgIH1cbiAgICAgIGlmICghYWRkTW9kYWxSZXN1bHQpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgdGhpcy5hbGVydC5zdWNjZXNzKGdldHRleHQoJ0VuZHBvaW50IGFkZGVkLicpKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBjb25zb2xlLndhcm4oZSk7XG4gICAgICB0aGlzLmFsZXJ0LmRhbmdlcihnZXR0ZXh0KCdGYWlsZWQgdG8gYWRkIGVuZHBvaW50LicpLCBlKTtcbiAgICB9XG4gICAgdGhpcy5yZWxvYWQoKTtcbiAgfVxuXG4gIGdldFByb3RvY29sUHJvdmlkZXJGb3JDb25maWd1cmF0aW9uKGNvbmZpZ3VyYXRpb246IFJlbW90ZUFjY2Vzc0NvbmZpZ3VyYXRpb24pIHtcbiAgICByZXR1cm4gdGhpcy5wcm90b2NvbFByb3ZpZGVycy5maW5kKHAgPT4gcC5wcm90b2NvbE5hbWUgPT09IGNvbmZpZ3VyYXRpb24ucHJvdG9jb2wpO1xuICB9XG5cbiAgYXN5bmMgZGVmYXVsdEVkaXRFbmRwb2ludChkZXZpY2VJZDogc3RyaW5nLCBjb25maWd1cmF0aW9uOiBSZW1vdGVBY2Nlc3NDb25maWd1cmF0aW9uKSB7XG4gICAgY29uc3QgbW9kYWxSZXN1bHQgPSBhd2FpdCB0aGlzLm9wZW5CYXNpY0VuZHBvaW50TW9kYWwoY29uZmlndXJhdGlvbik7XG4gICAgaWYgKCFtb2RhbFJlc3VsdCkge1xuICAgICAgcmV0dXJuIG1vZGFsUmVzdWx0O1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLnJlbW90ZUFjY2Vzcy51cGRhdGVDb25maWd1cmF0aW9uKGRldmljZUlkLCBtb2RhbFJlc3VsdCk7XG4gIH1cblxuICBhc3luYyBkZWZhdWx0QWRkRW5kcG9pbnQoZGV2aWNlSWQ6IHN0cmluZywgcHJvdmlkZXI6IFJlbW90ZUFjY2Vzc1Byb3RvY29sUHJvdmlkZXIpIHtcbiAgICBsZXQgZGVmYXVsdENvbmZpZyA9IHsgcHJvdG9jb2w6IHByb3ZpZGVyLnByb3RvY29sTmFtZSB9O1xuICAgIGlmIChwcm92aWRlci5nZXREZWZhdWx0RW5kcG9pbnRDb25maWd1cmF0aW9uKSB7XG4gICAgICBjb25zdCBkZWZhdWx0Q29uZmlnRnJvbVByb3ZpZGVyID0gYXdhaXQgcHJvdmlkZXIuZ2V0RGVmYXVsdEVuZHBvaW50Q29uZmlndXJhdGlvbigpO1xuICAgICAgZGVmYXVsdENvbmZpZyA9IHsgLi4uZGVmYXVsdENvbmZpZywgLi4uZGVmYXVsdENvbmZpZ0Zyb21Qcm92aWRlciB9O1xuICAgIH1cbiAgICBjb25zdCBtb2RhbFJlc3VsdCA9IGF3YWl0IHRoaXMub3BlbkJhc2ljRW5kcG9pbnRNb2RhbChkZWZhdWx0Q29uZmlnKTtcbiAgICBpZiAoIW1vZGFsUmVzdWx0KSB7XG4gICAgICByZXR1cm4gbW9kYWxSZXN1bHQ7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMucmVtb3RlQWNjZXNzLmFkZENvbmZpZ3VyYXRpb24oZGV2aWNlSWQsIG1vZGFsUmVzdWx0KTtcbiAgfVxuXG4gIGFzeW5jIG9wZW5CYXNpY0VuZHBvaW50TW9kYWwoXG4gICAgY3VycmVudENvbmZpZ3VyYXRpb246IFBhcnRpYWw8UmVtb3RlQWNjZXNzQ29uZmlndXJhdGlvbj5cbiAgKTogUHJvbWlzZTxSZW1vdGVBY2Nlc3NDb25maWd1cmF0aW9uIHwgbnVsbD4ge1xuICAgIGNvbnN0IHsgUmVtb3RlQWNjZXNzQmFzaWNFbmRwb2ludE1vZGFsQ29tcG9uZW50IH0gPSBhd2FpdCBpbXBvcnQoXG4gICAgICAnQGM4eS9uZ3gtY29tcG9uZW50cy9yZW1vdGUtYWNjZXNzL3NoYXJlZCdcbiAgICApO1xuXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IG1vZGFsUmVmID0gdGhpcy5ic01vZGFsU2VydmljZS5zaG93KFJlbW90ZUFjY2Vzc0Jhc2ljRW5kcG9pbnRNb2RhbENvbXBvbmVudCwge1xuICAgICAgICBpbml0aWFsU3RhdGU6IHsgY3VycmVudFZhbHVlOiBjdXJyZW50Q29uZmlndXJhdGlvbiB9XG4gICAgICB9KTtcbiAgICAgIHJldHVybiAoYXdhaXQgbW9kYWxSZWYuY29udGVudC5yZXN1bHQpIGFzIFJlbW90ZUFjY2Vzc0NvbmZpZ3VyYXRpb247XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgLy8gbW9kYWwgY2xvc2VkXG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gIH1cbn1cbiIsIjxjOHktdGl0bGUgdHJhbnNsYXRlPlJlbW90ZSBhY2Nlc3M8L2M4eS10aXRsZT5cblxuPGM4eS1hY3Rpb24tYmFyLWl0ZW0gW3BsYWNlbWVudF09XCIncmlnaHQnXCI+XG4gIDxidXR0b25cbiAgICBjbGFzcz1cImJ0biBidG4tbGlua1wiXG4gICAgKGNsaWNrKT1cImFkZEVuZHBvaW50KClcIlxuICAgIFtkaXNhYmxlZF09XCIhcHJvdG9jb2xQcm92aWRlcnM/Lmxlbmd0aFwiXG4gICAgW2F0dHIuZGF0YS1jeV09XCIncmVtb3RlQWNjZXNzQ29uZmlndXJhdGlvbkxpc3QtLWFkZC1lbmRwb2ludCdcIlxuICA+XG4gICAgPGkgW2M4eUljb25dPVwiJ3BsdXMtY2lyY2xlJ1wiPjwvaT5cbiAgICA8c3BhbiB0cmFuc2xhdGU+QWRkIGVuZHBvaW50PC9zcGFuPlxuICA8L2J1dHRvbj5cbjwvYzh5LWFjdGlvbi1iYXItaXRlbT5cblxuPGRpdiBjbGFzcz1cImNvbnRlbnQtZnVsbHBhZ2UgZC1mbGV4IGQtY29sIGJvcmRlci10b3BcIj5cbiAgPGM4eS1kYXRhLWdyaWRcbiAgICBbdGl0bGVdPVwiZ3JpZFRpdGxlXCJcbiAgICBbcm93c109XCJyb3dzXCJcbiAgICBbY29sdW1uc109XCJjb2x1bW5zXCJcbiAgICBbcGFnaW5hdGlvbl09XCJwYWdpbmF0aW9uXCJcbiAgICAob25SZWxvYWQpPVwicmVsb2FkKClcIlxuICAgIFthY3Rpb25Db250cm9sc109XCJhY3Rpb25Db250cm9sc1wiXG4gICAgW2Rpc3BsYXlPcHRpb25zXT1cImRpc3BsYXlPcHRpb25zXCJcbiAgPlxuICAgIDxjOHktdWktZW1wdHktc3RhdGVcbiAgICAgIFtpY29uXT1cIid3aW5kb3ctcmVzdG9yZSdcIlxuICAgICAgW3RpdGxlXT1cIidObyBlbmRwb2ludHMgY29uZmlndXJlZC4nIHwgdHJhbnNsYXRlXCJcbiAgICAgIFtzdWJ0aXRsZV09XCInQ2xpY2sgYmVsb3cgdG8gYWRkIHlvdXIgZmlyc3QgZW5kcG9pbnQuJyB8IHRyYW5zbGF0ZVwiXG4gICAgICBbaG9yaXpvbnRhbF09XCJmYWxzZVwiXG4gICAgPlxuICAgICAgPGJ1dHRvblxuICAgICAgICBjbGFzcz1cImJ0biBidG4tZGVmYXVsdFwiXG4gICAgICAgIChjbGljayk9XCJhZGRFbmRwb2ludCgpXCJcbiAgICAgICAgdHJhbnNsYXRlXG4gICAgICA+XG4gICAgICAgIEFkZCBlbmRwb2ludFxuICAgICAgPC9idXR0b24+XG4gICAgPC9jOHktdWktZW1wdHktc3RhdGU+XG4gIDwvYzh5LWRhdGEtZ3JpZD5cbjwvZGl2PlxuIl19
@@ -1,23 +1,20 @@
1
1
  import { Component } from '@angular/core';
2
2
  import { CoreModule, gettext } from '@c8y/ngx-components';
3
- import { RemoteAccessService } from '@c8y/ngx-components/remote-access/data';
4
3
  import { BsModalRef } from 'ngx-bootstrap/modal';
5
4
  import * as i0 from "@angular/core";
6
- import * as i1 from "@c8y/ngx-components/remote-access/data";
7
- import * as i2 from "ngx-bootstrap/modal";
8
- import * as i3 from "@c8y/ngx-components";
9
- import * as i4 from "@angular/common";
5
+ import * as i1 from "ngx-bootstrap/modal";
6
+ import * as i2 from "@c8y/ngx-components";
7
+ import * as i3 from "@angular/common";
10
8
  export class RemoteAccessPickProtocolModalComponent {
11
- constructor(remoteAccess, bsModalRef) {
12
- this.remoteAccess = remoteAccess;
9
+ constructor(bsModalRef) {
13
10
  this.bsModalRef = bsModalRef;
14
11
  this.title = gettext('Select a protocol');
15
12
  this.result = new Promise((resolve, reject) => {
16
13
  this._resolve = resolve;
17
14
  this._reject = reject;
18
15
  });
16
+ // set via initialState
19
17
  this.protocolProviders = [];
20
- this.protocolProviders = this.remoteAccess.getProtocolProviders();
21
18
  }
22
19
  cancel() {
23
20
  this._reject();
@@ -26,11 +23,11 @@ export class RemoteAccessPickProtocolModalComponent {
26
23
  this.bsModalRef.hide();
27
24
  this._resolve(protocol);
28
25
  }
29
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: RemoteAccessPickProtocolModalComponent, deps: [{ token: i1.RemoteAccessService }, { token: i2.BsModalRef }], target: i0.ɵɵFactoryTarget.Component }); }
30
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: RemoteAccessPickProtocolModalComponent, isStandalone: true, selector: "c8y-remote-access-pick-protocol-modal", ngImport: i0, template: "<c8y-modal\n [title]=\"title\"\n [headerClasses]=\"'dialog-header'\"\n (onDismiss)=\"cancel()\"\n [labels]=\"{ cancel: 'Cancel' }\"\n>\n <ng-container c8y-modal-title>\n <span [c8yIcon]=\"'laptop'\"></span>\n </ng-container>\n <div class=\"p-24\">\n <c8y-li *ngFor=\"let provider of protocolProviders\">\n <c8y-li-icon>\n <i [c8yIcon]=\"provider.protocolIcon\"></i>\n </c8y-li-icon>\n <c8y-li-body>\n <div class=\"d-flex j-c-between\">\n <div>\n <p>{{ provider.protocolLabel | translate }}</p>\n <p>\n <small>{{ provider.protocolDescription | translate }}</small>\n </p>\n </div>\n <div>\n <button\n class=\"btn btn-primary\"\n (click)=\"selectProtocol(provider)\"\n [attr.data-cy]=\"'remoteAccessPickProtocolModal--select-' + provider.protocolName\"\n >\n <span translate>Select</span>\n </button>\n </div>\n </div>\n </c8y-li-body>\n </c8y-li>\n </div>\n</c8y-modal>\n", dependencies: [{ kind: "ngmodule", type: CoreModule }, { kind: "directive", type: i3.IconDirective, selector: "[c8yIcon]", inputs: ["c8yIcon"] }, { kind: "pipe", type: i3.C8yTranslatePipe, name: "translate" }, { kind: "directive", type: i3.C8yTranslateDirective, selector: "[translate],[ngx-translate]" }, { kind: "directive", type: i4.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "component", type: i3.ModalComponent, selector: "c8y-modal", inputs: ["disabled", "close", "dismiss", "title", "body", "customFooter", "headerClasses", "labels"], outputs: ["onDismiss", "onClose"] }, { kind: "component", type: i3.ListItemComponent, selector: "c8y-list-item, c8y-li", inputs: ["active", "highlighted", "emptyActions", "dense", "collapsed", "selectable"], outputs: ["collapsedChange"] }, { kind: "component", type: i3.ListItemIconComponent, selector: "c8y-list-item-icon, c8y-li-icon", inputs: ["icon", "status"] }, { kind: "component", type: i3.ListItemBodyComponent, selector: "c8y-list-item-body, c8y-li-body", inputs: ["body"] }] }); }
26
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: RemoteAccessPickProtocolModalComponent, deps: [{ token: i1.BsModalRef }], target: i0.ɵɵFactoryTarget.Component }); }
27
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: RemoteAccessPickProtocolModalComponent, isStandalone: true, selector: "c8y-remote-access-pick-protocol-modal", ngImport: i0, template: "<c8y-modal\n [title]=\"title\"\n [headerClasses]=\"'dialog-header'\"\n (onDismiss)=\"cancel()\"\n [labels]=\"{ cancel: 'Cancel' }\"\n>\n <ng-container c8y-modal-title>\n <span [c8yIcon]=\"'laptop'\"></span>\n </ng-container>\n <div class=\"p-24\">\n <c8y-li *ngFor=\"let provider of protocolProviders\">\n <c8y-li-icon>\n <i [c8yIcon]=\"provider.protocolIcon\"></i>\n </c8y-li-icon>\n <c8y-li-body>\n <div class=\"d-flex j-c-between\">\n <div>\n <p>{{ provider.protocolLabel | translate }}</p>\n <p>\n <small>{{ provider.protocolDescription | translate }}</small>\n </p>\n </div>\n <div>\n <button\n class=\"btn btn-primary\"\n (click)=\"selectProtocol(provider)\"\n [attr.data-cy]=\"'remoteAccessPickProtocolModal--select-' + provider.protocolName\"\n >\n <span translate>Select</span>\n </button>\n </div>\n </div>\n </c8y-li-body>\n </c8y-li>\n </div>\n</c8y-modal>\n", dependencies: [{ kind: "ngmodule", type: CoreModule }, { kind: "directive", type: i2.IconDirective, selector: "[c8yIcon]", inputs: ["c8yIcon"] }, { kind: "pipe", type: i2.C8yTranslatePipe, name: "translate" }, { kind: "directive", type: i2.C8yTranslateDirective, selector: "[translate],[ngx-translate]" }, { kind: "directive", type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "component", type: i2.ModalComponent, selector: "c8y-modal", inputs: ["disabled", "close", "dismiss", "title", "body", "customFooter", "headerClasses", "labels"], outputs: ["onDismiss", "onClose"] }, { kind: "component", type: i2.ListItemComponent, selector: "c8y-list-item, c8y-li", inputs: ["active", "highlighted", "emptyActions", "dense", "collapsed", "selectable"], outputs: ["collapsedChange"] }, { kind: "component", type: i2.ListItemIconComponent, selector: "c8y-list-item-icon, c8y-li-icon", inputs: ["icon", "status"] }, { kind: "component", type: i2.ListItemBodyComponent, selector: "c8y-list-item-body, c8y-li-body", inputs: ["body"] }] }); }
31
28
  }
32
29
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: RemoteAccessPickProtocolModalComponent, decorators: [{
33
30
  type: Component,
34
31
  args: [{ selector: 'c8y-remote-access-pick-protocol-modal', standalone: true, imports: [CoreModule], template: "<c8y-modal\n [title]=\"title\"\n [headerClasses]=\"'dialog-header'\"\n (onDismiss)=\"cancel()\"\n [labels]=\"{ cancel: 'Cancel' }\"\n>\n <ng-container c8y-modal-title>\n <span [c8yIcon]=\"'laptop'\"></span>\n </ng-container>\n <div class=\"p-24\">\n <c8y-li *ngFor=\"let provider of protocolProviders\">\n <c8y-li-icon>\n <i [c8yIcon]=\"provider.protocolIcon\"></i>\n </c8y-li-icon>\n <c8y-li-body>\n <div class=\"d-flex j-c-between\">\n <div>\n <p>{{ provider.protocolLabel | translate }}</p>\n <p>\n <small>{{ provider.protocolDescription | translate }}</small>\n </p>\n </div>\n <div>\n <button\n class=\"btn btn-primary\"\n (click)=\"selectProtocol(provider)\"\n [attr.data-cy]=\"'remoteAccessPickProtocolModal--select-' + provider.protocolName\"\n >\n <span translate>Select</span>\n </button>\n </div>\n </div>\n </c8y-li-body>\n </c8y-li>\n </div>\n</c8y-modal>\n" }]
35
- }], ctorParameters: () => [{ type: i1.RemoteAccessService }, { type: i2.BsModalRef }] });
36
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVtb3RlLWFjY2Vzcy1waWNrLXByb3RvY29sLW1vZGFsLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3JlbW90ZS1hY2Nlc3MvY29uZmlndXJhdGlvbnMvcmVtb3RlLWFjY2Vzcy1waWNrLXByb3RvY29sLW1vZGFsL3JlbW90ZS1hY2Nlc3MtcGljay1wcm90b2NvbC1tb2RhbC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9yZW1vdGUtYWNjZXNzL2NvbmZpZ3VyYXRpb25zL3JlbW90ZS1hY2Nlc3MtcGljay1wcm90b2NvbC1tb2RhbC9yZW1vdGUtYWNjZXNzLXBpY2stcHJvdG9jb2wtbW9kYWwuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMxQyxPQUFPLEVBQUUsVUFBVSxFQUFFLE9BQU8sRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQzFELE9BQU8sRUFFTCxtQkFBbUIsRUFDcEIsTUFBTSx3Q0FBd0MsQ0FBQztBQUNoRCxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0scUJBQXFCLENBQUM7Ozs7OztBQVFqRCxNQUFNLE9BQU8sc0NBQXNDO0lBWWpELFlBQ1UsWUFBaUMsRUFDakMsVUFBc0I7UUFEdEIsaUJBQVksR0FBWixZQUFZLENBQXFCO1FBQ2pDLGVBQVUsR0FBVixVQUFVLENBQVk7UUFiaEMsVUFBSyxHQUFHLE9BQU8sQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDO1FBQ3JDLFdBQU0sR0FBRyxJQUFJLE9BQU8sQ0FBK0IsQ0FBQyxPQUFPLEVBQUUsTUFBTSxFQUFFLEVBQUU7WUFDckUsSUFBSSxDQUFDLFFBQVEsR0FBRyxPQUFPLENBQUM7WUFDeEIsSUFBSSxDQUFDLE9BQU8sR0FBRyxNQUFNLENBQUM7UUFDeEIsQ0FBQyxDQUFDLENBQUM7UUFFSCxzQkFBaUIsR0FBbUMsRUFBRSxDQUFDO1FBU3JELElBQUksQ0FBQyxpQkFBaUIsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLG9CQUFvQixFQUFFLENBQUM7SUFDcEUsQ0FBQztJQUVELE1BQU07UUFDSixJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7SUFDakIsQ0FBQztJQUVELGNBQWMsQ0FBQyxRQUFzQztRQUNuRCxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksRUFBRSxDQUFDO1FBQ3ZCLElBQUksQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDMUIsQ0FBQzsrR0ExQlUsc0NBQXNDO21HQUF0QyxzQ0FBc0MsaUdDZG5ELHlrQ0FvQ0EsMkNEeEJZLFVBQVU7OzRGQUVULHNDQUFzQztrQkFObEQsU0FBUzsrQkFDRSx1Q0FBdUMsY0FFckMsSUFBSSxXQUNQLENBQUMsVUFBVSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDb3JlTW9kdWxlLCBnZXR0ZXh0IH0gZnJvbSAnQGM4eS9uZ3gtY29tcG9uZW50cyc7XG5pbXBvcnQge1xuICBSZW1vdGVBY2Nlc3NQcm90b2NvbFByb3ZpZGVyLFxuICBSZW1vdGVBY2Nlc3NTZXJ2aWNlXG59IGZyb20gJ0BjOHkvbmd4LWNvbXBvbmVudHMvcmVtb3RlLWFjY2Vzcy9kYXRhJztcbmltcG9ydCB7IEJzTW9kYWxSZWYgfSBmcm9tICduZ3gtYm9vdHN0cmFwL21vZGFsJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnYzh5LXJlbW90ZS1hY2Nlc3MtcGljay1wcm90b2NvbC1tb2RhbCcsXG4gIHRlbXBsYXRlVXJsOiAnLi9yZW1vdGUtYWNjZXNzLXBpY2stcHJvdG9jb2wtbW9kYWwuY29tcG9uZW50Lmh0bWwnLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBpbXBvcnRzOiBbQ29yZU1vZHVsZV1cbn0pXG5leHBvcnQgY2xhc3MgUmVtb3RlQWNjZXNzUGlja1Byb3RvY29sTW9kYWxDb21wb25lbnQge1xuICB0aXRsZSA9IGdldHRleHQoJ1NlbGVjdCBhIHByb3RvY29sJyk7XG4gIHJlc3VsdCA9IG5ldyBQcm9taXNlPFJlbW90ZUFjY2Vzc1Byb3RvY29sUHJvdmlkZXI+KChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICB0aGlzLl9yZXNvbHZlID0gcmVzb2x2ZTtcbiAgICB0aGlzLl9yZWplY3QgPSByZWplY3Q7XG4gIH0pO1xuXG4gIHByb3RvY29sUHJvdmlkZXJzOiBSZW1vdGVBY2Nlc3NQcm90b2NvbFByb3ZpZGVyW10gPSBbXTtcblxuICBwcml2YXRlIF9yZXNvbHZlOiAodmFsdWU6IFJlbW90ZUFjY2Vzc1Byb3RvY29sUHJvdmlkZXIpID0+IHZvaWQ7XG4gIHByaXZhdGUgX3JlamVjdDogKHJlYXNvbj86IGFueSkgPT4gdm9pZDtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIHJlbW90ZUFjY2VzczogUmVtb3RlQWNjZXNzU2VydmljZSxcbiAgICBwcml2YXRlIGJzTW9kYWxSZWY6IEJzTW9kYWxSZWZcbiAgKSB7XG4gICAgdGhpcy5wcm90b2NvbFByb3ZpZGVycyA9IHRoaXMucmVtb3RlQWNjZXNzLmdldFByb3RvY29sUHJvdmlkZXJzKCk7XG4gIH1cblxuICBjYW5jZWwoKSB7XG4gICAgdGhpcy5fcmVqZWN0KCk7XG4gIH1cblxuICBzZWxlY3RQcm90b2NvbChwcm90b2NvbDogUmVtb3RlQWNjZXNzUHJvdG9jb2xQcm92aWRlcikge1xuICAgIHRoaXMuYnNNb2RhbFJlZi5oaWRlKCk7XG4gICAgdGhpcy5fcmVzb2x2ZShwcm90b2NvbCk7XG4gIH1cbn1cbiIsIjxjOHktbW9kYWxcbiAgW3RpdGxlXT1cInRpdGxlXCJcbiAgW2hlYWRlckNsYXNzZXNdPVwiJ2RpYWxvZy1oZWFkZXInXCJcbiAgKG9uRGlzbWlzcyk9XCJjYW5jZWwoKVwiXG4gIFtsYWJlbHNdPVwieyBjYW5jZWw6ICdDYW5jZWwnIH1cIlxuPlxuICA8bmctY29udGFpbmVyIGM4eS1tb2RhbC10aXRsZT5cbiAgICA8c3BhbiBbYzh5SWNvbl09XCInbGFwdG9wJ1wiPjwvc3Bhbj5cbiAgPC9uZy1jb250YWluZXI+XG4gIDxkaXYgY2xhc3M9XCJwLTI0XCI+XG4gICAgPGM4eS1saSAqbmdGb3I9XCJsZXQgcHJvdmlkZXIgb2YgcHJvdG9jb2xQcm92aWRlcnNcIj5cbiAgICAgIDxjOHktbGktaWNvbj5cbiAgICAgICAgPGkgW2M4eUljb25dPVwicHJvdmlkZXIucHJvdG9jb2xJY29uXCI+PC9pPlxuICAgICAgPC9jOHktbGktaWNvbj5cbiAgICAgIDxjOHktbGktYm9keT5cbiAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBqLWMtYmV0d2VlblwiPlxuICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICA8cD57eyBwcm92aWRlci5wcm90b2NvbExhYmVsIHwgdHJhbnNsYXRlIH19PC9wPlxuICAgICAgICAgICAgPHA+XG4gICAgICAgICAgICAgIDxzbWFsbD57eyBwcm92aWRlci5wcm90b2NvbERlc2NyaXB0aW9uIHwgdHJhbnNsYXRlIH19PC9zbWFsbD5cbiAgICAgICAgICAgIDwvcD5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICBjbGFzcz1cImJ0biBidG4tcHJpbWFyeVwiXG4gICAgICAgICAgICAgIChjbGljayk9XCJzZWxlY3RQcm90b2NvbChwcm92aWRlcilcIlxuICAgICAgICAgICAgICBbYXR0ci5kYXRhLWN5XT1cIidyZW1vdGVBY2Nlc3NQaWNrUHJvdG9jb2xNb2RhbC0tc2VsZWN0LScgKyBwcm92aWRlci5wcm90b2NvbE5hbWVcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8c3BhbiB0cmFuc2xhdGU+U2VsZWN0PC9zcGFuPlxuICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9jOHktbGktYm9keT5cbiAgICA8L2M4eS1saT5cbiAgPC9kaXY+XG48L2M4eS1tb2RhbD5cbiJdfQ==
32
+ }], ctorParameters: () => [{ type: i1.BsModalRef }] });
33
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVtb3RlLWFjY2Vzcy1waWNrLXByb3RvY29sLW1vZGFsLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3JlbW90ZS1hY2Nlc3MvY29uZmlndXJhdGlvbnMvcmVtb3RlLWFjY2Vzcy1waWNrLXByb3RvY29sLW1vZGFsL3JlbW90ZS1hY2Nlc3MtcGljay1wcm90b2NvbC1tb2RhbC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9yZW1vdGUtYWNjZXNzL2NvbmZpZ3VyYXRpb25zL3JlbW90ZS1hY2Nlc3MtcGljay1wcm90b2NvbC1tb2RhbC9yZW1vdGUtYWNjZXNzLXBpY2stcHJvdG9jb2wtbW9kYWwuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMxQyxPQUFPLEVBQUUsVUFBVSxFQUFFLE9BQU8sRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBRTFELE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQzs7Ozs7QUFRakQsTUFBTSxPQUFPLHNDQUFzQztJQWFqRCxZQUFvQixVQUFzQjtRQUF0QixlQUFVLEdBQVYsVUFBVSxDQUFZO1FBWjFDLFVBQUssR0FBRyxPQUFPLENBQUMsbUJBQW1CLENBQUMsQ0FBQztRQUNyQyxXQUFNLEdBQUcsSUFBSSxPQUFPLENBQStCLENBQUMsT0FBTyxFQUFFLE1BQU0sRUFBRSxFQUFFO1lBQ3JFLElBQUksQ0FBQyxRQUFRLEdBQUcsT0FBTyxDQUFDO1lBQ3hCLElBQUksQ0FBQyxPQUFPLEdBQUcsTUFBTSxDQUFDO1FBQ3hCLENBQUMsQ0FBQyxDQUFDO1FBRUgsdUJBQXVCO1FBQ3ZCLHNCQUFpQixHQUFtQyxFQUFFLENBQUM7SUFLVixDQUFDO0lBRTlDLE1BQU07UUFDSixJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7SUFDakIsQ0FBQztJQUVELGNBQWMsQ0FBQyxRQUFzQztRQUNuRCxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksRUFBRSxDQUFDO1FBQ3ZCLElBQUksQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDMUIsQ0FBQzsrR0F0QlUsc0NBQXNDO21HQUF0QyxzQ0FBc0MsaUdDWG5ELHlrQ0FvQ0EsMkNEM0JZLFVBQVU7OzRGQUVULHNDQUFzQztrQkFObEQsU0FBUzsrQkFDRSx1Q0FBdUMsY0FFckMsSUFBSSxXQUNQLENBQUMsVUFBVSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDb3JlTW9kdWxlLCBnZXR0ZXh0IH0gZnJvbSAnQGM4eS9uZ3gtY29tcG9uZW50cyc7XG5pbXBvcnQgeyBSZW1vdGVBY2Nlc3NQcm90b2NvbFByb3ZpZGVyIH0gZnJvbSAnQGM4eS9uZ3gtY29tcG9uZW50cy9yZW1vdGUtYWNjZXNzL2RhdGEnO1xuaW1wb3J0IHsgQnNNb2RhbFJlZiB9IGZyb20gJ25neC1ib290c3RyYXAvbW9kYWwnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdjOHktcmVtb3RlLWFjY2Vzcy1waWNrLXByb3RvY29sLW1vZGFsJyxcbiAgdGVtcGxhdGVVcmw6ICcuL3JlbW90ZS1hY2Nlc3MtcGljay1wcm90b2NvbC1tb2RhbC5jb21wb25lbnQuaHRtbCcsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGltcG9ydHM6IFtDb3JlTW9kdWxlXVxufSlcbmV4cG9ydCBjbGFzcyBSZW1vdGVBY2Nlc3NQaWNrUHJvdG9jb2xNb2RhbENvbXBvbmVudCB7XG4gIHRpdGxlID0gZ2V0dGV4dCgnU2VsZWN0IGEgcHJvdG9jb2wnKTtcbiAgcmVzdWx0ID0gbmV3IFByb21pc2U8UmVtb3RlQWNjZXNzUHJvdG9jb2xQcm92aWRlcj4oKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgIHRoaXMuX3Jlc29sdmUgPSByZXNvbHZlO1xuICAgIHRoaXMuX3JlamVjdCA9IHJlamVjdDtcbiAgfSk7XG5cbiAgLy8gc2V0IHZpYSBpbml0aWFsU3RhdGVcbiAgcHJvdG9jb2xQcm92aWRlcnM6IFJlbW90ZUFjY2Vzc1Byb3RvY29sUHJvdmlkZXJbXSA9IFtdO1xuXG4gIHByaXZhdGUgX3Jlc29sdmU6ICh2YWx1ZTogUmVtb3RlQWNjZXNzUHJvdG9jb2xQcm92aWRlcikgPT4gdm9pZDtcbiAgcHJpdmF0ZSBfcmVqZWN0OiAocmVhc29uPzogYW55KSA9PiB2b2lkO1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgYnNNb2RhbFJlZjogQnNNb2RhbFJlZikge31cblxuICBjYW5jZWwoKSB7XG4gICAgdGhpcy5fcmVqZWN0KCk7XG4gIH1cblxuICBzZWxlY3RQcm90b2NvbChwcm90b2NvbDogUmVtb3RlQWNjZXNzUHJvdG9jb2xQcm92aWRlcikge1xuICAgIHRoaXMuYnNNb2RhbFJlZi5oaWRlKCk7XG4gICAgdGhpcy5fcmVzb2x2ZShwcm90b2NvbCk7XG4gIH1cbn1cbiIsIjxjOHktbW9kYWxcbiAgW3RpdGxlXT1cInRpdGxlXCJcbiAgW2hlYWRlckNsYXNzZXNdPVwiJ2RpYWxvZy1oZWFkZXInXCJcbiAgKG9uRGlzbWlzcyk9XCJjYW5jZWwoKVwiXG4gIFtsYWJlbHNdPVwieyBjYW5jZWw6ICdDYW5jZWwnIH1cIlxuPlxuICA8bmctY29udGFpbmVyIGM4eS1tb2RhbC10aXRsZT5cbiAgICA8c3BhbiBbYzh5SWNvbl09XCInbGFwdG9wJ1wiPjwvc3Bhbj5cbiAgPC9uZy1jb250YWluZXI+XG4gIDxkaXYgY2xhc3M9XCJwLTI0XCI+XG4gICAgPGM4eS1saSAqbmdGb3I9XCJsZXQgcHJvdmlkZXIgb2YgcHJvdG9jb2xQcm92aWRlcnNcIj5cbiAgICAgIDxjOHktbGktaWNvbj5cbiAgICAgICAgPGkgW2M4eUljb25dPVwicHJvdmlkZXIucHJvdG9jb2xJY29uXCI+PC9pPlxuICAgICAgPC9jOHktbGktaWNvbj5cbiAgICAgIDxjOHktbGktYm9keT5cbiAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBqLWMtYmV0d2VlblwiPlxuICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICA8cD57eyBwcm92aWRlci5wcm90b2NvbExhYmVsIHwgdHJhbnNsYXRlIH19PC9wPlxuICAgICAgICAgICAgPHA+XG4gICAgICAgICAgICAgIDxzbWFsbD57eyBwcm92aWRlci5wcm90b2NvbERlc2NyaXB0aW9uIHwgdHJhbnNsYXRlIH19PC9zbWFsbD5cbiAgICAgICAgICAgIDwvcD5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICBjbGFzcz1cImJ0biBidG4tcHJpbWFyeVwiXG4gICAgICAgICAgICAgIChjbGljayk9XCJzZWxlY3RQcm90b2NvbChwcm92aWRlcilcIlxuICAgICAgICAgICAgICBbYXR0ci5kYXRhLWN5XT1cIidyZW1vdGVBY2Nlc3NQaWNrUHJvdG9jb2xNb2RhbC0tc2VsZWN0LScgKyBwcm92aWRlci5wcm90b2NvbE5hbWVcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8c3BhbiB0cmFuc2xhdGU+U2VsZWN0PC9zcGFuPlxuICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9jOHktbGktYm9keT5cbiAgICA8L2M4eS1saT5cbiAgPC9kaXY+XG48L2M4eS1tb2RhbD5cbiJdfQ==
@@ -3,6 +3,7 @@ import { FetchClient } from '@c8y/client';
3
3
  import { ContextRouteService, Permissions, ServiceRegistry, ViewContext } from '@c8y/ngx-components';
4
4
  import { gettext } from '@c8y/ngx-components/gettext';
5
5
  import { defer, shareReplay } from 'rxjs';
6
+ import { uniqWith, intersectionWith, isEqual } from 'lodash';
6
7
  import * as i0 from "@angular/core";
7
8
  import * as i1 from "@c8y/client";
8
9
  import * as i2 from "@c8y/ngx-components";
@@ -124,6 +125,16 @@ export class RemoteAccessService {
124
125
  getProtocolProviders() {
125
126
  return this.serviceRegistry.get('remoteAccessProtocolHook');
126
127
  }
128
+ /**
129
+ * Retrieves all supported protocol providers for a given device.
130
+ * Based on the declarations in the fragment c8y_RemoteAccessSupportedProtocols of the device managed object.
131
+ */
132
+ getSupportedProtocolProvidersFor(device) {
133
+ const { c8y_RemoteAccessSupportedProtocols = [] } = device;
134
+ const uniqueInput = uniqWith(c8y_RemoteAccessSupportedProtocols.map(p => p.toUpperCase()), isEqual);
135
+ const supportedProviders = intersectionWith(this.getProtocolProviders(), uniqueInput, ({ protocolName }, protocol) => protocolName?.toUpperCase() === protocol);
136
+ return supportedProviders?.length > 0 ? supportedProviders : this.getProtocolProviders();
137
+ }
127
138
  /**
128
139
  * Creates a new configuration for a given device.
129
140
  */
@@ -197,4 +208,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
197
208
  providedIn: 'root'
198
209
  }]
199
210
  }], ctorParameters: () => [{ type: i1.FetchClient }, { type: i2.ServiceRegistry }] });
200
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVtb3RlLWFjY2Vzcy5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcmVtb3RlLWFjY2Vzcy9kYXRhL3JlbW90ZS1hY2Nlc3Muc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUVuRCxPQUFPLEVBQUUsV0FBVyxFQUFrQixNQUFNLGFBQWEsQ0FBQztBQUMxRCxPQUFPLEVBQ0wsbUJBQW1CLEVBQ25CLFdBQVcsRUFDWCxlQUFlLEVBQ2YsV0FBVyxFQUNaLE1BQU0scUJBQXFCLENBQUM7QUFDN0IsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQ3RELE9BQU8sRUFBYyxLQUFLLEVBQUUsV0FBVyxFQUFFLE1BQU0sTUFBTSxDQUFDOzs7O0FBYXRELE1BQU0sQ0FBQyxNQUFNLGlCQUFpQixHQUFHO0lBQy9CLElBQUksRUFBRTtRQUNKLElBQUksRUFBRSxNQUFNO1FBQ1osS0FBSyxFQUFFLE1BQU07UUFDYixLQUFLLEVBQUUsT0FBTyxDQUFDLGFBQWEsQ0FBQztLQUM5QjtJQUNELFNBQVMsRUFBRTtRQUNULElBQUksRUFBRSxXQUFXO1FBQ2pCLEtBQUssRUFBRSxXQUFXO1FBQ2xCLEtBQUssRUFBRSxPQUFPLENBQUMsdUJBQXVCLENBQUM7S0FDeEM7SUFDRCxTQUFTLEVBQUU7UUFDVCxJQUFJLEVBQUUsV0FBVztRQUNqQixLQUFLLEVBQUUsV0FBVztRQUNsQixLQUFLLEVBQUUsT0FBTyxDQUFDLGVBQWUsQ0FBQztLQUNoQztJQUNELFFBQVEsRUFBRTtRQUNSLElBQUksRUFBRSxVQUFVO1FBQ2hCLEtBQUssRUFBRSxVQUFVO1FBQ2pCLEtBQUssRUFBRSxPQUFPLENBQUMscUJBQXFCLENBQUM7S0FDdEM7SUFDRCxXQUFXLEVBQUU7UUFDWCxJQUFJLEVBQUUsYUFBYTtRQUNuQixLQUFLLEVBQUUs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LFFBQVEsQ0FBQyxFQUFFLENBQUM7WUFDdkIsQ0FBQztRQUNILENBQUM7UUFBQyxPQUFPLENBQUMsRUFBRSxDQUFDO1lBQ1gsT0FBTyxLQUFLLENBQUM7UUFDZixDQUFDO0lBQ0gsQ0FBQzsrR0EvS1UsbUJBQW1CO21IQUFuQixtQkFBbUIsY0FGbEIsTUFBTTs7NEZBRVAsbUJBQW1CO2tCQUgvQixVQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGluamVjdCwgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQWN0aXZhdGVkUm91dGVTbmFwc2hvdCwgQ2FuQWN0aXZhdGVGbiB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQgeyBGZXRjaENsaWVudCwgSU1hbmFnZWRPYmplY3QgfSBmcm9tICdAYzh5L2NsaWVudCc7XG5pbXBvcnQge1xuICBDb250ZXh0Um91dGVTZXJ2aWNlLFxuICBQZXJtaXNzaW9ucyxcbiAgU2VydmljZVJlZ2lzdHJ5LFxuICBWaWV3Q29udGV4dFxufSBmcm9tICdAYzh5L25neC1jb21wb25lbnRzJztcbmltcG9ydCB7IGdldHRleHQgfSBmcm9tICdAYzh5L25neC1jb21wb25lbnRzL2dldHRleHQnO1xuaW1wb3J0IHsgT2JzZXJ2YWJsZSwgZGVmZXIsIHNoYXJlUmVwbGF5IH0gZnJvbSAncnhqcyc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgUmVtb3RlQWNjZXNzQ29uZmlndXJhdGlvbiB7XG4gIGlkOiBzdHJpbmc7XG4gIG5hbWU6IHN0cmluZztcbiAgaG9zdG5hbWU6IHN0cmluZztcbiAgcG9ydDogbnVtYmVyO1xuICBwcm90b2NvbDogc3RyaW5nO1xuICBhdHRycz86IGFueTtcbiAgY3JlZGVudGlhbHM/OiBhbnk7XG4gIGNyZWRlbnRpYWxzVHlwZT86IHN0cmluZztcbn1cblxuZXhwb3J0IGNvbnN0IENSRURFTlRJQUxTX1RZUEVTID0ge1xuICBOT05FOiB7XG4gICAgbmFtZTogJ05PTkUnLFxuICAgIHZhbHVlOiAnTk9ORScsXG4gICAgbGFiZWw6IGdldHRleHQoJ05vIHBhc3N3b3JkJylcbiAgfSxcbiAgVVNFUl9QQVNTOiB7XG4gICAgbmFtZTogJ1VTRVJfUEFTUycsXG4gICAgdmFsdWU6ICdVU0VSX1BBU1MnLFxuICAgIGxhYmVsOiBnZXR0ZXh0KCdVc2VybmFtZSBhbmQgcGFzc3dvcmQnKVxuICB9LFxuICBQQVNTX09OTFk6IHtcbiAgICBuYW1lOiAnUEFTU19PTkxZJyxcbiAgICB2YWx1ZTogJ1BBU1NfT05MWScsXG4gICAgbGFiZWw6IGdldHRleHQoJ1Bhc3N3b3JkIG9ubHknKVxuICB9LFxuICBLRVlfUEFJUjoge1xuICAgIG5hbWU6ICdLRVlfUEFJUicsXG4gICAgdmFsdWU6ICdLRVlfUEFJUicsXG4gICAgbGFiZWw6IGdldHRleHQoJ1B1YmxpYy9wcml2YXRlIGtleXMnKVxuICB9LFxuICBDRVJUSUZJQ0FURToge1xuICAgIG5hbWU6ICdDRVJUSUZJQ0FURScsXG4gICAgdmFsdWU6ICdDRVJUSUZJQ0FURScsXG4gICAgbGFiZWw6IGdldHRleHQoJ0NlcnRpZmljYXRlJylcbiAgfVxufSBhcyBjb25zdDtcblxuZXhwb3J0IGNvbnN0IGNhbkFjdGl2YXRlUmVtb3RlQWNjZXNzOiBDYW5BY3RpdmF0ZUZuID0gKHJvdXRlOiBBY3RpdmF0ZWRSb3V0ZVNuYXBzaG90KSA9PiB7XG4gIGNvbnN0IHBlcm1pc3Npb25zID0gaW5qZWN0KFBlcm1pc3Npb25zKTtcbiAgY29uc3QgcmVtb3RlQWNjZXNzU2VydmljZSA9IGluamVjdChSZW1vdGVBY2Nlc3NTZXJ2aWNlKTtcbiAgY29uc3QgY29udGV4dFJvdXRlU2VydmljZSA9IGluamVjdChDb250ZXh0Um91dGVTZXJ2aWNlKTtcbiAgaWYgKCFwZXJtaXNzaW9ucy5oYXNSb2xlKFBlcm1pc3Npb25zLlJPTEVfUkVNT1RFX0FDQ0VTU19BRE1JTikpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBjb25zdCBjb250ZXh0RGV0YWlscyA9IGNvbnRleHRSb3V0ZVNlcnZpY2UuZ2V0Q29udGV4dERhdGEocm91dGUpO1xuICBpZiAoY29udGV4dERldGFpbHMuY29udGV4dCAhPT0gVmlld0NvbnRleHQuRGV2aWNlKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgY29uc3QgZGV2aWNlID0gY29udGV4dERldGFpbHMuY29udGV4dERhdGEgYXMgSU1hbmFnZWRPYmplY3Q7XG4gIGlmICghZGV2aWNlIHx8ICFBcnJheS5pc0FycmF5KGRldmljZS5jOHlfU3VwcG9ydGVkT3BlcmF0aW9ucykpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgY29uc3Qgc3VwcG9ydGVkT3BlcmF0aW9uczogc3RyaW5nW10gPSBkZXZpY2UuYzh5X1N1cHBvcnRlZE9wZXJhdGlvbnM7XG4gIGlmICghc3VwcG9ydGVkT3BlcmF0aW9ucy5pbmNsdWRlcygnYzh5X1JlbW90ZUFjY2Vzc0Nvbm5lY3QnKSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICByZXR1cm4gcmVtb3RlQWNjZXNzU2VydmljZS5pc0F2YWlsYWJsZSQoKTtcbn07XG5cbkBJbmplY3RhYmxlKHtcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnXG59KVxuZXhwb3J0IGNsYXNzIFJlbW90ZUFjY2Vzc1NlcnZpY2Uge1xuICBwcml2YXRlIGNhY2hlZElzQXZhaWxhYmxlJDogT2JzZXJ2YWJsZTxib29sZWFuPjtcbiAgcmVhZG9ubHkgYmFzZVVybCA9ICcvc2VydmljZS9yZW1vdGVhY2Nlc3MnO1xuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIGZldGNoQ2xpZW50OiBGZXRjaENsaWVudCxcbiAgICBwcml2YXRlIHNlcnZpY2VSZWdpc3RyeTogU2VydmljZVJlZ2lzdHJ5XG4gICkge31cblxuICAvKipcbiAgICogVmVyaWZpZXMgaWYgdGhlIHJlbW90ZSBhY2Nlc3Mgc2VydmljZSBpcyBhdmFpbGFibGUgYnkgc2VuZGluZyBhIEhFQUQgcmVxdWVzdCB0byBpcydzIGhlYWx0aCBlbmRwb2ludC5cbiAgICogQHJldHVybnMgY2FjaGVkIE9ic2VydmFibGUgdGhhdCBlbWl0cyB0cnVlIGlmIHRoZSBzZXJ2aWNlIGlzIGF2YWlsYWJsZSwgZmFsc2Ugb3RoZXJ3aXNlLlxuICAgKi9cbiAgaXNBdmFpbGFibGUkKCk6IE9ic2VydmFibGU8Ym9vbGVhbj4ge1xuICAgIGlmICghdGhpcy5jYWNoZWRJc0F2YWlsYWJsZSQpIHtcbiAgICAgIHRoaXMuY2FjaGVkSXNBdmFpbGFibGUkID0gZGVmZXIoKCkgPT4gdGhpcy5oZWFsdGhFbmRwb2ludEF2YWlsYWJsZSgpKS5waXBlKHNoYXJlUmVwbGF5KDEpKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5jYWNoZWRJc0F2YWlsYWJsZSQ7XG4gIH1cblxuICAvKipcbiAgICogbWlzc2VzIHRoZSBsZWFkaW5nID8gZm9yIHRoZSBxdWVyeSBwYXJhbXNcbiAgICovXG4gIGdldEF1dGhRdWVyeVBhcmFtc0ZvcldlYnNvY2tldENvbm5lY3Rpb24oKSB7XG4gICAgY29uc3QgeyBoZWFkZXJzIH0gPSB0aGlzLmZldGNoQ2xpZW50LmdldEZldGNoT3B0aW9ucygpO1xuICAgIGNvbnN0IHBhcmFtcyA9IG5ldyBVUkxTZWFyY2hQYXJhbXMoKTtcblxuICAgIGlmIChoZWFkZXJzKSB7XG4gICAgICBjb25zdCB4c3JmVG9rZW4gPSBoZWFkZXJzWydYLVhTUkYtVE9LRU4nXTtcbiAgICAgIGNvbnN0IGF1dGggPSBoZWFkZXJzWydBdXRob3JpemF0aW9uJ107XG5cbiAgICAgIGlmICh4c3JmVG9rZW4pIHtcbiAgICAgICAgcGFyYW1zLmFwcGVuZCgnWFNSRi1UT0tFTicsIHhzcmZUb2tlbik7XG4gICAgICB9XG4gICAgICBpZiAoYXV0aCkge1xuICAgICAgICBwYXJhbXMuYXBwZW5kKCd0b2tlbicsIGF1dGgucmVwbGFjZSgnQmVhcmVyICcsICcnKS5yZXBsYWNlKCdCYXNpYyAnLCAnJykpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IHBhcmFtc1N0cmluZyA9IHBhcmFtcy50b1N0cmluZygpO1xuICAgIHJldHVybiBwYXJhbXNTdHJpbmc7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyB0aGUgVVJJIGZvciB0aGUgd2Vic29ja2V0IGNvbm5lY3Rpb24gdG8gdGhlIHJlbW90ZSBhY2Nlc3Mgc2VydmljZS5cbiAgICovXG4gIGdldFdlYlNvY2tldFVyaTxLIGV4dGVuZHMgc3RyaW5nLCBJIGV4dGVuZHMgc3RyaW5nPihkZXZpY2VJZDogSywgY29uZmlndXJhdGlvbklkOiBJKSB7XG4gICAgY29uc3QgYXV0aFF1ZXJ5UGFyYW1zID0gdGhpcy5nZXRBdXRoUXVlcnlQYXJhbXNGb3JXZWJzb2NrZXRDb25uZWN0aW9uKCk7XG4gICAgY29uc3QgcHJvdG9jb2wgPSB3aW5kb3cubG9jYXRpb24ucHJvdG9jb2wgPT09ICdodHRwOicgPyAnd3MnIDogJ3dzcyc7XG4gICAgY29uc3QgcGF0aE5hbWUgPVxuICAgICAgYCR7cHJvdG9jb2x9Oi8vJHt3aW5kb3cubG9jYXRpb24uaG9zdH0ke3RoaXMuYmFzZVVybH0vY2xpZW50LyR7ZGV2aWNlSWR9L2NvbmZpZ3VyYXRpb25zLyR7Y29uZmlndXJhdGlvbklkfWAgYXMgY29uc3Q7XG4gICAgcmV0dXJuIGF1dGhRdWVyeVBhcmFtcyA/IChgJHtwYXRoTmFtZX0/JHthdXRoUXVlcnlQYXJhbXN9YCBhcyBjb25zdCkgOiBwYXRoTmFtZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXRyaWV2ZXMgYWxsIGNvbmZpZ3VyYXRpb25zIGZvciBhIGdpdmVuIGRldmljZS5cbiAgICovXG4gIGFzeW5jIGxpc3RDb25maWd1cmF0aW9ucyhkZXZpY2VJZDogc3RyaW5nKTogUHJvbWlzZTxSZW1vdGVBY2Nlc3NDb25maWd1cmF0aW9uW10+IHtcbiAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHRoaXMuZmV0Y2hDbGllbnQuZmV0Y2goXG4gICAgICBgJHt0aGlzLmJhc2VVcmx9L2RldmljZXMvJHtkZXZpY2VJZH0vY29uZmlndXJhdGlvbnNgXG4gICAgKTtcbiAgICBpZiAocmVzcG9uc2Uub2spIHtcbiAgICAgIHJldHVybiByZXNwb25zZS5qc29uKCk7XG4gICAgfVxuXG4gICAgdGhyb3cgbmV3IEVycm9yKGBGYWlsZWQgdG8gZmV0Y2ggY29uZmlndXJhdGlvbnMgZm9yIGRldmljZSAke2RldmljZUlkfWApO1xuICB9XG5cbiAgLyoqXG4gICAqIERlbGV0ZXMgYSBjb25maWd1cmF0aW9uIGZvciBhIGdpdmVuIGRldmljZS5cbiAgICovXG4gIGFzeW5jIGRlbGV0ZUNvbmZpZ3VyYXRpb24oZGV2aWNlSWQ6IHN0cmluZywgY29uZmlndXJhdGlvbklkOiBzdHJpbmcpIHtcbiAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHRoaXMuZmV0Y2hDbGllbnQuZmV0Y2goXG4gICAgICBgJHt0aGlzLmJhc2VVcmx9L2RldmljZXMvJHtkZXZpY2VJZH0vY29uZmlndXJhdGlvbnMvJHtjb25maWd1cmF0aW9uSWR9YCxcbiAgICAgIHsgbWV0aG9kOiAnREVMRVRFJyB9XG4gICAgKTtcblxuICAgIGlmIChyZXNwb25zZS5vaykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRocm93IG5ldyBFcnJvcihgRmFpbGVkIHRvIGRlbGV0ZSBjb25maWd1cmF0aW9uIGZvciBkZXZpY2UgJHtkZXZpY2VJZH1gKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXRyaWV2ZXMgYWxsIGF2YWlsYWJsZSByZW1vdGUgYWNjZXNzIHByb3RvY29sIHByb3ZpZGVycy5cbiAgICovXG4gIGdldFByb3RvY29sUHJvdmlkZXJzKCkge1xuICAgIHJldHVybiB0aGlzLnNlcnZpY2VSZWdpc3RyeS5nZXQoJ3JlbW90ZUFjY2Vzc1Byb3RvY29sSG9vaycpO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgYSBuZXcgY29uZmlndXJhdGlvbiBmb3IgYSBnaXZlbiBkZXZpY2UuXG4gICAqL1xuICBhc3luYyBhZGRDb25maWd1cmF0aW9uKFxuICAgIGRldmljZUlkOiBzdHJpbmcsXG4gICAgY29uZmlndXJhdGlvbjogT21pdDxSZW1vdGVBY2Nlc3NDb25maWd1cmF0aW9uLCAnaWQnPlxuICApOiBQcm9taXNlPFJlbW90ZUFjY2Vzc0NvbmZpZ3VyYXRpb24+IHtcbiAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHRoaXMuZmV0Y2hDbGllbnQuZmV0Y2goXG4gICAgICBgJHt0aGlzLmJhc2VVcmx9L2RldmljZXMvJHtkZXZpY2VJZH0vY29uZmlndXJhdGlvbnNgLFxuICAgICAge1xuICAgICAgICBtZXRob2Q6ICdQT1NUJyxcbiAgICAgICAgaGVhZGVyczoge1xuICAgICAgICAgICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24vanNvbidcbiAgICAgICAgfSxcbiAgICAgICAgYm9keTogSlNPTi5zdHJpbmdpZnkoY29uZmlndXJhdGlvbilcbiAgICAgIH1cbiAgICApO1xuXG4gICAgaWYgKHJlc3BvbnNlLm9rKSB7XG4gICAgICByZXR1cm4gcmVzcG9uc2UuanNvbigpO1xuICAgIH1cblxuICAgIHRocm93IG5ldyBFcnJvcihgRmFpbGVkIHRvIGFkZCBjb25maWd1cmF0aW9uIGZvciBkZXZpY2UgJHtjb25maWd1cmF0aW9uLmF0dHJzLmRldmljZUlkfWApO1xuICB9XG5cbiAgLyoqXG4gICAqIFVwZGF0ZXMgYSBjb25maWd1cmF0aW9uIGZvciBhIGdpdmVuIGRldmljZS5cbiAgICovXG4gIGFzeW5jIHVwZGF0ZUNvbmZpZ3VyYXRpb24oXG4gICAgZGV2aWNlSWQ6IHN0cmluZyxcbiAgICBjb25maWd1cmF0aW9uOiBSZW1vdGVBY2Nlc3NDb25maWd1cmF0aW9uXG4gICk6IFByb21pc2U8UmVtb3RlQWNjZXNzQ29uZmlndXJhdGlvbj4ge1xuICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5mZXRjaENsaWVudC5mZXRjaChcbiAgICAgIGAke3RoaXMuYmFzZVVybH0vZGV2aWNlcy8ke2RldmljZUlkfS9jb25maWd1cmF0aW9ucy8ke2NvbmZpZ3VyYXRpb24uaWR9YCxcbiAgICAgIHtcbiAgICAgICAgbWV0aG9kOiAnUFVUJyxcbiAgICAgICAgaGVhZGVyczoge1xuICAgICAgICAgICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24vanNvbidcbiAgICAgICAgfSxcbiAgICAgICAgYm9keTogSlNPTi5zdHJpbmdpZnkoY29uZmlndXJhdGlvbilcbiAgICAgIH1cbiAgICApO1xuXG4gICAgaWYgKHJlc3BvbnNlLm9rKSB7XG4gICAgICByZXR1cm4gcmVzcG9uc2UuanNvbigpO1xuICAgIH1cblxuICAgIHRocm93IG5ldyBFcnJvcihgRmFpbGVkIHRvIHVwZGF0ZSBjb25maWd1cmF0aW9uIGZvciBkZXZpY2UgJHtjb25maWd1cmF0aW9uLmF0dHJzLmRldmljZUlkfWApO1xuICB9XG5cbiAgLyoqXG4gICAqIEdlbmVyYXRlcyBhIFNTSCBrZXkgcGFpciBmb3IgYSBnaXZlbiBob3N0bmFtZS5cbiAgICovXG4gIGFzeW5jIGdlbmVyYXRlS2V5UGFpcihob3N0bmFtZTogc3RyaW5nKTogUHJvbWlzZTx7IHB1YmxpY0tleTogc3RyaW5nOyBwcml2YXRlS2V5OiBzdHJpbmcgfT4ge1xuICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5mZXRjaENsaWVudC5mZXRjaChgJHt0aGlzLmJhc2VVcmx9L2tleXBhaXIvZ2VuZXJhdGVgLCB7XG4gICAgICBtZXRob2Q6ICdQT1NUJyxcbiAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJ1xuICAgICAgfSxcbiAgICAgIGJvZHk6IEpTT04uc3RyaW5naWZ5KHsgaG9zdG5hbWUgfSlcbiAgICB9KTtcblxuICAgIGlmIChyZXNwb25zZS5vaykge1xuICAgICAgcmV0dXJuIHJlc3BvbnNlLmpzb24oKTtcbiAgICB9XG5cbiAgICB0aHJvdyBuZXcgRXJyb3IoYEZhaWxlZCB0byBnZW5lcmF0ZSBrZXkgcGFpciBmb3IgJHtob3N0bmFtZX1gKTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgaGVhbHRoRW5kcG9pbnRBdmFpbGFibGUoKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5mZXRjaENsaWVudC5mZXRjaChgJHt0aGlzLmJhc2VVcmx9L2hlYWx0aGAsIHtcbiAgICAgICAgbWV0aG9kOiAnSEVBRCcsXG4gICAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgICAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL2pzb24nXG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgICBpZiAocmVzcG9uc2Uub2spIHtcbiAgICAgICAgcmV0dXJuICEhcmVzcG9uc2Uub2s7XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxufVxuIl19
211
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVtb3RlLWFjY2Vzcy5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcmVtb3RlLWFjY2Vzcy9kYXRhL3JlbW90ZS1hY2Nlc3Muc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUVuRCxPQUFPLEVBQUUsV0FBVyxFQUFrQixNQUFNLGFBQWEsQ0FBQztBQUMxRCxPQUFPLEVBQ0wsbUJBQW1CLEVBQ25CLFdBQVcsRUFDWCxlQUFlLEVBQ2YsV0FBVyxFQUNaLE1BQU0scUJBQXFCLENBQUM7QUFDN0IsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQ3RELE9BQU8sRUFBYyxLQUFLLEVBQUUsV0FBVyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBRXRELE9BQU8sRUFBRSxRQUFRLEVBQUUsZ0JBQWdCLEVBQUUsT0FBTyxFQUFFLE1BQU0sUUFBUSxDQUFDOzs7O0FBYTdELE1BQU0sQ0FBQyxNQUFNLGlCQUFpQixHQUFHO0lBQy9CLElBQUksRUFBRTtRQUNKLElBQUksRUFBRSxNQUFNO1FBQ1osS0FBSyxFQUFFLE1BQU07UUFDYixLQUFLLEVBQUUsT0FBTyxDQUFDLGFBQWEsQ0FBQztLQUM5QjtJQUNELFNBQVMsRUFBRTtRQUNULElBQUksRUFBRSxXQUFXO1FBQ2pCLEtBQUssRUFBRSxXQUFXO1FBQ2xCLEtBQUssRUFBRSxPQUFPLENBQUMsdUJBQXVCLENBQUM7S0FDeEM7SUFDRCxTQUFTLEVBQUU7UUFDVCxJQUFJLEVBQUUsV0FBVztRQUNqQixLQUFLLEVBQUUsV0FBVztRQUNsQixLQUFLLEVBQUUsT0FBTyxDQUFDLGVBQWUsQ0FBQztLQUNoQztJQUNELFFBQVEsRUFBRTtRQUNSLElBQUksRUFBRSxVQUFVO1FBQ2hCLEtBQUssRUFBRSxVQUFVO1FBQ2pCLEtBQUssRUFBRSxPQUFPLENBQUMscUJBQXFCLENBQUM7S0FDdEM7SUFDRCxXQUFXLEVBQUU7UUFDWCxJQUFJLEVBQUUsYUFBYTtRQUNuQixLQUFLLEVBQUUsYUFBYTtRQUNwQixLQUFLLEVBQUUsT0FBTyxDQUFDLGFBQWEsQ0FBQztLQUM5QjtDQUNPLENBQUM7QUFFWCxNQUFNLENBQUMsTUFBTSx1QkFBdUIsR0FBa0IsQ0FBQyxLQUE2QixFQUFFLEVBQUU7SUFDdEYsTUFBTSxXQUFXLEdBQUcsTUFBTSxDQUFDLFdBQVcsQ0FBQyxDQUFDO0lBQ3hDLE1BQU0sbUJBQW1CLEdBQUcsTUFBTSxDQUFDLG1CQUFtQixDQUFDLENBQUM7SUFDeEQsTUFBTSxtQkFBbUIsR0FBRyxNQUFNLENBQUMsbUJBQW1CLENBQUMsQ0FBQztJQUN4RCxJQUFJLENBQUMsV0FBVyxDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQUMsd0JBQXdCLENBQUMsRUFBRSxDQUFDO1FBQy9ELE9BQU8sS0FBSyxDQUFDO0lBQ2YsQ0FBQztJQUVELE1BQU0sY0FBYyxHQUFHLG1CQUFtQixDQUFDLGNBQWMsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNqRSxJQUFJLGNBQWMsQ0FBQyxPQUFPLEtBQUssV0FBVyxDQUFDLE1BQU0sRUFBRSxDQUFDO1FBQ2xELE9BQU8sS0FBSyxDQUFDO0lBQ2YsQ0FBQztJQUVELE1BQU0sTUFBTSxHQUFHLGNBQWMsQ0FBQyxXQUE2QixDQUFDO0lBQzVELElBQUksQ0FBQyxNQUFNLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyx1QkFBdUIsQ0FBQyxFQUFFLENBQUM7UUFDOUQsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDO0lBQ0QsTUFBTSxtQkFBbUIsR0FBYSxNQUFNLENBQUMsdUJBQXVCLENBQUM7SUFDckUsSUFBSSxDQUFDLG1CQUFtQixDQUFDLFFBQVEsQ0FBQyx5QkFBeUIsQ0FBQyxFQUFFLENBQUM7UUFDN0QsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDO0lBQ0QsT0FBTyxtQkFBbUIsQ0FBQyxZQUFZLEVBQUUsQ0FBQztBQUM1QyxDQUFDLENBQUM7QUFLRixNQUFNLE9BQU8sbUJBQW1CO0lBRzlCLFlBQ1UsV0FBd0IsRUFDeEIsZUFBZ0M7UUFEaEMsZ0JBQVcsR0FBWCxXQUFXLENBQWE7UUFDeEIsb0JBQWUsR0FBZixlQUFlLENBQWlCO1FBSGpDLFlBQU8sR0FBRyx1QkFBdUIsQ0FBQztJQUl4QyxDQUFDO0lBRUo7OztPQUdHO0lBQ0gsWUFBWTtRQUNWLElBQUksQ0FBQyxJQUFJLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztZQUM3QixJQUFJLENBQUMsa0JBQWtCLEdBQUcsS0FBSyxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyx1QkFBdUIsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzdGLENBQUM7UUFFRCxPQUFPLElBQUksQ0FBQyxrQkFBa0IsQ0FBQztJQUNqQyxDQUFDO0lBRUQ7O09BRUc7SUFDSCx3Q0FBd0M7UUFDdEMsTUFBTSxFQUFFLE9BQU8sRUFBRSxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsZUFBZSxFQUFFLENBQUM7UUFDdkQsTUFBTSxNQUFNLEdBQUcsSUFBSSxlQUFlLEVBQUUsQ0FBQztRQUVyQyxJQUFJLE9BQU8sRUFBRSxDQUFDO1lBQ1osTUFBTSxTQUFTLEdBQUcsT0FBTyxDQUFDLGNBQWMsQ0FBQyxDQUFDO1lBQzFDLE1BQU0sSUFBSSxHQUFHLE9BQU8sQ0FBQyxlQUFlLENBQUMsQ0FBQztZQUV0QyxJQUFJLFNBQVMsRUFBRSxDQUFDO2dCQUNkLE1BQU0sQ0FBQyxNQUFNLENBQUMsWUFBWSxFQUFFLFNBQVMsQ0FBQyxDQUFDO1lBQ3pDLENBQUM7WUFDRCxJQUFJLElBQUksRUFBRSxDQUFDO2dCQUNULE1BQU0sQ0FBQyxNQUFNLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsU0FBUyxFQUFFLEVBQUUsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxRQUFRLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQztZQUM1RSxDQUFDO1FBQ0gsQ0FBQztRQUVELE1BQU0sWUFBWSxHQUFHLE1BQU0sQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUN2QyxPQUFPLFlBQVksQ0FBQztJQUN0QixDQUFDO0lBRUQ7O09BRUc7SUFDSCxlQUFlLENBQXFDLFFBQVcsRUFBRSxlQUFrQjtRQUNqRixNQUFNLGVBQWUsR0FBRyxJQUFJLENBQUMsd0NBQXdDLEVBQUUsQ0FBQztRQUN4RSxNQUFNLFFBQVEsR0FBRyxNQUFNLENBQUMsUUFBUSxDQUFDLFFBQVEsS0FBSyxPQUFPLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDO1FBQ3JFLE1BQU0sUUFBUSxHQUNaLEdBQUcsUUFBUSxNQUFNLE1BQU0sQ0FBQyxRQUFRLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxPQUFPLFdBQVcsUUFBUSxtQkFBbUIsZUFBZSxFQUFXLENBQUM7UUFDdkgsT0FBTyxlQUFlLENBQUMsQ0FBQyxDQUFFLEdBQUcsUUFBUSxJQUFJLGVBQWUsRUFBWSxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUM7SUFDbEYsQ0FBQztJQUVEOztPQUVHO0lBQ0gsS0FBSyxDQUFDLGtCQUFrQixDQUFDLFFBQWdCO1FBQ3ZDLE1BQU0sUUFBUSxHQUFHLE1BQU0sSUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQzNDLEdBQUcsSUFBSSxDQUFDLE9BQU8sWUFBWSxRQUFRLGlCQUFpQixDQUNyRCxDQUFDO1FBQ0YsSUFBSSxRQUFRLENBQUMsRUFBRSxFQUFFLENBQUM7WUFDaEIsT0FBTyxRQUFRLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDekIsQ0FBQztRQUVELE1BQU0sSUFBSSxLQUFLLENBQUMsNkNBQTZDLFFBQVEsRUFBRSxDQUFDLENBQUM7SUFDM0UsQ0FBQztJQUVEOztPQUVHO0lBQ0gsS0FBSyxDQUFDLG1CQUFtQixDQUFDLFFBQWdCLEVBQUUsZUFBdUI7UUFDakUsTUFBTSxRQUFRLEdBQUcsTUFBTSxJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FDM0MsR0FBRyxJQUFJLENBQUMsT0FBTyxZQUFZLFFBQVEsbUJBQW1CLGVBQWUsRUFBRSxFQUN2RSxFQUFFLE1BQU0sRUFBRSxRQUFRLEVBQUUsQ0FDckIsQ0FBQztRQUVGLElBQUksUUFBUSxDQUFDLEVBQUUsRUFBRSxDQUFDO1lBQ2hCLE9BQU87UUFDVCxDQUFDO1FBRUQsTUFBTSxJQUFJLEtBQUssQ0FBQyw2Q0FBNkMsUUFBUSxFQUFFLENBQUMsQ0FBQztJQUMzRSxDQUFDO0lBRUQ7O09BRUc7SUFDSCxvQkFBb0I7UUFDbEIsT0FBTyxJQUFJLENBQUMsZUFBZSxDQUFDLEdBQUcsQ0FBQywwQkFBMEIsQ0FBQyxDQUFDO0lBQzlELENBQUM7SUFFRDs7O09BR0c7SUFDSCxnQ0FBZ0MsQ0FBQyxNQUFzQjtRQUNyRCxNQUFNLEVBQUUsa0NBQWtDLEdBQUcsRUFBRSxFQUFFLEdBQUcsTUFBTSxDQUFDO1FBQzNELE1BQU0sV0FBVyxHQUFHLFFBQVEsQ0FDMUIsa0NBQWtDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLFdBQVcsRUFBRSxDQUFDLEVBQzVELE9BQU8sQ0FDUixDQUFDO1FBQ0YsTUFBTSxrQkFBa0IsR0FBRyxnQkFBZ0IsQ0FDekMsSUFBSSxDQUFDLG9CQUFvQixFQUFFLEVBQzNCLFdBQVcsRUFDWCxDQUFDLEVBQUUsWUFBWSxFQUFFLEVBQUUsUUFBUSxFQUFFLEVBQUUsQ0FBQyxZQUFZLEVBQUUsV0FBVyxFQUFFLEtBQUssUUFBUSxDQUN6RSxDQUFDO1FBQ0YsT0FBTyxrQkFBa0IsRUFBRSxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLG9CQUFvQixFQUFFLENBQUM7SUFDM0YsQ0FBQztJQUVEOztPQUVHO0lBQ0gsS0FBSyxDQUFDLGdCQUFnQixDQUNwQixRQUFnQixFQUNoQixhQUFvRDtRQUVwRCxNQUFNLFFBQVEsR0FBRyxNQUFNLElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUMzQyxHQUFHLElBQUksQ0FBQyxPQUFPLFlBQVksUUFBUSxpQkFBaUIsRUFDcEQ7WUFDRSxNQUFNLEVBQUUsTUFBTTtZQUNkLE9BQU8sRUFBRTtnQkFDUCxjQUFjLEVBQUUsa0JBQWtCO2FBQ25DO1lBQ0QsSUFBSSxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsYUFBYSxDQUFDO1NBQ3BDLENBQ0YsQ0FBQztRQUVGLElBQUksUUFBUSxDQUFDLEVBQUUsRUFBRSxDQUFDO1lBQ2hCLE9BQU8sUUFBUSxDQUFDLElBQUksRUFBRSxDQUFDO1FBQ3pCLENBQUM7UUFFRCxNQUFNLElBQUksS0FBSyxDQUFDLDBDQUEwQyxhQUFhLENBQUMsS0FBSyxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUM7SUFDNUYsQ0FBQztJQUVEOztPQUVHO0lBQ0gsS0FBSyxDQUFDLG1CQUFtQixDQUN2QixRQUFnQixFQUNoQixhQUF3QztRQUV4QyxNQUFNLFFBQVEsR0FBRyxNQUFNLElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUMzQyxHQUFHLElBQUksQ0FBQyxPQUFPLFlBQVksUUFBUSxtQkFBbUIsYUFBYSxDQUFDLEVBQUUsRUFBRSxFQUN4RTtZQUNFLE1BQU0sRUFBRSxLQUFLO1lBQ2IsT0FBTyxFQUFFO2dCQUNQLGNBQWMsRUFBRSxrQkFBa0I7YUFDbkM7WUFDRCxJQUFJLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxhQUFhLENBQUM7U0FDcEMsQ0FDRixDQUFDO1FBRUYsSUFBSSxRQUFRLENBQUMsRUFBRSxFQUFFLENBQUM7WUFDaEIsT0FBTyxRQUFRLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDekIsQ0FBQztRQUVELE1BQU0sSUFBSSxLQUFLLENBQUMsNkNBQTZDLGFBQWEsQ0FBQyxLQUFLLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQztJQUMvRixDQUFDO0lBRUQ7O09BRUc7SUFDSCxLQUFLLENBQUMsZUFBZSxDQUFDLFFBQWdCO1FBQ3BDLE1BQU0sUUFBUSxHQUFHLE1BQU0sSUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsR0FBRyxJQUFJLENBQUMsT0FBTyxtQkFBbUIsRUFBRTtZQUNoRixNQUFNLEVBQUUsTUFBTTtZQUNkLE9BQU8sRUFBRTtnQkFDUCxjQUFjLEVBQUUsa0JBQWtCO2FBQ25DO1lBQ0QsSUFBSSxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsRUFBRSxRQUFRLEVBQUUsQ0FBQztTQUNuQyxDQUFDLENBQUM7UUFFSCxJQUFJLFFBQVEsQ0FBQyxFQUFFLEVBQUUsQ0FBQztZQUNoQixPQUFPLFFBQVEsQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUN6QixDQUFDO1FBRUQsTUFBTSxJQUFJLEtBQUssQ0FBQyxtQ0FBbUMsUUFBUSxFQUFFLENBQUMsQ0FBQztJQUNqRSxDQUFDO0lBRU8sS0FBSyxDQUFDLHVCQUF1QjtRQUNuQyxJQUFJLENBQUM7WUFDSCxNQUFNLFFBQVEsR0FBRyxNQUFNLElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLEdBQUcsSUFBSSxDQUFDLE9BQU8sU0FBUyxFQUFFO2dCQUN0RSxNQUFNLEVBQUUsTUFBTTtnQkFDZCxPQUFPLEVBQUU7b0JBQ1AsY0FBYyxFQUFFLGtCQUFrQjtpQkFDbkM7YUFDRixDQUFDLENBQUM7WUFFSCxJQUFJLFFBQVEsQ0FBQyxFQUFFLEVBQUUsQ0FBQztnQkFDaEIsT0FBTyxDQUFDLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQztZQUN2QixDQUFDO1FBQ0gsQ0FBQztRQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUM7WUFDWCxPQUFPLEtBQUssQ0FBQztRQUNmLENBQUM7SUFDSCxDQUFDOytHQWpNVSxtQkFBbUI7bUhBQW5CLG1CQUFtQixjQUZsQixNQUFNOzs0RkFFUCxtQkFBbUI7a0JBSC9CLFVBQVU7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgaW5qZWN0LCBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBBY3RpdmF0ZWRSb3V0ZVNuYXBzaG90LCBDYW5BY3RpdmF0ZUZuIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCB7IEZldGNoQ2xpZW50LCBJTWFuYWdlZE9iamVjdCB9IGZyb20gJ0BjOHkvY2xpZW50JztcbmltcG9ydCB7XG4gIENvbnRleHRSb3V0ZVNlcnZpY2UsXG4gIFBlcm1pc3Npb25zLFxuICBTZXJ2aWNlUmVnaXN0cnksXG4gIFZpZXdDb250ZXh0XG59IGZyb20gJ0BjOHkvbmd4LWNvbXBvbmVudHMnO1xuaW1wb3J0IHsgZ2V0dGV4dCB9IGZyb20gJ0BjOHkvbmd4LWNvbXBvbmVudHMvZ2V0dGV4dCc7XG5pbXBvcnQgeyBPYnNlcnZhYmxlLCBkZWZlciwgc2hhcmVSZXBsYXkgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IFJlbW90ZUFjY2Vzc1Byb3RvY29sUHJvdmlkZXIgfSBmcm9tICcuL3JlbW90ZS1hY2Nlc3MtcHJvdG9jb2wtcHJvdmlkZXInO1xuaW1wb3J0IHsgdW5pcVdpdGgsIGludGVyc2VjdGlvbldpdGgsIGlzRXF1YWwgfSBmcm9tICdsb2Rhc2gnO1xuXG5leHBvcnQgaW50ZXJmYWNlIFJlbW90ZUFjY2Vzc0NvbmZpZ3VyYXRpb24ge1xuICBpZDogc3RyaW5nO1xuICBuYW1lOiBzdHJpbmc7XG4gIGhvc3RuYW1lOiBzdHJpbmc7XG4gIHBvcnQ6IG51bWJlcjtcbiAgcHJvdG9jb2w6IHN0cmluZztcbiAgYXR0cnM/OiBhbnk7XG4gIGNyZWRlbnRpYWxzPzogYW55O1xuICBjcmVkZW50aWFsc1R5cGU/OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBjb25zdCBDUkVERU5USUFMU19UWVBFUyA9IHtcbiAgTk9ORToge1xuICAgIG5hbWU6ICdOT05FJyxcbiAgICB2YWx1ZTogJ05PTkUnLFxuICAgIGxhYmVsOiBnZXR0ZXh0KCdObyBwYXNzd29yZCcpXG4gIH0sXG4gIFVTRVJfUEFTUzoge1xuICAgIG5hbWU6ICdVU0VSX1BBU1MnLFxuICAgIHZhbHVlOiAnVVNFUl9QQVNTJyxcbiAgICBsYWJlbDogZ2V0dGV4dCgnVXNlcm5hbWUgYW5kIHBhc3N3b3JkJylcbiAgfSxcbiAgUEFTU19PTkxZOiB7XG4gICAgbmFtZTogJ1BBU1NfT05MWScsXG4gICAgdmFsdWU6ICdQQVNTX09OTFknLFxuICAgIGxhYmVsOiBnZXR0ZXh0KCdQYXNzd29yZCBvbmx5JylcbiAgfSxcbiAgS0VZX1BBSVI6IHtcbiAgICBuYW1lOiAnS0VZX1BBSVInLFxuICAgIHZhbHVlOiAnS0VZX1BBSVInLFxuICAgIGxhYmVsOiBnZXR0ZXh0KCdQdWJsaWMvcHJpdmF0ZSBrZXlzJylcbiAgfSxcbiAgQ0VSVElGSUNBVEU6IHtcbiAgICBuYW1lOiAnQ0VSVElGSUNBVEUnLFxuICAgIHZhbHVlOiAnQ0VSVElGSUNBVEUnLFxuICAgIGxhYmVsOiBnZXR0ZXh0KCdDZXJ0aWZpY2F0ZScpXG4gIH1cbn0gYXMgY29uc3Q7XG5cbmV4cG9ydCBjb25zdCBjYW5BY3RpdmF0ZVJlbW90ZUFjY2VzczogQ2FuQWN0aXZhdGVGbiA9IChyb3V0ZTogQWN0aXZhdGVkUm91dGVTbmFwc2hvdCkgPT4ge1xuICBjb25zdCBwZXJtaXNzaW9ucyA9IGluamVjdChQZXJtaXNzaW9ucyk7XG4gIGNvbnN0IHJlbW90ZUFjY2Vzc1NlcnZpY2UgPSBpbmplY3QoUmVtb3RlQWNjZXNzU2VydmljZSk7XG4gIGNvbnN0IGNvbnRleHRSb3V0ZVNlcnZpY2UgPSBpbmplY3QoQ29udGV4dFJvdXRlU2VydmljZSk7XG4gIGlmICghcGVybWlzc2lvbnMuaGFzUm9sZShQZXJtaXNzaW9ucy5ST0xFX1JFTU9URV9BQ0NFU1NfQURNSU4pKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgY29uc3QgY29udGV4dERldGFpbHMgPSBjb250ZXh0Um91dGVTZXJ2aWNlLmdldENvbnRleHREYXRhKHJvdXRlKTtcbiAgaWYgKGNvbnRleHREZXRhaWxzLmNvbnRleHQgIT09IFZpZXdDb250ZXh0LkRldmljZSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGNvbnN0IGRldmljZSA9IGNvbnRleHREZXRhaWxzLmNvbnRleHREYXRhIGFzIElNYW5hZ2VkT2JqZWN0O1xuICBpZiAoIWRldmljZSB8fCAhQXJyYXkuaXNBcnJheShkZXZpY2UuYzh5X1N1cHBvcnRlZE9wZXJhdGlvbnMpKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIGNvbnN0IHN1cHBvcnRlZE9wZXJhdGlvbnM6IHN0cmluZ1tdID0gZGV2aWNlLmM4eV9TdXBwb3J0ZWRPcGVyYXRpb25zO1xuICBpZiAoIXN1cHBvcnRlZE9wZXJhdGlvbnMuaW5jbHVkZXMoJ2M4eV9SZW1vdGVBY2Nlc3NDb25uZWN0JykpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgcmV0dXJuIHJlbW90ZUFjY2Vzc1NlcnZpY2UuaXNBdmFpbGFibGUkKCk7XG59O1xuXG5ASW5qZWN0YWJsZSh7XG4gIHByb3ZpZGVkSW46ICdyb290J1xufSlcbmV4cG9ydCBjbGFzcyBSZW1vdGVBY2Nlc3NTZXJ2aWNlIHtcbiAgcHJpdmF0ZSBjYWNoZWRJc0F2YWlsYWJsZSQ6IE9ic2VydmFibGU8Ym9vbGVhbj47XG4gIHJlYWRvbmx5IGJhc2VVcmwgPSAnL3NlcnZpY2UvcmVtb3RlYWNjZXNzJztcbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBmZXRjaENsaWVudDogRmV0Y2hDbGllbnQsXG4gICAgcHJpdmF0ZSBzZXJ2aWNlUmVnaXN0cnk6IFNlcnZpY2VSZWdpc3RyeVxuICApIHt9XG5cbiAgLyoqXG4gICAqIFZlcmlmaWVzIGlmIHRoZSByZW1vdGUgYWNjZXNzIHNlcnZpY2UgaXMgYXZhaWxhYmxlIGJ5IHNlbmRpbmcgYSBIRUFEIHJlcXVlc3QgdG8gaXMncyBoZWFsdGggZW5kcG9pbnQuXG4gICAqIEByZXR1cm5zIGNhY2hlZCBPYnNlcnZhYmxlIHRoYXQgZW1pdHMgdHJ1ZSBpZiB0aGUgc2VydmljZSBpcyBhdmFpbGFibGUsIGZhbHNlIG90aGVyd2lzZS5cbiAgICovXG4gIGlzQXZhaWxhYmxlJCgpOiBPYnNlcnZhYmxlPGJvb2xlYW4+IHtcbiAgICBpZiAoIXRoaXMuY2FjaGVkSXNBdmFpbGFibGUkKSB7XG4gICAgICB0aGlzLmNhY2hlZElzQXZhaWxhYmxlJCA9IGRlZmVyKCgpID0+IHRoaXMuaGVhbHRoRW5kcG9pbnRBdmFpbGFibGUoKSkucGlwZShzaGFyZVJlcGxheSgxKSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuY2FjaGVkSXNBdmFpbGFibGUkO1xuICB9XG5cbiAgLyoqXG4gICAqIG1pc3NlcyB0aGUgbGVhZGluZyA/IGZvciB0aGUgcXVlcnkgcGFyYW1zXG4gICAqL1xuICBnZXRBdXRoUXVlcnlQYXJhbXNGb3JXZWJzb2NrZXRDb25uZWN0aW9uKCkge1xuICAgIGNvbnN0IHsgaGVhZGVycyB9ID0gdGhpcy5mZXRjaENsaWVudC5nZXRGZXRjaE9wdGlvbnMoKTtcbiAgICBjb25zdCBwYXJhbXMgPSBuZXcgVVJMU2VhcmNoUGFyYW1zKCk7XG5cbiAgICBpZiAoaGVhZGVycykge1xuICAgICAgY29uc3QgeHNyZlRva2VuID0gaGVhZGVyc1snWC1YU1JGLVRPS0VOJ107XG4gICAgICBjb25zdCBhdXRoID0gaGVhZGVyc1snQXV0aG9yaXphdGlvbiddO1xuXG4gICAgICBpZiAoeHNyZlRva2VuKSB7XG4gICAgICAgIHBhcmFtcy5hcHBlbmQoJ1hTUkYtVE9LRU4nLCB4c3JmVG9rZW4pO1xuICAgICAgfVxuICAgICAgaWYgKGF1dGgpIHtcbiAgICAgICAgcGFyYW1zLmFwcGVuZCgndG9rZW4nLCBhdXRoLnJlcGxhY2UoJ0JlYXJlciAnLCAnJykucmVwbGFjZSgnQmFzaWMgJywgJycpKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBwYXJhbXNTdHJpbmcgPSBwYXJhbXMudG9TdHJpbmcoKTtcbiAgICByZXR1cm4gcGFyYW1zU3RyaW5nO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIFVSSSBmb3IgdGhlIHdlYnNvY2tldCBjb25uZWN0aW9uIHRvIHRoZSByZW1vdGUgYWNjZXNzIHNlcnZpY2UuXG4gICAqL1xuICBnZXRXZWJTb2NrZXRVcmk8SyBleHRlbmRzIHN0cmluZywgSSBleHRlbmRzIHN0cmluZz4oZGV2aWNlSWQ6IEssIGNvbmZpZ3VyYXRpb25JZDogSSkge1xuICAgIGNvbnN0IGF1dGhRdWVyeVBhcmFtcyA9IHRoaXMuZ2V0QXV0aFF1ZXJ5UGFyYW1zRm9yV2Vic29ja2V0Q29ubmVjdGlvbigpO1xuICAgIGNvbnN0IHByb3RvY29sID0gd2luZG93LmxvY2F0aW9uLnByb3RvY29sID09PSAnaHR0cDonID8gJ3dzJyA6ICd3c3MnO1xuICAgIGNvbnN0IHBhdGhOYW1lID1cbiAgICAgIGAke3Byb3RvY29sfTovLyR7d2luZG93LmxvY2F0aW9uLmhvc3R9JHt0aGlzLmJhc2VVcmx9L2NsaWVudC8ke2RldmljZUlkfS9jb25maWd1cmF0aW9ucy8ke2NvbmZpZ3VyYXRpb25JZH1gIGFzIGNvbnN0O1xuICAgIHJldHVybiBhdXRoUXVlcnlQYXJhbXMgPyAoYCR7cGF0aE5hbWV9PyR7YXV0aFF1ZXJ5UGFyYW1zfWAgYXMgY29uc3QpIDogcGF0aE5hbWU7XG4gIH1cblxuICAvKipcbiAgICogUmV0cmlldmVzIGFsbCBjb25maWd1cmF0aW9ucyBmb3IgYSBnaXZlbiBkZXZpY2UuXG4gICAqL1xuICBhc3luYyBsaXN0Q29uZmlndXJhdGlvbnMoZGV2aWNlSWQ6IHN0cmluZyk6IFByb21pc2U8UmVtb3RlQWNjZXNzQ29uZmlndXJhdGlvbltdPiB7XG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLmZldGNoQ2xpZW50LmZldGNoKFxuICAgICAgYCR7dGhpcy5iYXNlVXJsfS9kZXZpY2VzLyR7ZGV2aWNlSWR9L2NvbmZpZ3VyYXRpb25zYFxuICAgICk7XG4gICAgaWYgKHJlc3BvbnNlLm9rKSB7XG4gICAgICByZXR1cm4gcmVzcG9uc2UuanNvbigpO1xuICAgIH1cblxuICAgIHRocm93IG5ldyBFcnJvcihgRmFpbGVkIHRvIGZldGNoIGNvbmZpZ3VyYXRpb25zIGZvciBkZXZpY2UgJHtkZXZpY2VJZH1gKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEZWxldGVzIGEgY29uZmlndXJhdGlvbiBmb3IgYSBnaXZlbiBkZXZpY2UuXG4gICAqL1xuICBhc3luYyBkZWxldGVDb25maWd1cmF0aW9uKGRldmljZUlkOiBzdHJpbmcsIGNvbmZpZ3VyYXRpb25JZDogc3RyaW5nKSB7XG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLmZldGNoQ2xpZW50LmZldGNoKFxuICAgICAgYCR7dGhpcy5iYXNlVXJsfS9kZXZpY2VzLyR7ZGV2aWNlSWR9L2NvbmZpZ3VyYXRpb25zLyR7Y29uZmlndXJhdGlvbklkfWAsXG4gICAgICB7IG1ldGhvZDogJ0RFTEVURScgfVxuICAgICk7XG5cbiAgICBpZiAocmVzcG9uc2Uub2spIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aHJvdyBuZXcgRXJyb3IoYEZhaWxlZCB0byBkZWxldGUgY29uZmlndXJhdGlvbiBmb3IgZGV2aWNlICR7ZGV2aWNlSWR9YCk7XG4gIH1cblxuICAvKipcbiAgICogUmV0cmlldmVzIGFsbCBhdmFpbGFibGUgcmVtb3RlIGFjY2VzcyBwcm90b2NvbCBwcm92aWRlcnMuXG4gICAqL1xuICBnZXRQcm90b2NvbFByb3ZpZGVycygpIHtcbiAgICByZXR1cm4gdGhpcy5zZXJ2aWNlUmVnaXN0cnkuZ2V0KCdyZW1vdGVBY2Nlc3NQcm90b2NvbEhvb2snKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXRyaWV2ZXMgYWxsIHN1cHBvcnRlZCBwcm90b2NvbCBwcm92aWRlcnMgZm9yIGEgZ2l2ZW4gZGV2aWNlLlxuICAgKiBCYXNlZCBvbiB0aGUgZGVjbGFyYXRpb25zIGluIHRoZSBmcmFnbWVudCBjOHlfUmVtb3RlQWNjZXNzU3VwcG9ydGVkUHJvdG9jb2xzIG9mIHRoZSBkZXZpY2UgbWFuYWdlZCBvYmplY3QuXG4gICAqL1xuICBnZXRTdXBwb3J0ZWRQcm90b2NvbFByb3ZpZGVyc0ZvcihkZXZpY2U6IElNYW5hZ2VkT2JqZWN0KTogUmVtb3RlQWNjZXNzUHJvdG9jb2xQcm92aWRlcltdIHtcbiAgICBjb25zdCB7IGM4eV9SZW1vdGVBY2Nlc3NTdXBwb3J0ZWRQcm90b2NvbHMgPSBbXSB9ID0gZGV2aWNlO1xuICAgIGNvbnN0IHVuaXF1ZUlucHV0ID0gdW5pcVdpdGgoXG4gICAgICBjOHlfUmVtb3RlQWNjZXNzU3VwcG9ydGVkUHJvdG9jb2xzLm1hcChwID0+IHAudG9VcHBlckNhc2UoKSksXG4gICAgICBpc0VxdWFsXG4gICAgKTtcbiAgICBjb25zdCBzdXBwb3J0ZWRQcm92aWRlcnMgPSBpbnRlcnNlY3Rpb25XaXRoKFxuICAgICAgdGhpcy5nZXRQcm90b2NvbFByb3ZpZGVycygpLFxuICAgICAgdW5pcXVlSW5wdXQsXG4gICAgICAoeyBwcm90b2NvbE5hbWUgfSwgcHJvdG9jb2wpID0+IHByb3RvY29sTmFtZT8udG9VcHBlckNhc2UoKSA9PT0gcHJvdG9jb2xcbiAgICApO1xuICAgIHJldHVybiBzdXBwb3J0ZWRQcm92aWRlcnM/Lmxlbmd0aCA+IDAgPyBzdXBwb3J0ZWRQcm92aWRlcnMgOiB0aGlzLmdldFByb3RvY29sUHJvdmlkZXJzKCk7XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlcyBhIG5ldyBjb25maWd1cmF0aW9uIGZvciBhIGdpdmVuIGRldmljZS5cbiAgICovXG4gIGFzeW5jIGFkZENvbmZpZ3VyYXRpb24oXG4gICAgZGV2aWNlSWQ6IHN0cmluZyxcbiAgICBjb25maWd1cmF0aW9uOiBPbWl0PFJlbW90ZUFjY2Vzc0NvbmZpZ3VyYXRpb24sICdpZCc+XG4gICk6IFByb21pc2U8UmVtb3RlQWNjZXNzQ29uZmlndXJhdGlvbj4ge1xuICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5mZXRjaENsaWVudC5mZXRjaChcbiAgICAgIGAke3RoaXMuYmFzZVVybH0vZGV2aWNlcy8ke2RldmljZUlkfS9jb25maWd1cmF0aW9uc2AsXG4gICAgICB7XG4gICAgICAgIG1ldGhvZDogJ1BPU1QnLFxuICAgICAgICBoZWFkZXJzOiB7XG4gICAgICAgICAgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJ1xuICAgICAgICB9LFxuICAgICAgICBib2R5OiBKU09OLnN0cmluZ2lmeShjb25maWd1cmF0aW9uKVxuICAgICAgfVxuICAgICk7XG5cbiAgICBpZiAocmVzcG9uc2Uub2spIHtcbiAgICAgIHJldHVybiByZXNwb25zZS5qc29uKCk7XG4gICAgfVxuXG4gICAgdGhyb3cgbmV3IEVycm9yKGBGYWlsZWQgdG8gYWRkIGNvbmZpZ3VyYXRpb24gZm9yIGRldmljZSAke2NvbmZpZ3VyYXRpb24uYXR0cnMuZGV2aWNlSWR9YCk7XG4gIH1cblxuICAvKipcbiAgICogVXBkYXRlcyBhIGNvbmZpZ3VyYXRpb24gZm9yIGEgZ2l2ZW4gZGV2aWNlLlxuICAgKi9cbiAgYXN5bmMgdXBkYXRlQ29uZmlndXJhdGlvbihcbiAgICBkZXZpY2VJZDogc3RyaW5nLFxuICAgIGNvbmZpZ3VyYXRpb246IFJlbW90ZUFjY2Vzc0NvbmZpZ3VyYXRpb25cbiAgKTogUHJvbWlzZTxSZW1vdGVBY2Nlc3NDb25maWd1cmF0aW9uPiB7XG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLmZldGNoQ2xpZW50LmZldGNoKFxuICAgICAgYCR7dGhpcy5iYXNlVXJsfS9kZXZpY2VzLyR7ZGV2aWNlSWR9L2NvbmZpZ3VyYXRpb25zLyR7Y29uZmlndXJhdGlvbi5pZH1gLFxuICAgICAge1xuICAgICAgICBtZXRob2Q6ICdQVVQnLFxuICAgICAgICBoZWFkZXJzOiB7XG4gICAgICAgICAgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJ1xuICAgICAgICB9LFxuICAgICAgICBib2R5OiBKU09OLnN0cmluZ2lmeShjb25maWd1cmF0aW9uKVxuICAgICAgfVxuICAgICk7XG5cbiAgICBpZiAocmVzcG9uc2Uub2spIHtcbiAgICAgIHJldHVybiByZXNwb25zZS5qc29uKCk7XG4gICAgfVxuXG4gICAgdGhyb3cgbmV3IEVycm9yKGBGYWlsZWQgdG8gdXBkYXRlIGNvbmZpZ3VyYXRpb24gZm9yIGRldmljZSAke2NvbmZpZ3VyYXRpb24uYXR0cnMuZGV2aWNlSWR9YCk7XG4gIH1cblxuICAvKipcbiAgICogR2VuZXJhdGVzIGEgU1NIIGtleSBwYWlyIGZvciBhIGdpdmVuIGhvc3RuYW1lLlxuICAgKi9cbiAgYXN5bmMgZ2VuZXJhdGVLZXlQYWlyKGhvc3RuYW1lOiBzdHJpbmcpOiBQcm9taXNlPHsgcHVibGljS2V5OiBzdHJpbmc7IHByaXZhdGVLZXk6IHN0cmluZyB9PiB7XG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLmZldGNoQ2xpZW50LmZldGNoKGAke3RoaXMuYmFzZVVybH0va2V5cGFpci9nZW5lcmF0ZWAsIHtcbiAgICAgIG1ldGhvZDogJ1BPU1QnLFxuICAgICAgaGVhZGVyczoge1xuICAgICAgICAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL2pzb24nXG4gICAgICB9LFxuICAgICAgYm9keTogSlNPTi5zdHJpbmdpZnkoeyBob3N0bmFtZSB9KVxuICAgIH0pO1xuXG4gICAgaWYgKHJlc3BvbnNlLm9rKSB7XG4gICAgICByZXR1cm4gcmVzcG9uc2UuanNvbigpO1xuICAgIH1cblxuICAgIHRocm93IG5ldyBFcnJvcihgRmFpbGVkIHRvIGdlbmVyYXRlIGtleSBwYWlyIGZvciAke2hvc3RuYW1lfWApO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBoZWFsdGhFbmRwb2ludEF2YWlsYWJsZSgpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLmZldGNoQ2xpZW50LmZldGNoKGAke3RoaXMuYmFzZVVybH0vaGVhbHRoYCwge1xuICAgICAgICBtZXRob2Q6ICdIRUFEJyxcbiAgICAgICAgaGVhZGVyczoge1xuICAgICAgICAgICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24vanNvbidcbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICAgIGlmIChyZXNwb25zZS5vaykge1xuICAgICAgICByZXR1cm4gISFyZXNwb25zZS5vaztcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG59XG4iXX0=
@@ -1,4 +1,4 @@
1
- import * as i3 from '@c8y/ngx-components';
1
+ import * as i2 from '@c8y/ngx-components';
2
2
  import { IconDirective, C8yTranslatePipe, gettext, CoreModule, EmptyComponent, BuiltInActionType, Status, DataGridModule, TitleComponent, C8yTranslateDirective, ActionBarItemComponent, EmptyStateComponent, hookRoute, ViewContext } from '@c8y/ngx-components';
3
3
  import { gettext as gettext$1 } from '@c8y/ngx-components/gettext';
4
4
  import * as i0 from '@angular/core';
@@ -7,9 +7,9 @@ import * as i2$1 from '@angular/router';
7
7
  import { RouterLinkWithHref } from '@angular/router';
8
8
  import * as i1 from '@c8y/ngx-components/remote-access/data';
9
9
  import { canActivateRemoteAccess } from '@c8y/ngx-components/remote-access/data';
10
- import * as i4 from '@angular/common';
10
+ import * as i3 from '@angular/common';
11
11
  import { NgIf } from '@angular/common';
12
- import * as i2 from 'ngx-bootstrap/modal';
12
+ import * as i1$1 from 'ngx-bootstrap/modal';
13
13
  import { IconDeviceGridColumn } from '@c8y/ngx-components/device-grid';
14
14
  import * as i5 from '@ngx-translate/core';
15
15
 
@@ -55,27 +55,26 @@ class RemoteAccessConnectButtonComponent {
55
55
  }, { allowSignalWrites: true });
56
56
  return resultSignal.asReadonly();
57
57
  }
58
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: RemoteAccessConnectButtonComponent, deps: [{ token: i1.RemoteAccessService }, { token: i3.CellRendererContext, optional: true }], target: i0.ɵɵFactoryTarget.Component }); }
58
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: RemoteAccessConnectButtonComponent, deps: [{ token: i1.RemoteAccessService }, { token: i2.CellRendererContext, optional: true }], target: i0.ɵɵFactoryTarget.Component }); }
59
59
  static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "18.2.13", type: RemoteAccessConnectButtonComponent, isStandalone: true, selector: "c8y-remote-access-connect-button", inputs: { deviceId: { classPropertyName: "deviceId", publicName: "deviceId", isSignal: true, isRequired: false, transformFunction: null }, configurationId: { classPropertyName: "configurationId", publicName: "configurationId", isSignal: true, isRequired: false, transformFunction: null }, protocol: { classPropertyName: "protocol", publicName: "protocol", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: "<a\n *ngIf=\"connectHref() as endpointHref\"\n [title]=\"'Connect' | translate\"\n [routerLink]=\"endpointHref\"\n [attr.data-cy]=\"'remoteAccessConnectButton'\"\n>\n <i [c8yIcon]=\"'connected'\"></i>\n</a>\n", dependencies: [{ kind: "directive", type: RouterLinkWithHref, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "directive", type: IconDirective, selector: "[c8yIcon]", inputs: ["c8yIcon"] }, { kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "pipe", type: C8yTranslatePipe, name: "translate" }] }); }
60
60
  }
61
61
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: RemoteAccessConnectButtonComponent, decorators: [{
62
62
  type: Component,
63
63
  args: [{ selector: 'c8y-remote-access-connect-button', standalone: true, imports: [RouterLinkWithHref, IconDirective, NgIf, C8yTranslatePipe], template: "<a\n *ngIf=\"connectHref() as endpointHref\"\n [title]=\"'Connect' | translate\"\n [routerLink]=\"endpointHref\"\n [attr.data-cy]=\"'remoteAccessConnectButton'\"\n>\n <i [c8yIcon]=\"'connected'\"></i>\n</a>\n" }]
64
- }], ctorParameters: () => [{ type: i1.RemoteAccessService }, { type: i3.CellRendererContext, decorators: [{
64
+ }], ctorParameters: () => [{ type: i1.RemoteAccessService }, { type: i2.CellRendererContext, decorators: [{
65
65
  type: Optional
66
66
  }] }] });
67
67
 
68
68
  class RemoteAccessPickProtocolModalComponent {
69
- constructor(remoteAccess, bsModalRef) {
70
- this.remoteAccess = remoteAccess;
69
+ constructor(bsModalRef) {
71
70
  this.bsModalRef = bsModalRef;
72
71
  this.title = gettext('Select a protocol');
73
72
  this.result = new Promise((resolve, reject) => {
74
73
  this._resolve = resolve;
75
74
  this._reject = reject;
76
75
  });
76
+ // set via initialState
77
77
  this.protocolProviders = [];
78
- this.protocolProviders = this.remoteAccess.getProtocolProviders();
79
78
  }
80
79
  cancel() {
81
80
  this._reject();
@@ -84,22 +83,23 @@ class RemoteAccessPickProtocolModalComponent {
84
83
  this.bsModalRef.hide();
85
84
  this._resolve(protocol);
86
85
  }
87
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: RemoteAccessPickProtocolModalComponent, deps: [{ token: i1.RemoteAccessService }, { token: i2.BsModalRef }], target: i0.ɵɵFactoryTarget.Component }); }
88
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: RemoteAccessPickProtocolModalComponent, isStandalone: true, selector: "c8y-remote-access-pick-protocol-modal", ngImport: i0, template: "<c8y-modal\n [title]=\"title\"\n [headerClasses]=\"'dialog-header'\"\n (onDismiss)=\"cancel()\"\n [labels]=\"{ cancel: 'Cancel' }\"\n>\n <ng-container c8y-modal-title>\n <span [c8yIcon]=\"'laptop'\"></span>\n </ng-container>\n <div class=\"p-24\">\n <c8y-li *ngFor=\"let provider of protocolProviders\">\n <c8y-li-icon>\n <i [c8yIcon]=\"provider.protocolIcon\"></i>\n </c8y-li-icon>\n <c8y-li-body>\n <div class=\"d-flex j-c-between\">\n <div>\n <p>{{ provider.protocolLabel | translate }}</p>\n <p>\n <small>{{ provider.protocolDescription | translate }}</small>\n </p>\n </div>\n <div>\n <button\n class=\"btn btn-primary\"\n (click)=\"selectProtocol(provider)\"\n [attr.data-cy]=\"'remoteAccessPickProtocolModal--select-' + provider.protocolName\"\n >\n <span translate>Select</span>\n </button>\n </div>\n </div>\n </c8y-li-body>\n </c8y-li>\n </div>\n</c8y-modal>\n", dependencies: [{ kind: "ngmodule", type: CoreModule }, { kind: "directive", type: i3.IconDirective, selector: "[c8yIcon]", inputs: ["c8yIcon"] }, { kind: "pipe", type: i3.C8yTranslatePipe, name: "translate" }, { kind: "directive", type: i3.C8yTranslateDirective, selector: "[translate],[ngx-translate]" }, { kind: "directive", type: i4.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "component", type: i3.ModalComponent, selector: "c8y-modal", inputs: ["disabled", "close", "dismiss", "title", "body", "customFooter", "headerClasses", "labels"], outputs: ["onDismiss", "onClose"] }, { kind: "component", type: i3.ListItemComponent, selector: "c8y-list-item, c8y-li", inputs: ["active", "highlighted", "emptyActions", "dense", "collapsed", "selectable"], outputs: ["collapsedChange"] }, { kind: "component", type: i3.ListItemIconComponent, selector: "c8y-list-item-icon, c8y-li-icon", inputs: ["icon", "status"] }, { kind: "component", type: i3.ListItemBodyComponent, selector: "c8y-list-item-body, c8y-li-body", inputs: ["body"] }] }); }
86
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: RemoteAccessPickProtocolModalComponent, deps: [{ token: i1$1.BsModalRef }], target: i0.ɵɵFactoryTarget.Component }); }
87
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: RemoteAccessPickProtocolModalComponent, isStandalone: true, selector: "c8y-remote-access-pick-protocol-modal", ngImport: i0, template: "<c8y-modal\n [title]=\"title\"\n [headerClasses]=\"'dialog-header'\"\n (onDismiss)=\"cancel()\"\n [labels]=\"{ cancel: 'Cancel' }\"\n>\n <ng-container c8y-modal-title>\n <span [c8yIcon]=\"'laptop'\"></span>\n </ng-container>\n <div class=\"p-24\">\n <c8y-li *ngFor=\"let provider of protocolProviders\">\n <c8y-li-icon>\n <i [c8yIcon]=\"provider.protocolIcon\"></i>\n </c8y-li-icon>\n <c8y-li-body>\n <div class=\"d-flex j-c-between\">\n <div>\n <p>{{ provider.protocolLabel | translate }}</p>\n <p>\n <small>{{ provider.protocolDescription | translate }}</small>\n </p>\n </div>\n <div>\n <button\n class=\"btn btn-primary\"\n (click)=\"selectProtocol(provider)\"\n [attr.data-cy]=\"'remoteAccessPickProtocolModal--select-' + provider.protocolName\"\n >\n <span translate>Select</span>\n </button>\n </div>\n </div>\n </c8y-li-body>\n </c8y-li>\n </div>\n</c8y-modal>\n", dependencies: [{ kind: "ngmodule", type: CoreModule }, { kind: "directive", type: i2.IconDirective, selector: "[c8yIcon]", inputs: ["c8yIcon"] }, { kind: "pipe", type: i2.C8yTranslatePipe, name: "translate" }, { kind: "directive", type: i2.C8yTranslateDirective, selector: "[translate],[ngx-translate]" }, { kind: "directive", type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "component", type: i2.ModalComponent, selector: "c8y-modal", inputs: ["disabled", "close", "dismiss", "title", "body", "customFooter", "headerClasses", "labels"], outputs: ["onDismiss", "onClose"] }, { kind: "component", type: i2.ListItemComponent, selector: "c8y-list-item, c8y-li", inputs: ["active", "highlighted", "emptyActions", "dense", "collapsed", "selectable"], outputs: ["collapsedChange"] }, { kind: "component", type: i2.ListItemIconComponent, selector: "c8y-list-item-icon, c8y-li-icon", inputs: ["icon", "status"] }, { kind: "component", type: i2.ListItemBodyComponent, selector: "c8y-list-item-body, c8y-li-body", inputs: ["body"] }] }); }
89
88
  }
90
89
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: RemoteAccessPickProtocolModalComponent, decorators: [{
91
90
  type: Component,
92
91
  args: [{ selector: 'c8y-remote-access-pick-protocol-modal', standalone: true, imports: [CoreModule], template: "<c8y-modal\n [title]=\"title\"\n [headerClasses]=\"'dialog-header'\"\n (onDismiss)=\"cancel()\"\n [labels]=\"{ cancel: 'Cancel' }\"\n>\n <ng-container c8y-modal-title>\n <span [c8yIcon]=\"'laptop'\"></span>\n </ng-container>\n <div class=\"p-24\">\n <c8y-li *ngFor=\"let provider of protocolProviders\">\n <c8y-li-icon>\n <i [c8yIcon]=\"provider.protocolIcon\"></i>\n </c8y-li-icon>\n <c8y-li-body>\n <div class=\"d-flex j-c-between\">\n <div>\n <p>{{ provider.protocolLabel | translate }}</p>\n <p>\n <small>{{ provider.protocolDescription | translate }}</small>\n </p>\n </div>\n <div>\n <button\n class=\"btn btn-primary\"\n (click)=\"selectProtocol(provider)\"\n [attr.data-cy]=\"'remoteAccessPickProtocolModal--select-' + provider.protocolName\"\n >\n <span translate>Select</span>\n </button>\n </div>\n </div>\n </c8y-li-body>\n </c8y-li>\n </div>\n</c8y-modal>\n" }]
93
- }], ctorParameters: () => [{ type: i1.RemoteAccessService }, { type: i2.BsModalRef }] });
92
+ }], ctorParameters: () => [{ type: i1$1.BsModalRef }] });
94
93
 
95
94
  class RemoteAccessConfigurationListComponent {
96
- constructor(remoteAccess, activatedRoute, modalService, alert, bsModalService, translateService) {
95
+ constructor(remoteAccess, activatedRoute, modalService, alert, bsModalService, translateService, ctx) {
97
96
  this.remoteAccess = remoteAccess;
98
97
  this.activatedRoute = activatedRoute;
99
98
  this.modalService = modalService;
100
99
  this.alert = alert;
101
100
  this.bsModalService = bsModalService;
102
101
  this.translateService = translateService;
102
+ this.ctx = ctx;
103
103
  this.rows = [];
104
104
  this.columns = [
105
105
  new IconDeviceGridColumn({
@@ -192,8 +192,9 @@ class RemoteAccessConfigurationListComponent {
192
192
  };
193
193
  this.protocolProviders = [];
194
194
  this.gridTitle = gettext('Remote access endpoints');
195
- this.protocolProviders = this.remoteAccess.getProtocolProviders();
196
- this.deviceId = this.activatedRoute.parent.snapshot.params.id;
195
+ this.device = this.ctx.getContextData(this.activatedRoute)?.contextData;
196
+ this.deviceId = this.device?.id;
197
+ this.protocolProviders = this.remoteAccess.getSupportedProtocolProvidersFor(this.device);
197
198
  const connectColum = this.columns.find(c => c.name === 'connect');
198
199
  if (connectColum) {
199
200
  connectColum.target = this.deviceId;
@@ -204,14 +205,17 @@ class RemoteAccessConfigurationListComponent {
204
205
  }
205
206
  async reload() {
206
207
  const configurations = await this.remoteAccess.listConfigurations(this.deviceId);
207
- const supportedProtocols = this.protocolProviders.map(p => p.protocolName);
208
- this.rows = configurations.filter(c => supportedProtocols.includes(c.protocol));
208
+ const supportedProtocols = this.remoteAccess.getSupportedProtocolProvidersFor(this.device);
209
+ const supportedProtocolsNames = supportedProtocols.map(p => p.protocolName);
210
+ this.rows = configurations.filter(c => supportedProtocolsNames.includes(c.protocol.toUpperCase()));
209
211
  }
210
212
  async addEndpoint() {
211
213
  let provider = null;
212
214
  if (this.protocolProviders.length > 1) {
213
215
  try {
214
- const modalRef = this.bsModalService.show(RemoteAccessPickProtocolModalComponent);
216
+ const modalRef = this.bsModalService.show(RemoteAccessPickProtocolModalComponent, {
217
+ initialState: { protocolProviders: this.protocolProviders }
218
+ });
215
219
  provider = await modalRef.content.result;
216
220
  }
217
221
  catch (e) {
@@ -279,8 +283,8 @@ class RemoteAccessConfigurationListComponent {
279
283
  return null;
280
284
  }
281
285
  }
282
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: RemoteAccessConfigurationListComponent, deps: [{ token: i1.RemoteAccessService }, { token: i2$1.ActivatedRoute }, { token: i3.ModalService }, { token: i3.AlertService }, { token: i2.BsModalService }, { token: i5.TranslateService }], target: i0.ɵɵFactoryTarget.Component }); }
283
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: RemoteAccessConfigurationListComponent, isStandalone: true, selector: "c8y-remote-access-configuration-list", ngImport: i0, template: "<c8y-title translate>Remote access</c8y-title>\n\n<c8y-action-bar-item [placement]=\"'right'\">\n <button\n class=\"btn btn-link\"\n (click)=\"addEndpoint()\"\n [disabled]=\"!protocolProviders?.length\"\n [attr.data-cy]=\"'remoteAccessConfigurationList--add-endpoint'\"\n >\n <i [c8yIcon]=\"'plus-circle'\"></i>\n <span translate>Add endpoint</span>\n </button>\n</c8y-action-bar-item>\n\n<div class=\"content-fullpage d-flex d-col border-top\">\n <c8y-data-grid\n [title]=\"gridTitle\"\n [rows]=\"rows\"\n [columns]=\"columns\"\n [pagination]=\"pagination\"\n (onReload)=\"reload()\"\n [actionControls]=\"actionControls\"\n [displayOptions]=\"displayOptions\"\n >\n <c8y-ui-empty-state\n [icon]=\"'window-restore'\"\n [title]=\"'No endpoints configured.' | translate\"\n [subtitle]=\"'Click below to add your first endpoint.' | translate\"\n [horizontal]=\"false\"\n >\n <button\n class=\"btn btn-default\"\n (click)=\"addEndpoint()\"\n translate\n >\n Add endpoint\n </button>\n </c8y-ui-empty-state>\n </c8y-data-grid>\n</div>\n", dependencies: [{ kind: "ngmodule", type: DataGridModule }, { kind: "component", type: i3.DataGridComponent, selector: "c8y-data-grid", inputs: ["title", "loadMoreItemsLabel", "loadingItemsLabel", "showSearch", "refresh", "columns", "rows", "pagination", "infiniteScroll", "serverSideDataCallback", "selectable", "singleSelection", "selectionPrimaryKey", "displayOptions", "actionControls", "bulkActionControls", "headerActionControls", "searchText", "configureColumnsEnabled", "showCounterWarning", "activeClassName", "expandableRows", "hideReload"], outputs: ["rowMouseOver", "rowMouseLeave", "rowClick", "onConfigChange", "onBeforeFilter", "onBeforeSearch", "onFilter", "itemsSelect", "onReload", "onAddCustomColumn", "onRemoveCustomColumn", "onColumnFilterReset", "onSort", "onPageSizeChange", "onColumnReordered", "onColumnVisibilityChange"] }, { kind: "component", type: TitleComponent, selector: "c8y-title", inputs: ["pageTitleUpdate"] }, { kind: "directive", type: C8yTranslateDirective, selector: "[translate],[ngx-translate]" }, { kind: "component", type: ActionBarItemComponent, selector: "c8y-action-bar-item", inputs: ["placement", "priority", "itemClass", "injector", "groupId", "inGroupPriority"] }, { kind: "directive", type: IconDirective, selector: "[c8yIcon]", inputs: ["c8yIcon"] }, { kind: "component", type: EmptyStateComponent, selector: "c8y-ui-empty-state", inputs: ["icon", "title", "subtitle", "horizontal"] }, { kind: "pipe", type: C8yTranslatePipe, name: "translate" }] }); }
286
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: RemoteAccessConfigurationListComponent, deps: [{ token: i1.RemoteAccessService }, { token: i2$1.ActivatedRoute }, { token: i2.ModalService }, { token: i2.AlertService }, { token: i1$1.BsModalService }, { token: i5.TranslateService }, { token: i2.ContextRouteService }], target: i0.ɵɵFactoryTarget.Component }); }
287
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: RemoteAccessConfigurationListComponent, isStandalone: true, selector: "c8y-remote-access-configuration-list", ngImport: i0, template: "<c8y-title translate>Remote access</c8y-title>\n\n<c8y-action-bar-item [placement]=\"'right'\">\n <button\n class=\"btn btn-link\"\n (click)=\"addEndpoint()\"\n [disabled]=\"!protocolProviders?.length\"\n [attr.data-cy]=\"'remoteAccessConfigurationList--add-endpoint'\"\n >\n <i [c8yIcon]=\"'plus-circle'\"></i>\n <span translate>Add endpoint</span>\n </button>\n</c8y-action-bar-item>\n\n<div class=\"content-fullpage d-flex d-col border-top\">\n <c8y-data-grid\n [title]=\"gridTitle\"\n [rows]=\"rows\"\n [columns]=\"columns\"\n [pagination]=\"pagination\"\n (onReload)=\"reload()\"\n [actionControls]=\"actionControls\"\n [displayOptions]=\"displayOptions\"\n >\n <c8y-ui-empty-state\n [icon]=\"'window-restore'\"\n [title]=\"'No endpoints configured.' | translate\"\n [subtitle]=\"'Click below to add your first endpoint.' | translate\"\n [horizontal]=\"false\"\n >\n <button\n class=\"btn btn-default\"\n (click)=\"addEndpoint()\"\n translate\n >\n Add endpoint\n </button>\n </c8y-ui-empty-state>\n </c8y-data-grid>\n</div>\n", dependencies: [{ kind: "ngmodule", type: DataGridModule }, { kind: "component", type: i2.DataGridComponent, selector: "c8y-data-grid", inputs: ["title", "loadMoreItemsLabel", "loadingItemsLabel", "showSearch", "refresh", "columns", "rows", "pagination", "infiniteScroll", "serverSideDataCallback", "selectable", "singleSelection", "selectionPrimaryKey", "displayOptions", "actionControls", "bulkActionControls", "headerActionControls", "searchText", "configureColumnsEnabled", "showCounterWarning", "activeClassName", "expandableRows", "hideReload"], outputs: ["rowMouseOver", "rowMouseLeave", "rowClick", "onConfigChange", "onBeforeFilter", "onBeforeSearch", "onFilter", "itemsSelect", "onReload", "onAddCustomColumn", "onRemoveCustomColumn", "onColumnFilterReset", "onSort", "onPageSizeChange", "onColumnReordered", "onColumnVisibilityChange"] }, { kind: "component", type: TitleComponent, selector: "c8y-title", inputs: ["pageTitleUpdate"] }, { kind: "directive", type: C8yTranslateDirective, selector: "[translate],[ngx-translate]" }, { kind: "component", type: ActionBarItemComponent, selector: "c8y-action-bar-item", inputs: ["placement", "priority", "itemClass", "injector", "groupId", "inGroupPriority"] }, { kind: "directive", type: IconDirective, selector: "[c8yIcon]", inputs: ["c8yIcon"] }, { kind: "component", type: EmptyStateComponent, selector: "c8y-ui-empty-state", inputs: ["icon", "title", "subtitle", "horizontal"] }, { kind: "pipe", type: C8yTranslatePipe, name: "translate" }] }); }
284
288
  }
285
289
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: RemoteAccessConfigurationListComponent, decorators: [{
286
290
  type: Component,
@@ -293,7 +297,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
293
297
  EmptyStateComponent,
294
298
  C8yTranslatePipe
295
299
  ], template: "<c8y-title translate>Remote access</c8y-title>\n\n<c8y-action-bar-item [placement]=\"'right'\">\n <button\n class=\"btn btn-link\"\n (click)=\"addEndpoint()\"\n [disabled]=\"!protocolProviders?.length\"\n [attr.data-cy]=\"'remoteAccessConfigurationList--add-endpoint'\"\n >\n <i [c8yIcon]=\"'plus-circle'\"></i>\n <span translate>Add endpoint</span>\n </button>\n</c8y-action-bar-item>\n\n<div class=\"content-fullpage d-flex d-col border-top\">\n <c8y-data-grid\n [title]=\"gridTitle\"\n [rows]=\"rows\"\n [columns]=\"columns\"\n [pagination]=\"pagination\"\n (onReload)=\"reload()\"\n [actionControls]=\"actionControls\"\n [displayOptions]=\"displayOptions\"\n >\n <c8y-ui-empty-state\n [icon]=\"'window-restore'\"\n [title]=\"'No endpoints configured.' | translate\"\n [subtitle]=\"'Click below to add your first endpoint.' | translate\"\n [horizontal]=\"false\"\n >\n <button\n class=\"btn btn-default\"\n (click)=\"addEndpoint()\"\n translate\n >\n Add endpoint\n </button>\n </c8y-ui-empty-state>\n </c8y-data-grid>\n</div>\n" }]
296
- }], ctorParameters: () => [{ type: i1.RemoteAccessService }, { type: i2$1.ActivatedRoute }, { type: i3.ModalService }, { type: i3.AlertService }, { type: i2.BsModalService }, { type: i5.TranslateService }] });
300
+ }], ctorParameters: () => [{ type: i1.RemoteAccessService }, { type: i2$1.ActivatedRoute }, { type: i2.ModalService }, { type: i2.AlertService }, { type: i1$1.BsModalService }, { type: i5.TranslateService }, { type: i2.ContextRouteService }] });
297
301
 
298
302
  const remoteAccessConfigurationListProviders = [
299
303
  hookRoute({