{"version":3,"file":"brumeilde-ngx-theme.mjs","sources":["../../../projects/ngx-theme/src/lib/data/default-options.data.ts","../../../projects/ngx-theme/src/lib/data/base-colors.data.ts","../../../projects/ngx-theme/src/lib/utils/color-utils.ts","../../../projects/ngx-theme/src/lib/models/color-config.model.ts","../../../projects/ngx-theme/src/lib/models/color-shade.model.ts","../../../projects/ngx-theme/src/lib/models/palette.model.ts","../../../projects/ngx-theme/src/lib/models/theme.model.ts","../../../projects/ngx-theme/src/lib/tokens.ts","../../../projects/ngx-theme/src/lib/ngx-theme.service.ts","../../../projects/ngx-theme/src/lib/ngx-theme.module.ts","../../../projects/ngx-theme/src/public-api.ts","../../../projects/ngx-theme/src/brumeilde-ngx-theme.ts"],"sourcesContent":["import { ModuleOptions } from '../ngx-theme.module';\n\nexport const DEFAULT_OPTIONS: ModuleOptions = {\n    frameworks: ['material', 'tailwind'],\n};\n","export const BASE_COLORS: { [key in 'white' | 'black']: string } = {\n    white: '#ffffff',\n    black: '#000000',\n};\n","import tinycolor from 'tinycolor2';\nimport { BASE_COLORS } from '../data/base-colors.data';\n\nexport class ColorUtils {\n    static isColorValidHexa(color: string): boolean {\n        return /^#[0-9a-f]{3,6}$/i.test(color);\n    }\n\n    static mixAndGetColorHex(hex: string, mixColorHex?: string, amount?: number): string {\n        if (!mixColorHex || !amount) {\n            return hex;\n        }\n        const color = tinycolor(hex);\n        const mixColor = tinycolor(mixColorHex);\n\n        return tinycolor.mix(color, mixColor, amount).toHexString();\n    }\n\n    static getContrast(hex: string, dark = BASE_COLORS.black, light = BASE_COLORS.white): string {\n        const color = tinycolor(hex);\n        if (color.isLight()) {\n            return dark;\n        }\n\n        return light;\n    }\n\n    static fromHexToSpaceSeparatedRgb(hexa: string): string {\n        const rgb = tinycolor(hexa).toRgb();\n        delete rgb.a;\n\n        return Object.values(rgb).join(' ');\n    }\n\n    static get randomColor(): string {\n        return tinycolor.random().toHexString();\n    }\n}\n","import { ColorUtils } from '../utils/color-utils';\n\n/**\n * - Palettes: will generate a range of colors shades\n * - simpleColors: will remain single color\n *\n * #### Simple colors\n * Each key must be of type `{ 'colorName': 'hexaValue' }`\n *\n * #### Palettes\n * Each key must be of type either :\n * - `{ 'colorName': { baseColor: 'hexaValue', contrast?: { light?: 'hexaValue', dark?: 'hexaValue' } } }`\n * - `{ 'colorName': 'hexaValue' }` (like simple colors)\n */\nexport type IColorConfig<\n    Palettes extends IPalettesConfig = IPalettesConfig,\n    SimpleColors extends ISimpleColorsConfig = ISimpleColorsConfig,\n> = {\n    palettes?: Palettes;\n    simpleColors?: SimpleColors;\n};\n\ntype ISimpleColorsConfig = Record<string, string>;\n\ntype IPalettesConfig = Record<string, IColorInput>;\n\nexport type IColorInput = string | IDetailedColorInput;\n\nexport type IDetailedColorInput = {\n    baseColor: string;\n    contrast?: { light?: string; dark?: string };\n};\n\nexport class ColorConfig<\n    Palettes extends IPalettesConfig = IPalettesConfig,\n    SimpleColors extends Record<string, string> = Record<string, string>,\n> implements IColorConfig<Palettes, SimpleColors>\n{\n    palettes: Palettes = {} as Palettes;\n    simpleColors: SimpleColors = {} as SimpleColors;\n\n    constructor(colorConfig: Partial<IColorConfig>) {\n        const verifyColor = (hexa: string) => {\n            if (!hexa || !ColorUtils.isColorValidHexa(hexa)) {\n                console.error(`Color with hexa value \"${hexa}\" is not valid, it will be ignored.`);\n\n                return false;\n            }\n\n            return true;\n        };\n        const setColor = <T extends IColorInput>(\n            [colorName, hexa]: [string, T],\n            destinationColor: IPalettesConfig,\n        ) => {\n            let isValid = false;\n            let finalValue: T;\n            if (typeof hexa === 'string') {\n                isValid = verifyColor(hexa);\n                if (isValid) {\n                    finalValue = hexa;\n                }\n            } else {\n                const colorInput: IDetailedColorInput = {} as IDetailedColorInput;\n                if (verifyColor(hexa.baseColor)) {\n                    isValid = true;\n                    colorInput.baseColor = hexa.baseColor;\n\n                    if (verifyColor(hexa.contrast?.light)) {\n                        colorInput.contrast = colorInput.contrast || {};\n                        colorInput.contrast.light = hexa.contrast.light;\n                    }\n\n                    if (verifyColor(hexa.contrast?.light)) {\n                        colorInput.contrast = colorInput.contrast || {};\n                        colorInput.contrast.light = hexa.contrast.light;\n                    }\n\n                    finalValue = colorInput as T;\n                }\n            }\n            if (!isValid || !finalValue) {\n                return;\n            }\n            if (!destinationColor || !colorName) {\n                return;\n            }\n            destinationColor[colorName] = hexa;\n        };\n\n        if (colorConfig?.palettes) {\n            Object.entries(colorConfig.palettes).forEach(([colorName, value]) => {\n                setColor([colorName, value], this.palettes);\n            });\n        }\n\n        if (colorConfig?.simpleColors) {\n            Object.entries(colorConfig.simpleColors).forEach((colorEntry) =>\n                setColor(colorEntry, this.simpleColors),\n            );\n        }\n    }\n}\n","export const SHADES = [50, 100, 200, 300, 400, 500, 600, 700, 800, 900] as const;\n\nexport type ColorShadeName = typeof SHADES[number];\n\nexport type ColorShades = Record<ColorShadeName, string>;\n\nexport function isShade(shade: number | string): boolean {\n    return [...SHADES].map((shade) => `${shade}`).includes(`${shade}`);\n}\n","import { BASE_COLORS } from '../data/base-colors.data';\nimport { ColorUtils } from '../utils/color-utils';\nimport { IColorInput } from './color-config.model';\nimport { ColorShadeName, ColorShades, SHADES, isShade } from './color-shade.model';\n\nexport type PaletteName = string;\n\nexport type IPalette = ColorShades;\nexport type IMaterialPalette = Palette & { contrast: ColorShades };\nexport type IThemeColorPalettes = Record<PaletteName, Palette>;\n\nexport class Palette implements IPalette {\n    50: string;\n    100: string;\n    200: string;\n    300: string;\n    400: string;\n    500: string;\n    600: string;\n    700: string;\n    800: string;\n    900: string;\n\n    contrast: ColorShades = null;\n\n    constructor(input: IColorInput) {\n        let baseColor = '';\n        let contrast;\n        if (typeof input === 'string') {\n            baseColor = input;\n        } else {\n            baseColor = input.baseColor;\n            contrast = input.contrast;\n        }\n        this.generatePaletteShades(baseColor);\n        this.generateContrastShades(contrast?.dark, contrast?.light);\n    }\n\n    getPalette(): IPalette {\n        const { generatePaletteShades, getColorShade, getPalette, ...palette } = this;\n\n        return palette;\n    }\n\n    getColorShade(shade: ColorShadeName = 500): string {\n        return this[shade];\n    }\n\n    getContrast(shade: ColorShadeName | string = 500): string {\n        if (!this.contrast) {\n            return null;\n        }\n        if (!isShade(shade)) {\n            throw new Error(\n                `Shade ${shade} doesn't exist. Please use one of the following: ${[...SHADES].join(\n                    ', ',\n                )}`,\n            );\n        }\n\n        return this.contrast[+shade as ColorShadeName];\n    }\n\n    private generatePaletteShades(hexaColor: string): void {\n        if (!ColorUtils.isColorValidHexa(hexaColor)) {\n            throw new Error(\n                `Color ${hexaColor} is not valid hexa format. How the hell did you manage that?`,\n            );\n        }\n        const palette: IPalette = {\n            50: ColorUtils.mixAndGetColorHex(hexaColor, BASE_COLORS.white, 95),\n            100: ColorUtils.mixAndGetColorHex(hexaColor, BASE_COLORS.white, 88),\n            200: ColorUtils.mixAndGetColorHex(hexaColor, BASE_COLORS.white, 55),\n            300: ColorUtils.mixAndGetColorHex(hexaColor, BASE_COLORS.white, 30),\n            400: ColorUtils.mixAndGetColorHex(hexaColor, BASE_COLORS.white, 20),\n            500: ColorUtils.mixAndGetColorHex(hexaColor),\n            600: ColorUtils.mixAndGetColorHex(hexaColor, BASE_COLORS.black, 13),\n            700: ColorUtils.mixAndGetColorHex(hexaColor, BASE_COLORS.black, 30),\n            800: ColorUtils.mixAndGetColorHex(hexaColor, BASE_COLORS.black, 46),\n            900: ColorUtils.mixAndGetColorHex(hexaColor, BASE_COLORS.black, 75),\n        };\n        Object.assign(this, palette);\n    }\n\n    private generateContrastShades(darkContrast?: string, lightContrast?: string): void {\n        let dark = BASE_COLORS.black;\n        if (darkContrast && ColorUtils.isColorValidHexa(darkContrast)) {\n            dark = darkContrast;\n        }\n        let light = BASE_COLORS.white;\n        if (lightContrast && ColorUtils.isColorValidHexa(lightContrast)) {\n            light = lightContrast;\n        }\n\n        const constrast: ColorShades = {\n            50: ColorUtils.getContrast(this[50], dark, light),\n            100: ColorUtils.getContrast(this[100], dark, light),\n            200: ColorUtils.getContrast(this[200], dark, light),\n            300: ColorUtils.getContrast(this[300], dark, light),\n            400: ColorUtils.getContrast(this[400], dark, light),\n            500: ColorUtils.getContrast(this[500], dark, light),\n            600: ColorUtils.getContrast(this[600], dark, light),\n            700: ColorUtils.getContrast(this[700], dark, light),\n            800: ColorUtils.getContrast(this[800], dark, light),\n            900: ColorUtils.getContrast(this[900], dark, light),\n        };\n\n        this.contrast = constrast;\n    }\n}\n","import { ColorShadeName } from './color-shade.model';\nimport { PaletteName, IThemeColorPalettes, Palette } from './palette.model';\nimport { IThemeSimpleColors } from './simple-colors.model';\n\nexport interface ITheme {\n    palettes: IThemeColorPalettes;\n    colors: IThemeSimpleColors;\n}\n\nexport class Theme implements ITheme {\n    palettes: IThemeColorPalettes;\n    colors: IThemeSimpleColors;\n\n    constructor({ palettes, colors }: ITheme) {\n        this.palettes = palettes;\n        this.colors = colors;\n    }\n\n    getColorPalette(paletteName: PaletteName): Palette {\n        if (!this.palettes[paletteName]) {\n            throw new Error(`Palette with name '${paletteName}' doesn't exist.`);\n        }\n\n        return this.palettes[paletteName];\n    }\n\n    getColorShade(colorName: PaletteName, shade: ColorShadeName = 500): string {\n        return this.getColorPalette(colorName).getColorShade(shade);\n    }\n\n    getConstrast(colorName: PaletteName, shade: ColorShadeName | string = 500): string {\n        return this.getColorPalette(colorName).getContrast(shade);\n    }\n}\n","import { InjectionToken } from '@angular/core';\nimport { IColorConfig } from './models/color-config.model';\nimport { ModuleOptions } from './ngx-theme.module';\n\nexport const COLOR_CONFIG = new InjectionToken<IColorConfig>('COLOR_CONFIG');\nexport const THEME_OPTIONS = new InjectionToken<ModuleOptions>('THEME_OPTIONS');\n","import { DOCUMENT } from '@angular/common';\nimport { Inject, Injectable, Optional } from '@angular/core';\nimport { DEFAULT_OPTIONS } from './data/default-options.data';\nimport { ColorConfig, IColorConfig } from './models/color-config.model';\nimport { ColorShadeName, ColorShades, isShade } from './models/color-shade.model';\nimport { IThemeColorPalettes, PaletteName, Palette } from './models/palette.model';\nimport { SimpleColorsName, IThemeSimpleColors } from './models/simple-colors.model';\nimport { Theme } from './models/theme.model';\nimport { ModuleOptions } from './ngx-theme.module';\nimport { ColorUtils } from './utils/color-utils';\nimport { COLOR_CONFIG, THEME_OPTIONS } from './tokens';\n\n@Injectable({\n    providedIn: 'root',\n})\nexport class NgxThemeService<T extends IColorConfig = IColorConfig> {\n    constructor(\n        @Inject(DOCUMENT) private readonly document: Document,\n        @Inject(COLOR_CONFIG)\n        @Optional()\n        colorConfig?: T,\n        @Inject(THEME_OPTIONS)\n        @Optional()\n        options: Partial<ModuleOptions> = DEFAULT_OPTIONS,\n    ) {\n        this.setOptions(options);\n        if (colorConfig) {\n            this.setColorConfig(colorConfig);\n        }\n    }\n    private colorConfig: ColorConfig;\n    private _theme: Theme;\n    private _options: ModuleOptions;\n\n    get theme(): Theme {\n        return this._theme;\n    }\n\n    private setColorConfig(colorConfig?: Partial<T>): void {\n        if (!colorConfig?.palettes && !colorConfig?.simpleColors) {\n            console.warn('No colors provided. No Palette or variables will be generated.');\n\n            return;\n        }\n\n        const palettes = {\n            ...(this.colorConfig?.palettes || {}),\n            ...(colorConfig?.palettes || {}),\n        };\n        const simpleColors = {\n            ...(this.colorConfig?.simpleColors || {}),\n            ...(colorConfig?.simpleColors || {}),\n        };\n        this.colorConfig = new ColorConfig({ palettes, simpleColors });\n    }\n\n    private setOptions(options: Partial<ModuleOptions>): void {\n        this._options = { ...DEFAULT_OPTIONS, ...options };\n    }\n\n    updateColors(colorConfig?: Partial<T>): void {\n        if (colorConfig) {\n            this.setColorConfig(colorConfig);\n        }\n\n        if (!this.colorConfig) {\n            return;\n        }\n        this.computeTheme();\n        this.setCssColorVariables();\n    }\n\n    private computeTheme(): void {\n        const palettes: IThemeColorPalettes = {} as IThemeColorPalettes;\n        const colors: IThemeSimpleColors = {} as IThemeSimpleColors;\n\n        Object.entries(this.colorConfig.simpleColors).forEach(([name, hexa]) => {\n            colors[name as SimpleColorsName] = hexa;\n        });\n\n        Object.entries(this.colorConfig.palettes).forEach(([name, hexa]) => {\n            palettes[name as PaletteName] = new Palette(hexa);\n        });\n\n        this._theme = new Theme({ palettes, colors });\n    }\n\n    private setCssColorVariables(): void {\n        if (this.theme.palettes) {\n            Object.entries<ColorShades | 'contrast'>(this.theme.palettes).forEach(\n                ([colorName, shades]) => {\n                    Object.entries<string>(shades)\n                        .filter(([shadeName]) => isShade(shadeName))\n                        .forEach(([shadeName, hexaValue]) => {\n                            this.setCssColorVariablesForShade(colorName, hexaValue, shadeName);\n                        });\n                },\n            );\n        }\n\n        Object.entries(this.theme.colors).forEach(([colorName, hexaValue]: [string, string]) => {\n            this.setCssColorVariablesForShade(colorName, hexaValue);\n        });\n    }\n\n    private setCssColorVariablesForShade(\n        colorName: string,\n        hexaValue: string,\n        shadeName?: string,\n    ): void {\n        const cssVariables: Record<string, string> = {};\n        const addSpaceRgb = this._options.frameworks.includes('tailwind');\n        const addContrast =\n            this._options.frameworks.includes('material') ||\n            this._options.frameworks.includes('tailwind');\n        const prefix = `--color-${colorName}`;\n\n        if (!shadeName) {\n            cssVariables[prefix] = hexaValue;\n        }\n        if (addSpaceRgb) {\n            cssVariables[`${prefix}-rgb`] = ColorUtils.fromHexToSpaceSeparatedRgb(hexaValue);\n        }\n        if (shadeName) {\n            if (shadeName === '500') cssVariables[prefix] = hexaValue;\n            cssVariables[`${prefix}-${shadeName}`] = hexaValue;\n        }\n        if (shadeName && addSpaceRgb) {\n            cssVariables[`${prefix}-${shadeName}-rgb`] =\n                ColorUtils.fromHexToSpaceSeparatedRgb(hexaValue);\n        }\n        if (shadeName && addContrast) {\n            cssVariables[`${prefix}-${shadeName}-contrast`] = this._theme.getConstrast(\n                colorName,\n                +shadeName as ColorShadeName,\n            );\n        }\n\n        Object.entries<string>(cssVariables).forEach(([key, value]) => {\n            this.document.documentElement.style.setProperty(key, value);\n        });\n    }\n}\n","import { APP_INITIALIZER, ModuleWithProviders, NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { NgxThemeService } from './ngx-theme.service';\nimport { ColorConfig, IColorConfig } from './models/color-config.model';\nimport { DEFAULT_OPTIONS } from './data/default-options.data';\nimport { COLOR_CONFIG, THEME_OPTIONS } from './tokens';\n\nexport type Frameworks = 'tailwind' | 'material';\n\nexport type ModuleOptions = { frameworks: Frameworks[] };\n\nfunction initTheme(themeService: NgxThemeService<ColorConfig>) {\n    return () => {\n        return themeService.updateColors();\n    };\n}\n\n@NgModule({\n    providers: [\n        NgxThemeService,\n        {\n            provide: APP_INITIALIZER,\n            useFactory: initTheme,\n            deps: [NgxThemeService],\n            multi: true,\n        },\n    ],\n    imports: [CommonModule],\n})\nexport class NgxThemeModule {\n    static forRoot<T extends IColorConfig>(\n        colorConfig: Partial<T>,\n        options: Partial<ModuleOptions> = DEFAULT_OPTIONS,\n    ): ModuleWithProviders<NgxThemeModule> {\n        return {\n            ngModule: NgxThemeModule,\n            providers: [\n                { provide: COLOR_CONFIG, useValue: colorConfig },\n                { provide: THEME_OPTIONS, useValue: options },\n            ],\n        };\n    }\n}\n","/*\n * Public API Surface of ngx-theme\n */\n\nexport * from './lib/ngx-theme.service';\nexport * from './lib/ngx-theme.module';\nexport { IColorConfig, IDetailedColorInput, IColorInput } from './lib/models/color-config.model';\nexport * from './lib/models/theme.model';\nexport * from './lib/tokens';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":";;;;;AAEO,MAAM,eAAe,GAAkB;AAC1C,IAAA,UAAU,EAAE,CAAC,UAAU,EAAE,UAAU,CAAC;CACvC;;ACJM,MAAM,WAAW,GAA2C;AAC/D,IAAA,KAAK,EAAE,SAAS;AAChB,IAAA,KAAK,EAAE,SAAS;CACnB;;MCAY,UAAU,CAAA;IACnB,OAAO,gBAAgB,CAAC,KAAa,EAAA;AACjC,QAAA,OAAO,mBAAmB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;KAC1C;AAED,IAAA,OAAO,iBAAiB,CAAC,GAAW,EAAE,WAAoB,EAAE,MAAe,EAAA;AACvE,QAAA,IAAI,CAAC,WAAW,IAAI,CAAC,MAAM,EAAE;AACzB,YAAA,OAAO,GAAG,CAAC;AACd,SAAA;AACD,QAAA,MAAM,KAAK,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC;AAC7B,QAAA,MAAM,QAAQ,GAAG,SAAS,CAAC,WAAW,CAAC,CAAC;AAExC,QAAA,OAAO,SAAS,CAAC,GAAG,CAAC,KAAK,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAC,WAAW,EAAE,CAAC;KAC/D;AAED,IAAA,OAAO,WAAW,CAAC,GAAW,EAAE,IAAI,GAAG,WAAW,CAAC,KAAK,EAAE,KAAK,GAAG,WAAW,CAAC,KAAK,EAAA;AAC/E,QAAA,MAAM,KAAK,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC;AAC7B,QAAA,IAAI,KAAK,CAAC,OAAO,EAAE,EAAE;AACjB,YAAA,OAAO,IAAI,CAAC;AACf,SAAA;AAED,QAAA,OAAO,KAAK,CAAC;KAChB;IAED,OAAO,0BAA0B,CAAC,IAAY,EAAA;QAC1C,MAAM,GAAG,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,CAAC;QACpC,OAAO,GAAG,CAAC,CAAC,CAAC;QAEb,OAAO,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;KACvC;AAED,IAAA,WAAW,WAAW,GAAA;AAClB,QAAA,OAAO,SAAS,CAAC,MAAM,EAAE,CAAC,WAAW,EAAE,CAAC;KAC3C;AACJ;;MCJY,WAAW,CAAA;AAQpB,IAAA,WAAA,CAAY,WAAkC,EAAA;QAH9C,IAAQ,CAAA,QAAA,GAAa,EAAc,CAAC;QACpC,IAAY,CAAA,YAAA,GAAiB,EAAkB,CAAC;AAG5C,QAAA,MAAM,WAAW,GAAG,CAAC,IAAY,KAAI;YACjC,IAAI,CAAC,IAAI,IAAI,CAAC,UAAU,CAAC,gBAAgB,CAAC,IAAI,CAAC,EAAE;AAC7C,gBAAA,OAAO,CAAC,KAAK,CAAC,0BAA0B,IAAI,CAAA,mCAAA,CAAqC,CAAC,CAAC;AAEnF,gBAAA,OAAO,KAAK,CAAC;AAChB,aAAA;AAED,YAAA,OAAO,IAAI,CAAC;AAChB,SAAC,CAAC;QACF,MAAM,QAAQ,GAAG,CACb,CAAC,SAAS,EAAE,IAAI,CAAc,EAC9B,gBAAiC,KACjC;YACA,IAAI,OAAO,GAAG,KAAK,CAAC;AACpB,YAAA,IAAI,UAAa,CAAC;AAClB,YAAA,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE;AAC1B,gBAAA,OAAO,GAAG,WAAW,CAAC,IAAI,CAAC,CAAC;AAC5B,gBAAA,IAAI,OAAO,EAAE;oBACT,UAAU,GAAG,IAAI,CAAC;AACrB,iBAAA;AACJ,aAAA;AAAM,iBAAA;gBACH,MAAM,UAAU,GAAwB,EAAyB,CAAC;AAClE,gBAAA,IAAI,WAAW,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE;oBAC7B,OAAO,GAAG,IAAI,CAAC;AACf,oBAAA,UAAU,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC;oBAEtC,IAAI,WAAW,CAAC,IAAI,CAAC,QAAQ,EAAE,KAAK,CAAC,EAAE;wBACnC,UAAU,CAAC,QAAQ,GAAG,UAAU,CAAC,QAAQ,IAAI,EAAE,CAAC;wBAChD,UAAU,CAAC,QAAQ,CAAC,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC;AACnD,qBAAA;oBAED,IAAI,WAAW,CAAC,IAAI,CAAC,QAAQ,EAAE,KAAK,CAAC,EAAE;wBACnC,UAAU,CAAC,QAAQ,GAAG,UAAU,CAAC,QAAQ,IAAI,EAAE,CAAC;wBAChD,UAAU,CAAC,QAAQ,CAAC,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC;AACnD,qBAAA;oBAED,UAAU,GAAG,UAAe,CAAC;AAChC,iBAAA;AACJ,aAAA;AACD,YAAA,IAAI,CAAC,OAAO,IAAI,CAAC,UAAU,EAAE;gBACzB,OAAO;AACV,aAAA;AACD,YAAA,IAAI,CAAC,gBAAgB,IAAI,CAAC,SAAS,EAAE;gBACjC,OAAO;AACV,aAAA;AACD,YAAA,gBAAgB,CAAC,SAAS,CAAC,GAAG,IAAI,CAAC;AACvC,SAAC,CAAC;QAEF,IAAI,WAAW,EAAE,QAAQ,EAAE;AACvB,YAAA,MAAM,CAAC,OAAO,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,EAAE,KAAK,CAAC,KAAI;gBAChE,QAAQ,CAAC,CAAC,SAAS,EAAE,KAAK,CAAC,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;AAChD,aAAC,CAAC,CAAC;AACN,SAAA;QAED,IAAI,WAAW,EAAE,YAAY,EAAE;YAC3B,MAAM,CAAC,OAAO,CAAC,WAAW,CAAC,YAAY,CAAC,CAAC,OAAO,CAAC,CAAC,UAAU,KACxD,QAAQ,CAAC,UAAU,EAAE,IAAI,CAAC,YAAY,CAAC,CAC1C,CAAC;AACL,SAAA;KACJ;AACJ;;ACtGM,MAAM,MAAM,GAAG,CAAC,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAU,CAAC;AAM3E,SAAU,OAAO,CAAC,KAAsB,EAAA;IAC1C,OAAO,CAAC,GAAG,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,KAAK,CAAG,EAAA,KAAK,CAAE,CAAA,CAAC,CAAC,QAAQ,CAAC,CAAG,EAAA,KAAK,CAAE,CAAA,CAAC,CAAC;AACvE;;MCGa,OAAO,CAAA;AAchB,IAAA,WAAA,CAAY,KAAkB,EAAA;QAF9B,IAAQ,CAAA,QAAA,GAAgB,IAAI,CAAC;QAGzB,IAAI,SAAS,GAAG,EAAE,CAAC;AACnB,QAAA,IAAI,QAAQ,CAAC;AACb,QAAA,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE;YAC3B,SAAS,GAAG,KAAK,CAAC;AACrB,SAAA;AAAM,aAAA;AACH,YAAA,SAAS,GAAG,KAAK,CAAC,SAAS,CAAC;AAC5B,YAAA,QAAQ,GAAG,KAAK,CAAC,QAAQ,CAAC;AAC7B,SAAA;AACD,QAAA,IAAI,CAAC,qBAAqB,CAAC,SAAS,CAAC,CAAC;QACtC,IAAI,CAAC,sBAAsB,CAAC,QAAQ,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,CAAC,CAAC;KAChE;IAED,UAAU,GAAA;AACN,QAAA,MAAM,EAAE,qBAAqB,EAAE,aAAa,EAAE,UAAU,EAAE,GAAG,OAAO,EAAE,GAAG,IAAI,CAAC;AAE9E,QAAA,OAAO,OAAO,CAAC;KAClB;IAED,aAAa,CAAC,QAAwB,GAAG,EAAA;AACrC,QAAA,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC;KACtB;IAED,WAAW,CAAC,QAAiC,GAAG,EAAA;AAC5C,QAAA,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE;AAChB,YAAA,OAAO,IAAI,CAAC;AACf,SAAA;AACD,QAAA,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;AACjB,YAAA,MAAM,IAAI,KAAK,CACX,CAAS,MAAA,EAAA,KAAK,oDAAoD,CAAC,GAAG,MAAM,CAAC,CAAC,IAAI,CAC9E,IAAI,CACP,CAAA,CAAE,CACN,CAAC;AACL,SAAA;AAED,QAAA,OAAO,IAAI,CAAC,QAAQ,CAAC,CAAC,KAAuB,CAAC,CAAC;KAClD;AAEO,IAAA,qBAAqB,CAAC,SAAiB,EAAA;AAC3C,QAAA,IAAI,CAAC,UAAU,CAAC,gBAAgB,CAAC,SAAS,CAAC,EAAE;AACzC,YAAA,MAAM,IAAI,KAAK,CACX,SAAS,SAAS,CAAA,4DAAA,CAA8D,CACnF,CAAC;AACL,SAAA;AACD,QAAA,MAAM,OAAO,GAAa;AACtB,YAAA,EAAE,EAAE,UAAU,CAAC,iBAAiB,CAAC,SAAS,EAAE,WAAW,CAAC,KAAK,EAAE,EAAE,CAAC;AAClE,YAAA,GAAG,EAAE,UAAU,CAAC,iBAAiB,CAAC,SAAS,EAAE,WAAW,CAAC,KAAK,EAAE,EAAE,CAAC;AACnE,YAAA,GAAG,EAAE,UAAU,CAAC,iBAAiB,CAAC,SAAS,EAAE,WAAW,CAAC,KAAK,EAAE,EAAE,CAAC;AACnE,YAAA,GAAG,EAAE,UAAU,CAAC,iBAAiB,CAAC,SAAS,EAAE,WAAW,CAAC,KAAK,EAAE,EAAE,CAAC;AACnE,YAAA,GAAG,EAAE,UAAU,CAAC,iBAAiB,CAAC,SAAS,EAAE,WAAW,CAAC,KAAK,EAAE,EAAE,CAAC;AACnE,YAAA,GAAG,EAAE,UAAU,CAAC,iBAAiB,CAAC,SAAS,CAAC;AAC5C,YAAA,GAAG,EAAE,UAAU,CAAC,iBAAiB,CAAC,SAAS,EAAE,WAAW,CAAC,KAAK,EAAE,EAAE,CAAC;AACnE,YAAA,GAAG,EAAE,UAAU,CAAC,iBAAiB,CAAC,SAAS,EAAE,WAAW,CAAC,KAAK,EAAE,EAAE,CAAC;AACnE,YAAA,GAAG,EAAE,UAAU,CAAC,iBAAiB,CAAC,SAAS,EAAE,WAAW,CAAC,KAAK,EAAE,EAAE,CAAC;AACnE,YAAA,GAAG,EAAE,UAAU,CAAC,iBAAiB,CAAC,SAAS,EAAE,WAAW,CAAC,KAAK,EAAE,EAAE,CAAC;SACtE,CAAC;AACF,QAAA,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;KAChC;IAEO,sBAAsB,CAAC,YAAqB,EAAE,aAAsB,EAAA;AACxE,QAAA,IAAI,IAAI,GAAG,WAAW,CAAC,KAAK,CAAC;QAC7B,IAAI,YAAY,IAAI,UAAU,CAAC,gBAAgB,CAAC,YAAY,CAAC,EAAE;YAC3D,IAAI,GAAG,YAAY,CAAC;AACvB,SAAA;AACD,QAAA,IAAI,KAAK,GAAG,WAAW,CAAC,KAAK,CAAC;QAC9B,IAAI,aAAa,IAAI,UAAU,CAAC,gBAAgB,CAAC,aAAa,CAAC,EAAE;YAC7D,KAAK,GAAG,aAAa,CAAC;AACzB,SAAA;AAED,QAAA,MAAM,SAAS,GAAgB;AAC3B,YAAA,EAAE,EAAE,UAAU,CAAC,WAAW,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,IAAI,EAAE,KAAK,CAAC;AACjD,YAAA,GAAG,EAAE,UAAU,CAAC,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,IAAI,EAAE,KAAK,CAAC;AACnD,YAAA,GAAG,EAAE,UAAU,CAAC,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,IAAI,EAAE,KAAK,CAAC;AACnD,YAAA,GAAG,EAAE,UAAU,CAAC,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,IAAI,EAAE,KAAK,CAAC;AACnD,YAAA,GAAG,EAAE,UAAU,CAAC,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,IAAI,EAAE,KAAK,CAAC;AACnD,YAAA,GAAG,EAAE,UAAU,CAAC,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,IAAI,EAAE,KAAK,CAAC;AACnD,YAAA,GAAG,EAAE,UAAU,CAAC,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,IAAI,EAAE,KAAK,CAAC;AACnD,YAAA,GAAG,EAAE,UAAU,CAAC,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,IAAI,EAAE,KAAK,CAAC;AACnD,YAAA,GAAG,EAAE,UAAU,CAAC,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,IAAI,EAAE,KAAK,CAAC;AACnD,YAAA,GAAG,EAAE,UAAU,CAAC,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,IAAI,EAAE,KAAK,CAAC;SACtD,CAAC;AAEF,QAAA,IAAI,CAAC,QAAQ,GAAG,SAAS,CAAC;KAC7B;AACJ;;MCpGY,KAAK,CAAA;AAId,IAAA,WAAA,CAAY,EAAE,QAAQ,EAAE,MAAM,EAAU,EAAA;AACpC,QAAA,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;AACzB,QAAA,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;KACxB;AAED,IAAA,eAAe,CAAC,WAAwB,EAAA;AACpC,QAAA,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,EAAE;AAC7B,YAAA,MAAM,IAAI,KAAK,CAAC,sBAAsB,WAAW,CAAA,gBAAA,CAAkB,CAAC,CAAC;AACxE,SAAA;AAED,QAAA,OAAO,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC;KACrC;AAED,IAAA,aAAa,CAAC,SAAsB,EAAE,KAAA,GAAwB,GAAG,EAAA;QAC7D,OAAO,IAAI,CAAC,eAAe,CAAC,SAAS,CAAC,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;KAC/D;AAED,IAAA,YAAY,CAAC,SAAsB,EAAE,KAAA,GAAiC,GAAG,EAAA;QACrE,OAAO,IAAI,CAAC,eAAe,CAAC,SAAS,CAAC,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;KAC7D;AACJ;;MC7BY,YAAY,GAAG,IAAI,cAAc,CAAe,cAAc,EAAE;MAChE,aAAa,GAAG,IAAI,cAAc,CAAgB,eAAe;;MCUjE,eAAe,CAAA;AACxB,IAAA,WAAA,CACuC,QAAkB,EAGrD,WAAe,EAGf,UAAkC,eAAe,EAAA;QANd,IAAQ,CAAA,QAAA,GAAR,QAAQ,CAAU;AAQrD,QAAA,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;AACzB,QAAA,IAAI,WAAW,EAAE;AACb,YAAA,IAAI,CAAC,cAAc,CAAC,WAAW,CAAC,CAAC;AACpC,SAAA;KACJ;AAKD,IAAA,IAAI,KAAK,GAAA;QACL,OAAO,IAAI,CAAC,MAAM,CAAC;KACtB;AAEO,IAAA,cAAc,CAAC,WAAwB,EAAA;QAC3C,IAAI,CAAC,WAAW,EAAE,QAAQ,IAAI,CAAC,WAAW,EAAE,YAAY,EAAE;AACtD,YAAA,OAAO,CAAC,IAAI,CAAC,gEAAgE,CAAC,CAAC;YAE/E,OAAO;AACV,SAAA;AAED,QAAA,MAAM,QAAQ,GAAG;YACb,IAAI,IAAI,CAAC,WAAW,EAAE,QAAQ,IAAI,EAAE,CAAC;AACrC,YAAA,IAAI,WAAW,EAAE,QAAQ,IAAI,EAAE,CAAC;SACnC,CAAC;AACF,QAAA,MAAM,YAAY,GAAG;YACjB,IAAI,IAAI,CAAC,WAAW,EAAE,YAAY,IAAI,EAAE,CAAC;AACzC,YAAA,IAAI,WAAW,EAAE,YAAY,IAAI,EAAE,CAAC;SACvC,CAAC;AACF,QAAA,IAAI,CAAC,WAAW,GAAG,IAAI,WAAW,CAAC,EAAE,QAAQ,EAAE,YAAY,EAAE,CAAC,CAAC;KAClE;AAEO,IAAA,UAAU,CAAC,OAA+B,EAAA;QAC9C,IAAI,CAAC,QAAQ,GAAG,EAAE,GAAG,eAAe,EAAE,GAAG,OAAO,EAAE,CAAC;KACtD;AAED,IAAA,YAAY,CAAC,WAAwB,EAAA;AACjC,QAAA,IAAI,WAAW,EAAE;AACb,YAAA,IAAI,CAAC,cAAc,CAAC,WAAW,CAAC,CAAC;AACpC,SAAA;AAED,QAAA,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE;YACnB,OAAO;AACV,SAAA;QACD,IAAI,CAAC,YAAY,EAAE,CAAC;QACpB,IAAI,CAAC,oBAAoB,EAAE,CAAC;KAC/B;IAEO,YAAY,GAAA;QAChB,MAAM,QAAQ,GAAwB,EAAyB,CAAC;QAChE,MAAM,MAAM,GAAuB,EAAwB,CAAC;AAE5D,QAAA,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,WAAW,CAAC,YAAY,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,EAAE,IAAI,CAAC,KAAI;AACnE,YAAA,MAAM,CAAC,IAAwB,CAAC,GAAG,IAAI,CAAC;AAC5C,SAAC,CAAC,CAAC;AAEH,QAAA,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,EAAE,IAAI,CAAC,KAAI;YAC/D,QAAQ,CAAC,IAAmB,CAAC,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;AACtD,SAAC,CAAC,CAAC;AAEH,QAAA,IAAI,CAAC,MAAM,GAAG,IAAI,KAAK,CAAC,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC,CAAC;KACjD;IAEO,oBAAoB,GAAA;AACxB,QAAA,IAAI,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE;AACrB,YAAA,MAAM,CAAC,OAAO,CAA2B,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,OAAO,CACjE,CAAC,CAAC,SAAS,EAAE,MAAM,CAAC,KAAI;AACpB,gBAAA,MAAM,CAAC,OAAO,CAAS,MAAM,CAAC;AACzB,qBAAA,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC,KAAK,OAAO,CAAC,SAAS,CAAC,CAAC;qBAC3C,OAAO,CAAC,CAAC,CAAC,SAAS,EAAE,SAAS,CAAC,KAAI;oBAChC,IAAI,CAAC,4BAA4B,CAAC,SAAS,EAAE,SAAS,EAAE,SAAS,CAAC,CAAC;AACvE,iBAAC,CAAC,CAAC;AACX,aAAC,CACJ,CAAC;AACL,SAAA;AAED,QAAA,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,EAAE,SAAS,CAAmB,KAAI;AACnF,YAAA,IAAI,CAAC,4BAA4B,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;AAC5D,SAAC,CAAC,CAAC;KACN;AAEO,IAAA,4BAA4B,CAChC,SAAiB,EACjB,SAAiB,EACjB,SAAkB,EAAA;QAElB,MAAM,YAAY,GAA2B,EAAE,CAAC;AAChD,QAAA,MAAM,WAAW,GAAG,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC;QAClE,MAAM,WAAW,GACb,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,QAAQ,CAAC,UAAU,CAAC;YAC7C,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC;AAClD,QAAA,MAAM,MAAM,GAAG,CAAW,QAAA,EAAA,SAAS,EAAE,CAAC;QAEtC,IAAI,CAAC,SAAS,EAAE;AACZ,YAAA,YAAY,CAAC,MAAM,CAAC,GAAG,SAAS,CAAC;AACpC,SAAA;AACD,QAAA,IAAI,WAAW,EAAE;AACb,YAAA,YAAY,CAAC,CAAA,EAAG,MAAM,CAAA,IAAA,CAAM,CAAC,GAAG,UAAU,CAAC,0BAA0B,CAAC,SAAS,CAAC,CAAC;AACpF,SAAA;AACD,QAAA,IAAI,SAAS,EAAE;YACX,IAAI,SAAS,KAAK,KAAK;AAAE,gBAAA,YAAY,CAAC,MAAM,CAAC,GAAG,SAAS,CAAC;YAC1D,YAAY,CAAC,GAAG,MAAM,CAAA,CAAA,EAAI,SAAS,CAAE,CAAA,CAAC,GAAG,SAAS,CAAC;AACtD,SAAA;QACD,IAAI,SAAS,IAAI,WAAW,EAAE;AAC1B,YAAA,YAAY,CAAC,CAAG,EAAA,MAAM,CAAI,CAAA,EAAA,SAAS,MAAM,CAAC;AACtC,gBAAA,UAAU,CAAC,0BAA0B,CAAC,SAAS,CAAC,CAAC;AACxD,SAAA;QACD,IAAI,SAAS,IAAI,WAAW,EAAE;AAC1B,YAAA,YAAY,CAAC,CAAG,EAAA,MAAM,IAAI,SAAS,CAAA,SAAA,CAAW,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,YAAY,CACtE,SAAS,EACT,CAAC,SAA2B,CAC/B,CAAC;AACL,SAAA;AAED,QAAA,MAAM,CAAC,OAAO,CAAS,YAAY,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,KAAI;AAC1D,YAAA,IAAI,CAAC,QAAQ,CAAC,eAAe,CAAC,KAAK,CAAC,WAAW,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;AAChE,SAAC,CAAC,CAAC;KACN;;AA9HQ,eAAA,CAAA,IAAA,GAAA,EAAA,CAAA,kBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,eAAe,EAEZ,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,QAAQ,EACR,EAAA,EAAA,KAAA,EAAA,YAAY,6BAGZ,aAAa,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AANhB,eAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,eAAe,cAFZ,MAAM,EAAA,CAAA,CAAA;2FAET,eAAe,EAAA,UAAA,EAAA,CAAA;kBAH3B,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACR,oBAAA,UAAU,EAAE,MAAM;AACrB,iBAAA,CAAA;0DAGoD,QAAQ,EAAA,UAAA,EAAA,CAAA;0BAApD,MAAM;2BAAC,QAAQ,CAAA;;0BACf,MAAM;2BAAC,YAAY,CAAA;;0BACnB,QAAQ;;0BAER,MAAM;2BAAC,aAAa,CAAA;;0BACpB,QAAQ;;;ACXjB,SAAS,SAAS,CAAC,YAA0C,EAAA;AACzD,IAAA,OAAO,MAAK;AACR,QAAA,OAAO,YAAY,CAAC,YAAY,EAAE,CAAC;AACvC,KAAC,CAAC;AACN,CAAC;MAcY,cAAc,CAAA;AACvB,IAAA,OAAO,OAAO,CACV,WAAuB,EACvB,UAAkC,eAAe,EAAA;QAEjD,OAAO;AACH,YAAA,QAAQ,EAAE,cAAc;AACxB,YAAA,SAAS,EAAE;AACP,gBAAA,EAAE,OAAO,EAAE,YAAY,EAAE,QAAQ,EAAE,WAAW,EAAE;AAChD,gBAAA,EAAE,OAAO,EAAE,aAAa,EAAE,QAAQ,EAAE,OAAO,EAAE;AAChD,aAAA;SACJ,CAAC;KACL;;2GAZQ,cAAc,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,QAAA,EAAA,CAAA,CAAA;AAAd,cAAA,CAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,cAAc,YAFb,YAAY,CAAA,EAAA,CAAA,CAAA;AAEb,cAAA,CAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,cAAc,EAXZ,SAAA,EAAA;QACP,eAAe;AACf,QAAA;AACI,YAAA,OAAO,EAAE,eAAe;AACxB,YAAA,UAAU,EAAE,SAAS;YACrB,IAAI,EAAE,CAAC,eAAe,CAAC;AACvB,YAAA,KAAK,EAAE,IAAI;AACd,SAAA;AACJ,KAAA,EAAA,OAAA,EAAA,CACS,YAAY,CAAA,EAAA,CAAA,CAAA;2FAEb,cAAc,EAAA,UAAA,EAAA,CAAA;kBAZ1B,QAAQ;AAAC,YAAA,IAAA,EAAA,CAAA;AACN,oBAAA,SAAS,EAAE;wBACP,eAAe;AACf,wBAAA;AACI,4BAAA,OAAO,EAAE,eAAe;AACxB,4BAAA,UAAU,EAAE,SAAS;4BACrB,IAAI,EAAE,CAAC,eAAe,CAAC;AACvB,4BAAA,KAAK,EAAE,IAAI;AACd,yBAAA;AACJ,qBAAA;oBACD,OAAO,EAAE,CAAC,YAAY,CAAC;AAC1B,iBAAA,CAAA;;;AC5BD;;AAEG;;ACFH;;AAEG;;;;"}