{"version":3,"file":"spectrum-generator.esm.js","sources":["../node_modules/ml-peak-shape-generator/lib-esm/util/constants.js","../node_modules/ml-peak-shape-generator/lib-esm/util/erfinv.js","../node_modules/ml-peak-shape-generator/lib-esm/shapes/1d/gaussian/Gaussian.js","../node_modules/ml-peak-shape-generator/lib-esm/shapes/1d/lorentzian/Lorentzian.js","../node_modules/ml-peak-shape-generator/lib-esm/shapes/1d/lorentzianDispersive/LorentzianDispersive.js","../node_modules/ml-peak-shape-generator/lib-esm/shapes/1d/pseudoVoigt/PseudoVoigt.js","../node_modules/ml-peak-shape-generator/lib-esm/shapes/1d/generalizedLorentzian/GeneralizedLorentzian.js","../node_modules/ml-peak-shape-generator/lib-esm/shapes/2d/gaussian2D/Gaussian2D.js","../node_modules/ml-peak-shape-generator/lib-esm/shapes/1d/getShape1D.js","../node_modules/ml-peak-shape-generator/lib-esm/shapes/2d/getShape2D.js","../lib/BaseSpectrumGenerator.js","../lib/util/addBaseline.js","../node_modules/is-any-array/lib/index.js","../node_modules/ml-spectra-processing/lib/x/xCheck.js","../node_modules/ml-spectra-processing/lib/x/xFindClosestIndex.js","../node_modules/ml-spectra-processing/lib/x/xGetFromToIndex.js","../node_modules/ml-spectra-processing/lib/x/xAdd.js","../node_modules/ml-spectra-processing/lib/utils/createArray.js","../node_modules/ml-xsadd/lib-esm/XSadd.js","../node_modules/ml-spectra-processing/lib/utils/createRandomArray.js","../node_modules/ml-spectra-processing/lib/x/xMaxValue.js","../node_modules/ml-spectra-processing/lib/matrix/matrixCreateEmpty.js","../node_modules/ml-spectra-processing/lib/matrix/matrixCheck.js","../node_modules/ml-spectra-processing/lib/matrix/matrixMinMaxZ.js","../lib/util/addNoise.js","../lib/SpectrumGenerator.js","../lib/Spectrum2DGenerator.js","../lib/generateSpectrum.js","../lib/SparseSpectrumGenerator.js","../lib/generateSparseSpectrum.js"],"sourcesContent":["export const GAUSSIAN_EXP_FACTOR = -4 * Math.LN2;\nexport const ROOT_PI_OVER_LN2 = Math.sqrt(Math.PI / Math.LN2);\nexport const ROOT_THREE = Math.sqrt(3);\nexport const ROOT_2LN2 = Math.sqrt(2 * Math.LN2);\nexport const ROOT_2LN2_MINUS_ONE = Math.sqrt(2 * Math.LN2) - 1;\n//# sourceMappingURL=constants.js.map","// https://en.wikipedia.org/wiki/Error_function#Inverse_functions\n// This code yields to a good approximation\n// If needed a better implementation using polynomial can be found on https://en.wikipedia.org/wiki/Error_function#Inverse_functions\nexport default function erfinv(x) {\n    let a = 0.147;\n    if (x === 0)\n        return 0;\n    let ln1MinusXSqrd = Math.log(1 - x * x);\n    let lnEtcBy2Plus2 = ln1MinusXSqrd / 2 + 2 / (Math.PI * a);\n    let firstSqrt = Math.sqrt(lnEtcBy2Plus2 ** 2 - ln1MinusXSqrd / a);\n    let secondSqrt = Math.sqrt(firstSqrt - lnEtcBy2Plus2);\n    return secondSqrt * (x > 0 ? 1 : -1);\n}\n//# sourceMappingURL=erfinv.js.map","import { ROOT_2LN2, GAUSSIAN_EXP_FACTOR, ROOT_PI_OVER_LN2, } from '../../../util/constants';\nimport erfinv from '../../../util/erfinv';\nexport class Gaussian {\n    constructor(options = {}) {\n        const { fwhm = 500, sd } = options;\n        this.fwhm = sd ? gaussianWidthToFWHM(2 * sd) : fwhm;\n    }\n    fwhmToWidth(fwhm = this.fwhm) {\n        return gaussianFwhmToWidth(fwhm);\n    }\n    widthToFWHM(width) {\n        return gaussianWidthToFWHM(width);\n    }\n    fct(x) {\n        return gaussianFct(x, this.fwhm);\n    }\n    getArea(height = calculateGaussianHeight({ fwhm: this.fwhm })) {\n        return getGaussianArea({ fwhm: this.fwhm, height });\n    }\n    getFactor(area) {\n        return getGaussianFactor(area);\n    }\n    getData(options = {}) {\n        return getGaussianData(this, options);\n    }\n    calculateHeight(area = 1) {\n        return calculateGaussianHeight({ fwhm: this.fwhm, area });\n    }\n    getParameters() {\n        return ['fwhm'];\n    }\n}\nexport function calculateGaussianHeight(options) {\n    let { fwhm = 500, area = 1, sd } = options;\n    if (sd)\n        fwhm = gaussianWidthToFWHM(2 * sd);\n    return (2 * area) / ROOT_PI_OVER_LN2 / fwhm;\n}\n/**\n * Calculate the height of the gaussian function of a specific width (fwhm) at a speicifc\n * x position (the gaussian is centered on x=0)\n * @param x\n * @param fwhm\n * @returns y\n */\nexport function gaussianFct(x, fwhm) {\n    return Math.exp(GAUSSIAN_EXP_FACTOR * Math.pow(x / fwhm, 2));\n}\nexport function gaussianWidthToFWHM(width) {\n    return width * ROOT_2LN2;\n}\nexport function gaussianFwhmToWidth(fwhm) {\n    return fwhm / ROOT_2LN2;\n}\nexport function getGaussianArea(options) {\n    let { fwhm = 500, sd, height = 1 } = options;\n    if (sd)\n        fwhm = gaussianWidthToFWHM(2 * sd);\n    return (height * ROOT_PI_OVER_LN2 * fwhm) / 2;\n}\nexport function getGaussianFactor(area = 0.9999) {\n    return Math.sqrt(2) * erfinv(area);\n}\nexport function getGaussianData(shape = {}, options = {}) {\n    let { fwhm = 500, sd } = shape;\n    if (sd)\n        fwhm = gaussianWidthToFWHM(2 * sd);\n    let { length, factor = getGaussianFactor(), height = calculateGaussianHeight({ fwhm }), } = options;\n    if (!length) {\n        length = Math.min(Math.ceil(fwhm * factor), Math.pow(2, 25) - 1);\n        if (length % 2 === 0)\n            length++;\n    }\n    const center = (length - 1) / 2;\n    const data = new Float64Array(length);\n    for (let i = 0; i <= center; i++) {\n        data[i] = gaussianFct(i - center, fwhm) * height;\n        data[length - 1 - i] = data[i];\n    }\n    return data;\n}\n//# sourceMappingURL=Gaussian.js.map","import { ROOT_THREE } from '../../../util/constants';\nexport class Lorentzian {\n    constructor(options = {}) {\n        const { fwhm = 500 } = options;\n        this.fwhm = fwhm;\n    }\n    fwhmToWidth(fwhm = this.fwhm) {\n        return lorentzianFwhmToWidth(fwhm);\n    }\n    widthToFWHM(width) {\n        return lorentzianWidthToFWHM(width);\n    }\n    fct(x) {\n        return lorentzianFct(x, this.fwhm);\n    }\n    getArea(height = 1) {\n        return getLorentzianArea({ fwhm: this.fwhm, height });\n    }\n    getFactor(area) {\n        return getLorentzianFactor(area);\n    }\n    getData(options = {}) {\n        return getLorentzianData(this, options);\n    }\n    calculateHeight(area = 1) {\n        return calculateLorentzianHeight({ fwhm: this.fwhm, area });\n    }\n    getParameters() {\n        return ['fwhm'];\n    }\n}\nexport const calculateLorentzianHeight = ({ fwhm = 1, area = 1 }) => {\n    return (2 * area) / Math.PI / fwhm;\n};\nexport const getLorentzianArea = (options) => {\n    const { fwhm = 500, height = 1 } = options;\n    return (height * Math.PI * fwhm) / 2;\n};\nexport const lorentzianFct = (x, fwhm) => {\n    return fwhm ** 2 / (4 * x ** 2 + fwhm ** 2);\n};\nexport const lorentzianWidthToFWHM = (width) => {\n    return width * ROOT_THREE;\n};\nexport const lorentzianFwhmToWidth = (fwhm) => {\n    return fwhm / ROOT_THREE;\n};\nexport const getLorentzianFactor = (area = 0.9999) => {\n    if (area >= 1) {\n        throw new Error('area should be (0 - 1)');\n    }\n    const halfResidual = (1 - area) * 0.5;\n    const quantileFunction = (p) => Math.tan(Math.PI * (p - 0.5));\n    return ((quantileFunction(1 - halfResidual) - quantileFunction(halfResidual)) / 2);\n};\nexport const getLorentzianData = (shape = {}, options = {}) => {\n    let { fwhm = 500 } = shape;\n    let { length, factor = getLorentzianFactor(), height = calculateLorentzianHeight({ fwhm, area: 1 }), } = options;\n    if (!length) {\n        length = Math.min(Math.ceil(fwhm * factor), Math.pow(2, 25) - 1);\n        if (length % 2 === 0)\n            length++;\n    }\n    const center = (length - 1) / 2;\n    const data = new Float64Array(length);\n    for (let i = 0; i <= center; i++) {\n        data[i] = lorentzianFct(i - center, fwhm) * height;\n        data[length - 1 - i] = data[i];\n    }\n    return data;\n};\n//# sourceMappingURL=Lorentzian.js.map","import { calculateLorentzianHeight, getLorentzianFactor, lorentzianFwhmToWidth, lorentzianWidthToFWHM, } from '../lorentzian/Lorentzian';\nexport class LorentzianDispersive {\n    constructor(options = {}) {\n        const { fwhm = 500 } = options;\n        this.fwhm = fwhm;\n    }\n    fwhmToWidth(fwhm = this.fwhm) {\n        return lorentzianFwhmToWidth(fwhm);\n    }\n    widthToFWHM(width) {\n        return lorentzianWidthToFWHM(width);\n    }\n    fct(x) {\n        return lorentzianDispersiveFct(x, this.fwhm);\n    }\n    //eslint-disable-next-line\n    getArea(_height) {\n        return 0;\n    }\n    getFactor(area) {\n        return getLorentzianFactor(area);\n    }\n    getData(options = {}) {\n        return getLorentzianDispersiveData(this, options);\n    }\n    calculateHeight(area = 1) {\n        return calculateLorentzianHeight({ fwhm: this.fwhm, area });\n    }\n    getParameters() {\n        return ['fwhm'];\n    }\n}\nexport const lorentzianDispersiveFct = (x, fwhm) => {\n    return (2 * fwhm * x) / (4 * x ** 2 + fwhm ** 2);\n};\nexport const getLorentzianDispersiveData = (shape = {}, options = {}) => {\n    let { fwhm = 500 } = shape;\n    let { length, factor = getLorentzianFactor(), height = calculateLorentzianHeight({ fwhm, area: 1 }), } = options;\n    if (!length) {\n        length = Math.min(Math.ceil(fwhm * factor), Math.pow(2, 25) - 1);\n        if (length % 2 === 0)\n            length++;\n    }\n    const center = (length - 1) / 2;\n    const data = new Float64Array(length);\n    for (let i = 0; i <= center; i++) {\n        data[i] = lorentzianDispersiveFct(i - center, fwhm) * height;\n        data[length - 1 - i] = -data[i];\n    }\n    return data;\n};\n//# sourceMappingURL=LorentzianDispersive.js.map","import { GAUSSIAN_EXP_FACTOR, ROOT_2LN2_MINUS_ONE, ROOT_PI_OVER_LN2, } from '../../../util/constants';\nimport { gaussianFct, getGaussianFactor } from '../gaussian/Gaussian';\nimport { lorentzianFct, getLorentzianFactor } from '../lorentzian/Lorentzian';\nexport class PseudoVoigt {\n    constructor(options = {}) {\n        const { fwhm = 500, mu = 0.5 } = options;\n        this.mu = mu;\n        this.fwhm = fwhm;\n    }\n    fwhmToWidth(fwhm = this.fwhm, mu = this.mu) {\n        return pseudoVoigtFwhmToWidth(fwhm, mu);\n    }\n    widthToFWHM(width, mu = this.mu) {\n        return pseudoVoigtWidthToFWHM(width, mu);\n    }\n    fct(x) {\n        return pseudoVoigtFct(x, this.fwhm, this.mu);\n    }\n    getArea(height = 1) {\n        return getPseudoVoigtArea({ fwhm: this.fwhm, height, mu: this.mu });\n    }\n    getFactor(area) {\n        return getPseudoVoigtFactor(area);\n    }\n    getData(options = {}) {\n        const { length, factor, height = calculatePseudoVoigtHeight({\n            fwhm: this.fwhm,\n            mu: this.mu,\n            area: 1,\n        }), } = options;\n        return getPseudoVoigtData(this, { factor, length, height });\n    }\n    calculateHeight(area = 1) {\n        return calculatePseudoVoigtHeight({ fwhm: this.fwhm, mu: this.mu, area });\n    }\n    getParameters() {\n        return ['fwhm', 'mu'];\n    }\n}\nexport const calculatePseudoVoigtHeight = (options = {}) => {\n    let { fwhm = 1, mu = 0.5, area = 1 } = options;\n    return (2 * area) / (fwhm * (mu * ROOT_PI_OVER_LN2 + (1 - mu) * Math.PI));\n};\nexport const pseudoVoigtFct = (x, fwhm, mu) => {\n    return (1 - mu) * lorentzianFct(x, fwhm) + mu * gaussianFct(x, fwhm);\n};\nexport const pseudoVoigtWidthToFWHM = (width, mu = 0.5) => {\n    return width * (mu * ROOT_2LN2_MINUS_ONE + 1);\n};\nexport const pseudoVoigtFwhmToWidth = (fwhm, mu = 0.5) => {\n    return fwhm / (mu * ROOT_2LN2_MINUS_ONE + 1);\n};\nexport const getPseudoVoigtArea = (options) => {\n    const { fwhm = 500, height = 1, mu = 0.5 } = options;\n    return (fwhm * height * (mu * ROOT_PI_OVER_LN2 + (1 - mu) * Math.PI)) / 2;\n};\nexport const getPseudoVoigtFactor = (area = 0.9999, mu = 0.5) => {\n    return mu < 1 ? getLorentzianFactor(area) : getGaussianFactor(area);\n};\nexport const getPseudoVoigtData = (shape = {}, options = {}) => {\n    let { fwhm = 500, mu = 0.5 } = shape;\n    let { length, factor = getPseudoVoigtFactor(0.999, mu), height = calculatePseudoVoigtHeight({ fwhm, mu, area: 1 }), } = options;\n    if (!height) {\n        height =\n            1 /\n                ((mu / Math.sqrt(-GAUSSIAN_EXP_FACTOR / Math.PI)) * fwhm +\n                    ((1 - mu) * fwhm * Math.PI) / 2);\n    }\n    if (!length) {\n        length = Math.min(Math.ceil(fwhm * factor), Math.pow(2, 25) - 1);\n        if (length % 2 === 0)\n            length++;\n    }\n    const center = (length - 1) / 2;\n    const data = new Float64Array(length);\n    for (let i = 0; i <= center; i++) {\n        data[i] = pseudoVoigtFct(i - center, fwhm, mu) * height;\n        data[length - 1 - i] = data[i];\n    }\n    return data;\n};\n//# sourceMappingURL=PseudoVoigt.js.map","import { ROOT_THREE } from '../../../util/constants';\n/**\n * This shape is a linear combination of rational function (n|n+2), for n = 0 (lorentzian function) and n = 2\n * the parameter that combines those two functions is `gamma` and it is called the kurtosis parameter, it is an\n * implementation of generalized lorentzian shape published by Stanislav Sykora in the SMASH 2010. DOI:10.3247/SL3nmr10.006\n * @link http://www.ebyte.it/stan/Talk_ML_UserMeeting_SMASH_2010_GeneralizedLorentzian.html\n */\nexport class GeneralizedLorentzian {\n    constructor(options = {}) {\n        const { fwhm = 500, gamma = 0.5 } = options;\n        this.fwhm = fwhm;\n        this.gamma = gamma;\n    }\n    fwhmToWidth(fwhm = this.fwhm) {\n        return generalizedLorentzianFwhmToWidth(fwhm);\n    }\n    widthToFWHM(width) {\n        return generalizedLorentzianWidthToFWHM(width);\n    }\n    fct(x) {\n        return generalizedLorentzianFct(x, this.fwhm, this.gamma);\n    }\n    getArea(height = 1) {\n        return getGeneralizedLorentzianArea({\n            fwhm: this.fwhm,\n            height,\n            gamma: this.gamma,\n        });\n    }\n    getFactor(area) {\n        return getGeneralizedLorentzianFactor(area);\n    }\n    getData(options = {}) {\n        return getGeneralizedLorentzianData(this, options);\n    }\n    calculateHeight(area = 1) {\n        const { gamma, fwhm } = this;\n        return calculateGeneralizedLorentzianHeight({ fwhm, area, gamma });\n    }\n    getParameters() {\n        return ['fwhm', 'gamma'];\n    }\n}\nexport const calculateGeneralizedLorentzianHeight = ({ fwhm = 1, gamma = 1, area = 1, }) => {\n    return (area / fwhm / (3.14159 - 0.420894 * gamma)) * 2;\n};\n/**\n * expression of integral generated by Mathematica of the function\n */\nexport const getGeneralizedLorentzianArea = (options) => {\n    const { fwhm = 500, height = 1, gamma = 1 } = options;\n    return (height * fwhm * (3.14159 - 0.420894 * gamma)) / 2;\n};\nexport const generalizedLorentzianFct = (x, fwhm, gamma) => {\n    const u = ((2 * x) / fwhm) ** 2;\n    return (1 - gamma) / (1 + u) + (gamma * (1 + u / 2)) / (1 + u + u ** 2);\n};\nexport const generalizedLorentzianWidthToFWHM = (width) => {\n    return width * ROOT_THREE;\n};\nexport const generalizedLorentzianFwhmToWidth = (fwhm) => {\n    return fwhm / ROOT_THREE;\n};\nexport const getGeneralizedLorentzianFactor = (area = 0.9999) => {\n    if (area >= 1) {\n        throw new Error('area should be (0 - 1)');\n    }\n    const halfResidual = (1 - area) * 0.5;\n    const quantileFunction = (p) => Math.tan(Math.PI * (p - 0.5));\n    return ((quantileFunction(1 - halfResidual) - quantileFunction(halfResidual)) / 2);\n};\nexport const getGeneralizedLorentzianData = (shape = {}, options = {}) => {\n    let { fwhm = 500, gamma = 1 } = shape;\n    let { length, factor = getGeneralizedLorentzianFactor(), height = calculateGeneralizedLorentzianHeight({ fwhm, area: 1, gamma }), } = options;\n    if (!length) {\n        length = Math.min(Math.ceil(fwhm * factor), Math.pow(2, 25) - 1);\n        if (length % 2 === 0)\n            length++;\n    }\n    const center = (length - 1) / 2;\n    const data = new Float64Array(length);\n    for (let i = 0; i <= center; i++) {\n        data[i] = generalizedLorentzianFct(i - center, fwhm, gamma) * height;\n        data[length - 1 - i] = data[i];\n    }\n    return data;\n};\n//# sourceMappingURL=GeneralizedLorentzian.js.map","import { GAUSSIAN_EXP_FACTOR } from '../../../util/constants';\nimport { getGaussianFactor, gaussianFwhmToWidth, gaussianWidthToFWHM, } from '../../1d/gaussian/Gaussian';\nexport class Gaussian2D {\n    constructor(options = {}) {\n        let { fwhm = 20, sd } = options;\n        fwhm = ensureFWHM2D(fwhm, sd);\n        this.fwhmX = fwhm.x;\n        this.fwhmY = fwhm.y;\n    }\n    fct(x, y) {\n        return gaussian2DFct(x, y, this.fwhmX, this.fwhmY);\n    }\n    getData(options = {}) {\n        return getGaussian2DData({\n            fwhm: { x: this.fwhmX, y: this.fwhmY },\n        }, options);\n    }\n    getFactor(volume = 1) {\n        return getGaussianFactor(volume);\n    }\n    getVolume(height = calculateGaussian2DHeight({\n        fwhm: { x: this.fwhmX, y: this.fwhmY },\n        volume: 1,\n    })) {\n        return getGaussian2DVolume({\n            fwhm: { x: this.fwhmX, y: this.fwhmY },\n            height,\n        });\n    }\n    widthToFWHM(width) {\n        return gaussianWidthToFWHM(width);\n    }\n    fwhmToWidth(fwhm) {\n        return gaussianFwhmToWidth(fwhm);\n    }\n    calculateHeight(volume = 1) {\n        return calculateGaussian2DHeight({\n            volume,\n            fwhm: { x: this.fwhmX, y: this.fwhmY },\n        });\n    }\n    set fwhm(fwhm) {\n        fwhm = ensureXYNumber(fwhm);\n        this.fwhmX = fwhm.x;\n        this.fwhmY = fwhm.y;\n    }\n}\nexport const gaussian2DFct = (x, y, xFWHM, yFWHM) => {\n    return Math.exp(GAUSSIAN_EXP_FACTOR * (Math.pow(x / xFWHM, 2) + Math.pow(y / yFWHM, 2)));\n};\nexport const getGaussian2DData = (shape, options = {}) => {\n    let { fwhm = 50, sd } = shape;\n    fwhm = ensureFWHM2D(fwhm, sd);\n    let { factor = getGaussianFactor(), length = { x: 0, y: 0 }, height = calculateGaussian2DHeight({ fwhm, volume: 1 }), } = options;\n    factor = ensureXYNumber(factor);\n    length = ensureXYNumber(length);\n    for (const axis of ['x', 'y']) {\n        if (!length[axis]) {\n            length[axis] = Math.min(Math.ceil(fwhm[axis] * factor[axis]), Math.pow(2, 25) - 1);\n            if (length[axis] % 2 === 0)\n                length[axis]++;\n        }\n    }\n    const xCenter = (length.x - 1) / 2;\n    const yCenter = (length.y - 1) / 2;\n    const data = new Array(length.x);\n    for (let i = 0; i < length.x; i++) {\n        data[i] = new Float64Array(length.y);\n    }\n    for (let i = 0; i < length.x; i++) {\n        for (let j = 0; j < length.y; j++) {\n            data[i][j] =\n                gaussian2DFct(i - xCenter, j - yCenter, fwhm.x, fwhm.y) * height;\n        }\n    }\n    return data;\n};\nexport const calculateGaussian2DHeight = (options = {}) => {\n    let { volume = 1, fwhm = 50, sd } = options;\n    fwhm = ensureFWHM2D(fwhm, sd);\n    return (volume * Math.LN2 * 4) / (Math.PI * fwhm.y * fwhm.x);\n};\nexport const getGaussian2DVolume = (options = {}) => {\n    let { fwhm = 50, height = 1, sd } = options;\n    fwhm = ensureFWHM2D(fwhm, sd);\n    return (height * Math.PI * fwhm.y * fwhm.x) / Math.LN2 / 4;\n};\nfunction ensureXYNumber(input) {\n    return typeof input !== 'object' ? { x: input, y: input } : { ...input };\n}\nfunction ensureFWHM2D(fwhm, sd) {\n    if (sd !== undefined) {\n        let sdObject = ensureXYNumber(sd);\n        return {\n            x: gaussianWidthToFWHM(2 * sdObject.x),\n            y: gaussianWidthToFWHM(2 * sdObject.y),\n        };\n    }\n    else if (fwhm !== undefined) {\n        return ensureXYNumber(fwhm);\n    }\n    else {\n        throw new Error('ensureFWHM2D must have either fwhm or sd defined');\n    }\n}\n//# sourceMappingURL=Gaussian2D.js.map","import { Gaussian } from './gaussian/Gaussian';\nimport { GeneralizedLorentzian } from './generalizedLorentzian/GeneralizedLorentzian';\nimport { Lorentzian } from './lorentzian/Lorentzian';\nimport { LorentzianDispersive } from './lorentzianDispersive/LorentzianDispersive';\nimport { PseudoVoigt } from './pseudoVoigt/PseudoVoigt';\n/**\n * Generate a instance of a specific kind of shape.\n */\nexport function getShape1D(shape) {\n    const { kind } = shape;\n    switch (kind) {\n        case 'gaussian':\n            return new Gaussian(shape);\n        case 'lorentzian':\n            return new Lorentzian(shape);\n        case 'pseudoVoigt':\n            return new PseudoVoigt(shape);\n        case 'lorentzianDispersive':\n            return new LorentzianDispersive(shape);\n        case 'generalizedLorentzian':\n            return new GeneralizedLorentzian(shape);\n        default: {\n            throw Error(`Unknown distribution ${kind}`);\n        }\n    }\n}\n//# sourceMappingURL=getShape1D.js.map","import { Gaussian2D } from './gaussian2D/Gaussian2D';\n/**\n * Generate a instance of a specific kind of shape.\n */\nexport function getShape2D(shape) {\n    const { kind } = shape;\n    switch (kind) {\n        case 'gaussian':\n            return new Gaussian2D(shape);\n        default: {\n            const unHandled = kind;\n            // eslint-disable-next-line @typescript-eslint/restrict-template-expressions\n            throw Error(`Unknown distribution ${unHandled}`);\n        }\n    }\n}\n//# sourceMappingURL=getShape2D.js.map","import { getShape1D } from 'ml-peak-shape-generator';\nexport class BaseSpectrumGenerator {\n    from;\n    to;\n    nbPoints;\n    interval;\n    peakWidthFct;\n    shape;\n    constructor(options = {}) {\n        const { from = 0, to = 1000, nbPoints = 10001, peakWidthFct, shape = { kind: 'gaussian', fwhm: 5 }, } = options;\n        assertNumber(from, 'from');\n        assertNumber(to, 'to');\n        assertInteger(nbPoints, 'nbPoints');\n        if (to <= from) {\n            throw new RangeError('to option must be larger than from');\n        }\n        if (peakWidthFct && typeof peakWidthFct !== 'function') {\n            throw new TypeError('peakWidthFct option must be a function');\n        }\n        this.from = from;\n        this.to = to;\n        this.nbPoints = nbPoints;\n        this.interval = (to - from) / (nbPoints - 1);\n        this.peakWidthFct = peakWidthFct;\n        this.shape = getShape1D(shape);\n    }\n    /**\n     * Resolves a peak to its canonical parameters, cloning and configuring\n     * separate shape instances for the left and right halves.\n     */\n    resolvePeak(peak, options) {\n        let x0;\n        let intensity;\n        let peakFWHM;\n        let peakWidth;\n        let peakShapeOptions;\n        if (Array.isArray(peak)) {\n            [x0, intensity, peakFWHM, peakShapeOptions] = peak;\n        }\n        else {\n            x0 = peak.x;\n            intensity = peak.y;\n            peakWidth = peak.width;\n            peakShapeOptions = peak.shape;\n        }\n        let { shape: shapeOptions } = options;\n        if (peakShapeOptions) {\n            shapeOptions = shapeOptions\n                ? { ...shapeOptions, ...peakShapeOptions }\n                : peakShapeOptions;\n        }\n        const shape = shapeOptions\n            ? getShape1D(shapeOptions)\n            : cloneShape(this.shape);\n        const { width } = options;\n        let { widthLeft, widthRight } = options;\n        const fwhm = peakFWHM !== undefined\n            ? peakFWHM\n            : peakWidth\n                ? shape.widthToFWHM(peakWidth)\n                : this.peakWidthFct\n                    ? this.peakWidthFct(x0)\n                    : width !== undefined\n                        ? width\n                        : shape.fwhm;\n        if (!widthLeft)\n            widthLeft = fwhm;\n        if (!widthRight)\n            widthRight = fwhm;\n        if (!widthLeft || !widthRight) {\n            throw new Error('Width left or right is undefined or zero');\n        }\n        const factor = options.factor === undefined ? shape.getFactor() : options.factor;\n        const shapeLeft = cloneShape(shape);\n        shapeLeft.fwhm = widthLeft;\n        const shapeRight = cloneShape(shape);\n        shapeRight.fwhm = widthRight;\n        return {\n            x0,\n            intensity,\n            shapeLeft,\n            shapeRight,\n            widthLeft,\n            widthRight,\n            factor,\n        };\n    }\n}\nfunction cloneShape(shape) {\n    return Object.assign(Object.create(Object.getPrototypeOf(shape)), shape);\n}\nfunction assertInteger(value, name) {\n    if (!Number.isInteger(value)) {\n        throw new TypeError(`${name} option must be an integer`);\n    }\n}\nfunction assertNumber(value, name) {\n    if (!Number.isFinite(value)) {\n        throw new TypeError(`${name} option must be a number`);\n    }\n}\n//# sourceMappingURL=BaseSpectrumGenerator.js.map","/**\n * Adds a baseline to the spectrum data.\n * @param data - The spectrum data to modify.\n * @param baselineFct - Function that generates the baseline value for a given x.\n * @returns The modified spectrum data.\n */\nexport default function addBaseline(data, baselineFct) {\n    if (!baselineFct)\n        return data;\n    const xs = data.x;\n    const ys = data.y;\n    for (let i = 0; i < xs.length; i++) {\n        ys[i] += baselineFct(xs[i]);\n    }\n    return data;\n}\n//# sourceMappingURL=addBaseline.js.map","// eslint-disable-next-line @typescript-eslint/unbound-method\nconst toString = Object.prototype.toString;\n/**\n * Checks if an object is an instance of an Array (array or typed array, except those that contain bigint values).\n * @param value - Object to check.\n * @returns True if the object is an array or a typed array.\n */\nexport function isAnyArray(value) {\n    const tag = toString.call(value);\n    return tag.endsWith('Array]') && !tag.includes('Big');\n}\n//# sourceMappingURL=index.js.map","import { isAnyArray } from 'is-any-array';\n/**\n * Checks if the input is a non-empty array of numbers.\n * Only checks the first element.\n * @param input - Array to check.\n * @param options - Additional checks.\n */\nexport function xCheck(input, options = {}) {\n    const { minLength } = options;\n    if (!isAnyArray(input)) {\n        throw new TypeError('input must be an array');\n    }\n    if (input.length === 0) {\n        throw new TypeError('input must not be empty');\n    }\n    if (typeof input[0] !== 'number') {\n        throw new TypeError('input must contain numbers');\n    }\n    if (minLength && input.length < minLength) {\n        throw new Error(`input must have a length of at least ${minLength}`);\n    }\n}\n//# sourceMappingURL=xCheck.js.map","/**\n * Returns the closest index of a `target`\n * @param array - array of numbers\n * @param target - target\n * @param options\n * @returns - closest index\n */\nexport function xFindClosestIndex(array, target, options = {}) {\n    const { sorted = true } = options;\n    if (sorted) {\n        let low = 0;\n        let high = array.length - 1;\n        let middle = 0;\n        while (high - low > 1) {\n            middle = low + ((high - low) >> 1);\n            if (array[middle] < target) {\n                low = middle;\n            }\n            else if (array[middle] > target) {\n                high = middle;\n            }\n            else {\n                return middle;\n            }\n        }\n        if (low < array.length - 1) {\n            if (Math.abs(target - array[low]) < Math.abs(array[low + 1] - target)) {\n                return low;\n            }\n            else {\n                return low + 1;\n            }\n        }\n        else {\n            return low;\n        }\n    }\n    else {\n        let index = 0;\n        let diff = Number.POSITIVE_INFINITY;\n        for (let i = 0; i < array.length; i++) {\n            const currentDiff = Math.abs(array[i] - target);\n            if (currentDiff < diff) {\n                diff = currentDiff;\n                index = i;\n            }\n        }\n        return index;\n    }\n}\n//# sourceMappingURL=xFindClosestIndex.js.map","import { xFindClosestIndex } from \"./xFindClosestIndex.js\";\n/**\n * Returns an object with {fromIndex, toIndex} for a specific from / to\n * @param x - array of numbers\n * @param options - Options\n */\nexport function xGetFromToIndex(x, options = {}) {\n    let { fromIndex, toIndex } = options;\n    const { from, to } = options;\n    if (fromIndex === undefined) {\n        if (from !== undefined) {\n            fromIndex = xFindClosestIndex(x, from);\n        }\n        else {\n            fromIndex = 0;\n        }\n    }\n    if (toIndex === undefined) {\n        if (to !== undefined) {\n            toIndex = xFindClosestIndex(x, to);\n        }\n        else {\n            toIndex = x.length - 1;\n        }\n    }\n    if (fromIndex < 0)\n        fromIndex = 0;\n    if (toIndex < 0)\n        toIndex = 0;\n    if (fromIndex >= x.length)\n        fromIndex = x.length - 1;\n    if (toIndex >= x.length)\n        toIndex = x.length - 1;\n    if (fromIndex > toIndex)\n        [fromIndex, toIndex] = [toIndex, fromIndex];\n    return { fromIndex, toIndex };\n}\n//# sourceMappingURL=xGetFromToIndex.js.map","import { isAnyArray } from 'is-any-array';\n/**\n * This function xAdd the first array by the second array or a constant value to each element of the first array\n * @param array1 - the first array\n * @param array2 - the second array or number\n * @returns the result of the addition\n */\nexport function xAdd(array1, array2) {\n    let isConstant = false;\n    let constant = 0;\n    if (isAnyArray(array2)) {\n        if (array1.length !== array2.length) {\n            throw new Error('size of array1 and array2 must be identical');\n        }\n    }\n    else {\n        isConstant = true;\n        constant = array2;\n    }\n    const array3 = new Float64Array(array1.length);\n    if (isConstant) {\n        for (let i = 0; i < array1.length; i++) {\n            array3[i] = array1[i] + constant;\n        }\n    }\n    else {\n        for (let i = 0; i < array1.length; i++) {\n            array3[i] = array1[i] + array2[i];\n        }\n    }\n    return array3;\n}\n//# sourceMappingURL=xAdd.js.map","export function createNumberArray(ArrayConstructor, length) {\n    if (ArrayConstructor === Array) {\n        return new ArrayConstructor(length).fill(0);\n    }\n    else {\n        return new ArrayConstructor(length);\n    }\n}\nexport function createDoubleArray(ArrayConstructor, length) {\n    if (ArrayConstructor === Array) {\n        return new ArrayConstructor(length).fill(0);\n    }\n    else {\n        return new ArrayConstructor(length);\n    }\n}\n//# sourceMappingURL=createArray.js.map","const LOOP = 8;\nconst FLOAT_MUL = 1 / 16777216;\nconst sh1 = 15;\nconst sh2 = 18;\nconst sh3 = 11;\nfunction multiplyUint32(n, m) {\n    n >>>= 0;\n    m >>>= 0;\n    const nlo = n & 0xffff;\n    const nhi = n - nlo;\n    return (((nhi * m) >>> 0) + nlo * m) >>> 0;\n}\nexport class XSadd {\n    random;\n    state;\n    /**\n     * create an instance of XSadd with the specified seed\n     * @param [seed=Date.now()]\n     */\n    constructor(seed = Date.now()) {\n        this.state = new Uint32Array(4);\n        this.init(seed);\n        this.random = this.getFloat.bind(this);\n    }\n    /**\n     * Returns a 32-bit integer r (0 <= r < 2^32)\n     */\n    getUint32() {\n        this.nextState();\n        return (this.state[3] + this.state[2]) >>> 0;\n    }\n    /**\n     * Returns a floating point number r (0.0 <= r < 1.0)\n     */\n    getFloat() {\n        return (this.getUint32() >>> 8) * FLOAT_MUL;\n    }\n    init(seed) {\n        if (!Number.isInteger(seed)) {\n            throw new TypeError(\"seed must be an integer\");\n        }\n        this.state[0] = seed;\n        this.state[1] = 0;\n        this.state[2] = 0;\n        this.state[3] = 0;\n        for (let i = 1; i < LOOP; i++) {\n            this.state[i & 3] ^=\n                (i +\n                    multiplyUint32(1812433253, this.state[(i - 1) & 3] ^ ((this.state[(i - 1) & 3] >>> 30) >>> 0))) >>>\n                    0;\n        }\n        this.periodCertification();\n        for (let i = 0; i < LOOP; i++) {\n            this.nextState();\n        }\n    }\n    periodCertification() {\n        if (this.state[0] === 0 &&\n            this.state[1] === 0 &&\n            this.state[2] === 0 &&\n            this.state[3] === 0) {\n            this.state[0] = 88; // X\n            this.state[1] = 83; // S\n            this.state[2] = 65; // A\n            this.state[3] = 68; // D\n        }\n    }\n    nextState() {\n        let t = this.state[0];\n        t ^= t << sh1;\n        t ^= t >>> sh2;\n        t ^= this.state[3] << sh3;\n        this.state[0] = this.state[1];\n        this.state[1] = this.state[2];\n        this.state[2] = this.state[3];\n        this.state[3] = t;\n    }\n}\n//# sourceMappingURL=XSadd.js.map","import { XSadd } from 'ml-xsadd';\n/**\n * Create a random array of numbers of a specific length.\n * @param options\n * @returns - array of random floats normally distributed\n */\nexport function createRandomArray(options = {}) {\n    const { mean = 0, standardDeviation = 1, length = 1000, range = 1, seed, distribution = 'normal', } = options;\n    const generator = new XSadd(seed);\n    const returnArray = new Float64Array(length);\n    switch (distribution) {\n        case 'normal': {\n            const gaussianGenerator = new GaussianGenerator(mean, standardDeviation, generator);\n            for (let i = 0; i < length; i++) {\n                returnArray[i] = gaussianGenerator.generateGaussian();\n            }\n            break;\n        }\n        case 'uniform': {\n            for (let i = 0; i < length; i++) {\n                returnArray[i] = (generator.random() - 0.5) * range + mean;\n            }\n            break;\n        }\n        default: {\n            throw new Error(`unknown distribution: ${String(distribution)}`);\n        }\n    }\n    return returnArray;\n}\nclass GaussianGenerator {\n    #spare = 0;\n    #hasSpare = false;\n    #mean;\n    #standardDeviation;\n    #generator;\n    constructor(mean, standardDeviation, generator) {\n        this.#mean = mean;\n        this.#standardDeviation = standardDeviation;\n        this.#generator = generator;\n    }\n    generateGaussian() {\n        let val, u, v, s;\n        if (this.#hasSpare) {\n            this.#hasSpare = false;\n            val = this.#spare * this.#standardDeviation + this.#mean;\n        }\n        else {\n            do {\n                u = this.#generator.random() * 2 - 1;\n                v = this.#generator.random() * 2 - 1;\n                s = u * u + v * v;\n            } while (s >= 1 || s === 0);\n            s = Math.sqrt((-2 * Math.log(s)) / s);\n            this.#spare = v * s;\n            this.#hasSpare = true;\n            val = this.#mean + this.#standardDeviation * u * s;\n        }\n        return val;\n    }\n}\n//# sourceMappingURL=createRandomArray.js.map","import { xCheck } from \"./xCheck.js\";\nimport { xGetFromToIndex } from \"./xGetFromToIndex.js\";\n/**\n * Computes the maximal value of an array of values\n * @param array - array of numbers\n * @param options - options\n */\nexport function xMaxValue(array, options = {}) {\n    xCheck(array);\n    const { fromIndex, toIndex } = xGetFromToIndex(array, options);\n    let maxValue = array[fromIndex];\n    for (let i = fromIndex + 1; i <= toIndex; i++) {\n        if (array[i] > maxValue) {\n            maxValue = array[i];\n        }\n    }\n    return maxValue;\n}\n//# sourceMappingURL=xMaxValue.js.map","import { createNumberArray } from \"../utils/index.js\";\n/**\n * Create a new matrix based on the size of the current one or by using specific dimensions.\n * @param options\n */\nexport function matrixCreateEmpty(options) {\n    const { matrix, nbRows = matrix?.length || 1, nbColumns = matrix?.[0].length || 1, ArrayConstructor = Float64Array, } = options;\n    const newMatrix = [];\n    for (let row = 0; row < nbRows; row++) {\n        newMatrix.push(createNumberArray(ArrayConstructor, nbColumns));\n    }\n    return newMatrix;\n}\n//# sourceMappingURL=matrixCreateEmpty.js.map","export function matrixCheck(data) {\n    if (data.length === 0 || data[0].length === 0) {\n        throw new RangeError('matrix must contain data');\n    }\n    const firstLength = data[0].length;\n    for (let i = 1; i < data.length; i++) {\n        if (data[i].length !== firstLength) {\n            throw new RangeError('all rows must has the same length');\n        }\n    }\n}\n//# sourceMappingURL=matrixCheck.js.map","import { matrixCheck } from \"./matrixCheck.js\";\n/**\n * Get min and max Z.\n * @param matrix - matrix [rows][cols].\n */\nexport function matrixMinMaxZ(matrix) {\n    matrixCheck(matrix);\n    const nbRows = matrix.length;\n    const nbColumns = matrix[0].length;\n    let min = matrix[0][0];\n    let max = matrix[0][0];\n    for (let column = 0; column < nbColumns; column++) {\n        for (let row = 0; row < nbRows; row++) {\n            if (matrix[row][column] < min)\n                min = matrix[row][column];\n            if (matrix[row][column] > max)\n                max = matrix[row][column];\n        }\n    }\n    return { min, max };\n}\n//# sourceMappingURL=matrixMinMaxZ.js.map","import { xMaxValue, xAdd, createRandomArray } from 'ml-spectra-processing';\n/**\n * Adds noise to the spectrum data.\n * @param data - The spectrum data to modify.\n * @param options - Configuration for noise generation.\n * @returns The modified spectrum data.\n */\nexport default function addNoise(data, options = {}) {\n    const { seed = 0, distribution = 'normal', percent = 1 } = options;\n    const range = (xMaxValue(data.y) * percent) / 100;\n    const noise = createRandomArray({\n        distribution,\n        seed,\n        mean: 0,\n        standardDeviation: range,\n        range,\n        length: data.x.length,\n    });\n    data.y = xAdd(data.y, noise);\n    return data;\n}\n//# sourceMappingURL=addNoise.js.map","import { BaseSpectrumGenerator } from \"./BaseSpectrumGenerator.js\";\nimport addBaseline from \"./util/addBaseline.js\";\nimport addNoise from \"./util/addNoise.js\";\nexport { BaseSpectrumGenerator } from \"./BaseSpectrumGenerator.js\";\nexport class SpectrumGenerator extends BaseSpectrumGenerator {\n    maxPeakHeight;\n    data;\n    constructor(options = {}) {\n        super(options);\n        this.maxPeakHeight = Number.MIN_SAFE_INTEGER;\n        this.data = {\n            x: new Float64Array(this.nbPoints),\n            y: new Float64Array(this.nbPoints),\n        };\n        this.reset();\n    }\n    /**\n     * Generates a spectrum from a list of peaks and returns it.\n     * @param peaks - List of peaks to add.\n     * @param options - Options for spectrum generation.\n     * @returns The generated spectrum data.\n     */\n    generateSpectrum(peaks, options = {}) {\n        const { noise, baseline, threshold, peakOptions } = options;\n        this.addPeaks(peaks, peakOptions);\n        if (baseline)\n            this.addBaseline(baseline);\n        if (noise)\n            this.addNoise(noise);\n        return this.getSpectrum({ threshold });\n    }\n    /**\n     * Add a series of peaks to the spectrum.\n     * @param peaks - Peaks to add.\n     * @param options - Options for adding peaks.\n     * @returns The generator instance.\n     */\n    addPeaks(peaks, options) {\n        if (!Array.isArray(peaks) &&\n            (typeof peaks !== 'object' ||\n                peaks.x === undefined ||\n                peaks.y === undefined ||\n                !Array.isArray(peaks.x) ||\n                !Array.isArray(peaks.y) ||\n                peaks.x.length !== peaks.y.length)) {\n            throw new TypeError('peaks must be an array or an object containing x[] and y[]');\n        }\n        if (Array.isArray(peaks)) {\n            for (const peak of peaks) {\n                this.addPeak(peak, options);\n            }\n        }\n        else {\n            for (let i = 0; i < peaks.x.length; i++) {\n                this.addPeak([peaks.x[i], peaks.y[i]], options);\n            }\n        }\n        return this;\n    }\n    /**\n     * Add a single peak to the spectrum.\n     * A peak may be either defined as [x,y,fwhm,...] or as {x, y, shape}\n     * @param peak - The peak to add, defined as array or object.\n     * @param options - Options for adding the peak.\n     * @returns The generator instance.\n     */\n    addPeak(peak, options = {}) {\n        if (Array.isArray(peak) && peak.length < 2) {\n            throw new Error('peak must be an array with two (or three) values or an object with {x,y,width?}');\n        }\n        if (!Array.isArray(peak) &&\n            (peak.x === undefined || peak.y === undefined)) {\n            throw new Error('peak must be an array with two (or three) values or an object with {x,y,width?}');\n        }\n        const { x0, intensity, shapeLeft, shapeRight, widthLeft, widthRight, factor, } = this.resolvePeak(peak, options);\n        if (intensity > this.maxPeakHeight)\n            this.maxPeakHeight = intensity;\n        const firstValue = x0 - (widthLeft / 2) * factor;\n        const lastValue = x0 + (widthRight / 2) * factor;\n        const firstPoint = Math.max(0, Math.floor((firstValue - this.from) / this.interval));\n        const lastPoint = Math.min(this.nbPoints - 1, Math.ceil((lastValue - this.from) / this.interval));\n        const middlePoint = Math.round((x0 - this.from) / this.interval);\n        // PEAK SHAPE MAY BE ASYMMETRIC (widthLeft and widthRight) !\n        // we calculate the left part of the shape\n        for (let index = firstPoint; index < Math.max(middlePoint, 0); index++) {\n            this.data.y[index] += intensity * shapeLeft.fct(this.data.x[index] - x0);\n        }\n        // we calculate the right part of the gaussian\n        for (let index = Math.min(middlePoint, lastPoint); index <= lastPoint; index++) {\n            this.data.y[index] += intensity * shapeRight.fct(this.data.x[index] - x0);\n        }\n        return this;\n    }\n    /**\n     * Add a baseline to the spectrum.\n     * @param baselineFct - Mathematical function producing the baseline you want.\n     * @returns The generator instance.\n     */\n    addBaseline(baselineFct) {\n        addBaseline(this.data, baselineFct);\n        return this;\n    }\n    /**\n     * Add noise to the spectrum.\n     * @param options - Configuration for noise generation.\n     * @returns The generator instance.\n     */\n    addNoise(options) {\n        addNoise(this.data, options);\n        return this;\n    }\n    /**\n     * Get the generated spectrum.\n     * @param options - Options for getting the spectrum.\n     * @returns The generated spectrum data.\n     */\n    getSpectrum(options = {}) {\n        if (typeof options === 'boolean') {\n            options = { copy: options };\n        }\n        const { copy = true, threshold = 0 } = options;\n        if (threshold) {\n            const minPeakHeight = this.maxPeakHeight * threshold;\n            const x = [];\n            const y = [];\n            for (let i = 0; i < this.data.x.length; i++) {\n                if (this.data.y[i] >= minPeakHeight) {\n                    x.push(this.data.x[i]);\n                    y.push(this.data.y[i]);\n                }\n            }\n            return { x: Float64Array.from(x), y: Float64Array.from(y) };\n        }\n        if (copy) {\n            return {\n                x: this.data.x.slice(),\n                y: this.data.y.slice(),\n            };\n        }\n        else {\n            return this.data;\n        }\n    }\n    /**\n     * Resets the generator with an empty spectrum.\n     * @returns The generator instance.\n     */\n    reset() {\n        if (this.nbPoints === 1) {\n            this.data.x[0] = (this.from + this.to) / 2;\n        }\n        else {\n            for (let i = 0; i < this.nbPoints; i++) {\n                this.data.x[i] = this.from + i * this.interval;\n            }\n        }\n        return this;\n    }\n}\n//# sourceMappingURL=SpectrumGenerator.js.map","import { getShape2D } from 'ml-peak-shape-generator';\nimport { matrixCreateEmpty, matrixMinMaxZ } from 'ml-spectra-processing';\nconst axis2D = ['x', 'y'];\nconst peakCoordinates = ['x', 'y', 'z'];\n/**\n * Converts a width value to full width at half maximum (FWHM).\n * @param shape - The 2D shape to use for conversion.\n * @param width - The width value to convert.\n * @returns The converted FWHM value as an XYNumber object.\n */\nconst convertWidthToFWHM = (shape, width) => {\n    const widthData = ensureXYNumber(width);\n    for (const key of axis2D) {\n        widthData[key] = shape.widthToFWHM(widthData[key]);\n    }\n    return widthData;\n};\nexport class Spectrum2DGenerator {\n    from;\n    to;\n    nbPoints;\n    interval;\n    data;\n    maxPeakHeight;\n    shape;\n    peakWidthFct;\n    constructor(options = {}) {\n        const { peakWidthFct = () => 5, shape = {\n            kind: 'gaussian',\n        }, } = options;\n        let { from = 0, to = 100, nbPoints = 1001 } = options;\n        from = ensureXYNumber(from);\n        to = ensureXYNumber(to);\n        nbPoints = ensureXYNumber(nbPoints);\n        for (const axis of axis2D) {\n            assertNumber(from[axis], `from-${axis}`);\n            assertNumber(to[axis], `to-${axis}`);\n            assertInteger(nbPoints[axis], `nbPoints-${axis}`);\n        }\n        this.from = from;\n        this.to = to;\n        this.nbPoints = nbPoints;\n        this.interval = calculeIntervals(from, to, nbPoints);\n        this.peakWidthFct = peakWidthFct;\n        this.maxPeakHeight = Number.MIN_SAFE_INTEGER;\n        const shapeGenerator = getShape2D(shape);\n        this.shape = shapeGenerator;\n        this.data = {\n            x: new Float64Array(nbPoints.x),\n            y: new Float64Array(nbPoints.y),\n            z: matrixCreateEmpty({\n                nbRows: this.nbPoints.y,\n                nbColumns: this.nbPoints.x,\n            }),\n        };\n        for (const axis of axis2D) {\n            if (this.to[axis] <= this.from[axis]) {\n                throw new RangeError('to option must be larger than from');\n            }\n        }\n        if (typeof this.peakWidthFct !== 'function') {\n            throw new TypeError('peakWidthFct option must be a function');\n        }\n        this.reset();\n    }\n    /**\n     * Adds multiple peaks to the 2D spectrum.\n     * @param peaks - Array of peaks or peak series to add.\n     * @param options - Options for adding peaks.\n     * @returns The generator instance.\n     */\n    addPeaks(peaks, options) {\n        if (!Array.isArray(peaks) &&\n            (typeof peaks !== 'object' ||\n                peaks.x === undefined ||\n                peaks.y === undefined ||\n                !Array.isArray(peaks.x) ||\n                !Array.isArray(peaks.y) ||\n                peaks.x.length !== peaks.y.length)) {\n            throw new TypeError('peaks must be an array or an object containing x[] and y[]');\n        }\n        if (Array.isArray(peaks)) {\n            for (const peak of peaks) {\n                this.addPeak(peak, options);\n            }\n        }\n        else {\n            if (!Array.isArray(peaks.x) ||\n                !Array.isArray(peaks.y) ||\n                !Array.isArray(peaks.z)) {\n                throw new TypeError('x, y, z must all be arrays');\n            }\n            const nbPeaks = peaks.x.length;\n            if (peaks.y.length !== nbPeaks || peaks.z.length !== nbPeaks) {\n                throw new Error('x, y, z should have the same length');\n            }\n            for (let i = 0; i < nbPeaks; i++) {\n                this.addPeak([peaks.x[i], peaks.y[i], peaks.z[i]], options);\n            }\n        }\n        return this;\n    }\n    /**\n     * Adds a single peak to the 2D spectrum.\n     * @param peak - Peak to add, can be array or object format.\n     * @param options - Options for adding the peak.\n     * @returns The generator instance.\n     */\n    addPeak(peak, options = {}) {\n        if (Array.isArray(peak) && peak.length < 3) {\n            throw new Error('peak must be an array with three (or four) values or an object with {x,y,z,width?}');\n        }\n        if (!Array.isArray(peak) &&\n            peakCoordinates.some((e) => peak[e] === undefined)) {\n            throw new Error('peak must be an array with three (or four) values or an object with {x,y,z,width?}');\n        }\n        let xPosition;\n        let yPosition;\n        let intensity;\n        let peakFWHM;\n        let peakWidth;\n        let peakShapeOptions;\n        if (Array.isArray(peak)) {\n            [xPosition, yPosition, intensity, peakFWHM, peakShapeOptions] = peak;\n        }\n        else {\n            xPosition = peak.x;\n            yPosition = peak.y;\n            intensity = peak.z;\n            peakFWHM = peak.fwhm;\n            peakWidth = peak.width;\n            peakShapeOptions = peak.shape;\n        }\n        const position = { x: xPosition, y: yPosition };\n        if (intensity > this.maxPeakHeight)\n            this.maxPeakHeight = intensity;\n        const { width } = options;\n        let { shape: shapeOptions } = options;\n        if (peakShapeOptions) {\n            shapeOptions = shapeOptions\n                ? { ...shapeOptions, ...peakShapeOptions }\n                : peakShapeOptions;\n        }\n        const shape = shapeOptions\n            ? getShape2D(shapeOptions)\n            : Object.assign(Object.create(Object.getPrototypeOf(this.shape)), structuredClone(this.shape));\n        let { fwhm = peakFWHM !== undefined\n            ? peakFWHM\n            : peakWidth\n                ? convertWidthToFWHM(shape, peakWidth)\n                : width\n                    ? convertWidthToFWHM(shape, width)\n                    : this.peakWidthFct(xPosition, yPosition), } = options;\n        fwhm = ensureXYNumber(fwhm);\n        let factor = options.factor === undefined ? shape.getFactor() : options.factor;\n        factor = ensureXYNumber(factor);\n        const firstPoint = { x: 0, y: 0 };\n        const lastPoint = { x: 0, y: 0 };\n        for (const axis of axis2D) {\n            const first = position[axis] - (fwhm[axis] / 2) * factor[axis];\n            const last = position[axis] + (fwhm[axis] / 2) * factor[axis];\n            firstPoint[axis] = Math.max(0, Math.floor((first - this.from[axis]) / this.interval[axis]));\n            lastPoint[axis] = Math.min(this.nbPoints[axis], Math.ceil((last - this.from[axis]) / this.interval[axis]));\n        }\n        shape.fwhm = fwhm;\n        for (let xIndex = firstPoint.x; xIndex < lastPoint.x; xIndex++) {\n            for (let yIndex = firstPoint.y; yIndex < lastPoint.y; yIndex++) {\n                const value = intensity *\n                    shape.fct(this.data.x[xIndex] - position.x, this.data.y[yIndex] - position.y);\n                if (Math.abs(value) > 1e-6) {\n                    this.data.z[yIndex][xIndex] += value;\n                }\n            }\n        }\n        return this;\n    }\n    /**\n     * Gets the generated 2D spectrum data.\n     * @param options - Options for getting the spectrum.\n     * @returns The spectrum data object.\n     */\n    getSpectrum(options = {}) {\n        if (typeof options === 'boolean') {\n            options = { copy: options };\n        }\n        const { copy = true } = options;\n        const minMaxZ = matrixMinMaxZ(this.data.z);\n        return {\n            minX: this.from.x,\n            maxX: this.to.x,\n            maxY: this.to.y,\n            minY: this.from.y,\n            minZ: minMaxZ.min,\n            maxZ: minMaxZ.max,\n            z: copy ? this.data.z.slice() : this.data.z,\n        };\n    }\n    /**\n     * Resets the generator to initial state.\n     * @returns The generator instance.\n     */\n    reset() {\n        const spectrum = this.data;\n        for (const axis of axis2D) {\n            for (let i = 0; i < this.nbPoints[axis]; i++) {\n                spectrum[axis][i] = this.from[axis] + i * this.interval[axis];\n            }\n        }\n        for (const row of spectrum.z) {\n            for (let j = 0; j < row.length; j++) {\n                row[j] = 0;\n            }\n        }\n        return this;\n    }\n}\n/**\n * Generates a 2D spectrum with the given peaks.\n * @param peaks - Peaks to include in the spectrum.\n * @param options - Options for spectrum generation.\n * @returns The generated spectrum data.\n */\nexport function generateSpectrum2D(peaks, options = {}) {\n    const { generator: generatorOptions, peaks: addPeaksOptions } = options;\n    const generator = new Spectrum2DGenerator(generatorOptions);\n    generator.addPeaks(peaks, addPeaksOptions);\n    return generator.getSpectrum();\n}\n/**\n * Ensures the input is an XYNumber object.\n * @param input - Number or XYNumber to process.\n * @returns An XYNumber object.\n */\nfunction ensureXYNumber(input) {\n    return typeof input !== 'object' ? { x: input, y: input } : { ...input };\n}\n/**\n * Calculates the intervals between points for both x and y axes.\n * @param from - Starting point coordinates.\n * @param to - Ending point coordinates.\n * @param nbPoints - Number of points in each dimension.\n * @returns The calculated intervals as an XYNumber object.\n */\nfunction calculeIntervals(from, to, nbPoints) {\n    return {\n        x: (to.x - from.x) / (nbPoints.x - 1),\n        y: (to.y - from.y) / (nbPoints.y - 1),\n    };\n}\n/**\n * Validates if a value is an integer.\n * @param value - Number to validate.\n * @param name - Name of the parameter for error message.\n * @throws {TypeError} If value is not an integer.\n */\nfunction assertInteger(value, name) {\n    if (!Number.isInteger(value)) {\n        throw new TypeError(`${name} option must be an integer`);\n    }\n}\n/**\n * Validates if a value is a finite number.\n * @param value - Number to validate.\n * @param name - Name of the parameter for error message.\n * @throws {TypeError} If value is not a finite number.\n */\nfunction assertNumber(value, name) {\n    if (!Number.isFinite(value)) {\n        throw new TypeError(`${name} option must be a number`);\n    }\n}\n//# sourceMappingURL=Spectrum2DGenerator.js.map","import { SpectrumGenerator } from \"./SpectrumGenerator.js\";\n/**\n * Generates a spectrum and returns it.\n * @param peaks - List of peaks to put in the spectrum.\n * @param options - Configuration for spectrum generation.\n * @returns The generated spectrum data.\n */\nexport function generateSpectrum(peaks, options = {}) {\n    const { generator, ...rest } = options;\n    return new SpectrumGenerator(generator).generateSpectrum(peaks, rest);\n}\n//# sourceMappingURL=generateSpectrum.js.map","import { BaseSpectrumGenerator } from \"./BaseSpectrumGenerator.js\";\nexport class SparseSpectrumGenerator extends BaseSpectrumGenerator {\n    constructor(options = {}) {\n        super(options);\n    }\n    /**\n     * Generates a sparse spectrum containing only x values where at least one\n     * peak contributes above the threshold. No dense array is allocated:\n     * intervals are computed per peak first, then y is evaluated only for the\n     * merged set of required x values.\n     * @param peaks - List of peaks to include.\n     * @param options - Options for sparse spectrum generation.\n     * @returns Sparse spectrum data with x and y arrays covering only peak regions.\n     */\n    generateSparseSpectrum(peaks, options = {}) {\n        if ('noise' in options) {\n            throw new Error('noise is not supported for sparse spectrum generation');\n        }\n        const { baseline, peakOptions = {}, threshold = 1e-7 } = options;\n        const peakArray = Array.isArray(peaks)\n            ? peaks\n            : Array.from(peaks.x, (x, i) => peaks.fwhm !== undefined\n                ? [x, peaks.y[i], peaks.fwhm[i]]\n                : [x, peaks.y[i]]);\n        const resolvedPeaks = peakArray\n            .map((peak) => {\n            const { x0, intensity, shapeLeft, shapeRight } = this.resolvePeak(peak, peakOptions);\n            return {\n                x0,\n                intensity,\n                shapeLeft,\n                shapeRight,\n                xFrom: x0 - computeHalfWidth(shapeLeft, threshold),\n                xTo: x0 + computeHalfWidth(shapeRight, threshold),\n            };\n        })\n            .filter((p) => p.xFrom < this.to && p.xTo > this.from);\n        if (resolvedPeaks.length === 0) {\n            return {\n                x: Float64Array.from([this.from, this.to]),\n                y: baseline\n                    ? Float64Array.from([baseline(this.from), baseline(this.to)])\n                    : new Float64Array(2),\n            };\n        }\n        for (const peak of resolvedPeaks) {\n            peak.xFrom = Math.max(this.from, peak.xFrom);\n            peak.xTo = Math.min(this.to, peak.xTo);\n        }\n        resolvedPeaks.sort((a, b) => a.xFrom - b.xFrom);\n        const mergedIntervals = [];\n        for (const peak of resolvedPeaks) {\n            const last = mergedIntervals.at(-1);\n            if (last !== undefined && peak.xFrom <= last.xTo) {\n                last.xTo = Math.max(last.xTo, peak.xTo);\n                last.peaks.push(peak);\n            }\n            else {\n                mergedIntervals.push({\n                    xFrom: peak.xFrom,\n                    xTo: peak.xTo,\n                    peaks: [peak],\n                });\n            }\n        }\n        const xResult = [this.from];\n        const yResult = [0];\n        // tracks the last grid index written to avoid duplicate guard points when\n        // two intervals are only one step apart\n        let lastWrittenIndex = 0;\n        for (const interval of mergedIntervals) {\n            const firstIndex = Math.max(0, Math.floor((interval.xFrom - this.from) / this.interval));\n            const lastIndex = Math.min(this.nbPoints - 1, Math.ceil((interval.xTo - this.from) / this.interval));\n            const guardBefore = firstIndex - 1;\n            if (guardBefore >= 0 && guardBefore > lastWrittenIndex) {\n                xResult.push(this.from + guardBefore * this.interval);\n                yResult.push(0);\n                lastWrittenIndex = guardBefore;\n            }\n            for (let i = firstIndex; i <= lastIndex; i++) {\n                const x = this.from + i * this.interval;\n                let y = 0;\n                for (const peak of interval.peaks) {\n                    const shape = x < peak.x0 ? peak.shapeLeft : peak.shapeRight;\n                    y += peak.intensity * shape.fct(x - peak.x0);\n                }\n                xResult.push(x);\n                yResult.push(y);\n                lastWrittenIndex = i;\n            }\n            const guardAfter = lastIndex + 1;\n            if (guardAfter < this.nbPoints) {\n                xResult.push(this.from + guardAfter * this.interval);\n                yResult.push(0);\n                lastWrittenIndex = guardAfter;\n            }\n        }\n        if (xResult[0] !== this.from) {\n            xResult.unshift(this.from);\n            yResult.unshift(0);\n        }\n        if (xResult[xResult.length - 1] !== this.to) {\n            xResult.push(this.to);\n            yResult.push(0);\n        }\n        if (baseline) {\n            for (let i = 0; i < yResult.length; i++) {\n                yResult[i] += baseline(xResult[i]);\n            }\n        }\n        return {\n            x: Float64Array.from(xResult),\n            y: Float64Array.from(yResult),\n        };\n    }\n}\n/**\n * Finds the half-width d at which shape.fct(d) equals the given threshold via\n * binary search. Works for any monotonically decreasing shape function.\n */\nfunction computeHalfWidth(shape, threshold) {\n    if (threshold <= 0)\n        return Infinity;\n    if (shape.fct(0) <= threshold)\n        return 0;\n    let high = shape.fwhm;\n    while (shape.fct(high) > threshold) {\n        high *= 2;\n    }\n    let low = 0;\n    for (let i = 0; i < 64; i++) {\n        const mid = (low + high) / 2;\n        if (shape.fct(mid) > threshold) {\n            low = mid;\n        }\n        else {\n            high = mid;\n        }\n    }\n    return (low + high) / 2;\n}\n//# sourceMappingURL=SparseSpectrumGenerator.js.map","import { SparseSpectrumGenerator } from \"./SparseSpectrumGenerator.js\";\n/**\n * Generates a sparse spectrum containing only x values where at least one peak\n * contributes above the threshold. Unlike `generateSpectrum`, no dense array\n * is allocated: intervals are computed per peak first, then y is evaluated only\n * for the merged set of required x values.\n * @param peaks - List of peaks to include.\n * @param options - Configuration for sparse spectrum generation.\n * @returns Sparse spectrum data with x and y arrays covering only peak regions.\n */\nexport function generateSparseSpectrum(peaks, options = {}) {\n    const { generator, ...rest } = options;\n    return new SparseSpectrumGenerator(generator).generateSparseSpectrum(peaks, rest);\n}\n//# sourceMappingURL=generateSparseSpectrum.js.map"],"names":["GAUSSIAN_EXP_FACTOR","Math","LN2","ROOT_PI_OVER_LN2","sqrt","PI","ROOT_THREE","ROOT_2LN2","ROOT_2LN2_MINUS_ONE","erfinv","x","a","ln1MinusXSqrd","log","lnEtcBy2Plus2","firstSqrt","secondSqrt","Gaussian","constructor","options","fwhm","sd","gaussianWidthToFWHM","fwhmToWidth","gaussianFwhmToWidth","widthToFWHM","width","fct","gaussianFct","getArea","height","calculateGaussianHeight","getGaussianArea","getFactor","area","getGaussianFactor","getData","getGaussianData","calculateHeight","getParameters","exp","pow","shape","length","factor","min","ceil","center","data","Float64Array","i","Lorentzian","lorentzianFwhmToWidth","lorentzianWidthToFWHM","lorentzianFct","getLorentzianArea","getLorentzianFactor","getLorentzianData","calculateLorentzianHeight","Error","halfResidual","quantileFunction","p","tan","LorentzianDispersive","lorentzianDispersiveFct","_height","getLorentzianDispersiveData","PseudoVoigt","mu","pseudoVoigtFwhmToWidth","pseudoVoigtWidthToFWHM","pseudoVoigtFct","getPseudoVoigtArea","getPseudoVoigtFactor","calculatePseudoVoigtHeight","getPseudoVoigtData","GeneralizedLorentzian","gamma","generalizedLorentzianFwhmToWidth","generalizedLorentzianWidthToFWHM","generalizedLorentzianFct","getGeneralizedLorentzianArea","getGeneralizedLorentzianFactor","getGeneralizedLorentzianData","calculateGeneralizedLorentzianHeight","u","Gaussian2D","ensureFWHM2D","fwhmX","fwhmY","y","gaussian2DFct","getGaussian2DData","volume","getVolume","calculateGaussian2DHeight","getGaussian2DVolume","ensureXYNumber","xFWHM","yFWHM","axis","xCenter","yCenter","Array","j","input","undefined","sdObject","getShape1D","kind","getShape2D","unHandled","BaseSpectrumGenerator","from","to","nbPoints","interval","peakWidthFct","assertNumber","assertInteger","RangeError","TypeError","resolvePeak","peak","x0","intensity","peakFWHM","peakWidth","peakShapeOptions","isArray","shapeOptions","cloneShape","widthLeft","widthRight","shapeLeft","shapeRight","Object","assign","create","getPrototypeOf","value","name","Number","isInteger","isFinite","addBaseline","baselineFct","xs","ys","toString","prototype","isAnyArray","tag","call","endsWith","includes","xCheck","minLength","xFindClosestIndex","array","target","sorted","low","high","middle","abs","index","diff","POSITIVE_INFINITY","currentDiff","xGetFromToIndex","fromIndex","toIndex","xAdd","array1","array2","isConstant","constant","array3","createNumberArray","ArrayConstructor","fill","LOOP","FLOAT_MUL","sh1","sh2","sh3","multiplyUint32","n","m","nlo","nhi","XSadd","random","state","seed","Date","now","Uint32Array","init","getFloat","bind","getUint32","nextState","periodCertification","t","createRandomArray","mean","standardDeviation","range","distribution","generator","returnArray","gaussianGenerator","GaussianGenerator","generateGaussian","String","val","v","s","xMaxValue","maxValue","matrixCreateEmpty","matrix","nbRows","nbColumns","newMatrix","row","push","matrixCheck","firstLength","matrixMinMaxZ","max","column","addNoise","percent","noise","SpectrumGenerator","maxPeakHeight","MIN_SAFE_INTEGER","reset","generateSpectrum","peaks","baseline","threshold","peakOptions","addPeaks","getSpectrum","addPeak","firstValue","lastValue","firstPoint","floor","lastPoint","middlePoint","round","copy","minPeakHeight","slice","axis2D","peakCoordinates","convertWidthToFWHM","widthData","key","Spectrum2DGenerator","calculeIntervals","shapeGenerator","z","nbPeaks","some","e","xPosition","yPosition","position","structuredClone","first","last","xIndex","yIndex","minMaxZ","minX","maxX","maxY","minY","minZ","maxZ","spectrum","generateSpectrum2D","generatorOptions","addPeaksOptions","rest","SparseSpectrumGenerator","generateSparseSpectrum","peakArray","resolvedPeaks","map","xFrom","computeHalfWidth","xTo","filter","sort","b","mergedIntervals","at","xResult","yResult","lastWrittenIndex","firstIndex","lastIndex","guardBefore","guardAfter","unshift","Infinity","mid"],"mappings":";;;;;;;AAAO,MAAMA,mBAAmB,GAAG,EAAE,GAAGC,IAAI,CAACC,GAAG;AACzC,MAAMC,gBAAgB,GAAGF,IAAI,CAACG,IAAI,CAACH,IAAI,CAACI,EAAE,GAAGJ,IAAI,CAACC,GAAG,CAAC;AACtD,MAAMI,UAAU,GAAGL,IAAI,CAACG,IAAI,CAAC,CAAC,CAAC;AAC/B,MAAMG,SAAS,GAAGN,IAAI,CAACG,IAAI,CAAC,CAAC,GAAGH,IAAI,CAACC,GAAG,CAAC;AACzC,MAAMM,mBAAmB,GAAGP,IAAI,CAACG,IAAI,CAAC,CAAC,GAAGH,IAAI,CAACC,GAAG,CAAC,GAAG,CAAC;;ACJ9D;AACA;AAEA;AAEc,SAAUO,MAAMA,CAACC,CAAS,EAAA;EACtC,IAAIC,CAAC,GAAG,KAAK;AACb,EAAA,IAAID,CAAC,KAAK,CAAC,EAAE,OAAO,CAAC;EACrB,IAAIE,aAAa,GAAGX,IAAI,CAACY,GAAG,CAAC,CAAC,GAAGH,CAAC,GAAGA,CAAC,CAAC;AACvC,EAAA,IAAII,aAAa,GAAGF,aAAa,GAAG,CAAC,GAAG,CAAC,IAAIX,IAAI,CAACI,EAAE,GAAGM,CAAC,CAAC;AACzD,EAAA,IAAII,SAAS,GAAGd,IAAI,CAACG,IAAI,CAACU,aAAa,IAAI,CAAC,GAAGF,aAAa,GAAGD,CAAC,CAAC;EACjE,IAAIK,UAAU,GAAGf,IAAI,CAACG,IAAI,CAACW,SAAS,GAAGD,aAAa,CAAC;EACrD,OAAOE,UAAU,IAAIN,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC;AACtC;;ACwCM,MAAOO,QAAQ,CAAA;EAOnBC,WAAAA,CAAmBC,OAAA,GAAgC,EAAE,EAAA;IACnD,MAAM;AAAEC,MAAAA,IAAI,GAAG,GAAG;AAAEC,MAAAA;AAAE,KAAE,GAAGF,OAAO;AAElC,IAAA,IAAI,CAACC,IAAI,GAAGC,EAAE,GAAGC,mBAAmB,CAAC,CAAC,GAAGD,EAAE,CAAC,GAAGD,IAAI;AACrD,EAAA;AAEOG,EAAAA,WAAWA,CAACH,IAAI,GAAG,IAAI,CAACA,IAAI,EAAA;IACjC,OAAOI,mBAAmB,CAACJ,IAAI,CAAC;AAClC,EAAA;AAEOK,EAAAA,WAAWA,CAACC,KAAa,EAAA;IAC9B,OAAOJ,mBAAmB,CAACI,KAAK,CAAC;AACnC,EAAA;AAEOC,EAAAA,GAAGA,CAACjB,CAAS,EAAA;AAClB,IAAA,OAAOkB,WAAW,CAAClB,CAAC,EAAE,IAAI,CAACU,IAAI,CAAC;AAClC,EAAA;AAEOS,EAAAA,OAAOA,CAACC,MAAM,GAAGC,uBAAuB,CAAC;IAAEX,IAAI,EAAE,IAAI,CAACA;AAAI,GAAE,CAAC,EAAA;AAClE,IAAA,OAAOY,eAAe,CAAC;MAAEZ,IAAI,EAAE,IAAI,CAACA,IAAI;AAAEU,MAAAA;AAAM,KAAE,CAAC;AACrD,EAAA;AAEOG,EAAAA,SAASA,CAACC,IAAa,EAAA;IAC5B,OAAOC,iBAAiB,CAACD,IAAI,CAAC;AAChC,EAAA;EAEOE,OAAOA,CAACjB,OAAA,GAA4B,EAAE,EAAA;AAC3C,IAAA,OAAOkB,eAAe,CAAC,IAAI,EAAElB,OAAO,CAAC;AACvC,EAAA;EAEOmB,eAAeA,CAACJ,IAAI,GAAG,CAAC,EAAA;AAC7B,IAAA,OAAOH,uBAAuB,CAAC;MAAEX,IAAI,EAAE,IAAI,CAACA,IAAI;AAAEc,MAAAA;AAAI,KAAE,CAAC;AAC3D,EAAA;AAEOK,EAAAA,aAAaA,GAAA;IAClB,OAAO,CAAC,MAAM,CAAC;AACjB,EAAA;;AAGI,SAAUR,uBAAuBA,CACrCZ,OAAuC,EAAA;EAEvC,IAAI;AAAEC,IAAAA,IAAI,GAAG,GAAG;AAAEc,IAAAA,IAAI,GAAG,CAAC;AAAEb,IAAAA;AAAE,GAAE,GAAGF,OAAO;EAE1C,IAAIE,EAAE,EAAED,IAAI,GAAGE,mBAAmB,CAAC,CAAC,GAAGD,EAAE,CAAC;AAE1C,EAAA,OAAQ,CAAC,GAAGa,IAAI,GAAI/B,gBAAgB,GAAGiB,IAAI;AAC7C;AAEA;;;;;;;AAOM,SAAUQ,WAAWA,CAAClB,CAAS,EAAEU,IAAY,EAAA;AACjD,EAAA,OAAOnB,IAAI,CAACuC,GAAG,CAACxC,mBAAmB,GAAGC,IAAI,CAACwC,GAAG,CAAC/B,CAAC,GAAGU,IAAI,EAAE,CAAC,CAAC,CAAC;AAC9D;AAEM,SAAUE,mBAAmBA,CAACI,KAAa,EAAA;EAC/C,OAAOA,KAAK,GAAGnB,SAAS;AAC1B;AAEM,SAAUiB,mBAAmBA,CAACJ,IAAY,EAAA;EAC9C,OAAOA,IAAI,GAAGb,SAAS;AACzB;AAEM,SAAUyB,eAAeA,CAACb,OAA+B,EAAA;EAC7D,IAAI;AAAEC,IAAAA,IAAI,GAAG,GAAG;IAAEC,EAAE;AAAES,IAAAA,MAAM,GAAG;AAAC,GAAE,GAAGX,OAAO;EAE5C,IAAIE,EAAE,EAAED,IAAI,GAAGE,mBAAmB,CAAC,CAAC,GAAGD,EAAE,CAAC;AAE1C,EAAA,OAAQS,MAAM,GAAG3B,gBAAgB,GAAGiB,IAAI,GAAI,CAAC;AAC/C;AAEM,SAAUe,iBAAiBA,CAACD,IAAI,GAAG,MAAM,EAAA;EAC7C,OAAOjC,IAAI,CAACG,IAAI,CAAC,CAAC,CAAC,GAAGK,MAAM,CAACyB,IAAI,CAAC;AACpC;AAEM,SAAUG,eAAeA,CAC7BK,KAAA,GAA8B,EAAE,EAChCvB,OAAA,GAA4B,EAAE,EAAA;EAE9B,IAAI;AAAEC,IAAAA,IAAI,GAAG,GAAG;AAAEC,IAAAA;AAAE,GAAE,GAAGqB,KAAK;EAC9B,IAAIrB,EAAE,EAAED,IAAI,GAAGE,mBAAmB,CAAC,CAAC,GAAGD,EAAE,CAAC;EAE1C,IAAI;IACFsB,MAAM;IACNC,MAAM,GAAGT,iBAAiB,EAAE;IAC5BL,MAAM,GAAGC,uBAAuB,CAAC;AAAEX,MAAAA;KAAM;AAAC,GAC3C,GAAGD,OAAO;EAEX,IAAI,CAACwB,MAAM,EAAE;IACXA,MAAM,GAAG1C,IAAI,CAAC4C,GAAG,CAAC5C,IAAI,CAAC6C,IAAI,CAAC1B,IAAI,GAAGwB,MAAM,CAAC,EAAE3C,IAAI,CAACwC,GAAG,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC;AAChE,IAAA,IAAIE,MAAM,GAAG,CAAC,KAAK,CAAC,EAAEA,MAAM,EAAE;;AAGhC,EAAA,MAAMI,MAAM,GAAG,CAACJ,MAAM,GAAG,CAAC,IAAI,CAAC;AAC/B,EAAA,MAAMK,IAAI,GAAG,IAAIC,YAAY,CAACN,MAAM,CAAC;EACrC,KAAK,IAAIO,CAAC,GAAG,CAAC,EAAEA,CAAC,IAAIH,MAAM,EAAEG,CAAC,EAAE,EAAE;AAChCF,IAAAA,IAAI,CAACE,CAAC,CAAC,GAAGtB,WAAW,CAACsB,CAAC,GAAGH,MAAM,EAAE3B,IAAI,CAAC,GAAGU,MAAM;IAChDkB,IAAI,CAACL,MAAM,GAAG,CAAC,GAAGO,CAAC,CAAC,GAAGF,IAAI,CAACE,CAAC,CAAC;;AAGhC,EAAA,OAAOF,IAAI;AACb;;AC7IM,MAAOG,UAAU,CAAA;EAOrBjC,WAAAA,CAAmBC,OAAA,GAAkC,EAAE,EAAA;IACrD,MAAM;AAAEC,MAAAA,IAAI,GAAG;AAAG,KAAE,GAAGD,OAAO;IAE9B,IAAI,CAACC,IAAI,GAAGA,IAAI;AAClB,EAAA;AAEOG,EAAAA,WAAWA,CAACH,IAAI,GAAG,IAAI,CAACA,IAAI,EAAA;IACjC,OAAOgC,qBAAqB,CAAChC,IAAI,CAAC;AACpC,EAAA;AAEOK,EAAAA,WAAWA,CAACC,KAAa,EAAA;IAC9B,OAAO2B,qBAAqB,CAAC3B,KAAK,CAAC;AACrC,EAAA;AAEOC,EAAAA,GAAGA,CAACjB,CAAS,EAAA;AAClB,IAAA,OAAO4C,aAAa,CAAC5C,CAAC,EAAE,IAAI,CAACU,IAAI,CAAC;AACpC,EAAA;EAEOS,OAAOA,CAACC,MAAM,GAAG,CAAC,EAAA;AACvB,IAAA,OAAOyB,iBAAiB,CAAC;MAAEnC,IAAI,EAAE,IAAI,CAACA,IAAI;AAAEU,MAAAA;AAAM,KAAE,CAAC;AACvD,EAAA;AAEOG,EAAAA,SAASA,CAACC,IAAa,EAAA;IAC5B,OAAOsB,mBAAmB,CAACtB,IAAI,CAAC;AAClC,EAAA;EAEOE,OAAOA,CAACjB,OAAA,GAA4B,EAAE,EAAA;AAC3C,IAAA,OAAOsC,iBAAiB,CAAC,IAAI,EAAEtC,OAAO,CAAC;AACzC,EAAA;EAEOmB,eAAeA,CAACJ,IAAI,GAAG,CAAC,EAAA;AAC7B,IAAA,OAAOwB,yBAAyB,CAAC;MAAEtC,IAAI,EAAE,IAAI,CAACA,IAAI;AAAEc,MAAAA;AAAI,KAAE,CAAC;AAC7D,EAAA;AAEOK,EAAAA,aAAaA,GAAA;IAClB,OAAO,CAAC,MAAM,CAAC;AACjB,EAAA;;AAGK,MAAMmB,yBAAyB,GAAGA,CAAC;AAAEtC,EAAAA,IAAI,GAAG,CAAC;AAAEc,EAAAA,IAAI,GAAG;AAAC,CAAE,KAAI;EAClE,OAAQ,CAAC,GAAGA,IAAI,GAAIjC,IAAI,CAACI,EAAE,GAAGe,IAAI;AACpC,CAAC;AAEM,MAAMmC,iBAAiB,GAAIpC,OAAiC,IAAI;EACrE,MAAM;AAAEC,IAAAA,IAAI,GAAG,GAAG;AAAEU,IAAAA,MAAM,GAAG;AAAC,GAAE,GAAGX,OAAO;EAC1C,OAAQW,MAAM,GAAG7B,IAAI,CAACI,EAAE,GAAGe,IAAI,GAAI,CAAC;AACtC,CAAC;AAEM,MAAMkC,aAAa,GAAGA,CAAC5C,CAAS,EAAEU,IAAY,KAAI;AACvD,EAAA,OAAOA,IAAI,IAAI,CAAC,IAAI,CAAC,GAAGV,CAAC,IAAI,CAAC,GAAGU,IAAI,IAAI,CAAC,CAAC;AAC7C,CAAC;AAEM,MAAMiC,qBAAqB,GAAI3B,KAAa,IAAI;EACrD,OAAOA,KAAK,GAAGpB,UAAU;AAC3B,CAAC;AAEM,MAAM8C,qBAAqB,GAAIhC,IAAY,IAAI;EACpD,OAAOA,IAAI,GAAGd,UAAU;AAC1B,CAAC;AAEM,MAAMkD,mBAAmB,GAAGA,CAACtB,IAAI,GAAG,MAAM,KAAI;EACnD,IAAIA,IAAI,IAAI,CAAC,EAAE;AACb,IAAA,MAAM,IAAIyB,KAAK,CAAC,wBAAwB,CAAC;;AAE3C,EAAA,MAAMC,YAAY,GAAG,CAAC,CAAC,GAAG1B,IAAI,IAAI,GAAG;AACrC,EAAA,MAAM2B,gBAAgB,GAAIC,CAAS,IAAK7D,IAAI,CAAC8D,GAAG,CAAC9D,IAAI,CAACI,EAAE,IAAIyD,CAAC,GAAG,GAAG,CAAC,CAAC;AACrE,EAAA,OACE,CAACD,gBAAgB,CAAC,CAAC,GAAGD,YAAY,CAAC,GAAGC,gBAAgB,CAACD,YAAY,CAAC,IAAI,CAAC;AAE7E,CAAC;AAEM,MAAMH,iBAAiB,GAAGA,CAC/Bf,KAAA,GAAgC,EAAE,EAClCvB,OAAA,GAA4B,EAAE,KAC5B;EACF,IAAI;AAAEC,IAAAA,IAAI,GAAG;AAAG,GAAE,GAAGsB,KAAK;EAC1B,IAAI;IACFC,MAAM;IACNC,MAAM,GAAGY,mBAAmB,EAAE;IAC9B1B,MAAM,GAAG4B,yBAAyB,CAAC;MAAEtC,IAAI;AAAEc,MAAAA,IAAI,EAAE;KAAG;AAAC,GACtD,GAAGf,OAAO;EAEX,IAAI,CAACwB,MAAM,EAAE;IACXA,MAAM,GAAG1C,IAAI,CAAC4C,GAAG,CAAC5C,IAAI,CAAC6C,IAAI,CAAC1B,IAAI,GAAGwB,MAAM,CAAC,EAAE3C,IAAI,CAACwC,GAAG,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC;AAChE,IAAA,IAAIE,MAAM,GAAG,CAAC,KAAK,CAAC,EAAEA,MAAM,EAAE;;AAGhC,EAAA,MAAMI,MAAM,GAAG,CAACJ,MAAM,GAAG,CAAC,IAAI,CAAC;AAC/B,EAAA,MAAMK,IAAI,GAAG,IAAIC,YAAY,CAACN,MAAM,CAAC;EACrC,KAAK,IAAIO,CAAC,GAAG,CAAC,EAAEA,CAAC,IAAIH,MAAM,EAAEG,CAAC,EAAE,EAAE;AAChCF,IAAAA,IAAI,CAACE,CAAC,CAAC,GAAGI,aAAa,CAACJ,CAAC,GAAGH,MAAM,EAAE3B,IAAI,CAAC,GAAGU,MAAM;IAClDkB,IAAI,CAACL,MAAM,GAAG,CAAC,GAAGO,CAAC,CAAC,GAAGF,IAAI,CAACE,CAAC,CAAC;;AAGhC,EAAA,OAAOF,IAAI;AACb,CAAC;;ACrHK,MAAOgB,oBAAoB,CAAA;EAO/B9C,WAAAA,CAAmBC,OAAA,GAAkC,EAAE,EAAA;IACrD,MAAM;AAAEC,MAAAA,IAAI,GAAG;AAAG,KAAE,GAAGD,OAAO;IAE9B,IAAI,CAACC,IAAI,GAAGA,IAAI;AAClB,EAAA;AAEOG,EAAAA,WAAWA,CAACH,IAAI,GAAG,IAAI,CAACA,IAAI,EAAA;IACjC,OAAOgC,qBAAqB,CAAChC,IAAI,CAAC;AACpC,EAAA;AAEOK,EAAAA,WAAWA,CAACC,KAAa,EAAA;IAC9B,OAAO2B,qBAAqB,CAAC3B,KAAK,CAAC;AACrC,EAAA;AAEOC,EAAAA,GAAGA,CAACjB,CAAS,EAAA;AAClB,IAAA,OAAOuD,uBAAuB,CAACvD,CAAC,EAAE,IAAI,CAACU,IAAI,CAAC;AAC9C,EAAA;AAEA;AACOS,EAAAA,OAAOA,CAACqC,OAAe,EAAA;AAC5B,IAAA,OAAO,CAAC;AACV,EAAA;AAEOjC,EAAAA,SAASA,CAACC,IAAa,EAAA;IAC5B,OAAOsB,mBAAmB,CAACtB,IAAI,CAAC;AAClC,EAAA;EAEOE,OAAOA,CAACjB,OAAA,GAA4B,EAAE,EAAA;AAC3C,IAAA,OAAOgD,2BAA2B,CAAC,IAAI,EAAEhD,OAAO,CAAC;AACnD,EAAA;EAEOmB,eAAeA,CAACJ,IAAI,GAAG,CAAC,EAAA;AAC7B,IAAA,OAAOwB,yBAAyB,CAAC;MAAEtC,IAAI,EAAE,IAAI,CAACA,IAAI;AAAEc,MAAAA;AAAI,KAAE,CAAC;AAC7D,EAAA;AAEOK,EAAAA,aAAaA,GAAA;IAClB,OAAO,CAAC,MAAM,CAAC;AACjB,EAAA;;AAGK,MAAM0B,uBAAuB,GAAGA,CAACvD,CAAS,EAAEU,IAAY,KAAI;AACjE,EAAA,OAAQ,CAAC,GAAGA,IAAI,GAAGV,CAAC,IAAK,CAAC,GAAGA,CAAC,IAAI,CAAC,GAAGU,IAAI,IAAI,CAAC,CAAC;AAClD,CAAC;AAEM,MAAM+C,2BAA2B,GAAGA,CACzCzB,KAAA,GAAgC,EAAE,EAClCvB,OAAA,GAA4B,EAAE,KAC5B;EACF,IAAI;AAAEC,IAAAA,IAAI,GAAG;AAAG,GAAE,GAAGsB,KAAK;EAC1B,IAAI;IACFC,MAAM;IACNC,MAAM,GAAGY,mBAAmB,EAAE;IAC9B1B,MAAM,GAAG4B,yBAAyB,CAAC;MAAEtC,IAAI;AAAEc,MAAAA,IAAI,EAAE;KAAG;AAAC,GACtD,GAAGf,OAAO;EAEX,IAAI,CAACwB,MAAM,EAAE;IACXA,MAAM,GAAG1C,IAAI,CAAC4C,GAAG,CAAC5C,IAAI,CAAC6C,IAAI,CAAC1B,IAAI,GAAGwB,MAAM,CAAC,EAAE3C,IAAI,CAACwC,GAAG,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC;AAChE,IAAA,IAAIE,MAAM,GAAG,CAAC,KAAK,CAAC,EAAEA,MAAM,EAAE;;AAGhC,EAAA,MAAMI,MAAM,GAAG,CAACJ,MAAM,GAAG,CAAC,IAAI,CAAC;AAC/B,EAAA,MAAMK,IAAI,GAAG,IAAIC,YAAY,CAACN,MAAM,CAAC;EACrC,KAAK,IAAIO,CAAC,GAAG,CAAC,EAAEA,CAAC,IAAIH,MAAM,EAAEG,CAAC,EAAE,EAAE;AAChCF,IAAAA,IAAI,CAACE,CAAC,CAAC,GAAGe,uBAAuB,CAACf,CAAC,GAAGH,MAAM,EAAE3B,IAAI,CAAC,GAAGU,MAAM;AAC5DkB,IAAAA,IAAI,CAACL,MAAM,GAAG,CAAC,GAAGO,CAAC,CAAC,GAAG,CAACF,IAAI,CAACE,CAAC,CAAC;;AAGjC,EAAA,OAAOF,IAAI;AACb,CAAC;;AC7BK,MAAOoB,WAAW,CAAA;EAQtBlD,WAAAA,CAAmBC,OAAA,GAAmC,EAAE,EAAA;IACtD,MAAM;AAAEC,MAAAA,IAAI,GAAG,GAAG;AAAEiD,MAAAA,EAAE,GAAG;AAAG,KAAE,GAAGlD,OAAO;IAExC,IAAI,CAACkD,EAAE,GAAGA,EAAE;IACZ,IAAI,CAACjD,IAAI,GAAGA,IAAI;AAClB,EAAA;EAEOG,WAAWA,CAACH,IAAI,GAAG,IAAI,CAACA,IAAI,EAAEiD,EAAE,GAAG,IAAI,CAACA,EAAE,EAAA;AAC/C,IAAA,OAAOC,sBAAsB,CAAClD,IAAI,EAAEiD,EAAE,CAAC;AACzC,EAAA;AAEO5C,EAAAA,WAAWA,CAACC,KAAa,EAAE2C,EAAA,GAAa,IAAI,CAACA,EAAE,EAAA;AACpD,IAAA,OAAOE,sBAAsB,CAAC7C,KAAK,EAAE2C,EAAE,CAAC;AAC1C,EAAA;AAEO1C,EAAAA,GAAGA,CAACjB,CAAS,EAAA;IAClB,OAAO8D,cAAc,CAAC9D,CAAC,EAAE,IAAI,CAACU,IAAI,EAAE,IAAI,CAACiD,EAAE,CAAC;AAC9C,EAAA;EAEOxC,OAAOA,CAACC,MAAM,GAAG,CAAC,EAAA;AACvB,IAAA,OAAO2C,kBAAkB,CAAC;MAAErD,IAAI,EAAE,IAAI,CAACA,IAAI;MAAEU,MAAM;MAAEuC,EAAE,EAAE,IAAI,CAACA;AAAE,KAAE,CAAC;AACrE,EAAA;AAEOpC,EAAAA,SAASA,CAACC,IAAa,EAAA;IAC5B,OAAOwC,oBAAoB,CAACxC,IAAI,CAAC;AACnC,EAAA;EAEOE,OAAOA,CAACjB,OAAA,GAA4B,EAAE,EAAA;IAC3C,MAAM;MACJwB,MAAM;MACNC,MAAM;MACNd,MAAM,GAAG6C,0BAA0B,CAAC;QAClCvD,IAAI,EAAE,IAAI,CAACA,IAAI;QACfiD,EAAE,EAAE,IAAI,CAACA,EAAE;AACXnC,QAAAA,IAAI,EAAE;AACP,OAAA;AAAC,KACH,GAAGf,OAAO;IACX,OAAOyD,kBAAkB,CAAC,IAAI,EAAE;MAAEhC,MAAM;MAAED,MAAM;AAAEb,MAAAA;AAAM,KAAE,CAAC;AAC7D,EAAA;EAEOQ,eAAeA,CAACJ,IAAI,GAAG,CAAC,EAAA;AAC7B,IAAA,OAAOyC,0BAA0B,CAAC;MAAEvD,IAAI,EAAE,IAAI,CAACA,IAAI;MAAEiD,EAAE,EAAE,IAAI,CAACA,EAAE;AAAEnC,MAAAA;AAAI,KAAE,CAAC;AAC3E,EAAA;AAEOK,EAAAA,aAAaA,GAAA;AAClB,IAAA,OAAO,CAAC,MAAM,EAAE,IAAI,CAAC;AACvB,EAAA;;AAGK,MAAMoC,0BAA0B,GAAGA,CACxCxD,OAAA,GAA8C,EAAE,KAC9C;EACF,IAAI;AAAEC,IAAAA,IAAI,GAAG,CAAC;AAAEiD,IAAAA,EAAE,GAAG,GAAG;AAAEnC,IAAAA,IAAI,GAAG;AAAC,GAAE,GAAGf,OAAO;AAC9C,EAAA,OAAQ,CAAC,GAAGe,IAAI,IAAKd,IAAI,IAAIiD,EAAE,GAAGlE,gBAAgB,GAAG,CAAC,CAAC,GAAGkE,EAAE,IAAIpE,IAAI,CAACI,EAAE,CAAC,CAAC;AAC3E,CAAC;AAEM,MAAMmE,cAAc,GAAGA,CAAC9D,CAAS,EAAEU,IAAY,EAAEiD,EAAU,KAAI;AACpE,EAAA,OAAO,CAAC,CAAC,GAAGA,EAAE,IAAIf,aAAa,CAAC5C,CAAC,EAAEU,IAAI,CAAC,GAAGiD,EAAE,GAAGzC,WAAW,CAAClB,CAAC,EAAEU,IAAI,CAAC;AACtE,CAAC;AAEM,MAAMmD,sBAAsB,GAAGA,CAAC7C,KAAa,EAAE2C,EAAE,GAAG,GAAG,KAAI;AAChE,EAAA,OAAO3C,KAAK,IAAI2C,EAAE,GAAG7D,mBAAmB,GAAG,CAAC,CAAC;AAC/C,CAAC;AAEM,MAAM8D,sBAAsB,GAAGA,CAAClD,IAAY,EAAEiD,EAAE,GAAG,GAAG,KAAI;AAC/D,EAAA,OAAOjD,IAAI,IAAIiD,EAAE,GAAG7D,mBAAmB,GAAG,CAAC,CAAC;AAC9C,CAAC;AAEM,MAAMiE,kBAAkB,GAAItD,OAAkC,IAAI;EACvE,MAAM;AAAEC,IAAAA,IAAI,GAAG,GAAG;AAAEU,IAAAA,MAAM,GAAG,CAAC;AAAEuC,IAAAA,EAAE,GAAG;AAAG,GAAE,GAAGlD,OAAO;AACpD,EAAA,OAAQC,IAAI,GAAGU,MAAM,IAAIuC,EAAE,GAAGlE,gBAAgB,GAAG,CAAC,CAAC,GAAGkE,EAAE,IAAIpE,IAAI,CAACI,EAAE,CAAC,GAAI,CAAC;AAC3E,CAAC;AAEM,MAAMqE,oBAAoB,GAAGA,CAACxC,IAAI,GAAG,MAAM,EAAEmC,EAAE,GAAG,GAAG,KAAI;AAC9D,EAAA,OAAOA,EAAE,GAAG,CAAC,GAAGb,mBAAmB,CAACtB,IAAI,CAAC,GAAGC,iBAAiB,CAACD,IAAI,CAAC;AACrE,CAAC;AAEM,MAAM0C,kBAAkB,GAAGA,CAChClC,KAAA,GAAiC,EAAE,EACnCvB,OAAA,GAA4B,EAAE,KAC5B;EACF,IAAI;AAAEC,IAAAA,IAAI,GAAG,GAAG;AAAEiD,IAAAA,EAAE,GAAG;AAAG,GAAE,GAAG3B,KAAK;EACpC,IAAI;IACFC,MAAM;AACNC,IAAAA,MAAM,GAAG8B,oBAAoB,CAAC,KAAK,EAAEL,EAAE,CAAC;IACxCvC,MAAM,GAAG6C,0BAA0B,CAAC;MAAEvD,IAAI;MAAEiD,EAAE;AAAEnC,MAAAA,IAAI,EAAE;KAAG;AAAC,GAC3D,GAAGf,OAAO;EAEX,IAAI,CAACW,MAAM,EAAE;AACXA,IAAAA,MAAM,GACJ,CAAC,IACCuC,EAAE,GAAGpE,IAAI,CAACG,IAAI,CAAC,CAACJ,mBAAmB,GAAGC,IAAI,CAACI,EAAE,CAAC,GAAIe,IAAI,GACrD,CAAC,CAAC,GAAGiD,EAAE,IAAIjD,IAAI,GAAGnB,IAAI,CAACI,EAAE,GAAI,CAAC,CAAC;;EAGtC,IAAI,CAACsC,MAAM,EAAE;IACXA,MAAM,GAAG1C,IAAI,CAAC4C,GAAG,CAAC5C,IAAI,CAAC6C,IAAI,CAAC1B,IAAI,GAAGwB,MAAM,CAAC,EAAE3C,IAAI,CAACwC,GAAG,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC;AAChE,IAAA,IAAIE,MAAM,GAAG,CAAC,KAAK,CAAC,EAAEA,MAAM,EAAE;;AAGhC,EAAA,MAAMI,MAAM,GAAG,CAACJ,MAAM,GAAG,CAAC,IAAI,CAAC;AAC/B,EAAA,MAAMK,IAAI,GAAG,IAAIC,YAAY,CAACN,MAAM,CAAC;EACrC,KAAK,IAAIO,CAAC,GAAG,CAAC,EAAEA,CAAC,IAAIH,MAAM,EAAEG,CAAC,EAAE,EAAE;AAChCF,IAAAA,IAAI,CAACE,CAAC,CAAC,GAAGsB,cAAc,CAACtB,CAAC,GAAGH,MAAM,EAAE3B,IAAI,EAAEiD,EAAE,CAAC,GAAGvC,MAAM;IACvDkB,IAAI,CAACL,MAAM,GAAG,CAAC,GAAGO,CAAC,CAAC,GAAGF,IAAI,CAACE,CAAC,CAAC;;AAGhC,EAAA,OAAOF,IAAI;AACb,CAAC;;AC5ID;;;;;;AAMM,MAAO6B,qBAAqB,CAAA;EAYhC3D,WAAAA,CAAmBC,OAAA,GAA6C,EAAE,EAAA;IAChE,MAAM;AAAEC,MAAAA,IAAI,GAAG,GAAG;AAAE0D,MAAAA,KAAK,GAAG;AAAG,KAAE,GAAG3D,OAAO;IAE3C,IAAI,CAACC,IAAI,GAAGA,IAAI;IAChB,IAAI,CAAC0D,KAAK,GAAGA,KAAK;AACpB,EAAA;AAEOvD,EAAAA,WAAWA,CAACH,IAAI,GAAG,IAAI,CAACA,IAAI,EAAA;IACjC,OAAO2D,gCAAgC,CAAC3D,IAAI,CAAC;AAC/C,EAAA;AAEOK,EAAAA,WAAWA,CAACC,KAAa,EAAA;IAC9B,OAAOsD,gCAAgC,CAACtD,KAAK,CAAC;AAChD,EAAA;AAEOC,EAAAA,GAAGA,CAACjB,CAAS,EAAA;IAClB,OAAOuE,wBAAwB,CAACvE,CAAC,EAAE,IAAI,CAACU,IAAI,EAAE,IAAI,CAAC0D,KAAK,CAAC;AAC3D,EAAA;EAEOjD,OAAOA,CAACC,MAAM,GAAG,CAAC,EAAA;AACvB,IAAA,OAAOoD,4BAA4B,CAAC;MAClC9D,IAAI,EAAE,IAAI,CAACA,IAAI;MACfU,MAAM;MACNgD,KAAK,EAAE,IAAI,CAACA;KACb,CAAC;AACJ,EAAA;AAEO7C,EAAAA,SAASA,CAACC,IAAa,EAAA;IAC5B,OAAOiD,8BAA8B,CAACjD,IAAI,CAAC;AAC7C,EAAA;EAEOE,OAAOA,CAACjB,OAAA,GAA4B,EAAE,EAAA;AAC3C,IAAA,OAAOiE,4BAA4B,CAAC,IAAI,EAAEjE,OAAO,CAAC;AACpD,EAAA;EAEOmB,eAAeA,CAACJ,IAAI,GAAG,CAAC,EAAA;IAC7B,MAAM;MAAE4C,KAAK;AAAE1D,MAAAA;AAAI,KAAE,GAAG,IAAI;AAC5B,IAAA,OAAOiE,oCAAoC,CAAC;MAAEjE,IAAI;MAAEc,IAAI;AAAE4C,MAAAA;AAAK,KAAE,CAAC;AACpE,EAAA;AAEOvC,EAAAA,aAAaA,GAAA;AAClB,IAAA,OAAO,CAAC,MAAM,EAAE,OAAO,CAAC;AAC1B,EAAA;;AAGK,MAAM8C,oCAAoC,GAAGA,CAAC;AACnDjE,EAAAA,IAAI,GAAG,CAAC;AACR0D,EAAAA,KAAK,GAAG,CAAC;AACT5C,EAAAA,IAAI,GAAG;AAAC,CACT,KAAI;EACH,OAAQA,IAAI,GAAGd,IAAI,IAAI,OAAO,GAAG,QAAQ,GAAG0D,KAAK,CAAC,GAAI,CAAC;AACzD,CAAC;AAED;;;AAGO,MAAMI,4BAA4B,GACvC/D,OAA4C,IAC1C;EACF,MAAM;AAAEC,IAAAA,IAAI,GAAG,GAAG;AAAEU,IAAAA,MAAM,GAAG,CAAC;AAAEgD,IAAAA,KAAK,GAAG;AAAC,GAAE,GAAG3D,OAAO;EACrD,OAAQW,MAAM,GAAGV,IAAI,IAAI,OAAO,GAAG,QAAQ,GAAG0D,KAAK,CAAC,GAAI,CAAC;AAC3D,CAAC;AAEM,MAAMG,wBAAwB,GAAGA,CACtCvE,CAAS,EACTU,IAAY,EACZ0D,KAAa,KACX;EACF,MAAMQ,CAAC,GAAG,CAAE,CAAC,GAAG5E,CAAC,GAAIU,IAAI,KAAK,CAAC;EAC/B,OAAO,CAAC,CAAC,GAAG0D,KAAK,KAAK,CAAC,GAAGQ,CAAC,CAAC,GAAIR,KAAK,IAAI,CAAC,GAAGQ,CAAC,GAAG,CAAC,CAAC,IAAK,CAAC,GAAGA,CAAC,GAAGA,CAAC,IAAI,CAAC,CAAC;AACzE,CAAC;AAEM,MAAMN,gCAAgC,GAAItD,KAAa,IAAI;EAChE,OAAOA,KAAK,GAAGpB,UAAU;AAC3B,CAAC;AAEM,MAAMyE,gCAAgC,GAAI3D,IAAY,IAAI;EAC/D,OAAOA,IAAI,GAAGd,UAAU;AAC1B,CAAC;AAEM,MAAM6E,8BAA8B,GAAGA,CAACjD,IAAI,GAAG,MAAM,KAAI;EAC9D,IAAIA,IAAI,IAAI,CAAC,EAAE;AACb,IAAA,MAAM,IAAIyB,KAAK,CAAC,wBAAwB,CAAC;;AAE3C,EAAA,MAAMC,YAAY,GAAG,CAAC,CAAC,GAAG1B,IAAI,IAAI,GAAG;AACrC,EAAA,MAAM2B,gBAAgB,GAAIC,CAAS,IAAK7D,IAAI,CAAC8D,GAAG,CAAC9D,IAAI,CAACI,EAAE,IAAIyD,CAAC,GAAG,GAAG,CAAC,CAAC;AACrE,EAAA,OACE,CAACD,gBAAgB,CAAC,CAAC,GAAGD,YAAY,CAAC,GAAGC,gBAAgB,CAACD,YAAY,CAAC,IAAI,CAAC;AAE7E,CAAC;AAMM,MAAMwB,4BAA4B,GAAGA,CAC1C1C,KAAA,GAA2C,EAAE,EAC7CvB,OAAA,GAAwC,EAAE,KACxC;EACF,IAAI;AAAEC,IAAAA,IAAI,GAAG,GAAG;AAAE0D,IAAAA,KAAK,GAAG;AAAC,GAAE,GAAGpC,KAAK;EACrC,IAAI;IACFC,MAAM;IACNC,MAAM,GAAGuC,8BAA8B,EAAE;IACzCrD,MAAM,GAAGuD,oCAAoC,CAAC;MAAEjE,IAAI;AAAEc,MAAAA,IAAI,EAAE,CAAC;AAAE4C,MAAAA;KAAO;AAAC,GACxE,GAAG3D,OAAO;EAEX,IAAI,CAACwB,MAAM,EAAE;IACXA,MAAM,GAAG1C,IAAI,CAAC4C,GAAG,CAAC5C,IAAI,CAAC6C,IAAI,CAAC1B,IAAI,GAAGwB,MAAM,CAAC,EAAE3C,IAAI,CAACwC,GAAG,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC;AAChE,IAAA,IAAIE,MAAM,GAAG,CAAC,KAAK,CAAC,EAAEA,MAAM,EAAE;;AAGhC,EAAA,MAAMI,MAAM,GAAG,CAACJ,MAAM,GAAG,CAAC,IAAI,CAAC;AAC/B,EAAA,MAAMK,IAAI,GAAG,IAAIC,YAAY,CAACN,MAAM,CAAC;EACrC,KAAK,IAAIO,CAAC,GAAG,CAAC,EAAEA,CAAC,IAAIH,MAAM,EAAEG,CAAC,EAAE,EAAE;AAChCF,IAAAA,IAAI,CAACE,CAAC,CAAC,GAAG+B,wBAAwB,CAAC/B,CAAC,GAAGH,MAAM,EAAE3B,IAAI,EAAE0D,KAAK,CAAC,GAAGhD,MAAM;IACpEkB,IAAI,CAACL,MAAM,GAAG,CAAC,GAAGO,CAAC,CAAC,GAAGF,IAAI,CAACE,CAAC,CAAC;;AAGhC,EAAA,OAAOF,IAAI;AACb,CAAC;;AC1GK,MAAOuC,UAAU,CAAA;EAIrBrE,WAAAA,CAAmBC,OAAA,GAAkC,EAAE,EAAA;IACrD,IAAI;AAAEC,MAAAA,IAAI,GAAG,EAAE;AAAEC,MAAAA;AAAE,KAAE,GAAGF,OAAO;AAE/BC,IAAAA,IAAI,GAAGoE,YAAY,CAACpE,IAAI,EAAEC,EAAE,CAAC;AAE7B,IAAA,IAAI,CAACoE,KAAK,GAAGrE,IAAI,CAACV,CAAC;AACnB,IAAA,IAAI,CAACgF,KAAK,GAAGtE,IAAI,CAACuE,CAAC;AACrB,EAAA;EAEOhE,GAAGA,CAACjB,CAAS,EAAEiF,CAAS,EAAA;AAC7B,IAAA,OAAOC,aAAa,CAAClF,CAAC,EAAEiF,CAAC,EAAE,IAAI,CAACF,KAAK,EAAE,IAAI,CAACC,KAAK,CAAC;AACpD,EAAA;EAEOtD,OAAOA,CAACjB,OAAA,GAA4B,EAAE,EAAA;AAC3C,IAAA,OAAO0E,iBAAiB,CACtB;AACEzE,MAAAA,IAAI,EAAE;QAAEV,CAAC,EAAE,IAAI,CAAC+E,KAAK;QAAEE,CAAC,EAAE,IAAI,CAACD;AAAK;AACrC,KAAA,EACDvE,OAAO,CACR;AACH,EAAA;EAEOc,SAASA,CAAC6D,MAAM,GAAG,CAAC,EAAA;IACzB,OAAO3D,iBAAiB,CAAC2D,MAAM,CAAC;AAClC,EAAA;AAEOC,EAAAA,SAASA,CACdjE,MAAM,GAAGkE,yBAAyB,CAAC;AACjC5E,IAAAA,IAAI,EAAE;MAAEV,CAAC,EAAE,IAAI,CAAC+E,KAAK;MAAEE,CAAC,EAAE,IAAI,CAACD;KAAO;AACtCI,IAAAA,MAAM,EAAE;GACT,CAAC,EAAA;AAEF,IAAA,OAAOG,mBAAmB,CAAC;AACzB7E,MAAAA,IAAI,EAAE;QAAEV,CAAC,EAAE,IAAI,CAAC+E,KAAK;QAAEE,CAAC,EAAE,IAAI,CAACD;OAAO;AACtC5D,MAAAA;KACD,CAAC;AACJ,EAAA;AAEOL,EAAAA,WAAWA,CAACC,KAAa,EAAA;IAC9B,OAAOJ,mBAAmB,CAACI,KAAK,CAAC;AACnC,EAAA;AAEOH,EAAAA,WAAWA,CAACH,IAAY,EAAA;IAC7B,OAAOI,mBAAmB,CAACJ,IAAI,CAAC;AAClC,EAAA;EAEOkB,eAAeA,CAACwD,MAAM,GAAG,CAAC,EAAA;AAC/B,IAAA,OAAOE,yBAAyB,CAAC;MAC/BF,MAAM;AACN1E,MAAAA,IAAI,EAAE;QAAEV,CAAC,EAAE,IAAI,CAAC+E,KAAK;QAAEE,CAAC,EAAE,IAAI,CAACD;AAAK;KACrC,CAAC;AACJ,EAAA;EAEA,IAAWtE,IAAIA,CAACA,IAAuB,EAAA;AACrCA,IAAAA,IAAI,GAAG8E,gBAAc,CAAC9E,IAAI,CAAC;AAC3B,IAAA,IAAI,CAACqE,KAAK,GAAGrE,IAAI,CAACV,CAAC;AACnB,IAAA,IAAI,CAACgF,KAAK,GAAGtE,IAAI,CAACuE,CAAC;AACrB,EAAA;;AAGK,MAAMC,aAAa,GAAGA,CAC3BlF,CAAS,EACTiF,CAAS,EACTQ,KAAa,EACbC,KAAa,KACX;AACF,EAAA,OAAOnG,IAAI,CAACuC,GAAG,CACbxC,mBAAmB,IAAIC,IAAI,CAACwC,GAAG,CAAC/B,CAAC,GAAGyF,KAAK,EAAE,CAAC,CAAC,GAAGlG,IAAI,CAACwC,GAAG,CAACkD,CAAC,GAAGS,KAAK,EAAE,CAAC,CAAC,CAAC,CACxE;AACH,CAAC;AAEM,MAAMP,iBAAiB,GAAGA,CAC/BnD,KAA6B,EAC7BvB,OAAA,GAA4B,EAAE,KAC5B;EACF,IAAI;AAAEC,IAAAA,IAAI,GAAG,EAAE;AAAEC,IAAAA;AAAE,GAAE,GAAGqB,KAAK;AAE7BtB,EAAAA,IAAI,GAAGoE,YAAY,CAACpE,IAAI,EAAEC,EAAE,CAAC;EAE7B,IAAI;IACFuB,MAAM,GAAGT,iBAAiB,EAAE;AAC5BQ,IAAAA,MAAM,GAAG;AAAEjC,MAAAA,CAAC,EAAE,CAAC;AAAEiF,MAAAA,CAAC,EAAE;KAAG;IACvB7D,MAAM,GAAGkE,yBAAyB,CAAC;MAAE5E,IAAI;AAAE0E,MAAAA,MAAM,EAAE;KAAG;AAAC,GACxD,GAAG3E,OAAO;AAEXyB,EAAAA,MAAM,GAAGsD,gBAAc,CAACtD,MAAM,CAAC;AAE/BD,EAAAA,MAAM,GAAGuD,gBAAc,CAACvD,MAAM,CAAC;EAE/B,KAAK,MAAM0D,IAAI,IAAI,CAAC,GAAG,EAAE,GAAG,CAAU,EAAE;AACtC,IAAA,IAAI,CAAC1D,MAAM,CAAC0D,IAAI,CAAC,EAAE;AACjB1D,MAAAA,MAAM,CAAC0D,IAAI,CAAC,GAAGpG,IAAI,CAAC4C,GAAG,CACrB5C,IAAI,CAAC6C,IAAI,CAAC1B,IAAI,CAACiF,IAAI,CAAC,GAAGzD,MAAM,CAACyD,IAAI,CAAC,CAAC,EACpCpG,IAAI,CAACwC,GAAG,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,CACpB;AACD,MAAA,IAAIE,MAAM,CAAC0D,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE1D,MAAM,CAAC0D,IAAI,CAAC,EAAE;;;EAI9C,MAAMC,OAAO,GAAG,CAAC3D,MAAM,CAACjC,CAAC,GAAG,CAAC,IAAI,CAAC;EAClC,MAAM6F,OAAO,GAAG,CAAC5D,MAAM,CAACgD,CAAC,GAAG,CAAC,IAAI,CAAC;EAClC,MAAM3C,IAAI,GAAG,IAAIwD,KAAK,CAAC7D,MAAM,CAACjC,CAAC,CAAC;AAChC,EAAA,KAAK,IAAIwC,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGP,MAAM,CAACjC,CAAC,EAAEwC,CAAC,EAAE,EAAE;IACjCF,IAAI,CAACE,CAAC,CAAC,GAAG,IAAID,YAAY,CAACN,MAAM,CAACgD,CAAC,CAAC;;AAEtC,EAAA,KAAK,IAAIzC,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGP,MAAM,CAACjC,CAAC,EAAEwC,CAAC,EAAE,EAAE;AACjC,IAAA,KAAK,IAAIuD,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAG9D,MAAM,CAACgD,CAAC,EAAEc,CAAC,EAAE,EAAE;MACjCzD,IAAI,CAACE,CAAC,CAAC,CAACuD,CAAC,CAAC,GACRb,aAAa,CAAC1C,CAAC,GAAGoD,OAAO,EAAEG,CAAC,GAAGF,OAAO,EAAEnF,IAAI,CAACV,CAAC,EAAEU,IAAI,CAACuE,CAAC,CAAC,GAAG7D,MAAM;;;AAGtE,EAAA,OAAOkB,IAAI;AACb,CAAC;AAEM,MAAMgD,yBAAyB,GAAGA,CACvC7E,OAAA,GAA4C,EAAE,KAC5C;EACF,IAAI;AAAE2E,IAAAA,MAAM,GAAG,CAAC;AAAE1E,IAAAA,IAAI,GAAG,EAAE;AAAEC,IAAAA;AAAE,GAAE,GAAGF,OAAO;AAC3CC,EAAAA,IAAI,GAAGoE,YAAY,CAACpE,IAAI,EAAEC,EAAE,CAAC;AAC7B,EAAA,OAAQyE,MAAM,GAAG7F,IAAI,CAACC,GAAG,GAAG,CAAC,IAAKD,IAAI,CAACI,EAAE,GAAGe,IAAI,CAACuE,CAAC,GAAGvE,IAAI,CAACV,CAAC,CAAC;AAC9D,CAAC;AAEM,MAAMuF,mBAAmB,GAAGA,CACjC9E,OAAA,GAAsC,EAAE,KACtC;EACF,IAAI;AAAEC,IAAAA,IAAI,GAAG,EAAE;AAAEU,IAAAA,MAAM,GAAG,CAAC;AAAET,IAAAA;AAAE,GAAE,GAAGF,OAAO;AAE3CC,EAAAA,IAAI,GAAGoE,YAAY,CAACpE,IAAI,EAAEC,EAAE,CAAC;AAE7B,EAAA,OAAQS,MAAM,GAAG7B,IAAI,CAACI,EAAE,GAAGe,IAAI,CAACuE,CAAC,GAAGvE,IAAI,CAACV,CAAC,GAAIT,IAAI,CAACC,GAAG,GAAG,CAAC;AAC5D,CAAC;AAED,SAASgG,gBAAcA,CAACQ,KAAwB,EAAA;AAC9C,EAAA,OAAO,OAAOA,KAAK,KAAK,QAAQ,GAAG;AAAEhG,IAAAA,CAAC,EAAEgG,KAAK;AAAEf,IAAAA,CAAC,EAAEe;AAAK,GAAE,GAAG;IAAE,GAAGA;GAAO;AAC1E;AAEA,SAASlB,YAAYA,CAACpE,IAAwB,EAAEC,EAAsB,EAAA;EACpE,IAAIA,EAAE,KAAKsF,SAAS,EAAE;AACpB,IAAA,IAAIC,QAAQ,GAAGV,gBAAc,CAAC7E,EAAE,CAAC;IACjC,OAAO;MACLX,CAAC,EAAEY,mBAAmB,CAAC,CAAC,GAAGsF,QAAQ,CAAClG,CAAC,CAAC;AACtCiF,MAAAA,CAAC,EAAErE,mBAAmB,CAAC,CAAC,GAAGsF,QAAQ,CAACjB,CAAC;AACtC,KAAA;AACF,EAAA,CAAA,MAAM,IAAIvE,IAAI,KAAKuF,SAAS,EAAE;IAC7B,OAAOT,gBAAc,CAAC9E,IAAI,CAAC;GAC5B,MAAM;AACL,IAAA,MAAM,IAAIuC,KAAK,CAAC,kDAAkD,CAAC;;AAEvE;;AC/MA;;;AAGM,SAAUkD,UAAUA,CAACnE,KAAc,EAAA;EACvC,MAAM;AAAEoE,IAAAA;AAAI,GAAE,GAAGpE,KAAK;AAEtB,EAAA,QAAQoE,IAAI;AACV,IAAA,KAAK,UAAU;AACb,MAAA,OAAO,IAAI7F,QAAQ,CAACyB,KAAK,CAAC;AAC5B,IAAA,KAAK,YAAY;AACf,MAAA,OAAO,IAAIS,UAAU,CAACT,KAAK,CAAC;AAC9B,IAAA,KAAK,aAAa;AAChB,MAAA,OAAO,IAAI0B,WAAW,CAAC1B,KAAK,CAAC;AAC/B,IAAA,KAAK,sBAAsB;AACzB,MAAA,OAAO,IAAIsB,oBAAoB,CAACtB,KAAK,CAAC;AACxC,IAAA,KAAK,uBAAuB;AAC1B,MAAA,OAAO,IAAImC,qBAAqB,CAACnC,KAAK,CAAC;AACzC,IAAA;AAAS,MAAA;AACP,QAAA,MAAMiB,KAAK,CAAC,CAAA,qBAAA,EAAwBmD,IAAc,EAAE,CAAC;;;AAG3D;;AC1BA;;;AAGM,SAAUC,UAAUA,CAACrE,KAAc,EAAA;EACvC,MAAM;AAAEoE,IAAAA;AAAI,GAAE,GAAGpE,KAAK;AACtB,EAAA,QAAQoE,IAAI;AACV,IAAA,KAAK,UAAU;AACb,MAAA,OAAO,IAAIvB,UAAU,CAAC7C,KAAK,CAAC;AAC9B,IAAA;AAAS,MAAA;QACP,MAAMsE,SAAS,GAAUF,IAAI;AAC7B;AACA,QAAA,MAAMnD,KAAK,CAAC,CAAA,qBAAA,EAAwBqD,SAAS,EAAE,CAAC;;;AAGtD;;ACuDM,MAAOC,qBAAqB,CAAA;EACtBC,IAAI;EACJC,EAAE;EACFC,QAAQ;EACXC,QAAQ;EACLC,YAAY;EACZ5E,KAAK;EAEfxB,WAAAA,CAAmBC,OAAA,GAAuB,EAAE,EAAA;IAC1C,MAAM;AACJ+F,MAAAA,IAAI,GAAG,CAAC;AACRC,MAAAA,EAAE,GAAG,IAAI;AACTC,MAAAA,QAAQ,GAAG,KAAK;MAChBE,YAAY;AACZ5E,MAAAA,KAAK,GAAG;AAAEoE,QAAAA,IAAI,EAAE,UAAU;AAAE1F,QAAAA,IAAI,EAAE;AAAC;AAAE,KACtC,GAAGD,OAAO;AAEXoG,IAAAA,cAAY,CAACL,IAAI,EAAE,MAAM,CAAC;AAC1BK,IAAAA,cAAY,CAACJ,EAAE,EAAE,IAAI,CAAC;AACtBK,IAAAA,eAAa,CAACJ,QAAQ,EAAE,UAAU,CAAC;IAEnC,IAAID,EAAE,IAAID,IAAI,EAAE;AACd,MAAA,MAAM,IAAIO,UAAU,CAAC,oCAAoC,CAAC;AAC5D,IAAA;AACA,IAAA,IAAIH,YAAY,IAAI,OAAOA,YAAY,KAAK,UAAU,EAAE;AACtD,MAAA,MAAM,IAAII,SAAS,CAAC,wCAAwC,CAAC;AAC/D,IAAA;IAEA,IAAI,CAACR,IAAI,GAAGA,IAAI;IAChB,IAAI,CAACC,EAAE,GAAGA,EAAE;IACZ,IAAI,CAACC,QAAQ,GAAGA,QAAQ;IACxB,IAAI,CAACC,QAAQ,GAAG,CAACF,EAAE,GAAGD,IAAI,KAAKE,QAAQ,GAAG,CAAC,CAAC;IAC5C,IAAI,CAACE,YAAY,GAAGA,YAAY;AAChC,IAAA,IAAI,CAAC5E,KAAK,GAAGmE,UAAU,CAACnE,KAAK,CAAC;AAChC,EAAA;AAEA;;;;EAIUiF,WAAWA,CAACC,IAAY,EAAEzG,OAAoB,EAAA;AACtD,IAAA,IAAI0G,EAAU;AACd,IAAA,IAAIC,SAAiB;AACrB,IAAA,IAAIC,QAA4B;AAChC,IAAA,IAAIC,SAA6B;AACjC,IAAA,IAAIC,gBAAqC;AAEzC,IAAA,IAAIzB,KAAK,CAAC0B,OAAO,CAACN,IAAI,CAAC,EAAE;MACvB,CAACC,EAAE,EAAEC,SAAS,EAAEC,QAAQ,EAAEE,gBAAgB,CAAC,GAAGL,IAAI;AACpD,IAAA,CAAC,MAAM;MACLC,EAAE,GAAGD,IAAI,CAAClH,CAAC;MACXoH,SAAS,GAAGF,IAAI,CAACjC,CAAC;MAClBqC,SAAS,GAAGJ,IAAI,CAAClG,KAAK;MACtBuG,gBAAgB,GAAGL,IAAI,CAAClF,KAAK;AAC/B,IAAA;IAEA,IAAI;AAAEA,MAAAA,KAAK,EAAEyF;AAAY,KAAE,GAAGhH,OAAO;AACrC,IAAA,IAAI8G,gBAAgB,EAAE;MACpBE,YAAY,GAAGA,YAAY,GACvB;AAAE,QAAA,GAAGA,YAAY;QAAE,GAAGF;AAAgB,OAAE,GACxCA,gBAAgB;AACtB,IAAA;AAEA,IAAA,MAAMvF,KAAK,GAAGyF,YAAY,GACtBtB,UAAU,CAACsB,YAAY,CAAC,GACxBC,UAAU,CAAC,IAAI,CAAC1F,KAAK,CAAC;IAE1B,MAAM;AAAEhB,MAAAA;AAAK,KAAE,GAAGP,OAAO;IACzB,IAAI;MAAEkH,SAAS;AAAEC,MAAAA;AAAU,KAAE,GAAGnH,OAAO;AAEvC,IAAA,MAAMC,IAAI,GACR2G,QAAQ,KAAKpB,SAAS,GAClBoB,QAAQ,GACRC,SAAS,GACPtF,KAAK,CAACjB,WAAW,CAACuG,SAAS,CAAC,GAC5B,IAAI,CAACV,YAAY,GACf,IAAI,CAACA,YAAY,CAACO,EAAE,CAAC,GACrBnG,KAAK,KAAKiF,SAAS,GACjBjF,KAAK,GACLgB,KAAK,CAACtB,IAAI;AAEtB,IAAA,IAAI,CAACiH,SAAS,EAAEA,SAAS,GAAGjH,IAAI;AAChC,IAAA,IAAI,CAACkH,UAAU,EAAEA,UAAU,GAAGlH,IAAI;AAElC,IAAA,IAAI,CAACiH,SAAS,IAAI,CAACC,UAAU,EAAE;AAC7B,MAAA,MAAM,IAAI3E,KAAK,CAAC,0CAA0C,CAAC;AAC7D,IAAA;AAEA,IAAA,MAAMf,MAAM,GACVzB,OAAO,CAACyB,MAAM,KAAK+D,SAAS,GAAGjE,KAAK,CAACT,SAAS,EAAE,GAAGd,OAAO,CAACyB,MAAM;AAEnE,IAAA,MAAM2F,SAAS,GAAGH,UAAU,CAAC1F,KAAK,CAAC;IACnC6F,SAAS,CAACnH,IAAI,GAAGiH,SAAS;AAE1B,IAAA,MAAMG,UAAU,GAAGJ,UAAU,CAAC1F,KAAK,CAAC;IACpC8F,UAAU,CAACpH,IAAI,GAAGkH,UAAU;IAE5B,OAAO;MACLT,EAAE;MACFC,SAAS;MACTS,SAAS;MACTC,UAAU;MACVH,SAAS;MACTC,UAAU;AACV1F,MAAAA;AACD,KAAA;AACH,EAAA;;AAGF,SAASwF,UAAUA,CAAC1F,KAAsB,EAAA;AACxC,EAAA,OAAO+F,MAAM,CAACC,MAAM,CAClBD,MAAM,CAACE,MAAM,CAACF,MAAM,CAACG,cAAc,CAAClG,KAAK,CAAC,CAAC,EAC3CA,KAAK,CACa;AACtB;AAEA,SAAS8E,eAAaA,CAACqB,KAAa,EAAEC,IAAY,EAAA;AAChD,EAAA,IAAI,CAACC,MAAM,CAACC,SAAS,CAACH,KAAK,CAAC,EAAE;AAC5B,IAAA,MAAM,IAAInB,SAAS,CAAC,CAAA,EAAGoB,IAAI,4BAA4B,CAAC;AAC1D,EAAA;AACF;AAEA,SAASvB,cAAYA,CAACsB,KAAa,EAAEC,IAAY,EAAA;AAC/C,EAAA,IAAI,CAACC,MAAM,CAACE,QAAQ,CAACJ,KAAK,CAAC,EAAE;AAC3B,IAAA,MAAM,IAAInB,SAAS,CAAC,CAAA,EAAGoB,IAAI,0BAA0B,CAAC;AACxD,EAAA;AACF;;AClMA;;;;;;AAMc,SAAUI,WAAWA,CAAClG,IAAY,EAAEmG,WAAuB,EAAA;AACvE,EAAA,IAAI,CAACA,WAAW,EAAE,OAAOnG,IAAI;AAC7B,EAAA,MAAMoG,EAAE,GAAGpG,IAAI,CAACtC,CAAC;AACjB,EAAA,MAAM2I,EAAE,GAAGrG,IAAI,CAAC2C,CAAC;AACjB,EAAA,KAAK,IAAIzC,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGkG,EAAE,CAACzG,MAAM,EAAEO,CAAC,EAAE,EAAE;IAClCmG,EAAE,CAACnG,CAAC,CAAC,IAAIiG,WAAW,CAACC,EAAE,CAAClG,CAAC,CAAC,CAAC;AAC7B,EAAA;AACA,EAAA,OAAOF,IAAI;AACb;;AClBA;AACA,MAAMsG,QAAQ,GAAGb,MAAM,CAACc,SAAS,CAACD,QAAQ;AAc1C;;;;;AAKM,SAAUE,UAAUA,CAACX,KAAc,EAAA;AACvC,EAAA,MAAMY,GAAG,GAAGH,QAAQ,CAACI,IAAI,CAACb,KAAK,CAAC;AAChC,EAAA,OAAOY,GAAG,CAACE,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAACF,GAAG,CAACG,QAAQ,CAAC,KAAK,CAAC;AACvD;;ACZA;;;;;;AAMM,SAAUC,MAAMA,CACpBnD,KAAmB,EACnBvF,OAAA,GAAyB,EAAE,EAAA;EAE3B,MAAM;AAAE2I,IAAAA;AAAS,GAAE,GAAG3I,OAAO;AAC7B,EAAA,IAAI,CAACqI,UAAU,CAAC9C,KAAK,CAAC,EAAE;AACtB,IAAA,MAAM,IAAIgB,SAAS,CAAC,wBAAwB,CAAC;AAC/C,EAAA;AACA,EAAA,IAAIhB,KAAK,CAAC/D,MAAM,KAAK,CAAC,EAAE;AACtB,IAAA,MAAM,IAAI+E,SAAS,CAAC,yBAAyB,CAAC;AAChD,EAAA;AACA,EAAA,IAAI,OAAOhB,KAAK,CAAC,CAAC,CAAC,KAAK,QAAQ,EAAE;AAChC,IAAA,MAAM,IAAIgB,SAAS,CAAC,4BAA4B,CAAC;AACnD,EAAA;AACA,EAAA,IAAIoC,SAAS,IAAIpD,KAAK,CAAC/D,MAAM,GAAGmH,SAAS,EAAE;AACzC,IAAA,MAAM,IAAInG,KAAK,CAAC,CAAA,qCAAA,EAAwCmG,SAAS,EAAE,CAAC;AACtE,EAAA;AACF;;ACxBA;;;;;;;AAOM,SAAUC,iBAAiBA,CAC/BC,KAAkB,EAClBC,MAAc,EACd9I,OAAA,GAAoC,EAAE,EAAA;EAEtC,MAAM;AAAE+I,IAAAA,MAAM,GAAG;AAAI,GAAE,GAAG/I,OAAO;AACjC,EAAA,IAAI+I,MAAM,EAAE;IACV,IAAIC,GAAG,GAAG,CAAC;AACX,IAAA,IAAIC,IAAI,GAAGJ,KAAK,CAACrH,MAAM,GAAG,CAAC;IAC3B,IAAI0H,MAAM,GAAG,CAAC;AACd,IAAA,OAAOD,IAAI,GAAGD,GAAG,GAAG,CAAC,EAAE;MACrBE,MAAM,GAAGF,GAAG,IAAKC,IAAI,GAAGD,GAAG,IAAK,CAAC,CAAC;AAClC,MAAA,IAAIH,KAAK,CAACK,MAAM,CAAC,GAAGJ,MAAM,EAAE;AAC1BE,QAAAA,GAAG,GAAGE,MAAM;MACd,CAAC,MAAM,IAAIL,KAAK,CAACK,MAAM,CAAC,GAAGJ,MAAM,EAAE;AACjCG,QAAAA,IAAI,GAAGC,MAAM;AACf,MAAA,CAAC,MAAM;AACL,QAAA,OAAOA,MAAM;AACf,MAAA;AACF,IAAA;AAEA,IAAA,IAAIF,GAAG,GAAGH,KAAK,CAACrH,MAAM,GAAG,CAAC,EAAE;MAC1B,IAAI1C,IAAI,CAACqK,GAAG,CAACL,MAAM,GAAGD,KAAK,CAACG,GAAG,CAAC,CAAC,GAAGlK,IAAI,CAACqK,GAAG,CAACN,KAAK,CAACG,GAAG,GAAG,CAAC,CAAC,GAAGF,MAAM,CAAC,EAAE;AACrE,QAAA,OAAOE,GAAG;AACZ,MAAA,CAAC,MAAM;QACL,OAAOA,GAAG,GAAG,CAAC;AAChB,MAAA;AACF,IAAA,CAAC,MAAM;AACL,MAAA,OAAOA,GAAG;AACZ,IAAA;AACF,EAAA,CAAC,MAAM;IACL,IAAII,KAAK,GAAG,CAAC;AACb,IAAA,IAAIC,IAAI,GAAGzB,MAAM,CAAC0B,iBAAiB;AACnC,IAAA,KAAK,IAAIvH,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAG8G,KAAK,CAACrH,MAAM,EAAEO,CAAC,EAAE,EAAE;AACrC,MAAA,MAAMwH,WAAW,GAAGzK,IAAI,CAACqK,GAAG,CAACN,KAAK,CAAC9G,CAAC,CAAC,GAAG+G,MAAM,CAAC;MAC/C,IAAIS,WAAW,GAAGF,IAAI,EAAE;AACtBA,QAAAA,IAAI,GAAGE,WAAW;AAClBH,QAAAA,KAAK,GAAGrH,CAAC;AACX,MAAA;AACF,IAAA;AACA,IAAA,OAAOqH,KAAK;AACd,EAAA;AACF;;AC/BA;;;;;AAKM,SAAUI,eAAeA,CAC7BjK,CAAc,EACdS,OAAA,GAAkC,EAAE,EAAA;EAEpC,IAAI;IAAEyJ,SAAS;AAAEC,IAAAA;AAAO,GAAE,GAAG1J,OAAO;EACpC,MAAM;IAAE+F,IAAI;AAAEC,IAAAA;AAAE,GAAE,GAAGhG,OAAO;EAE5B,IAAIyJ,SAAS,KAAKjE,SAAS,EAAE;IAC3B,IAAIO,IAAI,KAAKP,SAAS,EAAE;AACtBiE,MAAAA,SAAS,GAAGb,iBAAiB,CAACrJ,CAAC,EAAEwG,IAAI,CAAC;AACxC,IAAA,CAAC,MAAM;AACL0D,MAAAA,SAAS,GAAG,CAAC;AACf,IAAA;AACF,EAAA;EACA,IAAIC,OAAO,KAAKlE,SAAS,EAAE;IACzB,IAAIQ,EAAE,KAAKR,SAAS,EAAE;AACpBkE,MAAAA,OAAO,GAAGd,iBAAiB,CAACrJ,CAAC,EAAEyG,EAAE,CAAC;AACpC,IAAA,CAAC,MAAM;AACL0D,MAAAA,OAAO,GAAGnK,CAAC,CAACiC,MAAM,GAAG,CAAC;AACxB,IAAA;AACF,EAAA;AACA,EAAA,IAAIiI,SAAS,GAAG,CAAC,EAAEA,SAAS,GAAG,CAAC;AAChC,EAAA,IAAIC,OAAO,GAAG,CAAC,EAAEA,OAAO,GAAG,CAAC;AAC5B,EAAA,IAAID,SAAS,IAAIlK,CAAC,CAACiC,MAAM,EAAEiI,SAAS,GAAGlK,CAAC,CAACiC,MAAM,GAAG,CAAC;AACnD,EAAA,IAAIkI,OAAO,IAAInK,CAAC,CAACiC,MAAM,EAAEkI,OAAO,GAAGnK,CAAC,CAACiC,MAAM,GAAG,CAAC;AAE/C,EAAA,IAAIiI,SAAS,GAAGC,OAAO,EAAE,CAACD,SAAS,EAAEC,OAAO,CAAC,GAAG,CAACA,OAAO,EAAED,SAAS,CAAC;EACpE,OAAO;IAAEA,SAAS;AAAEC,IAAAA;GAAS;AAC/B;;AC1DA;;;;;;AAMM,SAAUC,IAAIA,CAClBC,MAAmB,EACnBC,MAA4B,EAAA;EAE5B,IAAIC,UAAU,GAAG,KAAK;EACtB,IAAIC,QAAQ,GAAG,CAAC;AAChB,EAAA,IAAI1B,UAAU,CAACwB,MAAM,CAAC,EAAE;AACtB,IAAA,IAAID,MAAM,CAACpI,MAAM,KAAKqI,MAAM,CAACrI,MAAM,EAAE;AACnC,MAAA,MAAM,IAAIgB,KAAK,CAAC,6CAA6C,CAAC;AAChE,IAAA;AACF,EAAA,CAAC,MAAM;AACLsH,IAAAA,UAAU,GAAG,IAAI;AACjBC,IAAAA,QAAQ,GAAGF,MAAM;AACnB,EAAA;EAEA,MAAMG,MAAM,GAAG,IAAIlI,YAAY,CAAC8H,MAAM,CAACpI,MAAM,CAAC;AAC9C,EAAA,IAAIsI,UAAU,EAAE;AACd,IAAA,KAAK,IAAI/H,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAG6H,MAAM,CAACpI,MAAM,EAAEO,CAAC,EAAE,EAAE;MACtCiI,MAAM,CAACjI,CAAC,CAAC,GAAG6H,MAAM,CAAC7H,CAAC,CAAC,GAAGgI,QAAQ;AAClC,IAAA;AACF,EAAA,CAAC,MAAM;AACL,IAAA,KAAK,IAAIhI,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAG6H,MAAM,CAACpI,MAAM,EAAEO,CAAC,EAAE,EAAE;AACtCiI,MAAAA,MAAM,CAACjI,CAAC,CAAC,GAAG6H,MAAM,CAAC7H,CAAC,CAAC,GAAI8H,MAAsB,CAAC9H,CAAC,CAAC;AACpD,IAAA;AACF,EAAA;AAEA,EAAA,OAAOiI,MAAM;AACf;;ACKM,SAAUC,iBAAiBA,CAG/BC,gBAAsC,EACtC1I,MAAc,EAAA;EAEd,IAAI0I,gBAAgB,KAAK7E,KAAK,EAAE;IAC9B,OAAO,IAAI6E,gBAAgB,CAAC1I,MAAM,CAAC,CAAC2I,IAAI,CACtC,CAAC,CACuC;AAC5C,EAAA,CAAC,MAAM;AACL,IAAA,OAAO,IAAID,gBAAgB,CACzB1I,MAAM,CACkC;AAC5C,EAAA;AACF;;ACxDA,MAAM4I,IAAI,GAAG,CAAC;AACd,MAAMC,SAAS,GAAG,CAAC,GAAG,QAAQ;AAE9B,MAAMC,GAAG,GAAG,EAAE;AACd,MAAMC,GAAG,GAAG,EAAE;AACd,MAAMC,GAAG,GAAG,EAAE;AAEd,SAASC,cAAcA,CAACC,CAAS,EAAEC,CAAS,EAAA;AAC1CD,EAAAA,CAAC,MAAM,CAAC;AACRC,EAAAA,CAAC,MAAM,CAAC;AACR,EAAA,MAAMC,GAAG,GAAGF,CAAC,GAAG,MAAM;AACtB,EAAA,MAAMG,GAAG,GAAGH,CAAC,GAAGE,GAAG;EACnB,OAAQ,CAAEC,GAAG,GAAGF,CAAC,KAAM,CAAC,IAAIC,GAAG,GAAGD,CAAC,KAAM,CAAC;AAC5C;AAEM,MAAOG,KAAK,CAAA;EACTC,MAAM;EAELC,KAAK;AAEb;;;;AAIAjL,EAAAA,WAAAA,CAAYkL,IAAI,GAAGC,IAAI,CAACC,GAAG,EAAE,EAAA;AAC3B,IAAA,IAAI,CAACH,KAAK,GAAG,IAAII,WAAW,CAAC,CAAC,CAAC;AAC/B,IAAA,IAAI,CAACC,IAAI,CAACJ,IAAI,CAAC;IACf,IAAI,CAACF,MAAM,GAAG,IAAI,CAACO,QAAQ,CAACC,IAAI,CAAC,IAAI,CAAC;AACxC,EAAA;AAEA;;;AAGOC,EAAAA,SAASA,GAAA;IACd,IAAI,CAACC,SAAS,EAAE;AAChB,IAAA,OAAQ,IAAI,CAACT,KAAK,CAAC,CAAC,CAAC,GAAG,IAAI,CAACA,KAAK,CAAC,CAAC,CAAC,KAAM,CAAC;AAC9C,EAAA;AAEA;;;AAGOM,EAAAA,QAAQA,GAAA;IACb,OAAO,CAAC,IAAI,CAACE,SAAS,EAAE,KAAK,CAAC,IAAInB,SAAS;AAC7C,EAAA;AAEOgB,EAAAA,IAAIA,CAACJ,IAAY,EAAA;AACtB,IAAA,IAAI,CAACrD,MAAM,CAACC,SAAS,CAACoD,IAAI,CAAC,EAAE;AAC3B,MAAA,MAAM,IAAI1E,SAAS,CAAC,yBAAyB,CAAC;AAChD,IAAA;AACA,IAAA,IAAI,CAACyE,KAAK,CAAC,CAAC,CAAC,GAAGC,IAAI;AACpB,IAAA,IAAI,CAACD,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC;AACjB,IAAA,IAAI,CAACA,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC;AACjB,IAAA,IAAI,CAACA,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC;IACjB,KAAK,IAAIjJ,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGqI,IAAI,EAAErI,CAAC,EAAE,EAAE;AAC7B,MAAA,IAAI,CAACiJ,KAAK,CAACjJ,CAAC,GAAG,CAAC,CAAC,IACdA,CAAC,GACA0I,cAAc,CACZ,UAAU,EACV,IAAI,CAACO,KAAK,CAAEjJ,CAAC,GAAG,CAAC,GAAI,CAAC,CAAC,GAAK,IAAI,CAACiJ,KAAK,CAAEjJ,CAAC,GAAG,CAAC,GAAI,CAAC,CAAC,KAAK,EAAE,KAAM,CAAE,CACnE,KACH,CAAC;AACL,IAAA;IACA,IAAI,CAAC2J,mBAAmB,EAAE;IAC1B,KAAK,IAAI3J,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGqI,IAAI,EAAErI,CAAC,EAAE,EAAE;MAC7B,IAAI,CAAC0J,SAAS,EAAE;AAClB,IAAA;AACF,EAAA;AAEQC,EAAAA,mBAAmBA,GAAA;AACzB,IAAA,IACE,IAAI,CAACV,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,IACnB,IAAI,CAACA,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,IACnB,IAAI,CAACA,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,IACnB,IAAI,CAACA,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,EACnB;MACA,IAAI,CAACA,KAAK,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC;MACnB,IAAI,CAACA,KAAK,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC;MACnB,IAAI,CAACA,KAAK,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC;MACnB,IAAI,CAACA,KAAK,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC;AACrB,IAAA;AACF,EAAA;AAEQS,EAAAA,SAASA,GAAA;AACf,IAAA,IAAIE,CAAC,GAAG,IAAI,CAACX,KAAK,CAAC,CAAC,CAAC;IACrBW,CAAC,IAAIA,CAAC,IAAIrB,GAAG;IACbqB,CAAC,IAAIA,CAAC,KAAKpB,GAAG;IACdoB,CAAC,IAAI,IAAI,CAACX,KAAK,CAAC,CAAC,CAAC,IAAIR,GAAG;IACzB,IAAI,CAACQ,KAAK,CAAC,CAAC,CAAC,GAAG,IAAI,CAACA,KAAK,CAAC,CAAC,CAAC;IAC7B,IAAI,CAACA,KAAK,CAAC,CAAC,CAAC,GAAG,IAAI,CAACA,KAAK,CAAC,CAAC,CAAC;IAC7B,IAAI,CAACA,KAAK,CAAC,CAAC,CAAC,GAAG,IAAI,CAACA,KAAK,CAAC,CAAC,CAAC;AAC7B,IAAA,IAAI,CAACA,KAAK,CAAC,CAAC,CAAC,GAAGW,CAAC;AACnB,EAAA;;;AClDF;;;;;AAKM,SAAUC,iBAAiBA,CAC/B5L,OAAA,GAAoC,EAAE,EAAA;EAEtC,MAAM;AACJ6L,IAAAA,IAAI,GAAG,CAAC;AACRC,IAAAA,iBAAiB,GAAG,CAAC;AACrBtK,IAAAA,MAAM,GAAG,IAAI;AACbuK,IAAAA,KAAK,GAAG,CAAC;IACTd,IAAI;AACJe,IAAAA,YAAY,GAAG;AAAQ,GACxB,GAAGhM,OAAO;AAEX,EAAA,MAAMiM,SAAS,GAAG,IAAInB,KAAK,CAACG,IAAI,CAAC;AACjC,EAAA,MAAMiB,WAAW,GAAG,IAAIpK,YAAY,CAACN,MAAM,CAAC;AAE5C,EAAA,QAAQwK,YAAY;AAClB,IAAA,KAAK,QAAQ;AAAE,MAAA;QACb,MAAMG,iBAAiB,GAAG,IAAIC,iBAAiB,CAC7CP,IAAI,EACJC,iBAAiB,EACjBG,SAAS,CACV;QACD,KAAK,IAAIlK,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGP,MAAM,EAAEO,CAAC,EAAE,EAAE;AAC/BmK,UAAAA,WAAW,CAACnK,CAAC,CAAC,GAAGoK,iBAAiB,CAACE,gBAAgB,EAAE;AACvD,QAAA;AACA,QAAA;AACF,MAAA;AACA,IAAA,KAAK,SAAS;AAAE,MAAA;QACd,KAAK,IAAItK,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGP,MAAM,EAAEO,CAAC,EAAE,EAAE;AAC/BmK,UAAAA,WAAW,CAACnK,CAAC,CAAC,GAAG,CAACkK,SAAS,CAAClB,MAAM,EAAE,GAAG,GAAG,IAAIgB,KAAK,GAAGF,IAAI;AAC5D,QAAA;AACA,QAAA;AACF,MAAA;AACA,IAAA;AAAS,MAAA;QACP,MAAM,IAAIrJ,KAAK,CAAC,CAAA,sBAAA,EAAyB8J,MAAM,CAACN,YAAY,CAAC,CAAA,CAAE,CAAC;AAClE,MAAA;AACF;AAEA,EAAA,OAAOE,WAAW;AACpB;AAEA,MAAME,iBAAiB,CAAA;EACrB,MAAM,GAAG,CAAC;EACV,SAAS,GAAG,KAAK;AAEjB,EAAA,KAAK;AACL,EAAA,kBAAkB;AAClB,EAAA,UAAU;AAEVrM,EAAAA,WAAAA,CAAY8L,IAAY,EAAEC,iBAAyB,EAAEG,SAAgB,EAAA;AACnE,IAAA,IAAI,CAAC,KAAK,GAAGJ,IAAI;AACjB,IAAA,IAAI,CAAC,kBAAkB,GAAGC,iBAAiB;AAC3C,IAAA,IAAI,CAAC,UAAU,GAAGG,SAAS;AAC7B,EAAA;AAEAI,EAAAA,gBAAgBA,GAAA;AACd,IAAA,IAAIE,GAAG,EAAEpI,CAAC,EAAEqI,CAAC,EAAEC,CAAC;AAEhB,IAAA,IAAI,IAAI,CAAC,SAAS,EAAE;AAClB,MAAA,IAAI,CAAC,SAAS,GAAG,KAAK;AACtBF,MAAAA,GAAG,GAAG,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC,KAAK;AAC1D,IAAA,CAAC,MAAM;MACL,GAAG;QACDpI,CAAC,GAAG,IAAI,CAAC,UAAU,CAAC4G,MAAM,EAAE,GAAG,CAAC,GAAG,CAAC;QACpCyB,CAAC,GAAG,IAAI,CAAC,UAAU,CAACzB,MAAM,EAAE,GAAG,CAAC,GAAG,CAAC;AAEpC0B,QAAAA,CAAC,GAAGtI,CAAC,GAAGA,CAAC,GAAGqI,CAAC,GAAGA,CAAC;AACnB,MAAA,CAAC,QAAQC,CAAC,IAAI,CAAC,IAAIA,CAAC,KAAK,CAAC;AAE1BA,MAAAA,CAAC,GAAG3N,IAAI,CAACG,IAAI,CAAE,EAAE,GAAGH,IAAI,CAACY,GAAG,CAAC+M,CAAC,CAAC,GAAIA,CAAC,CAAC;AAErC,MAAA,IAAI,CAAC,MAAM,GAAGD,CAAC,GAAGC,CAAC;AACnB,MAAA,IAAI,CAAC,SAAS,GAAG,IAAI;AACrBF,MAAAA,GAAG,GAAG,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,kBAAkB,GAAGpI,CAAC,GAAGsI,CAAC;AACpD,IAAA;AACA,IAAA,OAAOF,GAAG;AACZ,EAAA;;;ACpHF;;;;;AAKM,SAAUG,SAASA,CACvB7D,KAAkB,EAClB7I,OAAA,GAAkC,EAAE,EAAA;EAEpC0I,MAAM,CAACG,KAAK,CAAC;EACb,MAAM;IAAEY,SAAS;AAAEC,IAAAA;AAAO,GAAE,GAAGF,eAAe,CAACX,KAAK,EAAE7I,OAAO,CAAC;AAC9D,EAAA,IAAI2M,QAAQ,GAAG9D,KAAK,CAACY,SAAS,CAAC;AAE/B,EAAA,KAAK,IAAI1H,CAAC,GAAG0H,SAAS,GAAG,CAAC,EAAE1H,CAAC,IAAI2H,OAAO,EAAE3H,CAAC,EAAE,EAAE;AAC7C,IAAA,IAAI8G,KAAK,CAAC9G,CAAC,CAAC,GAAG4K,QAAQ,EAAE;AACvBA,MAAAA,QAAQ,GAAG9D,KAAK,CAAC9G,CAAC,CAAC;AACrB,IAAA;AACF,EAAA;AACA,EAAA,OAAO4K,QAAQ;AACjB;;ACUA;;;;AAIM,SAAUC,iBAAiBA,CAG/B5M,OAAuD,EAAA;EAEvD,MAAM;IACJ6M,MAAM;AACNC,IAAAA,MAAM,GAAGD,MAAM,EAAErL,MAAM,IAAI,CAAC;IAC5BuL,SAAS,GAAGF,MAAM,GAAG,CAAC,CAAC,CAACrL,MAAM,IAAI,CAAC;AACnC0I,IAAAA,gBAAgB,GAAGpI;AAAoC,GACxD,GAAG9B,OAAO;EAEX,MAAMgN,SAAS,GAAiD,EAAE;EAClE,KAAK,IAAIC,GAAG,GAAG,CAAC,EAAEA,GAAG,GAAGH,MAAM,EAAEG,GAAG,EAAE,EAAE;IACrCD,SAAS,CAACE,IAAI,CAACjD,iBAAiB,CAACC,gBAAgB,EAAE6C,SAAS,CAAC,CAAC;AAChE,EAAA;AACA,EAAA,OAAOC,SAAS;AAClB;;ACtDM,SAAUG,WAAWA,CAACtL,IAAkB,EAAA;AAC5C,EAAA,IAAIA,IAAI,CAACL,MAAM,KAAK,CAAC,IAAIK,IAAI,CAAC,CAAC,CAAC,CAACL,MAAM,KAAK,CAAC,EAAE;AAC7C,IAAA,MAAM,IAAI8E,UAAU,CAAC,0BAA0B,CAAC;AAClD,EAAA;AAEA,EAAA,MAAM8G,WAAW,GAAGvL,IAAI,CAAC,CAAC,CAAC,CAACL,MAAM;AAClC,EAAA,KAAK,IAAIO,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGF,IAAI,CAACL,MAAM,EAAEO,CAAC,EAAE,EAAE;IACpC,IAAIF,IAAI,CAACE,CAAC,CAAC,CAACP,MAAM,KAAK4L,WAAW,EAAE;AAClC,MAAA,MAAM,IAAI9G,UAAU,CAAC,mCAAmC,CAAC;AAC3D,IAAA;AACF,EAAA;AACF;;ACTA;;;;AAIM,SAAU+G,aAAaA,CAACR,MAAoB,EAAA;EAIhDM,WAAW,CAACN,MAAM,CAAC;AACnB,EAAA,MAAMC,MAAM,GAAGD,MAAM,CAACrL,MAAM;AAC5B,EAAA,MAAMuL,SAAS,GAAGF,MAAM,CAAC,CAAC,CAAC,CAACrL,MAAM;EAElC,IAAIE,GAAG,GAAGmL,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;EACtB,IAAIS,GAAG,GAAGT,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;EAEtB,KAAK,IAAIU,MAAM,GAAG,CAAC,EAAEA,MAAM,GAAGR,SAAS,EAAEQ,MAAM,EAAE,EAAE;IACjD,KAAK,IAAIN,GAAG,GAAG,CAAC,EAAEA,GAAG,GAAGH,MAAM,EAAEG,GAAG,EAAE,EAAE;AACrC,MAAA,IAAIJ,MAAM,CAACI,GAAG,CAAC,CAACM,MAAM,CAAC,GAAG7L,GAAG,EAAEA,GAAG,GAAGmL,MAAM,CAACI,GAAG,CAAC,CAACM,MAAM,CAAC;AACxD,MAAA,IAAIV,MAAM,CAACI,GAAG,CAAC,CAACM,MAAM,CAAC,GAAGD,GAAG,EAAEA,GAAG,GAAGT,MAAM,CAACI,GAAG,CAAC,CAACM,MAAM,CAAC;AAC1D,IAAA;AACF,EAAA;EAEA,OAAO;IAAE7L,GAAG;AAAE4L,IAAAA;GAAK;AACrB;;ACHA;;;;;;AAMc,SAAUE,QAAQA,CAAC3L,IAAY,EAAE7B,OAAA,GAAwB,EAAE,EAAA;EACvE,MAAM;AAAEiL,IAAAA,IAAI,GAAG,CAAC;AAAEe,IAAAA,YAAY,GAAG,QAAQ;AAAEyB,IAAAA,OAAO,GAAG;AAAC,GAAE,GAAGzN,OAAO;EAClE,MAAM+L,KAAK,GAAIW,SAAS,CAAC7K,IAAI,CAAC2C,CAAC,CAAC,GAAGiJ,OAAO,GAAI,GAAG;EACjD,MAAMC,KAAK,GAAG9B,iBAAiB,CAAC;IAC9BI,YAAY;IACZf,IAAI;AACJY,IAAAA,IAAI,EAAE,CAAC;AACPC,IAAAA,iBAAiB,EAAEC,KAAK;IACxBA,KAAK;AACLvK,IAAAA,MAAM,EAAEK,IAAI,CAACtC,CAAC,CAACiC;GAChB,CAAC;EACFK,IAAI,CAAC2C,CAAC,GAAGmF,IAAI,CAAC9H,IAAI,CAAC2C,CAAC,EAAEkJ,KAAK,CAAC;AAC5B,EAAA,OAAO7L,IAAI;AACb;;ACWM,MAAO8L,iBAAkB,SAAQ7H,qBAAqB,CAAA;EAClD8H,aAAa;EACb/L,IAAI;EAEZ9B,WAAAA,CAAmBC,OAAA,GAAuB,EAAE,EAAA;IAC1C,KAAK,CAACA,OAAO,CAAC;AACd,IAAA,IAAI,CAAC4N,aAAa,GAAGhG,MAAM,CAACiG,gBAAgB;IAC5C,IAAI,CAAChM,IAAI,GAAG;AACVtC,MAAAA,CAAC,EAAE,IAAIuC,YAAY,CAAC,IAAI,CAACmE,QAAQ,CAAC;AAClCzB,MAAAA,CAAC,EAAE,IAAI1C,YAAY,CAAC,IAAI,CAACmE,QAAQ;AAClC,KAAA;IACD,IAAI,CAAC6H,KAAK,EAAE;AACd,EAAA;AAEA;;;;;;AAMOC,EAAAA,gBAAgBA,CACrBC,KAA4B,EAC5BhO,OAAA,GAA2B,EAAE,EAAA;IAE7B,MAAM;MAAE0N,KAAK;MAAEO,QAAQ;MAAEC,SAAS;AAAEC,MAAAA;AAAW,KAAE,GAAGnO,OAAO;AAC3D,IAAA,IAAI,CAACoO,QAAQ,CAACJ,KAAK,EAAEG,WAAW,CAAC;AACjC,IAAA,IAAIF,QAAQ,EAAE,IAAI,CAAClG,WAAW,CAACkG,QAAQ,CAAC;AACxC,IAAA,IAAIP,KAAK,EAAE,IAAI,CAACF,QAAQ,CAACE,KAAK,CAAC;IAC/B,OAAO,IAAI,CAACW,WAAW,CAAC;AAAEH,MAAAA;AAAS,KAAE,CAAC;AACxC,EAAA;AAEA;;;;;;EAMOE,QAAQA,CAACJ,KAA4B,EAAEhO,OAAqB,EAAA;IACjE,IACE,CAACqF,KAAK,CAAC0B,OAAO,CAACiH,KAAK,CAAC,KACpB,OAAOA,KAAK,KAAK,QAAQ,IACxBA,KAAK,CAACzO,CAAC,KAAKiG,SAAS,IACrBwI,KAAK,CAACxJ,CAAC,KAAKgB,SAAS,IACrB,CAACH,KAAK,CAAC0B,OAAO,CAACiH,KAAK,CAACzO,CAAC,CAAC,IACvB,CAAC8F,KAAK,CAAC0B,OAAO,CAACiH,KAAK,CAACxJ,CAAC,CAAC,IACvBwJ,KAAK,CAACzO,CAAC,CAACiC,MAAM,KAAKwM,KAAK,CAACxJ,CAAC,CAAChD,MAAM,CAAC,EACpC;AACA,MAAA,MAAM,IAAI+E,SAAS,CACjB,4DAA4D,CAC7D;AACH,IAAA;AACA,IAAA,IAAIlB,KAAK,CAAC0B,OAAO,CAACiH,KAAK,CAAC,EAAE;AACxB,MAAA,KAAK,MAAMvH,IAAI,IAAIuH,KAAK,EAAE;AACxB,QAAA,IAAI,CAACM,OAAO,CAAC7H,IAAI,EAAEzG,OAAO,CAAC;AAC7B,MAAA;AACF,IAAA,CAAC,MAAM;AACL,MAAA,KAAK,IAAI+B,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGiM,KAAK,CAACzO,CAAC,CAACiC,MAAM,EAAEO,CAAC,EAAE,EAAE;QACvC,IAAI,CAACuM,OAAO,CAAC,CAACN,KAAK,CAACzO,CAAC,CAACwC,CAAC,CAAC,EAAEiM,KAAK,CAACxJ,CAAC,CAACzC,CAAC,CAAC,CAAC,EAAE/B,OAAO,CAAC;AACjD,MAAA;AACF,IAAA;AACA,IAAA,OAAO,IAAI;AACb,EAAA;AAEA;;;;;;;AAOOsO,EAAAA,OAAOA,CAAC7H,IAAY,EAAEzG,OAAA,GAAuB,EAAE,EAAA;AACpD,IAAA,IAAIqF,KAAK,CAAC0B,OAAO,CAACN,IAAI,CAAC,IAAIA,IAAI,CAACjF,MAAM,GAAG,CAAC,EAAE;AAC1C,MAAA,MAAM,IAAIgB,KAAK,CACb,iFAAiF,CAClF;AACH,IAAA;IACA,IACE,CAAC6C,KAAK,CAAC0B,OAAO,CAACN,IAAI,CAAC,KACnBA,IAAI,CAAClH,CAAC,KAAKiG,SAAS,IAAIiB,IAAI,CAACjC,CAAC,KAAKgB,SAAS,CAAC,EAC9C;AACA,MAAA,MAAM,IAAIhD,KAAK,CACb,iFAAiF,CAClF;AACH,IAAA;IAEA,MAAM;MACJkE,EAAE;MACFC,SAAS;MACTS,SAAS;MACTC,UAAU;MACVH,SAAS;MACTC,UAAU;AACV1F,MAAAA;KACD,GAAG,IAAI,CAAC+E,WAAW,CAACC,IAAI,EAAEzG,OAAO,CAAC;IAEnC,IAAI2G,SAAS,GAAG,IAAI,CAACiH,aAAa,EAAE,IAAI,CAACA,aAAa,GAAGjH,SAAS;IAElE,MAAM4H,UAAU,GAAG7H,EAAE,GAAIQ,SAAS,GAAG,CAAC,GAAIzF,MAAM;IAChD,MAAM+M,SAAS,GAAG9H,EAAE,GAAIS,UAAU,GAAG,CAAC,GAAI1F,MAAM;IAEhD,MAAMgN,UAAU,GAAG3P,IAAI,CAACwO,GAAG,CACzB,CAAC,EACDxO,IAAI,CAAC4P,KAAK,CAAC,CAACH,UAAU,GAAG,IAAI,CAACxI,IAAI,IAAI,IAAI,CAACG,QAAQ,CAAC,CACrD;IACD,MAAMyI,SAAS,GAAG7P,IAAI,CAAC4C,GAAG,CACxB,IAAI,CAACuE,QAAQ,GAAG,CAAC,EACjBnH,IAAI,CAAC6C,IAAI,CAAC,CAAC6M,SAAS,GAAG,IAAI,CAACzI,IAAI,IAAI,IAAI,CAACG,QAAQ,CAAC,CACnD;AACD,IAAA,MAAM0I,WAAW,GAAG9P,IAAI,CAAC+P,KAAK,CAAC,CAACnI,EAAE,GAAG,IAAI,CAACX,IAAI,IAAI,IAAI,CAACG,QAAQ,CAAC;AAEhE;AACA;AACA,IAAA,KAAK,IAAIkD,KAAK,GAAGqF,UAAU,EAAErF,KAAK,GAAGtK,IAAI,CAACwO,GAAG,CAACsB,WAAW,EAAE,CAAC,CAAC,EAAExF,KAAK,EAAE,EAAE;MACtE,IAAI,CAACvH,IAAI,CAAC2C,CAAC,CAAC4E,KAAK,CAAC,IAAIzC,SAAS,GAAGS,SAAS,CAAC5G,GAAG,CAAC,IAAI,CAACqB,IAAI,CAACtC,CAAC,CAAC6J,KAAK,CAAC,GAAG1C,EAAE,CAAC;AAC1E,IAAA;AAEA;AACA,IAAA,KACE,IAAI0C,KAAK,GAAGtK,IAAI,CAAC4C,GAAG,CAACkN,WAAW,EAAED,SAAS,CAAC,EAC5CvF,KAAK,IAAIuF,SAAS,EAClBvF,KAAK,EAAE,EACP;MACA,IAAI,CAACvH,IAAI,CAAC2C,CAAC,CAAC4E,KAAK,CAAC,IAAIzC,SAAS,GAAGU,UAAU,CAAC7G,GAAG,CAAC,IAAI,CAACqB,IAAI,CAACtC,CAAC,CAAC6J,KAAK,CAAC,GAAG1C,EAAE,CAAC;AAC3E,IAAA;AAEA,IAAA,OAAO,IAAI;AACb,EAAA;AAEA;;;;;AAKOqB,EAAAA,WAAWA,CAACC,WAAkC,EAAA;AACnDD,IAAAA,WAAW,CAAC,IAAI,CAAClG,IAAI,EAAEmG,WAAW,CAAC;AACnC,IAAA,OAAO,IAAI;AACb,EAAA;AAEA;;;;;AAKOwF,EAAAA,QAAQA,CAACxN,OAAsB,EAAA;AACpCwN,IAAAA,QAAQ,CAAC,IAAI,CAAC3L,IAAI,EAAE7B,OAAO,CAAC;AAC5B,IAAA,OAAO,IAAI;AACb,EAAA;AAEA;;;;;EAKOqO,WAAWA,CAACrO,OAAA,GAAwC,EAAE,EAAA;AAC3D,IAAA,IAAI,OAAOA,OAAO,KAAK,SAAS,EAAE;AAChCA,MAAAA,OAAO,GAAG;AAAE8O,QAAAA,IAAI,EAAE9O;OAAS;AAC7B,IAAA;IACA,MAAM;AAAE8O,MAAAA,IAAI,GAAG,IAAI;AAAEZ,MAAAA,SAAS,GAAG;AAAC,KAAE,GAAGlO,OAAO;AAC9C,IAAA,IAAIkO,SAAS,EAAE;AACb,MAAA,MAAMa,aAAa,GAAG,IAAI,CAACnB,aAAa,GAAGM,SAAS;MACpD,MAAM3O,CAAC,GAAG,EAAE;MACZ,MAAMiF,CAAC,GAAG,EAAE;AACZ,MAAA,KAAK,IAAIzC,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAG,IAAI,CAACF,IAAI,CAACtC,CAAC,CAACiC,MAAM,EAAEO,CAAC,EAAE,EAAE;QAC3C,IAAI,IAAI,CAACF,IAAI,CAAC2C,CAAC,CAACzC,CAAC,CAAC,IAAIgN,aAAa,EAAE;UACnCxP,CAAC,CAAC2N,IAAI,CAAC,IAAI,CAACrL,IAAI,CAACtC,CAAC,CAACwC,CAAC,CAAC,CAAC;UACtByC,CAAC,CAAC0I,IAAI,CAAC,IAAI,CAACrL,IAAI,CAAC2C,CAAC,CAACzC,CAAC,CAAC,CAAC;AACxB,QAAA;AACF,MAAA;MACA,OAAO;AAAExC,QAAAA,CAAC,EAAEuC,YAAY,CAACiE,IAAI,CAACxG,CAAC,CAAC;AAAEiF,QAAAA,CAAC,EAAE1C,YAAY,CAACiE,IAAI,CAACvB,CAAC;OAAG;AAC7D,IAAA;AACA,IAAA,IAAIsK,IAAI,EAAE;MACR,OAAO;QACLvP,CAAC,EAAE,IAAI,CAACsC,IAAI,CAACtC,CAAC,CAACyP,KAAK,EAAE;AACtBxK,QAAAA,CAAC,EAAE,IAAI,CAAC3C,IAAI,CAAC2C,CAAC,CAACwK,KAAK;AACrB,OAAA;AACH,IAAA,CAAC,MAAM;MACL,OAAO,IAAI,CAACnN,IAAI;AAClB,IAAA;AACF,EAAA;AAEA;;;;AAIOiM,EAAAA,KAAKA,GAAA;AACV,IAAA,IAAI,IAAI,CAAC7H,QAAQ,KAAK,CAAC,EAAE;AACvB,MAAA,IAAI,CAACpE,IAAI,CAACtC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAACwG,IAAI,GAAG,IAAI,CAACC,EAAE,IAAI,CAAC;AAC5C,IAAA,CAAC,MAAM;AACL,MAAA,KAAK,IAAIjE,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAG,IAAI,CAACkE,QAAQ,EAAElE,CAAC,EAAE,EAAE;AACtC,QAAA,IAAI,CAACF,IAAI,CAACtC,CAAC,CAACwC,CAAC,CAAC,GAAG,IAAI,CAACgE,IAAI,GAAGhE,CAAC,GAAG,IAAI,CAACmE,QAAQ;AAChD,MAAA;AACF,IAAA;AACA,IAAA,OAAO,IAAI;AACb,EAAA;;;ACvOF,MAAM+I,MAAM,GAAa,CAAC,GAAG,EAAE,GAAG,CAAC;AAGnC,MAAMC,eAAe,GAAsB,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;AAE1D;;;;;;AAMA,MAAMC,kBAAkB,GAAGA,CAAC5N,KAAmB,EAAEhB,KAAwB,KAAI;AAC3E,EAAA,MAAM6O,SAAS,GAAGrK,cAAc,CAACxE,KAAK,CAAC;AACvC,EAAA,KAAK,MAAM8O,GAAG,IAAIJ,MAAM,EAAE;AACxBG,IAAAA,SAAS,CAACC,GAAG,CAAC,GAAG9N,KAAK,CAACjB,WAAW,CAAC8O,SAAS,CAACC,GAAG,CAAC,CAAC;AACpD,EAAA;AACA,EAAA,OAAOD,SAAS;AAClB,CAAC;AA+EK,MAAOE,mBAAmB,CAAA;EACtBvJ,IAAI;EACJC,EAAE;EACFC,QAAQ;EACTC,QAAQ;EACPrE,IAAI;EACJ+L,aAAa;EACbrM,KAAK;EACL4E,YAAY;EAEpBpG,WAAAA,CAAmBC,OAAA,GAAuB,EAAE,EAAA;IAC1C,MAAM;MACJmG,YAAY,GAAGA,MAAM,CAAC;AACtB5E,MAAAA,KAAK,GAAG;AACNoE,QAAAA,IAAI,EAAE;;AACP,KACF,GAAG3F,OAAO;IACX,IAAI;AAAE+F,MAAAA,IAAI,GAAG,CAAC;AAAEC,MAAAA,EAAE,GAAG,GAAG;AAAEC,MAAAA,QAAQ,GAAG;AAAI,KAAE,GAAGjG,OAAO;AAErD+F,IAAAA,IAAI,GAAGhB,cAAc,CAACgB,IAAI,CAAC;AAC3BC,IAAAA,EAAE,GAAGjB,cAAc,CAACiB,EAAE,CAAC;AACvBC,IAAAA,QAAQ,GAAGlB,cAAc,CAACkB,QAAQ,CAAC;AAEnC,IAAA,KAAK,MAAMf,IAAI,IAAI+J,MAAM,EAAE;MACzB7I,YAAY,CAACL,IAAI,CAACb,IAAI,CAAC,EAAE,CAAA,KAAA,EAAQA,IAAI,CAAA,CAAE,CAAC;MACxCkB,YAAY,CAACJ,EAAE,CAACd,IAAI,CAAC,EAAE,CAAA,GAAA,EAAMA,IAAI,CAAA,CAAE,CAAC;MACpCmB,aAAa,CAACJ,QAAQ,CAACf,IAAI,CAAC,EAAE,CAAA,SAAA,EAAYA,IAAI,CAAA,CAAE,CAAC;AACnD,IAAA;IAEA,IAAI,CAACa,IAAI,GAAGA,IAAI;IAChB,IAAI,CAACC,EAAE,GAAGA,EAAE;IACZ,IAAI,CAACC,QAAQ,GAAGA,QAAQ;IACxB,IAAI,CAACC,QAAQ,GAAGqJ,gBAAgB,CAACxJ,IAAI,EAAEC,EAAE,EAAEC,QAAQ,CAAC;IAEpD,IAAI,CAACE,YAAY,GAAGA,YAAY;AAChC,IAAA,IAAI,CAACyH,aAAa,GAAGhG,MAAM,CAACiG,gBAAgB;AAE5C,IAAA,MAAM2B,cAAc,GAAG5J,UAAU,CAACrE,KAAK,CAAC;IACxC,IAAI,CAACA,KAAK,GAAGiO,cAAc;IAE3B,IAAI,CAAC3N,IAAI,GAAG;AACVtC,MAAAA,CAAC,EAAE,IAAIuC,YAAY,CAACmE,QAAQ,CAAC1G,CAAC,CAAC;AAC/BiF,MAAAA,CAAC,EAAE,IAAI1C,YAAY,CAACmE,QAAQ,CAACzB,CAAC,CAAC;MAC/BiL,CAAC,EAAE7C,iBAAiB,CAAC;AACnBE,QAAAA,MAAM,EAAE,IAAI,CAAC7G,QAAQ,CAACzB,CAAC;AACvBuI,QAAAA,SAAS,EAAE,IAAI,CAAC9G,QAAQ,CAAC1G;AAC1B,OAAA;AACF,KAAA;AAED,IAAA,KAAK,MAAM2F,IAAI,IAAI+J,MAAM,EAAE;AACzB,MAAA,IAAI,IAAI,CAACjJ,EAAE,CAACd,IAAI,CAAC,IAAI,IAAI,CAACa,IAAI,CAACb,IAAI,CAAC,EAAE;AACpC,QAAA,MAAM,IAAIoB,UAAU,CAAC,oCAAoC,CAAC;AAC5D,MAAA;AACF,IAAA;AAEA,IAAA,IAAI,OAAO,IAAI,CAACH,YAAY,KAAK,UAAU,EAAE;AAC3C,MAAA,MAAM,IAAII,SAAS,CAAC,wCAAwC,CAAC;AAC/D,IAAA;IAEA,IAAI,CAACuH,KAAK,EAAE;AACd,EAAA;AAEA;;;;;;EAMOM,QAAQA,CAACJ,KAA8B,EAAEhO,OAA0B,EAAA;IACxE,IACE,CAACqF,KAAK,CAAC0B,OAAO,CAACiH,KAAK,CAAC,KACpB,OAAOA,KAAK,KAAK,QAAQ,IACxBA,KAAK,CAACzO,CAAC,KAAKiG,SAAS,IACrBwI,KAAK,CAACxJ,CAAC,KAAKgB,SAAS,IACrB,CAACH,KAAK,CAAC0B,OAAO,CAACiH,KAAK,CAACzO,CAAC,CAAC,IACvB,CAAC8F,KAAK,CAAC0B,OAAO,CAACiH,KAAK,CAACxJ,CAAC,CAAC,IACvBwJ,KAAK,CAACzO,CAAC,CAACiC,MAAM,KAAKwM,KAAK,CAACxJ,CAAC,CAAChD,MAAM,CAAC,EACpC;AACA,MAAA,MAAM,IAAI+E,SAAS,CACjB,4DAA4D,CAC7D;AACH,IAAA;AACA,IAAA,IAAIlB,KAAK,CAAC0B,OAAO,CAACiH,KAAK,CAAC,EAAE;AACxB,MAAA,KAAK,MAAMvH,IAAI,IAAIuH,KAAK,EAAE;AACxB,QAAA,IAAI,CAACM,OAAO,CAAC7H,IAAI,EAAEzG,OAAO,CAAC;AAC7B,MAAA;AACF,IAAA,CAAC,MAAM;AACL,MAAA,IACE,CAACqF,KAAK,CAAC0B,OAAO,CAACiH,KAAK,CAACzO,CAAC,CAAC,IACvB,CAAC8F,KAAK,CAAC0B,OAAO,CAACiH,KAAK,CAACxJ,CAAC,CAAC,IACvB,CAACa,KAAK,CAAC0B,OAAO,CAACiH,KAAK,CAACyB,CAAC,CAAC,EACvB;AACA,QAAA,MAAM,IAAIlJ,SAAS,CAAC,4BAA4B,CAAC;AACnD,MAAA;AACA,MAAA,MAAMmJ,OAAO,GAAG1B,KAAK,CAACzO,CAAC,CAACiC,MAAM;AAC9B,MAAA,IAAIwM,KAAK,CAACxJ,CAAC,CAAChD,MAAM,KAAKkO,OAAO,IAAI1B,KAAK,CAACyB,CAAC,CAACjO,MAAM,KAAKkO,OAAO,EAAE;AAC5D,QAAA,MAAM,IAAIlN,KAAK,CAAC,qCAAqC,CAAC;AACxD,MAAA;MACA,KAAK,IAAIT,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAG2N,OAAO,EAAE3N,CAAC,EAAE,EAAE;QAChC,IAAI,CAACuM,OAAO,CAAC,CAACN,KAAK,CAACzO,CAAC,CAACwC,CAAC,CAAC,EAAEiM,KAAK,CAACxJ,CAAC,CAACzC,CAAC,CAAC,EAAEiM,KAAK,CAACyB,CAAC,CAAC1N,CAAC,CAAC,CAAC,EAAE/B,OAAO,CAAC;AAC7D,MAAA;AACF,IAAA;AAEA,IAAA,OAAO,IAAI;AACb,EAAA;AAEA;;;;;;AAMOsO,EAAAA,OAAOA,CAAC7H,IAAY,EAAEzG,OAAA,GAA4B,EAAE,EAAA;AACzD,IAAA,IAAIqF,KAAK,CAAC0B,OAAO,CAACN,IAAI,CAAC,IAAIA,IAAI,CAACjF,MAAM,GAAG,CAAC,EAAE;AAC1C,MAAA,MAAM,IAAIgB,KAAK,CACb,oFAAoF,CACrF;AACH,IAAA;IAEA,IACE,CAAC6C,KAAK,CAAC0B,OAAO,CAACN,IAAI,CAAC,IACpByI,eAAe,CAACS,IAAI,CAAEC,CAAC,IAAKnJ,IAAI,CAACmJ,CAAC,CAAC,KAAKpK,SAAS,CAAC,EAClD;AACA,MAAA,MAAM,IAAIhD,KAAK,CACb,oFAAoF,CACrF;AACH,IAAA;AAEA,IAAA,IAAIqN,SAAS;AACb,IAAA,IAAIC,SAAS;AACb,IAAA,IAAInJ,SAAS;AACb,IAAA,IAAIC,QAAQ;AACZ,IAAA,IAAIC,SAAS;AACb,IAAA,IAAIC,gBAAgB;AACpB,IAAA,IAAIzB,KAAK,CAAC0B,OAAO,CAACN,IAAI,CAAC,EAAE;MACvB,CAACoJ,SAAS,EAAEC,SAAS,EAAEnJ,SAAS,EAAEC,QAAQ,EAAEE,gBAAgB,CAAC,GAAGL,IAAI;AACtE,IAAA,CAAC,MAAM;MACLoJ,SAAS,GAAGpJ,IAAI,CAAClH,CAAC;MAClBuQ,SAAS,GAAGrJ,IAAI,CAACjC,CAAC;MAClBmC,SAAS,GAAGF,IAAI,CAACgJ,CAAC;MAClB7I,QAAQ,GAAGH,IAAI,CAACxG,IAAI;MACpB4G,SAAS,GAAGJ,IAAI,CAAClG,KAAK;MACtBuG,gBAAgB,GAAGL,IAAI,CAAClF,KAAK;AAC/B,IAAA;AAEA,IAAA,MAAMwO,QAAQ,GAAa;AAAExQ,MAAAA,CAAC,EAAEsQ,SAAS;AAAErL,MAAAA,CAAC,EAAEsL;KAAW;IACzD,IAAInJ,SAAS,GAAG,IAAI,CAACiH,aAAa,EAAE,IAAI,CAACA,aAAa,GAAGjH,SAAS;IAElE,MAAM;AAAEpG,MAAAA;AAAK,KAAE,GAAGP,OAAO;IACzB,IAAI;AAAEuB,MAAAA,KAAK,EAAEyF;AAAY,KAAE,GAAGhH,OAAO;AAErC,IAAA,IAAI8G,gBAAgB,EAAE;MACpBE,YAAY,GAAGA,YAAY,GACvB;AAAE,QAAA,GAAGA,YAAY;QAAE,GAAGF;AAAgB,OAAE,GACxCA,gBAAgB;AACtB,IAAA;AAEA,IAAA,MAAMvF,KAAK,GAAGyF,YAAY,GACtBpB,UAAU,CAACoB,YAAY,CAAC,GACvBM,MAAM,CAACC,MAAM,CACZD,MAAM,CAACE,MAAM,CAACF,MAAM,CAACG,cAAc,CAAC,IAAI,CAAClG,KAAK,CAAC,CAAC,EAChDyO,eAAe,CAAC,IAAI,CAACzO,KAAK,CAAC,CACR;IAEzB,IAAI;AACFtB,MAAAA,IAAI,GAAG2G,QAAQ,KAAKpB,SAAS,GACzBoB,QAAQ,GACRC,SAAS,GACPsI,kBAAkB,CAAC5N,KAAK,EAAEsF,SAAS,CAAC,GACpCtG,KAAK,GACH4O,kBAAkB,CAAC5N,KAAK,EAAEhB,KAAK,CAAC,GAChC,IAAI,CAAC4F,YAAY,CAAC0J,SAAS,EAAEC,SAAS;AAAC,KAChD,GAAG9P,OAAO;AAEXC,IAAAA,IAAI,GAAG8E,cAAc,CAAC9E,IAAI,CAAC;AAE3B,IAAA,IAAIwB,MAAM,GACRzB,OAAO,CAACyB,MAAM,KAAK+D,SAAS,GAAGjE,KAAK,CAACT,SAAS,EAAE,GAAGd,OAAO,CAACyB,MAAM;AAEnEA,IAAAA,MAAM,GAAGsD,cAAc,CAACtD,MAAM,CAAC;AAE/B,IAAA,MAAMgN,UAAU,GAAa;AAAElP,MAAAA,CAAC,EAAE,CAAC;AAAEiF,MAAAA,CAAC,EAAE;KAAG;AAC3C,IAAA,MAAMmK,SAAS,GAAa;AAAEpP,MAAAA,CAAC,EAAE,CAAC;AAAEiF,MAAAA,CAAC,EAAE;KAAG;AAC1C,IAAA,KAAK,MAAMU,IAAI,IAAI+J,MAAM,EAAE;AACzB,MAAA,MAAMgB,KAAK,GAAGF,QAAQ,CAAC7K,IAAI,CAAC,GAAIjF,IAAI,CAACiF,IAAI,CAAC,GAAG,CAAC,GAAIzD,MAAM,CAACyD,IAAI,CAAC;AAC9D,MAAA,MAAMgL,IAAI,GAAGH,QAAQ,CAAC7K,IAAI,CAAC,GAAIjF,IAAI,CAACiF,IAAI,CAAC,GAAG,CAAC,GAAIzD,MAAM,CAACyD,IAAI,CAAC;AAC7DuJ,MAAAA,UAAU,CAACvJ,IAAI,CAAC,GAAGpG,IAAI,CAACwO,GAAG,CACzB,CAAC,EACDxO,IAAI,CAAC4P,KAAK,CAAC,CAACuB,KAAK,GAAG,IAAI,CAAClK,IAAI,CAACb,IAAI,CAAC,IAAI,IAAI,CAACgB,QAAQ,CAAChB,IAAI,CAAC,CAAC,CAC5D;AACDyJ,MAAAA,SAAS,CAACzJ,IAAI,CAAC,GAAGpG,IAAI,CAAC4C,GAAG,CACxB,IAAI,CAACuE,QAAQ,CAACf,IAAI,CAAC,EACnBpG,IAAI,CAAC6C,IAAI,CAAC,CAACuO,IAAI,GAAG,IAAI,CAACnK,IAAI,CAACb,IAAI,CAAC,IAAI,IAAI,CAACgB,QAAQ,CAAChB,IAAI,CAAC,CAAC,CAC1D;AACH,IAAA;IAEA3D,KAAK,CAACtB,IAAI,GAAGA,IAAI;AACjB,IAAA,KAAK,IAAIkQ,MAAM,GAAG1B,UAAU,CAAClP,CAAC,EAAE4Q,MAAM,GAAGxB,SAAS,CAACpP,CAAC,EAAE4Q,MAAM,EAAE,EAAE;AAC9D,MAAA,KAAK,IAAIC,MAAM,GAAG3B,UAAU,CAACjK,CAAC,EAAE4L,MAAM,GAAGzB,SAAS,CAACnK,CAAC,EAAE4L,MAAM,EAAE,EAAE;AAC9D,QAAA,MAAM1I,KAAK,GACTf,SAAS,GACTpF,KAAK,CAACf,GAAG,CACP,IAAI,CAACqB,IAAI,CAACtC,CAAC,CAAC4Q,MAAM,CAAC,GAAGJ,QAAQ,CAACxQ,CAAC,EAChC,IAAI,CAACsC,IAAI,CAAC2C,CAAC,CAAC4L,MAAM,CAAC,GAAGL,QAAQ,CAACvL,CAAC,CACjC;QACH,IAAI1F,IAAI,CAACqK,GAAG,CAACzB,KAAK,CAAC,GAAG,IAAI,EAAE;UAC1B,IAAI,CAAC7F,IAAI,CAAC4N,CAAC,CAACW,MAAM,CAAC,CAACD,MAAM,CAAC,IAAIzI,KAAK;AACtC,QAAA;AACF,MAAA;AACF,IAAA;AAEA,IAAA,OAAO,IAAI;AACb,EAAA;AAEA;;;;;EAKO2G,WAAWA,CAACrO,OAAA,GAA0C,EAAE,EAAA;AAC7D,IAAA,IAAI,OAAOA,OAAO,KAAK,SAAS,EAAE;AAChCA,MAAAA,OAAO,GAAG;AAAE8O,QAAAA,IAAI,EAAE9O;OAAS;AAC7B,IAAA;IACA,MAAM;AAAE8O,MAAAA,IAAI,GAAG;AAAI,KAAE,GAAG9O,OAAO;IAC/B,MAAMqQ,OAAO,GAAGhD,aAAa,CAAC,IAAI,CAACxL,IAAI,CAAC4N,CAAC,CAAC;IAE1C,OAAO;AACLa,MAAAA,IAAI,EAAE,IAAI,CAACvK,IAAI,CAACxG,CAAC;AACjBgR,MAAAA,IAAI,EAAE,IAAI,CAACvK,EAAE,CAACzG,CAAC;AACfiR,MAAAA,IAAI,EAAE,IAAI,CAACxK,EAAE,CAACxB,CAAC;AACfiM,MAAAA,IAAI,EAAE,IAAI,CAAC1K,IAAI,CAACvB,CAAC;MACjBkM,IAAI,EAAEL,OAAO,CAAC3O,GAAG;MACjBiP,IAAI,EAAEN,OAAO,CAAC/C,GAAG;AACjBmC,MAAAA,CAAC,EAAEX,IAAI,GAAG,IAAI,CAACjN,IAAI,CAAC4N,CAAC,CAACT,KAAK,EAAE,GAAG,IAAI,CAACnN,IAAI,CAAC4N;AAC3C,KAAA;AACH,EAAA;AAEA;;;;AAIO3B,EAAAA,KAAKA,GAAA;AACV,IAAA,MAAM8C,QAAQ,GAAW,IAAI,CAAC/O,IAAI;AAElC,IAAA,KAAK,MAAMqD,IAAI,IAAI+J,MAAM,EAAE;AACzB,MAAA,KAAK,IAAIlN,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAG,IAAI,CAACkE,QAAQ,CAACf,IAAI,CAAC,EAAEnD,CAAC,EAAE,EAAE;QAC5C6O,QAAQ,CAAC1L,IAAI,CAAC,CAACnD,CAAC,CAAC,GAAG,IAAI,CAACgE,IAAI,CAACb,IAAI,CAAC,GAAGnD,CAAC,GAAG,IAAI,CAACmE,QAAQ,CAAChB,IAAI,CAAC;AAC/D,MAAA;AACF,IAAA;AACA,IAAA,KAAK,MAAM+H,GAAG,IAAI2D,QAAQ,CAACnB,CAAC,EAAE;AAC5B,MAAA,KAAK,IAAInK,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAG2H,GAAG,CAACzL,MAAM,EAAE8D,CAAC,EAAE,EAAE;AACnC2H,QAAAA,GAAG,CAAC3H,CAAC,CAAC,GAAG,CAAC;AACZ,MAAA;AACF,IAAA;AACA,IAAA,OAAO,IAAI;AACb,EAAA;;AAGF;;;;;;AAMM,SAAUuL,kBAAkBA,CAChC7C,KAA8B,EAC9BhO,OAAA,GAAqC,EAAE,EAAA;EAEvC,MAAM;AAAEiM,IAAAA,SAAS,EAAE6E,gBAAgB;AAAE9C,IAAAA,KAAK,EAAE+C;AAAe,GAAE,GAAG/Q,OAAO;AAEvE,EAAA,MAAMiM,SAAS,GAAG,IAAIqD,mBAAmB,CAACwB,gBAAgB,CAAC;AAE3D7E,EAAAA,SAAS,CAACmC,QAAQ,CAACJ,KAAK,EAAE+C,eAAe,CAAC;EAC1C,OAAO9E,SAAS,CAACoC,WAAW,EAAE;AAChC;AAEA;;;;;AAKA,SAAStJ,cAAcA,CAACQ,KAAwB,EAAA;AAC9C,EAAA,OAAO,OAAOA,KAAK,KAAK,QAAQ,GAAG;AAAEhG,IAAAA,CAAC,EAAEgG,KAAK;AAAEf,IAAAA,CAAC,EAAEe;AAAK,GAAE,GAAG;IAAE,GAAGA;GAAO;AAC1E;AAEA;;;;;;;AAOA,SAASgK,gBAAgBA,CAACxJ,IAAc,EAAEC,EAAY,EAAEC,QAAkB,EAAA;EACxE,OAAO;AACL1G,IAAAA,CAAC,EAAE,CAACyG,EAAE,CAACzG,CAAC,GAAGwG,IAAI,CAACxG,CAAC,KAAK0G,QAAQ,CAAC1G,CAAC,GAAG,CAAC,CAAC;AACrCiF,IAAAA,CAAC,EAAE,CAACwB,EAAE,CAACxB,CAAC,GAAGuB,IAAI,CAACvB,CAAC,KAAKyB,QAAQ,CAACzB,CAAC,GAAG,CAAC;AACrC,GAAA;AACH;AAEA;;;;;;AAMA,SAAS6B,aAAaA,CAACqB,KAAa,EAAEC,IAAY,EAAA;AAChD,EAAA,IAAI,CAACC,MAAM,CAACC,SAAS,CAACH,KAAK,CAAC,EAAE;AAC5B,IAAA,MAAM,IAAInB,SAAS,CAAC,CAAA,EAAGoB,IAAI,4BAA4B,CAAC;AAC1D,EAAA;AACF;AAEA;;;;;;AAMA,SAASvB,YAAYA,CAACsB,KAAa,EAAEC,IAAY,EAAA;AAC/C,EAAA,IAAI,CAACC,MAAM,CAACE,QAAQ,CAACJ,KAAK,CAAC,EAAE;AAC3B,IAAA,MAAM,IAAInB,SAAS,CAAC,CAAA,EAAGoB,IAAI,0BAA0B,CAAC;AACxD,EAAA;AACF;;ACpaA;;;;;;AAMM,SAAUoG,gBAAgBA,CAC9BC,KAA4B,EAC5BhO,OAAA,GAAmC,EAAE,EAAA;EAErC,MAAM;IAAEiM,SAAS;IAAE,GAAG+E;AAAI,GAAE,GAAGhR,OAAO;EACtC,OAAO,IAAI2N,iBAAiB,CAAC1B,SAAS,CAAC,CAAC8B,gBAAgB,CAACC,KAAK,EAAEgD,IAAI,CAAC;AACvE;;ACmBM,MAAOC,uBAAwB,SAAQnL,qBAAqB,CAAA;EAChE/F,WAAAA,CAAmBC,OAAA,GAAuB,EAAE,EAAA;IAC1C,KAAK,CAACA,OAAO,CAAC;AAChB,EAAA;AAEA;;;;;;;;;AASOkR,EAAAA,sBAAsBA,CAC3BlD,KAA4B,EAC5BhO,OAAA,GAAiC,EAAE,EAAA;IAEnC,IAAI,OAAO,IAAIA,OAAO,EAAE;AACtB,MAAA,MAAM,IAAIwC,KAAK,CAAC,uDAAuD,CAAC;AAC1E,IAAA;IACA,MAAM;MAAEyL,QAAQ;AAAEE,MAAAA,WAAW,GAAG,EAAE;AAAED,MAAAA,SAAS,GAAG;AAAI,KAAE,GAAGlO,OAAO;IAEhE,MAAMmR,SAAS,GAAa9L,KAAK,CAAC0B,OAAO,CAACiH,KAAK,CAAC,GAC5CA,KAAK,GACL3I,KAAK,CAACU,IAAI,CAACiI,KAAK,CAACzO,CAAC,EAAE,CAACA,CAAC,EAAEwC,CAAC,KACvBiM,KAAK,CAAC/N,IAAI,KAAKuF,SAAS,GACnB,CAACjG,CAAC,EAAEyO,KAAK,CAACxJ,CAAC,CAACzC,CAAC,CAAC,EAAEiM,KAAK,CAAC/N,IAAI,CAAC8B,CAAC,CAAC,CAAY,GACzC,CAACxC,CAAC,EAAEyO,KAAK,CAACxJ,CAAC,CAACzC,CAAC,CAAC,CAAY,CAChC;AAEL,IAAA,MAAMqP,aAAa,GAAyBD,SAAS,CAClDE,GAAG,CAAE5K,IAAI,IAAI;MACZ,MAAM;QAAEC,EAAE;QAAEC,SAAS;QAAES,SAAS;AAAEC,QAAAA;OAAY,GAAG,IAAI,CAACb,WAAW,CAC/DC,IAAI,EACJ0H,WAAW,CACZ;MACD,OAAO;QACLzH,EAAE;QACFC,SAAS;QACTS,SAAS;QACTC,UAAU;QACViK,KAAK,EAAE5K,EAAE,GAAG6K,gBAAgB,CAACnK,SAAS,EAAE8G,SAAS,CAAC;AAClDsD,QAAAA,GAAG,EAAE9K,EAAE,GAAG6K,gBAAgB,CAAClK,UAAU,EAAE6G,SAAS;AACjD,OAAA;IACH,CAAC,CAAC,CACDuD,MAAM,CAAE9O,CAAC,IAAKA,CAAC,CAAC2O,KAAK,GAAG,IAAI,CAACtL,EAAE,IAAIrD,CAAC,CAAC6O,GAAG,GAAG,IAAI,CAACzL,IAAI,CAAC;AAExD,IAAA,IAAIqL,aAAa,CAAC5P,MAAM,KAAK,CAAC,EAAE;MAC9B,OAAO;AACLjC,QAAAA,CAAC,EAAEuC,YAAY,CAACiE,IAAI,CAAC,CAAC,IAAI,CAACA,IAAI,EAAE,IAAI,CAACC,EAAE,CAAC,CAAC;QAC1CxB,CAAC,EAAEyJ,QAAQ,GACPnM,YAAY,CAACiE,IAAI,CAAC,CAACkI,QAAQ,CAAC,IAAI,CAAClI,IAAI,CAAC,EAAEkI,QAAQ,CAAC,IAAI,CAACjI,EAAE,CAAC,CAAC,CAAC,GAC3D,IAAIlE,YAAY,CAAC,CAAC;AACvB,OAAA;AACH,IAAA;AAEA,IAAA,KAAK,MAAM2E,IAAI,IAAI2K,aAAa,EAAE;AAChC3K,MAAAA,IAAI,CAAC6K,KAAK,GAAGxS,IAAI,CAACwO,GAAG,CAAC,IAAI,CAACvH,IAAI,EAAEU,IAAI,CAAC6K,KAAK,CAAC;AAC5C7K,MAAAA,IAAI,CAAC+K,GAAG,GAAG1S,IAAI,CAAC4C,GAAG,CAAC,IAAI,CAACsE,EAAE,EAAES,IAAI,CAAC+K,GAAG,CAAC;AACxC,IAAA;AAEAJ,IAAAA,aAAa,CAACM,IAAI,CAAC,CAAClS,CAAC,EAAEmS,CAAC,KAAKnS,CAAC,CAAC8R,KAAK,GAAGK,CAAC,CAACL,KAAK,CAAC;IAE/C,MAAMM,eAAe,GAAqB,EAAE;AAC5C,IAAA,KAAK,MAAMnL,IAAI,IAAI2K,aAAa,EAAE;MAChC,MAAMlB,IAAI,GAAG0B,eAAe,CAACC,EAAE,CAAC,EAAE,CAAC;MACnC,IAAI3B,IAAI,KAAK1K,SAAS,IAAIiB,IAAI,CAAC6K,KAAK,IAAIpB,IAAI,CAACsB,GAAG,EAAE;AAChDtB,QAAAA,IAAI,CAACsB,GAAG,GAAG1S,IAAI,CAACwO,GAAG,CAAC4C,IAAI,CAACsB,GAAG,EAAE/K,IAAI,CAAC+K,GAAG,CAAC;AACvCtB,QAAAA,IAAI,CAAClC,KAAK,CAACd,IAAI,CAACzG,IAAI,CAAC;AACvB,MAAA,CAAC,MAAM;QACLmL,eAAe,CAAC1E,IAAI,CAAC;UACnBoE,KAAK,EAAE7K,IAAI,CAAC6K,KAAK;UACjBE,GAAG,EAAE/K,IAAI,CAAC+K,GAAG;UACbxD,KAAK,EAAE,CAACvH,IAAI;SACb,CAAC;AACJ,MAAA;AACF,IAAA;AAEA,IAAA,MAAMqL,OAAO,GAAa,CAAC,IAAI,CAAC/L,IAAI,CAAC;AACrC,IAAA,MAAMgM,OAAO,GAAa,CAAC,CAAC,CAAC;AAC7B;AACA;IACA,IAAIC,gBAAgB,GAAG,CAAC;AAExB,IAAA,KAAK,MAAM9L,QAAQ,IAAI0L,eAAe,EAAE;MACtC,MAAMK,UAAU,GAAGnT,IAAI,CAACwO,GAAG,CACzB,CAAC,EACDxO,IAAI,CAAC4P,KAAK,CAAC,CAACxI,QAAQ,CAACoL,KAAK,GAAG,IAAI,CAACvL,IAAI,IAAI,IAAI,CAACG,QAAQ,CAAC,CACzD;AACD,MAAA,MAAMgM,SAAS,GAAGpT,IAAI,CAAC4C,GAAG,CACxB,IAAI,CAACuE,QAAQ,GAAG,CAAC,EACjBnH,IAAI,CAAC6C,IAAI,CAAC,CAACuE,QAAQ,CAACsL,GAAG,GAAG,IAAI,CAACzL,IAAI,IAAI,IAAI,CAACG,QAAQ,CAAC,CACtD;AAED,MAAA,MAAMiM,WAAW,GAAGF,UAAU,GAAG,CAAC;AAClC,MAAA,IAAIE,WAAW,IAAI,CAAC,IAAIA,WAAW,GAAGH,gBAAgB,EAAE;AACtDF,QAAAA,OAAO,CAAC5E,IAAI,CAAC,IAAI,CAACnH,IAAI,GAAGoM,WAAW,GAAG,IAAI,CAACjM,QAAQ,CAAC;AACrD6L,QAAAA,OAAO,CAAC7E,IAAI,CAAC,CAAC,CAAC;AACf8E,QAAAA,gBAAgB,GAAGG,WAAW;AAChC,MAAA;MAEA,KAAK,IAAIpQ,CAAC,GAAGkQ,UAAU,EAAElQ,CAAC,IAAImQ,SAAS,EAAEnQ,CAAC,EAAE,EAAE;QAC5C,MAAMxC,CAAC,GAAG,IAAI,CAACwG,IAAI,GAAGhE,CAAC,GAAG,IAAI,CAACmE,QAAQ;QACvC,IAAI1B,CAAC,GAAG,CAAC;AACT,QAAA,KAAK,MAAMiC,IAAI,IAAIP,QAAQ,CAAC8H,KAAK,EAAE;AACjC,UAAA,MAAMzM,KAAK,GAAGhC,CAAC,GAAGkH,IAAI,CAACC,EAAE,GAAGD,IAAI,CAACW,SAAS,GAAGX,IAAI,CAACY,UAAU;AAC5D7C,UAAAA,CAAC,IAAIiC,IAAI,CAACE,SAAS,GAAGpF,KAAK,CAACf,GAAG,CAACjB,CAAC,GAAGkH,IAAI,CAACC,EAAE,CAAC;AAC9C,QAAA;AACAoL,QAAAA,OAAO,CAAC5E,IAAI,CAAC3N,CAAC,CAAC;AACfwS,QAAAA,OAAO,CAAC7E,IAAI,CAAC1I,CAAC,CAAC;AACfwN,QAAAA,gBAAgB,GAAGjQ,CAAC;AACtB,MAAA;AAEA,MAAA,MAAMqQ,UAAU,GAAGF,SAAS,GAAG,CAAC;AAChC,MAAA,IAAIE,UAAU,GAAG,IAAI,CAACnM,QAAQ,EAAE;AAC9B6L,QAAAA,OAAO,CAAC5E,IAAI,CAAC,IAAI,CAACnH,IAAI,GAAGqM,UAAU,GAAG,IAAI,CAAClM,QAAQ,CAAC;AACpD6L,QAAAA,OAAO,CAAC7E,IAAI,CAAC,CAAC,CAAC;AACf8E,QAAAA,gBAAgB,GAAGI,UAAU;AAC/B,MAAA;AACF,IAAA;IAEA,IAAIN,OAAO,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC/L,IAAI,EAAE;AAC5B+L,MAAAA,OAAO,CAACO,OAAO,CAAC,IAAI,CAACtM,IAAI,CAAC;AAC1BgM,MAAAA,OAAO,CAACM,OAAO,CAAC,CAAC,CAAC;AACpB,IAAA;AACA,IAAA,IAAIP,OAAO,CAACA,OAAO,CAACtQ,MAAM,GAAG,CAAC,CAAC,KAAK,IAAI,CAACwE,EAAE,EAAE;AAC3C8L,MAAAA,OAAO,CAAC5E,IAAI,CAAC,IAAI,CAAClH,EAAE,CAAC;AACrB+L,MAAAA,OAAO,CAAC7E,IAAI,CAAC,CAAC,CAAC;AACjB,IAAA;AAEA,IAAA,IAAIe,QAAQ,EAAE;AACZ,MAAA,KAAK,IAAIlM,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGgQ,OAAO,CAACvQ,MAAM,EAAEO,CAAC,EAAE,EAAE;QACvCgQ,OAAO,CAAChQ,CAAC,CAAC,IAAIkM,QAAQ,CAAC6D,OAAO,CAAC/P,CAAC,CAAC,CAAC;AACpC,MAAA;AACF,IAAA;IAEA,OAAO;AACLxC,MAAAA,CAAC,EAAEuC,YAAY,CAACiE,IAAI,CAAC+L,OAAO,CAAC;AAC7BtN,MAAAA,CAAC,EAAE1C,YAAY,CAACiE,IAAI,CAACgM,OAAO;AAC7B,KAAA;AACH,EAAA;;AAGF;;;;AAIA,SAASR,gBAAgBA,CAAChQ,KAAsB,EAAE2M,SAAiB,EAAA;AACjE,EAAA,IAAIA,SAAS,IAAI,CAAC,EAAE,OAAOoE,QAAQ;EACnC,IAAI/Q,KAAK,CAACf,GAAG,CAAC,CAAC,CAAC,IAAI0N,SAAS,EAAE,OAAO,CAAC;AACvC,EAAA,IAAIjF,IAAI,GAAG1H,KAAK,CAACtB,IAAI;EACrB,OAAOsB,KAAK,CAACf,GAAG,CAACyI,IAAI,CAAC,GAAGiF,SAAS,EAAE;AAClCjF,IAAAA,IAAI,IAAI,CAAC;AACX,EAAA;EACA,IAAID,GAAG,GAAG,CAAC;EACX,KAAK,IAAIjH,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAG,EAAE,EAAEA,CAAC,EAAE,EAAE;AAC3B,IAAA,MAAMwQ,GAAG,GAAG,CAACvJ,GAAG,GAAGC,IAAI,IAAI,CAAC;IAC5B,IAAI1H,KAAK,CAACf,GAAG,CAAC+R,GAAG,CAAC,GAAGrE,SAAS,EAAE;AAC9BlF,MAAAA,GAAG,GAAGuJ,GAAG;AACX,IAAA,CAAC,MAAM;AACLtJ,MAAAA,IAAI,GAAGsJ,GAAG;AACZ,IAAA;AACF,EAAA;AACA,EAAA,OAAO,CAACvJ,GAAG,GAAGC,IAAI,IAAI,CAAC;AACzB;;ACnMA;;;;;;;;;AASM,SAAUiI,sBAAsBA,CACpClD,KAA4B,EAC5BhO,OAAA,GAAyC,EAAE,EAAA;EAE3C,MAAM;IAAEiM,SAAS;IAAE,GAAG+E;AAAI,GAAE,GAAGhR,OAAO;EACtC,OAAO,IAAIiR,uBAAuB,CAAChF,SAAS,CAAC,CAACiF,sBAAsB,CAClElD,KAAK,EACLgD,IAAI,CACL;AACH;;;;","x_google_ignoreList":[0,1,2,3,4,5,6,7,8,9,12,13,14,15,16,17,18,19,20,21,22,23]}