@robinpath/barcode
Advanced tools
+3
-3
| { | ||
| "name": "@robinpath/barcode", | ||
| "version": "0.1.4", | ||
| "version": "0.1.5", | ||
| "publishConfig": { | ||
@@ -24,6 +24,6 @@ "access": "public" | ||
| "peerDependencies": { | ||
| "@wiredwp/robinpath": ">=0.20.0" | ||
| "@robinpath/core": ">=0.20.0" | ||
| }, | ||
| "devDependencies": { | ||
| "@wiredwp/robinpath": "^0.30.1", | ||
| "@robinpath/core": "^0.30.1", | ||
| "tsx": "^4.19.0", | ||
@@ -30,0 +30,0 @@ "typescript": "^5.6.0" |
| import type { BuiltinHandler } from "@wiredwp/robinpath"; | ||
| export declare const BarcodeFunctions: Record<string, BuiltinHandler>; | ||
| export declare const BarcodeFunctionMetadata: { | ||
| qrGenerate: { | ||
| description: string; | ||
| parameters: { | ||
| name: string; | ||
| dataType: string; | ||
| description: string; | ||
| formInputType: string; | ||
| required: boolean; | ||
| }[]; | ||
| returnType: string; | ||
| returnDescription: string; | ||
| example: string; | ||
| }; | ||
| qrToFile: { | ||
| description: string; | ||
| parameters: { | ||
| name: string; | ||
| dataType: string; | ||
| description: string; | ||
| formInputType: string; | ||
| required: boolean; | ||
| }[]; | ||
| returnType: string; | ||
| returnDescription: string; | ||
| example: string; | ||
| }; | ||
| qrToSvg: { | ||
| description: string; | ||
| parameters: { | ||
| name: string; | ||
| dataType: string; | ||
| description: string; | ||
| formInputType: string; | ||
| required: boolean; | ||
| }[]; | ||
| returnType: string; | ||
| returnDescription: string; | ||
| example: string; | ||
| }; | ||
| qrToTerminal: { | ||
| description: string; | ||
| parameters: { | ||
| name: string; | ||
| dataType: string; | ||
| description: string; | ||
| formInputType: string; | ||
| required: boolean; | ||
| }[]; | ||
| returnType: string; | ||
| returnDescription: string; | ||
| example: string; | ||
| }; | ||
| ean13Validate: { | ||
| description: string; | ||
| parameters: { | ||
| name: string; | ||
| dataType: string; | ||
| description: string; | ||
| formInputType: string; | ||
| required: boolean; | ||
| }[]; | ||
| returnType: string; | ||
| returnDescription: string; | ||
| example: string; | ||
| }; | ||
| ean13Checksum: { | ||
| description: string; | ||
| parameters: { | ||
| name: string; | ||
| dataType: string; | ||
| description: string; | ||
| formInputType: string; | ||
| required: boolean; | ||
| }[]; | ||
| returnType: string; | ||
| returnDescription: string; | ||
| example: string; | ||
| }; | ||
| upcValidate: { | ||
| description: string; | ||
| parameters: { | ||
| name: string; | ||
| dataType: string; | ||
| description: string; | ||
| formInputType: string; | ||
| required: boolean; | ||
| }[]; | ||
| returnType: string; | ||
| returnDescription: string; | ||
| example: string; | ||
| }; | ||
| upcChecksum: { | ||
| description: string; | ||
| parameters: { | ||
| name: string; | ||
| dataType: string; | ||
| description: string; | ||
| formInputType: string; | ||
| required: boolean; | ||
| }[]; | ||
| returnType: string; | ||
| returnDescription: string; | ||
| example: string; | ||
| }; | ||
| isbn10Validate: { | ||
| description: string; | ||
| parameters: { | ||
| name: string; | ||
| dataType: string; | ||
| description: string; | ||
| formInputType: string; | ||
| required: boolean; | ||
| }[]; | ||
| returnType: string; | ||
| returnDescription: string; | ||
| example: string; | ||
| }; | ||
| isbn13Validate: { | ||
| description: string; | ||
| parameters: { | ||
| name: string; | ||
| dataType: string; | ||
| description: string; | ||
| formInputType: string; | ||
| required: boolean; | ||
| }[]; | ||
| returnType: string; | ||
| returnDescription: string; | ||
| example: string; | ||
| }; | ||
| isbn10to13: { | ||
| description: string; | ||
| parameters: { | ||
| name: string; | ||
| dataType: string; | ||
| description: string; | ||
| formInputType: string; | ||
| required: boolean; | ||
| }[]; | ||
| returnType: string; | ||
| returnDescription: string; | ||
| example: string; | ||
| }; | ||
| isbn13to10: { | ||
| description: string; | ||
| parameters: { | ||
| name: string; | ||
| dataType: string; | ||
| description: string; | ||
| formInputType: string; | ||
| required: boolean; | ||
| }[]; | ||
| returnType: string; | ||
| returnDescription: string; | ||
| example: string; | ||
| }; | ||
| luhn: { | ||
| description: string; | ||
| parameters: { | ||
| name: string; | ||
| dataType: string; | ||
| description: string; | ||
| formInputType: string; | ||
| required: boolean; | ||
| }[]; | ||
| returnType: string; | ||
| returnDescription: string; | ||
| example: string; | ||
| }; | ||
| luhnGenerate: { | ||
| description: string; | ||
| parameters: { | ||
| name: string; | ||
| dataType: string; | ||
| description: string; | ||
| formInputType: string; | ||
| required: boolean; | ||
| }[]; | ||
| returnType: string; | ||
| returnDescription: string; | ||
| example: string; | ||
| }; | ||
| }; | ||
| export declare const BarcodeModuleMetadata: { | ||
| description: string; | ||
| methods: string[]; | ||
| }; | ||
| //# sourceMappingURL=barcode.d.ts.map |
| {"version":3,"file":"barcode.d.ts","sourceRoot":"","sources":["../src/barcode.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAwjCzD,eAAO,MAAM,gBAAgB,EAAE,MAAM,CAAC,MAAM,EAAE,cAAc,CAAuL,CAAC;AAEpP,eAAO,MAAM,uBAAuB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAenC,CAAC;AAEF,eAAO,MAAM,qBAAqB;;;CAGjC,CAAC"} |
-980
| import { writeFileSync } from "node:fs"; | ||
| // ============================================================================ | ||
| // Pure JavaScript QR Code Encoder | ||
| // Supports versions 1-10, error correction levels L/M/Q/H, | ||
| // numeric, alphanumeric, and byte encoding modes. | ||
| // ============================================================================ | ||
| // --- Constants & Tables --- | ||
| const EC_LEVELS = { L: 0, M: 1, Q: 2, H: 3 }; | ||
| // Mode indicators (4-bit) | ||
| const MODE_NUMERIC = 0b0001; | ||
| const MODE_ALPHANUMERIC = 0b0010; | ||
| const MODE_BYTE = 0b0100; | ||
| // Alphanumeric character table | ||
| const ALPHANUM_CHARS = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ $%*+-./:"; | ||
| // Character count indicator bit lengths per version group [1-9, 10-26, 27-40] | ||
| const CHAR_COUNT_BITS = { | ||
| [MODE_NUMERIC]: [10, 12, 14], | ||
| [MODE_ALPHANUMERIC]: [9, 11, 13], | ||
| [MODE_BYTE]: [8, 16, 16], | ||
| }; | ||
| // Total codewords per version (data + ec) | ||
| const TOTAL_CODEWORDS = [ | ||
| 26, 44, 70, 100, 134, 172, 196, 242, 292, 346, | ||
| ]; | ||
| // Version/EC level table: [totalDataCodewords, ecCWPerBlock, g1Blocks, g1DataCW, g2Blocks, g2DataCW] | ||
| // Sources: ISO/IEC 18004 Table 9 | ||
| const VERSION_EC_TABLE = [ | ||
| // Version 1 | ||
| [[19, 7, 1, 19, 0, 0], [16, 10, 1, 16, 0, 0], [13, 13, 1, 13, 0, 0], [9, 17, 1, 9, 0, 0]], | ||
| // Version 2 | ||
| [[34, 10, 1, 34, 0, 0], [28, 16, 1, 28, 0, 0], [22, 22, 1, 22, 0, 0], [16, 28, 1, 16, 0, 0]], | ||
| // Version 3 | ||
| [[55, 15, 1, 55, 0, 0], [44, 26, 1, 44, 0, 0], [34, 18, 2, 17, 0, 0], [24, 22, 2, 12, 0, 0]], | ||
| // Version 4 | ||
| [[80, 20, 1, 80, 0, 0], [64, 18, 2, 32, 0, 0], [48, 26, 2, 24, 0, 0], [36, 16, 4, 9, 0, 0]], | ||
| // Version 5 | ||
| [[108, 26, 1, 108, 0, 0], [86, 24, 2, 43, 0, 0], [62, 18, 2, 15, 2, 16], [46, 22, 2, 11, 2, 12]], | ||
| // Version 6 | ||
| [[136, 18, 2, 68, 0, 0], [108, 16, 4, 27, 0, 0], [76, 24, 4, 19, 0, 0], [60, 28, 4, 15, 0, 0]], | ||
| // Version 7 | ||
| [[156, 20, 2, 78, 0, 0], [124, 18, 4, 31, 0, 0], [88, 18, 2, 14, 4, 15], [66, 26, 4, 13, 1, 14]], | ||
| // Version 8 | ||
| [[194, 24, 2, 97, 0, 0], [154, 22, 2, 38, 2, 39], [110, 22, 4, 18, 2, 19], [86, 26, 4, 14, 2, 15]], | ||
| // Version 9 | ||
| [[232, 30, 2, 116, 0, 0], [182, 22, 3, 36, 2, 37], [132, 20, 4, 16, 4, 17], [100, 24, 4, 12, 4, 13]], | ||
| // Version 10 | ||
| [[271, 18, 2, 68, 2, 69], [216, 26, 4, 43, 1, 44], [154, 24, 6, 19, 2, 20], [122, 28, 6, 15, 2, 16]], | ||
| ]; | ||
| // Alignment pattern positions per version (version 1 has none) | ||
| const ALIGNMENT_POSITIONS = [ | ||
| [], // v1 | ||
| [6, 18], // v2 | ||
| [6, 22], // v3 | ||
| [6, 26], // v4 | ||
| [6, 30], // v5 | ||
| [6, 34], // v6 | ||
| [6, 22, 38], // v7 | ||
| [6, 24, 42], // v8 | ||
| [6, 26, 46], // v9 | ||
| [6, 28, 50], // v10 | ||
| ]; | ||
| // Format information strings (15 bits) for each EC level and mask pattern | ||
| // Pre-calculated with BCH error correction | ||
| const FORMAT_INFO_STRINGS = [ | ||
| // L (0) | ||
| [0x77c4, 0x72f3, 0x7daa, 0x789d, 0x662f, 0x6318, 0x6c41, 0x6976], | ||
| // M (1) | ||
| [0x5412, 0x5125, 0x5e7c, 0x5b4b, 0x45f9, 0x40ce, 0x4f97, 0x4aa0], | ||
| // Q (2) | ||
| [0x355f, 0x3068, 0x3f31, 0x3a06, 0x24b4, 0x2183, 0x2eda, 0x2bed], | ||
| // H (3) | ||
| [0x1689, 0x13be, 0x1ce7, 0x19d0, 0x0762, 0x0255, 0x0d0c, 0x083b], | ||
| ]; | ||
| // --- Reed-Solomon Error Correction --- | ||
| // GF(256) with primitive polynomial 0x11d (x^8 + x^4 + x^3 + x^2 + 1) | ||
| const GF_EXP = new Uint8Array(512); | ||
| const GF_LOG = new Uint8Array(256); | ||
| function initGaloisField() { | ||
| let x = 1; | ||
| for (let i = 0; i < 255; i++) { | ||
| GF_EXP[i] = x; | ||
| GF_LOG[x] = i; | ||
| x <<= 1; | ||
| if (x >= 256) | ||
| x ^= 0x11d; | ||
| } | ||
| for (let i = 255; i < 512; i++) { | ||
| GF_EXP[i] = GF_EXP[i - 255]; | ||
| } | ||
| } | ||
| initGaloisField(); | ||
| function gfMul(a, b) { | ||
| if (a === 0 || b === 0) | ||
| return 0; | ||
| return GF_EXP[GF_LOG[a] + GF_LOG[b]]; | ||
| } | ||
| function rsGeneratorPoly(numECCodewords) { | ||
| let gen = new Uint8Array([1]); | ||
| for (let i = 0; i < numECCodewords; i++) { | ||
| const newGen = new Uint8Array(gen.length + 1); | ||
| for (let j = 0; j < gen.length; j++) { | ||
| newGen[j] ^= gen[j]; | ||
| newGen[j + 1] ^= gfMul(gen[j], GF_EXP[i]); | ||
| } | ||
| gen = newGen; | ||
| } | ||
| return gen; | ||
| } | ||
| function rsEncode(data, numECCodewords) { | ||
| const gen = rsGeneratorPoly(numECCodewords); | ||
| const result = new Uint8Array(data.length + numECCodewords); | ||
| result.set(data); | ||
| for (let i = 0; i < data.length; i++) { | ||
| const coef = result[i]; | ||
| if (coef !== 0) { | ||
| for (let j = 0; j < gen.length; j++) { | ||
| result[i + j] ^= gfMul(gen[j], coef); | ||
| } | ||
| } | ||
| } | ||
| return result.slice(data.length); | ||
| } | ||
| // --- Data Encoding --- | ||
| function detectMode(text) { | ||
| if (/^\d+$/.test(text)) | ||
| return MODE_NUMERIC; | ||
| if (text.split("").every((c) => ALPHANUM_CHARS.includes(c))) | ||
| return MODE_ALPHANUMERIC; | ||
| return MODE_BYTE; | ||
| } | ||
| function getCharCountBits(mode, version) { | ||
| const group = version <= 9 ? 0 : version <= 26 ? 1 : 2; | ||
| return CHAR_COUNT_BITS[mode][group]; | ||
| } | ||
| function getVersionECInfo(version, ecLevel) { | ||
| const row = VERSION_EC_TABLE[version - 1][ecLevel]; | ||
| return { | ||
| totalDataCodewords: row[0], | ||
| ecCodewordsPerBlock: row[1], | ||
| group1Blocks: row[2], | ||
| group1DataCW: row[3], | ||
| group2Blocks: row[4], | ||
| group2DataCW: row[5], | ||
| }; | ||
| } | ||
| function selectVersion(text, mode, ecLevel) { | ||
| const dataLen = mode === MODE_BYTE ? new TextEncoder().encode(text).length : text.length; | ||
| for (let v = 1; v <= 10; v++) { | ||
| const info = getVersionECInfo(v, ecLevel); | ||
| const totalBits = info.totalDataCodewords * 8; | ||
| const ccBits = getCharCountBits(mode, v); | ||
| let dataBits; | ||
| if (mode === MODE_NUMERIC) { | ||
| dataBits = Math.floor(dataLen / 3) * 10 + (dataLen % 3 === 2 ? 7 : dataLen % 3 === 1 ? 4 : 0); | ||
| } | ||
| else if (mode === MODE_ALPHANUMERIC) { | ||
| dataBits = Math.floor(dataLen / 2) * 11 + (dataLen % 2) * 6; | ||
| } | ||
| else { | ||
| dataBits = dataLen * 8; | ||
| } | ||
| const needed = 4 + ccBits + dataBits; | ||
| if (needed <= totalBits) | ||
| return v; | ||
| } | ||
| throw new Error("Data too long for QR versions 1-10"); | ||
| } | ||
| class BitBuffer { | ||
| bits = []; | ||
| get length() { return this.bits.length; } | ||
| put(value, numBits) { | ||
| for (let i = numBits - 1; i >= 0; i--) { | ||
| this.bits.push((value >> i) & 1); | ||
| } | ||
| } | ||
| getByte(index) { | ||
| let byte = 0; | ||
| for (let i = 0; i < 8; i++) { | ||
| const bitIndex = index * 8 + i; | ||
| if (bitIndex < this.bits.length) { | ||
| byte = (byte << 1) | this.bits[bitIndex]; | ||
| } | ||
| else { | ||
| byte <<= 1; | ||
| } | ||
| } | ||
| return byte; | ||
| } | ||
| } | ||
| function encodeData(text, version, ecLevel) { | ||
| const mode = detectMode(text); | ||
| const info = getVersionECInfo(version, ecLevel); | ||
| const totalDataCodewords = info.totalDataCodewords; | ||
| const buffer = new BitBuffer(); | ||
| // Mode indicator | ||
| buffer.put(mode, 4); | ||
| // Character count | ||
| const ccBits = getCharCountBits(mode, version); | ||
| if (mode === MODE_NUMERIC) { | ||
| buffer.put(text.length, ccBits); | ||
| for (let i = 0; i < text.length; i += 3) { | ||
| const group = text.substring(i, i + 3); | ||
| const bits = group.length === 3 ? 10 : group.length === 2 ? 7 : 4; | ||
| buffer.put(parseInt(group, 10), bits); | ||
| } | ||
| } | ||
| else if (mode === MODE_ALPHANUMERIC) { | ||
| buffer.put(text.length, ccBits); | ||
| for (let i = 0; i < text.length; i += 2) { | ||
| if (i + 1 < text.length) { | ||
| const val = ALPHANUM_CHARS.indexOf(text[i]) * 45 + ALPHANUM_CHARS.indexOf(text[i + 1]); | ||
| buffer.put(val, 11); | ||
| } | ||
| else { | ||
| buffer.put(ALPHANUM_CHARS.indexOf(text[i]), 6); | ||
| } | ||
| } | ||
| } | ||
| else { | ||
| const bytes = new TextEncoder().encode(text); | ||
| buffer.put(bytes.length, ccBits); | ||
| for (const b of bytes) { | ||
| buffer.put(b, 8); | ||
| } | ||
| } | ||
| // Terminator | ||
| const totalBits = totalDataCodewords * 8; | ||
| const terminatorLen = Math.min(4, totalBits - buffer.length); | ||
| buffer.put(0, terminatorLen); | ||
| // Pad to byte boundary | ||
| while (buffer.length % 8 !== 0) { | ||
| buffer.put(0, 1); | ||
| } | ||
| // Pad codewords | ||
| const padPatterns = [0xec, 0x11]; | ||
| let padIdx = 0; | ||
| while (buffer.length < totalBits) { | ||
| buffer.put(padPatterns[padIdx], 8); | ||
| padIdx = 1 - padIdx; | ||
| } | ||
| // Convert to bytes | ||
| const data = new Uint8Array(totalDataCodewords); | ||
| for (let i = 0; i < totalDataCodewords; i++) { | ||
| data[i] = buffer.getByte(i); | ||
| } | ||
| return data; | ||
| } | ||
| // --- Error Correction & Interleaving --- | ||
| function generateECCodewords(data, version, ecLevel) { | ||
| const info = getVersionECInfo(version, ecLevel); | ||
| const { ecCodewordsPerBlock, group1Blocks, group1DataCW, group2Blocks, group2DataCW } = info; | ||
| const totalCodewords = TOTAL_CODEWORDS[version - 1]; | ||
| const dataBlocks = []; | ||
| const ecBlocks = []; | ||
| let offset = 0; | ||
| // Group 1 | ||
| for (let i = 0; i < group1Blocks; i++) { | ||
| const block = data.slice(offset, offset + group1DataCW); | ||
| dataBlocks.push(block); | ||
| ecBlocks.push(rsEncode(block, ecCodewordsPerBlock)); | ||
| offset += group1DataCW; | ||
| } | ||
| // Group 2 | ||
| for (let i = 0; i < group2Blocks; i++) { | ||
| const block = data.slice(offset, offset + group2DataCW); | ||
| dataBlocks.push(block); | ||
| ecBlocks.push(rsEncode(block, ecCodewordsPerBlock)); | ||
| offset += group2DataCW; | ||
| } | ||
| // Interleave data codewords | ||
| const result = []; | ||
| const maxDataCW = Math.max(group1DataCW, group2DataCW || 0); | ||
| for (let i = 0; i < maxDataCW; i++) { | ||
| for (const block of dataBlocks) { | ||
| if (i < block.length) | ||
| result.push(block[i]); | ||
| } | ||
| } | ||
| // Interleave EC codewords | ||
| for (let i = 0; i < ecCodewordsPerBlock; i++) { | ||
| for (const block of ecBlocks) { | ||
| if (i < block.length) | ||
| result.push(block[i]); | ||
| } | ||
| } | ||
| // Remainder bits are handled during matrix placement | ||
| const output = new Uint8Array(totalCodewords); | ||
| for (let i = 0; i < Math.min(result.length, totalCodewords); i++) { | ||
| output[i] = result[i]; | ||
| } | ||
| return output; | ||
| } | ||
| // --- QR Matrix Construction --- | ||
| function getModuleCount(version) { | ||
| return version * 4 + 17; | ||
| } | ||
| function createMatrix(size) { | ||
| return Array.from({ length: size }, () => Array(size).fill(null)); | ||
| } | ||
| function placeFinderPattern(matrix, row, col) { | ||
| for (let r = -1; r <= 7; r++) { | ||
| for (let c = -1; c <= 7; c++) { | ||
| const mr = row + r; | ||
| const mc = col + c; | ||
| if (mr < 0 || mr >= matrix.length || mc < 0 || mc >= matrix.length) | ||
| continue; | ||
| if ((r >= 0 && r <= 6 && (c === 0 || c === 6)) || | ||
| (c >= 0 && c <= 6 && (r === 0 || r === 6)) || | ||
| (r >= 2 && r <= 4 && c >= 2 && c <= 4)) { | ||
| matrix[mr][mc] = 1; | ||
| } | ||
| else { | ||
| matrix[mr][mc] = 0; | ||
| } | ||
| } | ||
| } | ||
| } | ||
| function placeAlignmentPattern(matrix, row, col) { | ||
| for (let r = -2; r <= 2; r++) { | ||
| for (let c = -2; c <= 2; c++) { | ||
| if (Math.abs(r) === 2 || Math.abs(c) === 2 || (r === 0 && c === 0)) { | ||
| matrix[row + r][col + c] = 1; | ||
| } | ||
| else { | ||
| matrix[row + r][col + c] = 0; | ||
| } | ||
| } | ||
| } | ||
| } | ||
| function placeTimingPatterns(matrix) { | ||
| const size = matrix.length; | ||
| for (let i = 8; i < size - 8; i++) { | ||
| if (matrix[6][i] === null) | ||
| matrix[6][i] = i % 2 === 0 ? 1 : 0; | ||
| if (matrix[i][6] === null) | ||
| matrix[i][6] = i % 2 === 0 ? 1 : 0; | ||
| } | ||
| } | ||
| function reserveFormatInfo(matrix) { | ||
| const size = matrix.length; | ||
| // Around top-left finder | ||
| for (let i = 0; i <= 8; i++) { | ||
| if (matrix[8][i] === null) | ||
| matrix[8][i] = 0; | ||
| if (matrix[i][8] === null) | ||
| matrix[i][8] = 0; | ||
| } | ||
| // Around top-right finder | ||
| for (let i = 0; i <= 7; i++) { | ||
| if (matrix[8][size - 1 - i] === null) | ||
| matrix[8][size - 1 - i] = 0; | ||
| } | ||
| // Around bottom-left finder | ||
| for (let i = 0; i <= 7; i++) { | ||
| if (matrix[size - 1 - i][8] === null) | ||
| matrix[size - 1 - i][8] = 0; | ||
| } | ||
| // Dark module | ||
| matrix[size - 8][8] = 1; | ||
| } | ||
| function placeAllPatterns(matrix, version) { | ||
| const size = matrix.length; | ||
| // Finder patterns | ||
| placeFinderPattern(matrix, 0, 0); | ||
| placeFinderPattern(matrix, 0, size - 7); | ||
| placeFinderPattern(matrix, size - 7, 0); | ||
| // Alignment patterns (version 2+) | ||
| if (version >= 2) { | ||
| const positions = ALIGNMENT_POSITIONS[version - 1]; | ||
| for (const r of positions) { | ||
| for (const c of positions) { | ||
| // Skip if overlapping with finder patterns | ||
| if (r <= 8 && c <= 8) | ||
| continue; // top-left | ||
| if (r <= 8 && c >= size - 8) | ||
| continue; // top-right | ||
| if (r >= size - 8 && c <= 8) | ||
| continue; // bottom-left | ||
| placeAlignmentPattern(matrix, r, c); | ||
| } | ||
| } | ||
| } | ||
| // Timing patterns | ||
| placeTimingPatterns(matrix); | ||
| // Reserve format info areas | ||
| reserveFormatInfo(matrix); | ||
| } | ||
| function placeData(matrix, data) { | ||
| const size = matrix.length; | ||
| let bitIndex = 0; | ||
| const totalBits = data.length * 8; | ||
| // Data placement goes right-to-left in 2-column strips, alternating up and down | ||
| let col = size - 1; | ||
| let goingUp = true; | ||
| while (col >= 0) { | ||
| // Skip column 6 (timing pattern) | ||
| if (col === 6) | ||
| col--; | ||
| for (let row = 0; row < size; row++) { | ||
| const actualRow = goingUp ? size - 1 - row : row; | ||
| for (let c = 0; c < 2; c++) { | ||
| const actualCol = col - c; | ||
| if (actualCol < 0) | ||
| continue; | ||
| if (matrix[actualRow][actualCol] !== null) | ||
| continue; | ||
| if (bitIndex < totalBits) { | ||
| const byteIndex = Math.floor(bitIndex / 8); | ||
| const bitOffset = 7 - (bitIndex % 8); | ||
| matrix[actualRow][actualCol] = (data[byteIndex] >> bitOffset) & 1; | ||
| bitIndex++; | ||
| } | ||
| else { | ||
| matrix[actualRow][actualCol] = 0; | ||
| } | ||
| } | ||
| } | ||
| goingUp = !goingUp; | ||
| col -= 2; | ||
| } | ||
| } | ||
| // --- Masking --- | ||
| function getMaskFunction(pattern) { | ||
| switch (pattern) { | ||
| case 0: return (r, c) => (r + c) % 2 === 0; | ||
| case 1: return (r) => r % 2 === 0; | ||
| case 2: return (_, c) => c % 3 === 0; | ||
| case 3: return (r, c) => (r + c) % 3 === 0; | ||
| case 4: return (r, c) => (Math.floor(r / 2) + Math.floor(c / 3)) % 2 === 0; | ||
| case 5: return (r, c) => ((r * c) % 2 + (r * c) % 3) === 0; | ||
| case 6: return (r, c) => ((r * c) % 2 + (r * c) % 3) % 2 === 0; | ||
| case 7: return (r, c) => ((r + c) % 2 + (r * c) % 3) % 2 === 0; | ||
| default: return (r, c) => (r + c) % 2 === 0; | ||
| } | ||
| } | ||
| function isDataModule(matrix, patternMatrix, row, col) { | ||
| return patternMatrix[row][col] === null; | ||
| } | ||
| function applyMask(matrix, patternMatrix, maskPattern) { | ||
| const size = matrix.length; | ||
| const masked = matrix.map((row) => [...row]); | ||
| const maskFn = getMaskFunction(maskPattern); | ||
| for (let r = 0; r < size; r++) { | ||
| for (let c = 0; c < size; c++) { | ||
| if (isDataModule(matrix, patternMatrix, r, c)) { | ||
| if (maskFn(r, c)) { | ||
| masked[r][c] = masked[r][c] === 1 ? 0 : 1; | ||
| } | ||
| } | ||
| } | ||
| } | ||
| return masked; | ||
| } | ||
| function writeFormatInfo(matrix, ecLevel, maskPattern) { | ||
| const size = matrix.length; | ||
| const formatBits = FORMAT_INFO_STRINGS[ecLevel][maskPattern]; | ||
| // Place format info bits | ||
| // Horizontal strip near top-left | ||
| const positions1 = [ | ||
| [8, 0], [8, 1], [8, 2], [8, 3], [8, 4], [8, 5], [8, 7], [8, 8], | ||
| [7, 8], [5, 8], [4, 8], [3, 8], [2, 8], [1, 8], [0, 8], | ||
| ]; | ||
| // Second copy | ||
| const positions2 = []; | ||
| for (let i = 0; i < 7; i++) | ||
| positions2.push([size - 1 - i, 8]); | ||
| for (let i = 0; i < 8; i++) | ||
| positions2.push([8, size - 8 + i]); | ||
| for (let i = 0; i < 15; i++) { | ||
| const bit = (formatBits >> (14 - i)) & 1; | ||
| const [r1, c1] = positions1[i]; | ||
| matrix[r1][c1] = bit; | ||
| const [r2, c2] = positions2[i]; | ||
| matrix[r2][c2] = bit; | ||
| } | ||
| } | ||
| // --- Penalty scoring --- | ||
| function calculatePenalty(matrix) { | ||
| const size = matrix.length; | ||
| let penalty = 0; | ||
| // Rule 1: Groups of 5+ same-colored modules in a row/column | ||
| for (let r = 0; r < size; r++) { | ||
| let count = 1; | ||
| for (let c = 1; c < size; c++) { | ||
| if (matrix[r][c] === matrix[r][c - 1]) { | ||
| count++; | ||
| if (c === size - 1 && count >= 5) | ||
| penalty += count - 2; | ||
| } | ||
| else { | ||
| if (count >= 5) | ||
| penalty += count - 2; | ||
| count = 1; | ||
| } | ||
| } | ||
| } | ||
| for (let c = 0; c < size; c++) { | ||
| let count = 1; | ||
| for (let r = 1; r < size; r++) { | ||
| if (matrix[r][c] === matrix[r - 1][c]) { | ||
| count++; | ||
| if (r === size - 1 && count >= 5) | ||
| penalty += count - 2; | ||
| } | ||
| else { | ||
| if (count >= 5) | ||
| penalty += count - 2; | ||
| count = 1; | ||
| } | ||
| } | ||
| } | ||
| // Rule 2: 2x2 blocks of same color | ||
| for (let r = 0; r < size - 1; r++) { | ||
| for (let c = 0; c < size - 1; c++) { | ||
| const val = matrix[r][c]; | ||
| if (val === matrix[r][c + 1] && val === matrix[r + 1][c] && val === matrix[r + 1][c + 1]) { | ||
| penalty += 3; | ||
| } | ||
| } | ||
| } | ||
| // Rule 3: Finder-like patterns | ||
| for (let r = 0; r < size; r++) { | ||
| for (let c = 0; c < size - 10; c++) { | ||
| if (matrix[r][c] === 1 && matrix[r][c + 1] === 0 && matrix[r][c + 2] === 1 && | ||
| matrix[r][c + 3] === 1 && matrix[r][c + 4] === 1 && matrix[r][c + 5] === 0 && | ||
| matrix[r][c + 6] === 1 && matrix[r][c + 7] === 0 && matrix[r][c + 8] === 0 && | ||
| matrix[r][c + 9] === 0 && matrix[r][c + 10] === 0) | ||
| penalty += 40; | ||
| if (matrix[r][c] === 0 && matrix[r][c + 1] === 0 && matrix[r][c + 2] === 0 && | ||
| matrix[r][c + 3] === 0 && matrix[r][c + 4] === 1 && matrix[r][c + 5] === 0 && | ||
| matrix[r][c + 6] === 1 && matrix[r][c + 7] === 1 && matrix[r][c + 8] === 1 && | ||
| matrix[r][c + 9] === 0 && matrix[r][c + 10] === 1) | ||
| penalty += 40; | ||
| } | ||
| } | ||
| for (let c = 0; c < size; c++) { | ||
| for (let r = 0; r < size - 10; r++) { | ||
| if (matrix[r][c] === 1 && matrix[r + 1][c] === 0 && matrix[r + 2][c] === 1 && | ||
| matrix[r + 3][c] === 1 && matrix[r + 4][c] === 1 && matrix[r + 5][c] === 0 && | ||
| matrix[r + 6][c] === 1 && matrix[r + 7][c] === 0 && matrix[r + 8][c] === 0 && | ||
| matrix[r + 9][c] === 0 && matrix[r + 10][c] === 0) | ||
| penalty += 40; | ||
| if (matrix[r][c] === 0 && matrix[r + 1][c] === 0 && matrix[r + 2][c] === 0 && | ||
| matrix[r + 3][c] === 0 && matrix[r + 4][c] === 1 && matrix[r + 5][c] === 0 && | ||
| matrix[r + 6][c] === 1 && matrix[r + 7][c] === 1 && matrix[r + 8][c] === 1 && | ||
| matrix[r + 9][c] === 0 && matrix[r + 10][c] === 1) | ||
| penalty += 40; | ||
| } | ||
| } | ||
| // Rule 4: Proportion of dark modules | ||
| let darkCount = 0; | ||
| for (let r = 0; r < size; r++) { | ||
| for (let c = 0; c < size; c++) { | ||
| if (matrix[r][c] === 1) | ||
| darkCount++; | ||
| } | ||
| } | ||
| const percent = (darkCount / (size * size)) * 100; | ||
| const prevFive = Math.floor(percent / 5) * 5; | ||
| const nextFive = prevFive + 5; | ||
| penalty += Math.min(Math.abs(prevFive - 50) / 5, Math.abs(nextFive - 50) / 5) * 10; | ||
| return penalty; | ||
| } | ||
| // --- Main QR Code Generation --- | ||
| function generateQRMatrix(text, ecLevelStr = "M") { | ||
| const ecLevel = EC_LEVELS[ecLevelStr.toUpperCase()] ?? 1; | ||
| const mode = detectMode(text); | ||
| const version = selectVersion(text, mode, ecLevel); | ||
| const size = getModuleCount(version); | ||
| // Encode data | ||
| const data = encodeData(text, version, ecLevel); | ||
| // Generate error correction and interleave | ||
| const codewords = generateECCodewords(data, version, ecLevel); | ||
| // Create pattern template (for knowing which modules are data vs pattern) | ||
| const patternMatrix = createMatrix(size); | ||
| placeAllPatterns(patternMatrix, version); | ||
| // Create actual matrix with patterns + data | ||
| const baseMatrix = createMatrix(size); | ||
| placeAllPatterns(baseMatrix, version); | ||
| placeData(baseMatrix, codewords); | ||
| // Try all 8 mask patterns, pick best | ||
| let bestMask = 0; | ||
| let bestPenalty = Infinity; | ||
| let bestMatrix = baseMatrix; | ||
| for (let mask = 0; mask < 8; mask++) { | ||
| const masked = applyMask(baseMatrix, patternMatrix, mask); | ||
| writeFormatInfo(masked, ecLevel, mask); | ||
| const penalty = calculatePenalty(masked); | ||
| if (penalty < bestPenalty) { | ||
| bestPenalty = penalty; | ||
| bestMask = mask; | ||
| bestMatrix = masked; | ||
| } | ||
| } | ||
| // Apply best mask to fresh copy | ||
| const finalMatrix = applyMask(baseMatrix, patternMatrix, bestMask); | ||
| writeFormatInfo(finalMatrix, ecLevel, bestMask); | ||
| return finalMatrix; | ||
| } | ||
| // --- Output Formats --- | ||
| function matrixToSvg(matrix, opts = {}) { | ||
| const moduleCount = matrix.length; | ||
| const margin = opts.margin ?? 4; | ||
| const width = opts.width ?? (moduleCount + margin * 2); | ||
| const scale = width / (moduleCount + margin * 2); | ||
| const darkColor = opts.darkColor ?? "#000000"; | ||
| const lightColor = opts.lightColor ?? "#ffffff"; | ||
| let svg = `<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 ${moduleCount + margin * 2} ${moduleCount + margin * 2}" width="${width}" height="${width}" shape-rendering="crispEdges">`; | ||
| svg += `<rect width="100%" height="100%" fill="${lightColor}"/>`; | ||
| for (let r = 0; r < moduleCount; r++) { | ||
| for (let c = 0; c < moduleCount; c++) { | ||
| if (matrix[r][c] === 1) { | ||
| svg += `<rect x="${c + margin}" y="${r + margin}" width="1" height="1" fill="${darkColor}"/>`; | ||
| } | ||
| } | ||
| } | ||
| svg += "</svg>"; | ||
| return svg; | ||
| } | ||
| function matrixToTerminal(matrix) { | ||
| const moduleCount = matrix.length; | ||
| const margin = 2; | ||
| const lines = []; | ||
| // Use Unicode block characters: upper half block, lower half block, full block | ||
| // Each character row represents 2 module rows | ||
| // White on white = space, Black on black = full block | ||
| // Black on white = upper half, White on black = lower half | ||
| const totalRows = moduleCount + margin * 2; | ||
| const totalCols = moduleCount + margin * 2; | ||
| const getModule = (r, c) => { | ||
| const mr = r - margin; | ||
| const mc = c - margin; | ||
| if (mr < 0 || mr >= moduleCount || mc < 0 || mc >= moduleCount) | ||
| return false; | ||
| return matrix[mr][mc] === 1; | ||
| }; | ||
| for (let r = 0; r < totalRows; r += 2) { | ||
| let line = ""; | ||
| for (let c = 0; c < totalCols; c++) { | ||
| const top = getModule(r, c); | ||
| const bottom = r + 1 < totalRows ? getModule(r + 1, c) : false; | ||
| if (top && bottom) { | ||
| line += "\u2588"; // Full block | ||
| } | ||
| else if (top && !bottom) { | ||
| line += "\u2580"; // Upper half block | ||
| } | ||
| else if (!top && bottom) { | ||
| line += "\u2584"; // Lower half block | ||
| } | ||
| else { | ||
| line += " "; | ||
| } | ||
| } | ||
| lines.push(line); | ||
| } | ||
| return lines.join("\n"); | ||
| } | ||
| // --- Minimal PNG encoder (uncompressed, no dependencies) --- | ||
| function crc32(data) { | ||
| let crc = 0xffffffff; | ||
| for (let i = 0; i < data.length; i++) { | ||
| crc ^= data[i]; | ||
| for (let j = 0; j < 8; j++) { | ||
| crc = (crc >>> 1) ^ (crc & 1 ? 0xedb88320 : 0); | ||
| } | ||
| } | ||
| return (crc ^ 0xffffffff) >>> 0; | ||
| } | ||
| function adler32(data) { | ||
| let a = 1; | ||
| let b = 0; | ||
| for (let i = 0; i < data.length; i++) { | ||
| a = (a + data[i]) % 65521; | ||
| b = (b + a) % 65521; | ||
| } | ||
| return ((b << 16) | a) >>> 0; | ||
| } | ||
| function deflateStored(data) { | ||
| // Use stored (uncompressed) deflate blocks | ||
| // Each block: 1 byte header + 2 bytes len + 2 bytes nlen + data | ||
| const maxBlockSize = 65535; | ||
| const numBlocks = Math.ceil(data.length / maxBlockSize) || 1; | ||
| const output = []; | ||
| for (let i = 0; i < numBlocks; i++) { | ||
| const start = i * maxBlockSize; | ||
| const end = Math.min(start + maxBlockSize, data.length); | ||
| const block = data.slice(start, end); | ||
| const isLast = i === numBlocks - 1; | ||
| output.push(isLast ? 0x01 : 0x00); // BFINAL + BTYPE=00 (stored) | ||
| const len = block.length; | ||
| output.push(len & 0xff, (len >> 8) & 0xff); | ||
| output.push((~len) & 0xff, ((~len) >> 8) & 0xff); | ||
| for (let j = 0; j < block.length; j++) { | ||
| output.push(block[j]); | ||
| } | ||
| } | ||
| return new Uint8Array(output); | ||
| } | ||
| function createZlibData(rawData) { | ||
| const deflated = deflateStored(rawData); | ||
| const adler = adler32(rawData); | ||
| const result = new Uint8Array(2 + deflated.length + 4); | ||
| // Zlib header: CMF=0x78, FLG=0x01 (no dict, level 0) | ||
| result[0] = 0x78; | ||
| result[1] = 0x01; | ||
| result.set(deflated, 2); | ||
| // Adler32 checksum (big-endian) | ||
| const off = 2 + deflated.length; | ||
| result[off] = (adler >> 24) & 0xff; | ||
| result[off + 1] = (adler >> 16) & 0xff; | ||
| result[off + 2] = (adler >> 8) & 0xff; | ||
| result[off + 3] = adler & 0xff; | ||
| return result; | ||
| } | ||
| function pngChunk(type, data) { | ||
| const typeBytes = new TextEncoder().encode(type); | ||
| const chunk = new Uint8Array(4 + 4 + data.length + 4); | ||
| // Length (big-endian) | ||
| const len = data.length; | ||
| chunk[0] = (len >> 24) & 0xff; | ||
| chunk[1] = (len >> 16) & 0xff; | ||
| chunk[2] = (len >> 8) & 0xff; | ||
| chunk[3] = len & 0xff; | ||
| // Type | ||
| chunk.set(typeBytes, 4); | ||
| // Data | ||
| chunk.set(data, 8); | ||
| // CRC over type + data | ||
| const crcData = new Uint8Array(4 + data.length); | ||
| crcData.set(typeBytes, 0); | ||
| crcData.set(data, 4); | ||
| const crc = crc32(crcData); | ||
| chunk[8 + data.length] = (crc >> 24) & 0xff; | ||
| chunk[9 + data.length] = (crc >> 16) & 0xff; | ||
| chunk[10 + data.length] = (crc >> 8) & 0xff; | ||
| chunk[11 + data.length] = crc & 0xff; | ||
| return chunk; | ||
| } | ||
| function matrixToPng(matrix, opts = {}) { | ||
| const moduleCount = matrix.length; | ||
| const scale = opts.scale ?? 10; | ||
| const margin = opts.margin ?? 4; | ||
| const totalModules = moduleCount + margin * 2; | ||
| const imgSize = totalModules * scale; | ||
| // Build raw image data (1-bit indexed, but we'll use grayscale for simplicity) | ||
| // Each row: filter byte (0) + pixel data | ||
| const rawData = new Uint8Array((1 + imgSize) * imgSize); | ||
| for (let py = 0; py < imgSize; py++) { | ||
| const rowOffset = py * (1 + imgSize); | ||
| rawData[rowOffset] = 0; // No filter | ||
| const moduleRow = Math.floor(py / scale) - margin; | ||
| for (let px = 0; px < imgSize; px++) { | ||
| const moduleCol = Math.floor(px / scale) - margin; | ||
| let isDark = false; | ||
| if (moduleRow >= 0 && moduleRow < moduleCount && moduleCol >= 0 && moduleCol < moduleCount) { | ||
| isDark = matrix[moduleRow][moduleCol] === 1; | ||
| } | ||
| rawData[rowOffset + 1 + px] = isDark ? 0 : 255; | ||
| } | ||
| } | ||
| // Create PNG | ||
| const PNG_SIGNATURE = new Uint8Array([137, 80, 78, 71, 13, 10, 26, 10]); | ||
| // IHDR | ||
| const ihdr = new Uint8Array(13); | ||
| ihdr[0] = (imgSize >> 24) & 0xff; | ||
| ihdr[1] = (imgSize >> 16) & 0xff; | ||
| ihdr[2] = (imgSize >> 8) & 0xff; | ||
| ihdr[3] = imgSize & 0xff; | ||
| ihdr[4] = (imgSize >> 24) & 0xff; | ||
| ihdr[5] = (imgSize >> 16) & 0xff; | ||
| ihdr[6] = (imgSize >> 8) & 0xff; | ||
| ihdr[7] = imgSize & 0xff; | ||
| ihdr[8] = 8; // Bit depth | ||
| ihdr[9] = 0; // Color type: grayscale | ||
| ihdr[10] = 0; // Compression | ||
| ihdr[11] = 0; // Filter | ||
| ihdr[12] = 0; // Interlace | ||
| // IDAT | ||
| const compressedData = createZlibData(rawData); | ||
| // IEND | ||
| const iendData = new Uint8Array(0); | ||
| const chunks = [ | ||
| PNG_SIGNATURE, | ||
| pngChunk("IHDR", ihdr), | ||
| pngChunk("IDAT", compressedData), | ||
| pngChunk("IEND", iendData), | ||
| ]; | ||
| const totalLen = chunks.reduce((sum, c) => sum + c.length, 0); | ||
| const png = new Uint8Array(totalLen); | ||
| let offset = 0; | ||
| for (const chunk of chunks) { | ||
| png.set(chunk, offset); | ||
| offset += chunk.length; | ||
| } | ||
| return png; | ||
| } | ||
| function matrixToDataUrl(matrix, opts = {}) { | ||
| const png = matrixToPng(matrix, opts); | ||
| // Manual base64 encoding | ||
| const base64 = uint8ArrayToBase64(png); | ||
| return `data:image/png;base64,${base64}`; | ||
| } | ||
| function uint8ArrayToBase64(bytes) { | ||
| const chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"; | ||
| let result = ""; | ||
| const len = bytes.length; | ||
| for (let i = 0; i < len; i += 3) { | ||
| const b0 = bytes[i]; | ||
| const b1 = i + 1 < len ? bytes[i + 1] : 0; | ||
| const b2 = i + 2 < len ? bytes[i + 2] : 0; | ||
| result += chars[(b0 >> 2) & 0x3f]; | ||
| result += chars[((b0 << 4) | (b1 >> 4)) & 0x3f]; | ||
| result += i + 1 < len ? chars[((b1 << 2) | (b2 >> 6)) & 0x3f] : "="; | ||
| result += i + 2 < len ? chars[b2 & 0x3f] : "="; | ||
| } | ||
| return result; | ||
| } | ||
| function parseQROptions(opts) { | ||
| if (typeof opts !== "object" || opts === null) | ||
| return {}; | ||
| return opts; | ||
| } | ||
| // ============================================================================ | ||
| // Module Handlers | ||
| // ============================================================================ | ||
| const qrGenerate = (args) => { | ||
| const text = String(args[0] ?? ""); | ||
| const opts = parseQROptions(args[1]); | ||
| const ecLevel = opts.errorCorrectionLevel ?? "M"; | ||
| const matrix = generateQRMatrix(text, ecLevel); | ||
| return matrixToDataUrl(matrix, { scale: opts.scale ?? 10, margin: opts.margin ?? 4 }); | ||
| }; | ||
| const qrToFile = (args) => { | ||
| const text = String(args[0] ?? ""); | ||
| const filePath = String(args[1] ?? "qr.svg"); | ||
| const opts = parseQROptions(args[2]); | ||
| const ecLevel = opts.errorCorrectionLevel ?? "M"; | ||
| const matrix = generateQRMatrix(text, ecLevel); | ||
| const svgWidth = opts.width ?? (matrix.length + (opts.margin ?? 4) * 2) * (opts.scale ?? 10); | ||
| const svg = matrixToSvg(matrix, { | ||
| width: svgWidth, | ||
| margin: opts.margin ?? 4, | ||
| darkColor: opts.color?.dark ?? "#000000", | ||
| lightColor: opts.color?.light ?? "#ffffff", | ||
| }); | ||
| writeFileSync(filePath, svg, "utf-8"); | ||
| return filePath; | ||
| }; | ||
| const qrToSvg = (args) => { | ||
| const text = String(args[0] ?? ""); | ||
| const opts = parseQROptions(args[1]); | ||
| const ecLevel = opts.errorCorrectionLevel ?? "M"; | ||
| const matrix = generateQRMatrix(text, ecLevel); | ||
| return matrixToSvg(matrix, { | ||
| margin: opts.margin ?? 4, | ||
| darkColor: opts.color?.dark ?? "#000000", | ||
| lightColor: opts.color?.light ?? "#ffffff", | ||
| }); | ||
| }; | ||
| const qrToTerminal = (args) => { | ||
| const text = String(args[0] ?? ""); | ||
| const matrix = generateQRMatrix(text, "M"); | ||
| return matrixToTerminal(matrix); | ||
| }; | ||
| // ============================================================================ | ||
| // Barcode validation functions (pure JS, unchanged) | ||
| // ============================================================================ | ||
| function ean13Check(digits) { | ||
| let sum = 0; | ||
| for (let i = 0; i < 12; i++) | ||
| sum += Number(digits[i]) * (i % 2 === 0 ? 1 : 3); | ||
| return (10 - (sum % 10)) % 10; | ||
| } | ||
| const ean13Validate = (args) => { | ||
| const code = String(args[0] ?? "").replace(/\D/g, ""); | ||
| if (code.length !== 13) | ||
| return false; | ||
| return ean13Check(code) === Number(code[12]); | ||
| }; | ||
| const ean13Checksum = (args) => { | ||
| const code = String(args[0] ?? "").replace(/\D/g, ""); | ||
| if (code.length < 12) | ||
| return null; | ||
| return String(ean13Check(code)); | ||
| }; | ||
| const upcValidate = (args) => { | ||
| const code = String(args[0] ?? "").replace(/\D/g, ""); | ||
| if (code.length !== 12) | ||
| return false; | ||
| return ean13Check("0" + code) === Number(code[11]); | ||
| }; | ||
| const upcChecksum = (args) => { | ||
| const code = String(args[0] ?? "").replace(/\D/g, ""); | ||
| if (code.length < 11) | ||
| return null; | ||
| return String(ean13Check("0" + code)); | ||
| }; | ||
| const isbn10Validate = (args) => { | ||
| const isbn = String(args[0] ?? "").replace(/[-\s]/g, ""); | ||
| if (isbn.length !== 10) | ||
| return false; | ||
| let sum = 0; | ||
| for (let i = 0; i < 10; i++) { | ||
| const c = isbn[i]; | ||
| const val = c === "X" || c === "x" ? 10 : Number(c); | ||
| if (isNaN(val)) | ||
| return false; | ||
| sum += val * (10 - i); | ||
| } | ||
| return sum % 11 === 0; | ||
| }; | ||
| const isbn13Validate = (args) => ean13Validate(args); | ||
| const isbn10to13 = (args) => { | ||
| const isbn = String(args[0] ?? "").replace(/[-\s]/g, ""); | ||
| if (isbn.length !== 10) | ||
| return null; | ||
| const base = "978" + isbn.substring(0, 9); | ||
| return base + String(ean13Check(base)); | ||
| }; | ||
| const isbn13to10 = (args) => { | ||
| const isbn = String(args[0] ?? "").replace(/[-\s]/g, ""); | ||
| if (isbn.length !== 13 || !isbn.startsWith("978")) | ||
| return null; | ||
| const base = isbn.substring(3, 12); | ||
| let sum = 0; | ||
| for (let i = 0; i < 9; i++) | ||
| sum += Number(base[i]) * (10 - i); | ||
| const check = (11 - (sum % 11)) % 11; | ||
| return base + (check === 10 ? "X" : String(check)); | ||
| }; | ||
| const luhn = (args) => { | ||
| const num = String(args[0] ?? "").replace(/\D/g, ""); | ||
| let sum = 0; | ||
| let alt = false; | ||
| for (let i = num.length - 1; i >= 0; i--) { | ||
| let n = Number(num[i]); | ||
| if (alt) { | ||
| n *= 2; | ||
| if (n > 9) | ||
| n -= 9; | ||
| } | ||
| sum += n; | ||
| alt = !alt; | ||
| } | ||
| return sum % 10 === 0; | ||
| }; | ||
| const luhnGenerate = (args) => { | ||
| const num = String(args[0] ?? "").replace(/\D/g, ""); | ||
| for (let d = 0; d <= 9; d++) { | ||
| if (luhn([num + String(d)]) === true) | ||
| return num + String(d); | ||
| } | ||
| return num + "0"; | ||
| }; | ||
| // ============================================================================ | ||
| // Exports | ||
| // ============================================================================ | ||
| export const BarcodeFunctions = { qrGenerate, qrToFile, qrToSvg, qrToTerminal, ean13Validate, ean13Checksum, upcValidate, upcChecksum, isbn10Validate, isbn13Validate, isbn10to13, isbn13to10, luhn, luhnGenerate }; | ||
| export const BarcodeFunctionMetadata = { | ||
| qrGenerate: { description: "Generate QR code as data URL", parameters: [{ name: "text", dataType: "string", description: "Text to encode", formInputType: "text", required: true }, { name: "options", dataType: "object", description: "{width, margin, scale, errorCorrectionLevel, color}", formInputType: "text", required: false }], returnType: "string", returnDescription: "Data URL (base64 PNG)", example: 'barcode.qrGenerate "https://example.com"' }, | ||
| qrToFile: { description: "Generate QR code to SVG file", parameters: [{ name: "text", dataType: "string", description: "Text", formInputType: "text", required: true }, { name: "filePath", dataType: "string", description: "Output path", formInputType: "text", required: true }, { name: "options", dataType: "object", description: "QR options", formInputType: "text", required: false }], returnType: "string", returnDescription: "File path", example: 'barcode.qrToFile "https://example.com" "./qr.svg"' }, | ||
| qrToSvg: { description: "Generate QR code as SVG", parameters: [{ name: "text", dataType: "string", description: "Text", formInputType: "text", required: true }], returnType: "string", returnDescription: "SVG string", example: 'barcode.qrToSvg "hello"' }, | ||
| qrToTerminal: { description: "Generate QR for terminal", parameters: [{ name: "text", dataType: "string", description: "Text", formInputType: "text", required: true }], returnType: "string", returnDescription: "Terminal string", example: 'barcode.qrToTerminal "hello"' }, | ||
| ean13Validate: { description: "Validate EAN-13 barcode", parameters: [{ name: "code", dataType: "string", description: "13-digit code", formInputType: "text", required: true }], returnType: "boolean", returnDescription: "true if valid", example: 'barcode.ean13Validate "4006381333931"' }, | ||
| ean13Checksum: { description: "Calculate EAN-13 check digit", parameters: [{ name: "code", dataType: "string", description: "12-digit code", formInputType: "text", required: true }], returnType: "string", returnDescription: "Check digit", example: 'barcode.ean13Checksum "400638133393"' }, | ||
| upcValidate: { description: "Validate UPC-A barcode", parameters: [{ name: "code", dataType: "string", description: "12-digit code", formInputType: "text", required: true }], returnType: "boolean", returnDescription: "true if valid", example: 'barcode.upcValidate "012345678905"' }, | ||
| upcChecksum: { description: "Calculate UPC-A check digit", parameters: [{ name: "code", dataType: "string", description: "11-digit code", formInputType: "text", required: true }], returnType: "string", returnDescription: "Check digit", example: 'barcode.upcChecksum "01234567890"' }, | ||
| isbn10Validate: { description: "Validate ISBN-10", parameters: [{ name: "isbn", dataType: "string", description: "ISBN-10", formInputType: "text", required: true }], returnType: "boolean", returnDescription: "true if valid", example: 'barcode.isbn10Validate "0-306-40615-2"' }, | ||
| isbn13Validate: { description: "Validate ISBN-13", parameters: [{ name: "isbn", dataType: "string", description: "ISBN-13", formInputType: "text", required: true }], returnType: "boolean", returnDescription: "true if valid", example: 'barcode.isbn13Validate "978-0-306-40615-7"' }, | ||
| isbn10to13: { description: "Convert ISBN-10 to ISBN-13", parameters: [{ name: "isbn10", dataType: "string", description: "ISBN-10", formInputType: "text", required: true }], returnType: "string", returnDescription: "ISBN-13", example: 'barcode.isbn10to13 "0306406152"' }, | ||
| isbn13to10: { description: "Convert ISBN-13 to ISBN-10", parameters: [{ name: "isbn13", dataType: "string", description: "ISBN-13", formInputType: "text", required: true }], returnType: "string", returnDescription: "ISBN-10 or null", example: 'barcode.isbn13to10 "9780306406157"' }, | ||
| luhn: { description: "Validate Luhn checksum", parameters: [{ name: "number", dataType: "string", description: "Number string", formInputType: "text", required: true }], returnType: "boolean", returnDescription: "true if valid", example: 'barcode.luhn "4539578763621486"' }, | ||
| luhnGenerate: { description: "Generate Luhn check digit", parameters: [{ name: "number", dataType: "string", description: "Number without check digit", formInputType: "text", required: true }], returnType: "string", returnDescription: "Number with check digit", example: 'barcode.luhnGenerate "453957876362148"' }, | ||
| }; | ||
| export const BarcodeModuleMetadata = { | ||
| description: "QR code generation, EAN/UPC barcode validation, ISBN conversion, and Luhn checksum", | ||
| methods: ["qrGenerate", "qrToFile", "qrToSvg", "qrToTerminal", "ean13Validate", "ean13Checksum", "upcValidate", "upcChecksum", "isbn10Validate", "isbn13Validate", "isbn10to13", "isbn13to10", "luhn", "luhnGenerate"], | ||
| }; | ||
| //# sourceMappingURL=barcode.js.map |
| {"version":3,"file":"barcode.js","sourceRoot":"","sources":["../src/barcode.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAExC,+EAA+E;AAC/E,kCAAkC;AAClC,2DAA2D;AAC3D,kDAAkD;AAClD,+EAA+E;AAE/E,6BAA6B;AAE7B,MAAM,SAAS,GAA2B,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC;AAErE,0BAA0B;AAC1B,MAAM,YAAY,GAAG,MAAM,CAAC;AAC5B,MAAM,iBAAiB,GAAG,MAAM,CAAC;AACjC,MAAM,SAAS,GAAG,MAAM,CAAC;AAEzB,+BAA+B;AAC/B,MAAM,cAAc,GAAG,+CAA+C,CAAC;AAEvE,8EAA8E;AAC9E,MAAM,eAAe,GAA6B;IAChD,CAAC,YAAY,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC;IAC5B,CAAC,iBAAiB,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC;IAChC,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC;CACzB,CAAC;AAaF,0CAA0C;AAC1C,MAAM,eAAe,GAAG;IACtB,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;CAC9C,CAAC;AAEF,qGAAqG;AACrG,iCAAiC;AACjC,MAAM,gBAAgB,GAAiB;IACrC,YAAY;IACZ,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;IACzF,YAAY;IACZ,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;IAC5F,YAAY;IACZ,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;IAC5F,YAAY;IACZ,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;IAC3F,YAAY;IACZ,CAAC,CAAC,GAAG,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC;IAChG,YAAY;IACZ,CAAC,CAAC,GAAG,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;IAC9F,YAAY;IACZ,CAAC,CAAC,GAAG,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC;IAChG,YAAY;IACZ,CAAC,CAAC,GAAG,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC;IAClG,YAAY;IACZ,CAAC,CAAC,GAAG,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC;IACpG,aAAa;IACb,CAAC,CAAC,GAAG,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC;CACrG,CAAC;AAEF,+DAA+D;AAC/D,MAAM,mBAAmB,GAAe;IACtC,EAAE,EAAU,KAAK;IACjB,CAAC,CAAC,EAAE,EAAE,CAAC,EAAK,KAAK;IACjB,CAAC,CAAC,EAAE,EAAE,CAAC,EAAK,KAAK;IACjB,CAAC,CAAC,EAAE,EAAE,CAAC,EAAK,KAAK;IACjB,CAAC,CAAC,EAAE,EAAE,CAAC,EAAK,KAAK;IACjB,CAAC,CAAC,EAAE,EAAE,CAAC,EAAK,KAAK;IACjB,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,EAAC,KAAK;IACjB,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,EAAC,KAAK;IACjB,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,EAAC,KAAK;IACjB,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,EAAC,MAAM;CACnB,CAAC;AAEF,0EAA0E;AAC1E,2CAA2C;AAC3C,MAAM,mBAAmB,GAAe;IACtC,QAAQ;IACR,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC;IAChE,QAAQ;IACR,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC;IAChE,QAAQ;IACR,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC;IAChE,QAAQ;IACR,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC;CACjE,CAAC;AAEF,wCAAwC;AAExC,sEAAsE;AACtE,MAAM,MAAM,GAAG,IAAI,UAAU,CAAC,GAAG,CAAC,CAAC;AACnC,MAAM,MAAM,GAAG,IAAI,UAAU,CAAC,GAAG,CAAC,CAAC;AAEnC,SAAS,eAAe;IACtB,IAAI,CAAC,GAAG,CAAC,CAAC;IACV,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC;QAC7B,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;QACd,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;QACd,CAAC,KAAK,CAAC,CAAC;QACR,IAAI,CAAC,IAAI,GAAG;YAAE,CAAC,IAAI,KAAK,CAAC;IAC3B,CAAC;IACD,KAAK,IAAI,CAAC,GAAG,GAAG,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC;QAC/B,MAAM,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC;IAC9B,CAAC;AACH,CAAC;AACD,eAAe,EAAE,CAAC;AAElB,SAAS,KAAK,CAAC,CAAS,EAAE,CAAS;IACjC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC;QAAE,OAAO,CAAC,CAAC;IACjC,OAAO,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;AACvC,CAAC;AAED,SAAS,eAAe,CAAC,cAAsB;IAC7C,IAAI,GAAG,GAAG,IAAI,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAC9B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,cAAc,EAAE,CAAC,EAAE,EAAE,CAAC;QACxC,MAAM,MAAM,GAAG,IAAI,UAAU,CAAC,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;QAC9C,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YACpC,MAAM,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC;YACpB,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;QAC5C,CAAC;QACD,GAAG,GAAG,MAAM,CAAC;IACf,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAED,SAAS,QAAQ,CAAC,IAAgB,EAAE,cAAsB;IACxD,MAAM,GAAG,GAAG,eAAe,CAAC,cAAc,CAAC,CAAC;IAC5C,MAAM,MAAM,GAAG,IAAI,UAAU,CAAC,IAAI,CAAC,MAAM,GAAG,cAAc,CAAC,CAAC;IAC5D,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IAEjB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACrC,MAAM,IAAI,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;QACvB,IAAI,IAAI,KAAK,CAAC,EAAE,CAAC;YACf,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;gBACpC,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;YACvC,CAAC;QACH,CAAC;IACH,CAAC;IAED,OAAO,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;AACnC,CAAC;AAED,wBAAwB;AAExB,SAAS,UAAU,CAAC,IAAY;IAC9B,IAAI,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC;QAAE,OAAO,YAAY,CAAC;IAC5C,IAAI,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;QAAE,OAAO,iBAAiB,CAAC;IACtF,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,SAAS,gBAAgB,CAAC,IAAY,EAAE,OAAe;IACrD,MAAM,KAAK,GAAG,OAAO,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACvD,OAAO,eAAe,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC;AACtC,CAAC;AAED,SAAS,gBAAgB,CAAC,OAAe,EAAE,OAAe;IACxD,MAAM,GAAG,GAAG,gBAAgB,CAAC,OAAO,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;IACnD,OAAO;QACL,kBAAkB,EAAE,GAAG,CAAC,CAAC,CAAC;QAC1B,mBAAmB,EAAE,GAAG,CAAC,CAAC,CAAC;QAC3B,YAAY,EAAE,GAAG,CAAC,CAAC,CAAC;QACpB,YAAY,EAAE,GAAG,CAAC,CAAC,CAAC;QACpB,YAAY,EAAE,GAAG,CAAC,CAAC,CAAC;QACpB,YAAY,EAAE,GAAG,CAAC,CAAC,CAAC;KACrB,CAAC;AACJ,CAAC;AAED,SAAS,aAAa,CAAC,IAAY,EAAE,IAAY,EAAE,OAAe;IAChE,MAAM,OAAO,GAAG,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,WAAW,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC;IACzF,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC;QAC7B,MAAM,IAAI,GAAG,gBAAgB,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;QAC1C,MAAM,SAAS,GAAG,IAAI,CAAC,kBAAkB,GAAG,CAAC,CAAC;QAC9C,MAAM,MAAM,GAAG,gBAAgB,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;QACzC,IAAI,QAAgB,CAAC;QACrB,IAAI,IAAI,KAAK,YAAY,EAAE,CAAC;YAC1B,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,GAAG,CAAC,CAAC,GAAG,EAAE,GAAG,CAAC,OAAO,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAChG,CAAC;aAAM,IAAI,IAAI,KAAK,iBAAiB,EAAE,CAAC;YACtC,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,GAAG,CAAC,CAAC,GAAG,EAAE,GAAG,CAAC,OAAO,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC;QAC9D,CAAC;aAAM,CAAC;YACN,QAAQ,GAAG,OAAO,GAAG,CAAC,CAAC;QACzB,CAAC;QACD,MAAM,MAAM,GAAG,CAAC,GAAG,MAAM,GAAG,QAAQ,CAAC;QACrC,IAAI,MAAM,IAAI,SAAS;YAAE,OAAO,CAAC,CAAC;IACpC,CAAC;IACD,MAAM,IAAI,KAAK,CAAC,oCAAoC,CAAC,CAAC;AACxD,CAAC;AAED,MAAM,SAAS;IACL,IAAI,GAAa,EAAE,CAAC;IAC5B,IAAI,MAAM,KAAa,OAAO,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC;IAEjD,GAAG,CAAC,KAAa,EAAE,OAAe;QAChC,KAAK,IAAI,CAAC,GAAG,OAAO,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;YACtC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;QACnC,CAAC;IACH,CAAC;IAED,OAAO,CAAC,KAAa;QACnB,IAAI,IAAI,GAAG,CAAC,CAAC;QACb,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;YAC3B,MAAM,QAAQ,GAAG,KAAK,GAAG,CAAC,GAAG,CAAC,CAAC;YAC/B,IAAI,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;gBAChC,IAAI,GAAG,CAAC,IAAI,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YAC3C,CAAC;iBAAM,CAAC;gBACN,IAAI,KAAK,CAAC,CAAC;YACb,CAAC;QACH,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;CACF;AAED,SAAS,UAAU,CAAC,IAAY,EAAE,OAAe,EAAE,OAAe;IAChE,MAAM,IAAI,GAAG,UAAU,CAAC,IAAI,CAAC,CAAC;IAC9B,MAAM,IAAI,GAAG,gBAAgB,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;IAChD,MAAM,kBAAkB,GAAG,IAAI,CAAC,kBAAkB,CAAC;IAEnD,MAAM,MAAM,GAAG,IAAI,SAAS,EAAE,CAAC;IAE/B,iBAAiB;IACjB,MAAM,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;IAEpB,kBAAkB;IAClB,MAAM,MAAM,GAAG,gBAAgB,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;IAE/C,IAAI,IAAI,KAAK,YAAY,EAAE,CAAC;QAC1B,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QAChC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;YACxC,MAAM,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;YACvC,MAAM,IAAI,GAAG,KAAK,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YAClE,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC,KAAK,EAAE,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC;QACxC,CAAC;IACH,CAAC;SAAM,IAAI,IAAI,KAAK,iBAAiB,EAAE,CAAC;QACtC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QAChC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;YACxC,IAAI,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC;gBACxB,MAAM,GAAG,GAAG,cAAc,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE,GAAG,cAAc,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;gBACvF,MAAM,CAAC,GAAG,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;YACtB,CAAC;iBAAM,CAAC;gBACN,MAAM,CAAC,GAAG,CAAC,cAAc,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;YACjD,CAAC;QACH,CAAC;IACH,CAAC;SAAM,CAAC;QACN,MAAM,KAAK,GAAG,IAAI,WAAW,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QAC7C,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QACjC,KAAK,MAAM,CAAC,IAAI,KAAK,EAAE,CAAC;YACtB,MAAM,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QACnB,CAAC;IACH,CAAC;IAED,aAAa;IACb,MAAM,SAAS,GAAG,kBAAkB,GAAG,CAAC,CAAC;IACzC,MAAM,aAAa,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,SAAS,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC;IAC7D,MAAM,CAAC,GAAG,CAAC,CAAC,EAAE,aAAa,CAAC,CAAC;IAE7B,uBAAuB;IACvB,OAAO,MAAM,CAAC,MAAM,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC;QAC/B,MAAM,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IACnB,CAAC;IAED,gBAAgB;IAChB,MAAM,WAAW,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;IACjC,IAAI,MAAM,GAAG,CAAC,CAAC;IACf,OAAO,MAAM,CAAC,MAAM,GAAG,SAAS,EAAE,CAAC;QACjC,MAAM,CAAC,GAAG,CAAC,WAAW,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC;QACnC,MAAM,GAAG,CAAC,GAAG,MAAM,CAAC;IACtB,CAAC;IAED,mBAAmB;IACnB,MAAM,IAAI,GAAG,IAAI,UAAU,CAAC,kBAAkB,CAAC,CAAC;IAChD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,kBAAkB,EAAE,CAAC,EAAE,EAAE,CAAC;QAC5C,IAAI,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;IAC9B,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC;AAED,0CAA0C;AAE1C,SAAS,mBAAmB,CAAC,IAAgB,EAAE,OAAe,EAAE,OAAe;IAC7E,MAAM,IAAI,GAAG,gBAAgB,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;IAChD,MAAM,EAAE,mBAAmB,EAAE,YAAY,EAAE,YAAY,EAAE,YAAY,EAAE,YAAY,EAAE,GAAG,IAAI,CAAC;IAC7F,MAAM,cAAc,GAAG,eAAe,CAAC,OAAO,GAAG,CAAC,CAAC,CAAC;IAEpD,MAAM,UAAU,GAAiB,EAAE,CAAC;IACpC,MAAM,QAAQ,GAAiB,EAAE,CAAC;IAClC,IAAI,MAAM,GAAG,CAAC,CAAC;IAEf,UAAU;IACV,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,YAAY,EAAE,CAAC,EAAE,EAAE,CAAC;QACtC,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,MAAM,GAAG,YAAY,CAAC,CAAC;QACxD,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACvB,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,mBAAmB,CAAC,CAAC,CAAC;QACpD,MAAM,IAAI,YAAY,CAAC;IACzB,CAAC;IAED,UAAU;IACV,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,YAAY,EAAE,CAAC,EAAE,EAAE,CAAC;QACtC,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,MAAM,GAAG,YAAY,CAAC,CAAC;QACxD,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACvB,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,mBAAmB,CAAC,CAAC,CAAC;QACpD,MAAM,IAAI,YAAY,CAAC;IACzB,CAAC;IAED,4BAA4B;IAC5B,MAAM,MAAM,GAAa,EAAE,CAAC;IAC5B,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE,YAAY,IAAI,CAAC,CAAC,CAAC;IAC5D,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,SAAS,EAAE,CAAC,EAAE,EAAE,CAAC;QACnC,KAAK,MAAM,KAAK,IAAI,UAAU,EAAE,CAAC;YAC/B,IAAI,CAAC,GAAG,KAAK,CAAC,MAAM;gBAAE,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;QAC9C,CAAC;IACH,CAAC;IAED,0BAA0B;IAC1B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,mBAAmB,EAAE,CAAC,EAAE,EAAE,CAAC;QAC7C,KAAK,MAAM,KAAK,IAAI,QAAQ,EAAE,CAAC;YAC7B,IAAI,CAAC,GAAG,KAAK,CAAC,MAAM;gBAAE,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;QAC9C,CAAC;IACH,CAAC;IAED,qDAAqD;IACrD,MAAM,MAAM,GAAG,IAAI,UAAU,CAAC,cAAc,CAAC,CAAC;IAC9C,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,MAAM,EAAE,cAAc,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;QACjE,MAAM,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;IACxB,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,iCAAiC;AAEjC,SAAS,cAAc,CAAC,OAAe;IACrC,OAAO,OAAO,GAAG,CAAC,GAAG,EAAE,CAAC;AAC1B,CAAC;AAID,SAAS,YAAY,CAAC,IAAY;IAChC,OAAO,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,EAAE,GAAG,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;AACpE,CAAC;AAED,SAAS,kBAAkB,CAAC,MAAgB,EAAE,GAAW,EAAE,GAAW;IACpE,KAAK,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;QAC7B,KAAK,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;YAC7B,MAAM,EAAE,GAAG,GAAG,GAAG,CAAC,CAAC;YACnB,MAAM,EAAE,GAAG,GAAG,GAAG,CAAC,CAAC;YACnB,IAAI,EAAE,GAAG,CAAC,IAAI,EAAE,IAAI,MAAM,CAAC,MAAM,IAAI,EAAE,GAAG,CAAC,IAAI,EAAE,IAAI,MAAM,CAAC,MAAM;gBAAE,SAAS;YAC7E,IACE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;gBAC1C,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;gBAC1C,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,EACtC,CAAC;gBACD,MAAM,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;YACrB,CAAC;iBAAM,CAAC;gBACN,MAAM,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;YACrB,CAAC;QACH,CAAC;IACH,CAAC;AACH,CAAC;AAED,SAAS,qBAAqB,CAAC,MAAgB,EAAE,GAAW,EAAE,GAAW;IACvE,KAAK,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;QAC7B,KAAK,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;YAC7B,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC;gBACnE,MAAM,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC;YAC/B,CAAC;iBAAM,CAAC;gBACN,MAAM,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC;YAC/B,CAAC;QACH,CAAC;IACH,CAAC;AACH,CAAC;AAED,SAAS,mBAAmB,CAAC,MAAgB;IAC3C,MAAM,IAAI,GAAG,MAAM,CAAC,MAAM,CAAC;IAC3B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;QAClC,IAAI,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,IAAI;YAAE,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAC9D,IAAI,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,IAAI;YAAE,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAChE,CAAC;AACH,CAAC;AAED,SAAS,iBAAiB,CAAC,MAAgB;IACzC,MAAM,IAAI,GAAG,MAAM,CAAC,MAAM,CAAC;IAC3B,yBAAyB;IACzB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;QAC5B,IAAI,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,IAAI;YAAE,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;QAC5C,IAAI,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,IAAI;YAAE,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;IAC9C,CAAC;IACD,0BAA0B;IAC1B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;QAC5B,IAAI,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC,KAAK,IAAI;YAAE,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC;IACpE,CAAC;IACD,4BAA4B;IAC5B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;QAC5B,IAAI,MAAM,CAAC,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,IAAI;YAAE,MAAM,CAAC,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;IACpE,CAAC;IACD,cAAc;IACd,MAAM,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;AAC1B,CAAC;AAED,SAAS,gBAAgB,CAAC,MAAgB,EAAE,OAAe;IACzD,MAAM,IAAI,GAAG,MAAM,CAAC,MAAM,CAAC;IAE3B,kBAAkB;IAClB,kBAAkB,CAAC,MAAM,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;IACjC,kBAAkB,CAAC,MAAM,EAAE,CAAC,EAAE,IAAI,GAAG,CAAC,CAAC,CAAC;IACxC,kBAAkB,CAAC,MAAM,EAAE,IAAI,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;IAExC,kCAAkC;IAClC,IAAI,OAAO,IAAI,CAAC,EAAE,CAAC;QACjB,MAAM,SAAS,GAAG,mBAAmB,CAAC,OAAO,GAAG,CAAC,CAAC,CAAC;QACnD,KAAK,MAAM,CAAC,IAAI,SAAS,EAAE,CAAC;YAC1B,KAAK,MAAM,CAAC,IAAI,SAAS,EAAE,CAAC;gBAC1B,2CAA2C;gBAC3C,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC;oBAAE,SAAS,CAAC,WAAW;gBAC3C,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,IAAI,GAAG,CAAC;oBAAE,SAAS,CAAC,YAAY;gBACnD,IAAI,CAAC,IAAI,IAAI,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC;oBAAE,SAAS,CAAC,cAAc;gBACrD,qBAAqB,CAAC,MAAM,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;YACtC,CAAC;QACH,CAAC;IACH,CAAC;IAED,kBAAkB;IAClB,mBAAmB,CAAC,MAAM,CAAC,CAAC;IAE5B,4BAA4B;IAC5B,iBAAiB,CAAC,MAAM,CAAC,CAAC;AAC5B,CAAC;AAED,SAAS,SAAS,CAAC,MAAgB,EAAE,IAAgB;IACnD,MAAM,IAAI,GAAG,MAAM,CAAC,MAAM,CAAC;IAC3B,IAAI,QAAQ,GAAG,CAAC,CAAC;IACjB,MAAM,SAAS,GAAG,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC;IAElC,gFAAgF;IAChF,IAAI,GAAG,GAAG,IAAI,GAAG,CAAC,CAAC;IACnB,IAAI,OAAO,GAAG,IAAI,CAAC;IAEnB,OAAO,GAAG,IAAI,CAAC,EAAE,CAAC;QAChB,iCAAiC;QACjC,IAAI,GAAG,KAAK,CAAC;YAAE,GAAG,EAAE,CAAC;QAErB,KAAK,IAAI,GAAG,GAAG,CAAC,EAAE,GAAG,GAAG,IAAI,EAAE,GAAG,EAAE,EAAE,CAAC;YACpC,MAAM,SAAS,GAAG,OAAO,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC;YAEjD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;gBAC3B,MAAM,SAAS,GAAG,GAAG,GAAG,CAAC,CAAC;gBAC1B,IAAI,SAAS,GAAG,CAAC;oBAAE,SAAS;gBAC5B,IAAI,MAAM,CAAC,SAAS,CAAC,CAAC,SAAS,CAAC,KAAK,IAAI;oBAAE,SAAS;gBAEpD,IAAI,QAAQ,GAAG,SAAS,EAAE,CAAC;oBACzB,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,GAAG,CAAC,CAAC,CAAC;oBAC3C,MAAM,SAAS,GAAG,CAAC,GAAG,CAAC,QAAQ,GAAG,CAAC,CAAC,CAAC;oBACrC,MAAM,CAAC,SAAS,CAAC,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,SAAS,CAAC,GAAG,CAAC,CAAC;oBAClE,QAAQ,EAAE,CAAC;gBACb,CAAC;qBAAM,CAAC;oBACN,MAAM,CAAC,SAAS,CAAC,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;gBACnC,CAAC;YACH,CAAC;QACH,CAAC;QAED,OAAO,GAAG,CAAC,OAAO,CAAC;QACnB,GAAG,IAAI,CAAC,CAAC;IACX,CAAC;AACH,CAAC;AAED,kBAAkB;AAElB,SAAS,eAAe,CAAC,OAAe;IACtC,QAAQ,OAAO,EAAE,CAAC;QAChB,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QAC3C,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QAClC,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QACrC,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QAC3C,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QAC3E,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC;QAC3D,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QAC/D,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QAC/D,OAAO,CAAC,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;IAC9C,CAAC;AACH,CAAC;AAED,SAAS,YAAY,CAAC,MAAgB,EAAE,aAAuB,EAAE,GAAW,EAAE,GAAW;IACvF,OAAO,aAAa,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,KAAK,IAAI,CAAC;AAC1C,CAAC;AAED,SAAS,SAAS,CAAC,MAAgB,EAAE,aAAuB,EAAE,WAAmB;IAC/E,MAAM,IAAI,GAAG,MAAM,CAAC,MAAM,CAAC;IAC3B,MAAM,MAAM,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC;IAC7C,MAAM,MAAM,GAAG,eAAe,CAAC,WAAW,CAAC,CAAC;IAE5C,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,EAAE,CAAC,EAAE,EAAE,CAAC;QAC9B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,EAAE,CAAC,EAAE,EAAE,CAAC;YAC9B,IAAI,YAAY,CAAC,MAAM,EAAE,aAAa,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC;gBAC9C,IAAI,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC;oBACjB,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;gBAC5C,CAAC;YACH,CAAC;QACH,CAAC;IACH,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,SAAS,eAAe,CAAC,MAAgB,EAAE,OAAe,EAAE,WAAmB;IAC7E,MAAM,IAAI,GAAG,MAAM,CAAC,MAAM,CAAC;IAC3B,MAAM,UAAU,GAAG,mBAAmB,CAAC,OAAO,CAAC,CAAC,WAAW,CAAC,CAAC;IAE7D,yBAAyB;IACzB,iCAAiC;IACjC,MAAM,UAAU,GAAuB;QACrC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC;QAC9D,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC;KACvD,CAAC;IAEF,cAAc;IACd,MAAM,UAAU,GAAuB,EAAE,CAAC;IAC1C,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE;QAAE,UAAU,CAAC,IAAI,CAAC,CAAC,IAAI,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;IAC/D,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE;QAAE,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;IAE/D,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC;QAC5B,MAAM,GAAG,GAAG,CAAC,UAAU,IAAI,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;QACzC,MAAM,CAAC,EAAE,EAAE,EAAE,CAAC,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC;QAC/B,MAAM,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC;QACrB,MAAM,CAAC,EAAE,EAAE,EAAE,CAAC,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC;QAC/B,MAAM,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC;IACvB,CAAC;AACH,CAAC;AAED,0BAA0B;AAE1B,SAAS,gBAAgB,CAAC,MAAgB;IACxC,MAAM,IAAI,GAAG,MAAM,CAAC,MAAM,CAAC;IAC3B,IAAI,OAAO,GAAG,CAAC,CAAC;IAEhB,4DAA4D;IAC5D,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,EAAE,CAAC,EAAE,EAAE,CAAC;QAC9B,IAAI,KAAK,GAAG,CAAC,CAAC;QACd,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,EAAE,CAAC,EAAE,EAAE,CAAC;YAC9B,IAAI,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC;gBACtC,KAAK,EAAE,CAAC;gBACR,IAAI,CAAC,KAAK,IAAI,GAAG,CAAC,IAAI,KAAK,IAAI,CAAC;oBAAE,OAAO,IAAI,KAAK,GAAG,CAAC,CAAC;YACzD,CAAC;iBAAM,CAAC;gBACN,IAAI,KAAK,IAAI,CAAC;oBAAE,OAAO,IAAI,KAAK,GAAG,CAAC,CAAC;gBACrC,KAAK,GAAG,CAAC,CAAC;YACZ,CAAC;QACH,CAAC;IACH,CAAC;IACD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,EAAE,CAAC,EAAE,EAAE,CAAC;QAC9B,IAAI,KAAK,GAAG,CAAC,CAAC;QACd,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,EAAE,CAAC,EAAE,EAAE,CAAC;YAC9B,IAAI,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;gBACtC,KAAK,EAAE,CAAC;gBACR,IAAI,CAAC,KAAK,IAAI,GAAG,CAAC,IAAI,KAAK,IAAI,CAAC;oBAAE,OAAO,IAAI,KAAK,GAAG,CAAC,CAAC;YACzD,CAAC;iBAAM,CAAC;gBACN,IAAI,KAAK,IAAI,CAAC;oBAAE,OAAO,IAAI,KAAK,GAAG,CAAC,CAAC;gBACrC,KAAK,GAAG,CAAC,CAAC;YACZ,CAAC;QACH,CAAC;IACH,CAAC;IAED,mCAAmC;IACnC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;QAClC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;YAClC,MAAM,GAAG,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YACzB,IAAI,GAAG,KAAK,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,GAAG,KAAK,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,GAAG,KAAK,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC;gBACzF,OAAO,IAAI,CAAC,CAAC;YACf,CAAC;QACH,CAAC;IACH,CAAC;IAED,+BAA+B;IAC/B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,EAAE,CAAC,EAAE,EAAE,CAAC;QAC9B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC;YACnC,IACE,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,IAAI,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC;gBACtE,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,IAAI,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,IAAI,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC;gBAC1E,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,IAAI,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,IAAI,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC;gBAC1E,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,IAAI,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC;gBACjD,OAAO,IAAI,EAAE,CAAC;YAChB,IACE,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,IAAI,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC;gBACtE,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,IAAI,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,IAAI,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC;gBAC1E,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,IAAI,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,IAAI,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC;gBAC1E,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,IAAI,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC;gBACjD,OAAO,IAAI,EAAE,CAAC;QAClB,CAAC;IACH,CAAC;IACD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,EAAE,CAAC,EAAE,EAAE,CAAC;QAC9B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC;YACnC,IACE,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;gBACtE,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;gBAC1E,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;gBAC1E,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;gBACjD,OAAO,IAAI,EAAE,CAAC;YAChB,IACE,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;gBACtE,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;gBAC1E,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;gBAC1E,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;gBACjD,OAAO,IAAI,EAAE,CAAC;QAClB,CAAC;IACH,CAAC;IAED,qCAAqC;IACrC,IAAI,SAAS,GAAG,CAAC,CAAC;IAClB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,EAAE,CAAC,EAAE,EAAE,CAAC;QAC9B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,EAAE,CAAC,EAAE,EAAE,CAAC;YAC9B,IAAI,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;gBAAE,SAAS,EAAE,CAAC;QACtC,CAAC;IACH,CAAC;IACD,MAAM,OAAO,GAAG,CAAC,SAAS,GAAG,CAAC,IAAI,GAAG,IAAI,CAAC,CAAC,GAAG,GAAG,CAAC;IAClD,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC;IAC7C,MAAM,QAAQ,GAAG,QAAQ,GAAG,CAAC,CAAC;IAC9B,OAAO,IAAI,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,QAAQ,GAAG,EAAE,CAAC,GAAG,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,QAAQ,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,CAAC;IAEnF,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,kCAAkC;AAElC,SAAS,gBAAgB,CAAC,IAAY,EAAE,aAAqB,GAAG;IAC9D,MAAM,OAAO,GAAG,SAAS,CAAC,UAAU,CAAC,WAAW,EAAE,CAAC,IAAI,CAAC,CAAC;IACzD,MAAM,IAAI,GAAG,UAAU,CAAC,IAAI,CAAC,CAAC;IAC9B,MAAM,OAAO,GAAG,aAAa,CAAC,IAAI,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC;IACnD,MAAM,IAAI,GAAG,cAAc,CAAC,OAAO,CAAC,CAAC;IAErC,cAAc;IACd,MAAM,IAAI,GAAG,UAAU,CAAC,IAAI,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;IAEhD,2CAA2C;IAC3C,MAAM,SAAS,GAAG,mBAAmB,CAAC,IAAI,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;IAE9D,0EAA0E;IAC1E,MAAM,aAAa,GAAG,YAAY,CAAC,IAAI,CAAC,CAAC;IACzC,gBAAgB,CAAC,aAAa,EAAE,OAAO,CAAC,CAAC;IAEzC,4CAA4C;IAC5C,MAAM,UAAU,GAAG,YAAY,CAAC,IAAI,CAAC,CAAC;IACtC,gBAAgB,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;IACtC,SAAS,CAAC,UAAU,EAAE,SAAS,CAAC,CAAC;IAEjC,qCAAqC;IACrC,IAAI,QAAQ,GAAG,CAAC,CAAC;IACjB,IAAI,WAAW,GAAG,QAAQ,CAAC;IAC3B,IAAI,UAAU,GAAa,UAAU,CAAC;IAEtC,KAAK,IAAI,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,EAAE,EAAE,CAAC;QACpC,MAAM,MAAM,GAAG,SAAS,CAAC,UAAU,EAAE,aAAa,EAAE,IAAI,CAAC,CAAC;QAC1D,eAAe,CAAC,MAAM,EAAE,OAAO,EAAE,IAAI,CAAC,CAAC;QACvC,MAAM,OAAO,GAAG,gBAAgB,CAAC,MAAM,CAAC,CAAC;QACzC,IAAI,OAAO,GAAG,WAAW,EAAE,CAAC;YAC1B,WAAW,GAAG,OAAO,CAAC;YACtB,QAAQ,GAAG,IAAI,CAAC;YAChB,UAAU,GAAG,MAAM,CAAC;QACtB,CAAC;IACH,CAAC;IAED,gCAAgC;IAChC,MAAM,WAAW,GAAG,SAAS,CAAC,UAAU,EAAE,aAAa,EAAE,QAAQ,CAAC,CAAC;IACnE,eAAe,CAAC,WAAW,EAAE,OAAO,EAAE,QAAQ,CAAC,CAAC;IAEhD,OAAO,WAAW,CAAC;AACrB,CAAC;AAED,yBAAyB;AAEzB,SAAS,WAAW,CAAC,MAAgB,EAAE,OAAqF,EAAE;IAC5H,MAAM,WAAW,GAAG,MAAM,CAAC,MAAM,CAAC;IAClC,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,IAAI,CAAC,CAAC;IAChC,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,IAAI,CAAC,WAAW,GAAG,MAAM,GAAG,CAAC,CAAC,CAAC;IACvD,MAAM,KAAK,GAAG,KAAK,GAAG,CAAC,WAAW,GAAG,MAAM,GAAG,CAAC,CAAC,CAAC;IACjD,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,IAAI,SAAS,CAAC;IAC9C,MAAM,UAAU,GAAG,IAAI,CAAC,UAAU,IAAI,SAAS,CAAC;IAEhD,IAAI,GAAG,GAAG,wDAAwD,WAAW,GAAG,MAAM,GAAG,CAAC,IAAI,WAAW,GAAG,MAAM,GAAG,CAAC,YAAY,KAAK,aAAa,KAAK,iCAAiC,CAAC;IAC3L,GAAG,IAAI,0CAA0C,UAAU,KAAK,CAAC;IAEjE,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,WAAW,EAAE,CAAC,EAAE,EAAE,CAAC;QACrC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,WAAW,EAAE,CAAC,EAAE,EAAE,CAAC;YACrC,IAAI,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC;gBACvB,GAAG,IAAI,YAAY,CAAC,GAAG,MAAM,QAAQ,CAAC,GAAG,MAAM,gCAAgC,SAAS,KAAK,CAAC;YAChG,CAAC;QACH,CAAC;IACH,CAAC;IAED,GAAG,IAAI,QAAQ,CAAC;IAChB,OAAO,GAAG,CAAC;AACb,CAAC;AAED,SAAS,gBAAgB,CAAC,MAAgB;IACxC,MAAM,WAAW,GAAG,MAAM,CAAC,MAAM,CAAC;IAClC,MAAM,MAAM,GAAG,CAAC,CAAC;IACjB,MAAM,KAAK,GAAa,EAAE,CAAC;IAE3B,+EAA+E;IAC/E,8CAA8C;IAC9C,sDAAsD;IACtD,2DAA2D;IAE3D,MAAM,SAAS,GAAG,WAAW,GAAG,MAAM,GAAG,CAAC,CAAC;IAC3C,MAAM,SAAS,GAAG,WAAW,GAAG,MAAM,GAAG,CAAC,CAAC;IAE3C,MAAM,SAAS,GAAG,CAAC,CAAS,EAAE,CAAS,EAAW,EAAE;QAClD,MAAM,EAAE,GAAG,CAAC,GAAG,MAAM,CAAC;QACtB,MAAM,EAAE,GAAG,CAAC,GAAG,MAAM,CAAC;QACtB,IAAI,EAAE,GAAG,CAAC,IAAI,EAAE,IAAI,WAAW,IAAI,EAAE,GAAG,CAAC,IAAI,EAAE,IAAI,WAAW;YAAE,OAAO,KAAK,CAAC;QAC7E,OAAO,MAAM,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC;IAC9B,CAAC,CAAC;IAEF,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,SAAS,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;QACtC,IAAI,IAAI,GAAG,EAAE,CAAC;QACd,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,SAAS,EAAE,CAAC,EAAE,EAAE,CAAC;YACnC,MAAM,GAAG,GAAG,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;YAC5B,MAAM,MAAM,GAAG,CAAC,GAAG,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;YAE/D,IAAI,GAAG,IAAI,MAAM,EAAE,CAAC;gBAClB,IAAI,IAAI,QAAQ,CAAC,CAAC,aAAa;YACjC,CAAC;iBAAM,IAAI,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC;gBAC1B,IAAI,IAAI,QAAQ,CAAC,CAAC,mBAAmB;YACvC,CAAC;iBAAM,IAAI,CAAC,GAAG,IAAI,MAAM,EAAE,CAAC;gBAC1B,IAAI,IAAI,QAAQ,CAAC,CAAC,mBAAmB;YACvC,CAAC;iBAAM,CAAC;gBACN,IAAI,IAAI,GAAG,CAAC;YACd,CAAC;QACH,CAAC;QACD,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACnB,CAAC;IAED,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC1B,CAAC;AAED,8DAA8D;AAE9D,SAAS,KAAK,CAAC,IAAgB;IAC7B,IAAI,GAAG,GAAG,UAAU,CAAC;IACrB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACrC,GAAG,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC;QACf,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;YAC3B,GAAG,GAAG,CAAC,GAAG,KAAK,CAAC,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACjD,CAAC;IACH,CAAC;IACD,OAAO,CAAC,GAAG,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC;AAClC,CAAC;AAED,SAAS,OAAO,CAAC,IAAgB;IAC/B,IAAI,CAAC,GAAG,CAAC,CAAC;IACV,IAAI,CAAC,GAAG,CAAC,CAAC;IACV,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACrC,CAAC,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC;QAC1B,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,KAAK,CAAC;IACtB,CAAC;IACD,OAAO,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC;AAC/B,CAAC;AAED,SAAS,aAAa,CAAC,IAAgB;IACrC,2CAA2C;IAC3C,gEAAgE;IAChE,MAAM,YAAY,GAAG,KAAK,CAAC;IAC3B,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,YAAY,CAAC,IAAI,CAAC,CAAC;IAC7D,MAAM,MAAM,GAAa,EAAE,CAAC;IAE5B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,SAAS,EAAE,CAAC,EAAE,EAAE,CAAC;QACnC,MAAM,KAAK,GAAG,CAAC,GAAG,YAAY,CAAC;QAC/B,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,GAAG,YAAY,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;QACxD,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;QACrC,MAAM,MAAM,GAAG,CAAC,KAAK,SAAS,GAAG,CAAC,CAAC;QAEnC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,6BAA6B;QAChE,MAAM,GAAG,GAAG,KAAK,CAAC,MAAM,CAAC;QACzB,MAAM,CAAC,IAAI,CAAC,GAAG,GAAG,IAAI,EAAE,CAAC,GAAG,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;QAC3C,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,IAAI,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;QACjD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YACtC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;QACxB,CAAC;IACH,CAAC;IAED,OAAO,IAAI,UAAU,CAAC,MAAM,CAAC,CAAC;AAChC,CAAC;AAED,SAAS,cAAc,CAAC,OAAmB;IACzC,MAAM,QAAQ,GAAG,aAAa,CAAC,OAAO,CAAC,CAAC;IACxC,MAAM,KAAK,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IAC/B,MAAM,MAAM,GAAG,IAAI,UAAU,CAAC,CAAC,GAAG,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IACvD,qDAAqD;IACrD,MAAM,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC;IACjB,MAAM,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC;IACjB,MAAM,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC;IACxB,gCAAgC;IAChC,MAAM,GAAG,GAAG,CAAC,GAAG,QAAQ,CAAC,MAAM,CAAC;IAChC,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,IAAI,EAAE,CAAC,GAAG,IAAI,CAAC;IACnC,MAAM,CAAC,GAAG,GAAG,CAAC,CAAC,GAAG,CAAC,KAAK,IAAI,EAAE,CAAC,GAAG,IAAI,CAAC;IACvC,MAAM,CAAC,GAAG,GAAG,CAAC,CAAC,GAAG,CAAC,KAAK,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC;IACtC,MAAM,CAAC,GAAG,GAAG,CAAC,CAAC,GAAG,KAAK,GAAG,IAAI,CAAC;IAC/B,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,SAAS,QAAQ,CAAC,IAAY,EAAE,IAAgB;IAC9C,MAAM,SAAS,GAAG,IAAI,WAAW,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IACjD,MAAM,KAAK,GAAG,IAAI,UAAU,CAAC,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IACtD,sBAAsB;IACtB,MAAM,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC;IACxB,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,IAAI,EAAE,CAAC,GAAG,IAAI,CAAC;IAC9B,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,IAAI,EAAE,CAAC,GAAG,IAAI,CAAC;IAC9B,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC;IAC7B,KAAK,CAAC,CAAC,CAAC,GAAG,GAAG,GAAG,IAAI,CAAC;IACtB,OAAO;IACP,KAAK,CAAC,GAAG,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC;IACxB,OAAO;IACP,KAAK,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;IACnB,uBAAuB;IACvB,MAAM,OAAO,GAAG,IAAI,UAAU,CAAC,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC;IAChD,OAAO,CAAC,GAAG,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC;IAC1B,OAAO,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;IACrB,MAAM,GAAG,GAAG,KAAK,CAAC,OAAO,CAAC,CAAC;IAC3B,KAAK,CAAC,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,IAAI,EAAE,CAAC,GAAG,IAAI,CAAC;IAC5C,KAAK,CAAC,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,IAAI,EAAE,CAAC,GAAG,IAAI,CAAC;IAC5C,KAAK,CAAC,EAAE,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC;IAC5C,KAAK,CAAC,EAAE,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,GAAG,GAAG,IAAI,CAAC;IACrC,OAAO,KAAK,CAAC;AACf,CAAC;AAED,SAAS,WAAW,CAAC,MAAgB,EAAE,OAA4C,EAAE;IACnF,MAAM,WAAW,GAAG,MAAM,CAAC,MAAM,CAAC;IAClC,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,IAAI,EAAE,CAAC;IAC/B,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,IAAI,CAAC,CAAC;IAChC,MAAM,YAAY,GAAG,WAAW,GAAG,MAAM,GAAG,CAAC,CAAC;IAC9C,MAAM,OAAO,GAAG,YAAY,GAAG,KAAK,CAAC;IAErC,+EAA+E;IAC/E,yCAAyC;IACzC,MAAM,OAAO,GAAG,IAAI,UAAU,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,GAAG,OAAO,CAAC,CAAC;IAExD,KAAK,IAAI,EAAE,GAAG,CAAC,EAAE,EAAE,GAAG,OAAO,EAAE,EAAE,EAAE,EAAE,CAAC;QACpC,MAAM,SAAS,GAAG,EAAE,GAAG,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC;QACrC,OAAO,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,YAAY;QAEpC,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,GAAG,KAAK,CAAC,GAAG,MAAM,CAAC;QAElD,KAAK,IAAI,EAAE,GAAG,CAAC,EAAE,EAAE,GAAG,OAAO,EAAE,EAAE,EAAE,EAAE,CAAC;YACpC,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,GAAG,KAAK,CAAC,GAAG,MAAM,CAAC;YAElD,IAAI,MAAM,GAAG,KAAK,CAAC;YACnB,IAAI,SAAS,IAAI,CAAC,IAAI,SAAS,GAAG,WAAW,IAAI,SAAS,IAAI,CAAC,IAAI,SAAS,GAAG,WAAW,EAAE,CAAC;gBAC3F,MAAM,GAAG,MAAM,CAAC,SAAS,CAAC,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;YAC9C,CAAC;YAED,OAAO,CAAC,SAAS,GAAG,CAAC,GAAG,EAAE,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC;QACjD,CAAC;IACH,CAAC;IAED,aAAa;IACb,MAAM,aAAa,GAAG,IAAI,UAAU,CAAC,CAAC,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC;IAExE,OAAO;IACP,MAAM,IAAI,GAAG,IAAI,UAAU,CAAC,EAAE,CAAC,CAAC;IAChC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,IAAI,EAAE,CAAC,GAAG,IAAI,CAAC;IACjC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,IAAI,EAAE,CAAC,GAAG,IAAI,CAAC;IACjC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC;IAChC,IAAI,CAAC,CAAC,CAAC,GAAG,OAAO,GAAG,IAAI,CAAC;IACzB,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,IAAI,EAAE,CAAC,GAAG,IAAI,CAAC;IACjC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,IAAI,EAAE,CAAC,GAAG,IAAI,CAAC;IACjC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC;IAChC,IAAI,CAAC,CAAC,CAAC,GAAG,OAAO,GAAG,IAAI,CAAC;IACzB,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAE,YAAY;IAC1B,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAE,wBAAwB;IACtC,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,cAAc;IAC5B,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,SAAS;IACvB,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,YAAY;IAE1B,OAAO;IACP,MAAM,cAAc,GAAG,cAAc,CAAC,OAAO,CAAC,CAAC;IAE/C,OAAO;IACP,MAAM,QAAQ,GAAG,IAAI,UAAU,CAAC,CAAC,CAAC,CAAC;IAEnC,MAAM,MAAM,GAAG;QACb,aAAa;QACb,QAAQ,CAAC,MAAM,EAAE,IAAI,CAAC;QACtB,QAAQ,CAAC,MAAM,EAAE,cAAc,CAAC;QAChC,QAAQ,CAAC,MAAM,EAAE,QAAQ,CAAC;KAC3B,CAAC;IAEF,MAAM,QAAQ,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC,GAAG,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;IAC9D,MAAM,GAAG,GAAG,IAAI,UAAU,CAAC,QAAQ,CAAC,CAAC;IACrC,IAAI,MAAM,GAAG,CAAC,CAAC;IACf,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;QAC3B,GAAG,CAAC,GAAG,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;QACvB,MAAM,IAAI,KAAK,CAAC,MAAM,CAAC;IACzB,CAAC;IAED,OAAO,GAAG,CAAC;AACb,CAAC;AAED,SAAS,eAAe,CAAC,MAAgB,EAAE,OAA4C,EAAE;IACvF,MAAM,GAAG,GAAG,WAAW,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;IACtC,yBAAyB;IACzB,MAAM,MAAM,GAAG,kBAAkB,CAAC,GAAG,CAAC,CAAC;IACvC,OAAO,yBAAyB,MAAM,EAAE,CAAC;AAC3C,CAAC;AAED,SAAS,kBAAkB,CAAC,KAAiB;IAC3C,MAAM,KAAK,GAAG,kEAAkE,CAAC;IACjF,IAAI,MAAM,GAAG,EAAE,CAAC;IAChB,MAAM,GAAG,GAAG,KAAK,CAAC,MAAM,CAAC;IAEzB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;QAChC,MAAM,EAAE,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;QACpB,MAAM,EAAE,GAAG,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAC1C,MAAM,EAAE,GAAG,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAE1C,MAAM,IAAI,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;QAClC,MAAM,IAAI,KAAK,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,GAAG,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;QAChD,MAAM,IAAI,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,GAAG,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC;QACpE,MAAM,IAAI,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC;IACjD,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC;AAYD,SAAS,cAAc,CAAC,IAAa;IACnC,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,IAAI,KAAK,IAAI;QAAE,OAAO,EAAE,CAAC;IACzD,OAAO,IAAiB,CAAC;AAC3B,CAAC;AAED,+EAA+E;AAC/E,kBAAkB;AAClB,+EAA+E;AAE/E,MAAM,UAAU,GAAmB,CAAC,IAAI,EAAE,EAAE;IAC1C,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;IACnC,MAAM,IAAI,GAAG,cAAc,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;IACrC,MAAM,OAAO,GAAG,IAAI,CAAC,oBAAoB,IAAI,GAAG,CAAC;IACjD,MAAM,MAAM,GAAG,gBAAgB,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;IAC/C,OAAO,eAAe,CAAC,MAAM,EAAE,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,IAAI,EAAE,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,IAAI,CAAC,EAAE,CAAC,CAAC;AACxF,CAAC,CAAC;AAEF,MAAM,QAAQ,GAAmB,CAAC,IAAI,EAAE,EAAE;IACxC,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;IACnC,MAAM,QAAQ,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,QAAQ,CAAC,CAAC;IAC7C,MAAM,IAAI,GAAG,cAAc,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;IACrC,MAAM,OAAO,GAAG,IAAI,CAAC,oBAAoB,IAAI,GAAG,CAAC;IACjD,MAAM,MAAM,GAAG,gBAAgB,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;IAC/C,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,IAAI,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,MAAM,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC;IAC7F,MAAM,GAAG,GAAG,WAAW,CAAC,MAAM,EAAE;QAC9B,KAAK,EAAE,QAAQ;QACf,MAAM,EAAE,IAAI,CAAC,MAAM,IAAI,CAAC;QACxB,SAAS,EAAE,IAAI,CAAC,KAAK,EAAE,IAAI,IAAI,SAAS;QACxC,UAAU,EAAE,IAAI,CAAC,KAAK,EAAE,KAAK,IAAI,SAAS;KAC3C,CAAC,CAAC;IACH,aAAa,CAAC,QAAQ,EAAE,GAAG,EAAE,OAAO,CAAC,CAAC;IACtC,OAAO,QAAQ,CAAC;AAClB,CAAC,CAAC;AAEF,MAAM,OAAO,GAAmB,CAAC,IAAI,EAAE,EAAE;IACvC,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;IACnC,MAAM,IAAI,GAAG,cAAc,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;IACrC,MAAM,OAAO,GAAG,IAAI,CAAC,oBAAoB,IAAI,GAAG,CAAC;IACjD,MAAM,MAAM,GAAG,gBAAgB,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;IAC/C,OAAO,WAAW,CAAC,MAAM,EAAE;QACzB,MAAM,EAAE,IAAI,CAAC,MAAM,IAAI,CAAC;QACxB,SAAS,EAAE,IAAI,CAAC,KAAK,EAAE,IAAI,IAAI,SAAS;QACxC,UAAU,EAAE,IAAI,CAAC,KAAK,EAAE,KAAK,IAAI,SAAS;KAC3C,CAAC,CAAC;AACL,CAAC,CAAC;AAEF,MAAM,YAAY,GAAmB,CAAC,IAAI,EAAE,EAAE;IAC5C,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;IACnC,MAAM,MAAM,GAAG,gBAAgB,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;IAC3C,OAAO,gBAAgB,CAAC,MAAM,CAAC,CAAC;AAClC,CAAC,CAAC;AAEF,+EAA+E;AAC/E,oDAAoD;AACpD,+EAA+E;AAE/E,SAAS,UAAU,CAAC,MAAc;IAChC,IAAI,GAAG,GAAG,CAAC,CAAC;IACZ,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE;QAAE,GAAG,IAAI,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAC9E,OAAO,CAAC,EAAE,GAAG,CAAC,GAAG,GAAG,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC;AAChC,CAAC;AAED,MAAM,aAAa,GAAmB,CAAC,IAAI,EAAE,EAAE;IAC7C,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;IACtD,IAAI,IAAI,CAAC,MAAM,KAAK,EAAE;QAAE,OAAO,KAAK,CAAC;IACrC,OAAO,UAAU,CAAC,IAAI,CAAC,KAAK,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;AAC/C,CAAC,CAAC;AAEF,MAAM,aAAa,GAAmB,CAAC,IAAI,EAAE,EAAE;IAC7C,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;IACtD,IAAI,IAAI,CAAC,MAAM,GAAG,EAAE;QAAE,OAAO,IAAI,CAAC;IAClC,OAAO,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC;AAClC,CAAC,CAAC;AAEF,MAAM,WAAW,GAAmB,CAAC,IAAI,EAAE,EAAE;IAC3C,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;IACtD,IAAI,IAAI,CAAC,MAAM,KAAK,EAAE;QAAE,OAAO,KAAK,CAAC;IACrC,OAAO,UAAU,CAAC,GAAG,GAAG,IAAI,CAAC,KAAK,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;AACrD,CAAC,CAAC;AAEF,MAAM,WAAW,GAAmB,CAAC,IAAI,EAAE,EAAE;IAC3C,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;IACtD,IAAI,IAAI,CAAC,MAAM,GAAG,EAAE;QAAE,OAAO,IAAI,CAAC;IAClC,OAAO,MAAM,CAAC,UAAU,CAAC,GAAG,GAAG,IAAI,CAAC,CAAC,CAAC;AACxC,CAAC,CAAC;AAEF,MAAM,cAAc,GAAmB,CAAC,IAAI,EAAE,EAAE;IAC9C,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;IACzD,IAAI,IAAI,CAAC,MAAM,KAAK,EAAE;QAAE,OAAO,KAAK,CAAC;IACrC,IAAI,GAAG,GAAG,CAAC,CAAC;IACZ,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC;QAC5B,MAAM,CAAC,GAAG,IAAI,CAAC,CAAC,CAAE,CAAC;QACnB,MAAM,GAAG,GAAG,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;QACpD,IAAI,KAAK,CAAC,GAAG,CAAC;YAAE,OAAO,KAAK,CAAC;QAC7B,GAAG,IAAI,GAAG,GAAG,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;IACxB,CAAC;IACD,OAAO,GAAG,GAAG,EAAE,KAAK,CAAC,CAAC;AACxB,CAAC,CAAC;AAEF,MAAM,cAAc,GAAmB,CAAC,IAAI,EAAE,EAAE,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;AAErE,MAAM,UAAU,GAAmB,CAAC,IAAI,EAAE,EAAE;IAC1C,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;IACzD,IAAI,IAAI,CAAC,MAAM,KAAK,EAAE;QAAE,OAAO,IAAI,CAAC;IACpC,MAAM,IAAI,GAAG,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IAC1C,OAAO,IAAI,GAAG,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC;AACzC,CAAC,CAAC;AAEF,MAAM,UAAU,GAAmB,CAAC,IAAI,EAAE,EAAE;IAC1C,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;IACzD,IAAI,IAAI,CAAC,MAAM,KAAK,EAAE,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IAC/D,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IACnC,IAAI,GAAG,GAAG,CAAC,CAAC;IACZ,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE;QAAE,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;IAC9D,MAAM,KAAK,GAAG,CAAC,EAAE,GAAG,CAAC,GAAG,GAAG,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC;IACrC,OAAO,IAAI,GAAG,CAAC,KAAK,KAAK,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;AACrD,CAAC,CAAC;AAEF,MAAM,IAAI,GAAmB,CAAC,IAAI,EAAE,EAAE;IACpC,MAAM,GAAG,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;IACrD,IAAI,GAAG,GAAG,CAAC,CAAC;IACZ,IAAI,GAAG,GAAG,KAAK,CAAC;IAChB,KAAK,IAAI,CAAC,GAAG,GAAG,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;QACzC,IAAI,CAAC,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;QACvB,IAAI,GAAG,EAAE,CAAC;YAAC,CAAC,IAAI,CAAC,CAAC;YAAC,IAAI,CAAC,GAAG,CAAC;gBAAE,CAAC,IAAI,CAAC,CAAC;QAAC,CAAC;QACvC,GAAG,IAAI,CAAC,CAAC;QACT,GAAG,GAAG,CAAC,GAAG,CAAC;IACb,CAAC;IACD,OAAO,GAAG,GAAG,EAAE,KAAK,CAAC,CAAC;AACxB,CAAC,CAAC;AAEF,MAAM,YAAY,GAAmB,CAAC,IAAI,EAAE,EAAE;IAC5C,MAAM,GAAG,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;IACrD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;QAC5B,IAAI,IAAI,CAAC,CAAC,GAAG,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,IAAI;YAAE,OAAO,GAAG,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;IAC/D,CAAC;IACD,OAAO,GAAG,GAAG,GAAG,CAAC;AACnB,CAAC,CAAC;AAEF,+EAA+E;AAC/E,UAAU;AACV,+EAA+E;AAE/E,MAAM,CAAC,MAAM,gBAAgB,GAAmC,EAAE,UAAU,EAAE,QAAQ,EAAE,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,aAAa,EAAE,WAAW,EAAE,WAAW,EAAE,cAAc,EAAE,cAAc,EAAE,UAAU,EAAE,UAAU,EAAE,IAAI,EAAE,YAAY,EAAE,CAAC;AAEpP,MAAM,CAAC,MAAM,uBAAuB,GAAG;IACrC,UAAU,EAAE,EAAE,WAAW,EAAE,8BAA8B,EAAE,UAAU,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE,WAAW,EAAE,gBAAgB,EAAE,aAAa,EAAE,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,QAAQ,EAAE,QAAQ,EAAE,WAAW,EAAE,qDAAqD,EAAE,aAAa,EAAE,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC,EAAE,UAAU,EAAE,QAAQ,EAAE,iBAAiB,EAAE,uBAAuB,EAAE,OAAO,EAAE,0CAA0C,EAAE;IACjc,QAAQ,EAAE,EAAE,WAAW,EAAE,8BAA8B,EAAE,UAAU,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE,QAAQ,EAAE,QAAQ,EAAE,WAAW,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,QAAQ,EAAE,QAAQ,EAAE,WAAW,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC,EAAE,UAAU,EAAE,QAAQ,EAAE,iBAAiB,EAAE,WAAW,EAAE,OAAO,EAAE,mDAAmD,EAAE;IACtf,OAAO,EAAE,EAAE,WAAW,EAAE,yBAAyB,EAAE,UAAU,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,EAAE,UAAU,EAAE,QAAQ,EAAE,iBAAiB,EAAE,YAAY,EAAE,OAAO,EAAE,yBAAyB,EAAE;IAC9P,YAAY,EAAE,EAAE,WAAW,EAAE,0BAA0B,EAAE,UAAU,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,EAAE,UAAU,EAAE,QAAQ,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,OAAO,EAAE,8BAA8B,EAAE;IAC9Q,aAAa,EAAE,EAAE,WAAW,EAAE,yBAAyB,EAAE,UAAU,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE,WAAW,EAAE,eAAe,EAAE,aAAa,EAAE,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,EAAE,UAAU,EAAE,SAAS,EAAE,iBAAiB,EAAE,eAAe,EAAE,OAAO,EAAE,uCAAuC,EAAE;IAC/R,aAAa,EAAE,EAAE,WAAW,EAAE,8BAA8B,EAAE,UAAU,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE,WAAW,EAAE,eAAe,EAAE,aAAa,EAAE,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,EAAE,UAAU,EAAE,QAAQ,EAAE,iBAAiB,EAAE,aAAa,EAAE,OAAO,EAAE,sCAAsC,EAAE;IAChS,WAAW,EAAE,EAAE,WAAW,EAAE,wBAAwB,EAAE,UAAU,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE,WAAW,EAAE,eAAe,EAAE,aAAa,EAAE,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,EAAE,UAAU,EAAE,SAAS,EAAE,iBAAiB,EAAE,eAAe,EAAE,OAAO,EAAE,oCAAoC,EAAE;IACzR,WAAW,EAAE,EAAE,WAAW,EAAE,6BAA6B,EAAE,UAAU,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE,WAAW,EAAE,eAAe,EAAE,aAAa,EAAE,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,EAAE,UAAU,EAAE,QAAQ,EAAE,iBAAiB,EAAE,aAAa,EAAE,OAAO,EAAE,mCAAmC,EAAE;IAC1R,cAAc,EAAE,EAAE,WAAW,EAAE,kBAAkB,EAAE,UAAU,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE,WAAW,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,EAAE,UAAU,EAAE,SAAS,EAAE,iBAAiB,EAAE,eAAe,EAAE,OAAO,EAAE,wCAAwC,EAAE;IACpR,cAAc,EAAE,EAAE,WAAW,EAAE,kBAAkB,EAAE,UAAU,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE,WAAW,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,EAAE,UAAU,EAAE,SAAS,EAAE,iBAAiB,EAAE,eAAe,EAAE,OAAO,EAAE,4CAA4C,EAAE;IACxR,UAAU,EAAE,EAAE,WAAW,EAAE,4BAA4B,EAAE,UAAU,EAAE,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,WAAW,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,EAAE,UAAU,EAAE,QAAQ,EAAE,iBAAiB,EAAE,SAAS,EAAE,OAAO,EAAE,iCAAiC,EAAE;IAC9Q,UAAU,EAAE,EAAE,WAAW,EAAE,4BAA4B,EAAE,UAAU,EAAE,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,WAAW,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,EAAE,UAAU,EAAE,QAAQ,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,OAAO,EAAE,oCAAoC,EAAE;IACzR,IAAI,EAAE,EAAE,WAAW,EAAE,wBAAwB,EAAE,UAAU,EAAE,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,WAAW,EAAE,eAAe,EAAE,aAAa,EAAE,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,EAAE,UAAU,EAAE,SAAS,EAAE,iBAAiB,EAAE,eAAe,EAAE,OAAO,EAAE,iCAAiC,EAAE;IACjR,YAAY,EAAE,EAAE,WAAW,EAAE,2BAA2B,EAAE,UAAU,EAAE,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,WAAW,EAAE,4BAA4B,EAAE,aAAa,EAAE,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,EAAE,UAAU,EAAE,QAAQ,EAAE,iBAAiB,EAAE,yBAAyB,EAAE,OAAO,EAAE,wCAAwC,EAAE;CAC1T,CAAC;AAEF,MAAM,CAAC,MAAM,qBAAqB,GAAG;IACnC,WAAW,EAAE,oFAAoF;IACjG,OAAO,EAAE,CAAC,YAAY,EAAE,UAAU,EAAE,SAAS,EAAE,cAAc,EAAE,eAAe,EAAE,eAAe,EAAE,aAAa,EAAE,aAAa,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,EAAE,cAAc,CAAC;CACvN,CAAC"} |
| import type { ModuleAdapter } from "@wiredwp/robinpath"; | ||
| declare const BarcodeModule: ModuleAdapter; | ||
| export default BarcodeModule; | ||
| export { BarcodeModule }; | ||
| export { BarcodeFunctions, BarcodeFunctionMetadata, BarcodeModuleMetadata } from "./barcode.js"; | ||
| //# sourceMappingURL=index.d.ts.map |
| {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAExD,QAAA,MAAM,aAAa,EAAE,aAA+K,CAAC;AACrM,eAAe,aAAa,CAAC;AAC7B,OAAO,EAAE,aAAa,EAAE,CAAC;AACzB,OAAO,EAAE,gBAAgB,EAAE,uBAAuB,EAAE,qBAAqB,EAAE,MAAM,cAAc,CAAC"} |
| import { BarcodeFunctions, BarcodeFunctionMetadata, BarcodeModuleMetadata } from "./barcode.js"; | ||
| const BarcodeModule = { name: "barcode", functions: BarcodeFunctions, functionMetadata: BarcodeFunctionMetadata, moduleMetadata: BarcodeModuleMetadata, global: false }; | ||
| export default BarcodeModule; | ||
| export { BarcodeModule }; | ||
| export { BarcodeFunctions, BarcodeFunctionMetadata, BarcodeModuleMetadata } from "./barcode.js"; | ||
| //# sourceMappingURL=index.js.map |
| {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,gBAAgB,EAAE,uBAAuB,EAAE,qBAAqB,EAAE,MAAM,cAAc,CAAC;AAChG,MAAM,aAAa,GAAkB,EAAE,IAAI,EAAE,SAAS,EAAE,SAAS,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,uBAA8B,EAAE,cAAc,EAAE,qBAA4B,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC;AACrM,eAAe,aAAa,CAAC;AAC7B,OAAO,EAAE,aAAa,EAAE,CAAC;AACzB,OAAO,EAAE,gBAAgB,EAAE,uBAAuB,EAAE,qBAAqB,EAAE,MAAM,cAAc,CAAC"} |
Empty package
Supply chain riskPackage does not contain any code. It may be removed, is name squatting, or the result of a faulty package publish.
Major refactor
Supply chain riskPackage has recently undergone a major refactor. It may be unstable or indicate significant internal changes. Use caution when updating to versions that include significant changes.
Major refactor
Supply chain riskPackage has recently undergone a major refactor. It may be unstable or indicate significant internal changes. Use caution when updating to versions that include significant changes.
URL strings
Supply chain riskPackage contains fragments of external URLs or IP addresses, which the package may be accessing at runtime.
1
-50%3537
-96.48%2
-80%0
-100%2
100%