{"version":3,"file":"ngx-permissions.mjs","sources":["../../../projects/ngx-permissions/src/lib/enums/predefined-strategies.enum.ts","../../../projects/ngx-permissions/src/lib/store/configuration.store.ts","../../../projects/ngx-permissions/src/lib/service/configuration.service.ts","../../../projects/ngx-permissions/src/lib/utils/utils.ts","../../../projects/ngx-permissions/src/lib/store/permissions.store.ts","../../../projects/ngx-permissions/src/lib/service/permissions.service.ts","../../../projects/ngx-permissions/src/lib/store/roles.store.ts","../../../projects/ngx-permissions/src/lib/service/roles.service.ts","../../../projects/ngx-permissions/src/lib/directive/permissions.directive.ts","../../../projects/ngx-permissions/src/lib/model/permissions-router-data.model.ts","../../../projects/ngx-permissions/src/lib/router/permissions-guard.service.ts","../../../projects/ngx-permissions/src/lib/testing/permissions-allow.directive.stub.ts","../../../projects/ngx-permissions/src/lib/testing/permissions-restrict.directive.stub.ts","../../../projects/ngx-permissions/src/lib/index.ts","../../../projects/ngx-permissions/src/public-api.ts","../../../projects/ngx-permissions/src/ngx-permissions.ts"],"sourcesContent":["export const NgxPermissionsPredefinedStrategies = {\n    REMOVE: 'remove',\n    SHOW: 'show'\n} as const;\n","import { Injectable } from '@angular/core';\nimport { BehaviorSubject, Observable } from 'rxjs';\nimport { Strategy } from '../service/configuration.service';\n\n@Injectable()\nexport class NgxPermissionsConfigurationStore {\n\n    public strategiesSource: BehaviorSubject<Strategy> = new BehaviorSubject<Strategy>({});\n    public strategies$: Observable<Strategy> = this.strategiesSource.asObservable();\n\n    public onAuthorisedDefaultStrategy: string | undefined;\n    public onUnAuthorisedDefaultStrategy: string | undefined;\n\n}\n","import { Inject, Injectable, InjectionToken, TemplateRef } from '@angular/core';\nimport { BehaviorSubject, Observable } from 'rxjs';\nimport { NgxPermissionsPredefinedStrategies } from '../enums/predefined-strategies.enum';\nimport { NgxPermissionsConfigurationStore } from '../store/configuration.store';\n\nexport type StrategyFunction = (templateRef?: TemplateRef<any>) => void;\n\nexport interface Strategy {\n    [key: string]: StrategyFunction;\n}\n\nexport const USE_CONFIGURATION_STORE = new InjectionToken('USE_CONFIGURATION_STORE');\n\n@Injectable()\nexport class NgxPermissionsConfigurationService {\n\n    private strategiesSource: BehaviorSubject<Strategy>;\n    public strategies$: Observable<Strategy>;\n    public onAuthorisedDefaultStrategy: string | undefined;\n    public onUnAuthorisedDefaultStrategy: string | undefined;\n\n    constructor(\n        @Inject(USE_CONFIGURATION_STORE) private isolate: boolean = false,\n        private configurationStore: NgxPermissionsConfigurationStore\n    ) {\n        this.strategiesSource = this.isolate ? new BehaviorSubject<Strategy>({}) : this.configurationStore.strategiesSource;\n        this.strategies$ = this.strategiesSource.asObservable();\n\n        this.onAuthorisedDefaultStrategy = this.isolate ? undefined : this.configurationStore.onAuthorisedDefaultStrategy;\n        this.onUnAuthorisedDefaultStrategy = this.isolate ? undefined : this.configurationStore.onUnAuthorisedDefaultStrategy;\n\n    }\n\n    public setDefaultOnAuthorizedStrategy(name: string | 'remove' | 'show'): void {\n        if (this.isolate) {\n            this.onAuthorisedDefaultStrategy = this.getDefinedStrategy(name);\n        } else {\n            this.configurationStore.onAuthorisedDefaultStrategy = this.getDefinedStrategy(name);\n            this.onAuthorisedDefaultStrategy = this.configurationStore.onAuthorisedDefaultStrategy;\n        }\n    }\n\n    public setDefaultOnUnauthorizedStrategy(name: string | 'remove' | 'show'): void {\n        if (this.isolate) {\n            this.onUnAuthorisedDefaultStrategy = this.getDefinedStrategy(name);\n        } else {\n            this.configurationStore.onUnAuthorisedDefaultStrategy = this.getDefinedStrategy(name);\n            this.onUnAuthorisedDefaultStrategy = this.configurationStore.onUnAuthorisedDefaultStrategy;\n        }\n    }\n\n    public addPermissionStrategy(key: string, func: StrategyFunction): void {\n        this.strategiesSource.value[key] = func;\n    }\n\n    public getStrategy(key: string) {\n        return this.strategiesSource.value[key];\n    }\n\n    public getAllStrategies() {\n        return this.strategiesSource.value;\n    }\n\n    private getDefinedStrategy(name: string | 'remove' | 'show') {\n        if (this.strategiesSource.value[name] || this.isPredefinedStrategy(name)) {\n            return name;\n        } else {\n            throw new Error(`No ' ${name} ' strategy is found please define one`);\n        }\n    }\n\n    private isPredefinedStrategy(strategy: string): boolean {\n        return strategy === NgxPermissionsPredefinedStrategies.SHOW || strategy === NgxPermissionsPredefinedStrategies.REMOVE;\n    }\n\n}\n","export function isFunction<T>(value: any): value is T {\n    return typeof value === 'function';\n}\n\nexport function isPlainObject(value: any): boolean {\n    if (Object.prototype.toString.call(value) !== '[object Object]') {\n        return false;\n    } else {\n        const prototype = Object.getPrototypeOf(value);\n        return prototype === null || prototype === Object.prototype;\n    }\n}\n\nexport function isString(value: any): value is string {\n    return !!value && typeof value === 'string';\n}\n\nexport function isBoolean(value: any): value is boolean {\n    return typeof value === 'boolean';\n}\n\nexport function isPromise(promise: any) {\n    return Object.prototype.toString.call(promise) === '[object Promise]';\n}\n\nexport function notEmptyValue(value: string | string[]): boolean {\n    if (Array.isArray(value)) {\n        return value.length > 0;\n    }\n    return !!value;\n}\n\nexport function transformStringToArray(value: string | string[]): string[] {\n    if (isString(value)) {\n        return [value];\n    }\n    return value;\n}\n","import { Injectable } from '@angular/core';\nimport { BehaviorSubject, Observable } from 'rxjs';\n\n@Injectable()\nexport class NgxPermissionsStore {\n\n    public permissionsSource = new BehaviorSubject<{}>({});\n    public permissions$: Observable<{}> = this.permissionsSource.asObservable();\n\n}\n","import { Inject, Injectable, InjectionToken } from '@angular/core';\n\nimport { BehaviorSubject, from, Observable, ObservableInput, of } from 'rxjs';\nimport { catchError, first, map, mergeAll, switchMap } from 'rxjs/operators';\n\nimport { NgxPermission } from '../model/permission.model';\nimport { ValidationFn } from '../model/permissions-router-data.model';\nimport { NgxPermissionsStore } from '../store/permissions.store';\n\nimport { isBoolean, isFunction, transformStringToArray } from '../utils/utils';\n\nexport interface NgxPermissionsObject {\n    [name: string]: NgxPermission;\n}\n\nexport const USE_PERMISSIONS_STORE = new InjectionToken('USE_PERMISSIONS_STORE');\n\n@Injectable()\nexport class NgxPermissionsService {\n\n    private permissionsSource: BehaviorSubject<NgxPermissionsObject>;\n    public permissions$: Observable<NgxPermissionsObject>;\n\n    constructor(\n        @Inject(USE_PERMISSIONS_STORE) private isolate: boolean = false,\n        private permissionsStore: NgxPermissionsStore\n    ) {\n        this.permissionsSource = this.isolate ? new BehaviorSubject<NgxPermissionsObject>({}) : this.permissionsStore.permissionsSource;\n        this.permissions$ = this.permissionsSource.asObservable();\n    }\n\n    /**\n     * Remove all permissions from permissions source\n     */\n    public flushPermissions(): void {\n        this.permissionsSource.next({});\n    }\n\n    public hasPermission(permission: string | string[]): Promise<boolean> {\n        if (!permission || (Array.isArray(permission) && permission.length === 0)) {\n            return Promise.resolve(true);\n        }\n\n        permission = transformStringToArray(permission);\n        return this.hasArrayPermission(permission);\n    }\n\n    public loadPermissions(permissions: string[], validationFunction?: ValidationFn): void {\n        const newPermissions = permissions.reduce(\n            (source, name) => this.reducePermission(source, name, validationFunction), {}\n        );\n        this.permissionsSource.next(newPermissions);\n    }\n\n    public addPermission(permission: string | string[], validationFunction?: ValidationFn): void {\n        if (Array.isArray(permission)) {\n            const permissions = permission.reduce(\n                (source, name) => this.reducePermission(source, name, validationFunction), this.permissionsSource.value\n            );\n\n            this.permissionsSource.next(permissions);\n        } else {\n            const permissions = this.reducePermission(this.permissionsSource.value, permission, validationFunction);\n\n            this.permissionsSource.next(permissions);\n        }\n    }\n\n    public removePermission(permissionName: string): void {\n        const permissions = {\n            ...this.permissionsSource.value\n        };\n        delete permissions[permissionName];\n        this.permissionsSource.next(permissions);\n    }\n\n    public getPermission(name: string): NgxPermission | undefined {\n        return this.permissionsSource.value[name];\n    }\n\n    public getPermissions(): NgxPermissionsObject {\n        return this.permissionsSource.value;\n    }\n\n    private reducePermission(source: NgxPermissionsObject, name: string, validationFunction?: ValidationFn): NgxPermissionsObject {\n        if (!!validationFunction && isFunction(validationFunction)) {\n            return {\n                ...source,\n                [name]: {name, validationFunction}\n            };\n        }\n        return {\n            ...source,\n            [name]: {name}\n        };\n    }\n\n    private hasArrayPermission(permissions: string[]): Promise<boolean> {\n        const promises: Observable<boolean>[] = permissions.map(key => {\n            if (this.hasPermissionValidationFunction(key)) {\n                const validationFunction = this.permissionsSource.value[key].validationFunction;\n                const immutableValue = {...this.permissionsSource.value};\n\n                return of(null).pipe(\n                    map(() => validationFunction(key, immutableValue)),\n                    switchMap((promise: Promise<boolean> | boolean): ObservableInput<boolean> => isBoolean(promise) ?\n                        of(promise as boolean) : promise as Promise<boolean>),\n                    catchError(() => of(false))\n                );\n            }\n\n            // check for name of the permission if there is no validation function\n            return of(!!this.permissionsSource.value[key]);\n        });\n\n        return from(promises).pipe(\n            mergeAll(),\n            first((data) => data !== false, false),\n            map((data) => data !== false)\n        ).toPromise().then((data: any) => data);\n    }\n\n    private hasPermissionValidationFunction(key: string): boolean {\n        return !!this.permissionsSource.value[key] &&\n            !!this.permissionsSource.value[key].validationFunction &&\n            isFunction(this.permissionsSource.value[key].validationFunction);\n    }\n\n}\n","import { BehaviorSubject, Observable } from 'rxjs';\n\nexport class NgxRolesStore {\n\n    public rolesSource = new BehaviorSubject<{}>({});\n\n    public roles$: Observable<{}> = this.rolesSource.asObservable();\n\n}\n","import { Inject, Injectable, InjectionToken } from '@angular/core';\n\nimport { BehaviorSubject, from, Observable, ObservableInput, of } from 'rxjs';\nimport { catchError, every, first, map, mergeAll, mergeMap, switchMap } from 'rxjs/operators';\nimport { ValidationFn } from '../model/permissions-router-data.model';\n\nimport { NgxRole } from '../model/role.model';\nimport { NgxRolesStore } from '../store/roles.store';\nimport { isBoolean, isFunction, isPromise, transformStringToArray } from '../utils/utils';\nimport { NgxPermissionsService } from './permissions.service';\n\nexport const USE_ROLES_STORE = new InjectionToken('USE_ROLES_STORE');\n\nexport interface NgxRolesObject {\n    [name: string]: NgxRole;\n}\n\n@Injectable()\nexport class NgxRolesService {\n\n    private rolesSource: BehaviorSubject<NgxRolesObject>;\n\n    public roles$: Observable<NgxRolesObject>;\n\n    constructor(\n        @Inject(USE_ROLES_STORE) private isolate: boolean = false,\n        private rolesStore: NgxRolesStore,\n        private permissionsService: NgxPermissionsService\n    ) {\n        this.rolesSource = this.isolate ? new BehaviorSubject<NgxRolesObject>({}) : this.rolesStore.rolesSource;\n        this.roles$ = this.rolesSource.asObservable();\n    }\n\n    public addRole(name: string, validationFunction: ValidationFn | string[]) {\n        const roles = {\n            ...this.rolesSource.value,\n            [name]: {name, validationFunction}\n        };\n        this.rolesSource.next(roles);\n    }\n\n    public addRoleWithPermissions(name: string, permissions: string[]) {\n        this.permissionsService.addPermission(permissions);\n        this.addRole(name, permissions);\n    }\n\n    public addRoles(rolesObj: { [name: string]: ValidationFn | string[] }) {\n        Object.keys(rolesObj).forEach((key, index) => {\n            this.addRole(key, rolesObj[key]);\n        });\n    }\n\n    public addRolesWithPermissions(rolesObj: { [name: string]: string[] }) {\n        Object.keys(rolesObj).forEach((key, index) => {\n            this.addRoleWithPermissions(key, rolesObj[key]);\n        });\n    }\n\n    public flushRoles() {\n        this.rolesSource.next({});\n    }\n\n    public flushRolesAndPermissions() {\n        this.flushRoles();\n        this.permissionsService.flushPermissions();\n    }\n\n    public removeRole(roleName: string) {\n        const roles = {\n            ...this.rolesSource.value\n        };\n        delete roles[roleName];\n        this.rolesSource.next(roles);\n    }\n\n    public getRoles(): NgxRolesObject {\n        return this.rolesSource.value;\n    }\n\n    public getRole(name: string): NgxRole | undefined {\n        return this.rolesSource.value[name];\n    }\n\n    public hasOnlyRoles(names: string | string[]): Promise<boolean> {\n        const isNamesEmpty = !names || (Array.isArray(names) && names.length === 0);\n\n        if (isNamesEmpty) {\n            return Promise.resolve(true);\n        }\n\n        names = transformStringToArray(names);\n\n        return Promise.all([this.hasRoleKey(names), this.hasRolePermission(this.rolesSource.value, names)])\n            .then(([hasRoles, hasPermissions]: [boolean, boolean]) => {\n                return hasRoles || hasPermissions;\n            });\n    }\n\n    private hasRoleKey(roleName: string[]): Promise<boolean> {\n        const promises: Observable<boolean>[] = roleName.map((key) => {\n            const hasValidationFunction = !!this.rolesSource.value[key] &&\n                                          !!this.rolesSource.value[key].validationFunction &&\n                                          isFunction(this.rolesSource.value[key].validationFunction);\n\n            if (hasValidationFunction && !isPromise(this.rolesSource.value[key].validationFunction)) {\n                const validationFunction = this.rolesSource.value[key].validationFunction as ValidationFn;\n                const immutableValue = {...this.rolesSource.value};\n\n                return of(null).pipe(\n                    map(() => validationFunction(key, immutableValue)),\n                    switchMap((promise: Promise<boolean> | boolean): ObservableInput<boolean> => isBoolean(promise) ?\n                        of(promise as boolean) : promise as Promise<boolean>),\n                    catchError(() => of(false))\n                );\n            }\n\n            return of(false);\n        });\n\n        return from(promises).pipe(\n            mergeAll(),\n            first((data: any) => data !== false, false),\n            map((data) => data !== false)\n        ).toPromise().then((data: any) => data);\n    }\n\n    private hasRolePermission(roles: NgxRolesObject, roleNames: string[]): Promise<boolean> {\n        return from(roleNames).pipe(\n            mergeMap((key) => {\n                if (roles[key] && Array.isArray(roles[key].validationFunction)) {\n                    return from(<string[]>roles[key].validationFunction).pipe(\n                        mergeMap((permission) => this.permissionsService.hasPermission(permission)),\n                        every(hasPermission => hasPermission === true)\n                    );\n                }\n\n                return of(false);\n            }),\n            first(hasPermission => hasPermission === true, false)\n        ).toPromise();\n    }\n\n}\n","import {\n    ChangeDetectorRef,\n    Directive,\n    EventEmitter,\n    inject,\n    Input,\n    OnChanges,\n    OnDestroy,\n    OnInit,\n    Output,\n    SimpleChanges,\n    TemplateRef,\n    ViewContainerRef\n} from '@angular/core';\n\nimport { merge, Subscription } from 'rxjs';\nimport { skip, take } from 'rxjs/operators';\n\nimport { NgxPermissionsPredefinedStrategies } from '../enums/predefined-strategies.enum';\nimport { NgxPermissionsConfigurationService, StrategyFunction } from '../service/configuration.service';\nimport { NgxPermissionsService } from '../service/permissions.service';\nimport { NgxRolesService } from '../service/roles.service';\nimport { isBoolean, isFunction, isString, notEmptyValue } from '../utils/utils';\n\n@Directive({\n    selector: '[ngxPermissionsOnly],[ngxPermissionsExcept]',\n    standalone: false\n})\nexport class NgxPermissionsDirective implements OnInit, OnDestroy, OnChanges {\n\n    @Input() ngxPermissionsOnly: string | string[];\n    @Input() ngxPermissionsOnlyThen: TemplateRef<any>;\n    @Input() ngxPermissionsOnlyElse: TemplateRef<any>;\n\n    @Input() ngxPermissionsExcept: string | string[];\n    @Input() ngxPermissionsExceptElse: TemplateRef<any>;\n    @Input() ngxPermissionsExceptThen: TemplateRef<any>;\n\n    @Input() ngxPermissionsThen: TemplateRef<any>;\n    @Input() ngxPermissionsElse: TemplateRef<any>;\n\n    @Input() ngxPermissionsOnlyAuthorisedStrategy: string | StrategyFunction;\n    @Input() ngxPermissionsOnlyUnauthorisedStrategy: string | StrategyFunction;\n\n    @Input() ngxPermissionsExceptUnauthorisedStrategy: string | StrategyFunction;\n    @Input() ngxPermissionsExceptAuthorisedStrategy: string | StrategyFunction;\n\n    @Input() ngxPermissionsUnauthorisedStrategy: string | StrategyFunction;\n    @Input() ngxPermissionsAuthorisedStrategy: string | StrategyFunction;\n\n    @Output() permissionsAuthorized = new EventEmitter();\n    @Output() permissionsUnauthorized = new EventEmitter();\n\n    private initPermissionSubscription: Subscription;\n    // skip first run cause merge will fire twice\n    private firstMergeUnusedRun = 1;\n    private currentAuthorizedState: boolean;\n\n    private readonly permissionsService = inject(NgxPermissionsService);\n    private readonly configurationService = inject(NgxPermissionsConfigurationService);\n    private readonly rolesService = inject(NgxRolesService);\n    private readonly viewContainer = inject(ViewContainerRef);\n    private readonly changeDetector = inject(ChangeDetectorRef);\n    private readonly templateRef = inject(TemplateRef<any>);\n\n    ngOnInit(): void {\n        this.viewContainer.clear();\n        this.initPermissionSubscription = this.validateExceptOnlyPermissions();\n    }\n\n\n    ngOnChanges(changes: SimpleChanges): void {\n        const onlyChanges = changes['ngxPermissionsOnly'];\n        const exceptChanges = changes['ngxPermissionsExcept'];\n        if (onlyChanges || exceptChanges) {\n            // Due to bug when you pass empty array\n            if (onlyChanges && onlyChanges.firstChange) {\n                return;\n            }\n            if (exceptChanges && exceptChanges.firstChange) {\n                return;\n            }\n\n            merge(this.permissionsService.permissions$, this.rolesService.roles$)\n                .pipe(skip(this.firstMergeUnusedRun), take(1))\n                .subscribe(() => {\n                    if (notEmptyValue(this.ngxPermissionsExcept)) {\n                        this.validateExceptAndOnlyPermissions();\n                        return;\n                    }\n\n                    if (notEmptyValue(this.ngxPermissionsOnly)) {\n                        this.validateOnlyPermissions();\n                        return;\n                    }\n\n                    this.handleAuthorisedPermission(this.getAuthorisedTemplates());\n                });\n        }\n    }\n\n    ngOnDestroy(): void {\n        if (this.initPermissionSubscription) {\n            this.initPermissionSubscription.unsubscribe();\n        }\n    }\n\n    private validateExceptOnlyPermissions(): Subscription {\n        return merge(this.permissionsService.permissions$, this.rolesService.roles$)\n            .pipe(skip(this.firstMergeUnusedRun))\n            .subscribe(() => {\n                if (notEmptyValue(this.ngxPermissionsExcept)) {\n                    this.validateExceptAndOnlyPermissions();\n                    return;\n                }\n\n                if (notEmptyValue(this.ngxPermissionsOnly)) {\n                    this.validateOnlyPermissions();\n                    return;\n                }\n                this.handleAuthorisedPermission(this.getAuthorisedTemplates());\n            });\n    }\n\n    private validateExceptAndOnlyPermissions(): void {\n        Promise\n            .all([\n                this.permissionsService.hasPermission(this.ngxPermissionsExcept),\n                this.rolesService.hasOnlyRoles(this.ngxPermissionsExcept)\n            ])\n            .then(([hasPermission, hasRole]) => {\n                if (hasPermission || hasRole) {\n                    this.handleUnauthorisedPermission(this.ngxPermissionsExceptElse || this.ngxPermissionsElse);\n                    return;\n                }\n\n                if (!!this.ngxPermissionsOnly) {\n                    throw false;\n                }\n\n                this.handleAuthorisedPermission(this.ngxPermissionsExceptThen || this.ngxPermissionsThen || this.templateRef);\n            })\n            .catch(() => {\n                if (!!this.ngxPermissionsOnly) {\n                    this.validateOnlyPermissions();\n                } else {\n                    this.handleAuthorisedPermission(this.ngxPermissionsExceptThen || this.ngxPermissionsThen || this.templateRef);\n                }\n            });\n    }\n\n    private validateOnlyPermissions(): void {\n        Promise\n            .all([this.permissionsService.hasPermission(this.ngxPermissionsOnly), this.rolesService.hasOnlyRoles(this.ngxPermissionsOnly)])\n            .then(([hasPermissions, hasRoles]) => {\n                if (hasPermissions || hasRoles) {\n                    this.handleAuthorisedPermission(this.ngxPermissionsOnlyThen || this.ngxPermissionsThen || this.templateRef);\n                } else {\n                    this.handleUnauthorisedPermission(this.ngxPermissionsOnlyElse || this.ngxPermissionsElse);\n                }\n            })\n            .catch(() => {\n                this.handleUnauthorisedPermission(this.ngxPermissionsOnlyElse || this.ngxPermissionsElse);\n            });\n    }\n\n    private handleUnauthorisedPermission(template: TemplateRef<any>): void {\n        if (isBoolean(this.currentAuthorizedState) && !this.currentAuthorizedState) {\n            return;\n        }\n\n        this.currentAuthorizedState = false;\n        this.permissionsUnauthorized.emit();\n\n        if (this.getUnAuthorizedStrategyInput()) {\n            this.applyStrategyAccordingToStrategyType(this.getUnAuthorizedStrategyInput());\n            return;\n        }\n\n        if (this.configurationService.onUnAuthorisedDefaultStrategy && !this.elseBlockDefined()) {\n            this.applyStrategy(this.configurationService.onUnAuthorisedDefaultStrategy);\n        } else {\n            this.showTemplateBlockInView(template);\n        }\n\n    }\n\n    private handleAuthorisedPermission(template: TemplateRef<any>): void {\n        if (isBoolean(this.currentAuthorizedState) && this.currentAuthorizedState) {\n            return;\n        }\n\n        this.currentAuthorizedState = true;\n        this.permissionsAuthorized.emit();\n\n        if (this.getAuthorizedStrategyInput()) {\n            this.applyStrategyAccordingToStrategyType(this.getAuthorizedStrategyInput());\n            return;\n        }\n\n        if (this.configurationService.onAuthorisedDefaultStrategy && !this.thenBlockDefined()) {\n            this.applyStrategy(this.configurationService.onAuthorisedDefaultStrategy);\n        } else {\n            this.showTemplateBlockInView(template);\n        }\n    }\n\n    private applyStrategyAccordingToStrategyType(strategy: string | StrategyFunction): void {\n        if (isString(strategy)) {\n            this.applyStrategy(strategy);\n            return;\n        }\n\n        if (isFunction(strategy)) {\n            this.showTemplateBlockInView(this.templateRef);\n            (strategy as StrategyFunction)(this.templateRef);\n            return;\n        }\n    }\n\n    private showTemplateBlockInView(template: TemplateRef<any>): void {\n        this.viewContainer.clear();\n        if (!template) {\n            return;\n        }\n\n        this.viewContainer.createEmbeddedView(template);\n        this.changeDetector.markForCheck();\n    }\n\n    private getAuthorisedTemplates(): TemplateRef<any> {\n        return this.ngxPermissionsOnlyThen\n            || this.ngxPermissionsExceptThen\n            || this.ngxPermissionsThen\n            || this.templateRef;\n    }\n\n    private elseBlockDefined(): boolean {\n        return !!this.ngxPermissionsExceptElse || !!this.ngxPermissionsElse;\n    }\n\n    private thenBlockDefined() {\n        return !!this.ngxPermissionsExceptThen || !!this.ngxPermissionsThen;\n    }\n\n    private getAuthorizedStrategyInput() {\n        return this.ngxPermissionsOnlyAuthorisedStrategy ||\n            this.ngxPermissionsExceptAuthorisedStrategy ||\n            this.ngxPermissionsAuthorisedStrategy;\n    }\n\n    private getUnAuthorizedStrategyInput() {\n        return this.ngxPermissionsOnlyUnauthorisedStrategy ||\n            this.ngxPermissionsExceptUnauthorisedStrategy ||\n            this.ngxPermissionsUnauthorisedStrategy;\n    }\n\n    private applyStrategy(name: string) {\n        if (name === NgxPermissionsPredefinedStrategies.SHOW) {\n            this.showTemplateBlockInView(this.templateRef);\n            return;\n        }\n\n        if (name === NgxPermissionsPredefinedStrategies.REMOVE) {\n            this.viewContainer.clear();\n            return;\n        }\n        const strategy = this.configurationService.getStrategy(name);\n        this.showTemplateBlockInView(this.templateRef);\n        strategy(this.templateRef);\n    }\n}\n","import { ActivatedRouteSnapshot, NavigationExtras, Route, RouterStateSnapshot } from '@angular/router';\n\nexport interface NgxPermissionsRouterData {\n    only?: string | string[] | OnlyFn;\n    except?: string | string[] | ExceptFn;\n    redirectTo?: RedirectTo | RedirectToFn;\n}\n\nexport interface NgxRedirectToNavigationParameters {\n    navigationCommands: any[] | NavigationCommandsFn;\n    navigationExtras?: NavigationExtras | NavigationExtrasFn;\n}\n\nexport declare type OnlyFn = (route: ActivatedRouteSnapshot | Route, state?: RouterStateSnapshot) => string | string[];\nexport declare type ExceptFn = (route: ActivatedRouteSnapshot | Route, state?: RouterStateSnapshot) => string | string[];\n\nexport declare type RedirectTo =\n    string\n    | { [name: string]: NgxRedirectToNavigationParameters | string | RedirectToFn }\n    | NgxRedirectToNavigationParameters;\nexport declare type RedirectToFn =\n    (rejectedPermissionName?: string, route?: ActivatedRouteSnapshot | Route, state?: RouterStateSnapshot) => RedirectTo;\n\nexport declare type NavigationCommandsFn = (route: ActivatedRouteSnapshot | Route, state?: RouterStateSnapshot) => any[];\nexport declare type NavigationExtrasFn = (route: ActivatedRouteSnapshot | Route, state?: RouterStateSnapshot) => NavigationExtras;\nexport declare type ValidationFn = ((name?: string, store?: any) => Promise<void | string | boolean> | boolean | string[]);\n\nexport const DEFAULT_REDIRECT_KEY = 'default';\n","import { inject, Injectable } from '@angular/core';\nimport {\n    ActivatedRouteSnapshot,\n    CanActivateChildFn,\n    CanActivateFn,\n    CanMatchFn,\n    NavigationExtras,\n    Route,\n    Router,\n    RouterStateSnapshot,\n    UrlSegment\n} from '@angular/router';\n\nimport { forkJoin, from, Observable, of } from 'rxjs';\nimport { first, mergeMap, tap } from 'rxjs/operators';\n\nimport {\n    DEFAULT_REDIRECT_KEY,\n    ExceptFn,\n    NavigationCommandsFn,\n    NavigationExtrasFn,\n    NgxPermissionsRouterData,\n    NgxRedirectToNavigationParameters,\n    OnlyFn,\n    RedirectTo,\n    RedirectToFn\n} from '../model/permissions-router-data.model';\nimport { NgxPermissionsService } from '../service/permissions.service';\nimport { NgxRolesService } from '../service/roles.service';\nimport { isFunction, isPlainObject, transformStringToArray } from '../utils/utils';\n\nexport interface NgxPermissionsData {\n    only?: string | string[];\n    except?: string | string[];\n    redirectTo?: RedirectTo | RedirectToFn;\n}\n\nexport const ngxPermissionsGuard: CanActivateFn | CanActivateChildFn | CanMatchFn = (route: ActivatedRouteSnapshot | Route, state: RouterStateSnapshot | UrlSegment[]) => {\n    const permissionsGuard = inject(NgxPermissionsGuard);\n    if (state instanceof RouterStateSnapshot) {\n        return permissionsGuard.hasPermissions(route, state);\n    }\n    return permissionsGuard.hasPermissions(route);\n}\n\n/**\n * @deprecated Use {@link ngxPermissionsGuard} instead\n */\n@Injectable()\nexport class NgxPermissionsGuard {\n\n    constructor(private permissionsService: NgxPermissionsService, private rolesService: NgxRolesService, private router: Router) {\n    }\n\n    canActivate(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): Promise<boolean> | boolean {\n        return this.hasPermissions(route, state);\n    }\n\n    canActivateChild(childRoute: ActivatedRouteSnapshot, state: RouterStateSnapshot): Observable<boolean> | Promise<boolean> | boolean {\n        return this.hasPermissions(childRoute, state);\n    }\n\n    canLoad(route: Route): boolean | Observable<boolean> | Promise<boolean> {\n        return this.hasPermissions(route);\n    }\n\n    canMatch(route: Route): boolean | Observable<boolean> | Promise<boolean> {\n        return this.hasPermissions(route);\n    }\n\n    hasPermissions(route: ActivatedRouteSnapshot | Route, state?: RouterStateSnapshot) {\n        const routeDataPermissions = !!route && route.data ? (route.data['permissions'] as NgxPermissionsRouterData) : {};\n        const permissions = this.transformPermission(routeDataPermissions, route, state);\n\n        if (this.isParameterAvailable(permissions.except)) {\n            return this.passingExceptPermissionsValidation(permissions, route, state);\n        }\n\n        if (this.isParameterAvailable(permissions.only)) {\n            return this.passingOnlyPermissionsValidation(permissions, route, state);\n        }\n\n        return true;\n    }\n\n    private transformPermission(\n        permissions: NgxPermissionsRouterData,\n        route: ActivatedRouteSnapshot | Route,\n        state?: RouterStateSnapshot\n    ): NgxPermissionsData {\n        const only = isFunction<OnlyFn>(permissions.only)\n            ? permissions.only(route, state)\n            : transformStringToArray(permissions.only);\n        const except = isFunction<ExceptFn>(permissions.except)\n            ? permissions.except(route, state)\n            : transformStringToArray(permissions.except);\n        const redirectTo = permissions.redirectTo;\n\n\n        return {\n            only,\n            except,\n            redirectTo\n        };\n    }\n\n    private isParameterAvailable(permission: string | string[]) {\n        return !!permission && permission.length > 0;\n    }\n\n    private passingExceptPermissionsValidation(\n        permissions: NgxPermissionsData,\n        route: ActivatedRouteSnapshot | Route,\n        state: RouterStateSnapshot\n    ): Promise<boolean> {\n        if (\n            !!permissions.redirectTo\n            && (\n                (isFunction<RedirectToFn>(permissions.redirectTo))\n                || (isPlainObject(permissions.redirectTo) && !this.isRedirectionWithParameters(permissions.redirectTo))\n            )\n        ) {\n            let failedPermission = '';\n\n            return from(permissions.except)\n                .pipe(\n                    mergeMap(permissionsExcept => {\n                        return forkJoin([\n                            this.permissionsService.hasPermission(permissionsExcept),\n                            this.rolesService.hasOnlyRoles(permissionsExcept)\n                        ]).pipe(\n                            tap(hasPermissions => {\n                                const dontHavePermissions = hasPermissions.every(hasPermission => hasPermission === false);\n\n                                if (!dontHavePermissions) {\n                                    failedPermission = permissionsExcept;\n                                }\n                            })\n                        );\n                    }),\n                    first(hasPermissions => hasPermissions.some(hasPermission => hasPermission === true), false),\n                    mergeMap(isAllFalse => {\n                        if (!!failedPermission) {\n                            this.handleRedirectOfFailedPermission(permissions, failedPermission, route, state);\n\n                            return of(false);\n                        }\n\n                        if (!isAllFalse && permissions.only) {\n                            return this.onlyRedirectCheck(permissions, route, state);\n                        }\n\n                        return of(!isAllFalse);\n                    })\n                )\n                .toPromise();\n        }\n\n        return Promise.all([\n            this.permissionsService.hasPermission(permissions.except),\n            this.rolesService.hasOnlyRoles(permissions.except)\n        ]).then(([hasPermission, hasRoles]) => {\n            if (hasPermission || hasRoles) {\n                if (permissions.redirectTo) {\n                    this.redirectToAnotherRoute(\n                        permissions.redirectTo,\n                        route,\n                        state\n                    );\n                }\n\n                return false;\n            }\n\n            if (permissions.only) {\n                return this.checkOnlyPermissions(permissions, route, state);\n            }\n            return true;\n        });\n    }\n\n    private redirectToAnotherRoute(\n        permissionRedirectTo: RedirectTo | RedirectToFn,\n        route: ActivatedRouteSnapshot | Route,\n        state?: RouterStateSnapshot,\n        failedPermissionName?: string\n    ): void {\n\n        const redirectTo = isFunction<RedirectToFn>(permissionRedirectTo)\n            ? permissionRedirectTo(failedPermissionName, route, state)\n            : permissionRedirectTo;\n\n        if (this.isRedirectionWithParameters(redirectTo)) {\n            redirectTo.navigationCommands = this.transformNavigationCommands(redirectTo.navigationCommands, route, state);\n            redirectTo.navigationExtras = this.transformNavigationExtras(redirectTo.navigationExtras, route, state);\n            this.router.navigate(redirectTo.navigationCommands, redirectTo.navigationExtras);\n            return;\n        }\n\n        if (Array.isArray(redirectTo)) {\n            this.router.navigate(redirectTo);\n        } else {\n            this.router.navigate([redirectTo]);\n        }\n    }\n\n    private isRedirectionWithParameters(object: any | NgxRedirectToNavigationParameters): object is NgxRedirectToNavigationParameters {\n        return (isPlainObject(object) && (!!object.navigationCommands || !!object.navigationExtras));\n    }\n\n    private transformNavigationCommands(\n        navigationCommands: any[] | NavigationCommandsFn,\n        route: ActivatedRouteSnapshot | Route,\n        state?: RouterStateSnapshot\n    ): any[] {\n        return isFunction<NavigationCommandsFn>(navigationCommands)\n            ? navigationCommands(route, state)\n            : navigationCommands;\n    }\n\n    private transformNavigationExtras(\n        navigationExtras: NavigationExtras | NavigationExtrasFn,\n        route: ActivatedRouteSnapshot | Route,\n        state?: RouterStateSnapshot\n    ): NavigationExtras {\n        return isFunction<NavigationExtrasFn>(navigationExtras)\n            ? navigationExtras(route, state)\n            : navigationExtras;\n    }\n\n    private onlyRedirectCheck(\n        permissions: NgxPermissionsData,\n        route: ActivatedRouteSnapshot | Route,\n        state?: RouterStateSnapshot\n    ): Promise<boolean> {\n        let failedPermission = '';\n\n        return from(permissions.only)\n            .pipe(\n                mergeMap(permissionsOnly => {\n                    return forkJoin([\n                        this.permissionsService.hasPermission(permissionsOnly),\n                        this.rolesService.hasOnlyRoles(permissionsOnly)\n                    ]).pipe(\n                        tap(hasPermissions => {\n                            const failed = hasPermissions.every(hasPermission => hasPermission === false);\n\n                            if (failed) {\n                                failedPermission = permissionsOnly;\n                            }\n                        })\n                    );\n                }),\n                first(hasPermissions => {\n                        if (isFunction<RedirectToFn>(permissions.redirectTo)) {\n                            return hasPermissions.some(hasPermission => hasPermission === true);\n                        }\n\n                        return hasPermissions.every(hasPermission => hasPermission === false);\n                    },\n                    false),\n                mergeMap(\n                    (pass: boolean): Observable<boolean> => {\n                        if (isFunction<RedirectToFn>(permissions.redirectTo)) {\n                            if (pass) {\n                                return of(true);\n                            } else {\n                                this.handleRedirectOfFailedPermission(permissions, failedPermission, route, state);\n                                return of(false);\n                            }\n                        } else {\n                            if (!!failedPermission) {\n                                this.handleRedirectOfFailedPermission(permissions, failedPermission, route, state);\n                            }\n                            return of(!pass);\n                        }\n                    }\n                )\n            )\n            .toPromise();\n    }\n\n    private handleRedirectOfFailedPermission(\n        permissions: NgxPermissionsData,\n        failedPermission: string,\n        route: ActivatedRouteSnapshot | Route,\n        state?: RouterStateSnapshot\n    ) {\n        if (this.isFailedPermissionPropertyOfRedirectTo(permissions, failedPermission)) {\n            this.redirectToAnotherRoute(permissions.redirectTo[failedPermission], route, state, failedPermission);\n        } else {\n            if (isFunction<RedirectToFn>(permissions.redirectTo)) {\n                this.redirectToAnotherRoute(permissions.redirectTo, route, state, failedPermission);\n            } else {\n                this.redirectToAnotherRoute(permissions.redirectTo[DEFAULT_REDIRECT_KEY], route, state, failedPermission);\n            }\n        }\n    }\n\n    private isFailedPermissionPropertyOfRedirectTo(permissions: NgxPermissionsData, failedPermission: string): boolean {\n        return (!!permissions.redirectTo && permissions.redirectTo[failedPermission]);\n    }\n\n    private checkOnlyPermissions(\n        purePermissions: NgxPermissionsData,\n        route: ActivatedRouteSnapshot | Route,\n        state?: RouterStateSnapshot\n    ): Promise<boolean> {\n        const permissions: NgxPermissionsData = {\n            ...purePermissions\n        };\n\n        return Promise.all([\n            this.permissionsService.hasPermission(permissions.only),\n            this.rolesService.hasOnlyRoles(permissions.only)\n        ]).then(([hasPermission, hasRole]) => {\n            if (hasPermission || hasRole) {\n                return true;\n            }\n\n            if (permissions.redirectTo) {\n                this.redirectToAnotherRoute(permissions.redirectTo, route, state);\n            }\n\n            return false;\n        });\n    }\n\n    private passingOnlyPermissionsValidation(\n        permissions: NgxPermissionsData,\n        route: ActivatedRouteSnapshot | Route,\n        state?: RouterStateSnapshot\n    ): Promise<boolean> {\n        if (\n            (isFunction<RedirectToFn>(permissions.redirectTo)\n                || isPlainObject(permissions.redirectTo) && !this.isRedirectionWithParameters(permissions.redirectTo))\n        ) {\n            return this.onlyRedirectCheck(permissions, route, state);\n        }\n        return this.checkOnlyPermissions(permissions, route, state);\n    }\n}\n","import { Directive, EventEmitter, inject, Input, OnInit, Output, TemplateRef, ViewContainerRef } from '@angular/core';\nimport { StrategyFunction } from '../service/configuration.service';\n\n@Directive({\n    standalone: true,\n    selector: '[ngxPermissionsOnly],[ngxPermissionsExcept]',\n})\nexport class NgxPermissionsAllowStubDirective implements OnInit {\n    @Input() ngxPermissionsOnly: string | string[];\n    @Input() ngxPermissionsOnlyThen: TemplateRef<any>;\n    @Input() ngxPermissionsOnlyElse: TemplateRef<any>;\n\n    @Input() ngxPermissionsExcept: string | string[];\n    @Input() ngxPermissionsExceptElse: TemplateRef<any>;\n    @Input() ngxPermissionsExceptThen: TemplateRef<any>;\n\n    @Input() ngxPermissionsThen: TemplateRef<any>;\n    @Input() ngxPermissionsElse: TemplateRef<any>;\n\n    @Input() ngxPermissionsOnlyAuthorisedStrategy: string | StrategyFunction;\n    @Input() ngxPermissionsOnlyUnauthorisedStrategy: string | StrategyFunction;\n\n    @Input() ngxPermissionsExceptUnauthorisedStrategy:\n        | string\n        | StrategyFunction;\n    @Input() ngxPermissionsExceptAuthorisedStrategy: string | StrategyFunction;\n\n    @Input() ngxPermissionsUnauthorisedStrategy: string | StrategyFunction;\n    @Input() ngxPermissionsAuthorisedStrategy: string | StrategyFunction;\n\n    @Output() permissionsAuthorized = new EventEmitter();\n    @Output() permissionsUnauthorized = new EventEmitter();\n\n    private viewContainer = inject(ViewContainerRef);\n    private templateRef = inject(TemplateRef<any>);\n\n    ngOnInit(): void {\n        this.viewContainer.clear();\n        this.viewContainer.createEmbeddedView(this.getAuthorizedTemplate());\n        this.permissionsAuthorized.emit();\n    }\n\n    private getAuthorizedTemplate() {\n        return (\n            this.ngxPermissionsOnlyThen ||\n            this.ngxPermissionsExceptThen ||\n            this.ngxPermissionsThen ||\n            this.templateRef\n        );\n    }\n}\n","import { Directive, EventEmitter, inject, Input, OnInit, Output, TemplateRef, ViewContainerRef } from '@angular/core';\nimport { StrategyFunction } from '../service/configuration.service';\n\n@Directive({\n    standalone: true,\n    selector: '[ngxPermissionsOnly],[ngxPermissionsExcept]',\n})\nexport class NgxPermissionsRestrictStubDirective implements OnInit {\n    @Input() ngxPermissionsOnly: string | string[];\n    @Input() ngxPermissionsOnlyThen: TemplateRef<any>;\n    @Input() ngxPermissionsOnlyElse: TemplateRef<any>;\n\n    @Input() ngxPermissionsExcept: string | string[];\n    @Input() ngxPermissionsExceptElse: TemplateRef<any>;\n    @Input() ngxPermissionsExceptThen: TemplateRef<any>;\n\n    @Input() ngxPermissionsThen: TemplateRef<any>;\n    @Input() ngxPermissionsElse: TemplateRef<any>;\n\n    @Input() ngxPermissionsOnlyAuthorisedStrategy: string | StrategyFunction;\n    @Input() ngxPermissionsOnlyUnauthorisedStrategy: string | StrategyFunction;\n\n    @Input() ngxPermissionsExceptUnauthorisedStrategy:\n        | string\n        | StrategyFunction;\n    @Input() ngxPermissionsExceptAuthorisedStrategy: string | StrategyFunction;\n\n    @Input() ngxPermissionsUnauthorisedStrategy: string | StrategyFunction;\n    @Input() ngxPermissionsAuthorisedStrategy: string | StrategyFunction;\n\n    @Output() permissionsAuthorized = new EventEmitter();\n    @Output() permissionsUnauthorized = new EventEmitter();\n\n    private viewContainer = inject(ViewContainerRef);\n\n    ngOnInit(): void {\n        this.viewContainer.clear();\n        if (this.getUnAuthorizedTemplate()) {\n            this.viewContainer.createEmbeddedView(\n                this.getUnAuthorizedTemplate()\n            );\n        }\n        this.permissionsUnauthorized.emit();\n    }\n\n    private getUnAuthorizedTemplate() {\n        return (\n            this.ngxPermissionsOnlyElse ||\n            this.ngxPermissionsExceptElse ||\n            this.ngxPermissionsElse\n        );\n    }\n}\n","import { NgModule, ModuleWithProviders } from '@angular/core';\nimport { NgxPermissionsDirective } from './directive/permissions.directive';\nimport { NgxPermissionsService, USE_PERMISSIONS_STORE } from './service/permissions.service';\nimport { NgxPermissionsGuard } from './router/permissions-guard.service';\nimport { NgxRolesService, USE_ROLES_STORE } from './service/roles.service';\nimport { NgxPermissionsStore } from './store/permissions.store';\nimport { NgxRolesStore } from './store/roles.store';\nimport { NgxPermissionsAllowStubDirective } from './testing/permissions-allow.directive.stub';\nimport { NgxPermissionsRestrictStubDirective } from './testing/permissions-restrict.directive.stub';\nimport { NgxPermissionsConfigurationService, USE_CONFIGURATION_STORE } from './service/configuration.service';\nimport { NgxPermissionsConfigurationStore } from './store/configuration.store';\n\nexport * from './store/roles.store';\nexport * from './store/permissions.store';\nexport * from './store/configuration.store';\n\nexport * from './directive/permissions.directive';\n\nexport * from './service/permissions.service';\nexport * from './service/roles.service';\nexport * from './service/configuration.service';\n\nexport * from './router/permissions-guard.service';\n\nexport * from './model/permissions-router-data.model';\nexport * from './model/role.model';\n\nexport * from './testing/permissions-allow.directive.stub';\nexport * from './testing/permissions-restrict.directive.stub';\n\nexport * from './enums/predefined-strategies.enum';\n\nexport interface NgxPermissionsModuleConfig {\n    // isolate the service instance, only works for lazy loaded modules or components with the \"providers\" property\n    rolesIsolate?: boolean;\n    permissionsIsolate?: boolean;\n    configurationIsolate?: boolean;\n}\n\n\n@NgModule({\n    imports: [],\n    declarations: [\n        NgxPermissionsDirective\n    ],\n    exports: [\n        NgxPermissionsDirective\n    ]\n})\nexport class NgxPermissionsModule {\n    static forRoot(config: NgxPermissionsModuleConfig = {}): ModuleWithProviders<NgxPermissionsModule> {\n        return {\n            ngModule: NgxPermissionsModule,\n            providers: [\n                NgxPermissionsStore,\n                NgxRolesStore,\n                NgxPermissionsConfigurationStore,\n                NgxPermissionsService,\n                NgxPermissionsGuard,\n                NgxRolesService,\n                NgxPermissionsConfigurationService,\n                {provide: USE_PERMISSIONS_STORE, useValue: config.permissionsIsolate},\n                {provide: USE_ROLES_STORE, useValue: config.rolesIsolate},\n                {provide: USE_CONFIGURATION_STORE, useValue: config.configurationIsolate},\n            ]\n        };\n    }\n\n    static forChild(config: NgxPermissionsModuleConfig = {}): ModuleWithProviders<NgxPermissionsModule> {\n        return {\n            ngModule: NgxPermissionsModule,\n            providers: [\n                {provide: USE_PERMISSIONS_STORE, useValue: config.permissionsIsolate},\n                {provide: USE_ROLES_STORE, useValue: config.rolesIsolate},\n                {provide: USE_CONFIGURATION_STORE, useValue: config.configurationIsolate},\n                NgxPermissionsConfigurationService,\n                NgxPermissionsService,\n                NgxRolesService,\n                NgxPermissionsGuard\n            ]\n        };\n    }\n}\n\n@NgModule({\n    imports: [NgxPermissionsAllowStubDirective],\n    declarations: [],\n    exports: [\n        NgxPermissionsAllowStubDirective\n    ]\n})\nexport class NgxPermissionsAllowStubModule {\n}\n\n\n@NgModule({\n    imports: [NgxPermissionsRestrictStubDirective],\n    declarations: [],\n    exports: [\n        NgxPermissionsRestrictStubDirective\n    ]\n})\nexport class NgxPermissionsRestrictStubModule {\n}\n\n\n","/*\n * Public API Surface of ngx-permissions\n */\n\nexport * from './lib/index';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1.NgxPermissionsConfigurationStore","i1.NgxPermissionsStore","i1.NgxRolesStore","i2.NgxPermissionsService","i1.NgxPermissionsService","i2.NgxRolesService"],"mappings":";;;;;;;AAAa,MAAA,kCAAkC,GAAG;AAC9C,IAAA,MAAM,EAAE,QAAQ;AAChB,IAAA,IAAI,EAAE;;;MCGG,gCAAgC,CAAA;AAD7C,IAAA,WAAA,GAAA;AAGW,QAAA,IAAA,CAAA,gBAAgB,GAA8B,IAAI,eAAe,CAAW,EAAE,CAAC;AAC/E,QAAA,IAAA,CAAA,WAAW,GAAyB,IAAI,CAAC,gBAAgB,CAAC,YAAY,EAAE;AAKlF;8GARY,gCAAgC,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;kHAAhC,gCAAgC,EAAA,CAAA,CAAA;;2FAAhC,gCAAgC,EAAA,UAAA,EAAA,CAAA;kBAD5C;;;MCOY,uBAAuB,GAAG,IAAI,cAAc,CAAC,yBAAyB;MAGtE,kCAAkC,CAAA;IAO3C,WAC6C,CAAA,OAAA,GAAmB,KAAK,EACzD,kBAAoD,EAAA;QADnB,IAAO,CAAA,OAAA,GAAP,OAAO;QACxC,IAAkB,CAAA,kBAAA,GAAlB,kBAAkB;QAE1B,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,OAAO,GAAG,IAAI,eAAe,CAAW,EAAE,CAAC,GAAG,IAAI,CAAC,kBAAkB,CAAC,gBAAgB;QACnH,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,gBAAgB,CAAC,YAAY,EAAE;AAEvD,QAAA,IAAI,CAAC,2BAA2B,GAAG,IAAI,CAAC,OAAO,GAAG,SAAS,GAAG,IAAI,CAAC,kBAAkB,CAAC,2BAA2B;AACjH,QAAA,IAAI,CAAC,6BAA6B,GAAG,IAAI,CAAC,OAAO,GAAG,SAAS,GAAG,IAAI,CAAC,kBAAkB,CAAC,6BAA6B;;AAIlH,IAAA,8BAA8B,CAAC,IAAgC,EAAA;AAClE,QAAA,IAAI,IAAI,CAAC,OAAO,EAAE;YACd,IAAI,CAAC,2BAA2B,GAAG,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC;;aAC7D;YACH,IAAI,CAAC,kBAAkB,CAAC,2BAA2B,GAAG,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC;YACnF,IAAI,CAAC,2BAA2B,GAAG,IAAI,CAAC,kBAAkB,CAAC,2BAA2B;;;AAIvF,IAAA,gCAAgC,CAAC,IAAgC,EAAA;AACpE,QAAA,IAAI,IAAI,CAAC,OAAO,EAAE;YACd,IAAI,CAAC,6BAA6B,GAAG,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC;;aAC/D;YACH,IAAI,CAAC,kBAAkB,CAAC,6BAA6B,GAAG,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC;YACrF,IAAI,CAAC,6BAA6B,GAAG,IAAI,CAAC,kBAAkB,CAAC,6BAA6B;;;IAI3F,qBAAqB,CAAC,GAAW,EAAE,IAAsB,EAAA;QAC5D,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,IAAI;;AAGpC,IAAA,WAAW,CAAC,GAAW,EAAA;QAC1B,OAAO,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC,GAAG,CAAC;;IAGpC,gBAAgB,GAAA;AACnB,QAAA,OAAO,IAAI,CAAC,gBAAgB,CAAC,KAAK;;AAG9B,IAAA,kBAAkB,CAAC,IAAgC,EAAA;AACvD,QAAA,IAAI,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,EAAE;AACtE,YAAA,OAAO,IAAI;;aACR;AACH,YAAA,MAAM,IAAI,KAAK,CAAC,QAAQ,IAAI,CAAA,sCAAA,CAAwC,CAAC;;;AAIrE,IAAA,oBAAoB,CAAC,QAAgB,EAAA;QACzC,OAAO,QAAQ,KAAK,kCAAkC,CAAC,IAAI,IAAI,QAAQ,KAAK,kCAAkC,CAAC,MAAM;;AA1DhH,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,kBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,kCAAkC,kBAQ/B,uBAAuB,EAAA,EAAA,EAAA,KAAA,EAAAA,gCAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;kHAR1B,kCAAkC,EAAA,CAAA,CAAA;;2FAAlC,kCAAkC,EAAA,UAAA,EAAA,CAAA;kBAD9C;;0BASQ,MAAM;2BAAC,uBAAuB;;;ACtBjC,SAAU,UAAU,CAAI,KAAU,EAAA;AACpC,IAAA,OAAO,OAAO,KAAK,KAAK,UAAU;AACtC;AAEM,SAAU,aAAa,CAAC,KAAU,EAAA;AACpC,IAAA,IAAI,MAAM,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,iBAAiB,EAAE;AAC7D,QAAA,OAAO,KAAK;;SACT;QACH,MAAM,SAAS,GAAG,MAAM,CAAC,cAAc,CAAC,KAAK,CAAC;QAC9C,OAAO,SAAS,KAAK,IAAI,IAAI,SAAS,KAAK,MAAM,CAAC,SAAS;;AAEnE;AAEM,SAAU,QAAQ,CAAC,KAAU,EAAA;IAC/B,OAAO,CAAC,CAAC,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ;AAC/C;AAEM,SAAU,SAAS,CAAC,KAAU,EAAA;AAChC,IAAA,OAAO,OAAO,KAAK,KAAK,SAAS;AACrC;AAEM,SAAU,SAAS,CAAC,OAAY,EAAA;AAClC,IAAA,OAAO,MAAM,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,kBAAkB;AACzE;AAEM,SAAU,aAAa,CAAC,KAAwB,EAAA;AAClD,IAAA,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;AACtB,QAAA,OAAO,KAAK,CAAC,MAAM,GAAG,CAAC;;IAE3B,OAAO,CAAC,CAAC,KAAK;AAClB;AAEM,SAAU,sBAAsB,CAAC,KAAwB,EAAA;AAC3D,IAAA,IAAI,QAAQ,CAAC,KAAK,CAAC,EAAE;QACjB,OAAO,CAAC,KAAK,CAAC;;AAElB,IAAA,OAAO,KAAK;AAChB;;MCjCa,mBAAmB,CAAA;AADhC,IAAA,WAAA,GAAA;AAGW,QAAA,IAAA,CAAA,iBAAiB,GAAG,IAAI,eAAe,CAAK,EAAE,CAAC;AAC/C,QAAA,IAAA,CAAA,YAAY,GAAmB,IAAI,CAAC,iBAAiB,CAAC,YAAY,EAAE;AAE9E;8GALY,mBAAmB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;kHAAnB,mBAAmB,EAAA,CAAA,CAAA;;2FAAnB,mBAAmB,EAAA,UAAA,EAAA,CAAA;kBAD/B;;;MCYY,qBAAqB,GAAG,IAAI,cAAc,CAAC,uBAAuB;MAGlE,qBAAqB,CAAA;IAK9B,WAC2C,CAAA,OAAA,GAAmB,KAAK,EACvD,gBAAqC,EAAA;QADN,IAAO,CAAA,OAAA,GAAP,OAAO;QACtC,IAAgB,CAAA,gBAAA,GAAhB,gBAAgB;QAExB,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC,OAAO,GAAG,IAAI,eAAe,CAAuB,EAAE,CAAC,GAAG,IAAI,CAAC,gBAAgB,CAAC,iBAAiB;QAC/H,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,iBAAiB,CAAC,YAAY,EAAE;;AAG7D;;AAEG;IACI,gBAAgB,GAAA;AACnB,QAAA,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,EAAE,CAAC;;AAG5B,IAAA,aAAa,CAAC,UAA6B,EAAA;AAC9C,QAAA,IAAI,CAAC,UAAU,KAAK,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC,CAAC,EAAE;AACvE,YAAA,OAAO,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC;;AAGhC,QAAA,UAAU,GAAG,sBAAsB,CAAC,UAAU,CAAC;AAC/C,QAAA,OAAO,IAAI,CAAC,kBAAkB,CAAC,UAAU,CAAC;;IAGvC,eAAe,CAAC,WAAqB,EAAE,kBAAiC,EAAA;QAC3E,MAAM,cAAc,GAAG,WAAW,CAAC,MAAM,CACrC,CAAC,MAAM,EAAE,IAAI,KAAK,IAAI,CAAC,gBAAgB,CAAC,MAAM,EAAE,IAAI,EAAE,kBAAkB,CAAC,EAAE,EAAE,CAChF;AACD,QAAA,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,cAAc,CAAC;;IAGxC,aAAa,CAAC,UAA6B,EAAE,kBAAiC,EAAA;AACjF,QAAA,IAAI,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE;AAC3B,YAAA,MAAM,WAAW,GAAG,UAAU,CAAC,MAAM,CACjC,CAAC,MAAM,EAAE,IAAI,KAAK,IAAI,CAAC,gBAAgB,CAAC,MAAM,EAAE,IAAI,EAAE,kBAAkB,CAAC,EAAE,IAAI,CAAC,iBAAiB,CAAC,KAAK,CAC1G;AAED,YAAA,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,WAAW,CAAC;;aACrC;AACH,YAAA,MAAM,WAAW,GAAG,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,iBAAiB,CAAC,KAAK,EAAE,UAAU,EAAE,kBAAkB,CAAC;AAEvG,YAAA,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,WAAW,CAAC;;;AAIzC,IAAA,gBAAgB,CAAC,cAAsB,EAAA;AAC1C,QAAA,MAAM,WAAW,GAAG;AAChB,YAAA,GAAG,IAAI,CAAC,iBAAiB,CAAC;SAC7B;AACD,QAAA,OAAO,WAAW,CAAC,cAAc,CAAC;AAClC,QAAA,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,WAAW,CAAC;;AAGrC,IAAA,aAAa,CAAC,IAAY,EAAA;QAC7B,OAAO,IAAI,CAAC,iBAAiB,CAAC,KAAK,CAAC,IAAI,CAAC;;IAGtC,cAAc,GAAA;AACjB,QAAA,OAAO,IAAI,CAAC,iBAAiB,CAAC,KAAK;;AAG/B,IAAA,gBAAgB,CAAC,MAA4B,EAAE,IAAY,EAAE,kBAAiC,EAAA;QAClG,IAAI,CAAC,CAAC,kBAAkB,IAAI,UAAU,CAAC,kBAAkB,CAAC,EAAE;YACxD,OAAO;AACH,gBAAA,GAAG,MAAM;AACT,gBAAA,CAAC,IAAI,GAAG,EAAC,IAAI,EAAE,kBAAkB;aACpC;;QAEL,OAAO;AACH,YAAA,GAAG,MAAM;AACT,YAAA,CAAC,IAAI,GAAG,EAAC,IAAI;SAChB;;AAGG,IAAA,kBAAkB,CAAC,WAAqB,EAAA;QAC5C,MAAM,QAAQ,GAA0B,WAAW,CAAC,GAAG,CAAC,GAAG,IAAG;AAC1D,YAAA,IAAI,IAAI,CAAC,+BAA+B,CAAC,GAAG,CAAC,EAAE;AAC3C,gBAAA,MAAM,kBAAkB,GAAG,IAAI,CAAC,iBAAiB,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,kBAAkB;gBAC/E,MAAM,cAAc,GAAG,EAAC,GAAG,IAAI,CAAC,iBAAiB,CAAC,KAAK,EAAC;AAExD,gBAAA,OAAO,EAAE,CAAC,IAAI,CAAC,CAAC,IAAI,CAChB,GAAG,CAAC,MAAM,kBAAkB,CAAC,GAAG,EAAE,cAAc,CAAC,CAAC,EAClD,SAAS,CAAC,CAAC,OAAmC,KAA+B,SAAS,CAAC,OAAO,CAAC;oBAC3F,EAAE,CAAC,OAAkB,CAAC,GAAG,OAA2B,CAAC,EACzD,UAAU,CAAC,MAAM,EAAE,CAAC,KAAK,CAAC,CAAC,CAC9B;;;AAIL,YAAA,OAAO,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,iBAAiB,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;AAClD,SAAC,CAAC;QAEF,OAAO,IAAI,CAAC,QAAQ,CAAC,CAAC,IAAI,CACtB,QAAQ,EAAE,EACV,KAAK,CAAC,CAAC,IAAI,KAAK,IAAI,KAAK,KAAK,EAAE,KAAK,CAAC,EACtC,GAAG,CAAC,CAAC,IAAI,KAAK,IAAI,KAAK,KAAK,CAAC,CAChC,CAAC,SAAS,EAAE,CAAC,IAAI,CAAC,CAAC,IAAS,KAAK,IAAI,CAAC;;AAGnC,IAAA,+BAA+B,CAAC,GAAW,EAAA;QAC/C,OAAO,CAAC,CAAC,IAAI,CAAC,iBAAiB,CAAC,KAAK,CAAC,GAAG,CAAC;YACtC,CAAC,CAAC,IAAI,CAAC,iBAAiB,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,kBAAkB;AACtD,YAAA,UAAU,CAAC,IAAI,CAAC,iBAAiB,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,kBAAkB,CAAC;;AA3G/D,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,kBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,qBAAqB,kBAMlB,qBAAqB,EAAA,EAAA,EAAA,KAAA,EAAAC,mBAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;kHANxB,qBAAqB,EAAA,CAAA,CAAA;;2FAArB,qBAAqB,EAAA,UAAA,EAAA,CAAA;kBADjC;;0BAOQ,MAAM;2BAAC,qBAAqB;;;MCtBxB,aAAa,CAAA;AAA1B,IAAA,WAAA,GAAA;AAEW,QAAA,IAAA,CAAA,WAAW,GAAG,IAAI,eAAe,CAAK,EAAE,CAAC;AAEzC,QAAA,IAAA,CAAA,MAAM,GAAmB,IAAI,CAAC,WAAW,CAAC,YAAY,EAAE;;AAElE;;MCGY,eAAe,GAAG,IAAI,cAAc,CAAC,iBAAiB;MAOtD,eAAe,CAAA;AAMxB,IAAA,WAAA,CACqC,OAAmB,GAAA,KAAK,EACjD,UAAyB,EACzB,kBAAyC,EAAA;QAFhB,IAAO,CAAA,OAAA,GAAP,OAAO;QAChC,IAAU,CAAA,UAAA,GAAV,UAAU;QACV,IAAkB,CAAA,kBAAA,GAAlB,kBAAkB;QAE1B,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,OAAO,GAAG,IAAI,eAAe,CAAiB,EAAE,CAAC,GAAG,IAAI,CAAC,UAAU,CAAC,WAAW;QACvG,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,WAAW,CAAC,YAAY,EAAE;;IAG1C,OAAO,CAAC,IAAY,EAAE,kBAA2C,EAAA;AACpE,QAAA,MAAM,KAAK,GAAG;AACV,YAAA,GAAG,IAAI,CAAC,WAAW,CAAC,KAAK;AACzB,YAAA,CAAC,IAAI,GAAG,EAAC,IAAI,EAAE,kBAAkB;SACpC;AACD,QAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC;;IAGzB,sBAAsB,CAAC,IAAY,EAAE,WAAqB,EAAA;AAC7D,QAAA,IAAI,CAAC,kBAAkB,CAAC,aAAa,CAAC,WAAW,CAAC;AAClD,QAAA,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,WAAW,CAAC;;AAG5B,IAAA,QAAQ,CAAC,QAAqD,EAAA;AACjE,QAAA,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,KAAK,KAAI;YACzC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,QAAQ,CAAC,GAAG,CAAC,CAAC;AACpC,SAAC,CAAC;;AAGC,IAAA,uBAAuB,CAAC,QAAsC,EAAA;AACjE,QAAA,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,KAAK,KAAI;YACzC,IAAI,CAAC,sBAAsB,CAAC,GAAG,EAAE,QAAQ,CAAC,GAAG,CAAC,CAAC;AACnD,SAAC,CAAC;;IAGC,UAAU,GAAA;AACb,QAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,EAAE,CAAC;;IAGtB,wBAAwB,GAAA;QAC3B,IAAI,CAAC,UAAU,EAAE;AACjB,QAAA,IAAI,CAAC,kBAAkB,CAAC,gBAAgB,EAAE;;AAGvC,IAAA,UAAU,CAAC,QAAgB,EAAA;AAC9B,QAAA,MAAM,KAAK,GAAG;AACV,YAAA,GAAG,IAAI,CAAC,WAAW,CAAC;SACvB;AACD,QAAA,OAAO,KAAK,CAAC,QAAQ,CAAC;AACtB,QAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC;;IAGzB,QAAQ,GAAA;AACX,QAAA,OAAO,IAAI,CAAC,WAAW,CAAC,KAAK;;AAG1B,IAAA,OAAO,CAAC,IAAY,EAAA;QACvB,OAAO,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,IAAI,CAAC;;AAGhC,IAAA,YAAY,CAAC,KAAwB,EAAA;AACxC,QAAA,MAAM,YAAY,GAAG,CAAC,KAAK,KAAK,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,CAAC;QAE3E,IAAI,YAAY,EAAE;AACd,YAAA,OAAO,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC;;AAGhC,QAAA,KAAK,GAAG,sBAAsB,CAAC,KAAK,CAAC;QAErC,OAAO,OAAO,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,EAAE,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;aAC7F,IAAI,CAAC,CAAC,CAAC,QAAQ,EAAE,cAAc,CAAqB,KAAI;YACrD,OAAO,QAAQ,IAAI,cAAc;AACrC,SAAC,CAAC;;AAGF,IAAA,UAAU,CAAC,QAAkB,EAAA;QACjC,MAAM,QAAQ,GAA0B,QAAQ,CAAC,GAAG,CAAC,CAAC,GAAG,KAAI;YACzD,MAAM,qBAAqB,GAAG,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,GAAG,CAAC;gBAC7B,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,kBAAkB;AAChD,gBAAA,UAAU,CAAC,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,kBAAkB,CAAC;AAExF,YAAA,IAAI,qBAAqB,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,kBAAkB,CAAC,EAAE;AACrF,gBAAA,MAAM,kBAAkB,GAAG,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,kBAAkC;gBACzF,MAAM,cAAc,GAAG,EAAC,GAAG,IAAI,CAAC,WAAW,CAAC,KAAK,EAAC;AAElD,gBAAA,OAAO,EAAE,CAAC,IAAI,CAAC,CAAC,IAAI,CAChB,GAAG,CAAC,MAAM,kBAAkB,CAAC,GAAG,EAAE,cAAc,CAAC,CAAC,EAClD,SAAS,CAAC,CAAC,OAAmC,KAA+B,SAAS,CAAC,OAAO,CAAC;oBAC3F,EAAE,CAAC,OAAkB,CAAC,GAAG,OAA2B,CAAC,EACzD,UAAU,CAAC,MAAM,EAAE,CAAC,KAAK,CAAC,CAAC,CAC9B;;AAGL,YAAA,OAAO,EAAE,CAAC,KAAK,CAAC;AACpB,SAAC,CAAC;QAEF,OAAO,IAAI,CAAC,QAAQ,CAAC,CAAC,IAAI,CACtB,QAAQ,EAAE,EACV,KAAK,CAAC,CAAC,IAAS,KAAK,IAAI,KAAK,KAAK,EAAE,KAAK,CAAC,EAC3C,GAAG,CAAC,CAAC,IAAI,KAAK,IAAI,KAAK,KAAK,CAAC,CAChC,CAAC,SAAS,EAAE,CAAC,IAAI,CAAC,CAAC,IAAS,KAAK,IAAI,CAAC;;IAGnC,iBAAiB,CAAC,KAAqB,EAAE,SAAmB,EAAA;AAChE,QAAA,OAAO,IAAI,CAAC,SAAS,CAAC,CAAC,IAAI,CACvB,QAAQ,CAAC,CAAC,GAAG,KAAI;AACb,YAAA,IAAI,KAAK,CAAC,GAAG,CAAC,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,kBAAkB,CAAC,EAAE;AAC5D,gBAAA,OAAO,IAAI,CAAW,KAAK,CAAC,GAAG,CAAC,CAAC,kBAAkB,CAAC,CAAC,IAAI,CACrD,QAAQ,CAAC,CAAC,UAAU,KAAK,IAAI,CAAC,kBAAkB,CAAC,aAAa,CAAC,UAAU,CAAC,CAAC,EAC3E,KAAK,CAAC,aAAa,IAAI,aAAa,KAAK,IAAI,CAAC,CACjD;;AAGL,YAAA,OAAO,EAAE,CAAC,KAAK,CAAC;AACpB,SAAC,CAAC,EACF,KAAK,CAAC,aAAa,IAAI,aAAa,KAAK,IAAI,EAAE,KAAK,CAAC,CACxD,CAAC,SAAS,EAAE;;AAzHR,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,kBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,eAAe,kBAOZ,eAAe,EAAA,EAAA,EAAA,KAAA,EAAAC,aAAA,EAAA,EAAA,EAAA,KAAA,EAAAC,qBAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;kHAPlB,eAAe,EAAA,CAAA,CAAA;;2FAAf,eAAe,EAAA,UAAA,EAAA,CAAA;kBAD3B;;0BAQQ,MAAM;2BAAC,eAAe;;;MCGlB,uBAAuB,CAAA;AAJpC,IAAA,WAAA,GAAA;AA0Bc,QAAA,IAAA,CAAA,qBAAqB,GAAG,IAAI,YAAY,EAAE;AAC1C,QAAA,IAAA,CAAA,uBAAuB,GAAG,IAAI,YAAY,EAAE;;QAI9C,IAAmB,CAAA,mBAAA,GAAG,CAAC;AAGd,QAAA,IAAA,CAAA,kBAAkB,GAAG,MAAM,CAAC,qBAAqB,CAAC;AAClD,QAAA,IAAA,CAAA,oBAAoB,GAAG,MAAM,CAAC,kCAAkC,CAAC;AACjE,QAAA,IAAA,CAAA,YAAY,GAAG,MAAM,CAAC,eAAe,CAAC;AACtC,QAAA,IAAA,CAAA,aAAa,GAAG,MAAM,CAAC,gBAAgB,CAAC;AACxC,QAAA,IAAA,CAAA,cAAc,GAAG,MAAM,CAAC,iBAAiB,CAAC;AAC1C,QAAA,IAAA,CAAA,WAAW,GAAG,MAAM,EAAC,WAAgB,EAAC;AAgN1D;IA9MG,QAAQ,GAAA;AACJ,QAAA,IAAI,CAAC,aAAa,CAAC,KAAK,EAAE;AAC1B,QAAA,IAAI,CAAC,0BAA0B,GAAG,IAAI,CAAC,6BAA6B,EAAE;;AAI1E,IAAA,WAAW,CAAC,OAAsB,EAAA;AAC9B,QAAA,MAAM,WAAW,GAAG,OAAO,CAAC,oBAAoB,CAAC;AACjD,QAAA,MAAM,aAAa,GAAG,OAAO,CAAC,sBAAsB,CAAC;AACrD,QAAA,IAAI,WAAW,IAAI,aAAa,EAAE;;AAE9B,YAAA,IAAI,WAAW,IAAI,WAAW,CAAC,WAAW,EAAE;gBACxC;;AAEJ,YAAA,IAAI,aAAa,IAAI,aAAa,CAAC,WAAW,EAAE;gBAC5C;;AAGJ,YAAA,KAAK,CAAC,IAAI,CAAC,kBAAkB,CAAC,YAAY,EAAE,IAAI,CAAC,YAAY,CAAC,MAAM;AAC/D,iBAAA,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,mBAAmB,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC;iBAC5C,SAAS,CAAC,MAAK;AACZ,gBAAA,IAAI,aAAa,CAAC,IAAI,CAAC,oBAAoB,CAAC,EAAE;oBAC1C,IAAI,CAAC,gCAAgC,EAAE;oBACvC;;AAGJ,gBAAA,IAAI,aAAa,CAAC,IAAI,CAAC,kBAAkB,CAAC,EAAE;oBACxC,IAAI,CAAC,uBAAuB,EAAE;oBAC9B;;gBAGJ,IAAI,CAAC,0BAA0B,CAAC,IAAI,CAAC,sBAAsB,EAAE,CAAC;AAClE,aAAC,CAAC;;;IAId,WAAW,GAAA;AACP,QAAA,IAAI,IAAI,CAAC,0BAA0B,EAAE;AACjC,YAAA,IAAI,CAAC,0BAA0B,CAAC,WAAW,EAAE;;;IAI7C,6BAA6B,GAAA;AACjC,QAAA,OAAO,KAAK,CAAC,IAAI,CAAC,kBAAkB,CAAC,YAAY,EAAE,IAAI,CAAC,YAAY,CAAC,MAAM;AACtE,aAAA,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,mBAAmB,CAAC;aACnC,SAAS,CAAC,MAAK;AACZ,YAAA,IAAI,aAAa,CAAC,IAAI,CAAC,oBAAoB,CAAC,EAAE;gBAC1C,IAAI,CAAC,gCAAgC,EAAE;gBACvC;;AAGJ,YAAA,IAAI,aAAa,CAAC,IAAI,CAAC,kBAAkB,CAAC,EAAE;gBACxC,IAAI,CAAC,uBAAuB,EAAE;gBAC9B;;YAEJ,IAAI,CAAC,0BAA0B,CAAC,IAAI,CAAC,sBAAsB,EAAE,CAAC;AAClE,SAAC,CAAC;;IAGF,gCAAgC,GAAA;QACpC;AACK,aAAA,GAAG,CAAC;YACD,IAAI,CAAC,kBAAkB,CAAC,aAAa,CAAC,IAAI,CAAC,oBAAoB,CAAC;YAChE,IAAI,CAAC,YAAY,CAAC,YAAY,CAAC,IAAI,CAAC,oBAAoB;SAC3D;aACA,IAAI,CAAC,CAAC,CAAC,aAAa,EAAE,OAAO,CAAC,KAAI;AAC/B,YAAA,IAAI,aAAa,IAAI,OAAO,EAAE;gBAC1B,IAAI,CAAC,4BAA4B,CAAC,IAAI,CAAC,wBAAwB,IAAI,IAAI,CAAC,kBAAkB,CAAC;gBAC3F;;AAGJ,YAAA,IAAI,CAAC,CAAC,IAAI,CAAC,kBAAkB,EAAE;AAC3B,gBAAA,MAAM,KAAK;;AAGf,YAAA,IAAI,CAAC,0BAA0B,CAAC,IAAI,CAAC,wBAAwB,IAAI,IAAI,CAAC,kBAAkB,IAAI,IAAI,CAAC,WAAW,CAAC;AACjH,SAAC;aACA,KAAK,CAAC,MAAK;AACR,YAAA,IAAI,CAAC,CAAC,IAAI,CAAC,kBAAkB,EAAE;gBAC3B,IAAI,CAAC,uBAAuB,EAAE;;iBAC3B;AACH,gBAAA,IAAI,CAAC,0BAA0B,CAAC,IAAI,CAAC,wBAAwB,IAAI,IAAI,CAAC,kBAAkB,IAAI,IAAI,CAAC,WAAW,CAAC;;AAErH,SAAC,CAAC;;IAGF,uBAAuB,GAAA;QAC3B;aACK,GAAG,CAAC,CAAC,IAAI,CAAC,kBAAkB,CAAC,aAAa,CAAC,IAAI,CAAC,kBAAkB,CAAC,EAAE,IAAI,CAAC,YAAY,CAAC,YAAY,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC;aAC7H,IAAI,CAAC,CAAC,CAAC,cAAc,EAAE,QAAQ,CAAC,KAAI;AACjC,YAAA,IAAI,cAAc,IAAI,QAAQ,EAAE;AAC5B,gBAAA,IAAI,CAAC,0BAA0B,CAAC,IAAI,CAAC,sBAAsB,IAAI,IAAI,CAAC,kBAAkB,IAAI,IAAI,CAAC,WAAW,CAAC;;iBACxG;gBACH,IAAI,CAAC,4BAA4B,CAAC,IAAI,CAAC,sBAAsB,IAAI,IAAI,CAAC,kBAAkB,CAAC;;AAEjG,SAAC;aACA,KAAK,CAAC,MAAK;YACR,IAAI,CAAC,4BAA4B,CAAC,IAAI,CAAC,sBAAsB,IAAI,IAAI,CAAC,kBAAkB,CAAC;AAC7F,SAAC,CAAC;;AAGF,IAAA,4BAA4B,CAAC,QAA0B,EAAA;AAC3D,QAAA,IAAI,SAAS,CAAC,IAAI,CAAC,sBAAsB,CAAC,IAAI,CAAC,IAAI,CAAC,sBAAsB,EAAE;YACxE;;AAGJ,QAAA,IAAI,CAAC,sBAAsB,GAAG,KAAK;AACnC,QAAA,IAAI,CAAC,uBAAuB,CAAC,IAAI,EAAE;AAEnC,QAAA,IAAI,IAAI,CAAC,4BAA4B,EAAE,EAAE;YACrC,IAAI,CAAC,oCAAoC,CAAC,IAAI,CAAC,4BAA4B,EAAE,CAAC;YAC9E;;AAGJ,QAAA,IAAI,IAAI,CAAC,oBAAoB,CAAC,6BAA6B,IAAI,CAAC,IAAI,CAAC,gBAAgB,EAAE,EAAE;YACrF,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,oBAAoB,CAAC,6BAA6B,CAAC;;aACxE;AACH,YAAA,IAAI,CAAC,uBAAuB,CAAC,QAAQ,CAAC;;;AAKtC,IAAA,0BAA0B,CAAC,QAA0B,EAAA;QACzD,IAAI,SAAS,CAAC,IAAI,CAAC,sBAAsB,CAAC,IAAI,IAAI,CAAC,sBAAsB,EAAE;YACvE;;AAGJ,QAAA,IAAI,CAAC,sBAAsB,GAAG,IAAI;AAClC,QAAA,IAAI,CAAC,qBAAqB,CAAC,IAAI,EAAE;AAEjC,QAAA,IAAI,IAAI,CAAC,0BAA0B,EAAE,EAAE;YACnC,IAAI,CAAC,oCAAoC,CAAC,IAAI,CAAC,0BAA0B,EAAE,CAAC;YAC5E;;AAGJ,QAAA,IAAI,IAAI,CAAC,oBAAoB,CAAC,2BAA2B,IAAI,CAAC,IAAI,CAAC,gBAAgB,EAAE,EAAE;YACnF,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,oBAAoB,CAAC,2BAA2B,CAAC;;aACtE;AACH,YAAA,IAAI,CAAC,uBAAuB,CAAC,QAAQ,CAAC;;;AAItC,IAAA,oCAAoC,CAAC,QAAmC,EAAA;AAC5E,QAAA,IAAI,QAAQ,CAAC,QAAQ,CAAC,EAAE;AACpB,YAAA,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC;YAC5B;;AAGJ,QAAA,IAAI,UAAU,CAAC,QAAQ,CAAC,EAAE;AACtB,YAAA,IAAI,CAAC,uBAAuB,CAAC,IAAI,CAAC,WAAW,CAAC;AAC7C,YAAA,QAA6B,CAAC,IAAI,CAAC,WAAW,CAAC;YAChD;;;AAIA,IAAA,uBAAuB,CAAC,QAA0B,EAAA;AACtD,QAAA,IAAI,CAAC,aAAa,CAAC,KAAK,EAAE;QAC1B,IAAI,CAAC,QAAQ,EAAE;YACX;;AAGJ,QAAA,IAAI,CAAC,aAAa,CAAC,kBAAkB,CAAC,QAAQ,CAAC;AAC/C,QAAA,IAAI,CAAC,cAAc,CAAC,YAAY,EAAE;;IAG9B,sBAAsB,GAAA;QAC1B,OAAO,IAAI,CAAC;AACL,eAAA,IAAI,CAAC;AACL,eAAA,IAAI,CAAC;eACL,IAAI,CAAC,WAAW;;IAGnB,gBAAgB,GAAA;QACpB,OAAO,CAAC,CAAC,IAAI,CAAC,wBAAwB,IAAI,CAAC,CAAC,IAAI,CAAC,kBAAkB;;IAG/D,gBAAgB,GAAA;QACpB,OAAO,CAAC,CAAC,IAAI,CAAC,wBAAwB,IAAI,CAAC,CAAC,IAAI,CAAC,kBAAkB;;IAG/D,0BAA0B,GAAA;QAC9B,OAAO,IAAI,CAAC,oCAAoC;AAC5C,YAAA,IAAI,CAAC,sCAAsC;YAC3C,IAAI,CAAC,gCAAgC;;IAGrC,4BAA4B,GAAA;QAChC,OAAO,IAAI,CAAC,sCAAsC;AAC9C,YAAA,IAAI,CAAC,wCAAwC;YAC7C,IAAI,CAAC,kCAAkC;;AAGvC,IAAA,aAAa,CAAC,IAAY,EAAA;AAC9B,QAAA,IAAI,IAAI,KAAK,kCAAkC,CAAC,IAAI,EAAE;AAClD,YAAA,IAAI,CAAC,uBAAuB,CAAC,IAAI,CAAC,WAAW,CAAC;YAC9C;;AAGJ,QAAA,IAAI,IAAI,KAAK,kCAAkC,CAAC,MAAM,EAAE;AACpD,YAAA,IAAI,CAAC,aAAa,CAAC,KAAK,EAAE;YAC1B;;QAEJ,MAAM,QAAQ,GAAG,IAAI,CAAC,oBAAoB,CAAC,WAAW,CAAC,IAAI,CAAC;AAC5D,QAAA,IAAI,CAAC,uBAAuB,CAAC,IAAI,CAAC,WAAW,CAAC;AAC9C,QAAA,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC;;8GAjPrB,uBAAuB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;kGAAvB,uBAAuB,EAAA,YAAA,EAAA,KAAA,EAAA,QAAA,EAAA,6CAAA,EAAA,MAAA,EAAA,EAAA,kBAAA,EAAA,oBAAA,EAAA,sBAAA,EAAA,wBAAA,EAAA,sBAAA,EAAA,wBAAA,EAAA,oBAAA,EAAA,sBAAA,EAAA,wBAAA,EAAA,0BAAA,EAAA,wBAAA,EAAA,0BAAA,EAAA,kBAAA,EAAA,oBAAA,EAAA,kBAAA,EAAA,oBAAA,EAAA,oCAAA,EAAA,sCAAA,EAAA,sCAAA,EAAA,wCAAA,EAAA,wCAAA,EAAA,0CAAA,EAAA,sCAAA,EAAA,wCAAA,EAAA,kCAAA,EAAA,oCAAA,EAAA,gCAAA,EAAA,kCAAA,EAAA,EAAA,OAAA,EAAA,EAAA,qBAAA,EAAA,uBAAA,EAAA,uBAAA,EAAA,yBAAA,EAAA,EAAA,aAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA,CAAA;;2FAAvB,uBAAuB,EAAA,UAAA,EAAA,CAAA;kBAJnC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACP,oBAAA,QAAQ,EAAE,6CAA6C;AACvD,oBAAA,UAAU,EAAE;AACf,iBAAA;8BAGY,kBAAkB,EAAA,CAAA;sBAA1B;gBACQ,sBAAsB,EAAA,CAAA;sBAA9B;gBACQ,sBAAsB,EAAA,CAAA;sBAA9B;gBAEQ,oBAAoB,EAAA,CAAA;sBAA5B;gBACQ,wBAAwB,EAAA,CAAA;sBAAhC;gBACQ,wBAAwB,EAAA,CAAA;sBAAhC;gBAEQ,kBAAkB,EAAA,CAAA;sBAA1B;gBACQ,kBAAkB,EAAA,CAAA;sBAA1B;gBAEQ,oCAAoC,EAAA,CAAA;sBAA5C;gBACQ,sCAAsC,EAAA,CAAA;sBAA9C;gBAEQ,wCAAwC,EAAA,CAAA;sBAAhD;gBACQ,sCAAsC,EAAA,CAAA;sBAA9C;gBAEQ,kCAAkC,EAAA,CAAA;sBAA1C;gBACQ,gCAAgC,EAAA,CAAA;sBAAxC;gBAES,qBAAqB,EAAA,CAAA;sBAA9B;gBACS,uBAAuB,EAAA,CAAA;sBAAhC;;;ACxBE,MAAM,oBAAoB,GAAG;;MCUvB,mBAAmB,GAAoD,CAAC,KAAqC,EAAE,KAAyC,KAAI;AACrK,IAAA,MAAM,gBAAgB,GAAG,MAAM,CAAC,mBAAmB,CAAC;AACpD,IAAA,IAAI,KAAK,YAAY,mBAAmB,EAAE;QACtC,OAAO,gBAAgB,CAAC,cAAc,CAAC,KAAK,EAAE,KAAK,CAAC;;AAExD,IAAA,OAAO,gBAAgB,CAAC,cAAc,CAAC,KAAK,CAAC;AACjD;AAEA;;AAEG;MAEU,mBAAmB,CAAA;AAE5B,IAAA,WAAA,CAAoB,kBAAyC,EAAU,YAA6B,EAAU,MAAc,EAAA;QAAxG,IAAkB,CAAA,kBAAA,GAAlB,kBAAkB;QAAiC,IAAY,CAAA,YAAA,GAAZ,YAAY;QAA2B,IAAM,CAAA,MAAA,GAAN,MAAM;;IAGpH,WAAW,CAAC,KAA6B,EAAE,KAA0B,EAAA;QACjE,OAAO,IAAI,CAAC,cAAc,CAAC,KAAK,EAAE,KAAK,CAAC;;IAG5C,gBAAgB,CAAC,UAAkC,EAAE,KAA0B,EAAA;QAC3E,OAAO,IAAI,CAAC,cAAc,CAAC,UAAU,EAAE,KAAK,CAAC;;AAGjD,IAAA,OAAO,CAAC,KAAY,EAAA;AAChB,QAAA,OAAO,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC;;AAGrC,IAAA,QAAQ,CAAC,KAAY,EAAA;AACjB,QAAA,OAAO,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC;;IAGrC,cAAc,CAAC,KAAqC,EAAE,KAA2B,EAAA;QAC7E,MAAM,oBAAoB,GAAG,CAAC,CAAC,KAAK,IAAI,KAAK,CAAC,IAAI,GAAI,KAAK,CAAC,IAAI,CAAC,aAAa,CAA8B,GAAG,EAAE;AACjH,QAAA,MAAM,WAAW,GAAG,IAAI,CAAC,mBAAmB,CAAC,oBAAoB,EAAE,KAAK,EAAE,KAAK,CAAC;QAEhF,IAAI,IAAI,CAAC,oBAAoB,CAAC,WAAW,CAAC,MAAM,CAAC,EAAE;YAC/C,OAAO,IAAI,CAAC,kCAAkC,CAAC,WAAW,EAAE,KAAK,EAAE,KAAK,CAAC;;QAG7E,IAAI,IAAI,CAAC,oBAAoB,CAAC,WAAW,CAAC,IAAI,CAAC,EAAE;YAC7C,OAAO,IAAI,CAAC,gCAAgC,CAAC,WAAW,EAAE,KAAK,EAAE,KAAK,CAAC;;AAG3E,QAAA,OAAO,IAAI;;AAGP,IAAA,mBAAmB,CACvB,WAAqC,EACrC,KAAqC,EACrC,KAA2B,EAAA;AAE3B,QAAA,MAAM,IAAI,GAAG,UAAU,CAAS,WAAW,CAAC,IAAI;cAC1C,WAAW,CAAC,IAAI,CAAC,KAAK,EAAE,KAAK;AAC/B,cAAE,sBAAsB,CAAC,WAAW,CAAC,IAAI,CAAC;AAC9C,QAAA,MAAM,MAAM,GAAG,UAAU,CAAW,WAAW,CAAC,MAAM;cAChD,WAAW,CAAC,MAAM,CAAC,KAAK,EAAE,KAAK;AACjC,cAAE,sBAAsB,CAAC,WAAW,CAAC,MAAM,CAAC;AAChD,QAAA,MAAM,UAAU,GAAG,WAAW,CAAC,UAAU;QAGzC,OAAO;YACH,IAAI;YACJ,MAAM;YACN;SACH;;AAGG,IAAA,oBAAoB,CAAC,UAA6B,EAAA;QACtD,OAAO,CAAC,CAAC,UAAU,IAAI,UAAU,CAAC,MAAM,GAAG,CAAC;;AAGxC,IAAA,kCAAkC,CACtC,WAA+B,EAC/B,KAAqC,EACrC,KAA0B,EAAA;AAE1B,QAAA,IACI,CAAC,CAAC,WAAW,CAAC;AACX,gBACC,CAAC,UAAU,CAAe,WAAW,CAAC,UAAU,CAAC;AAC9C,oBAAC,aAAa,CAAC,WAAW,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,2BAA2B,CAAC,WAAW,CAAC,UAAU,CAAC,CAAC,CAC1G,EACH;YACE,IAAI,gBAAgB,GAAG,EAAE;AAEzB,YAAA,OAAO,IAAI,CAAC,WAAW,CAAC,MAAM;AACzB,iBAAA,IAAI,CACD,QAAQ,CAAC,iBAAiB,IAAG;AACzB,gBAAA,OAAO,QAAQ,CAAC;AACZ,oBAAA,IAAI,CAAC,kBAAkB,CAAC,aAAa,CAAC,iBAAiB,CAAC;AACxD,oBAAA,IAAI,CAAC,YAAY,CAAC,YAAY,CAAC,iBAAiB;AACnD,iBAAA,CAAC,CAAC,IAAI,CACH,GAAG,CAAC,cAAc,IAAG;AACjB,oBAAA,MAAM,mBAAmB,GAAG,cAAc,CAAC,KAAK,CAAC,aAAa,IAAI,aAAa,KAAK,KAAK,CAAC;oBAE1F,IAAI,CAAC,mBAAmB,EAAE;wBACtB,gBAAgB,GAAG,iBAAiB;;iBAE3C,CAAC,CACL;AACL,aAAC,CAAC,EACF,KAAK,CAAC,cAAc,IAAI,cAAc,CAAC,IAAI,CAAC,aAAa,IAAI,aAAa,KAAK,IAAI,CAAC,EAAE,KAAK,CAAC,EAC5F,QAAQ,CAAC,UAAU,IAAG;AAClB,gBAAA,IAAI,CAAC,CAAC,gBAAgB,EAAE;oBACpB,IAAI,CAAC,gCAAgC,CAAC,WAAW,EAAE,gBAAgB,EAAE,KAAK,EAAE,KAAK,CAAC;AAElF,oBAAA,OAAO,EAAE,CAAC,KAAK,CAAC;;AAGpB,gBAAA,IAAI,CAAC,UAAU,IAAI,WAAW,CAAC,IAAI,EAAE;oBACjC,OAAO,IAAI,CAAC,iBAAiB,CAAC,WAAW,EAAE,KAAK,EAAE,KAAK,CAAC;;AAG5D,gBAAA,OAAO,EAAE,CAAC,CAAC,UAAU,CAAC;AAC1B,aAAC,CAAC;AAEL,iBAAA,SAAS,EAAE;;QAGpB,OAAO,OAAO,CAAC,GAAG,CAAC;YACf,IAAI,CAAC,kBAAkB,CAAC,aAAa,CAAC,WAAW,CAAC,MAAM,CAAC;YACzD,IAAI,CAAC,YAAY,CAAC,YAAY,CAAC,WAAW,CAAC,MAAM;SACpD,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,aAAa,EAAE,QAAQ,CAAC,KAAI;AAClC,YAAA,IAAI,aAAa,IAAI,QAAQ,EAAE;AAC3B,gBAAA,IAAI,WAAW,CAAC,UAAU,EAAE;oBACxB,IAAI,CAAC,sBAAsB,CACvB,WAAW,CAAC,UAAU,EACtB,KAAK,EACL,KAAK,CACR;;AAGL,gBAAA,OAAO,KAAK;;AAGhB,YAAA,IAAI,WAAW,CAAC,IAAI,EAAE;gBAClB,OAAO,IAAI,CAAC,oBAAoB,CAAC,WAAW,EAAE,KAAK,EAAE,KAAK,CAAC;;AAE/D,YAAA,OAAO,IAAI;AACf,SAAC,CAAC;;AAGE,IAAA,sBAAsB,CAC1B,oBAA+C,EAC/C,KAAqC,EACrC,KAA2B,EAC3B,oBAA6B,EAAA;AAG7B,QAAA,MAAM,UAAU,GAAG,UAAU,CAAe,oBAAoB;cAC1D,oBAAoB,CAAC,oBAAoB,EAAE,KAAK,EAAE,KAAK;cACvD,oBAAoB;AAE1B,QAAA,IAAI,IAAI,CAAC,2BAA2B,CAAC,UAAU,CAAC,EAAE;AAC9C,YAAA,UAAU,CAAC,kBAAkB,GAAG,IAAI,CAAC,2BAA2B,CAAC,UAAU,CAAC,kBAAkB,EAAE,KAAK,EAAE,KAAK,CAAC;AAC7G,YAAA,UAAU,CAAC,gBAAgB,GAAG,IAAI,CAAC,yBAAyB,CAAC,UAAU,CAAC,gBAAgB,EAAE,KAAK,EAAE,KAAK,CAAC;AACvG,YAAA,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,UAAU,CAAC,kBAAkB,EAAE,UAAU,CAAC,gBAAgB,CAAC;YAChF;;AAGJ,QAAA,IAAI,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE;AAC3B,YAAA,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,UAAU,CAAC;;aAC7B;YACH,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,UAAU,CAAC,CAAC;;;AAIlC,IAAA,2BAA2B,CAAC,MAA+C,EAAA;QAC/E,QAAQ,aAAa,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,kBAAkB,IAAI,CAAC,CAAC,MAAM,CAAC,gBAAgB,CAAC;;AAGvF,IAAA,2BAA2B,CAC/B,kBAAgD,EAChD,KAAqC,EACrC,KAA2B,EAAA;QAE3B,OAAO,UAAU,CAAuB,kBAAkB;AACtD,cAAE,kBAAkB,CAAC,KAAK,EAAE,KAAK;cAC/B,kBAAkB;;AAGpB,IAAA,yBAAyB,CAC7B,gBAAuD,EACvD,KAAqC,EACrC,KAA2B,EAAA;QAE3B,OAAO,UAAU,CAAqB,gBAAgB;AAClD,cAAE,gBAAgB,CAAC,KAAK,EAAE,KAAK;cAC7B,gBAAgB;;AAGlB,IAAA,iBAAiB,CACrB,WAA+B,EAC/B,KAAqC,EACrC,KAA2B,EAAA;QAE3B,IAAI,gBAAgB,GAAG,EAAE;AAEzB,QAAA,OAAO,IAAI,CAAC,WAAW,CAAC,IAAI;AACvB,aAAA,IAAI,CACD,QAAQ,CAAC,eAAe,IAAG;AACvB,YAAA,OAAO,QAAQ,CAAC;AACZ,gBAAA,IAAI,CAAC,kBAAkB,CAAC,aAAa,CAAC,eAAe,CAAC;AACtD,gBAAA,IAAI,CAAC,YAAY,CAAC,YAAY,CAAC,eAAe;AACjD,aAAA,CAAC,CAAC,IAAI,CACH,GAAG,CAAC,cAAc,IAAG;AACjB,gBAAA,MAAM,MAAM,GAAG,cAAc,CAAC,KAAK,CAAC,aAAa,IAAI,aAAa,KAAK,KAAK,CAAC;gBAE7E,IAAI,MAAM,EAAE;oBACR,gBAAgB,GAAG,eAAe;;aAEzC,CAAC,CACL;AACL,SAAC,CAAC,EACF,KAAK,CAAC,cAAc,IAAG;AACf,YAAA,IAAI,UAAU,CAAe,WAAW,CAAC,UAAU,CAAC,EAAE;AAClD,gBAAA,OAAO,cAAc,CAAC,IAAI,CAAC,aAAa,IAAI,aAAa,KAAK,IAAI,CAAC;;AAGvE,YAAA,OAAO,cAAc,CAAC,KAAK,CAAC,aAAa,IAAI,aAAa,KAAK,KAAK,CAAC;SACxE,EACD,KAAK,CAAC,EACV,QAAQ,CACJ,CAAC,IAAa,KAAyB;AACnC,YAAA,IAAI,UAAU,CAAe,WAAW,CAAC,UAAU,CAAC,EAAE;gBAClD,IAAI,IAAI,EAAE;AACN,oBAAA,OAAO,EAAE,CAAC,IAAI,CAAC;;qBACZ;oBACH,IAAI,CAAC,gCAAgC,CAAC,WAAW,EAAE,gBAAgB,EAAE,KAAK,EAAE,KAAK,CAAC;AAClF,oBAAA,OAAO,EAAE,CAAC,KAAK,CAAC;;;iBAEjB;AACH,gBAAA,IAAI,CAAC,CAAC,gBAAgB,EAAE;oBACpB,IAAI,CAAC,gCAAgC,CAAC,WAAW,EAAE,gBAAgB,EAAE,KAAK,EAAE,KAAK,CAAC;;AAEtF,gBAAA,OAAO,EAAE,CAAC,CAAC,IAAI,CAAC;;AAExB,SAAC,CACJ;AAEJ,aAAA,SAAS,EAAE;;AAGZ,IAAA,gCAAgC,CACpC,WAA+B,EAC/B,gBAAwB,EACxB,KAAqC,EACrC,KAA2B,EAAA;QAE3B,IAAI,IAAI,CAAC,sCAAsC,CAAC,WAAW,EAAE,gBAAgB,CAAC,EAAE;AAC5E,YAAA,IAAI,CAAC,sBAAsB,CAAC,WAAW,CAAC,UAAU,CAAC,gBAAgB,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,gBAAgB,CAAC;;aAClG;AACH,YAAA,IAAI,UAAU,CAAe,WAAW,CAAC,UAAU,CAAC,EAAE;AAClD,gBAAA,IAAI,CAAC,sBAAsB,CAAC,WAAW,CAAC,UAAU,EAAE,KAAK,EAAE,KAAK,EAAE,gBAAgB,CAAC;;iBAChF;AACH,gBAAA,IAAI,CAAC,sBAAsB,CAAC,WAAW,CAAC,UAAU,CAAC,oBAAoB,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,gBAAgB,CAAC;;;;IAK7G,sCAAsC,CAAC,WAA+B,EAAE,gBAAwB,EAAA;AACpG,QAAA,QAAQ,CAAC,CAAC,WAAW,CAAC,UAAU,IAAI,WAAW,CAAC,UAAU,CAAC,gBAAgB,CAAC;;AAGxE,IAAA,oBAAoB,CACxB,eAAmC,EACnC,KAAqC,EACrC,KAA2B,EAAA;AAE3B,QAAA,MAAM,WAAW,GAAuB;AACpC,YAAA,GAAG;SACN;QAED,OAAO,OAAO,CAAC,GAAG,CAAC;YACf,IAAI,CAAC,kBAAkB,CAAC,aAAa,CAAC,WAAW,CAAC,IAAI,CAAC;YACvD,IAAI,CAAC,YAAY,CAAC,YAAY,CAAC,WAAW,CAAC,IAAI;SAClD,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,aAAa,EAAE,OAAO,CAAC,KAAI;AACjC,YAAA,IAAI,aAAa,IAAI,OAAO,EAAE;AAC1B,gBAAA,OAAO,IAAI;;AAGf,YAAA,IAAI,WAAW,CAAC,UAAU,EAAE;gBACxB,IAAI,CAAC,sBAAsB,CAAC,WAAW,CAAC,UAAU,EAAE,KAAK,EAAE,KAAK,CAAC;;AAGrE,YAAA,OAAO,KAAK;AAChB,SAAC,CAAC;;AAGE,IAAA,gCAAgC,CACpC,WAA+B,EAC/B,KAAqC,EACrC,KAA2B,EAAA;AAE3B,QAAA,KACK,UAAU,CAAe,WAAW,CAAC,UAAU;AACzC,eAAA,aAAa,CAAC,WAAW,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,2BAA2B,CAAC,WAAW,CAAC,UAAU,CAAC,GAC3G;YACE,OAAO,IAAI,CAAC,iBAAiB,CAAC,WAAW,EAAE,KAAK,EAAE,KAAK,CAAC;;QAE5D,OAAO,IAAI,CAAC,oBAAoB,CAAC,WAAW,EAAE,KAAK,EAAE,KAAK,CAAC;;8GAlStD,mBAAmB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAC,qBAAA,EAAA,EAAA,EAAA,KAAA,EAAAC,eAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,MAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;kHAAnB,mBAAmB,EAAA,CAAA,CAAA;;2FAAnB,mBAAmB,EAAA,UAAA,EAAA,CAAA;kBAD/B;;;MCzCY,gCAAgC,CAAA;AAJ7C,IAAA,WAAA,GAAA;AA2Bc,QAAA,IAAA,CAAA,qBAAqB,GAAG,IAAI,YAAY,EAAE;AAC1C,QAAA,IAAA,CAAA,uBAAuB,GAAG,IAAI,YAAY,EAAE;AAE9C,QAAA,IAAA,CAAA,aAAa,GAAG,MAAM,CAAC,gBAAgB,CAAC;AACxC,QAAA,IAAA,CAAA,WAAW,GAAG,MAAM,EAAC,WAAgB,EAAC;AAgBjD;IAdG,QAAQ,GAAA;AACJ,QAAA,IAAI,CAAC,aAAa,CAAC,KAAK,EAAE;QAC1B,IAAI,CAAC,aAAa,CAAC,kBAAkB,CAAC,IAAI,CAAC,qBAAqB,EAAE,CAAC;AACnE,QAAA,IAAI,CAAC,qBAAqB,CAAC,IAAI,EAAE;;IAG7B,qBAAqB,GAAA;QACzB,QACI,IAAI,CAAC,sBAAsB;AAC3B,YAAA,IAAI,CAAC,wBAAwB;AAC7B,YAAA,IAAI,CAAC,kBAAkB;YACvB,IAAI,CAAC,WAAW;;8GAxCf,gCAAgC,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;kGAAhC,gCAAgC,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,6CAAA,EAAA,MAAA,EAAA,EAAA,kBAAA,EAAA,oBAAA,EAAA,sBAAA,EAAA,wBAAA,EAAA,sBAAA,EAAA,wBAAA,EAAA,oBAAA,EAAA,sBAAA,EAAA,wBAAA,EAAA,0BAAA,EAAA,wBAAA,EAAA,0BAAA,EAAA,kBAAA,EAAA,oBAAA,EAAA,kBAAA,EAAA,oBAAA,EAAA,oCAAA,EAAA,sCAAA,EAAA,sCAAA,EAAA,wCAAA,EAAA,wCAAA,EAAA,0CAAA,EAAA,sCAAA,EAAA,wCAAA,EAAA,kCAAA,EAAA,oCAAA,EAAA,gCAAA,EAAA,kCAAA,EAAA,EAAA,OAAA,EAAA,EAAA,qBAAA,EAAA,uBAAA,EAAA,uBAAA,EAAA,yBAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA,CAAA;;2FAAhC,gCAAgC,EAAA,UAAA,EAAA,CAAA;kBAJ5C,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACP,oBAAA,UAAU,EAAE,IAAI;AAChB,oBAAA,QAAQ,EAAE,6CAA6C;AAC1D,iBAAA;8BAEY,kBAAkB,EAAA,CAAA;sBAA1B;gBACQ,sBAAsB,EAAA,CAAA;sBAA9B;gBACQ,sBAAsB,EAAA,CAAA;sBAA9B;gBAEQ,oBAAoB,EAAA,CAAA;sBAA5B;gBACQ,wBAAwB,EAAA,CAAA;sBAAhC;gBACQ,wBAAwB,EAAA,CAAA;sBAAhC;gBAEQ,kBAAkB,EAAA,CAAA;sBAA1B;gBACQ,kBAAkB,EAAA,CAAA;sBAA1B;gBAEQ,oCAAoC,EAAA,CAAA;sBAA5C;gBACQ,sCAAsC,EAAA,CAAA;sBAA9C;gBAEQ,wCAAwC,EAAA,CAAA;sBAAhD;gBAGQ,sCAAsC,EAAA,CAAA;sBAA9C;gBAEQ,kCAAkC,EAAA,CAAA;sBAA1C;gBACQ,gCAAgC,EAAA,CAAA;sBAAxC;gBAES,qBAAqB,EAAA,CAAA;sBAA9B;gBACS,uBAAuB,EAAA,CAAA;sBAAhC;;;MCxBQ,mCAAmC,CAAA;AAJhD,IAAA,WAAA,GAAA;AA2Bc,QAAA,IAAA,CAAA,qBAAqB,GAAG,IAAI,YAAY,EAAE;AAC1C,QAAA,IAAA,CAAA,uBAAuB,GAAG,IAAI,YAAY,EAAE;AAE9C,QAAA,IAAA,CAAA,aAAa,GAAG,MAAM,CAAC,gBAAgB,CAAC;AAmBnD;IAjBG,QAAQ,GAAA;AACJ,QAAA,IAAI,CAAC,aAAa,CAAC,KAAK,EAAE;AAC1B,QAAA,IAAI,IAAI,CAAC,uBAAuB,EAAE,EAAE;YAChC,IAAI,CAAC,aAAa,CAAC,kBAAkB,CACjC,IAAI,CAAC,uBAAuB,EAAE,CACjC;;AAEL,QAAA,IAAI,CAAC,uBAAuB,CAAC,IAAI,EAAE;;IAG/B,uBAAuB,GAAA;QAC3B,QACI,IAAI,CAAC,sBAAsB;AAC3B,YAAA,IAAI,CAAC,wBAAwB;YAC7B,IAAI,CAAC,kBAAkB;;8GA1CtB,mCAAmC,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;kGAAnC,mCAAmC,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,6CAAA,EAAA,MAAA,EAAA,EAAA,kBAAA,EAAA,oBAAA,EAAA,sBAAA,EAAA,wBAAA,EAAA,sBAAA,EAAA,wBAAA,EAAA,oBAAA,EAAA,sBAAA,EAAA,wBAAA,EAAA,0BAAA,EAAA,wBAAA,EAAA,0BAAA,EAAA,kBAAA,EAAA,oBAAA,EAAA,kBAAA,EAAA,oBAAA,EAAA,oCAAA,EAAA,sCAAA,EAAA,sCAAA,EAAA,wCAAA,EAAA,wCAAA,EAAA,0CAAA,EAAA,sCAAA,EAAA,wCAAA,EAAA,kCAAA,EAAA,oCAAA,EAAA,gCAAA,EAAA,kCAAA,EAAA,EAAA,OAAA,EAAA,EAAA,qBAAA,EAAA,uBAAA,EAAA,uBAAA,EAAA,yBAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA,CAAA;;2FAAnC,mCAAmC,EAAA,UAAA,EAAA,CAAA;kBAJ/C,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACP,oBAAA,UAAU,EAAE,IAAI;AAChB,oBAAA,QAAQ,EAAE,6CAA6C;AAC1D,iBAAA;8BAEY,kBAAkB,EAAA,CAAA;sBAA1B;gBACQ,sBAAsB,EAAA,CAAA;sBAA9B;gBACQ,sBAAsB,EAAA,CAAA;sBAA9B;gBAEQ,oBAAoB,EAAA,CAAA;sBAA5B;gBACQ,wBAAwB,EAAA,CAAA;sBAAhC;gBACQ,wBAAwB,EAAA,CAAA;sBAAhC;gBAEQ,kBAAkB,EAAA,CAAA;sBAA1B;gBACQ,kBAAkB,EAAA,CAAA;sBAA1B;gBAEQ,oCAAoC,EAAA,CAAA;sBAA5C;gBACQ,sCAAsC,EAAA,CAAA;sBAA9C;gBAEQ,wCAAwC,EAAA,CAAA;sBAAhD;gBAGQ,sCAAsC,EAAA,CAAA;sBAA9C;gBAEQ,kCAAkC,EAAA,CAAA;sBAA1C;gBACQ,gCAAgC,EAAA,CAAA;sBAAxC;gBAES,qBAAqB,EAAA,CAAA;sBAA9B;gBACS,uBAAuB,EAAA,CAAA;sBAAhC;;;MCkBQ,oBAAoB,CAAA;AAC7B,IAAA,OAAO,OAAO,CAAC,MAAA,GAAqC,EAAE,EAAA;QAClD,OAAO;AACH,YAAA,QAAQ,EAAE,oBAAoB;AAC9B,YAAA,SAAS,EAAE;gBACP,mBAAmB;gBACnB,aAAa;gBACb,gCAAgC;gBAChC,qBAAqB;gBACrB,mBAAmB;gBACnB,eAAe;gBACf,kCAAkC;gBAClC,EAAC,OAAO,EAAE,qBAAqB,EAAE,QAAQ,EAAE,MAAM,CAAC,kBAAkB,EAAC;gBACrE,EAAC,OAAO,EAAE,eAAe,EAAE,QAAQ,EAAE,MAAM,CAAC,YAAY,EAAC;gBACzD,EAAC,OAAO,EAAE,uBAAuB,EAAE,QAAQ,EAAE,MAAM,CAAC,oBAAoB,EAAC;AAC5E;SACJ;;AAGL,IAAA,OAAO,QAAQ,CAAC,MAAA,GAAqC,EAAE,EAAA;QACnD,OAAO;AACH,YAAA,QAAQ,EAAE,oBAAoB;AAC9B,YAAA,SAAS,EAAE;gBACP,EAAC,OAAO,EAAE,qBAAqB,EAAE,QAAQ,EAAE,MAAM,CAAC,kBAAkB,EAAC;gBACrE,EAAC,OAAO,EAAE,eAAe,EAAE,QAAQ,EAAE,MAAM,CAAC,YAAY,EAAC;gBACzD,EAAC,OAAO,EAAE,uBAAuB,EAAE,QAAQ,EAAE,MAAM,CAAC,oBAAoB,EAAC;gBACzE,kCAAkC;gBAClC,qBAAqB;gBACrB,eAAe;gBACf;AACH;SACJ;;8GA/BI,oBAAoB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,QAAA,EAAA,CAAA,CAAA;+GAApB,oBAAoB,EAAA,YAAA,EAAA,CANzB,uBAAuB,CAAA,EAAA,OAAA,EAAA,CAGvB,uBAAuB,CAAA,EAAA,CAAA,CAAA;+GAGlB,oBAAoB,EAAA,CAAA,CAAA;;2FAApB,oBAAoB,EAAA,UAAA,EAAA,CAAA;kBAThC,QAAQ;AAAC,YAAA,IAAA,EAAA,CAAA;AACN,oBAAA,OAAO,EAAE,EAAE;AACX,oBAAA,YAAY,EAAE;wBACV;AACH,qBAAA;AACD,oBAAA,OAAO,EAAE;wBACL;AACH;AACJ,iBAAA;;MA2CY,6BAA6B,CAAA;8GAA7B,6BAA6B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,QAAA,EAAA,CAAA,CAAA;+GAA7B,6BAA6B,EAAA,OAAA,EAAA,CAN5B,gCAAgC,CAAA,EAAA,OAAA,EAAA,CAGtC,gCAAgC,CAAA,EAAA,CAAA,CAAA;+GAG3B,6BAA6B,EAAA,CAAA,CAAA;;2FAA7B,6BAA6B,EAAA,UAAA,EAAA,CAAA;kBAPzC,QAAQ;AAAC,YAAA,IAAA,EAAA,CAAA;oBACN,OAAO,EAAE,CAAC,gCAAgC,CAAC;AAC3C,oBAAA,YAAY,EAAE,EAAE;AAChB,oBAAA,OAAO,EAAE;wBACL;AACH;AACJ,iBAAA;;MAYY,gCAAgC,CAAA;8GAAhC,gCAAgC,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,QAAA,EAAA,CAAA,CAAA;+GAAhC,gCAAgC,EAAA,OAAA,EAAA,CAN/B,mCAAmC,CAAA,EAAA,OAAA,EAAA,CAGzC,mCAAmC,CAAA,EAAA,CAAA,CAAA;+GAG9B,gCAAgC,EAAA,CAAA,CAAA;;2FAAhC,gCAAgC,EAAA,UAAA,EAAA,CAAA;kBAP5C,QAAQ;AAAC,YAAA,IAAA,EAAA,CAAA;oBACN,OAAO,EAAE,CAAC,mCAAmC,CAAC;AAC9C,oBAAA,YAAY,EAAE,EAAE;AAChB,oBAAA,OAAO,EAAE;wBACL;AACH;AACJ,iBAAA;;;ACrGD;;AAEG;;ACFH;;AAEG;;;;"}