@liquid-js/qr-code-styling 1.10.4 → 1.10.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"qr-code-styling.js","sources":["../src/types/index.ts","../src/constants/errorCorrectionPercents.ts","../node_modules/qrcode-generator/qrcode.js","../src/tools/merge.ts","../src/tools/sanitizeOptions.ts","../src/core/QROptions.ts","../src/figures/cornerDot/QRCornerDot.ts","../src/figures/cornerSquare/QRCornerSquare.ts","../src/figures/dot/QRDot.ts","../src/tools/browserImageTools.ts","../src/core/QRSVG.ts","../src/tools/calculateImageSize.ts","../src/core/QRCodeStyling.ts","../src/tools/getMode.ts","../src/tools/browserUtils.ts"],"sourcesContent":["import { browserImageTools } from \"../tools/browserImageTools\";\n\nexport interface UnknownObject {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n [key: string]: any;\n}\n\nexport enum DotType {\n dots = \"dots\",\n rounded = \"rounded\",\n classy = \"classy\",\n classyRounded = \"classy-rounded\",\n square = \"square\",\n extraRounded = \"extra-rounded\"\n}\nexport enum CornerDotType {\n dot = \"dot\",\n square = \"square\"\n}\nexport enum CornerSquareType {\n dot = \"dot\",\n square = \"square\",\n extraRounded = \"extra-rounded\"\n}\nexport enum GradientType {\n radial = \"radial\",\n linear = \"linear\"\n}\nexport enum ShapeType {\n square = \"square\",\n circle = \"circle\"\n}\n\nexport type Gradient = {\n type: GradientType;\n rotation?: number;\n colorStops: {\n offset: number;\n color: string;\n }[];\n};\n\ntype TypeNumber =\n | 0\n | 1\n | 2\n | 3\n | 4\n | 5\n | 6\n | 7\n | 8\n | 9\n | 10\n | 11\n | 12\n | 13\n | 14\n | 15\n | 16\n | 17\n | 18\n | 19\n | 20\n | 21\n | 22\n | 23\n | 24\n | 25\n | 26\n | 27\n | 28\n | 29\n | 30\n | 31\n | 32\n | 33\n | 34\n | 35\n | 36\n | 37\n | 38\n | 39\n | 40;\n\nconst TypeNumber = Array(41)\n .fill(0)\n .map((_, i) => i) as unknown as {\n [P in TypeNumber]: P;\n};\n\nexport { TypeNumber };\n\nexport enum ErrorCorrectionLevel {\n L = \"L\",\n M = \"M\",\n Q = \"Q\",\n H = \"H\"\n}\nexport enum Mode {\n numeric = \"Numeric\",\n alphanumeric = \"Alphanumeric\",\n byte = \"Byte\",\n kanji = \"Kanji\"\n}\nexport interface QRCode {\n addData(data: string, mode?: Mode): void;\n make(): void;\n getModuleCount(): number;\n isDark(row: number, col: number): boolean;\n}\n\nexport type Options = {\n document?: Document;\n shape?: ShapeType;\n width?: number;\n height?: number;\n margin?: number;\n data?: string;\n image?: string | Buffer | Blob;\n imageTools?: typeof browserImageTools;\n qrOptions?: {\n typeNumber?: TypeNumber;\n mode?: Mode;\n errorCorrectionLevel?: ErrorCorrectionLevel;\n };\n imageOptions?: {\n hideBackgroundDots?: boolean;\n imageSize?: number;\n crossOrigin?: string;\n margin?: number;\n };\n dotsOptions?: {\n type?: DotType;\n color?: string;\n gradient?: Gradient;\n };\n cornersSquareOptions?: {\n type?: CornerSquareType;\n color?: string;\n gradient?: Gradient;\n };\n cornersDotOptions?: {\n type?: CornerDotType;\n color?: string;\n gradient?: Gradient;\n };\n backgroundOptions?:\n | {\n round?: number;\n color?: string;\n gradient?: Gradient;\n }\n | false;\n};\n\nexport type CanvasOptions = {\n width?: number;\n height?: number;\n margin?: number;\n};\n\nexport type FilterFunction = (i: number, j: number) => boolean;\n\nexport type DrawArgs = {\n x: number;\n y: number;\n size: number;\n rotation?: number;\n getNeighbor?: GetNeighbor;\n};\n\nexport type BasicFigureDrawArgs = {\n x: number;\n y: number;\n size: number;\n rotation?: number;\n};\n\nexport type RotateFigureArgs = {\n x: number;\n y: number;\n size: number;\n rotation?: number;\n draw: () => void;\n};\n\nexport type GetNeighbor = (x: number, y: number) => boolean;\n\nexport type ExtensionFunction = (svg: SVGElement, options: Options) => void;\n\nexport enum FileExtension {\n svg = \"svg\",\n png = \"png\",\n jpeg = \"jpeg\",\n webp = \"webp\"\n}\n","import { ErrorCorrectionLevel } from \"../types\";\n\nexport const ErrorCorrectionPercents = {\n [ErrorCorrectionLevel.L]: 0.07,\n [ErrorCorrectionLevel.M]: 0.15,\n [ErrorCorrectionLevel.Q]: 0.25,\n [ErrorCorrectionLevel.H]: 0.3\n};\n","//---------------------------------------------------------------------\n//\n// QR Code Generator for JavaScript\n//\n// Copyright (c) 2009 Kazuhiko Arase\n//\n// URL: http://www.d-project.com/\n//\n// Licensed under the MIT license:\n// http://www.opensource.org/licenses/mit-license.php\n//\n// The word 'QR Code' is registered trademark of\n// DENSO WAVE INCORPORATED\n// http://www.denso-wave.com/qrcode/faqpatent-e.html\n//\n//---------------------------------------------------------------------\n\nvar qrcode = function() {\n\n //---------------------------------------------------------------------\n // qrcode\n //---------------------------------------------------------------------\n\n /**\n * qrcode\n * @param typeNumber 1 to 40\n * @param errorCorrectionLevel 'L','M','Q','H'\n */\n var qrcode = function(typeNumber, errorCorrectionLevel) {\n\n var PAD0 = 0xEC;\n var PAD1 = 0x11;\n\n var _typeNumber = typeNumber;\n var _errorCorrectionLevel = QRErrorCorrectionLevel[errorCorrectionLevel];\n var _modules = null;\n var _moduleCount = 0;\n var _dataCache = null;\n var _dataList = [];\n\n var _this = {};\n\n var makeImpl = function(test, maskPattern) {\n\n _moduleCount = _typeNumber * 4 + 17;\n _modules = function(moduleCount) {\n var modules = new Array(moduleCount);\n for (var row = 0; row < moduleCount; row += 1) {\n modules[row] = new Array(moduleCount);\n for (var col = 0; col < moduleCount; col += 1) {\n modules[row][col] = null;\n }\n }\n return modules;\n }(_moduleCount);\n\n setupPositionProbePattern(0, 0);\n setupPositionProbePattern(_moduleCount - 7, 0);\n setupPositionProbePattern(0, _moduleCount - 7);\n setupPositionAdjustPattern();\n setupTimingPattern();\n setupTypeInfo(test, maskPattern);\n\n if (_typeNumber >= 7) {\n setupTypeNumber(test);\n }\n\n if (_dataCache == null) {\n _dataCache = createData(_typeNumber, _errorCorrectionLevel, _dataList);\n }\n\n mapData(_dataCache, maskPattern);\n };\n\n var setupPositionProbePattern = function(row, col) {\n\n for (var r = -1; r <= 7; r += 1) {\n\n if (row + r <= -1 || _moduleCount <= row + r) continue;\n\n for (var c = -1; c <= 7; c += 1) {\n\n if (col + c <= -1 || _moduleCount <= col + c) continue;\n\n if ( (0 <= r && r <= 6 && (c == 0 || c == 6) )\n || (0 <= c && c <= 6 && (r == 0 || r == 6) )\n || (2 <= r && r <= 4 && 2 <= c && c <= 4) ) {\n _modules[row + r][col + c] = true;\n } else {\n _modules[row + r][col + c] = false;\n }\n }\n }\n };\n\n var getBestMaskPattern = function() {\n\n var minLostPoint = 0;\n var pattern = 0;\n\n for (var i = 0; i < 8; i += 1) {\n\n makeImpl(true, i);\n\n var lostPoint = QRUtil.getLostPoint(_this);\n\n if (i == 0 || minLostPoint > lostPoint) {\n minLostPoint = lostPoint;\n pattern = i;\n }\n }\n\n return pattern;\n };\n\n var setupTimingPattern = function() {\n\n for (var r = 8; r < _moduleCount - 8; r += 1) {\n if (_modules[r][6] != null) {\n continue;\n }\n _modules[r][6] = (r % 2 == 0);\n }\n\n for (var c = 8; c < _moduleCount - 8; c += 1) {\n if (_modules[6][c] != null) {\n continue;\n }\n _modules[6][c] = (c % 2 == 0);\n }\n };\n\n var setupPositionAdjustPattern = function() {\n\n var pos = QRUtil.getPatternPosition(_typeNumber);\n\n for (var i = 0; i < pos.length; i += 1) {\n\n for (var j = 0; j < pos.length; j += 1) {\n\n var row = pos[i];\n var col = pos[j];\n\n if (_modules[row][col] != null) {\n continue;\n }\n\n for (var r = -2; r <= 2; r += 1) {\n\n for (var c = -2; c <= 2; c += 1) {\n\n if (r == -2 || r == 2 || c == -2 || c == 2\n || (r == 0 && c == 0) ) {\n _modules[row + r][col + c] = true;\n } else {\n _modules[row + r][col + c] = false;\n }\n }\n }\n }\n }\n };\n\n var setupTypeNumber = function(test) {\n\n var bits = QRUtil.getBCHTypeNumber(_typeNumber);\n\n for (var i = 0; i < 18; i += 1) {\n var mod = (!test && ( (bits >> i) & 1) == 1);\n _modules[Math.floor(i / 3)][i % 3 + _moduleCount - 8 - 3] = mod;\n }\n\n for (var i = 0; i < 18; i += 1) {\n var mod = (!test && ( (bits >> i) & 1) == 1);\n _modules[i % 3 + _moduleCount - 8 - 3][Math.floor(i / 3)] = mod;\n }\n };\n\n var setupTypeInfo = function(test, maskPattern) {\n\n var data = (_errorCorrectionLevel << 3) | maskPattern;\n var bits = QRUtil.getBCHTypeInfo(data);\n\n // vertical\n for (var i = 0; i < 15; i += 1) {\n\n var mod = (!test && ( (bits >> i) & 1) == 1);\n\n if (i < 6) {\n _modules[i][8] = mod;\n } else if (i < 8) {\n _modules[i + 1][8] = mod;\n } else {\n _modules[_moduleCount - 15 + i][8] = mod;\n }\n }\n\n // horizontal\n for (var i = 0; i < 15; i += 1) {\n\n var mod = (!test && ( (bits >> i) & 1) == 1);\n\n if (i < 8) {\n _modules[8][_moduleCount - i - 1] = mod;\n } else if (i < 9) {\n _modules[8][15 - i - 1 + 1] = mod;\n } else {\n _modules[8][15 - i - 1] = mod;\n }\n }\n\n // fixed module\n _modules[_moduleCount - 8][8] = (!test);\n };\n\n var mapData = function(data, maskPattern) {\n\n var inc = -1;\n var row = _moduleCount - 1;\n var bitIndex = 7;\n var byteIndex = 0;\n var maskFunc = QRUtil.getMaskFunction(maskPattern);\n\n for (var col = _moduleCount - 1; col > 0; col -= 2) {\n\n if (col == 6) col -= 1;\n\n while (true) {\n\n for (var c = 0; c < 2; c += 1) {\n\n if (_modules[row][col - c] == null) {\n\n var dark = false;\n\n if (byteIndex < data.length) {\n dark = ( ( (data[byteIndex] >>> bitIndex) & 1) == 1);\n }\n\n var mask = maskFunc(row, col - c);\n\n if (mask) {\n dark = !dark;\n }\n\n _modules[row][col - c] = dark;\n bitIndex -= 1;\n\n if (bitIndex == -1) {\n byteIndex += 1;\n bitIndex = 7;\n }\n }\n }\n\n row += inc;\n\n if (row < 0 || _moduleCount <= row) {\n row -= inc;\n inc = -inc;\n break;\n }\n }\n }\n };\n\n var createBytes = function(buffer, rsBlocks) {\n\n var offset = 0;\n\n var maxDcCount = 0;\n var maxEcCount = 0;\n\n var dcdata = new Array(rsBlocks.length);\n var ecdata = new Array(rsBlocks.length);\n\n for (var r = 0; r < rsBlocks.length; r += 1) {\n\n var dcCount = rsBlocks[r].dataCount;\n var ecCount = rsBlocks[r].totalCount - dcCount;\n\n maxDcCount = Math.max(maxDcCount, dcCount);\n maxEcCount = Math.max(maxEcCount, ecCount);\n\n dcdata[r] = new Array(dcCount);\n\n for (var i = 0; i < dcdata[r].length; i += 1) {\n dcdata[r][i] = 0xff & buffer.getBuffer()[i + offset];\n }\n offset += dcCount;\n\n var rsPoly = QRUtil.getErrorCorrectPolynomial(ecCount);\n var rawPoly = qrPolynomial(dcdata[r], rsPoly.getLength() - 1);\n\n var modPoly = rawPoly.mod(rsPoly);\n ecdata[r] = new Array(rsPoly.getLength() - 1);\n for (var i = 0; i < ecdata[r].length; i += 1) {\n var modIndex = i + modPoly.getLength() - ecdata[r].length;\n ecdata[r][i] = (modIndex >= 0)? modPoly.getAt(modIndex) : 0;\n }\n }\n\n var totalCodeCount = 0;\n for (var i = 0; i < rsBlocks.length; i += 1) {\n totalCodeCount += rsBlocks[i].totalCount;\n }\n\n var data = new Array(totalCodeCount);\n var index = 0;\n\n for (var i = 0; i < maxDcCount; i += 1) {\n for (var r = 0; r < rsBlocks.length; r += 1) {\n if (i < dcdata[r].length) {\n data[index] = dcdata[r][i];\n index += 1;\n }\n }\n }\n\n for (var i = 0; i < maxEcCount; i += 1) {\n for (var r = 0; r < rsBlocks.length; r += 1) {\n if (i < ecdata[r].length) {\n data[index] = ecdata[r][i];\n index += 1;\n }\n }\n }\n\n return data;\n };\n\n var createData = function(typeNumber, errorCorrectionLevel, dataList) {\n\n var rsBlocks = QRRSBlock.getRSBlocks(typeNumber, errorCorrectionLevel);\n\n var buffer = qrBitBuffer();\n\n for (var i = 0; i < dataList.length; i += 1) {\n var data = dataList[i];\n buffer.put(data.getMode(), 4);\n buffer.put(data.getLength(), QRUtil.getLengthInBits(data.getMode(), typeNumber) );\n data.write(buffer);\n }\n\n // calc num max data.\n var totalDataCount = 0;\n for (var i = 0; i < rsBlocks.length; i += 1) {\n totalDataCount += rsBlocks[i].dataCount;\n }\n\n if (buffer.getLengthInBits() > totalDataCount * 8) {\n throw 'code length overflow. ('\n + buffer.getLengthInBits()\n + '>'\n + totalDataCount * 8\n + ')';\n }\n\n // end code\n if (buffer.getLengthInBits() + 4 <= totalDataCount * 8) {\n buffer.put(0, 4);\n }\n\n // padding\n while (buffer.getLengthInBits() % 8 != 0) {\n buffer.putBit(false);\n }\n\n // padding\n while (true) {\n\n if (buffer.getLengthInBits() >= totalDataCount * 8) {\n break;\n }\n buffer.put(PAD0, 8);\n\n if (buffer.getLengthInBits() >= totalDataCount * 8) {\n break;\n }\n buffer.put(PAD1, 8);\n }\n\n return createBytes(buffer, rsBlocks);\n };\n\n _this.addData = function(data, mode) {\n\n mode = mode || 'Byte';\n\n var newData = null;\n\n switch(mode) {\n case 'Numeric' :\n newData = qrNumber(data);\n break;\n case 'Alphanumeric' :\n newData = qrAlphaNum(data);\n break;\n case 'Byte' :\n newData = qr8BitByte(data);\n break;\n case 'Kanji' :\n newData = qrKanji(data);\n break;\n default :\n throw 'mode:' + mode;\n }\n\n _dataList.push(newData);\n _dataCache = null;\n };\n\n _this.isDark = function(row, col) {\n if (row < 0 || _moduleCount <= row || col < 0 || _moduleCount <= col) {\n throw row + ',' + col;\n }\n return _modules[row][col];\n };\n\n _this.getModuleCount = function() {\n return _moduleCount;\n };\n\n _this.make = function() {\n if (_typeNumber < 1) {\n var typeNumber = 1;\n\n for (; typeNumber < 40; typeNumber++) {\n var rsBlocks = QRRSBlock.getRSBlocks(typeNumber, _errorCorrectionLevel);\n var buffer = qrBitBuffer();\n\n for (var i = 0; i < _dataList.length; i++) {\n var data = _dataList[i];\n buffer.put(data.getMode(), 4);\n buffer.put(data.getLength(), QRUtil.getLengthInBits(data.getMode(), typeNumber) );\n data.write(buffer);\n }\n\n var totalDataCount = 0;\n for (var i = 0; i < rsBlocks.length; i++) {\n totalDataCount += rsBlocks[i].dataCount;\n }\n\n if (buffer.getLengthInBits() <= totalDataCount * 8) {\n break;\n }\n }\n\n _typeNumber = typeNumber;\n }\n\n makeImpl(false, getBestMaskPattern() );\n };\n\n _this.createTableTag = function(cellSize, margin) {\n\n cellSize = cellSize || 2;\n margin = (typeof margin == 'undefined')? cellSize * 4 : margin;\n\n var qrHtml = '';\n\n qrHtml += '<table style=\"';\n qrHtml += ' border-width: 0px; border-style: none;';\n qrHtml += ' border-collapse: collapse;';\n qrHtml += ' padding: 0px; margin: ' + margin + 'px;';\n qrHtml += '\">';\n qrHtml += '<tbody>';\n\n for (var r = 0; r < _this.getModuleCount(); r += 1) {\n\n qrHtml += '<tr>';\n\n for (var c = 0; c < _this.getModuleCount(); c += 1) {\n qrHtml += '<td style=\"';\n qrHtml += ' border-width: 0px; border-style: none;';\n qrHtml += ' border-collapse: collapse;';\n qrHtml += ' padding: 0px; margin: 0px;';\n qrHtml += ' width: ' + cellSize + 'px;';\n qrHtml += ' height: ' + cellSize + 'px;';\n qrHtml += ' background-color: ';\n qrHtml += _this.isDark(r, c)? '#000000' : '#ffffff';\n qrHtml += ';';\n qrHtml += '\"/>';\n }\n\n qrHtml += '</tr>';\n }\n\n qrHtml += '</tbody>';\n qrHtml += '</table>';\n\n return qrHtml;\n };\n\n _this.createSvgTag = function(cellSize, margin, alt, title) {\n\n var opts = {};\n if (typeof arguments[0] == 'object') {\n // Called by options.\n opts = arguments[0];\n // overwrite cellSize and margin.\n cellSize = opts.cellSize;\n margin = opts.margin;\n alt = opts.alt;\n title = opts.title;\n }\n\n cellSize = cellSize || 2;\n margin = (typeof margin == 'undefined')? cellSize * 4 : margin;\n\n // Compose alt property surrogate\n alt = (typeof alt === 'string') ? {text: alt} : alt || {};\n alt.text = alt.text || null;\n alt.id = (alt.text) ? alt.id || 'qrcode-description' : null;\n\n // Compose title property surrogate\n title = (typeof title === 'string') ? {text: title} : title || {};\n title.text = title.text || null;\n title.id = (title.text) ? title.id || 'qrcode-title' : null;\n\n var size = _this.getModuleCount() * cellSize + margin * 2;\n var c, mc, r, mr, qrSvg='', rect;\n\n rect = 'l' + cellSize + ',0 0,' + cellSize +\n ' -' + cellSize + ',0 0,-' + cellSize + 'z ';\n\n qrSvg += '<svg version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\"';\n qrSvg += !opts.scalable ? ' width=\"' + size + 'px\" height=\"' + size + 'px\"' : '';\n qrSvg += ' viewBox=\"0 0 ' + size + ' ' + size + '\" ';\n qrSvg += ' preserveAspectRatio=\"xMinYMin meet\"';\n qrSvg += (title.text || alt.text) ? ' role=\"img\" aria-labelledby=\"' +\n escapeXml([title.id, alt.id].join(' ').trim() ) + '\"' : '';\n qrSvg += '>';\n qrSvg += (title.text) ? '<title id=\"' + escapeXml(title.id) + '\">' +\n escapeXml(title.text) + '</title>' : '';\n qrSvg += (alt.text) ? '<description id=\"' + escapeXml(alt.id) + '\">' +\n escapeXml(alt.text) + '</description>' : '';\n qrSvg += '<rect width=\"100%\" height=\"100%\" fill=\"white\" cx=\"0\" cy=\"0\"/>';\n qrSvg += '<path d=\"';\n\n for (r = 0; r < _this.getModuleCount(); r += 1) {\n mr = r * cellSize + margin;\n for (c = 0; c < _this.getModuleCount(); c += 1) {\n if (_this.isDark(r, c) ) {\n mc = c*cellSize+margin;\n qrSvg += 'M' + mc + ',' + mr + rect;\n }\n }\n }\n\n qrSvg += '\" stroke=\"transparent\" fill=\"black\"/>';\n qrSvg += '</svg>';\n\n return qrSvg;\n };\n\n _this.createDataURL = function(cellSize, margin) {\n\n cellSize = cellSize || 2;\n margin = (typeof margin == 'undefined')? cellSize * 4 : margin;\n\n var size = _this.getModuleCount() * cellSize + margin * 2;\n var min = margin;\n var max = size - margin;\n\n return createDataURL(size, size, function(x, y) {\n if (min <= x && x < max && min <= y && y < max) {\n var c = Math.floor( (x - min) / cellSize);\n var r = Math.floor( (y - min) / cellSize);\n return _this.isDark(r, c)? 0 : 1;\n } else {\n return 1;\n }\n } );\n };\n\n _this.createImgTag = function(cellSize, margin, alt) {\n\n cellSize = cellSize || 2;\n margin = (typeof margin == 'undefined')? cellSize * 4 : margin;\n\n var size = _this.getModuleCount() * cellSize + margin * 2;\n\n var img = '';\n img += '<img';\n img += '\\u0020src=\"';\n img += _this.createDataURL(cellSize, margin);\n img += '\"';\n img += '\\u0020width=\"';\n img += size;\n img += '\"';\n img += '\\u0020height=\"';\n img += size;\n img += '\"';\n if (alt) {\n img += '\\u0020alt=\"';\n img += escapeXml(alt);\n img += '\"';\n }\n img += '/>';\n\n return img;\n };\n\n var escapeXml = function(s) {\n var escaped = '';\n for (var i = 0; i < s.length; i += 1) {\n var c = s.charAt(i);\n switch(c) {\n case '<': escaped += '<'; break;\n case '>': escaped += '>'; break;\n case '&': escaped += '&'; break;\n case '\"': escaped += '"'; break;\n default : escaped += c; break;\n }\n }\n return escaped;\n };\n\n var _createHalfASCII = function(margin) {\n var cellSize = 1;\n margin = (typeof margin == 'undefined')? cellSize * 2 : margin;\n\n var size = _this.getModuleCount() * cellSize + margin * 2;\n var min = margin;\n var max = size - margin;\n\n var y, x, r1, r2, p;\n\n var blocks = {\n '██': '█',\n '█ ': '▀',\n ' █': '▄',\n ' ': ' '\n };\n\n var blocksLastLineNoMargin = {\n '██': '▀',\n '█ ': '▀',\n ' █': ' ',\n ' ': ' '\n };\n\n var ascii = '';\n for (y = 0; y < size; y += 2) {\n r1 = Math.floor((y - min) / cellSize);\n r2 = Math.floor((y + 1 - min) / cellSize);\n for (x = 0; x < size; x += 1) {\n p = '█';\n\n if (min <= x && x < max && min <= y && y < max && _this.isDark(r1, Math.floor((x - min) / cellSize))) {\n p = ' ';\n }\n\n if (min <= x && x < max && min <= y+1 && y+1 < max && _this.isDark(r2, Math.floor((x - min) / cellSize))) {\n p += ' ';\n }\n else {\n p += '█';\n }\n\n // Output 2 characters per pixel, to create full square. 1 character per pixels gives only half width of square.\n ascii += (margin < 1 && y+1 >= max) ? blocksLastLineNoMargin[p] : blocks[p];\n }\n\n ascii += '\\n';\n }\n\n if (size % 2 && margin > 0) {\n return ascii.substring(0, ascii.length - size - 1) + Array(size+1).join('▀');\n }\n\n return ascii.substring(0, ascii.length-1);\n };\n\n _this.createASCII = function(cellSize, margin) {\n cellSize = cellSize || 1;\n\n if (cellSize < 2) {\n return _createHalfASCII(margin);\n }\n\n cellSize -= 1;\n margin = (typeof margin == 'undefined')? cellSize * 2 : margin;\n\n var size = _this.getModuleCount() * cellSize + margin * 2;\n var min = margin;\n var max = size - margin;\n\n var y, x, r, p;\n\n var white = Array(cellSize+1).join('██');\n var black = Array(cellSize+1).join(' ');\n\n var ascii = '';\n var line = '';\n for (y = 0; y < size; y += 1) {\n r = Math.floor( (y - min) / cellSize);\n line = '';\n for (x = 0; x < size; x += 1) {\n p = 1;\n\n if (min <= x && x < max && min <= y && y < max && _this.isDark(r, Math.floor((x - min) / cellSize))) {\n p = 0;\n }\n\n // Output 2 characters per pixel, to create full square. 1 character per pixels gives only half width of square.\n line += p ? white : black;\n }\n\n for (r = 0; r < cellSize; r += 1) {\n ascii += line + '\\n';\n }\n }\n\n return ascii.substring(0, ascii.length-1);\n };\n\n _this.renderTo2dContext = function(context, cellSize) {\n cellSize = cellSize || 2;\n var length = _this.getModuleCount();\n for (var row = 0; row < length; row++) {\n for (var col = 0; col < length; col++) {\n context.fillStyle = _this.isDark(row, col) ? 'black' : 'white';\n context.fillRect(row * cellSize, col * cellSize, cellSize, cellSize);\n }\n }\n }\n\n return _this;\n };\n\n //---------------------------------------------------------------------\n // qrcode.stringToBytes\n //---------------------------------------------------------------------\n\n qrcode.stringToBytesFuncs = {\n 'default' : function(s) {\n var bytes = [];\n for (var i = 0; i < s.length; i += 1) {\n var c = s.charCodeAt(i);\n bytes.push(c & 0xff);\n }\n return bytes;\n }\n };\n\n qrcode.stringToBytes = qrcode.stringToBytesFuncs['default'];\n\n //---------------------------------------------------------------------\n // qrcode.createStringToBytes\n //---------------------------------------------------------------------\n\n /**\n * @param unicodeData base64 string of byte array.\n * [16bit Unicode],[16bit Bytes], ...\n * @param numChars\n */\n qrcode.createStringToBytes = function(unicodeData, numChars) {\n\n // create conversion map.\n\n var unicodeMap = function() {\n\n var bin = base64DecodeInputStream(unicodeData);\n var read = function() {\n var b = bin.read();\n if (b == -1) throw 'eof';\n return b;\n };\n\n var count = 0;\n var unicodeMap = {};\n while (true) {\n var b0 = bin.read();\n if (b0 == -1) break;\n var b1 = read();\n var b2 = read();\n var b3 = read();\n var k = String.fromCharCode( (b0 << 8) | b1);\n var v = (b2 << 8) | b3;\n unicodeMap[k] = v;\n count += 1;\n }\n if (count != numChars) {\n throw count + ' != ' + numChars;\n }\n\n return unicodeMap;\n }();\n\n var unknownChar = '?'.charCodeAt(0);\n\n return function(s) {\n var bytes = [];\n for (var i = 0; i < s.length; i += 1) {\n var c = s.charCodeAt(i);\n if (c < 128) {\n bytes.push(c);\n } else {\n var b = unicodeMap[s.charAt(i)];\n if (typeof b == 'number') {\n if ( (b & 0xff) == b) {\n // 1byte\n bytes.push(b);\n } else {\n // 2bytes\n bytes.push(b >>> 8);\n bytes.push(b & 0xff);\n }\n } else {\n bytes.push(unknownChar);\n }\n }\n }\n return bytes;\n };\n };\n\n //---------------------------------------------------------------------\n // QRMode\n //---------------------------------------------------------------------\n\n var QRMode = {\n MODE_NUMBER : 1 << 0,\n MODE_ALPHA_NUM : 1 << 1,\n MODE_8BIT_BYTE : 1 << 2,\n MODE_KANJI : 1 << 3\n };\n\n //---------------------------------------------------------------------\n // QRErrorCorrectionLevel\n //---------------------------------------------------------------------\n\n var QRErrorCorrectionLevel = {\n L : 1,\n M : 0,\n Q : 3,\n H : 2\n };\n\n //---------------------------------------------------------------------\n // QRMaskPattern\n //---------------------------------------------------------------------\n\n var QRMaskPattern = {\n PATTERN000 : 0,\n PATTERN001 : 1,\n PATTERN010 : 2,\n PATTERN011 : 3,\n PATTERN100 : 4,\n PATTERN101 : 5,\n PATTERN110 : 6,\n PATTERN111 : 7\n };\n\n //---------------------------------------------------------------------\n // QRUtil\n //---------------------------------------------------------------------\n\n var QRUtil = function() {\n\n var PATTERN_POSITION_TABLE = [\n [],\n [6, 18],\n [6, 22],\n [6, 26],\n [6, 30],\n [6, 34],\n [6, 22, 38],\n [6, 24, 42],\n [6, 26, 46],\n [6, 28, 50],\n [6, 30, 54],\n [6, 32, 58],\n [6, 34, 62],\n [6, 26, 46, 66],\n [6, 26, 48, 70],\n [6, 26, 50, 74],\n [6, 30, 54, 78],\n [6, 30, 56, 82],\n [6, 30, 58, 86],\n [6, 34, 62, 90],\n [6, 28, 50, 72, 94],\n [6, 26, 50, 74, 98],\n [6, 30, 54, 78, 102],\n [6, 28, 54, 80, 106],\n [6, 32, 58, 84, 110],\n [6, 30, 58, 86, 114],\n [6, 34, 62, 90, 118],\n [6, 26, 50, 74, 98, 122],\n [6, 30, 54, 78, 102, 126],\n [6, 26, 52, 78, 104, 130],\n [6, 30, 56, 82, 108, 134],\n [6, 34, 60, 86, 112, 138],\n [6, 30, 58, 86, 114, 142],\n [6, 34, 62, 90, 118, 146],\n [6, 30, 54, 78, 102, 126, 150],\n [6, 24, 50, 76, 102, 128, 154],\n [6, 28, 54, 80, 106, 132, 158],\n [6, 32, 58, 84, 110, 136, 162],\n [6, 26, 54, 82, 110, 138, 166],\n [6, 30, 58, 86, 114, 142, 170]\n ];\n var G15 = (1 << 10) | (1 << 8) | (1 << 5) | (1 << 4) | (1 << 2) | (1 << 1) | (1 << 0);\n var G18 = (1 << 12) | (1 << 11) | (1 << 10) | (1 << 9) | (1 << 8) | (1 << 5) | (1 << 2) | (1 << 0);\n var G15_MASK = (1 << 14) | (1 << 12) | (1 << 10) | (1 << 4) | (1 << 1);\n\n var _this = {};\n\n var getBCHDigit = function(data) {\n var digit = 0;\n while (data != 0) {\n digit += 1;\n data >>>= 1;\n }\n return digit;\n };\n\n _this.getBCHTypeInfo = function(data) {\n var d = data << 10;\n while (getBCHDigit(d) - getBCHDigit(G15) >= 0) {\n d ^= (G15 << (getBCHDigit(d) - getBCHDigit(G15) ) );\n }\n return ( (data << 10) | d) ^ G15_MASK;\n };\n\n _this.getBCHTypeNumber = function(data) {\n var d = data << 12;\n while (getBCHDigit(d) - getBCHDigit(G18) >= 0) {\n d ^= (G18 << (getBCHDigit(d) - getBCHDigit(G18) ) );\n }\n return (data << 12) | d;\n };\n\n _this.getPatternPosition = function(typeNumber) {\n return PATTERN_POSITION_TABLE[typeNumber - 1];\n };\n\n _this.getMaskFunction = function(maskPattern) {\n\n switch (maskPattern) {\n\n case QRMaskPattern.PATTERN000 :\n return function(i, j) { return (i + j) % 2 == 0; };\n case QRMaskPattern.PATTERN001 :\n return function(i, j) { return i % 2 == 0; };\n case QRMaskPattern.PATTERN010 :\n return function(i, j) { return j % 3 == 0; };\n case QRMaskPattern.PATTERN011 :\n return function(i, j) { return (i + j) % 3 == 0; };\n case QRMaskPattern.PATTERN100 :\n return function(i, j) { return (Math.floor(i / 2) + Math.floor(j / 3) ) % 2 == 0; };\n case QRMaskPattern.PATTERN101 :\n return function(i, j) { return (i * j) % 2 + (i * j) % 3 == 0; };\n case QRMaskPattern.PATTERN110 :\n return function(i, j) { return ( (i * j) % 2 + (i * j) % 3) % 2 == 0; };\n case QRMaskPattern.PATTERN111 :\n return function(i, j) { return ( (i * j) % 3 + (i + j) % 2) % 2 == 0; };\n\n default :\n throw 'bad maskPattern:' + maskPattern;\n }\n };\n\n _this.getErrorCorrectPolynomial = function(errorCorrectLength) {\n var a = qrPolynomial([1], 0);\n for (var i = 0; i < errorCorrectLength; i += 1) {\n a = a.multiply(qrPolynomial([1, QRMath.gexp(i)], 0) );\n }\n return a;\n };\n\n _this.getLengthInBits = function(mode, type) {\n\n if (1 <= type && type < 10) {\n\n // 1 - 9\n\n switch(mode) {\n case QRMode.MODE_NUMBER : return 10;\n case QRMode.MODE_ALPHA_NUM : return 9;\n case QRMode.MODE_8BIT_BYTE : return 8;\n case QRMode.MODE_KANJI : return 8;\n default :\n throw 'mode:' + mode;\n }\n\n } else if (type < 27) {\n\n // 10 - 26\n\n switch(mode) {\n case QRMode.MODE_NUMBER : return 12;\n case QRMode.MODE_ALPHA_NUM : return 11;\n case QRMode.MODE_8BIT_BYTE : return 16;\n case QRMode.MODE_KANJI : return 10;\n default :\n throw 'mode:' + mode;\n }\n\n } else if (type < 41) {\n\n // 27 - 40\n\n switch(mode) {\n case QRMode.MODE_NUMBER : return 14;\n case QRMode.MODE_ALPHA_NUM : return 13;\n case QRMode.MODE_8BIT_BYTE : return 16;\n case QRMode.MODE_KANJI : return 12;\n default :\n throw 'mode:' + mode;\n }\n\n } else {\n throw 'type:' + type;\n }\n };\n\n _this.getLostPoint = function(qrcode) {\n\n var moduleCount = qrcode.getModuleCount();\n\n var lostPoint = 0;\n\n // LEVEL1\n\n for (var row = 0; row < moduleCount; row += 1) {\n for (var col = 0; col < moduleCount; col += 1) {\n\n var sameCount = 0;\n var dark = qrcode.isDark(row, col);\n\n for (var r = -1; r <= 1; r += 1) {\n\n if (row + r < 0 || moduleCount <= row + r) {\n continue;\n }\n\n for (var c = -1; c <= 1; c += 1) {\n\n if (col + c < 0 || moduleCount <= col + c) {\n continue;\n }\n\n if (r == 0 && c == 0) {\n continue;\n }\n\n if (dark == qrcode.isDark(row + r, col + c) ) {\n sameCount += 1;\n }\n }\n }\n\n if (sameCount > 5) {\n lostPoint += (3 + sameCount - 5);\n }\n }\n };\n\n // LEVEL2\n\n for (var row = 0; row < moduleCount - 1; row += 1) {\n for (var col = 0; col < moduleCount - 1; col += 1) {\n var count = 0;\n if (qrcode.isDark(row, col) ) count += 1;\n if (qrcode.isDark(row + 1, col) ) count += 1;\n if (qrcode.isDark(row, col + 1) ) count += 1;\n if (qrcode.isDark(row + 1, col + 1) ) count += 1;\n if (count == 0 || count == 4) {\n lostPoint += 3;\n }\n }\n }\n\n // LEVEL3\n\n for (var row = 0; row < moduleCount; row += 1) {\n for (var col = 0; col < moduleCount - 6; col += 1) {\n if (qrcode.isDark(row, col)\n && !qrcode.isDark(row, col + 1)\n && qrcode.isDark(row, col + 2)\n && qrcode.isDark(row, col + 3)\n && qrcode.isDark(row, col + 4)\n && !qrcode.isDark(row, col + 5)\n && qrcode.isDark(row, col + 6) ) {\n lostPoint += 40;\n }\n }\n }\n\n for (var col = 0; col < moduleCount; col += 1) {\n for (var row = 0; row < moduleCount - 6; row += 1) {\n if (qrcode.isDark(row, col)\n && !qrcode.isDark(row + 1, col)\n && qrcode.isDark(row + 2, col)\n && qrcode.isDark(row + 3, col)\n && qrcode.isDark(row + 4, col)\n && !qrcode.isDark(row + 5, col)\n && qrcode.isDark(row + 6, col) ) {\n lostPoint += 40;\n }\n }\n }\n\n // LEVEL4\n\n var darkCount = 0;\n\n for (var col = 0; col < moduleCount; col += 1) {\n for (var row = 0; row < moduleCount; row += 1) {\n if (qrcode.isDark(row, col) ) {\n darkCount += 1;\n }\n }\n }\n\n var ratio = Math.abs(100 * darkCount / moduleCount / moduleCount - 50) / 5;\n lostPoint += ratio * 10;\n\n return lostPoint;\n };\n\n return _this;\n }();\n\n //---------------------------------------------------------------------\n // QRMath\n //---------------------------------------------------------------------\n\n var QRMath = function() {\n\n var EXP_TABLE = new Array(256);\n var LOG_TABLE = new Array(256);\n\n // initialize tables\n for (var i = 0; i < 8; i += 1) {\n EXP_TABLE[i] = 1 << i;\n }\n for (var i = 8; i < 256; i += 1) {\n EXP_TABLE[i] = EXP_TABLE[i - 4]\n ^ EXP_TABLE[i - 5]\n ^ EXP_TABLE[i - 6]\n ^ EXP_TABLE[i - 8];\n }\n for (var i = 0; i < 255; i += 1) {\n LOG_TABLE[EXP_TABLE[i] ] = i;\n }\n\n var _this = {};\n\n _this.glog = function(n) {\n\n if (n < 1) {\n throw 'glog(' + n + ')';\n }\n\n return LOG_TABLE[n];\n };\n\n _this.gexp = function(n) {\n\n while (n < 0) {\n n += 255;\n }\n\n while (n >= 256) {\n n -= 255;\n }\n\n return EXP_TABLE[n];\n };\n\n return _this;\n }();\n\n //---------------------------------------------------------------------\n // qrPolynomial\n //---------------------------------------------------------------------\n\n function qrPolynomial(num, shift) {\n\n if (typeof num.length == 'undefined') {\n throw num.length + '/' + shift;\n }\n\n var _num = function() {\n var offset = 0;\n while (offset < num.length && num[offset] == 0) {\n offset += 1;\n }\n var _num = new Array(num.length - offset + shift);\n for (var i = 0; i < num.length - offset; i += 1) {\n _num[i] = num[i + offset];\n }\n return _num;\n }();\n\n var _this = {};\n\n _this.getAt = function(index) {\n return _num[index];\n };\n\n _this.getLength = function() {\n return _num.length;\n };\n\n _this.multiply = function(e) {\n\n var num = new Array(_this.getLength() + e.getLength() - 1);\n\n for (var i = 0; i < _this.getLength(); i += 1) {\n for (var j = 0; j < e.getLength(); j += 1) {\n num[i + j] ^= QRMath.gexp(QRMath.glog(_this.getAt(i) ) + QRMath.glog(e.getAt(j) ) );\n }\n }\n\n return qrPolynomial(num, 0);\n };\n\n _this.mod = function(e) {\n\n if (_this.getLength() - e.getLength() < 0) {\n return _this;\n }\n\n var ratio = QRMath.glog(_this.getAt(0) ) - QRMath.glog(e.getAt(0) );\n\n var num = new Array(_this.getLength() );\n for (var i = 0; i < _this.getLength(); i += 1) {\n num[i] = _this.getAt(i);\n }\n\n for (var i = 0; i < e.getLength(); i += 1) {\n num[i] ^= QRMath.gexp(QRMath.glog(e.getAt(i) ) + ratio);\n }\n\n // recursive call\n return qrPolynomial(num, 0).mod(e);\n };\n\n return _this;\n };\n\n //---------------------------------------------------------------------\n // QRRSBlock\n //---------------------------------------------------------------------\n\n var QRRSBlock = function() {\n\n var RS_BLOCK_TABLE = [\n\n // L\n // M\n // Q\n // H\n\n // 1\n [1, 26, 19],\n [1, 26, 16],\n [1, 26, 13],\n [1, 26, 9],\n\n // 2\n [1, 44, 34],\n [1, 44, 28],\n [1, 44, 22],\n [1, 44, 16],\n\n // 3\n [1, 70, 55],\n [1, 70, 44],\n [2, 35, 17],\n [2, 35, 13],\n\n // 4\n [1, 100, 80],\n [2, 50, 32],\n [2, 50, 24],\n [4, 25, 9],\n\n // 5\n [1, 134, 108],\n [2, 67, 43],\n [2, 33, 15, 2, 34, 16],\n [2, 33, 11, 2, 34, 12],\n\n // 6\n [2, 86, 68],\n [4, 43, 27],\n [4, 43, 19],\n [4, 43, 15],\n\n // 7\n [2, 98, 78],\n [4, 49, 31],\n [2, 32, 14, 4, 33, 15],\n [4, 39, 13, 1, 40, 14],\n\n // 8\n [2, 121, 97],\n [2, 60, 38, 2, 61, 39],\n [4, 40, 18, 2, 41, 19],\n [4, 40, 14, 2, 41, 15],\n\n // 9\n [2, 146, 116],\n [3, 58, 36, 2, 59, 37],\n [4, 36, 16, 4, 37, 17],\n [4, 36, 12, 4, 37, 13],\n\n // 10\n [2, 86, 68, 2, 87, 69],\n [4, 69, 43, 1, 70, 44],\n [6, 43, 19, 2, 44, 20],\n [6, 43, 15, 2, 44, 16],\n\n // 11\n [4, 101, 81],\n [1, 80, 50, 4, 81, 51],\n [4, 50, 22, 4, 51, 23],\n [3, 36, 12, 8, 37, 13],\n\n // 12\n [2, 116, 92, 2, 117, 93],\n [6, 58, 36, 2, 59, 37],\n [4, 46, 20, 6, 47, 21],\n [7, 42, 14, 4, 43, 15],\n\n // 13\n [4, 133, 107],\n [8, 59, 37, 1, 60, 38],\n [8, 44, 20, 4, 45, 21],\n [12, 33, 11, 4, 34, 12],\n\n // 14\n [3, 145, 115, 1, 146, 116],\n [4, 64, 40, 5, 65, 41],\n [11, 36, 16, 5, 37, 17],\n [11, 36, 12, 5, 37, 13],\n\n // 15\n [5, 109, 87, 1, 110, 88],\n [5, 65, 41, 5, 66, 42],\n [5, 54, 24, 7, 55, 25],\n [11, 36, 12, 7, 37, 13],\n\n // 16\n [5, 122, 98, 1, 123, 99],\n [7, 73, 45, 3, 74, 46],\n [15, 43, 19, 2, 44, 20],\n [3, 45, 15, 13, 46, 16],\n\n // 17\n [1, 135, 107, 5, 136, 108],\n [10, 74, 46, 1, 75, 47],\n [1, 50, 22, 15, 51, 23],\n [2, 42, 14, 17, 43, 15],\n\n // 18\n [5, 150, 120, 1, 151, 121],\n [9, 69, 43, 4, 70, 44],\n [17, 50, 22, 1, 51, 23],\n [2, 42, 14, 19, 43, 15],\n\n // 19\n [3, 141, 113, 4, 142, 114],\n [3, 70, 44, 11, 71, 45],\n [17, 47, 21, 4, 48, 22],\n [9, 39, 13, 16, 40, 14],\n\n // 20\n [3, 135, 107, 5, 136, 108],\n [3, 67, 41, 13, 68, 42],\n [15, 54, 24, 5, 55, 25],\n [15, 43, 15, 10, 44, 16],\n\n // 21\n [4, 144, 116, 4, 145, 117],\n [17, 68, 42],\n [17, 50, 22, 6, 51, 23],\n [19, 46, 16, 6, 47, 17],\n\n // 22\n [2, 139, 111, 7, 140, 112],\n [17, 74, 46],\n [7, 54, 24, 16, 55, 25],\n [34, 37, 13],\n\n // 23\n [4, 151, 121, 5, 152, 122],\n [4, 75, 47, 14, 76, 48],\n [11, 54, 24, 14, 55, 25],\n [16, 45, 15, 14, 46, 16],\n\n // 24\n [6, 147, 117, 4, 148, 118],\n [6, 73, 45, 14, 74, 46],\n [11, 54, 24, 16, 55, 25],\n [30, 46, 16, 2, 47, 17],\n\n // 25\n [8, 132, 106, 4, 133, 107],\n [8, 75, 47, 13, 76, 48],\n [7, 54, 24, 22, 55, 25],\n [22, 45, 15, 13, 46, 16],\n\n // 26\n [10, 142, 114, 2, 143, 115],\n [19, 74, 46, 4, 75, 47],\n [28, 50, 22, 6, 51, 23],\n [33, 46, 16, 4, 47, 17],\n\n // 27\n [8, 152, 122, 4, 153, 123],\n [22, 73, 45, 3, 74, 46],\n [8, 53, 23, 26, 54, 24],\n [12, 45, 15, 28, 46, 16],\n\n // 28\n [3, 147, 117, 10, 148, 118],\n [3, 73, 45, 23, 74, 46],\n [4, 54, 24, 31, 55, 25],\n [11, 45, 15, 31, 46, 16],\n\n // 29\n [7, 146, 116, 7, 147, 117],\n [21, 73, 45, 7, 74, 46],\n [1, 53, 23, 37, 54, 24],\n [19, 45, 15, 26, 46, 16],\n\n // 30\n [5, 145, 115, 10, 146, 116],\n [19, 75, 47, 10, 76, 48],\n [15, 54, 24, 25, 55, 25],\n [23, 45, 15, 25, 46, 16],\n\n // 31\n [13, 145, 115, 3, 146, 116],\n [2, 74, 46, 29, 75, 47],\n [42, 54, 24, 1, 55, 25],\n [23, 45, 15, 28, 46, 16],\n\n // 32\n [17, 145, 115],\n [10, 74, 46, 23, 75, 47],\n [10, 54, 24, 35, 55, 25],\n [19, 45, 15, 35, 46, 16],\n\n // 33\n [17, 145, 115, 1, 146, 116],\n [14, 74, 46, 21, 75, 47],\n [29, 54, 24, 19, 55, 25],\n [11, 45, 15, 46, 46, 16],\n\n // 34\n [13, 145, 115, 6, 146, 116],\n [14, 74, 46, 23, 75, 47],\n [44, 54, 24, 7, 55, 25],\n [59, 46, 16, 1, 47, 17],\n\n // 35\n [12, 151, 121, 7, 152, 122],\n [12, 75, 47, 26, 76, 48],\n [39, 54, 24, 14, 55, 25],\n [22, 45, 15, 41, 46, 16],\n\n // 36\n [6, 151, 121, 14, 152, 122],\n [6, 75, 47, 34, 76, 48],\n [46, 54, 24, 10, 55, 25],\n [2, 45, 15, 64, 46, 16],\n\n // 37\n [17, 152, 122, 4, 153, 123],\n [29, 74, 46, 14, 75, 47],\n [49, 54, 24, 10, 55, 25],\n [24, 45, 15, 46, 46, 16],\n\n // 38\n [4, 152, 122, 18, 153, 123],\n [13, 74, 46, 32, 75, 47],\n [48, 54, 24, 14, 55, 25],\n [42, 45, 15, 32, 46, 16],\n\n // 39\n [20, 147, 117, 4, 148, 118],\n [40, 75, 47, 7, 76, 48],\n [43, 54, 24, 22, 55, 25],\n [10, 45, 15, 67, 46, 16],\n\n // 40\n [19, 148, 118, 6, 149, 119],\n [18, 75, 47, 31, 76, 48],\n [34, 54, 24, 34, 55, 25],\n [20, 45, 15, 61, 46, 16]\n ];\n\n var qrRSBlock = function(totalCount, dataCount) {\n var _this = {};\n _this.totalCount = totalCount;\n _this.dataCount = dataCount;\n return _this;\n };\n\n var _this = {};\n\n var getRsBlockTable = function(typeNumber, errorCorrectionLevel) {\n\n switch(errorCorrectionLevel) {\n case QRErrorCorrectionLevel.L :\n return RS_BLOCK_TABLE[(typeNumber - 1) * 4 + 0];\n case QRErrorCorrectionLevel.M :\n return RS_BLOCK_TABLE[(typeNumber - 1) * 4 + 1];\n case QRErrorCorrectionLevel.Q :\n return RS_BLOCK_TABLE[(typeNumber - 1) * 4 + 2];\n case QRErrorCorrectionLevel.H :\n return RS_BLOCK_TABLE[(typeNumber - 1) * 4 + 3];\n default :\n return undefined;\n }\n };\n\n _this.getRSBlocks = function(typeNumber, errorCorrectionLevel) {\n\n var rsBlock = getRsBlockTable(typeNumber, errorCorrectionLevel);\n\n if (typeof rsBlock == 'undefined') {\n throw 'bad rs block @ typeNumber:' + typeNumber +\n '/errorCorrectionLevel:' + errorCorrectionLevel;\n }\n\n var length = rsBlock.length / 3;\n\n var list = [];\n\n for (var i = 0; i < length; i += 1) {\n\n var count = rsBlock[i * 3 + 0];\n var totalCount = rsBlock[i * 3 + 1];\n var dataCount = rsBlock[i * 3 + 2];\n\n for (var j = 0; j < count; j += 1) {\n list.push(qrRSBlock(totalCount, dataCount) );\n }\n }\n\n return list;\n };\n\n return _this;\n }();\n\n //---------------------------------------------------------------------\n // qrBitBuffer\n //---------------------------------------------------------------------\n\n var qrBitBuffer = function() {\n\n var _buffer = [];\n var _length = 0;\n\n var _this = {};\n\n _this.getBuffer = function() {\n return _buffer;\n };\n\n _this.getAt = function(index) {\n var bufIndex = Math.floor(index / 8);\n return ( (_buffer[bufIndex] >>> (7 - index % 8) ) & 1) == 1;\n };\n\n _this.put = function(num, length) {\n for (var i = 0; i < length; i += 1) {\n _this.putBit( ( (num >>> (length - i - 1) ) & 1) == 1);\n }\n };\n\n _this.getLengthInBits = function() {\n return _length;\n };\n\n _this.putBit = function(bit) {\n\n var bufIndex = Math.floor(_length / 8);\n if (_buffer.length <= bufIndex) {\n _buffer.push(0);\n }\n\n if (bit) {\n _buffer[bufIndex] |= (0x80 >>> (_length % 8) );\n }\n\n _length += 1;\n };\n\n return _this;\n };\n\n //---------------------------------------------------------------------\n // qrNumber\n //---------------------------------------------------------------------\n\n var qrNumber = function(data) {\n\n var _mode = QRMode.MODE_NUMBER;\n var _data = data;\n\n var _this = {};\n\n _this.getMode = function() {\n return _mode;\n };\n\n _this.getLength = function(buffer) {\n return _data.length;\n };\n\n _this.write = function(buffer) {\n\n var data = _data;\n\n var i = 0;\n\n while (i + 2 < data.length) {\n buffer.put(strToNum(data.substring(i, i + 3) ), 10);\n i += 3;\n }\n\n if (i < data.length) {\n if (data.length - i == 1) {\n buffer.put(strToNum(data.substring(i, i + 1) ), 4);\n } else if (data.length - i == 2) {\n buffer.put(strToNum(data.substring(i, i + 2) ), 7);\n }\n }\n };\n\n var strToNum = function(s) {\n var num = 0;\n for (var i = 0; i < s.length; i += 1) {\n num = num * 10 + chatToNum(s.charAt(i) );\n }\n return num;\n };\n\n var chatToNum = function(c) {\n if ('0' <= c && c <= '9') {\n return c.charCodeAt(0) - '0'.charCodeAt(0);\n }\n throw 'illegal char :' + c;\n };\n\n return _this;\n };\n\n //---------------------------------------------------------------------\n // qrAlphaNum\n //---------------------------------------------------------------------\n\n var qrAlphaNum = function(data) {\n\n var _mode = QRMode.MODE_ALPHA_NUM;\n var _data = data;\n\n var _this = {};\n\n _this.getMode = function() {\n return _mode;\n };\n\n _this.getLength = function(buffer) {\n return _data.length;\n };\n\n _this.write = function(buffer) {\n\n var s = _data;\n\n var i = 0;\n\n while (i + 1 < s.length) {\n buffer.put(\n getCode(s.charAt(i) ) * 45 +\n getCode(s.charAt(i + 1) ), 11);\n i += 2;\n }\n\n if (i < s.length) {\n buffer.put(getCode(s.charAt(i) ), 6);\n }\n };\n\n var getCode = function(c) {\n\n if ('0' <= c && c <= '9') {\n return c.charCodeAt(0) - '0'.charCodeAt(0);\n } else if ('A' <= c && c <= 'Z') {\n return c.charCodeAt(0) - 'A'.charCodeAt(0) + 10;\n } else {\n switch (c) {\n case ' ' : return 36;\n case '$' : return 37;\n case '%' : return 38;\n case '*' : return 39;\n case '+' : return 40;\n case '-' : return 41;\n case '.' : return 42;\n case '/' : return 43;\n case ':' : return 44;\n default :\n throw 'illegal char :' + c;\n }\n }\n };\n\n return _this;\n };\n\n //---------------------------------------------------------------------\n // qr8BitByte\n //---------------------------------------------------------------------\n\n var qr8BitByte = function(data) {\n\n var _mode = QRMode.MODE_8BIT_BYTE;\n var _data = data;\n var _bytes = qrcode.stringToBytes(data);\n\n var _this = {};\n\n _this.getMode = function() {\n return _mode;\n };\n\n _this.getLength = function(buffer) {\n return _bytes.length;\n };\n\n _this.write = function(buffer) {\n for (var i = 0; i < _bytes.length; i += 1) {\n buffer.put(_bytes[i], 8);\n }\n };\n\n return _this;\n };\n\n //---------------------------------------------------------------------\n // qrKanji\n //---------------------------------------------------------------------\n\n var qrKanji = function(data) {\n\n var _mode = QRMode.MODE_KANJI;\n var _data = data;\n\n var stringToBytes = qrcode.stringToBytesFuncs['SJIS'];\n if (!stringToBytes) {\n throw 'sjis not supported.';\n }\n !function(c, code) {\n // self test for sjis support.\n var test = stringToBytes(c);\n if (test.length != 2 || ( (test[0] << 8) | test[1]) != code) {\n throw 'sjis not supported.';\n }\n }('\\u53cb', 0x9746);\n\n var _bytes = stringToBytes(data);\n\n var _this = {};\n\n _this.getMode = function() {\n return _mode;\n };\n\n _this.getLength = function(buffer) {\n return ~~(_bytes.length / 2);\n };\n\n _this.write = function(buffer) {\n\n var data = _bytes;\n\n var i = 0;\n\n while (i + 1 < data.length) {\n\n var c = ( (0xff & data[i]) << 8) | (0xff & data[i + 1]);\n\n if (0x8140 <= c && c <= 0x9FFC) {\n c -= 0x8140;\n } else if (0xE040 <= c && c <= 0xEBBF) {\n c -= 0xC140;\n } else {\n throw 'illegal char at ' + (i + 1) + '/' + c;\n }\n\n c = ( (c >>> 8) & 0xff) * 0xC0 + (c & 0xff);\n\n buffer.put(c, 13);\n\n i += 2;\n }\n\n if (i < data.length) {\n throw 'illegal char at ' + (i + 1);\n }\n };\n\n return _this;\n };\n\n //=====================================================================\n // GIF Support etc.\n //\n\n //---------------------------------------------------------------------\n // byteArrayOutputStream\n //---------------------------------------------------------------------\n\n var byteArrayOutputStream = function() {\n\n var _bytes = [];\n\n var _this = {};\n\n _this.writeByte = function(b) {\n _bytes.push(b & 0xff);\n };\n\n _this.writeShort = function(i) {\n _this.writeByte(i);\n _this.writeByte(i >>> 8);\n };\n\n _this.writeBytes = function(b, off, len) {\n off = off || 0;\n len = len || b.length;\n for (var i = 0; i < len; i += 1) {\n _this.writeByte(b[i + off]);\n }\n };\n\n _this.writeString = function(s) {\n for (var i = 0; i < s.length; i += 1) {\n _this.writeByte(s.charCodeAt(i) );\n }\n };\n\n _this.toByteArray = function() {\n return _bytes;\n };\n\n _this.toString = function() {\n var s = '';\n s += '[';\n for (var i = 0; i < _bytes.length; i += 1) {\n if (i > 0) {\n s += ',';\n }\n s += _bytes[i];\n }\n s += ']';\n return s;\n };\n\n return _this;\n };\n\n //---------------------------------------------------------------------\n // base64EncodeOutputStream\n //---------------------------------------------------------------------\n\n var base64EncodeOutputStream = function() {\n\n var _buffer = 0;\n var _buflen = 0;\n var _length = 0;\n var _base64 = '';\n\n var _this = {};\n\n var writeEncoded = function(b) {\n _base64 += String.fromCharCode(encode(b & 0x3f) );\n };\n\n var encode = function(n) {\n if (n < 0) {\n // error.\n } else if (n < 26) {\n return 0x41 + n;\n } else if (n < 52) {\n return 0x61 + (n - 26);\n } else if (n < 62) {\n return 0x30 + (n - 52);\n } else if (n == 62) {\n return 0x2b;\n } else if (n == 63) {\n return 0x2f;\n }\n throw 'n:' + n;\n };\n\n _this.writeByte = function(n) {\n\n _buffer = (_buffer << 8) | (n & 0xff);\n _buflen += 8;\n _length += 1;\n\n while (_buflen >= 6) {\n writeEncoded(_buffer >>> (_buflen - 6) );\n _buflen -= 6;\n }\n };\n\n _this.flush = function() {\n\n if (_buflen > 0) {\n writeEncoded(_buffer << (6 - _buflen) );\n _buffer = 0;\n _buflen = 0;\n }\n\n if (_length % 3 != 0) {\n // padding\n var padlen = 3 - _length % 3;\n for (var i = 0; i < padlen; i += 1) {\n _base64 += '=';\n }\n }\n };\n\n _this.toString = function() {\n return _base64;\n };\n\n return _this;\n };\n\n //---------------------------------------------------------------------\n // base64DecodeInputStream\n //---------------------------------------------------------------------\n\n var base64DecodeInputStream = function(str) {\n\n var _str = str;\n var _pos = 0;\n var _buffer = 0;\n var _buflen = 0;\n\n var _this = {};\n\n _this.read = function() {\n\n while (_buflen < 8) {\n\n if (_pos >= _str.length) {\n if (_buflen == 0) {\n return -1;\n }\n throw 'unexpected end of file./' + _buflen;\n }\n\n var c = _str.charAt(_pos);\n _pos += 1;\n\n if (c == '=') {\n _buflen = 0;\n return -1;\n } else if (c.match(/^\\s$/) ) {\n // ignore if whitespace.\n continue;\n }\n\n _buffer = (_buffer << 6) | decode(c.charCodeAt(0) );\n _buflen += 6;\n }\n\n var n = (_buffer >>> (_buflen - 8) ) & 0xff;\n _buflen -= 8;\n return n;\n };\n\n var decode = function(c) {\n if (0x41 <= c && c <= 0x5a) {\n return c - 0x41;\n } else if (0x61 <= c && c <= 0x7a) {\n return c - 0x61 + 26;\n } else if (0x30 <= c && c <= 0x39) {\n return c - 0x30 + 52;\n } else if (c == 0x2b) {\n return 62;\n } else if (c == 0x2f) {\n return 63;\n } else {\n throw 'c:' + c;\n }\n };\n\n return _this;\n };\n\n //---------------------------------------------------------------------\n // gifImage (B/W)\n //---------------------------------------------------------------------\n\n var gifImage = function(width, height) {\n\n var _width = width;\n var _height = height;\n var _data = new Array(width * height);\n\n var _this = {};\n\n _this.setPixel = function(x, y, pixel) {\n _data[y * _width + x] = pixel;\n };\n\n _this.write = function(out) {\n\n //---------------------------------\n // GIF Signature\n\n out.writeString('GIF87a');\n\n //---------------------------------\n // Screen Descriptor\n\n out.writeShort(_width);\n out.writeShort(_height);\n\n out.writeByte(0x80); // 2bit\n out.writeByte(0);\n out.writeByte(0);\n\n //---------------------------------\n // Global Color Map\n\n // black\n out.writeByte(0x00);\n out.writeByte(0x00);\n out.writeByte(0x00);\n\n // white\n out.writeByte(0xff);\n out.writeByte(0xff);\n out.writeByte(0xff);\n\n //---------------------------------\n // Image Descriptor\n\n out.writeString(',');\n out.writeShort(0);\n out.writeShort(0);\n out.writeShort(_width);\n out.writeShort(_height);\n out.writeByte(0);\n\n //---------------------------------\n // Local Color Map\n\n //---------------------------------\n // Raster Data\n\n var lzwMinCodeSize = 2;\n var raster = getLZWRaster(lzwMinCodeSize);\n\n out.writeByte(lzwMinCodeSize);\n\n var offset = 0;\n\n while (raster.length - offset > 255) {\n out.writeByte(255);\n out.writeBytes(raster, offset, 255);\n offset += 255;\n }\n\n out.writeByte(raster.length - offset);\n out.writeBytes(raster, offset, raster.length - offset);\n out.writeByte(0x00);\n\n //---------------------------------\n // GIF Terminator\n out.writeString(';');\n };\n\n var bitOutputStream = function(out) {\n\n var _out = out;\n var _bitLength = 0;\n var _bitBuffer = 0;\n\n var _this = {};\n\n _this.write = function(data, length) {\n\n if ( (data >>> length) != 0) {\n throw 'length over';\n }\n\n while (_bitLength + length >= 8) {\n _out.writeByte(0xff & ( (data << _bitLength) | _bitBuffer) );\n length -= (8 - _bitLength);\n data >>>= (8 - _bitLength);\n _bitBuffer = 0;\n _bitLength = 0;\n }\n\n _bitBuffer = (data << _bitLength) | _bitBuffer;\n _bitLength = _bitLength + length;\n };\n\n _this.flush = function() {\n if (_bitLength > 0) {\n _out.writeByte(_bitBuffer);\n }\n };\n\n return _this;\n };\n\n var getLZWRaster = function(lzwMinCodeSize) {\n\n var clearCode = 1 << lzwMinCodeSize;\n var endCode = (1 << lzwMinCodeSize) + 1;\n var bitLength = lzwMinCodeSize + 1;\n\n // Setup LZWTable\n var table = lzwTable();\n\n for (var i = 0; i < clearCode; i += 1) {\n table.add(String.fromCharCode(i) );\n }\n table.add(String.fromCharCode(clearCode) );\n table.add(String.fromCharCode(endCode) );\n\n var byteOut = byteArrayOutputStream();\n var bitOut = bitOutputStream(byteOut);\n\n // clear code\n bitOut.write(clearCode, bitLength);\n\n var dataIndex = 0;\n\n var s = String.fromCharCode(_data[dataIndex]);\n dataIndex += 1;\n\n while (dataIndex < _data.length) {\n\n var c = String.fromCharCode(_data[dataIndex]);\n dataIndex += 1;\n\n if (table.contains(s + c) ) {\n\n s = s + c;\n\n } else {\n\n bitOut.write(table.indexOf(s), bitLength);\n\n if (table.size() < 0xfff) {\n\n if (table.size() == (1 << bitLength) ) {\n bitLength += 1;\n }\n\n table.add(s + c);\n }\n\n s = c;\n }\n }\n\n bitOut.write(table.indexOf(s), bitLength);\n\n // end code\n bitOut.write(endCode, bitLength);\n\n bitOut.flush();\n\n return byteOut.toByteArray();\n };\n\n var lzwTable = function() {\n\n var _map = {};\n var _size = 0;\n\n var _this = {};\n\n _this.add = function(key) {\n if (_this.contains(key) ) {\n throw 'dup key:' + key;\n }\n _map[key] = _size;\n _size += 1;\n };\n\n _this.size = function() {\n return _size;\n };\n\n _this.indexOf = function(key) {\n return _map[key];\n };\n\n _this.contains = function(key) {\n return typeof _map[key] != 'undefined';\n };\n\n return _this;\n };\n\n return _this;\n };\n\n var createDataURL = function(width, height, getPixel) {\n var gif = gifImage(width, height);\n for (var y = 0; y < height; y += 1) {\n for (var x = 0; x < width; x += 1) {\n gif.setPixel(x, y, getPixel(x, y) );\n }\n }\n\n var b = byteArrayOutputStream();\n gif.write(b);\n\n var base64 = base64EncodeOutputStream();\n var bytes = b.toByteArray();\n for (var i = 0; i < bytes.length; i += 1) {\n base64.writeByte(bytes[i]);\n }\n base64.flush();\n\n return 'data:image/gif;base64,' + base64;\n };\n\n //---------------------------------------------------------------------\n // returns qrcode function.\n\n return qrcode;\n}();\n\n// multibyte support\n!function() {\n\n qrcode.stringToBytesFuncs['UTF-8'] = function(s) {\n // http://stackoverflow.com/questions/18729405/how-to-convert-utf8-string-to-byte-array\n function toUTF8Array(str) {\n var utf8 = [];\n for (var i=0; i < str.length; i++) {\n var charcode = str.charCodeAt(i);\n if (charcode < 0x80) utf8.push(charcode);\n else if (charcode < 0x800) {\n utf8.push(0xc0 | (charcode >> 6),\n 0x80 | (charcode & 0x3f));\n }\n else if (charcode < 0xd800 || charcode >= 0xe000) {\n utf8.push(0xe0 | (charcode >> 12),\n 0x80 | ((charcode>>6) & 0x3f),\n 0x80 | (charcode & 0x3f));\n }\n // surrogate pair\n else {\n i++;\n // UTF-16 encodes 0x10000-0x10FFFF by\n // subtracting 0x10000 and splitting the\n // 20 bits of 0x0-0xFFFFF into two halves\n charcode = 0x10000 + (((charcode & 0x3ff)<<10)\n | (str.charCodeAt(i) & 0x3ff));\n utf8.push(0xf0 | (charcode >>18),\n 0x80 | ((charcode>>12) & 0x3f),\n 0x80 | ((charcode>>6) & 0x3f),\n 0x80 | (charcode & 0x3f));\n }\n }\n return utf8;\n }\n return toUTF8Array(s);\n };\n\n}();\n\n(function (factory) {\n if (typeof define === 'function' && define.amd) {\n define([], factory);\n } else if (typeof exports === 'object') {\n module.exports = factory();\n }\n}(function () {\n return qrcode;\n}));\n","import { UnknownObject } from \"../types\";\n\nconst isObject = (obj: Record<string, unknown>): boolean => !!obj && typeof obj === \"object\" && !Array.isArray(obj);\n\nexport function mergeDeep(target: UnknownObject, ...sources: UnknownObject[]): UnknownObject {\n if (!sources.length) return target;\n const source = sources.shift();\n if (source === undefined || !isObject(target) || !isObject(source)) return target;\n target = { ...target };\n Object.keys(source).forEach((key: string): void => {\n const targetValue = target[key];\n const sourceValue = source[key];\n\n if (Array.isArray(targetValue) && Array.isArray(sourceValue)) {\n target[key] = sourceValue;\n } else if (isObject(targetValue) && isObject(sourceValue)) {\n target[key] = mergeDeep(Object.assign({}, targetValue), sourceValue);\n } else {\n target[key] = sourceValue;\n }\n });\n\n return mergeDeep(target, ...sources);\n}\n","import { RequiredCanvasOptions, RequiredOptions } from \"../core/QROptions\";\nimport { Gradient } from \"../types\";\n\nfunction sanitizeGradient(gradient: Gradient): Gradient {\n const newGradient = { ...gradient };\n\n if (!newGradient.colorStops || !newGradient.colorStops.length) {\n throw \"Field 'colorStops' is required in gradient\";\n }\n\n if (newGradient.rotation) {\n newGradient.rotation = Number(newGradient.rotation);\n } else {\n newGradient.rotation = 0;\n }\n\n newGradient.colorStops = newGradient.colorStops.map((colorStop: { offset: number; color: string }) => ({\n ...colorStop,\n offset: Number(colorStop.offset)\n }));\n\n return newGradient;\n}\n\nexport function sanitizeOptions(options: RequiredOptions): RequiredOptions {\n const newOptions = { ...options };\n\n newOptions.imageOptions = {\n ...newOptions.imageOptions,\n hideBackgroundDots: Boolean(newOptions.imageOptions.hideBackgroundDots),\n imageSize: Math.min(1, Number(newOptions.imageOptions.imageSize)) || 1,\n margin: Number(newOptions.imageOptions.margin)\n };\n\n newOptions.dotsOptions = {\n ...newOptions.dotsOptions\n };\n if (newOptions.dotsOptions.gradient) {\n newOptions.dotsOptions.gradient = sanitizeGradient(newOptions.dotsOptions.gradient);\n }\n\n if (newOptions.cornersSquareOptions) {\n newOptions.cornersSquareOptions = {\n ...newOptions.cornersSquareOptions\n };\n if (newOptions.cornersSquareOptions.gradient) {\n newOptions.cornersSquareOptions.gradient = sanitizeGradient(newOptions.cornersSquareOptions.gradient);\n }\n }\n\n if (newOptions.cornersDotOptions) {\n newOptions.cornersDotOptions = {\n ...newOptions.cornersDotOptions\n };\n if (newOptions.cornersDotOptions.gradient) {\n newOptions.cornersDotOptions.gradient = sanitizeGradient(newOptions.cornersDotOptions.gradient);\n }\n }\n\n if (newOptions.backgroundOptions) {\n newOptions.backgroundOptions = {\n ...newOptions.backgroundOptions\n };\n if (newOptions.backgroundOptions.gradient) {\n newOptions.backgroundOptions.gradient = sanitizeGradient(newOptions.backgroundOptions.gradient);\n }\n }\n\n if (!newOptions.document) newOptions.document = document;\n\n return newOptions;\n}\n\nexport function sanitizeCanvasOptions(options: RequiredCanvasOptions): RequiredCanvasOptions {\n const newOptions = { ...options };\n\n newOptions.width = Number(newOptions.width);\n newOptions.height = Number(newOptions.height);\n newOptions.margin = Number(newOptions.margin);\n\n if (newOptions.margin > Math.min(newOptions.width, newOptions.height)) {\n newOptions.margin = Math.min(newOptions.width, newOptions.height);\n }\n\n return newOptions;\n}\n","import { CanvasOptions, DotType, ErrorCorrectionLevel, Gradient, Mode, Options, ShapeType, TypeNumber } from \"../types\";\n\nexport interface RequiredOptions extends Options {\n document: Document;\n shape: ShapeType;\n width: number;\n height: number;\n margin: number;\n data: string;\n qrOptions: {\n typeNumber: TypeNumber;\n mode?: Mode;\n errorCorrectionLevel: ErrorCorrectionLevel;\n };\n imageOptions: {\n hideBackgroundDots: boolean;\n imageSize: number;\n crossOrigin?: string;\n margin: number;\n };\n dotsOptions: {\n type: DotType;\n color: string;\n gradient?: Gradient;\n size: number;\n };\n}\n\nexport const defaultOptions: RequiredOptions = {\n document: undefined as never,\n shape: ShapeType.square,\n width: undefined as never,\n height: undefined as never,\n margin: 0,\n data: \"\",\n qrOptions: {\n typeNumber: TypeNumber[0],\n mode: undefined,\n errorCorrectionLevel: ErrorCorrectionLevel.Q\n },\n imageOptions: {\n hideBackgroundDots: true,\n imageSize: 0.4,\n crossOrigin: undefined,\n margin: 0\n },\n dotsOptions: {\n type: DotType.square,\n color: \"#000\",\n size: 10\n }\n};\n\nexport interface RequiredCanvasOptions extends CanvasOptions {\n width: number;\n height: number;\n margin: number;\n}\n\nexport const defaultCanvasOptions: RequiredCanvasOptions = {\n width: 300,\n height: 300,\n margin: 10\n};\n","import { CornerDotType, RotateFigureArgs, BasicFigureDrawArgs, DrawArgs } from \"../../types\";\n\nexport class QRCornerDot {\n _element?: SVGElement;\n _svg: SVGElement;\n _type: CornerDotType;\n _document: Document;\n\n constructor({ svg, type, document }: { svg: SVGElement; type: CornerDotType; document: Document }) {\n this._svg = svg;\n this._type = type;\n this._document = document;\n }\n\n draw(x: number, y: number, size: number, rotation: number): void {\n const type = this._type;\n let drawFunction;\n\n switch (type) {\n case CornerDotType.square:\n drawFunction = this._drawSquare;\n break;\n case CornerDotType.dot:\n default:\n drawFunction = this._drawDot;\n }\n\n drawFunction.call(this, { x, y, size, rotation });\n }\n\n _rotateFigure({ x, y, size, rotation = 0, draw }: RotateFigureArgs): void {\n const cx = x + size / 2;\n const cy = y + size / 2;\n\n draw();\n this._element?.setAttribute(\"transform\", `rotate(${(180 * rotation) / Math.PI},${cx},${cy})`);\n }\n\n _basicDot(args: BasicFigureDrawArgs): void {\n const { size, x, y } = args;\n\n this._rotateFigure({\n ...args,\n draw: () => {\n this._element = this._document.createElementNS(\"http://www.w3.org/2000/svg\", \"circle\");\n this._element.setAttribute(\"cx\", String(x + size / 2));\n this._element.setAttribute(\"cy\", String(y + size / 2));\n this._element.setAttribute(\"r\", String(size / 2));\n }\n });\n }\n\n _basicSquare(args: BasicFigureDrawArgs): void {\n const { size, x, y } = args;\n\n this._rotateFigure({\n ...args,\n draw: () => {\n this._element = this._document.createElementNS(\"http://www.w3.org/2000/svg\", \"rect\");\n this._element.setAttribute(\"x\", String(x));\n this._element.setAttribute(\"y\", String(y));\n this._element.setAttribute(\"width\", String(size));\n this._element.setAttribute(\"height\", String(size));\n }\n });\n }\n\n _drawDot({ x, y, size, rotation }: DrawArgs): void {\n this._basicDot({ x, y, size, rotation });\n }\n\n _drawSquare({ x, y, size, rotation }: DrawArgs): void {\n this._basicSquare({ x, y, size, rotation });\n }\n}\n","import { CornerSquareType, DrawArgs, BasicFigureDrawArgs, RotateFigureArgs } from \"../../types\";\n\nexport class QRCornerSquare {\n _element?: SVGElement;\n _svg: SVGElement;\n _type: CornerSquareType;\n _document: Document;\n\n constructor({ svg, type, document }: { svg: SVGElement; type: CornerSquareType; document: Document }) {\n this._svg = svg;\n this._type = type;\n this._document = document;\n }\n\n draw(x: number, y: number, size: number, rotation: number): void {\n const type = this._type;\n let drawFunction;\n\n switch (type) {\n case CornerSquareType.square:\n drawFunction = this._drawSquare;\n break;\n case CornerSquareType.extraRounded:\n drawFunction = this._drawExtraRounded;\n break;\n case CornerSquareType.dot:\n default:\n drawFunction = this._drawDot;\n }\n\n drawFunction.call(this, { x, y, size, rotation });\n }\n\n _rotateFigure({ x, y, size, rotation = 0, draw }: RotateFigureArgs): void {\n const cx = x + size / 2;\n const cy = y + size / 2;\n\n draw();\n this._element?.setAttribute(\"transform\", `rotate(${(180 * rotation) / Math.PI},${cx},${cy})`);\n }\n\n _basicDot(args: BasicFigureDrawArgs): void {\n const { size, x, y } = args;\n const dotSize = size / 7;\n\n this._rotateFigure({\n ...args,\n draw: () => {\n this._element = this._document.createElementNS(\"http://www.w3.org/2000/svg\", \"path\");\n this._element.setAttribute(\"clip-rule\", \"evenodd\");\n this._element.setAttribute(\n \"d\",\n `M ${x + size / 2} ${y}` + // M cx, y // Move to top of ring\n `a ${size / 2} ${size / 2} 0 1 0 0.1 0` + // a outerRadius, outerRadius, 0, 1, 0, 1, 0 // Draw outer arc, but don't close it\n `z` + // Z // Close the outer shape\n `m 0 ${dotSize}` + // m -1 outerRadius-innerRadius // Move to top point of inner radius\n `a ${size / 2 - dotSize} ${size / 2 - dotSize} 0 1 1 -0.1 0` + // a innerRadius, innerRadius, 0, 1, 1, -1, 0 // Draw inner arc, but don't close it\n `Z` // Z // Close the inner ring. Actually will still work without, but inner ring will have one unit missing in stroke\n );\n }\n });\n }\n\n _basicSquare(args: BasicFigureDrawArgs): void {\n const { size, x, y } = args;\n const dotSize = size / 7;\n\n this._rotateFigure({\n ...args,\n draw: () => {\n this._element = this._document.createElementNS(\"http://www.w3.org/2000/svg\", \"path\");\n this._element.setAttribute(\"clip-rule\", \"evenodd\");\n this._element.setAttribute(\n \"d\",\n `M ${x} ${y}` +\n `v ${size}` +\n `h ${size}` +\n `v ${-size}` +\n `z` +\n `M ${x + dotSize} ${y + dotSize}` +\n `h ${size - 2 * dotSize}` +\n `v ${size - 2 * dotSize}` +\n `h ${-size + 2 * dotSize}` +\n `z`\n );\n }\n });\n }\n\n _basicExtraRounded(args: BasicFigureDrawArgs): void {\n const { size, x, y } = args;\n const dotSize = size / 7;\n\n this._rotateFigure({\n ...args,\n draw: () => {\n this._element = this._document.createElementNS(\"http://www.w3.org/2000/svg\", \"path\");\n this._element.setAttribute(\"clip-rule\", \"evenodd\");\n this._element.setAttribute(\n \"d\",\n `M ${x} ${y + 2.5 * dotSize}` +\n `v ${2 * dotSize}` +\n `a ${2.5 * dotSize} ${2.5 * dotSize}, 0, 0, 0, ${dotSize * 2.5} ${dotSize * 2.5}` +\n `h ${2 * dotSize}` +\n `a ${2.5 * dotSize} ${2.5 * dotSize}, 0, 0, 0, ${dotSize * 2.5} ${-dotSize * 2.5}` +\n `v ${-2 * dotSize}` +\n `a ${2.5 * dotSize} ${2.5 * dotSize}, 0, 0, 0, ${-dotSize * 2.5} ${-dotSize * 2.5}` +\n `h ${-2 * dotSize}` +\n `a ${2.5 * dotSize} ${2.5 * dotSize}, 0, 0, 0, ${-dotSize * 2.5} ${dotSize * 2.5}` +\n `M ${x + 2.5 * dotSize} ${y + dotSize}` +\n `h ${2 * dotSize}` +\n `a ${1.5 * dotSize} ${1.5 * dotSize}, 0, 0, 1, ${dotSize * 1.5} ${dotSize * 1.5}` +\n `v ${2 * dotSize}` +\n `a ${1.5 * dotSize} ${1.5 * dotSize}, 0, 0, 1, ${-dotSize * 1.5} ${dotSize * 1.5}` +\n `h ${-2 * dotSize}` +\n `a ${1.5 * dotSize} ${1.5 * dotSize}, 0, 0, 1, ${-dotSize * 1.5} ${-dotSize * 1.5}` +\n `v ${-2 * dotSize}` +\n `a ${1.5 * dotSize} ${1.5 * dotSize}, 0, 0, 1, ${dotSize * 1.5} ${-dotSize * 1.5}`\n );\n }\n });\n }\n\n _drawDot({ x, y, size, rotation }: DrawArgs): void {\n this._basicDot({ x, y, size, rotation });\n }\n\n _drawSquare({ x, y, size, rotation }: DrawArgs): void {\n this._basicSquare({ x, y, size, rotation });\n }\n\n _drawExtraRounded({ x, y, size, rotation }: DrawArgs): void {\n this._basicExtraRounded({ x, y, size, rotation });\n }\n}\n","import { DotType, GetNeighbor, DrawArgs, BasicFigureDrawArgs, RotateFigureArgs } from \"../../types\";\n\nexport class QRDot {\n _element?: SVGElement;\n _svg: SVGElement;\n _type: DotType;\n _document: Document;\n\n constructor({ svg, type, document }: { svg: SVGElement; type: DotType; document: Document }) {\n this._svg = svg;\n this._type = type;\n this._document = document;\n }\n\n draw(x: number, y: number, size: number, getNeighbor: GetNeighbor): void {\n const type = this._type;\n let drawFunction;\n\n switch (type) {\n case DotType.dots:\n drawFunction = this._drawDot;\n break;\n case DotType.classy:\n drawFunction = this._drawClassy;\n break;\n case DotType.classyRounded:\n drawFunction = this._drawClassyRounded;\n break;\n case DotType.rounded:\n drawFunction = this._drawRounded;\n break;\n case DotType.extraRounded:\n drawFunction = this._drawExtraRounded;\n break;\n case DotType.square:\n default:\n drawFunction = this._drawSquare;\n }\n\n drawFunction.call(this, { x, y, size, getNeighbor });\n }\n\n _rotateFigure({ x, y, size, rotation = 0, draw }: RotateFigureArgs): void {\n const cx = x + size / 2;\n const cy = y + size / 2;\n\n draw();\n this._element?.setAttribute(\"transform\", `rotate(${(180 * rotation) / Math.PI},${cx},${cy})`);\n }\n\n _basicDot(args: BasicFigureDrawArgs): void {\n const { size, x, y } = args;\n\n this._rotateFigure({\n ...args,\n draw: () => {\n this._element = this._document.createElementNS(\"http://www.w3.org/2000/svg\", \"circle\");\n this._element.setAttribute(\"cx\", String(x + size / 2));\n this._element.setAttribute(\"cy\", String(y + size / 2));\n this._element.setAttribute(\"r\", String(size / 2));\n }\n });\n }\n\n _basicSquare(args: BasicFigureDrawArgs): void {\n const { size, x, y } = args;\n\n this._rotateFigure({\n ...args,\n draw: () => {\n this._element = this._document.createElementNS(\"http://www.w3.org/2000/svg\", \"rect\");\n this._element.setAttribute(\"x\", String(x));\n this._element.setAttribute(\"y\", String(y));\n this._element.setAttribute(\"width\", String(size));\n this._element.setAttribute(\"height\", String(size));\n }\n });\n }\n\n //if rotation === 0 - right side is rounded\n _basicSideRounded(args: BasicFigureDrawArgs): void {\n const { size, x, y } = args;\n\n this._rotateFigure({\n ...args,\n draw: () => {\n this._element = this._document.createElementNS(\"http://www.w3.org/2000/svg\", \"path\");\n this._element.setAttribute(\n \"d\",\n `M ${x} ${y}` + //go to top left position\n `v ${size}` + //draw line to left bottom corner\n `h ${size / 2}` + //draw line to left bottom corner + half of size right\n `a ${size / 2} ${size / 2}, 0, 0, 0, 0 ${-size}` // draw rounded corner\n );\n }\n });\n }\n\n //if rotation === 0 - top right corner is rounded\n _basicCornerRounded(args: BasicFigureDrawArgs): void {\n const { size, x, y } = args;\n\n this._rotateFigure({\n ...args,\n draw: () => {\n this._element = this._document.createElementNS(\"http://www.w3.org/2000/svg\", \"path\");\n this._element.setAttribute(\n \"d\",\n `M ${x} ${y}` + //go to top left position\n `v ${size}` + //draw line to left bottom corner\n `h ${size}` + //draw line to right bottom corner\n `v ${-size / 2}` + //draw line to right bottom corner + half of size top\n `a ${size / 2} ${size / 2}, 0, 0, 0, ${-size / 2} ${-size / 2}` // draw rounded corner\n );\n }\n });\n }\n\n //if rotation === 0 - top right corner is rounded\n _basicCornerExtraRounded(args: BasicFigureDrawArgs): void {\n const { size, x, y } = args;\n\n this._rotateFigure({\n ...args,\n draw: () => {\n this._element = this._document.createElementNS(\"http://www.w3.org/2000/svg\", \"path\");\n this._element.setAttribute(\n \"d\",\n `M ${x} ${y}` + //go to top left position\n `v ${size}` + //draw line to left bottom corner\n `h ${size}` + //draw line to right bottom corner\n `a ${size} ${size}, 0, 0, 0, ${-size} ${-size}` // draw rounded top right corner\n );\n }\n });\n }\n\n //if rotation === 0 - left bottom and right top corners are rounded\n _basicCornersRounded(args: BasicFigureDrawArgs): void {\n const { size, x, y } = args;\n\n this._rotateFigure({\n ...args,\n draw: () => {\n this._element = this._document.createElementNS(\"http://www.w3.org/2000/svg\", \"path\");\n this._element.setAttribute(\n \"d\",\n `M ${x} ${y}` + //go to left top position\n `v ${size / 2}` + //draw line to left top corner + half of size bottom\n `a ${size / 2} ${size / 2}, 0, 0, 0, ${size / 2} ${size / 2}` + // draw rounded left bottom corner\n `h ${size / 2}` + //draw line to right bottom corner\n `v ${-size / 2}` + //draw line to right bottom corner + half of size top\n `a ${size / 2} ${size / 2}, 0, 0, 0, ${-size / 2} ${-size / 2}` // draw rounded right top corner\n );\n }\n });\n }\n\n _drawDot({ x, y, size }: DrawArgs): void {\n this._basicDot({ x, y, size, rotation: 0 });\n }\n\n _drawSquare({ x, y, size }: DrawArgs): void {\n this._basicSquare({ x, y, size, rotation: 0 });\n }\n\n _drawRounded({ x, y, size, getNeighbor }: DrawArgs): void {\n const leftNeighbor = getNeighbor ? +getNeighbor(-1, 0) : 0;\n const rightNeighbor = getNeighbor ? +getNeighbor(1, 0) : 0;\n const topNeighbor = getNeighbor ? +getNeighbor(0, -1) : 0;\n const bottomNeighbor = getNeighbor ? +getNeighbor(0, 1) : 0;\n\n const neighborsCount = leftNeighbor + rightNeighbor + topNeighbor + bottomNeighbor;\n\n if (neighborsCount === 0) {\n this._basicDot({ x, y, size, rotation: 0 });\n return;\n }\n\n if (neighborsCount > 2 || (leftNeighbor && rightNeighbor) || (topNeighbor && bottomNeighbor)) {\n this._basicSquare({ x, y, size, rotation: 0 });\n return;\n }\n\n if (neighborsCount === 2) {\n let rotation = 0;\n\n if (leftNeighbor && topNeighbor) {\n rotation = Math.PI / 2;\n } else if (topNeighbor && rightNeighbor) {\n rotation = Math.PI;\n } else if (rightNeighbor && bottomNeighbor) {\n rotation = -Math.PI / 2;\n }\n\n this._basicCornerRounded({ x, y, size, rotation });\n return;\n }\n\n if (neighborsCount === 1) {\n let rotation = 0;\n\n if (topNeighbor) {\n rotation = Math.PI / 2;\n } else if (rightNeighbor) {\n rotation = Math.PI;\n } else if (bottomNeighbor) {\n rotation = -Math.PI / 2;\n }\n\n this._basicSideRounded({ x, y, size, rotation });\n return;\n }\n }\n\n _drawExtraRounded({ x, y, size, getNeighbor }: DrawArgs): void {\n const leftNeighbor = getNeighbor ? +getNeighbor(-1, 0) : 0;\n const rightNeighbor = getNeighbor ? +getNeighbor(1, 0) : 0;\n const topNeighbor = getNeighbor ? +getNeighbor(0, -1) : 0;\n const bottomNeighbor = getNeighbor ? +getNeighbor(0, 1) : 0;\n\n const neighborsCount = leftNeighbor + rightNeighbor + topNeighbor + bottomNeighbor;\n\n if (neighborsCount === 0) {\n this._basicDot({ x, y, size, rotation: 0 });\n return;\n }\n\n if (neighborsCount > 2 || (leftNeighbor && rightNeighbor) || (topNeighbor && bottomNeighbor)) {\n this._basicSquare({ x, y, size, rotation: 0 });\n return;\n }\n\n if (neighborsCount === 2) {\n let rotation = 0;\n\n if (leftNeighbor && topNeighbor) {\n rotation = Math.PI / 2;\n } else if (topNeighbor && rightNeighbor) {\n rotation = Math.PI;\n } else if (rightNeighbor && bottomNeighbor) {\n rotation = -Math.PI / 2;\n }\n\n this._basicCornerExtraRounded({ x, y, size, rotation });\n return;\n }\n\n if (neighborsCount === 1) {\n let rotation = 0;\n\n if (topNeighbor) {\n rotation = Math.PI / 2;\n } else if (rightNeighbor) {\n rotation = Math.PI;\n } else if (bottomNeighbor) {\n rotation = -Math.PI / 2;\n }\n\n this._basicSideRounded({ x, y, size, rotation });\n return;\n }\n }\n\n _drawClassy({ x, y, size, getNeighbor }: DrawArgs): void {\n const leftNeighbor = getNeighbor ? +getNeighbor(-1, 0) : 0;\n const rightNeighbor = getNeighbor ? +getNeighbor(1, 0) : 0;\n const topNeighbor = getNeighbor ? +getNeighbor(0, -1) : 0;\n const bottomNeighbor = getNeighbor ? +getNeighbor(0, 1) : 0;\n\n const neighborsCount = leftNeighbor + rightNeighbor + topNeighbor + bottomNeighbor;\n\n if (neighborsCount === 0) {\n this._basicCornersRounded({ x, y, size, rotation: Math.PI / 2 });\n return;\n }\n\n if (!leftNeighbor && !topNeighbor) {\n this._basicCornerRounded({ x, y, size, rotation: -Math.PI / 2 });\n return;\n }\n\n if (!rightNeighbor && !bottomNeighbor) {\n this._basicCornerRounded({ x, y, size, rotation: Math.PI / 2 });\n return;\n }\n\n this._basicSquare({ x, y, size, rotation: 0 });\n }\n\n _drawClassyRounded({ x, y, size, getNeighbor }: DrawArgs): void {\n const leftNeighbor = getNeighbor ? +getNeighbor(-1, 0) : 0;\n const rightNeighbor = getNeighbor ? +getNeighbor(1, 0) : 0;\n const topNeighbor = getNeighbor ? +getNeighbor(0, -1) : 0;\n const bottomNeighbor = getNeighbor ? +getNeighbor(0, 1) : 0;\n\n const neighborsCount = leftNeighbor + rightNeighbor + topNeighbor + bottomNeighbor;\n\n if (neighborsCount === 0) {\n this._basicCornersRounded({ x, y, size, rotation: Math.PI / 2 });\n return;\n }\n\n if (!leftNeighbor && !topNeighbor) {\n this._basicCornerExtraRounded({ x, y, size, rotation: -Math.PI / 2 });\n return;\n }\n\n if (!rightNeighbor && !bottomNeighbor) {\n this._basicCornerExtraRounded({ x, y, size, rotation: Math.PI / 2 });\n return;\n }\n\n this._basicSquare({ x, y, size, rotation: 0 });\n }\n}\n","import { RequiredOptions } from \"../core/QROptions\";\n\nexport const browserImageTools = {\n toDataURL(url: string | Buffer | Blob): Promise<string> {\n return new Promise((resolve, reject) => {\n if (typeof url == \"string\") {\n const xhr = new XMLHttpRequest();\n xhr.onload = function () {\n const reader = new FileReader();\n reader.onloadend = function () {\n resolve(reader.result as string);\n };\n reader.readAsDataURL(xhr.response);\n };\n xhr.onerror = xhr.onabort = xhr.ontimeout = reject;\n xhr.open(\"GET\", url);\n xhr.responseType = \"blob\";\n xhr.send();\n } else {\n const reader = new FileReader();\n reader.onloadend = function () {\n resolve(reader.result as string);\n };\n reader.readAsDataURL(url as Blob);\n }\n });\n },\n getSize(options: RequiredOptions): Promise<{ width: number; height: number }> {\n return new Promise((resolve, reject) => {\n if (!options.image) {\n return reject(\"Image is not defined\");\n }\n\n const image = new Image();\n\n if (typeof options.imageOptions.crossOrigin === \"string\") {\n image.crossOrigin = options.imageOptions.crossOrigin;\n }\n\n image.onload = (): void => {\n resolve({ width: image.width, height: image.height });\n };\n image.onerror = image.onabort = reject;\n if (typeof options.image == \"string\") image.src = options.image;\n else\n browserImageTools\n .toDataURL(options.image)\n .then((url) => (image.src = url))\n .catch(reject);\n });\n }\n};\n","import { ErrorCorrectionPercents } from \"../constants/errorCorrectionPercents\";\nimport { QRCornerDot } from \"../figures/cornerDot/QRCornerDot\";\nimport { QRCornerSquare } from \"../figures/cornerSquare/QRCornerSquare\";\nimport { QRDot } from \"../figures/dot/QRDot\";\nimport { browserImageTools } from \"../tools/browserImageTools\";\nimport { calculateImageSize } from \"../tools/calculateImageSize\";\nimport { FilterFunction, Gradient, GradientType, QRCode, ShapeType } from \"../types\";\nimport { RequiredOptions } from \"./QROptions\";\n\nconst squareMask = [\n [1, 1, 1, 1, 1, 1, 1],\n [1, 0, 0, 0, 0, 0, 1],\n [1, 0, 0, 0, 0, 0, 1],\n [1, 0, 0, 0, 0, 0, 1],\n [1, 0, 0, 0, 0, 0, 1],\n [1, 0, 0, 0, 0, 0, 1],\n [1, 1, 1, 1, 1, 1, 1]\n];\n\nconst dotMask = [\n [0, 0, 0, 0, 0, 0, 0],\n [0, 0, 0, 0, 0, 0, 0],\n [0, 0, 1, 1, 1, 0, 0],\n [0, 0, 1, 1, 1, 0, 0],\n [0, 0, 1, 1, 1, 0, 0],\n [0, 0, 0, 0, 0, 0, 0],\n [0, 0, 0, 0, 0, 0, 0]\n];\n\nexport class QRSVG {\n _element: SVGElement;\n _defs: SVGElement;\n _backgroundClipPath?: SVGElement;\n _dotsClipPath?: SVGElement;\n _cornersSquareClipPath?: SVGElement;\n _cornersDotClipPath?: SVGElement;\n _options: RequiredOptions;\n _qr?: QRCode;\n _document: Document;\n private _imageTools: typeof browserImageTools;\n\n //TODO don't pass all options to this class\n constructor(options: RequiredOptions) {\n this._document = options.document;\n this._element = this._document.createElementNS(\"http://www.w3.org/2000/svg\", \"svg\");\n this._element.setAttribute(\"width\", String(options.width));\n this._element.setAttribute(\"height\", String(options.height));\n this._element.setAttribute(\"viewBox\", `0 0 ${options.width} ${options.height}`);\n this._defs = this._document.createElementNS(\"http://www.w3.org/2000/svg\", \"defs\");\n this._element.appendChild(this._defs);\n this._imageTools = options.imageTools || browserImageTools;\n\n this._options = options;\n }\n\n get width(): number {\n return this._options.width;\n }\n\n get height(): number {\n return this._options.height;\n }\n\n getElement(): SVGElement {\n return this._element;\n }\n\n async drawQR(qr: QRCode): Promise<void> {\n const count = qr.getModuleCount();\n const dotSize = this._options.dotsOptions.size;\n let drawImageSize = {\n hideXDots: 0,\n hideYDots: 0,\n width: 0,\n height: 0\n };\n\n this._qr = qr;\n\n if (this._options.image) {\n //We need it to get image size\n const size = await this._imageTools.getSize(this._options);\n const { imageOptions, qrOptions } = this._options;\n const coverLevel = imageOptions.imageSize * ErrorCorrectionPercents[qrOptions.errorCorrectionLevel];\n const maxHiddenDots = Math.floor(coverLevel * (count * count - 3 * 8 * 8 - 2 * (count - 16)));\n\n drawImageSize = calculateImageSize({\n originalWidth: size.width,\n originalHeight: size.height,\n maxHiddenDots,\n maxHiddenAxisDots: count - 14,\n dotSize,\n margin: imageOptions.margin\n });\n }\n\n this.drawBackground();\n this.drawDots((i: number, j: number): boolean => {\n if (this._options.imageOptions.hideBackgroundDots) {\n if (\n i >= (count - drawImageSize.hideXDots) / 2 &&\n i < (count + drawImageSize.hideXDots) / 2 &&\n j >= (count - drawImageSize.hideYDots) / 2 &&\n j < (count + drawImageSize.hideYDots) / 2\n ) {\n return false;\n }\n }\n\n if (squareMask[i]?.[j] || squareMask[i - count + 7]?.[j] || squareMask[i]?.[j - count + 7]) {\n return false;\n }\n\n if (dotMask[i]?.[j] || dotMask[i - count + 7]?.[j] || dotMask[i]?.[j - count + 7]) {\n return false;\n }\n\n return true;\n });\n this.drawCorners();\n\n if (this._options.image && drawImageSize.width > 0 && drawImageSize.height > 0) {\n await this.drawImage({ width: drawImageSize.width, height: drawImageSize.height, count, dotSize });\n }\n }\n\n drawBackground(): void {\n const element = this._element;\n const options = this._options;\n\n if (element && options.backgroundOptions) {\n const gradientOptions = options.backgroundOptions.gradient;\n const color = options.backgroundOptions.color;\n\n this._createColor({\n options: gradientOptions,\n color: color,\n additionalRotation: 0,\n x: 0,\n y: 0,\n height: options.height,\n width: options.width,\n name: \"background-color\"\n });\n\n const size = Math.min(options.width, options.height);\n const element = this._document.createElementNS(\"http://www.w3.org/2000/svg\", \"rect\");\n this._backgroundClipPath = this._document.createElementNS(\"http://www.w3.org/2000/svg\", \"clipPath\");\n this._backgroundClipPath.setAttribute(\"id\", \"clip-path-background-color\");\n this._defs.appendChild(this._backgroundClipPath);\n\n element.setAttribute(\"x\", String((options.width - size) / 2));\n element.setAttribute(\"y\", String((options.height - size) / 2));\n element.setAttribute(\"width\", String(size));\n element.setAttribute(\"height\", String(size));\n element.setAttribute(\"rx\", String((size / 2) * (options.backgroundOptions.round || 0)));\n\n this._backgroundClipPath.appendChild(element);\n }\n }\n\n drawDots(filter?: FilterFunction): void {\n if (!this._qr) {\n throw \"QR code is not defined\";\n }\n\n const options = this._options;\n const count = this._qr.getModuleCount();\n\n if (count > options.width || count > options.height) {\n throw \"The canvas is too small.\";\n }\n\n const minSize = Math.min(options.width, options.height);\n const dotSize = this._options.dotsOptions.size;\n const xBeginning = Math.floor((options.width - count * dotSize) / 2);\n const yBeginning = Math.floor((options.height - count * dotSize) / 2);\n const dot = new QRDot({ svg: this._element, type: options.dotsOptions.type, document: this._document });\n\n this._dotsClipPath = this._document.createElementNS(\"http://www.w3.org/2000/svg\", \"clipPath\");\n this._dotsClipPath.setAttribute(\"id\", \"clip-path-dot-color\");\n this._defs.appendChild(this._dotsClipPath);\n\n this._createColor({\n options: options.dotsOptions?.gradient,\n color: options.dotsOptions.color,\n additionalRotation: 0,\n x: 0,\n y: 0,\n height: options.height,\n width: options.width,\n name: \"dot-color\"\n });\n\n for (let i = 0; i < count; i++) {\n for (let j = 0; j < count; j++) {\n if (filter && !filter(i, j)) {\n continue;\n }\n if (!this._qr?.isDark(i, j)) {\n continue;\n }\n\n dot.draw(\n xBeginning + i * dotSize,\n yBeginning + j * dotSize,\n dotSize,\n (xOffset: number, yOffset: number): boolean => {\n if (i + xOffset < 0 || j + yOffset < 0 || i + xOffset >= count || j + yOffset >= count) return false;\n if (filter && !filter(i + xOffset, j + yOffset)) return false;\n return !!this._qr && this._qr.isDark(i + xOffset, j + yOffset);\n }\n );\n\n if (dot._element && this._dotsClipPath) {\n this._dotsClipPath.appendChild(dot._element);\n }\n }\n }\n\n if (options.shape === ShapeType.circle) {\n const additionalDots = Math.floor((minSize / dotSize - count - 2 * this._options.margin) / 2);\n const fakeCount = count + additionalDots * 2;\n const xFakeBeginning = xBeginning - additionalDots * dotSize;\n const yFakeBeginning = yBeginning - additionalDots * dotSize;\n const fakeMatrix: number[][] = [];\n const center = Math.floor(fakeCount / 2);\n\n for (let i = 0; i < fakeCount; i++) {\n fakeMatrix[i] = [];\n for (let j = 0; j < fakeCount; j++) {\n if (\n i >= additionalDots - 1 &&\n i <= fakeCount - additionalDots &&\n j >= additionalDots - 1 &&\n j <= fakeCount - additionalDots\n ) {\n fakeMatrix[i][j] = 0;\n continue;\n }\n\n if (Math.sqrt((i - center) * (i - center) + (j - center) * (j - center)) > center) {\n fakeMatrix[i][j] = 0;\n continue;\n }\n\n //Get random dots from QR code to show it outside of QR code\n fakeMatrix[i][j] = this._qr.isDark(\n j - 2 * additionalDots < 0 ? j : j >= count ? j - 2 * additionalDots : j - additionalDots,\n i - 2 * additionalDots < 0 ? i : i >= count ? i - 2 * additionalDots : i - additionalDots\n )\n ? 1\n : 0;\n }\n }\n\n for (let i = 0; i < fakeCount; i++) {\n for (let j = 0; j < fakeCount; j++) {\n if (!fakeMatrix[i][j]) continue;\n\n dot.draw(\n xFakeBeginning + i * dotSize,\n yFakeBeginning + j * dotSize,\n dotSize,\n (xOffset: number, yOffset: number): boolean => {\n return !!fakeMatrix[i + xOffset]?.[j + yOffset];\n }\n );\n if (dot._element && this._dotsClipPath) {\n this._dotsClipPath.appendChild(dot._element);\n }\n }\n }\n }\n }\n\n drawCorners(): void {\n if (!this._qr) {\n throw \"QR code is not defined\";\n }\n\n const element = this._element;\n const options = this._options;\n\n if (!element) {\n throw \"Element code is not defined\";\n }\n\n const count = this._qr.getModuleCount();\n const dotSize = this._options.dotsOptions.size;\n const cornersSquareSize = dotSize * 7;\n const cornersDotSize = dotSize * 3;\n const xBeginning = Math.floor((options.width - count * dotSize) / 2);\n const yBeginning = Math.floor((options.height - count * dotSize) / 2);\n\n [\n [0, 0, 0],\n [1, 0, Math.PI / 2],\n [0, 1, -Math.PI / 2]\n ].forEach(([column, row, rotation]) => {\n const x = xBeginning + column * dotSize * (count - 7);\n const y = yBeginning + row * dotSize * (count - 7);\n let cornersSquareClipPath = this._dotsClipPath;\n let cornersDotClipPath = this._dotsClipPath;\n\n if (options.cornersSquareOptions?.gradient || options.cornersSquareOptions?.color) {\n cornersSquareClipPath = this._document.createElementNS(\"http://www.w3.org/2000/svg\", \"clipPath\");\n cornersSquareClipPath.setAttribute(\"id\", `clip-path-corners-square-color-${column}-${row}`);\n this._defs.appendChild(cornersSquareClipPath);\n this._cornersSquareClipPath = this._cornersDotClipPath = cornersDotClipPath = cornersSquareClipPath;\n\n this._createColor({\n options: options.cornersSquareOptions?.gradient,\n color: options.cornersSquareOptions?.color,\n additionalRotation: rotation,\n x,\n y,\n height: cornersSquareSize,\n width: cornersSquareSize,\n name: `corners-square-color-${column}-${row}`\n });\n }\n\n if (options.cornersSquareOptions?.type) {\n const cornersSquare = new QRCornerSquare({\n svg: this._element,\n type: options.cornersSquareOptions.type,\n document: this._document\n });\n\n cornersSquare.draw(x, y, cornersSquareSize, rotation);\n\n if (cornersSquare._element && cornersSquareClipPath) {\n cornersSquareClipPath.appendChild(cornersSquare._element);\n }\n } else {\n const dot = new QRDot({ svg: this._element, type: options.dotsOptions.type, document: this._document });\n\n for (let i = 0; i < squareMask.length; i++) {\n for (let j = 0; j < squareMask[i].length; j++) {\n if (!squareMask[i]?.[j]) {\n continue;\n }\n\n dot.draw(\n x + i * dotSize,\n y + j * dotSize,\n dotSize,\n (xOffset: number, yOffset: number): boolean => !!squareMask[i + xOffset]?.[j + yOffset]\n );\n\n if (dot._element && cornersSquareClipPath) {\n cornersSquareClipPath.appendChild(dot._element);\n }\n }\n }\n }\n\n if (options.cornersDotOptions?.gradient || options.cornersDotOptions?.color) {\n cornersDotClipPath = this._document.createElementNS(\"http://www.w3.org/2000/svg\", \"clipPath\");\n cornersDotClipPath.setAttribute(\"id\", `clip-path-corners-dot-color-${column}-${row}`);\n this._defs.appendChild(cornersDotClipPath);\n this._cornersDotClipPath = cornersDotClipPath;\n\n this._createColor({\n options: options.cornersDotOptions?.gradient,\n color: options.cornersDotOptions?.color,\n additionalRotation: rotation,\n x: x + dotSize * 2,\n y: y + dotSize * 2,\n height: cornersDotSize,\n width: cornersDotSize,\n name: `corners-dot-color-${column}-${row}`\n });\n }\n\n if (options.cornersDotOptions?.type) {\n const cornersDot = new QRCornerDot({\n svg: this._element,\n type: options.cornersDotOptions.type,\n document: this._document\n });\n\n cornersDot.draw(x + dotSize * 2, y + dotSize * 2, cornersDotSize, rotation);\n\n if (cornersDot._element && cornersDotClipPath) {\n cornersDotClipPath.appendChild(cornersDot._element);\n }\n } else {\n const dot = new QRDot({ svg: this._element, type: options.dotsOptions.type, document: this._document });\n\n for (let i = 0; i < dotMask.length; i++) {\n for (let j = 0; j < dotMask[i].length; j++) {\n if (!dotMask[i]?.[j]) {\n continue;\n }\n\n dot.draw(\n x + i * dotSize,\n y + j * dotSize,\n dotSize,\n (xOffset: number, yOffset: number): boolean => !!dotMask[i + xOffset]?.[j + yOffset]\n );\n\n if (dot._element && cornersDotClipPath) {\n cornersDotClipPath.appendChild(dot._element);\n }\n }\n }\n }\n });\n }\n\n async drawImage({\n width,\n height,\n count,\n dotSize\n }: {\n width: number;\n height: number;\n count: number;\n dotSize: number;\n }): Promise<void> {\n const options = this._options;\n const xBeginning = Math.floor((options.width - count * dotSize) / 2);\n const yBeginning = Math.floor((options.height - count * dotSize) / 2);\n const margin = options.imageOptions.margin * dotSize;\n const dx = xBeginning + margin + (count * dotSize - width) / 2;\n const dy = yBeginning + margin + (count * dotSize - height) / 2;\n const dw = width - margin * 2;\n const dh = height - margin * 2;\n\n const imageUrl = await this._imageTools.toDataURL(options.image || \"\");\n let image: SVGElement = this._document.createElementNS(\"http://www.w3.org/2000/svg\", \"image\");\n image.setAttribute(\"href\", imageUrl || \"\");\n\n if (imageUrl.startsWith(\"data:image/svg+xml;\")) {\n let data = imageUrl.substring(19);\n const i = data.indexOf(\",\");\n const encoding = data.substring(0, i);\n data = data.substring(i + 1);\n\n switch (encoding) {\n case \"base64\":\n data = typeof atob == \"function\" ? atob(data) : Buffer.from(data, \"base64\").toString(\"utf8\");\n break;\n default:\n data = \"\";\n break;\n }\n\n if (data) {\n const container = new DOMParser().parseFromString(data, \"text/xml\");\n const rootEl = Array.from(container.getElementsByTagName(\"svg\"));\n if (rootEl.length) image = rootEl[0];\n }\n }\n\n image.setAttribute(\"x\", String(dx));\n image.setAttribute(\"y\", String(dy));\n image.setAttribute(\"width\", `${dw}px`);\n image.setAttribute(\"height\", `${dh}px`);\n\n this._element.appendChild(image);\n }\n\n _createColor({\n options,\n color,\n additionalRotation,\n x,\n y,\n height,\n width,\n name\n }: {\n options?: Gradient;\n color?: string;\n additionalRotation: number;\n x: number;\n y: number;\n height: number;\n width: number;\n name: string;\n }): void {\n const size = width > height ? width : height;\n const rect = this._document.createElementNS(\"http://www.w3.org/2000/svg\", \"rect\");\n rect.setAttribute(\"x\", String(x));\n rect.setAttribute(\"y\", String(y));\n rect.setAttribute(\"height\", String(height));\n rect.setAttribute(\"width\", String(width));\n rect.setAttribute(\"clip-path\", `url('#clip-path-${name}')`);\n\n if (options) {\n let gradient: SVGElement;\n if (options.type === GradientType.radial) {\n gradient = this._document.createElementNS(\"http://www.w3.org/2000/svg\", \"radialGradient\");\n gradient.setAttribute(\"id\", name);\n gradient.setAttribute(\"gradientUnits\", \"userSpaceOnUse\");\n gradient.setAttribute(\"fx\", String(x + width / 2));\n gradient.setAttribute(\"fy\", String(y + height / 2));\n gradient.setAttribute(\"cx\", String(x + width / 2));\n gradient.setAttribute(\"cy\", String(y + height / 2));\n gradient.setAttribute(\"r\", String(size / 2));\n } else {\n const rotation = ((options.rotation || 0) + additionalRotation) % (2 * Math.PI);\n const positiveRotation = (rotation + 2 * Math.PI) % (2 * Math.PI);\n let x0 = x + width / 2;\n let y0 = y + height / 2;\n let x1 = x + width / 2;\n let y1 = y + height / 2;\n\n if (\n (positiveRotation >= 0 && positiveRotation <= 0.25 * Math.PI) ||\n (positiveRotation > 1.75 * Math.PI && positiveRotation <= 2 * Math.PI)\n ) {\n x0 = x0 - width / 2;\n y0 = y0 - (height / 2) * Math.tan(rotation);\n x1 = x1 + width / 2;\n y1 = y1 + (height / 2) * Math.tan(rotation);\n } else if (positiveRotation > 0.25 * Math.PI && positiveRotation <= 0.75 * Math.PI) {\n y0 = y0 - height / 2;\n x0 = x0 - width / 2 / Math.tan(rotation);\n y1 = y1 + height / 2;\n x1 = x1 + width / 2 / Math.tan(rotation);\n } else if (positiveRotation > 0.75 * Math.PI && positiveRotation <= 1.25 * Math.PI) {\n x0 = x0 + width / 2;\n y0 = y0 + (height / 2) * Math.tan(rotation);\n x1 = x1 - width / 2;\n y1 = y1 - (height / 2) * Math.tan(rotation);\n } else if (positiveRotation > 1.25 * Math.PI && positiveRotation <= 1.75 * Math.PI) {\n y0 = y0 + height / 2;\n x0 = x0 + width / 2 / Math.tan(rotation);\n y1 = y1 - height / 2;\n x1 = x1 - width / 2 / Math.tan(rotation);\n }\n\n gradient = this._document.createElementNS(\"http://www.w3.org/2000/svg\", \"linearGradient\");\n gradient.setAttribute(\"id\", name);\n gradient.setAttribute(\"gradientUnits\", \"userSpaceOnUse\");\n gradient.setAttribute(\"x1\", String(Math.round(x0)));\n gradient.setAttribute(\"y1\", String(Math.round(y0)));\n gradient.setAttribute(\"x2\", String(Math.round(x1)));\n gradient.setAttribute(\"y2\", String(Math.round(y1)));\n }\n\n options.colorStops.forEach(({ offset, color }: { offset: number; color: string }) => {\n const stop = this._document.createElementNS(\"http://www.w3.org/2000/svg\", \"stop\");\n stop.setAttribute(\"offset\", `${100 * offset}%`);\n stop.setAttribute(\"stop-color\", color);\n gradient.appendChild(stop);\n });\n\n rect.setAttribute(\"fill\", `url('#${name}')`);\n this._defs.appendChild(gradient);\n } else if (color) {\n rect.setAttribute(\"fill\", color);\n }\n\n this._element.appendChild(rect);\n }\n}\n","interface ImageSizeOptions {\n originalHeight: number;\n originalWidth: number;\n maxHiddenDots: number;\n maxHiddenAxisDots?: number;\n dotSize: number;\n margin: number;\n}\n\ninterface ImageSizeResult {\n height: number;\n width: number;\n hideYDots: number;\n hideXDots: number;\n}\n\nexport function calculateImageSize({\n originalHeight,\n originalWidth,\n maxHiddenDots,\n maxHiddenAxisDots,\n dotSize,\n margin\n}: ImageSizeOptions): ImageSizeResult {\n const hideDots = { x: 0, y: 0 };\n const imageSize = { x: 0, y: 0 };\n\n if (\n originalHeight <= 0 ||\n originalWidth <= 0 ||\n maxHiddenDots <= 0 ||\n dotSize <= 0 ||\n 4 * margin ** 2 > maxHiddenDots\n ) {\n return {\n height: 0,\n width: 0,\n hideYDots: 0,\n hideXDots: 0\n };\n }\n\n //If set, ensure maxHiddenAxisDots is odd and at least 1\n if (maxHiddenAxisDots && maxHiddenAxisDots % 2 == 0) maxHiddenAxisDots = Math.max(1, maxHiddenAxisDots - 1);\n\n //Determine the bigger and smaller image dimension\n const dimMax = Math.max(originalWidth, originalHeight);\n const dimMin = Math.min(originalWidth, originalHeight);\n\n //Find max image size along the bigger dimension\n let lower = 0,\n upper = (maxHiddenAxisDots || maxHiddenDots) - 2 * margin;\n do {\n const size = lower + (upper - lower) / 2;\n let dotsMax = Math.max(1, Math.ceil(size + 2 * margin));\n if (dotsMax % 2 == 0) dotsMax++;\n let dotsMin = Math.max(1, Math.ceil((size * dimMin) / dimMax + 2 * margin));\n if (dotsMin % 2 == 0) dotsMin++;\n\n if (dotsMax * dotsMin > maxHiddenDots) upper = size;\n else lower = size;\n } while (Math.abs(lower - upper) > 0.001);\n\n //Calculate how many dots the given size corresponds to\n const size = lower;\n let hideMax = Math.max(1, Math.ceil(size + 2 * margin));\n if (hideMax % 2 == 0) hideMax++;\n let hideMin = Math.max(1, Math.ceil((size * dimMin) / dimMax + 2 * margin));\n if (hideMin % 2 == 0) hideMin++;\n\n //Set hidden dots along bigger and smaller dimension to the right axis\n if (originalWidth > originalHeight) {\n hideDots.x = hideMax;\n hideDots.y = hideMin;\n } else {\n hideDots.x = hideMin;\n hideDots.y = hideMax;\n }\n\n //Fit image to the hidden dots\n const maxW = (hideDots.x - 2 * margin) * dotSize;\n const maxH = (hideDots.y - 2 * margin) * dotSize;\n imageSize.x = maxW;\n imageSize.y = (maxW * originalHeight) / originalWidth;\n if (imageSize.y > maxH) {\n imageSize.y = maxH;\n imageSize.x = (maxH * originalWidth) / originalHeight;\n }\n\n return {\n height: Math.round(imageSize.y + 2 * margin * dotSize),\n width: Math.round(imageSize.x + 2 * margin * dotSize),\n hideYDots: hideDots.y,\n hideXDots: hideDots.x\n };\n}\n","import qrcode from \"qrcode-generator\";\nimport { getMode } from \"../tools/getMode\";\nimport { mergeDeep } from \"../tools/merge\";\nimport { sanitizeOptions } from \"../tools/sanitizeOptions\";\nimport { ExtensionFunction, Options, QRCode, ShapeType } from \"../types\";\nimport { defaultOptions, RequiredOptions } from \"./QROptions\";\nimport { QRSVG } from \"./QRSVG\";\nexport class QRCodeStyling {\n _options: RequiredOptions;\n _container?: HTMLElement;\n _svg?: SVGElement;\n _qr?: QRCode;\n _extension?: ExtensionFunction;\n _svgDrawingPromise?: Promise<void>;\n\n constructor(options?: Partial<Options>) {\n this._options = options ? sanitizeOptions(mergeDeep(defaultOptions, options) as RequiredOptions) : defaultOptions;\n this.update();\n }\n\n static _clearContainer(container?: HTMLElement): void {\n if (container) {\n container.innerHTML = \"\";\n }\n }\n\n _setupSvg(): void {\n if (!this._qr) {\n return;\n }\n const count = Math.ceil((this._options.shape == ShapeType.circle ? Math.sqrt(2) : 1) * this._qr.getModuleCount());\n const size = this._options.dotsOptions.size * (count + 2 * this._options.margin);\n const qrSVG = new QRSVG({\n ...this._options,\n width: size,\n height: size\n });\n\n this._svg = qrSVG.getElement();\n this._svgDrawingPromise = qrSVG.drawQR(this._qr).then(() => {\n if (!this._svg) return;\n this._extension?.(qrSVG.getElement(), this._options);\n });\n }\n\n async _getElement(): Promise<SVGElement | undefined> {\n if (!this._qr) throw \"QR code is empty\";\n\n if (!this._svg || !this._svgDrawingPromise) {\n this._setupSvg();\n }\n await this._svgDrawingPromise;\n return this._svg;\n }\n\n update(options?: Partial<Options>): void {\n QRCodeStyling._clearContainer(this._container);\n this._options = options ? sanitizeOptions(mergeDeep(this._options, options) as RequiredOptions) : this._options;\n\n if (!this._options.data) {\n return;\n }\n\n this._qr = qrcode(this._options.qrOptions.typeNumber, this._options.qrOptions.errorCorrectionLevel);\n this._qr.addData(this._options.data, this._options.qrOptions.mode || getMode(this._options.data));\n this._qr.make();\n\n this._setupSvg();\n\n this.append(this._container);\n }\n\n append(container?: HTMLElement): void {\n if (!container) {\n return;\n }\n\n if (typeof container.appendChild !== \"function\") {\n throw \"Container should be a single DOM node\";\n }\n\n if (this._svg) {\n container.appendChild(this._svg);\n }\n\n this._container = container;\n }\n\n applyExtension(extension: ExtensionFunction): void {\n if (!extension) {\n throw \"Extension function should be defined.\";\n }\n\n this._extension = extension;\n this.update();\n }\n\n deleteExtension(): void {\n this._extension = undefined;\n this.update();\n }\n\n async serialize(): Promise<string | undefined> {\n if (!this._qr) throw \"QR code is empty\";\n\n const element = await this._getElement();\n\n if (!element) {\n return;\n }\n\n const serializer = new XMLSerializer();\n let source = serializer.serializeToString(element);\n\n source = '<?xml version=\"1.0\" standalone=\"no\"?>\\r\\n' + source;\n return source;\n }\n}\n","import { Mode } from \"../types\";\n\nexport function getMode(data: string): Mode {\n switch (true) {\n case /^[0-9]*$/.test(data):\n return Mode.numeric;\n case /^[0-9A-Z $%*+\\-./:]*$/.test(data):\n return Mode.alphanumeric;\n default:\n return Mode.byte;\n }\n}\n","import { QRCodeStyling } from \"../core/QRCodeStyling\";\nimport { defaultCanvasOptions, RequiredCanvasOptions } from \"../core/QROptions\";\nimport { CanvasOptions, FileExtension } from \"../types\";\nimport { mergeDeep } from \"./merge\";\nimport { sanitizeCanvasOptions } from \"./sanitizeOptions\";\n\nexport function drawToCanvas(\n qrCode: QRCodeStyling,\n options?: CanvasOptions\n): { canvas: HTMLCanvasElement; canvasDrawingPromise: Promise<void> | undefined } | undefined {\n if (!qrCode._qr) {\n return;\n }\n\n const { width, height, margin } = options\n ? sanitizeCanvasOptions(mergeDeep(defaultCanvasOptions, options) as RequiredCanvasOptions)\n : defaultCanvasOptions;\n\n const canvas = document.createElement(\"canvas\");\n canvas.width = width;\n canvas.height = height;\n\n const size = Math.min(width, height) - 2 * margin;\n\n qrCode._setupSvg();\n const canvasDrawingPromise = qrCode._svgDrawingPromise?.then(async () => {\n if (!qrCode._svg) return;\n\n const xml = await qrCode.serialize();\n if (!xml) return;\n const svg64 = btoa(xml);\n const image64 = \"data:image/svg+xml;base64,\" + svg64;\n const image = new Image();\n\n return new Promise<void>((resolve, reject) => {\n image.onload = (): void => {\n canvas?.getContext(\"2d\")?.drawImage(image, (width - size) / 2, (height - size) / 2, size, size);\n resolve();\n };\n image.onerror = image.onabort = reject;\n\n image.src = image64;\n });\n });\n\n return { canvas, canvasDrawingPromise };\n}\n\nexport async function download(\n qrCode: QRCodeStyling,\n downloadOptions: FileExtension | { name?: string; extension: FileExtension },\n options?: CanvasOptions\n): Promise<void> {\n if (!qrCode._qr) throw \"QR code is empty\";\n let extension = FileExtension.png;\n let name = \"qr\";\n\n //TODO remove deprecated code in the v2\n if (typeof downloadOptions === \"string\") {\n extension = downloadOptions;\n console.warn(\n \"Extension is deprecated as argument for 'download' method, please pass object { name: '...', extension: '...' } as argument\"\n );\n } else if (typeof downloadOptions === \"object\" && downloadOptions !== null) {\n if (downloadOptions.name) {\n name = downloadOptions.name;\n }\n if (downloadOptions.extension) {\n extension = downloadOptions.extension;\n }\n }\n\n if (extension.toLowerCase() === \"svg\") {\n let source = await qrCode.serialize();\n source = '<?xml version=\"1.0\" standalone=\"no\"?>\\r\\n' + source;\n const url = \"data:image/svg+xml;charset=utf-8,\" + encodeURIComponent(source);\n downloadURI(url, `${name}.svg`);\n } else {\n const res = drawToCanvas(qrCode, options);\n if (!res) return;\n const { canvas, canvasDrawingPromise } = res;\n await canvasDrawingPromise;\n const url = canvas.toDataURL(`image/${extension}`);\n downloadURI(url, `${name}.${extension}`);\n }\n}\n\nexport function downloadURI(uri: string, name: string): void {\n const link = document.createElement(\"a\");\n link.download = name;\n link.href = uri;\n document.body.appendChild(link);\n link.click();\n document.body.removeChild(link);\n}\n"],"names":["DotType","CornerDotType","CornerSquareType","GradientType","ShapeType","exports","TypeNumber","Array","fill","map","_","i","ErrorCorrectionLevel","Mode","FileExtension","ErrorCorrectionPercents","L","M","Q","H","qrcode","typeNumber","errorCorrectionLevel","_typeNumber","_errorCorrectionLevel","QRErrorCorrectionLevel","_modules","_moduleCount","_dataCache","_dataList","_this","makeImpl","test","maskPattern","moduleCount","modules","row","col","setupPositionProbePattern","setupPositionAdjustPattern","setupTimingPattern","setupTypeInfo","setupTypeNumber","createData","mapData","r","c","pos","QRUtil","getPatternPosition","length","j","bits","getBCHTypeNumber","mod","Math","floor","data","getBCHTypeInfo","inc","bitIndex","byteIndex","maskFunc","getMaskFunction","dark","dataList","rsBlocks","QRRSBlock","getRSBlocks","buffer","qrBitBuffer","put","getMode","getLength","getLengthInBits","write","totalDataCount","dataCount","putBit","offset","maxDcCount","maxEcCount","dcdata","ecdata","dcCount","ecCount","totalCount","max","getBuffer","rsPoly","getErrorCorrectPolynomial","modPoly","qrPolynomial","modIndex","getAt","totalCodeCount","index","createBytes","addData","mode","newData","qrNumber","qrAlphaNum","qr8BitByte","qrKanji","push","isDark","getModuleCount","make","minLostPoint","pattern","lostPoint","getLostPoint","getBestMaskPattern","createTableTag","cellSize","margin","qrHtml","createSvgTag","alt","title","opts","arguments","text","id","mr","rect","size","qrSvg","scalable","escapeXml","join","trim","createDataURL","min","x","y","createImgTag","img","s","escaped","charAt","createASCII","r1","r2","p","blocks","blocksLastLineNoMargin","ascii","substring","_createHalfASCII","white","black","line","renderTo2dContext","context","fillStyle","fillRect","stringToBytes","stringToBytesFuncs","default","bytes","charCodeAt","createStringToBytes","unicodeData","numChars","unicodeMap","bin","base64DecodeInputStream","read","b","count","b0","b1","v","String","fromCharCode","unknownChar","PATTERN_POSITION_TABLE","G15","G18","getBCHDigit","QRMode","QRMaskPattern","digit","d","errorCorrectLength","a","multiply","QRMath","gexp","type","sameCount","darkCount","abs","EXP_TABLE","LOG_TABLE","n","num","shift","_num","e","glog","ratio","RS_BLOCK_TABLE","qrRSBlock","rsBlock","getRsBlockTable","list","_buffer","_length","bufIndex","bit","_mode","_data","strToNum","chatToNum","getCode","_bytes","code","byteArrayOutputStream","writeByte","off","len","str","_str","_pos","_buflen","match","decode","width","height","getPixel","gif","_width","_height","pixel","out","writeString","writeShort","raster","getLZWRaster","writeBytes","lzwMinCodeSize","clearCode","endCode","bitLength","table","lzwTable","add","_out","_bitLength","_bitBuffer","byteOut","bitOut","dataIndex","contains","indexOf","flush","toByteArray","_map","_size","key","gifImage","setPixel","base64","_base64","writeEncoded","encode","padlen","toString","base64EncodeOutputStream","utf8","charcode","toUTF8Array","module","isObject","obj","isArray","mergeDeep","target","sources","source","undefined","Object","keys","forEach","targetValue","sourceValue","assign","sanitizeGradient","gradient","newGradient","colorStops","rotation","Number","colorStop","sanitizeOptions","options","newOptions","imageOptions","hideBackgroundDots","Boolean","imageSize","dotsOptions","cornersSquareOptions","cornersDotOptions","backgroundOptions","document","defaultOptions","shape","square","qrOptions","crossOrigin","color","defaultCanvasOptions","QRCornerDot","constructor","svg","this","_svg","_type","_document","draw","drawFunction","_drawSquare","dot","_drawDot","call","_rotateFigure","cx","cy","_element","setAttribute","PI","_basicDot","args","createElementNS","_basicSquare","QRCornerSquare","extraRounded","_drawExtraRounded","dotSize","_basicExtraRounded","QRDot","getNeighbor","dots","classy","_drawClassy","classyRounded","_drawClassyRounded","rounded","_drawRounded","_basicSideRounded","_basicCornerRounded","_basicCornerExtraRounded","_basicCornersRounded","leftNeighbor","rightNeighbor","topNeighbor","bottomNeighbor","neighborsCount","browserImageTools","toDataURL","url","Promise","resolve","reject","xhr","XMLHttpRequest","onload","reader","FileReader","onloadend","result","readAsDataURL","response","onerror","onabort","ontimeout","open","responseType","send","getSize","image","Image","src","then","catch","squareMask","dotMask","QRSVG","_defs","appendChild","_imageTools","imageTools","_options","getElement","drawQR","qr","drawImageSize","hideXDots","hideYDots","_qr","coverLevel","maxHiddenDots","originalHeight","originalWidth","maxHiddenAxisDots","hideDots","dimMax","dimMin","lower","upper","dotsMax","ceil","dotsMin","hideMax","hideMin","maxW","maxH","round","calculateImageSize","drawBackground","drawDots","drawCorners","drawImage","element","gradientOptions","_createColor","additionalRotation","name","_backgroundClipPath","filter","minSize","xBeginning","yBeginning","_dotsClipPath","xOffset","yOffset","circle","additionalDots","fakeCount","xFakeBeginning","yFakeBeginning","fakeMatrix","center","sqrt","cornersSquareSize","cornersDotSize","column","cornersSquareClipPath","cornersDotClipPath","_cornersSquareClipPath","_cornersDotClipPath","cornersSquare","cornersDot","dx","dy","dw","dh","imageUrl","startsWith","encoding","atob","Buffer","from","container","DOMParser","parseFromString","rootEl","getElementsByTagName","radial","positiveRotation","x0","y0","x1","y1","tan","stop","QRCodeStyling","update","_clearContainer","innerHTML","_setupSvg","qrSVG","_svgDrawingPromise","_extension","_getElement","_container","numeric","alphanumeric","byte","append","applyExtension","extension","deleteExtension","serialize","XMLSerializer","serializeToString","drawToCanvas","qrCode","sanitizeCanvasOptions","canvas","createElement","canvasDrawingPromise","async","xml","image64","btoa","getContext","downloadURI","uri","link","download","href","body","click","removeChild","downloadOptions","png","console","warn","toLowerCase","encodeURIComponent","res"],"mappings":"qPAOA,IAAYA,EAQAC,EAIAC,EAKAC,EAIAC,EAdXC,EAAAL,aAAA,GAPWA,EAAAA,YAAAA,EAAAA,QAOX,CAAA,IANC,KAAA,OACAA,EAAA,QAAA,UACAA,EAAA,OAAA,SACAA,EAAA,cAAA,iBACAA,EAAA,OAAA,SACAA,EAAA,aAAA,gBAKDK,EAAAJ,mBAAA,GAHWA,EAAAA,kBAAAA,EAAAA,cAGX,CAAA,IAFC,IAAA,MACAA,EAAA,OAAA,SAMDI,EAAAH,sBAAA,GAJWA,EAAAA,qBAAAA,EAAAA,iBAIX,CAAA,IAHC,IAAA,MACAA,EAAA,OAAA,SACAA,EAAA,aAAA,gBAKDG,EAAAF,kBAAA,GAHWA,EAAAA,iBAAAA,EAAAA,aAGX,CAAA,IAFC,OAAA,SACAA,EAAA,OAAA,SAKDE,EAAAD,eAAA,GAHWA,EAAAA,cAAAA,EAAAA,UAGX,CAAA,IAFC,OAAA,SACAA,EAAA,OAAA,SAuDF,MAAME,EAAaC,MAAM,IACtBC,KAAK,GACLC,KAAI,CAACC,EAAGC,IAAMA,IAMjB,IAAYC,EAMAC,EA4FAC,EA7FXT,EAAAO,0BAAA,GALWA,EAAAA,yBAAAA,EAAAA,qBAKX,CAAA,IAJC,EAAA,IACAA,EAAA,EAAA,IACAA,EAAA,EAAA,IACAA,EAAA,EAAA,IAODP,EAAAQ,UAAA,GALWA,EAAAA,SAAAA,EAAAA,KAKX,CAAA,IAJC,QAAA,UACAA,EAAA,aAAA,eACAA,EAAA,KAAA,OACAA,EAAA,MAAA,QA6FDR,EAAAS,mBAAA,GALWA,EAAAA,EAAaA,gBAAbA,gBAKX,CAAA,IAJC,IAAA,MACAA,EAAA,IAAA,MACAA,EAAA,KAAA,OACAA,EAAA,KAAA,OCjMW,MAAAC,EAA0B,CACrC,CAACH,EAAAA,qBAAqBI,GAAI,IAC1B,CAACJ,EAAAA,qBAAqBK,GAAI,IAC1B,CAACL,EAAAA,qBAAqBM,GAAI,IAC1B,CAACN,EAAAA,qBAAqBO,GAAI,0ICW5B,IAAIC,EAAS,WAWX,IAAIA,EAAS,SAASC,EAAYC,GAEhC,IAGIC,EAAcF,EACdG,EAAwBC,EAAuBH,GAC/CI,EAAW,KACXC,EAAe,EACfC,EAAa,KACbC,EAAY,GAEZC,EAAQ,CAAA,EAERC,EAAW,SAASC,EAAMC,GAG5BP,EAAW,SAASQ,GAElB,IADA,IAAIC,EAAU,IAAI5B,MAAM2B,GACfE,EAAM,EAAGA,EAAMF,EAAaE,GAAO,EAAG,CAC7CD,EAAQC,GAAO,IAAI7B,MAAM2B,GACzB,IAAK,IAAIG,EAAM,EAAGA,EAAMH,EAAaG,GAAO,EAC1CF,EAAQC,GAAKC,GAAO,IAEvB,CACD,OAAOF,CACR,CATU,CADXR,EAA6B,EAAdJ,EAAkB,IAYjCe,EAA0B,EAAG,GAC7BA,EAA0BX,EAAe,EAAG,GAC5CW,EAA0B,EAAGX,EAAe,GAC5CY,IACAC,IACAC,EAAcT,EAAMC,GAEhBV,GAAe,GACjBmB,EAAgBV,GAGA,MAAdJ,IACFA,EAAae,EAAWpB,EAAaC,EAAuBK,IAG9De,EAAQhB,EAAYK,EAC1B,EAEQK,EAA4B,SAASF,EAAKC,GAE5C,IAAK,IAAIQ,GAAK,EAAGA,GAAK,EAAGA,GAAK,EAE5B,KAAIT,EAAMS,IAAM,GAAKlB,GAAgBS,EAAMS,GAE3C,IAAK,IAAIC,GAAK,EAAGA,GAAK,EAAGA,GAAK,EAExBT,EAAMS,IAAM,GAAKnB,GAAgBU,EAAMS,IAKzCpB,EAASU,EAAMS,GAAGR,EAAMS,GAHpB,GAAKD,GAAKA,GAAK,IAAW,GAALC,GAAe,GAALA,IAC7B,GAAKA,GAAKA,GAAK,IAAW,GAALD,GAAe,GAALA,IAC/B,GAAKA,GAAKA,GAAK,GAAK,GAAKC,GAAKA,GAAK,EAOrD,EAsBQN,EAAqB,WAEvB,IAAK,IAAIK,EAAI,EAAGA,EAAIlB,EAAe,EAAGkB,GAAK,EACnB,MAAlBnB,EAASmB,GAAG,KAGhBnB,EAASmB,GAAG,GAAMA,EAAI,GAAK,GAG7B,IAAK,IAAIC,EAAI,EAAGA,EAAInB,EAAe,EAAGmB,GAAK,EACnB,MAAlBpB,EAAS,GAAGoB,KAGhBpB,EAAS,GAAGoB,GAAMA,EAAI,GAAK,EAEnC,EAEQP,EAA6B,WAI/B,IAFA,IAAIQ,EAAMC,EAAOC,mBAAmB1B,GAE3BZ,EAAI,EAAGA,EAAIoC,EAAIG,OAAQvC,GAAK,EAEnC,IAAK,IAAIwC,EAAI,EAAGA,EAAIJ,EAAIG,OAAQC,GAAK,EAAG,CAEtC,IAAIf,EAAMW,EAAIpC,GACV0B,EAAMU,EAAII,GAEd,GAA0B,MAAtBzB,EAASU,GAAKC,GAIlB,IAAK,IAAIQ,GAAK,EAAGA,GAAK,EAAGA,GAAK,EAE5B,IAAK,IAAIC,GAAK,EAAGA,GAAK,EAAGA,GAAK,EAI1BpB,EAASU,EAAMS,GAAGR,EAAMS,IAFhB,GAAND,GAAgB,GAALA,IAAgB,GAANC,GAAgB,GAALA,GACvB,GAALD,GAAe,GAALC,CAOvB,CAET,EAEQJ,EAAkB,SAASV,GAI7B,IAFA,IAAIoB,EAAOJ,EAAOK,iBAAiB9B,GAE1BZ,EAAI,EAAGA,EAAI,GAAIA,GAAK,EAAG,CAC9B,IAAI2C,GAAQtB,GAA8B,IAAnBoB,GAAQzC,EAAK,GACpCe,EAAS6B,KAAKC,MAAM7C,EAAI,IAAIA,EAAI,EAAIgB,EAAe,EAAI,GAAK2B,CAC7D,CAED,IAAS3C,EAAI,EAAGA,EAAI,GAAIA,GAAK,EAAG,CAC1B2C,GAAQtB,GAA8B,IAAnBoB,GAAQzC,EAAK,GACpCe,EAASf,EAAI,EAAIgB,EAAe,EAAI,GAAG4B,KAAKC,MAAM7C,EAAI,IAAM2C,CAC7D,CACP,EAEQb,EAAgB,SAAST,EAAMC,GAMjC,IAJA,IAAIwB,EAAQjC,GAAyB,EAAKS,EACtCmB,EAAOJ,EAAOU,eAAeD,GAGxB9C,EAAI,EAAGA,EAAI,GAAIA,GAAK,EAAG,CAE9B,IAAI2C,GAAQtB,GAA8B,IAAnBoB,GAAQzC,EAAK,GAEhCA,EAAI,EACNe,EAASf,GAAG,GAAK2C,EACR3C,EAAI,EACbe,EAASf,EAAI,GAAG,GAAK2C,EAErB5B,EAASC,EAAe,GAAKhB,GAAG,GAAK2C,CAExC,CAGD,IAAS3C,EAAI,EAAGA,EAAI,GAAIA,GAAK,EAAG,CAE1B2C,GAAQtB,GAA8B,IAAnBoB,GAAQzC,EAAK,GAEhCA,EAAI,EACNe,EAAS,GAAGC,EAAehB,EAAI,GAAK2C,EAC3B3C,EAAI,EACbe,EAAS,GAAG,GAAKf,EAAI,EAAI,GAAK2C,EAE9B5B,EAAS,GAAG,GAAKf,EAAI,GAAK2C,CAE7B,CAGD5B,EAASC,EAAe,GAAG,IAAOK,CACxC,EAEQY,EAAU,SAASa,EAAMxB,GAQ3B,IANA,IAAI0B,GAAO,EACPvB,EAAMT,EAAe,EACrBiC,EAAW,EACXC,EAAY,EACZC,EAAWd,EAAOe,gBAAgB9B,GAE7BI,EAAMV,EAAe,EAAGU,EAAM,EAAGA,GAAO,EAI/C,IAFW,GAAPA,IAAUA,GAAO,KAER,CAEX,IAAK,IAAIS,EAAI,EAAGA,EAAI,EAAGA,GAAK,EAE1B,GAA8B,MAA1BpB,EAASU,GAAKC,EAAMS,GAAY,CAElC,IAAIkB,GAAO,EAEPH,EAAYJ,EAAKP,SACnBc,EAAkD,IAAtCP,EAAKI,KAAeD,EAAY,IAGnCE,EAAS1B,EAAKC,EAAMS,KAG7BkB,GAAQA,GAGVtC,EAASU,GAAKC,EAAMS,GAAKkB,GAGR,IAFjBJ,GAAY,KAGVC,GAAa,EACbD,EAAW,EAEd,CAKH,IAFAxB,GAAOuB,GAEG,GAAKhC,GAAgBS,EAAK,CAClCA,GAAOuB,EACPA,GAAOA,EACP,KACD,CACF,CAET,EAmEQhB,EAAa,SAAStB,EAAYC,EAAsB2C,GAM1D,IAJA,IAAIC,EAAWC,EAAUC,YAAY/C,EAAYC,GAE7C+C,EAASC,IAEJ3D,EAAI,EAAGA,EAAIsD,EAASf,OAAQvC,GAAK,EAAG,CAC3C,IAAI8C,EAAOQ,EAAStD,GACpB0D,EAAOE,IAAId,EAAKe,UAAW,GAC3BH,EAAOE,IAAId,EAAKgB,YAAazB,EAAO0B,gBAAgBjB,EAAKe,UAAWnD,IACpEoC,EAAKkB,MAAMN,EACZ,CAGD,IAAIO,EAAiB,EACrB,IAASjE,EAAI,EAAGA,EAAIuD,EAAShB,OAAQvC,GAAK,EACxCiE,GAAkBV,EAASvD,GAAGkE,UAGhC,GAAIR,EAAOK,kBAAqC,EAAjBE,EAC7B,KAAM,0BACFP,EAAOK,kBACP,IACiB,EAAjBE,EACA,IASN,IALIP,EAAOK,kBAAoB,GAAsB,EAAjBE,GAClCP,EAAOE,IAAI,EAAG,GAITF,EAAOK,kBAAoB,GAAK,GACrCL,EAAOS,QAAO,GAIhB,OAEMT,EAAOK,mBAAsC,EAAjBE,IAGhCP,EAAOE,IAxVA,IAwVU,GAEbF,EAAOK,mBAAsC,EAAjBE,KAGhCP,EAAOE,IA5VA,GA4VU,GAGnB,OApHgB,SAASF,EAAQH,GAUjC,IARA,IAAIa,EAAS,EAETC,EAAa,EACbC,EAAa,EAEbC,EAAS,IAAI3E,MAAM2D,EAAShB,QAC5BiC,EAAS,IAAI5E,MAAM2D,EAAShB,QAEvBL,EAAI,EAAGA,EAAIqB,EAAShB,OAAQL,GAAK,EAAG,CAE3C,IAAIuC,EAAUlB,EAASrB,GAAGgC,UACtBQ,EAAUnB,EAASrB,GAAGyC,WAAaF,EAEvCJ,EAAazB,KAAKgC,IAAIP,EAAYI,GAClCH,EAAa1B,KAAKgC,IAAIN,EAAYI,GAElCH,EAAOrC,GAAK,IAAItC,MAAM6E,GAEtB,IAAK,IAAIzE,EAAI,EAAGA,EAAIuE,EAAOrC,GAAGK,OAAQvC,GAAK,EACzCuE,EAAOrC,GAAGlC,GAAK,IAAO0D,EAAOmB,YAAY7E,EAAIoE,GAE/CA,GAAUK,EAEV,IAAIK,EAASzC,EAAO0C,0BAA0BL,GAG1CM,EAFUC,EAAaV,EAAOrC,GAAI4C,EAAOhB,YAAc,GAErCnB,IAAImC,GAE1B,IADAN,EAAOtC,GAAK,IAAItC,MAAMkF,EAAOhB,YAAc,GAClC9D,EAAI,EAAGA,EAAIwE,EAAOtC,GAAGK,OAAQvC,GAAK,EAAG,CAC5C,IAAIkF,EAAWlF,EAAIgF,EAAQlB,YAAcU,EAAOtC,GAAGK,OACnDiC,EAAOtC,GAAGlC,GAAMkF,GAAY,EAAIF,EAAQG,MAAMD,GAAY,CAC3D,CACF,CAED,IAAIE,EAAiB,EACrB,IAASpF,EAAI,EAAGA,EAAIuD,EAAShB,OAAQvC,GAAK,EACxCoF,GAAkB7B,EAASvD,GAAG2E,WAGhC,IAAI7B,EAAO,IAAIlD,MAAMwF,GACjBC,EAAQ,EAEZ,IAASrF,EAAI,EAAGA,EAAIqE,EAAYrE,GAAK,EACnC,IAASkC,EAAI,EAAGA,EAAIqB,EAAShB,OAAQL,GAAK,EACpClC,EAAIuE,EAAOrC,GAAGK,SAChBO,EAAKuC,GAASd,EAAOrC,GAAGlC,GACxBqF,GAAS,GAKf,IAASrF,EAAI,EAAGA,EAAIsE,EAAYtE,GAAK,EACnC,IAASkC,EAAI,EAAGA,EAAIqB,EAAShB,OAAQL,GAAK,EACpClC,EAAIwE,EAAOtC,GAAGK,SAChBO,EAAKuC,GAASb,EAAOtC,GAAGlC,GACxBqF,GAAS,GAKf,OAAOvC,CACb,CAqDawC,CAAY5B,EAAQH,EACjC,EAEIpC,EAAMoE,QAAU,SAASzC,EAAM0C,GAI7B,IAAIC,EAAU,KAEd,OAJAD,EAAOA,GAAQ,QAKf,IAAK,UACHC,EAAUC,EAAS5C,GACnB,MACF,IAAK,eACH2C,EAAUE,EAAW7C,GACrB,MACF,IAAK,OACH2C,EAAUG,EAAW9C,GACrB,MACF,IAAK,QACH2C,EAAUI,EAAQ/C,GAClB,MACF,QACE,KAAM,QAAU0C,EAGlBtE,EAAU4E,KAAKL,GACfxE,EAAa,IACnB,EAEIE,EAAM4E,OAAS,SAAStE,EAAKC,GAC3B,GAAID,EAAM,GAAKT,GAAgBS,GAAOC,EAAM,GAAKV,GAAgBU,EAC/D,MAAMD,EAAM,IAAMC,EAEpB,OAAOX,EAASU,GAAKC,EAC3B,EAEIP,EAAM6E,eAAiB,WACrB,OAAOhF,CACb,EAEIG,EAAM8E,KAAO,WACX,GAAIrF,EAAc,EAAG,CAGnB,IAFA,IAAIF,EAAa,EAEVA,EAAa,GAAIA,IAAc,CAIpC,IAHA,IAAI6C,EAAWC,EAAUC,YAAY/C,EAAYG,GAC7C6C,EAASC,IAEJ3D,EAAI,EAAGA,EAAIkB,EAAUqB,OAAQvC,IAAK,CACzC,IAAI8C,EAAO5B,EAAUlB,GACrB0D,EAAOE,IAAId,EAAKe,UAAW,GAC3BH,EAAOE,IAAId,EAAKgB,YAAazB,EAAO0B,gBAAgBjB,EAAKe,UAAWnD,IACpEoC,EAAKkB,MAAMN,EACZ,CAED,IAAIO,EAAiB,EACrB,IAASjE,EAAI,EAAGA,EAAIuD,EAAShB,OAAQvC,IACnCiE,GAAkBV,EAASvD,GAAGkE,UAGhC,GAAIR,EAAOK,mBAAsC,EAAjBE,EAC9B,KAEH,CAEDrD,EAAcF,CACf,CAEDU,GAAS,EApWc,WAKvB,IAHA,IAAI8E,EAAe,EACfC,EAAU,EAELnG,EAAI,EAAGA,EAAI,EAAGA,GAAK,EAAG,CAE7BoB,GAAS,EAAMpB,GAEf,IAAIoG,EAAY/D,EAAOgE,aAAalF,IAE3B,GAALnB,GAAUkG,EAAeE,KAC3BF,EAAeE,EACfD,EAAUnG,EAEb,CAED,OAAOmG,CACb,CAkVsBG,GACtB,EAEInF,EAAMoF,eAAiB,SAASC,EAAUC,GAExCD,EAAWA,GAAY,EAGvB,IAAIE,EAAS,GAEbA,GAAU,iBACVA,GAAU,0CACVA,GAAU,8BACVA,GAAU,2BAPVD,OAA2B,IAAVA,EAAmC,EAAXD,EAAeC,GAOT,MAC/CC,GAAU,KACVA,GAAU,UAEV,IAAK,IAAIxE,EAAI,EAAGA,EAAIf,EAAM6E,iBAAkB9D,GAAK,EAAG,CAElDwE,GAAU,OAEV,IAAK,IAAIvE,EAAI,EAAGA,EAAIhB,EAAM6E,iBAAkB7D,GAAK,EAC/CuE,GAAU,cACVA,GAAU,0CACVA,GAAU,8BACVA,GAAU,8BACVA,GAAU,WAAaF,EAAW,MAClCE,GAAU,YAAcF,EAAW,MACnCE,GAAU,sBACVA,GAAUvF,EAAM4E,OAAO7D,EAAGC,GAAI,UAAY,UAC1CuE,GAAU,IACVA,GAAU,MAGZA,GAAU,OACX,CAKD,OAHAA,GAAU,WACVA,GAAU,UAGhB,EAEIvF,EAAMwF,aAAe,SAASH,EAAUC,EAAQG,EAAKC,GAEnD,IAAIC,EAAO,CAAA,EACgB,iBAAhBC,UAAU,KAInBP,GAFAM,EAAOC,UAAU,IAEDP,SAChBC,EAASK,EAAKL,OACdG,EAAME,EAAKF,IACXC,EAAQC,EAAKD,OAGfL,EAAWA,GAAY,EACvBC,OAA2B,IAAVA,EAAmC,EAAXD,EAAeC,GAGxDG,EAAsB,iBAARA,EAAoB,CAACI,KAAMJ,GAAOA,GAAO,IACnDI,KAAOJ,EAAII,MAAQ,KACvBJ,EAAIK,GAAML,EAAQ,KAAIA,EAAIK,IAAM,qBAAuB,MAGvDJ,EAA0B,iBAAVA,EAAsB,CAACG,KAAMH,GAASA,GAAS,IACzDG,KAAOH,EAAMG,MAAQ,KAC3BH,EAAMI,GAAMJ,EAAU,KAAIA,EAAMI,IAAM,eAAiB,KAEvD,IACI9E,EAAOD,EAAGgF,EAAcC,EADxBC,EAAOjG,EAAM6E,iBAAmBQ,EAAoB,EAATC,EAC7BY,EAAM,GAmBxB,IAjBAF,EAAO,IAAMX,EAAW,QAAUA,EAChC,KAAOA,EAAW,SAAWA,EAAW,KAE1Ca,GAAS,wDACTA,GAAUP,EAAKQ,SAA+D,GAApD,WAAaF,EAAO,eAAiBA,EAAO,MACtEC,GAAS,iBAAmBD,EAAO,IAAMA,EAAO,KAChDC,GAAS,uCACTA,GAAUR,EAAMG,MAAQJ,EAAII,KAAQ,gCAChCO,EAAU,CAACV,EAAMI,GAAIL,EAAIK,IAAIO,KAAK,KAAKC,QAAW,IAAM,GAC5DJ,GAAS,IACTA,GAAUR,EAAU,KAAI,cAAgBU,EAAUV,EAAMI,IAAM,KAC1DM,EAAUV,EAAMG,MAAQ,WAAa,GACzCK,GAAUT,EAAQ,KAAI,oBAAsBW,EAAUX,EAAIK,IAAM,KAC5DM,EAAUX,EAAII,MAAQ,iBAAmB,GAC7CK,GAAS,gEACTA,GAAS,YAEJnF,EAAI,EAAGA,EAAIf,EAAM6E,iBAAkB9D,GAAK,EAE3C,IADAgF,EAAKhF,EAAIsE,EAAWC,EACftE,EAAI,EAAGA,EAAIhB,EAAM6E,iBAAkB7D,GAAK,EACvChB,EAAM4E,OAAO7D,EAAGC,KAElBkF,GAAS,KADJlF,EAAEqE,EAASC,GACI,IAAMS,EAAKC,GAQrC,OAHAE,GAAS,wCACTA,GAAS,QAGf,EAEIlG,EAAMuG,cAAgB,SAASlB,EAAUC,GAEvCD,EAAWA,GAAY,EACvBC,OAA2B,IAAVA,EAAmC,EAAXD,EAAeC,EAExD,IAAIW,EAAOjG,EAAM6E,iBAAmBQ,EAAoB,EAATC,EAC3CkB,EAAMlB,EACN7B,EAAMwC,EAAOX,EAEjB,OAAOiB,EAAcN,EAAMA,GAAM,SAASQ,EAAGC,GAC3C,GAAIF,GAAOC,GAAKA,EAAIhD,GAAO+C,GAAOE,GAAKA,EAAIjD,EAAK,CAC9C,IAAIzC,EAAIS,KAAKC,OAAQ+E,EAAID,GAAOnB,GAC5BtE,EAAIU,KAAKC,OAAQgF,EAAIF,GAAOnB,GAChC,OAAOrF,EAAM4E,OAAO7D,EAAGC,GAAI,EAAI,CACzC,CACU,OAAO,CAEjB,GACA,EAEIhB,EAAM2G,aAAe,SAAStB,EAAUC,EAAQG,GAE9CJ,EAAWA,GAAY,EACvBC,OAA2B,IAAVA,EAAmC,EAAXD,EAAeC,EAExD,IAAIW,EAAOjG,EAAM6E,iBAAmBQ,EAAoB,EAATC,EAE3CsB,EAAM,GAkBV,OAjBAA,GAAO,OACPA,GAAO,SACPA,GAAO5G,EAAMuG,cAAclB,EAAUC,GACrCsB,GAAO,IACPA,GAAO,WACPA,GAAOX,EACPW,GAAO,IACPA,GAAO,YACPA,GAAOX,EACPW,GAAO,IACHnB,IACFmB,GAAO,SACPA,GAAOR,EAAUX,GACjBmB,GAAO,KAETA,GAAO,IAGb,EAEI,IAAIR,EAAY,SAASS,GAEvB,IADA,IAAIC,EAAU,GACLjI,EAAI,EAAGA,EAAIgI,EAAEzF,OAAQvC,GAAK,EAAG,CACpC,IAAImC,EAAI6F,EAAEE,OAAOlI,GACjB,OAAOmC,GACP,IAAK,IAAK8F,GAAW,OAAQ,MAC7B,IAAK,IAAKA,GAAW,OAAQ,MAC7B,IAAK,IAAKA,GAAW,QAAS,MAC9B,IAAK,IAAKA,GAAW,SAAU,MAC/B,QAAUA,GAAW9F,EAEtB,CACD,OAAO8F,CACb,EAgHI,OAtDA9G,EAAMgH,YAAc,SAAS3B,EAAUC,GAGrC,IAFAD,EAAWA,GAAY,GAER,EACb,OA5DmB,SAASC,GAE9BA,OAA2B,IAAVA,EAAwBD,EAAeC,EAExD,IAIIoB,EAAGD,EAAGQ,EAAIC,EAAIC,EAJdlB,EAHW,EAGJjG,EAAM6E,iBAAuC,EAATS,EAC3CkB,EAAMlB,EACN7B,EAAMwC,EAAOX,EAIb8B,EAAS,CACX,KAAM,IACN,KAAM,IACN,KAAM,IACN,KAAM,KAGJC,EAAyB,CAC3B,KAAM,IACN,KAAM,IACN,KAAM,IACN,KAAM,KAGJC,EAAQ,GACZ,IAAKZ,EAAI,EAAGA,EAAIT,EAAMS,GAAK,EAAG,CAG5B,IAFAO,EAAKxF,KAAKC,OAAOgF,EAAIF,GAzBR,GA0BbU,EAAKzF,KAAKC,OAAOgF,EAAI,EAAIF,GA1BZ,GA2BRC,EAAI,EAAGA,EAAIR,EAAMQ,GAAK,EACzBU,EAAI,IAEAX,GAAOC,GAAKA,EAAIhD,GAAO+C,GAAOE,GAAKA,EAAIjD,GAAOzD,EAAM4E,OAAOqC,EAAIxF,KAAKC,OAAO+E,EAAID,GA9BxE,MA+BTW,EAAI,KAGFX,GAAOC,GAAKA,EAAIhD,GAAO+C,GAAOE,EAAE,GAAKA,EAAE,EAAIjD,GAAOzD,EAAM4E,OAAOsC,EAAIzF,KAAKC,OAAO+E,EAAID,GAlC5E,IAmCTW,GAAK,IAGLA,GAAK,IAIPG,GAAUhC,EAAS,GAAKoB,EAAE,GAAKjD,EAAO4D,EAAuBF,GAAKC,EAAOD,GAG3EG,GAAS,IACV,CAED,OAAIrB,EAAO,GAAKX,EAAS,EAChBgC,EAAMC,UAAU,EAAGD,EAAMlG,OAAS6E,EAAO,GAAKxH,MAAMwH,EAAK,GAAGI,KAAK,KAGnEiB,EAAMC,UAAU,EAAGD,EAAMlG,OAAO,EAC7C,CAMeoG,CAAiBlC,GAG1BD,GAAY,EACZC,OAA2B,IAAVA,EAAmC,EAAXD,EAAeC,EAExD,IAIIoB,EAAGD,EAAG1F,EAAGoG,EAJTlB,EAAOjG,EAAM6E,iBAAmBQ,EAAoB,EAATC,EAC3CkB,EAAMlB,EACN7B,EAAMwC,EAAOX,EAIbmC,EAAQhJ,MAAM4G,EAAS,GAAGgB,KAAK,MAC/BqB,EAAQjJ,MAAM4G,EAAS,GAAGgB,KAAK,MAE/BiB,EAAQ,GACRK,EAAO,GACX,IAAKjB,EAAI,EAAGA,EAAIT,EAAMS,GAAK,EAAG,CAG5B,IAFA3F,EAAIU,KAAKC,OAAQgF,EAAIF,GAAOnB,GAC5BsC,EAAO,GACFlB,EAAI,EAAGA,EAAIR,EAAMQ,GAAK,EACzBU,EAAI,EAEAX,GAAOC,GAAKA,EAAIhD,GAAO+C,GAAOE,GAAKA,EAAIjD,GAAOzD,EAAM4E,OAAO7D,EAAGU,KAAKC,OAAO+E,EAAID,GAAOnB,MACvF8B,EAAI,GAINQ,GAAQR,EAAIM,EAAQC,EAGtB,IAAK3G,EAAI,EAAGA,EAAIsE,EAAUtE,GAAK,EAC7BuG,GAASK,EAAO,IAEnB,CAED,OAAOL,EAAMC,UAAU,EAAGD,EAAMlG,OAAO,EAC7C,EAEIpB,EAAM4H,kBAAoB,SAASC,EAASxC,GAC1CA,EAAWA,GAAY,EAEvB,IADA,IAAIjE,EAASpB,EAAM6E,iBACVvE,EAAM,EAAGA,EAAMc,EAAQd,IAC9B,IAAK,IAAIC,EAAM,EAAGA,EAAMa,EAAQb,IAC9BsH,EAAQC,UAAY9H,EAAM4E,OAAOtE,EAAKC,GAAO,QAAU,QACvDsH,EAAQE,SAASzH,EAAM+E,EAAU9E,EAAM8E,EAAUA,EAAUA,EAGhE,EAEMrF,CACX,EAiBEV,EAAO0I,eAXP1I,EAAO2I,mBAAqB,CAC1BC,QAAY,SAASrB,GAEnB,IADA,IAAIsB,EAAQ,GACHtJ,EAAI,EAAGA,EAAIgI,EAAEzF,OAAQvC,GAAK,EAAG,CACpC,IAAImC,EAAI6F,EAAEuB,WAAWvJ,GACrBsJ,EAAMxD,KAAS,IAAJ3D,EACZ,CACD,OAAOmH,CACR,IAGuD,QAW1D7I,EAAO+I,oBAAsB,SAASC,EAAaC,GAIjD,IAAIC,EAAa,WAWf,IATA,IAAIC,EAAMC,EAAwBJ,GAC9BK,EAAO,WACT,IAAIC,EAAIH,EAAIE,OACZ,IAAU,GAANC,EAAS,KAAM,MACnB,OAAOA,CACf,EAEUC,EAAQ,EACRL,EAAa,CAAA,IACJ,CACX,IAAIM,EAAKL,EAAIE,OACb,IAAW,GAAPG,EAAU,MACd,IAAIC,EAAKJ,IAILK,EAHKL,KAGM,EAFNA,IAGTH,EAFQS,OAAOC,aAAeJ,GAAM,EAAKC,IAEzBC,EAChBH,GAAS,CACV,CACD,GAAIA,GAASN,EACX,MAAMM,EAAQ,OAASN,EAGzB,OAAOC,CACb,CA3BqB,GA6BbW,EAAc,IAAIf,WAAW,GAEjC,OAAO,SAASvB,GAEd,IADA,IAAIsB,EAAQ,GACHtJ,EAAI,EAAGA,EAAIgI,EAAEzF,OAAQvC,GAAK,EAAG,CACpC,IAAImC,EAAI6F,EAAEuB,WAAWvJ,GACrB,GAAImC,EAAI,IACNmH,EAAMxD,KAAK3D,OACN,CACL,IAAI4H,EAAIJ,EAAW3B,EAAEE,OAAOlI,IACZ,iBAAL+J,GACC,IAAJA,IAAaA,EAEjBT,EAAMxD,KAAKiE,IAGXT,EAAMxD,KAAKiE,IAAM,GACjBT,EAAMxD,KAAS,IAAJiE,IAGbT,EAAMxD,KAAKwE,EAEd,CACF,CACD,OAAOhB,CACb,CACA,EAME,IAuCMiB,EA0CAC,EACAC,EAGAtJ,EAEAuJ,EAvFFC,EACe,EADfA,EAEe,EAFfA,EAGe,EAHfA,EAIe,EAOf7J,EAAyB,CAC3BT,EAAI,EACJC,EAAI,EACJC,EAAI,EACJC,EAAI,GAOFoK,EACW,EADXA,EAEW,EAFXA,EAGW,EAHXA,EAIW,EAJXA,EAKW,EALXA,EAMW,EANXA,EAOW,EAPXA,EAQW,EAOXvI,GAEEkI,EAAyB,CAC3B,GACA,CAAC,EAAG,IACJ,CAAC,EAAG,IACJ,CAAC,EAAG,IACJ,CAAC,EAAG,IACJ,CAAC,EAAG,IACJ,CAAC,EAAG,GAAI,IACR,CAAC,EAAG,GAAI,IACR,CAAC,EAAG,GAAI,IACR,CAAC,EAAG,GAAI,IACR,CAAC,EAAG,GAAI,IACR,CAAC,EAAG,GAAI,IACR,CAAC,EAAG,GAAI,IACR,CAAC,EAAG,GAAI,GAAI,IACZ,CAAC,EAAG,GAAI,GAAI,IACZ,CAAC,EAAG,GAAI,GAAI,IACZ,CAAC,EAAG,GAAI,GAAI,IACZ,CAAC,EAAG,GAAI,GAAI,IACZ,CAAC,EAAG,GAAI,GAAI,IACZ,CAAC,EAAG,GAAI,GAAI,IACZ,CAAC,EAAG,GAAI,GAAI,GAAI,IAChB,CAAC,EAAG,GAAI,GAAI,GAAI,IAChB,CAAC,EAAG,GAAI,GAAI,GAAI,KAChB,CAAC,EAAG,GAAI,GAAI,GAAI,KAChB,CAAC,EAAG,GAAI,GAAI,GAAI,KAChB,CAAC,EAAG,GAAI,GAAI,GAAI,KAChB,CAAC,EAAG,GAAI,GAAI,GAAI,KAChB,CAAC,EAAG,GAAI,GAAI,GAAI,GAAI,KACpB,CAAC,EAAG,GAAI,GAAI,GAAI,IAAK,KACrB,CAAC,EAAG,GAAI,GAAI,GAAI,IAAK,KACrB,CAAC,EAAG,GAAI,GAAI,GAAI,IAAK,KACrB,CAAC,EAAG,GAAI,GAAI,GAAI,IAAK,KACrB,CAAC,EAAG,GAAI,GAAI,GAAI,IAAK,KACrB,CAAC,EAAG,GAAI,GAAI,GAAI,IAAK,KACrB,CAAC,EAAG,GAAI,GAAI,GAAI,IAAK,IAAK,KAC1B,CAAC,EAAG,GAAI,GAAI,GAAI,IAAK,IAAK,KAC1B,CAAC,EAAG,GAAI,GAAI,GAAI,IAAK,IAAK,KAC1B,CAAC,EAAG,GAAI,GAAI,GAAI,IAAK,IAAK,KAC1B,CAAC,EAAG,GAAI,GAAI,GAAI,IAAK,IAAK,KAC1B,CAAC,EAAG,GAAI,GAAI,GAAI,IAAK,IAAK,MAExBC,EAAM,KACNC,EAAM,KAKNC,EAAc,SAAS5H,GAEzB,IADA,IAAI+H,EAAQ,EACG,GAAR/H,GACL+H,GAAS,EACT/H,KAAU,EAEZ,OAAO+H,CACb,GATQ1J,EAAQ,CAAA,GAWN4B,eAAiB,SAASD,GAE9B,IADA,IAAIgI,EAAIhI,GAAQ,GACT4H,EAAYI,GAAKJ,EAAYF,IAAQ,GAC1CM,GAAMN,GAAQE,EAAYI,GAAKJ,EAAYF,GAE7C,OAlBa,OAkBH1H,GAAQ,GAAMgI,EAC9B,EAEI3J,EAAMuB,iBAAmB,SAASI,GAEhC,IADA,IAAIgI,EAAIhI,GAAQ,GACT4H,EAAYI,GAAKJ,EAAYD,IAAQ,GAC1CK,GAAML,GAAQC,EAAYI,GAAKJ,EAAYD,GAE7C,OAAQ3H,GAAQ,GAAMgI,CAC5B,EAEI3J,EAAMmB,mBAAqB,SAAS5B,GAClC,OAAO6J,EAAuB7J,EAAa,EACjD,EAEIS,EAAMiC,gBAAkB,SAAS9B,GAE/B,OAAQA,GAER,KAAKsJ,EACH,OAAO,SAAS5K,EAAGwC,GAAK,OAAQxC,EAAIwC,GAAK,GAAK,GAChD,KAAKoI,EACH,OAAO,SAAS5K,EAAGwC,GAAK,OAAOxC,EAAI,GAAK,GAC1C,KAAK4K,EACH,OAAO,SAAS5K,EAAGwC,GAAK,OAAOA,EAAI,GAAK,GAC1C,KAAKoI,EACH,OAAO,SAAS5K,EAAGwC,GAAK,OAAQxC,EAAIwC,GAAK,GAAK,GAChD,KAAKoI,EACH,OAAO,SAAS5K,EAAGwC,GAAK,OAAQI,KAAKC,MAAM7C,EAAI,GAAK4C,KAAKC,MAAML,EAAI,IAAO,GAAK,GACjF,KAAKoI,EACH,OAAO,SAAS5K,EAAGwC,GAAK,OAAQxC,EAAIwC,EAAK,EAAKxC,EAAIwC,EAAK,GAAK,CAAE,EAChE,KAAKoI,EACH,OAAO,SAAS5K,EAAGwC,GAAK,OAAUxC,EAAIwC,EAAK,EAAKxC,EAAIwC,EAAK,GAAK,GAAK,CAAE,EACvE,KAAKoI,EACH,OAAO,SAAS5K,EAAGwC,GAAK,OAAUxC,EAAIwC,EAAK,GAAKxC,EAAIwC,GAAK,GAAK,GAAK,CAAE,EAEvE,QACE,KAAM,mBAAqBlB,EAEnC,EAEIH,EAAM4D,0BAA4B,SAASgG,GAEzC,IADA,IAAIC,EAAI/F,EAAa,CAAC,GAAI,GACjBjF,EAAI,EAAGA,EAAI+K,EAAoB/K,GAAK,EAC3CgL,EAAIA,EAAEC,SAAShG,EAAa,CAAC,EAAGiG,EAAOC,KAAKnL,IAAK,IAEnD,OAAOgL,CACb,EAEI7J,EAAM4C,gBAAkB,SAASyB,EAAM4F,GAErC,GAAI,GAAKA,GAAQA,EAAO,GAItB,OAAO5F,GACP,KAAKmF,EAAwB,OAAO,GACpC,KAAKA,EAAwB,OAAO,EACpC,KAAKA,EACL,KAAKA,EAAwB,OAAO,EACpC,QACE,KAAM,QAAUnF,OAGb,GAAI4F,EAAO,GAIhB,OAAO5F,GACP,KAAKmF,EAAwB,OAAO,GACpC,KAAKA,EAAwB,OAAO,GACpC,KAAKA,EAAwB,OAAO,GACpC,KAAKA,EAAwB,OAAO,GACpC,QACE,KAAM,QAAUnF,MAGb,MAAI4F,EAAO,IAchB,KAAM,QAAUA,EAVhB,OAAO5F,GACP,KAAKmF,EAAwB,OAAO,GACpC,KAAKA,EAAwB,OAAO,GACpC,KAAKA,EAAwB,OAAO,GACpC,KAAKA,EAAwB,OAAO,GACpC,QACE,KAAM,QAAUnF,EAKnB,CACP,EAEIrE,EAAMkF,aAAe,SAAS5F,GAQ5B,IANA,IAAIc,EAAcd,EAAOuF,iBAErBI,EAAY,EAIP3E,EAAM,EAAGA,EAAMF,EAAaE,GAAO,EAC1C,IAAK,IAAIC,EAAM,EAAGA,EAAMH,EAAaG,GAAO,EAAG,CAK7C,IAHA,IAAI2J,EAAY,EACZhI,EAAO5C,EAAOsF,OAAOtE,EAAKC,GAErBQ,GAAK,EAAGA,GAAK,EAAGA,GAAK,EAE5B,KAAIT,EAAMS,EAAI,GAAKX,GAAeE,EAAMS,GAIxC,IAAK,IAAIC,GAAK,EAAGA,GAAK,EAAGA,GAAK,EAExBT,EAAMS,EAAI,GAAKZ,GAAeG,EAAMS,GAI/B,GAALD,GAAe,GAALC,GAIVkB,GAAQ5C,EAAOsF,OAAOtE,EAAMS,EAAGR,EAAMS,KACvCkJ,GAAa,GAKfA,EAAY,IACdjF,GAAc,EAAIiF,EAAY,EAEjC,CAKH,IAAS5J,EAAM,EAAGA,EAAMF,EAAc,EAAGE,GAAO,EAC9C,IAASC,EAAM,EAAGA,EAAMH,EAAc,EAAGG,GAAO,EAAG,CACjD,IAAIsI,EAAQ,EACRvJ,EAAOsF,OAAOtE,EAAKC,KAAOsI,GAAS,GACnCvJ,EAAOsF,OAAOtE,EAAM,EAAGC,KAAOsI,GAAS,GACvCvJ,EAAOsF,OAAOtE,EAAKC,EAAM,KAAKsI,GAAS,GACvCvJ,EAAOsF,OAAOtE,EAAM,EAAGC,EAAM,KAAKsI,GAAS,GAClC,GAATA,GAAuB,GAATA,IAChB5D,GAAa,EAEhB,CAKH,IAAS3E,EAAM,EAAGA,EAAMF,EAAaE,GAAO,EAC1C,IAASC,EAAM,EAAGA,EAAMH,EAAc,EAAGG,GAAO,EAC1CjB,EAAOsF,OAAOtE,EAAKC,KACfjB,EAAOsF,OAAOtE,EAAKC,EAAM,IACzBjB,EAAOsF,OAAOtE,EAAKC,EAAM,IACzBjB,EAAOsF,OAAOtE,EAAKC,EAAM,IACzBjB,EAAOsF,OAAOtE,EAAKC,EAAM,KACzBjB,EAAOsF,OAAOtE,EAAKC,EAAM,IACzBjB,EAAOsF,OAAOtE,EAAKC,EAAM,KAC/B0E,GAAa,IAKnB,IAAS1E,EAAM,EAAGA,EAAMH,EAAaG,GAAO,EAC1C,IAASD,EAAM,EAAGA,EAAMF,EAAc,EAAGE,GAAO,EAC1ChB,EAAOsF,OAAOtE,EAAKC,KACfjB,EAAOsF,OAAOtE,EAAM,EAAGC,IACvBjB,EAAOsF,OAAOtE,EAAM,EAAGC,IACvBjB,EAAOsF,OAAOtE,EAAM,EAAGC,IACvBjB,EAAOsF,OAAOtE,EAAM,EAAGC,KACvBjB,EAAOsF,OAAOtE,EAAM,EAAGC,IACvBjB,EAAOsF,OAAOtE,EAAM,EAAGC,KAC7B0E,GAAa,IAOnB,IAAIkF,EAAY,EAEhB,IAAS5J,EAAM,EAAGA,EAAMH,EAAaG,GAAO,EAC1C,IAASD,EAAM,EAAGA,EAAMF,EAAaE,GAAO,EACtChB,EAAOsF,OAAOtE,EAAKC,KACrB4J,GAAa,GAQnB,OAFAlF,GADYxD,KAAK2I,IAAI,IAAMD,EAAY/J,EAAcA,EAAc,IAAM,EACpD,EAG3B,EAEWJ,GAOL+J,EAAS,WAMX,IAJA,IAAIM,EAAY,IAAI5L,MAAM,KACtB6L,EAAY,IAAI7L,MAAM,KAGjBI,EAAI,EAAGA,EAAI,EAAGA,GAAK,EAC1BwL,EAAUxL,GAAK,GAAKA,EAEtB,IAASA,EAAI,EAAGA,EAAI,IAAKA,GAAK,EAC5BwL,EAAUxL,GAAKwL,EAAUxL,EAAI,GACzBwL,EAAUxL,EAAI,GACdwL,EAAUxL,EAAI,GACdwL,EAAUxL,EAAI,GAEpB,IAASA,EAAI,EAAGA,EAAI,IAAKA,GAAK,EAC5ByL,EAAUD,EAAUxL,IAAOA,EAG7B,IAAImB,EAAQ,CAEZA,KAAa,SAASuK,GAEpB,GAAIA,EAAI,EACN,KAAM,QAAUA,EAAI,IAGtB,OAAOD,EAAUC,EACvB,EAEIvK,KAAa,SAASuK,GAEpB,KAAOA,EAAI,GACTA,GAAK,IAGP,KAAOA,GAAK,KACVA,GAAK,IAGP,OAAOF,EAAUE,EACvB,GAEI,OAAOvK,CACX,CA5Ce,GAkDb,SAAS8D,EAAa0G,EAAKC,GAEzB,QAAyB,IAAdD,EAAIpJ,OACb,MAAMoJ,EAAIpJ,OAAS,IAAMqJ,EAG3B,IAAIC,EAAO,WAET,IADA,IAAIzH,EAAS,EACNA,EAASuH,EAAIpJ,QAAyB,GAAfoJ,EAAIvH,IAChCA,GAAU,EAGZ,IADA,IAAIyH,EAAO,IAAIjM,MAAM+L,EAAIpJ,OAAS6B,EAASwH,GAClC5L,EAAI,EAAGA,EAAI2L,EAAIpJ,OAAS6B,EAAQpE,GAAK,EAC5C6L,EAAK7L,GAAK2L,EAAI3L,EAAIoE,GAEpB,OAAOyH,CACb,CAVe,GAYP1K,EAAQ,CAEZA,MAAc,SAASkE,GACrB,OAAOwG,EAAKxG,EAClB,EAEIlE,UAAkB,WAChB,OAAO0K,EAAKtJ,MAClB,EAEIpB,SAAiB,SAAS2K,GAIxB,IAFA,IAAIH,EAAM,IAAI/L,MAAMuB,EAAM2C,YAAcgI,EAAEhI,YAAc,GAE/C9D,EAAI,EAAGA,EAAImB,EAAM2C,YAAa9D,GAAK,EAC1C,IAAK,IAAIwC,EAAI,EAAGA,EAAIsJ,EAAEhI,YAAatB,GAAK,EACtCmJ,EAAI3L,EAAIwC,IAAM0I,EAAOC,KAAKD,EAAOa,KAAK5K,EAAMgE,MAAMnF,IAAOkL,EAAOa,KAAKD,EAAE3G,MAAM3C,KAIjF,OAAOyC,EAAa0G,EAAK,EAC/B,EAEIxK,IAAY,SAAS2K,GAEnB,GAAI3K,EAAM2C,YAAcgI,EAAEhI,YAAc,EACtC,OAAO3C,EAMT,IAHA,IAAI6K,EAAQd,EAAOa,KAAK5K,EAAMgE,MAAM,IAAO+F,EAAOa,KAAKD,EAAE3G,MAAM,IAE3DwG,EAAM,IAAI/L,MAAMuB,EAAM2C,aACjB9D,EAAI,EAAGA,EAAImB,EAAM2C,YAAa9D,GAAK,EAC1C2L,EAAI3L,GAAKmB,EAAMgE,MAAMnF,GAGvB,IAASA,EAAI,EAAGA,EAAI8L,EAAEhI,YAAa9D,GAAK,EACtC2L,EAAI3L,IAAMkL,EAAOC,KAAKD,EAAOa,KAAKD,EAAE3G,MAAMnF,IAAOgM,GAInD,OAAO/G,EAAa0G,EAAK,GAAGhJ,IAAImJ,EACtC,GAEI,OAAO3K,CAEX,CAKE,IAAIqC,EAAY,WAEd,IAAIyI,EAAiB,CAQnB,CAAC,EAAG,GAAI,IACR,CAAC,EAAG,GAAI,IACR,CAAC,EAAG,GAAI,IACR,CAAC,EAAG,GAAI,GAGR,CAAC,EAAG,GAAI,IACR,CAAC,EAAG,GAAI,IACR,CAAC,EAAG,GAAI,IACR,CAAC,EAAG,GAAI,IAGR,CAAC,EAAG,GAAI,IACR,CAAC,EAAG,GAAI,IACR,CAAC,EAAG,GAAI,IACR,CAAC,EAAG,GAAI,IAGR,CAAC,EAAG,IAAK,IACT,CAAC,EAAG,GAAI,IACR,CAAC,EAAG,GAAI,IACR,CAAC,EAAG,GAAI,GAGR,CAAC,EAAG,IAAK,KACT,CAAC,EAAG,GAAI,IACR,CAAC,EAAG,GAAI,GAAI,EAAG,GAAI,IACnB,CAAC,EAAG,GAAI,GAAI,EAAG,GAAI,IAGnB,CAAC,EAAG,GAAI,IACR,CAAC,EAAG,GAAI,IACR,CAAC,EAAG,GAAI,IACR,CAAC,EAAG,GAAI,IAGR,CAAC,EAAG,GAAI,IACR,CAAC,EAAG,GAAI,IACR,CAAC,EAAG,GAAI,GAAI,EAAG,GAAI,IACnB,CAAC,EAAG,GAAI,GAAI,EAAG,GAAI,IAGnB,CAAC,EAAG,IAAK,IACT,CAAC,EAAG,GAAI,GAAI,EAAG,GAAI,IACnB,CAAC,EAAG,GAAI,GAAI,EAAG,GAAI,IACnB,CAAC,EAAG,GAAI,GAAI,EAAG,GAAI,IAGnB,CAAC,EAAG,IAAK,KACT,CAAC,EAAG,GAAI,GAAI,EAAG,GAAI,IACnB,CAAC,EAAG,GAAI,GAAI,EAAG,GAAI,IACnB,CAAC,EAAG,GAAI,GAAI,EAAG,GAAI,IAGnB,CAAC,EAAG,GAAI,GAAI,EAAG,GAAI,IACnB,CAAC,EAAG,GAAI,GAAI,EAAG,GAAI,IACnB,CAAC,EAAG,GAAI,GAAI,EAAG,GAAI,IACnB,CAAC,EAAG,GAAI,GAAI,EAAG,GAAI,IAGnB,CAAC,EAAG,IAAK,IACT,CAAC,EAAG,GAAI,GAAI,EAAG,GAAI,IACnB,CAAC,EAAG,GAAI,GAAI,EAAG,GAAI,IACnB,CAAC,EAAG,GAAI,GAAI,EAAG,GAAI,IAGnB,CAAC,EAAG,IAAK,GAAI,EAAG,IAAK,IACrB,CAAC,EAAG,GAAI,GAAI,EAAG,GAAI,IACnB,CAAC,EAAG,GAAI,GAAI,EAAG,GAAI,IACnB,CAAC,EAAG,GAAI,GAAI,EAAG,GAAI,IAGnB,CAAC,EAAG,IAAK,KACT,CAAC,EAAG,GAAI,GAAI,EAAG,GAAI,IACnB,CAAC,EAAG,GAAI,GAAI,EAAG,GAAI,IACnB,CAAC,GAAI,GAAI,GAAI,EAAG,GAAI,IAGpB,CAAC,EAAG,IAAK,IAAK,EAAG,IAAK,KACtB,CAAC,EAAG,GAAI,GAAI,EAAG,GAAI,IACnB,CAAC,GAAI,GAAI,GAAI,EAAG,GAAI,IACpB,CAAC,GAAI,GAAI,GAAI,EAAG,GAAI,IAGpB,CAAC,EAAG,IAAK,GAAI,EAAG,IAAK,IACrB,CAAC,EAAG,GAAI,GAAI,EAAG,GAAI,IACnB,CAAC,EAAG,GAAI,GAAI,EAAG,GAAI,IACnB,CAAC,GAAI,GAAI,GAAI,EAAG,GAAI,IAGpB,CAAC,EAAG,IAAK,GAAI,EAAG,IAAK,IACrB,CAAC,EAAG,GAAI,GAAI,EAAG,GAAI,IACnB,CAAC,GAAI,GAAI,GAAI,EAAG,GAAI,IACpB,CAAC,EAAG,GAAI,GAAI,GAAI,GAAI,IAGpB,CAAC,EAAG,IAAK,IAAK,EAAG,IAAK,KACtB,CAAC,GAAI,GAAI,GAAI,EAAG,GAAI,IACpB,CAAC,EAAG,GAAI,GAAI,GAAI,GAAI,IACpB,CAAC,EAAG,GAAI,GAAI,GAAI,GAAI,IAGpB,CAAC,EAAG,IAAK,IAAK,EAAG,IAAK,KACtB,CAAC,EAAG,GAAI,GAAI,EAAG,GAAI,IACnB,CAAC,GAAI,GAAI,GAAI,EAAG,GAAI,IACpB,CAAC,EAAG,GAAI,GAAI,GAAI,GAAI,IAGpB,CAAC,EAAG,IAAK,IAAK,EAAG,IAAK,KACtB,CAAC,EAAG,GAAI,GAAI,GAAI,GAAI,IACpB,CAAC,GAAI,GAAI,GAAI,EAAG,GAAI,IACpB,CAAC,EAAG,GAAI,GAAI,GAAI,GAAI,IAGpB,CAAC,EAAG,IAAK,IAAK,EAAG,IAAK,KACtB,CAAC,EAAG,GAAI,GAAI,GAAI,GAAI,IACpB,CAAC,GAAI,GAAI,GAAI,EAAG,GAAI,IACpB,CAAC,GAAI,GAAI,GAAI,GAAI,GAAI,IAGrB,CAAC,EAAG,IAAK,IAAK,EAAG,IAAK,KACtB,CAAC,GAAI,GAAI,IACT,CAAC,GAAI,GAAI,GAAI,EAAG,GAAI,IACpB,CAAC,GAAI,GAAI,GAAI,EAAG,GAAI,IAGpB,CAAC,EAAG,IAAK,IAAK,EAAG,IAAK,KACtB,CAAC,GAAI,GAAI,IACT,CAAC,EAAG,GAAI,GAAI,GAAI,GAAI,IACpB,CAAC,GAAI,GAAI,IAGT,CAAC,EAAG,IAAK,IAAK,EAAG,IAAK,KACtB,CAAC,EAAG,GAAI,GAAI,GAAI,GAAI,IACpB,CAAC,GAAI,GAAI,GAAI,GAAI,GAAI,IACrB,CAAC,GAAI,GAAI,GAAI,GAAI,GAAI,IAGrB,CAAC,EAAG,IAAK,IAAK,EAAG,IAAK,KACtB,CAAC,EAAG,GAAI,GAAI,GAAI,GAAI,IACpB,CAAC,GAAI,GAAI,GAAI,GAAI,GAAI,IACrB,CAAC,GAAI,GAAI,GAAI,EAAG,GAAI,IAGpB,CAAC,EAAG,IAAK,IAAK,EAAG,IAAK,KACtB,CAAC,EAAG,GAAI,GAAI,GAAI,GAAI,IACpB,CAAC,EAAG,GAAI,GAAI,GAAI,GAAI,IACpB,CAAC,GAAI,GAAI,GAAI,GAAI,GAAI,IAGrB,CAAC,GAAI,IAAK,IAAK,EAAG,IAAK,KACvB,CAAC,GAAI,GAAI,GAAI,EAAG,GAAI,IACpB,CAAC,GAAI,GAAI,GAAI,EAAG,GAAI,IACpB,CAAC,GAAI,GAAI,GAAI,EAAG,GAAI,IAGpB,CAAC,EAAG,IAAK,IAAK,EAAG,IAAK,KACtB,CAAC,GAAI,GAAI,GAAI,EAAG,GAAI,IACpB,CAAC,EAAG,GAAI,GAAI,GAAI,GAAI,IACpB,CAAC,GAAI,GAAI,GAAI,GAAI,GAAI,IAGrB,CAAC,EAAG,IAAK,IAAK,GAAI,IAAK,KACvB,CAAC,EAAG,GAAI,GAAI,GAAI,GAAI,IACpB,CAAC,EAAG,GAAI,GAAI,GAAI,GAAI,IACpB,CAAC,GAAI,GAAI,GAAI,GAAI,GAAI,IAGrB,CAAC,EAAG,IAAK,IAAK,EAAG,IAAK,KACtB,CAAC,GAAI,GAAI,GAAI,EAAG,GAAI,IACpB,CAAC,EAAG,GAAI,GAAI,GAAI,GAAI,IACpB,CAAC,GAAI,GAAI,GAAI,GAAI,GAAI,IAGrB,CAAC,EAAG,IAAK,IAAK,GAAI,IAAK,KACvB,CAAC,GAAI,GAAI,GAAI,GAAI,GAAI,IACrB,CAAC,GAAI,GAAI,GAAI,GAAI,GAAI,IACrB,CAAC,GAAI,GAAI,GAAI,GAAI,GAAI,IAGrB,CAAC,GAAI,IAAK,IAAK,EAAG,IAAK,KACvB,CAAC,EAAG,GAAI,GAAI,GAAI,GAAI,IACpB,CAAC,GAAI,GAAI,GAAI,EAAG,GAAI,IACpB,CAAC,GAAI,GAAI,GAAI,GAAI,GAAI,IAGrB,CAAC,GAAI,IAAK,KACV,CAAC,GAAI,GAAI,GAAI,GAAI,GAAI,IACrB,CAAC,GAAI,GAAI,GAAI,GAAI,GAAI,IACrB,CAAC,GAAI,GAAI,GAAI,GAAI,GAAI,IAGrB,CAAC,GAAI,IAAK,IAAK,EAAG,IAAK,KACvB,CAAC,GAAI,GAAI,GAAI,GAAI,GAAI,IACrB,CAAC,GAAI,GAAI,GAAI,GAAI,GAAI,IACrB,CAAC,GAAI,GAAI,GAAI,GAAI,GAAI,IAGrB,CAAC,GAAI,IAAK,IAAK,EAAG,IAAK,KACvB,CAAC,GAAI,GAAI,GAAI,GAAI,GAAI,IACrB,CAAC,GAAI,GAAI,GAAI,EAAG,GAAI,IACpB,CAAC,GAAI,GAAI,GAAI,EAAG,GAAI,IAGpB,CAAC,GAAI,IAAK,IAAK,EAAG,IAAK,KACvB,CAAC,GAAI,GAAI,GAAI,GAAI,GAAI,IACrB,CAAC,GAAI,GAAI,GAAI,GAAI,GAAI,IACrB,CAAC,GAAI,GAAI,GAAI,GAAI,GAAI,IAGrB,CAAC,EAAG,IAAK,IAAK,GAAI,IAAK,KACvB,CAAC,EAAG,GAAI,GAAI,GAAI,GAAI,IACpB,CAAC,GAAI,GAAI,GAAI,GAAI,GAAI,IACrB,CAAC,EAAG,GAAI,GAAI,GAAI,GAAI,IAGpB,CAAC,GAAI,IAAK,IAAK,EAAG,IAAK,KACvB,CAAC,GAAI,GAAI,GAAI,GAAI,GAAI,IACrB,CAAC,GAAI,GAAI,GAAI,GAAI,GAAI,IACrB,CAAC,GAAI,GAAI,GAAI,GAAI,GAAI,IAGrB,CAAC,EAAG,IAAK,IAAK,GAAI,IAAK,KACvB,CAAC,GAAI,GAAI,GAAI,GAAI,GAAI,IACrB,CAAC,GAAI,GAAI,GAAI,GAAI,GAAI,IACrB,CAAC,GAAI,GAAI,GAAI,GAAI,GAAI,IAGrB,CAAC,GAAI,IAAK,IAAK,EAAG,IAAK,KACvB,CAAC,GAAI,GAAI,GAAI,EAAG,GAAI,IACpB,CAAC,GAAI,GAAI,GAAI,GAAI,GAAI,IACrB,CAAC,GAAI,GAAI,GAAI,GAAI,GAAI,IAGrB,CAAC,GAAI,IAAK,IAAK,EAAG,IAAK,KACvB,CAAC,GAAI,GAAI,GAAI,GAAI,GAAI,IACrB,CAAC,GAAI,GAAI,GAAI,GAAI,GAAI,IACrB,CAAC,GAAI,GAAI,GAAI,GAAI,GAAI,KAGnBC,EAAY,SAASvH,EAAYT,GACnC,IAAI/C,EAAQ,CAAA,EAGZ,OAFAA,EAAMwD,WAAaA,EACnBxD,EAAM+C,UAAYA,EACX/C,CACb,EAEQA,EAAQ,CAAA,EA6CZ,OA3BAA,EAAMsC,YAAc,SAAS/C,EAAYC,GAEvC,IAAIwL,EAlBgB,SAASzL,EAAYC,GAEzC,OAAOA,GACP,KAAKG,EAAuBT,EAC1B,OAAO4L,EAAkC,GAAlBvL,EAAa,GAAS,GAC/C,KAAKI,EAAuBR,EAC1B,OAAO2L,EAAkC,GAAlBvL,EAAa,GAAS,GAC/C,KAAKI,EAAuBP,EAC1B,OAAO0L,EAAkC,GAAlBvL,EAAa,GAAS,GAC/C,KAAKI,EAAuBN,EAC1B,OAAOyL,EAAkC,GAAlBvL,EAAa,GAAS,GAC/C,QACE,OAER,CAIoB0L,CAAgB1L,EAAYC,GAE1C,QAAsB,IAAXwL,EACT,KAAM,6BAA+BzL,EACjC,yBAA2BC,EAOjC,IAJA,IAAI4B,EAAS4J,EAAQ5J,OAAS,EAE1B8J,EAAO,GAEFrM,EAAI,EAAGA,EAAIuC,EAAQvC,GAAK,EAM/B,IAJA,IAAIgK,EAAQmC,EAAY,EAAJnM,EAAQ,GACxB2E,EAAawH,EAAY,EAAJnM,EAAQ,GAC7BkE,EAAYiI,EAAY,EAAJnM,EAAQ,GAEvBwC,EAAI,EAAGA,EAAIwH,EAAOxH,GAAK,EAC9B6J,EAAKvG,KAAKoG,EAAUvH,EAAYT,IAIpC,OAAOmI,CACb,EAEWlL,CACX,CA/SkB,GAqTZwC,EAAc,WAEhB,IAAI2I,EAAU,GACVC,EAAU,EAEVpL,EAAQ,CAEZA,UAAkB,WAChB,OAAOmL,CACb,EAEInL,MAAc,SAASkE,GACrB,IAAImH,EAAW5J,KAAKC,MAAMwC,EAAQ,GAClC,OAA0D,IAAhDiH,EAAQE,KAAe,EAAInH,EAAQ,EAAO,EAC1D,EAEIlE,IAAY,SAASwK,EAAKpJ,GACxB,IAAK,IAAIvC,EAAI,EAAGA,EAAIuC,EAAQvC,GAAK,EAC/BmB,EAAMgD,OAA8C,IAAnCwH,IAASpJ,EAASvC,EAAI,EAAO,GAEtD,EAEImB,gBAAwB,WACtB,OAAOoL,CACb,EAEIpL,OAAe,SAASsL,GAEtB,IAAID,EAAW5J,KAAKC,MAAM0J,EAAU,GAChCD,EAAQ/J,QAAUiK,GACpBF,EAAQxG,KAAK,GAGX2G,IACFH,EAAQE,IAAc,MAAUD,EAAU,GAG5CA,GAAW,CACjB,GAEI,OAAOpL,CACX,EAMMuE,EAAW,SAAS5C,GAEtB,IAAI4J,EAAQ/B,EACRgC,EAAQ7J,EAER3B,EAAQ,CAEZA,QAAgB,WACd,OAAOuL,CACb,EAEIvL,UAAkB,SAASuC,GACzB,OAAOiJ,EAAMpK,MACnB,EAEIpB,MAAc,SAASuC,GAMrB,IAJA,IAAIZ,EAAO6J,EAEP3M,EAAI,EAEDA,EAAI,EAAI8C,EAAKP,QAClBmB,EAAOE,IAAIgJ,EAAS9J,EAAK4F,UAAU1I,EAAGA,EAAI,IAAM,IAChDA,GAAK,EAGHA,EAAI8C,EAAKP,SACPO,EAAKP,OAASvC,GAAK,EACrB0D,EAAOE,IAAIgJ,EAAS9J,EAAK4F,UAAU1I,EAAGA,EAAI,IAAM,GACvC8C,EAAKP,OAASvC,GAAK,GAC5B0D,EAAOE,IAAIgJ,EAAS9J,EAAK4F,UAAU1I,EAAGA,EAAI,IAAM,GAG1D,GAEQ4M,EAAW,SAAS5E,GAEtB,IADA,IAAI2D,EAAM,EACD3L,EAAI,EAAGA,EAAIgI,EAAEzF,OAAQvC,GAAK,EACjC2L,EAAY,GAANA,EAAWkB,EAAU7E,EAAEE,OAAOlI,IAEtC,OAAO2L,CACb,EAEQkB,EAAY,SAAS1K,GACvB,GAAI,KAAOA,GAAKA,GAAK,IACnB,OAAOA,EAAEoH,WAAW,GAAK,IAAIA,WAAW,GAE1C,KAAM,iBAAmBpH,CAC/B,EAEI,OAAOhB,CACX,EAMMwE,EAAa,SAAS7C,GAExB,IAAI4J,EAAQ/B,EACRgC,EAAQ7J,EAER3B,EAAQ,CAEZA,QAAgB,WACd,OAAOuL,CACb,EAEIvL,UAAkB,SAASuC,GACzB,OAAOiJ,EAAMpK,MACnB,EAEIpB,MAAc,SAASuC,GAMrB,IAJA,IAAIsE,EAAI2E,EAEJ3M,EAAI,EAEDA,EAAI,EAAIgI,EAAEzF,QACfmB,EAAOE,IACmB,GAAxBkJ,EAAQ9E,EAAEE,OAAOlI,IACjB8M,EAAQ9E,EAAEE,OAAOlI,EAAI,IAAM,IAC7BA,GAAK,EAGHA,EAAIgI,EAAEzF,QACRmB,EAAOE,IAAIkJ,EAAQ9E,EAAEE,OAAOlI,IAAM,EAE1C,GAEQ8M,EAAU,SAAS3K,GAErB,GAAI,KAAOA,GAAKA,GAAK,IACnB,OAAOA,EAAEoH,WAAW,GAAK,IAAIA,WAAW,GACnC,GAAI,KAAOpH,GAAKA,GAAK,IAC1B,OAAOA,EAAEoH,WAAW,GAAK,IAAIA,WAAW,GAAK,GAE7C,OAAQpH,GACR,IAAK,IAAM,OAAO,GAClB,IAAK,IAAM,OAAO,GAClB,IAAK,IAAM,OAAO,GAClB,IAAK,IAAM,OAAO,GAClB,IAAK,IAAM,OAAO,GAClB,IAAK,IAAM,OAAO,GAClB,IAAK,IAAM,OAAO,GAClB,IAAK,IAAM,OAAO,GAClB,IAAK,IAAM,OAAO,GAClB,QACE,KAAM,iBAAmBA,EAGnC,EAEI,OAAOhB,CACX,EAMMyE,EAAa,SAAS9C,GAExB,IAAI4J,EAAQ/B,EAERoC,EAAStM,EAAO0I,cAAcrG,GAE9B3B,EAAQ,CAEZA,QAAgB,WACd,OAAOuL,CACb,EAEIvL,UAAkB,SAASuC,GACzB,OAAOqJ,EAAOxK,MACpB,EAEIpB,MAAc,SAASuC,GACrB,IAAK,IAAI1D,EAAI,EAAGA,EAAI+M,EAAOxK,OAAQvC,GAAK,EACtC0D,EAAOE,IAAImJ,EAAO/M,GAAI,EAE9B,GAEI,OAAOmB,CACX,EAMM0E,EAAU,SAAS/C,GAErB,IAAI4J,EAAQ/B,EAGRxB,EAAgB1I,EAAO2I,mBAAyB,KACpD,IAAKD,EACH,KAAM,uBAEP,SAAShH,EAAG6K,GAEX,IAAI3L,EAAO8H,EAIX,KAHA,GAAmB,GAAf9H,EAAKkB,QAGC,QAHiBlB,EAAK,IAAM,EAAKA,EAAK,IAC9C,KAAM,qBAEd,CANK,GAQD,IAAI0L,EAAS5D,EAAcrG,GAEvB3B,EAAQ,CAEZA,QAAgB,WACd,OAAOuL,CACb,EAEIvL,UAAkB,SAASuC,GACzB,SAAUqJ,EAAOxK,OAAS,EAChC,EAEIpB,MAAc,SAASuC,GAMrB,IAJA,IAAIZ,EAAOiK,EAEP/M,EAAI,EAEDA,EAAI,EAAI8C,EAAKP,QAAQ,CAE1B,IAAIJ,GAAO,IAAOW,EAAK9C,KAAO,EAAM,IAAO8C,EAAK9C,EAAI,GAEpD,GAAI,OAAUmC,GAAKA,GAAK,MACtBA,GAAK,UACA,MAAI,OAAUA,GAAKA,GAAK,OAG7B,KAAM,oBAAsBnC,EAAI,GAAK,IAAMmC,EAF3CA,GAAK,KAGN,CAEDA,EAA0B,KAAnBA,IAAM,EAAK,MAAoB,IAAJA,GAElCuB,EAAOE,IAAIzB,EAAG,IAEdnC,GAAK,CACN,CAED,GAAIA,EAAI8C,EAAKP,OACX,KAAM,oBAAsBvC,EAAI,EAExC,GAEI,OAAOmB,CACX,EAUM8L,EAAwB,WAE1B,IAAIF,EAAS,GAET5L,EAAQ,CAEZA,UAAkB,SAAS4I,GACzBgD,EAAOjH,KAAS,IAAJiE,EAClB,EAEI5I,WAAmB,SAASnB,GAC1BmB,EAAM+L,UAAUlN,GAChBmB,EAAM+L,UAAUlN,IAAM,EAC5B,EAEImB,WAAmB,SAAS4I,EAAGoD,EAAKC,GAClCD,EAAMA,GAAO,EACbC,EAAMA,GAAOrD,EAAExH,OACf,IAAK,IAAIvC,EAAI,EAAGA,EAAIoN,EAAKpN,GAAK,EAC5BmB,EAAM+L,UAAUnD,EAAE/J,EAAImN,GAE9B,EAEIhM,YAAoB,SAAS6G,GAC3B,IAAK,IAAIhI,EAAI,EAAGA,EAAIgI,EAAEzF,OAAQvC,GAAK,EACjCmB,EAAM+L,UAAUlF,EAAEuB,WAAWvJ,GAErC,EAEImB,YAAoB,WAClB,OAAO4L,CACb,EAEI5L,SAAiB,WACf,IAAI6G,EAAI,GACRA,GAAK,IACL,IAAK,IAAIhI,EAAI,EAAGA,EAAI+M,EAAOxK,OAAQvC,GAAK,EAClCA,EAAI,IACNgI,GAAK,KAEPA,GAAK+E,EAAO/M,GAGd,OADAgI,GAAK,GAEX,GAEI,OAAO7G,CACX,EA4EM0I,EAA0B,SAASwD,GAErC,IAAIC,EAAOD,EACPE,EAAO,EACPjB,EAAU,EACVkB,EAAU,EAEVrM,EAAQ,CAEZA,KAAa,WAEX,KAAOqM,EAAU,GAAG,CAElB,GAAID,GAAQD,EAAK/K,OAAQ,CACvB,GAAe,GAAXiL,EACF,OAAQ,EAEV,KAAM,2BAA6BA,CACpC,CAED,IAAIrL,EAAImL,EAAKpF,OAAOqF,GAGpB,GAFAA,GAAQ,EAEC,KAALpL,EAEF,OADAqL,EAAU,GACF,EACCrL,EAAEsL,MAAM,UAKnBnB,EAAWA,GAAW,EAAKoB,EAAOvL,EAAEoH,WAAW,IAC/CiE,GAAW,EACZ,CAED,IAAI9B,EAAKY,IAAakB,EAAU,EAAO,IAEvC,OADAA,GAAW,EACJ9B,CACb,GAEQgC,EAAS,SAASvL,GACpB,GAAI,IAAQA,GAAKA,GAAK,GACpB,OAAOA,EAAI,GACN,GAAI,IAAQA,GAAKA,GAAK,IAC3B,OAAOA,EAAI,GAAO,GACb,GAAI,IAAQA,GAAKA,GAAK,GAC3B,OAAOA,EAAI,GAAO,GACb,GAAS,IAALA,EACT,OAAO,GACF,GAAS,IAALA,EACT,OAAO,GAEP,KAAM,KAAOA,CAErB,EAEI,OAAOhB,CACX,EAwNMuG,EAAgB,SAASiG,EAAOC,EAAQC,GAE1C,IADA,IAAIC,EAnNS,SAASH,EAAOC,GAE7B,IAAIG,EAASJ,EACTK,EAAUJ,EACVjB,EAAQ,IAAI/M,MAAM+N,EAAQC,GAE1BzM,EAAQ,CAEZA,SAAiB,SAASyG,EAAGC,EAAGoG,GAC9BtB,EAAM9E,EAAIkG,EAASnG,GAAKqG,CAC9B,EAEI9M,MAAc,SAAS+M,GAKrBA,EAAIC,YAAY,UAKhBD,EAAIE,WAAWL,GACfG,EAAIE,WAAWJ,GAEfE,EAAIhB,UAAU,KACdgB,EAAIhB,UAAU,GACdgB,EAAIhB,UAAU,GAMdgB,EAAIhB,UAAU,GACdgB,EAAIhB,UAAU,GACdgB,EAAIhB,UAAU,GAGdgB,EAAIhB,UAAU,KACdgB,EAAIhB,UAAU,KACdgB,EAAIhB,UAAU,KAKdgB,EAAIC,YAAY,KAChBD,EAAIE,WAAW,GACfF,EAAIE,WAAW,GACfF,EAAIE,WAAWL,GACfG,EAAIE,WAAWJ,GACfE,EAAIhB,UAAU,GAQd,IACImB,EAASC,EADQ,GAGrBJ,EAAIhB,UAHiB,GAOrB,IAFA,IAAI9I,EAAS,EAENiK,EAAO9L,OAAS6B,EAAS,KAC9B8J,EAAIhB,UAAU,KACdgB,EAAIK,WAAWF,EAAQjK,EAAQ,KAC/BA,GAAU,IAGZ8J,EAAIhB,UAAUmB,EAAO9L,OAAS6B,GAC9B8J,EAAIK,WAAWF,EAAQjK,EAAQiK,EAAO9L,OAAS6B,GAC/C8J,EAAIhB,UAAU,GAIdgB,EAAIC,YAAY,IACtB,GAqCQG,EAAe,SAASE,GAS1B,IAPA,IAAIC,EAAY,GAAKD,EACjBE,EAAkC,GAAvB,GAAKF,GAChBG,EAAYH,EAAiB,EAG7BI,EAAQC,IAEH7O,EAAI,EAAGA,EAAIyO,EAAWzO,GAAK,EAClC4O,EAAME,IAAI1E,OAAOC,aAAarK,IAEhC4O,EAAME,IAAI1E,OAAOC,aAAaoE,IAC9BG,EAAME,IAAI1E,OAAOC,aAAaqE,IAE9B,IAhDIK,EACAC,EACAC,EA8CAC,EAAUjC,IACVkC,GAjDAJ,EAiDyBG,EAhDzBF,EAAa,EACbC,EAAa,EAEL,CAEZ9N,MAAc,SAAS2B,EAAMP,GAE3B,GAAMO,IAASP,GAAW,EACxB,KAAM,cAGR,KAAOyM,EAAazM,GAAU,GAC5BwM,EAAK7B,UAAU,KAAUpK,GAAQkM,EAAcC,IAC/C1M,GAAW,EAAIyM,EACflM,KAAW,EAAIkM,EACfC,EAAa,EACbD,EAAa,EAGfC,GAAcnM,GAAQkM,EACtBA,GAA0BzM,CAClC,EAEMpB,MAAc,WACR6N,EAAa,GACfD,EAAK7B,UAAU+B,EAEzB,IAwBME,EAAOnL,MAAMyK,EAAWE,GAExB,IAAIS,EAAY,EAEZpH,EAAIoC,OAAOC,aAAasC,EAAMyC,IAGlC,IAFAA,GAAa,EAENA,EAAYzC,EAAMpK,QAAQ,CAE/B,IAAIJ,EAAIiI,OAAOC,aAAasC,EAAMyC,IAClCA,GAAa,EAETR,EAAMS,SAASrH,EAAI7F,GAErB6F,GAAQ7F,GAIRgN,EAAOnL,MAAM4K,EAAMU,QAAQtH,GAAI2G,GAE3BC,EAAMxH,OAAS,OAEbwH,EAAMxH,QAAW,GAAKuH,IACxBA,GAAa,GAGfC,EAAME,IAAI9G,EAAI7F,IAGhB6F,EAAI7F,EAEP,CASD,OAPAgN,EAAOnL,MAAM4K,EAAMU,QAAQtH,GAAI2G,GAG/BQ,EAAOnL,MAAM0K,EAASC,GAEtBQ,EAAOI,QAEAL,EAAQM,aACrB,EAEQX,EAAW,WAEb,IAAIY,EAAO,CAAA,EACPC,EAAQ,EAERvO,EAAQ,CAEZA,IAAY,SAASwO,GACnB,GAAIxO,EAAMkO,SAASM,GACjB,KAAM,WAAaA,EAErBF,EAAKE,GAAOD,EACZA,GAAS,CACjB,EAEMvO,KAAa,WACX,OAAOuO,CACf,EAEMvO,QAAgB,SAASwO,GACvB,OAAOF,EAAKE,EACpB,EAEMxO,SAAiB,SAASwO,GACxB,YAA2B,IAAbF,EAAKE,EAC3B,GAEM,OAAOxO,CACb,EAEI,OAAOA,CACX,CAGcyO,CAASjC,EAAOC,GACjB/F,EAAI,EAAGA,EAAI+F,EAAQ/F,GAAK,EAC/B,IAAK,IAAID,EAAI,EAAGA,EAAI+F,EAAO/F,GAAK,EAC9BkG,EAAI+B,SAASjI,EAAGC,EAAGgG,EAASjG,EAAGC,IAInC,IAAIkC,EAAIkD,IACRa,EAAI9J,MAAM+F,GAIV,IAFA,IAAI+F,EAlWyB,WAE7B,IAAIxD,EAAU,EACVkB,EAAU,EACVjB,EAAU,EACVwD,EAAU,GAEV5O,EAAQ,CAAA,EAER6O,EAAe,SAASjG,GAC1BgG,GAAW3F,OAAOC,aAAa4F,EAAW,GAAJlG,GAC5C,EAEQkG,EAAS,SAASvE,GACpB,GAAIA,EAAI,OAED,IAAIA,EAAI,GACb,OAAO,GAAOA,EACT,GAAIA,EAAI,GACb,OAAeA,EAAI,GAAZ,GACF,GAAIA,EAAI,GACb,OAAeA,EAAI,GAAZ,GACF,GAAS,IAALA,EACT,OAAO,GACF,GAAS,IAALA,EACT,OAAO,EACR,CACD,KAAM,KAAOA,CACnB,EAmCI,OAjCAvK,EAAM+L,UAAY,SAASxB,GAMzB,IAJAY,EAAWA,GAAW,EAAU,IAAJZ,EAC5B8B,GAAW,EACXjB,GAAW,EAEJiB,GAAW,GAChBwC,EAAa1D,IAAakB,EAAU,GACpCA,GAAW,CAEnB,EAEIrM,EAAMoO,MAAQ,WAQZ,GANI/B,EAAU,IACZwC,EAAa1D,GAAY,EAAIkB,GAC7BlB,EAAU,EACVkB,EAAU,GAGRjB,EAAU,GAAK,EAGjB,IADA,IAAI2D,EAAS,EAAI3D,EAAU,EAClBvM,EAAI,EAAGA,EAAIkQ,EAAQlQ,GAAK,EAC/B+P,GAAW,GAGrB,EAEI5O,EAAMgP,SAAW,WACf,OAAOJ,CACb,EAEW5O,CACX,CAkSiBiP,GACT9G,EAAQS,EAAEyF,cACLxP,EAAI,EAAGA,EAAIsJ,EAAM/G,OAAQvC,GAAK,EACrC8P,EAAO5C,UAAU5D,EAAMtJ,IAIzB,OAFA8P,EAAOP,QAEA,yBAA2BO,CACtC,EAKE,OAAOrP,CACT,CArrEa,GA0rEXA,EAAO2I,mBAAmB,SAAW,SAASpB,GAgC5C,OA9BA,SAAqBqF,GAEnB,IADA,IAAIgD,EAAO,GACFrQ,EAAE,EAAGA,EAAIqN,EAAI9K,OAAQvC,IAAK,CACjC,IAAIsQ,EAAWjD,EAAI9D,WAAWvJ,GAC1BsQ,EAAW,IAAMD,EAAKvK,KAAKwK,GACtBA,EAAW,KAClBD,EAAKvK,KAAK,IAAQwK,GAAY,EAC1B,IAAmB,GAAXA,GAELA,EAAW,OAAUA,GAAY,MACxCD,EAAKvK,KAAK,IAAQwK,GAAY,GAC1B,IAASA,GAAU,EAAK,GACxB,IAAmB,GAAXA,IAIZtQ,IAIAsQ,EAAW,QAAwB,KAAXA,IAAmB,GAClB,KAApBjD,EAAI9D,WAAWvJ,IACpBqQ,EAAKvK,KAAK,IAAQwK,GAAW,GACzB,IAASA,GAAU,GAAM,GACzB,IAASA,GAAU,EAAK,GACxB,IAAmB,GAAXA,GAEf,CACD,OAAOD,CACR,CACME,CAAYvI,EACvB,EAQMwI,EAAA9Q,QAGKe,yBCrvEX,MAAMgQ,EAAYC,KAA4CA,GAAsB,iBAARA,IAAqB9Q,MAAM+Q,QAAQD,YAE/FE,EAAUC,KAA0BC,GAClD,IAAKA,EAAQvO,OAAQ,OAAOsO,EAC5B,MAAME,EAASD,EAAQlF,QACvB,YAAeoF,IAAXD,GAAyBN,EAASI,IAAYJ,EAASM,IAC3DF,EAAS,IAAKA,GACdI,OAAOC,KAAKH,GAAQI,SAASxB,IAC3B,MAAMyB,EAAcP,EAAOlB,GACrB0B,EAAcN,EAAOpB,GAEvB/P,MAAM+Q,QAAQS,IAAgBxR,MAAM+Q,QAAQU,GAC9CR,EAAOlB,GAAO0B,EACLZ,EAASW,IAAgBX,EAASY,GAC3CR,EAAOlB,GAAOiB,EAAUK,OAAOK,OAAO,GAAIF,GAAcC,GAExDR,EAAOlB,GAAO0B,CACf,IAGIT,EAAUC,KAAWC,IAf+CD,CAgB7E,CCpBA,SAASU,EAAiBC,GACxB,MAAMC,EAAc,IAAKD,GAEzB,IAAKC,EAAYC,aAAeD,EAAYC,WAAWnP,OACrD,KAAM,6CAcR,OAXIkP,EAAYE,SACdF,EAAYE,SAAWC,OAAOH,EAAYE,UAE1CF,EAAYE,SAAW,EAGzBF,EAAYC,WAAaD,EAAYC,WAAW5R,KAAK+R,IAAkD,IAClGA,EACHzN,OAAQwN,OAAOC,EAAUzN,YAGpBqN,CACT,CAEM,SAAUK,EAAgBC,GAC9B,MAAMC,EAAa,IAAKD,GA6CxB,OA3CAC,EAAWC,aAAe,IACrBD,EAAWC,aACdC,mBAAoBC,QAAQH,EAAWC,aAAaC,oBACpDE,UAAWxP,KAAK+E,IAAI,EAAGiK,OAAOI,EAAWC,aAAaG,aAAe,EACrE3L,OAAQmL,OAAOI,EAAWC,aAAaxL,SAGzCuL,EAAWK,YAAc,IACpBL,EAAWK,aAEZL,EAAWK,YAAYb,WACzBQ,EAAWK,YAAYb,SAAWD,EAAiBS,EAAWK,YAAYb,WAGxEQ,EAAWM,uBACbN,EAAWM,qBAAuB,IAC7BN,EAAWM,sBAEZN,EAAWM,qBAAqBd,WAClCQ,EAAWM,qBAAqBd,SAAWD,EAAiBS,EAAWM,qBAAqBd,YAI5FQ,EAAWO,oBACbP,EAAWO,kBAAoB,IAC1BP,EAAWO,mBAEZP,EAAWO,kBAAkBf,WAC/BQ,EAAWO,kBAAkBf,SAAWD,EAAiBS,EAAWO,kBAAkBf,YAItFQ,EAAWQ,oBACbR,EAAWQ,kBAAoB,IAC1BR,EAAWQ,mBAEZR,EAAWQ,kBAAkBhB,WAC/BQ,EAAWQ,kBAAkBhB,SAAWD,EAAiBS,EAAWQ,kBAAkBhB,YAIrFQ,EAAWS,WAAUT,EAAWS,SAAWA,UAEzCT,CACT,CC3CO,MAAMU,EAAkC,CAC7CD,cAAUzB,EACV2B,MAAOlT,EAASA,UAACmT,OACjBjF,WAAOqD,EACPpD,YAAQoD,EACRvK,OAAQ,EACR3D,KAAM,GACN+P,UAAW,CACTnS,WAAYf,EAAW,GACvB6F,UAAMwL,EACNrQ,qBAAsBV,EAAoBA,qBAACM,GAE7C0R,aAAc,CACZC,oBAAoB,EACpBE,UAAW,GACXU,iBAAa9B,EACbvK,OAAQ,GAEV4L,YAAa,CACXjH,KAAM/L,EAAOA,QAACuT,OACdG,MAAO,OACP3L,KAAM,KAUG4L,EAA8C,CACzDrF,MAAO,IACPC,OAAQ,IACRnH,OAAQ,UC5DGwM,EAMX,WAAAC,EAAYC,IAAEA,EAAG/H,KAAEA,EAAIqH,SAAEA,IACvBW,KAAKC,KAAOF,EACZC,KAAKE,MAAQlI,EACbgI,KAAKG,UAAYd,CAClB,CAED,IAAAe,CAAK5L,EAAWC,EAAWT,EAAcuK,GAEvC,IAAI8B,EAEJ,OAHaL,KAAKE,OAIhB,KAAKhU,EAAaA,cAACsT,OACjBa,EAAeL,KAAKM,YACpB,MACF,KAAKpU,EAAAA,cAAcqU,IACnB,QACEF,EAAeL,KAAKQ,SAGxBH,EAAaI,KAAKT,KAAM,CAAExL,IAAGC,IAAGT,OAAMuK,YACvC,CAED,aAAAmC,EAAclM,EAAEA,EAACC,EAAEA,EAACT,KAAEA,EAAIuK,SAAEA,EAAW,EAAC6B,KAAEA,IACxC,MAAMO,EAAKnM,EAAIR,EAAO,EAChB4M,EAAKnM,EAAIT,EAAO,EAEtBoM,IACAJ,KAAKa,UAAUC,aAAa,YAAa,UAAW,IAAMvC,EAAY/O,KAAKuR,MAAMJ,KAAMC,KACxF,CAED,SAAAI,CAAUC,GACR,MAAMjN,KAAEA,EAAIQ,EAAEA,EAACC,EAAEA,GAAMwM,EAEvBjB,KAAKU,cAAc,IACdO,EACHb,KAAM,KACJJ,KAAKa,SAAWb,KAAKG,UAAUe,gBAAgB,6BAA8B,UAC7ElB,KAAKa,SAASC,aAAa,KAAM9J,OAAOxC,EAAIR,EAAO,IACnDgM,KAAKa,SAASC,aAAa,KAAM9J,OAAOvC,EAAIT,EAAO,IACnDgM,KAAKa,SAASC,aAAa,IAAK9J,OAAOhD,EAAO,GAAG,GAGtD,CAED,YAAAmN,CAAaF,GACX,MAAMjN,KAAEA,EAAIQ,EAAEA,EAACC,EAAEA,GAAMwM,EAEvBjB,KAAKU,cAAc,IACdO,EACHb,KAAM,KACJJ,KAAKa,SAAWb,KAAKG,UAAUe,gBAAgB,6BAA8B,QAC7ElB,KAAKa,SAASC,aAAa,IAAK9J,OAAOxC,IACvCwL,KAAKa,SAASC,aAAa,IAAK9J,OAAOvC,IACvCuL,KAAKa,SAASC,aAAa,QAAS9J,OAAOhD,IAC3CgM,KAAKa,SAASC,aAAa,SAAU9J,OAAOhD,GAAM,GAGvD,CAED,QAAAwM,EAAShM,EAAEA,EAACC,EAAEA,EAACT,KAAEA,EAAIuK,SAAEA,IACrByB,KAAKgB,UAAU,CAAExM,IAAGC,IAAGT,OAAMuK,YAC9B,CAED,WAAA+B,EAAY9L,EAAEA,EAACC,EAAEA,EAACT,KAAEA,EAAIuK,SAAEA,IACxByB,KAAKmB,aAAa,CAAE3M,IAAGC,IAAGT,OAAMuK,YACjC,QCvEU6C,EAMX,WAAAtB,EAAYC,IAAEA,EAAG/H,KAAEA,EAAIqH,SAAEA,IACvBW,KAAKC,KAAOF,EACZC,KAAKE,MAAQlI,EACbgI,KAAKG,UAAYd,CAClB,CAED,IAAAe,CAAK5L,EAAWC,EAAWT,EAAcuK,GAEvC,IAAI8B,EAEJ,OAHaL,KAAKE,OAIhB,KAAK/T,EAAgBA,iBAACqT,OACpBa,EAAeL,KAAKM,YACpB,MACF,KAAKnU,EAAgBA,iBAACkV,aACpBhB,EAAeL,KAAKsB,kBACpB,MACF,KAAKnV,EAAAA,iBAAiBoU,IACtB,QACEF,EAAeL,KAAKQ,SAGxBH,EAAaI,KAAKT,KAAM,CAAExL,IAAGC,IAAGT,OAAMuK,YACvC,CAED,aAAAmC,EAAclM,EAAEA,EAACC,EAAEA,EAACT,KAAEA,EAAIuK,SAAEA,EAAW,EAAC6B,KAAEA,IACxC,MAAMO,EAAKnM,EAAIR,EAAO,EAChB4M,EAAKnM,EAAIT,EAAO,EAEtBoM,IACAJ,KAAKa,UAAUC,aAAa,YAAa,UAAW,IAAMvC,EAAY/O,KAAKuR,MAAMJ,KAAMC,KACxF,CAED,SAAAI,CAAUC,GACR,MAAMjN,KAAEA,EAAIQ,EAAEA,EAACC,EAAEA,GAAMwM,EACjBM,EAAUvN,EAAO,EAEvBgM,KAAKU,cAAc,IACdO,EACHb,KAAM,KACJJ,KAAKa,SAAWb,KAAKG,UAAUe,gBAAgB,6BAA8B,QAC7ElB,KAAKa,SAASC,aAAa,YAAa,WACxCd,KAAKa,SAASC,aACZ,IACA,KAAKtM,EAAIR,EAAO,KAAKS,MACdT,EAAO,KAAKA,EAAO,qBAEjBuN,MACFvN,EAAO,EAAIuN,KAAWvN,EAAO,EAAIuN,kBAEzC,GAGN,CAED,YAAAJ,CAAaF,GACX,MAAMjN,KAAEA,EAAIQ,EAAEA,EAACC,EAAEA,GAAMwM,EACjBM,EAAUvN,EAAO,EAEvBgM,KAAKU,cAAc,IACdO,EACHb,KAAM,KACJJ,KAAKa,SAAWb,KAAKG,UAAUe,gBAAgB,6BAA8B,QAC7ElB,KAAKa,SAASC,aAAa,YAAa,WACxCd,KAAKa,SAASC,aACZ,IACA,KAAKtM,KAAKC,MACHT,MACAA,OACCA,EACN,IACA,KAAKQ,EAAI+M,KAAW9M,EAAI8M,OACnBvN,EAAO,EAAIuN,GAChB,MAAKvN,EAAO,EAAIuN,GAChB,MAAa,EAAIA,EAAXvN,GACN,IACH,GAGN,CAED,kBAAAwN,CAAmBP,GACjB,MAAMjN,KAAEA,EAAIQ,EAAEA,EAACC,EAAEA,GAAMwM,EACjBM,EAAUvN,EAAO,EAEvBgM,KAAKU,cAAc,IACdO,EACHb,KAAM,KACJJ,KAAKa,SAAWb,KAAKG,UAAUe,gBAAgB,6BAA8B,QAC7ElB,KAAKa,SAASC,aAAa,YAAa,WACxCd,KAAKa,SAASC,aACZ,IACA,KAAKtM,KAAKC,EAAI,IAAM8M,MACb,EAAIA,EACT,KAAK,IAAMA,KAAW,IAAMA,eAA+B,IAAVA,KAA2B,IAAVA,MAC7D,EAAIA,EACT,KAAK,IAAMA,KAAW,IAAMA,eAA+B,IAAVA,KAA4B,KAAVA,OAC7D,EAAIA,EACV,KAAK,IAAMA,KAAW,IAAMA,eAAgC,KAAVA,KAA4B,KAAVA,OAC9D,EAAIA,EACV,KAAK,IAAMA,KAAW,IAAMA,eAAgC,KAAVA,KAA2B,IAAVA,IACnE,KAAK/M,EAAI,IAAM+M,KAAW9M,EAAI8M,MACzB,EAAIA,EACT,KAAK,IAAMA,KAAW,IAAMA,eAA+B,IAAVA,KAA2B,IAAVA,MAC7D,EAAIA,EACT,KAAK,IAAMA,KAAW,IAAMA,eAAgC,KAAVA,KAA2B,IAAVA,OAC7D,EAAIA,EACV,KAAK,IAAMA,KAAW,IAAMA,eAAgC,KAAVA,KAA4B,KAAVA,OAC9D,EAAIA,EACV,KAAK,IAAMA,KAAW,IAAMA,eAA+B,IAAVA,KAA4B,KAAVA,IACtE,GAGN,CAED,QAAAf,EAAShM,EAAEA,EAACC,EAAEA,EAACT,KAAEA,EAAIuK,SAAEA,IACrByB,KAAKgB,UAAU,CAAExM,IAAGC,IAAGT,OAAMuK,YAC9B,CAED,WAAA+B,EAAY9L,EAAEA,EAACC,EAAEA,EAACT,KAAEA,EAAIuK,SAAEA,IACxByB,KAAKmB,aAAa,CAAE3M,IAAGC,IAAGT,OAAMuK,YACjC,CAED,iBAAA+C,EAAkB9M,EAAEA,EAACC,EAAEA,EAACT,KAAEA,EAAIuK,SAAEA,IAC9ByB,KAAKwB,mBAAmB,CAAEhN,IAAGC,IAAGT,OAAMuK,YACvC,QCnIUkD,EAMX,WAAA3B,EAAYC,IAAEA,EAAG/H,KAAEA,EAAIqH,SAAEA,IACvBW,KAAKC,KAAOF,EACZC,KAAKE,MAAQlI,EACbgI,KAAKG,UAAYd,CAClB,CAED,IAAAe,CAAK5L,EAAWC,EAAWT,EAAc0N,GAEvC,IAAIrB,EAEJ,OAHaL,KAAKE,OAIhB,KAAKjU,EAAOA,QAAC0V,KACXtB,EAAeL,KAAKQ,SACpB,MACF,KAAKvU,EAAOA,QAAC2V,OACXvB,EAAeL,KAAK6B,YACpB,MACF,KAAK5V,EAAOA,QAAC6V,cACXzB,EAAeL,KAAK+B,mBACpB,MACF,KAAK9V,EAAOA,QAAC+V,QACX3B,EAAeL,KAAKiC,aACpB,MACF,KAAKhW,EAAOA,QAACoV,aACXhB,EAAeL,KAAKsB,kBACpB,MACF,KAAKrV,EAAAA,QAAQuT,OACb,QACEa,EAAeL,KAAKM,YAGxBD,EAAaI,KAAKT,KAAM,CAAExL,IAAGC,IAAGT,OAAM0N,eACvC,CAED,aAAAhB,EAAclM,EAAEA,EAACC,EAAEA,EAACT,KAAEA,EAAIuK,SAAEA,EAAW,EAAC6B,KAAEA,IACxC,MAAMO,EAAKnM,EAAIR,EAAO,EAChB4M,EAAKnM,EAAIT,EAAO,EAEtBoM,IACAJ,KAAKa,UAAUC,aAAa,YAAa,UAAW,IAAMvC,EAAY/O,KAAKuR,MAAMJ,KAAMC,KACxF,CAED,SAAAI,CAAUC,GACR,MAAMjN,KAAEA,EAAIQ,EAAEA,EAACC,EAAEA,GAAMwM,EAEvBjB,KAAKU,cAAc,IACdO,EACHb,KAAM,KACJJ,KAAKa,SAAWb,KAAKG,UAAUe,gBAAgB,6BAA8B,UAC7ElB,KAAKa,SAASC,aAAa,KAAM9J,OAAOxC,EAAIR,EAAO,IACnDgM,KAAKa,SAASC,aAAa,KAAM9J,OAAOvC,EAAIT,EAAO,IACnDgM,KAAKa,SAASC,aAAa,IAAK9J,OAAOhD,EAAO,GAAG,GAGtD,CAED,YAAAmN,CAAaF,GACX,MAAMjN,KAAEA,EAAIQ,EAAEA,EAACC,EAAEA,GAAMwM,EAEvBjB,KAAKU,cAAc,IACdO,EACHb,KAAM,KACJJ,KAAKa,SAAWb,KAAKG,UAAUe,gBAAgB,6BAA8B,QAC7ElB,KAAKa,SAASC,aAAa,IAAK9J,OAAOxC,IACvCwL,KAAKa,SAASC,aAAa,IAAK9J,OAAOvC,IACvCuL,KAAKa,SAASC,aAAa,QAAS9J,OAAOhD,IAC3CgM,KAAKa,SAASC,aAAa,SAAU9J,OAAOhD,GAAM,GAGvD,CAGD,iBAAAkO,CAAkBjB,GAChB,MAAMjN,KAAEA,EAAIQ,EAAEA,EAACC,EAAEA,GAAMwM,EAEvBjB,KAAKU,cAAc,IACdO,EACHb,KAAM,KACJJ,KAAKa,SAAWb,KAAKG,UAAUe,gBAAgB,6BAA8B,QAC7ElB,KAAKa,SAASC,aACZ,IACA,KAAKtM,KAAKC,MACHT,MACAA,EAAO,EACZ,KAAKA,EAAO,KAAKA,EAAO,kBAAkBA,IAC7C,GAGN,CAGD,mBAAAmO,CAAoBlB,GAClB,MAAMjN,KAAEA,EAAIQ,EAAEA,EAACC,EAAEA,GAAMwM,EAEvBjB,KAAKU,cAAc,IACdO,EACHb,KAAM,KACJJ,KAAKa,SAAWb,KAAKG,UAAUe,gBAAgB,6BAA8B,QAC7ElB,KAAKa,SAASC,aACZ,IACA,KAAKtM,KAAKC,MACHT,MACAA,OACCA,EAAO,EACb,KAAKA,EAAO,KAAKA,EAAO,gBAAgBA,EAAO,MAAMA,EAAO,IAC/D,GAGN,CAGD,wBAAAoO,CAAyBnB,GACvB,MAAMjN,KAAEA,EAAIQ,EAAEA,EAACC,EAAEA,GAAMwM,EAEvBjB,KAAKU,cAAc,IACdO,EACHb,KAAM,KACJJ,KAAKa,SAAWb,KAAKG,UAAUe,gBAAgB,6BAA8B,QAC7ElB,KAAKa,SAASC,aACZ,IACA,KAAKtM,KAAKC,MACHT,MACAA,MACAA,KAAQA,gBAAmBA,MAASA,IAC5C,GAGN,CAGD,oBAAAqO,CAAqBpB,GACnB,MAAMjN,KAAEA,EAAIQ,EAAEA,EAACC,EAAEA,GAAMwM,EAEvBjB,KAAKU,cAAc,IACdO,EACHb,KAAM,KACJJ,KAAKa,SAAWb,KAAKG,UAAUe,gBAAgB,6BAA8B,QAC7ElB,KAAKa,SAASC,aACZ,IACA,KAAKtM,KAAKC,MACHT,EAAO,EACZ,KAAKA,EAAO,KAAKA,EAAO,eAAeA,EAAO,KAAKA,EAAO,MACrDA,EAAO,EACZ,MAAMA,EAAO,EACb,KAAKA,EAAO,KAAKA,EAAO,gBAAgBA,EAAO,MAAMA,EAAO,IAC/D,GAGN,CAED,QAAAwM,EAAShM,EAAEA,EAACC,EAAEA,EAACT,KAAEA,IACfgM,KAAKgB,UAAU,CAAExM,IAAGC,IAAGT,OAAMuK,SAAU,GACxC,CAED,WAAA+B,EAAY9L,EAAEA,EAACC,EAAEA,EAACT,KAAEA,IAClBgM,KAAKmB,aAAa,CAAE3M,IAAGC,IAAGT,OAAMuK,SAAU,GAC3C,CAED,YAAA0D,EAAazN,EAAEA,EAACC,EAAEA,EAACT,KAAEA,EAAI0N,YAAEA,IACzB,MAAMY,EAAeZ,GAAeA,GAAa,EAAG,GAAK,EACnDa,EAAgBb,GAAeA,EAAY,EAAG,GAAK,EACnDc,EAAcd,GAAeA,EAAY,GAAI,GAAK,EAClDe,EAAiBf,GAAeA,EAAY,EAAG,GAAK,EAEpDgB,EAAiBJ,EAAeC,EAAgBC,EAAcC,EAEpE,GAAuB,IAAnBC,EAKJ,GAAIA,EAAiB,GAAMJ,GAAgBC,GAAmBC,GAAeC,EAC3EzC,KAAKmB,aAAa,CAAE3M,IAAGC,IAAGT,OAAMuK,SAAU,QAD5C,CAKA,GAAuB,IAAnBmE,EAAsB,CACxB,IAAInE,EAAW,EAWf,OATI+D,GAAgBE,EAClBjE,EAAW/O,KAAKuR,GAAK,EACZyB,GAAeD,EACxBhE,EAAW/O,KAAKuR,GACPwB,GAAiBE,IAC1BlE,GAAY/O,KAAKuR,GAAK,QAGxBf,KAAKmC,oBAAoB,CAAE3N,IAAGC,IAAGT,OAAMuK,YAExC,CAED,GAAuB,IAAnBmE,EAAsB,CACxB,IAAInE,EAAW,EAWf,OATIiE,EACFjE,EAAW/O,KAAKuR,GAAK,EACZwB,EACThE,EAAW/O,KAAKuR,GACP0B,IACTlE,GAAY/O,KAAKuR,GAAK,QAGxBf,KAAKkC,kBAAkB,CAAE1N,IAAGC,IAAGT,OAAMuK,YAEtC,CA9BA,MAPCyB,KAAKgB,UAAU,CAAExM,IAAGC,IAAGT,OAAMuK,SAAU,GAsC1C,CAED,iBAAA+C,EAAkB9M,EAAEA,EAACC,EAAEA,EAACT,KAAEA,EAAI0N,YAAEA,IAC9B,MAAMY,EAAeZ,GAAeA,GAAa,EAAG,GAAK,EACnDa,EAAgBb,GAAeA,EAAY,EAAG,GAAK,EACnDc,EAAcd,GAAeA,EAAY,GAAI,GAAK,EAClDe,EAAiBf,GAAeA,EAAY,EAAG,GAAK,EAEpDgB,EAAiBJ,EAAeC,EAAgBC,EAAcC,EAEpE,GAAuB,IAAnBC,EAKJ,GAAIA,EAAiB,GAAMJ,GAAgBC,GAAmBC,GAAeC,EAC3EzC,KAAKmB,aAAa,CAAE3M,IAAGC,IAAGT,OAAMuK,SAAU,QAD5C,CAKA,GAAuB,IAAnBmE,EAAsB,CACxB,IAAInE,EAAW,EAWf,OATI+D,GAAgBE,EAClBjE,EAAW/O,KAAKuR,GAAK,EACZyB,GAAeD,EACxBhE,EAAW/O,KAAKuR,GACPwB,GAAiBE,IAC1BlE,GAAY/O,KAAKuR,GAAK,QAGxBf,KAAKoC,yBAAyB,CAAE5N,IAAGC,IAAGT,OAAMuK,YAE7C,CAED,GAAuB,IAAnBmE,EAAsB,CACxB,IAAInE,EAAW,EAWf,OATIiE,EACFjE,EAAW/O,KAAKuR,GAAK,EACZwB,EACThE,EAAW/O,KAAKuR,GACP0B,IACTlE,GAAY/O,KAAKuR,GAAK,QAGxBf,KAAKkC,kBAAkB,CAAE1N,IAAGC,IAAGT,OAAMuK,YAEtC,CA9BA,MAPCyB,KAAKgB,UAAU,CAAExM,IAAGC,IAAGT,OAAMuK,SAAU,GAsC1C,CAED,WAAAsD,EAAYrN,EAAEA,EAACC,EAAEA,EAACT,KAAEA,EAAI0N,YAAEA,IACxB,MAAMY,EAAeZ,GAAeA,GAAa,EAAG,GAAK,EACnDa,EAAgBb,GAAeA,EAAY,EAAG,GAAK,EACnDc,EAAcd,GAAeA,EAAY,GAAI,GAAK,EAClDe,EAAiBf,GAAeA,EAAY,EAAG,GAAK,EAInC,IAFAY,EAAeC,EAAgBC,EAAcC,EAO/DH,GAAiBE,EAKjBD,GAAkBE,EAKvBzC,KAAKmB,aAAa,CAAE3M,IAAGC,IAAGT,OAAMuK,SAAU,IAJxCyB,KAAKmC,oBAAoB,CAAE3N,IAAGC,IAAGT,OAAMuK,SAAU/O,KAAKuR,GAAK,IAL3Df,KAAKmC,oBAAoB,CAAE3N,IAAGC,IAAGT,OAAMuK,UAAW/O,KAAKuR,GAAK,IAL5Df,KAAKqC,qBAAqB,CAAE7N,IAAGC,IAAGT,OAAMuK,SAAU/O,KAAKuR,GAAK,GAe/D,CAED,kBAAAgB,EAAmBvN,EAAEA,EAACC,EAAEA,EAACT,KAAEA,EAAI0N,YAAEA,IAC/B,MAAMY,EAAeZ,GAAeA,GAAa,EAAG,GAAK,EACnDa,EAAgBb,GAAeA,EAAY,EAAG,GAAK,EACnDc,EAAcd,GAAeA,EAAY,GAAI,GAAK,EAClDe,EAAiBf,GAAeA,EAAY,EAAG,GAAK,EAInC,IAFAY,EAAeC,EAAgBC,EAAcC,EAO/DH,GAAiBE,EAKjBD,GAAkBE,EAKvBzC,KAAKmB,aAAa,CAAE3M,IAAGC,IAAGT,OAAMuK,SAAU,IAJxCyB,KAAKoC,yBAAyB,CAAE5N,IAAGC,IAAGT,OAAMuK,SAAU/O,KAAKuR,GAAK,IALhEf,KAAKoC,yBAAyB,CAAE5N,IAAGC,IAAGT,OAAMuK,UAAW/O,KAAKuR,GAAK,IALjEf,KAAKqC,qBAAqB,CAAE7N,IAAGC,IAAGT,OAAMuK,SAAU/O,KAAKuR,GAAK,GAe/D,ECxTI,MAAM4B,EAAoB,CAC/BC,UAAUC,GACD,IAAIC,SAAQ,CAACC,EAASC,KAC3B,GAAkB,iBAAPH,EAAiB,CAC1B,MAAMI,EAAM,IAAIC,eAChBD,EAAIE,OAAS,WACX,MAAMC,EAAS,IAAIC,WACnBD,EAAOE,UAAY,WACjBP,EAAQK,EAAOG,OACjB,EACAH,EAAOI,cAAcP,EAAIQ,SAC3B,EACAR,EAAIS,QAAUT,EAAIU,QAAUV,EAAIW,UAAYZ,EAC5CC,EAAIY,KAAK,MAAOhB,GAChBI,EAAIa,aAAe,OACnBb,EAAIc,MACL,KAAM,CACL,MAAMX,EAAS,IAAIC,WACnBD,EAAOE,UAAY,WACjBP,EAAQK,EAAOG,OACjB,EACAH,EAAOI,cAAcX,EACtB,KAGLmB,QAAQrF,GACC,IAAImE,SAAQ,CAACC,EAASC,KAC3B,IAAKrE,EAAQsF,MACX,OAAOjB,EAAO,wBAGhB,MAAMiB,EAAQ,IAAIC,MAE8B,iBAArCvF,EAAQE,aAAaa,cAC9BuE,EAAMvE,YAAcf,EAAQE,aAAaa,aAG3CuE,EAAMd,OAAS,KACbJ,EAAQ,CAAExI,MAAO0J,EAAM1J,MAAOC,OAAQyJ,EAAMzJ,QAAS,EAEvDyJ,EAAMP,QAAUO,EAAMN,QAAUX,EACJ,iBAAjBrE,EAAQsF,MAAmBA,EAAME,IAAMxF,EAAQsF,MAExDtB,EACGC,UAAUjE,EAAQsF,OAClBG,MAAMvB,GAASoB,EAAME,IAAMtB,IAC3BwB,MAAMrB,EAAO,KCvCxB,MAAMsB,EAAa,CACjB,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GACnB,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GACnB,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GACnB,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GACnB,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GACnB,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GACnB,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,IAGfC,EAAU,CACd,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GACnB,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GACnB,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GACnB,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GACnB,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GACnB,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GACnB,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,UAGRC,EAaX,WAAA1E,CAAYnB,GACVqB,KAAKG,UAAYxB,EAAQU,SACzBW,KAAKa,SAAWb,KAAKG,UAAUe,gBAAgB,6BAA8B,OAC7ElB,KAAKa,SAASC,aAAa,QAAS9J,OAAO2H,EAAQpE,QACnDyF,KAAKa,SAASC,aAAa,SAAU9J,OAAO2H,EAAQnE,SACpDwF,KAAKa,SAASC,aAAa,UAAW,OAAOnC,EAAQpE,SAASoE,EAAQnE,UACtEwF,KAAKyE,MAAQzE,KAAKG,UAAUe,gBAAgB,6BAA8B,QAC1ElB,KAAKa,SAAS6D,YAAY1E,KAAKyE,OAC/BzE,KAAK2E,YAAchG,EAAQiG,YAAcjC,EAEzC3C,KAAK6E,SAAWlG,CACjB,CAED,SAAIpE,GACF,OAAOyF,KAAK6E,SAAStK,KACtB,CAED,UAAIC,GACF,OAAOwF,KAAK6E,SAASrK,MACtB,CAED,UAAAsK,GACE,OAAO9E,KAAKa,QACb,CAED,YAAMkE,CAAOC,GACX,MAAMpO,EAAQoO,EAAGpS,iBACX2O,EAAUvB,KAAK6E,SAAS5F,YAAYjL,KAC1C,IAAIiR,EAAgB,CAClBC,UAAW,EACXC,UAAW,EACX5K,MAAO,EACPC,OAAQ,GAKV,GAFAwF,KAAKoF,IAAMJ,EAEPhF,KAAK6E,SAASZ,MAAO,CAEvB,MAAMjQ,QAAagM,KAAK2E,YAAYX,QAAQhE,KAAK6E,WAC3ChG,aAAEA,EAAYY,UAAEA,GAAcO,KAAK6E,SACnCQ,EAAaxG,EAAaG,UAAYhS,EAAwByS,EAAUlS,sBACxE+X,EAAgB9V,KAAKC,MAAM4V,GAAczO,EAAQA,EAAQ,IAAY,GAAKA,EAAQ,MAExFqO,ECtEU,UAAmBM,eACjCA,EAAcC,cACdA,EAAaF,cACbA,EAAaG,kBACbA,EAAiBlE,QACjBA,EAAOlO,OACPA,IAEA,MAAMqS,EAAW,CAAElR,EAAG,EAAGC,EAAG,GACtBuK,EAAY,CAAExK,EAAG,EAAGC,EAAG,GAE7B,GACE8Q,GAAkB,GAClBC,GAAiB,GACjBF,GAAiB,GACjB/D,GAAW,GACX,EAAIlO,GAAU,EAAIiS,EAElB,MAAO,CACL9K,OAAQ,EACRD,MAAO,EACP4K,UAAW,EACXD,UAAW,GAKXO,GAAqBA,EAAoB,GAAK,IAAGA,EAAoBjW,KAAKgC,IAAI,EAAGiU,EAAoB,IAGzG,MAAME,EAASnW,KAAKgC,IAAIgU,EAAeD,GACjCK,EAASpW,KAAK+E,IAAIiR,EAAeD,GAGvC,IAAIM,EAAQ,EACVC,GAASL,GAAqBH,GAAiB,EAAIjS,EACrD,EAAG,CACD,MAAMW,EAAO6R,GAASC,EAAQD,GAAS,EACvC,IAAIE,EAAUvW,KAAKgC,IAAI,EAAGhC,KAAKwW,KAAKhS,EAAO,EAAIX,IAC3C0S,EAAU,GAAK,GAAGA,IACtB,IAAIE,EAAUzW,KAAKgC,IAAI,EAAGhC,KAAKwW,KAAMhS,EAAO4R,EAAUD,EAAS,EAAItS,IAC/D4S,EAAU,GAAK,GAAGA,IAElBF,EAAUE,EAAUX,EAAeQ,EAAQ9R,EAC1C6R,EAAQ7R,CACd,OAAQxE,KAAK2I,IAAI0N,EAAQC,GAAS,MAGnC,MAAM9R,EAAO6R,EACb,IAAIK,EAAU1W,KAAKgC,IAAI,EAAGhC,KAAKwW,KAAKhS,EAAO,EAAIX,IAC3C6S,EAAU,GAAK,GAAGA,IACtB,IAAIC,EAAU3W,KAAKgC,IAAI,EAAGhC,KAAKwW,KAAMhS,EAAO4R,EAAUD,EAAS,EAAItS,IAC/D8S,EAAU,GAAK,GAAGA,IAGlBX,EAAgBD,GAClBG,EAASlR,EAAI0R,EACbR,EAASjR,EAAI0R,IAEbT,EAASlR,EAAI2R,EACbT,EAASjR,EAAIyR,GAIf,MAAME,GAAQV,EAASlR,EAAI,EAAInB,GAAUkO,EACnC8E,GAAQX,EAASjR,EAAI,EAAIpB,GAAUkO,EAQzC,OAPAvC,EAAUxK,EAAI4R,EACdpH,EAAUvK,EAAK2R,EAAOb,EAAkBC,EACpCxG,EAAUvK,EAAI4R,IAChBrH,EAAUvK,EAAI4R,EACdrH,EAAUxK,EAAK6R,EAAOb,EAAiBD,GAGlC,CACL/K,OAAQhL,KAAK8W,MAAMtH,EAAUvK,EAAI,EAAIpB,EAASkO,GAC9ChH,MAAO/K,KAAK8W,MAAMtH,EAAUxK,EAAI,EAAInB,EAASkO,GAC7C4D,UAAWO,EAASjR,EACpByQ,UAAWQ,EAASlR,EAExB,CDTsB+R,CAAmB,CACjCf,cAAexR,EAAKuG,MACpBgL,eAAgBvR,EAAKwG,OACrB8K,gBACAG,kBAAmB7O,EAAQ,GAC3B2K,UACAlO,OAAQwL,EAAaxL,QAExB,CAED2M,KAAKwG,iBACLxG,KAAKyG,UAAS,CAAC7Z,EAAWwC,MACpB4Q,KAAK6E,SAAShG,aAAaC,oBAE3BlS,IAAMgK,EAAQqO,EAAcC,WAAa,GACzCtY,GAAKgK,EAAQqO,EAAcC,WAAa,GACxC9V,IAAMwH,EAAQqO,EAAcE,WAAa,GACzC/V,GAAKwH,EAAQqO,EAAcE,WAAa,OAMxCb,EAAW1X,KAAKwC,IAAMkV,EAAW1X,EAAIgK,EAAQ,KAAKxH,IAAMkV,EAAW1X,KAAKwC,EAAIwH,EAAQ,OAIpF2N,EAAQ3X,KAAKwC,IAAMmV,EAAQ3X,EAAIgK,EAAQ,KAAKxH,IAAMmV,EAAQ3X,KAAKwC,EAAIwH,EAAQ,OAMjFoJ,KAAK0G,cAED1G,KAAK6E,SAASZ,OAASgB,EAAc1K,MAAQ,GAAK0K,EAAczK,OAAS,SACrEwF,KAAK2G,UAAU,CAAEpM,MAAO0K,EAAc1K,MAAOC,OAAQyK,EAAczK,OAAQ5D,QAAO2K,WAE3F,CAED,cAAAiF,GACE,MAAMI,EAAU5G,KAAKa,SACflC,EAAUqB,KAAK6E,SAErB,GAAI+B,GAAWjI,EAAQS,kBAAmB,CACxC,MAAMyH,EAAkBlI,EAAQS,kBAAkBhB,SAC5CuB,EAAQhB,EAAQS,kBAAkBO,MAExCK,KAAK8G,aAAa,CAChBnI,QAASkI,EACTlH,MAAOA,EACPoH,mBAAoB,EACpBvS,EAAG,EACHC,EAAG,EACH+F,OAAQmE,EAAQnE,OAChBD,MAAOoE,EAAQpE,MACfyM,KAAM,qBAGR,MAAMhT,EAAOxE,KAAK+E,IAAIoK,EAAQpE,MAAOoE,EAAQnE,QACvCoM,EAAU5G,KAAKG,UAAUe,gBAAgB,6BAA8B,QAC7ElB,KAAKiH,oBAAsBjH,KAAKG,UAAUe,gBAAgB,6BAA8B,YACxFlB,KAAKiH,oBAAoBnG,aAAa,KAAM,8BAC5Cd,KAAKyE,MAAMC,YAAY1E,KAAKiH,qBAE5BL,EAAQ9F,aAAa,IAAK9J,QAAQ2H,EAAQpE,MAAQvG,GAAQ,IAC1D4S,EAAQ9F,aAAa,IAAK9J,QAAQ2H,EAAQnE,OAASxG,GAAQ,IAC3D4S,EAAQ9F,aAAa,QAAS9J,OAAOhD,IACrC4S,EAAQ9F,aAAa,SAAU9J,OAAOhD,IACtC4S,EAAQ9F,aAAa,KAAM9J,OAAQhD,EAAO,GAAM2K,EAAQS,kBAAkBkH,OAAS,KAEnFtG,KAAKiH,oBAAoBvC,YAAYkC,EACtC,CACF,CAED,QAAAH,CAASS,GACP,IAAKlH,KAAKoF,IACR,KAAM,yBAGR,MAAMzG,EAAUqB,KAAK6E,SACfjO,EAAQoJ,KAAKoF,IAAIxS,iBAEvB,GAAIgE,EAAQ+H,EAAQpE,OAAS3D,EAAQ+H,EAAQnE,OAC3C,KAAM,2BAGR,MAAM2M,EAAU3X,KAAK+E,IAAIoK,EAAQpE,MAAOoE,EAAQnE,QAC1C+G,EAAUvB,KAAK6E,SAAS5F,YAAYjL,KACpCoT,EAAa5X,KAAKC,OAAOkP,EAAQpE,MAAQ3D,EAAQ2K,GAAW,GAC5D8F,EAAa7X,KAAKC,OAAOkP,EAAQnE,OAAS5D,EAAQ2K,GAAW,GAC7DhB,EAAM,IAAIkB,EAAM,CAAE1B,IAAKC,KAAKa,SAAU7I,KAAM2G,EAAQM,YAAYjH,KAAMqH,SAAUW,KAAKG,YAE3FH,KAAKsH,cAAgBtH,KAAKG,UAAUe,gBAAgB,6BAA8B,YAClFlB,KAAKsH,cAAcxG,aAAa,KAAM,uBACtCd,KAAKyE,MAAMC,YAAY1E,KAAKsH,eAE5BtH,KAAK8G,aAAa,CAChBnI,QAASA,EAAQM,aAAab,SAC9BuB,MAAOhB,EAAQM,YAAYU,MAC3BoH,mBAAoB,EACpBvS,EAAG,EACHC,EAAG,EACH+F,OAAQmE,EAAQnE,OAChBD,MAAOoE,EAAQpE,MACfyM,KAAM,cAGR,IAAK,IAAIpa,EAAI,EAAGA,EAAIgK,EAAOhK,IACzB,IAAK,IAAIwC,EAAI,EAAGA,EAAIwH,EAAOxH,IACrB8X,IAAWA,EAAOta,EAAGwC,IAGpB4Q,KAAKoF,KAAKzS,OAAO/F,EAAGwC,KAIzBmR,EAAIH,KACFgH,EAAaxa,EAAI2U,EACjB8F,EAAajY,EAAImS,EACjBA,GACA,CAACgG,EAAiBC,MACZ5a,EAAI2a,EAAU,GAAKnY,EAAIoY,EAAU,GAAK5a,EAAI2a,GAAW3Q,GAASxH,EAAIoY,GAAW5Q,OAC7EsQ,IAAWA,EAAOta,EAAI2a,EAASnY,EAAIoY,QAC9BxH,KAAKoF,KAAOpF,KAAKoF,IAAIzS,OAAO/F,EAAI2a,EAASnY,EAAIoY,OAItDjH,EAAIM,UAAYb,KAAKsH,eACvBtH,KAAKsH,cAAc5C,YAAYnE,EAAIM,WAKzC,GAAIlC,EAAQY,QAAUlT,EAASA,UAACob,OAAQ,CACtC,MAAMC,EAAiBlY,KAAKC,OAAO0X,EAAU5F,EAAU3K,EAAQ,EAAIoJ,KAAK6E,SAASxR,QAAU,GACrFsU,EAAY/Q,EAAyB,EAAjB8Q,EACpBE,EAAiBR,EAAaM,EAAiBnG,EAC/CsG,EAAiBR,EAAaK,EAAiBnG,EAC/CuG,EAAyB,GACzBC,EAASvY,KAAKC,MAAMkY,EAAY,GAEtC,IAAK,IAAI/a,EAAI,EAAGA,EAAI+a,EAAW/a,IAAK,CAClCkb,EAAWlb,GAAK,GAChB,IAAK,IAAIwC,EAAI,EAAGA,EAAIuY,EAAWvY,IAE3BxC,GAAK8a,EAAiB,GACtB9a,GAAK+a,EAAYD,GACjBtY,GAAKsY,EAAiB,GACtBtY,GAAKuY,EAAYD,GAMflY,KAAKwY,MAAMpb,EAAImb,IAAWnb,EAAImb,IAAW3Y,EAAI2Y,IAAW3Y,EAAI2Y,IAAWA,EAJzED,EAAWlb,GAAGwC,GAAK,EAUrB0Y,EAAWlb,GAAGwC,GAAK4Q,KAAKoF,IAAIzS,OAC1BvD,EAAI,EAAIsY,EAAiB,EAAItY,EAAIA,GAAKwH,EAAQxH,EAAI,EAAIsY,EAAiBtY,EAAIsY,EAC3E9a,EAAI,EAAI8a,EAAiB,EAAI9a,EAAIA,GAAKgK,EAAQhK,EAAI,EAAI8a,EAAiB9a,EAAI8a,GAEzE,EACA,CAEP,CAED,IAAK,IAAI9a,EAAI,EAAGA,EAAI+a,EAAW/a,IAC7B,IAAK,IAAIwC,EAAI,EAAGA,EAAIuY,EAAWvY,IACxB0Y,EAAWlb,GAAGwC,KAEnBmR,EAAIH,KACFwH,EAAiBhb,EAAI2U,EACrBsG,EAAiBzY,EAAImS,EACrBA,GACA,CAACgG,EAAiBC,MACPM,EAAWlb,EAAI2a,KAAWnY,EAAIoY,KAGvCjH,EAAIM,UAAYb,KAAKsH,eACvBtH,KAAKsH,cAAc5C,YAAYnE,EAAIM,UAI1C,CACF,CAED,WAAA6F,GACE,IAAK1G,KAAKoF,IACR,KAAM,yBAGR,MAAMwB,EAAU5G,KAAKa,SACflC,EAAUqB,KAAK6E,SAErB,IAAK+B,EACH,KAAM,8BAGR,MAAMhQ,EAAQoJ,KAAKoF,IAAIxS,iBACjB2O,EAAUvB,KAAK6E,SAAS5F,YAAYjL,KACpCiU,EAA8B,EAAV1G,EACpB2G,EAA2B,EAAV3G,EACjB6F,EAAa5X,KAAKC,OAAOkP,EAAQpE,MAAQ3D,EAAQ2K,GAAW,GAC5D8F,EAAa7X,KAAKC,OAAOkP,EAAQnE,OAAS5D,EAAQ2K,GAAW,GAEnE,CACE,CAAC,EAAG,EAAG,GACP,CAAC,EAAG,EAAG/R,KAAKuR,GAAK,GACjB,CAAC,EAAG,GAAIvR,KAAKuR,GAAK,IAClBhD,SAAQ,EAAEoK,EAAQ9Z,EAAKkQ,MACvB,MAAM/J,EAAI4S,EAAae,EAAS5G,GAAW3K,EAAQ,GAC7CnC,EAAI4S,EAAahZ,EAAMkT,GAAW3K,EAAQ,GAChD,IAAIwR,EAAwBpI,KAAKsH,cAC7Be,EAAqBrI,KAAKsH,cAoB9B,IAlBI3I,EAAQO,sBAAsBd,UAAYO,EAAQO,sBAAsBS,SAC1EyI,EAAwBpI,KAAKG,UAAUe,gBAAgB,6BAA8B,YACrFkH,EAAsBtH,aAAa,KAAM,kCAAkCqH,KAAU9Z,KACrF2R,KAAKyE,MAAMC,YAAY0D,GACvBpI,KAAKsI,uBAAyBtI,KAAKuI,oBAAsBF,EAAqBD,EAE9EpI,KAAK8G,aAAa,CAChBnI,QAASA,EAAQO,sBAAsBd,SACvCuB,MAAOhB,EAAQO,sBAAsBS,MACrCoH,mBAAoBxI,EACpB/J,IACAC,IACA+F,OAAQyN,EACR1N,MAAO0N,EACPjB,KAAM,wBAAwBmB,KAAU9Z,OAIxCsQ,EAAQO,sBAAsBlH,KAAM,CACtC,MAAMwQ,EAAgB,IAAIpH,EAAe,CACvCrB,IAAKC,KAAKa,SACV7I,KAAM2G,EAAQO,qBAAqBlH,KACnCqH,SAAUW,KAAKG,YAGjBqI,EAAcpI,KAAK5L,EAAGC,EAAGwT,EAAmB1J,GAExCiK,EAAc3H,UAAYuH,GAC5BA,EAAsB1D,YAAY8D,EAAc3H,SAEnD,KAAM,CACL,MAAMN,EAAM,IAAIkB,EAAM,CAAE1B,IAAKC,KAAKa,SAAU7I,KAAM2G,EAAQM,YAAYjH,KAAMqH,SAAUW,KAAKG,YAE3F,IAAK,IAAIvT,EAAI,EAAGA,EAAI0X,EAAWnV,OAAQvC,IACrC,IAAK,IAAIwC,EAAI,EAAGA,EAAIkV,EAAW1X,GAAGuC,OAAQC,IACnCkV,EAAW1X,KAAKwC,KAIrBmR,EAAIH,KACF5L,EAAI5H,EAAI2U,EACR9M,EAAIrF,EAAImS,EACRA,GACA,CAACgG,EAAiBC,MAA+BlD,EAAW1X,EAAI2a,KAAWnY,EAAIoY,KAG7EjH,EAAIM,UAAYuH,GAClBA,EAAsB1D,YAAYnE,EAAIM,UAI7C,CAoBD,IAlBIlC,EAAQQ,mBAAmBf,UAAYO,EAAQQ,mBAAmBQ,SACpE0I,EAAqBrI,KAAKG,UAAUe,gBAAgB,6BAA8B,YAClFmH,EAAmBvH,aAAa,KAAM,+BAA+BqH,KAAU9Z,KAC/E2R,KAAKyE,MAAMC,YAAY2D,GACvBrI,KAAKuI,oBAAsBF,EAE3BrI,KAAK8G,aAAa,CAChBnI,QAASA,EAAQQ,mBAAmBf,SACpCuB,MAAOhB,EAAQQ,mBAAmBQ,MAClCoH,mBAAoBxI,EACpB/J,EAAGA,EAAc,EAAV+M,EACP9M,EAAGA,EAAc,EAAV8M,EACP/G,OAAQ0N,EACR3N,MAAO2N,EACPlB,KAAM,qBAAqBmB,KAAU9Z,OAIrCsQ,EAAQQ,mBAAmBnH,KAAM,CACnC,MAAMyQ,EAAa,IAAI5I,EAAY,CACjCE,IAAKC,KAAKa,SACV7I,KAAM2G,EAAQQ,kBAAkBnH,KAChCqH,SAAUW,KAAKG,YAGjBsI,EAAWrI,KAAK5L,EAAc,EAAV+M,EAAa9M,EAAc,EAAV8M,EAAa2G,EAAgB3J,GAE9DkK,EAAW5H,UAAYwH,GACzBA,EAAmB3D,YAAY+D,EAAW5H,SAE7C,KAAM,CACL,MAAMN,EAAM,IAAIkB,EAAM,CAAE1B,IAAKC,KAAKa,SAAU7I,KAAM2G,EAAQM,YAAYjH,KAAMqH,SAAUW,KAAKG,YAE3F,IAAK,IAAIvT,EAAI,EAAGA,EAAI2X,EAAQpV,OAAQvC,IAClC,IAAK,IAAIwC,EAAI,EAAGA,EAAImV,EAAQ3X,GAAGuC,OAAQC,IAChCmV,EAAQ3X,KAAKwC,KAIlBmR,EAAIH,KACF5L,EAAI5H,EAAI2U,EACR9M,EAAIrF,EAAImS,EACRA,GACA,CAACgG,EAAiBC,MAA+BjD,EAAQ3X,EAAI2a,KAAWnY,EAAIoY,KAG1EjH,EAAIM,UAAYwH,GAClBA,EAAmB3D,YAAYnE,EAAIM,UAI1C,IAEJ,CAED,eAAM8F,EAAUpM,MACdA,EAAKC,OACLA,EAAM5D,MACNA,EAAK2K,QACLA,IAOA,MAAM5C,EAAUqB,KAAK6E,SACfuC,EAAa5X,KAAKC,OAAOkP,EAAQpE,MAAQ3D,EAAQ2K,GAAW,GAC5D8F,EAAa7X,KAAKC,OAAOkP,EAAQnE,OAAS5D,EAAQ2K,GAAW,GAC7DlO,EAASsL,EAAQE,aAAaxL,OAASkO,EACvCmH,EAAKtB,EAAa/T,GAAUuD,EAAQ2K,EAAUhH,GAAS,EACvDoO,EAAKtB,EAAahU,GAAUuD,EAAQ2K,EAAU/G,GAAU,EACxDoO,EAAKrO,EAAiB,EAATlH,EACbwV,EAAKrO,EAAkB,EAATnH,EAEdyV,QAAiB9I,KAAK2E,YAAY/B,UAAUjE,EAAQsF,OAAS,IACnE,IAAIA,EAAoBjE,KAAKG,UAAUe,gBAAgB,6BAA8B,SAGrF,GAFA+C,EAAMnD,aAAa,OAAQgI,GAAY,IAEnCA,EAASC,WAAW,uBAAwB,CAC9C,IAAIrZ,EAAOoZ,EAASxT,UAAU,IAC9B,MAAM1I,EAAI8C,EAAKwM,QAAQ,KACjB8M,EAAWtZ,EAAK4F,UAAU,EAAG1I,GAGnC,GAFA8C,EAAOA,EAAK4F,UAAU1I,EAAI,GAGnB,WADCoc,EAEJtZ,EAAsB,mBAARuZ,KAAqBA,KAAKvZ,GAAQwZ,OAAOC,KAAKzZ,EAAM,UAAUqN,SAAS,aAGrFrN,EAAO,GAIX,GAAIA,EAAM,CACR,MAAM0Z,GAAY,IAAIC,WAAYC,gBAAgB5Z,EAAM,YAClD6Z,EAAS/c,MAAM2c,KAAKC,EAAUI,qBAAqB,QACrDD,EAAOpa,SAAQ8U,EAAQsF,EAAO,GACnC,CACF,CAEDtF,EAAMnD,aAAa,IAAK9J,OAAO0R,IAC/BzE,EAAMnD,aAAa,IAAK9J,OAAO2R,IAC/B1E,EAAMnD,aAAa,QAAS,GAAG8H,OAC/B3E,EAAMnD,aAAa,SAAU,GAAG+H,OAEhC7I,KAAKa,SAAS6D,YAAYT,EAC3B,CAED,YAAA6C,EAAanI,QACXA,EAAOgB,MACPA,EAAKoH,mBACLA,EAAkBvS,EAClBA,EAACC,EACDA,EAAC+F,OACDA,EAAMD,MACNA,EAAKyM,KACLA,IAWA,MAAMhT,EAAOuG,EAAQC,EAASD,EAAQC,EAChCzG,EAAOiM,KAAKG,UAAUe,gBAAgB,6BAA8B,QAO1E,GANAnN,EAAK+M,aAAa,IAAK9J,OAAOxC,IAC9BT,EAAK+M,aAAa,IAAK9J,OAAOvC,IAC9BV,EAAK+M,aAAa,SAAU9J,OAAOwD,IACnCzG,EAAK+M,aAAa,QAAS9J,OAAOuD,IAClCxG,EAAK+M,aAAa,YAAa,mBAAmBkG,OAE9CrI,EAAS,CACX,IAAIP,EACJ,GAAIO,EAAQ3G,OAAS5L,EAAYA,aAACqd,OAChCrL,EAAW4B,KAAKG,UAAUe,gBAAgB,6BAA8B,kBACxE9C,EAAS0C,aAAa,KAAMkG,GAC5B5I,EAAS0C,aAAa,gBAAiB,kBACvC1C,EAAS0C,aAAa,KAAM9J,OAAOxC,EAAI+F,EAAQ,IAC/C6D,EAAS0C,aAAa,KAAM9J,OAAOvC,EAAI+F,EAAS,IAChD4D,EAAS0C,aAAa,KAAM9J,OAAOxC,EAAI+F,EAAQ,IAC/C6D,EAAS0C,aAAa,KAAM9J,OAAOvC,EAAI+F,EAAS,IAChD4D,EAAS0C,aAAa,IAAK9J,OAAOhD,EAAO,QACpC,CACL,MAAMuK,IAAaI,EAAQJ,UAAY,GAAKwI,IAAuB,EAAIvX,KAAKuR,IACtE2I,GAAoBnL,EAAW,EAAI/O,KAAKuR,KAAO,EAAIvR,KAAKuR,IAC9D,IAAI4I,EAAKnV,EAAI+F,EAAQ,EACjBqP,EAAKnV,EAAI+F,EAAS,EAClBqP,EAAKrV,EAAI+F,EAAQ,EACjBuP,EAAKrV,EAAI+F,EAAS,EAGnBkP,GAAoB,GAAKA,GAAoB,IAAOla,KAAKuR,IACzD2I,EAAmB,KAAOla,KAAKuR,IAAM2I,GAAoB,EAAIla,KAAKuR,IAEnE4I,GAAUpP,EAAQ,EAClBqP,GAAWpP,EAAS,EAAKhL,KAAKua,IAAIxL,GAClCsL,GAAUtP,EAAQ,EAClBuP,GAAWtP,EAAS,EAAKhL,KAAKua,IAAIxL,IACzBmL,EAAmB,IAAOla,KAAKuR,IAAM2I,GAAoB,IAAOla,KAAKuR,IAC9E6I,GAAUpP,EAAS,EACnBmP,GAAUpP,EAAQ,EAAI/K,KAAKua,IAAIxL,GAC/BuL,GAAUtP,EAAS,EACnBqP,GAAUtP,EAAQ,EAAI/K,KAAKua,IAAIxL,IACtBmL,EAAmB,IAAOla,KAAKuR,IAAM2I,GAAoB,KAAOla,KAAKuR,IAC9E4I,GAAUpP,EAAQ,EAClBqP,GAAWpP,EAAS,EAAKhL,KAAKua,IAAIxL,GAClCsL,GAAUtP,EAAQ,EAClBuP,GAAWtP,EAAS,EAAKhL,KAAKua,IAAIxL,IACzBmL,EAAmB,KAAOla,KAAKuR,IAAM2I,GAAoB,KAAOla,KAAKuR,KAC9E6I,GAAUpP,EAAS,EACnBmP,GAAUpP,EAAQ,EAAI/K,KAAKua,IAAIxL,GAC/BuL,GAAUtP,EAAS,EACnBqP,GAAUtP,EAAQ,EAAI/K,KAAKua,IAAIxL,IAGjCH,EAAW4B,KAAKG,UAAUe,gBAAgB,6BAA8B,kBACxE9C,EAAS0C,aAAa,KAAMkG,GAC5B5I,EAAS0C,aAAa,gBAAiB,kBACvC1C,EAAS0C,aAAa,KAAM9J,OAAOxH,KAAK8W,MAAMqD,KAC9CvL,EAAS0C,aAAa,KAAM9J,OAAOxH,KAAK8W,MAAMsD,KAC9CxL,EAAS0C,aAAa,KAAM9J,OAAOxH,KAAK8W,MAAMuD,KAC9CzL,EAAS0C,aAAa,KAAM9J,OAAOxH,KAAK8W,MAAMwD,IAC/C,CAEDnL,EAAQL,WAAWP,SAAQ,EAAG/M,SAAQ2O,YACpC,MAAMqK,EAAOhK,KAAKG,UAAUe,gBAAgB,6BAA8B,QAC1E8I,EAAKlJ,aAAa,SAAa,IAAM9P,EAAT,KAC5BgZ,EAAKlJ,aAAa,aAAcnB,GAChCvB,EAASsG,YAAYsF,EAAK,IAG5BjW,EAAK+M,aAAa,OAAQ,SAASkG,OACnChH,KAAKyE,MAAMC,YAAYtG,EACxB,MAAUuB,GACT5L,EAAK+M,aAAa,OAAQnB,GAG5BK,KAAKa,SAAS6D,YAAY3Q,EAC3B,QE1iBUkW,EAQX,WAAAnK,CAAYnB,GACVqB,KAAK6E,SAAWlG,EAAUD,EAAgBlB,EAAU8B,EAAgBX,IAA+BW,EACnGU,KAAKkK,QACN,CAED,sBAAOC,CAAgBf,GACjBA,IACFA,EAAUgB,UAAY,GAEzB,CAED,SAAAC,GACE,IAAKrK,KAAKoF,IACR,OAEF,MAAMxO,EAAQpH,KAAKwW,MAAMhG,KAAK6E,SAAStF,OAASlT,YAAUob,OAASjY,KAAKwY,KAAK,GAAK,GAAKhI,KAAKoF,IAAIxS,kBAC1FoB,EAAOgM,KAAK6E,SAAS5F,YAAYjL,MAAQ4C,EAAQ,EAAIoJ,KAAK6E,SAASxR,QACnEiX,EAAQ,IAAI9F,EAAM,IACnBxE,KAAK6E,SACRtK,MAAOvG,EACPwG,OAAQxG,IAGVgM,KAAKC,KAAOqK,EAAMxF,aAClB9E,KAAKuK,mBAAqBD,EAAMvF,OAAO/E,KAAKoF,KAAKhB,MAAK,KAC/CpE,KAAKC,MACVD,KAAKwK,aAAaF,EAAMxF,aAAc9E,KAAK6E,SAAS,GAEvD,CAED,iBAAM4F,GACJ,IAAKzK,KAAKoF,IAAK,KAAM,mBAMrB,OAJKpF,KAAKC,MAASD,KAAKuK,oBACtBvK,KAAKqK,kBAEDrK,KAAKuK,mBACJvK,KAAKC,IACb,CAED,MAAAiK,CAAOvL,GACLsL,EAAcE,gBAAgBnK,KAAK0K,YACnC1K,KAAK6E,SAAWlG,EAAUD,EAAgBlB,EAAUwC,KAAK6E,SAAUlG,IAA+BqB,KAAK6E,SAElG7E,KAAK6E,SAASnV,OAInBsQ,KAAKoF,IAAM/X,EAAO2S,KAAK6E,SAASpF,UAAUnS,WAAY0S,KAAK6E,SAASpF,UAAUlS,sBAC9EyS,KAAKoF,IAAIjT,QAAQ6N,KAAK6E,SAASnV,KAAMsQ,KAAK6E,SAASpF,UAAUrN,MC9D3D,SAAkB1C,GACtB,QAAQ,GACN,IAAK,WAAWzB,KAAKyB,GACnB,OAAO5C,EAAAA,KAAK6d,QACd,IAAK,wBAAwB1c,KAAKyB,GAChC,OAAO5C,EAAAA,KAAK8d,aACd,QACE,OAAO9d,EAAAA,KAAK+d,KAElB,CDqDyEpa,CAAQuP,KAAK6E,SAASnV,OAC3FsQ,KAAKoF,IAAIvS,OAETmN,KAAKqK,YAELrK,KAAK8K,OAAO9K,KAAK0K,YAClB,CAED,MAAAI,CAAO1B,GACL,GAAKA,EAAL,CAIA,GAAqC,mBAA1BA,EAAU1E,YACnB,KAAM,wCAGJ1E,KAAKC,MACPmJ,EAAU1E,YAAY1E,KAAKC,MAG7BD,KAAK0K,WAAatB,CAVjB,CAWF,CAED,cAAA2B,CAAeC,GACb,IAAKA,EACH,KAAM,wCAGRhL,KAAKwK,WAAaQ,EAClBhL,KAAKkK,QACN,CAED,eAAAe,GACEjL,KAAKwK,gBAAa5M,EAClBoC,KAAKkK,QACN,CAED,eAAMgB,GACJ,IAAKlL,KAAKoF,IAAK,KAAM,mBAErB,MAAMwB,QAAgB5G,KAAKyK,cAE3B,IAAK7D,EACH,OAIF,IAAIjJ,GADe,IAAIwN,eACCC,kBAAkBxE,GAG1C,OADAjJ,EAAS,4CAA8CA,EAChDA,CACR,EE9Ga,SAAA0N,EACdC,EACA3M,GAEA,IAAK2M,EAAOlG,IACV,OAGF,MAAM7K,MAAEA,EAAKC,OAAEA,EAAMnH,OAAEA,GAAWsL,EV2D9B,SAAgCA,GACpC,MAAMC,EAAa,IAAKD,GAUxB,OARAC,EAAWrE,MAAQiE,OAAOI,EAAWrE,OACrCqE,EAAWpE,OAASgE,OAAOI,EAAWpE,QACtCoE,EAAWvL,OAASmL,OAAOI,EAAWvL,QAElCuL,EAAWvL,OAAS7D,KAAK+E,IAAIqK,EAAWrE,MAAOqE,EAAWpE,UAC5DoE,EAAWvL,OAAS7D,KAAK+E,IAAIqK,EAAWrE,MAAOqE,EAAWpE,SAGrDoE,CACT,CUtEM2M,CAAsB/N,EAAUoC,EAAsBjB,IACtDiB,EAEE4L,EAASnM,SAASoM,cAAc,UACtCD,EAAOjR,MAAQA,EACfiR,EAAOhR,OAASA,EAEhB,MAAMxG,EAAOxE,KAAK+E,IAAIgG,EAAOC,GAAU,EAAInH,EAE3CiY,EAAOjB,YACP,MAAMqB,EAAuBJ,EAAOf,oBAAoBnG,MAAKuH,UAC3D,IAAKL,EAAOrL,KAAM,OAElB,MAAM2L,QAAYN,EAAOJ,YACzB,IAAKU,EAAK,OACV,MACMC,EAAU,6BADFC,KAAKF,GAEb3H,EAAQ,IAAIC,MAElB,OAAO,IAAIpB,SAAc,CAACC,EAASC,KACjCiB,EAAMd,OAAS,KACbqI,GAAQO,WAAW,OAAOpF,UAAU1C,GAAQ1J,EAAQvG,GAAQ,GAAIwG,EAASxG,GAAQ,EAAGA,EAAMA,GAC1F+O,GAAS,EAEXkB,EAAMP,QAAUO,EAAMN,QAAUX,EAEhCiB,EAAME,IAAM0H,CAAO,GACnB,IAGJ,MAAO,CAAEL,SAAQE,uBACnB,CAyCgB,SAAAM,EAAYC,EAAajF,GACvC,MAAMkF,EAAO7M,SAASoM,cAAc,KACpCS,EAAKC,SAAWnF,EAChBkF,EAAKE,KAAOH,EACZ5M,SAASgN,KAAK3H,YAAYwH,GAC1BA,EAAKI,QACLjN,SAASgN,KAAKE,YAAYL,EAC5B,8CA9COP,eACLL,EACAkB,EACA7N,GAEA,IAAK2M,EAAOlG,IAAK,KAAM,mBACvB,IAAI4F,EAAYje,EAAaA,cAAC0f,IAC1BzF,EAAO,KAiBX,GAd+B,iBAApBwF,GACTxB,EAAYwB,EACZE,QAAQC,KACN,gIAEkC,iBAApBH,GAAoD,OAApBA,IAC5CA,EAAgBxF,OAClBA,EAAOwF,EAAgBxF,MAErBwF,EAAgBxB,YAClBA,EAAYwB,EAAgBxB,YAIA,QAA5BA,EAAU4B,cAAyB,CACrC,IAAIjP,QAAe2N,EAAOJ,YAC1BvN,EAAS,4CAA8CA,EAEvDqO,EADY,oCAAsCa,mBAAmBlP,GACpD,GAAGqJ,QACrB,KAAM,CACL,MAAM8F,EAAMzB,EAAaC,EAAQ3M,GACjC,IAAKmO,EAAK,OACV,MAAMtB,OAAEA,EAAME,qBAAEA,GAAyBoB,QACnCpB,EAENM,EADYR,EAAO5I,UAAU,SAASoI,KACrB,GAAGhE,KAAQgE,IAC7B,CACH","x_google_ignoreList":[2]}
|
|
1
|
+
{"version":3,"file":"qr-code-styling.js","sources":["../src/types/index.ts","../src/constants/errorCorrectionPercents.ts","../node_modules/qrcode-generator/qrcode.js","../src/tools/merge.ts","../src/tools/sanitizeOptions.ts","../src/core/QROptions.ts","../src/figures/cornerDot/QRCornerDot.ts","../src/figures/cornerSquare/QRCornerSquare.ts","../src/figures/dot/QRDot.ts","../src/tools/browserImageTools.ts","../src/core/QRSVG.ts","../src/tools/calculateImageSize.ts","../src/core/QRCodeStyling.ts","../src/tools/getMode.ts","../src/tools/browserUtils.ts"],"sourcesContent":["import { browserImageTools } from \"../tools/browserImageTools\";\n\nexport interface UnknownObject {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n [key: string]: any;\n}\n\nexport enum DotType {\n dots = \"dots\",\n rounded = \"rounded\",\n classy = \"classy\",\n classyRounded = \"classy-rounded\",\n square = \"square\",\n extraRounded = \"extra-rounded\"\n}\nexport enum CornerDotType {\n dot = \"dot\",\n square = \"square\"\n}\nexport enum CornerSquareType {\n dot = \"dot\",\n square = \"square\",\n extraRounded = \"extra-rounded\"\n}\nexport enum GradientType {\n radial = \"radial\",\n linear = \"linear\"\n}\nexport enum ShapeType {\n square = \"square\",\n circle = \"circle\"\n}\n\nexport type Gradient = {\n type: GradientType;\n rotation?: number;\n colorStops: {\n offset: number;\n color: string;\n }[];\n};\n\ntype TypeNumber =\n | 0\n | 1\n | 2\n | 3\n | 4\n | 5\n | 6\n | 7\n | 8\n | 9\n | 10\n | 11\n | 12\n | 13\n | 14\n | 15\n | 16\n | 17\n | 18\n | 19\n | 20\n | 21\n | 22\n | 23\n | 24\n | 25\n | 26\n | 27\n | 28\n | 29\n | 30\n | 31\n | 32\n | 33\n | 34\n | 35\n | 36\n | 37\n | 38\n | 39\n | 40;\n\nconst TypeNumber = Array(41)\n .fill(0)\n .map((_, i) => i) as unknown as {\n [P in TypeNumber]: P;\n};\n\nexport { TypeNumber };\n\nexport enum ErrorCorrectionLevel {\n L = \"L\",\n M = \"M\",\n Q = \"Q\",\n H = \"H\"\n}\nexport enum Mode {\n numeric = \"Numeric\",\n alphanumeric = \"Alphanumeric\",\n byte = \"Byte\",\n kanji = \"Kanji\"\n}\nexport interface QRCode {\n addData(data: string, mode?: Mode): void;\n make(): void;\n getModuleCount(): number;\n isDark(row: number, col: number): boolean;\n}\n\nexport type Options = {\n document?: Document;\n shape?: ShapeType;\n width?: number;\n height?: number;\n margin?: number;\n data?: string;\n image?: string | Buffer | Blob;\n imageTools?: typeof browserImageTools;\n qrOptions?: {\n typeNumber?: TypeNumber;\n mode?: Mode;\n errorCorrectionLevel?: ErrorCorrectionLevel;\n };\n imageOptions?: {\n hideBackgroundDots?: boolean;\n imageSize?: number;\n crossOrigin?: string;\n margin?: number;\n };\n dotsOptions?: {\n type?: DotType;\n color?: string;\n gradient?: Gradient;\n };\n cornersSquareOptions?: {\n type?: CornerSquareType;\n color?: string;\n gradient?: Gradient;\n };\n cornersDotOptions?: {\n type?: CornerDotType;\n color?: string;\n gradient?: Gradient;\n };\n backgroundOptions?:\n | {\n round?: number;\n color?: string;\n gradient?: Gradient;\n }\n | false;\n};\n\nexport type CanvasOptions = {\n width?: number;\n height?: number;\n margin?: number;\n};\n\nexport type FilterFunction = (i: number, j: number) => boolean;\n\nexport type DrawArgs = {\n x: number;\n y: number;\n size: number;\n rotation?: number;\n getNeighbor?: GetNeighbor;\n};\n\nexport type BasicFigureDrawArgs = {\n x: number;\n y: number;\n size: number;\n rotation?: number;\n};\n\nexport type RotateFigureArgs = {\n x: number;\n y: number;\n size: number;\n rotation?: number;\n draw: () => void;\n};\n\nexport type GetNeighbor = (x: number, y: number) => boolean;\n\nexport type ExtensionFunction = (svg: SVGElement, options: Options) => void;\n\nexport enum FileExtension {\n svg = \"svg\",\n png = \"png\",\n jpeg = \"jpeg\",\n webp = \"webp\"\n}\n","import { ErrorCorrectionLevel } from \"../types\";\n\nexport const ErrorCorrectionPercents = {\n [ErrorCorrectionLevel.L]: 0.07,\n [ErrorCorrectionLevel.M]: 0.15,\n [ErrorCorrectionLevel.Q]: 0.25,\n [ErrorCorrectionLevel.H]: 0.3\n};\n","//---------------------------------------------------------------------\n//\n// QR Code Generator for JavaScript\n//\n// Copyright (c) 2009 Kazuhiko Arase\n//\n// URL: http://www.d-project.com/\n//\n// Licensed under the MIT license:\n// http://www.opensource.org/licenses/mit-license.php\n//\n// The word 'QR Code' is registered trademark of\n// DENSO WAVE INCORPORATED\n// http://www.denso-wave.com/qrcode/faqpatent-e.html\n//\n//---------------------------------------------------------------------\n\nvar qrcode = function() {\n\n //---------------------------------------------------------------------\n // qrcode\n //---------------------------------------------------------------------\n\n /**\n * qrcode\n * @param typeNumber 1 to 40\n * @param errorCorrectionLevel 'L','M','Q','H'\n */\n var qrcode = function(typeNumber, errorCorrectionLevel) {\n\n var PAD0 = 0xEC;\n var PAD1 = 0x11;\n\n var _typeNumber = typeNumber;\n var _errorCorrectionLevel = QRErrorCorrectionLevel[errorCorrectionLevel];\n var _modules = null;\n var _moduleCount = 0;\n var _dataCache = null;\n var _dataList = [];\n\n var _this = {};\n\n var makeImpl = function(test, maskPattern) {\n\n _moduleCount = _typeNumber * 4 + 17;\n _modules = function(moduleCount) {\n var modules = new Array(moduleCount);\n for (var row = 0; row < moduleCount; row += 1) {\n modules[row] = new Array(moduleCount);\n for (var col = 0; col < moduleCount; col += 1) {\n modules[row][col] = null;\n }\n }\n return modules;\n }(_moduleCount);\n\n setupPositionProbePattern(0, 0);\n setupPositionProbePattern(_moduleCount - 7, 0);\n setupPositionProbePattern(0, _moduleCount - 7);\n setupPositionAdjustPattern();\n setupTimingPattern();\n setupTypeInfo(test, maskPattern);\n\n if (_typeNumber >= 7) {\n setupTypeNumber(test);\n }\n\n if (_dataCache == null) {\n _dataCache = createData(_typeNumber, _errorCorrectionLevel, _dataList);\n }\n\n mapData(_dataCache, maskPattern);\n };\n\n var setupPositionProbePattern = function(row, col) {\n\n for (var r = -1; r <= 7; r += 1) {\n\n if (row + r <= -1 || _moduleCount <= row + r) continue;\n\n for (var c = -1; c <= 7; c += 1) {\n\n if (col + c <= -1 || _moduleCount <= col + c) continue;\n\n if ( (0 <= r && r <= 6 && (c == 0 || c == 6) )\n || (0 <= c && c <= 6 && (r == 0 || r == 6) )\n || (2 <= r && r <= 4 && 2 <= c && c <= 4) ) {\n _modules[row + r][col + c] = true;\n } else {\n _modules[row + r][col + c] = false;\n }\n }\n }\n };\n\n var getBestMaskPattern = function() {\n\n var minLostPoint = 0;\n var pattern = 0;\n\n for (var i = 0; i < 8; i += 1) {\n\n makeImpl(true, i);\n\n var lostPoint = QRUtil.getLostPoint(_this);\n\n if (i == 0 || minLostPoint > lostPoint) {\n minLostPoint = lostPoint;\n pattern = i;\n }\n }\n\n return pattern;\n };\n\n var setupTimingPattern = function() {\n\n for (var r = 8; r < _moduleCount - 8; r += 1) {\n if (_modules[r][6] != null) {\n continue;\n }\n _modules[r][6] = (r % 2 == 0);\n }\n\n for (var c = 8; c < _moduleCount - 8; c += 1) {\n if (_modules[6][c] != null) {\n continue;\n }\n _modules[6][c] = (c % 2 == 0);\n }\n };\n\n var setupPositionAdjustPattern = function() {\n\n var pos = QRUtil.getPatternPosition(_typeNumber);\n\n for (var i = 0; i < pos.length; i += 1) {\n\n for (var j = 0; j < pos.length; j += 1) {\n\n var row = pos[i];\n var col = pos[j];\n\n if (_modules[row][col] != null) {\n continue;\n }\n\n for (var r = -2; r <= 2; r += 1) {\n\n for (var c = -2; c <= 2; c += 1) {\n\n if (r == -2 || r == 2 || c == -2 || c == 2\n || (r == 0 && c == 0) ) {\n _modules[row + r][col + c] = true;\n } else {\n _modules[row + r][col + c] = false;\n }\n }\n }\n }\n }\n };\n\n var setupTypeNumber = function(test) {\n\n var bits = QRUtil.getBCHTypeNumber(_typeNumber);\n\n for (var i = 0; i < 18; i += 1) {\n var mod = (!test && ( (bits >> i) & 1) == 1);\n _modules[Math.floor(i / 3)][i % 3 + _moduleCount - 8 - 3] = mod;\n }\n\n for (var i = 0; i < 18; i += 1) {\n var mod = (!test && ( (bits >> i) & 1) == 1);\n _modules[i % 3 + _moduleCount - 8 - 3][Math.floor(i / 3)] = mod;\n }\n };\n\n var setupTypeInfo = function(test, maskPattern) {\n\n var data = (_errorCorrectionLevel << 3) | maskPattern;\n var bits = QRUtil.getBCHTypeInfo(data);\n\n // vertical\n for (var i = 0; i < 15; i += 1) {\n\n var mod = (!test && ( (bits >> i) & 1) == 1);\n\n if (i < 6) {\n _modules[i][8] = mod;\n } else if (i < 8) {\n _modules[i + 1][8] = mod;\n } else {\n _modules[_moduleCount - 15 + i][8] = mod;\n }\n }\n\n // horizontal\n for (var i = 0; i < 15; i += 1) {\n\n var mod = (!test && ( (bits >> i) & 1) == 1);\n\n if (i < 8) {\n _modules[8][_moduleCount - i - 1] = mod;\n } else if (i < 9) {\n _modules[8][15 - i - 1 + 1] = mod;\n } else {\n _modules[8][15 - i - 1] = mod;\n }\n }\n\n // fixed module\n _modules[_moduleCount - 8][8] = (!test);\n };\n\n var mapData = function(data, maskPattern) {\n\n var inc = -1;\n var row = _moduleCount - 1;\n var bitIndex = 7;\n var byteIndex = 0;\n var maskFunc = QRUtil.getMaskFunction(maskPattern);\n\n for (var col = _moduleCount - 1; col > 0; col -= 2) {\n\n if (col == 6) col -= 1;\n\n while (true) {\n\n for (var c = 0; c < 2; c += 1) {\n\n if (_modules[row][col - c] == null) {\n\n var dark = false;\n\n if (byteIndex < data.length) {\n dark = ( ( (data[byteIndex] >>> bitIndex) & 1) == 1);\n }\n\n var mask = maskFunc(row, col - c);\n\n if (mask) {\n dark = !dark;\n }\n\n _modules[row][col - c] = dark;\n bitIndex -= 1;\n\n if (bitIndex == -1) {\n byteIndex += 1;\n bitIndex = 7;\n }\n }\n }\n\n row += inc;\n\n if (row < 0 || _moduleCount <= row) {\n row -= inc;\n inc = -inc;\n break;\n }\n }\n }\n };\n\n var createBytes = function(buffer, rsBlocks) {\n\n var offset = 0;\n\n var maxDcCount = 0;\n var maxEcCount = 0;\n\n var dcdata = new Array(rsBlocks.length);\n var ecdata = new Array(rsBlocks.length);\n\n for (var r = 0; r < rsBlocks.length; r += 1) {\n\n var dcCount = rsBlocks[r].dataCount;\n var ecCount = rsBlocks[r].totalCount - dcCount;\n\n maxDcCount = Math.max(maxDcCount, dcCount);\n maxEcCount = Math.max(maxEcCount, ecCount);\n\n dcdata[r] = new Array(dcCount);\n\n for (var i = 0; i < dcdata[r].length; i += 1) {\n dcdata[r][i] = 0xff & buffer.getBuffer()[i + offset];\n }\n offset += dcCount;\n\n var rsPoly = QRUtil.getErrorCorrectPolynomial(ecCount);\n var rawPoly = qrPolynomial(dcdata[r], rsPoly.getLength() - 1);\n\n var modPoly = rawPoly.mod(rsPoly);\n ecdata[r] = new Array(rsPoly.getLength() - 1);\n for (var i = 0; i < ecdata[r].length; i += 1) {\n var modIndex = i + modPoly.getLength() - ecdata[r].length;\n ecdata[r][i] = (modIndex >= 0)? modPoly.getAt(modIndex) : 0;\n }\n }\n\n var totalCodeCount = 0;\n for (var i = 0; i < rsBlocks.length; i += 1) {\n totalCodeCount += rsBlocks[i].totalCount;\n }\n\n var data = new Array(totalCodeCount);\n var index = 0;\n\n for (var i = 0; i < maxDcCount; i += 1) {\n for (var r = 0; r < rsBlocks.length; r += 1) {\n if (i < dcdata[r].length) {\n data[index] = dcdata[r][i];\n index += 1;\n }\n }\n }\n\n for (var i = 0; i < maxEcCount; i += 1) {\n for (var r = 0; r < rsBlocks.length; r += 1) {\n if (i < ecdata[r].length) {\n data[index] = ecdata[r][i];\n index += 1;\n }\n }\n }\n\n return data;\n };\n\n var createData = function(typeNumber, errorCorrectionLevel, dataList) {\n\n var rsBlocks = QRRSBlock.getRSBlocks(typeNumber, errorCorrectionLevel);\n\n var buffer = qrBitBuffer();\n\n for (var i = 0; i < dataList.length; i += 1) {\n var data = dataList[i];\n buffer.put(data.getMode(), 4);\n buffer.put(data.getLength(), QRUtil.getLengthInBits(data.getMode(), typeNumber) );\n data.write(buffer);\n }\n\n // calc num max data.\n var totalDataCount = 0;\n for (var i = 0; i < rsBlocks.length; i += 1) {\n totalDataCount += rsBlocks[i].dataCount;\n }\n\n if (buffer.getLengthInBits() > totalDataCount * 8) {\n throw 'code length overflow. ('\n + buffer.getLengthInBits()\n + '>'\n + totalDataCount * 8\n + ')';\n }\n\n // end code\n if (buffer.getLengthInBits() + 4 <= totalDataCount * 8) {\n buffer.put(0, 4);\n }\n\n // padding\n while (buffer.getLengthInBits() % 8 != 0) {\n buffer.putBit(false);\n }\n\n // padding\n while (true) {\n\n if (buffer.getLengthInBits() >= totalDataCount * 8) {\n break;\n }\n buffer.put(PAD0, 8);\n\n if (buffer.getLengthInBits() >= totalDataCount * 8) {\n break;\n }\n buffer.put(PAD1, 8);\n }\n\n return createBytes(buffer, rsBlocks);\n };\n\n _this.addData = function(data, mode) {\n\n mode = mode || 'Byte';\n\n var newData = null;\n\n switch(mode) {\n case 'Numeric' :\n newData = qrNumber(data);\n break;\n case 'Alphanumeric' :\n newData = qrAlphaNum(data);\n break;\n case 'Byte' :\n newData = qr8BitByte(data);\n break;\n case 'Kanji' :\n newData = qrKanji(data);\n break;\n default :\n throw 'mode:' + mode;\n }\n\n _dataList.push(newData);\n _dataCache = null;\n };\n\n _this.isDark = function(row, col) {\n if (row < 0 || _moduleCount <= row || col < 0 || _moduleCount <= col) {\n throw row + ',' + col;\n }\n return _modules[row][col];\n };\n\n _this.getModuleCount = function() {\n return _moduleCount;\n };\n\n _this.make = function() {\n if (_typeNumber < 1) {\n var typeNumber = 1;\n\n for (; typeNumber < 40; typeNumber++) {\n var rsBlocks = QRRSBlock.getRSBlocks(typeNumber, _errorCorrectionLevel);\n var buffer = qrBitBuffer();\n\n for (var i = 0; i < _dataList.length; i++) {\n var data = _dataList[i];\n buffer.put(data.getMode(), 4);\n buffer.put(data.getLength(), QRUtil.getLengthInBits(data.getMode(), typeNumber) );\n data.write(buffer);\n }\n\n var totalDataCount = 0;\n for (var i = 0; i < rsBlocks.length; i++) {\n totalDataCount += rsBlocks[i].dataCount;\n }\n\n if (buffer.getLengthInBits() <= totalDataCount * 8) {\n break;\n }\n }\n\n _typeNumber = typeNumber;\n }\n\n makeImpl(false, getBestMaskPattern() );\n };\n\n _this.createTableTag = function(cellSize, margin) {\n\n cellSize = cellSize || 2;\n margin = (typeof margin == 'undefined')? cellSize * 4 : margin;\n\n var qrHtml = '';\n\n qrHtml += '<table style=\"';\n qrHtml += ' border-width: 0px; border-style: none;';\n qrHtml += ' border-collapse: collapse;';\n qrHtml += ' padding: 0px; margin: ' + margin + 'px;';\n qrHtml += '\">';\n qrHtml += '<tbody>';\n\n for (var r = 0; r < _this.getModuleCount(); r += 1) {\n\n qrHtml += '<tr>';\n\n for (var c = 0; c < _this.getModuleCount(); c += 1) {\n qrHtml += '<td style=\"';\n qrHtml += ' border-width: 0px; border-style: none;';\n qrHtml += ' border-collapse: collapse;';\n qrHtml += ' padding: 0px; margin: 0px;';\n qrHtml += ' width: ' + cellSize + 'px;';\n qrHtml += ' height: ' + cellSize + 'px;';\n qrHtml += ' background-color: ';\n qrHtml += _this.isDark(r, c)? '#000000' : '#ffffff';\n qrHtml += ';';\n qrHtml += '\"/>';\n }\n\n qrHtml += '</tr>';\n }\n\n qrHtml += '</tbody>';\n qrHtml += '</table>';\n\n return qrHtml;\n };\n\n _this.createSvgTag = function(cellSize, margin, alt, title) {\n\n var opts = {};\n if (typeof arguments[0] == 'object') {\n // Called by options.\n opts = arguments[0];\n // overwrite cellSize and margin.\n cellSize = opts.cellSize;\n margin = opts.margin;\n alt = opts.alt;\n title = opts.title;\n }\n\n cellSize = cellSize || 2;\n margin = (typeof margin == 'undefined')? cellSize * 4 : margin;\n\n // Compose alt property surrogate\n alt = (typeof alt === 'string') ? {text: alt} : alt || {};\n alt.text = alt.text || null;\n alt.id = (alt.text) ? alt.id || 'qrcode-description' : null;\n\n // Compose title property surrogate\n title = (typeof title === 'string') ? {text: title} : title || {};\n title.text = title.text || null;\n title.id = (title.text) ? title.id || 'qrcode-title' : null;\n\n var size = _this.getModuleCount() * cellSize + margin * 2;\n var c, mc, r, mr, qrSvg='', rect;\n\n rect = 'l' + cellSize + ',0 0,' + cellSize +\n ' -' + cellSize + ',0 0,-' + cellSize + 'z ';\n\n qrSvg += '<svg version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\"';\n qrSvg += !opts.scalable ? ' width=\"' + size + 'px\" height=\"' + size + 'px\"' : '';\n qrSvg += ' viewBox=\"0 0 ' + size + ' ' + size + '\" ';\n qrSvg += ' preserveAspectRatio=\"xMinYMin meet\"';\n qrSvg += (title.text || alt.text) ? ' role=\"img\" aria-labelledby=\"' +\n escapeXml([title.id, alt.id].join(' ').trim() ) + '\"' : '';\n qrSvg += '>';\n qrSvg += (title.text) ? '<title id=\"' + escapeXml(title.id) + '\">' +\n escapeXml(title.text) + '</title>' : '';\n qrSvg += (alt.text) ? '<description id=\"' + escapeXml(alt.id) + '\">' +\n escapeXml(alt.text) + '</description>' : '';\n qrSvg += '<rect width=\"100%\" height=\"100%\" fill=\"white\" cx=\"0\" cy=\"0\"/>';\n qrSvg += '<path d=\"';\n\n for (r = 0; r < _this.getModuleCount(); r += 1) {\n mr = r * cellSize + margin;\n for (c = 0; c < _this.getModuleCount(); c += 1) {\n if (_this.isDark(r, c) ) {\n mc = c*cellSize+margin;\n qrSvg += 'M' + mc + ',' + mr + rect;\n }\n }\n }\n\n qrSvg += '\" stroke=\"transparent\" fill=\"black\"/>';\n qrSvg += '</svg>';\n\n return qrSvg;\n };\n\n _this.createDataURL = function(cellSize, margin) {\n\n cellSize = cellSize || 2;\n margin = (typeof margin == 'undefined')? cellSize * 4 : margin;\n\n var size = _this.getModuleCount() * cellSize + margin * 2;\n var min = margin;\n var max = size - margin;\n\n return createDataURL(size, size, function(x, y) {\n if (min <= x && x < max && min <= y && y < max) {\n var c = Math.floor( (x - min) / cellSize);\n var r = Math.floor( (y - min) / cellSize);\n return _this.isDark(r, c)? 0 : 1;\n } else {\n return 1;\n }\n } );\n };\n\n _this.createImgTag = function(cellSize, margin, alt) {\n\n cellSize = cellSize || 2;\n margin = (typeof margin == 'undefined')? cellSize * 4 : margin;\n\n var size = _this.getModuleCount() * cellSize + margin * 2;\n\n var img = '';\n img += '<img';\n img += '\\u0020src=\"';\n img += _this.createDataURL(cellSize, margin);\n img += '\"';\n img += '\\u0020width=\"';\n img += size;\n img += '\"';\n img += '\\u0020height=\"';\n img += size;\n img += '\"';\n if (alt) {\n img += '\\u0020alt=\"';\n img += escapeXml(alt);\n img += '\"';\n }\n img += '/>';\n\n return img;\n };\n\n var escapeXml = function(s) {\n var escaped = '';\n for (var i = 0; i < s.length; i += 1) {\n var c = s.charAt(i);\n switch(c) {\n case '<': escaped += '<'; break;\n case '>': escaped += '>'; break;\n case '&': escaped += '&'; break;\n case '\"': escaped += '"'; break;\n default : escaped += c; break;\n }\n }\n return escaped;\n };\n\n var _createHalfASCII = function(margin) {\n var cellSize = 1;\n margin = (typeof margin == 'undefined')? cellSize * 2 : margin;\n\n var size = _this.getModuleCount() * cellSize + margin * 2;\n var min = margin;\n var max = size - margin;\n\n var y, x, r1, r2, p;\n\n var blocks = {\n '██': '█',\n '█ ': '▀',\n ' █': '▄',\n ' ': ' '\n };\n\n var blocksLastLineNoMargin = {\n '██': '▀',\n '█ ': '▀',\n ' █': ' ',\n ' ': ' '\n };\n\n var ascii = '';\n for (y = 0; y < size; y += 2) {\n r1 = Math.floor((y - min) / cellSize);\n r2 = Math.floor((y + 1 - min) / cellSize);\n for (x = 0; x < size; x += 1) {\n p = '█';\n\n if (min <= x && x < max && min <= y && y < max && _this.isDark(r1, Math.floor((x - min) / cellSize))) {\n p = ' ';\n }\n\n if (min <= x && x < max && min <= y+1 && y+1 < max && _this.isDark(r2, Math.floor((x - min) / cellSize))) {\n p += ' ';\n }\n else {\n p += '█';\n }\n\n // Output 2 characters per pixel, to create full square. 1 character per pixels gives only half width of square.\n ascii += (margin < 1 && y+1 >= max) ? blocksLastLineNoMargin[p] : blocks[p];\n }\n\n ascii += '\\n';\n }\n\n if (size % 2 && margin > 0) {\n return ascii.substring(0, ascii.length - size - 1) + Array(size+1).join('▀');\n }\n\n return ascii.substring(0, ascii.length-1);\n };\n\n _this.createASCII = function(cellSize, margin) {\n cellSize = cellSize || 1;\n\n if (cellSize < 2) {\n return _createHalfASCII(margin);\n }\n\n cellSize -= 1;\n margin = (typeof margin == 'undefined')? cellSize * 2 : margin;\n\n var size = _this.getModuleCount() * cellSize + margin * 2;\n var min = margin;\n var max = size - margin;\n\n var y, x, r, p;\n\n var white = Array(cellSize+1).join('██');\n var black = Array(cellSize+1).join(' ');\n\n var ascii = '';\n var line = '';\n for (y = 0; y < size; y += 1) {\n r = Math.floor( (y - min) / cellSize);\n line = '';\n for (x = 0; x < size; x += 1) {\n p = 1;\n\n if (min <= x && x < max && min <= y && y < max && _this.isDark(r, Math.floor((x - min) / cellSize))) {\n p = 0;\n }\n\n // Output 2 characters per pixel, to create full square. 1 character per pixels gives only half width of square.\n line += p ? white : black;\n }\n\n for (r = 0; r < cellSize; r += 1) {\n ascii += line + '\\n';\n }\n }\n\n return ascii.substring(0, ascii.length-1);\n };\n\n _this.renderTo2dContext = function(context, cellSize) {\n cellSize = cellSize || 2;\n var length = _this.getModuleCount();\n for (var row = 0; row < length; row++) {\n for (var col = 0; col < length; col++) {\n context.fillStyle = _this.isDark(row, col) ? 'black' : 'white';\n context.fillRect(row * cellSize, col * cellSize, cellSize, cellSize);\n }\n }\n }\n\n return _this;\n };\n\n //---------------------------------------------------------------------\n // qrcode.stringToBytes\n //---------------------------------------------------------------------\n\n qrcode.stringToBytesFuncs = {\n 'default' : function(s) {\n var bytes = [];\n for (var i = 0; i < s.length; i += 1) {\n var c = s.charCodeAt(i);\n bytes.push(c & 0xff);\n }\n return bytes;\n }\n };\n\n qrcode.stringToBytes = qrcode.stringToBytesFuncs['default'];\n\n //---------------------------------------------------------------------\n // qrcode.createStringToBytes\n //---------------------------------------------------------------------\n\n /**\n * @param unicodeData base64 string of byte array.\n * [16bit Unicode],[16bit Bytes], ...\n * @param numChars\n */\n qrcode.createStringToBytes = function(unicodeData, numChars) {\n\n // create conversion map.\n\n var unicodeMap = function() {\n\n var bin = base64DecodeInputStream(unicodeData);\n var read = function() {\n var b = bin.read();\n if (b == -1) throw 'eof';\n return b;\n };\n\n var count = 0;\n var unicodeMap = {};\n while (true) {\n var b0 = bin.read();\n if (b0 == -1) break;\n var b1 = read();\n var b2 = read();\n var b3 = read();\n var k = String.fromCharCode( (b0 << 8) | b1);\n var v = (b2 << 8) | b3;\n unicodeMap[k] = v;\n count += 1;\n }\n if (count != numChars) {\n throw count + ' != ' + numChars;\n }\n\n return unicodeMap;\n }();\n\n var unknownChar = '?'.charCodeAt(0);\n\n return function(s) {\n var bytes = [];\n for (var i = 0; i < s.length; i += 1) {\n var c = s.charCodeAt(i);\n if (c < 128) {\n bytes.push(c);\n } else {\n var b = unicodeMap[s.charAt(i)];\n if (typeof b == 'number') {\n if ( (b & 0xff) == b) {\n // 1byte\n bytes.push(b);\n } else {\n // 2bytes\n bytes.push(b >>> 8);\n bytes.push(b & 0xff);\n }\n } else {\n bytes.push(unknownChar);\n }\n }\n }\n return bytes;\n };\n };\n\n //---------------------------------------------------------------------\n // QRMode\n //---------------------------------------------------------------------\n\n var QRMode = {\n MODE_NUMBER : 1 << 0,\n MODE_ALPHA_NUM : 1 << 1,\n MODE_8BIT_BYTE : 1 << 2,\n MODE_KANJI : 1 << 3\n };\n\n //---------------------------------------------------------------------\n // QRErrorCorrectionLevel\n //---------------------------------------------------------------------\n\n var QRErrorCorrectionLevel = {\n L : 1,\n M : 0,\n Q : 3,\n H : 2\n };\n\n //---------------------------------------------------------------------\n // QRMaskPattern\n //---------------------------------------------------------------------\n\n var QRMaskPattern = {\n PATTERN000 : 0,\n PATTERN001 : 1,\n PATTERN010 : 2,\n PATTERN011 : 3,\n PATTERN100 : 4,\n PATTERN101 : 5,\n PATTERN110 : 6,\n PATTERN111 : 7\n };\n\n //---------------------------------------------------------------------\n // QRUtil\n //---------------------------------------------------------------------\n\n var QRUtil = function() {\n\n var PATTERN_POSITION_TABLE = [\n [],\n [6, 18],\n [6, 22],\n [6, 26],\n [6, 30],\n [6, 34],\n [6, 22, 38],\n [6, 24, 42],\n [6, 26, 46],\n [6, 28, 50],\n [6, 30, 54],\n [6, 32, 58],\n [6, 34, 62],\n [6, 26, 46, 66],\n [6, 26, 48, 70],\n [6, 26, 50, 74],\n [6, 30, 54, 78],\n [6, 30, 56, 82],\n [6, 30, 58, 86],\n [6, 34, 62, 90],\n [6, 28, 50, 72, 94],\n [6, 26, 50, 74, 98],\n [6, 30, 54, 78, 102],\n [6, 28, 54, 80, 106],\n [6, 32, 58, 84, 110],\n [6, 30, 58, 86, 114],\n [6, 34, 62, 90, 118],\n [6, 26, 50, 74, 98, 122],\n [6, 30, 54, 78, 102, 126],\n [6, 26, 52, 78, 104, 130],\n [6, 30, 56, 82, 108, 134],\n [6, 34, 60, 86, 112, 138],\n [6, 30, 58, 86, 114, 142],\n [6, 34, 62, 90, 118, 146],\n [6, 30, 54, 78, 102, 126, 150],\n [6, 24, 50, 76, 102, 128, 154],\n [6, 28, 54, 80, 106, 132, 158],\n [6, 32, 58, 84, 110, 136, 162],\n [6, 26, 54, 82, 110, 138, 166],\n [6, 30, 58, 86, 114, 142, 170]\n ];\n var G15 = (1 << 10) | (1 << 8) | (1 << 5) | (1 << 4) | (1 << 2) | (1 << 1) | (1 << 0);\n var G18 = (1 << 12) | (1 << 11) | (1 << 10) | (1 << 9) | (1 << 8) | (1 << 5) | (1 << 2) | (1 << 0);\n var G15_MASK = (1 << 14) | (1 << 12) | (1 << 10) | (1 << 4) | (1 << 1);\n\n var _this = {};\n\n var getBCHDigit = function(data) {\n var digit = 0;\n while (data != 0) {\n digit += 1;\n data >>>= 1;\n }\n return digit;\n };\n\n _this.getBCHTypeInfo = function(data) {\n var d = data << 10;\n while (getBCHDigit(d) - getBCHDigit(G15) >= 0) {\n d ^= (G15 << (getBCHDigit(d) - getBCHDigit(G15) ) );\n }\n return ( (data << 10) | d) ^ G15_MASK;\n };\n\n _this.getBCHTypeNumber = function(data) {\n var d = data << 12;\n while (getBCHDigit(d) - getBCHDigit(G18) >= 0) {\n d ^= (G18 << (getBCHDigit(d) - getBCHDigit(G18) ) );\n }\n return (data << 12) | d;\n };\n\n _this.getPatternPosition = function(typeNumber) {\n return PATTERN_POSITION_TABLE[typeNumber - 1];\n };\n\n _this.getMaskFunction = function(maskPattern) {\n\n switch (maskPattern) {\n\n case QRMaskPattern.PATTERN000 :\n return function(i, j) { return (i + j) % 2 == 0; };\n case QRMaskPattern.PATTERN001 :\n return function(i, j) { return i % 2 == 0; };\n case QRMaskPattern.PATTERN010 :\n return function(i, j) { return j % 3 == 0; };\n case QRMaskPattern.PATTERN011 :\n return function(i, j) { return (i + j) % 3 == 0; };\n case QRMaskPattern.PATTERN100 :\n return function(i, j) { return (Math.floor(i / 2) + Math.floor(j / 3) ) % 2 == 0; };\n case QRMaskPattern.PATTERN101 :\n return function(i, j) { return (i * j) % 2 + (i * j) % 3 == 0; };\n case QRMaskPattern.PATTERN110 :\n return function(i, j) { return ( (i * j) % 2 + (i * j) % 3) % 2 == 0; };\n case QRMaskPattern.PATTERN111 :\n return function(i, j) { return ( (i * j) % 3 + (i + j) % 2) % 2 == 0; };\n\n default :\n throw 'bad maskPattern:' + maskPattern;\n }\n };\n\n _this.getErrorCorrectPolynomial = function(errorCorrectLength) {\n var a = qrPolynomial([1], 0);\n for (var i = 0; i < errorCorrectLength; i += 1) {\n a = a.multiply(qrPolynomial([1, QRMath.gexp(i)], 0) );\n }\n return a;\n };\n\n _this.getLengthInBits = function(mode, type) {\n\n if (1 <= type && type < 10) {\n\n // 1 - 9\n\n switch(mode) {\n case QRMode.MODE_NUMBER : return 10;\n case QRMode.MODE_ALPHA_NUM : return 9;\n case QRMode.MODE_8BIT_BYTE : return 8;\n case QRMode.MODE_KANJI : return 8;\n default :\n throw 'mode:' + mode;\n }\n\n } else if (type < 27) {\n\n // 10 - 26\n\n switch(mode) {\n case QRMode.MODE_NUMBER : return 12;\n case QRMode.MODE_ALPHA_NUM : return 11;\n case QRMode.MODE_8BIT_BYTE : return 16;\n case QRMode.MODE_KANJI : return 10;\n default :\n throw 'mode:' + mode;\n }\n\n } else if (type < 41) {\n\n // 27 - 40\n\n switch(mode) {\n case QRMode.MODE_NUMBER : return 14;\n case QRMode.MODE_ALPHA_NUM : return 13;\n case QRMode.MODE_8BIT_BYTE : return 16;\n case QRMode.MODE_KANJI : return 12;\n default :\n throw 'mode:' + mode;\n }\n\n } else {\n throw 'type:' + type;\n }\n };\n\n _this.getLostPoint = function(qrcode) {\n\n var moduleCount = qrcode.getModuleCount();\n\n var lostPoint = 0;\n\n // LEVEL1\n\n for (var row = 0; row < moduleCount; row += 1) {\n for (var col = 0; col < moduleCount; col += 1) {\n\n var sameCount = 0;\n var dark = qrcode.isDark(row, col);\n\n for (var r = -1; r <= 1; r += 1) {\n\n if (row + r < 0 || moduleCount <= row + r) {\n continue;\n }\n\n for (var c = -1; c <= 1; c += 1) {\n\n if (col + c < 0 || moduleCount <= col + c) {\n continue;\n }\n\n if (r == 0 && c == 0) {\n continue;\n }\n\n if (dark == qrcode.isDark(row + r, col + c) ) {\n sameCount += 1;\n }\n }\n }\n\n if (sameCount > 5) {\n lostPoint += (3 + sameCount - 5);\n }\n }\n };\n\n // LEVEL2\n\n for (var row = 0; row < moduleCount - 1; row += 1) {\n for (var col = 0; col < moduleCount - 1; col += 1) {\n var count = 0;\n if (qrcode.isDark(row, col) ) count += 1;\n if (qrcode.isDark(row + 1, col) ) count += 1;\n if (qrcode.isDark(row, col + 1) ) count += 1;\n if (qrcode.isDark(row + 1, col + 1) ) count += 1;\n if (count == 0 || count == 4) {\n lostPoint += 3;\n }\n }\n }\n\n // LEVEL3\n\n for (var row = 0; row < moduleCount; row += 1) {\n for (var col = 0; col < moduleCount - 6; col += 1) {\n if (qrcode.isDark(row, col)\n && !qrcode.isDark(row, col + 1)\n && qrcode.isDark(row, col + 2)\n && qrcode.isDark(row, col + 3)\n && qrcode.isDark(row, col + 4)\n && !qrcode.isDark(row, col + 5)\n && qrcode.isDark(row, col + 6) ) {\n lostPoint += 40;\n }\n }\n }\n\n for (var col = 0; col < moduleCount; col += 1) {\n for (var row = 0; row < moduleCount - 6; row += 1) {\n if (qrcode.isDark(row, col)\n && !qrcode.isDark(row + 1, col)\n && qrcode.isDark(row + 2, col)\n && qrcode.isDark(row + 3, col)\n && qrcode.isDark(row + 4, col)\n && !qrcode.isDark(row + 5, col)\n && qrcode.isDark(row + 6, col) ) {\n lostPoint += 40;\n }\n }\n }\n\n // LEVEL4\n\n var darkCount = 0;\n\n for (var col = 0; col < moduleCount; col += 1) {\n for (var row = 0; row < moduleCount; row += 1) {\n if (qrcode.isDark(row, col) ) {\n darkCount += 1;\n }\n }\n }\n\n var ratio = Math.abs(100 * darkCount / moduleCount / moduleCount - 50) / 5;\n lostPoint += ratio * 10;\n\n return lostPoint;\n };\n\n return _this;\n }();\n\n //---------------------------------------------------------------------\n // QRMath\n //---------------------------------------------------------------------\n\n var QRMath = function() {\n\n var EXP_TABLE = new Array(256);\n var LOG_TABLE = new Array(256);\n\n // initialize tables\n for (var i = 0; i < 8; i += 1) {\n EXP_TABLE[i] = 1 << i;\n }\n for (var i = 8; i < 256; i += 1) {\n EXP_TABLE[i] = EXP_TABLE[i - 4]\n ^ EXP_TABLE[i - 5]\n ^ EXP_TABLE[i - 6]\n ^ EXP_TABLE[i - 8];\n }\n for (var i = 0; i < 255; i += 1) {\n LOG_TABLE[EXP_TABLE[i] ] = i;\n }\n\n var _this = {};\n\n _this.glog = function(n) {\n\n if (n < 1) {\n throw 'glog(' + n + ')';\n }\n\n return LOG_TABLE[n];\n };\n\n _this.gexp = function(n) {\n\n while (n < 0) {\n n += 255;\n }\n\n while (n >= 256) {\n n -= 255;\n }\n\n return EXP_TABLE[n];\n };\n\n return _this;\n }();\n\n //---------------------------------------------------------------------\n // qrPolynomial\n //---------------------------------------------------------------------\n\n function qrPolynomial(num, shift) {\n\n if (typeof num.length == 'undefined') {\n throw num.length + '/' + shift;\n }\n\n var _num = function() {\n var offset = 0;\n while (offset < num.length && num[offset] == 0) {\n offset += 1;\n }\n var _num = new Array(num.length - offset + shift);\n for (var i = 0; i < num.length - offset; i += 1) {\n _num[i] = num[i + offset];\n }\n return _num;\n }();\n\n var _this = {};\n\n _this.getAt = function(index) {\n return _num[index];\n };\n\n _this.getLength = function() {\n return _num.length;\n };\n\n _this.multiply = function(e) {\n\n var num = new Array(_this.getLength() + e.getLength() - 1);\n\n for (var i = 0; i < _this.getLength(); i += 1) {\n for (var j = 0; j < e.getLength(); j += 1) {\n num[i + j] ^= QRMath.gexp(QRMath.glog(_this.getAt(i) ) + QRMath.glog(e.getAt(j) ) );\n }\n }\n\n return qrPolynomial(num, 0);\n };\n\n _this.mod = function(e) {\n\n if (_this.getLength() - e.getLength() < 0) {\n return _this;\n }\n\n var ratio = QRMath.glog(_this.getAt(0) ) - QRMath.glog(e.getAt(0) );\n\n var num = new Array(_this.getLength() );\n for (var i = 0; i < _this.getLength(); i += 1) {\n num[i] = _this.getAt(i);\n }\n\n for (var i = 0; i < e.getLength(); i += 1) {\n num[i] ^= QRMath.gexp(QRMath.glog(e.getAt(i) ) + ratio);\n }\n\n // recursive call\n return qrPolynomial(num, 0).mod(e);\n };\n\n return _this;\n };\n\n //---------------------------------------------------------------------\n // QRRSBlock\n //---------------------------------------------------------------------\n\n var QRRSBlock = function() {\n\n var RS_BLOCK_TABLE = [\n\n // L\n // M\n // Q\n // H\n\n // 1\n [1, 26, 19],\n [1, 26, 16],\n [1, 26, 13],\n [1, 26, 9],\n\n // 2\n [1, 44, 34],\n [1, 44, 28],\n [1, 44, 22],\n [1, 44, 16],\n\n // 3\n [1, 70, 55],\n [1, 70, 44],\n [2, 35, 17],\n [2, 35, 13],\n\n // 4\n [1, 100, 80],\n [2, 50, 32],\n [2, 50, 24],\n [4, 25, 9],\n\n // 5\n [1, 134, 108],\n [2, 67, 43],\n [2, 33, 15, 2, 34, 16],\n [2, 33, 11, 2, 34, 12],\n\n // 6\n [2, 86, 68],\n [4, 43, 27],\n [4, 43, 19],\n [4, 43, 15],\n\n // 7\n [2, 98, 78],\n [4, 49, 31],\n [2, 32, 14, 4, 33, 15],\n [4, 39, 13, 1, 40, 14],\n\n // 8\n [2, 121, 97],\n [2, 60, 38, 2, 61, 39],\n [4, 40, 18, 2, 41, 19],\n [4, 40, 14, 2, 41, 15],\n\n // 9\n [2, 146, 116],\n [3, 58, 36, 2, 59, 37],\n [4, 36, 16, 4, 37, 17],\n [4, 36, 12, 4, 37, 13],\n\n // 10\n [2, 86, 68, 2, 87, 69],\n [4, 69, 43, 1, 70, 44],\n [6, 43, 19, 2, 44, 20],\n [6, 43, 15, 2, 44, 16],\n\n // 11\n [4, 101, 81],\n [1, 80, 50, 4, 81, 51],\n [4, 50, 22, 4, 51, 23],\n [3, 36, 12, 8, 37, 13],\n\n // 12\n [2, 116, 92, 2, 117, 93],\n [6, 58, 36, 2, 59, 37],\n [4, 46, 20, 6, 47, 21],\n [7, 42, 14, 4, 43, 15],\n\n // 13\n [4, 133, 107],\n [8, 59, 37, 1, 60, 38],\n [8, 44, 20, 4, 45, 21],\n [12, 33, 11, 4, 34, 12],\n\n // 14\n [3, 145, 115, 1, 146, 116],\n [4, 64, 40, 5, 65, 41],\n [11, 36, 16, 5, 37, 17],\n [11, 36, 12, 5, 37, 13],\n\n // 15\n [5, 109, 87, 1, 110, 88],\n [5, 65, 41, 5, 66, 42],\n [5, 54, 24, 7, 55, 25],\n [11, 36, 12, 7, 37, 13],\n\n // 16\n [5, 122, 98, 1, 123, 99],\n [7, 73, 45, 3, 74, 46],\n [15, 43, 19, 2, 44, 20],\n [3, 45, 15, 13, 46, 16],\n\n // 17\n [1, 135, 107, 5, 136, 108],\n [10, 74, 46, 1, 75, 47],\n [1, 50, 22, 15, 51, 23],\n [2, 42, 14, 17, 43, 15],\n\n // 18\n [5, 150, 120, 1, 151, 121],\n [9, 69, 43, 4, 70, 44],\n [17, 50, 22, 1, 51, 23],\n [2, 42, 14, 19, 43, 15],\n\n // 19\n [3, 141, 113, 4, 142, 114],\n [3, 70, 44, 11, 71, 45],\n [17, 47, 21, 4, 48, 22],\n [9, 39, 13, 16, 40, 14],\n\n // 20\n [3, 135, 107, 5, 136, 108],\n [3, 67, 41, 13, 68, 42],\n [15, 54, 24, 5, 55, 25],\n [15, 43, 15, 10, 44, 16],\n\n // 21\n [4, 144, 116, 4, 145, 117],\n [17, 68, 42],\n [17, 50, 22, 6, 51, 23],\n [19, 46, 16, 6, 47, 17],\n\n // 22\n [2, 139, 111, 7, 140, 112],\n [17, 74, 46],\n [7, 54, 24, 16, 55, 25],\n [34, 37, 13],\n\n // 23\n [4, 151, 121, 5, 152, 122],\n [4, 75, 47, 14, 76, 48],\n [11, 54, 24, 14, 55, 25],\n [16, 45, 15, 14, 46, 16],\n\n // 24\n [6, 147, 117, 4, 148, 118],\n [6, 73, 45, 14, 74, 46],\n [11, 54, 24, 16, 55, 25],\n [30, 46, 16, 2, 47, 17],\n\n // 25\n [8, 132, 106, 4, 133, 107],\n [8, 75, 47, 13, 76, 48],\n [7, 54, 24, 22, 55, 25],\n [22, 45, 15, 13, 46, 16],\n\n // 26\n [10, 142, 114, 2, 143, 115],\n [19, 74, 46, 4, 75, 47],\n [28, 50, 22, 6, 51, 23],\n [33, 46, 16, 4, 47, 17],\n\n // 27\n [8, 152, 122, 4, 153, 123],\n [22, 73, 45, 3, 74, 46],\n [8, 53, 23, 26, 54, 24],\n [12, 45, 15, 28, 46, 16],\n\n // 28\n [3, 147, 117, 10, 148, 118],\n [3, 73, 45, 23, 74, 46],\n [4, 54, 24, 31, 55, 25],\n [11, 45, 15, 31, 46, 16],\n\n // 29\n [7, 146, 116, 7, 147, 117],\n [21, 73, 45, 7, 74, 46],\n [1, 53, 23, 37, 54, 24],\n [19, 45, 15, 26, 46, 16],\n\n // 30\n [5, 145, 115, 10, 146, 116],\n [19, 75, 47, 10, 76, 48],\n [15, 54, 24, 25, 55, 25],\n [23, 45, 15, 25, 46, 16],\n\n // 31\n [13, 145, 115, 3, 146, 116],\n [2, 74, 46, 29, 75, 47],\n [42, 54, 24, 1, 55, 25],\n [23, 45, 15, 28, 46, 16],\n\n // 32\n [17, 145, 115],\n [10, 74, 46, 23, 75, 47],\n [10, 54, 24, 35, 55, 25],\n [19, 45, 15, 35, 46, 16],\n\n // 33\n [17, 145, 115, 1, 146, 116],\n [14, 74, 46, 21, 75, 47],\n [29, 54, 24, 19, 55, 25],\n [11, 45, 15, 46, 46, 16],\n\n // 34\n [13, 145, 115, 6, 146, 116],\n [14, 74, 46, 23, 75, 47],\n [44, 54, 24, 7, 55, 25],\n [59, 46, 16, 1, 47, 17],\n\n // 35\n [12, 151, 121, 7, 152, 122],\n [12, 75, 47, 26, 76, 48],\n [39, 54, 24, 14, 55, 25],\n [22, 45, 15, 41, 46, 16],\n\n // 36\n [6, 151, 121, 14, 152, 122],\n [6, 75, 47, 34, 76, 48],\n [46, 54, 24, 10, 55, 25],\n [2, 45, 15, 64, 46, 16],\n\n // 37\n [17, 152, 122, 4, 153, 123],\n [29, 74, 46, 14, 75, 47],\n [49, 54, 24, 10, 55, 25],\n [24, 45, 15, 46, 46, 16],\n\n // 38\n [4, 152, 122, 18, 153, 123],\n [13, 74, 46, 32, 75, 47],\n [48, 54, 24, 14, 55, 25],\n [42, 45, 15, 32, 46, 16],\n\n // 39\n [20, 147, 117, 4, 148, 118],\n [40, 75, 47, 7, 76, 48],\n [43, 54, 24, 22, 55, 25],\n [10, 45, 15, 67, 46, 16],\n\n // 40\n [19, 148, 118, 6, 149, 119],\n [18, 75, 47, 31, 76, 48],\n [34, 54, 24, 34, 55, 25],\n [20, 45, 15, 61, 46, 16]\n ];\n\n var qrRSBlock = function(totalCount, dataCount) {\n var _this = {};\n _this.totalCount = totalCount;\n _this.dataCount = dataCount;\n return _this;\n };\n\n var _this = {};\n\n var getRsBlockTable = function(typeNumber, errorCorrectionLevel) {\n\n switch(errorCorrectionLevel) {\n case QRErrorCorrectionLevel.L :\n return RS_BLOCK_TABLE[(typeNumber - 1) * 4 + 0];\n case QRErrorCorrectionLevel.M :\n return RS_BLOCK_TABLE[(typeNumber - 1) * 4 + 1];\n case QRErrorCorrectionLevel.Q :\n return RS_BLOCK_TABLE[(typeNumber - 1) * 4 + 2];\n case QRErrorCorrectionLevel.H :\n return RS_BLOCK_TABLE[(typeNumber - 1) * 4 + 3];\n default :\n return undefined;\n }\n };\n\n _this.getRSBlocks = function(typeNumber, errorCorrectionLevel) {\n\n var rsBlock = getRsBlockTable(typeNumber, errorCorrectionLevel);\n\n if (typeof rsBlock == 'undefined') {\n throw 'bad rs block @ typeNumber:' + typeNumber +\n '/errorCorrectionLevel:' + errorCorrectionLevel;\n }\n\n var length = rsBlock.length / 3;\n\n var list = [];\n\n for (var i = 0; i < length; i += 1) {\n\n var count = rsBlock[i * 3 + 0];\n var totalCount = rsBlock[i * 3 + 1];\n var dataCount = rsBlock[i * 3 + 2];\n\n for (var j = 0; j < count; j += 1) {\n list.push(qrRSBlock(totalCount, dataCount) );\n }\n }\n\n return list;\n };\n\n return _this;\n }();\n\n //---------------------------------------------------------------------\n // qrBitBuffer\n //---------------------------------------------------------------------\n\n var qrBitBuffer = function() {\n\n var _buffer = [];\n var _length = 0;\n\n var _this = {};\n\n _this.getBuffer = function() {\n return _buffer;\n };\n\n _this.getAt = function(index) {\n var bufIndex = Math.floor(index / 8);\n return ( (_buffer[bufIndex] >>> (7 - index % 8) ) & 1) == 1;\n };\n\n _this.put = function(num, length) {\n for (var i = 0; i < length; i += 1) {\n _this.putBit( ( (num >>> (length - i - 1) ) & 1) == 1);\n }\n };\n\n _this.getLengthInBits = function() {\n return _length;\n };\n\n _this.putBit = function(bit) {\n\n var bufIndex = Math.floor(_length / 8);\n if (_buffer.length <= bufIndex) {\n _buffer.push(0);\n }\n\n if (bit) {\n _buffer[bufIndex] |= (0x80 >>> (_length % 8) );\n }\n\n _length += 1;\n };\n\n return _this;\n };\n\n //---------------------------------------------------------------------\n // qrNumber\n //---------------------------------------------------------------------\n\n var qrNumber = function(data) {\n\n var _mode = QRMode.MODE_NUMBER;\n var _data = data;\n\n var _this = {};\n\n _this.getMode = function() {\n return _mode;\n };\n\n _this.getLength = function(buffer) {\n return _data.length;\n };\n\n _this.write = function(buffer) {\n\n var data = _data;\n\n var i = 0;\n\n while (i + 2 < data.length) {\n buffer.put(strToNum(data.substring(i, i + 3) ), 10);\n i += 3;\n }\n\n if (i < data.length) {\n if (data.length - i == 1) {\n buffer.put(strToNum(data.substring(i, i + 1) ), 4);\n } else if (data.length - i == 2) {\n buffer.put(strToNum(data.substring(i, i + 2) ), 7);\n }\n }\n };\n\n var strToNum = function(s) {\n var num = 0;\n for (var i = 0; i < s.length; i += 1) {\n num = num * 10 + chatToNum(s.charAt(i) );\n }\n return num;\n };\n\n var chatToNum = function(c) {\n if ('0' <= c && c <= '9') {\n return c.charCodeAt(0) - '0'.charCodeAt(0);\n }\n throw 'illegal char :' + c;\n };\n\n return _this;\n };\n\n //---------------------------------------------------------------------\n // qrAlphaNum\n //---------------------------------------------------------------------\n\n var qrAlphaNum = function(data) {\n\n var _mode = QRMode.MODE_ALPHA_NUM;\n var _data = data;\n\n var _this = {};\n\n _this.getMode = function() {\n return _mode;\n };\n\n _this.getLength = function(buffer) {\n return _data.length;\n };\n\n _this.write = function(buffer) {\n\n var s = _data;\n\n var i = 0;\n\n while (i + 1 < s.length) {\n buffer.put(\n getCode(s.charAt(i) ) * 45 +\n getCode(s.charAt(i + 1) ), 11);\n i += 2;\n }\n\n if (i < s.length) {\n buffer.put(getCode(s.charAt(i) ), 6);\n }\n };\n\n var getCode = function(c) {\n\n if ('0' <= c && c <= '9') {\n return c.charCodeAt(0) - '0'.charCodeAt(0);\n } else if ('A' <= c && c <= 'Z') {\n return c.charCodeAt(0) - 'A'.charCodeAt(0) + 10;\n } else {\n switch (c) {\n case ' ' : return 36;\n case '$' : return 37;\n case '%' : return 38;\n case '*' : return 39;\n case '+' : return 40;\n case '-' : return 41;\n case '.' : return 42;\n case '/' : return 43;\n case ':' : return 44;\n default :\n throw 'illegal char :' + c;\n }\n }\n };\n\n return _this;\n };\n\n //---------------------------------------------------------------------\n // qr8BitByte\n //---------------------------------------------------------------------\n\n var qr8BitByte = function(data) {\n\n var _mode = QRMode.MODE_8BIT_BYTE;\n var _data = data;\n var _bytes = qrcode.stringToBytes(data);\n\n var _this = {};\n\n _this.getMode = function() {\n return _mode;\n };\n\n _this.getLength = function(buffer) {\n return _bytes.length;\n };\n\n _this.write = function(buffer) {\n for (var i = 0; i < _bytes.length; i += 1) {\n buffer.put(_bytes[i], 8);\n }\n };\n\n return _this;\n };\n\n //---------------------------------------------------------------------\n // qrKanji\n //---------------------------------------------------------------------\n\n var qrKanji = function(data) {\n\n var _mode = QRMode.MODE_KANJI;\n var _data = data;\n\n var stringToBytes = qrcode.stringToBytesFuncs['SJIS'];\n if (!stringToBytes) {\n throw 'sjis not supported.';\n }\n !function(c, code) {\n // self test for sjis support.\n var test = stringToBytes(c);\n if (test.length != 2 || ( (test[0] << 8) | test[1]) != code) {\n throw 'sjis not supported.';\n }\n }('\\u53cb', 0x9746);\n\n var _bytes = stringToBytes(data);\n\n var _this = {};\n\n _this.getMode = function() {\n return _mode;\n };\n\n _this.getLength = function(buffer) {\n return ~~(_bytes.length / 2);\n };\n\n _this.write = function(buffer) {\n\n var data = _bytes;\n\n var i = 0;\n\n while (i + 1 < data.length) {\n\n var c = ( (0xff & data[i]) << 8) | (0xff & data[i + 1]);\n\n if (0x8140 <= c && c <= 0x9FFC) {\n c -= 0x8140;\n } else if (0xE040 <= c && c <= 0xEBBF) {\n c -= 0xC140;\n } else {\n throw 'illegal char at ' + (i + 1) + '/' + c;\n }\n\n c = ( (c >>> 8) & 0xff) * 0xC0 + (c & 0xff);\n\n buffer.put(c, 13);\n\n i += 2;\n }\n\n if (i < data.length) {\n throw 'illegal char at ' + (i + 1);\n }\n };\n\n return _this;\n };\n\n //=====================================================================\n // GIF Support etc.\n //\n\n //---------------------------------------------------------------------\n // byteArrayOutputStream\n //---------------------------------------------------------------------\n\n var byteArrayOutputStream = function() {\n\n var _bytes = [];\n\n var _this = {};\n\n _this.writeByte = function(b) {\n _bytes.push(b & 0xff);\n };\n\n _this.writeShort = function(i) {\n _this.writeByte(i);\n _this.writeByte(i >>> 8);\n };\n\n _this.writeBytes = function(b, off, len) {\n off = off || 0;\n len = len || b.length;\n for (var i = 0; i < len; i += 1) {\n _this.writeByte(b[i + off]);\n }\n };\n\n _this.writeString = function(s) {\n for (var i = 0; i < s.length; i += 1) {\n _this.writeByte(s.charCodeAt(i) );\n }\n };\n\n _this.toByteArray = function() {\n return _bytes;\n };\n\n _this.toString = function() {\n var s = '';\n s += '[';\n for (var i = 0; i < _bytes.length; i += 1) {\n if (i > 0) {\n s += ',';\n }\n s += _bytes[i];\n }\n s += ']';\n return s;\n };\n\n return _this;\n };\n\n //---------------------------------------------------------------------\n // base64EncodeOutputStream\n //---------------------------------------------------------------------\n\n var base64EncodeOutputStream = function() {\n\n var _buffer = 0;\n var _buflen = 0;\n var _length = 0;\n var _base64 = '';\n\n var _this = {};\n\n var writeEncoded = function(b) {\n _base64 += String.fromCharCode(encode(b & 0x3f) );\n };\n\n var encode = function(n) {\n if (n < 0) {\n // error.\n } else if (n < 26) {\n return 0x41 + n;\n } else if (n < 52) {\n return 0x61 + (n - 26);\n } else if (n < 62) {\n return 0x30 + (n - 52);\n } else if (n == 62) {\n return 0x2b;\n } else if (n == 63) {\n return 0x2f;\n }\n throw 'n:' + n;\n };\n\n _this.writeByte = function(n) {\n\n _buffer = (_buffer << 8) | (n & 0xff);\n _buflen += 8;\n _length += 1;\n\n while (_buflen >= 6) {\n writeEncoded(_buffer >>> (_buflen - 6) );\n _buflen -= 6;\n }\n };\n\n _this.flush = function() {\n\n if (_buflen > 0) {\n writeEncoded(_buffer << (6 - _buflen) );\n _buffer = 0;\n _buflen = 0;\n }\n\n if (_length % 3 != 0) {\n // padding\n var padlen = 3 - _length % 3;\n for (var i = 0; i < padlen; i += 1) {\n _base64 += '=';\n }\n }\n };\n\n _this.toString = function() {\n return _base64;\n };\n\n return _this;\n };\n\n //---------------------------------------------------------------------\n // base64DecodeInputStream\n //---------------------------------------------------------------------\n\n var base64DecodeInputStream = function(str) {\n\n var _str = str;\n var _pos = 0;\n var _buffer = 0;\n var _buflen = 0;\n\n var _this = {};\n\n _this.read = function() {\n\n while (_buflen < 8) {\n\n if (_pos >= _str.length) {\n if (_buflen == 0) {\n return -1;\n }\n throw 'unexpected end of file./' + _buflen;\n }\n\n var c = _str.charAt(_pos);\n _pos += 1;\n\n if (c == '=') {\n _buflen = 0;\n return -1;\n } else if (c.match(/^\\s$/) ) {\n // ignore if whitespace.\n continue;\n }\n\n _buffer = (_buffer << 6) | decode(c.charCodeAt(0) );\n _buflen += 6;\n }\n\n var n = (_buffer >>> (_buflen - 8) ) & 0xff;\n _buflen -= 8;\n return n;\n };\n\n var decode = function(c) {\n if (0x41 <= c && c <= 0x5a) {\n return c - 0x41;\n } else if (0x61 <= c && c <= 0x7a) {\n return c - 0x61 + 26;\n } else if (0x30 <= c && c <= 0x39) {\n return c - 0x30 + 52;\n } else if (c == 0x2b) {\n return 62;\n } else if (c == 0x2f) {\n return 63;\n } else {\n throw 'c:' + c;\n }\n };\n\n return _this;\n };\n\n //---------------------------------------------------------------------\n // gifImage (B/W)\n //---------------------------------------------------------------------\n\n var gifImage = function(width, height) {\n\n var _width = width;\n var _height = height;\n var _data = new Array(width * height);\n\n var _this = {};\n\n _this.setPixel = function(x, y, pixel) {\n _data[y * _width + x] = pixel;\n };\n\n _this.write = function(out) {\n\n //---------------------------------\n // GIF Signature\n\n out.writeString('GIF87a');\n\n //---------------------------------\n // Screen Descriptor\n\n out.writeShort(_width);\n out.writeShort(_height);\n\n out.writeByte(0x80); // 2bit\n out.writeByte(0);\n out.writeByte(0);\n\n //---------------------------------\n // Global Color Map\n\n // black\n out.writeByte(0x00);\n out.writeByte(0x00);\n out.writeByte(0x00);\n\n // white\n out.writeByte(0xff);\n out.writeByte(0xff);\n out.writeByte(0xff);\n\n //---------------------------------\n // Image Descriptor\n\n out.writeString(',');\n out.writeShort(0);\n out.writeShort(0);\n out.writeShort(_width);\n out.writeShort(_height);\n out.writeByte(0);\n\n //---------------------------------\n // Local Color Map\n\n //---------------------------------\n // Raster Data\n\n var lzwMinCodeSize = 2;\n var raster = getLZWRaster(lzwMinCodeSize);\n\n out.writeByte(lzwMinCodeSize);\n\n var offset = 0;\n\n while (raster.length - offset > 255) {\n out.writeByte(255);\n out.writeBytes(raster, offset, 255);\n offset += 255;\n }\n\n out.writeByte(raster.length - offset);\n out.writeBytes(raster, offset, raster.length - offset);\n out.writeByte(0x00);\n\n //---------------------------------\n // GIF Terminator\n out.writeString(';');\n };\n\n var bitOutputStream = function(out) {\n\n var _out = out;\n var _bitLength = 0;\n var _bitBuffer = 0;\n\n var _this = {};\n\n _this.write = function(data, length) {\n\n if ( (data >>> length) != 0) {\n throw 'length over';\n }\n\n while (_bitLength + length >= 8) {\n _out.writeByte(0xff & ( (data << _bitLength) | _bitBuffer) );\n length -= (8 - _bitLength);\n data >>>= (8 - _bitLength);\n _bitBuffer = 0;\n _bitLength = 0;\n }\n\n _bitBuffer = (data << _bitLength) | _bitBuffer;\n _bitLength = _bitLength + length;\n };\n\n _this.flush = function() {\n if (_bitLength > 0) {\n _out.writeByte(_bitBuffer);\n }\n };\n\n return _this;\n };\n\n var getLZWRaster = function(lzwMinCodeSize) {\n\n var clearCode = 1 << lzwMinCodeSize;\n var endCode = (1 << lzwMinCodeSize) + 1;\n var bitLength = lzwMinCodeSize + 1;\n\n // Setup LZWTable\n var table = lzwTable();\n\n for (var i = 0; i < clearCode; i += 1) {\n table.add(String.fromCharCode(i) );\n }\n table.add(String.fromCharCode(clearCode) );\n table.add(String.fromCharCode(endCode) );\n\n var byteOut = byteArrayOutputStream();\n var bitOut = bitOutputStream(byteOut);\n\n // clear code\n bitOut.write(clearCode, bitLength);\n\n var dataIndex = 0;\n\n var s = String.fromCharCode(_data[dataIndex]);\n dataIndex += 1;\n\n while (dataIndex < _data.length) {\n\n var c = String.fromCharCode(_data[dataIndex]);\n dataIndex += 1;\n\n if (table.contains(s + c) ) {\n\n s = s + c;\n\n } else {\n\n bitOut.write(table.indexOf(s), bitLength);\n\n if (table.size() < 0xfff) {\n\n if (table.size() == (1 << bitLength) ) {\n bitLength += 1;\n }\n\n table.add(s + c);\n }\n\n s = c;\n }\n }\n\n bitOut.write(table.indexOf(s), bitLength);\n\n // end code\n bitOut.write(endCode, bitLength);\n\n bitOut.flush();\n\n return byteOut.toByteArray();\n };\n\n var lzwTable = function() {\n\n var _map = {};\n var _size = 0;\n\n var _this = {};\n\n _this.add = function(key) {\n if (_this.contains(key) ) {\n throw 'dup key:' + key;\n }\n _map[key] = _size;\n _size += 1;\n };\n\n _this.size = function() {\n return _size;\n };\n\n _this.indexOf = function(key) {\n return _map[key];\n };\n\n _this.contains = function(key) {\n return typeof _map[key] != 'undefined';\n };\n\n return _this;\n };\n\n return _this;\n };\n\n var createDataURL = function(width, height, getPixel) {\n var gif = gifImage(width, height);\n for (var y = 0; y < height; y += 1) {\n for (var x = 0; x < width; x += 1) {\n gif.setPixel(x, y, getPixel(x, y) );\n }\n }\n\n var b = byteArrayOutputStream();\n gif.write(b);\n\n var base64 = base64EncodeOutputStream();\n var bytes = b.toByteArray();\n for (var i = 0; i < bytes.length; i += 1) {\n base64.writeByte(bytes[i]);\n }\n base64.flush();\n\n return 'data:image/gif;base64,' + base64;\n };\n\n //---------------------------------------------------------------------\n // returns qrcode function.\n\n return qrcode;\n}();\n\n// multibyte support\n!function() {\n\n qrcode.stringToBytesFuncs['UTF-8'] = function(s) {\n // http://stackoverflow.com/questions/18729405/how-to-convert-utf8-string-to-byte-array\n function toUTF8Array(str) {\n var utf8 = [];\n for (var i=0; i < str.length; i++) {\n var charcode = str.charCodeAt(i);\n if (charcode < 0x80) utf8.push(charcode);\n else if (charcode < 0x800) {\n utf8.push(0xc0 | (charcode >> 6),\n 0x80 | (charcode & 0x3f));\n }\n else if (charcode < 0xd800 || charcode >= 0xe000) {\n utf8.push(0xe0 | (charcode >> 12),\n 0x80 | ((charcode>>6) & 0x3f),\n 0x80 | (charcode & 0x3f));\n }\n // surrogate pair\n else {\n i++;\n // UTF-16 encodes 0x10000-0x10FFFF by\n // subtracting 0x10000 and splitting the\n // 20 bits of 0x0-0xFFFFF into two halves\n charcode = 0x10000 + (((charcode & 0x3ff)<<10)\n | (str.charCodeAt(i) & 0x3ff));\n utf8.push(0xf0 | (charcode >>18),\n 0x80 | ((charcode>>12) & 0x3f),\n 0x80 | ((charcode>>6) & 0x3f),\n 0x80 | (charcode & 0x3f));\n }\n }\n return utf8;\n }\n return toUTF8Array(s);\n };\n\n}();\n\n(function (factory) {\n if (typeof define === 'function' && define.amd) {\n define([], factory);\n } else if (typeof exports === 'object') {\n module.exports = factory();\n }\n}(function () {\n return qrcode;\n}));\n","import { UnknownObject } from \"../types\";\n\nconst isObject = (obj: Record<string, unknown>): boolean => !!obj && typeof obj === \"object\" && !Array.isArray(obj);\n\nexport function mergeDeep(target: UnknownObject, ...sources: UnknownObject[]): UnknownObject {\n if (!sources.length) return target;\n const source = sources.shift();\n if (source === undefined || !isObject(target) || !isObject(source)) return target;\n target = { ...target };\n Object.keys(source).forEach((key: string): void => {\n const targetValue = target[key];\n const sourceValue = source[key];\n\n if (Array.isArray(targetValue) && Array.isArray(sourceValue)) {\n target[key] = sourceValue;\n } else if (isObject(targetValue) && isObject(sourceValue)) {\n target[key] = mergeDeep(Object.assign({}, targetValue), sourceValue);\n } else {\n target[key] = sourceValue;\n }\n });\n\n return mergeDeep(target, ...sources);\n}\n","import { RequiredCanvasOptions, RequiredOptions } from \"../core/QROptions\";\nimport { Gradient } from \"../types\";\n\nfunction sanitizeGradient(gradient: Gradient): Gradient {\n const newGradient = { ...gradient };\n\n if (!newGradient.colorStops || !newGradient.colorStops.length) {\n throw \"Field 'colorStops' is required in gradient\";\n }\n\n if (newGradient.rotation) {\n newGradient.rotation = Number(newGradient.rotation);\n } else {\n newGradient.rotation = 0;\n }\n\n newGradient.colorStops = newGradient.colorStops.map((colorStop: { offset: number; color: string }) => ({\n ...colorStop,\n offset: Number(colorStop.offset)\n }));\n\n return newGradient;\n}\n\nexport function sanitizeOptions(options: RequiredOptions): RequiredOptions {\n const newOptions = { ...options };\n\n newOptions.imageOptions = {\n ...newOptions.imageOptions,\n hideBackgroundDots: Boolean(newOptions.imageOptions.hideBackgroundDots),\n imageSize: Math.min(1, Number(newOptions.imageOptions.imageSize)) || 1,\n margin: Number(newOptions.imageOptions.margin)\n };\n\n newOptions.dotsOptions = {\n ...newOptions.dotsOptions\n };\n if (newOptions.dotsOptions.gradient) {\n newOptions.dotsOptions.gradient = sanitizeGradient(newOptions.dotsOptions.gradient);\n }\n\n if (newOptions.cornersSquareOptions) {\n newOptions.cornersSquareOptions = {\n ...newOptions.cornersSquareOptions\n };\n if (newOptions.cornersSquareOptions.gradient) {\n newOptions.cornersSquareOptions.gradient = sanitizeGradient(newOptions.cornersSquareOptions.gradient);\n }\n }\n\n if (newOptions.cornersDotOptions) {\n newOptions.cornersDotOptions = {\n ...newOptions.cornersDotOptions\n };\n if (newOptions.cornersDotOptions.gradient) {\n newOptions.cornersDotOptions.gradient = sanitizeGradient(newOptions.cornersDotOptions.gradient);\n }\n }\n\n if (newOptions.backgroundOptions) {\n newOptions.backgroundOptions = {\n ...newOptions.backgroundOptions\n };\n if (newOptions.backgroundOptions.gradient) {\n newOptions.backgroundOptions.gradient = sanitizeGradient(newOptions.backgroundOptions.gradient);\n }\n }\n\n if (!newOptions.document) newOptions.document = document;\n\n return newOptions;\n}\n\nexport function sanitizeCanvasOptions(options: RequiredCanvasOptions): RequiredCanvasOptions {\n const newOptions = { ...options };\n\n newOptions.width = Number(newOptions.width);\n newOptions.height = Number(newOptions.height);\n newOptions.margin = Number(newOptions.margin);\n\n if (newOptions.margin > Math.min(newOptions.width, newOptions.height)) {\n newOptions.margin = Math.min(newOptions.width, newOptions.height);\n }\n\n return newOptions;\n}\n","import { CanvasOptions, DotType, ErrorCorrectionLevel, Gradient, Mode, Options, ShapeType, TypeNumber } from \"../types\";\n\nexport interface RequiredOptions extends Options {\n document: Document;\n shape: ShapeType;\n width: number;\n height: number;\n margin: number;\n data: string;\n qrOptions: {\n typeNumber: TypeNumber;\n mode?: Mode;\n errorCorrectionLevel: ErrorCorrectionLevel;\n };\n imageOptions: {\n hideBackgroundDots: boolean;\n imageSize: number;\n crossOrigin?: string;\n margin: number;\n };\n dotsOptions: {\n type: DotType;\n color: string;\n gradient?: Gradient;\n size: number;\n };\n}\n\nexport const defaultOptions: RequiredOptions = {\n document: undefined as never,\n shape: ShapeType.square,\n width: undefined as never,\n height: undefined as never,\n margin: 0,\n data: \"\",\n qrOptions: {\n typeNumber: TypeNumber[0],\n mode: undefined,\n errorCorrectionLevel: ErrorCorrectionLevel.Q\n },\n imageOptions: {\n hideBackgroundDots: true,\n imageSize: 0.4,\n crossOrigin: undefined,\n margin: 0\n },\n dotsOptions: {\n type: DotType.square,\n color: \"#000\",\n size: 10\n }\n};\n\nexport interface RequiredCanvasOptions extends CanvasOptions {\n width: number;\n height: number;\n margin: number;\n}\n\nexport const defaultCanvasOptions: RequiredCanvasOptions = {\n width: 300,\n height: 300,\n margin: 10\n};\n","import { CornerDotType, RotateFigureArgs, BasicFigureDrawArgs, DrawArgs } from \"../../types\";\n\nexport class QRCornerDot {\n _element?: SVGElement;\n _svg: SVGElement;\n _type: CornerDotType;\n _document: Document;\n\n constructor({ svg, type, document }: { svg: SVGElement; type: CornerDotType; document: Document }) {\n this._svg = svg;\n this._type = type;\n this._document = document;\n }\n\n draw(x: number, y: number, size: number, rotation: number): void {\n const type = this._type;\n let drawFunction;\n\n switch (type) {\n case CornerDotType.square:\n drawFunction = this._drawSquare;\n break;\n case CornerDotType.dot:\n default:\n drawFunction = this._drawDot;\n }\n\n drawFunction.call(this, { x, y, size, rotation });\n }\n\n _rotateFigure({ x, y, size, rotation = 0, draw }: RotateFigureArgs): void {\n const cx = x + size / 2;\n const cy = y + size / 2;\n\n draw();\n this._element?.setAttribute(\"transform\", `rotate(${(180 * rotation) / Math.PI},${cx},${cy})`);\n }\n\n _basicDot(args: BasicFigureDrawArgs): void {\n const { size, x, y } = args;\n\n this._rotateFigure({\n ...args,\n draw: () => {\n this._element = this._document.createElementNS(\"http://www.w3.org/2000/svg\", \"circle\");\n this._element.setAttribute(\"cx\", String(x + size / 2));\n this._element.setAttribute(\"cy\", String(y + size / 2));\n this._element.setAttribute(\"r\", String(size / 2));\n }\n });\n }\n\n _basicSquare(args: BasicFigureDrawArgs): void {\n const { size, x, y } = args;\n\n this._rotateFigure({\n ...args,\n draw: () => {\n this._element = this._document.createElementNS(\"http://www.w3.org/2000/svg\", \"rect\");\n this._element.setAttribute(\"x\", String(x));\n this._element.setAttribute(\"y\", String(y));\n this._element.setAttribute(\"width\", String(size));\n this._element.setAttribute(\"height\", String(size));\n }\n });\n }\n\n _drawDot({ x, y, size, rotation }: DrawArgs): void {\n this._basicDot({ x, y, size, rotation });\n }\n\n _drawSquare({ x, y, size, rotation }: DrawArgs): void {\n this._basicSquare({ x, y, size, rotation });\n }\n}\n","import { CornerSquareType, DrawArgs, BasicFigureDrawArgs, RotateFigureArgs } from \"../../types\";\n\nexport class QRCornerSquare {\n _element?: SVGElement;\n _svg: SVGElement;\n _type: CornerSquareType;\n _document: Document;\n\n constructor({ svg, type, document }: { svg: SVGElement; type: CornerSquareType; document: Document }) {\n this._svg = svg;\n this._type = type;\n this._document = document;\n }\n\n draw(x: number, y: number, size: number, rotation: number): void {\n const type = this._type;\n let drawFunction;\n\n switch (type) {\n case CornerSquareType.square:\n drawFunction = this._drawSquare;\n break;\n case CornerSquareType.extraRounded:\n drawFunction = this._drawExtraRounded;\n break;\n case CornerSquareType.dot:\n default:\n drawFunction = this._drawDot;\n }\n\n drawFunction.call(this, { x, y, size, rotation });\n }\n\n _rotateFigure({ x, y, size, rotation = 0, draw }: RotateFigureArgs): void {\n const cx = x + size / 2;\n const cy = y + size / 2;\n\n draw();\n this._element?.setAttribute(\"transform\", `rotate(${(180 * rotation) / Math.PI},${cx},${cy})`);\n }\n\n _basicDot(args: BasicFigureDrawArgs): void {\n const { size, x, y } = args;\n const dotSize = size / 7;\n\n this._rotateFigure({\n ...args,\n draw: () => {\n this._element = this._document.createElementNS(\"http://www.w3.org/2000/svg\", \"path\");\n this._element.setAttribute(\"clip-rule\", \"evenodd\");\n this._element.setAttribute(\n \"d\",\n `M ${x + size / 2} ${y}` + // M cx, y // Move to top of ring\n `a ${size / 2} ${size / 2} 0 1 0 0.1 0` + // a outerRadius, outerRadius, 0, 1, 0, 1, 0 // Draw outer arc, but don't close it\n `z` + // Z // Close the outer shape\n `m 0 ${dotSize}` + // m -1 outerRadius-innerRadius // Move to top point of inner radius\n `a ${size / 2 - dotSize} ${size / 2 - dotSize} 0 1 1 -0.1 0` + // a innerRadius, innerRadius, 0, 1, 1, -1, 0 // Draw inner arc, but don't close it\n `Z` // Z // Close the inner ring. Actually will still work without, but inner ring will have one unit missing in stroke\n );\n }\n });\n }\n\n _basicSquare(args: BasicFigureDrawArgs): void {\n const { size, x, y } = args;\n const dotSize = size / 7;\n\n this._rotateFigure({\n ...args,\n draw: () => {\n this._element = this._document.createElementNS(\"http://www.w3.org/2000/svg\", \"path\");\n this._element.setAttribute(\"clip-rule\", \"evenodd\");\n this._element.setAttribute(\n \"d\",\n `M ${x} ${y}` +\n `v ${size}` +\n `h ${size}` +\n `v ${-size}` +\n `z` +\n `M ${x + dotSize} ${y + dotSize}` +\n `h ${size - 2 * dotSize}` +\n `v ${size - 2 * dotSize}` +\n `h ${-size + 2 * dotSize}` +\n `z`\n );\n }\n });\n }\n\n _basicExtraRounded(args: BasicFigureDrawArgs): void {\n const { size, x, y } = args;\n const dotSize = size / 7;\n\n this._rotateFigure({\n ...args,\n draw: () => {\n this._element = this._document.createElementNS(\"http://www.w3.org/2000/svg\", \"path\");\n this._element.setAttribute(\"clip-rule\", \"evenodd\");\n this._element.setAttribute(\n \"d\",\n `M ${x} ${y + 2.5 * dotSize}` +\n `v ${2 * dotSize}` +\n `a ${2.5 * dotSize} ${2.5 * dotSize}, 0, 0, 0, ${dotSize * 2.5} ${dotSize * 2.5}` +\n `h ${2 * dotSize}` +\n `a ${2.5 * dotSize} ${2.5 * dotSize}, 0, 0, 0, ${dotSize * 2.5} ${-dotSize * 2.5}` +\n `v ${-2 * dotSize}` +\n `a ${2.5 * dotSize} ${2.5 * dotSize}, 0, 0, 0, ${-dotSize * 2.5} ${-dotSize * 2.5}` +\n `h ${-2 * dotSize}` +\n `a ${2.5 * dotSize} ${2.5 * dotSize}, 0, 0, 0, ${-dotSize * 2.5} ${dotSize * 2.5}` +\n `M ${x + 2.5 * dotSize} ${y + dotSize}` +\n `h ${2 * dotSize}` +\n `a ${1.5 * dotSize} ${1.5 * dotSize}, 0, 0, 1, ${dotSize * 1.5} ${dotSize * 1.5}` +\n `v ${2 * dotSize}` +\n `a ${1.5 * dotSize} ${1.5 * dotSize}, 0, 0, 1, ${-dotSize * 1.5} ${dotSize * 1.5}` +\n `h ${-2 * dotSize}` +\n `a ${1.5 * dotSize} ${1.5 * dotSize}, 0, 0, 1, ${-dotSize * 1.5} ${-dotSize * 1.5}` +\n `v ${-2 * dotSize}` +\n `a ${1.5 * dotSize} ${1.5 * dotSize}, 0, 0, 1, ${dotSize * 1.5} ${-dotSize * 1.5}`\n );\n }\n });\n }\n\n _drawDot({ x, y, size, rotation }: DrawArgs): void {\n this._basicDot({ x, y, size, rotation });\n }\n\n _drawSquare({ x, y, size, rotation }: DrawArgs): void {\n this._basicSquare({ x, y, size, rotation });\n }\n\n _drawExtraRounded({ x, y, size, rotation }: DrawArgs): void {\n this._basicExtraRounded({ x, y, size, rotation });\n }\n}\n","import { DotType, GetNeighbor, DrawArgs, BasicFigureDrawArgs, RotateFigureArgs } from \"../../types\";\n\nexport class QRDot {\n _element?: SVGElement;\n _svg: SVGElement;\n _type: DotType;\n _document: Document;\n\n constructor({ svg, type, document }: { svg: SVGElement; type: DotType; document: Document }) {\n this._svg = svg;\n this._type = type;\n this._document = document;\n }\n\n draw(x: number, y: number, size: number, getNeighbor: GetNeighbor): void {\n const type = this._type;\n let drawFunction;\n\n switch (type) {\n case DotType.dots:\n drawFunction = this._drawDot;\n break;\n case DotType.classy:\n drawFunction = this._drawClassy;\n break;\n case DotType.classyRounded:\n drawFunction = this._drawClassyRounded;\n break;\n case DotType.rounded:\n drawFunction = this._drawRounded;\n break;\n case DotType.extraRounded:\n drawFunction = this._drawExtraRounded;\n break;\n case DotType.square:\n default:\n drawFunction = this._drawSquare;\n }\n\n drawFunction.call(this, { x, y, size, getNeighbor });\n }\n\n _rotateFigure({ x, y, size, rotation = 0, draw }: RotateFigureArgs): void {\n const cx = x + size / 2;\n const cy = y + size / 2;\n\n draw();\n this._element?.setAttribute(\"transform\", `rotate(${(180 * rotation) / Math.PI},${cx},${cy})`);\n }\n\n _basicDot(args: BasicFigureDrawArgs): void {\n const { size, x, y } = args;\n\n this._rotateFigure({\n ...args,\n draw: () => {\n this._element = this._document.createElementNS(\"http://www.w3.org/2000/svg\", \"circle\");\n this._element.setAttribute(\"cx\", String(x + size / 2));\n this._element.setAttribute(\"cy\", String(y + size / 2));\n this._element.setAttribute(\"r\", String(size / 2));\n }\n });\n }\n\n _basicSquare(args: BasicFigureDrawArgs): void {\n const { size, x, y } = args;\n\n this._rotateFigure({\n ...args,\n draw: () => {\n this._element = this._document.createElementNS(\"http://www.w3.org/2000/svg\", \"rect\");\n this._element.setAttribute(\"x\", String(x));\n this._element.setAttribute(\"y\", String(y));\n this._element.setAttribute(\"width\", String(size));\n this._element.setAttribute(\"height\", String(size));\n }\n });\n }\n\n //if rotation === 0 - right side is rounded\n _basicSideRounded(args: BasicFigureDrawArgs): void {\n const { size, x, y } = args;\n\n this._rotateFigure({\n ...args,\n draw: () => {\n this._element = this._document.createElementNS(\"http://www.w3.org/2000/svg\", \"path\");\n this._element.setAttribute(\n \"d\",\n `M ${x} ${y}` + //go to top left position\n `v ${size}` + //draw line to left bottom corner\n `h ${size / 2}` + //draw line to left bottom corner + half of size right\n `a ${size / 2} ${size / 2}, 0, 0, 0, 0 ${-size}` // draw rounded corner\n );\n }\n });\n }\n\n //if rotation === 0 - top right corner is rounded\n _basicCornerRounded(args: BasicFigureDrawArgs): void {\n const { size, x, y } = args;\n\n this._rotateFigure({\n ...args,\n draw: () => {\n this._element = this._document.createElementNS(\"http://www.w3.org/2000/svg\", \"path\");\n this._element.setAttribute(\n \"d\",\n `M ${x} ${y}` + //go to top left position\n `v ${size}` + //draw line to left bottom corner\n `h ${size}` + //draw line to right bottom corner\n `v ${-size / 2}` + //draw line to right bottom corner + half of size top\n `a ${size / 2} ${size / 2}, 0, 0, 0, ${-size / 2} ${-size / 2}` // draw rounded corner\n );\n }\n });\n }\n\n //if rotation === 0 - top right corner is rounded\n _basicCornerExtraRounded(args: BasicFigureDrawArgs): void {\n const { size, x, y } = args;\n\n this._rotateFigure({\n ...args,\n draw: () => {\n this._element = this._document.createElementNS(\"http://www.w3.org/2000/svg\", \"path\");\n this._element.setAttribute(\n \"d\",\n `M ${x} ${y}` + //go to top left position\n `v ${size}` + //draw line to left bottom corner\n `h ${size}` + //draw line to right bottom corner\n `a ${size} ${size}, 0, 0, 0, ${-size} ${-size}` // draw rounded top right corner\n );\n }\n });\n }\n\n //if rotation === 0 - left bottom and right top corners are rounded\n _basicCornersRounded(args: BasicFigureDrawArgs): void {\n const { size, x, y } = args;\n\n this._rotateFigure({\n ...args,\n draw: () => {\n this._element = this._document.createElementNS(\"http://www.w3.org/2000/svg\", \"path\");\n this._element.setAttribute(\n \"d\",\n `M ${x} ${y}` + //go to left top position\n `v ${size / 2}` + //draw line to left top corner + half of size bottom\n `a ${size / 2} ${size / 2}, 0, 0, 0, ${size / 2} ${size / 2}` + // draw rounded left bottom corner\n `h ${size / 2}` + //draw line to right bottom corner\n `v ${-size / 2}` + //draw line to right bottom corner + half of size top\n `a ${size / 2} ${size / 2}, 0, 0, 0, ${-size / 2} ${-size / 2}` // draw rounded right top corner\n );\n }\n });\n }\n\n _drawDot({ x, y, size }: DrawArgs): void {\n this._basicDot({ x, y, size, rotation: 0 });\n }\n\n _drawSquare({ x, y, size }: DrawArgs): void {\n this._basicSquare({ x, y, size, rotation: 0 });\n }\n\n _drawRounded({ x, y, size, getNeighbor }: DrawArgs): void {\n const leftNeighbor = getNeighbor ? +getNeighbor(-1, 0) : 0;\n const rightNeighbor = getNeighbor ? +getNeighbor(1, 0) : 0;\n const topNeighbor = getNeighbor ? +getNeighbor(0, -1) : 0;\n const bottomNeighbor = getNeighbor ? +getNeighbor(0, 1) : 0;\n\n const neighborsCount = leftNeighbor + rightNeighbor + topNeighbor + bottomNeighbor;\n\n if (neighborsCount === 0) {\n this._basicDot({ x, y, size, rotation: 0 });\n return;\n }\n\n if (neighborsCount > 2 || (leftNeighbor && rightNeighbor) || (topNeighbor && bottomNeighbor)) {\n this._basicSquare({ x, y, size, rotation: 0 });\n return;\n }\n\n if (neighborsCount === 2) {\n let rotation = 0;\n\n if (leftNeighbor && topNeighbor) {\n rotation = Math.PI / 2;\n } else if (topNeighbor && rightNeighbor) {\n rotation = Math.PI;\n } else if (rightNeighbor && bottomNeighbor) {\n rotation = -Math.PI / 2;\n }\n\n this._basicCornerRounded({ x, y, size, rotation });\n return;\n }\n\n if (neighborsCount === 1) {\n let rotation = 0;\n\n if (topNeighbor) {\n rotation = Math.PI / 2;\n } else if (rightNeighbor) {\n rotation = Math.PI;\n } else if (bottomNeighbor) {\n rotation = -Math.PI / 2;\n }\n\n this._basicSideRounded({ x, y, size, rotation });\n return;\n }\n }\n\n _drawExtraRounded({ x, y, size, getNeighbor }: DrawArgs): void {\n const leftNeighbor = getNeighbor ? +getNeighbor(-1, 0) : 0;\n const rightNeighbor = getNeighbor ? +getNeighbor(1, 0) : 0;\n const topNeighbor = getNeighbor ? +getNeighbor(0, -1) : 0;\n const bottomNeighbor = getNeighbor ? +getNeighbor(0, 1) : 0;\n\n const neighborsCount = leftNeighbor + rightNeighbor + topNeighbor + bottomNeighbor;\n\n if (neighborsCount === 0) {\n this._basicDot({ x, y, size, rotation: 0 });\n return;\n }\n\n if (neighborsCount > 2 || (leftNeighbor && rightNeighbor) || (topNeighbor && bottomNeighbor)) {\n this._basicSquare({ x, y, size, rotation: 0 });\n return;\n }\n\n if (neighborsCount === 2) {\n let rotation = 0;\n\n if (leftNeighbor && topNeighbor) {\n rotation = Math.PI / 2;\n } else if (topNeighbor && rightNeighbor) {\n rotation = Math.PI;\n } else if (rightNeighbor && bottomNeighbor) {\n rotation = -Math.PI / 2;\n }\n\n this._basicCornerExtraRounded({ x, y, size, rotation });\n return;\n }\n\n if (neighborsCount === 1) {\n let rotation = 0;\n\n if (topNeighbor) {\n rotation = Math.PI / 2;\n } else if (rightNeighbor) {\n rotation = Math.PI;\n } else if (bottomNeighbor) {\n rotation = -Math.PI / 2;\n }\n\n this._basicSideRounded({ x, y, size, rotation });\n return;\n }\n }\n\n _drawClassy({ x, y, size, getNeighbor }: DrawArgs): void {\n const leftNeighbor = getNeighbor ? +getNeighbor(-1, 0) : 0;\n const rightNeighbor = getNeighbor ? +getNeighbor(1, 0) : 0;\n const topNeighbor = getNeighbor ? +getNeighbor(0, -1) : 0;\n const bottomNeighbor = getNeighbor ? +getNeighbor(0, 1) : 0;\n\n const neighborsCount = leftNeighbor + rightNeighbor + topNeighbor + bottomNeighbor;\n\n if (neighborsCount === 0) {\n this._basicCornersRounded({ x, y, size, rotation: Math.PI / 2 });\n return;\n }\n\n if (!leftNeighbor && !topNeighbor) {\n this._basicCornerRounded({ x, y, size, rotation: -Math.PI / 2 });\n return;\n }\n\n if (!rightNeighbor && !bottomNeighbor) {\n this._basicCornerRounded({ x, y, size, rotation: Math.PI / 2 });\n return;\n }\n\n this._basicSquare({ x, y, size, rotation: 0 });\n }\n\n _drawClassyRounded({ x, y, size, getNeighbor }: DrawArgs): void {\n const leftNeighbor = getNeighbor ? +getNeighbor(-1, 0) : 0;\n const rightNeighbor = getNeighbor ? +getNeighbor(1, 0) : 0;\n const topNeighbor = getNeighbor ? +getNeighbor(0, -1) : 0;\n const bottomNeighbor = getNeighbor ? +getNeighbor(0, 1) : 0;\n\n const neighborsCount = leftNeighbor + rightNeighbor + topNeighbor + bottomNeighbor;\n\n if (neighborsCount === 0) {\n this._basicCornersRounded({ x, y, size, rotation: Math.PI / 2 });\n return;\n }\n\n if (!leftNeighbor && !topNeighbor) {\n this._basicCornerExtraRounded({ x, y, size, rotation: -Math.PI / 2 });\n return;\n }\n\n if (!rightNeighbor && !bottomNeighbor) {\n this._basicCornerExtraRounded({ x, y, size, rotation: Math.PI / 2 });\n return;\n }\n\n this._basicSquare({ x, y, size, rotation: 0 });\n }\n}\n","import { RequiredOptions } from \"../core/QROptions\";\n\nexport const browserImageTools = {\n toDataURL(url: string | Buffer | Blob): Promise<string> {\n return new Promise((resolve, reject) => {\n if (typeof url == \"string\") {\n const xhr = new XMLHttpRequest();\n xhr.onload = function () {\n const reader = new FileReader();\n reader.onloadend = function () {\n resolve(reader.result as string);\n };\n reader.readAsDataURL(xhr.response);\n };\n xhr.onerror = xhr.onabort = xhr.ontimeout = reject;\n xhr.open(\"GET\", url);\n xhr.responseType = \"blob\";\n xhr.send();\n } else {\n const reader = new FileReader();\n reader.onloadend = function () {\n resolve(reader.result as string);\n };\n reader.readAsDataURL(url as Blob);\n }\n });\n },\n getSize(options: RequiredOptions): Promise<{ width: number; height: number }> {\n return new Promise((resolve, reject) => {\n if (!options.image) {\n return reject(\"Image is not defined\");\n }\n\n const image = new Image();\n\n if (typeof options.imageOptions.crossOrigin === \"string\") {\n image.crossOrigin = options.imageOptions.crossOrigin;\n }\n\n image.onload = (): void => {\n resolve({ width: image.width, height: image.height });\n };\n image.onerror = image.onabort = reject;\n if (typeof options.image == \"string\") image.src = options.image;\n else\n browserImageTools\n .toDataURL(options.image)\n .then((url) => (image.src = url))\n .catch(reject);\n });\n }\n};\n","import { ErrorCorrectionPercents } from \"../constants/errorCorrectionPercents\";\nimport { QRCornerDot } from \"../figures/cornerDot/QRCornerDot\";\nimport { QRCornerSquare } from \"../figures/cornerSquare/QRCornerSquare\";\nimport { QRDot } from \"../figures/dot/QRDot\";\nimport { browserImageTools } from \"../tools/browserImageTools\";\nimport { calculateImageSize } from \"../tools/calculateImageSize\";\nimport { FilterFunction, Gradient, GradientType, QRCode, ShapeType } from \"../types\";\nimport { RequiredOptions } from \"./QROptions\";\n\nconst squareMask = [\n [1, 1, 1, 1, 1, 1, 1],\n [1, 0, 0, 0, 0, 0, 1],\n [1, 0, 0, 0, 0, 0, 1],\n [1, 0, 0, 0, 0, 0, 1],\n [1, 0, 0, 0, 0, 0, 1],\n [1, 0, 0, 0, 0, 0, 1],\n [1, 1, 1, 1, 1, 1, 1]\n];\n\nconst dotMask = [\n [0, 0, 0, 0, 0, 0, 0],\n [0, 0, 0, 0, 0, 0, 0],\n [0, 0, 1, 1, 1, 0, 0],\n [0, 0, 1, 1, 1, 0, 0],\n [0, 0, 1, 1, 1, 0, 0],\n [0, 0, 0, 0, 0, 0, 0],\n [0, 0, 0, 0, 0, 0, 0]\n];\n\nconst alignmentCount = [\n [35, 47],\n [28, 34],\n [21, 23],\n [14, 14],\n [7, 7],\n [2, 2],\n [1, 1]\n];\n\nexport class QRSVG {\n _element: SVGElement;\n _defs: SVGElement;\n _backgroundClipPath?: SVGElement;\n _dotsClipPath?: SVGElement;\n _cornersSquareClipPath?: SVGElement;\n _cornersDotClipPath?: SVGElement;\n _options: RequiredOptions;\n _qr?: QRCode;\n _document: Document;\n private _imageTools: typeof browserImageTools;\n\n //TODO don't pass all options to this class\n constructor(options: RequiredOptions) {\n this._document = options.document;\n this._element = this._document.createElementNS(\"http://www.w3.org/2000/svg\", \"svg\");\n this._element.setAttribute(\"width\", String(options.width));\n this._element.setAttribute(\"height\", String(options.height));\n this._element.setAttribute(\"viewBox\", `0 0 ${options.width} ${options.height}`);\n this._defs = this._document.createElementNS(\"http://www.w3.org/2000/svg\", \"defs\");\n this._element.appendChild(this._defs);\n this._imageTools = options.imageTools || browserImageTools;\n\n this._options = options;\n }\n\n get width(): number {\n return this._options.width;\n }\n\n get height(): number {\n return this._options.height;\n }\n\n getElement(): SVGElement {\n return this._element;\n }\n\n async drawQR(qr: QRCode): Promise<void> {\n const count = qr.getModuleCount();\n const typeNumber = parseInt(((count - 17) / 4).toFixed(0), 10);\n const dotSize = this._options.dotsOptions.size;\n let drawImageSize = {\n hideXDots: 0,\n hideYDots: 0,\n width: 0,\n height: 0\n };\n\n this._qr = qr;\n\n if (this._options.image) {\n //We need it to get image size\n const size = await this._imageTools.getSize(this._options);\n const { imageOptions, qrOptions } = this._options;\n const coverLevel = imageOptions.imageSize * ErrorCorrectionPercents[qrOptions.errorCorrectionLevel];\n const alignment = alignmentCount.find((v) => v[0] <= typeNumber) || [0, 0];\n const maxHiddenDots = Math.floor(coverLevel * (count * count - 3 * 8 * 8 - 2 * (count - 16) - alignment[1] * 25));\n\n drawImageSize = calculateImageSize({\n originalWidth: size.width,\n originalHeight: size.height,\n maxHiddenDots,\n maxHiddenAxisDots: count - 14,\n dotSize,\n margin: imageOptions.margin\n });\n }\n\n this.drawBackground();\n this.drawDots((i: number, j: number): boolean => {\n if (this._options.imageOptions.hideBackgroundDots) {\n if (\n i >= (count - drawImageSize.hideXDots) / 2 &&\n i < (count + drawImageSize.hideXDots) / 2 &&\n j >= (count - drawImageSize.hideYDots) / 2 &&\n j < (count + drawImageSize.hideYDots) / 2\n ) {\n return false;\n }\n }\n\n if (squareMask[i]?.[j] || squareMask[i - count + 7]?.[j] || squareMask[i]?.[j - count + 7]) {\n return false;\n }\n\n if (dotMask[i]?.[j] || dotMask[i - count + 7]?.[j] || dotMask[i]?.[j - count + 7]) {\n return false;\n }\n\n return true;\n });\n this.drawCorners();\n\n if (this._options.image && drawImageSize.width > 0 && drawImageSize.height > 0) {\n await this.drawImage({ width: drawImageSize.width, height: drawImageSize.height, count, dotSize });\n }\n }\n\n drawBackground(): void {\n const element = this._element;\n const options = this._options;\n\n if (element && options.backgroundOptions) {\n const gradientOptions = options.backgroundOptions.gradient;\n const color = options.backgroundOptions.color;\n\n this._createColor({\n options: gradientOptions,\n color: color,\n additionalRotation: 0,\n x: 0,\n y: 0,\n height: options.height,\n width: options.width,\n name: \"background-color\"\n });\n\n const size = Math.min(options.width, options.height);\n const element = this._document.createElementNS(\"http://www.w3.org/2000/svg\", \"rect\");\n this._backgroundClipPath = this._document.createElementNS(\"http://www.w3.org/2000/svg\", \"clipPath\");\n this._backgroundClipPath.setAttribute(\"id\", \"clip-path-background-color\");\n this._defs.appendChild(this._backgroundClipPath);\n\n element.setAttribute(\"x\", String((options.width - size) / 2));\n element.setAttribute(\"y\", String((options.height - size) / 2));\n element.setAttribute(\"width\", String(size));\n element.setAttribute(\"height\", String(size));\n element.setAttribute(\"rx\", String((size / 2) * (options.backgroundOptions.round || 0)));\n\n this._backgroundClipPath.appendChild(element);\n }\n }\n\n drawDots(filter?: FilterFunction): void {\n if (!this._qr) {\n throw \"QR code is not defined\";\n }\n\n const options = this._options;\n const count = this._qr.getModuleCount();\n\n if (count > options.width || count > options.height) {\n throw \"The canvas is too small.\";\n }\n\n const minSize = Math.min(options.width, options.height);\n const dotSize = this._options.dotsOptions.size;\n const xBeginning = Math.floor((options.width - count * dotSize) / 2);\n const yBeginning = Math.floor((options.height - count * dotSize) / 2);\n const dot = new QRDot({ svg: this._element, type: options.dotsOptions.type, document: this._document });\n\n this._dotsClipPath = this._document.createElementNS(\"http://www.w3.org/2000/svg\", \"clipPath\");\n this._dotsClipPath.setAttribute(\"id\", \"clip-path-dot-color\");\n this._defs.appendChild(this._dotsClipPath);\n\n this._createColor({\n options: options.dotsOptions?.gradient,\n color: options.dotsOptions.color,\n additionalRotation: 0,\n x: 0,\n y: 0,\n height: options.height,\n width: options.width,\n name: \"dot-color\"\n });\n\n for (let i = 0; i < count; i++) {\n for (let j = 0; j < count; j++) {\n if (filter && !filter(i, j)) {\n continue;\n }\n if (!this._qr?.isDark(i, j)) {\n continue;\n }\n\n dot.draw(\n xBeginning + i * dotSize,\n yBeginning + j * dotSize,\n dotSize,\n (xOffset: number, yOffset: number): boolean => {\n if (i + xOffset < 0 || j + yOffset < 0 || i + xOffset >= count || j + yOffset >= count) return false;\n if (filter && !filter(i + xOffset, j + yOffset)) return false;\n return !!this._qr && this._qr.isDark(i + xOffset, j + yOffset);\n }\n );\n\n if (dot._element && this._dotsClipPath) {\n this._dotsClipPath.appendChild(dot._element);\n }\n }\n }\n\n if (options.shape === ShapeType.circle) {\n const additionalDots = Math.floor((minSize / dotSize - count - 2 * this._options.margin) / 2);\n const fakeCount = count + additionalDots * 2;\n const xFakeBeginning = xBeginning - additionalDots * dotSize;\n const yFakeBeginning = yBeginning - additionalDots * dotSize;\n const fakeMatrix: number[][] = [];\n const center = Math.floor(fakeCount / 2);\n\n for (let i = 0; i < fakeCount; i++) {\n fakeMatrix[i] = [];\n for (let j = 0; j < fakeCount; j++) {\n if (\n i >= additionalDots - 1 &&\n i <= fakeCount - additionalDots &&\n j >= additionalDots - 1 &&\n j <= fakeCount - additionalDots\n ) {\n fakeMatrix[i][j] = 0;\n continue;\n }\n\n if (Math.sqrt((i - center) * (i - center) + (j - center) * (j - center)) > center) {\n fakeMatrix[i][j] = 0;\n continue;\n }\n\n //Get random dots from QR code to show it outside of QR code\n fakeMatrix[i][j] = this._qr.isDark(\n j - 2 * additionalDots < 0 ? j : j >= count ? j - 2 * additionalDots : j - additionalDots,\n i - 2 * additionalDots < 0 ? i : i >= count ? i - 2 * additionalDots : i - additionalDots\n )\n ? 1\n : 0;\n }\n }\n\n for (let i = 0; i < fakeCount; i++) {\n for (let j = 0; j < fakeCount; j++) {\n if (!fakeMatrix[i][j]) continue;\n\n dot.draw(\n xFakeBeginning + i * dotSize,\n yFakeBeginning + j * dotSize,\n dotSize,\n (xOffset: number, yOffset: number): boolean => {\n return !!fakeMatrix[i + xOffset]?.[j + yOffset];\n }\n );\n if (dot._element && this._dotsClipPath) {\n this._dotsClipPath.appendChild(dot._element);\n }\n }\n }\n }\n }\n\n drawCorners(): void {\n if (!this._qr) {\n throw \"QR code is not defined\";\n }\n\n const element = this._element;\n const options = this._options;\n\n if (!element) {\n throw \"Element code is not defined\";\n }\n\n const count = this._qr.getModuleCount();\n const dotSize = this._options.dotsOptions.size;\n const cornersSquareSize = dotSize * 7;\n const cornersDotSize = dotSize * 3;\n const xBeginning = Math.floor((options.width - count * dotSize) / 2);\n const yBeginning = Math.floor((options.height - count * dotSize) / 2);\n\n [\n [0, 0, 0],\n [1, 0, Math.PI / 2],\n [0, 1, -Math.PI / 2]\n ].forEach(([column, row, rotation]) => {\n const x = xBeginning + column * dotSize * (count - 7);\n const y = yBeginning + row * dotSize * (count - 7);\n let cornersSquareClipPath = this._dotsClipPath;\n let cornersDotClipPath = this._dotsClipPath;\n\n if (options.cornersSquareOptions?.gradient || options.cornersSquareOptions?.color) {\n cornersSquareClipPath = this._document.createElementNS(\"http://www.w3.org/2000/svg\", \"clipPath\");\n cornersSquareClipPath.setAttribute(\"id\", `clip-path-corners-square-color-${column}-${row}`);\n this._defs.appendChild(cornersSquareClipPath);\n this._cornersSquareClipPath = this._cornersDotClipPath = cornersDotClipPath = cornersSquareClipPath;\n\n this._createColor({\n options: options.cornersSquareOptions?.gradient,\n color: options.cornersSquareOptions?.color,\n additionalRotation: rotation,\n x,\n y,\n height: cornersSquareSize,\n width: cornersSquareSize,\n name: `corners-square-color-${column}-${row}`\n });\n }\n\n if (options.cornersSquareOptions?.type) {\n const cornersSquare = new QRCornerSquare({\n svg: this._element,\n type: options.cornersSquareOptions.type,\n document: this._document\n });\n\n cornersSquare.draw(x, y, cornersSquareSize, rotation);\n\n if (cornersSquare._element && cornersSquareClipPath) {\n cornersSquareClipPath.appendChild(cornersSquare._element);\n }\n } else {\n const dot = new QRDot({ svg: this._element, type: options.dotsOptions.type, document: this._document });\n\n for (let i = 0; i < squareMask.length; i++) {\n for (let j = 0; j < squareMask[i].length; j++) {\n if (!squareMask[i]?.[j]) {\n continue;\n }\n\n dot.draw(\n x + i * dotSize,\n y + j * dotSize,\n dotSize,\n (xOffset: number, yOffset: number): boolean => !!squareMask[i + xOffset]?.[j + yOffset]\n );\n\n if (dot._element && cornersSquareClipPath) {\n cornersSquareClipPath.appendChild(dot._element);\n }\n }\n }\n }\n\n if (options.cornersDotOptions?.gradient || options.cornersDotOptions?.color) {\n cornersDotClipPath = this._document.createElementNS(\"http://www.w3.org/2000/svg\", \"clipPath\");\n cornersDotClipPath.setAttribute(\"id\", `clip-path-corners-dot-color-${column}-${row}`);\n this._defs.appendChild(cornersDotClipPath);\n this._cornersDotClipPath = cornersDotClipPath;\n\n this._createColor({\n options: options.cornersDotOptions?.gradient,\n color: options.cornersDotOptions?.color,\n additionalRotation: rotation,\n x: x + dotSize * 2,\n y: y + dotSize * 2,\n height: cornersDotSize,\n width: cornersDotSize,\n name: `corners-dot-color-${column}-${row}`\n });\n }\n\n if (options.cornersDotOptions?.type) {\n const cornersDot = new QRCornerDot({\n svg: this._element,\n type: options.cornersDotOptions.type,\n document: this._document\n });\n\n cornersDot.draw(x + dotSize * 2, y + dotSize * 2, cornersDotSize, rotation);\n\n if (cornersDot._element && cornersDotClipPath) {\n cornersDotClipPath.appendChild(cornersDot._element);\n }\n } else {\n const dot = new QRDot({ svg: this._element, type: options.dotsOptions.type, document: this._document });\n\n for (let i = 0; i < dotMask.length; i++) {\n for (let j = 0; j < dotMask[i].length; j++) {\n if (!dotMask[i]?.[j]) {\n continue;\n }\n\n dot.draw(\n x + i * dotSize,\n y + j * dotSize,\n dotSize,\n (xOffset: number, yOffset: number): boolean => !!dotMask[i + xOffset]?.[j + yOffset]\n );\n\n if (dot._element && cornersDotClipPath) {\n cornersDotClipPath.appendChild(dot._element);\n }\n }\n }\n }\n });\n }\n\n async drawImage({\n width,\n height,\n count,\n dotSize\n }: {\n width: number;\n height: number;\n count: number;\n dotSize: number;\n }): Promise<void> {\n const options = this._options;\n const xBeginning = Math.floor((options.width - count * dotSize) / 2);\n const yBeginning = Math.floor((options.height - count * dotSize) / 2);\n const margin = options.imageOptions.margin * dotSize;\n const dx = xBeginning + margin + (count * dotSize - width) / 2;\n const dy = yBeginning + margin + (count * dotSize - height) / 2;\n const dw = width - margin * 2;\n const dh = height - margin * 2;\n\n const imageUrl = await this._imageTools.toDataURL(options.image || \"\");\n let image: SVGElement = this._document.createElementNS(\"http://www.w3.org/2000/svg\", \"image\");\n image.setAttribute(\"href\", imageUrl || \"\");\n\n if (imageUrl.startsWith(\"data:image/svg+xml;\")) {\n let data = imageUrl.substring(19);\n const i = data.indexOf(\",\");\n const encoding = data.substring(0, i);\n data = data.substring(i + 1);\n\n switch (encoding) {\n case \"base64\":\n data = typeof atob == \"function\" ? atob(data) : Buffer.from(data, \"base64\").toString(\"utf8\");\n break;\n default:\n data = \"\";\n break;\n }\n\n if (data) {\n const container = new DOMParser().parseFromString(data, \"text/xml\");\n const rootEl = Array.from(container.getElementsByTagName(\"svg\"));\n if (rootEl.length) image = rootEl[0];\n }\n }\n\n image.setAttribute(\"x\", String(dx));\n image.setAttribute(\"y\", String(dy));\n image.setAttribute(\"width\", `${dw}px`);\n image.setAttribute(\"height\", `${dh}px`);\n\n this._element.appendChild(image);\n }\n\n _createColor({\n options,\n color,\n additionalRotation,\n x,\n y,\n height,\n width,\n name\n }: {\n options?: Gradient;\n color?: string;\n additionalRotation: number;\n x: number;\n y: number;\n height: number;\n width: number;\n name: string;\n }): void {\n const size = width > height ? width : height;\n const rect = this._document.createElementNS(\"http://www.w3.org/2000/svg\", \"rect\");\n rect.setAttribute(\"x\", String(x));\n rect.setAttribute(\"y\", String(y));\n rect.setAttribute(\"height\", String(height));\n rect.setAttribute(\"width\", String(width));\n rect.setAttribute(\"clip-path\", `url('#clip-path-${name}')`);\n\n if (options) {\n let gradient: SVGElement;\n if (options.type === GradientType.radial) {\n gradient = this._document.createElementNS(\"http://www.w3.org/2000/svg\", \"radialGradient\");\n gradient.setAttribute(\"id\", name);\n gradient.setAttribute(\"gradientUnits\", \"userSpaceOnUse\");\n gradient.setAttribute(\"fx\", String(x + width / 2));\n gradient.setAttribute(\"fy\", String(y + height / 2));\n gradient.setAttribute(\"cx\", String(x + width / 2));\n gradient.setAttribute(\"cy\", String(y + height / 2));\n gradient.setAttribute(\"r\", String(size / 2));\n } else {\n const rotation = ((options.rotation || 0) + additionalRotation) % (2 * Math.PI);\n const positiveRotation = (rotation + 2 * Math.PI) % (2 * Math.PI);\n let x0 = x + width / 2;\n let y0 = y + height / 2;\n let x1 = x + width / 2;\n let y1 = y + height / 2;\n\n if (\n (positiveRotation >= 0 && positiveRotation <= 0.25 * Math.PI) ||\n (positiveRotation > 1.75 * Math.PI && positiveRotation <= 2 * Math.PI)\n ) {\n x0 = x0 - width / 2;\n y0 = y0 - (height / 2) * Math.tan(rotation);\n x1 = x1 + width / 2;\n y1 = y1 + (height / 2) * Math.tan(rotation);\n } else if (positiveRotation > 0.25 * Math.PI && positiveRotation <= 0.75 * Math.PI) {\n y0 = y0 - height / 2;\n x0 = x0 - width / 2 / Math.tan(rotation);\n y1 = y1 + height / 2;\n x1 = x1 + width / 2 / Math.tan(rotation);\n } else if (positiveRotation > 0.75 * Math.PI && positiveRotation <= 1.25 * Math.PI) {\n x0 = x0 + width / 2;\n y0 = y0 + (height / 2) * Math.tan(rotation);\n x1 = x1 - width / 2;\n y1 = y1 - (height / 2) * Math.tan(rotation);\n } else if (positiveRotation > 1.25 * Math.PI && positiveRotation <= 1.75 * Math.PI) {\n y0 = y0 + height / 2;\n x0 = x0 + width / 2 / Math.tan(rotation);\n y1 = y1 - height / 2;\n x1 = x1 - width / 2 / Math.tan(rotation);\n }\n\n gradient = this._document.createElementNS(\"http://www.w3.org/2000/svg\", \"linearGradient\");\n gradient.setAttribute(\"id\", name);\n gradient.setAttribute(\"gradientUnits\", \"userSpaceOnUse\");\n gradient.setAttribute(\"x1\", String(Math.round(x0)));\n gradient.setAttribute(\"y1\", String(Math.round(y0)));\n gradient.setAttribute(\"x2\", String(Math.round(x1)));\n gradient.setAttribute(\"y2\", String(Math.round(y1)));\n }\n\n options.colorStops.forEach(({ offset, color }: { offset: number; color: string }) => {\n const stop = this._document.createElementNS(\"http://www.w3.org/2000/svg\", \"stop\");\n stop.setAttribute(\"offset\", `${100 * offset}%`);\n stop.setAttribute(\"stop-color\", color);\n gradient.appendChild(stop);\n });\n\n rect.setAttribute(\"fill\", `url('#${name}')`);\n this._defs.appendChild(gradient);\n } else if (color) {\n rect.setAttribute(\"fill\", color);\n }\n\n this._element.appendChild(rect);\n }\n}\n","interface ImageSizeOptions {\n originalHeight: number;\n originalWidth: number;\n maxHiddenDots: number;\n maxHiddenAxisDots?: number;\n dotSize: number;\n margin: number;\n}\n\ninterface ImageSizeResult {\n height: number;\n width: number;\n hideYDots: number;\n hideXDots: number;\n}\n\nexport function calculateImageSize({\n originalHeight,\n originalWidth,\n maxHiddenDots,\n maxHiddenAxisDots,\n dotSize,\n margin\n}: ImageSizeOptions): ImageSizeResult {\n const hideDots = { x: 0, y: 0 };\n const imageSize = { x: 0, y: 0 };\n\n if (\n originalHeight <= 0 ||\n originalWidth <= 0 ||\n maxHiddenDots <= 0 ||\n dotSize <= 0 ||\n 4 * margin ** 2 > maxHiddenDots\n ) {\n return {\n height: 0,\n width: 0,\n hideYDots: 0,\n hideXDots: 0\n };\n }\n\n //If set, ensure maxHiddenAxisDots is odd and at least 1\n if (maxHiddenAxisDots && maxHiddenAxisDots % 2 == 0) maxHiddenAxisDots = Math.max(1, maxHiddenAxisDots - 1);\n\n //Determine the bigger and smaller image dimension\n const dimMax = Math.max(originalWidth, originalHeight);\n const dimMin = Math.min(originalWidth, originalHeight);\n\n //Find max image size along the bigger dimension\n let lower = 0,\n upper = (maxHiddenAxisDots || maxHiddenDots) - 2 * margin;\n do {\n const size = lower + (upper - lower) / 2;\n let dotsMax = Math.max(1, Math.ceil(size + 2 * margin));\n if (dotsMax % 2 == 0) dotsMax++;\n let dotsMin = Math.max(1, Math.ceil((size * dimMin) / dimMax + 2 * margin));\n if (dotsMin % 2 == 0) dotsMin++;\n\n if (dotsMax * dotsMin > maxHiddenDots) upper = size;\n else lower = size;\n } while (Math.abs(lower - upper) > 0.001);\n\n //Calculate how many dots the given size corresponds to\n const size = lower;\n let hideMax = Math.max(1, Math.ceil(size + 2 * margin));\n if (hideMax % 2 == 0) hideMax++;\n let hideMin = Math.max(1, Math.ceil((size * dimMin) / dimMax + 2 * margin));\n if (hideMin % 2 == 0) hideMin++;\n\n //Set hidden dots along bigger and smaller dimension to the right axis\n if (originalWidth > originalHeight) {\n hideDots.x = hideMax;\n hideDots.y = hideMin;\n } else {\n hideDots.x = hideMin;\n hideDots.y = hideMax;\n }\n\n //Fit image to the hidden dots\n const maxW = (hideDots.x - 2 * margin) * dotSize;\n const maxH = (hideDots.y - 2 * margin) * dotSize;\n imageSize.x = maxW;\n imageSize.y = (maxW * originalHeight) / originalWidth;\n if (imageSize.y > maxH) {\n imageSize.y = maxH;\n imageSize.x = (maxH * originalWidth) / originalHeight;\n }\n\n return {\n height: Math.round(imageSize.y + 2 * margin * dotSize),\n width: Math.round(imageSize.x + 2 * margin * dotSize),\n hideYDots: hideDots.y,\n hideXDots: hideDots.x\n };\n}\n","import qrcode from \"qrcode-generator\";\nimport { getMode } from \"../tools/getMode\";\nimport { mergeDeep } from \"../tools/merge\";\nimport { sanitizeOptions } from \"../tools/sanitizeOptions\";\nimport { ExtensionFunction, Options, QRCode, ShapeType } from \"../types\";\nimport { defaultOptions, RequiredOptions } from \"./QROptions\";\nimport { QRSVG } from \"./QRSVG\";\nexport class QRCodeStyling {\n _options: RequiredOptions;\n _container?: HTMLElement;\n _svg?: SVGElement;\n _qr?: QRCode;\n _extension?: ExtensionFunction;\n _svgDrawingPromise?: Promise<void>;\n\n constructor(options?: Partial<Options>) {\n this._options = options ? sanitizeOptions(mergeDeep(defaultOptions, options) as RequiredOptions) : defaultOptions;\n this.update();\n }\n\n static _clearContainer(container?: HTMLElement): void {\n if (container) {\n container.innerHTML = \"\";\n }\n }\n\n _setupSvg(): void {\n if (!this._qr) {\n return;\n }\n const count = Math.ceil((this._options.shape == ShapeType.circle ? Math.sqrt(2) : 1) * this._qr.getModuleCount());\n const size = this._options.dotsOptions.size * (count + 2 * this._options.margin);\n const qrSVG = new QRSVG({\n ...this._options,\n width: size,\n height: size\n });\n\n this._svg = qrSVG.getElement();\n this._svgDrawingPromise = qrSVG.drawQR(this._qr).then(() => {\n if (!this._svg) return;\n this._extension?.(qrSVG.getElement(), this._options);\n });\n }\n\n async _getElement(): Promise<SVGElement | undefined> {\n if (!this._qr) throw \"QR code is empty\";\n\n if (!this._svg || !this._svgDrawingPromise) {\n this._setupSvg();\n }\n await this._svgDrawingPromise;\n return this._svg;\n }\n\n update(options?: Partial<Options>): void {\n QRCodeStyling._clearContainer(this._container);\n this._options = options ? sanitizeOptions(mergeDeep(this._options, options) as RequiredOptions) : this._options;\n\n if (!this._options.data) {\n return;\n }\n\n this._qr = qrcode(this._options.qrOptions.typeNumber, this._options.qrOptions.errorCorrectionLevel);\n this._qr.addData(this._options.data, this._options.qrOptions.mode || getMode(this._options.data));\n this._qr.make();\n\n this._setupSvg();\n\n this.append(this._container);\n }\n\n append(container?: HTMLElement): void {\n if (!container) {\n return;\n }\n\n if (typeof container.appendChild !== \"function\") {\n throw \"Container should be a single DOM node\";\n }\n\n if (this._svg) {\n container.appendChild(this._svg);\n }\n\n this._container = container;\n }\n\n applyExtension(extension: ExtensionFunction): void {\n if (!extension) {\n throw \"Extension function should be defined.\";\n }\n\n this._extension = extension;\n this.update();\n }\n\n deleteExtension(): void {\n this._extension = undefined;\n this.update();\n }\n\n async serialize(): Promise<string | undefined> {\n if (!this._qr) throw \"QR code is empty\";\n\n const element = await this._getElement();\n\n if (!element) {\n return;\n }\n\n const serializer = new XMLSerializer();\n let source = serializer.serializeToString(element);\n\n source = '<?xml version=\"1.0\" standalone=\"no\"?>\\r\\n' + source;\n return source;\n }\n}\n","import { Mode } from \"../types\";\n\nexport function getMode(data: string): Mode {\n switch (true) {\n case /^[0-9]*$/.test(data):\n return Mode.numeric;\n case /^[0-9A-Z $%*+\\-./:]*$/.test(data):\n return Mode.alphanumeric;\n default:\n return Mode.byte;\n }\n}\n","import { QRCodeStyling } from \"../core/QRCodeStyling\";\nimport { defaultCanvasOptions, RequiredCanvasOptions } from \"../core/QROptions\";\nimport { CanvasOptions, FileExtension } from \"../types\";\nimport { mergeDeep } from \"./merge\";\nimport { sanitizeCanvasOptions } from \"./sanitizeOptions\";\n\nexport function drawToCanvas(\n qrCode: QRCodeStyling,\n options?: CanvasOptions\n): { canvas: HTMLCanvasElement; canvasDrawingPromise: Promise<void> | undefined } | undefined {\n if (!qrCode._qr) {\n return;\n }\n\n const { width, height, margin } = options\n ? sanitizeCanvasOptions(mergeDeep(defaultCanvasOptions, options) as RequiredCanvasOptions)\n : defaultCanvasOptions;\n\n const canvas = document.createElement(\"canvas\");\n canvas.width = width;\n canvas.height = height;\n\n const size = Math.min(width, height) - 2 * margin;\n\n qrCode._setupSvg();\n const canvasDrawingPromise = qrCode._svgDrawingPromise?.then(async () => {\n if (!qrCode._svg) return;\n\n const xml = await qrCode.serialize();\n if (!xml) return;\n const svg64 = btoa(xml);\n const image64 = \"data:image/svg+xml;base64,\" + svg64;\n const image = new Image();\n\n return new Promise<void>((resolve, reject) => {\n image.onload = (): void => {\n canvas?.getContext(\"2d\")?.drawImage(image, (width - size) / 2, (height - size) / 2, size, size);\n resolve();\n };\n image.onerror = image.onabort = reject;\n\n image.src = image64;\n });\n });\n\n return { canvas, canvasDrawingPromise };\n}\n\nexport async function download(\n qrCode: QRCodeStyling,\n downloadOptions: FileExtension | { name?: string; extension: FileExtension },\n options?: CanvasOptions\n): Promise<void> {\n if (!qrCode._qr) throw \"QR code is empty\";\n let extension = FileExtension.png;\n let name = \"qr\";\n\n //TODO remove deprecated code in the v2\n if (typeof downloadOptions === \"string\") {\n extension = downloadOptions;\n console.warn(\n \"Extension is deprecated as argument for 'download' method, please pass object { name: '...', extension: '...' } as argument\"\n );\n } else if (typeof downloadOptions === \"object\" && downloadOptions !== null) {\n if (downloadOptions.name) {\n name = downloadOptions.name;\n }\n if (downloadOptions.extension) {\n extension = downloadOptions.extension;\n }\n }\n\n if (extension.toLowerCase() === \"svg\") {\n let source = await qrCode.serialize();\n source = '<?xml version=\"1.0\" standalone=\"no\"?>\\r\\n' + source;\n const url = \"data:image/svg+xml;charset=utf-8,\" + encodeURIComponent(source);\n downloadURI(url, `${name}.svg`);\n } else {\n const res = drawToCanvas(qrCode, options);\n if (!res) return;\n const { canvas, canvasDrawingPromise } = res;\n await canvasDrawingPromise;\n const url = canvas.toDataURL(`image/${extension}`);\n downloadURI(url, `${name}.${extension}`);\n }\n}\n\nexport function downloadURI(uri: string, name: string): void {\n const link = document.createElement(\"a\");\n link.download = name;\n link.href = uri;\n document.body.appendChild(link);\n link.click();\n document.body.removeChild(link);\n}\n"],"names":["DotType","CornerDotType","CornerSquareType","GradientType","ShapeType","exports","TypeNumber","Array","fill","map","_","i","ErrorCorrectionLevel","Mode","FileExtension","ErrorCorrectionPercents","L","M","Q","H","qrcode","typeNumber","errorCorrectionLevel","_typeNumber","_errorCorrectionLevel","QRErrorCorrectionLevel","_modules","_moduleCount","_dataCache","_dataList","_this","makeImpl","test","maskPattern","moduleCount","modules","row","col","setupPositionProbePattern","setupPositionAdjustPattern","setupTimingPattern","setupTypeInfo","setupTypeNumber","createData","mapData","r","c","pos","QRUtil","getPatternPosition","length","j","bits","getBCHTypeNumber","mod","Math","floor","data","getBCHTypeInfo","inc","bitIndex","byteIndex","maskFunc","getMaskFunction","dark","dataList","rsBlocks","QRRSBlock","getRSBlocks","buffer","qrBitBuffer","put","getMode","getLength","getLengthInBits","write","totalDataCount","dataCount","putBit","offset","maxDcCount","maxEcCount","dcdata","ecdata","dcCount","ecCount","totalCount","max","getBuffer","rsPoly","getErrorCorrectPolynomial","modPoly","qrPolynomial","modIndex","getAt","totalCodeCount","index","createBytes","addData","mode","newData","qrNumber","qrAlphaNum","qr8BitByte","qrKanji","push","isDark","getModuleCount","make","minLostPoint","pattern","lostPoint","getLostPoint","getBestMaskPattern","createTableTag","cellSize","margin","qrHtml","createSvgTag","alt","title","opts","arguments","text","id","mr","rect","size","qrSvg","scalable","escapeXml","join","trim","createDataURL","min","x","y","createImgTag","img","s","escaped","charAt","createASCII","r1","r2","p","blocks","blocksLastLineNoMargin","ascii","substring","_createHalfASCII","white","black","line","renderTo2dContext","context","fillStyle","fillRect","stringToBytes","stringToBytesFuncs","default","bytes","charCodeAt","createStringToBytes","unicodeData","numChars","unicodeMap","bin","base64DecodeInputStream","read","b","count","b0","b1","v","String","fromCharCode","unknownChar","PATTERN_POSITION_TABLE","G15","G18","getBCHDigit","QRMode","QRMaskPattern","digit","d","errorCorrectLength","a","multiply","QRMath","gexp","type","sameCount","darkCount","abs","EXP_TABLE","LOG_TABLE","n","num","shift","_num","e","glog","ratio","RS_BLOCK_TABLE","qrRSBlock","rsBlock","getRsBlockTable","list","_buffer","_length","bufIndex","bit","_mode","_data","strToNum","chatToNum","getCode","_bytes","code","byteArrayOutputStream","writeByte","off","len","str","_str","_pos","_buflen","match","decode","width","height","getPixel","gif","_width","_height","pixel","out","writeString","writeShort","raster","getLZWRaster","writeBytes","lzwMinCodeSize","clearCode","endCode","bitLength","table","lzwTable","add","_out","_bitLength","_bitBuffer","byteOut","bitOut","dataIndex","contains","indexOf","flush","toByteArray","_map","_size","key","gifImage","setPixel","base64","_base64","writeEncoded","encode","padlen","toString","base64EncodeOutputStream","utf8","charcode","toUTF8Array","module","isObject","obj","isArray","mergeDeep","target","sources","source","undefined","Object","keys","forEach","targetValue","sourceValue","assign","sanitizeGradient","gradient","newGradient","colorStops","rotation","Number","colorStop","sanitizeOptions","options","newOptions","imageOptions","hideBackgroundDots","Boolean","imageSize","dotsOptions","cornersSquareOptions","cornersDotOptions","backgroundOptions","document","defaultOptions","shape","square","qrOptions","crossOrigin","color","defaultCanvasOptions","QRCornerDot","constructor","svg","this","_svg","_type","_document","draw","drawFunction","_drawSquare","dot","_drawDot","call","_rotateFigure","cx","cy","_element","setAttribute","PI","_basicDot","args","createElementNS","_basicSquare","QRCornerSquare","extraRounded","_drawExtraRounded","dotSize","_basicExtraRounded","QRDot","getNeighbor","dots","classy","_drawClassy","classyRounded","_drawClassyRounded","rounded","_drawRounded","_basicSideRounded","_basicCornerRounded","_basicCornerExtraRounded","_basicCornersRounded","leftNeighbor","rightNeighbor","topNeighbor","bottomNeighbor","neighborsCount","browserImageTools","toDataURL","url","Promise","resolve","reject","xhr","XMLHttpRequest","onload","reader","FileReader","onloadend","result","readAsDataURL","response","onerror","onabort","ontimeout","open","responseType","send","getSize","image","Image","src","then","catch","squareMask","dotMask","alignmentCount","QRSVG","_defs","appendChild","_imageTools","imageTools","_options","getElement","drawQR","qr","parseInt","toFixed","drawImageSize","hideXDots","hideYDots","_qr","coverLevel","alignment","find","maxHiddenDots","originalHeight","originalWidth","maxHiddenAxisDots","hideDots","dimMax","dimMin","lower","upper","dotsMax","ceil","dotsMin","hideMax","hideMin","maxW","maxH","round","calculateImageSize","drawBackground","drawDots","drawCorners","drawImage","element","gradientOptions","_createColor","additionalRotation","name","_backgroundClipPath","filter","minSize","xBeginning","yBeginning","_dotsClipPath","xOffset","yOffset","circle","additionalDots","fakeCount","xFakeBeginning","yFakeBeginning","fakeMatrix","center","sqrt","cornersSquareSize","cornersDotSize","column","cornersSquareClipPath","cornersDotClipPath","_cornersSquareClipPath","_cornersDotClipPath","cornersSquare","cornersDot","dx","dy","dw","dh","imageUrl","startsWith","encoding","atob","Buffer","from","container","DOMParser","parseFromString","rootEl","getElementsByTagName","radial","positiveRotation","x0","y0","x1","y1","tan","stop","QRCodeStyling","update","_clearContainer","innerHTML","_setupSvg","qrSVG","_svgDrawingPromise","_extension","_getElement","_container","numeric","alphanumeric","byte","append","applyExtension","extension","deleteExtension","serialize","XMLSerializer","serializeToString","drawToCanvas","qrCode","sanitizeCanvasOptions","canvas","createElement","canvasDrawingPromise","async","xml","image64","btoa","getContext","downloadURI","uri","link","download","href","body","click","removeChild","downloadOptions","png","console","warn","toLowerCase","encodeURIComponent","res"],"mappings":"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","x_google_ignoreList":[2]}
|