@c8y/ngx-components 1017.0.8 → 1017.0.10
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.
- package/core/dynamic-component/dynamic-component.component.d.ts +1 -0
- package/core/dynamic-component/dynamic-component.model.d.ts +45 -9
- package/esm2020/actility-device-registration/actility-device-registration.component.mjs +3 -3
- package/esm2020/context-dashboard/context-dashboard.component.mjs +3 -3
- package/esm2020/context-dashboard/dashboard-detail.component.mjs +3 -3
- package/esm2020/context-dashboard/device-info-dashboard/device-info-dashboard.component.mjs +43 -51
- package/esm2020/context-dashboard/widget-preview.component.mjs +3 -3
- package/esm2020/core/authentication/sms-challenge.component.mjs +3 -3
- package/esm2020/core/authentication/totp-challenge.component.mjs +3 -3
- package/esm2020/core/breadcrumb/breadcrumb-outlet.component.mjs +3 -3
- package/esm2020/core/dashboard/dashboard-child.component.mjs +3 -3
- package/esm2020/core/dashboard/widget-time-context.component.mjs +3 -3
- package/esm2020/core/data-grid/data-grid.component.mjs +3 -3
- package/esm2020/core/date-picker/date-picker.component.mjs +3 -3
- package/esm2020/core/drop-area/drop-area.component.mjs +3 -3
- package/esm2020/core/dynamic-component/dynamic-component.component.mjs +21 -5
- package/esm2020/core/dynamic-component/dynamic-component.model.mjs +7 -1
- package/esm2020/core/file-picker/file-picker.component.mjs +3 -3
- package/esm2020/core/header/application/app-switcher.component.mjs +3 -3
- package/esm2020/core/login/credentials.component.mjs +3 -3
- package/esm2020/core/login/login.component.mjs +3 -3
- package/esm2020/core/modal/modal.component.mjs +3 -3
- package/esm2020/core/select/typeahead.component.mjs +3 -3
- package/esm2020/device-grid/columns/alarms.cell-renderer.component.mjs +3 -3
- package/esm2020/loriot-device-registration/loriot-device-registration-button.component.mjs +3 -1
- package/esm2020/loriot-device-registration/loriot-device-registration.component.mjs +3 -3
- package/esm2020/operations/bulk-operations-list/bulk-operations-list.component.mjs +3 -3
- package/esm2020/operations/operations-list/operations-list-item.component.mjs +3 -3
- package/esm2020/operations/operations-list/operations-list.component.mjs +3 -3
- package/esm2020/register-device/bulk/bulk-device-registration-modal.component.mjs +3 -3
- package/esm2020/register-device/extensible/bulk/extensible-bulk-device-registration-modal.component.mjs +3 -3
- package/esm2020/register-device/extensible/single/extensible-device-registration-modal.component.mjs +3 -3
- package/esm2020/register-device/general/general-device-registration.component.mjs +3 -3
- package/esm2020/repository/software/device-tab/device-software-list.component.mjs +3 -3
- package/esm2020/repository/software/device-tab/installed-software.component.mjs +3 -3
- package/esm2020/repository/software/list/add-software-modal.component.mjs +3 -3
- package/esm2020/sigfox-device-registration/sigfox-device-registration.component.mjs +3 -3
- package/fesm2015/c8y-ngx-components-actility-device-registration.mjs +2 -2
- package/fesm2015/c8y-ngx-components-actility-device-registration.mjs.map +1 -1
- package/fesm2015/c8y-ngx-components-context-dashboard.mjs +48 -56
- package/fesm2015/c8y-ngx-components-context-dashboard.mjs.map +1 -1
- package/fesm2015/c8y-ngx-components-device-grid.mjs +2 -2
- package/fesm2015/c8y-ngx-components-device-grid.mjs.map +1 -1
- package/fesm2015/c8y-ngx-components-loriot-device-registration.mjs +4 -2
- package/fesm2015/c8y-ngx-components-loriot-device-registration.mjs.map +1 -1
- package/fesm2015/c8y-ngx-components-operations-bulk-operations-list.mjs +2 -2
- package/fesm2015/c8y-ngx-components-operations-bulk-operations-list.mjs.map +1 -1
- package/fesm2015/c8y-ngx-components-operations-operations-list.mjs +4 -4
- package/fesm2015/c8y-ngx-components-operations-operations-list.mjs.map +1 -1
- package/fesm2015/c8y-ngx-components-register-device.mjs +8 -8
- package/fesm2015/c8y-ngx-components-register-device.mjs.map +1 -1
- package/fesm2015/c8y-ngx-components-repository-software.mjs +6 -6
- package/fesm2015/c8y-ngx-components-repository-software.mjs.map +1 -1
- package/fesm2015/c8y-ngx-components-sigfox-device-registration.mjs +2 -2
- package/fesm2015/c8y-ngx-components-sigfox-device-registration.mjs.map +1 -1
- package/fesm2015/c8y-ngx-components.mjs +72 -46
- package/fesm2015/c8y-ngx-components.mjs.map +1 -1
- package/fesm2020/c8y-ngx-components-actility-device-registration.mjs +2 -2
- package/fesm2020/c8y-ngx-components-actility-device-registration.mjs.map +1 -1
- package/fesm2020/c8y-ngx-components-context-dashboard.mjs +48 -56
- package/fesm2020/c8y-ngx-components-context-dashboard.mjs.map +1 -1
- package/fesm2020/c8y-ngx-components-device-grid.mjs +2 -2
- package/fesm2020/c8y-ngx-components-device-grid.mjs.map +1 -1
- package/fesm2020/c8y-ngx-components-loriot-device-registration.mjs +4 -2
- package/fesm2020/c8y-ngx-components-loriot-device-registration.mjs.map +1 -1
- package/fesm2020/c8y-ngx-components-operations-bulk-operations-list.mjs +2 -2
- package/fesm2020/c8y-ngx-components-operations-bulk-operations-list.mjs.map +1 -1
- package/fesm2020/c8y-ngx-components-operations-operations-list.mjs +4 -4
- package/fesm2020/c8y-ngx-components-operations-operations-list.mjs.map +1 -1
- package/fesm2020/c8y-ngx-components-register-device.mjs +8 -8
- package/fesm2020/c8y-ngx-components-register-device.mjs.map +1 -1
- package/fesm2020/c8y-ngx-components-repository-software.mjs +6 -6
- package/fesm2020/c8y-ngx-components-repository-software.mjs.map +1 -1
- package/fesm2020/c8y-ngx-components-sigfox-device-registration.mjs +2 -2
- package/fesm2020/c8y-ngx-components-sigfox-device-registration.mjs.map +1 -1
- package/fesm2020/c8y-ngx-components.mjs +54 -32
- package/fesm2020/c8y-ngx-components.mjs.map +1 -1
- package/locales/locales.pot +6 -9
- package/package.json +2 -2
|
@@ -210,9 +210,9 @@ export class SigfoxDeviceRegistrationComponent {
|
|
|
210
210
|
}
|
|
211
211
|
}
|
|
212
212
|
SigfoxDeviceRegistrationComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.0.6", ngImport: i0, type: SigfoxDeviceRegistrationComponent, deps: [{ token: i1.BsModalRef }, { token: i2.SigfoxProviderService }, { token: i3.TranslateService }, { token: i4.GainsightService }], target: i0.ɵɵFactoryTarget.Component });
|
|
213
|
-
SigfoxDeviceRegistrationComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.0.6", type: SigfoxDeviceRegistrationComponent, selector: "c8y-sigfox-device-registration", ngImport: i0, template: "<c8y-modal [headerClasses]=\"'dialog-header'\"
|
|
213
|
+
SigfoxDeviceRegistrationComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.0.6", type: SigfoxDeviceRegistrationComponent, selector: "c8y-sigfox-device-registration", ngImport: i0, template: "<c8y-modal\n [title]=\"'Sigfox registration' | translate\"\n [headerClasses]=\"'dialog-header'\"\n [customFooter]=\"true\"\n>\n <ng-container c8y-modal-title>\n <span [c8yIcon]=\"'c8y-device-connect'\"></span>\n </ng-container>\n <ng-container *ngIf=\"state === 'loadPending'; else registrationForm\">\n <div class=\"p-16 text-center\">\n <c8y-loading></c8y-loading>\n </div>\n </ng-container>\n\n <ng-template #registrationForm>\n <c8y-stepper\n [hideStepProgress]=\"true\"\n linear\n c8y-modal-body\n *ngIf=\"(errorMessages$ | async).length === 0; else errorMessagesPresent\"\n >\n <cdk-step [stepControl]=\"form\">\n <div class=\"p-b-16\">\n <p class=\"modal-subtitle sticky-top\">\n {{ 'Register a single Sigfox device' | translate }}\n </p>\n <formly-form\n [form]=\"form\"\n [fields]=\"fields\"\n [model]=\"model\"\n class=\"d-block p-l-24 p-r-24 p-t-16\"\n ></formly-form>\n </div>\n <c8y-stepper-buttons\n [labels]=\"registrationStepLabels\"\n (onNext)=\"create($event)\"\n (onCancel)=\"bsModalRef.hide()\"\n [showButtons]=\"{ cancel: true, next: true }\"\n [pending]=\"state === 'registrationPending'\"\n [disabled]=\"!form.valid\"\n class=\"modal-footer d-block sticky-bottom separator-top bg-component\"\n ></c8y-stepper-buttons>\n </cdk-step>\n <cdk-step state=\"final\">\n <div class=\"p-16 text-center\" *ngIf=\"state === 'registrationPending'\">\n <c8y-loading></c8y-loading>\n </div>\n <div class=\"m-24\">\n <c8y-operation-result\n *ngIf=\"state === 'registrationSuccess'\"\n text=\"{{ 'Device registered' | translate }}\"\n [size]=\"84\"\n [vertical]=\"true\"\n type=\"success\"\n class=\"lead m-b-0\"\n ></c8y-operation-result>\n </div>\n\n <c8y-stepper-buttons\n class=\"sticky-bottom d-block p-t-16 p-b-16 separator-top bg-component\"\n (onCustom)=\"bsModalRef.hide()\"\n [showButtons]=\"{ custom: true }\"\n [labels]=\"finalStepLabels\"\n ></c8y-stepper-buttons>\n </cdk-step>\n </c8y-stepper>\n </ng-template>\n\n <ng-template #errorMessagesPresent>\n <div class=\"m-24\">\n <c8y-operation-result\n *ngIf=\"state === 'registrationError'\"\n text=\"{{ 'Failed to register' | translate }}\"\n [size]=\"84\"\n [vertical]=\"true\"\n type=\"error\"\n class=\"lead\"\n ></c8y-operation-result>\n <div\n *ngFor=\"let msg of errorMessages$ | async\"\n class=\"m-b-8\"\n [ngClass]=\"{\n 'text-center': state === 'registrationError',\n 'alert alert-danger': state === 'loadError'\n }\"\n >\n <span [innerHTML]=\"msg | translate\"></span>\n </div>\n </div>\n\n <div class=\"modal-footer\">\n <button\n title=\"{{ 'Close' | translate }}\"\n (click)=\"bsModalRef.hide()\"\n type=\"button\"\n class=\"btn btn-default\"\n >\n {{ 'Close' | translate }}\n </button>\n </div>\n </ng-template>\n</c8y-modal>\n", dependencies: [{ kind: "directive", type: i4.IconDirective, selector: "[c8yIcon]", inputs: ["c8yIcon"] }, { kind: "directive", type: i5.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i5.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i4.LoadingComponent, selector: "c8y-loading" }, { kind: "component", type: i4.OperationResultComponent, selector: "c8y-operation-result", inputs: ["text", "vertical", "size", "type"] }, { kind: "component", type: i4.ModalComponent, selector: "c8y-modal", inputs: ["disabled", "close", "dismiss", "title", "body", "customFooter", "headerClasses", "labels"], outputs: ["onDismiss", "onClose"] }, { kind: "component", type: i4.C8yStepper, selector: "c8y-stepper", inputs: ["disableDefaultIcons", "disableProgressButtons", "customClasses", "hideStepProgress", "useStepLabelsAsTitlesOnly"], outputs: ["onStepChange"] }, { kind: "component", type: i6.CdkStep, selector: "cdk-step", inputs: ["stepControl", "label", "errorMessage", "aria-label", "aria-labelledby", "state", "editable", "optional", "completed", "hasError"], outputs: ["interacted"], exportAs: ["cdkStep"] }, { kind: "component", type: i4.C8yStepperButtons, selector: "c8y-stepper-buttons", inputs: ["labels", "pending", "disabled", "showButtons"], outputs: ["onCancel", "onNext", "onBack", "onCustom"] }, { kind: "component", type: i7.FormlyForm, selector: "formly-form", inputs: ["model", "fields", "options", "form"], outputs: ["modelChange"] }, { kind: "pipe", type: i4.C8yTranslatePipe, name: "translate" }, { kind: "pipe", type: i5.AsyncPipe, name: "async" }] });
|
|
214
214
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.6", ngImport: i0, type: SigfoxDeviceRegistrationComponent, decorators: [{
|
|
215
215
|
type: Component,
|
|
216
|
-
args: [{ selector: 'c8y-sigfox-device-registration', template: "<c8y-modal [headerClasses]=\"'dialog-header'\"
|
|
216
|
+
args: [{ selector: 'c8y-sigfox-device-registration', template: "<c8y-modal\n [title]=\"'Sigfox registration' | translate\"\n [headerClasses]=\"'dialog-header'\"\n [customFooter]=\"true\"\n>\n <ng-container c8y-modal-title>\n <span [c8yIcon]=\"'c8y-device-connect'\"></span>\n </ng-container>\n <ng-container *ngIf=\"state === 'loadPending'; else registrationForm\">\n <div class=\"p-16 text-center\">\n <c8y-loading></c8y-loading>\n </div>\n </ng-container>\n\n <ng-template #registrationForm>\n <c8y-stepper\n [hideStepProgress]=\"true\"\n linear\n c8y-modal-body\n *ngIf=\"(errorMessages$ | async).length === 0; else errorMessagesPresent\"\n >\n <cdk-step [stepControl]=\"form\">\n <div class=\"p-b-16\">\n <p class=\"modal-subtitle sticky-top\">\n {{ 'Register a single Sigfox device' | translate }}\n </p>\n <formly-form\n [form]=\"form\"\n [fields]=\"fields\"\n [model]=\"model\"\n class=\"d-block p-l-24 p-r-24 p-t-16\"\n ></formly-form>\n </div>\n <c8y-stepper-buttons\n [labels]=\"registrationStepLabels\"\n (onNext)=\"create($event)\"\n (onCancel)=\"bsModalRef.hide()\"\n [showButtons]=\"{ cancel: true, next: true }\"\n [pending]=\"state === 'registrationPending'\"\n [disabled]=\"!form.valid\"\n class=\"modal-footer d-block sticky-bottom separator-top bg-component\"\n ></c8y-stepper-buttons>\n </cdk-step>\n <cdk-step state=\"final\">\n <div class=\"p-16 text-center\" *ngIf=\"state === 'registrationPending'\">\n <c8y-loading></c8y-loading>\n </div>\n <div class=\"m-24\">\n <c8y-operation-result\n *ngIf=\"state === 'registrationSuccess'\"\n text=\"{{ 'Device registered' | translate }}\"\n [size]=\"84\"\n [vertical]=\"true\"\n type=\"success\"\n class=\"lead m-b-0\"\n ></c8y-operation-result>\n </div>\n\n <c8y-stepper-buttons\n class=\"sticky-bottom d-block p-t-16 p-b-16 separator-top bg-component\"\n (onCustom)=\"bsModalRef.hide()\"\n [showButtons]=\"{ custom: true }\"\n [labels]=\"finalStepLabels\"\n ></c8y-stepper-buttons>\n </cdk-step>\n </c8y-stepper>\n </ng-template>\n\n <ng-template #errorMessagesPresent>\n <div class=\"m-24\">\n <c8y-operation-result\n *ngIf=\"state === 'registrationError'\"\n text=\"{{ 'Failed to register' | translate }}\"\n [size]=\"84\"\n [vertical]=\"true\"\n type=\"error\"\n class=\"lead\"\n ></c8y-operation-result>\n <div\n *ngFor=\"let msg of errorMessages$ | async\"\n class=\"m-b-8\"\n [ngClass]=\"{\n 'text-center': state === 'registrationError',\n 'alert alert-danger': state === 'loadError'\n }\"\n >\n <span [innerHTML]=\"msg | translate\"></span>\n </div>\n </div>\n\n <div class=\"modal-footer\">\n <button\n title=\"{{ 'Close' | translate }}\"\n (click)=\"bsModalRef.hide()\"\n type=\"button\"\n class=\"btn btn-default\"\n >\n {{ 'Close' | translate }}\n </button>\n </div>\n </ng-template>\n</c8y-modal>\n" }]
|
|
217
217
|
}], ctorParameters: function () { return [{ type: i1.BsModalRef }, { type: i2.SigfoxProviderService }, { type: i3.TranslateService }, { type: i4.GainsightService }]; } });
|
|
218
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2lnZm94LWRldmljZS1yZWdpc3RyYXRpb24uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc2lnZm94LWRldmljZS1yZWdpc3RyYXRpb24vc2lnZm94LWRldmljZS1yZWdpc3RyYXRpb24uY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vc2lnZm94LWRldmljZS1yZWdpc3RyYXRpb24vc2lnZm94LWRldmljZS1yZWdpc3RyYXRpb24uY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMxQyxPQUFPLEVBQW1CLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzVELE9BQU8sRUFBYyxnQkFBZ0IsRUFBRSxPQUFPLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUU1RSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUN2RCxPQUFPLEVBQUUsU0FBUyxFQUFFLElBQUksRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUM1QyxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDakQsT0FBTyxFQUFFLGVBQWUsRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxFQUFFLEVBQUUsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUN2RixPQUFPLEVBQUUsVUFBVSxFQUFFLEdBQUcsRUFBRSxRQUFRLEVBQUUsV0FBVyxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUU5RixPQUFPLEVBQUUsU0FBUyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sMkJBQTJCLENBQUM7Ozs7Ozs7OztBQWM3RSxNQUFNLE9BQU8saUNBQWlDO0lBc0s1QyxZQUNTLFVBQXNCLEVBQ3JCLGFBQW9DLEVBQ3BDLGdCQUFrQyxFQUNsQyxnQkFBa0M7UUFIbkMsZUFBVSxHQUFW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QUFPLEtBQUssQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxxQkFBcUIsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDNUYsQ0FBQztJQUVELGVBQWU7UUFDYixPQUFPLEtBQUssQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxjQUFjLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3JGLENBQUM7SUFFRCxXQUFXO1FBQ1QsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUN6QixJQUFJLENBQUMsWUFBWSxDQUFDLFFBQVEsRUFBRSxDQUFDO0lBQy9CLENBQUM7OzhIQXRPVSxpQ0FBaUM7a0hBQWpDLGlDQUFpQyxzRUN6QjlDLCsyR0FzR0E7MkZEN0VhLGlDQUFpQztrQkFKN0MsU0FBUzsrQkFDRSxnQ0FBZ0MiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDZGtTdGVwIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL3N0ZXBwZXInO1xuaW1wb3J0IHsgQ29tcG9uZW50IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBBYnN0cmFjdENvbnRyb2wsIEZvcm1Hcm91cCB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IEM4eVN0ZXBwZXIsIEdhaW5zaWdodFNlcnZpY2UsIGdldHRleHQgfSBmcm9tICdAYzh5L25neC1jb21wb25lbnRzJztcbmltcG9ydCB7IEZvcm1seUZpZWxkQ29uZmlnIH0gZnJvbSAnQG5neC1mb3JtbHkvY29yZSc7XG5pbXBvcnQgeyBUcmFuc2xhdGVTZXJ2aWNlIH0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSc7XG5pbXBvcnQgeyBjbG9uZURlZXAsIHVuaXEgfSBmcm9tICdsb2Rhc2gtZXMnO1xuaW1wb3J0IHsgQnNNb2RhbFJlZiB9IGZyb20gJ25neC1ib290c3RyYXAvbW9kYWwnO1xuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBkZWZlciwgZm9ya0pvaW4sIGZyb20sIG9mLCBTdWJqZWN0LCB0aHJvd0Vycm9yIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBjYXRjaEVycm9yLCBtYXAsIG1lcmdlTWFwLCBzaGFyZVJlcGxheSwgc3dpdGNoTWFwLCB0YWtlVW50aWwgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBTaWdmb3hEZXZpY2UsIFNpZ2ZveERldmljZUZvcm1seSB9IGZyb20gJy4vc2lnZm94LWRldmljZS1yZWdpc3RyYXRpb24ubW9kZWwnO1xuaW1wb3J0IHsgRXJyb3JOYW1lLCBTaWdmb3hQcm92aWRlclNlcnZpY2UgfSBmcm9tICcuL3NpZ2ZveC1wcm92aWRlci5zZXJ2aWNlJztcblxudHlwZSBTdGF0ZSA9XG4gIHwgJ2xvYWRQZW5kaW5nJ1xuICB8ICdsb2FkU3VjY2VzcydcbiAgfCAnbG9hZEVycm9yJ1xuICB8ICdyZWdpc3RyYXRpb25QZW5kaW5nJ1xuICB8ICdyZWdpc3RyYXRpb25TdWNjZXNzJ1xuICB8ICdyZWdpc3RyYXRpb25FcnJvcic7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2M4eS1zaWdmb3gtZGV2aWNlLXJlZ2lzdHJhdGlvbicsXG4gIHRlbXBsYXRlVXJsOiAnc2lnZm94LWRldmljZS1yZWdpc3RyYXRpb24uY29tcG9uZW50Lmh0bWwnXG59KVxuZXhwb3J0IGNsYXNzIFNpZ2ZveERldmljZVJlZ2lzdHJhdGlvbkNvbXBvbmVudCB7XG4gIHN0ZXBwZXI6IEM4eVN0ZXBwZXI7XG4gIHJlYWRvbmx5IFBBR0lORzogb2JqZWN0ID0ge1xuICAgIHdpdGhUb3RhbFBhZ2VzOiB0cnVlLFxuICAgIHBhZ2VTaXplOiAxMFxuICB9O1xuXG4gIGZvcm0gPSBuZXcgRm9ybUdyb3VwKHt9KTtcbiAgbW9kZWw6IFNpZ2ZveERldmljZUZvcm1seSA9IHt9IGFzIGFueTtcbiAgcHJvdG9jb2xzJCA9IHRoaXMuZ2V0UHJvdG9jb2xzJCgpO1xuICBjb25uZWN0aW9ucyQgPSB0aGlzLmdldENvbm5lY3Rpb25zJCgpO1xuICB1bnN1YnNjcmliZSQ6IFN1YmplY3Q8dm9pZD4gPSBuZXcgU3ViamVjdCgpO1xuXG4gIGxvYWQkID0gdGhpcy5jb25uZWN0aW9ucyQucGlwZShcbiAgICBjYXRjaEVycm9yKChlcnJvcjogRXJyb3IpID0+IG9mKGVycm9yKSksXG4gICAgc3dpdGNoTWFwKGNvbm5lY3Rpb25zID0+IHtcbiAgICAgIGlmIChcbiAgICAgICAgY29ubmVjdGlvbnMgaW5zdGFuY2VvZiBFcnJvciAmJlxuICAgICAgICBjb25uZWN0aW9ucy5uYW1lID09PSBFcnJvck5hbWUuTm9Db25uZWN0aXZpdHlTZXR0aW5nc0Vycm9yXG4gICAgICApIHtcbiAgICAgICAgcmV0dXJuIG9mKFtjb25uZWN0aW9uc10pO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGZvcmtKb2luKFtcbiAgICAgICAgb2YoY29ubmVjdGlvbnMpLFxuICAgICAgICB0aGlzLnByb3RvY29scyQucGlwZShjYXRjaEVycm9yKChlcnJvcjogRXJyb3IpID0+IG9mKGVycm9yKSkpXG4gICAgICBdKTtcbiAgICB9KSxcbiAgICBtYXAocmVzdWx0cyA9PiB7XG4gICAgICByZXR1cm4gcmVzdWx0cy5maWx0ZXIocmVzdWx0ID0+IHtcbiAgICAgICAgcmV0dXJuIHJlc3VsdCBpbnN0YW5jZW9mIEVycm9yO1xuICAgICAgfSk7XG4gICAgfSksXG4gICAgc3dpdGNoTWFwKGVycm9ycyA9PiB7XG4gICAgICByZXR1cm4gZXJyb3JzLmxlbmd0aCA9PT0gMCA/IG9mKFtdKSA6IHRocm93RXJyb3IoZXJyb3JzKTtcbiAgICB9KVxuICApO1xuXG4gIGZpZWxkczogRm9ybWx5RmllbGRDb25maWdbXSA9IFtcbiAgICB7XG4gICAgICBrZXk6ICdpZCcsXG4gICAgICB0eXBlOiAnc3RyaW5nJyxcbiAgICAgIHRlbXBsYXRlT3B0aW9uczoge1xuICAgICAgICBwbGFjZWhvbGRlcjogJ0ZFRDk4NycsXG4gICAgICAgIGxhYmVsOiBnZXR0ZXh0KCdJRCcpLFxuICAgICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICAgICAgcGF0dGVybjogJygweCl7MCwxfVswLTlBLUZdKyhoKXswLDF9J1xuICAgICAgfSxcbiAgICAgIHZhbGlkYXRpb246IHtcbiAgICAgICAgbWVzc2FnZXM6IHtcbiAgICAgICAgICBwYXR0ZXJuOiBnZXR0ZXh0KCdNdXN0IGJlIGEgdmFsaWQgaGV4YWRlY2ltYWwgbnVtYmVyLicpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuICAgIHtcbiAgICAgIGtleTogJ3BhYycsXG4gICAgICB0eXBlOiAnc3RyaW5nJyxcbiAgICAgIHRlbXBsYXRlT3B0aW9uczoge1xuICAgICAgICBwbGFjZWhvbGRlcjogJ0ZFRENCQTk4NzY1NDMyMTAnLFxuICAgICAgICBsYWJlbDogZ2V0dGV4dCgnUEFDJyksXG4gICAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgICAgICBwYXR0ZXJuOiAnXihbYS1mQS1GMC05XXsxNn0pJCdcbiAgICAgIH0sXG4gICAgICB2YWxpZGF0aW9uOiB7XG4gICAgICAgIG1lc3NhZ2VzOiB7XG4gICAgICAgICAgcGF0dGVybjogZ2V0dGV4dCgnTXVzdCBiZSBhIHZhbGlkIDE2IGRpZ2l0IGhleGFkZWNpbWFsIG51bWJlci4nKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSxcbiAgICB7XG4gICAgICBrZXk6ICdjb25uZWN0aW9uJyxcbiAgICAgIHR5cGU6ICd0eXBlYWhlYWQnLFxuICAgICAgdGVtcGxhdGVPcHRpb25zOiB7XG4gICAgICAgIGxhYmVsOiBnZXR0ZXh0KCdDb25uZWN0aW9uJyksXG4gICAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgICAgICBjOHlGb3JPcHRpb25zOiB0aGlzLmNvbm5lY3Rpb25zJCxcbiAgICAgICAgZGlzcGxheVByb3BlcnR5OiAnbmFtZScsXG4gICAgICAgIHZhbHVlUHJvcGVydGllczogWyduYW1lJ11cbiAgICAgIH1cbiAgICB9LFxuICAgIHtcbiAgICAgIGtleTogJ2NvbnRyYWN0JyxcbiAgICAgIHR5cGU6ICd0eXBlYWhlYWQnLFxuICAgICAgdGVtcGxhdGVPcHRpb25zOiB7XG4gICAgICAgIGxhYmVsOiBnZXR0ZXh0KCdDb250cmFjdCcpLFxuICAgICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICAgICAgcGxhY2Vob2xkZXI6ICdGcmVlIGNvbnRyYWN0XzI1JyxcbiAgICAgICAgZGlzcGxheVByb3BlcnR5OiAnbmFtZScsXG4gICAgICAgIHZhbHVlUHJvcGVydGllczogWydpZCddLFxuICAgICAgICBkZXNjcmlwdGlvbjogZ2V0dGV4dCgnT25seSBhY3RpdmUgY29udHJhY3RzIHdpdGggZnJlZSBzbG90cyBhcmUgZGlzcGxheWVkLicpXG4gICAgICB9LFxuICAgICAgaG9va3M6IHtcbiAgICAgICAgb25Jbml0OiBmaWVsZCA9PiB7XG4gICAgICAgICAgY29uc3QgY29ubmVjdGlvbkNvbnRyb2wgPSBmaWVsZC5mb3JtLmdldCgnY29ubmVjdGlvbicpO1xuICAgICAgICAgIGNvbm5lY3Rpb25Db250cm9sLnZhbHVlQ2hhbmdlc1xuICAgICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICAgIHRha2VVbnRpbCh0aGlzLnVuc3Vic2NyaWJlJCksXG4gICAgICAgICAgICAgIG1lcmdlTWFwKCh7IG5hbWUgfSkgPT4gdGhpcy5nZXRDb250cmFjdHMkKG5hbWUpKVxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgLnN1YnNjcmliZShcbiAgICAgICAgICAgICAgcHJvZmlsZXMgPT4ge1xuICAgICAgICAgICAgICAgIGZpZWxkLnRlbXBsYXRlT3B0aW9ucy5jOHlGb3JPcHRpb25zID0gb2YocHJvZmlsZXMpO1xuICAgICAgICAgICAgICAgIGZpZWxkLmZvcm1Db250cm9sLnNldFZhbHVlKG51bGwpO1xuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICBlcnJvciA9PiB7XG4gICAgICAgICAgICAgICAgZmllbGQuZm9ybS5jb250cm9scy5jb250cmFjdC5zZXRFcnJvcnMoeyBjb250cmFjdDogdHJ1ZSB9KTtcbiAgICAgICAgICAgICAgICBmaWVsZC52YWxpZGF0b3JzLmNvbnRyYWN0Lm1lc3NhZ2UgPSBlcnJvci5tZXNzYWdlO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgdmFsaWRhdG9yczoge1xuICAgICAgICBjb250cmFjdDoge1xuICAgICAgICAgIGV4cHJlc3Npb246IChjb250cm9sOiBBYnN0cmFjdENvbnRyb2wpID0+IHtcbiAgICAgICAgICAgIHJldHVybiBjb250cm9sLnN0YXR1cyA9PT0gJ1ZBTElEJztcbiAgICAgICAgICB9LFxuICAgICAgICAgIG1lc3NhZ2U6ICgpID0+ICcnXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuICAgIHtcbiAgICAgIGtleTogJ2RldmljZVR5cGUnLFxuICAgICAgdHlwZTogJ3R5cGVhaGVhZCcsXG4gICAgICB0ZW1wbGF0ZU9wdGlvbnM6IHtcbiAgICAgICAgbGFiZWw6IGdldHRleHQoJ0RldmljZSBwcm90b2NvbCcpLFxuICAgICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICAgICAgYzh5Rm9yT3B0aW9uczogdGhpcy5wcm90b2NvbHMkLFxuICAgICAgICBkaXNwbGF5UHJvcGVydHk6ICduYW1lJyxcbiAgICAgICAgdmFsdWVQcm9wZXJ0aWVzOiBbJ2lkJywgJ25hbWUnXVxuICAgICAgfVxuICAgIH0sXG4gICAge1xuICAgICAga2V5OiAncHJvZHVjdENlcnRpZmljYXRlJyxcbiAgICAgIHR5cGU6ICdzdHJpbmcnLFxuICAgICAgdGVtcGxhdGVPcHRpb25zOiB7XG4gICAgICAgIHBsYWNlaG9sZGVyOiAnUF8wMDFGX0VEQ0JfMDEnLFxuICAgICAgICBsYWJlbDogZ2V0dGV4dCgnUHJvZHVjdCBjZXJ0aWZpY2F0ZSBrZXknKSxcbiAgICAgICAgcGF0dGVybjogJ1BfWzAtOUEtRl17NH1fWzAtOUEtRl17NH1fWzAtOUEtRl17Mn0nLFxuICAgICAgICBkZXNjcmlwdGlvbjogZ2V0dGV4dChcbiAgICAgICAgICAnSWYgbm8gcHJvZHVjdCBjZXJ0aWZpY2F0ZSBrZXkgaXMgc3BlY2lmaWVkLCB0aGUgZGV2aWNlIGlzIGNvbnNpZGVyZWQgYSBwcm90b3R5cGUuJ1xuICAgICAgICApXG4gICAgICB9LFxuICAgICAgdmFsaWRhdGlvbjoge1xuICAgICAgICBtZXNzYWdlczoge1xuICAgICAgICAgIHBhdHRlcm46IChfZXJyb3IsIF9maWVsZDogRm9ybWx5RmllbGRDb25maWcpID0+XG4gICAgICAgICAgICB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudChcbiAgICAgICAgICAgICAgZ2V0dGV4dCgnTXVzdCBiZSBhIHZhbGlkIHByb2R1Y3QgY2VydGlmaWNhdGUga2V5LCBmb3IgZXhhbXBsZSwge3sgZXhhbXBsZSB9fScpLFxuICAgICAgICAgICAgICB7IGV4YW1wbGU6ICdQXzAwMUZfRURDQl8wMScgfVxuICAgICAgICAgICAgKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICBdO1xuXG4gIHJlZ2lzdHJhdGlvblN0ZXBMYWJlbHMgPSB7XG4gICAgbmV4dDogZ2V0dGV4dCgnUmVnaXN0ZXInKVxuICB9O1xuICBmaW5hbFN0ZXBMYWJlbHMgPSB7XG4gICAgYmFjazogZ2V0dGV4dCgnQ2xvc2UnKVxuICB9O1xuXG4gIHN0YXRlOiBTdGF0ZSA9ICdsb2FkUGVuZGluZyc7XG4gIGVycm9ycyQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PEVycm9yW10+KFtdKTtcbiAgZXJyb3JNZXNzYWdlcyQgPSB0aGlzLmVycm9ycyQucGlwZShcbiAgICBtYXAoZXJyb3JzID0+IGVycm9ycy5tYXAoZXJyb3IgPT4gZXJyb3IubWVzc2FnZSkpLFxuICAgIG1hcChtZXNzYWdlcyA9PiB1bmlxKG1lc3NhZ2VzKSlcbiAgKTtcbiAgY29uc3RydWN0b3IoXG4gICAgcHVibGljIGJzTW9kYWxSZWY6IEJzTW9kYWxSZWYsXG4gICAgcHJpdmF0ZSBzaWdmb3hTZXJ2aWNlOiBTaWdmb3hQcm92aWRlclNlcnZpY2UsXG4gICAgcHJpdmF0ZSB0cmFuc2xhdGVTZXJ2aWNlOiBUcmFuc2xhdGVTZXJ2aWNlLFxuICAgIHByaXZhdGUgZ2FpbnNpZ2h0U2VydmljZTogR2FpbnNpZ2h0U2VydmljZVxuICApIHtcbiAgICB0aGlzLmxvYWQkLnN1YnNjcmliZShcbiAgICAgICgpID0+IHtcbiAgICAgICAgdGhpcy5zdGF0ZSA9ICdsb2FkU3VjY2Vzcyc7XG4gICAgICB9LFxuICAgICAgZXJyb3JzID0+IHtcbiAgICAgICAgdGhpcy5zdGF0ZSA9ICdsb2FkRXJyb3InO1xuICAgICAgICB0aGlzLmVycm9ycyQubmV4dChlcnJvcnMpO1xuICAgICAgfVxuICAgICk7XG4gIH1cblxuICBhc3luYyBjcmVhdGUoZXZlbnQ6IHsgc3RlcHBlcjogQzh5U3RlcHBlcjsgc3RlcDogQ2RrU3RlcCB9KSB7XG4gICAgdGhpcy5zdGF0ZSA9ICdyZWdpc3RyYXRpb25QZW5kaW5nJztcbiAgICBjb25zdCBzaWdmb3hEZXZpY2UgPSB0aGlzLmdldFNpZ2ZveERldmljZVRvU2VuZCgpO1xuICAgIHRyeSB7XG4gICAgICBhd2FpdCB0aGlzLnNpZ2ZveFNlcnZpY2UuY3JlYXRlRGV2aWNlKHNpZ2ZveERldmljZSk7XG4gICAgICB0aGlzLnN0YXRlID0gJ3JlZ2lzdHJhdGlvblN1Y2Nlc3MnO1xuICAgICAgdGhpcy5nYWluc2lnaHRTZXJ2aWNlLnRyaWdnZXJFdmVudCgnZG1EZXZpY2VSZWdpc3RyYXRpb24nLCB7XG4gICAgICAgIGFjdGlvbjogJ3JlZ2lzdHJhdGlvblN1Y2Nlc3MnLFxuICAgICAgICBuYW1lOiAnZG1EZXZpY2VSZWdpc3RyYXRpb24nXG4gICAgICB9KTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgdGhpcy5nYWluc2lnaHRTZXJ2aWNlLnRyaWdnZXJFdmVudCgnZG1EZXZpY2VSZWdpc3RyYXRpb24nLCB7XG4gICAgICAgIGFjdGlvbjogJ3JlZ2lzdHJhdGlvbkZhaWx1cmUnLFxuICAgICAgICBuYW1lOiAnZG1EZXZpY2VSZWdpc3RyYXRpb24nXG4gICAgICB9KTtcbiAgICAgIHRoaXMuc3RhdGUgPSAncmVnaXN0cmF0aW9uRXJyb3InO1xuICAgICAgdGhpcy5lcnJvcnMkLm5leHQoW2Vycm9yXSk7XG4gICAgfVxuXG4gICAgZXZlbnQuc3RlcHBlci5uZXh0KCk7XG4gIH1cblxuICBnZXRTaWdmb3hEZXZpY2VUb1NlbmQoKSB7XG4gICAgY29uc3Qgc2lnZm94RGV2aWNlOiBTaWdmb3hEZXZpY2UgPSBjbG9uZURlZXAodGhpcy5tb2RlbCk7XG4gICAgc2lnZm94RGV2aWNlLmxuc0Nvbm5lY3Rpb25OYW1lID0gdGhpcy5tb2RlbC5jb25uZWN0aW9uLm5hbWU7XG4gICAgc2lnZm94RGV2aWNlLmNvbnRyYWN0SWQgPSB0aGlzLm1vZGVsLmNvbnRyYWN0LmlkO1xuICAgIHNpZ2ZveERldmljZS5wcm90b3R5cGUgPSAhc2lnZm94RGV2aWNlLnByb2R1Y3RDZXJ0aWZpY2F0ZTtcbiAgICBkZWxldGUgKHNpZ2ZveERldmljZSBhcyBhbnkpLmNvbnRyYWN0O1xuICAgIGRlbGV0ZSAoc2lnZm94RGV2aWNlIGFzIGFueSkuY29ubmVjdGlvbjtcbiAgICByZXR1cm4gc2lnZm94RGV2aWNlO1xuICB9XG5cbiAgZ2V0Q29udHJhY3RzJChuYW1lKSB7XG4gICAgcmV0dXJuIGRlZmVyKCgpID0+IGZyb20odGhpcy5zaWdmb3hTZXJ2aWNlLmdldENvbnRyYWN0cyhuYW1lKSkpLnBpcGUoc2hhcmVSZXBsYXkoMSkpO1xuICB9XG5cbiAgZ2V0UHJvdG9jb2xzJCgpIHtcbiAgICByZXR1cm4gZGVmZXIoKCkgPT4gZnJvbSh0aGlzLnNpZ2ZveFNlcnZpY2UuZ2V0QXZhaWxhYmxlUHJvdG9jb2xzKCkpKS5waXBlKHNoYXJlUmVwbGF5KDEpKTtcbiAgfVxuXG4gIGdldENvbm5lY3Rpb25zJCgpIHtcbiAgICByZXR1cm4gZGVmZXIoKCkgPT4gZnJvbSh0aGlzLnNpZ2ZveFNlcnZpY2UuZ2V0Q29ubmVjdGlvbnMoKSkpLnBpcGUoc2hhcmVSZXBsYXkoMSkpO1xuICB9XG5cbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgdGhpcy51bnN1YnNjcmliZSQubmV4dCgpO1xuICAgIHRoaXMudW5zdWJzY3JpYmUkLmNvbXBsZXRlKCk7XG4gIH1cbn1cbiIsIjxjOHktbW9kYWwgW2hlYWRlckNsYXNzZXNdPVwiJ2RpYWxvZy1oZWFkZXInXCIgW2N1c3RvbUZvb3Rlcl09XCJ0cnVlXCI+XG4gIDxuZy1jb250YWluZXIgYzh5LW1vZGFsLXRpdGxlPlxuICAgIDxzcGFuIFtjOHlJY29uXT1cIidjOHktZGV2aWNlLWNvbm5lY3QnXCI+PC9zcGFuPlxuICAgIDxoNCBpZD1cIm1vZGFsLXRpdGxlXCI+e3sgJ1NpZ2ZveCByZWdpc3RyYXRpb24nIHwgdHJhbnNsYXRlIH19PC9oND5cbiAgPC9uZy1jb250YWluZXI+XG4gIDxuZy1jb250YWluZXIgKm5nSWY9XCJzdGF0ZSA9PT0gJ2xvYWRQZW5kaW5nJzsgZWxzZSByZWdpc3RyYXRpb25Gb3JtXCI+XG4gICAgPGRpdiBjbGFzcz1cInAtMTYgdGV4dC1jZW50ZXJcIj5cbiAgICAgIDxjOHktbG9hZGluZz48L2M4eS1sb2FkaW5nPlxuICAgIDwvZGl2PlxuICA8L25nLWNvbnRhaW5lcj5cblxuICA8IS0tRm9ybWx5IHNjaGVtYSBpcyByZW5kZXJlZC0tPlxuICA8bmctdGVtcGxhdGUgI3JlZ2lzdHJhdGlvbkZvcm0+XG4gICAgPGM4eS1zdGVwcGVyXG4gICAgICBbaGlkZVN0ZXBQcm9ncmVzc109XCJ0cnVlXCJcbiAgICAgIGxpbmVhclxuICAgICAgKm5nSWY9XCIoZXJyb3JNZXNzYWdlcyQgfCBhc3luYykubGVuZ3RoID09PSAwOyBlbHNlIGVycm9yTWVzc2FnZXNQcmVzZW50XCJcbiAgICAgIGlkPVwibW9kYWwtYm9keVwiXG4gICAgPlxuICAgICAgPGNkay1zdGVwIFtzdGVwQ29udHJvbF09XCJmb3JtXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJwLWItMTZcIj5cbiAgICAgICAgICA8cCBjbGFzcz1cIm1vZGFsLXN1YnRpdGxlIHN0aWNreS10b3BcIj5cbiAgICAgICAgICAgIHt7ICdSZWdpc3RlciBhIHNpbmdsZSBTaWdmb3ggZGV2aWNlJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgIDwvcD5cbiAgICAgICAgICA8Zm9ybWx5LWZvcm1cbiAgICAgICAgICAgIFtmb3JtXT1cImZvcm1cIlxuICAgICAgICAgICAgW2ZpZWxkc109XCJmaWVsZHNcIlxuICAgICAgICAgICAgW21vZGVsXT1cIm1vZGVsXCJcbiAgICAgICAgICAgIGNsYXNzPVwiZC1ibG9jayBwLWwtMjQgcC1yLTI0IHAtdC0xNlwiXG4gICAgICAgICAgPjwvZm9ybWx5LWZvcm0+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8Yzh5LXN0ZXBwZXItYnV0dG9uc1xuICAgICAgICAgIFtsYWJlbHNdPVwicmVnaXN0cmF0aW9uU3RlcExhYmVsc1wiXG4gICAgICAgICAgKG9uTmV4dCk9XCJjcmVhdGUoJGV2ZW50KVwiXG4gICAgICAgICAgKG9uQ2FuY2VsKT1cImJzTW9kYWxSZWYuaGlkZSgpXCJcbiAgICAgICAgICBbc2hvd0J1dHRvbnNdPVwieyBjYW5jZWw6IHRydWUsIG5leHQ6IHRydWUgfVwiXG4gICAgICAgICAgW3BlbmRpbmddPVwic3RhdGUgPT09ICdyZWdpc3RyYXRpb25QZW5kaW5nJ1wiXG4gICAgICAgICAgW2Rpc2FibGVkXT1cIiFmb3JtLnZhbGlkXCJcbiAgICAgICAgICBjbGFzcz1cIm1vZGFsLWZvb3RlciBkLWJsb2NrIHN0aWNreS1ib3R0b20gc2VwYXJhdG9yLXRvcCBiZy1jb21wb25lbnRcIlxuICAgICAgICA+PC9jOHktc3RlcHBlci1idXR0b25zPlxuICAgICAgPC9jZGstc3RlcD5cbiAgICAgIDxjZGstc3RlcCBzdGF0ZT1cImZpbmFsXCI+XG4gICAgICAgIDwhLS1zdWNjZXNzIHNjZW5hcmlvLS0+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJwLTE2IHRleHQtY2VudGVyXCIgKm5nSWY9XCJzdGF0ZSA9PT0gJ3JlZ2lzdHJhdGlvblBlbmRpbmcnXCI+XG4gICAgICAgICAgPGM4eS1sb2FkaW5nPjwvYzh5LWxvYWRpbmc+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPVwibS0yNFwiPlxuICAgICAgICAgIDxjOHktb3BlcmF0aW9uLXJlc3VsdFxuICAgICAgICAgICAgKm5nSWY9XCJzdGF0ZSA9PT0gJ3JlZ2lzdHJhdGlvblN1Y2Nlc3MnXCJcbiAgICAgICAgICAgIHRleHQ9XCJ7eyAnRGV2aWNlIHJlZ2lzdGVyZWQnIHwgdHJhbnNsYXRlIH19XCJcbiAgICAgICAgICAgIFtzaXplXT1cIjg0XCJcbiAgICAgICAgICAgIFt2ZXJ0aWNhbF09XCJ0cnVlXCJcbiAgICAgICAgICAgIHR5cGU9XCJzdWNjZXNzXCJcbiAgICAgICAgICAgIGNsYXNzPVwibGVhZCBtLWItMFwiXG4gICAgICAgICAgPjwvYzh5LW9wZXJhdGlvbi1yZXN1bHQ+XG4gICAgICAgIDwvZGl2PlxuXG4gICAgICAgIDxjOHktc3RlcHBlci1idXR0b25zXG4gICAgICAgICAgY2xhc3M9XCJzdGlja3ktYm90dG9tIGQtYmxvY2sgcC10LTE2IHAtYi0xNiBzZXBhcmF0b3ItdG9wIGJnLWNvbXBvbmVudFwiXG4gICAgICAgICAgKG9uQ3VzdG9tKT1cImJzTW9kYWxSZWYuaGlkZSgpXCJcbiAgICAgICAgICBbc2hvd0J1dHRvbnNdPVwieyBjdXN0b206IHRydWUgfVwiXG4gICAgICAgICAgW2xhYmVsc109XCJmaW5hbFN0ZXBMYWJlbHNcIlxuICAgICAgICA+PC9jOHktc3RlcHBlci1idXR0b25zPlxuICAgICAgPC9jZGstc3RlcD5cbiAgICA8L2M4eS1zdGVwcGVyPlxuICA8L25nLXRlbXBsYXRlPlxuXG4gIDwhLS1GYWlsdXJlIHNjZW5hcmlvLS0+XG4gIDxuZy10ZW1wbGF0ZSAjZXJyb3JNZXNzYWdlc1ByZXNlbnQ+XG4gICAgPGRpdiBjbGFzcz1cIm0tMjRcIj5cbiAgICAgIDxjOHktb3BlcmF0aW9uLXJlc3VsdFxuICAgICAgICAqbmdJZj1cInN0YXRlID09PSAncmVnaXN0cmF0aW9uRXJyb3InXCJcbiAgICAgICAgdGV4dD1cInt7ICdGYWlsZWQgdG8gcmVnaXN0ZXInIHwgdHJhbnNsYXRlIH19XCJcbiAgICAgICAgW3NpemVdPVwiODRcIlxuICAgICAgICBbdmVydGljYWxdPVwidHJ1ZVwiXG4gICAgICAgIHR5cGU9XCJlcnJvclwiXG4gICAgICAgIGNsYXNzPVwibGVhZFwiXG4gICAgICA+PC9jOHktb3BlcmF0aW9uLXJlc3VsdD5cbiAgICAgIDxkaXZcbiAgICAgICAgKm5nRm9yPVwibGV0IG1zZyBvZiBlcnJvck1lc3NhZ2VzJCB8IGFzeW5jXCJcbiAgICAgICAgY2xhc3M9XCJtLWItOFwiXG4gICAgICAgIFtuZ0NsYXNzXT1cIntcbiAgICAgICAgICAndGV4dC1jZW50ZXInOiBzdGF0ZSA9PT0gJ3JlZ2lzdHJhdGlvbkVycm9yJyxcbiAgICAgICAgICAnYWxlcnQgYWxlcnQtZGFuZ2VyJzogc3RhdGUgPT09ICdsb2FkRXJyb3InXG4gICAgICAgIH1cIlxuICAgICAgPlxuICAgICAgICA8c3BhbiBbaW5uZXJIVE1MXT1cIm1zZyB8IHRyYW5zbGF0ZVwiPjwvc3Bhbj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuXG4gICAgPGRpdiBjbGFzcz1cIm1vZGFsLWZvb3RlclwiPlxuICAgICAgPGJ1dHRvblxuICAgICAgICB0aXRsZT1cInt7ICdDbG9zZScgfCB0cmFuc2xhdGUgfX1cIlxuICAgICAgICAoY2xpY2spPVwiYnNNb2RhbFJlZi5oaWRlKClcIlxuICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgY2xhc3M9XCJidG4gYnRuLWRlZmF1bHRcIlxuICAgICAgPlxuICAgICAgICB7eyAnQ2xvc2UnIHwgdHJhbnNsYXRlIH19XG4gICAgICA8L2J1dHRvbj5cbiAgICA8L2Rpdj5cbiAgPC9uZy10ZW1wbGF0ZT5cbjwvYzh5LW1vZGFsPlxuIl19
|
|
218
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2lnZm94LWRldmljZS1yZWdpc3RyYXRpb24uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc2lnZm94LWRldmljZS1yZWdpc3RyYXRpb24vc2lnZm94LWRldmljZS1yZWdpc3RyYXRpb24uY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vc2lnZm94LWRldmljZS1yZWdpc3RyYXRpb24vc2lnZm94LWRldmljZS1yZWdpc3RyYXRpb24uY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMxQyxPQUFPLEVBQW1CLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzVELE9BQU8sRUFBYyxnQkFBZ0IsRUFBRSxPQUFPLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUU1RSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUN2RCxPQUFPLEVBQUUsU0FBUyxFQUFFLElBQUksRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUM1QyxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDakQsT0FBTyxFQUFFLGVBQWUsRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxFQUFFLEVBQUUsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUN2RixPQUFPLEVBQUUsVUFBVSxFQUFFLEdBQUcsRUFBRSxRQUFRLEVBQUUsV0FBVyxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUU5RixPQUFPLEVBQUUsU0FBUyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sMkJBQTJCLENBQUM7Ozs7Ozs7OztBQWM3RSxNQUFNLE9BQU8saUNBQWlDO0lBc0s1QyxZQUNTLFVBQXNCLEVBQ3JCLGFBQW9DLEVBQ3BDLGdCQUFrQyxFQUNsQyxnQkFBa0M7UUFIbkMsZUFBVSxHQUFW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QUFPLEtBQUssQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxxQkFBcUIsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDNUYsQ0FBQztJQUVELGVBQWU7UUFDYixPQUFPLEtBQUssQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxjQUFjLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3JGLENBQUM7SUFFRCxXQUFXO1FBQ1QsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUN6QixJQUFJLENBQUMsWUFBWSxDQUFDLFFBQVEsRUFBRSxDQUFDO0lBQy9CLENBQUM7OzhIQXRPVSxpQ0FBaUM7a0hBQWpDLGlDQUFpQyxzRUN6QjlDLDR2R0FzR0E7MkZEN0VhLGlDQUFpQztrQkFKN0MsU0FBUzsrQkFDRSxnQ0FBZ0MiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDZGtTdGVwIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL3N0ZXBwZXInO1xuaW1wb3J0IHsgQ29tcG9uZW50IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBBYnN0cmFjdENvbnRyb2wsIEZvcm1Hcm91cCB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IEM4eVN0ZXBwZXIsIEdhaW5zaWdodFNlcnZpY2UsIGdldHRleHQgfSBmcm9tICdAYzh5L25neC1jb21wb25lbnRzJztcbmltcG9ydCB7IEZvcm1seUZpZWxkQ29uZmlnIH0gZnJvbSAnQG5neC1mb3JtbHkvY29yZSc7XG5pbXBvcnQgeyBUcmFuc2xhdGVTZXJ2aWNlIH0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSc7XG5pbXBvcnQgeyBjbG9uZURlZXAsIHVuaXEgfSBmcm9tICdsb2Rhc2gtZXMnO1xuaW1wb3J0IHsgQnNNb2RhbFJlZiB9IGZyb20gJ25neC1ib290c3RyYXAvbW9kYWwnO1xuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBkZWZlciwgZm9ya0pvaW4sIGZyb20sIG9mLCBTdWJqZWN0LCB0aHJvd0Vycm9yIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBjYXRjaEVycm9yLCBtYXAsIG1lcmdlTWFwLCBzaGFyZVJlcGxheSwgc3dpdGNoTWFwLCB0YWtlVW50aWwgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBTaWdmb3hEZXZpY2UsIFNpZ2ZveERldmljZUZvcm1seSB9IGZyb20gJy4vc2lnZm94LWRldmljZS1yZWdpc3RyYXRpb24ubW9kZWwnO1xuaW1wb3J0IHsgRXJyb3JOYW1lLCBTaWdmb3hQcm92aWRlclNlcnZpY2UgfSBmcm9tICcuL3NpZ2ZveC1wcm92aWRlci5zZXJ2aWNlJztcblxudHlwZSBTdGF0ZSA9XG4gIHwgJ2xvYWRQZW5kaW5nJ1xuICB8ICdsb2FkU3VjY2VzcydcbiAgfCAnbG9hZEVycm9yJ1xuICB8ICdyZWdpc3RyYXRpb25QZW5kaW5nJ1xuICB8ICdyZWdpc3RyYXRpb25TdWNjZXNzJ1xuICB8ICdyZWdpc3RyYXRpb25FcnJvcic7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2M4eS1zaWdmb3gtZGV2aWNlLXJlZ2lzdHJhdGlvbicsXG4gIHRlbXBsYXRlVXJsOiAnc2lnZm94LWRldmljZS1yZWdpc3RyYXRpb24uY29tcG9uZW50Lmh0bWwnXG59KVxuZXhwb3J0IGNsYXNzIFNpZ2ZveERldmljZVJlZ2lzdHJhdGlvbkNvbXBvbmVudCB7XG4gIHN0ZXBwZXI6IEM4eVN0ZXBwZXI7XG4gIHJlYWRvbmx5IFBBR0lORzogb2JqZWN0ID0ge1xuICAgIHdpdGhUb3RhbFBhZ2VzOiB0cnVlLFxuICAgIHBhZ2VTaXplOiAxMFxuICB9O1xuXG4gIGZvcm0gPSBuZXcgRm9ybUdyb3VwKHt9KTtcbiAgbW9kZWw6IFNpZ2ZveERldmljZUZvcm1seSA9IHt9IGFzIGFueTtcbiAgcHJvdG9jb2xzJCA9IHRoaXMuZ2V0UHJvdG9jb2xzJCgpO1xuICBjb25uZWN0aW9ucyQgPSB0aGlzLmdldENvbm5lY3Rpb25zJCgpO1xuICB1bnN1YnNjcmliZSQ6IFN1YmplY3Q8dm9pZD4gPSBuZXcgU3ViamVjdCgpO1xuXG4gIGxvYWQkID0gdGhpcy5jb25uZWN0aW9ucyQucGlwZShcbiAgICBjYXRjaEVycm9yKChlcnJvcjogRXJyb3IpID0+IG9mKGVycm9yKSksXG4gICAgc3dpdGNoTWFwKGNvbm5lY3Rpb25zID0+IHtcbiAgICAgIGlmIChcbiAgICAgICAgY29ubmVjdGlvbnMgaW5zdGFuY2VvZiBFcnJvciAmJlxuICAgICAgICBjb25uZWN0aW9ucy5uYW1lID09PSBFcnJvck5hbWUuTm9Db25uZWN0aXZpdHlTZXR0aW5nc0Vycm9yXG4gICAgICApIHtcbiAgICAgICAgcmV0dXJuIG9mKFtjb25uZWN0aW9uc10pO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGZvcmtKb2luKFtcbiAgICAgICAgb2YoY29ubmVjdGlvbnMpLFxuICAgICAgICB0aGlzLnByb3RvY29scyQucGlwZShjYXRjaEVycm9yKChlcnJvcjogRXJyb3IpID0+IG9mKGVycm9yKSkpXG4gICAgICBdKTtcbiAgICB9KSxcbiAgICBtYXAocmVzdWx0cyA9PiB7XG4gICAgICByZXR1cm4gcmVzdWx0cy5maWx0ZXIocmVzdWx0ID0+IHtcbiAgICAgICAgcmV0dXJuIHJlc3VsdCBpbnN0YW5jZW9mIEVycm9yO1xuICAgICAgfSk7XG4gICAgfSksXG4gICAgc3dpdGNoTWFwKGVycm9ycyA9PiB7XG4gICAgICByZXR1cm4gZXJyb3JzLmxlbmd0aCA9PT0gMCA/IG9mKFtdKSA6IHRocm93RXJyb3IoZXJyb3JzKTtcbiAgICB9KVxuICApO1xuXG4gIGZpZWxkczogRm9ybWx5RmllbGRDb25maWdbXSA9IFtcbiAgICB7XG4gICAgICBrZXk6ICdpZCcsXG4gICAgICB0eXBlOiAnc3RyaW5nJyxcbiAgICAgIHRlbXBsYXRlT3B0aW9uczoge1xuICAgICAgICBwbGFjZWhvbGRlcjogJ0ZFRDk4NycsXG4gICAgICAgIGxhYmVsOiBnZXR0ZXh0KCdJRCcpLFxuICAgICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICAgICAgcGF0dGVybjogJygweCl7MCwxfVswLTlBLUZdKyhoKXswLDF9J1xuICAgICAgfSxcbiAgICAgIHZhbGlkYXRpb246IHtcbiAgICAgICAgbWVzc2FnZXM6IHtcbiAgICAgICAgICBwYXR0ZXJuOiBnZXR0ZXh0KCdNdXN0IGJlIGEgdmFsaWQgaGV4YWRlY2ltYWwgbnVtYmVyLicpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuICAgIHtcbiAgICAgIGtleTogJ3BhYycsXG4gICAgICB0eXBlOiAnc3RyaW5nJyxcbiAgICAgIHRlbXBsYXRlT3B0aW9uczoge1xuICAgICAgICBwbGFjZWhvbGRlcjogJ0ZFRENCQTk4NzY1NDMyMTAnLFxuICAgICAgICBsYWJlbDogZ2V0dGV4dCgnUEFDJyksXG4gICAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgICAgICBwYXR0ZXJuOiAnXihbYS1mQS1GMC05XXsxNn0pJCdcbiAgICAgIH0sXG4gICAgICB2YWxpZGF0aW9uOiB7XG4gICAgICAgIG1lc3NhZ2VzOiB7XG4gICAgICAgICAgcGF0dGVybjogZ2V0dGV4dCgnTXVzdCBiZSBhIHZhbGlkIDE2IGRpZ2l0IGhleGFkZWNpbWFsIG51bWJlci4nKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSxcbiAgICB7XG4gICAgICBrZXk6ICdjb25uZWN0aW9uJyxcbiAgICAgIHR5cGU6ICd0eXBlYWhlYWQnLFxuICAgICAgdGVtcGxhdGVPcHRpb25zOiB7XG4gICAgICAgIGxhYmVsOiBnZXR0ZXh0KCdDb25uZWN0aW9uJyksXG4gICAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgICAgICBjOHlGb3JPcHRpb25zOiB0aGlzLmNvbm5lY3Rpb25zJCxcbiAgICAgICAgZGlzcGxheVByb3BlcnR5OiAnbmFtZScsXG4gICAgICAgIHZhbHVlUHJvcGVydGllczogWyduYW1lJ11cbiAgICAgIH1cbiAgICB9LFxuICAgIHtcbiAgICAgIGtleTogJ2NvbnRyYWN0JyxcbiAgICAgIHR5cGU6ICd0eXBlYWhlYWQnLFxuICAgICAgdGVtcGxhdGVPcHRpb25zOiB7XG4gICAgICAgIGxhYmVsOiBnZXR0ZXh0KCdDb250cmFjdCcpLFxuICAgICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICAgICAgcGxhY2Vob2xkZXI6ICdGcmVlIGNvbnRyYWN0XzI1JyxcbiAgICAgICAgZGlzcGxheVByb3BlcnR5OiAnbmFtZScsXG4gICAgICAgIHZhbHVlUHJvcGVydGllczogWydpZCddLFxuICAgICAgICBkZXNjcmlwdGlvbjogZ2V0dGV4dCgnT25seSBhY3RpdmUgY29udHJhY3RzIHdpdGggZnJlZSBzbG90cyBhcmUgZGlzcGxheWVkLicpXG4gICAgICB9LFxuICAgICAgaG9va3M6IHtcbiAgICAgICAgb25Jbml0OiBmaWVsZCA9PiB7XG4gICAgICAgICAgY29uc3QgY29ubmVjdGlvbkNvbnRyb2wgPSBmaWVsZC5mb3JtLmdldCgnY29ubmVjdGlvbicpO1xuICAgICAgICAgIGNvbm5lY3Rpb25Db250cm9sLnZhbHVlQ2hhbmdlc1xuICAgICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICAgIHRha2VVbnRpbCh0aGlzLnVuc3Vic2NyaWJlJCksXG4gICAgICAgICAgICAgIG1lcmdlTWFwKCh7IG5hbWUgfSkgPT4gdGhpcy5nZXRDb250cmFjdHMkKG5hbWUpKVxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgLnN1YnNjcmliZShcbiAgICAgICAgICAgICAgcHJvZmlsZXMgPT4ge1xuICAgICAgICAgICAgICAgIGZpZWxkLnRlbXBsYXRlT3B0aW9ucy5jOHlGb3JPcHRpb25zID0gb2YocHJvZmlsZXMpO1xuICAgICAgICAgICAgICAgIGZpZWxkLmZvcm1Db250cm9sLnNldFZhbHVlKG51bGwpO1xuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICBlcnJvciA9PiB7XG4gICAgICAgICAgICAgICAgZmllbGQuZm9ybS5jb250cm9scy5jb250cmFjdC5zZXRFcnJvcnMoeyBjb250cmFjdDogdHJ1ZSB9KTtcbiAgICAgICAgICAgICAgICBmaWVsZC52YWxpZGF0b3JzLmNvbnRyYWN0Lm1lc3NhZ2UgPSBlcnJvci5tZXNzYWdlO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgdmFsaWRhdG9yczoge1xuICAgICAgICBjb250cmFjdDoge1xuICAgICAgICAgIGV4cHJlc3Npb246IChjb250cm9sOiBBYnN0cmFjdENvbnRyb2wpID0+IHtcbiAgICAgICAgICAgIHJldHVybiBjb250cm9sLnN0YXR1cyA9PT0gJ1ZBTElEJztcbiAgICAgICAgICB9LFxuICAgICAgICAgIG1lc3NhZ2U6ICgpID0+ICcnXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuICAgIHtcbiAgICAgIGtleTogJ2RldmljZVR5cGUnLFxuICAgICAgdHlwZTogJ3R5cGVhaGVhZCcsXG4gICAgICB0ZW1wbGF0ZU9wdGlvbnM6IHtcbiAgICAgICAgbGFiZWw6IGdldHRleHQoJ0RldmljZSBwcm90b2NvbCcpLFxuICAgICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICAgICAgYzh5Rm9yT3B0aW9uczogdGhpcy5wcm90b2NvbHMkLFxuICAgICAgICBkaXNwbGF5UHJvcGVydHk6ICduYW1lJyxcbiAgICAgICAgdmFsdWVQcm9wZXJ0aWVzOiBbJ2lkJywgJ25hbWUnXVxuICAgICAgfVxuICAgIH0sXG4gICAge1xuICAgICAga2V5OiAncHJvZHVjdENlcnRpZmljYXRlJyxcbiAgICAgIHR5cGU6ICdzdHJpbmcnLFxuICAgICAgdGVtcGxhdGVPcHRpb25zOiB7XG4gICAgICAgIHBsYWNlaG9sZGVyOiAnUF8wMDFGX0VEQ0JfMDEnLFxuICAgICAgICBsYWJlbDogZ2V0dGV4dCgnUHJvZHVjdCBjZXJ0aWZpY2F0ZSBrZXknKSxcbiAgICAgICAgcGF0dGVybjogJ1BfWzAtOUEtRl17NH1fWzAtOUEtRl17NH1fWzAtOUEtRl17Mn0nLFxuICAgICAgICBkZXNjcmlwdGlvbjogZ2V0dGV4dChcbiAgICAgICAgICAnSWYgbm8gcHJvZHVjdCBjZXJ0aWZpY2F0ZSBrZXkgaXMgc3BlY2lmaWVkLCB0aGUgZGV2aWNlIGlzIGNvbnNpZGVyZWQgYSBwcm90b3R5cGUuJ1xuICAgICAgICApXG4gICAgICB9LFxuICAgICAgdmFsaWRhdGlvbjoge1xuICAgICAgICBtZXNzYWdlczoge1xuICAgICAgICAgIHBhdHRlcm46IChfZXJyb3IsIF9maWVsZDogRm9ybWx5RmllbGRDb25maWcpID0+XG4gICAgICAgICAgICB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudChcbiAgICAgICAgICAgICAgZ2V0dGV4dCgnTXVzdCBiZSBhIHZhbGlkIHByb2R1Y3QgY2VydGlmaWNhdGUga2V5LCBmb3IgZXhhbXBsZSwge3sgZXhhbXBsZSB9fScpLFxuICAgICAgICAgICAgICB7IGV4YW1wbGU6ICdQXzAwMUZfRURDQl8wMScgfVxuICAgICAgICAgICAgKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICBdO1xuXG4gIHJlZ2lzdHJhdGlvblN0ZXBMYWJlbHMgPSB7XG4gICAgbmV4dDogZ2V0dGV4dCgnUmVnaXN0ZXInKVxuICB9O1xuICBmaW5hbFN0ZXBMYWJlbHMgPSB7XG4gICAgYmFjazogZ2V0dGV4dCgnQ2xvc2UnKVxuICB9O1xuXG4gIHN0YXRlOiBTdGF0ZSA9ICdsb2FkUGVuZGluZyc7XG4gIGVycm9ycyQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PEVycm9yW10+KFtdKTtcbiAgZXJyb3JNZXNzYWdlcyQgPSB0aGlzLmVycm9ycyQucGlwZShcbiAgICBtYXAoZXJyb3JzID0+IGVycm9ycy5tYXAoZXJyb3IgPT4gZXJyb3IubWVzc2FnZSkpLFxuICAgIG1hcChtZXNzYWdlcyA9PiB1bmlxKG1lc3NhZ2VzKSlcbiAgKTtcbiAgY29uc3RydWN0b3IoXG4gICAgcHVibGljIGJzTW9kYWxSZWY6IEJzTW9kYWxSZWYsXG4gICAgcHJpdmF0ZSBzaWdmb3hTZXJ2aWNlOiBTaWdmb3hQcm92aWRlclNlcnZpY2UsXG4gICAgcHJpdmF0ZSB0cmFuc2xhdGVTZXJ2aWNlOiBUcmFuc2xhdGVTZXJ2aWNlLFxuICAgIHByaXZhdGUgZ2FpbnNpZ2h0U2VydmljZTogR2FpbnNpZ2h0U2VydmljZVxuICApIHtcbiAgICB0aGlzLmxvYWQkLnN1YnNjcmliZShcbiAgICAgICgpID0+IHtcbiAgICAgICAgdGhpcy5zdGF0ZSA9ICdsb2FkU3VjY2Vzcyc7XG4gICAgICB9LFxuICAgICAgZXJyb3JzID0+IHtcbiAgICAgICAgdGhpcy5zdGF0ZSA9ICdsb2FkRXJyb3InO1xuICAgICAgICB0aGlzLmVycm9ycyQubmV4dChlcnJvcnMpO1xuICAgICAgfVxuICAgICk7XG4gIH1cblxuICBhc3luYyBjcmVhdGUoZXZlbnQ6IHsgc3RlcHBlcjogQzh5U3RlcHBlcjsgc3RlcDogQ2RrU3RlcCB9KSB7XG4gICAgdGhpcy5zdGF0ZSA9ICdyZWdpc3RyYXRpb25QZW5kaW5nJztcbiAgICBjb25zdCBzaWdmb3hEZXZpY2UgPSB0aGlzLmdldFNpZ2ZveERldmljZVRvU2VuZCgpO1xuICAgIHRyeSB7XG4gICAgICBhd2FpdCB0aGlzLnNpZ2ZveFNlcnZpY2UuY3JlYXRlRGV2aWNlKHNpZ2ZveERldmljZSk7XG4gICAgICB0aGlzLnN0YXRlID0gJ3JlZ2lzdHJhdGlvblN1Y2Nlc3MnO1xuICAgICAgdGhpcy5nYWluc2lnaHRTZXJ2aWNlLnRyaWdnZXJFdmVudCgnZG1EZXZpY2VSZWdpc3RyYXRpb24nLCB7XG4gICAgICAgIGFjdGlvbjogJ3JlZ2lzdHJhdGlvblN1Y2Nlc3MnLFxuICAgICAgICBuYW1lOiAnZG1EZXZpY2VSZWdpc3RyYXRpb24nXG4gICAgICB9KTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgdGhpcy5nYWluc2lnaHRTZXJ2aWNlLnRyaWdnZXJFdmVudCgnZG1EZXZpY2VSZWdpc3RyYXRpb24nLCB7XG4gICAgICAgIGFjdGlvbjogJ3JlZ2lzdHJhdGlvbkZhaWx1cmUnLFxuICAgICAgICBuYW1lOiAnZG1EZXZpY2VSZWdpc3RyYXRpb24nXG4gICAgICB9KTtcbiAgICAgIHRoaXMuc3RhdGUgPSAncmVnaXN0cmF0aW9uRXJyb3InO1xuICAgICAgdGhpcy5lcnJvcnMkLm5leHQoW2Vycm9yXSk7XG4gICAgfVxuXG4gICAgZXZlbnQuc3RlcHBlci5uZXh0KCk7XG4gIH1cblxuICBnZXRTaWdmb3hEZXZpY2VUb1NlbmQoKSB7XG4gICAgY29uc3Qgc2lnZm94RGV2aWNlOiBTaWdmb3hEZXZpY2UgPSBjbG9uZURlZXAodGhpcy5tb2RlbCk7XG4gICAgc2lnZm94RGV2aWNlLmxuc0Nvbm5lY3Rpb25OYW1lID0gdGhpcy5tb2RlbC5jb25uZWN0aW9uLm5hbWU7XG4gICAgc2lnZm94RGV2aWNlLmNvbnRyYWN0SWQgPSB0aGlzLm1vZGVsLmNvbnRyYWN0LmlkO1xuICAgIHNpZ2ZveERldmljZS5wcm90b3R5cGUgPSAhc2lnZm94RGV2aWNlLnByb2R1Y3RDZXJ0aWZpY2F0ZTtcbiAgICBkZWxldGUgKHNpZ2ZveERldmljZSBhcyBhbnkpLmNvbnRyYWN0O1xuICAgIGRlbGV0ZSAoc2lnZm94RGV2aWNlIGFzIGFueSkuY29ubmVjdGlvbjtcbiAgICByZXR1cm4gc2lnZm94RGV2aWNlO1xuICB9XG5cbiAgZ2V0Q29udHJhY3RzJChuYW1lKSB7XG4gICAgcmV0dXJuIGRlZmVyKCgpID0+IGZyb20odGhpcy5zaWdmb3hTZXJ2aWNlLmdldENvbnRyYWN0cyhuYW1lKSkpLnBpcGUoc2hhcmVSZXBsYXkoMSkpO1xuICB9XG5cbiAgZ2V0UHJvdG9jb2xzJCgpIHtcbiAgICByZXR1cm4gZGVmZXIoKCkgPT4gZnJvbSh0aGlzLnNpZ2ZveFNlcnZpY2UuZ2V0QXZhaWxhYmxlUHJvdG9jb2xzKCkpKS5waXBlKHNoYXJlUmVwbGF5KDEpKTtcbiAgfVxuXG4gIGdldENvbm5lY3Rpb25zJCgpIHtcbiAgICByZXR1cm4gZGVmZXIoKCkgPT4gZnJvbSh0aGlzLnNpZ2ZveFNlcnZpY2UuZ2V0Q29ubmVjdGlvbnMoKSkpLnBpcGUoc2hhcmVSZXBsYXkoMSkpO1xuICB9XG5cbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgdGhpcy51bnN1YnNjcmliZSQubmV4dCgpO1xuICAgIHRoaXMudW5zdWJzY3JpYmUkLmNvbXBsZXRlKCk7XG4gIH1cbn1cbiIsIjxjOHktbW9kYWxcbiAgW3RpdGxlXT1cIidTaWdmb3ggcmVnaXN0cmF0aW9uJyB8IHRyYW5zbGF0ZVwiXG4gIFtoZWFkZXJDbGFzc2VzXT1cIidkaWFsb2ctaGVhZGVyJ1wiXG4gIFtjdXN0b21Gb290ZXJdPVwidHJ1ZVwiXG4+XG4gIDxuZy1jb250YWluZXIgYzh5LW1vZGFsLXRpdGxlPlxuICAgIDxzcGFuIFtjOHlJY29uXT1cIidjOHktZGV2aWNlLWNvbm5lY3QnXCI+PC9zcGFuPlxuICA8L25nLWNvbnRhaW5lcj5cbiAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInN0YXRlID09PSAnbG9hZFBlbmRpbmcnOyBlbHNlIHJlZ2lzdHJhdGlvbkZvcm1cIj5cbiAgICA8ZGl2IGNsYXNzPVwicC0xNiB0ZXh0LWNlbnRlclwiPlxuICAgICAgPGM4eS1sb2FkaW5nPjwvYzh5LWxvYWRpbmc+XG4gICAgPC9kaXY+XG4gIDwvbmctY29udGFpbmVyPlxuXG4gIDxuZy10ZW1wbGF0ZSAjcmVnaXN0cmF0aW9uRm9ybT5cbiAgICA8Yzh5LXN0ZXBwZXJcbiAgICAgIFtoaWRlU3RlcFByb2dyZXNzXT1cInRydWVcIlxuICAgICAgbGluZWFyXG4gICAgICBjOHktbW9kYWwtYm9keVxuICAgICAgKm5nSWY9XCIoZXJyb3JNZXNzYWdlcyQgfCBhc3luYykubGVuZ3RoID09PSAwOyBlbHNlIGVycm9yTWVzc2FnZXNQcmVzZW50XCJcbiAgICA+XG4gICAgICA8Y2RrLXN0ZXAgW3N0ZXBDb250cm9sXT1cImZvcm1cIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cInAtYi0xNlwiPlxuICAgICAgICAgIDxwIGNsYXNzPVwibW9kYWwtc3VidGl0bGUgc3RpY2t5LXRvcFwiPlxuICAgICAgICAgICAge3sgJ1JlZ2lzdGVyIGEgc2luZ2xlIFNpZ2ZveCBkZXZpY2UnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgPC9wPlxuICAgICAgICAgIDxmb3JtbHktZm9ybVxuICAgICAgICAgICAgW2Zvcm1dPVwiZm9ybVwiXG4gICAgICAgICAgICBbZmllbGRzXT1cImZpZWxkc1wiXG4gICAgICAgICAgICBbbW9kZWxdPVwibW9kZWxcIlxuICAgICAgICAgICAgY2xhc3M9XCJkLWJsb2NrIHAtbC0yNCBwLXItMjQgcC10LTE2XCJcbiAgICAgICAgICA+PC9mb3JtbHktZm9ybT5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxjOHktc3RlcHBlci1idXR0b25zXG4gICAgICAgICAgW2xhYmVsc109XCJyZWdpc3RyYXRpb25TdGVwTGFiZWxzXCJcbiAgICAgICAgICAob25OZXh0KT1cImNyZWF0ZSgkZXZlbnQpXCJcbiAgICAgICAgICAob25DYW5jZWwpPVwiYnNNb2RhbFJlZi5oaWRlKClcIlxuICAgICAgICAgIFtzaG93QnV0dG9uc109XCJ7IGNhbmNlbDogdHJ1ZSwgbmV4dDogdHJ1ZSB9XCJcbiAgICAgICAgICBbcGVuZGluZ109XCJzdGF0ZSA9PT0gJ3JlZ2lzdHJhdGlvblBlbmRpbmcnXCJcbiAgICAgICAgICBbZGlzYWJsZWRdPVwiIWZvcm0udmFsaWRcIlxuICAgICAgICAgIGNsYXNzPVwibW9kYWwtZm9vdGVyIGQtYmxvY2sgc3RpY2t5LWJvdHRvbSBzZXBhcmF0b3ItdG9wIGJnLWNvbXBvbmVudFwiXG4gICAgICAgID48L2M4eS1zdGVwcGVyLWJ1dHRvbnM+XG4gICAgICA8L2Nkay1zdGVwPlxuICAgICAgPGNkay1zdGVwIHN0YXRlPVwiZmluYWxcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cInAtMTYgdGV4dC1jZW50ZXJcIiAqbmdJZj1cInN0YXRlID09PSAncmVnaXN0cmF0aW9uUGVuZGluZydcIj5cbiAgICAgICAgICA8Yzh5LWxvYWRpbmc+PC9jOHktbG9hZGluZz5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJtLTI0XCI+XG4gICAgICAgICAgPGM4eS1vcGVyYXRpb24tcmVzdWx0XG4gICAgICAgICAgICAqbmdJZj1cInN0YXRlID09PSAncmVnaXN0cmF0aW9uU3VjY2VzcydcIlxuICAgICAgICAgICAgdGV4dD1cInt7ICdEZXZpY2UgcmVnaXN0ZXJlZCcgfCB0cmFuc2xhdGUgfX1cIlxuICAgICAgICAgICAgW3NpemVdPVwiODRcIlxuICAgICAgICAgICAgW3ZlcnRpY2FsXT1cInRydWVcIlxuICAgICAgICAgICAgdHlwZT1cInN1Y2Nlc3NcIlxuICAgICAgICAgICAgY2xhc3M9XCJsZWFkIG0tYi0wXCJcbiAgICAgICAgICA+PC9jOHktb3BlcmF0aW9uLXJlc3VsdD5cbiAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgPGM4eS1zdGVwcGVyLWJ1dHRvbnNcbiAgICAgICAgICBjbGFzcz1cInN0aWNreS1ib3R0b20gZC1ibG9jayBwLXQtMTYgcC1iLTE2IHNlcGFyYXRvci10b3AgYmctY29tcG9uZW50XCJcbiAgICAgICAgICAob25DdXN0b20pPVwiYnNNb2RhbFJlZi5oaWRlKClcIlxuICAgICAgICAgIFtzaG93QnV0dG9uc109XCJ7IGN1c3RvbTogdHJ1ZSB9XCJcbiAgICAgICAgICBbbGFiZWxzXT1cImZpbmFsU3RlcExhYmVsc1wiXG4gICAgICAgID48L2M4eS1zdGVwcGVyLWJ1dHRvbnM+XG4gICAgICA8L2Nkay1zdGVwPlxuICAgIDwvYzh5LXN0ZXBwZXI+XG4gIDwvbmctdGVtcGxhdGU+XG5cbiAgPG5nLXRlbXBsYXRlICNlcnJvck1lc3NhZ2VzUHJlc2VudD5cbiAgICA8ZGl2IGNsYXNzPVwibS0yNFwiPlxuICAgICAgPGM4eS1vcGVyYXRpb24tcmVzdWx0XG4gICAgICAgICpuZ0lmPVwic3RhdGUgPT09ICdyZWdpc3RyYXRpb25FcnJvcidcIlxuICAgICAgICB0ZXh0PVwie3sgJ0ZhaWxlZCB0byByZWdpc3RlcicgfCB0cmFuc2xhdGUgfX1cIlxuICAgICAgICBbc2l6ZV09XCI4NFwiXG4gICAgICAgIFt2ZXJ0aWNhbF09XCJ0cnVlXCJcbiAgICAgICAgdHlwZT1cImVycm9yXCJcbiAgICAgICAgY2xhc3M9XCJsZWFkXCJcbiAgICAgID48L2M4eS1vcGVyYXRpb24tcmVzdWx0PlxuICAgICAgPGRpdlxuICAgICAgICAqbmdGb3I9XCJsZXQgbXNnIG9mIGVycm9yTWVzc2FnZXMkIHwgYXN5bmNcIlxuICAgICAgICBjbGFzcz1cIm0tYi04XCJcbiAgICAgICAgW25nQ2xhc3NdPVwie1xuICAgICAgICAgICd0ZXh0LWNlbnRlcic6IHN0YXRlID09PSAncmVnaXN0cmF0aW9uRXJyb3InLFxuICAgICAgICAgICdhbGVydCBhbGVydC1kYW5nZXInOiBzdGF0ZSA9PT0gJ2xvYWRFcnJvcidcbiAgICAgICAgfVwiXG4gICAgICA+XG4gICAgICAgIDxzcGFuIFtpbm5lckhUTUxdPVwibXNnIHwgdHJhbnNsYXRlXCI+PC9zcGFuPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG5cbiAgICA8ZGl2IGNsYXNzPVwibW9kYWwtZm9vdGVyXCI+XG4gICAgICA8YnV0dG9uXG4gICAgICAgIHRpdGxlPVwie3sgJ0Nsb3NlJyB8IHRyYW5zbGF0ZSB9fVwiXG4gICAgICAgIChjbGljayk9XCJic01vZGFsUmVmLmhpZGUoKVwiXG4gICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICBjbGFzcz1cImJ0biBidG4tZGVmYXVsdFwiXG4gICAgICA+XG4gICAgICAgIHt7ICdDbG9zZScgfCB0cmFuc2xhdGUgfX1cbiAgICAgIDwvYnV0dG9uPlxuICAgIDwvZGl2PlxuICA8L25nLXRlbXBsYXRlPlxuPC9jOHktbW9kYWw+XG4iXX0=
|
|
@@ -469,10 +469,10 @@ class ActilityDeviceRegistrationComponent {
|
|
|
469
469
|
}
|
|
470
470
|
}
|
|
471
471
|
ActilityDeviceRegistrationComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.0.6", ngImport: i0, type: ActilityDeviceRegistrationComponent, deps: [{ token: i1$1.BsModalRef }, { token: ActilityDeviceRegistrationService }, { token: i3.GainsightService }], target: i0.ɵɵFactoryTarget.Component });
|
|
472
|
-
ActilityDeviceRegistrationComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.0.6", type: ActilityDeviceRegistrationComponent, selector: "c8y-actility-registration", ngImport: i0, template: "<c8y-modal [headerClasses]=\"'dialog-header'\"
|
|
472
|
+
ActilityDeviceRegistrationComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.0.6", type: ActilityDeviceRegistrationComponent, selector: "c8y-actility-registration", ngImport: i0, template: "<c8y-modal\n [title]=\"'Actility LoRa registration' | translate\"\n [headerClasses]=\"'dialog-header'\"\n [customFooter]=\"true\"\n>\n <ng-container c8y-modal-title>\n <span [c8yIcon]=\"'c8y-device-connect'\"></span>\n </ng-container>\n\n <ng-container *ngIf=\"state === 'loadPending'; else registrationForm\">\n <div class=\"p-16 text-center\">\n <c8y-loading></c8y-loading>\n </div>\n </ng-container>\n\n <!--Formly schema is rendered-->\n <ng-template #registrationForm>\n <c8y-stepper\n [hideStepProgress]=\"true\"\n c8y-modal-body\n linear\n *ngIf=\"(errorMessages$ | async).length === 0; else errorMessagesPresent\"\n >\n <cdk-step [stepControl]=\"form\">\n <div class=\"p-b-16\">\n <p class=\"modal-subtitle sticky-top\">\n {{ 'Register a single Actility device' | translate }}\n </p>\n <formly-form\n [form]=\"form\"\n [fields]=\"fields\"\n [model]=\"model\"\n class=\"formly-group-array-cols d-block p-l-24 p-r-24 p-t-16\"\n ></formly-form>\n </div>\n\n <c8y-stepper-buttons\n [labels]=\"registrationStepLabels\"\n (onNext)=\"register($event)\"\n (onCancel)=\"bsModalRef.hide()\"\n [showButtons]=\"{ cancel: true, next: true }\"\n [pending]=\"state === 'registrationPending'\"\n [disabled]=\"!form?.valid\"\n class=\"sticky-bottom d-block p-t-16 p-b-16 separator-top bg-level-0\"\n ></c8y-stepper-buttons>\n </cdk-step>\n <cdk-step state=\"final\">\n <!--success scenario-->\n <div class=\"p-16 text-center\" *ngIf=\"state === 'registrationPending'\">\n <c8y-loading></c8y-loading>\n </div>\n <div class=\"m-24\">\n <c8y-operation-result\n *ngIf=\"state === 'registrationSuccess'\"\n text=\"{{ 'Device registered' | translate }}\"\n [size]=\"84\"\n [vertical]=\"true\"\n type=\"success\"\n class=\"lead m-b-0\"\n ></c8y-operation-result>\n </div>\n <c8y-stepper-buttons\n class=\"sticky-bottom d-block p-t-16 p-b-16 separator-top bg-level-0\"\n (onCustom)=\"bsModalRef.hide()\"\n [showButtons]=\"{ custom: true }\"\n [labels]=\"finalStepLabels\"\n ></c8y-stepper-buttons>\n </cdk-step>\n </c8y-stepper>\n </ng-template>\n\n <!--Failure scenario-->\n <ng-template #errorMessagesPresent>\n <div class=\"m-24\">\n <c8y-operation-result\n *ngIf=\"state === 'registrationError'\"\n text=\"{{ 'Failed to register' | translate }}\"\n [size]=\"84\"\n [vertical]=\"true\"\n type=\"error\"\n class=\"lead\"\n ></c8y-operation-result>\n <div\n *ngFor=\"let msg of errorMessages$ | async\"\n class=\"m-b-8\"\n [ngClass]=\"{\n 'text-center': state === 'registrationError',\n 'alert alert-danger': state === 'loadError'\n }\"\n >\n <span [innerHTML]=\"msg | translate\"></span>\n </div>\n </div>\n <div class=\"modal-footer\">\n <button\n title=\"{{ 'Close' | translate }}\"\n (click)=\"bsModalRef.hide()\"\n type=\"button\"\n class=\"btn btn-default\"\n >\n {{ 'Close' | translate }}\n </button>\n </div>\n </ng-template>\n</c8y-modal>\n", dependencies: [{ kind: "directive", type: i3.IconDirective, selector: "[c8yIcon]", inputs: ["c8yIcon"] }, { kind: "directive", type: i4.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i4.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i3.LoadingComponent, selector: "c8y-loading" }, { kind: "component", type: i3.OperationResultComponent, selector: "c8y-operation-result", inputs: ["text", "vertical", "size", "type"] }, { kind: "component", type: i3.ModalComponent, selector: "c8y-modal", inputs: ["disabled", "close", "dismiss", "title", "body", "customFooter", "headerClasses", "labels"], outputs: ["onDismiss", "onClose"] }, { kind: "component", type: i3.C8yStepper, selector: "c8y-stepper", inputs: ["disableDefaultIcons", "disableProgressButtons", "customClasses", "hideStepProgress", "useStepLabelsAsTitlesOnly"], outputs: ["onStepChange"] }, { kind: "component", type: i5.CdkStep, selector: "cdk-step", inputs: ["stepControl", "label", "errorMessage", "aria-label", "aria-labelledby", "state", "editable", "optional", "completed", "hasError"], outputs: ["interacted"], exportAs: ["cdkStep"] }, { kind: "component", type: i3.C8yStepperButtons, selector: "c8y-stepper-buttons", inputs: ["labels", "pending", "disabled", "showButtons"], outputs: ["onCancel", "onNext", "onBack", "onCustom"] }, { kind: "component", type: i6.FormlyForm, selector: "formly-form", inputs: ["model", "fields", "options", "form"], outputs: ["modelChange"] }, { kind: "pipe", type: i3.C8yTranslatePipe, name: "translate" }, { kind: "pipe", type: i4.AsyncPipe, name: "async" }] });
|
|
473
473
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.6", ngImport: i0, type: ActilityDeviceRegistrationComponent, decorators: [{
|
|
474
474
|
type: Component,
|
|
475
|
-
args: [{ selector: 'c8y-actility-registration', template: "<c8y-modal [headerClasses]=\"'dialog-header'\"
|
|
475
|
+
args: [{ selector: 'c8y-actility-registration', template: "<c8y-modal\n [title]=\"'Actility LoRa registration' | translate\"\n [headerClasses]=\"'dialog-header'\"\n [customFooter]=\"true\"\n>\n <ng-container c8y-modal-title>\n <span [c8yIcon]=\"'c8y-device-connect'\"></span>\n </ng-container>\n\n <ng-container *ngIf=\"state === 'loadPending'; else registrationForm\">\n <div class=\"p-16 text-center\">\n <c8y-loading></c8y-loading>\n </div>\n </ng-container>\n\n <!--Formly schema is rendered-->\n <ng-template #registrationForm>\n <c8y-stepper\n [hideStepProgress]=\"true\"\n c8y-modal-body\n linear\n *ngIf=\"(errorMessages$ | async).length === 0; else errorMessagesPresent\"\n >\n <cdk-step [stepControl]=\"form\">\n <div class=\"p-b-16\">\n <p class=\"modal-subtitle sticky-top\">\n {{ 'Register a single Actility device' | translate }}\n </p>\n <formly-form\n [form]=\"form\"\n [fields]=\"fields\"\n [model]=\"model\"\n class=\"formly-group-array-cols d-block p-l-24 p-r-24 p-t-16\"\n ></formly-form>\n </div>\n\n <c8y-stepper-buttons\n [labels]=\"registrationStepLabels\"\n (onNext)=\"register($event)\"\n (onCancel)=\"bsModalRef.hide()\"\n [showButtons]=\"{ cancel: true, next: true }\"\n [pending]=\"state === 'registrationPending'\"\n [disabled]=\"!form?.valid\"\n class=\"sticky-bottom d-block p-t-16 p-b-16 separator-top bg-level-0\"\n ></c8y-stepper-buttons>\n </cdk-step>\n <cdk-step state=\"final\">\n <!--success scenario-->\n <div class=\"p-16 text-center\" *ngIf=\"state === 'registrationPending'\">\n <c8y-loading></c8y-loading>\n </div>\n <div class=\"m-24\">\n <c8y-operation-result\n *ngIf=\"state === 'registrationSuccess'\"\n text=\"{{ 'Device registered' | translate }}\"\n [size]=\"84\"\n [vertical]=\"true\"\n type=\"success\"\n class=\"lead m-b-0\"\n ></c8y-operation-result>\n </div>\n <c8y-stepper-buttons\n class=\"sticky-bottom d-block p-t-16 p-b-16 separator-top bg-level-0\"\n (onCustom)=\"bsModalRef.hide()\"\n [showButtons]=\"{ custom: true }\"\n [labels]=\"finalStepLabels\"\n ></c8y-stepper-buttons>\n </cdk-step>\n </c8y-stepper>\n </ng-template>\n\n <!--Failure scenario-->\n <ng-template #errorMessagesPresent>\n <div class=\"m-24\">\n <c8y-operation-result\n *ngIf=\"state === 'registrationError'\"\n text=\"{{ 'Failed to register' | translate }}\"\n [size]=\"84\"\n [vertical]=\"true\"\n type=\"error\"\n class=\"lead\"\n ></c8y-operation-result>\n <div\n *ngFor=\"let msg of errorMessages$ | async\"\n class=\"m-b-8\"\n [ngClass]=\"{\n 'text-center': state === 'registrationError',\n 'alert alert-danger': state === 'loadError'\n }\"\n >\n <span [innerHTML]=\"msg | translate\"></span>\n </div>\n </div>\n <div class=\"modal-footer\">\n <button\n title=\"{{ 'Close' | translate }}\"\n (click)=\"bsModalRef.hide()\"\n type=\"button\"\n class=\"btn btn-default\"\n >\n {{ 'Close' | translate }}\n </button>\n </div>\n </ng-template>\n</c8y-modal>\n" }]
|
|
476
476
|
}], ctorParameters: function () { return [{ type: i1$1.BsModalRef }, { type: ActilityDeviceRegistrationService }, { type: i3.GainsightService }]; } });
|
|
477
477
|
|
|
478
478
|
class ActilityDeviceRegistrationButtonComponent {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"c8y-ngx-components-actility-device-registration.mjs","sources":["../../actility-device-registration/actility-device-registration.service.ts","../../actility-device-registration/actility-device-registration.component.ts","../../actility-device-registration/actility-device-registration.component.html","../../actility-device-registration/actility-device-registration-button.component.ts","../../actility-device-registration/actility-device-registration-button.component.html","../../actility-device-registration/actility-device-registration.factory.ts","../../actility-device-registration/actility-device-registration.module.ts","../../actility-device-registration/c8y-ngx-components-actility-device-registration.ts"],"sourcesContent":["import { Injectable } from '@angular/core';\nimport { TranslateService } from '@ngx-translate/core';\nimport {\n FetchClient,\n IFetchOptions,\n ApplicationService,\n IManagedObject,\n InventoryService,\n IResultList\n} from '@c8y/client';\nimport { gettext, OptionsService } from '@c8y/ngx-components';\nimport {\n ActilityDeviceRegistration,\n ConnectivityPlan,\n DeviceProfile\n} from './actility-device-registration.model';\nimport { some } from 'lodash-es';\n\nexport enum ErrorName {\n NoConnectivityPlansError = 'NoConnectivityPlansError',\n NoFreeSlotsInConnectivityPlansError = 'NoFreeSlotsInConnectivityPlansError',\n NoConnectivitySettingsError = 'NoConnectivitySettingsError',\n ConnectivitySettingsError = 'ConnectivitySettingsError',\n NoDeviceProfilesError = 'NoDeviceProfilesError',\n DeviceProfilesFetchError = 'DeviceProfilesFetchError',\n NoDeviceProtocolsError = 'NoDeviceProtocolsError',\n DeviceProtocolsFetchError = 'DeviceProtocolsFetchError',\n RegistrationError = 'RegistrationError'\n}\n\n@Injectable({ providedIn: 'root' })\nexport class ActilityDeviceRegistrationService {\n private baseUrl = '/service/actility';\n private registrationUrl: string = `${this.baseUrl}/newDeviceRequest`;\n private connectivityPlansUrl: string = `${this.baseUrl}/connectivityPlans`;\n private deviceProfilesUrl: string = `${this.baseUrl}/deviceProfiles`;\n private headers: object = {\n 'Content-Type': 'application/json'\n };\n\n constructor(\n private inventoryService: InventoryService,\n private client: FetchClient,\n private translateService: TranslateService,\n private applicationService: ApplicationService,\n private optionsService: OptionsService\n ) {}\n\n async getConnections() {\n const options: IFetchOptions = {\n method: 'GET',\n headers: this.headers\n };\n const res = await this.client.fetch(`${this.baseUrl}/lns-connection`, options);\n const data = await res.json();\n\n if (res.status === 200) {\n if (data.length === 0) {\n await this.throwNoConnectivitySettingsError();\n }\n } else {\n await this.throwConnectivitySettingsError(data);\n }\n return { res, data };\n }\n /**\n * Gets connectivity plans from LoRa platform.\n * @param connectionName The name of connection for which connectivity plans will be retrieved\n * @returns The result list with connectivity plans, or throws an error with exception.\n */\n async getConnectivityPlans(connectionName: string): Promise<IResultList<ConnectivityPlan>> {\n const options: IFetchOptions = {\n method: 'GET',\n headers: this.headers,\n params: {\n actilityConnectionName: connectionName\n }\n };\n\n const res = await this.client.fetch(this.connectivityPlansUrl, options);\n const data = await res.json();\n\n if (res.status === 200) {\n if (data.length === 0) {\n this.throwNoConnectivityPlansError();\n } else {\n if (!this.hasAvailableConnections(data)) {\n this.throwNoFreeSlotsInConnectivityPlansError();\n }\n }\n } else {\n await this.throwConnectivitySettingsError(data);\n }\n\n return { res, data };\n }\n\n /**\n * Gets the device profiles from LoRa platform.\n * @param connectionName The name of connection for which device profiles will be retrieved\n * @returns The result list with device profiles, or throws an error with exception.\n */\n async getDeviceProfiles(connectionName: string): Promise<IResultList<DeviceProfile>> {\n const options: IFetchOptions = {\n method: 'GET',\n headers: this.headers,\n params: {\n actilityConnectionName: connectionName\n }\n };\n\n const res = await this.client.fetch(this.deviceProfilesUrl, options);\n const data = await res.json();\n\n if (res.status === 200) {\n if (data.length === 0) {\n this.throwNoDeviceProfilesError();\n }\n } else {\n this.throwDeviceProfilesFetchError();\n }\n\n return { res, data };\n }\n\n /**\n * Gets the device protocols\n */\n async getDeviceProtocols(\n filter: object = { withTotalPages: true }\n ): Promise<IResultList<IManagedObject>> {\n const query = {\n __filter: {\n __and: [\n { __has: 'c8y_IsDeviceType' },\n {\n type: { __in: ['c8y_ActilityDeviceType', 'c8y_LoraDeviceType', 'c8y_LpwanDeviceType'] }\n }\n ]\n },\n __orderby: [{ name: 1 }]\n };\n const deviceProtocolsList = await this.inventoryService.listQuery(query, filter);\n const { res, data } = deviceProtocolsList;\n\n if (res.status === 200) {\n if (data.length === 0) {\n this.throwNoDeviceProtocolsError();\n }\n } else {\n this.throwDeviceProtocolsFetchError();\n }\n\n return deviceProtocolsList;\n }\n\n /**\n * Creates device registration\n */\n async register(registration: ActilityDeviceRegistration) {\n const options: IFetchOptions = {\n method: 'POST',\n headers: this.headers,\n body: JSON.stringify(registration)\n };\n\n const res = await this.client.fetch(this.registrationUrl, options);\n const data = await res.json();\n\n if (res.status !== 201) {\n this.throwRegistrationError(data);\n }\n\n return { res, data };\n }\n\n /**\n * checks if used connections is less then granted connections\n */\n private hasAvailableConnections(connectivityPlans) {\n return some(\n connectivityPlans,\n plan => parseInt(plan.grantedConnections, 10) > parseInt(plan.usedConnections, 10)\n );\n }\n\n private async throwNoConnectivitySettingsError() {\n const error = new Error();\n error.name = ErrorName.NoConnectivitySettingsError;\n\n if ((await this.applicationService.isAvailable('administration')).data) {\n error.message = this.translateService.instant(\n gettext(\n `Could not get connectivity plans from the LoRa platform. Verify the ThingPark credentials in the Administration app under <a href=\"{{ link }}\">Settings</a>.`\n ),\n {\n link: '/apps/administration/index.html#/connectivitySettings/actility_lora_provider_settings'\n }\n );\n } else {\n error.message = gettext(\n 'Could not get connectivity plans from the LoRa platform. Please contact the administrator.'\n );\n }\n\n throw error;\n }\n\n private throwConnectivitySettingsError(data: { message: string }) {\n const error = new Error();\n error.name = ErrorName.ConnectivitySettingsError;\n error.message = data.message;\n throw error;\n }\n\n private throwNoConnectivityPlansError() {\n const error = new Error();\n error.name = ErrorName.NoConnectivityPlansError;\n error.message = gettext(\n 'No connectivity plans found. New connectivity plans must be created via the LoRa platform.'\n );\n throw error;\n }\n\n private throwNoFreeSlotsInConnectivityPlansError() {\n const companyName = this.optionsService.get('companyName', 'Cumulocity IoT');\n const error = new Error();\n error.name = ErrorName.NoFreeSlotsInConnectivityPlansError;\n error.message = this.translateService.instant(\n gettext(\n `No connectivity plans with free slots available. Please contact ThingPark on the device quota limits for your connectivity plans or remove unused devices from ThingPark and retry registering the device in the {{companyName}} platform.`\n ),\n {\n companyName\n }\n );\n throw error;\n }\n\n private throwDeviceProfilesFetchError() {\n const error = new Error();\n error.name = ErrorName.DeviceProfilesFetchError;\n error.message = gettext('Could not load device profiles from the LoRa platform.');\n throw error;\n }\n\n private throwNoDeviceProfilesError() {\n const error = new Error();\n error.name = ErrorName.NoDeviceProfilesError;\n error.message = gettext(\n 'No device profiles found. Create a new device profile via the LoRa platform.'\n );\n throw error;\n }\n\n private throwDeviceProtocolsFetchError() {\n const error = new Error();\n error.name = ErrorName.DeviceProtocolsFetchError;\n error.message = gettext('Could not load device protocols.');\n throw error;\n }\n\n private throwNoDeviceProtocolsError() {\n const error = new Error();\n error.name = ErrorName.NoDeviceProtocolsError;\n error.message = this.translateService.instant(\n gettext(\n `No device protocols configured. Create a LoRa device protocol in <a href=\"{{ link }}\">Device protocols</a>.`\n ),\n {\n link: '/apps/devicemanagement/#/deviceprotocols'\n }\n );\n throw error;\n }\n\n private throwRegistrationError(data: { message: string }) {\n const error = new Error();\n error.name = ErrorName.RegistrationError;\n error.message = data.message;\n throw error;\n }\n}\n","import { CdkStep } from '@angular/cdk/stepper';\nimport { Component } from '@angular/core';\nimport { AbstractControl, FormGroup } from '@angular/forms';\nimport { C8yStepper, GainsightService, gettext } from '@c8y/ngx-components';\nimport { FormlyFieldConfig } from '@ngx-formly/core';\nimport { cloneDeep, uniq } from 'lodash-es';\nimport { BsModalRef } from 'ngx-bootstrap/modal';\nimport { BehaviorSubject, defer, forkJoin, from, of, Subject, throwError } from 'rxjs';\nimport { catchError, map, mergeMap, shareReplay, switchMap, takeUntil } from 'rxjs/operators';\nimport { ActilityDeviceRegistration } from './actility-device-registration.model';\nimport {\n ActilityDeviceRegistrationService,\n ErrorName\n} from './actility-device-registration.service';\ntype State =\n | 'loadPending'\n | 'loadSuccess'\n | 'loadError'\n | 'registrationPending'\n | 'registrationSuccess'\n | 'registrationError';\n@Component({\n selector: 'c8y-actility-registration',\n templateUrl: 'actility-device-registration.component.html'\n})\nexport class ActilityDeviceRegistrationComponent {\n stepper: C8yStepper;\n registrationStepLabels = {\n next: gettext('Register')\n };\n finalStepLabels = {\n custom: gettext('Close')\n };\n\n state: State = 'loadPending';\n errors$ = new BehaviorSubject<Error[]>([]);\n errorMessages$ = this.errors$.pipe(\n map(errors => errors.map(error => error.message)),\n map(messages => uniq(messages))\n );\n\n connections$ = this.getConnections$();\n deviceProtocols$ = this.getDeviceProtocols$();\n unsubscribe$: Subject<void> = new Subject();\n load$ = this.connections$.pipe(\n catchError((error: Error) => of(error)),\n switchMap(connections => {\n if (\n connections instanceof Error &&\n connections.name === ErrorName.NoConnectivitySettingsError\n ) {\n return of([connections]);\n }\n\n return forkJoin([\n of(connections),\n this.deviceProtocols$.pipe(catchError((error: Error) => of(error)))\n ]);\n }),\n map(results => results.filter(result => result instanceof Error)),\n switchMap(errors => (errors.length === 0 ? of([]) : throwError(errors)))\n );\n\n form = new FormGroup({});\n model = {} as ActilityDeviceRegistration;\n\n // Formly schema definition to render actility device registration form\n fields: FormlyFieldConfig[] = [\n {\n key: 'connection',\n type: 'typeahead',\n templateOptions: {\n label: gettext('Connection'),\n required: true,\n c8yForOptions: this.connections$,\n displayProperty: 'name',\n valueProperties: ['name']\n }\n },\n {\n key: 'deviceProfile',\n type: 'typeahead',\n templateOptions: {\n label: gettext('Device profile'),\n required: true,\n displayProperty: 'name',\n placeholder: 'IWM-LR3',\n valueProperties: ['id', 'name', 'typeMAC']\n },\n hooks: {\n onInit: field => {\n const connectionControl = field.form.get('connection');\n connectionControl.valueChanges\n .pipe(\n takeUntil(this.unsubscribe$),\n mergeMap(({ name }) => this.getDeviceProfiles$(name))\n )\n .subscribe(\n profiles => {\n field.templateOptions.c8yForOptions = of(profiles);\n field.formControl.setValue(null);\n },\n error => {\n field.form.controls.deviceProfile.setErrors({ deviceProfile: true });\n field.validators.deviceProfile.message = error.message;\n }\n );\n }\n },\n validators: {\n deviceProfile: {\n expression: (control: AbstractControl) => {\n return control.status === 'VALID';\n },\n message: () => ''\n }\n }\n },\n {\n key: 'deviceType',\n type: 'typeahead',\n templateOptions: {\n label: gettext('Device protocol'),\n required: true,\n c8yForOptions: this.deviceProtocols$,\n displayProperty: 'name',\n valueProperties: ['id', 'name']\n }\n },\n {\n key: 'devEUI',\n type: 'input',\n templateOptions: {\n placeholder: '0018A20000000004',\n label: gettext('Device EUI'),\n required: true,\n pattern: '^([a-fA-F0-9]{16})$'\n },\n validation: {\n messages: {\n pattern: gettext('Must be a valid 16 digit hexadecimal number.')\n }\n }\n },\n {\n key: 'applicationEUI',\n type: 'input',\n templateOptions: {\n placeholder: '70B3D53260000003',\n label: gettext('Application EUI'),\n required: true,\n pattern: '^([a-fA-F0-9]{16})$'\n },\n validation: {\n messages: {\n pattern: gettext('Must be a valid 16 digit hexadecimal number.')\n }\n }\n },\n {\n key: 'applicationKey',\n type: 'input',\n templateOptions: {\n label: gettext('Application key'),\n placeholder: '258DB54023EA74F0D55085F7351737D0',\n required: true,\n pattern: '^([a-fA-F0-9]{32})$'\n },\n validation: {\n messages: {\n pattern: gettext('Must be a valid 32 digit hexadecimal number.')\n }\n }\n },\n {\n key: 'connectivityPlan',\n type: 'typeahead',\n templateOptions: {\n label: gettext('Connectivity plan'),\n description: gettext('Only connectivity plans with free slots are displayed'),\n required: true,\n placeholder: 'Dev-ope testing CP',\n displayProperty: 'name',\n valueProperties: ['id', 'ref', 'name', 'grantedConnections', 'usedConnections']\n },\n hooks: {\n onInit: field => {\n const connectionControl = field.form.get('connection');\n connectionControl.valueChanges\n .pipe(\n takeUntil(this.unsubscribe$),\n mergeMap(({ name }) => this.getConnectivityPlans$(name))\n )\n .subscribe(\n profiles => {\n field.templateOptions.c8yForOptions = of(profiles);\n field.formControl.setValue(null);\n },\n error => {\n field.form.controls.connectivityPlan.setErrors({ connectivityPlan: true });\n field.validators.connectivityPlan.message = error.message;\n }\n );\n }\n },\n validators: {\n connectivityPlan: {\n expression: (control: AbstractControl) => {\n return control.status === 'VALID';\n },\n message: () => ''\n }\n }\n }\n ];\n\n constructor(\n public bsModalRef: BsModalRef,\n private registrationService: ActilityDeviceRegistrationService,\n private gainsightService: GainsightService\n ) {\n this.load$.subscribe(\n () => {\n this.state = 'loadSuccess';\n },\n errors => {\n this.state = 'loadError';\n this.errors$.next(errors);\n }\n );\n }\n\n getConnectivityPlans$(name) {\n return defer(() => from(this.registrationService.getConnectivityPlans(name))).pipe(\n shareReplay(1)\n );\n }\n\n getDeviceProfiles$(name) {\n return defer(() => from(this.registrationService.getDeviceProfiles(name))).pipe(shareReplay(1));\n }\n\n getDeviceProtocols$() {\n return defer(() => from(this.registrationService.getDeviceProtocols())).pipe(shareReplay(1));\n }\n\n getConnections$() {\n return defer(() => from(this.registrationService.getConnections())).pipe(shareReplay(1));\n }\n\n async register(event: { stepper: C8yStepper; step: CdkStep }) {\n event.stepper.next();\n this.state = 'registrationPending';\n try {\n const actilityDevice = this.getActilityDeviceToSend();\n await this.registrationService.register(actilityDevice);\n this.state = 'registrationSuccess';\n this.gainsightService.triggerEvent('dmDeviceRegistration', {\n action: 'registrationSuccess',\n name: 'actilityRegistration'\n });\n } catch (error) {\n this.state = 'registrationError';\n this.gainsightService.triggerEvent('dmDeviceRegistration', {\n action: 'registrationFailure',\n name: 'actilityRegistration'\n });\n this.errors$.next([error]);\n }\n }\n\n getActilityDeviceToSend() {\n const actilityDevice: ActilityDeviceRegistration = cloneDeep(this.model);\n actilityDevice.lnsConnectionName = this.model.connection.name;\n delete (actilityDevice as any).connection;\n return actilityDevice;\n }\n ngOnDestroy(): void {\n this.unsubscribe$.next();\n this.unsubscribe$.complete();\n }\n}\n","<c8y-modal [headerClasses]=\"'dialog-header'\" [customFooter]=\"true\">\n <ng-container c8y-modal-title>\n <span [c8yIcon]=\"'c8y-device-connect'\"></span>\n <h4 id=\"modal-title\">{{ 'Actility LoRa registration' | translate }}</h4>\n </ng-container>\n\n <ng-container *ngIf=\"state === 'loadPending'; else registrationForm\">\n <div class=\"p-16 text-center\">\n <c8y-loading></c8y-loading>\n </div>\n </ng-container>\n\n <!--Formly schema is rendered-->\n <ng-template #registrationForm>\n <c8y-stepper\n [hideStepProgress]=\"true\"\n linear\n id=\"modal-body\"\n *ngIf=\"(errorMessages$ | async).length === 0; else errorMessagesPresent\"\n >\n <cdk-step [stepControl]=\"form\">\n <div class=\"p-b-16\">\n <p class=\"modal-subtitle sticky-top\">\n {{ 'Register a single Actility device' | translate }}\n </p>\n <formly-form\n [form]=\"form\"\n [fields]=\"fields\"\n [model]=\"model\"\n class=\"formly-group-array-cols d-block p-l-24 p-r-24 p-t-16\"\n ></formly-form>\n </div>\n\n <c8y-stepper-buttons\n [labels]=\"registrationStepLabels\"\n (onNext)=\"register($event)\"\n (onCancel)=\"bsModalRef.hide()\"\n [showButtons]=\"{ cancel: true, next: true }\"\n [pending]=\"state === 'registrationPending'\"\n [disabled]=\"!form?.valid\"\n class=\"sticky-bottom d-block p-t-16 p-b-16 separator-top bg-level-0\"\n ></c8y-stepper-buttons>\n </cdk-step>\n <cdk-step state=\"final\">\n <!--success scenario-->\n <div class=\"p-16 text-center\" *ngIf=\"state === 'registrationPending'\">\n <c8y-loading></c8y-loading>\n </div>\n <div class=\"m-24\">\n <c8y-operation-result\n *ngIf=\"state === 'registrationSuccess'\"\n text=\"{{ 'Device registered' | translate }}\"\n [size]=\"84\"\n [vertical]=\"true\"\n type=\"success\"\n class=\"lead m-b-0\"\n ></c8y-operation-result>\n </div>\n <c8y-stepper-buttons\n class=\"sticky-bottom d-block p-t-16 p-b-16 separator-top bg-level-0\"\n (onCustom)=\"bsModalRef.hide()\"\n [showButtons]=\"{ custom: true }\"\n [labels]=\"finalStepLabels\"\n ></c8y-stepper-buttons>\n </cdk-step>\n </c8y-stepper>\n </ng-template>\n\n <!--Failure scenario-->\n <ng-template #errorMessagesPresent>\n <div class=\"m-24\">\n <c8y-operation-result\n *ngIf=\"state === 'registrationError'\"\n text=\"{{ 'Failed to register' | translate }}\"\n [size]=\"84\"\n [vertical]=\"true\"\n type=\"error\"\n class=\"lead\"\n ></c8y-operation-result>\n <div\n *ngFor=\"let msg of errorMessages$ | async\"\n class=\"m-b-8\"\n [ngClass]=\"{\n 'text-center': state === 'registrationError',\n 'alert alert-danger': state === 'loadError'\n }\"\n >\n <span [innerHTML]=\"msg | translate\"></span>\n </div>\n </div>\n <div class=\"modal-footer\">\n <button\n title=\"{{ 'Close' | translate }}\"\n (click)=\"bsModalRef.hide()\"\n type=\"button\"\n class=\"btn btn-default\"\n >\n {{ 'Close' | translate }}\n </button>\n </div>\n </ng-template>\n</c8y-modal>\n","import { Component } from '@angular/core';\nimport { BsModalService } from 'ngx-bootstrap/modal';\nimport { ActilityDeviceRegistrationComponent } from './actility-device-registration.component';\n\n@Component({\n selector: 'c8y-actility-registration-button',\n templateUrl: 'actility-device-registration-button.component.html'\n})\nexport class ActilityDeviceRegistrationButtonComponent {\n constructor(private modalService: BsModalService) {}\n\n open() {\n this.modalService.show(ActilityDeviceRegistrationComponent, {\n class: 'modal-sm',\n ariaDescribedby: 'modal-body',\n ariaLabelledBy: 'modal-title',\n ignoreBackdropClick: true\n });\n }\n}\n","<button title=\"{{ 'Actility LoRa' | translate }}\" type=\"button\" (click)=\"open()\">\n <i c8yIcon=\"c8y-device-connect\"></i>\n {{ 'Actility LoRa' | translate }}\n</button>\n","import { Injectable } from '@angular/core';\nimport { TenantUiService } from '@c8y/ngx-components';\nimport { ActilityDeviceRegistrationButtonComponent } from './actility-device-registration-button.component';\nimport { RegisterDeviceFactory, RegisterDeviceItem } from '@c8y/ngx-components/register-device';\n@Injectable({\n providedIn: 'root'\n})\nexport class ActilityDeviceRegistrationFactory implements RegisterDeviceFactory {\n constructor(private tenantService: TenantUiService) {}\n\n get() {\n const actions: RegisterDeviceItem[] = [];\n if (this.tenantService.isMicroserviceSubscribedInCurrentTenant('actility')) {\n actions.push({\n template: ActilityDeviceRegistrationButtonComponent,\n priority: 99,\n category: 'single'\n } as RegisterDeviceItem);\n }\n return actions;\n }\n}\n","import { NgModule } from '@angular/core';\nimport { CommonModule, CoreModule } from '@c8y/ngx-components';\nimport { hookDeviceRegistration } from '@c8y/ngx-components/register-device';\nimport { ActilityDeviceRegistrationButtonComponent } from './actility-device-registration-button.component';\nimport { ActilityDeviceRegistrationFactory } from './actility-device-registration.factory';\nimport { ActilityDeviceRegistrationComponent } from './actility-device-registration.component';\nimport { ActilityDeviceRegistrationService } from './actility-device-registration.service';\n\n@NgModule({\n imports: [CoreModule, CommonModule],\n declarations: [ActilityDeviceRegistrationButtonComponent, ActilityDeviceRegistrationComponent],\n providers: [\n ActilityDeviceRegistrationService,\n hookDeviceRegistration(ActilityDeviceRegistrationFactory)\n ]\n})\nexport class ActilityDeviceRegistrationModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["i1","i2.ActilityDeviceRegistrationService","i2"],"mappings":";;;;;;;;;;;;;;;;;AAkBA,IAAY,SAUX,CAAA;AAVD,CAAA,UAAY,SAAS,EAAA;AACnB,IAAA,SAAA,CAAA,0BAAA,CAAA,GAAA,0BAAqD,CAAA;AACrD,IAAA,SAAA,CAAA,qCAAA,CAAA,GAAA,qCAA2E,CAAA;AAC3E,IAAA,SAAA,CAAA,6BAAA,CAAA,GAAA,6BAA2D,CAAA;AAC3D,IAAA,SAAA,CAAA,2BAAA,CAAA,GAAA,2BAAuD,CAAA;AACvD,IAAA,SAAA,CAAA,uBAAA,CAAA,GAAA,uBAA+C,CAAA;AAC/C,IAAA,SAAA,CAAA,0BAAA,CAAA,GAAA,0BAAqD,CAAA;AACrD,IAAA,SAAA,CAAA,wBAAA,CAAA,GAAA,wBAAiD,CAAA;AACjD,IAAA,SAAA,CAAA,2BAAA,CAAA,GAAA,2BAAuD,CAAA;AACvD,IAAA,SAAA,CAAA,mBAAA,CAAA,GAAA,mBAAuC,CAAA;AACzC,CAAC,EAVW,SAAS,KAAT,SAAS,GAUpB,EAAA,CAAA,CAAA,CAAA;MAGY,iCAAiC,CAAA;IAS5C,WACU,CAAA,gBAAkC,EAClC,MAAmB,EACnB,gBAAkC,EAClC,kBAAsC,EACtC,cAA8B,EAAA;AAJ9B,QAAA,IAAgB,CAAA,gBAAA,GAAhB,gBAAgB,CAAkB;AAClC,QAAA,IAAM,CAAA,MAAA,GAAN,MAAM,CAAa;AACnB,QAAA,IAAgB,CAAA,gBAAA,GAAhB,gBAAgB,CAAkB;AAClC,QAAA,IAAkB,CAAA,kBAAA,GAAlB,kBAAkB,CAAoB;AACtC,QAAA,IAAc,CAAA,cAAA,GAAd,cAAc,CAAgB;AAbhC,QAAA,IAAO,CAAA,OAAA,GAAG,mBAAmB,CAAC;QAC9B,IAAA,CAAA,eAAe,GAAW,CAAA,EAAG,IAAI,CAAC,OAAO,mBAAmB,CAAC;QAC7D,IAAA,CAAA,oBAAoB,GAAW,CAAA,EAAG,IAAI,CAAC,OAAO,oBAAoB,CAAC;QACnE,IAAA,CAAA,iBAAiB,GAAW,CAAA,EAAG,IAAI,CAAC,OAAO,iBAAiB,CAAC;QAC7D,IAAA,CAAA,OAAO,GAAW;AACxB,YAAA,cAAc,EAAE,kBAAkB;SACnC,CAAC;KAQE;IAEE,cAAc,GAAA;;AAClB,YAAA,MAAM,OAAO,GAAkB;AAC7B,gBAAA,MAAM,EAAE,KAAK;gBACb,OAAO,EAAE,IAAI,CAAC,OAAO;aACtB,CAAC;AACF,YAAA,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAA,EAAG,IAAI,CAAC,OAAO,iBAAiB,EAAE,OAAO,CAAC,CAAC;AAC/E,YAAA,MAAM,IAAI,GAAG,MAAM,GAAG,CAAC,IAAI,EAAE,CAAC;AAE9B,YAAA,IAAI,GAAG,CAAC,MAAM,KAAK,GAAG,EAAE;AACtB,gBAAA,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE;AACrB,oBAAA,MAAM,IAAI,CAAC,gCAAgC,EAAE,CAAC;AAC/C,iBAAA;AACF,aAAA;AAAM,iBAAA;AACL,gBAAA,MAAM,IAAI,CAAC,8BAA8B,CAAC,IAAI,CAAC,CAAC;AACjD,aAAA;AACD,YAAA,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,CAAC;SACtB,CAAA,CAAA;AAAA,KAAA;AACD;;;;AAIG;AACG,IAAA,oBAAoB,CAAC,cAAsB,EAAA;;AAC/C,YAAA,MAAM,OAAO,GAAkB;AAC7B,gBAAA,MAAM,EAAE,KAAK;gBACb,OAAO,EAAE,IAAI,CAAC,OAAO;AACrB,gBAAA,MAAM,EAAE;AACN,oBAAA,sBAAsB,EAAE,cAAc;AACvC,iBAAA;aACF,CAAC;AAEF,YAAA,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,oBAAoB,EAAE,OAAO,CAAC,CAAC;AACxE,YAAA,MAAM,IAAI,GAAG,MAAM,GAAG,CAAC,IAAI,EAAE,CAAC;AAE9B,YAAA,IAAI,GAAG,CAAC,MAAM,KAAK,GAAG,EAAE;AACtB,gBAAA,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE;oBACrB,IAAI,CAAC,6BAA6B,EAAE,CAAC;AACtC,iBAAA;AAAM,qBAAA;AACL,oBAAA,IAAI,CAAC,IAAI,CAAC,uBAAuB,CAAC,IAAI,CAAC,EAAE;wBACvC,IAAI,CAAC,wCAAwC,EAAE,CAAC;AACjD,qBAAA;AACF,iBAAA;AACF,aAAA;AAAM,iBAAA;AACL,gBAAA,MAAM,IAAI,CAAC,8BAA8B,CAAC,IAAI,CAAC,CAAC;AACjD,aAAA;AAED,YAAA,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,CAAC;SACtB,CAAA,CAAA;AAAA,KAAA;AAED;;;;AAIG;AACG,IAAA,iBAAiB,CAAC,cAAsB,EAAA;;AAC5C,YAAA,MAAM,OAAO,GAAkB;AAC7B,gBAAA,MAAM,EAAE,KAAK;gBACb,OAAO,EAAE,IAAI,CAAC,OAAO;AACrB,gBAAA,MAAM,EAAE;AACN,oBAAA,sBAAsB,EAAE,cAAc;AACvC,iBAAA;aACF,CAAC;AAEF,YAAA,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,iBAAiB,EAAE,OAAO,CAAC,CAAC;AACrE,YAAA,MAAM,IAAI,GAAG,MAAM,GAAG,CAAC,IAAI,EAAE,CAAC;AAE9B,YAAA,IAAI,GAAG,CAAC,MAAM,KAAK,GAAG,EAAE;AACtB,gBAAA,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE;oBACrB,IAAI,CAAC,0BAA0B,EAAE,CAAC;AACnC,iBAAA;AACF,aAAA;AAAM,iBAAA;gBACL,IAAI,CAAC,6BAA6B,EAAE,CAAC;AACtC,aAAA;AAED,YAAA,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,CAAC;SACtB,CAAA,CAAA;AAAA,KAAA;AAED;;AAEG;AACG,IAAA,kBAAkB,CACtB,MAAA,GAAiB,EAAE,cAAc,EAAE,IAAI,EAAE,EAAA;;AAEzC,YAAA,MAAM,KAAK,GAAG;AACZ,gBAAA,QAAQ,EAAE;AACR,oBAAA,KAAK,EAAE;wBACL,EAAE,KAAK,EAAE,kBAAkB,EAAE;AAC7B,wBAAA;4BACE,IAAI,EAAE,EAAE,IAAI,EAAE,CAAC,wBAAwB,EAAE,oBAAoB,EAAE,qBAAqB,CAAC,EAAE;AACxF,yBAAA;AACF,qBAAA;AACF,iBAAA;AACD,gBAAA,SAAS,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC;aACzB,CAAC;AACF,YAAA,MAAM,mBAAmB,GAAG,MAAM,IAAI,CAAC,gBAAgB,CAAC,SAAS,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;AACjF,YAAA,MAAM,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,mBAAmB,CAAC;AAE1C,YAAA,IAAI,GAAG,CAAC,MAAM,KAAK,GAAG,EAAE;AACtB,gBAAA,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE;oBACrB,IAAI,CAAC,2BAA2B,EAAE,CAAC;AACpC,iBAAA;AACF,aAAA;AAAM,iBAAA;gBACL,IAAI,CAAC,8BAA8B,EAAE,CAAC;AACvC,aAAA;AAED,YAAA,OAAO,mBAAmB,CAAC;SAC5B,CAAA,CAAA;AAAA,KAAA;AAED;;AAEG;AACG,IAAA,QAAQ,CAAC,YAAwC,EAAA;;AACrD,YAAA,MAAM,OAAO,GAAkB;AAC7B,gBAAA,MAAM,EAAE,MAAM;gBACd,OAAO,EAAE,IAAI,CAAC,OAAO;AACrB,gBAAA,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC;aACnC,CAAC;AAEF,YAAA,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,eAAe,EAAE,OAAO,CAAC,CAAC;AACnE,YAAA,MAAM,IAAI,GAAG,MAAM,GAAG,CAAC,IAAI,EAAE,CAAC;AAE9B,YAAA,IAAI,GAAG,CAAC,MAAM,KAAK,GAAG,EAAE;AACtB,gBAAA,IAAI,CAAC,sBAAsB,CAAC,IAAI,CAAC,CAAC;AACnC,aAAA;AAED,YAAA,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,CAAC;SACtB,CAAA,CAAA;AAAA,KAAA;AAED;;AAEG;AACK,IAAA,uBAAuB,CAAC,iBAAiB,EAAA;QAC/C,OAAO,IAAI,CACT,iBAAiB,EACjB,IAAI,IAAI,QAAQ,CAAC,IAAI,CAAC,kBAAkB,EAAE,EAAE,CAAC,GAAG,QAAQ,CAAC,IAAI,CAAC,eAAe,EAAE,EAAE,CAAC,CACnF,CAAC;KACH;IAEa,gCAAgC,GAAA;;AAC5C,YAAA,MAAM,KAAK,GAAG,IAAI,KAAK,EAAE,CAAC;AAC1B,YAAA,KAAK,CAAC,IAAI,GAAG,SAAS,CAAC,2BAA2B,CAAC;AAEnD,YAAA,IAAI,CAAC,MAAM,IAAI,CAAC,kBAAkB,CAAC,WAAW,CAAC,gBAAgB,CAAC,EAAE,IAAI,EAAE;AACtE,gBAAA,KAAK,CAAC,OAAO,GAAG,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAC3C,OAAO,CACL,CAAA,4JAAA,CAA8J,CAC/J,EACD;AACE,oBAAA,IAAI,EAAE,uFAAuF;AAC9F,iBAAA,CACF,CAAC;AACH,aAAA;AAAM,iBAAA;AACL,gBAAA,KAAK,CAAC,OAAO,GAAG,OAAO,CACrB,4FAA4F,CAC7F,CAAC;AACH,aAAA;AAED,YAAA,MAAM,KAAK,CAAC;SACb,CAAA,CAAA;AAAA,KAAA;AAEO,IAAA,8BAA8B,CAAC,IAAyB,EAAA;AAC9D,QAAA,MAAM,KAAK,GAAG,IAAI,KAAK,EAAE,CAAC;AAC1B,QAAA,KAAK,CAAC,IAAI,GAAG,SAAS,CAAC,yBAAyB,CAAC;AACjD,QAAA,KAAK,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC;AAC7B,QAAA,MAAM,KAAK,CAAC;KACb;IAEO,6BAA6B,GAAA;AACnC,QAAA,MAAM,KAAK,GAAG,IAAI,KAAK,EAAE,CAAC;AAC1B,QAAA,KAAK,CAAC,IAAI,GAAG,SAAS,CAAC,wBAAwB,CAAC;AAChD,QAAA,KAAK,CAAC,OAAO,GAAG,OAAO,CACrB,4FAA4F,CAC7F,CAAC;AACF,QAAA,MAAM,KAAK,CAAC;KACb;IAEO,wCAAwC,GAAA;AAC9C,QAAA,MAAM,WAAW,GAAG,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,aAAa,EAAE,gBAAgB,CAAC,CAAC;AAC7E,QAAA,MAAM,KAAK,GAAG,IAAI,KAAK,EAAE,CAAC;AAC1B,QAAA,KAAK,CAAC,IAAI,GAAG,SAAS,CAAC,mCAAmC,CAAC;AAC3D,QAAA,KAAK,CAAC,OAAO,GAAG,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAC3C,OAAO,CACL,CAAA,0OAAA,CAA4O,CAC7O,EACD;YACE,WAAW;AACZ,SAAA,CACF,CAAC;AACF,QAAA,MAAM,KAAK,CAAC;KACb;IAEO,6BAA6B,GAAA;AACnC,QAAA,MAAM,KAAK,GAAG,IAAI,KAAK,EAAE,CAAC;AAC1B,QAAA,KAAK,CAAC,IAAI,GAAG,SAAS,CAAC,wBAAwB,CAAC;AAChD,QAAA,KAAK,CAAC,OAAO,GAAG,OAAO,CAAC,wDAAwD,CAAC,CAAC;AAClF,QAAA,MAAM,KAAK,CAAC;KACb;IAEO,0BAA0B,GAAA;AAChC,QAAA,MAAM,KAAK,GAAG,IAAI,KAAK,EAAE,CAAC;AAC1B,QAAA,KAAK,CAAC,IAAI,GAAG,SAAS,CAAC,qBAAqB,CAAC;AAC7C,QAAA,KAAK,CAAC,OAAO,GAAG,OAAO,CACrB,8EAA8E,CAC/E,CAAC;AACF,QAAA,MAAM,KAAK,CAAC;KACb;IAEO,8BAA8B,GAAA;AACpC,QAAA,MAAM,KAAK,GAAG,IAAI,KAAK,EAAE,CAAC;AAC1B,QAAA,KAAK,CAAC,IAAI,GAAG,SAAS,CAAC,yBAAyB,CAAC;AACjD,QAAA,KAAK,CAAC,OAAO,GAAG,OAAO,CAAC,kCAAkC,CAAC,CAAC;AAC5D,QAAA,MAAM,KAAK,CAAC;KACb;IAEO,2BAA2B,GAAA;AACjC,QAAA,MAAM,KAAK,GAAG,IAAI,KAAK,EAAE,CAAC;AAC1B,QAAA,KAAK,CAAC,IAAI,GAAG,SAAS,CAAC,sBAAsB,CAAC;AAC9C,QAAA,KAAK,CAAC,OAAO,GAAG,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAC3C,OAAO,CACL,CAAA,2GAAA,CAA6G,CAC9G,EACD;AACE,YAAA,IAAI,EAAE,0CAA0C;AACjD,SAAA,CACF,CAAC;AACF,QAAA,MAAM,KAAK,CAAC;KACb;AAEO,IAAA,sBAAsB,CAAC,IAAyB,EAAA;AACtD,QAAA,MAAM,KAAK,GAAG,IAAI,KAAK,EAAE,CAAC;AAC1B,QAAA,KAAK,CAAC,IAAI,GAAG,SAAS,CAAC,iBAAiB,CAAC;AACzC,QAAA,KAAK,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC;AAC7B,QAAA,MAAM,KAAK,CAAC;KACb;;8HA1PU,iCAAiC,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,gBAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,WAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,gBAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,kBAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,cAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAAjC,iCAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,iCAAiC,cADpB,MAAM,EAAA,CAAA,CAAA;2FACnB,iCAAiC,EAAA,UAAA,EAAA,CAAA;kBAD7C,UAAU;mBAAC,EAAE,UAAU,EAAE,MAAM,EAAE,CAAA;;;MCLrB,mCAAmC,CAAA;AA+L9C,IAAA,WAAA,CACS,UAAsB,EACrB,mBAAsD,EACtD,gBAAkC,EAAA;AAFnC,QAAA,IAAU,CAAA,UAAA,GAAV,UAAU,CAAY;AACrB,QAAA,IAAmB,CAAA,mBAAA,GAAnB,mBAAmB,CAAmC;AACtD,QAAA,IAAgB,CAAA,gBAAA,GAAhB,gBAAgB,CAAkB;QAhM5C,IAAA,CAAA,sBAAsB,GAAG;AACvB,YAAA,IAAI,EAAE,OAAO,CAAC,UAAU,CAAC;SAC1B,CAAC;QACF,IAAA,CAAA,eAAe,GAAG;AAChB,YAAA,MAAM,EAAE,OAAO,CAAC,OAAO,CAAC;SACzB,CAAC;AAEF,QAAA,IAAK,CAAA,KAAA,GAAU,aAAa,CAAC;QAC7B,IAAA,CAAA,OAAO,GAAG,IAAI,eAAe,CAAU,EAAE,CAAC,CAAC;AAC3C,QAAA,IAAA,CAAA,cAAc,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAChC,GAAG,CAAC,MAAM,IAAI,MAAM,CAAC,GAAG,CAAC,KAAK,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC,EACjD,GAAG,CAAC,QAAQ,IAAI,IAAI,CAAC,QAAQ,CAAC,CAAC,CAChC,CAAC;AAEF,QAAA,IAAA,CAAA,YAAY,GAAG,IAAI,CAAC,eAAe,EAAE,CAAC;AACtC,QAAA,IAAA,CAAA,gBAAgB,GAAG,IAAI,CAAC,mBAAmB,EAAE,CAAC;AAC9C,QAAA,IAAA,CAAA,YAAY,GAAkB,IAAI,OAAO,EAAE,CAAC;QAC5C,IAAK,CAAA,KAAA,GAAG,IAAI,CAAC,YAAY,CAAC,IAAI,CAC5B,UAAU,CAAC,CAAC,KAAY,KAAK,EAAE,CAAC,KAAK,CAAC,CAAC,EACvC,SAAS,CAAC,WAAW,IAAG;YACtB,IACE,WAAW,YAAY,KAAK;AAC5B,gBAAA,WAAW,CAAC,IAAI,KAAK,SAAS,CAAC,2BAA2B,EAC1D;AACA,gBAAA,OAAO,EAAE,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC;AAC1B,aAAA;AAED,YAAA,OAAO,QAAQ,CAAC;gBACd,EAAE,CAAC,WAAW,CAAC;AACf,gBAAA,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,KAAY,KAAK,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC;AACpE,aAAA,CAAC,CAAC;SACJ,CAAC,EACF,GAAG,CAAC,OAAO,IAAI,OAAO,CAAC,MAAM,CAAC,MAAM,IAAI,MAAM,YAAY,KAAK,CAAC,CAAC,EACjE,SAAS,CAAC,MAAM,KAAK,MAAM,CAAC,MAAM,KAAK,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,CACzE,CAAC;QAEF,IAAA,CAAA,IAAI,GAAG,IAAI,SAAS,CAAC,EAAE,CAAC,CAAC;AACzB,QAAA,IAAK,CAAA,KAAA,GAAG,EAAgC,CAAC;;QAGzC,IAAA,CAAA,MAAM,GAAwB;AAC5B,YAAA;AACE,gBAAA,GAAG,EAAE,YAAY;AACjB,gBAAA,IAAI,EAAE,WAAW;AACjB,gBAAA,eAAe,EAAE;AACf,oBAAA,KAAK,EAAE,OAAO,CAAC,YAAY,CAAC;AAC5B,oBAAA,QAAQ,EAAE,IAAI;oBACd,aAAa,EAAE,IAAI,CAAC,YAAY;AAChC,oBAAA,eAAe,EAAE,MAAM;oBACvB,eAAe,EAAE,CAAC,MAAM,CAAC;AAC1B,iBAAA;AACF,aAAA;AACD,YAAA;AACE,gBAAA,GAAG,EAAE,eAAe;AACpB,gBAAA,IAAI,EAAE,WAAW;AACjB,gBAAA,eAAe,EAAE;AACf,oBAAA,KAAK,EAAE,OAAO,CAAC,gBAAgB,CAAC;AAChC,oBAAA,QAAQ,EAAE,IAAI;AACd,oBAAA,eAAe,EAAE,MAAM;AACvB,oBAAA,WAAW,EAAE,SAAS;AACtB,oBAAA,eAAe,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,SAAS,CAAC;AAC3C,iBAAA;AACD,gBAAA,KAAK,EAAE;oBACL,MAAM,EAAE,KAAK,IAAG;wBACd,MAAM,iBAAiB,GAAG,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;AACvD,wBAAA,iBAAiB,CAAC,YAAY;6BAC3B,IAAI,CACH,SAAS,CAAC,IAAI,CAAC,YAAY,CAAC,EAC5B,QAAQ,CAAC,CAAC,EAAE,IAAI,EAAE,KAAK,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,CAAC,CACtD;6BACA,SAAS,CACR,QAAQ,IAAG;4BACT,KAAK,CAAC,eAAe,CAAC,aAAa,GAAG,EAAE,CAAC,QAAQ,CAAC,CAAC;AACnD,4BAAA,KAAK,CAAC,WAAW,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;yBAClC,EACD,KAAK,IAAG;AACN,4BAAA,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,SAAS,CAAC,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC;4BACrE,KAAK,CAAC,UAAU,CAAC,aAAa,CAAC,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC;AACzD,yBAAC,CACF,CAAC;qBACL;AACF,iBAAA;AACD,gBAAA,UAAU,EAAE;AACV,oBAAA,aAAa,EAAE;AACb,wBAAA,UAAU,EAAE,CAAC,OAAwB,KAAI;AACvC,4BAAA,OAAO,OAAO,CAAC,MAAM,KAAK,OAAO,CAAC;yBACnC;AACD,wBAAA,OAAO,EAAE,MAAM,EAAE;AAClB,qBAAA;AACF,iBAAA;AACF,aAAA;AACD,YAAA;AACE,gBAAA,GAAG,EAAE,YAAY;AACjB,gBAAA,IAAI,EAAE,WAAW;AACjB,gBAAA,eAAe,EAAE;AACf,oBAAA,KAAK,EAAE,OAAO,CAAC,iBAAiB,CAAC;AACjC,oBAAA,QAAQ,EAAE,IAAI;oBACd,aAAa,EAAE,IAAI,CAAC,gBAAgB;AACpC,oBAAA,eAAe,EAAE,MAAM;AACvB,oBAAA,eAAe,EAAE,CAAC,IAAI,EAAE,MAAM,CAAC;AAChC,iBAAA;AACF,aAAA;AACD,YAAA;AACE,gBAAA,GAAG,EAAE,QAAQ;AACb,gBAAA,IAAI,EAAE,OAAO;AACb,gBAAA,eAAe,EAAE;AACf,oBAAA,WAAW,EAAE,kBAAkB;AAC/B,oBAAA,KAAK,EAAE,OAAO,CAAC,YAAY,CAAC;AAC5B,oBAAA,QAAQ,EAAE,IAAI;AACd,oBAAA,OAAO,EAAE,qBAAqB;AAC/B,iBAAA;AACD,gBAAA,UAAU,EAAE;AACV,oBAAA,QAAQ,EAAE;AACR,wBAAA,OAAO,EAAE,OAAO,CAAC,8CAA8C,CAAC;AACjE,qBAAA;AACF,iBAAA;AACF,aAAA;AACD,YAAA;AACE,gBAAA,GAAG,EAAE,gBAAgB;AACrB,gBAAA,IAAI,EAAE,OAAO;AACb,gBAAA,eAAe,EAAE;AACf,oBAAA,WAAW,EAAE,kBAAkB;AAC/B,oBAAA,KAAK,EAAE,OAAO,CAAC,iBAAiB,CAAC;AACjC,oBAAA,QAAQ,EAAE,IAAI;AACd,oBAAA,OAAO,EAAE,qBAAqB;AAC/B,iBAAA;AACD,gBAAA,UAAU,EAAE;AACV,oBAAA,QAAQ,EAAE;AACR,wBAAA,OAAO,EAAE,OAAO,CAAC,8CAA8C,CAAC;AACjE,qBAAA;AACF,iBAAA;AACF,aAAA;AACD,YAAA;AACE,gBAAA,GAAG,EAAE,gBAAgB;AACrB,gBAAA,IAAI,EAAE,OAAO;AACb,gBAAA,eAAe,EAAE;AACf,oBAAA,KAAK,EAAE,OAAO,CAAC,iBAAiB,CAAC;AACjC,oBAAA,WAAW,EAAE,kCAAkC;AAC/C,oBAAA,QAAQ,EAAE,IAAI;AACd,oBAAA,OAAO,EAAE,qBAAqB;AAC/B,iBAAA;AACD,gBAAA,UAAU,EAAE;AACV,oBAAA,QAAQ,EAAE;AACR,wBAAA,OAAO,EAAE,OAAO,CAAC,8CAA8C,CAAC;AACjE,qBAAA;AACF,iBAAA;AACF,aAAA;AACD,YAAA;AACE,gBAAA,GAAG,EAAE,kBAAkB;AACvB,gBAAA,IAAI,EAAE,WAAW;AACjB,gBAAA,eAAe,EAAE;AACf,oBAAA,KAAK,EAAE,OAAO,CAAC,mBAAmB,CAAC;AACnC,oBAAA,WAAW,EAAE,OAAO,CAAC,uDAAuD,CAAC;AAC7E,oBAAA,QAAQ,EAAE,IAAI;AACd,oBAAA,WAAW,EAAE,oBAAoB;AACjC,oBAAA,eAAe,EAAE,MAAM;oBACvB,eAAe,EAAE,CAAC,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,oBAAoB,EAAE,iBAAiB,CAAC;AAChF,iBAAA;AACD,gBAAA,KAAK,EAAE;oBACL,MAAM,EAAE,KAAK,IAAG;wBACd,MAAM,iBAAiB,GAAG,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;AACvD,wBAAA,iBAAiB,CAAC,YAAY;6BAC3B,IAAI,CACH,SAAS,CAAC,IAAI,CAAC,YAAY,CAAC,EAC5B,QAAQ,CAAC,CAAC,EAAE,IAAI,EAAE,KAAK,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,CAAC,CACzD;6BACA,SAAS,CACR,QAAQ,IAAG;4BACT,KAAK,CAAC,eAAe,CAAC,aAAa,GAAG,EAAE,CAAC,QAAQ,CAAC,CAAC;AACnD,4BAAA,KAAK,CAAC,WAAW,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;yBAClC,EACD,KAAK,IAAG;AACN,4BAAA,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,gBAAgB,CAAC,SAAS,CAAC,EAAE,gBAAgB,EAAE,IAAI,EAAE,CAAC,CAAC;4BAC3E,KAAK,CAAC,UAAU,CAAC,gBAAgB,CAAC,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC;AAC5D,yBAAC,CACF,CAAC;qBACL;AACF,iBAAA;AACD,gBAAA,UAAU,EAAE;AACV,oBAAA,gBAAgB,EAAE;AAChB,wBAAA,UAAU,EAAE,CAAC,OAAwB,KAAI;AACvC,4BAAA,OAAO,OAAO,CAAC,MAAM,KAAK,OAAO,CAAC;yBACnC;AACD,wBAAA,OAAO,EAAE,MAAM,EAAE;AAClB,qBAAA;AACF,iBAAA;AACF,aAAA;SACF,CAAC;AAOA,QAAA,IAAI,CAAC,KAAK,CAAC,SAAS,CAClB,MAAK;AACH,YAAA,IAAI,CAAC,KAAK,GAAG,aAAa,CAAC;SAC5B,EACD,MAAM,IAAG;AACP,YAAA,IAAI,CAAC,KAAK,GAAG,WAAW,CAAC;AACzB,YAAA,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;AAC5B,SAAC,CACF,CAAC;KACH;AAED,IAAA,qBAAqB,CAAC,IAAI,EAAA;QACxB,OAAO,KAAK,CAAC,MAAM,IAAI,CAAC,IAAI,CAAC,mBAAmB,CAAC,oBAAoB,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAChF,WAAW,CAAC,CAAC,CAAC,CACf,CAAC;KACH;AAED,IAAA,kBAAkB,CAAC,IAAI,EAAA;QACrB,OAAO,KAAK,CAAC,MAAM,IAAI,CAAC,IAAI,CAAC,mBAAmB,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC;KACjG;IAED,mBAAmB,GAAA;QACjB,OAAO,KAAK,CAAC,MAAM,IAAI,CAAC,IAAI,CAAC,mBAAmB,CAAC,kBAAkB,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC;KAC9F;IAED,eAAe,GAAA;QACb,OAAO,KAAK,CAAC,MAAM,IAAI,CAAC,IAAI,CAAC,mBAAmB,CAAC,cAAc,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC;KAC1F;AAEK,IAAA,QAAQ,CAAC,KAA6C,EAAA;;AAC1D,YAAA,KAAK,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;AACrB,YAAA,IAAI,CAAC,KAAK,GAAG,qBAAqB,CAAC;YACnC,IAAI;AACF,gBAAA,MAAM,cAAc,GAAG,IAAI,CAAC,uBAAuB,EAAE,CAAC;gBACtD,MAAM,IAAI,CAAC,mBAAmB,CAAC,QAAQ,CAAC,cAAc,CAAC,CAAC;AACxD,gBAAA,IAAI,CAAC,KAAK,GAAG,qBAAqB,CAAC;AACnC,gBAAA,IAAI,CAAC,gBAAgB,CAAC,YAAY,CAAC,sBAAsB,EAAE;AACzD,oBAAA,MAAM,EAAE,qBAAqB;AAC7B,oBAAA,IAAI,EAAE,sBAAsB;AAC7B,iBAAA,CAAC,CAAC;AACJ,aAAA;AAAC,YAAA,OAAO,KAAK,EAAE;AACd,gBAAA,IAAI,CAAC,KAAK,GAAG,mBAAmB,CAAC;AACjC,gBAAA,IAAI,CAAC,gBAAgB,CAAC,YAAY,CAAC,sBAAsB,EAAE;AACzD,oBAAA,MAAM,EAAE,qBAAqB;AAC7B,oBAAA,IAAI,EAAE,sBAAsB;AAC7B,iBAAA,CAAC,CAAC;gBACH,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;AAC5B,aAAA;SACF,CAAA,CAAA;AAAA,KAAA;IAED,uBAAuB,GAAA;QACrB,MAAM,cAAc,GAA+B,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACzE,cAAc,CAAC,iBAAiB,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC;QAC9D,OAAQ,cAAsB,CAAC,UAAU,CAAC;AAC1C,QAAA,OAAO,cAAc,CAAC;KACvB;IACD,WAAW,GAAA;AACT,QAAA,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE,CAAC;AACzB,QAAA,IAAI,CAAC,YAAY,CAAC,QAAQ,EAAE,CAAC;KAC9B;;gIA/PU,mCAAmC,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAA,IAAA,CAAA,UAAA,EAAA,EAAA,EAAA,KAAA,EAAAC,iCAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,gBAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAnC,mCAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,mCAAmC,iECzBhD,g5GAsGA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,aAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,cAAA,EAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,gBAAA,EAAA,QAAA,EAAA,aAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,wBAAA,EAAA,QAAA,EAAA,sBAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,MAAA,EAAA,MAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,cAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,OAAA,EAAA,SAAA,EAAA,OAAA,EAAA,MAAA,EAAA,cAAA,EAAA,eAAA,EAAA,QAAA,CAAA,EAAA,OAAA,EAAA,CAAA,WAAA,EAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,UAAA,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,CAAA,qBAAA,EAAA,wBAAA,EAAA,eAAA,EAAA,kBAAA,EAAA,2BAAA,CAAA,EAAA,OAAA,EAAA,CAAA,cAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,aAAA,EAAA,OAAA,EAAA,cAAA,EAAA,YAAA,EAAA,iBAAA,EAAA,OAAA,EAAA,UAAA,EAAA,UAAA,EAAA,WAAA,EAAA,UAAA,CAAA,EAAA,OAAA,EAAA,CAAA,YAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,iBAAA,EAAA,QAAA,EAAA,qBAAA,EAAA,MAAA,EAAA,CAAA,QAAA,EAAA,SAAA,EAAA,UAAA,EAAA,aAAA,CAAA,EAAA,OAAA,EAAA,CAAA,UAAA,EAAA,QAAA,EAAA,QAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,UAAA,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,SAAA,EAAA,MAAA,CAAA,EAAA,OAAA,EAAA,CAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAA,EAAA,CAAA,gBAAA,EAAA,IAAA,EAAA,WAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAA,EAAA,CAAA,SAAA,EAAA,IAAA,EAAA,OAAA,EAAA,CAAA,EAAA,CAAA,CAAA;2FD7Ea,mCAAmC,EAAA,UAAA,EAAA,CAAA;kBAJ/C,SAAS;+BACE,2BAA2B,EAAA,QAAA,EAAA,g5GAAA,EAAA,CAAA;;;MEd1B,yCAAyC,CAAA;AACpD,IAAA,WAAA,CAAoB,YAA4B,EAAA;AAA5B,QAAA,IAAY,CAAA,YAAA,GAAZ,YAAY,CAAgB;KAAI;IAEpD,IAAI,GAAA;AACF,QAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,mCAAmC,EAAE;AAC1D,YAAA,KAAK,EAAE,UAAU;AACjB,YAAA,eAAe,EAAE,YAAY;AAC7B,YAAA,cAAc,EAAE,aAAa;AAC7B,YAAA,mBAAmB,EAAE,IAAI;AAC1B,SAAA,CAAC,CAAC;KACJ;;sIAVU,yCAAyC,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAD,IAAA,CAAA,cAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAzC,yCAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,yCAAyC,wECRtD,qLAIA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAE,EAAA,CAAA,aAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,gBAAA,EAAA,IAAA,EAAA,WAAA,EAAA,CAAA,EAAA,CAAA,CAAA;2FDIa,yCAAyC,EAAA,UAAA,EAAA,CAAA;kBAJrD,SAAS;+BACE,kCAAkC,EAAA,QAAA,EAAA,qLAAA,EAAA,CAAA;;;MEEjC,iCAAiC,CAAA;AAC5C,IAAA,WAAA,CAAoB,aAA8B,EAAA;AAA9B,QAAA,IAAa,CAAA,aAAA,GAAb,aAAa,CAAiB;KAAI;IAEtD,GAAG,GAAA;QACD,MAAM,OAAO,GAAyB,EAAE,CAAC;QACzC,IAAI,IAAI,CAAC,aAAa,CAAC,uCAAuC,CAAC,UAAU,CAAC,EAAE;YAC1E,OAAO,CAAC,IAAI,CAAC;AACX,gBAAA,QAAQ,EAAE,yCAAyC;AACnD,gBAAA,QAAQ,EAAE,EAAE;AACZ,gBAAA,QAAQ,EAAE,QAAQ;AACG,aAAA,CAAC,CAAC;AAC1B,SAAA;AACD,QAAA,OAAO,OAAO,CAAC;KAChB;;8HAbU,iCAAiC,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAF,EAAA,CAAA,eAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAAjC,iCAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,iCAAiC,cAFhC,MAAM,EAAA,CAAA,CAAA;2FAEP,iCAAiC,EAAA,UAAA,EAAA,CAAA;kBAH7C,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,UAAU,EAAE,MAAM;iBACnB,CAAA;;;MCUY,gCAAgC,CAAA;;6HAAhC,gCAAgC,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,QAAA,EAAA,CAAA,CAAA;AAAhC,gCAAA,CAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,gCAAgC,iBAN5B,yCAAyC,EAAE,mCAAmC,CADnF,EAAA,OAAA,EAAA,CAAA,UAAU,EAAE,YAAY,CAAA,EAAA,CAAA,CAAA;AAOvB,gCAAA,CAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,gCAAgC,EALhC,SAAA,EAAA;QACT,iCAAiC;QACjC,sBAAsB,CAAC,iCAAiC,CAAC;KAC1D,EALS,OAAA,EAAA,CAAA,UAAU,EAAE,YAAY,CAAA,EAAA,CAAA,CAAA;2FAOvB,gCAAgC,EAAA,UAAA,EAAA,CAAA;kBAR5C,QAAQ;AAAC,YAAA,IAAA,EAAA,CAAA;AACR,oBAAA,OAAO,EAAE,CAAC,UAAU,EAAE,YAAY,CAAC;AACnC,oBAAA,YAAY,EAAE,CAAC,yCAAyC,EAAE,mCAAmC,CAAC;AAC9F,oBAAA,SAAS,EAAE;wBACT,iCAAiC;wBACjC,sBAAsB,CAAC,iCAAiC,CAAC;AAC1D,qBAAA;iBACF,CAAA;;;ACfD;;AAEG;;;;"}
|
|
1
|
+
{"version":3,"file":"c8y-ngx-components-actility-device-registration.mjs","sources":["../../actility-device-registration/actility-device-registration.service.ts","../../actility-device-registration/actility-device-registration.component.ts","../../actility-device-registration/actility-device-registration.component.html","../../actility-device-registration/actility-device-registration-button.component.ts","../../actility-device-registration/actility-device-registration-button.component.html","../../actility-device-registration/actility-device-registration.factory.ts","../../actility-device-registration/actility-device-registration.module.ts","../../actility-device-registration/c8y-ngx-components-actility-device-registration.ts"],"sourcesContent":["import { Injectable } from '@angular/core';\nimport { TranslateService } from '@ngx-translate/core';\nimport {\n FetchClient,\n IFetchOptions,\n ApplicationService,\n IManagedObject,\n InventoryService,\n IResultList\n} from '@c8y/client';\nimport { gettext, OptionsService } from '@c8y/ngx-components';\nimport {\n ActilityDeviceRegistration,\n ConnectivityPlan,\n DeviceProfile\n} from './actility-device-registration.model';\nimport { some } from 'lodash-es';\n\nexport enum ErrorName {\n NoConnectivityPlansError = 'NoConnectivityPlansError',\n NoFreeSlotsInConnectivityPlansError = 'NoFreeSlotsInConnectivityPlansError',\n NoConnectivitySettingsError = 'NoConnectivitySettingsError',\n ConnectivitySettingsError = 'ConnectivitySettingsError',\n NoDeviceProfilesError = 'NoDeviceProfilesError',\n DeviceProfilesFetchError = 'DeviceProfilesFetchError',\n NoDeviceProtocolsError = 'NoDeviceProtocolsError',\n DeviceProtocolsFetchError = 'DeviceProtocolsFetchError',\n RegistrationError = 'RegistrationError'\n}\n\n@Injectable({ providedIn: 'root' })\nexport class ActilityDeviceRegistrationService {\n private baseUrl = '/service/actility';\n private registrationUrl: string = `${this.baseUrl}/newDeviceRequest`;\n private connectivityPlansUrl: string = `${this.baseUrl}/connectivityPlans`;\n private deviceProfilesUrl: string = `${this.baseUrl}/deviceProfiles`;\n private headers: object = {\n 'Content-Type': 'application/json'\n };\n\n constructor(\n private inventoryService: InventoryService,\n private client: FetchClient,\n private translateService: TranslateService,\n private applicationService: ApplicationService,\n private optionsService: OptionsService\n ) {}\n\n async getConnections() {\n const options: IFetchOptions = {\n method: 'GET',\n headers: this.headers\n };\n const res = await this.client.fetch(`${this.baseUrl}/lns-connection`, options);\n const data = await res.json();\n\n if (res.status === 200) {\n if (data.length === 0) {\n await this.throwNoConnectivitySettingsError();\n }\n } else {\n await this.throwConnectivitySettingsError(data);\n }\n return { res, data };\n }\n /**\n * Gets connectivity plans from LoRa platform.\n * @param connectionName The name of connection for which connectivity plans will be retrieved\n * @returns The result list with connectivity plans, or throws an error with exception.\n */\n async getConnectivityPlans(connectionName: string): Promise<IResultList<ConnectivityPlan>> {\n const options: IFetchOptions = {\n method: 'GET',\n headers: this.headers,\n params: {\n actilityConnectionName: connectionName\n }\n };\n\n const res = await this.client.fetch(this.connectivityPlansUrl, options);\n const data = await res.json();\n\n if (res.status === 200) {\n if (data.length === 0) {\n this.throwNoConnectivityPlansError();\n } else {\n if (!this.hasAvailableConnections(data)) {\n this.throwNoFreeSlotsInConnectivityPlansError();\n }\n }\n } else {\n await this.throwConnectivitySettingsError(data);\n }\n\n return { res, data };\n }\n\n /**\n * Gets the device profiles from LoRa platform.\n * @param connectionName The name of connection for which device profiles will be retrieved\n * @returns The result list with device profiles, or throws an error with exception.\n */\n async getDeviceProfiles(connectionName: string): Promise<IResultList<DeviceProfile>> {\n const options: IFetchOptions = {\n method: 'GET',\n headers: this.headers,\n params: {\n actilityConnectionName: connectionName\n }\n };\n\n const res = await this.client.fetch(this.deviceProfilesUrl, options);\n const data = await res.json();\n\n if (res.status === 200) {\n if (data.length === 0) {\n this.throwNoDeviceProfilesError();\n }\n } else {\n this.throwDeviceProfilesFetchError();\n }\n\n return { res, data };\n }\n\n /**\n * Gets the device protocols\n */\n async getDeviceProtocols(\n filter: object = { withTotalPages: true }\n ): Promise<IResultList<IManagedObject>> {\n const query = {\n __filter: {\n __and: [\n { __has: 'c8y_IsDeviceType' },\n {\n type: { __in: ['c8y_ActilityDeviceType', 'c8y_LoraDeviceType', 'c8y_LpwanDeviceType'] }\n }\n ]\n },\n __orderby: [{ name: 1 }]\n };\n const deviceProtocolsList = await this.inventoryService.listQuery(query, filter);\n const { res, data } = deviceProtocolsList;\n\n if (res.status === 200) {\n if (data.length === 0) {\n this.throwNoDeviceProtocolsError();\n }\n } else {\n this.throwDeviceProtocolsFetchError();\n }\n\n return deviceProtocolsList;\n }\n\n /**\n * Creates device registration\n */\n async register(registration: ActilityDeviceRegistration) {\n const options: IFetchOptions = {\n method: 'POST',\n headers: this.headers,\n body: JSON.stringify(registration)\n };\n\n const res = await this.client.fetch(this.registrationUrl, options);\n const data = await res.json();\n\n if (res.status !== 201) {\n this.throwRegistrationError(data);\n }\n\n return { res, data };\n }\n\n /**\n * checks if used connections is less then granted connections\n */\n private hasAvailableConnections(connectivityPlans) {\n return some(\n connectivityPlans,\n plan => parseInt(plan.grantedConnections, 10) > parseInt(plan.usedConnections, 10)\n );\n }\n\n private async throwNoConnectivitySettingsError() {\n const error = new Error();\n error.name = ErrorName.NoConnectivitySettingsError;\n\n if ((await this.applicationService.isAvailable('administration')).data) {\n error.message = this.translateService.instant(\n gettext(\n `Could not get connectivity plans from the LoRa platform. Verify the ThingPark credentials in the Administration app under <a href=\"{{ link }}\">Settings</a>.`\n ),\n {\n link: '/apps/administration/index.html#/connectivitySettings/actility_lora_provider_settings'\n }\n );\n } else {\n error.message = gettext(\n 'Could not get connectivity plans from the LoRa platform. Please contact the administrator.'\n );\n }\n\n throw error;\n }\n\n private throwConnectivitySettingsError(data: { message: string }) {\n const error = new Error();\n error.name = ErrorName.ConnectivitySettingsError;\n error.message = data.message;\n throw error;\n }\n\n private throwNoConnectivityPlansError() {\n const error = new Error();\n error.name = ErrorName.NoConnectivityPlansError;\n error.message = gettext(\n 'No connectivity plans found. New connectivity plans must be created via the LoRa platform.'\n );\n throw error;\n }\n\n private throwNoFreeSlotsInConnectivityPlansError() {\n const companyName = this.optionsService.get('companyName', 'Cumulocity IoT');\n const error = new Error();\n error.name = ErrorName.NoFreeSlotsInConnectivityPlansError;\n error.message = this.translateService.instant(\n gettext(\n `No connectivity plans with free slots available. Please contact ThingPark on the device quota limits for your connectivity plans or remove unused devices from ThingPark and retry registering the device in the {{companyName}} platform.`\n ),\n {\n companyName\n }\n );\n throw error;\n }\n\n private throwDeviceProfilesFetchError() {\n const error = new Error();\n error.name = ErrorName.DeviceProfilesFetchError;\n error.message = gettext('Could not load device profiles from the LoRa platform.');\n throw error;\n }\n\n private throwNoDeviceProfilesError() {\n const error = new Error();\n error.name = ErrorName.NoDeviceProfilesError;\n error.message = gettext(\n 'No device profiles found. Create a new device profile via the LoRa platform.'\n );\n throw error;\n }\n\n private throwDeviceProtocolsFetchError() {\n const error = new Error();\n error.name = ErrorName.DeviceProtocolsFetchError;\n error.message = gettext('Could not load device protocols.');\n throw error;\n }\n\n private throwNoDeviceProtocolsError() {\n const error = new Error();\n error.name = ErrorName.NoDeviceProtocolsError;\n error.message = this.translateService.instant(\n gettext(\n `No device protocols configured. Create a LoRa device protocol in <a href=\"{{ link }}\">Device protocols</a>.`\n ),\n {\n link: '/apps/devicemanagement/#/deviceprotocols'\n }\n );\n throw error;\n }\n\n private throwRegistrationError(data: { message: string }) {\n const error = new Error();\n error.name = ErrorName.RegistrationError;\n error.message = data.message;\n throw error;\n }\n}\n","import { CdkStep } from '@angular/cdk/stepper';\nimport { Component } from '@angular/core';\nimport { AbstractControl, FormGroup } from '@angular/forms';\nimport { C8yStepper, GainsightService, gettext } from '@c8y/ngx-components';\nimport { FormlyFieldConfig } from '@ngx-formly/core';\nimport { cloneDeep, uniq } from 'lodash-es';\nimport { BsModalRef } from 'ngx-bootstrap/modal';\nimport { BehaviorSubject, defer, forkJoin, from, of, Subject, throwError } from 'rxjs';\nimport { catchError, map, mergeMap, shareReplay, switchMap, takeUntil } from 'rxjs/operators';\nimport { ActilityDeviceRegistration } from './actility-device-registration.model';\nimport {\n ActilityDeviceRegistrationService,\n ErrorName\n} from './actility-device-registration.service';\ntype State =\n | 'loadPending'\n | 'loadSuccess'\n | 'loadError'\n | 'registrationPending'\n | 'registrationSuccess'\n | 'registrationError';\n@Component({\n selector: 'c8y-actility-registration',\n templateUrl: 'actility-device-registration.component.html'\n})\nexport class ActilityDeviceRegistrationComponent {\n stepper: C8yStepper;\n registrationStepLabels = {\n next: gettext('Register')\n };\n finalStepLabels = {\n custom: gettext('Close')\n };\n\n state: State = 'loadPending';\n errors$ = new BehaviorSubject<Error[]>([]);\n errorMessages$ = this.errors$.pipe(\n map(errors => errors.map(error => error.message)),\n map(messages => uniq(messages))\n );\n\n connections$ = this.getConnections$();\n deviceProtocols$ = this.getDeviceProtocols$();\n unsubscribe$: Subject<void> = new Subject();\n load$ = this.connections$.pipe(\n catchError((error: Error) => of(error)),\n switchMap(connections => {\n if (\n connections instanceof Error &&\n connections.name === ErrorName.NoConnectivitySettingsError\n ) {\n return of([connections]);\n }\n\n return forkJoin([\n of(connections),\n this.deviceProtocols$.pipe(catchError((error: Error) => of(error)))\n ]);\n }),\n map(results => results.filter(result => result instanceof Error)),\n switchMap(errors => (errors.length === 0 ? of([]) : throwError(errors)))\n );\n\n form = new FormGroup({});\n model = {} as ActilityDeviceRegistration;\n\n // Formly schema definition to render actility device registration form\n fields: FormlyFieldConfig[] = [\n {\n key: 'connection',\n type: 'typeahead',\n templateOptions: {\n label: gettext('Connection'),\n required: true,\n c8yForOptions: this.connections$,\n displayProperty: 'name',\n valueProperties: ['name']\n }\n },\n {\n key: 'deviceProfile',\n type: 'typeahead',\n templateOptions: {\n label: gettext('Device profile'),\n required: true,\n displayProperty: 'name',\n placeholder: 'IWM-LR3',\n valueProperties: ['id', 'name', 'typeMAC']\n },\n hooks: {\n onInit: field => {\n const connectionControl = field.form.get('connection');\n connectionControl.valueChanges\n .pipe(\n takeUntil(this.unsubscribe$),\n mergeMap(({ name }) => this.getDeviceProfiles$(name))\n )\n .subscribe(\n profiles => {\n field.templateOptions.c8yForOptions = of(profiles);\n field.formControl.setValue(null);\n },\n error => {\n field.form.controls.deviceProfile.setErrors({ deviceProfile: true });\n field.validators.deviceProfile.message = error.message;\n }\n );\n }\n },\n validators: {\n deviceProfile: {\n expression: (control: AbstractControl) => {\n return control.status === 'VALID';\n },\n message: () => ''\n }\n }\n },\n {\n key: 'deviceType',\n type: 'typeahead',\n templateOptions: {\n label: gettext('Device protocol'),\n required: true,\n c8yForOptions: this.deviceProtocols$,\n displayProperty: 'name',\n valueProperties: ['id', 'name']\n }\n },\n {\n key: 'devEUI',\n type: 'input',\n templateOptions: {\n placeholder: '0018A20000000004',\n label: gettext('Device EUI'),\n required: true,\n pattern: '^([a-fA-F0-9]{16})$'\n },\n validation: {\n messages: {\n pattern: gettext('Must be a valid 16 digit hexadecimal number.')\n }\n }\n },\n {\n key: 'applicationEUI',\n type: 'input',\n templateOptions: {\n placeholder: '70B3D53260000003',\n label: gettext('Application EUI'),\n required: true,\n pattern: '^([a-fA-F0-9]{16})$'\n },\n validation: {\n messages: {\n pattern: gettext('Must be a valid 16 digit hexadecimal number.')\n }\n }\n },\n {\n key: 'applicationKey',\n type: 'input',\n templateOptions: {\n label: gettext('Application key'),\n placeholder: '258DB54023EA74F0D55085F7351737D0',\n required: true,\n pattern: '^([a-fA-F0-9]{32})$'\n },\n validation: {\n messages: {\n pattern: gettext('Must be a valid 32 digit hexadecimal number.')\n }\n }\n },\n {\n key: 'connectivityPlan',\n type: 'typeahead',\n templateOptions: {\n label: gettext('Connectivity plan'),\n description: gettext('Only connectivity plans with free slots are displayed'),\n required: true,\n placeholder: 'Dev-ope testing CP',\n displayProperty: 'name',\n valueProperties: ['id', 'ref', 'name', 'grantedConnections', 'usedConnections']\n },\n hooks: {\n onInit: field => {\n const connectionControl = field.form.get('connection');\n connectionControl.valueChanges\n .pipe(\n takeUntil(this.unsubscribe$),\n mergeMap(({ name }) => this.getConnectivityPlans$(name))\n )\n .subscribe(\n profiles => {\n field.templateOptions.c8yForOptions = of(profiles);\n field.formControl.setValue(null);\n },\n error => {\n field.form.controls.connectivityPlan.setErrors({ connectivityPlan: true });\n field.validators.connectivityPlan.message = error.message;\n }\n );\n }\n },\n validators: {\n connectivityPlan: {\n expression: (control: AbstractControl) => {\n return control.status === 'VALID';\n },\n message: () => ''\n }\n }\n }\n ];\n\n constructor(\n public bsModalRef: BsModalRef,\n private registrationService: ActilityDeviceRegistrationService,\n private gainsightService: GainsightService\n ) {\n this.load$.subscribe(\n () => {\n this.state = 'loadSuccess';\n },\n errors => {\n this.state = 'loadError';\n this.errors$.next(errors);\n }\n );\n }\n\n getConnectivityPlans$(name) {\n return defer(() => from(this.registrationService.getConnectivityPlans(name))).pipe(\n shareReplay(1)\n );\n }\n\n getDeviceProfiles$(name) {\n return defer(() => from(this.registrationService.getDeviceProfiles(name))).pipe(shareReplay(1));\n }\n\n getDeviceProtocols$() {\n return defer(() => from(this.registrationService.getDeviceProtocols())).pipe(shareReplay(1));\n }\n\n getConnections$() {\n return defer(() => from(this.registrationService.getConnections())).pipe(shareReplay(1));\n }\n\n async register(event: { stepper: C8yStepper; step: CdkStep }) {\n event.stepper.next();\n this.state = 'registrationPending';\n try {\n const actilityDevice = this.getActilityDeviceToSend();\n await this.registrationService.register(actilityDevice);\n this.state = 'registrationSuccess';\n this.gainsightService.triggerEvent('dmDeviceRegistration', {\n action: 'registrationSuccess',\n name: 'actilityRegistration'\n });\n } catch (error) {\n this.state = 'registrationError';\n this.gainsightService.triggerEvent('dmDeviceRegistration', {\n action: 'registrationFailure',\n name: 'actilityRegistration'\n });\n this.errors$.next([error]);\n }\n }\n\n getActilityDeviceToSend() {\n const actilityDevice: ActilityDeviceRegistration = cloneDeep(this.model);\n actilityDevice.lnsConnectionName = this.model.connection.name;\n delete (actilityDevice as any).connection;\n return actilityDevice;\n }\n ngOnDestroy(): void {\n this.unsubscribe$.next();\n this.unsubscribe$.complete();\n }\n}\n","<c8y-modal\n [title]=\"'Actility LoRa registration' | translate\"\n [headerClasses]=\"'dialog-header'\"\n [customFooter]=\"true\"\n>\n <ng-container c8y-modal-title>\n <span [c8yIcon]=\"'c8y-device-connect'\"></span>\n </ng-container>\n\n <ng-container *ngIf=\"state === 'loadPending'; else registrationForm\">\n <div class=\"p-16 text-center\">\n <c8y-loading></c8y-loading>\n </div>\n </ng-container>\n\n <!--Formly schema is rendered-->\n <ng-template #registrationForm>\n <c8y-stepper\n [hideStepProgress]=\"true\"\n c8y-modal-body\n linear\n *ngIf=\"(errorMessages$ | async).length === 0; else errorMessagesPresent\"\n >\n <cdk-step [stepControl]=\"form\">\n <div class=\"p-b-16\">\n <p class=\"modal-subtitle sticky-top\">\n {{ 'Register a single Actility device' | translate }}\n </p>\n <formly-form\n [form]=\"form\"\n [fields]=\"fields\"\n [model]=\"model\"\n class=\"formly-group-array-cols d-block p-l-24 p-r-24 p-t-16\"\n ></formly-form>\n </div>\n\n <c8y-stepper-buttons\n [labels]=\"registrationStepLabels\"\n (onNext)=\"register($event)\"\n (onCancel)=\"bsModalRef.hide()\"\n [showButtons]=\"{ cancel: true, next: true }\"\n [pending]=\"state === 'registrationPending'\"\n [disabled]=\"!form?.valid\"\n class=\"sticky-bottom d-block p-t-16 p-b-16 separator-top bg-level-0\"\n ></c8y-stepper-buttons>\n </cdk-step>\n <cdk-step state=\"final\">\n <!--success scenario-->\n <div class=\"p-16 text-center\" *ngIf=\"state === 'registrationPending'\">\n <c8y-loading></c8y-loading>\n </div>\n <div class=\"m-24\">\n <c8y-operation-result\n *ngIf=\"state === 'registrationSuccess'\"\n text=\"{{ 'Device registered' | translate }}\"\n [size]=\"84\"\n [vertical]=\"true\"\n type=\"success\"\n class=\"lead m-b-0\"\n ></c8y-operation-result>\n </div>\n <c8y-stepper-buttons\n class=\"sticky-bottom d-block p-t-16 p-b-16 separator-top bg-level-0\"\n (onCustom)=\"bsModalRef.hide()\"\n [showButtons]=\"{ custom: true }\"\n [labels]=\"finalStepLabels\"\n ></c8y-stepper-buttons>\n </cdk-step>\n </c8y-stepper>\n </ng-template>\n\n <!--Failure scenario-->\n <ng-template #errorMessagesPresent>\n <div class=\"m-24\">\n <c8y-operation-result\n *ngIf=\"state === 'registrationError'\"\n text=\"{{ 'Failed to register' | translate }}\"\n [size]=\"84\"\n [vertical]=\"true\"\n type=\"error\"\n class=\"lead\"\n ></c8y-operation-result>\n <div\n *ngFor=\"let msg of errorMessages$ | async\"\n class=\"m-b-8\"\n [ngClass]=\"{\n 'text-center': state === 'registrationError',\n 'alert alert-danger': state === 'loadError'\n }\"\n >\n <span [innerHTML]=\"msg | translate\"></span>\n </div>\n </div>\n <div class=\"modal-footer\">\n <button\n title=\"{{ 'Close' | translate }}\"\n (click)=\"bsModalRef.hide()\"\n type=\"button\"\n class=\"btn btn-default\"\n >\n {{ 'Close' | translate }}\n </button>\n </div>\n </ng-template>\n</c8y-modal>\n","import { Component } from '@angular/core';\nimport { BsModalService } from 'ngx-bootstrap/modal';\nimport { ActilityDeviceRegistrationComponent } from './actility-device-registration.component';\n\n@Component({\n selector: 'c8y-actility-registration-button',\n templateUrl: 'actility-device-registration-button.component.html'\n})\nexport class ActilityDeviceRegistrationButtonComponent {\n constructor(private modalService: BsModalService) {}\n\n open() {\n this.modalService.show(ActilityDeviceRegistrationComponent, {\n class: 'modal-sm',\n ariaDescribedby: 'modal-body',\n ariaLabelledBy: 'modal-title',\n ignoreBackdropClick: true\n });\n }\n}\n","<button title=\"{{ 'Actility LoRa' | translate }}\" type=\"button\" (click)=\"open()\">\n <i c8yIcon=\"c8y-device-connect\"></i>\n {{ 'Actility LoRa' | translate }}\n</button>\n","import { Injectable } from '@angular/core';\nimport { TenantUiService } from '@c8y/ngx-components';\nimport { ActilityDeviceRegistrationButtonComponent } from './actility-device-registration-button.component';\nimport { RegisterDeviceFactory, RegisterDeviceItem } from '@c8y/ngx-components/register-device';\n@Injectable({\n providedIn: 'root'\n})\nexport class ActilityDeviceRegistrationFactory implements RegisterDeviceFactory {\n constructor(private tenantService: TenantUiService) {}\n\n get() {\n const actions: RegisterDeviceItem[] = [];\n if (this.tenantService.isMicroserviceSubscribedInCurrentTenant('actility')) {\n actions.push({\n template: ActilityDeviceRegistrationButtonComponent,\n priority: 99,\n category: 'single'\n } as RegisterDeviceItem);\n }\n return actions;\n }\n}\n","import { NgModule } from '@angular/core';\nimport { CommonModule, CoreModule } from '@c8y/ngx-components';\nimport { hookDeviceRegistration } from '@c8y/ngx-components/register-device';\nimport { ActilityDeviceRegistrationButtonComponent } from './actility-device-registration-button.component';\nimport { ActilityDeviceRegistrationFactory } from './actility-device-registration.factory';\nimport { ActilityDeviceRegistrationComponent } from './actility-device-registration.component';\nimport { ActilityDeviceRegistrationService } from './actility-device-registration.service';\n\n@NgModule({\n imports: [CoreModule, CommonModule],\n declarations: [ActilityDeviceRegistrationButtonComponent, ActilityDeviceRegistrationComponent],\n providers: [\n ActilityDeviceRegistrationService,\n hookDeviceRegistration(ActilityDeviceRegistrationFactory)\n ]\n})\nexport class ActilityDeviceRegistrationModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["i1","i2.ActilityDeviceRegistrationService","i2"],"mappings":"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"}
|