{"version":3,"file":"ngx-t-forms-document-list-label-config-editor.component-DLzba2AQ.mjs","sources":["../../../projects/ngx-t-forms/src/lib/components/t-dynamic-data-edit/elements/document-list-label-config-editor/document-list-label-config-editor.component.ts","../../../projects/ngx-t-forms/src/lib/components/t-dynamic-data-edit/elements/document-list-label-config-editor/document-list-label-config-editor.component.html"],"sourcesContent":["import {\r\n  ChangeDetectionStrategy,\r\n  Component,\r\n  Input,\r\n  ViewEncapsulation,\r\n  computed,\r\n  inject,\r\n  output,\r\n  signal,\r\n} from '@angular/core';\r\nimport { NgControl } from '@angular/forms';\r\nimport { MatAutocompleteModule, MatAutocompleteSelectedEvent } from '@angular/material/autocomplete';\r\nimport { MatButtonModule } from '@angular/material/button';\r\nimport { MatCardModule } from '@angular/material/card';\r\nimport { MatFormFieldControl, MatFormFieldModule } from '@angular/material/form-field';\r\nimport { MatIconModule } from '@angular/material/icon';\r\nimport { MatInputModule } from '@angular/material/input';\r\nimport { MatListModule } from '@angular/material/list';\r\nimport { MatTooltipModule } from '@angular/material/tooltip';\r\nimport { ClipboardModule } from '@angular/cdk/clipboard';\r\nimport { CdkDrag, CdkDragDrop, CdkDropList } from '@angular/cdk/drag-drop';\r\nimport { Subject } from 'rxjs';\r\nimport {\r\n  DocumentLitsLabelConfigInterfaceValueType,\r\n  ElementTypes,\r\n  InputDataTypes,\r\n  InputPipeTypes,\r\n  InputTypes,\r\n  ReportTypes,\r\n} from 'ngx-t-forms-types';\r\nimport type {\r\n  DocumentLitsLabelConfigInterface,\r\n  ElementEditorInnerSectionElementInterface,\r\n  FormColumnInputs,\r\n} from 'ngx-t-forms-types';\r\n\r\nimport type { IConfigElementError } from '../../t-dynamic-data-edit.component';\r\nimport { MatChipListEditorComponent } from '../mat-chip-list-editor/mat-chip-list-editor.component';\r\nimport { MatSliderToggleEditorComponent } from '../mat-slider-toggle-editor/mat-slider-toggle-editor.component';\r\nimport { EmptyStateComponent } from '../_shared/empty-state/empty-state.component';\r\n\r\n/** Picker chip option (label + value), as consumed by `lib-mat-chip-list-editor`. */\r\ninterface ChipOption {\r\n  readonly label: string;\r\n  readonly value: string;\r\n}\r\n\r\n/**\r\n * Working buffer for the label currently being added or edited. The three\r\n * distinct states of `labelInEdit` drive the editor UI:\r\n *\r\n * - `null`          → not editing; the \"Add new column\" button is shown.\r\n * - `{}` (empty)    → a fresh, not-yet-populated draft (the create form).\r\n * - populated draft → an existing or in-progress column being edited.\r\n */\r\ntype LabelDraft = Partial<DocumentLitsLabelConfigInterface>;\r\n\r\n/** Title-cases an enum key: `daysAgo` → `Days Ago`. */\r\nfunction humaniseKey(key: string): string {\r\n  return key\r\n    .replace(/([A-Z])/g, ' $1')\r\n    .trim()\r\n    .toLowerCase()\r\n    .replace(/^\\w/, (c) => c.toUpperCase());\r\n}\r\n\r\n/** Derives a readable label from a camelCase control name: `taxRate` → `tax Rate`. */\r\nfunction controlNameToLabel(name: string): string {\r\n  return name\r\n    .replace(/([a-z])([A-Z])/g, '$1 $2')\r\n    .replace(/([A-Z])([A-Z][a-z])/g, '$1 $2');\r\n}\r\n\r\n/**\r\n * Document-list label-configuration editor: builds the ordered list of column\r\n * label definitions (`DocumentLitsLabelConfigInterface[]`) used to render a\r\n * document list. Columns can be added, edited inline, removed, and reordered by\r\n * drag-and-drop.\r\n *\r\n * Implements `MatFormFieldControl<DocumentLitsLabelConfigInterface[]>`, so it\r\n * renders inside the parent's `<mat-form-field>` — `t-dynamic-data-edit` owns\r\n * the field label, hint, and validation errors; this component owns only the\r\n * column list and the add/edit form.\r\n *\r\n * NOTE: `MatFormFieldControl<T>` mandates plain mutable `value` / `disabled` /\r\n * `required` / `placeholder` / `id` members, `@Input()` decorators, the\r\n * `focused` / `touched` / `stateChanges` members, and the `useExisting`\r\n * provider. These are framework wiring, not defects — the CLAUDE.md bans on\r\n * `@Input()` / `useExisting` do not apply to MatFormFieldControl integration.\r\n * Genuinely-internal state (the in-edit draft, derived option lists) uses\r\n * `signal()` / `computed()`.\r\n */\r\n@Component({\r\n  selector: 'lib-document-list-label-config-editor',\r\n  imports: [\r\n    MatListModule,\r\n    MatTooltipModule,\r\n    ClipboardModule,\r\n    MatSliderToggleEditorComponent,\r\n    MatChipListEditorComponent,\r\n    MatFormFieldModule,\r\n    MatButtonModule,\r\n    MatAutocompleteModule,\r\n    MatInputModule,\r\n    MatIconModule,\r\n    MatCardModule,\r\n    CdkDropList,\r\n    CdkDrag,\r\n    EmptyStateComponent,\r\n  ],\r\n  templateUrl: './document-list-label-config-editor.component.html',\r\n  styleUrl: './document-list-label-config-editor.component.scss',\r\n  changeDetection: ChangeDetectionStrategy.OnPush,\r\n  encapsulation: ViewEncapsulation.Emulated,\r\n  host: {\r\n    'class': 'lib-document-list-label-config-editor',\r\n    '[id]': 'id',\r\n    '[attr.aria-describedby]': 'describedBy',\r\n  },\r\n  providers: [\r\n    { provide: MatFormFieldControl, useExisting: DocumentListLabelConfigEditorComponent },\r\n  ],\r\n})\r\nexport class DocumentListLabelConfigEditorComponent\r\n  implements MatFormFieldControl<Array<DocumentLitsLabelConfigInterface>>\r\n{\r\n  static nextId = 0;\r\n\r\n  /** Emits whenever a piece of `MatFormFieldControl` state changes. */\r\n  readonly stateChanges = new Subject<void>();\r\n  readonly controlType = 'lib-document-list-label-config-editor';\r\n\r\n  id = `lib-document-list-label-config-editor-${DocumentListLabelConfigEditorComponent.nextId++}`;\r\n  placeholder = '';\r\n  focused = false;\r\n  touched = false;\r\n  describedBy = '';\r\n  autofilled = false;\r\n  userAriaDescribedBy: string | undefined = undefined;\r\n  disableAutomaticLabeling: boolean | undefined = undefined;\r\n\r\n  readonly ngControl = inject(NgControl, { self: true, optional: true });\r\n\r\n  /** Validation errors surfaced by the parent for error-state derivation. */\r\n  @Input() errors: IConfigElementError[] | undefined = [];\r\n  /** Available form inputs used to auto-derive a column's value type. */\r\n  @Input() formInputs: Array<FormColumnInputs> = [];\r\n  /** Editor configuration supplied by the parent (placeholder/required/etc.). */\r\n  @Input() editorConfig: ElementEditorInnerSectionElementInterface | undefined = undefined;\r\n  /** Candidate control names offered in the form-control autocomplete. */\r\n  @Input() mapToData: string[] | undefined = [];\r\n\r\n  /** Emits the column list whenever it changes. */\r\n  readonly valueChange = output<Array<DocumentLitsLabelConfigInterface>>();\r\n\r\n  #value: Array<DocumentLitsLabelConfigInterface> = [];\r\n  /** Current column configuration list. */\r\n  @Input()\r\n  get value(): Array<DocumentLitsLabelConfigInterface> {\r\n    return this.#value;\r\n  }\r\n  set value(value: Array<DocumentLitsLabelConfigInterface>) {\r\n    // Coerce to an array: the parent pipeline substitutes '' for an unset\r\n    // deep-bound value, and a non-array here would break `.length`, the `@for`,\r\n    // and the commit helpers. Mirrors `record-list-manager`'s value setter.\r\n    this.#value = Array.isArray(value) ? value : [];\r\n    this.stateChanges.next();\r\n  }\r\n\r\n  #disabled = false;\r\n  /** Whether the editor is inert. */\r\n  @Input()\r\n  get disabled(): boolean {\r\n    return this.#disabled;\r\n  }\r\n  set disabled(value: boolean) {\r\n    this.#disabled = value;\r\n    this.stateChanges.next();\r\n  }\r\n\r\n  #required = false;\r\n  /** Whether at least one column is required. */\r\n  @Input()\r\n  get required(): boolean {\r\n    return this.#required;\r\n  }\r\n  set required(value: boolean) {\r\n    this.#required = value;\r\n    this.stateChanges.next();\r\n  }\r\n\r\n  // ---- internal signal state ---------------------------------------------\r\n\r\n  /** The label draft currently being added/edited (see {@link LabelDraft}). */\r\n  protected readonly labelInEdit = signal<LabelDraft | null>(null);\r\n\r\n  /** Value-type chip options (all enum members, humanised). */\r\n  protected readonly valueTypes: ChipOption[] = Object.keys(\r\n    DocumentLitsLabelConfigInterfaceValueType,\r\n  ).map((key) => ({ label: humaniseKey(key), value: key }));\r\n\r\n  /**\r\n   * Autocomplete options filtered by the draft's `formControlName`. Empty term\r\n   * shows the full list; otherwise matches a substring or a word-prefix.\r\n   */\r\nprotected readonly filteredControlNames = computed<readonly string[]>(() => {\r\n    // 1. Create a Set from the data to automatically remove duplicates, \r\n    // then spread it back into an array.\r\n    const source = [...new Set(this.mapToData ?? [])];\r\n    \r\n    const term = (this.labelInEdit()?.formControlName ?? '').trim().toLowerCase();\r\n    \r\n    if (!term) {\r\n      return source;\r\n    }\r\n    \r\n    return source.filter((option) => {\r\n      const text = option.toLowerCase();\r\n      \r\n      if (text.includes(term)) {\r\n        return true;\r\n      }\r\n      \r\n      return text.split(/\\s+/).some((word) => word.startsWith(term));\r\n    });\r\n  });\r\n\r\n  /**\r\n   * Report-type chip options derived from the draft's `valueType`. `undefined`\r\n   * when no value type is chosen, which hides the report-types section.\r\n   *\r\n   * - currency / number → aggregation reports (avg, highest, lowest, sum)\r\n   * - string            → category report\r\n   */\r\n  protected readonly reportTypes = computed<ChipOption[] | undefined>(() => {\r\n    const valueType = this.labelInEdit()?.valueType;\r\n    if (!valueType) {\r\n      return undefined;\r\n    }\r\n    return Object.values(ReportTypes)\r\n      .filter((reportType) => {\r\n        if (\r\n          valueType === DocumentLitsLabelConfigInterfaceValueType.currency ||\r\n          valueType === DocumentLitsLabelConfigInterfaceValueType.number\r\n        ) {\r\n          return (\r\n            reportType === ReportTypes.Avg ||\r\n            reportType === ReportTypes.Highest ||\r\n            reportType === ReportTypes.Lowest ||\r\n            reportType === ReportTypes.Sum\r\n          );\r\n        }\r\n        if (valueType === DocumentLitsLabelConfigInterfaceValueType.string) {\r\n          return reportType === ReportTypes.Category;\r\n        }\r\n        return false;\r\n      })\r\n      .map((key) => ({ label: humaniseKey(key), value: key }));\r\n  });\r\n\r\n  /** Whether the save action is blocked (draft missing required fields). */\r\n  protected readonly labelSaveDisabled = computed<boolean>(() => {\r\n    const draft = this.labelInEdit();\r\n    return !draft || !draft.label || !draft.formControlName || !draft.valueType;\r\n  });\r\n\r\n  // ---- MatFormFieldControl getters (read by the framework) ----------------\r\n\r\n  get empty(): boolean {\r\n    return this.#value.length === 0;\r\n  }\r\n\r\n  get shouldLabelFloat(): boolean {\r\n    return this.focused || !this.empty;\r\n  }\r\n\r\n  get errorState(): boolean {\r\n    const requiredUnset = this.empty && this.#required;\r\n    const ngControlError = this.ngControl?.errors != null;\r\n    const externalError = (this.errors?.length ?? 0) > 0 && this.touched;\r\n    return requiredUnset || ngControlError || externalError;\r\n  }\r\n\r\n  onTouched: () => void = () => {};\r\n\r\n  setDescribedByIds(ids: string[]): void {\r\n    this.describedBy = ids.join(' ');\r\n    this.stateChanges.next();\r\n  }\r\n\r\n  onContainerClick(): void {\r\n    this.markAsTouched();\r\n    if (!this.focused) {\r\n      this.focused = true;\r\n    }\r\n    this.stateChanges.next();\r\n  }\r\n\r\n  markAsTouched(): void {\r\n    if (!this.touched) {\r\n      this.touched = true;\r\n      this.onTouched();\r\n      this.stateChanges.next();\r\n    }\r\n  }\r\n\r\n  // ---- editing ------------------------------------------------------------\r\n\r\n  /** Begin a fresh column draft. */\r\n  protected startNewLabel(): void {\r\n    this.labelInEdit.set({});\r\n  }\r\n\r\n  /** Discard the current draft. */\r\n  protected cancelEdit(): void {\r\n    this.labelInEdit.set(null);\r\n  }\r\n\r\n  /** Update the draft's display label from the name input. */\r\n  protected nameChange(event: Event): void {\r\n    const label = (event.target as HTMLInputElement | null)?.value ?? '';\r\n    this.labelInEdit.update((draft) => ({ ...draft, label }));\r\n  }\r\n\r\n  /**\r\n   * Update the draft's form control name (free-text typing). Re-derives the\r\n   * value type from the matching form input, if any.\r\n   */\r\n  protected formControlNameChange(event: Event): void {\r\n    const formControlName = (event.target as HTMLInputElement | null)?.value ?? '';\r\n    const input = this.formInputs.find((i) => i.formControlName === formControlName);\r\n    this.labelInEdit.update((draft) => ({\r\n      ...draft,\r\n      formControlName,\r\n      valueType: this.#valueTypeFromInput(input),\r\n    }));\r\n  }\r\n\r\n  /** Apply an autocomplete selection, defaulting the label from the name. */\r\n  protected formControlSelected(event: MatAutocompleteSelectedEvent): void {\r\n    const formControlName = String(event.option.value);\r\n    this.labelInEdit.update((draft) => ({\r\n      ...draft,\r\n      formControlName,\r\n      label: draft?.label || controlNameToLabel(formControlName),\r\n    }));\r\n  }\r\n\r\n  /** Set the draft's value type from the chip selection. */\r\n  protected valueTypeChanged(value: unknown): void {\r\n    this.labelInEdit.update((draft) => ({\r\n      ...draft,\r\n      valueType: value as DocumentLitsLabelConfigInterfaceValueType,\r\n    }));\r\n  }\r\n\r\n  /**\r\n   * Set the draft's report types. The chip editor is multi-select, so it emits\r\n   * an array; a single value is normalised into one.\r\n   */\r\n  protected reportTypeChanged(value: unknown): void {\r\n    const reportType = Array.isArray(value)\r\n      ? (value as ReportTypes[])\r\n      : value == null\r\n        ? []\r\n        : [value as ReportTypes];\r\n    this.labelInEdit.update((draft) => ({ ...draft, reportType }));\r\n  }\r\n\r\n  /** Toggle the draft's hidden flag. */\r\n  protected isHiddenChanged(isHidden: boolean): void {\r\n    this.labelInEdit.update((draft) => ({ ...draft, isHidden }));\r\n  }\r\n\r\n  /** Commit the draft into the list (replacing a matching column, or appending). */\r\n  protected saveHeader(): void {\r\n    const draft = this.labelInEdit();\r\n    if (!draft) {\r\n      return;\r\n    }\r\n    const next = [...this.#value];\r\n    const index = next.findIndex((item) => item.formControlName === draft.formControlName);\r\n    const column = draft as DocumentLitsLabelConfigInterface;\r\n    if (index !== -1) {\r\n      next[index] = column;\r\n    } else {\r\n      next.push(column);\r\n    }\r\n    this.#commit(next);\r\n    this.labelInEdit.set(null);\r\n  }\r\n\r\n  /** Remove a column by its form control name. */\r\n  protected removeLabel(label: DocumentLitsLabelConfigInterface): void {\r\n    this.#commit(this.#value.filter((item) => item.formControlName !== label.formControlName));\r\n  }\r\n\r\n  /** Reorder the list after a drag-and-drop. */\r\n  protected drop(event: CdkDragDrop<DocumentLitsLabelConfigInterface[]>): void {\r\n    const { previousIndex, currentIndex } = event;\r\n    const moved = this.#value.at(previousIndex);\r\n    if (moved === undefined || previousIndex === currentIndex) {\r\n      return;\r\n    }\r\n    const next = [...this.#value];\r\n    next.splice(previousIndex, 1);\r\n    next.splice(currentIndex, 0, moved);\r\n    this.#commit(next);\r\n  }\r\n\r\n  /** Write a new list value, emit the change, and mark the control touched. */\r\n  #commit(next: Array<DocumentLitsLabelConfigInterface>): void {\r\n    this.value = next;\r\n    this.valueChange.emit(next);\r\n    this.markAsTouched();\r\n  }\r\n\r\n  /** Derive the value type from a form input's data/element type and pipe. */\r\n  #valueTypeFromInput(\r\n    input: FormColumnInputs | undefined,\r\n  ): DocumentLitsLabelConfigInterfaceValueType {\r\n    if (!input) {\r\n      return DocumentLitsLabelConfigInterfaceValueType.string;\r\n    }\r\n    if (\r\n      input.dataType === InputDataTypes.Number ||\r\n      input.type === InputTypes.Number ||\r\n      input.pipe?.pipeType === InputPipeTypes.Number\r\n    ) {\r\n      return DocumentLitsLabelConfigInterfaceValueType.number;\r\n    }\r\n    if (input.pipe?.pipeType === InputPipeTypes.Currency) {\r\n      return DocumentLitsLabelConfigInterfaceValueType.currency;\r\n    }\r\n    if (input.dataType === InputDataTypes.Boolean || input.element === ElementTypes.Toggle) {\r\n      return DocumentLitsLabelConfigInterfaceValueType.boolean;\r\n    }\r\n    return DocumentLitsLabelConfigInterfaceValueType.string;\r\n  }\r\n}\r\n","<mat-nav-list\r\n  cdkDropList\r\n  [cdkDropListData]=\"value\"\r\n  (cdkDropListDropped)=\"drop($event)\"\r\n  class=\"lib-document-list-label-config-editor__list\"\r\n>\r\n  @if (value.length === 0) {\r\n    <lib-empty-state\r\n      icon=\"view_column\"\r\n      message=\"No columns configured. Add one below.\"\r\n    ></lib-empty-state>\r\n  } @else {\r\n    @for (label of value; track label.formControlName+'-'+$index) {\r\n      <mat-list-item\r\n        cdkDrag\r\n        class=\"lib-document-list-label-config-editor__item\"\r\n        [matTooltip]=\"'Click to copy ' + label.formControlName\"\r\n        [cdkCopyToClipboard]=\"label.formControlName\"\r\n        matTooltipPosition=\"before\"\r\n      >\r\n        <mat-icon matListItemIcon>view_column</mat-icon>\r\n\r\n        <div matListItemTitle class=\"lib-document-list-label-config-editor__title\">\r\n          <span class=\"lib-document-list-label-config-editor__label\">{{ label.label }}</span>\r\n          <span class=\"lib-document-list-label-config-editor__meta\">\r\n            <code>{{ label.formControlName }}</code> · {{ label.valueType }}\r\n          </span>\r\n        </div>\r\n\r\n        <button\r\n          matListItemMeta\r\n          mat-icon-button\r\n          type=\"button\"\r\n          [disabled]=\"disabled\"\r\n          [attr.aria-label]=\"'Remove ' + label.label\"\r\n          (click)=\"removeLabel(label)\"\r\n        >\r\n          <mat-icon>delete</mat-icon>\r\n        </button>\r\n      </mat-list-item>\r\n    }\r\n  }\r\n</mat-nav-list>\r\n\r\n@if (labelInEdit(); as draft) {\r\n  <mat-card appearance=\"outlined\" class=\"lib-document-list-label-config-editor__form\">\r\n    <mat-card-content class=\"lib-document-list-label-config-editor__fields\">\r\n      <label class=\"lib-document-list-label-config-editor__field-label\" [attr.for]=\"id + '-fcn'\">\r\n        Form control name\r\n      </label>\r\n      <input\r\n        class=\"lib-document-list-label-config-editor__input\"\r\n        type=\"text\"\r\n        [id]=\"id + '-fcn'\"\r\n        placeholder=\"Pick one\"\r\n        aria-label=\"Form control name\"\r\n        [value]=\"draft.formControlName || ''\"\r\n        (input)=\"formControlNameChange($event)\"\r\n        [matAutocomplete]=\"auto\"\r\n      />\r\n      <mat-autocomplete\r\n        #auto=\"matAutocomplete\"\r\n        autoActiveFirstOption\r\n        (optionSelected)=\"formControlSelected($event)\"\r\n      >\r\n        @for (option of filteredControlNames(); track option) {\r\n          <mat-option [value]=\"option\">{{ option }}</mat-option>\r\n        }\r\n      </mat-autocomplete>\r\n\r\n      <label class=\"lib-document-list-label-config-editor__field-label\" [attr.for]=\"id + '-name'\">\r\n        Name\r\n      </label>\r\n      <input\r\n        class=\"lib-document-list-label-config-editor__input\"\r\n        type=\"text\"\r\n        [id]=\"id + '-name'\"\r\n        placeholder=\"Enter label name\"\r\n        [value]=\"draft.label || ''\"\r\n        (input)=\"nameChange($event)\"\r\n      />\r\n\r\n      <label class=\"lib-document-list-label-config-editor__field-label\" [id]=\"id + '-vt-label'\">\r\n        Value type\r\n      </label>\r\n      <lib-mat-chip-list-editor\r\n        [id]=\"id + '-vt'\"\r\n        [errors]=\"[]\"\r\n        [value]=\"draft.valueType\"\r\n        [options]=\"valueTypes\"\r\n        (valueChange)=\"valueTypeChanged($event)\"\r\n      ></lib-mat-chip-list-editor>\r\n\r\n      @if (reportTypes(); as types) {\r\n        @if (types.length > 0) {\r\n          <label class=\"lib-document-list-label-config-editor__field-label\" [id]=\"id + '-rt-label'\">\r\n            Report types\r\n          </label>\r\n          <lib-mat-chip-list-editor\r\n            [id]=\"id + '-rt'\"\r\n            [errors]=\"[]\"\r\n            [multiple]=\"true\"\r\n            [value]=\"draft.reportType\"\r\n            [options]=\"types\"\r\n            (valueChange)=\"reportTypeChanged($event)\"\r\n          ></lib-mat-chip-list-editor>\r\n        }\r\n      }\r\n\r\n      <lib-mat-slider-toggle-editor\r\n        [id]=\"id + '-hidden'\"\r\n        label=\"Is hidden\"\r\n        [value]=\"draft.isHidden || false\"\r\n        [errors]=\"[]\"\r\n        (valueChange)=\"isHiddenChanged(!!$event)\"\r\n      ></lib-mat-slider-toggle-editor>\r\n    </mat-card-content>\r\n\r\n    <mat-card-actions class=\"lib-document-list-label-config-editor__actions\">\r\n      <button\r\n        mat-flat-button\r\n        color=\"primary\"\r\n        type=\"button\"\r\n        [disabled]=\"labelSaveDisabled()\"\r\n        (click)=\"saveHeader()\"\r\n      >\r\n        Save header\r\n      </button>\r\n      <span class=\"lib-document-list-label-config-editor__spacer\"></span>\r\n      <button mat-button color=\"warn\" type=\"button\" (click)=\"cancelEdit()\">Cancel</button>\r\n    </mat-card-actions>\r\n  </mat-card>\r\n} @else {\r\n  <button\r\n    mat-stroked-button\r\n    color=\"primary\"\r\n    type=\"button\"\r\n    class=\"lib-document-list-label-config-editor__add\"\r\n    [disabled]=\"disabled\"\r\n    (click)=\"startNewLabel()\"\r\n  >\r\n    Add new column\r\n  </button>\r\n}\r\n"],"names":["i1","i2","i3","i4","i5","i6","i7","i8"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;AAyDA;AACA,SAAS,WAAW,CAAC,GAAW,EAAA;AAC9B,IAAA,OAAO;AACJ,SAAA,OAAO,CAAC,UAAU,EAAE,KAAK;AACzB,SAAA,IAAI;AACJ,SAAA,WAAW;AACX,SAAA,OAAO,CAAC,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,WAAW,EAAE,CAAC;AAC3C;AAEA;AACA,SAAS,kBAAkB,CAAC,IAAY,EAAA;AACtC,IAAA,OAAO;AACJ,SAAA,OAAO,CAAC,iBAAiB,EAAE,OAAO;AAClC,SAAA,OAAO,CAAC,sBAAsB,EAAE,OAAO,CAAC;AAC7C;AAEA;;;;;;;;;;;;;;;;;;AAkBG;MAgCU,sCAAsC,CAAA;AA/BnD,IAAA,WAAA,GAAA;;AAqCW,QAAA,IAAA,CAAA,YAAY,GAAG,IAAI,OAAO,EAAQ;QAClC,IAAA,CAAA,WAAW,GAAG,uCAAuC;AAE9D,QAAA,IAAA,CAAA,EAAE,GAAG,CAAA,sCAAA,EAAyC,sCAAsC,CAAC,MAAM,EAAE,EAAE;QAC/F,IAAA,CAAA,WAAW,GAAG,EAAE;QAChB,IAAA,CAAA,OAAO,GAAG,KAAK;QACf,IAAA,CAAA,OAAO,GAAG,KAAK;QACf,IAAA,CAAA,WAAW,GAAG,EAAE;QAChB,IAAA,CAAA,UAAU,GAAG,KAAK;QAClB,IAAA,CAAA,mBAAmB,GAAuB,SAAS;QACnD,IAAA,CAAA,wBAAwB,GAAwB,SAAS;AAEhD,QAAA,IAAA,CAAA,SAAS,GAAG,MAAM,CAAC,SAAS,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;;QAG7D,IAAA,CAAA,MAAM,GAAsC,EAAE;;QAE9C,IAAA,CAAA,UAAU,GAA4B,EAAE;;QAExC,IAAA,CAAA,YAAY,GAA0D,SAAS;;QAE/E,IAAA,CAAA,SAAS,GAAyB,EAAE;;QAGpC,IAAA,CAAA,WAAW,GAAG,MAAM,EAA2C;QAExE,IAAA,CAAA,MAAM,GAA4C,EAAE;QAcpD,IAAA,CAAA,SAAS,GAAG,KAAK;QAWjB,IAAA,CAAA,SAAS,GAAG,KAAK;;;AAcE,QAAA,IAAA,CAAA,WAAW,GAAG,MAAM,CAAoB,IAAI,kFAAC;;AAG7C,QAAA,IAAA,CAAA,UAAU,GAAiB,MAAM,CAAC,IAAI,CACvD,yCAAyC,CAC1C,CAAC,GAAG,CAAC,CAAC,GAAG,MAAM,EAAE,KAAK,EAAE,WAAW,CAAC,GAAG,CAAC,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC,CAAC;AAEzD;;;AAGG;AACc,QAAA,IAAA,CAAA,oBAAoB,GAAG,QAAQ,CAAoB,MAAK;;;AAGvE,YAAA,MAAM,MAAM,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,SAAS,IAAI,EAAE,CAAC,CAAC;AAEjD,YAAA,MAAM,IAAI,GAAG,CAAC,IAAI,CAAC,WAAW,EAAE,EAAE,eAAe,IAAI,EAAE,EAAE,IAAI,EAAE,CAAC,WAAW,EAAE;YAE7E,IAAI,CAAC,IAAI,EAAE;AACT,gBAAA,OAAO,MAAM;YACf;AAEA,YAAA,OAAO,MAAM,CAAC,MAAM,CAAC,CAAC,MAAM,KAAI;AAC9B,gBAAA,MAAM,IAAI,GAAG,MAAM,CAAC,WAAW,EAAE;AAEjC,gBAAA,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE;AACvB,oBAAA,OAAO,IAAI;gBACb;gBAEA,OAAO,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;AAChE,YAAA,CAAC,CAAC;AACJ,QAAA,CAAC,2FAAC;AAEF;;;;;;AAMG;AACgB,QAAA,IAAA,CAAA,WAAW,GAAG,QAAQ,CAA2B,MAAK;YACvE,MAAM,SAAS,GAAG,IAAI,CAAC,WAAW,EAAE,EAAE,SAAS;YAC/C,IAAI,CAAC,SAAS,EAAE;AACd,gBAAA,OAAO,SAAS;YAClB;AACA,YAAA,OAAO,MAAM,CAAC,MAAM,CAAC,WAAW;AAC7B,iBAAA,MAAM,CAAC,CAAC,UAAU,KAAI;AACrB,gBAAA,IACE,SAAS,KAAK,yCAAyC,CAAC,QAAQ;AAChE,oBAAA,SAAS,KAAK,yCAAyC,CAAC,MAAM,EAC9D;AACA,oBAAA,QACE,UAAU,KAAK,WAAW,CAAC,GAAG;wBAC9B,UAAU,KAAK,WAAW,CAAC,OAAO;wBAClC,UAAU,KAAK,WAAW,CAAC,MAAM;AACjC,wBAAA,UAAU,KAAK,WAAW,CAAC,GAAG;gBAElC;AACA,gBAAA,IAAI,SAAS,KAAK,yCAAyC,CAAC,MAAM,EAAE;AAClE,oBAAA,OAAO,UAAU,KAAK,WAAW,CAAC,QAAQ;gBAC5C;AACA,gBAAA,OAAO,KAAK;AACd,YAAA,CAAC;iBACA,GAAG,CAAC,CAAC,GAAG,MAAM,EAAE,KAAK,EAAE,WAAW,CAAC,GAAG,CAAC,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC,CAAC;AAC5D,QAAA,CAAC,kFAAC;;AAGiB,QAAA,IAAA,CAAA,iBAAiB,GAAG,QAAQ,CAAU,MAAK;AAC5D,YAAA,MAAM,KAAK,GAAG,IAAI,CAAC,WAAW,EAAE;AAChC,YAAA,OAAO,CAAC,KAAK,IAAI,CAAC,KAAK,CAAC,KAAK,IAAI,CAAC,KAAK,CAAC,eAAe,IAAI,CAAC,KAAK,CAAC,SAAS;AAC7E,QAAA,CAAC,wFAAC;AAmBF,QAAA,IAAA,CAAA,SAAS,GAAe,MAAK,EAAE,CAAC;AA4JjC,IAAA;aAzTQ,IAAA,CAAA,MAAM,GAAG,CAAH,CAAK;AA6BlB,IAAA,MAAM;;AAEN,IAAA,IACI,KAAK,GAAA;QACP,OAAO,IAAI,CAAC,MAAM;IACpB;IACA,IAAI,KAAK,CAAC,KAA8C,EAAA;;;;AAItD,QAAA,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,KAAK,GAAG,EAAE;AAC/C,QAAA,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE;IAC1B;AAEA,IAAA,SAAS;;AAET,IAAA,IACI,QAAQ,GAAA;QACV,OAAO,IAAI,CAAC,SAAS;IACvB;IACA,IAAI,QAAQ,CAAC,KAAc,EAAA;AACzB,QAAA,IAAI,CAAC,SAAS,GAAG,KAAK;AACtB,QAAA,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE;IAC1B;AAEA,IAAA,SAAS;;AAET,IAAA,IACI,QAAQ,GAAA;QACV,OAAO,IAAI,CAAC,SAAS;IACvB;IACA,IAAI,QAAQ,CAAC,KAAc,EAAA;AACzB,QAAA,IAAI,CAAC,SAAS,GAAG,KAAK;AACtB,QAAA,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE;IAC1B;;AA+EA,IAAA,IAAI,KAAK,GAAA;AACP,QAAA,OAAO,IAAI,CAAC,MAAM,CAAC,MAAM,KAAK,CAAC;IACjC;AAEA,IAAA,IAAI,gBAAgB,GAAA;QAClB,OAAO,IAAI,CAAC,OAAO,IAAI,CAAC,IAAI,CAAC,KAAK;IACpC;AAEA,IAAA,IAAI,UAAU,GAAA;QACZ,MAAM,aAAa,GAAG,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,SAAS;QAClD,MAAM,cAAc,GAAG,IAAI,CAAC,SAAS,EAAE,MAAM,IAAI,IAAI;AACrD,QAAA,MAAM,aAAa,GAAG,CAAC,IAAI,CAAC,MAAM,EAAE,MAAM,IAAI,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,OAAO;AACpE,QAAA,OAAO,aAAa,IAAI,cAAc,IAAI,aAAa;IACzD;AAIA,IAAA,iBAAiB,CAAC,GAAa,EAAA;QAC7B,IAAI,CAAC,WAAW,GAAG,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC;AAChC,QAAA,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE;IAC1B;IAEA,gBAAgB,GAAA;QACd,IAAI,CAAC,aAAa,EAAE;AACpB,QAAA,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE;AACjB,YAAA,IAAI,CAAC,OAAO,GAAG,IAAI;QACrB;AACA,QAAA,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE;IAC1B;IAEA,aAAa,GAAA;AACX,QAAA,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE;AACjB,YAAA,IAAI,CAAC,OAAO,GAAG,IAAI;YACnB,IAAI,CAAC,SAAS,EAAE;AAChB,YAAA,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE;QAC1B;IACF;;;IAKU,aAAa,GAAA;AACrB,QAAA,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,EAAE,CAAC;IAC1B;;IAGU,UAAU,GAAA;AAClB,QAAA,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC;IAC5B;;AAGU,IAAA,UAAU,CAAC,KAAY,EAAA;QAC/B,MAAM,KAAK,GAAI,KAAK,CAAC,MAAkC,EAAE,KAAK,IAAI,EAAE;AACpE,QAAA,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,KAAK,MAAM,EAAE,GAAG,KAAK,EAAE,KAAK,EAAE,CAAC,CAAC;IAC3D;AAEA;;;AAGG;AACO,IAAA,qBAAqB,CAAC,KAAY,EAAA;QAC1C,MAAM,eAAe,GAAI,KAAK,CAAC,MAAkC,EAAE,KAAK,IAAI,EAAE;AAC9E,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,eAAe,KAAK,eAAe,CAAC;QAChF,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,KAAK,MAAM;AAClC,YAAA,GAAG,KAAK;YACR,eAAe;AACf,YAAA,SAAS,EAAE,IAAI,CAAC,mBAAmB,CAAC,KAAK,CAAC;AAC3C,SAAA,CAAC,CAAC;IACL;;AAGU,IAAA,mBAAmB,CAAC,KAAmC,EAAA;QAC/D,MAAM,eAAe,GAAG,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC;QAClD,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,KAAK,MAAM;AAClC,YAAA,GAAG,KAAK;YACR,eAAe;YACf,KAAK,EAAE,KAAK,EAAE,KAAK,IAAI,kBAAkB,CAAC,eAAe,CAAC;AAC3D,SAAA,CAAC,CAAC;IACL;;AAGU,IAAA,gBAAgB,CAAC,KAAc,EAAA;QACvC,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,KAAK,MAAM;AAClC,YAAA,GAAG,KAAK;AACR,YAAA,SAAS,EAAE,KAAkD;AAC9D,SAAA,CAAC,CAAC;IACL;AAEA;;;AAGG;AACO,IAAA,iBAAiB,CAAC,KAAc,EAAA;AACxC,QAAA,MAAM,UAAU,GAAG,KAAK,CAAC,OAAO,CAAC,KAAK;AACpC,cAAG;cACD,KAAK,IAAI;AACT,kBAAE;AACF,kBAAE,CAAC,KAAoB,CAAC;AAC5B,QAAA,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,KAAK,MAAM,EAAE,GAAG,KAAK,EAAE,UAAU,EAAE,CAAC,CAAC;IAChE;;AAGU,IAAA,eAAe,CAAC,QAAiB,EAAA;AACzC,QAAA,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,KAAK,MAAM,EAAE,GAAG,KAAK,EAAE,QAAQ,EAAE,CAAC,CAAC;IAC9D;;IAGU,UAAU,GAAA;AAClB,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,WAAW,EAAE;QAChC,IAAI,CAAC,KAAK,EAAE;YACV;QACF;QACA,MAAM,IAAI,GAAG,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC;AAC7B,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,eAAe,KAAK,KAAK,CAAC,eAAe,CAAC;QACtF,MAAM,MAAM,GAAG,KAAyC;AACxD,QAAA,IAAI,KAAK,KAAK,CAAC,CAAC,EAAE;AAChB,YAAA,IAAI,CAAC,KAAK,CAAC,GAAG,MAAM;QACtB;aAAO;AACL,YAAA,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC;QACnB;AACA,QAAA,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC;AAClB,QAAA,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC;IAC5B;;AAGU,IAAA,WAAW,CAAC,KAAuC,EAAA;QAC3D,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,eAAe,KAAK,KAAK,CAAC,eAAe,CAAC,CAAC;IAC5F;;AAGU,IAAA,IAAI,CAAC,KAAsD,EAAA;AACnE,QAAA,MAAM,EAAE,aAAa,EAAE,YAAY,EAAE,GAAG,KAAK;QAC7C,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,aAAa,CAAC;QAC3C,IAAI,KAAK,KAAK,SAAS,IAAI,aAAa,KAAK,YAAY,EAAE;YACzD;QACF;QACA,MAAM,IAAI,GAAG,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC;AAC7B,QAAA,IAAI,CAAC,MAAM,CAAC,aAAa,EAAE,CAAC,CAAC;QAC7B,IAAI,CAAC,MAAM,CAAC,YAAY,EAAE,CAAC,EAAE,KAAK,CAAC;AACnC,QAAA,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC;IACpB;;AAGA,IAAA,OAAO,CAAC,IAA6C,EAAA;AACnD,QAAA,IAAI,CAAC,KAAK,GAAG,IAAI;AACjB,QAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC;QAC3B,IAAI,CAAC,aAAa,EAAE;IACtB;;AAGA,IAAA,mBAAmB,CACjB,KAAmC,EAAA;QAEnC,IAAI,CAAC,KAAK,EAAE;YACV,OAAO,yCAAyC,CAAC,MAAM;QACzD;AACA,QAAA,IACE,KAAK,CAAC,QAAQ,KAAK,cAAc,CAAC,MAAM;AACxC,YAAA,KAAK,CAAC,IAAI,KAAK,UAAU,CAAC,MAAM;YAChC,KAAK,CAAC,IAAI,EAAE,QAAQ,KAAK,cAAc,CAAC,MAAM,EAC9C;YACA,OAAO,yCAAyC,CAAC,MAAM;QACzD;QACA,IAAI,KAAK,CAAC,IAAI,EAAE,QAAQ,KAAK,cAAc,CAAC,QAAQ,EAAE;YACpD,OAAO,yCAAyC,CAAC,QAAQ;QAC3D;AACA,QAAA,IAAI,KAAK,CAAC,QAAQ,KAAK,cAAc,CAAC,OAAO,IAAI,KAAK,CAAC,OAAO,KAAK,YAAY,CAAC,MAAM,EAAE;YACtF,OAAO,yCAAyC,CAAC,OAAO;QAC1D;QACA,OAAO,yCAAyC,CAAC,MAAM;IACzD;+GA3TW,sCAAsC,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAtC,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,sCAAsC,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,uCAAA,EAAA,MAAA,EAAA,EAAA,MAAA,EAAA,QAAA,EAAA,UAAA,EAAA,YAAA,EAAA,YAAA,EAAA,cAAA,EAAA,SAAA,EAAA,WAAA,EAAA,KAAA,EAAA,OAAA,EAAA,QAAA,EAAA,UAAA,EAAA,QAAA,EAAA,UAAA,EAAA,EAAA,OAAA,EAAA,EAAA,WAAA,EAAA,aAAA,EAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,IAAA,EAAA,IAAA,EAAA,uBAAA,EAAA,aAAA,EAAA,EAAA,cAAA,EAAA,uCAAA,EAAA,EAAA,SAAA,EAJtC;AACT,YAAA,EAAE,OAAO,EAAE,mBAAmB,EAAE,WAAW,EAAE,sCAAsC,EAAE;AACtF,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECzHH,ikKAgJA,EAAA,MAAA,EAAA,CAAA,yqFAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EDjDI,aAAa,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,UAAA,EAAA,QAAA,EAAA,cAAA,EAAA,QAAA,EAAA,CAAA,YAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,WAAA,EAAA,QAAA,EAAA,wDAAA,EAAA,MAAA,EAAA,CAAA,WAAA,CAAA,EAAA,QAAA,EAAA,CAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,eAAA,EAAA,QAAA,EAAA,mBAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,gBAAA,EAAA,QAAA,EAAA,oBAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,eAAA,EAAA,QAAA,EAAA,mBAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACb,gBAAgB,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,EAAA,CAAA,UAAA,EAAA,QAAA,EAAA,cAAA,EAAA,MAAA,EAAA,CAAA,oBAAA,EAAA,4BAAA,EAAA,oBAAA,EAAA,qBAAA,EAAA,qBAAA,EAAA,yBAAA,EAAA,YAAA,EAAA,iBAAA,CAAA,EAAA,QAAA,EAAA,CAAA,YAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAChB,eAAe,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,EAAA,CAAA,kBAAA,EAAA,QAAA,EAAA,sBAAA,EAAA,MAAA,EAAA,CAAA,oBAAA,EAAA,4BAAA,CAAA,EAAA,OAAA,EAAA,CAAA,0BAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACf,8BAA8B,EAAA,QAAA,EAAA,8BAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,OAAA,EAAA,QAAA,EAAA,UAAA,EAAA,UAAA,EAAA,OAAA,EAAA,aAAA,CAAA,EAAA,OAAA,EAAA,CAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAC9B,0BAA0B,EAAA,QAAA,EAAA,0BAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,CAAA,EAAA,OAAA,EAAA,CAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAC1B,kBAAkB,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAClB,eAAe,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,EAAA,CAAA,SAAA,EAAA,QAAA,EAAA,iOAAA,EAAA,MAAA,EAAA,CAAA,WAAA,CAAA,EAAA,QAAA,EAAA,CAAA,WAAA,EAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,aAAA,EAAA,QAAA,EAAA,sFAAA,EAAA,QAAA,EAAA,CAAA,WAAA,EAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACf,qBAAqB,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,IAAA,CAAA,eAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,YAAA,EAAA,iBAAA,EAAA,aAAA,EAAA,uBAAA,EAAA,wBAAA,EAAA,kBAAA,EAAA,YAAA,EAAA,eAAA,EAAA,OAAA,EAAA,8BAAA,CAAA,EAAA,OAAA,EAAA,CAAA,gBAAA,EAAA,QAAA,EAAA,QAAA,EAAA,iBAAA,CAAA,EAAA,QAAA,EAAA,CAAA,iBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,EAAA,CAAA,SAAA,EAAA,QAAA,EAAA,YAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,IAAA,EAAA,UAAA,CAAA,EAAA,OAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,QAAA,EAAA,CAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAD,IAAA,CAAA,sBAAA,EAAA,QAAA,EAAA,mDAAA,EAAA,MAAA,EAAA,CAAA,iBAAA,EAAA,yBAAA,EAAA,4BAAA,EAAA,cAAA,EAAA,yBAAA,CAAA,EAAA,QAAA,EAAA,CAAA,wBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACrB,cAAc,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACd,aAAa,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAE,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,SAAA,EAAA,SAAA,EAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACb,aAAa,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,IAAA,CAAA,OAAA,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,YAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,cAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,OAAA,CAAA,EAAA,QAAA,EAAA,CAAA,gBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,cAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACb,WAAW,EAAA,QAAA,EAAA,8BAAA,EAAA,MAAA,EAAA,CAAA,wBAAA,EAAA,iBAAA,EAAA,wBAAA,EAAA,IAAA,EAAA,qBAAA,EAAA,qBAAA,EAAA,4BAAA,EAAA,2BAAA,EAAA,0BAAA,EAAA,+BAAA,EAAA,2BAAA,EAAA,6BAAA,EAAA,sBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,oBAAA,EAAA,oBAAA,EAAA,mBAAA,EAAA,mBAAA,CAAA,EAAA,QAAA,EAAA,CAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACX,OAAO,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,aAAA,EAAA,iBAAA,EAAA,oBAAA,EAAA,iBAAA,EAAA,mBAAA,EAAA,yBAAA,EAAA,iBAAA,EAAA,0BAAA,EAAA,qBAAA,EAAA,yBAAA,EAAA,cAAA,CAAA,EAAA,OAAA,EAAA,CAAA,gBAAA,EAAA,iBAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,eAAA,EAAA,gBAAA,EAAA,cAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACP,mBAAmB,EAAA,QAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,SAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA,CAAA;;4FAeV,sCAAsC,EAAA,UAAA,EAAA,CAAA;kBA/BlD,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,uCAAuC,EAAA,OAAA,EACxC;wBACP,aAAa;wBACb,gBAAgB;wBAChB,eAAe;wBACf,8BAA8B;wBAC9B,0BAA0B;wBAC1B,kBAAkB;wBAClB,eAAe;wBACf,qBAAqB;wBACrB,cAAc;wBACd,aAAa;wBACb,aAAa;wBACb,WAAW;wBACX,OAAO;wBACP,mBAAmB;AACpB,qBAAA,EAAA,eAAA,EAGgB,uBAAuB,CAAC,MAAM,iBAChC,iBAAiB,CAAC,QAAQ,EAAA,IAAA,EACnC;AACJ,wBAAA,OAAO,EAAE,uCAAuC;AAChD,wBAAA,MAAM,EAAE,IAAI;AACZ,wBAAA,yBAAyB,EAAE,aAAa;qBACzC,EAAA,SAAA,EACU;AACT,wBAAA,EAAE,OAAO,EAAE,mBAAmB,EAAE,WAAW,wCAAwC,EAAE;AACtF,qBAAA,EAAA,QAAA,EAAA,ikKAAA,EAAA,MAAA,EAAA,CAAA,yqFAAA,CAAA,EAAA;;sBAuBA;;sBAEA;;sBAEA;;sBAEA;;sBAOA;;sBAcA;;sBAWA;;;;;"}