{"version":3,"file":"c8y-ngx-components-actility-device-registration.mjs","sources":["../../actility-device-registration/actility-device-registration.model.ts","../../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":["export interface ConnectivityPlan {\n  grantedConnections: string;\n  id: string;\n  name: string;\n  ref: string;\n  usedConnections: string;\n  message?: string;\n}\n\nexport interface DeviceType {\n  name: string;\n  id: string;\n}\n\nexport interface ActilityDeviceProfile {\n  id: string;\n  name: string;\n  typeMAC: string;\n  message?: string;\n}\n\nexport interface ActilityDeviceRegistration {\n  applicationEUI: string;\n  applicationKey: string;\n  devEUI: string;\n  deviceProfile: ActilityDeviceProfile;\n  connectivityPlan: ConnectivityPlan;\n  deviceType: DeviceType;\n  lnsConnectionName: string;\n  connection: {\n    name: string;\n    description: string;\n    baseUrl: string;\n    profileId: string;\n    username: string;\n    password: string;\n  };\n}\n\nexport const PRODUCT_EXPERIENCE_ACTILITY_REGISTRATION = {\n  EVENT: 'deviceRegistration',\n  COMPONENT: 'actility-registration',\n  RESULT: { SUCCESS: 'registrationSuccess', FAILURE: 'registrationFailure' }\n} as const;\n","import { Injectable } from '@angular/core';\nimport {\n  ApplicationService,\n  FetchClient,\n  IFetchOptions,\n  IManagedObject,\n  IResultList,\n  InventoryService\n} from '@c8y/client';\nimport { gettext } from '@c8y/ngx-components/gettext';\nimport { AppStateService, OptionsService } from '@c8y/ngx-components';\nimport { TranslateService } from '@ngx-translate/core';\nimport { some } from 'lodash-es';\nimport {\n  ActilityDeviceProfile,\n  ActilityDeviceRegistration,\n  ConnectivityPlan\n} from './actility-device-registration.model';\n\nexport enum ActilityErrorName {\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 = `${this.baseUrl}/newDeviceRequest`;\n  private connectivityPlansUrl = `${this.baseUrl}/connectivityPlans`;\n  private deviceProfilesUrl = `${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    private appState: AppStateService\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<ActilityDeviceProfile>> {\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 = ActilityErrorName.NoConnectivitySettingsError;\n\n    if (await this.appState.isApplicationAvailable('administration')) {\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 application under <a href=\"{{ link }}\">Settings</a>.`\n        ),\n        {\n          link: '/apps/administration/index.html#/connectivitySettings/multiple_lns_connectors_actility'\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 = ActilityErrorName.ConnectivitySettingsError;\n    error.message = data.message;\n    throw error;\n  }\n\n  private throwNoConnectivityPlansError() {\n    const error = new Error();\n    error.name = ActilityErrorName.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 = ActilityErrorName.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 = ActilityErrorName.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 = ActilityErrorName.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 = ActilityErrorName.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 = ActilityErrorName.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 = ActilityErrorName.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 { gettext } from '@c8y/ngx-components/gettext';\nimport {\n  C8yStepper,\n  GainsightService,\n  ModalComponent,\n  IconDirective,\n  LoadingComponent,\n  C8yStepperButtons,\n  OperationResultComponent,\n  C8yTranslatePipe\n} from '@c8y/ngx-components';\nimport { FormlyFieldConfig, FormlyModule } 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 {\n  ActilityDeviceRegistration,\n  PRODUCT_EXPERIENCE_ACTILITY_REGISTRATION\n} from './actility-device-registration.model';\nimport {\n  ActilityDeviceRegistrationService,\n  ActilityErrorName\n} from './actility-device-registration.service';\nimport { NgIf, NgFor, NgClass, AsyncPipe } from '@angular/common';\n\ntype ActilityState =\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  imports: [\n    ModalComponent,\n    IconDirective,\n    NgIf,\n    LoadingComponent,\n    C8yStepper,\n    CdkStep,\n    FormlyModule,\n    C8yStepperButtons,\n    OperationResultComponent,\n    NgFor,\n    NgClass,\n    C8yTranslatePipe,\n    AsyncPipe\n  ]\n})\nexport class ActilityDeviceRegistrationComponent {\n  stepper: C8yStepper;\n  registrationStepLabels = {\n    next: gettext('Register')\n  };\n  finalStepLabels = {\n    custom: gettext('Close')\n  };\n\n  state: ActilityState = '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 === ActilityErrorName.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.get('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.get('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(PRODUCT_EXPERIENCE_ACTILITY_REGISTRATION.EVENT, {\n        result: PRODUCT_EXPERIENCE_ACTILITY_REGISTRATION.RESULT.SUCCESS,\n        component: PRODUCT_EXPERIENCE_ACTILITY_REGISTRATION.COMPONENT\n      });\n    } catch (error) {\n      this.state = 'registrationError';\n      this.gainsightService.triggerEvent(PRODUCT_EXPERIENCE_ACTILITY_REGISTRATION.EVENT, {\n        result: PRODUCT_EXPERIENCE_ACTILITY_REGISTRATION.RESULT.FAILURE,\n        component: PRODUCT_EXPERIENCE_ACTILITY_REGISTRATION.COMPONENT\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            class=\"formly-group-array-cols d-block p-l-24 p-r-24 p-t-16\"\n            [form]=\"form\"\n            [fields]=\"fields\"\n            [model]=\"model\"\n          ></formly-form>\n        </div>\n\n        <c8y-stepper-buttons\n          class=\"sticky-bottom d-block p-t-16 p-b-16 separator-top bg-level-0\"\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        ></c8y-stepper-buttons>\n      </cdk-step>\n      <cdk-step state=\"final\">\n        <!--success scenario-->\n        <div\n          class=\"p-16 text-center\"\n          *ngIf=\"state === 'registrationPending'\"\n        >\n          <c8y-loading></c8y-loading>\n        </div>\n        <div class=\"m-24\">\n          <c8y-operation-result\n            class=\"lead m-b-0\"\n            type=\"success\"\n            *ngIf=\"state === 'registrationSuccess'\"\n            text=\"{{ 'Device registered' | translate }}\"\n            [size]=\"84\"\n            [vertical]=\"true\"\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        class=\"lead\"\n        type=\"error\"\n        *ngIf=\"state === 'registrationError'\"\n        text=\"{{ 'Failed to register' | translate }}\"\n        [size]=\"84\"\n        [vertical]=\"true\"\n      ></c8y-operation-result>\n      <div\n        class=\"m-b-8\"\n        *ngFor=\"let msg of errorMessages$ | async\"\n        data-cy=\"actility-device-registration.component--registration-error\"\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        class=\"btn btn-default\"\n        title=\"{{ 'Close' | translate }}\"\n        type=\"button\"\n        (click)=\"bsModalRef.hide()\"\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';\nimport { IconDirective, C8yTranslatePipe } from '@c8y/ngx-components';\n\n@Component({\n  selector: 'c8y-actility-registration-button',\n  templateUrl: 'actility-device-registration-button.component.html',\n  imports: [IconDirective, C8yTranslatePipe]\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: [\n    CoreModule,\n    CommonModule,\n    ActilityDeviceRegistrationButtonComponent,\n    ActilityDeviceRegistrationComponent\n  ],\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"],"mappings":";;;;;;;;;;;;;;;;;;AAuCO,MAAM,wCAAwC,GAAG;AACtD,IAAA,KAAK,EAAE,oBAAoB;AAC3B,IAAA,SAAS,EAAE,uBAAuB;IAClC,MAAM,EAAE,EAAE,OAAO,EAAE,qBAAqB,EAAE,OAAO,EAAE,qBAAqB;CAChE;;ACxBV,IAAY,iBAUX;AAVD,CAAA,UAAY,iBAAiB,EAAA;AAC3B,IAAA,iBAAA,CAAA,0BAAA,CAAA,GAAA,0BAAqD;AACrD,IAAA,iBAAA,CAAA,qCAAA,CAAA,GAAA,qCAA2E;AAC3E,IAAA,iBAAA,CAAA,6BAAA,CAAA,GAAA,6BAA2D;AAC3D,IAAA,iBAAA,CAAA,2BAAA,CAAA,GAAA,2BAAuD;AACvD,IAAA,iBAAA,CAAA,uBAAA,CAAA,GAAA,uBAA+C;AAC/C,IAAA,iBAAA,CAAA,0BAAA,CAAA,GAAA,0BAAqD;AACrD,IAAA,iBAAA,CAAA,wBAAA,CAAA,GAAA,wBAAiD;AACjD,IAAA,iBAAA,CAAA,2BAAA,CAAA,GAAA,2BAAuD;AACvD,IAAA,iBAAA,CAAA,mBAAA,CAAA,GAAA,mBAAuC;AACzC,CAAC,EAVW,iBAAiB,KAAjB,iBAAiB,GAAA,EAAA,CAAA,CAAA;MAahB,iCAAiC,CAAA;IAS5C,WAAA,CACU,gBAAkC,EAClC,MAAmB,EACnB,gBAAkC,EAClC,kBAAsC,EACtC,cAA8B,EAC9B,QAAyB,EAAA;QALzB,IAAA,CAAA,gBAAgB,GAAhB,gBAAgB;QAChB,IAAA,CAAA,MAAM,GAAN,MAAM;QACN,IAAA,CAAA,gBAAgB,GAAhB,gBAAgB;QAChB,IAAA,CAAA,kBAAkB,GAAlB,kBAAkB;QAClB,IAAA,CAAA,cAAc,GAAd,cAAc;QACd,IAAA,CAAA,QAAQ,GAAR,QAAQ;QAdV,IAAA,CAAA,OAAO,GAAG,mBAAmB;AAC7B,QAAA,IAAA,CAAA,eAAe,GAAG,CAAA,EAAG,IAAI,CAAC,OAAO,mBAAmB;AACpD,QAAA,IAAA,CAAA,oBAAoB,GAAG,CAAA,EAAG,IAAI,CAAC,OAAO,oBAAoB;AAC1D,QAAA,IAAA,CAAA,iBAAiB,GAAG,CAAA,EAAG,IAAI,CAAC,OAAO,iBAAiB;AACpD,QAAA,IAAA,CAAA,OAAO,GAAW;AACxB,YAAA,cAAc,EAAE;SACjB;IASE;AAEH,IAAA,MAAM,cAAc,GAAA;AAClB,QAAA,MAAM,OAAO,GAAkB;AAC7B,YAAA,MAAM,EAAE,KAAK;YACb,OAAO,EAAE,IAAI,CAAC;SACf;AACD,QAAA,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAA,EAAG,IAAI,CAAC,OAAO,iBAAiB,EAAE,OAAO,CAAC;AAC9E,QAAA,MAAM,IAAI,GAAG,MAAM,GAAG,CAAC,IAAI,EAAE;AAE7B,QAAA,IAAI,GAAG,CAAC,MAAM,KAAK,GAAG,EAAE;AACtB,YAAA,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE;AACrB,gBAAA,MAAM,IAAI,CAAC,gCAAgC,EAAE;YAC/C;QACF;aAAO;AACL,YAAA,MAAM,IAAI,CAAC,8BAA8B,CAAC,IAAI,CAAC;QACjD;AACA,QAAA,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE;IACtB;AACA;;;;AAIG;IACH,MAAM,oBAAoB,CAAC,cAAsB,EAAA;AAC/C,QAAA,MAAM,OAAO,GAAkB;AAC7B,YAAA,MAAM,EAAE,KAAK;YACb,OAAO,EAAE,IAAI,CAAC,OAAO;AACrB,YAAA,MAAM,EAAE;AACN,gBAAA,sBAAsB,EAAE;AACzB;SACF;AAED,QAAA,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,oBAAoB,EAAE,OAAO,CAAC;AACvE,QAAA,MAAM,IAAI,GAAG,MAAM,GAAG,CAAC,IAAI,EAAE;AAE7B,QAAA,IAAI,GAAG,CAAC,MAAM,KAAK,GAAG,EAAE;AACtB,YAAA,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE;gBACrB,IAAI,CAAC,6BAA6B,EAAE;YACtC;iBAAO;gBACL,IAAI,CAAC,IAAI,CAAC,uBAAuB,CAAC,IAAI,CAAC,EAAE;oBACvC,IAAI,CAAC,wCAAwC,EAAE;gBACjD;YACF;QACF;aAAO;AACL,YAAA,MAAM,IAAI,CAAC,8BAA8B,CAAC,IAAI,CAAC;QACjD;AAEA,QAAA,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE;IACtB;AAEA;;;;AAIG;IACH,MAAM,iBAAiB,CAAC,cAAsB,EAAA;AAC5C,QAAA,MAAM,OAAO,GAAkB;AAC7B,YAAA,MAAM,EAAE,KAAK;YACb,OAAO,EAAE,IAAI,CAAC,OAAO;AACrB,YAAA,MAAM,EAAE;AACN,gBAAA,sBAAsB,EAAE;AACzB;SACF;AAED,QAAA,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,iBAAiB,EAAE,OAAO,CAAC;AACpE,QAAA,MAAM,IAAI,GAAG,MAAM,GAAG,CAAC,IAAI,EAAE;AAE7B,QAAA,IAAI,GAAG,CAAC,MAAM,KAAK,GAAG,EAAE;AACtB,YAAA,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE;gBACrB,IAAI,CAAC,0BAA0B,EAAE;YACnC;QACF;aAAO;YACL,IAAI,CAAC,6BAA6B,EAAE;QACtC;AAEA,QAAA,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE;IACtB;AAEA;;AAEG;IACH,MAAM,kBAAkB,CACtB,MAAA,GAAiB,EAAE,cAAc,EAAE,IAAI,EAAE,EAAA;AAEzC,QAAA,MAAM,KAAK,GAAG;AACZ,YAAA,QAAQ,EAAE;AACR,gBAAA,KAAK,EAAE;oBACL,EAAE,KAAK,EAAE,kBAAkB,EAAE;AAC7B,oBAAA;wBACE,IAAI,EAAE,EAAE,IAAI,EAAE,CAAC,wBAAwB,EAAE,oBAAoB,EAAE,qBAAqB,CAAC;AACtF;AACF;AACF,aAAA;AACD,YAAA,SAAS,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE;SACxB;AACD,QAAA,MAAM,mBAAmB,GAAG,MAAM,IAAI,CAAC,gBAAgB,CAAC,SAAS,CAAC,KAAK,EAAE,MAAM,CAAC;AAChF,QAAA,MAAM,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,mBAAmB;AAEzC,QAAA,IAAI,GAAG,CAAC,MAAM,KAAK,GAAG,EAAE;AACtB,YAAA,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE;gBACrB,IAAI,CAAC,2BAA2B,EAAE;YACpC;QACF;aAAO;YACL,IAAI,CAAC,8BAA8B,EAAE;QACvC;AAEA,QAAA,OAAO,mBAAmB;IAC5B;AAEA;;AAEG;IACH,MAAM,QAAQ,CAAC,YAAwC,EAAA;AACrD,QAAA,MAAM,OAAO,GAAkB;AAC7B,YAAA,MAAM,EAAE,MAAM;YACd,OAAO,EAAE,IAAI,CAAC,OAAO;AACrB,YAAA,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,YAAY;SAClC;AAED,QAAA,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,eAAe,EAAE,OAAO,CAAC;AAClE,QAAA,MAAM,IAAI,GAAG,MAAM,GAAG,CAAC,IAAI,EAAE;AAE7B,QAAA,IAAI,GAAG,CAAC,MAAM,KAAK,GAAG,EAAE;AACtB,YAAA,IAAI,CAAC,sBAAsB,CAAC,IAAI,CAAC;QACnC;AAEA,QAAA,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE;IACtB;AAEA;;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;IACH;AAEQ,IAAA,MAAM,gCAAgC,GAAA;AAC5C,QAAA,MAAM,KAAK,GAAG,IAAI,KAAK,EAAE;AACzB,QAAA,KAAK,CAAC,IAAI,GAAG,iBAAiB,CAAC,2BAA2B;QAE1D,IAAI,MAAM,IAAI,CAAC,QAAQ,CAAC,sBAAsB,CAAC,gBAAgB,CAAC,EAAE;AAChE,YAAA,KAAK,CAAC,OAAO,GAAG,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAC3C,OAAO,CACL,CAAA,oKAAA,CAAsK,CACvK,EACD;AACE,gBAAA,IAAI,EAAE;AACP,aAAA,CACF;QACH;aAAO;AACL,YAAA,KAAK,CAAC,OAAO,GAAG,OAAO,CACrB,4FAA4F,CAC7F;QACH;AAEA,QAAA,MAAM,KAAK;IACb;AAEQ,IAAA,8BAA8B,CAAC,IAAyB,EAAA;AAC9D,QAAA,MAAM,KAAK,GAAG,IAAI,KAAK,EAAE;AACzB,QAAA,KAAK,CAAC,IAAI,GAAG,iBAAiB,CAAC,yBAAyB;AACxD,QAAA,KAAK,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO;AAC5B,QAAA,MAAM,KAAK;IACb;IAEQ,6BAA6B,GAAA;AACnC,QAAA,MAAM,KAAK,GAAG,IAAI,KAAK,EAAE;AACzB,QAAA,KAAK,CAAC,IAAI,GAAG,iBAAiB,CAAC,wBAAwB;AACvD,QAAA,KAAK,CAAC,OAAO,GAAG,OAAO,CACrB,4FAA4F,CAC7F;AACD,QAAA,MAAM,KAAK;IACb;IAEQ,wCAAwC,GAAA;AAC9C,QAAA,MAAM,WAAW,GAAG,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,aAAa,EAAE,gBAAgB,CAAC;AAC5E,QAAA,MAAM,KAAK,GAAG,IAAI,KAAK,EAAE;AACzB,QAAA,KAAK,CAAC,IAAI,GAAG,iBAAiB,CAAC,mCAAmC;AAClE,QAAA,KAAK,CAAC,OAAO,GAAG,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAC3C,OAAO,CACL,CAAA,0OAAA,CAA4O,CAC7O,EACD;YACE;AACD,SAAA,CACF;AACD,QAAA,MAAM,KAAK;IACb;IAEQ,6BAA6B,GAAA;AACnC,QAAA,MAAM,KAAK,GAAG,IAAI,KAAK,EAAE;AACzB,QAAA,KAAK,CAAC,IAAI,GAAG,iBAAiB,CAAC,wBAAwB;AACvD,QAAA,KAAK,CAAC,OAAO,GAAG,OAAO,CAAC,wDAAwD,CAAC;AACjF,QAAA,MAAM,KAAK;IACb;IAEQ,0BAA0B,GAAA;AAChC,QAAA,MAAM,KAAK,GAAG,IAAI,KAAK,EAAE;AACzB,QAAA,KAAK,CAAC,IAAI,GAAG,iBAAiB,CAAC,qBAAqB;AACpD,QAAA,KAAK,CAAC,OAAO,GAAG,OAAO,CACrB,8EAA8E,CAC/E;AACD,QAAA,MAAM,KAAK;IACb;IAEQ,8BAA8B,GAAA;AACpC,QAAA,MAAM,KAAK,GAAG,IAAI,KAAK,EAAE;AACzB,QAAA,KAAK,CAAC,IAAI,GAAG,iBAAiB,CAAC,yBAAyB;AACxD,QAAA,KAAK,CAAC,OAAO,GAAG,OAAO,CAAC,kCAAkC,CAAC;AAC3D,QAAA,MAAM,KAAK;IACb;IAEQ,2BAA2B,GAAA;AACjC,QAAA,MAAM,KAAK,GAAG,IAAI,KAAK,EAAE;AACzB,QAAA,KAAK,CAAC,IAAI,GAAG,iBAAiB,CAAC,sBAAsB;AACrD,QAAA,KAAK,CAAC,OAAO,GAAG,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAC3C,OAAO,CACL,CAAA,2GAAA,CAA6G,CAC9G,EACD;AACE,YAAA,IAAI,EAAE;AACP,SAAA,CACF;AACD,QAAA,MAAM,KAAK;IACb;AAEQ,IAAA,sBAAsB,CAAC,IAAyB,EAAA;AACtD,QAAA,MAAM,KAAK,GAAG,IAAI,KAAK,EAAE;AACzB,QAAA,KAAK,CAAC,IAAI,GAAG,iBAAiB,CAAC,iBAAiB;AAChD,QAAA,KAAK,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO;AAC5B,QAAA,MAAM,KAAK;IACb;+GA3PW,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,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,eAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAAjC,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,iCAAiC,cADpB,MAAM,EAAA,CAAA,CAAA;;4FACnB,iCAAiC,EAAA,UAAA,EAAA,CAAA;kBAD7C,UAAU;mBAAC,EAAE,UAAU,EAAE,MAAM,EAAE;;;MCwBrB,mCAAmC,CAAA;AA+L9C,IAAA,WAAA,CACS,UAAsB,EACrB,mBAAsD,EACtD,gBAAkC,EAAA;QAFnC,IAAA,CAAA,UAAU,GAAV,UAAU;QACT,IAAA,CAAA,mBAAmB,GAAnB,mBAAmB;QACnB,IAAA,CAAA,gBAAgB,GAAhB,gBAAgB;AAhM1B,QAAA,IAAA,CAAA,sBAAsB,GAAG;AACvB,YAAA,IAAI,EAAE,OAAO,CAAC,UAAU;SACzB;AACD,QAAA,IAAA,CAAA,eAAe,GAAG;AAChB,YAAA,MAAM,EAAE,OAAO,CAAC,OAAO;SACxB;QAED,IAAA,CAAA,KAAK,GAAkB,aAAa;AACpC,QAAA,IAAA,CAAA,OAAO,GAAG,IAAI,eAAe,CAAU,EAAE,CAAC;AAC1C,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;AAED,QAAA,IAAA,CAAA,YAAY,GAAG,IAAI,CAAC,eAAe,EAAE;AACrC,QAAA,IAAA,CAAA,gBAAgB,GAAG,IAAI,CAAC,mBAAmB,EAAE;AAC7C,QAAA,IAAA,CAAA,YAAY,GAAkB,IAAI,OAAO,EAAE;QAC3C,IAAA,CAAA,KAAK,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,iBAAiB,CAAC,2BAA2B,EAClE;AACA,gBAAA,OAAO,EAAE,CAAC,CAAC,WAAW,CAAC,CAAC;YAC1B;AAEA,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;AACnE,aAAA,CAAC;QACJ,CAAC,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;AAED,QAAA,IAAA,CAAA,IAAI,GAAG,IAAI,SAAS,CAAC,EAAE,CAAC;QACxB,IAAA,CAAA,KAAK,GAAG,EAAgC;;AAGxC,QAAA,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;AACzB;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;AAC1C,iBAAA;AACD,gBAAA,KAAK,EAAE;oBACL,MAAM,EAAE,KAAK,IAAG;wBACd,MAAM,iBAAiB,GAAG,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,YAAY,CAAC;AACtD,wBAAA,iBAAiB,CAAC;6BACf,IAAI,CACH,SAAS,CAAC,IAAI,CAAC,YAAY,CAAC,EAC5B,QAAQ,CAAC,CAAC,EAAE,IAAI,EAAE,KAAK,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,CAAC;6BAEtD,SAAS,CACR,QAAQ,IAAG;4BACT,KAAK,CAAC,eAAe,CAAC,aAAa,GAAG,EAAE,CAAC,QAAQ,CAAC;AAClD,4BAAA,KAAK,CAAC,WAAW,CAAC,QAAQ,CAAC,IAAI,CAAC;wBAClC,CAAC,EACD,KAAK,IAAG;AACN,4BAAA,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC,SAAS,CAAC,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC;4BAClE,KAAK,CAAC,UAAU,CAAC,aAAa,CAAC,OAAO,GAAG,KAAK,CAAC,OAAO;AACxD,wBAAA,CAAC,CACF;oBACL;AACD,iBAAA;AACD,gBAAA,UAAU,EAAE;AACV,oBAAA,aAAa,EAAE;AACb,wBAAA,UAAU,EAAE,CAAC,OAAwB,KAAI;AACvC,4BAAA,OAAO,OAAO,CAAC,MAAM,KAAK,OAAO;wBACnC,CAAC;AACD,wBAAA,OAAO,EAAE,MAAM;AAChB;AACF;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;AAC/B;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;AACV,iBAAA;AACD,gBAAA,UAAU,EAAE;AACV,oBAAA,QAAQ,EAAE;AACR,wBAAA,OAAO,EAAE,OAAO,CAAC,8CAA8C;AAChE;AACF;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;AACV,iBAAA;AACD,gBAAA,UAAU,EAAE;AACV,oBAAA,QAAQ,EAAE;AACR,wBAAA,OAAO,EAAE,OAAO,CAAC,8CAA8C;AAChE;AACF;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;AACV,iBAAA;AACD,gBAAA,UAAU,EAAE;AACV,oBAAA,QAAQ,EAAE;AACR,wBAAA,OAAO,EAAE,OAAO,CAAC,8CAA8C;AAChE;AACF;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;AAC/E,iBAAA;AACD,gBAAA,KAAK,EAAE;oBACL,MAAM,EAAE,KAAK,IAAG;wBACd,MAAM,iBAAiB,GAAG,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,YAAY,CAAC;AACtD,wBAAA,iBAAiB,CAAC;6BACf,IAAI,CACH,SAAS,CAAC,IAAI,CAAC,YAAY,CAAC,EAC5B,QAAQ,CAAC,CAAC,EAAE,IAAI,EAAE,KAAK,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,CAAC;6BAEzD,SAAS,CACR,QAAQ,IAAG;4BACT,KAAK,CAAC,eAAe,CAAC,aAAa,GAAG,EAAE,CAAC,QAAQ,CAAC;AAClD,4BAAA,KAAK,CAAC,WAAW,CAAC,QAAQ,CAAC,IAAI,CAAC;wBAClC,CAAC,EACD,KAAK,IAAG;AACN,4BAAA,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,kBAAkB,CAAC,CAAC,SAAS,CAAC,EAAE,gBAAgB,EAAE,IAAI,EAAE,CAAC;4BACxE,KAAK,CAAC,UAAU,CAAC,gBAAgB,CAAC,OAAO,GAAG,KAAK,CAAC,OAAO;AAC3D,wBAAA,CAAC,CACF;oBACL;AACD,iBAAA;AACD,gBAAA,UAAU,EAAE;AACV,oBAAA,gBAAgB,EAAE;AAChB,wBAAA,UAAU,EAAE,CAAC,OAAwB,KAAI;AACvC,4BAAA,OAAO,OAAO,CAAC,MAAM,KAAK,OAAO;wBACnC,CAAC;AACD,wBAAA,OAAO,EAAE,MAAM;AAChB;AACF;AACF;SACF;AAOC,QAAA,IAAI,CAAC,KAAK,CAAC,SAAS,CAClB,MAAK;AACH,YAAA,IAAI,CAAC,KAAK,GAAG,aAAa;QAC5B,CAAC,EACD,MAAM,IAAG;AACP,YAAA,IAAI,CAAC,KAAK,GAAG,WAAW;AACxB,YAAA,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC;AAC3B,QAAA,CAAC,CACF;IACH;AAEA,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;IACH;AAEA,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;IACjG;IAEA,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;IAC9F;IAEA,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;IAC1F;IAEA,MAAM,QAAQ,CAAC,KAA6C,EAAA;AAC1D,QAAA,KAAK,CAAC,OAAO,CAAC,IAAI,EAAE;AACpB,QAAA,IAAI,CAAC,KAAK,GAAG,qBAAqB;AAClC,QAAA,IAAI;AACF,YAAA,MAAM,cAAc,GAAG,IAAI,CAAC,uBAAuB,EAAE;YACrD,MAAM,IAAI,CAAC,mBAAmB,CAAC,QAAQ,CAAC,cAAc,CAAC;AACvD,YAAA,IAAI,CAAC,KAAK,GAAG,qBAAqB;YAClC,IAAI,CAAC,gBAAgB,CAAC,YAAY,CAAC,wCAAwC,CAAC,KAAK,EAAE;AACjF,gBAAA,MAAM,EAAE,wCAAwC,CAAC,MAAM,CAAC,OAAO;gBAC/D,SAAS,EAAE,wCAAwC,CAAC;AACrD,aAAA,CAAC;QACJ;QAAE,OAAO,KAAK,EAAE;AACd,YAAA,IAAI,CAAC,KAAK,GAAG,mBAAmB;YAChC,IAAI,CAAC,gBAAgB,CAAC,YAAY,CAAC,wCAAwC,CAAC,KAAK,EAAE;AACjF,gBAAA,MAAM,EAAE,wCAAwC,CAAC,MAAM,CAAC,OAAO;gBAC/D,SAAS,EAAE,wCAAwC,CAAC;AACrD,aAAA,CAAC;YACF,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC;QAC5B;IACF;IAEA,uBAAuB,GAAA;QACrB,MAAM,cAAc,GAA+B,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC;QACxE,cAAc,CAAC,iBAAiB,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,IAAI;QAC7D,OAAQ,cAAsB,CAAC,UAAU;AACzC,QAAA,OAAO,cAAc;IACvB;IACA,WAAW,GAAA;AACT,QAAA,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE;AACxB,QAAA,IAAI,CAAC,YAAY,CAAC,QAAQ,EAAE;IAC9B;+GA/PW,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;mGAAnC,mCAAmC,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,2BAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECvDhD,6+GA6GA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EDrEI,cAAc,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,EACd,aAAa,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACb,IAAI,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACJ,gBAAgB,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,CAAA,QAAA,EAAA,UAAA,EAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAChB,UAAU,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,EACV,OAAO,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,UAAA,EAAA,IAAA,EACP,YAAY,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,UAAA,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,OAAA,EAAA,QAAA,EAAA,SAAA,CAAA,EAAA,OAAA,EAAA,CAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACZ,iBAAiB,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,EACjB,wBAAwB,EAAA,QAAA,EAAA,sBAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,MAAA,EAAA,MAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACxB,KAAK,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,cAAA,EAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACL,OAAO,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EACP,gBAAgB,EAAA,IAAA,EAAA,WAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAChB,SAAS,EAAA,IAAA,EAAA,OAAA,EAAA,CAAA,EAAA,CAAA,CAAA;;4FAGA,mCAAmC,EAAA,UAAA,EAAA,CAAA;kBAnB/C,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,2BAA2B,EAAA,OAAA,EAE5B;wBACP,cAAc;wBACd,aAAa;wBACb,IAAI;wBACJ,gBAAgB;wBAChB,UAAU;wBACV,OAAO;wBACP,YAAY;wBACZ,iBAAiB;wBACjB,wBAAwB;wBACxB,KAAK;wBACL,OAAO;wBACP,gBAAgB;wBAChB;AACD,qBAAA,EAAA,QAAA,EAAA,6+GAAA,EAAA;;;ME3CU,yCAAyC,CAAA;AACpD,IAAA,WAAA,CAAoB,YAA4B,EAAA;QAA5B,IAAA,CAAA,YAAY,GAAZ,YAAY;IAAmB;IAEnD,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;AACtB,SAAA,CAAC;IACJ;+GAVW,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,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,yCAAyC,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,kCAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECVtD,qLAIA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EDIY,aAAa,sEAAE,gBAAgB,EAAA,IAAA,EAAA,WAAA,EAAA,CAAA,EAAA,CAAA,CAAA;;4FAE9B,yCAAyC,EAAA,UAAA,EAAA,CAAA;kBALrD,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,kCAAkC,EAAA,OAAA,EAEnC,CAAC,aAAa,EAAE,gBAAgB,CAAC,EAAA,QAAA,EAAA,qLAAA,EAAA;;;MED/B,iCAAiC,CAAA;AAC5C,IAAA,WAAA,CAAoB,aAA8B,EAAA;QAA9B,IAAA,CAAA,aAAa,GAAb,aAAa;IAAoB;IAErD,GAAG,GAAA;QACD,MAAM,OAAO,GAAyB,EAAE;QACxC,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;AACW,aAAA,CAAC;QAC1B;AACA,QAAA,OAAO,OAAO;IAChB;+GAbW,iCAAiC,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAA,EAAA,CAAA,eAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAAjC,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,iCAAiC,cAFhC,MAAM,EAAA,CAAA,CAAA;;4FAEP,iCAAiC,EAAA,UAAA,EAAA,CAAA;kBAH7C,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,UAAU,EAAE;AACb,iBAAA;;;MCcY,gCAAgC,CAAA;+GAAhC,gCAAgC,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,QAAA,EAAA,CAAA,CAAA;AAAhC,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,gCAAgC,YAVzC,UAAU;YACV,YAAY;YACZ,yCAAyC;YACzC,mCAAmC,CAAA,EAAA,CAAA,CAAA;AAO1B,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,gCAAgC,EAAA,SAAA,EALhC;YACT,iCAAiC;YACjC,sBAAsB,CAAC,iCAAiC;AACzD,SAAA,EAAA,OAAA,EAAA,CARC,UAAU;YACV,YAAY;YAEZ,mCAAmC,CAAA,EAAA,CAAA,CAAA;;4FAO1B,gCAAgC,EAAA,UAAA,EAAA,CAAA;kBAZ5C,QAAQ;AAAC,YAAA,IAAA,EAAA,CAAA;AACR,oBAAA,OAAO,EAAE;wBACP,UAAU;wBACV,YAAY;wBACZ,yCAAyC;wBACzC;AACD,qBAAA;AACD,oBAAA,SAAS,EAAE;wBACT,iCAAiC;wBACjC,sBAAsB,CAAC,iCAAiC;AACzD;AACF,iBAAA;;;ACnBD;;AAEG;;;;"}