{"version":3,"file":"main.cjs","sources":["../src/enum/symbols.ts","../src/enum/utils.ts","../src/enum/prelude.ts","../src/enum/constants.ts","../src/enum/extensions.ts"],"sourcesContent":["/**\n * Symbol for Option kind: `Some` or `None`.\n */\nexport const OptionKindSymbol = Symbol('Option kind');\n\n/**\n * Symbol for Result kind: `Ok` or `Err`.\n */\nexport const ResultKindSymbol = Symbol('Result kind');","import type { Option, Result } from './core.ts';\nimport { OptionKindSymbol, ResultKindSymbol } from './symbols.ts';\n\n/**\n * Checks if a value is an `Option`.\n *\n * @typeParam T - The expected type of the value contained within the `Option`.\n * @param o - The value to be checked as an `Option`.\n * @returns `true` if the value is an `Option`, otherwise `false`.\n */\nexport function isOption<T>(o: unknown): o is Option<T> {\n    // `Some` and `None` must be an object.\n    return o != null && typeof o === 'object' && OptionKindSymbol in o;\n}\n\n/**\n * Checks if a value is a `Result`.\n *\n * @typeParam T - The expected type of the success value contained within the `Result`.\n * @typeParam E - The expected type of the error value contained within the `Result`.\n * @param r - The value to be checked as a `Result`.\n * @returns `true` if the value is a `Result`, otherwise `false`.\n */\nexport function isResult<T, E>(r: unknown): r is Result<T, E> {\n    // `Ok` and `Err` must be an object.\n    return r != null && typeof r === 'object' && ResultKindSymbol in r;\n}","/* eslint-disable @typescript-eslint/no-unused-vars */\nimport type { AsyncOption, AsyncResult, Option, Result } from './core.ts';\nimport { OptionKindSymbol, ResultKindSymbol } from './symbols.ts';\nimport { isOption, isResult } from './utils.ts';\n\n/**\n * Represents the absence of a value, as a specialized `Option` type.\n * The type parameter is set to `never` because `None` does not hold a value.\n */\nexport interface None extends Option<never> {\n    /**\n     * When using `None` alone, the following overrides can make type inference more accurate.\n     */\n\n    readonly [OptionKindSymbol]: 'None';\n\n    isSome(): false;\n    isNone(): true;\n    isSomeAnd(predicate: (value: never) => boolean): false;\n    isSomeAndAsync(predicate: (value: never) => Promise<boolean>): Promise<false>;\n\n    expect(msg: string): never;\n    unwrap(): never;\n    unwrapOr<T>(defaultValue: T): T;\n    unwrapOrElse<T>(fn: () => T): T;\n    unwrapOrElseAsync<T>(fn: () => Promise<T>): Promise<T>;\n\n    okOr<E>(error: E): Result<never, E>;\n    okOrElse<E>(err: () => E): Result<never, E>;\n    transpose(): Result<None, never>;\n\n    filter(predicate: (value: never) => boolean): None;\n    flatten(): None;\n    map<U>(fn: (value: never) => U): None;\n    mapOr<U>(defaultValue: U, fn: (value: never) => U): U;\n    mapOrElse<U>(defaultFn: () => U, fn: (value: never) => U): U;\n\n    zip<U>(other: Option<U>): None;\n    zipWith<U, R>(other: Option<U>, fn: (value: never, otherValue: U) => R): None;\n    unzip(): [None, None];\n\n    and<U>(other: Option<U>): None;\n    andThen<U>(fn: (value: never) => Option<U>): None;\n    andThenAsync<U>(fn: (value: never) => AsyncOption<U>): Promise<None>;\n    or<T>(other: Option<T>): Option<T>;\n    orElse<T>(fn: () => Option<T>): Option<T>;\n    orElseAsync<T>(fn: () => AsyncOption<T>): AsyncOption<T>;\n    xor<T>(other: Option<T>): Option<T>;\n\n    inspect(fn: (value: never) => void): this;\n\n    eq<T>(other: Option<T>): boolean;\n}\n\n/**\n * Creates an `Option<T>` representing the presence of a value.\n * This function is typically used to construct an `Option` that contains a value, indicating that the operation yielding the value was successful.\n *\n * @typeParam T - The type of the value to be wrapped in a `Some`.\n * @param value - The value to wrap as a `Some` option.\n * @returns An `Option<T>` that contains the provided value, representing the `Some` case.\n *\n * @example\n * ```ts\n * const maybeValue = Some(1); // Option<number> with a value\n * if (maybeValue.isSome()) {\n *     console.log(maybeValue.unwrap()); // Outputs: 1\n * }\n * ```\n */\nexport function Some<T>(value: T): Option<T> {\n    const some: Option<T> = {\n        [Symbol.toStringTag]: 'Option',\n        [OptionKindSymbol]: 'Some',\n\n        isSome(): true {\n            return true;\n        },\n        isNone(): false {\n            return false;\n        },\n        isSomeAnd(predicate: (value: T) => boolean): boolean {\n            return predicate(value);\n        },\n        isSomeAndAsync(predicate: (value: T) => Promise<boolean>): Promise<boolean> {\n            return predicate(value);\n        },\n\n        expect(_msg: string): T {\n            return value;\n        },\n        unwrap(): T {\n            return value;\n        },\n        unwrapOr(_defaultValue: T): T {\n            return value;\n        },\n        unwrapOrElse(_fn: () => T): T {\n            return value;\n        },\n        unwrapOrElseAsync(_fn: () => Promise<T>): Promise<T> {\n            return Promise.resolve(value);\n        },\n\n        okOr<E>(_error: E): Result<T, E> {\n            return Ok(value);\n        },\n        okOrElse<E>(_err: () => E): Result<T, E> {\n            return Ok(value);\n        },\n        transpose<T, E>(): Result<Option<T>, E> {\n            const r = value as unknown as Result<T, E>;\n            assertResult(r);\n            return r.isOk() ? Ok(Some(r.unwrap())) : Err(r.unwrapErr());\n        },\n\n        filter(predicate: (value: T) => boolean): Option<T> {\n            return predicate(value) ? some : None;\n        },\n        flatten<T>(): Option<T> {\n            const o = value as unknown as Option<T>;\n            assertOption(o);\n            return o;\n        },\n        map<U>(fn: (value: T) => U): Option<U> {\n            return Some(fn(value));\n        },\n\n        mapOr<U>(_defaultValue: U, fn: (value: T) => U): U {\n            return fn(value);\n        },\n        mapOrElse<U>(_defaultFn: () => U, fn: (value: T) => U): U {\n            return fn(value);\n        },\n\n        zip<U>(other: Option<U>): Option<[T, U]> {\n            assertOption(other);\n            return other.isSome() ? Some([value, other.unwrap()]) : None;\n        },\n        zipWith<U, R>(other: Option<U>, fn: (value: T, otherValue: U) => R): Option<R> {\n            assertOption(other);\n            return other.isSome() ? Some(fn(value, other.unwrap())) : None;\n        },\n        unzip<T, U>(): [Option<T>, Option<U>] {\n            const tuple = value as unknown as [T, U];\n\n            if (!Array.isArray(tuple) || tuple.length !== 2) {\n                throw new TypeError('Unzip format is incorrect.');\n            }\n\n            const [a, b] = tuple;\n            return [Some(a), Some(b)];\n        },\n\n        and<U>(other: Option<U>): Option<U> {\n            assertOption(other);\n            return other;\n        },\n        andThen<U>(fn: (value: T) => Option<U>): Option<U> {\n            return fn(value);\n        },\n        andThenAsync<U>(fn: (value: T) => AsyncOption<U>): AsyncOption<U> {\n            return fn(value);\n        },\n        or(_other: Option<T>): Option<T> {\n            return some;\n        },\n        orElse(_fn: () => Option<T>): Option<T> {\n            return some;\n        },\n        orElseAsync(_fn: () => AsyncOption<T>): AsyncOption<T> {\n            return Promise.resolve(some);\n        },\n        xor(other: Option<T>): Option<T> {\n            assertOption(other);\n            return other.isSome() ? None : some;\n        },\n\n        inspect(fn: (value: T) => void): Option<T> {\n            fn(value);\n            return some;\n        },\n\n        eq(other: Option<T>): boolean {\n            assertOption(other);\n            return other.isSome() && other.unwrap() === value;\n        },\n\n        toString(): string {\n            return `Some(${ value })`;\n        },\n    } as const;\n\n    return some;\n}\n\n/**\n * A constant representing the `None` case of an `Option`, indicating the absence of a value.\n * This constant is frozen to ensure it is immutable and cannot be altered, preserving the integrity of `None` throughout the application.\n */\nexport const None = Object.freeze<None>({\n    [Symbol.toStringTag]: 'Option',\n    [OptionKindSymbol]: 'None',\n\n    isSome(): false {\n        return false;\n    },\n    isNone(): true {\n        return true;\n    },\n    isSomeAnd(_predicate: (value: never) => boolean): false {\n        return false;\n    },\n    isSomeAndAsync(_predicate: (value: never) => Promise<boolean>): Promise<false> {\n        return Promise.resolve(false);\n    },\n\n    expect(msg: string): never {\n        throw new TypeError(msg);\n    },\n    unwrap(): never {\n        throw new TypeError('Called `Option::unwrap()` on a `None` value');\n    },\n    unwrapOr<T>(defaultValue: T): T {\n        return defaultValue;\n    },\n    unwrapOrElse<T>(fn: () => T): T {\n        return fn();\n    },\n    unwrapOrElseAsync<T>(fn: () => Promise<T>): Promise<T> {\n        return fn();\n    },\n\n    okOr<E>(error: E): Result<never, E> {\n        return Err(error);\n    },\n    okOrElse<E>(err: () => E): Result<never, E> {\n        return Err(err());\n    },\n    transpose(): Result<None, never> {\n        return Ok(None);\n    },\n\n    filter(_predicate: (value: never) => boolean): None {\n        return None;\n    },\n    flatten(): None {\n        return None;\n    },\n    map<U>(_fn: (value: never) => U): None {\n        return None;\n    },\n\n    mapOr<U>(defaultValue: U, _fn: (value: never) => U): U {\n        return defaultValue;\n    },\n    mapOrElse<U>(defaultFn: () => U, _fn: (value: never) => U): U {\n        return defaultFn();\n    },\n\n    zip<U>(_other: Option<U>): None {\n        return None;\n    },\n    zipWith<U, R>(_other: Option<U>, _fn: (value: never, otherValue: U) => R): None {\n        return None;\n    },\n    unzip(): [None, None] {\n        return [None, None];\n    },\n\n    and<U>(_other: Option<U>): None {\n        return None;\n    },\n    andThen<U>(_fn: (value: never) => Option<U>): None {\n        return None;\n    },\n    andThenAsync<U>(_fn: (value: never) => AsyncOption<U>): Promise<None> {\n        return Promise.resolve(None);\n    },\n    or<T>(other: Option<T>): Option<T> {\n        assertOption(other);\n        return other;\n    },\n    orElse<T>(fn: () => Option<T>): Option<T> {\n        return fn();\n    },\n    orElseAsync<T>(fn: () => AsyncOption<T>): AsyncOption<T> {\n        return fn();\n    },\n    xor<T>(other: Option<T>): Option<T> {\n        assertOption(other);\n        return other.isSome() ? other : None;\n    },\n\n    inspect(_fn: (value: never) => void): None {\n        return None;\n    },\n\n    eq<T>(other: Option<T>): boolean {\n        assertOption(other);\n        return other === None;\n    },\n\n    toString(): string {\n        return 'None';\n    },\n}) as None;\n\n/**\n * Creates a `Result<T, E>` representing a successful outcome containing a value.\n * This function is used to construct a `Result` that signifies the operation was successful by containing the value `T`.\n *\n * @typeParam T - The type of the value to be contained in the `Ok` result.\n * @typeParam E - The type of the error that the result could potentially contain (not used in this case).\n * @param value - The value to wrap as an `Ok` result.\n * @returns A `Result<T, E>` that contains the provided value, representing the `Ok` case.\n *\n * @example\n * ```ts\n * const goodResult = Ok<number, Error>(1); // Result<number, Error> with a value\n * if (goodResult.isOk()) {\n *   console.log(goodResult.unwrap()); // Outputs: 1\n * }\n * ```\n */\nexport function Ok<T, E>(value: T): Result<T, E>;\n/**\n * Because javascript does not have a `()` type, use `void` instead.\n */\nexport function Ok<E>(): Result<void, E>;\nexport function Ok<T, E>(value?: T): Result<T, E> {\n    const ok: Result<T, E> = {\n        [Symbol.toStringTag]: 'Result',\n        [ResultKindSymbol]: 'Ok',\n\n        isOk(): true {\n            return true;\n        },\n        isErr(): false {\n            return false;\n        },\n        isOkAnd(predicate: (value: T) => boolean): boolean {\n            return predicate(value as T);\n        },\n        isOkAndAsync(predicate: (value: T) => Promise<boolean>): Promise<boolean> {\n            return predicate(value as T);\n        },\n        isErrAnd(_predicate: (error: E) => boolean): false {\n            return false;\n        },\n        isErrAndAsync(_predicate: (error: E) => Promise<boolean>): Promise<false> {\n            return Promise.resolve(false);\n        },\n\n        expect(_msg: string): T {\n            return value as T;\n        },\n        unwrap(): T {\n            return value as T;\n        },\n        unwrapOr(_defaultValue: T): T {\n            return value as T;\n        },\n        unwrapOrElse(_fn: (error: E) => T): T {\n            return value as T;\n        },\n        unwrapOrElseAsync(_fn: (error: E) => Promise<T>): Promise<T> {\n            return Promise.resolve(value as T);\n        },\n\n        expectErr(msg: string): E {\n            throw new TypeError(`${ msg }: ${ value }`);\n        },\n        unwrapErr(): E {\n            throw new TypeError('Called `Result::unwrapErr()` on an `Ok` value');\n        },\n\n        ok(): Option<T> {\n            return Some(value as T);\n        },\n        err(): None {\n            return None;\n        },\n        transpose<T>(): Option<Result<T, E>> {\n            const o = value as Option<T>;\n            assertOption(o);\n            return o.isSome() ? Some(Ok(o.unwrap())) : None;\n        },\n\n        map<U>(fn: (value: T) => U): Result<U, E> {\n            return Ok(fn(value as T));\n        },\n        mapErr<F>(_fn: (error: E) => F): Result<T, F> {\n            return Ok(value as T);\n        },\n        mapOr<U>(_defaultValue: U, fn: (value: T) => U): U {\n            return fn(value as T);\n        },\n        mapOrElse<U>(_defaultFn: (error: E) => U, fn: (value: T) => U): U {\n            return fn(value as T);\n        },\n        flatten<T>(): Result<T, E> {\n            const r = value as Result<T, E>;\n            assertResult(r);\n            return r;\n        },\n\n        and<U>(other: Result<U, E>): Result<U, E> {\n            assertResult(other);\n            return other;\n        },\n        or<F>(_other: Result<T, F>): Result<T, F> {\n            return ok as unknown as Result<T, F>;\n        },\n        andThen<U>(fn: (value: T) => Result<U, E>): Result<U, E> {\n            return fn(value as T);\n        },\n        andThenAsync<U>(fn: (value: T) => AsyncResult<U, E>): AsyncResult<U, E> {\n            return fn(value as T);\n        },\n        orElse<F>(_fn: (error: E) => Result<T, F>): Result<T, F> {\n            return ok as unknown as Result<T, F>;\n        },\n        orElseAsync<F>(_fn: (error: E) => AsyncResult<T, F>): AsyncResult<T, F> {\n            return Promise.resolve(ok as unknown as Result<T, F>);\n        },\n\n        inspect(fn: (value: T) => void): Result<T, E> {\n            fn(value as T);\n            return ok;\n        },\n        inspectErr(_fn: (error: E) => void): Result<T, E> {\n            return ok;\n        },\n\n        eq(other: Result<T, E>): boolean {\n            assertResult(other);\n            return other.isOk() && other.unwrap() === value;\n        },\n\n        asOk<F>(): Result<T, F> {\n            return ok as unknown as Result<T, F>;\n        },\n        asErr(): never {\n            throw new TypeError('Called `Result::asErr()` on an `Ok` value');\n        },\n\n        toString(): string {\n            return `Ok(${ value })`;\n        },\n    } as const;\n\n    return ok;\n}\n\n/**\n * Creates a `Result<T, E>` representing a failed outcome containing an error.\n * This function is used to construct a `Result` that signifies the operation failed by containing the error `E`.\n *\n * @typeParam T - The type of the value that the result could potentially contain (not used in this case).\n * @typeParam E - The type of the error to be wrapped in the `Err` result.\n * @param error - The error to wrap as an `Err` result.\n * @returns A `Result<T, E>` that contains the provided error, representing the `Err` case.\n *\n * @example\n * ```ts\n * const badResult = Err<number, Error>(new Error('Something went wrong'));\n * if (badResult.isErr()) {\n *   console.error(badResult.unwrapErr()); // Outputs: Error: Something went wrong\n * }\n * ```\n */\nexport function Err<T, E>(error: E): Result<T, E> {\n    const err: Result<T, E> = {\n        [Symbol.toStringTag]: 'Result',\n        [ResultKindSymbol]: 'Err',\n\n        isOk(): false {\n            return false;\n        },\n        isErr(): true {\n            return true;\n        },\n        isOkAnd(_predicate: (value: T) => boolean): false {\n            return false;\n        },\n        isOkAndAsync(_predicate: (value: T) => Promise<boolean>): Promise<boolean> {\n            return Promise.resolve(false);\n        },\n        isErrAnd(predicate: (error: E) => boolean): boolean {\n            return predicate(error);\n        },\n        isErrAndAsync(predicate: (error: E) => Promise<boolean>): Promise<boolean> {\n            return predicate(error);\n        },\n\n        expect(msg: string): T {\n            throw new TypeError(`${ msg }: ${ error }`);\n        },\n        unwrap(): T {\n            throw new TypeError('Called `Result::unwrap()` on an `Err` value');\n        },\n        unwrapOr(defaultValue: T): T {\n            return defaultValue;\n        },\n        unwrapOrElse(fn: (error: E) => T): T {\n            return fn(error);\n        },\n        unwrapOrElseAsync(fn: (error: E) => Promise<T>): Promise<T> {\n            return fn(error);\n        },\n\n        expectErr(_msg: string): E {\n            return error;\n        },\n        unwrapErr(): E {\n            return error;\n        },\n\n        ok(): None {\n            return None;\n        },\n        err(): Option<E> {\n            return Some(error);\n        },\n        transpose<T>(): Option<Result<T, E>> {\n            return Some(err as unknown as Result<T, E>);\n        },\n\n        map<U>(_fn: (value: T) => U): Result<U, E> {\n            return Err(error);\n        },\n        mapErr<F>(fn: (error: E) => F): Result<T, F> {\n            return Err(fn(error));\n        },\n        mapOr<U>(defaultValue: U, _fn: (value: T) => U): U {\n            return defaultValue;\n        },\n        mapOrElse<U>(defaultFn: (error: E) => U, _fn: (value: T) => U): U {\n            return defaultFn(error);\n        },\n        flatten<T>(): Result<T, E> {\n            return err as unknown as Result<T, E>;\n        },\n\n        and<U>(_other: Result<U, E>): Result<U, E> {\n            return err as unknown as Result<U, E>;\n        },\n        or<F>(other: Result<T, F>): Result<T, F> {\n            assertResult(other);\n            return other;\n        },\n        andThen<U>(_fn: (value: T) => Result<U, E>): Result<U, E> {\n            return err as unknown as Result<U, E>;\n        },\n        andThenAsync<U>(_fn: (value: T) => AsyncResult<U, E>): AsyncResult<U, E> {\n            return Promise.resolve(err as unknown as Result<U, E>);\n        },\n        orElse<F>(fn: (error: E) => Result<T, F>): Result<T, F> {\n            return fn(error);\n        },\n        orElseAsync<F>(fn: (error: E) => AsyncResult<T, F>): AsyncResult<T, F> {\n            return fn(error);\n        },\n\n        inspect(_fn: (value: T) => void): Result<T, E> {\n            return err;\n        },\n        inspectErr(fn: (error: E) => void): Result<T, E> {\n            fn(error);\n            return err;\n        },\n\n        eq(other: Result<T, E>): boolean {\n            assertResult(other);\n            return other.isErr() && other.unwrapErr() === error;\n        },\n\n        asOk(): never {\n            throw new TypeError('Called `Result::asOk()` on an `Err` value');\n        },\n        asErr<U>(): Result<U, E> {\n            return err as unknown as Result<U, E>;\n        },\n\n        toString(): string {\n            return `Err(${ error })`;\n        },\n    } as const;\n\n    return err;\n}\n\n/**\n * Asserts that a given value is an `Option`.\n *\n * @typeParam T - The expected type of the value contained within the `Option`.\n * @param o - The value to be checked as an `Option`.\n * @throws {TypeError} If the value is not an `Option`.\n */\nfunction assertOption<T>(o: Option<T>): void {\n    if (!isOption(o)) {\n        throw new TypeError(`This(${ o }) is not an Option`);\n    }\n}\n\n/**\n * Asserts that a given value is a `Result`.\n *\n * @typeParam T - The expected type of the success value contained within the `Result`.\n * @typeParam E - The expected type of the error value contained within the `Result`.\n * @param r - The value to be checked as a `Result`.\n * @throws {TypeError} If the value is not a `Result`.\n */\nfunction assertResult<T, E>(r: Result<T, E>): void {\n    if (!isResult(r)) {\n        throw new TypeError(`This(${ r }) is not a Result`);\n    }\n}","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport type { Result } from './core.ts';\nimport { Ok } from './prelude.ts';\n\n/**\n * Exports some Result constants.\n */\n\n/**\n * Result constant for `true`.\n * Can be used anywhere due to immutability.\n */\nexport const RESULT_TRUE: Result<boolean, any> = Ok(true);\n\n/**\n * Result constant for `false`.\n * Can be used anywhere due to immutability.\n */\nexport const RESULT_FALSE: Result<boolean, any> = Ok(false);\n\n/**\n * Result constant for `0`.\n * Can be used anywhere due to immutability.\n */\nexport const RESULT_ZERO: Result<number, any> = Ok(0);\n\n/**\n * Result constant for `void` or `()`.\n */\nexport const RESULT_VOID: Result<void, any> = Ok();","import type { Result } from './core.ts';\nimport { Err, Ok } from './prelude.ts';\n\n/**\n * Converts a Promise to a Result type, capturing the resolved value in an `Ok`, or the error in an `Err`.\n * This allows for promise-based asynchronous operations to be handled in a way that is more in line with the Result pattern.\n *\n * @typeParam T - The type of the value that the promise resolves to.\n * @typeParam E - The type of the error that the promise may reject with, defaults to `Error`.\n * @param p - The promise to convert into a `Result` type.\n * @returns A promise that resolves to a `Result<T, E>`. If the input promise `p` resolves, the resulting promise will resolve with `Ok<T>`. If the input promise `p` rejects, the resulting promise will resolve with `Err<E>`.\n *\n * @example\n * ```ts\n * async function example() {\n *     const result = await promiseToAsyncResult(fetchData());\n *     result.inspect(x => {\n *         console.log('Data:', x);\n *     }).inspectErr(err => {\n *         console.error('Error:', err);\n *     });\n * }\n * ```\n */\nexport function promiseToAsyncResult<T, E = Error>(p: Promise<T>): Promise<Result<T, E>> {\n    return p.then((x): Result<T, E> => {\n        return Ok(x);\n    }).catch((err: E): Result<T, E> => {\n        return Err(err);\n    });\n}"],"names":[],"mappings":";;AAGa,MAAA,gBAAA,GAAmB,OAAO,aAAa,CAAA,CAAA;AAKvC,MAAA,gBAAA,GAAmB,OAAO,aAAa,CAAA;;ACE7C,SAAS,SAAY,CAA4B,EAAA;AAEpD,EAAA,OAAO,CAAK,IAAA,IAAA,IAAQ,OAAO,CAAA,KAAM,YAAY,gBAAoB,IAAA,CAAA,CAAA;AACrE,CAAA;AAUO,SAAS,SAAe,CAA+B,EAAA;AAE1D,EAAA,OAAO,CAAK,IAAA,IAAA,IAAQ,OAAO,CAAA,KAAM,YAAY,gBAAoB,IAAA,CAAA,CAAA;AACrE;;AC4CO,SAAS,KAAQ,KAAqB,EAAA;AACzC,EAAA,MAAM,IAAkB,GAAA;AAAA,IACpB,CAAC,MAAO,CAAA,WAAW,GAAG,QAAA;AAAA,IACtB,CAAC,gBAAgB,GAAG,MAAA;AAAA,IAEpB,MAAe,GAAA;AACX,MAAO,OAAA,IAAA,CAAA;AAAA,KACX;AAAA,IACA,MAAgB,GAAA;AACZ,MAAO,OAAA,KAAA,CAAA;AAAA,KACX;AAAA,IACA,UAAU,SAA2C,EAAA;AACjD,MAAA,OAAO,UAAU,KAAK,CAAA,CAAA;AAAA,KAC1B;AAAA,IACA,eAAe,SAA6D,EAAA;AACxE,MAAA,OAAO,UAAU,KAAK,CAAA,CAAA;AAAA,KAC1B;AAAA,IAEA,OAAO,IAAiB,EAAA;AACpB,MAAO,OAAA,KAAA,CAAA;AAAA,KACX;AAAA,IACA,MAAY,GAAA;AACR,MAAO,OAAA,KAAA,CAAA;AAAA,KACX;AAAA,IACA,SAAS,aAAqB,EAAA;AAC1B,MAAO,OAAA,KAAA,CAAA;AAAA,KACX;AAAA,IACA,aAAa,GAAiB,EAAA;AAC1B,MAAO,OAAA,KAAA,CAAA;AAAA,KACX;AAAA,IACA,kBAAkB,GAAmC,EAAA;AACjD,MAAO,OAAA,OAAA,CAAQ,QAAQ,KAAK,CAAA,CAAA;AAAA,KAChC;AAAA,IAEA,KAAQ,MAAyB,EAAA;AAC7B,MAAA,OAAO,GAAG,KAAK,CAAA,CAAA;AAAA,KACnB;AAAA,IACA,SAAY,IAA6B,EAAA;AACrC,MAAA,OAAO,GAAG,KAAK,CAAA,CAAA;AAAA,KACnB;AAAA,IACA,SAAwC,GAAA;AACpC,MAAA,MAAM,CAAI,GAAA,KAAA,CAAA;AACV,MAAA,YAAA,CAAa,CAAC,CAAA,CAAA;AACd,MAAA,OAAO,CAAE,CAAA,IAAA,EAAS,GAAA,EAAA,CAAG,IAAK,CAAA,CAAA,CAAE,MAAO,EAAC,CAAC,CAAA,GAAI,GAAI,CAAA,CAAA,CAAE,WAAW,CAAA,CAAA;AAAA,KAC9D;AAAA,IAEA,OAAO,SAA6C,EAAA;AAChD,MAAO,OAAA,SAAA,CAAU,KAAK,CAAA,GAAI,IAAO,GAAA,IAAA,CAAA;AAAA,KACrC;AAAA,IACA,OAAwB,GAAA;AACpB,MAAA,MAAM,CAAI,GAAA,KAAA,CAAA;AACV,MAAA,YAAA,CAAa,CAAC,CAAA,CAAA;AACd,MAAO,OAAA,CAAA,CAAA;AAAA,KACX;AAAA,IACA,IAAO,EAAgC,EAAA;AACnC,MAAO,OAAA,IAAA,CAAK,EAAG,CAAA,KAAK,CAAC,CAAA,CAAA;AAAA,KACzB;AAAA,IAEA,KAAA,CAAS,eAAkB,EAAwB,EAAA;AAC/C,MAAA,OAAO,GAAG,KAAK,CAAA,CAAA;AAAA,KACnB;AAAA,IACA,SAAA,CAAa,YAAqB,EAAwB,EAAA;AACtD,MAAA,OAAO,GAAG,KAAK,CAAA,CAAA;AAAA,KACnB;AAAA,IAEA,IAAO,KAAkC,EAAA;AACrC,MAAA,YAAA,CAAa,KAAK,CAAA,CAAA;AAClB,MAAO,OAAA,KAAA,CAAM,MAAO,EAAA,GAAI,IAAK,CAAA,CAAC,OAAO,KAAM,CAAA,MAAA,EAAQ,CAAC,CAAI,GAAA,IAAA,CAAA;AAAA,KAC5D;AAAA,IACA,OAAA,CAAc,OAAkB,EAA+C,EAAA;AAC3E,MAAA,YAAA,CAAa,KAAK,CAAA,CAAA;AAClB,MAAO,OAAA,KAAA,CAAM,MAAO,EAAA,GAAI,IAAK,CAAA,EAAA,CAAG,OAAO,KAAM,CAAA,MAAA,EAAQ,CAAC,CAAI,GAAA,IAAA,CAAA;AAAA,KAC9D;AAAA,IACA,KAAsC,GAAA;AAClC,MAAA,MAAM,KAAQ,GAAA,KAAA,CAAA;AAEd,MAAA,IAAI,CAAC,KAAM,CAAA,OAAA,CAAQ,KAAK,CAAK,IAAA,KAAA,CAAM,WAAW,CAAG,EAAA;AAC7C,QAAM,MAAA,IAAI,UAAU,4BAA4B,CAAA,CAAA;AAAA,OACpD;AAEA,MAAM,MAAA,CAAC,CAAG,EAAA,CAAC,CAAI,GAAA,KAAA,CAAA;AACf,MAAA,OAAO,CAAC,IAAK,CAAA,CAAC,CAAG,EAAA,IAAA,CAAK,CAAC,CAAC,CAAA,CAAA;AAAA,KAC5B;AAAA,IAEA,IAAO,KAA6B,EAAA;AAChC,MAAA,YAAA,CAAa,KAAK,CAAA,CAAA;AAClB,MAAO,OAAA,KAAA,CAAA;AAAA,KACX;AAAA,IACA,QAAW,EAAwC,EAAA;AAC/C,MAAA,OAAO,GAAG,KAAK,CAAA,CAAA;AAAA,KACnB;AAAA,IACA,aAAgB,EAAkD,EAAA;AAC9D,MAAA,OAAO,GAAG,KAAK,CAAA,CAAA;AAAA,KACnB;AAAA,IACA,GAAG,MAA8B,EAAA;AAC7B,MAAO,OAAA,IAAA,CAAA;AAAA,KACX;AAAA,IACA,OAAO,GAAiC,EAAA;AACpC,MAAO,OAAA,IAAA,CAAA;AAAA,KACX;AAAA,IACA,YAAY,GAA2C,EAAA;AACnD,MAAO,OAAA,OAAA,CAAQ,QAAQ,IAAI,CAAA,CAAA;AAAA,KAC/B;AAAA,IACA,IAAI,KAA6B,EAAA;AAC7B,MAAA,YAAA,CAAa,KAAK,CAAA,CAAA;AAClB,MAAO,OAAA,KAAA,CAAM,MAAO,EAAA,GAAI,IAAO,GAAA,IAAA,CAAA;AAAA,KACnC;AAAA,IAEA,QAAQ,EAAmC,EAAA;AACvC,MAAA,EAAA,CAAG,KAAK,CAAA,CAAA;AACR,MAAO,OAAA,IAAA,CAAA;AAAA,KACX;AAAA,IAEA,GAAG,KAA2B,EAAA;AAC1B,MAAA,YAAA,CAAa,KAAK,CAAA,CAAA;AAClB,MAAA,OAAO,KAAM,CAAA,MAAA,EAAY,IAAA,KAAA,CAAM,QAAa,KAAA,KAAA,CAAA;AAAA,KAChD;AAAA,IAEA,QAAmB,GAAA;AACf,MAAA,OAAO,QAAS,KAAM,CAAA,CAAA,CAAA,CAAA;AAAA,KAC1B;AAAA,GACJ,CAAA;AAEA,EAAO,OAAA,IAAA,CAAA;AACX,CAAA;AAMa,MAAA,IAAA,GAAO,OAAO,MAAa,CAAA;AAAA,EACpC,CAAC,MAAO,CAAA,WAAW,GAAG,QAAA;AAAA,EACtB,CAAC,gBAAgB,GAAG,MAAA;AAAA,EAEpB,MAAgB,GAAA;AACZ,IAAO,OAAA,KAAA,CAAA;AAAA,GACX;AAAA,EACA,MAAe,GAAA;AACX,IAAO,OAAA,IAAA,CAAA;AAAA,GACX;AAAA,EACA,UAAU,UAA8C,EAAA;AACpD,IAAO,OAAA,KAAA,CAAA;AAAA,GACX;AAAA,EACA,eAAe,UAAgE,EAAA;AAC3E,IAAO,OAAA,OAAA,CAAQ,QAAQ,KAAK,CAAA,CAAA;AAAA,GAChC;AAAA,EAEA,OAAO,GAAoB,EAAA;AACvB,IAAM,MAAA,IAAI,UAAU,GAAG,CAAA,CAAA;AAAA,GAC3B;AAAA,EACA,MAAgB,GAAA;AACZ,IAAM,MAAA,IAAI,UAAU,6CAA6C,CAAA,CAAA;AAAA,GACrE;AAAA,EACA,SAAY,YAAoB,EAAA;AAC5B,IAAO,OAAA,YAAA,CAAA;AAAA,GACX;AAAA,EACA,aAAgB,EAAgB,EAAA;AAC5B,IAAA,OAAO,EAAG,EAAA,CAAA;AAAA,GACd;AAAA,EACA,kBAAqB,EAAkC,EAAA;AACnD,IAAA,OAAO,EAAG,EAAA,CAAA;AAAA,GACd;AAAA,EAEA,KAAQ,KAA4B,EAAA;AAChC,IAAA,OAAO,IAAI,KAAK,CAAA,CAAA;AAAA,GACpB;AAAA,EACA,SAAY,GAAgC,EAAA;AACxC,IAAO,OAAA,GAAA,CAAI,KAAK,CAAA,CAAA;AAAA,GACpB;AAAA,EACA,SAAiC,GAAA;AAC7B,IAAA,OAAO,GAAG,IAAI,CAAA,CAAA;AAAA,GAClB;AAAA,EAEA,OAAO,UAA6C,EAAA;AAChD,IAAO,OAAA,IAAA,CAAA;AAAA,GACX;AAAA,EACA,OAAgB,GAAA;AACZ,IAAO,OAAA,IAAA,CAAA;AAAA,GACX;AAAA,EACA,IAAO,GAAgC,EAAA;AACnC,IAAO,OAAA,IAAA,CAAA;AAAA,GACX;AAAA,EAEA,KAAA,CAAS,cAAiB,GAA6B,EAAA;AACnD,IAAO,OAAA,YAAA,CAAA;AAAA,GACX;AAAA,EACA,SAAA,CAAa,WAAoB,GAA6B,EAAA;AAC1D,IAAA,OAAO,SAAU,EAAA,CAAA;AAAA,GACrB;AAAA,EAEA,IAAO,MAAyB,EAAA;AAC5B,IAAO,OAAA,IAAA,CAAA;AAAA,GACX;AAAA,EACA,OAAA,CAAc,QAAmB,GAA+C,EAAA;AAC5E,IAAO,OAAA,IAAA,CAAA;AAAA,GACX;AAAA,EACA,KAAsB,GAAA;AAClB,IAAO,OAAA,CAAC,MAAM,IAAI,CAAA,CAAA;AAAA,GACtB;AAAA,EAEA,IAAO,MAAyB,EAAA;AAC5B,IAAO,OAAA,IAAA,CAAA;AAAA,GACX;AAAA,EACA,QAAW,GAAwC,EAAA;AAC/C,IAAO,OAAA,IAAA,CAAA;AAAA,GACX;AAAA,EACA,aAAgB,GAAsD,EAAA;AAClE,IAAO,OAAA,OAAA,CAAQ,QAAQ,IAAI,CAAA,CAAA;AAAA,GAC/B;AAAA,EACA,GAAM,KAA6B,EAAA;AAC/B,IAAA,YAAA,CAAa,KAAK,CAAA,CAAA;AAClB,IAAO,OAAA,KAAA,CAAA;AAAA,GACX;AAAA,EACA,OAAU,EAAgC,EAAA;AACtC,IAAA,OAAO,EAAG,EAAA,CAAA;AAAA,GACd;AAAA,EACA,YAAe,EAA0C,EAAA;AACrD,IAAA,OAAO,EAAG,EAAA,CAAA;AAAA,GACd;AAAA,EACA,IAAO,KAA6B,EAAA;AAChC,IAAA,YAAA,CAAa,KAAK,CAAA,CAAA;AAClB,IAAO,OAAA,KAAA,CAAM,MAAO,EAAA,GAAI,KAAQ,GAAA,IAAA,CAAA;AAAA,GACpC;AAAA,EAEA,QAAQ,GAAmC,EAAA;AACvC,IAAO,OAAA,IAAA,CAAA;AAAA,GACX;AAAA,EAEA,GAAM,KAA2B,EAAA;AAC7B,IAAA,YAAA,CAAa,KAAK,CAAA,CAAA;AAClB,IAAA,OAAO,KAAU,KAAA,IAAA,CAAA;AAAA,GACrB;AAAA,EAEA,QAAmB,GAAA;AACf,IAAO,OAAA,MAAA,CAAA;AAAA,GACX;AACJ,CAAC,EAAA;AAwBM,SAAS,GAAS,KAAyB,EAAA;AAC9C,EAAA,MAAM,EAAmB,GAAA;AAAA,IACrB,CAAC,MAAO,CAAA,WAAW,GAAG,QAAA;AAAA,IACtB,CAAC,gBAAgB,GAAG,IAAA;AAAA,IAEpB,IAAa,GAAA;AACT,MAAO,OAAA,IAAA,CAAA;AAAA,KACX;AAAA,IACA,KAAe,GAAA;AACX,MAAO,OAAA,KAAA,CAAA;AAAA,KACX;AAAA,IACA,QAAQ,SAA2C,EAAA;AAC/C,MAAA,OAAO,UAAU,KAAU,CAAA,CAAA;AAAA,KAC/B;AAAA,IACA,aAAa,SAA6D,EAAA;AACtE,MAAA,OAAO,UAAU,KAAU,CAAA,CAAA;AAAA,KAC/B;AAAA,IACA,SAAS,UAA0C,EAAA;AAC/C,MAAO,OAAA,KAAA,CAAA;AAAA,KACX;AAAA,IACA,cAAc,UAA4D,EAAA;AACtE,MAAO,OAAA,OAAA,CAAQ,QAAQ,KAAK,CAAA,CAAA;AAAA,KAChC;AAAA,IAEA,OAAO,IAAiB,EAAA;AACpB,MAAO,OAAA,KAAA,CAAA;AAAA,KACX;AAAA,IACA,MAAY,GAAA;AACR,MAAO,OAAA,KAAA,CAAA;AAAA,KACX;AAAA,IACA,SAAS,aAAqB,EAAA;AAC1B,MAAO,OAAA,KAAA,CAAA;AAAA,KACX;AAAA,IACA,aAAa,GAAyB,EAAA;AAClC,MAAO,OAAA,KAAA,CAAA;AAAA,KACX;AAAA,IACA,kBAAkB,GAA2C,EAAA;AACzD,MAAO,OAAA,OAAA,CAAQ,QAAQ,KAAU,CAAA,CAAA;AAAA,KACrC;AAAA,IAEA,UAAU,GAAgB,EAAA;AACtB,MAAA,MAAM,IAAI,SAAU,CAAA,CAAA,EAAI,GAAI,CAAA,EAAA,EAAM,KAAM,CAAE,CAAA,CAAA,CAAA;AAAA,KAC9C;AAAA,IACA,SAAe,GAAA;AACX,MAAM,MAAA,IAAI,UAAU,+CAA+C,CAAA,CAAA;AAAA,KACvE;AAAA,IAEA,EAAgB,GAAA;AACZ,MAAA,OAAO,KAAK,KAAU,CAAA,CAAA;AAAA,KAC1B;AAAA,IACA,GAAY,GAAA;AACR,MAAO,OAAA,IAAA,CAAA;AAAA,KACX;AAAA,IACA,SAAqC,GAAA;AACjC,MAAA,MAAM,CAAI,GAAA,KAAA,CAAA;AACV,MAAA,YAAA,CAAa,CAAC,CAAA,CAAA;AACd,MAAO,OAAA,CAAA,CAAE,QAAW,GAAA,IAAA,CAAK,GAAG,CAAE,CAAA,MAAA,EAAQ,CAAC,CAAI,GAAA,IAAA,CAAA;AAAA,KAC/C;AAAA,IAEA,IAAO,EAAmC,EAAA;AACtC,MAAO,OAAA,EAAA,CAAG,EAAG,CAAA,KAAU,CAAC,CAAA,CAAA;AAAA,KAC5B;AAAA,IACA,OAAU,GAAoC,EAAA;AAC1C,MAAA,OAAO,GAAG,KAAU,CAAA,CAAA;AAAA,KACxB;AAAA,IACA,KAAA,CAAS,eAAkB,EAAwB,EAAA;AAC/C,MAAA,OAAO,GAAG,KAAU,CAAA,CAAA;AAAA,KACxB;AAAA,IACA,SAAA,CAAa,YAA6B,EAAwB,EAAA;AAC9D,MAAA,OAAO,GAAG,KAAU,CAAA,CAAA;AAAA,KACxB;AAAA,IACA,OAA2B,GAAA;AACvB,MAAA,MAAM,CAAI,GAAA,KAAA,CAAA;AACV,MAAA,YAAA,CAAa,CAAC,CAAA,CAAA;AACd,MAAO,OAAA,CAAA,CAAA;AAAA,KACX;AAAA,IAEA,IAAO,KAAmC,EAAA;AACtC,MAAA,YAAA,CAAa,KAAK,CAAA,CAAA;AAClB,MAAO,OAAA,KAAA,CAAA;AAAA,KACX;AAAA,IACA,GAAM,MAAoC,EAAA;AACtC,MAAO,OAAA,EAAA,CAAA;AAAA,KACX;AAAA,IACA,QAAW,EAA8C,EAAA;AACrD,MAAA,OAAO,GAAG,KAAU,CAAA,CAAA;AAAA,KACxB;AAAA,IACA,aAAgB,EAAwD,EAAA;AACpE,MAAA,OAAO,GAAG,KAAU,CAAA,CAAA;AAAA,KACxB;AAAA,IACA,OAAU,GAA+C,EAAA;AACrD,MAAO,OAAA,EAAA,CAAA;AAAA,KACX;AAAA,IACA,YAAe,GAAyD,EAAA;AACpE,MAAO,OAAA,OAAA,CAAQ,QAAQ,EAA6B,CAAA,CAAA;AAAA,KACxD;AAAA,IAEA,QAAQ,EAAsC,EAAA;AAC1C,MAAA,EAAA,CAAG,KAAU,CAAA,CAAA;AACb,MAAO,OAAA,EAAA,CAAA;AAAA,KACX;AAAA,IACA,WAAW,GAAuC,EAAA;AAC9C,MAAO,OAAA,EAAA,CAAA;AAAA,KACX;AAAA,IAEA,GAAG,KAA8B,EAAA;AAC7B,MAAA,YAAA,CAAa,KAAK,CAAA,CAAA;AAClB,MAAA,OAAO,KAAM,CAAA,IAAA,EAAU,IAAA,KAAA,CAAM,QAAa,KAAA,KAAA,CAAA;AAAA,KAC9C;AAAA,IAEA,IAAwB,GAAA;AACpB,MAAO,OAAA,EAAA,CAAA;AAAA,KACX;AAAA,IACA,KAAe,GAAA;AACX,MAAM,MAAA,IAAI,UAAU,2CAA2C,CAAA,CAAA;AAAA,KACnE;AAAA,IAEA,QAAmB,GAAA;AACf,MAAA,OAAO,MAAO,KAAM,CAAA,CAAA,CAAA,CAAA;AAAA,KACxB;AAAA,GACJ,CAAA;AAEA,EAAO,OAAA,EAAA,CAAA;AACX,CAAA;AAmBO,SAAS,IAAU,KAAwB,EAAA;AAC9C,EAAA,MAAM,GAAoB,GAAA;AAAA,IACtB,CAAC,MAAO,CAAA,WAAW,GAAG,QAAA;AAAA,IACtB,CAAC,gBAAgB,GAAG,KAAA;AAAA,IAEpB,IAAc,GAAA;AACV,MAAO,OAAA,KAAA,CAAA;AAAA,KACX;AAAA,IACA,KAAc,GAAA;AACV,MAAO,OAAA,IAAA,CAAA;AAAA,KACX;AAAA,IACA,QAAQ,UAA0C,EAAA;AAC9C,MAAO,OAAA,KAAA,CAAA;AAAA,KACX;AAAA,IACA,aAAa,UAA8D,EAAA;AACvE,MAAO,OAAA,OAAA,CAAQ,QAAQ,KAAK,CAAA,CAAA;AAAA,KAChC;AAAA,IACA,SAAS,SAA2C,EAAA;AAChD,MAAA,OAAO,UAAU,KAAK,CAAA,CAAA;AAAA,KAC1B;AAAA,IACA,cAAc,SAA6D,EAAA;AACvE,MAAA,OAAO,UAAU,KAAK,CAAA,CAAA;AAAA,KAC1B;AAAA,IAEA,OAAO,GAAgB,EAAA;AACnB,MAAA,MAAM,IAAI,SAAU,CAAA,CAAA,EAAI,GAAI,CAAA,EAAA,EAAM,KAAM,CAAE,CAAA,CAAA,CAAA;AAAA,KAC9C;AAAA,IACA,MAAY,GAAA;AACR,MAAM,MAAA,IAAI,UAAU,6CAA6C,CAAA,CAAA;AAAA,KACrE;AAAA,IACA,SAAS,YAAoB,EAAA;AACzB,MAAO,OAAA,YAAA,CAAA;AAAA,KACX;AAAA,IACA,aAAa,EAAwB,EAAA;AACjC,MAAA,OAAO,GAAG,KAAK,CAAA,CAAA;AAAA,KACnB;AAAA,IACA,kBAAkB,EAA0C,EAAA;AACxD,MAAA,OAAO,GAAG,KAAK,CAAA,CAAA;AAAA,KACnB;AAAA,IAEA,UAAU,IAAiB,EAAA;AACvB,MAAO,OAAA,KAAA,CAAA;AAAA,KACX;AAAA,IACA,SAAe,GAAA;AACX,MAAO,OAAA,KAAA,CAAA;AAAA,KACX;AAAA,IAEA,EAAW,GAAA;AACP,MAAO,OAAA,IAAA,CAAA;AAAA,KACX;AAAA,IACA,GAAiB,GAAA;AACb,MAAA,OAAO,KAAK,KAAK,CAAA,CAAA;AAAA,KACrB;AAAA,IACA,SAAqC,GAAA;AACjC,MAAA,OAAO,KAAK,GAA8B,CAAA,CAAA;AAAA,KAC9C;AAAA,IAEA,IAAO,GAAoC,EAAA;AACvC,MAAA,OAAO,IAAI,KAAK,CAAA,CAAA;AAAA,KACpB;AAAA,IACA,OAAU,EAAmC,EAAA;AACzC,MAAO,OAAA,GAAA,CAAI,EAAG,CAAA,KAAK,CAAC,CAAA,CAAA;AAAA,KACxB;AAAA,IACA,KAAA,CAAS,cAAiB,GAAyB,EAAA;AAC/C,MAAO,OAAA,YAAA,CAAA;AAAA,KACX;AAAA,IACA,SAAA,CAAa,WAA4B,GAAyB,EAAA;AAC9D,MAAA,OAAO,UAAU,KAAK,CAAA,CAAA;AAAA,KAC1B;AAAA,IACA,OAA2B,GAAA;AACvB,MAAO,OAAA,GAAA,CAAA;AAAA,KACX;AAAA,IAEA,IAAO,MAAoC,EAAA;AACvC,MAAO,OAAA,GAAA,CAAA;AAAA,KACX;AAAA,IACA,GAAM,KAAmC,EAAA;AACrC,MAAA,YAAA,CAAa,KAAK,CAAA,CAAA;AAClB,MAAO,OAAA,KAAA,CAAA;AAAA,KACX;AAAA,IACA,QAAW,GAA+C,EAAA;AACtD,MAAO,OAAA,GAAA,CAAA;AAAA,KACX;AAAA,IACA,aAAgB,GAAyD,EAAA;AACrE,MAAO,OAAA,OAAA,CAAQ,QAAQ,GAA8B,CAAA,CAAA;AAAA,KACzD;AAAA,IACA,OAAU,EAA8C,EAAA;AACpD,MAAA,OAAO,GAAG,KAAK,CAAA,CAAA;AAAA,KACnB;AAAA,IACA,YAAe,EAAwD,EAAA;AACnE,MAAA,OAAO,GAAG,KAAK,CAAA,CAAA;AAAA,KACnB;AAAA,IAEA,QAAQ,GAAuC,EAAA;AAC3C,MAAO,OAAA,GAAA,CAAA;AAAA,KACX;AAAA,IACA,WAAW,EAAsC,EAAA;AAC7C,MAAA,EAAA,CAAG,KAAK,CAAA,CAAA;AACR,MAAO,OAAA,GAAA,CAAA;AAAA,KACX;AAAA,IAEA,GAAG,KAA8B,EAAA;AAC7B,MAAA,YAAA,CAAa,KAAK,CAAA,CAAA;AAClB,MAAA,OAAO,KAAM,CAAA,KAAA,EAAW,IAAA,KAAA,CAAM,WAAgB,KAAA,KAAA,CAAA;AAAA,KAClD;AAAA,IAEA,IAAc,GAAA;AACV,MAAM,MAAA,IAAI,UAAU,2CAA2C,CAAA,CAAA;AAAA,KACnE;AAAA,IACA,KAAyB,GAAA;AACrB,MAAO,OAAA,GAAA,CAAA;AAAA,KACX;AAAA,IAEA,QAAmB,GAAA;AACf,MAAA,OAAO,OAAQ,KAAM,CAAA,CAAA,CAAA,CAAA;AAAA,KACzB;AAAA,GACJ,CAAA;AAEA,EAAO,OAAA,GAAA,CAAA;AACX,CAAA;AASA,SAAS,aAAgB,CAAoB,EAAA;AACzC,EAAI,IAAA,CAAC,QAAS,CAAA,CAAC,CAAG,EAAA;AACd,IAAA,MAAM,IAAI,SAAA,CAAU,CAAS,KAAA,EAAA,CAAE,CAAoB,kBAAA,CAAA,CAAA,CAAA;AAAA,GACvD;AACJ,CAAA;AAUA,SAAS,aAAmB,CAAuB,EAAA;AAC/C,EAAI,IAAA,CAAC,QAAS,CAAA,CAAC,CAAG,EAAA;AACd,IAAA,MAAM,IAAI,SAAA,CAAU,CAAS,KAAA,EAAA,CAAE,CAAmB,iBAAA,CAAA,CAAA,CAAA;AAAA,GACtD;AACJ;;AC9lBa,MAAA,WAAA,GAAoC,GAAG,IAAI,EAAA;AAM3C,MAAA,YAAA,GAAqC,GAAG,KAAK,EAAA;AAM7C,MAAA,WAAA,GAAmC,GAAG,CAAC,EAAA;AAK7C,MAAM,cAAiC,EAAG;;ACL1C,SAAS,qBAAmC,CAAsC,EAAA;AACrF,EAAO,OAAA,CAAA,CAAE,IAAK,CAAA,CAAC,CAAoB,KAAA;AAC/B,IAAA,OAAO,GAAG,CAAC,CAAA,CAAA;AAAA,GACd,CAAA,CAAE,KAAM,CAAA,CAAC,GAAyB,KAAA;AAC/B,IAAA,OAAO,IAAI,GAAG,CAAA,CAAA;AAAA,GACjB,CAAA,CAAA;AACL;;;;;;;;;;;;;;"}