{"version":3,"file":"deja-js-component-select.mjs","sources":["../../../../projects/deja-js/component/select/select.component.ts","../../../../projects/deja-js/component/select/select.component.html","../../../../projects/deja-js/component/select/index.ts","../../../../projects/deja-js/component/select/deja-js-component-select.ts"],"sourcesContent":["/*\n *  @license\n *  Copyright Hôpitaux Universitaires de Genève. All Rights Reserved.\n *\n *  Use of this source code is governed by an Apache-2.0 license that can be\n *  found in the LICENSE file at https://github.com/DSI-HUG/dejajs-components/blob/master/LICENSE\n */\n\nimport { FocusMonitor } from '@angular/cdk/a11y';\nimport { BooleanInput, coerceBooleanProperty, coerceNumberProperty, NumberInput } from '@angular/cdk/coercion';\nimport { AfterContentInit, AfterViewInit, ChangeDetectionStrategy, ChangeDetectorRef, Component, ContentChild, ContentChildren, DoCheck, ElementRef, EventEmitter, HostBinding, Input, OnDestroy, Optional, Output, Self, TemplateRef, ViewChild, ViewEncapsulation } from '@angular/core';\nimport { ControlValueAccessor, FormControl, FormGroupDirective, NgControl, NgForm } from '@angular/forms';\nimport { CanDisable, CanUpdateErrorState, ErrorStateMatcher } from '@angular/material/core';\nimport { MatFormFieldControl } from '@angular/material/form-field';\nimport { MatInput } from '@angular/material/input';\nimport { IDejaChipsComponentCloseEvent } from '@deja-js/component/chips';\nimport { DejaChildValidatorDirective, DejaConnectionPositionPair, KeyCodes, MediaService } from '@deja-js/component/core';\nimport { DejaItemComponent, DejaItemEvent, DejaItemsEvent, GroupingService, IFindItemResult, IItemBase, IItemTree, ItemListBase, ItemListService, IViewListResult, IViewPort, SortingService, ViewPortService } from '@deja-js/component/core/item-list';\nimport { DejaOverlayComponent } from '@deja-js/component/overlay';\nimport { BehaviorSubject, combineLatestWith, debounce, debounceTime, delay, delayWhen, filter, fromEvent, map, mergeWith, Observable, of, Subject, Subscription, switchMap, take, takeUntil, tap, timer } from 'rxjs';\n\nexport type SelectType = 'autocomplete' | 'multiselect' | 'select';\n\n/** Combo box avec une liste basée sur la treelist */\n@Component({\n    selector: 'deja-select',\n    changeDetection: ChangeDetectionStrategy.OnPush,\n    encapsulation: ViewEncapsulation.None,\n    providers: [\n        ViewPortService,\n        { provide: MatFormFieldControl, useExisting: DejaSelectComponent }\n    ],\n    styleUrls: [\n        './select.component.scss'\n    ],\n    templateUrl: './select.component.html'\n})\nexport class DejaSelectComponent extends ItemListBase<unknown> implements CanUpdateErrorState, CanDisable, DoCheck, MatFormFieldControl<unknown>, ControlValueAccessor, OnDestroy, AfterViewInit, AfterContentInit {\n    // eslint-disable-next-line @typescript-eslint/naming-convention\n    public static nextId = 0;\n\n    @HostBinding() public id = `deja-select-${DejaSelectComponent.nextId++}`;\n    @HostBinding('attr.aria-describedby') public describedBy = '';\n    @HostBinding('attr.wait') public _waiter = false;\n    @ViewChild('inputElement') public inputElement: ElementRef;\n    @HostBinding('attr.disabled') public _disabled: boolean = null;\n    @HostBinding('attr.readonly') public _readonly: boolean = null;\n\n    /** Texte à afficher par default dans la zone de recherche */\n    /** Texte affiché si aucune donnée n'est présente dans le tableau */\n    @Input() public nodataholder: string;\n    /** Offset de position horizontal de la zone de dropdown */\n    @Input() public overlayOffsetX = 0;\n    /** Offset de position vertical de la zone de dropdown */\n    @Input() public overlayOffsetY = 0;\n    /** Nom de classe du backdrop */\n    @Input() public overlayBackdropClass: string;\n    /** Nom de classe du container de la liste */\n    @Input() public overlayContainerClass: string;\n    /** Permet de définir un template de ligne par binding */\n    @Input() public itemTemplateExternal: TemplateRef<unknown>;\n    /** Permet de définir un template de ligne parente par binding. */\n    @Input() public parentItemTemplateExternal: TemplateRef<unknown>;\n    /** Permet de définir un template pour le loader par binding. */\n    @Input() public loaderTemplateExternal: TemplateRef<unknown>;\n    /** Exécuté lorsque le calcul du viewPort est terminé. */\n    @Output() public readonly viewPortChanged = new EventEmitter<IViewPort>();\n    /** Exécuté lorsque l'utilisateur sélectionne ou désélectionne une ligne. */\n    @Output() public readonly selectedChange = new EventEmitter<DejaItemsEvent<unknown> | DejaItemEvent<unknown>>();\n    /** For test only. */\n    @Output() public readonly dropDownVisibleChange = new EventEmitter<boolean>();\n\n    @ContentChild('itemTemplate') public itemTemplateInternal: TemplateRef<unknown>;\n    @ContentChild('parentItemTemplate') public parentItemTemplateInternal: TemplateRef<unknown>;\n    @ContentChild('selectedTemplate') public selectedTemplate: TemplateRef<unknown>;\n\n    @ViewChild(MatInput) protected input: MatInput;\n\n    /** Overlay pane containing the options. */\n    @ViewChild(DejaOverlayComponent, { static: true }) private overlay: DejaOverlayComponent;\n\n    @ContentChild('loaderTemplate') private loaderTemplateInternal: TemplateRef<unknown>;\n\n    @HostBinding('class.floating')\n    public get shouldLabelFloat(): boolean {\n        return this.focused || !this.empty;\n    }\n\n    public controlType = 'deja-select';\n    public errorState = false;\n    public errorStateMatcher: ErrorStateMatcher;\n    // eslint-disable-next-line rxjs/finnish\n    public stateChanges = new Subject<void>();\n\n    /** Internal use */\n    public overlayOwnerElement: HTMLElement;\n    public dropDownMaxHeight: number = null;\n\n    protected _keyboardNavigation = false;\n    protected isMobile = false;\n\n    private mouseUp$sub: Subscription;\n\n    private _type: SelectType = 'select';\n    private selectingItemIndex: number;\n    private dropDownQuery = '';\n    private filterExpression = '';\n    private _dropdownVisible = false;\n    private lastScrollPosition = 0;\n    private _selectionClearable = false;\n    private _dropDownWidth: number;\n    private _query = '';\n    private _required = false;\n    private _placeholder: string;\n    private _focused = false;\n\n    private clearFilterExpression$ = new BehaviorSubject<void>(null);\n    private filterListComplete$ = new Subject<void>();\n    private storeScrollPosition$ = new Subject<number>();\n    private hideDropDown$ = new Subject<number>();\n    private showDropDown$ = new Subject<void>();\n    private filter$ = new Subject<Event>();\n    private query$ = new BehaviorSubject<string>('');\n    private writeValue$ = new Subject<unknown>();\n    private contentInitialized$ = new Subject<boolean>();\n\n    private keyboardNavigation$ = new Subject<void>();\n\n    private delaySearchTrigger$ = new BehaviorSubject<number>(250);\n\n    private _modelIsValue: boolean;\n\n    /** Définit une valeur indiquant si en reactive form le model renvoyé doit être un object ou une valeur */\n    @Input()\n    public set modelIsValue(value: BooleanInput) {\n        this._modelIsValue = coerceBooleanProperty(value);\n    }\n\n    public get modelIsValue(): BooleanInput {\n        return this._modelIsValue;\n    }\n\n    private _positions = DejaConnectionPositionPair.default;\n\n    @Input()\n    public set positions(value: DejaConnectionPositionPair[] | string) {\n        this._positions = typeof value === 'string' ? DejaConnectionPositionPair.parse(value) : value;\n    }\n\n    public get positions(): DejaConnectionPositionPair[] | string {\n        return this._positions;\n    }\n\n    @Input()\n    public set dropDownWidth(value: NumberInput) {\n        this._dropDownWidth = coerceNumberProperty(value);\n    }\n\n    public get dropDownWidth(): NumberInput {\n        return this._dropDownWidth || this.elementRef?.nativeElement.clientWidth;\n    }\n\n    public get keyboardNavigation(): boolean {\n        return this._keyboardNavigation;\n    }\n\n    @Input() public get required(): boolean {\n        return this._required;\n    }\n\n    public set required(req: boolean) {\n        this._required = coerceBooleanProperty(req);\n        this.stateChanges.next();\n    }\n\n    /**\n     * Placeholder of the input\n     */\n    @Input() public get placeholder(): string {\n        return this._placeholder;\n    }\n\n    public set placeholder(plh: string) {\n        this._placeholder = plh;\n        this.stateChanges.next();\n    }\n\n    public get empty(): boolean {\n        return !this.value;\n    }\n\n    public get focused(): boolean {\n        return this._focused;\n    }\n\n    @ContentChildren(DejaItemComponent)\n    public set options(options: DejaItemComponent[]) {\n        if (!this.items && options?.length) {\n            const selectedModels = [] as unknown[];\n            this.valueField = 'value';\n            this.textField = 'text';\n            const models = options.map(option => {\n                const model = {\n                    text: option.text,\n                    value: option.value\n                };\n                if (option.selected) {\n                    selectedModels.push(model);\n                }\n                return model;\n            });\n            this.models = models;\n            if (selectedModels.length) {\n                this.selectedModels = selectedModels;\n            }\n            if (models.length > 100) {\n                // tslint:disable-next-line:no-debugger\n                console.error('Select options with more than 100 items can have performance options. Please bind directly the items in code behind with items or models input.');\n            }\n        }\n    }\n\n    public constructor(changeDetectorRef: ChangeDetectorRef,\n        public viewPort: ViewPortService,\n        private fm: FocusMonitor,\n        private elementRef: ElementRef<HTMLElement>,\n        @Self() @Optional() public ngControl: NgControl,\n        @Optional() private parentForm: NgForm,\n        @Optional() private parentFormGroup: FormGroupDirective,\n        mediaService: MediaService,\n        private defaultErrorStateMatcher: ErrorStateMatcher) {\n        super(changeDetectorRef, viewPort);\n\n        this.overlayOwnerElement = this.elementRef.nativeElement;\n\n        if (this.ngControl) {\n            this.ngControl.valueAccessor = this;\n        }\n\n        this.fm.monitor(elementRef.nativeElement, true).pipe(\n            takeUntil(this.destroyed$)\n        ).subscribe(origin => {\n            this._focused = !!origin;\n            this.stateChanges.next();\n        });\n\n        const setDropDownVisible = (state: boolean): void => {\n            if (state !== this._dropdownVisible) {\n                this._dropdownVisible = state;\n                this.changeDetectorRef.markForCheck();\n                this.dropDownVisibleChange.emit(state);\n            }\n        };\n\n        mediaService.isMobile$.pipe(\n            takeUntil(this.destroyed$)\n        ).subscribe(value => {\n            this.isMobile = value;\n            this.changeDetectorRef.markForCheck();\n        });\n\n        if (this.parentForm) {\n            this.parentForm.ngSubmit.pipe(\n                takeUntil(this.destroyed$)\n            ).subscribe(() => {\n                this.changeDetectorRef.markForCheck();\n            });\n        }\n\n        if (this.parentFormGroup) {\n            this.parentFormGroup.ngSubmit.pipe(\n                takeUntil(this.destroyed$)\n            ).subscribe(() => {\n                this.changeDetectorRef.markForCheck();\n            });\n        }\n\n        this.clearFilterExpression$.pipe(\n            debounceTime(750),\n            takeUntil(this.destroyed$)\n        ).subscribe(() => this.filterExpression = '');\n\n        this.delaySearchTrigger$.pipe(\n            combineLatestWith(this.filterListComplete$),\n            debounce(([delaySearchTrigger]) => timer(delaySearchTrigger)),\n            takeUntil(this.destroyed$)\n        ).subscribe(() => {\n            this._itemList = [];\n            this.reshowDropDown();\n        });\n\n        this.storeScrollPosition$.pipe(\n            takeUntil(this.destroyed$)\n        ).subscribe(scrollPos => {\n            this.viewPort.scrollPosition$.next(scrollPos);\n            this.lastScrollPosition = scrollPos;\n        });\n\n        this.hideDropDown$.pipe(\n            filter(() => this.dropdownVisible),\n            delayWhen(time => timer(time || 0)),\n            takeUntil(this.destroyed$)\n        ).subscribe(() => {\n            delete this.selectingItemIndex;\n            setDropDownVisible(false);\n            this.viewPort.element$.next(null);\n            this.changeDetectorRef.markForCheck();\n        });\n\n        this.showDropDown$.pipe(\n            debounceTime(50),\n            filter(() => (this.query || '').length >= this.minSearchlength && !this._readonly),\n            tap(() => {\n                // Set overlay origin element\n                const originElement: HTMLElement = (this.isMobile && document.body) || this.htmlInputElement || this.elementRef.nativeElement;\n\n                // Calc max height\n                if (this.isMobile) {\n                    this.dropDownMaxHeight = document.body.clientHeight;\n                } else if (this.maxHeight) {\n                    this.dropDownMaxHeight = this.maxHeight;\n                } else {\n                    const originRect = originElement.getBoundingClientRect();\n                    const maxHeight = document.body.clientHeight;\n                    this.dropDownMaxHeight = Math.max(originRect.top, maxHeight - originRect.bottom, 25) - 25;\n                }\n\n                // Ensure dropDowsQuery if autocomplete and minSearchLength\n                if (!this.dropDownQuery && this.isModeAutocomplete && this.minSearchlength > 0 && this.query && this.query.length > this.minSearchlength) {\n                    this.dropDownQuery = this.query;\n                }\n\n                // Display overlay\n                setDropDownVisible(true);\n                this.changeDetectorRef.markForCheck();\n            }),\n            delay(1),\n            filter(() => this.dropdownVisible), // Show canceled by the hide$ observable if !dropdownVisible\n            switchMap(() => this.calcViewList$()),\n            tap(() => {\n                const selectedItems = this.getSelectedItems();\n                const firstItem = selectedItems?.[0];\n                const index = firstItem ? this.getItemIndex(firstItem) : -1;\n                if (index >= 0) {\n                    // Ensure selection\n                    this.setSelectedItems(selectedItems);\n                    this.currentItemIndex = index;\n                    this.ensureItemVisible(index);\n                } else if (this.listElement) {\n                    // Restore scroll Position\n                    this.ensureItemVisible(null);\n                    this.listElement.scrollTop = this.lastScrollPosition;\n                }\n            }),\n            delay(1),\n            filter(() => this.dropdownVisible), // Show canceled by the hide$ observable if !dropdownVisible\n            tap(() => {\n                this.viewPort.element$.next(this.listElement);\n            }),\n            delay(1),\n            takeUntil(this.destroyed$)\n        ).subscribe(() => {\n            // View port calculated\n            this.overlay.updatePosition();\n        });\n\n        this.keyboardNavigation$.pipe(\n            tap(() => this._keyboardNavigation = true),\n            debounceTime(1000),\n            takeUntil(this.destroyed$)\n        ).subscribe(() => {\n            this._keyboardNavigation = false;\n            this.changeDetectorRef.markForCheck();\n        });\n\n        this.query$.pipe(\n            tap(query => this._query = query),\n            filter(() => !!this.input),\n            delay(1),\n            takeUntil(this.destroyed$)\n        ).subscribe(() => {\n            // **** Force place holder to refresh to escape input angular material issue ****\n            this.changeDetectorRef.markForCheck();\n        });\n\n        this.writeValue$.pipe(\n            combineLatestWith(this.contentInitialized$),\n            map(([value]) => value),\n            tap(value => {\n                if (this.modelIsValue === undefined) {\n                    if (value instanceof Array) {\n                        const av = value || [];\n                        const modelType = av.length && typeof av[0];\n                        this.modelIsValue = modelType === 'string' || modelType === 'number';\n                    } else {\n                        const modelType = typeof value;\n                        this.modelIsValue = value === '' || modelType === 'string' || modelType === 'number';\n                    }\n                }\n                if (this.modelIsValue) {\n                    this.query = '';\n                }\n                return value;\n            }),\n            map(value => this.getVirtualSelectedEntities(value) as unknown[]),\n            switchMap(value => {\n                if (!value) {\n                    if (this.selectedItems?.length) {\n                        this.removeSelection();\n                    }\n                } else if (this._multiSelect) {\n                    this.query = '';\n                    super.setSelectedModels(value);\n                    super.getItemListService().ensureSelection();\n                } else {\n                    const v = value instanceof Array ? [value[0]] : [value];\n                    const item = super.mapToIItemBase(v)[0];\n                    return this.unselectAll$().pipe(\n                        switchMap(() => item ? this.toggleSelect$([item], true) : []),\n                        map(() => super.getItemListService().ensureSelection()),\n                        tap(() => this.ensureSelection()),\n                        take(1)\n                    );\n                }\n\n                return of(null);\n            }),\n            takeUntil(this.destroyed$)\n        ).subscribe(() => this.changeDetectorRef.markForCheck());\n\n        this._viewPortChanged = this.viewPortChanged;\n\n        this.maxHeight = 0;\n    }\n\n    /** Correspond au model du champ de filtrage ou recherche */\n    @Input()\n    public set query(value: string) {\n        this.query$.next(value);\n    }\n\n    public get query(): string {\n        return this._query;\n    }\n\n    /** Temps d'attente en ms avant que la recherche dans la liste soit lancée lorsque l'utilisateur tape dans le select */\n    // eslint-disable-next-line @angular-eslint/no-input-rename\n    @Input('delay-search-trigger') public set delaySearchTrigger(value: number) {\n        this.delaySearchTrigger$.next(value);\n    }\n\n    /** Définit la longueur minimale de caractères dans le champ de recherche avant que la recherche ou le filtrage soient effectués */\n    // eslint-disable-next-line @angular-eslint/no-input-rename\n    @Input('min-search-length') public set minSearchlength(value: NumberInput) {\n        this._minSearchLength = coerceNumberProperty(value);\n    }\n\n    public get minSearchlength(): NumberInput {\n        return this._minSearchLength;\n    }\n\n    /** Permet de désactiver le select */\n    @Input()\n    public set disabled(value: boolean) {\n        const disabled = coerceBooleanProperty(value);\n        this._disabled = disabled || null;\n        this.changeDetectorRef.markForCheck();\n    }\n\n    public get disabled(): boolean {\n        return this.ngControl ? this.ngControl.disabled : this._disabled;\n    }\n\n    /** Indique ou détermine si le bouton pour effacer la selection doit être affiché */\n    @Input()\n    public set selectionClearable(value: BooleanInput) {\n        this._selectionClearable = coerceBooleanProperty(value);\n    }\n\n    public get selectionClearable(): BooleanInput {\n        return this._selectionClearable;\n    }\n\n    @Input()\n    /** Définit une valeur indiquant si les éléments selectionés doivent être masqué de la liste déroulante. */\n    public set hideSelected(value: BooleanInput) {\n        this.setHideSelected(coerceBooleanProperty(value));\n    }\n\n    /** Renvoie une valeur indiquant si les éléments selectionés doivent être masqué de la liste déroulante. */\n    public get hideSelected(): BooleanInput {\n        return this._hideSelected;\n    }\n\n    /** Définit la ligne courant ou ligne active */\n    @Input()\n    public set currentItem(item: IItemBase<unknown>) {\n        super.setCurrentItem(item);\n        if (item) {\n            this.ensureItemVisible(item);\n        }\n    }\n\n    /** Définit le nombre de lignes à sauter en cas de pression sur les touches PageUp ou PageDown */\n    @Input()\n    public set pageSize(value: NumberInput) {\n        this._pageSize = coerceNumberProperty(value);\n    }\n\n    /** Retourne le nombre de lignes à sauter en cas de pression sur les touches PageUp ou PageDown */\n    public get pageSize(): NumberInput {\n        if (this._pageSize === 0) {\n            const vpRowHeight = this.getViewPortRowHeight();\n            const containerElement = this.listElement;\n            const containerHeight = containerElement?.clientHeight || this.dropDownMaxHeight;\n            return Math.floor(containerHeight / vpRowHeight);\n        }\n\n        return this._pageSize;\n    }\n\n    /** Définit un texte de conseil en cas d'erreur de validation ou autre */\n    @Input()\n    public set hintLabel(value: string) {\n        this.setHintLabel(value);\n    }\n\n    /** Retourne un texte de conseil en cas d'erreur de validation ou autre */\n    public get hintLabel(): string {\n        return this._hintLabel;\n    }\n\n    /** Définit la hauteur d'une ligne pour le calcul du viewport en pixels (la valeur par défaut sera utilisée si aucune valeur n'est définie). */\n    @Input()\n    public set viewPortRowHeight(value: NumberInput) {\n        this.setViewPortRowHeight(value);\n    }\n\n    /**\n     * Les trois valeurs acceptés en paramètre se trouvent dans l'enum ViewportMode (disabled, fixed, variable, auto)\n     * Attention, une désactivation du viewport dégrade considérablement les performances de la liste et ne doit pas être activée si la liste\n     * est suceptible de contenir beaucoup d'éléments.\n     */\n    @Input()\n    public set viewportMode(mode: string) {\n        this.setViewportMode(mode);\n    }\n\n    /** Retourne le champ utilisé pour la liste des enfants d'un parent */\n    @Input()\n    public set childrenField(value: string) {\n        super.setChildrenField(value);\n    }\n\n    /** Définit le champ utilisé pour la liste des enfants d'un parent */\n    public get childrenField(): string {\n        return this._childrenField;\n    }\n\n    /** Définit le champ à utiliser comme valeur d'affichage. */\n    @Input()\n    public set textField(value: string) {\n        super.setTextField(value);\n    }\n\n    /** Retourne le champ à utiliser comme valeur d'affichage. */\n    public get textField(): string {\n        return super.getTextField();\n    }\n\n    /** Définit le champ à utiliser comme valeur de comparaison. */\n    @Input()\n    public set valueField(value: string) {\n        super.setValueField(value);\n    }\n\n    /** Retourne le champ à utiliser comme valeur de comparaison. */\n    public get valueField(): string {\n        return super.getValueField();\n    }\n\n    /** Définit le champ à utiliser comme champ de recherche.\n     * Ce champ peut indiquer, un champ contenant une valeur, un texte indexé, ou une fonction.\n     */\n    @Input()\n    public set searchField(value: string) {\n        super.setSearchField(value);\n    }\n\n    /** Retourne le champ à utiliser comme champ de recherche.\n     * Ce champ peut indiquer, un champ contenant une valeur, un texte indexé, ou une fonction.\n     */\n    public get searchField(): string {\n        return this._searchField;\n    }\n\n    @Input()\n    public set type(type: SelectType) {\n        if (type !== 'autocomplete' && type !== 'multiselect' && type !== 'select') {\n            throw new Error('Invalid type property for DejaSelectComponent. Type can be select, autocomplete or multiselect.');\n        }\n        this._type = type;\n        this.setMultiSelect(this._type === 'multiselect');\n        this.changeDetectorRef.markForCheck();\n    }\n\n    public get type(): SelectType {\n        return this._type;\n    }\n\n    /**\n     * Set an observable called before the list will be displayed\n     */\n    @Input()\n    public set loadingItems(fn: (query: string | RegExp, selectedItems: IItemBase<unknown>[]) => Observable<IItemBase<unknown>[]>) {\n        super.setLoadingItems(fn);\n    }\n\n    /**\n     * Set a promise or an observable called before an item selection\n     */\n    @Input()\n    public set selectingItem(fn: (item: IItemBase<unknown>) => Promise<IItemBase<unknown>> | Observable<IItemBase<unknown>>) {\n        super.setSelectingItem(fn);\n    }\n\n    /**\n     * Set a promise or an observable called before an item deselection\n     */\n    @Input()\n    public set unselectingItem(fn: (item: IItemBase<unknown>) => Promise<IItemBase<unknown>> | Observable<IItemBase<unknown>>) {\n        super.setUnselectingItem(fn);\n    }\n\n    /**\n     * Set a promise or an observable called before an item expand\n     */\n    @Input()\n    public set expandingItem(fn: (item: IItemTree<unknown>) => Promise<IItemTree<unknown>> | Observable<IItemTree<unknown>>) {\n        super.setExpandingItem(fn);\n    }\n\n    /**\n     * Set a promise or an observable called before an item collapse\n     */\n    @Input()\n    public set collapsingItem(fn: (item: IItemTree<unknown>) => Promise<IItemTree<unknown>> | Observable<IItemTree<unknown>>) {\n        super.setCollapsingItem(fn);\n    }\n\n    /** Retourne si le select est en mode select, donc en lecture seule. */\n    public get isModeSelect(): boolean {\n        return this._type === 'select';\n    }\n\n    /** Retourne si le select est en mode autocomplete */\n    public get isModeAutocomplete(): boolean {\n        return this._type === 'autocomplete';\n    }\n\n    /** Définit la liste des éléments selectionés en mode multiselect */\n    @Input()\n    public set selectedItems(value: IItemBase<unknown>[]) {\n        this.setSelectedItems(value);\n    }\n\n    /** Retourne la liste des éléments selectionés en mode multiselect */\n    public get selectedItems(): IItemBase<unknown>[] {\n        return super.getSelectedItems();\n    }\n\n    /** Définit l'éléments selectioné en mode single select */\n    @Input()\n    public set selectedItem(value: IItemBase<unknown>) {\n        this.setSelectedItems(value !== undefined && value !== null ? [value] : []);\n    }\n\n    /** Retourne l'élément selectioné en mode single select */\n    public get selectedItem(): IItemBase<unknown> {\n        const selectedItem = super.getSelectedItems();\n        return selectedItem?.[0];\n    }\n\n    /** Définit le model selectioné en mode single select */\n    @Input()\n    public set selectedModel(value: unknown[] | unknown) {\n        this.writeValue(value);\n    }\n\n    /** Retourne le model selectioné en mode single select */\n    public get selectedModel(): unknown {\n        const selectedModel = super.getSelectedModels();\n        return selectedModel?.[0] as unknown[];\n    }\n\n    /** Définit la liste des models selectionés en mode multiselect */\n    @Input()\n    public set selectedModels(value: unknown[]) {\n        this.writeValue(value);\n    }\n\n    /** Retourne la liste des models selectionés en mode multiselect */\n    public get selectedModels(): unknown[] {\n        return super.getSelectedModels();\n    }\n\n    /** Definit le service de liste utilisé par ce composant. Ce service permet de controller dynamiquement la liste, ou de faire du lazyloading. */\n    @Input()\n    public set itemListService(itemListService: ItemListService<unknown>) {\n        this.setItemListService(itemListService);\n        if (itemListService?.lastQuery) {\n            this.query = itemListService.lastQuery.toString();\n        }\n    }\n\n    /** Retourne le service de liste utilisé par ce composant. Ce service permet de controller dynamiquement la liste, ou de faire du lazyloading. */\n    public get itemListService(): ItemListService<unknown> {\n        return this.getItemListService();\n    }\n\n    /** Definit le service utilisé pour le tri de la liste */\n    @Input()\n    public set sortingService(value: SortingService) {\n        this.setSortingService(value);\n    }\n\n    /** Definit le service utilisé pour le regroupement de la liste */\n    @Input()\n    public set groupingService(value: GroupingService) {\n        this.setGroupingService(value);\n    }\n\n    /** Definit si le waiter doit être affiché dans le select. */\n    @Input()\n    public set waiter(value: boolean) {\n        this._waiter = value;\n    }\n\n    /** Retourne si le waiter doit être affiché dans le select. */\n    public get waiter(): boolean {\n        return this._waiter;\n    }\n\n    /** Définit la liste des éléments au format IItemBase */\n    @Input()\n    // eslint-disable-next-line rxjs/finnish\n    public set items(items: IItemBase<unknown>[] | Promise<IItemBase<unknown>[]> | Observable<IItemBase<unknown>[]>) {\n        super.setItems$(items).pipe(\n            take(1),\n            tap(() => this.ensureSelection()),\n            switchMap(() => this.calcViewList$()),\n            takeUntil(this.destroyed$)\n        ).subscribe();\n    }\n\n    /** Définit la liste des éléments (tout type d'objet métier) */\n    @Input()\n    // eslint-disable-next-line rxjs/finnish\n    public set models(items: unknown[] | Observable<unknown[]>) {\n        super.setModels$(items).pipe(\n            take(1),\n            tap(() => this.ensureSelection()),\n            switchMap(() => this.calcViewList$()),\n            takeUntil(this.destroyed$)\n        ).subscribe();\n    }\n\n    /** Retourne le nombre de niveau pour une liste hierarchique */\n    public get depthMax(): number {\n        return this._depthMax;\n    }\n\n    /** Définit la hauteur maximum avant que le composant affiche une scrollbar\n     * spécifier une grande valeur pour ne jamais afficher de scrollbar\n     * Spécifier 0 pour que le composant determine sa hauteur à partir du container\n     */\n    @Input()\n    public set maxHeight(value: number) {\n        super.setMaxHeight(value);\n    }\n\n    /** Retourne la hauteur maximum avant que le composant affiche une scrollbar\n     * spécifier une grande valeur pour ne jamais afficher de scrollbar\n     * Spécifier 0 pour que le composant determine sa hauteur à partir du container\n     */\n    public get maxHeight(): number {\n        return this.getMaxHeight();\n    }\n\n    @Input()\n    /** Définit une valeur indiquant si le composant est en lecture seule */\n    public set readonly(value: boolean) {\n        const readonly = coerceBooleanProperty(value);\n        this._readonly = readonly || null;\n        this.changeDetectorRef.markForCheck();\n    }\n\n    /** Retourne une valeur indiquant si le composant est en lecture seule */\n    public get readonly(): boolean {\n        return this._readonly;\n    }\n\n    @ViewChild(DejaChildValidatorDirective)\n    protected set inputValidatorDirective(value: DejaChildValidatorDirective) {\n        if (value) {\n            value.parentControl = this.ngControl;\n        }\n    }\n\n    private set currentItemIndex(value: number) {\n        super.setCurrentItemIndex(value);\n        this.changeDetectorRef.markForCheck();\n    }\n\n    private get currentItemIndex(): number {\n        return this.getCurrentItemIndex();\n    }\n\n    public get itemTemplate(): TemplateRef<unknown> {\n        return this.itemTemplateExternal || this.itemTemplateInternal;\n    }\n\n    public get parentItemTemplate(): TemplateRef<unknown> {\n        return this.parentItemTemplateExternal || this.parentItemTemplateInternal;\n    }\n\n    private get htmlInputElement(): HTMLInputElement {\n        return this.inputElement?.nativeElement as HTMLInputElement;\n    }\n\n    public get loaderTemplate(): TemplateRef<unknown> {\n        return this.loaderTemplateExternal || this.loaderTemplateInternal;\n    }\n\n    public get dropdownVisible(): boolean {\n        return this._dropdownVisible;\n    }\n\n    // ************* ControlValueAccessor Implementation **************\n    public get value(): IItemBase<unknown> | IItemBase<unknown>[] {\n        return this._multiSelect ? this.selectedItems : this.selectedItem;\n    }\n\n    public set value(val: IItemBase<unknown> | IItemBase<unknown>[]) {\n        this.writeValue(val);\n        this.onChangeCallback(val);\n        this.onTouchedCallback();\n        this.stateChanges.next();\n    }\n\n    public writeValue(value: IItemBase<unknown> | IItemBase<unknown>[]): void {\n        this.writeValue$.next(value);\n    }\n\n    public registerOnChange(fn: (_a: unknown) => void): void {\n        this.onChangeCallback = fn;\n    }\n\n    public registerOnTouched(fn: () => void): void {\n        this.onTouchedCallback = fn;\n    }\n\n    public setDisabledState(isDisabled: boolean): void {\n        this.disabled = isDisabled;\n    }\n    // ************* End of ControlValueAccessor Implementation **************\n\n    public ngDoCheck(): void {\n        if (this.ngControl) {\n            this.updateErrorState();\n        }\n    }\n\n    public ngOnDestroy(): void {\n        this.stateChanges.complete();\n        this.fm.stopMonitoring(this.elementRef.nativeElement);\n    }\n\n    public ngAfterContentInit(): void {\n        this.contentInitialized$.next(true);\n\n        if (this.ngControl) {\n            this.ngControl.valueChanges.pipe(\n                filter(() => !!this.input),\n                takeUntil(this.destroyed$)\n            ).subscribe(() => {\n                if (this.ngControl.touched) {\n                    this.input.ngControl.control.markAsTouched();\n                }\n                this.input.ngControl.control.updateValueAndValidity();\n            });\n        }\n\n        this.overlayOwnerElement = this.elementRef.nativeElement;\n        if (this.overlayOwnerElement.parentElement.className.includes('mat-form-field-infix')) {\n            this.overlayOwnerElement = this.overlayOwnerElement.parentElement;\n        }\n    }\n\n    public ngAfterViewInit(): void {\n        fromEvent<Event>(this.htmlInputElement, 'click').pipe(\n            filter(() => !this.dropdownVisible && !this.disabled),\n            takeUntil(this.destroyed$)\n        ).subscribe(_event => {\n            if (this.isModeSelect) {\n                this.showDropDown();\n            }\n        });\n\n        fromEvent<Event>(this.htmlInputElement, 'focus').pipe(\n            filter(() => !this.dropdownVisible && !this.disabled),\n            delay(10),\n            filter(() => this.htmlInputElement === document.activeElement),\n            takeUntil(this.destroyed$)\n        ).subscribe(event => {\n            if (this.isModeSelect) {\n                this.showDropDown();\n            } else {\n                this.filter$.next(event);\n            }\n        });\n\n        fromEvent<Event>(this.htmlInputElement, 'blur').pipe(\n            filter(() => this.selectingItemIndex === undefined),\n            takeUntil(this.destroyed$)\n        ).subscribe(() => {\n            this.onTouchedCallback();\n            this.hideDropDown$.next(10);\n        });\n\n        fromEvent<KeyboardEvent>(this.htmlInputElement, 'keydown').pipe(\n            mergeWith(fromEvent<KeyboardEvent>(this.elementRef.nativeElement, 'keydown')),\n            filter(event => {\n                if (event.defaultPrevented) {\n                    return false;\n                }\n\n                const keyCode = event.code;\n                return keyCode === KeyCodes.Home ||\n                    keyCode === KeyCodes.End ||\n                    keyCode === KeyCodes.PageUp ||\n                    keyCode === KeyCodes.PageDown ||\n                    keyCode === KeyCodes.UpArrow ||\n                    keyCode === KeyCodes.DownArrow ||\n                    keyCode === KeyCodes.Space ||\n                    keyCode === KeyCodes.Enter;\n            }),\n            switchMap(event => this.ensureListCaches$().pipe(\n                switchMap(() => {\n                    // Set and get current index for keyboard features only\n                    const setCurrentIndex = (index: number, item?: IItemBase<unknown>): void => {\n                        this.currentItemIndex = index;\n                        if (this.dropdownVisible) {\n                            this.ensureItemVisible(this.currentItemIndex);\n                            this.viewPort.refresh();\n                        }\n\n                        if (!this._multiSelect) {\n                            item = item || super.getCurrentItem();\n                            this.select(item, false);\n                        }\n                    };\n\n                    switch (event.code) {\n                        case KeyCodes.Home:\n                            if (event.altKey || this._multiSelect && !this.dropdownVisible) {\n                                this.toggleDropDown();\n                            } else {\n                                setCurrentIndex(0);\n                            }\n                            return of(false);\n\n                        case KeyCodes.End:\n                            if (event.altKey || this._multiSelect && !this.dropdownVisible) {\n                                this.toggleDropDown();\n                            } else {\n                                setCurrentIndex(Math.max(0, this.rowsCount - 1));\n                            }\n                            return of(false);\n\n                        case KeyCodes.PageUp:\n                            if (event.altKey || this._multiSelect && !this.dropdownVisible) {\n                                this.toggleDropDown();\n                            } else {\n                                const index = Math.max(0, this.currentItemIndex - this._pageSize);\n                                setCurrentIndex(index);\n                            }\n                            return of(false);\n\n                        case KeyCodes.PageDown:\n                            if (event.altKey || this._multiSelect && !this.dropdownVisible) {\n                                this.toggleDropDown();\n                            } else {\n                                const index = Math.min(this.rowsCount - 1, this.currentItemIndex + this._pageSize);\n                                setCurrentIndex(index);\n                            }\n                            return of(false);\n\n                        case KeyCodes.UpArrow:\n                            if (event.altKey || this._multiSelect && !this.dropdownVisible) {\n                                this.toggleDropDown();\n                            } else {\n                                const index = Math.max(0, this.currentItemIndex - 1);\n                                setCurrentIndex(index);\n                            }\n                            return of(false);\n\n                        case KeyCodes.DownArrow:\n                            if (event.altKey || this._multiSelect && !this.dropdownVisible) {\n                                this.toggleDropDown();\n                            } else {\n                                const index = Math.min(this.rowsCount - 1, this.currentItemIndex + 1);\n                                setCurrentIndex(index);\n                            }\n                            return of(false);\n\n                        case KeyCodes.Space:\n                            if (this.dropdownVisible) {\n                                const item = this._itemList[this.currentItemIndex - this.vpStartRow];\n                                if (this.isCollapsible(item)) {\n                                    this.keyboardNavigation$.next();\n                                    const treeItem = item as unknown as IItemTree<unknown>;\n                                    return this.toggleCollapse$(this.currentItemIndex, !treeItem.collapsed).pipe(\n                                        map(() => false)\n                                    );\n                                }\n                            }\n                            return of(!this.isModeSelect);\n\n                        // Do not break or return here\n                        // tslint:disable-next-line:no-switch-case-fall-through\n                        case KeyCodes.Enter:\n                            if (this.dropdownVisible) {\n                                const item = this._itemList[this.currentItemIndex - this.vpStartRow];\n                                this.select(item);\n                            }\n                            return of(false);\n\n                        default:\n                            return of(true);\n                    }\n                }),\n                filter(continuePropagation => !continuePropagation),\n                map(() => {\n                    this.keyboardNavigation$.next();\n                    this.changeDetectorRef.markForCheck();\n                    event.preventDefault();\n                    return false;\n                })\n            )),\n            takeUntil(this.destroyed$)\n        ).subscribe();\n\n        const keyUp$ = fromEvent<KeyboardEvent>(this.htmlInputElement, 'keyup').pipe(\n            filter(event => {\n                const keyCode = event.code;\n                return keyCode >= KeyCodes.Key0 ||\n                    keyCode === KeyCodes.Backspace ||\n                    keyCode === KeyCodes.Space ||\n                    keyCode === KeyCodes.Delete;\n            })\n        );\n\n        keyUp$.pipe(\n            mergeWith(this.filter$),\n            tap(() => {\n                if ((this.query || '').length < this.minSearchlength) {\n                    this._itemList = [];\n                    this.hideDropDown();\n                    return;\n                }\n            }),\n            switchMap(event => {\n                // console.log('select.component, keycode:' + event.code);\n                this.keyboardNavigation$.next();\n                if (this.isModeSelect) {\n                    const keyboardEvent = event as KeyboardEvent;\n                    // Select, search on the list\n                    if ((/[a-zA-Z0-9]/).test(keyboardEvent.key)) {\n                        // Valid char\n                        this.clearFilterExpression$.next(null);\n\n                        // Search next\n                        this.filterExpression += keyboardEvent.key;\n                        const rg = new RegExp(`^${this.filterExpression}`, 'i');\n                        return this.findNextMatch$(item => {\n                            if (item && this.isSelectable(item)) {\n                                const label = this.getTextValue(item);\n                                if (rg.test(label)) {\n                                    return true;\n                                }\n                            }\n                            return false;\n                        }, this.currentItemIndex).pipe(\n                            take(1)\n                        );\n                    }\n                } else {\n                    // Autocomplete, filter the list\n                    this.filterListComplete$.next();\n                }\n\n                return of(null as IFindItemResult<unknown>);\n            }),\n            filter(result => result?.index >= 0),\n            takeUntil(this.destroyed$)\n        ).subscribe(result => {\n            // Set and get current index for keyboard features only\n            this.currentItemIndex = result.index;\n            if (this.dropdownVisible) {\n                this.ensureItemVisible(this.currentItemIndex);\n            }\n\n            if (!this._multiSelect) {\n                const item = result.item || super.getCurrentItem();\n                this.select(item, false);\n            }\n        });\n    }\n\n    public setDescribedByIds(ids: string[]): void {\n        this.describedBy = ids.join(' ');\n    }\n\n    public onContainerClick(event: MouseEvent): void {\n        if ((event.target as Element).tagName.toLowerCase() !== 'input') {\n            this.elementRef.nativeElement.querySelector('input').focus();\n        }\n    }\n\n    /** Change l'état d'expansion de toute les lignes parentes */\n    public toggleAll$(collapsed?: boolean): Observable<IItemTree<unknown>[]> {\n        return super.toggleAll$(collapsed).pipe(\n            switchMap(items => this.calcViewList$().pipe(take(1), map(() => items))));\n    }\n\n    /** Change l'état d'expansion de toute les lignes parentes */\n    public toggleAll(collapsed?: boolean): void {\n        this.toggleAll$(collapsed).pipe(\n            take(1),\n            takeUntil(this.destroyed$)\n        ).subscribe();\n    }\n\n    /** Change l'état d'expansion de la ligne spécifiée\n     * @param index  Index sur la liste des éléments visibles de l'élément à changer.\n     * @param collapsed  Etat de l'élément. True pour réduire l'élément.\n     * @return Observable résolu par la fonction.\n     */\n    public toggleCollapse$(index: number, collapsed: boolean): Observable<IItemTree<unknown>> {\n        return super.toggleCollapse$(index, collapsed).pipe(\n            tap(() => {\n                if (this.dropdownVisible) {\n                    this.reshowDropDown();\n                }\n            }));\n    }\n\n    /** Change l'état d'expansion de la ligne spécifiée\n     * @param index  Index sur la liste des éléments visibles de l'élément à changer.\n     * @param collapsed  Etat de l'élément. True pour réduire l'élément.\n     */\n    public toggleCollapse(index: number, collapsed: boolean): void {\n        this.toggleCollapse$(index, collapsed).pipe(\n            take(1),\n            takeUntil(this.destroyed$)\n        ).subscribe();\n    }\n\n    public queryChanged(value: string): void {\n        this.query = value;\n        if (!this.isModeSelect) {\n            // Autocomplete or multiselect only\n            this.dropDownQuery = this.query;\n            if (this.isModeAutocomplete) {\n                this.unselectAll$().pipe(\n                    take(1),\n                    takeUntil(this.destroyed$)\n                ).subscribe(() => this.onModelChange());\n            }\n        }\n    }\n\n    public hideDropDown(): void {\n        this.hideDropDown$.next(null);\n    }\n\n    public scroll(event: Event): void {\n        const element = event.target as HTMLElement;\n        this.storeScrollPosition$.next(element.scrollTop);\n    }\n\n    public mousedown(e: MouseEvent): void {\n        if (this.mouseUp$sub) {\n            this.mouseUp$sub.unsubscribe();\n            this.mouseUp$sub = undefined;\n        }\n\n        this.selectingItemIndex = this.getItemIndexFromHTMLElement(e.target as HTMLElement);\n\n        this.mouseUp$sub = fromEvent<MouseEvent>(this.listElement, 'mouseup').pipe(\n            switchMap(upEvent => {\n                const itemIndex = this.getItemIndexFromHTMLElement(upEvent.target as HTMLElement);\n                if (itemIndex === undefined || this.selectingItemIndex === undefined || itemIndex !== this.selectingItemIndex) {\n                    return of(null);\n                }\n\n                const item = this._itemList[itemIndex - this.vpStartRow];\n                if (!item || upEvent.button !== 0) {\n                    // Right click menu\n                    return of(null);\n                }\n\n                const isExpandButton = (target: HTMLElement): boolean => target.id === 'expandbtn' || target.parentElement.id === 'expandbtn';\n\n                if (this.isCollapsible(item) && (isExpandButton(e.target as HTMLElement) || !this.isSelectable(item))) {\n                    if (upEvent.button === 0) {\n                        const treeItem = item as unknown as IItemTree<unknown>;\n                        return this.toggleCollapse$(itemIndex, !treeItem.collapsed);\n                    }\n                } else if (!item.selected) {\n                    this.select(item);\n                }\n\n                return of(null);\n            }),\n            takeUntil(this.destroyed$)\n        ).subscribe();\n    }\n\n    public getItemClass(item: IItemTree<unknown>): string {\n        const classNames = ['listitem'] as string[];\n        if (item.className) {\n            classNames.push(item.className);\n        }\n        if (item.collapsing || item.expanding) {\n            classNames.push('hide');\n        }\n        if (item.depth < this.depthMax) {\n            classNames.push('parent');\n        }\n        if (item.collapsed) {\n            classNames.push('collapsed');\n        }\n        if (item.selected) {\n            classNames.push('selected');\n        }\n        if (!(item.selectable ?? true)) {\n            classNames.push('unselectable');\n        }\n        if (item.depth === this._depthMax && item.odd) {\n            classNames.push('odd');\n        }\n        return classNames.join(' ');\n    }\n\n    public updateErrorState(): void {\n        const oldState = this.errorState;\n        const parent = this.parentFormGroup || this.parentForm;\n        const matcher = this.errorStateMatcher || this.defaultErrorStateMatcher;\n        const control = this.ngControl ? this.ngControl.control as FormControl : null;\n        const newState = matcher.isErrorState(control, parent);\n\n        if (newState !== oldState) {\n            this.errorState = newState;\n            this.stateChanges.next();\n        }\n    }\n\n    public clearSelection(): void {\n        this.removeSelection();\n    }\n\n    public onClearQuery(clickEvent: Event): boolean {\n        this.onRemoveSelection();\n        clickEvent.stopPropagation();\n        return false;\n    }\n\n    public onRemoveSelection(closeEvent?: IDejaChipsComponentCloseEvent): void {\n        if (this.ngControl) {\n            this.ngControl.control.markAsTouched();\n        }\n        this.removeSelection(closeEvent?.item);\n    }\n\n    public onOpenClicked(event: Event): void {\n        if (this.dropdownVisible || this.disabled) {\n            return;\n        }\n\n        if (this.isModeSelect) {\n            this.showDropDown();\n        } else {\n            this.htmlInputElement.select();\n            this.filter$.next(event);\n        }\n    }\n\n    public toggleDropDown(): void {\n        if (this.dropdownVisible) {\n            this.hideDropDown();\n        } else {\n            this.showDropDown();\n        }\n    }\n\n    public showDropDown(): void {\n        this.showDropDown$.next();\n    }\n\n    // NgModel implementation\n    public onTouchedCallback = (): void => undefined;\n    public onChangeCallback = (_a?: unknown): void => undefined;\n    public onValidatorChangeCallback = (_a?: unknown): void => undefined;\n\n    protected removeSelection(item?: IItemBase<unknown>): void {\n        if (!this._multiSelect) {\n            this.query = '';\n            this.dropDownQuery = '';\n            this.setSelectedItems(null);\n            this.onModelChange();\n            delete this.selectingItemIndex;\n        } else if (item) {\n            this.toggleSelect$([item], false).pipe(\n                take(1),\n                takeUntil(this.destroyed$)\n            ).subscribe(selectedItems => {\n                const selected = [...selectedItems];\n                this.setSelectedItems(selected);\n                this.onModelChange(selected);\n            });\n        } else {\n            this.unselectAll$().pipe(\n                take(1),\n                takeUntil(this.destroyed$)\n            ).subscribe(() => this.onModelChange());\n        }\n    }\n\n    protected calcViewList$(): Observable<IViewListResult<unknown>> {\n        return super.calcViewList$(this.dropDownQuery).pipe(\n            tap(() => this.changeDetectorRef.markForCheck())\n        );\n    }\n\n    protected ensureItemVisible(item: IItemBase<unknown> | number): void {\n        super.ensureItemVisible(item);\n    }\n\n    private onModelChange(items?: IItemBase<unknown>[] | IItemBase<unknown>): void {\n        let outputEmitter = null;\n\n        let output = null;\n\n        if (items) {\n            if (Array.isArray(items)) {\n                // eslint-disable-next-line @typescript-eslint/no-unsafe-return\n                const models = items.map(itm => itm.model !== undefined ? itm.model : itm);\n                outputEmitter = {\n                    items: items,\n                    models: models\n                } as DejaItemsEvent<unknown>;\n\n                if (this.modelIsValue) {\n                    const valueField = this.getValueField();\n                    if (models.find((m: Record<string, unknown>) => !!m[valueField])) {\n                        // eslint-disable-next-line @typescript-eslint/no-unsafe-return\n                        output = models.map((m: Record<string, unknown>) => m[valueField] !== undefined ? m[valueField] : m);\n                    }\n                } else {\n                    output = models;\n                }\n            } else {\n                const model = items.model as Record<string, unknown>;\n                outputEmitter = {\n                    item: items,\n                    model: model\n                } as DejaItemEvent<unknown>;\n\n                if (this.modelIsValue) {\n                    const valueField = this.getValueField();\n                    output = model[valueField] !== undefined ? model[valueField] : model;\n                } else {\n                    output = items.model !== undefined ? items.model : items;\n                }\n            }\n        }\n\n        this.onChangeCallback(output);\n\n        if (outputEmitter) {\n            this.selectedChange.emit(outputEmitter);\n        }\n    }\n\n    private select(item: IItemBase<unknown>, hideDropDown?: boolean): void {\n        if (!this.isSelectable(item)) {\n            return;\n        }\n\n        if (!item) {\n            // this.query = '';\n            // this.dropDownQuery = '';\n            // this.setSelectedItems(null);\n            // this.onModelChange();\n            return;\n        }\n\n        if (this._multiSelect) {\n            this.toggleSelect$([item], true).pipe(\n                take(1),\n                takeUntil(this.destroyed$)\n            ).subscribe(selectedItems => {\n                const selected = selectedItems ? [...selectedItems] : [];\n                this.setSelectedItems(selected);\n                this.onModelChange(selected);\n                this.query = '';\n                this.dropDownQuery = '';\n            });\n        } else {\n            this.query = this.getTextValue(item);\n            this.setSelectedItems([item]);\n            this.onModelChange(item);\n        }\n\n        this.htmlInputElement.focus();\n        if (hideDropDown ?? true) {\n            this.hideDropDown();\n        }\n    }\n\n    private reshowDropDown(): void {\n        if (!this.dropdownVisible) {\n            return this.showDropDown();\n        }\n\n        delete this.selectingItemIndex;\n\n        // Restore scroll Position\n        const listElement = this.listElement;\n        if (listElement) {\n            listElement.scrollTop = this.lastScrollPosition;\n        }\n\n        this.calcViewList$().pipe(\n            tap(() => this.refreshViewPort()),\n            switchMap(() => this.viewPortChanged), // Wait for viewport calculation\n            take(1),\n            delay(1),\n            takeUntil(this.destroyed$)\n        ).subscribe(() => {\n            // View port calculated\n            this.overlay.updatePosition();\n\n            // Ensure selection\n            const item = this.getSelectedItems()[0];\n            const index = item && this.getItemIndex(item);\n            if (index >= 0) {\n                this.currentItemIndex = index;\n                this.ensureItemVisible(index);\n            }\n        });\n\n        return undefined;\n    }\n\n    private ensureSelection(): void {\n        if (this._multiSelect) {\n            // Do nothing yet\n        } else {\n            this.query = this.selectedItems.length ? this.getTextValue(this.selectedItems[0]) : '';\n        }\n    }\n}\n","<input [placeholder]=\"placeholder\" *ngIf=\"!isMultiSelect\" matInput [disabled]=\"disabled\" [ngModel]=\"query\" #inputElement deja-child-validator type=\"text\" [readonly]=\"isModeSelect || readonly\" (ngModelChange)=\"queryChanged($event)\" autocomplete=\"off\">\n<div *ngIf=\"!disabled && !isMultiSelect\" class=\"actions-suffix\">\n    <mat-icon (click)=\"onClearQuery($event)\" id=\"clear-button\" *ngIf=\"selectionClearable && selectedItems?.length\">clear</mat-icon>\n    <mat-icon (click)=\"onOpenClicked($event)\" id=\"drop-down-button\">arrow_drop_down</mat-icon>\n</div>\n<deja-chips *ngIf=\"isMultiSelect\" [items]=\"selectedItems\" [readonly]=\"readonly\" [disabled]=\"disabled\" (close)=\"onRemoveSelection($event)\" [itemTemplateExternal]=\"selectedTemplate\" [textField]=\"textField\">\n    <ng-template #insertTemplate>\n        <input [placeholder]=\"placeholder\" matInput [disabled]=\"disabled\" [ngModel]=\"query\" #inputElement deja-child-validator type=\"text\" [readonly]=\"isModeSelect || readonly\" (ngModelChange)=\"queryChanged($event)\" autocomplete=\"off\">\n        <div *ngIf=\"!disabled\" class=\"actions-suffix\">\n            <mat-icon id=\"drop-down-button\" (click)=\"onOpenClicked($event)\">arrow_drop_down</mat-icon>\n        </div>\n    </ng-template>\n</deja-chips>\n<deja-overlay #dejaOverlay [overlayBackdropClass]=\"overlayBackdropClass || 'deja-select-backdrop'\" [overlayContainerClass]=\"overlayContainerClass\" [ownerElement]=\"overlayOwnerElement\" [isVisible]=\"dropdownVisible\" (closed)=\"hideDropDown()\" [positions]=\"positions\" [overlayOffsetY]=\"overlayOffsetY\" [overlayOffsetX]=\"overlayOffsetX\" [width]=\"dropDownWidth\" widthForMobile=\"100%\">\n    <div [id]=\"listElementId\" class=\"deja-listcontainer\" [attr.itemscount]=\"itemList?.length\" [attr.depth-max]=\"depthMax || null\" [attr.keynav]=\"keyboardNavigation\" [attr.vprowheight]=\"getViewPortRowHeight()\" (mousedown)=\"mousedown($event)\" (scroll)=\"scroll($event)\" [style.max-height.px]=\"dropDownMaxHeight\">\n        <div id=\"nodata-holder\" *ngIf=\"!treeItemList?.length && !waiter\">{{ nodataholder }}</div>\n        <div *ngIf=\"vpBeforeHeight\" [style.height.px]=\"vpBeforeHeight\"></div>\n        <div *ngFor=\"let item of treeItemList; let index = index\" #listitem [attr.class]=\"getItemClass(item)\" [attr.current]=\"(isMultiSelect && vpStartRow+index === getCurrentItemIndex()) || null\" [attr.depth]=\"depthMax ? item.depth : null\" [attr.id]=\"item.id || null\" [attr.flat]=\"vpStartRow + index\" [style.height.px]=\"getItemHeight(item)\">\n            <span id=\"expandbtn\">\n\t\t\t\t<mat-icon *ngIf=\"item.$items?.length\">arrow_drop_down</mat-icon>\n\t\t\t</span>\n            <ng-container *ngIf=\"(!item.$items || !parentItemTemplate) && (item.$items || !itemTemplate)\">{{ getTextValue(item) }}</ng-container>\n            <ng-container *ngIf=\"item.$items && parentItemTemplate\">\n                <ng-template [ngTemplateOutlet]=\"parentItemTemplate\" [ngTemplateOutletContext]=\"{ $implicit: item, query: query, flatindex: vpStartRow+index }\"></ng-template>\n            </ng-container>\n            <ng-container *ngIf=\"!item.$items && itemTemplate\">\n                <ng-template [ngTemplateOutlet]=\"itemTemplate\" [ngTemplateOutletContext]=\"{ $implicit: item, query: query, flatindex: vpStartRow+index }\"></ng-template>\n            </ng-container>\n        </div>\n        <div *ngIf=\"vpAfterHeight\" [style.height.px]=\"vpAfterHeight\"></div>\n        <deja-list-loader id=\"loader\" *ngIf=\"waiter && !loaderTemplate\"></deja-list-loader>\n        <ng-container *ngIf=\"waiter && loaderTemplate\">\n            <ng-template [ngTemplateOutlet]=\"loaderTemplate\"></ng-template>\n        </ng-container>\n    </div>\n</deja-overlay>\n<div *ngIf=\"hintLabel\" class=\"mat-hint\">{{hintLabel}}</div>\n","/*\n *  @license\n *  Copyright Hôpitaux Universitaires de Genève. All Rights Reserved.\n *\n *  Use of this source code is governed by an Apache-2.0 license that can be\n *  found in the LICENSE file at https://github.com/DSI-HUG/dejajs-components/blob/master/LICENSE\n */\n\nimport { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatInputModule } from '@angular/material/input';\nimport { DejaChipsModule } from '@deja-js/component/chips';\nimport { DejaChildValidatorModule, MediaModule } from '@deja-js/component/core';\nimport { DejaItemModule } from '@deja-js/component/core/item-list';\nimport { DejaListLoaderModule } from '@deja-js/component/loaders';\nimport { DejaOverlayModule } from '@deja-js/component/overlay';\n\nimport { DejaSelectComponent } from './select.component';\n\n@NgModule({\n    declarations: [\n        DejaSelectComponent\n    ],\n    exports: [\n        DejaSelectComponent\n    ],\n    imports: [\n        CommonModule,\n        DejaChildValidatorModule,\n        DejaChipsModule,\n        DejaItemModule,\n        DejaListLoaderModule,\n        DejaOverlayModule,\n        FormsModule,\n        MatIconModule,\n        MatInputModule,\n        MediaModule\n    ]\n})\nexport class DejaSelectModule { }\n\nexport * from './select.component';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;AAuBA;AAcM,MAAO,mBAAoB,SAAQ,YAAqB,CAAA;AAyL1D,IAAA,WAAA,CAAmB,iBAAoC,EAC5C,QAAyB,EACxB,EAAgB,EAChB,UAAmC,EAChB,SAAoB,EAC3B,UAAkB,EAClB,eAAmC,EACvD,YAA0B,EAClB,wBAA2C,EAAA;AACnD,QAAA,KAAK,CAAC,iBAAiB,EAAE,QAAQ,CAAC,CAAC;QAR5B,IAAQ,CAAA,QAAA,GAAR,QAAQ,CAAiB;QACxB,IAAE,CAAA,EAAA,GAAF,EAAE,CAAc;QAChB,IAAU,CAAA,UAAA,GAAV,UAAU,CAAyB;QAChB,IAAS,CAAA,SAAA,GAAT,SAAS,CAAW;QAC3B,IAAU,CAAA,UAAA,GAAV,UAAU,CAAQ;QAClB,IAAe,CAAA,eAAA,GAAf,eAAe,CAAoB;QAE/C,IAAwB,CAAA,wBAAA,GAAxB,wBAAwB,CAAmB;AA7LjC,QAAA,IAAA,CAAA,EAAE,GAAG,CAAe,YAAA,EAAA,mBAAmB,CAAC,MAAM,EAAE,EAAE,CAAC;QAC5B,IAAW,CAAA,WAAA,GAAG,EAAE,CAAC;QAC7B,IAAO,CAAA,OAAA,GAAG,KAAK,CAAC;QAEZ,IAAS,CAAA,SAAA,GAAY,IAAI,CAAC;QAC1B,IAAS,CAAA,SAAA,GAAY,IAAI,CAAC;;QAM/C,IAAc,CAAA,cAAA,GAAG,CAAC,CAAC;;QAEnB,IAAc,CAAA,cAAA,GAAG,CAAC,CAAC;;AAYT,QAAA,IAAA,CAAA,eAAe,GAAG,IAAI,YAAY,EAAa,CAAC;;AAEhD,QAAA,IAAA,CAAA,cAAc,GAAG,IAAI,YAAY,EAAoD,CAAC;;AAEtF,QAAA,IAAA,CAAA,qBAAqB,GAAG,IAAI,YAAY,EAAW,CAAC;QAkBvE,IAAW,CAAA,WAAA,GAAG,aAAa,CAAC;QAC5B,IAAU,CAAA,UAAA,GAAG,KAAK,CAAC;;AAGnB,QAAA,IAAA,CAAA,YAAY,GAAG,IAAI,OAAO,EAAQ,CAAC;QAInC,IAAiB,CAAA,iBAAA,GAAW,IAAI,CAAC;QAE9B,IAAmB,CAAA,mBAAA,GAAG,KAAK,CAAC;QAC5B,IAAQ,CAAA,QAAA,GAAG,KAAK,CAAC;QAInB,IAAK,CAAA,KAAA,GAAe,QAAQ,CAAC;QAE7B,IAAa,CAAA,aAAA,GAAG,EAAE,CAAC;QACnB,IAAgB,CAAA,gBAAA,GAAG,EAAE,CAAC;QACtB,IAAgB,CAAA,gBAAA,GAAG,KAAK,CAAC;QACzB,IAAkB,CAAA,kBAAA,GAAG,CAAC,CAAC;QACvB,IAAmB,CAAA,mBAAA,GAAG,KAAK,CAAC;QAE5B,IAAM,CAAA,MAAA,GAAG,EAAE,CAAC;QACZ,IAAS,CAAA,SAAA,GAAG,KAAK,CAAC;QAElB,IAAQ,CAAA,QAAA,GAAG,KAAK,CAAC;AAEjB,QAAA,IAAA,CAAA,sBAAsB,GAAG,IAAI,eAAe,CAAO,IAAI,CAAC,CAAC;AACzD,QAAA,IAAA,CAAA,mBAAmB,GAAG,IAAI,OAAO,EAAQ,CAAC;AAC1C,QAAA,IAAA,CAAA,oBAAoB,GAAG,IAAI,OAAO,EAAU,CAAC;AAC7C,QAAA,IAAA,CAAA,aAAa,GAAG,IAAI,OAAO,EAAU,CAAC;AACtC,QAAA,IAAA,CAAA,aAAa,GAAG,IAAI,OAAO,EAAQ,CAAC;AACpC,QAAA,IAAA,CAAA,OAAO,GAAG,IAAI,OAAO,EAAS,CAAC;AAC/B,QAAA,IAAA,CAAA,MAAM,GAAG,IAAI,eAAe,CAAS,EAAE,CAAC,CAAC;AACzC,QAAA,IAAA,CAAA,WAAW,GAAG,IAAI,OAAO,EAAW,CAAC;AACrC,QAAA,IAAA,CAAA,mBAAmB,GAAG,IAAI,OAAO,EAAW,CAAC;AAE7C,QAAA,IAAA,CAAA,mBAAmB,GAAG,IAAI,OAAO,EAAQ,CAAC;AAE1C,QAAA,IAAA,CAAA,mBAAmB,GAAG,IAAI,eAAe,CAAS,GAAG,CAAC,CAAC;AAcvD,QAAA,IAAA,CAAA,UAAU,GAAG,0BAA0B,CAAC,OAAO,CAAC;;AAkpCjD,QAAA,IAAA,CAAA,iBAAiB,GAAG,MAAY,SAAS,CAAC;AAC1C,QAAA,IAAA,CAAA,gBAAgB,GAAG,CAAC,EAAY,KAAW,SAAS,CAAC;AACrD,QAAA,IAAA,CAAA,yBAAyB,GAAG,CAAC,EAAY,KAAW,SAAS,CAAC;QAzjCjE,IAAI,CAAC,mBAAmB,GAAG,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC;QAEzD,IAAI,IAAI,CAAC,SAAS,EAAE;AAChB,YAAA,IAAI,CAAC,SAAS,CAAC,aAAa,GAAG,IAAI,CAAC;AACvC,SAAA;QAED,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,UAAU,CAAC,aAAa,EAAE,IAAI,CAAC,CAAC,IAAI,CAChD,SAAS,CAAC,IAAI,CAAC,UAAU,CAAC,CAC7B,CAAC,SAAS,CAAC,MAAM,IAAG;AACjB,YAAA,IAAI,CAAC,QAAQ,GAAG,CAAC,CAAC,MAAM,CAAC;AACzB,YAAA,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE,CAAC;AAC7B,SAAC,CAAC,CAAC;AAEH,QAAA,MAAM,kBAAkB,GAAG,CAAC,KAAc,KAAU;AAChD,YAAA,IAAI,KAAK,KAAK,IAAI,CAAC,gBAAgB,EAAE;AACjC,gBAAA,IAAI,CAAC,gBAAgB,GAAG,KAAK,CAAC;AAC9B,gBAAA,IAAI,CAAC,iBAAiB,CAAC,YAAY,EAAE,CAAC;AACtC,gBAAA,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AAC1C,aAAA;AACL,SAAC,CAAC;AAEF,QAAA,YAAY,CAAC,SAAS,CAAC,IAAI,CACvB,SAAS,CAAC,IAAI,CAAC,UAAU,CAAC,CAC7B,CAAC,SAAS,CAAC,KAAK,IAAG;AAChB,YAAA,IAAI,CAAC,QAAQ,GAAG,KAAK,CAAC;AACtB,YAAA,IAAI,CAAC,iBAAiB,CAAC,YAAY,EAAE,CAAC;AAC1C,SAAC,CAAC,CAAC;QAEH,IAAI,IAAI,CAAC,UAAU,EAAE;AACjB,YAAA,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,IAAI,CACzB,SAAS,CAAC,IAAI,CAAC,UAAU,CAAC,CAC7B,CAAC,SAAS,CAAC,MAAK;AACb,gBAAA,IAAI,CAAC,iBAAiB,CAAC,YAAY,EAAE,CAAC;AAC1C,aAAC,CAAC,CAAC;AACN,SAAA;QAED,IAAI,IAAI,CAAC,eAAe,EAAE;AACtB,YAAA,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,IAAI,CAC9B,SAAS,CAAC,IAAI,CAAC,UAAU,CAAC,CAC7B,CAAC,SAAS,CAAC,MAAK;AACb,gBAAA,IAAI,CAAC,iBAAiB,CAAC,YAAY,EAAE,CAAC;AAC1C,aAAC,CAAC,CAAC;AACN,SAAA;AAED,QAAA,IAAI,CAAC,sBAAsB,CAAC,IAAI,CAC5B,YAAY,CAAC,GAAG,CAAC,EACjB,SAAS,CAAC,IAAI,CAAC,UAAU,CAAC,CAC7B,CAAC,SAAS,CAAC,MAAM,IAAI,CAAC,gBAAgB,GAAG,EAAE,CAAC,CAAC;AAE9C,QAAA,IAAI,CAAC,mBAAmB,CAAC,IAAI,CACzB,iBAAiB,CAAC,IAAI,CAAC,mBAAmB,CAAC,EAC3C,QAAQ,CAAC,CAAC,CAAC,kBAAkB,CAAC,KAAK,KAAK,CAAC,kBAAkB,CAAC,CAAC,EAC7D,SAAS,CAAC,IAAI,CAAC,UAAU,CAAC,CAC7B,CAAC,SAAS,CAAC,MAAK;AACb,YAAA,IAAI,CAAC,SAAS,GAAG,EAAE,CAAC;YACpB,IAAI,CAAC,cAAc,EAAE,CAAC;AAC1B,SAAC,CAAC,CAAC;AAEH,QAAA,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAC1B,SAAS,CAAC,IAAI,CAAC,UAAU,CAAC,CAC7B,CAAC,SAAS,CAAC,SAAS,IAAG;YACpB,IAAI,CAAC,QAAQ,CAAC,eAAe,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;AAC9C,YAAA,IAAI,CAAC,kBAAkB,GAAG,SAAS,CAAC;AACxC,SAAC,CAAC,CAAC;AAEH,QAAA,IAAI,CAAC,aAAa,CAAC,IAAI,CACnB,MAAM,CAAC,MAAM,IAAI,CAAC,eAAe,CAAC,EAClC,SAAS,CAAC,IAAI,IAAI,KAAK,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,EACnC,SAAS,CAAC,IAAI,CAAC,UAAU,CAAC,CAC7B,CAAC,SAAS,CAAC,MAAK;YACb,OAAO,IAAI,CAAC,kBAAkB,CAAC;YAC/B,kBAAkB,CAAC,KAAK,CAAC,CAAC;YAC1B,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAClC,YAAA,IAAI,CAAC,iBAAiB,CAAC,YAAY,EAAE,CAAC;AAC1C,SAAC,CAAC,CAAC;AAEH,QAAA,IAAI,CAAC,aAAa,CAAC,IAAI,CACnB,YAAY,CAAC,EAAE,CAAC,EAChB,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,IAAI,EAAE,EAAE,MAAM,IAAI,IAAI,CAAC,eAAe,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,EAClF,GAAG,CAAC,MAAK;;YAEL,MAAM,aAAa,GAAgB,CAAC,IAAI,CAAC,QAAQ,IAAI,QAAQ,CAAC,IAAI,KAAK,IAAI,CAAC,gBAAgB,IAAI,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC;;YAG9H,IAAI,IAAI,CAAC,QAAQ,EAAE;gBACf,IAAI,CAAC,iBAAiB,GAAG,QAAQ,CAAC,IAAI,CAAC,YAAY,CAAC;AACvD,aAAA;iBAAM,IAAI,IAAI,CAAC,SAAS,EAAE;AACvB,gBAAA,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC,SAAS,CAAC;AAC3C,aAAA;AAAM,iBAAA;AACH,gBAAA,MAAM,UAAU,GAAG,aAAa,CAAC,qBAAqB,EAAE,CAAC;AACzD,gBAAA,MAAM,SAAS,GAAG,QAAQ,CAAC,IAAI,CAAC,YAAY,CAAC;gBAC7C,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,GAAG,EAAE,SAAS,GAAG,UAAU,CAAC,MAAM,EAAE,EAAE,CAAC,GAAG,EAAE,CAAC;AAC7F,aAAA;;AAGD,YAAA,IAAI,CAAC,IAAI,CAAC,aAAa,IAAI,IAAI,CAAC,kBAAkB,IAAI,IAAI,CAAC,eAAe,GAAG,CAAC,IAAI,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,IAAI,CAAC,eAAe,EAAE;AACtI,gBAAA,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,KAAK,CAAC;AACnC,aAAA;;YAGD,kBAAkB,CAAC,IAAI,CAAC,CAAC;AACzB,YAAA,IAAI,CAAC,iBAAiB,CAAC,YAAY,EAAE,CAAC;AAC1C,SAAC,CAAC,EACF,KAAK,CAAC,CAAC,CAAC,EACR,MAAM,CAAC,MAAM,IAAI,CAAC,eAAe,CAAC;AAClC,QAAA,SAAS,CAAC,MAAM,IAAI,CAAC,aAAa,EAAE,CAAC,EACrC,GAAG,CAAC,MAAK;AACL,YAAA,MAAM,aAAa,GAAG,IAAI,CAAC,gBAAgB,EAAE,CAAC;AAC9C,YAAA,MAAM,SAAS,GAAG,aAAa,GAAG,CAAC,CAAC,CAAC;AACrC,YAAA,MAAM,KAAK,GAAG,SAAS,GAAG,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC;YAC5D,IAAI,KAAK,IAAI,CAAC,EAAE;;AAEZ,gBAAA,IAAI,CAAC,gBAAgB,CAAC,aAAa,CAAC,CAAC;AACrC,gBAAA,IAAI,CAAC,gBAAgB,GAAG,KAAK,CAAC;AAC9B,gBAAA,IAAI,CAAC,iBAAiB,CAAC,KAAK,CAAC,CAAC;AACjC,aAAA;iBAAM,IAAI,IAAI,CAAC,WAAW,EAAE;;AAEzB,gBAAA,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC;gBAC7B,IAAI,CAAC,WAAW,CAAC,SAAS,GAAG,IAAI,CAAC,kBAAkB,CAAC;AACxD,aAAA;AACL,SAAC,CAAC,EACF,KAAK,CAAC,CAAC,CAAC,EACR,MAAM,CAAC,MAAM,IAAI,CAAC,eAAe,CAAC;QAClC,GAAG,CAAC,MAAK;YACL,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;AAClD,SAAC,CAAC,EACF,KAAK,CAAC,CAAC,CAAC,EACR,SAAS,CAAC,IAAI,CAAC,UAAU,CAAC,CAC7B,CAAC,SAAS,CAAC,MAAK;;AAEb,YAAA,IAAI,CAAC,OAAO,CAAC,cAAc,EAAE,CAAC;AAClC,SAAC,CAAC,CAAC;AAEH,QAAA,IAAI,CAAC,mBAAmB,CAAC,IAAI,CACzB,GAAG,CAAC,MAAM,IAAI,CAAC,mBAAmB,GAAG,IAAI,CAAC,EAC1C,YAAY,CAAC,IAAI,CAAC,EAClB,SAAS,CAAC,IAAI,CAAC,UAAU,CAAC,CAC7B,CAAC,SAAS,CAAC,MAAK;AACb,YAAA,IAAI,CAAC,mBAAmB,GAAG,KAAK,CAAC;AACjC,YAAA,IAAI,CAAC,iBAAiB,CAAC,YAAY,EAAE,CAAC;AAC1C,SAAC,CAAC,CAAC;QAEH,IAAI,CAAC,MAAM,CAAC,IAAI,CACZ,GAAG,CAAC,KAAK,IAAI,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC,EACjC,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,EAC1B,KAAK,CAAC,CAAC,CAAC,EACR,SAAS,CAAC,IAAI,CAAC,UAAU,CAAC,CAC7B,CAAC,SAAS,CAAC,MAAK;;AAEb,YAAA,IAAI,CAAC,iBAAiB,CAAC,YAAY,EAAE,CAAC;AAC1C,SAAC,CAAC,CAAC;AAEH,QAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CACjB,iBAAiB,CAAC,IAAI,CAAC,mBAAmB,CAAC,EAC3C,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,KAAK,CAAC,EACvB,GAAG,CAAC,KAAK,IAAG;AACR,YAAA,IAAI,IAAI,CAAC,YAAY,KAAK,SAAS,EAAE;gBACjC,IAAI,KAAK,YAAY,KAAK,EAAE;AACxB,oBAAA,MAAM,EAAE,GAAG,KAAK,IAAI,EAAE,CAAC;oBACvB,MAAM,SAAS,GAAG,EAAE,CAAC,MAAM,IAAI,OAAO,EAAE,CAAC,CAAC,CAAC,CAAC;oBAC5C,IAAI,CAAC,YAAY,GAAG,SAAS,KAAK,QAAQ,IAAI,SAAS,KAAK,QAAQ,CAAC;AACxE,iBAAA;AAAM,qBAAA;AACH,oBAAA,MAAM,SAAS,GAAG,OAAO,KAAK,CAAC;AAC/B,oBAAA,IAAI,CAAC,YAAY,GAAG,KAAK,KAAK,EAAE,IAAI,SAAS,KAAK,QAAQ,IAAI,SAAS,KAAK,QAAQ,CAAC;AACxF,iBAAA;AACJ,aAAA;YACD,IAAI,IAAI,CAAC,YAAY,EAAE;AACnB,gBAAA,IAAI,CAAC,KAAK,GAAG,EAAE,CAAC;AACnB,aAAA;AACD,YAAA,OAAO,KAAK,CAAC;SAChB,CAAC,EACF,GAAG,CAAC,KAAK,IAAI,IAAI,CAAC,0BAA0B,CAAC,KAAK,CAAc,CAAC,EACjE,SAAS,CAAC,KAAK,IAAG;YACd,IAAI,CAAC,KAAK,EAAE;AACR,gBAAA,IAAI,IAAI,CAAC,aAAa,EAAE,MAAM,EAAE;oBAC5B,IAAI,CAAC,eAAe,EAAE,CAAC;AAC1B,iBAAA;AACJ,aAAA;iBAAM,IAAI,IAAI,CAAC,YAAY,EAAE;AAC1B,gBAAA,IAAI,CAAC,KAAK,GAAG,EAAE,CAAC;AAChB,gBAAA,KAAK,CAAC,iBAAiB,CAAC,KAAK,CAAC,CAAC;AAC/B,gBAAA,KAAK,CAAC,kBAAkB,EAAE,CAAC,eAAe,EAAE,CAAC;AAChD,aAAA;AAAM,iBAAA;gBACH,MAAM,CAAC,GAAG,KAAK,YAAY,KAAK,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;gBACxD,MAAM,IAAI,GAAG,KAAK,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACxC,gBAAA,OAAO,IAAI,CAAC,YAAY,EAAE,CAAC,IAAI,CAC3B,SAAS,CAAC,MAAM,IAAI,GAAG,IAAI,CAAC,aAAa,CAAC,CAAC,IAAI,CAAC,EAAE,IAAI,CAAC,GAAG,EAAE,CAAC,EAC7D,GAAG,CAAC,MAAM,KAAK,CAAC,kBAAkB,EAAE,CAAC,eAAe,EAAE,CAAC,EACvD,GAAG,CAAC,MAAM,IAAI,CAAC,eAAe,EAAE,CAAC,EACjC,IAAI,CAAC,CAAC,CAAC,CACV,CAAC;AACL,aAAA;AAED,YAAA,OAAO,EAAE,CAAC,IAAI,CAAC,CAAC;SACnB,CAAC,EACF,SAAS,CAAC,IAAI,CAAC,UAAU,CAAC,CAC7B,CAAC,SAAS,CAAC,MAAM,IAAI,CAAC,iBAAiB,CAAC,YAAY,EAAE,CAAC,CAAC;AAEzD,QAAA,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,eAAe,CAAC;AAE7C,QAAA,IAAI,CAAC,SAAS,GAAG,CAAC,CAAC;KACtB;AA9VD,IAAA,IACW,gBAAgB,GAAA;QACvB,OAAO,IAAI,CAAC,OAAO,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC;KACtC;;IA+CD,IACW,YAAY,CAAC,KAAmB,EAAA;AACvC,QAAA,IAAI,CAAC,aAAa,GAAG,qBAAqB,CAAC,KAAK,CAAC,CAAC;KACrD;AAED,IAAA,IAAW,YAAY,GAAA;QACnB,OAAO,IAAI,CAAC,aAAa,CAAC;KAC7B;IAID,IACW,SAAS,CAAC,KAA4C,EAAA;QAC7D,IAAI,CAAC,UAAU,GAAG,OAAO,KAAK,KAAK,QAAQ,GAAG,0BAA0B,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,KAAK,CAAC;KACjG;AAED,IAAA,IAAW,SAAS,GAAA;QAChB,OAAO,IAAI,CAAC,UAAU,CAAC;KAC1B;IAED,IACW,aAAa,CAAC,KAAkB,EAAA;AACvC,QAAA,IAAI,CAAC,cAAc,GAAG,oBAAoB,CAAC,KAAK,CAAC,CAAC;KACrD;AAED,IAAA,IAAW,aAAa,GAAA;QACpB,OAAO,IAAI,CAAC,cAAc,IAAI,IAAI,CAAC,UAAU,EAAE,aAAa,CAAC,WAAW,CAAC;KAC5E;AAED,IAAA,IAAW,kBAAkB,GAAA;QACzB,OAAO,IAAI,CAAC,mBAAmB,CAAC;KACnC;AAED,IAAA,IAAoB,QAAQ,GAAA;QACxB,OAAO,IAAI,CAAC,SAAS,CAAC;KACzB;IAED,IAAW,QAAQ,CAAC,GAAY,EAAA;AAC5B,QAAA,IAAI,CAAC,SAAS,GAAG,qBAAqB,CAAC,GAAG,CAAC,CAAC;AAC5C,QAAA,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE,CAAC;KAC5B;AAED;;AAEG;AACH,IAAA,IAAoB,WAAW,GAAA;QAC3B,OAAO,IAAI,CAAC,YAAY,CAAC;KAC5B;IAED,IAAW,WAAW,CAAC,GAAW,EAAA;AAC9B,QAAA,IAAI,CAAC,YAAY,GAAG,GAAG,CAAC;AACxB,QAAA,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE,CAAC;KAC5B;AAED,IAAA,IAAW,KAAK,GAAA;AACZ,QAAA,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC;KACtB;AAED,IAAA,IAAW,OAAO,GAAA;QACd,OAAO,IAAI,CAAC,QAAQ,CAAC;KACxB;IAED,IACW,OAAO,CAAC,OAA4B,EAAA;QAC3C,IAAI,CAAC,IAAI,CAAC,KAAK,IAAI,OAAO,EAAE,MAAM,EAAE;YAChC,MAAM,cAAc,GAAG,EAAe,CAAC;AACvC,YAAA,IAAI,CAAC,UAAU,GAAG,OAAO,CAAC;AAC1B,YAAA,IAAI,CAAC,SAAS,GAAG,MAAM,CAAC;YACxB,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,MAAM,IAAG;AAChC,gBAAA,MAAM,KAAK,GAAG;oBACV,IAAI,EAAE,MAAM,CAAC,IAAI;oBACjB,KAAK,EAAE,MAAM,CAAC,KAAK;iBACtB,CAAC;gBACF,IAAI,MAAM,CAAC,QAAQ,EAAE;AACjB,oBAAA,cAAc,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AAC9B,iBAAA;AACD,gBAAA,OAAO,KAAK,CAAC;AACjB,aAAC,CAAC,CAAC;AACH,YAAA,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;YACrB,IAAI,cAAc,CAAC,MAAM,EAAE;AACvB,gBAAA,IAAI,CAAC,cAAc,GAAG,cAAc,CAAC;AACxC,aAAA;AACD,YAAA,IAAI,MAAM,CAAC,MAAM,GAAG,GAAG,EAAE;;AAErB,gBAAA,OAAO,CAAC,KAAK,CAAC,iJAAiJ,CAAC,CAAC;AACpK,aAAA;AACJ,SAAA;KACJ;;IAwND,IACW,KAAK,CAAC,KAAa,EAAA;AAC1B,QAAA,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;KAC3B;AAED,IAAA,IAAW,KAAK,GAAA;QACZ,OAAO,IAAI,CAAC,MAAM,CAAC;KACtB;;;IAID,IAA0C,kBAAkB,CAAC,KAAa,EAAA;AACtE,QAAA,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;KACxC;;;IAID,IAAuC,eAAe,CAAC,KAAkB,EAAA;AACrE,QAAA,IAAI,CAAC,gBAAgB,GAAG,oBAAoB,CAAC,KAAK,CAAC,CAAC;KACvD;AAED,IAAA,IAAW,eAAe,GAAA;QACtB,OAAO,IAAI,CAAC,gBAAgB,CAAC;KAChC;;IAGD,IACW,QAAQ,CAAC,KAAc,EAAA;AAC9B,QAAA,MAAM,QAAQ,GAAG,qBAAqB,CAAC,KAAK,CAAC,CAAC;AAC9C,QAAA,IAAI,CAAC,SAAS,GAAG,QAAQ,IAAI,IAAI,CAAC;AAClC,QAAA,IAAI,CAAC,iBAAiB,CAAC,YAAY,EAAE,CAAC;KACzC;AAED,IAAA,IAAW,QAAQ,GAAA;AACf,QAAA,OAAO,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC;KACpE;;IAGD,IACW,kBAAkB,CAAC,KAAmB,EAAA;AAC7C,QAAA,IAAI,CAAC,mBAAmB,GAAG,qBAAqB,CAAC,KAAK,CAAC,CAAC;KAC3D;AAED,IAAA,IAAW,kBAAkB,GAAA;QACzB,OAAO,IAAI,CAAC,mBAAmB,CAAC;KACnC;IAED,IAEW,YAAY,CAAC,KAAmB,EAAA;QACvC,IAAI,CAAC,eAAe,CAAC,qBAAqB,CAAC,KAAK,CAAC,CAAC,CAAC;KACtD;;AAGD,IAAA,IAAW,YAAY,GAAA;QACnB,OAAO,IAAI,CAAC,aAAa,CAAC;KAC7B;;IAGD,IACW,WAAW,CAAC,IAAwB,EAAA;AAC3C,QAAA,KAAK,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC;AAC3B,QAAA,IAAI,IAAI,EAAE;AACN,YAAA,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC;AAChC,SAAA;KACJ;;IAGD,IACW,QAAQ,CAAC,KAAkB,EAAA;AAClC,QAAA,IAAI,CAAC,SAAS,GAAG,oBAAoB,CAAC,KAAK,CAAC,CAAC;KAChD;;AAGD,IAAA,IAAW,QAAQ,GAAA;AACf,QAAA,IAAI,IAAI,CAAC,SAAS,KAAK,CAAC,EAAE;AACtB,YAAA,MAAM,WAAW,GAAG,IAAI,CAAC,oBAAoB,EAAE,CAAC;AAChD,YAAA,MAAM,gBAAgB,GAAG,IAAI,CAAC,WAAW,CAAC;YAC1C,MAAM,eAAe,GAAG,gBAAgB,EAAE,YAAY,IAAI,IAAI,CAAC,iBAAiB,CAAC;YACjF,OAAO,IAAI,CAAC,KAAK,CAAC,eAAe,GAAG,WAAW,CAAC,CAAC;AACpD,SAAA;QAED,OAAO,IAAI,CAAC,SAAS,CAAC;KACzB;;IAGD,IACW,SAAS,CAAC,KAAa,EAAA;AAC9B,QAAA,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;KAC5B;;AAGD,IAAA,IAAW,SAAS,GAAA;QAChB,OAAO,IAAI,CAAC,UAAU,CAAC;KAC1B;;IAGD,IACW,iBAAiB,CAAC,KAAkB,EAAA;AAC3C,QAAA,IAAI,CAAC,oBAAoB,CAAC,KAAK,CAAC,CAAC;KACpC;AAED;;;;AAIG;IACH,IACW,YAAY,CAAC,IAAY,EAAA;AAChC,QAAA,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC;KAC9B;;IAGD,IACW,aAAa,CAAC,KAAa,EAAA;AAClC,QAAA,KAAK,CAAC,gBAAgB,CAAC,KAAK,CAAC,CAAC;KACjC;;AAGD,IAAA,IAAW,aAAa,GAAA;QACpB,OAAO,IAAI,CAAC,cAAc,CAAC;KAC9B;;IAGD,IACW,SAAS,CAAC,KAAa,EAAA;AAC9B,QAAA,KAAK,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;KAC7B;;AAGD,IAAA,IAAW,SAAS,GAAA;AAChB,QAAA,OAAO,KAAK,CAAC,YAAY,EAAE,CAAC;KAC/B;;IAGD,IACW,UAAU,CAAC,KAAa,EAAA;AAC/B,QAAA,KAAK,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;KAC9B;;AAGD,IAAA,IAAW,UAAU,GAAA;AACjB,QAAA,OAAO,KAAK,CAAC,aAAa,EAAE,CAAC;KAChC;AAED;;AAEG;IACH,IACW,WAAW,CAAC,KAAa,EAAA;AAChC,QAAA,KAAK,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC;KAC/B;AAED;;AAEG;AACH,IAAA,IAAW,WAAW,GAAA;QAClB,OAAO,IAAI,CAAC,YAAY,CAAC;KAC5B;IAED,IACW,IAAI,CAAC,IAAgB,EAAA;QAC5B,IAAI,IAAI,KAAK,cAAc,IAAI,IAAI,KAAK,aAAa,IAAI,IAAI,KAAK,QAAQ,EAAE;AACxE,YAAA,MAAM,IAAI,KAAK,CAAC,iGAAiG,CAAC,CAAC;AACtH,SAAA;AACD,QAAA,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;QAClB,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,KAAK,KAAK,aAAa,CAAC,CAAC;AAClD,QAAA,IAAI,CAAC,iBAAiB,CAAC,YAAY,EAAE,CAAC;KACzC;AAED,IAAA,IAAW,IAAI,GAAA;QACX,OAAO,IAAI,CAAC,KAAK,CAAC;KACrB;AAED;;AAEG;IACH,IACW,YAAY,CAAC,EAAqG,EAAA;AACzH,QAAA,KAAK,CAAC,eAAe,CAAC,EAAE,CAAC,CAAC;KAC7B;AAED;;AAEG;IACH,IACW,aAAa,CAAC,EAA8F,EAAA;AACnH,QAAA,KAAK,CAAC,gBAAgB,CAAC,EAAE,CAAC,CAAC;KAC9B;AAED;;AAEG;IACH,IACW,eAAe,CAAC,EAA8F,EAAA;AACrH,QAAA,KAAK,CAAC,kBAAkB,CAAC,EAAE,CAAC,CAAC;KAChC;AAED;;AAEG;IACH,IACW,aAAa,CAAC,EAA8F,EAAA;AACnH,QAAA,KAAK,CAAC,gBAAgB,CAAC,EAAE,CAAC,CAAC;KAC9B;AAED;;AAEG;IACH,IACW,cAAc,CAAC,EAA8F,EAAA;AACpH,QAAA,KAAK,CAAC,iBAAiB,CAAC,EAAE,CAAC,CAAC;KAC/B;;AAGD,IAAA,IAAW,YAAY,GAAA;AACnB,QAAA,OAAO,IAAI,CAAC,KAAK,KAAK,QAAQ,CAAC;KAClC;;AAGD,IAAA,IAAW,kBAAkB,GAAA;AACzB,QAAA,OAAO,IAAI,CAAC,KAAK,KAAK,cAAc,CAAC;KACxC;;IAGD,IACW,aAAa,CAAC,KAA2B,EAAA;AAChD,QAAA,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC,CAAC;KAChC;;AAGD,IAAA,IAAW,aAAa,GAAA;AACpB,QAAA,OAAO,KAAK,CAAC,gBAAgB,EAAE,CAAC;KACnC;;IAGD,IACW,YAAY,CAAC,KAAyB,EAAA;QAC7C,IAAI,CAAC,gBAAgB,CAAC,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,IAAI,GAAG,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC;KAC/E;;AAGD,IAAA,IAAW,YAAY,GAAA;AACnB,QAAA,MAAM,YAAY,GAAG,KAAK,CAAC,gBAAgB,EAAE,CAAC;AAC9C,QAAA,OAAO,YAAY,GAAG,CAAC,CAAC,CAAC;KAC5B;;IAGD,IACW,aAAa,CAAC,KAA0B,EAAA;AAC/C,QAAA,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;KAC1B;;AAGD,IAAA,IAAW,aAAa,GAAA;AACpB,QAAA,MAAM,aAAa,GAAG,KAAK,CAAC,iBAAiB,EAAE,CAAC;AAChD,QAAA,OAAO,aAAa,GAAG,CAAC,CAAc,CAAC;KAC1C;;IAGD,IACW,cAAc,CAAC,KAAgB,EAAA;AACtC,QAAA,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;KAC1B;;AAGD,IAAA,IAAW,cAAc,GAAA;AACrB,QAAA,OAAO,KAAK,CAAC,iBAAiB,EAAE,CAAC;KACpC;;IAGD,IACW,eAAe,CAAC,eAAyC,EAAA;AAChE,QAAA,IAAI,CAAC,kBAAkB,CAAC,eAAe,CAAC,CAAC;QACzC,IAAI,eAAe,EAAE,SAAS,EAAE;YAC5B,IAAI,CAAC,KAAK,GAAG,eAAe,CAAC,SAAS,CAAC,QAAQ,EAAE,CAAC;AACrD,SAAA;KACJ;;AAGD,IAAA,IAAW,eAAe,GAAA;AACtB,QAAA,OAAO,IAAI,CAAC,kBAAkB,EAAE,CAAC;KACpC;;IAGD,IACW,cAAc,CAAC,KAAqB,EAAA;AAC3C,QAAA,IAAI,CAAC,iBAAiB,CAAC,KAAK,CAAC,CAAC;KACjC;;IAGD,IACW,eAAe,CAAC,KAAsB,EAAA;AAC7C,QAAA,IAAI,CAAC,kBAAkB,CAAC,KAAK,CAAC,CAAC;KAClC;;IAGD,IACW,MAAM,CAAC,KAAc,EAAA;AAC5B,QAAA,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC;KACxB;;AAGD,IAAA,IAAW,MAAM,GAAA;QACb,OAAO,IAAI,CAAC,OAAO,CAAC;KACvB;;IAGD,IAEW,KAAK,CAAC,KAA8F,EAAA;QAC3G,KAAK,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,IAAI,CACvB,IAAI,CAAC,CAAC,CAAC,EACP,GAAG,CAAC,MAAM,IAAI,CAAC,eAAe,EAAE,CAAC,EACjC,SAAS,CAAC,MAAM,IAAI,CAAC,aAAa,EAAE,CAAC,EACrC,SAAS,CAAC,IAAI,CAAC,UAAU,CAAC,CAC7B,CAAC,SAAS,EAAE,CAAC;KACjB;;IAGD,IAEW,MAAM,CAAC,KAAwC,EAAA;QACtD,KAAK,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,IAAI,CACxB,IAAI,CAAC,CAAC,CAAC,EACP,GAAG,CAAC,MAAM,IAAI,CAAC,eAAe,EAAE,CAAC,EACjC,SAAS,CAAC,MAAM,IAAI,CAAC,aAAa,EAAE,CAAC,EACrC,SAAS,CAAC,IAAI,CAAC,UAAU,CAAC,CAC7B,CAAC,SAAS,EAAE,CAAC;KACjB;;AAGD,IAAA,IAAW,QAAQ,GAAA;QACf,OAAO,IAAI,CAAC,SAAS,CAAC;KACzB;AAED;;;AAGG;IACH,IACW,SAAS,CAAC,KAAa,EAAA;AAC9B,QAAA,KAAK,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;KAC7B;AAED;;;AAGG;AACH,IAAA,IAAW,SAAS,GAAA;AAChB,QAAA,OAAO,IAAI,CAAC,YAAY,EAAE,CAAC;KAC9B;IAED,IAEW,QAAQ,CAAC,KAAc,EAAA;AAC9B,QAAA,MAAM,QAAQ,GAAG,qBAAqB,CAAC,KAAK,CAAC,CAAC;AAC9C,QAAA,IAAI,CAAC,SAAS,GAAG,QAAQ,IAAI,IAAI,CAAC;AAClC,QAAA,IAAI,CAAC,iBAAiB,CAAC,YAAY,EAAE,CAAC;KACzC;;AAGD,IAAA,IAAW,QAAQ,GAAA;QACf,OAAO,IAAI,CAAC,SAAS,CAAC;KACzB;IAED,IACc,uBAAuB,CAAC,KAAkC,EAAA;AACpE,QAAA,IAAI,KAAK,EAAE;AACP,YAAA,KAAK,CAAC,aAAa,GAAG,IAAI,CAAC,SAAS,CAAC;AACxC,SAAA;KACJ;IAED,IAAY,gBAAgB,CAAC,KAAa,EAAA;AACtC,QAAA,KAAK,CAAC,mBAAmB,CAAC,KAAK,CAAC,CAAC;AACjC,QAAA,IAAI,CAAC,iBAAiB,CAAC,YAAY,EAAE,CAAC;KACzC;AAED,IAAA,IAAY,gBAAgB,GAAA;AACxB,QAAA,OAAO,IAAI,CAAC,mBAAmB,EAAE,CAAC;KACrC;AAED,IAAA,IAAW,YAAY,GAAA;AACnB,QAAA,OAAO,IAAI,CAAC,oBAAoB,IAAI,IAAI,CAAC,oBAAoB,CAAC;KACjE;AAED,IAAA,IAAW,kBAAkB,GAAA;AACzB,QAAA,OAAO,IAAI,CAAC,0BAA0B,IAAI,IAAI,CAAC,0BAA0B,CAAC;KAC7E;AAED,IAAA,IAAY,gBAAgB,GAAA;AACxB,QAAA,OAAO,IAAI,CAAC,YAAY,EAAE,aAAiC,CAAC;KAC/D;AAED,IAAA,IAAW,cAAc,GAAA;AACrB,QAAA,OAAO,IAAI,CAAC,sBAAsB,IAAI,IAAI,CAAC,sBAAsB,CAAC;KACrE;AAED,IAAA,IAAW,eAAe,GAAA;QACtB,OAAO,IAAI,CAAC,gBAAgB,CAAC;KAChC;;AAGD,IAAA,IAAW,KAAK,GAAA;AACZ,QAAA,OAAO,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,YAAY,CAAC;KACrE;IAED,IAAW,KAAK,CAAC,GAA8C,EAAA;AAC3D,QAAA,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;AACrB,QAAA,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,CAAC;QAC3B,IAAI,CAAC,iBAAiB,EAAE,CAAC;AACzB,QAAA,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE,CAAC;KAC5B;AAEM,IAAA,UAAU,CAAC,KAAgD,EAAA;AAC9D,QAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;KAChC;AAEM,IAAA,gBAAgB,CAAC,EAAyB,EAAA;AAC7C,QAAA,IAAI,CAAC,gBAAgB,GAAG,EAAE,CAAC;KAC9B;AAEM,IAAA,iBAAiB,CAAC,EAAc,EAAA;AACnC,QAAA,IAAI,CAAC,iBAAiB,GAAG,EAAE,CAAC;KAC/B;AAEM,IAAA,gBAAgB,CAAC,UAAmB,EAAA;AACvC,QAAA,IAAI,CAAC,QAAQ,GAAG,UAAU,CAAC;KAC9B;;IAGM,SAAS,GAAA;QACZ,IAAI,IAAI,CAAC,SAAS,EAAE;YAChB,IAAI,CAAC,gBAAgB,EAAE,CAAC;AAC3B,SAAA;KACJ;IAEM,WAAW,GAAA;AACd,QAAA,IAAI,CAAC,YAAY,CAAC,QAAQ,EAAE,CAAC;QAC7B,IAAI,CAAC,EAAE,CAAC,cAAc,CAAC,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,CAAC;KACzD;IAEM,kBAAkB,GAAA;AACrB,QAAA,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAEpC,IAAI,IAAI,CAAC,SAAS,EAAE;AAChB,YAAA,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC,IAAI,CAC5B,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,EAC1B,SAAS,CAAC,IAAI,CAAC,UAAU,CAAC,CAC7B,CAAC,SAAS,CAAC,MAAK;AACb,gBAAA,IAAI,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE;oBACxB,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,OAAO,CAAC,aAAa,EAAE,CAAC;AAChD,iBAAA;gBACD,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,OAAO,CAAC,sBAAsB,EAAE,CAAC;AAC1D,aAAC,CAAC,CAAC;AACN,SAAA;QAED,IAAI,CAAC,mBAAmB,GAAG,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC;AACzD,QAAA,IAAI,IAAI,CAAC,mBAAmB,CAAC,aAAa,CAAC,SAAS,CAAC,QAAQ,CAAC,sBAAsB,CAAC,EAAE;YACnF,IAAI,CAAC,mBAAmB,GAAG,IAAI,CAAC,mBAAmB,CAAC,aAAa,CAAC;AACrE,SAAA;KACJ;IAEM,eAAe,GAAA;AAClB,QAAA,SAAS,CAAQ,IAAI,CAAC,gBAAgB,EAAE,OAAO,CAAC,CAAC,IAAI,CACjD,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,eAAe,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,EACrD,SAAS,CAAC,IAAI,CAAC,UAAU,CAAC,CAC7B,CAAC,SAAS,CAAC,MAAM,IAAG;YACjB,IAAI,IAAI,CAAC,YAAY,EAAE;gBACnB,IAAI,CAAC,YAAY,EAAE,CAAC;AACvB,aAAA;AACL,SAAC,CAAC,CAAC;QAEH,SAAS,CAAQ,IAAI,CAAC,gBAAgB,EAAE,OAAO,CAAC,CAAC,IAAI,CACjD,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,eAAe,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,EACrD,KAAK,CAAC,EAAE,CAAC,EACT,MAAM,CAAC,MAAM,IAAI,CAAC,gBAAgB,KAAK,QAAQ,CAAC,aAAa,CAAC,EAC9D,SAAS,CAAC,IAAI,CAAC,UAAU,CAAC,CAC7B,CAAC,SAAS,CAAC,KAAK,IAAG;YAChB,IAAI,IAAI,CAAC,YAAY,EAAE;gBACnB,IAAI,CAAC,YAAY,EAAE,CAAC;AACvB,aAAA;AAAM,iBAAA;AACH,gBAAA,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AAC5B,aAAA;AACL,SAAC,CAAC,CAAC;AAEH,QAAA,SAAS,CAAQ,IAAI,CAAC,gBAAgB,EAAE,MAAM,CAAC,CAAC,IAAI,CAChD,MAAM,CAAC,MAAM,IAAI,CAAC,kBAAkB,KAAK,SAAS,CAAC,EACnD,SAAS,CAAC,IAAI,CAAC,UAAU,CAAC,CAC7B,CAAC,SAAS,CAAC,MAAK;YACb,IAAI,CAAC,iBAAiB,EAAE,CAAC;AACzB,YAAA,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;AAChC,SAAC,CAAC,CAAC;AAEH,QAAA,SAAS,CAAgB,IAAI,CAAC,gBAAgB,EAAE,SAAS,CAAC,CAAC,IAAI,CAC3D,SAAS,CAAC,SAAS,CAAgB,IAAI,CAAC,UAAU,CAAC,aAAa,EAAE,SAAS,CAAC,CAAC,EAC7E,MAAM,CAAC,KAAK,IAAG;YACX,IAAI,KAAK,CAAC,gBAAgB,EAAE;AACxB,gBAAA,OAAO,KAAK,CAAC;AAChB,aAAA;AAED,YAAA,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,CAAC;AAC3B,YAAA,OAAO,OAAO,KAAK,QAAQ,CAAC,IAAI;gBAC5B,OAAO,KAAK,QAAQ,CAAC,GAAG;gBACxB,OAAO,KAAK,QAAQ,CAAC,MAAM;gBAC3B,OAAO,KAAK,QAAQ,CAAC,QAAQ;gBAC7B,OAAO,KAAK,QAAQ,CAAC,OAAO;gBAC5B,OAAO,KAAK,QAAQ,CAAC,SAAS;gBAC9B,OAAO,KAAK,QAAQ,CAAC,KAAK;AAC1B,gBAAA,OAAO,KAAK,QAAQ,CAAC,KAAK,CAAC;AACnC,SAAC,CAAC,EACF,SAAS,CAAC,KAAK,IAAI,IAAI,CAAC,iBAAiB,EAAE,CAAC,IAAI,CAC5C,SAAS,CAAC,MAAK;;AAEX,YAAA,MAAM,eAAe,GAAG,CAAC,KAAa,EAAE,IAAyB,KAAU;AACvE,gBAAA,IAAI,CAAC,gBAAgB,GAAG,KAAK,CAAC;gBAC9B,IAAI,IAAI,CAAC,eAAe,EAAE;AACtB,oBAAA,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;AAC9C,oBAAA,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE,CAAC;AAC3B,iBAAA;AAED,gBAAA,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE;AACpB,oBAAA,IAAI,GAAG,IAAI,IAAI,KAAK,CAAC,cAAc,EAAE,CAAC;AACtC,oBAAA,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;AAC5B,iBAAA;AACL,aAAC,CAAC;YAEF,QAAQ,KAAK,CAAC,IAAI;gBACd,KAAK,QAAQ,CAAC,IAAI;AACd,oBAAA,IAAI,KAAK,CAAC,MAAM,IAAI,IAAI,CAAC,YAAY,IAAI,CAAC,IAAI,CAAC,eAAe,EAAE;wBAC5D,IAAI,CAAC,cAAc,EAAE,CAAC;AACzB,qBAAA;AAAM,yBAAA;wBACH,eAAe,CAAC,CAAC,CAAC,CAAC;AACtB,qBAAA;AACD,oBAAA,OAAO,EAAE,CAAC,KAAK,CAAC,CAAC;gBAErB,KAAK,QAAQ,CAAC,GAAG;AACb,oBAAA,IAAI,KAAK,CAAC,MAAM,IAAI,IAAI,CAAC,YAAY,IAAI,CAAC,IAAI,CAAC,eAAe,EAAE;wBAC5D,IAAI,CAAC,cAAc,EAAE,CAAC;AACzB,qBAAA;AAAM,yBAAA;AACH,wBAAA,eAAe,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,SAAS,GAAG,CAAC,CAAC,CAAC,CAAC;AACpD,qBAAA;AACD,oBAAA,OAAO,EAAE,CAAC,KAAK,CAAC,CAAC;gBAErB,KAAK,QAAQ,CAAC,MAAM;AAChB,oBAAA,IAAI,KAAK,CAAC,MAAM,IAAI,IAAI,CAAC,YAAY,IAAI,CAAC,IAAI,CAAC,eAAe,EAAE;wBAC5D,IAAI,CAAC,cAAc,EAAE,CAAC;AACzB,qBAAA;AAAM,yBAAA;AACH,wBAAA,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC;wBAClE,eAAe,CAAC,KAAK,CAAC,CAAC;AAC1B,qBAAA;AACD,oBAAA,OAAO,EAAE,CAAC,KAAK,CAAC,CAAC;gBAErB,KAAK,QAAQ,CAAC,QAAQ;AAClB,oBAAA,IAAI,KAAK,CAAC,MAAM,IAAI,IAAI,CAAC,YAAY,IAAI,CAAC,IAAI,CAAC,eAAe,EAAE;wBAC5D,IAAI,CAAC,cAAc,EAAE,CAAC;AACzB,qBAAA;AAAM,yBAAA;wBACH,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,GAAG,CAAC,EAAE,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC;wBACnF,eAAe,CAAC,KAAK,CAAC,CAAC;AAC1B,qBAAA;AACD,oBAAA,OAAO,EAAE,CAAC,KAAK,CAAC,CAAC;gBAErB,KAAK,QAAQ,CAAC,OAAO;AACjB,oBAAA,IAAI,KAAK,CAAC,MAAM,IAAI,IAAI,CAAC,YAAY,IAAI,CAAC,IAAI,CAAC,eAAe,EAAE;wBAC5D,IAAI,CAAC,cAAc,EAAE,CAAC;AACzB,qBAAA;AAAM,yBAAA;AACH,wBAAA,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,gBAAgB,GAAG,CAAC,CAAC,CAAC;wBACrD,eAAe,CAAC,KAAK,CAAC,CAAC;AAC1B,qBAAA;AACD,oBAAA,OAAO,EAAE,CAAC,KAAK,CAAC,CAAC;gBAErB,KAAK,QAAQ,CAAC,SAAS;AACnB,oBAAA,IAAI,KAAK,CAAC,MAAM,IAAI,IAAI,CAAC,YAAY,IAAI,CAAC,IAAI,CAAC,eAAe,EAAE;wBAC5D,IAAI,CAAC,cAAc,EAAE,CAAC;AACzB,qBAAA;AAAM,yBAAA;AACH,wBAAA,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,GAAG,CAAC,EAAE,IAAI,CAAC,gBAAgB,GAAG,CAAC,CAAC,CAAC;wBACtE,eAAe,CAAC,KAAK,CAAC,CAAC;AAC1B,qBAAA;AACD,oBAAA,OAAO,EAAE,CAAC,KAAK,CAAC,CAAC;gBAErB,KAAK,QAAQ,CAAC,KAAK;oBACf,IAAI,IAAI,CAAC,eAAe,EAAE;AACtB,wBAAA,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,UAAU,CAAC,CAAC;AACrE,wBAAA,IAAI,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,EAAE;AAC1B,4BAAA,IAAI,CAAC,mBAAmB,CAAC,IAAI,EAAE,CAAC;4BAChC,MAAM,QAAQ,GAAG,IAAqC,CAAC;4BACvD,OAAO,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,gBAAgB,EAAE,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,IAAI,CACxE,GAAG,CAAC,MAAM,KAAK,CAAC,CACnB,CAAC;AACL,yBAAA;AACJ,qBAAA;AACD,oBAAA,OAAO,EAAE,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;;;gBAIlC,KAAK,QAAQ,CAAC,KAAK;oBACf,IAAI,IAAI,CAAC,eAAe,EAAE;AACtB,wBAAA,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,UAAU,CAAC,CAAC;AACrE,wBAAA,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;AACrB,qBAAA;AACD,oBAAA,OAAO,EAAE,CAAC,KAAK,CAAC,CAAC;AAErB,gBAAA;AACI,oBAAA,OAAO,EAAE,CAAC,IAAI,CAAC,CAAC;AACvB,aAAA;AACL,SAAC,CAAC,EACF,MAAM,CAAC,mBAAmB,IAAI,CAAC,mBAAmB,CAAC,EACnD,GAAG,CAAC,MAAK;AACL,YAAA,IAAI,CAAC,mBAAmB,CAAC,IAAI,EAAE,CAAC;AAChC,YAAA,IAAI,CAAC,iBAAiB,CAAC,YAAY,EAAE,CAAC;YACtC,KAAK,CAAC,cAAc,EAAE,CAAC;AACvB,YAAA,OAAO,KAAK,CAAC;AACjB,SAAC,CAAC,CACL,CAAC,EACF,SAAS,CAAC,IAAI,CAAC,UAAU,CAAC,CAC7B,CAAC,SAAS,EAAE,CAAC;AAEd,QAAA,MAAM,MAAM,GAAG,SAAS,CAAgB,IAAI,CAAC,gBAAgB,EAAE,OAAO,CAAC,CAAC,IAAI,CACxE,MAAM,CAAC,KAAK,IAAG;AACX,YAAA,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,CAAC;AAC3B,YAAA,OAAO,OAAO,IAAI,QAAQ,CAAC,IAAI;gBAC3B,OAAO,KAAK,QAAQ,CAAC,SAAS;gBAC9B,OAAO,KAAK,QAAQ,CAAC,KAAK;AAC1B,gBAAA,OAAO,KAAK,QAAQ,CAAC,MAAM,CAAC;SACnC,CAAC,CACL,CAAC;AAEF,QAAA,MAAM,CAAC,IAAI,CACP,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,EACvB,GAAG,CAAC,MAAK;AACL,YAAA,IAAI,CAAC,IAAI,CAAC,KAAK,IAAI,EAAE,EAAE,MAAM,GAAG,IAAI,CAAC,eAAe,EAAE;AAClD,gBAAA,IAAI,CAAC,SAAS,GAAG,EAAE,CAAC;gBACpB,IAAI,CAAC,YAAY,EAAE,CAAC;gBACpB,OAAO;AACV,aAAA;AACL,SAAC,CAAC,EACF,SAAS,CAAC,KAAK,IAAG;;AAEd,YAAA,IAAI,CAAC,mBAAmB,CAAC,IAAI,EAAE,CAAC;YAChC,IAAI,IAAI,CAAC,YAAY,EAAE;gBACnB,MAAM,aAAa,GAAG,KAAsB,CAAC;;gBAE7C,IAAI,CAAC,aAAa,EAAE,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,EAAE;;AAEzC,oBAAA,IAAI,CAAC,sBAAsB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;;AAGvC,oBAAA,IAAI,CAAC,gBAAgB,IAAI,aAAa,CAAC,GAAG,CAAC;AAC3C,oBAAA,MAAM,EAAE,GAAG,IAAI,MAAM,CAAC,CAAA,CAAA,EAAI,IAAI,CAAC,gBAAgB,CAAA,CAAE,EAAE,GAAG,CAAC,CAAC;AACxD,oBAAA,OAAO,IAAI,CAAC,cAAc,CAAC,IAAI,IAAG;wBAC9B,IAAI,IAAI,IAAI,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,EAAE;4BACjC,MAAM,KAAK,GAAG,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;AACtC,4BAAA,IAAI,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE;AAChB,gCAAA,OAAO,IAAI,CAAC;AACf,6BAAA;AACJ,yBAAA;AACD,wBAAA,OAAO,KAAK,CAAC;AACjB,qBAAC,EAAE,IAAI,CAAC,gBAAgB,CAAC,CAAC,IAAI,CAC1B,IAAI,CAAC,CAAC,CAAC,CACV,CAAC;AACL,iBAAA;AACJ,aAAA;AAAM,iBAAA;;AAEH,gBAAA,IAAI,CAAC,mBAAmB,CAAC,IAAI,EAAE,CAAC;AACnC,aAAA;AAED,YAAA,OAAO,EAAE,CAAC,IAAgC,CAAC,CAAC;SAC/C,CAAC,EACF,MAAM,CAAC,MAAM,IAAI,MAAM,EAAE,KAAK,IAAI,CAAC,CAAC,EACpC,SAAS,CAAC,IAAI,CAAC,UAAU,CAAC,CAC7B,CAAC,SAAS,CAAC,MAAM,IAAG;;AAEjB,YAAA,IAAI,CAAC,gBAAgB,GAAG,MAAM,CAAC,KAAK,CAAC;YACrC,IAAI,IAAI,CAAC,eAAe,EAAE;AACtB,gBAAA,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;AACjD,aAAA;AAED,YAAA,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE;gBACpB,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,IAAI,KAAK,CAAC,cAAc,EAAE,CAAC;AACnD,gBAAA,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;AAC5B,aAAA;AACL,SAAC,CAAC,CAAC;KACN;AAEM,IAAA,iBAAiB,CAAC,GAAa,EAAA;QAClC,IAAI,CAAC,WAAW,GAAG,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;KACpC;AAEM,IAAA,gBAAgB,CAAC,KAAiB,EAAA;QACrC,IAAK,KAAK,CAAC,MAAkB,CAAC,OAAO,CAAC,WAAW,EAAE,KAAK,OAAO,EAAE;AAC7D,YAAA,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,CAAC;AAChE,SAAA;KACJ;;AAGM,IAAA,UAAU,CAAC,SAAmB,EAAA;AACjC,QAAA,OAAO,KAAK,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC,IAAI,CACnC,SAAS,CAAC,KAAK,IAAI,IAAI,CAAC,aAAa,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;KACjF;;AAGM,IAAA,SAAS,CAAC,SAAmB,EAAA;QAChC,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC,IAAI,CAC3B,IAAI,CAAC,CAAC,CAAC,EACP,SAAS,CAAC,IAAI,CAAC,UAAU,CAAC,CAC7B,CAAC,SAAS,EAAE,CAAC;KACjB;AAED;;;;AAIG;IACI,eAAe,CAAC,KAAa,EAAE,SAAkB,EAAA;AACpD,QAAA,OAAO,KAAK,CAAC,eAAe,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC,IAAI,CAC/C,GAAG,CAAC,MAAK;YACL,IAAI,IAAI,CAAC,eAAe,EAAE;gBACtB,IAAI,CAAC,cAAc,EAAE,CAAC;AACzB,aAAA;SACJ,CAAC,CAAC,CAAC;KACX;AAED;;;AAGG;IACI,cAAc,CAAC,KAAa,EAAE,SAAkB,EAAA;QACnD,IAAI,CAAC,eAAe,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC,IAAI,CACvC,IAAI,CAAC,CAAC,CAAC,EACP,SAAS,CAAC,IAAI,CAAC,UAAU,CAAC,CAC7B,CAAC,SAAS,EAAE,CAAC;KACjB;AAEM,IAAA,YAAY,CAAC,KAAa,EAAA;AAC7B,QAAA,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;AACnB,QAAA,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE;;AAEpB,YAAA,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,KAAK,CAAC;YAChC,IAAI,IAAI,CAAC,kBAAkB,EAAE;AACzB,gBAAA,IAAI,CAAC,YAAY,EAAE,CAAC,IAAI,CACpB,IAAI,CAAC,CAAC,CAAC,EACP,SAAS,CAAC,IAAI,CAAC,UAAU,CAAC,CAC7B,CAAC,SAAS,CAAC,MAAM,IAAI,CAAC,aAAa,EAAE,CAAC,CAAC;AAC3C,aAAA;AACJ,SAAA;KACJ;IAEM,YAAY,GAAA;AACf,QAAA,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;KACjC;AAEM,IAAA,MAAM,CAAC,KAAY,EAAA;AACtB,QAAA,MAAM,OAAO,GAAG,KAAK,CAAC,MAAqB,CAAC;QAC5C,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;KACrD;AAEM,IAAA,SAAS,CAAC,CAAa,EAAA;QAC1B,IAAI,IAAI,CAAC,WAAW,EAAE;AAClB,YAAA,IAAI,CAAC,WAAW,CAAC,WAAW,EAAE,CAAC;AAC/B,YAAA,IAAI,CAAC,WAAW,GAAG,SAAS,CAAC;AAChC,SAAA;QAED,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC,2BAA2B,CAAC,CAAC,CAAC,MAAqB,CAAC,CAAC;AAEpF,QAAA,IAAI,CAAC,WAAW,GAAG,SAAS,CAAa,IAAI,CAAC,WAAW,EAAE,SAAS,CAAC,CAAC,IAAI,CACtE,SAAS,CAAC,OAAO,IAAG;YAChB,MAAM,SAAS,GAAG,IAAI,CAAC,2BAA2B,CAAC,OAAO,CAAC,MAAqB,CAAC,CAAC;AAClF,YAAA,IAAI,SAAS,KAAK,SAAS,IAAI,IAAI,CAAC,kBAAkB,KAAK,SAAS,IAAI,SAAS,KAAK,IAAI,CAAC,kBAAkB,EAAE;AAC3G,gBAAA,OAAO,EAAE,CAAC,IAAI,CAAC,CAAC;AACnB,aAAA;AAED,YAAA,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,SAAS,GAAG,IAAI,CAAC,UAAU,CAAC,CAAC;YACzD,IAAI,CAAC,IAAI,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE;;AAE/B,gBAAA,OAAO,EAAE,CAAC,IAAI,CAAC,CAAC;AACnB,aAAA;YAED,MAAM,cAAc,GAAG,CAAC,MAAmB,KAAc,MAAM,CAAC,EAAE,KAAK,WAAW,IAAI,MAAM,CAAC,aAAa,CAAC,EAAE,KAAK,WAAW,CAAC;YAE9H,IAAI,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,KAAK,cAAc,CAAC,CAAC,CAAC,MAAqB,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,EAAE;AACnG,gBAAA,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE;oBACtB,MAAM,QAAQ,GAAG,IAAqC,CAAC;oBACvD,OAAO,IAAI,CAAC,eAAe,CAAC,SAAS,EAAE,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;AAC/D,iBAAA;AACJ,aAAA;AAAM,iBAAA,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE;AACvB,gBAAA,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;AACrB,aAAA;AAED,YAAA,OAAO,EAAE,CAAC,IAAI,CAAC,CAAC;AACpB,SAAC,CAAC,EACF,SAAS,CAAC,IAAI,CAAC,UAAU,CAAC,CAC7B,CAAC,SAAS,EAAE,CAAC;KACjB;AAEM,IAAA,YAAY,CAAC,IAAwB,EAAA;AACxC,QAAA,MAAM,UAAU,GAAG,CAAC,UAAU,CAAa,CAAC;QAC5C,IAAI,IAAI,CAAC,SAAS,EAAE;AAChB,YAAA,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;AACnC,SAAA;AACD,QAAA,IAAI,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,SAAS,EAAE;AACnC,YAAA,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;AAC3B,SAAA;AACD,QAAA,IAAI,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,QAAQ,EAAE;AAC5B,YAAA,UAAU,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;AAC7B,SAAA;QACD,IAAI,IAAI,CAAC,SAAS,EAAE;AAChB,YAAA,UAAU,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;AAChC,SAAA;QACD,IAAI,IAAI,CAAC,QAAQ,EAAE;AACf,YAAA,UAAU,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;AAC/B,SAAA;QACD,IAAI,EAAE,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,EAAE;AAC5B,YAAA,UAAU,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;AACnC,SAAA;QACD,IAAI,IAAI,CAAC,KAAK,KAAK,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,GAAG,EAAE;AAC3C,YAAA,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AAC1B,SAAA;AACD,QAAA,OAAO,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;KAC/B;IAEM,gBAAgB,GAAA;AACnB,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,UAAU,CAAC;QACjC,MAAM,MAAM,GAAG,IAAI,CAAC,eAAe,IAAI,IAAI,CAAC,UAAU,CAAC;QACvD,MAAM,OAAO,GAAG,IAAI,CAAC,iBAAiB,IAAI,IAAI,CAAC,wBAAwB,CAAC;AACxE,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC,OAAsB,GAAG,IAAI,CAAC;QAC9E,MAAM,QAAQ,GAAG,OAAO,CAAC,YAAY,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;QAEvD,IAAI,QAAQ,KAAK,QAAQ,EAAE;AACvB,YAAA,IAAI,CAAC,UAAU,GAAG,QAAQ,CAAC;AAC3B,YAAA,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE,CAAC;AAC5B,SAAA;KACJ;IAEM,cAAc,GAAA;QACjB,IAAI,CAAC,eAAe,EAAE,CAAC;KAC1B;AAEM,IAAA,YAAY,CAAC,UAAiB,EAAA;QACjC,IAAI,CAAC,iBAAiB,EAAE,CAAC;QACzB,UAAU,CAAC,eAAe,EAAE,CAAC;AAC7B,QAAA,OAAO,KAAK,CAAC;KAChB;AAEM,IAAA,iBAAiB,CAAC,UAA0C,EAAA;QAC/D,IAAI,IAAI,CAAC,SAAS,EAAE;AAChB,YAAA,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,aAAa,EAAE,CAAC;AAC1C,SAAA;AACD,QAAA,IAAI,CAAC,eAAe,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC;KAC1C;AAEM,IAAA,aAAa,CAAC,KAAY,EAAA;AAC7B,QAAA,IAAI,IAAI,CAAC,eAAe,IAAI,IAAI,CAAC,QAAQ,EAAE;YACvC,OAAO;AACV,SAAA;QAED,IAAI,IAAI,CAAC,YAAY,EAAE;YACnB,IAAI,CAAC,YAAY,EAAE,CAAC;AACvB,SAAA;AAAM,aAAA;AACH,YAAA,IAAI,CAAC,gBAAgB,CAAC,MAAM,EAAE,CAAC;AAC/B,YAAA,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AAC5B,SAAA;KACJ;IAEM,cAAc,GAAA;QACjB,IAAI,IAAI,CAAC,eAAe,EAAE;YACtB,IAAI,CAAC,YAAY,EAAE,CAAC;AACvB,SAAA;AAAM,aAAA;YACH,IAAI,CAAC,YAAY,EAAE,CAAC;AACvB,SAAA;KACJ;IAEM,YAAY,GAAA;AACf,QAAA,IAAI,CAAC,aAAa,CAAC,IAAI,EAAE,CAAC;KAC7B;AAOS,IAAA,eAAe,CAAC,IAAyB,EAAA;AAC/C,QAAA,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE;AACpB,YAAA,IAAI,CAAC,KAAK,GAAG,EAAE,CAAC;AAChB,YAAA,IAAI,CAAC,aAAa,GAAG,EAAE,CAAC;AACxB,YAAA,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC;YAC5B,IAAI,CAAC,aAAa,EAAE,CAAC;YACrB,OAAO,IAAI,CAAC,kBAAkB,CAAC;AAClC,SAAA;AAAM,aAAA,IAAI,IAAI,EAAE;AACb,YAAA,IAAI,CAAC,aAAa,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,CAAC,CAAC,IAAI,CAClC,IAAI,CAAC,CAAC,CAAC,EACP,SAAS,CAAC,IAAI,CAAC,UAAU,CAAC,CAC7B,CAAC,SAAS,CAAC,aAAa,IAAG;AACxB,gBAAA,MAAM,QAAQ,GAAG,CAAC,GAAG,aAAa,CAAC,CAAC;AACpC,gBAAA,IAAI,CAAC,gBAAgB,CAAC,QAAQ,CAAC,CAAC;AAChC,gBAAA,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;AACjC,aAAC,CAAC,CAAC;AACN,SAAA;AAAM,aAAA;AACH,YAAA,IAAI,CAAC,YAAY,EAAE,CAAC,IAAI,CACpB,IAAI,CAAC,CAAC,CAAC,EACP,SAAS,CAAC,IAAI,CAAC,UAAU,CAAC,CAC7B,CAAC,SAAS,CAAC,MAAM,IAAI,CAAC,aAAa,EAAE,CAAC,CAAC;AAC3C,SAAA;KACJ;IAES,aAAa,GAAA;QACnB,OAAO,KAAK,CAAC,aAAa,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,IAAI,CAC/C,GAAG,CAAC,MAAM,IAAI,CAAC,iBAAiB,CAAC,YAAY,EAAE,CAAC,CACnD,CAAC;KACL;AAES,IAAA,iBAAiB,CAAC,IAAiC,EAAA;AACzD,QAAA,KAAK,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC;KACjC;AAEO,IAAA,aAAa,CAAC,KAAiD,EAAA;QACnE,IAAI,aAAa,GAAG,IAAI,CAAC;QAEzB,IAAI,MAAM,GAAG,IAAI,CAAC;AAElB,QAAA,IAAI,KAAK,EAAE;AACP,YAAA,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;;gBAEtB,MAAM,MAAM,GAAG,KAAK,CAAC,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,KAAK,KAAK,SAAS,GAAG,GAAG,CAAC,KAAK,GAAG,GAAG,CAAC,CAAC;AAC3E,gBAAA,aAAa,GAAG;AACZ,oBAAA,KAAK,EAAE,KAAK;AACZ,oBAAA,MAAM,EAAE,MAAM;iBACU,CAAC;gBAE7B,IAAI,IAAI,CAAC,YAAY,EAAE;AACnB,oBAAA,MAAM,UAAU,GAAG,IAAI,CAAC,aAAa,EAAE,CAAC;AACxC,oBAAA,IAAI,MAAM,CAAC,IAAI,CAAC,CAAC,CAA0B,KAAK,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,EAAE;;AAE9D,wBAAA,MAAM,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,CAA0B,KAAK,CAAC,CAAC,UAAU,CAAC,KAAK,SAAS,GAAG,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC;AACxG,qBAAA;AACJ,iBAAA;AAAM,qBAAA;oBACH,MAAM,GAAG,MAAM,CAAC;AACnB,iBAAA;AACJ,aAAA;AAAM,iBAAA;AACH,gBAAA,MAAM,KAAK,GAAG,KAAK,CAAC,KAAgC,CAAC;AACrD,gBAAA,aAAa,GAAG;AACZ,oBAAA,IAAI,EAAE,KAAK;AACX,oBAAA,KAAK,EAAE,KAAK;iBACW,CAAC;gBAE5B,IAAI,IAAI,CAAC,YAAY,EAAE;AACnB,oBAAA,MAAM,UAAU,GAAG,IAAI,CAAC,aAAa,EAAE,CAAC;AACxC,oBAAA,MAAM,GAAG,KAAK,CAAC,UAAU,CAAC,KAAK,SAAS,GAAG,KAAK,CAAC,UAAU,CAAC,GAAG,KAAK,CAAC;AACxE,iBAAA;AAAM,qBAAA;AACH,oBAAA,MAAM,GAAG,KAAK,CAAC,KAAK,KAAK,SAAS,GAAG,KAAK,CAAC,KAAK,GAAG,KAAK,CAAC;AAC5D,iBAAA;AACJ,aAAA;AACJ,SAAA;AAED,QAAA,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,CAAC;AAE9B,QAAA,IAAI,aAAa,EAAE;AACf,YAAA,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;AAC3C,SAAA;KACJ;IAEO,MAAM,CAAC,IAAwB,EAAE,YAAsB,EAAA;AAC3D,QAAA,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,EAAE;YAC1B,OAAO;AACV,SAAA;QAED,IAAI,CAAC,IAAI,EAAE;;;;;YAKP,OAAO;AACV,SAAA;QAED,IAAI,IAAI,CAAC,YAAY,EAAE;AACnB,YAAA,IAAI,CAAC,aAAa,CAAC,CAAC,IAAI,CAAC,EAAE,IAAI,CAAC,CAAC,IAAI,CACjC,IAAI,CAAC,CAAC,CAAC,EACP,SAAS,CAAC,IAAI,CAAC,UAAU,CAAC,CAC7B,CAAC,SAAS,CAAC,aAAa,IAAG;AACxB,gBAAA,MAAM,QAAQ,GAAG,aAAa,GAAG,CAAC,GAAG,aAAa,CAAC,GAAG,EAAE,CAAC;AACzD,gBAAA,IAAI,CAAC,gBAAgB,CAAC,QAAQ,CAAC,CAAC;AAChC,gBAAA,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;AAC7B,gBAAA,IAAI,CAAC,KAAK,GAAG,EAAE,CAAC;AAChB,gBAAA,IAAI,CAAC,aAAa,GAAG,EAAE,CAAC;AAC5B,aAAC,CAAC,CAAC;AACN,SAAA;AAAM,aAAA;YACH,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;AACrC,YAAA,IAAI,CAAC,gBAAgB,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;AAC9B,YAAA,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;AAC5B,SAAA;AAED,QAAA,IAAI,CAAC,gBAAgB,CAAC,KAAK,EAAE,CAAC;QAC9B,IAAI,YAAY,IAAI,IAAI,EAAE;YACtB,IAAI,CAAC,YAAY,EAAE,CAAC;AACvB,SAAA;KACJ;IAEO,cAAc,GAAA;AAClB,QAAA,IAAI,CAAC,IAAI,CAAC,eAAe,EAAE;AACvB,YAAA,OAAO,IAAI,CAAC,YAAY,EAAE,CAAC;AAC9B,SAAA;QAED,OAAO,IAAI,CAAC,kBAAkB,CAAC;;AAG/B,QAAA,MAAM,WAAW,GAAG,IAAI,CAAC,WAAW,CAAC;AACrC,QAAA,IAAI,WAAW,EAAE;AACb,YAAA,WAAW,CAAC,SAAS,GAAG,IAAI,CAAC,kBAAkB,CAAC;AACnD,SAAA;QAED,IAAI,CAAC,aAAa,EAAE,CAAC,IAAI,CACrB,GAAG,CAAC,MAAM,IAAI,CAAC,eAAe,EAAE,CAAC,EACjC,SAAS,CAAC,MAAM,IAAI,CAAC,eAAe,CAAC;QACrC,IAAI,CAAC,CAAC,CAAC,EACP,KAAK,CAAC,CAAC,CAAC,EACR,SAAS,CAAC,IAAI,CAAC,UAAU,CAAC,CAC7B,CAAC,SAAS,CAAC,MAAK;;AAEb,YAAA,IAAI,CAAC,OAAO,CAAC,cAAc,EAAE,CAAC;;YAG9B,MAAM,IAAI,GAAG,IAAI,CAAC,gBAAgB,EAAE,CAAC,CAAC,CAAC,CAAC;YACxC,MAAM,KAAK,GAAG,IAAI,IAAI,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;YAC9C,IAAI,KAAK,IAAI,CAAC,EAAE;AACZ,gBAAA,IAAI,CAAC,gBAAgB,GAAG,KAAK,CAAC;AAC9B,gBAAA,IAAI,CAAC,iBAAiB,CAAC,KAAK,CAAC,CAAC;AACjC,aAAA;AACL,SAAC,CAAC,CAAC;AAEH,QAAA,OAAO,SAAS,CAAC;KACpB;IAEO,eAAe,GAAA;QACnB,IAAI,IAAI,CAAC,YAAY,EAAE;;AAEtB,SAAA;AAAM,aAAA;YACH,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,aAAa,CAAC,MAAM,GAAG,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC;AAC1F,SAAA;KACJ;;AA35CD;AACc,mBAAM,CAAA,MAAA,GAAG,CAAE,CAAA;gHAFhB,mBAAmB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,iBAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,eAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,YAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,UAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,SAAA,EAAA,QAAA,EAAA,IAAA,EAAA,IAAA,EAAA,IAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,MAAA,EAAA,QAAA,EAAA,IAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,kBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,YAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,iBAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAnB,mBAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,mBAAmB,EATjB,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,EAAA,YAAA,EAAA,cAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,oBAAA,EAAA,sBAAA,EAAA,qBAAA,EAAA,uBAAA,EAAA,oBAAA,EAAA,sBAAA,EAAA,0BAAA,EAAA,4BAAA,EAAA,sBAAA,EAAA,wBAAA,EAAA,YAAA,EAAA,cAAA,EAAA,SAAA,EAAA,WAAA,EAAA,aAAA,EAAA,eAAA,EAAA,QAAA,EAAA,UAAA,EAAA,WAAA,EAAA,aAAA,EAAA,KAAA,EAAA,OAAA,EAAA,kBAAA,EAAA,CAAA,sBAAA,EAAA,oBAAA,CAAA,EAAA,eAAA,EAAA,CAAA,mBAAA,EAAA,iBAAA,CAAA,EAAA,QAAA,EAAA,UAAA,EAAA,kBAAA,EAAA,oBAAA,EAAA,YAAA,EAAA,cAAA,EAAA,WAAA,EAAA,aAAA,EAAA,QAAA,EAAA,UAAA,EAAA,SAAA,EAAA,WAAA,EAAA,iBAAA,EAAA,mBAAA,EAAA,YAAA,EAAA,cAAA,EAAA,aAAA,EAAA,eAAA,EAAA,SAAA,EAAA,WAAA,EAAA,UAAA,EAAA,YAAA,EAAA,WAAA,EAAA,aAAA,EAAA,IAAA,EAAA,MAAA,EAAA,YAAA,EAAA,cAAA,EAAA,aAAA,EAAA,eAAA,EAAA,eAAA,EAAA,iBAAA,EAAA,aAAA,EAAA,eAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,aAAA,EAAA,eAAA,EAAA,YAAA,EAAA,cAAA,EAAA,aAAA,EAAA,eAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,eAAA,EAAA,iBAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,eAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,QAAA,EAAA,KAAA,EAAA,OAAA,EAAA,MAAA,EAAA,QAAA,EAAA,SAAA,EAAA,WAAA,EAAA,QAAA,EAAA,UAAA,EAAA,EAAA,OAAA,EAAA,EAAA,eAAA,EAAA,iBAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,qBAAA,EAAA,uBAAA,EAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,IAAA,EAAA,SAAA,EAAA,uBAAA,EAAA,kBAAA,EAAA,WAAA,EAAA,cAAA,EAAA,eAAA,EAAA,gBAAA,EAAA,eAAA,EAAA,gBAAA,EAAA,gBAAA,EAAA,uBAAA,EAAA,EAAA,EAAA,SAAA,EAAA;QACP,eAAe;AACf,QAAA,EAAE,OAAO,EAAE,mBAAmB,EAAE,WAAW,EAAE,mBAAmB,EAAE;KACrE,EAoKgB,OAAA,EAAA,CAAA,EAAA,YAAA,EAAA,sBAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,cAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,4BAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,kBAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,kBAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,wBAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,gBAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,SAAA,EAAA,SAAA,EAAA,iBAAiB,mKAvHvB,QAAQ,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,SAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAGR,oBAAoB,EAmtBpB,WAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,yBAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,2BAA2B,uEClyB1C,wxHAqCA,EAAA,MAAA,EAAA,CAAA,0vMAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,cAAA,EAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,gBAAA,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,CAAA,yBAAA,EAAA,kBAAA,EAAA,0BAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,2BAAA,EAAA,QAAA,EAAA,wBAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,kBAAA,EAAA,QAAA,EAAA,YAAA,EAAA,MAAA,EAAA,CAAA,QAAA,EAAA,WAAA,EAAA,sBAAA,EAAA,wBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,OAAA,CAAA,EAAA,OAAA,EAAA,CAAA,OAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,uBAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,cAAA,EAAA,MAAA,EAAA,CAAA,sBAAA,EAAA,uBAAA,EAAA,gBAAA,EAAA,gBAAA,EAAA,WAAA,EAAA,aAAA,EAAA,cAAA,EAAA,WAAA,EAAA,oBAAA,EAAA,UAAA,EAAA,OAAA,EAAA,gBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,EAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,8MAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,eAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,qDAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,SAAA,EAAA,gBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,GAAA,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,WAAA,EAAA,IAAA,EAAA,GAAA,CAAA,QAAA,EAAA,QAAA,EAAA,yHAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,IAAA,EAAA,aAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,EAAA,mBAAA,EAAA,kBAAA,EAAA,OAAA,EAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,UAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA,CAAA;2FDAa,mBAAmB,EAAA,UAAA,EAAA,CAAA;kBAb/B,SAAS;+BACI,aAAa,EAAA,eAAA,EACN,uBAAuB,CAAC,MAAM,iBAChC,iBAAiB,CAAC,IAAI,EAC1B,SAAA,EAAA;wBACP,eAAe;AACf,wBAAA,EAAE,OAAO,EAAE,mBAAmB,EAAE,WAAW,qBAAqB,EAAE;AACrE,qBAAA,EAAA,QAAA,EAAA,wxHAAA,EAAA,MAAA,EAAA,CAAA,0vMAAA,CAAA,EAAA,CAAA;;0BAmMI,IAAI;;0BAAI,QAAQ;;0BAChB,QAAQ;;0BACR,QAAQ;uGA3LS,EAAE,EAAA,CAAA;sBAAvB,WAAW;gBACiC,WAAW,EAAA,CAAA;sBAAvD,WAAW;uBAAC,uBAAuB,CAAA;gBACH,OAAO,EAAA,CAAA;sBAAvC,WAAW;uBAAC,WAAW,CAAA;gBACU,YAAY,EAAA,CAAA;sBAA7C,SAAS;uBAAC,cAAc,CAAA;gBACY,SAAS,EAAA,CAAA;sBAA7C,WAAW;uBAAC,eAAe,CAAA;gBACS,SAAS,EAAA,CAAA;sBAA7C,WAAW;uBAAC,eAAe,CAAA;gBAIZ,YAAY,EAAA,CAAA;sBAA3B,KAAK;gBAEU,cAAc,EAAA,CAAA;sBAA7B,KAAK;gBAEU,cAAc,EAAA,CAAA;sBAA7B,KAAK;gBAEU,oBAAoB,EAAA,CAAA;sBAAnC,KAAK;gBAEU,qBAAqB,EAAA,CAAA;sBAApC,KAAK;gBAEU,oBAAoB,EAAA,CAAA;sBAAnC,KAAK;gBAEU,0BAA0B,EAAA,CAAA;sBAAzC,KAAK;gBAEU,sBAAsB,EAAA,CAAA;sBAArC,KAAK;gBAEoB,eAAe,EAAA,CAAA;sBAAxC,MAAM;gBAEmB,cAAc,EAAA,CAAA;sBAAvC,MAAM;gBAEmB,qBAAqB,EAAA,CAAA;sBAA9C,MAAM;gBAE8B,oBAAoB,EAAA,CAAA;sBAAxD,YAAY;uBAAC,cAAc,CAAA;gBACe,0BAA0B,EAAA,CAAA;sBAApE,YAAY;uBAAC,oBAAoB,CAAA;gBACO,gBAAgB,EAAA,CAAA;sBAAxD,YAAY;uBAAC,kBAAkB,CAAA;gBAED,KAAK,EAAA,CAAA;sBAAnC,SAAS;uBAAC,QAAQ,CAAA;gBAGwC,OAAO,EAAA,CAAA;sBAAjE,SAAS;AAAC,gBAAA,IAAA,EAAA,CAAA,oBAAoB,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,CAAA;gBAET,sBAAsB,EAAA,CAAA;sBAA7D,YAAY;uBAAC,gBAAgB,CAAA;gBAGnB,gBAAgB,EAAA,CAAA;sBAD1B,WAAW;uBAAC,gBAAgB,CAAA;gBAmDlB,YAAY,EAAA,CAAA;sBADtB,KAAK;gBAYK,SAAS,EAAA,CAAA;sBADnB,KAAK;gBAUK,aAAa,EAAA,CAAA;sBADvB,KAAK;gBAac,QAAQ,EAAA,CAAA;sBAA3B,KAAK;gBAYc,WAAW,EAAA,CAAA;sBAA9B,KAAK;gBAkBK,OAAO,EAAA,CAAA;sBADjB,eAAe;uBAAC,iBAAiB,CAAA;gBAkPvB,KAAK,EAAA,CAAA;sBADf,KAAK;gBAWoC,kBAAkB,EAAA,CAAA;sBAA3D,KAAK;uBAAC,sBAAsB,CAAA;gBAMU,eAAe,EAAA,CAAA;sBAArD,KAAK;uBAAC,mBAAmB,CAAA;gBAUf,QAAQ,EAAA,CAAA;sBADlB,KAAK;gBAaK,kBAAkB,EAAA,CAAA;sBAD5B,KAAK;gBAWK,YAAY,EAAA,CAAA;sBAFtB,KAAK;gBAaK,WAAW,EAAA,CAAA;sBADrB,KAAK;gBAUK,QAAQ,EAAA,CAAA;sBADlB,KAAK;gBAmBK,SAAS,EAAA,CAAA;sBADnB,KAAK;gBAYK,iBAAiB,EAAA,CAAA;sBAD3B,KAAK;gBAWK,YAAY,EAAA,CAAA;sBADtB,KAAK;gBAOK,aAAa,EAAA,CAAA;sBADvB,KAAK;gBAYK,SAAS,EAAA,CAAA;sBADnB,KAAK;gBAYK,UAAU,EAAA,CAAA;sBADpB,KAAK;gBAcK,WAAW,EAAA,CAAA;sBADrB,KAAK;gBAaK,IAAI,EAAA,CAAA;sBADd,KAAK;gBAkBK,YAAY,EAAA,CAAA;sBADtB,KAAK;gBASK,aAAa,EAAA,CAAA;sBADvB,KAAK;gBASK,eAAe,EAAA,CAAA;sBADzB,KAAK;gBASK,aAAa,EAAA,CAAA;sBADvB,KAAK;gBASK,cAAc,EAAA,CAAA;sBADxB,KAAK;gBAiBK,aAAa,EAAA,CAAA;sBADvB,KAAK;gBAYK,YAAY,EAAA,CAAA;sBADtB,KAAK;gBAaK,aAAa,EAAA,CAAA;sBADvB,KAAK;gBAaK,cAAc,EAAA,CAAA;sBADxB,KAAK;gBAYK,eAAe,EAAA,CAAA;sBADzB,KAAK;gBAeK,cAAc,EAAA,CAAA;sBADxB,KAAK;gBAOK,eAAe,EAAA,CAAA;sBADzB,KAAK;gBAOK,MAAM,EAAA,CAAA;sBADhB,KAAK;gBAaK,KAAK,EAAA,CAAA;sBAFf,KAAK;gBAcK,MAAM,EAAA,CAAA;sBAFhB,KAAK;gBAqBK,SAAS,EAAA,CAAA;sBADnB,KAAK;gBAeK,QAAQ,EAAA,CAAA;sBAFlB,KAAK;gBAcQ,uBAAuB,EAAA,CAAA;sBADpC,SAAS;uBAAC,2BAA2B,CAAA;;;AElyB1C;;;;;;AAMG;MAmCU,gBAAgB,CAAA;;6GAAhB,gBAAgB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,QAAA,EAAA,CAAA,CAAA;8GAAhB,gBAAgB,EAAA,YAAA,EAAA,CAlBrB,mBAAmB,CAAA,EAAA,OAAA,EAAA,CAMnB,YAAY;QACZ,wBAAwB;QACxB,eAAe;QACf,cAAc;QACd,oBAAoB;QACpB,iBAAiB;QACjB,WAAW;QACX,aAAa;QACb,cAAc;AACd,QAAA,WAAW,aAZX,mBAAmB,CAAA,EAAA,CAAA,CAAA;AAed,gBAAA,CAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,gBAAgB,YAZrB,YAAY;QACZ,wBAAwB;QACxB,eAAe;QACf,cAAc;QACd,oBAAoB;QACpB,iBAAiB;QACjB,WAAW;QACX,aAAa;QACb,cAAc;QACd,WAAW,CAAA,EAAA,CAAA,CAAA;2FAGN,gBAAgB,EAAA,UAAA,EAAA,CAAA;kBApB5B,QAAQ;AAAC,YAAA,IAAA,EAAA,CAAA;AACN,oBAAA,YAAY,EAAE;wBACV,mBAAmB;AACtB,qBAAA;AACD,oBAAA,OAAO,EAAE;wBACL,mBAAmB;AACtB,qBAAA;AACD,oBAAA,OAAO,EAAE;wBACL,YAAY;wBACZ,wBAAwB;wBACxB,eAAe;wBACf,cAAc;wBACd,oBAAoB;wBACpB,iBAAiB;wBACjB,WAAW;wBACX,aAAa;wBACb,cAAc;wBACd,WAAW;AACd,qBAAA;AACJ,iBAAA,CAAA;;;ACxCD;;AAEG;;;;"}