Object.defineProperty(exports, "__esModule", { value: !0 }); const t = new Uint8Array(512); const e = new Uint8Array(256); for (let n = 0, o = 1; n < 255; n++) { t[n] = o; e[o] = n; o <<= 1; if (256 & o) { o ^= 285; } } for (let e = 255; e < 512; e++) { t[e] = t[e - 255]; } const gmul = (n, o) => n > 0 && o > 0 ? t[e[n] + e[o]] : 0; const gpow = (n, o) => t[o * e[n] % 255]; const genRS = t => { const e = new Uint8Array(t + 2); const n = new Uint8Array(t + 1); n[0] = 1; for (let o = 0; o < t; o++) { const t = gpow(2, o); e.fill(0, 0, o + 2); for (let r = 0; r < o + 1; r++) { e[r] ^= n[r]; e[r + 1] ^= gmul(n[r], t); } for (let t = 0; t < o + 2; t++) { n[t] = e[t]; } } return n; }; const encodeRS = (t, e) => { const n = genRS(e); const o = new Uint8Array(t.byteLength + n.byteLength - 1); o.set(t); for (let e = 0; e < t.byteLength; e++) { const t = o[e]; if (t) { for (let r = 1; r < n.byteLength; r++) { o[e + r] ^= gmul(n[r], t); } } } return o.subarray(t.byteLength); }; const n = [ 0, 26, 44, 70, 100, 134, 172, 196, 242, 292, 346, 404, 466, 532, 581, 655, 733, 815, 901, 991, 1085, 1156, 1258, 1364, 1474, 1588, 1706, 1828, 1921, 2051, 2185, 2323, 2465, 2611, 2761, 2876, 3034, 3196, 3362, 3532, 3706 ]; const o = [ [ 0, 0, 0, 0 ], [ 10, 7, 17, 13 ], [ 16, 10, 28, 22 ], [ 26, 15, 44, 36 ], [ 36, 20, 64, 52 ], [ 48, 26, 88, 72 ], [ 64, 36, 112, 96 ], [ 72, 40, 130, 108 ], [ 88, 48, 156, 132 ], [ 110, 60, 192, 160 ], [ 130, 72, 224, 192 ], [ 150, 80, 264, 224 ], [ 176, 96, 308, 260 ], [ 198, 104, 352, 288 ], [ 216, 120, 384, 320 ], [ 240, 132, 432, 360 ], [ 280, 144, 480, 408 ], [ 308, 168, 532, 448 ], [ 338, 180, 588, 504 ], [ 364, 196, 650, 546 ], [ 416, 224, 700, 600 ], [ 442, 224, 750, 644 ], [ 476, 252, 816, 690 ], [ 504, 270, 900, 750 ], [ 560, 300, 960, 810 ], [ 588, 312, 1050, 870 ], [ 644, 336, 1110, 952 ], [ 700, 360, 1200, 1020 ], [ 728, 390, 1260, 1050 ], [ 784, 420, 1350, 1140 ], [ 812, 450, 1440, 1200 ], [ 868, 480, 1530, 1290 ], [ 924, 510, 1620, 1350 ], [ 980, 540, 1710, 1440 ], [ 1036, 570, 1800, 1530 ], [ 1064, 570, 1890, 1590 ], [ 1120, 600, 1980, 1680 ], [ 1204, 630, 2100, 1770 ], [ 1260, 660, 2220, 1860 ], [ 1316, 720, 2310, 1950 ], [ 1372, 750, 2430, 2040 ] ]; const r = [ [ 0, 0, 0, 0 ], [ 1, 1, 1, 1 ], [ 1, 1, 1, 1 ], [ 1, 1, 2, 2 ], [ 2, 1, 4, 2 ], [ 2, 1, 4, 4 ], [ 4, 2, 4, 4 ], [ 4, 2, 5, 6 ], [ 4, 2, 6, 6 ], [ 5, 2, 8, 8 ], [ 5, 4, 8, 8 ], [ 5, 4, 11, 8 ], [ 8, 4, 11, 10 ], [ 9, 4, 16, 12 ], [ 9, 4, 16, 16 ], [ 10, 6, 18, 12 ], [ 10, 6, 16, 17 ], [ 11, 6, 19, 16 ], [ 13, 6, 21, 18 ], [ 14, 7, 25, 21 ], [ 16, 8, 25, 20 ], [ 17, 8, 25, 23 ], [ 17, 9, 34, 23 ], [ 18, 9, 30, 25 ], [ 20, 10, 32, 27 ], [ 21, 12, 35, 29 ], [ 23, 12, 37, 34 ], [ 25, 12, 40, 34 ], [ 26, 13, 42, 35 ], [ 28, 14, 45, 38 ], [ 29, 15, 48, 40 ], [ 31, 16, 51, 43 ], [ 33, 17, 54, 45 ], [ 35, 18, 57, 48 ], [ 37, 19, 60, 51 ], [ 38, 19, 63, 53 ], [ 40, 20, 66, 56 ], [ 43, 21, 70, 59 ], [ 45, 22, 74, 62 ], [ 47, 24, 77, 65 ], [ 49, 25, 81, 68 ] ]; const s = [ 0, 21, 25, 29, 33, 37, 41, 45, 49, 53, 57, 61, 65, 69, 73, 77, 81, 85, 89, 93, 97, 101, 105, 109, 113, 117, 121, 125, 129, 133, 137, 141, 145, 149, 153, 157, 161, 165, 169, 173, 177 ]; const c = [ [], [], [ 4, 16 ], [ 4, 20 ], [ 4, 24 ], [ 4, 28 ], [ 4, 32 ], [ 4, 20, 36 ], [ 4, 22, 40 ], [ 4, 24, 44 ], [ 4, 26, 48 ], [ 4, 28, 52 ], [ 4, 30, 56 ], [ 4, 32, 60 ], [ 4, 24, 44, 64 ], [ 4, 24, 46, 68 ], [ 4, 24, 48, 72 ], [ 4, 28, 52, 76 ], [ 4, 28, 54, 80 ], [ 4, 28, 56, 84 ], [ 4, 32, 60, 88 ], [ 4, 26, 48, 70, 92 ], [ 4, 24, 48, 72, 96 ], [ 4, 28, 52, 76, 100 ], [ 4, 26, 52, 78, 104 ], [ 4, 30, 56, 82, 108 ], [ 4, 28, 56, 84, 112 ], [ 4, 32, 60, 88, 116 ], [ 4, 24, 48, 72, 96, 120 ], [ 4, 28, 52, 76, 100, 124 ], [ 4, 24, 50, 76, 102, 128 ], [ 4, 28, 54, 80, 106, 132 ], [ 4, 32, 58, 84, 110, 136 ], [ 4, 28, 56, 84, 112, 140 ], [ 4, 32, 60, 88, 116, 144 ], [ 4, 28, 52, 76, 100, 124, 148 ], [ 4, 22, 48, 74, 100, 126, 152 ], [ 4, 26, 52, 78, 104, 130, 156 ], [ 4, 30, 56, 82, 108, 134, 160 ], [ 4, 24, 52, 80, 108, 136, 164 ], [ 4, 28, 56, 84, 112, 140, 168 ] ]; const makeSegments = (t, e, r) => { const s = n[e] - o[e][r]; const c = new Uint8Array(s); let f = 0; let l = 0; if (e > 9) { const e = 65535 & t.byteLength; c[0] = 64 | e >>> 12 & 15; c[1] = e >>> 4 & 255; f = (15 & e) << 4; l = 2; } else { const e = 255 & t.byteLength; c[0] = 64 | e >>> 4 & 15; f = (15 & e) << 4; l = 1; } let i = 0; while (i + 1 < t.byteLength) { const e = t[i++] << 8 | t[i++]; c[l++] = f | e >>> 12; c[l++] = e >>> 4 & 255; f = e << 4 & 240; } if (i < t.byteLength) { c[l++] = f | t[i] >>> 4; f = t[i] << 4 & 240; } c[l++] = f; for (let t = 0; l < s; t++) { c[l++] = 1 & t ? 17 : 236; } return c; }; const getBestVersion = (t, e) => { for (let r = 1; r <= 40; r++) { let s = n[r] - o[r][e]; s -= r > 9 ? 3 : 2; if (s >= t.byteLength) { return r; } } throw new RangeError("Bytes exceed max length"); }; const encodeData = (t, e, n) => { const s = t.byteLength + o[e][n]; const c = r[e][n]; const f = c - s % c; const l = t.byteLength / c | 0; const i = (s / c | 0) - l; const y = t.byteLength; const a = new Uint8Array(s); for (let e = 0, n = 0; e < c; e++) { const o = e < f ? l : l + 1; const r = encodeRS(t.subarray(n, n + o), i); for (let r = 0; r < o; r++) { a[r < l ? r * c + e : l * c + (e - f)] = t[n + r]; } for (let t = 0; t < i; t++) { a[y + t * c + e] = r[t]; } n += o; } return a; }; const setSquare = (t, e, n, o, r) => { const s = (n + r) * e; for (let c = n * e; c < s; c += e) { t.fill(1, c + o, c + o + r); } }; const setPattern = (t, e, n, o, r) => { const s = n * e + o; for (let n = 0; n < r; n++) { for (let o = 0; o < r; o++) { const c = o < r - 1 - o ? o : r - 1 - o; const f = n < r - 1 - n ? n : r - 1 - n; t[s + n * e + o] = 1 !== (c < f ? c : f) ? 1 : 0; } } }; const writeFinderPatterns = (t, e, n) => { const o = n - 7; setPattern(t, n, 0, 0, 7); setPattern(t, n, o, 0, 7); setPattern(t, n, 0, o, 7); setSquare(e, n, 0, 0, 8); setSquare(e, n, o - 1, 0, 8); setSquare(e, n, 0, o - 1, 8); }; const writeAlignmentPatterns = (t, e, n, o) => { const r = c[o]; for (let o = 0; o < r.length; o++) { const s = r[o]; for (let c = 0; c < r.length; c++) { if ((o || c % (r.length - 1)) && (c || o % (r.length - 1))) { const o = r[c]; setPattern(t, n, s, o, 5); setSquare(e, n, s, o, 5); } } } }; const writeTimingPatterns = (t, e, n) => { const o = n - 7; for (let r = 8; r < o; r++) { const o = r * n + 6; if (!e[o]) { e[o] = 1; t[o] = (r + 1) % 2; } const s = 6 * n + r; if (!e[s]) { e[s] = 1; t[s] = (r + 1) % 2; } } }; const reserveFormatInfo = (t, e) => { const n = e - 7 - 1; t[8 * e + 8] = 1; for (let o = 0; o < 8; o++) { t[o * e + 8] = 1; t[8 * e + o] = 1; t[(n + o) * e + 8] = 1; t[8 * e + n + o] = 1; } }; const reserveVersionInfo = (t, e, n) => { if (n >= 7) { const n = e - 7 - 4; for (let o = 0; o < 6; o++) { for (let r = 0; r < 3; r++) { t[(n + r) * e + o] = 1; t[o * e + n + r] = 1; } } } }; const writeData = (t, e, n, o) => { let r = 0; let s = n - 1; let c = -1; let f = 7; while (r < o.byteLength) { if (6 === s) { s--; } for (let l = 0; l < n; l++) { for (let i = 0; i < 2; i++) { const y = s - i; const a = -1 === c ? n - l - 1 : l; if (e[a * n + y]) { continue; } t[a * n + y] = o[r] >>> f & 1; if (0 === f--) { f = 7; if (++r >= o.byteLength) { return; } } } } c = -c; s -= 2; } }; const xorPatternN0 = (t, e, n) => { for (let o = 0, r = 0; o < n; o++, r += n) { for (let s = 0; s < n; s++) { const n = r + s; if (!(e[n] || o + s & 1)) { t[n] ^= 1; } } } }; const xorPatternN1 = (t, e, n) => { for (let o = 0, r = 0; o < n; o++, r += n) { for (let s = 0; s < n; s++) { const n = r + s; if (!(e[n] || 1 & o)) { t[n] ^= 1; } } } }; const xorPatternN2 = (t, e, n) => { for (let o = 0, r = 0; o < n; o++, r += n) { for (let o = 0; o < n; o++) { const n = r + o; if (!e[n] && o % 3 == 0) { t[n] ^= 1; } } } }; const xorPatternN3 = (t, e, n) => { for (let o = 0, r = 0; o < n; o++, r += n) { for (let s = 0; s < n; s++) { const n = r + s; if (!e[n] && (o + s) % 3 == 0) { t[n] ^= 1; } } } }; const xorPatternN4 = (t, e, n) => { for (let o = 0, r = 0; o < n; o++, r += n) { const s = o / 2 | 0; for (let o = 0; o < n; o++) { const n = r + o; if (!(e[n] || s + (o / 3 | 0) & 1)) { t[n] ^= 1; } } } }; const xorPatternN5 = (t, e, n) => { for (let o = 0, r = 0; o < n; o++, r += n) { for (let s = 0; s < n; s++) { const n = r + s; const c = o * s; if (!e[n] && (1 & c) + c % 3 == 0) { t[n] ^= 1; } } } }; const xorPatternN6 = (t, e, n) => { for (let o = 0, r = 0; o < n; o++, r += n) { for (let s = 0; s < n; s++) { const n = r + s; const c = o * s; if (!e[n] && ((1 & c) + c % 3) % 2 == 0) { t[n] ^= 1; } } } }; const xorPatternN7 = (t, e, n) => { for (let o = 0, r = 0; o < n; o++, r += n) { for (let s = 0; s < n; s++) { const n = r + s; if (!(e[n] || o * s % 3 + (o + s & 1) & 1)) { t[n] ^= 1; } } } }; const xorPattern = (t, e, n, o) => { switch (o) { case 0: return xorPatternN0(t, e, n); case 1: return xorPatternN1(t, e, n); case 2: return xorPatternN2(t, e, n); case 3: return xorPatternN3(t, e, n); case 4: return xorPatternN4(t, e, n); case 5: return xorPatternN5(t, e, n); case 6: return xorPatternN6(t, e, n); case 7: return xorPatternN7(t, e, n); } }; const computePenalty = (t, e) => { let n = 0; let o = 0; for (let r = 0; r < e; r++) { let s = 1; let c = 1; let f = 0; let l = 0; for (let i = 0; i < e; i++) { const y = r * e + i; const a = i * e + r; o += t[y]; if (i > 0) { if (t[y - 1] === t[y]) { s++; } else { if (s >= 5) { n += s - 5 + 3; } s = 1; } if (t[a - e] === t[a]) { c++; } else { if (c >= 5) { n += c - 5 + 3; } c = 1; } } if (r < e - 1 && i < e - 1 && t[y] === t[y + 1] && t[y] === t[y + e] && t[y] === t[y + e + 1]) { n += 3; } f = f << 1 & 2047 | t[y]; l = l << 1 & 2047 | t[a]; if (i >= 10) { if (1488 === f || 93 === f) { n += 40; } if (1488 === l || 93 === l) { n += 40; } } } if (s >= 5) { n += s - 5 + 3; } if (c >= 5) { n += c - 5 + 3; } } const r = 100 * Math.abs(o / t.byteLength - .5); n += 10 * Math.floor(r / 5); return n; }; const applyBestPattern = (t, e, n) => { let o = 0; let r = 0; const s = new Uint8Array(t.byteLength); for (let c = 0; c <= 7; c += 1) { s.set(t); xorPattern(s, e, n, c); const f = computePenalty(s, n); if (0 === c || f < o) { o = f; r = c; } } xorPattern(t, e, n, r); return r; }; const encodeFormatInfo = (t, e) => { const n = (t << 3 | e) << 10; let o = n; for (let t = 0; t < 5; t++) { if (o & 1 << 14 - t) { o ^= 1335 << 4 - t; } } return 21522 ^ (o | n); }; const writeFormatInfo = (t, e, n, o) => { const r = encodeFormatInfo(n, o); let s = 14; for (let n = 0; n < 6; n++) { t[8 * e + n] = r >> s-- & 1; } t[8 * e + 7] = r >> s-- & 1; t[8 * e + 8] = r >> s-- & 1; t[7 * e + 8] = r >> s-- & 1; for (let n = 0; n < 6; n++) { t[(5 - n) * e + 8] = r >> s-- & 1; } s = 14; for (let n = 0; n < 7; n++) { t[(e - 1 - n) * e + 8] = r >> s-- & 1; } t[(e - 8) * e + 8] = 1; for (let n = 0; n < 8; n++) { t[8 * e + e - 8 + n] = r >> s-- & 1; } }; const encodeVersionInfo = t => { const e = t << 12; let n = e; for (let t = 0; t < 6; t++) { if (n & 1 << 17 - t) { n ^= 7973 << 5 - t; } } return n | e; }; const writeVersionInfo = (t, e, n) => { if (n >= 7) { const o = encodeVersionInfo(n); for (let n = 0; n < 6; n++) { for (let r = 0; r < 3; r++) { const s = o >>> 3 * n + r & 1; t[(e - 11 + r) * e + n] = s; t[n * e + e - 11 + r] = s; } } } }; const encodeBytes = (t, e) => { const n = getBestVersion(t, e); const o = makeSegments(t, n, e); const r = encodeData(o, n, e); const c = s[n]; const f = new Uint8Array(c * c); const l = new Uint8Array(c * c); writeFinderPatterns(f, l, c); writeAlignmentPatterns(f, l, c, n); writeTimingPatterns(f, l, c); reserveFormatInfo(l, c); reserveVersionInfo(l, c, n); writeData(f, l, c, r); const i = applyBestPattern(f, l, c); writeFormatInfo(f, c, e, i); writeVersionInfo(f, c, n); return f; }; const f = new TextEncoder; exports.toQR = (t, e = 1) => { const n = "string" == typeof t ? f.encode(t) : t; return encodeBytes(n, e); }; //# sourceMappingURL=toqr.js.map