{"version":3,"sources":["webpack://QRCodeStyling/webpack/universalModuleDefinition","webpack://QRCodeStyling/./node_modules/qrcode-generator/qrcode.js","webpack://QRCodeStyling/./src/tools/merge.ts","webpack://QRCodeStyling/./src/tools/downloadURI.ts","webpack://QRCodeStyling/./src/tools/toDataUrl.ts","webpack://QRCodeStyling/./src/constants/errorCorrectionPercents.ts","webpack://QRCodeStyling/./src/figures/dot/QRDot.ts","webpack://QRCodeStyling/./src/constants/dotTypes.ts","webpack://QRCodeStyling/./src/figures/cornerSquare/QRCornerSquare.ts","webpack://QRCodeStyling/./src/constants/cornerSquareTypes.ts","webpack://QRCodeStyling/./src/figures/cornerDot/QRCornerDot.ts","webpack://QRCodeStyling/./src/constants/cornerDotTypes.ts","webpack://QRCodeStyling/./src/constants/shapeTypes.ts","webpack://QRCodeStyling/./src/core/QRSVG.ts","webpack://QRCodeStyling/./src/tools/calculateImageSize.ts","webpack://QRCodeStyling/./src/constants/gradientTypes.ts","webpack://QRCodeStyling/./src/constants/drawTypes.ts","webpack://QRCodeStyling/./src/constants/qrTypes.ts","webpack://QRCodeStyling/./src/core/QROptions.ts","webpack://QRCodeStyling/./src/constants/errorCorrectionLevels.ts","webpack://QRCodeStyling/./src/tools/sanitizeOptions.ts","webpack://QRCodeStyling/./src/index.ts","webpack://QRCodeStyling/./src/core/QRCodeStyling.ts","webpack://QRCodeStyling/./src/tools/getMode.ts","webpack://QRCodeStyling/./src/constants/modes.ts","webpack://QRCodeStyling/webpack/bootstrap","webpack://QRCodeStyling/webpack/startup","webpack://QRCodeStyling/webpack/runtime/compat get default export","webpack://QRCodeStyling/webpack/runtime/define property getters","webpack://QRCodeStyling/webpack/runtime/hasOwnProperty shorthand"],"names":["root","factory","exports","module","define","amd","self","qrcode","typeNumber","errorCorrectionLevel","_typeNumber","_errorCorrectionLevel","QRErrorCorrectionLevel","_modules","_moduleCount","_dataCache","_dataList","_this","makeImpl","test","maskPattern","moduleCount","modules","Array","row","col","setupPositionProbePattern","setupPositionAdjustPattern","setupTimingPattern","setupTypeInfo","setupTypeNumber","createData","mapData","r","c","pos","QRUtil","getPatternPosition","i","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","bytes","charCodeAt","createStringToBytes","unicodeData","numChars","unicodeMap","bin","base64DecodeInputStream","read","b","count","b0","b1","v","String","fromCharCode","unknownChar","PATTERN_POSITION_TABLE","G15","G18","getBCHDigit","L","M","Q","H","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","_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","isObject","obj","isArray","mergeDeep","target","sources","source","undefined","Object","keys","forEach","targetValue","sourceValue","assign","downloadURI","uri","name","link","document","createElement","download","href","body","appendChild","click","removeChild","toDataURL","url","Promise","resolve","xhr","XMLHttpRequest","onload","reader","FileReader","onloadend","result","readAsDataURL","response","open","responseType","send","svg","this","_svg","_type","draw","getNeighbor","drawFunction","_drawDot","_drawClassy","_drawClassyRounded","_drawRounded","_drawExtraRounded","_drawSquare","call","_rotateFigure","rotation","cx","cy","_element","setAttribute","PI","_basicDot","args","createElementNS","_basicSquare","_basicSideRounded","_basicCornerRounded","_basicCornerExtraRounded","_basicCornersRounded","leftNeighbor","rightNeighbor","topNeighbor","bottomNeighbor","neighborsCount","dotSize","_basicExtraRounded","squareMask","dotMask","options","_defs","_options","getElement","drawQR","qr","minSize","realQRSize","shape","shapeTypes","sqrt","drawImageSize","hideXDots","hideYDots","_qr","image","loadImage","_image","imageOptions","qrOptions","coverLevel","imageSize","errorCorrectionPercents","maxHiddenDots","originalHeight","originalWidth","maxHiddenAxisDots","hideDots","k","ceil","round","calculateImageSize","drawBackground","drawDots","hideBackgroundDots","drawCorners","drawImage","element","gradientOptions","backgroundOptions","gradient","color","_createColor","additionalRotation","_backgroundClipPath","filter","xBeginning","yBeginning","dot","dotsOptions","_dotsClipPath","xOffset","yOffset","additionalDots","fakeCount","xFakeBeginning","yFakeBeginning","center","cornersSquareSize","cornersDotSize","column","cornersSquareClipPath","cornersDotClipPath","cornersSquareOptions","_cornersSquareClipPath","_cornersDotClipPath","cornersSquare","cornersDotOptions","cornersDot","reject","Image","crossOrigin","src","dx","dy","dw","dh","imageUrl","positiveRotation","x0","y0","x1","y1","tan","colorStops","stop","qrTypes","drawTypes","sanitizeGradient","newGradient","Number","map","colorStop","sanitizeOptions","newOptions","Boolean","update","_clearContainer","container","innerHTML","_setupSvg","qrSVG","_svgDrawingPromise","then","_extension","_setupCanvas","_canvas","_canvasDrawingPromise","xml","XMLSerializer","serializeToString","image64","btoa","getContext","_getElement","extension","toLowerCase","QRCodeStyling","_container","append","applyExtension","deleteExtension","getRawData","serializer","Blob","toBlob","downloadOptions","console","warn","encodeURIComponent","__webpack_module_cache__","__webpack_require__","moduleId","__webpack_modules__","getter","__esModule","definition","o","defineProperty","enumerable","get","prop","prototype","hasOwnProperty"],"mappings":"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","file":"qr-code-styling.js","sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"QRCodeStyling\"] = factory();\n\telse\n\t\troot[\"QRCodeStyling\"] = factory();\n})(self, function() {\nreturn ","//---------------------------------------------------------------------\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 += '&lt;'; break;\n        case '>': escaped += '&gt;'; break;\n        case '&': escaped += '&amp;'; break;\n        case '\"': escaped += '&quot;'; 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 default 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","export default 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","export default async function toDataURL(url: string): Promise<string> {\n  return new Promise((resolve) => {\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.open(\"GET\", url);\n    xhr.responseType = \"blob\";\n    xhr.send();\n  });\n}\n","interface ErrorCorrectionPercents {\n  [key: string]: number;\n}\n\nexport default {\n  L: 0.07,\n  M: 0.15,\n  Q: 0.25,\n  H: 0.3\n} as ErrorCorrectionPercents;\n","import dotTypes from \"../../constants/dotTypes\";\nimport { DotType, GetNeighbor, DrawArgs, BasicFigureDrawArgs, RotateFigureArgs } from \"../../types\";\n\nexport default class QRDot {\n  _element?: SVGElement;\n  _svg: SVGElement;\n  _type: DotType;\n\n  constructor({ svg, type }: { svg: SVGElement; type: DotType }) {\n    this._svg = svg;\n    this._type = type;\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 dotTypes.dots:\n        drawFunction = this._drawDot;\n        break;\n      case dotTypes.classy:\n        drawFunction = this._drawClassy;\n        break;\n      case dotTypes.classyRounded:\n        drawFunction = this._drawClassyRounded;\n        break;\n      case dotTypes.rounded:\n        drawFunction = this._drawRounded;\n        break;\n      case dotTypes.extraRounded:\n        drawFunction = this._drawExtraRounded;\n        break;\n      case dotTypes.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 = 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 = 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 = 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 = 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 = 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 = 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 { DotTypes } from \"../types\";\n\nexport default {\n  dots: \"dots\",\n  rounded: \"rounded\",\n  classy: \"classy\",\n  classyRounded: \"classy-rounded\",\n  square: \"square\",\n  extraRounded: \"extra-rounded\"\n} as DotTypes;\n","import cornerSquareTypes from \"../../constants/cornerSquareTypes\";\nimport { CornerSquareType, DrawArgs, BasicFigureDrawArgs, RotateFigureArgs } from \"../../types\";\n\nexport default class QRCornerSquare {\n  _element?: SVGElement;\n  _svg: SVGElement;\n  _type: CornerSquareType;\n\n  constructor({ svg, type }: { svg: SVGElement; type: CornerSquareType }) {\n    this._svg = svg;\n    this._type = type;\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 cornerSquareTypes.square:\n        drawFunction = this._drawSquare;\n        break;\n      case cornerSquareTypes.extraRounded:\n        drawFunction = this._drawExtraRounded;\n        break;\n      case cornerSquareTypes.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 = 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 = 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 = 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 { CornerSquareTypes } from \"../types\";\n\nexport default {\n  dot: \"dot\",\n  square: \"square\",\n  extraRounded: \"extra-rounded\"\n} as CornerSquareTypes;\n","import cornerDotTypes from \"../../constants/cornerDotTypes\";\nimport { CornerDotType, RotateFigureArgs, BasicFigureDrawArgs, DrawArgs } from \"../../types\";\n\nexport default class QRCornerDot {\n  _element?: SVGElement;\n  _svg: SVGElement;\n  _type: CornerDotType;\n\n  constructor({ svg, type }: { svg: SVGElement; type: CornerDotType }) {\n    this._svg = svg;\n    this._type = type;\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 cornerDotTypes.square:\n        drawFunction = this._drawSquare;\n        break;\n      case cornerDotTypes.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 = 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 = 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 { CornerDotTypes } from \"../types\";\n\nexport default {\n  dot: \"dot\",\n  square: \"square\"\n} as CornerDotTypes;\n","import { ShapeTypes } from \"../types\";\n\nexport default {\n  square: \"square\",\n  circle: \"circle\"\n} as ShapeTypes;\n","import calculateImageSize from \"../tools/calculateImageSize\";\nimport toDataUrl from \"../tools/toDataUrl\";\nimport errorCorrectionPercents from \"../constants/errorCorrectionPercents\";\nimport QRDot from \"../figures/dot/QRDot\";\nimport QRCornerSquare from \"../figures/cornerSquare/QRCornerSquare\";\nimport QRCornerDot from \"../figures/cornerDot/QRCornerDot\";\nimport { RequiredOptions } from \"./QROptions\";\nimport gradientTypes from \"../constants/gradientTypes\";\nimport shapeTypes from \"../constants/shapeTypes\";\nimport { QRCode, FilterFunction, Gradient } from \"../types\";\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 default 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  _image?: HTMLImageElement;\n\n  //TODO don't pass all options to this class\n  constructor(options: RequiredOptions) {\n    this._element = 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._defs = document.createElementNS(\"http://www.w3.org/2000/svg\", \"defs\");\n    this._element.appendChild(this._defs);\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 minSize = Math.min(this._options.width, this._options.height) - this._options.margin * 2;\n    const realQRSize = this._options.shape === shapeTypes.circle ? minSize / Math.sqrt(2) : minSize;\n    const dotSize = Math.floor(realQRSize / count);\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      await this.loadImage();\n      if (!this._image) return;\n      const { imageOptions, qrOptions } = this._options;\n      const coverLevel = imageOptions.imageSize * errorCorrectionPercents[qrOptions.errorCorrectionLevel];\n      const maxHiddenDots = Math.floor(coverLevel * count * count);\n\n      drawImageSize = calculateImageSize({\n        originalWidth: this._image.width,\n        originalHeight: this._image.height,\n        maxHiddenDots,\n        maxHiddenAxisDots: count - 14,\n        dotSize\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) {\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) {\n      const gradientOptions = options.backgroundOptions?.gradient;\n      const color = options.backgroundOptions?.color;\n\n      if (gradientOptions || color) {\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\n      if (options.backgroundOptions?.round) {\n        const size = Math.min(options.width, options.height);\n        const element = document.createElementNS(\"http://www.w3.org/2000/svg\", \"rect\");\n        this._backgroundClipPath = 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));\n\n        this._backgroundClipPath.appendChild(element);\n      }\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) - options.margin * 2;\n    const realQRSize = options.shape === shapeTypes.circle ? minSize / Math.sqrt(2) : minSize;\n    const dotSize = Math.floor(realQRSize / count);\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 });\n\n    this._dotsClipPath = 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 === shapeTypes.circle) {\n      const additionalDots = Math.floor((minSize / dotSize - count) / 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 minSize = Math.min(options.width, options.height) - options.margin * 2;\n    const realQRSize = options.shape === shapeTypes.circle ? minSize / Math.sqrt(2) : minSize;\n    const dotSize = Math.floor(realQRSize / count);\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 = 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({ svg: this._element, type: options.cornersSquareOptions.type });\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 });\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 = 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({ svg: this._element, type: options.cornersDotOptions.type });\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 });\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  loadImage(): Promise<void> {\n    return new Promise((resolve, reject) => {\n      const options = this._options;\n      const image = new Image();\n\n      if (!options.image) {\n        return reject(\"Image is not defined\");\n      }\n\n      if (typeof options.imageOptions.crossOrigin === \"string\") {\n        image.crossOrigin = options.imageOptions.crossOrigin;\n      }\n\n      this._image = image;\n      image.onload = (): void => {\n        resolve();\n      };\n      image.src = options.image;\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 dx = xBeginning + options.imageOptions.margin + (count * dotSize - width) / 2;\n    const dy = yBeginning + options.imageOptions.margin + (count * dotSize - height) / 2;\n    const dw = width - options.imageOptions.margin * 2;\n    const dh = height - options.imageOptions.margin * 2;\n\n    const image = document.createElementNS(\"http://www.w3.org/2000/svg\", \"image\");\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    const imageUrl = await toDataUrl(options.image || \"\");\n\n    image.setAttribute(\"href\", imageUrl || \"\");\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 = 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 === gradientTypes.radial) {\n        gradient = 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 = 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 = 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}\n\ninterface ImageSizeResult {\n  height: number;\n  width: number;\n  hideYDots: number;\n  hideXDots: number;\n}\n\nexport default function calculateImageSize({\n  originalHeight,\n  originalWidth,\n  maxHiddenDots,\n  maxHiddenAxisDots,\n  dotSize\n}: ImageSizeOptions): ImageSizeResult {\n  const hideDots = { x: 0, y: 0 };\n  const imageSize = { x: 0, y: 0 };\n\n  if (originalHeight <= 0 || originalWidth <= 0 || maxHiddenDots <= 0 || dotSize <= 0) {\n    return {\n      height: 0,\n      width: 0,\n      hideYDots: 0,\n      hideXDots: 0\n    };\n  }\n\n  const k = originalHeight / originalWidth;\n\n  //Getting the maximum possible axis hidden dots\n  hideDots.x = Math.floor(Math.sqrt(maxHiddenDots / k));\n  //The count of hidden dot's can't be less than 1\n  if (hideDots.x <= 0) hideDots.x = 1;\n  //Check the limit of the maximum allowed axis hidden dots\n  if (maxHiddenAxisDots && maxHiddenAxisDots < hideDots.x) hideDots.x = maxHiddenAxisDots;\n  //The count of dots should be odd\n  if (hideDots.x % 2 === 0) hideDots.x--;\n  imageSize.x = hideDots.x * dotSize;\n  //Calculate opposite axis hidden dots based on axis value.\n  //The value will be odd.\n  //We use ceil to prevent dots covering by the image.\n  hideDots.y = 1 + 2 * Math.ceil((hideDots.x * k - 1) / 2);\n  imageSize.y = Math.round(imageSize.x * k);\n  //If the result dots count is bigger than max - then decrease size and calculate again\n  if (hideDots.y * hideDots.x > maxHiddenDots || (maxHiddenAxisDots && maxHiddenAxisDots < hideDots.y)) {\n    if (maxHiddenAxisDots && maxHiddenAxisDots < hideDots.y) {\n      hideDots.y = maxHiddenAxisDots;\n      if (hideDots.y % 2 === 0) hideDots.x--;\n    } else {\n      hideDots.y -= 2;\n    }\n    imageSize.y = hideDots.y * dotSize;\n    hideDots.x = 1 + 2 * Math.ceil((hideDots.y / k - 1) / 2);\n    imageSize.x = Math.round(imageSize.y / k);\n  }\n\n  return {\n    height: imageSize.y,\n    width: imageSize.x,\n    hideYDots: hideDots.y,\n    hideXDots: hideDots.x\n  };\n}\n","import { GradientTypes } from \"../types\";\n\nexport default {\n  radial: \"radial\",\n  linear: \"linear\"\n} as GradientTypes;\n","import { DrawTypes } from \"../types\";\n\nexport default {\n  canvas: \"canvas\",\n  svg: \"svg\"\n} as DrawTypes;\n","import { TypeNumber } from \"../types\";\n\ninterface TypesMap {\n  [key: number]: TypeNumber;\n}\n\nconst qrTypes: TypesMap = {};\n\nfor (let type = 0; type <= 40; type++) {\n  qrTypes[type] = type as TypeNumber;\n}\n\n// 0 types is autodetect\n\n// types = {\n//     0: 0,\n//     1: 1,\n//     ...\n//     40: 40\n// }\n\nexport default qrTypes;\n","import qrTypes from \"../constants/qrTypes\";\nimport drawTypes from \"../constants/drawTypes\";\nimport shapeTypes from \"../constants/shapeTypes\";\nimport errorCorrectionLevels from \"../constants/errorCorrectionLevels\";\nimport { ShapeType, DotType, Options, TypeNumber, ErrorCorrectionLevel, Mode, DrawType, Gradient } from \"../types\";\n\nexport interface RequiredOptions extends Options {\n  type: DrawType;\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  };\n  backgroundOptions: {\n    round: number;\n    color: string;\n    gradient?: Gradient;\n  };\n}\n\nconst defaultOptions: RequiredOptions = {\n  type: drawTypes.canvas,\n  shape: shapeTypes.square,\n  width: 300,\n  height: 300,\n  data: \"\",\n  margin: 0,\n  qrOptions: {\n    typeNumber: qrTypes[0],\n    mode: undefined,\n    errorCorrectionLevel: errorCorrectionLevels.Q\n  },\n  imageOptions: {\n    hideBackgroundDots: true,\n    imageSize: 0.4,\n    crossOrigin: undefined,\n    margin: 0\n  },\n  dotsOptions: {\n    type: \"square\",\n    color: \"#000\"\n  },\n  backgroundOptions: {\n    round: 0,\n    color: \"#fff\"\n  }\n};\n\nexport default defaultOptions;\n","import { ErrorCorrectionLevel } from \"../types\";\n\ninterface ErrorCorrectionLevels {\n  [key: string]: ErrorCorrectionLevel;\n}\n\nexport default {\n  L: \"L\",\n  M: \"M\",\n  Q: \"Q\",\n  H: \"H\"\n} as ErrorCorrectionLevels;\n","import { 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 default function sanitizeOptions(options: RequiredOptions): RequiredOptions {\n  const newOptions = { ...options };\n\n  newOptions.width = Number(newOptions.width);\n  newOptions.height = Number(newOptions.height);\n  newOptions.margin = Number(newOptions.margin);\n  newOptions.imageOptions = {\n    ...newOptions.imageOptions,\n    hideBackgroundDots: Boolean(newOptions.imageOptions.hideBackgroundDots),\n    imageSize: Number(newOptions.imageOptions.imageSize),\n    margin: Number(newOptions.imageOptions.margin)\n  };\n\n  if (newOptions.margin > Math.min(newOptions.width, newOptions.height)) {\n    newOptions.margin = Math.min(newOptions.width, newOptions.height);\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  return newOptions;\n}\n","import QRCodeStyling from \"./core/QRCodeStyling\";\nimport dotTypes from \"./constants/dotTypes\";\nimport cornerDotTypes from \"./constants/cornerDotTypes\";\nimport cornerSquareTypes from \"./constants/cornerSquareTypes\";\nimport errorCorrectionLevels from \"./constants/errorCorrectionLevels\";\nimport errorCorrectionPercents from \"./constants/errorCorrectionPercents\";\nimport modes from \"./constants/modes\";\nimport qrTypes from \"./constants/qrTypes\";\nimport drawTypes from \"./constants/drawTypes\";\nimport shapeTypes from \"./constants/shapeTypes\";\nimport gradientTypes from \"./constants/gradientTypes\";\n\nexport * from \"./types\";\n\nexport {\n  dotTypes,\n  cornerDotTypes,\n  cornerSquareTypes,\n  errorCorrectionLevels,\n  errorCorrectionPercents,\n  modes,\n  qrTypes,\n  drawTypes,\n  shapeTypes,\n  gradientTypes\n};\n\nexport default QRCodeStyling;\n","import getMode from \"../tools/getMode\";\nimport mergeDeep from \"../tools/merge\";\nimport downloadURI from \"../tools/downloadURI\";\nimport QRSVG from \"./QRSVG\";\nimport drawTypes from \"../constants/drawTypes\";\n\nimport defaultOptions, { RequiredOptions } from \"./QROptions\";\nimport sanitizeOptions from \"../tools/sanitizeOptions\";\nimport { FileExtension, QRCode, Options, DownloadOptions, ExtensionFunction } from \"../types\";\nimport qrcode from \"qrcode-generator\";\n\nexport default class QRCodeStyling {\n  _options: RequiredOptions;\n  _container?: HTMLElement;\n  _canvas?: HTMLCanvasElement;\n  _svg?: SVGElement;\n  _qr?: QRCode;\n  _extension?: ExtensionFunction;\n  _canvasDrawingPromise?: Promise<void>;\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 qrSVG = new QRSVG(this._options);\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  _setupCanvas(): void {\n    if (!this._qr) {\n      return;\n    }\n\n    this._canvas = document.createElement(\"canvas\");\n    this._canvas.width = this._options.width;\n    this._canvas.height = this._options.height;\n\n    this._setupSvg();\n    this._canvasDrawingPromise = this._svgDrawingPromise?.then(() => {\n      if (!this._svg) return;\n\n      const svg = this._svg;\n      const xml = new XMLSerializer().serializeToString(svg);\n      const svg64 = btoa(xml);\n      const image64 = \"data:image/svg+xml;base64,\" + svg64;\n      const image = new Image();\n\n      return new Promise((resolve) => {\n        image.onload = (): void => {\n          this._canvas?.getContext(\"2d\")?.drawImage(image, 0, 0);\n          resolve();\n        };\n\n        image.src = image64;\n      });\n    });\n  }\n\n  async _getElement(extension: FileExtension = \"png\"): Promise<SVGElement | HTMLCanvasElement | undefined> {\n    if (!this._qr) throw \"QR code is empty\";\n\n    if (extension.toLowerCase() === \"svg\") {\n      if (!this._svg || !this._svgDrawingPromise) {\n        this._setupSvg();\n      }\n      await this._svgDrawingPromise;\n      return this._svg;\n    } else {\n      if (!this._canvas || !this._canvasDrawingPromise) {\n        this._setupCanvas();\n      }\n      await this._canvasDrawingPromise;\n      return this._canvas;\n    }\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    if (this._options.type === drawTypes.canvas) {\n      this._setupCanvas();\n    } else {\n      this._setupSvg();\n    }\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._options.type === drawTypes.canvas) {\n      if (this._canvas) {\n        container.appendChild(this._canvas);\n      }\n    } else {\n      if (this._svg) {\n        container.appendChild(this._svg);\n      }\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 getRawData(extension: FileExtension = \"png\"): Promise<Blob | null> {\n    if (!this._qr) throw \"QR code is empty\";\n    const element = await this._getElement(extension);\n\n    if (!element) {\n      return null;\n    }\n\n    if (extension.toLowerCase() === \"svg\") {\n      const serializer = new XMLSerializer();\n      const source = serializer.serializeToString(element);\n\n      return new Blob(['<?xml version=\"1.0\" standalone=\"no\"?>\\r\\n' + source], { type: \"image/svg+xml\" });\n    } else {\n      return new Promise((resolve) => (element as HTMLCanvasElement).toBlob(resolve, `image/${extension}`, 1));\n    }\n  }\n\n  async download(downloadOptions?: Partial<DownloadOptions> | string): Promise<void> {\n    if (!this._qr) throw \"QR code is empty\";\n    let extension = \"png\" as FileExtension;\n    let name = \"qr\";\n\n    //TODO remove deprecated code in the v2\n    if (typeof downloadOptions === \"string\") {\n      extension = downloadOptions as FileExtension;\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    const element = await this._getElement(extension);\n\n    if (!element) {\n      return;\n    }\n\n    if (extension.toLowerCase() === \"svg\") {\n      const serializer = new XMLSerializer();\n      let source = serializer.serializeToString(element);\n\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 url = (element as HTMLCanvasElement).toDataURL(`image/${extension}`);\n      downloadURI(url, `${name}.${extension}`);\n    }\n  }\n}\n","import modes from \"../constants/modes\";\nimport { Mode } from \"../types\";\n\nexport default function getMode(data: string): Mode {\n  switch (true) {\n    case /^[0-9]*$/.test(data):\n      return modes.numeric;\n    case /^[0-9A-Z $%*+\\-./:]*$/.test(data):\n      return modes.alphanumeric;\n    default:\n      return modes.byte;\n  }\n}\n","import { Mode } from \"../types\";\n\ninterface Modes {\n  [key: string]: Mode;\n}\n\nexport default {\n  numeric: \"Numeric\",\n  alphanumeric: \"Alphanumeric\",\n  byte: \"Byte\",\n  kanji: \"Kanji\"\n} as Modes;\n","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tif(__webpack_module_cache__[moduleId]) {\n\t\treturn __webpack_module_cache__[moduleId].exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId](module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n","// module exports must be returned from runtime so entry inlining is disabled\n// startup\n// Load entry module and return exports\nreturn __webpack_require__(676);\n","// getDefaultExport function for compatibility with non-harmony modules\n__webpack_require__.n = (module) => {\n\tvar getter = module && module.__esModule ?\n\t\t() => module['default'] :\n\t\t() => module;\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.o = (obj, prop) => Object.prototype.hasOwnProperty.call(obj, prop)"],"sourceRoot":""}