{"version":3,"file":"obliczeniowo-elementary-sorting.mjs","sources":["../../../../projects/components/sorting/components/sorting-option/sorting-option.component.ts","../../../../projects/components/sorting/components/sorting-option/sorting-option.component.html","../../../../projects/components/sorting/functions/sort.ts","../../../../projects/components/sorting/components/sort/sort.component.ts","../../../../projects/components/sorting/components/sort/sort.component.html","../../../../projects/components/sorting/components/table-sort/table-sort.component.ts","../../../../projects/components/sorting/components/table-sort/table-sort.component.html","../../../../projects/components/sorting/sorting.module.ts","../../../../projects/components/sorting/obliczeniowo-elementary-sorting.ts"],"sourcesContent":["import {\n  Component,\n  EventEmitter,\n  HostBinding,\n  Input,\n  Output,\n  SimpleChanges,\n} from '@angular/core';\nimport { SortOption } from '../../interfaces/sort-option';\nimport { DropdownSelectItem } from '@obliczeniowo/elementary/dropdown-select';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { InputWrappersDefaultSettingsService } from '@obliczeniowo/elementary/input';\n\nexport interface NameItem {\n  name: string;\n  text: string;\n}\n\n@Component({\n    selector: 'obl-sorting-option',\n    templateUrl: './sorting-option.component.html',\n    styleUrl: './sorting-option.component.scss',\n    providers: [\n        {\n            provide: NG_VALUE_ACCESSOR,\n            multi: true,\n            useExisting: SortingOptionComponent,\n        },\n    ],\n    standalone: false\n})\nexport class SortingOptionComponent implements ControlValueAccessor {\n  @Input() option: SortOption = {\n    id: 0,\n    name: '',\n    order: 'ASC',\n  };\n\n  @Input() names: NameItem[] = [];\n\n  @Input() translations: { [en: string]: string } = {};\n\n  @Input() mode: 'single' | 'add' | 'remove' = 'single';\n\n  @Output() changed = new EventEmitter<SortOption>();\n  @Output() nameChanged = new EventEmitter<SortOption>();\n  @Output() orderChanged = new EventEmitter<SortOption>();\n  @Output() add = new EventEmitter<SortOption>();\n  @Output() remove = new EventEmitter<SortOption>();\n\n  protected nameItems: DropdownSelectItem<any>[] = [];\n\n  order: DropdownSelectItem<any>[] = [\n    {\n      id: 'ASC',\n      text: 'Ascending',\n    },\n    {\n      id: 'DESC',\n      text: 'Descending',\n    },\n  ];\n\n  @Input()\n  @HostBinding('class.disabled')\n  disabled = false;\n\n  /**\n   * Enable type text animation for label\n   */\n  @Input() labelAnimation = false;\n\n  constructor(\n    private readonly settings: InputWrappersDefaultSettingsService\n  ) {\n    this.labelAnimation = this.settings.labelAnimation.editInput;\n  }\n\n  ngOnChanges(changes: SimpleChanges): void {\n    if (changes.names && this.names) {\n      this.nameItems = this.names.map((name) => ({\n        id: name.name,\n        text: name.text,\n      }));\n    }\n    if (changes.translations) {\n      this.order.forEach(\n        (order) =>\n          (order.text =\n            order.id === 'ASC'\n              ? this.translations.Ascending || 'Ascending'\n              : this.translations.Descending || 'Descending')\n      );\n    }\n  }\n\n  setOrder(order: DropdownSelectItem<any>) {\n    this.option.order = order.id as any;\n    this.changed.emit(this.option);\n    this.orderChanged.emit(this.option);\n  }\n\n  setName(name: DropdownSelectItem<any>) {\n    this.option.name = name.id as string;\n\n    this.changed.emit(this.option);\n    this.nameChanged.emit(this.option);\n  }\n\n  onChange = (value: { sort: SortOption; names?: NameItem[] }) => {};\n\n  onTouched = () => {};\n\n  writeValue(value: { sort: SortOption; names?: NameItem[] }): void {\n    this.option = value.sort;\n    this.names = value.names || this.names;\n    this.nameItems = this.names.map((name) => ({\n      id: name.name,\n      text: name.text,\n    }));\n  }\n\n  registerOnChange(onChange: any): void {\n    this.onChange = onChange;\n  }\n\n  registerOnTouched(onTouched: any): void {\n    this.onTouched = onTouched;\n  }\n\n  setDisabledState(disabled: boolean): void {\n    this.disabled = disabled;\n  }\n\n  onAdd() {\n    if (this.option.name !== '') {\n      this.add.emit({ ...this.option });\n      this.option.name = '';\n    }\n  }\n\n  onRemove() {\n    if (this.option.name !== '') {\n      this.remove.emit(this.option);\n    }\n  }\n}\n","<obl-dropdown-select\n  [label]=\"'Sort by' | oblTranslation : translations\"\n  [labelAnimation]=\"labelAnimation\"\n  [items]=\"nameItems\"\n  [select]=\"option.name\"\n  [disabled]=\"disabled || mode === 'remove'\"\n  (changed)=\"setName($event)\"\n></obl-dropdown-select>\n\n<obl-dropdown-select\n  [label]=\"'Order' | oblTranslation : translations\"\n  [labelAnimation]=\"labelAnimation\"\n  [items]=\"order\"\n  [select]=\"option.order\"\n  [disabled]=\"disabled\"\n  (changed)=\"setOrder($event)\"\n></obl-dropdown-select>\n\n@if (mode !== 'single') {\n  <button\n    oblButton\n    [disabled]=\"option.name === '' || undefined\"\n    [icon]=\"mode === 'add' ? 'add' : 'subtract'\"\n    (click)=\"mode === 'add' ? onAdd() : onRemove()\"\n  ></button>\n}\n","import { SortOption } from '../interfaces/sort-option';\n\nexport function sort(data: { [key: string]: any }[], options: SortOption[]) {\n  if (options.length) {\n    const sort = (first: string, second: string, order: 'ASC' | 'DESC') => {\n      return order === 'ASC'\n        ? first.localeCompare(second)\n        : second.localeCompare(first);\n    };\n\n    const sortNumbers = (\n      first: number,\n      second: number,\n      order: 'ASC' | 'DESC'\n    ) => {\n      return order === 'ASC' ? first - second : second - first;\n    };\n\n    return data.sort((c, p) => {\n      let compare = 0;\n      for (const option of options) {\n        compare =\n          typeof c[option.name] === 'string' &&\n            typeof p[option.name] === 'string'\n            ? sort(\n              c[option.name].toString(),\n              p[option.name].toString(),\n              option.order\n            )\n            : sortNumbers(c[option.name], p[option.name], option.order);\n\n        if (compare !== 0) {\n          break;\n        }\n      }\n      return compare;\n    });\n  } else {\n    return data;\n  }\n}\n","import {\n  ChangeDetectorRef,\n  Component,\n  ElementRef,\n  EventEmitter,\n  HostBinding,\n  Input,\n  Output,\n  SimpleChanges,\n  ViewChild,\n} from '@angular/core';\nimport { NameItem } from '../sorting-option/sorting-option.component';\nimport { SortOption } from '../../interfaces/sort-option';\nimport { CdkDragDrop, moveItemInArray } from '@angular/cdk/drag-drop';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { keys, keysValues } from '@obliczeniowo/elementary/objects';\nimport { cloneDeep } from 'lodash';\nimport {\n  DropdownSelectComponent,\n  DropdownSelectItem,\n} from '@obliczeniowo/elementary/dropdown-select';\nimport { sort } from '../../functions/sort';\nimport { InputWrappersDefaultSettingsService } from '@obliczeniowo/elementary/input';\n\n@Component({\n    selector: 'obl-sort',\n    templateUrl: './sort.component.html',\n    styleUrl: './sort.component.scss',\n    providers: [\n        {\n            provide: NG_VALUE_ACCESSOR,\n            multi: true,\n            useExisting: SortComponent,\n        },\n    ],\n    standalone: false\n})\nexport class SortComponent implements ControlValueAccessor {\n  protected touchedDragBar = false;\n\n  protected settingsItems: DropdownSelectItem<SortOption>[] = [];\n\n  protected errors: { [key: string]: { [key: string]: boolean } | null } = {};\n\n  /** define if list is opened */\n  isOpen = false;\n  /** define if element is touched */\n  touched = false;\n\n  @Input() names: NameItem[] = [];\n\n  @Input() options: SortOption[] = [];\n\n  @Input() translations: { [en: string]: string } = {};\n\n  @Input() settings?: { [name: string]: SortOption[] };\n\n  @Input() input?: { [key: string]: any }[];\n\n  @Input()\n  @HostBinding('class.disabled')\n  disabled = false;\n\n  /**\n   * Enable type text animation for label\n   */\n  @Input() labelAnimation = false;\n\n  @Output() settingsChanged = new EventEmitter<{\n    [name: string]: SortOption[]\n  }>();\n\n  @Output() output = new EventEmitter<{ [key: string]: any }[]>();\n\n  @Output() changed = new EventEmitter<SortOption[]>();\n\n  @ViewChild('selectedSetting') selected?: DropdownSelectComponent;\n  @ViewChild('settingsName') settingsName?: ElementRef<HTMLInputElement>;\n\n  protected available: NameItem[] = [];\n\n  constructor(\n    protected change: ChangeDetectorRef,\n    private readonly globalSettings: InputWrappersDefaultSettingsService\n  ) {\n    this.labelAnimation = this.globalSettings.labelAnimation.editInput;\n  }\n\n  ngOnChanges(changes: SimpleChanges): void {\n    if (changes.settings) {\n      if (this.settings) {\n        this.updateSettingsItems();\n      } else {\n        this.settingsItems = [];\n      }\n      this.sort();\n    }\n\n    if (changes.input) {\n      this.sort();\n    }\n\n    if ((changes.names || changes.options) && this.names && this.options) {\n      this.setAvailable();\n    }\n  }\n\n  toggle(event: any, touched = this.touchedDragBar): void {\n    if (touched) {\n      return;\n    }\n    event.stopPropagation();\n    this.touchedDragBar = false;\n    if (this.isOpen) {\n      this.isOpen = false;\n    } else {\n      this.open();\n    }\n  }\n\n  close(touched = this.touchedDragBar): void {\n    if (!touched) {\n      this.isOpen = false;\n      this.touchedDragBar = false;\n    } else {\n      this.touchedDragBar = touched;\n    }\n  }\n\n  open(): void {\n    if (!this.isOpen) {\n      this.isOpen = true;\n      this.touchedDragBar = false;\n\n      setTimeout(() => {\n        this.checkSettingSelection();\n      });\n    }\n  }\n\n  checkSettingSelection() {\n    if (\n      this.selected?.selected &&\n      JSON.stringify(this.selected.selected.templateData) !==\n      JSON.stringify(this.options)\n    ) {\n      this.selected.selected = undefined;\n    }\n  }\n\n  onTouchedDragBar(touched: boolean, element: any): void {\n    this.touchedDragBar = touched;\n    element.parentElement.style.width = 0;\n  }\n\n  add(option: SortOption) {\n    if (this.options.find((o) => o.name === option.name)) {\n      return;\n    }\n    option.id = this.options.length + 1;\n    this.options.push(option);\n    this.onChanged();\n    this.setAvailable()\n  }\n\n  remove(option: SortOption) {\n    this.options = this.options.filter((sort) => sort.name !== option.name);\n    this.options.forEach((o, i) => (o.id = i));\n    this.onChanged();\n    this.setAvailable();\n  }\n\n  drop(event: CdkDragDrop<SortOption[]>) {\n    moveItemInArray(this.options, event.previousIndex, event.currentIndex);\n    this.options.forEach((o, i) => (o.id = i));\n    this.onChange({ sort: this.options });\n    this.onChanged();\n  }\n\n  setAvailable() {\n    this.available = this.names.filter(\n      (name) => !this.options.find((option) => option.name === name.name)\n    );\n  }\n\n  sort() {\n    if (this.input) {\n      this.output.emit(sort(this.input, this.options));\n    }\n  }\n\n  onChange = (value: { sort: SortOption[]; names?: NameItem[] }) => { };\n\n  onTouched = () => { };\n\n  writeValue(value: { sort: SortOption[]; names?: NameItem[] }): void {\n    this.options = value.sort;\n    this.names = value.names || this.names;\n    this.setAvailable();\n  }\n\n  changedOption(option: SortOption, index: number) {\n    this.options[index] = option;\n    this.onChanged();\n  }\n\n  registerOnChange(onChange: any): void {\n    this.onChange = onChange;\n  }\n\n  registerOnTouched(onTouched: any): void {\n    this.onTouched = onTouched;\n  }\n\n  setDisabledState(disabled: boolean): void {\n    this.disabled = disabled;\n  }\n\n  protected setSettings(item: DropdownSelectItem<SortOption[]>) {\n    if (item.templateData) {\n      this.options = cloneDeep(item.templateData);\n      if (this.settingsName) {\n        this.settingsName.nativeElement.value = item.id.toString();\n      }\n      this.setAvailable();\n      this.onChange({ sort: this.options });\n      this.changed.emit(this.options);\n    }\n  }\n\n  check() {\n    const value = this.settingsName?.nativeElement.value;\n    const err = !value || value === '';\n    this.errors.settingsName =\n      (err && {\n        settingsNameError: !value || value === '',\n      }) ||\n      null;\n  }\n\n  onChanged() {\n    this.checkSettingSelection();\n    this.onChange({ sort: this.options });\n    this.changed.emit(this.options);\n    this.sort();\n  }\n\n  saveSettings(input: HTMLInputElement) {\n    const name = input.value;\n    if (name && name !== '' && this.options) {\n      if (!keys(this.settings || {}).find((key) => key === name)) {\n        this.settings = {\n          ...(this.settings || {}),\n          [name]: cloneDeep(this.options),\n        };\n      } else {\n        if (this.settings) {\n          this.settings[name] = cloneDeep(this.options);\n        }\n      }\n      this.updateSettingsItems();\n      this.settingsChanged.emit(this.settings);\n      setTimeout(() => {\n        if (this.selected) {\n          this.selected.selected = this.selected.items.find(\n            (item) => item.id === name\n          );\n        }\n      });\n    } else {\n      this.errors.settingsName = {\n        settingsNameError: !name || name === '',\n      };\n      input.classList.add('ng-touched');\n    }\n  }\n\n  protected removeSettings(name?: string | number) {\n    if (name && this.settings?.[name]) {\n      // eslint-disable-next-line @typescript-eslint/no-dynamic-delete\n      delete this.settings[name];\n      this.updateSettingsItems();\n      this.settingsChanged.emit(this.settings);\n    }\n  }\n\n  protected updateSettingsItems() {\n    this.settingsItems = keysValues(this.settings || {}).map(\n      ([key, value]) => ({\n        id: key,\n        text: key,\n        templateData: value,\n      })\n    );\n  }\n}\n","<button\n  oblButton\n  icon=\"asc\"\n  oblBadge\n  [show]=\"!!options.length\"\n  cdkOverlayOrigin\n  #dropDown=\"cdkOverlayOrigin\"\n  (click)=\"toggle($event, false)\"\n  #parent\n></button>\n\n<ng-template\n  cdkConnectedOverlay\n  [cdkConnectedOverlayOrigin]=\"dropDown\"\n  [cdkConnectedOverlayOpen]=\"isOpen\"\n  [cdkConnectedOverlayOffsetX]=\"2\"\n  (overlayOutsideClick)=\"toggle($event)\"\n>\n  <div\n    class=\"dropdown-list\"\n    [style.min-width.px]=\"376\"\n    [style.max-width]=\"'100vw'\"\n    #list\n    cdkDrag\n  >\n    <obl-drag-bar\n      (onTouched)=\"onTouchedDragBar($event, list)\"\n      (onClose)=\"close(false)\"\n      cdkDragHandle\n      #dragbar\n    ></obl-drag-bar>\n    @if (settings) {\n      <div class=\"row\">\n        @if (settingsItems.length) {\n          <obl-dropdown-select\n            [label]=\"'Saved:' | oblTranslation : translations\"\n            [labelAnimation]=\"labelAnimation\"\n            [items]=\"settingsItems\"\n            (changed)=\"setSettings($event)\"\n            #selectedSetting\n          >\n            @if (selectedSetting.selected) {\n              <ng-container suffix>\n                <button\n                  oblButton\n                  icon=\"subtract\"\n                  (click)=\"removeSettings(selectedSetting?.selected?.id)\"\n                ></button>\n              </ng-container>\n            }\n          </obl-dropdown-select>\n        }\n        <obl-input-wrapper\n          [label]=\"'Setting name:' | oblTranslation : translations\"\n          [labelAnimation]=\"labelAnimation\"\n          [errors]=\"errors['settingsName']\"\n          [translations]=\"translations\"\n        >\n          <input\n            oblInput\n            type=\"text\"\n            (change)=\"check()\"\n            #settingsName\n            [required]=\"errors['settingsName']\"\n          />\n          <button\n            suffix\n            oblButton\n            icon=\"save\"\n            (click)=\"saveSettings(settingsName)\"\n          ></button>\n        </obl-input-wrapper>\n      </div>\n    }\n    @if (options.length) {\n      <div\n        class=\"list\"\n        cdkDropList\n        (cdkDropListDropped)=\"drop($event)\"\n        style=\"z-index: 100000\"\n      >\n        @for (option of options; let index = $index; track option;) {\n          <obl-sorting-option\n            [option]=\"option\"\n            [names]=\"names\"\n            mode=\"remove\"\n            [translations]=\"translations\"\n            [labelAnimation]=\"labelAnimation\"\n            (remove)=\"remove($event)\"\n            (changed)=\"changedOption($event, index)\"\n            cdkDrag\n          ></obl-sorting-option>\n        }\n      </div>\n    }\n    <obl-sorting-option\n      [names]=\"available\"\n      mode=\"add\"\n      [translations]=\"translations\"\n      [labelAnimation]=\"labelAnimation\"\n      (add)=\"add($event)\"\n    ></obl-sorting-option>\n  </div>\n</ng-template>\n","import { Component, Input, Output, EventEmitter, SimpleChanges } from '@angular/core';\n\nimport { SortOption } from '../../interfaces/sort-option';\n\n@Component({\n    selector: 'thead td[obl-table-sort]',\n    templateUrl: './table-sort.component.html',\n    styleUrl: './table-sort.component.scss',\n    standalone: false\n})\nexport class TableSortComponent {\n  @Input({ required: true }) sortName!: string;\n\n  sortOrder?: 'ASC' | 'DESC';\n\n  position: number = 0;\n\n  @Input() sort: SortOption[] = [];\n\n  @Output() changed = new EventEmitter<SortOption[]>();\n\n  order() {\n    const { sortOrder } = this;\n    if (sortOrder) {\n      return sortOrder === 'ASC' ? '↑' : '↓';\n    }\n    return ' ';\n  }\n\n  ngOnChanges(changes: SimpleChanges): void {\n    if ((changes.sortName || changes.sortOrder) && this.sortOrder) {\n      this.set();\n    }\n    if (changes.sort) {\n      const find = this.sort.find(sort => sort.name === this.sortName);\n      this.position = this.sort.findIndex(sort => sort.name === this.sortName);\n      if (!find) {\n        this.sortOrder = undefined;\n      } else {\n        this.sortOrder = find.order;\n      }\n    }\n  }\n\n  set() {\n    const find = this.sort.find(sort => sort.name === this.sortName);\n    this.position = this.sort.findIndex(sort => sort.name === this.sortName);\n    if (find && this.sortOrder) {\n      find.order = this.sortOrder;\n    } else {\n    this.sort = this.sortOrder\n      ? [\n          ...this.sort,\n          {\n            id: 0,\n            name: this.sortName,\n            order: this.sortOrder,\n          },\n        ]\n      : this.sort.filter(sort => sort.name !== this.sortName);\n    }\n\n    this.changed.emit(this.sort);\n  }\n\n  change() {\n    const { sortOrder } = this;\n\n    if (!sortOrder) {\n      this.sortOrder = 'ASC';\n    } else {\n      this.sortOrder = sortOrder === 'ASC' ? 'DESC' : undefined;\n    }\n\n    this.set();\n  }\n\n  switchPos(event: MouseEvent) {\n    this.sort = [(this.sort.pop() as any), ...this.sort];\n    this.changed.emit(this.sort);\n    event.stopPropagation()\n  }\n}\n","<button oblButton (click)=\"change()\">\n  <ng-content></ng-content>\n\n  <span>\n    <span>{{ order() }}</span>\n    @if (sort.length > 1 && position !== -1) {\n      <button\n        oblButton\n        class=\"switch-position\"\n        (click)=\"switchPos($event)\"\n      >\n        {{ position + 1 }}\n      </button>\n    }\n  </span>\n</button>\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { DragDropModule } from '@angular/cdk/drag-drop';\nimport { OverlayModule } from '@angular/cdk/overlay';\n\nimport { DropdownSelectModule } from '@obliczeniowo/elementary/dropdown-select';\nimport { ButtonsModule } from '@obliczeniowo/elementary/buttons';\nimport { TextPipesModule } from '@obliczeniowo/elementary/text-pipes';\n\nimport { SortingOptionComponent } from './components/sorting-option/sorting-option.component';\nimport { SortComponent } from './components/sort/sort.component';\nimport { InputModule } from '@obliczeniowo/elementary/input';\nimport { BadgeDirective } from '@obliczeniowo/elementary/badge';\nimport { TableSortComponent } from './components/table-sort/table-sort.component';\n\n@NgModule({\n  declarations: [\n    SortingOptionComponent,\n    SortComponent,\n    TableSortComponent\n  ],\n  imports: [\n    CommonModule,\n    OverlayModule, \n    DragDropModule, \n    DropdownSelectModule,\n    ButtonsModule,\n    TextPipesModule,\n    InputModule,\n    BadgeDirective\n  ],\n  exports: [\n    SortingOptionComponent,\n    SortComponent,\n    TableSortComponent\n  ]\n})\nexport class SortingModule { }\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i2","i4","i3","i5","i7.SortingOptionComponent","i8","i1"],"mappings":";;;;;;;;;;;;;;;;;;;;;MA+Ba,sBAAsB,CAAA;AA0Cd,IAAA,QAAA;AAzCV,IAAA,MAAM,GAAe;AAC5B,QAAA,EAAE,EAAE,CAAC;AACL,QAAA,IAAI,EAAE,EAAE;AACR,QAAA,KAAK,EAAE,KAAK;KACb;IAEQ,KAAK,GAAe,EAAE;IAEtB,YAAY,GAA6B,EAAE;IAE3C,IAAI,GAAgC,QAAQ;AAE3C,IAAA,OAAO,GAAG,IAAI,YAAY,EAAc;AACxC,IAAA,WAAW,GAAG,IAAI,YAAY,EAAc;AAC5C,IAAA,YAAY,GAAG,IAAI,YAAY,EAAc;AAC7C,IAAA,GAAG,GAAG,IAAI,YAAY,EAAc;AACpC,IAAA,MAAM,GAAG,IAAI,YAAY,EAAc;IAEvC,SAAS,GAA8B,EAAE;AAEnD,IAAA,KAAK,GAA8B;AACjC,QAAA;AACE,YAAA,EAAE,EAAE,KAAK;AACT,YAAA,IAAI,EAAE,WAAW;AAClB,SAAA;AACD,QAAA;AACE,YAAA,EAAE,EAAE,MAAM;AACV,YAAA,IAAI,EAAE,YAAY;AACnB,SAAA;KACF;IAID,QAAQ,GAAG,KAAK;AAEhB;;AAEG;IACM,cAAc,GAAG,KAAK;AAE/B,IAAA,WAAA,CACmB,QAA6C,EAAA;QAA7C,IAAQ,CAAA,QAAA,GAAR,QAAQ;QAEzB,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,SAAS;;AAG9D,IAAA,WAAW,CAAC,OAAsB,EAAA;QAChC,IAAI,OAAO,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,EAAE;AAC/B,YAAA,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,MAAM;gBACzC,EAAE,EAAE,IAAI,CAAC,IAAI;gBACb,IAAI,EAAE,IAAI,CAAC,IAAI;AAChB,aAAA,CAAC,CAAC;;AAEL,QAAA,IAAI,OAAO,CAAC,YAAY,EAAE;AACxB,YAAA,IAAI,CAAC,KAAK,CAAC,OAAO,CAChB,CAAC,KAAK,MACH,KAAK,CAAC,IAAI;gBACT,KAAK,CAAC,EAAE,KAAK;AACX,sBAAE,IAAI,CAAC,YAAY,CAAC,SAAS,IAAI;sBAC/B,IAAI,CAAC,YAAY,CAAC,UAAU,IAAI,YAAY,CAAC,CACtD;;;AAIL,IAAA,QAAQ,CAAC,KAA8B,EAAA;QACrC,IAAI,CAAC,MAAM,CAAC,KAAK,GAAG,KAAK,CAAC,EAAS;QACnC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC;QAC9B,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC;;AAGrC,IAAA,OAAO,CAAC,IAA6B,EAAA;QACnC,IAAI,CAAC,MAAM,CAAC,IAAI,GAAG,IAAI,CAAC,EAAY;QAEpC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC;QAC9B,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC;;AAGpC,IAAA,QAAQ,GAAG,CAAC,KAA+C,KAAI,GAAG;AAElE,IAAA,SAAS,GAAG,MAAK,GAAG;AAEpB,IAAA,UAAU,CAAC,KAA+C,EAAA;AACxD,QAAA,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC,IAAI;QACxB,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK;AACtC,QAAA,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,MAAM;YACzC,EAAE,EAAE,IAAI,CAAC,IAAI;YACb,IAAI,EAAE,IAAI,CAAC,IAAI;AAChB,SAAA,CAAC,CAAC;;AAGL,IAAA,gBAAgB,CAAC,QAAa,EAAA;AAC5B,QAAA,IAAI,CAAC,QAAQ,GAAG,QAAQ;;AAG1B,IAAA,iBAAiB,CAAC,SAAc,EAAA;AAC9B,QAAA,IAAI,CAAC,SAAS,GAAG,SAAS;;AAG5B,IAAA,gBAAgB,CAAC,QAAiB,EAAA;AAChC,QAAA,IAAI,CAAC,QAAQ,GAAG,QAAQ;;IAG1B,KAAK,GAAA;QACH,IAAI,IAAI,CAAC,MAAM,CAAC,IAAI,KAAK,EAAE,EAAE;AAC3B,YAAA,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC;AACjC,YAAA,IAAI,CAAC,MAAM,CAAC,IAAI,GAAG,EAAE;;;IAIzB,QAAQ,GAAA;QACN,IAAI,IAAI,CAAC,MAAM,CAAC,IAAI,KAAK,EAAE,EAAE;YAC3B,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC;;;uGAhHtB,sBAAsB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,mCAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAtB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,sBAAsB,EATpB,YAAA,EAAA,KAAA,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,EAAA,MAAA,EAAA,QAAA,EAAA,KAAA,EAAA,OAAA,EAAA,YAAA,EAAA,cAAA,EAAA,IAAA,EAAA,MAAA,EAAA,QAAA,EAAA,UAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,EAAA,OAAA,EAAA,EAAA,OAAA,EAAA,SAAA,EAAA,WAAA,EAAA,aAAA,EAAA,YAAA,EAAA,cAAA,EAAA,GAAA,EAAA,KAAA,EAAA,MAAA,EAAA,QAAA,EAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,gBAAA,EAAA,eAAA,EAAA,EAAA,EAAA,SAAA,EAAA;AACP,YAAA;AACI,gBAAA,OAAO,EAAE,iBAAiB;AAC1B,gBAAA,KAAK,EAAE,IAAI;AACX,gBAAA,WAAW,EAAE,sBAAsB;AACtC,aAAA;AACJ,SAAA,EAAA,aAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EC5BL,4vBA0BA,EAAA,MAAA,EAAA,CAAA,kKAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,uBAAA,EAAA,QAAA,EAAA,qBAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,OAAA,EAAA,OAAA,EAAA,gBAAA,EAAA,gBAAA,EAAA,gBAAA,EAAA,QAAA,EAAA,QAAA,EAAA,QAAA,EAAA,UAAA,CAAA,EAAA,OAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,eAAA,EAAA,QAAA,EAAA,wBAAA,EAAA,MAAA,EAAA,CAAA,WAAA,EAAA,MAAA,EAAA,kBAAA,EAAA,SAAA,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,QAAA,CAAA,EAAA,QAAA,EAAA,CAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAAC,IAAA,CAAA,eAAA,EAAA,IAAA,EAAA,gBAAA,EAAA,CAAA,EAAA,CAAA;;2FDKa,sBAAsB,EAAA,UAAA,EAAA,CAAA;kBAblC,SAAS;AACI,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,oBAAoB,EAGnB,SAAA,EAAA;AACP,wBAAA;AACI,4BAAA,OAAO,EAAE,iBAAiB;AAC1B,4BAAA,KAAK,EAAE,IAAI;AACX,4BAAA,WAAW,EAAwB,sBAAA;AACtC,yBAAA;AACJ,qBAAA,EAAA,UAAA,EACW,KAAK,EAAA,QAAA,EAAA,4vBAAA,EAAA,MAAA,EAAA,CAAA,kKAAA,CAAA,EAAA;wGAGV,MAAM,EAAA,CAAA;sBAAd;gBAMQ,KAAK,EAAA,CAAA;sBAAb;gBAEQ,YAAY,EAAA,CAAA;sBAApB;gBAEQ,IAAI,EAAA,CAAA;sBAAZ;gBAES,OAAO,EAAA,CAAA;sBAAhB;gBACS,WAAW,EAAA,CAAA;sBAApB;gBACS,YAAY,EAAA,CAAA;sBAArB;gBACS,GAAG,EAAA,CAAA;sBAAZ;gBACS,MAAM,EAAA,CAAA;sBAAf;gBAiBD,QAAQ,EAAA,CAAA;sBAFP;;sBACA,WAAW;uBAAC,gBAAgB;gBAMpB,cAAc,EAAA,CAAA;sBAAtB;;;AEpEa,SAAA,IAAI,CAAC,IAA8B,EAAE,OAAqB,EAAA;AACxE,IAAA,IAAI,OAAO,CAAC,MAAM,EAAE;QAClB,MAAM,IAAI,GAAG,CAAC,KAAa,EAAE,MAAc,EAAE,KAAqB,KAAI;YACpE,OAAO,KAAK,KAAK;AACf,kBAAE,KAAK,CAAC,aAAa,CAAC,MAAM;AAC5B,kBAAE,MAAM,CAAC,aAAa,CAAC,KAAK,CAAC;AACjC,SAAC;QAED,MAAM,WAAW,GAAG,CAClB,KAAa,EACb,MAAc,EACd,KAAqB,KACnB;AACF,YAAA,OAAO,KAAK,KAAK,KAAK,GAAG,KAAK,GAAG,MAAM,GAAG,MAAM,GAAG,KAAK;AAC1D,SAAC;QAED,OAAO,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,KAAI;YACxB,IAAI,OAAO,GAAG,CAAC;AACf,YAAA,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE;gBAC5B,OAAO;AACL,oBAAA,OAAO,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,QAAQ;AAChC,wBAAA,OAAO,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK;0BACxB,IAAI,CACJ,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE,EACzB,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE,EACzB,MAAM,CAAC,KAAK;0BAEZ,WAAW,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC,KAAK,CAAC;AAE/D,gBAAA,IAAI,OAAO,KAAK,CAAC,EAAE;oBACjB;;;AAGJ,YAAA,OAAO,OAAO;AAChB,SAAC,CAAC;;SACG;AACL,QAAA,OAAO,IAAI;;AAEf;;MCHa,aAAa,CAAA;AA6CZ,IAAA,MAAA;AACO,IAAA,cAAA;IA7CT,cAAc,GAAG,KAAK;IAEtB,aAAa,GAAqC,EAAE;IAEpD,MAAM,GAAyD,EAAE;;IAG3E,MAAM,GAAG,KAAK;;IAEd,OAAO,GAAG,KAAK;IAEN,KAAK,GAAe,EAAE;IAEtB,OAAO,GAAiB,EAAE;IAE1B,YAAY,GAA6B,EAAE;AAE3C,IAAA,QAAQ;AAER,IAAA,KAAK;IAId,QAAQ,GAAG,KAAK;AAEhB;;AAEG;IACM,cAAc,GAAG,KAAK;AAErB,IAAA,eAAe,GAAG,IAAI,YAAY,EAExC;AAEM,IAAA,MAAM,GAAG,IAAI,YAAY,EAA4B;AAErD,IAAA,OAAO,GAAG,IAAI,YAAY,EAAgB;AAEtB,IAAA,QAAQ;AACX,IAAA,YAAY;IAE7B,SAAS,GAAe,EAAE;IAEpC,WACY,CAAA,MAAyB,EAClB,cAAmD,EAAA;QAD1D,IAAM,CAAA,MAAA,GAAN,MAAM;QACC,IAAc,CAAA,cAAA,GAAd,cAAc;QAE/B,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,cAAc,CAAC,cAAc,CAAC,SAAS;;AAGpE,IAAA,WAAW,CAAC,OAAsB,EAAA;AAChC,QAAA,IAAI,OAAO,CAAC,QAAQ,EAAE;AACpB,YAAA,IAAI,IAAI,CAAC,QAAQ,EAAE;gBACjB,IAAI,CAAC,mBAAmB,EAAE;;iBACrB;AACL,gBAAA,IAAI,CAAC,aAAa,GAAG,EAAE;;YAEzB,IAAI,CAAC,IAAI,EAAE;;AAGb,QAAA,IAAI,OAAO,CAAC,KAAK,EAAE;YACjB,IAAI,CAAC,IAAI,EAAE;;AAGb,QAAA,IAAI,CAAC,OAAO,CAAC,KAAK,IAAI,OAAO,CAAC,OAAO,KAAK,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,OAAO,EAAE;YACpE,IAAI,CAAC,YAAY,EAAE;;;AAIvB,IAAA,MAAM,CAAC,KAAU,EAAE,OAAO,GAAG,IAAI,CAAC,cAAc,EAAA;QAC9C,IAAI,OAAO,EAAE;YACX;;QAEF,KAAK,CAAC,eAAe,EAAE;AACvB,QAAA,IAAI,CAAC,cAAc,GAAG,KAAK;AAC3B,QAAA,IAAI,IAAI,CAAC,MAAM,EAAE;AACf,YAAA,IAAI,CAAC,MAAM,GAAG,KAAK;;aACd;YACL,IAAI,CAAC,IAAI,EAAE;;;AAIf,IAAA,KAAK,CAAC,OAAO,GAAG,IAAI,CAAC,cAAc,EAAA;QACjC,IAAI,CAAC,OAAO,EAAE;AACZ,YAAA,IAAI,CAAC,MAAM,GAAG,KAAK;AACnB,YAAA,IAAI,CAAC,cAAc,GAAG,KAAK;;aACtB;AACL,YAAA,IAAI,CAAC,cAAc,GAAG,OAAO;;;IAIjC,IAAI,GAAA;AACF,QAAA,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE;AAChB,YAAA,IAAI,CAAC,MAAM,GAAG,IAAI;AAClB,YAAA,IAAI,CAAC,cAAc,GAAG,KAAK;YAE3B,UAAU,CAAC,MAAK;gBACd,IAAI,CAAC,qBAAqB,EAAE;AAC9B,aAAC,CAAC;;;IAIN,qBAAqB,GAAA;AACnB,QAAA,IACE,IAAI,CAAC,QAAQ,EAAE,QAAQ;YACvB,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,YAAY,CAAC;gBACnD,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,EAC5B;AACA,YAAA,IAAI,CAAC,QAAQ,CAAC,QAAQ,GAAG,SAAS;;;IAItC,gBAAgB,CAAC,OAAgB,EAAE,OAAY,EAAA;AAC7C,QAAA,IAAI,CAAC,cAAc,GAAG,OAAO;QAC7B,OAAO,CAAC,aAAa,CAAC,KAAK,CAAC,KAAK,GAAG,CAAC;;AAGvC,IAAA,GAAG,CAAC,MAAkB,EAAA;QACpB,IAAI,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,KAAK,MAAM,CAAC,IAAI,CAAC,EAAE;YACpD;;QAEF,MAAM,CAAC,EAAE,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC;AACnC,QAAA,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC;QACzB,IAAI,CAAC,SAAS,EAAE;QAChB,IAAI,CAAC,YAAY,EAAE;;AAGrB,IAAA,MAAM,CAAC,MAAkB,EAAA;QACvB,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,IAAI,KAAK,MAAM,CAAC,IAAI,CAAC;QACvE,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;QAC1C,IAAI,CAAC,SAAS,EAAE;QAChB,IAAI,CAAC,YAAY,EAAE;;AAGrB,IAAA,IAAI,CAAC,KAAgC,EAAA;AACnC,QAAA,eAAe,CAAC,IAAI,CAAC,OAAO,EAAE,KAAK,CAAC,aAAa,EAAE,KAAK,CAAC,YAAY,CAAC;QACtE,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;QAC1C,IAAI,CAAC,QAAQ,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,OAAO,EAAE,CAAC;QACrC,IAAI,CAAC,SAAS,EAAE;;IAGlB,YAAY,GAAA;AACV,QAAA,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAChC,CAAC,IAAI,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,MAAM,KAAK,MAAM,CAAC,IAAI,KAAK,IAAI,CAAC,IAAI,CAAC,CACpE;;IAGH,IAAI,GAAA;AACF,QAAA,IAAI,IAAI,CAAC,KAAK,EAAE;AACd,YAAA,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;;;AAIpD,IAAA,QAAQ,GAAG,CAAC,KAAiD,KAAI,GAAI;AAErE,IAAA,SAAS,GAAG,MAAK,GAAI;AAErB,IAAA,UAAU,CAAC,KAAiD,EAAA;AAC1D,QAAA,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC,IAAI;QACzB,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK;QACtC,IAAI,CAAC,YAAY,EAAE;;IAGrB,aAAa,CAAC,MAAkB,EAAE,KAAa,EAAA;AAC7C,QAAA,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,MAAM;QAC5B,IAAI,CAAC,SAAS,EAAE;;AAGlB,IAAA,gBAAgB,CAAC,QAAa,EAAA;AAC5B,QAAA,IAAI,CAAC,QAAQ,GAAG,QAAQ;;AAG1B,IAAA,iBAAiB,CAAC,SAAc,EAAA;AAC9B,QAAA,IAAI,CAAC,SAAS,GAAG,SAAS;;AAG5B,IAAA,gBAAgB,CAAC,QAAiB,EAAA;AAChC,QAAA,IAAI,CAAC,QAAQ,GAAG,QAAQ;;AAGhB,IAAA,WAAW,CAAC,IAAsC,EAAA;AAC1D,QAAA,IAAI,IAAI,CAAC,YAAY,EAAE;YACrB,IAAI,CAAC,OAAO,GAAG,SAAS,CAAC,IAAI,CAAC,YAAY,CAAC;AAC3C,YAAA,IAAI,IAAI,CAAC,YAAY,EAAE;AACrB,gBAAA,IAAI,CAAC,YAAY,CAAC,aAAa,CAAC,KAAK,GAAG,IAAI,CAAC,EAAE,CAAC,QAAQ,EAAE;;YAE5D,IAAI,CAAC,YAAY,EAAE;YACnB,IAAI,CAAC,QAAQ,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,OAAO,EAAE,CAAC;YACrC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC;;;IAInC,KAAK,GAAA;QACH,MAAM,KAAK,GAAG,IAAI,CAAC,YAAY,EAAE,aAAa,CAAC,KAAK;QACpD,MAAM,GAAG,GAAG,CAAC,KAAK,IAAI,KAAK,KAAK,EAAE;QAClC,IAAI,CAAC,MAAM,CAAC,YAAY;AACtB,YAAA,CAAC,GAAG,IAAI;AACN,gBAAA,iBAAiB,EAAE,CAAC,KAAK,IAAI,KAAK,KAAK,EAAE;aAC1C;AACD,gBAAA,IAAI;;IAGR,SAAS,GAAA;QACP,IAAI,CAAC,qBAAqB,EAAE;QAC5B,IAAI,CAAC,QAAQ,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,OAAO,EAAE,CAAC;QACrC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC;QAC/B,IAAI,CAAC,IAAI,EAAE;;AAGb,IAAA,YAAY,CAAC,KAAuB,EAAA;AAClC,QAAA,MAAM,IAAI,GAAG,KAAK,CAAC,KAAK;QACxB,IAAI,IAAI,IAAI,IAAI,KAAK,EAAE,IAAI,IAAI,CAAC,OAAO,EAAE;YACvC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,KAAK,GAAG,KAAK,IAAI,CAAC,EAAE;gBAC1D,IAAI,CAAC,QAAQ,GAAG;AACd,oBAAA,IAAI,IAAI,CAAC,QAAQ,IAAI,EAAE,CAAC;oBACxB,CAAC,IAAI,GAAG,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC;iBAChC;;iBACI;AACL,gBAAA,IAAI,IAAI,CAAC,QAAQ,EAAE;AACjB,oBAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC;;;YAGjD,IAAI,CAAC,mBAAmB,EAAE;YAC1B,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC;YACxC,UAAU,CAAC,MAAK;AACd,gBAAA,IAAI,IAAI,CAAC,QAAQ,EAAE;oBACjB,IAAI,CAAC,QAAQ,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,CAC/C,CAAC,IAAI,KAAK,IAAI,CAAC,EAAE,KAAK,IAAI,CAC3B;;AAEL,aAAC,CAAC;;aACG;AACL,YAAA,IAAI,CAAC,MAAM,CAAC,YAAY,GAAG;AACzB,gBAAA,iBAAiB,EAAE,CAAC,IAAI,IAAI,IAAI,KAAK,EAAE;aACxC;AACD,YAAA,KAAK,CAAC,SAAS,CAAC,GAAG,CAAC,YAAY,CAAC;;;AAI3B,IAAA,cAAc,CAAC,IAAsB,EAAA;QAC7C,IAAI,IAAI,IAAI,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,EAAE;;AAEjC,YAAA,OAAO,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC;YAC1B,IAAI,CAAC,mBAAmB,EAAE;YAC1B,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC;;;IAIlC,mBAAmB,GAAA;QAC3B,IAAI,CAAC,aAAa,GAAG,UAAU,CAAC,IAAI,CAAC,QAAQ,IAAI,EAAE,CAAC,CAAC,GAAG,CACtD,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,MAAM;AACjB,YAAA,EAAE,EAAE,GAAG;AACP,YAAA,IAAI,EAAE,GAAG;AACT,YAAA,YAAY,EAAE,KAAK;AACpB,SAAA,CAAC,CACH;;uGAhQQ,aAAa,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,iBAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,mCAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAb,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,aAAa,EATX,YAAA,EAAA,KAAA,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,EAAA,KAAA,EAAA,OAAA,EAAA,OAAA,EAAA,SAAA,EAAA,YAAA,EAAA,cAAA,EAAA,QAAA,EAAA,UAAA,EAAA,KAAA,EAAA,OAAA,EAAA,QAAA,EAAA,UAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,EAAA,OAAA,EAAA,EAAA,eAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,gBAAA,EAAA,eAAA,EAAA,EAAA,EAAA,SAAA,EAAA;AACP,YAAA;AACI,gBAAA,OAAO,EAAE,iBAAiB;AAC1B,gBAAA,KAAK,EAAE,IAAI;AACX,gBAAA,WAAW,EAAE,aAAa;AAC7B,aAAA;AACJ,SAAA,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,UAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,iBAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,cAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,cAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,CAAA,EAAA,aAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EClCL,q6FAwGA,EAAA,MAAA,EAAA,CAAA,0kFAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,mBAAA,EAAA,QAAA,EAAA,qEAAA,EAAA,MAAA,EAAA,CAAA,2BAAA,EAAA,8BAAA,EAAA,qCAAA,EAAA,4BAAA,EAAA,4BAAA,EAAA,0BAAA,EAAA,2BAAA,EAAA,6BAAA,EAAA,8BAAA,EAAA,kCAAA,EAAA,+BAAA,EAAA,mCAAA,EAAA,mCAAA,EAAA,yBAAA,EAAA,iCAAA,EAAA,sCAAA,EAAA,gCAAA,EAAA,iCAAA,EAAA,uCAAA,EAAA,kCAAA,EAAA,yBAAA,EAAA,wCAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,EAAA,gBAAA,EAAA,QAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,qBAAA,CAAA,EAAA,QAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,gBAAA,EAAA,QAAA,EAAA,4DAAA,EAAA,QAAA,EAAA,CAAA,kBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,IAAA,CAAA,WAAA,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,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,EAAAA,IAAA,CAAA,OAAA,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,EAAAA,IAAA,CAAA,aAAA,EAAA,QAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,CAAA,uBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,uBAAA,EAAA,QAAA,EAAA,qBAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,OAAA,EAAA,OAAA,EAAA,gBAAA,EAAA,gBAAA,EAAA,gBAAA,EAAA,QAAA,EAAA,QAAA,EAAA,QAAA,EAAA,UAAA,CAAA,EAAA,OAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,gBAAA,EAAA,QAAA,EAAA,cAAA,EAAA,OAAA,EAAA,CAAA,WAAA,EAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,EAAA,CAAA,eAAA,EAAA,QAAA,EAAA,wBAAA,EAAA,MAAA,EAAA,CAAA,WAAA,EAAA,MAAA,EAAA,kBAAA,EAAA,SAAA,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,QAAA,CAAA,EAAA,QAAA,EAAA,CAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,cAAA,EAAA,QAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,CAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,qBAAA,EAAA,QAAA,EAAA,mBAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,SAAA,EAAA,aAAA,EAAA,MAAA,EAAA,QAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,OAAA,CAAA,EAAA,OAAA,EAAA,CAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,cAAA,EAAA,QAAA,EAAA,YAAA,EAAA,MAAA,EAAA,CAAA,MAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,sBAAA,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,CAAA,QAAA,EAAA,OAAA,EAAA,cAAA,EAAA,MAAA,EAAA,UAAA,EAAA,gBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,SAAA,EAAA,aAAA,EAAA,cAAA,EAAA,KAAA,EAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAAC,IAAA,CAAA,eAAA,EAAA,IAAA,EAAA,gBAAA,EAAA,CAAA,EAAA,CAAA;;2FDnEa,aAAa,EAAA,UAAA,EAAA,CAAA;kBAbzB,SAAS;AACI,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,UAAU,EAGT,SAAA,EAAA;AACP,wBAAA;AACI,4BAAA,OAAO,EAAE,iBAAiB;AAC1B,4BAAA,KAAK,EAAE,IAAI;AACX,4BAAA,WAAW,EAAe,aAAA;AAC7B,yBAAA;AACJ,qBAAA,EAAA,UAAA,EACW,KAAK,EAAA,QAAA,EAAA,q6FAAA,EAAA,MAAA,EAAA,CAAA,0kFAAA,CAAA,EAAA;wIAcV,KAAK,EAAA,CAAA;sBAAb;gBAEQ,OAAO,EAAA,CAAA;sBAAf;gBAEQ,YAAY,EAAA,CAAA;sBAApB;gBAEQ,QAAQ,EAAA,CAAA;sBAAhB;gBAEQ,KAAK,EAAA,CAAA;sBAAb;gBAID,QAAQ,EAAA,CAAA;sBAFP;;sBACA,WAAW;uBAAC,gBAAgB;gBAMpB,cAAc,EAAA,CAAA;sBAAtB;gBAES,eAAe,EAAA,CAAA;sBAAxB;gBAIS,MAAM,EAAA,CAAA;sBAAf;gBAES,OAAO,EAAA,CAAA;sBAAhB;gBAE6B,QAAQ,EAAA,CAAA;sBAArC,SAAS;uBAAC,iBAAiB;gBACD,YAAY,EAAA,CAAA;sBAAtC,SAAS;uBAAC,cAAc;;;MEnEd,kBAAkB,CAAA;AACF,IAAA,QAAQ;AAEnC,IAAA,SAAS;IAET,QAAQ,GAAW,CAAC;IAEX,IAAI,GAAiB,EAAE;AAEtB,IAAA,OAAO,GAAG,IAAI,YAAY,EAAgB;IAEpD,KAAK,GAAA;AACH,QAAA,MAAM,EAAE,SAAS,EAAE,GAAG,IAAI;QAC1B,IAAI,SAAS,EAAE;YACb,OAAO,SAAS,KAAK,KAAK,GAAG,GAAG,GAAG,GAAG;;AAExC,QAAA,OAAO,GAAG;;AAGZ,IAAA,WAAW,CAAC,OAAsB,EAAA;AAChC,QAAA,IAAI,CAAC,OAAO,CAAC,QAAQ,IAAI,OAAO,CAAC,SAAS,KAAK,IAAI,CAAC,SAAS,EAAE;YAC7D,IAAI,CAAC,GAAG,EAAE;;AAEZ,QAAA,IAAI,OAAO,CAAC,IAAI,EAAE;YAChB,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,KAAK,IAAI,CAAC,QAAQ,CAAC;YAChE,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,KAAK,IAAI,CAAC,QAAQ,CAAC;YACxE,IAAI,CAAC,IAAI,EAAE;AACT,gBAAA,IAAI,CAAC,SAAS,GAAG,SAAS;;iBACrB;AACL,gBAAA,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,KAAK;;;;IAKjC,GAAG,GAAA;QACD,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,KAAK,IAAI,CAAC,QAAQ,CAAC;QAChE,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,KAAK,IAAI,CAAC,QAAQ,CAAC;AACxE,QAAA,IAAI,IAAI,IAAI,IAAI,CAAC,SAAS,EAAE;AAC1B,YAAA,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,SAAS;;aACtB;AACP,YAAA,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;AACf,kBAAE;oBACE,GAAG,IAAI,CAAC,IAAI;AACZ,oBAAA;AACE,wBAAA,EAAE,EAAE,CAAC;wBACL,IAAI,EAAE,IAAI,CAAC,QAAQ;wBACnB,KAAK,EAAE,IAAI,CAAC,SAAS;AACtB,qBAAA;AACF;AACH,kBAAE,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,KAAK,IAAI,CAAC,QAAQ,CAAC;;QAGzD,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC;;IAG9B,MAAM,GAAA;AACJ,QAAA,MAAM,EAAE,SAAS,EAAE,GAAG,IAAI;QAE1B,IAAI,CAAC,SAAS,EAAE;AACd,YAAA,IAAI,CAAC,SAAS,GAAG,KAAK;;aACjB;AACL,YAAA,IAAI,CAAC,SAAS,GAAG,SAAS,KAAK,KAAK,GAAG,MAAM,GAAG,SAAS;;QAG3D,IAAI,CAAC,GAAG,EAAE;;AAGZ,IAAA,SAAS,CAAC,KAAiB,EAAA;AACzB,QAAA,IAAI,CAAC,IAAI,GAAG,CAAE,IAAI,CAAC,IAAI,CAAC,GAAG,EAAU,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC;QACpD,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC;QAC5B,KAAK,CAAC,eAAe,EAAE;;uGAtEd,kBAAkB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAlB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,kBAAkB,2LCV/B,mWAgBA,EAAA,MAAA,EAAA,CAAA,qVAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,EAAA,CAAA,eAAA,EAAA,QAAA,EAAA,wBAAA,EAAA,MAAA,EAAA,CAAA,WAAA,EAAA,MAAA,EAAA,kBAAA,EAAA,SAAA,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,QAAA,CAAA,EAAA,QAAA,EAAA,CAAA,WAAA,CAAA,EAAA,CAAA,EAAA,CAAA;;2FDNa,kBAAkB,EAAA,UAAA,EAAA,CAAA;kBAN9B,SAAS;AACI,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,0BAA0B,cAGxB,KAAK,EAAA,QAAA,EAAA,mWAAA,EAAA,MAAA,EAAA,CAAA,qVAAA,CAAA,EAAA;8BAGQ,QAAQ,EAAA,CAAA;sBAAlC,KAAK;uBAAC,EAAE,QAAQ,EAAE,IAAI,EAAE;gBAMhB,IAAI,EAAA,CAAA;sBAAZ;gBAES,OAAO,EAAA,CAAA;sBAAhB;;;MEkBU,aAAa,CAAA;uGAAb,aAAa,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,QAAA,EAAA,CAAA;AAAb,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,aAAa,iBApBtB,sBAAsB;YACtB,aAAa;AACb,YAAA,kBAAkB,aAGlB,YAAY;YACZ,aAAa;YACb,cAAc;YACd,oBAAoB;YACpB,aAAa;YACb,eAAe;YACf,WAAW;AACX,YAAA,cAAc,aAGd,sBAAsB;YACtB,aAAa;YACb,kBAAkB,CAAA,EAAA,CAAA;AAGT,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,aAAa,YAftB,YAAY;YACZ,aAAa;YACb,cAAc;YACd,oBAAoB;YACpB,aAAa;YACb,eAAe;YACf,WAAW,CAAA,EAAA,CAAA;;2FASF,aAAa,EAAA,UAAA,EAAA,CAAA;kBAtBzB,QAAQ;AAAC,YAAA,IAAA,EAAA,CAAA;AACR,oBAAA,YAAY,EAAE;wBACZ,sBAAsB;wBACtB,aAAa;wBACb;AACD,qBAAA;AACD,oBAAA,OAAO,EAAE;wBACP,YAAY;wBACZ,aAAa;wBACb,cAAc;wBACd,oBAAoB;wBACpB,aAAa;wBACb,eAAe;wBACf,WAAW;wBACX;AACD,qBAAA;AACD,oBAAA,OAAO,EAAE;wBACP,sBAAsB;wBACtB,aAAa;wBACb;AACD;AACF,iBAAA;;;ACpCD;;AAEG;;;;"}