{"version":3,"file":"mosaic-design-infosec-components-external-object-hash-directives.mjs","sources":["../../../libs/external/object-hash/directives/src/lib/virtual-scroll-autosize/virtual-scroll-autosize.strategy.ts","../../../libs/external/object-hash/directives/src/lib/virtual-scroll-autosize/virtual-scroll-autosize.directive.ts","../../../libs/external/object-hash/directives/mosaic-design-infosec-components-external-object-hash-directives.ts"],"sourcesContent":["import { ListRange } from '@angular/cdk/collections';\nimport { CdkVirtualScrollViewport, VirtualScrollStrategy } from '@angular/cdk/scrolling';\nimport {\n    BehaviorSubject,\n    debounceTime,\n    distinctUntilChanged,\n    filter,\n    map,\n    Observable,\n    Subject,\n    Subscription,\n    takeUntil\n} from 'rxjs';\n\nimport { distinctUntilChangedByHash } from '@mosaic-design/infosec-components/external/object-hash/utils';\nimport { DestroyService } from '@mosaic-design/infosec-components/services';\nimport { Range } from '@mosaic-design/infosec-components/types';\nimport { isNonNullable, nodeResize$ } from '@mosaic-design/infosec-components/utils';\n\nenum AutosizeRenderingState {\n    Preparing = 'preparing',\n    Staging = 'staging'\n}\n\ninterface ScrollItem {\n    size: number;\n    resizeSubscription?: Subscription;\n}\n\ninterface RenderedItem {\n    element: HTMLElement;\n    index: number;\n}\n\ninterface ViewportParameters {\n    range: ListRange;\n    offset: number;\n    viewportSize: number;\n    scrollOffset: number;\n}\n\ninterface ScrollViewportParameters {\n    range: ListRange;\n    offset: number;\n}\n\nconst defaultRange: Range = { start: 0, end: 0 };\n\nexport class VerticalAutosizeVirtualScrollStrategy implements VirtualScrollStrategy {\n    scrolledIndexChange: Observable<number>;\n\n    get scrolledToEnd(): Observable<void> {\n        return this._scrolledToEnd.asObservable();\n    }\n\n    private _scrolledToEnd = new Subject<void>();\n\n    get renderedRangeChange(): Observable<Range> {\n        return this._renderedRangeChange.pipe(\n            filter((range) => range !== defaultRange),\n            distinctUntilChangedByHash()\n        );\n    }\n\n    private _renderedRangeChange = new BehaviorSubject<Range>(defaultRange);\n\n    get orientation(): 'horizontal' | 'vertical' | undefined {\n        return this.viewport?.orientation;\n    }\n\n    private readonly totalSizeChangeTimeout = 100;\n    private viewport: CdkVirtualScrollViewport | undefined;\n    private renderingState = AutosizeRenderingState.Preparing;\n    private scrollItems: ScrollItem[] = [];\n    private firstRenderedIndex$: BehaviorSubject<number> = new BehaviorSubject<number>(0);\n    private totalSizeChange$: Subject<void> = new Subject<void>();\n    private lastDataLength = 0;\n    private lastRenderedRange: ListRange = {\n        start: 0,\n        end: 0\n    };\n\n    constructor(\n        private buffer: number,\n        private destroyed$: DestroyService\n    ) {\n        this.scrolledIndexChange = this.firstRenderedIndex$.pipe(distinctUntilChanged());\n    }\n\n    private static getViewportSize(viewport: CdkVirtualScrollViewport): number {\n        const size = viewport.getViewportSize();\n\n        // getViewportSize can return falsy 0, so need to use getBoundingClientRect sizes\n        const rect = viewport.elementRef.nativeElement.getBoundingClientRect();\n\n        return viewport.orientation === 'vertical' ? rect.height || size : rect.width || size;\n    }\n\n    private static renderNextItem(viewport: CdkVirtualScrollViewport): void {\n        const range = viewport.getRenderedRange();\n        const newRange = {\n            start: range.start,\n            end: range.end + 1\n        };\n\n        const dataLength = viewport.getDataLength();\n        if (newRange.end > dataLength) {\n            return;\n        }\n\n        viewport.setRenderedRange(newRange);\n    }\n\n    private static getViewportParameters(viewport: CdkVirtualScrollViewport): ViewportParameters {\n        const scrollOffset = viewport.measureScrollOffset();\n\n        return {\n            scrollOffset,\n            offset: viewport.getOffsetToRenderedContentStart() || 0,\n            range: viewport.getRenderedRange(),\n            viewportSize: VerticalAutosizeVirtualScrollStrategy.getViewportSize(viewport)\n        };\n    }\n\n    private static getRangeIndexes(range: ListRange): number[] {\n        const result: number[] = [];\n\n        for (let i = range.start; i < range.end; i++) {\n            result.push(i);\n        }\n\n        return result;\n    }\n\n    updateBufferSize(buffer: number): void {\n        this.buffer = buffer;\n    }\n\n    attach(viewport: CdkVirtualScrollViewport): void {\n        this.viewport = viewport;\n        this.createSubscriptions(viewport);\n        this.initPrepareState(viewport);\n\n        if (viewport.getDataLength() !== 0) {\n            this.renderIteration(viewport);\n        }\n    }\n\n    detach(): void {\n        this.viewport = undefined;\n    }\n\n    onContentRendered(): void {\n        const { viewport } = this;\n        if (!viewport) {\n            return;\n        }\n\n        if (this.renderingState === AutosizeRenderingState.Preparing) {\n            this.renderPrepareStateIteration(viewport);\n        }\n\n        this.clearElementsResizeSubscriptions(viewport);\n        this.createRenderedElementsResizeSubscriptions(viewport);\n\n        this._renderedRangeChange.next(viewport.getRenderedRange());\n        this.lastRenderedRange = viewport.getRenderedRange();\n    }\n\n    onContentScrolled(): void {\n        const { viewport, renderingState } = this;\n        if (!viewport || renderingState !== AutosizeRenderingState.Staging) {\n            return;\n        }\n\n        this.renderStagingStateIteration(viewport);\n    }\n\n    onDataLengthChanged(): void {\n        const { viewport } = this;\n        if (!viewport) {\n            return;\n        }\n\n        if (this.lastDataLength === 0) {\n            this.initPrepareState(viewport);\n        } else {\n            this.processDataLengthChange(viewport);\n        }\n\n        this.renderIteration(viewport);\n        this.lastDataLength = viewport.getDataLength();\n    }\n\n    onRenderedOffsetChanged(): void {\n        // empty\n    }\n\n    scrollToIndex(index: number, behavior: ScrollBehavior): void {\n        const { viewport } = this;\n        if (!viewport) {\n            return;\n        }\n\n        const offset = this.getOffsetFromStartByIndex(index);\n        viewport.scrollToOffset(offset, behavior);\n    }\n\n    private get totalElementsSize(): number {\n        return this.scrollItems.reduce((prev, current) => prev + current.size, 0);\n    }\n\n    private get averageElementSize(): number {\n        return this.totalElementsSize / this.scrollItems.length;\n    }\n\n    private get renderedElements(): HTMLElement[] {\n        const element = this.viewport?.getElementRef().nativeElement;\n        const wrapper = element?.querySelector('.cdk-virtual-scroll-content-wrapper');\n\n        return wrapper?.children ? (Array.from(wrapper.children) as HTMLElement[]) : [];\n    }\n\n    private get renderedItems(): RenderedItem[] {\n        const viewport = this.viewport;\n        if (!viewport) {\n            return [];\n        }\n\n        const renderedRange = viewport.getRenderedRange();\n        const renderedElements = this.renderedElements;\n\n        return renderedElements.map<RenderedItem>((element, index) => ({\n            element,\n            index: renderedRange.start + index,\n            size: element.getBoundingClientRect().height\n        }));\n    }\n\n    private initPrepareState(viewport: CdkVirtualScrollViewport): void {\n        viewport.appendOnly = true;\n        this.renderingState = AutosizeRenderingState.Preparing;\n    }\n\n    private renderIteration(viewport: CdkVirtualScrollViewport): void {\n        if (this.renderingState === AutosizeRenderingState.Preparing) {\n            this.renderPrepareStateIteration(viewport);\n        } else {\n            this.renderStagingStateIteration(viewport);\n        }\n    }\n\n    private renderPrepareStateIteration(viewport: CdkVirtualScrollViewport): void {\n        const renderedItems = this.renderedItems;\n        renderedItems.forEach((item) => {\n            const rect = item.element.getBoundingClientRect();\n            const size = viewport.orientation === 'vertical' ? rect.height : rect.width;\n            this.actualizeElementSize(item.index, size);\n        });\n\n        const renderedSize = viewport.measureRenderedContentSize();\n        const viewportSize = VerticalAutosizeVirtualScrollStrategy.getViewportSize(viewport);\n\n        if (renderedSize - this.buffer >= viewportSize + this.buffer) {\n            this.switchToStagingState(viewport);\n        } else {\n            VerticalAutosizeVirtualScrollStrategy.renderNextItem(viewport);\n        }\n    }\n\n    private renderStagingStateIteration(viewport: CdkVirtualScrollViewport): void {\n        const viewportParameters = VerticalAutosizeVirtualScrollStrategy.getViewportParameters(viewport);\n\n        const scrollParameters = this.getParametersForScroll(viewportParameters);\n\n        viewport.setRenderedRange(scrollParameters.range);\n        viewport.setRenderedContentOffset(scrollParameters.offset);\n\n        if (viewportParameters.scrollOffset + viewportParameters.viewportSize >= this.totalElementsSize) {\n            this._scrolledToEnd.next();\n        }\n    }\n\n    private switchToStagingState(viewport: CdkVirtualScrollViewport): void {\n        viewport.appendOnly = false;\n        this.renderingState = AutosizeRenderingState.Staging;\n\n        this.calculatePossibleItemsSize(viewport);\n        this.updateTotalContentSize(viewport);\n    }\n\n    private processDataLengthChange(viewport: CdkVirtualScrollViewport): void {\n        const diff = viewport.getDataLength() - this.scrollItems.length;\n        if (diff > 0) {\n            const average = this.averageElementSize;\n\n            for (let i = 0; i < diff; i++) {\n                this.scrollItems.push({\n                    size: average\n                });\n            }\n        } else {\n            const magnitude = Math.abs(diff);\n            const start = this.scrollItems.length - magnitude;\n            for (let i = start; i < magnitude; i++) {\n                this.scrollItems[i]?.resizeSubscription?.unsubscribe();\n            }\n            this.scrollItems.splice(start, magnitude);\n        }\n\n        this.totalSizeChange$.next();\n    }\n\n    private calculatePossibleItemsSize(viewport: CdkVirtualScrollViewport): void {\n        const renderedRange = viewport.getRenderedRange();\n        const renderedLength = renderedRange.end - renderedRange.start;\n        const renderedSize = viewport.measureRenderedContentSize();\n        const averageSize = renderedSize / renderedLength;\n\n        if (this.isChangedTotalSize(renderedLength, averageSize, viewport.getDataLength())) {\n            this.totalSizeChange$.next();\n        }\n    }\n\n    private isChangedTotalSize(renderedLength: number, averageSize: number, dataLength: number): boolean {\n        let result = false;\n        for (let i = renderedLength - 1; i < dataLength; i++) {\n            const isChangedTotalSize = this.actualizeElementSize(i, averageSize);\n            if (!result && isChangedTotalSize) {\n                result = true;\n            }\n        }\n\n        return result;\n    }\n\n    private actualizeElementSize(index: number, size: number): boolean {\n        const item = this.scrollItems[index];\n        if (item) {\n            const previousSize = item.size;\n\n            item.size = size;\n\n            if (previousSize !== item.size) {\n                return true;\n            }\n        } else {\n            this.scrollItems[index] = {\n                size\n            };\n\n            return true;\n        }\n\n        return false;\n    }\n\n    private checkEmptyViewportSpace(viewport: CdkVirtualScrollViewport): void {\n        const renderedContentSize = viewport.measureRenderedContentSize();\n        const viewportSize = viewport.getViewportSize();\n\n        if (renderedContentSize - this.buffer < viewportSize + this.buffer) {\n            this.renderStagingStateIteration(viewport);\n        }\n    }\n\n    private updateTotalContentSize(viewport: CdkVirtualScrollViewport): void {\n        viewport.setTotalContentSize(this.totalElementsSize);\n    }\n\n    private clearElementsResizeSubscriptions(viewport: CdkVirtualScrollViewport): void {\n        const currentIndexes = VerticalAutosizeVirtualScrollStrategy.getRangeIndexes(viewport.getRenderedRange());\n        const lastIndexes = VerticalAutosizeVirtualScrollStrategy.getRangeIndexes(this.lastRenderedRange);\n\n        const excludedIndexes = lastIndexes.filter((index) => !currentIndexes.includes(index));\n        excludedIndexes\n            .map((index) => this.scrollItems[index])\n            .filter(isNonNullable)\n            .forEach((scrollItem) => {\n                scrollItem.resizeSubscription?.unsubscribe();\n                scrollItem.resizeSubscription = undefined;\n            });\n    }\n\n    private createRenderedElementsResizeSubscriptions(viewport: CdkVirtualScrollViewport): void {\n        const renderedItems = this.renderedItems;\n\n        renderedItems\n            .filter((item) => this.scrollItems[item.index])\n            .forEach((item) => {\n                const scrollItem = this.scrollItems[item.index];\n                if (isNonNullable(scrollItem) && !scrollItem.resizeSubscription) {\n                    scrollItem.resizeSubscription = nodeResize$(item.element)\n                        .pipe(\n                            map((records) => {\n                                const orientation = viewport.orientation;\n                                if (orientation === 'vertical') {\n                                    return (\n                                        records[0]?.contentRect?.height || item.element.getBoundingClientRect().height\n                                    );\n                                } else {\n                                    return records[0]?.contentRect?.width || item.element.getBoundingClientRect().width;\n                                }\n                            }),\n                            distinctUntilChanged(),\n                            filter((size) => !!size),\n                            takeUntil(this.destroyed$)\n                        )\n                        .subscribe((size) => {\n                            const isChangedTotalSize = this.actualizeElementSize(item.index, size);\n                            if (isChangedTotalSize) {\n                                this.totalSizeChange$.next();\n                            }\n                            this.checkEmptyViewportSpace(viewport);\n                        });\n                }\n            });\n    }\n\n    private getIndexByOffset(offset: number, buffer?: number): number {\n        let size = 0;\n\n        if (offset <= 0) {\n            return 0;\n        }\n\n        const top = offset + (buffer || 0);\n        let index = 0;\n\n        for (let i = 0; i < this.scrollItems.length; i++) {\n            size += this.scrollItems[i]?.size ?? 0;\n            index = i;\n\n            if (size >= top) {\n                break;\n            }\n\n            if (i === this.scrollItems.length - 1) {\n                return i;\n            }\n        }\n\n        return index;\n    }\n\n    private getOffsetFromStartByIndex(index: number): number {\n        let result = 0;\n\n        for (let i = 0; i < index; i++) {\n            result += this.scrollItems[i]?.size ?? 0;\n        }\n\n        return result;\n    }\n\n    private getParametersForScroll(viewportParameters: ViewportParameters): ScrollViewportParameters {\n        const start = this.getIndexByOffset(viewportParameters.scrollOffset, -this.buffer);\n        const end = this.getIndexByOffset(\n            viewportParameters.scrollOffset + viewportParameters.viewportSize,\n            this.buffer\n        );\n\n        return {\n            offset: this.getOffsetFromStartByIndex(start),\n            range: {\n                start,\n                // end is not included by viewport like Array.slice\n                end: end + 1\n            }\n        };\n    }\n\n    private createSubscriptions(viewport: CdkVirtualScrollViewport): void {\n        this.totalSizeChange$\n            .pipe(\n                map(() => this.totalElementsSize),\n                distinctUntilChanged(),\n                debounceTime(this.totalSizeChangeTimeout),\n                takeUntil(this.destroyed$)\n            )\n            .subscribe(() => this.updateTotalContentSize(viewport));\n    }\n}\n","import { NumberInput, coerceNumberProperty } from '@angular/cdk/coercion';\nimport { VIRTUAL_SCROLL_STRATEGY } from '@angular/cdk/scrolling';\nimport { Directive, forwardRef, Input, Output, EventEmitter, OnChanges, NgZone } from '@angular/core';\nimport { takeUntil } from 'rxjs';\n\nimport { DestroyService } from '@mosaic-design/infosec-components/services';\nimport { Range } from '@mosaic-design/infosec-components/types';\n\nimport { VerticalAutosizeVirtualScrollStrategy } from './virtual-scroll-autosize.strategy';\n\nexport function customAutoSizeVirtualScrollStrategyFactory(\n    directive: IcVirtualScrollAutosizeDirective\n): VerticalAutosizeVirtualScrollStrategy | undefined {\n    return directive.scrollStrategy;\n}\n\n@Directive({\n    selector: 'cdk-virtual-scroll-viewport[icVirtualScrollAutosize]',\n    standalone: true,\n    providers: [\n        {\n            provide: VIRTUAL_SCROLL_STRATEGY,\n            useFactory: customAutoSizeVirtualScrollStrategyFactory,\n            deps: [forwardRef(() => IcVirtualScrollAutosizeDirective)]\n        },\n        DestroyService\n    ]\n})\nexport class IcVirtualScrollAutosizeDirective implements OnChanges {\n    @Input()\n    /**\n     * Additional content size to render in invisible scroll zone.\n     */\n    get buffer(): number {\n        return this._buffer;\n    }\n    set buffer(value: NumberInput) {\n        this._buffer = coerceNumberProperty(value);\n    }\n    private _buffer = 300;\n\n    @Output() scrolledToEnd = new EventEmitter<void>();\n    @Output() renderedRangeChange = new EventEmitter<Range>();\n\n    scrollStrategy: VerticalAutosizeVirtualScrollStrategy | undefined;\n\n    constructor(\n        private ngZone: NgZone,\n        private destroyed$: DestroyService\n    ) {\n        this.scrollStrategy = new VerticalAutosizeVirtualScrollStrategy(this.buffer, this.destroyed$);\n        this.scrollStrategy.scrolledToEnd.pipe(takeUntil(this.destroyed$)).subscribe(() => {\n            this.runInZone(() => this.scrolledToEnd.emit());\n        });\n        this.scrollStrategy.renderedRangeChange.pipe(takeUntil(this.destroyed$)).subscribe((range) => {\n            this.runInZone(() => this.renderedRangeChange.emit(range));\n        });\n    }\n\n    ngOnChanges(): void {\n        if (this.scrollStrategy) {\n            this.scrollStrategy.updateBufferSize(this.buffer);\n        }\n    }\n\n    private runInZone(func: () => void): void {\n        if (NgZone.isInAngularZone()) {\n            func();\n        } else {\n            this.ngZone.run(() => {\n                func();\n            });\n        }\n    }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":";;;;;;;;;;AAmBA,IAAK,sBAGJ,CAAA;AAHD,CAAA,UAAK,sBAAsB,EAAA;AACvB,IAAA,sBAAA,CAAA,WAAA,CAAA,GAAA,WAAuB,CAAA;AACvB,IAAA,sBAAA,CAAA,SAAA,CAAA,GAAA,SAAmB,CAAA;AACvB,CAAC,EAHI,sBAAsB,KAAtB,sBAAsB,GAG1B,EAAA,CAAA,CAAA,CAAA;AAwBD,MAAM,YAAY,GAAU,EAAE,KAAK,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC;MAEpC,qCAAqC,CAAA;AAmClC,IAAA,MAAA,CAAA;AACA,IAAA,UAAA,CAAA;AAnCZ,IAAA,mBAAmB,CAAqB;AAExC,IAAA,IAAI,aAAa,GAAA;AACb,QAAA,OAAO,IAAI,CAAC,cAAc,CAAC,YAAY,EAAE,CAAC;KAC7C;AAEO,IAAA,cAAc,GAAG,IAAI,OAAO,EAAQ,CAAC;AAE7C,IAAA,IAAI,mBAAmB,GAAA;QACnB,OAAO,IAAI,CAAC,oBAAoB,CAAC,IAAI,CACjC,MAAM,CAAC,CAAC,KAAK,KAAK,KAAK,KAAK,YAAY,CAAC,EACzC,0BAA0B,EAAE,CAC/B,CAAC;KACL;AAEO,IAAA,oBAAoB,GAAG,IAAI,eAAe,CAAQ,YAAY,CAAC,CAAC;AAExE,IAAA,IAAI,WAAW,GAAA;AACX,QAAA,OAAO,IAAI,CAAC,QAAQ,EAAE,WAAW,CAAC;KACrC;IAEgB,sBAAsB,GAAG,GAAG,CAAC;AACtC,IAAA,QAAQ,CAAuC;AAC/C,IAAA,cAAc,GAAG,sBAAsB,CAAC,SAAS,CAAC;IAClD,WAAW,GAAiB,EAAE,CAAC;AAC/B,IAAA,mBAAmB,GAA4B,IAAI,eAAe,CAAS,CAAC,CAAC,CAAC;AAC9E,IAAA,gBAAgB,GAAkB,IAAI,OAAO,EAAQ,CAAC;IACtD,cAAc,GAAG,CAAC,CAAC;AACnB,IAAA,iBAAiB,GAAc;AACnC,QAAA,KAAK,EAAE,CAAC;AACR,QAAA,GAAG,EAAE,CAAC;KACT,CAAC;IAEF,WACY,CAAA,MAAc,EACd,UAA0B,EAAA;QAD1B,IAAM,CAAA,MAAA,GAAN,MAAM,CAAQ;QACd,IAAU,CAAA,UAAA,GAAV,UAAU,CAAgB;AAElC,QAAA,IAAI,CAAC,mBAAmB,GAAG,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,oBAAoB,EAAE,CAAC,CAAC;KACpF;IAEO,OAAO,eAAe,CAAC,QAAkC,EAAA;AAC7D,QAAA,MAAM,IAAI,GAAG,QAAQ,CAAC,eAAe,EAAE,CAAC;;QAGxC,MAAM,IAAI,GAAG,QAAQ,CAAC,UAAU,CAAC,aAAa,CAAC,qBAAqB,EAAE,CAAC;QAEvE,OAAO,QAAQ,CAAC,WAAW,KAAK,UAAU,GAAG,IAAI,CAAC,MAAM,IAAI,IAAI,GAAG,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC;KACzF;IAEO,OAAO,cAAc,CAAC,QAAkC,EAAA;AAC5D,QAAA,MAAM,KAAK,GAAG,QAAQ,CAAC,gBAAgB,EAAE,CAAC;AAC1C,QAAA,MAAM,QAAQ,GAAG;YACb,KAAK,EAAE,KAAK,CAAC,KAAK;AAClB,YAAA,GAAG,EAAE,KAAK,CAAC,GAAG,GAAG,CAAC;SACrB,CAAC;AAEF,QAAA,MAAM,UAAU,GAAG,QAAQ,CAAC,aAAa,EAAE,CAAC;AAC5C,QAAA,IAAI,QAAQ,CAAC,GAAG,GAAG,UAAU,EAAE;YAC3B,OAAO;SACV;AAED,QAAA,QAAQ,CAAC,gBAAgB,CAAC,QAAQ,CAAC,CAAC;KACvC;IAEO,OAAO,qBAAqB,CAAC,QAAkC,EAAA;AACnE,QAAA,MAAM,YAAY,GAAG,QAAQ,CAAC,mBAAmB,EAAE,CAAC;QAEpD,OAAO;YACH,YAAY;AACZ,YAAA,MAAM,EAAE,QAAQ,CAAC,+BAA+B,EAAE,IAAI,CAAC;AACvD,YAAA,KAAK,EAAE,QAAQ,CAAC,gBAAgB,EAAE;AAClC,YAAA,YAAY,EAAE,qCAAqC,CAAC,eAAe,CAAC,QAAQ,CAAC;SAChF,CAAC;KACL;IAEO,OAAO,eAAe,CAAC,KAAgB,EAAA;QAC3C,MAAM,MAAM,GAAa,EAAE,CAAC;AAE5B,QAAA,KAAK,IAAI,CAAC,GAAG,KAAK,CAAC,KAAK,EAAE,CAAC,GAAG,KAAK,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE;AAC1C,YAAA,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;SAClB;AAED,QAAA,OAAO,MAAM,CAAC;KACjB;AAED,IAAA,gBAAgB,CAAC,MAAc,EAAA;AAC3B,QAAA,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;KACxB;AAED,IAAA,MAAM,CAAC,QAAkC,EAAA;AACrC,QAAA,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;AACzB,QAAA,IAAI,CAAC,mBAAmB,CAAC,QAAQ,CAAC,CAAC;AACnC,QAAA,IAAI,CAAC,gBAAgB,CAAC,QAAQ,CAAC,CAAC;AAEhC,QAAA,IAAI,QAAQ,CAAC,aAAa,EAAE,KAAK,CAAC,EAAE;AAChC,YAAA,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,CAAC;SAClC;KACJ;IAED,MAAM,GAAA;AACF,QAAA,IAAI,CAAC,QAAQ,GAAG,SAAS,CAAC;KAC7B;IAED,iBAAiB,GAAA;AACb,QAAA,MAAM,EAAE,QAAQ,EAAE,GAAG,IAAI,CAAC;QAC1B,IAAI,CAAC,QAAQ,EAAE;YACX,OAAO;SACV;QAED,IAAI,IAAI,CAAC,cAAc,KAAK,sBAAsB,CAAC,SAAS,EAAE;AAC1D,YAAA,IAAI,CAAC,2BAA2B,CAAC,QAAQ,CAAC,CAAC;SAC9C;AAED,QAAA,IAAI,CAAC,gCAAgC,CAAC,QAAQ,CAAC,CAAC;AAChD,QAAA,IAAI,CAAC,yCAAyC,CAAC,QAAQ,CAAC,CAAC;QAEzD,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,QAAQ,CAAC,gBAAgB,EAAE,CAAC,CAAC;AAC5D,QAAA,IAAI,CAAC,iBAAiB,GAAG,QAAQ,CAAC,gBAAgB,EAAE,CAAC;KACxD;IAED,iBAAiB,GAAA;AACb,QAAA,MAAM,EAAE,QAAQ,EAAE,cAAc,EAAE,GAAG,IAAI,CAAC;QAC1C,IAAI,CAAC,QAAQ,IAAI,cAAc,KAAK,sBAAsB,CAAC,OAAO,EAAE;YAChE,OAAO;SACV;AAED,QAAA,IAAI,CAAC,2BAA2B,CAAC,QAAQ,CAAC,CAAC;KAC9C;IAED,mBAAmB,GAAA;AACf,QAAA,MAAM,EAAE,QAAQ,EAAE,GAAG,IAAI,CAAC;QAC1B,IAAI,CAAC,QAAQ,EAAE;YACX,OAAO;SACV;AAED,QAAA,IAAI,IAAI,CAAC,cAAc,KAAK,CAAC,EAAE;AAC3B,YAAA,IAAI,CAAC,gBAAgB,CAAC,QAAQ,CAAC,CAAC;SACnC;aAAM;AACH,YAAA,IAAI,CAAC,uBAAuB,CAAC,QAAQ,CAAC,CAAC;SAC1C;AAED,QAAA,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,CAAC;AAC/B,QAAA,IAAI,CAAC,cAAc,GAAG,QAAQ,CAAC,aAAa,EAAE,CAAC;KAClD;IAED,uBAAuB,GAAA;;KAEtB;IAED,aAAa,CAAC,KAAa,EAAE,QAAwB,EAAA;AACjD,QAAA,MAAM,EAAE,QAAQ,EAAE,GAAG,IAAI,CAAC;QAC1B,IAAI,CAAC,QAAQ,EAAE;YACX,OAAO;SACV;QAED,MAAM,MAAM,GAAG,IAAI,CAAC,yBAAyB,CAAC,KAAK,CAAC,CAAC;AACrD,QAAA,QAAQ,CAAC,cAAc,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;KAC7C;AAED,IAAA,IAAY,iBAAiB,GAAA;QACzB,OAAO,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;KAC7E;AAED,IAAA,IAAY,kBAAkB,GAAA;QAC1B,OAAO,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC;KAC3D;AAED,IAAA,IAAY,gBAAgB,GAAA;QACxB,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,EAAE,aAAa,EAAE,CAAC,aAAa,CAAC;QAC7D,MAAM,OAAO,GAAG,OAAO,EAAE,aAAa,CAAC,qCAAqC,CAAC,CAAC;AAE9E,QAAA,OAAO,OAAO,EAAE,QAAQ,GAAI,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAmB,GAAG,EAAE,CAAC;KACnF;AAED,IAAA,IAAY,aAAa,GAAA;AACrB,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC;QAC/B,IAAI,CAAC,QAAQ,EAAE;AACX,YAAA,OAAO,EAAE,CAAC;SACb;AAED,QAAA,MAAM,aAAa,GAAG,QAAQ,CAAC,gBAAgB,EAAE,CAAC;AAClD,QAAA,MAAM,gBAAgB,GAAG,IAAI,CAAC,gBAAgB,CAAC;QAE/C,OAAO,gBAAgB,CAAC,GAAG,CAAe,CAAC,OAAO,EAAE,KAAK,MAAM;YAC3D,OAAO;AACP,YAAA,KAAK,EAAE,aAAa,CAAC,KAAK,GAAG,KAAK;AAClC,YAAA,IAAI,EAAE,OAAO,CAAC,qBAAqB,EAAE,CAAC,MAAM;AAC/C,SAAA,CAAC,CAAC,CAAC;KACP;AAEO,IAAA,gBAAgB,CAAC,QAAkC,EAAA;AACvD,QAAA,QAAQ,CAAC,UAAU,GAAG,IAAI,CAAC;AAC3B,QAAA,IAAI,CAAC,cAAc,GAAG,sBAAsB,CAAC,SAAS,CAAC;KAC1D;AAEO,IAAA,eAAe,CAAC,QAAkC,EAAA;QACtD,IAAI,IAAI,CAAC,cAAc,KAAK,sBAAsB,CAAC,SAAS,EAAE;AAC1D,YAAA,IAAI,CAAC,2BAA2B,CAAC,QAAQ,CAAC,CAAC;SAC9C;aAAM;AACH,YAAA,IAAI,CAAC,2BAA2B,CAAC,QAAQ,CAAC,CAAC;SAC9C;KACJ;AAEO,IAAA,2BAA2B,CAAC,QAAkC,EAAA;AAClE,QAAA,MAAM,aAAa,GAAG,IAAI,CAAC,aAAa,CAAC;AACzC,QAAA,aAAa,CAAC,OAAO,CAAC,CAAC,IAAI,KAAI;YAC3B,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,qBAAqB,EAAE,CAAC;AAClD,YAAA,MAAM,IAAI,GAAG,QAAQ,CAAC,WAAW,KAAK,UAAU,GAAG,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC;YAC5E,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;AAChD,SAAC,CAAC,CAAC;AAEH,QAAA,MAAM,YAAY,GAAG,QAAQ,CAAC,0BAA0B,EAAE,CAAC;QAC3D,MAAM,YAAY,GAAG,qCAAqC,CAAC,eAAe,CAAC,QAAQ,CAAC,CAAC;AAErF,QAAA,IAAI,YAAY,GAAG,IAAI,CAAC,MAAM,IAAI,YAAY,GAAG,IAAI,CAAC,MAAM,EAAE;AAC1D,YAAA,IAAI,CAAC,oBAAoB,CAAC,QAAQ,CAAC,CAAC;SACvC;aAAM;AACH,YAAA,qCAAqC,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC;SAClE;KACJ;AAEO,IAAA,2BAA2B,CAAC,QAAkC,EAAA;QAClE,MAAM,kBAAkB,GAAG,qCAAqC,CAAC,qBAAqB,CAAC,QAAQ,CAAC,CAAC;QAEjG,MAAM,gBAAgB,GAAG,IAAI,CAAC,sBAAsB,CAAC,kBAAkB,CAAC,CAAC;AAEzE,QAAA,QAAQ,CAAC,gBAAgB,CAAC,gBAAgB,CAAC,KAAK,CAAC,CAAC;AAClD,QAAA,QAAQ,CAAC,wBAAwB,CAAC,gBAAgB,CAAC,MAAM,CAAC,CAAC;AAE3D,QAAA,IAAI,kBAAkB,CAAC,YAAY,GAAG,kBAAkB,CAAC,YAAY,IAAI,IAAI,CAAC,iBAAiB,EAAE;AAC7F,YAAA,IAAI,CAAC,cAAc,CAAC,IAAI,EAAE,CAAC;SAC9B;KACJ;AAEO,IAAA,oBAAoB,CAAC,QAAkC,EAAA;AAC3D,QAAA,QAAQ,CAAC,UAAU,GAAG,KAAK,CAAC;AAC5B,QAAA,IAAI,CAAC,cAAc,GAAG,sBAAsB,CAAC,OAAO,CAAC;AAErD,QAAA,IAAI,CAAC,0BAA0B,CAAC,QAAQ,CAAC,CAAC;AAC1C,QAAA,IAAI,CAAC,sBAAsB,CAAC,QAAQ,CAAC,CAAC;KACzC;AAEO,IAAA,uBAAuB,CAAC,QAAkC,EAAA;AAC9D,QAAA,MAAM,IAAI,GAAG,QAAQ,CAAC,aAAa,EAAE,GAAG,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC;AAChE,QAAA,IAAI,IAAI,GAAG,CAAC,EAAE;AACV,YAAA,MAAM,OAAO,GAAG,IAAI,CAAC,kBAAkB,CAAC;AAExC,YAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,EAAE,CAAC,EAAE,EAAE;AAC3B,gBAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC;AAClB,oBAAA,IAAI,EAAE,OAAO;AAChB,iBAAA,CAAC,CAAC;aACN;SACJ;aAAM;YACH,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;YACjC,MAAM,KAAK,GAAG,IAAI,CAAC,WAAW,CAAC,MAAM,GAAG,SAAS,CAAC;AAClD,YAAA,KAAK,IAAI,CAAC,GAAG,KAAK,EAAE,CAAC,GAAG,SAAS,EAAE,CAAC,EAAE,EAAE;gBACpC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,kBAAkB,EAAE,WAAW,EAAE,CAAC;aAC1D;YACD,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC;SAC7C;AAED,QAAA,IAAI,CAAC,gBAAgB,CAAC,IAAI,EAAE,CAAC;KAChC;AAEO,IAAA,0BAA0B,CAAC,QAAkC,EAAA;AACjE,QAAA,MAAM,aAAa,GAAG,QAAQ,CAAC,gBAAgB,EAAE,CAAC;QAClD,MAAM,cAAc,GAAG,aAAa,CAAC,GAAG,GAAG,aAAa,CAAC,KAAK,CAAC;AAC/D,QAAA,MAAM,YAAY,GAAG,QAAQ,CAAC,0BAA0B,EAAE,CAAC;AAC3D,QAAA,MAAM,WAAW,GAAG,YAAY,GAAG,cAAc,CAAC;AAElD,QAAA,IAAI,IAAI,CAAC,kBAAkB,CAAC,cAAc,EAAE,WAAW,EAAE,QAAQ,CAAC,aAAa,EAAE,CAAC,EAAE;AAChF,YAAA,IAAI,CAAC,gBAAgB,CAAC,IAAI,EAAE,CAAC;SAChC;KACJ;AAEO,IAAA,kBAAkB,CAAC,cAAsB,EAAE,WAAmB,EAAE,UAAkB,EAAA;QACtF,IAAI,MAAM,GAAG,KAAK,CAAC;AACnB,QAAA,KAAK,IAAI,CAAC,GAAG,cAAc,GAAG,CAAC,EAAE,CAAC,GAAG,UAAU,EAAE,CAAC,EAAE,EAAE;YAClD,MAAM,kBAAkB,GAAG,IAAI,CAAC,oBAAoB,CAAC,CAAC,EAAE,WAAW,CAAC,CAAC;AACrE,YAAA,IAAI,CAAC,MAAM,IAAI,kBAAkB,EAAE;gBAC/B,MAAM,GAAG,IAAI,CAAC;aACjB;SACJ;AAED,QAAA,OAAO,MAAM,CAAC;KACjB;IAEO,oBAAoB,CAAC,KAAa,EAAE,IAAY,EAAA;QACpD,MAAM,IAAI,GAAG,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;QACrC,IAAI,IAAI,EAAE;AACN,YAAA,MAAM,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC;AAE/B,YAAA,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;AAEjB,YAAA,IAAI,YAAY,KAAK,IAAI,CAAC,IAAI,EAAE;AAC5B,gBAAA,OAAO,IAAI,CAAC;aACf;SACJ;aAAM;AACH,YAAA,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,GAAG;gBACtB,IAAI;aACP,CAAC;AAEF,YAAA,OAAO,IAAI,CAAC;SACf;AAED,QAAA,OAAO,KAAK,CAAC;KAChB;AAEO,IAAA,uBAAuB,CAAC,QAAkC,EAAA;AAC9D,QAAA,MAAM,mBAAmB,GAAG,QAAQ,CAAC,0BAA0B,EAAE,CAAC;AAClE,QAAA,MAAM,YAAY,GAAG,QAAQ,CAAC,eAAe,EAAE,CAAC;AAEhD,QAAA,IAAI,mBAAmB,GAAG,IAAI,CAAC,MAAM,GAAG,YAAY,GAAG,IAAI,CAAC,MAAM,EAAE;AAChE,YAAA,IAAI,CAAC,2BAA2B,CAAC,QAAQ,CAAC,CAAC;SAC9C;KACJ;AAEO,IAAA,sBAAsB,CAAC,QAAkC,EAAA;AAC7D,QAAA,QAAQ,CAAC,mBAAmB,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;KACxD;AAEO,IAAA,gCAAgC,CAAC,QAAkC,EAAA;QACvE,MAAM,cAAc,GAAG,qCAAqC,CAAC,eAAe,CAAC,QAAQ,CAAC,gBAAgB,EAAE,CAAC,CAAC;QAC1G,MAAM,WAAW,GAAG,qCAAqC,CAAC,eAAe,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;AAElG,QAAA,MAAM,eAAe,GAAG,WAAW,CAAC,MAAM,CAAC,CAAC,KAAK,KAAK,CAAC,cAAc,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC;QACvF,eAAe;AACV,aAAA,GAAG,CAAC,CAAC,KAAK,KAAK,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;aACvC,MAAM,CAAC,aAAa,CAAC;AACrB,aAAA,OAAO,CAAC,CAAC,UAAU,KAAI;AACpB,YAAA,UAAU,CAAC,kBAAkB,EAAE,WAAW,EAAE,CAAC;AAC7C,YAAA,UAAU,CAAC,kBAAkB,GAAG,SAAS,CAAC;AAC9C,SAAC,CAAC,CAAC;KACV;AAEO,IAAA,yCAAyC,CAAC,QAAkC,EAAA;AAChF,QAAA,MAAM,aAAa,GAAG,IAAI,CAAC,aAAa,CAAC;QAEzC,aAAa;AACR,aAAA,MAAM,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AAC9C,aAAA,OAAO,CAAC,CAAC,IAAI,KAAI;YACd,MAAM,UAAU,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YAChD,IAAI,aAAa,CAAC,UAAU,CAAC,IAAI,CAAC,UAAU,CAAC,kBAAkB,EAAE;gBAC7D,UAAU,CAAC,kBAAkB,GAAG,WAAW,CAAC,IAAI,CAAC,OAAO,CAAC;AACpD,qBAAA,IAAI,CACD,GAAG,CAAC,CAAC,OAAO,KAAI;AACZ,oBAAA,MAAM,WAAW,GAAG,QAAQ,CAAC,WAAW,CAAC;AACzC,oBAAA,IAAI,WAAW,KAAK,UAAU,EAAE;AAC5B,wBAAA,QACI,OAAO,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,MAAM,IAAI,IAAI,CAAC,OAAO,CAAC,qBAAqB,EAAE,CAAC,MAAM,EAChF;qBACL;yBAAM;AACH,wBAAA,OAAO,OAAO,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,KAAK,IAAI,IAAI,CAAC,OAAO,CAAC,qBAAqB,EAAE,CAAC,KAAK,CAAC;qBACvF;iBACJ,CAAC,EACF,oBAAoB,EAAE,EACtB,MAAM,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,IAAI,CAAC,EACxB,SAAS,CAAC,IAAI,CAAC,UAAU,CAAC,CAC7B;AACA,qBAAA,SAAS,CAAC,CAAC,IAAI,KAAI;AAChB,oBAAA,MAAM,kBAAkB,GAAG,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;oBACvE,IAAI,kBAAkB,EAAE;AACpB,wBAAA,IAAI,CAAC,gBAAgB,CAAC,IAAI,EAAE,CAAC;qBAChC;AACD,oBAAA,IAAI,CAAC,uBAAuB,CAAC,QAAQ,CAAC,CAAC;AAC3C,iBAAC,CAAC,CAAC;aACV;AACL,SAAC,CAAC,CAAC;KACV;IAEO,gBAAgB,CAAC,MAAc,EAAE,MAAe,EAAA;QACpD,IAAI,IAAI,GAAG,CAAC,CAAC;AAEb,QAAA,IAAI,MAAM,IAAI,CAAC,EAAE;AACb,YAAA,OAAO,CAAC,CAAC;SACZ;QAED,MAAM,GAAG,GAAG,MAAM,IAAI,MAAM,IAAI,CAAC,CAAC,CAAC;QACnC,IAAI,KAAK,GAAG,CAAC,CAAC;AAEd,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,WAAW,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;YAC9C,IAAI,IAAI,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,IAAI,IAAI,CAAC,CAAC;YACvC,KAAK,GAAG,CAAC,CAAC;AAEV,YAAA,IAAI,IAAI,IAAI,GAAG,EAAE;gBACb,MAAM;aACT;YAED,IAAI,CAAC,KAAK,IAAI,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE;AACnC,gBAAA,OAAO,CAAC,CAAC;aACZ;SACJ;AAED,QAAA,OAAO,KAAK,CAAC;KAChB;AAEO,IAAA,yBAAyB,CAAC,KAAa,EAAA;QAC3C,IAAI,MAAM,GAAG,CAAC,CAAC;AAEf,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,EAAE,CAAC,EAAE,EAAE;YAC5B,MAAM,IAAI,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,IAAI,IAAI,CAAC,CAAC;SAC5C;AAED,QAAA,OAAO,MAAM,CAAC;KACjB;AAEO,IAAA,sBAAsB,CAAC,kBAAsC,EAAA;AACjE,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,gBAAgB,CAAC,kBAAkB,CAAC,YAAY,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;AACnF,QAAA,MAAM,GAAG,GAAG,IAAI,CAAC,gBAAgB,CAC7B,kBAAkB,CAAC,YAAY,GAAG,kBAAkB,CAAC,YAAY,EACjE,IAAI,CAAC,MAAM,CACd,CAAC;QAEF,OAAO;AACH,YAAA,MAAM,EAAE,IAAI,CAAC,yBAAyB,CAAC,KAAK,CAAC;AAC7C,YAAA,KAAK,EAAE;gBACH,KAAK;;gBAEL,GAAG,EAAE,GAAG,GAAG,CAAC;AACf,aAAA;SACJ,CAAC;KACL;AAEO,IAAA,mBAAmB,CAAC,QAAkC,EAAA;AAC1D,QAAA,IAAI,CAAC,gBAAgB;aAChB,IAAI,CACD,GAAG,CAAC,MAAM,IAAI,CAAC,iBAAiB,CAAC,EACjC,oBAAoB,EAAE,EACtB,YAAY,CAAC,IAAI,CAAC,sBAAsB,CAAC,EACzC,SAAS,CAAC,IAAI,CAAC,UAAU,CAAC,CAC7B;aACA,SAAS,CAAC,MAAM,IAAI,CAAC,sBAAsB,CAAC,QAAQ,CAAC,CAAC,CAAC;KAC/D;AACJ;;ACxdK,SAAU,0CAA0C,CACtD,SAA2C,EAAA;IAE3C,OAAO,SAAS,CAAC,cAAc,CAAC;AACpC,CAAC;MAcY,gCAAgC,CAAA;AAmB7B,IAAA,MAAA,CAAA;AACA,IAAA,UAAA,CAAA;AAnBZ,IAAA,IAII,MAAM,GAAA;QACN,OAAO,IAAI,CAAC,OAAO,CAAC;KACvB;IACD,IAAI,MAAM,CAAC,KAAkB,EAAA;AACzB,QAAA,IAAI,CAAC,OAAO,GAAG,oBAAoB,CAAC,KAAK,CAAC,CAAC;KAC9C;IACO,OAAO,GAAG,GAAG,CAAC;AAEZ,IAAA,aAAa,GAAG,IAAI,YAAY,EAAQ,CAAC;AACzC,IAAA,mBAAmB,GAAG,IAAI,YAAY,EAAS,CAAC;AAE1D,IAAA,cAAc,CAAoD;IAElE,WACY,CAAA,MAAc,EACd,UAA0B,EAAA;QAD1B,IAAM,CAAA,MAAA,GAAN,MAAM,CAAQ;QACd,IAAU,CAAA,UAAA,GAAV,UAAU,CAAgB;AAElC,QAAA,IAAI,CAAC,cAAc,GAAG,IAAI,qCAAqC,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC;AAC9F,QAAA,IAAI,CAAC,cAAc,CAAC,aAAa,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,SAAS,CAAC,MAAK;AAC9E,YAAA,IAAI,CAAC,SAAS,CAAC,MAAM,IAAI,CAAC,aAAa,CAAC,IAAI,EAAE,CAAC,CAAC;AACpD,SAAC,CAAC,CAAC;QACH,IAAI,CAAC,cAAc,CAAC,mBAAmB,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,KAAK,KAAI;AACzF,YAAA,IAAI,CAAC,SAAS,CAAC,MAAM,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;AAC/D,SAAC,CAAC,CAAC;KACN;IAED,WAAW,GAAA;AACP,QAAA,IAAI,IAAI,CAAC,cAAc,EAAE;YACrB,IAAI,CAAC,cAAc,CAAC,gBAAgB,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;SACrD;KACJ;AAEO,IAAA,SAAS,CAAC,IAAgB,EAAA;AAC9B,QAAA,IAAI,MAAM,CAAC,eAAe,EAAE,EAAE;AAC1B,YAAA,IAAI,EAAE,CAAC;SACV;aAAM;AACH,YAAA,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,MAAK;AACjB,gBAAA,IAAI,EAAE,CAAC;AACX,aAAC,CAAC,CAAC;SACN;KACJ;2HA7CQ,gCAAgC,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,MAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,cAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAhC,uBAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,gCAAgC,EAT9B,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,sDAAA,EAAA,MAAA,EAAA,EAAA,MAAA,EAAA,QAAA,EAAA,EAAA,OAAA,EAAA,EAAA,aAAA,EAAA,eAAA,EAAA,mBAAA,EAAA,qBAAA,EAAA,EAAA,SAAA,EAAA;AACP,YAAA;AACI,gBAAA,OAAO,EAAE,uBAAuB;AAChC,gBAAA,UAAU,EAAE,0CAA0C;gBACtD,IAAI,EAAE,CAAC,UAAU,EAAC,MAAM,gCAAgC,EAAC,CAAC;AAC7D,aAAA;YACD,cAAc;AACjB,SAAA,EAAA,aAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA,CAAA;;4FAEQ,gCAAgC,EAAA,UAAA,EAAA,CAAA;kBAZ5C,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACP,oBAAA,QAAQ,EAAE,sDAAsD;AAChE,oBAAA,UAAU,EAAE,IAAI;AAChB,oBAAA,SAAS,EAAE;AACP,wBAAA;AACI,4BAAA,OAAO,EAAE,uBAAuB;AAChC,4BAAA,UAAU,EAAE,0CAA0C;4BACtD,IAAI,EAAE,CAAC,UAAU,EAAC,MAAK,gCAAiC,EAAC,CAAC;AAC7D,yBAAA;wBACD,cAAc;AACjB,qBAAA;AACJ,iBAAA,CAAA;wGAMO,MAAM,EAAA,CAAA;sBAJT,KAAK;gBAYI,aAAa,EAAA,CAAA;sBAAtB,MAAM;gBACG,mBAAmB,EAAA,CAAA;sBAA5B,MAAM;;;AC1CX;;AAEG;;;;"}