{"version":3,"file":"index.cjs","sources":["../../../node_modules/json-stringify-pretty-compact/index.js","../format.ts","../visit.ts","../migrate/v8.ts","../expression/parsing_error.ts","../expression/scope.ts","../expression/types.ts","../../../node_modules/csscolorparser/csscolorparser.js","../util/lerp.ts","../util/color.ts","../expression/types/collator.ts","../expression/types/formatted.ts","../expression/types/image_id.ts","../expression/types/image_variant.ts","../expression/types/resolved_image.ts","../expression/values.ts","../expression/definitions/literal.ts","../expression/runtime_error.ts","../expression/definitions/assertion.ts","../expression/definitions/format.ts","../expression/definitions/image.ts","../util/get_type.ts","../expression/definitions/coercion.ts","../expression/evaluation_context.ts","../expression/compound_expression.ts","../expression/definitions/collator.ts","../../../node_modules/@mapbox/point-geometry/index.js","../util/geometry_util.ts","../util/mercator.ts","../expression/definitions/within.ts","../../../node_modules/tinyqueue/index.js","../data/extent.ts","../expression/definitions/distance.ts","../expression/is_constant.ts","../expression/definitions/config.ts","../expression/definitions/var.ts","../expression/parsing_context.ts","../expression/stops.ts","../expression/definitions/step.ts","../../../node_modules/@mapbox/unitbezier/index.js","../util/interpolate.ts","../util/color_spaces.ts","../expression/definitions/interpolate.ts","../expression/definitions/coalesce.ts","../expression/definitions/let.ts","../expression/definitions/at.ts","../expression/definitions/at_interpolated.ts","../expression/definitions/match.ts","../expression/definitions/case.ts","../expression/definitions/slice.ts","../expression/definitions/comparison.ts","../expression/definitions/number_format.ts","../expression/definitions/length.ts","../util/random.ts","../expression/definitions/index.ts","../expression/expression_dependencies.ts","../util/result.ts","../util/properties.ts","../function/index.ts","../expression/index.ts","../function/convert.ts","../util/unbundle_jsonlint.ts","../feature_filter/index.ts","../feature_filter/convert.ts","../migrate/expressions.ts","../migrate.ts","../composite.ts","../util/ref_properties.ts","../deref.ts","../util/deep_equal.ts","../diff.ts","../error/validation_error.ts","../error/parsing_error.ts","../validate/validate_import.ts","../validate/validate_option.ts","../validate/validate_array.ts","../validate/validate_number.ts","../validate/validate_function.ts","../validate/validate_expression.ts","../validate/validate_boolean.ts","../validate/validate_color.ts","../validate/validate_enum.ts","../validate/validate_filter.ts","../validate/validate_property.ts","../validate/validate_appearance.ts","../validate/validate_paint_property.ts","../validate/validate_layout_property.ts","../validate/validate_layer.ts","../validate/validate_string.ts","../validate/validate_source.ts","../validate/validate_model.ts","../validate/validate_light.ts","../validate/validate_lights.ts","../validate/validate_terrain.ts","../validate/validate_fog.ts","../validate/validate_formatted.ts","../validate/validate_image.ts","../validate/validate_projection.ts","../validate/validate_iconset.ts","../validate/validate.ts","../validate/validate_object.ts","../validate/validate_glyphs_url.ts","../validate/validate_style.ts","../validate_style.min.ts","../read_style.ts","../validate_style.ts","../validate_mapbox_api_supported.ts","../style-spec.ts"],"sourcesContent":["// Note: This regex matches even invalid JSON strings, but since we’re\n// working on the output of `JSON.stringify` we know that only valid strings\n// are present (unless the user supplied a weird `options.indent` but in\n// that case we don’t care since the output would be invalid anyway).\nconst stringOrChar = /(\"(?:[^\\\\\"]|\\\\.)*\")|[:,]/g;\n\nexport default function stringify(passedObj, options = {}) {\n  const indent = JSON.stringify(\n    [1],\n    undefined,\n    options.indent === undefined ? 2 : options.indent\n  ).slice(2, -3);\n\n  const maxLength =\n    indent === \"\"\n      ? Infinity\n      : options.maxLength === undefined\n      ? 80\n      : options.maxLength;\n\n  let { replacer } = options;\n\n  return (function _stringify(obj, currentIndent, reserved) {\n    if (obj && typeof obj.toJSON === \"function\") {\n      obj = obj.toJSON();\n    }\n\n    const string = JSON.stringify(obj, replacer);\n\n    if (string === undefined) {\n      return string;\n    }\n\n    const length = maxLength - currentIndent.length - reserved;\n\n    if (string.length <= length) {\n      const prettified = string.replace(\n        stringOrChar,\n        (match, stringLiteral) => {\n          return stringLiteral || `${match} `;\n        }\n      );\n      if (prettified.length <= length) {\n        return prettified;\n      }\n    }\n\n    if (replacer != null) {\n      obj = JSON.parse(string);\n      replacer = undefined;\n    }\n\n    if (typeof obj === \"object\" && obj !== null) {\n      const nextIndent = currentIndent + indent;\n      const items = [];\n      let index = 0;\n      let start;\n      let end;\n\n      if (Array.isArray(obj)) {\n        start = \"[\";\n        end = \"]\";\n        const { length } = obj;\n        for (; index < length; index++) {\n          items.push(\n            _stringify(obj[index], nextIndent, index === length - 1 ? 0 : 1) ||\n              \"null\"\n          );\n        }\n      } else {\n        start = \"{\";\n        end = \"}\";\n        const keys = Object.keys(obj);\n        const { length } = keys;\n        for (; index < length; index++) {\n          const key = keys[index];\n          const keyPart = `${JSON.stringify(key)}: `;\n          const value = _stringify(\n            obj[key],\n            nextIndent,\n            keyPart.length + (index === length - 1 ? 0 : 1)\n          );\n          if (value !== undefined) {\n            items.push(keyPart + value);\n          }\n        }\n      }\n\n      if (items.length > 0) {\n        return [start, indent + items.join(`,\\n${nextIndent}`), end].join(\n          `\\n${currentIndent}`\n        );\n      }\n    }\n\n    return string;\n  })(passedObj, \"\", 0);\n}\n","/* eslint-disable @typescript-eslint/ban-ts-comment */\n// @ts-nocheck\n\nimport reference from './reference/latest';\nimport stringifyPretty from 'json-stringify-pretty-compact';\n\nfunction sortKeysBy(obj, reference) {\n    // eslint-disable-next-line @typescript-eslint/no-explicit-any\n    const result: Record<string, any> = {};\n    for (const key in reference) {\n        // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n        if (obj[key] !== undefined) {\n            // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-unsafe-member-access\n            result[key] = obj[key];\n        }\n    }\n    for (const key in obj) {\n        if (result[key] === undefined) {\n            // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-unsafe-member-access\n            result[key] = obj[key];\n        }\n    }\n    return result;\n}\n\n/**\n * Format a Mapbox GL Style.  Returns a stringified style with its keys\n * sorted in the same order as the reference style.\n *\n * The optional `space` argument is passed to\n * [`JSON.stringify`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/JSON/stringify)\n * to generate formatted output.\n *\n * If `space` is unspecified, a default of `2` spaces will be used.\n *\n * @private\n * @param {Object} style a Mapbox GL Style\n * @param {number} [space] space argument to pass to `JSON.stringify`\n * @returns {string} stringified formatted JSON\n * @example\n * var fs = require('fs');\n * var format = require('mapbox-gl-style-spec').format;\n * var style = fs.readFileSync('./source.json', 'utf8');\n * fs.writeFileSync('./dest.json', format(style));\n * fs.writeFileSync('./dest.min.json', format(style, 0));\n */\nfunction format(style, space = 2) {\n    style = sortKeysBy(style, reference.$root);\n\n    // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n    if (style.layers) {\n        // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-unsafe-member-access, @typescript-eslint/no-unsafe-call\n        style.layers = style.layers.map((layer) => sortKeysBy(layer, reference.layer));\n    }\n\n    return stringifyPretty(style, {indent: space});\n}\n\nexport default format;\n","import Reference from './reference/v8.json';\n\nimport type {StylePropertySpecification} from './style-spec';\nimport type {\n    StyleSpecification,\n    SourceSpecification,\n    LayerSpecification,\n    PropertyValueSpecification\n} from './types';\n\nfunction getPropertyReference(propertyName: string): StylePropertySpecification {\n    for (let i = 0; i < Reference.layout.length; i++) {\n        for (const key in Reference[Reference.layout[i]]) {\n            // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n            if (key === propertyName) return Reference[Reference.layout[i]][key] as StylePropertySpecification;\n        }\n    }\n    for (let i = 0; i < Reference.paint.length; i++) {\n        for (const key in Reference[Reference.paint[i]]) {\n            // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n            if (key === propertyName) return Reference[Reference.paint[i]][key] as StylePropertySpecification;\n        }\n    }\n\n    return null;\n}\n\nexport function eachSource(style: StyleSpecification, callback: (_: SourceSpecification) => void) {\n    for (const k in style.sources) {\n        callback(style.sources[k]);\n    }\n}\n\nexport function eachLayer(style: StyleSpecification, callback: (_: LayerSpecification) => void) {\n    for (const layer of style.layers) {\n        callback(layer);\n    }\n}\n\ntype PropertyCallback = (\n    arg1: {\n        path: [string, 'paint' | 'layout', string] // [layerid, paint/layout, property key];\n        key: string;\n        value: PropertyValueSpecification<unknown>;\n        reference: StylePropertySpecification;\n        set: (\n            arg1: PropertyValueSpecification<unknown>,\n        ) => void;\n    },\n) => void;\n\nexport function eachProperty(\n    style: StyleSpecification,\n    options: {\n        paint?: boolean;\n        layout?: boolean;\n    },\n    callback: PropertyCallback\n) {\n    function inner(layer: LayerSpecification, propertyType: 'paint' | 'layout') {\n        if (layer.type === 'slot' || layer.type === 'clip') return;\n        const properties = layer[propertyType];\n        if (!properties) return;\n        Object.keys(properties).forEach((key) => {\n            callback({\n                path: [layer.id, propertyType, key],\n                key,\n                value: properties[key],\n                reference: getPropertyReference(key),\n                set(x) {\n                    properties[key] = x;\n                }\n            });\n        });\n    }\n\n    eachLayer(style, (layer) => {\n        if (options.paint) {\n            inner(layer, 'paint');\n        }\n        if (options.layout) {\n            inner(layer, 'layout');\n        }\n    });\n}\n","/* eslint-disable @typescript-eslint/ban-ts-comment */\n// @ts-nocheck\nimport {eachSource, eachLayer, eachProperty} from '../visit';\n\nfunction eachLayout(layer, callback) {\n    for (const k in layer) {\n        if (k.indexOf('layout') === 0) {\n            // eslint-disable-next-line @typescript-eslint/no-unsafe-call, @typescript-eslint/no-unsafe-member-access\n            callback(layer[k], k);\n        }\n    }\n}\n\nfunction eachPaint(layer, callback) {\n    for (const k in layer) {\n        if (k.indexOf('paint') === 0) {\n            // eslint-disable-next-line @typescript-eslint/no-unsafe-call, @typescript-eslint/no-unsafe-member-access\n            callback(layer[k], k);\n        }\n    }\n}\n\nfunction resolveConstant(style, value) {\n    if (typeof value === 'string' && value[0] === '@') {\n        // eslint-disable-next-line @typescript-eslint/no-unsafe-return, @typescript-eslint/no-unsafe-member-access\n        return resolveConstant(style, style.constants[value]);\n    } else {\n        // eslint-disable-next-line @typescript-eslint/no-unsafe-return\n        return value;\n    }\n}\n\nfunction isFunction(value) {\n    // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n    return Array.isArray(value.stops);\n}\n\nfunction renameProperty(obj, from, to) {\n    // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-unsafe-member-access\n    obj[to] = obj[from]; delete obj[from];\n}\n\nexport default function (style) {\n    // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n    style.version = 8;\n\n    // Rename properties, reverse coordinates in source and layers\n    // eslint-disable-next-line @typescript-eslint/no-unsafe-argument\n    eachSource(style, (source) => {\n        if (source.type === 'video' && source.url !== undefined) {\n            renameProperty(source, 'url', 'urls');\n        }\n        if (source.type === 'video') {\n            source.coordinates.forEach((coord) => {\n                return coord.reverse();\n            });\n        }\n    });\n\n    // eslint-disable-next-line @typescript-eslint/no-unsafe-argument\n    eachLayer(style, (layer) => {\n        eachLayout(layer, (layout) => {\n            // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n            if (layout['symbol-min-distance'] !== undefined) {\n                renameProperty(layout, 'symbol-min-distance', 'symbol-spacing');\n            }\n        });\n\n        eachPaint(layer, (paint) => {\n            // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n            if (paint['background-image'] !== undefined) {\n                renameProperty(paint, 'background-image', 'background-pattern');\n            }\n            // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n            if (paint['line-image'] !== undefined) {\n                renameProperty(paint, 'line-image', 'line-pattern');\n            }\n            // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n            if (paint['fill-image'] !== undefined) {\n                renameProperty(paint, 'fill-image', 'fill-pattern');\n            }\n        });\n    });\n\n    // Inline Constants\n    // eslint-disable-next-line @typescript-eslint/no-unsafe-argument\n    eachProperty(style, {paint: true, layout: true}, (property) => {\n        // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\n        const value = resolveConstant(style, property.value);\n\n        if (isFunction(value)) {\n            // eslint-disable-next-line @typescript-eslint/no-unsafe-call, @typescript-eslint/no-unsafe-member-access\n            value.stops.forEach((stop) => {\n                // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-unsafe-member-access\n                stop[1] = resolveConstant(style, stop[1]);\n            });\n        }\n\n        property.set(value);\n    });\n    // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n    delete style.constants;\n\n    // eslint-disable-next-line @typescript-eslint/no-unsafe-argument\n    eachLayer(style, (layer) => {\n        // get rid of text-max-size, icon-max-size\n        // turn text-size, icon-size into layout properties\n        // https://github.com/mapbox/mapbox-gl-style-spec/issues/255\n\n        eachLayout(layer, (layout) => {\n            // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n            delete layout['text-max-size'];\n            // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n            delete layout['icon-max-size'];\n        });\n\n        eachPaint(layer, (paint) => {\n            // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n            if (paint['text-size']) {\n                if (!layer.layout) layer.layout = {};\n                // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-unsafe-member-access\n                layer.layout['text-size'] = paint['text-size'];\n                // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n                delete paint['text-size'];\n            }\n\n            // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n            if (paint['icon-size']) {\n                if (!layer.layout) layer.layout = {};\n                // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-unsafe-member-access\n                layer.layout['icon-size'] = paint['icon-size'];\n                // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n                delete paint['icon-size'];\n            }\n        });\n    });\n\n    function migrateFontstackURL(input) {\n        // eslint-disable-next-line @typescript-eslint/no-unsafe-argument\n        const inputParsed = new URL(input);\n        const inputPathnameParts = inputParsed.pathname.split('/');\n\n        if (inputParsed.protocol !== 'mapbox:') {\n            // eslint-disable-next-line @typescript-eslint/no-unsafe-return\n            return input;\n\n        } else if (inputParsed.hostname === 'fontstack') {\n            assert(decodeURI(inputParsed.pathname) === '/{fontstack}/{range}.pbf');\n            return 'mapbox://fonts/mapbox/{fontstack}/{range}.pbf';\n\n        } else if (inputParsed.hostname === 'fonts') {\n            assert(inputPathnameParts[1] === 'v1');\n            assert(decodeURI(inputPathnameParts[3]) === '{fontstack}');\n            assert(decodeURI(inputPathnameParts[4]) === '{range}.pbf');\n            return `mapbox://fonts/${inputPathnameParts[2]}/{fontstack}/{range}.pbf`;\n\n        } else {\n            assert(false);\n        }\n\n        function assert(predicate) {\n            if (!predicate) {\n                throw new Error(`Invalid font url: \"${input}\"`);\n            }\n        }\n    }\n\n    // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n    if (style.glyphs) {\n        // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-unsafe-member-access\n        style.glyphs = migrateFontstackURL(style.glyphs);\n    }\n\n    function migrateFontStack(font) {\n        function splitAndTrim(string) {\n            // eslint-disable-next-line @typescript-eslint/no-unsafe-return, @typescript-eslint/no-unsafe-call, @typescript-eslint/no-unsafe-member-access\n            return string.split(',').map((s) => {\n                // eslint-disable-next-line @typescript-eslint/no-unsafe-return, @typescript-eslint/no-unsafe-call, @typescript-eslint/no-unsafe-member-access\n                return s.trim();\n            });\n        }\n\n        if (Array.isArray(font)) {\n            // Assume it's a previously migrated font-array.\n            // eslint-disable-next-line @typescript-eslint/no-unsafe-return\n            return font;\n\n        } else if (typeof font === 'string') {\n            // eslint-disable-next-line @typescript-eslint/no-unsafe-return\n            return splitAndTrim(font);\n\n        } else if (typeof font === 'object') {\n            // eslint-disable-next-line @typescript-eslint/no-unsafe-call, @typescript-eslint/no-unsafe-member-access\n            font.stops.forEach((stop) => {\n                // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-unsafe-member-access\n                stop[1] = splitAndTrim(stop[1]);\n            });\n            // eslint-disable-next-line @typescript-eslint/no-unsafe-return\n            return font;\n\n        } else {\n            throw new Error(\"unexpected font value\");\n        }\n    }\n\n    // eslint-disable-next-line @typescript-eslint/no-unsafe-argument\n    eachLayer(style, (layer) => {\n        eachLayout(layer, (layout) => {\n            // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n            if (layout['text-font']) {\n                // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-unsafe-member-access\n                layout['text-font'] = migrateFontStack(layout['text-font']);\n            }\n        });\n    });\n\n    // Reverse order of symbol layers. This is an imperfect migration.\n    //\n    // The order of a symbol layer in the layers list affects two things:\n    // - how it is drawn relative to other layers (like oneway arrows below bridges)\n    // - the placement priority compared to other layers\n    //\n    // It's impossible to reverse the placement priority without breaking the draw order\n    // in some cases. This migration only reverses the order of symbol layers that\n    // are above all other types of layers.\n    //\n    // Symbol layers that are at the top of the map preserve their priority.\n    // Symbol layers that are below another type (line, fill) of layer preserve their draw order.\n\n    let firstSymbolLayer = 0;\n    // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n    for (let i = style.layers.length - 1; i >= 0; i--) {\n        // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-unsafe-member-access\n        const layer = style.layers[i];\n        // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n        if (layer.type !== 'symbol') {\n            firstSymbolLayer = i + 1;\n            break;\n        }\n    }\n\n    // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-unsafe-call, @typescript-eslint/no-unsafe-member-access\n    const symbolLayers = style.layers.splice(firstSymbolLayer);\n    // eslint-disable-next-line @typescript-eslint/no-unsafe-call, @typescript-eslint/no-unsafe-member-access\n    symbolLayers.reverse();\n    // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-unsafe-member-access, @typescript-eslint/no-unsafe-call\n    style.layers = style.layers.concat(symbolLayers);\n\n    // eslint-disable-next-line @typescript-eslint/no-unsafe-return\n    return style;\n}\n","class ParsingError extends Error {\n    key: string;\n    override message: string;\n    constructor(key: string, message: string) {\n        super(message);\n        this.message = message;\n        this.key = key;\n    }\n}\n\nexport default ParsingError;\n","import type {Expression} from './expression';\n\n/**\n * Tracks `let` bindings during expression parsing.\n * @private\n */\nclass Scope {\n    parent: Scope | null | undefined;\n    bindings: Record<string, Expression>;\n    constructor(parent?: Scope, bindings: Array<[string, Expression]> = []) {\n        this.parent = parent;\n        this.bindings = Object.create(null) as Record<string, Expression>;\n        for (const [name, expression] of bindings) {\n            this.bindings[name] = expression;\n        }\n    }\n\n    concat(bindings: Array<[string, Expression]>): Scope {\n        return new Scope(this, bindings);\n    }\n\n    get(name: string): Expression {\n        if (this.bindings[name]) { return this.bindings[name]; }\n        if (this.parent) { return this.parent.get(name); }\n        throw new Error(`${name} not found in scope.`);\n    }\n\n    has(name: string): boolean {\n        if (this.bindings[name]) return true;\n        return this.parent ? this.parent.has(name) : false;\n    }\n}\n\nexport default Scope;\n","export type NullTypeT = {\n    kind: 'null';\n};\nexport type NumberTypeT = {\n    kind: 'number';\n};\nexport type StringTypeT = {\n    kind: 'string';\n};\nexport type BooleanTypeT = {\n    kind: 'boolean';\n};\nexport type ColorTypeT = {\n    kind: 'color';\n};\nexport type ObjectTypeT = {\n    kind: 'object';\n};\nexport type ValueTypeT = {\n    kind: 'value';\n};\nexport type ErrorTypeT = {\n    kind: 'error';\n};\nexport type CollatorTypeT = {\n    kind: 'collator';\n};\nexport type FormattedTypeT = {\n    kind: 'formatted';\n};\nexport type ResolvedImageTypeT = {\n    kind: 'resolvedImage';\n};\n\nexport type EvaluationKind = 'constant' | 'source' | 'camera' | 'composite';\n\nexport type Type =\n    | NullTypeT\n    | NumberTypeT\n    | StringTypeT\n    | BooleanTypeT\n    | ColorTypeT\n    | ObjectTypeT\n    | ValueTypeT\n    | ArrayType\n    | ErrorTypeT\n    | CollatorTypeT\n    | FormattedTypeT\n    | ResolvedImageTypeT;\n\nexport type ArrayType = {\n    kind: 'array';\n    itemType: Type;\n    N: number | null | undefined;\n};\n\nexport type NativeType = 'number' | 'string' | 'boolean' | 'null' | 'array' | 'object';\n\nexport const NullType = {kind: 'null'} as const;\nexport const NumberType = {kind: 'number'} as const;\nexport const StringType = {kind: 'string'} as const;\nexport const BooleanType = {kind: 'boolean'} as const;\nexport const ColorType = {kind: 'color'} as const;\nexport const ObjectType = {kind: 'object'} as const;\nexport const ValueType = {kind: 'value'} as const;\nexport const ErrorType = {kind: 'error'} as const;\nexport const CollatorType = {kind: 'collator'} as const;\nexport const FormattedType = {kind: 'formatted'} as const;\nexport const ResolvedImageType = {kind: 'resolvedImage'} as const;\n\nexport function array(itemType: Type, N?: number | null): ArrayType {\n    return {\n        kind: 'array',\n        itemType,\n        N\n    };\n}\n\nexport function toString(type: Type): string {\n    if (type.kind === 'array') {\n        const itemType = toString(type.itemType);\n        return typeof type.N === 'number' ?\n            `array<${itemType}, ${type.N}>` :\n            type.itemType.kind === 'value' ? 'array' : `array<${itemType}>`;\n    } else {\n        return type.kind;\n    }\n}\n\nconst valueMemberTypes = [\n    NullType,\n    NumberType,\n    StringType,\n    BooleanType,\n    ColorType,\n    FormattedType,\n    ObjectType,\n    array(ValueType),\n    ResolvedImageType\n];\n\n/**\n * Returns null if `t` is a subtype of `expected`; otherwise returns an\n * error message.\n * @private\n */\nexport function checkSubtype(expected: Type, t: Type): string | null | undefined {\n    if (t.kind === 'error') {\n        // Error is a subtype of every type\n        return null;\n    } else if (expected.kind === 'array') {\n        if (t.kind === 'array' &&\n            ((t.N === 0 && t.itemType.kind === 'value') || !checkSubtype(expected.itemType, t.itemType)) &&\n            (typeof expected.N !== 'number' || expected.N === t.N)) {\n            return null;\n        }\n    } else if (expected.kind === t.kind) {\n        return null;\n    } else if (expected.kind === 'value') {\n        for (const memberType of valueMemberTypes) {\n            if (!checkSubtype(memberType, t)) {\n                return null;\n            }\n        }\n    }\n\n    return `Expected ${toString(expected)} but found ${toString(t)} instead.`;\n}\n\nexport function isValidType(provided: Type, allowedTypes: Array<Type>): boolean {\n    return allowedTypes.some(t => t.kind === provided.kind);\n}\n\nexport function isValidNativeType(provided: unknown, allowedTypes: Array<NativeType>): boolean {\n    return allowedTypes.some(t => {\n        if (t === 'null') {\n            return provided === null;\n        } else if (t === 'array') {\n            return Array.isArray(provided);\n        } else if (t === 'object') {\n            return provided && !Array.isArray(provided) && typeof provided === 'object';\n        } else {\n            return t === typeof provided;\n        }\n    });\n}\n\nexport function typeEquals(a: Type, b: Type): boolean {\n    if (a.kind === 'array' && b.kind === 'array') {\n        return a.N === b.N && typeEquals(a.itemType, b.itemType);\n    } else {\n        return a.kind === b.kind;\n    }\n}\n","// (c) Dean McNamee <dean@gmail.com>, 2012.\n//\n// https://github.com/deanm/css-color-parser-js\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to\n// deal in the Software without restriction, including without limitation the\n// rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n// sell copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n// IN THE SOFTWARE.\n\n// http://www.w3.org/TR/css3-color/\nvar kCSSColorTable = {\n  \"transparent\": [0,0,0,0], \"aliceblue\": [240,248,255,1],\n  \"antiquewhite\": [250,235,215,1], \"aqua\": [0,255,255,1],\n  \"aquamarine\": [127,255,212,1], \"azure\": [240,255,255,1],\n  \"beige\": [245,245,220,1], \"bisque\": [255,228,196,1],\n  \"black\": [0,0,0,1], \"blanchedalmond\": [255,235,205,1],\n  \"blue\": [0,0,255,1], \"blueviolet\": [138,43,226,1],\n  \"brown\": [165,42,42,1], \"burlywood\": [222,184,135,1],\n  \"cadetblue\": [95,158,160,1], \"chartreuse\": [127,255,0,1],\n  \"chocolate\": [210,105,30,1], \"coral\": [255,127,80,1],\n  \"cornflowerblue\": [100,149,237,1], \"cornsilk\": [255,248,220,1],\n  \"crimson\": [220,20,60,1], \"cyan\": [0,255,255,1],\n  \"darkblue\": [0,0,139,1], \"darkcyan\": [0,139,139,1],\n  \"darkgoldenrod\": [184,134,11,1], \"darkgray\": [169,169,169,1],\n  \"darkgreen\": [0,100,0,1], \"darkgrey\": [169,169,169,1],\n  \"darkkhaki\": [189,183,107,1], \"darkmagenta\": [139,0,139,1],\n  \"darkolivegreen\": [85,107,47,1], \"darkorange\": [255,140,0,1],\n  \"darkorchid\": [153,50,204,1], \"darkred\": [139,0,0,1],\n  \"darksalmon\": [233,150,122,1], \"darkseagreen\": [143,188,143,1],\n  \"darkslateblue\": [72,61,139,1], \"darkslategray\": [47,79,79,1],\n  \"darkslategrey\": [47,79,79,1], \"darkturquoise\": [0,206,209,1],\n  \"darkviolet\": [148,0,211,1], \"deeppink\": [255,20,147,1],\n  \"deepskyblue\": [0,191,255,1], \"dimgray\": [105,105,105,1],\n  \"dimgrey\": [105,105,105,1], \"dodgerblue\": [30,144,255,1],\n  \"firebrick\": [178,34,34,1], \"floralwhite\": [255,250,240,1],\n  \"forestgreen\": [34,139,34,1], \"fuchsia\": [255,0,255,1],\n  \"gainsboro\": [220,220,220,1], \"ghostwhite\": [248,248,255,1],\n  \"gold\": [255,215,0,1], \"goldenrod\": [218,165,32,1],\n  \"gray\": [128,128,128,1], \"green\": [0,128,0,1],\n  \"greenyellow\": [173,255,47,1], \"grey\": [128,128,128,1],\n  \"honeydew\": [240,255,240,1], \"hotpink\": [255,105,180,1],\n  \"indianred\": [205,92,92,1], \"indigo\": [75,0,130,1],\n  \"ivory\": [255,255,240,1], \"khaki\": [240,230,140,1],\n  \"lavender\": [230,230,250,1], \"lavenderblush\": [255,240,245,1],\n  \"lawngreen\": [124,252,0,1], \"lemonchiffon\": [255,250,205,1],\n  \"lightblue\": [173,216,230,1], \"lightcoral\": [240,128,128,1],\n  \"lightcyan\": [224,255,255,1], \"lightgoldenrodyellow\": [250,250,210,1],\n  \"lightgray\": [211,211,211,1], \"lightgreen\": [144,238,144,1],\n  \"lightgrey\": [211,211,211,1], \"lightpink\": [255,182,193,1],\n  \"lightsalmon\": [255,160,122,1], \"lightseagreen\": [32,178,170,1],\n  \"lightskyblue\": [135,206,250,1], \"lightslategray\": [119,136,153,1],\n  \"lightslategrey\": [119,136,153,1], \"lightsteelblue\": [176,196,222,1],\n  \"lightyellow\": [255,255,224,1], \"lime\": [0,255,0,1],\n  \"limegreen\": [50,205,50,1], \"linen\": [250,240,230,1],\n  \"magenta\": [255,0,255,1], \"maroon\": [128,0,0,1],\n  \"mediumaquamarine\": [102,205,170,1], \"mediumblue\": [0,0,205,1],\n  \"mediumorchid\": [186,85,211,1], \"mediumpurple\": [147,112,219,1],\n  \"mediumseagreen\": [60,179,113,1], \"mediumslateblue\": [123,104,238,1],\n  \"mediumspringgreen\": [0,250,154,1], \"mediumturquoise\": [72,209,204,1],\n  \"mediumvioletred\": [199,21,133,1], \"midnightblue\": [25,25,112,1],\n  \"mintcream\": [245,255,250,1], \"mistyrose\": [255,228,225,1],\n  \"moccasin\": [255,228,181,1], \"navajowhite\": [255,222,173,1],\n  \"navy\": [0,0,128,1], \"oldlace\": [253,245,230,1],\n  \"olive\": [128,128,0,1], \"olivedrab\": [107,142,35,1],\n  \"orange\": [255,165,0,1], \"orangered\": [255,69,0,1],\n  \"orchid\": [218,112,214,1], \"palegoldenrod\": [238,232,170,1],\n  \"palegreen\": [152,251,152,1], \"paleturquoise\": [175,238,238,1],\n  \"palevioletred\": [219,112,147,1], \"papayawhip\": [255,239,213,1],\n  \"peachpuff\": [255,218,185,1], \"peru\": [205,133,63,1],\n  \"pink\": [255,192,203,1], \"plum\": [221,160,221,1],\n  \"powderblue\": [176,224,230,1], \"purple\": [128,0,128,1],\n  \"rebeccapurple\": [102,51,153,1],\n  \"red\": [255,0,0,1], \"rosybrown\": [188,143,143,1],\n  \"royalblue\": [65,105,225,1], \"saddlebrown\": [139,69,19,1],\n  \"salmon\": [250,128,114,1], \"sandybrown\": [244,164,96,1],\n  \"seagreen\": [46,139,87,1], \"seashell\": [255,245,238,1],\n  \"sienna\": [160,82,45,1], \"silver\": [192,192,192,1],\n  \"skyblue\": [135,206,235,1], \"slateblue\": [106,90,205,1],\n  \"slategray\": [112,128,144,1], \"slategrey\": [112,128,144,1],\n  \"snow\": [255,250,250,1], \"springgreen\": [0,255,127,1],\n  \"steelblue\": [70,130,180,1], \"tan\": [210,180,140,1],\n  \"teal\": [0,128,128,1], \"thistle\": [216,191,216,1],\n  \"tomato\": [255,99,71,1], \"turquoise\": [64,224,208,1],\n  \"violet\": [238,130,238,1], \"wheat\": [245,222,179,1],\n  \"white\": [255,255,255,1], \"whitesmoke\": [245,245,245,1],\n  \"yellow\": [255,255,0,1], \"yellowgreen\": [154,205,50,1]}\n\nfunction clamp_css_byte(i) {  // Clamp to integer 0 .. 255.\n  i = Math.round(i);  // Seems to be what Chrome does (vs truncation).\n  return i < 0 ? 0 : i > 255 ? 255 : i;\n}\n\nfunction clamp_css_float(f) {  // Clamp to float 0.0 .. 1.0.\n  return f < 0 ? 0 : f > 1 ? 1 : f;\n}\n\nfunction parse_css_int(str) {  // int or percentage.\n  if (str[str.length - 1] === '%')\n    return clamp_css_byte(parseFloat(str) / 100 * 255);\n  return clamp_css_byte(parseInt(str));\n}\n\nfunction parse_css_float(str) {  // float or percentage.\n  if (str[str.length - 1] === '%')\n    return clamp_css_float(parseFloat(str) / 100);\n  return clamp_css_float(parseFloat(str));\n}\n\nfunction css_hue_to_rgb(m1, m2, h) {\n  if (h < 0) h += 1;\n  else if (h > 1) h -= 1;\n\n  if (h * 6 < 1) return m1 + (m2 - m1) * h * 6;\n  if (h * 2 < 1) return m2;\n  if (h * 3 < 2) return m1 + (m2 - m1) * (2/3 - h) * 6;\n  return m1;\n}\n\nfunction parseCSSColor(css_str) {\n  // Remove all whitespace, not compliant, but should just be more accepting.\n  var str = css_str.replace(/ /g, '').toLowerCase();\n\n  // Color keywords (and transparent) lookup.\n  if (str in kCSSColorTable) return kCSSColorTable[str].slice();  // dup.\n\n  // #abc and #abc123 syntax.\n  if (str[0] === '#') {\n    if (str.length === 4) {\n      var iv = parseInt(str.substr(1), 16);  // TODO(deanm): Stricter parsing.\n      if (!(iv >= 0 && iv <= 0xfff)) return null;  // Covers NaN.\n      return [((iv & 0xf00) >> 4) | ((iv & 0xf00) >> 8),\n              (iv & 0xf0) | ((iv & 0xf0) >> 4),\n              (iv & 0xf) | ((iv & 0xf) << 4),\n              1];\n    } else if (str.length === 7) {\n      var iv = parseInt(str.substr(1), 16);  // TODO(deanm): Stricter parsing.\n      if (!(iv >= 0 && iv <= 0xffffff)) return null;  // Covers NaN.\n      return [(iv & 0xff0000) >> 16,\n              (iv & 0xff00) >> 8,\n              iv & 0xff,\n              1];\n    }\n\n    return null;\n  }\n\n  var op = str.indexOf('('), ep = str.indexOf(')');\n  if (op !== -1 && ep + 1 === str.length) {\n    var fname = str.substr(0, op);\n    var params = str.substr(op+1, ep-(op+1)).split(',');\n    var alpha = 1;  // To allow case fallthrough.\n    switch (fname) {\n      case 'rgba':\n        if (params.length !== 4) return null;\n        alpha = parse_css_float(params.pop());\n        // Fall through.\n      case 'rgb':\n        if (params.length !== 3) return null;\n        return [parse_css_int(params[0]),\n                parse_css_int(params[1]),\n                parse_css_int(params[2]),\n                alpha];\n      case 'hsla':\n        if (params.length !== 4) return null;\n        alpha = parse_css_float(params.pop());\n        // Fall through.\n      case 'hsl':\n        if (params.length !== 3) return null;\n        var h = (((parseFloat(params[0]) % 360) + 360) % 360) / 360;  // 0 .. 1\n        // NOTE(deanm): According to the CSS spec s/l should only be\n        // percentages, but we don't bother and let float or percentage.\n        var s = parse_css_float(params[1]);\n        var l = parse_css_float(params[2]);\n        var m2 = l <= 0.5 ? l * (s + 1) : l + s - l * s;\n        var m1 = l * 2 - m2;\n        return [clamp_css_byte(css_hue_to_rgb(m1, m2, h+1/3) * 255),\n                clamp_css_byte(css_hue_to_rgb(m1, m2, h) * 255),\n                clamp_css_byte(css_hue_to_rgb(m1, m2, h-1/3) * 255),\n                alpha];\n      default:\n        return null;\n    }\n  }\n\n  return null;\n}\n\ntry { exports.parseCSSColor = parseCSSColor } catch(e) { }\n","export function lerp(a: number, b: number, t: number): number {\n    return (a * (1 - t)) + (b * t);\n}\n\nexport {lerp as number};\n","import {parseCSSColor} from 'csscolorparser';\nimport {lerp} from './lerp';\n\nimport type {LUT} from '../types/lut';\n\n// Color strings are parsed repeatedly during style load and evaluation; since Color\n// is immutable, parsed instances can be safely shared and cached by input string.\nconst colorCache: Map<string, Color> = new Map();\n\n/**\n * An RGBA color value. Create instances from color strings using the static\n * method `Color.parse`. The constructor accepts RGB channel values in the range\n * `[0, 1]`, premultiplied by A.\n *\n * @param {number} r The red channel.\n * @param {number} g The green channel.\n * @param {number} b The blue channel.\n * @param {number} a The alpha channel.\n * @private\n */\nclass Color {\n    readonly r: number;\n    readonly g: number;\n    readonly b: number;\n    readonly a: number;\n\n    constructor(r: number, g: number, b: number, a: number = 1) {\n        this.r = r;\n        this.g = g;\n        this.b = b;\n        this.a = a;\n    }\n\n    static black: Color;\n    static white: Color;\n    static transparent: Color;\n    static red: Color;\n    static blue: Color;\n\n    /**\n     * Parses valid CSS color strings and returns a `Color` instance.\n     * @returns A `Color` instance, or `undefined` if the input is not a valid color string.\n     */\n    static parse(input?: string | Color | null): Color | undefined {\n        if (!input) {\n            return undefined;\n        }\n\n        if (input instanceof Color) {\n            return input;\n        }\n\n        if (typeof input !== 'string') {\n            return undefined;\n        }\n\n        const cached = colorCache.get(input);\n        if (cached) {\n            return cached;\n        }\n\n        const rgba = parseCSSColor(input);\n        if (!rgba) {\n            return undefined;\n        }\n\n        const color = new Color(\n            rgba[0] / 255,\n            rgba[1] / 255,\n            rgba[2] / 255,\n            rgba[3]\n        );\n        colorCache.set(input, color);\n        return color;\n    }\n\n    /**\n     * Returns an RGBA string representing the color value.\n     *\n     * @returns An RGBA string.\n     * @example\n     * var purple = new Color.parse('purple');\n     * purple.toString; // = \"rgba(128,0,128,1)\"\n     * var translucentGreen = new Color.parse('rgba(26, 207, 26, .73)');\n     * translucentGreen.toString(); // = \"rgba(26,207,26,0.73)\"\n     */\n    toString(): string {\n        const {r, g, b, a} = this;\n        return `rgba(${Math.round(r * 255)},${Math.round(g * 255)},${Math.round(b * 255)},${a})`;\n    }\n\n    toNonPremultipliedRenderColor(lut: LUT | null): NonPremultipliedRenderColor {\n        const {r, g, b, a} = this;\n        return new NonPremultipliedRenderColor(lut, r, g, b, a);\n    }\n\n    toPremultipliedRenderColor(lut: LUT | null): NonPremultipliedRenderColor {\n        const {r, g, b, a} = this;\n        return new PremultipliedRenderColor(lut, r * a, g * a, b * a, a);\n    }\n\n    clone(): Color {\n        return new Color(this.r, this.g, this.b, this.a);\n    }\n}\n\nexport abstract class RenderColor {\n    premultiplied: boolean = false;\n\n    r: number;\n    g: number;\n    b: number;\n    a: number;\n\n    constructor(lut: LUT | null, r: number, g: number, b: number, a: number, premultiplied: boolean = false) {\n        this.premultiplied = premultiplied;\n        if (!lut) {\n            this.r = r;\n            this.g = g;\n            this.b = b;\n            this.a = a;\n        } else {\n            const N = lut.image.height;\n            const N2 = N * N;\n\n            // Normalize to cube dimensions.\n\n            if (this.premultiplied) {\n                r = a === 0 ? 0 : (r / a) * (N - 1);\n                g = a === 0 ? 0 : (g / a) * (N - 1);\n                b = a === 0 ? 0 : (b / a) * (N - 1);\n            } else {\n                r = r * (N - 1);\n                g = g * (N - 1);\n                b = b * (N - 1);\n            }\n\n            // Clamp to valid range [0, N-1] to prevent out-of-bounds access\n            r = Math.max(0, Math.min(N - 1, r));\n            g = Math.max(0, Math.min(N - 1, g));\n            b = Math.max(0, Math.min(N - 1, b));\n\n            // Determine boundary values for the cube the color is in.\n            const r0 = Math.floor(r);\n            const g0 = Math.floor(g);\n            const b0 = Math.floor(b);\n            const r1 = Math.ceil(r);\n            const g1 = Math.ceil(g);\n            const b1 = Math.ceil(b);\n\n            // Determine weights within the cube.\n            const rw = r - r0;\n            const gw = g - g0;\n            const bw = b - b0;\n\n            const data = lut.image.data;\n            const i0 = (r0 + g0 * N2 + b0 * N) * 4;\n            const i1 = (r0 + g0 * N2 + b1 * N) * 4;\n            const i2 = (r0 + g1 * N2 + b0 * N) * 4;\n            const i3 = (r0 + g1 * N2 + b1 * N) * 4;\n            const i4 = (r1 + g0 * N2 + b0 * N) * 4;\n            const i5 = (r1 + g0 * N2 + b1 * N) * 4;\n            const i6 = (r1 + g1 * N2 + b0 * N) * 4;\n            const i7 = (r1 + g1 * N2 + b1 * N) * 4;\n\n            // r/g/b are clamped to [0, N-1] above, so every index below is within bounds.\n            // Trilinear interpolation.\n            this.r = lerp(\n                lerp(\n                    lerp(data[i0]!, data[i1]!, bw),\n                    lerp(data[i2]!, data[i3]!, bw), gw),\n                lerp(\n                    lerp(data[i4]!, data[i5]!, bw),\n                    lerp(data[i6]!, data[i7]!, bw), gw), rw) / 255 * (this.premultiplied ? a : 1);\n            this.g = lerp(\n                lerp(\n                    lerp(data[i0 + 1]!, data[i1 + 1]!, bw),\n                    lerp(data[i2 + 1]!, data[i3 + 1]!, bw), gw),\n                lerp(\n                    lerp(data[i4 + 1]!, data[i5 + 1]!, bw),\n                    lerp(data[i6 + 1]!, data[i7 + 1]!, bw), gw), rw) / 255 * (this.premultiplied ? a : 1);\n            this.b = lerp(\n                lerp(\n                    lerp(data[i0 + 2]!, data[i1 + 2]!, bw),\n                    lerp(data[i2 + 2]!, data[i3 + 2]!, bw), gw),\n                lerp(\n                    lerp(data[i4 + 2]!, data[i5 + 2]!, bw),\n                    lerp(data[i6 + 2]!, data[i7 + 2]!, bw), gw), rw) / 255 * (this.premultiplied ? a : 1);\n            this.a = a;\n        }\n    }\n\n    /**\n     * Returns an RGBA array of values representing the color.\n     * @returns An array of RGBA color values in the range [0, 255].\n     */\n    toArray(): [number, number, number, number] {\n        const {r, g, b, a} = this;\n\n        return [\n            r * 255,\n            g * 255,\n            b * 255,\n            a\n        ];\n\n    }\n\n    /**\n     * Returns an HSLA array of values representing the color, unpremultiplied by A.\n     * @returns An array of HSLA color values.\n     */\n    toHslaArray(): [number, number, number, number] {\n        let {r, g, b, a} = this;\n\n        if (this.premultiplied) {\n            if (a === 0) return [0, 0, 0, 0];\n            const invA = 1 / a; // Single division, then multiply\n            r *= invA;\n            g *= invA;\n            b *= invA;\n        }\n\n        const red = Math.min(Math.max(r, 0), 1);\n        const green = Math.min(Math.max(g, 0), 1);\n        const blue = Math.min(Math.max(b, 0), 1);\n\n        const min = Math.min(red, green, blue);\n        const max = Math.max(red, green, blue);\n        const delta = max - min;\n\n        const l = (min + max) * 0.5;\n\n        if (delta === 0) {\n            return [0, 0, l * 100, a];\n        }\n\n        const s = l > 0.5 ? delta / (2 - max - min) : delta / (max + min);\n\n        let h: number;\n        switch (max) {\n        case red:\n            h = ((green - blue) / delta + (green < blue ? 6 : 0)) * 60;\n            break;\n        case green:\n            h = ((blue - red) / delta + 2) * 60;\n            break;\n        default: // blue\n            h = ((red - green) / delta + 4) * 60;\n        }\n\n        return [h, s * 100, l * 100, a];\n    }\n\n    /**\n     * Returns a RGBA array of float values representing the color.\n     *\n     * @returns An array of RGBA color values in the range [0, 1].\n     */\n    toArray01(): [number, number, number, number] {\n        const {r, g, b, a} = this;\n\n        return [\n            r,\n            g,\n            b,\n            a\n        ];\n    }\n\n    /**\n     * Returns an RGB array of values representing the color, unpremultiplied by A and multiplied by a scalar.\n     *\n     * @param {number} scale A scale to apply to the unpremultiplied-alpha values.\n     * @returns An array of RGB color values in the range [0, 1].\n     */\n    toArray01Scaled(scale: number): [number, number, number] {\n        const {r, g, b} = this;\n\n        return [\n            r * scale,\n            g * scale,\n            b * scale\n        ];\n    }\n\n    /**\n     * Returns an RGBA array of values representing the color converted to linear color space.\n     * The color is defined by sRGB primaries, but the sRGB transfer function\n     * is reversed to obtain linear energy.\n     * @returns An array of RGBA color values in the range [0, 1].\n     */\n    toArray01Linear(): [number, number, number, number] {\n        const {r, g, b, a} = this;\n\n        return [\n            Math.pow(r, 2.2),\n            Math.pow(g, 2.2),\n            Math.pow(b, 2.2),\n            a\n        ];\n    }\n}\n\n/**\n * Renderable color created from a Color and an optional LUT value.\n * Represent a color value with non-premultiplied alpha.\n */\nexport class NonPremultipliedRenderColor extends RenderColor {\n    constructor(lut: LUT | null, r: number, g: number, b: number, a: number) {\n        super(lut, r, g, b, a, false);\n    }\n}\n\n/**\n * Renderable color created from a Color and an optional LUT value.\n * Represent a color value with premultiplied alpha.\n */\nexport class PremultipliedRenderColor extends RenderColor {\n    constructor(lut: LUT | null, r: number, g: number, b: number, a: number) {\n        super(lut, r, g, b, a, true);\n    }\n}\n\nColor.black = new Color(0, 0, 0, 1);\nColor.white = new Color(1, 1, 1, 1);\nColor.transparent = new Color(0, 0, 0, 0);\nColor.red = new Color(1, 0, 0, 1);\nColor.blue = new Color(0, 0, 1, 1);\n\nexport default Color;\n","export default class Collator {\n    locale: string | null;\n    sensitivity: 'base' | 'accent' | 'case' | 'variant';\n    collator: Intl.Collator;\n\n    constructor(caseSensitive: boolean, diacriticSensitive: boolean, locale: string | null) {\n        if (caseSensitive)\n            this.sensitivity = diacriticSensitive ? 'variant' : 'case';\n        else\n            this.sensitivity = diacriticSensitive ? 'accent' : 'base';\n\n        this.locale = locale;\n        this.collator = new Intl.Collator(this.locale ? this.locale : [],\n            {sensitivity: this.sensitivity, usage: 'search'});\n    }\n\n    compare(lhs: string, rhs: string): number {\n        return this.collator.compare(lhs, rhs);\n    }\n\n    resolvedLocale(): string {\n        // We create a Collator without \"usage: search\" because we don't want\n        // the search options encoded in our result (e.g. \"en-u-co-search\")\n        return new Intl.Collator(this.locale ? this.locale : [])\n            .resolvedOptions().locale;\n    }\n}\n","import type Color from '../../util/color';\nimport type ResolvedImage from '../types/resolved_image';\n\nexport class FormattedSection {\n    text: string;\n    image: ResolvedImage | null;\n    scale: number | null;\n    fontStack: string | null;\n    textColor: Color | null;\n\n    constructor(text: string, image: ResolvedImage | null, scale: number | null, fontStack: string | null, textColor: Color | null) {\n        // combine characters so that diacritic marks are not separate code points\n        this.text = text.normalize ? text.normalize() : text;\n        this.image = image;\n        this.scale = scale;\n        this.fontStack = fontStack;\n        this.textColor = textColor;\n    }\n}\n\nexport default class Formatted {\n    sections: Array<FormattedSection>;\n\n    constructor(sections: Array<FormattedSection>) {\n        this.sections = sections;\n    }\n\n    static fromString(unformatted: string): Formatted {\n        return new Formatted([new FormattedSection(unformatted, null, null, null, null)]);\n    }\n\n    isEmpty(): boolean {\n        if (this.sections.length === 0) return true;\n        return !this.sections.some(section => {\n            if (section.text.length !== 0) return true;\n            if (!section.image) return false;\n            return section.image.hasPrimary();\n        });\n    }\n\n    static factory(text: Formatted | string): Formatted {\n        if (text instanceof Formatted) {\n            return text;\n        } else {\n            return Formatted.fromString(text);\n        }\n    }\n\n    toString(): string {\n        if (this.sections.length === 0) return '';\n        return this.sections.map(section => section.text).join('');\n    }\n\n    serialize(): Array<unknown> {\n        const serialized: Array<unknown> = [\"format\"];\n        for (const section of this.sections) {\n            if (section.image) {\n                const primaryId = section.image.getPrimary().id.toString();\n                serialized.push(['image', primaryId]);\n                continue;\n            }\n            serialized.push(section.text);\n            const options: {\n                [key: string]: unknown;\n            } = {};\n            if (section.fontStack) {\n                options[\"text-font\"] = [\"literal\", section.fontStack.split(',')];\n            }\n            if (section.scale) {\n                options[\"font-scale\"] = section.scale;\n            }\n            if (section.textColor) {\n                options[\"text-color\"] = ([\"rgba\"] as Array<unknown>).concat(section.textColor.toNonPremultipliedRenderColor(null).toArray());\n            }\n            serialized.push(options);\n        }\n        return serialized;\n    }\n}\n","import type {Brand} from '../../types/brand';\n\nconst separator = '\\u001F';\n\nexport type ImageIdSpec = {\n    name: string;\n    iconsetId?: string;\n};\n\n/**\n * `StringifiedImageId` is a stringified version of the `ImageId`.\n *\n * @private\n */\nexport type StringifiedImageId = Brand<string, 'ImageId'>;\n\n/**\n * `ImageId` is a reference to an {@link ImageVariant} in the sprite or iconset.\n *\n * @private\n */\nexport class ImageId {\n    name: string;\n    iconsetId?: string;\n\n    constructor(id: string | ImageId | ImageIdSpec) {\n        if (typeof id === 'string') {\n            this.name = id;\n        } else {\n            this.name = id.name;\n            this.iconsetId = id.iconsetId;\n        }\n    }\n\n    static from(id: string | ImageId | ImageIdSpec): ImageId {\n        return new ImageId(id);\n    }\n\n    static toString(id: ImageId | ImageIdSpec): StringifiedImageId {\n        return (id.iconsetId ? `${id.name}${separator}${id.iconsetId}` : id.name) as StringifiedImageId;\n    }\n\n    static parse(str: StringifiedImageId): ImageId | null {\n        const [name, iconsetId] = str.split(separator) as [string, string | undefined];\n        return new ImageId({name, iconsetId});\n    }\n\n    static isEqual(a: ImageId | ImageIdSpec, b: ImageId | ImageIdSpec): boolean {\n        return a.name === b.name && a.iconsetId === b.iconsetId;\n    }\n\n    toString(): StringifiedImageId {\n        return ImageId.toString(this);\n    }\n\n    serialize(): ImageIdSpec {\n        return {name: this.name, iconsetId: this.iconsetId};\n    }\n}\n","import {ImageId} from './image_id';\n\nimport type Color from '../../util/color';\nimport type {Brand} from '../../types/brand';\nimport type {ImageIdSpec} from './image_id';\n\n/**\n * `StringifiedImageVariant` is a stringified version of the `ImageVariant`.\n *\n * @private\n */\nexport type StringifiedImageVariant = Brand<string, 'ImageVariant'>;\n\n/**\n * {@link ImageVariant} rasterization options.\n *\n * @private\n */\nexport type RasterizationOptions = {\n    params?: Record<string, Color>;\n    sx?: number;\n    sy?: number;\n};\n\n/**\n * `ImageVariant` is a component of {@link ResolvedImage}\n * that represents either the primary or secondary image\n * along with its rendering configuration.\n *\n * @private\n */\nexport class ImageVariant implements RasterizationOptions {\n    id: ImageId;\n    params?: Record<string, Color>;\n    sx: number;\n    sy: number;\n\n    constructor(id: string | ImageIdSpec, options: RasterizationOptions = {}) {\n        this.id = ImageId.from(id);\n        this.params = options.params;\n        this.sx = options.sx || 1;\n        this.sy = options.sy || 1;\n    }\n\n    toString(): StringifiedImageVariant {\n        return JSON.stringify(this) as StringifiedImageVariant;\n    }\n\n    static parse(str: StringifiedImageVariant): ImageVariant | null {\n        let id: ImageIdSpec | undefined;\n        let params: Record<string, Color> | undefined;\n        let sx: number | undefined;\n        let sy: number | undefined;\n\n        try {\n            // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\n            ({id, params, sx, sy} = JSON.parse(str) || {});\n        } catch (e) {\n            return null;\n        }\n\n        if (!id) return null;\n\n        return new ImageVariant(id, {params, sx, sy});\n    }\n\n    scaleSelf(factor: number, yFactor: number = factor): this {\n        this.sx *= factor;\n        this.sy *= yFactor;\n        return this;\n    }\n}\n","import assert from '../../util/assert';\nimport {ImageId} from './image_id';\nimport {ImageVariant} from './image_variant';\n\nimport type {ImageIdSpec} from './image_id';\nimport type {RasterizationOptions} from './image_variant';\n\nexport default class ResolvedImage {\n    primaryId: ImageId;\n    primaryOptions?: RasterizationOptions;\n    secondaryId?: ImageId;\n    secondaryOptions?: RasterizationOptions;\n    available: boolean;\n\n    constructor(\n        primaryId: string | ImageIdSpec,\n        primaryOptions?: RasterizationOptions,\n        secondaryId?: string | ImageIdSpec,\n        secondaryOptions?: RasterizationOptions,\n        available: boolean = false,\n    ) {\n        this.primaryId = ImageId.from(primaryId);\n        this.primaryOptions = primaryOptions;\n        if (secondaryId) this.secondaryId = ImageId.from(secondaryId);\n        this.secondaryOptions = secondaryOptions;\n        this.available = available;\n    }\n\n    toString(): string {\n        if (this.primaryId && this.secondaryId) {\n            const primaryName = this.primaryId.name;\n            const secondaryName = this.secondaryId.name;\n            return `[${primaryName},${secondaryName}]`;\n        }\n\n        return this.primaryId.name;\n    }\n\n    hasPrimary(): boolean {\n        return !!this.primaryId;\n    }\n\n    getPrimary(): ImageVariant {\n        return new ImageVariant(this.primaryId, this.primaryOptions);\n    }\n\n    hasSecondary(): boolean {\n        return !!this.secondaryId;\n    }\n\n    getSecondary(): ImageVariant | null {\n        if (!this.secondaryId) {\n            return null;\n        }\n\n        return new ImageVariant(this.secondaryId, this.secondaryOptions);\n    }\n\n    static from(image: string | ResolvedImage): ResolvedImage {\n        if (typeof image !== 'string') return image;\n        const resolved = ResolvedImage.build({name: image});\n        assert(resolved);\n        return resolved;\n    }\n\n    static build(\n        primaryId: string | ImageIdSpec,\n        secondaryId?: string | ImageIdSpec,\n        primaryOptions?: RasterizationOptions,\n        secondaryOptions?: RasterizationOptions\n    ): ResolvedImage | null {\n        if (!primaryId || (typeof primaryId === 'object' && !('name' in primaryId))) return null; // treat empty values as no image\n        return new ResolvedImage(primaryId, primaryOptions, secondaryId, secondaryOptions);\n    }\n}\n","import assert from '../util/assert';\nimport Color from '../util/color';\nimport Collator from './types/collator';\nimport Formatted from './types/formatted';\nimport ResolvedImage from './types/resolved_image';\nimport {NullType, NumberType, StringType, BooleanType, ColorType, ObjectType, ValueType, CollatorType, FormattedType, ResolvedImageType, array} from './types';\n\nimport type {Type} from './types';\n\nexport function validateRGBA(r: unknown, g: unknown, b: unknown, a?: unknown): string | null {\n    if (!(\n        typeof r === 'number' && r >= 0 && r <= 255 &&\n        typeof g === 'number' && g >= 0 && g <= 255 &&\n        typeof b === 'number' && b >= 0 && b <= 255\n    )) {\n        const value = (typeof a === 'number' ? [r, g, b, a] : [r, g, b]) as number[];\n        return `Invalid rgba value [${value.join(', ')}]: 'r', 'g', and 'b' must be between 0 and 255.`;\n    }\n\n    if (!(\n        typeof a === 'undefined' || (typeof a === 'number' && a >= 0 && a <= 1)\n    )) {\n        return `Invalid rgba value [${([r, g, b, a] as number[]).join(', ')}]: 'a' must be between 0 and 1.`;\n    }\n\n    return null;\n}\n\nexport function validateHSLA(h: unknown, s: unknown, l: unknown, a?: unknown): string | null {\n    if (!(\n        typeof h === 'number' && h >= 0 && h <= 360\n    )) {\n        const value = (typeof a === 'number' ? [h, s, l, a] : [h, s, l]) as number[];\n        return `Invalid hsla value [${value.join(', ')}]: 'h' must be between 0 and 360.`;\n    }\n\n    if (!(\n        typeof s === 'number' && s >= 0 && s <= 100 &&\n        typeof l === 'number' && l >= 0 && l <= 100\n    )) {\n        const value = (typeof a === 'number' ? [h, s, l, a] : [h, s, l]) as number[];\n        return `Invalid hsla value [${value.join(', ')}]: 's', and 'l' must be between 0 and 100.`;\n    }\n\n    if (!(\n        typeof a === 'undefined' || (typeof a === 'number' && a >= 0 && a <= 1)\n    )) {\n        return `Invalid hsla value [${([h, s, l, a] as number[]).join(', ')}]: 'a' must be between 0 and 1.`;\n    }\n\n    return null;\n}\n\nexport type Value = null | string | boolean | number | Color | Collator | Formatted | ResolvedImage | ReadonlyArray<Value> | {readonly [key: string]: Value};\n\nexport function isValue(mixed: unknown): boolean {\n    if (mixed === null) {\n        return true;\n    } else if (typeof mixed === 'string') {\n        return true;\n    } else if (typeof mixed === 'boolean') {\n        return true;\n    } else if (typeof mixed === 'number') {\n        return true;\n    } else if (mixed instanceof Color) {\n        return true;\n    } else if (mixed instanceof Collator) {\n        return true;\n    } else if (mixed instanceof Formatted) {\n        return true;\n    } else if (mixed instanceof ResolvedImage) {\n        return true;\n    } else if (Array.isArray(mixed)) {\n        for (const item of mixed) {\n            if (!isValue(item)) {\n                return false;\n            }\n        }\n        return true;\n    } else if (typeof mixed === 'object') {\n        for (const key in mixed) {\n            if (!isValue(mixed[key])) {\n                return false;\n            }\n        }\n        return true;\n    } else {\n        return false;\n    }\n}\n\nexport function typeOf(value: Value): Type {\n    if (value === null) {\n        return NullType;\n    } else if (typeof value === 'string') {\n        return StringType;\n    } else if (typeof value === 'boolean') {\n        return BooleanType;\n    } else if (typeof value === 'number') {\n        return NumberType;\n    } else if (value instanceof Color) {\n        return ColorType;\n    } else if (value instanceof Collator) {\n        return CollatorType;\n    } else if (value instanceof Formatted) {\n        return FormattedType;\n    } else if (value instanceof ResolvedImage) {\n        return ResolvedImageType;\n    } else if (Array.isArray(value)) {\n        const length = value.length;\n        let itemType: Type;\n\n        for (const item of value) {\n            // eslint-disable-next-line @typescript-eslint/no-unsafe-argument\n            const t = typeOf(item);\n            if (!itemType) {\n                itemType = t;\n            } else if (itemType === t) {\n                continue;\n            } else {\n                itemType = ValueType;\n                break;\n            }\n        }\n\n        return array(itemType || ValueType, length);\n    } else {\n        assert(typeof value === 'object');\n        return ObjectType;\n    }\n}\n\nexport function toString(value: Value): string {\n    if (value === null) {\n        return '';\n    } else if (typeof value === 'string' || typeof value === 'number' || typeof value === 'boolean') {\n        return String(value);\n    } else if (value instanceof Formatted || value instanceof ResolvedImage || value instanceof Color) {\n        return value.toString();\n    } else {\n        return JSON.stringify(value);\n    }\n}\n\nexport {Color, Collator};\n","import assert from '../../util/assert';\nimport {isValue, typeOf, Color} from '../values';\nimport Formatted from '../types/formatted';\n\nimport type {Type} from '../types';\nimport type {Value}  from '../values';\nimport type {Expression, SerializedExpression} from '../expression';\nimport type ParsingContext from '../parsing_context';\n\nclass Literal implements Expression {\n    type: Type;\n    value: Value;\n\n    constructor(type: Type, value: Value) {\n        this.type = type;\n        this.value = value;\n    }\n\n    static parse(args: ReadonlyArray<unknown>, context: ParsingContext): void | Literal {\n        if (args.length !== 2)\n            return context.error(`'literal' expression requires exactly one argument, but found ${args.length - 1} instead.`);\n\n        if (!isValue(args[1]))\n            return context.error(`invalid value`);\n\n        const value = args[1] as Value;\n        let type = typeOf(value);\n\n        // special case: infer the item type if possible for zero-length arrays\n        const expected = context.expectedType;\n        if (\n            type.kind === 'array' &&\n            type.N === 0 &&\n            expected &&\n            expected.kind === 'array' &&\n            (typeof expected.N !== 'number' || expected.N === 0)\n        ) {\n            type = expected;\n        }\n\n        return new Literal(type, value);\n    }\n\n    evaluate(): Value {\n        return this.value;\n    }\n\n    eachChild() {}\n\n    outputDefined(): boolean {\n        return true;\n    }\n\n    serialize(): SerializedExpression {\n        if (this.type.kind === 'array' || this.type.kind === 'object') {\n            return [\"literal\", this.value];\n        } else if (this.value instanceof Color) {\n            // Constant-folding can generate Literal expressions that you\n            // couldn't actually generate with a \"literal\" expression,\n            // so we have to implement an equivalent serialization here\n            return [\"rgba\" as SerializedExpression].concat(this.value.toNonPremultipliedRenderColor(null).toArray());\n        } else if (this.value instanceof Formatted) {\n            // Same as Color\n            return this.value.serialize();\n        } else {\n            assert(this.value === null ||\n                typeof this.value === 'string' ||\n                typeof this.value === 'number' ||\n                typeof this.value === 'boolean');\n            return this.value as SerializedExpression;\n        }\n    }\n}\n\nexport default Literal;\n","class RuntimeError {\n    name: string;\n    message: string;\n\n    constructor(message: string) {\n        this.name = 'ExpressionEvaluationError';\n        this.message = message;\n    }\n\n    toJSON(): string {\n        return this.message;\n    }\n}\n\nexport default RuntimeError;\n","import assert from '../../util/assert';\nimport {\n    ObjectType,\n    ValueType,\n    StringType,\n    NumberType,\n    BooleanType,\n    checkSubtype,\n    toString,\n    array\n} from '../types';\nimport RuntimeError from '../runtime_error';\nimport {typeOf} from '../values';\n\nimport type {Expression, SerializedExpression} from '../expression';\nimport type ParsingContext from '../parsing_context';\nimport type EvaluationContext from '../evaluation_context';\nimport type {Type} from '../types';\n\nconst types = {\n    string: StringType,\n    number: NumberType,\n    boolean: BooleanType,\n    object: ObjectType\n};\n\nclass Assertion implements Expression {\n    type: Type;\n    args: Array<Expression>;\n\n    constructor(type: Type, args: Array<Expression>) {\n        this.type = type;\n        this.args = args;\n    }\n\n    static parse(args: ReadonlyArray<unknown>, context: ParsingContext): Expression | void {\n        if (args.length < 2)\n            return context.error(`Expected at least one argument.`);\n\n        let i = 1;\n        let type: Type;\n\n        const name = args[0] as string;\n        if (name === 'array') {\n            let itemType: Type;\n            if (args.length > 2) {\n                const type = args[1];\n                if (typeof type !== 'string' || !(type in types) || type === 'object')\n                    return context.error('The item type argument of \"array\" must be one of string, number, boolean', 1);\n                // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\n                itemType = types[type];\n                i++;\n            } else {\n                itemType = ValueType;\n            }\n\n            let N: number | null | undefined;\n            if (args.length > 3) {\n                if (args[2] !== null &&\n                    (typeof args[2] !== 'number' ||\n                        args[2] < 0 ||\n                        args[2] !== Math.floor(args[2]))\n                ) {\n                    return context.error('The length argument to \"array\" must be a positive integer literal', 2);\n                }\n                N = (args[2] as number);\n                i++;\n            }\n\n            type = array(itemType, N);\n        } else {\n            assert(types[name], name);\n            // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\n            type = types[name];\n        }\n\n        const parsed = [];\n        for (; i < args.length; i++) {\n            const input = context.parse(args[i], i, ValueType);\n            if (!input) return null;\n            parsed.push(input);\n        }\n\n        // eslint-disable-next-line @typescript-eslint/no-unsafe-argument\n        return new Assertion(type, parsed);\n    }\n\n    // eslint-disable-next-line @typescript-eslint/no-explicit-any\n    evaluate(ctx: EvaluationContext): any {\n        for (let i = 0; i < this.args.length; i++) {\n            // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\n            const value = this.args[i].evaluate(ctx);\n            // eslint-disable-next-line @typescript-eslint/no-unsafe-argument\n            const error = checkSubtype(this.type, typeOf(value));\n            if (!error) {\n                return value;\n            } else if (i === this.args.length - 1) {\n                // eslint-disable-next-line @typescript-eslint/no-unsafe-argument\n                throw new RuntimeError(`The expression ${JSON.stringify(this.args[i].serialize())} evaluated to ${toString(typeOf(value))} but was expected to be of type ${toString(this.type)}.`);\n            }\n        }\n\n        assert(false);\n        return null;\n    }\n\n    eachChild(fn: (_: Expression) => void) {\n        this.args.forEach(fn);\n    }\n\n    outputDefined(): boolean {\n        return this.args.every(arg => arg.outputDefined());\n    }\n\n    serialize(): SerializedExpression {\n        const type = this.type;\n        const serialized: Array<SerializedExpression> = [type.kind];\n        if (type.kind === 'array') {\n            const itemType = type.itemType;\n            if (itemType.kind === 'string' ||\n                itemType.kind === 'number' ||\n                itemType.kind === 'boolean') {\n                serialized.push(itemType.kind);\n                const N = type.N;\n                if (typeof N === 'number' || this.args.length > 1) {\n                    serialized.push(N);\n                }\n            }\n        }\n        return serialized.concat(this.args.map(arg => arg.serialize()));\n    }\n}\n\nexport default Assertion;\n","import {\n    NumberType,\n    ValueType,\n    FormattedType,\n    array,\n    StringType,\n    ColorType,\n    ResolvedImageType,\n    typeEquals,\n} from '../types';\nimport Formatted, {FormattedSection} from '../types/formatted';\nimport {toString, typeOf} from '../values';\n\nimport type {Expression, SerializedExpression} from '../expression';\nimport type EvaluationContext from '../evaluation_context';\nimport type ParsingContext from '../parsing_context';\nimport type {Type} from '../types';\n\nexport type FormattedSectionExpression = {\n    // Content of a section may be Image expression or other\n    // type of expression that is coercable to 'string'.\n    content: Expression;\n    scale: Expression | null;\n    font: Expression | null;\n    textColor: Expression | null;\n};\n\nexport default class FormatExpression implements Expression {\n    type: Type;\n    sections: Array<FormattedSectionExpression>;\n\n    constructor(sections: Array<FormattedSectionExpression>) {\n        this.type = FormattedType;\n        this.sections = sections;\n    }\n\n    static parse(args: ReadonlyArray<unknown>, context: ParsingContext): Expression | null | void {\n        if (args.length < 2) {\n            return context.error(`Expected at least one argument.`);\n        }\n\n        const firstArg = args[1];\n        if (!Array.isArray(firstArg) && typeof firstArg === 'object') {\n            return context.error(`First argument must be an image or text section.`);\n        }\n\n        const sections: Array<FormattedSectionExpression> = [];\n        let nextTokenMayBeObject = false;\n        for (let i = 1; i <= args.length - 1; ++i) {\n            const arg = args[i];\n\n            if (nextTokenMayBeObject && typeof arg === \"object\" && !Array.isArray(arg)) {\n                nextTokenMayBeObject = false;\n\n                let scale = null;\n                if (arg['font-scale']) {\n                    scale = context.parseObjectValue(arg['font-scale'], i, 'font-scale', NumberType);\n                    if (!scale) return null;\n                }\n\n                let font = null;\n                if (arg['text-font']) {\n                    font = context.parseObjectValue(arg['text-font'], i, 'text-font', array(StringType));\n                    if (!font) return null;\n                }\n\n                let textColor = null;\n                if (arg['text-color']) {\n                    textColor = context.parseObjectValue(arg['text-color'], i, 'text-color', ColorType);\n                    if (!textColor) return null;\n                }\n\n                const lastExpression = sections.at(-1);\n                // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\n                lastExpression.scale = scale;\n                // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\n                lastExpression.font = font;\n                // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\n                lastExpression.textColor = textColor;\n            } else {\n                const content = context.parse(args[i], i, ValueType);\n                if (!content) return null;\n\n                const kind = content.type.kind;\n                if (kind !== 'string' && kind !== 'value' && kind !== 'null' && kind !== 'resolvedImage')\n                    return context.error(`Formatted text type must be 'string', 'value', 'image' or 'null'.`);\n\n                nextTokenMayBeObject = true;\n                sections.push({content, scale: null, font: null, textColor: null});\n            }\n        }\n\n        return new FormatExpression(sections);\n    }\n\n    evaluate(ctx: EvaluationContext): Formatted {\n        const evaluateSection = (section: FormattedSectionExpression) => {\n            // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\n            const evaluatedContent = section.content.evaluate(ctx);\n            // eslint-disable-next-line @typescript-eslint/no-unsafe-argument\n            if (typeEquals(typeOf(evaluatedContent), ResolvedImageType)) {\n                // eslint-disable-next-line @typescript-eslint/no-unsafe-argument\n                return new FormattedSection('', evaluatedContent, null, null, null);\n            }\n\n            return new FormattedSection(\n                    // eslint-disable-next-line @typescript-eslint/no-unsafe-argument\n                    toString(evaluatedContent),\n                    null,\n                    // eslint-disable-next-line @typescript-eslint/no-unsafe-argument\n                    section.scale ? section.scale.evaluate(ctx) : null,\n                    section.font ? (section.font.evaluate(ctx) as string[]).join(',') : null,\n                    // eslint-disable-next-line @typescript-eslint/no-unsafe-argument\n                    section.textColor ? section.textColor.evaluate(ctx) : null\n            );\n        };\n\n        return new Formatted(this.sections.map(evaluateSection));\n    }\n\n    eachChild(fn: (_: Expression) => void) {\n        for (const section of this.sections) {\n            fn(section.content);\n            if (section.scale) {\n                fn(section.scale);\n            }\n            if (section.font) {\n                fn(section.font);\n            }\n            if (section.textColor) {\n                fn(section.textColor);\n            }\n        }\n    }\n\n    outputDefined(): boolean {\n        // Technically the combinatoric set of all children\n        // Usually, this.text will be undefined anyway\n        return false;\n    }\n\n    serialize(): SerializedExpression {\n        const serialized: SerializedExpression[] = [\"format\"];\n        for (const section of this.sections) {\n            serialized.push(section.content.serialize());\n            const options = {} as SerializedExpression;\n            if (section.scale) {\n                options['font-scale'] = section.scale.serialize();\n            }\n            if (section.font) {\n                options['text-font'] = section.font.serialize();\n            }\n            if (section.textColor) {\n                options['text-color'] = section.textColor.serialize();\n            }\n            serialized.push(options);\n        }\n        return serialized;\n    }\n}\n","import ResolvedImage from '../types/resolved_image';\nimport {ImageId} from '../types/image_id';\nimport {ColorType, ResolvedImageType, StringType} from '../types';\n\nimport type EvaluationContext from '../evaluation_context';\nimport type Color from '../../util/color';\nimport type ParsingContext from '../parsing_context';\nimport type {Type} from '../types';\nimport type {Expression, SerializedExpression} from '../expression';\n\nexport type ImageParams = Record<string, Expression>;\nexport type IconsetParams = {id: string};\n\nexport type ImageOptions = {\n    params?: ImageParams;\n    iconset?: IconsetParams;\n};\n\ntype SerializedImageOptions = {\n    params?: Record<string, SerializedExpression>;\n    iconset?: IconsetParams;\n};\n\nfunction isImageOptions(value: unknown): value is ImageOptions {\n    return value !== null && typeof value === 'object' && !Array.isArray(value);\n}\n\nexport default class ImageExpression implements Expression {\n    type: Type;\n\n    namePrimary: Expression;\n    paramsPrimary?: ImageParams;\n    iconsetIdPrimary?: string;\n\n    nameSecondary?: Expression;\n    paramsSecondary?: ImageParams;\n    iconsetIdSecondary?: string;\n\n    _imageWarnHistory: Record<string, boolean> = {};\n\n    constructor(\n        inputPrimary: Expression,\n        inputSecondary?: Expression | null,\n        inputPrimaryOptions?: ImageOptions,\n        inputSecondaryOptions?: ImageOptions\n    ) {\n        this.type = ResolvedImageType;\n        this.namePrimary = inputPrimary;\n        this.nameSecondary = inputSecondary;\n\n        if (inputPrimaryOptions) {\n            this.paramsPrimary = inputPrimaryOptions.params;\n            this.iconsetIdPrimary = inputPrimaryOptions.iconset ? inputPrimaryOptions.iconset.id : undefined;\n        }\n\n        if (inputSecondaryOptions) {\n            this.paramsSecondary = inputSecondaryOptions.params;\n            this.iconsetIdSecondary = inputSecondaryOptions.iconset ? inputSecondaryOptions.iconset.id : undefined;\n        }\n    }\n\n    static parse(args: ReadonlyArray<unknown>, context: ParsingContext): Expression | null | void {\n        if (args.length < 2) {\n            return context.error(`Expected two or more arguments.`);\n        }\n\n        let nextArgId = 1;\n        const imageExpression: Array<{image: Expression, options?: ImageOptions}> = [];\n\n        function tryParseImage() {\n            if (nextArgId < args.length) {\n                const imageName = context.parse(args[nextArgId], nextArgId++, StringType);\n                if (!imageName) {\n                    context.error(imageExpression.length ? `Secondary image variant is not a string.` : `No image name provided.`);\n                    return false;\n                }\n\n                imageExpression.push({image: imageName, options: {}});\n                return true;\n            }\n\n            return true;\n        }\n\n        function tryParseOptions() {\n            if (nextArgId < args.length) {\n                const options = args[nextArgId];\n                if (!isImageOptions(options)) {\n                    return true;\n                }\n\n                const params = options.params;\n                const iconset = options.iconset;\n                const optionsContext = context.concat(nextArgId);\n\n                if (!params && !iconset) {\n                    nextArgId++;\n                    return true;\n                }\n\n                // Parse the image options params as expressions\n                if (params) {\n                    if (typeof params !== 'object' || params.constructor !== Object) {\n                        optionsContext.error(`Image options \\\"params\\\" should be an object`);\n                        return false;\n                    }\n\n                    const parsedParams: ImageParams = {};\n                    const childContext = optionsContext.concat(undefined, 'params');\n                    for (const key in params) {\n                        if (!key) {\n                            childContext.error(`Image parameter name should be non-empty`);\n                            return false;\n                        }\n\n                        const value = childContext.concat(undefined, key).parse(params[key], undefined, ColorType, undefined, {typeAnnotation: 'coerce'});\n                        if (!value) {\n                            return false;\n                        }\n\n                        parsedParams[key] = value;\n                    }\n\n                    imageExpression.at(-1).options.params = parsedParams;\n                }\n\n                // Validate the iconset image options\n                if (iconset) {\n                    if (typeof iconset !== 'object' || iconset.constructor !== Object) {\n                        optionsContext.error(`Image options \\\"iconset\\\" should be an object`);\n                        return false;\n                    }\n\n                    if (!iconset.id) {\n                        optionsContext.error(`Image options \\\"iconset\\\" should have an \\\"id\\\" property`);\n                        return false;\n                    }\n\n                    imageExpression.at(-1).options.iconset = iconset;\n                }\n\n                nextArgId++;\n                return true;\n            }\n\n            return true;\n        }\n\n        // Parse the primary and secondary image expressions\n        for (let i = 0; i < 2; i++) {\n            if (!tryParseImage() || !tryParseOptions()) {\n                return;\n            }\n        }\n\n        return new ImageExpression(\n            imageExpression[0].image,\n            imageExpression[1] ? imageExpression[1].image : undefined,\n            imageExpression[0].options,\n            imageExpression[1] ? imageExpression[1].options : undefined\n        );\n    }\n\n    evaluateParams(ctx: EvaluationContext, params: Record<string, Expression> | undefined): {params: Record<string, Color>} {\n        const result: Record<string, Color> = {};\n        if (params) {\n            for (const key in params) {\n                if (params[key]) {\n                    try {\n                        // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\n                        result[key] = params[key].evaluate(ctx);\n                    } catch (err) {\n                        continue;\n                    }\n                }\n            }\n        } else {\n            return undefined;\n        }\n\n        if (Object.keys(result).length === 0) {\n            return undefined;\n        }\n\n        return {params: result};\n    }\n\n    evaluate(ctx: EvaluationContext): null | ResolvedImage {\n        const primaryId = {\n            // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\n            name: this.namePrimary.evaluate(ctx),\n            iconsetId: this.iconsetIdPrimary\n        };\n\n        const secondaryId = this.nameSecondary ? {\n            // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\n            name: this.nameSecondary.evaluate(ctx),\n            iconsetId: this.iconsetIdSecondary\n        } : undefined;\n\n        const value = ResolvedImage.build(\n            primaryId,\n            secondaryId,\n            this.paramsPrimary ? this.evaluateParams(ctx, this.paramsPrimary) : undefined,\n            this.paramsSecondary ? this.evaluateParams(ctx, this.paramsSecondary) : undefined\n        );\n\n        if (value && ctx.availableImages) {\n            const primaryId = value.getPrimary().id;\n            value.available = ctx.availableImages.some((id) => ImageId.isEqual(id, primaryId));\n            if (value.available) {\n                // If there's a secondary variant, only mark it available if both are present\n                const secondaryId = value.getSecondary() ? value.getSecondary().id : null;\n                if (secondaryId) value.available = ctx.availableImages.some((id) => ImageId.isEqual(id, secondaryId));\n            }\n        }\n\n        return value;\n    }\n\n    eachChild(fn: (_: Expression) => void) {\n        fn(this.namePrimary);\n\n        if (this.paramsPrimary) {\n            for (const key in this.paramsPrimary) {\n                if (this.paramsPrimary[key]) {\n                    fn(this.paramsPrimary[key]);\n                }\n            }\n        }\n\n        if (this.nameSecondary) {\n            fn(this.nameSecondary);\n            if (this.paramsSecondary) {\n                for (const key in this.paramsSecondary) {\n                    if (this.paramsSecondary[key]) {\n                        fn(this.paramsSecondary[key]);\n                    }\n                }\n            }\n        }\n    }\n\n    outputDefined(): boolean {\n        // The output of image is determined by the list of available images in the evaluation context\n        return false;\n    }\n\n    serializeOptions(params: ImageParams, iconsetId: string): SerializedImageOptions | undefined {\n        const result: SerializedImageOptions = {};\n\n        if (iconsetId) {\n            result.iconset = {id: iconsetId};\n        }\n\n        if (params) {\n            result.params = {};\n            for (const key in params) {\n                if (params[key]) {\n                    result.params[key] = params[key].serialize();\n                }\n            }\n        }\n\n        return Object.keys(result).length > 0 ? result : undefined;\n    }\n\n    serialize(): SerializedExpression {\n        const serialized: SerializedExpression = ['image', this.namePrimary.serialize()];\n\n        if (this.paramsPrimary || this.iconsetIdPrimary) {\n            const options = this.serializeOptions(this.paramsPrimary, this.iconsetIdPrimary);\n            if (options) serialized.push(options);\n        }\n\n        if (this.nameSecondary) {\n            serialized.push(this.nameSecondary.serialize());\n\n            if (this.paramsSecondary || this.iconsetIdSecondary) {\n                const options = this.serializeOptions(this.paramsSecondary, this.iconsetIdSecondary);\n                if (options) serialized.push(options);\n            }\n        }\n\n        return serialized;\n    }\n}\n","export function getType(val: unknown): \"number\" | \"string\" | \"boolean\" | \"array\" | \"null\" | \"object\" | \"function\" | \"bigint\" | \"symbol\" | \"undefined\" | \"NaN\" {\n    if (isString(val)) return 'string';\n    if (isNumber(val)) return 'number';\n    if (isBoolean(val)) return 'boolean';\n    if (Array.isArray(val)) return 'array';\n    if (val === null) return 'null';\n    if (isObject(val)) return 'object';\n    return typeof val;\n}\n\nexport function isObject(value: unknown): value is Record<PropertyKey, unknown> {\n    if (value === null || value === undefined) return false;\n    if (Array.isArray(value)) return false;\n    if (typeof value === 'function') return false;\n    if (value instanceof String || value instanceof Number || value instanceof Boolean) {\n        return false;\n    }\n    return typeof value === 'object';\n}\n\nexport function isString(value: unknown): value is string {\n    return typeof value === 'string' || value instanceof String;\n}\n\nexport function isNumber(value: unknown): value is number {\n    return typeof value === 'number' || value instanceof Number;\n}\n\nexport function isBoolean(value: unknown): value is boolean {\n    return typeof value === 'boolean' || value instanceof Boolean;\n}\n","import assert from '../../util/assert';\nimport {BooleanType, ColorType, NumberType, StringType, ValueType, array, NullType} from '../types';\nimport {Color, isValue, toString as valueToString, typeOf, validateRGBA} from '../values';\nimport RuntimeError from '../runtime_error';\nimport Formatted from '../types/formatted';\nimport FormatExpression from '../definitions/format';\nimport ImageExpression from '../definitions/image';\nimport ResolvedImage from '../types/resolved_image';\nimport {getType} from '../../util/get_type';\n\nimport type {Expression, SerializedExpression} from '../expression';\nimport type ParsingContext from '../parsing_context';\nimport type EvaluationContext from '../evaluation_context';\nimport type {Type, ArrayType} from '../types';\n\nconst types = {\n    'to-boolean': BooleanType,\n    'to-color': ColorType,\n    'to-number': NumberType,\n    'to-string': StringType\n};\n\n/**\n * Special form for error-coalescing coercion expressions \"to-number\",\n * \"to-color\".  Since these coercions can fail at runtime, they accept multiple\n * arguments, only evaluating one at a time until one succeeds.\n *\n * @private\n */\nclass Coercion implements Expression {\n    type: Type | ArrayType;\n    args: Array<Expression>;\n\n    constructor(type: Type, args: Array<Expression>) {\n        this.type = type;\n        this.args = args;\n    }\n\n    static parse(args: ReadonlyArray<unknown>, context: ParsingContext): Expression | null | void {\n        if (args.length < 2)\n            return context.error(`Expected at least one argument.`);\n\n        const name = args[0] as string;\n        const parsed = [];\n        let type: Type | ArrayType = NullType;\n        if (name === 'to-array') {\n            if (!Array.isArray(args[1])) {\n                return null;\n            }\n            const arrayLength = args[1].length;\n            if (context.expectedType) {\n                if (context.expectedType.kind === 'array') {\n                    type = array(context.expectedType.itemType, arrayLength);\n                } else {\n                    return context.error(`Expected ${context.expectedType.kind} but found array.`);\n                }\n            } else if (arrayLength > 0 && isValue(args[1][0])) {\n                // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\n                const value = (args[1][0]);\n                // eslint-disable-next-line @typescript-eslint/no-unsafe-argument\n                type = array(typeOf(value), arrayLength);\n            } else {\n                return null;\n            }\n            for (let i = 0; i < arrayLength; i++) {\n                // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\n                const member = args[1][i];\n                let parsedMember: Expression | null | void;\n                if (Array.isArray(member)) {\n                    parsedMember = context.parse(member, undefined, type.itemType);\n                } else {\n                    const memberType = getType(member);\n                    if (memberType !== type.itemType.kind) {\n                        return context.error(`Expected ${type.itemType.kind} but found ${memberType}.`);\n                    }\n                    parsedMember = context.registry['literal'].parse(['literal', member === undefined ? null : member], context);\n                }\n                if (!parsedMember) return null;\n                parsed.push(parsedMember);\n            }\n        } else {\n            assert(types[name], name);\n\n            if ((name === 'to-boolean' || name === 'to-string') && args.length !== 2)\n                return context.error(`Expected one argument.`);\n\n            // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\n            type = types[name];\n\n            for (let i = 1; i < args.length; i++) {\n                const input = context.parse(args[i], i, ValueType);\n                if (!input) return null;\n                parsed.push(input);\n            }\n        }\n\n        // eslint-disable-next-line @typescript-eslint/no-unsafe-argument\n        return new Coercion(type, parsed);\n    }\n\n    // eslint-disable-next-line @typescript-eslint/no-explicit-any\n    evaluate(ctx: EvaluationContext): any {\n        if (this.type.kind === 'boolean') {\n            return Boolean(this.args[0].evaluate(ctx));\n        } else if (this.type.kind === 'color') {\n            // eslint-disable-next-line @typescript-eslint/no-explicit-any\n            let input: any;\n            let error: string | null;\n            for (const arg of this.args) {\n                // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\n                input = arg.evaluate(ctx);\n                error = null;\n                if (input instanceof Color) {\n                    return input;\n                } else if (typeof input === 'string') {\n                    const c = ctx.parseColor(input);\n                    if (c) return c;\n                } else if (Array.isArray(input)) {\n                    if (input.length < 3 || input.length > 4) {\n                        error = `Invalid rbga value ${JSON.stringify(input)}: expected an array containing either three or four numeric values.`;\n                    } else {\n                        error = validateRGBA(input[0], input[1], input[2], input[3]);\n                    }\n                    if (!error) {\n                        // eslint-disable-next-line @typescript-eslint/no-unsafe-argument\n                        return new Color((input[0]) / 255, (input[1]) / 255, (input[2]) / 255, (input[3]));\n                    }\n                }\n            }\n            throw new RuntimeError(error || `Could not parse color from value '${typeof input === 'string' ? input : String(JSON.stringify(input))}'`);\n        } else if (this.type.kind === 'number') {\n            let value = null;\n            for (const arg of this.args) {\n                // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\n                value = arg.evaluate(ctx);\n                if (value === null) return 0;\n                const num = Number(value);\n                if (isNaN(num)) continue;\n                return num;\n            }\n            throw new RuntimeError(`Could not convert ${JSON.stringify(value)} to number.`);\n        } else if (this.type.kind === 'formatted') {\n            // There is no explicit 'to-formatted' but this coercion can be implicitly\n            // created by properties that expect the 'formatted' type.\n            // eslint-disable-next-line @typescript-eslint/no-unsafe-argument\n            return Formatted.fromString(valueToString(this.args[0].evaluate(ctx)));\n        } else if (this.type.kind === 'resolvedImage') {\n            // eslint-disable-next-line @typescript-eslint/no-unsafe-argument\n            return ResolvedImage.build(valueToString(this.args[0].evaluate(ctx)));\n        } else if (this.type.kind === 'array') {\n            // eslint-disable-next-line @typescript-eslint/no-unsafe-return\n            return this.args.map(arg => { return arg.evaluate(ctx); });\n        } else {\n            // eslint-disable-next-line @typescript-eslint/no-unsafe-argument\n            return valueToString(this.args[0].evaluate(ctx));\n        }\n    }\n\n    eachChild(fn: (_: Expression) => void) {\n        this.args.forEach(fn);\n    }\n\n    outputDefined(): boolean {\n        return this.args.every(arg => arg.outputDefined());\n    }\n\n    serialize(): SerializedExpression {\n        if (this.type.kind === 'formatted') {\n            return new FormatExpression([{content: this.args[0], scale: null, font: null, textColor: null}]).serialize();\n        }\n\n        if (this.type.kind === 'resolvedImage') {\n            return new ImageExpression(this.args[0]).serialize();\n        }\n\n        const serialized: Array<unknown> = this.type.kind === 'array' ? [] : [`to-${this.type.kind}`];\n        this.eachChild(child => { serialized.push(child.serialize()); });\n        return serialized;\n    }\n}\n\nexport default Coercion;\n","import {Color} from './values';\n\nimport type Point from '@mapbox/point-geometry';\nimport type {ImageId} from './types/image_id';\nimport type {FormattedSection} from './types/formatted';\nimport type {GlobalProperties, Feature, FeatureState} from './index';\nimport type {CanonicalTileID} from '../types/tile_id';\nimport type {FeatureDistanceData} from '../feature_filter/index';\nimport type {ConfigOptions, ConfigOptionValue} from '../types/config_options';\n\nconst geometryTypes = ['Unknown', 'Point', 'LineString', 'Polygon'];\n\nclass EvaluationContext {\n    globals: GlobalProperties;\n    feature: Feature | null | undefined;\n    featureState: FeatureState | null | undefined;\n    formattedSection: FormattedSection | null | undefined;\n    availableImages: ImageId[] | null | undefined;\n    canonical: null | CanonicalTileID;\n    featureTileCoord: Point | null | undefined;\n    featureDistanceData: FeatureDistanceData | null | undefined;\n    scope: string | null | undefined;\n    options: ConfigOptions | null | undefined;\n    iconImageUseTheme: string | null | undefined;\n\n    constructor(scope?: string | null, options?: ConfigOptions | null, iconImageUseTheme?: string) {\n        this.globals = null;\n        this.feature = null;\n        this.featureState = null;\n        this.formattedSection = null;\n        this.availableImages = null;\n        this.canonical = null;\n        this.featureTileCoord = null;\n        this.featureDistanceData = null;\n        this.scope = scope;\n        this.options = options;\n        this.iconImageUseTheme = iconImageUseTheme;\n    }\n\n    id(): string | number | null {\n        return this.feature && this.feature.id !== undefined ? this.feature.id : null;\n    }\n\n    geometryType(): null | string {\n        return this.feature ? typeof this.feature.type === 'number' ? geometryTypes[this.feature.type] : this.feature.type : null;\n    }\n\n    geometry(): Array<Array<Point>> | null | undefined {\n        return this.feature && 'geometry' in this.feature ? this.feature.geometry : null;\n    }\n\n    canonicalID(): null | CanonicalTileID {\n        return this.canonical;\n    }\n\n    properties(): {readonly [key: string]: unknown} {\n        return (this.feature && this.feature.properties) || {};\n    }\n\n    measureLight(_: string): number {\n        return this.globals.brightness || 0;\n    }\n\n    distanceFromCenter(): number {\n        if (this.featureTileCoord && this.featureDistanceData) {\n\n            const c = this.featureDistanceData.center;\n            const scale = this.featureDistanceData.scale;\n            const {x, y} = this.featureTileCoord;\n\n            // Calculate the distance vector `d` (left handed)\n            const dX = x * scale - c[0];\n            const dY = y * scale - c[1];\n\n            // The bearing vector `b` (left handed)\n            const bX = this.featureDistanceData.bearing[0];\n            const bY = this.featureDistanceData.bearing[1];\n\n            // Distance is calculated as `dot(d, v)`\n            const dist = (bX * dX + bY * dY);\n            return dist;\n        }\n\n        return 0;\n    }\n\n    parseColor(input: string): Color | undefined {\n        return Color.parse(input);\n    }\n\n    getConfig(id: string): ConfigOptionValue | null | undefined {\n        return this.options ? this.options.get(id) : null;\n    }\n}\n\nexport default EvaluationContext;\n","import {toString} from './types';\nimport assert from '../util/assert';\n\nimport type EvaluationContext from './evaluation_context';\nimport type ParsingContext from './parsing_context';\nimport type {Expression, ExpressionRegistry, SerializedExpression} from './expression';\nimport type {Type} from './types';\nimport type {Value} from './values';\n\nexport type Varargs = {\n    type: Type;\n};\ntype Signature = Array<Type> | Varargs;\ntype Evaluate = (arg1: EvaluationContext, arg2: Array<Expression>) => Value;\ntype Definition = [Type, Signature, Evaluate] | {\n    type: Type;\n    overloads: Array<[Signature, Evaluate]>;\n};\n\nclass CompoundExpression implements Expression {\n    name: string;\n    type: Type;\n    _evaluate: Evaluate;\n    args: Array<Expression>;\n    _overloadIndex: number;\n\n    static definitions: {\n        [_: string]: Definition;\n    };\n\n    constructor(name: string, type: Type, evaluate: Evaluate, args: Array<Expression>, overloadIndex: number) {\n        this.name = name;\n        this.type = type;\n        this._evaluate = evaluate;\n        this.args = args;\n        this._overloadIndex = overloadIndex;\n    }\n\n    evaluate(ctx: EvaluationContext): Value {\n        if (!this._evaluate) { // restore evaluate function after transfer between threads\n            const definition = CompoundExpression.definitions[this.name];\n            this._evaluate = Array.isArray(definition) ? definition[2] : definition.overloads[this._overloadIndex][1];\n        }\n        return this._evaluate(ctx, this.args);\n    }\n\n    eachChild(fn: (_: Expression) => void) {\n        this.args.forEach(fn);\n    }\n\n    outputDefined(): boolean {\n        return false;\n    }\n\n    serialize(): SerializedExpression[] {\n        return [this.name as SerializedExpression].concat(this.args.map(arg => arg.serialize()));\n    }\n\n    static parse(args: ReadonlyArray<unknown>, context: ParsingContext): Expression | null | void {\n        const op = args[0] as string;\n        const definition = CompoundExpression.definitions[op];\n        if (!definition) {\n            return context.error(`Unknown expression \"${op}\". If you wanted a literal array, use [\"literal\", [...]].`, 0);\n        }\n\n        // Now check argument types against each signature\n        const type = Array.isArray(definition) ?\n            definition[0] : definition.type;\n\n        const availableOverloads: Array<[Signature, Evaluate]> = Array.isArray(definition) ?\n            [[definition[1], definition[2]]] :\n            definition.overloads;\n\n        const overloadParams = [];\n\n        let signatureContext: ParsingContext = null;\n\n        let overloadIndex = -1;\n\n        for (const [params, evaluate] of availableOverloads) {\n            if (Array.isArray(params) && params.length !== args.length - 1) continue; // param count doesn't match\n\n            overloadParams.push(params);\n            overloadIndex++;\n\n            // Use a fresh-looking context for each attempted signature so\n            // that, if we eventually succeed, we haven't polluted\n            // `context.errors`. We allocate the context once and reset its\n            // errors between overload attempts; the other fields are\n            // identical across attempts.\n            if (signatureContext === null) {\n                signatureContext = context._forkForSignature();\n            } else {\n                signatureContext.errors.length = 0;\n            }\n\n            // First parse all the args, potentially coercing to the\n            // types expected by this overload.\n            const parsedArgs: Array<Expression> = [];\n            let argParseFailed = false;\n            for (let i = 1; i < args.length; i++) {\n                const arg = args[i];\n                const expectedType = Array.isArray(params) ?\n                    params[i - 1] :\n                    params.type;\n\n                const parsed = signatureContext.parse(arg, 1 + parsedArgs.length, expectedType);\n                if (!parsed) {\n                    argParseFailed = true;\n                    break;\n                }\n                parsedArgs.push(parsed);\n            }\n            if (argParseFailed) {\n                // Couldn't coerce args of this overload to expected type, move\n                // on to next one.\n                continue;\n            }\n\n            if (Array.isArray(params)) {\n                if (params.length !== parsedArgs.length) {\n                    signatureContext.error(`Expected ${params.length} arguments, but found ${parsedArgs.length} instead.`);\n                    continue;\n                }\n            }\n\n            for (let i = 0; i < parsedArgs.length; i++) {\n                const expected = Array.isArray(params) ? params[i] : params.type;\n                const arg = parsedArgs[i];\n                signatureContext.checkSubtype(expected, arg.type, i + 1);\n            }\n\n            if (signatureContext.errors.length === 0) {\n                return new CompoundExpression(op, type, evaluate, parsedArgs, overloadIndex);\n            }\n        }\n\n        assert(!signatureContext || signatureContext.errors.length > 0);\n\n        if (overloadParams.length === 1) {\n            context.errors.push(...signatureContext.errors);\n        } else {\n            const expected = overloadParams.length ? overloadParams : availableOverloads.map(([params]) => params);\n            const signatures = expected.map(stringifySignature).join(' | ');\n\n            const actualTypes = [];\n            // For error message, re-parse arguments without trying to\n            // apply any coercions\n            for (let i = 1; i < args.length; i++) {\n                const parsed = context.parse(args[i], 1 + actualTypes.length);\n                if (!parsed) return null;\n                actualTypes.push(toString(parsed.type));\n            }\n            context.error(`Expected arguments of type ${signatures}, but found (${actualTypes.join(', ')}) instead.`);\n        }\n\n        return null;\n    }\n\n    static register(\n        registry: ExpressionRegistry,\n        definitions: {\n            [_: string]: Definition;\n        }\n    ) {\n        assert(!CompoundExpression.definitions);\n        CompoundExpression.definitions = definitions;\n        for (const name in definitions) {\n            registry[name] = CompoundExpression;\n        }\n    }\n}\n\nfunction stringifySignature(signature: Signature): string {\n    if (Array.isArray(signature)) {\n        return `(${signature.map(toString).join(', ')})`;\n    } else {\n        return `(${toString(signature.type)}...)`;\n    }\n}\n\nexport default CompoundExpression;\n","import {StringType, BooleanType, CollatorType} from '../types';\nimport Collator from '../types/collator';\n\nimport type {Expression, SerializedExpression} from '../expression';\nimport type EvaluationContext from '../evaluation_context';\nimport type ParsingContext from '../parsing_context';\nimport type {Type} from '../types';\n\nexport default class CollatorExpression implements Expression {\n    type: Type;\n    caseSensitive: Expression;\n    diacriticSensitive: Expression;\n    locale: Expression | null;\n\n    constructor(caseSensitive: Expression, diacriticSensitive: Expression, locale: Expression | null) {\n        this.type = CollatorType;\n        this.locale = locale;\n        this.caseSensitive = caseSensitive;\n        this.diacriticSensitive = diacriticSensitive;\n    }\n\n    static parse(args: ReadonlyArray<unknown>, context: ParsingContext): Expression | null | undefined {\n        if (args.length !== 2) {\n            context.error(`Expected one argument.`);\n            return null;\n        }\n\n        const options = args[1];\n        if (typeof options !== \"object\" || Array.isArray(options)) {\n            context.error(`Collator options argument must be an object.`);\n            return null;\n        }\n\n        const caseSensitive = options['case-sensitive'] === undefined ?\n            context.parse(false, 1, BooleanType) :\n            context.parseObjectValue(options['case-sensitive'], 1, 'case-sensitive', BooleanType);\n        if (!caseSensitive) return null;\n\n        const diacriticSensitive = options['diacritic-sensitive'] === undefined ?\n            context.parse(false, 1, BooleanType) :\n            context.parseObjectValue(options['diacritic-sensitive'], 1, 'diacritic-sensitive', BooleanType);\n        if (!diacriticSensitive) return null;\n\n        let locale: Expression = null;\n        if (options['locale']) {\n            locale = context.parseObjectValue(options['locale'], 1, 'locale', StringType) as Expression;\n            if (!locale) return null;\n        }\n\n        return new CollatorExpression(caseSensitive, diacriticSensitive, locale);\n    }\n\n    evaluate(ctx: EvaluationContext): Collator {\n        return new Collator(\n            this.caseSensitive.evaluate(ctx) as boolean,\n            this.diacriticSensitive.evaluate(ctx) as boolean,\n            this.locale ? this.locale.evaluate(ctx) as string : null\n        );\n    }\n\n    eachChild(fn: (_: Expression) => void) {\n        fn(this.caseSensitive);\n        fn(this.diacriticSensitive);\n        if (this.locale) {\n            fn(this.locale);\n        }\n    }\n\n    outputDefined(): boolean {\n        // Technically the set of possible outputs is the combinatoric set of Collators produced\n        // by all possible outputs of locale/caseSensitive/diacriticSensitive\n        // But for the primary use of Collators in comparison operators, we ignore the Collator's\n        // possible outputs anyway, so we can get away with leaving this false for now.\n        return false;\n    }\n\n    serialize(): SerializedExpression {\n        const options: Record<string, SerializedExpression> = {};\n        options['case-sensitive'] = this.caseSensitive.serialize();\n        options['diacritic-sensitive'] = this.diacriticSensitive.serialize();\n        if (this.locale) {\n            options['locale'] = this.locale.serialize();\n        }\n        return [\"collator\", options];\n    }\n}\n","/**\n * A standalone point geometry with useful accessor, comparison, and\n * modification methods.\n *\n * @class\n * @param {number} x the x-coordinate. This could be longitude or screen pixels, or any other sort of unit.\n * @param {number} y the y-coordinate. This could be latitude or screen pixels, or any other sort of unit.\n *\n * @example\n * const point = new Point(-77, 38);\n */\nexport default function Point(x, y) {\n    this.x = x;\n    this.y = y;\n}\n\nPoint.prototype = {\n    /**\n     * Clone this point, returning a new point that can be modified\n     * without affecting the old one.\n     * @return {Point} the clone\n     */\n    clone() { return new Point(this.x, this.y); },\n\n    /**\n     * Add this point's x & y coordinates to another point,\n     * yielding a new point.\n     * @param {Point} p the other point\n     * @return {Point} output point\n     */\n    add(p) { return this.clone()._add(p); },\n\n    /**\n     * Subtract this point's x & y coordinates to from point,\n     * yielding a new point.\n     * @param {Point} p the other point\n     * @return {Point} output point\n     */\n    sub(p) { return this.clone()._sub(p); },\n\n    /**\n     * Multiply this point's x & y coordinates by point,\n     * yielding a new point.\n     * @param {Point} p the other point\n     * @return {Point} output point\n     */\n    multByPoint(p) { return this.clone()._multByPoint(p); },\n\n    /**\n     * Divide this point's x & y coordinates by point,\n     * yielding a new point.\n     * @param {Point} p the other point\n     * @return {Point} output point\n     */\n    divByPoint(p) { return this.clone()._divByPoint(p); },\n\n    /**\n     * Multiply this point's x & y coordinates by a factor,\n     * yielding a new point.\n     * @param {number} k factor\n     * @return {Point} output point\n     */\n    mult(k) { return this.clone()._mult(k); },\n\n    /**\n     * Divide this point's x & y coordinates by a factor,\n     * yielding a new point.\n     * @param {number} k factor\n     * @return {Point} output point\n     */\n    div(k) { return this.clone()._div(k); },\n\n    /**\n     * Rotate this point around the 0, 0 origin by an angle a,\n     * given in radians\n     * @param {number} a angle to rotate around, in radians\n     * @return {Point} output point\n     */\n    rotate(a) { return this.clone()._rotate(a); },\n\n    /**\n     * Rotate this point around p point by an angle a,\n     * given in radians\n     * @param {number} a angle to rotate around, in radians\n     * @param {Point} p Point to rotate around\n     * @return {Point} output point\n     */\n    rotateAround(a, p) { return this.clone()._rotateAround(a, p); },\n\n    /**\n     * Multiply this point by a 4x1 transformation matrix\n     * @param {[number, number, number, number]} m transformation matrix\n     * @return {Point} output point\n     */\n    matMult(m) { return this.clone()._matMult(m); },\n\n    /**\n     * Calculate this point but as a unit vector from 0, 0, meaning\n     * that the distance from the resulting point to the 0, 0\n     * coordinate will be equal to 1 and the angle from the resulting\n     * point to the 0, 0 coordinate will be the same as before.\n     * @return {Point} unit vector point\n     */\n    unit() { return this.clone()._unit(); },\n\n    /**\n     * Compute a perpendicular point, where the new y coordinate\n     * is the old x coordinate and the new x coordinate is the old y\n     * coordinate multiplied by -1\n     * @return {Point} perpendicular point\n     */\n    perp() { return this.clone()._perp(); },\n\n    /**\n     * Return a version of this point with the x & y coordinates\n     * rounded to integers.\n     * @return {Point} rounded point\n     */\n    round() { return this.clone()._round(); },\n\n    /**\n     * Return the magnitude of this point: this is the Euclidean\n     * distance from the 0, 0 coordinate to this point's x and y\n     * coordinates.\n     * @return {number} magnitude\n     */\n    mag() {\n        return Math.sqrt(this.x * this.x + this.y * this.y);\n    },\n\n    /**\n     * Judge whether this point is equal to another point, returning\n     * true or false.\n     * @param {Point} other the other point\n     * @return {boolean} whether the points are equal\n     */\n    equals(other) {\n        return this.x === other.x &&\n               this.y === other.y;\n    },\n\n    /**\n     * Calculate the distance from this point to another point\n     * @param {Point} p the other point\n     * @return {number} distance\n     */\n    dist(p) {\n        return Math.sqrt(this.distSqr(p));\n    },\n\n    /**\n     * Calculate the distance from this point to another point,\n     * without the square root step. Useful if you're comparing\n     * relative distances.\n     * @param {Point} p the other point\n     * @return {number} distance\n     */\n    distSqr(p) {\n        const dx = p.x - this.x,\n            dy = p.y - this.y;\n        return dx * dx + dy * dy;\n    },\n\n    /**\n     * Get the angle from the 0, 0 coordinate to this point, in radians\n     * coordinates.\n     * @return {number} angle\n     */\n    angle() {\n        return Math.atan2(this.y, this.x);\n    },\n\n    /**\n     * Get the angle from this point to another point, in radians\n     * @param {Point} b the other point\n     * @return {number} angle\n     */\n    angleTo(b) {\n        return Math.atan2(this.y - b.y, this.x - b.x);\n    },\n\n    /**\n     * Get the angle between this point and another point, in radians\n     * @param {Point} b the other point\n     * @return {number} angle\n     */\n    angleWith(b) {\n        return this.angleWithSep(b.x, b.y);\n    },\n\n    /**\n     * Find the angle of the two vectors, solving the formula for\n     * the cross product a x b = |a||b|sin(θ) for θ.\n     * @param {number} x the x-coordinate\n     * @param {number} y the y-coordinate\n     * @return {number} the angle in radians\n     */\n    angleWithSep(x, y) {\n        return Math.atan2(\n            this.x * y - this.y * x,\n            this.x * x + this.y * y);\n    },\n\n    /** @param {[number, number, number, number]} m */\n    _matMult(m) {\n        const x = m[0] * this.x + m[1] * this.y,\n            y = m[2] * this.x + m[3] * this.y;\n        this.x = x;\n        this.y = y;\n        return this;\n    },\n\n    /** @param {Point} p */\n    _add(p) {\n        this.x += p.x;\n        this.y += p.y;\n        return this;\n    },\n\n    /** @param {Point} p */\n    _sub(p) {\n        this.x -= p.x;\n        this.y -= p.y;\n        return this;\n    },\n\n    /** @param {number} k */\n    _mult(k) {\n        this.x *= k;\n        this.y *= k;\n        return this;\n    },\n\n    /** @param {number} k */\n    _div(k) {\n        this.x /= k;\n        this.y /= k;\n        return this;\n    },\n\n    /** @param {Point} p */\n    _multByPoint(p) {\n        this.x *= p.x;\n        this.y *= p.y;\n        return this;\n    },\n\n    /** @param {Point} p */\n    _divByPoint(p) {\n        this.x /= p.x;\n        this.y /= p.y;\n        return this;\n    },\n\n    _unit() {\n        this._div(this.mag());\n        return this;\n    },\n\n    _perp() {\n        const y = this.y;\n        this.y = this.x;\n        this.x = -y;\n        return this;\n    },\n\n    /** @param {number} angle */\n    _rotate(angle) {\n        const cos = Math.cos(angle),\n            sin = Math.sin(angle),\n            x = cos * this.x - sin * this.y,\n            y = sin * this.x + cos * this.y;\n        this.x = x;\n        this.y = y;\n        return this;\n    },\n\n    /**\n     * @param {number} angle\n     * @param {Point} p\n     */\n    _rotateAround(angle, p) {\n        const cos = Math.cos(angle),\n            sin = Math.sin(angle),\n            x = p.x + cos * (this.x - p.x) - sin * (this.y - p.y),\n            y = p.y + sin * (this.x - p.x) + cos * (this.y - p.y);\n        this.x = x;\n        this.y = y;\n        return this;\n    },\n\n    _round() {\n        this.x = Math.round(this.x);\n        this.y = Math.round(this.y);\n        return this;\n    },\n\n    constructor: Point\n};\n\n/**\n * Construct a point from an array if necessary, otherwise if the input\n * is already a Point, return it unchanged.\n * @param {Point | [number, number] | {x: number, y: number}} p input value\n * @return {Point} constructed point.\n * @example\n * // this\n * var point = Point.convert([0, 1]);\n * // is equivalent to\n * var point = new Point(0, 1);\n */\nPoint.convert = function (p) {\n    if (p instanceof Point) {\n        return /** @type {Point} */ (p);\n    }\n    if (Array.isArray(p)) {\n        return new Point(+p[0], +p[1]);\n    }\n    if (p.x !== undefined && p.y !== undefined) {\n        return new Point(+p.x, +p.y);\n    }\n    throw new Error('Expected [x, y] or {x, y} point format');\n};\n","import quickselect from 'quickselect';\nimport Point from '@mapbox/point-geometry';\n\ntype Ring = Point[] & {area?: number};\n\n// minX, minY, maxX, maxY\nexport type BBox = [number, number, number, number];\n\n/**\n * Returns the signed area for the polygon ring.  Postive areas are exterior rings and\n * have a clockwise winding.  Negative areas are interior rings and have a counter clockwise\n * ordering.\n */\nexport function calculateSignedArea(ring: Ring): number {\n    let sum = 0;\n    for (let i = 0, len = ring.length, j = len - 1, p1: Point, p2: Point; i < len; j = i++) {\n        p1 = ring[i]!;\n        p2 = ring[j]!;\n        sum += (p2.x - p1.x) * (p1.y + p2.y);\n    }\n    return sum;\n}\n\nfunction compareAreas(a: Ring, b: Ring): number {\n    return (b.area!) - (a.area!);\n}\n\n// classifies an array of rings into polygons with outer rings and holes\nexport function classifyRings(rings: Array<Ring>, maxRings: number): Array<Array<Ring>> {\n    const len = rings.length;\n\n    if (len <= 1) return [rings];\n\n    const polygons: Array<Array<Ring>> = [];\n    let polygon: Array<Ring> | undefined,\n        ccw: boolean | undefined;\n\n    for (let i = 0; i < len; i++) {\n        const area = calculateSignedArea(rings[i]!);\n        if (area === 0) continue;\n\n        (rings[i]!).area = Math.abs(area);\n\n        if (ccw === undefined) ccw = area < 0;\n\n        if (ccw === area < 0) {\n            if (polygon) polygons.push(polygon);\n            polygon = [rings[i]!];\n        } else {\n            (polygon!).push(rings[i]!);\n        }\n    }\n    if (polygon) polygons.push(polygon);\n\n    // Earcut performance degrades with the # of rings in a polygon. For this\n    // reason, we limit strip out all but the `maxRings` largest rings.\n    if (maxRings > 1) {\n        for (let j = 0; j < polygons.length; j++) {\n            const currentPolygon = polygons[j]!;\n            if (currentPolygon.length <= maxRings) continue;\n            quickselect(currentPolygon, maxRings, 1, currentPolygon.length - 1, compareAreas);\n            polygons[j] = currentPolygon.slice(0, maxRings);\n        }\n    }\n\n    return polygons;\n}\n\nexport function updateBBox(bbox: BBox, coord: GeoJSON.Position) {\n    bbox[0] = Math.min(bbox[0], coord[0]!);\n    bbox[1] = Math.min(bbox[1], coord[1]!);\n    bbox[2] = Math.max(bbox[2], coord[0]!);\n    bbox[3] = Math.max(bbox[3], coord[1]!);\n}\n\nexport function boxWithinBox(bbox1: BBox, bbox2: BBox): boolean {\n    if (bbox1[0] <= bbox2[0]) return false;\n    if (bbox1[2] >= bbox2[2]) return false;\n    if (bbox1[1] <= bbox2[1]) return false;\n    if (bbox1[3] >= bbox2[3]) return false;\n    return true;\n}\n\nfunction onBoundary(p: GeoJSON.Position, p1: GeoJSON.Position, p2: GeoJSON.Position) {\n    const x1 = (p[0]!) - (p1[0]!);\n    const y1 = (p[1]!) - (p1[1]!);\n    const x2 = (p[0]!) - (p2[0]!);\n    const y2 = (p[1]!) - (p2[1]!);\n    return (x1 * y2 - x2 * y1 === 0) && (x1 * x2 <= 0) && (y1 * y2 <= 0);\n}\n\nfunction rayIntersect(p: GeoJSON.Position, p1: GeoJSON.Position, p2: GeoJSON.Position) {\n    return (((p1[1]!) > (p[1]!)) !== ((p2[1]!) > (p[1]!))) && ((p[0]!) < ((p2[0]!) - (p1[0]!)) * ((p[1]!) - (p1[1]!)) / ((p2[1]!) - (p1[1]!)) + (p1[0]!));\n}\n\n// ray casting algorithm for detecting if point is in polygon\nexport function pointWithinPolygon(\n    point: GeoJSON.Position,\n    rings: Array<Array<GeoJSON.Position>>,\n    trueOnBoundary: boolean = false,\n): boolean {\n    let inside = false;\n    for (let i = 0, len = rings.length; i < len; i++) {\n        const ring = rings[i]!;\n        for (let j = 0, len2 = ring.length, k = len2 - 1; j < len2; k = j++) {\n            const q1 = ring[k]!;\n            const q2 = ring[j]!;\n            if (onBoundary(point, q1, q2)) return trueOnBoundary;\n            if (rayIntersect(point, q1, q2)) inside = !inside;\n        }\n    }\n    return inside;\n}\n\nfunction perp(v1: GeoJSON.Position, v2: GeoJSON.Position) {\n    return (v1[0]!) * (v2[1]!) - (v1[1]!) * (v2[0]!);\n}\n\n// check if p1 and p2 are in different sides of line segment q1->q2\nfunction twoSided(p1: GeoJSON.Position, p2: GeoJSON.Position, q1: GeoJSON.Position, q2: GeoJSON.Position) {\n    // q1->p1 (x1, y1), q1->p2 (x2, y2), q1->q2 (x3, y3)\n    const x1 = (p1[0]!) - (q1[0]!);\n    const y1 = (p1[1]!) - (q1[1]!);\n    const x2 = (p2[0]!) - (q1[0]!);\n    const y2 = (p2[1]!) - (q1[1]!);\n    const x3 = (q2[0]!) - (q1[0]!);\n    const y3 = (q2[1]!) - (q1[1]!);\n    const det1 = x1 * y3 - x3 * y1;\n    const det2 = x2 * y3 - x3 * y2;\n    if ((det1 > 0 && det2 < 0) || (det1 < 0 && det2 > 0)) return true;\n    return false;\n}\n// a, b are end points for line segment1, c and d are end points for line segment2\nexport function segmentIntersectSegment(\n    a: GeoJSON.Position,\n    b: GeoJSON.Position,\n    c: GeoJSON.Position,\n    d: GeoJSON.Position,\n): boolean {\n    // check if two segments are parallel or not\n    // precondition is end point a, b is inside polygon, if line a->b is\n    // parallel to polygon edge c->d, then a->b won't intersect with c->d\n    const vectorP = [(b[0]!) - (a[0]!), (b[1]!) - (a[1]!)];\n    const vectorQ = [(d[0]!) - (c[0]!), (d[1]!) - (c[1]!)];\n    if (perp(vectorQ, vectorP) === 0) return false;\n\n    // If lines are intersecting with each other, the relative location should be:\n    // a and b lie in different sides of segment c->d\n    // c and d lie in different sides of segment a->b\n    if (twoSided(a, b, c, d) && twoSided(c, d, a, b)) return true;\n    return false;\n}\n\nexport interface Bounds {\n    min: Point;\n    max: Point;\n}\n\nexport function computeBounds(points: Point[][]): Bounds {\n    const min = new Point(Number.POSITIVE_INFINITY, Number.POSITIVE_INFINITY);\n    const max = new Point(Number.NEGATIVE_INFINITY, Number.NEGATIVE_INFINITY);\n\n    for (const point of points[0]!) {\n        if (min.x > point.x) min.x = point.x;\n        if (min.y > point.y) min.y = point.y;\n        if (max.x < point.x) max.x = point.x;\n        if (max.y < point.y) max.y = point.y;\n    }\n\n    return {min, max};\n}\n","export function mercatorXfromLng(lng: number): number {\n    return (180 + lng) / 360;\n}\n\nexport function mercatorYfromLat(lat: number): number {\n    return (180 - (180 / Math.PI * Math.log(Math.tan(Math.PI / 4 + lat * Math.PI / 360)))) / 360;\n}\n\nexport function lngFromMercatorX(x: number): number {\n    return x * 360 - 180;\n}\n\nexport function latFromMercatorY(y: number): number {\n    const y2 = 180 - y * 360;\n    return 360 / Math.PI * Math.atan(Math.exp(y2 * Math.PI / 180)) - 90;\n}\n","import {isValue} from '../values';\nimport {BooleanType} from '../types';\nimport {updateBBox, boxWithinBox, pointWithinPolygon, segmentIntersectSegment} from '../../util/geometry_util';\nimport {mercatorXfromLng, mercatorYfromLat} from '../../util/mercator';\n\nimport type Point from '@mapbox/point-geometry';\nimport type {Type} from '../types';\nimport type {Expression, SerializedExpression} from '../expression';\nimport type ParsingContext from '../parsing_context';\nimport type EvaluationContext from '../evaluation_context';\nimport type {CanonicalTileID} from '../../types/tile_id';\nimport type {BBox} from '../../util/geometry_util';\n\ntype GeoJSONPolygons = GeoJSON.Polygon | GeoJSON.MultiPolygon;\n\nconst EXTENT = 8192;\n\nfunction getTileCoordinates(p: GeoJSON.Position, canonical: CanonicalTileID) {\n    const x = mercatorXfromLng(p[0]);\n    const y = mercatorYfromLat(p[1]);\n    const tilesAtZoom = Math.pow(2, canonical.z);\n    return [Math.round(x * tilesAtZoom * EXTENT), Math.round(y * tilesAtZoom * EXTENT)];\n}\n\nfunction pointWithinPolygons(point: GeoJSON.Position, polygons: Array<Array<Array<GeoJSON.Position>>>) {\n    for (let i = 0; i < polygons.length; i++) {\n        if (pointWithinPolygon(point, polygons[i])) return true;\n    }\n    return false;\n}\n\nfunction lineIntersectPolygon(p1: GeoJSON.Position, p2: GeoJSON.Position, polygon: Array<Array<GeoJSON.Position>>) {\n    for (const ring of polygon) {\n        // loop through every edge of the ring\n        for (let j = 0, len = ring.length, k = len - 1; j < len; k = j++) {\n            const q1 = ring[k];\n            const q2 = ring[j];\n            if (segmentIntersectSegment(p1, p2, q1, q2)) {\n                return true;\n            }\n        }\n    }\n    return false;\n}\n\nfunction lineStringWithinPolygon(line: Array<GeoJSON.Position>, polygon: Array<Array<GeoJSON.Position>>) {\n    // First, check if geometry points of line segments are all inside polygon\n    for (let i = 0; i < line.length; ++i) {\n        if (!pointWithinPolygon(line[i], polygon)) {\n            return false;\n        }\n    }\n\n    // Second, check if there is line segment intersecting polygon edge\n    for (let i = 0; i < line.length - 1; ++i) {\n        if (lineIntersectPolygon(line[i], line[i + 1], polygon)) {\n            return false;\n        }\n    }\n    return true;\n}\n\nfunction lineStringWithinPolygons(line: Array<GeoJSON.Position>, polygons: Array<Array<Array<GeoJSON.Position>>>) {\n    for (let i = 0; i < polygons.length; i++) {\n        if (lineStringWithinPolygon(line, polygons[i])) return true;\n    }\n    return false;\n}\n\nfunction getTilePolygon(coordinates: Array<Array<GeoJSON.Position>>, bbox: BBox, canonical: CanonicalTileID): Array<Array<number[]>> {\n    const polygon: Array<Array<number[]>> = [];\n    for (let i = 0; i < coordinates.length; i++) {\n        const ring: number[][] = [];\n        for (let j = 0; j < coordinates[i].length; j++) {\n            const coord = getTileCoordinates(coordinates[i][j], canonical);\n            updateBBox(bbox, coord);\n            ring.push(coord);\n        }\n        polygon.push(ring);\n    }\n\n    return polygon;\n}\n\nfunction getTilePolygons(coordinates: Array<Array<Array<GeoJSON.Position>>>, bbox: BBox, canonical: CanonicalTileID): Array<Array<Array<number[]>>> {\n    const polygons: Array<Array<Array<number[]>>> = [];\n    for (let i = 0; i < coordinates.length; i++) {\n        const polygon = getTilePolygon(coordinates[i], bbox, canonical);\n        polygons.push(polygon);\n    }\n\n    return polygons;\n}\n\nfunction updatePoint(p: GeoJSON.Position, bbox: BBox, polyBBox: Array<number>, worldSize: number) {\n    if (p[0] < polyBBox[0] || p[0] > polyBBox[2]) {\n        const halfWorldSize = worldSize * 0.5;\n        let shift = (p[0] - polyBBox[0] > halfWorldSize) ? -worldSize : (polyBBox[0] - p[0] > halfWorldSize) ? worldSize : 0;\n        if (shift === 0) {\n            shift = (p[0] - polyBBox[2] > halfWorldSize) ? -worldSize : (polyBBox[2] - p[0] > halfWorldSize) ? worldSize : 0;\n        }\n        p[0] += shift;\n    }\n    updateBBox(bbox, p);\n}\n\nfunction resetBBox(bbox: BBox) {\n    bbox[0] = bbox[1] = Infinity;\n    bbox[2] = bbox[3] = -Infinity;\n}\n\nfunction getTilePoints(geometry: Array<Array<Point>> | null | undefined, pointBBox: BBox, polyBBox: Array<number>, canonical: CanonicalTileID): Array<number[]> {\n    const worldSize = Math.pow(2, canonical.z) * EXTENT;\n    const shifts = [canonical.x * EXTENT, canonical.y * EXTENT];\n    const tilePoints: Array<number[]> = [];\n    if (!geometry) return tilePoints;\n    for (const points of geometry) {\n        for (const point of points) {\n            const p = [point.x + shifts[0], point.y + shifts[1]];\n            updatePoint(p, pointBBox, polyBBox, worldSize);\n            tilePoints.push(p);\n        }\n    }\n\n    return tilePoints;\n}\n\nfunction getTileLines(geometry: Array<Array<Point>> | null | undefined, lineBBox: BBox, polyBBox: Array<number>, canonical: CanonicalTileID): Array<Array<GeoJSON.Position>> {\n    const worldSize = Math.pow(2, canonical.z) * EXTENT;\n    const shifts = [canonical.x * EXTENT, canonical.y * EXTENT];\n    const tileLines: Array<Array<GeoJSON.Position>> = [];\n    if (!geometry) return tileLines;\n    for (const line of geometry) {\n        const tileLine = [];\n        for (const point of line) {\n            const p: GeoJSON.Position = [point.x + shifts[0], point.y + shifts[1]];\n            updateBBox(lineBBox, p);\n            tileLine.push(p);\n        }\n        // eslint-disable-next-line @typescript-eslint/no-unsafe-argument\n        tileLines.push(tileLine);\n    }\n    if (lineBBox[2] - lineBBox[0] <= worldSize / 2) {\n        resetBBox(lineBBox);\n        for (const line of tileLines) {\n            for (const p of line) {\n                updatePoint(p, lineBBox, polyBBox, worldSize);\n            }\n        }\n    }\n    return tileLines;\n}\n\nfunction pointsWithinPolygons(ctx: EvaluationContext, polygonGeometry: GeoJSONPolygons): boolean {\n    const pointBBox: BBox = [Infinity, Infinity, -Infinity, -Infinity];\n    const polyBBox: BBox = [Infinity, Infinity, -Infinity, -Infinity];\n\n    const canonical = ctx.canonicalID();\n    if (!canonical) {\n        return false;\n    }\n\n    if (polygonGeometry.type === 'Polygon') {\n        const tilePolygon = getTilePolygon(polygonGeometry.coordinates, polyBBox, canonical);\n        const tilePoints = getTilePoints(ctx.geometry(), pointBBox, polyBBox, canonical);\n        if (!boxWithinBox(pointBBox, polyBBox)) return false;\n\n        for (const point of tilePoints) {\n            if (!pointWithinPolygon(point, tilePolygon)) return false;\n        }\n    }\n    if (polygonGeometry.type === 'MultiPolygon') {\n        const tilePolygons = getTilePolygons(polygonGeometry.coordinates, polyBBox, canonical);\n        const tilePoints = getTilePoints(ctx.geometry(), pointBBox, polyBBox, canonical);\n        if (!boxWithinBox(pointBBox, polyBBox)) return false;\n\n        for (const point of tilePoints) {\n            if (!pointWithinPolygons(point, tilePolygons)) return false;\n        }\n    }\n\n    return true;\n}\n\nfunction linesWithinPolygons(ctx: EvaluationContext, polygonGeometry: GeoJSONPolygons): boolean {\n    const lineBBox: BBox = [Infinity, Infinity, -Infinity, -Infinity];\n    const polyBBox: BBox = [Infinity, Infinity, -Infinity, -Infinity];\n\n    const canonical = ctx.canonicalID();\n    if (!canonical) {\n        return false;\n    }\n\n    if (polygonGeometry.type === 'Polygon') {\n        const tilePolygon = getTilePolygon(polygonGeometry.coordinates, polyBBox, canonical);\n        const tileLines = getTileLines(ctx.geometry(), lineBBox, polyBBox, canonical);\n        if (!boxWithinBox(lineBBox, polyBBox)) return false;\n\n        for (const line of tileLines) {\n            if (!lineStringWithinPolygon(line, tilePolygon)) return false;\n        }\n    }\n    if (polygonGeometry.type === 'MultiPolygon') {\n        const tilePolygons = getTilePolygons(polygonGeometry.coordinates, polyBBox, canonical);\n        const tileLines = getTileLines(ctx.geometry(), lineBBox, polyBBox, canonical);\n        if (!boxWithinBox(lineBBox, polyBBox)) return false;\n\n        for (const line of tileLines) {\n            if (!lineStringWithinPolygons(line, tilePolygons)) return false;\n        }\n    }\n    return true;\n}\n\nclass Within implements Expression {\n    type: Type;\n    geojson: GeoJSON.GeoJSON;\n    geometries: GeoJSONPolygons;\n\n    constructor(geojson: GeoJSON.GeoJSON, geometries: GeoJSONPolygons) {\n        this.type = BooleanType;\n        this.geojson = geojson;\n        this.geometries = geometries;\n    }\n\n    static parse(args: ReadonlyArray<unknown>, context: ParsingContext): Within | void {\n        if (args.length !== 2)\n            return context.error(`'within' expression requires exactly one argument, but found ${args.length - 1} instead.`);\n        if (isValue(args[1])) {\n            const geojson = args[1] as GeoJSON.GeoJSON;\n            if (geojson.type === 'FeatureCollection') {\n                for (let i = 0; i < geojson.features.length; ++i) {\n                    const type = geojson.features[i].geometry.type;\n                    if (type === 'Polygon' || type === 'MultiPolygon') {\n                        return new Within(geojson, geojson.features[i].geometry as GeoJSONPolygons);\n                    }\n                }\n            } else if (geojson.type === 'Feature') {\n                const type = geojson.geometry.type;\n                if (type === 'Polygon' || type === 'MultiPolygon') {\n                    return new Within(geojson, geojson.geometry);\n                }\n            } else if (geojson.type === 'Polygon' || geojson.type === 'MultiPolygon') {\n                return new Within(geojson, geojson);\n            }\n        }\n        return context.error(`'within' expression requires valid geojson object that contains polygon geometry type.`);\n    }\n\n    evaluate(ctx: EvaluationContext): boolean {\n        if (ctx.geometry() != null && ctx.canonicalID() != null) {\n            if (ctx.geometryType() === 'Point') {\n                return pointsWithinPolygons(ctx, this.geometries);\n            } else if (ctx.geometryType() === 'LineString') {\n                return linesWithinPolygons(ctx, this.geometries);\n            }\n        }\n        return false;\n    }\n\n    eachChild() {}\n\n    outputDefined(): boolean {\n        return true;\n    }\n\n    serialize(): SerializedExpression {\n        return [\"within\", this.geojson];\n    }\n\n}\n\nexport default Within;\n","\nexport default class TinyQueue {\n    constructor(data = [], compare = (a, b) => (a < b ? -1 : a > b ? 1 : 0)) {\n        this.data = data;\n        this.length = this.data.length;\n        this.compare = compare;\n\n        if (this.length > 0) {\n            for (let i = (this.length >> 1) - 1; i >= 0; i--) this._down(i);\n        }\n    }\n\n    push(item) {\n        this.data.push(item);\n        this._up(this.length++);\n    }\n\n    pop() {\n        if (this.length === 0) return undefined;\n\n        const top = this.data[0];\n        const bottom = this.data.pop();\n\n        if (--this.length > 0) {\n            this.data[0] = bottom;\n            this._down(0);\n        }\n\n        return top;\n    }\n\n    peek() {\n        return this.data[0];\n    }\n\n    _up(pos) {\n        const {data, compare} = this;\n        const item = data[pos];\n\n        while (pos > 0) {\n            const parent = (pos - 1) >> 1;\n            const current = data[parent];\n            if (compare(item, current) >= 0) break;\n            data[pos] = current;\n            pos = parent;\n        }\n\n        data[pos] = item;\n    }\n\n    _down(pos) {\n        const {data, compare} = this;\n        const halfLength = this.length >> 1;\n        const item = data[pos];\n\n        while (pos < halfLength) {\n            let bestChild = (pos << 1) + 1; // initially it is the left child\n            const right = bestChild + 1;\n\n            if (right < this.length && compare(data[right], data[bestChild]) < 0) {\n                bestChild = right;\n            }\n            if (compare(data[bestChild], item) >= 0) break;\n\n            data[pos] = data[bestChild];\n            pos = bestChild;\n        }\n\n        data[pos] = item;\n    }\n}\n","/**\n * The maximum value of a coordinate in the internal tile coordinate system. Coordinates of\n * all source features normalized to this extent upon load.\n *\n * The value is a consequence of the following:\n *\n * * Vertex buffer store positions as signed 16 bit integers.\n * * One bit is lost for signedness to support tile buffers.\n * * One bit is lost because the line vertex buffer used to pack 1 bit of other data into the int.\n * * One bit is lost to support features extending past the extent on the right edge of the tile.\n * * This leaves us with 2^13 = 8192\n *\n * @private\n * @readonly\n */\nexport default 8192;\n","import {isValue} from '../values';\nimport {NumberType} from '../types';\nimport {classifyRings, updateBBox, boxWithinBox, pointWithinPolygon, segmentIntersectSegment} from '../../util/geometry_util';\nimport {lngFromMercatorX, latFromMercatorY} from '../../util/mercator';\nimport TinyQueue from \"tinyqueue\";\nimport EXTENT from '../../data/extent';\n\n// Geodesic scale factors (cheap-ruler math): meters per degree lon/lat at a given latitude.\n// Only the three distance operations used in this file are implemented.\nconst RE = 6378.137; // WGS84 equatorial radius (km)\nconst FE = 1 / 298.257223563; // WGS84 flattening\nconst E2 = FE * (2 - FE);\nconst RAD = Math.PI / 180;\n\nfunction lngLatScale(lat: number): [number, number] {\n    const m = RAD * RE * 1000;\n    const coslat = Math.cos(lat * RAD);\n    const w2 = 1 / (1 - E2 * (1 - coslat * coslat));\n    const w = Math.sqrt(w2);\n    return [m * w * coslat, m * w * w2 * (1 - E2)]; // [kx, ky]\n}\n\nfunction wrapLng(deg: number): number {\n    while (deg < -180) deg += 360;\n    while (deg > 180) deg -= 360;\n    return deg;\n}\n\nfunction rulerDistance(a: [number, number], b: [number, number], kx: number, ky: number): number {\n    const dx = wrapLng(a[0] - b[0]) * kx;\n    const dy = (a[1] - b[1]) * ky;\n    return Math.sqrt(dx * dx + dy * dy);\n}\n\nfunction rulerPointToSegmentDistance(p: [number, number], a: [number, number], b: [number, number], kx: number, ky: number): number {\n    let x = a[0];\n    let y = a[1];\n    let dx = wrapLng(b[0] - x) * kx;\n    let dy = (b[1] - y) * ky;\n\n    if (dx !== 0 || dy !== 0) {\n        const t = (wrapLng(p[0] - x) * kx * dx + (p[1] - y) * ky * dy) / (dx * dx + dy * dy);\n        if (t > 1) {\n            x = b[0];\n            y = b[1];\n        } else if (t > 0) {\n            x += (dx / kx) * t;\n            y += (dy / ky) * t;\n        }\n    }\n\n    dx = wrapLng(p[0] - x) * kx;\n    dy = (p[1] - y) * ky;\n    return Math.sqrt(dx * dx + dy * dy);\n}\n\nfunction rulerPointOnLine(line: Array<[number, number]>, p: [number, number], kx: number, ky: number): [number, number] {\n    let minDist = Infinity;\n    let minX = line[0][0];\n    let minY = line[0][1];\n\n    for (let i = 0; i < line.length - 1; i++) {\n        let x = line[i][0];\n        let y = line[i][1];\n        let dx = wrapLng(line[i + 1][0] - x) * kx;\n        let dy = (line[i + 1][1] - y) * ky;\n        let t = 0;\n\n        if (dx !== 0 || dy !== 0) {\n            t = (wrapLng(p[0] - x) * kx * dx + (p[1] - y) * ky * dy) / (dx * dx + dy * dy);\n            if (t > 1) {\n                x = line[i + 1][0];\n                y = line[i + 1][1];\n            } else if (t > 0) {\n                x += (dx / kx) * t;\n                y += (dy / ky) * t;\n            }\n        }\n\n        dx = wrapLng(p[0] - x) * kx;\n        dy = (p[1] - y) * ky;\n        const sqDist = dx * dx + dy * dy;\n        if (sqDist < minDist) {\n            minDist = sqDist;\n            minX = x;\n            minY = y;\n        }\n    }\n\n    return [minX, minY];\n}\n\nimport type Point from \"@mapbox/point-geometry\";\nimport type ParsingContext from '../parsing_context';\nimport type {BBox} from '../../util/geometry_util';\nimport type {Type} from '../types';\nimport type {Expression} from '../expression';\nimport type {CanonicalTileID} from '../../types/tile_id';\nimport type EvaluationContext from '../evaluation_context';\n\ntype DistanceGeometry = GeoJSON.Point | GeoJSON.MultiPoint | GeoJSON.LineString | GeoJSON.MultiLineString | GeoJSON.Polygon | GeoJSON.MultiPolygon;\n\n// Inclusive index range for multipoint or linestring container\ntype IndexRange = [number, number];\ntype DistPair = {\n    dist: number;\n    range1: IndexRange;\n    range2: IndexRange;\n};\nfunction compareMax(a: DistPair, b: DistPair) {\n    return b.dist - a.dist;\n}\n\nconst MIN_POINT_SIZE = 100;\nconst MIN_LINE_POINT_SIZE = 50;\n\nfunction isDefaultBBOX(bbox: BBox) {\n    const defualtBBox = [Infinity, Infinity, -Infinity, -Infinity];\n    if (defualtBBox.length !== bbox.length) {\n        return false;\n    }\n    for (let i = 0; i < defualtBBox.length; i++) {\n        if (defualtBBox[i] !== bbox[i]) {\n            return false;\n        }\n    }\n    return true;\n}\n\nfunction getRangeSize(range: IndexRange) {\n    return range[1] - range[0] + 1;\n}\n\nfunction isRangeSafe(range: IndexRange, threshold: number) {\n    const ret = range[1] >= range[0] && range[1] < threshold;\n    if (!ret) {\n        console.warn(\"Distance Expression: Index is out of range\");\n    }\n    return ret;\n}\n\n// Split the point set(points or linestring) into two halves, using IndexRange to do in-place splitting.\n// If geometry is a line, the last point(here is the second index) of range1 needs to be included as the first point(here is the first index) of range2.\n// If geometry are points, just split the points equally(if possible) into two new point sets(here are two index ranges).\nfunction splitRange(range: IndexRange, isLine: boolean) {\n    if (range[0] > range[1]) return [null, null];\n    const size = getRangeSize(range);\n    if (isLine) {\n        if (size === 2) {\n            return [range, null];\n        }\n        const size1 = Math.floor(size / 2);\n        const range1: IndexRange = [range[0], range[0] + size1];\n        const range2: IndexRange = [range[0] + size1, range[1]];\n        return [range1, range2];\n    } else {\n        if (size === 1) {\n            return [range, null];\n        }\n        const size1 = Math.floor(size / 2) - 1;\n        const range1: IndexRange = [range[0], range[0] + size1];\n        const range2: IndexRange = [range[0] + size1 + 1, range[1]];\n        return [range1, range2];\n    }\n}\n\nfunction getBBox(pointSets: Array<[number, number]>, range: IndexRange) {\n    const bbox: BBox = [Infinity, Infinity, -Infinity, -Infinity];\n    if (!isRangeSafe(range, pointSets.length)) return bbox;\n    for (let i = range[0]; i <= range[1]; ++i) {\n        updateBBox(bbox, pointSets[i]);\n    }\n    return bbox;\n}\n\nfunction getPolygonBBox(polygon: Array<Array<[number, number]>>) {\n    const bbox: BBox = [Infinity, Infinity, -Infinity, -Infinity];\n    for (let i = 0; i < polygon.length; ++i) {\n        for (let j = 0; j < polygon[i].length; ++j) {\n            updateBBox(bbox, polygon[i][j]);\n        }\n    }\n    return bbox;\n}\n\n// Calculate the distance between two bounding boxes.\n// Calculate the delta in x and y direction, and use two fake points {0.0, 0.0} and {dx, dy} to calculate the distance.\n// Distance will be 0.0 if bounding box are overlapping.\nfunction bboxToBBoxDistance(bbox1: BBox, bbox2: BBox, kx: number, ky: number) {\n    if (isDefaultBBOX(bbox1) || isDefaultBBOX(bbox2)) {\n        return NaN;\n    }\n    let dx = 0.0;\n    let dy = 0.0;\n    // bbox1 in left side\n    if (bbox1[2] < bbox2[0]) {\n        dx = bbox2[0] - bbox1[2];\n    }\n    // bbox1 in right side\n    if (bbox1[0] > bbox2[2]) {\n        dx = bbox1[0] - bbox2[2];\n    }\n    // bbox1 in above side\n    if (bbox1[1] > bbox2[3]) {\n        dy = bbox1[1] - bbox2[3];\n    }\n    // bbox1 in down side\n    if (bbox1[3] < bbox2[1]) {\n        dy = bbox2[1] - bbox1[3];\n    }\n    return rulerDistance([0.0, 0.0], [dx, dy], kx, ky);\n}\n\nexport function getLngLatPoint(coord: Point, canonical: CanonicalTileID, extent: number = EXTENT): [number, number] {\n    const tilesAtZoom = Math.pow(2, canonical.z);\n    const x = (coord.x / extent + canonical.x) / tilesAtZoom;\n    const y = (coord.y / extent + canonical.y) / tilesAtZoom;\n    return [lngFromMercatorX(x), latFromMercatorY(y)];\n}\n\nfunction getLngLatPoints(coordinates: Array<Point>, canonical: CanonicalTileID): Array<[number, number]> {\n    const coords: Array<[number, number]> = [];\n    for (let i = 0; i < coordinates.length; ++i) {\n        coords.push(getLngLatPoint(coordinates[i], canonical));\n    }\n    return coords;\n}\n\nfunction pointToLineDistance(point: [number, number], line: Array<[number, number]>, kx: number, ky: number) {\n    const nearestPoint = rulerPointOnLine(line, point, kx, ky);\n    return rulerDistance(point, nearestPoint, kx, ky);\n}\n\nfunction pointsToLineDistance(points: Array<[number, number]>, rangeA: IndexRange, line: Array<[number, number]>, rangeB: IndexRange, kx: number, ky: number) {\n    const subLine = line.slice(rangeB[0], rangeB[1] + 1);\n    let dist = Infinity;\n    for (let i = rangeA[0]; i <= rangeA[1]; ++i) {\n        if ((dist = Math.min(dist, pointToLineDistance(points[i], subLine, kx, ky))) === 0.0) return 0.0;\n    }\n    return dist;\n}\n\n// precondition is two segments are not intersecting with each other\nfunction segmentToSegmentDistance(p1: [number, number], p2: [number, number], q1: [number, number], q2: [number, number], kx: number, ky: number) {\n    const dist1 = Math.min(\n        rulerPointToSegmentDistance(p1, q1, q2, kx, ky),\n        rulerPointToSegmentDistance(p2, q1, q2, kx, ky)\n    );\n    const dist2 = Math.min(\n        rulerPointToSegmentDistance(q1, p1, p2, kx, ky),\n        rulerPointToSegmentDistance(q2, p1, p2, kx, ky)\n    );\n\n    return Math.min(dist1, dist2);\n}\n\nfunction lineToLineDistance(line1: Array<[number, number]>, range1: IndexRange, line2: Array<[number, number]>, range2: IndexRange, kx: number, ky: number) {\n    if (!isRangeSafe(range1, line1.length) || !isRangeSafe(range2, line2.length)) {\n        return NaN;\n    }\n    let dist = Infinity;\n    for (let i = range1[0]; i < range1[1]; ++i) {\n        for (let j = range2[0]; j < range2[1]; ++j) {\n            if (segmentIntersectSegment(line1[i], line1[i + 1], line2[j], line2[j + 1])) return 0.0;\n            dist = Math.min(dist, segmentToSegmentDistance(line1[i], line1[i + 1], line2[j], line2[j + 1], kx, ky));\n        }\n    }\n    return dist;\n}\n\nfunction pointsToPointsDistance(pointSet1: Array<[number, number]>, range1: IndexRange, pointSet2: Array<[number, number]>, range2: IndexRange, kx: number, ky: number) {\n    if (!isRangeSafe(range1, pointSet1.length) || !isRangeSafe(range2, pointSet2.length)) {\n        return NaN;\n    }\n    let dist = Infinity;\n    for (let i = range1[0]; i <= range1[1]; ++i) {\n        for (let j = range2[0]; j <= range2[1]; ++j) {\n            if ((dist = Math.min(dist, rulerDistance(pointSet1[i], pointSet2[j], kx, ky))) === 0.0) return dist;\n        }\n    }\n    return dist;\n}\n\nfunction pointToPolygonDistance(point: [number, number], polygon: Array<Array<[number, number]>>, kx: number, ky: number) {\n    if (pointWithinPolygon(point, polygon, true /*trueOnBoundary*/)) return 0.0;\n    let dist = Infinity;\n    for (const ring of polygon) {\n        const ringLen = ring.length;\n        if (ringLen < 2) {\n            console.warn(\"Distance Expression: Invalid polygon!\");\n            return NaN;\n        }\n        if (ring[0] !== ring[ringLen - 1]) {\n            if ((dist = Math.min(dist, rulerPointToSegmentDistance(point, ring[ringLen - 1], ring[0], kx, ky))) === 0.0) return dist;\n        }\n        if ((dist = Math.min(dist, pointToLineDistance(point, ring, kx, ky))) === 0.0) return dist;\n    }\n    return dist;\n}\n\nfunction lineToPolygonDistance(line: Array<[number, number]>, range: IndexRange, polygon: Array<Array<[number, number]>>, kx: number, ky: number) {\n    if (!isRangeSafe(range, line.length)) {\n        return NaN;\n    }\n    for (let i = range[0]; i <= range[1]; ++i) {\n        if (pointWithinPolygon(line[i], polygon, true /*trueOnBoundary*/)) return 0.0;\n    }\n    let dist = Infinity;\n    for (let i = range[0]; i < range[1]; ++i) {\n        for (const ring of polygon) {\n            for (let j = 0, len = ring.length, k = len - 1; j < len; k = j++) {\n                if (segmentIntersectSegment(line[i], line[i + 1], ring[k], ring[j])) return 0.0;\n                dist = Math.min(dist, segmentToSegmentDistance(line[i], line[i + 1], ring[k], ring[j], kx, ky));\n            }\n        }\n    }\n    return dist;\n}\n\nfunction polygonIntersect(polygon1: Array<Array<[number, number]>>, polygon2: Array<Array<[number, number]>>) {\n    for (const ring of polygon1) {\n        for (let i = 0; i <= ring.length - 1; ++i) {\n            if (pointWithinPolygon(ring[i], polygon2, true /*trueOnBoundary*/)) return true;\n        }\n    }\n    return false;\n}\n\nfunction polygonToPolygonDistance(polygon1: Array<Array<[number, number]>>, polygon2: Array<Array<[number, number]>>, kx: number, ky: number, currentMiniDist: number = Infinity) {\n    const bbox1 = getPolygonBBox(polygon1);\n    const bbox2 = getPolygonBBox(polygon2);\n    if (currentMiniDist !== Infinity && bboxToBBoxDistance(bbox1, bbox2, kx, ky) >= currentMiniDist) {\n        return currentMiniDist;\n    }\n    if (boxWithinBox(bbox1, bbox2)) {\n        if (polygonIntersect(polygon1, polygon2)) return 0.0;\n    } else if (polygonIntersect(polygon2, polygon1)) {\n        return 0.0;\n    }\n    let dist = currentMiniDist;\n    for (const ring1 of polygon1) {\n        for (let i = 0, len1 = ring1.length, l = len1 - 1; i < len1; l = i++) {\n            for (const ring2 of polygon2) {\n                for (let j = 0, len2 = ring2.length, k = len2 - 1; j < len2; k = j++) {\n                    if (segmentIntersectSegment(ring1[l], ring1[i], ring2[k], ring2[j])) return 0.0;\n                    dist = Math.min(dist, segmentToSegmentDistance(ring1[l], ring1[i], ring2[k], ring2[j], kx, ky));\n                }\n            }\n        }\n    }\n    return dist;\n}\n\nfunction updateQueue(distQueue: TinyQueue<DistPair>, miniDist: number, kx: number, ky: number, pointSet1: Array<[number, number]>, pointSet2: Array<[number, number]>, r1: IndexRange | null, r2: IndexRange | null) {\n    if (r1 === null || r2 === null) return;\n    const tempDist = bboxToBBoxDistance(getBBox(pointSet1, r1), getBBox(pointSet2, r2), kx, ky);\n    // Insert new pair to the queue if the bbox distance is less than miniDist, the pair with biggest distance will be at the top\n    if (tempDist < miniDist) distQueue.push({dist: tempDist, range1: r1, range2: r2});\n}\n\n// Divide and conquer, the time complexity is O(n*lgn), faster than Brute force O(n*n)\n// Most of the time, use index for in-place processing.\nfunction pointSetToPolygonDistance(pointSets: Array<[number, number]>, isLine: boolean, polygon: Array<Array<[number, number]>>, kx: number, ky: number, currentMiniDist: number = Infinity) {\n    let miniDist = Math.min(rulerDistance(pointSets[0], polygon[0][0], kx, ky), currentMiniDist);\n    if (miniDist === 0.0) return miniDist;\n    const initialDistPair: DistPair = {\n        dist: 0,\n        range1: [0, pointSets.length - 1],\n        range2: [0, 0]\n    };\n    const distQueue = new TinyQueue<DistPair>([initialDistPair], compareMax);\n\n    const setThreshold = isLine ? MIN_LINE_POINT_SIZE : MIN_POINT_SIZE;\n    const polyBBox = getPolygonBBox(polygon);\n\n    while (distQueue.length) {\n        const distPair = distQueue.pop();\n        if (distPair.dist >= miniDist) continue;\n        const range = distPair.range1;\n        // In case the set size are relatively small, we could use brute-force directly\n        if (getRangeSize(range) <= setThreshold) {\n            if (!isRangeSafe(range, pointSets.length)) return NaN;\n            if (isLine) {\n                const tempDist = lineToPolygonDistance(pointSets, range, polygon, kx, ky);\n                if ((miniDist = Math.min(miniDist, tempDist)) === 0.0) return miniDist;\n            } else {\n                for (let i = range[0]; i <= range[1]; ++i) {\n                    const tempDist = pointToPolygonDistance(pointSets[i], polygon, kx, ky);\n                    if ((miniDist = Math.min(miniDist, tempDist)) === 0.0) return miniDist;\n                }\n            }\n        } else {\n            const newRanges = splitRange(range, isLine);\n            if (newRanges[0] !== null) {\n                const tempDist = bboxToBBoxDistance(getBBox(pointSets, newRanges[0]), polyBBox, kx, ky);\n                if (tempDist < miniDist) distQueue.push({dist: tempDist, range1: newRanges[0], range2: [0, 0]});\n            }\n            if (newRanges[1] !== null) {\n                const tempDist = bboxToBBoxDistance(getBBox(pointSets, newRanges[1]), polyBBox, kx, ky);\n                if (tempDist < miniDist) distQueue.push({dist: tempDist, range1: newRanges[1], range2: [0, 0]});\n            }\n        }\n    }\n    return miniDist;\n}\n\nfunction pointSetsDistance(pointSet1: Array<[number, number]>, isLine1: boolean, pointSet2: Array<[number, number]>, isLine2: boolean, kx: number, ky: number, currentMiniDist: number = Infinity) {\n    let miniDist = Math.min(currentMiniDist, rulerDistance(pointSet1[0], pointSet2[0], kx, ky));\n    if (miniDist === 0.0) return miniDist;\n    const initialDistPair: DistPair = {\n        dist: 0,\n        range1: [0, pointSet1.length - 1],\n        range2: [0, pointSet2.length - 1]\n    };\n    const distQueue = new TinyQueue<DistPair>([initialDistPair], compareMax);\n\n    const set1Threshold = isLine1 ? MIN_LINE_POINT_SIZE : MIN_POINT_SIZE;\n    const set2Threshold = isLine2 ? MIN_LINE_POINT_SIZE : MIN_POINT_SIZE;\n\n    while (distQueue.length) {\n        const distPair = distQueue.pop();\n        if (distPair.dist >= miniDist) continue;\n        const rangeA = distPair.range1;\n        const rangeB = distPair.range2;\n        // In case the set size are relatively small, we could use brute-force directly\n        if (getRangeSize(rangeA) <= set1Threshold && getRangeSize(rangeB) <= set2Threshold) {\n            if (!isRangeSafe(rangeA, pointSet1.length) || !isRangeSafe(rangeB, pointSet2.length)) {\n                return NaN;\n            }\n            if (isLine1 && isLine2) {\n                miniDist = Math.min(miniDist, lineToLineDistance(pointSet1, rangeA, pointSet2, rangeB, kx, ky));\n            } else if (!isLine1 && !isLine2) {\n                miniDist = Math.min(miniDist, pointsToPointsDistance(pointSet1, rangeA, pointSet2, rangeB, kx, ky));\n            } else if (isLine1 && !isLine2) {\n                miniDist = Math.min(miniDist, pointsToLineDistance(pointSet2, rangeB, pointSet1, rangeA, kx, ky));\n            } else if (!isLine1 && isLine2) {\n                miniDist = Math.min(miniDist, pointsToLineDistance(pointSet1, rangeA, pointSet2, rangeB, kx, ky));\n            }\n            if (miniDist === 0.0) return miniDist;\n        } else {\n            const newRangesA = splitRange(rangeA, isLine1);\n            const newRangesB = splitRange(rangeB, isLine2);\n            updateQueue(distQueue, miniDist, kx, ky, pointSet1, pointSet2, newRangesA[0], newRangesB[0]);\n            updateQueue(distQueue, miniDist, kx, ky, pointSet1, pointSet2, newRangesA[0], newRangesB[1]);\n            updateQueue(distQueue, miniDist, kx, ky, pointSet1, pointSet2, newRangesA[1], newRangesB[0]);\n            updateQueue(distQueue, miniDist, kx, ky, pointSet1, pointSet2, newRangesA[1], newRangesB[1]);\n        }\n    }\n    return miniDist;\n}\n\nfunction pointSetToLinesDistance(pointSet: Array<[number, number]>, isLine: boolean, lines: Array<Array<[number, number]>>, kx: number, ky: number, currentMiniDist: number = Infinity) {\n    let dist = currentMiniDist;\n    const bbox1 = getBBox(pointSet, [0, pointSet.length - 1]);\n    for (const line of lines) {\n        if (dist !== Infinity && bboxToBBoxDistance(bbox1, getBBox(line, [0, line.length - 1]), kx, ky) >= dist) continue;\n        dist = Math.min(dist, pointSetsDistance(pointSet, isLine, line, true /*isLine*/, kx, ky, dist));\n        if (dist === 0.0) return dist;\n    }\n    return dist;\n}\n\nfunction pointSetToPolygonsDistance(points: Array<[number, number]>, isLine: boolean, polygons: Array<Array<Array<[number, number]>>>, kx: number, ky: number, currentMiniDist: number = Infinity) {\n    let dist = currentMiniDist;\n    const bbox1 = getBBox(points, [0, points.length - 1]);\n    for (const polygon of polygons) {\n        if (dist !== Infinity && bboxToBBoxDistance(bbox1, getPolygonBBox(polygon), kx, ky) >= dist) continue;\n        const tempDist = pointSetToPolygonDistance(points, isLine, polygon, kx, ky, dist);\n        if (isNaN(tempDist)) return tempDist;\n        if ((dist = Math.min(dist, tempDist)) === 0.0) return dist;\n    }\n    return dist;\n}\n\nfunction polygonsToPolygonsDistance(polygons1: Array<Array<Array<[number, number]>>>, polygons2: Array<Array<Array<[number, number]>>>, kx: number, ky: number) {\n    let dist = Infinity;\n    for (const polygon1 of polygons1) {\n        for (const polygon2 of polygons2) {\n            const tempDist = polygonToPolygonDistance(polygon1, polygon2, kx, ky, dist);\n            if (isNaN(tempDist)) return tempDist;\n            if ((dist = Math.min(dist, tempDist)) === 0.0) return dist;\n        }\n    }\n    return dist;\n}\n\nfunction pointsToGeometryDistance(originGeometry: Array<Array<Point>>, canonical: CanonicalTileID, geometry: DistanceGeometry) {\n    const lngLatPoints: Array<[number, number]> = [];\n    for (const points of originGeometry) {\n        for (const point of points) {\n            lngLatPoints.push(getLngLatPoint(point, canonical));\n        }\n    }\n    const [kx, ky] = lngLatScale(lngLatPoints[0][1]);\n    if (geometry.type === 'Point' || geometry.type === 'MultiPoint' || geometry.type === 'LineString') {\n        return pointSetsDistance(lngLatPoints, false /*isLine*/,\n            (geometry.type === 'Point' ? [geometry.coordinates] : geometry.coordinates) as Array<[number, number]>,\n            geometry.type === 'LineString' /*isLine*/, kx, ky);\n    }\n    if (geometry.type === 'MultiLineString') {\n        return pointSetToLinesDistance(lngLatPoints, false /*isLine*/, geometry.coordinates as Array<Array<[number, number]>>, kx, ky);\n    }\n    if (geometry.type === 'Polygon' || geometry.type === 'MultiPolygon') {\n        return pointSetToPolygonsDistance(lngLatPoints, false /*isLine*/,\n            (geometry.type === 'Polygon' ? [geometry.coordinates] : geometry.coordinates) as Array<Array<Array<[number, number]>>>, kx, ky);\n    }\n    return null;\n}\n\nfunction linesToGeometryDistance(originGeometry: Array<Array<Point>>, canonical: CanonicalTileID, geometry: DistanceGeometry) {\n    const lngLatLines: Array<Array<[number, number]>> = [];\n    for (const line of originGeometry) {\n        const lngLatLine: Array<[number, number]> = [];\n        for (const point of line) {\n            lngLatLine.push(getLngLatPoint(point, canonical));\n        }\n        lngLatLines.push(lngLatLine);\n    }\n    const [kx, ky] = lngLatScale(lngLatLines[0][0][1]);\n    if (geometry.type === 'Point' || geometry.type === 'MultiPoint' || geometry.type === 'LineString') {\n        return pointSetToLinesDistance(\n            (geometry.type === 'Point' ? [geometry.coordinates] : geometry.coordinates) as Array<[number, number]>,\n            geometry.type === 'LineString' /*isLine*/, lngLatLines, kx, ky);\n    }\n    if (geometry.type === 'MultiLineString') {\n        let dist = Infinity;\n        for (let i = 0; i < geometry.coordinates.length; i++) {\n            const tempDist = pointSetToLinesDistance(geometry.coordinates[i] as Array<[number, number]>, true /*isLine*/, lngLatLines, kx, ky, dist);\n            if (isNaN(tempDist)) return tempDist;\n            if ((dist = Math.min(dist, tempDist)) === 0.0) return dist;\n        }\n        return dist;\n    }\n    if (geometry.type === 'Polygon' || geometry.type === 'MultiPolygon') {\n        let dist = Infinity;\n        for (let i = 0; i < lngLatLines.length; i++) {\n            const tempDist = pointSetToPolygonsDistance(lngLatLines[i], true /*isLine*/,\n                (geometry.type === 'Polygon' ? [geometry.coordinates] : geometry.coordinates) as Array<Array<Array<[number, number]>>>,\n                kx, ky, dist);\n            if (isNaN(tempDist)) return tempDist;\n            if ((dist = Math.min(dist, tempDist)) === 0.0) return dist;\n        }\n        return dist;\n    }\n    return null;\n}\n\nfunction polygonsToGeometryDistance(originGeometry: Array<Array<Point>>, canonical: CanonicalTileID, geometry: DistanceGeometry) {\n    const lngLatPolygons: Array<Array<Array<[number, number]>>> = [];\n    for (const polygon of classifyRings(originGeometry, 0)) {\n        const lngLatPolygon: Array<Array<[number, number]>> = [];\n        for (let i = 0; i < polygon.length; ++i) {\n            lngLatPolygon.push(getLngLatPoints(polygon[i], canonical));\n        }\n        lngLatPolygons.push(lngLatPolygon);\n    }\n    const [kx, ky] = lngLatScale(lngLatPolygons[0][0][0][1]);\n    if (geometry.type === 'Point' || geometry.type === 'MultiPoint' || geometry.type === 'LineString') {\n        return pointSetToPolygonsDistance(\n            (geometry.type === 'Point' ? [geometry.coordinates] : geometry.coordinates) as Array<[number, number]>,\n            geometry.type === 'LineString' /*isLine*/, lngLatPolygons, kx, ky);\n    }\n    if (geometry.type === 'MultiLineString') {\n        let dist = Infinity;\n        for (let i = 0; i < geometry.coordinates.length; i++) {\n            const tempDist = pointSetToPolygonsDistance(geometry.coordinates[i] as Array<[number, number]>, true /*isLine*/, lngLatPolygons, kx, ky, dist);\n            if (isNaN(tempDist)) return tempDist;\n            if ((dist = Math.min(dist, tempDist)) === 0.0) return dist;\n        }\n        return dist;\n    }\n    if (geometry.type === 'Polygon' || geometry.type === 'MultiPolygon') {\n        return polygonsToPolygonsDistance(\n            (geometry.type === 'Polygon' ? [geometry.coordinates] : geometry.coordinates) as Array<Array<Array<[number, number]>>>,\n            lngLatPolygons, kx, ky);\n    }\n    return null;\n}\n\nfunction isTypeValid(type: string) {\n    return (\n        type === \"Point\" ||\n        type === \"MultiPoint\" ||\n        type === \"LineString\" ||\n        type === \"MultiLineString\" ||\n        type === \"Polygon\" ||\n        type === \"MultiPolygon\"\n    );\n}\nclass Distance implements Expression {\n    type: Type;\n    geojson: GeoJSON.GeoJSON;\n    geometries: DistanceGeometry;\n\n    constructor(geojson: GeoJSON.GeoJSON, geometries: DistanceGeometry) {\n        this.type = NumberType;\n        this.geojson = geojson;\n        this.geometries = geometries;\n    }\n\n    static parse(args: ReadonlyArray<unknown>, context: ParsingContext): Distance | null | void {\n        if (args.length !== 2) {\n            return context.error(`'distance' expression requires either one argument, but found ' ${args.length - 1} instead.`);\n        }\n        if (isValue(args[1])) {\n            const geojson = args[1] as GeoJSON.GeoJSON;\n            if (geojson.type === 'FeatureCollection') {\n                for (let i = 0; i < geojson.features.length; ++i) {\n                    if (isTypeValid(geojson.features[i].geometry.type)) {\n                        return new Distance(geojson, geojson.features[i].geometry as DistanceGeometry);\n                    }\n                }\n            } else if (geojson.type === 'Feature') {\n                if (isTypeValid(geojson.geometry.type)) {\n                    return new Distance(geojson, geojson.geometry as DistanceGeometry);\n                }\n            } else if (isTypeValid(geojson.type)) {\n                return new Distance(geojson, geojson as DistanceGeometry);\n            }\n        }\n        return context.error(\n            \"'distance' expression needs to be an array with format [\\'Distance\\', GeoJSONObj].\"\n        );\n    }\n\n    evaluate(ctx: EvaluationContext): number | null {\n        const geometry = ctx.geometry();\n        const canonical = ctx.canonicalID();\n        if (geometry != null && canonical != null) {\n            if (ctx.geometryType() === 'Point') {\n                return pointsToGeometryDistance(geometry, canonical, this.geometries);\n            }\n            if (ctx.geometryType() === 'LineString') {\n                return linesToGeometryDistance(geometry, canonical, this.geometries);\n            }\n            if (ctx.geometryType() === 'Polygon') {\n                return polygonsToGeometryDistance(geometry, canonical, this.geometries);\n            }\n            console.warn(\"Distance Expression: currently only evaluates valid Point/LineString/Polygon geometries.\");\n        } else {\n            console.warn(\"Distance Expression: requires valid feature and canonical information.\");\n        }\n        return null;\n    }\n\n    eachChild() {}\n\n    outputDefined(): boolean {\n        return true;\n    }\n\n    serialize(): Array<unknown> {\n        return ['distance', this.geojson];\n    }\n}\n\nexport default Distance;\n","import CompoundExpression from './compound_expression';\nimport Within from './definitions/within';\nimport Distance from './definitions/distance';\nimport Config from './definitions/config';\n\nimport type {Expression} from './expression';\n\nfunction isFeatureConstant(e: Expression): boolean {\n    if (e instanceof CompoundExpression) {\n        if (e.name === 'get' && e.args.length === 1) {\n            return false;\n        } else if (e.name === 'feature-state') {\n            return false;\n        } else if (e.name === 'has' && e.args.length === 1) {\n            return false;\n        } else if (\n            e.name === 'properties' ||\n            e.name === 'geometry-type' ||\n            e.name === 'id'\n        ) {\n            return false;\n        } else if (e.name.startsWith('filter-')) {\n            return false;\n        }\n    }\n\n    if (e instanceof Within) {\n        return false;\n    }\n\n    if (e instanceof Distance) {\n        return false;\n    }\n\n    if (e instanceof Config) {\n        return e.featureConstant;\n    }\n\n    let result = true;\n    e.eachChild(arg => {\n        if (result && !isFeatureConstant(arg)) { result = false; }\n    });\n    return result;\n}\n\nfunction isStateConstant(e: Expression): boolean {\n    if (e instanceof CompoundExpression) {\n        if (e.name === 'feature-state') {\n            return false;\n        }\n    }\n    let result = true;\n    e.eachChild(arg => {\n        if (result && !isStateConstant(arg)) { result = false; }\n    });\n    return result;\n}\n\nfunction isGlobalPropertyConstantSet(e: Expression, properties: ReadonlySet<string>): boolean {\n    if (e instanceof CompoundExpression && properties.has(e.name)) { return false; }\n    let result = true;\n    e.eachChild((arg) => {\n        if (result && !isGlobalPropertyConstantSet(arg, properties)) { result = false; }\n    });\n    return result;\n}\n\nfunction isGlobalPropertyConstant(e: Expression, properties: Array<string>): boolean {\n    return isGlobalPropertyConstantSet(e, new Set(properties));\n}\n\nexport {isFeatureConstant, isGlobalPropertyConstant, isGlobalPropertyConstantSet, isStateConstant};\n","import {typeEquals, ValueType} from '../types';\nimport {Color, typeOf, toString as valueToString} from '../values';\nimport Formatted from '../types/formatted';\nimport ResolvedImage from '../types/resolved_image';\nimport * as isConstant from '../is_constant';\nimport Literal from './literal';\n\nimport type {Type} from '../types';\nimport type {Expression, SerializedExpression} from '../expression';\nimport type ParsingContext from '../parsing_context';\nimport type EvaluationContext from '../evaluation_context';\n\nconst FQIDSeparator = '\\u001F';\n\nexport function makeConfigFQID(id: string, ownScope?: string | null, contextScope?: string | null): string {\n    return [id, ownScope, contextScope].filter(Boolean).join(FQIDSeparator);\n}\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nfunction coerceValue(type: string, value: any): any {\n    switch (type) {\n    // eslint-disable-next-line @typescript-eslint/no-unsafe-argument\n    case 'string': return valueToString(value);\n    case 'number': return +value;\n    case 'boolean': return !!value;\n    // eslint-disable-next-line @typescript-eslint/no-unsafe-argument\n    case 'color': return Color.parse(value);\n    case 'formatted': {\n        // eslint-disable-next-line @typescript-eslint/no-unsafe-argument\n        return Formatted.fromString(valueToString(value));\n    }\n    case 'resolvedImage': {\n        // eslint-disable-next-line @typescript-eslint/no-unsafe-argument\n        return ResolvedImage.build(valueToString(value));\n    }\n    }\n    return value;\n}\n\nfunction clampToAllowedNumber(value: number, min?: number, max?: number, step?: number): number {\n    if (step !== undefined) {\n        value = step * Math.round(value / step);\n    }\n    if (min !== undefined && value < min) {\n        value = min;\n    }\n    if (max !== undefined && value > max) {\n        value = max;\n    }\n    return value;\n}\n\nclass Config implements Expression {\n    type: Type;\n    key: string;\n    scope: string | null | undefined;\n    featureConstant: boolean;\n\n    constructor(type: Type, key: string, scope?: string, featureConstant: boolean = false) {\n        this.type = type;\n        this.key = key;\n        this.scope = scope;\n        this.featureConstant = featureConstant;\n    }\n\n    static parse(args: ReadonlyArray<unknown>, context: ParsingContext): Config | null | void {\n        let type = context.expectedType;\n        type ??= ValueType;\n        if (args.length < 2 || args.length > 3) {\n            return context.error(`Invalid number of arguments for 'config' expression.`);\n        }\n\n        const configKey = context.parse(args[1], 1);\n        if (!(configKey instanceof Literal)) {\n            return context.error(`Key name of 'config' expression must be a string literal.`);\n        }\n\n        let featureConstant = true;\n        let configScopeValue: string | undefined;\n        const configKeyValue = valueToString(configKey.value);\n\n        if (args.length >= 3) {\n            const configScope = context.parse(args[2], 2);\n            if (!(configScope instanceof Literal)) {\n                return context.error(`Scope of 'config' expression must be a string literal.`);\n            }\n\n            configScopeValue = valueToString(configScope.value);\n        }\n\n        if (context.options) {\n            const fqid = makeConfigFQID(configKeyValue, configScopeValue, context._scope);\n            const config = context.options.get(fqid);\n            if (config) {\n                featureConstant = isConstant.isFeatureConstant(config.value || config.default);\n            }\n        }\n\n        return new Config(type, configKeyValue, configScopeValue, featureConstant);\n    }\n\n    // eslint-disable-next-line @typescript-eslint/no-explicit-any\n    evaluate(ctx: EvaluationContext): any {\n        const fqid = makeConfigFQID(this.key, this.scope, ctx.scope);\n        const config = ctx.getConfig(fqid);\n        if (!config) return null;\n\n        const {type, value, values, minValue, maxValue, stepValue} = config;\n\n        // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\n        const defaultValue = config.default.evaluate(ctx);\n\n        // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\n        let result = defaultValue;\n        if (value) {\n            // temporarily override scope to parent to evaluate config expressions passed from the parent\n            const originalScope = ctx.scope;\n            ctx.scope = (originalScope || '').split(FQIDSeparator).slice(1).join(FQIDSeparator);\n            // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\n            result = value.evaluate(ctx);\n            ctx.scope = originalScope;\n        }\n        if (type) {\n            // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\n            result = coerceValue(type, result);\n        }\n\n        if (result !== undefined && (minValue !== undefined || maxValue !== undefined || stepValue !== undefined)) {\n            if (typeof result === 'number') {\n                result = clampToAllowedNumber(result, minValue, maxValue, stepValue);\n            } else if (Array.isArray(result)) {\n                // eslint-disable-next-line @typescript-eslint/no-unsafe-return\n                result = result.map((item) => (typeof item === 'number' ? clampToAllowedNumber(item, minValue, maxValue, stepValue) : item));\n            }\n        }\n\n        if (value !== undefined && result !== undefined && values && !values.includes(result)) {\n            // The result is not among the allowed values. Instead, use the default value from the option.\n            // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\n            result = defaultValue;\n            if (type) {\n                // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\n                result = coerceValue(type, result);\n            }\n        }\n\n        // eslint-disable-next-line @typescript-eslint/no-unsafe-argument\n        if ((type && type !== (this.type as unknown as string)) || (result !== undefined && !typeEquals(typeOf(result), this.type))) {\n            // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\n            result = coerceValue(this.type.kind, result);\n        }\n\n        return result;\n    }\n\n    eachChild() { }\n\n    outputDefined(): boolean {\n        return false;\n    }\n\n    serialize(): SerializedExpression {\n        const res = [\"config\", this.key];\n        if (this.scope) {\n            res.concat(this.scope);\n        }\n        return res;\n    }\n}\n\nexport default Config;\n","import type {Type} from '../types';\nimport type {Expression} from '../expression';\nimport type ParsingContext from '../parsing_context';\nimport type EvaluationContext  from '../evaluation_context';\n\nclass Var implements Expression {\n    type: Type;\n    name: string;\n    boundExpression: Expression;\n\n    constructor(name: string, boundExpression: Expression) {\n        this.type = boundExpression.type;\n        this.name = name;\n        this.boundExpression = boundExpression;\n    }\n\n    static parse(args: ReadonlyArray<unknown>, context: ParsingContext): void | Var {\n        if (args.length !== 2 || typeof args[1] !== 'string')\n            return context.error(`'var' expression requires exactly one string literal argument.`);\n\n        const name = args[1];\n        if (!context.scope.has(name)) {\n            return context.error(`Unknown variable \"${name}\". Make sure \"${name}\" has been bound in an enclosing \"let\" expression before using it.`, 1);\n        }\n\n        return new Var(name, context.scope.get(name));\n    }\n\n    // eslint-disable-next-line @typescript-eslint/no-explicit-any\n    evaluate(ctx: EvaluationContext): any {\n        return this.boundExpression.evaluate(ctx);\n    }\n\n    eachChild() {}\n\n    outputDefined(): boolean {\n        return false;\n    }\n\n    serialize(): Array<string> {\n        return [\"var\", this.name];\n    }\n}\n\nexport default Var;\n","import Scope from './scope';\nimport {checkSubtype} from './types';\nimport ParsingError from './parsing_error';\nimport Literal from './definitions/literal';\nimport Assertion from './definitions/assertion';\nimport Coercion from './definitions/coercion';\nimport EvaluationContext from './evaluation_context';\nimport CompoundExpression from './compound_expression';\nimport CollatorExpression from './definitions/collator';\nimport Within from './definitions/within';\nimport Distance from './definitions/distance';\nimport Config from './definitions/config';\nimport {isGlobalPropertyConstantSet, isFeatureConstant} from './is_constant';\nimport Var from './definitions/var';\n\nimport type {Expression, ExpressionRegistry} from './expression';\nimport type {Type} from './types';\nimport type {ConfigOptions} from '../types/config_options';\n\n/**\n * State associated parsing at a given point in an expression tree.\n * @private\n */\nclass ParsingContext {\n    registry: ExpressionRegistry;\n    path: Array<number | string>;\n    scope: Scope;\n    errors: Array<ParsingError>;\n    _scope: string | null | undefined;\n    options: ConfigOptions | null | undefined;\n    iconImageUseTheme: string;\n\n    // The expected type of this expression. Provided only to allow Expression\n    // implementations to infer argument types: Expression#parse() need not\n    // check that the output type of the parsed expression matches\n    // `expectedType`.\n    expectedType: Type | null | undefined;\n\n    constructor(\n        registry: ExpressionRegistry,\n        path: Array<number | string> = [],\n        expectedType?: Type | null,\n        scope: Scope = new Scope(),\n        errors: Array<ParsingError> = [],\n        _scope?: string | null,\n        options?: ConfigOptions | null,\n        iconImageUseTheme?: string\n    ) {\n        this.registry = registry;\n        this.path = path;\n        this.scope = scope;\n        this.errors = errors;\n        this.expectedType = expectedType;\n        this._scope = _scope;\n        this.options = options;\n        this.iconImageUseTheme = iconImageUseTheme;\n    }\n\n    get key(): string {\n        let key = '';\n        for (let i = 0; i < this.path.length; i++) {\n            const part = this.path[i];\n            key += typeof part === 'string' ? `['${part}']` : `[${part}]`;\n        }\n        return key;\n    }\n\n    /**\n     * @param expr the JSON expression to parse\n     * @param index the optional argument index if this expression is an argument of a parent expression that's being parsed\n     * @param options\n     * @param options.omitTypeAnnotations set true to omit inferred type annotations.  Caller beware: with this option set, the parsed expression's type will NOT satisfy `expectedType` if it would normally be wrapped in an inferred annotation.\n     * @private\n     */\n    parse(\n        expr: unknown,\n        index?: number,\n        expectedType?: Type | null,\n        bindings?: Array<[string, Expression]>,\n        options: {\n            typeAnnotation?: 'assert' | 'coerce' | 'omit';\n        } = {},\n    ): Expression | null | void {\n        if (index || expectedType) {\n            const prevExpectedType = this.expectedType;\n            const prevScope = this.scope;\n            if (bindings) this.scope = this.scope.concat(bindings);\n            this.expectedType = expectedType || null;\n            const pushed = typeof index === 'number';\n            if (pushed) this.path.push(index);\n            const result = this._parse(expr, options);\n            if (pushed) this.path.pop();\n            this.expectedType = prevExpectedType;\n            this.scope = prevScope;\n            return result;\n        }\n        return this._parse(expr, options);\n    }\n\n    /**\n     * @param expr the JSON expression to parse\n     * @param index the optional argument index if parent object being is an argument of another expression\n     * @param key key of parent object being parsed\n     * @param options\n     * @param options.omitTypeAnnotations set true to omit inferred type annotations.  Caller beware: with this option set, the parsed expression's type will NOT satisfy `expectedType` if it would normally be wrapped in an inferred annotation.\n     * @private\n     */\n    parseObjectValue(\n        expr: unknown,\n        index: number,\n        key: string,\n        expectedType?: Type | null,\n        bindings?: Array<[string, Expression]>,\n        options: {\n            typeAnnotation?: 'assert' | 'coerce' | 'omit';\n        } = {},\n    ): Expression | null | void {\n        const prevExpectedType = this.expectedType;\n        const prevScope = this.scope;\n        if (bindings) this.scope = this.scope.concat(bindings);\n        this.expectedType = expectedType || null;\n        this.path.push(index);\n        this.path.push(key);\n        const result = this._parse(expr, options);\n        this.path.pop();\n        this.path.pop();\n        this.expectedType = prevExpectedType;\n        this.scope = prevScope;\n        return result;\n    }\n\n    _parse(\n        expr: unknown,\n        options: {\n            typeAnnotation?: 'assert' | 'coerce' | 'omit';\n        },\n    ): Expression | null | void {\n        if (expr === null || typeof expr === 'string' || typeof expr === 'boolean' || typeof expr === 'number') {\n            expr = ['literal', expr];\n        }\n\n        if (Array.isArray(expr)) {\n            if (expr.length === 0) {\n                return this.error(`Expected an array with at least one element. If you wanted a literal array, use [\"literal\", []].`);\n            }\n\n            const Expr = typeof expr[0] === 'string' && Object.hasOwn(this.registry, expr[0]) ? this.registry[expr[0]] : undefined;\n            if (Expr) {\n                let parsed = Expr.parse(expr, this);\n                if (!parsed) return null;\n\n                if (this.expectedType) {\n                    const expected = this.expectedType;\n                    const actual = parsed.type;\n\n                    // When we expect a number, string, boolean, or array but have a value, wrap it in an assertion.\n                    // When we expect a color or formatted string, but have a string or value, wrap it in a coercion.\n                    // Otherwise, we do static type-checking.\n                    //\n                    // These behaviors are overridable for:\n                    //   * The \"coalesce\" operator, which needs to omit type annotations.\n                    //   * String-valued properties (e.g. `text-field`), where coercion is more convenient than assertion.\n                    //\n                    if ((expected.kind === 'string' || expected.kind === 'number' || expected.kind === 'boolean' || expected.kind === 'object' || expected.kind === 'array') && actual.kind === 'value') {\n                        parsed = annotate(parsed, expected, options.typeAnnotation || 'assert');\n                    } else if ((expected.kind === 'color' || expected.kind === 'formatted' || expected.kind === 'resolvedImage') && (actual.kind === 'value' || actual.kind === 'string')) {\n                        parsed = annotate(parsed, expected, options.typeAnnotation || 'coerce');\n                    } else if (this.checkSubtype(expected, actual)) {\n                        return null;\n                    }\n                }\n\n                // If an expression's arguments are all literals, we can evaluate\n                // it immediately and replace it with a literal value in the\n                // parsed/compiled result. Expressions that expect an image should\n                // not be resolved here so we can later get the available images.\n                if (!(parsed instanceof Literal) && (parsed.type.kind !== 'resolvedImage') && isConstant(parsed)) {\n                    const ec = new EvaluationContext(this._scope, this.options, this.iconImageUseTheme);\n                    try {\n                        // eslint-disable-next-line @typescript-eslint/no-unsafe-argument\n                        parsed = new Literal(parsed.type, parsed.evaluate(ec));\n                    } catch (e) {\n                        this.error((e as Error).message);\n                        return null;\n                    }\n                }\n\n                return parsed;\n            }\n\n            // Try to parse as array\n            return Coercion.parse(['to-array', expr], this);\n        } else if (typeof expr === 'undefined') {\n            return this.error(`'undefined' value invalid. Use null instead.`);\n        } else if (typeof expr === 'object') {\n            return this.error(`Bare objects invalid. Use [\"literal\", {...}] instead.`);\n        } else {\n            return this.error(`Expected an array, but found ${typeof expr} instead.`);\n        }\n    }\n\n    /**\n     * Returns a copy of this context suitable for parsing the subexpression at\n     * index `index`, optionally appending to 'let' binding map.\n     *\n     * Note that `errors` property, intended for collecting errors while\n     * parsing, is copied by reference rather than cloned.\n     * @private\n     */\n    concat(\n        index?: number | null,\n        key?: string | null,\n        expectedType?: Type | null,\n        bindings?: Array<[string, Expression]>,\n    ): ParsingContext {\n        const scope = bindings ? this.scope.concat(bindings) : this.scope;\n        const path = this.path.slice();\n        if (typeof index === 'number') path.push(index);\n        if (typeof key === 'string') path.push(key);\n        return new ParsingContext(\n            this.registry,\n            path,\n            expectedType || null,\n            scope,\n            this.errors,\n            this._scope,\n            this.options,\n            this.iconImageUseTheme\n        );\n    }\n\n    /**\n     * Returns a fresh context that shares the same path position as this one\n     * but has an empty errors array. Used by CompoundExpression to probe\n     * overload signatures without polluting the parent errors list.\n     * @private\n     */\n    _forkForSignature(): ParsingContext {\n        return new ParsingContext(\n            this.registry,\n            this.path.slice(),\n            null,\n            this.scope,\n            [],\n            this._scope,\n            this.options,\n            this.iconImageUseTheme\n        );\n    }\n\n    /**\n     * Push a parsing (or type checking) error into the `this.errors`\n     * @param error The message\n     * @param keys Optionally specify the source of the error at a child\n     * of the current expression at `this.key`.\n     * @private\n     */\n    error(error: string, ...keys: Array<number>) {\n        const key = `${this.key}${keys.map(k => `[${k}]`).join('')}`;\n        this.errors.push(new ParsingError(key, error));\n    }\n\n    /**\n     * Returns null if `t` is a subtype of `expected`; otherwise returns an\n     * error message and also pushes it to `this.errors`.\n     */\n    checkSubtype(expected: Type, t: Type, index?: number): string | null | undefined {\n        const error = checkSubtype(expected, t);\n        if (error) this.error(error, ...(typeof index === 'number' ? [index] : []));\n        return error;\n    }\n}\n\nexport default ParsingContext;\n\nconst CONSTANT_FOLD_EXCLUDED_GLOBALS = new Set([\n    'zoom', 'heatmap-density', 'worldview', 'line-progress', 'raster-value',\n    'sky-radial-progress', 'accumulated', 'is-supported-script', 'pitch',\n    'distance-from-center', 'measure-light', 'raster-particle-speed', 'is-active-floor',\n]);\n\nfunction annotate(parsed: Expression, type: Type, typeAnnotation: 'assert' | 'coerce' | 'omit') {\n    if (typeAnnotation === 'assert') {\n        return new Assertion(type, [parsed]);\n    } else if (typeAnnotation === 'coerce') {\n        return new Coercion(type, [parsed]);\n    } else {\n        return parsed;\n    }\n}\n\nfunction isConstant(expression: Expression) {\n    if (expression instanceof Var) {\n        return isConstant(expression.boundExpression);\n    } else if (expression instanceof CompoundExpression && expression.name === 'error') {\n        return false;\n    } else if (expression instanceof CollatorExpression) {\n        // Although the results of a Collator expression with fixed arguments\n        // generally shouldn't change between executions, we can't serialize them\n        // as constant expressions because results change based on environment.\n        return false;\n    } else if (expression instanceof Within) {\n        return false;\n    } else if (expression instanceof Distance) {\n        return false;\n    } else if (expression instanceof Config) {\n        return false;\n    }\n\n    const isTypeAnnotation = expression instanceof Coercion ||\n        expression instanceof Assertion;\n\n    let childrenConstant = true;\n    expression.eachChild(child => {\n        // We can _almost_ assume that if `expressions` children are constant,\n        // they would already have been evaluated to Literal values when they\n        // were parsed.  Type annotations are the exception, because they might\n        // have been inferred and added after a child was parsed.\n\n        // So we recurse into isConstant() for the children of type annotations,\n        // but otherwise simply check whether they are Literals.\n        if (isTypeAnnotation) {\n            childrenConstant = childrenConstant && isConstant(child);\n        } else {\n            childrenConstant = childrenConstant && child instanceof Literal;\n        }\n    });\n    if (!childrenConstant) {\n        return false;\n    }\n\n    return isFeatureConstant(expression) &&\n        isGlobalPropertyConstantSet(expression, CONSTANT_FOLD_EXCLUDED_GLOBALS);\n}\n","import RuntimeError from './runtime_error';\n\nimport type {Expression} from './expression';\n\nexport type Stops = Array<[number, Expression]>;\n\n/**\n * Returns the index of the last stop <= input, or 0 if it doesn't exist.\n * @private\n */\nexport function findStopLessThanOrEqualTo(stops: Array<number>, input: number): number {\n    const lastIndex = stops.length - 1;\n    let lowerIndex = 0;\n    let upperIndex = lastIndex;\n    let currentIndex = 0;\n    let currentValue: number;\n    let nextValue: number;\n\n    while (lowerIndex <= upperIndex) {\n        currentIndex = Math.floor((lowerIndex + upperIndex) / 2);\n        currentValue = stops[currentIndex];\n        nextValue = stops[currentIndex + 1];\n\n        if (currentValue <= input) {\n            if (currentIndex === lastIndex || input < nextValue) { // Search complete\n                return currentIndex;\n            }\n\n            lowerIndex = currentIndex + 1;\n        } else if (currentValue > input) {\n            upperIndex = currentIndex - 1;\n        } else {\n            throw new RuntimeError('Input is not a number.');\n        }\n    }\n\n    return 0;\n}\n","import {NumberType} from '../types';\nimport {findStopLessThanOrEqualTo} from '../stops';\n\nimport type {Stops} from '../stops';\nimport type {Expression, SerializedExpression} from '../expression';\nimport type ParsingContext from '../parsing_context';\nimport type EvaluationContext from '../evaluation_context';\nimport type {Type} from '../types';\n\nclass Step implements Expression {\n    type: Type;\n\n    input: Expression;\n    labels: Array<number>;\n    outputs: Array<Expression>;\n\n    constructor(type: Type, input: Expression, stops: Stops) {\n        this.type = type;\n        this.input = input;\n\n        this.labels = [];\n        this.outputs = [];\n        for (const [label, expression] of stops) {\n            this.labels.push(label);\n            this.outputs.push(expression);\n        }\n    }\n\n    static parse(args: ReadonlyArray<unknown>, context: ParsingContext): Step | null | void {\n        if (args.length - 1 < 4) {\n            return context.error(`Expected at least 4 arguments, but found only ${args.length - 1}.`);\n        }\n\n        if ((args.length - 1) % 2 !== 0) {\n            return context.error(`Expected an even number of arguments.`);\n        }\n\n        const input = context.parse(args[1], 1, NumberType);\n        if (!input) return null;\n\n        const stops: Stops = [];\n\n        let outputType: Type = null;\n        if (context.expectedType && context.expectedType.kind !== 'value') {\n            outputType = context.expectedType;\n        }\n\n        for (let i = 1; i < args.length; i += 2) {\n            const label = i === 1 ? -Infinity : args[i];\n            const value = args[i + 1];\n\n            const labelKey = i;\n            const valueKey = i + 1;\n\n            if (typeof label !== 'number') {\n                return context.error('Input/output pairs for \"step\" expressions must be defined using literal numeric values (not computed expressions) for the input values.', labelKey);\n            }\n\n            if (stops.length && stops.at(-1)[0] >= label) {\n                return context.error('Input/output pairs for \"step\" expressions must be arranged with input values in strictly ascending order.', labelKey);\n            }\n\n            const parsed = context.parse(value, valueKey, outputType);\n            if (!parsed) return null;\n            outputType = outputType || parsed.type;\n            stops.push([label, parsed]);\n        }\n\n        return new Step(outputType, input, stops);\n    }\n\n    // eslint-disable-next-line @typescript-eslint/no-explicit-any\n    evaluate(ctx: EvaluationContext): any {\n        const labels = this.labels;\n        const outputs = this.outputs;\n\n        if (labels.length === 1) {\n            return outputs[0].evaluate(ctx);\n        }\n\n        const value = (this.input.evaluate(ctx) as number);\n        if (value <= labels[0]) {\n            return outputs[0].evaluate(ctx);\n        }\n\n        const stopCount = labels.length;\n        if (value >= labels[stopCount - 1]) {\n            return outputs[stopCount - 1].evaluate(ctx);\n        }\n\n        const index = findStopLessThanOrEqualTo(labels, value);\n        return outputs[index].evaluate(ctx);\n    }\n\n    eachChild(fn: (_: Expression) => void) {\n        fn(this.input);\n        for (const expression of this.outputs) {\n            fn(expression);\n        }\n    }\n\n    outputDefined(): boolean {\n        return this.outputs.every(out => out.outputDefined());\n    }\n\n    serialize(): SerializedExpression {\n        const serialized = [\"step\", this.input.serialize()];\n        for (let i = 0; i < this.labels.length; i++) {\n            if (i > 0) {\n                serialized.push(this.labels[i]);\n            }\n            serialized.push(this.outputs[i].serialize());\n        }\n        return serialized;\n    }\n}\n\nexport default Step;\n","\nexport default function unitBezier(p1x, p1y, p2x, p2y) {\n    // Calculate the polynomial coefficients, implicit first and last control points are (0,0) and (1,1).\n    const cx = 3 * p1x;\n    const bx = 3 * (p2x - p1x) - cx;\n    const ax = 1 - cx - bx;\n\n    const cy = 3 * p1y;\n    const by = 3 * (p2y - p1y) - cy;\n    const ay = 1 - cy - by;\n\n    return function solve(x, epsilon = 1e-6) {\n        if (x <= 0) return 0;\n        if (x >= 1) return 1;\n\n        let t = x;\n\n        // First try a few iterations of Newton's method - normally very fast.\n        // `ax t^3 + bx t^2 + cx t` expanded using Horner's rule.\n        for (let i = 0; i < 8; i++) {\n            const x2 = ((ax * t + bx) * t + cx) * t - x;\n            if (Math.abs(x2) < epsilon) return ((ay * t + by) * t + cy) * t;\n\n            const d2 = (3 * ax * t + 2 * bx) * t + cx;\n            if (Math.abs(d2) < 1e-6) break;\n\n            t -= x2 / d2;\n        }\n\n        // Fall back to the bisection method for reliability.\n        let t0 = 0;\n        let t1 = 1;\n        t = x;\n\n        for (let i = 0; i < 20; i++) {\n            const x2 = ((ax * t + bx) * t + cx) * t;\n            if (Math.abs(x2 - x) < epsilon) break;\n\n            if (x > x2) t0 = t;\n            else t1 = t;\n\n            t = (t0 + t1) * 0.5;\n        }\n\n        return ((ay * t + by) * t + cy) * t;\n    };\n}\n","import Color from './color';\nimport {number} from './lerp';\n\nexport {number};\n\nexport function color(from: Color, to: Color, t: number): Color {\n    return new Color(\n        number(from.r, to.r, t),\n        number(from.g, to.g, t),\n        number(from.b, to.b, t),\n        number(from.a, to.a, t)\n    );\n}\n\nexport function array(from: Array<number>, to: Array<number>, t: number): Array<number> {\n    return from.map((d, i) => {\n        return number(d, to[i]!, t);\n    });\n}\n","import Color from './color';\nimport {number as interpolateNumber} from './interpolate';\n\ntype LABColor = {\n    l: number;\n    a: number;\n    b: number;\n    alpha: number;\n};\n\ntype HCLColor = {\n    h: number;\n    c: number;\n    l: number;\n    alpha: number;\n};\n\n// Constants\nconst Xn = 0.950470, // D65 standard referent\n    Yn = 1,\n    Zn = 1.088830,\n    t0 = 4 / 29,\n    t1 = 6 / 29,\n    t2 = 3 * t1 * t1,\n    t3 = t1 * t1 * t1,\n    deg2rad = Math.PI / 180,\n    rad2deg = 180 / Math.PI;\n\n// Utilities\nfunction xyz2lab(t: number) {\n    return t > t3 ? Math.pow(t, 1 / 3) : t / t2 + t0;\n}\n\nfunction lab2xyz(t: number) {\n    return t > t1 ? t * t * t : t2 * (t - t0);\n}\n\nfunction xyz2rgb(x: number) {\n    return 255 * (x <= 0.0031308 ? 12.92 * x : 1.055 * Math.pow(x, 1 / 2.4) - 0.055);\n}\n\nfunction rgb2xyz(x: number) {\n    x /= 255;\n    return x <= 0.04045 ? x / 12.92 : Math.pow((x + 0.055) / 1.055, 2.4);\n}\n\n// LAB\nfunction rgbToLab(rgbColor: Color): LABColor {\n    const b = rgb2xyz(rgbColor.r),\n        a = rgb2xyz(rgbColor.g),\n        l = rgb2xyz(rgbColor.b),\n        x = xyz2lab((0.4124564 * b + 0.3575761 * a + 0.1804375 * l) / Xn),\n        y = xyz2lab((0.2126729 * b + 0.7151522 * a + 0.0721750 * l) / Yn),\n        z = xyz2lab((0.0193339 * b + 0.1191920 * a + 0.9503041 * l) / Zn);\n\n    return {\n        l: 116 * y - 16,\n        a: 500 * (x - y),\n        b: 200 * (y - z),\n        alpha: rgbColor.a\n    };\n}\n\nfunction labToRgb(labColor: LABColor): Color {\n    let y = (labColor.l + 16) / 116,\n        x = isNaN(labColor.a) ? y : y + labColor.a / 500,\n        z = isNaN(labColor.b) ? y : y - labColor.b / 200;\n    y = Yn * lab2xyz(y);\n    x = Xn * lab2xyz(x);\n    z = Zn * lab2xyz(z);\n    return new Color(\n        xyz2rgb(3.2404542 * x - 1.5371385 * y - 0.4985314 * z), // D65 -> sRGB\n        xyz2rgb(-0.9692660 * x + 1.8760108 * y + 0.0415560 * z),\n        xyz2rgb(0.0556434 * x - 0.2040259 * y + 1.0572252 * z),\n        labColor.alpha\n    );\n}\n\nfunction interpolateLab(from: LABColor, to: LABColor, t: number): LABColor {\n    return {\n        l: interpolateNumber(from.l, to.l, t),\n        a: interpolateNumber(from.a, to.a, t),\n        b: interpolateNumber(from.b, to.b, t),\n        alpha: interpolateNumber(from.alpha, to.alpha, t)\n    };\n}\n\n// HCL\nfunction rgbToHcl(rgbColor: Color): HCLColor {\n    const {l, a, b} = rgbToLab(rgbColor);\n    const h = Math.atan2(b, a) * rad2deg;\n    return {\n        h: h < 0 ? h + 360 : h,\n        c: Math.sqrt(a * a + b * b),\n        l,\n        alpha: rgbColor.a\n    };\n}\n\nfunction hclToRgb(hclColor: HCLColor): Color {\n    const h = hclColor.h * deg2rad,\n        c = hclColor.c,\n        l = hclColor.l;\n    return labToRgb({\n        l,\n        a: Math.cos(h) * c,\n        b: Math.sin(h) * c,\n        alpha: hclColor.alpha\n    });\n}\n\nfunction interpolateHue(a: number, b: number, t: number) {\n    const d = b - a;\n    return a + t * (d > 180 || d < -180 ? d - 360 * Math.round(d / 360) : d);\n}\n\nfunction interpolateHcl(from: HCLColor, to: HCLColor, t: number): HCLColor {\n    return {\n        h: interpolateHue(from.h, to.h, t),\n        c: interpolateNumber(from.c, to.c, t),\n        l: interpolateNumber(from.l, to.l, t),\n        alpha: interpolateNumber(from.alpha, to.alpha, t)\n    };\n}\n\nexport const lab = {\n    forward: rgbToLab,\n    reverse: labToRgb,\n    interpolate: interpolateLab\n} as const;\n\nexport const hcl = {\n    forward: rgbToHcl,\n    reverse: hclToRgb,\n    interpolate: interpolateHcl\n} as const;\n","import unitBezier from '@mapbox/unitbezier';\nimport * as interpolate from '../../util/interpolate';\nimport {toString, NumberType, ColorType} from '../types';\nimport {findStopLessThanOrEqualTo} from '../stops';\nimport {hcl, lab} from '../../util/color_spaces';\n\nimport type Color from '../../util/color';\nimport type {Stops} from '../stops';\nimport type {Expression, SerializedExpression} from '../expression';\nimport type ParsingContext from '../parsing_context';\nimport type EvaluationContext from '../evaluation_context';\nimport type {Type} from '../types';\n\nexport type InterpolationType =\n    | {name: 'linear'}\n    | {name: 'exponential'; base: number}\n    | {name: 'cubic-bezier'; controlPoints: [number, number, number, number]};\n\nexport type InterpolationOperator =\n    | 'interpolate'\n    | 'interpolate-hcl'\n    | 'interpolate-lab';\n\nclass Interpolate implements Expression {\n    type: Type;\n\n    operator: InterpolationOperator;\n    interpolation: InterpolationType;\n    input: Expression;\n    labels: Array<number>;\n    outputs: Array<Expression>;\n\n    constructor(type: Type, operator: InterpolationOperator, interpolation: InterpolationType, input: Expression, stops: Stops) {\n        this.type = type;\n        this.operator = operator;\n        this.interpolation = interpolation;\n        this.input = input;\n\n        this.labels = [];\n        this.outputs = [];\n        for (const [label, expression] of stops) {\n            this.labels.push(label);\n            this.outputs.push(expression);\n        }\n    }\n\n    static interpolationFactor(\n        interpolation: InterpolationType,\n        input: number,\n        lower: number,\n        upper: number,\n    ): number {\n        let t = 0;\n        if (interpolation.name === 'exponential') {\n            t = exponentialInterpolation(input, interpolation.base, lower, upper);\n        } else if (interpolation.name === 'linear') {\n            t = exponentialInterpolation(input, 1, lower, upper);\n        } else if (interpolation.name === 'cubic-bezier') {\n            const c = interpolation.controlPoints;\n            const ub = unitBezier(c[0], c[1], c[2], c[3]);\n            t = ub(exponentialInterpolation(input, 1, lower, upper));\n        }\n        return t;\n    }\n\n    static parse(args: ReadonlyArray<unknown>, context: ParsingContext): Interpolate | null | void {\n        let [operator, interpolation, input, ...rest] = args;\n\n        if (!Array.isArray(interpolation) || interpolation.length === 0) {\n            return context.error(`Expected an interpolation type expression.`, 1);\n        }\n\n        if (interpolation[0] === 'linear') {\n            interpolation = {name: 'linear'};\n        } else if (interpolation[0] === 'exponential') {\n            // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\n            const base = interpolation[1];\n            if (typeof base !== 'number')\n                return context.error(`Exponential interpolation requires a numeric base.`, 1, 1);\n            interpolation = {\n                name: 'exponential',\n                base\n            };\n        } else if (interpolation[0] === 'cubic-bezier') {\n            const controlPoints = interpolation.slice(1);\n            if (\n                controlPoints.length !== 4 ||\n                controlPoints.some(t => typeof t !== 'number' || t < 0 || t > 1)\n            ) {\n                return context.error('Cubic bezier interpolation requires four numeric arguments with values between 0 and 1.', 1);\n            }\n\n            interpolation = {\n                name: 'cubic-bezier',\n                controlPoints\n            };\n        } else {\n            return context.error(`Unknown interpolation type ${String(interpolation[0])}`, 1, 0);\n        }\n\n        if (args.length - 1 < 4) {\n            return context.error(`Expected at least 4 arguments, but found only ${args.length - 1}.`);\n        }\n\n        if (args.length - 1 > 3 && (args.length - 1) % 2 !== 0) {\n            return context.error(`Expected an even number of arguments.`);\n        }\n\n        input = context.parse(input, 2, NumberType);\n        if (!input) return null;\n\n        const stops: Stops = [];\n\n        let outputType: Type = null;\n        if (operator === 'interpolate-hcl' || operator === 'interpolate-lab') {\n            outputType = ColorType;\n        } else if (context.expectedType && context.expectedType.kind !== 'value') {\n            outputType = context.expectedType;\n        }\n\n        for (let i = 0; i < rest.length; i += 2) {\n            const label = rest[i];\n            const value = rest[i + 1];\n\n            const labelKey = i + 3;\n            const valueKey = i + 4;\n\n            if (typeof label !== 'number') {\n                return context.error('Input/output pairs for \"interpolate\" expressions must be defined using literal numeric values (not computed expressions) for the input values.', labelKey);\n            }\n\n            if (stops.length && stops.at(-1)[0] >= label) {\n                return context.error('Input/output pairs for \"interpolate\" expressions must be arranged with input values in strictly ascending order.', labelKey);\n            }\n\n            const parsed = context.parse(value, valueKey, outputType);\n            if (!parsed) return null;\n            outputType = outputType || parsed.type;\n            stops.push([label, parsed]);\n        }\n\n        if (outputType.kind !== 'number' &&\n            outputType.kind !== 'color' &&\n            !(\n                outputType.kind === 'array' &&\n                outputType.itemType.kind === 'number' &&\n                typeof outputType.N === 'number'\n            )\n        ) {\n            return context.error(`Type ${toString(outputType)} is not interpolatable.`);\n        }\n\n        return new Interpolate(outputType, operator as InterpolationOperator, interpolation as InterpolationType, input as Expression, stops);\n    }\n\n    evaluate(ctx: EvaluationContext): Color {\n        const labels = this.labels;\n        const outputs = this.outputs;\n\n        if (labels.length === 1) {\n            return outputs[0].evaluate(ctx) as Color;\n        }\n\n        // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\n        const value: number = this.input.evaluate(ctx);\n        if (value <= labels[0]) {\n            return outputs[0].evaluate(ctx) as Color;\n        }\n\n        const stopCount = labels.length;\n        if (value >= labels[stopCount - 1]) {\n            return outputs[stopCount - 1].evaluate(ctx) as Color;\n        }\n\n        const index = findStopLessThanOrEqualTo(labels, value);\n        const lower = labels[index];\n        const upper = labels[index + 1];\n        const t = Interpolate.interpolationFactor(this.interpolation, value, lower, upper);\n\n        // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\n        const outputLower: Color = outputs[index].evaluate(ctx);\n        // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\n        const outputUpper: Color = outputs[index + 1].evaluate(ctx);\n\n        if (this.operator === 'interpolate') {\n            // eslint-disable-next-line @typescript-eslint/no-unsafe-return, @typescript-eslint/no-unsafe-call\n            return interpolate[this.type.kind.toLowerCase()](outputLower, outputUpper, t);\n        } else if (this.operator === 'interpolate-hcl') {\n            return hcl.reverse(hcl.interpolate(hcl.forward(outputLower), hcl.forward(outputUpper), t));\n        } else {\n            return lab.reverse(lab.interpolate(lab.forward(outputLower), lab.forward(outputUpper), t));\n        }\n    }\n\n    eachChild(fn: (_: Expression) => void) {\n        fn(this.input);\n        for (const expression of this.outputs) {\n            fn(expression);\n        }\n    }\n\n    outputDefined(): boolean {\n        return this.outputs.every(out => out.outputDefined());\n    }\n\n    serialize(): SerializedExpression {\n        let interpolation: [InterpolationType['name'], ...number[]];\n        if (this.interpolation.name === 'linear') {\n            interpolation = ['linear'];\n        } else if (this.interpolation.name === 'exponential') {\n            if  (this.interpolation.base === 1) {\n                interpolation = ['linear'];\n            } else {\n                interpolation = ['exponential', this.interpolation.base];\n            }\n        } else {\n            interpolation = ['cubic-bezier', ...this.interpolation.controlPoints];\n        }\n\n        const serialized = [this.operator, interpolation, this.input.serialize()];\n\n        for (let i = 0; i < this.labels.length; i++) {\n            serialized.push(\n                this.labels[i],\n                this.outputs[i].serialize()\n            );\n        }\n        return serialized;\n    }\n}\n\n/**\n * Returns a ratio that can be used to interpolate between exponential function\n * stops.\n * How it works: Two consecutive stop values define a (scaled and shifted) exponential function `f(x) = a * base^x + b`, where `base` is the user-specified base,\n * and `a` and `b` are constants affording sufficient degrees of freedom to fit\n * the function to the given stops.\n *\n * Here's a bit of algebra that lets us compute `f(x)` directly from the stop\n * values without explicitly solving for `a` and `b`:\n *\n * First stop value: `f(x0) = y0 = a * base^x0 + b`\n * Second stop value: `f(x1) = y1 = a * base^x1 + b`\n * => `y1 - y0 = a(base^x1 - base^x0)`\n * => `a = (y1 - y0)/(base^x1 - base^x0)`\n *\n * Desired value: `f(x) = y = a * base^x + b`\n * => `f(x) = y0 + a * (base^x - base^x0)`\n *\n * From the above, we can replace the `a` in `a * (base^x - base^x0)` and do a\n * little algebra:\n * ```\n * a * (base^x - base^x0) = (y1 - y0)/(base^x1 - base^x0) * (base^x - base^x0)\n *                     = (y1 - y0) * (base^x - base^x0) / (base^x1 - base^x0)\n * ```\n *\n * If we let `(base^x - base^x0) / (base^x1 base^x0)`, then we have\n * `f(x) = y0 + (y1 - y0) * ratio`.  In other words, `ratio` may be treated as\n * an interpolation factor between the two stops' output values.\n *\n * (Note: a slightly different form for `ratio`,\n * `(base^(x-x0) - 1) / (base^(x1-x0) - 1) `, is equivalent, but requires fewer\n * expensive `Math.pow()` operations.)\n *\n * @private\n*/\nfunction exponentialInterpolation(input: number, base: number, lowerValue: number, upperValue: number) {\n    const difference = upperValue - lowerValue;\n    const progress = input - lowerValue;\n\n    if (difference === 0) {\n        return 0;\n    } else if (base === 1) {\n        return progress / difference;\n    } else {\n        return (Math.pow(base, progress) - 1) / (Math.pow(base, difference) - 1);\n    }\n}\n\nexport default Interpolate;\n","import assert from '../../util/assert';\nimport {checkSubtype, ValueType} from '../types';\nimport ResolvedImage from '../types/resolved_image';\n\nimport type {Expression, SerializedExpression} from '../expression';\nimport type ParsingContext from '../parsing_context';\nimport type EvaluationContext from '../evaluation_context';\nimport type {Type} from '../types';\n\nclass Coalesce implements Expression {\n    type: Type;\n    args: Array<Expression>;\n\n    constructor(type: Type, args: Array<Expression>) {\n        this.type = type;\n        this.args = args;\n    }\n\n    static parse(args: ReadonlyArray<unknown>, context: ParsingContext): Coalesce | null | undefined {\n        if (args.length < 2) {\n            context.error(\"Expectected at least one argument.\");\n            return null;\n        }\n        let outputType: Type = null;\n        const expectedType = context.expectedType;\n        if (expectedType && expectedType.kind !== 'value') {\n            outputType = expectedType;\n        }\n        const parsedArgs: Expression[] = [];\n\n        for (const arg of args.slice(1)) {\n            const parsed = context.parse(arg, 1 + parsedArgs.length, outputType, undefined, {typeAnnotation: 'omit'});\n            if (!parsed) return null;\n            outputType = outputType || parsed.type;\n            parsedArgs.push(parsed);\n        }\n        assert(outputType);\n\n        // Above, we parse arguments without inferred type annotation so that\n        // they don't produce a runtime error for `null` input, which would\n        // preempt the desired null-coalescing behavior.\n        // Thus, if any of our arguments would have needed an annotation, we\n        // need to wrap the enclosing coalesce expression with it instead.\n        const needsAnnotation = expectedType &&\n            parsedArgs.some(arg => checkSubtype(expectedType, arg.type));\n\n        return needsAnnotation ?\n            new Coalesce(ValueType, parsedArgs) :\n            new Coalesce(outputType, parsedArgs);\n    }\n\n    // eslint-disable-next-line @typescript-eslint/no-explicit-any\n    evaluate(ctx: EvaluationContext): any {\n        let result = null;\n        let argCount = 0;\n        let firstImage: ResolvedImage | undefined;\n        for (const arg of this.args) {\n            argCount++;\n            // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\n            result = arg.evaluate(ctx);\n            // we need to keep track of the first requested image in a coalesce statement\n            // if coalesce can't find a valid image, we return the first image so styleimagemissing can fire\n            if (result && result instanceof ResolvedImage && !result.available) {\n                // set to first image\n                if (!firstImage) {\n                    firstImage = result;\n                }\n                result = null;\n                // if we reach the end, return the first image\n                if (argCount === this.args.length) {\n                    return firstImage;\n                }\n            }\n\n            if (result !== null) break;\n        }\n        return result;\n    }\n\n    eachChild(fn: (_: Expression) => void) {\n        this.args.forEach(fn);\n    }\n\n    outputDefined(): boolean {\n        return this.args.every(arg => arg.outputDefined());\n    }\n\n    serialize(): SerializedExpression {\n        const serialized: Array<SerializedExpression> = [\"coalesce\"];\n        this.eachChild(child => { serialized.push(child.serialize()); });\n        return serialized;\n    }\n}\n\nexport default Coalesce;\n","import type {Type} from '../types';\nimport type {Expression, SerializedExpression} from '../expression';\nimport type ParsingContext from '../parsing_context';\nimport type EvaluationContext  from '../evaluation_context';\n\nconst INVALID_VAR_CHAR_RE = /[^a-zA-Z0-9_]/;\n\nclass Let implements Expression {\n    type: Type;\n    bindings: Array<[string, Expression]>;\n    result: Expression;\n\n    constructor(bindings: Array<[string, Expression]>, result: Expression) {\n        this.type = result.type;\n        // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\n        this.bindings = [].concat(bindings);\n        this.result = result;\n    }\n\n    // eslint-disable-next-line @typescript-eslint/no-explicit-any\n    evaluate(ctx: EvaluationContext): any {\n        return this.result.evaluate(ctx);\n    }\n\n    eachChild(fn: (_: Expression) => void) {\n        for (const binding of this.bindings) {\n            fn(binding[1]);\n        }\n        fn(this.result);\n    }\n\n    static parse(args: ReadonlyArray<unknown>, context: ParsingContext): Let | null | void {\n        if (args.length < 4)\n            return context.error(`Expected at least 3 arguments, but found ${args.length - 1} instead.`);\n\n        const bindings: Array<[string, Expression]> = [];\n        for (let i = 1; i < args.length - 1; i += 2) {\n            const name = args[i];\n\n            if (typeof name !== 'string') {\n                return context.error(`Expected string, but found ${typeof name} instead.`, i);\n            }\n\n            if (INVALID_VAR_CHAR_RE.test(name)) {\n                return context.error(`Variable names must contain only alphanumeric characters or '_'.`, i);\n            }\n\n            const value = context.parse(args[i + 1], i + 1);\n            if (!value) return null;\n\n            bindings.push([name, value]);\n        }\n\n        const result = context.parse(args.at(-1), args.length - 1, context.expectedType, bindings);\n        if (!result) return null;\n\n        return new Let(bindings, result);\n    }\n\n    outputDefined(): boolean {\n        return this.result.outputDefined();\n    }\n\n    serialize(): SerializedExpression {\n        const serialized: SerializedExpression[] = [\"let\"];\n        for (const [name, expr] of this.bindings) {\n            serialized.push(name, expr.serialize());\n        }\n        serialized.push(this.result.serialize());\n        return serialized;\n    }\n}\n\nexport default Let;\n","import {array, ValueType, NumberType} from '../types';\nimport RuntimeError from '../runtime_error';\n\nimport type {Expression, SerializedExpression} from '../expression';\nimport type ParsingContext from '../parsing_context';\nimport type EvaluationContext from '../evaluation_context';\nimport type {Type, ArrayType} from '../types';\nimport type {Value} from '../values';\n\nclass At implements Expression {\n    type: Type;\n    index: Expression;\n    input: Expression;\n\n    constructor(type: Type, index: Expression, input: Expression) {\n        this.type = type;\n        this.index = index;\n        this.input = input;\n    }\n\n    static parse(args: ReadonlyArray<unknown>, context: ParsingContext): At | null | void {\n        if (args.length !== 3)\n            return context.error(`Expected 2 arguments, but found ${args.length - 1} instead.`);\n\n        const index = context.parse(args[1], 1, NumberType);\n        const input = context.parse(args[2], 2, array(context.expectedType || ValueType));\n\n        if (!index || !input) return null;\n\n        const t = input.type as ArrayType;\n        return new At(t.itemType, index, input);\n    }\n\n    evaluate(ctx: EvaluationContext): Value {\n        const index = (this.index.evaluate(ctx) as number);\n        const array = (this.input.evaluate(ctx) as Array<Value>);\n\n        if (index < 0) {\n            throw new RuntimeError(`Array index out of bounds: negative index`);\n        }\n\n        if (index >= array.length) {\n            throw new RuntimeError(`Array index out of bounds: index exceeds array size`);\n        }\n\n        if (index !== Math.floor(index)) {\n            throw new RuntimeError(`Array index must be an integer. Use at-interpolated for fractional indices`);\n        }\n\n        return array[index];\n    }\n\n    eachChild(fn: (_: Expression) => void) {\n        fn(this.index);\n        fn(this.input);\n    }\n\n    outputDefined(): boolean {\n        return false;\n    }\n\n    serialize(): SerializedExpression {\n        return [\"at\", this.index.serialize(), this.input.serialize()];\n    }\n}\n\nexport default At;\n","import {array, ValueType, NumberType} from '../types';\nimport RuntimeError from '../runtime_error';\nimport {lerp} from '../../util/lerp';\n\nimport type {Expression, SerializedExpression} from '../expression';\nimport type ParsingContext from '../parsing_context';\nimport type EvaluationContext from '../evaluation_context';\nimport type {Type, ArrayType} from '../types';\nimport type {Value} from '../values';\n\nclass AtInterpolated implements Expression {\n    type: Type;\n    index: Expression;\n    input: Expression;\n\n    constructor(type: Type, index: Expression, input: Expression) {\n        this.type = type;\n        this.index = index;\n        this.input = input;\n    }\n\n    static parse(args: ReadonlyArray<unknown>, context: ParsingContext): AtInterpolated | null | void {\n        if (args.length !== 3)\n            return context.error(`Expected 2 arguments, but found ${args.length - 1} instead.`);\n\n        const index = context.parse(args[1], 1, NumberType);\n        const input = context.parse(args[2], 2, array(context.expectedType || ValueType));\n\n        if (!index || !input) return null;\n\n        const t = input.type as ArrayType;\n        return new AtInterpolated(t.itemType, index, input);\n    }\n\n    evaluate(ctx: EvaluationContext): Value {\n        const index = (this.index.evaluate(ctx) as number);\n        const array = (this.input.evaluate(ctx) as Array<Value>);\n\n        if (index < 0) {\n            throw new RuntimeError(`Array index out of bounds: ${index} < 0.`);\n        }\n\n        if (index > array.length - 1) {\n            throw new RuntimeError(`Array index out of bounds: ${index} > ${array.length - 1}.`);\n        }\n\n        if (index === Math.floor(index)) {\n            return array[index];\n        }\n\n        // Interpolation logic for non-integer indices\n        const lowerIndex = Math.floor(index);\n        const upperIndex = Math.ceil(index);\n\n        const lowerValue = array[lowerIndex];\n        const upperValue = array[upperIndex];\n\n        if (typeof lowerValue !== 'number' || typeof upperValue !== 'number') {\n            throw new RuntimeError(`Cannot interpolate between non-number values at index ${index}.`);\n        }\n\n        // Linear interpolation\n        const fraction = index - lowerIndex;\n        return lerp(lowerValue, upperValue, fraction);\n    }\n\n    eachChild(fn: (_: Expression) => void) {\n        fn(this.index);\n        fn(this.input);\n    }\n\n    outputDefined(): boolean {\n        return false;\n    }\n\n    serialize(): SerializedExpression {\n        return [\"at-interpolated\", this.index.serialize(), this.input.serialize()];\n    }\n}\n\nexport default AtInterpolated;\n","import assert from '../../util/assert';\nimport {typeOf} from '../values';\nimport {typeEquals, ValueType} from '../types';\n\nimport type {Type} from '../types';\nimport type {Expression, SerializedExpression} from '../expression';\nimport type ParsingContext from '../parsing_context';\nimport type EvaluationContext from '../evaluation_context';\n\n// Map input label values to output expression index\ntype Cases = Partial<Record<number | string, number>>;\n\nclass Match implements Expression {\n    type: Type;\n    inputType: Type;\n\n    input: Expression;\n    cases: Cases;\n    outputs: Array<Expression>;\n    otherwise: Expression;\n\n    constructor(inputType: Type, outputType: Type, input: Expression, cases: Cases, outputs: Array<Expression>, otherwise: Expression) {\n        this.inputType = inputType;\n        this.type = outputType;\n        this.input = input;\n        this.cases = cases;\n        this.outputs = outputs;\n        this.otherwise = otherwise;\n    }\n\n    static parse(args: ReadonlyArray<unknown>, context: ParsingContext): Match | null | void {\n        if (args.length < 5)\n            return context.error(`Expected at least 4 arguments, but found only ${args.length - 1}.`);\n        if (args.length % 2 !== 1)\n            return context.error(`Expected an even number of arguments.`);\n\n        let inputType: Type | undefined;\n        let outputType: Type | null | undefined;\n        if (context.expectedType && context.expectedType.kind !== 'value') {\n            outputType = context.expectedType;\n        }\n        // eslint-disable-next-line @typescript-eslint/no-explicit-any\n        const cases: Record<string, any> = {};\n        const outputs = [];\n        for (let i = 2; i < args.length - 1; i += 2) {\n            let labels = args[i];\n            const value = args[i + 1];\n\n            if (!Array.isArray(labels)) {\n                labels = [labels];\n            }\n\n            if ((labels as unknown[]).length === 0) {\n                return context.error('Expected at least one branch label.', i);\n            }\n\n            for (const label of (labels as unknown[])) {\n                if (typeof label !== 'number' && typeof label !== 'string') {\n                    return context.error(`Branch labels must be numbers or strings.`, i);\n                } else if (typeof label === 'number' && Math.abs(label) > Number.MAX_SAFE_INTEGER) {\n                    return context.error(`Branch labels must be integers no larger than ${Number.MAX_SAFE_INTEGER}.`, i);\n\n                } else if (typeof label === 'number' && Math.floor(label) !== label) {\n                    return context.error(`Numeric branch labels must be integer values.`, i);\n\n                } else if (!inputType) {\n                    inputType = typeOf(label);\n                } else if (context.checkSubtype(inputType, typeOf(label), i)) {\n                    return null;\n                }\n\n                if (typeof cases[String(label)] !== 'undefined') {\n                    return context.error('Branch labels must be unique.', i);\n                }\n\n                cases[String(label)] = outputs.length;\n            }\n\n            const result = context.parse(value, i, outputType);\n            if (!result) return null;\n            outputType = outputType || result.type;\n            outputs.push(result);\n        }\n\n        const input = context.parse(args[1], 1, ValueType);\n        if (!input) return null;\n\n        const otherwise = context.parse(args.at(-1), args.length - 1, outputType);\n        if (!otherwise) return null;\n\n        assert(inputType && outputType);\n\n        if (input.type.kind !== 'value' && context.checkSubtype((inputType), input.type, 1)) {\n            return null;\n        }\n\n        // eslint-disable-next-line @typescript-eslint/no-unsafe-argument\n        return new Match(inputType, outputType, input, cases, outputs, otherwise);\n    }\n\n    // eslint-disable-next-line @typescript-eslint/no-explicit-any\n    evaluate(ctx: EvaluationContext): any {\n        const input = (this.input.evaluate(ctx)) as number | string;\n        const output = (typeEquals(typeOf(input), this.inputType) && this.outputs[this.cases[input]]) || this.otherwise;\n        return output.evaluate(ctx);\n    }\n\n    eachChild(fn: (_: Expression) => void) {\n        fn(this.input);\n        this.outputs.forEach(fn);\n        fn(this.otherwise);\n    }\n\n    outputDefined(): boolean {\n        return this.outputs.every(out => out.outputDefined()) && this.otherwise.outputDefined();\n    }\n\n    serialize(): SerializedExpression {\n        const serialized = [\"match\", this.input.serialize()];\n\n        // Sort so serialization has an arbitrary defined order, even though\n        // branch order doesn't affect evaluation\n        const sortedLabels = Object.keys(this.cases).sort();\n\n        // Group branches by unique match expression to support condensed\n        // serializations of the form [case1, case2, ...] -> matchExpression\n        const groupedByOutput: Array<[number, Array<number | string>]> = [];\n        const outputLookup: {\n            [index: number]: number;\n        } = {}; // lookup index into groupedByOutput for a given output expression\n        for (const label of sortedLabels) {\n            const outputIndex = outputLookup[this.cases[label]];\n            if (outputIndex === undefined) {\n                // First time seeing this output, add it to the end of the grouped list\n                outputLookup[this.cases[label]] = groupedByOutput.length;\n                groupedByOutput.push([this.cases[label], [label]]);\n            } else {\n                // We've seen this expression before, add the label to that output's group\n                groupedByOutput[outputIndex][1].push(label);\n            }\n        }\n\n        const coerceLabel = (label: number | string) => (this.inputType.kind === 'number' ? Number(label) : label);\n\n        for (const [outputIndex, labels] of groupedByOutput) {\n            if (labels.length === 1) {\n                // Only a single label matches this output expression\n                serialized.push(coerceLabel(labels[0]));\n            } else {\n                // Array of literal labels pointing to this output expression\n                serialized.push(labels.map(coerceLabel));\n            }\n            serialized.push(this.outputs[outputIndex].serialize());\n        }\n        serialized.push(this.otherwise.serialize());\n        return serialized;\n    }\n}\n\nexport default Match;\n","import assert from '../../util/assert';\nimport {BooleanType} from '../types';\n\nimport type {Expression, SerializedExpression} from '../expression';\nimport type ParsingContext from '../parsing_context';\nimport type EvaluationContext from '../evaluation_context';\nimport type {Type} from '../types';\n\ntype Branches = Array<[Expression, Expression]>;\n\nclass Case implements Expression {\n    type: Type;\n\n    branches: Branches;\n    otherwise: Expression;\n\n    constructor(type: Type, branches: Branches, otherwise: Expression) {\n        this.type = type;\n        this.branches = branches;\n        this.otherwise = otherwise;\n    }\n\n    static parse(args: ReadonlyArray<unknown>, context: ParsingContext): Case | null | undefined {\n        if (args.length < 4) {\n            context.error(`Expected at least 3 arguments, but found only ${args.length - 1}.`);\n            return null;\n        }\n        if (args.length % 2 !== 0) {\n            context.error(`Expected an odd number of arguments.`);\n            return null;\n        }\n\n        let outputType: Type | null | undefined;\n        if (context.expectedType && context.expectedType.kind !== 'value') {\n            outputType = context.expectedType;\n        }\n\n        const branches = [];\n        for (let i = 1; i < args.length - 1; i += 2) {\n            const test = context.parse(args[i], i, BooleanType);\n            if (!test) return null;\n\n            const result = context.parse(args[i + 1], i + 1, outputType);\n            if (!result) return null;\n\n            branches.push([test, result]);\n\n            outputType = outputType || result.type;\n        }\n\n        const otherwise = context.parse(args.at(-1), args.length - 1, outputType);\n        if (!otherwise) return null;\n\n        assert(outputType);\n        // eslint-disable-next-line @typescript-eslint/no-unsafe-argument\n        return new Case(outputType, branches, otherwise);\n    }\n\n    // eslint-disable-next-line @typescript-eslint/no-explicit-any\n    evaluate(ctx: EvaluationContext): any {\n        for (const [test, expression] of this.branches) {\n            if (test.evaluate(ctx)) {\n                return expression.evaluate(ctx);\n            }\n        }\n        return this.otherwise.evaluate(ctx);\n    }\n\n    eachChild(fn: (_: Expression) => void) {\n        for (const [test, expression] of this.branches) {\n            fn(test);\n            fn(expression);\n        }\n        fn(this.otherwise);\n    }\n\n    outputDefined(): boolean {\n        return this.branches.every(([_, out]: [Expression, Expression]) => out.outputDefined()) && this.otherwise.outputDefined();\n    }\n\n    serialize(): SerializedExpression {\n        const serialized: Array<SerializedExpression> = [\"case\"];\n        this.eachChild(child => { serialized.push(child.serialize()); });\n        return serialized;\n    }\n}\n\nexport default Case;\n","import {\n    ValueType,\n    NumberType,\n    StringType,\n    array,\n    toString,\n    isValidType,\n    isValidNativeType,\n} from '../types';\nimport RuntimeError from '../runtime_error';\nimport {typeOf} from '../values';\n\nimport type {Expression, SerializedExpression} from '../expression';\nimport type ParsingContext from '../parsing_context';\nimport type EvaluationContext from '../evaluation_context';\nimport type {Type} from '../types';\n\nclass Slice implements Expression {\n    type: Type;\n    input: Expression;\n    beginIndex: Expression;\n    endIndex: Expression | null | undefined;\n\n    constructor(type: Type, input: Expression, beginIndex: Expression, endIndex?: Expression) {\n        this.type = type;\n        this.input = input;\n        this.beginIndex = beginIndex;\n        this.endIndex = endIndex;\n\n    }\n\n    static parse(args: ReadonlyArray<unknown>, context: ParsingContext): Slice | null | undefined {\n        if (args.length <= 2 ||  args.length >= 5) {\n            context.error(`Expected 3 or 4 arguments, but found ${args.length - 1} instead.`);\n            return null;\n        }\n\n        const input = context.parse(args[1], 1, ValueType);\n        const beginIndex = context.parse(args[2], 2, NumberType);\n\n        if (!input || !beginIndex) return null;\n\n        if (!isValidType(input.type, [array(ValueType), StringType, ValueType])) {\n            context.error(`Expected first argument to be of type array or string, but found ${toString(input.type)} instead`);\n            return null;\n        }\n\n        if (args.length === 4) {\n            const endIndex = context.parse(args[3], 3, NumberType);\n            if (!endIndex) return null;\n            return new Slice(input.type, input, beginIndex, endIndex);\n        } else {\n            return new Slice(input.type, input, beginIndex);\n        }\n    }\n\n    // eslint-disable-next-line @typescript-eslint/no-explicit-any\n    evaluate(ctx: EvaluationContext): any {\n        // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\n        const input = (this.input.evaluate(ctx));\n        const beginIndex = (this.beginIndex.evaluate(ctx) as number);\n\n        if (!isValidNativeType(input, ['string', 'array'])) {\n            // eslint-disable-next-line @typescript-eslint/no-unsafe-argument\n            throw new RuntimeError(`Expected first argument to be of type array or string, but found ${toString(typeOf(input))} instead.`);\n        }\n\n        if (this.endIndex) {\n            const endIndex = (this.endIndex.evaluate(ctx) as number);\n            // eslint-disable-next-line @typescript-eslint/no-unsafe-call, @typescript-eslint/no-unsafe-member-access\n            return input.slice(beginIndex, endIndex);\n        }\n\n        // eslint-disable-next-line @typescript-eslint/no-unsafe-call, @typescript-eslint/no-unsafe-member-access\n        return input.slice(beginIndex);\n    }\n\n    eachChild(fn: (_: Expression) => void) {\n        fn(this.input);\n        fn(this.beginIndex);\n        if (this.endIndex) {\n            fn(this.endIndex);\n        }\n    }\n\n    outputDefined(): boolean {\n        return false;\n    }\n\n    serialize(): SerializedExpression {\n        if (this.endIndex != null && this.endIndex !== undefined) {\n            const endIndex = this.endIndex.serialize();\n            return [\"slice\", this.input.serialize(), this.beginIndex.serialize(), endIndex];\n        }\n        return [\"slice\", this.input.serialize(), this.beginIndex.serialize()];\n    }\n}\n\nexport default Slice;\n","import {toString, ValueType, BooleanType, CollatorType} from '../types';\nimport Assertion from './assertion';\nimport {typeOf} from '../values';\nimport RuntimeError from '../runtime_error';\n\nimport type {Expression, SerializedExpression, ExpressionRegistration} from '../expression';\nimport type EvaluationContext from '../evaluation_context';\nimport type ParsingContext from '../parsing_context';\nimport type {Type} from '../types';\n\ntype ComparisonOperator = '==' | '!=' | '<' | '>' | '<=' | '>=';\n\nfunction isComparableType(op: ComparisonOperator, type: Type) {\n    if (op === '==' || op === '!=') {\n        // equality operator\n        return type.kind === 'boolean' ||\n            type.kind === 'string' ||\n            type.kind === 'number' ||\n            type.kind === 'null' ||\n            type.kind === 'value';\n    } else {\n        // ordering operator\n        return type.kind === 'string' ||\n            type.kind === 'number' ||\n            type.kind === 'value';\n    }\n}\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nfunction eq(ctx: EvaluationContext, a: any, b: any): boolean { return a === b; }\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nfunction neq(ctx: EvaluationContext, a: any, b: any): boolean { return a !== b; }\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nfunction lt(ctx: EvaluationContext, a: any, b: any): boolean { return a < b; }\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nfunction gt(ctx: EvaluationContext, a: any, b: any): boolean { return a > b; }\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nfunction lteq(ctx: EvaluationContext, a: any, b: any): boolean { return a <= b; }\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nfunction gteq(ctx: EvaluationContext, a: any, b: any): boolean { return a >= b; }\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any, @typescript-eslint/no-unsafe-call, @typescript-eslint/no-unsafe-member-access\nfunction eqCollate(ctx: EvaluationContext, a: any, b: any, c: any): boolean { return c.compare(a, b) === 0; }\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nfunction neqCollate(ctx: EvaluationContext, a: any, b: any, c: any): boolean { return !eqCollate(ctx, a, b, c); }\n// eslint-disable-next-line @typescript-eslint/no-explicit-any, @typescript-eslint/no-unsafe-call, @typescript-eslint/no-unsafe-member-access\nfunction ltCollate(ctx: EvaluationContext, a: any, b: any, c: any): boolean { return c.compare(a, b) < 0; }\n// eslint-disable-next-line @typescript-eslint/no-explicit-any, @typescript-eslint/no-unsafe-call, @typescript-eslint/no-unsafe-member-access\nfunction gtCollate(ctx: EvaluationContext, a: any, b: any, c: any): boolean { return c.compare(a, b) > 0; }\n// eslint-disable-next-line @typescript-eslint/no-explicit-any, @typescript-eslint/no-unsafe-call, @typescript-eslint/no-unsafe-member-access\nfunction lteqCollate(ctx: EvaluationContext, a: any, b: any, c: any): boolean { return c.compare(a, b) <= 0; }\n// eslint-disable-next-line @typescript-eslint/no-explicit-any, @typescript-eslint/no-unsafe-call, @typescript-eslint/no-unsafe-member-access\nfunction gteqCollate(ctx: EvaluationContext, a: any, b: any, c: any): boolean { return c.compare(a, b) >= 0; }\n\n/**\n * Special form for comparison operators, implementing the signatures:\n * - (T, T, ?Collator) => boolean\n * - (T, value, ?Collator) => boolean\n * - (value, T, ?Collator) => boolean\n *\n * For inequalities, T must be either value, string, or number. For ==/!=, it\n * can also be boolean or null.\n *\n * Equality semantics are equivalent to Javascript's strict equality (===/!==)\n * -- i.e., when the arguments' types don't match, == evaluates to false, != to\n * true.\n *\n * When types don't match in an ordering comparison, a runtime error is thrown.\n *\n * @private\n */\nfunction makeComparison(\n    op: ComparisonOperator,\n    // eslint-disable-next-line @typescript-eslint/no-explicit-any\n    compareBasic: (arg1: EvaluationContext, arg2?: any, arg3?: any) => boolean,\n    // eslint-disable-next-line @typescript-eslint/no-explicit-any\n    compareWithCollator: (arg1: EvaluationContext, arg2?: any, arg3?: any, arg4?: any) => boolean,\n): ExpressionRegistration {\n    const isOrderComparison = op !== '==' && op !== '!=';\n\n    return class Comparison implements Expression {\n        type: Type;\n        lhs: Expression;\n        rhs: Expression;\n        collator: Expression | null | undefined;\n        hasUntypedArgument: boolean;\n\n        constructor(lhs: Expression, rhs: Expression, collator?: Expression | null) {\n            this.type = BooleanType;\n            this.lhs = lhs;\n            this.rhs = rhs;\n            this.collator = collator;\n            this.hasUntypedArgument = lhs.type.kind === 'value' || rhs.type.kind === 'value';\n        }\n\n        static parse(args: ReadonlyArray<unknown>, context: ParsingContext): Expression | null | void {\n            if (args.length !== 3 && args.length !== 4)\n                return context.error(`Expected two or three arguments.`);\n\n            const op = args[0] as ComparisonOperator;\n\n            let lhs = context.parse(args[1], 1, ValueType);\n            if (!lhs) return null;\n            if (!isComparableType(op, lhs.type)) {\n                return context.error(`\"${op}\" comparisons are not supported for type '${toString(lhs.type)}'.`, 1);\n            }\n            let rhs = context.parse(args[2], 2, ValueType);\n            if (!rhs) return null;\n            if (!isComparableType(op, rhs.type)) {\n                return context.error(`\"${op}\" comparisons are not supported for type '${toString(rhs.type)}'.`, 2);\n            }\n\n            if (\n                lhs.type.kind !== rhs.type.kind &&\n                lhs.type.kind !== 'value' &&\n                rhs.type.kind !== 'value'\n            ) {\n                return context.error(`Cannot compare types '${toString(lhs.type)}' and '${toString(rhs.type)}'.`);\n            }\n\n            if (isOrderComparison) {\n                // typing rules specific to less/greater than operators\n                if (lhs.type.kind === 'value' && rhs.type.kind !== 'value') {\n                    // (value, T)\n                    lhs = new Assertion(rhs.type, [lhs]);\n                } else if (lhs.type.kind !== 'value' && rhs.type.kind === 'value') {\n                    // (T, value)\n                    rhs = new Assertion(lhs.type, [rhs]);\n                }\n            }\n\n            let collator = null;\n            if (args.length === 4) {\n                if (\n                    lhs.type.kind !== 'string' &&\n                    rhs.type.kind !== 'string' &&\n                    lhs.type.kind !== 'value' &&\n                    rhs.type.kind !== 'value'\n                ) {\n                    return context.error(`Cannot use collator to compare non-string types.`);\n                }\n                collator = context.parse(args[3], 3, CollatorType);\n                if (!collator) return null;\n            }\n\n            // eslint-disable-next-line @typescript-eslint/no-unsafe-argument\n            return new Comparison(lhs, rhs, collator);\n        }\n\n        evaluate(ctx: EvaluationContext): boolean {\n            // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\n            const lhs = this.lhs.evaluate(ctx);\n            // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\n            const rhs = this.rhs.evaluate(ctx);\n\n            if (isOrderComparison && this.hasUntypedArgument) {\n                // eslint-disable-next-line @typescript-eslint/no-unsafe-argument\n                const lt = typeOf(lhs);\n                // eslint-disable-next-line @typescript-eslint/no-unsafe-argument\n                const rt = typeOf(rhs);\n                // check that type is string or number, and equal\n                if (lt.kind !== rt.kind || !(lt.kind === 'string' || lt.kind === 'number')) {\n                    throw new RuntimeError(`Expected arguments for \"${op}\" to be (string, string) or (number, number), but found (${lt.kind}, ${rt.kind}) instead.`);\n                }\n            }\n\n            if (this.collator && !isOrderComparison && this.hasUntypedArgument) {\n                // eslint-disable-next-line @typescript-eslint/no-unsafe-argument\n                const lt = typeOf(lhs);\n                // eslint-disable-next-line @typescript-eslint/no-unsafe-argument\n                const rt = typeOf(rhs);\n                if (lt.kind !== 'string' || rt.kind !== 'string') {\n                    return compareBasic(ctx, lhs, rhs);\n                }\n            }\n\n            return this.collator ?\n                compareWithCollator(ctx, lhs, rhs, this.collator.evaluate(ctx)) :\n                compareBasic(ctx, lhs, rhs);\n        }\n\n        eachChild(fn: (_: Expression) => void) {\n            fn(this.lhs);\n            fn(this.rhs);\n            if (this.collator) {\n                fn(this.collator);\n            }\n        }\n\n        outputDefined(): boolean {\n            return true;\n        }\n\n        serialize(): SerializedExpression {\n            const serialized: SerializedExpression[] = [op];\n            this.eachChild(child => { serialized.push(child.serialize()); });\n            return serialized;\n        }\n    };\n}\n\nexport const Equals: ReturnType<typeof makeComparison> = makeComparison('==', eq, eqCollate);\nexport const NotEquals: ReturnType<typeof makeComparison> = makeComparison('!=', neq, neqCollate);\nexport const LessThan: ReturnType<typeof makeComparison> = makeComparison('<', lt, ltCollate);\nexport const GreaterThan: ReturnType<typeof makeComparison> = makeComparison('>', gt, gtCollate);\nexport const LessThanOrEqual: ReturnType<typeof makeComparison> = makeComparison('<=', lteq, lteqCollate);\nexport const GreaterThanOrEqual: ReturnType<typeof makeComparison> = makeComparison('>=', gteq, gteqCollate);\n","import {StringType, NumberType} from '../types';\n\nimport type {Expression, SerializedExpression} from '../expression';\nimport type EvaluationContext from '../evaluation_context';\nimport type ParsingContext from '../parsing_context';\nimport type {Type} from '../types';\n\nexport default class NumberFormat implements Expression {\n    type: Type;\n    number: Expression;\n    locale: Expression | null;   // BCP 47 language tag\n    currency: Expression | null; // ISO 4217 currency code, required if style=currency\n    unit: Expression | null;     // Simple units sanctioned for use in ECMAScript, required if style=unit. https://tc39.es/proposal-unified-intl-numberformat/section6/locales-currencies-tz_proposed_out.html#sec-issanctionedsimpleunitidentifier\n    minFractionDigits: Expression | null; // Default 0\n    maxFractionDigits: Expression | null; // Default 3\n\n    constructor(\n        number: Expression,\n        locale: Expression | null,\n        currency: Expression | null,\n        unit: Expression | null,\n        minFractionDigits: Expression | null,\n        maxFractionDigits: Expression | null\n    ) {\n        this.type = StringType;\n        this.number = number;\n        this.locale = locale;\n        this.currency = currency;\n        this.unit = unit;\n        this.minFractionDigits = minFractionDigits;\n        this.maxFractionDigits = maxFractionDigits;\n    }\n\n    static parse(args: ReadonlyArray<unknown>, context: ParsingContext): Expression | void {\n        if (args.length !== 3)\n            return context.error(`Expected two arguments.`);\n\n        const number = context.parse(args[1], 1, NumberType);\n        if (!number) return null;\n\n        const options = args[2];\n        if (typeof options !== \"object\" || Array.isArray(options))\n            return context.error(`NumberFormat options argument must be an object.`);\n\n        let locale = null;\n        if (options['locale']) {\n            locale = context.parseObjectValue(options['locale'], 2, 'locale', StringType);\n            if (!locale) return null;\n        }\n\n        let currency = null;\n        if (options['currency']) {\n            currency = context.parseObjectValue(options['currency'], 2, 'currency', StringType);\n            if (!currency) return null;\n        }\n\n        let unit = null;\n        if (options['unit']) {\n            unit = context.parseObjectValue(options['unit'], 2, 'unit', StringType);\n            if (!unit) return null;\n        }\n\n        let minFractionDigits = null;\n        if (options['min-fraction-digits'] !== undefined) {\n            minFractionDigits = context.parseObjectValue(options['min-fraction-digits'], 2, 'min-fraction-digits', NumberType);\n            if (!minFractionDigits) return null;\n        }\n\n        let maxFractionDigits = null;\n        if (options['max-fraction-digits'] !== undefined) {\n            maxFractionDigits = context.parseObjectValue(options['max-fraction-digits'], 2, 'max-fraction-digits', NumberType);\n            if (!maxFractionDigits) return null;\n        }\n\n        // eslint-disable-next-line @typescript-eslint/no-unsafe-argument\n        return new NumberFormat(number, locale, currency, unit, minFractionDigits, maxFractionDigits);\n    }\n\n    evaluate(ctx: EvaluationContext): string {\n        // eslint-disable-next-line @typescript-eslint/no-unsafe-argument\n        return new Intl.NumberFormat(this.locale ? this.locale.evaluate(ctx) : [],\n            {\n                style:\n                    (this.currency && \"currency\") ||\n                    (this.unit && \"unit\") ||\n                    \"decimal\",\n                // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\n                currency: this.currency ? this.currency.evaluate(ctx) : undefined,\n                // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\n                unit: this.unit ? this.unit.evaluate(ctx) : undefined,\n                // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\n                minimumFractionDigits: this.minFractionDigits ? this.minFractionDigits.evaluate(ctx) : undefined,\n                // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\n                maximumFractionDigits: this.maxFractionDigits ? this.maxFractionDigits.evaluate(ctx) : undefined,\n            // eslint-disable-next-line @typescript-eslint/no-unsafe-argument\n            }).format(this.number.evaluate(ctx));\n    }\n\n    eachChild(fn: (_: Expression) => void) {\n        fn(this.number);\n        if (this.locale) {\n            fn(this.locale);\n        }\n        if (this.currency) {\n            fn(this.currency);\n        }\n        if (this.unit) {\n            fn(this.unit);\n        }\n        if (this.minFractionDigits) {\n            fn(this.minFractionDigits);\n        }\n        if (this.maxFractionDigits) {\n            fn(this.maxFractionDigits);\n        }\n    }\n\n    outputDefined(): boolean {\n        return false;\n    }\n\n    serialize(): SerializedExpression {\n        // eslint-disable-next-line @typescript-eslint/no-explicit-any\n        const options: Record<string, any> = {};\n        if (this.locale) {\n            options['locale'] = this.locale.serialize();\n        }\n        if (this.currency) {\n            options['currency'] = this.currency.serialize();\n        }\n        if (this.unit) {\n            options['unit'] = this.unit.serialize();\n        }\n        if (this.minFractionDigits) {\n            options['min-fraction-digits'] = this.minFractionDigits.serialize();\n        }\n        if (this.maxFractionDigits) {\n            options['max-fraction-digits'] = this.maxFractionDigits.serialize();\n        }\n        return [\"number-format\", this.number.serialize(), options];\n    }\n}\n","import {NumberType, toString} from '../types';\nimport {typeOf} from '../values';\nimport RuntimeError from '../runtime_error';\n\nimport type {Expression, SerializedExpression} from '../expression';\nimport type ParsingContext from '../parsing_context';\nimport type EvaluationContext from '../evaluation_context';\nimport type {Type} from '../types';\n\nclass Length implements Expression {\n    type: Type;\n    input: Expression;\n\n    constructor(input: Expression) {\n        this.type = NumberType;\n        this.input = input;\n    }\n\n    static parse(args: ReadonlyArray<unknown>, context: ParsingContext): Length | null | undefined {\n        if (args.length !== 2) {\n            context.error(`Expected 1 argument, but found ${args.length - 1} instead.`);\n            return null;\n        }\n\n        const input = context.parse(args[1], 1);\n        if (!input) return null;\n\n        if (input.type.kind !== 'array' && input.type.kind !== 'string' && input.type.kind !== 'value') {\n            context.error(`Expected argument of type string or array, but found ${toString(input.type)} instead.`);\n            return null;\n        }\n\n        return new Length(input);\n    }\n\n    evaluate(ctx: EvaluationContext): number {\n        // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\n        const input = this.input.evaluate(ctx);\n        if (typeof input === 'string') {\n            return input.length;\n        } else if (Array.isArray(input)) {\n            return input.length;\n        } else {\n            // eslint-disable-next-line @typescript-eslint/no-unsafe-argument\n            throw new RuntimeError(`Expected value to be of type string or array, but found ${toString(typeOf(input))} instead.`);\n        }\n    }\n\n    eachChild(fn: (_: Expression) => void) {\n        fn(this.input);\n    }\n\n    outputDefined(): boolean {\n        return false;\n    }\n\n    serialize(): SerializedExpression {\n        const serialized: Array<SerializedExpression> = [\"length\"];\n        this.eachChild(child => { serialized.push(child.serialize()); });\n        return serialized;\n    }\n}\n\nexport default Length;\n","// Seeded pseudo random generator function\nexport function mulberry32(a: number): () => number {\n    return function () {\n        a |= 0;\n        a = (a + 0x6d2b79f5) | 0;\n        let t = Math.imul(a ^ (a >>> 15), 1 | a);\n        t = (t + Math.imul(t ^ (t >>> 7), 61 | t)) ^ t;\n        return ((t ^ (t >>> 14)) >>> 0) / 4294967296;\n    };\n}\n","import {\n    NumberType,\n    StringType,\n    BooleanType,\n    ColorType,\n    ObjectType,\n    ValueType,\n    ErrorType,\n    CollatorType,\n    array,\n    isValidNativeType,\n    toString as typeToString,\n} from '../types';\nimport {typeOf, Color, validateRGBA, validateHSLA, toString as valueToString} from '../values';\nimport CompoundExpression from '../compound_expression';\nimport RuntimeError from '../runtime_error';\nimport Let from './let';\nimport Var from './var';\nimport Literal from './literal';\nimport Assertion from './assertion';\nimport Coercion from './coercion';\nimport At from './at';\nimport AtInterpolated from './at_interpolated';\nimport Match from './match';\nimport Case from './case';\nimport Slice from './slice';\nimport Step from './step';\nimport Interpolate from './interpolate';\nimport Coalesce from './coalesce';\nimport {\n    Equals,\n    NotEquals,\n    LessThan,\n    GreaterThan,\n    LessThanOrEqual,\n    GreaterThanOrEqual\n} from './comparison';\nimport CollatorExpression from './collator';\nimport NumberFormat from './number_format';\nimport FormatExpression from './format';\nimport ImageExpression from './image';\nimport Length from './length';\nimport Within from './within';\nimport Config from './config';\nimport Distance from './distance';\nimport {mulberry32} from '../../util/random';\n\nimport type {Type} from '../types';\nimport type {Value} from '../values';\nimport type EvaluationContext from '../evaluation_context';\nimport type {Varargs} from '../compound_expression';\nimport type {Expression, ExpressionRegistry} from '../expression';\n\nconst expressions: ExpressionRegistry = {\n    // special forms\n    '==': Equals,\n    '!=': NotEquals,\n    '>': GreaterThan,\n    '<': LessThan,\n    '>=': GreaterThanOrEqual,\n    '<=': LessThanOrEqual,\n    'array': Assertion,\n    'at': At,\n    'at-interpolated': AtInterpolated,\n    'boolean': Assertion,\n    'case': Case,\n    'coalesce': Coalesce,\n    'collator': CollatorExpression,\n    'format': FormatExpression,\n    'image': ImageExpression,\n    'interpolate': Interpolate,\n    'interpolate-hcl': Interpolate,\n    'interpolate-lab': Interpolate,\n    'length': Length,\n    'let': Let,\n    'literal': Literal,\n    'match': Match,\n    'number': Assertion,\n    'number-format': NumberFormat,\n    'object': Assertion,\n    'slice': Slice,\n    'step': Step,\n    'string': Assertion,\n    'to-boolean': Coercion,\n    'to-color': Coercion,\n    'to-number': Coercion,\n    'to-string': Coercion,\n    'var': Var,\n    'within': Within,\n    'distance': Distance,\n    'config': Config\n};\n\nfunction rgba(ctx: EvaluationContext, [r, g, b, a]: Expression[]) {\n    // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\n    r = r.evaluate(ctx);\n    // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\n    g = g.evaluate(ctx);\n    // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\n    b = b.evaluate(ctx);\n    // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\n    const alpha = a ? a.evaluate(ctx) : 1;\n    const error = validateRGBA(r, g, b, alpha);\n    if (error) throw new RuntimeError(error);\n    // eslint-disable-next-line @typescript-eslint/no-unsafe-argument\n    return new Color(r as unknown as number / 255, g as unknown as number / 255, b as unknown as number / 255, alpha);\n}\n\nfunction hsla(ctx: EvaluationContext, [h, s, l, a]: Expression[]) {\n    // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\n    h = h.evaluate(ctx);\n    // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\n    s = s.evaluate(ctx);\n    // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\n    l = l.evaluate(ctx);\n    // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\n    const alpha = a ? a.evaluate(ctx) : 1;\n    const error = validateHSLA(h, s, l, alpha);\n    if (error) throw new RuntimeError(error);\n    // eslint-disable-next-line @typescript-eslint/no-base-to-string\n    const colorFunction = `hsla(${h}, ${s}%, ${l}%, ${alpha})`;\n    const color = Color.parse(colorFunction);\n    if (!color) throw new RuntimeError(`Failed to parse HSLA color: ${colorFunction}`);\n    return color;\n}\n\nfunction has<T extends object>(key: keyof T, obj: T): boolean {\n    return key in obj;\n}\n\nfunction get<T extends object>(key: keyof T, obj: T): T[keyof T] | null {\n    const v = obj[key];\n    return typeof v === 'undefined' ? null : v;\n}\n\nfunction binarySearch(v: unknown, a: Record<number, unknown>, i: number, j: number): boolean {\n    while (i <= j) {\n        const m = (i + j) >> 1;\n        if (a[m] === v)\n            return true;\n        if (a[m] > v)\n            j = m - 1;\n        else\n            i = m + 1;\n    }\n    return false;\n}\n\nfunction varargs(type: Type): Varargs {\n    return {type};\n}\n\n// Shared runtime type validation for `in` and `index-of`, whose needle and\n// haystack arguments are parsed as ValueType and checked at evaluation time.\nfunction assertNeedleHaystack(needle: Value, haystack: Value) {\n    if (!isValidNativeType(needle, ['boolean', 'string', 'number', 'null'])) {\n        throw new RuntimeError(`Expected first argument to be of type boolean, string, number or null, but found ${typeToString(typeOf(needle))} instead.`);\n    }\n    if (!isValidNativeType(haystack, ['string', 'array'])) {\n        throw new RuntimeError(`Expected second argument to be of type array or string, but found ${typeToString(typeOf(haystack))} instead.`);\n    }\n}\n\nfunction hashString(str: string) {\n    let hash = 0;\n    if (str.length === 0) {\n        return hash;\n    }\n    for (let i = 0; i < str.length; i++) {\n        const char = str.charCodeAt(i);\n        hash = ((hash << 5) - hash) + char;\n        hash = hash & hash;\n    }\n    return hash;\n}\n\nCompoundExpression.register(expressions, {\n    'error': [\n        ErrorType,\n        [StringType],\n        // eslint-disable-next-line @typescript-eslint/no-unsafe-argument\n        (ctx, [v]) => { throw new RuntimeError(v.evaluate(ctx)); }\n    ],\n    'typeof': [\n        StringType,\n        [ValueType],\n        // eslint-disable-next-line @typescript-eslint/no-unsafe-argument\n        (ctx, [v]) => typeToString(typeOf(v.evaluate(ctx)))\n    ],\n    'to-rgba': [\n        array(NumberType, 4),\n        [ColorType],\n        (ctx, [v]) => {\n            // eslint-disable-next-line @typescript-eslint/no-unsafe-return, @typescript-eslint/no-unsafe-call, @typescript-eslint/no-unsafe-member-access\n            return v.evaluate(ctx).toNonPremultipliedRenderColor(null).toArray();\n        }\n    ],\n    'to-hsla': [\n        array(NumberType, 4),\n        [ColorType],\n        (ctx, [v]) => {\n            // eslint-disable-next-line @typescript-eslint/no-unsafe-return, @typescript-eslint/no-unsafe-call, @typescript-eslint/no-unsafe-member-access\n            return v.evaluate(ctx).toNonPremultipliedRenderColor(null).toHslaArray();\n        }\n    ],\n    'rgb': [\n        ColorType,\n        [NumberType, NumberType, NumberType],\n        rgba\n    ],\n    'rgba': [\n        ColorType,\n        [NumberType, NumberType, NumberType, NumberType],\n        rgba\n    ],\n    'hsl': [\n        ColorType,\n        [NumberType, NumberType, NumberType],\n        hsla\n    ],\n    'hsla': [\n        ColorType,\n        [NumberType, NumberType, NumberType, NumberType],\n        hsla\n    ],\n    'has': {\n        type: BooleanType,\n        overloads: [\n            [\n                [StringType],\n                // eslint-disable-next-line @typescript-eslint/no-unsafe-argument\n                (ctx, [key]) => has(key.evaluate(ctx), ctx.properties())\n            ], [\n                [StringType, ObjectType],\n                // eslint-disable-next-line @typescript-eslint/no-unsafe-argument\n                (ctx, [key, obj]) => has(key.evaluate(ctx), obj.evaluate(ctx))\n            ]\n        ]\n    },\n    'get': {\n        type: ValueType,\n        overloads: [\n            [\n                [StringType],\n                // eslint-disable-next-line @typescript-eslint/no-unsafe-argument\n                (ctx, [key]) => get(key.evaluate(ctx), ctx.properties())\n            ], [\n                [StringType, ObjectType],\n                // eslint-disable-next-line @typescript-eslint/no-unsafe-return, @typescript-eslint/no-unsafe-argument\n                (ctx, [key, obj]) => get(key.evaluate(ctx), obj.evaluate(ctx))\n            ]\n        ]\n    },\n    'feature-state': [\n        ValueType,\n        [StringType],\n        // eslint-disable-next-line @typescript-eslint/no-unsafe-argument\n        (ctx, [key]) => get(key.evaluate(ctx), ctx.featureState || {}) as Value\n    ],\n    'properties': [\n        ObjectType,\n        [],\n        (ctx) => ctx.properties() as Value\n    ],\n    'geometry-type': [\n        StringType,\n        [],\n        (ctx) => ctx.geometryType()\n    ],\n    'worldview': [\n        StringType,\n        [],\n        (ctx) => ctx.globals.worldview || \"\"\n    ],\n    'is-active-floor': [\n        BooleanType,\n        varargs(StringType),\n        (ctx, args) => {\n            const hasActiveFloors = ctx.globals && ctx.globals.activeFloors && ctx.globals.activeFloors.size > 0;\n            if (!hasActiveFloors) { return false; }\n            if (args.length === 0) { return true; }\n            const floorIds: Set<string> = ctx.globals.activeFloors;\n            return args.some(arg => {\n                const value = arg.evaluate(ctx) as string;\n                return floorIds.has(value);\n            });\n        }\n    ],\n    'id': [\n        ValueType,\n        [],\n        (ctx) => ctx.id()\n    ],\n    'zoom': [\n        NumberType,\n        [],\n        (ctx) => ctx.globals.zoom\n    ],\n    'pitch': [\n        NumberType,\n        [],\n        (ctx) => ctx.globals.pitch || 0\n    ],\n    'distance-from-center': [\n        NumberType,\n        [],\n        (ctx) => ctx.distanceFromCenter()\n    ],\n    'measure-light': [\n        NumberType,\n        [StringType],\n        // eslint-disable-next-line @typescript-eslint/no-unsafe-argument\n        (ctx, [s]) => ctx.measureLight(s.evaluate(ctx))\n    ],\n    'heatmap-density': [\n        NumberType,\n        [],\n        (ctx) => ctx.globals.heatmapDensity || 0\n    ],\n    'line-progress': [\n        NumberType,\n        [],\n        (ctx) => ctx.globals.lineProgress || 0\n    ],\n    'raster-value': [\n        NumberType,\n        [],\n        (ctx) => ctx.globals.rasterValue || 0\n    ],\n    'raster-particle-speed': [\n        NumberType,\n        [],\n        (ctx) => ctx.globals.rasterParticleSpeed || 0\n    ],\n    'sky-radial-progress': [\n        NumberType,\n        [],\n        (ctx) => ctx.globals.skyRadialProgress || 0\n    ],\n    'accumulated': [\n        ValueType,\n        [],\n        (ctx) => (ctx.globals.accumulated === undefined ? null : ctx.globals.accumulated)\n    ],\n    '+': [\n        NumberType,\n        varargs(NumberType),\n        (ctx, args) => {\n            let result = 0;\n            for (const arg of args) {\n                result += arg.evaluate(ctx);\n            }\n            return result;\n        }\n    ],\n    '*': [\n        NumberType,\n        varargs(NumberType),\n        (ctx, args) => {\n            let result = 1;\n            for (const arg of args) {\n                result *= arg.evaluate(ctx);\n            }\n            return result;\n        }\n    ],\n    '-': {\n        type: NumberType,\n        overloads: [\n            [\n                [NumberType, NumberType],\n                (ctx, [a, b]) => a.evaluate(ctx) - b.evaluate(ctx)\n            ], [\n                [NumberType],\n                (ctx, [a]) => -a.evaluate(ctx)\n            ]\n        ]\n    },\n    '/': [\n        NumberType,\n        [NumberType, NumberType],\n        (ctx, [a, b]) => a.evaluate(ctx) / b.evaluate(ctx)\n    ],\n    '%': [\n        NumberType,\n        [NumberType, NumberType],\n        (ctx, [a, b]) => a.evaluate(ctx) % b.evaluate(ctx)\n    ],\n    'ln2': [\n        NumberType,\n        [],\n        () => Math.LN2\n    ],\n    'pi': [\n        NumberType,\n        [],\n        () => Math.PI\n    ],\n    'e': [\n        NumberType,\n        [],\n        () => Math.E\n    ],\n    '^': [\n        NumberType,\n        [NumberType, NumberType],\n        // eslint-disable-next-line @typescript-eslint/no-unsafe-argument\n        (ctx, [b, e]) => Math.pow(b.evaluate(ctx), e.evaluate(ctx))\n    ],\n    'sqrt': [\n        NumberType,\n        [NumberType],\n        // eslint-disable-next-line @typescript-eslint/no-unsafe-argument\n        (ctx, [x]) => Math.sqrt(x.evaluate(ctx))\n    ],\n    'log10': [\n        NumberType,\n        [NumberType],\n        // eslint-disable-next-line @typescript-eslint/no-unsafe-argument\n        (ctx, [n]) => Math.log(n.evaluate(ctx)) / Math.LN10\n    ],\n    'ln': [\n        NumberType,\n        [NumberType],\n        // eslint-disable-next-line @typescript-eslint/no-unsafe-argument\n        (ctx, [n]) => Math.log(n.evaluate(ctx))\n    ],\n    'log2': [\n        NumberType,\n        [NumberType],\n        // eslint-disable-next-line @typescript-eslint/no-unsafe-argument\n        (ctx, [n]) => Math.log2(n.evaluate(ctx))\n    ],\n    'sin': [\n        NumberType,\n        [NumberType],\n        // eslint-disable-next-line @typescript-eslint/no-unsafe-argument\n        (ctx, [n]) => Math.sin(n.evaluate(ctx))\n    ],\n    'cos': [\n        NumberType,\n        [NumberType],\n        // eslint-disable-next-line @typescript-eslint/no-unsafe-argument\n        (ctx, [n]) => Math.cos(n.evaluate(ctx))\n    ],\n    'tan': [\n        NumberType,\n        [NumberType],\n        // eslint-disable-next-line @typescript-eslint/no-unsafe-argument\n        (ctx, [n]) => Math.tan(n.evaluate(ctx))\n    ],\n    'asin': [\n        NumberType,\n        [NumberType],\n        // eslint-disable-next-line @typescript-eslint/no-unsafe-argument\n        (ctx, [n]) => Math.asin(n.evaluate(ctx))\n    ],\n    'acos': [\n        NumberType,\n        [NumberType],\n        // eslint-disable-next-line @typescript-eslint/no-unsafe-argument\n        (ctx, [n]) => Math.acos(n.evaluate(ctx))\n    ],\n    'atan': [\n        NumberType,\n        [NumberType],\n        // eslint-disable-next-line @typescript-eslint/no-unsafe-argument\n        (ctx, [n]) => Math.atan(n.evaluate(ctx))\n    ],\n    'min': [\n        NumberType,\n        varargs(NumberType),\n        // eslint-disable-next-line @typescript-eslint/no-unsafe-return, @typescript-eslint/no-unsafe-argument\n        (ctx, args) => Math.min(...args.map(arg => arg.evaluate(ctx)))\n    ],\n    'max': [\n        NumberType,\n        varargs(NumberType),\n        // eslint-disable-next-line @typescript-eslint/no-unsafe-return, @typescript-eslint/no-unsafe-argument\n        (ctx, args) => Math.max(...args.map(arg => arg.evaluate(ctx)))\n    ],\n    'abs': [\n        NumberType,\n        [NumberType],\n        // eslint-disable-next-line @typescript-eslint/no-unsafe-argument\n        (ctx, [n]) => Math.abs(n.evaluate(ctx))\n    ],\n    'round': [\n        NumberType,\n        [NumberType],\n        (ctx, [n]) => {\n            // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\n            const v = n.evaluate(ctx);\n            // Javascript's Math.round() rounds towards +Infinity for halfway\n            // values, even when they're negative. It's more common to round\n            // away from 0 (e.g., this is what python and C++ do)\n            // eslint-disable-next-line @typescript-eslint/no-unsafe-argument\n            return v < 0 ? -Math.round(-v) : Math.round(v);\n        }\n    ],\n    'floor': [\n        NumberType,\n        [NumberType],\n        // eslint-disable-next-line @typescript-eslint/no-unsafe-argument\n        (ctx, [n]) => Math.floor(n.evaluate(ctx))\n    ],\n    'ceil': [\n        NumberType,\n        [NumberType],\n        // eslint-disable-next-line @typescript-eslint/no-unsafe-argument\n        (ctx, [n]) => Math.ceil(n.evaluate(ctx))\n    ],\n    'filter-==': [\n        BooleanType,\n        [StringType, ValueType],\n        // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n        (ctx, [k, v]) => ctx.properties()[(k).value] === (v).value\n    ],\n    'filter-id-==': [\n        BooleanType,\n        [ValueType],\n        (ctx, [v]) => ctx.id() === (v).value\n    ],\n    'filter-type-==': [\n        BooleanType,\n        [StringType],\n        (ctx, [v]) => ctx.geometryType() === (v).value\n    ],\n    'filter-<': [\n        BooleanType,\n        [StringType, ValueType],\n        (ctx, [k, v]) => {\n            // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n            const a = ctx.properties()[(k).value];\n            // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\n            const b = (v).value;\n            return typeof a === typeof b && a < b;\n        }\n    ],\n    'filter-id-<': [\n        BooleanType,\n        [ValueType],\n        (ctx, [v]) => {\n            const a = ctx.id();\n            // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\n            const b = (v).value;\n            return typeof a === typeof b && a < b;\n        }\n    ],\n    'filter->': [\n        BooleanType,\n        [StringType, ValueType],\n        (ctx, [k, v]) => {\n            // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n            const a = ctx.properties()[(k).value];\n            // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\n            const b = (v).value;\n            return typeof a === typeof b && a > b;\n        }\n    ],\n    'filter-id->': [\n        BooleanType,\n        [ValueType],\n        (ctx, [v]) => {\n            const a = ctx.id();\n            // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\n            const b = (v).value;\n            return typeof a === typeof b && a > b;\n        }\n    ],\n    'filter-<=': [\n        BooleanType,\n        [StringType, ValueType],\n        (ctx, [k, v]) => {\n            // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n            const a = ctx.properties()[(k).value];\n            // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\n            const b = (v).value;\n            return typeof a === typeof b && a <= b;\n        }\n    ],\n    'filter-id-<=': [\n        BooleanType,\n        [ValueType],\n        (ctx, [v]) => {\n            const a = ctx.id();\n            // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\n            const b = (v).value;\n            return typeof a === typeof b && a <= b;\n        }\n    ],\n    'filter->=': [\n        BooleanType,\n        [StringType, ValueType],\n        (ctx, [k, v]) => {\n            // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n            const a = ctx.properties()[(k).value];\n            // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\n            const b = (v).value;\n            return typeof a === typeof b && a >= b;\n        }\n    ],\n    'filter-id->=': [\n        BooleanType,\n        [ValueType],\n        (ctx, [v]) => {\n            const a = ctx.id();\n            // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\n            const b = (v).value;\n            return typeof a === typeof b && a >= b;\n        }\n    ],\n    'filter-has': [\n        BooleanType,\n        [ValueType],\n        (ctx, [k]) => (k).value in ctx.properties()\n    ],\n    'filter-has-id': [\n        BooleanType,\n        [],\n        (ctx) => (ctx.id() !== null && ctx.id() !== undefined)\n    ],\n    'filter-type-in': [\n        BooleanType,\n        [array(StringType)],\n        // eslint-disable-next-line @typescript-eslint/no-unsafe-call, @typescript-eslint/no-unsafe-member-access, @typescript-eslint/no-unsafe-return\n        (ctx, [v]) => (v).value.includes(ctx.geometryType())\n    ],\n    'filter-id-in': [\n        BooleanType,\n        [array(ValueType)],\n        // eslint-disable-next-line @typescript-eslint/no-unsafe-call, @typescript-eslint/no-unsafe-member-access, @typescript-eslint/no-unsafe-return\n        (ctx, [v]) => (v).value.includes(ctx.id())\n    ],\n    'filter-in-small': [\n        BooleanType,\n        [StringType, array(ValueType)],\n        // assumes v is an array literal\n        // eslint-disable-next-line @typescript-eslint/no-unsafe-call, @typescript-eslint/no-unsafe-member-access, @typescript-eslint/no-unsafe-return\n        (ctx, [k, v]) => (v).value.includes(ctx.properties()[(k).value])\n    ],\n    'filter-in-large': [\n        BooleanType,\n        [StringType, array(ValueType)],\n        // assumes v is a array literal with values sorted in ascending order and of a single type\n        // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access, @typescript-eslint/no-unsafe-argument\n        (ctx, [k, v]) => binarySearch(ctx.properties()[(k).value], (v).value, 0, (v).value.length - 1)\n    ],\n    'all': {\n        type: BooleanType,\n        overloads: [\n            [\n                [BooleanType, BooleanType],\n                // eslint-disable-next-line @typescript-eslint/no-unsafe-return\n                (ctx, [a, b]) => a.evaluate(ctx) && b.evaluate(ctx)\n            ],\n            [\n                varargs(BooleanType),\n                (ctx, args) => {\n                    for (const arg of args) {\n                        if (!arg.evaluate(ctx))\n                            return false;\n                    }\n                    return true;\n                }\n            ]\n        ]\n    },\n    'any': {\n        type: BooleanType,\n        overloads: [\n            [\n                [BooleanType, BooleanType],\n                // eslint-disable-next-line @typescript-eslint/no-unsafe-return\n                (ctx, [a, b]) => a.evaluate(ctx) || b.evaluate(ctx)\n            ],\n            [\n                varargs(BooleanType),\n                (ctx, args) => {\n                    for (const arg of args) {\n                        if (arg.evaluate(ctx))\n                            return true;\n                    }\n                    return false;\n                }\n            ]\n        ]\n    },\n    '!': [\n        BooleanType,\n        [BooleanType],\n        (ctx, [b]) => !b.evaluate(ctx)\n    ],\n    'is-supported-script': [\n        BooleanType,\n        [StringType],\n        // At parse time this will always return true, so we need to exclude this expression with isGlobalPropertyConstant\n        (ctx, [s]) => {\n            const isSupportedScript = ctx.globals && ctx.globals.isSupportedScript;\n            if (isSupportedScript) {\n                // eslint-disable-next-line @typescript-eslint/no-unsafe-argument\n                return isSupportedScript(s.evaluate(ctx));\n            }\n            return true;\n        }\n    ],\n    'upcase': [\n        StringType,\n        [StringType],\n        // eslint-disable-next-line @typescript-eslint/no-unsafe-return, @typescript-eslint/no-unsafe-call, @typescript-eslint/no-unsafe-member-access\n        (ctx, [s]) => s.evaluate(ctx).toUpperCase()\n    ],\n    'downcase': [\n        StringType,\n        [StringType],\n        // eslint-disable-next-line @typescript-eslint/no-unsafe-return, @typescript-eslint/no-unsafe-call, @typescript-eslint/no-unsafe-member-access\n        (ctx, [s]) => s.evaluate(ctx).toLowerCase()\n    ],\n    'concat': [\n        StringType,\n        varargs(ValueType),\n        // eslint-disable-next-line @typescript-eslint/no-unsafe-argument\n        (ctx, args) => args.map(arg => valueToString(arg.evaluate(ctx))).join('')\n    ],\n    'split': [\n        array(StringType),\n        [StringType, StringType],\n        // eslint-disable-next-line @typescript-eslint/no-unsafe-call, @typescript-eslint/no-unsafe-member-access, @typescript-eslint/no-unsafe-return\n        (ctx, [str, delimiter]) => str.evaluate(ctx).split(delimiter.evaluate(ctx))\n    ],\n    'in': [\n        BooleanType,\n        [ValueType, ValueType],\n        (ctx, [needleExpr, haystackExpr]) => {\n            const needle = needleExpr.evaluate(ctx) as Value;\n            const haystack = haystackExpr.evaluate(ctx) as Value;\n            if (haystack == null) return false;\n            assertNeedleHaystack(needle, haystack);\n            // Type assertions safe due to assertNeedleHaystack checks above\n            return (haystack as string | unknown[]).includes(needle as string);\n        }\n    ],\n    'index-of': {\n        type: NumberType,\n        overloads: [\n            [\n                [ValueType, ValueType],\n                (ctx, [needleExpr, haystackExpr]) => {\n                    const needle = needleExpr.evaluate(ctx) as Value;\n                    const haystack = haystackExpr.evaluate(ctx) as Value;\n                    assertNeedleHaystack(needle, haystack);\n                    // Type assertions safe due to assertNeedleHaystack checks above\n                    return (haystack as string | unknown[]).indexOf(needle as string);\n                }\n            ], [\n                [ValueType, ValueType, NumberType],\n                (ctx, [needleExpr, haystackExpr, fromIndexExpr]) => {\n                    const needle = needleExpr.evaluate(ctx) as Value;\n                    const haystack = haystackExpr.evaluate(ctx) as Value;\n                    const fromIndex = fromIndexExpr.evaluate(ctx) as number;\n                    assertNeedleHaystack(needle, haystack);\n                    // Type assertions safe due to assertNeedleHaystack checks above\n                    return (haystack as string | unknown[]).indexOf(needle as string, fromIndex);\n                }\n            ]\n        ]\n    },\n    'resolved-locale': [\n        StringType,\n        [CollatorType],\n        // eslint-disable-next-line @typescript-eslint/no-unsafe-return, @typescript-eslint/no-unsafe-call, @typescript-eslint/no-unsafe-member-access\n        (ctx, [collator]) => collator.evaluate(ctx).resolvedLocale()\n    ],\n    'random': [\n        NumberType,\n        [NumberType, NumberType, ValueType],\n        (ctx, args) => {\n            // eslint-disable-next-line @typescript-eslint/no-unsafe-return, @typescript-eslint/no-unsafe-assignment\n            const [min, max, seed] = args.map(arg => arg.evaluate(ctx));\n            if (min > max) {\n                // eslint-disable-next-line @typescript-eslint/no-unsafe-return\n                return min;\n            }\n            if (min === max) {\n                // eslint-disable-next-line @typescript-eslint/no-unsafe-return\n                return min;\n            }\n            let seedVal: number;\n            if (typeof seed === 'string') {\n                seedVal = hashString(seed);\n            } else if (typeof seed === 'number') {\n                seedVal = seed;\n            } else {\n                throw new RuntimeError(`Invalid seed input: ${seed}`);\n            }\n            const random = mulberry32(seedVal)();\n            // eslint-disable-next-line @typescript-eslint/no-unsafe-return\n            return min + random * (max - min);\n        }\n    ],\n});\n\nexport default expressions;\n","import CompoundExpression from \"./compound_expression\";\nimport Config from \"./definitions/config\";\n\nimport type {Expression} from \"./expression\";\n\nfunction getConfigDependencies(e: Expression): Set<string> {\n    if (e instanceof Config) {\n        const singleConfig = new Set([e.key]);\n        return singleConfig;\n    }\n\n    let result = new Set<string>();\n    e.eachChild(arg => {\n        result = new Set([...result, ...getConfigDependencies(arg)]);\n    });\n    return result;\n}\n\nfunction isIndoorDependent(e: Expression): boolean {\n    if (e instanceof CompoundExpression && e.name === 'is-active-floor') {\n        return true;\n    }\n\n    let result = false;\n    e.eachChild(arg => {\n        if (!result && isIndoorDependent(arg)) {\n            result = true;\n        }\n    });\n    return result;\n}\n\nexport {getConfigDependencies, isIndoorDependent};\n","/**\n * A type used for returning and propagating errors. The first element of the union\n * represents success and contains a value, and the second represents an error and\n * contains an error value.\n * @private\n */\nexport type Result<T, E> = {\n    result: 'success';\n    value: T;\n} | {\n    result: 'error';\n    value: E;\n};\n\nexport function success<T, E>(value: T): Result<T, E> {\n    return {result: 'success', value};\n}\n\nexport function error<T, E>(value: E): Result<T, E> {\n    return {result: 'error', value};\n}\n","import type {PropertyExpressionSpecification, StylePropertySpecification} from '../style-spec';\n\nexport const TRANSITION_KEY_RE = /^(.*)-transition$/;\nexport const USE_THEME_KEY_RE = /^(.*)-use-theme$/;\n\ntype ExpressionParameter = PropertyExpressionSpecification['parameters'][number];\n\nfunction expressionHasParameter(\n    expression: PropertyExpressionSpecification | null | undefined,\n    parameter: ExpressionParameter,\n): boolean {\n    return !!expression && !!expression.parameters && expression.parameters.includes(parameter);\n}\n\nexport function supportsPropertyExpression(spec: StylePropertySpecification): boolean {\n    return spec['property-type'] === 'data-driven';\n}\n\nexport function supportsLightExpression(spec: StylePropertySpecification): boolean {\n    return expressionHasParameter(spec.expression, 'measure-light');\n}\n\nexport function supportsZoomExpression(spec: StylePropertySpecification): boolean {\n    return expressionHasParameter(spec.expression, 'zoom');\n}\n\nexport function supportsLineProgressExpression(spec: StylePropertySpecification): boolean {\n    return expressionHasParameter(spec.expression, 'line-progress');\n}\n\nexport function supportsInterpolation(spec: StylePropertySpecification): boolean {\n    return !!spec.expression && spec.expression.interpolated;\n}\n","/* eslint-disable @typescript-eslint/ban-ts-comment */\n// @ts-nocheck\n\nimport * as colorSpaces from '../util/color_spaces';\nimport Color from '../util/color';\nimport {getType, isNumber} from '../util/get_type';\nimport * as interpolate from '../util/interpolate';\nimport Interpolate from '../expression/definitions/interpolate';\nimport Formatted from '../expression/types/formatted';\nimport ResolvedImage from '../expression/types/resolved_image';\nimport {supportsInterpolation} from '../util/properties';\nimport {findStopLessThanOrEqualTo} from '../expression/stops';\n\nexport function isFunction(value) {\n    return typeof value === 'object' && value !== null && !Array.isArray(value);\n}\n\nfunction identityFunction(x) {\n    // eslint-disable-next-line @typescript-eslint/no-unsafe-return\n    return x;\n}\n\nexport function createFunction(parameters, propertySpec) {\n    // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n    const isColor = propertySpec.type === 'color';\n    // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n    const zoomAndFeatureDependent = parameters.stops && typeof parameters.stops[0][0] === 'object';\n    // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n    const featureDependent = zoomAndFeatureDependent || parameters.property !== undefined;\n    const zoomDependent = zoomAndFeatureDependent || !featureDependent;\n    // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-unsafe-member-access, @typescript-eslint/no-unsafe-argument\n    const type = parameters.type || (supportsInterpolation(propertySpec) ? 'exponential' : 'interval');\n\n    if (isColor) {\n        // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\n        parameters = {...parameters};\n\n        // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n        if (parameters.stops) {\n            // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-unsafe-member-access, @typescript-eslint/no-unsafe-call\n            parameters.stops = parameters.stops.map((stop) => {\n                // eslint-disable-next-line @typescript-eslint/no-unsafe-return, @typescript-eslint/no-unsafe-member-access, @typescript-eslint/no-unsafe-argument\n                return [stop[0], Color.parse(stop[1])];\n            });\n        }\n\n        // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n        if (parameters.default) {\n            // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access, @typescript-eslint/no-unsafe-argument\n            parameters.default = Color.parse(parameters.default);\n        } else {\n            // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access, @typescript-eslint/no-unsafe-argument\n            parameters.default = Color.parse(propertySpec.default);\n        }\n    }\n\n    // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n    if (parameters.colorSpace && parameters.colorSpace !== 'rgb' && !colorSpaces[parameters.colorSpace]) {\n        // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n        throw new Error(`Unknown color space: ${parameters.colorSpace}`);\n    }\n\n    // eslint-disable-next-line @typescript-eslint/no-explicit-any\n    let innerFun: ((parameters: any, propertySpec: any, input: any, hashedStops?: any, categoricalKeyType?: any) => any) | undefined;\n    let hashedStops: Record<string | number, unknown> | undefined;\n    let categoricalKeyType: string | undefined;\n    if (type === 'exponential') {\n        innerFun = evaluateExponentialFunction;\n    } else if (type === 'interval') {\n        innerFun = evaluateIntervalFunction;\n    } else if (type === 'categorical') {\n        innerFun = evaluateCategoricalFunction;\n\n        // For categorical functions, generate an Object as a hashmap of the stops for fast searching\n        // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\n        hashedStops = Object.create(null);\n        // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n        for (const stop of parameters.stops) {\n            // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n            hashedStops[stop[0]] = stop[1];\n        }\n\n        // Infer key type based on first stop key-- used to encforce strict type checking later\n        // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n        categoricalKeyType = typeof parameters.stops[0][0];\n\n    } else if (type === 'identity') {\n        innerFun = evaluateIdentityFunction;\n    } else {\n        throw new Error(`Unknown function type \"${type}\"`);\n    }\n\n    if (zoomAndFeatureDependent) {\n        // eslint-disable-next-line @typescript-eslint/no-explicit-any\n        const featureFunctions: Record<string, any> = {};\n        const zoomStops = [];\n        // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n        for (let s = 0; s < parameters.stops.length; s++) {\n            // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-unsafe-member-access\n            const stop = parameters.stops[s];\n            // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-unsafe-member-access\n            const zoom = stop[0].zoom;\n            // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n            if (featureFunctions[zoom] === undefined) {\n                // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n                featureFunctions[zoom] = {\n                    // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\n                    zoom,\n                    // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-unsafe-member-access\n                    type: parameters.type,\n                    // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-unsafe-member-access\n                    property: parameters.property,\n                    // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-unsafe-member-access\n                    default: parameters.default,\n                    stops: []\n                };\n                zoomStops.push(zoom);\n            }\n            // eslint-disable-next-line @typescript-eslint/no-unsafe-call, @typescript-eslint/no-unsafe-member-access\n            featureFunctions[zoom].stops.push([stop[0].value, stop[1]]);\n        }\n\n        const featureFunctionStops = [];\n        for (const z of zoomStops) {\n            // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n            featureFunctionStops.push([featureFunctions[z].zoom, createFunction(featureFunctions[z], propertySpec)]);\n        }\n\n        const interpolationType = {name: 'linear'};\n        return {\n            kind: 'composite',\n            interpolationType,\n\n            interpolationFactor: Interpolate.interpolationFactor.bind(undefined, interpolationType),\n            // eslint-disable-next-line @typescript-eslint/no-unsafe-return, @typescript-eslint/no-unsafe-member-access\n            zoomStops: featureFunctionStops.map(s => s[0]),\n            evaluate({zoom}, properties) {\n                // eslint-disable-next-line @typescript-eslint/no-unsafe-return, @typescript-eslint/no-unsafe-call\n                return evaluateExponentialFunction({\n                    stops: featureFunctionStops,\n                    // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-unsafe-member-access\n                    base: parameters.base\n                // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n                }, propertySpec, zoom).evaluate(zoom, properties);\n            }\n        };\n    } else if (zoomDependent) {\n        const interpolationType = type === 'exponential' ?\n            // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-unsafe-member-access\n            {name: 'exponential', base: parameters.base !== undefined ? parameters.base : 1} : null;\n        return {\n            kind: 'camera',\n            interpolationType,\n\n            interpolationFactor: Interpolate.interpolationFactor.bind(undefined, interpolationType),\n            // eslint-disable-next-line @typescript-eslint/no-unsafe-return, @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-unsafe-call, @typescript-eslint/no-unsafe-member-access\n            zoomStops: parameters.stops.map(s => s[0]),\n            // eslint-disable-next-line @typescript-eslint/no-unsafe-return\n            evaluate: ({zoom}) => innerFun(parameters, propertySpec, zoom, hashedStops, categoricalKeyType)\n        };\n    } else {\n        return {\n            kind: 'source',\n            evaluate(_, feature) {\n                // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-unsafe-member-access\n                const value = feature && feature.properties ? feature.properties[parameters.property] : undefined;\n                if (value === undefined) {\n                    // eslint-disable-next-line @typescript-eslint/no-unsafe-return, @typescript-eslint/no-unsafe-member-access\n                    return coalesce(parameters.default, propertySpec.default);\n                }\n                // eslint-disable-next-line @typescript-eslint/no-unsafe-return\n                return innerFun(parameters, propertySpec, value, hashedStops, categoricalKeyType);\n            }\n        };\n    }\n}\n\nfunction coalesce(a, b, c) {\n    // eslint-disable-next-line @typescript-eslint/no-unsafe-return\n    if (a !== undefined) return a;\n    // eslint-disable-next-line @typescript-eslint/no-unsafe-return\n    if (b !== undefined) return b;\n    // eslint-disable-next-line @typescript-eslint/no-unsafe-return\n    if (c !== undefined) return c;\n}\n\nfunction evaluateCategoricalFunction(parameters, propertySpec, input, hashedStops, keyType) {\n    // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-unsafe-member-access\n    const evaluated = typeof input === keyType ? hashedStops[input] : undefined; // Enforce strict typing on input\n    // eslint-disable-next-line @typescript-eslint/no-unsafe-return, @typescript-eslint/no-unsafe-member-access\n    return coalesce(evaluated, parameters.default, propertySpec.default);\n}\n\nfunction evaluateIntervalFunction(parameters, propertySpec, input) {\n    // Edge cases\n    // eslint-disable-next-line @typescript-eslint/no-unsafe-return, @typescript-eslint/no-unsafe-member-access\n    if (!isNumber(input)) return coalesce(parameters.default, propertySpec.default);\n    // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-unsafe-member-access\n    const n = parameters.stops.length;\n    // eslint-disable-next-line @typescript-eslint/no-unsafe-return, @typescript-eslint/no-unsafe-member-access\n    if (n === 1) return parameters.stops[0][1];\n    // eslint-disable-next-line @typescript-eslint/no-unsafe-return, @typescript-eslint/no-unsafe-member-access\n    if (input <= parameters.stops[0][0]) return parameters.stops[0][1];\n    // eslint-disable-next-line @typescript-eslint/no-unsafe-return, @typescript-eslint/no-unsafe-member-access\n    if (input >= parameters.stops[n - 1][0]) return parameters.stops[n - 1][1];\n\n    // eslint-disable-next-line @typescript-eslint/no-unsafe-return, @typescript-eslint/no-unsafe-argument, @typescript-eslint/no-unsafe-call, @typescript-eslint/no-unsafe-member-access\n    const index = findStopLessThanOrEqualTo(parameters.stops.map((stop) => stop[0]), input);\n\n    // eslint-disable-next-line @typescript-eslint/no-unsafe-return, @typescript-eslint/no-unsafe-member-access\n    return parameters.stops[index][1];\n}\n\nfunction evaluateExponentialFunction(parameters, propertySpec, input) {\n    // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-unsafe-member-access\n    const base = parameters.base !== undefined ? parameters.base : 1;\n\n    // Edge cases\n    // eslint-disable-next-line @typescript-eslint/no-unsafe-return, @typescript-eslint/no-unsafe-member-access\n    if (!isNumber(input)) return coalesce(parameters.default, propertySpec.default);\n    // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-unsafe-member-access\n    const n = parameters.stops.length;\n    // eslint-disable-next-line @typescript-eslint/no-unsafe-return, @typescript-eslint/no-unsafe-member-access\n    if (n === 1) return parameters.stops[0][1];\n    // eslint-disable-next-line @typescript-eslint/no-unsafe-return, @typescript-eslint/no-unsafe-member-access\n    if (input <= parameters.stops[0][0]) return parameters.stops[0][1];\n    // eslint-disable-next-line @typescript-eslint/no-unsafe-return, @typescript-eslint/no-unsafe-member-access\n    if (input >= parameters.stops[n - 1][0]) return parameters.stops[n - 1][1];\n\n    // eslint-disable-next-line @typescript-eslint/no-unsafe-return, @typescript-eslint/no-unsafe-argument, @typescript-eslint/no-unsafe-call, @typescript-eslint/no-unsafe-member-access\n    const index = findStopLessThanOrEqualTo(parameters.stops.map((stop) => stop[0]), input);\n    const t = interpolationFactor(\n        input, base,\n        // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n        parameters.stops[index][0],\n        // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n        parameters.stops[index + 1][0]);\n\n    // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-unsafe-member-access\n    const outputLower = parameters.stops[index][1];\n    // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-unsafe-member-access\n    const outputUpper = parameters.stops[index + 1][1];\n    // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-unsafe-member-access\n    let interp = interpolate[propertySpec.type] || identityFunction;\n\n    // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n    if (parameters.colorSpace && parameters.colorSpace !== 'rgb') {\n        // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-unsafe-member-access\n        const colorspace = colorSpaces[parameters.colorSpace];\n        // eslint-disable-next-line @typescript-eslint/no-unsafe-return, @typescript-eslint/no-unsafe-call, @typescript-eslint/no-unsafe-member-access\n        interp = (a, b) => colorspace.reverse(colorspace.interpolate(colorspace.forward(a), colorspace.forward(b), t));\n    }\n\n    // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n    if (typeof outputLower.evaluate === 'function') {\n        return {\n            evaluate(...args) {\n                // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-unsafe-call, @typescript-eslint/no-unsafe-member-access\n                const evaluatedLower = outputLower.evaluate.apply(undefined, args);\n                // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-unsafe-call, @typescript-eslint/no-unsafe-member-access\n                const evaluatedUpper = outputUpper.evaluate.apply(undefined, args);\n                // Special case for fill-outline-color, which has no spec default.\n                if (evaluatedLower === undefined || evaluatedUpper === undefined) {\n                    return undefined;\n                }\n                // eslint-disable-next-line @typescript-eslint/no-unsafe-return, @typescript-eslint/no-unsafe-call\n                return interp(evaluatedLower, evaluatedUpper, t);\n            }\n        };\n    }\n\n    // eslint-disable-next-line @typescript-eslint/no-unsafe-return, @typescript-eslint/no-unsafe-call\n    return interp(outputLower, outputUpper, t);\n}\n\nfunction evaluateIdentityFunction(parameters, propertySpec, input) {\n    // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n    if (propertySpec.type === 'color') {\n        // eslint-disable-next-line @typescript-eslint/no-unsafe-argument\n        input = Color.parse(input);\n    // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n    } else if (propertySpec.type === 'formatted') {\n        // eslint-disable-next-line @typescript-eslint/no-unsafe-argument, @typescript-eslint/no-unsafe-call, @typescript-eslint/no-unsafe-member-access\n        input = Formatted.fromString(input.toString());\n    // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n    } else if (propertySpec.type === 'resolvedImage') {\n        // eslint-disable-next-line @typescript-eslint/no-unsafe-argument, @typescript-eslint/no-unsafe-call, @typescript-eslint/no-unsafe-member-access\n        input = ResolvedImage.build(input.toString());\n    // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n    } else if (getType(input) !== propertySpec.type && (propertySpec.type !== 'enum' || !propertySpec.values[input])) {\n        input = undefined;\n    }\n    // eslint-disable-next-line @typescript-eslint/no-unsafe-return, @typescript-eslint/no-unsafe-member-access\n    return coalesce(input, parameters.default, propertySpec.default);\n}\n\n/**\n * Returns a ratio that can be used to interpolate between exponential function\n * stops.\n *\n * How it works:\n * Two consecutive stop values define a (scaled and shifted) exponential\n * function `f(x) = a * base^x + b`, where `base` is the user-specified base,\n * and `a` and `b` are constants affording sufficient degrees of freedom to fit\n * the function to the given stops.\n *\n * Here's a bit of algebra that lets us compute `f(x)` directly from the stop\n * values without explicitly solving for `a` and `b`:\n *\n * First stop value: `f(x0) = y0 = a * base^x0 + b`\n * Second stop value: `f(x1) = y1 = a * base^x1 + b`\n * => `y1 - y0 = a(base^x1 - base^x0)`\n * => `a = (y1 - y0)/(base^x1 - base^x0)`\n *\n * Desired value: `f(x) = y = a * base^x + b`\n * => `f(x) = y0 + a * (base^x - base^x0)`\n *\n * From the above, we can replace the `a` in `a * (base^x - base^x0)` and do a\n * little algebra:\n * ```\n * a * (base^x - base^x0) = (y1 - y0)/(base^x1 - base^x0) * (base^x - base^x0)\n *                     = (y1 - y0) * (base^x - base^x0) / (base^x1 - base^x0)\n * ```\n *\n * If we let `(base^x - base^x0) / (base^x1 base^x0)`, then we have\n * `f(x) = y0 + (y1 - y0) * ratio`.  In other words, `ratio` may be treated as\n * an interpolation factor between the two stops' output values.\n *\n * (Note: a slightly different form for `ratio`,\n * `(base^(x-x0) - 1) / (base^(x1-x0) - 1) `, is equivalent, but requires fewer\n * expensive `Math.pow()` operations.)\n *\n * @private\n */\nfunction interpolationFactor(input, base, lowerValue, upperValue) {\n    const difference = upperValue - lowerValue;\n    const progress = input - lowerValue;\n\n    if (difference === 0) {\n        return 0;\n    } else if (base === 1) {\n        return progress / difference;\n    } else {\n        // eslint-disable-next-line @typescript-eslint/no-unsafe-argument\n        return (Math.pow(base, progress) - 1) / (Math.pow(base, difference) - 1);\n    }\n}\n","import assert from '../util/assert';\nimport ParsingError from './parsing_error';\nimport ParsingContext from './parsing_context';\nimport EvaluationContext from './evaluation_context';\nimport CompoundExpression from './compound_expression';\nimport Step from './definitions/step';\nimport Interpolate from './definitions/interpolate';\nimport Coalesce from './definitions/coalesce';\nimport Let from './definitions/let';\nimport definitions from './definitions/index';\nimport * as isConstant from './is_constant';\nimport * as expressionDependencies from './expression_dependencies';\nimport RuntimeError from './runtime_error';\nimport {success, error} from '../util/result';\nimport {\n    supportsPropertyExpression,\n    supportsZoomExpression,\n    supportsLightExpression,\n    supportsInterpolation,\n    supportsLineProgressExpression\n} from '../util/properties';\nimport {isFunction, createFunction} from '../function/index';\nimport {Color} from './values';\nimport {ColorType, StringType, NumberType, BooleanType, ValueType, FormattedType, ResolvedImageType, array} from './types';\n\nimport type {Type, EvaluationKind} from './types';\nimport type {Value} from './values';\nimport type {Expression} from './expression';\nimport type {StylePropertySpecification} from '../style-spec';\nimport type {Result} from '../util/result';\nimport type {InterpolationType} from './definitions/interpolate';\nimport type {PropertyValueSpecification} from '../types';\nimport type {FormattedSection} from './types/formatted';\nimport type Point from '@mapbox/point-geometry';\nimport type {CanonicalTileID} from '../types/tile_id';\nimport type {FeatureDistanceData} from '../feature_filter/index';\nimport type {ConfigOptions} from '../types/config_options';\nimport type {ImageId} from './types/image_id';\n\nexport interface Feature {\n    readonly type: 0 | 1 | 2 | 3 | 'Unknown' | 'Point' | 'LineString' | 'Polygon';\n    readonly id?: string | number | null;\n    readonly properties: Record<PropertyKey, unknown>;\n    readonly patterns?: Record<PropertyKey, string[]>;\n    readonly geometry?: Array<Array<Point>>;\n}\n\nexport type FeatureState = {\n    [_: string]: unknown;\n};\n\nexport interface GlobalProperties {\n    zoom: number;\n    pitch?: number;\n    heatmapDensity?: number;\n    lineProgress?: number;\n    rasterValue?: number;\n    rasterParticleSpeed?: number;\n    skyRadialProgress?: number;\n    readonly isSupportedScript?: (_: string) => boolean;\n    accumulated?: Value;\n    brightness?: number;\n    worldview?: string;\n    activeFloors?: Set<string>;\n}\n\nexport class StyleExpression {\n    expression: Expression;\n    _scope?: string;\n    _options?: ConfigOptions;\n    _iconImageUseTheme?: string;\n    _evaluator?: EvaluationContext;\n    _defaultValue: Value;\n    _warningHistory: {[key: string]: boolean};\n    _enumValues?: {[_: string]: unknown};\n    configDependencies: Set<string>;\n    isIndoorDependent: boolean;\n\n    constructor(expression: Expression, propertySpec?: StylePropertySpecification, scope?: string, options?: ConfigOptions, iconImageUseTheme?: string) {\n        this.expression = expression;\n        this._warningHistory = {};\n        this._scope = scope;\n        this._options = options;\n        this._iconImageUseTheme = iconImageUseTheme;\n        this._evaluator = new EvaluationContext(scope, options, iconImageUseTheme);\n        this._defaultValue = propertySpec ? getDefaultValue(propertySpec) : null;\n        this._enumValues = propertySpec && propertySpec.type === 'enum' ? propertySpec.values : null;\n        this.configDependencies = expressionDependencies.getConfigDependencies(expression);\n        this.isIndoorDependent = expressionDependencies.isIndoorDependent(expression);\n    }\n\n    evaluateWithoutErrorHandling(\n        globals: GlobalProperties,\n        feature?: Feature,\n        featureState?: FeatureState,\n        canonical?: CanonicalTileID,\n        availableImages?: ImageId[],\n        formattedSection?: FormattedSection,\n        featureTileCoord?: Point,\n        featureDistanceData?: FeatureDistanceData,\n    // eslint-disable-next-line @typescript-eslint/no-explicit-any\n    ): any {\n        this._evaluator.globals = globals;\n        this._evaluator.feature = feature;\n        this._evaluator.featureState = featureState;\n        this._evaluator.canonical = canonical || null;\n        this._evaluator.availableImages = availableImages || null;\n        this._evaluator.formattedSection = formattedSection;\n        this._evaluator.featureTileCoord = featureTileCoord || null;\n        this._evaluator.featureDistanceData = featureDistanceData || null;\n\n        return this.expression.evaluate(this._evaluator);\n    }\n\n    evaluate(\n        globals: GlobalProperties,\n        feature?: Feature,\n        featureState?: FeatureState,\n        canonical?: CanonicalTileID,\n        availableImages?: ImageId[],\n        formattedSection?: FormattedSection,\n        featureTileCoord?: Point,\n        featureDistanceData?: FeatureDistanceData,\n        iconImageUseTheme?: string\n    // eslint-disable-next-line @typescript-eslint/no-explicit-any\n    ): any {\n        if (!this._evaluator) {\n            // `_evaluator` is explicitly omitted from serialization in src/util/web_worker_transfer.ts\n            this._evaluator = new EvaluationContext(this._scope, this._options, this._iconImageUseTheme);\n        }\n\n        this._evaluator.globals = globals;\n        this._evaluator.feature = feature || null;\n        this._evaluator.featureState = featureState || null;\n        this._evaluator.canonical = canonical || null;\n        this._evaluator.availableImages = availableImages || null;\n        this._evaluator.formattedSection = formattedSection || null;\n        this._evaluator.featureTileCoord = featureTileCoord || null;\n        this._evaluator.featureDistanceData = featureDistanceData || null;\n        this._evaluator.iconImageUseTheme = iconImageUseTheme || null;\n        try {\n            // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\n            const val = this.expression.evaluate(this._evaluator);\n            // eslint-disable-next-line no-self-compare\n            if (val === null || val === undefined || (typeof val === 'number' && val !== val)) {\n                return this._defaultValue;\n            }\n            if (this._enumValues && !(val in this._enumValues)) {\n                throw new RuntimeError(`Expected value to be one of ${Object.keys(this._enumValues).map(v => JSON.stringify(v)).join(', ')}, but found ${JSON.stringify(val)} instead.`);\n            }\n            return val;\n        } catch (e) {\n            const error = e as Error;\n            if (!this._warningHistory[error.message]) {\n                this._warningHistory[error.message] = true;\n                if (typeof console !== 'undefined') {\n                    console.warn(`Failed to evaluate expression \"${JSON.stringify(this.expression.serialize())}\". ${error.message}`);\n                }\n            }\n            return this._defaultValue;\n        }\n    }\n}\n\nexport function isExpression(expression: unknown): boolean {\n    return Array.isArray(expression) && expression.length > 0 &&\n        typeof expression[0] === 'string' && Object.hasOwn(definitions, expression[0]);\n}\n\n/**\n * Parse and typecheck the given style spec JSON expression.  If\n * options.defaultValue is provided, then the resulting StyleExpression's\n * `evaluate()` method will handle errors by logging a warning (once per\n * message) and returning the default value.  Otherwise, it will throw\n * evaluation errors.\n *\n * @private\n */\nexport function createExpression(\n    expression: unknown,\n    propertySpec?: StylePropertySpecification | null,\n    scope?: string | null,\n    options?: ConfigOptions | null,\n    iconImageUseTheme?: string | null\n): Result<StyleExpression, Array<ParsingError>> {\n    const parser = new ParsingContext(definitions, [], propertySpec ? getExpectedType(propertySpec) : undefined, undefined, undefined, scope, options, iconImageUseTheme);\n\n    // For string-valued properties, coerce to string at the top level rather than asserting.\n    const parsed = parser.parse(expression, undefined, undefined, undefined,\n        propertySpec && propertySpec.type === 'string' ? {typeAnnotation: 'coerce'} : undefined);\n\n    if (!parsed) {\n        assert(parser.errors.length > 0);\n        return error(parser.errors);\n    }\n\n    return success(new StyleExpression(parsed, propertySpec, scope, options, iconImageUseTheme));\n}\n\nexport class ZoomConstantExpression<Kind extends EvaluationKind> {\n    kind: Kind;\n    isStateDependent: boolean;\n    configDependencies: Set<string>;\n    isIndoorDependent: boolean;\n    _styleExpression: StyleExpression;\n    isLightConstant: boolean | null | undefined;\n    isLineProgressConstant: boolean | null | undefined;\n\n    constructor(kind: Kind, expression: StyleExpression, isLightConstant?: boolean | null, isLineProgressConstant?: boolean | null) {\n        this.kind = kind;\n        this._styleExpression = expression;\n        this.isLightConstant = isLightConstant;\n        this.isLineProgressConstant = isLineProgressConstant;\n        this.isStateDependent = kind !== ('constant' as EvaluationKind) && !isConstant.isStateConstant(expression.expression);\n        this.configDependencies = expressionDependencies.getConfigDependencies(expression.expression);\n        this.isIndoorDependent = expressionDependencies.isIndoorDependent(expression.expression);\n    }\n\n    evaluateWithoutErrorHandling(\n        globals: GlobalProperties,\n        feature?: Feature,\n        featureState?: FeatureState,\n        canonical?: CanonicalTileID,\n        availableImages?: ImageId[],\n        formattedSection?: FormattedSection,\n    // eslint-disable-next-line @typescript-eslint/no-explicit-any\n    ): any {\n        return this._styleExpression.evaluateWithoutErrorHandling(globals, feature, featureState, canonical, availableImages, formattedSection);\n    }\n\n    evaluate(\n        globals: GlobalProperties,\n        feature?: Feature,\n        featureState?: FeatureState,\n        canonical?: CanonicalTileID,\n        availableImages?: ImageId[],\n        formattedSection?: FormattedSection,\n        iconImageUseTheme?: string\n    // eslint-disable-next-line @typescript-eslint/no-explicit-any\n    ): any {\n        return this._styleExpression.evaluate(globals, feature, featureState, canonical, availableImages, formattedSection, undefined, undefined, iconImageUseTheme);\n    }\n}\n\nexport class ZoomDependentExpression<Kind extends EvaluationKind> {\n    kind: Kind;\n    zoomStops: Array<number>;\n    isStateDependent: boolean;\n    isIndoorDependent: boolean;\n    isLightConstant: boolean | null | undefined;\n    isLineProgressConstant: boolean | null | undefined;\n    configDependencies: Set<string>;\n\n    _styleExpression: StyleExpression;\n    interpolationType: InterpolationType | null | undefined;\n\n    constructor(kind: Kind, expression: StyleExpression, zoomStops: Array<number>, interpolationType?: InterpolationType, isLightConstant?: boolean | null, isLineProgressConstant?: boolean | null) {\n        this.kind = kind;\n        this.zoomStops = zoomStops;\n        this._styleExpression = expression;\n        this.isStateDependent = kind !== ('camera' as EvaluationKind) && !isConstant.isStateConstant(expression.expression);\n        this.isIndoorDependent = expressionDependencies.isIndoorDependent(expression.expression);\n        this.isLightConstant = isLightConstant;\n        this.isLineProgressConstant = isLineProgressConstant;\n        this.configDependencies = expressionDependencies.getConfigDependencies(expression.expression);\n        this.interpolationType = interpolationType;\n    }\n\n    evaluateWithoutErrorHandling(\n        globals: GlobalProperties,\n        feature?: Feature,\n        featureState?: FeatureState,\n        canonical?: CanonicalTileID,\n        availableImages?: ImageId[],\n        formattedSection?: FormattedSection,\n    // eslint-disable-next-line @typescript-eslint/no-explicit-any\n    ): any {\n        return this._styleExpression.evaluateWithoutErrorHandling(globals, feature, featureState, canonical, availableImages, formattedSection);\n    }\n\n    evaluate(\n        globals: GlobalProperties,\n        feature?: Feature,\n        featureState?: FeatureState,\n        canonical?: CanonicalTileID,\n        availableImages?: ImageId[],\n        formattedSection?: FormattedSection,\n    // eslint-disable-next-line @typescript-eslint/no-explicit-any\n    ): any {\n        return this._styleExpression.evaluate(globals, feature, featureState, canonical, availableImages, formattedSection);\n    }\n\n    interpolationFactor(input: number, lower: number, upper: number): number {\n        if (this.interpolationType) {\n            return Interpolate.interpolationFactor(this.interpolationType, input, lower, upper);\n        } else {\n            return 0;\n        }\n    }\n}\n\nexport type ConstantExpression = {\n    kind: 'constant';\n    configDependencies: Set<string>;\n    isIndoorDependent: boolean;\n    readonly evaluate: <T = unknown>(\n        globals: GlobalProperties,\n        feature?: Feature,\n        featureState?: FeatureState,\n        canonical?: CanonicalTileID,\n        availableImages?: ImageId[],\n        formattedSection?: FormattedSection,\n        iconImageUseTheme?: string\n    ) => T;\n};\n\nexport type SourceExpression = {\n    kind: 'source';\n    isStateDependent: boolean;\n    isIndoorDependent: boolean;\n    isLightConstant: boolean | null | undefined;\n    isLineProgressConstant: boolean | null | undefined;\n    configDependencies: Set<string>;\n    readonly evaluate: <T = unknown>(\n        globals: GlobalProperties,\n        feature?: Feature,\n        featureState?: FeatureState,\n        canonical?: CanonicalTileID,\n        availableImages?: ImageId[],\n        formattedSection?: FormattedSection,\n    ) => T;\n};\n\nexport type CameraExpression = {\n    kind: 'camera';\n    isStateDependent: boolean;\n    isIndoorDependent: boolean;\n    configDependencies: Set<string>;\n    readonly evaluate: <T = unknown>(\n        globals: GlobalProperties,\n        feature?: Feature,\n        featureState?: FeatureState,\n        canonical?: CanonicalTileID,\n        availableImages?: ImageId[],\n    ) => T;\n    readonly interpolationFactor: (input: number, lower: number, upper: number) => number;\n    zoomStops: Array<number>;\n    interpolationType: InterpolationType | null | undefined;\n};\n\nexport interface CompositeExpression {\n    kind: 'composite';\n    isStateDependent: boolean;\n    isIndoorDependent: boolean;\n    isLightConstant: boolean | null | undefined;\n    isLineProgressConstant: boolean | null | undefined;\n    configDependencies: Set<string>;\n    readonly evaluate: <T = unknown>(\n        globals: GlobalProperties,\n        feature?: Feature,\n        featureState?: FeatureState,\n        canonical?: CanonicalTileID,\n        availableImages?: ImageId[],\n        formattedSection?: FormattedSection,\n        iconImageUseTheme?: string\n    ) => T;\n    readonly interpolationFactor: (input: number, lower: number, upper: number) => number;\n    zoomStops: Array<number>;\n    interpolationType: InterpolationType | null | undefined;\n}\n\nexport type StylePropertyExpression = ConstantExpression | SourceExpression | CameraExpression | CompositeExpression;\n\nexport function createPropertyExpression(\n    // eslint-disable-next-line @typescript-eslint/no-explicit-any\n    expression: any,\n    propertySpec: StylePropertySpecification,\n    scope?: string | null,\n    options?: ConfigOptions | null,\n    iconImageUseTheme?: string | null\n): Result<StylePropertyExpression, Array<ParsingError>> {\n    expression = createExpression(expression, propertySpec, scope, options, iconImageUseTheme);\n    // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n    if (expression.result === 'error') {\n        return expression as Result<StylePropertyExpression, Array<ParsingError>>;\n    }\n\n    // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-unsafe-member-access\n    const parsed = expression.value.expression;\n\n    // eslint-disable-next-line @typescript-eslint/no-unsafe-argument\n    const isFeatureConstant = isConstant.isFeatureConstant(parsed);\n    if (!isFeatureConstant && !supportsPropertyExpression(propertySpec)) {\n        return error([new ParsingError('', 'data expressions not supported')]);\n    }\n\n    // eslint-disable-next-line @typescript-eslint/no-unsafe-argument\n    const isZoomConstant = isConstant.isGlobalPropertyConstant(parsed, ['zoom', 'pitch', 'distance-from-center']);\n    if (!isZoomConstant && !supportsZoomExpression(propertySpec)) {\n        return error([new ParsingError('', 'zoom expressions not supported')]);\n    }\n\n    // eslint-disable-next-line @typescript-eslint/no-unsafe-argument\n    const isLightConstant = isConstant.isGlobalPropertyConstant(parsed, ['measure-light']);\n    if (!isLightConstant && !supportsLightExpression(propertySpec)) {\n        return error([new ParsingError('', 'measure-light expression not supported')]);\n    }\n\n    // eslint-disable-next-line @typescript-eslint/no-unsafe-argument\n    const isLineProgressConstant = isConstant.isGlobalPropertyConstant(parsed, ['line-progress']);\n    if (!isLineProgressConstant && !supportsLineProgressExpression(propertySpec)) {\n        return error([new ParsingError('', 'line-progress expression not supported')]);\n    }\n\n    const canRelaxZoomRestriction = propertySpec.expression && propertySpec.expression.relaxZoomRestriction;\n    // eslint-disable-next-line @typescript-eslint/no-unsafe-argument\n    const zoomCurve = findZoomCurve(parsed);\n    if (!zoomCurve && !isZoomConstant && !canRelaxZoomRestriction) {\n        return error([new ParsingError('', '\"zoom\" expression may only be used as input to a top-level \"step\" or \"interpolate\" expression, or in the properties of atmosphere.')]);\n    } else if (zoomCurve instanceof ParsingError) {\n        return error([zoomCurve]);\n    } else if (zoomCurve instanceof Interpolate && !supportsInterpolation(propertySpec)) {\n        return error([new ParsingError('', '\"interpolate\" expressions cannot be used with this property')]);\n    }\n\n    if (!zoomCurve) {\n        return success((isFeatureConstant && isLineProgressConstant) ?\n            // eslint-disable-next-line @typescript-eslint/no-unsafe-argument, @typescript-eslint/no-unsafe-member-access\n            (new ZoomConstantExpression('constant', expression.value, isLightConstant, isLineProgressConstant) as ConstantExpression) :\n            // eslint-disable-next-line @typescript-eslint/no-unsafe-argument, @typescript-eslint/no-unsafe-member-access\n            (new ZoomConstantExpression('source', expression.value, isLightConstant, isLineProgressConstant) as SourceExpression));\n    }\n\n    const interpolationType = zoomCurve instanceof Interpolate ? zoomCurve.interpolation : undefined;\n\n    return success((isFeatureConstant && isLineProgressConstant) ?\n        // eslint-disable-next-line @typescript-eslint/no-unsafe-argument, @typescript-eslint/no-unsafe-member-access\n        (new ZoomDependentExpression('camera', expression.value, zoomCurve.labels, interpolationType, isLightConstant, isLineProgressConstant) as CameraExpression) :\n        // eslint-disable-next-line @typescript-eslint/no-unsafe-argument, @typescript-eslint/no-unsafe-member-access\n        (new ZoomDependentExpression('composite', expression.value, zoomCurve.labels, interpolationType, isLightConstant, isLineProgressConstant) as CompositeExpression));\n}\n\n// serialization wrapper for old-style stop functions normalized to the\n// expression interface\nexport class StylePropertyFunction<T> {\n    _parameters: PropertyValueSpecification<T>;\n    _specification: StylePropertySpecification;\n\n    kind: EvaluationKind;\n    evaluate: <T = unknown>(globals: GlobalProperties, feature?: Feature) => T;\n    interpolationFactor: (input: number, lower: number, upper: number) => number | null | undefined;\n    zoomStops: Array<number> | null | undefined;\n\n    constructor(parameters: PropertyValueSpecification<T>, specification: StylePropertySpecification) {\n        this._parameters = parameters;\n        this._specification = specification;\n        Object.assign(this, createFunction(this._parameters, this._specification));\n    }\n\n    static deserialize<T>(\n        serialized: {\n            _parameters: PropertyValueSpecification<T>;\n            _specification: StylePropertySpecification;\n        },\n    ): StylePropertyFunction<T> {\n        return new StylePropertyFunction(serialized._parameters, serialized._specification);\n    }\n\n    static serialize<T>(input: StylePropertyFunction<T>): {\n        _parameters: PropertyValueSpecification<T>;\n        _specification: StylePropertySpecification;\n    } {\n        return {\n            _parameters: input._parameters,\n            _specification: input._specification\n        };\n    }\n}\n\nexport function normalizePropertyExpression<T>(\n    value: PropertyValueSpecification<T>,\n    specification: StylePropertySpecification,\n    scope?: string | null,\n    options?: ConfigOptions | null,\n    iconImageUseTheme?: string | null\n): StylePropertyExpression {\n    if (isFunction(value)) {\n        return new StylePropertyFunction(value, specification) as unknown as StylePropertyExpression;\n\n    } else if (isExpression(value) || (Array.isArray(value) && value.length > 0)) {\n        const expression = createPropertyExpression(value, specification, scope, options, iconImageUseTheme);\n        if (expression.result === 'error') {\n            // this should have been caught in validation\n            throw new Error(expression.value.map(err => `${err.key}: ${err.message}`).join(', '));\n        }\n        return expression.value;\n\n    } else {\n        let constant = value;\n        if (typeof value === 'string' && specification.type === 'color') {\n            constant = Color.parse(value) as PropertyValueSpecification<T>;\n        }\n        return {\n            kind: 'constant',\n            configDependencies: new Set(),\n            isIndoorDependent: false,\n            evaluate: () => constant\n        } as ConstantExpression;\n    }\n}\n\n// Zoom-dependent expressions may only use [\"zoom\"] as the input to a top-level \"step\" or \"interpolate\"\n// expression (collectively referred to as a \"curve\"). The curve may be wrapped in one or more \"let\" or\n// \"coalesce\" expressions.\nfunction findZoomCurve(expression: Expression): Step | Interpolate | ParsingError | null {\n    let result: Step | Interpolate | ParsingError | null = null;\n    if (expression instanceof Let) {\n        result = findZoomCurve(expression.result);\n\n    } else if (expression instanceof Coalesce) {\n        for (const arg of expression.args) {\n            result = findZoomCurve(arg);\n            if (result) {\n                break;\n            }\n        }\n\n    } else if ((expression instanceof Step || expression instanceof Interpolate) &&\n        expression.input instanceof CompoundExpression &&\n        expression.input.name === 'zoom') {\n\n        result = expression;\n    }\n\n    if (result instanceof ParsingError) {\n        return result;\n    }\n\n    expression.eachChild((child) => {\n        const childResult = findZoomCurve(child);\n        if (childResult instanceof ParsingError) {\n            result = childResult;\n        } else if (result && childResult && result !== childResult) {\n            result = new ParsingError('', 'Only one zoom-based \"step\" or \"interpolate\" subexpression may be used in an expression.');\n        }\n    });\n\n    return result;\n}\n\nfunction getExpectedType(spec: StylePropertySpecification): Type {\n    const types = {\n        color: ColorType,\n        string: StringType,\n        number: NumberType,\n        enum: StringType,\n        boolean: BooleanType,\n        formatted: FormattedType,\n        resolvedImage: ResolvedImageType\n    };\n\n    if (spec.type === 'array') {\n        return array(types[spec.value] || ValueType, spec.length);\n    }\n\n    return types[spec.type];\n}\n\nfunction getDefaultValue(spec: StylePropertySpecification): Value {\n    if (spec.type === 'color' && (isFunction(spec.default) || Array.isArray(spec.default))) {\n        // Special case for heatmap-color: it uses the 'default:' to define a\n        // default color ramp, but createExpression expects a simple value to fall\n        // back to in case of runtime errors\n        return new Color(0, 0, 0, 0);\n    } else if (spec.type === 'color') {\n        return Color.parse(spec.default) || null;\n    } else if (spec.default === undefined) {\n        return null;\n    } else {\n        return spec.default;\n    }\n}\n","import assert from '../util/assert';\n\nimport type {StylePropertySpecification} from '../style-spec';\nimport type {\n    FunctionSpecification,\n    PropertyFunctionStop,\n    ZoomAndPropertyFunctionStop,\n    ExpressionSpecification,\n} from '../types';\n\nfunction convertLiteral(value: unknown) {\n    return typeof value === 'object' ? ['literal', value] : value;\n}\n\nexport default function convertFunction<T>(parameters: FunctionSpecification<T>, propertySpec: StylePropertySpecification): ExpressionSpecification {\n    let stops = parameters.stops;\n    if (!stops) {\n        // identity function\n        return convertIdentityFunction(parameters, propertySpec);\n    }\n\n    const zoomAndFeatureDependent = stops && typeof stops[0][0] === 'object';\n    const featureDependent = zoomAndFeatureDependent || parameters.property !== undefined;\n    const zoomDependent = zoomAndFeatureDependent || !featureDependent;\n\n    stops = stops.map((stop) => {\n        if (!featureDependent && propertySpec.tokens && typeof stop[1] === 'string') {\n            return [stop[0], convertTokenString(stop[1])];\n        }\n        return [stop[0], convertLiteral(stop[1])];\n    }) as FunctionSpecification<T>['stops'];\n\n    if (zoomAndFeatureDependent) {\n        return convertZoomAndPropertyFunction(parameters, propertySpec, stops as Array<ZoomAndPropertyFunctionStop<T>>);\n    } else if (zoomDependent) {\n\n        return convertZoomFunction(parameters, propertySpec, stops as PropertyFunctionStop<T>[]);\n    } else {\n        return convertPropertyFunction(parameters, propertySpec, stops as PropertyFunctionStop<T>[]);\n    }\n}\n\nfunction convertIdentityFunction<T>(parameters: FunctionSpecification<T>, propertySpec: StylePropertySpecification): ExpressionSpecification {\n    const get: ExpressionSpecification = ['get', parameters.property];\n\n    if (parameters.default === undefined) {\n        // By default, expressions for string-valued properties get coerced. To preserve\n        // legacy function semantics, insert an explicit assertion instead.\n        return propertySpec.type === 'string' ? ['string', get] : get;\n    } else if (propertySpec.type === 'enum') {\n        return [\n            'match',\n            get,\n            Object.keys(propertySpec.values),\n            get,\n            parameters.default\n        ];\n    } else {\n        const expression: ExpressionSpecification = [propertySpec.type === 'color' ? 'to-color' : propertySpec.type, get, convertLiteral(parameters.default)];\n        if (propertySpec.type === 'array') {\n            expression.splice(1, 0, propertySpec.value, propertySpec.length || null);\n        }\n        return expression;\n    }\n}\n\nfunction getInterpolateOperator<T>(parameters: FunctionSpecification<T>) {\n    switch (parameters.colorSpace) {\n    case 'hcl': return 'interpolate-hcl';\n    case 'lab': return 'interpolate-lab';\n    default: return 'interpolate';\n    }\n}\n\nfunction convertZoomAndPropertyFunction<T>(\n    parameters: FunctionSpecification<T>,\n    propertySpec: StylePropertySpecification,\n    stops: Array<ZoomAndPropertyFunctionStop<T>>,\n): ExpressionSpecification {\n    // eslint-disable-next-line @typescript-eslint/no-explicit-any\n    const featureFunctionParameters: Record<string, any> = {};\n    // eslint-disable-next-line @typescript-eslint/no-explicit-any\n    const featureFunctionStops: Record<string, any> = {};\n    const zoomStops = [];\n    for (let s = 0; s < stops.length; s++) {\n        const stop = stops[s];\n        const zoom = stop[0].zoom;\n        if (featureFunctionParameters[zoom] === undefined) {\n            featureFunctionParameters[zoom] = {\n                zoom,\n                type: parameters.type,\n                property: parameters.property,\n                default: parameters.default,\n            };\n            featureFunctionStops[zoom] = [];\n            zoomStops.push(zoom);\n        }\n        // eslint-disable-next-line @typescript-eslint/no-unsafe-call, @typescript-eslint/no-unsafe-member-access\n        featureFunctionStops[zoom].push([stop[0].value, stop[1]]);\n    }\n\n    // the interpolation type for the zoom dimension of a zoom-and-property\n    // function is determined directly from the style property specification\n    // for which it's being used: linear for interpolatable properties, step\n    // otherwise.\n    const functionType = getFunctionType({} as FunctionSpecification<unknown>, propertySpec);\n    if (functionType === 'exponential') {\n        const expression: ExpressionSpecification = [getInterpolateOperator(parameters), ['linear'], ['zoom']];\n\n        for (const z of zoomStops) {\n            // eslint-disable-next-line @typescript-eslint/no-unsafe-argument, @typescript-eslint/no-unsafe-member-access\n            const output = convertPropertyFunction(featureFunctionParameters[z], propertySpec, featureFunctionStops[z]);\n            appendStopPair(expression, z, output, false);\n        }\n\n        return expression;\n    } else {\n        const expression: ExpressionSpecification = ['step', ['zoom']];\n\n        for (const z of zoomStops) {\n            // eslint-disable-next-line @typescript-eslint/no-unsafe-argument, @typescript-eslint/no-unsafe-member-access\n            const output = convertPropertyFunction(featureFunctionParameters[z], propertySpec, featureFunctionStops[z]);\n            appendStopPair(expression, z, output, true);\n        }\n\n        fixupDegenerateStepCurve(expression);\n\n        return expression;\n    }\n}\n\nfunction coalesce(a: unknown, b: unknown) {\n    if (a !== undefined) return a;\n    if (b !== undefined) return b;\n}\n\nfunction getFallback<T>(parameters: FunctionSpecification<T>, propertySpec: StylePropertySpecification) {\n    const defaultValue = convertLiteral(coalesce(parameters.default, propertySpec.default));\n\n    /*\n     * Some fields with type: resolvedImage have an undefined default.\n     * Because undefined is an invalid value for resolvedImage, set fallback to\n     * an empty string instead of undefined to ensure output\n     * passes validation.\n     */\n    if (defaultValue === undefined && propertySpec.type === 'resolvedImage') {\n        return '';\n    }\n    return defaultValue;\n}\n\nfunction convertPropertyFunction<T>(\n    parameters: FunctionSpecification<T>,\n    propertySpec: StylePropertySpecification,\n    stops: Array<PropertyFunctionStop<T>>,\n): ExpressionSpecification {\n    const type = getFunctionType(parameters, propertySpec);\n    const get: ExpressionSpecification = ['get', parameters.property];\n    if (type === 'categorical' && typeof stops[0][0] === 'boolean') {\n        assert(parameters.stops.length > 0 && parameters.stops.length <= 2);\n        const expression: ExpressionSpecification = ['case'];\n        for (const stop of stops) {\n            expression.push(['==', get, stop[0]], stop[1]);\n        }\n\n        expression.push(getFallback(parameters, propertySpec));\n        return expression;\n    } else if (type === 'categorical') {\n        const expression: ExpressionSpecification = ['match', get];\n        for (const stop of stops) {\n            appendStopPair(expression, stop[0], stop[1], false);\n        }\n        expression.push(getFallback(parameters, propertySpec));\n        return expression;\n    } else if (type === 'interval') {\n        const expression: ExpressionSpecification = ['step', ['number', get]];\n        for (const stop of stops) {\n            appendStopPair(expression, stop[0], stop[1], true);\n        }\n        fixupDegenerateStepCurve(expression);\n        return parameters.default === undefined ? expression : [\n            'case',\n            ['==', ['typeof', get], 'number'],\n            expression,\n            convertLiteral(parameters.default)\n        ];\n    } else if (type === 'exponential') {\n        const base = parameters.base !== undefined ? parameters.base : 1;\n        const expression: ExpressionSpecification = [\n            getInterpolateOperator(parameters),\n            base === 1 ? [\"linear\"] : [\"exponential\", base],\n            [\"number\", get]\n        ];\n\n        for (const stop of stops) {\n            appendStopPair(expression, stop[0], stop[1], false);\n        }\n        return parameters.default === undefined ? expression : [\n            'case',\n            ['==', ['typeof', get], 'number'],\n            expression,\n            convertLiteral(parameters.default)\n        ];\n    } else {\n        throw new Error(`Unknown property function type ${type}`);\n    }\n}\n\nfunction convertZoomFunction<T>(parameters: FunctionSpecification<T>, propertySpec: StylePropertySpecification, stops: Array<PropertyFunctionStop<T>>, input: Array<string> = ['zoom']): ExpressionSpecification {\n    const type = getFunctionType(parameters, propertySpec);\n    let expression: ExpressionSpecification;\n    let isStep = false;\n    if (type === 'interval') {\n        expression = ['step', input];\n        isStep = true;\n    } else if (type === 'exponential') {\n        const base = parameters.base !== undefined ? parameters.base : 1;\n        expression = [getInterpolateOperator(parameters), base === 1 ? [\"linear\"] : [\"exponential\", base], input];\n\n    } else {\n        throw new Error(`Unknown zoom function type \"${type}\"`);\n    }\n\n    for (const stop of stops) {\n        appendStopPair(expression, stop[0], stop[1], isStep);\n    }\n\n    fixupDegenerateStepCurve(expression);\n\n    return expression;\n}\n\nfunction fixupDegenerateStepCurve(expression: ExpressionSpecification) {\n    // degenerate step curve (i.e. a constant function): add a noop stop\n    if (expression[0] === 'step' && expression.length === 3) {\n        expression.push(0);\n        expression.push(expression[3]);\n    }\n}\n\nfunction appendStopPair(curve: ExpressionSpecification, input: unknown, output: unknown, isStep: boolean) {\n    // Skip duplicate stop values. They were not validated for functions, but they are for expressions.\n    // https://github.com/mapbox/mapbox-gl-js/issues/4107\n    if (curve.length > 3 && input === curve[curve.length - 2]) {\n        return;\n    }\n    // step curves don't get the first input value, as it is redundant.\n    if (!(isStep && curve.length === 2)) {\n        curve.push(input);\n    }\n    curve.push(output);\n}\n\nfunction getFunctionType<T>(parameters: FunctionSpecification<T>, propertySpec: StylePropertySpecification): string {\n    if (parameters.type) {\n        return parameters.type;\n    } else {\n        assert(propertySpec.expression);\n        return propertySpec.expression.interpolated ? 'exponential' : 'interval';\n    }\n}\n\n// \"String with {name} token\" => [\"concat\", \"String with \", [\"get\", \"name\"], \" token\"]\nexport function convertTokenString(s: string): string | ExpressionSpecification {\n    const result: ExpressionSpecification = ['concat'];\n    const re = /{([^{}]+)}/g;\n    let pos = 0;\n    for (let match = re.exec(s); match !== null; match = re.exec(s)) {\n        const literal = s.slice(pos, re.lastIndex - match[0].length);\n        pos = re.lastIndex;\n        if (literal.length > 0) result.push(literal);\n        result.push(['get', match[1]]);\n    }\n\n    if (result.length === 1) {\n        return s;\n    }\n\n    if (pos < s.length) {\n        result.push(s.slice(pos));\n    } else if (result.length === 2) {\n        return ['to-string', result[1]];\n    }\n\n    return result;\n}\n\n","// Turn jsonlint-lines-primitives objects into primitive objects\nexport function unbundle(value: unknown): unknown {\n    if (value instanceof Number || value instanceof String || value instanceof Boolean) {\n        return value.valueOf();\n    } else {\n        return value;\n    }\n}\n\nexport function deepUnbundle(value: unknown): unknown {\n    if (Array.isArray(value)) {\n        return value.map(deepUnbundle);\n    } else if (value instanceof Object && !(value instanceof Number || value instanceof String || value instanceof Boolean)) {\n        const unbundledValue: {\n            [key: string]: unknown;\n        } = {};\n        const valueRec = value as Record<string, unknown>;\n        for (const key in valueRec) {\n            unbundledValue[key] = deepUnbundle(valueRec[key]);\n        }\n        return unbundledValue;\n    }\n\n    return unbundle(value);\n}\n","import latest from '../reference/latest';\nimport {deepUnbundle} from '../util/unbundle_jsonlint';\nimport {createExpression} from '../expression/index';\nimport {isFeatureConstant} from '../expression/is_constant';\nimport assert from '../util/assert';\n\nimport type Point from '@mapbox/point-geometry';\nimport type {CanonicalTileID} from '../types/tile_id';\nimport type {GlobalProperties, Feature} from '../expression/index';\nimport type {FilterSpecification, ExpressionSpecification} from '../types';\nimport type {ConfigOptions} from '../types/config_options';\n\nexport type FeatureDistanceData = {\n    bearing: [number, number];\n    center: [number, number];\n    scale: number;\n};\nexport type FilterExpression = (\n    globalProperties: GlobalProperties,\n    feature: Feature,\n    canonical?: CanonicalTileID,\n    featureTileCoord?: Point,\n    featureDistanceData?: FeatureDistanceData,\n) => boolean;\n\nexport type FeatureFilter = {\n    filter: FilterExpression;\n    dynamicFilter?: FilterExpression;\n    needGeometry: boolean;\n    needFeature: boolean;\n};\n\nexport default createFilter;\nexport {isExpressionFilter, isDynamicFilter, extractStaticFilter};\n\nfunction isExpressionFilter(filter: unknown): boolean {\n    if (filter === true || filter === false) {\n        return true;\n    }\n\n    if (!Array.isArray(filter) || filter.length === 0) {\n        return false;\n    }\n    switch (filter[0]) {\n    case 'has':\n        return filter.length >= 2 && filter[1] !== '$id' && filter[1] !== '$type';\n\n    case 'in':\n        return filter.length >= 3 && (typeof filter[1] !== 'string' || Array.isArray(filter[2]));\n\n    case '!in':\n    case '!has':\n    case 'none':\n        return false;\n\n    case '==':\n    case '!=':\n    case '>':\n    case '>=':\n    case '<':\n    case '<=':\n        return filter.length !== 3 || (Array.isArray(filter[1]) || Array.isArray(filter[2]));\n\n    case 'any':\n    case 'all':\n        for (const f of filter.slice(1)) {\n            if (!isExpressionFilter(f) && typeof f !== 'boolean') {\n                return false;\n            }\n        }\n        return true;\n\n    default:\n        return true;\n    }\n}\n\n/**\n * Given a filter expressed as nested arrays, return a new function\n * that evaluates whether a given feature (with a .properties or .tags property)\n * passes its test.\n *\n * @private\n * @param {Array} filter mapbox gl filter\n * @param {string} layerType the type of the layer this filter will be applied to.\n * @returns {Function} filter-evaluating function\n */\nfunction createFilter(filter?: FilterSpecification, scope: string = \"\", options: ConfigOptions | null = null, layerType: string = 'fill'): FeatureFilter {\n    if (filter === null || filter === undefined) {\n        return {filter: () => true, needGeometry: false, needFeature: false};\n    }\n\n    if (!isExpressionFilter(filter)) {\n        filter = convertFilter(filter) as ExpressionSpecification;\n    }\n\n    const filterExp = (filter as string[] | string | boolean);\n\n    let staticFilter = true;\n    try {\n        // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\n        staticFilter = extractStaticFilter(filterExp);\n    } catch (e) {\n        console.warn(\n`Failed to extract static filter. Filter will continue working, but at higher memory usage and slower framerate.\nThis is most likely a bug, please report this via https://github.com/mapbox/mapbox-gl-js/issues/new?assignees=&labels=&template=Bug_report.md\nand paste the contents of this message in the report.\nThank you!\nFilter Expression:\n${JSON.stringify(filterExp, null, 2)}\n        `);\n    }\n\n    // Compile the static component of the filter\n    let filterFunc = null;\n    let filterSpec = null;\n    if (layerType !== 'background' && layerType !== 'sky' && layerType !== 'slot') {\n        // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\n        filterSpec = latest[`filter_${layerType}`];\n        assert(filterSpec);\n        // eslint-disable-next-line @typescript-eslint/no-unsafe-argument\n        const compiledStaticFilter = createExpression(staticFilter, filterSpec, scope, options);\n\n        if (compiledStaticFilter.result === 'error') {\n            throw new Error(compiledStaticFilter.value.map(err => `${err.key}: ${err.message}`).join(', '));\n        } else {\n            // eslint-disable-next-line @typescript-eslint/no-unsafe-return\n            filterFunc = (globalProperties: GlobalProperties, feature: Feature, canonical?: CanonicalTileID) => compiledStaticFilter.value.evaluate(globalProperties, feature, {}, canonical);\n        }\n    }\n\n    // If the static component is not equal to the entire filter then we have a dynamic component\n    // Compile the dynamic component separately\n    let dynamicFilterFunc = null;\n    let needFeature = null;\n    if (staticFilter !== filterExp) {\n        // eslint-disable-next-line @typescript-eslint/no-unsafe-argument\n        const compiledDynamicFilter = createExpression(filterExp, filterSpec, scope, options);\n\n        if (compiledDynamicFilter.result === 'error') {\n            throw new Error(compiledDynamicFilter.value.map(err => `${err.key}: ${err.message}`).join(', '));\n        } else {\n            // eslint-disable-next-line @typescript-eslint/no-unsafe-return\n            dynamicFilterFunc = (globalProperties: GlobalProperties, feature: Feature, canonical?: CanonicalTileID, featureTileCoord?: Point, featureDistanceData?: FeatureDistanceData) => compiledDynamicFilter.value.evaluate(globalProperties, feature, {}, canonical, undefined, undefined, featureTileCoord, featureDistanceData);\n            needFeature = !isFeatureConstant(compiledDynamicFilter.value.expression);\n        }\n    }\n\n    filterFunc = (filterFunc as FilterExpression);\n    const needGeometry = geometryNeeded(staticFilter);\n\n    return {\n        // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\n        filter: filterFunc,\n        // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\n        dynamicFilter: dynamicFilterFunc ? dynamicFilterFunc : undefined,\n        needGeometry,\n        needFeature: !!needFeature\n    };\n}\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nfunction extractStaticFilter(filter: unknown | unknown[]): any {\n    if (!isDynamicFilter(filter)) {\n        return filter;\n    }\n\n    // Shallow copy so we can replace expressions in-place\n    let result = deepUnbundle(filter);\n\n    // 1. Union branches\n    unionDynamicBranches(result as unknown[]);\n\n    // 2. Collapse dynamic conditions to  `true`\n    result = collapseDynamicBooleanExpressions(result);\n\n    return result;\n}\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nfunction collapseDynamicBooleanExpressions(expression: any): any {\n    if (!Array.isArray(expression)) {\n        return expression;\n    }\n\n    // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\n    const collapsed = collapsedExpression(expression);\n    if (collapsed === true) {\n        return collapsed;\n    } else {\n        // eslint-disable-next-line @typescript-eslint/no-unsafe-return, @typescript-eslint/no-unsafe-call, @typescript-eslint/no-unsafe-member-access\n        return collapsed.map((subExpression) => collapseDynamicBooleanExpressions(subExpression));\n    }\n}\n\n/**\n * Traverses the expression and replaces all instances of branching on a\n * `dynamic` conditional (such as `['pitch']` or `['distance-from-center']`)\n * into an `any` expression.\n * This ensures that all possible outcomes of a `dynamic` branch are considered\n * when evaluating the expression upfront during filtering.\n *\n * @param {Array<any>} filter the filter expression mutated in-place.\n */\nfunction unionDynamicBranches(filter: unknown[]) {\n    let isBranchingDynamically = false;\n    const branches: unknown[] = [];\n    if (filter[0] === 'case') {\n        for (let i = 1; i < filter.length - 1; i += 2) {\n            isBranchingDynamically = isBranchingDynamically || isDynamicFilter(filter[i]);\n            branches.push(filter[i + 1]);\n        }\n        branches.push(filter.at(-1));\n    } else if (filter[0] === 'match') {\n        isBranchingDynamically = isBranchingDynamically || isDynamicFilter(filter[1]);\n        for (let i = 2; i < filter.length - 1; i += 2) {\n            branches.push(filter[i + 1]);\n        }\n        branches.push(filter.at(-1));\n    } else if (filter[0] === 'step') {\n        isBranchingDynamically = isBranchingDynamically || isDynamicFilter(filter[1]);\n        for (let i = 1; i < filter.length - 1; i += 2) {\n            branches.push(filter[i + 1]);\n        }\n    }\n\n    if (isBranchingDynamically) {\n        filter.length = 0;\n        filter.push('any', ...branches);\n    }\n\n    // traverse and recurse into children\n    for (let i = 1; i < filter.length; i++) {\n        unionDynamicBranches(filter[i] as unknown[]);\n    }\n}\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nfunction isDynamicFilter(filter: any): boolean {\n    // Base Cases\n    if (!Array.isArray(filter)) {\n        return false;\n    }\n    // eslint-disable-next-line @typescript-eslint/no-unsafe-argument\n    if (isRootExpressionDynamic(filter[0])) {\n        return true;\n    }\n\n    for (let i = 1; i < filter.length; i++) {\n        // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\n        const child = filter[i];\n        if (isDynamicFilter(child)) {\n            return true;\n        }\n    }\n\n    return false;\n}\n\nfunction isRootExpressionDynamic(expression: string): boolean {\n    return expression === 'pitch' ||\n        expression === 'distance-from-center';\n}\n\nconst dynamicConditionExpressions = new Set([\n    'in',\n    '==',\n    '!=',\n    '>',\n    '>=',\n    '<',\n    '<=',\n    'to-boolean'\n]);\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nfunction collapsedExpression(expression: any): any {\n    // eslint-disable-next-line @typescript-eslint/no-unsafe-argument, @typescript-eslint/no-unsafe-member-access\n    if (dynamicConditionExpressions.has(expression[0])) {\n\n        // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n        for (let i = 1; i < expression.length; i++) {\n            // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-unsafe-member-access\n            const param = expression[i];\n            if (isDynamicFilter(param)) {\n                return true;\n            }\n        }\n    }\n    return expression;\n}\n\n// Comparison function to sort numbers and strings\nfunction compare(a: number, b: number) {\n    return a < b ? -1 : a > b ? 1 : 0;\n}\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nfunction geometryNeeded(filter: Array<any> | boolean) {\n    if (!Array.isArray(filter)) return false;\n    if (filter[0] === 'within' || filter[0] === 'distance') return true;\n    for (let index = 1; index < filter.length; index++) {\n        // eslint-disable-next-line @typescript-eslint/no-unsafe-argument\n        if (geometryNeeded(filter[index])) return true;\n    }\n    return false;\n}\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nfunction convertFilter(filter?: Array<any> | null): unknown {\n    if (!filter) return true;\n    // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\n    const op = filter[0];\n    if (filter.length <= 1) return (op !== 'any');\n    const converted =\n        // eslint-disable-next-line @typescript-eslint/no-unsafe-argument\n        op === '==' ? convertComparisonOp(filter[1], filter[2], '==') :\n        // eslint-disable-next-line @typescript-eslint/no-unsafe-argument\n        op === '!=' ? convertNegation(convertComparisonOp(filter[1], filter[2], '==')) :\n        op === '<' ||\n        op === '>' ||\n        op === '<=' ||\n        // eslint-disable-next-line @typescript-eslint/no-unsafe-argument\n        op === '>=' ? convertComparisonOp(filter[1], filter[2], op) :\n        // eslint-disable-next-line @typescript-eslint/no-unsafe-argument\n        op === 'any' ? convertDisjunctionOp(filter.slice(1)) :\n        op === 'all' ? (['all'] as unknown[]).concat(filter.slice(1).map(convertFilter)) :\n        op === 'none' ? (['all'] as unknown[]).concat(filter.slice(1).map(convertFilter).map(convertNegation)) :\n        // eslint-disable-next-line @typescript-eslint/no-unsafe-argument\n        op === 'in' ? convertInOp(filter[1], filter.slice(2)) :\n        // eslint-disable-next-line @typescript-eslint/no-unsafe-argument\n        op === '!in' ? convertNegation(convertInOp(filter[1], filter.slice(2))) :\n        // eslint-disable-next-line @typescript-eslint/no-unsafe-argument\n        op === 'has' ? convertHasOp(filter[1]) :\n        // eslint-disable-next-line @typescript-eslint/no-unsafe-argument\n        op === '!has' ? convertNegation(convertHasOp(filter[1])) :\n        true;\n    return converted;\n}\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nfunction convertComparisonOp(property: string, value: any, op: string) {\n    switch (property) {\n    case '$type':\n        // eslint-disable-next-line @typescript-eslint/no-unsafe-return\n        return [`filter-type-${op}`, value];\n    case '$id':\n        // eslint-disable-next-line @typescript-eslint/no-unsafe-return\n        return [`filter-id-${op}`, value];\n    default:\n        // eslint-disable-next-line @typescript-eslint/no-unsafe-return\n        return [`filter-${op}`, property, value];\n    }\n}\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nfunction convertDisjunctionOp(filters: Array<Array<any>>) {\n    return (['any'] as unknown[]).concat(filters.map(convertFilter));\n}\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nfunction convertInOp(property: string, values: Array<any>) {\n    if (values.length === 0) { return false; }\n    switch (property) {\n    case '$type':\n        return [`filter-type-in`, ['literal', values]];\n    case '$id':\n        return [`filter-id-in`, ['literal', values]];\n    default:\n        if (values.length > 200 && !values.some(v => typeof v !== typeof values[0])) {\n            return ['filter-in-large', property, ['literal', values.sort(compare)]];\n        } else {\n            return ['filter-in-small', property, ['literal', values]];\n        }\n    }\n}\n\nfunction convertHasOp(property: string) {\n    switch (property) {\n    case '$type':\n        return true;\n    case '$id':\n        return [`filter-has-id`];\n    default:\n        return [`filter-has`, property];\n    }\n}\n\nfunction convertNegation(filter: unknown) {\n    return ['!', filter];\n}\n","import {isExpressionFilter} from './index';\n\nimport type {FilterSpecification, ExpressionSpecification} from '../types';\n\ntype ExpectedTypes = {\n    [_: string]: 'string' | 'number' | 'boolean';\n};\n\n/**\n * Convert the given legacy filter to (the JSON representation of) an\n * equivalent expression\n * @private\n */\nexport default function convertFilter(filter: FilterSpecification): unknown {\n    return _convertFilter(filter, {});\n}\n\n/*\n * Convert the given filter to an expression, storing the expected types for\n * any feature properties referenced in expectedTypes.\n *\n * These expected types are needed in order to construct preflight type checks\n * needed for handling 'any' filters. A preflight type check is necessary in\n * order to mimic legacy filters' semantics around expected type mismatches.\n * For example, consider the legacy filter:\n *\n *     [\"any\", [\"all\", [\">\", \"y\", 0], [\">\", \"y\", 0]], [\">\", \"x\", 0]]\n *\n * Naively, we might convert this to the expression:\n *\n *     [\"any\", [\"all\", [\">\", [\"get\", \"y\"], 0], [\">\", [\"get\", \"z\"], 0]], [\">\", [\"get\", \"x\"], 0]]\n *\n * But if we tried to evaluate this against, say `{x: 1, y: null, z: 0}`, the\n * [\">\", [\"get\", \"y\"], 0] would cause an evaluation error, leading to the\n * entire filter returning false. Legacy filter semantics, though, ask for\n * [\">\", \"y\", 0] to simply return `false` when `y` is of the wrong type,\n * allowing the subsequent terms of the outer \"any\" expression to be evaluated\n * (resulting, in this case, in a `true` value, because x > 0).\n *\n * We account for this by inserting a preflight type-checking expression before\n * each \"any\" term, allowing us to avoid evaluating the actual converted filter\n * if any type mismatches would cause it to produce an evalaution error:\n *\n *     [\"any\",\n *       [\"case\",\n *         [\"all\", [\"==\", [\"typeof\", [\"get\", \"y\"]], \"number\"], [\"==\", [\"typeof\", [\"get\", \"z\"], \"number]],\n *         [\"all\", [\">\", [\"get\", \"y\"], 0], [\">\", [\"get\", \"z\"], 0]],\n *         false\n *       ],\n *       [\"case\",\n *         [\"==\", [\"typeof\", [\"get\", \"x\"], \"number\"]],\n *         [\">\", [\"get\", \"x\"], 0],\n *         false\n *       ]\n *     ]\n *\n * An alternative, possibly more direct approach would be to use type checks\n * in the conversion of each comparison operator, so that the converted version\n * of each individual ==, >=, etc. would mimic the legacy filter semantics. The\n * downside of this approach is that it can lead to many more type checks than\n * would otherwise be necessary: outside the context of an \"any\" expression,\n * bailing out due to a runtime type error (expression semantics) and returning\n * false (legacy filter semantics) are equivalent: they cause the filter to\n * produce a `false` result.\n */\nfunction _convertFilter(filter: FilterSpecification, expectedTypes: ExpectedTypes): unknown {\n    if (isExpressionFilter(filter)) { return filter; }\n\n    if (!filter) return true;\n    const op = filter[0];\n    if (filter.length <= 1) return (op !== 'any');\n\n    let converted: unknown;\n\n    if (\n        op === '==' ||\n        op === '!=' ||\n        op === '<' ||\n        op === '>' ||\n        op === '<=' ||\n        op === '>='\n    ) {\n        const [, property, value] = filter;\n        // eslint-disable-next-line @typescript-eslint/no-unsafe-argument\n        converted = convertComparisonOp(property, value, op, expectedTypes);\n    } else if (op === 'any') {\n        const children = filter.slice(1).map(f => {\n            // eslint-disable-next-line @typescript-eslint/no-explicit-any\n            const types: Record<string, any> = {};\n            // eslint-disable-next-line @typescript-eslint/no-unsafe-argument\n            const child = _convertFilter(f, types);\n\n            const typechecks = runtimeTypeChecks(types);\n            return typechecks === true ? child : ['case', typechecks, child, false];\n        }) as ExpressionSpecification;\n        return ['any'].concat(children);\n    } else if (op === 'all') {\n        // eslint-disable-next-line @typescript-eslint/no-explicit-any, @typescript-eslint/no-unsafe-argument\n        const children: any[] = (filter).slice(1).map(f => _convertFilter(f, expectedTypes));\n        // eslint-disable-next-line @typescript-eslint/no-unsafe-argument\n        return children.length > 1 ? ['all'].concat(children) : [].concat(...children);\n    } else if (op === 'none') {\n        return ['!', _convertFilter(['any'].concat((filter).slice(1)), {})];\n    } else if (op === 'in') {\n        // eslint-disable-next-line @typescript-eslint/no-unsafe-argument\n        converted = convertInOp((filter[1]), filter.slice(2));\n    } else if (op === '!in') {\n        // eslint-disable-next-line @typescript-eslint/no-unsafe-argument\n        converted = convertInOp((filter[1]), filter.slice(2), true);\n    } else if (op === 'has') {\n        // eslint-disable-next-line @typescript-eslint/no-unsafe-argument\n        converted = convertHasOp((filter[1]));\n    } else if (op === '!has') {\n        // eslint-disable-next-line @typescript-eslint/no-unsafe-argument\n        converted = ['!', convertHasOp((filter[1]))];\n    } else {\n        converted = true;\n    }\n\n    return converted;\n}\n\n// Given a set of feature properties and an expected type for each one,\n// construct an boolean expression that tests whether each property has the\n// right type.\n// E.g.: for {name: 'string', population: 'number'}, return\n// [ 'all',\n//   ['==', ['typeof', ['get', 'name'], 'string']],\n//   ['==', ['typeof', ['get', 'population'], 'number]]\n// ]\nfunction runtimeTypeChecks(expectedTypes: ExpectedTypes): true | unknown[] {\n    const conditions: unknown[] = [];\n    for (const property in expectedTypes) {\n        const get = property === '$id' ? ['id'] : ['get', property];\n        conditions.push(['==', ['typeof', get], expectedTypes[property]]);\n    }\n    if (conditions.length === 0) return true;\n    if (conditions.length === 1) return conditions[0] as unknown[];\n    return (['all'] as unknown[]).concat(conditions);\n}\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nfunction convertComparisonOp(property: string, value: any, op: string, expectedTypes?: ExpectedTypes | null): unknown {\n    let get: unknown[];\n    if (property === '$type') {\n        return [op, ['geometry-type'], value];\n    } else if (property === '$id') {\n        get = ['id'];\n    } else {\n        get = ['get', property];\n    }\n\n    if (expectedTypes && value !== null) {\n        const type = typeof value as 'string' | 'number' | 'boolean';\n        expectedTypes[property] = type;\n    }\n\n    if (op === '==' && property !== '$id' && value === null) {\n        return [\n            'all',\n            ['has', property], // missing property != null for legacy filters\n            ['==', get, null]\n        ];\n    } else if (op === '!=' && property !== '$id' && value === null) {\n        return [\n            'any',\n            ['!', ['has', property]], // missing property != null for legacy filters\n            ['!=', get, null]\n        ];\n    }\n\n    return [op, get, value];\n}\n\nfunction convertInOp(property: string, values: Array<unknown>, negate: boolean = false) {\n    if (values.length === 0) return negate;\n\n    let get: string[];\n    if (property === '$type') {\n        get = ['geometry-type'];\n    } else if (property === '$id') {\n        get = ['id'];\n    } else {\n        get = ['get', property];\n    }\n\n    // Determine if the list of values to be searched is homogenously typed.\n    // If so (and if the type is string or number), then we can use a\n    // [match, input, [...values], true, false] construction rather than a\n    // bunch of `==` tests.\n    let uniformTypes = true;\n    const type = typeof values[0];\n    for (const value of values) {\n        if (typeof value !== type) {\n            uniformTypes = false;\n            break;\n        }\n    }\n\n    if (uniformTypes && (type === 'string' || type === 'number')) {\n        // Match expressions must have unique values.\n        const uniqueValues = values.sort().filter((v, i) => i === 0 || values[i - 1] !== v);\n        return ['match', get, uniqueValues, !negate, negate];\n    }\n\n    return [negate ? 'all' : 'any'].concat(\n        // eslint-disable-next-line @typescript-eslint/no-explicit-any\n        values.map(v => [negate ? '!=' : '==', get, v]) as any[]\n    );\n}\n\nfunction convertHasOp(property: string) {\n    if (property === '$type') {\n        return true;\n    } else if (property === '$id') {\n        return ['!=', ['id'], null];\n    } else {\n        return ['has', property];\n    }\n}\n","import {eachLayer, eachProperty} from '../visit';\nimport {isExpression} from '../expression/index';\nimport convertFunction, {convertTokenString} from '../function/convert';\nimport convertFilter from '../feature_filter/convert';\n\nimport type {StyleSpecification, FilterSpecification, FunctionSpecification} from '../types';\n\n/**\n * Migrate the given style object in place to use expressions. Specifically,\n * this will convert (a) \"stop\" functions, and (b) legacy filters to their\n * expression equivalents.\n */\nexport default function (style: StyleSpecification): StyleSpecification {\n    const converted = [];\n\n    eachLayer(style, (layer) => {\n        if (layer.filter) {\n            layer.filter = convertFilter(layer.filter) as FilterSpecification;\n        }\n    });\n\n    eachProperty(style, {paint: true, layout: true}, ({path, value, reference, set}) => {\n        if (isExpression(value)) return;\n        if (typeof value === 'object' && !Array.isArray(value)) {\n            set(convertFunction(value as FunctionSpecification<unknown>, reference));\n            converted.push(path.join('.'));\n        } else if (reference.tokens && typeof value === 'string') {\n            set(convertTokenString(value));\n        }\n    });\n\n    return style;\n}\n","import migrateToV8 from './migrate/v8';\nimport migrateToExpressions from './migrate/expressions';\n\nimport type {StyleSpecification} from './types';\n\n/**\n * Migrate a Mapbox GL Style to the latest version.\n *\n * @private\n * @alias migrate\n * @param {object} style a Mapbox GL Style\n * @returns {Object} a migrated style\n * @example\n * var fs = require('fs');\n * var migrate = require('mapbox-gl-style-spec').migrate;\n * var style = fs.readFileSync('./style.json', 'utf8');\n * fs.writeFileSync('./style.json', JSON.stringify(migrate(style)));\n */\nexport default function (style: {version: 7} | StyleSpecification): StyleSpecification {\n    let migrated = false;\n\n    if (style.version === 7) {\n        // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\n        style = migrateToV8(style);\n        migrated = true;\n    }\n\n    if (style.version === 8) {\n        style = migrateToExpressions(style);\n        migrated = true;\n    }\n\n    if (!migrated) {\n        throw new Error(`Cannot migrate from ${style.version}`);\n    }\n\n    return style as StyleSpecification;\n}\n","import type {StyleSpecification} from './types';\n\nconst MAPBOX_URL_RE = /^mapbox:\\/\\/(.*)/;\n\nexport default function (style: StyleSpecification): StyleSpecification {\n    const styleIDs: string[] = [];\n    const sourceIDs: string[] = [];\n    const compositedSourceLayers: string[] = [];\n\n    for (const id in style.sources) {\n        const source = style.sources[id];\n\n        if (source.type !== \"vector\")\n            continue;\n\n        const match = MAPBOX_URL_RE.exec(source.url);\n        if (!match)\n            continue;\n\n        styleIDs.push(id);\n        sourceIDs.push(match[1]);\n    }\n\n    if (styleIDs.length < 2)\n        return style;\n\n    styleIDs.forEach((id) => {\n        delete style.sources[id];\n    });\n\n    const compositeID = sourceIDs.join(\",\");\n\n    style.sources[compositeID] = {\n        \"type\": \"vector\",\n        \"url\": `mapbox://${compositeID}`\n    };\n\n    style.layers.forEach((layer) => {\n        if (styleIDs.includes(layer.source)) {\n            layer.source = compositeID;\n\n            if ('source-layer' in layer) {\n                if (compositedSourceLayers.includes(layer['source-layer'])) {\n                    throw new Error('Conflicting source layer names');\n                } else {\n                    compositedSourceLayers.push(layer['source-layer']);\n                }\n            }\n        }\n    });\n\n    return style;\n}\n","export default ['type', 'source', 'source-layer', 'minzoom', 'maxzoom', 'filter', 'layout'];\n","import refProperties from './util/ref_properties';\n\nimport type {LayerSpecification} from './types';\n\nfunction deref(layer: LayerSpecification, parent: LayerSpecification): LayerSpecification {\n    const result = {} as LayerSpecification;\n\n    const layerRec = layer as Record<string, unknown>;\n    const parentRec = parent as Record<string, unknown>;\n    const resultRec = result as Record<string, unknown>;\n\n    for (const k in layerRec) {\n        if (k !== 'ref') {\n            resultRec[k] = layerRec[k];\n        }\n    }\n\n    refProperties.forEach((k) => {\n        if (k in parentRec) {\n            resultRec[k] = parentRec[k];\n        }\n    });\n\n    return result;\n}\n\n/**\n * Given an array of layers, some of which may contain `ref` properties\n * whose value is the `id` of another property, return a new array where\n * such layers have been augmented with the 'type', 'source', etc. properties\n * from the parent layer, and the `ref` property has been removed.\n *\n * The input is not modified. The output may contain references to portions\n * of the input.\n *\n * @private\n * @param {Array<Layer>} layers\n * @returns {Array<Layer>}\n */\nexport default function derefLayers(layers: Array<LayerSpecification>): Array<LayerSpecification> {\n    layers = layers.slice();\n\n    // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\n    const map: Record<string, LayerSpecification> = Object.create(null);\n    for (const layer of layers) {\n        map[layer.id] = layer;\n    }\n\n    for (let i = 0; i < layers.length; i++) {\n        const layer = layers[i];\n        if (layer && 'ref' in layer) {\n            const parent = map[(layer as LayerSpecification & {ref: string}).ref];\n            if (parent) layers[i] = deref(layer, parent);\n        }\n    }\n\n    return layers;\n}\n","/**\n * Deeply compares two object literals.\n *\n * @private\n */\nfunction deepEqual(a?: unknown, b?: unknown): boolean {\n    if (Array.isArray(a)) {\n        if (!Array.isArray(b) || a.length !== b.length) return false;\n        for (let i = 0; i < a.length; i++) {\n            if (!deepEqual(a[i], b[i])) return false;\n        }\n        return true;\n    }\n    if (typeof a === 'object' && a !== null && b !== null) {\n        if (!(typeof b === 'object')) return false;\n        const aRec = a as Record<string, unknown>;\n        const bRec = b as Record<string, unknown>;\n        const keys = Object.keys(aRec);\n        if (keys.length !== Object.keys(bRec).length) return false;\n        for (const key in aRec) {\n            if (!deepEqual(aRec[key], bRec[key])) return false;\n        }\n        return true;\n    }\n    return a === b;\n}\n\nexport default deepEqual;\n","import isEqual from './util/deep_equal';\n\nimport type {StyleSpecification, ImportSpecification, SourceSpecification, LayerSpecification, IconsetsSpecification} from './types';\n\ntype Sources = {\n    [key: string]: SourceSpecification;\n};\n\ntype Command = {\n    command: string;\n    args: unknown[];\n};\n\nexport const operations = {\n\n    /*\n     * { command: 'setStyle', args: [stylesheet] }\n     */\n    setStyle: 'setStyle',\n\n    /*\n     * { command: 'addLayer', args: [layer, 'beforeLayerId'] }\n     */\n    addLayer: 'addLayer',\n\n    /*\n     * { command: 'removeLayer', args: ['layerId'] }\n     */\n    removeLayer: 'removeLayer',\n\n    /*\n     * { command: 'setPaintProperty', args: ['layerId', 'prop', value] }\n     */\n    setPaintProperty: 'setPaintProperty',\n\n    /*\n     * { command: 'setLayoutProperty', args: ['layerId', 'prop', value] }\n     */\n    setLayoutProperty: 'setLayoutProperty',\n\n    /*\n     * { command: 'setSlot', args: ['layerId', slot] }\n     */\n    setSlot: 'setSlot',\n\n    /*\n     * { command: 'setFilter', args: ['layerId', filter] }\n     */\n    setFilter: 'setFilter',\n\n    /*\n     * { command: 'addSource', args: ['sourceId', source] }\n     */\n    addSource: 'addSource',\n\n    /*\n     * { command: 'removeSource', args: ['sourceId'] }\n     */\n    removeSource: 'removeSource',\n\n    /*\n     * { command: 'setGeoJSONSourceData', args: ['sourceId', data] }\n     */\n    setGeoJSONSourceData: 'setGeoJSONSourceData',\n\n    /*\n     * { command: 'setLayerZoomRange', args: ['layerId', 0, 22] }\n     */\n    setLayerZoomRange: 'setLayerZoomRange',\n\n    /*\n     * { command: 'setLayerProperty', args: ['layerId', 'prop', value] }\n     */\n    setLayerProperty: 'setLayerProperty',\n\n    /*\n     * { command: 'setCenter', args: [[lon, lat]] }\n     */\n    setCenter: 'setCenter',\n\n    /*\n     * { command: 'setZoom', args: [zoom] }\n     */\n    setZoom: 'setZoom',\n\n    /*\n     * { command: 'setBearing', args: [bearing] }\n     */\n    setBearing: 'setBearing',\n\n    /*\n     * { command: 'setPitch', args: [pitch] }\n     */\n    setPitch: 'setPitch',\n\n    /*\n     * { command: 'setSprite', args: ['spriteUrl'] }\n     */\n    setSprite: 'setSprite',\n\n    /*\n     * { command: 'setGlyphs', args: ['glyphsUrl'] }\n     */\n    setGlyphs: 'setGlyphs',\n\n    /*\n     * { command: 'setTransition', args: [transition] }\n     */\n    setTransition: 'setTransition',\n\n    /*\n     * { command: 'setLighting', args: [lightProperties] }\n     */\n    setLight: 'setLight',\n\n    /*\n     * { command: 'setTerrain', args: [terrainProperties] }\n     */\n    setTerrain: 'setTerrain',\n\n    /*\n     *  { command: 'setFog', args: [fogProperties] }\n     */\n    setFog: 'setFog',\n\n    /*\n     *  { command: 'setSnow', args: [snowProperties] }\n     */\n    setSnow: 'setSnow',\n\n    /*\n     *  { command: 'setRain', args: [rainProperties] }\n     */\n    setRain: 'setRain',\n\n    /*\n     *  { command: 'setCamera', args: [cameraProperties] }\n     */\n    setCamera: 'setCamera',\n\n    /*\n     *  { command: 'setLights', args: [{light-3d},...] }\n     */\n    setLights: 'setLights',\n\n    /*\n     *  { command: 'setProjection', args: [projectionProperties] }\n     */\n    setProjection: 'setProjection',\n\n    /*\n     *  { command: 'addImport', args: [import] }\n     */\n    addImport: 'addImport',\n\n    /*\n     *  { command: 'removeImport', args: [importId] }\n     */\n    removeImport: 'removeImport',\n\n    /**\n     * { command: 'updateImport', args: [importId, importSpecification | styleUrl] }\n     */\n    updateImport: 'updateImport',\n\n    /*\n     *  { command: 'addIconset', args: [iconsetId, IconsetSpecification] }\n     */\n    addIconset: 'addIconset',\n\n    /*\n     *  { command: 'removeIconset', args: [iconsetId] }\n     */\n    removeIconset: 'removeIconset'\n} as const;\n\nfunction addSource(sourceId: string, after: Sources, commands: Array<Command>) {\n    commands.push({command: operations.addSource, args: [sourceId, after[sourceId]]});\n}\n\nfunction removeSource(sourceId: string, commands: Array<Command>, sourcesRemoved: {\n    [key: string]: true;\n}) {\n    commands.push({command: operations.removeSource, args: [sourceId]});\n    sourcesRemoved[sourceId] = true;\n}\n\nfunction updateSource(sourceId: string, after: Sources, commands: Array<Command>, sourcesRemoved: {\n    [key: string]: true;\n}) {\n    removeSource(sourceId, commands, sourcesRemoved);\n    addSource(sourceId, after, commands);\n}\n\nfunction canUpdateGeoJSON(before: Sources, after: Sources, sourceId: string) {\n    let prop: string;\n    for (prop in before[sourceId]) {\n        if (!Object.hasOwn(before[sourceId], prop)) continue;\n        if (prop !== 'data' && !isEqual(before[sourceId][prop], after[sourceId][prop])) {\n            return false;\n        }\n    }\n    for (prop in after[sourceId]) {\n        if (!Object.hasOwn(after[sourceId], prop)) continue;\n        if (prop !== 'data' && !isEqual(before[sourceId][prop], after[sourceId][prop])) {\n            return false;\n        }\n    }\n    return true;\n}\n\nfunction diffSources(before: Sources, after: Sources, commands: Array<Command>, sourcesRemoved: {[key: string]: true}) {\n    before = before || {};\n    after = after || {};\n\n    let sourceId: string;\n\n    // look for sources to remove\n    for (sourceId in before) {\n        if (!Object.hasOwn(before, sourceId)) continue;\n        if (!Object.hasOwn(after, sourceId)) {\n            removeSource(sourceId, commands, sourcesRemoved);\n        }\n    }\n\n    // look for sources to add/update\n    for (sourceId in after) {\n        if (!Object.hasOwn(after, sourceId)) continue;\n        const source = after[sourceId];\n        if (!Object.hasOwn(before, sourceId)) {\n            addSource(sourceId, after, commands);\n        } else if (!isEqual(before[sourceId], source)) {\n            if (before[sourceId].type === 'geojson' && source.type === 'geojson' && canUpdateGeoJSON(before, after, sourceId)) {\n                commands.push({command: operations.setGeoJSONSourceData, args: [sourceId, source.data]});\n            } else {\n                // no update command, must remove then add\n                updateSource(sourceId, after, commands, sourcesRemoved);\n            }\n        }\n    }\n}\n\nfunction diffLayerPropertyChanges(before: LayerSpecification['layout'], after: LayerSpecification['layout'], commands: Array<Command>, layerId: string, klass: string | null | undefined, command: string): void;\nfunction diffLayerPropertyChanges(before: LayerSpecification['paint'], after: LayerSpecification['paint'], commands: Array<Command>, layerId: string, klass: string | null | undefined, command: string): void;\nfunction diffLayerPropertyChanges(\n    before: LayerSpecification['paint'] | LayerSpecification['layout'],\n    after: LayerSpecification['paint'] | LayerSpecification['layout'],\n    commands: Command[],\n    layerId: string,\n    klass: string | null | undefined,\n    command: string\n) {\n    before = before || {};\n    after = after || {};\n\n    let prop: string;\n\n    for (prop in before) {\n        if (!Object.hasOwn(before, prop)) continue;\n        if (!isEqual(before[prop], after[prop])) {\n            commands.push({command, args: [layerId, prop, after[prop], klass]});\n        }\n    }\n    for (prop in after) {\n        if (!Object.hasOwn(after, prop) || Object.hasOwn(before, prop)) continue;\n        if (!isEqual(before[prop], after[prop])) {\n            commands.push({command, args: [layerId, prop, after[prop], klass]});\n        }\n    }\n}\n\nfunction pluckId<T extends {id: string}>(item: T): string {\n    return item.id;\n}\n\nfunction indexById<T extends {id: string}>(group: {[key: string]: T}, item: T): {[id: string]: T} {\n    group[item.id] = item;\n    return group;\n}\n\nfunction diffLayers(before: Array<LayerSpecification>, after: Array<LayerSpecification>, commands: Array<Command>) {\n    before = before || [];\n    after = after || [];\n\n    // order of layers by id\n    const beforeOrder = before.map(pluckId);\n    const afterOrder = after.map(pluckId);\n\n    // index of layer by id\n    const beforeIndex = before.reduce(indexById, {});\n    const afterIndex = after.reduce(indexById, {});\n\n    // track order of layers as if they have been mutated\n    const tracker = beforeOrder.slice();\n\n    // layers that have been added do not need to be diffed\n    // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\n    const clean = Object.create(null);\n\n    let i: number;\n    let d: number;\n    let layerId: string;\n    let beforeLayer: LayerSpecification;\n    let afterLayer: LayerSpecification;\n    let insertBeforeLayerId: string;\n    let prop: string;\n\n    // remove layers\n    for (i = 0, d = 0; i < beforeOrder.length; i++) {\n        layerId = beforeOrder[i];\n        if (!Object.hasOwn(afterIndex, layerId)) {\n            commands.push({command: operations.removeLayer, args: [layerId]});\n            tracker.splice(tracker.indexOf(layerId, d), 1);\n        } else {\n            // limit where in tracker we need to look for a match\n            d++;\n        }\n    }\n\n    // add/reorder layers\n    for (i = 0, d = 0; i < afterOrder.length; i++) {\n        // work backwards as insert is before an existing layer\n        layerId = afterOrder[afterOrder.length - 1 - i];\n\n        if (tracker[tracker.length - 1 - i] === layerId) continue;\n\n        if (Object.hasOwn(beforeIndex, layerId)) {\n            // remove the layer before we insert at the correct position\n            commands.push({command: operations.removeLayer, args: [layerId]});\n            tracker.splice(tracker.lastIndexOf(layerId, tracker.length - d), 1);\n        } else {\n            // limit where in tracker we need to look for a match\n            d++;\n        }\n\n        // add layer at correct position\n        insertBeforeLayerId = tracker[tracker.length - i];\n        commands.push({command: operations.addLayer, args: [afterIndex[layerId], insertBeforeLayerId]});\n        tracker.splice(tracker.length - i, 0, layerId);\n        // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n        clean[layerId] = true;\n    }\n\n    // update layers\n    for (i = 0; i < afterOrder.length; i++) {\n        layerId = afterOrder[i];\n        // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\n        beforeLayer = beforeIndex[layerId];\n        // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\n        afterLayer = afterIndex[layerId];\n\n        // no need to update if previously added (new or moved)\n        // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n        if (clean[layerId] || isEqual(beforeLayer, afterLayer)) continue;\n\n        // If source, source-layer, or type have changes, then remove the layer\n        // and add it back 'from scratch'.\n        if (!isEqual(beforeLayer.source, afterLayer.source) || !isEqual(beforeLayer['source-layer'], afterLayer['source-layer']) || !isEqual(beforeLayer.type, afterLayer.type)) {\n            commands.push({command: operations.removeLayer, args: [layerId]});\n            // we add the layer back at the same position it was already in, so\n            // there's no need to update the `tracker`\n            insertBeforeLayerId = tracker[tracker.lastIndexOf(layerId) + 1];\n            commands.push({command: operations.addLayer, args: [afterLayer, insertBeforeLayerId]});\n            continue;\n        }\n\n        // layout, paint, filter, minzoom, maxzoom\n        diffLayerPropertyChanges(beforeLayer.layout, afterLayer.layout, commands, layerId, null, operations.setLayoutProperty);\n        diffLayerPropertyChanges(beforeLayer.paint, afterLayer.paint, commands, layerId, null, operations.setPaintProperty);\n        if (!isEqual(beforeLayer.slot, afterLayer.slot)) {\n            commands.push({command: operations.setSlot, args: [layerId, afterLayer.slot]});\n        }\n        if (!isEqual(beforeLayer.filter, afterLayer.filter)) {\n            commands.push({command: operations.setFilter, args: [layerId, afterLayer.filter]});\n        }\n        if (!isEqual(beforeLayer.minzoom, afterLayer.minzoom) || !isEqual(beforeLayer.maxzoom, afterLayer.maxzoom)) {\n            commands.push({command: operations.setLayerZoomRange, args: [layerId, afterLayer.minzoom, afterLayer.maxzoom]});\n        }\n\n        // handle all other layer props, including paint.*\n        for (prop in beforeLayer) {\n            if (!Object.hasOwn(beforeLayer, prop)) continue;\n            if (prop === 'layout' || prop === 'paint' || prop === 'filter' ||\n                prop === 'metadata' || prop === 'minzoom' || prop === 'maxzoom' || prop === 'slot') continue;\n            if (prop.indexOf('paint.') === 0) {\n                // eslint-disable-next-line @typescript-eslint/no-unsafe-argument\n                diffLayerPropertyChanges(beforeLayer[prop], afterLayer[prop], commands, layerId, prop.slice(6), operations.setPaintProperty);\n            } else if (!isEqual(beforeLayer[prop], afterLayer[prop])) {\n                commands.push({command: operations.setLayerProperty, args: [layerId, prop, afterLayer[prop]]});\n            }\n        }\n        for (prop in afterLayer) {\n            if (!Object.hasOwn(afterLayer, prop) || Object.hasOwn(beforeLayer, prop)) continue;\n            if (prop === 'layout' || prop === 'paint' || prop === 'filter' ||\n                prop === 'metadata' || prop === 'minzoom' || prop === 'maxzoom' || prop === 'slot') continue;\n            if (prop.indexOf('paint.') === 0) {\n                // eslint-disable-next-line @typescript-eslint/no-unsafe-argument\n                diffLayerPropertyChanges(beforeLayer[prop], afterLayer[prop], commands, layerId, prop.slice(6), operations.setPaintProperty);\n            } else if (!isEqual(beforeLayer[prop], afterLayer[prop])) {\n                commands.push({command: operations.setLayerProperty, args: [layerId, prop, afterLayer[prop]]});\n            }\n        }\n    }\n}\n\nexport function diffImports(before: Array<ImportSpecification> | null | undefined = [], after: Array<ImportSpecification> | null | undefined = [], commands: Array<Command>) {\n    before = before || [];\n    after = after || [];\n\n    // order imports by id\n    const beforeOrder = before.map(pluckId);\n    const afterOrder = after.map(pluckId);\n\n    // index imports by id\n    const beforeIndex = before.reduce(indexById, {});\n    const afterIndex = after.reduce(indexById, {});\n\n    // track order of imports as if they have been mutated\n    const tracker = beforeOrder.slice();\n\n    let i: number;\n    let d: number;\n    let importId: string;\n    let insertBefore: string;\n\n    // remove imports\n    for (i = 0, d = 0; i < beforeOrder.length; i++) {\n        importId = beforeOrder[i];\n        if (!Object.hasOwn(afterIndex, importId)) {\n            commands.push({command: operations.removeImport, args: [importId]});\n            tracker.splice(tracker.indexOf(importId, d), 1);\n        } else {\n            // limit where in tracker we need to look for a match\n            d++;\n        }\n    }\n\n    // add/reorder imports\n    for (i = 0, d = 0; i < afterOrder.length; i++) {\n        // work backwards as insert is before an existing import\n        importId = afterOrder[afterOrder.length - 1 - i];\n\n        if (tracker[tracker.length - 1 - i] === importId) continue;\n\n        if (Object.hasOwn(beforeIndex, importId)) {\n            // remove the import before we insert at the correct position\n            commands.push({command: operations.removeImport, args: [importId]});\n            tracker.splice(tracker.lastIndexOf(importId, tracker.length - d), 1);\n        } else {\n            // limit where in tracker we need to look for a match\n            d++;\n        }\n\n        // add import at correct position\n        insertBefore = tracker[tracker.length - i];\n        commands.push({command: operations.addImport, args: [afterIndex[importId], insertBefore]});\n        tracker.splice(tracker.length - i, 0, importId);\n    }\n\n    // update imports\n    for (const afterImport of after) {\n        // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\n        const beforeImport = beforeIndex[afterImport.id];\n        if (!beforeImport) continue;\n        // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n        delete beforeImport.data;\n        if (isEqual(beforeImport, afterImport)) continue;\n\n        commands.push({command: operations.updateImport, args: [afterImport.id, afterImport]});\n    }\n}\n\nfunction diffIconsets(before: IconsetsSpecification, after: IconsetsSpecification, commands: Array<Command>) {\n    before = before || {};\n    after = after || {};\n\n    let iconsetId: string;\n\n    // look for iconsets to remove\n    for (iconsetId in before) {\n        if (!Object.hasOwn(before, iconsetId)) continue;\n        if (!Object.hasOwn(after, iconsetId)) {\n            commands.push({command: operations.removeIconset, args: [iconsetId]});\n        }\n    }\n\n    // look for iconsets to add/update\n    for (iconsetId in after) {\n        if (!Object.hasOwn(after, iconsetId)) continue;\n        const iconset = after[iconsetId];\n        if (!Object.hasOwn(before, iconsetId)) {\n            commands.push({command: operations.addIconset, args: [iconsetId, iconset]});\n        } else if (!isEqual(before[iconsetId], iconset)) {\n            commands.push({command: operations.removeIconset, args: [iconsetId]});\n            commands.push({command: operations.addIconset, args: [iconsetId, iconset]});\n        }\n    }\n}\n\n/**\n * Diff two stylesheet\n *\n * Creates semanticly aware diffs that can easily be applied at runtime.\n * Operations produced by the diff closely resemble the mapbox-gl-js API. Any\n * error creating the diff will fall back to the 'setStyle' operation.\n *\n * Example diff:\n * [\n *     { command: 'setConstant', args: ['@water', '#0000FF'] },\n *     { command: 'setPaintProperty', args: ['background', 'background-color', 'black'] }\n * ]\n *\n * @private\n * @param {*} [before] stylesheet to compare from\n * @param {*} after stylesheet to compare to\n * @returns Array list of changes\n */\nexport default function diffStyles(before: StyleSpecification, after: StyleSpecification): Array<Command> {\n    if (!before) return [{command: operations.setStyle, args: [after]}];\n\n    let commands: Array<Command> = [];\n\n    try {\n        // Handle changes to top-level properties\n        if (!isEqual(before.version, after.version)) {\n            return [{command: operations.setStyle, args: [after]}];\n        }\n        if (!isEqual(before.center, after.center)) {\n            commands.push({command: operations.setCenter, args: [after.center]});\n        }\n        if (!isEqual(before.zoom, after.zoom)) {\n            commands.push({command: operations.setZoom, args: [after.zoom]});\n        }\n        if (!isEqual(before.bearing, after.bearing)) {\n            commands.push({command: operations.setBearing, args: [after.bearing]});\n        }\n        if (!isEqual(before.pitch, after.pitch)) {\n            commands.push({command: operations.setPitch, args: [after.pitch]});\n        }\n        if (!isEqual(before.sprite, after.sprite)) {\n            commands.push({command: operations.setSprite, args: [after.sprite]});\n        }\n        if (!isEqual(before.glyphs, after.glyphs)) {\n            commands.push({command: operations.setGlyphs, args: [after.glyphs]});\n        }\n        // Handle changes to `imports` before other mergable top-level properties\n        if (!isEqual(before.imports, after.imports)) {\n            diffImports(before.imports, after.imports, commands);\n        }\n        if (!isEqual(before.transition, after.transition)) {\n            commands.push({command: operations.setTransition, args: [after.transition]});\n        }\n        if (!isEqual(before.light, after.light)) {\n            commands.push({command: operations.setLight, args: [after.light]});\n        }\n        if (!isEqual(before.fog, after.fog)) {\n            commands.push({command: operations.setFog, args: [after.fog]});\n        }\n        if (!isEqual(before.snow, after.snow)) {\n            commands.push({command: operations.setSnow, args: [after.snow]});\n        }\n        if (!isEqual(before.rain, after.rain)) {\n            commands.push({command: operations.setRain, args: [after.rain]});\n        }\n        if (!isEqual(before.projection, after.projection)) {\n            commands.push({command: operations.setProjection, args: [after.projection]});\n        }\n        if (!isEqual(before.lights, after.lights)) {\n            commands.push({command: operations.setLights, args: [after.lights]});\n        }\n        if (!isEqual(before.camera, after.camera)) {\n            commands.push({command: operations.setCamera, args: [after.camera]});\n        }\n        if (!isEqual(before.iconsets, after.iconsets)) {\n            diffIconsets(before.iconsets, after.iconsets, commands);\n        }\n        if (!isEqual(before[\"color-theme\"], after[\"color-theme\"])) {\n            // Update this to setColorTheme after\n            // https://mapbox.atlassian.net/browse/GLJS-842 is implemented\n            return [{command: operations.setStyle, args: [after]}];\n        }\n\n        // Handle changes to `sources`\n        // If a source is to be removed, we also--before the removeSource\n        // command--need to remove all the style layers that depend on it.\n        const sourcesRemoved: Record<string, true> = {};\n\n        // First collect the {add,remove}Source commands\n        const removeOrAddSourceCommands: Command[] = [];\n        diffSources(before.sources, after.sources, removeOrAddSourceCommands, sourcesRemoved);\n\n        // Push a removeLayer command for each style layer that depends on a\n        // source that's being removed.\n        // Also, exclude any such layers them from the input to `diffLayers`\n        // below, so that diffLayers produces the appropriate `addLayers`\n        // command\n        const beforeLayers: LayerSpecification[] = [];\n        if (before.layers) {\n            before.layers.forEach((layer) => {\n                if (layer.source && sourcesRemoved[layer.source]) {\n                    commands.push({command: operations.removeLayer, args: [layer.id]});\n                } else {\n                    beforeLayers.push(layer);\n                }\n            });\n        }\n\n        // Remove the terrain if the source for that terrain is being removed\n        let beforeTerrain = before.terrain;\n        if (beforeTerrain) {\n            if (sourcesRemoved[beforeTerrain.source]) {\n                commands.push({command: operations.setTerrain, args: [undefined]});\n                beforeTerrain = undefined;\n            }\n        }\n\n        commands = commands.concat(removeOrAddSourceCommands);\n\n        // Even though terrain is a top-level property\n        // Its like a layer in the sense that it depends on a source being present.\n        if (!isEqual(beforeTerrain, after.terrain)) {\n            commands.push({command: operations.setTerrain, args: [after.terrain]});\n        }\n\n        // Handle changes to `layers`\n\n        diffLayers(beforeLayers, after.layers, commands);\n    } catch (e) {\n        // fall back to setStyle\n        console.warn('Unable to compute style diff:', e);\n        commands = [{command: operations.setStyle, args: [after]}];\n    }\n\n    return commands;\n}\n","// Note: Do not inherit from Error. It breaks when transpiling to ES5.\n\nexport default class ValidationError {\n    message: string;\n    identifier: string | null | undefined;\n    line: number | null | undefined;\n\n    constructor(key: string | null | undefined, value: unknown, message: string, identifier?: string | null) {\n        this.message = (key ? `${key}: ` : '') + message;\n        if (identifier) this.identifier = identifier;\n\n        if (value !== null && value !== undefined && (value as {__line__?: number}).__line__) {\n            this.line = (value as {__line__?: number}).__line__;\n        }\n    }\n}\n\nexport class ValidationWarning extends ValidationError {}\n","// Note: Do not inherit from Error. It breaks when transpiling to ES5.\n\nconst LINE_NUMBER_RE = /line (\\d+)/;\n\nexport default class ParsingError {\n    message: string;\n    error: Error;\n    line: number;\n\n    constructor(error: Error) {\n        this.error = error;\n        this.message = error.message;\n        const match = error.message.match(LINE_NUMBER_RE);\n        this.line = match && match[1] ? parseInt(match[1], 10) : 0;\n    }\n}\n","import validateStyle from './validate_style';\nimport validateObject from './validate_object';\nimport ValidationError from '../error/validation_error';\nimport {unbundle} from '../util/unbundle_jsonlint';\nimport {isObject} from '../util/get_type';\n\nimport type {StyleReference} from '../reference/latest';\nimport type {StyleSpecification} from '../types';\n\ntype ImportValidatorOptions = {\n    key: string;\n    value: unknown;\n    style: Partial<StyleSpecification>;\n    styleSpec: StyleReference;\n};\n\nexport default function validateImport(options: ImportValidatorOptions): ValidationError[] {\n    const key = options.key;\n    const {value, styleSpec} = options;\n\n    if (!isObject(value)) {\n        return [new ValidationError(key, value, `import must be an object`)];\n    }\n\n    const {data, ...importSpec} = value;\n\n    // Preserve __line__ from the value\n    Object.defineProperty(importSpec, '__line__', {\n        value: value.__line__,\n        enumerable: false\n    });\n\n    let errors = validateObject({\n        ...options,\n        value: importSpec,\n        // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\n        valueSpec: styleSpec.import\n    });\n\n    // Empty string is reserved for the root style id\n    if (unbundle(importSpec.id) === '') {\n        const key = `${options.key}.id`;\n        errors.push(new ValidationError(key, importSpec, `import id can't be an empty string`));\n    }\n\n    // Reject reserved prototype-pollution keys\n    const importId = unbundle(importSpec.id);\n    if (importId === '__proto__' || importId === 'constructor' || importId === 'prototype') {\n        const key = `${options.key}.id`;\n        errors.push(new ValidationError(key, importSpec, `import id can't be \"${String(importId)}\"`));\n    }\n\n    if (data) {\n        const key = `${options.key}.data`;\n        errors = errors.concat(validateStyle(data, styleSpec, {key}));\n    }\n\n    return errors;\n}\n","import validateSpec from './validate';\nimport validateObject from './validate_object';\nimport {unbundle} from '../util/unbundle_jsonlint';\nimport {isObject} from '../util/get_type';\n\nimport type ValidationError from '../error/validation_error';\nimport type {ValidatorOptions} from './validate';\n\n// Validator for a single config option (one entry in `schema`). Wraps the\n// generic object validator to inherit the option's declared `type` when\n// validating its `default`, so expressions in the default are checked against\n// the option's expected type instead of `*` (any).\nexport default function validateOption(options: ValidatorOptions): ValidationError[] {\n    const styleSpec = options.styleSpec;\n    const optionValue = options.value as {type?: unknown; array?: unknown} | null | undefined;\n    // Don't propagate the declared type for array options: `getExpectedType`\n    // doesn't model the schema's `array: true` flag, so forcing a scalar type\n    // here would reject an array-of-T default that previously validated fine.\n    const isArrayOption = isObject(optionValue) && unbundle(optionValue.array) === true;\n    const declaredType = !isArrayOption && isObject(optionValue) ? unbundle(optionValue.type) : undefined;\n\n    return validateObject({\n        ...options,\n        // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\n        valueSpec: styleSpec.option,\n        objectElementValidators: declaredType ? {\n            // Only propagate the declared type when the default is an\n            // expression (array-form). Primitive defaults keep the previous\n            // permissive validation, mirroring the runtime parser's narrowing\n            // in style.ts/parser.cpp.\n            default: (elementOptions: ValidatorOptions): ValidationError[] => (Array.isArray(elementOptions.value) ?\n                validateSpec({...elementOptions, valueSpec: {...elementOptions.valueSpec, type: declaredType} as typeof elementOptions.valueSpec}) :\n                validateSpec(elementOptions)),\n        } : undefined,\n    });\n}\n","import {getType, isObject} from '../util/get_type';\nimport validate from './validate';\nimport ValidationError from '../error/validation_error';\n\nimport type {StyleReference} from '../reference/latest';\nimport type {StyleSpecification} from '../types';\nimport type {ArrayPropertySpecification} from '../style-spec';\n\ntype ArraySpec = {\n    value?: unknown;\n    values?: unknown[] | {[_: string]: unknown};\n    length?: number;\n    minimum?: number;\n    maximum?: number;\n    function?: unknown;\n};\n\ntype ArrayElementSpec<T = unknown> = {\n    type: string;\n    values: T[] | {[_: string]: unknown};\n    minimum: number;\n    maximum: number;\n    function: unknown;\n};\n\ntype ArrayValidatorOptions<T = unknown> = {\n    key: string;\n    value: T;\n    valueSpec: ArrayPropertySpecification | ArraySpec;\n    style: Partial<StyleSpecification>;\n    styleSpec: StyleReference;\n    arrayElementValidator: (...args: unknown[]) => ValidationError[];\n};\n\nexport default function validateArray(options: ArrayValidatorOptions): ValidationError[] {\n    const array = options.value;\n    const arraySpec = options.valueSpec;\n    const style = options.style;\n    const styleSpec = options.styleSpec;\n    const key = options.key;\n    const validateArrayElement = options.arrayElementValidator || validate;\n\n    if (!Array.isArray(array)) {\n        return [new ValidationError(key, array, `array expected, ${getType(array)} found`)];\n    }\n\n    if (arraySpec.length && array.length !== arraySpec.length) {\n        return [new ValidationError(key, array, `array length ${arraySpec.length} expected, length ${array.length} found`)];\n    }\n\n    if (arraySpec['min-length'] && array.length < arraySpec['min-length']) {\n        return [new ValidationError(key, array, `array length at least ${arraySpec['min-length']} expected, length ${array.length} found`)];\n    }\n\n    let arrayElementSpec: ArrayElementSpec = {\n        type: arraySpec.value as string,\n        values: arraySpec.values,\n        minimum: arraySpec.minimum,\n        maximum: arraySpec.maximum,\n        function: undefined\n    };\n\n    if (styleSpec.$version < 7) {\n        arrayElementSpec.function = (arraySpec as ArraySpec).function;\n    }\n\n    if (isObject(arraySpec.value)) {\n        arrayElementSpec = arraySpec.value as ArrayElementSpec;\n    }\n\n    let errors: ValidationError[] = [];\n    for (let i = 0; i < array.length; i++) {\n        errors = errors.concat(validateArrayElement({\n            array,\n            arrayIndex: i,\n            // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\n            value: array[i],\n            valueSpec: arrayElementSpec,\n            style,\n            styleSpec,\n            key: `${key}[${i}]`\n        }, true));\n    }\n\n    return errors;\n}\n","import {isNumber, getType} from '../util/get_type';\nimport ValidationError from '../error/validation_error';\n\nimport type {StyleReference} from '../reference/latest';\nimport type {StyleSpecification} from '../types';\nimport type {NumberPropertySpecification} from '../style-spec';\n\ntype NumberValidatorOptions = {\n    key: string;\n    value: unknown;\n    valueSpec: NumberPropertySpecification;\n    style: Partial<StyleSpecification>;\n    styleSpec: StyleReference;\n    arrayIndex: number;\n};\n\nexport default function validateNumber(options: NumberValidatorOptions): ValidationError[] {\n    const key = options.key;\n    const value = options.value;\n    const valueSpec = options.valueSpec;\n\n    if (!isNumber(value)) {\n        return [new ValidationError(key, value, `number expected, ${getType(value)} found`)];\n    }\n\n    // eslint-disable-next-line no-self-compare\n    if (value !== value) {\n        return [new ValidationError(key, value, `number expected, NaN found`)];\n    }\n\n    if ('minimum' in valueSpec) {\n        let specMin = valueSpec.minimum;\n        if (Array.isArray(valueSpec.minimum)) {\n            const i = options.arrayIndex;\n            // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\n            specMin = valueSpec.minimum[i];\n        }\n        if (value < specMin) {\n            return [new ValidationError(key, value, `${value} is less than the minimum value ${specMin}`)];\n        }\n    }\n\n    if ('maximum' in valueSpec) {\n        let specMax = valueSpec.maximum;\n        if (Array.isArray(valueSpec.maximum)) {\n            const i = options.arrayIndex;\n            // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\n            specMax = valueSpec.maximum[i];\n        }\n        if (value > specMax) {\n            return [new ValidationError(key, value, `${value} is greater than the maximum value ${specMax}`)];\n        }\n    }\n\n    return [];\n}\n","import ValidationError from '../error/validation_error';\nimport {getType, isObject} from '../util/get_type';\nimport validate from './validate';\nimport validateObject from './validate_object';\nimport validateArray from './validate_array';\nimport validateNumber from './validate_number';\nimport {isExpression} from '../expression/index';\nimport {unbundle, deepUnbundle} from '../util/unbundle_jsonlint';\nimport {\n    supportsPropertyExpression,\n    supportsZoomExpression,\n    supportsInterpolation\n} from '../util/properties';\n\nimport type {StyleReference} from '../reference/latest';\nimport type {StyleSpecification} from '../types';\nimport type {StylePropertySpecification} from '../style-spec';\n\nfunction hasObjectStops(value: object): value is {stops: Array<Record<PropertyKey, unknown>>} {\n    // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\n    const stops = value['stops'];\n    return Array.isArray(stops) && Array.isArray(stops[0]) && isObject(stops[0][0]);\n}\n\nexport type FunctionValidatorOptions = {\n    key: string;\n    value: unknown;\n    valueSpec: unknown;\n    style: Partial<StyleSpecification>;\n    styleSpec: StyleReference;\n};\n\nexport default function validateFunction(options: FunctionValidatorOptions): ValidationError[] {\n    const key = options.key;\n    const value = options.value;\n\n    if (!isObject(value)) {\n        return [new ValidationError(key, value, `object expected, ${getType(value)} found`)];\n    }\n\n    const functionValueSpec = options.valueSpec;\n    const functionType = unbundle(value.type);\n    let stopKeyType: string | undefined;\n    let stopDomainValues: Partial<Record<string | number, boolean>> = {};\n    let previousStopDomainValue: unknown;\n    let previousStopDomainZoom: number | undefined;\n\n    const isZoomFunction = functionType !== 'categorical' && value.property === undefined;\n    const isPropertyFunction = !isZoomFunction;\n    const isZoomAndPropertyFunction = hasObjectStops(value);\n\n    const errors = validateObject({\n        key: options.key,\n        value: options.value,\n        // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\n        valueSpec: options.styleSpec.function,\n        style: options.style,\n        styleSpec: options.styleSpec,\n        objectElementValidators: {\n            stops: validateFunctionStops,\n            default: validateFunctionDefault\n        }\n    });\n\n    if (functionType === 'identity' && isZoomFunction) {\n        errors.push(new ValidationError(options.key, options.value, 'missing required property \"property\"'));\n    }\n\n    if (functionType !== 'identity' && !value.stops) {\n        errors.push(new ValidationError(options.key, options.value, 'missing required property \"stops\"'));\n    }\n\n    if (functionType === 'exponential' && (functionValueSpec as {expression?: unknown}).expression && !supportsInterpolation(functionValueSpec as StylePropertySpecification)) {\n        errors.push(new ValidationError(options.key, options.value, 'exponential functions not supported'));\n    }\n\n    if (options.styleSpec.$version >= 8) {\n        if (isPropertyFunction && !supportsPropertyExpression(functionValueSpec as StylePropertySpecification)) {\n            errors.push(new ValidationError(options.key, options.value, 'property functions not supported'));\n        } else if (isZoomFunction && !supportsZoomExpression(functionValueSpec as StylePropertySpecification)) {\n            errors.push(new ValidationError(options.key, options.value, 'zoom functions not supported'));\n        }\n    }\n\n    if ((functionType === 'categorical' || isZoomAndPropertyFunction) && (value as {property?: string}).property === undefined) {\n        errors.push(new ValidationError(options.key, options.value, '\"property\" property is required'));\n    }\n\n    return errors;\n\n    function validateFunctionStops(options: FunctionValidatorOptions): ValidationError[] {\n        if (functionType === 'identity') {\n            return [new ValidationError(options.key, options.value, 'identity function may not have a \"stops\" property')];\n        }\n\n        let errors: ValidationError[] = [];\n        const value = options.value;\n\n        errors = errors.concat(validateArray({\n            key: options.key,\n            value,\n            valueSpec: options.valueSpec,\n            style: options.style,\n            styleSpec: options.styleSpec,\n            arrayElementValidator: validateFunctionStop\n        }));\n\n        if (Array.isArray(value) && value.length === 0) {\n            errors.push(new ValidationError(options.key, value, 'array must have at least one stop'));\n        }\n\n        return errors;\n    }\n\n    function validateFunctionStop(options: FunctionValidatorOptions): ValidationError[] {\n        let errors: ValidationError[] = [];\n        const value = options.value;\n        const key = options.key;\n\n        if (!Array.isArray(value)) {\n            return [new ValidationError(key, value, `array expected, ${getType(value)} found`)];\n        }\n\n        if (value.length !== 2) {\n            return [new ValidationError(key, value, `array length 2 expected, length ${value.length} found`)];\n        }\n\n        if (isZoomAndPropertyFunction) {\n            if (!isObject(value[0])) {\n                return [new ValidationError(key, value, `object expected, ${getType(value[0])} found`)];\n            }\n\n            const stopKey = value[0];\n            if (stopKey.zoom === undefined) {\n                return [new ValidationError(key, value, 'object stop key must have zoom')];\n            }\n            if (stopKey.value === undefined) {\n                return [new ValidationError(key, value, 'object stop key must have value')];\n            }\n\n            const nextStopDomainZoom = unbundle(stopKey.zoom);\n            if (typeof nextStopDomainZoom !== 'number') {\n                return [new ValidationError(key, stopKey.zoom, 'stop zoom values must be numbers')];\n            }\n\n            if (previousStopDomainZoom && previousStopDomainZoom > nextStopDomainZoom) {\n                return [new ValidationError(key, stopKey.zoom, 'stop zoom values must appear in ascending order')];\n            }\n            if (nextStopDomainZoom !== previousStopDomainZoom) {\n                previousStopDomainZoom = nextStopDomainZoom;\n                previousStopDomainValue = undefined;\n                stopDomainValues = {};\n            }\n            errors = errors.concat(validateObject({\n                key: `${key}[0]`,\n                value: value[0],\n                valueSpec: {zoom: {}},\n                style: options.style,\n                styleSpec: options.styleSpec,\n                objectElementValidators: {zoom: validateNumber, value: validateStopDomainValue}\n            }));\n        } else {\n            errors = errors.concat(validateStopDomainValue({\n                key: `${key}[0]`,\n                value: value[0],\n                valueSpec: {},\n                style: options.style,\n                styleSpec: options.styleSpec\n            }, value));\n        }\n\n        if (isExpression(deepUnbundle(value[1]))) {\n            return errors.concat([new ValidationError(`${key}[1]`, value[1], 'expressions are not allowed in function stops.')]);\n        }\n\n        return errors.concat(validate({\n            key: `${key}[1]`,\n            value: value[1],\n            valueSpec: functionValueSpec,\n            style: options.style,\n            styleSpec: options.styleSpec\n        }));\n    }\n\n    function validateStopDomainValue(options: FunctionValidatorOptions, stop?: unknown[]): ValidationError[] {\n        const type = getType(options.value);\n        const value = unbundle(options.value);\n\n        const reportValue = options.value !== null ? options.value : stop;\n\n        if (!stopKeyType) {\n            stopKeyType = type;\n        } else if (type !== stopKeyType) {\n            return [new ValidationError(options.key, reportValue, `${type} stop domain type must match previous stop domain type ${stopKeyType}`)];\n        }\n\n        if (type !== 'number' && type !== 'string' && type !== 'boolean' && typeof value !== 'number' && typeof value !== 'string' && typeof value !== 'boolean') {\n            return [new ValidationError(options.key, reportValue, 'stop domain value must be a number, string, or boolean')];\n        }\n\n        if (type !== 'number' && functionType !== 'categorical') {\n            let message = `number expected, ${type} found`;\n            if (supportsPropertyExpression(functionValueSpec as StylePropertySpecification) && functionType === undefined) {\n                message += '\\nIf you intended to use a categorical function, specify `\"type\": \"categorical\"`.';\n            }\n            return [new ValidationError(options.key, reportValue, message)];\n        }\n\n        if (functionType === 'categorical' && type === 'number' && (typeof value !== 'number' || !isFinite(value) || Math.floor(value) !== value)) {\n            // eslint-disable-next-line @typescript-eslint/no-base-to-string -- value narrowed to number|string|boolean by the check above\n            return [new ValidationError(options.key, reportValue, `integer expected, found ${String(value)}`)];\n        }\n\n        if (functionType !== 'categorical' && type === 'number' && typeof value === 'number' && typeof previousStopDomainValue === 'number' && previousStopDomainValue !== undefined && value < previousStopDomainValue) {\n            return [new ValidationError(options.key, reportValue, 'stop domain values must appear in ascending order')];\n        } else {\n            previousStopDomainValue = value;\n        }\n\n        if (functionType === 'categorical' && (value as string) in stopDomainValues) {\n            return [new ValidationError(options.key, reportValue, 'stop domain values must be unique')];\n        } else {\n            stopDomainValues[(value as string)] = true;\n        }\n\n        return [];\n    }\n\n    function validateFunctionDefault(options: FunctionValidatorOptions) {\n        return validate({\n            key: options.key,\n            value: options.value,\n            valueSpec: functionValueSpec,\n            style: options.style,\n            styleSpec: options.styleSpec\n        });\n    }\n}\n","import ValidationError from '../error/validation_error';\nimport {createExpression, createPropertyExpression} from '../expression/index';\nimport {deepUnbundle} from '../util/unbundle_jsonlint';\nimport {isStateConstant, isGlobalPropertyConstant, isFeatureConstant} from '../expression/is_constant';\nimport CompoundExpression from '../expression/compound_expression';\n\nimport type {StylePropertySpecification} from '../style-spec';\nimport type {Expression} from '../expression/expression';\nimport type {StyleReference} from '../reference/latest';\nimport type {StyleSpecification} from '../types';\n\nexport type ExpressionValidatorOptions = {\n    key: string;\n    value: unknown;\n    valueSpec?: Partial<StylePropertySpecification>;\n    propertyKey?: 'text-font';\n    propertyType?: 'layout' | 'paint' | 'filter';\n    style?: Partial<StyleSpecification>;\n    styleSpec?: StyleReference;\n    expressionContext?: 'property' | 'filter' | 'cluster-initial' | 'cluster-reduce' | 'cluster-map' | 'appearance';\n};\n\nexport default function validateExpression(options: ExpressionValidatorOptions): ValidationError[] {\n    const expression = (options.expressionContext === 'property' ? createPropertyExpression : createExpression)(deepUnbundle(options.value), options.valueSpec as StylePropertySpecification);\n    if (expression.result === 'error') {\n        return expression.value.map((error) => {\n            return new ValidationError(`${options.key}${error.key}`, options.value, error.message);\n        });\n    }\n\n    // eslint-disable-next-line @typescript-eslint/no-explicit-any, @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-unsafe-member-access\n    const expressionObj = (expression.value as any).expression || (expression.value as any)._styleExpression.expression;\n\n    if (options.expressionContext === 'property' && (options.propertyKey === 'text-font') &&\n        // eslint-disable-next-line @typescript-eslint/no-unsafe-call, @typescript-eslint/no-unsafe-member-access\n        !expressionObj.outputDefined()) {\n        return [new ValidationError(options.key, options.value, `Invalid data expression for \"${options.propertyKey}\". Output values must be contained as literals within the expression.`)];\n    }\n\n    if (options.expressionContext === 'property' && options.propertyType === 'layout' &&\n        // eslint-disable-next-line @typescript-eslint/no-unsafe-argument\n        (!isStateConstant(expressionObj))) {\n        return [new ValidationError(options.key, options.value, '\"feature-state\" data expressions are not supported with layout properties.')];\n    }\n\n    if (options.expressionContext === 'filter') {\n        // eslint-disable-next-line @typescript-eslint/no-unsafe-argument\n        return disallowedFilterParameters(expressionObj, options);\n    }\n\n    if (options.expressionContext === 'appearance') {\n        // eslint-disable-next-line @typescript-eslint/no-unsafe-argument\n        return checkDisallowedAppearancesParameters(expressionObj, options);\n    }\n\n    if (options.expressionContext && options.expressionContext.indexOf('cluster') === 0) {\n        // eslint-disable-next-line @typescript-eslint/no-unsafe-argument\n        if (!isGlobalPropertyConstant(expressionObj, ['zoom', 'feature-state'])) {\n            return [new ValidationError(options.key, options.value, '\"zoom\" and \"feature-state\" expressions are not supported with cluster properties.')];\n        }\n        // eslint-disable-next-line @typescript-eslint/no-unsafe-argument\n        if (options.expressionContext === 'cluster-initial' && !isFeatureConstant(expressionObj)) {\n            return [new ValidationError(options.key, options.value, 'Feature data expressions are not supported with initial expression part of cluster properties.')];\n        }\n    }\n\n    return [];\n}\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport function disallowedFilterParameters(e: Expression, options: any): ValidationError[] {\n    const disallowedParameters = new Set([\n        'zoom',\n        'feature-state',\n        'pitch',\n        'distance-from-center'\n    ]);\n\n    // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n    if (options.valueSpec && options.valueSpec.expression) {\n        // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n        for (const param of options.valueSpec.expression.parameters) {\n            // eslint-disable-next-line @typescript-eslint/no-unsafe-argument\n            disallowedParameters.delete(param);\n        }\n    }\n\n    if (disallowedParameters.size === 0) {\n        return [];\n    }\n    const errors: ValidationError[] = [];\n\n    if (e instanceof CompoundExpression) {\n        if (disallowedParameters.has(e.name)) {\n            // eslint-disable-next-line @typescript-eslint/no-unsafe-argument, @typescript-eslint/no-unsafe-member-access\n            return [new ValidationError(options.key, options.value, `[\"${e.name}\"] expression is not supported in a filter for a ${options.object.type} layer with id: ${options.object.id}`)];\n        }\n    }\n    e.eachChild((arg) => {\n        errors.push(...disallowedFilterParameters(arg, options));\n    });\n\n    return errors;\n}\n\nconst FEATURE_OPERATORS = new Set(['get', 'has', 'properties', 'geometry-type', 'id']);\nconst APPEARANCES_DISALLOWED_PARAMETERS = new Set([\n    'zoom', 'pitch', 'distance-from-center',\n    'feature', 'feature-state',\n    'measure-light',\n    'heatmap-density', 'line-progress',\n    'raster-value', 'raster-particle-speed', 'sky-radial-progress',\n]);\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nfunction checkDisallowedAppearancesParameters(e: Expression, options: any): ValidationError[] {\n    // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n    if (options.valueSpec && options.valueSpec.expression) {\n        // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n        for (const param of options.valueSpec.expression.parameters) {\n            // eslint-disable-next-line @typescript-eslint/no-unsafe-argument\n            APPEARANCES_DISALLOWED_PARAMETERS.delete(param);\n        }\n    }\n\n    if (APPEARANCES_DISALLOWED_PARAMETERS.size === 0) {\n        return [];\n    }\n    const errors: ValidationError[] = [];\n\n    if (e instanceof CompoundExpression) {\n        const param = FEATURE_OPERATORS.has(e.name) ? 'feature' : e.name;\n        if (APPEARANCES_DISALLOWED_PARAMETERS.has(param)) {\n            // eslint-disable-next-line @typescript-eslint/no-unsafe-argument, @typescript-eslint/no-unsafe-member-access\n            return [new ValidationError(options.key, options.value, `[\"${e.name}\"] is not an allowed parameter`)];\n        }\n    }\n    e.eachChild((arg) => {\n        errors.push(...checkDisallowedAppearancesParameters(arg, options));\n    });\n\n    return errors;\n}\n","import {getType, isBoolean} from '../util/get_type';\nimport ValidationError from '../error/validation_error';\n\ntype BooleanValidatorOptions = {\n    key: string;\n    value: unknown;\n};\n\nexport default function validateBoolean(options: BooleanValidatorOptions): ValidationError[] {\n    const value = options.value;\n    const key = options.key;\n    if (!isBoolean(value)) {\n        return [new ValidationError(key, value, `boolean expected, ${getType(value)} found`)];\n    }\n\n    return [];\n}\n","import ValidationError from '../error/validation_error';\nimport {getType, isString} from '../util/get_type';\nimport {unbundle} from '../util/unbundle_jsonlint';\nimport Color from '../util/color';\n\ntype ColorValidatorOptions = {\n    key: string;\n    value: unknown;\n};\n\nexport default function validateColor({key, value}: ColorValidatorOptions): ValidationError[] {\n    if (!isString(value)) {\n        return [new ValidationError(key, value, `color expected, ${getType(value)} found`)];\n    }\n\n    // `value` may be a jsonlint-lines-primitives `String` wrapper; unbundle to a\n    // primitive so `Color.parse`'s `typeof input === 'string'` check passes.\n    if (Color.parse(unbundle(value) as string) === undefined) {\n        return [new ValidationError(key, value, `color expected, \"${value}\" found`)];\n    }\n\n    return [];\n}\n","import ValidationError from '../error/validation_error';\nimport {unbundle} from '../util/unbundle_jsonlint';\n\nimport type {EnumPropertySpecification} from '../style-spec';\n\ntype EnumValidatorOptions = {\n    key: string;\n    value: unknown;\n    valueSpec: EnumPropertySpecification | {values: unknown[] | {[_: string]: unknown}};\n};\n\nexport default function validateEnum(options: EnumValidatorOptions): ValidationError[] {\n    const key = options.key;\n    const value = options.value;\n    const valueSpec = options.valueSpec;\n\n    const errors: ValidationError[] = [];\n    if (Array.isArray(valueSpec.values)) { // <=v7\n        if (!valueSpec.values.includes(unbundle(value))) {\n            // eslint-disable-next-line @typescript-eslint/no-base-to-string\n            errors.push(new ValidationError(key, value, `expected one of [${valueSpec.values.join(', ')}], ${JSON.stringify(value)} found`));\n        }\n    } else { // >=v8\n        if (!Object.keys(valueSpec.values).includes(unbundle(value) as string)) {\n            errors.push(new ValidationError(key, value, `expected one of [${Object.keys(valueSpec.values).join(', ')}], ${JSON.stringify(value)} found`));\n        }\n    }\n\n    return errors;\n}\n","import ValidationError from '../error/validation_error';\nimport validateExpression from './validate_expression';\nimport validateEnum from './validate_enum';\nimport {getType, isString, isNumber, isBoolean} from '../util/get_type';\nimport {unbundle, deepUnbundle} from '../util/unbundle_jsonlint';\nimport {isExpressionFilter} from '../feature_filter/index';\n\nimport type {StyleReference} from '../reference/latest';\nimport type {StyleSpecification} from '../types';\n\ntype FilterValidatorOptions = {\n    key: string;\n    value: unknown;\n    style: Partial<StyleSpecification>;\n    styleSpec: StyleReference;\n    layerType?: string;\n    object?: {\n        type?: string,\n        id?: string\n    }\n};\n\nexport default function validateFilter(options: FilterValidatorOptions): ValidationError[] {\n    if (isExpressionFilter(deepUnbundle(options.value))) {\n        // We default to a layerType of `fill` because that points to a non-dynamic filter definition within the style-spec.\n        const layerType = options.layerType || 'fill';\n\n        return validateExpression({\n            ...options,\n            expressionContext: 'filter' as const,\n            // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\n            valueSpec: options.styleSpec[`filter_${layerType}`]\n        });\n    } else {\n        return validateNonExpressionFilter(options);\n    }\n}\n\nfunction validateNonExpressionFilter(options: FilterValidatorOptions): ValidationError[] {\n    const value = options.value;\n    const key = options.key;\n\n    if (!Array.isArray(value)) {\n        return [new ValidationError(key, value, `array expected, ${getType(value)} found`)];\n    }\n\n    if (value.length < 1) {\n        return [new ValidationError(key, value, 'filter array must have at least 1 element')];\n    }\n\n    const styleSpec = options.styleSpec;\n    let errors: ValidationError[] = validateEnum({\n        key: `${key}[0]`,\n        value: value[0],\n        // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\n        valueSpec: styleSpec.filter_operator\n    });\n\n    const validate = () => {\n        if (value.length >= 2) {\n            if (!isString(value[1])) {\n                errors.push(new ValidationError(`${key}[1]`, value[1], `string expected, ${getType(value[1])} found`));\n            }\n        }\n        for (let i = 2; i < value.length; i++) {\n            if (unbundle(value[1]) === '$type') {\n                errors = errors.concat(validateEnum({\n                    key: `${key}[${i}]`,\n                    value: value[i],\n                    // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\n                    valueSpec: styleSpec.geometry_type\n                }));\n            } else if (!isString(value[i]) && !isNumber(value[i]) && !isBoolean(value[i])) {\n                errors.push(new ValidationError(`${key}[${i}]`, value[i], `string, number, or boolean expected, ${getType(value[i])} found.`));\n            }\n        }\n    };\n\n    switch (unbundle(value[0])) {\n    case '<':\n    case '<=':\n    case '>':\n    case '>=':\n        if (value.length >= 2 && unbundle(value[1]) === '$type') {\n            errors.push(new ValidationError(key, value, `\"$type\" cannot be use with operator \"${value[0]}\"`));\n        }\n        if (value.length !== 3) {\n            errors.push(new ValidationError(key, value, `filter array for operator \"${value[0]}\" must have 3 elements`));\n        }\n        validate();\n        break;\n\n    case '==':\n    case '!=':\n        if (value.length !== 3) {\n            errors.push(new ValidationError(key, value, `filter array for operator \"${value[0]}\" must have 3 elements`));\n        }\n        validate();\n        break;\n\n    case 'in':\n    case '!in':\n        validate();\n        break;\n\n    case 'any':\n    case 'all':\n    case 'none':\n        for (let i = 1; i < value.length; i++) {\n            errors = errors.concat(validateNonExpressionFilter({\n                key: `${key}[${i}]`,\n                value: value[i],\n                style: options.style,\n                styleSpec: options.styleSpec\n            }));\n        }\n        break;\n\n    case 'has':\n    case '!has':\n        if (value.length !== 2) {\n            errors.push(new ValidationError(key, value, `filter array for \"${value[0]}\" operator must have 2 elements`));\n        } else if (!isString(value[1])) {\n            errors.push(new ValidationError(`${key}[1]`, value[1], `string expected, ${getType(value[1])} found`));\n        }\n        break;\n    }\n\n    return errors;\n}\n","import validate from './validate';\nimport {default as ValidationError, ValidationWarning} from '../error/validation_error';\nimport {isString} from '../util/get_type';\nimport {isFunction} from '../function/index';\nimport {unbundle, deepUnbundle} from '../util/unbundle_jsonlint';\nimport {supportsLightExpression, supportsPropertyExpression, supportsZoomExpression, TRANSITION_KEY_RE, USE_THEME_KEY_RE} from '../util/properties';\nimport {isGlobalPropertyConstant, isFeatureConstant, isStateConstant} from '../expression/is_constant';\nimport {createPropertyExpression, isExpression} from '../expression/index';\n\nimport type {Expression} from '../expression/expression';\nimport type {StyleReference} from '../reference/latest';\nimport type {StylePropertySpecification} from '../style-spec';\nimport type {StyleSpecification, LayerSpecification} from '../types';\n\nconst TOKEN_PATTERN_RE = /^{([^}]+)}$/;\n\nexport type PropertyValidatorOptions = {\n    key: string;\n    value: unknown;\n    valueSpec?: StylePropertySpecification;\n    style: Partial<StyleSpecification>;\n    styleSpec: StyleReference;\n    objectKey?: string;\n    layerType: string;\n    layer?: Partial<LayerSpecification>;\n};\n\nexport default function validateProperty(options: PropertyValidatorOptions, propertyType: string): ValidationError[] {\n    const key = options.key;\n    const style = options.style;\n    const layer = options.layer;\n    const styleSpec = options.styleSpec;\n    const value = options.value;\n    const propertyKey = options.objectKey;\n    const layerSpec = styleSpec[`${propertyType}_${options.layerType}`] as Record<string, StylePropertySpecification> | undefined;\n\n    if (!layerSpec) return [];\n\n    const useThemeMatch = propertyKey.match(USE_THEME_KEY_RE);\n    if (useThemeMatch && layerSpec[useThemeMatch[1]]) {\n        if (isExpression(deepUnbundle(value))) {\n            const errors: ValidationError[] = [];\n            return errors.concat(validate({\n                key,\n                value,\n                valueSpec: {\n                    type: 'string',\n                    expression: {\n                        interpolated: false,\n                        parameters: ['zoom', 'feature']\n                    },\n                    'property-type': 'data-driven'\n                },\n                style,\n                styleSpec,\n                expressionContext: 'property',\n                propertyType,\n                propertyKey\n            }));\n        }\n\n        return validate({\n            key,\n            value,\n            valueSpec: {type: 'string'},\n            style,\n            styleSpec\n        });\n    }\n\n    const transitionMatch = propertyKey.match(TRANSITION_KEY_RE);\n    if (propertyType === 'paint' && transitionMatch && layerSpec[transitionMatch[1]] && layerSpec[transitionMatch[1]].transition) {\n        return validate({\n            key,\n            value,\n            // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\n            valueSpec: styleSpec.transition,\n            style,\n            styleSpec\n        });\n    }\n\n    const valueSpec = options.valueSpec || layerSpec[propertyKey];\n    if (!valueSpec) {\n        return [new ValidationWarning(key, value, `unknown property \"${propertyKey}\"`)];\n    }\n\n    let tokenMatch: RegExpExecArray | undefined;\n    if (isString(value) && supportsPropertyExpression(valueSpec) && !valueSpec.tokens && (tokenMatch = TOKEN_PATTERN_RE.exec(value))) {\n        const example = `\\`{ \"type\": \"identity\", \"property\": ${tokenMatch ? JSON.stringify(tokenMatch[1]) : '\"_\"'} }\\``;\n        return [new ValidationError(\n            key, value,\n            `\"${propertyKey}\" does not support interpolation syntax\\n` +\n                `Use an identity property function instead: ${example}.`)];\n    }\n\n    const errors: ValidationError[] = [];\n\n    if (options.layerType === 'symbol') {\n        if (propertyKey === 'text-field' && style && !style.glyphs && !style.imports) {\n            errors.push(new ValidationError(key, value, 'use of \"text-field\" requires a style \"glyphs\" property'));\n        }\n        if (propertyKey === 'text-font' && isFunction(deepUnbundle(value)) && unbundle((value as {type: unknown}).type) === 'identity') {\n            errors.push(new ValidationError(key, value, '\"text-font\" does not support identity functions'));\n        }\n    } else if (options.layerType === 'model' && propertyType === 'paint' && layer && layer.layout && Object.hasOwn(layer.layout, 'model-id')) {\n        if (supportsPropertyExpression(valueSpec) && (supportsLightExpression(valueSpec) || supportsZoomExpression(valueSpec))) {\n            // Performance related style spec limitation: zoom and light expressions are not allowed for e.g. trees.\n            const expression = createPropertyExpression(deepUnbundle(value), valueSpec);\n\n            const expressionValue = expression.value as {expression?: Expression} | {_styleExpression?: {expression?: Expression}};\n            const expressionObj = ('expression' in expressionValue && expressionValue.expression) ||\n                                  ('_styleExpression' in expressionValue && expressionValue._styleExpression && expressionValue._styleExpression.expression);\n\n            if (expressionObj && !isGlobalPropertyConstant(expressionObj, ['measure-light'])) {\n                if (propertyKey !== 'model-emissive-strength' || (!isFeatureConstant(expressionObj) || !isStateConstant(expressionObj))) {\n                    errors.push(new ValidationError(key, value, `${propertyKey} does not support measure-light expressions when the model layer source is vector tile or GeoJSON.`));\n                }\n            }\n        }\n    }\n\n    return errors.concat(validate({\n        key: options.key,\n        value,\n        valueSpec,\n        style,\n        styleSpec,\n        expressionContext: 'property',\n        propertyType,\n        propertyKey\n    }));\n}\n","import validateObject from './validate_object';\nimport ValidationError from '../error/validation_error';\nimport validateProperty from './validate_property';\nimport {unbundle} from '../util/unbundle_jsonlint';\nimport validateExpression from './validate_expression';\nimport latest from '../reference/latest';\n\nimport type {StyleSpecification, LayerSpecification, AppearanceSpecification} from '../types';\nimport type {StyleReference} from '../reference/latest';\nimport type {StylePropertySpecification} from '../style-spec';\n\nexport type AppearanceValidatorOptions = {\n    key: string;\n    value: unknown;\n    style: Partial<StyleSpecification>;\n    styleSpec: StyleReference;\n    object?: object;\n    objectKey?: string;\n    layer: LayerSpecification;\n    layerType: string;\n};\n\nexport default function validateAppearance(options: AppearanceValidatorOptions): Array<ValidationError> {\n    const {key, layer, layerType} = options;\n    const value = unbundle(options.value) as AppearanceSpecification;\n    const name = unbundle(value.name);\n    const condition = unbundle(value.condition);\n\n    const errors = validateObject({\n        key,\n        value,\n        valueSpec: options.styleSpec.appearance as object,\n        style: options.style,\n        styleSpec: options.styleSpec,\n        objectElementValidators: {\n            condition: (options) => validateCondition({layer, layerType, ...options}),\n            properties: (options) => validateProperties({layer, layerType, ...options}),\n        }\n    });\n\n    if (name !== 'hidden' && condition === undefined) {\n        errors.push(new ValidationError(options.key, 'name', `Appearance with name different than \"hidden\" must have a condition`));\n    }\n\n    return errors;\n}\n\nfunction validateProperties(options: AppearanceValidatorOptions): Array<ValidationError> {\n    const errors: Array<ValidationError> = [];\n\n    const {styleSpec, layer, layerType} = options;\n\n    const paintProperties = styleSpec[`paint_${layerType}`] as Record<string, StylePropertySpecification> | undefined;\n    const layoutProperties = styleSpec[`layout_${layerType}`] as Record<string, StylePropertySpecification> | undefined;\n    const properties = options.object[options.objectKey] as object;\n\n    for (const propertyKey in properties) {\n        const propertyType =\n            propertyKey in paintProperties ? 'paint' :\n            propertyKey in layoutProperties ? 'layout' :\n            undefined;\n\n        if (!propertyType) {\n            errors.push(new ValidationError(options.key, propertyKey, `unknown property \"${propertyKey}\" for layer type \"${layerType}\"`));\n            continue;\n        }\n\n        const propertyValidationOptions = {\n            ...options,\n            key: `${options.key}.${propertyKey}`,\n            object: properties,\n            objectKey: propertyKey,\n            layer,\n            layerType,\n            value: properties[propertyKey] as unknown,\n            valueSpec: (propertyType === 'paint' ? paintProperties[propertyKey] : layoutProperties[propertyKey]),\n        };\n\n        errors.push(...validateProperty(propertyValidationOptions, propertyType));\n    }\n\n    return errors;\n}\n\nfunction validateCondition(options: AppearanceValidatorOptions): Array<ValidationError> {\n    const errors: Array<ValidationError> = [];\n\n    const appearance = options.object as AppearanceSpecification;\n    const condition = appearance.condition;\n\n    errors.push(...validateExpression({\n        key: options.key,\n        value: condition,\n        valueSpec: (latest['appearance'] as Record<string, unknown>)['condition'],\n        expressionContext: 'appearance'\n    }));\n\n    return errors;\n}\n","import validateProperty from './validate_property';\n\nimport type ValidationError from '../error/validation_error';\nimport type {PropertyValidatorOptions} from './validate_property';\n\nexport default function validatePaintProperty(options: PropertyValidatorOptions): ValidationError[] {\n    return validateProperty(options, 'paint');\n}\n","import validateProperty from './validate_property';\n\nimport type ValidationError from '../error/validation_error';\nimport type {PropertyValidatorOptions} from './validate_property';\n\nexport default function validateLayoutProperty(options: PropertyValidatorOptions): ValidationError[] {\n    return validateProperty(options, 'layout');\n}\n","import ValidationError from '../error/validation_error';\nimport {unbundle} from '../util/unbundle_jsonlint';\nimport validateArray from './validate_array';\nimport validateObject from './validate_object';\nimport validateFilter from './validate_filter';\nimport validateAppearance, {type AppearanceValidatorOptions} from './validate_appearance';\nimport validatePaintProperty from './validate_paint_property';\nimport validateLayoutProperty from './validate_layout_property';\nimport validateSpec from './validate';\nimport {isObject, isString} from '../util/get_type';\n\nimport type {StyleReference} from '../reference/latest';\nimport type {PropertyValidatorOptions} from './validate_property';\nimport type {StyleSpecification, LayerSpecification, GeoJSONSourceSpecification} from '../types';\n\ntype LayerValidatorOptions = {\n    key: string;\n    value: unknown;\n    style: Partial<StyleSpecification>;\n    styleSpec: StyleReference;\n    arrayIndex: number;\n};\n\nexport default function validateLayer(options: LayerValidatorOptions): ValidationError[] {\n    let errors: ValidationError[] = [];\n\n    const layer = options.value;\n    const key = options.key;\n    const style = options.style;\n    const styleSpec = options.styleSpec;\n\n    if (!isObject(layer)) {\n        return [new ValidationError(key, layer, `object expected`)];\n    }\n\n    if (!layer.type && !layer.ref) {\n        errors.push(new ValidationError(key, layer, 'either \"type\" or \"ref\" is required'));\n    }\n\n    let type = unbundle(layer.type) as string;\n    const ref = unbundle(layer.ref);\n\n    if (layer.id) {\n        const layerId = unbundle(layer.id) as string;\n        for (let i = 0; i < options.arrayIndex; i++) {\n            const otherLayer = style.layers[i];\n            if (unbundle(otherLayer.id) === layerId) {\n                errors.push(new ValidationError(key, layer.id, `duplicate layer id \"${layerId}\", previously used at line ${(otherLayer.id as {__line__?: number}).__line__}`));\n            }\n        }\n    }\n\n    if ('ref' in layer) {\n        ['type', 'source', 'source-layer', 'filter', 'layout'].forEach((p) => {\n            if (p in layer) {\n                errors.push(new ValidationError(key, layer[p], `\"${p}\" is prohibited for ref layers`));\n            }\n        });\n\n        let parent: LayerSpecification | undefined;\n\n        style.layers.forEach((layer) => {\n            if (unbundle(layer.id) === ref) parent = layer;\n        });\n\n        if (!parent) {\n            if (typeof ref === 'string')\n                errors.push(new ValidationError(key, layer.ref, `ref layer \"${ref}\" not found`));\n        } else if ((parent as LayerSpecification & {ref?: unknown}).ref) {\n            errors.push(new ValidationError(key, layer.ref, 'ref cannot reference another ref layer'));\n        } else {\n            type = unbundle(parent.type) as string;\n        }\n    } else if (!(type === 'background' || type === 'sky' || type === 'slot')) {\n        if (!layer.source) {\n            errors.push(new ValidationError(key, layer, 'missing required property \"source\"'));\n        } else if (!isString(layer.source)) {\n            errors.push(new ValidationError(`${key}.source`, layer.source, '\"source\" must be a string'));\n        } else {\n            // Object.hasOwn: a bare lookup like `style.sources[layer.source]` would\n            // find inherited keys from Object.prototype (e.g. \"constructor\", \"toString\")\n            // and treat them as valid sources.\n            const source = style.sources && Object.hasOwn(style.sources, layer.source) ? style.sources[layer.source] : undefined;\n            const sourceType = source && unbundle(source.type);\n            if (!source) {\n                errors.push(new ValidationError(key, layer.source, `source \"${layer.source}\" not found`));\n            } else if (sourceType === 'vector' && type === 'raster') {\n                errors.push(new ValidationError(key, layer.source, `layer \"${layer.id as string}\" requires a raster source`));\n            } else if (sourceType === 'raster' && type !== 'raster') {\n                errors.push(new ValidationError(key, layer.source, `layer \"${layer.id as string}\" requires a vector source`));\n            } else if (sourceType === 'vector' && !layer['source-layer']) {\n                errors.push(new ValidationError(key, layer, `layer \"${layer.id as string}\" must specify a \"source-layer\"`));\n            } else if (sourceType === 'raster-dem' && type !== 'hillshade') {\n                errors.push(new ValidationError(key, layer.source, 'raster-dem source can only be used with layer type \\'hillshade\\'.'));\n            } else if (sourceType === 'raster-array' && !['raster', 'raster-particle'].includes(type)) {\n                errors.push(new ValidationError(key, layer.source, `raster-array source can only be used with layer type \\'raster\\'.`));\n            } else if (type === 'line' && layer.paint && layer.paint['line-gradient'] &&\n                    (sourceType === 'geojson' && !(source as GeoJSONSourceSpecification).lineMetrics)) {\n                errors.push(new ValidationError(key, layer, `layer \"${layer.id as string}\" specifies a line-gradient, which requires the GeoJSON source to have \\`lineMetrics\\` enabled.`));\n            } else if (type === 'line' && layer.paint && layer.paint['line-trim-offset'] &&\n                    (sourceType === 'geojson' && !(source as GeoJSONSourceSpecification).lineMetrics)) {\n                errors.push(new ValidationError(key, layer, `layer \"${layer.id as string}\" specifies a line-trim-offset, which requires the GeoJSON source to have \\`lineMetrics\\` enabled.`));\n            } else if (type === 'raster-particle' && sourceType !== 'raster-array') {\n                errors.push(new ValidationError(key, layer.source, `layer \"${layer.id as string}\" requires a \\'raster-array\\' source.`));\n            }\n        }\n    }\n\n    errors = errors.concat(validateObject({\n        key,\n        value: layer,\n        // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\n        valueSpec: styleSpec.layer,\n        style: options.style,\n        styleSpec: options.styleSpec,\n        objectElementValidators: {\n            '*'() {\n                return [];\n            },\n            // We don't want to enforce the spec's `\"requires\": true` for backward compatibility with refs;\n            // the actual requirement is validated above. See https://github.com/mapbox/mapbox-gl-js/issues/5772.\n            type() {\n                return validateSpec({\n                    key: `${key}.type`,\n                    value: layer.type,\n                    // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-unsafe-member-access\n                    valueSpec: styleSpec.layer.type,\n                    style: options.style,\n                    styleSpec: options.styleSpec,\n                    object: layer,\n                    objectKey: 'type'\n                });\n            },\n            filter(options) {\n                return validateFilter({layerType: type, ...options});\n            },\n            layout(options) {\n                return validateObject({\n                    layer: layer as LayerSpecification,\n                    key: options.key,\n                    value: options.value,\n                    valueSpec: {},\n                    style: options.style,\n                    styleSpec: options.styleSpec,\n                    objectElementValidators: {\n                        '*'(options: PropertyValidatorOptions) {\n                            return validateLayoutProperty({layerType: type, ...options});\n                        }\n                    }\n                });\n            },\n            paint(options) {\n                return validateObject({\n                    layer: layer as LayerSpecification,\n                    key: options.key,\n                    value: options.value,\n                    valueSpec: {},\n                    style: options.style,\n                    styleSpec: options.styleSpec,\n                    objectElementValidators: {\n                        '*'(options: PropertyValidatorOptions) {\n                            return validatePaintProperty({layerType: type, layer, ...options});\n                        }\n                    }\n                });\n            },\n            appearances(options) {\n                const validationErrors = validateArray({\n                    key: options.key,\n                    value: options.value,\n\n                    valueSpec: options.valueSpec,\n                    style: options.style,\n                    styleSpec: options.styleSpec,\n                    arrayElementValidator: (options) => validateAppearance(({layerType: type, layer, ...(options as object)}) as AppearanceValidatorOptions)\n                });\n                // Check non-repeated names on a given layer\n                const appearances = Array.isArray(options.value) ? options.value : [];\n                const dedupedNames = new Set<string>();\n                appearances.forEach((a, index) => {\n                    // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n                    const name: string | undefined = unbundle(a.name) as string | undefined;\n                    if (name) {\n                        if (dedupedNames.has(name)) {\n                            const layerId = unbundle((layer as LayerSpecification).id) as string;\n                            validationErrors.push(new ValidationError(options.key, name, `Duplicated appearance name \"${name}\" for layer \"${layerId}\"`));\n                        } else {\n                            dedupedNames.add(name);\n                        }\n                    }\n                });\n\n                return validationErrors;\n            }\n        }\n    }));\n\n    return errors;\n}\n","import {getType, isString} from '../util/get_type';\nimport ValidationError from '../error/validation_error';\n\ntype StringValidatorOptions = {\n    key: string;\n    value: unknown;\n};\n\nexport default function validateString({key, value}: StringValidatorOptions): ValidationError[] {\n    if (isString(value)) {\n        return [];\n    }\n\n    return [new ValidationError(key, value, `string expected, ${getType(value)} found`)];\n}\n","import {default as ValidationError, ValidationWarning} from '../error/validation_error';\nimport {unbundle, deepUnbundle} from '../util/unbundle_jsonlint';\nimport validateObject from './validate_object';\nimport validateEnum from './validate_enum';\nimport validateExpression from './validate_expression';\nimport validateString from './validate_string';\nimport {getType, isObject, isString} from '../util/get_type';\nimport {createExpression} from '../expression/index';\nimport * as isConstant from '../expression/is_constant';\n\nimport type {StyleReference} from '../reference/latest';\nimport type {StyleSpecification} from '../types';\n\nconst objectElementValidators = {\n    promoteId: validatePromoteId\n};\n\ntype SourceValidatorOptions = {\n    key: string;\n    value: unknown;\n    style: Partial<StyleSpecification>;\n    styleSpec: StyleReference;\n};\n\nexport default function validateSource(options: SourceValidatorOptions): ValidationError[] {\n    const value = options.value;\n    const key = options.key;\n    const styleSpec = options.styleSpec;\n    const style = options.style;\n\n    if (!isObject(value)) {\n        return [new ValidationError(key, value, `object expected, ${getType(value)} found`)];\n    }\n\n    if (!('type' in value)) {\n        return [new ValidationError(key, value, '\"type\" is required')];\n    }\n\n    const type = unbundle(value.type) as string;\n    let errors: ValidationError[] = [];\n\n    if (['vector', 'raster', 'raster-dem', 'raster-array'].includes(type)) {\n        if (!('url' in value) && !('tiles' in value)) {\n            errors.push(new ValidationWarning(key, value, 'Either \"url\" or \"tiles\" is required.'));\n        }\n    }\n\n    switch (type) {\n    case 'vector':\n    case 'raster':\n    case 'raster-dem':\n    case 'raster-array':\n        errors = errors.concat(validateObject({\n            key,\n            value,\n            // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\n            valueSpec: styleSpec[`source_${type.replace('-', '_')}`],\n            style: options.style,\n            styleSpec,\n            objectElementValidators\n        }));\n        return errors;\n    case 'geojson':\n        errors = validateObject({\n            key,\n            value,\n            // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\n            valueSpec: styleSpec.source_geojson,\n            style,\n            styleSpec,\n            objectElementValidators\n        });\n\n        if ('cluster' in value && 'clusterProperties' in value) {\n            if (!isObject(value.clusterProperties)) {\n                return [new ValidationError(`${key}.clusterProperties`, value, `object expected, ${getType(value)} found`)];\n            }\n\n            for (const prop in value.clusterProperties) {\n                const propValue = value.clusterProperties[prop];\n                if (!Array.isArray(propValue)) {\n                    return [new ValidationError(`${key}.clusterProperties.${prop}`, propValue, 'array expected')];\n                }\n\n                // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\n                const [operator, mapExpr] = propValue;\n                // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\n                const reduceExpr = typeof operator === 'string' ? [operator, ['accumulated'], ['get', prop]] : operator;\n\n                errors.push(...validateExpression({\n                    key: `${key}.${prop}.map`,\n                    value: mapExpr,\n                    expressionContext: 'cluster-map'\n                }));\n\n                errors.push(...validateExpression({\n                    key: `${key}.${prop}.reduce`,\n                    value: reduceExpr,\n                    expressionContext: 'cluster-reduce'\n                }));\n            }\n        }\n\n        return errors;\n    case 'video':\n        return validateObject({\n            key,\n            value,\n            // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\n            valueSpec: styleSpec.source_video,\n            style,\n            styleSpec\n        });\n\n    case 'image':\n        return validateObject({\n            key,\n            value,\n            // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\n            valueSpec: styleSpec.source_image,\n            style,\n            styleSpec\n        });\n\n    case 'canvas':\n        return [new ValidationError(key, null, `Please use runtime APIs to add canvas sources, rather than including them in stylesheets.`, 'source.canvas')];\n\n    default:\n        return validateEnum({\n            key: `${key}.type`,\n            value: (value as {type: unknown}).type,\n            valueSpec: {values: getSourceTypeValues(styleSpec)}\n        });\n    }\n}\n\nfunction getSourceTypeValues(styleSpec: StyleReference): string[] {\n    const sourceArray = styleSpec.source as string[];\n    return sourceArray.reduce((memo: string[], source: string) => {\n\n        const sourceType = (styleSpec as Record<string, unknown>)[source] as {type: {type: string; values?: Record<string, unknown>}};\n        if (sourceType.type.type === 'enum') {\n            memo = memo.concat(Object.keys(sourceType.type.values || {}));\n        }\n        return memo;\n    }, []);\n}\n\ntype PromoteIdValidatorOptions = {\n    key: string;\n    value: unknown;\n};\n\nfunction validatePromoteId({key, value}: PromoteIdValidatorOptions) {\n    if (isString(value)) {\n        return validateString({key, value});\n    }\n\n    if (Array.isArray(value)) {\n        const errors: ValidationError[] = [];\n        const unbundledValue = deepUnbundle(value);\n        const expression = createExpression(unbundledValue);\n        if (expression.result === 'error') {\n            expression.value.forEach((err) => {\n                errors.push(new ValidationError(`${key}${err.key}`, null, `${err.message}`));\n            });\n            return errors;\n        }\n\n        const parsed = expression.value.expression;\n        const onlyFeatureDependent = isConstant.isGlobalPropertyConstant(parsed, ['zoom', 'heatmap-density', 'line-progress', 'raster-value', 'sky-radial-progress', 'accumulated', 'is-supported-script', 'pitch', 'distance-from-center', 'measure-light', 'raster-particle-speed']);\n        if (!onlyFeatureDependent) {\n            errors.push(new ValidationError(`${key}`, null, 'promoteId expression should be only feature dependent'));\n        }\n\n        return errors;\n    }\n\n    if (!isObject(value)) {\n        return [new ValidationError(key, value, `string, expression or object expected, \"${getType(value)}\" found`)];\n    }\n\n    const errors: ValidationError[] = [];\n    for (const prop in (value as object)) {\n        errors.push(...validatePromoteId({key: `${key}.${prop}`, value: value[prop]}));\n    }\n\n    return errors;\n}\n","import ValidationError from '../error/validation_error';\nimport {getType, isString} from '../util/get_type';\n\nimport type {StyleReference} from '../reference/latest';\nimport type {StyleSpecification} from '../types';\n\n// Allow any URL, use dummy base, if it's a relative URL\nexport function isValidUrl(str: string, allowRelativeUrls: boolean): boolean {\n    const isRelative = !str.includes('://');\n    try {\n        new URL(str, isRelative && allowRelativeUrls ? 'http://example.com' : undefined);\n        return true;\n    } catch (_: unknown) {\n        return false;\n    }\n}\n\ntype ModelValidatorOptions = {\n    key: string;\n    value: unknown;\n    style: Partial<StyleSpecification>;\n    styleSpec: StyleReference;\n};\n\nexport default function validateModel(options: ModelValidatorOptions): ValidationError[] {\n    const url = options.value;\n\n    if (!url) {\n        return [];\n    }\n\n    if (!isString(url)) {\n        return [new ValidationError(options.key, url, `string expected, \"${getType(url)}\" found`)];\n    }\n\n    if (!isValidUrl(url, true)) {\n        return [new ValidationError(options.key, url, `invalid url \"${url}\"`)];\n    }\n\n    return [];\n}\n","import ValidationError from '../error/validation_error';\nimport {getType, isObject} from '../util/get_type';\nimport validate from './validate';\nimport {TRANSITION_KEY_RE, USE_THEME_KEY_RE} from '../util/properties';\n\nimport type {StyleReference} from '../reference/latest';\nimport type {StyleSpecification} from '../types';\n\ntype LightValidatorOptions = {\n    key: string;\n    value: unknown;\n    style: Partial<StyleSpecification>;\n    styleSpec: StyleReference;\n};\n\nexport default function validateLight(options: LightValidatorOptions): ValidationError[] {\n    const light = options.value;\n    const styleSpec = options.styleSpec;\n    // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\n    const lightSpec = styleSpec.light;\n    const style = options.style;\n\n    if (light === undefined) {\n        return [];\n    }\n\n    if (!isObject(light)) {\n        return [new ValidationError('light', light, `object expected, ${getType(light)} found`)];\n    }\n\n    let errors: ValidationError[] = [];\n    for (const key in light) {\n        const transitionMatch = key.match(TRANSITION_KEY_RE);\n        const useThemeMatch = key.match(USE_THEME_KEY_RE);\n\n        // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n        if (useThemeMatch && lightSpec[useThemeMatch[1]]) {\n            errors = errors.concat(validate({\n                key,\n                value: light[key],\n                valueSpec: {type: 'string'},\n                style,\n                styleSpec\n            }));\n        // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n        } else if (transitionMatch && lightSpec[transitionMatch[1]] && lightSpec[transitionMatch[1]].transition) {\n            errors = errors.concat(validate({\n                key,\n                value: light[key],\n                // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\n                valueSpec: styleSpec.transition,\n                style,\n                styleSpec\n            }));\n        // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n        } else if (lightSpec[key]) {\n            errors = errors.concat(validate({\n                key,\n                value: light[key],\n                // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-unsafe-member-access\n                valueSpec: lightSpec[key],\n                style,\n                styleSpec\n            }));\n        } else {\n            errors = errors.concat([new ValidationError(key, light[key], `unknown property \"${key}\"`)]);\n        }\n    }\n\n    return errors;\n}\n","import {default as ValidationError, ValidationWarning} from '../error/validation_error';\nimport {getType, isObject, isString} from '../util/get_type';\nimport validate from './validate';\nimport {unbundle} from '../util/unbundle_jsonlint';\nimport {TRANSITION_KEY_RE, USE_THEME_KEY_RE} from '../util/properties';\n\nimport type {StyleReference} from '../reference/latest';\nimport type {StyleSpecification} from '../types';\n\ntype LightsValidatorOptions = {\n    key: string;\n    value: unknown;\n    style: Partial<StyleSpecification>;\n    styleSpec: StyleReference;\n    arrayIndex: number;\n};\n\nexport default function validateLights(options: LightsValidatorOptions): ValidationError[] {\n    const light = options.value;\n\n    if (!light) {\n        return [];\n    }\n\n    const key = options.key;\n    if (!isObject(light)) {\n        return [new ValidationError(key, light, `object expected, ${getType(light)} found`)];\n    }\n\n    let errors: ValidationError[] = [];\n    const styleSpec = options.styleSpec;\n    // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\n    const lightSpec = styleSpec['light-3d'];\n    const style = options.style;\n    const lights = options.style.lights;\n\n    for (const prop of ['type', 'id'] as const) {\n        if (!(prop in light)) {\n            errors = errors.concat([new ValidationError(key, light, `missing property \"${prop}\"`)]);\n            return errors;\n        }\n    }\n\n    if (!isString(light.type)) {\n        errors = errors.concat([new ValidationError(`${key}.type`, light.type, `string expected`)]);\n        return errors;\n    }\n\n    if (lights) {\n        for (let i = 0; i < options.arrayIndex; i++) {\n            const lightType = unbundle(light.type);\n            const otherLight = lights[i];\n            if (unbundle(otherLight.type) === lightType) {\n                errors.push(new ValidationError(key, light.id, `duplicate light type \"${light.type}\", previously defined at line ${(otherLight.id as {__line__?: number}).__line__}`));\n            }\n        }\n    }\n\n    const lightType = `properties_light_${light.type}`;\n    if (!(lightType in styleSpec)) {\n        errors = errors.concat([new ValidationError(`${key}.type`, light, `Invalid light type ${light.type}`)]);\n        return errors;\n    }\n\n    // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\n    const lightPropertySpec = styleSpec[lightType];\n\n    for (const key in light) {\n        if (key === 'properties') {\n            const properties = light[key];\n            if (!isObject(properties)) {\n                errors = errors.concat([new ValidationError('properties', properties, `object expected, ${getType(properties)} found`)]);\n                return errors;\n            }\n            for (const propertyKey in properties) {\n                const transitionMatch = propertyKey.match(TRANSITION_KEY_RE);\n                const useThemeMatch = propertyKey.match(USE_THEME_KEY_RE);\n\n                // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n                if (useThemeMatch && lightPropertySpec[useThemeMatch[1]]) {\n                    errors = errors.concat(validate({\n                        key,\n                        value: properties[propertyKey],\n                        valueSpec: {type: 'string'},\n                        style,\n                        styleSpec\n                    }));\n                // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n                } else if (transitionMatch && lightPropertySpec[transitionMatch[1]] && lightPropertySpec[transitionMatch[1]].transition) {\n                    errors = errors.concat(validate({\n                        key,\n                        value: light[key],\n                        // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\n                        valueSpec: styleSpec.transition,\n                        style,\n                        styleSpec\n                    }));\n                // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n                } else if (!lightPropertySpec[propertyKey]) {\n                    errors = errors.concat([new ValidationWarning(options.key, properties[propertyKey], `unknown property \"${propertyKey}\"`)]);\n                } else {\n                    errors = errors.concat(validate({\n                        key: propertyKey,\n                        value: properties[propertyKey],\n                        // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-unsafe-member-access\n                        valueSpec: lightPropertySpec[propertyKey],\n                        style,\n                        styleSpec\n                    }));\n                }\n            }\n        } else {\n            // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n            if (lightSpec[key]) {\n                errors = errors.concat(validate({\n                    key,\n                    value: light[key],\n                    // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-unsafe-member-access\n                    valueSpec: lightSpec[key],\n                    style,\n                    styleSpec\n                }));\n            } else {\n                errors = errors.concat([new ValidationWarning(key, light[key], `unknown property \"${key}\"`)]);\n            }\n        }\n    }\n\n    return errors;\n}\n","import {default as ValidationError, ValidationWarning} from '../error/validation_error';\nimport validate from './validate';\nimport {getType, isObject, isString} from '../util/get_type';\nimport {unbundle} from '../util/unbundle_jsonlint';\nimport {TRANSITION_KEY_RE, USE_THEME_KEY_RE} from '../util/properties';\n\nimport type {StyleReference} from '../reference/latest';\nimport type {StyleSpecification} from '../types';\n\ntype TerrainValidatorOptions = {\n    key: string;\n    value: unknown;\n    styleSpec: StyleReference;\n    style: Partial<StyleSpecification>;\n};\n\nexport default function validateTerrain(options: TerrainValidatorOptions): ValidationError[] {\n    const terrain = options.value;\n    const key = options.key;\n    const style = options.style;\n    const styleSpec = options.styleSpec;\n    // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\n    const terrainSpec = styleSpec.terrain;\n\n    if (terrain == null) {\n        return [];\n    }\n\n    if (!isObject(terrain)) {\n        return [new ValidationError('terrain', terrain, `object expected, ${getType(terrain)} found`)];\n    }\n\n    let errors: ValidationError[] = [];\n    for (const key in terrain) {\n        const transitionMatch = key.match(TRANSITION_KEY_RE);\n        const useThemeMatch = key.match(USE_THEME_KEY_RE);\n\n        // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n        if (useThemeMatch && terrainSpec[useThemeMatch[1]]) {\n            errors = errors.concat(validate({\n                key,\n                value: terrain[key],\n                valueSpec: {type: 'string'},\n                style,\n                styleSpec\n            }));\n        // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n        } else if (transitionMatch && terrainSpec[transitionMatch[1]] && terrainSpec[transitionMatch[1]].transition) {\n            errors = errors.concat(validate({\n                key,\n                value: terrain[key],\n                // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\n                valueSpec: styleSpec.transition,\n                style,\n                styleSpec\n            }));\n        // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n        } else if (terrainSpec[key]) {\n            errors = errors.concat(validate({\n                key,\n                value: terrain[key],\n                // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-unsafe-member-access\n                valueSpec: terrainSpec[key],\n                style,\n                styleSpec\n            }));\n        } else {\n            errors = errors.concat([new ValidationWarning(key, terrain[key], `unknown property \"${key}\"`)]);\n        }\n    }\n\n    if (!terrain.source) {\n        errors.push(new ValidationError(key, terrain, `terrain is missing required property \"source\"`));\n    } else if (!isString(terrain.source)) {\n        errors.push(new ValidationError(`${key}.source`, terrain.source, `source must be a string`));\n    } else {\n        const source = style.sources && Object.hasOwn(style.sources, terrain.source) ? style.sources[terrain.source] : undefined;\n        const sourceType = source && unbundle(source.type) as string;\n        if (!source) {\n            errors.push(new ValidationError(`${key}.source`, terrain.source, `source \"${terrain.source}\" not found`));\n        } else if (sourceType !== 'raster-dem') {\n            errors.push(new ValidationError(`${key}.source`, terrain.source, `terrain cannot be used with a source of type ${sourceType}, it only be used with a \"raster-dem\" source type`));\n        }\n    }\n\n    return errors;\n}\n","import {default as ValidationError, ValidationWarning} from '../error/validation_error';\nimport validate from './validate';\nimport {getType, isObject} from '../util/get_type';\nimport {TRANSITION_KEY_RE, USE_THEME_KEY_RE} from '../util/properties';\n\nimport type {StyleReference} from '../reference/latest';\nimport type {StyleSpecification} from '../types';\n\ntype FogValidatorOptions = {\n    key: string;\n    value: unknown;\n    style: Partial<StyleSpecification>;\n    styleSpec: StyleReference;\n};\n\nexport default function validateFog(options: FogValidatorOptions): ValidationError[] {\n    const fog = options.value;\n    const style = options.style;\n    const styleSpec = options.styleSpec;\n    // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\n    const fogSpec = styleSpec.fog;\n\n    if (fog === undefined) {\n        return [];\n    }\n\n    if (!isObject(fog)) {\n        return [new ValidationError('fog', fog, `object expected, ${getType(fog)} found`)];\n    }\n\n    let errors: ValidationError[] = [];\n    for (const key in fog) {\n        const transitionMatch = key.match(TRANSITION_KEY_RE);\n        const useThemeMatch = key.match(USE_THEME_KEY_RE);\n\n        // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n        if (useThemeMatch && fogSpec[useThemeMatch[1]]) {\n            errors = errors.concat(validate({\n                key,\n                value: fog[key],\n                valueSpec: {type: 'string'},\n                style,\n                styleSpec\n            }));\n        // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n        } else if (transitionMatch && fogSpec[transitionMatch[1]] && fogSpec[transitionMatch[1]].transition) {\n            errors = errors.concat(validate({\n                key,\n                value: fog[key],\n                // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\n                valueSpec: styleSpec.transition,\n                style,\n                styleSpec\n            }));\n        // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n        } else if (fogSpec[key]) {\n            errors = errors.concat(validate({\n                key,\n                value: fog[key],\n                // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-unsafe-member-access\n                valueSpec: fogSpec[key],\n                style,\n                styleSpec\n            }));\n        } else {\n            errors = errors.concat([new ValidationWarning(key, fog[key], `unknown property \"${key}\"`)]);\n        }\n    }\n\n    return errors;\n}\n","import validateExpression from './validate_expression';\nimport validateString from './validate_string';\n\nimport type ValidationError from '../error/validation_error';\n\ntype FormattedValidatorOptions = {\n    key: string;\n    value: unknown;\n};\n\nexport default function validateFormatted(options: FormattedValidatorOptions): ValidationError[] {\n    const errors = validateString(options);\n    if (errors.length === 0) {\n        return [];\n    }\n\n    return validateExpression(options);\n}\n","import validateExpression from './validate_expression';\nimport validateString from './validate_string';\n\nimport type ValidationError from '../error/validation_error';\n\ntype ImageValidatorOptions = {\n    key: string;\n    value: unknown;\n};\n\nexport default function validateImage(options: ImageValidatorOptions): ValidationError[] {\n    const errors = validateString(options);\n    if (errors.length === 0) {\n        return [];\n    }\n\n    return validateExpression(options);\n}\n","import ValidationError from '../error/validation_error';\nimport {getType, isObject, isString} from '../util/get_type';\nimport validate from './validate';\n\nimport type {StyleReference} from '../reference/latest';\nimport type {StyleSpecification} from '../types';\nimport type {StylePropertySpecification} from '../style-spec';\n\ntype ProjectionValidatorOptions = {\n    key: string;\n    value: unknown;\n    style: Partial<StyleSpecification>;\n    styleSpec: StyleReference;\n};\n\nexport default function validateProjection(options: ProjectionValidatorOptions): ValidationError[] {\n    const projection = options.value;\n    const styleSpec = options.styleSpec;\n    const projectionSpec = styleSpec.projection as Record<PropertyKey, StylePropertySpecification>;\n    const style = options.style;\n\n    if (isObject(projection)) {\n        let errors: ValidationError[] = [];\n\n        for (const key in projection) {\n            errors = errors.concat(validate({\n                key,\n                value: projection[key],\n\n                valueSpec: projectionSpec[key],\n                style,\n                styleSpec\n            }));\n        }\n\n        return errors;\n    }\n\n    if (!isString(projection)) {\n        return [new ValidationError('projection', projection, `object or string expected, ${getType(projection)} found`)];\n    }\n\n    return [];\n}\n","import validateObject from './validate_object';\nimport {default as ValidationError} from '../error/validation_error';\nimport {unbundle} from '../util/unbundle_jsonlint';\nimport {isObject} from '../util/get_type';\n\nimport type {StyleReference} from '../reference/latest';\nimport type {StyleSpecification, IconsetSpecification} from '../types';\n\ntype IconsetValidatorOptions = {\n    key: string;\n    value: unknown;\n    style: Partial<StyleSpecification>;\n    styleSpec: StyleReference;\n};\n\nfunction isSourceIconset(type: IconsetSpecification['type'], iconset: Record<PropertyKey, unknown>): iconset is Extract<IconsetSpecification, {type: 'source'}> {\n    return !!(type === 'source' && iconset.source);\n}\n\nexport default function validateIconset(options: IconsetValidatorOptions): ValidationError[] {\n    const iconset = options.value;\n    const key = options.key;\n    const styleSpec = options.styleSpec;\n    const style = options.style;\n\n    if (!isObject(iconset)) {\n        return [new ValidationError(key, iconset, 'object expected')];\n    }\n\n    if (!iconset.type) {\n        return [new ValidationError(key, iconset, '\"type\" is required')];\n    }\n\n    const type = unbundle(iconset.type) as IconsetSpecification['type'];\n\n    let errors: ValidationError[] = [];\n\n    errors = errors.concat(validateObject({\n        key,\n        value: iconset,\n        // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\n        valueSpec: styleSpec[`iconset_${type}`],\n        style,\n        styleSpec\n    }));\n\n    if (isSourceIconset(type, iconset)) {\n        const source = style.sources && Object.hasOwn(style.sources, iconset.source) ? style.sources[iconset.source] : undefined;\n        const sourceType = source && unbundle(source.type) as string;\n        if (!source) {\n            errors.push(new ValidationError(key, iconset.source, `source \"${iconset.source}\" not found`));\n        } else if (sourceType !== 'raster-array') {\n            errors.push(new ValidationError(key, iconset.source, `iconset cannot be used with a source of type ${String(sourceType)}, it only be used with a \"raster-array\" source type`));\n        }\n    }\n\n    return errors;\n}\n","import {unbundle, deepUnbundle} from '../util/unbundle_jsonlint';\nimport {isExpression} from '../expression/index';\nimport {isFunction} from '../function/index';\nimport validateImport from './validate_import';\nimport validateOption from './validate_option';\nimport validateFunction from './validate_function';\nimport validateExpression from './validate_expression';\nimport validateObject from './validate_object';\nimport validateArray from './validate_array';\nimport validateBoolean from './validate_boolean';\nimport validateNumber from './validate_number';\nimport validateColor from './validate_color';\nimport validateEnum from './validate_enum';\nimport validateFilter from './validate_filter';\nimport validateLayer from './validate_layer';\nimport validateSource from './validate_source';\nimport validateModel from './validate_model';\nimport validateLight from './validate_light';\nimport validateLights from './validate_lights';\nimport validateTerrain from './validate_terrain';\nimport validateFog from './validate_fog';\nimport validateString from './validate_string';\nimport validateFormatted from './validate_formatted';\nimport validateImage from './validate_image';\nimport validateProjection from './validate_projection';\nimport validateIconset from './validate_iconset';\n\nimport type ValidationError from '../error/validation_error';\nimport type {StyleReference} from '../reference/latest';\nimport type {StyleSpecification} from '../types';\nimport type {FunctionValidatorOptions} from './validate_function';\nimport type {StylePropertySpecification} from '../style-spec';\nimport type {ExpressionValidatorOptions} from './validate_expression';\n\nconst VALIDATORS: Record<string, (...args: unknown[]) => ValidationError[]> = {\n    '*': () => [],\n    'array': validateArray,\n    'boolean': validateBoolean,\n    'number': validateNumber,\n    'color': validateColor,\n    'enum': validateEnum,\n    'filter': validateFilter,\n    'function': validateFunction,\n    'layer': validateLayer,\n    'object': validateObject,\n    'source': validateSource,\n    'model': validateModel,\n    'light': validateLight,\n    'light-3d': validateLights,\n    'terrain': validateTerrain,\n    'fog': validateFog,\n    'string': validateString,\n    'formatted': validateFormatted,\n    'resolvedImage': validateImage,\n    'projection': validateProjection,\n    'import': validateImport,\n    'iconset': validateIconset,\n    'option': validateOption,\n};\n\nexport type ValidatorOptions = {\n    /**\n     * String representing location of validation in style tree. Used only\n     * for more informative error reporting.\n     */\n    key: string;\n\n    /**\n     * Current value from style being evaluated. May be anything from a\n     * high level object that needs to be descended into deeper or a simple\n     * scalar value.\n     */\n    value: unknown;\n\n    /**\n     * Current spec being evaluated. Tracks value.\n     */\n    valueSpec?: Partial<StylePropertySpecification>;\n\n    /**\n     * Current full spec being evaluated.\n     */\n    styleSpec: StyleReference;\n\n    /**\n     * Current style being validated.\n     */\n    style: Partial<StyleSpecification>;\n\n    object?: object;\n    objectKey?: string;\n    propertyKey?: string;\n    propertyType?: string;\n    expressionContext?: string;\n};\n\n/**\n * Main recursive validation function.\n */\nexport default function validate(options: ValidatorOptions, arrayAsExpression: boolean = false): ValidationError[] {\n    const value = options.value;\n    const valueSpec = options.valueSpec;\n    const styleSpec = options.styleSpec;\n\n    if (valueSpec.expression) {\n        if (isFunction(unbundle(value))) return validateFunction(options as unknown as FunctionValidatorOptions);\n        if (isExpression(deepUnbundle(value))) return validateExpression(options as unknown as ExpressionValidatorOptions);\n    }\n\n    if (valueSpec.type && VALIDATORS[valueSpec.type]) {\n        const errors = VALIDATORS[valueSpec.type](options);\n        if (arrayAsExpression === true && errors.length > 0 && Array.isArray(options.value)) {\n            // Try to validate as an expression\n            return validateExpression(options as unknown as ExpressionValidatorOptions);\n        }\n\n        return errors;\n    }\n\n    const errors = validateObject({\n        ...options,\n        // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\n        valueSpec: valueSpec.type ? styleSpec[valueSpec.type] : valueSpec\n    });\n\n    return errors;\n}\n","import {default as ValidationError, ValidationWarning} from '../error/validation_error';\nimport {getType, isObject} from '../util/get_type';\nimport validateSpec from './validate';\n\nimport type {StyleReference} from '../reference/latest';\nimport type {StyleSpecification, LayerSpecification} from '../types';\n\ntype ObjectElementValidatorOptions = {\n    key: string;\n    value: unknown;\n    valueSpec?: unknown;\n    style: Partial<StyleSpecification>;\n    styleSpec: StyleReference;\n    object?: object;\n    objectKey?: string;\n};\n\ntype ObjectValidatorOptions = {\n    key: string;\n    value: unknown;\n    valueSpec?: object;\n    style: Partial<StyleSpecification>;\n    styleSpec: StyleReference;\n    object?: object;\n    objectKey?: string;\n    layer?: LayerSpecification;\n    objectElementValidators?: Record<string, (options: ObjectElementValidatorOptions) => ValidationError[]>;\n};\n\nexport default function validateObject(options: ObjectValidatorOptions): ValidationError[] {\n    const key = options.key;\n    const object = options.value;\n    const elementSpecs = options.valueSpec || {};\n    const elementValidators = options.objectElementValidators || {};\n    const style = options.style;\n    const styleSpec = options.styleSpec;\n\n    if (!isObject(object)) {\n        return [new ValidationError(key, object, `object expected, ${getType(object)} found`)];\n    }\n\n    let errors: ValidationError[] = [];\n    for (const objectKey in object) {\n        // Skip inherited keys: a hostile style JSON parsed with JSON.parse can\n        // have an own \"__proto__\" key, but downstream consumers may have mutated\n        // the prototype of `object` upstream. We never want to validate\n        // inherited properties as if they were user-supplied.\n        if (!Object.hasOwn(object, objectKey)) continue;\n\n        const elementSpecKey = objectKey.split('.')[0]; // treat 'paint.*' as 'paint'\n        // Object.hasOwn: a bare lookup like `elementSpecs[objectKey]` would\n        // find inherited keys from Object.prototype (e.g. \"__proto__\",\n        // \"constructor\", \"toString\") when the user-supplied key matches one,\n        // returning a non-spec value that then fails as a validator.\n        const hasSpec = Object.hasOwn(elementSpecs, elementSpecKey);\n        const hasWildcardSpec = Object.hasOwn(elementSpecs, '*');\n        // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\n        const elementSpec = hasSpec ? elementSpecs[elementSpecKey] : (hasWildcardSpec ? elementSpecs['*'] : undefined);\n\n        let validateElement: ((options: ObjectElementValidatorOptions, object?: unknown) => ValidationError[]) | undefined;\n        if (Object.hasOwn(elementValidators, elementSpecKey)) {\n            validateElement = elementValidators[elementSpecKey];\n        } else if (hasSpec) {\n            validateElement = validateSpec;\n        } else if (Object.hasOwn(elementValidators, '*')) {\n            validateElement = elementValidators['*'];\n        } else if (hasWildcardSpec) {\n            validateElement = validateSpec;\n        }\n\n        if (!validateElement) {\n            errors.push(new ValidationWarning(key, object[objectKey], `unknown property \"${objectKey}\"`));\n            continue;\n        }\n\n        errors = errors.concat(validateElement({\n            key: (key ? `${key}.` : key) + objectKey,\n            value: object[objectKey],\n            valueSpec: elementSpec,\n            style,\n            styleSpec,\n            object,\n            objectKey\n        }, object));\n    }\n\n    for (const elementSpecKey in elementSpecs) {\n        if (!Object.hasOwn(elementSpecs, elementSpecKey)) continue;\n        // Don't check `required` when there's a custom validator for that property.\n        if (Object.hasOwn(elementValidators, elementSpecKey)) {\n            continue;\n        }\n\n        const elementSpec = elementSpecs[elementSpecKey] as {required?: boolean; default?: unknown};\n        if (elementSpec.required && elementSpec['default'] === undefined && (!Object.hasOwn(object, elementSpecKey) || object[elementSpecKey] === undefined)) {\n            errors.push(new ValidationError(key, object, `missing required property \"${elementSpecKey}\"`));\n        }\n    }\n\n    return errors;\n}\n","import ValidationError from '../error/validation_error';\nimport validateString from './validate_string';\n\ntype GlyphsUrlValidatorOptions = {\n    key: string;\n    value: unknown;\n};\n\nexport default function validateGlyphsUrl({key, value}: GlyphsUrlValidatorOptions): ValidationError[] {\n    const errors = validateString({key, value});\n    if (errors.length) return errors;\n\n    const str = value as string;\n    if (!str.includes('{fontstack}')) {\n        errors.push(new ValidationError(key, value, '\"glyphs\" url must include a \"{fontstack}\" token'));\n    }\n\n    if (!str.includes('{range}')) {\n        errors.push(new ValidationError(key, value, '\"glyphs\" url must include a \"{range}\" token'));\n    }\n\n    return errors;\n}\n","import validateObject from './validate_object';\nimport latestStyleSpec from '../reference/latest';\nimport validateGlyphsURL from './validate_glyphs_url';\n\nimport type ValidationError from '../error/validation_error';\nimport type {StyleReference} from '../reference/latest';\n\ntype StyleValidatorOptions = {\n    key?: string;\n};\n\nexport default function validateStyle(style: unknown, styleSpec: StyleReference = latestStyleSpec, options: StyleValidatorOptions = {}): ValidationError[] {\n    const errors = validateObject({\n        key: options.key || '',\n        value: style,\n        // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\n        valueSpec: {\n            ...styleSpec.$root,\n            // Skip validation of the root properties that are not defined in the style spec (e.g. 'owner').\n            '*': {type: '*'},\n        },\n        styleSpec,\n        style,\n        objectElementValidators: {\n            glyphs: validateGlyphsURL\n        }\n    });\n\n    return errors;\n}\n","import latestStyleSpec from './reference/latest';\nimport _validateStyle from './validate/validate_style';\nimport _validateSource from './validate/validate_source';\nimport _validateLight from './validate/validate_light';\nimport _validateLights from './validate/validate_lights';\nimport _validateTerrain from './validate/validate_terrain';\nimport _validateFog from './validate/validate_fog';\nimport _validateSnow from './validate/validate_snow';\nimport _validateRain from './validate/validate_rain';\nimport _validateLayer from './validate/validate_layer';\nimport _validateFilter from './validate/validate_filter';\nimport _validatePaintProperty from './validate/validate_paint_property';\nimport _validateLayoutProperty from './validate/validate_layout_property';\nimport _validateModel from './validate/validate_model';\n\nimport type {StyleReference} from './reference/latest';\nimport type {StyleSpecification} from './types';\n\nexport type ValidationError = {\n    message: string;\n    identifier?: string | null | undefined;\n    line?: number | null | undefined;\n};\n\nexport type ValidationErrors = ReadonlyArray<ValidationError>;\nexport type Validator<T extends (...args: unknown[]) => unknown = (...args: unknown[]) => unknown> = (...args: Parameters<T>) => ValidationErrors;\n\n/**\n * Validate a Mapbox GL style against the style specification. This entrypoint,\n * `mapbox-gl-style-spec/lib/validate_style.min`, is designed to produce as\n * small a browserify bundle as possible by omitting unnecessary functionality\n * and legacy style specifications.\n *\n * @private\n * @param {Object} style The style to be validated.\n * @param {Object} [styleSpec] The style specification to validate against.\n *     If omitted, the latest style spec is used.\n * @returns {Array<ValidationError>}\n * @example\n *   var validate = require('mapbox-gl-style-spec/lib/validate_style.min');\n *   var errors = validate(style);\n */\nexport function validateStyle(style: StyleSpecification, styleSpec: StyleReference = latestStyleSpec): ValidationErrors {\n    const errors = _validateStyle(style, styleSpec);\n    return sortErrors(errors);\n}\n\nexport const validateSource: Validator<typeof _validateSource> = opts => sortErrors(_validateSource(opts));\nexport const validateLight: Validator<typeof _validateLight> = opts => sortErrors(_validateLight(opts));\nexport const validateLights: Validator<typeof _validateLights> = opts => sortErrors(_validateLights(opts));\nexport const validateTerrain: Validator<typeof _validateTerrain> = opts => sortErrors(_validateTerrain(opts));\nexport const validateFog: Validator<typeof _validateFog> = opts => sortErrors(_validateFog(opts));\nexport const validateSnow: Validator<typeof _validateSnow> = opts => sortErrors(_validateSnow(opts));\nexport const validateRain: Validator<typeof _validateRain> = opts => sortErrors(_validateRain(opts));\nexport const validateLayer: Validator<typeof _validateLayer> = opts => sortErrors(_validateLayer(opts));\nexport const validateFilter: Validator<typeof _validateFilter> = opts => sortErrors(_validateFilter(opts));\nexport const validatePaintProperty: Validator<typeof _validatePaintProperty> = opts => sortErrors(_validatePaintProperty(opts));\nexport const validateLayoutProperty: Validator<typeof _validateLayoutProperty> = opts => sortErrors(_validateLayoutProperty(opts));\nexport const validateModel: Validator<typeof _validateModel> = opts => sortErrors(_validateModel(opts));\n\nfunction sortErrors(errors: ValidationErrors): ValidationErrors {\n    return errors.slice().sort((a, b) => a.line && b.line ? a.line - b.line : 0);\n}\n","import ParsingError from './error/parsing_error';\n\nimport type {StyleSpecification} from './types';\n\nexport default function readStyle(style: string | Uint8Array | StyleSpecification): StyleSpecification {\n    if (style instanceof String || typeof style === 'string' || ArrayBuffer.isView(style)) {\n        try {\n            const str = ArrayBuffer.isView(style) ? new TextDecoder().decode(style) : style.toString();\n            JSON.parse(str); // first try full parsing to catch malformed JSON\n            return parse(str) as StyleSpecification; // then our custom parser\n        } catch (e) {\n            throw new ParsingError(e as Error);\n        }\n    }\n\n    return style;\n}\n\n// custom JSON parser that assumes valid JSON and wraps values to include line metadata\n\nexport const LBRACE   = 0; // {\nexport const RBRACE   = 1; // }\nexport const LBRACKET = 2; // [\nexport const RBRACKET = 3; // ]\nexport const STRING   = 4; // \"...\"\nexport const NUMBER   = 5; // -1.5e+3\nexport const TRUE     = 6; // true\nexport const FALSE    = 7; // false\nexport const NULL     = 8; // null\n\nexport function tokenize(s: string) {\n    const tokens: number[] = [];\n    let pos = 0;\n    const len = s.length;\n\n    while (pos < len) {\n        const c = s.charCodeAt(pos);\n\n        if (c === 32 || c === 9 || c === 10 || c === 13 || c === 58 || c === 44) { // whitespace\n            pos++;\n            continue;\n        }\n\n        const start = pos;\n\n        if (c === 123) tokens.push(LBRACE, start, ++pos); // {\n        else if (c === 125) tokens.push(RBRACE,   start, ++pos); // }\n        else if (c === 91) tokens.push(LBRACKET, start, ++pos); // [\n        else if (c === 93) tokens.push(RBRACKET, start, ++pos); // ]\n        else if (c === 34) { // \"\n            pos++;\n            while (pos < len) {\n                const ch = s.charCodeAt(pos);\n                if (ch === 92) pos += s.charCodeAt(pos + 1) === 117 ? 6 : 2; // escape; \\uXXXX = 6 chars, others = 2\n                else if (ch === 34) break; // closing quote\n                else pos++;\n            }\n            tokens.push(STRING, start, ++pos);\n        } else if (c === 116) tokens.push(TRUE,  start, pos += 4); // true\n        else if (c === 102) tokens.push(FALSE, start, pos += 5); // false\n        else if (c === 110) tokens.push(NULL,  start, pos += 4); // null\n        else { // number\n            while (pos < len) {\n                const ch = s.charCodeAt(pos);\n                if ((ch >= 48 && ch <= 57) || ch === 45 || ch === 43 || ch === 46 || ch === 101 || ch === 69) pos++;\n                else break;\n            }\n            tokens.push(NUMBER, start, pos);\n        }\n    }\n\n    return tokens;\n}\n\n/* eslint-disable @typescript-eslint/no-wrapper-object-types */\ntype JSONValue = String | Number | Boolean | null | {[key: string]: JSONValue} | JSONValue[];\n\nfunction parseTokens(s: string, tokens: number[]) {\n    let i = 0;\n\n    const lineOffsets = [0];\n    for (let j = 0; j < s.length; j++) {\n        if (s.charCodeAt(j) === 10) lineOffsets.push(j + 1);\n    }\n\n    function lineNum(pos: number) {\n        let lo = 0, hi = lineOffsets.length - 1;\n        while (lo < hi) {\n            const mid = (lo + hi + 1) >> 1;\n            if (lineOffsets[mid] <= pos) lo = mid;\n            else hi = mid - 1;\n        }\n        return lo + 1;\n    }\n\n    function setLine<T>(obj: T, line: number): T {\n        Object.defineProperty(obj, '__line__', {value: line});\n        return obj;\n    }\n\n    function parseValue(): JSONValue {\n        const type = tokens[i];\n        const start = tokens[i + 1];\n        const end = tokens[i + 2];\n        i += 3;\n\n        const line = lineNum(start);\n\n        if (type === LBRACE) {\n            const obj = setLine({}, line);\n            while (tokens[i] !== RBRACE) {\n                const key: string = JSON.parse(s.slice(tokens[i + 1], tokens[i + 2])) as string;\n                i += 3;\n                Object.defineProperty(obj, key, {value: parseValue(), enumerable: true, configurable: true, writable: true});\n            }\n            i += 3;\n            return obj;\n        }\n        if (type === LBRACKET) {\n            const arr: JSONValue = setLine([], line);\n            while (tokens[i] !== RBRACKET) arr.push(parseValue());\n            i += 3;\n            return arr;\n        }\n\n        if (type === STRING) return setLine(new String(JSON.parse(s.slice(start, end))), line);\n        if (type === NUMBER) return setLine(new Number(+s.slice(start, end)), line);\n        if (type === TRUE)   return setLine(new Boolean(true), line);\n        if (type === FALSE)  return setLine(new Boolean(false), line);\n        return null; // null cannot carry properties\n    }\n\n    return parseValue();\n}\n\nfunction parse(s: string): JSONValue {\n    return parseTokens(s, tokenize(s));\n}\n","import {validateStyle as validateStyleMin} from './validate_style.min';\nimport {v8} from './style-spec';\nimport readStyle from './read_style';\n\nimport type {StyleReference} from './reference/latest';\nimport type {ValidationErrors} from './validate_style.min';\nimport type {StyleSpecification} from './types';\n\n/**\n * Validate a Mapbox GL style against the style specification.\n *\n * @private\n * @alias validate\n * @param {Object|String|Uint8Array} style The style to be validated. If a `String`\n *     or `Uint8Array` is provided, the returned errors will contain line numbers.\n * @param {Object} [styleSpec] The style specification to validate against.\n *     If omitted, the spec version is inferred from the stylesheet.\n * @returns {Array<ValidationError|ParsingError>}\n * @example\n *   var validate = require('mapbox-gl-style-spec').validate;\n *   var style = fs.readFileSync('./style.json', 'utf8');\n *   var errors = validate(style);\n */\n\nexport default function validateStyle(style: StyleSpecification | string | Uint8Array, styleSpec: StyleReference = v8): ValidationErrors {\n    let s = style;\n\n    try {\n        s = readStyle(s);\n    } catch (e) {\n        return [e] as ValidationErrors;\n    }\n\n    return validateStyleMin(s, styleSpec);\n}\n\nexport {\n    validateSource as source,\n    validateModel as model,\n    validateLight as light,\n    validateLayer as layer,\n    validateFilter as filter,\n    validateLights as lights,\n    validateTerrain as terrain,\n    validateFog as fog,\n    validatePaintProperty as paintProperty,\n    validateLayoutProperty as layoutProperty\n} from './validate_style.min';\n","import {validateStyle} from './validate_style.min';\nimport {v8} from './style-spec';\nimport readStyle from './read_style';\nimport ValidationError from './error/validation_error';\nimport {isString, isBoolean} from './util/get_type';\n\nimport type {StyleReference} from './reference/latest';\nimport type {ValidationErrors} from './validate_style.min';\nimport type {\n    StyleSpecification,\n    SourceSpecification,\n    SourcesSpecification,\n    ImportSpecification\n} from './types';\n\nconst MAPBOX_SOURCE_URL_RE = /^mapbox:\\/\\/([^/]*)$/;\nconst MAPBOX_GLYPH_URL_RE = /^mapbox:\\/\\/fonts\\/([^/]*)\\/{fontstack}\\/{range}.pbf$/;\nconst MAPBOX_SPRITE_URL_RE = /^mapbox:\\/\\/sprites\\/([^/]*)\\/([^/]*)\\/?([^/]*)?$/;\nconst VISIBILITY_RE = /^(public|private)$/;\n\ntype MapboxStyleSpecification = StyleSpecification & {\n    visibility?: 'public' | 'private';\n    protected?: boolean;\n};\n\nconst SUPPORTED_SPEC_VERSION = 8;\nconst MAX_SOURCES_IN_STYLE = 15;\n\nfunction isValid(value: string | null | undefined, regex: RegExp): boolean {\n    if (!value || !isString(value)) return true;\n    return !!value.match(regex);\n}\n\nfunction getSourceCount(source: SourceSpecification): number {\n    if ('url' in source) {\n        return source.url.split(',').length;\n    } else {\n        return 0;\n    }\n}\n\nfunction getAllowedKeyErrors(obj: object, keys: string[], path?: string | null): Array<ValidationError> {\n    const allowed = new Set(keys);\n    const errors: ValidationError[] = [];\n    Object.keys(obj).forEach(k => {\n        if (!allowed.has(k)) {\n            const prop = path ? `${path}.${k}` : null;\n            errors.push(new ValidationError(prop, obj[k], `Unsupported property \"${k}\"`));\n        }\n    });\n    return errors;\n}\n\nconst acceptedSourceTypes = new Set<SourceSpecification['type']>(['vector', 'raster', 'raster-dem', 'raster-array', 'model', 'batched-model']);\nfunction getSourceErrors(source: SourceSpecification, i: number): Array<ValidationError> {\n    const errors: ValidationError[] = [];\n\n    /*\n     * \"type\" is required and must be one of \"vector\", \"raster\", \"raster-dem\", \"raster-array\"\n     */\n    if (!acceptedSourceTypes.has(String(source.type) as SourceSpecification['type'])) {\n        errors.push(new ValidationError(`sources[${i}].type`, source.type, `Expected one of [${Array.from(acceptedSourceTypes).join(\", \")}]`));\n    }\n\n    /*\n     * \"source\" is required. Valid examples:\n     * mapbox://mapbox.abcd1234\n     * mapbox://penny.abcd1234\n     * mapbox://mapbox.abcd1234,penny.abcd1234\n     */\n    if (!('url' in source) || !isValid(source.url, MAPBOX_SOURCE_URL_RE)) {\n        errors.push(new ValidationError(`sources[${i}].url`, (source as {url?: string}).url, 'Expected a valid Mapbox tileset url'));\n    }\n\n    return errors;\n}\n\nfunction getMaxSourcesErrors(sourcesCount: number): Array<ValidationError> {\n    const errors: ValidationError[] = [];\n    if (sourcesCount > MAX_SOURCES_IN_STYLE) {\n        errors.push(new ValidationError('sources', null, `Styles must contain ${MAX_SOURCES_IN_STYLE} or fewer sources`));\n    }\n    return errors;\n}\n\nfunction getSourcesErrors(sources: SourcesSpecification): {\n    errors: Array<ValidationError>;\n    sourcesCount: number;\n} {\n    const errors = [];\n    let sourcesCount = 0;\n\n    Object.keys(sources).forEach((s: string, i: number) => {\n        const sourceErrors = getSourceErrors(sources[s], i);\n\n        // If source has errors, skip counting\n        if (!sourceErrors.length) {\n            sourcesCount = sourcesCount + getSourceCount(sources[s]);\n        }\n\n        errors.push(...sourceErrors);\n    });\n\n    // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\n    return {errors, sourcesCount};\n}\n\nfunction getImportErrors(imports: ImportSpecification[] = []): Array<ValidationError> {\n    let errors: Array<ValidationError> = [];\n\n    const validateImports = (imports: ImportSpecification[] = []) => {\n        for (const importSpec of imports) {\n            const style = importSpec.data;\n            if (!style) continue;\n\n            if (style.imports) {\n                validateImports(style.imports);\n            }\n\n            errors = errors.concat(getRootErrors(style, Object.keys(v8.$root)));\n\n            if (style.sources) {\n                const sourcesErrors = getSourcesErrors(style.sources);\n                errors = errors.concat(sourcesErrors.errors);\n            }\n        }\n    };\n\n    validateImports(imports);\n    if (imports.length !== (new Set(imports.map(i => i.id))).size) {\n        errors.push(new ValidationError(null, null, 'Duplicate ids of imports'));\n    }\n\n    return errors;\n}\n\nfunction getRootErrors(style: MapboxStyleSpecification, specKeys: string[]): Array<ValidationError> {\n    const errors: ValidationError[] = [];\n\n    /*\n     * The following keys are optional but fully managed by the Mapbox Styles\n     * API. Values on stylesheet on POST or PATCH will be ignored: \"owner\",\n     * \"id\", \"cacheControl\", \"draft\", \"created\", \"modified\", \"protected\"\n     *\n     * The following keys are optional. The Mapbox Styles API respects value on\n     * stylesheet on PATCH, but ignores the value on POST: \"visibility\"\n     */\n    const optionalRootProperties = [\n        'owner',\n        'id',\n        'cacheControl',\n        'draft',\n        'created',\n        'modified',\n        'visibility',\n        'protected',\n        'models',\n        'lights'\n    ];\n\n    const allowedKeyErrors = getAllowedKeyErrors(style, [...specKeys, ...optionalRootProperties]);\n    errors.push(...allowedKeyErrors);\n\n    if (style.version > SUPPORTED_SPEC_VERSION || style.version < SUPPORTED_SPEC_VERSION) {\n        errors.push(new ValidationError('version', style.version, `Style version must be ${SUPPORTED_SPEC_VERSION}`));\n    }\n\n    /*\n     * \"glyphs\" is optional. If present, valid examples:\n     * mapbox://fonts/penny/{fontstack}/{range}.pbf\n     * mapbox://fonts/mapbox/{fontstack}/{range}.pbf\n     */\n    if (!isValid(style.glyphs, MAPBOX_GLYPH_URL_RE)) {\n        errors.push(new ValidationError('glyphs', style.glyphs, 'Styles must reference glyphs hosted by Mapbox'));\n    }\n\n    /*\n     * \"sprite\" is optional. If present, valid examples:\n     * mapbox://sprites/penny/abcd1234\n     * mapbox://sprites/mapbox/abcd1234/draft\n     * mapbox://sprites/cyrus/abcd1234/abcd1234\n     */\n    if (!isValid(style.sprite, MAPBOX_SPRITE_URL_RE)) {\n        errors.push(new ValidationError('sprite', style.sprite, 'Styles must reference sprites hosted by Mapbox'));\n    }\n\n    /*\n     * \"visibility\" is optional. If present, valid examples:\n     * \"private\"\n     * \"public\"\n     */\n    if (!isValid(style.visibility, VISIBILITY_RE)) {\n        errors.push(new ValidationError('visibility', style.visibility, 'Style visibility must be public or private'));\n    }\n\n    if (style.protected !== undefined && !isBoolean(style.protected)) {\n        errors.push(new ValidationError('protected', style.protected, 'Style protection must be true or false'));\n    }\n\n    return errors;\n}\n\n/**\n * Validate a Mapbox GL style against the style specification and check for\n * compatibility with the Mapbox Styles API.\n *\n * @param {Object} style The style to be validated.\n * @returns {Array<ValidationError>}\n * @example\n *   var validateMapboxApiSupported = require('mapbox-gl-style-spec/lib/validate_style_mapbox_api_supported.js');\n *   var errors = validateMapboxApiSupported(style);\n */\nexport default function validateMapboxApiSupported(style: MapboxStyleSpecification, styleSpec: StyleReference = v8): ValidationErrors {\n    let s = style;\n    try {\n        s = readStyle(s);\n    } catch (e) {\n        return [e] as ValidationErrors;\n    }\n\n    let errors = validateStyle(s, styleSpec)\n        .concat(getRootErrors(s, Object.keys(v8.$root)));\n\n    let sourcesCount = 0;\n    if (s.sources) {\n        const sourcesErrors = getSourcesErrors(s.sources);\n        sourcesCount += sourcesErrors.sourcesCount;\n        errors = errors.concat(sourcesErrors.errors);\n    }\n\n    if (s.imports) {\n        const importsErrors = getImportErrors(s.imports);\n        errors = errors.concat(importsErrors);\n    }\n\n    errors = errors.concat(getMaxSourcesErrors(sourcesCount));\n\n    return errors;\n}\n","import v8 from './reference/v8.json';\nimport latest from './reference/latest';\nimport format from './format';\nimport migrate from './migrate';\nimport composite from './composite';\nimport derefLayers from './deref';\nimport diff from './diff';\nimport ValidationError from './error/validation_error';\nimport ParsingError from './error/parsing_error';\nimport {StyleExpression, isExpression, createExpression, createPropertyExpression, normalizePropertyExpression, ZoomConstantExpression, ZoomDependentExpression, StylePropertyFunction} from './expression/index';\nimport featureFilter, {isExpressionFilter} from './feature_filter/index';\nimport convertFilter from './feature_filter/convert';\nimport Color from './util/color';\nimport {createFunction, isFunction} from './function/index';\nimport convertFunction from './function/convert';\nimport {eachSource, eachLayer, eachProperty} from './visit';\nimport validate from './validate_style';\nimport validateMapboxApiSupported from './validate_mapbox_api_supported';\n\nexport type * from './types';\n\ntype ExpressionType = 'data-driven' | 'color-ramp' | 'data-constant' | 'constant';\n\ntype ExpressionParameter =\n    | 'zoom'\n    | 'pitch'\n    | 'feature'\n    | 'raster-value'\n    | 'feature-state'\n    | 'line-progress'\n    | 'measure-light'\n    | 'heatmap-density'\n    | 'sky-radial-progress'\n    | 'distance-from-center'\n    | 'raster-particle-speed';\n\nexport type PropertyExpressionSpecification = {\n    interpolated: boolean,\n    parameters?: ExpressionParameter[],\n    relaxZoomRestriction?: boolean\n};\n\nexport type ArrayPropertySpecification =\n    {\n        type: 'array';\n        'property-type': ExpressionType;\n        value: 'enum';\n        expression?: PropertyExpressionSpecification,\n        transition?: boolean,\n        default?: string[],\n        length?: number,\n        values?: {[_: string]: unknown},\n        experimental?: boolean,\n        private?: boolean,\n        requires?: unknown,\n        appearance?: boolean,\n        tokens?: never,\n        minimum?: never,\n        maximum?: never,\n    } | {\n        type: 'array';\n        'property-type': ExpressionType;\n        value: 'number';\n        expression?: PropertyExpressionSpecification;\n        transition?: boolean;\n        default?: number[];\n        minimum?: number;\n        maximum?: number;\n        length?: number;\n        period?: number;\n        units?: string;\n        experimental?: boolean;\n        private?: boolean;\n        requires?: unknown;\n        appearance?: boolean;\n        tokens?: never;\n        values?: never;\n    } | {\n        type: 'array';\n        'property-type': ExpressionType;\n        value: 'string';\n        expression?: PropertyExpressionSpecification;\n        transition?: boolean;\n        default?: string[];\n        length?: number;\n        experimental?: boolean;\n        private?: boolean;\n        requires?: unknown;\n        appearance?: boolean;\n        tokens?: never;\n        minimum?: never;\n        maximum?: never;\n        values?: never;\n    };\n\nexport type BooleanPropertySpecification = {\n    type: 'boolean';\n    'property-type': ExpressionType;\n    expression?: PropertyExpressionSpecification;\n    transition?: boolean;\n    default?: boolean;\n    overridable?: boolean;\n    experimental?: boolean;\n    private?: boolean;\n    requires?: unknown;\n    appearance?: boolean;\n    tokens?: never;\n};\n\nexport type ColorPropertySpecification = {\n    type: 'color';\n    'property-type': ExpressionType;\n    expression?: PropertyExpressionSpecification;\n    transition?: boolean;\n    default?: string;\n    'use-theme'?: boolean;\n    overridable?: boolean;\n    experimental?: boolean;\n    private?: boolean;\n    requires?: unknown;\n    appearance?: boolean;\n    tokens?: never;\n};\n\nexport type EnumPropertySpecification = {\n    type: 'enum';\n    'property-type': ExpressionType;\n    expression?: PropertyExpressionSpecification;\n    transition?: boolean;\n    default?: string;\n    values?: {[_: string]: unknown};\n    experimental?: boolean;\n    private?: boolean;\n    requires?: unknown;\n    appearance?: boolean;\n    tokens?: never;\n};\n\nexport type FormattedPropertySpecification = {\n    type: 'formatted';\n    'property-type': ExpressionType;\n    expression?: PropertyExpressionSpecification;\n    transition?: boolean;\n    default?: string;\n    tokens?: boolean;\n    experimental?: boolean;\n    private?: boolean;\n    requires?: unknown;\n    appearance?: boolean;\n};\n\nexport type NumberPropertySpecification = {\n    type: 'number';\n    'property-type': ExpressionType;\n    expression?: PropertyExpressionSpecification;\n    transition?: boolean;\n    default?: number;\n    minimum?: number;\n    maximum?: number;\n    period?: number;\n    units?: string;\n    experimental?: boolean;\n    private?: boolean;\n    requires?: unknown;\n    appearance?: boolean;\n    tokens?: never;\n};\n\nexport type ResolvedImagePropertySpecification = {\n    type: 'resolvedImage';\n    'property-type': ExpressionType;\n    expression?: PropertyExpressionSpecification;\n    transition?: boolean;\n    default?: string;\n    tokens?: boolean;\n    'use-theme'?: boolean;\n    experimental?: boolean;\n    private?: boolean;\n    requires?: unknown;\n    appearance?: boolean;\n};\n\nexport type StringPropertySpecification = {\n    type: 'string';\n    'property-type': ExpressionType;\n    expression?: PropertyExpressionSpecification;\n    transition?: boolean;\n    default?: string;\n    tokens?: boolean;\n    experimental?: boolean;\n    private?: boolean;\n    requires?: unknown;\n    appearance?: boolean;\n};\n\n/**\n * A style property specification is used to describe a value of some style property reference in the v8.json\n */\nexport type StylePropertySpecification =\n    | ArrayPropertySpecification\n    | BooleanPropertySpecification\n    | ColorPropertySpecification\n    | EnumPropertySpecification\n    | FormattedPropertySpecification\n    | NumberPropertySpecification\n    | ResolvedImagePropertySpecification\n    | StringPropertySpecification;\n\nconst expression = {\n    StyleExpression,\n    isExpression,\n    isExpressionFilter,\n    createExpression,\n    createPropertyExpression,\n    normalizePropertyExpression,\n    ZoomConstantExpression,\n    ZoomDependentExpression,\n    StylePropertyFunction\n};\n\nconst styleFunction = {\n    convertFunction,\n    createFunction,\n    isFunction\n};\n\nconst visit = {eachSource, eachLayer, eachProperty};\n\nexport {\n    v8,\n    latest,\n    format,\n    migrate,\n    composite,\n    derefLayers,\n    diff,\n    ValidationError,\n    ParsingError,\n    expression,\n    featureFilter,\n    convertFilter,\n    Color,\n    styleFunction as function,\n    validate,\n    validateMapboxApiSupported,\n    visit\n};\n"],"names":["reference","stringifyPretty","Reference","isFunction","array","toString","parseCSSColor","types","type","primaryId","secondaryId","valueToString","EXTENT","isConstant.isFeatureConstant","ParsingError","number","interpolateNumber","op","lt","typeToString","coalesce","expressionDependencies.getConfigDependencies","expressionDependencies.isIndoorDependent","error","definitions","isConstant.isStateConstant","isFeatureConstant","isConstant.isGlobalPropertyConstant","convertFilter","latest","convertComparisonOp","convertInOp","convertHasOp","isEqual","key","validateStyle","validateSpec","options","errors","value","layer","lightType","latestStyleSpec","validateGlyphsURL","_validateStyle","validateStyleMin","imports"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAAA;EACA;EACA;EACA;EACA,MAAM,YAAY,GAAG,2BAA2B;;EAEjC,SAAS,SAAS,CAAC,SAAS,EAAE,OAAO,GAAG,EAAE,EAAE;EAC3D,EAAE,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS;EAC/B,IAAI,CAAC,CAAC,CAAC;EACP,IAAI,SAAS;EACb,IAAI,OAAO,CAAC,MAAM,KAAK,SAAS,GAAG,CAAC,GAAG,OAAO,CAAC;EAC/C,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC;;EAEhB,EAAE,MAAM,SAAS;EACjB,IAAI,MAAM,KAAK;EACf,QAAQ;EACR,QAAQ,OAAO,CAAC,SAAS,KAAK;EAC9B,QAAQ;EACR,QAAQ,OAAO,CAAC,SAAS;;EAEzB,EAAE,IAAI,EAAE,QAAQ,EAAE,GAAG,OAAO;;EAE5B,EAAE,OAAO,CAAC,SAAS,UAAU,CAAC,GAAG,EAAE,aAAa,EAAE,QAAQ,EAAE;EAC5D,IAAI,IAAI,GAAG,IAAI,OAAO,GAAG,CAAC,MAAM,KAAK,UAAU,EAAE;EACjD,MAAM,GAAG,GAAG,GAAG,CAAC,MAAM,EAAE;EACxB,IAAI;;EAEJ,IAAI,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,EAAE,QAAQ,CAAC;;EAEhD,IAAI,IAAI,MAAM,KAAK,SAAS,EAAE;EAC9B,MAAM,OAAO,MAAM;EACnB,IAAI;;EAEJ,IAAI,MAAM,MAAM,GAAG,SAAS,GAAG,aAAa,CAAC,MAAM,GAAG,QAAQ;;EAE9D,IAAI,IAAI,MAAM,CAAC,MAAM,IAAI,MAAM,EAAE;EACjC,MAAM,MAAM,UAAU,GAAG,MAAM,CAAC,OAAO;EACvC,QAAQ,YAAY;EACpB,QAAQ,CAAC,KAAK,EAAE,aAAa,KAAK;EAClC,UAAU,OAAO,aAAa,IAAI,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC;EAC7C,QAAQ;EACR,OAAO;EACP,MAAM,IAAI,UAAU,CAAC,MAAM,IAAI,MAAM,EAAE;EACvC,QAAQ,OAAO,UAAU;EACzB,MAAM;EACN,IAAI;;EAEJ,IAAI,IAAI,QAAQ,IAAI,IAAI,EAAE;EAC1B,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC;EAC9B,MAAM,QAAQ,GAAG,SAAS;EAC1B,IAAI;;EAEJ,IAAI,IAAI,OAAO,GAAG,KAAK,QAAQ,IAAI,GAAG,KAAK,IAAI,EAAE;EACjD,MAAM,MAAM,UAAU,GAAG,aAAa,GAAG,MAAM;EAC/C,MAAM,MAAM,KAAK,GAAG,EAAE;EACtB,MAAM,IAAI,KAAK,GAAG,CAAC;EACnB,MAAM,IAAI,KAAK;EACf,MAAM,IAAI,GAAG;;EAEb,MAAM,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE;EAC9B,QAAQ,KAAK,GAAG,GAAG;EACnB,QAAQ,GAAG,GAAG,GAAG;EACjB,QAAQ,MAAM,EAAE,MAAM,EAAE,GAAG,GAAG;EAC9B,QAAQ,OAAO,KAAK,GAAG,MAAM,EAAE,KAAK,EAAE,EAAE;EACxC,UAAU,KAAK,CAAC,IAAI;EACpB,YAAY,UAAU,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,UAAU,EAAE,KAAK,KAAK,MAAM,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;EAC5E,cAAc;EACd,WAAW;EACX,QAAQ;EACR,MAAM,CAAC,MAAM;EACb,QAAQ,KAAK,GAAG,GAAG;EACnB,QAAQ,GAAG,GAAG,GAAG;EACjB,QAAQ,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC;EACrC,QAAQ,MAAM,EAAE,MAAM,EAAE,GAAG,IAAI;EAC/B,QAAQ,OAAO,KAAK,GAAG,MAAM,EAAE,KAAK,EAAE,EAAE;EACxC,UAAU,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC;EACjC,UAAU,MAAM,OAAO,GAAG,CAAC,EAAE,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC;EACpD,UAAU,MAAM,KAAK,GAAG,UAAU;EAClC,YAAY,GAAG,CAAC,GAAG,CAAC;EACpB,YAAY,UAAU;EACtB,YAAY,OAAO,CAAC,MAAM,IAAI,KAAK,KAAK,MAAM,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC;EAC1D,WAAW;EACX,UAAU,IAAI,KAAK,KAAK,SAAS,EAAE;EACnC,YAAY,KAAK,CAAC,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC;EACvC,UAAU;EACV,QAAQ;EACR,MAAM;;EAEN,MAAM,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE;EAC5B,QAAQ,OAAO,CAAC,KAAK,EAAE,MAAM,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,UAAU,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,IAAI;EACzE,UAAU,CAAC,EAAE,EAAE,aAAa,CAAC;EAC7B,SAAS;EACT,MAAM;EACN,IAAI;;EAEJ,IAAI,OAAO,MAAM;EACjB,EAAE,CAAC,EAAE,SAAS,EAAE,EAAE,EAAE,CAAC,CAAC;EACtB;;EC3FA,SAAS,UAAA,CAAW,KAAKA,UAAAA,EAAW;EAEhC,EAAA,MAAM,SAA8B,EAAC;EACrC,EAAA,KAAA,MAAW,OAAOA,UAAAA,EAAW;EAEzB,IAAA,IAAI,GAAA,CAAI,GAAG,CAAA,KAAM,MAAA,EAAW;EAExB,MAAA,MAAA,CAAO,GAAG,CAAA,GAAI,GAAA,CAAI,GAAG,CAAA;EAAA,IACzB;EAAA,EACJ;EACA,EAAA,KAAA,MAAW,OAAO,GAAA,EAAK;EACnB,IAAA,IAAI,MAAA,CAAO,GAAG,CAAA,KAAM,MAAA,EAAW;EAE3B,MAAA,MAAA,CAAO,GAAG,CAAA,GAAI,GAAA,CAAI,GAAG,CAAA;EAAA,IACzB;EAAA,EACJ;EACA,EAAA,OAAO,MAAA;EACX;EAuBA,SAAS,MAAA,CAAO,KAAA,EAAO,KAAA,GAAQ,CAAA,EAAG;EAC9B,EAAA,KAAA,GAAQ,UAAA,CAAW,KAAA,EAAOA,EAAA,CAAU,KAAK,CAAA;EAGzC,EAAA,IAAI,MAAM,MAAA,EAAQ;EAEd,IAAA,KAAA,CAAM,MAAA,GAAS,KAAA,CAAM,MAAA,CAAO,GAAA,CAAI,CAAC,UAAU,UAAA,CAAW,KAAA,EAAOA,EAAA,CAAU,KAAK,CAAC,CAAA;EAAA,EACjF;EAEA,EAAA,OAAOC,SAAA,CAAgB,KAAA,EAAO,EAAC,MAAA,EAAQ,OAAM,CAAA;EACjD;;EC9CA,SAAS,qBAAqB,YAAA,EAAkD;EAC5E,EAAA,KAAA,IAAS,IAAI,CAAA,EAAG,CAAA,GAAIC,EAAA,CAAU,MAAA,CAAO,QAAQ,CAAA,EAAA,EAAK;EAC9C,IAAA,KAAA,MAAW,OAAOA,EAAA,CAAUA,EAAA,CAAU,MAAA,CAAO,CAAC,CAAC,CAAA,EAAG;EAE9C,MAAA,IAAI,GAAA,KAAQ,cAAc,OAAOA,EAAA,CAAUA,GAAU,MAAA,CAAO,CAAC,CAAC,CAAA,CAAE,GAAG,CAAA;EAAA,IACvE;EAAA,EACJ;EACA,EAAA,KAAA,IAAS,IAAI,CAAA,EAAG,CAAA,GAAIA,EAAA,CAAU,KAAA,CAAM,QAAQ,CAAA,EAAA,EAAK;EAC7C,IAAA,KAAA,MAAW,OAAOA,EAAA,CAAUA,EAAA,CAAU,KAAA,CAAM,CAAC,CAAC,CAAA,EAAG;EAE7C,MAAA,IAAI,GAAA,KAAQ,cAAc,OAAOA,EAAA,CAAUA,GAAU,KAAA,CAAM,CAAC,CAAC,CAAA,CAAE,GAAG,CAAA;EAAA,IACtE;EAAA,EACJ;EAEA,EAAA,OAAO,IAAA;EACX;EAEO,SAAS,UAAA,CAAW,OAA2B,QAAA,EAA4C;EAC9F,EAAA,KAAA,MAAW,CAAA,IAAK,MAAM,OAAA,EAAS;EAC3B,IAAA,QAAA,CAAS,KAAA,CAAM,OAAA,CAAQ,CAAC,CAAC,CAAA;EAAA,EAC7B;EACJ;EAEO,SAAS,SAAA,CAAU,OAA2B,QAAA,EAA2C;EAC5F,EAAA,KAAA,MAAW,KAAA,IAAS,MAAM,MAAA,EAAQ;EAC9B,IAAA,QAAA,CAAS,KAAK,CAAA;EAAA,EAClB;EACJ;EAcO,SAAS,YAAA,CACZ,KAAA,EACA,OAAA,EAIA,QAAA,EACF;EACE,EAAA,SAAS,KAAA,CAAM,OAA2B,YAAA,EAAkC;EACxE,IAAA,IAAI,KAAA,CAAM,IAAA,KAAS,MAAA,IAAU,KAAA,CAAM,SAAS,MAAA,EAAQ;EACpD,IAAA,MAAM,UAAA,GAAa,MAAM,YAAY,CAAA;EACrC,IAAA,IAAI,CAAC,UAAA,EAAY;EACjB,IAAA,MAAA,CAAO,IAAA,CAAK,UAAU,CAAA,CAAE,OAAA,CAAQ,CAAC,GAAA,KAAQ;EACrC,MAAA,QAAA,CAAS;EAAA,QACL,IAAA,EAAM,CAAC,KAAA,CAAM,EAAA,EAAI,cAAc,GAAG,CAAA;EAAA,QAClC,GAAA;EAAA,QACA,KAAA,EAAO,WAAW,GAAG,CAAA;EAAA,QACrB,SAAA,EAAW,qBAAqB,GAAG,CAAA;EAAA,QACnC,IAAI,CAAA,EAAG;EACH,UAAA,UAAA,CAAW,GAAG,CAAA,GAAI,CAAA;EAAA,QACtB;EAAA,OACH,CAAA;EAAA,IACL,CAAC,CAAA;EAAA,EACL;EAEA,EAAA,SAAA,CAAU,KAAA,EAAO,CAAC,KAAA,KAAU;EACxB,IAAA,IAAI,QAAQ,KAAA,EAAO;EACf,MAAA,KAAA,CAAM,OAAO,OAAO,CAAA;EAAA,IACxB;EACA,IAAA,IAAI,QAAQ,MAAA,EAAQ;EAChB,MAAA,KAAA,CAAM,OAAO,QAAQ,CAAA;EAAA,IACzB;EAAA,EACJ,CAAC,CAAA;EACL;;EChFA,SAAS,UAAA,CAAW,OAAO,QAAA,EAAU;EACjC,EAAA,KAAA,MAAW,KAAK,KAAA,EAAO;EACnB,IAAA,IAAI,CAAA,CAAE,OAAA,CAAQ,QAAQ,CAAA,KAAM,CAAA,EAAG;EAE3B,MAAA,QAAA,CAAS,KAAA,CAAM,CAAC,CAAA,EAAG,CAAC,CAAA;EAAA,IAAA;EACxB,EAAA;EAER;EAEA,SAAS,SAAA,CAAU,OAAO,QAAA,EAAU;EAChC,EAAA,KAAA,MAAW,KAAK,KAAA,EAAO;EACnB,IAAA,IAAI,CAAA,CAAE,OAAA,CAAQ,OAAO,CAAA,KAAM,CAAA,EAAG;EAE1B,MAAA,QAAA,CAAS,KAAA,CAAM,CAAC,CAAA,EAAG,CAAC,CAAA;EAAA,IAAA;EACxB,EAAA;EAER;EAEA,SAAS,eAAA,CAAgB,OAAO,KAAA,EAAO;EACnC,EAAA,IAAI,OAAO,KAAA,KAAU,QAAA,IAAY,KAAA,CAAM,CAAC,MAAM,GAAA,EAAK;EAE/C,IAAA,OAAO,eAAA,CAAgB,KAAA,EAAO,KAAA,CAAM,SAAA,CAAU,KAAK,CAAC,CAAA;EAAA,EAAA,CACxD,MAAO;EAEH,IAAA,OAAO,KAAA;EAAA,EAAA;EAEf;EAEA,SAASC,aAAW,KAAA,EAAO;EAEvB,EAAA,OAAO,KAAA,CAAM,OAAA,CAAQ,KAAA,CAAM,KAAK,CAAA;EACpC;EAEA,SAAS,cAAA,CAAe,GAAA,EAAK,IAAA,EAAM,EAAA,EAAI;EAEnC,EAAA,GAAA,CAAI,EAAE,CAAA,GAAI,GAAA,CAAI,IAAI,CAAA;EAAG,EAAA,OAAO,IAAI,IAAI,CAAA;EACxC;EAEA,oBAAA,CAAyB,KAAA,EAAO;EAE5B,EAAA,KAAA,CAAM,OAAA,GAAU,CAAA;EAIhB,EAAA,UAAA,CAAW,KAAA,EAAO,CAAC,MAAA,KAAW;EAC1B,IAAA,IAAI,MAAA,CAAO,IAAA,KAAS,OAAA,IAAW,MAAA,CAAO,QAAQ,MAAA,EAAW;EACrD,MAAA,cAAA,CAAe,MAAA,EAAQ,OAAO,MAAM,CAAA;EAAA,IAAA;EAExC,IAAA,IAAI,MAAA,CAAO,SAAS,OAAA,EAAS;EACzB,MAAA,MAAA,CAAO,WAAA,CAAY,OAAA,CAAQ,CAAC,KAAA,KAAU;EAClC,QAAA,OAAO,MAAM,OAAA,EAAQ;EAAA,MAAA,CACxB,CAAA;EAAA,IAAA;EACL,EAAA,CACH,CAAA;EAGD,EAAA,SAAA,CAAU,KAAA,EAAO,CAAC,KAAA,KAAU;EACxB,IAAA,UAAA,CAAW,KAAA,EAAO,CAAC,MAAA,KAAW;EAE1B,MAAA,IAAI,MAAA,CAAO,qBAAqB,CAAA,KAAM,MAAA,EAAW;EAC7C,QAAA,cAAA,CAAe,MAAA,EAAQ,uBAAuB,gBAAgB,CAAA;EAAA,MAAA;EAClE,IAAA,CACH,CAAA;EAED,IAAA,SAAA,CAAU,KAAA,EAAO,CAAC,KAAA,KAAU;EAExB,MAAA,IAAI,KAAA,CAAM,kBAAkB,CAAA,KAAM,MAAA,EAAW;EACzC,QAAA,cAAA,CAAe,KAAA,EAAO,oBAAoB,oBAAoB,CAAA;EAAA,MAAA;EAGlE,MAAA,IAAI,KAAA,CAAM,YAAY,CAAA,KAAM,MAAA,EAAW;EACnC,QAAA,cAAA,CAAe,KAAA,EAAO,cAAc,cAAc,CAAA;EAAA,MAAA;EAGtD,MAAA,IAAI,KAAA,CAAM,YAAY,CAAA,KAAM,MAAA,EAAW;EACnC,QAAA,cAAA,CAAe,KAAA,EAAO,cAAc,cAAc,CAAA;EAAA,MAAA;EACtD,IAAA,CACH,CAAA;EAAA,EAAA,CACJ,CAAA;EAID,EAAA,YAAA,CAAa,KAAA,EAAO,EAAC,KAAA,EAAO,IAAA,EAAM,QAAQ,IAAA,EAAI,EAAG,CAAC,QAAA,KAAa;EAE3D,IAAA,MAAM,KAAA,GAAQ,eAAA,CAAgB,KAAA,EAAO,QAAA,CAAS,KAAK,CAAA;EAEnD,IAAA,IAAIA,YAAA,CAAW,KAAK,CAAA,EAAG;EAEnB,MAAA,KAAA,CAAM,KAAA,CAAM,OAAA,CAAQ,CAAC,IAAA,KAAS;EAE1B,QAAA,IAAA,CAAK,CAAC,CAAA,GAAI,eAAA,CAAgB,KAAA,EAAO,IAAA,CAAK,CAAC,CAAC,CAAA;EAAA,MAAA,CAC3C,CAAA;EAAA,IAAA;EAGL,IAAA,QAAA,CAAS,IAAI,KAAK,CAAA;EAAA,EAAA,CACrB,CAAA;EAED,EAAA,OAAO,KAAA,CAAM,SAAA;EAGb,EAAA,SAAA,CAAU,KAAA,EAAO,CAAC,KAAA,KAAU;EAKxB,IAAA,UAAA,CAAW,KAAA,EAAO,CAAC,MAAA,KAAW;EAE1B,MAAA,OAAO,OAAO,eAAe,CAAA;EAE7B,MAAA,OAAO,OAAO,eAAe,CAAA;EAAA,IAAA,CAChC,CAAA;EAED,IAAA,SAAA,CAAU,KAAA,EAAO,CAAC,KAAA,KAAU;EAExB,MAAA,IAAI,KAAA,CAAM,WAAW,CAAA,EAAG;EACpB,QAAA,IAAI,CAAC,KAAA,CAAM,MAAA,EAAQ,KAAA,CAAM,SAAS,EAAC;EAEnC,QAAA,KAAA,CAAM,MAAA,CAAO,WAAW,CAAA,GAAI,KAAA,CAAM,WAAW,CAAA;EAE7C,QAAA,OAAO,MAAM,WAAW,CAAA;EAAA,MAAA;EAI5B,MAAA,IAAI,KAAA,CAAM,WAAW,CAAA,EAAG;EACpB,QAAA,IAAI,CAAC,KAAA,CAAM,MAAA,EAAQ,KAAA,CAAM,SAAS,EAAC;EAEnC,QAAA,KAAA,CAAM,MAAA,CAAO,WAAW,CAAA,GAAI,KAAA,CAAM,WAAW,CAAA;EAE7C,QAAA,OAAO,MAAM,WAAW,CAAA;EAAA,MAAA;EAC5B,IAAA,CACH,CAAA;EAAA,EAAA,CACJ,CAAA;EAED,EAAA,SAAS,oBAAoB,KAAA,EAAO;EAEhC,IAAA,MAAM,WAAA,GAAc,IAAI,GAAA,CAAI,KAAK,CAAA;EACjC,IAAA,MAAM,kBAAA,GAAqB,WAAA,CAAY,QAAA,CAAS,KAAA,CAAM,GAAG,CAAA;EAEzD,IAAA,IAAI,WAAA,CAAY,aAAa,SAAA,EAAW;EAEpC,MAAA,OAAO,KAAA;EAAA,IAAA,CAEX,MAAA,IAAW,WAAA,CAAY,QAAA,KAAa,WAAA,EAAa;EAE7C,MAAA,OAAO,+CAAA;EAAA,IAAA,CAEX,MAAA,IAAW,WAAA,CAAY,QAAA,KAAa,OAAA,EAAS;EAIzC,MAAA,OAAO,CAAA,eAAA,EAAkB,kBAAA,CAAmB,CAAC,CAAC,CAAA,wBAAA,CAAA;EAAA,IAAA,CAElD,MAAO;EAQP,EAAA;EAIJ,EAAA,IAAI,MAAM,MAAA,EAAQ;EAEd,IAAA,KAAA,CAAM,MAAA,GAAS,mBAAA,CAAoB,KAAA,CAAM,MAAM,CAAA;EAAA,EAAA;EAGnD,EAAA,SAAS,iBAAiB,IAAA,EAAM;EAC5B,IAAA,SAAS,aAAa,MAAA,EAAQ;EAE1B,MAAA,OAAO,OAAO,KAAA,CAAM,GAAG,CAAA,CAAE,GAAA,CAAI,CAAC,CAAA,KAAM;EAEhC,QAAA,OAAO,EAAE,IAAA,EAAK;EAAA,MAAA,CACjB,CAAA;EAAA,IAAA;EAGL,IAAA,IAAI,KAAA,CAAM,OAAA,CAAQ,IAAI,CAAA,EAAG;EAGrB,MAAA,OAAO,IAAA;EAAA,IAAA,CAEX,MAAA,IAAW,OAAO,IAAA,KAAS,QAAA,EAAU;EAEjC,MAAA,OAAO,aAAa,IAAI,CAAA;EAAA,IAAA,CAE5B,MAAA,IAAW,OAAO,IAAA,KAAS,QAAA,EAAU;EAEjC,MAAA,IAAA,CAAK,KAAA,CAAM,OAAA,CAAQ,CAAC,IAAA,KAAS;EAEzB,QAAA,IAAA,CAAK,CAAC,CAAA,GAAI,YAAA,CAAa,IAAA,CAAK,CAAC,CAAC,CAAA;EAAA,MAAA,CACjC,CAAA;EAED,MAAA,OAAO,IAAA;EAAA,IAAA,CAEX,MAAO;EACH,MAAA,MAAM,IAAI,MAAM,uBAAuB,CAAA;EAAA,IAAA;EAC3C,EAAA;EAIJ,EAAA,SAAA,CAAU,KAAA,EAAO,CAAC,KAAA,KAAU;EACxB,IAAA,UAAA,CAAW,KAAA,EAAO,CAAC,MAAA,KAAW;EAE1B,MAAA,IAAI,MAAA,CAAO,WAAW,CAAA,EAAG;EAErB,QAAA,MAAA,CAAO,WAAW,CAAA,GAAI,gBAAA,CAAiB,MAAA,CAAO,WAAW,CAAC,CAAA;EAAA,MAAA;EAC9D,IAAA,CACH,CAAA;EAAA,EAAA,CACJ,CAAA;EAeD,EAAA,IAAI,gBAAA,GAAmB,CAAA;EAEvB,EAAA,KAAA,IAAS,IAAI,KAAA,CAAM,MAAA,CAAO,SAAS,CAAA,EAAG,CAAA,IAAK,GAAG,CAAA,EAAA,EAAK;EAE/C,IAAA,MAAM,KAAA,GAAQ,KAAA,CAAM,MAAA,CAAO,CAAC,CAAA;EAE5B,IAAA,IAAI,KAAA,CAAM,SAAS,QAAA,EAAU;EACzB,MAAA,gBAAA,GAAmB,CAAA,GAAI,CAAA;EACvB,MAAA;EAAA,IAAA;EACJ,EAAA;EAIJ,EAAA,MAAM,YAAA,GAAe,KAAA,CAAM,MAAA,CAAO,MAAA,CAAO,gBAAgB,CAAA;EAEzD,EAAA,YAAA,CAAa,OAAA,EAAQ;EAErB,EAAA,KAAA,CAAM,MAAA,GAAS,KAAA,CAAM,MAAA,CAAO,MAAA,CAAO,YAAY,CAAA;EAG/C,EAAA,OAAO,KAAA;EACX;;uBC1PA,MAAM,qBAAqB,KAAA,CAAM;EAAA,EAG7B,WAAA,CAAY,KAAa,OAAA,EAAiB;EACtC,IAAA,KAAA,CAAM,OAAO,CAAA;EACb,IAAA,IAAA,CAAK,OAAA,GAAU,OAAA;EACf,IAAA,IAAA,CAAK,GAAA,GAAM,GAAA;EAAA,EACf;EACJ;;ECFA,MAAM,KAAA,CAAM;EAAA,EAGR,WAAA,CAAY,MAAA,EAAgB,QAAA,GAAwC,EAAC,EAAG;EACpE,IAAA,IAAA,CAAK,MAAA,GAAS,MAAA;EACd,IAAA,IAAA,CAAK,QAAA,mBAAW,MAAA,CAAO,MAAA,CAAO,IAAI,CAAA;EAClC,IAAA,KAAA,MAAW,CAAC,IAAA,EAAM,UAAU,CAAA,IAAK,QAAA,EAAU;EACvC,MAAA,IAAA,CAAK,QAAA,CAAS,IAAI,CAAA,GAAI,UAAA;EAAA,IAC1B;EAAA,EACJ;EAAA,EAEA,OAAO,QAAA,EAA8C;EACjD,IAAA,OAAO,IAAI,KAAA,CAAM,IAAA,EAAM,QAAQ,CAAA;EAAA,EACnC;EAAA,EAEA,IAAI,IAAA,EAA0B;EAC1B,IAAA,IAAI,IAAA,CAAK,QAAA,CAAS,IAAI,CAAA,EAAG;EAAE,MAAA,OAAO,IAAA,CAAK,SAAS,IAAI,CAAA;EAAA,IAAG;EACvD,IAAA,IAAI,KAAK,MAAA,EAAQ;EAAE,MAAA,OAAO,IAAA,CAAK,MAAA,CAAO,GAAA,CAAI,IAAI,CAAA;EAAA,IAAG;EACjD,IAAA,MAAM,IAAI,KAAA,CAAM,CAAA,EAAG,IAAI,CAAA,oBAAA,CAAsB,CAAA;EAAA,EACjD;EAAA,EAEA,IAAI,IAAA,EAAuB;EACvB,IAAA,IAAI,IAAA,CAAK,QAAA,CAAS,IAAI,CAAA,EAAG,OAAO,IAAA;EAChC,IAAA,OAAO,KAAK,MAAA,GAAS,IAAA,CAAK,MAAA,CAAO,GAAA,CAAI,IAAI,CAAA,GAAI,KAAA;EAAA,EACjD;EACJ;;EC2BO,MAAM,QAAA,GAAW,EAAC,IAAA,EAAM,MAAA,EAAM;EAC9B,MAAM,UAAA,GAAa,EAAC,IAAA,EAAM,QAAA,EAAQ;EAClC,MAAM,UAAA,GAAa,EAAC,IAAA,EAAM,QAAA,EAAQ;EAClC,MAAM,WAAA,GAAc,EAAC,IAAA,EAAM,SAAA,EAAS;EACpC,MAAM,SAAA,GAAY,EAAC,IAAA,EAAM,OAAA,EAAO;EAChC,MAAM,UAAA,GAAa,EAAC,IAAA,EAAM,QAAA,EAAQ;EAClC,MAAM,SAAA,GAAY,EAAC,IAAA,EAAM,OAAA,EAAO;EAChC,MAAM,SAAA,GAAY,EAAC,IAAA,EAAM,OAAA,EAAO;EAChC,MAAM,YAAA,GAAe,EAAC,IAAA,EAAM,UAAA,EAAU;EACtC,MAAM,aAAA,GAAgB,EAAC,IAAA,EAAM,WAAA,EAAW;EACxC,MAAM,iBAAA,GAAoB,EAAC,IAAA,EAAM,eAAA,EAAe;EAEhD,SAASC,OAAA,CAAM,UAAgB,CAAA,EAA8B;EAChE,EAAA,OAAO;EAAA,IACH,IAAA,EAAM,OAAA;EAAA,IACN,QAAA;EAAA,IACA;EAAA,GACJ;EACJ;EAEO,SAASC,WAAS,IAAA,EAAoB;EACzC,EAAA,IAAI,IAAA,CAAK,SAAS,OAAA,EAAS;EACvB,IAAA,MAAM,QAAA,GAAWA,UAAA,CAAS,IAAA,CAAK,QAAQ,CAAA;EACvC,IAAA,OAAO,OAAO,IAAA,CAAK,CAAA,KAAM,QAAA,GACrB,CAAA,MAAA,EAAS,QAAQ,CAAA,EAAA,EAAK,IAAA,CAAK,CAAC,CAAA,CAAA,CAAA,GAC5B,KAAK,QAAA,CAAS,IAAA,KAAS,OAAA,GAAU,OAAA,GAAU,SAAS,QAAQ,CAAA,CAAA,CAAA;EAAA,EACpE,CAAA,MAAO;EACH,IAAA,OAAO,IAAA,CAAK,IAAA;EAAA,EAChB;EACJ;EAEA,MAAM,gBAAA,GAAmB;EAAA,EACrB,QAAA;EAAA,EACA,UAAA;EAAA,EACA,UAAA;EAAA,EACA,WAAA;EAAA,EACA,SAAA;EAAA,EACA,aAAA;EAAA,EACA,UAAA;EAAA,EACAD,QAAM,SAAS,CAAA;EAAA,EACf;EACJ,CAAA;EAOO,SAAS,YAAA,CAAa,UAAgB,CAAA,EAAoC;EAC7E,EAAA,IAAI,CAAA,CAAE,SAAS,OAAA,EAAS;EAEpB,IAAA,OAAO,IAAA;EAAA,EACX,CAAA,MAAA,IAAW,QAAA,CAAS,IAAA,KAAS,OAAA,EAAS;EAClC,IAAA,IAAI,CAAA,CAAE,IAAA,KAAS,OAAA,KACT,CAAA,CAAE,CAAA,KAAM,KAAK,CAAA,CAAE,QAAA,CAAS,IAAA,KAAS,OAAA,IAAY,CAAC,YAAA,CAAa,SAAS,QAAA,EAAU,CAAA,CAAE,QAAQ,CAAA,CAAA,KACzF,OAAO,QAAA,CAAS,MAAM,QAAA,IAAY,QAAA,CAAS,CAAA,KAAM,CAAA,CAAE,CAAA,CAAA,EAAI;EACxD,MAAA,OAAO,IAAA;EAAA,IACX;EAAA,EACJ,CAAA,MAAA,IAAW,QAAA,CAAS,IAAA,KAAS,CAAA,CAAE,IAAA,EAAM;EACjC,IAAA,OAAO,IAAA;EAAA,EACX,CAAA,MAAA,IAAW,QAAA,CAAS,IAAA,KAAS,OAAA,EAAS;EAClC,IAAA,KAAA,MAAW,cAAc,gBAAA,EAAkB;EACvC,MAAA,IAAI,CAAC,YAAA,CAAa,UAAA,EAAY,CAAC,CAAA,EAAG;EAC9B,QAAA,OAAO,IAAA;EAAA,MACX;EAAA,IACJ;EAAA,EACJ;EAEA,EAAA,OAAO,YAAYC,UAAA,CAAS,QAAQ,CAAC,CAAA,WAAA,EAAcA,UAAA,CAAS,CAAC,CAAC,CAAA,SAAA,CAAA;EAClE;EAEO,SAAS,WAAA,CAAY,UAAgB,YAAA,EAAoC;EAC5E,EAAA,OAAO,aAAa,IAAA,CAAK,CAAA,CAAA,KAAK,CAAA,CAAE,IAAA,KAAS,SAAS,IAAI,CAAA;EAC1D;EAEO,SAAS,iBAAA,CAAkB,UAAmB,YAAA,EAA0C;EAC3F,EAAA,OAAO,YAAA,CAAa,KAAK,CAAA,CAAA,KAAK;EAC1B,IAAA,IAAI,MAAM,MAAA,EAAQ;EACd,MAAA,OAAO,QAAA,KAAa,IAAA;EAAA,IACxB,CAAA,MAAA,IAAW,MAAM,OAAA,EAAS;EACtB,MAAA,OAAO,KAAA,CAAM,QAAQ,QAAQ,CAAA;EAAA,IACjC,CAAA,MAAA,IAAW,MAAM,QAAA,EAAU;EACvB,MAAA,OAAO,YAAY,CAAC,KAAA,CAAM,QAAQ,QAAQ,CAAA,IAAK,OAAO,QAAA,KAAa,QAAA;EAAA,IACvE,CAAA,MAAO;EACH,MAAA,OAAO,MAAM,OAAO,QAAA;EAAA,IACxB;EAAA,EACJ,CAAC,CAAA;EACL;EAEO,SAAS,UAAA,CAAW,GAAS,CAAA,EAAkB;EAClD,EAAA,IAAI,CAAA,CAAE,IAAA,KAAS,OAAA,IAAW,CAAA,CAAE,SAAS,OAAA,EAAS;EAC1C,IAAA,OAAO,CAAA,CAAE,MAAM,CAAA,CAAE,CAAA,IAAK,WAAW,CAAA,CAAE,QAAA,EAAU,EAAE,QAAQ,CAAA;EAAA,EAC3D,CAAA,MAAO;EACH,IAAA,OAAO,CAAA,CAAE,SAAS,CAAA,CAAE,IAAA;EAAA,EACxB;EACJ;;;;;;;;;ECzJA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;EAEA;EACA,CAAA,IAAI,cAAc,GAAG;KACnB,aAAa,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;KACtD,cAAc,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;KACtD,YAAY,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;KACvD,OAAO,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;KACnD,OAAO,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,gBAAgB,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;KACrD,MAAM,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,YAAY,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;KACjD,OAAO,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;KACpD,WAAW,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,YAAY,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;KACxD,WAAW,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;KACpD,gBAAgB,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;KAC9D,SAAS,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;KAC/C,UAAU,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;KAClD,eAAe,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;KAC5D,WAAW,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;KACrD,WAAW,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,aAAa,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;KAC1D,gBAAgB,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,YAAY,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;KAC5D,YAAY,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;KACpD,YAAY,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,cAAc,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;KAC9D,eAAe,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,eAAe,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;KAC7D,eAAe,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,eAAe,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;KAC7D,YAAY,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;KACvD,aAAa,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;KACxD,SAAS,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,YAAY,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;KACxD,WAAW,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,aAAa,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;KAC1D,aAAa,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;KACtD,WAAW,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,YAAY,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;KAC3D,MAAM,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;KAClD,MAAM,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;KAC7C,aAAa,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;KACtD,UAAU,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;KACvD,WAAW,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;KAClD,OAAO,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;KAClD,UAAU,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,eAAe,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;KAC7D,WAAW,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,cAAc,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;KAC3D,WAAW,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,YAAY,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;KAC3D,WAAW,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,sBAAsB,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;KACrE,WAAW,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,YAAY,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;KAC3D,WAAW,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;KAC1D,aAAa,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,eAAe,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;KAC/D,cAAc,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,gBAAgB,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;KAClE,gBAAgB,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,gBAAgB,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;KACpE,aAAa,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;KACnD,WAAW,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;KACpD,SAAS,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;KAC/C,kBAAkB,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,YAAY,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;KAC9D,cAAc,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,cAAc,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;KAC/D,gBAAgB,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,iBAAiB,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;KACpE,mBAAmB,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,iBAAiB,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;KACrE,iBAAiB,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,cAAc,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;KAChE,WAAW,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;KAC1D,UAAU,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,aAAa,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;KAC3D,MAAM,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;KAC/C,OAAO,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;KACnD,QAAQ,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;KAClD,QAAQ,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,eAAe,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;KAC3D,WAAW,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,eAAe,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;KAC9D,eAAe,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,YAAY,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;KAC/D,WAAW,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;KACpD,MAAM,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;KAChD,YAAY,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;KACtD,eAAe,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;KAC/B,KAAK,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;KAChD,WAAW,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,aAAa,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;KACzD,QAAQ,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,YAAY,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;KACvD,UAAU,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;KACtD,QAAQ,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;KAClD,SAAS,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;KACvD,WAAW,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;KAC1D,MAAM,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,aAAa,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;KACrD,WAAW,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;KACnD,MAAM,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;KACjD,QAAQ,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;KACpD,QAAQ,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;KACnD,OAAO,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,YAAY,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;KACvD,QAAQ,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,aAAa,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;;GAExD,SAAS,cAAc,CAAC,CAAC,EAAE;KACzB,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;EACpB,GAAE,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;EACtC,CAAA;;GAEA,SAAS,eAAe,CAAC,CAAC,EAAE;EAC5B,GAAE,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC;EAClC,CAAA;;GAEA,SAAS,aAAa,CAAC,GAAG,EAAE;KAC1B,IAAI,GAAG,CAAC,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC,KAAK,GAAG;OAC7B,OAAO,cAAc,CAAC,UAAU,CAAC,GAAG,CAAC,GAAG,GAAG,GAAG,GAAG,CAAC;EACtD,GAAE,OAAO,cAAc,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;EACtC,CAAA;;GAEA,SAAS,eAAe,CAAC,GAAG,EAAE;KAC5B,IAAI,GAAG,CAAC,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC,KAAK,GAAG;OAC7B,OAAO,eAAe,CAAC,UAAU,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC;EACjD,GAAE,OAAO,eAAe,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;EACzC,CAAA;;EAEA,CAAA,SAAS,cAAc,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE;EACnC,GAAE,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC;EACnB,QAAO,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC;;EAExB,GAAE,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,OAAO,EAAE,GAAG,CAAC,EAAE,GAAG,EAAE,IAAI,CAAC,GAAG,CAAC;KAC5C,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,OAAO,EAAE;KACxB,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,OAAO,EAAE,GAAG,CAAC,EAAE,GAAG,EAAE,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC;EACtD,GAAE,OAAO,EAAE;EACX,CAAA;;GAEA,SAAS,aAAa,CAAC,OAAO,EAAE;EAChC;EACA,GAAE,IAAI,GAAG,GAAG,OAAO,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,WAAW,EAAE;;EAEnD;EACA,GAAE,IAAI,GAAG,IAAI,cAAc,EAAE,OAAO,cAAc,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,CAAC;;EAEhE;EACA,GAAE,IAAI,GAAG,CAAC,CAAC,CAAC,KAAK,GAAG,EAAE;EACtB,KAAI,IAAI,GAAG,CAAC,MAAM,KAAK,CAAC,EAAE;EAC1B,OAAM,IAAI,EAAE,GAAG,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;EAC3C,OAAM,IAAI,EAAE,EAAE,IAAI,CAAC,IAAI,EAAE,IAAI,KAAK,CAAC,EAAE,OAAO,IAAI,CAAC;EACjD,OAAM,OAAO,CAAC,CAAC,CAAC,EAAE,GAAG,KAAK,KAAK,CAAC,KAAK,CAAC,EAAE,GAAG,KAAK,KAAK,CAAC,CAAC;iBACzC,CAAC,EAAE,GAAG,IAAI,KAAK,CAAC,EAAE,GAAG,IAAI,KAAK,CAAC,CAAC;iBAChC,CAAC,EAAE,GAAG,GAAG,KAAK,CAAC,EAAE,GAAG,GAAG,KAAK,CAAC,CAAC;EAC5C,eAAc,CAAC,CAAC;EAChB,KAAA,CAAK,MAAM,IAAI,GAAG,CAAC,MAAM,KAAK,CAAC,EAAE;EACjC,OAAM,IAAI,EAAE,GAAG,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;EAC3C,OAAM,IAAI,EAAE,EAAE,IAAI,CAAC,IAAI,EAAE,IAAI,QAAQ,CAAC,EAAE,OAAO,IAAI,CAAC;EACpD,OAAM,OAAO,CAAC,CAAC,EAAE,GAAG,QAAQ,KAAK,EAAE;EACnC,eAAc,CAAC,EAAE,GAAG,MAAM,KAAK,CAAC;iBAClB,EAAE,GAAG,IAAI;EACvB,eAAc,CAAC,CAAC;EAChB,KAAA;;EAEA,KAAI,OAAO,IAAI;EACf,GAAA;;EAEA,GAAE,IAAI,EAAE,GAAG,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,EAAE,GAAG,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC;EAClD,GAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,CAAC,KAAK,GAAG,CAAC,MAAM,EAAE;OACtC,IAAI,KAAK,GAAG,GAAG,CAAC,MAAM,CAAC,CAAC,EAAE,EAAE,CAAC;OAC7B,IAAI,MAAM,GAAG,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC;EACvD,KAAI,IAAI,KAAK,GAAG,CAAC,CAAC;EAClB,KAAI,QAAQ,KAAK;EACjB,OAAM,KAAK,MAAM;WACT,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,OAAO,IAAI;WACpC,KAAK,GAAG,eAAe,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC;EAC7C;EACA,OAAM,KAAK,KAAK;WACR,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,OAAO,IAAI;WACpC,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;EACxC,iBAAgB,aAAa,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;EACxC,iBAAgB,aAAa,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;EACxC,iBAAgB,KAAK,CAAC;EACtB,OAAM,KAAK,MAAM;WACT,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,OAAO,IAAI;WACpC,KAAK,GAAG,eAAe,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC;EAC7C;EACA,OAAM,KAAK,KAAK;WACR,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,OAAO,IAAI;WACpC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,CAAC;EACpE;EACA;WACQ,IAAI,CAAC,GAAG,eAAe,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;WAClC,IAAI,CAAC,GAAG,eAAe,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;WAClC,IAAI,EAAE,GAAG,CAAC,IAAI,GAAG,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC;EACvD,SAAQ,IAAI,EAAE,GAAG,CAAC,GAAG,CAAC,GAAG,EAAE;EAC3B,SAAQ,OAAO,CAAC,cAAc,CAAC,cAAc,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC;EACnE,iBAAgB,cAAc,CAAC,cAAc,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,GAAG,GAAG,CAAC;EAC/D,iBAAgB,cAAc,CAAC,cAAc,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC;EACnE,iBAAgB,KAAK,CAAC;SAChB;EACN,SAAQ,OAAO,IAAI;EACnB;EACA,GAAA;;EAEA,GAAE,OAAO,IAAI;EACb,CAAA;;GAEA,IAAI,EAAE,4BAAqB,GAAG,cAAa,EAAE,CAAC,MAAM,CAAC,EAAE,EAAA;;;;;;ECxMhD,SAAS,IAAA,CAAK,CAAA,EAAW,CAAA,EAAW,CAAA,EAAmB;EAC1D,EAAA,OAAQ,CAAA,IAAK,CAAA,GAAI,CAAA,CAAA,GAAO,CAAA,GAAI,CAAA;EAChC;;ECKA,MAAM,UAAA,uBAAqC,GAAA,EAAI;EAa/C,MAAM,KAAA,CAAM;EAAA,EAMR,WAAA,CAAY,CAAA,EAAW,CAAA,EAAW,CAAA,EAAW,IAAY,CAAA,EAAG;EACxD,IAAA,IAAA,CAAK,CAAA,GAAI,CAAA;EACT,IAAA,IAAA,CAAK,CAAA,GAAI,CAAA;EACT,IAAA,IAAA,CAAK,CAAA,GAAI,CAAA;EACT,IAAA,IAAA,CAAK,CAAA,GAAI,CAAA;EAAA,EACb;EAAA;EAAA;EAAA;EAAA;EAAA,EAYA,OAAO,MAAM,KAAA,EAAkD;EAC3D,IAAA,IAAI,CAAC,KAAA,EAAO;EACR,MAAA,OAAO,MAAA;EAAA,IACX;EAEA,IAAA,IAAI,iBAAiB,KAAA,EAAO;EACxB,MAAA,OAAO,KAAA;EAAA,IACX;EAEA,IAAA,IAAI,OAAO,UAAU,QAAA,EAAU;EAC3B,MAAA,OAAO,MAAA;EAAA,IACX;EAEA,IAAA,MAAM,MAAA,GAAS,UAAA,CAAW,GAAA,CAAI,KAAK,CAAA;EACnC,IAAA,IAAI,MAAA,EAAQ;EACR,MAAA,OAAO,MAAA;EAAA,IACX;EAEA,IAAA,MAAM,IAAA,GAAOC,oCAAc,KAAK,CAAA;EAChC,IAAA,IAAI,CAAC,IAAA,EAAM;EACP,MAAA,OAAO,MAAA;EAAA,IACX;EAEA,IAAA,MAAM,QAAQ,IAAI,KAAA;EAAA,MACd,IAAA,CAAK,CAAC,CAAA,GAAI,GAAA;EAAA,MACV,IAAA,CAAK,CAAC,CAAA,GAAI,GAAA;EAAA,MACV,IAAA,CAAK,CAAC,CAAA,GAAI,GAAA;EAAA,MACV,KAAK,CAAC;EAAA,KACV;EACA,IAAA,UAAA,CAAW,GAAA,CAAI,OAAO,KAAK,CAAA;EAC3B,IAAA,OAAO,KAAA;EAAA,EACX;EAAA;EAAA;EAAA;EAAA;EAAA;EAAA;EAAA;EAAA;EAAA;EAAA;EAAA,EAYA,QAAA,GAAmB;EACf,IAAA,MAAM,EAAC,CAAA,EAAG,CAAA,EAAG,CAAA,EAAG,GAAC,GAAI,IAAA;EACrB,IAAA,OAAO,QAAQ,IAAA,CAAK,KAAA,CAAM,IAAI,GAAG,CAAC,IAAI,IAAA,CAAK,KAAA,CAAM,IAAI,GAAG,CAAC,IAAI,IAAA,CAAK,KAAA,CAAM,IAAI,GAAG,CAAC,IAAI,CAAC,CAAA,CAAA,CAAA;EAAA,EACzF;EAAA,EAEA,8BAA8B,GAAA,EAA8C;EACxE,IAAA,MAAM,EAAC,CAAA,EAAG,CAAA,EAAG,CAAA,EAAG,GAAC,GAAI,IAAA;EACrB,IAAA,OAAO,IAAI,2BAAA,CAA4B,GAAA,EAAK,CAAA,EAAG,CAAA,EAAG,GAAG,CAAC,CAAA;EAAA,EAC1D;EAAA,EAEA,2BAA2B,GAAA,EAA8C;EACrE,IAAA,MAAM,EAAC,CAAA,EAAG,CAAA,EAAG,CAAA,EAAG,GAAC,GAAI,IAAA;EACrB,IAAA,OAAO,IAAI,yBAAyB,GAAA,EAAK,CAAA,GAAI,GAAG,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,CAAA,EAAG,CAAC,CAAA;EAAA,EACnE;EAAA,EAEA,KAAA,GAAe;EACX,IAAA,OAAO,IAAI,MAAM,IAAA,CAAK,CAAA,EAAG,KAAK,CAAA,EAAG,IAAA,CAAK,CAAA,EAAG,IAAA,CAAK,CAAC,CAAA;EAAA,EACnD;EACJ;EAEO,MAAe,WAAA,CAAY;EAAA,EAQ9B,YAAY,GAAA,EAAiB,CAAA,EAAW,GAAW,CAAA,EAAW,CAAA,EAAW,gBAAyB,KAAA,EAAO;EAPzG,IAAA,IAAA,CAAA,aAAA,GAAyB,KAAA;EAQrB,IAAA,IAAA,CAAK,aAAA,GAAgB,aAAA;EACrB,IAAA,IAAI,CAAC,GAAA,EAAK;EACN,MAAA,IAAA,CAAK,CAAA,GAAI,CAAA;EACT,MAAA,IAAA,CAAK,CAAA,GAAI,CAAA;EACT,MAAA,IAAA,CAAK,CAAA,GAAI,CAAA;EACT,MAAA,IAAA,CAAK,CAAA,GAAI,CAAA;EAAA,IACb,CAAA,MAAO;EACH,MAAA,MAAM,CAAA,GAAI,IAAI,KAAA,CAAM,MAAA;EACpB,MAAA,MAAM,KAAK,CAAA,GAAI,CAAA;EAIf,MAAA,IAAI,KAAK,aAAA,EAAe;EACpB,QAAA,CAAA,GAAI,CAAA,KAAM,CAAA,GAAI,CAAA,GAAK,CAAA,GAAI,KAAM,CAAA,GAAI,CAAA,CAAA;EACjC,QAAA,CAAA,GAAI,CAAA,KAAM,CAAA,GAAI,CAAA,GAAK,CAAA,GAAI,KAAM,CAAA,GAAI,CAAA,CAAA;EACjC,QAAA,CAAA,GAAI,CAAA,KAAM,CAAA,GAAI,CAAA,GAAK,CAAA,GAAI,KAAM,CAAA,GAAI,CAAA,CAAA;EAAA,MACrC,CAAA,MAAO;EACH,QAAA,CAAA,GAAI,KAAK,CAAA,GAAI,CAAA,CAAA;EACb,QAAA,CAAA,GAAI,KAAK,CAAA,GAAI,CAAA,CAAA;EACb,QAAA,CAAA,GAAI,KAAK,CAAA,GAAI,CAAA,CAAA;EAAA,MACjB;EAGA,MAAA,CAAA,GAAI,IAAA,CAAK,IAAI,CAAA,EAAG,IAAA,CAAK,IAAI,CAAA,GAAI,CAAA,EAAG,CAAC,CAAC,CAAA;EAClC,MAAA,CAAA,GAAI,IAAA,CAAK,IAAI,CAAA,EAAG,IAAA,CAAK,IAAI,CAAA,GAAI,CAAA,EAAG,CAAC,CAAC,CAAA;EAClC,MAAA,CAAA,GAAI,IAAA,CAAK,IAAI,CAAA,EAAG,IAAA,CAAK,IAAI,CAAA,GAAI,CAAA,EAAG,CAAC,CAAC,CAAA;EAGlC,MAAA,MAAM,EAAA,GAAK,IAAA,CAAK,KAAA,CAAM,CAAC,CAAA;EACvB,MAAA,MAAM,EAAA,GAAK,IAAA,CAAK,KAAA,CAAM,CAAC,CAAA;EACvB,MAAA,MAAM,EAAA,GAAK,IAAA,CAAK,KAAA,CAAM,CAAC,CAAA;EACvB,MAAA,MAAM,EAAA,GAAK,IAAA,CAAK,IAAA,CAAK,CAAC,CAAA;EACtB,MAAA,MAAM,EAAA,GAAK,IAAA,CAAK,IAAA,CAAK,CAAC,CAAA;EACtB,MAAA,MAAM,EAAA,GAAK,IAAA,CAAK,IAAA,CAAK,CAAC,CAAA;EAGtB,MAAA,MAAM,KAAK,CAAA,GAAI,EAAA;EACf,MAAA,MAAM,KAAK,CAAA,GAAI,EAAA;EACf,MAAA,MAAM,KAAK,CAAA,GAAI,EAAA;EAEf,MAAA,MAAM,IAAA,GAAO,IAAI,KAAA,CAAM,IAAA;EACvB,MAAA,MAAM,EAAA,GAAA,CAAM,EAAA,GAAK,EAAA,GAAK,EAAA,GAAK,KAAK,CAAA,IAAK,CAAA;EACrC,MAAA,MAAM,EAAA,GAAA,CAAM,EAAA,GAAK,EAAA,GAAK,EAAA,GAAK,KAAK,CAAA,IAAK,CAAA;EACrC,MAAA,MAAM,EAAA,GAAA,CAAM,EAAA,GAAK,EAAA,GAAK,EAAA,GAAK,KAAK,CAAA,IAAK,CAAA;EACrC,MAAA,MAAM,EAAA,GAAA,CAAM,EAAA,GAAK,EAAA,GAAK,EAAA,GAAK,KAAK,CAAA,IAAK,CAAA;EACrC,MAAA,MAAM,EAAA,GAAA,CAAM,EAAA,GAAK,EAAA,GAAK,EAAA,GAAK,KAAK,CAAA,IAAK,CAAA;EACrC,MAAA,MAAM,EAAA,GAAA,CAAM,EAAA,GAAK,EAAA,GAAK,EAAA,GAAK,KAAK,CAAA,IAAK,CAAA;EACrC,MAAA,MAAM,EAAA,GAAA,CAAM,EAAA,GAAK,EAAA,GAAK,EAAA,GAAK,KAAK,CAAA,IAAK,CAAA;EACrC,MAAA,MAAM,EAAA,GAAA,CAAM,EAAA,GAAK,EAAA,GAAK,EAAA,GAAK,KAAK,CAAA,IAAK,CAAA;EAIrC,MAAA,IAAA,CAAK,CAAA,GAAI,IAAA;EAAA,QACL,IAAA;EAAA,UACI,KAAK,IAAA,CAAK,EAAE,GAAI,IAAA,CAAK,EAAE,GAAI,EAAE,CAAA;EAAA,UAC7B,KAAK,IAAA,CAAK,EAAE,GAAI,IAAA,CAAK,EAAE,GAAI,EAAE,CAAA;EAAA,UAAG;EAAA,SAAE;EAAA,QACtC,IAAA;EAAA,UACI,KAAK,IAAA,CAAK,EAAE,GAAI,IAAA,CAAK,EAAE,GAAI,EAAE,CAAA;EAAA,UAC7B,KAAK,IAAA,CAAK,EAAE,GAAI,IAAA,CAAK,EAAE,GAAI,EAAE,CAAA;EAAA,UAAG;EAAA,SAAE;EAAA,QAAG;EAAA,OAAE,GAAI,GAAA,IAAO,IAAA,CAAK,aAAA,GAAgB,CAAA,GAAI,CAAA,CAAA;EACnF,MAAA,IAAA,CAAK,CAAA,GAAI,IAAA;EAAA,QACL,IAAA;EAAA,UACI,IAAA,CAAK,KAAK,EAAA,GAAK,CAAC,GAAI,IAAA,CAAK,EAAA,GAAK,CAAC,CAAA,EAAI,EAAE,CAAA;EAAA,UACrC,IAAA,CAAK,KAAK,EAAA,GAAK,CAAC,GAAI,IAAA,CAAK,EAAA,GAAK,CAAC,CAAA,EAAI,EAAE,CAAA;EAAA,UAAG;EAAA,SAAE;EAAA,QAC9C,IAAA;EAAA,UACI,IAAA,CAAK,KAAK,EAAA,GAAK,CAAC,GAAI,IAAA,CAAK,EAAA,GAAK,CAAC,CAAA,EAAI,EAAE,CAAA;EAAA,UACrC,IAAA,CAAK,KAAK,EAAA,GAAK,CAAC,GAAI,IAAA,CAAK,EAAA,GAAK,CAAC,CAAA,EAAI,EAAE,CAAA;EAAA,UAAG;EAAA,SAAE;EAAA,QAAG;EAAA,OAAE,GAAI,GAAA,IAAO,IAAA,CAAK,aAAA,GAAgB,CAAA,GAAI,CAAA,CAAA;EAC3F,MAAA,IAAA,CAAK,CAAA,GAAI,IAAA;EAAA,QACL,IAAA;EAAA,UACI,IAAA,CAAK,KAAK,EAAA,GAAK,CAAC,GAAI,IAAA,CAAK,EAAA,GAAK,CAAC,CAAA,EAAI,EAAE,CAAA;EAAA,UACrC,IAAA,CAAK,KAAK,EAAA,GAAK,CAAC,GAAI,IAAA,CAAK,EAAA,GAAK,CAAC,CAAA,EAAI,EAAE,CAAA;EAAA,UAAG;EAAA,SAAE;EAAA,QAC9C,IAAA;EAAA,UACI,IAAA,CAAK,KAAK,EAAA,GAAK,CAAC,GAAI,IAAA,CAAK,EAAA,GAAK,CAAC,CAAA,EAAI,EAAE,CAAA;EAAA,UACrC,IAAA,CAAK,KAAK,EAAA,GAAK,CAAC,GAAI,IAAA,CAAK,EAAA,GAAK,CAAC,CAAA,EAAI,EAAE,CAAA;EAAA,UAAG;EAAA,SAAE;EAAA,QAAG;EAAA,OAAE,GAAI,GAAA,IAAO,IAAA,CAAK,aAAA,GAAgB,CAAA,GAAI,CAAA,CAAA;EAC3F,MAAA,IAAA,CAAK,CAAA,GAAI,CAAA;EAAA,IACb;EAAA,EACJ;EAAA;EAAA;EAAA;EAAA;EAAA,EAMA,OAAA,GAA4C;EACxC,IAAA,MAAM,EAAC,CAAA,EAAG,CAAA,EAAG,CAAA,EAAG,GAAC,GAAI,IAAA;EAErB,IAAA,OAAO;EAAA,MACH,CAAA,GAAI,GAAA;EAAA,MACJ,CAAA,GAAI,GAAA;EAAA,MACJ,CAAA,GAAI,GAAA;EAAA,MACJ;EAAA,KACJ;EAAA,EAEJ;EAAA;EAAA;EAAA;EAAA;EAAA,EAMA,WAAA,GAAgD;EAC5C,IAAA,IAAI,EAAC,CAAA,EAAG,CAAA,EAAG,CAAA,EAAG,GAAC,GAAI,IAAA;EAEnB,IAAA,IAAI,KAAK,aAAA,EAAe;EACpB,MAAA,IAAI,MAAM,CAAA,EAAG,OAAO,CAAC,CAAA,EAAG,CAAA,EAAG,GAAG,CAAC,CAAA;EAC/B,MAAA,MAAM,OAAO,CAAA,GAAI,CAAA;EACjB,MAAA,CAAA,IAAK,IAAA;EACL,MAAA,CAAA,IAAK,IAAA;EACL,MAAA,CAAA,IAAK,IAAA;EAAA,IACT;EAEA,IAAA,MAAM,GAAA,GAAM,KAAK,GAAA,CAAI,IAAA,CAAK,IAAI,CAAA,EAAG,CAAC,GAAG,CAAC,CAAA;EACtC,IAAA,MAAM,KAAA,GAAQ,KAAK,GAAA,CAAI,IAAA,CAAK,IAAI,CAAA,EAAG,CAAC,GAAG,CAAC,CAAA;EACxC,IAAA,MAAM,IAAA,GAAO,KAAK,GAAA,CAAI,IAAA,CAAK,IAAI,CAAA,EAAG,CAAC,GAAG,CAAC,CAAA;EAEvC,IAAA,MAAM,GAAA,GAAM,IAAA,CAAK,GAAA,CAAI,GAAA,EAAK,OAAO,IAAI,CAAA;EACrC,IAAA,MAAM,GAAA,GAAM,IAAA,CAAK,GAAA,CAAI,GAAA,EAAK,OAAO,IAAI,CAAA;EACrC,IAAA,MAAM,QAAQ,GAAA,GAAM,GAAA;EAEpB,IAAA,MAAM,CAAA,GAAA,CAAK,MAAM,GAAA,IAAO,GAAA;EAExB,IAAA,IAAI,UAAU,CAAA,EAAG;EACb,MAAA,OAAO,CAAC,CAAA,EAAG,CAAA,EAAG,CAAA,GAAI,KAAK,CAAC,CAAA;EAAA,IAC5B;EAEA,IAAA,MAAM,CAAA,GAAI,IAAI,GAAA,GAAM,KAAA,IAAS,IAAI,GAAA,GAAM,GAAA,CAAA,GAAO,SAAS,GAAA,GAAM,GAAA,CAAA;EAE7D,IAAA,IAAI,CAAA;EACJ,IAAA,QAAQ,GAAA;EAAK,MACb,KAAK,GAAA;EACD,QAAA,CAAA,GAAA,CAAA,CAAM,QAAQ,IAAA,IAAQ,KAAA,IAAS,KAAA,GAAQ,IAAA,GAAO,IAAI,CAAA,CAAA,IAAM,EAAA;EACxD,QAAA;EAAA,MACJ,KAAK,KAAA;EACD,QAAA,CAAA,GAAA,CAAA,CAAM,IAAA,GAAO,GAAA,IAAO,KAAA,GAAQ,CAAA,IAAK,EAAA;EACjC,QAAA;EAAA,MACJ;EACI,QAAA,CAAA,GAAA,CAAA,CAAM,GAAA,GAAM,KAAA,IAAS,KAAA,GAAQ,CAAA,IAAK,EAAA;EAAA;EAGtC,IAAA,OAAO,CAAC,CAAA,EAAG,CAAA,GAAI,GAAA,EAAK,CAAA,GAAI,KAAK,CAAC,CAAA;EAAA,EAClC;EAAA;EAAA;EAAA;EAAA;EAAA;EAAA,EAOA,SAAA,GAA8C;EAC1C,IAAA,MAAM,EAAC,CAAA,EAAG,CAAA,EAAG,CAAA,EAAG,GAAC,GAAI,IAAA;EAErB,IAAA,OAAO;EAAA,MACH,CAAA;EAAA,MACA,CAAA;EAAA,MACA,CAAA;EAAA,MACA;EAAA,KACJ;EAAA,EACJ;EAAA;EAAA;EAAA;EAAA;EAAA;EAAA;EAAA,EAQA,gBAAgB,KAAA,EAAyC;EACrD,IAAA,MAAM,EAAC,CAAA,EAAG,CAAA,EAAG,CAAA,EAAC,GAAI,IAAA;EAElB,IAAA,OAAO;EAAA,MACH,CAAA,GAAI,KAAA;EAAA,MACJ,CAAA,GAAI,KAAA;EAAA,MACJ,CAAA,GAAI;EAAA,KACR;EAAA,EACJ;EAAA;EAAA;EAAA;EAAA;EAAA;EAAA;EAAA,EAQA,eAAA,GAAoD;EAChD,IAAA,MAAM,EAAC,CAAA,EAAG,CAAA,EAAG,CAAA,EAAG,GAAC,GAAI,IAAA;EAErB,IAAA,OAAO;EAAA,MACH,IAAA,CAAK,GAAA,CAAI,CAAA,EAAG,GAAG,CAAA;EAAA,MACf,IAAA,CAAK,GAAA,CAAI,CAAA,EAAG,GAAG,CAAA;EAAA,MACf,IAAA,CAAK,GAAA,CAAI,CAAA,EAAG,GAAG,CAAA;EAAA,MACf;EAAA,KACJ;EAAA,EACJ;EACJ;EAMO,MAAM,oCAAoC,WAAA,CAAY;EAAA,EACzD,WAAA,CAAY,GAAA,EAAiB,CAAA,EAAW,CAAA,EAAW,GAAW,CAAA,EAAW;EACrE,IAAA,KAAA,CAAM,GAAA,EAAK,CAAA,EAAG,CAAA,EAAG,CAAA,EAAG,GAAG,KAAK,CAAA;EAAA,EAChC;EACJ;EAMO,MAAM,iCAAiC,WAAA,CAAY;EAAA,EACtD,WAAA,CAAY,GAAA,EAAiB,CAAA,EAAW,CAAA,EAAW,GAAW,CAAA,EAAW;EACrE,IAAA,KAAA,CAAM,GAAA,EAAK,CAAA,EAAG,CAAA,EAAG,CAAA,EAAG,GAAG,IAAI,CAAA;EAAA,EAC/B;EACJ;EAEA,KAAA,CAAM,QAAQ,IAAI,KAAA,CAAM,CAAA,EAAG,CAAA,EAAG,GAAG,CAAC,CAAA;EAClC,KAAA,CAAM,QAAQ,IAAI,KAAA,CAAM,CAAA,EAAG,CAAA,EAAG,GAAG,CAAC,CAAA;EAClC,KAAA,CAAM,cAAc,IAAI,KAAA,CAAM,CAAA,EAAG,CAAA,EAAG,GAAG,CAAC,CAAA;EACxC,KAAA,CAAM,MAAM,IAAI,KAAA,CAAM,CAAA,EAAG,CAAA,EAAG,GAAG,CAAC,CAAA;EAChC,KAAA,CAAM,OAAO,IAAI,KAAA,CAAM,CAAA,EAAG,CAAA,EAAG,GAAG,CAAC,CAAA;;ECxUjC,MAAqB,QAAA,CAAS;EAAA,EAK1B,WAAA,CAAY,aAAA,EAAwB,kBAAA,EAA6B,MAAA,EAAuB;EACpF,IAAA,IAAI,aAAA;EACA,MAAA,IAAA,CAAK,WAAA,GAAc,qBAAqB,SAAA,GAAY,MAAA;EAAA;EAEpD,MAAA,IAAA,CAAK,WAAA,GAAc,qBAAqB,QAAA,GAAW,MAAA;EAEvD,IAAA,IAAA,CAAK,MAAA,GAAS,MAAA;EACd,IAAA,IAAA,CAAK,QAAA,GAAW,IAAI,IAAA,CAAK,QAAA;EAAA,MAAS,IAAA,CAAK,MAAA,GAAS,IAAA,CAAK,MAAA,GAAS,EAAC;EAAA,MAC3D,EAAC,WAAA,EAAa,IAAA,CAAK,WAAA,EAAa,OAAO,QAAA;EAAQ,KAAC;EAAA,EACxD;EAAA,EAEA,OAAA,CAAQ,KAAa,GAAA,EAAqB;EACtC,IAAA,OAAO,IAAA,CAAK,QAAA,CAAS,OAAA,CAAQ,GAAA,EAAK,GAAG,CAAA;EAAA,EACzC;EAAA,EAEA,cAAA,GAAyB;EAGrB,IAAA,OAAO,IAAI,IAAA,CAAK,QAAA,CAAS,IAAA,CAAK,MAAA,GAAS,IAAA,CAAK,MAAA,GAAS,EAAE,CAAA,CAClD,eAAA,EAAgB,CAAE,MAAA;EAAA,EAC3B;EACJ;;ECvBO,MAAM,gBAAA,CAAiB;EAAA,EAO1B,WAAA,CAAY,IAAA,EAAc,KAAA,EAA6B,KAAA,EAAsB,WAA0B,SAAA,EAAyB;EAE5H,IAAA,IAAA,CAAK,IAAA,GAAO,IAAA,CAAK,SAAA,GAAY,IAAA,CAAK,WAAU,GAAI,IAAA;EAChD,IAAA,IAAA,CAAK,KAAA,GAAQ,KAAA;EACb,IAAA,IAAA,CAAK,KAAA,GAAQ,KAAA;EACb,IAAA,IAAA,CAAK,SAAA,GAAY,SAAA;EACjB,IAAA,IAAA,CAAK,SAAA,GAAY,SAAA;EAAA,EACrB;EACJ;EAEA,MAAqB,SAAA,CAAU;EAAA,EAG3B,YAAY,QAAA,EAAmC;EAC3C,IAAA,IAAA,CAAK,QAAA,GAAW,QAAA;EAAA,EACpB;EAAA,EAEA,OAAO,WAAW,WAAA,EAAgC;EAC9C,IAAA,OAAO,IAAI,SAAA,CAAU,CAAC,IAAI,gBAAA,CAAiB,WAAA,EAAa,IAAA,EAAM,IAAA,EAAM,IAAA,EAAM,IAAI,CAAC,CAAC,CAAA;EAAA,EACpF;EAAA,EAEA,OAAA,GAAmB;EACf,IAAA,IAAI,IAAA,CAAK,QAAA,CAAS,MAAA,KAAW,CAAA,EAAG,OAAO,IAAA;EACvC,IAAA,OAAO,CAAC,IAAA,CAAK,QAAA,CAAS,IAAA,CAAK,CAAA,OAAA,KAAW;EAClC,MAAA,IAAI,OAAA,CAAQ,IAAA,CAAK,MAAA,KAAW,CAAA,EAAG,OAAO,IAAA;EACtC,MAAA,IAAI,CAAC,OAAA,CAAQ,KAAA,EAAO,OAAO,KAAA;EAC3B,MAAA,OAAO,OAAA,CAAQ,MAAM,UAAA,EAAW;EAAA,IACpC,CAAC,CAAA;EAAA,EACL;EAAA,EAEA,OAAO,QAAQ,IAAA,EAAqC;EAChD,IAAA,IAAI,gBAAgB,SAAA,EAAW;EAC3B,MAAA,OAAO,IAAA;EAAA,IACX,CAAA,MAAO;EACH,MAAA,OAAO,SAAA,CAAU,WAAW,IAAI,CAAA;EAAA,IACpC;EAAA,EACJ;EAAA,EAEA,QAAA,GAAmB;EACf,IAAA,IAAI,IAAA,CAAK,QAAA,CAAS,MAAA,KAAW,CAAA,EAAG,OAAO,EAAA;EACvC,IAAA,OAAO,IAAA,CAAK,SAAS,GAAA,CAAI,CAAA,OAAA,KAAW,QAAQ,IAAI,CAAA,CAAE,KAAK,EAAE,CAAA;EAAA,EAC7D;EAAA,EAEA,SAAA,GAA4B;EACxB,IAAA,MAAM,UAAA,GAA6B,CAAC,QAAQ,CAAA;EAC5C,IAAA,KAAA,MAAW,OAAA,IAAW,KAAK,QAAA,EAAU;EACjC,MAAA,IAAI,QAAQ,KAAA,EAAO;EACf,QAAA,MAAM,YAAY,OAAA,CAAQ,KAAA,CAAM,UAAA,EAAW,CAAE,GAAG,QAAA,EAAS;EACzD,QAAA,UAAA,CAAW,IAAA,CAAK,CAAC,OAAA,EAAS,SAAS,CAAC,CAAA;EACpC,QAAA;EAAA,MACJ;EACA,MAAA,UAAA,CAAW,IAAA,CAAK,QAAQ,IAAI,CAAA;EAC5B,MAAA,MAAM,UAEF,EAAC;EACL,MAAA,IAAI,QAAQ,SAAA,EAAW;EACnB,QAAA,OAAA,CAAQ,WAAW,IAAI,CAAC,SAAA,EAAW,QAAQ,SAAA,CAAU,KAAA,CAAM,GAAG,CAAC,CAAA;EAAA,MACnE;EACA,MAAA,IAAI,QAAQ,KAAA,EAAO;EACf,QAAA,OAAA,CAAQ,YAAY,IAAI,OAAA,CAAQ,KAAA;EAAA,MACpC;EACA,MAAA,IAAI,QAAQ,SAAA,EAAW;EACnB,QAAA,OAAA,CAAQ,YAAY,CAAA,GAAK,CAAC,MAAM,CAAA,CAAqB,MAAA,CAAO,OAAA,CAAQ,SAAA,CAAU,6BAAA,CAA8B,IAAI,CAAA,CAAE,OAAA,EAAS,CAAA;EAAA,MAC/H;EACA,MAAA,UAAA,CAAW,KAAK,OAAO,CAAA;EAAA,IAC3B;EACA,IAAA,OAAO,UAAA;EAAA,EACX;EACJ;;EC5EA,MAAM,SAAA,GAAY,GAAA;EAmBX,MAAM,OAAA,CAAQ;EAAA,EAIjB,YAAY,EAAA,EAAoC;EAC5C,IAAA,IAAI,OAAO,OAAO,QAAA,EAAU;EACxB,MAAA,IAAA,CAAK,IAAA,GAAO,EAAA;EAAA,IAChB,CAAA,MAAO;EACH,MAAA,IAAA,CAAK,OAAO,EAAA,CAAG,IAAA;EACf,MAAA,IAAA,CAAK,YAAY,EAAA,CAAG,SAAA;EAAA,IACxB;EAAA,EACJ;EAAA,EAEA,OAAO,KAAK,EAAA,EAA6C;EACrD,IAAA,OAAO,IAAI,QAAQ,EAAE,CAAA;EAAA,EACzB;EAAA,EAEA,OAAO,SAAS,EAAA,EAA+C;EAC3D,IAAA,OAAQ,EAAA,CAAG,SAAA,GAAY,CAAA,EAAG,EAAA,CAAG,IAAI,CAAA,EAAG,SAAS,CAAA,EAAG,EAAA,CAAG,SAAS,CAAA,CAAA,GAAK,EAAA,CAAG,IAAA;EAAA,EACxE;EAAA,EAEA,OAAO,MAAM,GAAA,EAAyC;EAClD,IAAA,MAAM,CAAC,IAAA,EAAM,SAAS,CAAA,GAAI,GAAA,CAAI,MAAM,SAAS,CAAA;EAC7C,IAAA,OAAO,IAAI,OAAA,CAAQ,EAAC,IAAA,EAAM,WAAU,CAAA;EAAA,EACxC;EAAA,EAEA,OAAO,OAAA,CAAQ,CAAA,EAA0B,CAAA,EAAmC;EACxE,IAAA,OAAO,EAAE,IAAA,KAAS,CAAA,CAAE,IAAA,IAAQ,CAAA,CAAE,cAAc,CAAA,CAAE,SAAA;EAAA,EAClD;EAAA,EAEA,QAAA,GAA+B;EAC3B,IAAA,OAAO,OAAA,CAAQ,SAAS,IAAI,CAAA;EAAA,EAChC;EAAA,EAEA,SAAA,GAAyB;EACrB,IAAA,OAAO,EAAC,IAAA,EAAM,IAAA,CAAK,IAAA,EAAM,SAAA,EAAW,KAAK,SAAA,EAAS;EAAA,EACtD;EACJ;;EC3BO,MAAM,YAAA,CAA6C;EAAA,EAMtD,WAAA,CAAY,EAAA,EAA0B,OAAA,GAAgC,EAAC,EAAG;EACtE,IAAA,IAAA,CAAK,EAAA,GAAK,OAAA,CAAQ,IAAA,CAAK,EAAE,CAAA;EACzB,IAAA,IAAA,CAAK,SAAS,OAAA,CAAQ,MAAA;EACtB,IAAA,IAAA,CAAK,EAAA,GAAK,QAAQ,EAAA,IAAM,CAAA;EACxB,IAAA,IAAA,CAAK,EAAA,GAAK,QAAQ,EAAA,IAAM,CAAA;EAAA,EAC5B;EAAA,EAEA,QAAA,GAAoC;EAChC,IAAA,OAAO,IAAA,CAAK,UAAU,IAAI,CAAA;EAAA,EAC9B;EAAA,EAEA,OAAO,MAAM,GAAA,EAAmD;EAC5D,IAAA,IAAI,EAAA;EACJ,IAAA,IAAI,MAAA;EACJ,IAAA,IAAI,EAAA;EACJ,IAAA,IAAI,EAAA;EAEJ,IAAA,IAAI;EAEA,MAAA,CAAC,EAAC,EAAA,EAAI,MAAA,EAAQ,EAAA,EAAI,EAAA,KAAM,IAAA,CAAK,KAAA,CAAM,GAAG,CAAA,IAAK,EAAC;EAAA,IAChD,SAAS,CAAA,EAAG;EACR,MAAA,OAAO,IAAA;EAAA,IACX;EAEA,IAAA,IAAI,CAAC,IAAI,OAAO,IAAA;EAEhB,IAAA,OAAO,IAAI,YAAA,CAAa,EAAA,EAAI,EAAC,MAAA,EAAQ,EAAA,EAAI,IAAG,CAAA;EAAA,EAChD;EAAA,EAEA,SAAA,CAAU,MAAA,EAAgB,OAAA,GAAkB,MAAA,EAAc;EACtD,IAAA,IAAA,CAAK,EAAA,IAAM,MAAA;EACX,IAAA,IAAA,CAAK,EAAA,IAAM,OAAA;EACX,IAAA,OAAO,IAAA;EAAA,EACX;EACJ;;EChEA,MAAqB,aAAA,CAAc;EAAA,EAO/B,YACI,SAAA,EACA,cAAA,EACA,WAAA,EACA,gBAAA,EACA,YAAqB,KAAA,EACvB;EACE,IAAA,IAAA,CAAK,SAAA,GAAY,OAAA,CAAQ,IAAA,CAAK,SAAS,CAAA;EACvC,IAAA,IAAA,CAAK,cAAA,GAAiB,cAAA;EACtB,IAAA,IAAI,WAAA,EAAa,IAAA,CAAK,WAAA,GAAc,OAAA,CAAQ,KAAK,WAAW,CAAA;EAC5D,IAAA,IAAA,CAAK,gBAAA,GAAmB,gBAAA;EACxB,IAAA,IAAA,CAAK,SAAA,GAAY,SAAA;EAAA,EAAA;EACrB,EAEA,QAAA,GAAmB;EACf,IAAA,IAAI,IAAA,CAAK,SAAA,IAAa,IAAA,CAAK,WAAA,EAAa;EACpC,MAAA,MAAM,WAAA,GAAc,KAAK,SAAA,CAAU,IAAA;EACnC,MAAA,MAAM,aAAA,GAAgB,KAAK,WAAA,CAAY,IAAA;EACvC,MAAA,OAAO,CAAA,CAAA,EAAI,WAAW,CAAA,CAAA,EAAI,aAAa,CAAA,CAAA,CAAA;EAAA,IAAA;EAG3C,IAAA,OAAO,KAAK,SAAA,CAAU,IAAA;EAAA,EAAA;EAC1B,EAEA,UAAA,GAAsB;EAClB,IAAA,OAAO,CAAC,CAAC,IAAA,CAAK,SAAA;EAAA,EAAA;EAClB,EAEA,UAAA,GAA2B;EACvB,IAAA,OAAO,IAAI,YAAA,CAAa,IAAA,CAAK,SAAA,EAAW,KAAK,cAAc,CAAA;EAAA,EAAA;EAC/D,EAEA,YAAA,GAAwB;EACpB,IAAA,OAAO,CAAC,CAAC,IAAA,CAAK,WAAA;EAAA,EAAA;EAClB,EAEA,YAAA,GAAoC;EAChC,IAAA,IAAI,CAAC,KAAK,WAAA,EAAa;EACnB,MAAA,OAAO,IAAA;EAAA,IAAA;EAGX,IAAA,OAAO,IAAI,YAAA,CAAa,IAAA,CAAK,WAAA,EAAa,KAAK,gBAAgB,CAAA;EAAA,EAAA;EACnE,EAEA,OAAO,KAAK,KAAA,EAA8C;EACtD,IAAA,IAAI,OAAO,KAAA,KAAU,QAAA,EAAU,OAAO,KAAA;EACtC,IAAA,MAAM,WAAW,aAAA,CAAc,KAAA,CAAM,EAAC,IAAA,EAAM,OAAM,CAAA;EAElD,IAAA,OAAO,QAAA;EAAA,EAAA;EACX,EAEA,OAAO,KAAA,CACH,SAAA,EACA,WAAA,EACA,gBACA,gBAAA,EACoB;EACpB,IAAA,IAAI,CAAC,aAAc,OAAO,SAAA,KAAc,YAAY,EAAE,MAAA,IAAU,YAAa,OAAO,IAAA;EACpF,IAAA,OAAO,IAAI,aAAA,CAAc,SAAA,EAAW,cAAA,EAAgB,aAAa,gBAAgB,CAAA;EAAA,EAAA;EAEzF;;ECjEO,SAAS,YAAA,CAAa,CAAA,EAAY,CAAA,EAAY,CAAA,EAAY,CAAA,EAA4B;EACzF,EAAA,IAAI,EACA,OAAO,CAAA,KAAM,QAAA,IAAY,KAAK,CAAA,IAAK,CAAA,IAAK,OACxC,OAAO,CAAA,KAAM,YAAY,CAAA,IAAK,CAAA,IAAK,KAAK,GAAA,IACxC,OAAO,MAAM,QAAA,IAAY,CAAA,IAAK,CAAA,IAAK,CAAA,IAAK,GAAA,CAAA,EACzC;EACC,IAAA,MAAM,KAAA,GAAS,OAAO,CAAA,KAAM,QAAA,GAAW,CAAC,CAAA,EAAG,CAAA,EAAG,CAAA,EAAG,CAAC,CAAA,GAAI,CAAC,CAAA,EAAG,GAAG,CAAC,CAAA;EAC9D,IAAA,OAAO,CAAA,oBAAA,EAAuB,KAAA,CAAM,IAAA,CAAK,IAAI,CAAC,CAAA,+CAAA,CAAA;EAAA,EAAA;EAGlD,EAAA,IAAI,EACA,OAAO,CAAA,KAAM,WAAA,IAAgB,OAAO,MAAM,QAAA,IAAY,CAAA,IAAK,CAAA,IAAK,CAAA,IAAK,CAAA,CAAA,EACtE;EACC,IAAA,OAAO,CAAA,oBAAA,EAAwB,CAAC,CAAA,EAAG,CAAA,EAAG,GAAG,CAAC,CAAA,CAAe,IAAA,CAAK,IAAI,CAAC,CAAA,+BAAA,CAAA;EAAA,EAAA;EAGvE,EAAA,OAAO,IAAA;EACX;EAEO,SAAS,YAAA,CAAa,CAAA,EAAY,CAAA,EAAY,CAAA,EAAY,CAAA,EAA4B;EACzF,EAAA,IAAI,EACA,OAAO,CAAA,KAAM,YAAY,CAAA,IAAK,CAAA,IAAK,KAAK,GAAA,CAAA,EACzC;EACC,IAAA,MAAM,KAAA,GAAS,OAAO,CAAA,KAAM,QAAA,GAAW,CAAC,CAAA,EAAG,CAAA,EAAG,CAAA,EAAG,CAAC,CAAA,GAAI,CAAC,CAAA,EAAG,GAAG,CAAC,CAAA;EAC9D,IAAA,OAAO,CAAA,oBAAA,EAAuB,KAAA,CAAM,IAAA,CAAK,IAAI,CAAC,CAAA,iCAAA,CAAA;EAAA,EAAA;EAGlD,EAAA,IAAI,EACA,OAAO,CAAA,KAAM,QAAA,IAAY,KAAK,CAAA,IAAK,CAAA,IAAK,GAAA,IACxC,OAAO,CAAA,KAAM,QAAA,IAAY,CAAA,IAAK,CAAA,IAAK,KAAK,GAAA,CAAA,EACzC;EACC,IAAA,MAAM,KAAA,GAAS,OAAO,CAAA,KAAM,QAAA,GAAW,CAAC,CAAA,EAAG,CAAA,EAAG,CAAA,EAAG,CAAC,CAAA,GAAI,CAAC,CAAA,EAAG,GAAG,CAAC,CAAA;EAC9D,IAAA,OAAO,CAAA,oBAAA,EAAuB,KAAA,CAAM,IAAA,CAAK,IAAI,CAAC,CAAA,0CAAA,CAAA;EAAA,EAAA;EAGlD,EAAA,IAAI,EACA,OAAO,CAAA,KAAM,WAAA,IAAgB,OAAO,MAAM,QAAA,IAAY,CAAA,IAAK,CAAA,IAAK,CAAA,IAAK,CAAA,CAAA,EACtE;EACC,IAAA,OAAO,CAAA,oBAAA,EAAwB,CAAC,CAAA,EAAG,CAAA,EAAG,GAAG,CAAC,CAAA,CAAe,IAAA,CAAK,IAAI,CAAC,CAAA,+BAAA,CAAA;EAAA,EAAA;EAGvE,EAAA,OAAO,IAAA;EACX;EAIO,SAAS,QAAQ,KAAA,EAAyB;EAC7C,EAAA,IAAI,UAAU,IAAA,EAAM;EAChB,IAAA,OAAO,IAAA;EAAA,EAAA,CACX,MAAA,IAAW,OAAO,KAAA,KAAU,QAAA,EAAU;EAClC,IAAA,OAAO,IAAA;EAAA,EAAA,CACX,MAAA,IAAW,OAAO,KAAA,KAAU,SAAA,EAAW;EACnC,IAAA,OAAO,IAAA;EAAA,EAAA,CACX,MAAA,IAAW,OAAO,KAAA,KAAU,QAAA,EAAU;EAClC,IAAA,OAAO,IAAA;EAAA,EAAA,CACX,MAAA,IAAW,iBAAiB,KAAA,EAAO;EAC/B,IAAA,OAAO,IAAA;EAAA,EAAA,CACX,MAAA,IAAW,iBAAiB,QAAA,EAAU;EAClC,IAAA,OAAO,IAAA;EAAA,EAAA,CACX,MAAA,IAAW,iBAAiB,SAAA,EAAW;EACnC,IAAA,OAAO,IAAA;EAAA,EAAA,CACX,MAAA,IAAW,iBAAiB,aAAA,EAAe;EACvC,IAAA,OAAO,IAAA;EAAA,EAAA,CACX,MAAA,IAAW,KAAA,CAAM,OAAA,CAAQ,KAAK,CAAA,EAAG;EAC7B,IAAA,KAAA,MAAW,QAAQ,KAAA,EAAO;EACtB,MAAA,IAAI,CAAC,OAAA,CAAQ,IAAI,CAAA,EAAG;EAChB,QAAA,OAAO,KAAA;EAAA,MAAA;EACX,IAAA;EAEJ,IAAA,OAAO,IAAA;EAAA,EAAA,CACX,MAAA,IAAW,OAAO,KAAA,KAAU,QAAA,EAAU;EAClC,IAAA,KAAA,MAAW,OAAO,KAAA,EAAO;EACrB,MAAA,IAAI,CAAC,OAAA,CAAQ,KAAA,CAAM,GAAG,CAAC,CAAA,EAAG;EACtB,QAAA,OAAO,KAAA;EAAA,MAAA;EACX,IAAA;EAEJ,IAAA,OAAO,IAAA;EAAA,EAAA,CACX,MAAO;EACH,IAAA,OAAO,KAAA;EAAA,EAAA;EAEf;EAEO,SAAS,OAAO,KAAA,EAAoB;EACvC,EAAA,IAAI,UAAU,IAAA,EAAM;EAChB,IAAA,OAAO,QAAA;EAAA,EAAA,CACX,MAAA,IAAW,OAAO,KAAA,KAAU,QAAA,EAAU;EAClC,IAAA,OAAO,UAAA;EAAA,EAAA,CACX,MAAA,IAAW,OAAO,KAAA,KAAU,SAAA,EAAW;EACnC,IAAA,OAAO,WAAA;EAAA,EAAA,CACX,MAAA,IAAW,OAAO,KAAA,KAAU,QAAA,EAAU;EAClC,IAAA,OAAO,UAAA;EAAA,EAAA,CACX,MAAA,IAAW,iBAAiB,KAAA,EAAO;EAC/B,IAAA,OAAO,SAAA;EAAA,EAAA,CACX,MAAA,IAAW,iBAAiB,QAAA,EAAU;EAClC,IAAA,OAAO,YAAA;EAAA,EAAA,CACX,MAAA,IAAW,iBAAiB,SAAA,EAAW;EACnC,IAAA,OAAO,aAAA;EAAA,EAAA,CACX,MAAA,IAAW,iBAAiB,aAAA,EAAe;EACvC,IAAA,OAAO,iBAAA;EAAA,EAAA,CACX,MAAA,IAAW,KAAA,CAAM,OAAA,CAAQ,KAAK,CAAA,EAAG;EAC7B,IAAA,MAAM,SAAS,KAAA,CAAM,MAAA;EACrB,IAAA,IAAI,QAAA;EAEJ,IAAA,KAAA,MAAW,QAAQ,KAAA,EAAO;EAEtB,MAAA,MAAM,CAAA,GAAI,OAAO,IAAI,CAAA;EACrB,MAAA,IAAI,CAAC,QAAA,EAAU;EACX,QAAA,QAAA,GAAW,CAAA;EAAA,MAAA,CACf,MAAA,IAAW,aAAa,CAAA,EAAG;EACvB,QAAA;EAAA,MAAA,CACJ,MAAO;EACH,QAAA,QAAA,GAAW,SAAA;EACX,QAAA;EAAA,MAAA;EACJ,IAAA;EAGJ,IAAA,OAAOF,OAAA,CAAM,QAAA,IAAY,SAAA,EAAW,MAAM,CAAA;EAAA,EAAA,CAC9C,MAAO;EAEH,IAAA,OAAO,UAAA;EAAA,EAAA;EAEf;EAEO,SAAS,SAAS,KAAA,EAAsB;EAC3C,EAAA,IAAI,UAAU,IAAA,EAAM;EAChB,IAAA,OAAO,EAAA;EAAA,EAAA,CACX,MAAA,IAAW,OAAO,KAAA,KAAU,QAAA,IAAY,OAAO,KAAA,KAAU,QAAA,IAAY,OAAO,KAAA,KAAU,SAAA,EAAW;EAC7F,IAAA,OAAO,OAAO,KAAK,CAAA;EAAA,EAAA,WACZ,KAAA,YAAiB,SAAA,IAAa,KAAA,YAAiB,aAAA,IAAiB,iBAAiB,KAAA,EAAO;EAC/F,IAAA,OAAO,MAAM,QAAA,EAAS;EAAA,EAAA,CAC1B,MAAO;EACH,IAAA,OAAO,IAAA,CAAK,UAAU,KAAK,CAAA;EAAA,EAAA;EAEnC;;ECrIA,MAAM,OAAA,CAA8B;EAAA,EAIhC,WAAA,CAAY,MAAY,KAAA,EAAc;EAClC,IAAA,IAAA,CAAK,IAAA,GAAO,IAAA;EACZ,IAAA,IAAA,CAAK,KAAA,GAAQ,KAAA;EAAA,EAAA;EACjB,EAEA,OAAO,KAAA,CAAM,IAAA,EAA8B,OAAA,EAAyC;EAChF,IAAA,IAAI,KAAK,MAAA,KAAW,CAAA;EAChB,MAAA,OAAO,QAAQ,KAAA,CAAM,CAAA,8DAAA,EAAiE,IAAA,CAAK,MAAA,GAAS,CAAC,CAAA,SAAA,CAAW,CAAA;EAEpH,IAAA,IAAI,CAAC,OAAA,CAAQ,IAAA,CAAK,CAAC,CAAC,CAAA;EAChB,MAAA,OAAO,OAAA,CAAQ,MAAM,CAAA,aAAA,CAAe,CAAA;EAExC,IAAA,MAAM,KAAA,GAAQ,KAAK,CAAC,CAAA;EACpB,IAAA,IAAI,IAAA,GAAO,OAAO,KAAK,CAAA;EAGvB,IAAA,MAAM,WAAW,OAAA,CAAQ,YAAA;EACzB,IAAA,IACI,KAAK,IAAA,KAAS,OAAA,IACd,IAAA,CAAK,CAAA,KAAM,KACX,QAAA,IACA,QAAA,CAAS,IAAA,KAAS,OAAA,KACjB,OAAO,QAAA,CAAS,CAAA,KAAM,QAAA,IAAY,QAAA,CAAS,MAAM,CAAA,CAAA,EACpD;EACE,MAAA,IAAA,GAAO,QAAA;EAAA,IAAA;EAGX,IAAA,OAAO,IAAI,OAAA,CAAQ,IAAA,EAAM,KAAK,CAAA;EAAA,EAAA;EAClC,EAEA,QAAA,GAAkB;EACd,IAAA,OAAO,IAAA,CAAK,KAAA;EAAA,EAAA;EAChB,EAEA,SAAA,GAAY;EAAA,EAAA;EAAC,EAEb,aAAA,GAAyB;EACrB,IAAA,OAAO,IAAA;EAAA,EAAA;EACX,EAEA,SAAA,GAAkC;EAC9B,IAAA,IAAI,KAAK,IAAA,CAAK,IAAA,KAAS,WAAW,IAAA,CAAK,IAAA,CAAK,SAAS,QAAA,EAAU;EAC3D,MAAA,OAAO,CAAC,SAAA,EAAW,IAAA,CAAK,KAAK,CAAA;EAAA,IAAA,CACjC,MAAA,IAAW,IAAA,CAAK,KAAA,YAAiB,KAAA,EAAO;EAIpC,MAAA,OAAO,CAAC,MAA8B,CAAA,CAAE,MAAA,CAAO,IAAA,CAAK,MAAM,6BAAA,CAA8B,IAAI,CAAA,CAAE,OAAA,EAAS,CAAA;EAAA,IAAA,CAC3G,MAAA,IAAW,IAAA,CAAK,KAAA,YAAiB,SAAA,EAAW;EAExC,MAAA,OAAO,IAAA,CAAK,MAAM,SAAA,EAAU;EAAA,IAAA,CAChC,MAAO;EAKH,MAAA,OAAO,IAAA,CAAK,KAAA;EAAA,IAAA;EAChB,EAAA;EAER;;ECxEA,MAAM,YAAA,CAAa;EAAA,EAIf,YAAY,OAAA,EAAiB;EACzB,IAAA,IAAA,CAAK,IAAA,GAAO,2BAAA;EACZ,IAAA,IAAA,CAAK,OAAA,GAAU,OAAA;EAAA,EACnB;EAAA,EAEA,MAAA,GAAiB;EACb,IAAA,OAAO,IAAA,CAAK,OAAA;EAAA,EAChB;EACJ;;ECOA,MAAMG,OAAA,GAAQ;EAAA,EACV,MAAA,EAAQ,UAAA;EAAA,EACR,MAAA,EAAQ,UAAA;EAAA,EACR,OAAA,EAAS,WAAA;EAAA,EACT,MAAA,EAAQ;EACZ,CAAA;EAEA,MAAM,SAAA,CAAgC;EAAA,EAIlC,WAAA,CAAY,MAAY,IAAA,EAAyB;EAC7C,IAAA,IAAA,CAAK,IAAA,GAAO,IAAA;EACZ,IAAA,IAAA,CAAK,IAAA,GAAO,IAAA;EAAA,EAAA;EAChB,EAEA,OAAO,KAAA,CAAM,IAAA,EAA8B,OAAA,EAA4C;EACnF,IAAA,IAAI,KAAK,MAAA,GAAS,CAAA;EACd,MAAA,OAAO,OAAA,CAAQ,MAAM,CAAA,+BAAA,CAAiC,CAAA;EAE1D,IAAA,IAAI,CAAA,GAAI,CAAA;EACR,IAAA,IAAI,IAAA;EAEJ,IAAA,MAAM,IAAA,GAAO,KAAK,CAAC,CAAA;EACnB,IAAA,IAAI,SAAS,OAAA,EAAS;EAClB,MAAA,IAAI,QAAA;EACJ,MAAA,IAAI,IAAA,CAAK,SAAS,CAAA,EAAG;EACjB,QAAA,MAAMC,KAAAA,GAAO,KAAK,CAAC,CAAA;EACnB,QAAA,IAAI,OAAOA,KAAAA,KAAS,QAAA,IAAY,EAAEA,KAAAA,IAAQD,YAAUC,KAAAA,KAAS,QAAA;EACzD,UAAA,OAAO,OAAA,CAAQ,KAAA,CAAM,0EAAA,EAA4E,CAAC,CAAA;EAEtG,QAAA,QAAA,GAAWD,QAAMC,KAAI,CAAA;EACrB,QAAA,CAAA,EAAA;EAAA,MAAA,CACJ,MAAO;EACH,QAAA,QAAA,GAAW,SAAA;EAAA,MAAA;EAGf,MAAA,IAAI,CAAA;EACJ,MAAA,IAAI,IAAA,CAAK,SAAS,CAAA,EAAG;EACjB,QAAA,IAAI,IAAA,CAAK,CAAC,CAAA,KAAM,IAAA,KACX,OAAO,IAAA,CAAK,CAAC,MAAM,QAAA,IAChB,IAAA,CAAK,CAAC,CAAA,GAAI,CAAA,IACV,KAAK,CAAC,CAAA,KAAM,KAAK,KAAA,CAAM,IAAA,CAAK,CAAC,CAAC,CAAA,CAAA,EACpC;EACE,UAAA,OAAO,OAAA,CAAQ,KAAA,CAAM,mEAAA,EAAqE,CAAC,CAAA;EAAA,QAAA;EAE/F,QAAA,CAAA,GAAK,KAAK,CAAC,CAAA;EACX,QAAA,CAAA,EAAA;EAAA,MAAA;EAGJ,MAAA,IAAA,GAAOJ,OAAA,CAAM,UAAU,CAAC,CAAA;EAAA,IAAA,CAC5B,MAAO;EAGH,MAAA,IAAA,GAAOG,QAAM,IAAI,CAAA;EAAA,IAAA;EAGrB,IAAA,MAAM,SAAS,EAAC;EAChB,IAAA,OAAO,CAAA,GAAI,IAAA,CAAK,MAAA,EAAQ,CAAA,EAAA,EAAK;EACzB,MAAA,MAAM,QAAQ,OAAA,CAAQ,KAAA,CAAM,KAAK,CAAC,CAAA,EAAG,GAAG,SAAS,CAAA;EACjD,MAAA,IAAI,CAAC,OAAO,OAAO,IAAA;EACnB,MAAA,MAAA,CAAO,KAAK,KAAK,CAAA;EAAA,IAAA;EAIrB,IAAA,OAAO,IAAI,SAAA,CAAU,IAAA,EAAM,MAAM,CAAA;EAAA,EAAA;EACrC;EAAA,EAGA,SAAS,GAAA,EAA6B;EAClC,IAAA,KAAA,IAAS,IAAI,CAAA,EAAG,CAAA,GAAI,IAAA,CAAK,IAAA,CAAK,QAAQ,CAAA,EAAA,EAAK;EAEvC,MAAA,MAAM,QAAQ,IAAA,CAAK,IAAA,CAAK,CAAC,CAAA,CAAE,SAAS,GAAG,CAAA;EAEvC,MAAA,MAAM,QAAQ,YAAA,CAAa,IAAA,CAAK,IAAA,EAAM,MAAA,CAAO,KAAK,CAAC,CAAA;EACnD,MAAA,IAAI,CAAC,KAAA,EAAO;EACR,QAAA,OAAO,KAAA;EAAA,MAAA,CACX,MAAA,IAAW,CAAA,KAAM,IAAA,CAAK,IAAA,CAAK,SAAS,CAAA,EAAG;EAEnC,QAAA,MAAM,IAAI,aAAa,CAAA,eAAA,EAAkB,IAAA,CAAK,UAAU,IAAA,CAAK,IAAA,CAAK,CAAC,CAAA,CAAE,SAAA,EAAW,CAAC,CAAA,cAAA,EAAiBF,UAAA,CAAS,MAAA,CAAO,KAAK,CAAC,CAAC,mCAAmCA,UAAA,CAAS,IAAA,CAAK,IAAI,CAAC,CAAA,CAAA,CAAG,CAAA;EAAA,MAAA;EACtL,IAAA;EAIJ,IAAA,OAAO,IAAA;EAAA,EAAA;EACX,EAEA,UAAU,EAAA,EAA6B;EACnC,IAAA,IAAA,CAAK,IAAA,CAAK,QAAQ,EAAE,CAAA;EAAA,EAAA;EACxB,EAEA,aAAA,GAAyB;EACrB,IAAA,OAAO,KAAK,IAAA,CAAK,KAAA,CAAM,CAAA,GAAA,KAAO,GAAA,CAAI,eAAe,CAAA;EAAA,EAAA;EACrD,EAEA,SAAA,GAAkC;EAC9B,IAAA,MAAM,OAAO,IAAA,CAAK,IAAA;EAClB,IAAA,MAAM,UAAA,GAA0C,CAAC,IAAA,CAAK,IAAI,CAAA;EAC1D,IAAA,IAAI,IAAA,CAAK,SAAS,OAAA,EAAS;EACvB,MAAA,MAAM,WAAW,IAAA,CAAK,QAAA;EACtB,MAAA,IAAI,QAAA,CAAS,SAAS,QAAA,IAClB,QAAA,CAAS,SAAS,QAAA,IAClB,QAAA,CAAS,SAAS,SAAA,EAAW;EAC7B,QAAA,UAAA,CAAW,IAAA,CAAK,SAAS,IAAI,CAAA;EAC7B,QAAA,MAAM,IAAI,IAAA,CAAK,CAAA;EACf,QAAA,IAAI,OAAO,CAAA,KAAM,QAAA,IAAY,IAAA,CAAK,IAAA,CAAK,SAAS,CAAA,EAAG;EAC/C,UAAA,UAAA,CAAW,KAAK,CAAC,CAAA;EAAA,QAAA;EACrB,MAAA;EACJ,IAAA;EAEJ,IAAA,OAAO,UAAA,CAAW,OAAO,IAAA,CAAK,IAAA,CAAK,IAAI,CAAA,GAAA,KAAO,GAAA,CAAI,SAAA,EAAW,CAAC,CAAA;EAAA,EAAA;EAEtE;;ECxGA,MAAqB,gBAAA,CAAuC;EAAA,EAIxD,YAAY,QAAA,EAA6C;EACrD,IAAA,IAAA,CAAK,IAAA,GAAO,aAAA;EACZ,IAAA,IAAA,CAAK,QAAA,GAAW,QAAA;EAAA,EACpB;EAAA,EAEA,OAAO,KAAA,CAAM,IAAA,EAA8B,OAAA,EAAmD;EAC1F,IAAA,IAAI,IAAA,CAAK,SAAS,CAAA,EAAG;EACjB,MAAA,OAAO,OAAA,CAAQ,MAAM,CAAA,+BAAA,CAAiC,CAAA;EAAA,IAC1D;EAEA,IAAA,MAAM,QAAA,GAAW,KAAK,CAAC,CAAA;EACvB,IAAA,IAAI,CAAC,KAAA,CAAM,OAAA,CAAQ,QAAQ,CAAA,IAAK,OAAO,aAAa,QAAA,EAAU;EAC1D,MAAA,OAAO,OAAA,CAAQ,MAAM,CAAA,gDAAA,CAAkD,CAAA;EAAA,IAC3E;EAEA,IAAA,MAAM,WAA8C,EAAC;EACrD,IAAA,IAAI,oBAAA,GAAuB,KAAA;EAC3B,IAAA,KAAA,IAAS,IAAI,CAAA,EAAG,CAAA,IAAK,KAAK,MAAA,GAAS,CAAA,EAAG,EAAE,CAAA,EAAG;EACvC,MAAA,MAAM,GAAA,GAAM,KAAK,CAAC,CAAA;EAElB,MAAA,IAAI,oBAAA,IAAwB,OAAO,GAAA,KAAQ,QAAA,IAAY,CAAC,KAAA,CAAM,OAAA,CAAQ,GAAG,CAAA,EAAG;EACxE,QAAA,oBAAA,GAAuB,KAAA;EAEvB,QAAA,IAAI,KAAA,GAAQ,IAAA;EACZ,QAAA,IAAI,GAAA,CAAI,YAAY,CAAA,EAAG;EACnB,UAAA,KAAA,GAAQ,QAAQ,gBAAA,CAAiB,GAAA,CAAI,YAAY,CAAA,EAAG,CAAA,EAAG,cAAc,UAAU,CAAA;EAC/E,UAAA,IAAI,CAAC,OAAO,OAAO,IAAA;EAAA,QACvB;EAEA,QAAA,IAAI,IAAA,GAAO,IAAA;EACX,QAAA,IAAI,GAAA,CAAI,WAAW,CAAA,EAAG;EAClB,UAAA,IAAA,GAAO,OAAA,CAAQ,iBAAiB,GAAA,CAAI,WAAW,GAAG,CAAA,EAAG,WAAA,EAAaD,OAAA,CAAM,UAAU,CAAC,CAAA;EACnF,UAAA,IAAI,CAAC,MAAM,OAAO,IAAA;EAAA,QACtB;EAEA,QAAA,IAAI,SAAA,GAAY,IAAA;EAChB,QAAA,IAAI,GAAA,CAAI,YAAY,CAAA,EAAG;EACnB,UAAA,SAAA,GAAY,QAAQ,gBAAA,CAAiB,GAAA,CAAI,YAAY,CAAA,EAAG,CAAA,EAAG,cAAc,SAAS,CAAA;EAClF,UAAA,IAAI,CAAC,WAAW,OAAO,IAAA;EAAA,QAC3B;EAEA,QAAA,MAAM,cAAA,GAAiB,QAAA,CAAS,EAAA,CAAG,EAAE,CAAA;EAErC,QAAA,cAAA,CAAe,KAAA,GAAQ,KAAA;EAEvB,QAAA,cAAA,CAAe,IAAA,GAAO,IAAA;EAEtB,QAAA,cAAA,CAAe,SAAA,GAAY,SAAA;EAAA,MAC/B,CAAA,MAAO;EACH,QAAA,MAAM,UAAU,OAAA,CAAQ,KAAA,CAAM,KAAK,CAAC,CAAA,EAAG,GAAG,SAAS,CAAA;EACnD,QAAA,IAAI,CAAC,SAAS,OAAO,IAAA;EAErB,QAAA,MAAM,IAAA,GAAO,QAAQ,IAAA,CAAK,IAAA;EAC1B,QAAA,IAAI,SAAS,QAAA,IAAY,IAAA,KAAS,OAAA,IAAW,IAAA,KAAS,UAAU,IAAA,KAAS,eAAA;EACrE,UAAA,OAAO,OAAA,CAAQ,MAAM,CAAA,iEAAA,CAAmE,CAAA;EAE5F,QAAA,oBAAA,GAAuB,IAAA;EACvB,QAAA,QAAA,CAAS,IAAA,CAAK,EAAC,OAAA,EAAS,KAAA,EAAO,MAAM,IAAA,EAAM,IAAA,EAAM,SAAA,EAAW,IAAA,EAAK,CAAA;EAAA,MACrE;EAAA,IACJ;EAEA,IAAA,OAAO,IAAI,iBAAiB,QAAQ,CAAA;EAAA,EACxC;EAAA,EAEA,SAAS,GAAA,EAAmC;EACxC,IAAA,MAAM,eAAA,GAAkB,CAAC,OAAA,KAAwC;EAE7D,MAAA,MAAM,gBAAA,GAAmB,OAAA,CAAQ,OAAA,CAAQ,QAAA,CAAS,GAAG,CAAA;EAErD,MAAA,IAAI,UAAA,CAAW,MAAA,CAAO,gBAAgB,CAAA,EAAG,iBAAiB,CAAA,EAAG;EAEzD,QAAA,OAAO,IAAI,gBAAA,CAAiB,EAAA,EAAI,gBAAA,EAAkB,IAAA,EAAM,MAAM,IAAI,CAAA;EAAA,MACtE;EAEA,MAAA,OAAO,IAAI,gBAAA;EAAA;EAAA,QAEH,SAAS,gBAAgB,CAAA;EAAA,QACzB,IAAA;EAAA;EAAA,QAEA,QAAQ,KAAA,GAAQ,OAAA,CAAQ,KAAA,CAAM,QAAA,CAAS,GAAG,CAAA,GAAI,IAAA;EAAA,QAC9C,OAAA,CAAQ,OAAQ,OAAA,CAAQ,IAAA,CAAK,SAAS,GAAG,CAAA,CAAe,IAAA,CAAK,GAAG,CAAA,GAAI,IAAA;EAAA;EAAA,QAEpE,QAAQ,SAAA,GAAY,OAAA,CAAQ,SAAA,CAAU,QAAA,CAAS,GAAG,CAAA,GAAI;EAAA,OAC9D;EAAA,IACJ,CAAA;EAEA,IAAA,OAAO,IAAI,SAAA,CAAU,IAAA,CAAK,QAAA,CAAS,GAAA,CAAI,eAAe,CAAC,CAAA;EAAA,EAC3D;EAAA,EAEA,UAAU,EAAA,EAA6B;EACnC,IAAA,KAAA,MAAW,OAAA,IAAW,KAAK,QAAA,EAAU;EACjC,MAAA,EAAA,CAAG,QAAQ,OAAO,CAAA;EAClB,MAAA,IAAI,QAAQ,KAAA,EAAO;EACf,QAAA,EAAA,CAAG,QAAQ,KAAK,CAAA;EAAA,MACpB;EACA,MAAA,IAAI,QAAQ,IAAA,EAAM;EACd,QAAA,EAAA,CAAG,QAAQ,IAAI,CAAA;EAAA,MACnB;EACA,MAAA,IAAI,QAAQ,SAAA,EAAW;EACnB,QAAA,EAAA,CAAG,QAAQ,SAAS,CAAA;EAAA,MACxB;EAAA,IACJ;EAAA,EACJ;EAAA,EAEA,aAAA,GAAyB;EAGrB,IAAA,OAAO,KAAA;EAAA,EACX;EAAA,EAEA,SAAA,GAAkC;EAC9B,IAAA,MAAM,UAAA,GAAqC,CAAC,QAAQ,CAAA;EACpD,IAAA,KAAA,MAAW,OAAA,IAAW,KAAK,QAAA,EAAU;EACjC,MAAA,UAAA,CAAW,IAAA,CAAK,OAAA,CAAQ,OAAA,CAAQ,SAAA,EAAW,CAAA;EAC3C,MAAA,MAAM,UAAU,EAAC;EACjB,MAAA,IAAI,QAAQ,KAAA,EAAO;EACf,QAAA,OAAA,CAAQ,YAAY,CAAA,GAAI,OAAA,CAAQ,KAAA,CAAM,SAAA,EAAU;EAAA,MACpD;EACA,MAAA,IAAI,QAAQ,IAAA,EAAM;EACd,QAAA,OAAA,CAAQ,WAAW,CAAA,GAAI,OAAA,CAAQ,IAAA,CAAK,SAAA,EAAU;EAAA,MAClD;EACA,MAAA,IAAI,QAAQ,SAAA,EAAW;EACnB,QAAA,OAAA,CAAQ,YAAY,CAAA,GAAI,OAAA,CAAQ,SAAA,CAAU,SAAA,EAAU;EAAA,MACxD;EACA,MAAA,UAAA,CAAW,KAAK,OAAO,CAAA;EAAA,IAC3B;EACA,IAAA,OAAO,UAAA;EAAA,EACX;EACJ;;ECxIA,SAAS,eAAe,KAAA,EAAuC;EAC3D,EAAA,OAAO,KAAA,KAAU,QAAQ,OAAO,KAAA,KAAU,YAAY,CAAC,KAAA,CAAM,QAAQ,KAAK,CAAA;EAC9E;EAEA,MAAqB,eAAA,CAAsC;EAAA,EAavD,WAAA,CACI,YAAA,EACA,cAAA,EACA,mBAAA,EACA,qBAAA,EACF;EAPF,IAAA,IAAA,CAAA,iBAAA,GAA6C,EAAC;EAQ1C,IAAA,IAAA,CAAK,IAAA,GAAO,iBAAA;EACZ,IAAA,IAAA,CAAK,WAAA,GAAc,YAAA;EACnB,IAAA,IAAA,CAAK,aAAA,GAAgB,cAAA;EAErB,IAAA,IAAI,mBAAA,EAAqB;EACrB,MAAA,IAAA,CAAK,gBAAgB,mBAAA,CAAoB,MAAA;EACzC,MAAA,IAAA,CAAK,gBAAA,GAAmB,mBAAA,CAAoB,OAAA,GAAU,mBAAA,CAAoB,QAAQ,EAAA,GAAK,MAAA;EAAA,IAC3F;EAEA,IAAA,IAAI,qBAAA,EAAuB;EACvB,MAAA,IAAA,CAAK,kBAAkB,qBAAA,CAAsB,MAAA;EAC7C,MAAA,IAAA,CAAK,kBAAA,GAAqB,qBAAA,CAAsB,OAAA,GAAU,qBAAA,CAAsB,QAAQ,EAAA,GAAK,MAAA;EAAA,IACjG;EAAA,EACJ;EAAA,EAEA,OAAO,KAAA,CAAM,IAAA,EAA8B,OAAA,EAAmD;EAC1F,IAAA,IAAI,IAAA,CAAK,SAAS,CAAA,EAAG;EACjB,MAAA,OAAO,OAAA,CAAQ,MAAM,CAAA,+BAAA,CAAiC,CAAA;EAAA,IAC1D;EAEA,IAAA,IAAI,SAAA,GAAY,CAAA;EAChB,IAAA,MAAM,kBAAsE,EAAC;EAE7E,IAAA,SAAS,aAAA,GAAgB;EACrB,MAAA,IAAI,SAAA,GAAY,KAAK,MAAA,EAAQ;EACzB,QAAA,MAAM,YAAY,OAAA,CAAQ,KAAA,CAAM,KAAK,SAAS,CAAA,EAAG,aAAa,UAAU,CAAA;EACxE,QAAA,IAAI,CAAC,SAAA,EAAW;EACZ,UAAA,OAAA,CAAQ,KAAA,CAAM,eAAA,CAAgB,MAAA,GAAS,CAAA,wCAAA,CAAA,GAA6C,CAAA,uBAAA,CAAyB,CAAA;EAC7G,UAAA,OAAO,KAAA;EAAA,QACX;EAEA,QAAA,eAAA,CAAgB,KAAK,EAAC,KAAA,EAAO,WAAW,OAAA,EAAS,IAAG,CAAA;EACpD,QAAA,OAAO,IAAA;EAAA,MACX;EAEA,MAAA,OAAO,IAAA;EAAA,IACX;EAEA,IAAA,SAAS,eAAA,GAAkB;EACvB,MAAA,IAAI,SAAA,GAAY,KAAK,MAAA,EAAQ;EACzB,QAAA,MAAM,OAAA,GAAU,KAAK,SAAS,CAAA;EAC9B,QAAA,IAAI,CAAC,cAAA,CAAe,OAAO,CAAA,EAAG;EAC1B,UAAA,OAAO,IAAA;EAAA,QACX;EAEA,QAAA,MAAM,SAAS,OAAA,CAAQ,MAAA;EACvB,QAAA,MAAM,UAAU,OAAA,CAAQ,OAAA;EACxB,QAAA,MAAM,cAAA,GAAiB,OAAA,CAAQ,MAAA,CAAO,SAAS,CAAA;EAE/C,QAAA,IAAI,CAAC,MAAA,IAAU,CAAC,OAAA,EAAS;EACrB,UAAA,SAAA,EAAA;EACA,UAAA,OAAO,IAAA;EAAA,QACX;EAGA,QAAA,IAAI,MAAA,EAAQ;EACR,UAAA,IAAI,OAAO,MAAA,KAAW,QAAA,IAAY,MAAA,CAAO,gBAAgB,MAAA,EAAQ;EAC7D,YAAA,cAAA,CAAe,MAAM,CAAA,0CAAA,CAA8C,CAAA;EACnE,YAAA,OAAO,KAAA;EAAA,UACX;EAEA,UAAA,MAAM,eAA4B,EAAC;EACnC,UAAA,MAAM,YAAA,GAAe,cAAA,CAAe,MAAA,CAAO,MAAA,EAAW,QAAQ,CAAA;EAC9D,UAAA,KAAA,MAAW,OAAO,MAAA,EAAQ;EACtB,YAAA,IAAI,CAAC,GAAA,EAAK;EACN,cAAA,YAAA,CAAa,MAAM,CAAA,wCAAA,CAA0C,CAAA;EAC7D,cAAA,OAAO,KAAA;EAAA,YACX;EAEA,YAAA,MAAM,QAAQ,YAAA,CAAa,MAAA,CAAO,MAAA,EAAW,GAAG,EAAE,KAAA,CAAM,MAAA,CAAO,GAAG,CAAA,EAAG,QAAW,SAAA,EAAW,MAAA,EAAW,EAAC,cAAA,EAAgB,UAAS,CAAA;EAChI,YAAA,IAAI,CAAC,KAAA,EAAO;EACR,cAAA,OAAO,KAAA;EAAA,YACX;EAEA,YAAA,YAAA,CAAa,GAAG,CAAA,GAAI,KAAA;EAAA,UACxB;EAEA,UAAA,eAAA,CAAgB,EAAA,CAAG,EAAE,CAAA,CAAE,OAAA,CAAQ,MAAA,GAAS,YAAA;EAAA,QAC5C;EAGA,QAAA,IAAI,OAAA,EAAS;EACT,UAAA,IAAI,OAAO,OAAA,KAAY,QAAA,IAAY,OAAA,CAAQ,gBAAgB,MAAA,EAAQ;EAC/D,YAAA,cAAA,CAAe,MAAM,CAAA,2CAAA,CAA+C,CAAA;EACpE,YAAA,OAAO,KAAA;EAAA,UACX;EAEA,UAAA,IAAI,CAAC,QAAQ,EAAA,EAAI;EACb,YAAA,cAAA,CAAe,MAAM,CAAA,oDAAA,CAA0D,CAAA;EAC/E,YAAA,OAAO,KAAA;EAAA,UACX;EAEA,UAAA,eAAA,CAAgB,EAAA,CAAG,EAAE,CAAA,CAAE,OAAA,CAAQ,OAAA,GAAU,OAAA;EAAA,QAC7C;EAEA,QAAA,SAAA,EAAA;EACA,QAAA,OAAO,IAAA;EAAA,MACX;EAEA,MAAA,OAAO,IAAA;EAAA,IACX;EAGA,IAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,CAAA,EAAG,CAAA,EAAA,EAAK;EACxB,MAAA,IAAI,CAAC,aAAA,EAAc,IAAK,CAAC,iBAAgB,EAAG;EACxC,QAAA;EAAA,MACJ;EAAA,IACJ;EAEA,IAAA,OAAO,IAAI,eAAA;EAAA,MACP,eAAA,CAAgB,CAAC,CAAA,CAAE,KAAA;EAAA,MACnB,gBAAgB,CAAC,CAAA,GAAI,eAAA,CAAgB,CAAC,EAAE,KAAA,GAAQ,MAAA;EAAA,MAChD,eAAA,CAAgB,CAAC,CAAA,CAAE,OAAA;EAAA,MACnB,gBAAgB,CAAC,CAAA,GAAI,eAAA,CAAgB,CAAC,EAAE,OAAA,GAAU;EAAA,KACtD;EAAA,EACJ;EAAA,EAEA,cAAA,CAAe,KAAwB,MAAA,EAAiF;EACpH,IAAA,MAAM,SAAgC,EAAC;EACvC,IAAA,IAAI,MAAA,EAAQ;EACR,MAAA,KAAA,MAAW,OAAO,MAAA,EAAQ;EACtB,QAAA,IAAI,MAAA,CAAO,GAAG,CAAA,EAAG;EACb,UAAA,IAAI;EAEA,YAAA,MAAA,CAAO,GAAG,CAAA,GAAI,MAAA,CAAO,GAAG,CAAA,CAAE,SAAS,GAAG,CAAA;EAAA,UAC1C,SAAS,GAAA,EAAK;EACV,YAAA;EAAA,UACJ;EAAA,QACJ;EAAA,MACJ;EAAA,IACJ,CAAA,MAAO;EACH,MAAA,OAAO,MAAA;EAAA,IACX;EAEA,IAAA,IAAI,MAAA,CAAO,IAAA,CAAK,MAAM,CAAA,CAAE,WAAW,CAAA,EAAG;EAClC,MAAA,OAAO,MAAA;EAAA,IACX;EAEA,IAAA,OAAO,EAAC,QAAQ,MAAA,EAAM;EAAA,EAC1B;EAAA,EAEA,SAAS,GAAA,EAA8C;EACnD,IAAA,MAAM,SAAA,GAAY;EAAA;EAAA,MAEd,IAAA,EAAM,IAAA,CAAK,WAAA,CAAY,QAAA,CAAS,GAAG,CAAA;EAAA,MACnC,WAAW,IAAA,CAAK;EAAA,KACpB;EAEA,IAAA,MAAM,WAAA,GAAc,KAAK,aAAA,GAAgB;EAAA;EAAA,MAErC,IAAA,EAAM,IAAA,CAAK,aAAA,CAAc,QAAA,CAAS,GAAG,CAAA;EAAA,MACrC,WAAW,IAAA,CAAK;EAAA,KACpB,GAAI,MAAA;EAEJ,IAAA,MAAM,QAAQ,aAAA,CAAc,KAAA;EAAA,MACxB,SAAA;EAAA,MACA,WAAA;EAAA,MACA,KAAK,aAAA,GAAgB,IAAA,CAAK,eAAe,GAAA,EAAK,IAAA,CAAK,aAAa,CAAA,GAAI,MAAA;EAAA,MACpE,KAAK,eAAA,GAAkB,IAAA,CAAK,eAAe,GAAA,EAAK,IAAA,CAAK,eAAe,CAAA,GAAI;EAAA,KAC5E;EAEA,IAAA,IAAI,KAAA,IAAS,IAAI,eAAA,EAAiB;EAC9B,MAAA,MAAMK,UAAAA,GAAY,KAAA,CAAM,UAAA,EAAW,CAAE,EAAA;EACrC,MAAA,KAAA,CAAM,SAAA,GAAY,GAAA,CAAI,eAAA,CAAgB,IAAA,CAAK,CAAC,OAAO,OAAA,CAAQ,OAAA,CAAQ,EAAA,EAAIA,UAAS,CAAC,CAAA;EACjF,MAAA,IAAI,MAAM,SAAA,EAAW;EAEjB,QAAA,MAAMC,eAAc,KAAA,CAAM,YAAA,KAAiB,KAAA,CAAM,YAAA,GAAe,EAAA,GAAK,IAAA;EACrE,QAAA,IAAIA,YAAAA,EAAa,KAAA,CAAM,SAAA,GAAY,GAAA,CAAI,eAAA,CAAgB,IAAA,CAAK,CAAC,EAAA,KAAO,OAAA,CAAQ,OAAA,CAAQ,EAAA,EAAIA,YAAW,CAAC,CAAA;EAAA,MACxG;EAAA,IACJ;EAEA,IAAA,OAAO,KAAA;EAAA,EACX;EAAA,EAEA,UAAU,EAAA,EAA6B;EACnC,IAAA,EAAA,CAAG,KAAK,WAAW,CAAA;EAEnB,IAAA,IAAI,KAAK,aAAA,EAAe;EACpB,MAAA,KAAA,MAAW,GAAA,IAAO,KAAK,aAAA,EAAe;EAClC,QAAA,IAAI,IAAA,CAAK,aAAA,CAAc,GAAG,CAAA,EAAG;EACzB,UAAA,EAAA,CAAG,IAAA,CAAK,aAAA,CAAc,GAAG,CAAC,CAAA;EAAA,QAC9B;EAAA,MACJ;EAAA,IACJ;EAEA,IAAA,IAAI,KAAK,aAAA,EAAe;EACpB,MAAA,EAAA,CAAG,KAAK,aAAa,CAAA;EACrB,MAAA,IAAI,KAAK,eAAA,EAAiB;EACtB,QAAA,KAAA,MAAW,GAAA,IAAO,KAAK,eAAA,EAAiB;EACpC,UAAA,IAAI,IAAA,CAAK,eAAA,CAAgB,GAAG,CAAA,EAAG;EAC3B,YAAA,EAAA,CAAG,IAAA,CAAK,eAAA,CAAgB,GAAG,CAAC,CAAA;EAAA,UAChC;EAAA,QACJ;EAAA,MACJ;EAAA,IACJ;EAAA,EACJ;EAAA,EAEA,aAAA,GAAyB;EAErB,IAAA,OAAO,KAAA;EAAA,EACX;EAAA,EAEA,gBAAA,CAAiB,QAAqB,SAAA,EAAuD;EACzF,IAAA,MAAM,SAAiC,EAAC;EAExC,IAAA,IAAI,SAAA,EAAW;EACX,MAAA,MAAA,CAAO,OAAA,GAAU,EAAC,EAAA,EAAI,SAAA,EAAS;EAAA,IACnC;EAEA,IAAA,IAAI,MAAA,EAAQ;EACR,MAAA,MAAA,CAAO,SAAS,EAAC;EACjB,MAAA,KAAA,MAAW,OAAO,MAAA,EAAQ;EACtB,QAAA,IAAI,MAAA,CAAO,GAAG,CAAA,EAAG;EACb,UAAA,MAAA,CAAO,OAAO,GAAG,CAAA,GAAI,MAAA,CAAO,GAAG,EAAE,SAAA,EAAU;EAAA,QAC/C;EAAA,MACJ;EAAA,IACJ;EAEA,IAAA,OAAO,OAAO,IAAA,CAAK,MAAM,CAAA,CAAE,MAAA,GAAS,IAAI,MAAA,GAAS,MAAA;EAAA,EACrD;EAAA,EAEA,SAAA,GAAkC;EAC9B,IAAA,MAAM,aAAmC,CAAC,OAAA,EAAS,IAAA,CAAK,WAAA,CAAY,WAAW,CAAA;EAE/E,IAAA,IAAI,IAAA,CAAK,aAAA,IAAiB,IAAA,CAAK,gBAAA,EAAkB;EAC7C,MAAA,MAAM,UAAU,IAAA,CAAK,gBAAA,CAAiB,IAAA,CAAK,aAAA,EAAe,KAAK,gBAAgB,CAAA;EAC/E,MAAA,IAAI,OAAA,EAAS,UAAA,CAAW,IAAA,CAAK,OAAO,CAAA;EAAA,IACxC;EAEA,IAAA,IAAI,KAAK,aAAA,EAAe;EACpB,MAAA,UAAA,CAAW,IAAA,CAAK,IAAA,CAAK,aAAA,CAAc,SAAA,EAAW,CAAA;EAE9C,MAAA,IAAI,IAAA,CAAK,eAAA,IAAmB,IAAA,CAAK,kBAAA,EAAoB;EACjD,QAAA,MAAM,UAAU,IAAA,CAAK,gBAAA,CAAiB,IAAA,CAAK,eAAA,EAAiB,KAAK,kBAAkB,CAAA;EACnF,QAAA,IAAI,OAAA,EAAS,UAAA,CAAW,IAAA,CAAK,OAAO,CAAA;EAAA,MACxC;EAAA,IACJ;EAEA,IAAA,OAAO,UAAA;EAAA,EACX;EACJ;;EC9RO,SAAS,QAAQ,GAAA,EAAsI;EAC1J,EAAA,IAAI,QAAA,CAAS,GAAG,CAAA,EAAG,OAAO,QAAA;EAC1B,EAAA,IAAI,QAAA,CAAS,GAAG,CAAA,EAAG,OAAO,QAAA;EAC1B,EAAA,IAAI,SAAA,CAAU,GAAG,CAAA,EAAG,OAAO,SAAA;EAC3B,EAAA,IAAI,KAAA,CAAM,OAAA,CAAQ,GAAG,CAAA,EAAG,OAAO,OAAA;EAC/B,EAAA,IAAI,GAAA,KAAQ,MAAM,OAAO,MAAA;EACzB,EAAA,IAAI,QAAA,CAAS,GAAG,CAAA,EAAG,OAAO,QAAA;EAC1B,EAAA,OAAO,OAAO,GAAA;EAClB;EAEO,SAAS,SAAS,KAAA,EAAuD;EAC5E,EAAA,IAAI,KAAA,KAAU,IAAA,IAAQ,KAAA,KAAU,MAAA,EAAW,OAAO,KAAA;EAClD,EAAA,IAAI,KAAA,CAAM,OAAA,CAAQ,KAAK,CAAA,EAAG,OAAO,KAAA;EACjC,EAAA,IAAI,OAAO,KAAA,KAAU,UAAA,EAAY,OAAO,KAAA;EACxC,EAAA,IAAI,KAAA,YAAiB,MAAA,IAAU,KAAA,YAAiB,MAAA,IAAU,iBAAiB,OAAA,EAAS;EAChF,IAAA,OAAO,KAAA;EAAA,EACX;EACA,EAAA,OAAO,OAAO,KAAA,KAAU,QAAA;EAC5B;EAEO,SAAS,SAAS,KAAA,EAAiC;EACtD,EAAA,OAAO,OAAO,KAAA,KAAU,QAAA,IAAY,KAAA,YAAiB,MAAA;EACzD;EAEO,SAAS,SAAS,KAAA,EAAiC;EACtD,EAAA,OAAO,OAAO,KAAA,KAAU,QAAA,IAAY,KAAA,YAAiB,MAAA;EACzD;EAEO,SAAS,UAAU,KAAA,EAAkC;EACxD,EAAA,OAAO,OAAO,KAAA,KAAU,SAAA,IAAa,KAAA,YAAiB,OAAA;EAC1D;;ECfA,MAAM,KAAA,GAAQ;EAAA,EACV,YAAA,EAAc,WAAA;EAAA,EACd,UAAA,EAAY,SAAA;EAAA,EACZ,WAAA,EAAa,UAAA;EAAA,EACb,WAAA,EAAa;EACjB,CAAA;EASA,MAAM,QAAA,CAA+B;EAAA,EAIjC,WAAA,CAAY,MAAY,IAAA,EAAyB;EAC7C,IAAA,IAAA,CAAK,IAAA,GAAO,IAAA;EACZ,IAAA,IAAA,CAAK,IAAA,GAAO,IAAA;EAAA,EAAA;EAChB,EAEA,OAAO,KAAA,CAAM,IAAA,EAA8B,OAAA,EAAmD;EAC1F,IAAA,IAAI,KAAK,MAAA,GAAS,CAAA;EACd,MAAA,OAAO,OAAA,CAAQ,MAAM,CAAA,+BAAA,CAAiC,CAAA;EAE1D,IAAA,MAAM,IAAA,GAAO,KAAK,CAAC,CAAA;EACnB,IAAA,MAAM,SAAS,EAAC;EAChB,IAAA,IAAI,IAAA,GAAyB,QAAA;EAC7B,IAAA,IAAI,SAAS,UAAA,EAAY;EACrB,MAAA,IAAI,CAAC,KAAA,CAAM,OAAA,CAAQ,IAAA,CAAK,CAAC,CAAC,CAAA,EAAG;EACzB,QAAA,OAAO,IAAA;EAAA,MAAA;EAEX,MAAA,MAAM,WAAA,GAAc,IAAA,CAAK,CAAC,CAAA,CAAE,MAAA;EAC5B,MAAA,IAAI,QAAQ,YAAA,EAAc;EACtB,QAAA,IAAI,OAAA,CAAQ,YAAA,CAAa,IAAA,KAAS,OAAA,EAAS;EACvC,UAAA,IAAA,GAAON,OAAA,CAAM,OAAA,CAAQ,YAAA,CAAa,QAAA,EAAU,WAAW,CAAA;EAAA,QAAA,CAC3D,MAAO;EACH,UAAA,OAAO,QAAQ,KAAA,CAAM,CAAA,SAAA,EAAY,OAAA,CAAQ,YAAA,CAAa,IAAI,CAAA,iBAAA,CAAmB,CAAA;EAAA,QAAA;EACjF,MAAA,CACJ,MAAA,IAAW,cAAc,CAAA,IAAK,OAAA,CAAQ,KAAK,CAAC,CAAA,CAAE,CAAC,CAAC,CAAA,EAAG;EAE/C,QAAA,MAAM,KAAA,GAAS,IAAA,CAAK,CAAC,CAAA,CAAE,CAAC,CAAA;EAExB,QAAA,IAAA,GAAOA,OAAA,CAAM,MAAA,CAAO,KAAK,CAAA,EAAG,WAAW,CAAA;EAAA,MAAA,CAC3C,MAAO;EACH,QAAA,OAAO,IAAA;EAAA,MAAA;EAEX,MAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,WAAA,EAAa,CAAA,EAAA,EAAK;EAElC,QAAA,MAAM,MAAA,GAAS,IAAA,CAAK,CAAC,CAAA,CAAE,CAAC,CAAA;EACxB,QAAA,IAAI,YAAA;EACJ,QAAA,IAAI,KAAA,CAAM,OAAA,CAAQ,MAAM,CAAA,EAAG;EACvB,UAAA,YAAA,GAAe,OAAA,CAAQ,KAAA,CAAM,MAAA,EAAQ,MAAA,EAAW,KAAK,QAAQ,CAAA;EAAA,QAAA,CACjE,MAAO;EACH,UAAA,MAAM,UAAA,GAAa,QAAQ,MAAM,CAAA;EACjC,UAAA,IAAI,UAAA,KAAe,IAAA,CAAK,QAAA,CAAS,IAAA,EAAM;EACnC,YAAA,OAAO,OAAA,CAAQ,MAAM,CAAA,SAAA,EAAY,IAAA,CAAK,SAAS,IAAI,CAAA,WAAA,EAAc,UAAU,CAAA,CAAA,CAAG,CAAA;EAAA,UAAA;EAElF,UAAA,YAAA,GAAe,OAAA,CAAQ,QAAA,CAAS,SAAS,CAAA,CAAE,KAAA,CAAM,CAAC,SAAA,EAAW,MAAA,KAAW,MAAA,GAAY,IAAA,GAAO,MAAM,CAAA,EAAG,OAAO,CAAA;EAAA,QAAA;EAE/G,QAAA,IAAI,CAAC,cAAc,OAAO,IAAA;EAC1B,QAAA,MAAA,CAAO,KAAK,YAAY,CAAA;EAAA,MAAA;EAC5B,IAAA,CACJ,MAAO;EAGH,MAAA,IAAA,CAAK,IAAA,KAAS,YAAA,IAAgB,IAAA,KAAS,WAAA,KAAgB,KAAK,MAAA,KAAW,CAAA;EACnE,QAAA,OAAO,OAAA,CAAQ,MAAM,CAAA,sBAAA,CAAwB,CAAA;EAGjD,MAAA,IAAA,GAAO,MAAM,IAAI,CAAA;EAEjB,MAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,IAAA,CAAK,QAAQ,CAAA,EAAA,EAAK;EAClC,QAAA,MAAM,QAAQ,OAAA,CAAQ,KAAA,CAAM,KAAK,CAAC,CAAA,EAAG,GAAG,SAAS,CAAA;EACjD,QAAA,IAAI,CAAC,OAAO,OAAO,IAAA;EACnB,QAAA,MAAA,CAAO,KAAK,KAAK,CAAA;EAAA,MAAA;EACrB,IAAA;EAIJ,IAAA,OAAO,IAAI,QAAA,CAAS,IAAA,EAAM,MAAM,CAAA;EAAA,EAAA;EACpC;EAAA,EAGA,SAAS,GAAA,EAA6B;EAClC,IAAA,IAAI,IAAA,CAAK,IAAA,CAAK,IAAA,KAAS,SAAA,EAAW;EAC9B,MAAA,OAAO,QAAQ,IAAA,CAAK,IAAA,CAAK,CAAC,CAAA,CAAE,QAAA,CAAS,GAAG,CAAC,CAAA;EAAA,IAAA,CAC7C,MAAA,IAAW,IAAA,CAAK,IAAA,CAAK,IAAA,KAAS,OAAA,EAAS;EAEnC,MAAA,IAAI,KAAA;EACJ,MAAA,IAAI,KAAA;EACJ,MAAA,KAAA,MAAW,GAAA,IAAO,KAAK,IAAA,EAAM;EAEzB,QAAA,KAAA,GAAQ,GAAA,CAAI,SAAS,GAAG,CAAA;EACxB,QAAA,KAAA,GAAQ,IAAA;EACR,QAAA,IAAI,iBAAiB,KAAA,EAAO;EACxB,UAAA,OAAO,KAAA;EAAA,QAAA,CACX,MAAA,IAAW,OAAO,KAAA,KAAU,QAAA,EAAU;EAClC,UAAA,MAAM,CAAA,GAAI,GAAA,CAAI,UAAA,CAAW,KAAK,CAAA;EAC9B,UAAA,IAAI,GAAG,OAAO,CAAA;EAAA,QAAA,CAClB,MAAA,IAAW,KAAA,CAAM,OAAA,CAAQ,KAAK,CAAA,EAAG;EAC7B,UAAA,IAAI,KAAA,CAAM,MAAA,GAAS,CAAA,IAAK,KAAA,CAAM,SAAS,CAAA,EAAG;EACtC,YAAA,KAAA,GAAQ,CAAA,mBAAA,EAAsB,IAAA,CAAK,SAAA,CAAU,KAAK,CAAC,CAAA,mEAAA,CAAA;EAAA,UAAA,CACvD,MAAO;EACH,YAAA,KAAA,GAAQ,YAAA,CAAa,KAAA,CAAM,CAAC,CAAA,EAAG,KAAA,CAAM,CAAC,CAAA,EAAG,KAAA,CAAM,CAAC,CAAA,EAAG,KAAA,CAAM,CAAC,CAAC,CAAA;EAAA,UAAA;EAE/D,UAAA,IAAI,CAAC,KAAA,EAAO;EAER,YAAA,OAAO,IAAI,KAAA,CAAO,KAAA,CAAM,CAAC,CAAA,GAAK,KAAM,KAAA,CAAM,CAAC,CAAA,GAAK,GAAA,EAAM,MAAM,CAAC,CAAA,GAAK,GAAA,EAAM,KAAA,CAAM,CAAC,CAAE,CAAA;EAAA,UAAA;EACrF,QAAA;EACJ,MAAA;EAEJ,MAAA,MAAM,IAAI,YAAA,CAAa,KAAA,IAAS,CAAA,kCAAA,EAAqC,OAAO,KAAA,KAAU,QAAA,GAAW,KAAA,GAAQ,MAAA,CAAO,IAAA,CAAK,SAAA,CAAU,KAAK,CAAC,CAAC,CAAA,CAAA,CAAG,CAAA;EAAA,IAAA,CAC7I,MAAA,IAAW,IAAA,CAAK,IAAA,CAAK,IAAA,KAAS,QAAA,EAAU;EACpC,MAAA,IAAI,KAAA,GAAQ,IAAA;EACZ,MAAA,KAAA,MAAW,GAAA,IAAO,KAAK,IAAA,EAAM;EAEzB,QAAA,KAAA,GAAQ,GAAA,CAAI,SAAS,GAAG,CAAA;EACxB,QAAA,IAAI,KAAA,KAAU,MAAM,OAAO,CAAA;EAC3B,QAAA,MAAM,GAAA,GAAM,OAAO,KAAK,CAAA;EACxB,QAAA,IAAI,KAAA,CAAM,GAAG,CAAA,EAAG;EAChB,QAAA,OAAO,GAAA;EAAA,MAAA;EAEX,MAAA,MAAM,IAAI,YAAA,CAAa,CAAA,kBAAA,EAAqB,KAAK,SAAA,CAAU,KAAK,CAAC,CAAA,WAAA,CAAa,CAAA;EAAA,IAAA,CAClF,MAAA,IAAW,IAAA,CAAK,IAAA,CAAK,IAAA,KAAS,WAAA,EAAa;EAIvC,MAAA,OAAO,SAAA,CAAU,UAAA,CAAWO,QAAA,CAAc,IAAA,CAAK,IAAA,CAAK,CAAC,CAAA,CAAE,QAAA,CAAS,GAAG,CAAC,CAAC,CAAA;EAAA,IAAA,CACzE,MAAA,IAAW,IAAA,CAAK,IAAA,CAAK,IAAA,KAAS,eAAA,EAAiB;EAE3C,MAAA,OAAO,aAAA,CAAc,KAAA,CAAMA,QAAA,CAAc,IAAA,CAAK,IAAA,CAAK,CAAC,CAAA,CAAE,QAAA,CAAS,GAAG,CAAC,CAAC,CAAA;EAAA,IAAA,CACxE,MAAA,IAAW,IAAA,CAAK,IAAA,CAAK,IAAA,KAAS,OAAA,EAAS;EAEnC,MAAA,OAAO,IAAA,CAAK,IAAA,CAAK,GAAA,CAAI,CAAA,GAAA,KAAO;EAAE,QAAA,OAAO,GAAA,CAAI,SAAS,GAAG,CAAA;EAAA,MAAA,CAAI,CAAA;EAAA,IAAA,CAC7D,MAAO;EAEH,MAAA,OAAOA,SAAc,IAAA,CAAK,IAAA,CAAK,CAAC,CAAA,CAAE,QAAA,CAAS,GAAG,CAAC,CAAA;EAAA,IAAA;EACnD,EAAA;EACJ,EAEA,UAAU,EAAA,EAA6B;EACnC,IAAA,IAAA,CAAK,IAAA,CAAK,QAAQ,EAAE,CAAA;EAAA,EAAA;EACxB,EAEA,aAAA,GAAyB;EACrB,IAAA,OAAO,KAAK,IAAA,CAAK,KAAA,CAAM,CAAA,GAAA,KAAO,GAAA,CAAI,eAAe,CAAA;EAAA,EAAA;EACrD,EAEA,SAAA,GAAkC;EAC9B,IAAA,IAAI,IAAA,CAAK,IAAA,CAAK,IAAA,KAAS,WAAA,EAAa;EAChC,MAAA,OAAO,IAAI,gBAAA,CAAiB,CAAC,EAAC,OAAA,EAAS,IAAA,CAAK,KAAK,CAAC,CAAA,EAAG,KAAA,EAAO,IAAA,EAAM,MAAM,IAAA,EAAM,SAAA,EAAW,MAAK,CAAC,EAAE,SAAA,EAAU;EAAA,IAAA;EAG/G,IAAA,IAAI,IAAA,CAAK,IAAA,CAAK,IAAA,KAAS,eAAA,EAAiB;EACpC,MAAA,OAAO,IAAI,eAAA,CAAgB,IAAA,CAAK,KAAK,CAAC,CAAC,EAAE,SAAA,EAAU;EAAA,IAAA;EAGvD,IAAA,MAAM,UAAA,GAA6B,IAAA,CAAK,IAAA,CAAK,IAAA,KAAS,OAAA,GAAU,EAAC,GAAI,CAAC,CAAA,GAAA,EAAM,IAAA,CAAK,IAAA,CAAK,IAAI,CAAA,CAAE,CAAA;EAC5F,IAAA,IAAA,CAAK,UAAU,CAAA,KAAA,KAAS;EAAE,MAAA,UAAA,CAAW,IAAA,CAAK,KAAA,CAAM,SAAA,EAAW,CAAA;EAAA,IAAA,CAAI,CAAA;EAC/D,IAAA,OAAO,UAAA;EAAA,EAAA;EAEf;;ECzKA,MAAM,aAAA,GAAgB,CAAC,SAAA,EAAW,OAAA,EAAS,cAAc,SAAS,CAAA;EAElE,MAAM,iBAAA,CAAkB;EAAA,EAapB,WAAA,CAAY,KAAA,EAAuB,OAAA,EAAgC,iBAAA,EAA4B;EAC3F,IAAA,IAAA,CAAK,OAAA,GAAU,IAAA;EACf,IAAA,IAAA,CAAK,OAAA,GAAU,IAAA;EACf,IAAA,IAAA,CAAK,YAAA,GAAe,IAAA;EACpB,IAAA,IAAA,CAAK,gBAAA,GAAmB,IAAA;EACxB,IAAA,IAAA,CAAK,eAAA,GAAkB,IAAA;EACvB,IAAA,IAAA,CAAK,SAAA,GAAY,IAAA;EACjB,IAAA,IAAA,CAAK,gBAAA,GAAmB,IAAA;EACxB,IAAA,IAAA,CAAK,mBAAA,GAAsB,IAAA;EAC3B,IAAA,IAAA,CAAK,KAAA,GAAQ,KAAA;EACb,IAAA,IAAA,CAAK,OAAA,GAAU,OAAA;EACf,IAAA,IAAA,CAAK,iBAAA,GAAoB,iBAAA;EAAA,EAC7B;EAAA,EAEA,EAAA,GAA6B;EACzB,IAAA,OAAO,IAAA,CAAK,WAAW,IAAA,CAAK,OAAA,CAAQ,OAAO,MAAA,GAAY,IAAA,CAAK,QAAQ,EAAA,GAAK,IAAA;EAAA,EAC7E;EAAA,EAEA,YAAA,GAA8B;EAC1B,IAAA,OAAO,IAAA,CAAK,OAAA,GAAU,OAAO,IAAA,CAAK,QAAQ,IAAA,KAAS,QAAA,GAAW,aAAA,CAAc,IAAA,CAAK,OAAA,CAAQ,IAAI,CAAA,GAAI,IAAA,CAAK,QAAQ,IAAA,GAAO,IAAA;EAAA,EACzH;EAAA,EAEA,QAAA,GAAmD;EAC/C,IAAA,OAAO,KAAK,OAAA,IAAW,UAAA,IAAc,KAAK,OAAA,GAAU,IAAA,CAAK,QAAQ,QAAA,GAAW,IAAA;EAAA,EAChF;EAAA,EAEA,WAAA,GAAsC;EAClC,IAAA,OAAO,IAAA,CAAK,SAAA;EAAA,EAChB;EAAA,EAEA,UAAA,GAAgD;EAC5C,IAAA,OAAQ,IAAA,CAAK,OAAA,IAAW,IAAA,CAAK,OAAA,CAAQ,cAAe,EAAC;EAAA,EACzD;EAAA,EAEA,aAAa,CAAA,EAAmB;EAC5B,IAAA,OAAO,IAAA,CAAK,QAAQ,UAAA,IAAc,CAAA;EAAA,EACtC;EAAA,EAEA,kBAAA,GAA6B;EACzB,IAAA,IAAI,IAAA,CAAK,gBAAA,IAAoB,IAAA,CAAK,mBAAA,EAAqB;EAEnD,MAAA,MAAM,CAAA,GAAI,KAAK,mBAAA,CAAoB,MAAA;EACnC,MAAA,MAAM,KAAA,GAAQ,KAAK,mBAAA,CAAoB,KAAA;EACvC,MAAA,MAAM,EAAC,CAAA,EAAG,CAAA,EAAC,GAAI,IAAA,CAAK,gBAAA;EAGpB,MAAA,MAAM,EAAA,GAAK,CAAA,GAAI,KAAA,GAAQ,CAAA,CAAE,CAAC,CAAA;EAC1B,MAAA,MAAM,EAAA,GAAK,CAAA,GAAI,KAAA,GAAQ,CAAA,CAAE,CAAC,CAAA;EAG1B,MAAA,MAAM,EAAA,GAAK,IAAA,CAAK,mBAAA,CAAoB,OAAA,CAAQ,CAAC,CAAA;EAC7C,MAAA,MAAM,EAAA,GAAK,IAAA,CAAK,mBAAA,CAAoB,OAAA,CAAQ,CAAC,CAAA;EAG7C,MAAA,MAAM,IAAA,GAAQ,EAAA,GAAK,EAAA,GAAK,EAAA,GAAK,EAAA;EAC7B,MAAA,OAAO,IAAA;EAAA,IACX;EAEA,IAAA,OAAO,CAAA;EAAA,EACX;EAAA,EAEA,WAAW,KAAA,EAAkC;EACzC,IAAA,OAAO,KAAA,CAAM,MAAM,KAAK,CAAA;EAAA,EAC5B;EAAA,EAEA,UAAU,EAAA,EAAkD;EACxD,IAAA,OAAO,KAAK,OAAA,GAAU,IAAA,CAAK,OAAA,CAAQ,GAAA,CAAI,EAAE,CAAA,GAAI,IAAA;EAAA,EACjD;EACJ;;EC1EA,MAAM,kBAAA,CAAyC;EAAA,EAW3C,WAAA,CAAY,IAAA,EAAc,IAAA,EAAY,QAAA,EAAoB,MAAyB,aAAA,EAAuB;EACtG,IAAA,IAAA,CAAK,IAAA,GAAO,IAAA;EACZ,IAAA,IAAA,CAAK,IAAA,GAAO,IAAA;EACZ,IAAA,IAAA,CAAK,SAAA,GAAY,QAAA;EACjB,IAAA,IAAA,CAAK,IAAA,GAAO,IAAA;EACZ,IAAA,IAAA,CAAK,cAAA,GAAiB,aAAA;EAAA,EAAA;EAC1B,EAEA,SAAS,GAAA,EAA+B;EACpC,IAAA,IAAI,CAAC,KAAK,SAAA,EAAW;EACjB,MAAA,MAAM,UAAA,GAAa,kBAAA,CAAmB,WAAA,CAAY,IAAA,CAAK,IAAI,CAAA;EAC3D,MAAA,IAAA,CAAK,SAAA,GAAY,KAAA,CAAM,OAAA,CAAQ,UAAU,CAAA,GAAI,UAAA,CAAW,CAAC,CAAA,GAAI,UAAA,CAAW,SAAA,CAAU,IAAA,CAAK,cAAc,EAAE,CAAC,CAAA;EAAA,IAAA;EAE5G,IAAA,OAAO,IAAA,CAAK,SAAA,CAAU,GAAA,EAAK,IAAA,CAAK,IAAI,CAAA;EAAA,EAAA;EACxC,EAEA,UAAU,EAAA,EAA6B;EACnC,IAAA,IAAA,CAAK,IAAA,CAAK,QAAQ,EAAE,CAAA;EAAA,EAAA;EACxB,EAEA,aAAA,GAAyB;EACrB,IAAA,OAAO,KAAA;EAAA,EAAA;EACX,EAEA,SAAA,GAAoC;EAChC,IAAA,OAAO,CAAC,IAAA,CAAK,IAA4B,CAAA,CAAE,MAAA,CAAO,IAAA,CAAK,IAAA,CAAK,GAAA,CAAI,CAAA,GAAA,KAAO,GAAA,CAAI,SAAA,EAAW,CAAC,CAAA;EAAA,EAAA;EAC3F,EAEA,OAAO,KAAA,CAAM,IAAA,EAA8B,OAAA,EAAmD;EAC1F,IAAA,MAAM,EAAA,GAAK,KAAK,CAAC,CAAA;EACjB,IAAA,MAAM,UAAA,GAAa,kBAAA,CAAmB,WAAA,CAAY,EAAE,CAAA;EACpD,IAAA,IAAI,CAAC,UAAA,EAAY;EACb,MAAA,OAAO,OAAA,CAAQ,KAAA,CAAM,CAAA,oBAAA,EAAuB,EAAE,6DAA6D,CAAC,CAAA;EAAA,IAAA;EAIhH,IAAA,MAAM,IAAA,GAAO,MAAM,OAAA,CAAQ,UAAU,IACjC,UAAA,CAAW,CAAC,IAAI,UAAA,CAAW,IAAA;EAE/B,IAAA,MAAM,kBAAA,GAAmD,KAAA,CAAM,OAAA,CAAQ,UAAU,IAC7E,CAAC,CAAC,UAAA,CAAW,CAAC,GAAG,UAAA,CAAW,CAAC,CAAC,CAAC,IAC/B,UAAA,CAAW,SAAA;EAEf,IAAA,MAAM,iBAAiB,EAAC;EAExB,IAAA,IAAI,gBAAA,GAAmC,IAAA;EAEvC,IAAA,IAAI,aAAA,GAAgB,EAAA;EAEpB,IAAA,KAAA,MAAW,CAAC,MAAA,EAAQ,QAAQ,CAAA,IAAK,kBAAA,EAAoB;EACjD,MAAA,IAAI,KAAA,CAAM,QAAQ,MAAM,CAAA,IAAK,OAAO,MAAA,KAAW,IAAA,CAAK,SAAS,CAAA,EAAG;EAEhE,MAAA,cAAA,CAAe,KAAK,MAAM,CAAA;EAC1B,MAAA,aAAA,EAAA;EAOA,MAAA,IAAI,qBAAqB,IAAA,EAAM;EAC3B,QAAA,gBAAA,GAAmB,QAAQ,iBAAA,EAAkB;EAAA,MAAA,CACjD,MAAO;EACH,QAAA,gBAAA,CAAiB,OAAO,MAAA,GAAS,CAAA;EAAA,MAAA;EAKrC,MAAA,MAAM,aAAgC,EAAC;EACvC,MAAA,IAAI,cAAA,GAAiB,KAAA;EACrB,MAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,IAAA,CAAK,QAAQ,CAAA,EAAA,EAAK;EAClC,QAAA,MAAM,GAAA,GAAM,KAAK,CAAC,CAAA;EAClB,QAAA,MAAM,YAAA,GAAe,MAAM,OAAA,CAAQ,MAAM,IACrC,MAAA,CAAO,CAAA,GAAI,CAAC,CAAA,GACZ,MAAA,CAAO,IAAA;EAEX,QAAA,MAAM,SAAS,gBAAA,CAAiB,KAAA,CAAM,KAAK,CAAA,GAAI,UAAA,CAAW,QAAQ,YAAY,CAAA;EAC9E,QAAA,IAAI,CAAC,MAAA,EAAQ;EACT,UAAA,cAAA,GAAiB,IAAA;EACjB,UAAA;EAAA,QAAA;EAEJ,QAAA,UAAA,CAAW,KAAK,MAAM,CAAA;EAAA,MAAA;EAE1B,MAAA,IAAI,cAAA,EAAgB;EAGhB,QAAA;EAAA,MAAA;EAGJ,MAAA,IAAI,KAAA,CAAM,OAAA,CAAQ,MAAM,CAAA,EAAG;EACvB,QAAA,IAAI,MAAA,CAAO,MAAA,KAAW,UAAA,CAAW,MAAA,EAAQ;EACrC,UAAA,gBAAA,CAAiB,MAAM,CAAA,SAAA,EAAY,MAAA,CAAO,MAAM,CAAA,sBAAA,EAAyB,UAAA,CAAW,MAAM,CAAA,SAAA,CAAW,CAAA;EACrG,UAAA;EAAA,QAAA;EACJ,MAAA;EAGJ,MAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,UAAA,CAAW,QAAQ,CAAA,EAAA,EAAK;EACxC,QAAA,MAAM,QAAA,GAAW,MAAM,OAAA,CAAQ,MAAM,IAAI,MAAA,CAAO,CAAC,IAAI,MAAA,CAAO,IAAA;EAC5D,QAAA,MAAM,GAAA,GAAM,WAAW,CAAC,CAAA;EACxB,QAAA,gBAAA,CAAiB,YAAA,CAAa,QAAA,EAAU,GAAA,CAAI,IAAA,EAAM,IAAI,CAAC,CAAA;EAAA,MAAA;EAG3D,MAAA,IAAI,gBAAA,CAAiB,MAAA,CAAO,MAAA,KAAW,CAAA,EAAG;EACtC,QAAA,OAAO,IAAI,kBAAA,CAAmB,EAAA,EAAI,IAAA,EAAM,QAAA,EAAU,YAAY,aAAa,CAAA;EAAA,MAAA;EAC/E,IAAA;EAKJ,IAAA,IAAI,cAAA,CAAe,WAAW,CAAA,EAAG;EAC7B,MAAA,OAAA,CAAQ,MAAA,CAAO,IAAA,CAAK,GAAG,gBAAA,CAAiB,MAAM,CAAA;EAAA,IAAA,CAClD,MAAO;EACH,MAAA,MAAM,QAAA,GAAW,cAAA,CAAe,MAAA,GAAS,cAAA,GAAiB,kBAAA,CAAmB,IAAI,CAAC,CAAC,MAAM,CAAA,KAAM,MAAM,CAAA;EACrG,MAAA,MAAM,aAAa,QAAA,CAAS,GAAA,CAAI,kBAAkB,CAAA,CAAE,KAAK,KAAK,CAAA;EAE9D,MAAA,MAAM,cAAc,EAAC;EAGrB,MAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,IAAA,CAAK,QAAQ,CAAA,EAAA,EAAK;EAClC,QAAA,MAAM,MAAA,GAAS,QAAQ,KAAA,CAAM,IAAA,CAAK,CAAC,CAAA,EAAG,CAAA,GAAI,YAAY,MAAM,CAAA;EAC5D,QAAA,IAAI,CAAC,QAAQ,OAAO,IAAA;EACpB,QAAA,WAAA,CAAY,IAAA,CAAKN,UAAA,CAAS,MAAA,CAAO,IAAI,CAAC,CAAA;EAAA,MAAA;EAE1C,MAAA,OAAA,CAAQ,KAAA,CAAM,8BAA8B,UAAU,CAAA,aAAA,EAAgB,YAAY,IAAA,CAAK,IAAI,CAAC,CAAA,UAAA,CAAY,CAAA;EAAA,IAAA;EAG5G,IAAA,OAAO,IAAA;EAAA,EAAA;EACX,EAEA,OAAO,QAAA,CACH,QAAA,EACA,WAAA,EAGF;EAEE,IAAA,kBAAA,CAAmB,WAAA,GAAc,WAAA;EACjC,IAAA,KAAA,MAAW,QAAQ,WAAA,EAAa;EAC5B,MAAA,QAAA,CAAS,IAAI,CAAA,GAAI,kBAAA;EAAA,IAAA;EACrB,EAAA;EAER;EAEA,SAAS,mBAAmB,SAAA,EAA8B;EACtD,EAAA,IAAI,KAAA,CAAM,OAAA,CAAQ,SAAS,CAAA,EAAG;EAC1B,IAAA,OAAO,IAAI,SAAA,CAAU,GAAA,CAAIA,UAAQ,CAAA,CAAE,IAAA,CAAK,IAAI,CAAC,CAAA,CAAA,CAAA;EAAA,EAAA,CACjD,MAAO;EACH,IAAA,OAAO,CAAA,CAAA,EAAIA,UAAA,CAAS,SAAA,CAAU,IAAI,CAAC,CAAA,IAAA,CAAA;EAAA,EAAA;EAE3C;;EC3KA,MAAqB,kBAAA,CAAyC;EAAA,EAM1D,WAAA,CAAY,aAAA,EAA2B,kBAAA,EAAgC,MAAA,EAA2B;EAC9F,IAAA,IAAA,CAAK,IAAA,GAAO,YAAA;EACZ,IAAA,IAAA,CAAK,MAAA,GAAS,MAAA;EACd,IAAA,IAAA,CAAK,aAAA,GAAgB,aAAA;EACrB,IAAA,IAAA,CAAK,kBAAA,GAAqB,kBAAA;EAAA,EAC9B;EAAA,EAEA,OAAO,KAAA,CAAM,IAAA,EAA8B,OAAA,EAAwD;EAC/F,IAAA,IAAI,IAAA,CAAK,WAAW,CAAA,EAAG;EACnB,MAAA,OAAA,CAAQ,MAAM,CAAA,sBAAA,CAAwB,CAAA;EACtC,MAAA,OAAO,IAAA;EAAA,IACX;EAEA,IAAA,MAAM,OAAA,GAAU,KAAK,CAAC,CAAA;EACtB,IAAA,IAAI,OAAO,OAAA,KAAY,QAAA,IAAY,KAAA,CAAM,OAAA,CAAQ,OAAO,CAAA,EAAG;EACvD,MAAA,OAAA,CAAQ,MAAM,CAAA,4CAAA,CAA8C,CAAA;EAC5D,MAAA,OAAO,IAAA;EAAA,IACX;EAEA,IAAA,MAAM,gBAAgB,OAAA,CAAQ,gBAAgB,MAAM,MAAA,GAChD,OAAA,CAAQ,MAAM,KAAA,EAAO,CAAA,EAAG,WAAW,CAAA,GACnC,QAAQ,gBAAA,CAAiB,OAAA,CAAQ,gBAAgB,CAAA,EAAG,CAAA,EAAG,kBAAkB,WAAW,CAAA;EACxF,IAAA,IAAI,CAAC,eAAe,OAAO,IAAA;EAE3B,IAAA,MAAM,qBAAqB,OAAA,CAAQ,qBAAqB,MAAM,MAAA,GAC1D,OAAA,CAAQ,MAAM,KAAA,EAAO,CAAA,EAAG,WAAW,CAAA,GACnC,QAAQ,gBAAA,CAAiB,OAAA,CAAQ,qBAAqB,CAAA,EAAG,CAAA,EAAG,uBAAuB,WAAW,CAAA;EAClG,IAAA,IAAI,CAAC,oBAAoB,OAAO,IAAA;EAEhC,IAAA,IAAI,MAAA,GAAqB,IAAA;EACzB,IAAA,IAAI,OAAA,CAAQ,QAAQ,CAAA,EAAG;EACnB,MAAA,MAAA,GAAS,QAAQ,gBAAA,CAAiB,OAAA,CAAQ,QAAQ,CAAA,EAAG,CAAA,EAAG,UAAU,UAAU,CAAA;EAC5E,MAAA,IAAI,CAAC,QAAQ,OAAO,IAAA;EAAA,IACxB;EAEA,IAAA,OAAO,IAAI,kBAAA,CAAmB,aAAA,EAAe,kBAAA,EAAoB,MAAM,CAAA;EAAA,EAC3E;EAAA,EAEA,SAAS,GAAA,EAAkC;EACvC,IAAA,OAAO,IAAI,QAAA;EAAA,MACP,IAAA,CAAK,aAAA,CAAc,QAAA,CAAS,GAAG,CAAA;EAAA,MAC/B,IAAA,CAAK,kBAAA,CAAmB,QAAA,CAAS,GAAG,CAAA;EAAA,MACpC,KAAK,MAAA,GAAS,IAAA,CAAK,MAAA,CAAO,QAAA,CAAS,GAAG,CAAA,GAAc;EAAA,KACxD;EAAA,EACJ;EAAA,EAEA,UAAU,EAAA,EAA6B;EACnC,IAAA,EAAA,CAAG,KAAK,aAAa,CAAA;EACrB,IAAA,EAAA,CAAG,KAAK,kBAAkB,CAAA;EAC1B,IAAA,IAAI,KAAK,MAAA,EAAQ;EACb,MAAA,EAAA,CAAG,KAAK,MAAM,CAAA;EAAA,IAClB;EAAA,EACJ;EAAA,EAEA,aAAA,GAAyB;EAKrB,IAAA,OAAO,KAAA;EAAA,EACX;EAAA,EAEA,SAAA,GAAkC;EAC9B,IAAA,MAAM,UAAgD,EAAC;EACvD,IAAA,OAAA,CAAQ,gBAAgB,CAAA,GAAI,IAAA,CAAK,aAAA,CAAc,SAAA,EAAU;EACzD,IAAA,OAAA,CAAQ,qBAAqB,CAAA,GAAI,IAAA,CAAK,kBAAA,CAAmB,SAAA,EAAU;EACnE,IAAA,IAAI,KAAK,MAAA,EAAQ;EACb,MAAA,OAAA,CAAQ,QAAQ,CAAA,GAAI,IAAA,CAAK,MAAA,CAAO,SAAA,EAAU;EAAA,IAC9C;EACA,IAAA,OAAO,CAAC,YAAY,OAAO,CAAA;EAAA,EAC/B;EACJ;;ECrFA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACe,SAAS,KAAK,CAAC,CAAC,EAAE,CAAC,EAAE;EACpC,IAAI,IAAI,CAAC,CAAC,GAAG,CAAC;EACd,IAAI,IAAI,CAAC,CAAC,GAAG,CAAC;EACd;;EAEA,KAAK,CAAC,SAAS,GAAG;EAClB;EACA;EACA;EACA;EACA;EACA,IAAI,KAAK,GAAG,EAAE,OAAO,IAAI,KAAK,CAAC,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;;EAEjD;EACA;EACA;EACA;EACA;EACA;EACA,IAAI,GAAG,CAAC,CAAC,EAAE,EAAE,OAAO,IAAI,CAAC,KAAK,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;;EAE3C;EACA;EACA;EACA;EACA;EACA;EACA,IAAI,GAAG,CAAC,CAAC,EAAE,EAAE,OAAO,IAAI,CAAC,KAAK,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;;EAE3C;EACA;EACA;EACA;EACA;EACA;EACA,IAAI,WAAW,CAAC,CAAC,EAAE,EAAE,OAAO,IAAI,CAAC,KAAK,EAAE,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;;EAE3D;EACA;EACA;EACA;EACA;EACA;EACA,IAAI,UAAU,CAAC,CAAC,EAAE,EAAE,OAAO,IAAI,CAAC,KAAK,EAAE,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;;EAEzD;EACA;EACA;EACA;EACA;EACA;EACA,IAAI,IAAI,CAAC,CAAC,EAAE,EAAE,OAAO,IAAI,CAAC,KAAK,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;;EAE7C;EACA;EACA;EACA;EACA;EACA;EACA,IAAI,GAAG,CAAC,CAAC,EAAE,EAAE,OAAO,IAAI,CAAC,KAAK,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;;EAE3C;EACA;EACA;EACA;EACA;EACA;EACA,IAAI,MAAM,CAAC,CAAC,EAAE,EAAE,OAAO,IAAI,CAAC,KAAK,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;;EAEjD;EACA;EACA;EACA;EACA;EACA;EACA;EACA,IAAI,YAAY,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,OAAO,IAAI,CAAC,KAAK,EAAE,CAAC,aAAa,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;;EAEnE;EACA;EACA;EACA;EACA;EACA,IAAI,OAAO,CAAC,CAAC,EAAE,EAAE,OAAO,IAAI,CAAC,KAAK,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;;EAEnD;EACA;EACA;EACA;EACA;EACA;EACA;EACA,IAAI,IAAI,GAAG,EAAE,OAAO,IAAI,CAAC,KAAK,EAAE,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;;EAE3C;EACA;EACA;EACA;EACA;EACA;EACA,IAAI,IAAI,GAAG,EAAE,OAAO,IAAI,CAAC,KAAK,EAAE,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;;EAE3C;EACA;EACA;EACA;EACA;EACA,IAAI,KAAK,GAAG,EAAE,OAAO,IAAI,CAAC,KAAK,EAAE,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;;EAE7C;EACA;EACA;EACA;EACA;EACA;EACA,IAAI,GAAG,GAAG;EACV,QAAQ,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC;EAC3D,IAAI,CAAC;;EAEL;EACA;EACA;EACA;EACA;EACA;EACA,IAAI,MAAM,CAAC,KAAK,EAAE;EAClB,QAAQ,OAAO,IAAI,CAAC,CAAC,KAAK,KAAK,CAAC,CAAC;EACjC,eAAe,IAAI,CAAC,CAAC,KAAK,KAAK,CAAC,CAAC;EACjC,IAAI,CAAC;;EAEL;EACA;EACA;EACA;EACA;EACA,IAAI,IAAI,CAAC,CAAC,EAAE;EACZ,QAAQ,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;EACzC,IAAI,CAAC;;EAEL;EACA;EACA;EACA;EACA;EACA;EACA;EACA,IAAI,OAAO,CAAC,CAAC,EAAE;EACf,QAAQ,MAAM,EAAE,GAAG,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;EAC/B,YAAY,EAAE,GAAG,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;EAC7B,QAAQ,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE;EAChC,IAAI,CAAC;;EAEL;EACA;EACA;EACA;EACA;EACA,IAAI,KAAK,GAAG;EACZ,QAAQ,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC;EACzC,IAAI,CAAC;;EAEL;EACA;EACA;EACA;EACA;EACA,IAAI,OAAO,CAAC,CAAC,EAAE;EACf,QAAQ,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;EACrD,IAAI,CAAC;;EAEL;EACA;EACA;EACA;EACA;EACA,IAAI,SAAS,CAAC,CAAC,EAAE;EACjB,QAAQ,OAAO,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;EAC1C,IAAI,CAAC;;EAEL;EACA;EACA;EACA;EACA;EACA;EACA;EACA,IAAI,YAAY,CAAC,CAAC,EAAE,CAAC,EAAE;EACvB,QAAQ,OAAO,IAAI,CAAC,KAAK;EACzB,YAAY,IAAI,CAAC,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,CAAC,GAAG,CAAC;EACnC,YAAY,IAAI,CAAC,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;EACpC,IAAI,CAAC;;EAEL;EACA,IAAI,QAAQ,CAAC,CAAC,EAAE;EAChB,QAAQ,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;EAC/C,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;EAC7C,QAAQ,IAAI,CAAC,CAAC,GAAG,CAAC;EAClB,QAAQ,IAAI,CAAC,CAAC,GAAG,CAAC;EAClB,QAAQ,OAAO,IAAI;EACnB,IAAI,CAAC;;EAEL;EACA,IAAI,IAAI,CAAC,CAAC,EAAE;EACZ,QAAQ,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;EACrB,QAAQ,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;EACrB,QAAQ,OAAO,IAAI;EACnB,IAAI,CAAC;;EAEL;EACA,IAAI,IAAI,CAAC,CAAC,EAAE;EACZ,QAAQ,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;EACrB,QAAQ,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;EACrB,QAAQ,OAAO,IAAI;EACnB,IAAI,CAAC;;EAEL;EACA,IAAI,KAAK,CAAC,CAAC,EAAE;EACb,QAAQ,IAAI,CAAC,CAAC,IAAI,CAAC;EACnB,QAAQ,IAAI,CAAC,CAAC,IAAI,CAAC;EACnB,QAAQ,OAAO,IAAI;EACnB,IAAI,CAAC;;EAEL;EACA,IAAI,IAAI,CAAC,CAAC,EAAE;EACZ,QAAQ,IAAI,CAAC,CAAC,IAAI,CAAC;EACnB,QAAQ,IAAI,CAAC,CAAC,IAAI,CAAC;EACnB,QAAQ,OAAO,IAAI;EACnB,IAAI,CAAC;;EAEL;EACA,IAAI,YAAY,CAAC,CAAC,EAAE;EACpB,QAAQ,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;EACrB,QAAQ,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;EACrB,QAAQ,OAAO,IAAI;EACnB,IAAI,CAAC;;EAEL;EACA,IAAI,WAAW,CAAC,CAAC,EAAE;EACnB,QAAQ,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;EACrB,QAAQ,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;EACrB,QAAQ,OAAO,IAAI;EACnB,IAAI,CAAC;;EAEL,IAAI,KAAK,GAAG;EACZ,QAAQ,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC;EAC7B,QAAQ,OAAO,IAAI;EACnB,IAAI,CAAC;;EAEL,IAAI,KAAK,GAAG;EACZ,QAAQ,MAAM,CAAC,GAAG,IAAI,CAAC,CAAC;EACxB,QAAQ,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;EACvB,QAAQ,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;EACnB,QAAQ,OAAO,IAAI;EACnB,IAAI,CAAC;;EAEL;EACA,IAAI,OAAO,CAAC,KAAK,EAAE;EACnB,QAAQ,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC;EACnC,YAAY,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC;EACjC,YAAY,CAAC,GAAG,GAAG,GAAG,IAAI,CAAC,CAAC,GAAG,GAAG,GAAG,IAAI,CAAC,CAAC;EAC3C,YAAY,CAAC,GAAG,GAAG,GAAG,IAAI,CAAC,CAAC,GAAG,GAAG,GAAG,IAAI,CAAC,CAAC;EAC3C,QAAQ,IAAI,CAAC,CAAC,GAAG,CAAC;EAClB,QAAQ,IAAI,CAAC,CAAC,GAAG,CAAC;EAClB,QAAQ,OAAO,IAAI;EACnB,IAAI,CAAC;;EAEL;EACA;EACA;EACA;EACA,IAAI,aAAa,CAAC,KAAK,EAAE,CAAC,EAAE;EAC5B,QAAQ,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC;EACnC,YAAY,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC;EACjC,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,IAAI,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,IAAI,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;EACjE,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,IAAI,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,IAAI,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;EACjE,QAAQ,IAAI,CAAC,CAAC,GAAG,CAAC;EAClB,QAAQ,IAAI,CAAC,CAAC,GAAG,CAAC;EAClB,QAAQ,OAAO,IAAI;EACnB,IAAI,CAAC;;EAEL,IAAI,MAAM,GAAG;EACb,QAAQ,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC;EACnC,QAAQ,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC;EACnC,QAAQ,OAAO,IAAI;EACnB,IAAI,CAAC;;EAEL,IAAI,WAAW,EAAE;EACjB,CAAC;;EAED;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA,KAAK,CAAC,OAAO,GAAG,UAAU,CAAC,EAAE;EAC7B,IAAI,IAAI,CAAC,YAAY,KAAK,EAAE;EAC5B,QAAQ,6BAA6B,CAAC;EACtC,IAAI;EACJ,IAAI,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE;EAC1B,QAAQ,OAAO,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;EACtC,IAAI;EACJ,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,SAAS,IAAI,CAAC,CAAC,CAAC,KAAK,SAAS,EAAE;EAChD,QAAQ,OAAO,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;EACpC,IAAI;EACJ,IAAI,MAAM,IAAI,KAAK,CAAC,wCAAwC,CAAC;EAC7D,CAAC;;ECrTM,SAAS,oBAAoB,IAAA,EAAoB;EACpD,EAAA,IAAI,GAAA,GAAM,CAAA;EACV,EAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,GAAA,GAAM,IAAA,CAAK,MAAA,EAAQ,CAAA,GAAI,GAAA,GAAM,CAAA,EAAG,EAAA,EAAW,EAAA,EAAW,CAAA,GAAI,GAAA,EAAK,IAAI,CAAA,EAAA,EAAK;EACpF,IAAA,EAAA,GAAK,KAAK,CAAC,CAAA;EACX,IAAA,EAAA,GAAK,KAAK,CAAC,CAAA;EACX,IAAA,GAAA,IAAA,CAAQ,GAAG,CAAA,GAAI,EAAA,CAAG,CAAA,KAAM,EAAA,CAAG,IAAI,EAAA,CAAG,CAAA,CAAA;EAAA,EACtC;EACA,EAAA,OAAO,GAAA;EACX;EAOO,SAAS,aAAA,CAAc,OAAoB,QAAA,EAAsC;EACpF,EAAA,MAAM,MAAM,KAAA,CAAM,MAAA;EAElB,EAAA,IAAI,GAAA,IAAO,CAAA,EAAG,OAAO,CAAC,KAAK,CAAA;EAE3B,EAAA,MAAM,WAA+B,EAAC;EACtC,EAAA,IAAI,OAAA,EACA,GAAA;EAEJ,EAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,GAAA,EAAK,CAAA,EAAA,EAAK;EAC1B,IAAA,MAAM,IAAA,GAAO,mBAAA,CAAoB,KAAA,CAAM,CAAC,CAAE,CAAA;EAC1C,IAAA,IAAI,SAAS,CAAA,EAAG;EAEhB,IAAC,MAAM,CAAC,CAAA,CAAI,IAAA,GAAO,IAAA,CAAK,IAAI,IAAI,CAAA;EAEhC,IAAA,IAAI,GAAA,KAAQ,MAAA,EAAW,GAAA,GAAM,IAAA,GAAO,CAAA;EAEpC,IAAA,IAAI,GAAA,KAAQ,OAAO,CAAA,EAAG;EAClB,MAAA,IAAI,OAAA,EAAS,QAAA,CAAS,IAAA,CAAK,OAAO,CAAA;EAClC,MAAA,OAAA,GAAU,CAAC,KAAA,CAAM,CAAC,CAAE,CAAA;EAAA,IACxB,CAAA,MAAO;EACH,MAAC,OAAA,CAAU,IAAA,CAAK,KAAA,CAAM,CAAC,CAAE,CAAA;EAAA,IAC7B;EAAA,EACJ;EACA,EAAA,IAAI,OAAA,EAAS,QAAA,CAAS,IAAA,CAAK,OAAO,CAAA;EAalC,EAAA,OAAO,QAAA;EACX;EAEO,SAAS,UAAA,CAAW,MAAY,KAAA,EAAyB;EAC5D,EAAA,IAAA,CAAK,CAAC,IAAI,IAAA,CAAK,GAAA,CAAI,KAAK,CAAC,CAAA,EAAG,KAAA,CAAM,CAAC,CAAE,CAAA;EACrC,EAAA,IAAA,CAAK,CAAC,IAAI,IAAA,CAAK,GAAA,CAAI,KAAK,CAAC,CAAA,EAAG,KAAA,CAAM,CAAC,CAAE,CAAA;EACrC,EAAA,IAAA,CAAK,CAAC,IAAI,IAAA,CAAK,GAAA,CAAI,KAAK,CAAC,CAAA,EAAG,KAAA,CAAM,CAAC,CAAE,CAAA;EACrC,EAAA,IAAA,CAAK,CAAC,IAAI,IAAA,CAAK,GAAA,CAAI,KAAK,CAAC,CAAA,EAAG,KAAA,CAAM,CAAC,CAAE,CAAA;EACzC;EAEO,SAAS,YAAA,CAAa,OAAa,KAAA,EAAsB;EAC5D,EAAA,IAAI,MAAM,CAAC,CAAA,IAAK,KAAA,CAAM,CAAC,GAAG,OAAO,KAAA;EACjC,EAAA,IAAI,MAAM,CAAC,CAAA,IAAK,KAAA,CAAM,CAAC,GAAG,OAAO,KAAA;EACjC,EAAA,IAAI,MAAM,CAAC,CAAA,IAAK,KAAA,CAAM,CAAC,GAAG,OAAO,KAAA;EACjC,EAAA,IAAI,MAAM,CAAC,CAAA,IAAK,KAAA,CAAM,CAAC,GAAG,OAAO,KAAA;EACjC,EAAA,OAAO,IAAA;EACX;EAEA,SAAS,UAAA,CAAW,CAAA,EAAqB,EAAA,EAAsB,EAAA,EAAsB;EACjF,EAAA,MAAM,EAAA,GAAM,CAAA,CAAE,CAAC,CAAA,GAAO,GAAG,CAAC,CAAA;EAC1B,EAAA,MAAM,EAAA,GAAM,CAAA,CAAE,CAAC,CAAA,GAAO,GAAG,CAAC,CAAA;EAC1B,EAAA,MAAM,EAAA,GAAM,CAAA,CAAE,CAAC,CAAA,GAAO,GAAG,CAAC,CAAA;EAC1B,EAAA,MAAM,EAAA,GAAM,CAAA,CAAE,CAAC,CAAA,GAAO,GAAG,CAAC,CAAA;EAC1B,EAAA,OAAQ,EAAA,GAAK,KAAK,EAAA,GAAK,EAAA,KAAO,KAAO,EAAA,GAAK,EAAA,IAAM,CAAA,IAAO,EAAA,GAAK,EAAA,IAAM,CAAA;EACtE;EAEA,SAAS,YAAA,CAAa,CAAA,EAAqB,EAAA,EAAsB,EAAA,EAAsB;EACnF,EAAA,OAAU,EAAA,CAAG,CAAC,CAAA,GAAO,CAAA,CAAE,CAAC,CAAA,KAAW,EAAA,CAAG,CAAC,CAAA,GAAO,EAAE,CAAC,CAAA,IAAW,CAAA,CAAE,CAAC,KAAQ,EAAA,CAAG,CAAC,CAAA,GAAO,EAAA,CAAG,CAAC,CAAA,KAAS,CAAA,CAAE,CAAC,IAAO,EAAA,CAAG,CAAC,CAAA,CAAA,IAAS,EAAA,CAAG,CAAC,CAAA,GAAO,EAAA,CAAG,CAAC,CAAA,CAAA,GAAQ,GAAG,CAAC,CAAA;EACrJ;EAGO,SAAS,kBAAA,CACZ,KAAA,EACA,KAAA,EACA,cAAA,GAA0B,KAAA,EACnB;EACP,EAAA,IAAI,MAAA,GAAS,KAAA;EACb,EAAA,KAAA,IAAS,IAAI,CAAA,EAAG,GAAA,GAAM,MAAM,MAAA,EAAQ,CAAA,GAAI,KAAK,CAAA,EAAA,EAAK;EAC9C,IAAA,MAAM,IAAA,GAAO,MAAM,CAAC,CAAA;EACpB,IAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,IAAA,GAAO,IAAA,CAAK,MAAA,EAAQ,CAAA,GAAI,IAAA,GAAO,CAAA,EAAG,CAAA,GAAI,IAAA,EAAM,CAAA,GAAI,CAAA,EAAA,EAAK;EACjE,MAAA,MAAM,EAAA,GAAK,KAAK,CAAC,CAAA;EACjB,MAAA,MAAM,EAAA,GAAK,KAAK,CAAC,CAAA;EACjB,MAAA,IAAI,UAAA,CAAW,KAAA,EAAO,EAAA,EAAI,EAAE,GAAG,OAAO,cAAA;EACtC,MAAA,IAAI,aAAa,KAAA,EAAO,EAAA,EAAI,EAAE,CAAA,WAAY,CAAC,MAAA;EAAA,IAC/C;EAAA,EACJ;EACA,EAAA,OAAO,MAAA;EACX;EAEA,SAAS,IAAA,CAAK,IAAsB,EAAA,EAAsB;EACtD,EAAA,OAAQ,EAAA,CAAG,CAAC,CAAA,GAAO,EAAA,CAAG,CAAC,IAAO,EAAA,CAAG,CAAC,CAAA,GAAO,EAAA,CAAG,CAAC,CAAA;EACjD;EAGA,SAAS,QAAA,CAAS,EAAA,EAAsB,EAAA,EAAsB,EAAA,EAAsB,EAAA,EAAsB;EAEtG,EAAA,MAAM,EAAA,GAAM,EAAA,CAAG,CAAC,CAAA,GAAO,GAAG,CAAC,CAAA;EAC3B,EAAA,MAAM,EAAA,GAAM,EAAA,CAAG,CAAC,CAAA,GAAO,GAAG,CAAC,CAAA;EAC3B,EAAA,MAAM,EAAA,GAAM,EAAA,CAAG,CAAC,CAAA,GAAO,GAAG,CAAC,CAAA;EAC3B,EAAA,MAAM,EAAA,GAAM,EAAA,CAAG,CAAC,CAAA,GAAO,GAAG,CAAC,CAAA;EAC3B,EAAA,MAAM,EAAA,GAAM,EAAA,CAAG,CAAC,CAAA,GAAO,GAAG,CAAC,CAAA;EAC3B,EAAA,MAAM,EAAA,GAAM,EAAA,CAAG,CAAC,CAAA,GAAO,GAAG,CAAC,CAAA;EAC3B,EAAA,MAAM,IAAA,GAAO,EAAA,GAAK,EAAA,GAAK,EAAA,GAAK,EAAA;EAC5B,EAAA,MAAM,IAAA,GAAO,EAAA,GAAK,EAAA,GAAK,EAAA,GAAK,EAAA;EAC5B,EAAA,IAAK,IAAA,GAAO,KAAK,IAAA,GAAO,CAAA,IAAO,OAAO,CAAA,IAAK,IAAA,GAAO,GAAI,OAAO,IAAA;EAC7D,EAAA,OAAO,KAAA;EACX;EAEO,SAAS,uBAAA,CACZ,CAAA,EACA,CAAA,EACA,CAAA,EACA,CAAA,EACO;EAIP,EAAA,MAAM,OAAA,GAAU,CAAE,CAAA,CAAE,CAAC,CAAA,GAAO,CAAA,CAAE,CAAC,CAAA,EAAM,CAAA,CAAE,CAAC,CAAA,GAAO,CAAA,CAAE,CAAC,CAAG,CAAA;EACrD,EAAA,MAAM,OAAA,GAAU,CAAE,CAAA,CAAE,CAAC,CAAA,GAAO,CAAA,CAAE,CAAC,CAAA,EAAM,CAAA,CAAE,CAAC,CAAA,GAAO,CAAA,CAAE,CAAC,CAAG,CAAA;EACrD,EAAA,IAAI,IAAA,CAAK,OAAA,EAAS,OAAO,CAAA,KAAM,GAAG,OAAO,KAAA;EAKzC,EAAA,IAAI,QAAA,CAAS,CAAA,EAAG,CAAA,EAAG,CAAA,EAAG,CAAC,CAAA,IAAK,QAAA,CAAS,CAAA,EAAG,CAAA,EAAG,CAAA,EAAG,CAAC,CAAA,EAAG,OAAO,IAAA;EACzD,EAAA,OAAO,KAAA;EACX;;ECvJO,SAAS,iBAAiB,GAAA,EAAqB;EAClD,EAAA,OAAA,CAAQ,MAAM,GAAA,IAAO,GAAA;EACzB;EAEO,SAAS,iBAAiB,GAAA,EAAqB;EAClD,EAAA,OAAA,CAAQ,MAAO,GAAA,GAAM,IAAA,CAAK,EAAA,GAAK,IAAA,CAAK,IAAI,IAAA,CAAK,GAAA,CAAI,IAAA,CAAK,EAAA,GAAK,IAAI,GAAA,GAAM,IAAA,CAAK,EAAA,GAAK,GAAG,CAAC,CAAA,IAAM,GAAA;EAC7F;EAEO,SAAS,iBAAiB,CAAA,EAAmB;EAChD,EAAA,OAAO,IAAI,GAAA,GAAM,GAAA;EACrB;EAEO,SAAS,iBAAiB,CAAA,EAAmB;EAChD,EAAA,MAAM,EAAA,GAAK,MAAM,CAAA,GAAI,GAAA;EACrB,EAAA,OAAO,GAAA,GAAM,IAAA,CAAK,EAAA,GAAK,IAAA,CAAK,IAAA,CAAK,IAAA,CAAK,GAAA,CAAI,EAAA,GAAK,IAAA,CAAK,EAAA,GAAK,GAAG,CAAC,CAAA,GAAI,EAAA;EACrE;;ECAA,MAAMO,QAAA,GAAS,IAAA;EAEf,SAAS,kBAAA,CAAmB,GAAqB,SAAA,EAA4B;EACzE,EAAA,MAAM,CAAA,GAAI,gBAAA,CAAiB,CAAA,CAAE,CAAC,CAAC,CAAA;EAC/B,EAAA,MAAM,CAAA,GAAI,gBAAA,CAAiB,CAAA,CAAE,CAAC,CAAC,CAAA;EAC/B,EAAA,MAAM,WAAA,GAAc,IAAA,CAAK,GAAA,CAAI,CAAA,EAAG,UAAU,CAAC,CAAA;EAC3C,EAAA,OAAO,CAAC,IAAA,CAAK,KAAA,CAAM,CAAA,GAAI,WAAA,GAAcA,QAAM,CAAA,EAAG,IAAA,CAAK,KAAA,CAAM,CAAA,GAAI,WAAA,GAAcA,QAAM,CAAC,CAAA;EACtF;EAEA,SAAS,mBAAA,CAAoB,OAAyB,QAAA,EAAiD;EACnG,EAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,QAAA,CAAS,QAAQ,CAAA,EAAA,EAAK;EACtC,IAAA,IAAI,mBAAmB,KAAA,EAAO,QAAA,CAAS,CAAC,CAAC,GAAG,OAAO,IAAA;EAAA,EACvD;EACA,EAAA,OAAO,KAAA;EACX;EAEA,SAAS,oBAAA,CAAqB,EAAA,EAAsB,EAAA,EAAsB,OAAA,EAAyC;EAC/G,EAAA,KAAA,MAAW,QAAQ,OAAA,EAAS;EAExB,IAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,GAAA,GAAM,IAAA,CAAK,MAAA,EAAQ,CAAA,GAAI,GAAA,GAAM,CAAA,EAAG,CAAA,GAAI,GAAA,EAAK,CAAA,GAAI,CAAA,EAAA,EAAK;EAC9D,MAAA,MAAM,EAAA,GAAK,KAAK,CAAC,CAAA;EACjB,MAAA,MAAM,EAAA,GAAK,KAAK,CAAC,CAAA;EACjB,MAAA,IAAI,uBAAA,CAAwB,EAAA,EAAI,EAAA,EAAI,EAAA,EAAI,EAAE,CAAA,EAAG;EACzC,QAAA,OAAO,IAAA;EAAA,MACX;EAAA,IACJ;EAAA,EACJ;EACA,EAAA,OAAO,KAAA;EACX;EAEA,SAAS,uBAAA,CAAwB,MAA+B,OAAA,EAAyC;EAErG,EAAA,KAAA,IAAS,IAAI,CAAA,EAAG,CAAA,GAAI,IAAA,CAAK,MAAA,EAAQ,EAAE,CAAA,EAAG;EAClC,IAAA,IAAI,CAAC,kBAAA,CAAmB,IAAA,CAAK,CAAC,CAAA,EAAG,OAAO,CAAA,EAAG;EACvC,MAAA,OAAO,KAAA;EAAA,IACX;EAAA,EACJ;EAGA,EAAA,KAAA,IAAS,IAAI,CAAA,EAAG,CAAA,GAAI,KAAK,MAAA,GAAS,CAAA,EAAG,EAAE,CAAA,EAAG;EACtC,IAAA,IAAI,oBAAA,CAAqB,KAAK,CAAC,CAAA,EAAG,KAAK,CAAA,GAAI,CAAC,CAAA,EAAG,OAAO,CAAA,EAAG;EACrD,MAAA,OAAO,KAAA;EAAA,IACX;EAAA,EACJ;EACA,EAAA,OAAO,IAAA;EACX;EAEA,SAAS,wBAAA,CAAyB,MAA+B,QAAA,EAAiD;EAC9G,EAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,QAAA,CAAS,QAAQ,CAAA,EAAA,EAAK;EACtC,IAAA,IAAI,wBAAwB,IAAA,EAAM,QAAA,CAAS,CAAC,CAAC,GAAG,OAAO,IAAA;EAAA,EAC3D;EACA,EAAA,OAAO,KAAA;EACX;EAEA,SAAS,cAAA,CAAe,WAAA,EAA6C,IAAA,EAAY,SAAA,EAAoD;EACjI,EAAA,MAAM,UAAkC,EAAC;EACzC,EAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,WAAA,CAAY,QAAQ,CAAA,EAAA,EAAK;EACzC,IAAA,MAAM,OAAmB,EAAC;EAC1B,IAAA,KAAA,IAAS,IAAI,CAAA,EAAG,CAAA,GAAI,YAAY,CAAC,CAAA,CAAE,QAAQ,CAAA,EAAA,EAAK;EAC5C,MAAA,MAAM,QAAQ,kBAAA,CAAmB,WAAA,CAAY,CAAC,CAAA,CAAE,CAAC,GAAG,SAAS,CAAA;EAC7D,MAAA,UAAA,CAAW,MAAM,KAAK,CAAA;EACtB,MAAA,IAAA,CAAK,KAAK,KAAK,CAAA;EAAA,IACnB;EACA,IAAA,OAAA,CAAQ,KAAK,IAAI,CAAA;EAAA,EACrB;EAEA,EAAA,OAAO,OAAA;EACX;EAEA,SAAS,eAAA,CAAgB,WAAA,EAAoD,IAAA,EAAY,SAAA,EAA2D;EAChJ,EAAA,MAAM,WAA0C,EAAC;EACjD,EAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,WAAA,CAAY,QAAQ,CAAA,EAAA,EAAK;EACzC,IAAA,MAAM,UAAU,cAAA,CAAe,WAAA,CAAY,CAAC,CAAA,EAAG,MAAM,SAAS,CAAA;EAC9D,IAAA,QAAA,CAAS,KAAK,OAAO,CAAA;EAAA,EACzB;EAEA,EAAA,OAAO,QAAA;EACX;EAEA,SAAS,WAAA,CAAY,CAAA,EAAqB,IAAA,EAAY,QAAA,EAAyB,SAAA,EAAmB;EAC9F,EAAA,IAAI,CAAA,CAAE,CAAC,CAAA,GAAI,QAAA,CAAS,CAAC,CAAA,IAAK,CAAA,CAAE,CAAC,CAAA,GAAI,QAAA,CAAS,CAAC,CAAA,EAAG;EAC1C,IAAA,MAAM,gBAAgB,SAAA,GAAY,GAAA;EAClC,IAAA,IAAI,QAAS,CAAA,CAAE,CAAC,CAAA,GAAI,QAAA,CAAS,CAAC,CAAA,GAAI,aAAA,GAAiB,CAAC,SAAA,GAAa,SAAS,CAAC,CAAA,GAAI,EAAE,CAAC,CAAA,GAAI,gBAAiB,SAAA,GAAY,CAAA;EACnH,IAAA,IAAI,UAAU,CAAA,EAAG;EACb,MAAA,KAAA,GAAS,EAAE,CAAC,CAAA,GAAI,QAAA,CAAS,CAAC,IAAI,aAAA,GAAiB,CAAC,SAAA,GAAa,QAAA,CAAS,CAAC,CAAA,GAAI,CAAA,CAAE,CAAC,CAAA,GAAI,gBAAiB,SAAA,GAAY,CAAA;EAAA,IACnH;EACA,IAAA,CAAA,CAAE,CAAC,CAAA,IAAK,KAAA;EAAA,EACZ;EACA,EAAA,UAAA,CAAW,MAAM,CAAC,CAAA;EACtB;EAEA,SAAS,UAAU,IAAA,EAAY;EAC3B,EAAA,IAAA,CAAK,CAAC,CAAA,GAAI,IAAA,CAAK,CAAC,CAAA,GAAI,QAAA;EACpB,EAAA,IAAA,CAAK,CAAC,CAAA,GAAI,IAAA,CAAK,CAAC,CAAA,GAAI,CAAA,QAAA;EACxB;EAEA,SAAS,aAAA,CAAc,QAAA,EAAkD,SAAA,EAAiB,QAAA,EAAyB,SAAA,EAA6C;EAC5J,EAAA,MAAM,YAAY,IAAA,CAAK,GAAA,CAAI,CAAA,EAAG,SAAA,CAAU,CAAC,CAAA,GAAIA,QAAA;EAC7C,EAAA,MAAM,SAAS,CAAC,SAAA,CAAU,IAAIA,QAAA,EAAQ,SAAA,CAAU,IAAIA,QAAM,CAAA;EAC1D,EAAA,MAAM,aAA8B,EAAC;EACrC,EAAA,IAAI,CAAC,UAAU,OAAO,UAAA;EACtB,EAAA,KAAA,MAAW,UAAU,QAAA,EAAU;EAC3B,IAAA,KAAA,MAAW,SAAS,MAAA,EAAQ;EACxB,MAAA,MAAM,CAAA,GAAI,CAAC,KAAA,CAAM,CAAA,GAAI,MAAA,CAAO,CAAC,CAAA,EAAG,KAAA,CAAM,CAAA,GAAI,MAAA,CAAO,CAAC,CAAC,CAAA;EACnD,MAAA,WAAA,CAAY,CAAA,EAAG,SAAA,EAAW,QAAA,EAAU,SAAS,CAAA;EAC7C,MAAA,UAAA,CAAW,KAAK,CAAC,CAAA;EAAA,IACrB;EAAA,EACJ;EAEA,EAAA,OAAO,UAAA;EACX;EAEA,SAAS,YAAA,CAAa,QAAA,EAAkD,QAAA,EAAgB,QAAA,EAAyB,SAAA,EAA4D;EACzK,EAAA,MAAM,YAAY,IAAA,CAAK,GAAA,CAAI,CAAA,EAAG,SAAA,CAAU,CAAC,CAAA,GAAIA,QAAA;EAC7C,EAAA,MAAM,SAAS,CAAC,SAAA,CAAU,IAAIA,QAAA,EAAQ,SAAA,CAAU,IAAIA,QAAM,CAAA;EAC1D,EAAA,MAAM,YAA4C,EAAC;EACnD,EAAA,IAAI,CAAC,UAAU,OAAO,SAAA;EACtB,EAAA,KAAA,MAAW,QAAQ,QAAA,EAAU;EACzB,IAAA,MAAM,WAAW,EAAC;EAClB,IAAA,KAAA,MAAW,SAAS,IAAA,EAAM;EACtB,MAAA,MAAM,CAAA,GAAsB,CAAC,KAAA,CAAM,CAAA,GAAI,MAAA,CAAO,CAAC,CAAA,EAAG,KAAA,CAAM,CAAA,GAAI,MAAA,CAAO,CAAC,CAAC,CAAA;EACrE,MAAA,UAAA,CAAW,UAAU,CAAC,CAAA;EACtB,MAAA,QAAA,CAAS,KAAK,CAAC,CAAA;EAAA,IACnB;EAEA,IAAA,SAAA,CAAU,KAAK,QAAQ,CAAA;EAAA,EAC3B;EACA,EAAA,IAAI,SAAS,CAAC,CAAA,GAAI,SAAS,CAAC,CAAA,IAAK,YAAY,CAAA,EAAG;EAC5C,IAAA,SAAA,CAAU,QAAQ,CAAA;EAClB,IAAA,KAAA,MAAW,QAAQ,SAAA,EAAW;EAC1B,MAAA,KAAA,MAAW,KAAK,IAAA,EAAM;EAClB,QAAA,WAAA,CAAY,CAAA,EAAG,QAAA,EAAU,QAAA,EAAU,SAAS,CAAA;EAAA,MAChD;EAAA,IACJ;EAAA,EACJ;EACA,EAAA,OAAO,SAAA;EACX;EAEA,SAAS,oBAAA,CAAqB,KAAwB,eAAA,EAA2C;EAC7F,EAAA,MAAM,SAAA,GAAkB,CAAC,QAAA,EAAU,QAAA,EAAU,WAAW,CAAA,QAAS,CAAA;EACjE,EAAA,MAAM,QAAA,GAAiB,CAAC,QAAA,EAAU,QAAA,EAAU,WAAW,CAAA,QAAS,CAAA;EAEhE,EAAA,MAAM,SAAA,GAAY,IAAI,WAAA,EAAY;EAClC,EAAA,IAAI,CAAC,SAAA,EAAW;EACZ,IAAA,OAAO,KAAA;EAAA,EACX;EAEA,EAAA,IAAI,eAAA,CAAgB,SAAS,SAAA,EAAW;EACpC,IAAA,MAAM,WAAA,GAAc,cAAA,CAAe,eAAA,CAAgB,WAAA,EAAa,UAAU,SAAS,CAAA;EACnF,IAAA,MAAM,aAAa,aAAA,CAAc,GAAA,CAAI,UAAS,EAAG,SAAA,EAAW,UAAU,SAAS,CAAA;EAC/E,IAAA,IAAI,CAAC,YAAA,CAAa,SAAA,EAAW,QAAQ,GAAG,OAAO,KAAA;EAE/C,IAAA,KAAA,MAAW,SAAS,UAAA,EAAY;EAC5B,MAAA,IAAI,CAAC,kBAAA,CAAmB,KAAA,EAAO,WAAW,GAAG,OAAO,KAAA;EAAA,IACxD;EAAA,EACJ;EACA,EAAA,IAAI,eAAA,CAAgB,SAAS,cAAA,EAAgB;EACzC,IAAA,MAAM,YAAA,GAAe,eAAA,CAAgB,eAAA,CAAgB,WAAA,EAAa,UAAU,SAAS,CAAA;EACrF,IAAA,MAAM,aAAa,aAAA,CAAc,GAAA,CAAI,UAAS,EAAG,SAAA,EAAW,UAAU,SAAS,CAAA;EAC/E,IAAA,IAAI,CAAC,YAAA,CAAa,SAAA,EAAW,QAAQ,GAAG,OAAO,KAAA;EAE/C,IAAA,KAAA,MAAW,SAAS,UAAA,EAAY;EAC5B,MAAA,IAAI,CAAC,mBAAA,CAAoB,KAAA,EAAO,YAAY,GAAG,OAAO,KAAA;EAAA,IAC1D;EAAA,EACJ;EAEA,EAAA,OAAO,IAAA;EACX;EAEA,SAAS,mBAAA,CAAoB,KAAwB,eAAA,EAA2C;EAC5F,EAAA,MAAM,QAAA,GAAiB,CAAC,QAAA,EAAU,QAAA,EAAU,WAAW,CAAA,QAAS,CAAA;EAChE,EAAA,MAAM,QAAA,GAAiB,CAAC,QAAA,EAAU,QAAA,EAAU,WAAW,CAAA,QAAS,CAAA;EAEhE,EAAA,MAAM,SAAA,GAAY,IAAI,WAAA,EAAY;EAClC,EAAA,IAAI,CAAC,SAAA,EAAW;EACZ,IAAA,OAAO,KAAA;EAAA,EACX;EAEA,EAAA,IAAI,eAAA,CAAgB,SAAS,SAAA,EAAW;EACpC,IAAA,MAAM,WAAA,GAAc,cAAA,CAAe,eAAA,CAAgB,WAAA,EAAa,UAAU,SAAS,CAAA;EACnF,IAAA,MAAM,YAAY,YAAA,CAAa,GAAA,CAAI,UAAS,EAAG,QAAA,EAAU,UAAU,SAAS,CAAA;EAC5E,IAAA,IAAI,CAAC,YAAA,CAAa,QAAA,EAAU,QAAQ,GAAG,OAAO,KAAA;EAE9C,IAAA,KAAA,MAAW,QAAQ,SAAA,EAAW;EAC1B,MAAA,IAAI,CAAC,uBAAA,CAAwB,IAAA,EAAM,WAAW,GAAG,OAAO,KAAA;EAAA,IAC5D;EAAA,EACJ;EACA,EAAA,IAAI,eAAA,CAAgB,SAAS,cAAA,EAAgB;EACzC,IAAA,MAAM,YAAA,GAAe,eAAA,CAAgB,eAAA,CAAgB,WAAA,EAAa,UAAU,SAAS,CAAA;EACrF,IAAA,MAAM,YAAY,YAAA,CAAa,GAAA,CAAI,UAAS,EAAG,QAAA,EAAU,UAAU,SAAS,CAAA;EAC5E,IAAA,IAAI,CAAC,YAAA,CAAa,QAAA,EAAU,QAAQ,GAAG,OAAO,KAAA;EAE9C,IAAA,KAAA,MAAW,QAAQ,SAAA,EAAW;EAC1B,MAAA,IAAI,CAAC,wBAAA,CAAyB,IAAA,EAAM,YAAY,GAAG,OAAO,KAAA;EAAA,IAC9D;EAAA,EACJ;EACA,EAAA,OAAO,IAAA;EACX;EAEA,MAAM,MAAA,CAA6B;EAAA,EAK/B,WAAA,CAAY,SAA0B,UAAA,EAA6B;EAC/D,IAAA,IAAA,CAAK,IAAA,GAAO,WAAA;EACZ,IAAA,IAAA,CAAK,OAAA,GAAU,OAAA;EACf,IAAA,IAAA,CAAK,UAAA,GAAa,UAAA;EAAA,EACtB;EAAA,EAEA,OAAO,KAAA,CAAM,IAAA,EAA8B,OAAA,EAAwC;EAC/E,IAAA,IAAI,KAAK,MAAA,KAAW,CAAA;EAChB,MAAA,OAAO,QAAQ,KAAA,CAAM,CAAA,6DAAA,EAAgE,IAAA,CAAK,MAAA,GAAS,CAAC,CAAA,SAAA,CAAW,CAAA;EACnH,IAAA,IAAI,OAAA,CAAQ,IAAA,CAAK,CAAC,CAAC,CAAA,EAAG;EAClB,MAAA,MAAM,OAAA,GAAU,KAAK,CAAC,CAAA;EACtB,MAAA,IAAI,OAAA,CAAQ,SAAS,mBAAA,EAAqB;EACtC,QAAA,KAAA,IAAS,IAAI,CAAA,EAAG,CAAA,GAAI,QAAQ,QAAA,CAAS,MAAA,EAAQ,EAAE,CAAA,EAAG;EAC9C,UAAA,MAAM,IAAA,GAAO,OAAA,CAAQ,QAAA,CAAS,CAAC,EAAE,QAAA,CAAS,IAAA;EAC1C,UAAA,IAAI,IAAA,KAAS,SAAA,IAAa,IAAA,KAAS,cAAA,EAAgB;EAC/C,YAAA,OAAO,IAAI,MAAA,CAAO,OAAA,EAAS,QAAQ,QAAA,CAAS,CAAC,EAAE,QAA2B,CAAA;EAAA,UAC9E;EAAA,QACJ;EAAA,MACJ,CAAA,MAAA,IAAW,OAAA,CAAQ,IAAA,KAAS,SAAA,EAAW;EACnC,QAAA,MAAM,IAAA,GAAO,QAAQ,QAAA,CAAS,IAAA;EAC9B,QAAA,IAAI,IAAA,KAAS,SAAA,IAAa,IAAA,KAAS,cAAA,EAAgB;EAC/C,UAAA,OAAO,IAAI,MAAA,CAAO,OAAA,EAAS,OAAA,CAAQ,QAAQ,CAAA;EAAA,QAC/C;EAAA,MACJ,WAAW,OAAA,CAAQ,IAAA,KAAS,SAAA,IAAa,OAAA,CAAQ,SAAS,cAAA,EAAgB;EACtE,QAAA,OAAO,IAAI,MAAA,CAAO,OAAA,EAAS,OAAO,CAAA;EAAA,MACtC;EAAA,IACJ;EACA,IAAA,OAAO,OAAA,CAAQ,MAAM,CAAA,sFAAA,CAAwF,CAAA;EAAA,EACjH;EAAA,EAEA,SAAS,GAAA,EAAiC;EACtC,IAAA,IAAI,IAAI,QAAA,EAAS,IAAK,QAAQ,GAAA,CAAI,WAAA,MAAiB,IAAA,EAAM;EACrD,MAAA,IAAI,GAAA,CAAI,YAAA,EAAa,KAAM,OAAA,EAAS;EAChC,QAAA,OAAO,oBAAA,CAAqB,GAAA,EAAK,IAAA,CAAK,UAAU,CAAA;EAAA,MACpD,CAAA,MAAA,IAAW,GAAA,CAAI,YAAA,EAAa,KAAM,YAAA,EAAc;EAC5C,QAAA,OAAO,mBAAA,CAAoB,GAAA,EAAK,IAAA,CAAK,UAAU,CAAA;EAAA,MACnD;EAAA,IACJ;EACA,IAAA,OAAO,KAAA;EAAA,EACX;EAAA,EAEA,SAAA,GAAY;EAAA,EAAC;EAAA,EAEb,aAAA,GAAyB;EACrB,IAAA,OAAO,IAAA;EAAA,EACX;EAAA,EAEA,SAAA,GAAkC;EAC9B,IAAA,OAAO,CAAC,QAAA,EAAU,IAAA,CAAK,OAAO,CAAA;EAAA,EAClC;EAEJ;;EC7Qe,MAAM,SAAS,CAAC;EAC/B,IAAI,WAAW,CAAC,IAAI,GAAG,EAAE,EAAE,OAAO,GAAG,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,EAAE;EAC7E,QAAQ,IAAI,CAAC,IAAI,GAAG,IAAI;EACxB,QAAQ,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM;EACtC,QAAQ,IAAI,CAAC,OAAO,GAAG,OAAO;;EAE9B,QAAQ,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE;EAC7B,YAAY,KAAK,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;EAC3E,QAAQ;EACR,IAAI;;EAEJ,IAAI,IAAI,CAAC,IAAI,EAAE;EACf,QAAQ,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC;EAC5B,QAAQ,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;EAC/B,IAAI;;EAEJ,IAAI,GAAG,GAAG;EACV,QAAQ,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,OAAO,SAAS;;EAE/C,QAAQ,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;EAChC,QAAQ,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE;;EAEtC,QAAQ,IAAI,EAAE,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE;EAC/B,YAAY,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,MAAM;EACjC,YAAY,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;EACzB,QAAQ;;EAER,QAAQ,OAAO,GAAG;EAClB,IAAI;;EAEJ,IAAI,IAAI,GAAG;EACX,QAAQ,OAAO,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;EAC3B,IAAI;;EAEJ,IAAI,GAAG,CAAC,GAAG,EAAE;EACb,QAAQ,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,GAAG,IAAI;EACpC,QAAQ,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC;;EAE9B,QAAQ,OAAO,GAAG,GAAG,CAAC,EAAE;EACxB,YAAY,MAAM,MAAM,GAAG,CAAC,GAAG,GAAG,CAAC,KAAK,CAAC;EACzC,YAAY,MAAM,OAAO,GAAG,IAAI,CAAC,MAAM,CAAC;EACxC,YAAY,IAAI,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,IAAI,CAAC,EAAE;EAC7C,YAAY,IAAI,CAAC,GAAG,CAAC,GAAG,OAAO;EAC/B,YAAY,GAAG,GAAG,MAAM;EACxB,QAAQ;;EAER,QAAQ,IAAI,CAAC,GAAG,CAAC,GAAG,IAAI;EACxB,IAAI;;EAEJ,IAAI,KAAK,CAAC,GAAG,EAAE;EACf,QAAQ,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,GAAG,IAAI;EACpC,QAAQ,MAAM,UAAU,GAAG,IAAI,CAAC,MAAM,IAAI,CAAC;EAC3C,QAAQ,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC;;EAE9B,QAAQ,OAAO,GAAG,GAAG,UAAU,EAAE;EACjC,YAAY,IAAI,SAAS,GAAG,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC;EAC3C,YAAY,MAAM,KAAK,GAAG,SAAS,GAAG,CAAC;;EAEvC,YAAY,IAAI,KAAK,GAAG,IAAI,CAAC,MAAM,IAAI,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC,GAAG,CAAC,EAAE;EAClF,gBAAgB,SAAS,GAAG,KAAK;EACjC,YAAY;EACZ,YAAY,IAAI,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,EAAE;;EAErD,YAAY,IAAI,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC;EACvC,YAAY,GAAG,GAAG,SAAS;EAC3B,QAAQ;;EAER,QAAQ,IAAI,CAAC,GAAG,CAAC,GAAG,IAAI;EACxB,IAAI;EACJ;;ACvDA,eAAe,IAAA;;ECNf,MAAM,EAAA,GAAK,QAAA;EACX,MAAM,KAAK,CAAA,GAAI,aAAA;EACf,MAAM,EAAA,GAAK,MAAM,CAAA,GAAI,EAAA,CAAA;EACrB,MAAM,GAAA,GAAM,KAAK,EAAA,GAAK,GAAA;EAEtB,SAAS,YAAY,GAAA,EAA+B;EAChD,EAAA,MAAM,CAAA,GAAI,MAAM,EAAA,GAAK,GAAA;EACrB,EAAA,MAAM,MAAA,GAAS,IAAA,CAAK,GAAA,CAAI,GAAA,GAAM,GAAG,CAAA;EACjC,EAAA,MAAM,EAAA,GAAK,CAAA,IAAK,CAAA,GAAI,EAAA,IAAM,IAAI,MAAA,GAAS,MAAA,CAAA,CAAA;EACvC,EAAA,MAAM,CAAA,GAAI,IAAA,CAAK,IAAA,CAAK,EAAE,CAAA;EACtB,EAAA,OAAO,CAAC,IAAI,CAAA,GAAI,MAAA,EAAQ,IAAI,CAAA,GAAI,EAAA,IAAM,IAAI,EAAA,CAAG,CAAA;EACjD;EAEA,SAAS,QAAQ,GAAA,EAAqB;EAClC,EAAA,OAAO,GAAA,GAAM,MAAM,GAAA,IAAO,GAAA;EAC1B,EAAA,OAAO,GAAA,GAAM,KAAK,GAAA,IAAO,GAAA;EACzB,EAAA,OAAO,GAAA;EACX;EAEA,SAAS,aAAA,CAAc,CAAA,EAAqB,CAAA,EAAqB,EAAA,EAAY,EAAA,EAAoB;EAC7F,EAAA,MAAM,EAAA,GAAK,QAAQ,CAAA,CAAE,CAAC,IAAI,CAAA,CAAE,CAAC,CAAC,CAAA,GAAI,EAAA;EAClC,EAAA,MAAM,MAAM,CAAA,CAAE,CAAC,CAAA,GAAI,CAAA,CAAE,CAAC,CAAA,IAAK,EAAA;EAC3B,EAAA,OAAO,IAAA,CAAK,IAAA,CAAK,EAAA,GAAK,EAAA,GAAK,KAAK,EAAE,CAAA;EACtC;EAEA,SAAS,2BAAA,CAA4B,CAAA,EAAqB,CAAA,EAAqB,CAAA,EAAqB,IAAY,EAAA,EAAoB;EAChI,EAAA,IAAI,CAAA,GAAI,EAAE,CAAC,CAAA;EACX,EAAA,IAAI,CAAA,GAAI,EAAE,CAAC,CAAA;EACX,EAAA,IAAI,KAAK,OAAA,CAAQ,CAAA,CAAE,CAAC,CAAA,GAAI,CAAC,CAAA,GAAI,EAAA;EAC7B,EAAA,IAAI,EAAA,GAAA,CAAM,CAAA,CAAE,CAAC,CAAA,GAAI,CAAA,IAAK,EAAA;EAEtB,EAAA,IAAI,EAAA,KAAO,CAAA,IAAK,EAAA,KAAO,CAAA,EAAG;EACtB,IAAA,MAAM,KAAK,OAAA,CAAQ,CAAA,CAAE,CAAC,CAAA,GAAI,CAAC,CAAA,GAAI,EAAA,GAAK,EAAA,GAAA,CAAM,CAAA,CAAE,CAAC,CAAA,GAAI,CAAA,IAAK,KAAK,EAAA,KAAO,EAAA,GAAK,KAAK,EAAA,GAAK,EAAA,CAAA;EACjF,IAAA,IAAI,IAAI,CAAA,EAAG;EACP,MAAA,CAAA,GAAI,EAAE,CAAC,CAAA;EACP,MAAA,CAAA,GAAI,EAAE,CAAC,CAAA;EAAA,IACX,CAAA,MAAA,IAAW,IAAI,CAAA,EAAG;EACd,MAAA,CAAA,IAAM,KAAK,EAAA,GAAM,CAAA;EACjB,MAAA,CAAA,IAAM,KAAK,EAAA,GAAM,CAAA;EAAA,IACrB;EAAA,EACJ;EAEA,EAAA,EAAA,GAAK,OAAA,CAAQ,CAAA,CAAE,CAAC,CAAA,GAAI,CAAC,CAAA,GAAI,EAAA;EACzB,EAAA,EAAA,GAAA,CAAM,CAAA,CAAE,CAAC,CAAA,GAAI,CAAA,IAAK,EAAA;EAClB,EAAA,OAAO,IAAA,CAAK,IAAA,CAAK,EAAA,GAAK,EAAA,GAAK,KAAK,EAAE,CAAA;EACtC;EAEA,SAAS,gBAAA,CAAiB,IAAA,EAA+B,CAAA,EAAqB,EAAA,EAAY,EAAA,EAA8B;EACpH,EAAA,IAAI,OAAA,GAAU,QAAA;EACd,EAAA,IAAI,IAAA,GAAO,IAAA,CAAK,CAAC,CAAA,CAAE,CAAC,CAAA;EACpB,EAAA,IAAI,IAAA,GAAO,IAAA,CAAK,CAAC,CAAA,CAAE,CAAC,CAAA;EAEpB,EAAA,KAAA,IAAS,IAAI,CAAA,EAAG,CAAA,GAAI,IAAA,CAAK,MAAA,GAAS,GAAG,CAAA,EAAA,EAAK;EACtC,IAAA,IAAI,CAAA,GAAI,IAAA,CAAK,CAAC,CAAA,CAAE,CAAC,CAAA;EACjB,IAAA,IAAI,CAAA,GAAI,IAAA,CAAK,CAAC,CAAA,CAAE,CAAC,CAAA;EACjB,IAAA,IAAI,EAAA,GAAK,QAAQ,IAAA,CAAK,CAAA,GAAI,CAAC,CAAA,CAAE,CAAC,CAAA,GAAI,CAAC,CAAA,GAAI,EAAA;EACvC,IAAA,IAAI,MAAM,IAAA,CAAK,CAAA,GAAI,CAAC,CAAA,CAAE,CAAC,IAAI,CAAA,IAAK,EAAA;EAChC,IAAA,IAAI,CAAA,GAAI,CAAA;EAER,IAAA,IAAI,EAAA,KAAO,CAAA,IAAK,EAAA,KAAO,CAAA,EAAG;EACtB,MAAA,CAAA,GAAA,CAAK,QAAQ,CAAA,CAAE,CAAC,CAAA,GAAI,CAAC,IAAI,EAAA,GAAK,EAAA,GAAA,CAAM,CAAA,CAAE,CAAC,IAAI,CAAA,IAAK,EAAA,GAAK,EAAA,KAAO,EAAA,GAAK,KAAK,EAAA,GAAK,EAAA,CAAA;EAC3E,MAAA,IAAI,IAAI,CAAA,EAAG;EACP,QAAA,CAAA,GAAI,IAAA,CAAK,CAAA,GAAI,CAAC,CAAA,CAAE,CAAC,CAAA;EACjB,QAAA,CAAA,GAAI,IAAA,CAAK,CAAA,GAAI,CAAC,CAAA,CAAE,CAAC,CAAA;EAAA,MACrB,CAAA,MAAA,IAAW,IAAI,CAAA,EAAG;EACd,QAAA,CAAA,IAAM,KAAK,EAAA,GAAM,CAAA;EACjB,QAAA,CAAA,IAAM,KAAK,EAAA,GAAM,CAAA;EAAA,MACrB;EAAA,IACJ;EAEA,IAAA,EAAA,GAAK,OAAA,CAAQ,CAAA,CAAE,CAAC,CAAA,GAAI,CAAC,CAAA,GAAI,EAAA;EACzB,IAAA,EAAA,GAAA,CAAM,CAAA,CAAE,CAAC,CAAA,GAAI,CAAA,IAAK,EAAA;EAClB,IAAA,MAAM,MAAA,GAAS,EAAA,GAAK,EAAA,GAAK,EAAA,GAAK,EAAA;EAC9B,IAAA,IAAI,SAAS,OAAA,EAAS;EAClB,MAAA,OAAA,GAAU,MAAA;EACV,MAAA,IAAA,GAAO,CAAA;EACP,MAAA,IAAA,GAAO,CAAA;EAAA,IACX;EAAA,EACJ;EAEA,EAAA,OAAO,CAAC,MAAM,IAAI,CAAA;EACtB;EAmBA,SAAS,UAAA,CAAW,GAAa,CAAA,EAAa;EAC1C,EAAA,OAAO,CAAA,CAAE,OAAO,CAAA,CAAE,IAAA;EACtB;EAEA,MAAM,cAAA,GAAiB,GAAA;EACvB,MAAM,mBAAA,GAAsB,EAAA;EAE5B,SAAS,cAAc,IAAA,EAAY;EAC/B,EAAA,MAAM,WAAA,GAAc,CAAC,QAAA,EAAU,QAAA,EAAU,WAAW,CAAA,QAAS,CAAA;EAC7D,EAAA,IAAI,WAAA,CAAY,MAAA,KAAW,IAAA,CAAK,MAAA,EAAQ;EACpC,IAAA,OAAO,KAAA;EAAA,EACX;EACA,EAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,WAAA,CAAY,QAAQ,CAAA,EAAA,EAAK;EACzC,IAAA,IAAI,WAAA,CAAY,CAAC,CAAA,KAAM,IAAA,CAAK,CAAC,CAAA,EAAG;EAC5B,MAAA,OAAO,KAAA;EAAA,IACX;EAAA,EACJ;EACA,EAAA,OAAO,IAAA;EACX;EAEA,SAAS,aAAa,KAAA,EAAmB;EACrC,EAAA,OAAO,KAAA,CAAM,CAAC,CAAA,GAAI,KAAA,CAAM,CAAC,CAAA,GAAI,CAAA;EACjC;EAEA,SAAS,WAAA,CAAY,OAAmB,SAAA,EAAmB;EACvD,EAAA,MAAM,GAAA,GAAM,MAAM,CAAC,CAAA,IAAK,MAAM,CAAC,CAAA,IAAK,KAAA,CAAM,CAAC,CAAA,GAAI,SAAA;EAC/C,EAAA,IAAI,CAAC,GAAA,EAAK;EACN,IAAA,OAAA,CAAQ,KAAK,4CAA4C,CAAA;EAAA,EAC7D;EACA,EAAA,OAAO,GAAA;EACX;EAKA,SAAS,UAAA,CAAW,OAAmB,MAAA,EAAiB;EACpD,EAAA,IAAI,KAAA,CAAM,CAAC,CAAA,GAAI,KAAA,CAAM,CAAC,CAAA,EAAG,OAAO,CAAC,IAAA,EAAM,IAAI,CAAA;EAC3C,EAAA,MAAM,IAAA,GAAO,aAAa,KAAK,CAAA;EAC/B,EAAA,IAAI,MAAA,EAAQ;EACR,IAAA,IAAI,SAAS,CAAA,EAAG;EACZ,MAAA,OAAO,CAAC,OAAO,IAAI,CAAA;EAAA,IACvB;EACA,IAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,KAAA,CAAM,IAAA,GAAO,CAAC,CAAA;EACjC,IAAA,MAAM,MAAA,GAAqB,CAAC,KAAA,CAAM,CAAC,GAAG,KAAA,CAAM,CAAC,IAAI,KAAK,CAAA;EACtD,IAAA,MAAM,MAAA,GAAqB,CAAC,KAAA,CAAM,CAAC,IAAI,KAAA,EAAO,KAAA,CAAM,CAAC,CAAC,CAAA;EACtD,IAAA,OAAO,CAAC,QAAQ,MAAM,CAAA;EAAA,EAC1B,CAAA,MAAO;EACH,IAAA,IAAI,SAAS,CAAA,EAAG;EACZ,MAAA,OAAO,CAAC,OAAO,IAAI,CAAA;EAAA,IACvB;EACA,IAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,KAAA,CAAM,IAAA,GAAO,CAAC,CAAA,GAAI,CAAA;EACrC,IAAA,MAAM,MAAA,GAAqB,CAAC,KAAA,CAAM,CAAC,GAAG,KAAA,CAAM,CAAC,IAAI,KAAK,CAAA;EACtD,IAAA,MAAM,MAAA,GAAqB,CAAC,KAAA,CAAM,CAAC,IAAI,KAAA,GAAQ,CAAA,EAAG,KAAA,CAAM,CAAC,CAAC,CAAA;EAC1D,IAAA,OAAO,CAAC,QAAQ,MAAM,CAAA;EAAA,EAC1B;EACJ;EAEA,SAAS,OAAA,CAAQ,WAAoC,KAAA,EAAmB;EACpE,EAAA,MAAM,IAAA,GAAa,CAAC,QAAA,EAAU,QAAA,EAAU,WAAW,CAAA,QAAS,CAAA;EAC5D,EAAA,IAAI,CAAC,WAAA,CAAY,KAAA,EAAO,SAAA,CAAU,MAAM,GAAG,OAAO,IAAA;EAClD,EAAA,KAAA,IAAS,CAAA,GAAI,MAAM,CAAC,CAAA,EAAG,KAAK,KAAA,CAAM,CAAC,CAAA,EAAG,EAAE,CAAA,EAAG;EACvC,IAAA,UAAA,CAAW,IAAA,EAAM,SAAA,CAAU,CAAC,CAAC,CAAA;EAAA,EACjC;EACA,EAAA,OAAO,IAAA;EACX;EAEA,SAAS,eAAe,OAAA,EAAyC;EAC7D,EAAA,MAAM,IAAA,GAAa,CAAC,QAAA,EAAU,QAAA,EAAU,WAAW,CAAA,QAAS,CAAA;EAC5D,EAAA,KAAA,IAAS,IAAI,CAAA,EAAG,CAAA,GAAI,OAAA,CAAQ,MAAA,EAAQ,EAAE,CAAA,EAAG;EACrC,IAAA,KAAA,IAAS,CAAA,GAAI,GAAG,CAAA,GAAI,OAAA,CAAQ,CAAC,CAAA,CAAE,MAAA,EAAQ,EAAE,CAAA,EAAG;EACxC,MAAA,UAAA,CAAW,IAAA,EAAM,OAAA,CAAQ,CAAC,CAAA,CAAE,CAAC,CAAC,CAAA;EAAA,IAClC;EAAA,EACJ;EACA,EAAA,OAAO,IAAA;EACX;EAKA,SAAS,kBAAA,CAAmB,KAAA,EAAa,KAAA,EAAa,EAAA,EAAY,EAAA,EAAY;EAC1E,EAAA,IAAI,aAAA,CAAc,KAAK,CAAA,IAAK,aAAA,CAAc,KAAK,CAAA,EAAG;EAC9C,IAAA,OAAO,GAAA;EAAA,EACX;EACA,EAAA,IAAI,EAAA,GAAK,CAAA;EACT,EAAA,IAAI,EAAA,GAAK,CAAA;EAET,EAAA,IAAI,KAAA,CAAM,CAAC,CAAA,GAAI,KAAA,CAAM,CAAC,CAAA,EAAG;EACrB,IAAA,EAAA,GAAK,KAAA,CAAM,CAAC,CAAA,GAAI,KAAA,CAAM,CAAC,CAAA;EAAA,EAC3B;EAEA,EAAA,IAAI,KAAA,CAAM,CAAC,CAAA,GAAI,KAAA,CAAM,CAAC,CAAA,EAAG;EACrB,IAAA,EAAA,GAAK,KAAA,CAAM,CAAC,CAAA,GAAI,KAAA,CAAM,CAAC,CAAA;EAAA,EAC3B;EAEA,EAAA,IAAI,KAAA,CAAM,CAAC,CAAA,GAAI,KAAA,CAAM,CAAC,CAAA,EAAG;EACrB,IAAA,EAAA,GAAK,KAAA,CAAM,CAAC,CAAA,GAAI,KAAA,CAAM,CAAC,CAAA;EAAA,EAC3B;EAEA,EAAA,IAAI,KAAA,CAAM,CAAC,CAAA,GAAI,KAAA,CAAM,CAAC,CAAA,EAAG;EACrB,IAAA,EAAA,GAAK,KAAA,CAAM,CAAC,CAAA,GAAI,KAAA,CAAM,CAAC,CAAA;EAAA,EAC3B;EACA,EAAA,OAAO,aAAA,CAAc,CAAC,CAAA,EAAK,CAAG,CAAA,EAAG,CAAC,EAAA,EAAI,EAAE,CAAA,EAAG,EAAA,EAAI,EAAE,CAAA;EACrD;EAEO,SAAS,cAAA,CAAe,KAAA,EAAc,SAAA,EAA4B,MAAA,GAAiB,MAAA,EAA0B;EAChH,EAAA,MAAM,WAAA,GAAc,IAAA,CAAK,GAAA,CAAI,CAAA,EAAG,UAAU,CAAC,CAAA;EAC3C,EAAA,MAAM,CAAA,GAAA,CAAK,KAAA,CAAM,CAAA,GAAI,MAAA,GAAS,UAAU,CAAA,IAAK,WAAA;EAC7C,EAAA,MAAM,CAAA,GAAA,CAAK,KAAA,CAAM,CAAA,GAAI,MAAA,GAAS,UAAU,CAAA,IAAK,WAAA;EAC7C,EAAA,OAAO,CAAC,gBAAA,CAAiB,CAAC,CAAA,EAAG,gBAAA,CAAiB,CAAC,CAAC,CAAA;EACpD;EAEA,SAAS,eAAA,CAAgB,aAA2B,SAAA,EAAqD;EACrG,EAAA,MAAM,SAAkC,EAAC;EACzC,EAAA,KAAA,IAAS,IAAI,CAAA,EAAG,CAAA,GAAI,WAAA,CAAY,MAAA,EAAQ,EAAE,CAAA,EAAG;EACzC,IAAA,MAAA,CAAO,KAAK,cAAA,CAAe,WAAA,CAAY,CAAC,CAAA,EAAG,SAAS,CAAC,CAAA;EAAA,EACzD;EACA,EAAA,OAAO,MAAA;EACX;EAEA,SAAS,mBAAA,CAAoB,KAAA,EAAyB,IAAA,EAA+B,EAAA,EAAY,EAAA,EAAY;EACzG,EAAA,MAAM,YAAA,GAAe,gBAAA,CAAiB,IAAA,EAAM,KAAA,EAAO,IAAI,EAAE,CAAA;EACzD,EAAA,OAAO,aAAA,CAAc,KAAA,EAAO,YAAA,EAAc,EAAA,EAAI,EAAE,CAAA;EACpD;EAEA,SAAS,qBAAqB,MAAA,EAAiC,MAAA,EAAoB,IAAA,EAA+B,MAAA,EAAoB,IAAY,EAAA,EAAY;EAC1J,EAAA,MAAM,OAAA,GAAU,KAAK,KAAA,CAAM,MAAA,CAAO,CAAC,CAAA,EAAG,MAAA,CAAO,CAAC,CAAA,GAAI,CAAC,CAAA;EACnD,EAAA,IAAI,IAAA,GAAO,QAAA;EACX,EAAA,KAAA,IAAS,CAAA,GAAI,OAAO,CAAC,CAAA,EAAG,KAAK,MAAA,CAAO,CAAC,CAAA,EAAG,EAAE,CAAA,EAAG;EACzC,IAAA,IAAA,CAAK,IAAA,GAAO,IAAA,CAAK,GAAA,CAAI,IAAA,EAAM,oBAAoB,MAAA,CAAO,CAAC,CAAA,EAAG,OAAA,EAAS,EAAA,EAAI,EAAE,CAAC,CAAA,MAAO,GAAK,OAAO,CAAA;EAAA,EACjG;EACA,EAAA,OAAO,IAAA;EACX;EAGA,SAAS,yBAAyB,EAAA,EAAsB,EAAA,EAAsB,EAAA,EAAsB,EAAA,EAAsB,IAAY,EAAA,EAAY;EAC9I,EAAA,MAAM,QAAQ,IAAA,CAAK,GAAA;EAAA,IACf,2BAAA,CAA4B,EAAA,EAAI,EAAA,EAAI,EAAA,EAAI,IAAI,EAAE,CAAA;EAAA,IAC9C,2BAAA,CAA4B,EAAA,EAAI,EAAA,EAAI,EAAA,EAAI,IAAI,EAAE;EAAA,GAClD;EACA,EAAA,MAAM,QAAQ,IAAA,CAAK,GAAA;EAAA,IACf,2BAAA,CAA4B,EAAA,EAAI,EAAA,EAAI,EAAA,EAAI,IAAI,EAAE,CAAA;EAAA,IAC9C,2BAAA,CAA4B,EAAA,EAAI,EAAA,EAAI,EAAA,EAAI,IAAI,EAAE;EAAA,GAClD;EAEA,EAAA,OAAO,IAAA,CAAK,GAAA,CAAI,KAAA,EAAO,KAAK,CAAA;EAChC;EAEA,SAAS,mBAAmB,KAAA,EAAgC,MAAA,EAAoB,KAAA,EAAgC,MAAA,EAAoB,IAAY,EAAA,EAAY;EACxJ,EAAA,IAAI,CAAC,WAAA,CAAY,MAAA,EAAQ,KAAA,CAAM,MAAM,CAAA,IAAK,CAAC,WAAA,CAAY,MAAA,EAAQ,KAAA,CAAM,MAAM,CAAA,EAAG;EAC1E,IAAA,OAAO,GAAA;EAAA,EACX;EACA,EAAA,IAAI,IAAA,GAAO,QAAA;EACX,EAAA,KAAA,IAAS,CAAA,GAAI,OAAO,CAAC,CAAA,EAAG,IAAI,MAAA,CAAO,CAAC,CAAA,EAAG,EAAE,CAAA,EAAG;EACxC,IAAA,KAAA,IAAS,CAAA,GAAI,OAAO,CAAC,CAAA,EAAG,IAAI,MAAA,CAAO,CAAC,CAAA,EAAG,EAAE,CAAA,EAAG;EACxC,MAAA,IAAI,wBAAwB,KAAA,CAAM,CAAC,CAAA,EAAG,KAAA,CAAM,IAAI,CAAC,CAAA,EAAG,KAAA,CAAM,CAAC,GAAG,KAAA,CAAM,CAAA,GAAI,CAAC,CAAC,GAAG,OAAO,CAAA;EACpF,MAAA,IAAA,GAAO,IAAA,CAAK,IAAI,IAAA,EAAM,wBAAA,CAAyB,MAAM,CAAC,CAAA,EAAG,MAAM,CAAA,GAAI,CAAC,GAAG,KAAA,CAAM,CAAC,GAAG,KAAA,CAAM,CAAA,GAAI,CAAC,CAAA,EAAG,EAAA,EAAI,EAAE,CAAC,CAAA;EAAA,IAC1G;EAAA,EACJ;EACA,EAAA,OAAO,IAAA;EACX;EAEA,SAAS,uBAAuB,SAAA,EAAoC,MAAA,EAAoB,SAAA,EAAoC,MAAA,EAAoB,IAAY,EAAA,EAAY;EACpK,EAAA,IAAI,CAAC,WAAA,CAAY,MAAA,EAAQ,SAAA,CAAU,MAAM,CAAA,IAAK,CAAC,WAAA,CAAY,MAAA,EAAQ,SAAA,CAAU,MAAM,CAAA,EAAG;EAClF,IAAA,OAAO,GAAA;EAAA,EACX;EACA,EAAA,IAAI,IAAA,GAAO,QAAA;EACX,EAAA,KAAA,IAAS,CAAA,GAAI,OAAO,CAAC,CAAA,EAAG,KAAK,MAAA,CAAO,CAAC,CAAA,EAAG,EAAE,CAAA,EAAG;EACzC,IAAA,KAAA,IAAS,CAAA,GAAI,OAAO,CAAC,CAAA,EAAG,KAAK,MAAA,CAAO,CAAC,CAAA,EAAG,EAAE,CAAA,EAAG;EACzC,MAAA,IAAA,CAAK,OAAO,IAAA,CAAK,GAAA,CAAI,IAAA,EAAM,aAAA,CAAc,UAAU,CAAC,CAAA,EAAG,SAAA,CAAU,CAAC,GAAG,EAAA,EAAI,EAAE,CAAC,CAAA,MAAO,GAAK,OAAO,IAAA;EAAA,IACnG;EAAA,EACJ;EACA,EAAA,OAAO,IAAA;EACX;EAEA,SAAS,sBAAA,CAAuB,KAAA,EAAyB,OAAA,EAAyC,EAAA,EAAY,EAAA,EAAY;EACtH,EAAA,IAAI,kBAAA;EAAA,IAAmB,KAAA;EAAA,IAAO,OAAA;EAAA,IAAS;EAAA;EAAA,KAA0B,OAAO,CAAA;EACxE,EAAA,IAAI,IAAA,GAAO,QAAA;EACX,EAAA,KAAA,MAAW,QAAQ,OAAA,EAAS;EACxB,IAAA,MAAM,UAAU,IAAA,CAAK,MAAA;EACrB,IAAA,IAAI,UAAU,CAAA,EAAG;EACb,MAAA,OAAA,CAAQ,KAAK,uCAAuC,CAAA;EACpD,MAAA,OAAO,GAAA;EAAA,IACX;EACA,IAAA,IAAI,KAAK,CAAC,CAAA,KAAM,IAAA,CAAK,OAAA,GAAU,CAAC,CAAA,EAAG;EAC/B,MAAA,IAAA,CAAK,OAAO,IAAA,CAAK,GAAA,CAAI,MAAM,2BAAA,CAA4B,KAAA,EAAO,KAAK,OAAA,GAAU,CAAC,CAAA,EAAG,IAAA,CAAK,CAAC,CAAA,EAAG,EAAA,EAAI,EAAE,CAAC,CAAA,MAAO,GAAK,OAAO,IAAA;EAAA,IACxH;EACA,IAAA,IAAA,CAAK,IAAA,GAAO,IAAA,CAAK,GAAA,CAAI,IAAA,EAAM,mBAAA,CAAoB,KAAA,EAAO,IAAA,EAAM,EAAA,EAAI,EAAE,CAAC,CAAA,MAAO,CAAA,EAAK,OAAO,IAAA;EAAA,EAC1F;EACA,EAAA,OAAO,IAAA;EACX;EAEA,SAAS,qBAAA,CAAsB,IAAA,EAA+B,KAAA,EAAmB,OAAA,EAAyC,IAAY,EAAA,EAAY;EAC9I,EAAA,IAAI,CAAC,WAAA,CAAY,KAAA,EAAO,IAAA,CAAK,MAAM,CAAA,EAAG;EAClC,IAAA,OAAO,GAAA;EAAA,EACX;EACA,EAAA,KAAA,IAAS,CAAA,GAAI,MAAM,CAAC,CAAA,EAAG,KAAK,KAAA,CAAM,CAAC,CAAA,EAAG,EAAE,CAAA,EAAG;EACvC,IAAA,IAAI,kBAAA;EAAA,MAAmB,KAAK,CAAC,CAAA;EAAA,MAAG,OAAA;EAAA,MAAS;EAAA;EAAA,OAA0B,OAAO,CAAA;EAAA,EAC9E;EACA,EAAA,IAAI,IAAA,GAAO,QAAA;EACX,EAAA,KAAA,IAAS,CAAA,GAAI,MAAM,CAAC,CAAA,EAAG,IAAI,KAAA,CAAM,CAAC,CAAA,EAAG,EAAE,CAAA,EAAG;EACtC,IAAA,KAAA,MAAW,QAAQ,OAAA,EAAS;EACxB,MAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,GAAA,GAAM,IAAA,CAAK,MAAA,EAAQ,CAAA,GAAI,GAAA,GAAM,CAAA,EAAG,CAAA,GAAI,GAAA,EAAK,CAAA,GAAI,CAAA,EAAA,EAAK;EAC9D,QAAA,IAAI,uBAAA,CAAwB,IAAA,CAAK,CAAC,CAAA,EAAG,KAAK,CAAA,GAAI,CAAC,CAAA,EAAG,IAAA,CAAK,CAAC,CAAA,EAAG,IAAA,CAAK,CAAC,CAAC,GAAG,OAAO,CAAA;EAC5E,QAAA,IAAA,GAAO,KAAK,GAAA,CAAI,IAAA,EAAM,yBAAyB,IAAA,CAAK,CAAC,GAAG,IAAA,CAAK,CAAA,GAAI,CAAC,CAAA,EAAG,IAAA,CAAK,CAAC,CAAA,EAAG,IAAA,CAAK,CAAC,CAAA,EAAG,EAAA,EAAI,EAAE,CAAC,CAAA;EAAA,MAClG;EAAA,IACJ;EAAA,EACJ;EACA,EAAA,OAAO,IAAA;EACX;EAEA,SAAS,gBAAA,CAAiB,UAA0C,QAAA,EAA0C;EAC1G,EAAA,KAAA,MAAW,QAAQ,QAAA,EAAU;EACzB,IAAA,KAAA,IAAS,IAAI,CAAA,EAAG,CAAA,IAAK,KAAK,MAAA,GAAS,CAAA,EAAG,EAAE,CAAA,EAAG;EACvC,MAAA,IAAI,kBAAA;EAAA,QAAmB,KAAK,CAAC,CAAA;EAAA,QAAG,QAAA;EAAA,QAAU;EAAA;EAAA,SAA0B,OAAO,IAAA;EAAA,IAC/E;EAAA,EACJ;EACA,EAAA,OAAO,KAAA;EACX;EAEA,SAAS,yBAAyB,QAAA,EAA0C,QAAA,EAA0C,EAAA,EAAY,EAAA,EAAY,kBAA0B,QAAA,EAAU;EAC9K,EAAA,MAAM,KAAA,GAAQ,eAAe,QAAQ,CAAA;EACrC,EAAA,MAAM,KAAA,GAAQ,eAAe,QAAQ,CAAA;EACrC,EAAA,IAAI,eAAA,KAAoB,YAAY,kBAAA,CAAmB,KAAA,EAAO,OAAO,EAAA,EAAI,EAAE,KAAK,eAAA,EAAiB;EAC7F,IAAA,OAAO,eAAA;EAAA,EACX;EACA,EAAA,IAAI,YAAA,CAAa,KAAA,EAAO,KAAK,CAAA,EAAG;EAC5B,IAAA,IAAI,gBAAA,CAAiB,QAAA,EAAU,QAAQ,CAAA,EAAG,OAAO,CAAA;EAAA,EACrD,CAAA,MAAA,IAAW,gBAAA,CAAiB,QAAA,EAAU,QAAQ,CAAA,EAAG;EAC7C,IAAA,OAAO,CAAA;EAAA,EACX;EACA,EAAA,IAAI,IAAA,GAAO,eAAA;EACX,EAAA,KAAA,MAAW,SAAS,QAAA,EAAU;EAC1B,IAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,IAAA,GAAO,KAAA,CAAM,MAAA,EAAQ,CAAA,GAAI,IAAA,GAAO,CAAA,EAAG,CAAA,GAAI,IAAA,EAAM,CAAA,GAAI,CAAA,EAAA,EAAK;EAClE,MAAA,KAAA,MAAW,SAAS,QAAA,EAAU;EAC1B,QAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,IAAA,GAAO,KAAA,CAAM,MAAA,EAAQ,CAAA,GAAI,IAAA,GAAO,CAAA,EAAG,CAAA,GAAI,IAAA,EAAM,CAAA,GAAI,CAAA,EAAA,EAAK;EAClE,UAAA,IAAI,uBAAA,CAAwB,KAAA,CAAM,CAAC,CAAA,EAAG,MAAM,CAAC,CAAA,EAAG,KAAA,CAAM,CAAC,CAAA,EAAG,KAAA,CAAM,CAAC,CAAC,GAAG,OAAO,CAAA;EAC5E,UAAA,IAAA,GAAO,KAAK,GAAA,CAAI,IAAA,EAAM,yBAAyB,KAAA,CAAM,CAAC,GAAG,KAAA,CAAM,CAAC,CAAA,EAAG,KAAA,CAAM,CAAC,CAAA,EAAG,KAAA,CAAM,CAAC,CAAA,EAAG,EAAA,EAAI,EAAE,CAAC,CAAA;EAAA,QAClG;EAAA,MACJ;EAAA,IACJ;EAAA,EACJ;EACA,EAAA,OAAO,IAAA;EACX;EAEA,SAAS,WAAA,CAAY,WAAgC,QAAA,EAAkB,EAAA,EAAY,IAAY,SAAA,EAAoC,SAAA,EAAoC,IAAuB,EAAA,EAAuB;EACjN,EAAA,IAAI,EAAA,KAAO,IAAA,IAAQ,EAAA,KAAO,IAAA,EAAM;EAChC,EAAA,MAAM,QAAA,GAAW,kBAAA,CAAmB,OAAA,CAAQ,SAAA,EAAW,EAAE,CAAA,EAAG,OAAA,CAAQ,SAAA,EAAW,EAAE,CAAA,EAAG,EAAA,EAAI,EAAE,CAAA;EAE1F,EAAA,IAAI,QAAA,GAAW,QAAA,EAAU,SAAA,CAAU,IAAA,CAAK,EAAC,IAAA,EAAM,QAAA,EAAU,MAAA,EAAQ,EAAA,EAAI,MAAA,EAAQ,EAAA,EAAG,CAAA;EACpF;EAIA,SAAS,0BAA0B,SAAA,EAAoC,MAAA,EAAiB,SAAyC,EAAA,EAAY,EAAA,EAAY,kBAA0B,QAAA,EAAU;EACzL,EAAA,IAAI,QAAA,GAAW,IAAA,CAAK,GAAA,CAAI,aAAA,CAAc,UAAU,CAAC,CAAA,EAAG,OAAA,CAAQ,CAAC,EAAE,CAAC,CAAA,EAAG,EAAA,EAAI,EAAE,GAAG,eAAe,CAAA;EAC3F,EAAA,IAAI,QAAA,KAAa,GAAK,OAAO,QAAA;EAC7B,EAAA,MAAM,eAAA,GAA4B;EAAA,IAC9B,IAAA,EAAM,CAAA;EAAA,IACN,MAAA,EAAQ,CAAC,CAAA,EAAG,SAAA,CAAU,SAAS,CAAC,CAAA;EAAA,IAChC,MAAA,EAAQ,CAAC,CAAA,EAAG,CAAC;EAAA,GACjB;EACA,EAAA,MAAM,YAAY,IAAI,SAAA,CAAoB,CAAC,eAAe,GAAG,UAAU,CAAA;EAEvE,EAAA,MAAM,YAAA,GAAe,SAAS,mBAAA,GAAsB,cAAA;EACpD,EAAA,MAAM,QAAA,GAAW,eAAe,OAAO,CAAA;EAEvC,EAAA,OAAO,UAAU,MAAA,EAAQ;EACrB,IAAA,MAAM,QAAA,GAAW,UAAU,GAAA,EAAI;EAC/B,IAAA,IAAI,QAAA,CAAS,QAAQ,QAAA,EAAU;EAC/B,IAAA,MAAM,QAAQ,QAAA,CAAS,MAAA;EAEvB,IAAA,IAAI,YAAA,CAAa,KAAK,CAAA,IAAK,YAAA,EAAc;EACrC,MAAA,IAAI,CAAC,WAAA,CAAY,KAAA,EAAO,SAAA,CAAU,MAAM,GAAG,OAAO,GAAA;EAClD,MAAA,IAAI,MAAA,EAAQ;EACR,QAAA,MAAM,WAAW,qBAAA,CAAsB,SAAA,EAAW,KAAA,EAAO,OAAA,EAAS,IAAI,EAAE,CAAA;EACxE,QAAA,IAAA,CAAK,WAAW,IAAA,CAAK,GAAA,CAAI,UAAU,QAAQ,CAAA,MAAO,GAAK,OAAO,QAAA;EAAA,MAClE,CAAA,MAAO;EACH,QAAA,KAAA,IAAS,CAAA,GAAI,MAAM,CAAC,CAAA,EAAG,KAAK,KAAA,CAAM,CAAC,CAAA,EAAG,EAAE,CAAA,EAAG;EACvC,UAAA,MAAM,WAAW,sBAAA,CAAuB,SAAA,CAAU,CAAC,CAAA,EAAG,OAAA,EAAS,IAAI,EAAE,CAAA;EACrE,UAAA,IAAA,CAAK,WAAW,IAAA,CAAK,GAAA,CAAI,UAAU,QAAQ,CAAA,MAAO,GAAK,OAAO,QAAA;EAAA,QAClE;EAAA,MACJ;EAAA,IACJ,CAAA,MAAO;EACH,MAAA,MAAM,SAAA,GAAY,UAAA,CAAW,KAAA,EAAO,MAAM,CAAA;EAC1C,MAAA,IAAI,SAAA,CAAU,CAAC,CAAA,KAAM,IAAA,EAAM;EACvB,QAAA,MAAM,QAAA,GAAW,kBAAA,CAAmB,OAAA,CAAQ,SAAA,EAAW,SAAA,CAAU,CAAC,CAAC,CAAA,EAAG,QAAA,EAAU,EAAA,EAAI,EAAE,CAAA;EACtF,QAAA,IAAI,WAAW,QAAA,EAAU,SAAA,CAAU,IAAA,CAAK,EAAC,MAAM,QAAA,EAAU,MAAA,EAAQ,SAAA,CAAU,CAAC,GAAG,MAAA,EAAQ,CAAC,CAAA,EAAG,CAAC,GAAE,CAAA;EAAA,MAClG;EACA,MAAA,IAAI,SAAA,CAAU,CAAC,CAAA,KAAM,IAAA,EAAM;EACvB,QAAA,MAAM,QAAA,GAAW,kBAAA,CAAmB,OAAA,CAAQ,SAAA,EAAW,SAAA,CAAU,CAAC,CAAC,CAAA,EAAG,QAAA,EAAU,EAAA,EAAI,EAAE,CAAA;EACtF,QAAA,IAAI,WAAW,QAAA,EAAU,SAAA,CAAU,IAAA,CAAK,EAAC,MAAM,QAAA,EAAU,MAAA,EAAQ,SAAA,CAAU,CAAC,GAAG,MAAA,EAAQ,CAAC,CAAA,EAAG,CAAC,GAAE,CAAA;EAAA,MAClG;EAAA,IACJ;EAAA,EACJ;EACA,EAAA,OAAO,QAAA;EACX;EAEA,SAAS,iBAAA,CAAkB,WAAoC,OAAA,EAAkB,SAAA,EAAoC,SAAkB,EAAA,EAAY,EAAA,EAAY,kBAA0B,QAAA,EAAU;EAC/L,EAAA,IAAI,QAAA,GAAW,IAAA,CAAK,GAAA,CAAI,eAAA,EAAiB,aAAA,CAAc,SAAA,CAAU,CAAC,CAAA,EAAG,SAAA,CAAU,CAAC,CAAA,EAAG,EAAA,EAAI,EAAE,CAAC,CAAA;EAC1F,EAAA,IAAI,QAAA,KAAa,GAAK,OAAO,QAAA;EAC7B,EAAA,MAAM,eAAA,GAA4B;EAAA,IAC9B,IAAA,EAAM,CAAA;EAAA,IACN,MAAA,EAAQ,CAAC,CAAA,EAAG,SAAA,CAAU,SAAS,CAAC,CAAA;EAAA,IAChC,MAAA,EAAQ,CAAC,CAAA,EAAG,SAAA,CAAU,SAAS,CAAC;EAAA,GACpC;EACA,EAAA,MAAM,YAAY,IAAI,SAAA,CAAoB,CAAC,eAAe,GAAG,UAAU,CAAA;EAEvE,EAAA,MAAM,aAAA,GAAgB,UAAU,mBAAA,GAAsB,cAAA;EACtD,EAAA,MAAM,aAAA,GAAgB,UAAU,mBAAA,GAAsB,cAAA;EAEtD,EAAA,OAAO,UAAU,MAAA,EAAQ;EACrB,IAAA,MAAM,QAAA,GAAW,UAAU,GAAA,EAAI;EAC/B,IAAA,IAAI,QAAA,CAAS,QAAQ,QAAA,EAAU;EAC/B,IAAA,MAAM,SAAS,QAAA,CAAS,MAAA;EACxB,IAAA,MAAM,SAAS,QAAA,CAAS,MAAA;EAExB,IAAA,IAAI,aAAa,MAAM,CAAA,IAAK,iBAAiB,YAAA,CAAa,MAAM,KAAK,aAAA,EAAe;EAChF,MAAA,IAAI,CAAC,WAAA,CAAY,MAAA,EAAQ,SAAA,CAAU,MAAM,CAAA,IAAK,CAAC,WAAA,CAAY,MAAA,EAAQ,SAAA,CAAU,MAAM,CAAA,EAAG;EAClF,QAAA,OAAO,GAAA;EAAA,MACX;EACA,MAAA,IAAI,WAAW,OAAA,EAAS;EACpB,QAAA,QAAA,GAAW,IAAA,CAAK,GAAA,CAAI,QAAA,EAAU,kBAAA,CAAmB,SAAA,EAAW,QAAQ,SAAA,EAAW,MAAA,EAAQ,EAAA,EAAI,EAAE,CAAC,CAAA;EAAA,MAClG,CAAA,MAAA,IAAW,CAAC,OAAA,IAAW,CAAC,OAAA,EAAS;EAC7B,QAAA,QAAA,GAAW,IAAA,CAAK,GAAA,CAAI,QAAA,EAAU,sBAAA,CAAuB,SAAA,EAAW,QAAQ,SAAA,EAAW,MAAA,EAAQ,EAAA,EAAI,EAAE,CAAC,CAAA;EAAA,MACtG,CAAA,MAAA,IAAW,OAAA,IAAW,CAAC,OAAA,EAAS;EAC5B,QAAA,QAAA,GAAW,IAAA,CAAK,GAAA,CAAI,QAAA,EAAU,oBAAA,CAAqB,SAAA,EAAW,QAAQ,SAAA,EAAW,MAAA,EAAQ,EAAA,EAAI,EAAE,CAAC,CAAA;EAAA,MACpG,CAAA,MAAA,IAAW,CAAC,OAAA,IAAW,OAAA,EAAS;EAC5B,QAAA,QAAA,GAAW,IAAA,CAAK,GAAA,CAAI,QAAA,EAAU,oBAAA,CAAqB,SAAA,EAAW,QAAQ,SAAA,EAAW,MAAA,EAAQ,EAAA,EAAI,EAAE,CAAC,CAAA;EAAA,MACpG;EACA,MAAA,IAAI,QAAA,KAAa,GAAK,OAAO,QAAA;EAAA,IACjC,CAAA,MAAO;EACH,MAAA,MAAM,UAAA,GAAa,UAAA,CAAW,MAAA,EAAQ,OAAO,CAAA;EAC7C,MAAA,MAAM,UAAA,GAAa,UAAA,CAAW,MAAA,EAAQ,OAAO,CAAA;EAC7C,MAAA,WAAA,CAAY,SAAA,EAAW,QAAA,EAAU,EAAA,EAAI,EAAA,EAAI,SAAA,EAAW,SAAA,EAAW,UAAA,CAAW,CAAC,CAAA,EAAG,UAAA,CAAW,CAAC,CAAC,CAAA;EAC3F,MAAA,WAAA,CAAY,SAAA,EAAW,QAAA,EAAU,EAAA,EAAI,EAAA,EAAI,SAAA,EAAW,SAAA,EAAW,UAAA,CAAW,CAAC,CAAA,EAAG,UAAA,CAAW,CAAC,CAAC,CAAA;EAC3F,MAAA,WAAA,CAAY,SAAA,EAAW,QAAA,EAAU,EAAA,EAAI,EAAA,EAAI,SAAA,EAAW,SAAA,EAAW,UAAA,CAAW,CAAC,CAAA,EAAG,UAAA,CAAW,CAAC,CAAC,CAAA;EAC3F,MAAA,WAAA,CAAY,SAAA,EAAW,QAAA,EAAU,EAAA,EAAI,EAAA,EAAI,SAAA,EAAW,SAAA,EAAW,UAAA,CAAW,CAAC,CAAA,EAAG,UAAA,CAAW,CAAC,CAAC,CAAA;EAAA,IAC/F;EAAA,EACJ;EACA,EAAA,OAAO,QAAA;EACX;EAEA,SAAS,wBAAwB,QAAA,EAAmC,MAAA,EAAiB,OAAuC,EAAA,EAAY,EAAA,EAAY,kBAA0B,QAAA,EAAU;EACpL,EAAA,IAAI,IAAA,GAAO,eAAA;EACX,EAAA,MAAM,KAAA,GAAQ,QAAQ,QAAA,EAAU,CAAC,GAAG,QAAA,CAAS,MAAA,GAAS,CAAC,CAAC,CAAA;EACxD,EAAA,KAAA,MAAW,QAAQ,KAAA,EAAO;EACtB,IAAA,IAAI,SAAS,QAAA,IAAY,kBAAA,CAAmB,KAAA,EAAO,OAAA,CAAQ,MAAM,CAAC,CAAA,EAAG,IAAA,CAAK,MAAA,GAAS,CAAC,CAAC,CAAA,EAAG,EAAA,EAAI,EAAE,KAAK,IAAA,EAAM;EACzG,IAAA,IAAA,GAAO,IAAA,CAAK,GAAA,CAAI,IAAA,EAAM,iBAAA,CAAkB,QAAA,EAAU,MAAA,EAAQ,IAAA,EAAM,IAAA,EAAiB,EAAA,EAAI,EAAA,EAAI,IAAI,CAAC,CAAA;EAC9F,IAAA,IAAI,IAAA,KAAS,GAAK,OAAO,IAAA;EAAA,EAC7B;EACA,EAAA,OAAO,IAAA;EACX;EAEA,SAAS,2BAA2B,MAAA,EAAiC,MAAA,EAAiB,UAAiD,EAAA,EAAY,EAAA,EAAY,kBAA0B,QAAA,EAAU;EAC/L,EAAA,IAAI,IAAA,GAAO,eAAA;EACX,EAAA,MAAM,KAAA,GAAQ,QAAQ,MAAA,EAAQ,CAAC,GAAG,MAAA,CAAO,MAAA,GAAS,CAAC,CAAC,CAAA;EACpD,EAAA,KAAA,MAAW,WAAW,QAAA,EAAU;EAC5B,IAAA,IAAI,IAAA,KAAS,QAAA,IAAY,kBAAA,CAAmB,KAAA,EAAO,cAAA,CAAe,OAAO,CAAA,EAAG,EAAA,EAAI,EAAE,CAAA,IAAK,IAAA,EAAM;EAC7F,IAAA,MAAM,WAAW,yBAAA,CAA0B,MAAA,EAAQ,QAAQ,OAAA,EAAS,EAAA,EAAI,IAAI,IAAI,CAAA;EAChF,IAAA,IAAI,KAAA,CAAM,QAAQ,CAAA,EAAG,OAAO,QAAA;EAC5B,IAAA,IAAA,CAAK,OAAO,IAAA,CAAK,GAAA,CAAI,MAAM,QAAQ,CAAA,MAAO,GAAK,OAAO,IAAA;EAAA,EAC1D;EACA,EAAA,OAAO,IAAA;EACX;EAEA,SAAS,0BAAA,CAA2B,SAAA,EAAkD,SAAA,EAAkD,EAAA,EAAY,EAAA,EAAY;EAC5J,EAAA,IAAI,IAAA,GAAO,QAAA;EACX,EAAA,KAAA,MAAW,YAAY,SAAA,EAAW;EAC9B,IAAA,KAAA,MAAW,YAAY,SAAA,EAAW;EAC9B,MAAA,MAAM,WAAW,wBAAA,CAAyB,QAAA,EAAU,QAAA,EAAU,EAAA,EAAI,IAAI,IAAI,CAAA;EAC1E,MAAA,IAAI,KAAA,CAAM,QAAQ,CAAA,EAAG,OAAO,QAAA;EAC5B,MAAA,IAAA,CAAK,OAAO,IAAA,CAAK,GAAA,CAAI,MAAM,QAAQ,CAAA,MAAO,GAAK,OAAO,IAAA;EAAA,IAC1D;EAAA,EACJ;EACA,EAAA,OAAO,IAAA;EACX;EAEA,SAAS,wBAAA,CAAyB,cAAA,EAAqC,SAAA,EAA4B,QAAA,EAA4B;EAC3H,EAAA,MAAM,eAAwC,EAAC;EAC/C,EAAA,KAAA,MAAW,UAAU,cAAA,EAAgB;EACjC,IAAA,KAAA,MAAW,SAAS,MAAA,EAAQ;EACxB,MAAA,YAAA,CAAa,IAAA,CAAK,cAAA,CAAe,KAAA,EAAO,SAAS,CAAC,CAAA;EAAA,IACtD;EAAA,EACJ;EACA,EAAA,MAAM,CAAC,IAAI,EAAE,CAAA,GAAI,YAAY,YAAA,CAAa,CAAC,CAAA,CAAE,CAAC,CAAC,CAAA;EAC/C,EAAA,IAAI,QAAA,CAAS,SAAS,OAAA,IAAW,QAAA,CAAS,SAAS,YAAA,IAAgB,QAAA,CAAS,SAAS,YAAA,EAAc;EAC/F,IAAA,OAAO,iBAAA;EAAA,MAAkB,YAAA;EAAA,MAAc,KAAA;EAAA,MAClC,SAAS,IAAA,KAAS,OAAA,GAAU,CAAC,QAAA,CAAS,WAAW,IAAI,QAAA,CAAS,WAAA;EAAA,MAC/D,SAAS,IAAA,KAAS,YAAA;EAAA,MAAyB,EAAA;EAAA,MAAI;EAAA,KAAE;EAAA,EACzD;EACA,EAAA,IAAI,QAAA,CAAS,SAAS,iBAAA,EAAmB;EACrC,IAAA,OAAO,wBAAwB,YAAA,EAAc,KAAA,EAAkB,QAAA,CAAS,WAAA,EAA+C,IAAI,EAAE,CAAA;EAAA,EACjI;EACA,EAAA,IAAI,QAAA,CAAS,IAAA,KAAS,SAAA,IAAa,QAAA,CAAS,SAAS,cAAA,EAAgB;EACjE,IAAA,OAAO,0BAAA;EAAA,MAA2B,YAAA;EAAA,MAAc,KAAA;EAAA,MAC3C,SAAS,IAAA,KAAS,SAAA,GAAY,CAAC,QAAA,CAAS,WAAW,IAAI,QAAA,CAAS,WAAA;EAAA,MAAuD,EAAA;EAAA,MAAI;EAAA,KAAE;EAAA,EACtI;EACA,EAAA,OAAO,IAAA;EACX;EAEA,SAAS,uBAAA,CAAwB,cAAA,EAAqC,SAAA,EAA4B,QAAA,EAA4B;EAC1H,EAAA,MAAM,cAA8C,EAAC;EACrD,EAAA,KAAA,MAAW,QAAQ,cAAA,EAAgB;EAC/B,IAAA,MAAM,aAAsC,EAAC;EAC7C,IAAA,KAAA,MAAW,SAAS,IAAA,EAAM;EACtB,MAAA,UAAA,CAAW,IAAA,CAAK,cAAA,CAAe,KAAA,EAAO,SAAS,CAAC,CAAA;EAAA,IACpD;EACA,IAAA,WAAA,CAAY,KAAK,UAAU,CAAA;EAAA,EAC/B;EACA,EAAA,MAAM,CAAC,EAAA,EAAI,EAAE,CAAA,GAAI,WAAA,CAAY,WAAA,CAAY,CAAC,CAAA,CAAE,CAAC,CAAA,CAAE,CAAC,CAAC,CAAA;EACjD,EAAA,IAAI,QAAA,CAAS,SAAS,OAAA,IAAW,QAAA,CAAS,SAAS,YAAA,IAAgB,QAAA,CAAS,SAAS,YAAA,EAAc;EAC/F,IAAA,OAAO,uBAAA;EAAA,MACF,SAAS,IAAA,KAAS,OAAA,GAAU,CAAC,QAAA,CAAS,WAAW,IAAI,QAAA,CAAS,WAAA;EAAA,MAC/D,SAAS,IAAA,KAAS,YAAA;EAAA,MAAyB,WAAA;EAAA,MAAa,EAAA;EAAA,MAAI;EAAA,KAAE;EAAA,EACtE;EACA,EAAA,IAAI,QAAA,CAAS,SAAS,iBAAA,EAAmB;EACrC,IAAA,IAAI,IAAA,GAAO,QAAA;EACX,IAAA,KAAA,IAAS,IAAI,CAAA,EAAG,CAAA,GAAI,QAAA,CAAS,WAAA,CAAY,QAAQ,CAAA,EAAA,EAAK;EAClD,MAAA,MAAM,QAAA,GAAW,uBAAA,CAAwB,QAAA,CAAS,WAAA,CAAY,CAAC,GAA8B,IAAA,EAAiB,WAAA,EAAa,EAAA,EAAI,EAAA,EAAI,IAAI,CAAA;EACvI,MAAA,IAAI,KAAA,CAAM,QAAQ,CAAA,EAAG,OAAO,QAAA;EAC5B,MAAA,IAAA,CAAK,OAAO,IAAA,CAAK,GAAA,CAAI,MAAM,QAAQ,CAAA,MAAO,GAAK,OAAO,IAAA;EAAA,IAC1D;EACA,IAAA,OAAO,IAAA;EAAA,EACX;EACA,EAAA,IAAI,QAAA,CAAS,IAAA,KAAS,SAAA,IAAa,QAAA,CAAS,SAAS,cAAA,EAAgB;EACjE,IAAA,IAAI,IAAA,GAAO,QAAA;EACX,IAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,WAAA,CAAY,QAAQ,CAAA,EAAA,EAAK;EACzC,MAAA,MAAM,QAAA,GAAW,0BAAA;EAAA,QAA2B,YAAY,CAAC,CAAA;EAAA,QAAG,IAAA;EAAA,QACvD,SAAS,IAAA,KAAS,SAAA,GAAY,CAAC,QAAA,CAAS,WAAW,IAAI,QAAA,CAAS,WAAA;EAAA,QACjE,EAAA;EAAA,QAAI,EAAA;EAAA,QAAI;EAAA,OAAI;EAChB,MAAA,IAAI,KAAA,CAAM,QAAQ,CAAA,EAAG,OAAO,QAAA;EAC5B,MAAA,IAAA,CAAK,OAAO,IAAA,CAAK,GAAA,CAAI,MAAM,QAAQ,CAAA,MAAO,GAAK,OAAO,IAAA;EAAA,IAC1D;EACA,IAAA,OAAO,IAAA;EAAA,EACX;EACA,EAAA,OAAO,IAAA;EACX;EAEA,SAAS,0BAAA,CAA2B,cAAA,EAAqC,SAAA,EAA4B,QAAA,EAA4B;EAC7H,EAAA,MAAM,iBAAwD,EAAC;EAC/D,EAAA,KAAA,MAAW,OAAA,IAAW,aAAA,CAAc,cAAiB,CAAA,EAAG;EACpD,IAAA,MAAM,gBAAgD,EAAC;EACvD,IAAA,KAAA,IAAS,IAAI,CAAA,EAAG,CAAA,GAAI,OAAA,CAAQ,MAAA,EAAQ,EAAE,CAAA,EAAG;EACrC,MAAA,aAAA,CAAc,KAAK,eAAA,CAAgB,OAAA,CAAQ,CAAC,CAAA,EAAG,SAAS,CAAC,CAAA;EAAA,IAC7D;EACA,IAAA,cAAA,CAAe,KAAK,aAAa,CAAA;EAAA,EACrC;EACA,EAAA,MAAM,CAAC,EAAA,EAAI,EAAE,CAAA,GAAI,WAAA,CAAY,cAAA,CAAe,CAAC,CAAA,CAAE,CAAC,CAAA,CAAE,CAAC,CAAA,CAAE,CAAC,CAAC,CAAA;EACvD,EAAA,IAAI,QAAA,CAAS,SAAS,OAAA,IAAW,QAAA,CAAS,SAAS,YAAA,IAAgB,QAAA,CAAS,SAAS,YAAA,EAAc;EAC/F,IAAA,OAAO,0BAAA;EAAA,MACF,SAAS,IAAA,KAAS,OAAA,GAAU,CAAC,QAAA,CAAS,WAAW,IAAI,QAAA,CAAS,WAAA;EAAA,MAC/D,SAAS,IAAA,KAAS,YAAA;EAAA,MAAyB,cAAA;EAAA,MAAgB,EAAA;EAAA,MAAI;EAAA,KAAE;EAAA,EACzE;EACA,EAAA,IAAI,QAAA,CAAS,SAAS,iBAAA,EAAmB;EACrC,IAAA,IAAI,IAAA,GAAO,QAAA;EACX,IAAA,KAAA,IAAS,IAAI,CAAA,EAAG,CAAA,GAAI,QAAA,CAAS,WAAA,CAAY,QAAQ,CAAA,EAAA,EAAK;EAClD,MAAA,MAAM,QAAA,GAAW,0BAAA,CAA2B,QAAA,CAAS,WAAA,CAAY,CAAC,GAA8B,IAAA,EAAiB,cAAA,EAAgB,EAAA,EAAI,EAAA,EAAI,IAAI,CAAA;EAC7I,MAAA,IAAI,KAAA,CAAM,QAAQ,CAAA,EAAG,OAAO,QAAA;EAC5B,MAAA,IAAA,CAAK,OAAO,IAAA,CAAK,GAAA,CAAI,MAAM,QAAQ,CAAA,MAAO,GAAK,OAAO,IAAA;EAAA,IAC1D;EACA,IAAA,OAAO,IAAA;EAAA,EACX;EACA,EAAA,IAAI,QAAA,CAAS,IAAA,KAAS,SAAA,IAAa,QAAA,CAAS,SAAS,cAAA,EAAgB;EACjE,IAAA,OAAO,0BAAA;EAAA,MACF,SAAS,IAAA,KAAS,SAAA,GAAY,CAAC,QAAA,CAAS,WAAW,IAAI,QAAA,CAAS,WAAA;EAAA,MACjE,cAAA;EAAA,MAAgB,EAAA;EAAA,MAAI;EAAA,KAAE;EAAA,EAC9B;EACA,EAAA,OAAO,IAAA;EACX;EAEA,SAAS,YAAY,IAAA,EAAc;EAC/B,EAAA,OACI,IAAA,KAAS,OAAA,IACT,IAAA,KAAS,YAAA,IACT,IAAA,KAAS,gBACT,IAAA,KAAS,iBAAA,IACT,IAAA,KAAS,SAAA,IACT,IAAA,KAAS,cAAA;EAEjB;EACA,MAAM,QAAA,CAA+B;EAAA,EAKjC,WAAA,CAAY,SAA0B,UAAA,EAA8B;EAChE,IAAA,IAAA,CAAK,IAAA,GAAO,UAAA;EACZ,IAAA,IAAA,CAAK,OAAA,GAAU,OAAA;EACf,IAAA,IAAA,CAAK,UAAA,GAAa,UAAA;EAAA,EACtB;EAAA,EAEA,OAAO,KAAA,CAAM,IAAA,EAA8B,OAAA,EAAiD;EACxF,IAAA,IAAI,IAAA,CAAK,WAAW,CAAA,EAAG;EACnB,MAAA,OAAO,QAAQ,KAAA,CAAM,CAAA,gEAAA,EAAmE,IAAA,CAAK,MAAA,GAAS,CAAC,CAAA,SAAA,CAAW,CAAA;EAAA,IACtH;EACA,IAAA,IAAI,OAAA,CAAQ,IAAA,CAAK,CAAC,CAAC,CAAA,EAAG;EAClB,MAAA,MAAM,OAAA,GAAU,KAAK,CAAC,CAAA;EACtB,MAAA,IAAI,OAAA,CAAQ,SAAS,mBAAA,EAAqB;EACtC,QAAA,KAAA,IAAS,IAAI,CAAA,EAAG,CAAA,GAAI,QAAQ,QAAA,CAAS,MAAA,EAAQ,EAAE,CAAA,EAAG;EAC9C,UAAA,IAAI,YAAY,OAAA,CAAQ,QAAA,CAAS,CAAC,CAAA,CAAE,QAAA,CAAS,IAAI,CAAA,EAAG;EAChD,YAAA,OAAO,IAAI,QAAA,CAAS,OAAA,EAAS,QAAQ,QAAA,CAAS,CAAC,EAAE,QAA4B,CAAA;EAAA,UACjF;EAAA,QACJ;EAAA,MACJ,CAAA,MAAA,IAAW,OAAA,CAAQ,IAAA,KAAS,SAAA,EAAW;EACnC,QAAA,IAAI,WAAA,CAAY,OAAA,CAAQ,QAAA,CAAS,IAAI,CAAA,EAAG;EACpC,UAAA,OAAO,IAAI,QAAA,CAAS,OAAA,EAAS,OAAA,CAAQ,QAA4B,CAAA;EAAA,QACrE;EAAA,MACJ,CAAA,MAAA,IAAW,WAAA,CAAY,OAAA,CAAQ,IAAI,CAAA,EAAG;EAClC,QAAA,OAAO,IAAI,QAAA,CAAS,OAAA,EAAS,OAA2B,CAAA;EAAA,MAC5D;EAAA,IACJ;EACA,IAAA,OAAO,OAAA,CAAQ,KAAA;EAAA,MACX;EAAA,KACJ;EAAA,EACJ;EAAA,EAEA,SAAS,GAAA,EAAuC;EAC5C,IAAA,MAAM,QAAA,GAAW,IAAI,QAAA,EAAS;EAC9B,IAAA,MAAM,SAAA,GAAY,IAAI,WAAA,EAAY;EAClC,IAAA,IAAI,QAAA,IAAY,IAAA,IAAQ,SAAA,IAAa,IAAA,EAAM;EACvC,MAAA,IAAI,GAAA,CAAI,YAAA,EAAa,KAAM,OAAA,EAAS;EAChC,QAAA,OAAO,wBAAA,CAAyB,QAAA,EAAU,SAAA,EAAW,IAAA,CAAK,UAAU,CAAA;EAAA,MACxE;EACA,MAAA,IAAI,GAAA,CAAI,YAAA,EAAa,KAAM,YAAA,EAAc;EACrC,QAAA,OAAO,uBAAA,CAAwB,QAAA,EAAU,SAAA,EAAW,IAAA,CAAK,UAAU,CAAA;EAAA,MACvE;EACA,MAAA,IAAI,GAAA,CAAI,YAAA,EAAa,KAAM,SAAA,EAAW;EAClC,QAAA,OAAO,0BAAA,CAA2B,QAAA,EAAU,SAAA,EAAW,IAAA,CAAK,UAAU,CAAA;EAAA,MAC1E;EACA,MAAA,OAAA,CAAQ,KAAK,0FAA0F,CAAA;EAAA,IAC3G,CAAA,MAAO;EACH,MAAA,OAAA,CAAQ,KAAK,wEAAwE,CAAA;EAAA,IACzF;EACA,IAAA,OAAO,IAAA;EAAA,EACX;EAAA,EAEA,SAAA,GAAY;EAAA,EAAC;EAAA,EAEb,aAAA,GAAyB;EACrB,IAAA,OAAO,IAAA;EAAA,EACX;EAAA,EAEA,SAAA,GAA4B;EACxB,IAAA,OAAO,CAAC,UAAA,EAAY,IAAA,CAAK,OAAO,CAAA;EAAA,EACpC;EACJ;;ECvoBA,SAAS,kBAAkB,CAAA,EAAwB;EAC/C,EAAA,IAAI,aAAa,kBAAA,EAAoB;EACjC,IAAA,IAAI,EAAE,IAAA,KAAS,KAAA,IAAS,CAAA,CAAE,IAAA,CAAK,WAAW,CAAA,EAAG;EACzC,MAAA,OAAO,KAAA;EAAA,IACX,CAAA,MAAA,IAAW,CAAA,CAAE,IAAA,KAAS,eAAA,EAAiB;EACnC,MAAA,OAAO,KAAA;EAAA,IACX,WAAW,CAAA,CAAE,IAAA,KAAS,SAAS,CAAA,CAAE,IAAA,CAAK,WAAW,CAAA,EAAG;EAChD,MAAA,OAAO,KAAA;EAAA,IACX,CAAA,MAAA,IACI,EAAE,IAAA,KAAS,YAAA,IACX,EAAE,IAAA,KAAS,eAAA,IACX,CAAA,CAAE,IAAA,KAAS,IAAA,EACb;EACE,MAAA,OAAO,KAAA;EAAA,IACX,CAAA,MAAA,IAAW,CAAA,CAAE,IAAA,CAAK,UAAA,CAAW,SAAS,CAAA,EAAG;EACrC,MAAA,OAAO,KAAA;EAAA,IACX;EAAA,EACJ;EAEA,EAAA,IAAI,aAAa,MAAA,EAAQ;EACrB,IAAA,OAAO,KAAA;EAAA,EACX;EAEA,EAAA,IAAI,aAAa,QAAA,EAAU;EACvB,IAAA,OAAO,KAAA;EAAA,EACX;EAEA,EAAA,IAAI,aAAa,MAAA,EAAQ;EACrB,IAAA,OAAO,CAAA,CAAE,eAAA;EAAA,EACb;EAEA,EAAA,IAAI,MAAA,GAAS,IAAA;EACb,EAAA,CAAA,CAAE,UAAU,CAAA,GAAA,KAAO;EACf,IAAA,IAAI,MAAA,IAAU,CAAC,iBAAA,CAAkB,GAAG,CAAA,EAAG;EAAE,MAAA,MAAA,GAAS,KAAA;EAAA,IAAO;EAAA,EAC7D,CAAC,CAAA;EACD,EAAA,OAAO,MAAA;EACX;EAEA,SAAS,gBAAgB,CAAA,EAAwB;EAC7C,EAAA,IAAI,aAAa,kBAAA,EAAoB;EACjC,IAAA,IAAI,CAAA,CAAE,SAAS,eAAA,EAAiB;EAC5B,MAAA,OAAO,KAAA;EAAA,IACX;EAAA,EACJ;EACA,EAAA,IAAI,MAAA,GAAS,IAAA;EACb,EAAA,CAAA,CAAE,UAAU,CAAA,GAAA,KAAO;EACf,IAAA,IAAI,MAAA,IAAU,CAAC,eAAA,CAAgB,GAAG,CAAA,EAAG;EAAE,MAAA,MAAA,GAAS,KAAA;EAAA,IAAO;EAAA,EAC3D,CAAC,CAAA;EACD,EAAA,OAAO,MAAA;EACX;EAEA,SAAS,2BAAA,CAA4B,GAAe,UAAA,EAA0C;EAC1F,EAAA,IAAI,aAAa,kBAAA,IAAsB,UAAA,CAAW,GAAA,CAAI,CAAA,CAAE,IAAI,CAAA,EAAG;EAAE,IAAA,OAAO,KAAA;EAAA,EAAO;EAC/E,EAAA,IAAI,MAAA,GAAS,IAAA;EACb,EAAA,CAAA,CAAE,SAAA,CAAU,CAAC,GAAA,KAAQ;EACjB,IAAA,IAAI,MAAA,IAAU,CAAC,2BAAA,CAA4B,GAAA,EAAK,UAAU,CAAA,EAAG;EAAE,MAAA,MAAA,GAAS,KAAA;EAAA,IAAO;EAAA,EACnF,CAAC,CAAA;EACD,EAAA,OAAO,MAAA;EACX;EAEA,SAAS,wBAAA,CAAyB,GAAe,UAAA,EAAoC;EACjF,EAAA,OAAO,2BAAA,CAA4B,CAAA,EAAG,IAAI,GAAA,CAAI,UAAU,CAAC,CAAA;EAC7D;;ECzDA,MAAM,aAAA,GAAgB,GAAA;EAEf,SAAS,cAAA,CAAe,EAAA,EAAY,QAAA,EAA0B,YAAA,EAAsC;EACvG,EAAA,OAAO,CAAC,IAAI,QAAA,EAAU,YAAY,EAAE,MAAA,CAAO,OAAO,CAAA,CAAE,IAAA,CAAK,aAAa,CAAA;EAC1E;EAGA,SAAS,WAAA,CAAY,MAAc,KAAA,EAAiB;EAChD,EAAA,QAAQ,IAAA;EAAM;EAAA,IAEd,KAAK,QAAA;EAAU,MAAA,OAAOD,SAAc,KAAK,CAAA;EAAA,IACzC,KAAK,QAAA;EAAU,MAAA,OAAO,CAAC,KAAA;EAAA,IACvB,KAAK,SAAA;EAAW,MAAA,OAAO,CAAC,CAAC,KAAA;EAAA;EAAA,IAEzB,KAAK,OAAA;EAAS,MAAA,OAAO,KAAA,CAAM,MAAM,KAAK,CAAA;EAAA,IACtC,KAAK,WAAA,EAAa;EAEd,MAAA,OAAO,SAAA,CAAU,UAAA,CAAWA,QAAA,CAAc,KAAK,CAAC,CAAA;EAAA,IACpD;EAAA,IACA,KAAK,eAAA,EAAiB;EAElB,MAAA,OAAO,aAAA,CAAc,KAAA,CAAMA,QAAA,CAAc,KAAK,CAAC,CAAA;EAAA,IACnD;EAAA;EAEA,EAAA,OAAO,KAAA;EACX;EAEA,SAAS,oBAAA,CAAqB,KAAA,EAAe,GAAA,EAAc,GAAA,EAAc,IAAA,EAAuB;EAC5F,EAAA,IAAI,SAAS,MAAA,EAAW;EACpB,IAAA,KAAA,GAAQ,IAAA,GAAO,IAAA,CAAK,KAAA,CAAM,KAAA,GAAQ,IAAI,CAAA;EAAA,EAC1C;EACA,EAAA,IAAI,GAAA,KAAQ,MAAA,IAAa,KAAA,GAAQ,GAAA,EAAK;EAClC,IAAA,KAAA,GAAQ,GAAA;EAAA,EACZ;EACA,EAAA,IAAI,GAAA,KAAQ,MAAA,IAAa,KAAA,GAAQ,GAAA,EAAK;EAClC,IAAA,KAAA,GAAQ,GAAA;EAAA,EACZ;EACA,EAAA,OAAO,KAAA;EACX;EAEA,MAAM,MAAA,CAA6B;EAAA,EAM/B,WAAA,CAAY,IAAA,EAAY,GAAA,EAAa,KAAA,EAAgB,kBAA2B,KAAA,EAAO;EACnF,IAAA,IAAA,CAAK,IAAA,GAAO,IAAA;EACZ,IAAA,IAAA,CAAK,GAAA,GAAM,GAAA;EACX,IAAA,IAAA,CAAK,KAAA,GAAQ,KAAA;EACb,IAAA,IAAA,CAAK,eAAA,GAAkB,eAAA;EAAA,EAC3B;EAAA,EAEA,OAAO,KAAA,CAAM,IAAA,EAA8B,OAAA,EAA+C;EACtF,IAAA,IAAI,OAAO,OAAA,CAAQ,YAAA;EACnB,IAAA,IAAA,KAAA,IAAA,GAAS,SAAA,CAAA;EACT,IAAA,IAAI,IAAA,CAAK,MAAA,GAAS,CAAA,IAAK,IAAA,CAAK,SAAS,CAAA,EAAG;EACpC,MAAA,OAAO,OAAA,CAAQ,MAAM,CAAA,oDAAA,CAAsD,CAAA;EAAA,IAC/E;EAEA,IAAA,MAAM,YAAY,OAAA,CAAQ,KAAA,CAAM,IAAA,CAAK,CAAC,GAAG,CAAC,CAAA;EAC1C,IAAA,IAAI,EAAE,qBAAqB,OAAA,CAAA,EAAU;EACjC,MAAA,OAAO,OAAA,CAAQ,MAAM,CAAA,yDAAA,CAA2D,CAAA;EAAA,IACpF;EAEA,IAAA,IAAI,eAAA,GAAkB,IAAA;EACtB,IAAA,IAAI,gBAAA;EACJ,IAAA,MAAM,cAAA,GAAiBA,QAAA,CAAc,SAAA,CAAU,KAAK,CAAA;EAEpD,IAAA,IAAI,IAAA,CAAK,UAAU,CAAA,EAAG;EAClB,MAAA,MAAM,cAAc,OAAA,CAAQ,KAAA,CAAM,IAAA,CAAK,CAAC,GAAG,CAAC,CAAA;EAC5C,MAAA,IAAI,EAAE,uBAAuB,OAAA,CAAA,EAAU;EACnC,QAAA,OAAO,OAAA,CAAQ,MAAM,CAAA,sDAAA,CAAwD,CAAA;EAAA,MACjF;EAEA,MAAA,gBAAA,GAAmBA,QAAA,CAAc,YAAY,KAAK,CAAA;EAAA,IACtD;EAEA,IAAA,IAAI,QAAQ,OAAA,EAAS;EACjB,MAAA,MAAM,IAAA,GAAO,cAAA,CAAe,cAAA,EAAgB,gBAAA,EAAkB,QAAQ,MAAM,CAAA;EAC5E,MAAA,MAAM,MAAA,GAAS,OAAA,CAAQ,OAAA,CAAQ,GAAA,CAAI,IAAI,CAAA;EACvC,MAAA,IAAI,MAAA,EAAQ;EACR,QAAA,eAAA,GAAkBE,iBAAW,CAAkB,MAAA,CAAO,KAAA,IAAS,OAAO,OAAO,CAAA;EAAA,MACjF;EAAA,IACJ;EAEA,IAAA,OAAO,IAAI,MAAA,CAAO,IAAA,EAAM,cAAA,EAAgB,kBAAkB,eAAe,CAAA;EAAA,EAC7E;EAAA;EAAA,EAGA,SAAS,GAAA,EAA6B;EAClC,IAAA,MAAM,OAAO,cAAA,CAAe,IAAA,CAAK,KAAK,IAAA,CAAK,KAAA,EAAO,IAAI,KAAK,CAAA;EAC3D,IAAA,MAAM,MAAA,GAAS,GAAA,CAAI,SAAA,CAAU,IAAI,CAAA;EACjC,IAAA,IAAI,CAAC,QAAQ,OAAO,IAAA;EAEpB,IAAA,MAAM,EAAC,IAAA,EAAM,KAAA,EAAO,QAAQ,QAAA,EAAU,QAAA,EAAU,WAAS,GAAI,MAAA;EAG7D,IAAA,MAAM,YAAA,GAAe,MAAA,CAAO,OAAA,CAAQ,QAAA,CAAS,GAAG,CAAA;EAGhD,IAAA,IAAI,MAAA,GAAS,YAAA;EACb,IAAA,IAAI,KAAA,EAAO;EAEP,MAAA,MAAM,gBAAgB,GAAA,CAAI,KAAA;EAC1B,MAAA,GAAA,CAAI,KAAA,GAAA,CAAS,aAAA,IAAiB,EAAA,EAAI,KAAA,CAAM,aAAa,EAAE,KAAA,CAAM,CAAC,CAAA,CAAE,IAAA,CAAK,aAAa,CAAA;EAElF,MAAA,MAAA,GAAS,KAAA,CAAM,SAAS,GAAG,CAAA;EAC3B,MAAA,GAAA,CAAI,KAAA,GAAQ,aAAA;EAAA,IAChB;EACA,IAAA,IAAI,IAAA,EAAM;EAEN,MAAA,MAAA,GAAS,WAAA,CAAY,MAAM,MAAM,CAAA;EAAA,IACrC;EAEA,IAAA,IAAI,WAAW,MAAA,KAAc,QAAA,KAAa,UAAa,QAAA,KAAa,MAAA,IAAa,cAAc,MAAA,CAAA,EAAY;EACvG,MAAA,IAAI,OAAO,WAAW,QAAA,EAAU;EAC5B,QAAA,MAAA,GAAS,oBAAA,CAAqB,MAAA,EAAQ,QAAA,EAAU,QAAA,EAAU,SAAS,CAAA;EAAA,MACvE,CAAA,MAAA,IAAW,KAAA,CAAM,OAAA,CAAQ,MAAM,CAAA,EAAG;EAE9B,QAAA,MAAA,GAAS,MAAA,CAAO,GAAA,CAAI,CAAC,IAAA,KAAU,OAAO,IAAA,KAAS,QAAA,GAAW,oBAAA,CAAqB,IAAA,EAAM,QAAA,EAAU,QAAA,EAAU,SAAS,IAAI,IAAK,CAAA;EAAA,MAC/H;EAAA,IACJ;EAEA,IAAA,IAAI,KAAA,KAAU,UAAa,MAAA,KAAW,MAAA,IAAa,UAAU,CAAC,MAAA,CAAO,QAAA,CAAS,MAAM,CAAA,EAAG;EAGnF,MAAA,MAAA,GAAS,YAAA;EACT,MAAA,IAAI,IAAA,EAAM;EAEN,QAAA,MAAA,GAAS,WAAA,CAAY,MAAM,MAAM,CAAA;EAAA,MACrC;EAAA,IACJ;EAGA,IAAA,IAAK,IAAA,IAAQ,IAAA,KAAU,IAAA,CAAK,IAAA,IAAgC,MAAA,KAAW,MAAA,IAAa,CAAC,UAAA,CAAW,MAAA,CAAO,MAAM,CAAA,EAAG,IAAA,CAAK,IAAI,CAAA,EAAI;EAEzH,MAAA,MAAA,GAAS,WAAA,CAAY,IAAA,CAAK,IAAA,CAAK,IAAA,EAAM,MAAM,CAAA;EAAA,IAC/C;EAEA,IAAA,OAAO,MAAA;EAAA,EACX;EAAA,EAEA,SAAA,GAAY;EAAA,EAAE;EAAA,EAEd,aAAA,GAAyB;EACrB,IAAA,OAAO,KAAA;EAAA,EACX;EAAA,EAEA,SAAA,GAAkC;EAC9B,IAAA,MAAM,GAAA,GAAM,CAAC,QAAA,EAAU,IAAA,CAAK,GAAG,CAAA;EAC/B,IAAA,IAAI,KAAK,KAAA,EAAO;EACZ,MAAA,GAAA,CAAI,MAAA,CAAO,KAAK,KAAK,CAAA;EAAA,IACzB;EACA,IAAA,OAAO,GAAA;EAAA,EACX;EACJ;;ECnKA,MAAM,GAAA,CAA0B;EAAA,EAK5B,WAAA,CAAY,MAAc,eAAA,EAA6B;EACnD,IAAA,IAAA,CAAK,OAAO,eAAA,CAAgB,IAAA;EAC5B,IAAA,IAAA,CAAK,IAAA,GAAO,IAAA;EACZ,IAAA,IAAA,CAAK,eAAA,GAAkB,eAAA;EAAA,EAC3B;EAAA,EAEA,OAAO,KAAA,CAAM,IAAA,EAA8B,OAAA,EAAqC;EAC5E,IAAA,IAAI,KAAK,MAAA,KAAW,CAAA,IAAK,OAAO,IAAA,CAAK,CAAC,CAAA,KAAM,QAAA;EACxC,MAAA,OAAO,OAAA,CAAQ,MAAM,CAAA,8DAAA,CAAgE,CAAA;EAEzF,IAAA,MAAM,IAAA,GAAO,KAAK,CAAC,CAAA;EACnB,IAAA,IAAI,CAAC,OAAA,CAAQ,KAAA,CAAM,GAAA,CAAI,IAAI,CAAA,EAAG;EAC1B,MAAA,OAAO,QAAQ,KAAA,CAAM,CAAA,kBAAA,EAAqB,IAAI,CAAA,cAAA,EAAiB,IAAI,sEAAsE,CAAC,CAAA;EAAA,IAC9I;EAEA,IAAA,OAAO,IAAI,GAAA,CAAI,IAAA,EAAM,QAAQ,KAAA,CAAM,GAAA,CAAI,IAAI,CAAC,CAAA;EAAA,EAChD;EAAA;EAAA,EAGA,SAAS,GAAA,EAA6B;EAClC,IAAA,OAAO,IAAA,CAAK,eAAA,CAAgB,QAAA,CAAS,GAAG,CAAA;EAAA,EAC5C;EAAA,EAEA,SAAA,GAAY;EAAA,EAAC;EAAA,EAEb,aAAA,GAAyB;EACrB,IAAA,OAAO,KAAA;EAAA,EACX;EAAA,EAEA,SAAA,GAA2B;EACvB,IAAA,OAAO,CAAC,KAAA,EAAO,IAAA,CAAK,IAAI,CAAA;EAAA,EAC5B;EACJ;;ECnBA,MAAM,cAAA,CAAe;EAAA,EAejB,WAAA,CACI,QAAA,EACA,IAAA,GAA+B,IAC/B,YAAA,EACA,KAAA,GAAe,IAAI,KAAA,IACnB,MAAA,GAA8B,EAAC,EAC/B,MAAA,EACA,SACA,iBAAA,EACF;EACE,IAAA,IAAA,CAAK,QAAA,GAAW,QAAA;EAChB,IAAA,IAAA,CAAK,IAAA,GAAO,IAAA;EACZ,IAAA,IAAA,CAAK,KAAA,GAAQ,KAAA;EACb,IAAA,IAAA,CAAK,MAAA,GAAS,MAAA;EACd,IAAA,IAAA,CAAK,YAAA,GAAe,YAAA;EACpB,IAAA,IAAA,CAAK,MAAA,GAAS,MAAA;EACd,IAAA,IAAA,CAAK,OAAA,GAAU,OAAA;EACf,IAAA,IAAA,CAAK,iBAAA,GAAoB,iBAAA;EAAA,EAC7B;EAAA,EAEA,IAAI,GAAA,GAAc;EACd,IAAA,IAAI,GAAA,GAAM,EAAA;EACV,IAAA,KAAA,IAAS,IAAI,CAAA,EAAG,CAAA,GAAI,IAAA,CAAK,IAAA,CAAK,QAAQ,CAAA,EAAA,EAAK;EACvC,MAAA,MAAM,IAAA,GAAO,IAAA,CAAK,IAAA,CAAK,CAAC,CAAA;EACxB,MAAA,GAAA,IAAO,OAAO,IAAA,KAAS,QAAA,GAAW,KAAK,IAAI,CAAA,EAAA,CAAA,GAAO,IAAI,IAAI,CAAA,CAAA,CAAA;EAAA,IAC9D;EACA,IAAA,OAAO,GAAA;EAAA,EACX;EAAA;EAAA;EAAA;EAAA;EAAA;EAAA;EAAA;EAAA,EASA,MACI,IAAA,EACA,KAAA,EACA,cACA,QAAA,EACA,OAAA,GAEI,EAAC,EACmB;EACxB,IAAA,IAAI,SAAS,YAAA,EAAc;EACvB,MAAA,MAAM,mBAAmB,IAAA,CAAK,YAAA;EAC9B,MAAA,MAAM,YAAY,IAAA,CAAK,KAAA;EACvB,MAAA,IAAI,UAAU,IAAA,CAAK,KAAA,GAAQ,IAAA,CAAK,KAAA,CAAM,OAAO,QAAQ,CAAA;EACrD,MAAA,IAAA,CAAK,eAAe,YAAA,IAAgB,IAAA;EACpC,MAAA,MAAM,MAAA,GAAS,OAAO,KAAA,KAAU,QAAA;EAChC,MAAA,IAAI,MAAA,EAAQ,IAAA,CAAK,IAAA,CAAK,IAAA,CAAK,KAAK,CAAA;EAChC,MAAA,MAAM,MAAA,GAAS,IAAA,CAAK,MAAA,CAAO,IAAA,EAAM,OAAO,CAAA;EACxC,MAAA,IAAI,MAAA,EAAQ,IAAA,CAAK,IAAA,CAAK,GAAA,EAAI;EAC1B,MAAA,IAAA,CAAK,YAAA,GAAe,gBAAA;EACpB,MAAA,IAAA,CAAK,KAAA,GAAQ,SAAA;EACb,MAAA,OAAO,MAAA;EAAA,IACX;EACA,IAAA,OAAO,IAAA,CAAK,MAAA,CAAO,IAAA,EAAM,OAAO,CAAA;EAAA,EACpC;EAAA;EAAA;EAAA;EAAA;EAAA;EAAA;EAAA;EAAA;EAAA,EAUA,gBAAA,CACI,MACA,KAAA,EACA,GAAA,EACA,cACA,QAAA,EACA,OAAA,GAEI,EAAC,EACmB;EACxB,IAAA,MAAM,mBAAmB,IAAA,CAAK,YAAA;EAC9B,IAAA,MAAM,YAAY,IAAA,CAAK,KAAA;EACvB,IAAA,IAAI,UAAU,IAAA,CAAK,KAAA,GAAQ,IAAA,CAAK,KAAA,CAAM,OAAO,QAAQ,CAAA;EACrD,IAAA,IAAA,CAAK,eAAe,YAAA,IAAgB,IAAA;EACpC,IAAA,IAAA,CAAK,IAAA,CAAK,KAAK,KAAK,CAAA;EACpB,IAAA,IAAA,CAAK,IAAA,CAAK,KAAK,GAAG,CAAA;EAClB,IAAA,MAAM,MAAA,GAAS,IAAA,CAAK,MAAA,CAAO,IAAA,EAAM,OAAO,CAAA;EACxC,IAAA,IAAA,CAAK,KAAK,GAAA,EAAI;EACd,IAAA,IAAA,CAAK,KAAK,GAAA,EAAI;EACd,IAAA,IAAA,CAAK,YAAA,GAAe,gBAAA;EACpB,IAAA,IAAA,CAAK,KAAA,GAAQ,SAAA;EACb,IAAA,OAAO,MAAA;EAAA,EACX;EAAA,EAEA,MAAA,CACI,MACA,OAAA,EAGwB;EACxB,IAAA,IAAI,IAAA,KAAS,IAAA,IAAQ,OAAO,IAAA,KAAS,QAAA,IAAY,OAAO,IAAA,KAAS,SAAA,IAAa,OAAO,IAAA,KAAS,QAAA,EAAU;EACpG,MAAA,IAAA,GAAO,CAAC,WAAW,IAAI,CAAA;EAAA,IAC3B;EAEA,IAAA,IAAI,KAAA,CAAM,OAAA,CAAQ,IAAI,CAAA,EAAG;EACrB,MAAA,IAAI,IAAA,CAAK,WAAW,CAAA,EAAG;EACnB,QAAA,OAAO,IAAA,CAAK,MAAM,CAAA,gGAAA,CAAkG,CAAA;EAAA,MACxH;EAEA,MAAA,MAAM,OAAO,OAAO,IAAA,CAAK,CAAC,CAAA,KAAM,QAAA,IAAY,OAAO,MAAA,CAAO,IAAA,CAAK,UAAU,IAAA,CAAK,CAAC,CAAC,CAAA,GAAI,IAAA,CAAK,SAAS,IAAA,CAAK,CAAC,CAAC,CAAA,GAAI,MAAA;EAC7G,MAAA,IAAI,IAAA,EAAM;EACN,QAAA,IAAI,MAAA,GAAS,IAAA,CAAK,KAAA,CAAM,IAAA,EAAM,IAAI,CAAA;EAClC,QAAA,IAAI,CAAC,QAAQ,OAAO,IAAA;EAEpB,QAAA,IAAI,KAAK,YAAA,EAAc;EACnB,UAAA,MAAM,WAAW,IAAA,CAAK,YAAA;EACtB,UAAA,MAAM,SAAS,MAAA,CAAO,IAAA;EAUtB,UAAA,IAAA,CAAK,SAAS,IAAA,KAAS,QAAA,IAAY,QAAA,CAAS,IAAA,KAAS,YAAY,QAAA,CAAS,IAAA,KAAS,SAAA,IAAa,QAAA,CAAS,SAAS,QAAA,IAAY,QAAA,CAAS,SAAS,OAAA,KAAY,MAAA,CAAO,SAAS,OAAA,EAAS;EACjL,YAAA,MAAA,GAAS,QAAA,CAAS,MAAA,EAAQ,QAAA,EAAU,OAAA,CAAQ,kBAAkB,QAAQ,CAAA;EAAA,UAC1E,CAAA,MAAA,IAAA,CAAY,QAAA,CAAS,IAAA,KAAS,OAAA,IAAW,SAAS,IAAA,KAAS,WAAA,IAAe,QAAA,CAAS,IAAA,KAAS,qBAAqB,MAAA,CAAO,IAAA,KAAS,OAAA,IAAW,MAAA,CAAO,SAAS,QAAA,CAAA,EAAW;EACnK,YAAA,MAAA,GAAS,QAAA,CAAS,MAAA,EAAQ,QAAA,EAAU,OAAA,CAAQ,kBAAkB,QAAQ,CAAA;EAAA,UAC1E,CAAA,MAAA,IAAW,IAAA,CAAK,YAAA,CAAa,QAAA,EAAU,MAAM,CAAA,EAAG;EAC5C,YAAA,OAAO,IAAA;EAAA,UACX;EAAA,QACJ;EAMA,QAAA,IAAI,EAAE,kBAAkB,OAAA,CAAA,IAAa,MAAA,CAAO,KAAK,IAAA,KAAS,eAAA,IAAoB,UAAA,CAAW,MAAM,CAAA,EAAG;EAC9F,UAAA,MAAM,EAAA,GAAK,IAAI,iBAAA,CAAkB,IAAA,CAAK,QAAQ,IAAA,CAAK,OAAA,EAAS,KAAK,iBAAiB,CAAA;EAClF,UAAA,IAAI;EAEA,YAAA,MAAA,GAAS,IAAI,OAAA,CAAQ,MAAA,CAAO,MAAM,MAAA,CAAO,QAAA,CAAS,EAAE,CAAC,CAAA;EAAA,UACzD,SAAS,CAAA,EAAG;EACR,YAAA,IAAA,CAAK,KAAA,CAAO,EAAY,OAAO,CAAA;EAC/B,YAAA,OAAO,IAAA;EAAA,UACX;EAAA,QACJ;EAEA,QAAA,OAAO,MAAA;EAAA,MACX;EAGA,MAAA,OAAO,SAAS,KAAA,CAAM,CAAC,UAAA,EAAY,IAAI,GAAG,IAAI,CAAA;EAAA,IAClD,CAAA,MAAA,IAAW,OAAO,IAAA,KAAS,WAAA,EAAa;EACpC,MAAA,OAAO,IAAA,CAAK,MAAM,CAAA,4CAAA,CAA8C,CAAA;EAAA,IACpE,CAAA,MAAA,IAAW,OAAO,IAAA,KAAS,QAAA,EAAU;EACjC,MAAA,OAAO,IAAA,CAAK,MAAM,CAAA,qDAAA,CAAuD,CAAA;EAAA,IAC7E,CAAA,MAAO;EACH,MAAA,OAAO,IAAA,CAAK,KAAA,CAAM,CAAA,6BAAA,EAAgC,OAAO,IAAI,CAAA,SAAA,CAAW,CAAA;EAAA,IAC5E;EAAA,EACJ;EAAA;EAAA;EAAA;EAAA;EAAA;EAAA;EAAA;EAAA;EAAA,EAUA,MAAA,CACI,KAAA,EACA,GAAA,EACA,YAAA,EACA,QAAA,EACc;EACd,IAAA,MAAM,QAAQ,QAAA,GAAW,IAAA,CAAK,MAAM,MAAA,CAAO,QAAQ,IAAI,IAAA,CAAK,KAAA;EAC5D,IAAA,MAAM,IAAA,GAAO,IAAA,CAAK,IAAA,CAAK,KAAA,EAAM;EAC7B,IAAA,IAAI,OAAO,KAAA,KAAU,QAAA,EAAU,IAAA,CAAK,KAAK,KAAK,CAAA;EAC9C,IAAA,IAAI,OAAO,GAAA,KAAQ,QAAA,EAAU,IAAA,CAAK,KAAK,GAAG,CAAA;EAC1C,IAAA,OAAO,IAAI,cAAA;EAAA,MACP,IAAA,CAAK,QAAA;EAAA,MACL,IAAA;EAAA,MACA,YAAA,IAAgB,IAAA;EAAA,MAChB,KAAA;EAAA,MACA,IAAA,CAAK,MAAA;EAAA,MACL,IAAA,CAAK,MAAA;EAAA,MACL,IAAA,CAAK,OAAA;EAAA,MACL,IAAA,CAAK;EAAA,KACT;EAAA,EACJ;EAAA;EAAA;EAAA;EAAA;EAAA;EAAA;EAAA,EAQA,iBAAA,GAAoC;EAChC,IAAA,OAAO,IAAI,cAAA;EAAA,MACP,IAAA,CAAK,QAAA;EAAA,MACL,IAAA,CAAK,KAAK,KAAA,EAAM;EAAA,MAChB,IAAA;EAAA,MACA,IAAA,CAAK,KAAA;EAAA,MACL,EAAC;EAAA,MACD,IAAA,CAAK,MAAA;EAAA,MACL,IAAA,CAAK,OAAA;EAAA,MACL,IAAA,CAAK;EAAA,KACT;EAAA,EACJ;EAAA;EAAA;EAAA;EAAA;EAAA;EAAA;EAAA;EAAA,EASA,KAAA,CAAM,UAAkB,IAAA,EAAqB;EACzC,IAAA,MAAM,GAAA,GAAM,CAAA,EAAG,IAAA,CAAK,GAAG,GAAG,IAAA,CAAK,GAAA,CAAI,CAAA,CAAA,KAAK,CAAA,CAAA,EAAI,CAAC,CAAA,CAAA,CAAG,CAAA,CAAE,IAAA,CAAK,EAAE,CAAC,CAAA,CAAA;EAC1D,IAAA,IAAA,CAAK,OAAO,IAAA,CAAK,IAAIC,cAAA,CAAa,GAAA,EAAK,KAAK,CAAC,CAAA;EAAA,EACjD;EAAA;EAAA;EAAA;EAAA;EAAA,EAMA,YAAA,CAAa,QAAA,EAAgB,CAAA,EAAS,KAAA,EAA2C;EAC7E,IAAA,MAAM,KAAA,GAAQ,YAAA,CAAa,QAAA,EAAU,CAAC,CAAA;EACtC,IAAA,IAAI,KAAA,EAAO,IAAA,CAAK,KAAA,CAAM,KAAA,EAAO,GAAI,OAAO,KAAA,KAAU,QAAA,GAAW,CAAC,KAAK,CAAA,GAAI,EAAG,CAAA;EAC1E,IAAA,OAAO,KAAA;EAAA,EACX;EACJ;EAIA,MAAM,8BAAA,uBAAqC,GAAA,CAAI;EAAA,EAC3C,MAAA;EAAA,EAAQ,iBAAA;EAAA,EAAmB,WAAA;EAAA,EAAa,eAAA;EAAA,EAAiB,cAAA;EAAA,EACzD,qBAAA;EAAA,EAAuB,aAAA;EAAA,EAAe,qBAAA;EAAA,EAAuB,OAAA;EAAA,EAC7D,sBAAA;EAAA,EAAwB,eAAA;EAAA,EAAiB,uBAAA;EAAA,EAAyB;EACtE,CAAC,CAAA;EAED,SAAS,QAAA,CAAS,MAAA,EAAoB,IAAA,EAAY,cAAA,EAA8C;EAC5F,EAAA,IAAI,mBAAmB,QAAA,EAAU;EAC7B,IAAA,OAAO,IAAI,SAAA,CAAU,IAAA,EAAM,CAAC,MAAM,CAAC,CAAA;EAAA,EACvC,CAAA,MAAA,IAAW,mBAAmB,QAAA,EAAU;EACpC,IAAA,OAAO,IAAI,QAAA,CAAS,IAAA,EAAM,CAAC,MAAM,CAAC,CAAA;EAAA,EACtC,CAAA,MAAO;EACH,IAAA,OAAO,MAAA;EAAA,EACX;EACJ;EAEA,SAAS,WAAW,UAAA,EAAwB;EACxC,EAAA,IAAI,sBAAsB,GAAA,EAAK;EAC3B,IAAA,OAAO,UAAA,CAAW,WAAW,eAAe,CAAA;EAAA,EAChD,CAAA,MAAA,IAAW,UAAA,YAAsB,kBAAA,IAAsB,UAAA,CAAW,SAAS,OAAA,EAAS;EAChF,IAAA,OAAO,KAAA;EAAA,EACX,CAAA,MAAA,IAAW,sBAAsB,kBAAA,EAAoB;EAIjD,IAAA,OAAO,KAAA;EAAA,EACX,CAAA,MAAA,IAAW,sBAAsB,MAAA,EAAQ;EACrC,IAAA,OAAO,KAAA;EAAA,EACX,CAAA,MAAA,IAAW,sBAAsB,QAAA,EAAU;EACvC,IAAA,OAAO,KAAA;EAAA,EACX,CAAA,MAAA,IAAW,sBAAsB,MAAA,EAAQ;EACrC,IAAA,OAAO,KAAA;EAAA,EACX;EAEA,EAAA,MAAM,gBAAA,GAAmB,UAAA,YAAsB,QAAA,IAC3C,UAAA,YAAsB,SAAA;EAE1B,EAAA,IAAI,gBAAA,GAAmB,IAAA;EACvB,EAAA,UAAA,CAAW,UAAU,CAAA,KAAA,KAAS;EAQ1B,IAAA,IAAI,gBAAA,EAAkB;EAClB,MAAA,gBAAA,GAAmB,gBAAA,IAAoB,WAAW,KAAK,CAAA;EAAA,IAC3D,CAAA,MAAO;EACH,MAAA,gBAAA,GAAmB,oBAAoB,KAAA,YAAiB,OAAA;EAAA,IAC5D;EAAA,EACJ,CAAC,CAAA;EACD,EAAA,IAAI,CAAC,gBAAA,EAAkB;EACnB,IAAA,OAAO,KAAA;EAAA,EACX;EAEA,EAAA,OAAO,iBAAA,CAAkB,UAAU,CAAA,IAC/B,2BAAA,CAA4B,YAAY,8BAA8B,CAAA;EAC9E;;ECnUO,SAAS,yBAAA,CAA0B,OAAsB,KAAA,EAAuB;EACnF,EAAA,MAAM,SAAA,GAAY,MAAM,MAAA,GAAS,CAAA;EACjC,EAAA,IAAI,UAAA,GAAa,CAAA;EACjB,EAAA,IAAI,UAAA,GAAa,SAAA;EACjB,EAAA,IAAI,YAAA,GAAe,CAAA;EACnB,EAAA,IAAI,YAAA;EACJ,EAAA,IAAI,SAAA;EAEJ,EAAA,OAAO,cAAc,UAAA,EAAY;EAC7B,IAAA,YAAA,GAAe,IAAA,CAAK,KAAA,CAAA,CAAO,UAAA,GAAa,UAAA,IAAc,CAAC,CAAA;EACvD,IAAA,YAAA,GAAe,MAAM,YAAY,CAAA;EACjC,IAAA,SAAA,GAAY,KAAA,CAAM,eAAe,CAAC,CAAA;EAElC,IAAA,IAAI,gBAAgB,KAAA,EAAO;EACvB,MAAA,IAAI,YAAA,KAAiB,SAAA,IAAa,KAAA,GAAQ,SAAA,EAAW;EACjD,QAAA,OAAO,YAAA;EAAA,MACX;EAEA,MAAA,UAAA,GAAa,YAAA,GAAe,CAAA;EAAA,IAChC,CAAA,MAAA,IAAW,eAAe,KAAA,EAAO;EAC7B,MAAA,UAAA,GAAa,YAAA,GAAe,CAAA;EAAA,IAChC,CAAA,MAAO;EACH,MAAA,MAAM,IAAI,aAAa,wBAAwB,CAAA;EAAA,IACnD;EAAA,EACJ;EAEA,EAAA,OAAO,CAAA;EACX;;EC5BA,MAAM,IAAA,CAA2B;EAAA,EAO7B,WAAA,CAAY,IAAA,EAAY,KAAA,EAAmB,KAAA,EAAc;EACrD,IAAA,IAAA,CAAK,IAAA,GAAO,IAAA;EACZ,IAAA,IAAA,CAAK,KAAA,GAAQ,KAAA;EAEb,IAAA,IAAA,CAAK,SAAS,EAAC;EACf,IAAA,IAAA,CAAK,UAAU,EAAC;EAChB,IAAA,KAAA,MAAW,CAAC,KAAA,EAAO,UAAU,CAAA,IAAK,KAAA,EAAO;EACrC,MAAA,IAAA,CAAK,MAAA,CAAO,KAAK,KAAK,CAAA;EACtB,MAAA,IAAA,CAAK,OAAA,CAAQ,KAAK,UAAU,CAAA;EAAA,IAChC;EAAA,EACJ;EAAA,EAEA,OAAO,KAAA,CAAM,IAAA,EAA8B,OAAA,EAA6C;EACpF,IAAA,IAAI,IAAA,CAAK,MAAA,GAAS,CAAA,GAAI,CAAA,EAAG;EACrB,MAAA,OAAO,QAAQ,KAAA,CAAM,CAAA,8CAAA,EAAiD,IAAA,CAAK,MAAA,GAAS,CAAC,CAAA,CAAA,CAAG,CAAA;EAAA,IAC5F;EAEA,IAAA,IAAA,CAAK,IAAA,CAAK,MAAA,GAAS,CAAA,IAAK,CAAA,KAAM,CAAA,EAAG;EAC7B,MAAA,OAAO,OAAA,CAAQ,MAAM,CAAA,qCAAA,CAAuC,CAAA;EAAA,IAChE;EAEA,IAAA,MAAM,QAAQ,OAAA,CAAQ,KAAA,CAAM,KAAK,CAAC,CAAA,EAAG,GAAG,UAAU,CAAA;EAClD,IAAA,IAAI,CAAC,OAAO,OAAO,IAAA;EAEnB,IAAA,MAAM,QAAe,EAAC;EAEtB,IAAA,IAAI,UAAA,GAAmB,IAAA;EACvB,IAAA,IAAI,OAAA,CAAQ,YAAA,IAAgB,OAAA,CAAQ,YAAA,CAAa,SAAS,OAAA,EAAS;EAC/D,MAAA,UAAA,GAAa,OAAA,CAAQ,YAAA;EAAA,IACzB;EAEA,IAAA,KAAA,IAAS,IAAI,CAAA,EAAG,CAAA,GAAI,IAAA,CAAK,MAAA,EAAQ,KAAK,CAAA,EAAG;EACrC,MAAA,MAAM,KAAA,GAAQ,CAAA,KAAM,CAAA,GAAI,CAAA,QAAA,GAAY,KAAK,CAAC,CAAA;EAC1C,MAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,CAAA,GAAI,CAAC,CAAA;EAExB,MAAA,MAAM,QAAA,GAAW,CAAA;EACjB,MAAA,MAAM,WAAW,CAAA,GAAI,CAAA;EAErB,MAAA,IAAI,OAAO,UAAU,QAAA,EAAU;EAC3B,QAAA,OAAO,OAAA,CAAQ,KAAA,CAAM,yIAAA,EAA2I,QAAQ,CAAA;EAAA,MAC5K;EAEA,MAAA,IAAI,KAAA,CAAM,UAAU,KAAA,CAAM,EAAA,CAAG,EAAE,CAAA,CAAE,CAAC,KAAK,KAAA,EAAO;EAC1C,QAAA,OAAO,OAAA,CAAQ,KAAA,CAAM,2GAAA,EAA6G,QAAQ,CAAA;EAAA,MAC9I;EAEA,MAAA,MAAM,MAAA,GAAS,OAAA,CAAQ,KAAA,CAAM,KAAA,EAAO,UAAU,UAAU,CAAA;EACxD,MAAA,IAAI,CAAC,QAAQ,OAAO,IAAA;EACpB,MAAA,UAAA,GAAa,cAAc,MAAA,CAAO,IAAA;EAClC,MAAA,KAAA,CAAM,IAAA,CAAK,CAAC,KAAA,EAAO,MAAM,CAAC,CAAA;EAAA,IAC9B;EAEA,IAAA,OAAO,IAAI,IAAA,CAAK,UAAA,EAAY,KAAA,EAAO,KAAK,CAAA;EAAA,EAC5C;EAAA;EAAA,EAGA,SAAS,GAAA,EAA6B;EAClC,IAAA,MAAM,SAAS,IAAA,CAAK,MAAA;EACpB,IAAA,MAAM,UAAU,IAAA,CAAK,OAAA;EAErB,IAAA,IAAI,MAAA,CAAO,WAAW,CAAA,EAAG;EACrB,MAAA,OAAO,OAAA,CAAQ,CAAC,CAAA,CAAE,QAAA,CAAS,GAAG,CAAA;EAAA,IAClC;EAEA,IAAA,MAAM,KAAA,GAAS,IAAA,CAAK,KAAA,CAAM,QAAA,CAAS,GAAG,CAAA;EACtC,IAAA,IAAI,KAAA,IAAS,MAAA,CAAO,CAAC,CAAA,EAAG;EACpB,MAAA,OAAO,OAAA,CAAQ,CAAC,CAAA,CAAE,QAAA,CAAS,GAAG,CAAA;EAAA,IAClC;EAEA,IAAA,MAAM,YAAY,MAAA,CAAO,MAAA;EACzB,IAAA,IAAI,KAAA,IAAS,MAAA,CAAO,SAAA,GAAY,CAAC,CAAA,EAAG;EAChC,MAAA,OAAO,OAAA,CAAQ,SAAA,GAAY,CAAC,CAAA,CAAE,SAAS,GAAG,CAAA;EAAA,IAC9C;EAEA,IAAA,MAAM,KAAA,GAAQ,yBAAA,CAA0B,MAAA,EAAQ,KAAK,CAAA;EACrD,IAAA,OAAO,OAAA,CAAQ,KAAK,CAAA,CAAE,QAAA,CAAS,GAAG,CAAA;EAAA,EACtC;EAAA,EAEA,UAAU,EAAA,EAA6B;EACnC,IAAA,EAAA,CAAG,KAAK,KAAK,CAAA;EACb,IAAA,KAAA,MAAW,UAAA,IAAc,KAAK,OAAA,EAAS;EACnC,MAAA,EAAA,CAAG,UAAU,CAAA;EAAA,IACjB;EAAA,EACJ;EAAA,EAEA,aAAA,GAAyB;EACrB,IAAA,OAAO,KAAK,OAAA,CAAQ,KAAA,CAAM,CAAA,GAAA,KAAO,GAAA,CAAI,eAAe,CAAA;EAAA,EACxD;EAAA,EAEA,SAAA,GAAkC;EAC9B,IAAA,MAAM,aAAa,CAAC,MAAA,EAAQ,IAAA,CAAK,KAAA,CAAM,WAAW,CAAA;EAClD,IAAA,KAAA,IAAS,IAAI,CAAA,EAAG,CAAA,GAAI,IAAA,CAAK,MAAA,CAAO,QAAQ,CAAA,EAAA,EAAK;EACzC,MAAA,IAAI,IAAI,CAAA,EAAG;EACP,QAAA,UAAA,CAAW,IAAA,CAAK,IAAA,CAAK,MAAA,CAAO,CAAC,CAAC,CAAA;EAAA,MAClC;EACA,MAAA,UAAA,CAAW,KAAK,IAAA,CAAK,OAAA,CAAQ,CAAC,CAAA,CAAE,WAAW,CAAA;EAAA,IAC/C;EACA,IAAA,OAAO,UAAA;EAAA,EACX;EACJ;;EClHe,SAAS,UAAU,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE;EACvD;EACA,IAAI,MAAM,EAAE,GAAG,CAAC,GAAG,GAAG;EACtB,IAAI,MAAM,EAAE,GAAG,CAAC,IAAI,GAAG,GAAG,GAAG,CAAC,GAAG,EAAE;EACnC,IAAI,MAAM,EAAE,GAAG,CAAC,GAAG,EAAE,GAAG,EAAE;;EAE1B,IAAI,MAAM,EAAE,GAAG,CAAC,GAAG,GAAG;EACtB,IAAI,MAAM,EAAE,GAAG,CAAC,IAAI,GAAG,GAAG,GAAG,CAAC,GAAG,EAAE;EACnC,IAAI,MAAM,EAAE,GAAG,CAAC,GAAG,EAAE,GAAG,EAAE;;EAE1B,IAAI,OAAO,SAAS,KAAK,CAAC,CAAC,EAAE,OAAO,GAAG,IAAI,EAAE;EAC7C,QAAQ,IAAI,CAAC,IAAI,CAAC,EAAE,OAAO,CAAC;EAC5B,QAAQ,IAAI,CAAC,IAAI,CAAC,EAAE,OAAO,CAAC;;EAE5B,QAAQ,IAAI,CAAC,GAAG,CAAC;;EAEjB;EACA;EACA,QAAQ,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE;EACpC,YAAY,MAAM,EAAE,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,GAAG,CAAC;EACvD,YAAY,IAAI,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,EAAE,OAAO,CAAC,CAAC,EAAE,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC;;EAE3E,YAAY,MAAM,EAAE,GAAG,CAAC,CAAC,GAAG,EAAE,GAAG,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,GAAG,EAAE;EACrD,YAAY,IAAI,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,EAAE;;EAErC,YAAY,CAAC,IAAI,EAAE,GAAG,EAAE;EACxB,QAAQ;;EAER;EACA,QAAQ,IAAI,EAAE,GAAG,CAAC;EAClB,QAAQ,IAAI,EAAE,GAAG,CAAC;EAClB,QAAQ,CAAC,GAAG,CAAC;;EAEb,QAAQ,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE;EACrC,YAAY,MAAM,EAAE,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC;EACnD,YAAY,IAAI,IAAI,CAAC,GAAG,CAAC,EAAE,GAAG,CAAC,CAAC,GAAG,OAAO,EAAE;;EAE5C,YAAY,IAAI,CAAC,GAAG,EAAE,EAAE,EAAE,GAAG,CAAC;EAC9B,iBAAiB,EAAE,GAAG,CAAC;;EAEvB,YAAY,CAAC,GAAG,CAAC,EAAE,GAAG,EAAE,IAAI,GAAG;EAC/B,QAAQ;;EAER,QAAQ,OAAO,CAAC,CAAC,EAAE,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC;EAC3C,IAAI,CAAC;EACL;;ECzCO,SAAS,KAAA,CAAM,IAAA,EAAa,EAAA,EAAW,CAAA,EAAkB;EAC5D,EAAA,OAAO,IAAI,KAAA;EAAA,IACPC,IAAA,CAAO,IAAA,CAAK,CAAA,EAAG,EAAA,CAAG,GAAG,CAAC,CAAA;EAAA,IACtBA,IAAA,CAAO,IAAA,CAAK,CAAA,EAAG,EAAA,CAAG,GAAG,CAAC,CAAA;EAAA,IACtBA,IAAA,CAAO,IAAA,CAAK,CAAA,EAAG,EAAA,CAAG,GAAG,CAAC,CAAA;EAAA,IACtBA,IAAA,CAAO,IAAA,CAAK,CAAA,EAAG,EAAA,CAAG,GAAG,CAAC;EAAA,GAC1B;EACJ;EAEO,SAAS,KAAA,CAAM,IAAA,EAAqB,EAAA,EAAmB,CAAA,EAA0B;EACpF,EAAA,OAAO,IAAA,CAAK,GAAA,CAAI,CAAC,CAAA,EAAG,CAAA,KAAM;EACtB,IAAA,OAAOA,IAAA,CAAO,CAAA,EAAG,EAAA,CAAG,CAAC,GAAI,CAAC,CAAA;EAAA,EAC9B,CAAC,CAAA;EACL;;;;;;;;;ECAA,MAAM,EAAA,GAAK,OAAA,EACP,EAAA,GAAK,CAAA,EACL,EAAA,GAAK,OAAA,EACL,EAAA,GAAK,CAAA,GAAI,EAAA,EACT,EAAA,GAAK,CAAA,GAAI,EAAA,EACT,EAAA,GAAK,IAAI,EAAA,GAAK,EAAA,EACd,EAAA,GAAK,EAAA,GAAK,EAAA,GAAK,EAAA,EACf,OAAA,GAAU,IAAA,CAAK,EAAA,GAAK,GAAA,EACpB,OAAA,GAAU,GAAA,GAAM,IAAA,CAAK,EAAA;EAGzB,SAAS,QAAQ,CAAA,EAAW;EACxB,EAAA,OAAO,CAAA,GAAI,KAAK,IAAA,CAAK,GAAA,CAAI,GAAG,CAAA,GAAI,CAAC,CAAA,GAAI,CAAA,GAAI,EAAA,GAAK,EAAA;EAClD;EAEA,SAAS,QAAQ,CAAA,EAAW;EACxB,EAAA,OAAO,IAAI,EAAA,GAAK,CAAA,GAAI,CAAA,GAAI,CAAA,GAAI,MAAM,CAAA,GAAI,EAAA,CAAA;EAC1C;EAEA,SAAS,QAAQ,CAAA,EAAW;EACxB,EAAA,OAAO,GAAA,IAAO,CAAA,IAAK,QAAA,GAAY,KAAA,GAAQ,CAAA,GAAI,KAAA,GAAQ,IAAA,CAAK,GAAA,CAAI,CAAA,EAAG,CAAA,GAAI,GAAG,CAAA,GAAI,KAAA,CAAA;EAC9E;EAEA,SAAS,QAAQ,CAAA,EAAW;EACxB,EAAA,CAAA,IAAK,GAAA;EACL,EAAA,OAAO,CAAA,IAAK,UAAU,CAAA,GAAI,KAAA,GAAQ,KAAK,GAAA,CAAA,CAAK,CAAA,GAAI,KAAA,IAAS,KAAA,EAAO,GAAG,CAAA;EACvE;EAGA,SAAS,SAAS,QAAA,EAA2B;EACzC,EAAA,MAAM,IAAI,OAAA,CAAQ,QAAA,CAAS,CAAC,CAAA,EACxB,CAAA,GAAI,QAAQ,QAAA,CAAS,CAAC,GACtB,CAAA,GAAI,OAAA,CAAQ,SAAS,CAAC,CAAA,EACtB,IAAI,OAAA,CAAA,CAAS,SAAA,GAAY,IAAI,SAAA,GAAY,CAAA,GAAI,YAAY,CAAA,IAAK,EAAE,GAChE,CAAA,GAAI,OAAA,CAAA,CAAS,YAAY,CAAA,GAAI,SAAA,GAAY,IAAI,QAAA,GAAY,CAAA,IAAK,EAAE,CAAA,EAChE,CAAA,GAAI,SAAS,SAAA,GAAY,CAAA,GAAI,WAAY,CAAA,GAAI,SAAA,GAAY,KAAK,EAAE,CAAA;EAEpE,EAAA,OAAO;EAAA,IACH,CAAA,EAAG,MAAM,CAAA,GAAI,EAAA;EAAA,IACb,CAAA,EAAG,OAAO,CAAA,GAAI,CAAA,CAAA;EAAA,IACd,CAAA,EAAG,OAAO,CAAA,GAAI,CAAA,CAAA;EAAA,IACd,OAAO,QAAA,CAAS;EAAA,GACpB;EACJ;EAEA,SAAS,SAAS,QAAA,EAA2B;EACzC,EAAA,IAAI,CAAA,GAAA,CAAK,SAAS,CAAA,GAAI,EAAA,IAAM,KACxB,CAAA,GAAI,KAAA,CAAM,QAAA,CAAS,CAAC,CAAA,GAAI,CAAA,GAAI,IAAI,QAAA,CAAS,CAAA,GAAI,GAAA,EAC7C,CAAA,GAAI,KAAA,CAAM,QAAA,CAAS,CAAC,CAAA,GAAI,CAAA,GAAI,CAAA,GAAI,QAAA,CAAS,CAAA,GAAI,GAAA;EACjD,EAAA,CAAA,GAAI,EAAA,GAAK,QAAQ,CAAC,CAAA;EAClB,EAAA,CAAA,GAAI,EAAA,GAAK,QAAQ,CAAC,CAAA;EAClB,EAAA,CAAA,GAAI,EAAA,GAAK,QAAQ,CAAC,CAAA;EAClB,EAAA,OAAO,IAAI,KAAA;EAAA,IACP,QAAQ,SAAA,GAAY,CAAA,GAAI,SAAA,GAAY,CAAA,GAAI,YAAY,CAAC,CAAA;EAAA;EAAA,IACrD,QAAQ,SAAA,GAAa,CAAA,GAAI,SAAA,GAAY,CAAA,GAAI,WAAY,CAAC,CAAA;EAAA,IACtD,QAAQ,SAAA,GAAY,CAAA,GAAI,SAAA,GAAY,CAAA,GAAI,YAAY,CAAC,CAAA;EAAA,IACrD,QAAA,CAAS;EAAA,GACb;EACJ;EAEA,SAAS,cAAA,CAAe,IAAA,EAAgB,EAAA,EAAc,CAAA,EAAqB;EACvE,EAAA,OAAO;EAAA,IACH,GAAGC,IAAA,CAAkB,IAAA,CAAK,CAAA,EAAG,EAAA,CAAG,GAAG,CAAC,CAAA;EAAA,IACpC,GAAGA,IAAA,CAAkB,IAAA,CAAK,CAAA,EAAG,EAAA,CAAG,GAAG,CAAC,CAAA;EAAA,IACpC,GAAGA,IAAA,CAAkB,IAAA,CAAK,CAAA,EAAG,EAAA,CAAG,GAAG,CAAC,CAAA;EAAA,IACpC,OAAOA,IAAA,CAAkB,IAAA,CAAK,KAAA,EAAO,EAAA,CAAG,OAAO,CAAC;EAAA,GACpD;EACJ;EAGA,SAAS,SAAS,QAAA,EAA2B;EACzC,EAAA,MAAM,EAAC,CAAA,EAAG,CAAA,EAAG,CAAA,EAAC,GAAI,SAAS,QAAQ,CAAA;EACnC,EAAA,MAAM,CAAA,GAAI,IAAA,CAAK,KAAA,CAAM,CAAA,EAAG,CAAC,CAAA,GAAI,OAAA;EAC7B,EAAA,OAAO;EAAA,IACH,CAAA,EAAG,CAAA,GAAI,CAAA,GAAI,CAAA,GAAI,GAAA,GAAM,CAAA;EAAA,IACrB,GAAG,IAAA,CAAK,IAAA,CAAK,CAAA,GAAI,CAAA,GAAI,IAAI,CAAC,CAAA;EAAA,IAC1B,CAAA;EAAA,IACA,OAAO,QAAA,CAAS;EAAA,GACpB;EACJ;EAEA,SAAS,SAAS,QAAA,EAA2B;EACzC,EAAA,MAAM,CAAA,GAAI,SAAS,CAAA,GAAI,OAAA,EACnB,IAAI,QAAA,CAAS,CAAA,EACb,IAAI,QAAA,CAAS,CAAA;EACjB,EAAA,OAAO,QAAA,CAAS;EAAA,IACZ,CAAA;EAAA,IACA,CAAA,EAAG,IAAA,CAAK,GAAA,CAAI,CAAC,CAAA,GAAI,CAAA;EAAA,IACjB,CAAA,EAAG,IAAA,CAAK,GAAA,CAAI,CAAC,CAAA,GAAI,CAAA;EAAA,IACjB,OAAO,QAAA,CAAS;EAAA,GACnB,CAAA;EACL;EAEA,SAAS,cAAA,CAAe,CAAA,EAAW,CAAA,EAAW,CAAA,EAAW;EACrD,EAAA,MAAM,IAAI,CAAA,GAAI,CAAA;EACd,EAAA,OAAO,CAAA,GAAI,CAAA,IAAK,CAAA,GAAI,GAAA,IAAO,CAAA,GAAI,IAAA,GAAO,CAAA,GAAI,GAAA,GAAM,IAAA,CAAK,KAAA,CAAM,CAAA,GAAI,GAAG,CAAA,GAAI,CAAA,CAAA;EAC1E;EAEA,SAAS,cAAA,CAAe,IAAA,EAAgB,EAAA,EAAc,CAAA,EAAqB;EACvE,EAAA,OAAO;EAAA,IACH,GAAG,cAAA,CAAe,IAAA,CAAK,CAAA,EAAG,EAAA,CAAG,GAAG,CAAC,CAAA;EAAA,IACjC,GAAGA,IAAA,CAAkB,IAAA,CAAK,CAAA,EAAG,EAAA,CAAG,GAAG,CAAC,CAAA;EAAA,IACpC,GAAGA,IAAA,CAAkB,IAAA,CAAK,CAAA,EAAG,EAAA,CAAG,GAAG,CAAC,CAAA;EAAA,IACpC,OAAOA,IAAA,CAAkB,IAAA,CAAK,KAAA,EAAO,EAAA,CAAG,OAAO,CAAC;EAAA,GACpD;EACJ;EAEO,MAAM,GAAA,GAAM;EAAA,EACf,OAAA,EAAS,QAAA;EAAA,EACT,OAAA,EAAS,QAAA;EAAA,EACT,WAAA,EAAa;EACjB,CAAA;EAEO,MAAM,GAAA,GAAM;EAAA,EACf,OAAA,EAAS,QAAA;EAAA,EACT,OAAA,EAAS,QAAA;EAAA,EACT,WAAA,EAAa;EACjB,CAAA;;;;;;;;EChHA,MAAM,WAAA,CAAkC;EAAA,EASpC,WAAA,CAAY,IAAA,EAAY,QAAA,EAAiC,aAAA,EAAkC,OAAmB,KAAA,EAAc;EACxH,IAAA,IAAA,CAAK,IAAA,GAAO,IAAA;EACZ,IAAA,IAAA,CAAK,QAAA,GAAW,QAAA;EAChB,IAAA,IAAA,CAAK,aAAA,GAAgB,aAAA;EACrB,IAAA,IAAA,CAAK,KAAA,GAAQ,KAAA;EAEb,IAAA,IAAA,CAAK,SAAS,EAAC;EACf,IAAA,IAAA,CAAK,UAAU,EAAC;EAChB,IAAA,KAAA,MAAW,CAAC,KAAA,EAAO,UAAU,CAAA,IAAK,KAAA,EAAO;EACrC,MAAA,IAAA,CAAK,MAAA,CAAO,KAAK,KAAK,CAAA;EACtB,MAAA,IAAA,CAAK,OAAA,CAAQ,KAAK,UAAU,CAAA;EAAA,IAChC;EAAA,EACJ;EAAA,EAEA,OAAO,mBAAA,CACH,aAAA,EACA,KAAA,EACA,OACA,KAAA,EACM;EACN,IAAA,IAAI,CAAA,GAAI,CAAA;EACR,IAAA,IAAI,aAAA,CAAc,SAAS,aAAA,EAAe;EACtC,MAAA,CAAA,GAAI,wBAAA,CAAyB,KAAA,EAAO,aAAA,CAAc,IAAA,EAAM,OAAO,KAAK,CAAA;EAAA,IACxE,CAAA,MAAA,IAAW,aAAA,CAAc,IAAA,KAAS,QAAA,EAAU;EACxC,MAAA,CAAA,GAAI,wBAAA,CAAyB,KAAA,EAAO,CAAA,EAAG,KAAA,EAAO,KAAK,CAAA;EAAA,IACvD,CAAA,MAAA,IAAW,aAAA,CAAc,IAAA,KAAS,cAAA,EAAgB;EAC9C,MAAA,MAAM,IAAI,aAAA,CAAc,aAAA;EACxB,MAAA,MAAM,EAAA,GAAK,UAAA,CAAW,CAAA,CAAE,CAAC,CAAA,EAAG,CAAA,CAAE,CAAC,CAAA,EAAG,CAAA,CAAE,CAAC,CAAA,EAAG,CAAA,CAAE,CAAC,CAAC,CAAA;EAC5C,MAAA,CAAA,GAAI,GAAG,wBAAA,CAAyB,KAAA,EAAO,CAAA,EAAG,KAAA,EAAO,KAAK,CAAC,CAAA;EAAA,IAC3D;EACA,IAAA,OAAO,CAAA;EAAA,EACX;EAAA,EAEA,OAAO,KAAA,CAAM,IAAA,EAA8B,OAAA,EAAoD;EAC3F,IAAA,IAAI,CAAC,QAAA,EAAU,aAAA,EAAe,KAAA,EAAO,GAAG,IAAI,CAAA,GAAI,IAAA;EAEhD,IAAA,IAAI,CAAC,KAAA,CAAM,OAAA,CAAQ,aAAa,CAAA,IAAK,aAAA,CAAc,WAAW,CAAA,EAAG;EAC7D,MAAA,OAAO,OAAA,CAAQ,KAAA,CAAM,CAAA,0CAAA,CAAA,EAA8C,CAAC,CAAA;EAAA,IACxE;EAEA,IAAA,IAAI,aAAA,CAAc,CAAC,CAAA,KAAM,QAAA,EAAU;EAC/B,MAAA,aAAA,GAAgB,EAAC,MAAM,QAAA,EAAQ;EAAA,IACnC,CAAA,MAAA,IAAW,aAAA,CAAc,CAAC,CAAA,KAAM,aAAA,EAAe;EAE3C,MAAA,MAAM,IAAA,GAAO,cAAc,CAAC,CAAA;EAC5B,MAAA,IAAI,OAAO,IAAA,KAAS,QAAA;EAChB,QAAA,OAAO,OAAA,CAAQ,KAAA,CAAM,CAAA,kDAAA,CAAA,EAAsD,CAAA,EAAG,CAAC,CAAA;EACnF,MAAA,aAAA,GAAgB;EAAA,QACZ,IAAA,EAAM,aAAA;EAAA,QACN;EAAA,OACJ;EAAA,IACJ,CAAA,MAAA,IAAW,aAAA,CAAc,CAAC,CAAA,KAAM,cAAA,EAAgB;EAC5C,MAAA,MAAM,aAAA,GAAgB,aAAA,CAAc,KAAA,CAAM,CAAC,CAAA;EAC3C,MAAA,IACI,aAAA,CAAc,MAAA,KAAW,CAAA,IACzB,aAAA,CAAc,IAAA,CAAK,CAAA,CAAA,KAAK,OAAO,CAAA,KAAM,QAAA,IAAY,CAAA,GAAI,CAAA,IAAK,CAAA,GAAI,CAAC,CAAA,EACjE;EACE,QAAA,OAAO,OAAA,CAAQ,KAAA,CAAM,yFAAA,EAA2F,CAAC,CAAA;EAAA,MACrH;EAEA,MAAA,aAAA,GAAgB;EAAA,QACZ,IAAA,EAAM,cAAA;EAAA,QACN;EAAA,OACJ;EAAA,IACJ,CAAA,MAAO;EACH,MAAA,OAAO,OAAA,CAAQ,KAAA,CAAM,CAAA,2BAAA,EAA8B,MAAA,CAAO,aAAA,CAAc,CAAC,CAAC,CAAC,CAAA,CAAA,EAAI,CAAA,EAAG,CAAC,CAAA;EAAA,IACvF;EAEA,IAAA,IAAI,IAAA,CAAK,MAAA,GAAS,CAAA,GAAI,CAAA,EAAG;EACrB,MAAA,OAAO,QAAQ,KAAA,CAAM,CAAA,8CAAA,EAAiD,IAAA,CAAK,MAAA,GAAS,CAAC,CAAA,CAAA,CAAG,CAAA;EAAA,IAC5F;EAEA,IAAA,IAAI,IAAA,CAAK,SAAS,CAAA,GAAI,CAAA,IAAA,CAAM,KAAK,MAAA,GAAS,CAAA,IAAK,MAAM,CAAA,EAAG;EACpD,MAAA,OAAO,OAAA,CAAQ,MAAM,CAAA,qCAAA,CAAuC,CAAA;EAAA,IAChE;EAEA,IAAA,KAAA,GAAQ,OAAA,CAAQ,KAAA,CAAM,KAAA,EAAO,CAAA,EAAG,UAAU,CAAA;EAC1C,IAAA,IAAI,CAAC,OAAO,OAAO,IAAA;EAEnB,IAAA,MAAM,QAAe,EAAC;EAEtB,IAAA,IAAI,UAAA,GAAmB,IAAA;EACvB,IAAA,IAAI,QAAA,KAAa,iBAAA,IAAqB,QAAA,KAAa,iBAAA,EAAmB;EAClE,MAAA,UAAA,GAAa,SAAA;EAAA,IACjB,WAAW,OAAA,CAAQ,YAAA,IAAgB,OAAA,CAAQ,YAAA,CAAa,SAAS,OAAA,EAAS;EACtE,MAAA,UAAA,GAAa,OAAA,CAAQ,YAAA;EAAA,IACzB;EAEA,IAAA,KAAA,IAAS,IAAI,CAAA,EAAG,CAAA,GAAI,IAAA,CAAK,MAAA,EAAQ,KAAK,CAAA,EAAG;EACrC,MAAA,MAAM,KAAA,GAAQ,KAAK,CAAC,CAAA;EACpB,MAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,CAAA,GAAI,CAAC,CAAA;EAExB,MAAA,MAAM,WAAW,CAAA,GAAI,CAAA;EACrB,MAAA,MAAM,WAAW,CAAA,GAAI,CAAA;EAErB,MAAA,IAAI,OAAO,UAAU,QAAA,EAAU;EAC3B,QAAA,OAAO,OAAA,CAAQ,KAAA,CAAM,gJAAA,EAAkJ,QAAQ,CAAA;EAAA,MACnL;EAEA,MAAA,IAAI,KAAA,CAAM,UAAU,KAAA,CAAM,EAAA,CAAG,EAAE,CAAA,CAAE,CAAC,KAAK,KAAA,EAAO;EAC1C,QAAA,OAAO,OAAA,CAAQ,KAAA,CAAM,kHAAA,EAAoH,QAAQ,CAAA;EAAA,MACrJ;EAEA,MAAA,MAAM,MAAA,GAAS,OAAA,CAAQ,KAAA,CAAM,KAAA,EAAO,UAAU,UAAU,CAAA;EACxD,MAAA,IAAI,CAAC,QAAQ,OAAO,IAAA;EACpB,MAAA,UAAA,GAAa,cAAc,MAAA,CAAO,IAAA;EAClC,MAAA,KAAA,CAAM,IAAA,CAAK,CAAC,KAAA,EAAO,MAAM,CAAC,CAAA;EAAA,IAC9B;EAEA,IAAA,IAAI,WAAW,IAAA,KAAS,QAAA,IACpB,UAAA,CAAW,IAAA,KAAS,WACpB,EACI,UAAA,CAAW,IAAA,KAAS,OAAA,IACpB,WAAW,QAAA,CAAS,IAAA,KAAS,YAC7B,OAAO,UAAA,CAAW,MAAM,QAAA,CAAA,EAE9B;EACE,MAAA,OAAO,QAAQ,KAAA,CAAM,CAAA,KAAA,EAAQX,UAAA,CAAS,UAAU,CAAC,CAAA,uBAAA,CAAyB,CAAA;EAAA,IAC9E;EAEA,IAAA,OAAO,IAAI,WAAA,CAAY,UAAA,EAAY,QAAA,EAAmC,aAAA,EAAoC,OAAqB,KAAK,CAAA;EAAA,EACxI;EAAA,EAEA,SAAS,GAAA,EAA+B;EACpC,IAAA,MAAM,SAAS,IAAA,CAAK,MAAA;EACpB,IAAA,MAAM,UAAU,IAAA,CAAK,OAAA;EAErB,IAAA,IAAI,MAAA,CAAO,WAAW,CAAA,EAAG;EACrB,MAAA,OAAO,OAAA,CAAQ,CAAC,CAAA,CAAE,QAAA,CAAS,GAAG,CAAA;EAAA,IAClC;EAGA,IAAA,MAAM,KAAA,GAAgB,IAAA,CAAK,KAAA,CAAM,QAAA,CAAS,GAAG,CAAA;EAC7C,IAAA,IAAI,KAAA,IAAS,MAAA,CAAO,CAAC,CAAA,EAAG;EACpB,MAAA,OAAO,OAAA,CAAQ,CAAC,CAAA,CAAE,QAAA,CAAS,GAAG,CAAA;EAAA,IAClC;EAEA,IAAA,MAAM,YAAY,MAAA,CAAO,MAAA;EACzB,IAAA,IAAI,KAAA,IAAS,MAAA,CAAO,SAAA,GAAY,CAAC,CAAA,EAAG;EAChC,MAAA,OAAO,OAAA,CAAQ,SAAA,GAAY,CAAC,CAAA,CAAE,SAAS,GAAG,CAAA;EAAA,IAC9C;EAEA,IAAA,MAAM,KAAA,GAAQ,yBAAA,CAA0B,MAAA,EAAQ,KAAK,CAAA;EACrD,IAAA,MAAM,KAAA,GAAQ,OAAO,KAAK,CAAA;EAC1B,IAAA,MAAM,KAAA,GAAQ,MAAA,CAAO,KAAA,GAAQ,CAAC,CAAA;EAC9B,IAAA,MAAM,IAAI,WAAA,CAAY,mBAAA,CAAoB,KAAK,aAAA,EAAe,KAAA,EAAO,OAAO,KAAK,CAAA;EAGjF,IAAA,MAAM,WAAA,GAAqB,OAAA,CAAQ,KAAK,CAAA,CAAE,SAAS,GAAG,CAAA;EAEtD,IAAA,MAAM,cAAqB,OAAA,CAAQ,KAAA,GAAQ,CAAC,CAAA,CAAE,SAAS,GAAG,CAAA;EAE1D,IAAA,IAAI,IAAA,CAAK,aAAa,aAAA,EAAe;EAEjC,MAAA,OAAO,WAAA,CAAY,KAAK,IAAA,CAAK,IAAA,CAAK,aAAa,CAAA,CAAE,WAAA,EAAa,WAAA,EAAa,CAAC,CAAA;EAAA,IAChF,CAAA,MAAA,IAAW,IAAA,CAAK,QAAA,KAAa,iBAAA,EAAmB;EAC5C,MAAA,OAAO,GAAA,CAAI,OAAA,CAAQ,GAAA,CAAI,WAAA,CAAY,GAAA,CAAI,OAAA,CAAQ,WAAW,CAAA,EAAG,GAAA,CAAI,OAAA,CAAQ,WAAW,CAAA,EAAG,CAAC,CAAC,CAAA;EAAA,IAC7F,CAAA,MAAO;EACH,MAAA,OAAO,GAAA,CAAI,OAAA,CAAQ,GAAA,CAAI,WAAA,CAAY,GAAA,CAAI,OAAA,CAAQ,WAAW,CAAA,EAAG,GAAA,CAAI,OAAA,CAAQ,WAAW,CAAA,EAAG,CAAC,CAAC,CAAA;EAAA,IAC7F;EAAA,EACJ;EAAA,EAEA,UAAU,EAAA,EAA6B;EACnC,IAAA,EAAA,CAAG,KAAK,KAAK,CAAA;EACb,IAAA,KAAA,MAAW,UAAA,IAAc,KAAK,OAAA,EAAS;EACnC,MAAA,EAAA,CAAG,UAAU,CAAA;EAAA,IACjB;EAAA,EACJ;EAAA,EAEA,aAAA,GAAyB;EACrB,IAAA,OAAO,KAAK,OAAA,CAAQ,KAAA,CAAM,CAAA,GAAA,KAAO,GAAA,CAAI,eAAe,CAAA;EAAA,EACxD;EAAA,EAEA,SAAA,GAAkC;EAC9B,IAAA,IAAI,aAAA;EACJ,IAAA,IAAI,IAAA,CAAK,aAAA,CAAc,IAAA,KAAS,QAAA,EAAU;EACtC,MAAA,aAAA,GAAgB,CAAC,QAAQ,CAAA;EAAA,IAC7B,CAAA,MAAA,IAAW,IAAA,CAAK,aAAA,CAAc,IAAA,KAAS,aAAA,EAAe;EAClD,MAAA,IAAK,IAAA,CAAK,aAAA,CAAc,IAAA,KAAS,CAAA,EAAG;EAChC,QAAA,aAAA,GAAgB,CAAC,QAAQ,CAAA;EAAA,MAC7B,CAAA,MAAO;EACH,QAAA,aAAA,GAAgB,CAAC,aAAA,EAAe,IAAA,CAAK,aAAA,CAAc,IAAI,CAAA;EAAA,MAC3D;EAAA,IACJ,CAAA,MAAO;EACH,MAAA,aAAA,GAAgB,CAAC,cAAA,EAAgB,GAAG,IAAA,CAAK,cAAc,aAAa,CAAA;EAAA,IACxE;EAEA,IAAA,MAAM,UAAA,GAAa,CAAC,IAAA,CAAK,QAAA,EAAU,eAAe,IAAA,CAAK,KAAA,CAAM,WAAW,CAAA;EAExE,IAAA,KAAA,IAAS,IAAI,CAAA,EAAG,CAAA,GAAI,IAAA,CAAK,MAAA,CAAO,QAAQ,CAAA,EAAA,EAAK;EACzC,MAAA,UAAA,CAAW,IAAA;EAAA,QACP,IAAA,CAAK,OAAO,CAAC,CAAA;EAAA,QACb,IAAA,CAAK,OAAA,CAAQ,CAAC,CAAA,CAAE,SAAA;EAAU,OAC9B;EAAA,IACJ;EACA,IAAA,OAAO,UAAA;EAAA,EACX;EACJ;EAqCA,SAAS,wBAAA,CAAyB,KAAA,EAAe,IAAA,EAAc,UAAA,EAAoB,UAAA,EAAoB;EACnG,EAAA,MAAM,aAAa,UAAA,GAAa,UAAA;EAChC,EAAA,MAAM,WAAW,KAAA,GAAQ,UAAA;EAEzB,EAAA,IAAI,eAAe,CAAA,EAAG;EAClB,IAAA,OAAO,CAAA;EAAA,EACX,CAAA,MAAA,IAAW,SAAS,CAAA,EAAG;EACnB,IAAA,OAAO,QAAA,GAAW,UAAA;EAAA,EACtB,CAAA,MAAO;EACH,IAAA,OAAA,CAAQ,IAAA,CAAK,GAAA,CAAI,IAAA,EAAM,QAAQ,CAAA,GAAI,MAAM,IAAA,CAAK,GAAA,CAAI,IAAA,EAAM,UAAU,CAAA,GAAI,CAAA,CAAA;EAAA,EAC1E;EACJ;;EC5QA,MAAM,QAAA,CAA+B;EAAA,EAIjC,WAAA,CAAY,MAAY,IAAA,EAAyB;EAC7C,IAAA,IAAA,CAAK,IAAA,GAAO,IAAA;EACZ,IAAA,IAAA,CAAK,IAAA,GAAO,IAAA;EAAA,EAAA;EAChB,EAEA,OAAO,KAAA,CAAM,IAAA,EAA8B,OAAA,EAAsD;EAC7F,IAAA,IAAI,IAAA,CAAK,SAAS,CAAA,EAAG;EACjB,MAAA,OAAA,CAAQ,MAAM,oCAAoC,CAAA;EAClD,MAAA,OAAO,IAAA;EAAA,IAAA;EAEX,IAAA,IAAI,UAAA,GAAmB,IAAA;EACvB,IAAA,MAAM,eAAe,OAAA,CAAQ,YAAA;EAC7B,IAAA,IAAI,YAAA,IAAgB,YAAA,CAAa,IAAA,KAAS,OAAA,EAAS;EAC/C,MAAA,UAAA,GAAa,YAAA;EAAA,IAAA;EAEjB,IAAA,MAAM,aAA2B,EAAC;EAElC,IAAA,KAAA,MAAW,GAAA,IAAO,IAAA,CAAK,KAAA,CAAM,CAAC,CAAA,EAAG;EAC7B,MAAA,MAAM,MAAA,GAAS,OAAA,CAAQ,KAAA,CAAM,GAAA,EAAK,CAAA,GAAI,UAAA,CAAW,MAAA,EAAQ,UAAA,EAAY,MAAA,EAAW,EAAC,cAAA,EAAgB,MAAA,EAAO,CAAA;EACxG,MAAA,IAAI,CAAC,QAAQ,OAAO,IAAA;EACpB,MAAA,UAAA,GAAa,cAAc,MAAA,CAAO,IAAA;EAClC,MAAA,UAAA,CAAW,KAAK,MAAM,CAAA;EAAA,IAAA;EAS1B,IAAA,MAAM,eAAA,GAAkB,gBACpB,UAAA,CAAW,IAAA,CAAK,SAAO,YAAA,CAAa,YAAA,EAAc,GAAA,CAAI,IAAI,CAAC,CAAA;EAE/D,IAAA,OAAO,eAAA,GACH,IAAI,QAAA,CAAS,SAAA,EAAW,UAAU,CAAA,GAClC,IAAI,QAAA,CAAS,UAAA,EAAY,UAAU,CAAA;EAAA,EAAA;EAC3C;EAAA,EAGA,SAAS,GAAA,EAA6B;EAClC,IAAA,IAAI,MAAA,GAAS,IAAA;EACb,IAAA,IAAI,QAAA,GAAW,CAAA;EACf,IAAA,IAAI,UAAA;EACJ,IAAA,KAAA,MAAW,GAAA,IAAO,KAAK,IAAA,EAAM;EACzB,MAAA,QAAA,EAAA;EAEA,MAAA,MAAA,GAAS,GAAA,CAAI,SAAS,GAAG,CAAA;EAGzB,MAAA,IAAI,MAAA,IAAU,MAAA,YAAkB,aAAA,IAAiB,CAAC,OAAO,SAAA,EAAW;EAEhE,QAAA,IAAI,CAAC,UAAA,EAAY;EACb,UAAA,UAAA,GAAa,MAAA;EAAA,QAAA;EAEjB,QAAA,MAAA,GAAS,IAAA;EAET,QAAA,IAAI,QAAA,KAAa,IAAA,CAAK,IAAA,CAAK,MAAA,EAAQ;EAC/B,UAAA,OAAO,UAAA;EAAA,QAAA;EACX,MAAA;EAGJ,MAAA,IAAI,WAAW,IAAA,EAAM;EAAA,IAAA;EAEzB,IAAA,OAAO,MAAA;EAAA,EAAA;EACX,EAEA,UAAU,EAAA,EAA6B;EACnC,IAAA,IAAA,CAAK,IAAA,CAAK,QAAQ,EAAE,CAAA;EAAA,EAAA;EACxB,EAEA,aAAA,GAAyB;EACrB,IAAA,OAAO,KAAK,IAAA,CAAK,KAAA,CAAM,CAAA,GAAA,KAAO,GAAA,CAAI,eAAe,CAAA;EAAA,EAAA;EACrD,EAEA,SAAA,GAAkC;EAC9B,IAAA,MAAM,UAAA,GAA0C,CAAC,UAAU,CAAA;EAC3D,IAAA,IAAA,CAAK,UAAU,CAAA,KAAA,KAAS;EAAE,MAAA,UAAA,CAAW,IAAA,CAAK,KAAA,CAAM,SAAA,EAAW,CAAA;EAAA,IAAA,CAAI,CAAA;EAC/D,IAAA,OAAO,UAAA;EAAA,EAAA;EAEf;;ECvFA,MAAM,mBAAA,GAAsB,eAAA;EAE5B,MAAM,GAAA,CAA0B;EAAA,EAK5B,WAAA,CAAY,UAAuC,MAAA,EAAoB;EACnE,IAAA,IAAA,CAAK,OAAO,MAAA,CAAO,IAAA;EAEnB,IAAA,IAAA,CAAK,QAAA,GAAW,EAAC,CAAE,MAAA,CAAO,QAAQ,CAAA;EAClC,IAAA,IAAA,CAAK,MAAA,GAAS,MAAA;EAAA,EAClB;EAAA;EAAA,EAGA,SAAS,GAAA,EAA6B;EAClC,IAAA,OAAO,IAAA,CAAK,MAAA,CAAO,QAAA,CAAS,GAAG,CAAA;EAAA,EACnC;EAAA,EAEA,UAAU,EAAA,EAA6B;EACnC,IAAA,KAAA,MAAW,OAAA,IAAW,KAAK,QAAA,EAAU;EACjC,MAAA,EAAA,CAAG,OAAA,CAAQ,CAAC,CAAC,CAAA;EAAA,IACjB;EACA,IAAA,EAAA,CAAG,KAAK,MAAM,CAAA;EAAA,EAClB;EAAA,EAEA,OAAO,KAAA,CAAM,IAAA,EAA8B,OAAA,EAA4C;EACnF,IAAA,IAAI,KAAK,MAAA,GAAS,CAAA;EACd,MAAA,OAAO,QAAQ,KAAA,CAAM,CAAA,yCAAA,EAA4C,IAAA,CAAK,MAAA,GAAS,CAAC,CAAA,SAAA,CAAW,CAAA;EAE/F,IAAA,MAAM,WAAwC,EAAC;EAC/C,IAAA,KAAA,IAAS,IAAI,CAAA,EAAG,CAAA,GAAI,KAAK,MAAA,GAAS,CAAA,EAAG,KAAK,CAAA,EAAG;EACzC,MAAA,MAAM,IAAA,GAAO,KAAK,CAAC,CAAA;EAEnB,MAAA,IAAI,OAAO,SAAS,QAAA,EAAU;EAC1B,QAAA,OAAO,QAAQ,KAAA,CAAM,CAAA,2BAAA,EAA8B,OAAO,IAAI,aAAa,CAAC,CAAA;EAAA,MAChF;EAEA,MAAA,IAAI,mBAAA,CAAoB,IAAA,CAAK,IAAI,CAAA,EAAG;EAChC,QAAA,OAAO,OAAA,CAAQ,KAAA,CAAM,CAAA,gEAAA,CAAA,EAAoE,CAAC,CAAA;EAAA,MAC9F;EAEA,MAAA,MAAM,KAAA,GAAQ,QAAQ,KAAA,CAAM,IAAA,CAAK,IAAI,CAAC,CAAA,EAAG,IAAI,CAAC,CAAA;EAC9C,MAAA,IAAI,CAAC,OAAO,OAAO,IAAA;EAEnB,MAAA,QAAA,CAAS,IAAA,CAAK,CAAC,IAAA,EAAM,KAAK,CAAC,CAAA;EAAA,IAC/B;EAEA,IAAA,MAAM,MAAA,GAAS,OAAA,CAAQ,KAAA,CAAM,IAAA,CAAK,EAAA,CAAG,EAAE,CAAA,EAAG,IAAA,CAAK,MAAA,GAAS,CAAA,EAAG,OAAA,CAAQ,YAAA,EAAc,QAAQ,CAAA;EACzF,IAAA,IAAI,CAAC,QAAQ,OAAO,IAAA;EAEpB,IAAA,OAAO,IAAI,GAAA,CAAI,QAAA,EAAU,MAAM,CAAA;EAAA,EACnC;EAAA,EAEA,aAAA,GAAyB;EACrB,IAAA,OAAO,IAAA,CAAK,OAAO,aAAA,EAAc;EAAA,EACrC;EAAA,EAEA,SAAA,GAAkC;EAC9B,IAAA,MAAM,UAAA,GAAqC,CAAC,KAAK,CAAA;EACjD,IAAA,KAAA,MAAW,CAAC,IAAA,EAAM,IAAI,CAAA,IAAK,KAAK,QAAA,EAAU;EACtC,MAAA,UAAA,CAAW,IAAA,CAAK,IAAA,EAAM,IAAA,CAAK,SAAA,EAAW,CAAA;EAAA,IAC1C;EACA,IAAA,UAAA,CAAW,IAAA,CAAK,IAAA,CAAK,MAAA,CAAO,SAAA,EAAW,CAAA;EACvC,IAAA,OAAO,UAAA;EAAA,EACX;EACJ;;EC9DA,MAAM,EAAA,CAAyB;EAAA,EAK3B,WAAA,CAAY,IAAA,EAAY,KAAA,EAAmB,KAAA,EAAmB;EAC1D,IAAA,IAAA,CAAK,IAAA,GAAO,IAAA;EACZ,IAAA,IAAA,CAAK,KAAA,GAAQ,KAAA;EACb,IAAA,IAAA,CAAK,KAAA,GAAQ,KAAA;EAAA,EACjB;EAAA,EAEA,OAAO,KAAA,CAAM,IAAA,EAA8B,OAAA,EAA2C;EAClF,IAAA,IAAI,KAAK,MAAA,KAAW,CAAA;EAChB,MAAA,OAAO,QAAQ,KAAA,CAAM,CAAA,gCAAA,EAAmC,IAAA,CAAK,MAAA,GAAS,CAAC,CAAA,SAAA,CAAW,CAAA;EAEtF,IAAA,MAAM,QAAQ,OAAA,CAAQ,KAAA,CAAM,KAAK,CAAC,CAAA,EAAG,GAAG,UAAU,CAAA;EAClD,IAAA,MAAM,KAAA,GAAQ,OAAA,CAAQ,KAAA,CAAM,IAAA,CAAK,CAAC,CAAA,EAAG,CAAA,EAAGD,OAAA,CAAM,OAAA,CAAQ,YAAA,IAAgB,SAAS,CAAC,CAAA;EAEhF,IAAA,IAAI,CAAC,KAAA,IAAS,CAAC,KAAA,EAAO,OAAO,IAAA;EAE7B,IAAA,MAAM,IAAI,KAAA,CAAM,IAAA;EAChB,IAAA,OAAO,IAAI,EAAA,CAAG,CAAA,CAAE,QAAA,EAAU,OAAO,KAAK,CAAA;EAAA,EAC1C;EAAA,EAEA,SAAS,GAAA,EAA+B;EACpC,IAAA,MAAM,KAAA,GAAS,IAAA,CAAK,KAAA,CAAM,QAAA,CAAS,GAAG,CAAA;EACtC,IAAA,MAAMA,MAAAA,GAAS,IAAA,CAAK,KAAA,CAAM,QAAA,CAAS,GAAG,CAAA;EAEtC,IAAA,IAAI,QAAQ,CAAA,EAAG;EACX,MAAA,MAAM,IAAI,aAAa,CAAA,yCAAA,CAA2C,CAAA;EAAA,IACtE;EAEA,IAAA,IAAI,KAAA,IAASA,OAAM,MAAA,EAAQ;EACvB,MAAA,MAAM,IAAI,aAAa,CAAA,mDAAA,CAAqD,CAAA;EAAA,IAChF;EAEA,IAAA,IAAI,KAAA,KAAU,IAAA,CAAK,KAAA,CAAM,KAAK,CAAA,EAAG;EAC7B,MAAA,MAAM,IAAI,aAAa,CAAA,0EAAA,CAA4E,CAAA;EAAA,IACvG;EAEA,IAAA,OAAOA,OAAM,KAAK,CAAA;EAAA,EACtB;EAAA,EAEA,UAAU,EAAA,EAA6B;EACnC,IAAA,EAAA,CAAG,KAAK,KAAK,CAAA;EACb,IAAA,EAAA,CAAG,KAAK,KAAK,CAAA;EAAA,EACjB;EAAA,EAEA,aAAA,GAAyB;EACrB,IAAA,OAAO,KAAA;EAAA,EACX;EAAA,EAEA,SAAA,GAAkC;EAC9B,IAAA,OAAO,CAAC,MAAM,IAAA,CAAK,KAAA,CAAM,WAAU,EAAG,IAAA,CAAK,KAAA,CAAM,SAAA,EAAW,CAAA;EAAA,EAChE;EACJ;;ECtDA,MAAM,cAAA,CAAqC;EAAA,EAKvC,WAAA,CAAY,IAAA,EAAY,KAAA,EAAmB,KAAA,EAAmB;EAC1D,IAAA,IAAA,CAAK,IAAA,GAAO,IAAA;EACZ,IAAA,IAAA,CAAK,KAAA,GAAQ,KAAA;EACb,IAAA,IAAA,CAAK,KAAA,GAAQ,KAAA;EAAA,EACjB;EAAA,EAEA,OAAO,KAAA,CAAM,IAAA,EAA8B,OAAA,EAAuD;EAC9F,IAAA,IAAI,KAAK,MAAA,KAAW,CAAA;EAChB,MAAA,OAAO,QAAQ,KAAA,CAAM,CAAA,gCAAA,EAAmC,IAAA,CAAK,MAAA,GAAS,CAAC,CAAA,SAAA,CAAW,CAAA;EAEtF,IAAA,MAAM,QAAQ,OAAA,CAAQ,KAAA,CAAM,KAAK,CAAC,CAAA,EAAG,GAAG,UAAU,CAAA;EAClD,IAAA,MAAM,KAAA,GAAQ,OAAA,CAAQ,KAAA,CAAM,IAAA,CAAK,CAAC,CAAA,EAAG,CAAA,EAAGA,OAAA,CAAM,OAAA,CAAQ,YAAA,IAAgB,SAAS,CAAC,CAAA;EAEhF,IAAA,IAAI,CAAC,KAAA,IAAS,CAAC,KAAA,EAAO,OAAO,IAAA;EAE7B,IAAA,MAAM,IAAI,KAAA,CAAM,IAAA;EAChB,IAAA,OAAO,IAAI,cAAA,CAAe,CAAA,CAAE,QAAA,EAAU,OAAO,KAAK,CAAA;EAAA,EACtD;EAAA,EAEA,SAAS,GAAA,EAA+B;EACpC,IAAA,MAAM,KAAA,GAAS,IAAA,CAAK,KAAA,CAAM,QAAA,CAAS,GAAG,CAAA;EACtC,IAAA,MAAMA,MAAAA,GAAS,IAAA,CAAK,KAAA,CAAM,QAAA,CAAS,GAAG,CAAA;EAEtC,IAAA,IAAI,QAAQ,CAAA,EAAG;EACX,MAAA,MAAM,IAAI,YAAA,CAAa,CAAA,2BAAA,EAA8B,KAAK,CAAA,KAAA,CAAO,CAAA;EAAA,IACrE;EAEA,IAAA,IAAI,KAAA,GAAQA,MAAAA,CAAM,MAAA,GAAS,CAAA,EAAG;EAC1B,MAAA,MAAM,IAAI,aAAa,CAAA,2BAAA,EAA8B,KAAK,MAAMA,MAAAA,CAAM,MAAA,GAAS,CAAC,CAAA,CAAA,CAAG,CAAA;EAAA,IACvF;EAEA,IAAA,IAAI,KAAA,KAAU,IAAA,CAAK,KAAA,CAAM,KAAK,CAAA,EAAG;EAC7B,MAAA,OAAOA,OAAM,KAAK,CAAA;EAAA,IACtB;EAGA,IAAA,MAAM,UAAA,GAAa,IAAA,CAAK,KAAA,CAAM,KAAK,CAAA;EACnC,IAAA,MAAM,UAAA,GAAa,IAAA,CAAK,IAAA,CAAK,KAAK,CAAA;EAElC,IAAA,MAAM,UAAA,GAAaA,OAAM,UAAU,CAAA;EACnC,IAAA,MAAM,UAAA,GAAaA,OAAM,UAAU,CAAA;EAEnC,IAAA,IAAI,OAAO,UAAA,KAAe,QAAA,IAAY,OAAO,eAAe,QAAA,EAAU;EAClE,MAAA,MAAM,IAAI,YAAA,CAAa,CAAA,sDAAA,EAAyD,KAAK,CAAA,CAAA,CAAG,CAAA;EAAA,IAC5F;EAGA,IAAA,MAAM,WAAW,KAAA,GAAQ,UAAA;EACzB,IAAA,OAAO,IAAA,CAAK,UAAA,EAAY,UAAA,EAAY,QAAQ,CAAA;EAAA,EAChD;EAAA,EAEA,UAAU,EAAA,EAA6B;EACnC,IAAA,EAAA,CAAG,KAAK,KAAK,CAAA;EACb,IAAA,EAAA,CAAG,KAAK,KAAK,CAAA;EAAA,EACjB;EAAA,EAEA,aAAA,GAAyB;EACrB,IAAA,OAAO,KAAA;EAAA,EACX;EAAA,EAEA,SAAA,GAAkC;EAC9B,IAAA,OAAO,CAAC,mBAAmB,IAAA,CAAK,KAAA,CAAM,WAAU,EAAG,IAAA,CAAK,KAAA,CAAM,SAAA,EAAW,CAAA;EAAA,EAC7E;EACJ;;EClEA,MAAM,KAAA,CAA4B;EAAA,EAS9B,YAAY,SAAA,EAAiB,UAAA,EAAkB,KAAA,EAAmB,KAAA,EAAc,SAA4B,SAAA,EAAuB;EAC/H,IAAA,IAAA,CAAK,SAAA,GAAY,SAAA;EACjB,IAAA,IAAA,CAAK,IAAA,GAAO,UAAA;EACZ,IAAA,IAAA,CAAK,KAAA,GAAQ,KAAA;EACb,IAAA,IAAA,CAAK,KAAA,GAAQ,KAAA;EACb,IAAA,IAAA,CAAK,OAAA,GAAU,OAAA;EACf,IAAA,IAAA,CAAK,SAAA,GAAY,SAAA;EAAA,EAAA;EACrB,EAEA,OAAO,KAAA,CAAM,IAAA,EAA8B,OAAA,EAA8C;EACrF,IAAA,IAAI,KAAK,MAAA,GAAS,CAAA;EACd,MAAA,OAAO,QAAQ,KAAA,CAAM,CAAA,8CAAA,EAAiD,IAAA,CAAK,MAAA,GAAS,CAAC,CAAA,CAAA,CAAG,CAAA;EAC5F,IAAA,IAAI,IAAA,CAAK,SAAS,CAAA,KAAM,CAAA;EACpB,MAAA,OAAO,OAAA,CAAQ,MAAM,CAAA,qCAAA,CAAuC,CAAA;EAEhE,IAAA,IAAI,SAAA;EACJ,IAAA,IAAI,UAAA;EACJ,IAAA,IAAI,OAAA,CAAQ,YAAA,IAAgB,OAAA,CAAQ,YAAA,CAAa,SAAS,OAAA,EAAS;EAC/D,MAAA,UAAA,GAAa,OAAA,CAAQ,YAAA;EAAA,IAAA;EAGzB,IAAA,MAAM,QAA6B,EAAC;EACpC,IAAA,MAAM,UAAU,EAAC;EACjB,IAAA,KAAA,IAAS,IAAI,CAAA,EAAG,CAAA,GAAI,KAAK,MAAA,GAAS,CAAA,EAAG,KAAK,CAAA,EAAG;EACzC,MAAA,IAAI,MAAA,GAAS,KAAK,CAAC,CAAA;EACnB,MAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,CAAA,GAAI,CAAC,CAAA;EAExB,MAAA,IAAI,CAAC,KAAA,CAAM,OAAA,CAAQ,MAAM,CAAA,EAAG;EACxB,QAAA,MAAA,GAAS,CAAC,MAAM,CAAA;EAAA,MAAA;EAGpB,MAAA,IAAK,MAAA,CAAqB,WAAW,CAAA,EAAG;EACpC,QAAA,OAAO,OAAA,CAAQ,KAAA,CAAM,qCAAA,EAAuC,CAAC,CAAA;EAAA,MAAA;EAGjE,MAAA,KAAA,MAAW,SAAU,MAAA,EAAsB;EACvC,QAAA,IAAI,OAAO,KAAA,KAAU,QAAA,IAAY,OAAO,UAAU,QAAA,EAAU;EACxD,UAAA,OAAO,OAAA,CAAQ,KAAA,CAAM,CAAA,yCAAA,CAAA,EAA6C,CAAC,CAAA;EAAA,QAAA,CACvE,MAAA,IAAW,OAAO,KAAA,KAAU,QAAA,IAAY,KAAK,GAAA,CAAI,KAAK,CAAA,GAAI,MAAA,CAAO,gBAAA,EAAkB;EAC/E,UAAA,OAAO,QAAQ,KAAA,CAAM,CAAA,8CAAA,EAAiD,MAAA,CAAO,gBAAgB,KAAK,CAAC,CAAA;EAAA,QAAA,CAEvG,MAAA,IAAW,OAAO,KAAA,KAAU,QAAA,IAAY,KAAK,KAAA,CAAM,KAAK,MAAM,KAAA,EAAO;EACjE,UAAA,OAAO,OAAA,CAAQ,KAAA,CAAM,CAAA,6CAAA,CAAA,EAAiD,CAAC,CAAA;EAAA,QAAA,CAE3E,MAAA,IAAW,CAAC,SAAA,EAAW;EACnB,UAAA,SAAA,GAAY,OAAO,KAAK,CAAA;EAAA,QAAA,CAC5B,MAAA,IAAW,QAAQ,YAAA,CAAa,SAAA,EAAW,OAAO,KAAK,CAAA,EAAG,CAAC,CAAA,EAAG;EAC1D,UAAA,OAAO,IAAA;EAAA,QAAA;EAGX,QAAA,IAAI,OAAO,KAAA,CAAM,MAAA,CAAO,KAAK,CAAC,MAAM,WAAA,EAAa;EAC7C,UAAA,OAAO,OAAA,CAAQ,KAAA,CAAM,+BAAA,EAAiC,CAAC,CAAA;EAAA,QAAA;EAG3D,QAAA,KAAA,CAAM,MAAA,CAAO,KAAK,CAAC,CAAA,GAAI,OAAA,CAAQ,MAAA;EAAA,MAAA;EAGnC,MAAA,MAAM,MAAA,GAAS,OAAA,CAAQ,KAAA,CAAM,KAAA,EAAO,GAAG,UAAU,CAAA;EACjD,MAAA,IAAI,CAAC,QAAQ,OAAO,IAAA;EACpB,MAAA,UAAA,GAAa,cAAc,MAAA,CAAO,IAAA;EAClC,MAAA,OAAA,CAAQ,KAAK,MAAM,CAAA;EAAA,IAAA;EAGvB,IAAA,MAAM,QAAQ,OAAA,CAAQ,KAAA,CAAM,KAAK,CAAC,CAAA,EAAG,GAAG,SAAS,CAAA;EACjD,IAAA,IAAI,CAAC,OAAO,OAAO,IAAA;EAEnB,IAAA,MAAM,SAAA,GAAY,OAAA,CAAQ,KAAA,CAAM,IAAA,CAAK,EAAA,CAAG,EAAE,CAAA,EAAG,IAAA,CAAK,MAAA,GAAS,CAAA,EAAG,UAAU,CAAA;EACxE,IAAA,IAAI,CAAC,WAAW,OAAO,IAAA;EAIvB,IAAA,IAAI,KAAA,CAAM,IAAA,CAAK,IAAA,KAAS,OAAA,IAAW,OAAA,CAAQ,aAAc,SAAA,EAAY,KAAA,CAAM,IAAA,EAAM,CAAC,CAAA,EAAG;EACjF,MAAA,OAAO,IAAA;EAAA,IAAA;EAIX,IAAA,OAAO,IAAI,KAAA,CAAM,SAAA,EAAW,YAAY,KAAA,EAAO,KAAA,EAAO,SAAS,SAAS,CAAA;EAAA,EAAA;EAC5E;EAAA,EAGA,SAAS,GAAA,EAA6B;EAClC,IAAA,MAAM,KAAA,GAAS,IAAA,CAAK,KAAA,CAAM,QAAA,CAAS,GAAG,CAAA;EACtC,IAAA,MAAM,MAAA,GAAU,UAAA,CAAW,MAAA,CAAO,KAAK,GAAG,IAAA,CAAK,SAAS,CAAA,IAAK,IAAA,CAAK,QAAQ,IAAA,CAAK,KAAA,CAAM,KAAK,CAAC,KAAM,IAAA,CAAK,SAAA;EACtG,IAAA,OAAO,MAAA,CAAO,SAAS,GAAG,CAAA;EAAA,EAAA;EAC9B,EAEA,UAAU,EAAA,EAA6B;EACnC,IAAA,EAAA,CAAG,KAAK,KAAK,CAAA;EACb,IAAA,IAAA,CAAK,OAAA,CAAQ,QAAQ,EAAE,CAAA;EACvB,IAAA,EAAA,CAAG,KAAK,SAAS,CAAA;EAAA,EAAA;EACrB,EAEA,aAAA,GAAyB;EACrB,IAAA,OAAO,IAAA,CAAK,OAAA,CAAQ,KAAA,CAAM,CAAA,GAAA,KAAO,GAAA,CAAI,eAAe,CAAA,IAAK,IAAA,CAAK,SAAA,CAAU,aAAA,EAAc;EAAA,EAAA;EAC1F,EAEA,SAAA,GAAkC;EAC9B,IAAA,MAAM,aAAa,CAAC,OAAA,EAAS,IAAA,CAAK,KAAA,CAAM,WAAW,CAAA;EAInD,IAAA,MAAM,eAAe,MAAA,CAAO,IAAA,CAAK,IAAA,CAAK,KAAK,EAAE,IAAA,EAAK;EAIlD,IAAA,MAAM,kBAA2D,EAAC;EAClE,IAAA,MAAM,eAEF,EAAC;EACL,IAAA,KAAA,MAAW,SAAS,YAAA,EAAc;EAC9B,MAAA,MAAM,WAAA,GAAc,YAAA,CAAa,IAAA,CAAK,KAAA,CAAM,KAAK,CAAC,CAAA;EAClD,MAAA,IAAI,gBAAgB,MAAA,EAAW;EAE3B,QAAA,YAAA,CAAa,IAAA,CAAK,KAAA,CAAM,KAAK,CAAC,IAAI,eAAA,CAAgB,MAAA;EAClD,QAAA,eAAA,CAAgB,IAAA,CAAK,CAAC,IAAA,CAAK,KAAA,CAAM,KAAK,CAAA,EAAG,CAAC,KAAK,CAAC,CAAC,CAAA;EAAA,MAAA,CACrD,MAAO;EAEH,QAAA,eAAA,CAAgB,WAAW,CAAA,CAAE,CAAC,CAAA,CAAE,KAAK,KAAK,CAAA;EAAA,MAAA;EAC9C,IAAA;EAGJ,IAAA,MAAM,WAAA,GAAc,CAAC,KAAA,KAA4B,IAAA,CAAK,UAAU,IAAA,KAAS,QAAA,GAAW,MAAA,CAAO,KAAK,CAAA,GAAI,KAAA;EAEpG,IAAA,KAAA,MAAW,CAAC,WAAA,EAAa,MAAM,CAAA,IAAK,eAAA,EAAiB;EACjD,MAAA,IAAI,MAAA,CAAO,WAAW,CAAA,EAAG;EAErB,QAAA,UAAA,CAAW,IAAA,CAAK,WAAA,CAAY,MAAA,CAAO,CAAC,CAAC,CAAC,CAAA;EAAA,MAAA,CAC1C,MAAO;EAEH,QAAA,UAAA,CAAW,IAAA,CAAK,MAAA,CAAO,GAAA,CAAI,WAAW,CAAC,CAAA;EAAA,MAAA;EAE3C,MAAA,UAAA,CAAW,KAAK,IAAA,CAAK,OAAA,CAAQ,WAAW,CAAA,CAAE,WAAW,CAAA;EAAA,IAAA;EAEzD,IAAA,UAAA,CAAW,IAAA,CAAK,IAAA,CAAK,SAAA,CAAU,SAAA,EAAW,CAAA;EAC1C,IAAA,OAAO,UAAA;EAAA,EAAA;EAEf;;ECnJA,MAAM,IAAA,CAA2B;EAAA,EAM7B,WAAA,CAAY,IAAA,EAAY,QAAA,EAAoB,SAAA,EAAuB;EAC/D,IAAA,IAAA,CAAK,IAAA,GAAO,IAAA;EACZ,IAAA,IAAA,CAAK,QAAA,GAAW,QAAA;EAChB,IAAA,IAAA,CAAK,SAAA,GAAY,SAAA;EAAA,EAAA;EACrB,EAEA,OAAO,KAAA,CAAM,IAAA,EAA8B,OAAA,EAAkD;EACzF,IAAA,IAAI,IAAA,CAAK,SAAS,CAAA,EAAG;EACjB,MAAA,OAAA,CAAQ,KAAA,CAAM,CAAA,8CAAA,EAAiD,IAAA,CAAK,MAAA,GAAS,CAAC,CAAA,CAAA,CAAG,CAAA;EACjF,MAAA,OAAO,IAAA;EAAA,IAAA;EAEX,IAAA,IAAI,IAAA,CAAK,MAAA,GAAS,CAAA,KAAM,CAAA,EAAG;EACvB,MAAA,OAAA,CAAQ,MAAM,CAAA,oCAAA,CAAsC,CAAA;EACpD,MAAA,OAAO,IAAA;EAAA,IAAA;EAGX,IAAA,IAAI,UAAA;EACJ,IAAA,IAAI,OAAA,CAAQ,YAAA,IAAgB,OAAA,CAAQ,YAAA,CAAa,SAAS,OAAA,EAAS;EAC/D,MAAA,UAAA,GAAa,OAAA,CAAQ,YAAA;EAAA,IAAA;EAGzB,IAAA,MAAM,WAAW,EAAC;EAClB,IAAA,KAAA,IAAS,IAAI,CAAA,EAAG,CAAA,GAAI,KAAK,MAAA,GAAS,CAAA,EAAG,KAAK,CAAA,EAAG;EACzC,MAAA,MAAM,OAAO,OAAA,CAAQ,KAAA,CAAM,KAAK,CAAC,CAAA,EAAG,GAAG,WAAW,CAAA;EAClD,MAAA,IAAI,CAAC,MAAM,OAAO,IAAA;EAElB,MAAA,MAAM,MAAA,GAAS,QAAQ,KAAA,CAAM,IAAA,CAAK,IAAI,CAAC,CAAA,EAAG,CAAA,GAAI,CAAA,EAAG,UAAU,CAAA;EAC3D,MAAA,IAAI,CAAC,QAAQ,OAAO,IAAA;EAEpB,MAAA,QAAA,CAAS,IAAA,CAAK,CAAC,IAAA,EAAM,MAAM,CAAC,CAAA;EAE5B,MAAA,UAAA,GAAa,cAAc,MAAA,CAAO,IAAA;EAAA,IAAA;EAGtC,IAAA,MAAM,SAAA,GAAY,OAAA,CAAQ,KAAA,CAAM,IAAA,CAAK,EAAA,CAAG,EAAE,CAAA,EAAG,IAAA,CAAK,MAAA,GAAS,CAAA,EAAG,UAAU,CAAA;EACxE,IAAA,IAAI,CAAC,WAAW,OAAO,IAAA;EAIvB,IAAA,OAAO,IAAI,IAAA,CAAK,UAAA,EAAY,QAAA,EAAU,SAAS,CAAA;EAAA,EAAA;EACnD;EAAA,EAGA,SAAS,GAAA,EAA6B;EAClC,IAAA,KAAA,MAAW,CAAC,IAAA,EAAM,UAAU,CAAA,IAAK,KAAK,QAAA,EAAU;EAC5C,MAAA,IAAI,IAAA,CAAK,QAAA,CAAS,GAAG,CAAA,EAAG;EACpB,QAAA,OAAO,UAAA,CAAW,SAAS,GAAG,CAAA;EAAA,MAAA;EAClC,IAAA;EAEJ,IAAA,OAAO,IAAA,CAAK,SAAA,CAAU,QAAA,CAAS,GAAG,CAAA;EAAA,EAAA;EACtC,EAEA,UAAU,EAAA,EAA6B;EACnC,IAAA,KAAA,MAAW,CAAC,IAAA,EAAM,UAAU,CAAA,IAAK,KAAK,QAAA,EAAU;EAC5C,MAAA,EAAA,CAAG,IAAI,CAAA;EACP,MAAA,EAAA,CAAG,UAAU,CAAA;EAAA,IAAA;EAEjB,IAAA,EAAA,CAAG,KAAK,SAAS,CAAA;EAAA,EAAA;EACrB,EAEA,aAAA,GAAyB;EACrB,IAAA,OAAO,IAAA,CAAK,QAAA,CAAS,KAAA,CAAM,CAAC,CAAC,CAAA,EAAG,GAAG,CAAA,KAAgC,GAAA,CAAI,aAAA,EAAe,CAAA,IAAK,IAAA,CAAK,UAAU,aAAA,EAAc;EAAA,EAAA;EAC5H,EAEA,SAAA,GAAkC;EAC9B,IAAA,MAAM,UAAA,GAA0C,CAAC,MAAM,CAAA;EACvD,IAAA,IAAA,CAAK,UAAU,CAAA,KAAA,KAAS;EAAE,MAAA,UAAA,CAAW,IAAA,CAAK,KAAA,CAAM,SAAA,EAAW,CAAA;EAAA,IAAA,CAAI,CAAA;EAC/D,IAAA,OAAO,UAAA;EAAA,EAAA;EAEf;;ECpEA,MAAM,KAAA,CAA4B;EAAA,EAM9B,WAAA,CAAY,IAAA,EAAY,KAAA,EAAmB,UAAA,EAAwB,QAAA,EAAuB;EACtF,IAAA,IAAA,CAAK,IAAA,GAAO,IAAA;EACZ,IAAA,IAAA,CAAK,KAAA,GAAQ,KAAA;EACb,IAAA,IAAA,CAAK,UAAA,GAAa,UAAA;EAClB,IAAA,IAAA,CAAK,QAAA,GAAW,QAAA;EAAA,EAEpB;EAAA,EAEA,OAAO,KAAA,CAAM,IAAA,EAA8B,OAAA,EAAmD;EAC1F,IAAA,IAAI,IAAA,CAAK,MAAA,IAAU,CAAA,IAAM,IAAA,CAAK,UAAU,CAAA,EAAG;EACvC,MAAA,OAAA,CAAQ,KAAA,CAAM,CAAA,qCAAA,EAAwC,IAAA,CAAK,MAAA,GAAS,CAAC,CAAA,SAAA,CAAW,CAAA;EAChF,MAAA,OAAO,IAAA;EAAA,IACX;EAEA,IAAA,MAAM,QAAQ,OAAA,CAAQ,KAAA,CAAM,KAAK,CAAC,CAAA,EAAG,GAAG,SAAS,CAAA;EACjD,IAAA,MAAM,aAAa,OAAA,CAAQ,KAAA,CAAM,KAAK,CAAC,CAAA,EAAG,GAAG,UAAU,CAAA;EAEvD,IAAA,IAAI,CAAC,KAAA,IAAS,CAAC,UAAA,EAAY,OAAO,IAAA;EAElC,IAAA,IAAI,CAAC,WAAA,CAAY,KAAA,CAAM,IAAA,EAAM,CAACA,OAAA,CAAM,SAAS,CAAA,EAAG,UAAA,EAAY,SAAS,CAAC,CAAA,EAAG;EACrE,MAAA,OAAA,CAAQ,MAAM,CAAA,iEAAA,EAAoEC,UAAA,CAAS,KAAA,CAAM,IAAI,CAAC,CAAA,QAAA,CAAU,CAAA;EAChH,MAAA,OAAO,IAAA;EAAA,IACX;EAEA,IAAA,IAAI,IAAA,CAAK,WAAW,CAAA,EAAG;EACnB,MAAA,MAAM,WAAW,OAAA,CAAQ,KAAA,CAAM,KAAK,CAAC,CAAA,EAAG,GAAG,UAAU,CAAA;EACrD,MAAA,IAAI,CAAC,UAAU,OAAO,IAAA;EACtB,MAAA,OAAO,IAAI,KAAA,CAAM,KAAA,CAAM,IAAA,EAAM,KAAA,EAAO,YAAY,QAAQ,CAAA;EAAA,IAC5D,CAAA,MAAO;EACH,MAAA,OAAO,IAAI,KAAA,CAAM,KAAA,CAAM,IAAA,EAAM,OAAO,UAAU,CAAA;EAAA,IAClD;EAAA,EACJ;EAAA;EAAA,EAGA,SAAS,GAAA,EAA6B;EAElC,IAAA,MAAM,KAAA,GAAS,IAAA,CAAK,KAAA,CAAM,QAAA,CAAS,GAAG,CAAA;EACtC,IAAA,MAAM,UAAA,GAAc,IAAA,CAAK,UAAA,CAAW,QAAA,CAAS,GAAG,CAAA;EAEhD,IAAA,IAAI,CAAC,iBAAA,CAAkB,KAAA,EAAO,CAAC,QAAA,EAAU,OAAO,CAAC,CAAA,EAAG;EAEhD,MAAA,MAAM,IAAI,aAAa,CAAA,iEAAA,EAAoEA,UAAA,CAAS,OAAO,KAAK,CAAC,CAAC,CAAA,SAAA,CAAW,CAAA;EAAA,IACjI;EAEA,IAAA,IAAI,KAAK,QAAA,EAAU;EACf,MAAA,MAAM,QAAA,GAAY,IAAA,CAAK,QAAA,CAAS,QAAA,CAAS,GAAG,CAAA;EAE5C,MAAA,OAAO,KAAA,CAAM,KAAA,CAAM,UAAA,EAAY,QAAQ,CAAA;EAAA,IAC3C;EAGA,IAAA,OAAO,KAAA,CAAM,MAAM,UAAU,CAAA;EAAA,EACjC;EAAA,EAEA,UAAU,EAAA,EAA6B;EACnC,IAAA,EAAA,CAAG,KAAK,KAAK,CAAA;EACb,IAAA,EAAA,CAAG,KAAK,UAAU,CAAA;EAClB,IAAA,IAAI,KAAK,QAAA,EAAU;EACf,MAAA,EAAA,CAAG,KAAK,QAAQ,CAAA;EAAA,IACpB;EAAA,EACJ;EAAA,EAEA,aAAA,GAAyB;EACrB,IAAA,OAAO,KAAA;EAAA,EACX;EAAA,EAEA,SAAA,GAAkC;EAC9B,IAAA,IAAI,IAAA,CAAK,QAAA,IAAY,IAAA,IAAQ,IAAA,CAAK,aAAa,MAAA,EAAW;EACtD,MAAA,MAAM,QAAA,GAAW,IAAA,CAAK,QAAA,CAAS,SAAA,EAAU;EACzC,MAAA,OAAO,CAAC,OAAA,EAAS,IAAA,CAAK,KAAA,CAAM,SAAA,IAAa,IAAA,CAAK,UAAA,CAAW,SAAA,EAAU,EAAG,QAAQ,CAAA;EAAA,IAClF;EACA,IAAA,OAAO,CAAC,SAAS,IAAA,CAAK,KAAA,CAAM,WAAU,EAAG,IAAA,CAAK,UAAA,CAAW,SAAA,EAAW,CAAA;EAAA,EACxE;EACJ;;ECpFA,SAAS,gBAAA,CAAiB,IAAwB,IAAA,EAAY;EAC1D,EAAA,IAAI,EAAA,KAAO,IAAA,IAAQ,EAAA,KAAO,IAAA,EAAM;EAE5B,IAAA,OAAO,IAAA,CAAK,IAAA,KAAS,SAAA,IACjB,IAAA,CAAK,IAAA,KAAS,QAAA,IACd,IAAA,CAAK,IAAA,KAAS,QAAA,IACd,IAAA,CAAK,IAAA,KAAS,MAAA,IACd,KAAK,IAAA,KAAS,OAAA;EAAA,EACtB,CAAA,MAAO;EAEH,IAAA,OAAO,KAAK,IAAA,KAAS,QAAA,IACjB,KAAK,IAAA,KAAS,QAAA,IACd,KAAK,IAAA,KAAS,OAAA;EAAA,EACtB;EACJ;EAGA,SAAS,EAAA,CAAG,GAAA,EAAwB,CAAA,EAAQ,CAAA,EAAiB;EAAE,EAAA,OAAO,CAAA,KAAM,CAAA;EAAG;EAE/E,SAAS,GAAA,CAAI,GAAA,EAAwB,CAAA,EAAQ,CAAA,EAAiB;EAAE,EAAA,OAAO,CAAA,KAAM,CAAA;EAAG;EAEhF,SAAS,EAAA,CAAG,GAAA,EAAwB,CAAA,EAAQ,CAAA,EAAiB;EAAE,EAAA,OAAO,CAAA,GAAI,CAAA;EAAG;EAE7E,SAAS,EAAA,CAAG,GAAA,EAAwB,CAAA,EAAQ,CAAA,EAAiB;EAAE,EAAA,OAAO,CAAA,GAAI,CAAA;EAAG;EAE7E,SAAS,IAAA,CAAK,GAAA,EAAwB,CAAA,EAAQ,CAAA,EAAiB;EAAE,EAAA,OAAO,CAAA,IAAK,CAAA;EAAG;EAEhF,SAAS,IAAA,CAAK,GAAA,EAAwB,CAAA,EAAQ,CAAA,EAAiB;EAAE,EAAA,OAAO,CAAA,IAAK,CAAA;EAAG;EAGhF,SAAS,SAAA,CAAU,GAAA,EAAwB,CAAA,EAAQ,CAAA,EAAQ,CAAA,EAAiB;EAAE,EAAA,OAAO,CAAA,CAAE,OAAA,CAAQ,CAAA,EAAG,CAAC,CAAA,KAAM,CAAA;EAAG;EAE5G,SAAS,UAAA,CAAW,GAAA,EAAwB,CAAA,EAAQ,CAAA,EAAQ,CAAA,EAAiB;EAAE,EAAA,OAAO,CAAC,SAAA,CAAU,GAAA,EAAK,CAAA,EAAG,GAAG,CAAC,CAAA;EAAG;EAEhH,SAAS,SAAA,CAAU,GAAA,EAAwB,CAAA,EAAQ,CAAA,EAAQ,CAAA,EAAiB;EAAE,EAAA,OAAO,CAAA,CAAE,OAAA,CAAQ,CAAA,EAAG,CAAC,CAAA,GAAI,CAAA;EAAG;EAE1G,SAAS,SAAA,CAAU,GAAA,EAAwB,CAAA,EAAQ,CAAA,EAAQ,CAAA,EAAiB;EAAE,EAAA,OAAO,CAAA,CAAE,OAAA,CAAQ,CAAA,EAAG,CAAC,CAAA,GAAI,CAAA;EAAG;EAE1G,SAAS,WAAA,CAAY,GAAA,EAAwB,CAAA,EAAQ,CAAA,EAAQ,CAAA,EAAiB;EAAE,EAAA,OAAO,CAAA,CAAE,OAAA,CAAQ,CAAA,EAAG,CAAC,CAAA,IAAK,CAAA;EAAG;EAE7G,SAAS,WAAA,CAAY,GAAA,EAAwB,CAAA,EAAQ,CAAA,EAAQ,CAAA,EAAiB;EAAE,EAAA,OAAO,CAAA,CAAE,OAAA,CAAQ,CAAA,EAAG,CAAC,CAAA,IAAK,CAAA;EAAG;EAmB7G,SAAS,cAAA,CACL,EAAA,EAEA,YAAA,EAEA,mBAAA,EACsB;EACtB,EAAA,MAAM,iBAAA,GAAoB,EAAA,KAAO,IAAA,IAAQ,EAAA,KAAO,IAAA;EAEhD,EAAA,OAAO,MAAM,UAAA,CAAiC;EAAA,IAO1C,WAAA,CAAY,GAAA,EAAiB,GAAA,EAAiB,QAAA,EAA8B;EACxE,MAAA,IAAA,CAAK,IAAA,GAAO,WAAA;EACZ,MAAA,IAAA,CAAK,GAAA,GAAM,GAAA;EACX,MAAA,IAAA,CAAK,GAAA,GAAM,GAAA;EACX,MAAA,IAAA,CAAK,QAAA,GAAW,QAAA;EAChB,MAAA,IAAA,CAAK,qBAAqB,GAAA,CAAI,IAAA,CAAK,SAAS,OAAA,IAAW,GAAA,CAAI,KAAK,IAAA,KAAS,OAAA;EAAA,IAC7E;EAAA,IAEA,OAAO,KAAA,CAAM,IAAA,EAA8B,OAAA,EAAmD;EAC1F,MAAA,IAAI,IAAA,CAAK,MAAA,KAAW,CAAA,IAAK,IAAA,CAAK,MAAA,KAAW,CAAA;EACrC,QAAA,OAAO,OAAA,CAAQ,MAAM,CAAA,gCAAA,CAAkC,CAAA;EAE3D,MAAA,MAAMY,GAAAA,GAAK,KAAK,CAAC,CAAA;EAEjB,MAAA,IAAI,MAAM,OAAA,CAAQ,KAAA,CAAM,KAAK,CAAC,CAAA,EAAG,GAAG,SAAS,CAAA;EAC7C,MAAA,IAAI,CAAC,KAAK,OAAO,IAAA;EACjB,MAAA,IAAI,CAAC,gBAAA,CAAiBA,GAAAA,EAAI,GAAA,CAAI,IAAI,CAAA,EAAG;EACjC,QAAA,OAAO,OAAA,CAAQ,KAAA,CAAM,CAAA,CAAA,EAAIA,GAAE,CAAA,0CAAA,EAA6CZ,WAAS,GAAA,CAAI,IAAI,CAAC,CAAA,EAAA,CAAA,EAAM,CAAC,CAAA;EAAA,MACrG;EACA,MAAA,IAAI,MAAM,OAAA,CAAQ,KAAA,CAAM,KAAK,CAAC,CAAA,EAAG,GAAG,SAAS,CAAA;EAC7C,MAAA,IAAI,CAAC,KAAK,OAAO,IAAA;EACjB,MAAA,IAAI,CAAC,gBAAA,CAAiBY,GAAAA,EAAI,GAAA,CAAI,IAAI,CAAA,EAAG;EACjC,QAAA,OAAO,OAAA,CAAQ,KAAA,CAAM,CAAA,CAAA,EAAIA,GAAE,CAAA,0CAAA,EAA6CZ,WAAS,GAAA,CAAI,IAAI,CAAC,CAAA,EAAA,CAAA,EAAM,CAAC,CAAA;EAAA,MACrG;EAEA,MAAA,IACI,GAAA,CAAI,IAAA,CAAK,IAAA,KAAS,GAAA,CAAI,IAAA,CAAK,IAAA,IAC3B,GAAA,CAAI,IAAA,CAAK,IAAA,KAAS,OAAA,IAClB,GAAA,CAAI,IAAA,CAAK,SAAS,OAAA,EACpB;EACE,QAAA,OAAO,OAAA,CAAQ,KAAA,CAAM,CAAA,sBAAA,EAAyBA,UAAA,CAAS,GAAA,CAAI,IAAI,CAAC,CAAA,OAAA,EAAUA,UAAA,CAAS,GAAA,CAAI,IAAI,CAAC,CAAA,EAAA,CAAI,CAAA;EAAA,MACpG;EAEA,MAAA,IAAI,iBAAA,EAAmB;EAEnB,QAAA,IAAI,IAAI,IAAA,CAAK,IAAA,KAAS,WAAW,GAAA,CAAI,IAAA,CAAK,SAAS,OAAA,EAAS;EAExD,UAAA,GAAA,GAAM,IAAI,SAAA,CAAU,GAAA,CAAI,IAAA,EAAM,CAAC,GAAG,CAAC,CAAA;EAAA,QACvC,CAAA,MAAA,IAAW,IAAI,IAAA,CAAK,IAAA,KAAS,WAAW,GAAA,CAAI,IAAA,CAAK,SAAS,OAAA,EAAS;EAE/D,UAAA,GAAA,GAAM,IAAI,SAAA,CAAU,GAAA,CAAI,IAAA,EAAM,CAAC,GAAG,CAAC,CAAA;EAAA,QACvC;EAAA,MACJ;EAEA,MAAA,IAAI,QAAA,GAAW,IAAA;EACf,MAAA,IAAI,IAAA,CAAK,WAAW,CAAA,EAAG;EACnB,QAAA,IACI,GAAA,CAAI,IAAA,CAAK,IAAA,KAAS,QAAA,IAClB,IAAI,IAAA,CAAK,IAAA,KAAS,QAAA,IAClB,GAAA,CAAI,KAAK,IAAA,KAAS,OAAA,IAClB,GAAA,CAAI,IAAA,CAAK,SAAS,OAAA,EACpB;EACE,UAAA,OAAO,OAAA,CAAQ,MAAM,CAAA,gDAAA,CAAkD,CAAA;EAAA,QAC3E;EACA,QAAA,QAAA,GAAW,QAAQ,KAAA,CAAM,IAAA,CAAK,CAAC,CAAA,EAAG,GAAG,YAAY,CAAA;EACjD,QAAA,IAAI,CAAC,UAAU,OAAO,IAAA;EAAA,MAC1B;EAGA,MAAA,OAAO,IAAI,UAAA,CAAW,GAAA,EAAK,GAAA,EAAK,QAAQ,CAAA;EAAA,IAC5C;EAAA,IAEA,SAAS,GAAA,EAAiC;EAEtC,MAAA,MAAM,GAAA,GAAM,IAAA,CAAK,GAAA,CAAI,QAAA,CAAS,GAAG,CAAA;EAEjC,MAAA,MAAM,GAAA,GAAM,IAAA,CAAK,GAAA,CAAI,QAAA,CAAS,GAAG,CAAA;EAEjC,MAAA,IAAI,iBAAA,IAAqB,KAAK,kBAAA,EAAoB;EAE9C,QAAA,MAAMa,GAAAA,GAAK,OAAO,GAAG,CAAA;EAErB,QAAA,MAAM,EAAA,GAAK,OAAO,GAAG,CAAA;EAErB,QAAA,IAAIA,GAAAA,CAAG,IAAA,KAAS,EAAA,CAAG,IAAA,IAAQ,EAAEA,IAAG,IAAA,KAAS,QAAA,IAAYA,GAAAA,CAAG,IAAA,KAAS,QAAA,CAAA,EAAW;EACxE,UAAA,MAAM,IAAI,YAAA,CAAa,CAAA,wBAAA,EAA2B,EAAE,CAAA,yDAAA,EAA4DA,IAAG,IAAI,CAAA,EAAA,EAAK,EAAA,CAAG,IAAI,CAAA,UAAA,CAAY,CAAA;EAAA,QACnJ;EAAA,MACJ;EAEA,MAAA,IAAI,IAAA,CAAK,QAAA,IAAY,CAAC,iBAAA,IAAqB,KAAK,kBAAA,EAAoB;EAEhE,QAAA,MAAMA,GAAAA,GAAK,OAAO,GAAG,CAAA;EAErB,QAAA,MAAM,EAAA,GAAK,OAAO,GAAG,CAAA;EACrB,QAAA,IAAIA,GAAAA,CAAG,IAAA,KAAS,QAAA,IAAY,EAAA,CAAG,SAAS,QAAA,EAAU;EAC9C,UAAA,OAAO,YAAA,CAAa,GAAA,EAAK,GAAA,EAAK,GAAG,CAAA;EAAA,QACrC;EAAA,MACJ;EAEA,MAAA,OAAO,IAAA,CAAK,QAAA,GACR,mBAAA,CAAoB,GAAA,EAAK,KAAK,GAAA,EAAK,IAAA,CAAK,QAAA,CAAS,QAAA,CAAS,GAAG,CAAC,CAAA,GAC9D,YAAA,CAAa,GAAA,EAAK,KAAK,GAAG,CAAA;EAAA,IAClC;EAAA,IAEA,UAAU,EAAA,EAA6B;EACnC,MAAA,EAAA,CAAG,KAAK,GAAG,CAAA;EACX,MAAA,EAAA,CAAG,KAAK,GAAG,CAAA;EACX,MAAA,IAAI,KAAK,QAAA,EAAU;EACf,QAAA,EAAA,CAAG,KAAK,QAAQ,CAAA;EAAA,MACpB;EAAA,IACJ;EAAA,IAEA,aAAA,GAAyB;EACrB,MAAA,OAAO,IAAA;EAAA,IACX;EAAA,IAEA,SAAA,GAAkC;EAC9B,MAAA,MAAM,UAAA,GAAqC,CAAC,EAAE,CAAA;EAC9C,MAAA,IAAA,CAAK,UAAU,CAAA,KAAA,KAAS;EAAE,QAAA,UAAA,CAAW,IAAA,CAAK,KAAA,CAAM,SAAA,EAAW,CAAA;EAAA,MAAG,CAAC,CAAA;EAC/D,MAAA,OAAO,UAAA;EAAA,IACX;EAAA,GACJ;EACJ;EAEO,MAAM,MAAA,GAA4C,cAAA,CAAe,IAAA,EAAM,EAAA,EAAI,SAAS,CAAA;EACpF,MAAM,SAAA,GAA+C,cAAA,CAAe,IAAA,EAAM,GAAA,EAAK,UAAU,CAAA;EACzF,MAAM,QAAA,GAA8C,cAAA,CAAe,GAAA,EAAK,EAAA,EAAI,SAAS,CAAA;EACrF,MAAM,WAAA,GAAiD,cAAA,CAAe,GAAA,EAAK,EAAA,EAAI,SAAS,CAAA;EACxF,MAAM,eAAA,GAAqD,cAAA,CAAe,IAAA,EAAM,IAAA,EAAM,WAAW,CAAA;EACjG,MAAM,kBAAA,GAAwD,cAAA,CAAe,IAAA,EAAM,IAAA,EAAM,WAAW,CAAA;;ECvM3G,MAAqB,YAAA,CAAmC;EAAA;EAAA,EASpD,YACI,MAAA,EACA,MAAA,EACA,QAAA,EACA,IAAA,EACA,mBACA,iBAAA,EACF;EACE,IAAA,IAAA,CAAK,IAAA,GAAO,UAAA;EACZ,IAAA,IAAA,CAAK,MAAA,GAAS,MAAA;EACd,IAAA,IAAA,CAAK,MAAA,GAAS,MAAA;EACd,IAAA,IAAA,CAAK,QAAA,GAAW,QAAA;EAChB,IAAA,IAAA,CAAK,IAAA,GAAO,IAAA;EACZ,IAAA,IAAA,CAAK,iBAAA,GAAoB,iBAAA;EACzB,IAAA,IAAA,CAAK,iBAAA,GAAoB,iBAAA;EAAA,EAC7B;EAAA,EAEA,OAAO,KAAA,CAAM,IAAA,EAA8B,OAAA,EAA4C;EACnF,IAAA,IAAI,KAAK,MAAA,KAAW,CAAA;EAChB,MAAA,OAAO,OAAA,CAAQ,MAAM,CAAA,uBAAA,CAAyB,CAAA;EAElD,IAAA,MAAM,SAAS,OAAA,CAAQ,KAAA,CAAM,KAAK,CAAC,CAAA,EAAG,GAAG,UAAU,CAAA;EACnD,IAAA,IAAI,CAAC,QAAQ,OAAO,IAAA;EAEpB,IAAA,MAAM,OAAA,GAAU,KAAK,CAAC,CAAA;EACtB,IAAA,IAAI,OAAO,OAAA,KAAY,QAAA,IAAY,KAAA,CAAM,QAAQ,OAAO,CAAA;EACpD,MAAA,OAAO,OAAA,CAAQ,MAAM,CAAA,gDAAA,CAAkD,CAAA;EAE3E,IAAA,IAAI,MAAA,GAAS,IAAA;EACb,IAAA,IAAI,OAAA,CAAQ,QAAQ,CAAA,EAAG;EACnB,MAAA,MAAA,GAAS,QAAQ,gBAAA,CAAiB,OAAA,CAAQ,QAAQ,CAAA,EAAG,CAAA,EAAG,UAAU,UAAU,CAAA;EAC5E,MAAA,IAAI,CAAC,QAAQ,OAAO,IAAA;EAAA,IACxB;EAEA,IAAA,IAAI,QAAA,GAAW,IAAA;EACf,IAAA,IAAI,OAAA,CAAQ,UAAU,CAAA,EAAG;EACrB,MAAA,QAAA,GAAW,QAAQ,gBAAA,CAAiB,OAAA,CAAQ,UAAU,CAAA,EAAG,CAAA,EAAG,YAAY,UAAU,CAAA;EAClF,MAAA,IAAI,CAAC,UAAU,OAAO,IAAA;EAAA,IAC1B;EAEA,IAAA,IAAI,IAAA,GAAO,IAAA;EACX,IAAA,IAAI,OAAA,CAAQ,MAAM,CAAA,EAAG;EACjB,MAAA,IAAA,GAAO,QAAQ,gBAAA,CAAiB,OAAA,CAAQ,MAAM,CAAA,EAAG,CAAA,EAAG,QAAQ,UAAU,CAAA;EACtE,MAAA,IAAI,CAAC,MAAM,OAAO,IAAA;EAAA,IACtB;EAEA,IAAA,IAAI,iBAAA,GAAoB,IAAA;EACxB,IAAA,IAAI,OAAA,CAAQ,qBAAqB,CAAA,KAAM,MAAA,EAAW;EAC9C,MAAA,iBAAA,GAAoB,QAAQ,gBAAA,CAAiB,OAAA,CAAQ,qBAAqB,CAAA,EAAG,CAAA,EAAG,uBAAuB,UAAU,CAAA;EACjH,MAAA,IAAI,CAAC,mBAAmB,OAAO,IAAA;EAAA,IACnC;EAEA,IAAA,IAAI,iBAAA,GAAoB,IAAA;EACxB,IAAA,IAAI,OAAA,CAAQ,qBAAqB,CAAA,KAAM,MAAA,EAAW;EAC9C,MAAA,iBAAA,GAAoB,QAAQ,gBAAA,CAAiB,OAAA,CAAQ,qBAAqB,CAAA,EAAG,CAAA,EAAG,uBAAuB,UAAU,CAAA;EACjH,MAAA,IAAI,CAAC,mBAAmB,OAAO,IAAA;EAAA,IACnC;EAGA,IAAA,OAAO,IAAI,YAAA,CAAa,MAAA,EAAQ,QAAQ,QAAA,EAAU,IAAA,EAAM,mBAAmB,iBAAiB,CAAA;EAAA,EAChG;EAAA,EAEA,SAAS,GAAA,EAAgC;EAErC,IAAA,OAAO,IAAI,IAAA,CAAK,YAAA;EAAA,MAAa,KAAK,MAAA,GAAS,IAAA,CAAK,OAAO,QAAA,CAAS,GAAG,IAAI,EAAC;EAAA,MACpE;EAAA,QACI,OACK,IAAA,CAAK,QAAA,IAAY,UAAA,IACjB,IAAA,CAAK,QAAQ,MAAA,IACd,SAAA;EAAA;EAAA,QAEJ,UAAU,IAAA,CAAK,QAAA,GAAW,KAAK,QAAA,CAAS,QAAA,CAAS,GAAG,CAAA,GAAI,MAAA;EAAA;EAAA,QAExD,MAAM,IAAA,CAAK,IAAA,GAAO,KAAK,IAAA,CAAK,QAAA,CAAS,GAAG,CAAA,GAAI,MAAA;EAAA;EAAA,QAE5C,uBAAuB,IAAA,CAAK,iBAAA,GAAoB,KAAK,iBAAA,CAAkB,QAAA,CAAS,GAAG,CAAA,GAAI,MAAA;EAAA;EAAA,QAEvF,uBAAuB,IAAA,CAAK,iBAAA,GAAoB,KAAK,iBAAA,CAAkB,QAAA,CAAS,GAAG,CAAA,GAAI;EAAA;EAAA;EAE3F,MAAG,MAAA,CAAO,IAAA,CAAK,MAAA,CAAO,QAAA,CAAS,GAAG,CAAC,CAAA;EAAA,EAC3C;EAAA,EAEA,UAAU,EAAA,EAA6B;EACnC,IAAA,EAAA,CAAG,KAAK,MAAM,CAAA;EACd,IAAA,IAAI,KAAK,MAAA,EAAQ;EACb,MAAA,EAAA,CAAG,KAAK,MAAM,CAAA;EAAA,IAClB;EACA,IAAA,IAAI,KAAK,QAAA,EAAU;EACf,MAAA,EAAA,CAAG,KAAK,QAAQ,CAAA;EAAA,IACpB;EACA,IAAA,IAAI,KAAK,IAAA,EAAM;EACX,MAAA,EAAA,CAAG,KAAK,IAAI,CAAA;EAAA,IAChB;EACA,IAAA,IAAI,KAAK,iBAAA,EAAmB;EACxB,MAAA,EAAA,CAAG,KAAK,iBAAiB,CAAA;EAAA,IAC7B;EACA,IAAA,IAAI,KAAK,iBAAA,EAAmB;EACxB,MAAA,EAAA,CAAG,KAAK,iBAAiB,CAAA;EAAA,IAC7B;EAAA,EACJ;EAAA,EAEA,aAAA,GAAyB;EACrB,IAAA,OAAO,KAAA;EAAA,EACX;EAAA,EAEA,SAAA,GAAkC;EAE9B,IAAA,MAAM,UAA+B,EAAC;EACtC,IAAA,IAAI,KAAK,MAAA,EAAQ;EACb,MAAA,OAAA,CAAQ,QAAQ,CAAA,GAAI,IAAA,CAAK,MAAA,CAAO,SAAA,EAAU;EAAA,IAC9C;EACA,IAAA,IAAI,KAAK,QAAA,EAAU;EACf,MAAA,OAAA,CAAQ,UAAU,CAAA,GAAI,IAAA,CAAK,QAAA,CAAS,SAAA,EAAU;EAAA,IAClD;EACA,IAAA,IAAI,KAAK,IAAA,EAAM;EACX,MAAA,OAAA,CAAQ,MAAM,CAAA,GAAI,IAAA,CAAK,IAAA,CAAK,SAAA,EAAU;EAAA,IAC1C;EACA,IAAA,IAAI,KAAK,iBAAA,EAAmB;EACxB,MAAA,OAAA,CAAQ,qBAAqB,CAAA,GAAI,IAAA,CAAK,iBAAA,CAAkB,SAAA,EAAU;EAAA,IACtE;EACA,IAAA,IAAI,KAAK,iBAAA,EAAmB;EACxB,MAAA,OAAA,CAAQ,qBAAqB,CAAA,GAAI,IAAA,CAAK,iBAAA,CAAkB,SAAA,EAAU;EAAA,IACtE;EACA,IAAA,OAAO,CAAC,eAAA,EAAiB,IAAA,CAAK,MAAA,CAAO,SAAA,IAAa,OAAO,CAAA;EAAA,EAC7D;EACJ;;ECpIA,MAAM,MAAA,CAA6B;EAAA,EAI/B,YAAY,KAAA,EAAmB;EAC3B,IAAA,IAAA,CAAK,IAAA,GAAO,UAAA;EACZ,IAAA,IAAA,CAAK,KAAA,GAAQ,KAAA;EAAA,EACjB;EAAA,EAEA,OAAO,KAAA,CAAM,IAAA,EAA8B,OAAA,EAAoD;EAC3F,IAAA,IAAI,IAAA,CAAK,WAAW,CAAA,EAAG;EACnB,MAAA,OAAA,CAAQ,KAAA,CAAM,CAAA,+BAAA,EAAkC,IAAA,CAAK,MAAA,GAAS,CAAC,CAAA,SAAA,CAAW,CAAA;EAC1E,MAAA,OAAO,IAAA;EAAA,IACX;EAEA,IAAA,MAAM,QAAQ,OAAA,CAAQ,KAAA,CAAM,IAAA,CAAK,CAAC,GAAG,CAAC,CAAA;EACtC,IAAA,IAAI,CAAC,OAAO,OAAO,IAAA;EAEnB,IAAA,IAAI,KAAA,CAAM,IAAA,CAAK,IAAA,KAAS,OAAA,IAAW,KAAA,CAAM,IAAA,CAAK,IAAA,KAAS,QAAA,IAAY,KAAA,CAAM,IAAA,CAAK,IAAA,KAAS,OAAA,EAAS;EAC5F,MAAA,OAAA,CAAQ,MAAM,CAAA,qDAAA,EAAwDb,UAAA,CAAS,KAAA,CAAM,IAAI,CAAC,CAAA,SAAA,CAAW,CAAA;EACrG,MAAA,OAAO,IAAA;EAAA,IACX;EAEA,IAAA,OAAO,IAAI,OAAO,KAAK,CAAA;EAAA,EAC3B;EAAA,EAEA,SAAS,GAAA,EAAgC;EAErC,IAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,KAAA,CAAM,QAAA,CAAS,GAAG,CAAA;EACrC,IAAA,IAAI,OAAO,UAAU,QAAA,EAAU;EAC3B,MAAA,OAAO,KAAA,CAAM,MAAA;EAAA,IACjB,CAAA,MAAA,IAAW,KAAA,CAAM,OAAA,CAAQ,KAAK,CAAA,EAAG;EAC7B,MAAA,OAAO,KAAA,CAAM,MAAA;EAAA,IACjB,CAAA,MAAO;EAEH,MAAA,MAAM,IAAI,aAAa,CAAA,wDAAA,EAA2DA,UAAA,CAAS,OAAO,KAAK,CAAC,CAAC,CAAA,SAAA,CAAW,CAAA;EAAA,IACxH;EAAA,EACJ;EAAA,EAEA,UAAU,EAAA,EAA6B;EACnC,IAAA,EAAA,CAAG,KAAK,KAAK,CAAA;EAAA,EACjB;EAAA,EAEA,aAAA,GAAyB;EACrB,IAAA,OAAO,KAAA;EAAA,EACX;EAAA,EAEA,SAAA,GAAkC;EAC9B,IAAA,MAAM,UAAA,GAA0C,CAAC,QAAQ,CAAA;EACzD,IAAA,IAAA,CAAK,UAAU,CAAA,KAAA,KAAS;EAAE,MAAA,UAAA,CAAW,IAAA,CAAK,KAAA,CAAM,SAAA,EAAW,CAAA;EAAA,IAAG,CAAC,CAAA;EAC/D,IAAA,OAAO,UAAA;EAAA,EACX;EACJ;;EC5DO,SAAS,WAAW,CAAA,EAAyB;EAChD,EAAA,OAAO,WAAY;EACf,IAAA,CAAA,IAAK,CAAA;EACL,IAAA,CAAA,GAAK,IAAI,UAAA,GAAc,CAAA;EACvB,IAAA,IAAI,IAAI,IAAA,CAAK,IAAA,CAAK,IAAK,CAAA,KAAM,EAAA,EAAK,IAAI,CAAC,CAAA;EACvC,IAAA,CAAA,GAAK,CAAA,GAAI,KAAK,IAAA,CAAK,CAAA,GAAK,MAAM,CAAA,EAAI,EAAA,GAAK,CAAC,CAAA,GAAK,CAAA;EAC7C,IAAA,OAAA,CAAA,CAAS,CAAA,GAAK,CAAA,KAAM,EAAA,MAAS,CAAA,IAAK,UAAA;EAAA,EACtC,CAAA;EACJ;;EC4CA,MAAM,WAAA,GAAkC;EAAA;EAAA,EAEpC,IAAA,EAAM,MAAA;EAAA,EACN,IAAA,EAAM,SAAA;EAAA,EACN,GAAA,EAAK,WAAA;EAAA,EACL,GAAA,EAAK,QAAA;EAAA,EACL,IAAA,EAAM,kBAAA;EAAA,EACN,IAAA,EAAM,eAAA;EAAA,EACN,OAAA,EAAS,SAAA;EAAA,EACT,IAAA,EAAM,EAAA;EAAA,EACN,iBAAA,EAAmB,cAAA;EAAA,EACnB,SAAA,EAAW,SAAA;EAAA,EACX,MAAA,EAAQ,IAAA;EAAA,EACR,UAAA,EAAY,QAAA;EAAA,EACZ,UAAA,EAAY,kBAAA;EAAA,EACZ,QAAA,EAAU,gBAAA;EAAA,EACV,OAAA,EAAS,eAAA;EAAA,EACT,aAAA,EAAe,WAAA;EAAA,EACf,iBAAA,EAAmB,WAAA;EAAA,EACnB,iBAAA,EAAmB,WAAA;EAAA,EACnB,QAAA,EAAU,MAAA;EAAA,EACV,KAAA,EAAO,GAAA;EAAA,EACP,SAAA,EAAW,OAAA;EAAA,EACX,OAAA,EAAS,KAAA;EAAA,EACT,QAAA,EAAU,SAAA;EAAA,EACV,eAAA,EAAiB,YAAA;EAAA,EACjB,QAAA,EAAU,SAAA;EAAA,EACV,OAAA,EAAS,KAAA;EAAA,EACT,MAAA,EAAQ,IAAA;EAAA,EACR,QAAA,EAAU,SAAA;EAAA,EACV,YAAA,EAAc,QAAA;EAAA,EACd,UAAA,EAAY,QAAA;EAAA,EACZ,WAAA,EAAa,QAAA;EAAA,EACb,WAAA,EAAa,QAAA;EAAA,EACb,KAAA,EAAO,GAAA;EAAA,EACP,QAAA,EAAU,MAAA;EAAA,EACV,UAAA,EAAY,QAAA;EAAA,EACZ,QAAA,EAAU;EACd,CAAA;EAEA,SAAS,KAAK,GAAA,EAAwB,CAAC,GAAG,CAAA,EAAG,CAAA,EAAG,CAAC,CAAA,EAAiB;EAE9D,EAAA,CAAA,GAAI,CAAA,CAAE,SAAS,GAAG,CAAA;EAElB,EAAA,CAAA,GAAI,CAAA,CAAE,SAAS,GAAG,CAAA;EAElB,EAAA,CAAA,GAAI,CAAA,CAAE,SAAS,GAAG,CAAA;EAElB,EAAA,MAAM,KAAA,GAAQ,CAAA,GAAI,CAAA,CAAE,QAAA,CAAS,GAAG,CAAA,GAAI,CAAA;EACpC,EAAA,MAAM,KAAA,GAAQ,YAAA,CAAa,CAAA,EAAG,CAAA,EAAG,GAAG,KAAK,CAAA;EACzC,EAAA,IAAI,KAAA,EAAO,MAAM,IAAI,YAAA,CAAa,KAAK,CAAA;EAEvC,EAAA,OAAO,IAAI,MAAM,CAAA,GAAyB,GAAA,EAAK,IAAyB,GAAA,EAAK,CAAA,GAAyB,KAAK,KAAK,CAAA;EACpH;EAEA,SAAS,KAAK,GAAA,EAAwB,CAAC,GAAG,CAAA,EAAG,CAAA,EAAG,CAAC,CAAA,EAAiB;EAE9D,EAAA,CAAA,GAAI,CAAA,CAAE,SAAS,GAAG,CAAA;EAElB,EAAA,CAAA,GAAI,CAAA,CAAE,SAAS,GAAG,CAAA;EAElB,EAAA,CAAA,GAAI,CAAA,CAAE,SAAS,GAAG,CAAA;EAElB,EAAA,MAAM,KAAA,GAAQ,CAAA,GAAI,CAAA,CAAE,QAAA,CAAS,GAAG,CAAA,GAAI,CAAA;EACpC,EAAA,MAAM,KAAA,GAAQ,YAAA,CAAa,CAAA,EAAG,CAAA,EAAG,GAAG,KAAK,CAAA;EACzC,EAAA,IAAI,KAAA,EAAO,MAAM,IAAI,YAAA,CAAa,KAAK,CAAA;EAEvC,EAAA,MAAM,aAAA,GAAgB,QAAQ,CAAC,CAAA,EAAA,EAAK,CAAC,CAAA,GAAA,EAAM,CAAC,MAAM,KAAK,CAAA,CAAA,CAAA;EACvD,EAAA,MAAM,KAAA,GAAQ,KAAA,CAAM,KAAA,CAAM,aAAa,CAAA;EACvC,EAAA,IAAI,CAAC,KAAA,EAAO,MAAM,IAAI,YAAA,CAAa,CAAA,4BAAA,EAA+B,aAAa,CAAA,CAAE,CAAA;EACjF,EAAA,OAAO,KAAA;EACX;EAEA,SAAS,GAAA,CAAsB,KAAc,GAAA,EAAiB;EAC1D,EAAA,OAAO,GAAA,IAAO,GAAA;EAClB;EAEA,SAAS,GAAA,CAAsB,KAAc,GAAA,EAA2B;EACpE,EAAA,MAAM,CAAA,GAAI,IAAI,GAAG,CAAA;EACjB,EAAA,OAAO,OAAO,CAAA,KAAM,WAAA,GAAc,IAAA,GAAO,CAAA;EAC7C;EAEA,SAAS,YAAA,CAAa,CAAA,EAAY,CAAA,EAA4B,CAAA,EAAW,CAAA,EAAoB;EACzF,EAAA,OAAO,KAAK,CAAA,EAAG;EACX,IAAA,MAAM,CAAA,GAAK,IAAI,CAAA,IAAM,CAAA;EACrB,IAAA,IAAI,CAAA,CAAE,CAAC,CAAA,KAAM,CAAA;EACT,MAAA,OAAO,IAAA;EACX,IAAA,IAAI,CAAA,CAAE,CAAC,CAAA,GAAI,CAAA;EACP,MAAA,CAAA,GAAI,CAAA,GAAI,CAAA;EAAA;EAER,MAAA,CAAA,GAAI,CAAA,GAAI,CAAA;EAAA,EAChB;EACA,EAAA,OAAO,KAAA;EACX;EAEA,SAAS,QAAQ,IAAA,EAAqB;EAClC,EAAA,OAAO,EAAC,IAAA,EAAI;EAChB;EAIA,SAAS,oBAAA,CAAqB,QAAe,QAAA,EAAiB;EAC1D,EAAA,IAAI,CAAC,kBAAkB,MAAA,EAAQ,CAAC,WAAW,QAAA,EAAU,QAAA,EAAU,MAAM,CAAC,CAAA,EAAG;EACrE,IAAA,MAAM,IAAI,aAAa,CAAA,iFAAA,EAAoFc,UAAA,CAAa,OAAO,MAAM,CAAC,CAAC,CAAA,SAAA,CAAW,CAAA;EAAA,EACtJ;EACA,EAAA,IAAI,CAAC,iBAAA,CAAkB,QAAA,EAAU,CAAC,QAAA,EAAU,OAAO,CAAC,CAAA,EAAG;EACnD,IAAA,MAAM,IAAI,aAAa,CAAA,kEAAA,EAAqEA,UAAA,CAAa,OAAO,QAAQ,CAAC,CAAC,CAAA,SAAA,CAAW,CAAA;EAAA,EACzI;EACJ;EAEA,SAAS,WAAW,GAAA,EAAa;EAC7B,EAAA,IAAI,IAAA,GAAO,CAAA;EACX,EAAA,IAAI,GAAA,CAAI,WAAW,CAAA,EAAG;EAClB,IAAA,OAAO,IAAA;EAAA,EACX;EACA,EAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,GAAA,CAAI,QAAQ,CAAA,EAAA,EAAK;EACjC,IAAA,MAAM,IAAA,GAAO,GAAA,CAAI,UAAA,CAAW,CAAC,CAAA;EAC7B,IAAA,IAAA,GAAA,CAAS,IAAA,IAAQ,KAAK,IAAA,GAAQ,IAAA;EAC9B,IAAA,IAAA,GAAO,IAAA,GAAO,IAAA;EAAA,EAClB;EACA,EAAA,OAAO,IAAA;EACX;EAEA,kBAAA,CAAmB,SAAS,WAAA,EAAa;EAAA,EACrC,OAAA,EAAS;EAAA,IACL,SAAA;EAAA,IACA,CAAC,UAAU,CAAA;EAAA;EAAA,IAEX,CAAC,GAAA,EAAK,CAAC,CAAC,CAAA,KAAM;EAAE,MAAA,MAAM,IAAI,YAAA,CAAa,CAAA,CAAE,QAAA,CAAS,GAAG,CAAC,CAAA;EAAA,IAAG;EAAA,GAC7D;EAAA,EACA,QAAA,EAAU;EAAA,IACN,UAAA;EAAA,IACA,CAAC,SAAS,CAAA;EAAA;EAAA,IAEV,CAAC,GAAA,EAAK,CAAC,CAAC,CAAA,KAAMA,UAAA,CAAa,MAAA,CAAO,CAAA,CAAE,QAAA,CAAS,GAAG,CAAC,CAAC;EAAA,GACtD;EAAA,EACA,SAAA,EAAW;EAAA,IACPf,OAAA,CAAM,YAAY,CAAC,CAAA;EAAA,IACnB,CAAC,SAAS,CAAA;EAAA,IACV,CAAC,GAAA,EAAK,CAAC,CAAC,CAAA,KAAM;EAEV,MAAA,OAAO,EAAE,QAAA,CAAS,GAAG,EAAE,6BAAA,CAA8B,IAAI,EAAE,OAAA,EAAQ;EAAA,IACvE;EAAA,GACJ;EAAA,EACA,SAAA,EAAW;EAAA,IACPA,OAAA,CAAM,YAAY,CAAC,CAAA;EAAA,IACnB,CAAC,SAAS,CAAA;EAAA,IACV,CAAC,GAAA,EAAK,CAAC,CAAC,CAAA,KAAM;EAEV,MAAA,OAAO,EAAE,QAAA,CAAS,GAAG,EAAE,6BAAA,CAA8B,IAAI,EAAE,WAAA,EAAY;EAAA,IAC3E;EAAA,GACJ;EAAA,EACA,KAAA,EAAO;EAAA,IACH,SAAA;EAAA,IACA,CAAC,UAAA,EAAY,UAAA,EAAY,UAAU,CAAA;EAAA,IACnC;EAAA,GACJ;EAAA,EACA,MAAA,EAAQ;EAAA,IACJ,SAAA;EAAA,IACA,CAAC,UAAA,EAAY,UAAA,EAAY,UAAA,EAAY,UAAU,CAAA;EAAA,IAC/C;EAAA,GACJ;EAAA,EACA,KAAA,EAAO;EAAA,IACH,SAAA;EAAA,IACA,CAAC,UAAA,EAAY,UAAA,EAAY,UAAU,CAAA;EAAA,IACnC;EAAA,GACJ;EAAA,EACA,MAAA,EAAQ;EAAA,IACJ,SAAA;EAAA,IACA,CAAC,UAAA,EAAY,UAAA,EAAY,UAAA,EAAY,UAAU,CAAA;EAAA,IAC/C;EAAA,GACJ;EAAA,EACA,KAAA,EAAO;EAAA,IACH,IAAA,EAAM,WAAA;EAAA,IACN,SAAA,EAAW;EAAA,MACP;EAAA,QACI,CAAC,UAAU,CAAA;EAAA;EAAA,QAEX,CAAC,GAAA,EAAK,CAAC,GAAG,CAAA,KAAM,GAAA,CAAI,GAAA,CAAI,QAAA,CAAS,GAAG,CAAA,EAAG,GAAA,CAAI,UAAA,EAAY;EAAA,OAC3D;EAAA,MAAG;EAAA,QACC,CAAC,YAAY,UAAU,CAAA;EAAA;EAAA,QAEvB,CAAC,GAAA,EAAK,CAAC,GAAA,EAAK,GAAG,CAAA,KAAM,GAAA,CAAI,GAAA,CAAI,QAAA,CAAS,GAAG,CAAA,EAAG,GAAA,CAAI,QAAA,CAAS,GAAG,CAAC;EAAA;EACjE;EACJ,GACJ;EAAA,EACA,KAAA,EAAO;EAAA,IACH,IAAA,EAAM,SAAA;EAAA,IACN,SAAA,EAAW;EAAA,MACP;EAAA,QACI,CAAC,UAAU,CAAA;EAAA;EAAA,QAEX,CAAC,GAAA,EAAK,CAAC,GAAG,CAAA,KAAM,GAAA,CAAI,GAAA,CAAI,QAAA,CAAS,GAAG,CAAA,EAAG,GAAA,CAAI,UAAA,EAAY;EAAA,OAC3D;EAAA,MAAG;EAAA,QACC,CAAC,YAAY,UAAU,CAAA;EAAA;EAAA,QAEvB,CAAC,GAAA,EAAK,CAAC,GAAA,EAAK,GAAG,CAAA,KAAM,GAAA,CAAI,GAAA,CAAI,QAAA,CAAS,GAAG,CAAA,EAAG,GAAA,CAAI,QAAA,CAAS,GAAG,CAAC;EAAA;EACjE;EACJ,GACJ;EAAA,EACA,eAAA,EAAiB;EAAA,IACb,SAAA;EAAA,IACA,CAAC,UAAU,CAAA;EAAA;EAAA,IAEX,CAAC,GAAA,EAAK,CAAC,GAAG,CAAA,KAAM,GAAA,CAAI,GAAA,CAAI,QAAA,CAAS,GAAG,CAAA,EAAG,GAAA,CAAI,YAAA,IAAgB,EAAE;EAAA,GACjE;EAAA,EACA,YAAA,EAAc;EAAA,IACV,UAAA;EAAA,IACA,EAAC;EAAA,IACD,CAAC,GAAA,KAAQ,GAAA,CAAI,UAAA;EAAW,GAC5B;EAAA,EACA,eAAA,EAAiB;EAAA,IACb,UAAA;EAAA,IACA,EAAC;EAAA,IACD,CAAC,GAAA,KAAQ,GAAA,CAAI,YAAA;EAAa,GAC9B;EAAA,EACA,WAAA,EAAa;EAAA,IACT,UAAA;EAAA,IACA,EAAC;EAAA,IACD,CAAC,GAAA,KAAQ,GAAA,CAAI,OAAA,CAAQ,SAAA,IAAa;EAAA,GACtC;EAAA,EACA,iBAAA,EAAmB;EAAA,IACf,WAAA;EAAA,IACA,QAAQ,UAAU,CAAA;EAAA,IAClB,CAAC,KAAK,IAAA,KAAS;EACX,MAAA,MAAM,eAAA,GAAkB,IAAI,OAAA,IAAW,GAAA,CAAI,QAAQ,YAAA,IAAgB,GAAA,CAAI,OAAA,CAAQ,YAAA,CAAa,IAAA,GAAO,CAAA;EACnG,MAAA,IAAI,CAAC,eAAA,EAAiB;EAAE,QAAA,OAAO,KAAA;EAAA,MAAO;EACtC,MAAA,IAAI,IAAA,CAAK,WAAW,CAAA,EAAG;EAAE,QAAA,OAAO,IAAA;EAAA,MAAM;EACtC,MAAA,MAAM,QAAA,GAAwB,IAAI,OAAA,CAAQ,YAAA;EAC1C,MAAA,OAAO,IAAA,CAAK,KAAK,CAAA,GAAA,KAAO;EACpB,QAAA,MAAM,KAAA,GAAQ,GAAA,CAAI,QAAA,CAAS,GAAG,CAAA;EAC9B,QAAA,OAAO,QAAA,CAAS,IAAI,KAAK,CAAA;EAAA,MAC7B,CAAC,CAAA;EAAA,IACL;EAAA,GACJ;EAAA,EACA,IAAA,EAAM;EAAA,IACF,SAAA;EAAA,IACA,EAAC;EAAA,IACD,CAAC,GAAA,KAAQ,GAAA,CAAI,EAAA;EAAG,GACpB;EAAA,EACA,MAAA,EAAQ;EAAA,IACJ,UAAA;EAAA,IACA,EAAC;EAAA,IACD,CAAC,GAAA,KAAQ,GAAA,CAAI,OAAA,CAAQ;EAAA,GACzB;EAAA,EACA,OAAA,EAAS;EAAA,IACL,UAAA;EAAA,IACA,EAAC;EAAA,IACD,CAAC,GAAA,KAAQ,GAAA,CAAI,OAAA,CAAQ,KAAA,IAAS;EAAA,GAClC;EAAA,EACA,sBAAA,EAAwB;EAAA,IACpB,UAAA;EAAA,IACA,EAAC;EAAA,IACD,CAAC,GAAA,KAAQ,GAAA,CAAI,kBAAA;EAAmB,GACpC;EAAA,EACA,eAAA,EAAiB;EAAA,IACb,UAAA;EAAA,IACA,CAAC,UAAU,CAAA;EAAA;EAAA,IAEX,CAAC,GAAA,EAAK,CAAC,CAAC,CAAA,KAAM,IAAI,YAAA,CAAa,CAAA,CAAE,QAAA,CAAS,GAAG,CAAC;EAAA,GAClD;EAAA,EACA,iBAAA,EAAmB;EAAA,IACf,UAAA;EAAA,IACA,EAAC;EAAA,IACD,CAAC,GAAA,KAAQ,GAAA,CAAI,OAAA,CAAQ,cAAA,IAAkB;EAAA,GAC3C;EAAA,EACA,eAAA,EAAiB;EAAA,IACb,UAAA;EAAA,IACA,EAAC;EAAA,IACD,CAAC,GAAA,KAAQ,GAAA,CAAI,OAAA,CAAQ,YAAA,IAAgB;EAAA,GACzC;EAAA,EACA,cAAA,EAAgB;EAAA,IACZ,UAAA;EAAA,IACA,EAAC;EAAA,IACD,CAAC,GAAA,KAAQ,GAAA,CAAI,OAAA,CAAQ,WAAA,IAAe;EAAA,GACxC;EAAA,EACA,uBAAA,EAAyB;EAAA,IACrB,UAAA;EAAA,IACA,EAAC;EAAA,IACD,CAAC,GAAA,KAAQ,GAAA,CAAI,OAAA,CAAQ,mBAAA,IAAuB;EAAA,GAChD;EAAA,EACA,qBAAA,EAAuB;EAAA,IACnB,UAAA;EAAA,IACA,EAAC;EAAA,IACD,CAAC,GAAA,KAAQ,GAAA,CAAI,OAAA,CAAQ,iBAAA,IAAqB;EAAA,GAC9C;EAAA,EACA,aAAA,EAAe;EAAA,IACX,SAAA;EAAA,IACA,EAAC;EAAA,IACD,CAAC,QAAS,GAAA,CAAI,OAAA,CAAQ,gBAAgB,MAAA,GAAY,IAAA,GAAO,IAAI,OAAA,CAAQ;EAAA,GACzE;EAAA,EACA,GAAA,EAAK;EAAA,IACD,UAAA;EAAA,IACA,QAAQ,UAAU,CAAA;EAAA,IAClB,CAAC,KAAK,IAAA,KAAS;EACX,MAAA,IAAI,MAAA,GAAS,CAAA;EACb,MAAA,KAAA,MAAW,OAAO,IAAA,EAAM;EACpB,QAAA,MAAA,IAAU,GAAA,CAAI,SAAS,GAAG,CAAA;EAAA,MAC9B;EACA,MAAA,OAAO,MAAA;EAAA,IACX;EAAA,GACJ;EAAA,EACA,GAAA,EAAK;EAAA,IACD,UAAA;EAAA,IACA,QAAQ,UAAU,CAAA;EAAA,IAClB,CAAC,KAAK,IAAA,KAAS;EACX,MAAA,IAAI,MAAA,GAAS,CAAA;EACb,MAAA,KAAA,MAAW,OAAO,IAAA,EAAM;EACpB,QAAA,MAAA,IAAU,GAAA,CAAI,SAAS,GAAG,CAAA;EAAA,MAC9B;EACA,MAAA,OAAO,MAAA;EAAA,IACX;EAAA,GACJ;EAAA,EACA,GAAA,EAAK;EAAA,IACD,IAAA,EAAM,UAAA;EAAA,IACN,SAAA,EAAW;EAAA,MACP;EAAA,QACI,CAAC,YAAY,UAAU,CAAA;EAAA,QACvB,CAAC,GAAA,EAAK,CAAC,CAAA,EAAG,CAAC,CAAA,KAAM,CAAA,CAAE,QAAA,CAAS,GAAG,CAAA,GAAI,CAAA,CAAE,QAAA,CAAS,GAAG;EAAA,OACrD;EAAA,MAAG;EAAA,QACC,CAAC,UAAU,CAAA;EAAA,QACX,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,CAAA,CAAE,SAAS,GAAG;EAAA;EACjC;EACJ,GACJ;EAAA,EACA,GAAA,EAAK;EAAA,IACD,UAAA;EAAA,IACA,CAAC,YAAY,UAAU,CAAA;EAAA,IACvB,CAAC,GAAA,EAAK,CAAC,CAAA,EAAG,CAAC,CAAA,KAAM,CAAA,CAAE,QAAA,CAAS,GAAG,CAAA,GAAI,CAAA,CAAE,QAAA,CAAS,GAAG;EAAA,GACrD;EAAA,EACA,GAAA,EAAK;EAAA,IACD,UAAA;EAAA,IACA,CAAC,YAAY,UAAU,CAAA;EAAA,IACvB,CAAC,GAAA,EAAK,CAAC,CAAA,EAAG,CAAC,CAAA,KAAM,CAAA,CAAE,QAAA,CAAS,GAAG,CAAA,GAAI,CAAA,CAAE,QAAA,CAAS,GAAG;EAAA,GACrD;EAAA,EACA,KAAA,EAAO;EAAA,IACH,UAAA;EAAA,IACA,EAAC;EAAA,IACD,MAAM,IAAA,CAAK;EAAA,GACf;EAAA,EACA,IAAA,EAAM;EAAA,IACF,UAAA;EAAA,IACA,EAAC;EAAA,IACD,MAAM,IAAA,CAAK;EAAA,GACf;EAAA,EACA,GAAA,EAAK;EAAA,IACD,UAAA;EAAA,IACA,EAAC;EAAA,IACD,MAAM,IAAA,CAAK;EAAA,GACf;EAAA,EACA,GAAA,EAAK;EAAA,IACD,UAAA;EAAA,IACA,CAAC,YAAY,UAAU,CAAA;EAAA;EAAA,IAEvB,CAAC,GAAA,EAAK,CAAC,CAAA,EAAG,CAAC,CAAA,KAAM,IAAA,CAAK,GAAA,CAAI,CAAA,CAAE,SAAS,GAAG,CAAA,EAAG,CAAA,CAAE,QAAA,CAAS,GAAG,CAAC;EAAA,GAC9D;EAAA,EACA,MAAA,EAAQ;EAAA,IACJ,UAAA;EAAA,IACA,CAAC,UAAU,CAAA;EAAA;EAAA,IAEX,CAAC,GAAA,EAAK,CAAC,CAAC,CAAA,KAAM,KAAK,IAAA,CAAK,CAAA,CAAE,QAAA,CAAS,GAAG,CAAC;EAAA,GAC3C;EAAA,EACA,OAAA,EAAS;EAAA,IACL,UAAA;EAAA,IACA,CAAC,UAAU,CAAA;EAAA;EAAA,IAEX,CAAC,GAAA,EAAK,CAAC,CAAC,CAAA,KAAM,IAAA,CAAK,GAAA,CAAI,CAAA,CAAE,QAAA,CAAS,GAAG,CAAC,CAAA,GAAI,IAAA,CAAK;EAAA,GACnD;EAAA,EACA,IAAA,EAAM;EAAA,IACF,UAAA;EAAA,IACA,CAAC,UAAU,CAAA;EAAA;EAAA,IAEX,CAAC,GAAA,EAAK,CAAC,CAAC,CAAA,KAAM,KAAK,GAAA,CAAI,CAAA,CAAE,QAAA,CAAS,GAAG,CAAC;EAAA,GAC1C;EAAA,EACA,MAAA,EAAQ;EAAA,IACJ,UAAA;EAAA,IACA,CAAC,UAAU,CAAA;EAAA;EAAA,IAEX,CAAC,GAAA,EAAK,CAAC,CAAC,CAAA,KAAM,KAAK,IAAA,CAAK,CAAA,CAAE,QAAA,CAAS,GAAG,CAAC;EAAA,GAC3C;EAAA,EACA,KAAA,EAAO;EAAA,IACH,UAAA;EAAA,IACA,CAAC,UAAU,CAAA;EAAA;EAAA,IAEX,CAAC,GAAA,EAAK,CAAC,CAAC,CAAA,KAAM,KAAK,GAAA,CAAI,CAAA,CAAE,QAAA,CAAS,GAAG,CAAC;EAAA,GAC1C;EAAA,EACA,KAAA,EAAO;EAAA,IACH,UAAA;EAAA,IACA,CAAC,UAAU,CAAA;EAAA;EAAA,IAEX,CAAC,GAAA,EAAK,CAAC,CAAC,CAAA,KAAM,KAAK,GAAA,CAAI,CAAA,CAAE,QAAA,CAAS,GAAG,CAAC;EAAA,GAC1C;EAAA,EACA,KAAA,EAAO;EAAA,IACH,UAAA;EAAA,IACA,CAAC,UAAU,CAAA;EAAA;EAAA,IAEX,CAAC,GAAA,EAAK,CAAC,CAAC,CAAA,KAAM,KAAK,GAAA,CAAI,CAAA,CAAE,QAAA,CAAS,GAAG,CAAC;EAAA,GAC1C;EAAA,EACA,MAAA,EAAQ;EAAA,IACJ,UAAA;EAAA,IACA,CAAC,UAAU,CAAA;EAAA;EAAA,IAEX,CAAC,GAAA,EAAK,CAAC,CAAC,CAAA,KAAM,KAAK,IAAA,CAAK,CAAA,CAAE,QAAA,CAAS,GAAG,CAAC;EAAA,GAC3C;EAAA,EACA,MAAA,EAAQ;EAAA,IACJ,UAAA;EAAA,IACA,CAAC,UAAU,CAAA;EAAA;EAAA,IAEX,CAAC,GAAA,EAAK,CAAC,CAAC,CAAA,KAAM,KAAK,IAAA,CAAK,CAAA,CAAE,QAAA,CAAS,GAAG,CAAC;EAAA,GAC3C;EAAA,EACA,MAAA,EAAQ;EAAA,IACJ,UAAA;EAAA,IACA,CAAC,UAAU,CAAA;EAAA;EAAA,IAEX,CAAC,GAAA,EAAK,CAAC,CAAC,CAAA,KAAM,KAAK,IAAA,CAAK,CAAA,CAAE,QAAA,CAAS,GAAG,CAAC;EAAA,GAC3C;EAAA,EACA,KAAA,EAAO;EAAA,IACH,UAAA;EAAA,IACA,QAAQ,UAAU,CAAA;EAAA;EAAA,IAElB,CAAC,GAAA,EAAK,IAAA,KAAS,IAAA,CAAK,GAAA,CAAI,GAAG,IAAA,CAAK,GAAA,CAAI,CAAA,GAAA,KAAO,GAAA,CAAI,QAAA,CAAS,GAAG,CAAC,CAAC;EAAA,GACjE;EAAA,EACA,KAAA,EAAO;EAAA,IACH,UAAA;EAAA,IACA,QAAQ,UAAU,CAAA;EAAA;EAAA,IAElB,CAAC,GAAA,EAAK,IAAA,KAAS,IAAA,CAAK,GAAA,CAAI,GAAG,IAAA,CAAK,GAAA,CAAI,CAAA,GAAA,KAAO,GAAA,CAAI,QAAA,CAAS,GAAG,CAAC,CAAC;EAAA,GACjE;EAAA,EACA,KAAA,EAAO;EAAA,IACH,UAAA;EAAA,IACA,CAAC,UAAU,CAAA;EAAA;EAAA,IAEX,CAAC,GAAA,EAAK,CAAC,CAAC,CAAA,KAAM,KAAK,GAAA,CAAI,CAAA,CAAE,QAAA,CAAS,GAAG,CAAC;EAAA,GAC1C;EAAA,EACA,OAAA,EAAS;EAAA,IACL,UAAA;EAAA,IACA,CAAC,UAAU,CAAA;EAAA,IACX,CAAC,GAAA,EAAK,CAAC,CAAC,CAAA,KAAM;EAEV,MAAA,MAAM,CAAA,GAAI,CAAA,CAAE,QAAA,CAAS,GAAG,CAAA;EAKxB,MAAA,OAAO,CAAA,GAAI,CAAA,GAAI,CAAC,IAAA,CAAK,KAAA,CAAM,CAAC,CAAC,CAAA,GAAI,IAAA,CAAK,KAAA,CAAM,CAAC,CAAA;EAAA,IACjD;EAAA,GACJ;EAAA,EACA,OAAA,EAAS;EAAA,IACL,UAAA;EAAA,IACA,CAAC,UAAU,CAAA;EAAA;EAAA,IAEX,CAAC,GAAA,EAAK,CAAC,CAAC,CAAA,KAAM,KAAK,KAAA,CAAM,CAAA,CAAE,QAAA,CAAS,GAAG,CAAC;EAAA,GAC5C;EAAA,EACA,MAAA,EAAQ;EAAA,IACJ,UAAA;EAAA,IACA,CAAC,UAAU,CAAA;EAAA;EAAA,IAEX,CAAC,GAAA,EAAK,CAAC,CAAC,CAAA,KAAM,KAAK,IAAA,CAAK,CAAA,CAAE,QAAA,CAAS,GAAG,CAAC;EAAA,GAC3C;EAAA,EACA,WAAA,EAAa;EAAA,IACT,WAAA;EAAA,IACA,CAAC,YAAY,SAAS,CAAA;EAAA;EAAA,IAEtB,CAAC,GAAA,EAAK,CAAC,CAAA,EAAG,CAAC,CAAA,KAAM,GAAA,CAAI,UAAA,EAAW,CAAG,CAAA,CAAG,KAAK,CAAA,KAAO,CAAA,CAAG;EAAA,GACzD;EAAA,EACA,cAAA,EAAgB;EAAA,IACZ,WAAA;EAAA,IACA,CAAC,SAAS,CAAA;EAAA,IACV,CAAC,KAAK,CAAC,CAAC,MAAM,GAAA,CAAI,EAAA,OAAU,CAAA,CAAG;EAAA,GACnC;EAAA,EACA,gBAAA,EAAkB;EAAA,IACd,WAAA;EAAA,IACA,CAAC,UAAU,CAAA;EAAA,IACX,CAAC,KAAK,CAAC,CAAC,MAAM,GAAA,CAAI,YAAA,OAAoB,CAAA,CAAG;EAAA,GAC7C;EAAA,EACA,UAAA,EAAY;EAAA,IACR,WAAA;EAAA,IACA,CAAC,YAAY,SAAS,CAAA;EAAA,IACtB,CAAC,GAAA,EAAK,CAAC,CAAA,EAAG,CAAC,CAAA,KAAM;EAEb,MAAA,MAAM,CAAA,GAAI,GAAA,CAAI,UAAA,EAAW,CAAG,EAAG,KAAK,CAAA;EAEpC,MAAA,MAAM,IAAK,CAAA,CAAG,KAAA;EACd,MAAA,OAAO,OAAO,CAAA,KAAM,OAAO,CAAA,IAAK,CAAA,GAAI,CAAA;EAAA,IACxC;EAAA,GACJ;EAAA,EACA,aAAA,EAAe;EAAA,IACX,WAAA;EAAA,IACA,CAAC,SAAS,CAAA;EAAA,IACV,CAAC,GAAA,EAAK,CAAC,CAAC,CAAA,KAAM;EACV,MAAA,MAAM,CAAA,GAAI,IAAI,EAAA,EAAG;EAEjB,MAAA,MAAM,IAAK,CAAA,CAAG,KAAA;EACd,MAAA,OAAO,OAAO,CAAA,KAAM,OAAO,CAAA,IAAK,CAAA,GAAI,CAAA;EAAA,IACxC;EAAA,GACJ;EAAA,EACA,UAAA,EAAY;EAAA,IACR,WAAA;EAAA,IACA,CAAC,YAAY,SAAS,CAAA;EAAA,IACtB,CAAC,GAAA,EAAK,CAAC,CAAA,EAAG,CAAC,CAAA,KAAM;EAEb,MAAA,MAAM,CAAA,GAAI,GAAA,CAAI,UAAA,EAAW,CAAG,EAAG,KAAK,CAAA;EAEpC,MAAA,MAAM,IAAK,CAAA,CAAG,KAAA;EACd,MAAA,OAAO,OAAO,CAAA,KAAM,OAAO,CAAA,IAAK,CAAA,GAAI,CAAA;EAAA,IACxC;EAAA,GACJ;EAAA,EACA,aAAA,EAAe;EAAA,IACX,WAAA;EAAA,IACA,CAAC,SAAS,CAAA;EAAA,IACV,CAAC,GAAA,EAAK,CAAC,CAAC,CAAA,KAAM;EACV,MAAA,MAAM,CAAA,GAAI,IAAI,EAAA,EAAG;EAEjB,MAAA,MAAM,IAAK,CAAA,CAAG,KAAA;EACd,MAAA,OAAO,OAAO,CAAA,KAAM,OAAO,CAAA,IAAK,CAAA,GAAI,CAAA;EAAA,IACxC;EAAA,GACJ;EAAA,EACA,WAAA,EAAa;EAAA,IACT,WAAA;EAAA,IACA,CAAC,YAAY,SAAS,CAAA;EAAA,IACtB,CAAC,GAAA,EAAK,CAAC,CAAA,EAAG,CAAC,CAAA,KAAM;EAEb,MAAA,MAAM,CAAA,GAAI,GAAA,CAAI,UAAA,EAAW,CAAG,EAAG,KAAK,CAAA;EAEpC,MAAA,MAAM,IAAK,CAAA,CAAG,KAAA;EACd,MAAA,OAAO,OAAO,CAAA,KAAM,OAAO,CAAA,IAAK,CAAA,IAAK,CAAA;EAAA,IACzC;EAAA,GACJ;EAAA,EACA,cAAA,EAAgB;EAAA,IACZ,WAAA;EAAA,IACA,CAAC,SAAS,CAAA;EAAA,IACV,CAAC,GAAA,EAAK,CAAC,CAAC,CAAA,KAAM;EACV,MAAA,MAAM,CAAA,GAAI,IAAI,EAAA,EAAG;EAEjB,MAAA,MAAM,IAAK,CAAA,CAAG,KAAA;EACd,MAAA,OAAO,OAAO,CAAA,KAAM,OAAO,CAAA,IAAK,CAAA,IAAK,CAAA;EAAA,IACzC;EAAA,GACJ;EAAA,EACA,WAAA,EAAa;EAAA,IACT,WAAA;EAAA,IACA,CAAC,YAAY,SAAS,CAAA;EAAA,IACtB,CAAC,GAAA,EAAK,CAAC,CAAA,EAAG,CAAC,CAAA,KAAM;EAEb,MAAA,MAAM,CAAA,GAAI,GAAA,CAAI,UAAA,EAAW,CAAG,EAAG,KAAK,CAAA;EAEpC,MAAA,MAAM,IAAK,CAAA,CAAG,KAAA;EACd,MAAA,OAAO,OAAO,CAAA,KAAM,OAAO,CAAA,IAAK,CAAA,IAAK,CAAA;EAAA,IACzC;EAAA,GACJ;EAAA,EACA,cAAA,EAAgB;EAAA,IACZ,WAAA;EAAA,IACA,CAAC,SAAS,CAAA;EAAA,IACV,CAAC,GAAA,EAAK,CAAC,CAAC,CAAA,KAAM;EACV,MAAA,MAAM,CAAA,GAAI,IAAI,EAAA,EAAG;EAEjB,MAAA,MAAM,IAAK,CAAA,CAAG,KAAA;EACd,MAAA,OAAO,OAAO,CAAA,KAAM,OAAO,CAAA,IAAK,CAAA,IAAK,CAAA;EAAA,IACzC;EAAA,GACJ;EAAA,EACA,YAAA,EAAc;EAAA,IACV,WAAA;EAAA,IACA,CAAC,SAAS,CAAA;EAAA,IACV,CAAC,KAAK,CAAC,CAAC,MAAO,CAAA,CAAG,KAAA,IAAS,IAAI,UAAA;EAAW,GAC9C;EAAA,EACA,eAAA,EAAiB;EAAA,IACb,WAAA;EAAA,IACA,EAAC;EAAA,IACD,CAAC,QAAS,GAAA,CAAI,EAAA,OAAS,IAAA,IAAQ,GAAA,CAAI,IAAG,KAAM;EAAA,GAChD;EAAA,EACA,gBAAA,EAAkB;EAAA,IACd,WAAA;EAAA,IACA,CAACA,OAAA,CAAM,UAAU,CAAC,CAAA;EAAA;EAAA,IAElB,CAAC,GAAA,EAAK,CAAC,CAAC,CAAA,KAAO,EAAG,KAAA,CAAM,QAAA,CAAS,GAAA,CAAI,YAAA,EAAc;EAAA,GACvD;EAAA,EACA,cAAA,EAAgB;EAAA,IACZ,WAAA;EAAA,IACA,CAACA,OAAA,CAAM,SAAS,CAAC,CAAA;EAAA;EAAA,IAEjB,CAAC,GAAA,EAAK,CAAC,CAAC,CAAA,KAAO,EAAG,KAAA,CAAM,QAAA,CAAS,GAAA,CAAI,EAAA,EAAI;EAAA,GAC7C;EAAA,EACA,iBAAA,EAAmB;EAAA,IACf,WAAA;EAAA,IACA,CAAC,UAAA,EAAYA,OAAA,CAAM,SAAS,CAAC,CAAA;EAAA;EAAA;EAAA,IAG7B,CAAC,GAAA,EAAK,CAAC,CAAA,EAAG,CAAC,CAAA,KAAO,CAAA,CAAG,KAAA,CAAM,QAAA,CAAS,GAAA,CAAI,UAAA,EAAW,CAAG,CAAA,CAAG,KAAK,CAAC;EAAA,GACnE;EAAA,EACA,iBAAA,EAAmB;EAAA,IACf,WAAA;EAAA,IACA,CAAC,UAAA,EAAYA,OAAA,CAAM,SAAS,CAAC,CAAA;EAAA;EAAA;EAAA,IAG7B,CAAC,GAAA,EAAK,CAAC,GAAG,CAAC,CAAA,KAAM,aAAa,GAAA,CAAI,UAAA,GAAc,CAAA,CAAG,KAAK,GAAI,CAAA,CAAG,KAAA,EAAO,GAAI,CAAA,CAAG,KAAA,CAAM,SAAS,CAAC;EAAA,GACjG;EAAA,EACA,KAAA,EAAO;EAAA,IACH,IAAA,EAAM,WAAA;EAAA,IACN,SAAA,EAAW;EAAA,MACP;EAAA,QACI,CAAC,aAAa,WAAW,CAAA;EAAA;EAAA,QAEzB,CAAC,GAAA,EAAK,CAAC,CAAA,EAAG,CAAC,CAAA,KAAM,CAAA,CAAE,QAAA,CAAS,GAAG,CAAA,IAAK,CAAA,CAAE,QAAA,CAAS,GAAG;EAAA,OACtD;EAAA,MACA;EAAA,QACI,QAAQ,WAAW,CAAA;EAAA,QACnB,CAAC,KAAK,IAAA,KAAS;EACX,UAAA,KAAA,MAAW,OAAO,IAAA,EAAM;EACpB,YAAA,IAAI,CAAC,GAAA,CAAI,QAAA,CAAS,GAAG,CAAA;EACjB,cAAA,OAAO,KAAA;EAAA,UACf;EACA,UAAA,OAAO,IAAA;EAAA,QACX;EAAA;EACJ;EACJ,GACJ;EAAA,EACA,KAAA,EAAO;EAAA,IACH,IAAA,EAAM,WAAA;EAAA,IACN,SAAA,EAAW;EAAA,MACP;EAAA,QACI,CAAC,aAAa,WAAW,CAAA;EAAA;EAAA,QAEzB,CAAC,GAAA,EAAK,CAAC,CAAA,EAAG,CAAC,CAAA,KAAM,CAAA,CAAE,QAAA,CAAS,GAAG,CAAA,IAAK,CAAA,CAAE,QAAA,CAAS,GAAG;EAAA,OACtD;EAAA,MACA;EAAA,QACI,QAAQ,WAAW,CAAA;EAAA,QACnB,CAAC,KAAK,IAAA,KAAS;EACX,UAAA,KAAA,MAAW,OAAO,IAAA,EAAM;EACpB,YAAA,IAAI,GAAA,CAAI,SAAS,GAAG,CAAA;EAChB,cAAA,OAAO,IAAA;EAAA,UACf;EACA,UAAA,OAAO,KAAA;EAAA,QACX;EAAA;EACJ;EACJ,GACJ;EAAA,EACA,GAAA,EAAK;EAAA,IACD,WAAA;EAAA,IACA,CAAC,WAAW,CAAA;EAAA,IACZ,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,CAAA,CAAE,SAAS,GAAG;EAAA,GACjC;EAAA,EACA,qBAAA,EAAuB;EAAA,IACnB,WAAA;EAAA,IACA,CAAC,UAAU,CAAA;EAAA;EAAA,IAEX,CAAC,GAAA,EAAK,CAAC,CAAC,CAAA,KAAM;EACV,MAAA,MAAM,iBAAA,GAAoB,GAAA,CAAI,OAAA,IAAW,GAAA,CAAI,OAAA,CAAQ,iBAAA;EACrD,MAAA,IAAI,iBAAA,EAAmB;EAEnB,QAAA,OAAO,iBAAA,CAAkB,CAAA,CAAE,QAAA,CAAS,GAAG,CAAC,CAAA;EAAA,MAC5C;EACA,MAAA,OAAO,IAAA;EAAA,IACX;EAAA,GACJ;EAAA,EACA,QAAA,EAAU;EAAA,IACN,UAAA;EAAA,IACA,CAAC,UAAU,CAAA;EAAA;EAAA,IAEX,CAAC,KAAK,CAAC,CAAC,MAAM,CAAA,CAAE,QAAA,CAAS,GAAG,CAAA,CAAE,WAAA;EAAY,GAC9C;EAAA,EACA,UAAA,EAAY;EAAA,IACR,UAAA;EAAA,IACA,CAAC,UAAU,CAAA;EAAA;EAAA,IAEX,CAAC,KAAK,CAAC,CAAC,MAAM,CAAA,CAAE,QAAA,CAAS,GAAG,CAAA,CAAE,WAAA;EAAY,GAC9C;EAAA,EACA,QAAA,EAAU;EAAA,IACN,UAAA;EAAA,IACA,QAAQ,SAAS,CAAA;EAAA;EAAA,IAEjB,CAAC,GAAA,EAAK,IAAA,KAAS,IAAA,CAAK,IAAI,CAAA,GAAA,KAAOO,QAAA,CAAc,GAAA,CAAI,QAAA,CAAS,GAAG,CAAC,CAAC,CAAA,CAAE,KAAK,EAAE;EAAA,GAC5E;EAAA,EACA,OAAA,EAAS;EAAA,IACLP,QAAM,UAAU,CAAA;EAAA,IAChB,CAAC,YAAY,UAAU,CAAA;EAAA;EAAA,IAEvB,CAAC,GAAA,EAAK,CAAC,GAAA,EAAK,SAAS,CAAA,KAAM,GAAA,CAAI,QAAA,CAAS,GAAG,CAAA,CAAE,KAAA,CAAM,SAAA,CAAU,QAAA,CAAS,GAAG,CAAC;EAAA,GAC9E;EAAA,EACA,IAAA,EAAM;EAAA,IACF,WAAA;EAAA,IACA,CAAC,WAAW,SAAS,CAAA;EAAA,IACrB,CAAC,GAAA,EAAK,CAAC,UAAA,EAAY,YAAY,CAAA,KAAM;EACjC,MAAA,MAAM,MAAA,GAAS,UAAA,CAAW,QAAA,CAAS,GAAG,CAAA;EACtC,MAAA,MAAM,QAAA,GAAW,YAAA,CAAa,QAAA,CAAS,GAAG,CAAA;EAC1C,MAAA,IAAI,QAAA,IAAY,MAAM,OAAO,KAAA;EAC7B,MAAA,oBAAA,CAAqB,QAAQ,QAAQ,CAAA;EAErC,MAAA,OAAQ,QAAA,CAAgC,SAAS,MAAgB,CAAA;EAAA,IACrE;EAAA,GACJ;EAAA,EACA,UAAA,EAAY;EAAA,IACR,IAAA,EAAM,UAAA;EAAA,IACN,SAAA,EAAW;EAAA,MACP;EAAA,QACI,CAAC,WAAW,SAAS,CAAA;EAAA,QACrB,CAAC,GAAA,EAAK,CAAC,UAAA,EAAY,YAAY,CAAA,KAAM;EACjC,UAAA,MAAM,MAAA,GAAS,UAAA,CAAW,QAAA,CAAS,GAAG,CAAA;EACtC,UAAA,MAAM,QAAA,GAAW,YAAA,CAAa,QAAA,CAAS,GAAG,CAAA;EAC1C,UAAA,oBAAA,CAAqB,QAAQ,QAAQ,CAAA;EAErC,UAAA,OAAQ,QAAA,CAAgC,QAAQ,MAAgB,CAAA;EAAA,QACpE;EAAA,OACJ;EAAA,MAAG;EAAA,QACC,CAAC,SAAA,EAAW,SAAA,EAAW,UAAU,CAAA;EAAA,QACjC,CAAC,GAAA,EAAK,CAAC,UAAA,EAAY,YAAA,EAAc,aAAa,CAAA,KAAM;EAChD,UAAA,MAAM,MAAA,GAAS,UAAA,CAAW,QAAA,CAAS,GAAG,CAAA;EACtC,UAAA,MAAM,QAAA,GAAW,YAAA,CAAa,QAAA,CAAS,GAAG,CAAA;EAC1C,UAAA,MAAM,SAAA,GAAY,aAAA,CAAc,QAAA,CAAS,GAAG,CAAA;EAC5C,UAAA,oBAAA,CAAqB,QAAQ,QAAQ,CAAA;EAErC,UAAA,OAAQ,QAAA,CAAgC,OAAA,CAAQ,MAAA,EAAkB,SAAS,CAAA;EAAA,QAC/E;EAAA;EACJ;EACJ,GACJ;EAAA,EACA,iBAAA,EAAmB;EAAA,IACf,UAAA;EAAA,IACA,CAAC,YAAY,CAAA;EAAA;EAAA,IAEb,CAAC,KAAK,CAAC,QAAQ,MAAM,QAAA,CAAS,QAAA,CAAS,GAAG,CAAA,CAAE,cAAA;EAAe,GAC/D;EAAA,EACA,QAAA,EAAU;EAAA,IACN,UAAA;EAAA,IACA,CAAC,UAAA,EAAY,UAAA,EAAY,SAAS,CAAA;EAAA,IAClC,CAAC,KAAK,IAAA,KAAS;EAEX,MAAA,MAAM,CAAC,GAAA,EAAK,GAAA,EAAK,IAAI,CAAA,GAAI,IAAA,CAAK,GAAA,CAAI,CAAA,GAAA,KAAO,GAAA,CAAI,QAAA,CAAS,GAAG,CAAC,CAAA;EAC1D,MAAA,IAAI,MAAM,GAAA,EAAK;EAEX,QAAA,OAAO,GAAA;EAAA,MACX;EACA,MAAA,IAAI,QAAQ,GAAA,EAAK;EAEb,QAAA,OAAO,GAAA;EAAA,MACX;EACA,MAAA,IAAI,OAAA;EACJ,MAAA,IAAI,OAAO,SAAS,QAAA,EAAU;EAC1B,QAAA,OAAA,GAAU,WAAW,IAAI,CAAA;EAAA,MAC7B,CAAA,MAAA,IAAW,OAAO,IAAA,KAAS,QAAA,EAAU;EACjC,QAAA,OAAA,GAAU,IAAA;EAAA,MACd,CAAA,MAAO;EACH,QAAA,MAAM,IAAI,YAAA,CAAa,CAAA,oBAAA,EAAuB,IAAI,CAAA,CAAE,CAAA;EAAA,MACxD;EACA,MAAA,MAAM,MAAA,GAAS,UAAA,CAAW,OAAO,CAAA,EAAE;EAEnC,MAAA,OAAO,GAAA,GAAM,UAAU,GAAA,GAAM,GAAA,CAAA;EAAA,IACjC;EAAA;EAER,CAAC,CAAA;;EC3xBD,SAAS,sBAAsB,CAAA,EAA4B;EACvD,EAAA,IAAI,aAAa,MAAA,EAAQ;EACrB,IAAA,MAAM,+BAAe,IAAI,GAAA,CAAI,CAAC,CAAA,CAAE,GAAG,CAAC,CAAA;EACpC,IAAA,OAAO,YAAA;EAAA,EACX;EAEA,EAAA,IAAI,MAAA,uBAAa,GAAA,EAAY;EAC7B,EAAA,CAAA,CAAE,UAAU,CAAA,GAAA,KAAO;EACf,IAAA,MAAA,mBAAS,IAAI,IAAI,CAAC,GAAG,QAAQ,GAAG,qBAAA,CAAsB,GAAG,CAAC,CAAC,CAAA;EAAA,EAC/D,CAAC,CAAA;EACD,EAAA,OAAO,MAAA;EACX;EAEA,SAAS,kBAAkB,CAAA,EAAwB;EAC/C,EAAA,IAAI,CAAA,YAAa,kBAAA,IAAsB,CAAA,CAAE,IAAA,KAAS,iBAAA,EAAmB;EACjE,IAAA,OAAO,IAAA;EAAA,EACX;EAEA,EAAA,IAAI,MAAA,GAAS,KAAA;EACb,EAAA,CAAA,CAAE,UAAU,CAAA,GAAA,KAAO;EACf,IAAA,IAAI,CAAC,MAAA,IAAU,iBAAA,CAAkB,GAAG,CAAA,EAAG;EACnC,MAAA,MAAA,GAAS,IAAA;EAAA,IACb;EAAA,EACJ,CAAC,CAAA;EACD,EAAA,OAAO,MAAA;EACX;;EChBO,SAAS,QAAc,KAAA,EAAwB;EAClD,EAAA,OAAO,EAAC,MAAA,EAAQ,SAAA,EAAW,KAAA,EAAK;EACpC;EAEO,SAAS,MAAY,KAAA,EAAwB;EAChD,EAAA,OAAO,EAAC,MAAA,EAAQ,OAAA,EAAS,KAAA,EAAK;EAClC;;EClBO,MAAM,iBAAA,GAAoB,mBAAA;EAC1B,MAAM,gBAAA,GAAmB,kBAAA;EAIhC,SAAS,sBAAA,CACL,YACA,SAAA,EACO;EACP,EAAA,OAAO,CAAC,CAAC,UAAA,IAAc,CAAC,CAAC,WAAW,UAAA,IAAc,UAAA,CAAW,UAAA,CAAW,QAAA,CAAS,SAAS,CAAA;EAC9F;EAEO,SAAS,2BAA2B,IAAA,EAA2C;EAClF,EAAA,OAAO,IAAA,CAAK,eAAe,CAAA,KAAM,aAAA;EACrC;EAEO,SAAS,wBAAwB,IAAA,EAA2C;EAC/E,EAAA,OAAO,sBAAA,CAAuB,IAAA,CAAK,UAAA,EAAY,eAAe,CAAA;EAClE;EAEO,SAAS,uBAAuB,IAAA,EAA2C;EAC9E,EAAA,OAAO,sBAAA,CAAuB,IAAA,CAAK,UAAA,EAAY,MAAM,CAAA;EACzD;EAEO,SAAS,+BAA+B,IAAA,EAA2C;EACtF,EAAA,OAAO,sBAAA,CAAuB,IAAA,CAAK,UAAA,EAAY,eAAe,CAAA;EAClE;EAEO,SAAS,sBAAsB,IAAA,EAA2C;EAC7E,EAAA,OAAO,CAAC,CAAC,IAAA,CAAK,UAAA,IAAc,KAAK,UAAA,CAAW,YAAA;EAChD;;ECnBO,SAAS,WAAW,KAAA,EAAO;EAC9B,EAAA,OAAO,OAAO,UAAU,QAAA,IAAY,KAAA,KAAU,QAAQ,CAAC,KAAA,CAAM,QAAQ,KAAK,CAAA;EAC9E;EAEA,SAAS,iBAAiB,CAAA,EAAG;EAEzB,EAAA,OAAO,CAAA;EACX;EAEO,SAAS,cAAA,CAAe,YAAY,YAAA,EAAc;EAErD,EAAA,MAAM,OAAA,GAAU,aAAa,IAAA,KAAS,OAAA;EAEtC,EAAA,MAAM,uBAAA,GAA0B,WAAW,KAAA,IAAS,OAAO,WAAW,KAAA,CAAM,CAAC,CAAA,CAAE,CAAC,CAAA,KAAM,QAAA;EAEtF,EAAA,MAAM,gBAAA,GAAmB,uBAAA,IAA2B,UAAA,CAAW,QAAA,KAAa,MAAA;EAC5E,EAAA,MAAM,aAAA,GAAgB,2BAA2B,CAAC,gBAAA;EAElD,EAAA,MAAM,OAAO,UAAA,CAAW,IAAA,KAAS,qBAAA,CAAsB,YAAY,IAAI,aAAA,GAAgB,UAAA,CAAA;EAEvF,EAAA,IAAI,OAAA,EAAS;EAET,IAAA,UAAA,GAAa,EAAC,GAAG,UAAA,EAAU;EAG3B,IAAA,IAAI,WAAW,KAAA,EAAO;EAElB,MAAA,UAAA,CAAW,KAAA,GAAQ,UAAA,CAAW,KAAA,CAAM,GAAA,CAAI,CAAC,IAAA,KAAS;EAE9C,QAAA,OAAO,CAAC,KAAK,CAAC,CAAA,EAAG,MAAM,KAAA,CAAM,IAAA,CAAK,CAAC,CAAC,CAAC,CAAA;EAAA,MACzC,CAAC,CAAA;EAAA,IACL;EAGA,IAAA,IAAI,WAAW,OAAA,EAAS;EAEpB,MAAA,UAAA,CAAW,OAAA,GAAU,KAAA,CAAM,KAAA,CAAM,UAAA,CAAW,OAAO,CAAA;EAAA,IACvD,CAAA,MAAO;EAEH,MAAA,UAAA,CAAW,OAAA,GAAU,KAAA,CAAM,KAAA,CAAM,YAAA,CAAa,OAAO,CAAA;EAAA,IACzD;EAAA,EACJ;EAGA,EAAA,IAAI,UAAA,CAAW,cAAc,UAAA,CAAW,UAAA,KAAe,SAAS,CAAC,WAAA,CAAY,UAAA,CAAW,UAAU,CAAA,EAAG;EAEjG,IAAA,MAAM,IAAI,KAAA,CAAM,CAAA,qBAAA,EAAwB,UAAA,CAAW,UAAU,CAAA,CAAE,CAAA;EAAA,EACnE;EAGA,EAAA,IAAI,QAAA;EACJ,EAAA,IAAI,WAAA;EACJ,EAAA,IAAI,kBAAA;EACJ,EAAA,IAAI,SAAS,aAAA,EAAe;EACxB,IAAA,QAAA,GAAW,2BAAA;EAAA,EACf,CAAA,MAAA,IAAW,SAAS,UAAA,EAAY;EAC5B,IAAA,QAAA,GAAW,wBAAA;EAAA,EACf,CAAA,MAAA,IAAW,SAAS,aAAA,EAAe;EAC/B,IAAA,QAAA,GAAW,2BAAA;EAIX,IAAA,WAAA,mBAAc,MAAA,CAAO,OAAO,IAAI,CAAA;EAEhC,IAAA,KAAA,MAAW,IAAA,IAAQ,WAAW,KAAA,EAAO;EAEjC,MAAA,WAAA,CAAY,IAAA,CAAK,CAAC,CAAC,CAAA,GAAI,KAAK,CAAC,CAAA;EAAA,IACjC;EAIA,IAAA,kBAAA,GAAqB,OAAO,UAAA,CAAW,KAAA,CAAM,CAAC,EAAE,CAAC,CAAA;EAAA,EAErD,CAAA,MAAA,IAAW,SAAS,UAAA,EAAY;EAC5B,IAAA,QAAA,GAAW,wBAAA;EAAA,EACf,CAAA,MAAO;EACH,IAAA,MAAM,IAAI,KAAA,CAAM,CAAA,uBAAA,EAA0B,IAAI,CAAA,CAAA,CAAG,CAAA;EAAA,EACrD;EAEA,EAAA,IAAI,uBAAA,EAAyB;EAEzB,IAAA,MAAM,mBAAwC,EAAC;EAC/C,IAAA,MAAM,YAAY,EAAC;EAEnB,IAAA,KAAA,IAAS,IAAI,CAAA,EAAG,CAAA,GAAI,UAAA,CAAW,KAAA,CAAM,QAAQ,CAAA,EAAA,EAAK;EAE9C,MAAA,MAAM,IAAA,GAAO,UAAA,CAAW,KAAA,CAAM,CAAC,CAAA;EAE/B,MAAA,MAAM,IAAA,GAAO,IAAA,CAAK,CAAC,CAAA,CAAE,IAAA;EAErB,MAAA,IAAI,gBAAA,CAAiB,IAAI,CAAA,KAAM,MAAA,EAAW;EAEtC,QAAA,gBAAA,CAAiB,IAAI,CAAA,GAAI;EAAA;EAAA,UAErB,IAAA;EAAA;EAAA,UAEA,MAAM,UAAA,CAAW,IAAA;EAAA;EAAA,UAEjB,UAAU,UAAA,CAAW,QAAA;EAAA;EAAA,UAErB,SAAS,UAAA,CAAW,OAAA;EAAA,UACpB,OAAO;EAAC,SACZ;EACA,QAAA,SAAA,CAAU,KAAK,IAAI,CAAA;EAAA,MACvB;EAEA,MAAA,gBAAA,CAAiB,IAAI,CAAA,CAAE,KAAA,CAAM,IAAA,CAAK,CAAC,IAAA,CAAK,CAAC,CAAA,CAAE,KAAA,EAAO,IAAA,CAAK,CAAC,CAAC,CAAC,CAAA;EAAA,IAC9D;EAEA,IAAA,MAAM,uBAAuB,EAAC;EAC9B,IAAA,KAAA,MAAW,KAAK,SAAA,EAAW;EAEvB,MAAA,oBAAA,CAAqB,IAAA,CAAK,CAAC,gBAAA,CAAiB,CAAC,CAAA,CAAE,IAAA,EAAM,cAAA,CAAe,gBAAA,CAAiB,CAAC,CAAA,EAAG,YAAY,CAAC,CAAC,CAAA;EAAA,IAC3G;EAEA,IAAA,MAAM,iBAAA,GAAoB,EAAC,IAAA,EAAM,QAAA,EAAQ;EACzC,IAAA,OAAO;EAAA,MACH,IAAA,EAAM,WAAA;EAAA,MACN,iBAAA;EAAA,MAEA,mBAAA,EAAqB,WAAA,CAAY,mBAAA,CAAoB,IAAA,CAAK,QAAW,iBAAiB,CAAA;EAAA;EAAA,MAEtF,WAAW,oBAAA,CAAqB,GAAA,CAAI,CAAA,CAAA,KAAK,CAAA,CAAE,CAAC,CAAC,CAAA;EAAA,MAC7C,QAAA,CAAS,EAAC,IAAA,EAAI,EAAG,UAAA,EAAY;EAEzB,QAAA,OAAO,2BAAA,CAA4B;EAAA,UAC/B,KAAA,EAAO,oBAAA;EAAA;EAAA,UAEP,MAAM,UAAA,CAAW;EAAA;EAAA,WAElB,YAAA,EAAc,IAAI,CAAA,CAAE,QAAA,CAAS,MAAM,UAAU,CAAA;EAAA,MACpD;EAAA,KACJ;EAAA,EACJ,WAAW,aAAA,EAAe;EACtB,IAAA,MAAM,oBAAoB,IAAA,KAAS,aAAA;EAAA;EAAA,MAE/B,EAAC,MAAM,aAAA,EAAe,IAAA,EAAM,WAAW,IAAA,KAAS,MAAA,GAAY,UAAA,CAAW,IAAA,GAAO,CAAA;EAAC,QAAI,IAAA;EACvF,IAAA,OAAO;EAAA,MACH,IAAA,EAAM,QAAA;EAAA,MACN,iBAAA;EAAA,MAEA,mBAAA,EAAqB,WAAA,CAAY,mBAAA,CAAoB,IAAA,CAAK,QAAW,iBAAiB,CAAA;EAAA;EAAA,MAEtF,WAAW,UAAA,CAAW,KAAA,CAAM,IAAI,CAAA,CAAA,KAAK,CAAA,CAAE,CAAC,CAAC,CAAA;EAAA;EAAA,MAEzC,QAAA,EAAU,CAAC,EAAC,IAAA,EAAI,KAAM,SAAS,UAAA,EAAY,YAAA,EAAc,IAAA,EAAM,WAAA,EAAa,kBAAkB;EAAA,KAClG;EAAA,EACJ,CAAA,MAAO;EACH,IAAA,OAAO;EAAA,MACH,IAAA,EAAM,QAAA;EAAA,MACN,QAAA,CAAS,GAAG,OAAA,EAAS;EAEjB,QAAA,MAAM,KAAA,GAAQ,WAAW,OAAA,CAAQ,UAAA,GAAa,QAAQ,UAAA,CAAW,UAAA,CAAW,QAAQ,CAAA,GAAI,MAAA;EACxF,QAAA,IAAI,UAAU,MAAA,EAAW;EAErB,UAAA,OAAOgB,UAAA,CAAS,UAAA,CAAW,OAAA,EAAS,YAAA,CAAa,OAAO,CAAA;EAAA,QAC5D;EAEA,QAAA,OAAO,QAAA,CAAS,UAAA,EAAY,YAAA,EAAc,KAAA,EAAO,aAAa,kBAAkB,CAAA;EAAA,MACpF;EAAA,KACJ;EAAA,EACJ;EACJ;EAEA,SAASA,UAAA,CAAS,CAAA,EAAG,CAAA,EAAG,CAAA,EAAG;EAEvB,EAAA,IAAI,CAAA,KAAM,QAAW,OAAO,CAAA;EAE5B,EAAA,IAAI,CAAA,KAAM,QAAW,OAAO,CAAA;EAE5B,EAAA,IAAI,CAAA,KAAM,QAAW,OAAO,CAAA;EAChC;EAEA,SAAS,2BAAA,CAA4B,UAAA,EAAY,YAAA,EAAc,KAAA,EAAO,aAAa,OAAA,EAAS;EAExF,EAAA,MAAM,YAAY,OAAO,KAAA,KAAU,OAAA,GAAU,WAAA,CAAY,KAAK,CAAA,GAAI,MAAA;EAElE,EAAA,OAAOA,UAAA,CAAS,SAAA,EAAW,UAAA,CAAW,OAAA,EAAS,aAAa,OAAO,CAAA;EACvE;EAEA,SAAS,wBAAA,CAAyB,UAAA,EAAY,YAAA,EAAc,KAAA,EAAO;EAG/D,EAAA,IAAI,CAAC,SAAS,KAAK,CAAA,SAAUA,UAAA,CAAS,UAAA,CAAW,OAAA,EAAS,YAAA,CAAa,OAAO,CAAA;EAE9E,EAAA,MAAM,CAAA,GAAI,WAAW,KAAA,CAAM,MAAA;EAE3B,EAAA,IAAI,MAAM,CAAA,EAAG,OAAO,WAAW,KAAA,CAAM,CAAC,EAAE,CAAC,CAAA;EAEzC,EAAA,IAAI,KAAA,IAAS,UAAA,CAAW,KAAA,CAAM,CAAC,CAAA,CAAE,CAAC,CAAA,EAAG,OAAO,UAAA,CAAW,KAAA,CAAM,CAAC,CAAA,CAAE,CAAC,CAAA;EAEjE,EAAA,IAAI,KAAA,IAAS,UAAA,CAAW,KAAA,CAAM,CAAA,GAAI,CAAC,CAAA,CAAE,CAAC,CAAA,EAAG,OAAO,UAAA,CAAW,KAAA,CAAM,CAAA,GAAI,CAAC,EAAE,CAAC,CAAA;EAGzE,EAAA,MAAM,KAAA,GAAQ,yBAAA,CAA0B,UAAA,CAAW,KAAA,CAAM,GAAA,CAAI,CAAC,IAAA,KAAS,IAAA,CAAK,CAAC,CAAC,CAAA,EAAG,KAAK,CAAA;EAGtF,EAAA,OAAO,UAAA,CAAW,KAAA,CAAM,KAAK,CAAA,CAAE,CAAC,CAAA;EACpC;EAEA,SAAS,2BAAA,CAA4B,UAAA,EAAY,YAAA,EAAc,KAAA,EAAO;EAElE,EAAA,MAAM,IAAA,GAAO,UAAA,CAAW,IAAA,KAAS,MAAA,GAAY,WAAW,IAAA,GAAO,CAAA;EAI/D,EAAA,IAAI,CAAC,SAAS,KAAK,CAAA,SAAUA,UAAA,CAAS,UAAA,CAAW,OAAA,EAAS,YAAA,CAAa,OAAO,CAAA;EAE9E,EAAA,MAAM,CAAA,GAAI,WAAW,KAAA,CAAM,MAAA;EAE3B,EAAA,IAAI,MAAM,CAAA,EAAG,OAAO,WAAW,KAAA,CAAM,CAAC,EAAE,CAAC,CAAA;EAEzC,EAAA,IAAI,KAAA,IAAS,UAAA,CAAW,KAAA,CAAM,CAAC,CAAA,CAAE,CAAC,CAAA,EAAG,OAAO,UAAA,CAAW,KAAA,CAAM,CAAC,CAAA,CAAE,CAAC,CAAA;EAEjE,EAAA,IAAI,KAAA,IAAS,UAAA,CAAW,KAAA,CAAM,CAAA,GAAI,CAAC,CAAA,CAAE,CAAC,CAAA,EAAG,OAAO,UAAA,CAAW,KAAA,CAAM,CAAA,GAAI,CAAC,EAAE,CAAC,CAAA;EAGzE,EAAA,MAAM,KAAA,GAAQ,yBAAA,CAA0B,UAAA,CAAW,KAAA,CAAM,GAAA,CAAI,CAAC,IAAA,KAAS,IAAA,CAAK,CAAC,CAAC,CAAA,EAAG,KAAK,CAAA;EACtF,EAAA,MAAM,CAAA,GAAI,mBAAA;EAAA,IACN,KAAA;EAAA,IAAO,IAAA;EAAA;EAAA,IAEP,UAAA,CAAW,KAAA,CAAM,KAAK,CAAA,CAAE,CAAC,CAAA;EAAA;EAAA,IAEzB,UAAA,CAAW,KAAA,CAAM,KAAA,GAAQ,CAAC,EAAE,CAAC;EAAA,GAAC;EAGlC,EAAA,MAAM,WAAA,GAAc,UAAA,CAAW,KAAA,CAAM,KAAK,EAAE,CAAC,CAAA;EAE7C,EAAA,MAAM,cAAc,UAAA,CAAW,KAAA,CAAM,KAAA,GAAQ,CAAC,EAAE,CAAC,CAAA;EAEjD,EAAA,IAAI,MAAA,GAAS,WAAA,CAAY,YAAA,CAAa,IAAI,CAAA,IAAK,gBAAA;EAG/C,EAAA,IAAI,UAAA,CAAW,UAAA,IAAc,UAAA,CAAW,UAAA,KAAe,KAAA,EAAO;EAE1D,IAAA,MAAM,UAAA,GAAa,WAAA,CAAY,UAAA,CAAW,UAAU,CAAA;EAEpD,IAAA,MAAA,GAAS,CAAC,CAAA,EAAG,CAAA,KAAM,UAAA,CAAW,OAAA,CAAQ,WAAW,WAAA,CAAY,UAAA,CAAW,OAAA,CAAQ,CAAC,GAAG,UAAA,CAAW,OAAA,CAAQ,CAAC,CAAA,EAAG,CAAC,CAAC,CAAA;EAAA,EACjH;EAGA,EAAA,IAAI,OAAO,WAAA,CAAY,QAAA,KAAa,UAAA,EAAY;EAC5C,IAAA,OAAO;EAAA,MACH,YAAY,IAAA,EAAM;EAEd,QAAA,MAAM,cAAA,GAAiB,WAAA,CAAY,QAAA,CAAS,KAAA,CAAM,QAAW,IAAI,CAAA;EAEjE,QAAA,MAAM,cAAA,GAAiB,WAAA,CAAY,QAAA,CAAS,KAAA,CAAM,QAAW,IAAI,CAAA;EAEjE,QAAA,IAAI,cAAA,KAAmB,MAAA,IAAa,cAAA,KAAmB,MAAA,EAAW;EAC9D,UAAA,OAAO,MAAA;EAAA,QACX;EAEA,QAAA,OAAO,MAAA,CAAO,cAAA,EAAgB,cAAA,EAAgB,CAAC,CAAA;EAAA,MACnD;EAAA,KACJ;EAAA,EACJ;EAGA,EAAA,OAAO,MAAA,CAAO,WAAA,EAAa,WAAA,EAAa,CAAC,CAAA;EAC7C;EAEA,SAAS,wBAAA,CAAyB,UAAA,EAAY,YAAA,EAAc,KAAA,EAAO;EAE/D,EAAA,IAAI,YAAA,CAAa,SAAS,OAAA,EAAS;EAE/B,IAAA,KAAA,GAAQ,KAAA,CAAM,MAAM,KAAK,CAAA;EAAA,EAE7B,CAAA,MAAA,IAAW,YAAA,CAAa,IAAA,KAAS,WAAA,EAAa;EAE1C,IAAA,KAAA,GAAQ,SAAA,CAAU,UAAA,CAAW,KAAA,CAAM,QAAA,EAAU,CAAA;EAAA,EAEjD,CAAA,MAAA,IAAW,YAAA,CAAa,IAAA,KAAS,eAAA,EAAiB;EAE9C,IAAA,KAAA,GAAQ,aAAA,CAAc,KAAA,CAAM,KAAA,CAAM,QAAA,EAAU,CAAA;EAAA,EAEhD,CAAA,MAAA,IAAW,OAAA,CAAQ,KAAK,CAAA,KAAM,YAAA,CAAa,IAAA,KAAS,YAAA,CAAa,IAAA,KAAS,MAAA,IAAU,CAAC,YAAA,CAAa,MAAA,CAAO,KAAK,CAAA,CAAA,EAAI;EAC9G,IAAA,KAAA,GAAQ,MAAA;EAAA,EACZ;EAEA,EAAA,OAAOA,UAAA,CAAS,KAAA,EAAO,UAAA,CAAW,OAAA,EAAS,aAAa,OAAO,CAAA;EACnE;EAwCA,SAAS,mBAAA,CAAoB,KAAA,EAAO,IAAA,EAAM,UAAA,EAAY,UAAA,EAAY;EAC9D,EAAA,MAAM,aAAa,UAAA,GAAa,UAAA;EAChC,EAAA,MAAM,WAAW,KAAA,GAAQ,UAAA;EAEzB,EAAA,IAAI,eAAe,CAAA,EAAG;EAClB,IAAA,OAAO,CAAA;EAAA,EACX,CAAA,MAAA,IAAW,SAAS,CAAA,EAAG;EACnB,IAAA,OAAO,QAAA,GAAW,UAAA;EAAA,EACtB,CAAA,MAAO;EAEH,IAAA,OAAA,CAAQ,IAAA,CAAK,GAAA,CAAI,IAAA,EAAM,QAAQ,CAAA,GAAI,MAAM,IAAA,CAAK,GAAA,CAAI,IAAA,EAAM,UAAU,CAAA,GAAI,CAAA,CAAA;EAAA,EAC1E;EACJ;;ECxRO,MAAM,eAAA,CAAgB;EAAA,EAYzB,WAAA,CAAY,UAAA,EAAwB,YAAA,EAA2C,KAAA,EAAgB,SAAyB,iBAAA,EAA4B;EAChJ,IAAA,IAAA,CAAK,UAAA,GAAa,UAAA;EAClB,IAAA,IAAA,CAAK,kBAAkB,EAAC;EACxB,IAAA,IAAA,CAAK,MAAA,GAAS,KAAA;EACd,IAAA,IAAA,CAAK,QAAA,GAAW,OAAA;EAChB,IAAA,IAAA,CAAK,kBAAA,GAAqB,iBAAA;EAC1B,IAAA,IAAA,CAAK,UAAA,GAAa,IAAI,iBAAA,CAAkB,KAAA,EAAO,SAAS,iBAAiB,CAAA;EACzE,IAAA,IAAA,CAAK,aAAA,GAAgB,YAAA,GAAe,eAAA,CAAgB,YAAY,CAAA,GAAI,IAAA;EACpE,IAAA,IAAA,CAAK,cAAc,YAAA,IAAgB,YAAA,CAAa,IAAA,KAAS,MAAA,GAAS,aAAa,MAAA,GAAS,IAAA;EACxF,IAAA,IAAA,CAAK,kBAAA,GAAqBC,qBAAuB,CAAsB,UAAU,CAAA;EACjF,IAAA,IAAA,CAAK,iBAAA,GAAoBC,iBAAuB,CAAkB,UAAU,CAAA;EAAA,EAAA;EAChF,EAEA,4BAAA,CACI,SACA,OAAA,EACA,YAAA,EACA,WACA,eAAA,EACA,gBAAA,EACA,kBACA,mBAAA,EAEG;EACH,IAAA,IAAA,CAAK,WAAW,OAAA,GAAU,OAAA;EAC1B,IAAA,IAAA,CAAK,WAAW,OAAA,GAAU,OAAA;EAC1B,IAAA,IAAA,CAAK,WAAW,YAAA,GAAe,YAAA;EAC/B,IAAA,IAAA,CAAK,UAAA,CAAW,YAAY,SAAA,IAAa,IAAA;EACzC,IAAA,IAAA,CAAK,UAAA,CAAW,kBAAkB,eAAA,IAAmB,IAAA;EACrD,IAAA,IAAA,CAAK,WAAW,gBAAA,GAAmB,gBAAA;EACnC,IAAA,IAAA,CAAK,UAAA,CAAW,mBAAmB,gBAAA,IAAoB,IAAA;EACvD,IAAA,IAAA,CAAK,UAAA,CAAW,sBAAsB,mBAAA,IAAuB,IAAA;EAE7D,IAAA,OAAO,IAAA,CAAK,UAAA,CAAW,QAAA,CAAS,IAAA,CAAK,UAAU,CAAA;EAAA,EAAA;EACnD,EAEA,QAAA,CACI,SACA,OAAA,EACA,YAAA,EACA,WACA,eAAA,EACA,gBAAA,EACA,gBAAA,EACA,mBAAA,EACA,iBAAA,EAEG;EACH,IAAA,IAAI,CAAC,KAAK,UAAA,EAAY;EAElB,MAAA,IAAA,CAAK,UAAA,GAAa,IAAI,iBAAA,CAAkB,IAAA,CAAK,QAAQ,IAAA,CAAK,QAAA,EAAU,KAAK,kBAAkB,CAAA;EAAA,IAAA;EAG/F,IAAA,IAAA,CAAK,WAAW,OAAA,GAAU,OAAA;EAC1B,IAAA,IAAA,CAAK,UAAA,CAAW,UAAU,OAAA,IAAW,IAAA;EACrC,IAAA,IAAA,CAAK,UAAA,CAAW,eAAe,YAAA,IAAgB,IAAA;EAC/C,IAAA,IAAA,CAAK,UAAA,CAAW,YAAY,SAAA,IAAa,IAAA;EACzC,IAAA,IAAA,CAAK,UAAA,CAAW,kBAAkB,eAAA,IAAmB,IAAA;EACrD,IAAA,IAAA,CAAK,UAAA,CAAW,mBAAmB,gBAAA,IAAoB,IAAA;EACvD,IAAA,IAAA,CAAK,UAAA,CAAW,mBAAmB,gBAAA,IAAoB,IAAA;EACvD,IAAA,IAAA,CAAK,UAAA,CAAW,sBAAsB,mBAAA,IAAuB,IAAA;EAC7D,IAAA,IAAA,CAAK,UAAA,CAAW,oBAAoB,iBAAA,IAAqB,IAAA;EACzD,IAAA,IAAI;EAEA,MAAA,MAAM,GAAA,GAAM,IAAA,CAAK,UAAA,CAAW,QAAA,CAAS,KAAK,UAAU,CAAA;EAEpD,MAAA,IAAI,GAAA,KAAQ,QAAQ,GAAA,KAAQ,KAAA,CAAA,IAAc,OAAO,GAAA,KAAQ,QAAA,IAAY,QAAQ,GAAA,EAAM;EAC/E,QAAA,OAAO,IAAA,CAAK,aAAA;EAAA,MAAA;EAEhB,MAAA,IAAI,IAAA,CAAK,WAAA,IAAe,EAAE,GAAA,IAAO,KAAK,WAAA,CAAA,EAAc;EAChD,QAAA,MAAM,IAAI,aAAa,CAAA,4BAAA,EAA+B,MAAA,CAAO,KAAK,IAAA,CAAK,WAAW,CAAA,CAAE,GAAA,CAAI,CAAA,CAAA,KAAK,IAAA,CAAK,UAAU,CAAC,CAAC,CAAA,CAAE,IAAA,CAAK,IAAI,CAAC,eAAe,IAAA,CAAK,SAAA,CAAU,GAAG,CAAC,CAAA,SAAA,CAAW,CAAA;EAAA,MAAA;EAE3K,MAAA,OAAO,GAAA;EAAA,IAAA,SACF,CAAA,EAAG;EACR,MAAA,MAAMC,MAAAA,GAAQ,CAAA;EACd,MAAA,IAAI,CAAC,IAAA,CAAK,eAAA,CAAgBA,MAAAA,CAAM,OAAO,CAAA,EAAG;EACtC,QAAA,IAAA,CAAK,eAAA,CAAgBA,MAAAA,CAAM,OAAO,CAAA,GAAI,IAAA;EACtC,QAAA,IAAI,OAAO,YAAY,WAAA,EAAa;EAChC,UAAA,OAAA,CAAQ,IAAA,CAAK,CAAA,+BAAA,EAAkC,IAAA,CAAK,SAAA,CAAU,IAAA,CAAK,UAAA,CAAW,SAAA,EAAW,CAAC,CAAA,GAAA,EAAMA,MAAAA,CAAM,OAAO,CAAA,CAAE,CAAA;EAAA,QAAA;EACnH,MAAA;EAEJ,MAAA,OAAO,IAAA,CAAK,aAAA;EAAA,IAAA;EAChB,EAAA;EAER;EAEO,SAAS,aAAa,UAAA,EAA8B;EACvD,EAAA,OAAO,MAAM,OAAA,CAAQ,UAAU,CAAA,IAAK,UAAA,CAAW,SAAS,CAAA,IACpD,OAAO,UAAA,CAAW,CAAC,MAAM,QAAA,IAAY,MAAA,CAAO,OAAOC,WAAA,EAAa,UAAA,CAAW,CAAC,CAAC,CAAA;EACrF;EAWO,SAAS,gBAAA,CACZ,UAAA,EACA,YAAA,EACA,KAAA,EACA,SACA,iBAAA,EAC4C;EAC5C,EAAA,MAAM,MAAA,GAAS,IAAI,cAAA,CAAeA,WAAA,EAAa,EAAC,EAAG,YAAA,GAAe,eAAA,CAAgB,YAAY,IAAI,MAAA,EAAW,MAAA,EAAW,MAAA,EAAW,KAAA,EAAO,SAAS,iBAAiB,CAAA;EAGpK,EAAA,MAAM,SAAS,MAAA,CAAO,KAAA;EAAA,IAAM,UAAA;EAAA,IAAY,MAAA;EAAA,IAAW,MAAA;EAAA,IAAW,MAAA;EAAA,IAC1D,gBAAgB,YAAA,CAAa,IAAA,KAAS,WAAW,EAAC,cAAA,EAAgB,UAAQ,GAAI;EAAA,GAAS;EAE3F,EAAA,IAAI,CAAC,MAAA,EAAQ;EAET,IAAA,OAAO,KAAA,CAAM,OAAO,MAAM,CAAA;EAAA,EAAA;EAG9B,EAAA,OAAO,OAAA,CAAQ,IAAI,eAAA,CAAgB,MAAA,EAAQ,cAAc,KAAA,EAAO,OAAA,EAAS,iBAAiB,CAAC,CAAA;EAC/F;EAEO,MAAM,sBAAA,CAAoD;EAAA,EAS7D,WAAA,CAAY,IAAA,EAAY,UAAA,EAA6B,eAAA,EAAkC,sBAAA,EAAyC;EAC5H,IAAA,IAAA,CAAK,IAAA,GAAO,IAAA;EACZ,IAAA,IAAA,CAAK,gBAAA,GAAmB,UAAA;EACxB,IAAA,IAAA,CAAK,eAAA,GAAkB,eAAA;EACvB,IAAA,IAAA,CAAK,sBAAA,GAAyB,sBAAA;EAC9B,IAAA,IAAA,CAAK,mBAAmB,IAAA,KAAU,UAAA,IAAiC,CAACC,eAAW,CAAgB,WAAW,UAAU,CAAA;EACpH,IAAA,IAAA,CAAK,kBAAA,GAAqBJ,qBAAuB,CAAsB,UAAA,CAAW,UAAU,CAAA;EAC5F,IAAA,IAAA,CAAK,iBAAA,GAAoBC,iBAAuB,CAAkB,UAAA,CAAW,UAAU,CAAA;EAAA,EAAA;EAC3F,EAEA,6BACI,OAAA,EACA,OAAA,EACA,YAAA,EACA,SAAA,EACA,iBACA,gBAAA,EAEG;EACH,IAAA,OAAO,IAAA,CAAK,iBAAiB,4BAAA,CAA6B,OAAA,EAAS,SAAS,YAAA,EAAc,SAAA,EAAW,iBAAiB,gBAAgB,CAAA;EAAA,EAAA;EAC1I,EAEA,SACI,OAAA,EACA,OAAA,EACA,cACA,SAAA,EACA,eAAA,EACA,kBACA,iBAAA,EAEG;EACH,IAAA,OAAO,IAAA,CAAK,gBAAA,CAAiB,QAAA,CAAS,OAAA,EAAS,OAAA,EAAS,YAAA,EAAc,SAAA,EAAW,eAAA,EAAiB,gBAAA,EAAkB,MAAA,EAAW,MAAA,EAAW,iBAAiB,CAAA;EAAA,EAAA;EAEnK;EAEO,MAAM,uBAAA,CAAqD;EAAA,EAY9D,YAAY,IAAA,EAAY,UAAA,EAA6B,SAAA,EAA0B,iBAAA,EAAuC,iBAAkC,sBAAA,EAAyC;EAC7L,IAAA,IAAA,CAAK,IAAA,GAAO,IAAA;EACZ,IAAA,IAAA,CAAK,SAAA,GAAY,SAAA;EACjB,IAAA,IAAA,CAAK,gBAAA,GAAmB,UAAA;EACxB,IAAA,IAAA,CAAK,mBAAmB,IAAA,KAAU,QAAA,IAA+B,CAACG,eAAW,CAAgB,WAAW,UAAU,CAAA;EAClH,IAAA,IAAA,CAAK,iBAAA,GAAoBH,iBAAuB,CAAkB,UAAA,CAAW,UAAU,CAAA;EACvF,IAAA,IAAA,CAAK,eAAA,GAAkB,eAAA;EACvB,IAAA,IAAA,CAAK,sBAAA,GAAyB,sBAAA;EAC9B,IAAA,IAAA,CAAK,kBAAA,GAAqBD,qBAAuB,CAAsB,UAAA,CAAW,UAAU,CAAA;EAC5F,IAAA,IAAA,CAAK,iBAAA,GAAoB,iBAAA;EAAA,EAAA;EAC7B,EAEA,6BACI,OAAA,EACA,OAAA,EACA,YAAA,EACA,SAAA,EACA,iBACA,gBAAA,EAEG;EACH,IAAA,OAAO,IAAA,CAAK,iBAAiB,4BAAA,CAA6B,OAAA,EAAS,SAAS,YAAA,EAAc,SAAA,EAAW,iBAAiB,gBAAgB,CAAA;EAAA,EAAA;EAC1I,EAEA,SACI,OAAA,EACA,OAAA,EACA,YAAA,EACA,SAAA,EACA,iBACA,gBAAA,EAEG;EACH,IAAA,OAAO,IAAA,CAAK,iBAAiB,QAAA,CAAS,OAAA,EAAS,SAAS,YAAA,EAAc,SAAA,EAAW,iBAAiB,gBAAgB,CAAA;EAAA,EAAA;EACtH,EAEA,mBAAA,CAAoB,KAAA,EAAe,KAAA,EAAe,KAAA,EAAuB;EACrE,IAAA,IAAI,KAAK,iBAAA,EAAmB;EACxB,MAAA,OAAO,YAAY,mBAAA,CAAoB,IAAA,CAAK,iBAAA,EAAmB,KAAA,EAAO,OAAO,KAAK,CAAA;EAAA,IAAA,CACtF,MAAO;EACH,MAAA,OAAO,CAAA;EAAA,IAAA;EACX,EAAA;EAER;EA0EO,SAAS,wBAAA,CAEZ,UAAA,EACA,YAAA,EACA,KAAA,EACA,SACA,iBAAA,EACoD;EACpD,EAAA,UAAA,GAAa,gBAAA,CAAiB,UAAA,EAAY,YAAA,EAAc,KAAA,EAAO,SAAS,iBAAiB,CAAA;EAEzF,EAAA,IAAI,UAAA,CAAW,WAAW,OAAA,EAAS;EAC/B,IAAA,OAAO,UAAA;EAAA,EAAA;EAIX,EAAA,MAAM,MAAA,GAAS,WAAW,KAAA,CAAM,UAAA;EAGhC,EAAA,MAAMK,mBAAA,GAAoBb,iBAAW,CAAkB,MAAM,CAAA;EAC7D,EAAA,IAAI,CAACa,mBAAA,IAAqB,CAAC,0BAAA,CAA2B,YAAY,CAAA,EAAG;EACjE,IAAA,OAAO,MAAM,CAAC,IAAIZ,eAAa,EAAA,EAAI,gCAAgC,CAAC,CAAC,CAAA;EAAA,EAAA;EAIzE,EAAA,MAAM,cAAA,GAAiBa,wBAAW,CAAyB,MAAA,EAAQ,CAAC,MAAA,EAAQ,OAAA,EAAS,sBAAsB,CAAC,CAAA;EAC5G,EAAA,IAAI,CAAC,cAAA,IAAkB,CAAC,sBAAA,CAAuB,YAAY,CAAA,EAAG;EAC1D,IAAA,OAAO,MAAM,CAAC,IAAIb,eAAa,EAAA,EAAI,gCAAgC,CAAC,CAAC,CAAA;EAAA,EAAA;EAIzE,EAAA,MAAM,kBAAkBa,wBAAW,CAAyB,MAAA,EAAQ,CAAC,eAAe,CAAC,CAAA;EACrF,EAAA,IAAI,CAAC,eAAA,IAAmB,CAAC,uBAAA,CAAwB,YAAY,CAAA,EAAG;EAC5D,IAAA,OAAO,MAAM,CAAC,IAAIb,eAAa,EAAA,EAAI,wCAAwC,CAAC,CAAC,CAAA;EAAA,EAAA;EAIjF,EAAA,MAAM,yBAAyBa,wBAAW,CAAyB,MAAA,EAAQ,CAAC,eAAe,CAAC,CAAA;EAC5F,EAAA,IAAI,CAAC,sBAAA,IAA0B,CAAC,8BAAA,CAA+B,YAAY,CAAA,EAAG;EAC1E,IAAA,OAAO,MAAM,CAAC,IAAIb,eAAa,EAAA,EAAI,wCAAwC,CAAC,CAAC,CAAA;EAAA,EAAA;EAGjF,EAAA,MAAM,uBAAA,GAA0B,YAAA,CAAa,UAAA,IAAc,YAAA,CAAa,UAAA,CAAW,oBAAA;EAEnF,EAAA,MAAM,SAAA,GAAY,cAAc,MAAM,CAAA;EACtC,EAAA,IAAI,CAAC,SAAA,IAAa,CAAC,cAAA,IAAkB,CAAC,uBAAA,EAAyB;EAC3D,IAAA,OAAO,MAAM,CAAC,IAAIA,eAAa,EAAA,EAAI,oIAAoI,CAAC,CAAC,CAAA;EAAA,EAAA,CAC7K,MAAA,IAAW,qBAAqBA,cAAA,EAAc;EAC1C,IAAA,OAAO,KAAA,CAAM,CAAC,SAAS,CAAC,CAAA;EAAA,EAAA,WACjB,SAAA,YAAqB,WAAA,IAAe,CAAC,qBAAA,CAAsB,YAAY,CAAA,EAAG;EACjF,IAAA,OAAO,MAAM,CAAC,IAAIA,eAAa,EAAA,EAAI,6DAA6D,CAAC,CAAC,CAAA;EAAA,EAAA;EAGtG,EAAA,IAAI,CAAC,SAAA,EAAW;EACZ,IAAA,OAAO,QAASY,mBAAA,IAAqB,sBAAA;EAAA;EAAA,MAEhC,IAAI,sBAAA,CAAuB,UAAA,EAAY,UAAA,CAAW,KAAA,EAAO,iBAAiB,sBAAsB;EAAA;EAAA;EAAA,MAEhG,IAAI,sBAAA,CAAuB,QAAA,EAAU,UAAA,CAAW,KAAA,EAAO,iBAAiB,sBAAsB;EAAA,KAAsB,CAAA;EAAA,EAAA;EAG7H,EAAA,MAAM,iBAAA,GAAoB,SAAA,YAAqB,WAAA,GAAc,SAAA,CAAU,aAAA,GAAgB,MAAA;EAEvF,EAAA,OAAO,QAASA,mBAAA,IAAqB,sBAAA;EAAA;EAAA,IAEhC,IAAI,wBAAwB,QAAA,EAAU,UAAA,CAAW,OAAO,SAAA,CAAU,MAAA,EAAQ,iBAAA,EAAmB,eAAA,EAAiB,sBAAsB;EAAA;EAAA;EAAA,IAEpI,IAAI,wBAAwB,WAAA,EAAa,UAAA,CAAW,OAAO,SAAA,CAAU,MAAA,EAAQ,iBAAA,EAAmB,eAAA,EAAiB,sBAAsB;EAAA,GAAyB,CAAA;EACzK;EAIO,MAAM,qBAAA,CAAyB;EAAA,EASlC,WAAA,CAAY,YAA2C,aAAA,EAA2C;EAC9F,IAAA,IAAA,CAAK,WAAA,GAAc,UAAA;EACnB,IAAA,IAAA,CAAK,cAAA,GAAiB,aAAA;EACtB,IAAA,MAAA,CAAO,OAAO,IAAA,EAAM,cAAA,CAAe,KAAK,WAAA,EAAa,IAAA,CAAK,cAAc,CAAC,CAAA;EAAA,EAAA;EAC7E,EAEA,OAAO,YACH,UAAA,EAIwB;EACxB,IAAA,OAAO,IAAI,qBAAA,CAAsB,UAAA,CAAW,WAAA,EAAa,WAAW,cAAc,CAAA;EAAA,EAAA;EACtF,EAEA,OAAO,UAAa,KAAA,EAGlB;EACE,IAAA,OAAO;EAAA,MACH,aAAa,KAAA,CAAM,WAAA;EAAA,MACnB,gBAAgB,KAAA,CAAM;EAAA,KAC1B;EAAA,EAAA;EAER;EAEO,SAAS,2BAAA,CACZ,KAAA,EACA,aAAA,EACA,KAAA,EACA,SACA,iBAAA,EACuB;EACvB,EAAA,IAAI,UAAA,CAAW,KAAK,CAAA,EAAG;EACnB,IAAA,OAAO,IAAI,qBAAA,CAAsB,KAAA,EAAO,aAAa,CAAA;EAAA,EAAA,CAEzD,MAAA,IAAW,YAAA,CAAa,KAAK,CAAA,IAAM,KAAA,CAAM,QAAQ,KAAK,CAAA,IAAK,KAAA,CAAM,MAAA,GAAS,CAAA,EAAI;EAC1E,IAAA,MAAM,aAAa,wBAAA,CAAyB,KAAA,EAAO,aAAA,EAAe,KAAA,EAAO,SAAS,iBAAiB,CAAA;EACnG,IAAA,IAAI,UAAA,CAAW,WAAW,OAAA,EAAS;EAE/B,MAAA,MAAM,IAAI,KAAA,CAAM,UAAA,CAAW,KAAA,CAAM,GAAA,CAAI,SAAO,CAAA,EAAG,GAAA,CAAI,GAAG,CAAA,EAAA,EAAK,IAAI,OAAO,CAAA,CAAE,CAAA,CAAE,IAAA,CAAK,IAAI,CAAC,CAAA;EAAA,IAAA;EAExF,IAAA,OAAO,UAAA,CAAW,KAAA;EAAA,EAAA,CAEtB,MAAO;EACH,IAAA,IAAI,QAAA,GAAW,KAAA;EACf,IAAA,IAAI,OAAO,KAAA,KAAU,QAAA,IAAY,aAAA,CAAc,SAAS,OAAA,EAAS;EAC7D,MAAA,QAAA,GAAW,KAAA,CAAM,MAAM,KAAK,CAAA;EAAA,IAAA;EAEhC,IAAA,OAAO;EAAA,MACH,IAAA,EAAM,UAAA;EAAA,MACN,kBAAA,sBAAwB,GAAA,EAAI;EAAA,MAC5B,iBAAA,EAAmB,KAAA;EAAA,MACnB,UAAU,MAAM;EAAA,KACpB;EAAA,EAAA;EAER;EAKA,SAAS,cAAc,UAAA,EAAkE;EACrF,EAAA,IAAI,MAAA,GAAmD,IAAA;EACvD,EAAA,IAAI,sBAAsB,GAAA,EAAK;EAC3B,IAAA,MAAA,GAAS,aAAA,CAAc,WAAW,MAAM,CAAA;EAAA,EAAA,CAE5C,MAAA,IAAW,sBAAsB,QAAA,EAAU;EACvC,IAAA,KAAA,MAAW,GAAA,IAAO,WAAW,IAAA,EAAM;EAC/B,MAAA,MAAA,GAAS,cAAc,GAAG,CAAA;EAC1B,MAAA,IAAI,MAAA,EAAQ;EACR,QAAA;EAAA,MAAA;EACJ,IAAA;EACJ,EAAA,CAEJ,MAAA,IAAA,CAAY,UAAA,YAAsB,IAAA,IAAQ,UAAA,YAAsB,WAAA,KAC5D,UAAA,CAAW,KAAA,YAAiB,kBAAA,IAC5B,UAAA,CAAW,KAAA,CAAM,IAAA,KAAS,MAAA,EAAQ;EAElC,IAAA,MAAA,GAAS,UAAA;EAAA,EAAA;EAGb,EAAA,IAAI,kBAAkBZ,cAAA,EAAc;EAChC,IAAA,OAAO,MAAA;EAAA,EAAA;EAGX,EAAA,UAAA,CAAW,SAAA,CAAU,CAAC,KAAA,KAAU;EAC5B,IAAA,MAAM,WAAA,GAAc,cAAc,KAAK,CAAA;EACvC,IAAA,IAAI,uBAAuBA,cAAA,EAAc;EACrC,MAAA,MAAA,GAAS,WAAA;EAAA,IAAA,CACb,MAAA,IAAW,MAAA,IAAU,WAAA,IAAe,MAAA,KAAW,WAAA,EAAa;EACxD,MAAA,MAAA,GAAS,IAAIA,cAAA,CAAa,EAAA,EAAI,yFAAyF,CAAA;EAAA,IAAA;EAC3H,EAAA,CACH,CAAA;EAED,EAAA,OAAO,MAAA;EACX;EAEA,SAAS,gBAAgB,IAAA,EAAwC;EAC7D,EAAA,MAAM,KAAA,GAAQ;EAAA,IACV,KAAA,EAAO,SAAA;EAAA,IACP,MAAA,EAAQ,UAAA;EAAA,IACR,MAAA,EAAQ,UAAA;EAAA,IACR,IAAA,EAAM,UAAA;EAAA,IACN,OAAA,EAAS,WAAA;EAAA,IACT,SAAA,EAAW,aAAA;EAAA,IACX,aAAA,EAAe;EAAA,GACnB;EAEA,EAAA,IAAI,IAAA,CAAK,SAAS,OAAA,EAAS;EACvB,IAAA,OAAOV,QAAM,KAAA,CAAM,IAAA,CAAK,KAAK,CAAA,IAAK,SAAA,EAAW,KAAK,MAAM,CAAA;EAAA,EAAA;EAG5D,EAAA,OAAO,KAAA,CAAM,KAAK,IAAI,CAAA;EAC1B;EAEA,SAAS,gBAAgB,IAAA,EAAyC;EAC9D,EAAA,IAAI,IAAA,CAAK,IAAA,KAAS,OAAA,KAAY,UAAA,CAAW,IAAA,CAAK,OAAO,CAAA,IAAK,KAAA,CAAM,OAAA,CAAQ,IAAA,CAAK,OAAO,CAAA,CAAA,EAAI;EAIpF,IAAA,OAAO,IAAI,KAAA,CAAM,CAAA,EAAG,CAAA,EAAG,GAAG,CAAC,CAAA;EAAA,EAAA,CAC/B,MAAA,IAAW,IAAA,CAAK,IAAA,KAAS,OAAA,EAAS;EAC9B,IAAA,OAAO,KAAA,CAAM,KAAA,CAAM,IAAA,CAAK,OAAO,CAAA,IAAK,IAAA;EAAA,EAAA,CACxC,MAAA,IAAW,IAAA,CAAK,OAAA,KAAY,MAAA,EAAW;EACnC,IAAA,OAAO,IAAA;EAAA,EAAA,CACX,MAAO;EACH,IAAA,OAAO,IAAA,CAAK,OAAA;EAAA,EAAA;EAEpB;;EC3jBA,SAAS,eAAe,KAAA,EAAgB;EACpC,EAAA,OAAO,OAAO,KAAA,KAAU,QAAA,GAAW,CAAC,SAAA,EAAW,KAAK,CAAA,GAAI,KAAA;EAC5D;EAEA,SAAwB,eAAA,CAAmB,YAAsC,YAAA,EAAmE;EAChJ,EAAA,IAAI,QAAQ,UAAA,CAAW,KAAA;EACvB,EAAA,IAAI,CAAC,KAAA,EAAO;EAER,IAAA,OAAO,uBAAA,CAAwB,YAAY,YAAY,CAAA;EAAA,EAAA;EAG3D,EAAA,MAAM,0BAA0B,KAAA,IAAS,OAAO,MAAM,CAAC,CAAA,CAAE,CAAC,CAAA,KAAM,QAAA;EAChE,EAAA,MAAM,gBAAA,GAAmB,uBAAA,IAA2B,UAAA,CAAW,QAAA,KAAa,MAAA;EAC5E,EAAA,MAAM,aAAA,GAAgB,2BAA2B,CAAC,gBAAA;EAElD,EAAA,KAAA,GAAQ,KAAA,CAAM,GAAA,CAAI,CAAC,IAAA,KAAS;EACxB,IAAA,IAAI,CAAC,oBAAoB,YAAA,CAAa,MAAA,IAAU,OAAO,IAAA,CAAK,CAAC,MAAM,QAAA,EAAU;EACzE,MAAA,OAAO,CAAC,KAAK,CAAC,CAAA,EAAG,mBAAmB,IAAA,CAAK,CAAC,CAAC,CAAC,CAAA;EAAA,IAAA;EAEhD,IAAA,OAAO,CAAC,KAAK,CAAC,CAAA,EAAG,eAAe,IAAA,CAAK,CAAC,CAAC,CAAC,CAAA;EAAA,EAAA,CAC3C,CAAA;EAED,EAAA,IAAI,uBAAA,EAAyB;EACzB,IAAA,OAAO,8BAAA,CAA+B,UAAA,EAAY,YAAA,EAAc,KAA8C,CAAA;EAAA,EAAA,WACvG,aAAA,EAAe;EAEtB,IAAA,OAAO,mBAAA,CAAoB,UAAA,EAAY,YAAA,EAAc,KAAkC,CAAA;EAAA,EAAA,CAC3F,MAAO;EACH,IAAA,OAAO,uBAAA,CAAwB,UAAA,EAAY,YAAA,EAAc,KAAkC,CAAA;EAAA,EAAA;EAEnG;EAEA,SAAS,uBAAA,CAA2B,YAAsC,YAAA,EAAmE;EACzI,EAAA,MAAM,GAAA,GAA+B,CAAC,KAAA,EAAO,UAAA,CAAW,QAAQ,CAAA;EAEhE,EAAA,IAAI,UAAA,CAAW,YAAY,MAAA,EAAW;EAGlC,IAAA,OAAO,aAAa,IAAA,KAAS,QAAA,GAAW,CAAC,QAAA,EAAU,GAAG,CAAA,GAAI,GAAA;EAAA,EAAA,CAC9D,MAAA,IAAW,YAAA,CAAa,IAAA,KAAS,MAAA,EAAQ;EACrC,IAAA,OAAO;EAAA,MACH,OAAA;EAAA,MACA,GAAA;EAAA,MACA,MAAA,CAAO,IAAA,CAAK,YAAA,CAAa,MAAM,CAAA;EAAA,MAC/B,GAAA;EAAA,MACA,UAAA,CAAW;EAAA,KACf;EAAA,EAAA,CACJ,MAAO;EACH,IAAA,MAAM,UAAA,GAAsC,CAAC,YAAA,CAAa,IAAA,KAAS,OAAA,GAAU,UAAA,GAAa,YAAA,CAAa,IAAA,EAAM,GAAA,EAAK,cAAA,CAAe,UAAA,CAAW,OAAO,CAAC,CAAA;EACpJ,IAAA,IAAI,YAAA,CAAa,SAAS,OAAA,EAAS;EAC/B,MAAA,UAAA,CAAW,OAAO,CAAA,EAAG,CAAA,EAAG,aAAa,KAAA,EAAO,YAAA,CAAa,UAAU,IAAI,CAAA;EAAA,IAAA;EAE3E,IAAA,OAAO,UAAA;EAAA,EAAA;EAEf;EAEA,SAAS,uBAA0B,UAAA,EAAsC;EACrE,EAAA,QAAQ,WAAW,UAAA;EAAY,IAC/B,KAAK,KAAA;EAAO,MAAA,OAAO,iBAAA;EAAA,IACnB,KAAK,KAAA;EAAO,MAAA,OAAO,iBAAA;EAAA,IACnB;EAAS,MAAA,OAAO,aAAA;EAAA;EAEpB;EAEA,SAAS,8BAAA,CACL,UAAA,EACA,YAAA,EACA,KAAA,EACuB;EAEvB,EAAA,MAAM,4BAAiD,EAAC;EAExD,EAAA,MAAM,uBAA4C,EAAC;EACnD,EAAA,MAAM,YAAY,EAAC;EACnB,EAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,KAAA,CAAM,QAAQ,CAAA,EAAA,EAAK;EACnC,IAAA,MAAM,IAAA,GAAO,MAAM,CAAC,CAAA;EACpB,IAAA,MAAM,IAAA,GAAO,IAAA,CAAK,CAAC,CAAA,CAAE,IAAA;EACrB,IAAA,IAAI,yBAAA,CAA0B,IAAI,CAAA,KAAM,MAAA,EAAW;EAC/C,MAAA,yBAAA,CAA0B,IAAI,CAAA,GAAI;EAAA,QAC9B,IAAA;EAAA,QACA,MAAM,UAAA,CAAW,IAAA;EAAA,QACjB,UAAU,UAAA,CAAW,QAAA;EAAA,QACrB,SAAS,UAAA,CAAW;EAAA,OACxB;EACA,MAAA,oBAAA,CAAqB,IAAI,IAAI,EAAC;EAC9B,MAAA,SAAA,CAAU,KAAK,IAAI,CAAA;EAAA,IAAA;EAGvB,IAAA,oBAAA,CAAqB,IAAI,CAAA,CAAE,IAAA,CAAK,CAAC,IAAA,CAAK,CAAC,CAAA,CAAE,KAAA,EAAO,IAAA,CAAK,CAAC,CAAC,CAAC,CAAA;EAAA,EAAA;EAO5D,EAAA,MAAM,YAAA,GAAe,eAAA,CAAgB,EAAC,EAAqC,YAAY,CAAA;EACvF,EAAA,IAAI,iBAAiB,aAAA,EAAe;EAChC,IAAA,MAAM,UAAA,GAAsC,CAAC,sBAAA,CAAuB,UAAU,CAAA,EAAG,CAAC,QAAQ,CAAA,EAAG,CAAC,MAAM,CAAC,CAAA;EAErG,IAAA,KAAA,MAAW,KAAK,SAAA,EAAW;EAEvB,MAAA,MAAM,MAAA,GAAS,wBAAwB,yBAAA,CAA0B,CAAC,GAAG,YAAA,EAAc,oBAAA,CAAqB,CAAC,CAAC,CAAA;EAC1G,MAAA,cAAA,CAAe,UAAA,EAAY,CAAA,EAAG,MAAA,EAAQ,KAAK,CAAA;EAAA,IAAA;EAG/C,IAAA,OAAO,UAAA;EAAA,EAAA,CACX,MAAO;EACH,IAAA,MAAM,UAAA,GAAsC,CAAC,MAAA,EAAQ,CAAC,MAAM,CAAC,CAAA;EAE7D,IAAA,KAAA,MAAW,KAAK,SAAA,EAAW;EAEvB,MAAA,MAAM,MAAA,GAAS,wBAAwB,yBAAA,CAA0B,CAAC,GAAG,YAAA,EAAc,oBAAA,CAAqB,CAAC,CAAC,CAAA;EAC1G,MAAA,cAAA,CAAe,UAAA,EAAY,CAAA,EAAG,MAAA,EAAQ,IAAI,CAAA;EAAA,IAAA;EAG9C,IAAA,wBAAA,CAAyB,UAAU,CAAA;EAEnC,IAAA,OAAO,UAAA;EAAA,EAAA;EAEf;EAEA,SAAS,QAAA,CAAS,GAAY,CAAA,EAAY;EACtC,EAAA,IAAI,CAAA,KAAM,QAAW,OAAO,CAAA;EAC5B,EAAA,IAAI,CAAA,KAAM,QAAW,OAAO,CAAA;EAChC;EAEA,SAAS,WAAA,CAAe,YAAsC,YAAA,EAA0C;EACpG,EAAA,MAAM,eAAe,cAAA,CAAe,QAAA,CAAS,WAAW,OAAA,EAAS,YAAA,CAAa,OAAO,CAAC,CAAA;EAQtF,EAAA,IAAI,YAAA,KAAiB,MAAA,IAAa,YAAA,CAAa,IAAA,KAAS,eAAA,EAAiB;EACrE,IAAA,OAAO,EAAA;EAAA,EAAA;EAEX,EAAA,OAAO,YAAA;EACX;EAEA,SAAS,uBAAA,CACL,UAAA,EACA,YAAA,EACA,KAAA,EACuB;EACvB,EAAA,MAAM,IAAA,GAAO,eAAA,CAAgB,UAAA,EAAY,YAAY,CAAA;EACrD,EAAA,MAAM,GAAA,GAA+B,CAAC,KAAA,EAAO,UAAA,CAAW,QAAQ,CAAA;EAChE,EAAA,IAAI,IAAA,KAAS,iBAAiB,OAAO,KAAA,CAAM,CAAC,CAAA,CAAE,CAAC,MAAM,SAAA,EAAW;EAE5D,IAAA,MAAM,UAAA,GAAsC,CAAC,MAAM,CAAA;EACnD,IAAA,KAAA,MAAW,QAAQ,KAAA,EAAO;EACtB,MAAA,UAAA,CAAW,IAAA,CAAK,CAAC,IAAA,EAAM,GAAA,EAAK,IAAA,CAAK,CAAC,CAAC,CAAA,EAAG,IAAA,CAAK,CAAC,CAAC,CAAA;EAAA,IAAA;EAGjD,IAAA,UAAA,CAAW,IAAA,CAAK,WAAA,CAAY,UAAA,EAAY,YAAY,CAAC,CAAA;EACrD,IAAA,OAAO,UAAA;EAAA,EAAA,CACX,MAAA,IAAW,SAAS,aAAA,EAAe;EAC/B,IAAA,MAAM,UAAA,GAAsC,CAAC,OAAA,EAAS,GAAG,CAAA;EACzD,IAAA,KAAA,MAAW,QAAQ,KAAA,EAAO;EACtB,MAAA,cAAA,CAAe,YAAY,IAAA,CAAK,CAAC,GAAG,IAAA,CAAK,CAAC,GAAG,KAAK,CAAA;EAAA,IAAA;EAEtD,IAAA,UAAA,CAAW,IAAA,CAAK,WAAA,CAAY,UAAA,EAAY,YAAY,CAAC,CAAA;EACrD,IAAA,OAAO,UAAA;EAAA,EAAA,CACX,MAAA,IAAW,SAAS,UAAA,EAAY;EAC5B,IAAA,MAAM,aAAsC,CAAC,MAAA,EAAQ,CAAC,QAAA,EAAU,GAAG,CAAC,CAAA;EACpE,IAAA,KAAA,MAAW,QAAQ,KAAA,EAAO;EACtB,MAAA,cAAA,CAAe,YAAY,IAAA,CAAK,CAAC,GAAG,IAAA,CAAK,CAAC,GAAG,IAAI,CAAA;EAAA,IAAA;EAErD,IAAA,wBAAA,CAAyB,UAAU,CAAA;EACnC,IAAA,OAAO,UAAA,CAAW,OAAA,KAAY,MAAA,GAAY,UAAA,GAAa;EAAA,MACnD,MAAA;EAAA,MACA,CAAC,IAAA,EAAM,CAAC,QAAA,EAAU,GAAG,GAAG,QAAQ,CAAA;EAAA,MAChC,UAAA;EAAA,MACA,cAAA,CAAe,WAAW,OAAO;EAAA,KACrC;EAAA,EAAA,CACJ,MAAA,IAAW,SAAS,aAAA,EAAe;EAC/B,IAAA,MAAM,IAAA,GAAO,UAAA,CAAW,IAAA,KAAS,MAAA,GAAY,WAAW,IAAA,GAAO,CAAA;EAC/D,IAAA,MAAM,UAAA,GAAsC;EAAA,MACxC,uBAAuB,UAAU,CAAA;EAAA,MACjC,SAAS,CAAA,GAAI,CAAC,QAAQ,CAAA,GAAI,CAAC,eAAe,IAAI,CAAA;EAAA,MAC9C,CAAC,UAAU,GAAG;EAAA,KAClB;EAEA,IAAA,KAAA,MAAW,QAAQ,KAAA,EAAO;EACtB,MAAA,cAAA,CAAe,YAAY,IAAA,CAAK,CAAC,GAAG,IAAA,CAAK,CAAC,GAAG,KAAK,CAAA;EAAA,IAAA;EAEtD,IAAA,OAAO,UAAA,CAAW,OAAA,KAAY,MAAA,GAAY,UAAA,GAAa;EAAA,MACnD,MAAA;EAAA,MACA,CAAC,IAAA,EAAM,CAAC,QAAA,EAAU,GAAG,GAAG,QAAQ,CAAA;EAAA,MAChC,UAAA;EAAA,MACA,cAAA,CAAe,WAAW,OAAO;EAAA,KACrC;EAAA,EAAA,CACJ,MAAO;EACH,IAAA,MAAM,IAAI,KAAA,CAAM,CAAA,+BAAA,EAAkC,IAAI,CAAA,CAAE,CAAA;EAAA,EAAA;EAEhE;EAEA,SAAS,oBAAuB,UAAA,EAAsC,YAAA,EAA0C,OAAuC,KAAA,GAAuB,CAAC,MAAM,CAAA,EAA4B;EAC7M,EAAA,MAAM,IAAA,GAAO,eAAA,CAAgB,UAAA,EAAY,YAAY,CAAA;EACrD,EAAA,IAAI,UAAA;EACJ,EAAA,IAAI,MAAA,GAAS,KAAA;EACb,EAAA,IAAI,SAAS,UAAA,EAAY;EACrB,IAAA,UAAA,GAAa,CAAC,QAAQ,KAAK,CAAA;EAC3B,IAAA,MAAA,GAAS,IAAA;EAAA,EAAA,CACb,MAAA,IAAW,SAAS,aAAA,EAAe;EAC/B,IAAA,MAAM,IAAA,GAAO,UAAA,CAAW,IAAA,KAAS,MAAA,GAAY,WAAW,IAAA,GAAO,CAAA;EAC/D,IAAA,UAAA,GAAa,CAAC,sBAAA,CAAuB,UAAU,CAAA,EAAG,IAAA,KAAS,CAAA,GAAI,CAAC,QAAQ,CAAA,GAAI,CAAC,aAAA,EAAe,IAAI,GAAG,KAAK,CAAA;EAAA,EAAA,CAE5G,MAAO;EACH,IAAA,MAAM,IAAI,KAAA,CAAM,CAAA,4BAAA,EAA+B,IAAI,CAAA,CAAA,CAAG,CAAA;EAAA,EAAA;EAG1D,EAAA,KAAA,MAAW,QAAQ,KAAA,EAAO;EACtB,IAAA,cAAA,CAAe,YAAY,IAAA,CAAK,CAAC,GAAG,IAAA,CAAK,CAAC,GAAG,MAAM,CAAA;EAAA,EAAA;EAGvD,EAAA,wBAAA,CAAyB,UAAU,CAAA;EAEnC,EAAA,OAAO,UAAA;EACX;EAEA,SAAS,yBAAyB,UAAA,EAAqC;EAEnE,EAAA,IAAI,WAAW,CAAC,CAAA,KAAM,MAAA,IAAU,UAAA,CAAW,WAAW,CAAA,EAAG;EACrD,IAAA,UAAA,CAAW,KAAK,CAAC,CAAA;EACjB,IAAA,UAAA,CAAW,IAAA,CAAK,UAAA,CAAW,CAAC,CAAC,CAAA;EAAA,EAAA;EAErC;EAEA,SAAS,cAAA,CAAe,KAAA,EAAgC,KAAA,EAAgB,MAAA,EAAiB,MAAA,EAAiB;EAGtG,EAAA,IAAI,KAAA,CAAM,SAAS,CAAA,IAAK,KAAA,KAAU,MAAM,KAAA,CAAM,MAAA,GAAS,CAAC,CAAA,EAAG;EACvD,IAAA;EAAA,EAAA;EAGJ,EAAA,IAAI,EAAE,MAAA,IAAU,KAAA,CAAM,MAAA,KAAW,CAAA,CAAA,EAAI;EACjC,IAAA,KAAA,CAAM,KAAK,KAAK,CAAA;EAAA,EAAA;EAEpB,EAAA,KAAA,CAAM,KAAK,MAAM,CAAA;EACrB;EAEA,SAAS,eAAA,CAAmB,YAAsC,YAAA,EAAkD;EAChH,EAAA,IAAI,WAAW,IAAA,EAAM;EACjB,IAAA,OAAO,UAAA,CAAW,IAAA;EAAA,EAAA,CACtB,MAAO;EAEH,IAAA,OAAO,YAAA,CAAa,UAAA,CAAW,YAAA,GAAe,aAAA,GAAgB,UAAA;EAAA,EAAA;EAEtE;EAGO,SAAS,mBAAmB,CAAA,EAA6C;EAC5E,EAAA,MAAM,MAAA,GAAkC,CAAC,QAAQ,CAAA;EACjD,EAAA,MAAM,EAAA,GAAK,aAAA;EACX,EAAA,IAAI,GAAA,GAAM,CAAA;EACV,EAAA,KAAA,IAAS,KAAA,GAAQ,EAAA,CAAG,IAAA,CAAK,CAAC,CAAA,EAAG,KAAA,KAAU,IAAA,EAAM,KAAA,GAAQ,EAAA,CAAG,IAAA,CAAK,CAAC,CAAA,EAAG;EAC7D,IAAA,MAAM,OAAA,GAAU,EAAE,KAAA,CAAM,GAAA,EAAK,GAAG,SAAA,GAAY,KAAA,CAAM,CAAC,CAAA,CAAE,MAAM,CAAA;EAC3D,IAAA,GAAA,GAAM,EAAA,CAAG,SAAA;EACT,IAAA,IAAI,OAAA,CAAQ,MAAA,GAAS,CAAA,EAAG,MAAA,CAAO,KAAK,OAAO,CAAA;EAC3C,IAAA,MAAA,CAAO,KAAK,CAAC,KAAA,EAAO,KAAA,CAAM,CAAC,CAAC,CAAC,CAAA;EAAA,EAAA;EAGjC,EAAA,IAAI,MAAA,CAAO,WAAW,CAAA,EAAG;EACrB,IAAA,OAAO,CAAA;EAAA,EAAA;EAGX,EAAA,IAAI,GAAA,GAAM,EAAE,MAAA,EAAQ;EAChB,IAAA,MAAA,CAAO,IAAA,CAAK,CAAA,CAAE,KAAA,CAAM,GAAG,CAAC,CAAA;EAAA,EAAA,CAC5B,MAAA,IAAW,MAAA,CAAO,MAAA,KAAW,CAAA,EAAG;EAC5B,IAAA,OAAO,CAAC,WAAA,EAAa,MAAA,CAAO,CAAC,CAAC,CAAA;EAAA,EAAA;EAGlC,EAAA,OAAO,MAAA;EACX;;EC5RO,SAAS,SAAS,KAAA,EAAyB;EAC9C,EAAA,IAAI,KAAA,YAAiB,MAAA,IAAU,KAAA,YAAiB,MAAA,IAAU,iBAAiB,OAAA,EAAS;EAChF,IAAA,OAAO,MAAM,OAAA,EAAQ;EAAA,EACzB,CAAA,MAAO;EACH,IAAA,OAAO,KAAA;EAAA,EACX;EACJ;EAEO,SAAS,aAAa,KAAA,EAAyB;EAClD,EAAA,IAAI,KAAA,CAAM,OAAA,CAAQ,KAAK,CAAA,EAAG;EACtB,IAAA,OAAO,KAAA,CAAM,IAAI,YAAY,CAAA;EAAA,EACjC,CAAA,MAAA,IAAW,iBAAiB,MAAA,IAAU,EAAE,iBAAiB,MAAA,IAAU,KAAA,YAAiB,MAAA,IAAU,KAAA,YAAiB,OAAA,CAAA,EAAU;EACrH,IAAA,MAAM,iBAEF,EAAC;EACL,IAAA,MAAM,QAAA,GAAW,KAAA;EACjB,IAAA,KAAA,MAAW,OAAO,QAAA,EAAU;EACxB,MAAA,cAAA,CAAe,GAAG,CAAA,GAAI,YAAA,CAAa,QAAA,CAAS,GAAG,CAAC,CAAA;EAAA,IACpD;EACA,IAAA,OAAO,cAAA;EAAA,EACX;EAEA,EAAA,OAAO,SAAS,KAAK,CAAA;EACzB;;ECWA,SAAS,mBAAmB,MAAA,EAA0B;EAClD,EAAA,IAAI,MAAA,KAAW,IAAA,IAAQ,MAAA,KAAW,KAAA,EAAO;EACrC,IAAA,OAAO,IAAA;EAAA,EAAA;EAGX,EAAA,IAAI,CAAC,KAAA,CAAM,OAAA,CAAQ,MAAM,CAAA,IAAK,MAAA,CAAO,WAAW,CAAA,EAAG;EAC/C,IAAA,OAAO,KAAA;EAAA,EAAA;EAEX,EAAA,QAAQ,MAAA,CAAO,CAAC,CAAA;EAAG,IACnB,KAAK,KAAA;EACD,MAAA,OAAO,MAAA,CAAO,UAAU,CAAA,IAAK,MAAA,CAAO,CAAC,CAAA,KAAM,KAAA,IAAS,MAAA,CAAO,CAAC,CAAA,KAAM,OAAA;EAAA,IAEtE,KAAK,IAAA;EACD,MAAA,OAAO,MAAA,CAAO,MAAA,IAAU,CAAA,KAAM,OAAO,MAAA,CAAO,CAAC,CAAA,KAAM,QAAA,IAAY,KAAA,CAAM,OAAA,CAAQ,MAAA,CAAO,CAAC,CAAC,CAAA,CAAA;EAAA,IAE1F,KAAK,KAAA;EAAA,IACL,KAAK,MAAA;EAAA,IACL,KAAK,MAAA;EACD,MAAA,OAAO,KAAA;EAAA,IAEX,KAAK,IAAA;EAAA,IACL,KAAK,IAAA;EAAA,IACL,KAAK,GAAA;EAAA,IACL,KAAK,IAAA;EAAA,IACL,KAAK,GAAA;EAAA,IACL,KAAK,IAAA;EACD,MAAA,OAAO,MAAA,CAAO,MAAA,KAAW,CAAA,KAAM,KAAA,CAAM,OAAA,CAAQ,MAAA,CAAO,CAAC,CAAC,CAAA,IAAK,KAAA,CAAM,OAAA,CAAQ,MAAA,CAAO,CAAC,CAAC,CAAA,CAAA;EAAA,IAEtF,KAAK,KAAA;EAAA,IACL,KAAK,KAAA;EACD,MAAA,KAAA,MAAW,CAAA,IAAK,MAAA,CAAO,KAAA,CAAM,CAAC,CAAA,EAAG;EAC7B,QAAA,IAAI,CAAC,kBAAA,CAAmB,CAAC,CAAA,IAAK,OAAO,MAAM,SAAA,EAAW;EAClD,UAAA,OAAO,KAAA;EAAA,QAAA;EACX,MAAA;EAEJ,MAAA,OAAO,IAAA;EAAA,IAEX;EACI,MAAA,OAAO,IAAA;EAAA;EAEf;EAYA,SAAS,aAAa,MAAA,EAA8B,KAAA,GAAgB,IAAI,OAAA,GAAgC,IAAA,EAAM,YAAoB,MAAA,EAAuB;EACrJ,EAAA,IAAI,MAAA,KAAW,IAAA,IAAQ,MAAA,KAAW,MAAA,EAAW;EACzC,IAAA,OAAO,EAAC,MAAA,EAAQ,MAAM,MAAM,YAAA,EAAc,KAAA,EAAO,aAAa,KAAA,EAAK;EAAA,EAAA;EAGvE,EAAA,IAAI,CAAC,kBAAA,CAAmB,MAAM,CAAA,EAAG;EAC7B,IAAA,MAAA,GAASwB,gBAAc,MAAM,CAAA;EAAA,EAAA;EAGjC,EAAA,MAAM,SAAA,GAAa,MAAA;EAEnB,EAAA,IAAI,YAAA,GAAe,IAAA;EACnB,EAAA,IAAI;EAEA,IAAA,YAAA,GAAe,oBAAoB,SAAS,CAAA;EAAA,EAAA,SACvC,CAAA,EAAG;EACR,IAAA,OAAA,CAAQ,IAAA;EAAA,MAChB,CAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAKE,IAAA,CAAK,SAAA,CAAU,SAAA,EAAW,IAAA,EAAM,CAAC,CAAC;AAAA,QAAA;EAAA,KAC3B;EAAA,EAAA;EAIL,EAAA,IAAI,UAAA,GAAa,IAAA;EACjB,EAAA,IAAI,UAAA,GAAa,IAAA;EACjB,EAAA,IAAI,SAAA,KAAc,YAAA,IAAgB,SAAA,KAAc,KAAA,IAAS,cAAc,MAAA,EAAQ;EAE3E,IAAA,UAAA,GAAaC,EAAA,CAAO,CAAA,OAAA,EAAU,SAAS,CAAA,CAAE,CAAA;EAGzC,IAAA,MAAM,oBAAA,GAAuB,gBAAA,CAAiB,YAAA,EAAc,UAAA,EAAY,OAAO,OAAO,CAAA;EAEtF,IAAA,IAAI,oBAAA,CAAqB,WAAW,OAAA,EAAS;EACzC,MAAA,MAAM,IAAI,KAAA,CAAM,oBAAA,CAAqB,KAAA,CAAM,GAAA,CAAI,SAAO,CAAA,EAAG,GAAA,CAAI,GAAG,CAAA,EAAA,EAAK,IAAI,OAAO,CAAA,CAAE,CAAA,CAAE,IAAA,CAAK,IAAI,CAAC,CAAA;EAAA,IAAA,CAClG,MAAO;EAEH,MAAA,UAAA,GAAa,CAAC,gBAAA,EAAoC,OAAA,EAAkB,SAAA,KAAgC,oBAAA,CAAqB,KAAA,CAAM,QAAA,CAAS,gBAAA,EAAkB,OAAA,EAAS,EAAC,EAAG,SAAS,CAAA;EAAA,IAAA;EACpL,EAAA;EAKJ,EAAA,IAAI,iBAAA,GAAoB,IAAA;EACxB,EAAA,IAAI,WAAA,GAAc,IAAA;EAClB,EAAA,IAAI,iBAAiB,SAAA,EAAW;EAE5B,IAAA,MAAM,qBAAA,GAAwB,gBAAA,CAAiB,SAAA,EAAW,UAAA,EAAY,OAAO,OAAO,CAAA;EAEpF,IAAA,IAAI,qBAAA,CAAsB,WAAW,OAAA,EAAS;EAC1C,MAAA,MAAM,IAAI,KAAA,CAAM,qBAAA,CAAsB,KAAA,CAAM,GAAA,CAAI,SAAO,CAAA,EAAG,GAAA,CAAI,GAAG,CAAA,EAAA,EAAK,IAAI,OAAO,CAAA,CAAE,CAAA,CAAE,IAAA,CAAK,IAAI,CAAC,CAAA;EAAA,IAAA,CACnG,MAAO;EAEH,MAAA,iBAAA,GAAoB,CAAC,gBAAA,EAAoC,OAAA,EAAkB,SAAA,EAA6B,gBAAA,EAA0B,wBAA8C,qBAAA,CAAsB,KAAA,CAAM,QAAA,CAAS,gBAAA,EAAkB,SAAS,EAAC,EAAG,WAAW,MAAA,EAAW,MAAA,EAAW,kBAAkB,mBAAmB,CAAA;EAC1T,MAAA,WAAA,GAAc,CAAC,iBAAA,CAAkB,qBAAA,CAAsB,KAAA,CAAM,UAAU,CAAA;EAAA,IAAA;EAC3E,EAAA;EAGJ,EAAA,UAAA,GAAc,UAAA;EACd,EAAA,MAAM,YAAA,GAAe,eAAe,YAAY,CAAA;EAEhD,EAAA,OAAO;EAAA;EAAA,IAEH,MAAA,EAAQ,UAAA;EAAA;EAAA,IAER,aAAA,EAAe,oBAAoB,iBAAA,GAAoB,MAAA;EAAA,IACvD,YAAA;EAAA,IACA,WAAA,EAAa,CAAC,CAAC;EAAA,GACnB;EACJ;EAGA,SAAS,oBAAoB,MAAA,EAAkC;EAC3D,EAAA,IAAI,CAAC,eAAA,CAAgB,MAAM,CAAA,EAAG;EAC1B,IAAA,OAAO,MAAA;EAAA,EAAA;EAIX,EAAA,IAAI,MAAA,GAAS,aAAa,MAAM,CAAA;EAGhC,EAAA,oBAAA,CAAqB,MAAmB,CAAA;EAGxC,EAAA,MAAA,GAAS,kCAAkC,MAAM,CAAA;EAEjD,EAAA,OAAO,MAAA;EACX;EAGA,SAAS,kCAAkC,UAAA,EAAsB;EAC7D,EAAA,IAAI,CAAC,KAAA,CAAM,OAAA,CAAQ,UAAU,CAAA,EAAG;EAC5B,IAAA,OAAO,UAAA;EAAA,EAAA;EAIX,EAAA,MAAM,SAAA,GAAY,oBAAoB,UAAU,CAAA;EAChD,EAAA,IAAI,cAAc,IAAA,EAAM;EACpB,IAAA,OAAO,SAAA;EAAA,EAAA,CACX,MAAO;EAEH,IAAA,OAAO,UAAU,GAAA,CAAI,CAAC,aAAA,KAAkB,iCAAA,CAAkC,aAAa,CAAC,CAAA;EAAA,EAAA;EAEhG;EAWA,SAAS,qBAAqB,MAAA,EAAmB;EAC7C,EAAA,IAAI,sBAAA,GAAyB,KAAA;EAC7B,EAAA,MAAM,WAAsB,EAAC;EAC7B,EAAA,IAAI,MAAA,CAAO,CAAC,CAAA,KAAM,MAAA,EAAQ;EACtB,IAAA,KAAA,IAAS,IAAI,CAAA,EAAG,CAAA,GAAI,OAAO,MAAA,GAAS,CAAA,EAAG,KAAK,CAAA,EAAG;EAC3C,MAAA,sBAAA,GAAyB,sBAAA,IAA0B,eAAA,CAAgB,MAAA,CAAO,CAAC,CAAC,CAAA;EAC5E,MAAA,QAAA,CAAS,IAAA,CAAK,MAAA,CAAO,CAAA,GAAI,CAAC,CAAC,CAAA;EAAA,IAAA;EAE/B,IAAA,QAAA,CAAS,IAAA,CAAK,MAAA,CAAO,EAAA,CAAG,EAAE,CAAC,CAAA;EAAA,EAAA,CAC/B,MAAA,IAAW,MAAA,CAAO,CAAC,CAAA,KAAM,OAAA,EAAS;EAC9B,IAAA,sBAAA,GAAyB,sBAAA,IAA0B,eAAA,CAAgB,MAAA,CAAO,CAAC,CAAC,CAAA;EAC5E,IAAA,KAAA,IAAS,IAAI,CAAA,EAAG,CAAA,GAAI,OAAO,MAAA,GAAS,CAAA,EAAG,KAAK,CAAA,EAAG;EAC3C,MAAA,QAAA,CAAS,IAAA,CAAK,MAAA,CAAO,CAAA,GAAI,CAAC,CAAC,CAAA;EAAA,IAAA;EAE/B,IAAA,QAAA,CAAS,IAAA,CAAK,MAAA,CAAO,EAAA,CAAG,EAAE,CAAC,CAAA;EAAA,EAAA,CAC/B,MAAA,IAAW,MAAA,CAAO,CAAC,CAAA,KAAM,MAAA,EAAQ;EAC7B,IAAA,sBAAA,GAAyB,sBAAA,IAA0B,eAAA,CAAgB,MAAA,CAAO,CAAC,CAAC,CAAA;EAC5E,IAAA,KAAA,IAAS,IAAI,CAAA,EAAG,CAAA,GAAI,OAAO,MAAA,GAAS,CAAA,EAAG,KAAK,CAAA,EAAG;EAC3C,MAAA,QAAA,CAAS,IAAA,CAAK,MAAA,CAAO,CAAA,GAAI,CAAC,CAAC,CAAA;EAAA,IAAA;EAC/B,EAAA;EAGJ,EAAA,IAAI,sBAAA,EAAwB;EACxB,IAAA,MAAA,CAAO,MAAA,GAAS,CAAA;EAChB,IAAA,MAAA,CAAO,IAAA,CAAK,KAAA,EAAO,GAAG,QAAQ,CAAA;EAAA,EAAA;EAIlC,EAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,MAAA,CAAO,QAAQ,CAAA,EAAA,EAAK;EACpC,IAAA,oBAAA,CAAqB,MAAA,CAAO,CAAC,CAAc,CAAA;EAAA,EAAA;EAEnD;EAGA,SAAS,gBAAgB,MAAA,EAAsB;EAE3C,EAAA,IAAI,CAAC,KAAA,CAAM,OAAA,CAAQ,MAAM,CAAA,EAAG;EACxB,IAAA,OAAO,KAAA;EAAA,EAAA;EAGX,EAAA,IAAI,uBAAA,CAAwB,MAAA,CAAO,CAAC,CAAC,CAAA,EAAG;EACpC,IAAA,OAAO,IAAA;EAAA,EAAA;EAGX,EAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,MAAA,CAAO,QAAQ,CAAA,EAAA,EAAK;EAEpC,IAAA,MAAM,KAAA,GAAQ,OAAO,CAAC,CAAA;EACtB,IAAA,IAAI,eAAA,CAAgB,KAAK,CAAA,EAAG;EACxB,MAAA,OAAO,IAAA;EAAA,IAAA;EACX,EAAA;EAGJ,EAAA,OAAO,KAAA;EACX;EAEA,SAAS,wBAAwB,UAAA,EAA6B;EAC1D,EAAA,OAAO,UAAA,KAAe,WAClB,UAAA,KAAe,sBAAA;EACvB;EAEA,MAAM,2BAAA,uBAAkC,GAAA,CAAI;EAAA,EACxC,IAAA;EAAA,EACA,IAAA;EAAA,EACA,IAAA;EAAA,EACA,GAAA;EAAA,EACA,IAAA;EAAA,EACA,GAAA;EAAA,EACA,IAAA;EAAA,EACA;EACJ,CAAC,CAAA;EAGD,SAAS,oBAAoB,UAAA,EAAsB;EAE/C,EAAA,IAAI,2BAAA,CAA4B,GAAA,CAAI,UAAA,CAAW,CAAC,CAAC,CAAA,EAAG;EAGhD,IAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,UAAA,CAAW,QAAQ,CAAA,EAAA,EAAK;EAExC,MAAA,MAAM,KAAA,GAAQ,WAAW,CAAC,CAAA;EAC1B,MAAA,IAAI,eAAA,CAAgB,KAAK,CAAA,EAAG;EACxB,QAAA,OAAO,IAAA;EAAA,MAAA;EACX,IAAA;EACJ,EAAA;EAEJ,EAAA,OAAO,UAAA;EACX;EAGA,SAAS,OAAA,CAAQ,GAAW,CAAA,EAAW;EACnC,EAAA,OAAO,CAAA,GAAI,CAAA,GAAI,EAAA,GAAK,CAAA,GAAI,IAAI,CAAA,GAAI,CAAA;EACpC;EAGA,SAAS,eAAe,MAAA,EAA8B;EAClD,EAAA,IAAI,CAAC,KAAA,CAAM,OAAA,CAAQ,MAAM,GAAG,OAAO,KAAA;EACnC,EAAA,IAAI,MAAA,CAAO,CAAC,CAAA,KAAM,QAAA,IAAY,OAAO,CAAC,CAAA,KAAM,YAAY,OAAO,IAAA;EAC/D,EAAA,KAAA,IAAS,KAAA,GAAQ,CAAA,EAAG,KAAA,GAAQ,MAAA,CAAO,QAAQ,KAAA,EAAA,EAAS;EAEhD,IAAA,IAAI,cAAA,CAAe,MAAA,CAAO,KAAK,CAAC,GAAG,OAAO,IAAA;EAAA,EAAA;EAE9C,EAAA,OAAO,KAAA;EACX;EAGA,SAASD,gBAAc,MAAA,EAAqC;EACxD,EAAA,IAAI,CAAC,QAAQ,OAAO,IAAA;EAEpB,EAAA,MAAM,EAAA,GAAK,OAAO,CAAC,CAAA;EACnB,EAAA,IAAI,MAAA,CAAO,MAAA,IAAU,CAAA,EAAG,OAAQ,EAAA,KAAO,KAAA;EACvC,EAAA,MAAM,SAAA;EAAA;EAAA,IAEF,EAAA,KAAO,OAAOE,qBAAA,CAAoB,MAAA,CAAO,CAAC,CAAA,EAAG,MAAA,CAAO,CAAC,CAAA,EAAG,IAAI,CAAA;EAAA;EAAA,MAE5D,OAAO,IAAA,GAAO,eAAA,CAAgBA,qBAAA,CAAoB,MAAA,CAAO,CAAC,CAAA,EAAG,MAAA,CAAO,CAAC,CAAA,EAAG,IAAI,CAAC,CAAA,GAC7E,OAAO,GAAA,IACP,EAAA,KAAO,OACP,EAAA,KAAO,IAAA;EAAA,MAEP,EAAA,KAAO,OAAOA,qBAAA,CAAoB,MAAA,CAAO,CAAC,CAAA,EAAG,MAAA,CAAO,CAAC,CAAA,EAAG,EAAE,CAAA;EAAA;EAAA,QAE1D,OAAO,KAAA,GAAQ,oBAAA,CAAqB,MAAA,CAAO,KAAA,CAAM,CAAC,CAAC,CAAA,GACnD,EAAA,KAAO,KAAA,GAAS,CAAC,KAAK,CAAA,CAAgB,MAAA,CAAO,MAAA,CAAO,MAAM,CAAC,CAAA,CAAE,GAAA,CAAIF,eAAa,CAAC,CAAA,GAC/E,EAAA,KAAO,MAAA,GAAU,CAAC,KAAK,CAAA,CAAgB,MAAA,CAAO,MAAA,CAAO,KAAA,CAAM,CAAC,CAAA,CAAE,GAAA,CAAIA,eAAa,CAAA,CAAE,GAAA,CAAI,eAAe,CAAC,CAAA;EAAA;EAAA,UAErG,EAAA,KAAO,OAAOG,aAAA,CAAY,MAAA,CAAO,CAAC,CAAA,EAAG,MAAA,CAAO,KAAA,CAAM,CAAC,CAAC,CAAA;EAAA;EAAA,YAEpD,EAAA,KAAO,KAAA,GAAQ,eAAA,CAAgBA,aAAA,CAAY,MAAA,CAAO,CAAC,CAAA,EAAG,MAAA,CAAO,KAAA,CAAM,CAAC,CAAC,CAAC,CAAA;EAAA;EAAA,cAEtE,EAAA,KAAO,KAAA,GAAQC,cAAA,CAAa,MAAA,CAAO,CAAC,CAAC,CAAA;EAAA;EAAA,gBAErC,EAAA,KAAO,SAAS,eAAA,CAAgBA,cAAA,CAAa,OAAO,CAAC,CAAC,CAAC,CAAA,GACvD;EAAA;EAAA;EAAA;EAAA;EAAA;EAAA;EAAA,GAAA;EACJ,EAAA,OAAO,SAAA;EACX;EAGA,SAASF,qBAAA,CAAoB,QAAA,EAAkB,KAAA,EAAY,EAAA,EAAY;EACnE,EAAA,QAAQ,QAAA;EAAU,IAClB,KAAK,OAAA;EAED,MAAA,OAAO,CAAC,CAAA,YAAA,EAAe,EAAE,CAAA,CAAA,EAAI,KAAK,CAAA;EAAA,IACtC,KAAK,KAAA;EAED,MAAA,OAAO,CAAC,CAAA,UAAA,EAAa,EAAE,CAAA,CAAA,EAAI,KAAK,CAAA;EAAA,IACpC;EAEI,MAAA,OAAO,CAAC,CAAA,OAAA,EAAU,EAAE,CAAA,CAAA,EAAI,UAAU,KAAK,CAAA;EAAA;EAE/C;EAGA,SAAS,qBAAqB,OAAA,EAA4B;EACtD,EAAA,OAAQ,CAAC,KAAK,CAAA,CAAgB,OAAO,OAAA,CAAQ,GAAA,CAAIF,eAAa,CAAC,CAAA;EACnE;EAGA,SAASG,aAAA,CAAY,UAAkB,MAAA,EAAoB;EACvD,EAAA,IAAI,MAAA,CAAO,WAAW,CAAA,EAAG;EAAE,IAAA,OAAO,KAAA;EAAA,EAAA;EAClC,EAAA,QAAQ,QAAA;EAAU,IAClB,KAAK,OAAA;EACD,MAAA,OAAO,CAAC,CAAA,cAAA,CAAA,EAAkB,CAAC,SAAA,EAAW,MAAM,CAAC,CAAA;EAAA,IACjD,KAAK,KAAA;EACD,MAAA,OAAO,CAAC,CAAA,YAAA,CAAA,EAAgB,CAAC,SAAA,EAAW,MAAM,CAAC,CAAA;EAAA,IAC/C;EACI,MAAA,IAAI,MAAA,CAAO,MAAA,GAAS,GAAA,IAAO,CAAC,MAAA,CAAO,IAAA,CAAK,CAAA,CAAA,KAAK,OAAO,CAAA,KAAM,OAAO,MAAA,CAAO,CAAC,CAAC,CAAA,EAAG;EACzE,QAAA,OAAO,CAAC,mBAAmB,QAAA,EAAU,CAAC,WAAW,MAAA,CAAO,IAAA,CAAK,OAAO,CAAC,CAAC,CAAA;EAAA,MAAA,CAC1E,MAAO;EACH,QAAA,OAAO,CAAC,iBAAA,EAAmB,QAAA,EAAU,CAAC,SAAA,EAAW,MAAM,CAAC,CAAA;EAAA,MAAA;EAC5D;EAER;EAEA,SAASC,eAAa,QAAA,EAAkB;EACpC,EAAA,QAAQ,QAAA;EAAU,IAClB,KAAK,OAAA;EACD,MAAA,OAAO,IAAA;EAAA,IACX,KAAK,KAAA;EACD,MAAA,OAAO,CAAC,CAAA,aAAA,CAAe,CAAA;EAAA,IAC3B;EACI,MAAA,OAAO,CAAC,cAAc,QAAQ,CAAA;EAAA;EAEtC;EAEA,SAAS,gBAAgB,MAAA,EAAiB;EACtC,EAAA,OAAO,CAAC,KAAK,MAAM,CAAA;EACvB;;ECzXA,SAAwB,cAAc,MAAA,EAAsC;EACxE,EAAA,OAAO,cAAA,CAAe,MAAA,EAAQ,EAAE,CAAA;EACpC;EAkDA,SAAS,cAAA,CAAe,QAA6B,aAAA,EAAuC;EACxF,EAAA,IAAI,kBAAA,CAAmB,MAAM,CAAA,EAAG;EAAE,IAAA,OAAO,MAAA;EAAA,EAAQ;EAEjD,EAAA,IAAI,CAAC,QAAQ,OAAO,IAAA;EACpB,EAAA,MAAM,EAAA,GAAK,OAAO,CAAC,CAAA;EACnB,EAAA,IAAI,MAAA,CAAO,MAAA,IAAU,CAAA,EAAG,OAAQ,EAAA,KAAO,KAAA;EAEvC,EAAA,IAAI,SAAA;EAEJ,EAAA,IACI,EAAA,KAAO,IAAA,IACP,EAAA,KAAO,IAAA,IACP,EAAA,KAAO,GAAA,IACP,EAAA,KAAO,GAAA,IACP,EAAA,KAAO,IAAA,IACP,EAAA,KAAO,IAAA,EACT;EACE,IAAA,MAAM,GAAG,QAAA,EAAU,KAAK,CAAA,GAAI,MAAA;EAE5B,IAAA,SAAA,GAAY,mBAAA,CAAoB,QAAA,EAAU,KAAA,EAAO,EAAA,EAAI,aAAa,CAAA;EAAA,EACtE,CAAA,MAAA,IAAW,OAAO,KAAA,EAAO;EACrB,IAAA,MAAM,WAAW,MAAA,CAAO,KAAA,CAAM,CAAC,CAAA,CAAE,IAAI,CAAA,CAAA,KAAK;EAEtC,MAAA,MAAM,QAA6B,EAAC;EAEpC,MAAA,MAAM,KAAA,GAAQ,cAAA,CAAe,CAAA,EAAG,KAAK,CAAA;EAErC,MAAA,MAAM,UAAA,GAAa,kBAAkB,KAAK,CAAA;EAC1C,MAAA,OAAO,eAAe,IAAA,GAAO,KAAA,GAAQ,CAAC,MAAA,EAAQ,UAAA,EAAY,OAAO,KAAK,CAAA;EAAA,IAC1E,CAAC,CAAA;EACD,IAAA,OAAO,CAAC,KAAK,CAAA,CAAE,MAAA,CAAO,QAAQ,CAAA;EAAA,EAClC,CAAA,MAAA,IAAW,OAAO,KAAA,EAAO;EAErB,IAAA,MAAM,QAAA,GAAmB,MAAA,CAAQ,KAAA,CAAM,CAAC,CAAA,CAAE,IAAI,CAAA,CAAA,KAAK,cAAA,CAAe,CAAA,EAAG,aAAa,CAAC,CAAA;EAEnF,IAAA,OAAO,QAAA,CAAS,MAAA,GAAS,CAAA,GAAI,CAAC,KAAK,CAAA,CAAE,MAAA,CAAO,QAAQ,CAAA,GAAI,EAAC,CAAE,MAAA,CAAO,GAAG,QAAQ,CAAA;EAAA,EACjF,CAAA,MAAA,IAAW,OAAO,MAAA,EAAQ;EACtB,IAAA,OAAO,CAAC,GAAA,EAAK,cAAA,CAAe,CAAC,KAAK,CAAA,CAAE,MAAA,CAAQ,MAAA,CAAQ,KAAA,CAAM,CAAC,CAAC,CAAA,EAAG,EAAE,CAAC,CAAA;EAAA,EACtE,CAAA,MAAA,IAAW,OAAO,IAAA,EAAM;EAEpB,IAAA,SAAA,GAAY,YAAa,MAAA,CAAO,CAAC,GAAI,MAAA,CAAO,KAAA,CAAM,CAAC,CAAC,CAAA;EAAA,EACxD,CAAA,MAAA,IAAW,OAAO,KAAA,EAAO;EAErB,IAAA,SAAA,GAAY,WAAA,CAAa,OAAO,CAAC,CAAA,EAAI,OAAO,KAAA,CAAM,CAAC,GAAG,IAAI,CAAA;EAAA,EAC9D,CAAA,MAAA,IAAW,OAAO,KAAA,EAAO;EAErB,IAAA,SAAA,GAAY,YAAA,CAAc,MAAA,CAAO,CAAC,CAAE,CAAA;EAAA,EACxC,CAAA,MAAA,IAAW,OAAO,MAAA,EAAQ;EAEtB,IAAA,SAAA,GAAY,CAAC,GAAA,EAAK,YAAA,CAAc,MAAA,CAAO,CAAC,CAAE,CAAC,CAAA;EAAA,EAC/C,CAAA,MAAO;EACH,IAAA,SAAA,GAAY,IAAA;EAAA,EAChB;EAEA,EAAA,OAAO,SAAA;EACX;EAUA,SAAS,kBAAkB,aAAA,EAAgD;EACvE,EAAA,MAAM,aAAwB,EAAC;EAC/B,EAAA,KAAA,MAAW,YAAY,aAAA,EAAe;EAClC,IAAA,MAAM,GAAA,GAAM,aAAa,KAAA,GAAQ,CAAC,IAAI,CAAA,GAAI,CAAC,OAAO,QAAQ,CAAA;EAC1D,IAAA,UAAA,CAAW,IAAA,CAAK,CAAC,IAAA,EAAM,CAAC,QAAA,EAAU,GAAG,CAAA,EAAG,aAAA,CAAc,QAAQ,CAAC,CAAC,CAAA;EAAA,EACpE;EACA,EAAA,IAAI,UAAA,CAAW,MAAA,KAAW,CAAA,EAAG,OAAO,IAAA;EACpC,EAAA,IAAI,UAAA,CAAW,MAAA,KAAW,CAAA,EAAG,OAAO,WAAW,CAAC,CAAA;EAChD,EAAA,OAAQ,CAAC,KAAK,CAAA,CAAgB,MAAA,CAAO,UAAU,CAAA;EACnD;EAGA,SAAS,mBAAA,CAAoB,QAAA,EAAkB,KAAA,EAAY,EAAA,EAAY,aAAA,EAA+C;EAClH,EAAA,IAAI,GAAA;EACJ,EAAA,IAAI,aAAa,OAAA,EAAS;EACtB,IAAA,OAAO,CAAC,EAAA,EAAI,CAAC,eAAe,GAAG,KAAK,CAAA;EAAA,EACxC,CAAA,MAAA,IAAW,aAAa,KAAA,EAAO;EAC3B,IAAA,GAAA,GAAM,CAAC,IAAI,CAAA;EAAA,EACf,CAAA,MAAO;EACH,IAAA,GAAA,GAAM,CAAC,OAAO,QAAQ,CAAA;EAAA,EAC1B;EAEA,EAAA,IAAI,aAAA,IAAiB,UAAU,IAAA,EAAM;EACjC,IAAA,MAAM,OAAO,OAAO,KAAA;EACpB,IAAA,aAAA,CAAc,QAAQ,CAAA,GAAI,IAAA;EAAA,EAC9B;EAEA,EAAA,IAAI,EAAA,KAAO,IAAA,IAAQ,QAAA,KAAa,KAAA,IAAS,UAAU,IAAA,EAAM;EACrD,IAAA,OAAO;EAAA,MACH,KAAA;EAAA,MACA,CAAC,OAAO,QAAQ,CAAA;EAAA;EAAA,MAChB,CAAC,IAAA,EAAM,GAAA,EAAK,IAAI;EAAA,KACpB;EAAA,EACJ,WAAW,EAAA,KAAO,IAAA,IAAQ,QAAA,KAAa,KAAA,IAAS,UAAU,IAAA,EAAM;EAC5D,IAAA,OAAO;EAAA,MACH,KAAA;EAAA,MACA,CAAC,GAAA,EAAK,CAAC,KAAA,EAAO,QAAQ,CAAC,CAAA;EAAA;EAAA,MACvB,CAAC,IAAA,EAAM,GAAA,EAAK,IAAI;EAAA,KACpB;EAAA,EACJ;EAEA,EAAA,OAAO,CAAC,EAAA,EAAI,GAAA,EAAK,KAAK,CAAA;EAC1B;EAEA,SAAS,WAAA,CAAY,QAAA,EAAkB,MAAA,EAAwB,MAAA,GAAkB,KAAA,EAAO;EACpF,EAAA,IAAI,MAAA,CAAO,MAAA,KAAW,CAAA,EAAG,OAAO,MAAA;EAEhC,EAAA,IAAI,GAAA;EACJ,EAAA,IAAI,aAAa,OAAA,EAAS;EACtB,IAAA,GAAA,GAAM,CAAC,eAAe,CAAA;EAAA,EAC1B,CAAA,MAAA,IAAW,aAAa,KAAA,EAAO;EAC3B,IAAA,GAAA,GAAM,CAAC,IAAI,CAAA;EAAA,EACf,CAAA,MAAO;EACH,IAAA,GAAA,GAAM,CAAC,OAAO,QAAQ,CAAA;EAAA,EAC1B;EAMA,EAAA,IAAI,YAAA,GAAe,IAAA;EACnB,EAAA,MAAM,IAAA,GAAO,OAAO,MAAA,CAAO,CAAC,CAAA;EAC5B,EAAA,KAAA,MAAW,SAAS,MAAA,EAAQ;EACxB,IAAA,IAAI,OAAO,UAAU,IAAA,EAAM;EACvB,MAAA,YAAA,GAAe,KAAA;EACf,MAAA;EAAA,IACJ;EAAA,EACJ;EAEA,EAAA,IAAI,YAAA,KAAiB,IAAA,KAAS,QAAA,IAAY,IAAA,KAAS,QAAA,CAAA,EAAW;EAE1D,IAAA,MAAM,YAAA,GAAe,MAAA,CAAO,IAAA,EAAK,CAAE,OAAO,CAAC,CAAA,EAAG,CAAA,KAAM,CAAA,KAAM,CAAA,IAAK,MAAA,CAAO,CAAA,GAAI,CAAC,MAAM,CAAC,CAAA;EAClF,IAAA,OAAO,CAAC,OAAA,EAAS,GAAA,EAAK,YAAA,EAAc,CAAC,QAAQ,MAAM,CAAA;EAAA,EACvD;EAEA,EAAA,OAAO,CAAC,MAAA,GAAS,KAAA,GAAQ,KAAK,CAAA,CAAE,MAAA;EAAA;EAAA,IAE5B,MAAA,CAAO,IAAI,CAAA,CAAA,KAAK,CAAC,SAAS,IAAA,GAAO,IAAA,EAAM,GAAA,EAAK,CAAC,CAAC;EAAA,GAClD;EACJ;EAEA,SAAS,aAAa,QAAA,EAAkB;EACpC,EAAA,IAAI,aAAa,OAAA,EAAS;EACtB,IAAA,OAAO,IAAA;EAAA,EACX,CAAA,MAAA,IAAW,aAAa,KAAA,EAAO;EAC3B,IAAA,OAAO,CAAC,IAAA,EAAM,CAAC,IAAI,GAAG,IAAI,CAAA;EAAA,EAC9B,CAAA,MAAO;EACH,IAAA,OAAO,CAAC,OAAO,QAAQ,CAAA;EAAA,EAC3B;EACJ;;EC/MA,6BAAA,CAAyB,KAAA,EAA+C;EACpE,EAAA,MAAM,YAAY,EAAC;EAEnB,EAAA,SAAA,CAAU,KAAA,EAAO,CAAC,KAAA,KAAU;EACxB,IAAA,IAAI,MAAM,MAAA,EAAQ;EACd,MAAA,KAAA,CAAM,MAAA,GAAS,aAAA,CAAc,KAAA,CAAM,MAAM,CAAA;EAAA,IAC7C;EAAA,EACJ,CAAC,CAAA;EAED,EAAA,YAAA,CAAa,KAAA,EAAO,EAAC,KAAA,EAAO,IAAA,EAAM,MAAA,EAAQ,IAAA,EAAI,EAAG,CAAC,EAAC,IAAA,EAAM,KAAA,EAAO,SAAA,EAAW,KAAG,KAAM;EAChF,IAAA,IAAI,YAAA,CAAa,KAAK,CAAA,EAAG;EACzB,IAAA,IAAI,OAAO,KAAA,KAAU,QAAA,IAAY,CAAC,KAAA,CAAM,OAAA,CAAQ,KAAK,CAAA,EAAG;EACpD,MAAA,GAAA,CAAI,eAAA,CAAgB,KAAA,EAAyC,SAAS,CAAC,CAAA;EACvE,MAAA,SAAA,CAAU,IAAA,CAAK,IAAA,CAAK,IAAA,CAAK,GAAG,CAAC,CAAA;EAAA,IACjC,CAAA,MAAA,IAAW,SAAA,CAAU,MAAA,IAAU,OAAO,UAAU,QAAA,EAAU;EACtD,MAAA,GAAA,CAAI,kBAAA,CAAmB,KAAK,CAAC,CAAA;EAAA,IACjC;EAAA,EACJ,CAAC,CAAA;EAED,EAAA,OAAO,KAAA;EACX;;ECdA,gBAAA,CAAyB,KAAA,EAA8D;EACnF,EAAA,IAAI,QAAA,GAAW,KAAA;EAEf,EAAA,IAAI,KAAA,CAAM,YAAY,CAAA,EAAG;EAErB,IAAA,KAAA,GAAQ,YAAY,KAAK,CAAA;EACzB,IAAA,QAAA,GAAW,IAAA;EAAA,EACf;EAEA,EAAA,IAAI,KAAA,CAAM,YAAY,CAAA,EAAG;EACrB,IAAA,KAAA,GAAQ,qBAAqB,KAAK,CAAA;EAClC,IAAA,QAAA,GAAW,IAAA;EAAA,EACf;EAEA,EAAA,IAAI,CAAC,QAAA,EAAU;EACX,IAAA,MAAM,IAAI,KAAA,CAAM,CAAA,oBAAA,EAAuB,KAAA,CAAM,OAAO,CAAA,CAAE,CAAA;EAAA,EAC1D;EAEA,EAAA,OAAO,KAAA;EACX;;ECnCA,MAAM,aAAA,GAAgB,kBAAA;EAEtB,kBAAA,CAAyB,KAAA,EAA+C;EACpE,EAAA,MAAM,WAAqB,EAAC;EAC5B,EAAA,MAAM,YAAsB,EAAC;EAC7B,EAAA,MAAM,yBAAmC,EAAC;EAE1C,EAAA,KAAA,MAAW,EAAA,IAAM,MAAM,OAAA,EAAS;EAC5B,IAAA,MAAM,MAAA,GAAS,KAAA,CAAM,OAAA,CAAQ,EAAE,CAAA;EAE/B,IAAA,IAAI,OAAO,IAAA,KAAS,QAAA;EAChB,MAAA;EAEJ,IAAA,MAAM,KAAA,GAAQ,aAAA,CAAc,IAAA,CAAK,MAAA,CAAO,GAAG,CAAA;EAC3C,IAAA,IAAI,CAAC,KAAA;EACD,MAAA;EAEJ,IAAA,QAAA,CAAS,KAAK,EAAE,CAAA;EAChB,IAAA,SAAA,CAAU,IAAA,CAAK,KAAA,CAAM,CAAC,CAAC,CAAA;EAAA,EAC3B;EAEA,EAAA,IAAI,SAAS,MAAA,GAAS,CAAA;EAClB,IAAA,OAAO,KAAA;EAEX,EAAA,QAAA,CAAS,OAAA,CAAQ,CAAC,EAAA,KAAO;EACrB,IAAA,OAAO,KAAA,CAAM,QAAQ,EAAE,CAAA;EAAA,EAC3B,CAAC,CAAA;EAED,EAAA,MAAM,WAAA,GAAc,SAAA,CAAU,IAAA,CAAK,GAAG,CAAA;EAEtC,EAAA,KAAA,CAAM,OAAA,CAAQ,WAAW,CAAA,GAAI;EAAA,IACzB,MAAA,EAAQ,QAAA;EAAA,IACR,KAAA,EAAO,YAAY,WAAW,CAAA;EAAA,GAClC;EAEA,EAAA,KAAA,CAAM,MAAA,CAAO,OAAA,CAAQ,CAAC,KAAA,KAAU;EAC5B,IAAA,IAAI,QAAA,CAAS,QAAA,CAAS,KAAA,CAAM,MAAM,CAAA,EAAG;EACjC,MAAA,KAAA,CAAM,MAAA,GAAS,WAAA;EAEf,MAAA,IAAI,kBAAkB,KAAA,EAAO;EACzB,QAAA,IAAI,sBAAA,CAAuB,QAAA,CAAS,KAAA,CAAM,cAAc,CAAC,CAAA,EAAG;EACxD,UAAA,MAAM,IAAI,MAAM,gCAAgC,CAAA;EAAA,QACpD,CAAA,MAAO;EACH,UAAA,sBAAA,CAAuB,IAAA,CAAK,KAAA,CAAM,cAAc,CAAC,CAAA;EAAA,QACrD;EAAA,MACJ;EAAA,IACJ;EAAA,EACJ,CAAC,CAAA;EAED,EAAA,OAAO,KAAA;EACX;;ACpDA,sBAAe,CAAC,MAAA,EAAQ,QAAA,EAAU,gBAAgB,SAAA,EAAW,SAAA,EAAW,UAAU,QAAQ,CAAA;;ECI1F,SAAS,KAAA,CAAM,OAA2B,MAAA,EAAgD;EACtF,EAAA,MAAM,SAAS,EAAC;EAEhB,EAAA,MAAM,QAAA,GAAW,KAAA;EACjB,EAAA,MAAM,SAAA,GAAY,MAAA;EAClB,EAAA,MAAM,SAAA,GAAY,MAAA;EAElB,EAAA,KAAA,MAAW,KAAK,QAAA,EAAU;EACtB,IAAA,IAAI,MAAM,KAAA,EAAO;EACb,MAAA,SAAA,CAAU,CAAC,CAAA,GAAI,QAAA,CAAS,CAAC,CAAA;EAAA,IAC7B;EAAA,EACJ;EAEA,EAAA,aAAA,CAAc,OAAA,CAAQ,CAAC,CAAA,KAAM;EACzB,IAAA,IAAI,KAAK,SAAA,EAAW;EAChB,MAAA,SAAA,CAAU,CAAC,CAAA,GAAI,SAAA,CAAU,CAAC,CAAA;EAAA,IAC9B;EAAA,EACJ,CAAC,CAAA;EAED,EAAA,OAAO,MAAA;EACX;EAeA,SAAwB,YAAY,MAAA,EAA8D;EAC9F,EAAA,MAAA,GAAS,OAAO,KAAA,EAAM;EAGtB,EAAA,MAAM,GAAA,mBAA0C,MAAA,CAAO,MAAA,CAAO,IAAI,CAAA;EAClE,EAAA,KAAA,MAAW,SAAS,MAAA,EAAQ;EACxB,IAAA,GAAA,CAAI,KAAA,CAAM,EAAE,CAAA,GAAI,KAAA;EAAA,EACpB;EAEA,EAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,MAAA,CAAO,QAAQ,CAAA,EAAA,EAAK;EACpC,IAAA,MAAM,KAAA,GAAQ,OAAO,CAAC,CAAA;EACtB,IAAA,IAAI,KAAA,IAAS,SAAS,KAAA,EAAO;EACzB,MAAA,MAAM,MAAA,GAAS,GAAA,CAAK,KAAA,CAA6C,GAAG,CAAA;EACpE,MAAA,IAAI,QAAQ,MAAA,CAAO,CAAC,CAAA,GAAI,KAAA,CAAM,OAAO,MAAM,CAAA;EAAA,IAC/C;EAAA,EACJ;EAEA,EAAA,OAAO,MAAA;EACX;;ECpDA,SAAS,SAAA,CAAU,GAAa,CAAA,EAAsB;EAClD,EAAA,IAAI,KAAA,CAAM,OAAA,CAAQ,CAAC,CAAA,EAAG;EAClB,IAAA,IAAI,CAAC,MAAM,OAAA,CAAQ,CAAC,KAAK,CAAA,CAAE,MAAA,KAAW,CAAA,CAAE,MAAA,EAAQ,OAAO,KAAA;EACvD,IAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,CAAA,CAAE,QAAQ,CAAA,EAAA,EAAK;EAC/B,MAAA,IAAI,CAAC,UAAU,CAAA,CAAE,CAAC,GAAG,CAAA,CAAE,CAAC,CAAC,CAAA,EAAG,OAAO,KAAA;EAAA,IACvC;EACA,IAAA,OAAO,IAAA;EAAA,EACX;EACA,EAAA,IAAI,OAAO,CAAA,KAAM,QAAA,IAAY,CAAA,KAAM,IAAA,IAAQ,MAAM,IAAA,EAAM;EACnD,IAAA,IAAI,EAAE,OAAO,CAAA,KAAM,QAAA,CAAA,EAAW,OAAO,KAAA;EACrC,IAAA,MAAM,IAAA,GAAO,CAAA;EACb,IAAA,MAAM,IAAA,GAAO,CAAA;EACb,IAAA,MAAM,IAAA,GAAO,MAAA,CAAO,IAAA,CAAK,IAAI,CAAA;EAC7B,IAAA,IAAI,KAAK,MAAA,KAAW,MAAA,CAAO,KAAK,IAAI,CAAA,CAAE,QAAQ,OAAO,KAAA;EACrD,IAAA,KAAA,MAAW,OAAO,IAAA,EAAM;EACpB,MAAA,IAAI,CAAC,UAAU,IAAA,CAAK,GAAG,GAAG,IAAA,CAAK,GAAG,CAAC,CAAA,EAAG,OAAO,KAAA;EAAA,IACjD;EACA,IAAA,OAAO,IAAA;EAAA,EACX;EACA,EAAA,OAAO,CAAA,KAAM,CAAA;EACjB;;ECZO,MAAM,UAAA,GAAa;EAAA;EAAA;EAAA;EAAA,EAKtB,QAAA,EAAU,UAAA;EAAA;EAAA;EAAA;EAAA,EAKV,QAAA,EAAU,UAAA;EAAA;EAAA;EAAA;EAAA,EAKV,WAAA,EAAa,aAAA;EAAA;EAAA;EAAA;EAAA,EAKb,gBAAA,EAAkB,kBAAA;EAAA;EAAA;EAAA;EAAA,EAKlB,iBAAA,EAAmB,mBAAA;EAAA;EAAA;EAAA;EAAA,EAKnB,OAAA,EAAS,SAAA;EAAA;EAAA;EAAA;EAAA,EAKT,SAAA,EAAW,WAAA;EAAA;EAAA;EAAA;EAAA,EAKX,SAAA,EAAW,WAAA;EAAA;EAAA;EAAA;EAAA,EAKX,YAAA,EAAc,cAAA;EAAA;EAAA;EAAA;EAAA,EAKd,oBAAA,EAAsB,sBAAA;EAAA;EAAA;EAAA;EAAA,EAKtB,iBAAA,EAAmB,mBAAA;EAAA;EAAA;EAAA;EAAA,EAKnB,gBAAA,EAAkB,kBAAA;EAAA;EAAA;EAAA;EAAA,EAKlB,SAAA,EAAW,WAAA;EAAA;EAAA;EAAA;EAAA,EAKX,OAAA,EAAS,SAAA;EAAA;EAAA;EAAA;EAAA,EAKT,UAAA,EAAY,YAAA;EAAA;EAAA;EAAA;EAAA,EAKZ,QAAA,EAAU,UAAA;EAAA;EAAA;EAAA;EAAA,EAKV,SAAA,EAAW,WAAA;EAAA;EAAA;EAAA;EAAA,EAKX,SAAA,EAAW,WAAA;EAAA;EAAA;EAAA;EAAA,EAKX,aAAA,EAAe,eAAA;EAAA;EAAA;EAAA;EAAA,EAKf,QAAA,EAAU,UAAA;EAAA;EAAA;EAAA;EAAA,EAKV,UAAA,EAAY,YAAA;EAAA;EAAA;EAAA;EAAA,EAKZ,MAAA,EAAQ,QAAA;EAAA;EAAA;EAAA;EAAA,EAKR,OAAA,EAAS,SAAA;EAAA;EAAA;EAAA;EAAA,EAKT,OAAA,EAAS,SAAA;EAAA;EAAA;EAAA;EAAA,EAKT,SAAA,EAAW,WAAA;EAAA;EAAA;EAAA;EAAA,EAKX,SAAA,EAAW,WAAA;EAAA;EAAA;EAAA;EAAA,EAKX,aAAA,EAAe,eAAA;EAAA;EAAA;EAAA;EAAA,EAKf,SAAA,EAAW,WAAA;EAAA;EAAA;EAAA;EAAA,EAKX,YAAA,EAAc,cAAA;EAAA;EAAA;EAAA;EAAA,EAKd,YAAA,EAAc,cAAA;EAAA;EAAA;EAAA;EAAA,EAKd,UAAA,EAAY,YAAA;EAAA;EAAA;EAAA;EAAA,EAKZ,aAAA,EAAe;EACnB,CAAA;EAEA,SAAS,SAAA,CAAU,QAAA,EAAkB,KAAA,EAAgB,QAAA,EAA0B;EAC3E,EAAA,QAAA,CAAS,IAAA,CAAK,EAAC,OAAA,EAAS,UAAA,CAAW,SAAA,EAAW,IAAA,EAAM,CAAC,QAAA,EAAU,KAAA,CAAM,QAAQ,CAAC,CAAA,EAAE,CAAA;EACpF;EAEA,SAAS,YAAA,CAAa,QAAA,EAAkB,QAAA,EAA0B,cAAA,EAE/D;EACC,EAAA,QAAA,CAAS,IAAA,CAAK,EAAC,OAAA,EAAS,UAAA,CAAW,cAAc,IAAA,EAAM,CAAC,QAAQ,CAAA,EAAE,CAAA;EAClE,EAAA,cAAA,CAAe,QAAQ,CAAA,GAAI,IAAA;EAC/B;EAEA,SAAS,YAAA,CAAa,QAAA,EAAkB,KAAA,EAAgB,QAAA,EAA0B,cAAA,EAE/E;EACC,EAAA,YAAA,CAAa,QAAA,EAAU,UAAU,cAAc,CAAA;EAC/C,EAAA,SAAA,CAAU,QAAA,EAAU,OAAO,QAAQ,CAAA;EACvC;EAEA,SAAS,gBAAA,CAAiB,MAAA,EAAiB,KAAA,EAAgB,QAAA,EAAkB;EACzE,EAAA,IAAI,IAAA;EACJ,EAAA,KAAK,IAAA,IAAQ,MAAA,CAAO,QAAQ,CAAA,EAAG;EAC3B,IAAA,IAAI,CAAC,MAAA,CAAO,MAAA,CAAO,OAAO,QAAQ,CAAA,EAAG,IAAI,CAAA,EAAG;EAC5C,IAAA,IAAI,IAAA,KAAS,MAAA,IAAU,CAACC,SAAA,CAAQ,OAAO,QAAQ,CAAA,CAAE,IAAI,CAAA,EAAG,KAAA,CAAM,QAAQ,CAAA,CAAE,IAAI,CAAC,CAAA,EAAG;EAC5E,MAAA,OAAO,KAAA;EAAA,IACX;EAAA,EACJ;EACA,EAAA,KAAK,IAAA,IAAQ,KAAA,CAAM,QAAQ,CAAA,EAAG;EAC1B,IAAA,IAAI,CAAC,MAAA,CAAO,MAAA,CAAO,MAAM,QAAQ,CAAA,EAAG,IAAI,CAAA,EAAG;EAC3C,IAAA,IAAI,IAAA,KAAS,MAAA,IAAU,CAACA,SAAA,CAAQ,OAAO,QAAQ,CAAA,CAAE,IAAI,CAAA,EAAG,KAAA,CAAM,QAAQ,CAAA,CAAE,IAAI,CAAC,CAAA,EAAG;EAC5E,MAAA,OAAO,KAAA;EAAA,IACX;EAAA,EACJ;EACA,EAAA,OAAO,IAAA;EACX;EAEA,SAAS,WAAA,CAAY,MAAA,EAAiB,KAAA,EAAgB,QAAA,EAA0B,cAAA,EAAuC;EACnH,EAAA,MAAA,GAAS,UAAU,EAAC;EACpB,EAAA,KAAA,GAAQ,SAAS,EAAC;EAElB,EAAA,IAAI,QAAA;EAGJ,EAAA,KAAK,YAAY,MAAA,EAAQ;EACrB,IAAA,IAAI,CAAC,MAAA,CAAO,MAAA,CAAO,MAAA,EAAQ,QAAQ,CAAA,EAAG;EACtC,IAAA,IAAI,CAAC,MAAA,CAAO,MAAA,CAAO,KAAA,EAAO,QAAQ,CAAA,EAAG;EACjC,MAAA,YAAA,CAAa,QAAA,EAAU,UAAU,cAAc,CAAA;EAAA,IACnD;EAAA,EACJ;EAGA,EAAA,KAAK,YAAY,KAAA,EAAO;EACpB,IAAA,IAAI,CAAC,MAAA,CAAO,MAAA,CAAO,KAAA,EAAO,QAAQ,CAAA,EAAG;EACrC,IAAA,MAAM,MAAA,GAAS,MAAM,QAAQ,CAAA;EAC7B,IAAA,IAAI,CAAC,MAAA,CAAO,MAAA,CAAO,MAAA,EAAQ,QAAQ,CAAA,EAAG;EAClC,MAAA,SAAA,CAAU,QAAA,EAAU,OAAO,QAAQ,CAAA;EAAA,IACvC,WAAW,CAACA,SAAA,CAAQ,OAAO,QAAQ,CAAA,EAAG,MAAM,CAAA,EAAG;EAC3C,MAAA,IAAI,MAAA,CAAO,QAAQ,CAAA,CAAE,IAAA,KAAS,SAAA,IAAa,MAAA,CAAO,IAAA,KAAS,SAAA,IAAa,gBAAA,CAAiB,MAAA,EAAQ,KAAA,EAAO,QAAQ,CAAA,EAAG;EAC/G,QAAA,QAAA,CAAS,IAAA,CAAK,EAAC,OAAA,EAAS,UAAA,CAAW,oBAAA,EAAsB,IAAA,EAAM,CAAC,QAAA,EAAU,MAAA,CAAO,IAAI,CAAA,EAAE,CAAA;EAAA,MAC3F,CAAA,MAAO;EAEH,QAAA,YAAA,CAAa,QAAA,EAAU,KAAA,EAAO,QAAA,EAAU,cAAc,CAAA;EAAA,MAC1D;EAAA,IACJ;EAAA,EACJ;EACJ;EAIA,SAAS,yBACL,MAAA,EACA,KAAA,EACA,QAAA,EACA,OAAA,EACA,OACA,OAAA,EACF;EACE,EAAA,MAAA,GAAS,UAAU,EAAC;EACpB,EAAA,KAAA,GAAQ,SAAS,EAAC;EAElB,EAAA,IAAI,IAAA;EAEJ,EAAA,KAAK,QAAQ,MAAA,EAAQ;EACjB,IAAA,IAAI,CAAC,MAAA,CAAO,MAAA,CAAO,MAAA,EAAQ,IAAI,CAAA,EAAG;EAClC,IAAA,IAAI,CAACA,UAAQ,MAAA,CAAO,IAAI,GAAG,KAAA,CAAM,IAAI,CAAC,CAAA,EAAG;EACrC,MAAA,QAAA,CAAS,IAAA,CAAK,EAAC,OAAA,EAAS,IAAA,EAAM,CAAC,OAAA,EAAS,IAAA,EAAM,KAAA,CAAM,IAAI,CAAA,EAAG,KAAK,CAAA,EAAE,CAAA;EAAA,IACtE;EAAA,EACJ;EACA,EAAA,KAAK,QAAQ,KAAA,EAAO;EAChB,IAAA,IAAI,CAAC,MAAA,CAAO,MAAA,CAAO,KAAA,EAAO,IAAI,KAAK,MAAA,CAAO,MAAA,CAAO,MAAA,EAAQ,IAAI,CAAA,EAAG;EAChE,IAAA,IAAI,CAACA,UAAQ,MAAA,CAAO,IAAI,GAAG,KAAA,CAAM,IAAI,CAAC,CAAA,EAAG;EACrC,MAAA,QAAA,CAAS,IAAA,CAAK,EAAC,OAAA,EAAS,IAAA,EAAM,CAAC,OAAA,EAAS,IAAA,EAAM,KAAA,CAAM,IAAI,CAAA,EAAG,KAAK,CAAA,EAAE,CAAA;EAAA,IACtE;EAAA,EACJ;EACJ;EAEA,SAAS,QAAgC,IAAA,EAAiB;EACtD,EAAA,OAAO,IAAA,CAAK,EAAA;EAChB;EAEA,SAAS,SAAA,CAAkC,OAA2B,IAAA,EAA4B;EAC9F,EAAA,KAAA,CAAM,IAAA,CAAK,EAAE,CAAA,GAAI,IAAA;EACjB,EAAA,OAAO,KAAA;EACX;EAEA,SAAS,UAAA,CAAW,MAAA,EAAmC,KAAA,EAAkC,QAAA,EAA0B;EAC/G,EAAA,MAAA,GAAS,UAAU,EAAC;EACpB,EAAA,KAAA,GAAQ,SAAS,EAAC;EAGlB,EAAA,MAAM,WAAA,GAAc,MAAA,CAAO,GAAA,CAAI,OAAO,CAAA;EACtC,EAAA,MAAM,UAAA,GAAa,KAAA,CAAM,GAAA,CAAI,OAAO,CAAA;EAGpC,EAAA,MAAM,WAAA,GAAc,MAAA,CAAO,MAAA,CAAO,SAAA,EAAW,EAAE,CAAA;EAC/C,EAAA,MAAM,UAAA,GAAa,KAAA,CAAM,MAAA,CAAO,SAAA,EAAW,EAAE,CAAA;EAG7C,EAAA,MAAM,OAAA,GAAU,YAAY,KAAA,EAAM;EAIlC,EAAA,MAAM,KAAA,mBAAQ,MAAA,CAAO,MAAA,CAAO,IAAI,CAAA;EAEhC,EAAA,IAAI,CAAA;EACJ,EAAA,IAAI,CAAA;EACJ,EAAA,IAAI,OAAA;EACJ,EAAA,IAAI,WAAA;EACJ,EAAA,IAAI,UAAA;EACJ,EAAA,IAAI,mBAAA;EACJ,EAAA,IAAI,IAAA;EAGJ,EAAA,KAAK,IAAI,CAAA,EAAG,CAAA,GAAI,GAAG,CAAA,GAAI,WAAA,CAAY,QAAQ,CAAA,EAAA,EAAK;EAC5C,IAAA,OAAA,GAAU,YAAY,CAAC,CAAA;EACvB,IAAA,IAAI,CAAC,MAAA,CAAO,MAAA,CAAO,UAAA,EAAY,OAAO,CAAA,EAAG;EACrC,MAAA,QAAA,CAAS,IAAA,CAAK,EAAC,OAAA,EAAS,UAAA,CAAW,aAAa,IAAA,EAAM,CAAC,OAAO,CAAA,EAAE,CAAA;EAChE,MAAA,OAAA,CAAQ,OAAO,OAAA,CAAQ,OAAA,CAAQ,OAAA,EAAS,CAAC,GAAG,CAAC,CAAA;EAAA,IACjD,CAAA,MAAO;EAEH,MAAA,CAAA,EAAA;EAAA,IACJ;EAAA,EACJ;EAGA,EAAA,KAAK,IAAI,CAAA,EAAG,CAAA,GAAI,GAAG,CAAA,GAAI,UAAA,CAAW,QAAQ,CAAA,EAAA,EAAK;EAE3C,IAAA,OAAA,GAAU,UAAA,CAAW,UAAA,CAAW,MAAA,GAAS,CAAA,GAAI,CAAC,CAAA;EAE9C,IAAA,IAAI,QAAQ,OAAA,CAAQ,MAAA,GAAS,CAAA,GAAI,CAAC,MAAM,OAAA,EAAS;EAEjD,IAAA,IAAI,MAAA,CAAO,MAAA,CAAO,WAAA,EAAa,OAAO,CAAA,EAAG;EAErC,MAAA,QAAA,CAAS,IAAA,CAAK,EAAC,OAAA,EAAS,UAAA,CAAW,aAAa,IAAA,EAAM,CAAC,OAAO,CAAA,EAAE,CAAA;EAChE,MAAA,OAAA,CAAQ,MAAA,CAAO,QAAQ,WAAA,CAAY,OAAA,EAAS,QAAQ,MAAA,GAAS,CAAC,GAAG,CAAC,CAAA;EAAA,IACtE,CAAA,MAAO;EAEH,MAAA,CAAA,EAAA;EAAA,IACJ;EAGA,IAAA,mBAAA,GAAsB,OAAA,CAAQ,OAAA,CAAQ,MAAA,GAAS,CAAC,CAAA;EAChD,IAAA,QAAA,CAAS,IAAA,CAAK,EAAC,OAAA,EAAS,UAAA,CAAW,QAAA,EAAU,IAAA,EAAM,CAAC,UAAA,CAAW,OAAO,CAAA,EAAG,mBAAmB,CAAA,EAAE,CAAA;EAC9F,IAAA,OAAA,CAAQ,MAAA,CAAO,OAAA,CAAQ,MAAA,GAAS,CAAA,EAAG,GAAG,OAAO,CAAA;EAE7C,IAAA,KAAA,CAAM,OAAO,CAAA,GAAI,IAAA;EAAA,EACrB;EAGA,EAAA,KAAK,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,UAAA,CAAW,QAAQ,CAAA,EAAA,EAAK;EACpC,IAAA,OAAA,GAAU,WAAW,CAAC,CAAA;EAEtB,IAAA,WAAA,GAAc,YAAY,OAAO,CAAA;EAEjC,IAAA,UAAA,GAAa,WAAW,OAAO,CAAA;EAI/B,IAAA,IAAI,MAAM,OAAO,CAAA,IAAKA,SAAA,CAAQ,WAAA,EAAa,UAAU,CAAA,EAAG;EAIxD,IAAA,IAAI,CAACA,UAAQ,WAAA,CAAY,MAAA,EAAQ,WAAW,MAAM,CAAA,IAAK,CAACA,SAAA,CAAQ,WAAA,CAAY,cAAc,GAAG,UAAA,CAAW,cAAc,CAAC,CAAA,IAAK,CAACA,UAAQ,WAAA,CAAY,IAAA,EAAM,UAAA,CAAW,IAAI,CAAA,EAAG;EACrK,MAAA,QAAA,CAAS,IAAA,CAAK,EAAC,OAAA,EAAS,UAAA,CAAW,aAAa,IAAA,EAAM,CAAC,OAAO,CAAA,EAAE,CAAA;EAGhE,MAAA,mBAAA,GAAsB,OAAA,CAAQ,OAAA,CAAQ,WAAA,CAAY,OAAO,IAAI,CAAC,CAAA;EAC9D,MAAA,QAAA,CAAS,IAAA,CAAK,EAAC,OAAA,EAAS,UAAA,CAAW,QAAA,EAAU,MAAM,CAAC,UAAA,EAAY,mBAAmB,CAAA,EAAE,CAAA;EACrF,MAAA;EAAA,IACJ;EAGA,IAAA,wBAAA,CAAyB,WAAA,CAAY,QAAQ,UAAA,CAAW,MAAA,EAAQ,UAAU,OAAA,EAAS,IAAA,EAAM,WAAW,iBAAiB,CAAA;EACrH,IAAA,wBAAA,CAAyB,WAAA,CAAY,OAAO,UAAA,CAAW,KAAA,EAAO,UAAU,OAAA,EAAS,IAAA,EAAM,WAAW,gBAAgB,CAAA;EAClH,IAAA,IAAI,CAACA,SAAA,CAAQ,WAAA,CAAY,IAAA,EAAM,UAAA,CAAW,IAAI,CAAA,EAAG;EAC7C,MAAA,QAAA,CAAS,IAAA,CAAK,EAAC,OAAA,EAAS,UAAA,CAAW,OAAA,EAAS,IAAA,EAAM,CAAC,OAAA,EAAS,UAAA,CAAW,IAAI,CAAA,EAAE,CAAA;EAAA,IACjF;EACA,IAAA,IAAI,CAACA,SAAA,CAAQ,WAAA,CAAY,MAAA,EAAQ,UAAA,CAAW,MAAM,CAAA,EAAG;EACjD,MAAA,QAAA,CAAS,IAAA,CAAK,EAAC,OAAA,EAAS,UAAA,CAAW,SAAA,EAAW,IAAA,EAAM,CAAC,OAAA,EAAS,UAAA,CAAW,MAAM,CAAA,EAAE,CAAA;EAAA,IACrF;EACA,IAAA,IAAI,CAACA,SAAA,CAAQ,WAAA,CAAY,OAAA,EAAS,UAAA,CAAW,OAAO,CAAA,IAAK,CAACA,SAAA,CAAQ,WAAA,CAAY,OAAA,EAAS,UAAA,CAAW,OAAO,CAAA,EAAG;EACxG,MAAA,QAAA,CAAS,IAAA,CAAK,EAAC,OAAA,EAAS,UAAA,CAAW,iBAAA,EAAmB,IAAA,EAAM,CAAC,OAAA,EAAS,UAAA,CAAW,OAAA,EAAS,UAAA,CAAW,OAAO,GAAE,CAAA;EAAA,IAClH;EAGA,IAAA,KAAK,QAAQ,WAAA,EAAa;EACtB,MAAA,IAAI,CAAC,MAAA,CAAO,MAAA,CAAO,WAAA,EAAa,IAAI,CAAA,EAAG;EACvC,MAAA,IAAI,IAAA,KAAS,QAAA,IAAY,IAAA,KAAS,OAAA,IAAW,IAAA,KAAS,QAAA,IAClD,IAAA,KAAS,UAAA,IAAc,IAAA,KAAS,SAAA,IAAa,IAAA,KAAS,SAAA,IAAa,SAAS,MAAA,EAAQ;EACxF,MAAA,IAAI,IAAA,CAAK,OAAA,CAAQ,QAAQ,CAAA,KAAM,CAAA,EAAG;EAE9B,QAAA,wBAAA,CAAyB,WAAA,CAAY,IAAI,CAAA,EAAG,UAAA,CAAW,IAAI,CAAA,EAAG,QAAA,EAAU,OAAA,EAAS,IAAA,CAAK,KAAA,CAAM,CAAC,CAAA,EAAG,WAAW,gBAAgB,CAAA;EAAA,MAC/H,CAAA,MAAA,IAAW,CAACA,SAAA,CAAQ,WAAA,CAAY,IAAI,CAAA,EAAG,UAAA,CAAW,IAAI,CAAC,CAAA,EAAG;EACtD,QAAA,QAAA,CAAS,IAAA,CAAK,EAAC,OAAA,EAAS,UAAA,CAAW,gBAAA,EAAkB,IAAA,EAAM,CAAC,OAAA,EAAS,IAAA,EAAM,UAAA,CAAW,IAAI,CAAC,GAAE,CAAA;EAAA,MACjG;EAAA,IACJ;EACA,IAAA,KAAK,QAAQ,UAAA,EAAY;EACrB,MAAA,IAAI,CAAC,MAAA,CAAO,MAAA,CAAO,UAAA,EAAY,IAAI,KAAK,MAAA,CAAO,MAAA,CAAO,WAAA,EAAa,IAAI,CAAA,EAAG;EAC1E,MAAA,IAAI,IAAA,KAAS,QAAA,IAAY,IAAA,KAAS,OAAA,IAAW,IAAA,KAAS,QAAA,IAClD,IAAA,KAAS,UAAA,IAAc,IAAA,KAAS,SAAA,IAAa,IAAA,KAAS,SAAA,IAAa,SAAS,MAAA,EAAQ;EACxF,MAAA,IAAI,IAAA,CAAK,OAAA,CAAQ,QAAQ,CAAA,KAAM,CAAA,EAAG;EAE9B,QAAA,wBAAA,CAAyB,WAAA,CAAY,IAAI,CAAA,EAAG,UAAA,CAAW,IAAI,CAAA,EAAG,QAAA,EAAU,OAAA,EAAS,IAAA,CAAK,KAAA,CAAM,CAAC,CAAA,EAAG,WAAW,gBAAgB,CAAA;EAAA,MAC/H,CAAA,MAAA,IAAW,CAACA,SAAA,CAAQ,WAAA,CAAY,IAAI,CAAA,EAAG,UAAA,CAAW,IAAI,CAAC,CAAA,EAAG;EACtD,QAAA,QAAA,CAAS,IAAA,CAAK,EAAC,OAAA,EAAS,UAAA,CAAW,gBAAA,EAAkB,IAAA,EAAM,CAAC,OAAA,EAAS,IAAA,EAAM,UAAA,CAAW,IAAI,CAAC,GAAE,CAAA;EAAA,MACjG;EAAA,IACJ;EAAA,EACJ;EACJ;EAEO,SAAS,YAAY,MAAA,GAAwD,IAAI,KAAA,GAAuD,IAAI,QAAA,EAA0B;EACzK,EAAA,MAAA,GAAS,UAAU,EAAC;EACpB,EAAA,KAAA,GAAQ,SAAS,EAAC;EAGlB,EAAA,MAAM,WAAA,GAAc,MAAA,CAAO,GAAA,CAAI,OAAO,CAAA;EACtC,EAAA,MAAM,UAAA,GAAa,KAAA,CAAM,GAAA,CAAI,OAAO,CAAA;EAGpC,EAAA,MAAM,WAAA,GAAc,MAAA,CAAO,MAAA,CAAO,SAAA,EAAW,EAAE,CAAA;EAC/C,EAAA,MAAM,UAAA,GAAa,KAAA,CAAM,MAAA,CAAO,SAAA,EAAW,EAAE,CAAA;EAG7C,EAAA,MAAM,OAAA,GAAU,YAAY,KAAA,EAAM;EAElC,EAAA,IAAI,CAAA;EACJ,EAAA,IAAI,CAAA;EACJ,EAAA,IAAI,QAAA;EACJ,EAAA,IAAI,YAAA;EAGJ,EAAA,KAAK,IAAI,CAAA,EAAG,CAAA,GAAI,GAAG,CAAA,GAAI,WAAA,CAAY,QAAQ,CAAA,EAAA,EAAK;EAC5C,IAAA,QAAA,GAAW,YAAY,CAAC,CAAA;EACxB,IAAA,IAAI,CAAC,MAAA,CAAO,MAAA,CAAO,UAAA,EAAY,QAAQ,CAAA,EAAG;EACtC,MAAA,QAAA,CAAS,IAAA,CAAK,EAAC,OAAA,EAAS,UAAA,CAAW,cAAc,IAAA,EAAM,CAAC,QAAQ,CAAA,EAAE,CAAA;EAClE,MAAA,OAAA,CAAQ,OAAO,OAAA,CAAQ,OAAA,CAAQ,QAAA,EAAU,CAAC,GAAG,CAAC,CAAA;EAAA,IAClD,CAAA,MAAO;EAEH,MAAA,CAAA,EAAA;EAAA,IACJ;EAAA,EACJ;EAGA,EAAA,KAAK,IAAI,CAAA,EAAG,CAAA,GAAI,GAAG,CAAA,GAAI,UAAA,CAAW,QAAQ,CAAA,EAAA,EAAK;EAE3C,IAAA,QAAA,GAAW,UAAA,CAAW,UAAA,CAAW,MAAA,GAAS,CAAA,GAAI,CAAC,CAAA;EAE/C,IAAA,IAAI,QAAQ,OAAA,CAAQ,MAAA,GAAS,CAAA,GAAI,CAAC,MAAM,QAAA,EAAU;EAElD,IAAA,IAAI,MAAA,CAAO,MAAA,CAAO,WAAA,EAAa,QAAQ,CAAA,EAAG;EAEtC,MAAA,QAAA,CAAS,IAAA,CAAK,EAAC,OAAA,EAAS,UAAA,CAAW,cAAc,IAAA,EAAM,CAAC,QAAQ,CAAA,EAAE,CAAA;EAClE,MAAA,OAAA,CAAQ,MAAA,CAAO,QAAQ,WAAA,CAAY,QAAA,EAAU,QAAQ,MAAA,GAAS,CAAC,GAAG,CAAC,CAAA;EAAA,IACvE,CAAA,MAAO;EAEH,MAAA,CAAA,EAAA;EAAA,IACJ;EAGA,IAAA,YAAA,GAAe,OAAA,CAAQ,OAAA,CAAQ,MAAA,GAAS,CAAC,CAAA;EACzC,IAAA,QAAA,CAAS,IAAA,CAAK,EAAC,OAAA,EAAS,UAAA,CAAW,SAAA,EAAW,IAAA,EAAM,CAAC,UAAA,CAAW,QAAQ,CAAA,EAAG,YAAY,CAAA,EAAE,CAAA;EACzF,IAAA,OAAA,CAAQ,MAAA,CAAO,OAAA,CAAQ,MAAA,GAAS,CAAA,EAAG,GAAG,QAAQ,CAAA;EAAA,EAClD;EAGA,EAAA,KAAA,MAAW,eAAe,KAAA,EAAO;EAE7B,IAAA,MAAM,YAAA,GAAe,WAAA,CAAY,WAAA,CAAY,EAAE,CAAA;EAC/C,IAAA,IAAI,CAAC,YAAA,EAAc;EAEnB,IAAA,OAAO,YAAA,CAAa,IAAA;EACpB,IAAA,IAAIA,SAAA,CAAQ,YAAA,EAAc,WAAW,CAAA,EAAG;EAExC,IAAA,QAAA,CAAS,IAAA,CAAK,EAAC,OAAA,EAAS,UAAA,CAAW,YAAA,EAAc,IAAA,EAAM,CAAC,WAAA,CAAY,EAAA,EAAI,WAAW,CAAA,EAAE,CAAA;EAAA,EACzF;EACJ;EAEA,SAAS,YAAA,CAAa,MAAA,EAA+B,KAAA,EAA8B,QAAA,EAA0B;EACzG,EAAA,MAAA,GAAS,UAAU,EAAC;EACpB,EAAA,KAAA,GAAQ,SAAS,EAAC;EAElB,EAAA,IAAI,SAAA;EAGJ,EAAA,KAAK,aAAa,MAAA,EAAQ;EACtB,IAAA,IAAI,CAAC,MAAA,CAAO,MAAA,CAAO,MAAA,EAAQ,SAAS,CAAA,EAAG;EACvC,IAAA,IAAI,CAAC,MAAA,CAAO,MAAA,CAAO,KAAA,EAAO,SAAS,CAAA,EAAG;EAClC,MAAA,QAAA,CAAS,IAAA,CAAK,EAAC,OAAA,EAAS,UAAA,CAAW,eAAe,IAAA,EAAM,CAAC,SAAS,CAAA,EAAE,CAAA;EAAA,IACxE;EAAA,EACJ;EAGA,EAAA,KAAK,aAAa,KAAA,EAAO;EACrB,IAAA,IAAI,CAAC,MAAA,CAAO,MAAA,CAAO,KAAA,EAAO,SAAS,CAAA,EAAG;EACtC,IAAA,MAAM,OAAA,GAAU,MAAM,SAAS,CAAA;EAC/B,IAAA,IAAI,CAAC,MAAA,CAAO,MAAA,CAAO,MAAA,EAAQ,SAAS,CAAA,EAAG;EACnC,MAAA,QAAA,CAAS,IAAA,CAAK,EAAC,OAAA,EAAS,UAAA,CAAW,UAAA,EAAY,MAAM,CAAC,SAAA,EAAW,OAAO,CAAA,EAAE,CAAA;EAAA,IAC9E,WAAW,CAACA,SAAA,CAAQ,OAAO,SAAS,CAAA,EAAG,OAAO,CAAA,EAAG;EAC7C,MAAA,QAAA,CAAS,IAAA,CAAK,EAAC,OAAA,EAAS,UAAA,CAAW,eAAe,IAAA,EAAM,CAAC,SAAS,CAAA,EAAE,CAAA;EACpE,MAAA,QAAA,CAAS,IAAA,CAAK,EAAC,OAAA,EAAS,UAAA,CAAW,UAAA,EAAY,MAAM,CAAC,SAAA,EAAW,OAAO,CAAA,EAAE,CAAA;EAAA,IAC9E;EAAA,EACJ;EACJ;EAoBA,SAAwB,UAAA,CAAW,QAA4B,KAAA,EAA2C;EACtG,EAAA,IAAI,CAAC,MAAA,EAAQ,OAAO,CAAC,EAAC,OAAA,EAAS,UAAA,CAAW,QAAA,EAAU,IAAA,EAAM,CAAC,KAAK,CAAA,EAAE,CAAA;EAElE,EAAA,IAAI,WAA2B,EAAC;EAEhC,EAAA,IAAI;EAEA,IAAA,IAAI,CAACA,SAAA,CAAQ,MAAA,CAAO,OAAA,EAAS,KAAA,CAAM,OAAO,CAAA,EAAG;EACzC,MAAA,OAAO,CAAC,EAAC,OAAA,EAAS,UAAA,CAAW,UAAU,IAAA,EAAM,CAAC,KAAK,CAAA,EAAE,CAAA;EAAA,IACzD;EACA,IAAA,IAAI,CAACA,SAAA,CAAQ,MAAA,CAAO,MAAA,EAAQ,KAAA,CAAM,MAAM,CAAA,EAAG;EACvC,MAAA,QAAA,CAAS,IAAA,CAAK,EAAC,OAAA,EAAS,UAAA,CAAW,SAAA,EAAW,MAAM,CAAC,KAAA,CAAM,MAAM,CAAA,EAAE,CAAA;EAAA,IACvE;EACA,IAAA,IAAI,CAACA,SAAA,CAAQ,MAAA,CAAO,IAAA,EAAM,KAAA,CAAM,IAAI,CAAA,EAAG;EACnC,MAAA,QAAA,CAAS,IAAA,CAAK,EAAC,OAAA,EAAS,UAAA,CAAW,OAAA,EAAS,MAAM,CAAC,KAAA,CAAM,IAAI,CAAA,EAAE,CAAA;EAAA,IACnE;EACA,IAAA,IAAI,CAACA,SAAA,CAAQ,MAAA,CAAO,OAAA,EAAS,KAAA,CAAM,OAAO,CAAA,EAAG;EACzC,MAAA,QAAA,CAAS,IAAA,CAAK,EAAC,OAAA,EAAS,UAAA,CAAW,UAAA,EAAY,MAAM,CAAC,KAAA,CAAM,OAAO,CAAA,EAAE,CAAA;EAAA,IACzE;EACA,IAAA,IAAI,CAACA,SAAA,CAAQ,MAAA,CAAO,KAAA,EAAO,KAAA,CAAM,KAAK,CAAA,EAAG;EACrC,MAAA,QAAA,CAAS,IAAA,CAAK,EAAC,OAAA,EAAS,UAAA,CAAW,QAAA,EAAU,MAAM,CAAC,KAAA,CAAM,KAAK,CAAA,EAAE,CAAA;EAAA,IACrE;EACA,IAAA,IAAI,CAACA,SAAA,CAAQ,MAAA,CAAO,MAAA,EAAQ,KAAA,CAAM,MAAM,CAAA,EAAG;EACvC,MAAA,QAAA,CAAS,IAAA,CAAK,EAAC,OAAA,EAAS,UAAA,CAAW,SAAA,EAAW,MAAM,CAAC,KAAA,CAAM,MAAM,CAAA,EAAE,CAAA;EAAA,IACvE;EACA,IAAA,IAAI,CAACA,SAAA,CAAQ,MAAA,CAAO,MAAA,EAAQ,KAAA,CAAM,MAAM,CAAA,EAAG;EACvC,MAAA,QAAA,CAAS,IAAA,CAAK,EAAC,OAAA,EAAS,UAAA,CAAW,SAAA,EAAW,MAAM,CAAC,KAAA,CAAM,MAAM,CAAA,EAAE,CAAA;EAAA,IACvE;EAEA,IAAA,IAAI,CAACA,SAAA,CAAQ,MAAA,CAAO,OAAA,EAAS,KAAA,CAAM,OAAO,CAAA,EAAG;EACzC,MAAA,WAAA,CAAY,MAAA,CAAO,OAAA,EAAS,KAAA,CAAM,OAAA,EAAS,QAAQ,CAAA;EAAA,IACvD;EACA,IAAA,IAAI,CAACA,SAAA,CAAQ,MAAA,CAAO,UAAA,EAAY,KAAA,CAAM,UAAU,CAAA,EAAG;EAC/C,MAAA,QAAA,CAAS,IAAA,CAAK,EAAC,OAAA,EAAS,UAAA,CAAW,aAAA,EAAe,MAAM,CAAC,KAAA,CAAM,UAAU,CAAA,EAAE,CAAA;EAAA,IAC/E;EACA,IAAA,IAAI,CAACA,SAAA,CAAQ,MAAA,CAAO,KAAA,EAAO,KAAA,CAAM,KAAK,CAAA,EAAG;EACrC,MAAA,QAAA,CAAS,IAAA,CAAK,EAAC,OAAA,EAAS,UAAA,CAAW,QAAA,EAAU,MAAM,CAAC,KAAA,CAAM,KAAK,CAAA,EAAE,CAAA;EAAA,IACrE;EACA,IAAA,IAAI,CAACA,SAAA,CAAQ,MAAA,CAAO,GAAA,EAAK,KAAA,CAAM,GAAG,CAAA,EAAG;EACjC,MAAA,QAAA,CAAS,IAAA,CAAK,EAAC,OAAA,EAAS,UAAA,CAAW,MAAA,EAAQ,MAAM,CAAC,KAAA,CAAM,GAAG,CAAA,EAAE,CAAA;EAAA,IACjE;EACA,IAAA,IAAI,CAACA,SAAA,CAAQ,MAAA,CAAO,IAAA,EAAM,KAAA,CAAM,IAAI,CAAA,EAAG;EACnC,MAAA,QAAA,CAAS,IAAA,CAAK,EAAC,OAAA,EAAS,UAAA,CAAW,OAAA,EAAS,MAAM,CAAC,KAAA,CAAM,IAAI,CAAA,EAAE,CAAA;EAAA,IACnE;EACA,IAAA,IAAI,CAACA,SAAA,CAAQ,MAAA,CAAO,IAAA,EAAM,KAAA,CAAM,IAAI,CAAA,EAAG;EACnC,MAAA,QAAA,CAAS,IAAA,CAAK,EAAC,OAAA,EAAS,UAAA,CAAW,OAAA,EAAS,MAAM,CAAC,KAAA,CAAM,IAAI,CAAA,EAAE,CAAA;EAAA,IACnE;EACA,IAAA,IAAI,CAACA,SAAA,CAAQ,MAAA,CAAO,UAAA,EAAY,KAAA,CAAM,UAAU,CAAA,EAAG;EAC/C,MAAA,QAAA,CAAS,IAAA,CAAK,EAAC,OAAA,EAAS,UAAA,CAAW,aAAA,EAAe,MAAM,CAAC,KAAA,CAAM,UAAU,CAAA,EAAE,CAAA;EAAA,IAC/E;EACA,IAAA,IAAI,CAACA,SAAA,CAAQ,MAAA,CAAO,MAAA,EAAQ,KAAA,CAAM,MAAM,CAAA,EAAG;EACvC,MAAA,QAAA,CAAS,IAAA,CAAK,EAAC,OAAA,EAAS,UAAA,CAAW,SAAA,EAAW,MAAM,CAAC,KAAA,CAAM,MAAM,CAAA,EAAE,CAAA;EAAA,IACvE;EACA,IAAA,IAAI,CAACA,SAAA,CAAQ,MAAA,CAAO,MAAA,EAAQ,KAAA,CAAM,MAAM,CAAA,EAAG;EACvC,MAAA,QAAA,CAAS,IAAA,CAAK,EAAC,OAAA,EAAS,UAAA,CAAW,SAAA,EAAW,MAAM,CAAC,KAAA,CAAM,MAAM,CAAA,EAAE,CAAA;EAAA,IACvE;EACA,IAAA,IAAI,CAACA,SAAA,CAAQ,MAAA,CAAO,QAAA,EAAU,KAAA,CAAM,QAAQ,CAAA,EAAG;EAC3C,MAAA,YAAA,CAAa,MAAA,CAAO,QAAA,EAAU,KAAA,CAAM,QAAA,EAAU,QAAQ,CAAA;EAAA,IAC1D;EACA,IAAA,IAAI,CAACA,UAAQ,MAAA,CAAO,aAAa,GAAG,KAAA,CAAM,aAAa,CAAC,CAAA,EAAG;EAGvD,MAAA,OAAO,CAAC,EAAC,OAAA,EAAS,UAAA,CAAW,UAAU,IAAA,EAAM,CAAC,KAAK,CAAA,EAAE,CAAA;EAAA,IACzD;EAKA,IAAA,MAAM,iBAAuC,EAAC;EAG9C,IAAA,MAAM,4BAAuC,EAAC;EAC9C,IAAA,WAAA,CAAY,MAAA,CAAO,OAAA,EAAS,KAAA,CAAM,OAAA,EAAS,2BAA2B,cAAc,CAAA;EAOpF,IAAA,MAAM,eAAqC,EAAC;EAC5C,IAAA,IAAI,OAAO,MAAA,EAAQ;EACf,MAAA,MAAA,CAAO,MAAA,CAAO,OAAA,CAAQ,CAAC,KAAA,KAAU;EAC7B,QAAA,IAAI,KAAA,CAAM,MAAA,IAAU,cAAA,CAAe,KAAA,CAAM,MAAM,CAAA,EAAG;EAC9C,UAAA,QAAA,CAAS,IAAA,CAAK,EAAC,OAAA,EAAS,UAAA,CAAW,WAAA,EAAa,MAAM,CAAC,KAAA,CAAM,EAAE,CAAA,EAAE,CAAA;EAAA,QACrE,CAAA,MAAO;EACH,UAAA,YAAA,CAAa,KAAK,KAAK,CAAA;EAAA,QAC3B;EAAA,MACJ,CAAC,CAAA;EAAA,IACL;EAGA,IAAA,IAAI,gBAAgB,MAAA,CAAO,OAAA;EAC3B,IAAA,IAAI,aAAA,EAAe;EACf,MAAA,IAAI,cAAA,CAAe,aAAA,CAAc,MAAM,CAAA,EAAG;EACtC,QAAA,QAAA,CAAS,IAAA,CAAK,EAAC,OAAA,EAAS,UAAA,CAAW,YAAY,IAAA,EAAM,CAAC,KAAA,CAAS,CAAA,EAAE,CAAA;EACjE,QAAA,aAAA,GAAgB,KAAA,CAAA;EAAA,MACpB;EAAA,IACJ;EAEA,IAAA,QAAA,GAAW,QAAA,CAAS,OAAO,yBAAyB,CAAA;EAIpD,IAAA,IAAI,CAACA,SAAA,CAAQ,aAAA,EAAe,KAAA,CAAM,OAAO,CAAA,EAAG;EACxC,MAAA,QAAA,CAAS,IAAA,CAAK,EAAC,OAAA,EAAS,UAAA,CAAW,UAAA,EAAY,MAAM,CAAC,KAAA,CAAM,OAAO,CAAA,EAAE,CAAA;EAAA,IACzE;EAIA,IAAA,UAAA,CAAW,YAAA,EAAc,KAAA,CAAM,MAAA,EAAQ,QAAQ,CAAA;EAAA,EACnD,SAAS,CAAA,EAAG;EAER,IAAA,OAAA,CAAQ,IAAA,CAAK,iCAAiC,CAAC,CAAA;EAC/C,IAAA,QAAA,GAAW,CAAC,EAAC,OAAA,EAAS,UAAA,CAAW,UAAU,IAAA,EAAM,CAAC,KAAK,CAAA,EAAE,CAAA;EAAA,EAC7D;EAEA,EAAA,OAAO,QAAA;EACX;;ECxnBA,MAAqB,eAAA,CAAgB;EAAA,EAKjC,WAAA,CAAY,GAAA,EAAgC,KAAA,EAAgB,OAAA,EAAiB,UAAA,EAA4B;EACrG,IAAA,IAAA,CAAK,OAAA,GAAA,CAAW,GAAA,GAAM,CAAA,EAAG,GAAG,OAAO,EAAA,IAAM,OAAA;EACzC,IAAA,IAAI,UAAA,OAAiB,UAAA,GAAa,UAAA;EAElC,IAAA,IAAI,KAAA,KAAU,IAAA,IAAQ,KAAA,KAAU,MAAA,IAAc,MAA8B,QAAA,EAAU;EAClF,MAAA,IAAA,CAAK,OAAQ,KAAA,CAA8B,QAAA;EAAA,IAC/C;EAAA,EACJ;EACJ;EAEO,MAAM,0BAA0B,eAAA,CAAgB;EAAC;;ECfxD,MAAM,cAAA,GAAiB,YAAA;EAEvB,MAAqB,YAAA,CAAa;EAAA,EAK9B,YAAY,KAAA,EAAc;EACtB,IAAA,IAAA,CAAK,KAAA,GAAQ,KAAA;EACb,IAAA,IAAA,CAAK,UAAU,KAAA,CAAM,OAAA;EACrB,IAAA,MAAM,KAAA,GAAQ,KAAA,CAAM,OAAA,CAAQ,KAAA,CAAM,cAAc,CAAA;EAChD,IAAA,IAAA,CAAK,IAAA,GAAO,KAAA,IAAS,KAAA,CAAM,CAAC,CAAA,GAAI,SAAS,KAAA,CAAM,CAAC,CAAA,EAAG,EAAE,CAAA,GAAI,CAAA;EAAA,EAC7D;EACJ;;ECCA,SAAwB,eAAe,OAAA,EAAoD;EACvF,EAAA,MAAM,MAAM,OAAA,CAAQ,GAAA;EACpB,EAAA,MAAM,EAAC,KAAA,EAAO,SAAA,EAAS,GAAI,OAAA;EAE3B,EAAA,IAAI,CAAC,QAAA,CAAS,KAAK,CAAA,EAAG;EAClB,IAAA,OAAO,CAAC,IAAI,eAAA,CAAgB,GAAA,EAAK,KAAA,EAAO,0BAA0B,CAAC,CAAA;EAAA,EACvE;EAEA,EAAA,MAAM,EAAC,IAAA,EAAM,GAAG,UAAA,EAAU,GAAI,KAAA;EAG9B,EAAA,MAAA,CAAO,cAAA,CAAe,YAAY,UAAA,EAAY;EAAA,IAC1C,OAAO,KAAA,CAAM,QAAA;EAAA,IACb,UAAA,EAAY;EAAA,GACf,CAAA;EAED,EAAA,IAAI,SAAS,cAAA,CAAe;EAAA,IACxB,GAAG,OAAA;EAAA,IACH,KAAA,EAAO,UAAA;EAAA;EAAA,IAEP,WAAW,SAAA,CAAU;EAAA,GACxB,CAAA;EAGD,EAAA,IAAI,QAAA,CAAS,UAAA,CAAW,EAAE,CAAA,KAAM,EAAA,EAAI;EAChC,IAAA,MAAMC,IAAAA,GAAM,CAAA,EAAG,OAAA,CAAQ,GAAG,CAAA,GAAA,CAAA;EAC1B,IAAA,MAAA,CAAO,KAAK,IAAI,eAAA,CAAgBA,IAAAA,EAAK,UAAA,EAAY,oCAAoC,CAAC,CAAA;EAAA,EAC1F;EAGA,EAAA,MAAM,QAAA,GAAW,QAAA,CAAS,UAAA,CAAW,EAAE,CAAA;EACvC,EAAA,IAAI,QAAA,KAAa,WAAA,IAAe,QAAA,KAAa,aAAA,IAAiB,aAAa,WAAA,EAAa;EACpF,IAAA,MAAMA,IAAAA,GAAM,CAAA,EAAG,OAAA,CAAQ,GAAG,CAAA,GAAA,CAAA;EAC1B,IAAA,MAAA,CAAO,IAAA,CAAK,IAAI,eAAA,CAAgBA,IAAAA,EAAK,UAAA,EAAY,uBAAuB,MAAA,CAAO,QAAQ,CAAC,CAAA,CAAA,CAAG,CAAC,CAAA;EAAA,EAChG;EAEA,EAAA,IAAI,IAAA,EAAM;EACN,IAAA,MAAMA,IAAAA,GAAM,CAAA,EAAG,OAAA,CAAQ,GAAG,CAAA,KAAA,CAAA;EAC1B,IAAA,MAAA,GAAS,MAAA,CAAO,OAAOC,eAAA,CAAc,IAAA,EAAM,WAAW,EAAC,GAAA,EAAAD,IAAAA,EAAI,CAAC,CAAA;EAAA,EAChE;EAEA,EAAA,OAAO,MAAA;EACX;;EC9CA,SAAwB,eAAe,OAAA,EAA8C;EACjF,EAAA,MAAM,YAAY,OAAA,CAAQ,SAAA;EAC1B,EAAA,MAAM,cAAc,OAAA,CAAQ,KAAA;EAI5B,EAAA,MAAM,gBAAgB,QAAA,CAAS,WAAW,KAAK,QAAA,CAAS,WAAA,CAAY,KAAK,CAAA,KAAM,IAAA;EAC/E,EAAA,MAAM,YAAA,GAAe,CAAC,aAAA,IAAiB,QAAA,CAAS,WAAW,CAAA,GAAI,QAAA,CAAS,WAAA,CAAY,IAAI,CAAA,GAAI,MAAA;EAE5F,EAAA,OAAO,cAAA,CAAe;EAAA,IAClB,GAAG,OAAA;EAAA;EAAA,IAEH,WAAW,SAAA,CAAU,MAAA;EAAA,IACrB,yBAAyB,YAAA,GAAe;EAAA;EAAA;EAAA;EAAA;EAAA,MAKpC,OAAA,EAAS,CAAC,cAAA,KAAyD,KAAA,CAAM,QAAQ,cAAA,CAAe,KAAK,CAAA,GACjGE,QAAA,CAAa,EAAC,GAAG,gBAAgB,SAAA,EAAW,EAAC,GAAG,cAAA,CAAe,SAAA,EAAW,IAAA,EAAM,cAAY,EAAqC,CAAA,GACjIA,QAAA,CAAa,cAAc;EAAA,KACnC,GAAI;EAAA,GACP,CAAA;EACL;;ECDA,SAAwB,cAAc,OAAA,EAAmD;EACrF,EAAA,MAAM,QAAQ,OAAA,CAAQ,KAAA;EACtB,EAAA,MAAM,YAAY,OAAA,CAAQ,SAAA;EAC1B,EAAA,MAAM,QAAQ,OAAA,CAAQ,KAAA;EACtB,EAAA,MAAM,YAAY,OAAA,CAAQ,SAAA;EAC1B,EAAA,MAAM,MAAM,OAAA,CAAQ,GAAA;EACpB,EAAA,MAAM,oBAAA,GAAuB,QAAQ,qBAAA,IAAyB,QAAA;EAE9D,EAAA,IAAI,CAAC,KAAA,CAAM,OAAA,CAAQ,KAAK,CAAA,EAAG;EACvB,IAAA,OAAO,CAAC,IAAI,eAAA,CAAgB,GAAA,EAAK,KAAA,EAAO,mBAAmB,OAAA,CAAQ,KAAK,CAAC,CAAA,MAAA,CAAQ,CAAC,CAAA;EAAA,EACtF;EAEA,EAAA,IAAI,SAAA,CAAU,MAAA,IAAU,KAAA,CAAM,MAAA,KAAW,UAAU,MAAA,EAAQ;EACvD,IAAA,OAAO,CAAC,IAAI,eAAA,CAAgB,GAAA,EAAK,KAAA,EAAO,CAAA,aAAA,EAAgB,SAAA,CAAU,MAAM,CAAA,kBAAA,EAAqB,KAAA,CAAM,MAAM,CAAA,MAAA,CAAQ,CAAC,CAAA;EAAA,EACtH;EAEA,EAAA,IAAI,UAAU,YAAY,CAAA,IAAK,MAAM,MAAA,GAAS,SAAA,CAAU,YAAY,CAAA,EAAG;EACnE,IAAA,OAAO,CAAC,IAAI,eAAA,CAAgB,GAAA,EAAK,KAAA,EAAO,CAAA,sBAAA,EAAyB,SAAA,CAAU,YAAY,CAAC,CAAA,kBAAA,EAAqB,KAAA,CAAM,MAAM,QAAQ,CAAC,CAAA;EAAA,EACtI;EAEA,EAAA,IAAI,gBAAA,GAAqC;EAAA,IACrC,MAAM,SAAA,CAAU,KAAA;EAAA,IAChB,QAAQ,SAAA,CAAU,MAAA;EAAA,IAClB,SAAS,SAAA,CAAU,OAAA;EAAA,IACnB,SAAS,SAAA,CAAU,OAAA;EAAA,IACnB,QAAA,EAAU;EAAA,GACd;EAEA,EAAA,IAAI,SAAA,CAAU,WAAW,CAAA,EAAG;EACxB,IAAA,gBAAA,CAAiB,WAAY,SAAA,CAAwB,QAAA;EAAA,EACzD;EAEA,EAAA,IAAI,QAAA,CAAS,SAAA,CAAU,KAAK,CAAA,EAAG;EAC3B,IAAA,gBAAA,GAAmB,SAAA,CAAU,KAAA;EAAA,EACjC;EAEA,EAAA,IAAI,SAA4B,EAAC;EACjC,EAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,KAAA,CAAM,QAAQ,CAAA,EAAA,EAAK;EACnC,IAAA,MAAA,GAAS,MAAA,CAAO,OAAO,oBAAA,CAAqB;EAAA,MACxC,KAAA;EAAA,MACA,UAAA,EAAY,CAAA;EAAA;EAAA,MAEZ,KAAA,EAAO,MAAM,CAAC,CAAA;EAAA,MACd,SAAA,EAAW,gBAAA;EAAA,MACX,KAAA;EAAA,MACA,SAAA;EAAA,MACA,GAAA,EAAK,CAAA,EAAG,GAAG,CAAA,CAAA,EAAI,CAAC,CAAA,CAAA;EAAA,KACpB,EAAG,IAAI,CAAC,CAAA;EAAA,EACZ;EAEA,EAAA,OAAO,MAAA;EACX;;ECrEA,SAAwB,eAAe,OAAA,EAAoD;EACvF,EAAA,MAAM,MAAM,OAAA,CAAQ,GAAA;EACpB,EAAA,MAAM,QAAQ,OAAA,CAAQ,KAAA;EACtB,EAAA,MAAM,YAAY,OAAA,CAAQ,SAAA;EAE1B,EAAA,IAAI,CAAC,QAAA,CAAS,KAAK,CAAA,EAAG;EAClB,IAAA,OAAO,CAAC,IAAI,eAAA,CAAgB,GAAA,EAAK,KAAA,EAAO,oBAAoB,OAAA,CAAQ,KAAK,CAAC,CAAA,MAAA,CAAQ,CAAC,CAAA;EAAA,EACvF;EAGA,EAAA,IAAI,UAAU,KAAA,EAAO;EACjB,IAAA,OAAO,CAAC,IAAI,eAAA,CAAgB,GAAA,EAAK,KAAA,EAAO,4BAA4B,CAAC,CAAA;EAAA,EACzE;EAEA,EAAA,IAAI,aAAa,SAAA,EAAW;EACxB,IAAA,IAAI,UAAU,SAAA,CAAU,OAAA;EACxB,IAAA,IAAI,KAAA,CAAM,OAAA,CAAQ,SAAA,CAAU,OAAO,CAAA,EAAG;EAClC,MAAA,MAAM,IAAI,OAAA,CAAQ,UAAA;EAElB,MAAA,OAAA,GAAU,SAAA,CAAU,QAAQ,CAAC,CAAA;EAAA,IACjC;EACA,IAAA,IAAI,QAAQ,OAAA,EAAS;EACjB,MAAA,OAAO,CAAC,IAAI,eAAA,CAAgB,GAAA,EAAK,KAAA,EAAO,GAAG,KAAK,CAAA,gCAAA,EAAmC,OAAO,CAAA,CAAE,CAAC,CAAA;EAAA,IACjG;EAAA,EACJ;EAEA,EAAA,IAAI,aAAa,SAAA,EAAW;EACxB,IAAA,IAAI,UAAU,SAAA,CAAU,OAAA;EACxB,IAAA,IAAI,KAAA,CAAM,OAAA,CAAQ,SAAA,CAAU,OAAO,CAAA,EAAG;EAClC,MAAA,MAAM,IAAI,OAAA,CAAQ,UAAA;EAElB,MAAA,OAAA,GAAU,SAAA,CAAU,QAAQ,CAAC,CAAA;EAAA,IACjC;EACA,IAAA,IAAI,QAAQ,OAAA,EAAS;EACjB,MAAA,OAAO,CAAC,IAAI,eAAA,CAAgB,GAAA,EAAK,KAAA,EAAO,GAAG,KAAK,CAAA,mCAAA,EAAsC,OAAO,CAAA,CAAE,CAAC,CAAA;EAAA,IACpG;EAAA,EACJ;EAEA,EAAA,OAAO,EAAC;EACZ;;ECrCA,SAAS,eAAe,KAAA,EAAsE;EAE1F,EAAA,MAAM,KAAA,GAAQ,MAAM,OAAO,CAAA;EAC3B,EAAA,OAAO,KAAA,CAAM,OAAA,CAAQ,KAAK,CAAA,IAAK,MAAM,OAAA,CAAQ,KAAA,CAAM,CAAC,CAAC,KAAK,QAAA,CAAS,KAAA,CAAM,CAAC,CAAA,CAAE,CAAC,CAAC,CAAA;EAClF;EAUA,SAAwB,iBAAiB,OAAA,EAAsD;EAC3F,EAAA,MAAM,MAAM,OAAA,CAAQ,GAAA;EACpB,EAAA,MAAM,QAAQ,OAAA,CAAQ,KAAA;EAEtB,EAAA,IAAI,CAAC,QAAA,CAAS,KAAK,CAAA,EAAG;EAClB,IAAA,OAAO,CAAC,IAAI,eAAA,CAAgB,GAAA,EAAK,KAAA,EAAO,oBAAoB,OAAA,CAAQ,KAAK,CAAC,CAAA,MAAA,CAAQ,CAAC,CAAA;EAAA,EACvF;EAEA,EAAA,MAAM,oBAAoB,OAAA,CAAQ,SAAA;EAClC,EAAA,MAAM,YAAA,GAAe,QAAA,CAAS,KAAA,CAAM,IAAI,CAAA;EACxC,EAAA,IAAI,WAAA;EACJ,EAAA,IAAI,mBAA8D,EAAC;EACnE,EAAA,IAAI,uBAAA;EACJ,EAAA,IAAI,sBAAA;EAEJ,EAAA,MAAM,cAAA,GAAiB,YAAA,KAAiB,aAAA,IAAiB,KAAA,CAAM,QAAA,KAAa,MAAA;EAC5E,EAAA,MAAM,qBAAqB,CAAC,cAAA;EAC5B,EAAA,MAAM,yBAAA,GAA4B,eAAe,KAAK,CAAA;EAEtD,EAAA,MAAM,SAAS,cAAA,CAAe;EAAA,IAC1B,KAAK,OAAA,CAAQ,GAAA;EAAA,IACb,OAAO,OAAA,CAAQ,KAAA;EAAA;EAAA,IAEf,SAAA,EAAW,QAAQ,SAAA,CAAU,QAAA;EAAA,IAC7B,OAAO,OAAA,CAAQ,KAAA;EAAA,IACf,WAAW,OAAA,CAAQ,SAAA;EAAA,IACnB,uBAAA,EAAyB;EAAA,MACrB,KAAA,EAAO,qBAAA;EAAA,MACP,OAAA,EAAS;EAAA;EACb,GACH,CAAA;EAED,EAAA,IAAI,YAAA,KAAiB,cAAc,cAAA,EAAgB;EAC/C,IAAA,MAAA,CAAO,IAAA,CAAK,IAAI,eAAA,CAAgB,OAAA,CAAQ,KAAK,OAAA,CAAQ,KAAA,EAAO,sCAAsC,CAAC,CAAA;EAAA,EACvG;EAEA,EAAA,IAAI,YAAA,KAAiB,UAAA,IAAc,CAAC,KAAA,CAAM,KAAA,EAAO;EAC7C,IAAA,MAAA,CAAO,IAAA,CAAK,IAAI,eAAA,CAAgB,OAAA,CAAQ,KAAK,OAAA,CAAQ,KAAA,EAAO,mCAAmC,CAAC,CAAA;EAAA,EACpG;EAEA,EAAA,IAAI,iBAAiB,aAAA,IAAkB,iBAAA,CAA6C,cAAc,CAAC,qBAAA,CAAsB,iBAA+C,CAAA,EAAG;EACvK,IAAA,MAAA,CAAO,IAAA,CAAK,IAAI,eAAA,CAAgB,OAAA,CAAQ,KAAK,OAAA,CAAQ,KAAA,EAAO,qCAAqC,CAAC,CAAA;EAAA,EACtG;EAEA,EAAA,IAAI,OAAA,CAAQ,SAAA,CAAU,QAAA,IAAY,CAAA,EAAG;EACjC,IAAA,IAAI,kBAAA,IAAsB,CAAC,0BAAA,CAA2B,iBAA+C,CAAA,EAAG;EACpG,MAAA,MAAA,CAAO,IAAA,CAAK,IAAI,eAAA,CAAgB,OAAA,CAAQ,KAAK,OAAA,CAAQ,KAAA,EAAO,kCAAkC,CAAC,CAAA;EAAA,IACnG,CAAA,MAAA,IAAW,cAAA,IAAkB,CAAC,sBAAA,CAAuB,iBAA+C,CAAA,EAAG;EACnG,MAAA,MAAA,CAAO,IAAA,CAAK,IAAI,eAAA,CAAgB,OAAA,CAAQ,KAAK,OAAA,CAAQ,KAAA,EAAO,8BAA8B,CAAC,CAAA;EAAA,IAC/F;EAAA,EACJ;EAEA,EAAA,IAAA,CAAK,YAAA,KAAiB,aAAA,IAAiB,yBAAA,KAA+B,KAAA,CAA8B,aAAa,MAAA,EAAW;EACxH,IAAA,MAAA,CAAO,IAAA,CAAK,IAAI,eAAA,CAAgB,OAAA,CAAQ,KAAK,OAAA,CAAQ,KAAA,EAAO,iCAAiC,CAAC,CAAA;EAAA,EAClG;EAEA,EAAA,OAAO,MAAA;EAEP,EAAA,SAAS,sBAAsBC,QAAAA,EAAsD;EACjF,IAAA,IAAI,iBAAiB,UAAA,EAAY;EAC7B,MAAA,OAAO,CAAC,IAAI,eAAA,CAAgBA,QAAAA,CAAQ,KAAKA,QAAAA,CAAQ,KAAA,EAAO,mDAAmD,CAAC,CAAA;EAAA,IAChH;EAEA,IAAA,IAAIC,UAA4B,EAAC;EACjC,IAAA,MAAMC,SAAQF,QAAAA,CAAQ,KAAA;EAEtB,IAAAC,OAAAA,GAASA,OAAAA,CAAO,MAAA,CAAO,aAAA,CAAc;EAAA,MACjC,KAAKD,QAAAA,CAAQ,GAAA;EAAA,MACb,KAAA,EAAAE,MAAAA;EAAA,MACA,WAAWF,QAAAA,CAAQ,SAAA;EAAA,MACnB,OAAOA,QAAAA,CAAQ,KAAA;EAAA,MACf,WAAWA,QAAAA,CAAQ,SAAA;EAAA,MACnB,qBAAA,EAAuB;EAAA,KAC1B,CAAC,CAAA;EAEF,IAAA,IAAI,MAAM,OAAA,CAAQE,MAAK,CAAA,IAAKA,MAAAA,CAAM,WAAW,CAAA,EAAG;EAC5C,MAAAD,OAAAA,CAAO,KAAK,IAAI,eAAA,CAAgBD,SAAQ,GAAA,EAAKE,MAAAA,EAAO,mCAAmC,CAAC,CAAA;EAAA,IAC5F;EAEA,IAAA,OAAOD,OAAAA;EAAA,EACX;EAEA,EAAA,SAAS,qBAAqBD,QAAAA,EAAsD;EAChF,IAAA,IAAIC,UAA4B,EAAC;EACjC,IAAA,MAAMC,SAAQF,QAAAA,CAAQ,KAAA;EACtB,IAAA,MAAMH,OAAMG,QAAAA,CAAQ,GAAA;EAEpB,IAAA,IAAI,CAAC,KAAA,CAAM,OAAA,CAAQE,MAAK,CAAA,EAAG;EACvB,MAAA,OAAO,CAAC,IAAI,eAAA,CAAgBL,IAAAA,EAAKK,MAAAA,EAAO,mBAAmB,OAAA,CAAQA,MAAK,CAAC,CAAA,MAAA,CAAQ,CAAC,CAAA;EAAA,IACtF;EAEA,IAAA,IAAIA,MAAAA,CAAM,WAAW,CAAA,EAAG;EACpB,MAAA,OAAO,CAAC,IAAI,eAAA,CAAgBL,IAAAA,EAAKK,QAAO,CAAA,gCAAA,EAAmCA,MAAAA,CAAM,MAAM,CAAA,MAAA,CAAQ,CAAC,CAAA;EAAA,IACpG;EAEA,IAAA,IAAI,yBAAA,EAA2B;EAC3B,MAAA,IAAI,CAAC,QAAA,CAASA,MAAAA,CAAM,CAAC,CAAC,CAAA,EAAG;EACrB,QAAA,OAAO,CAAC,IAAI,eAAA,CAAgBL,IAAAA,EAAKK,MAAAA,EAAO,CAAA,iBAAA,EAAoB,OAAA,CAAQA,MAAAA,CAAM,CAAC,CAAC,CAAC,CAAA,MAAA,CAAQ,CAAC,CAAA;EAAA,MAC1F;EAEA,MAAA,MAAM,OAAA,GAAUA,OAAM,CAAC,CAAA;EACvB,MAAA,IAAI,OAAA,CAAQ,SAAS,MAAA,EAAW;EAC5B,QAAA,OAAO,CAAC,IAAI,eAAA,CAAgBL,IAAAA,EAAKK,MAAAA,EAAO,gCAAgC,CAAC,CAAA;EAAA,MAC7E;EACA,MAAA,IAAI,OAAA,CAAQ,UAAU,MAAA,EAAW;EAC7B,QAAA,OAAO,CAAC,IAAI,eAAA,CAAgBL,IAAAA,EAAKK,MAAAA,EAAO,iCAAiC,CAAC,CAAA;EAAA,MAC9E;EAEA,MAAA,MAAM,kBAAA,GAAqB,QAAA,CAAS,OAAA,CAAQ,IAAI,CAAA;EAChD,MAAA,IAAI,OAAO,uBAAuB,QAAA,EAAU;EACxC,QAAA,OAAO,CAAC,IAAI,eAAA,CAAgBL,MAAK,OAAA,CAAQ,IAAA,EAAM,kCAAkC,CAAC,CAAA;EAAA,MACtF;EAEA,MAAA,IAAI,sBAAA,IAA0B,yBAAyB,kBAAA,EAAoB;EACvE,QAAA,OAAO,CAAC,IAAI,eAAA,CAAgBA,MAAK,OAAA,CAAQ,IAAA,EAAM,iDAAiD,CAAC,CAAA;EAAA,MACrG;EACA,MAAA,IAAI,uBAAuB,sBAAA,EAAwB;EAC/C,QAAA,sBAAA,GAAyB,kBAAA;EACzB,QAAA,uBAAA,GAA0B,MAAA;EAC1B,QAAA,gBAAA,GAAmB,EAAC;EAAA,MACxB;EACA,MAAAI,OAAAA,GAASA,OAAAA,CAAO,MAAA,CAAO,cAAA,CAAe;EAAA,QAClC,GAAA,EAAK,GAAGJ,IAAG,CAAA,GAAA,CAAA;EAAA,QACX,KAAA,EAAOK,OAAM,CAAC,CAAA;EAAA,QACd,SAAA,EAAW,EAAC,IAAA,EAAM,EAAC,EAAC;EAAA,QACpB,OAAOF,QAAAA,CAAQ,KAAA;EAAA,QACf,WAAWA,QAAAA,CAAQ,SAAA;EAAA,QACnB,uBAAA,EAAyB,EAAC,IAAA,EAAM,cAAA,EAAgB,OAAO,uBAAA;EAAuB,OACjF,CAAC,CAAA;EAAA,IACN,CAAA,MAAO;EACH,MAAAC,OAAAA,GAASA,OAAAA,CAAO,MAAA,CAAO,uBAAA,CAAwB;EAAA,QAC3C,GAAA,EAAK,GAAGJ,IAAG,CAAA,GAAA,CAAA;EAAA,QACX,KAAA,EAAOK,OAAM,CAAC,CAAA;EAAA,QAEd,OAAOF,QAAAA,CAAQ,KAAA;EAAA,QACf,WAAWA,QAAAA,CAAQ;EAAA,OACvB,EAAGE,MAAK,CAAC,CAAA;EAAA,IACb;EAEA,IAAA,IAAI,aAAa,YAAA,CAAaA,MAAAA,CAAM,CAAC,CAAC,CAAC,CAAA,EAAG;EACtC,MAAA,OAAOD,OAAAA,CAAO,MAAA,CAAO,CAAC,IAAI,eAAA,CAAgB,CAAA,EAAGJ,IAAG,CAAA,GAAA,CAAA,EAAOK,MAAAA,CAAM,CAAC,CAAA,EAAG,gDAAgD,CAAC,CAAC,CAAA;EAAA,IACvH;EAEA,IAAA,OAAOD,OAAAA,CAAO,OAAO,QAAA,CAAS;EAAA,MAC1B,GAAA,EAAK,GAAGJ,IAAG,CAAA,GAAA,CAAA;EAAA,MACX,KAAA,EAAOK,OAAM,CAAC,CAAA;EAAA,MACd,SAAA,EAAW,iBAAA;EAAA,MACX,OAAOF,QAAAA,CAAQ,KAAA;EAAA,MACf,WAAWA,QAAAA,CAAQ;EAAA,KACtB,CAAC,CAAA;EAAA,EACN;EAEA,EAAA,SAAS,uBAAA,CAAwBA,UAAmC,IAAA,EAAqC;EACrG,IAAA,MAAM,IAAA,GAAO,OAAA,CAAQA,QAAAA,CAAQ,KAAK,CAAA;EAClC,IAAA,MAAME,MAAAA,GAAQ,QAAA,CAASF,QAAAA,CAAQ,KAAK,CAAA;EAEpC,IAAA,MAAM,WAAA,GAAcA,QAAAA,CAAQ,KAAA,KAAU,IAAA,GAAOA,SAAQ,KAAA,GAAQ,IAAA;EAE7D,IAAA,IAAI,CAAC,WAAA,EAAa;EACd,MAAA,WAAA,GAAc,IAAA;EAAA,IAClB,CAAA,MAAA,IAAW,SAAS,WAAA,EAAa;EAC7B,MAAA,OAAO,CAAC,IAAI,eAAA,CAAgBA,QAAAA,CAAQ,GAAA,EAAK,WAAA,EAAa,CAAA,EAAG,IAAI,CAAA,uDAAA,EAA0D,WAAW,CAAA,CAAE,CAAC,CAAA;EAAA,IACzI;EAEA,IAAA,IAAI,IAAA,KAAS,QAAA,IAAY,IAAA,KAAS,QAAA,IAAY,SAAS,SAAA,IAAa,OAAOE,MAAAA,KAAU,QAAA,IAAY,OAAOA,MAAAA,KAAU,QAAA,IAAY,OAAOA,WAAU,SAAA,EAAW;EACtJ,MAAA,OAAO,CAAC,IAAI,eAAA,CAAgBF,SAAQ,GAAA,EAAK,WAAA,EAAa,wDAAwD,CAAC,CAAA;EAAA,IACnH;EAEA,IAAA,IAAI,IAAA,KAAS,QAAA,IAAY,YAAA,KAAiB,aAAA,EAAe;EACrD,MAAA,IAAI,OAAA,GAAU,oBAAoB,IAAI,CAAA,MAAA,CAAA;EACtC,MAAA,IAAI,0BAAA,CAA2B,iBAA+C,CAAA,IAAK,YAAA,KAAiB,MAAA,EAAW;EAC3G,QAAA,OAAA,IAAW,mFAAA;EAAA,MACf;EACA,MAAA,OAAO,CAAC,IAAI,eAAA,CAAgBA,SAAQ,GAAA,EAAK,WAAA,EAAa,OAAO,CAAC,CAAA;EAAA,IAClE;EAEA,IAAA,IAAI,YAAA,KAAiB,aAAA,IAAiB,IAAA,KAAS,QAAA,KAAa,OAAOE,MAAAA,KAAU,QAAA,IAAY,CAAC,QAAA,CAASA,MAAK,CAAA,IAAK,IAAA,CAAK,KAAA,CAAMA,MAAK,MAAMA,MAAAA,CAAAA,EAAQ;EAEvI,MAAA,OAAO,CAAC,IAAI,eAAA,CAAgBF,QAAAA,CAAQ,GAAA,EAAK,WAAA,EAAa,CAAA,wBAAA,EAA2B,MAAA,CAAOE,MAAK,CAAC,CAAA,CAAE,CAAC,CAAA;EAAA,IACrG;EAEA,IAAA,IAAI,YAAA,KAAiB,aAAA,IAAiB,IAAA,KAAS,QAAA,IAAY,OAAOA,MAAAA,KAAU,QAAA,IAAY,OAAO,uBAAA,KAA4B,QAAA,IAAY,uBAAA,KAA4B,MAAA,IAAaA,SAAQ,uBAAA,EAAyB;EAC7M,MAAA,OAAO,CAAC,IAAI,eAAA,CAAgBF,SAAQ,GAAA,EAAK,WAAA,EAAa,mDAAmD,CAAC,CAAA;EAAA,IAC9G,CAAA,MAAO;EACH,MAAA,uBAAA,GAA0BE,MAAAA;EAAA,IAC9B;EAEA,IAAA,IAAI,YAAA,KAAiB,aAAA,IAAkBA,MAAAA,IAAoB,gBAAA,EAAkB;EACzE,MAAA,OAAO,CAAC,IAAI,eAAA,CAAgBF,SAAQ,GAAA,EAAK,WAAA,EAAa,mCAAmC,CAAC,CAAA;EAAA,IAC9F,CAAA,MAAO;EACH,MAAA,gBAAA,CAAkBE,MAAgB,CAAA,GAAI,IAAA;EAAA,IAC1C;EAEA,IAAA,OAAO,EAAC;EAAA,EACZ;EAEA,EAAA,SAAS,wBAAwBF,QAAAA,EAAmC;EAChE,IAAA,OAAO,QAAA,CAAS;EAAA,MACZ,KAAKA,QAAAA,CAAQ,GAAA;EAAA,MACb,OAAOA,QAAAA,CAAQ,KAAA;EAAA,MACf,SAAA,EAAW,iBAAA;EAAA,MACX,OAAOA,QAAAA,CAAQ,KAAA;EAAA,MACf,WAAWA,QAAAA,CAAQ;EAAA,KACtB,CAAA;EAAA,EACL;EACJ;;ECvNA,SAAwB,mBAAmB,OAAA,EAAwD;EAC/F,EAAA,MAAM,UAAA,GAAA,CAAc,OAAA,CAAQ,iBAAA,KAAsB,UAAA,GAAa,wBAAA,GAA2B,gBAAA,EAAkB,YAAA,CAAa,OAAA,CAAQ,KAAK,CAAA,EAAG,OAAA,CAAQ,SAAuC,CAAA;EACxL,EAAA,IAAI,UAAA,CAAW,WAAW,OAAA,EAAS;EAC/B,IAAA,OAAO,UAAA,CAAW,KAAA,CAAM,GAAA,CAAI,CAAC,KAAA,KAAU;EACnC,MAAA,OAAO,IAAI,eAAA,CAAgB,CAAA,EAAG,OAAA,CAAQ,GAAG,CAAA,EAAG,KAAA,CAAM,GAAG,CAAA,CAAA,EAAI,OAAA,CAAQ,KAAA,EAAO,KAAA,CAAM,OAAO,CAAA;EAAA,IACzF,CAAC,CAAA;EAAA,EACL;EAGA,EAAA,MAAM,gBAAiB,UAAA,CAAW,KAAA,CAAc,UAAA,IAAe,UAAA,CAAW,MAAc,gBAAA,CAAiB,UAAA;EAEzG,EAAA,IAAI,OAAA,CAAQ,iBAAA,KAAsB,UAAA,IAAe,OAAA,CAAQ,WAAA,KAAgB,WAAA;EAAA,EAErE,CAAC,aAAA,CAAc,aAAA,EAAc,EAAG;EAChC,IAAA,OAAO,CAAC,IAAI,eAAA,CAAgB,OAAA,CAAQ,GAAA,EAAK,OAAA,CAAQ,KAAA,EAAO,CAAA,6BAAA,EAAgC,OAAA,CAAQ,WAAW,CAAA,qEAAA,CAAuE,CAAC,CAAA;EAAA,EACvL;EAEA,EAAA,IAAI,OAAA,CAAQ,iBAAA,KAAsB,UAAA,IAAc,OAAA,CAAQ,YAAA,KAAiB,QAAA;EAAA,EAEpE,CAAC,eAAA,CAAgB,aAAa,CAAA,EAAI;EACnC,IAAA,OAAO,CAAC,IAAI,eAAA,CAAgB,OAAA,CAAQ,KAAK,OAAA,CAAQ,KAAA,EAAO,4EAA4E,CAAC,CAAA;EAAA,EACzI;EAEA,EAAA,IAAI,OAAA,CAAQ,sBAAsB,QAAA,EAAU;EAExC,IAAA,OAAO,0BAAA,CAA2B,eAAe,OAAO,CAAA;EAAA,EAC5D;EAEA,EAAA,IAAI,OAAA,CAAQ,sBAAsB,YAAA,EAAc;EAE5C,IAAA,OAAO,oCAAA,CAAqC,eAAe,OAAO,CAAA;EAAA,EACtE;EAEA,EAAA,IAAI,QAAQ,iBAAA,IAAqB,OAAA,CAAQ,kBAAkB,OAAA,CAAQ,SAAS,MAAM,CAAA,EAAG;EAEjF,IAAA,IAAI,CAAC,wBAAA,CAAyB,aAAA,EAAe,CAAC,MAAA,EAAQ,eAAe,CAAC,CAAA,EAAG;EACrE,MAAA,OAAO,CAAC,IAAI,eAAA,CAAgB,OAAA,CAAQ,KAAK,OAAA,CAAQ,KAAA,EAAO,mFAAmF,CAAC,CAAA;EAAA,IAChJ;EAEA,IAAA,IAAI,QAAQ,iBAAA,KAAsB,iBAAA,IAAqB,CAAC,iBAAA,CAAkB,aAAa,CAAA,EAAG;EACtF,MAAA,OAAO,CAAC,IAAI,eAAA,CAAgB,OAAA,CAAQ,KAAK,OAAA,CAAQ,KAAA,EAAO,gGAAgG,CAAC,CAAA;EAAA,IAC7J;EAAA,EACJ;EAEA,EAAA,OAAO,EAAC;EACZ;EAGO,SAAS,0BAAA,CAA2B,GAAe,OAAA,EAAiC;EACvF,EAAA,MAAM,oBAAA,uBAA2B,GAAA,CAAI;EAAA,IACjC,MAAA;EAAA,IACA,eAAA;EAAA,IACA,OAAA;EAAA,IACA;EAAA,GACH,CAAA;EAGD,EAAA,IAAI,OAAA,CAAQ,SAAA,IAAa,OAAA,CAAQ,SAAA,CAAU,UAAA,EAAY;EAEnD,IAAA,KAAA,MAAW,KAAA,IAAS,OAAA,CAAQ,SAAA,CAAU,UAAA,CAAW,UAAA,EAAY;EAEzD,MAAA,oBAAA,CAAqB,OAAO,KAAK,CAAA;EAAA,IACrC;EAAA,EACJ;EAEA,EAAA,IAAI,oBAAA,CAAqB,SAAS,CAAA,EAAG;EACjC,IAAA,OAAO,EAAC;EAAA,EACZ;EACA,EAAA,MAAM,SAA4B,EAAC;EAEnC,EAAA,IAAI,aAAa,kBAAA,EAAoB;EACjC,IAAA,IAAI,oBAAA,CAAqB,GAAA,CAAI,CAAA,CAAE,IAAI,CAAA,EAAG;EAElC,MAAA,OAAO,CAAC,IAAI,eAAA,CAAgB,QAAQ,GAAA,EAAK,OAAA,CAAQ,OAAO,CAAA,EAAA,EAAK,CAAA,CAAE,IAAI,CAAA,iDAAA,EAAoD,OAAA,CAAQ,OAAO,IAAI,CAAA,gBAAA,EAAmB,QAAQ,MAAA,CAAO,EAAE,EAAE,CAAC,CAAA;EAAA,IACrL;EAAA,EACJ;EACA,EAAA,CAAA,CAAE,SAAA,CAAU,CAAC,GAAA,KAAQ;EACjB,IAAA,MAAA,CAAO,IAAA,CAAK,GAAG,0BAAA,CAA2B,GAAA,EAAK,OAAO,CAAC,CAAA;EAAA,EAC3D,CAAC,CAAA;EAED,EAAA,OAAO,MAAA;EACX;EAEA,MAAM,iBAAA,uBAAwB,GAAA,CAAI,CAAC,OAAO,KAAA,EAAO,YAAA,EAAc,eAAA,EAAiB,IAAI,CAAC,CAAA;EACrF,MAAM,iCAAA,uBAAwC,GAAA,CAAI;EAAA,EAC9C,MAAA;EAAA,EAAQ,OAAA;EAAA,EAAS,sBAAA;EAAA,EACjB,SAAA;EAAA,EAAW,eAAA;EAAA,EACX,eAAA;EAAA,EACA,iBAAA;EAAA,EAAmB,eAAA;EAAA,EACnB,cAAA;EAAA,EAAgB,uBAAA;EAAA,EAAyB;EAC7C,CAAC,CAAA;EAGD,SAAS,oCAAA,CAAqC,GAAe,OAAA,EAAiC;EAE1F,EAAA,IAAI,OAAA,CAAQ,SAAA,IAAa,OAAA,CAAQ,SAAA,CAAU,UAAA,EAAY;EAEnD,IAAA,KAAA,MAAW,KAAA,IAAS,OAAA,CAAQ,SAAA,CAAU,UAAA,CAAW,UAAA,EAAY;EAEzD,MAAA,iCAAA,CAAkC,OAAO,KAAK,CAAA;EAAA,IAClD;EAAA,EACJ;EAEA,EAAA,IAAI,iCAAA,CAAkC,SAAS,CAAA,EAAG;EAC9C,IAAA,OAAO,EAAC;EAAA,EACZ;EACA,EAAA,MAAM,SAA4B,EAAC;EAEnC,EAAA,IAAI,aAAa,kBAAA,EAAoB;EACjC,IAAA,MAAM,QAAQ,iBAAA,CAAkB,GAAA,CAAI,EAAE,IAAI,CAAA,GAAI,YAAY,CAAA,CAAE,IAAA;EAC5D,IAAA,IAAI,iCAAA,CAAkC,GAAA,CAAI,KAAK,CAAA,EAAG;EAE9C,MAAA,OAAO,CAAC,IAAI,eAAA,CAAgB,OAAA,CAAQ,GAAA,EAAK,OAAA,CAAQ,KAAA,EAAO,CAAA,EAAA,EAAK,CAAA,CAAE,IAAI,CAAA,8BAAA,CAAgC,CAAC,CAAA;EAAA,IACxG;EAAA,EACJ;EACA,EAAA,CAAA,CAAE,SAAA,CAAU,CAAC,GAAA,KAAQ;EACjB,IAAA,MAAA,CAAO,IAAA,CAAK,GAAG,oCAAA,CAAqC,GAAA,EAAK,OAAO,CAAC,CAAA;EAAA,EACrE,CAAC,CAAA;EAED,EAAA,OAAO,MAAA;EACX;;ECtIA,SAAwB,gBAAgB,OAAA,EAAqD;EACzF,EAAA,MAAM,QAAQ,OAAA,CAAQ,KAAA;EACtB,EAAA,MAAM,MAAM,OAAA,CAAQ,GAAA;EACpB,EAAA,IAAI,CAAC,SAAA,CAAU,KAAK,CAAA,EAAG;EACnB,IAAA,OAAO,CAAC,IAAI,eAAA,CAAgB,GAAA,EAAK,KAAA,EAAO,qBAAqB,OAAA,CAAQ,KAAK,CAAC,CAAA,MAAA,CAAQ,CAAC,CAAA;EAAA,EACxF;EAEA,EAAA,OAAO,EAAC;EACZ;;ECNA,SAAwB,aAAA,CAAc,EAAC,GAAA,EAAK,KAAA,EAAK,EAA6C;EAC1F,EAAA,IAAI,CAAC,QAAA,CAAS,KAAK,CAAA,EAAG;EAClB,IAAA,OAAO,CAAC,IAAI,eAAA,CAAgB,GAAA,EAAK,KAAA,EAAO,mBAAmB,OAAA,CAAQ,KAAK,CAAC,CAAA,MAAA,CAAQ,CAAC,CAAA;EAAA,EACtF;EAIA,EAAA,IAAI,MAAM,KAAA,CAAM,QAAA,CAAS,KAAK,CAAW,MAAM,MAAA,EAAW;EACtD,IAAA,OAAO,CAAC,IAAI,eAAA,CAAgB,GAAA,EAAK,OAAO,CAAA,iBAAA,EAAoB,KAAK,SAAS,CAAC,CAAA;EAAA,EAC/E;EAEA,EAAA,OAAO,EAAC;EACZ;;ECXA,SAAwB,aAAa,OAAA,EAAkD;EACnF,EAAA,MAAM,MAAM,OAAA,CAAQ,GAAA;EACpB,EAAA,MAAM,QAAQ,OAAA,CAAQ,KAAA;EACtB,EAAA,MAAM,YAAY,OAAA,CAAQ,SAAA;EAE1B,EAAA,MAAM,SAA4B,EAAC;EACnC,EAAA,IAAI,KAAA,CAAM,OAAA,CAAQ,SAAA,CAAU,MAAM,CAAA,EAAG;EACjC,IAAA,IAAI,CAAC,SAAA,CAAU,MAAA,CAAO,SAAS,QAAA,CAAS,KAAK,CAAC,CAAA,EAAG;EAE7C,MAAA,MAAA,CAAO,KAAK,IAAI,eAAA,CAAgB,GAAA,EAAK,KAAA,EAAO,oBAAoB,SAAA,CAAU,MAAA,CAAO,IAAA,CAAK,IAAI,CAAC,CAAA,GAAA,EAAM,IAAA,CAAK,UAAU,KAAK,CAAC,QAAQ,CAAC,CAAA;EAAA,IACnI;EAAA,EACJ,CAAA,MAAO;EACH,IAAA,IAAI,CAAC,MAAA,CAAO,IAAA,CAAK,SAAA,CAAU,MAAM,EAAE,QAAA,CAAS,QAAA,CAAS,KAAK,CAAW,CAAA,EAAG;EACpE,MAAA,MAAA,CAAO,IAAA,CAAK,IAAI,eAAA,CAAgB,GAAA,EAAK,OAAO,CAAA,iBAAA,EAAoB,MAAA,CAAO,KAAK,SAAA,CAAU,MAAM,EAAE,IAAA,CAAK,IAAI,CAAC,CAAA,GAAA,EAAM,IAAA,CAAK,UAAU,KAAK,CAAC,QAAQ,CAAC,CAAA;EAAA,IAChJ;EAAA,EACJ;EAEA,EAAA,OAAO,MAAA;EACX;;ECPA,SAAwB,eAAe,OAAA,EAAoD;EACvF,EAAA,IAAI,kBAAA,CAAmB,YAAA,CAAa,OAAA,CAAQ,KAAK,CAAC,CAAA,EAAG;EAEjD,IAAA,MAAM,SAAA,GAAY,QAAQ,SAAA,IAAa,MAAA;EAEvC,IAAA,OAAO,kBAAA,CAAmB;EAAA,MACtB,GAAG,OAAA;EAAA,MACH,iBAAA,EAAmB,QAAA;EAAA;EAAA,MAEnB,SAAA,EAAW,OAAA,CAAQ,SAAA,CAAU,CAAA,OAAA,EAAU,SAAS,CAAA,CAAE;EAAA,KACrD,CAAA;EAAA,EACL,CAAA,MAAO;EACH,IAAA,OAAO,4BAA4B,OAAO,CAAA;EAAA,EAC9C;EACJ;EAEA,SAAS,4BAA4B,OAAA,EAAoD;EACrF,EAAA,MAAM,QAAQ,OAAA,CAAQ,KAAA;EACtB,EAAA,MAAM,MAAM,OAAA,CAAQ,GAAA;EAEpB,EAAA,IAAI,CAAC,KAAA,CAAM,OAAA,CAAQ,KAAK,CAAA,EAAG;EACvB,IAAA,OAAO,CAAC,IAAI,eAAA,CAAgB,GAAA,EAAK,KAAA,EAAO,mBAAmB,OAAA,CAAQ,KAAK,CAAC,CAAA,MAAA,CAAQ,CAAC,CAAA;EAAA,EACtF;EAEA,EAAA,IAAI,KAAA,CAAM,SAAS,CAAA,EAAG;EAClB,IAAA,OAAO,CAAC,IAAI,eAAA,CAAgB,GAAA,EAAK,KAAA,EAAO,2CAA2C,CAAC,CAAA;EAAA,EACxF;EAEA,EAAA,MAAM,YAAY,OAAA,CAAQ,SAAA;EAC1B,EAAA,IAAI,SAA4B,YAAA,CAAa;EAAA,IACzC,GAAA,EAAK,GAAG,GAAG,CAAA,GAAA,CAAA;EAAA,IACX,KAAA,EAAO,MAAM,CAAC,CAAA;EAAA;EAAA,IAEd,WAAW,SAAA,CAAU;EAAA,GACxB,CAAA;EAED,EAAA,MAAM,WAAW,MAAM;EACnB,IAAA,IAAI,KAAA,CAAM,UAAU,CAAA,EAAG;EACnB,MAAA,IAAI,CAAC,QAAA,CAAS,KAAA,CAAM,CAAC,CAAC,CAAA,EAAG;EACrB,QAAA,MAAA,CAAO,KAAK,IAAI,eAAA,CAAgB,CAAA,EAAG,GAAG,OAAO,KAAA,CAAM,CAAC,CAAA,EAAG,CAAA,iBAAA,EAAoB,QAAQ,KAAA,CAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAA;EAAA,MACzG;EAAA,IACJ;EACA,IAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,KAAA,CAAM,QAAQ,CAAA,EAAA,EAAK;EACnC,MAAA,IAAI,QAAA,CAAS,KAAA,CAAM,CAAC,CAAC,MAAM,OAAA,EAAS;EAChC,QAAA,MAAA,GAAS,MAAA,CAAO,OAAO,YAAA,CAAa;EAAA,UAChC,GAAA,EAAK,CAAA,EAAG,GAAG,CAAA,CAAA,EAAI,CAAC,CAAA,CAAA,CAAA;EAAA,UAChB,KAAA,EAAO,MAAM,CAAC,CAAA;EAAA;EAAA,UAEd,WAAW,SAAA,CAAU;EAAA,SACxB,CAAC,CAAA;EAAA,MACN,WAAW,CAAC,QAAA,CAAS,MAAM,CAAC,CAAC,KAAK,CAAC,QAAA,CAAS,KAAA,CAAM,CAAC,CAAC,CAAA,IAAK,CAAC,UAAU,KAAA,CAAM,CAAC,CAAC,CAAA,EAAG;EAC3E,QAAA,MAAA,CAAO,KAAK,IAAI,eAAA,CAAgB,GAAG,GAAG,CAAA,CAAA,EAAI,CAAC,CAAA,CAAA,CAAA,EAAK,KAAA,CAAM,CAAC,CAAA,EAAG,wCAAwC,OAAA,CAAQ,KAAA,CAAM,CAAC,CAAC,CAAC,SAAS,CAAC,CAAA;EAAA,MACjI;EAAA,IACJ;EAAA,EACJ,CAAA;EAEA,EAAA,QAAQ,QAAA,CAAS,KAAA,CAAM,CAAC,CAAC,CAAA;EAAG,IAC5B,KAAK,GAAA;EAAA,IACL,KAAK,IAAA;EAAA,IACL,KAAK,GAAA;EAAA,IACL,KAAK,IAAA;EACD,MAAA,IAAI,KAAA,CAAM,UAAU,CAAA,IAAK,QAAA,CAAS,MAAM,CAAC,CAAC,MAAM,OAAA,EAAS;EACrD,QAAA,MAAA,CAAO,IAAA,CAAK,IAAI,eAAA,CAAgB,GAAA,EAAK,KAAA,EAAO,wCAAwC,KAAA,CAAM,CAAC,CAAC,CAAA,CAAA,CAAG,CAAC,CAAA;EAAA,MACpG;EACA,MAAA,IAAI,KAAA,CAAM,WAAW,CAAA,EAAG;EACpB,QAAA,MAAA,CAAO,IAAA,CAAK,IAAI,eAAA,CAAgB,GAAA,EAAK,KAAA,EAAO,8BAA8B,KAAA,CAAM,CAAC,CAAC,CAAA,sBAAA,CAAwB,CAAC,CAAA;EAAA,MAC/G;EACA,MAAA,QAAA,EAAS;EACT,MAAA;EAAA,IAEJ,KAAK,IAAA;EAAA,IACL,KAAK,IAAA;EACD,MAAA,IAAI,KAAA,CAAM,WAAW,CAAA,EAAG;EACpB,QAAA,MAAA,CAAO,IAAA,CAAK,IAAI,eAAA,CAAgB,GAAA,EAAK,KAAA,EAAO,8BAA8B,KAAA,CAAM,CAAC,CAAC,CAAA,sBAAA,CAAwB,CAAC,CAAA;EAAA,MAC/G;EACA,MAAA,QAAA,EAAS;EACT,MAAA;EAAA,IAEJ,KAAK,IAAA;EAAA,IACL,KAAK,KAAA;EACD,MAAA,QAAA,EAAS;EACT,MAAA;EAAA,IAEJ,KAAK,KAAA;EAAA,IACL,KAAK,KAAA;EAAA,IACL,KAAK,MAAA;EACD,MAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,KAAA,CAAM,QAAQ,CAAA,EAAA,EAAK;EACnC,QAAA,MAAA,GAAS,MAAA,CAAO,OAAO,2BAAA,CAA4B;EAAA,UAC/C,GAAA,EAAK,CAAA,EAAG,GAAG,CAAA,CAAA,EAAI,CAAC,CAAA,CAAA,CAAA;EAAA,UAChB,KAAA,EAAO,MAAM,CAAC,CAAA;EAAA,UACd,OAAO,OAAA,CAAQ,KAAA;EAAA,UACf,WAAW,OAAA,CAAQ;EAAA,SACtB,CAAC,CAAA;EAAA,MACN;EACA,MAAA;EAAA,IAEJ,KAAK,KAAA;EAAA,IACL,KAAK,MAAA;EACD,MAAA,IAAI,KAAA,CAAM,WAAW,CAAA,EAAG;EACpB,QAAA,MAAA,CAAO,IAAA,CAAK,IAAI,eAAA,CAAgB,GAAA,EAAK,KAAA,EAAO,qBAAqB,KAAA,CAAM,CAAC,CAAC,CAAA,+BAAA,CAAiC,CAAC,CAAA;EAAA,MAC/G,WAAW,CAAC,QAAA,CAAS,KAAA,CAAM,CAAC,CAAC,CAAA,EAAG;EAC5B,QAAA,MAAA,CAAO,KAAK,IAAI,eAAA,CAAgB,CAAA,EAAG,GAAG,OAAO,KAAA,CAAM,CAAC,CAAA,EAAG,CAAA,iBAAA,EAAoB,QAAQ,KAAA,CAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAA;EAAA,MACzG;EACA,MAAA;EAAA;EAGJ,EAAA,OAAO,MAAA;EACX;;ECnHA,MAAM,gBAAA,GAAmB,aAAA;EAazB,SAAwB,gBAAA,CAAiB,SAAmC,YAAA,EAAyC;EACjH,EAAA,MAAM,MAAM,OAAA,CAAQ,GAAA;EACpB,EAAA,MAAM,QAAQ,OAAA,CAAQ,KAAA;EACtB,EAAA,MAAM,QAAQ,OAAA,CAAQ,KAAA;EACtB,EAAA,MAAM,YAAY,OAAA,CAAQ,SAAA;EAC1B,EAAA,MAAM,QAAQ,OAAA,CAAQ,KAAA;EACtB,EAAA,MAAM,cAAc,OAAA,CAAQ,SAAA;EAC5B,EAAA,MAAM,YAAY,SAAA,CAAU,CAAA,EAAG,YAAY,CAAA,CAAA,EAAI,OAAA,CAAQ,SAAS,CAAA,CAAE,CAAA;EAElE,EAAA,IAAI,CAAC,SAAA,EAAW,OAAO,EAAC;EAExB,EAAA,MAAM,aAAA,GAAgB,WAAA,CAAY,KAAA,CAAM,gBAAgB,CAAA;EACxD,EAAA,IAAI,aAAA,IAAiB,SAAA,CAAU,aAAA,CAAc,CAAC,CAAC,CAAA,EAAG;EAC9C,IAAA,IAAI,YAAA,CAAa,YAAA,CAAa,KAAK,CAAC,CAAA,EAAG;EACnC,MAAA,MAAMC,UAA4B,EAAC;EACnC,MAAA,OAAOA,OAAAA,CAAO,OAAO,QAAA,CAAS;EAAA,QAC1B,GAAA;EAAA,QACA,KAAA;EAAA,QACA,SAAA,EAAW;EAAA,UACP,IAAA,EAAM,QAAA;EAAA,UACN,UAAA,EAAY;EAAA,YACR,YAAA,EAAc,KAAA;EAAA,YACd,UAAA,EAAY,CAAC,MAAA,EAAQ,SAAS;EAAA,WAClC;EAAA,UACA,eAAA,EAAiB;EAAA,SACrB;EAAA,QACA,KAAA;EAAA,QACA,SAAA;EAAA,QACA,iBAAA,EAAmB,UAAA;EAAA,QACnB,YAAA;EAAA,QACA;EAAA,OACH,CAAC,CAAA;EAAA,IACN;EAEA,IAAA,OAAO,QAAA,CAAS;EAAA,MACZ,GAAA;EAAA,MACA,KAAA;EAAA,MACA,SAAA,EAAW,EAAC,IAAA,EAAM,QAAA,EAAQ;EAAA,MAC1B,KAAA;EAAA,MACA;EAAA,KACH,CAAA;EAAA,EACL;EAEA,EAAA,MAAM,eAAA,GAAkB,WAAA,CAAY,KAAA,CAAM,iBAAiB,CAAA;EAC3D,EAAA,IAAI,YAAA,KAAiB,OAAA,IAAW,eAAA,IAAmB,SAAA,CAAU,eAAA,CAAgB,CAAC,CAAC,CAAA,IAAK,SAAA,CAAU,eAAA,CAAgB,CAAC,CAAC,EAAE,UAAA,EAAY;EAC1H,IAAA,OAAO,QAAA,CAAS;EAAA,MACZ,GAAA;EAAA,MACA,KAAA;EAAA;EAAA,MAEA,WAAW,SAAA,CAAU,UAAA;EAAA,MACrB,KAAA;EAAA,MACA;EAAA,KACH,CAAA;EAAA,EACL;EAEA,EAAA,MAAM,SAAA,GAAY,OAAA,CAAQ,SAAA,IAAa,SAAA,CAAU,WAAW,CAAA;EAC5D,EAAA,IAAI,CAAC,SAAA,EAAW;EACZ,IAAA,OAAO,CAAC,IAAI,iBAAA,CAAkB,GAAA,EAAK,OAAO,CAAA,kBAAA,EAAqB,WAAW,GAAG,CAAC,CAAA;EAAA,EAClF;EAEA,EAAA,IAAI,UAAA;EACJ,EAAA,IAAI,QAAA,CAAS,KAAK,CAAA,IAAK,0BAAA,CAA2B,SAAS,CAAA,IAAK,CAAC,SAAA,CAAU,MAAA,KAAW,UAAA,GAAa,gBAAA,CAAiB,IAAA,CAAK,KAAK,CAAA,CAAA,EAAI;EAC9H,IAAA,MAAM,OAAA,GAAU,uCAAuC,UAAA,GAAa,IAAA,CAAK,UAAU,UAAA,CAAW,CAAC,CAAC,CAAA,GAAI,KAAK,CAAA,IAAA,CAAA;EACzG,IAAA,OAAO,CAAC,IAAI,eAAA;EAAA,MACR,GAAA;EAAA,MAAK,KAAA;EAAA,MACL,IAAI,WAAW,CAAA;AAAA,2CAAA,EACmC,OAAO,CAAA,CAAA;EAAA,KAAI,CAAA;EAAA,EACrE;EAEA,EAAA,MAAM,SAA4B,EAAC;EAEnC,EAAA,IAAI,OAAA,CAAQ,cAAc,QAAA,EAAU;EAChC,IAAA,IAAI,WAAA,KAAgB,gBAAgB,KAAA,IAAS,CAAC,MAAM,MAAA,IAAU,CAAC,MAAM,OAAA,EAAS;EAC1E,MAAA,MAAA,CAAO,KAAK,IAAI,eAAA,CAAgB,GAAA,EAAK,KAAA,EAAO,wDAAwD,CAAC,CAAA;EAAA,IACzG;EACA,IAAA,IAAI,WAAA,KAAgB,WAAA,IAAe,UAAA,CAAW,YAAA,CAAa,KAAK,CAAC,CAAA,IAAK,QAAA,CAAU,KAAA,CAA0B,IAAI,CAAA,KAAM,UAAA,EAAY;EAC5H,MAAA,MAAA,CAAO,KAAK,IAAI,eAAA,CAAgB,GAAA,EAAK,KAAA,EAAO,iDAAiD,CAAC,CAAA;EAAA,IAClG;EAAA,EACJ,CAAA,MAAA,IAAW,OAAA,CAAQ,SAAA,KAAc,OAAA,IAAW,iBAAiB,OAAA,IAAW,KAAA,IAAS,KAAA,CAAM,MAAA,IAAU,MAAA,CAAO,MAAA,CAAO,KAAA,CAAM,MAAA,EAAQ,UAAU,CAAA,EAAG;EACtI,IAAA,IAAI,0BAAA,CAA2B,SAAS,CAAA,KAAM,uBAAA,CAAwB,SAAS,CAAA,IAAK,sBAAA,CAAuB,SAAS,CAAA,CAAA,EAAI;EAEpH,MAAA,MAAM,UAAA,GAAa,wBAAA,CAAyB,YAAA,CAAa,KAAK,GAAG,SAAS,CAAA;EAE1E,MAAA,MAAM,kBAAkB,UAAA,CAAW,KAAA;EACnC,MAAA,MAAM,aAAA,GAAiB,YAAA,IAAgB,eAAA,IAAmB,eAAA,CAAgB,UAAA,IACnD,sBAAsB,eAAA,IAAmB,eAAA,CAAgB,gBAAA,IAAoB,eAAA,CAAgB,gBAAA,CAAiB,UAAA;EAErI,MAAA,IAAI,iBAAiB,CAAC,wBAAA,CAAyB,eAAe,CAAC,eAAe,CAAC,CAAA,EAAG;EAC9E,QAAA,IAAI,WAAA,KAAgB,8BAA8B,CAAC,iBAAA,CAAkB,aAAa,CAAA,IAAK,CAAC,eAAA,CAAgB,aAAa,CAAA,CAAA,EAAI;EACrH,UAAA,MAAA,CAAO,IAAA,CAAK,IAAI,eAAA,CAAgB,GAAA,EAAK,OAAO,CAAA,EAAG,WAAW,oGAAoG,CAAC,CAAA;EAAA,QACnK;EAAA,MACJ;EAAA,IACJ;EAAA,EACJ;EAEA,EAAA,OAAO,MAAA,CAAO,OAAO,QAAA,CAAS;EAAA,IAC1B,KAAK,OAAA,CAAQ,GAAA;EAAA,IACb,KAAA;EAAA,IACA,SAAA;EAAA,IACA,KAAA;EAAA,IACA,SAAA;EAAA,IACA,iBAAA,EAAmB,UAAA;EAAA,IACnB,YAAA;EAAA,IACA;EAAA,GACH,CAAC,CAAA;EACN;;EC9GA,SAAwB,mBAAmB,OAAA,EAA6D;EACpG,EAAA,MAAM,EAAC,GAAA,EAAK,KAAA,EAAO,SAAA,EAAS,GAAI,OAAA;EAChC,EAAA,MAAM,KAAA,GAAQ,QAAA,CAAS,OAAA,CAAQ,KAAK,CAAA;EACpC,EAAA,MAAM,IAAA,GAAO,QAAA,CAAS,KAAA,CAAM,IAAI,CAAA;EAChC,EAAA,MAAM,SAAA,GAAY,QAAA,CAAS,KAAA,CAAM,SAAS,CAAA;EAE1C,EAAA,MAAM,SAAS,cAAA,CAAe;EAAA,IAC1B,GAAA;EAAA,IACA,KAAA;EAAA,IACA,SAAA,EAAW,QAAQ,SAAA,CAAU,UAAA;EAAA,IAC7B,OAAO,OAAA,CAAQ,KAAA;EAAA,IACf,WAAW,OAAA,CAAQ,SAAA;EAAA,IACnB,uBAAA,EAAyB;EAAA,MACrB,SAAA,EAAW,CAACD,QAAAA,KAAY,iBAAA,CAAkB,EAAmB,GAAGA,QAAAA,EAAQ,CAAA;EAAA,MACxE,UAAA,EAAY,CAACA,QAAAA,KAAY,kBAAA,CAAmB,EAAC,KAAA,EAAO,SAAA,EAAW,GAAGA,QAAAA,EAAQ;EAAA;EAC9E,GACH,CAAA;EAED,EAAA,IAAI,IAAA,KAAS,QAAA,IAAY,SAAA,KAAc,MAAA,EAAW;EAC9C,IAAA,MAAA,CAAO,KAAK,IAAI,eAAA,CAAgB,QAAQ,GAAA,EAAK,MAAA,EAAQ,oEAAoE,CAAC,CAAA;EAAA,EAC9H;EAEA,EAAA,OAAO,MAAA;EACX;EAEA,SAAS,mBAAmB,OAAA,EAA6D;EACrF,EAAA,MAAM,SAAiC,EAAC;EAExC,EAAA,MAAM,EAAC,SAAA,EAAW,KAAA,EAAO,SAAA,EAAS,GAAI,OAAA;EAEtC,EAAA,MAAM,eAAA,GAAkB,SAAA,CAAU,CAAA,MAAA,EAAS,SAAS,CAAA,CAAE,CAAA;EACtD,EAAA,MAAM,gBAAA,GAAmB,SAAA,CAAU,CAAA,OAAA,EAAU,SAAS,CAAA,CAAE,CAAA;EACxD,EAAA,MAAM,UAAA,GAAa,OAAA,CAAQ,MAAA,CAAO,OAAA,CAAQ,SAAS,CAAA;EAEnD,EAAA,KAAA,MAAW,eAAe,UAAA,EAAY;EAClC,IAAA,MAAM,eACF,WAAA,IAAe,eAAA,GAAkB,OAAA,GACjC,WAAA,IAAe,mBAAmB,QAAA,GAClC,MAAA;EAEJ,IAAA,IAAI,CAAC,YAAA,EAAc;EACf,MAAA,MAAA,CAAO,IAAA,CAAK,IAAI,eAAA,CAAgB,OAAA,CAAQ,GAAA,EAAK,WAAA,EAAa,CAAA,kBAAA,EAAqB,WAAW,CAAA,kBAAA,EAAqB,SAAS,CAAA,CAAA,CAAG,CAAC,CAAA;EAC5H,MAAA;EAAA,IACJ;EAEA,IAAA,MAAM,yBAAA,GAA4B;EAAA,MAC9B,GAAG,OAAA;EAAA,MACH,GAAA,EAAK,CAAA,EAAG,OAAA,CAAQ,GAAG,IAAI,WAAW,CAAA,CAAA;EAAA,MAElC,SAAA,EAAW,WAAA;EAAA,MACX,KAAA;EAAA,MACA,SAAA;EAAA,MACA,KAAA,EAAO,WAAW,WAAW,CAAA;EAAA,MAC7B,WAAY,YAAA,KAAiB,OAAA,GAAU,gBAAgB,WAAW,CAAA,GAAI,iBAAiB,WAAW;EAAA,KACtG;EAEA,IAAA,MAAA,CAAO,IAAA,CAAK,GAAG,gBAAA,CAAiB,yBAAA,EAA2B,YAAY,CAAC,CAAA;EAAA,EAC5E;EAEA,EAAA,OAAO,MAAA;EACX;EAEA,SAAS,kBAAkB,OAAA,EAA6D;EACpF,EAAA,MAAM,SAAiC,EAAC;EAExC,EAAA,MAAM,aAAa,OAAA,CAAQ,MAAA;EAC3B,EAAA,MAAM,YAAY,UAAA,CAAW,SAAA;EAE7B,EAAA,MAAA,CAAO,IAAA,CAAK,GAAG,kBAAA,CAAmB;EAAA,IAC9B,KAAK,OAAA,CAAQ,GAAA;EAAA,IACb,KAAA,EAAO,SAAA;EAAA,IACP,SAAA,EAAYR,EAAA,CAAO,YAAY,CAAA,CAA8B,WAAW,CAAA;EAAA,IACxE,iBAAA,EAAmB;EAAA,GACtB,CAAC,CAAA;EAEF,EAAA,OAAO,MAAA;EACX;;EC7FA,SAAwB,sBAAsB,OAAA,EAAsD;EAChG,EAAA,OAAO,gBAAA,CAAiB,SAAS,OAAO,CAAA;EAC5C;;ECFA,SAAwB,uBAAuB,OAAA,EAAsD;EACjG,EAAA,OAAO,gBAAA,CAAiB,SAAS,QAAQ,CAAA;EAC7C;;ECgBA,SAAwB,cAAc,OAAA,EAAmD;EACrF,EAAA,IAAI,SAA4B,EAAC;EAEjC,EAAA,MAAM,QAAQ,OAAA,CAAQ,KAAA;EACtB,EAAA,MAAM,MAAM,OAAA,CAAQ,GAAA;EACpB,EAAA,MAAM,QAAQ,OAAA,CAAQ,KAAA;EACtB,EAAA,MAAM,YAAY,OAAA,CAAQ,SAAA;EAE1B,EAAA,IAAI,CAAC,QAAA,CAAS,KAAK,CAAA,EAAG;EAClB,IAAA,OAAO,CAAC,IAAI,eAAA,CAAgB,GAAA,EAAK,KAAA,EAAO,iBAAiB,CAAC,CAAA;EAAA,EAC9D;EAEA,EAAA,IAAI,CAAC,KAAA,CAAM,IAAA,IAAQ,CAAC,MAAM,GAAA,EAAK;EAC3B,IAAA,MAAA,CAAO,KAAK,IAAI,eAAA,CAAgB,GAAA,EAAK,KAAA,EAAO,oCAAoC,CAAC,CAAA;EAAA,EACrF;EAEA,EAAA,IAAI,IAAA,GAAO,QAAA,CAAS,KAAA,CAAM,IAAI,CAAA;EAC9B,EAAA,MAAM,GAAA,GAAM,QAAA,CAAS,KAAA,CAAM,GAAG,CAAA;EAE9B,EAAA,IAAI,MAAM,EAAA,EAAI;EACV,IAAA,MAAM,OAAA,GAAU,QAAA,CAAS,KAAA,CAAM,EAAE,CAAA;EACjC,IAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,OAAA,CAAQ,YAAY,CAAA,EAAA,EAAK;EACzC,MAAA,MAAM,UAAA,GAAa,KAAA,CAAM,MAAA,CAAO,CAAC,CAAA;EACjC,MAAA,IAAI,QAAA,CAAS,UAAA,CAAW,EAAE,CAAA,KAAM,OAAA,EAAS;EACrC,QAAA,MAAA,CAAO,IAAA,CAAK,IAAI,eAAA,CAAgB,GAAA,EAAK,KAAA,CAAM,EAAA,EAAI,CAAA,oBAAA,EAAuB,OAAO,CAAA,2BAAA,EAA+B,UAAA,CAAW,EAAA,CAA2B,QAAQ,EAAE,CAAC,CAAA;EAAA,MACjK;EAAA,IACJ;EAAA,EACJ;EAEA,EAAA,IAAI,SAAS,KAAA,EAAO;EAChB,IAAA,CAAC,MAAA,EAAQ,UAAU,cAAA,EAAgB,QAAA,EAAU,QAAQ,CAAA,CAAE,OAAA,CAAQ,CAAC,CAAA,KAAM;EAClE,MAAA,IAAI,KAAK,KAAA,EAAO;EACZ,QAAA,MAAA,CAAO,IAAA,CAAK,IAAI,eAAA,CAAgB,GAAA,EAAK,KAAA,CAAM,CAAC,CAAA,EAAG,CAAA,CAAA,EAAI,CAAC,CAAA,8BAAA,CAAgC,CAAC,CAAA;EAAA,MACzF;EAAA,IACJ,CAAC,CAAA;EAED,IAAA,IAAI,MAAA;EAEJ,IAAA,KAAA,CAAM,MAAA,CAAO,OAAA,CAAQ,CAACW,MAAAA,KAAU;EAC5B,MAAA,IAAI,QAAA,CAASA,MAAAA,CAAM,EAAE,CAAA,KAAM,KAAK,MAAA,GAASA,MAAAA;EAAA,IAC7C,CAAC,CAAA;EAED,IAAA,IAAI,CAAC,MAAA,EAAQ;EACT,MAAA,IAAI,OAAO,GAAA,KAAQ,QAAA;EACf,QAAA,MAAA,CAAO,IAAA,CAAK,IAAI,eAAA,CAAgB,GAAA,EAAK,MAAM,GAAA,EAAK,CAAA,WAAA,EAAc,GAAG,CAAA,WAAA,CAAa,CAAC,CAAA;EAAA,IACvF,CAAA,MAAA,IAAY,OAAgD,GAAA,EAAK;EAC7D,MAAA,MAAA,CAAO,KAAK,IAAI,eAAA,CAAgB,KAAK,KAAA,CAAM,GAAA,EAAK,wCAAwC,CAAC,CAAA;EAAA,IAC7F,CAAA,MAAO;EACH,MAAA,IAAA,GAAO,QAAA,CAAS,OAAO,IAAI,CAAA;EAAA,IAC/B;EAAA,EACJ,WAAW,EAAE,IAAA,KAAS,gBAAgB,IAAA,KAAS,KAAA,IAAS,SAAS,MAAA,CAAA,EAAS;EACtE,IAAA,IAAI,CAAC,MAAM,MAAA,EAAQ;EACf,MAAA,MAAA,CAAO,KAAK,IAAI,eAAA,CAAgB,GAAA,EAAK,KAAA,EAAO,oCAAoC,CAAC,CAAA;EAAA,IACrF,CAAA,MAAA,IAAW,CAAC,QAAA,CAAS,KAAA,CAAM,MAAM,CAAA,EAAG;EAChC,MAAA,MAAA,CAAO,IAAA,CAAK,IAAI,eAAA,CAAgB,CAAA,EAAG,GAAG,CAAA,OAAA,CAAA,EAAW,KAAA,CAAM,MAAA,EAAQ,2BAA2B,CAAC,CAAA;EAAA,IAC/F,CAAA,MAAO;EAIH,MAAA,MAAM,MAAA,GAAS,KAAA,CAAM,OAAA,IAAW,MAAA,CAAO,OAAO,KAAA,CAAM,OAAA,EAAS,KAAA,CAAM,MAAM,CAAA,GAAI,KAAA,CAAM,OAAA,CAAQ,KAAA,CAAM,MAAM,CAAA,GAAI,MAAA;EAC3G,MAAA,MAAM,UAAA,GAAa,MAAA,IAAU,QAAA,CAAS,MAAA,CAAO,IAAI,CAAA;EACjD,MAAA,IAAI,CAAC,MAAA,EAAQ;EACT,QAAA,MAAA,CAAO,IAAA,CAAK,IAAI,eAAA,CAAgB,GAAA,EAAK,KAAA,CAAM,QAAQ,CAAA,QAAA,EAAW,KAAA,CAAM,MAAM,CAAA,WAAA,CAAa,CAAC,CAAA;EAAA,MAC5F,CAAA,MAAA,IAAW,UAAA,KAAe,QAAA,IAAY,IAAA,KAAS,QAAA,EAAU;EACrD,QAAA,MAAA,CAAO,IAAA,CAAK,IAAI,eAAA,CAAgB,GAAA,EAAK,KAAA,CAAM,QAAQ,CAAA,OAAA,EAAU,KAAA,CAAM,EAAY,CAAA,0BAAA,CAA4B,CAAC,CAAA;EAAA,MAChH,CAAA,MAAA,IAAW,UAAA,KAAe,QAAA,IAAY,IAAA,KAAS,QAAA,EAAU;EACrD,QAAA,MAAA,CAAO,IAAA,CAAK,IAAI,eAAA,CAAgB,GAAA,EAAK,KAAA,CAAM,QAAQ,CAAA,OAAA,EAAU,KAAA,CAAM,EAAY,CAAA,0BAAA,CAA4B,CAAC,CAAA;EAAA,MAChH,WAAW,UAAA,KAAe,QAAA,IAAY,CAAC,KAAA,CAAM,cAAc,CAAA,EAAG;EAC1D,QAAA,MAAA,CAAO,IAAA,CAAK,IAAI,eAAA,CAAgB,GAAA,EAAK,OAAO,CAAA,OAAA,EAAU,KAAA,CAAM,EAAY,CAAA,+BAAA,CAAiC,CAAC,CAAA;EAAA,MAC9G,CAAA,MAAA,IAAW,UAAA,KAAe,YAAA,IAAgB,IAAA,KAAS,WAAA,EAAa;EAC5D,QAAA,MAAA,CAAO,KAAK,IAAI,eAAA,CAAgB,KAAK,KAAA,CAAM,MAAA,EAAQ,iEAAmE,CAAC,CAAA;EAAA,MAC3H,CAAA,MAAA,IAAW,UAAA,KAAe,cAAA,IAAkB,CAAC,CAAC,UAAU,iBAAiB,CAAA,CAAE,QAAA,CAAS,IAAI,CAAA,EAAG;EACvF,QAAA,MAAA,CAAO,KAAK,IAAI,eAAA,CAAgB,KAAK,KAAA,CAAM,MAAA,EAAQ,gEAAkE,CAAC,CAAA;EAAA,MAC1H,CAAA,MAAA,IAAW,IAAA,KAAS,MAAA,IAAU,KAAA,CAAM,KAAA,IAAS,KAAA,CAAM,KAAA,CAAM,eAAe,CAAA,KAC/D,UAAA,KAAe,SAAA,IAAa,CAAE,OAAsC,WAAA,CAAA,EAAc;EACvF,QAAA,MAAA,CAAO,IAAA,CAAK,IAAI,eAAA,CAAgB,GAAA,EAAK,OAAO,CAAA,OAAA,EAAU,KAAA,CAAM,EAAY,CAAA,+FAAA,CAAiG,CAAC,CAAA;EAAA,MAC9K,CAAA,MAAA,IAAW,IAAA,KAAS,MAAA,IAAU,KAAA,CAAM,KAAA,IAAS,KAAA,CAAM,KAAA,CAAM,kBAAkB,CAAA,KAClE,UAAA,KAAe,SAAA,IAAa,CAAE,OAAsC,WAAA,CAAA,EAAc;EACvF,QAAA,MAAA,CAAO,IAAA,CAAK,IAAI,eAAA,CAAgB,GAAA,EAAK,OAAO,CAAA,OAAA,EAAU,KAAA,CAAM,EAAY,CAAA,kGAAA,CAAoG,CAAC,CAAA;EAAA,MACjL,CAAA,MAAA,IAAW,IAAA,KAAS,iBAAA,IAAqB,UAAA,KAAe,cAAA,EAAgB;EACpE,QAAA,MAAA,CAAO,IAAA,CAAK,IAAI,eAAA,CAAgB,GAAA,EAAK,KAAA,CAAM,QAAQ,CAAA,OAAA,EAAU,KAAA,CAAM,EAAY,CAAA,mCAAA,CAAuC,CAAC,CAAA;EAAA,MAC3H;EAAA,IACJ;EAAA,EACJ;EAEA,EAAA,MAAA,GAAS,MAAA,CAAO,OAAO,cAAA,CAAe;EAAA,IAClC,GAAA;EAAA,IACA,KAAA,EAAO,KAAA;EAAA;EAAA,IAEP,WAAW,SAAA,CAAU,KAAA;EAAA,IACrB,OAAO,OAAA,CAAQ,KAAA;EAAA,IACf,WAAW,OAAA,CAAQ,SAAA;EAAA,IACnB,uBAAA,EAAyB;EAAA,MACrB,GAAA,GAAM;EACF,QAAA,OAAO,EAAC;EAAA,MACZ,CAAA;EAAA;EAAA;EAAA,MAGA,IAAA,GAAO;EACH,QAAA,OAAOJ,QAAA,CAAa;EAAA,UAChB,GAAA,EAAK,GAAG,GAAG,CAAA,KAAA,CAAA;EAAA,UACX,OAAO,KAAA,CAAM,IAAA;EAAA;EAAA,UAEb,SAAA,EAAW,UAAU,KAAA,CAAM,IAAA;EAAA,UAC3B,OAAO,OAAA,CAAQ,KAAA;EAAA,UACf,WAAW,OAAA,CAAQ,SAAA;EAAA,UACnB,MAAA,EAAQ,KAAA;EAAA,UACR,SAAA,EAAW;EAAA,SACd,CAAA;EAAA,MACL,CAAA;EAAA,MACA,OAAOC,QAAAA,EAAS;EACZ,QAAA,OAAO,eAAe,EAAC,SAAA,EAAW,IAAA,EAAM,GAAGA,UAAQ,CAAA;EAAA,MACvD,CAAA;EAAA,MACA,OAAOA,QAAAA,EAAS;EACZ,QAAA,OAAO,cAAA,CAAe;EAAA,UAClB,KAAA;EAAA,UACA,KAAKA,QAAAA,CAAQ,GAAA;EAAA,UACb,OAAOA,QAAAA,CAAQ,KAAA;EAAA,UACf,WAAW,EAAC;EAAA,UACZ,OAAOA,QAAAA,CAAQ,KAAA;EAAA,UACf,WAAWA,QAAAA,CAAQ,SAAA;EAAA,UACnB,uBAAA,EAAyB;EAAA,YACrB,IAAIA,QAAAA,EAAmC;EACnC,cAAA,OAAO,uBAAuB,EAAC,SAAA,EAAW,IAAA,EAAM,GAAGA,UAAQ,CAAA;EAAA,YAC/D;EAAA;EACJ,SACH,CAAA;EAAA,MACL,CAAA;EAAA,MACA,MAAMA,QAAAA,EAAS;EACX,QAAA,OAAO,cAAA,CAAe;EAAA,UAClB,KAAA;EAAA,UACA,KAAKA,QAAAA,CAAQ,GAAA;EAAA,UACb,OAAOA,QAAAA,CAAQ,KAAA;EAAA,UACf,WAAW,EAAC;EAAA,UACZ,OAAOA,QAAAA,CAAQ,KAAA;EAAA,UACf,WAAWA,QAAAA,CAAQ,SAAA;EAAA,UACnB,uBAAA,EAAyB;EAAA,YACrB,IAAIA,QAAAA,EAAmC;EACnC,cAAA,OAAO,sBAAsB,EAAC,SAAA,EAAW,MAAM,KAAA,EAAO,GAAGA,UAAQ,CAAA;EAAA,YACrE;EAAA;EACJ,SACH,CAAA;EAAA,MACL,CAAA;EAAA,MACA,YAAYA,QAAAA,EAAS;EACjB,QAAA,MAAM,mBAAmB,aAAA,CAAc;EAAA,UACnC,KAAKA,QAAAA,CAAQ,GAAA;EAAA,UACb,OAAOA,QAAAA,CAAQ,KAAA;EAAA,UAEf,WAAWA,QAAAA,CAAQ,SAAA;EAAA,UACnB,OAAOA,QAAAA,CAAQ,KAAA;EAAA,UACf,WAAWA,QAAAA,CAAQ,SAAA;EAAA,UACnB,qBAAA,EAAuB,CAACA,QAAAA,KAAY,kBAAA,CAAoB,EAAC,WAAW,IAAA,EAAM,KAAA,EAAO,GAAIA,QAAAA,EAAkD;EAAA,SAC1I,CAAA;EAED,QAAA,MAAM,WAAA,GAAc,MAAM,OAAA,CAAQA,QAAAA,CAAQ,KAAK,CAAA,GAAIA,QAAAA,CAAQ,QAAQ,EAAC;EACpE,QAAA,MAAM,YAAA,uBAAmB,GAAA,EAAY;EACrC,QAAA,WAAA,CAAY,OAAA,CAAQ,CAAC,CAAA,EAAG,KAAA,KAAU;EAE9B,UAAA,MAAM,IAAA,GAA2B,QAAA,CAAS,CAAA,CAAE,IAAI,CAAA;EAChD,UAAA,IAAI,IAAA,EAAM;EACN,YAAA,IAAI,YAAA,CAAa,GAAA,CAAI,IAAI,CAAA,EAAG;EACxB,cAAA,MAAM,OAAA,GAAU,QAAA,CAAU,KAAA,CAA6B,EAAE,CAAA;EACzD,cAAA,gBAAA,CAAiB,IAAA,CAAK,IAAI,eAAA,CAAgBA,QAAAA,CAAQ,GAAA,EAAK,IAAA,EAAM,CAAA,4BAAA,EAA+B,IAAI,CAAA,aAAA,EAAgB,OAAO,CAAA,CAAA,CAAG,CAAC,CAAA;EAAA,YAC/H,CAAA,MAAO;EACH,cAAA,YAAA,CAAa,IAAI,IAAI,CAAA;EAAA,YACzB;EAAA,UACJ;EAAA,QACJ,CAAC,CAAA;EAED,QAAA,OAAO,gBAAA;EAAA,MACX;EAAA;EACJ,GACH,CAAC,CAAA;EAEF,EAAA,OAAO,MAAA;EACX;;EC9LA,SAAwB,cAAA,CAAe,EAAC,GAAA,EAAK,KAAA,EAAK,EAA8C;EAC5F,EAAA,IAAI,QAAA,CAAS,KAAK,CAAA,EAAG;EACjB,IAAA,OAAO,EAAC;EAAA,EACZ;EAEA,EAAA,OAAO,CAAC,IAAI,eAAA,CAAgB,GAAA,EAAK,KAAA,EAAO,oBAAoB,OAAA,CAAQ,KAAK,CAAC,CAAA,MAAA,CAAQ,CAAC,CAAA;EACvF;;ECDA,MAAM,uBAAA,GAA0B;EAAA,EAC5B,SAAA,EAAW;EACf,CAAA;EASA,SAAwB,eAAe,OAAA,EAAoD;EACvF,EAAA,MAAM,QAAQ,OAAA,CAAQ,KAAA;EACtB,EAAA,MAAM,MAAM,OAAA,CAAQ,GAAA;EACpB,EAAA,MAAM,YAAY,OAAA,CAAQ,SAAA;EAC1B,EAAA,MAAM,QAAQ,OAAA,CAAQ,KAAA;EAEtB,EAAA,IAAI,CAAC,QAAA,CAAS,KAAK,CAAA,EAAG;EAClB,IAAA,OAAO,CAAC,IAAI,eAAA,CAAgB,GAAA,EAAK,KAAA,EAAO,oBAAoB,OAAA,CAAQ,KAAK,CAAC,CAAA,MAAA,CAAQ,CAAC,CAAA;EAAA,EACvF;EAEA,EAAA,IAAI,EAAE,UAAU,KAAA,CAAA,EAAQ;EACpB,IAAA,OAAO,CAAC,IAAI,eAAA,CAAgB,GAAA,EAAK,KAAA,EAAO,oBAAoB,CAAC,CAAA;EAAA,EACjE;EAEA,EAAA,MAAM,IAAA,GAAO,QAAA,CAAS,KAAA,CAAM,IAAI,CAAA;EAChC,EAAA,IAAI,SAA4B,EAAC;EAEjC,EAAA,IAAI,CAAC,UAAU,QAAA,EAAU,YAAA,EAAc,cAAc,CAAA,CAAE,QAAA,CAAS,IAAI,CAAA,EAAG;EACnE,IAAA,IAAI,EAAE,KAAA,IAAS,KAAA,CAAA,IAAU,EAAE,WAAW,KAAA,CAAA,EAAQ;EAC1C,MAAA,MAAA,CAAO,KAAK,IAAI,iBAAA,CAAkB,GAAA,EAAK,KAAA,EAAO,sCAAsC,CAAC,CAAA;EAAA,IACzF;EAAA,EACJ;EAEA,EAAA,QAAQ,IAAA;EAAM,IACd,KAAK,QAAA;EAAA,IACL,KAAK,QAAA;EAAA,IACL,KAAK,YAAA;EAAA,IACL,KAAK,cAAA;EACD,MAAA,MAAA,GAAS,MAAA,CAAO,OAAO,cAAA,CAAe;EAAA,QAClC,GAAA;EAAA,QACA,KAAA;EAAA;EAAA,QAEA,SAAA,EAAW,UAAU,CAAA,OAAA,EAAU,IAAA,CAAK,QAAQ,GAAA,EAAK,GAAG,CAAC,CAAA,CAAE,CAAA;EAAA,QACvD,OAAO,OAAA,CAAQ,KAAA;EAAA,QACf,SAAA;EAAA,QACA;EAAA,OACH,CAAC,CAAA;EACF,MAAA,OAAO,MAAA;EAAA,IACX,KAAK,SAAA;EACD,MAAA,MAAA,GAAS,cAAA,CAAe;EAAA,QACpB,GAAA;EAAA,QACA,KAAA;EAAA;EAAA,QAEA,WAAW,SAAA,CAAU,cAAA;EAAA,QACrB,KAAA;EAAA,QACA,SAAA;EAAA,QACA;EAAA,OACH,CAAA;EAED,MAAA,IAAI,SAAA,IAAa,KAAA,IAAS,mBAAA,IAAuB,KAAA,EAAO;EACpD,QAAA,IAAI,CAAC,QAAA,CAAS,KAAA,CAAM,iBAAiB,CAAA,EAAG;EACpC,UAAA,OAAO,CAAC,IAAI,eAAA,CAAgB,CAAA,EAAG,GAAG,CAAA,kBAAA,CAAA,EAAsB,KAAA,EAAO,CAAA,iBAAA,EAAoB,OAAA,CAAQ,KAAK,CAAC,CAAA,MAAA,CAAQ,CAAC,CAAA;EAAA,QAC9G;EAEA,QAAA,KAAA,MAAW,IAAA,IAAQ,MAAM,iBAAA,EAAmB;EACxC,UAAA,MAAM,SAAA,GAAY,KAAA,CAAM,iBAAA,CAAkB,IAAI,CAAA;EAC9C,UAAA,IAAI,CAAC,KAAA,CAAM,OAAA,CAAQ,SAAS,CAAA,EAAG;EAC3B,YAAA,OAAO,CAAC,IAAI,eAAA,CAAgB,CAAA,EAAG,GAAG,sBAAsB,IAAI,CAAA,CAAA,EAAI,SAAA,EAAW,gBAAgB,CAAC,CAAA;EAAA,UAChG;EAGA,UAAA,MAAM,CAAC,QAAA,EAAU,OAAO,CAAA,GAAI,SAAA;EAE5B,UAAA,MAAM,UAAA,GAAa,OAAO,QAAA,KAAa,QAAA,GAAW,CAAC,QAAA,EAAU,CAAC,aAAa,CAAA,EAAG,CAAC,KAAA,EAAO,IAAI,CAAC,CAAA,GAAI,QAAA;EAE/F,UAAA,MAAA,CAAO,IAAA,CAAK,GAAG,kBAAA,CAAmB;EAAA,YAC9B,GAAA,EAAK,CAAA,EAAG,GAAG,CAAA,CAAA,EAAI,IAAI,CAAA,IAAA,CAAA;EAAA,YACnB,KAAA,EAAO,OAAA;EAAA,YACP,iBAAA,EAAmB;EAAA,WACtB,CAAC,CAAA;EAEF,UAAA,MAAA,CAAO,IAAA,CAAK,GAAG,kBAAA,CAAmB;EAAA,YAC9B,GAAA,EAAK,CAAA,EAAG,GAAG,CAAA,CAAA,EAAI,IAAI,CAAA,OAAA,CAAA;EAAA,YACnB,KAAA,EAAO,UAAA;EAAA,YACP,iBAAA,EAAmB;EAAA,WACtB,CAAC,CAAA;EAAA,QACN;EAAA,MACJ;EAEA,MAAA,OAAO,MAAA;EAAA,IACX,KAAK,OAAA;EACD,MAAA,OAAO,cAAA,CAAe;EAAA,QAClB,GAAA;EAAA,QACA,KAAA;EAAA;EAAA,QAEA,WAAW,SAAA,CAAU,YAAA;EAAA,QACrB,KAAA;EAAA,QACA;EAAA,OACH,CAAA;EAAA,IAEL,KAAK,OAAA;EACD,MAAA,OAAO,cAAA,CAAe;EAAA,QAClB,GAAA;EAAA,QACA,KAAA;EAAA;EAAA,QAEA,WAAW,SAAA,CAAU,YAAA;EAAA,QACrB,KAAA;EAAA,QACA;EAAA,OACH,CAAA;EAAA,IAEL,KAAK,QAAA;EACD,MAAA,OAAO,CAAC,IAAI,eAAA,CAAgB,KAAK,IAAA,EAAM,CAAA,yFAAA,CAAA,EAA6F,eAAe,CAAC,CAAA;EAAA,IAExJ;EACI,MAAA,OAAO,YAAA,CAAa;EAAA,QAChB,GAAA,EAAK,GAAG,GAAG,CAAA,KAAA,CAAA;EAAA,QACX,OAAQ,KAAA,CAA0B,IAAA;EAAA,QAClC,SAAA,EAAW,EAAC,MAAA,EAAQ,mBAAA,CAAoB,SAAS,CAAA;EAAC,OACrD,CAAA;EAAA;EAET;EAEA,SAAS,oBAAoB,SAAA,EAAqC;EAC9D,EAAA,MAAM,cAAc,SAAA,CAAU,MAAA;EAC9B,EAAA,OAAO,WAAA,CAAY,MAAA,CAAO,CAAC,IAAA,EAAgB,MAAA,KAAmB;EAE1D,IAAA,MAAM,UAAA,GAAc,UAAsC,MAAM,CAAA;EAChE,IAAA,IAAI,UAAA,CAAW,IAAA,CAAK,IAAA,KAAS,MAAA,EAAQ;EACjC,MAAA,IAAA,GAAO,IAAA,CAAK,OAAO,MAAA,CAAO,IAAA,CAAK,WAAW,IAAA,CAAK,MAAA,IAAU,EAAE,CAAC,CAAA;EAAA,IAChE;EACA,IAAA,OAAO,IAAA;EAAA,EACX,CAAA,EAAG,EAAE,CAAA;EACT;EAOA,SAAS,iBAAA,CAAkB,EAAC,GAAA,EAAK,KAAA,EAAK,EAA8B;EAChE,EAAA,IAAI,QAAA,CAAS,KAAK,CAAA,EAAG;EACjB,IAAA,OAAO,cAAA,CAAe,EAAC,GAAA,EAAK,KAAA,EAAM,CAAA;EAAA,EACtC;EAEA,EAAA,IAAI,KAAA,CAAM,OAAA,CAAQ,KAAK,CAAA,EAAG;EACtB,IAAA,MAAMC,UAA4B,EAAC;EACnC,IAAA,MAAM,cAAA,GAAiB,aAAa,KAAK,CAAA;EACzC,IAAA,MAAM,UAAA,GAAa,iBAAiB,cAAc,CAAA;EAClD,IAAA,IAAI,UAAA,CAAW,WAAW,OAAA,EAAS;EAC/B,MAAA,UAAA,CAAW,KAAA,CAAM,OAAA,CAAQ,CAAC,GAAA,KAAQ;EAC9B,QAAAA,OAAAA,CAAO,IAAA,CAAK,IAAI,eAAA,CAAgB,GAAG,GAAG,CAAA,EAAG,GAAA,CAAI,GAAG,IAAI,IAAA,EAAM,CAAA,EAAG,GAAA,CAAI,OAAO,EAAE,CAAC,CAAA;EAAA,MAC/E,CAAC,CAAA;EACD,MAAA,OAAOA,OAAAA;EAAA,IACX;EAEA,IAAA,MAAM,MAAA,GAAS,WAAW,KAAA,CAAM,UAAA;EAChC,IAAA,MAAM,uBAAuBX,wBAAW,CAAyB,MAAA,EAAQ,CAAC,QAAQ,iBAAA,EAAmB,eAAA,EAAiB,cAAA,EAAgB,qBAAA,EAAuB,eAAe,qBAAA,EAAuB,OAAA,EAAS,sBAAA,EAAwB,eAAA,EAAiB,uBAAuB,CAAC,CAAA;EAC7Q,IAAA,IAAI,CAAC,oBAAA,EAAsB;EACvB,MAAAW,OAAAA,CAAO,KAAK,IAAI,eAAA,CAAgB,GAAG,GAAG,CAAA,CAAA,EAAI,IAAA,EAAM,uDAAuD,CAAC,CAAA;EAAA,IAC5G;EAEA,IAAA,OAAOA,OAAAA;EAAA,EACX;EAEA,EAAA,IAAI,CAAC,QAAA,CAAS,KAAK,CAAA,EAAG;EAClB,IAAA,OAAO,CAAC,IAAI,eAAA,CAAgB,GAAA,EAAK,KAAA,EAAO,2CAA2C,OAAA,CAAQ,KAAK,CAAC,CAAA,OAAA,CAAS,CAAC,CAAA;EAAA,EAC/G;EAEA,EAAA,MAAM,SAA4B,EAAC;EACnC,EAAA,KAAA,MAAW,QAAS,KAAA,EAAkB;EAClC,IAAA,MAAA,CAAO,IAAA,CAAK,GAAG,iBAAA,CAAkB,EAAC,KAAK,CAAA,EAAG,GAAG,CAAA,CAAA,EAAI,IAAI,IAAI,KAAA,EAAO,KAAA,CAAM,IAAI,CAAA,EAAE,CAAC,CAAA;EAAA,EACjF;EAEA,EAAA,OAAO,MAAA;EACX;;ECrLO,SAAS,UAAA,CAAW,KAAa,iBAAA,EAAqC;EACzE,EAAA,MAAM,UAAA,GAAa,CAAC,GAAA,CAAI,QAAA,CAAS,KAAK,CAAA;EACtC,EAAA,IAAI;EACA,IAAA,IAAI,GAAA,CAAI,GAAA,EAAK,UAAA,IAAc,iBAAA,GAAoB,uBAAuB,KAAA,CAAS,CAAA;EAC/E,IAAA,OAAO,IAAA;EAAA,EACX,SAAS,CAAA,EAAY;EACjB,IAAA,OAAO,KAAA;EAAA,EACX;EACJ;EASA,SAAwB,cAAc,OAAA,EAAmD;EACrF,EAAA,MAAM,MAAM,OAAA,CAAQ,KAAA;EAEpB,EAAA,IAAI,CAAC,GAAA,EAAK;EACN,IAAA,OAAO,EAAC;EAAA,EACZ;EAEA,EAAA,IAAI,CAAC,QAAA,CAAS,GAAG,CAAA,EAAG;EAChB,IAAA,OAAO,CAAC,IAAI,eAAA,CAAgB,OAAA,CAAQ,GAAA,EAAK,GAAA,EAAK,CAAA,kBAAA,EAAqB,OAAA,CAAQ,GAAG,CAAC,CAAA,OAAA,CAAS,CAAC,CAAA;EAAA,EAC7F;EAEA,EAAA,IAAI,CAAC,UAAA,CAAW,GAAA,EAAK,IAAI,CAAA,EAAG;EACxB,IAAA,OAAO,CAAC,IAAI,eAAA,CAAgB,OAAA,CAAQ,KAAK,GAAA,EAAK,CAAA,aAAA,EAAgB,GAAG,CAAA,CAAA,CAAG,CAAC,CAAA;EAAA,EACzE;EAEA,EAAA,OAAO,EAAC;EACZ;;ECzBA,SAAwB,cAAc,OAAA,EAAmD;EACrF,EAAA,MAAM,QAAQ,OAAA,CAAQ,KAAA;EACtB,EAAA,MAAM,YAAY,OAAA,CAAQ,SAAA;EAE1B,EAAA,MAAM,YAAY,SAAA,CAAU,KAAA;EAC5B,EAAA,MAAM,QAAQ,OAAA,CAAQ,KAAA;EAEtB,EAAA,IAAI,UAAU,MAAA,EAAW;EACrB,IAAA,OAAO,EAAC;EAAA,EACZ;EAEA,EAAA,IAAI,CAAC,QAAA,CAAS,KAAK,CAAA,EAAG;EAClB,IAAA,OAAO,CAAC,IAAI,eAAA,CAAgB,OAAA,EAAS,KAAA,EAAO,oBAAoB,OAAA,CAAQ,KAAK,CAAC,CAAA,MAAA,CAAQ,CAAC,CAAA;EAAA,EAC3F;EAEA,EAAA,IAAI,SAA4B,EAAC;EACjC,EAAA,KAAA,MAAW,OAAO,KAAA,EAAO;EACrB,IAAA,MAAM,eAAA,GAAkB,GAAA,CAAI,KAAA,CAAM,iBAAiB,CAAA;EACnD,IAAA,MAAM,aAAA,GAAgB,GAAA,CAAI,KAAA,CAAM,gBAAgB,CAAA;EAGhD,IAAA,IAAI,aAAA,IAAiB,SAAA,CAAU,aAAA,CAAc,CAAC,CAAC,CAAA,EAAG;EAC9C,MAAA,MAAA,GAAS,MAAA,CAAO,OAAO,QAAA,CAAS;EAAA,QAC5B,GAAA;EAAA,QACA,KAAA,EAAO,MAAM,GAAG,CAAA;EAAA,QAChB,SAAA,EAAW,EAAC,IAAA,EAAM,QAAA,EAAQ;EAAA,QAC1B,KAAA;EAAA,QACA;EAAA,OACH,CAAC,CAAA;EAAA,IAEN,CAAA,MAAA,IAAW,eAAA,IAAmB,SAAA,CAAU,eAAA,CAAgB,CAAC,CAAC,CAAA,IAAK,SAAA,CAAU,eAAA,CAAgB,CAAC,CAAC,CAAA,CAAE,UAAA,EAAY;EACrG,MAAA,MAAA,GAAS,MAAA,CAAO,OAAO,QAAA,CAAS;EAAA,QAC5B,GAAA;EAAA,QACA,KAAA,EAAO,MAAM,GAAG,CAAA;EAAA;EAAA,QAEhB,WAAW,SAAA,CAAU,UAAA;EAAA,QACrB,KAAA;EAAA,QACA;EAAA,OACH,CAAC,CAAA;EAAA,IAEN,CAAA,MAAA,IAAW,SAAA,CAAU,GAAG,CAAA,EAAG;EACvB,MAAA,MAAA,GAAS,MAAA,CAAO,OAAO,QAAA,CAAS;EAAA,QAC5B,GAAA;EAAA,QACA,KAAA,EAAO,MAAM,GAAG,CAAA;EAAA;EAAA,QAEhB,SAAA,EAAW,UAAU,GAAG,CAAA;EAAA,QACxB,KAAA;EAAA,QACA;EAAA,OACH,CAAC,CAAA;EAAA,IACN,CAAA,MAAO;EACH,MAAA,MAAA,GAAS,MAAA,CAAO,MAAA,CAAO,CAAC,IAAI,eAAA,CAAgB,GAAA,EAAK,KAAA,CAAM,GAAG,CAAA,EAAG,CAAA,kBAAA,EAAqB,GAAG,CAAA,CAAA,CAAG,CAAC,CAAC,CAAA;EAAA,IAC9F;EAAA,EACJ;EAEA,EAAA,OAAO,MAAA;EACX;;ECrDA,SAAwB,eAAe,OAAA,EAAoD;EACvF,EAAA,MAAM,QAAQ,OAAA,CAAQ,KAAA;EAEtB,EAAA,IAAI,CAAC,KAAA,EAAO;EACR,IAAA,OAAO,EAAC;EAAA,EACZ;EAEA,EAAA,MAAM,MAAM,OAAA,CAAQ,GAAA;EACpB,EAAA,IAAI,CAAC,QAAA,CAAS,KAAK,CAAA,EAAG;EAClB,IAAA,OAAO,CAAC,IAAI,eAAA,CAAgB,GAAA,EAAK,KAAA,EAAO,oBAAoB,OAAA,CAAQ,KAAK,CAAC,CAAA,MAAA,CAAQ,CAAC,CAAA;EAAA,EACvF;EAEA,EAAA,IAAI,SAA4B,EAAC;EACjC,EAAA,MAAM,YAAY,OAAA,CAAQ,SAAA;EAE1B,EAAA,MAAM,SAAA,GAAY,UAAU,UAAU,CAAA;EACtC,EAAA,MAAM,QAAQ,OAAA,CAAQ,KAAA;EACtB,EAAA,MAAM,MAAA,GAAS,QAAQ,KAAA,CAAM,MAAA;EAE7B,EAAA,KAAA,MAAW,IAAA,IAAQ,CAAC,MAAA,EAAQ,IAAI,CAAA,EAAY;EACxC,IAAA,IAAI,EAAE,QAAQ,KAAA,CAAA,EAAQ;EAClB,MAAA,MAAA,GAAS,MAAA,CAAO,MAAA,CAAO,CAAC,IAAI,eAAA,CAAgB,GAAA,EAAK,KAAA,EAAO,CAAA,kBAAA,EAAqB,IAAI,CAAA,CAAA,CAAG,CAAC,CAAC,CAAA;EACtF,MAAA,OAAO,MAAA;EAAA,IACX;EAAA,EACJ;EAEA,EAAA,IAAI,CAAC,QAAA,CAAS,KAAA,CAAM,IAAI,CAAA,EAAG;EACvB,IAAA,MAAA,GAAS,MAAA,CAAO,MAAA,CAAO,CAAC,IAAI,eAAA,CAAgB,CAAA,EAAG,GAAG,CAAA,KAAA,CAAA,EAAS,KAAA,CAAM,IAAA,EAAM,CAAA,eAAA,CAAiB,CAAC,CAAC,CAAA;EAC1F,IAAA,OAAO,MAAA;EAAA,EACX;EAEA,EAAA,IAAI,MAAA,EAAQ;EACR,IAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,OAAA,CAAQ,YAAY,CAAA,EAAA,EAAK;EACzC,MAAA,MAAMG,UAAAA,GAAY,QAAA,CAAS,KAAA,CAAM,IAAI,CAAA;EACrC,MAAA,MAAM,UAAA,GAAa,OAAO,CAAC,CAAA;EAC3B,MAAA,IAAI,QAAA,CAAS,UAAA,CAAW,IAAI,CAAA,KAAMA,UAAAA,EAAW;EACzC,QAAA,MAAA,CAAO,IAAA,CAAK,IAAI,eAAA,CAAgB,GAAA,EAAK,MAAM,EAAA,EAAI,CAAA,sBAAA,EAAyB,KAAA,CAAM,IAAI,CAAA,8BAAA,EAAkC,UAAA,CAAW,EAAA,CAA2B,QAAQ,EAAE,CAAC,CAAA;EAAA,MACzK;EAAA,IACJ;EAAA,EACJ;EAEA,EAAA,MAAM,SAAA,GAAY,CAAA,iBAAA,EAAoB,KAAA,CAAM,IAAI,CAAA,CAAA;EAChD,EAAA,IAAI,EAAE,aAAa,SAAA,CAAA,EAAY;EAC3B,IAAA,MAAA,GAAS,MAAA,CAAO,MAAA,CAAO,CAAC,IAAI,gBAAgB,CAAA,EAAG,GAAG,CAAA,KAAA,CAAA,EAAS,KAAA,EAAO,CAAA,mBAAA,EAAsB,KAAA,CAAM,IAAI,CAAA,CAAE,CAAC,CAAC,CAAA;EACtG,IAAA,OAAO,MAAA;EAAA,EACX;EAGA,EAAA,MAAM,iBAAA,GAAoB,UAAU,SAAS,CAAA;EAE7C,EAAA,KAAA,MAAWP,QAAO,KAAA,EAAO;EACrB,IAAA,IAAIA,SAAQ,YAAA,EAAc;EACtB,MAAA,MAAM,UAAA,GAAa,MAAMA,IAAG,CAAA;EAC5B,MAAA,IAAI,CAAC,QAAA,CAAS,UAAU,CAAA,EAAG;EACvB,QAAA,MAAA,GAAS,MAAA,CAAO,MAAA,CAAO,CAAC,IAAI,eAAA,CAAgB,YAAA,EAAc,UAAA,EAAY,CAAA,iBAAA,EAAoB,OAAA,CAAQ,UAAU,CAAC,CAAA,MAAA,CAAQ,CAAC,CAAC,CAAA;EACvH,QAAA,OAAO,MAAA;EAAA,MACX;EACA,MAAA,KAAA,MAAW,eAAe,UAAA,EAAY;EAClC,QAAA,MAAM,eAAA,GAAkB,WAAA,CAAY,KAAA,CAAM,iBAAiB,CAAA;EAC3D,QAAA,MAAM,aAAA,GAAgB,WAAA,CAAY,KAAA,CAAM,gBAAgB,CAAA;EAGxD,QAAA,IAAI,aAAA,IAAiB,iBAAA,CAAkB,aAAA,CAAc,CAAC,CAAC,CAAA,EAAG;EACtD,UAAA,MAAA,GAAS,MAAA,CAAO,OAAO,QAAA,CAAS;EAAA,YAC5B,GAAA,EAAAA,IAAAA;EAAA,YACA,KAAA,EAAO,WAAW,WAAW,CAAA;EAAA,YAC7B,SAAA,EAAW,EAAC,IAAA,EAAM,QAAA,EAAQ;EAAA,YAC1B,KAAA;EAAA,YACA;EAAA,WACH,CAAC,CAAA;EAAA,QAEN,CAAA,MAAA,IAAW,eAAA,IAAmB,iBAAA,CAAkB,eAAA,CAAgB,CAAC,CAAC,CAAA,IAAK,iBAAA,CAAkB,eAAA,CAAgB,CAAC,CAAC,CAAA,CAAE,UAAA,EAAY;EACrH,UAAA,MAAA,GAAS,MAAA,CAAO,OAAO,QAAA,CAAS;EAAA,YAC5B,GAAA,EAAAA,IAAAA;EAAA,YACA,KAAA,EAAO,MAAMA,IAAG,CAAA;EAAA;EAAA,YAEhB,WAAW,SAAA,CAAU,UAAA;EAAA,YACrB,KAAA;EAAA,YACA;EAAA,WACH,CAAC,CAAA;EAAA,QAEN,CAAA,MAAA,IAAW,CAAC,iBAAA,CAAkB,WAAW,CAAA,EAAG;EACxC,UAAA,MAAA,GAAS,MAAA,CAAO,MAAA,CAAO,CAAC,IAAI,kBAAkB,OAAA,CAAQ,GAAA,EAAK,UAAA,CAAW,WAAW,CAAA,EAAG,CAAA,kBAAA,EAAqB,WAAW,CAAA,CAAA,CAAG,CAAC,CAAC,CAAA;EAAA,QAC7H,CAAA,MAAO;EACH,UAAA,MAAA,GAAS,MAAA,CAAO,OAAO,QAAA,CAAS;EAAA,YAC5B,GAAA,EAAK,WAAA;EAAA,YACL,KAAA,EAAO,WAAW,WAAW,CAAA;EAAA;EAAA,YAE7B,SAAA,EAAW,kBAAkB,WAAW,CAAA;EAAA,YACxC,KAAA;EAAA,YACA;EAAA,WACH,CAAC,CAAA;EAAA,QACN;EAAA,MACJ;EAAA,IACJ,CAAA,MAAO;EAEH,MAAA,IAAI,SAAA,CAAUA,IAAG,CAAA,EAAG;EAChB,QAAA,MAAA,GAAS,MAAA,CAAO,OAAO,QAAA,CAAS;EAAA,UAC5B,GAAA,EAAAA,IAAAA;EAAA,UACA,KAAA,EAAO,MAAMA,IAAG,CAAA;EAAA;EAAA,UAEhB,SAAA,EAAW,UAAUA,IAAG,CAAA;EAAA,UACxB,KAAA;EAAA,UACA;EAAA,SACH,CAAC,CAAA;EAAA,MACN,CAAA,MAAO;EACH,QAAA,MAAA,GAAS,MAAA,CAAO,MAAA,CAAO,CAAC,IAAI,iBAAA,CAAkBA,IAAAA,EAAK,KAAA,CAAMA,IAAG,CAAA,EAAG,CAAA,kBAAA,EAAqBA,IAAG,CAAA,CAAA,CAAG,CAAC,CAAC,CAAA;EAAA,MAChG;EAAA,IACJ;EAAA,EACJ;EAEA,EAAA,OAAO,MAAA;EACX;;ECjHA,SAAwB,gBAAgB,OAAA,EAAqD;EACzF,EAAA,MAAM,UAAU,OAAA,CAAQ,KAAA;EACxB,EAAA,MAAM,MAAM,OAAA,CAAQ,GAAA;EACpB,EAAA,MAAM,QAAQ,OAAA,CAAQ,KAAA;EACtB,EAAA,MAAM,YAAY,OAAA,CAAQ,SAAA;EAE1B,EAAA,MAAM,cAAc,SAAA,CAAU,OAAA;EAE9B,EAAA,IAAI,WAAW,IAAA,EAAM;EACjB,IAAA,OAAO,EAAC;EAAA,EACZ;EAEA,EAAA,IAAI,CAAC,QAAA,CAAS,OAAO,CAAA,EAAG;EACpB,IAAA,OAAO,CAAC,IAAI,eAAA,CAAgB,SAAA,EAAW,OAAA,EAAS,oBAAoB,OAAA,CAAQ,OAAO,CAAC,CAAA,MAAA,CAAQ,CAAC,CAAA;EAAA,EACjG;EAEA,EAAA,IAAI,SAA4B,EAAC;EACjC,EAAA,KAAA,MAAWA,QAAO,OAAA,EAAS;EACvB,IAAA,MAAM,eAAA,GAAkBA,IAAAA,CAAI,KAAA,CAAM,iBAAiB,CAAA;EACnD,IAAA,MAAM,aAAA,GAAgBA,IAAAA,CAAI,KAAA,CAAM,gBAAgB,CAAA;EAGhD,IAAA,IAAI,aAAA,IAAiB,WAAA,CAAY,aAAA,CAAc,CAAC,CAAC,CAAA,EAAG;EAChD,MAAA,MAAA,GAAS,MAAA,CAAO,OAAO,QAAA,CAAS;EAAA,QAC5B,GAAA,EAAAA,IAAAA;EAAA,QACA,KAAA,EAAO,QAAQA,IAAG,CAAA;EAAA,QAClB,SAAA,EAAW,EAAC,IAAA,EAAM,QAAA,EAAQ;EAAA,QAC1B,KAAA;EAAA,QACA;EAAA,OACH,CAAC,CAAA;EAAA,IAEN,CAAA,MAAA,IAAW,eAAA,IAAmB,WAAA,CAAY,eAAA,CAAgB,CAAC,CAAC,CAAA,IAAK,WAAA,CAAY,eAAA,CAAgB,CAAC,CAAC,CAAA,CAAE,UAAA,EAAY;EACzG,MAAA,MAAA,GAAS,MAAA,CAAO,OAAO,QAAA,CAAS;EAAA,QAC5B,GAAA,EAAAA,IAAAA;EAAA,QACA,KAAA,EAAO,QAAQA,IAAG,CAAA;EAAA;EAAA,QAElB,WAAW,SAAA,CAAU,UAAA;EAAA,QACrB,KAAA;EAAA,QACA;EAAA,OACH,CAAC,CAAA;EAAA,IAEN,CAAA,MAAA,IAAW,WAAA,CAAYA,IAAG,CAAA,EAAG;EACzB,MAAA,MAAA,GAAS,MAAA,CAAO,OAAO,QAAA,CAAS;EAAA,QAC5B,GAAA,EAAAA,IAAAA;EAAA,QACA,KAAA,EAAO,QAAQA,IAAG,CAAA;EAAA;EAAA,QAElB,SAAA,EAAW,YAAYA,IAAG,CAAA;EAAA,QAC1B,KAAA;EAAA,QACA;EAAA,OACH,CAAC,CAAA;EAAA,IACN,CAAA,MAAO;EACH,MAAA,MAAA,GAAS,MAAA,CAAO,MAAA,CAAO,CAAC,IAAI,iBAAA,CAAkBA,IAAAA,EAAK,OAAA,CAAQA,IAAG,CAAA,EAAG,CAAA,kBAAA,EAAqBA,IAAG,CAAA,CAAA,CAAG,CAAC,CAAC,CAAA;EAAA,IAClG;EAAA,EACJ;EAEA,EAAA,IAAI,CAAC,QAAQ,MAAA,EAAQ;EACjB,IAAA,MAAA,CAAO,KAAK,IAAI,eAAA,CAAgB,GAAA,EAAK,OAAA,EAAS,+CAA+C,CAAC,CAAA;EAAA,EAClG,CAAA,MAAA,IAAW,CAAC,QAAA,CAAS,OAAA,CAAQ,MAAM,CAAA,EAAG;EAClC,IAAA,MAAA,CAAO,IAAA,CAAK,IAAI,eAAA,CAAgB,CAAA,EAAG,GAAG,CAAA,OAAA,CAAA,EAAW,OAAA,CAAQ,MAAA,EAAQ,CAAA,uBAAA,CAAyB,CAAC,CAAA;EAAA,EAC/F,CAAA,MAAO;EACH,IAAA,MAAM,MAAA,GAAS,KAAA,CAAM,OAAA,IAAW,MAAA,CAAO,OAAO,KAAA,CAAM,OAAA,EAAS,OAAA,CAAQ,MAAM,CAAA,GAAI,KAAA,CAAM,OAAA,CAAQ,OAAA,CAAQ,MAAM,CAAA,GAAI,MAAA;EAC/G,IAAA,MAAM,UAAA,GAAa,MAAA,IAAU,QAAA,CAAS,MAAA,CAAO,IAAI,CAAA;EACjD,IAAA,IAAI,CAAC,MAAA,EAAQ;EACT,MAAA,MAAA,CAAO,IAAA,CAAK,IAAI,eAAA,CAAgB,CAAA,EAAG,GAAG,CAAA,OAAA,CAAA,EAAW,OAAA,CAAQ,MAAA,EAAQ,CAAA,QAAA,EAAW,OAAA,CAAQ,MAAM,CAAA,WAAA,CAAa,CAAC,CAAA;EAAA,IAC5G,CAAA,MAAA,IAAW,eAAe,YAAA,EAAc;EACpC,MAAA,MAAA,CAAO,IAAA,CAAK,IAAI,eAAA,CAAgB,CAAA,EAAG,GAAG,CAAA,OAAA,CAAA,EAAW,OAAA,CAAQ,MAAA,EAAQ,CAAA,6CAAA,EAAgD,UAAU,CAAA,iDAAA,CAAmD,CAAC,CAAA;EAAA,IACnL;EAAA,EACJ;EAEA,EAAA,OAAO,MAAA;EACX;;ECvEA,SAAwB,YAAY,OAAA,EAAiD;EACjF,EAAA,MAAM,MAAM,OAAA,CAAQ,KAAA;EACpB,EAAA,MAAM,QAAQ,OAAA,CAAQ,KAAA;EACtB,EAAA,MAAM,YAAY,OAAA,CAAQ,SAAA;EAE1B,EAAA,MAAM,UAAU,SAAA,CAAU,GAAA;EAE1B,EAAA,IAAI,QAAQ,MAAA,EAAW;EACnB,IAAA,OAAO,EAAC;EAAA,EACZ;EAEA,EAAA,IAAI,CAAC,QAAA,CAAS,GAAG,CAAA,EAAG;EAChB,IAAA,OAAO,CAAC,IAAI,eAAA,CAAgB,KAAA,EAAO,GAAA,EAAK,oBAAoB,OAAA,CAAQ,GAAG,CAAC,CAAA,MAAA,CAAQ,CAAC,CAAA;EAAA,EACrF;EAEA,EAAA,IAAI,SAA4B,EAAC;EACjC,EAAA,KAAA,MAAW,OAAO,GAAA,EAAK;EACnB,IAAA,MAAM,eAAA,GAAkB,GAAA,CAAI,KAAA,CAAM,iBAAiB,CAAA;EACnD,IAAA,MAAM,aAAA,GAAgB,GAAA,CAAI,KAAA,CAAM,gBAAgB,CAAA;EAGhD,IAAA,IAAI,aAAA,IAAiB,OAAA,CAAQ,aAAA,CAAc,CAAC,CAAC,CAAA,EAAG;EAC5C,MAAA,MAAA,GAAS,MAAA,CAAO,OAAO,QAAA,CAAS;EAAA,QAC5B,GAAA;EAAA,QACA,KAAA,EAAO,IAAI,GAAG,CAAA;EAAA,QACd,SAAA,EAAW,EAAC,IAAA,EAAM,QAAA,EAAQ;EAAA,QAC1B,KAAA;EAAA,QACA;EAAA,OACH,CAAC,CAAA;EAAA,IAEN,CAAA,MAAA,IAAW,eAAA,IAAmB,OAAA,CAAQ,eAAA,CAAgB,CAAC,CAAC,CAAA,IAAK,OAAA,CAAQ,eAAA,CAAgB,CAAC,CAAC,CAAA,CAAE,UAAA,EAAY;EACjG,MAAA,MAAA,GAAS,MAAA,CAAO,OAAO,QAAA,CAAS;EAAA,QAC5B,GAAA;EAAA,QACA,KAAA,EAAO,IAAI,GAAG,CAAA;EAAA;EAAA,QAEd,WAAW,SAAA,CAAU,UAAA;EAAA,QACrB,KAAA;EAAA,QACA;EAAA,OACH,CAAC,CAAA;EAAA,IAEN,CAAA,MAAA,IAAW,OAAA,CAAQ,GAAG,CAAA,EAAG;EACrB,MAAA,MAAA,GAAS,MAAA,CAAO,OAAO,QAAA,CAAS;EAAA,QAC5B,GAAA;EAAA,QACA,KAAA,EAAO,IAAI,GAAG,CAAA;EAAA;EAAA,QAEd,SAAA,EAAW,QAAQ,GAAG,CAAA;EAAA,QACtB,KAAA;EAAA,QACA;EAAA,OACH,CAAC,CAAA;EAAA,IACN,CAAA,MAAO;EACH,MAAA,MAAA,GAAS,MAAA,CAAO,MAAA,CAAO,CAAC,IAAI,iBAAA,CAAkB,GAAA,EAAK,GAAA,CAAI,GAAG,CAAA,EAAG,CAAA,kBAAA,EAAqB,GAAG,CAAA,CAAA,CAAG,CAAC,CAAC,CAAA;EAAA,IAC9F;EAAA,EACJ;EAEA,EAAA,OAAO,MAAA;EACX;;EC5DA,SAAwB,kBAAkB,OAAA,EAAuD;EAC7F,EAAA,MAAM,MAAA,GAAS,eAAe,OAAO,CAAA;EACrC,EAAA,IAAI,MAAA,CAAO,WAAW,CAAA,EAAG;EACrB,IAAA,OAAO,EAAC;EAAA,EACZ;EAEA,EAAA,OAAO,mBAAmB,OAAO,CAAA;EACrC;;ECPA,SAAwB,cAAc,OAAA,EAAmD;EACrF,EAAA,MAAM,MAAA,GAAS,eAAe,OAAO,CAAA;EACrC,EAAA,IAAI,MAAA,CAAO,WAAW,CAAA,EAAG;EACrB,IAAA,OAAO,EAAC;EAAA,EACZ;EAEA,EAAA,OAAO,mBAAmB,OAAO,CAAA;EACrC;;ECFA,SAAwB,mBAAmB,OAAA,EAAwD;EAC/F,EAAA,MAAM,aAAa,OAAA,CAAQ,KAAA;EAC3B,EAAA,MAAM,YAAY,OAAA,CAAQ,SAAA;EAC1B,EAAA,MAAM,iBAAiB,SAAA,CAAU,UAAA;EACjC,EAAA,MAAM,QAAQ,OAAA,CAAQ,KAAA;EAEtB,EAAA,IAAI,QAAA,CAAS,UAAU,CAAA,EAAG;EACtB,IAAA,IAAI,SAA4B,EAAC;EAEjC,IAAA,KAAA,MAAW,OAAO,UAAA,EAAY;EAC1B,MAAA,MAAA,GAAS,MAAA,CAAO,OAAO,QAAA,CAAS;EAAA,QAC5B,GAAA;EAAA,QACA,KAAA,EAAO,WAAW,GAAG,CAAA;EAAA,QAErB,SAAA,EAAW,eAAe,GAAG,CAAA;EAAA,QAC7B,KAAA;EAAA,QACA;EAAA,OACH,CAAC,CAAA;EAAA,IACN;EAEA,IAAA,OAAO,MAAA;EAAA,EACX;EAEA,EAAA,IAAI,CAAC,QAAA,CAAS,UAAU,CAAA,EAAG;EACvB,IAAA,OAAO,CAAC,IAAI,eAAA,CAAgB,YAAA,EAAc,UAAA,EAAY,8BAA8B,OAAA,CAAQ,UAAU,CAAC,CAAA,MAAA,CAAQ,CAAC,CAAA;EAAA,EACpH;EAEA,EAAA,OAAO,EAAC;EACZ;;EC5BA,SAAS,eAAA,CAAgB,MAAoC,OAAA,EAAmG;EAC5J,EAAA,OAAO,CAAC,EAAE,IAAA,KAAS,QAAA,IAAY,OAAA,CAAQ,MAAA,CAAA;EAC3C;EAEA,SAAwB,gBAAgB,OAAA,EAAqD;EACzF,EAAA,MAAM,UAAU,OAAA,CAAQ,KAAA;EACxB,EAAA,MAAM,MAAM,OAAA,CAAQ,GAAA;EACpB,EAAA,MAAM,YAAY,OAAA,CAAQ,SAAA;EAC1B,EAAA,MAAM,QAAQ,OAAA,CAAQ,KAAA;EAEtB,EAAA,IAAI,CAAC,QAAA,CAAS,OAAO,CAAA,EAAG;EACpB,IAAA,OAAO,CAAC,IAAI,eAAA,CAAgB,GAAA,EAAK,OAAA,EAAS,iBAAiB,CAAC,CAAA;EAAA,EAChE;EAEA,EAAA,IAAI,CAAC,QAAQ,IAAA,EAAM;EACf,IAAA,OAAO,CAAC,IAAI,eAAA,CAAgB,GAAA,EAAK,OAAA,EAAS,oBAAoB,CAAC,CAAA;EAAA,EACnE;EAEA,EAAA,MAAM,IAAA,GAAO,QAAA,CAAS,OAAA,CAAQ,IAAI,CAAA;EAElC,EAAA,IAAI,SAA4B,EAAC;EAEjC,EAAA,MAAA,GAAS,MAAA,CAAO,OAAO,cAAA,CAAe;EAAA,IAClC,GAAA;EAAA,IACA,KAAA,EAAO,OAAA;EAAA;EAAA,IAEP,SAAA,EAAW,SAAA,CAAU,CAAA,QAAA,EAAW,IAAI,CAAA,CAAE,CAAA;EAAA,IACtC,KAAA;EAAA,IACA;EAAA,GACH,CAAC,CAAA;EAEF,EAAA,IAAI,eAAA,CAAgB,IAAA,EAAM,OAAO,CAAA,EAAG;EAChC,IAAA,MAAM,MAAA,GAAS,KAAA,CAAM,OAAA,IAAW,MAAA,CAAO,OAAO,KAAA,CAAM,OAAA,EAAS,OAAA,CAAQ,MAAM,CAAA,GAAI,KAAA,CAAM,OAAA,CAAQ,OAAA,CAAQ,MAAM,CAAA,GAAI,MAAA;EAC/G,IAAA,MAAM,UAAA,GAAa,MAAA,IAAU,QAAA,CAAS,MAAA,CAAO,IAAI,CAAA;EACjD,IAAA,IAAI,CAAC,MAAA,EAAQ;EACT,MAAA,MAAA,CAAO,IAAA,CAAK,IAAI,eAAA,CAAgB,GAAA,EAAK,OAAA,CAAQ,QAAQ,CAAA,QAAA,EAAW,OAAA,CAAQ,MAAM,CAAA,WAAA,CAAa,CAAC,CAAA;EAAA,IAChG,CAAA,MAAA,IAAW,eAAe,cAAA,EAAgB;EACtC,MAAA,MAAA,CAAO,IAAA,CAAK,IAAI,eAAA,CAAgB,GAAA,EAAK,OAAA,CAAQ,MAAA,EAAQ,CAAA,6CAAA,EAAgD,MAAA,CAAO,UAAU,CAAC,CAAA,mDAAA,CAAqD,CAAC,CAAA;EAAA,IACjL;EAAA,EACJ;EAEA,EAAA,OAAO,MAAA;EACX;;ECvBA,MAAM,UAAA,GAAwE;EAAA,EAC1E,GAAA,EAAK,MAAM,EAAC;EAAA,EACZ,OAAA,EAAS,aAAA;EAAA,EACT,SAAA,EAAW,eAAA;EAAA,EACX,QAAA,EAAU,cAAA;EAAA,EACV,OAAA,EAAS,aAAA;EAAA,EACT,MAAA,EAAQ,YAAA;EAAA,EACR,QAAA,EAAU,cAAA;EAAA,EACV,UAAA,EAAY,gBAAA;EAAA,EACZ,OAAA,EAAS,aAAA;EAAA,EACT,QAAA,EAAU,cAAA;EAAA,EACV,QAAA,EAAU,cAAA;EAAA,EACV,OAAA,EAAS,aAAA;EAAA,EACT,OAAA,EAAS,aAAA;EAAA,EACT,UAAA,EAAY,cAAA;EAAA,EACZ,SAAA,EAAW,eAAA;EAAA,EACX,KAAA,EAAO,WAAA;EAAA,EACP,QAAA,EAAU,cAAA;EAAA,EACV,WAAA,EAAa,iBAAA;EAAA,EACb,eAAA,EAAiB,aAAA;EAAA,EACjB,YAAA,EAAc,kBAAA;EAAA,EACd,QAAA,EAAU,cAAA;EAAA,EACV,SAAA,EAAW,eAAA;EAAA,EACX,QAAA,EAAU;EACd,CAAA;EAyCA,SAAwB,QAAA,CAAS,OAAA,EAA2B,iBAAA,GAA6B,KAAA,EAA0B;EAC/G,EAAA,MAAM,QAAQ,OAAA,CAAQ,KAAA;EACtB,EAAA,MAAM,YAAY,OAAA,CAAQ,SAAA;EAC1B,EAAA,MAAM,YAAY,OAAA,CAAQ,SAAA;EAE1B,EAAA,IAAI,UAAU,UAAA,EAAY;EACtB,IAAA,IAAI,WAAW,QAAA,CAAS,KAAK,CAAC,CAAA,EAAG,OAAO,iBAAiB,OAA8C,CAAA;EACvG,IAAA,IAAI,aAAa,YAAA,CAAa,KAAK,CAAC,CAAA,EAAG,OAAO,mBAAmB,OAAgD,CAAA;EAAA,EACrH;EAEA,EAAA,IAAI,SAAA,CAAU,IAAA,IAAQ,UAAA,CAAW,SAAA,CAAU,IAAI,CAAA,EAAG;EAC9C,IAAA,MAAMI,OAAAA,GAAS,UAAA,CAAW,SAAA,CAAU,IAAI,EAAE,OAAO,CAAA;EACjD,IAAA,IAAI,iBAAA,KAAsB,QAAQA,OAAAA,CAAO,MAAA,GAAS,KAAK,KAAA,CAAM,OAAA,CAAQ,OAAA,CAAQ,KAAK,CAAA,EAAG;EAEjF,MAAA,OAAO,mBAAmB,OAAgD,CAAA;EAAA,IAC9E;EAEA,IAAA,OAAOA,OAAAA;EAAA,EACX;EAEA,EAAA,MAAM,SAAS,cAAA,CAAe;EAAA,IAC1B,GAAG,OAAA;EAAA;EAAA,IAEH,WAAW,SAAA,CAAU,IAAA,GAAO,SAAA,CAAU,SAAA,CAAU,IAAI,CAAA,GAAI;EAAA,GAC3D,CAAA;EAED,EAAA,OAAO,MAAA;EACX;;ECjGA,SAAwB,eAAe,OAAA,EAAoD;EACvF,EAAA,MAAM,MAAM,OAAA,CAAQ,GAAA;EACpB,EAAA,MAAM,SAAS,OAAA,CAAQ,KAAA;EACvB,EAAA,MAAM,YAAA,GAAe,OAAA,CAAQ,SAAA,IAAa,EAAC;EAC3C,EAAA,MAAM,iBAAA,GAAoB,OAAA,CAAQ,uBAAA,IAA2B,EAAC;EAC9D,EAAA,MAAM,QAAQ,OAAA,CAAQ,KAAA;EACtB,EAAA,MAAM,YAAY,OAAA,CAAQ,SAAA;EAE1B,EAAA,IAAI,CAAC,QAAA,CAAS,MAAM,CAAA,EAAG;EACnB,IAAA,OAAO,CAAC,IAAI,eAAA,CAAgB,GAAA,EAAK,MAAA,EAAQ,oBAAoB,OAAA,CAAQ,MAAM,CAAC,CAAA,MAAA,CAAQ,CAAC,CAAA;EAAA,EACzF;EAEA,EAAA,IAAI,SAA4B,EAAC;EACjC,EAAA,KAAA,MAAW,aAAa,MAAA,EAAQ;EAK5B,IAAA,IAAI,CAAC,MAAA,CAAO,MAAA,CAAO,MAAA,EAAQ,SAAS,CAAA,EAAG;EAEvC,IAAA,MAAM,cAAA,GAAiB,SAAA,CAAU,KAAA,CAAM,GAAG,EAAE,CAAC,CAAA;EAK7C,IAAA,MAAM,OAAA,GAAU,MAAA,CAAO,MAAA,CAAO,YAAA,EAAc,cAAc,CAAA;EAC1D,IAAA,MAAM,eAAA,GAAkB,MAAA,CAAO,MAAA,CAAO,YAAA,EAAc,GAAG,CAAA;EAEvD,IAAA,MAAM,WAAA,GAAc,UAAU,YAAA,CAAa,cAAc,IAAK,eAAA,GAAkB,YAAA,CAAa,GAAG,CAAA,GAAI,MAAA;EAEpG,IAAA,IAAI,eAAA;EACJ,IAAA,IAAI,MAAA,CAAO,MAAA,CAAO,iBAAA,EAAmB,cAAc,CAAA,EAAG;EAClD,MAAA,eAAA,GAAkB,kBAAkB,cAAc,CAAA;EAAA,IACtD,WAAW,OAAA,EAAS;EAChB,MAAA,eAAA,GAAkBF,QAAA;EAAA,IACtB,CAAA,MAAA,IAAW,MAAA,CAAO,MAAA,CAAO,iBAAA,EAAmB,GAAG,CAAA,EAAG;EAC9C,MAAA,eAAA,GAAkB,kBAAkB,GAAG,CAAA;EAAA,IAC3C,WAAW,eAAA,EAAiB;EACxB,MAAA,eAAA,GAAkBA,QAAA;EAAA,IACtB;EAEA,IAAA,IAAI,CAAC,eAAA,EAAiB;EAClB,MAAA,MAAA,CAAO,IAAA,CAAK,IAAI,iBAAA,CAAkB,GAAA,EAAK,MAAA,CAAO,SAAS,CAAA,EAAG,CAAA,kBAAA,EAAqB,SAAS,CAAA,CAAA,CAAG,CAAC,CAAA;EAC5F,MAAA;EAAA,IACJ;EAEA,IAAA,MAAA,GAAS,MAAA,CAAO,OAAO,eAAA,CAAgB;EAAA,MACnC,GAAA,EAAA,CAAM,GAAA,GAAM,CAAA,EAAG,GAAG,MAAM,GAAA,IAAO,SAAA;EAAA,MAC/B,KAAA,EAAO,OAAO,SAAS,CAAA;EAAA,MACvB,SAAA,EAAW,WAAA;EAAA,MACX,KAAA;EAAA,MACA,SAAA;EAAA,MACA,MAAA;EAAA,MACA;EAAA,KACJ,EAAG,MAAM,CAAC,CAAA;EAAA,EACd;EAEA,EAAA,KAAA,MAAW,kBAAkB,YAAA,EAAc;EACvC,IAAA,IAAI,CAAC,MAAA,CAAO,MAAA,CAAO,YAAA,EAAc,cAAc,CAAA,EAAG;EAElD,IAAA,IAAI,MAAA,CAAO,MAAA,CAAO,iBAAA,EAAmB,cAAc,CAAA,EAAG;EAClD,MAAA;EAAA,IACJ;EAEA,IAAA,MAAM,WAAA,GAAc,aAAa,cAAc,CAAA;EAC/C,IAAA,IAAI,WAAA,CAAY,QAAA,IAAY,WAAA,CAAY,SAAS,MAAM,MAAA,KAAc,CAAC,MAAA,CAAO,MAAA,CAAO,QAAQ,cAAc,CAAA,IAAK,MAAA,CAAO,cAAc,MAAM,MAAA,CAAA,EAAY;EAClJ,MAAA,MAAA,CAAO,IAAA,CAAK,IAAI,eAAA,CAAgB,GAAA,EAAK,QAAQ,CAAA,2BAAA,EAA8B,cAAc,GAAG,CAAC,CAAA;EAAA,IACjG;EAAA,EACJ;EAEA,EAAA,OAAO,MAAA;EACX;;EC5FA,SAAwB,iBAAA,CAAkB,EAAC,GAAA,EAAK,KAAA,EAAK,EAAiD;EAClG,EAAA,MAAM,MAAA,GAAS,cAAA,CAAe,EAAC,GAAA,EAAK,OAAM,CAAA;EAC1C,EAAA,IAAI,MAAA,CAAO,QAAQ,OAAO,MAAA;EAE1B,EAAA,MAAM,GAAA,GAAM,KAAA;EACZ,EAAA,IAAI,CAAC,GAAA,CAAI,QAAA,CAAS,aAAa,CAAA,EAAG;EAC9B,IAAA,MAAA,CAAO,KAAK,IAAI,eAAA,CAAgB,GAAA,EAAK,KAAA,EAAO,iDAAiD,CAAC,CAAA;EAAA,EAClG;EAEA,EAAA,IAAI,CAAC,GAAA,CAAI,QAAA,CAAS,SAAS,CAAA,EAAG;EAC1B,IAAA,MAAA,CAAO,KAAK,IAAI,eAAA,CAAgB,GAAA,EAAK,KAAA,EAAO,6CAA6C,CAAC,CAAA;EAAA,EAC9F;EAEA,EAAA,OAAO,MAAA;EACX;;ECXA,SAAwBD,gBAAc,KAAA,EAAgB,SAAA,GAA4BO,EAAA,EAAiB,OAAA,GAAiC,EAAC,EAAsB;EACvJ,EAAA,MAAM,SAAS,cAAA,CAAe;EAAA,IAC1B,GAAA,EAAK,QAAQ,GAAA,IAAO,EAAA;EAAA,IACpB,KAAA,EAAO,KAAA;EAAA;EAAA,IAEP,SAAA,EAAW;EAAA,MACP,GAAG,SAAA,CAAU,KAAA;EAAA;EAAA,MAEb,GAAA,EAAK,EAAC,IAAA,EAAM,GAAA;EAAG,KACnB;EAAA,IACA,SAAA;EAAA,IACA,KAAA;EAAA,IACA,uBAAA,EAAyB;EAAA,MACrB,MAAA,EAAQC;EAAA;EACZ,GACH,CAAA;EAED,EAAA,OAAO,MAAA;EACX;;ECaO,SAASR,eAAA,CAAc,KAAA,EAA2B,SAAA,GAA4BO,EAAA,EAAmC;EACpH,EAAA,MAAM,MAAA,GAASE,eAAA,CAAe,KAAA,EAAO,SAAS,CAAA;EAC9C,EAAA,OAAO,WAAW,MAAM,CAAA;EAC5B;EAeA,SAAS,WAAW,MAAA,EAA4C;EAC5D,EAAA,OAAO,MAAA,CAAO,KAAA,EAAM,CAAE,IAAA,CAAK,CAAC,CAAA,EAAG,CAAA,KAAM,CAAA,CAAE,IAAA,IAAQ,EAAE,IAAA,GAAO,CAAA,CAAE,IAAA,GAAO,CAAA,CAAE,OAAO,CAAC,CAAA;EAC/E;;EC1DA,SAAwB,UAAU,KAAA,EAAqE;EACnG,EAAA,IAAI,KAAA,YAAiB,UAAU,OAAO,KAAA,KAAU,YAAY,WAAA,CAAY,MAAA,CAAO,KAAK,CAAA,EAAG;EACnF,IAAA,IAAI;EACA,MAAA,MAAM,GAAA,GAAM,WAAA,CAAY,MAAA,CAAO,KAAK,CAAA,GAAI,IAAI,WAAA,EAAY,CAAE,MAAA,CAAO,KAAK,CAAA,GAAI,KAAA,CAAM,QAAA,EAAS;EACzF,MAAA,IAAA,CAAK,MAAM,GAAG,CAAA;EACd,MAAA,OAAO,MAAM,GAAG,CAAA;EAAA,IACpB,SAAS,CAAA,EAAG;EACR,MAAA,MAAM,IAAI,aAAa,CAAU,CAAA;EAAA,IACrC;EAAA,EACJ;EAEA,EAAA,OAAO,KAAA;EACX;EAIO,MAAM,MAAA,GAAW,CAAA;EACjB,MAAM,MAAA,GAAW,CAAA;EACjB,MAAM,QAAA,GAAW,CAAA;EACjB,MAAM,QAAA,GAAW,CAAA;EACjB,MAAM,MAAA,GAAW,CAAA;EACjB,MAAM,MAAA,GAAW,CAAA;EACjB,MAAM,IAAA,GAAW,CAAA;EACjB,MAAM,KAAA,GAAW,CAAA;EACjB,MAAM,IAAA,GAAW,CAAA;EAEjB,SAAS,SAAS,CAAA,EAAW;EAChC,EAAA,MAAM,SAAmB,EAAC;EAC1B,EAAA,IAAI,GAAA,GAAM,CAAA;EACV,EAAA,MAAM,MAAM,CAAA,CAAE,MAAA;EAEd,EAAA,OAAO,MAAM,GAAA,EAAK;EACd,IAAA,MAAM,CAAA,GAAI,CAAA,CAAE,UAAA,CAAW,GAAG,CAAA;EAE1B,IAAA,IAAI,CAAA,KAAM,EAAA,IAAM,CAAA,KAAM,CAAA,IAAK,CAAA,KAAM,EAAA,IAAM,CAAA,KAAM,EAAA,IAAM,CAAA,KAAM,EAAA,IAAM,CAAA,KAAM,EAAA,EAAI;EACrE,MAAA,GAAA,EAAA;EACA,MAAA;EAAA,IACJ;EAEA,IAAA,MAAM,KAAA,GAAQ,GAAA;EAEd,IAAA,IAAI,MAAM,GAAA,EAAK,MAAA,CAAO,KAAK,MAAA,EAAQ,KAAA,EAAO,EAAE,GAAG,CAAA;EAAA,SAAA,IACtC,MAAM,GAAA,EAAK,MAAA,CAAO,KAAK,MAAA,EAAU,KAAA,EAAO,EAAE,GAAG,CAAA;EAAA,SAAA,IAC7C,MAAM,EAAA,EAAI,MAAA,CAAO,KAAK,QAAA,EAAU,KAAA,EAAO,EAAE,GAAG,CAAA;EAAA,SAAA,IAC5C,MAAM,EAAA,EAAI,MAAA,CAAO,KAAK,QAAA,EAAU,KAAA,EAAO,EAAE,GAAG,CAAA;EAAA,SAAA,IAC5C,MAAM,EAAA,EAAI;EACf,MAAA,GAAA,EAAA;EACA,MAAA,OAAO,MAAM,GAAA,EAAK;EACd,QAAA,MAAM,EAAA,GAAK,CAAA,CAAE,UAAA,CAAW,GAAG,CAAA;EAC3B,QAAA,IAAI,EAAA,KAAO,IAAI,GAAA,IAAO,CAAA,CAAE,WAAW,GAAA,GAAM,CAAC,CAAA,KAAM,GAAA,GAAM,CAAA,GAAI,CAAA;EAAA,aAAA,IACjD,OAAO,EAAA,EAAI;EAAA,aACf,GAAA,EAAA;EAAA,MACT;EACA,MAAA,MAAA,CAAO,IAAA,CAAK,MAAA,EAAQ,KAAA,EAAO,EAAE,GAAG,CAAA;EAAA,IACpC,CAAA,MAAA,IAAW,MAAM,GAAA,EAAK,MAAA,CAAO,KAAK,IAAA,EAAO,KAAA,EAAO,OAAO,CAAC,CAAA;EAAA,SAAA,IAC/C,MAAM,GAAA,EAAK,MAAA,CAAO,KAAK,KAAA,EAAO,KAAA,EAAO,OAAO,CAAC,CAAA;EAAA,SAAA,IAC7C,MAAM,GAAA,EAAK,MAAA,CAAO,KAAK,IAAA,EAAO,KAAA,EAAO,OAAO,CAAC,CAAA;EAAA,SACjD;EACD,MAAA,OAAO,MAAM,GAAA,EAAK;EACd,QAAA,MAAM,EAAA,GAAK,CAAA,CAAE,UAAA,CAAW,GAAG,CAAA;EAC3B,QAAA,IAAK,EAAA,IAAM,EAAA,IAAM,EAAA,IAAM,EAAA,IAAO,EAAA,KAAO,EAAA,IAAM,EAAA,KAAO,EAAA,IAAM,EAAA,KAAO,EAAA,IAAM,EAAA,KAAO,GAAA,IAAO,OAAO,EAAA,EAAI,GAAA,EAAA;EAAA,aACzF;EAAA,MACT;EACA,MAAA,MAAA,CAAO,IAAA,CAAK,MAAA,EAAQ,KAAA,EAAO,GAAG,CAAA;EAAA,IAClC;EAAA,EACJ;EAEA,EAAA,OAAO,MAAA;EACX;EAKA,SAAS,WAAA,CAAY,GAAW,MAAA,EAAkB;EAC9C,EAAA,IAAI,CAAA,GAAI,CAAA;EAER,EAAA,MAAM,WAAA,GAAc,CAAC,CAAC,CAAA;EACtB,EAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,CAAA,CAAE,QAAQ,CAAA,EAAA,EAAK;EAC/B,IAAA,IAAI,CAAA,CAAE,WAAW,CAAC,CAAA,KAAM,IAAI,WAAA,CAAY,IAAA,CAAK,IAAI,CAAC,CAAA;EAAA,EACtD;EAEA,EAAA,SAAS,QAAQ,GAAA,EAAa;EAC1B,IAAA,IAAI,EAAA,GAAK,CAAA,EAAG,EAAA,GAAK,WAAA,CAAY,MAAA,GAAS,CAAA;EACtC,IAAA,OAAO,KAAK,EAAA,EAAI;EACZ,MAAA,MAAM,GAAA,GAAO,EAAA,GAAK,EAAA,GAAK,CAAA,IAAM,CAAA;EAC7B,MAAA,IAAI,WAAA,CAAY,GAAG,CAAA,IAAK,GAAA,EAAK,EAAA,GAAK,GAAA;EAAA,gBACxB,GAAA,GAAM,CAAA;EAAA,IACpB;EACA,IAAA,OAAO,EAAA,GAAK,CAAA;EAAA,EAChB;EAEA,EAAA,SAAS,OAAA,CAAW,KAAQ,IAAA,EAAiB;EACzC,IAAA,MAAA,CAAO,eAAe,GAAA,EAAK,UAAA,EAAY,EAAC,KAAA,EAAO,MAAK,CAAA;EACpD,IAAA,OAAO,GAAA;EAAA,EACX;EAEA,EAAA,SAAS,UAAA,GAAwB;EAC7B,IAAA,MAAM,IAAA,GAAO,OAAO,CAAC,CAAA;EACrB,IAAA,MAAM,KAAA,GAAQ,MAAA,CAAO,CAAA,GAAI,CAAC,CAAA;EAC1B,IAAA,MAAM,GAAA,GAAM,MAAA,CAAO,CAAA,GAAI,CAAC,CAAA;EACxB,IAAA,CAAA,IAAK,CAAA;EAEL,IAAA,MAAM,IAAA,GAAO,QAAQ,KAAK,CAAA;EAE1B,IAAA,IAAI,SAAS,MAAA,EAAQ;EACjB,MAAA,MAAM,GAAA,GAAM,OAAA,CAAQ,EAAC,EAAG,IAAI,CAAA;EAC5B,MAAA,OAAO,MAAA,CAAO,CAAC,CAAA,KAAM,MAAA,EAAQ;EACzB,QAAA,MAAM,GAAA,GAAc,IAAA,CAAK,KAAA,CAAM,CAAA,CAAE,KAAA,CAAM,MAAA,CAAO,CAAA,GAAI,CAAC,CAAA,EAAG,MAAA,CAAO,CAAA,GAAI,CAAC,CAAC,CAAC,CAAA;EACpE,QAAA,CAAA,IAAK,CAAA;EACL,QAAA,MAAA,CAAO,cAAA,CAAe,GAAA,EAAK,GAAA,EAAK,EAAC,KAAA,EAAO,UAAA,EAAW,EAAG,UAAA,EAAY,IAAA,EAAM,YAAA,EAAc,IAAA,EAAM,QAAA,EAAU,MAAK,CAAA;EAAA,MAC/G;EACA,MAAA,CAAA,IAAK,CAAA;EACL,MAAA,OAAO,GAAA;EAAA,IACX;EACA,IAAA,IAAI,SAAS,QAAA,EAAU;EACnB,MAAA,MAAM,GAAA,GAAiB,OAAA,CAAQ,EAAC,EAAG,IAAI,CAAA;EACvC,MAAA,OAAO,OAAO,CAAC,CAAA,KAAM,UAAU,GAAA,CAAI,IAAA,CAAK,YAAY,CAAA;EACpD,MAAA,CAAA,IAAK,CAAA;EACL,MAAA,OAAO,GAAA;EAAA,IACX;EAEA,IAAA,IAAI,IAAA,KAAS,MAAA,EAAQ,OAAO,OAAA,CAAQ,IAAI,MAAA,CAAO,IAAA,CAAK,KAAA,CAAM,CAAA,CAAE,MAAM,KAAA,EAAO,GAAG,CAAC,CAAC,GAAG,IAAI,CAAA;EACrF,IAAA,IAAI,IAAA,KAAS,MAAA,EAAQ,OAAO,OAAA,CAAQ,IAAI,MAAA,CAAO,CAAC,CAAA,CAAE,KAAA,CAAM,KAAA,EAAO,GAAG,CAAC,GAAG,IAAI,CAAA;EAC1E,IAAA,IAAI,IAAA,KAAS,MAAQ,OAAO,OAAA,CAAQ,IAAI,OAAA,CAAQ,IAAI,GAAG,IAAI,CAAA;EAC3D,IAAA,IAAI,IAAA,KAAS,OAAQ,OAAO,OAAA,CAAQ,IAAI,OAAA,CAAQ,KAAK,GAAG,IAAI,CAAA;EAC5D,IAAA,OAAO,IAAA;EAAA,EACX;EAEA,EAAA,OAAO,UAAA,EAAW;EACtB;EAEA,SAAS,MAAM,CAAA,EAAsB;EACjC,EAAA,OAAO,WAAA,CAAY,CAAA,EAAG,QAAA,CAAS,CAAC,CAAC,CAAA;EACrC;;ECjHA,SAAwB,aAAA,CAAc,KAAA,EAAiD,SAAA,GAA4B,EAAA,EAAsB;EACrI,EAAA,IAAI,CAAA,GAAI,KAAA;EAER,EAAA,IAAI;EACA,IAAA,CAAA,GAAI,UAAU,CAAC,CAAA;EAAA,EACnB,SAAS,CAAA,EAAG;EACR,IAAA,OAAO,CAAC,CAAC,CAAA;EAAA,EACb;EAEA,EAAA,OAAOC,eAAA,CAAiB,GAAG,SAAS,CAAA;EACxC;;ECnBA,MAAM,oBAAA,GAAuB,sBAAA;EAC7B,MAAM,mBAAA,GAAsB,uDAAA;EAC5B,MAAM,oBAAA,GAAuB,mDAAA;EAC7B,MAAM,aAAA,GAAgB,oBAAA;EAOtB,MAAM,sBAAA,GAAyB,CAAA;EAC/B,MAAM,oBAAA,GAAuB,EAAA;EAE7B,SAAS,OAAA,CAAQ,OAAkC,KAAA,EAAwB;EACvE,EAAA,IAAI,CAAC,KAAA,IAAS,CAAC,QAAA,CAAS,KAAK,GAAG,OAAO,IAAA;EACvC,EAAA,OAAO,CAAC,CAAC,KAAA,CAAM,KAAA,CAAM,KAAK,CAAA;EAC9B;EAEA,SAAS,eAAe,MAAA,EAAqC;EACzD,EAAA,IAAI,SAAS,MAAA,EAAQ;EACjB,IAAA,OAAO,MAAA,CAAO,GAAA,CAAI,KAAA,CAAM,GAAG,CAAA,CAAE,MAAA;EAAA,EACjC,CAAA,MAAO;EACH,IAAA,OAAO,CAAA;EAAA,EACX;EACJ;EAEA,SAAS,mBAAA,CAAoB,GAAA,EAAa,IAAA,EAAgB,IAAA,EAA8C;EACpG,EAAA,MAAM,OAAA,GAAU,IAAI,GAAA,CAAI,IAAI,CAAA;EAC5B,EAAA,MAAM,SAA4B,EAAC;EACnC,EAAA,MAAA,CAAO,IAAA,CAAK,GAAG,CAAA,CAAE,OAAA,CAAQ,CAAA,CAAA,KAAK;EAC1B,IAAA,IAAI,CAAC,OAAA,CAAQ,GAAA,CAAI,CAAC,CAAA,EAAG;EACjB,MAAA,MAAM,OAA+B,IAAA;EACrC,MAAA,MAAA,CAAO,IAAA,CAAK,IAAI,eAAA,CAAgB,IAAA,EAAM,GAAA,CAAI,CAAC,CAAA,EAAG,CAAA,sBAAA,EAAyB,CAAC,CAAA,CAAA,CAAG,CAAC,CAAA;EAAA,IAChF;EAAA,EACJ,CAAC,CAAA;EACD,EAAA,OAAO,MAAA;EACX;EAEA,MAAM,mBAAA,mBAAsB,IAAI,GAAA,CAAiC,CAAC,QAAA,EAAU,UAAU,YAAA,EAAc,cAAA,EAAgB,OAAA,EAAS,eAAe,CAAC,CAAA;EAC7I,SAAS,eAAA,CAAgB,QAA6B,CAAA,EAAmC;EACrF,EAAA,MAAM,SAA4B,EAAC;EAKnC,EAAA,IAAI,CAAC,mBAAA,CAAoB,GAAA,CAAI,OAAO,MAAA,CAAO,IAAI,CAAgC,CAAA,EAAG;EAC9E,IAAA,MAAA,CAAO,KAAK,IAAI,eAAA,CAAgB,CAAA,QAAA,EAAW,CAAC,UAAU,MAAA,CAAO,IAAA,EAAM,CAAA,iBAAA,EAAoB,KAAA,CAAM,KAAK,mBAAmB,CAAA,CAAE,KAAK,IAAI,CAAC,GAAG,CAAC,CAAA;EAAA,EACzI;EAQA,EAAA,IAAI,EAAE,SAAS,MAAA,CAAA,IAAW,CAAC,QAAQ,MAAA,CAAO,GAAA,EAAK,oBAAoB,CAAA,EAAG;EAClE,IAAA,MAAA,CAAO,IAAA,CAAK,IAAI,eAAA,CAAgB,CAAA,QAAA,EAAW,CAAC,CAAA,KAAA,CAAA,EAAU,MAAA,CAA0B,GAAA,EAAK,qCAAqC,CAAC,CAAA;EAAA,EAC/H;EAEA,EAAA,OAAO,MAAA;EACX;EAEA,SAAS,oBAAoB,YAAA,EAA8C;EACvE,EAAA,MAAM,SAA4B,EAAC;EACnC,EAAA,IAAI,eAAe,oBAAA,EAAsB;EACrC,IAAA,MAAA,CAAO,IAAA,CAAK,IAAI,eAAA,CAAgB,SAAA,EAAW,MAAM,CAAA,oBAAA,EAAuB,oBAAoB,mBAAmB,CAAC,CAAA;EAAA,EACpH;EACA,EAAA,OAAO,MAAA;EACX;EAEA,SAAS,iBAAiB,OAAA,EAGxB;EACE,EAAA,MAAM,SAAS,EAAC;EAChB,EAAA,IAAI,YAAA,GAAe,CAAA;EAEnB,EAAA,MAAA,CAAO,KAAK,OAAO,CAAA,CAAE,OAAA,CAAQ,CAAC,GAAW,CAAA,KAAc;EACnD,IAAA,MAAM,YAAA,GAAe,eAAA,CAAgB,OAAA,CAAQ,CAAC,GAAG,CAAC,CAAA;EAGlD,IAAA,IAAI,CAAC,aAAa,MAAA,EAAQ;EACtB,MAAA,YAAA,GAAe,YAAA,GAAe,cAAA,CAAe,OAAA,CAAQ,CAAC,CAAC,CAAA;EAAA,IAC3D;EAEA,IAAA,MAAA,CAAO,IAAA,CAAK,GAAG,YAAY,CAAA;EAAA,EAC/B,CAAC,CAAA;EAGD,EAAA,OAAO,EAAC,QAAQ,YAAA,EAAY;EAChC;EAEA,SAAS,eAAA,CAAgB,OAAA,GAAiC,EAAC,EAA2B;EAClF,EAAA,IAAI,SAAiC,EAAC;EAEtC,EAAA,MAAM,eAAA,GAAkB,CAACC,QAAAA,GAAiC,EAAC,KAAM;EAC7D,IAAA,KAAA,MAAW,cAAcA,QAAAA,EAAS;EAC9B,MAAA,MAAM,QAAQ,UAAA,CAAW,IAAA;EACzB,MAAA,IAAI,CAAC,KAAA,EAAO;EAEZ,MAAA,IAAI,MAAM,OAAA,EAAS;EACf,QAAA,eAAA,CAAgB,MAAM,OAAO,CAAA;EAAA,MACjC;EAEA,MAAA,MAAA,GAAS,MAAA,CAAO,OAAO,aAAA,CAAc,KAAA,EAAO,OAAO,IAAA,CAAK,EAAA,CAAG,KAAK,CAAC,CAAC,CAAA;EAElE,MAAA,IAAI,MAAM,OAAA,EAAS;EACf,QAAA,MAAM,aAAA,GAAgB,gBAAA,CAAiB,KAAA,CAAM,OAAO,CAAA;EACpD,QAAA,MAAA,GAAS,MAAA,CAAO,MAAA,CAAO,aAAA,CAAc,MAAM,CAAA;EAAA,MAC/C;EAAA,IACJ;EAAA,EACJ,CAAA;EAEA,EAAA,eAAA,CAAgB,OAAO,CAAA;EACvB,EAAA,IAAI,OAAA,CAAQ,MAAA,KAAY,IAAI,GAAA,CAAI,OAAA,CAAQ,GAAA,CAAI,CAAA,CAAA,KAAK,CAAA,CAAE,EAAE,CAAC,CAAA,CAAG,IAAA,EAAM;EAC3D,IAAA,MAAA,CAAO,KAAK,IAAI,eAAA,CAAgB,IAAA,EAAM,IAAA,EAAM,0BAA0B,CAAC,CAAA;EAAA,EAC3E;EAEA,EAAA,OAAO,MAAA;EACX;EAEA,SAAS,aAAA,CAAc,OAAiC,QAAA,EAA4C;EAChG,EAAA,MAAM,SAA4B,EAAC;EAUnC,EAAA,MAAM,sBAAA,GAAyB;EAAA,IAC3B,OAAA;EAAA,IACA,IAAA;EAAA,IACA,cAAA;EAAA,IACA,OAAA;EAAA,IACA,SAAA;EAAA,IACA,UAAA;EAAA,IACA,YAAA;EAAA,IACA,WAAA;EAAA,IACA,QAAA;EAAA,IACA;EAAA,GACJ;EAEA,EAAA,MAAM,gBAAA,GAAmB,oBAAoB,KAAA,EAAO,CAAC,GAAG,QAAA,EAAU,GAAG,sBAAsB,CAAC,CAAA;EAC5F,EAAA,MAAA,CAAO,IAAA,CAAK,GAAG,gBAAgB,CAAA;EAE/B,EAAA,IAAI,KAAA,CAAM,OAAA,GAAU,sBAAA,IAA0B,KAAA,CAAM,UAAU,sBAAA,EAAwB;EAClF,IAAA,MAAA,CAAO,IAAA,CAAK,IAAI,eAAA,CAAgB,SAAA,EAAW,MAAM,OAAA,EAAS,CAAA,sBAAA,EAAyB,sBAAsB,CAAA,CAAE,CAAC,CAAA;EAAA,EAChH;EAOA,EAAA,IAAI,CAAC,OAAA,CAAQ,KAAA,CAAM,MAAA,EAAQ,mBAAmB,CAAA,EAAG;EAC7C,IAAA,MAAA,CAAO,KAAK,IAAI,eAAA,CAAgB,UAAU,KAAA,CAAM,MAAA,EAAQ,+CAA+C,CAAC,CAAA;EAAA,EAC5G;EAQA,EAAA,IAAI,CAAC,OAAA,CAAQ,KAAA,CAAM,MAAA,EAAQ,oBAAoB,CAAA,EAAG;EAC9C,IAAA,MAAA,CAAO,KAAK,IAAI,eAAA,CAAgB,UAAU,KAAA,CAAM,MAAA,EAAQ,gDAAgD,CAAC,CAAA;EAAA,EAC7G;EAOA,EAAA,IAAI,CAAC,OAAA,CAAQ,KAAA,CAAM,UAAA,EAAY,aAAa,CAAA,EAAG;EAC3C,IAAA,MAAA,CAAO,KAAK,IAAI,eAAA,CAAgB,cAAc,KAAA,CAAM,UAAA,EAAY,4CAA4C,CAAC,CAAA;EAAA,EACjH;EAEA,EAAA,IAAI,MAAM,SAAA,KAAc,MAAA,IAAa,CAAC,SAAA,CAAU,KAAA,CAAM,SAAS,CAAA,EAAG;EAC9D,IAAA,MAAA,CAAO,KAAK,IAAI,eAAA,CAAgB,aAAa,KAAA,CAAM,SAAA,EAAW,wCAAwC,CAAC,CAAA;EAAA,EAC3G;EAEA,EAAA,OAAO,MAAA;EACX;EAYA,SAAwB,0BAAA,CAA2B,KAAA,EAAiC,SAAA,GAA4B,EAAA,EAAsB;EAClI,EAAA,IAAI,CAAA,GAAI,KAAA;EACR,EAAA,IAAI;EACA,IAAA,CAAA,GAAI,UAAU,CAAC,CAAA;EAAA,EACnB,SAAS,CAAA,EAAG;EACR,IAAA,OAAO,CAAC,CAAC,CAAA;EAAA,EACb;EAEA,EAAA,IAAI,MAAA,GAASX,eAAA,CAAc,CAAA,EAAG,SAAS,CAAA,CAClC,MAAA,CAAO,aAAA,CAAc,CAAA,EAAG,MAAA,CAAO,IAAA,CAAK,EAAA,CAAG,KAAK,CAAC,CAAC,CAAA;EAEnD,EAAA,IAAI,YAAA,GAAe,CAAA;EACnB,EAAA,IAAI,EAAE,OAAA,EAAS;EACX,IAAA,MAAM,aAAA,GAAgB,gBAAA,CAAiB,CAAA,CAAE,OAAO,CAAA;EAChD,IAAA,YAAA,IAAgB,aAAA,CAAc,YAAA;EAC9B,IAAA,MAAA,GAAS,MAAA,CAAO,MAAA,CAAO,aAAA,CAAc,MAAM,CAAA;EAAA,EAC/C;EAEA,EAAA,IAAI,EAAE,OAAA,EAAS;EACX,IAAA,MAAM,aAAA,GAAgB,eAAA,CAAgB,CAAA,CAAE,OAAO,CAAA;EAC/C,IAAA,MAAA,GAAS,MAAA,CAAO,OAAO,aAAa,CAAA;EAAA,EACxC;EAEA,EAAA,MAAA,GAAS,MAAA,CAAO,MAAA,CAAO,mBAAA,CAAoB,YAAY,CAAC,CAAA;EAExD,EAAA,OAAO,MAAA;EACX;;AC9BA,QAAM,UAAA,GAAa;EAAA,EACf,eAAA;EAAA,EACA,YAAA;EAAA,EACA,kBAAA;EAAA,EACA,gBAAA;EAAA,EACA,wBAAA;EAAA,EACA,2BAAA;EAAA,EACA,sBAAA;EAAA,EACA,uBAAA;EAAA,EACA;EACJ;AAEA,QAAM,aAAA,GAAgB;EAAA,EAClB,eAAA;EAAA,EACA,cAAA;EAAA,EACA;EACJ;AAEA,QAAM,KAAA,GAAQ,EAAC,UAAA,EAAY,SAAA,EAAW,YAAA;;;;;;;;;;;;;;;;;;;;;;;;","x_google_ignoreList":[0,7,26,30,39]}