{"version":3,"file":"index.cjs","sources":["../src/index.ts"],"sourcesContent":["export interface IRequirement {\n    minLength?: number | IMessage;\n    maxLength?: number | IMessage;\n    uniqueLettersMinLength?: number | IMessage;\n    uppercaseLettersMinLength?: number | IMessage;\n    lowercaseLettersMinLength?: number | IMessage;\n    numbersMinLength?: number | IMessage;\n    symbolsMinLength?: number | IMessage;\n    include?: string[] | IMessage;\n    exclude?: string[] | IMessage;\n    blackList?: string[] | IMessage;\n    startsWith?: string | IMessage;\n    endsWith?: string | IMessage;\n    includeOne?: string[] | IMessage;\n}\n\nexport interface IMessage {\n    value: number | string | string[];\n    message: string;\n}\n\nexport interface IResult {\n    score: number;\n    status: string;\n    percent: number;\n    errors?: string | string[];\n}\n\nexport class PasswordMeter {\n    private uppercaseLetters = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ';\n    private lowercaseLetters = 'abcdefghijklmnopqrstuvwxyz';\n    private numbers = '1234567890';\n    constructor(public requirements?: IRequirement, public scoreRange?: any) {}\n\n    private startsWith(str: string, word: string): boolean {\n        return str.lastIndexOf(word, 0) === 0;\n    }\n\n    private endsWith(str: string, word: string): boolean {\n        return str.indexOf(word, str.length - word.length) !== -1;\n    }\n\n    private chunkString(str: string, len: number): string[] {\n        const _size = Math.ceil(str.length / len),\n            _ret = new Array(_size);\n        let _offset = 0;\n        for (let _i = 0; _i < _size; _i++) {\n            _offset = _i * len;\n            _ret[_i] = str.substring(_offset, _offset + len);\n        }\n        return _ret;\n    }\n    private getLength(text: string): number {\n        if (text) {\n            return text.length;\n        }\n        return 0;\n    }\n    private doesNotContains(text: string, list: string[]): boolean {\n        if (text) {\n            if (list) {\n                const doesnotContainsAll = list.every((x) => text.indexOf(x) == -1);\n                return doesnotContainsAll;\n            } else {\n                return true;\n            }\n        } else {\n            return true;\n        }\n    }\n    private contains(text: string, list: string[]): boolean {\n        if (text) {\n            if (list) {\n                const containsAll = list.every((x) => text.indexOf(x) >= 0);\n                return containsAll;\n            } else {\n                return false;\n            }\n        } else {\n            return false;\n        }\n    }\n    private containsOne(text: string, list: string[]): boolean {\n        if (text) {\n            if (list) {\n                const contains = list.some((x) => text.indexOf(x) >= 0);\n                return contains;\n            } else {\n                return false;\n            }\n        } else {\n            return false;\n        }\n    }\n\n    private isInBlackList(text: string, list: string[]): boolean {\n        if (text) {\n            if (list) {\n                for (let index = 0; index < list.length; index++) {\n                    if (text === list[index]) {\n                        return true;\n                    }\n                }\n                return false;\n            } else {\n                return false;\n            }\n        } else {\n            return false;\n        }\n    }\n\n    private between(x: number, min: number, max: number) {\n        return x >= min && x < max;\n    }\n\n    private isIMessage(arg: any): arg is IMessage {\n        const status = arg.message !== undefined;\n        return status;\n    }\n\n    private isNumber(text: string): boolean {\n        if (text) {\n            const pattern = /^\\d+$/;\n            return pattern.test(text);\n        }\n        return false;\n    }\n\n    private isLetter(text: string): boolean {\n        if (text) {\n            const pattern = /^[a-zA-Z]+$/;\n            return pattern.test(text);\n        }\n        return false;\n    }\n\n    private isUppercaseLetter(text: string): boolean {\n        if (text) {\n            const pattern = /^[A-Z]+$/;\n            return pattern.test(text);\n        }\n        return false;\n    }\n\n    private isLowercaseLetter(text: string): boolean {\n        if (text) {\n            const pattern = /^[a-z]+$/;\n            return pattern.test(text);\n        }\n        return false;\n    }\n\n    private isSymbol(text: string): boolean {\n        if (text) {\n            return !this.isNumber(text) && !this.isLetter(text);\n        }\n        return false;\n    }\n\n    private getSymbols(text: string): string | undefined {\n        let result = '';\n        if (text) {\n            for (let index = 0; index < text.length; index++) {\n                if (this.isSymbol(text[index])) result += text[index];\n            }\n        }\n        if (result.length === 0) return undefined;\n        return result;\n    }\n\n    private getLengthScore(text: string): number {\n        if (text) {\n            // +(n*9)\n            const ratio = 9;\n            return this.getLength(text) * ratio;\n        }\n        return 0;\n    }\n    private getUppercaseLettersScore(text: string): number {\n        if (text) {\n            // +((len-n)*2)\n            const ratio = 2;\n            let n = 0;\n            text.split('').forEach((value) => {\n                if (this.isUppercaseLetter(value)) {\n                    n++;\n                }\n            });\n            if (n == 0) {\n                return 0;\n            }\n            return (this.getLength(text) - n) * ratio;\n        }\n        return 0;\n    }\n    private getLowercaseLettersScore(text: string): number {\n        if (text) {\n            // +((len-n)*2)\n            const ratio = 2;\n            let n = 0;\n            text.split('').forEach((value) => {\n                if (this.isLowercaseLetter(value)) {\n                    n++;\n                }\n            });\n            if (n == 0) {\n                return 0;\n            }\n            return (this.getLength(text) - n) * ratio;\n        }\n        return 0;\n    }\n    private getNumbersScore(text: string): number {\n        if (text) {\n            // +((len-n)*4)\n            const ratio = 4;\n            let n = 0;\n            text.split('').forEach((value) => {\n                if (this.isNumber(value)) {\n                    n++;\n                }\n            });\n            if (n == 0) {\n                return 0;\n            }\n            return (this.getLength(text) - n) * ratio;\n        }\n        return 0;\n    }\n    private getSymbolsScore(text: string): number {\n        if (text) {\n            // +((len-n)*6)\n            const ratio = 6;\n            let n = 0;\n            text.split('').forEach((value) => {\n                if (this.isSymbol(value)) {\n                    n++;\n                }\n            });\n            if (n == 0) {\n                return 0;\n            }\n            return (this.getLength(text) - n) * ratio;\n        }\n        return 0;\n    }\n\n    private getLettersOnlyScore(text: string): number {\n        if (text) {\n            // -n\n            const ratio = -1;\n            if (this.isLetter(text)) {\n                return this.getLength(text) * ratio;\n            }\n        }\n        return 0;\n    }\n\n    private getNumbersOnlyScore(text: string): number {\n        if (text) {\n            // -n\n            const ratio = -1;\n            if (this.isNumber(text)) {\n                return this.getLength(text) * ratio;\n            }\n        }\n        return 0;\n    }\n\n    private getConsecutiveUppercaseLettersScore(text: string): number {\n        if (text) {\n            const pattern = /[A-Z]+/g;\n            const results = <RegExpMatchArray>text.match(pattern);\n            if (!results) {\n                return 0;\n            }\n            let score = 0;\n            const ratio = -2;\n            results.forEach((value) => {\n                if (this.getLength(value) > 1) {\n                    // -(n*2)\n                    score +=\n                        (this.getLength(value) - 1) *\n                        /*There is no problem with a character, but the remaining repetition creates the problem.*/\n                        ratio;\n                }\n            });\n            return score;\n        }\n        return 0;\n    }\n    private getConsecutiveLowercaseLettersScore(text: string): number {\n        if (text) {\n            const pattern = /[a-z]+/g;\n            const results = <RegExpMatchArray>text.match(pattern);\n            if (!results) {\n                return 0;\n            }\n            let score = 0;\n            const ratio = -2;\n            results.forEach((value) => {\n                if (this.getLength(value) > 1) {\n                    // -(n*2)\n                    score +=\n                        (this.getLength(value) - 1) *\n                        /*There is no problem with a character, but the remaining repetition creates the problem.*/\n                        ratio;\n                }\n            });\n            return score;\n        }\n        return 0;\n    }\n    private getConsecutiveNumbersScore(text: string): number {\n        if (text) {\n            const pattern = /[0-9]+/g;\n            const results = <RegExpMatchArray>text.match(pattern);\n            if (!results) {\n                return 0;\n            }\n            let score = 0;\n            const ratio = -2;\n            results.forEach((value) => {\n                if (this.getLength(value) > 1) {\n                    // -(n*2)\n                    score +=\n                        (this.getLength(value) - 1) *\n                        /*There is no problem with a character, but the remaining repetition creates the problem.*/\n                        ratio;\n                }\n            });\n            return score;\n        }\n        return 0;\n    }\n    private reverseString(str: string): string {\n        return str.split('').reverse().join('');\n    }\n\n    private sequentialBuilder(text: string, minChunk: number): string[] {\n        if (text) {\n            const list: string[] = [];\n            const len = text.split('').length - minChunk;\n            for (let i = 0; i < len; i++) {\n                for (let index = 0; index < len; index++) {\n                    const newText = text.substring(index, text.length);\n                    const arr = this.chunkString(newText, i + minChunk);\n                    for (let j = 0; j < arr.length; j++) {\n                        list.push(arr[j]);\n                        list.push(this.reverseString(arr[j]));\n                    }\n                }\n            }\n            const result = this.distinctArray(this.sortByLength(list, minChunk));\n            return result;\n        }\n        return [];\n    }\n\n    private distinctArray(arr: string[]): string[] {\n        const a = [];\n        for (let i = 0, l = arr.length; i < l; i++) if (a.indexOf(arr[i]) === -1 && arr[i] !== '') a.push(arr[i]);\n        return a;\n    }\n\n    private sortByLength(arr: string[], limit?: number): string[] {\n        arr.sort(function (a, b) {\n            return b.length - a.length;\n        });\n        const list: string[] = [];\n        for (let index = 0; index < arr.length; index++) {\n            if (limit) {\n                if (arr[index].length >= limit) {\n                    list.push(arr[index]);\n                }\n            } else {\n                list.push(arr[index]);\n            }\n        }\n        return list;\n    }\n\n    private getSequentialLettersScore(text: string): number {\n        const minChunk = 3;\n        if (text) {\n            const uStr = this.sequentialBuilder(this.uppercaseLetters, minChunk);\n            const lStr = this.sequentialBuilder(this.lowercaseLetters, minChunk);\n            let score = 0;\n            let uTxt = text;\n            let lTxt = text;\n            uStr.forEach((value) => {\n                if (uTxt.indexOf(value) != -1) {\n                    score += value.length - (minChunk - 1);\n                    uTxt = uTxt.replace(value, '');\n                }\n            });\n            lStr.forEach((value) => {\n                if (lTxt.indexOf(value) != -1) {\n                    score += value.length - (minChunk - 1);\n                    lTxt = lTxt.replace(value, '');\n                }\n            });\n            // -(n*3)\n            const ratio = -3;\n            return score * ratio;\n        }\n        return 0;\n    }\n\n    private getSequentialNumbersScore(text: string): number {\n        const minChunk = 3;\n        if (text) {\n            const num = this.sequentialBuilder(this.numbers, minChunk);\n            let score = 0;\n            let txt = text;\n            num.forEach((value) => {\n                if (txt.indexOf(value) != -1) {\n                    score += value.length - (minChunk - 1);\n                    txt = txt.replace(value, '');\n                }\n            });\n            // -(n*3)\n            const ratio = -3;\n            return score * ratio;\n        }\n        return 0;\n    }\n\n    private getSequentialSymbolsScore(text: string): number {\n        const minChunk = 3;\n        const sym = this.getSymbols(text);\n        if (text && sym) {\n            const num = this.sequentialBuilder(sym, minChunk);\n            let score = 0;\n            let txt = text;\n            num.forEach((value) => {\n                if (txt.indexOf(value) != -1) {\n                    score += value.length - (minChunk - 1);\n                    txt = txt.replace(value, '');\n                }\n            });\n            // -(n*3)\n            const ratio = -3;\n            return score * ratio;\n        }\n        return 0;\n    }\n\n    private getRepeatCharactersScore(text: string): number {\n        const pattern = /(.+)(?=.*?\\1)/g;\n        if (text) {\n            const matches = <RegExpMatchArray>text.match(pattern);\n            if (!matches) {\n                return 0;\n            }\n            const maxResultLength = this.sortByLength(matches)[0].length;\n            let ratio = 0;\n            if (maxResultLength >= 1 && maxResultLength <= 5) ratio = -8;\n            if (maxResultLength >= 6 && maxResultLength <= 10) ratio = -5;\n            if (maxResultLength >= 11) ratio = -2;\n            // (-X * maxRegexResultLength) + (textLength - (maxRegexResultLength *2))\n            const score = ratio * maxResultLength + (text.length - maxResultLength * 2);\n            return score;\n        }\n        return 0;\n    }\n\n    private getRequirementsScore(text: string, ignoreCase: boolean): string[] {\n        const req = this.requirements;\n        const errors: string[] = [];\n        if (req) {\n            const minLengthMsg = 'The minimum password length is ' + req.minLength + '.';\n            const maxLengthMsg = 'The maximum password length is ' + req.maxLength + '.';\n            const uppercaseLettersMinLengthMsg =\n                'You must use at least ' + req.uppercaseLettersMinLength + ' uppercase letter(s).';\n            const lowercaseLettersMinLengthMsg =\n                'You must use at least ' + req.lowercaseLettersMinLength + ' lowercase letter(s).';\n            const numbersMinLengthMsg = 'You must use at least ' + req.numbersMinLength + ' number(s).';\n            const symbolsMinLengthMsg = 'You must use at least ' + req.symbolsMinLength + ' symbol(s).';\n            const includeMsg = 'The Password must include all the items specified.';\n            const excludeMsg = 'The Password must exclude all the items specified.';\n            const startsWithMsg = 'The password must start with ' + req.startsWith + '.';\n            const endsWithMsg = 'The password must end with ' + req.endsWith + '.';\n            const blackListMsg = 'Your password is in the blacklist.';\n            const includeOneMsg = 'The Password must include at least one item specified [' + req.includeOne + '] .';\n\n            const uniqueLettersMinLength = 'You must use at least ' + req.uniqueLettersMinLength + ' unique letter(s).';\n\n            const upperCount = (text.match(/[A-Z]/g) || []).length;\n            const lowerCount = (text.match(/[a-z]/g) || []).length;\n            const numbersCount = (text.match(/[0-9]/g) || []).length;\n            const symbolsCount = text.length - (upperCount + lowerCount + numbersCount);\n\n            if (req.minLength) {\n                let val: number;\n                let msg = minLengthMsg;\n                if (this.isIMessage(req.minLength)) {\n                    val = <number>req.minLength.value;\n                    msg = <string>req.minLength.message;\n                } else {\n                    val = <number>req.minLength;\n                }\n                if (req.minLength && text.length < val) {\n                    errors.push(msg);\n                }\n            }\n            if (req.maxLength) {\n                let val: number;\n                let msg = maxLengthMsg;\n                if (this.isIMessage(req.maxLength)) {\n                    val = <number>req.maxLength.value;\n                    msg = <string>req.maxLength.message;\n                } else {\n                    val = <number>req.maxLength;\n                }\n                if (req.maxLength && text.length > val) {\n                    errors.push(msg);\n                }\n            }\n            if (req.startsWith) {\n                let val: string;\n                let msg = startsWithMsg;\n                if (this.isIMessage(req.startsWith)) {\n                    val = <string>req.startsWith.value;\n                    msg = <string>req.startsWith.message;\n                } else {\n                    val = <string>req.startsWith;\n                }\n                if (!this.startsWith(text, val)) {\n                    errors.push(msg);\n                }\n            }\n            if (req.endsWith) {\n                let val: string;\n                let msg = endsWithMsg;\n                if (this.isIMessage(req.endsWith)) {\n                    val = <string>req.endsWith.value;\n                    msg = <string>req.endsWith.message;\n                } else {\n                    val = <string>req.endsWith;\n                }\n                if (!this.endsWith(text, val)) {\n                    errors.push(msg);\n                }\n            }\n\n            if (req.uppercaseLettersMinLength) {\n                let val: number;\n                let msg = uppercaseLettersMinLengthMsg;\n                if (this.isIMessage(req.uppercaseLettersMinLength)) {\n                    val = <number>req.uppercaseLettersMinLength.value;\n                    msg = <string>req.uppercaseLettersMinLength.message;\n                } else {\n                    val = <number>req.uppercaseLettersMinLength;\n                }\n                if (val > upperCount) {\n                    errors.push(msg);\n                }\n            }\n\n            if (req.lowercaseLettersMinLength) {\n                let val: number;\n                let msg = lowercaseLettersMinLengthMsg;\n                if (this.isIMessage(req.lowercaseLettersMinLength)) {\n                    val = <number>req.lowercaseLettersMinLength.value;\n                    msg = <string>req.lowercaseLettersMinLength.message;\n                } else {\n                    val = <number>req.lowercaseLettersMinLength;\n                }\n                if (val > lowerCount) {\n                    errors.push(msg);\n                }\n            }\n            if (req.numbersMinLength) {\n                let val: number;\n                let msg = numbersMinLengthMsg;\n                if (this.isIMessage(req.numbersMinLength)) {\n                    val = <number>req.numbersMinLength.value;\n                    msg = <string>req.numbersMinLength.message;\n                } else {\n                    val = <number>req.numbersMinLength;\n                }\n                if (val > numbersCount) {\n                    errors.push(msg);\n                }\n            }\n            if (req.symbolsMinLength) {\n                let val: number;\n                let msg = symbolsMinLengthMsg;\n                if (this.isIMessage(req.symbolsMinLength)) {\n                    val = <number>req.symbolsMinLength.value;\n                    msg = <string>req.symbolsMinLength.message;\n                } else {\n                    val = <number>req.symbolsMinLength;\n                }\n                if (val > symbolsCount) {\n                    errors.push(msg);\n                }\n            }\n            if (req.uniqueLettersMinLength) {\n                let val: number;\n                let msg = uniqueLettersMinLength;\n                if (this.isIMessage(req.uniqueLettersMinLength)) {\n                    val = <number>req.uniqueLettersMinLength.value;\n                    msg = <string>req.uniqueLettersMinLength.message;\n                } else {\n                    val = <number>req.uniqueLettersMinLength;\n                }\n                const isValid = Array.from(new Set(text.split(''))).length >= val;\n                if (req.uniqueLettersMinLength && !isValid) {\n                    errors.push(msg);\n                }\n            }\n            if (req.include) {\n                let val: string[];\n                let msg = includeMsg;\n                if (this.isIMessage(req.include)) {\n                    val = <string[]>req.include.value;\n                    msg = <string>req.include.message;\n                } else {\n                    val = <string[]>req.include;\n                }\n                if (!this.contains(text, val)) {\n                    errors.push(msg);\n                }\n            }\n            if (req.exclude) {\n                let txt = text;\n                let val: string[];\n                let msg = excludeMsg;\n                if (this.isIMessage(req.exclude)) {\n                    val = <string[]>req.exclude.value;\n                    msg = <string>req.exclude.message;\n                } else {\n                    val = <string[]>req.exclude;\n                }\n                if (ignoreCase) {\n                    txt = text.toLowerCase();\n                    val = val.map((v) => v.toLowerCase());\n                }\n                if (!this.doesNotContains(txt, val)) {\n                    errors.push(msg);\n                }\n            }\n\n            if (req.blackList) {\n                let txt = text;\n                let val: string[];\n                let msg = blackListMsg;\n                if (this.isIMessage(req.blackList)) {\n                    val = <string[]>req.blackList.value;\n                    msg = <string>req.blackList.message;\n                } else {\n                    val = <string[]>req.blackList;\n                }\n                if (ignoreCase) {\n                    txt = text.toLowerCase();\n                    val = val.map((v) => v.toLowerCase());\n                }\n                if (this.isInBlackList(txt, val)) {\n                    errors.push(msg);\n                }\n            }\n\n            if (req.includeOne) {\n                let txt = text;\n                let val: string[];\n                let msg = includeOneMsg;\n                if (this.isIMessage(req.includeOne)) {\n                    val = <string[]>req.includeOne.value;\n                    msg = <string>req.includeOne.message;\n                } else {\n                    val = <string[]>req.includeOne;\n                }\n                if (ignoreCase) {\n                    txt = text.toLowerCase();\n                    val = val.map((v) => v.toLowerCase());\n                }\n                if (!this.containsOne(txt, val)) {\n                    errors.push(msg);\n                }\n            }\n\n            return errors;\n        }\n        return [];\n    }\n\n    public getResults(passwords: string[], ignoreCase = false, skipReq = false): IResult[] {\n        const results = [];\n        if (passwords && passwords.length > 0) {\n            for (let index = 0; index < passwords.length; index++) {\n                results.push(this.getResult(passwords[index], ignoreCase, skipReq));\n            }\n            return results;\n        }\n        return [];\n    }\n\n    public getResult(password: string, ignoreCase = false, skipReq = false): IResult {\n        if (password) {\n            // Requirements\n            const req = this.getRequirementsScore(password, ignoreCase);\n            if (!skipReq && req.length) {\n                return {\n                    score: -1,\n                    status: 'needs requirement(s)',\n                    errors: req,\n                    percent: 0,\n                };\n            }\n            // Additions\n            const len = this.getLengthScore(password);\n            const upper = this.getUppercaseLettersScore(password);\n            const lower = this.getLowercaseLettersScore(password);\n            const num = this.getNumbersScore(password);\n            const symbol = this.getSymbolsScore(password);\n            // Deductions\n            const letterOnly = this.getLettersOnlyScore(password);\n            const numberOnly = this.getNumbersOnlyScore(password);\n            const repetition = this.getRepeatCharactersScore(password);\n            const consecutiveUpper = this.getConsecutiveUppercaseLettersScore(password);\n            const consecutiveLower = this.getConsecutiveLowercaseLettersScore(password);\n            const consecutiveNumber = this.getConsecutiveNumbersScore(password);\n            const seqLetters = this.getSequentialLettersScore(password);\n            const seqNumbers = this.getSequentialNumbersScore(password);\n            const seqSymbols = this.getSequentialSymbolsScore(password);\n\n            const score =\n                len +\n                upper +\n                lower +\n                num +\n                symbol +\n                letterOnly +\n                numberOnly +\n                repetition +\n                consecutiveUpper +\n                consecutiveLower +\n                consecutiveNumber +\n                seqLetters +\n                seqNumbers +\n                seqSymbols;\n\n            const defaultRanges = {\n                '40': 'veryWeak', // 001 <= x <  040\n                '80': 'weak', // 040 <= x <  080\n                '120': 'medium', // 080 <= x <  120\n                '180': 'strong', // 120 <= x <  180\n                '200': 'veryStrong', // 180 <= x <  200\n                _: 'perfect', //          >= 200\n            };\n            let stat = '';\n            if (!this.scoreRange) {\n                this.scoreRange = defaultRanges;\n            }\n\n            const range = Object.keys(this.scoreRange).sort(function (a: any, b: any) {\n                if (isNaN(a) || isNaN(b)) {\n                    if (a > b) return 1;\n                    else return -1;\n                }\n                return a - b;\n            });\n            if (range.length < 2) {\n                return {\n                    score: -2,\n                    status: 'error',\n                    errors: '\"scoreRange\" must have at least two members.',\n                    percent: 0,\n                };\n            }\n            for (let index = 0; index < range.length; index++) {\n                const key: any = range[index];\n                if (key != undefined) {\n                    if (index == 0) {\n                        if (this.between(score, 1, parseFloat(range[index]))) {\n                            stat = this.scoreRange[range[0]];\n                            break;\n                        }\n                    }\n                    if (index === range.length - 1) {\n                        if (range[index] == '_') {\n                            if (this.between(score, parseFloat(range[index - 1]), 1000000000000000000)) {\n                                stat = this.scoreRange[range[range.length - 1]];\n                                break;\n                            }\n                        } else {\n                            return {\n                                score: -2,\n                                status: 'error',\n                                errors: 'The last member of the \"scoreRange\" must be \"_\".',\n                                percent: 0,\n                            };\n                        }\n                    }\n                    if (this.between(score, parseFloat(range[index - 1]), parseFloat(range[index]))) {\n                        stat = this.scoreRange[range[index]];\n                        break;\n                    }\n                }\n            }\n            const percent = (score * 100) / parseFloat(range[range.length - 2]);\n\n            let data = {\n                score: score,\n                status: stat,\n                percent: percent >= 100 ? 100 : percent,\n            };\n\n            if (skipReq) {\n                data = Object.assign(data, { errors: req });\n            }\n\n            return data;\n        }\n        return {\n            score: 0,\n            status: 'Empty',\n            percent: 0,\n        };\n    }\n}\n"],"names":[],"mappings":";;;;AA4BA,IAAA,aAAA,kBAAA,YAAA;IAII,SAAmB,aAAA,CAAA,YAA2B,EAAS,UAAgB,EAAA;QAApD,IAAY,CAAA,YAAA,GAAZ,YAAY,CAAe;QAAS,IAAU,CAAA,UAAA,GAAV,UAAU,CAAM;QAH/D,IAAgB,CAAA,gBAAA,GAAG,4BAA4B,CAAC;QAChD,IAAgB,CAAA,gBAAA,GAAG,4BAA4B,CAAC;QAChD,IAAO,CAAA,OAAA,GAAG,YAAY,CAAC;KAC4C;AAEnE,IAAA,aAAA,CAAA,SAAA,CAAA,UAAU,GAAlB,UAAmB,GAAW,EAAE,IAAY,EAAA;QACxC,OAAO,GAAG,CAAC,WAAW,CAAC,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC;KACzC,CAAA;AAEO,IAAA,aAAA,CAAA,SAAA,CAAA,QAAQ,GAAhB,UAAiB,GAAW,EAAE,IAAY,EAAA;AACtC,QAAA,OAAO,GAAG,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;KAC7D,CAAA;AAEO,IAAA,aAAA,CAAA,SAAA,CAAA,WAAW,GAAnB,UAAoB,GAAW,EAAE,GAAW,EAAA;QACxC,IAAM,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,GAAG,GAAG,CAAC,EACrC,IAAI,GAAG,IAAI,KAAK,CAAC,KAAK,CAAC,CAAC;QAC5B,IAAI,OAAO,GAAG,CAAC,CAAC;QAChB,KAAK,IAAI,EAAE,GAAG,CAAC,EAAE,EAAE,GAAG,KAAK,EAAE,EAAE,EAAE,EAAE;AAC/B,YAAA,OAAO,GAAG,EAAE,GAAG,GAAG,CAAC;AACnB,YAAA,IAAI,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,SAAS,CAAC,OAAO,EAAE,OAAO,GAAG,GAAG,CAAC,CAAC;AACpD,SAAA;AACD,QAAA,OAAO,IAAI,CAAC;KACf,CAAA;IACO,aAAS,CAAA,SAAA,CAAA,SAAA,GAAjB,UAAkB,IAAY,EAAA;AAC1B,QAAA,IAAI,IAAI,EAAE;YACN,OAAO,IAAI,CAAC,MAAM,CAAC;AACtB,SAAA;AACD,QAAA,OAAO,CAAC,CAAC;KACZ,CAAA;AACO,IAAA,aAAA,CAAA,SAAA,CAAA,eAAe,GAAvB,UAAwB,IAAY,EAAE,IAAc,EAAA;AAChD,QAAA,IAAI,IAAI,EAAE;AACN,YAAA,IAAI,IAAI,EAAE;gBACN,IAAM,kBAAkB,GAAG,IAAI,CAAC,KAAK,CAAC,UAAC,CAAC,EAAA,EAAK,OAAA,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAA,EAAA,CAAC,CAAC;AACpE,gBAAA,OAAO,kBAAkB,CAAC;AAC7B,aAAA;AAAM,iBAAA;AACH,gBAAA,OAAO,IAAI,CAAC;AACf,aAAA;AACJ,SAAA;AAAM,aAAA;AACH,YAAA,OAAO,IAAI,CAAC;AACf,SAAA;KACJ,CAAA;AACO,IAAA,aAAA,CAAA,SAAA,CAAA,QAAQ,GAAhB,UAAiB,IAAY,EAAE,IAAc,EAAA;AACzC,QAAA,IAAI,IAAI,EAAE;AACN,YAAA,IAAI,IAAI,EAAE;gBACN,IAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,UAAC,CAAC,EAAK,EAAA,OAAA,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,CAAA,EAAA,CAAC,CAAC;AAC5D,gBAAA,OAAO,WAAW,CAAC;AACtB,aAAA;AAAM,iBAAA;AACH,gBAAA,OAAO,KAAK,CAAC;AAChB,aAAA;AACJ,SAAA;AAAM,aAAA;AACH,YAAA,OAAO,KAAK,CAAC;AAChB,SAAA;KACJ,CAAA;AACO,IAAA,aAAA,CAAA,SAAA,CAAA,WAAW,GAAnB,UAAoB,IAAY,EAAE,IAAc,EAAA;AAC5C,QAAA,IAAI,IAAI,EAAE;AACN,YAAA,IAAI,IAAI,EAAE;gBACN,IAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,UAAC,CAAC,EAAK,EAAA,OAAA,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,CAAA,EAAA,CAAC,CAAC;AACxD,gBAAA,OAAO,QAAQ,CAAC;AACnB,aAAA;AAAM,iBAAA;AACH,gBAAA,OAAO,KAAK,CAAC;AAChB,aAAA;AACJ,SAAA;AAAM,aAAA;AACH,YAAA,OAAO,KAAK,CAAC;AAChB,SAAA;KACJ,CAAA;AAEO,IAAA,aAAA,CAAA,SAAA,CAAA,aAAa,GAArB,UAAsB,IAAY,EAAE,IAAc,EAAA;AAC9C,QAAA,IAAI,IAAI,EAAE;AACN,YAAA,IAAI,IAAI,EAAE;AACN,gBAAA,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,IAAI,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE;AAC9C,oBAAA,IAAI,IAAI,KAAK,IAAI,CAAC,KAAK,CAAC,EAAE;AACtB,wBAAA,OAAO,IAAI,CAAC;AACf,qBAAA;AACJ,iBAAA;AACD,gBAAA,OAAO,KAAK,CAAC;AAChB,aAAA;AAAM,iBAAA;AACH,gBAAA,OAAO,KAAK,CAAC;AAChB,aAAA;AACJ,SAAA;AAAM,aAAA;AACH,YAAA,OAAO,KAAK,CAAC;AAChB,SAAA;KACJ,CAAA;AAEO,IAAA,aAAA,CAAA,SAAA,CAAA,OAAO,GAAf,UAAgB,CAAS,EAAE,GAAW,EAAE,GAAW,EAAA;AAC/C,QAAA,OAAO,CAAC,IAAI,GAAG,IAAI,CAAC,GAAG,GAAG,CAAC;KAC9B,CAAA;IAEO,aAAU,CAAA,SAAA,CAAA,UAAA,GAAlB,UAAmB,GAAQ,EAAA;AACvB,QAAA,IAAM,MAAM,GAAG,GAAG,CAAC,OAAO,KAAK,SAAS,CAAC;AACzC,QAAA,OAAO,MAAM,CAAC;KACjB,CAAA;IAEO,aAAQ,CAAA,SAAA,CAAA,QAAA,GAAhB,UAAiB,IAAY,EAAA;AACzB,QAAA,IAAI,IAAI,EAAE;YACN,IAAM,OAAO,GAAG,OAAO,CAAC;AACxB,YAAA,OAAO,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC7B,SAAA;AACD,QAAA,OAAO,KAAK,CAAC;KAChB,CAAA;IAEO,aAAQ,CAAA,SAAA,CAAA,QAAA,GAAhB,UAAiB,IAAY,EAAA;AACzB,QAAA,IAAI,IAAI,EAAE;YACN,IAAM,OAAO,GAAG,aAAa,CAAC;AAC9B,YAAA,OAAO,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC7B,SAAA;AACD,QAAA,OAAO,KAAK,CAAC;KAChB,CAAA;IAEO,aAAiB,CAAA,SAAA,CAAA,iBAAA,GAAzB,UAA0B,IAAY,EAAA;AAClC,QAAA,IAAI,IAAI,EAAE;YACN,IAAM,OAAO,GAAG,UAAU,CAAC;AAC3B,YAAA,OAAO,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC7B,SAAA;AACD,QAAA,OAAO,KAAK,CAAC;KAChB,CAAA;IAEO,aAAiB,CAAA,SAAA,CAAA,iBAAA,GAAzB,UAA0B,IAAY,EAAA;AAClC,QAAA,IAAI,IAAI,EAAE;YACN,IAAM,OAAO,GAAG,UAAU,CAAC;AAC3B,YAAA,OAAO,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC7B,SAAA;AACD,QAAA,OAAO,KAAK,CAAC;KAChB,CAAA;IAEO,aAAQ,CAAA,SAAA,CAAA,QAAA,GAAhB,UAAiB,IAAY,EAAA;AACzB,QAAA,IAAI,IAAI,EAAE;AACN,YAAA,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;AACvD,SAAA;AACD,QAAA,OAAO,KAAK,CAAC;KAChB,CAAA;IAEO,aAAU,CAAA,SAAA,CAAA,UAAA,GAAlB,UAAmB,IAAY,EAAA;QAC3B,IAAI,MAAM,GAAG,EAAE,CAAC;AAChB,QAAA,IAAI,IAAI,EAAE;AACN,YAAA,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,IAAI,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE;gBAC9C,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AAAE,oBAAA,MAAM,IAAI,IAAI,CAAC,KAAK,CAAC,CAAC;AACzD,aAAA;AACJ,SAAA;AACD,QAAA,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC;AAAE,YAAA,OAAO,SAAS,CAAC;AAC1C,QAAA,OAAO,MAAM,CAAC;KACjB,CAAA;IAEO,aAAc,CAAA,SAAA,CAAA,cAAA,GAAtB,UAAuB,IAAY,EAAA;AAC/B,QAAA,IAAI,IAAI,EAAE;;YAEN,IAAM,KAAK,GAAG,CAAC,CAAC;YAChB,OAAO,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC;AACvC,SAAA;AACD,QAAA,OAAO,CAAC,CAAC;KACZ,CAAA;IACO,aAAwB,CAAA,SAAA,CAAA,wBAAA,GAAhC,UAAiC,IAAY,EAAA;QAA7C,IAgBC,KAAA,GAAA,IAAA,CAAA;AAfG,QAAA,IAAI,IAAI,EAAE;;YAEN,IAAM,KAAK,GAAG,CAAC,CAAC;YAChB,IAAI,GAAC,GAAG,CAAC,CAAC;YACV,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,OAAO,CAAC,UAAC,KAAK,EAAA;AACzB,gBAAA,IAAI,KAAI,CAAC,iBAAiB,CAAC,KAAK,CAAC,EAAE;AAC/B,oBAAA,GAAC,EAAE,CAAC;AACP,iBAAA;AACL,aAAC,CAAC,CAAC;YACH,IAAI,GAAC,IAAI,CAAC,EAAE;AACR,gBAAA,OAAO,CAAC,CAAC;AACZ,aAAA;AACD,YAAA,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,GAAG,GAAC,IAAI,KAAK,CAAC;AAC7C,SAAA;AACD,QAAA,OAAO,CAAC,CAAC;KACZ,CAAA;IACO,aAAwB,CAAA,SAAA,CAAA,wBAAA,GAAhC,UAAiC,IAAY,EAAA;QAA7C,IAgBC,KAAA,GAAA,IAAA,CAAA;AAfG,QAAA,IAAI,IAAI,EAAE;;YAEN,IAAM,KAAK,GAAG,CAAC,CAAC;YAChB,IAAI,GAAC,GAAG,CAAC,CAAC;YACV,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,OAAO,CAAC,UAAC,KAAK,EAAA;AACzB,gBAAA,IAAI,KAAI,CAAC,iBAAiB,CAAC,KAAK,CAAC,EAAE;AAC/B,oBAAA,GAAC,EAAE,CAAC;AACP,iBAAA;AACL,aAAC,CAAC,CAAC;YACH,IAAI,GAAC,IAAI,CAAC,EAAE;AACR,gBAAA,OAAO,CAAC,CAAC;AACZ,aAAA;AACD,YAAA,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,GAAG,GAAC,IAAI,KAAK,CAAC;AAC7C,SAAA;AACD,QAAA,OAAO,CAAC,CAAC;KACZ,CAAA;IACO,aAAe,CAAA,SAAA,CAAA,eAAA,GAAvB,UAAwB,IAAY,EAAA;QAApC,IAgBC,KAAA,GAAA,IAAA,CAAA;AAfG,QAAA,IAAI,IAAI,EAAE;;YAEN,IAAM,KAAK,GAAG,CAAC,CAAC;YAChB,IAAI,GAAC,GAAG,CAAC,CAAC;YACV,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,OAAO,CAAC,UAAC,KAAK,EAAA;AACzB,gBAAA,IAAI,KAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE;AACtB,oBAAA,GAAC,EAAE,CAAC;AACP,iBAAA;AACL,aAAC,CAAC,CAAC;YACH,IAAI,GAAC,IAAI,CAAC,EAAE;AACR,gBAAA,OAAO,CAAC,CAAC;AACZ,aAAA;AACD,YAAA,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,GAAG,GAAC,IAAI,KAAK,CAAC;AAC7C,SAAA;AACD,QAAA,OAAO,CAAC,CAAC;KACZ,CAAA;IACO,aAAe,CAAA,SAAA,CAAA,eAAA,GAAvB,UAAwB,IAAY,EAAA;QAApC,IAgBC,KAAA,GAAA,IAAA,CAAA;AAfG,QAAA,IAAI,IAAI,EAAE;;YAEN,IAAM,KAAK,GAAG,CAAC,CAAC;YAChB,IAAI,GAAC,GAAG,CAAC,CAAC;YACV,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,OAAO,CAAC,UAAC,KAAK,EAAA;AACzB,gBAAA,IAAI,KAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE;AACtB,oBAAA,GAAC,EAAE,CAAC;AACP,iBAAA;AACL,aAAC,CAAC,CAAC;YACH,IAAI,GAAC,IAAI,CAAC,EAAE;AACR,gBAAA,OAAO,CAAC,CAAC;AACZ,aAAA;AACD,YAAA,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,GAAG,GAAC,IAAI,KAAK,CAAC;AAC7C,SAAA;AACD,QAAA,OAAO,CAAC,CAAC;KACZ,CAAA;IAEO,aAAmB,CAAA,SAAA,CAAA,mBAAA,GAA3B,UAA4B,IAAY,EAAA;AACpC,QAAA,IAAI,IAAI,EAAE;;AAEN,YAAA,IAAM,KAAK,GAAG,CAAC,CAAC,CAAC;AACjB,YAAA,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE;gBACrB,OAAO,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC;AACvC,aAAA;AACJ,SAAA;AACD,QAAA,OAAO,CAAC,CAAC;KACZ,CAAA;IAEO,aAAmB,CAAA,SAAA,CAAA,mBAAA,GAA3B,UAA4B,IAAY,EAAA;AACpC,QAAA,IAAI,IAAI,EAAE;;AAEN,YAAA,IAAM,KAAK,GAAG,CAAC,CAAC,CAAC;AACjB,YAAA,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE;gBACrB,OAAO,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC;AACvC,aAAA;AACJ,SAAA;AACD,QAAA,OAAO,CAAC,CAAC;KACZ,CAAA;IAEO,aAAmC,CAAA,SAAA,CAAA,mCAAA,GAA3C,UAA4C,IAAY,EAAA;QAAxD,IAqBC,KAAA,GAAA,IAAA,CAAA;AApBG,QAAA,IAAI,IAAI,EAAE;YACN,IAAM,OAAO,GAAG,SAAS,CAAC;YAC1B,IAAM,OAAO,GAAqB,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;YACtD,IAAI,CAAC,OAAO,EAAE;AACV,gBAAA,OAAO,CAAC,CAAC;AACZ,aAAA;YACD,IAAI,OAAK,GAAG,CAAC,CAAC;AACd,YAAA,IAAM,OAAK,GAAG,CAAC,CAAC,CAAC;AACjB,YAAA,OAAO,CAAC,OAAO,CAAC,UAAC,KAAK,EAAA;gBAClB,IAAI,KAAI,CAAC,SAAS,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE;;oBAE3B,OAAK;wBACD,CAAC,KAAI,CAAC,SAAS,CAAC,KAAK,CAAC,GAAG,CAAC;;AAE1B,4BAAA,OAAK,CAAC;AACb,iBAAA;AACL,aAAC,CAAC,CAAC;AACH,YAAA,OAAO,OAAK,CAAC;AAChB,SAAA;AACD,QAAA,OAAO,CAAC,CAAC;KACZ,CAAA;IACO,aAAmC,CAAA,SAAA,CAAA,mCAAA,GAA3C,UAA4C,IAAY,EAAA;QAAxD,IAqBC,KAAA,GAAA,IAAA,CAAA;AApBG,QAAA,IAAI,IAAI,EAAE;YACN,IAAM,OAAO,GAAG,SAAS,CAAC;YAC1B,IAAM,OAAO,GAAqB,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;YACtD,IAAI,CAAC,OAAO,EAAE;AACV,gBAAA,OAAO,CAAC,CAAC;AACZ,aAAA;YACD,IAAI,OAAK,GAAG,CAAC,CAAC;AACd,YAAA,IAAM,OAAK,GAAG,CAAC,CAAC,CAAC;AACjB,YAAA,OAAO,CAAC,OAAO,CAAC,UAAC,KAAK,EAAA;gBAClB,IAAI,KAAI,CAAC,SAAS,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE;;oBAE3B,OAAK;wBACD,CAAC,KAAI,CAAC,SAAS,CAAC,KAAK,CAAC,GAAG,CAAC;;AAE1B,4BAAA,OAAK,CAAC;AACb,iBAAA;AACL,aAAC,CAAC,CAAC;AACH,YAAA,OAAO,OAAK,CAAC;AAChB,SAAA;AACD,QAAA,OAAO,CAAC,CAAC;KACZ,CAAA;IACO,aAA0B,CAAA,SAAA,CAAA,0BAAA,GAAlC,UAAmC,IAAY,EAAA;QAA/C,IAqBC,KAAA,GAAA,IAAA,CAAA;AApBG,QAAA,IAAI,IAAI,EAAE;YACN,IAAM,OAAO,GAAG,SAAS,CAAC;YAC1B,IAAM,OAAO,GAAqB,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;YACtD,IAAI,CAAC,OAAO,EAAE;AACV,gBAAA,OAAO,CAAC,CAAC;AACZ,aAAA;YACD,IAAI,OAAK,GAAG,CAAC,CAAC;AACd,YAAA,IAAM,OAAK,GAAG,CAAC,CAAC,CAAC;AACjB,YAAA,OAAO,CAAC,OAAO,CAAC,UAAC,KAAK,EAAA;gBAClB,IAAI,KAAI,CAAC,SAAS,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE;;oBAE3B,OAAK;wBACD,CAAC,KAAI,CAAC,SAAS,CAAC,KAAK,CAAC,GAAG,CAAC;;AAE1B,4BAAA,OAAK,CAAC;AACb,iBAAA;AACL,aAAC,CAAC,CAAC;AACH,YAAA,OAAO,OAAK,CAAC;AAChB,SAAA;AACD,QAAA,OAAO,CAAC,CAAC;KACZ,CAAA;IACO,aAAa,CAAA,SAAA,CAAA,aAAA,GAArB,UAAsB,GAAW,EAAA;AAC7B,QAAA,OAAO,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;KAC3C,CAAA;AAEO,IAAA,aAAA,CAAA,SAAA,CAAA,iBAAiB,GAAzB,UAA0B,IAAY,EAAE,QAAgB,EAAA;AACpD,QAAA,IAAI,IAAI,EAAE;YACN,IAAM,IAAI,GAAa,EAAE,CAAC;AAC1B,YAAA,IAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,MAAM,GAAG,QAAQ,CAAC;YAC7C,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,EAAE,EAAE;gBAC1B,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,GAAG,EAAE,KAAK,EAAE,EAAE;AACtC,oBAAA,IAAM,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;AACnD,oBAAA,IAAM,GAAG,GAAG,IAAI,CAAC,WAAW,CAAC,OAAO,EAAE,CAAC,GAAG,QAAQ,CAAC,CAAC;AACpD,oBAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;wBACjC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;AAClB,wBAAA,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACzC,qBAAA;AACJ,iBAAA;AACJ,aAAA;AACD,YAAA,IAAM,MAAM,GAAG,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC,CAAC;AACrE,YAAA,OAAO,MAAM,CAAC;AACjB,SAAA;AACD,QAAA,OAAO,EAAE,CAAC;KACb,CAAA;IAEO,aAAa,CAAA,SAAA,CAAA,aAAA,GAArB,UAAsB,GAAa,EAAA;QAC/B,IAAM,CAAC,GAAG,EAAE,CAAC;AACb,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE;AAAE,YAAA,IAAI,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,KAAK,EAAE;gBAAE,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;AAC1G,QAAA,OAAO,CAAC,CAAC;KACZ,CAAA;AAEO,IAAA,aAAA,CAAA,SAAA,CAAA,YAAY,GAApB,UAAqB,GAAa,EAAE,KAAc,EAAA;AAC9C,QAAA,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC,EAAA;AACnB,YAAA,OAAO,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,MAAM,CAAC;AAC/B,SAAC,CAAC,CAAC;QACH,IAAM,IAAI,GAAa,EAAE,CAAC;AAC1B,QAAA,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,GAAG,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE;AAC7C,YAAA,IAAI,KAAK,EAAE;gBACP,IAAI,GAAG,CAAC,KAAK,CAAC,CAAC,MAAM,IAAI,KAAK,EAAE;oBAC5B,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC;AACzB,iBAAA;AACJ,aAAA;AAAM,iBAAA;gBACH,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC;AACzB,aAAA;AACJ,SAAA;AACD,QAAA,OAAO,IAAI,CAAC;KACf,CAAA;IAEO,aAAyB,CAAA,SAAA,CAAA,yBAAA,GAAjC,UAAkC,IAAY,EAAA;QAC1C,IAAM,QAAQ,GAAG,CAAC,CAAC;AACnB,QAAA,IAAI,IAAI,EAAE;AACN,YAAA,IAAM,IAAI,GAAG,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,gBAAgB,EAAE,QAAQ,CAAC,CAAC;AACrE,YAAA,IAAM,IAAI,GAAG,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,gBAAgB,EAAE,QAAQ,CAAC,CAAC;YACrE,IAAI,OAAK,GAAG,CAAC,CAAC;YACd,IAAI,MAAI,GAAG,IAAI,CAAC;YAChB,IAAI,MAAI,GAAG,IAAI,CAAC;AAChB,YAAA,IAAI,CAAC,OAAO,CAAC,UAAC,KAAK,EAAA;gBACf,IAAI,MAAI,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,EAAE;oBAC3B,OAAK,IAAI,KAAK,CAAC,MAAM,IAAI,QAAQ,GAAG,CAAC,CAAC,CAAC;oBACvC,MAAI,GAAG,MAAI,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;AAClC,iBAAA;AACL,aAAC,CAAC,CAAC;AACH,YAAA,IAAI,CAAC,OAAO,CAAC,UAAC,KAAK,EAAA;gBACf,IAAI,MAAI,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,EAAE;oBAC3B,OAAK,IAAI,KAAK,CAAC,MAAM,IAAI,QAAQ,GAAG,CAAC,CAAC,CAAC;oBACvC,MAAI,GAAG,MAAI,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;AAClC,iBAAA;AACL,aAAC,CAAC,CAAC;;AAEH,YAAA,IAAM,KAAK,GAAG,CAAC,CAAC,CAAC;YACjB,OAAO,OAAK,GAAG,KAAK,CAAC;AACxB,SAAA;AACD,QAAA,OAAO,CAAC,CAAC;KACZ,CAAA;IAEO,aAAyB,CAAA,SAAA,CAAA,yBAAA,GAAjC,UAAkC,IAAY,EAAA;QAC1C,IAAM,QAAQ,GAAG,CAAC,CAAC;AACnB,QAAA,IAAI,IAAI,EAAE;AACN,YAAA,IAAM,GAAG,GAAG,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;YAC3D,IAAI,OAAK,GAAG,CAAC,CAAC;YACd,IAAI,KAAG,GAAG,IAAI,CAAC;AACf,YAAA,GAAG,CAAC,OAAO,CAAC,UAAC,KAAK,EAAA;gBACd,IAAI,KAAG,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,EAAE;oBAC1B,OAAK,IAAI,KAAK,CAAC,MAAM,IAAI,QAAQ,GAAG,CAAC,CAAC,CAAC;oBACvC,KAAG,GAAG,KAAG,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;AAChC,iBAAA;AACL,aAAC,CAAC,CAAC;;AAEH,YAAA,IAAM,KAAK,GAAG,CAAC,CAAC,CAAC;YACjB,OAAO,OAAK,GAAG,KAAK,CAAC;AACxB,SAAA;AACD,QAAA,OAAO,CAAC,CAAC;KACZ,CAAA;IAEO,aAAyB,CAAA,SAAA,CAAA,yBAAA,GAAjC,UAAkC,IAAY,EAAA;QAC1C,IAAM,QAAQ,GAAG,CAAC,CAAC;QACnB,IAAM,GAAG,GAAG,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;QAClC,IAAI,IAAI,IAAI,GAAG,EAAE;YACb,IAAM,GAAG,GAAG,IAAI,CAAC,iBAAiB,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;YAClD,IAAI,OAAK,GAAG,CAAC,CAAC;YACd,IAAI,KAAG,GAAG,IAAI,CAAC;AACf,YAAA,GAAG,CAAC,OAAO,CAAC,UAAC,KAAK,EAAA;gBACd,IAAI,KAAG,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,EAAE;oBAC1B,OAAK,IAAI,KAAK,CAAC,MAAM,IAAI,QAAQ,GAAG,CAAC,CAAC,CAAC;oBACvC,KAAG,GAAG,KAAG,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;AAChC,iBAAA;AACL,aAAC,CAAC,CAAC;;AAEH,YAAA,IAAM,KAAK,GAAG,CAAC,CAAC,CAAC;YACjB,OAAO,OAAK,GAAG,KAAK,CAAC;AACxB,SAAA;AACD,QAAA,OAAO,CAAC,CAAC;KACZ,CAAA;IAEO,aAAwB,CAAA,SAAA,CAAA,wBAAA,GAAhC,UAAiC,IAAY,EAAA;QACzC,IAAM,OAAO,GAAG,gBAAgB,CAAC;AACjC,QAAA,IAAI,IAAI,EAAE;YACN,IAAM,OAAO,GAAqB,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;YACtD,IAAI,CAAC,OAAO,EAAE;AACV,gBAAA,OAAO,CAAC,CAAC;AACZ,aAAA;AACD,YAAA,IAAM,eAAe,GAAG,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;YAC7D,IAAI,KAAK,GAAG,CAAC,CAAC;AACd,YAAA,IAAI,eAAe,IAAI,CAAC,IAAI,eAAe,IAAI,CAAC;gBAAE,KAAK,GAAG,CAAC,CAAC,CAAC;AAC7D,YAAA,IAAI,eAAe,IAAI,CAAC,IAAI,eAAe,IAAI,EAAE;gBAAE,KAAK,GAAG,CAAC,CAAC,CAAC;YAC9D,IAAI,eAAe,IAAI,EAAE;gBAAE,KAAK,GAAG,CAAC,CAAC,CAAC;;AAEtC,YAAA,IAAM,KAAK,GAAG,KAAK,GAAG,eAAe,IAAI,IAAI,CAAC,MAAM,GAAG,eAAe,GAAG,CAAC,CAAC,CAAC;AAC5E,YAAA,OAAO,KAAK,CAAC;AAChB,SAAA;AACD,QAAA,OAAO,CAAC,CAAC;KACZ,CAAA;AAEO,IAAA,aAAA,CAAA,SAAA,CAAA,oBAAoB,GAA5B,UAA6B,IAAY,EAAE,UAAmB,EAAA;AAC1D,QAAA,IAAM,GAAG,GAAG,IAAI,CAAC,YAAY,CAAC;QAC9B,IAAM,MAAM,GAAa,EAAE,CAAC;AAC5B,QAAA,IAAI,GAAG,EAAE;YACL,IAAM,YAAY,GAAG,iCAAiC,GAAG,GAAG,CAAC,SAAS,GAAG,GAAG,CAAC;YAC7E,IAAM,YAAY,GAAG,iCAAiC,GAAG,GAAG,CAAC,SAAS,GAAG,GAAG,CAAC;YAC7E,IAAM,4BAA4B,GAC9B,wBAAwB,GAAG,GAAG,CAAC,yBAAyB,GAAG,uBAAuB,CAAC;YACvF,IAAM,4BAA4B,GAC9B,wBAAwB,GAAG,GAAG,CAAC,yBAAyB,GAAG,uBAAuB,CAAC;YACvF,IAAM,mBAAmB,GAAG,wBAAwB,GAAG,GAAG,CAAC,gBAAgB,GAAG,aAAa,CAAC;YAC5F,IAAM,mBAAmB,GAAG,wBAAwB,GAAG,GAAG,CAAC,gBAAgB,GAAG,aAAa,CAAC;YAC5F,IAAM,UAAU,GAAG,oDAAoD,CAAC;YACxE,IAAM,UAAU,GAAG,oDAAoD,CAAC;YACxE,IAAM,aAAa,GAAG,+BAA+B,GAAG,GAAG,CAAC,UAAU,GAAG,GAAG,CAAC;YAC7E,IAAM,WAAW,GAAG,6BAA6B,GAAG,GAAG,CAAC,QAAQ,GAAG,GAAG,CAAC;YACvE,IAAM,YAAY,GAAG,oCAAoC,CAAC;YAC1D,IAAM,aAAa,GAAG,yDAAyD,GAAG,GAAG,CAAC,UAAU,GAAG,KAAK,CAAC;YAEzG,IAAM,sBAAsB,GAAG,wBAAwB,GAAG,GAAG,CAAC,sBAAsB,GAAG,oBAAoB,CAAC;AAE5G,YAAA,IAAM,UAAU,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,EAAE,EAAE,MAAM,CAAC;AACvD,YAAA,IAAM,UAAU,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,EAAE,EAAE,MAAM,CAAC;AACvD,YAAA,IAAM,YAAY,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,EAAE,EAAE,MAAM,CAAC;AACzD,YAAA,IAAM,YAAY,GAAG,IAAI,CAAC,MAAM,IAAI,UAAU,GAAG,UAAU,GAAG,YAAY,CAAC,CAAC;YAE5E,IAAI,GAAG,CAAC,SAAS,EAAE;gBACf,IAAI,GAAG,SAAQ,CAAC;gBAChB,IAAI,GAAG,GAAG,YAAY,CAAC;gBACvB,IAAI,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE;AAChC,oBAAA,GAAG,GAAW,GAAG,CAAC,SAAS,CAAC,KAAK,CAAC;AAClC,oBAAA,GAAG,GAAW,GAAG,CAAC,SAAS,CAAC,OAAO,CAAC;AACvC,iBAAA;AAAM,qBAAA;AACH,oBAAA,GAAG,GAAW,GAAG,CAAC,SAAS,CAAC;AAC/B,iBAAA;gBACD,IAAI,GAAG,CAAC,SAAS,IAAI,IAAI,CAAC,MAAM,GAAG,GAAG,EAAE;AACpC,oBAAA,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AACpB,iBAAA;AACJ,aAAA;YACD,IAAI,GAAG,CAAC,SAAS,EAAE;gBACf,IAAI,GAAG,SAAQ,CAAC;gBAChB,IAAI,GAAG,GAAG,YAAY,CAAC;gBACvB,IAAI,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE;AAChC,oBAAA,GAAG,GAAW,GAAG,CAAC,SAAS,CAAC,KAAK,CAAC;AAClC,oBAAA,GAAG,GAAW,GAAG,CAAC,SAAS,CAAC,OAAO,CAAC;AACvC,iBAAA;AAAM,qBAAA;AACH,oBAAA,GAAG,GAAW,GAAG,CAAC,SAAS,CAAC;AAC/B,iBAAA;gBACD,IAAI,GAAG,CAAC,SAAS,IAAI,IAAI,CAAC,MAAM,GAAG,GAAG,EAAE;AACpC,oBAAA,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AACpB,iBAAA;AACJ,aAAA;YACD,IAAI,GAAG,CAAC,UAAU,EAAE;gBAChB,IAAI,GAAG,SAAQ,CAAC;gBAChB,IAAI,GAAG,GAAG,aAAa,CAAC;gBACxB,IAAI,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,UAAU,CAAC,EAAE;AACjC,oBAAA,GAAG,GAAW,GAAG,CAAC,UAAU,CAAC,KAAK,CAAC;AACnC,oBAAA,GAAG,GAAW,GAAG,CAAC,UAAU,CAAC,OAAO,CAAC;AACxC,iBAAA;AAAM,qBAAA;AACH,oBAAA,GAAG,GAAW,GAAG,CAAC,UAAU,CAAC;AAChC,iBAAA;gBACD,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,GAAG,CAAC,EAAE;AAC7B,oBAAA,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AACpB,iBAAA;AACJ,aAAA;YACD,IAAI,GAAG,CAAC,QAAQ,EAAE;gBACd,IAAI,GAAG,SAAQ,CAAC;gBAChB,IAAI,GAAG,GAAG,WAAW,CAAC;gBACtB,IAAI,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE;AAC/B,oBAAA,GAAG,GAAW,GAAG,CAAC,QAAQ,CAAC,KAAK,CAAC;AACjC,oBAAA,GAAG,GAAW,GAAG,CAAC,QAAQ,CAAC,OAAO,CAAC;AACtC,iBAAA;AAAM,qBAAA;AACH,oBAAA,GAAG,GAAW,GAAG,CAAC,QAAQ,CAAC;AAC9B,iBAAA;gBACD,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,GAAG,CAAC,EAAE;AAC3B,oBAAA,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AACpB,iBAAA;AACJ,aAAA;YAED,IAAI,GAAG,CAAC,yBAAyB,EAAE;gBAC/B,IAAI,GAAG,SAAQ,CAAC;gBAChB,IAAI,GAAG,GAAG,4BAA4B,CAAC;gBACvC,IAAI,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,yBAAyB,CAAC,EAAE;AAChD,oBAAA,GAAG,GAAW,GAAG,CAAC,yBAAyB,CAAC,KAAK,CAAC;AAClD,oBAAA,GAAG,GAAW,GAAG,CAAC,yBAAyB,CAAC,OAAO,CAAC;AACvD,iBAAA;AAAM,qBAAA;AACH,oBAAA,GAAG,GAAW,GAAG,CAAC,yBAAyB,CAAC;AAC/C,iBAAA;gBACD,IAAI,GAAG,GAAG,UAAU,EAAE;AAClB,oBAAA,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AACpB,iBAAA;AACJ,aAAA;YAED,IAAI,GAAG,CAAC,yBAAyB,EAAE;gBAC/B,IAAI,GAAG,SAAQ,CAAC;gBAChB,IAAI,GAAG,GAAG,4BAA4B,CAAC;gBACvC,IAAI,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,yBAAyB,CAAC,EAAE;AAChD,oBAAA,GAAG,GAAW,GAAG,CAAC,yBAAyB,CAAC,KAAK,CAAC;AAClD,oBAAA,GAAG,GAAW,GAAG,CAAC,yBAAyB,CAAC,OAAO,CAAC;AACvD,iBAAA;AAAM,qBAAA;AACH,oBAAA,GAAG,GAAW,GAAG,CAAC,yBAAyB,CAAC;AAC/C,iBAAA;gBACD,IAAI,GAAG,GAAG,UAAU,EAAE;AAClB,oBAAA,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AACpB,iBAAA;AACJ,aAAA;YACD,IAAI,GAAG,CAAC,gBAAgB,EAAE;gBACtB,IAAI,GAAG,SAAQ,CAAC;gBAChB,IAAI,GAAG,GAAG,mBAAmB,CAAC;gBAC9B,IAAI,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,gBAAgB,CAAC,EAAE;AACvC,oBAAA,GAAG,GAAW,GAAG,CAAC,gBAAgB,CAAC,KAAK,CAAC;AACzC,oBAAA,GAAG,GAAW,GAAG,CAAC,gBAAgB,CAAC,OAAO,CAAC;AAC9C,iBAAA;AAAM,qBAAA;AACH,oBAAA,GAAG,GAAW,GAAG,CAAC,gBAAgB,CAAC;AACtC,iBAAA;gBACD,IAAI,GAAG,GAAG,YAAY,EAAE;AACpB,oBAAA,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AACpB,iBAAA;AACJ,aAAA;YACD,IAAI,GAAG,CAAC,gBAAgB,EAAE;gBACtB,IAAI,GAAG,SAAQ,CAAC;gBAChB,IAAI,GAAG,GAAG,mBAAmB,CAAC;gBAC9B,IAAI,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,gBAAgB,CAAC,EAAE;AACvC,oBAAA,GAAG,GAAW,GAAG,CAAC,gBAAgB,CAAC,KAAK,CAAC;AACzC,oBAAA,GAAG,GAAW,GAAG,CAAC,gBAAgB,CAAC,OAAO,CAAC;AAC9C,iBAAA;AAAM,qBAAA;AACH,oBAAA,GAAG,GAAW,GAAG,CAAC,gBAAgB,CAAC;AACtC,iBAAA;gBACD,IAAI,GAAG,GAAG,YAAY,EAAE;AACpB,oBAAA,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AACpB,iBAAA;AACJ,aAAA;YACD,IAAI,GAAG,CAAC,sBAAsB,EAAE;gBAC5B,IAAI,GAAG,SAAQ,CAAC;gBAChB,IAAI,GAAG,GAAG,sBAAsB,CAAC;gBACjC,IAAI,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,sBAAsB,CAAC,EAAE;AAC7C,oBAAA,GAAG,GAAW,GAAG,CAAC,sBAAsB,CAAC,KAAK,CAAC;AAC/C,oBAAA,GAAG,GAAW,GAAG,CAAC,sBAAsB,CAAC,OAAO,CAAC;AACpD,iBAAA;AAAM,qBAAA;AACH,oBAAA,GAAG,GAAW,GAAG,CAAC,sBAAsB,CAAC;AAC5C,iBAAA;gBACD,IAAM,OAAO,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,MAAM,IAAI,GAAG,CAAC;AAClE,gBAAA,IAAI,GAAG,CAAC,sBAAsB,IAAI,CAAC,OAAO,EAAE;AACxC,oBAAA,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AACpB,iBAAA;AACJ,aAAA;YACD,IAAI,GAAG,CAAC,OAAO,EAAE;gBACb,IAAI,GAAG,SAAU,CAAC;gBAClB,IAAI,GAAG,GAAG,UAAU,CAAC;gBACrB,IAAI,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE;AAC9B,oBAAA,GAAG,GAAa,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC;AAClC,oBAAA,GAAG,GAAW,GAAG,CAAC,OAAO,CAAC,OAAO,CAAC;AACrC,iBAAA;AAAM,qBAAA;AACH,oBAAA,GAAG,GAAa,GAAG,CAAC,OAAO,CAAC;AAC/B,iBAAA;gBACD,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,GAAG,CAAC,EAAE;AAC3B,oBAAA,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AACpB,iBAAA;AACJ,aAAA;YACD,IAAI,GAAG,CAAC,OAAO,EAAE;gBACb,IAAI,GAAG,GAAG,IAAI,CAAC;gBACf,IAAI,GAAG,SAAU,CAAC;gBAClB,IAAI,GAAG,GAAG,UAAU,CAAC;gBACrB,IAAI,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE;AAC9B,oBAAA,GAAG,GAAa,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC;AAClC,oBAAA,GAAG,GAAW,GAAG,CAAC,OAAO,CAAC,OAAO,CAAC;AACrC,iBAAA;AAAM,qBAAA;AACH,oBAAA,GAAG,GAAa,GAAG,CAAC,OAAO,CAAC;AAC/B,iBAAA;AACD,gBAAA,IAAI,UAAU,EAAE;AACZ,oBAAA,GAAG,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC;AACzB,oBAAA,GAAG,GAAG,GAAG,CAAC,GAAG,CAAC,UAAC,CAAC,EAAA,EAAK,OAAA,CAAC,CAAC,WAAW,EAAE,CAAf,EAAe,CAAC,CAAC;AACzC,iBAAA;gBACD,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,GAAG,EAAE,GAAG,CAAC,EAAE;AACjC,oBAAA,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AACpB,iBAAA;AACJ,aAAA;YAED,IAAI,GAAG,CAAC,SAAS,EAAE;gBACf,IAAI,GAAG,GAAG,IAAI,CAAC;gBACf,IAAI,GAAG,SAAU,CAAC;gBAClB,IAAI,GAAG,GAAG,YAAY,CAAC;gBACvB,IAAI,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE;AAChC,oBAAA,GAAG,GAAa,GAAG,CAAC,SAAS,CAAC,KAAK,CAAC;AACpC,oBAAA,GAAG,GAAW,GAAG,CAAC,SAAS,CAAC,OAAO,CAAC;AACvC,iBAAA;AAAM,qBAAA;AACH,oBAAA,GAAG,GAAa,GAAG,CAAC,SAAS,CAAC;AACjC,iBAAA;AACD,gBAAA,IAAI,UAAU,EAAE;AACZ,oBAAA,GAAG,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC;AACzB,oBAAA,GAAG,GAAG,GAAG,CAAC,GAAG,CAAC,UAAC,CAAC,EAAA,EAAK,OAAA,CAAC,CAAC,WAAW,EAAE,CAAf,EAAe,CAAC,CAAC;AACzC,iBAAA;gBACD,IAAI,IAAI,CAAC,aAAa,CAAC,GAAG,EAAE,GAAG,CAAC,EAAE;AAC9B,oBAAA,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AACpB,iBAAA;AACJ,aAAA;YAED,IAAI,GAAG,CAAC,UAAU,EAAE;gBAChB,IAAI,GAAG,GAAG,IAAI,CAAC;gBACf,IAAI,GAAG,SAAU,CAAC;gBAClB,IAAI,GAAG,GAAG,aAAa,CAAC;gBACxB,IAAI,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,UAAU,CAAC,EAAE;AACjC,oBAAA,GAAG,GAAa,GAAG,CAAC,UAAU,CAAC,KAAK,CAAC;AACrC,oBAAA,GAAG,GAAW,GAAG,CAAC,UAAU,CAAC,OAAO,CAAC;AACxC,iBAAA;AAAM,qBAAA;AACH,oBAAA,GAAG,GAAa,GAAG,CAAC,UAAU,CAAC;AAClC,iBAAA;AACD,gBAAA,IAAI,UAAU,EAAE;AACZ,oBAAA,GAAG,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC;AACzB,oBAAA,GAAG,GAAG,GAAG,CAAC,GAAG,CAAC,UAAC,CAAC,EAAA,EAAK,OAAA,CAAC,CAAC,WAAW,EAAE,CAAf,EAAe,CAAC,CAAC;AACzC,iBAAA;gBACD,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,GAAG,EAAE,GAAG,CAAC,EAAE;AAC7B,oBAAA,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AACpB,iBAAA;AACJ,aAAA;AAED,YAAA,OAAO,MAAM,CAAC;AACjB,SAAA;AACD,QAAA,OAAO,EAAE,CAAC;KACb,CAAA;AAEM,IAAA,aAAA,CAAA,SAAA,CAAA,UAAU,GAAjB,UAAkB,SAAmB,EAAE,UAAkB,EAAE,OAAe,EAAA;AAAnC,QAAA,IAAA,UAAA,KAAA,KAAA,CAAA,EAAA,EAAA,UAAkB,GAAA,KAAA,CAAA,EAAA;AAAE,QAAA,IAAA,OAAA,KAAA,KAAA,CAAA,EAAA,EAAA,OAAe,GAAA,KAAA,CAAA,EAAA;QACtE,IAAM,OAAO,GAAG,EAAE,CAAC;AACnB,QAAA,IAAI,SAAS,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE;AACnC,YAAA,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,SAAS,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE;AACnD,gBAAA,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE,UAAU,EAAE,OAAO,CAAC,CAAC,CAAC;AACvE,aAAA;AACD,YAAA,OAAO,OAAO,CAAC;AAClB,SAAA;AACD,QAAA,OAAO,EAAE,CAAC;KACb,CAAA;AAEM,IAAA,aAAA,CAAA,SAAA,CAAA,SAAS,GAAhB,UAAiB,QAAgB,EAAE,UAAkB,EAAE,OAAe,EAAA;AAAnC,QAAA,IAAA,UAAA,KAAA,KAAA,CAAA,EAAA,EAAA,UAAkB,GAAA,KAAA,CAAA,EAAA;AAAE,QAAA,IAAA,OAAA,KAAA,KAAA,CAAA,EAAA,EAAA,OAAe,GAAA,KAAA,CAAA,EAAA;AAClE,QAAA,IAAI,QAAQ,EAAE;;YAEV,IAAM,GAAG,GAAG,IAAI,CAAC,oBAAoB,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC;AAC5D,YAAA,IAAI,CAAC,OAAO,IAAI,GAAG,CAAC,MAAM,EAAE;gBACxB,OAAO;oBACH,KAAK,EAAE,CAAC,CAAC;AACT,oBAAA,MAAM,EAAE,sBAAsB;AAC9B,oBAAA,MAAM,EAAE,GAAG;AACX,oBAAA,OAAO,EAAE,CAAC;iBACb,CAAC;AACL,aAAA;;YAED,IAAM,GAAG,GAAG,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC;YAC1C,IAAM,KAAK,GAAG,IAAI,CAAC,wBAAwB,CAAC,QAAQ,CAAC,CAAC;YACtD,IAAM,KAAK,GAAG,IAAI,CAAC,wBAAwB,CAAC,QAAQ,CAAC,CAAC;YACtD,IAAM,GAAG,GAAG,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,CAAC;YAC3C,IAAM,MAAM,GAAG,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,CAAC;;YAE9C,IAAM,UAAU,GAAG,IAAI,CAAC,mBAAmB,CAAC,QAAQ,CAAC,CAAC;YACtD,IAAM,UAAU,GAAG,IAAI,CAAC,mBAAmB,CAAC,QAAQ,CAAC,CAAC;YACtD,IAAM,UAAU,GAAG,IAAI,CAAC,wBAAwB,CAAC,QAAQ,CAAC,CAAC;YAC3D,IAAM,gBAAgB,GAAG,IAAI,CAAC,mCAAmC,CAAC,QAAQ,CAAC,CAAC;YAC5E,IAAM,gBAAgB,GAAG,IAAI,CAAC,mCAAmC,CAAC,QAAQ,CAAC,CAAC;YAC5E,IAAM,iBAAiB,GAAG,IAAI,CAAC,0BAA0B,CAAC,QAAQ,CAAC,CAAC;YACpE,IAAM,UAAU,GAAG,IAAI,CAAC,yBAAyB,CAAC,QAAQ,CAAC,CAAC;YAC5D,IAAM,UAAU,GAAG,IAAI,CAAC,yBAAyB,CAAC,QAAQ,CAAC,CAAC;YAC5D,IAAM,UAAU,GAAG,IAAI,CAAC,yBAAyB,CAAC,QAAQ,CAAC,CAAC;YAE5D,IAAM,KAAK,GACP,GAAG;gBACH,KAAK;gBACL,KAAK;gBACL,GAAG;gBACH,MAAM;gBACN,UAAU;gBACV,UAAU;gBACV,UAAU;gBACV,gBAAgB;gBAChB,gBAAgB;gBAChB,iBAAiB;gBACjB,UAAU;gBACV,UAAU;AACV,gBAAA,UAAU,CAAC;AAEf,YAAA,IAAM,aAAa,GAAG;AAClB,gBAAA,IAAI,EAAE,UAAU;AAChB,gBAAA,IAAI,EAAE,MAAM;AACZ,gBAAA,KAAK,EAAE,QAAQ;AACf,gBAAA,KAAK,EAAE,QAAQ;AACf,gBAAA,KAAK,EAAE,YAAY;gBACnB,CAAC,EAAE,SAAS;aACf,CAAC;YACF,IAAI,IAAI,GAAG,EAAE,CAAC;AACd,YAAA,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE;AAClB,gBAAA,IAAI,CAAC,UAAU,GAAG,aAAa,CAAC;AACnC,aAAA;AAED,YAAA,IAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,UAAU,CAAM,EAAE,CAAM,EAAA;gBACpE,IAAI,KAAK,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC,EAAE;oBACtB,IAAI,CAAC,GAAG,CAAC;AAAE,wBAAA,OAAO,CAAC,CAAC;;wBACf,OAAO,CAAC,CAAC,CAAC;AAClB,iBAAA;gBACD,OAAO,CAAC,GAAG,CAAC,CAAC;AACjB,aAAC,CAAC,CAAC;AACH,YAAA,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE;gBAClB,OAAO;oBACH,KAAK,EAAE,CAAC,CAAC;AACT,oBAAA,MAAM,EAAE,OAAO;AACf,oBAAA,MAAM,EAAE,8CAA8C;AACtD,oBAAA,OAAO,EAAE,CAAC;iBACb,CAAC;AACL,aAAA;AACD,YAAA,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,KAAK,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE;AAC/C,gBAAA,IAAM,GAAG,GAAQ,KAAK,CAAC,KAAK,CAAC,CAAC;gBAC9B,IAAI,GAAG,IAAI,SAAS,EAAE;oBAClB,IAAI,KAAK,IAAI,CAAC,EAAE;AACZ,wBAAA,IAAI,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC,EAAE,UAAU,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE;4BAClD,IAAI,GAAG,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;4BACjC,MAAM;AACT,yBAAA;AACJ,qBAAA;AACD,oBAAA,IAAI,KAAK,KAAK,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE;AAC5B,wBAAA,IAAI,KAAK,CAAC,KAAK,CAAC,IAAI,GAAG,EAAE;AACrB,4BAAA,IAAI,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,UAAU,CAAC,KAAK,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,EAAE,mBAAmB,CAAC,EAAE;AACxE,gCAAA,IAAI,GAAG,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC;gCAChD,MAAM;AACT,6BAAA;AACJ,yBAAA;AAAM,6BAAA;4BACH,OAAO;gCACH,KAAK,EAAE,CAAC,CAAC;AACT,gCAAA,MAAM,EAAE,OAAO;AACf,gCAAA,MAAM,EAAE,kDAAkD;AAC1D,gCAAA,OAAO,EAAE,CAAC;6BACb,CAAC;AACL,yBAAA;AACJ,qBAAA;oBACD,IAAI,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,UAAU,CAAC,KAAK,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,EAAE,UAAU,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE;wBAC7E,IAAI,GAAG,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC;wBACrC,MAAM;AACT,qBAAA;AACJ,iBAAA;AACJ,aAAA;AACD,YAAA,IAAM,OAAO,GAAG,CAAC,KAAK,GAAG,GAAG,IAAI,UAAU,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC;AAEpE,YAAA,IAAI,IAAI,GAAG;AACP,gBAAA,KAAK,EAAE,KAAK;AACZ,gBAAA,MAAM,EAAE,IAAI;gBACZ,OAAO,EAAE,OAAO,IAAI,GAAG,GAAG,GAAG,GAAG,OAAO;aAC1C,CAAC;AAEF,YAAA,IAAI,OAAO,EAAE;AACT,gBAAA,IAAI,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,CAAC;AAC/C,aAAA;AAED,YAAA,OAAO,IAAI,CAAC;AACf,SAAA;QACD,OAAO;AACH,YAAA,KAAK,EAAE,CAAC;AACR,YAAA,MAAM,EAAE,OAAO;AACf,YAAA,OAAO,EAAE,CAAC;SACb,CAAC;KACL,CAAA;IACL,OAAC,aAAA,CAAA;AAAD,CAAC,EAAA;;;;"}