{"version":3,"file":"main-class-mvvm-view.mjs","sources":["../../../../projects/main-class/mvvm/view/src/abstract-detail-component.ts","../../../../projects/main-class/mvvm/view/src/attach-form-transformer.ts","../../../../projects/main-class/mvvm/view/src/abstract-form-component.directive.ts","../../../../projects/main-class/mvvm/view/src/abstract-list.component.ts","../../../../projects/main-class/mvvm/view/index.ts","../../../../projects/main-class/mvvm/view/main-class-mvvm-view.ts"],"sourcesContent":["import {Directive, inject, OnInit} from '@angular/core';\nimport {ActivatedRoute} from '@angular/router';\nimport {lastValueFrom} from 'rxjs';\nimport {AbstractDetailViewmodel} from '@main-class/mvvm/viewmodel';\nimport {LoaderService} from '@main-class/componentes/loader';\n\nexport interface DetailComponentConfig {\n  idParamName?: string;\n}\n\n@Directive({})\nexport abstract class AbstractDetailComponent<ENTITY> implements OnInit {\n\n  abstract get viewmodel(): AbstractDetailViewmodel<ENTITY>\n\n  protected activatedRoute = inject(ActivatedRoute);\n\n  protected loaderService = inject(LoaderService);\n\n  protected config?: DetailComponentConfig;\n\n  entity?: ENTITY;\n\n  ngOnInit() {\n    this.activatedRoute.params.subscribe(params => {\n      this.detail(params[this.config?.idParamName || 'id']);\n    });\n  }\n\n  protected async detail(id: string) {\n    this.entity = await lastValueFrom(\n      this.loaderService.listen(this.viewmodel.get(id))\n    );\n  }\n}\n","// form-trimmer.util.ts\nimport {AbstractControl, FormArray, FormControl, FormGroup} from '@angular/forms';\nimport {Subscription} from 'rxjs';\nimport {debounceTime} from 'rxjs/operators';\n\n/**\n * Anexa um \"transformer\" global ao FormGroup.\n * - Percorre recursivamente FormGroup/FormArray/FormControl\n * - Aplica .trim() apenas em strings de FormControls\n * - Usa debounceTime para não atrapalhar a digitação\n * - Retorna a Subscription para você descartar no OnDestroy\n */\nexport function attachFormTransformer(\n  form: FormGroup,\n  delayMs: number = 800,\n  upperCase = false,\n  removeSpecialCharacters = false,\n): Subscription {\n  const sub = form.valueChanges\n    .pipe(debounceTime(delayMs))\n    .subscribe(() => {\n      trimTree(form);\n    });\n\n  // Opcional: normaliza valores iniciais (sem debounce)\n  trimTree(form, upperCase, removeSpecialCharacters);\n\n  return sub;\n}\n\nfunction trimTree(control: AbstractControl, upperCase = false, removeSpecialCharacters = false): void {\n  if (control instanceof FormGroup) {\n    const controls = control.controls;\n    for (const key of Object.keys(controls)) {\n      trimTree(controls[key], upperCase, removeSpecialCharacters);\n    }\n    return;\n  }\n\n  if (control instanceof FormArray) {\n    control.controls.forEach(child => trimTree(child, upperCase, removeSpecialCharacters));\n    return;\n  }\n\n  // Folha: FormControl\n  if (control instanceof FormControl) {\n    const val = control.value;\n    // Só processa strings. Não confundir com objetos usados como valor!\n    if (typeof val === 'string') {\n      let transformed = trimEdges(val);\n\n      if (upperCase) {\n        transformed = transformed.toUpperCase();\n      }\n\n      if (removeSpecialCharacters) {\n        transformed = transformed.normalize('NFD')\n          .replace(/[\\u0300-\\u036f]/g, '') // Remove diacritics\n          .replace(/[^\\w\\s-]/g, ''); // Remove remaining special chars except word chars, spaces, and hyphens\n      }\n\n      if (transformed !== val) {\n        control.setValue(transformed, {emitEvent: false});\n      }\n    }\n  }\n}\n\n/** Remove somente espaços das pontas; mantém espaços internos. */\nfunction trimEdges(s: string): string {\n  // .trim() já resolve, mas a regex deixa explícito o objetivo:\n  return s.replace(/^\\s+|\\s+$/g, '');\n}\n","import {FormBuilder, FormGroup} from '@angular/forms';\nimport {ActivatedRoute, Router} from '@angular/router';\nimport {Directive, inject, OnInit} from '@angular/core';\nimport {lastValueFrom} from 'rxjs';\nimport {FormViewModel} from '@main-class/mvvm/viewmodel';\nimport {LoaderService} from '@main-class/componentes/loader';\nimport {MensageriaService} from '@main-class/componentes/core';\nimport {attachFormTransformer} from './attach-form-transformer';\n\nexport interface FormComponentConfig {\n  idParamName?: string;\n  formTransformation?: {\n    delay?: number,\n    upperCase?: boolean,\n    removeSpecialCharacters?: boolean,\n  };\n}\n\n@Directive({})\nexport abstract class AbstractFormComponent<I, O> implements OnInit {\n\n  protected abstract get viewmodel(): FormViewModel<I, O>;\n\n  public abstract get form(): FormGroup;\n\n  protected fb = inject(FormBuilder);\n\n  protected router = inject(Router);\n\n  protected activatedRoute = inject(ActivatedRoute);\n\n  protected loaderService = inject(LoaderService);\n\n  protected mensageriaService = inject(MensageriaService);\n\n  protected config?: FormComponentConfig;\n\n  ngOnInit() {\n    this.activatedRoute.params.subscribe(params => {\n      const id = params[this.config?.idParamName || 'id'];\n\n      if (!!this.viewmodel.find && !!id) {\n        this.loaderService.listen(\n          this.viewmodel.find(id)\n        ).subscribe(value => this.applyFormValue(id, value));\n      }\n    });\n\n    attachFormTransformer(\n      this.form,\n      this.config?.formTransformation?.delay || 5000,\n      this.config?.formTransformation?.upperCase || false,\n      this.config?.formTransformation?.removeSpecialCharacters || false\n    );\n  }\n\n  get edicao() {\n    return !!this.activatedRoute.snapshot.params[this.config?.idParamName || 'id'];\n  }\n\n  protected applyFormValue(id: any, output: O) {\n    this.form.patchValue(output as any);\n  }\n\n  async confirmacao(): Promise<boolean> {\n    return true;\n  }\n\n  onSuccess(output: O) {\n  }\n\n  onError() {\n\n  }\n\n  async submit() {\n    if (this.form.valid) {\n      try {\n        if (await this.confirmacao()) {\n          const output = await lastValueFrom(\n            this.loaderService.listen(\n              this.viewmodel.submit({\n                ...this.form.value,\n                id: this.activatedRoute.snapshot.params[this.config?.idParamName || 'id'],\n              } as I)\n            )\n          );\n\n          this.onSuccess(output);\n        }\n      } catch (ex) {\n        this.onError();\n\n        throw ex;\n      }\n    }\n  }\n\n}\n\n@Directive({})\nexport abstract class AbstractModelFormComponent<T> extends AbstractFormComponent<T, T> {\n\n  override onSuccess(output: T) {\n    this.mensageriaService.addMensagem('O registro foi salvo com sucesso.');\n\n    this.router.navigate(['../'], {\n      relativeTo: this.activatedRoute\n    });\n  }\n\n}\n\n@Directive({})\nexport abstract class AbstractCrudFormComponent<ENTITY, CREATE, UPDATE> extends AbstractFormComponent<CREATE | UPDATE, ENTITY> {\n\n\n  override onSuccess(output: ENTITY) {\n    this.mensageriaService.addMensagem('O registro foi salvo com sucesso.');\n\n    this.router.navigate(['../'], {\n      relativeTo: this.activatedRoute\n    });\n  }\n\n}\n","import {Component, inject, OnInit, ViewChild} from '@angular/core';\nimport {Router} from '@angular/router';\nimport {lastValueFrom} from 'rxjs';\nimport {AbstractListViewmodel} from '@main-class/mvvm/viewmodel';\nimport {NumericQueryPagination, Query, UndefinedQueryPagination} from '@main-class/mvvm/model';\nimport {LoaderService} from '@main-class/componentes/loader';\nimport {DialogService} from '@main-class/componentes/dialog';\nimport {NumericPaginationEvent, Page, PaginatedTableComponent, UndefinedPaginationEvent} from '@main-class/componentes/table';\n\n\n@Component({\n  template: ''\n})\nexport abstract class AbstractListComponent<QUERY extends Query<NumericQueryPagination | UndefinedQueryPagination>, ENTITY> implements OnInit {\n  protected abstract get viewmodel(): AbstractListViewmodel<QUERY, ENTITY>;\n\n  protected router = inject(Router);\n\n  protected dialogService = inject(DialogService);\n\n  protected loaderService = inject(LoaderService);\n\n  protected currentQuery: QUERY = {} as any;\n\n  page?: Page<ENTITY>;\n\n  @ViewChild(PaginatedTableComponent) table!: PaginatedTableComponent<ENTITY>;\n\n  private queryTimeout: any;\n\n  ngOnInit() {\n    this.query();\n  }\n\n  query(query?: QUERY) {\n    this.currentQuery = query || {...(this.currentQuery || {} as any), pagination: undefined};\n    clearTimeout(this.queryTimeout);\n    this.queryTimeout = setTimeout(() => {\n      this.table.loadingAround(\n        this.viewmodel.query(this.currentQuery!)\n      ).subscribe(page => {\n        this.page = page;\n      });\n    }, 300);\n  }\n\n  paginate(event: NumericPaginationEvent | UndefinedPaginationEvent) {\n    let pagination: NumericQueryPagination | UndefinedQueryPagination;\n\n    if (event.type === 'undefined') {\n      pagination = {\n        type: 'undefined',\n        size: event.size,\n      };\n\n      if (event.action === 'first') {\n        pagination.startAfter = 'first';\n      } else if (event.action === 'last') {\n        pagination.endBefore = 'last';\n      } else if (this.page?.pagination?.type === 'undefined') {\n        if (event.action === 'next') {\n          pagination.startAfter = this.page.pagination.nextPageRef;\n        } else if (event.action === 'previous') {\n          pagination.endBefore = this.page.pagination.previousPageRef;\n        }\n      }\n    } else {\n      pagination = {\n        type: 'numeric',\n        size: event.size,\n        page: event.page\n      };\n    }\n\n    // this.router.navigate(['./'], {\n    //   relativeTo: this.activatedRoute,\n    //   queryParams: {\n    //     ...this.activatedRoute.snapshot.queryParams,\n    //     pagination: btoa(JSON.stringify(pagination)),\n    //   },\n    // });\n    this.query({\n      ...(this.currentQuery || {}) as any,\n      pagination,\n    });\n  }\n\n  async remove(id: any) {\n    const confirmacao = await lastValueFrom(\n      this.dialogService.confirma('mcl.consulta.confirma-remocao')\n    );\n\n    if (confirmacao) {\n      await lastValueFrom(this.loaderService.listen(this.viewmodel.delete(id)));\n\n      this.query();\n    }\n  }\n\n}\n","/*\n * Public API Surface of mvvm\n */\n\nexport * from './src/abstract-detail-component';\nexport * from './src/abstract-form-component.directive';\nexport * from './src/abstract-list.component';\nexport * from './src/attach-form-transformer';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":";;;;;;;;;;;MAWsB,uBAAuB,CAAA;AAIjC,IAAA,cAAc,GAAG,MAAM,CAAC,cAAc,CAAC;AAEvC,IAAA,aAAa,GAAG,MAAM,CAAC,aAAa,CAAC;AAErC,IAAA,MAAM;AAEhB,IAAA,MAAM;IAEN,QAAQ,GAAA;QACN,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,SAAS,CAAC,MAAM,IAAG;AAC5C,YAAA,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,EAAE,WAAW,IAAI,IAAI,CAAC,CAAC;AACvD,SAAC,CAAC;;IAGM,MAAM,MAAM,CAAC,EAAU,EAAA;QAC/B,IAAI,CAAC,MAAM,GAAG,MAAM,aAAa,CAC/B,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAClD;;uGArBiB,uBAAuB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;2FAAvB,uBAAuB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA;;2FAAvB,uBAAuB,EAAA,UAAA,EAAA,CAAA;kBAD5C,SAAS;mBAAC,EAAE;;;ACVb;AAKA;;;;;;AAMG;AACa,SAAA,qBAAqB,CACnC,IAAe,EACf,OAAkB,GAAA,GAAG,EACrB,SAAS,GAAG,KAAK,EACjB,uBAAuB,GAAG,KAAK,EAAA;AAE/B,IAAA,MAAM,GAAG,GAAG,IAAI,CAAC;AACd,SAAA,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC;SAC1B,SAAS,CAAC,MAAK;QACd,QAAQ,CAAC,IAAI,CAAC;AAChB,KAAC,CAAC;;AAGJ,IAAA,QAAQ,CAAC,IAAI,EAAE,SAAS,EAAE,uBAAuB,CAAC;AAElD,IAAA,OAAO,GAAG;AACZ;AAEA,SAAS,QAAQ,CAAC,OAAwB,EAAE,SAAS,GAAG,KAAK,EAAE,uBAAuB,GAAG,KAAK,EAAA;AAC5F,IAAA,IAAI,OAAO,YAAY,SAAS,EAAE;AAChC,QAAA,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ;QACjC,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE;YACvC,QAAQ,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,SAAS,EAAE,uBAAuB,CAAC;;QAE7D;;AAGF,IAAA,IAAI,OAAO,YAAY,SAAS,EAAE;AAChC,QAAA,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC,KAAK,IAAI,QAAQ,CAAC,KAAK,EAAE,SAAS,EAAE,uBAAuB,CAAC,CAAC;QACtF;;;AAIF,IAAA,IAAI,OAAO,YAAY,WAAW,EAAE;AAClC,QAAA,MAAM,GAAG,GAAG,OAAO,CAAC,KAAK;;AAEzB,QAAA,IAAI,OAAO,GAAG,KAAK,QAAQ,EAAE;AAC3B,YAAA,IAAI,WAAW,GAAG,SAAS,CAAC,GAAG,CAAC;YAEhC,IAAI,SAAS,EAAE;AACb,gBAAA,WAAW,GAAG,WAAW,CAAC,WAAW,EAAE;;YAGzC,IAAI,uBAAuB,EAAE;AAC3B,gBAAA,WAAW,GAAG,WAAW,CAAC,SAAS,CAAC,KAAK;AACtC,qBAAA,OAAO,CAAC,kBAAkB,EAAE,EAAE,CAAC;AAC/B,qBAAA,OAAO,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC;;AAG9B,YAAA,IAAI,WAAW,KAAK,GAAG,EAAE;gBACvB,OAAO,CAAC,QAAQ,CAAC,WAAW,EAAE,EAAC,SAAS,EAAE,KAAK,EAAC,CAAC;;;;AAIzD;AAEA;AACA,SAAS,SAAS,CAAC,CAAS,EAAA;;IAE1B,OAAO,CAAC,CAAC,OAAO,CAAC,YAAY,EAAE,EAAE,CAAC;AACpC;;MCrDsB,qBAAqB,CAAA;AAM/B,IAAA,EAAE,GAAG,MAAM,CAAC,WAAW,CAAC;AAExB,IAAA,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC;AAEvB,IAAA,cAAc,GAAG,MAAM,CAAC,cAAc,CAAC;AAEvC,IAAA,aAAa,GAAG,MAAM,CAAC,aAAa,CAAC;AAErC,IAAA,iBAAiB,GAAG,MAAM,CAAC,iBAAiB,CAAC;AAE7C,IAAA,MAAM;IAEhB,QAAQ,GAAA;QACN,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,SAAS,CAAC,MAAM,IAAG;AAC5C,YAAA,MAAM,EAAE,GAAG,MAAM,CAAC,IAAI,CAAC,MAAM,EAAE,WAAW,IAAI,IAAI,CAAC;AAEnD,YAAA,IAAI,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,IAAI,CAAC,CAAC,EAAE,EAAE;AACjC,gBAAA,IAAI,CAAC,aAAa,CAAC,MAAM,CACvB,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC,CACxB,CAAC,SAAS,CAAC,KAAK,IAAI,IAAI,CAAC,cAAc,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC;;AAExD,SAAC,CAAC;AAEF,QAAA,qBAAqB,CACnB,IAAI,CAAC,IAAI,EACT,IAAI,CAAC,MAAM,EAAE,kBAAkB,EAAE,KAAK,IAAI,IAAI,EAC9C,IAAI,CAAC,MAAM,EAAE,kBAAkB,EAAE,SAAS,IAAI,KAAK,EACnD,IAAI,CAAC,MAAM,EAAE,kBAAkB,EAAE,uBAAuB,IAAI,KAAK,CAClE;;AAGH,IAAA,IAAI,MAAM,GAAA;AACR,QAAA,OAAO,CAAC,CAAC,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,EAAE,WAAW,IAAI,IAAI,CAAC;;IAGtE,cAAc,CAAC,EAAO,EAAE,MAAS,EAAA;AACzC,QAAA,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,MAAa,CAAC;;AAGrC,IAAA,MAAM,WAAW,GAAA;AACf,QAAA,OAAO,IAAI;;AAGb,IAAA,SAAS,CAAC,MAAS,EAAA;;IAGnB,OAAO,GAAA;;AAIP,IAAA,MAAM,MAAM,GAAA;AACV,QAAA,IAAI,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE;AACnB,YAAA,IAAI;AACF,gBAAA,IAAI,MAAM,IAAI,CAAC,WAAW,EAAE,EAAE;AAC5B,oBAAA,MAAM,MAAM,GAAG,MAAM,aAAa,CAChC,IAAI,CAAC,aAAa,CAAC,MAAM,CACvB,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC;AACpB,wBAAA,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK;AAClB,wBAAA,EAAE,EAAE,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,EAAE,WAAW,IAAI,IAAI,CAAC;qBACrE,CAAC,CACR,CACF;AAED,oBAAA,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC;;;YAExB,OAAO,EAAE,EAAE;gBACX,IAAI,CAAC,OAAO,EAAE;AAEd,gBAAA,MAAM,EAAE;;;;uGA1EM,qBAAqB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;2FAArB,qBAAqB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA;;2FAArB,qBAAqB,EAAA,UAAA,EAAA,CAAA;kBAD1C,SAAS;mBAAC,EAAE;;AAmFP,MAAgB,0BAA8B,SAAQ,qBAA2B,CAAA;AAE5E,IAAA,SAAS,CAAC,MAAS,EAAA;AAC1B,QAAA,IAAI,CAAC,iBAAiB,CAAC,WAAW,CAAC,mCAAmC,CAAC;QAEvE,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,EAAE;YAC5B,UAAU,EAAE,IAAI,CAAC;AAClB,SAAA,CAAC;;uGAPgB,0BAA0B,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;2FAA1B,0BAA0B,EAAA,YAAA,EAAA,IAAA,EAAA,eAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA;;2FAA1B,0BAA0B,EAAA,UAAA,EAAA,CAAA;kBAD/C,SAAS;mBAAC,EAAE;;AAcP,MAAgB,yBAAkD,SAAQ,qBAA8C,CAAA;AAGnH,IAAA,SAAS,CAAC,MAAc,EAAA;AAC/B,QAAA,IAAI,CAAC,iBAAiB,CAAC,WAAW,CAAC,mCAAmC,CAAC;QAEvE,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,EAAE;YAC5B,UAAU,EAAE,IAAI,CAAC;AAClB,SAAA,CAAC;;uGARgB,yBAAyB,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;2FAAzB,yBAAyB,EAAA,YAAA,EAAA,IAAA,EAAA,eAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA;;2FAAzB,yBAAyB,EAAA,UAAA,EAAA,CAAA;kBAD9C,SAAS;mBAAC,EAAE;;;MCpGS,qBAAqB,CAAA;AAG/B,IAAA,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC;AAEvB,IAAA,aAAa,GAAG,MAAM,CAAC,aAAa,CAAC;AAErC,IAAA,aAAa,GAAG,MAAM,CAAC,aAAa,CAAC;IAErC,YAAY,GAAU,EAAS;AAEzC,IAAA,IAAI;AAEgC,IAAA,KAAK;AAEjC,IAAA,YAAY;IAEpB,QAAQ,GAAA;QACN,IAAI,CAAC,KAAK,EAAE;;AAGd,IAAA,KAAK,CAAC,KAAa,EAAA;AACjB,QAAA,IAAI,CAAC,YAAY,GAAG,KAAK,IAAI,EAAC,IAAI,IAAI,CAAC,YAAY,IAAI,EAAS,CAAC,EAAE,UAAU,EAAE,SAAS,EAAC;AACzF,QAAA,YAAY,CAAC,IAAI,CAAC,YAAY,CAAC;AAC/B,QAAA,IAAI,CAAC,YAAY,GAAG,UAAU,CAAC,MAAK;YAClC,IAAI,CAAC,KAAK,CAAC,aAAa,CACtB,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC,YAAa,CAAC,CACzC,CAAC,SAAS,CAAC,IAAI,IAAG;AACjB,gBAAA,IAAI,CAAC,IAAI,GAAG,IAAI;AAClB,aAAC,CAAC;SACH,EAAE,GAAG,CAAC;;AAGT,IAAA,QAAQ,CAAC,KAAwD,EAAA;AAC/D,QAAA,IAAI,UAA6D;AAEjE,QAAA,IAAI,KAAK,CAAC,IAAI,KAAK,WAAW,EAAE;AAC9B,YAAA,UAAU,GAAG;AACX,gBAAA,IAAI,EAAE,WAAW;gBACjB,IAAI,EAAE,KAAK,CAAC,IAAI;aACjB;AAED,YAAA,IAAI,KAAK,CAAC,MAAM,KAAK,OAAO,EAAE;AAC5B,gBAAA,UAAU,CAAC,UAAU,GAAG,OAAO;;AAC1B,iBAAA,IAAI,KAAK,CAAC,MAAM,KAAK,MAAM,EAAE;AAClC,gBAAA,UAAU,CAAC,SAAS,GAAG,MAAM;;iBACxB,IAAI,IAAI,CAAC,IAAI,EAAE,UAAU,EAAE,IAAI,KAAK,WAAW,EAAE;AACtD,gBAAA,IAAI,KAAK,CAAC,MAAM,KAAK,MAAM,EAAE;oBAC3B,UAAU,CAAC,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,WAAW;;AACnD,qBAAA,IAAI,KAAK,CAAC,MAAM,KAAK,UAAU,EAAE;oBACtC,UAAU,CAAC,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,eAAe;;;;aAG1D;AACL,YAAA,UAAU,GAAG;AACX,gBAAA,IAAI,EAAE,SAAS;gBACf,IAAI,EAAE,KAAK,CAAC,IAAI;gBAChB,IAAI,EAAE,KAAK,CAAC;aACb;;;;;;;;;QAUH,IAAI,CAAC,KAAK,CAAC;AACT,YAAA,IAAI,IAAI,CAAC,YAAY,IAAI,EAAE,CAAQ;YACnC,UAAU;AACX,SAAA,CAAC;;IAGJ,MAAM,MAAM,CAAC,EAAO,EAAA;AAClB,QAAA,MAAM,WAAW,GAAG,MAAM,aAAa,CACrC,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,+BAA+B,CAAC,CAC7D;QAED,IAAI,WAAW,EAAE;AACf,YAAA,MAAM,aAAa,CAAC,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC;YAEzE,IAAI,CAAC,KAAK,EAAE;;;uGAlFI,qBAAqB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;2FAArB,qBAAqB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,cAAA,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,OAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAa9B,uBAAuB,EAAA,WAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAfxB,EAAE,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA;;2FAEQ,qBAAqB,EAAA,UAAA,EAAA,CAAA;kBAH1C,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE;AACX,iBAAA;8BAcqC,KAAK,EAAA,CAAA;sBAAxC,SAAS;uBAAC,uBAAuB;;;AC1BpC;;AAEG;;ACFH;;AAEG;;;;"}