diff --git a/c/.gitignore b/c/.gitignore new file mode 100644 index 0000000..3ee6987 --- /dev/null +++ b/c/.gitignore @@ -0,0 +1,7 @@ +# Build outputs +*.o +*.a +*.d +.deps/ +qrcodegen-demo +qrcodegen-test diff --git a/solidity/.gitignore b/solidity/.gitignore new file mode 100644 index 0000000..8338c47 --- /dev/null +++ b/solidity/.gitignore @@ -0,0 +1,5 @@ +node_modules/ +artifacts/ +cache/ +typechain-types/ +gasReporterOutput.json diff --git a/solidity/Readme.markdown b/solidity/Readme.markdown new file mode 100644 index 0000000..d01ea71 --- /dev/null +++ b/solidity/Readme.markdown @@ -0,0 +1,204 @@ +QR Code generator library — Solidity +===================================== + + +Introduction +------------ + +This is the Solidity port of the QR Code generator library, modeled after the +C implementation in this repository. It provides on-chain QR Code generation +as a pure Solidity library — no external calls, no oracles, entirely self-contained. + +Home page with live JavaScript demo, extensive descriptions, and competitor comparisons: +https://www.nayuki.io/page/qr-code-generator-library + + +Features +-------- + +Core features: + +* Supports all 40 QR Code versions (sizes 21×21 to 177×177) +* All 4 error correction levels: Low, Medium, Quartile, High +* All 4 encoding modes: Numeric, Alphanumeric, Byte, Kanji/ECI +* Automatic mask selection (evaluates all 8 patterns, picks the lowest-penalty one) +* Manual mask pattern override (MASK_0 … MASK_7) +* ECC level boosting (upgrades ECC level when the version number doesn't increase) +* Low-level segment API for mixed-mode encoding +* On-chain SVG renderer (QRCodeDemo.toSvgString) +* Open source under the MIT License + + +Output format +------------- + +Every successful encoding returns a `bytes` value: + +``` +qrcode[0] — side length in modules (21 for version 1, 177 for version 40) +qrcode[1..] — packed module bits, row-major order + Module (x, y) is at bit index y * size + x + stored in byte (y * size + x) / 8 + 1 + at bit position (y * size + x) % 8 (LSB = bit 0) + A set bit (1) means a dark / black module. +``` + +A failed encoding (data too long for the requested version range) returns +`bytes` of length 1 where `qrcode[0] == 0`. + + +Examples +-------- + +```solidity +import "./QRCode.sol"; + +// Simple — encode "Hello, world!" with Low ECC, auto mask +bytes memory qr = QRCode.encodeText( + "Hello, world!", + QRCode.ECC_LOW, + QRCode.VERSION_MIN, // 1 + QRCode.VERSION_MAX, // 40 + QRCode.MASK_AUTO, + true // boost ECC level if possible +); +uint size = QRCode.getSize(qr); // 21 for version 1 + +// Read a module +bool dark = QRCode.getModule(qr, x, y); + +// Manual — force version 5, mask pattern 2, no ECC boost +bytes memory qr2 = QRCode.encodeText( + "3141592653589793238462643383", + QRCode.ECC_HIGH, + 5, 5, + QRCode.MASK_2, + false +); + +// Low-level — mix numeric and alphanumeric segments +QRCode.Segment[] memory segs = new QRCode.Segment[](2); +segs[0] = QRCode.makeAlphanumeric(bytes("THE SQUARE ROOT OF 2 IS 1.")); +segs[1] = QRCode.makeNumeric(bytes("41421356237309504880168872420969807856967187537694")); +bytes memory qr3 = QRCode.encodeSegments(segs, QRCode.ECC_LOW); + +// On-chain SVG (4 module quiet zone) +string memory svg = QRCodeDemo(demoAddress).toSvgString(qr, 4); +``` + + +Gas usage +--------- + +QR Code generation is compute-intensive on-chain. The tables below show gas +estimates (measured on Hardhat's in-process EVM with the optimizer enabled at +200 runs) for a range of typical inputs. + +The current implementation applies three EVM-native optimisations over the +original C-port baseline: pre-computed `bytes constant` lookup tables for +GF(256) exp/log and ECC block data; `uint256` row packing for the internal +module grid (whole-row XOR/OR instead of per-module bit manipulation); and +Yul inline assembly for the Reed-Solomon inner loop and penalty-scoring hot +paths. The result is roughly a **55–62% reduction** in gas across all inputs. + +### Fixed mask (recommended for on-chain transactions) + +| Input | ECC | Mask | QR version | Gas | +|---|---|---|---|---| +| `"Hello, world!"` (13 B, byte mode) | Low | 2 | 1 (21×21) | ~930,000 | +| Binary payload 13 bytes | Medium | 0 | 1 (21×21) | ~928,000 | +| ECI(26) + 6-byte UTF-8 | Medium | 0 | 1 (21×21) | ~1,227,000 | +| 50-digit numeric string | Medium | 3 | 2 (25×25) | ~1,728,000 | +| 22-char URL (alphanumeric mode) | High | — | 3 (29×29) | ~2,397,000 | +| 26-char mixed segments | Low | 0 | 3 (29×29) | ~3,276,000 | +| 28-digit numeric string | High | 2 | 5 (37×37) | ~3,337,000 | +| 55-char alphanumeric string | High | — | 5 (37×37) | ~3,594,000 | + +### Automatic mask selection (`MASK_AUTO`) + +`MASK_AUTO` runs the full encoding pipeline 8 times to score each mask and +pick the lowest-penalty one. Gas is roughly 5–6× the fixed-mask cost: + +| Input | QR version | Gas | +|---|---|---| +| `"Hello, world!"` (byte mode) | 1 (21×21) | ~5,291,000 | +| Binary payload 13 bytes | 1 (21×21) | ~5,290,000 | +| ECI(26) + 6-byte UTF-8 | 1 (21×21) | ~5,591,000 | +| 50-digit numeric string | 2 (25×25) | ~7,698,000 | +| 26-char mixed segments | 3 (29×29) | ~11,121,000 | +| 55-char alphanumeric string | 5 (37×37) | ~15,741,000 | + +All `MASK_AUTO` cases now fit comfortably within Ethereum mainnet's 30 M gas +block limit (previously they exceeded it for versions ≥ 2). + +### SVG rendering + +`QRCodeDemo.toSvgString(qr, border)` costs approximately **2,356,000 gas** +for a version-1 QR Code with a 4-module quiet-zone border. + +### Gas scaling by version + +Gas scales with the number of modules (size²) of the QR Code: + +* Version 1 (21×21 = 441 modules): ~930 k gas (fixed mask) +* Version 2 (25×25 = 625 modules): ~1.7 M gas +* Version 3 (29×29 = 841 modules): ~2.4–3.3 M gas +* Version 5 (37×37 = 1 369 modules): ~3.3–3.6 M gas +* Higher versions scale proportionally + +Practical considerations: + +* Use a **fixed mask** (`MASK_0`…`MASK_7`) whenever calling from a transaction + or when operating near the block gas limit. Mask quality varies little in + practice; `MASK_0` or `MASK_2` are reasonable defaults. +* `MASK_AUTO` is now feasible for on-chain transactions through version 5 + (all cases are below 30 M gas), and is always suitable for off-chain + `eth_call` simulation with an unlimited gas allowance. +* The QR Code library itself is a pure Solidity function (no storage, no + events); all the gas is spent on computation, not on state writes. + + +Building and testing +-------------------- + +Prerequisites: Node.js ≥ 18 and npm. + +```bash +cd solidity +npm install +npm run compile # compiles with the bundled solc (no internet required) +npm test # runs the Hardhat test suite against a local network +``` + +The `npm run compile` script uses the bundled `solc` npm package so no +network access is needed. `npm test` runs Hardhat which spins up an +in-process EVM for the tests. + +Note: the contracts use `viaIR: true` (Yul IR pipeline) to avoid the EVM's +16-slot stack-depth limit, which the QR Code algorithm would otherwise exceed. + + +License +------- + +Solidity port and EVM optimizations copyright © trifle-labs contributors. (MIT License) +Based on the C implementation by Project Nayuki. +https://www.nayuki.io/page/qr-code-generator-library + +Permission is hereby granted, free of charge, to any person obtaining a copy of +this software and associated documentation files (the "Software"), to deal in +the Software without restriction, including without limitation the rights to +use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies +of the Software, and to permit persons to whom the Software is furnished to do +so, subject to the following conditions: + +* The above copyright notice and this permission notice shall be included in + all copies or substantial portions of the Software. + +* The Software is provided "as is", without warranty of any kind, express or + implied, including but not limited to the warranties of merchantability, + fitness for a particular purpose and noninfringement. In no event shall the + authors or copyright holders be liable for any claim, damages or other + liability, whether in an action of contract, tort or otherwise, arising from, + out of or in connection with the Software or the use or other dealings in the + Software. diff --git a/solidity/contracts/QRCode.sol b/solidity/contracts/QRCode.sol new file mode 100644 index 0000000..b196146 --- /dev/null +++ b/solidity/contracts/QRCode.sol @@ -0,0 +1,1329 @@ +/* + * QR Code generator library (Solidity) + * + * Solidity port and EVM optimizations copyright (c) trifle-labs contributors. + * Based on the C implementation by Project Nayuki (MIT License). + * https://www.nayuki.io/page/qr-code-generator-library + * + * Permission is hereby granted, free of charge, to any person obtaining a copy of + * this software and associated documentation files (the "Software"), to deal in + * the Software without restriction, including without limitation the rights to + * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of + * the Software, and to permit persons to whom the Software is furnished to do so, + * subject to the following conditions: + * - The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * - The Software is provided "as is", without warranty of any kind, express or + * implied, including but not limited to the warranties of merchantability, + * fitness for a particular purpose and noninfringement. In no event shall the + * authors or copyright holders be liable for any claim, damages or other + * liability, whether in an action of contract, tort or otherwise, arising from, + * out of or in connection with the Software or the use or other dealings in the + * Software. + */ + +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.0; + +/* + * This library creates QR Code symbols, which is a type of two-dimensional barcode. + * Invented by Denso Wave and described in the ISO/IEC 18004 standard. + * A QR Code structure is an immutable square grid of dark and light cells. + * The library provides functions to create a QR Code from text or binary data. + * The library covers the QR Code Model 2 specification, supporting all versions (sizes) + * from 1 to 40, all 4 error correction levels, and 4 character encoding modes. + * + * Ways to create a QR Code: + * - High level: Take the payload data and call encodeText() or encodeBinary(). + * - Low level: Custom-make the list of segments and call + * encodeSegments() or encodeSegmentsAdvanced(). + * + * Output format — the returned bytes value: + * qrcode[0] : side length of the QR Code in modules (e.g. 21 for version 1) + * qrcode[1..] : packed module bits, row-major order. + * Module at (x, y) is at bit index y*size + x, stored in byte at + * index (y*size + x)/8 + 1, at bit position (y*size + x) % 8 (LSB=0). + * A set bit means a dark (black) module. + * An invalid/failed encoding is represented as bytes of length 1 with qrcode[0] == 0. + * + * Gas optimisations over the C-port baseline: + * 1. Pre-computed lookup tables (GF256 log/exp, alphanumeric map, ECC tables) stored + * as `bytes constant` so they live in bytecode and never allocate heap memory. + * 2. Internal module grid represented as uint256[] rows (one uint256 per row) so + * every module read/write is a single bit-shift instead of a multiply + byte index. + * All-column operations (mask application, rectangle fill) work on whole rows. + * 3. Yul inline assembly for the Reed-Solomon remainder inner loop and for the + * vectorised penalty-scoring (N2 2x2 block check and N4 dark-module count). + */ +library QRCode { + + /*---- Error correction level constants ----*/ + + uint8 internal constant ECC_LOW = 0; // ~7% error tolerance + uint8 internal constant ECC_MEDIUM = 1; // ~15% error tolerance + uint8 internal constant ECC_QUARTILE = 2; // ~25% error tolerance + uint8 internal constant ECC_HIGH = 3; // ~30% error tolerance + + /*---- Mask pattern constants ----*/ + + uint8 internal constant MASK_AUTO = 0xFF; // Library selects the best mask + uint8 internal constant MASK_0 = 0; + uint8 internal constant MASK_1 = 1; + uint8 internal constant MASK_2 = 2; + uint8 internal constant MASK_3 = 3; + uint8 internal constant MASK_4 = 4; + uint8 internal constant MASK_5 = 5; + uint8 internal constant MASK_6 = 6; + uint8 internal constant MASK_7 = 7; + + /*---- Segment mode constants ----*/ + + uint8 internal constant MODE_NUMERIC = 0x1; + uint8 internal constant MODE_ALPHANUMERIC = 0x2; + uint8 internal constant MODE_BYTE = 0x4; + uint8 internal constant MODE_KANJI = 0x8; + uint8 internal constant MODE_ECI = 0x7; + + /*---- Version range ----*/ + + uint8 internal constant VERSION_MIN = 1; + uint8 internal constant VERSION_MAX = 40; + + /*---- Penalty score constants (used by auto mask selection) ----*/ + + uint internal constant PENALTY_N1 = 3; + uint internal constant PENALTY_N2 = 3; + uint internal constant PENALTY_N3 = 40; + uint internal constant PENALTY_N4 = 10; + + // Sentinel returned by _calcSegmentBitLength/_getTotalBits on overflow + int internal constant LENGTH_OVERFLOW = type(int256).min; + + + /*======== Pre-computed lookup tables (stored in bytecode, zero heap allocation) ========*/ + + /* + * GF(2^8) exponentiation table over polynomial 0x11D: GF256_EXP[i] = 2^i. + * 256 bytes. Replaces the 8-iteration Russian-peasant multiply with 3 lookups. + */ + bytes private constant GF256_EXP = + hex"01020408102040801d3a74e8cd8713264c982d5ab475eac98f03060c183060c0" + hex"9d274e9c254a94356ad4b577eec19f23468c050a142850a05dba69d2b96fdea1" + hex"5fbe61c2992f5ebc65ca890f1e3c78f0fde7d3bb6bd6b17ffee1dfa35bb671e2" + hex"d9af4386112244880d1a3468d0bd67ce811f3e7cf8edc7933b76ecc5973366cc" + hex"85172e5cb86ddaa94f9e214284152a54a84d9a2952a455aa49923972e4d5b773" + hex"e6d1bf63c6913f7efce5d7b37bf6f1ffe3dbab4b963162c495376edca557ae41" + hex"82193264c88d070e1c3870e0dda753a651a259b279f2f9efc39b2b56ac458a09" + hex"122448903d7af4f5f7f3fbebcb8b0b162c58b07dfae9cf831b366cd8ad478e01"; + + /* + * GF(2^8) discrete-log table: GF256_LOG[x] = log_2(x) mod 0x11D. + * GF256_LOG[0] is undefined; _gf256Mul guards against zero inputs. + */ + bytes private constant GF256_LOG = + hex"0000011902321ac603df33ee1b68c74b0464e00e348def811cc169f8c8084c71" + hex"058a652fe1240f2135938edaf01282451db5c27d6a27f9b9c99a09784de472a6" + hex"06bf8b6266dd30fde29825b31091228836d094ce8f96dbbdf1d2135c83384640" + hex"1e42b6a3c3487e6e6b3a2854fa85ba3dca5e9b9f0a15792b4ed4e5ac73f3a757" + hex"0770c0f78c80630d674adeed31c5fe18e3a5997726b8b47c114492d92320892e" + hex"373fd15b95bccfcd908797b2dcfcbe61f256d3ab142a5d9e843c3953476d41a2" + hex"1f2d43d8b77ba476c41749ec7f0c6ff66ca13b52299d55aafb6086b1bbcc3e5a" + hex"cb595fb09ca9a0510bf516eb7a752cd74faed5e9e6e7ade874d6f4eaa85058af"; + + /* + * Alphanumeric character map, indexed by (c - 0x20) for c in [0x20, 0x5A]. + * Stored value = (QR alphanumeric index + 1), 0 = invalid character. + * Reduces the original 11-branch if-else chain to two range checks + one read. + */ + bytes private constant ALPHA_MAP = + hex"250000002627000000002829002a2b2c0102030405060708090a2d" + hex"0000000000000b0c0d0e0f101112131415161718191a1b1c1d1e1f2021222324"; + + /* + * ECC codewords per block [version 0..40], one table per ECC level. + * Index 0 = 0xFF sentinel. `bytes constant` means bytecode storage, + * no heap allocation per call (unlike the original function-local hex literals). + */ + bytes private constant _ECPB_LOW = hex"ff070a0f141a1214181e1214181a1e16181c1e1c1c1c1c1e1e1a1c1e1e1e1e1e1e1e1e1e1e1e1e1e1e"; + bytes private constant _ECPB_MED = hex"ff0a101a1218101216161a1e161618181c1c1a1a1a1a1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c"; + bytes private constant _ECPB_QRT = hex"ff0d16121a1218121614181c1a18141e181c1c1a1e1c1e1e1e1e1c1e1e1e1e1e1e1e1e1e1e1e1e1e1e"; + bytes private constant _ECPB_HIGH = hex"ff111c1610161c1a1a181c181c1618181e1c1c1a1c1e181e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e"; + + /* + * Number of error-correction blocks [version 0..40], one table per ECC level. + */ + bytes private constant _NECB_LOW = hex"ff01010101010202020204040404040606060607080809090a0c0c0c0d0e0f10111213131415161819"; + bytes private constant _NECB_MED = hex"ff01010102020404040505050809090a0a0b0d0e10111112141517191a1c1d1f21232526282b2d2f31"; + bytes private constant _NECB_QRT = hex"ff01010202040406060808080a0c100c11101215141717191b1d22222326282b2d303335383b3e4144"; + bytes private constant _NECB_HIGH = hex"ff010102040404050608080b0b101012101315191919221e202325282a2d303336393c3f42464a4d51"; + + /* + * Vectorised 256-bit mask-pattern constants. + * Bit x is set iff column x satisfies the mask formula for that row category. + * Verified against per-pixel formula for all qrsize values 1..177. + */ + // Mask 0: (x+y)%2==0 — even row: even x; odd row: odd x + uint256 private constant _MASK0_EVEN = + 0x5555555555555555555555555555555555555555555555555555555555555555; + uint256 private constant _MASK0_ODD = + 0xaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa; + // Period-3 column patterns (masks 2, 3, 5, 6, 7) + uint256 private constant _MP0 = // x%3==0 + 0x9249249249249249249249249249249249249249249249249249249249249249; + uint256 private constant _MP1 = // x%3==1 + 0x2492492492492492492492492492492492492492492492492492492492492492; + uint256 private constant _MP2 = // x%3==2 + 0x4924924924924924924924924924924924924924924924924924924924924924; + // Period-6 column patterns (masks 4, 6, 7) + uint256 private constant _MPA = // x%6 in {0,1,2} + 0x71c71c71c71c71c71c71c71c71c71c71c71c71c71c71c71c71c71c71c71c71c7; + uint256 private constant _MPB = // x%6 in {3,4,5} + 0x8e38e38e38e38e38e38e38e38e38e38e38e38e38e38e38e38e38e38e38e38e38; + uint256 private constant _MP6 = // x%6==0 (mask 5) + 0x1041041041041041041041041041041041041041041041041041041041041041; + uint256 private constant _MPC = // x%6 in {0,4,5} (masks 6, 7) + 0x1c71c71c71c71c71c71c71c71c71c71c71c71c71c71c71c71c71c71c71c71c71; + uint256 private constant _MPD = // x%6 in {1,2,3} (masks 6, 7) + 0xe38e38e38e38e38e38e38e38e38e38e38e38e38e38e38e38e38e38e38e38e38e; + + + /*---- Segment struct ----*/ + + /* + * A segment of character/binary/control data. + * mode : One of the MODE_* constants above + * numChars : Character count (bytes for MODE_BYTE, 0 for MODE_ECI) + * data : Encoded data bits, packed in bitwise big-endian order + * bitLength : Number of valid data bits in `data` + */ + struct Segment { + uint8 mode; + uint numChars; + bytes data; + uint bitLength; + } + + + /*---- Buffer length helper ----*/ + + // Returns the number of bytes needed to store a QR Code of the given version. + function bufferLenForVersion(uint ver) internal pure returns (uint) { + return ((ver * 4 + 17) * (ver * 4 + 17) + 7) / 8 + 1; + } + + + /*======== High-level encoding API ========*/ + + /* + * Encodes the given text to a QR Code. + * Returns bytes of length 1 with qrcode[0]==0 on failure (data too long). + */ + function encodeText( + string memory text, + uint8 ecl, + uint8 minVersion, + uint8 maxVersion, + uint8 mask, + bool boostEcl + ) internal pure returns (bytes memory) { + bytes memory tb = bytes(text); + if (tb.length == 0) + return encodeSegmentsAdvanced(new Segment[](0), ecl, minVersion, maxVersion, mask, boostEcl); + + Segment[] memory segs = new Segment[](1); + if (isNumericBytes(tb)) + segs[0] = makeNumeric(tb); + else if (isAlphanumericBytes(tb)) + segs[0] = makeAlphanumeric(tb); + else + segs[0] = makeBytes(tb); + + return encodeSegmentsAdvanced(segs, ecl, minVersion, maxVersion, mask, boostEcl); + } + + /* + * Encodes the given binary data to a QR Code using byte mode. + * Returns bytes of length 1 with qrcode[0]==0 on failure. + */ + function encodeBinary( + bytes memory data, + uint8 ecl, + uint8 minVersion, + uint8 maxVersion, + uint8 mask, + bool boostEcl + ) internal pure returns (bytes memory) { + Segment[] memory segs = new Segment[](1); + segs[0] = makeBytes(data); + return encodeSegmentsAdvanced(segs, ecl, minVersion, maxVersion, mask, boostEcl); + } + + + /*======== Low-level encoding API ========*/ + + /* + * Encodes segments to a QR Code using sensible defaults: + * minVersion=1, maxVersion=40, mask=MASK_AUTO, boostEcl=true. + */ + function encodeSegments( + Segment[] memory segs, + uint8 ecl + ) internal pure returns (bytes memory) { + return encodeSegmentsAdvanced(segs, ecl, VERSION_MIN, VERSION_MAX, MASK_AUTO, true); + } + + /* + * Encodes segments to a QR Code with full parameter control. + * Returns bytes of length 1 with qrcode[0]==0 if the data does not fit. + */ + function encodeSegmentsAdvanced( + Segment[] memory segs, + uint8 ecl, + uint8 minVersion, + uint8 maxVersion, + uint8 mask, + bool boostEcl + ) internal pure returns (bytes memory) { + uint8 version; + uint8 finalEcl; + { + bool found; + uint dataUsedBits; + (found, version, dataUsedBits) = _findMinVersion(segs, ecl, minVersion, maxVersion); + if (!found) { + bytes memory empty = new bytes(1); + return empty; + } + finalEcl = _boostEccLevel(ecl, version, dataUsedBits, boostEcl); + } + return _buildQrCode(segs, version, finalEcl, mask); + } + + + /*======== Segment factory functions ========*/ + + /* + * Returns a segment representing the given binary data encoded in byte mode. + */ + function makeBytes(bytes memory data) internal pure returns (Segment memory seg) { + int bl = _calcSegmentBitLength(MODE_BYTE, data.length); + require(bl != LENGTH_OVERFLOW, "QRCode: byte segment too long"); + seg.mode = MODE_BYTE; + seg.numChars = data.length; + seg.bitLength = uint(bl); + seg.data = data; + } + + /* + * Returns a segment representing the given string of decimal digits in numeric mode. + */ + function makeNumeric(bytes memory digits) internal pure returns (Segment memory seg) { + uint len = digits.length; + int bl = _calcSegmentBitLength(MODE_NUMERIC, len); + require(bl != LENGTH_OVERFLOW, "QRCode: numeric segment too long"); + seg.mode = MODE_NUMERIC; + seg.numChars = len; + seg.bitLength = 0; + + bytes memory buf = new bytes((uint(bl) + 7) / 8); + uint accumData = 0; + uint accumCount = 0; + for (uint i = 0; i < len; i++) { + uint8 c = uint8(digits[i]); + require(c >= 0x30 && c <= 0x39, "QRCode: non-digit in numeric segment"); + accumData = accumData * 10 + uint(c - 0x30); + accumCount++; + if (accumCount == 3) { + seg.bitLength = _appendBitsToBuffer(accumData, 10, buf, seg.bitLength); + accumData = 0; + accumCount = 0; + } + } + if (accumCount > 0) + seg.bitLength = _appendBitsToBuffer(accumData, accumCount * 3 + 1, buf, seg.bitLength); + seg.data = buf; + } + + /* + * Returns a segment representing the given text in alphanumeric mode. + * Valid characters: 0-9, A-Z (uppercase only), space, $, %, *, +, -, ., /, : + */ + function makeAlphanumeric(bytes memory text) internal pure returns (Segment memory seg) { + uint len = text.length; + int bl = _calcSegmentBitLength(MODE_ALPHANUMERIC, len); + require(bl != LENGTH_OVERFLOW, "QRCode: alphanumeric segment too long"); + seg.mode = MODE_ALPHANUMERIC; + seg.numChars = len; + seg.bitLength = 0; + + bytes memory buf = new bytes((uint(bl) + 7) / 8); + uint accumData = 0; + uint accumCount = 0; + for (uint i = 0; i < len; i++) { + (bool ok, uint idx) = _alphanumericCharIndex(uint8(text[i])); + require(ok, "QRCode: invalid char in alphanumeric segment"); + accumData = accumData * 45 + idx; + accumCount++; + if (accumCount == 2) { + seg.bitLength = _appendBitsToBuffer(accumData, 11, buf, seg.bitLength); + accumData = 0; + accumCount = 0; + } + } + if (accumCount > 0) + seg.bitLength = _appendBitsToBuffer(accumData, 6, buf, seg.bitLength); + seg.data = buf; + } + + /* + * Returns a segment representing an Extended Channel Interpretation (ECI) designator. + * assignVal must be in [0, 999999]. + */ + function makeEci(uint256 assignVal) internal pure returns (Segment memory seg) { + require(assignVal < 1000000, "QRCode: ECI value out of range"); + seg.mode = MODE_ECI; + seg.numChars = 0; + bytes memory buf; + uint bl; + if (assignVal < (1 << 7)) { + buf = new bytes(1); + bl = _appendBitsToBuffer(assignVal, 8, buf, 0); + } else if (assignVal < (1 << 14)) { + buf = new bytes(2); + bl = _appendBitsToBuffer(2, 2, buf, 0); + bl = _appendBitsToBuffer(assignVal, 14, buf, bl); + } else { + buf = new bytes(3); + bl = _appendBitsToBuffer(6, 3, buf, 0); + bl = _appendBitsToBuffer(assignVal >> 10, 11, buf, bl); + bl = _appendBitsToBuffer(assignVal & 0x3FF, 10, buf, bl); + } + seg.bitLength = bl; + seg.data = buf; + } + + + /*======== QR Code output query functions ========*/ + + /* + * Returns the side length of the QR Code in modules. + * Result is in [21, 177]. qrcode[0] must be nonzero (valid QR Code). + */ + function getSize(bytes memory qrcode) internal pure returns (uint) { + require(qrcode.length > 0 && uint8(qrcode[0]) != 0, "QRCode: invalid qrcode"); + return uint8(qrcode[0]); + } + + /* + * Returns true if and only if the module at coordinates (x, y) is dark. + * Out-of-bounds coordinates return false (light). + */ + function getModule(bytes memory qrcode, uint x, uint y) internal pure returns (bool) { + uint qrsize = uint8(qrcode[0]); + if (x >= qrsize || y >= qrsize) return false; + return _getModuleBounded(qrcode, x, y); + } + + + /*======== Character set helpers ========*/ + + /* + * Returns true iff every byte in text is an ASCII decimal digit (0x30-0x39). + */ + function isNumericBytes(bytes memory text) internal pure returns (bool) { + for (uint i = 0; i < text.length; i++) { + uint8 c = uint8(text[i]); + if (c < 0x30 || c > 0x39) return false; + } + return true; + } + + /* + * Returns true iff every byte in text is a valid alphanumeric-mode character. + */ + function isAlphanumericBytes(bytes memory text) internal pure returns (bool) { + for (uint i = 0; i < text.length; i++) { + (bool ok,) = _alphanumericCharIndex(uint8(text[i])); + if (!ok) return false; + } + return true; + } + + /* + * Returns the number of bytes needed for a segment data buffer. + * Returns type(uint).max on overflow. + */ + function calcSegmentBufferSize(uint8 mode, uint numChars) internal pure returns (uint) { + int temp = _calcSegmentBitLength(mode, numChars); + if (temp == LENGTH_OVERFLOW) return type(uint).max; + return (uint(temp) + 7) / 8; + } + + + /*======== Private: core encode pipeline ========*/ + + /* + * Builds the QR Code symbol from already-determined version and ECC level. + * + * The module grid is kept as uint256[] rows internally (bit x of rows[y] = module + * at column x, row y). This eliminates the y*size multiplication on every module + * access and enables whole-row operations for rectangle fills, mask application, + * and penalty scoring. The grid is converted to the standard packed-bytes output + * format only in the final _gridToBytes call. + */ + function _buildQrCode( + Segment[] memory segs, + uint8 version, + uint8 ecl, + uint8 mask + ) private pure returns (bytes memory) { + uint qrsize = uint(version) * 4 + 17; + uint bufLen = bufferLenForVersion(version); + + // Phase 1-2: encode segment bits, pad, compute ECC — all in packed bytes. + bytes memory scratch = new bytes(bufLen); + bytes memory eccBuf = new bytes(bufLen); + uint bitLen = _appendSegmentBits(segs, version, scratch); + bitLen = _addTerminatorAndPad(scratch, bitLen, version, ecl); + _addEccAndInterleave(scratch, version, ecl, eccBuf); + + // Phase 3: build and finalise the module grid as uint256[]. + uint256[] memory rows = new uint256[](qrsize); + uint256[] memory frows = new uint256[](qrsize); + + _initFuncModules(version, qrsize, rows); + _drawCodewords(eccBuf, _getNumRawDataModules(version) / 8, qrsize, rows); + _drawLightFuncModules(qrsize, version, rows); + _initFuncModules(version, qrsize, frows); + + if (mask == MASK_AUTO) + mask = _chooseBestMask(frows, rows, qrsize, ecl); + _applyMask(frows, rows, qrsize, mask); + _drawFormatBits(ecl, mask, qrsize, rows); + + return _gridToBytes(rows, qrsize); + } + + function _findMinVersion( + Segment[] memory segs, + uint8 ecl, + uint8 minVersion, + uint8 maxVersion + ) private pure returns (bool success, uint8 version, uint dataUsedBits) { + for (version = minVersion; ; version++) { + uint cap = _getNumDataCodewords(version, ecl) * 8; + int bits = _getTotalBits(segs, version); + if (bits >= 0 && uint(bits) <= cap) { + dataUsedBits = uint(bits); + return (true, version, dataUsedBits); + } + if (version >= maxVersion) return (false, 0, 0); + } + } + + function _boostEccLevel( + uint8 ecl, + uint8 version, + uint dataUsedBits, + bool boostEcl + ) private pure returns (uint8) { + if (!boostEcl) return ecl; + for (uint8 i = ECC_MEDIUM; i <= ECC_HIGH; i++) { + if (dataUsedBits <= _getNumDataCodewords(version, i) * 8) + ecl = i; + } + return ecl; + } + + function _appendSegmentBits( + Segment[] memory segs, + uint8 version, + bytes memory qrcode + ) private pure returns (uint bitLen) { + bitLen = 0; + for (uint i = 0; i < segs.length; i++) { + Segment memory seg = segs[i]; + bitLen = _appendBitsToBuffer(uint(seg.mode), 4, qrcode, bitLen); + bitLen = _appendBitsToBuffer(seg.numChars, _numCharCountBits(seg.mode, version), qrcode, bitLen); + for (uint j = 0; j < seg.bitLength; j++) { + uint bit = (uint8(seg.data[j >> 3]) >> (7 - (j & 7))) & 1; + bitLen = _appendBitsToBuffer(bit, 1, qrcode, bitLen); + } + } + } + + function _addTerminatorAndPad( + bytes memory qrcode, + uint bitLen, + uint8 version, + uint8 ecl + ) private pure returns (uint) { + uint cap = _getNumDataCodewords(version, ecl) * 8; + uint term = cap - bitLen; + if (term > 4) term = 4; + bitLen = _appendBitsToBuffer(0, term, qrcode, bitLen); + bitLen = _appendBitsToBuffer(0, (8 - bitLen % 8) % 8, qrcode, bitLen); + + uint8 padByte = 0xEC; + while (bitLen < cap) { + bitLen = _appendBitsToBuffer(padByte, 8, qrcode, bitLen); + padByte = (padByte == 0xEC) ? 0x11 : 0xEC; + } + return bitLen; + } + + + /*======== Private: ECC computation and interleaving ========*/ + + function _addEccAndInterleave( + bytes memory data, + uint8 version, + uint8 ecl, + bytes memory result + ) private pure { + uint numBlocks = _numErrCorrBlocks(ecl, version); + uint blockEccLen = _eccCodewordsPerBlock(ecl, version); + uint rawCodewords = _getNumRawDataModules(version) / 8; + uint dataLen = _getNumDataCodewords(version, ecl); + uint numShortBlocks = numBlocks - rawCodewords % numBlocks; + uint shortBlockDataLen = rawCodewords / numBlocks - blockEccLen; + + bytes memory rsdiv = _reedSolomonComputeDivisor(blockEccLen); + uint datOffset = 0; + + for (uint i = 0; i < numBlocks; i++) { + uint datLen = shortBlockDataLen + (i < numShortBlocks ? 0 : 1); + _interleaveBlock( + data, datOffset, datLen, rsdiv, blockEccLen, + result, i, numBlocks, numShortBlocks, shortBlockDataLen, dataLen + ); + datOffset += datLen; + } + } + + function _interleaveBlock( + bytes memory data, + uint datOffset, + uint datLen, + bytes memory rsdiv, + uint blockEccLen, + bytes memory result, + uint blockIdx, + uint numBlocks, + uint numShortBlocks, + uint shortBlockDataLen, + uint dataLen + ) private pure { + bytes memory ecc = _reedSolomonComputeRemainder(data, datOffset, datLen, rsdiv, blockEccLen); + + for (uint j = 0; j < datLen; j++) { + uint k = blockIdx + j * numBlocks; + if (j >= shortBlockDataLen) k -= numShortBlocks; + result[k] = data[datOffset + j]; + } + for (uint j = 0; j < blockEccLen; j++) + result[dataLen + blockIdx + j * numBlocks] = ecc[j]; + } + + function _getNumDataCodewords(uint8 version, uint8 ecl) private pure returns (uint) { + return _getNumRawDataModules(version) / 8 + - _eccCodewordsPerBlock(ecl, version) * _numErrCorrBlocks(ecl, version); + } + + function _getNumRawDataModules(uint8 version) private pure returns (uint) { + uint v = version; + uint result = (16 * v + 128) * v + 64; + if (v >= 2) { + uint numAlign = v / 7 + 2; + result -= (25 * numAlign - 10) * numAlign - 55; + if (v >= 7) result -= 36; + } + return result; + } + + + /*======== Private: Reed-Solomon ECC ========*/ + + /* + * GF(2^8) multiply using the pre-computed log/exp constant tables. + * Three table lookups replace the 8-iteration Russian-peasant loop. + */ + function _gf256Mul(uint8 x, uint8 y) private pure returns (uint8 z) { + if (x == 0 || y == 0) return 0; + uint ix = uint8(GF256_LOG[x]); + uint iy = uint8(GF256_LOG[y]); + unchecked { + uint s = ix + iy; + if (s >= 255) s -= 255; + z = uint8(GF256_EXP[s]); + } + } + + // Returns the RS generator polynomial of the given degree. + function _reedSolomonComputeDivisor(uint degree) private pure returns (bytes memory result) { + require(degree >= 1 && degree <= 30, "QRCode: RS degree out of range"); + result = new bytes(degree); + result[degree - 1] = 0x01; + + uint8 root = 1; + for (uint i = 0; i < degree; i++) { + for (uint j = 0; j < degree; j++) { + result[j] = bytes1(_gf256Mul(uint8(result[j]), root)); + if (j + 1 < degree) + result[j] = bytes1(uint8(result[j]) ^ uint8(result[j + 1])); + } + root = _gf256Mul(root, 0x02); + } + } + + /* + * Computes the RS remainder of data[offset..offset+dataLen-1] divided by the generator. + * + * The inner loop runs in Yul assembly to eliminate per-byte bounds-check overhead + * and to inline the GF(256) multiply directly from memory-resident log/exp tables, + * avoiding Solidity function-call overhead on the hot multiply path. + */ + function _reedSolomonComputeRemainder( + bytes memory data, + uint dataOffset, + uint dataLen, + bytes memory generator, + uint degree + ) private pure returns (bytes memory result) { + result = new bytes(degree); + bytes memory expMem = GF256_EXP; // load constants to memory once + bytes memory logMem = GF256_LOG; + assembly { + let resPtr := add(result, 0x20) + let genPtr := add(generator, 0x20) + let datPtr := add(add(data, 0x20), dataOffset) + let expBase := add(expMem, 0x20) + let logBase := add(logMem, 0x20) + + for { let i := 0 } lt(i, dataLen) { i := add(i, 1) } { + // factor = data[i] XOR result[0] + let factor := xor(byte(0, mload(datPtr)), byte(0, mload(resPtr))) + datPtr := add(datPtr, 1) + + // Shift result left by 1; zero the last byte. + let deg1 := sub(degree, 1) + for { let k := 0 } lt(k, deg1) { k := add(k, 1) } { + mstore8(add(resPtr, k), byte(0, mload(add(resPtr, add(k, 1))))) + } + mstore8(add(resPtr, deg1), 0) + + // result[j] ^= gf256Mul(generator[j], factor) + for { let j := 0 } lt(j, degree) { j := add(j, 1) } { + let g := byte(0, mload(add(genPtr, j))) + // mul(g, factor) is nonzero iff both g and factor are nonzero + // (each <= 255, product <= 65025, no 256-bit overflow). + if mul(g, factor) { + let lg := byte(0, mload(add(logBase, g))) + let lf := byte(0, mload(add(logBase, factor))) + let s := add(lg, lf) + if gt(s, 254) { s := sub(s, 255) } + let prod := byte(0, mload(add(expBase, s))) + let addr := add(resPtr, j) + mstore8(addr, xor(byte(0, mload(addr)), prod)) + } + } + } + } + } + + + /*======== Private: Function module drawing (uint256[] grid) ========*/ + + /* + * Zeros rows[], then marks every function-module position as dark (bit set). + * Grid convention: bit x of rows[y] = module (column x, row y). + */ + function _initFuncModules(uint8 version, uint qrsize, uint256[] memory rows) private pure { + // new uint256[] is already zero-initialised. + + // Timing patterns + _fillRect(6, 0, 1, qrsize, rows); // vertical: col 6, all rows + _fillRect(0, 6, qrsize, 1, rows); // horizontal: row 6, all cols + + // Finder patterns + format bit areas + _fillRect(0, 0, 9, 9, rows); + _fillRect(qrsize - 8, 0, 8, 9, rows); + _fillRect(0, qrsize - 8, 9, 8, rows); + + // Alignment patterns + { + (bytes memory ap, uint n) = _getAlignmentPatternPositions(version); + for (uint i = 0; i < n; i++) { + for (uint j = 0; j < n; j++) { + if ((i == 0 && j == 0) || (i == 0 && j == n - 1) || (i == n - 1 && j == 0)) + continue; + _fillRect(uint(uint8(ap[i])) - 2, uint(uint8(ap[j])) - 2, 5, 5, rows); + } + } + } + + // Version information blocks (version >= 7) + if (version >= 7) { + _fillRect(qrsize - 11, 0, 3, 6, rows); + _fillRect(0, qrsize - 11, 6, 3, rows); + } + } + + /* + * Draws the light (white) parts of the function modules: timing gaps, finder + * separator rings, alignment pattern interiors, and version information bits. + */ + function _drawLightFuncModules(uint qrsize, uint8 version, uint256[] memory rows) private pure { + // Timing gap: every other module starting at index 7 + { + uint i = 7; + while (i < qrsize - 7) { + _clearMod(rows, 6, i); + _clearMod(rows, i, 6); + i += 2; + } + } + + // Finder pattern separator rings (Chebyshev distance 2 and 4 from each center) + for (int dy = -4; dy <= 4; dy++) { + for (int dx = -4; dx <= 4; dx++) { + int adx = dx < 0 ? -dx : dx; + int ady = dy < 0 ? -dy : dy; + int dist = adx > ady ? adx : ady; + if (dist == 2 || dist == 4) { + _setModU(rows, qrsize, int(3) + dx, int(3) + dy, false); + _setModU(rows, qrsize, int(qrsize) - 4 + dx, int(3) + dy, false); + _setModU(rows, qrsize, int(3) + dx, int(qrsize) - 4 + dy, false); + } + } + } + + // Alignment pattern interiors + { + (bytes memory ap, uint n) = _getAlignmentPatternPositions(version); + for (uint i = 0; i < n; i++) { + for (uint j = 0; j < n; j++) { + if ((i == 0 && j == 0) || (i == 0 && j == n - 1) || (i == n - 1 && j == 0)) + continue; + for (int dy2 = -1; dy2 <= 1; dy2++) { + for (int dx2 = -1; dx2 <= 1; dx2++) { + _setMod(rows, + uint(int(uint(uint8(ap[i]))) + dx2), + uint(int(uint(uint8(ap[j]))) + dy2), + dx2 == 0 && dy2 == 0); + } + } + } + } + } + + // Version information modules (version >= 7) + if (version >= 7) { + uint rem = version; + for (uint i = 0; i < 12; i++) + rem = (rem << 1) ^ ((rem >> 11) * 0x1F25); + uint bits = (uint(version) << 12) | rem; + + for (uint i = 0; i < 6; i++) { + for (uint j = 0; j < 3; j++) { + uint p = qrsize - 11 + j; + _setMod(rows, p, i, (bits & 1) != 0); + _setMod(rows, i, p, (bits & 1) != 0); + bits >>= 1; + } + } + } + } + + // Draws two copies of the 15-bit format information (including its own ECC). + function _drawFormatBits(uint8 ecl, uint8 mask, uint qrsize, uint256[] memory rows) private pure { + // Remap ECC level: LOW->1, MEDIUM->0, QUARTILE->3, HIGH->2 + uint8[4] memory table; + table[0] = 1; table[1] = 0; table[2] = 3; table[3] = 2; + uint data = (uint(table[ecl]) << 3) | uint(mask); + uint rem = data; + for (uint i = 0; i < 10; i++) + rem = (rem << 1) ^ ((rem >> 9) * 0x537); + uint bits = (data << 10 | rem) ^ 0x5412; + + // First copy (around the top-left finder) + for (uint i = 0; i <= 5; i++) _setMod(rows, 8, i, _getBit(bits, i)); + _setMod(rows, 8, 7, _getBit(bits, 6)); + _setMod(rows, 8, 8, _getBit(bits, 7)); + _setMod(rows, 7, 8, _getBit(bits, 8)); + for (uint i = 9; i < 15; i++) _setMod(rows, 14 - i, 8, _getBit(bits, i)); + + // Second copy (top-right and bottom-left finders) + for (uint i = 0; i < 8; i++) _setMod(rows, qrsize - 1 - i, 8, _getBit(bits, i)); + for (uint i = 8; i < 15; i++) _setMod(rows, 8, qrsize - 15 + i, _getBit(bits, i)); + _setMod(rows, 8, qrsize - 8, true); // Always dark + } + + // Returns the sorted list of alignment pattern centre positions for `version`. + function _getAlignmentPatternPositions(uint8 version) + private pure returns (bytes memory result, uint numAlign) + { + result = new bytes(7); + if (version == 1) return (result, 0); + numAlign = uint(version) / 7 + 2; + uint step = ((uint(version) * 8 + numAlign * 3 + 5) / (numAlign * 4 - 4)) * 2; + { + uint pos = uint(version) * 4 + 10; + uint i = numAlign - 1; + while (true) { + result[i] = bytes1(uint8(pos)); + if (i == 1) break; + i--; + pos -= step; + } + } + result[0] = 0x06; + } + + /* + * Sets all modules in [left, left+width) x [top, top+height) to dark. + * Vectorised: computes a column bitmask and ORs it into each row word — + * height OR operations instead of width*height individual bit sets. + */ + function _fillRect(uint left, uint top, uint width, uint height, uint256[] memory rows) private pure { + uint256 colBits = ((uint256(1) << width) - 1) << left; + unchecked { + for (uint dy = 0; dy < height; dy++) + rows[top + dy] |= colBits; + } + } + + + /*======== Private: Codeword drawing and masking ========*/ + + function _drawCodewords( + bytes memory data, + uint dataLen, + uint qrsize, + uint256[] memory rows + ) private pure { + uint idx = 0; + uint right = qrsize - 1; + while (right >= 1) { + if (right == 6) right = 5; + for (uint vert = 0; vert < qrsize; vert++) { + for (uint j = 0; j < 2; j++) { + uint x = right - j; + bool upward = ((right + 1) & 2) == 0; + uint y = upward ? qrsize - 1 - vert : vert; + if (!_getMod(rows, x, y) && idx < dataLen * 8) { + bool dark = _getBit(uint8(data[idx >> 3]), 7 - (idx & 7)); + _setMod(rows, x, y, dark); + idx++; + } + } + } + if (right < 2) break; + right -= 2; + } + } + + /* + * XORs every non-function module with the given mask pattern. + * + * For each row y a 256-bit column-pattern is computed analytically from the + * precomputed constants (O(1) per row for masks 0-4; same for masks 5-7 using + * six (y%2, y%3) cases). The pattern is ANDed with ~frows[y] to skip function + * modules, then XORed into the row in a single word operation. + */ + function _applyMask( + uint256[] memory frows, + uint256[] memory rows, + uint qrsize, + uint8 mask + ) private pure { + uint256 colMask = (uint256(1) << qrsize) - 1; + for (uint y = 0; y < qrsize; y++) { + uint256 pat = _maskRowPattern(mask, y); + rows[y] ^= (pat & ~frows[y]) & colMask; + } + } + + /* + * Returns the 256-bit column-inversion pattern for row y of the given mask. + * Bit x is 1 iff the mask formula would invert module (x, y). + */ + function _maskRowPattern(uint8 mask, uint y) private pure returns (uint256) { + if (mask == 0) return (y & 1) == 0 ? _MASK0_EVEN : _MASK0_ODD; // (x+y)%2==0 + if (mask == 1) return (y & 1) == 0 ? type(uint256).max : 0; // y%2==0 + if (mask == 2) return _MP0; // x%3==0 + if (mask == 3) { // (x+y)%3==0 + uint yr3 = y % 3; + return yr3 == 0 ? _MP0 : yr3 == 1 ? _MP2 : _MP1; + } + if (mask == 4) return ((y >> 1) & 1) == 0 ? _MPA : _MPB; // (x/3+y/2)%2==0 + + // Masks 5-7: six (y%2, y%3) cases analytically derived. + uint ym2 = y & 1; + uint ym3 = y % 3; + if (mask == 5) { // x*y%2 + x*y%3 == 0 (i.e. x*y divisible by 6) + if (ym2 == 0 && ym3 == 0) return type(uint256).max; + if (ym2 == 0) return _MP0; + if (ym3 == 0) return _MASK0_EVEN; + return _MP6; + } + if (mask == 6) { // (x*y%2 + x*y%3) % 2 == 0 + if (ym2 == 0 && ym3 == 0) return type(uint256).max; + if (ym2 == 0 && ym3 == 1) return _MP0 | _MP2; + if (ym2 == 0 && ym3 == 2) return _MP0 | _MP1; + if (ym2 == 1 && ym3 == 0) return _MASK0_EVEN; + if (ym2 == 1 && ym3 == 1) return _MPA; + return _MPC; + } + // mask == 7: ((x+y)%2 + x*y%3) % 2 == 0 + if (ym2 == 0 && ym3 == 0) return _MASK0_EVEN; + if (ym2 == 0 && ym3 == 1) return _MPA; + if (ym2 == 0 && ym3 == 2) return _MPC; + if (ym2 == 1 && ym3 == 0) return _MASK0_ODD; + if (ym2 == 1 && ym3 == 1) return _MPB; + return _MPD; + } + + function _chooseBestMask( + uint256[] memory frows, + uint256[] memory rows, + uint qrsize, + uint8 ecl + ) private pure returns (uint8 bestMask) { + uint minPenalty = type(uint).max; + for (uint8 i = 0; i < 8; i++) { + _applyMask(frows, rows, qrsize, i); + _drawFormatBits(ecl, i, qrsize, rows); + uint penalty = _getPenaltyScore(rows, qrsize); + if (penalty < minPenalty) { + bestMask = i; + minPenalty = penalty; + } + _applyMask(frows, rows, qrsize, i); // undo via XOR + } + } + + /* + * Computes the QR Code penalty score (lower is better). + * + * N2 (2x2 same-colour blocks) and N4 (dark/light balance) use Yul popcount + * on 256-bit row words, reducing O(n^2) module reads to O(n) word operations. + * N1/N3 (run-length and finder patterns) use a per-module scan that reads from + * a pre-loaded uint256 row word, eliminating the y*size multiplication. + */ + function _getPenaltyScore(uint256[] memory rows, uint qrsize) private pure returns (uint result) { + uint256 colMask = (uint256(1) << qrsize) - 1; + uint256 blkMask = qrsize > 1 ? (uint256(1) << (qrsize - 1)) - 1 : 0; + result = 0; + + // N1 + N3: row scans + for (uint y = 0; y < qrsize; y++) + result += _penaltyLine(rows[y] & colMask, qrsize); + // N1 + N3: column scans + for (uint x = 0; x < qrsize; x++) + result += _penaltyCol(rows, x, qrsize); + + // N2 and N4 computed in Yul with vectorised 256-bit row operations. + assembly { + function popcnt64(u) -> c { + u := sub(u, and(shr(1, u), 0x5555555555555555)) + u := add(and(u, 0x3333333333333333), + and(shr(2, u), 0x3333333333333333)) + u := and(add(u, shr(4, u)), 0x0f0f0f0f0f0f0f0f) + c := shr(56, mul(u, 0x0101010101010101)) + } + function popcnt256(v) -> cnt { + cnt := add( + add(popcnt64(and(v, 0xffffffffffffffff)), + popcnt64(and(shr(64, v), 0xffffffffffffffff))), + add(popcnt64(and(shr(128, v), 0xffffffffffffffff)), + popcnt64(shr(192, v)))) + } + + let rowsData := add(rows, 0x20) + let qrs := qrsize + let cm := colMask + let bm := blkMask + let darkTotal := 0 + + // N4: popcount all rows to get total dark module count. + for { let y := 0 } lt(y, qrs) { y := add(y, 1) } { + let row := mload(add(rowsData, mul(y, 0x20))) + darkTotal := add(darkTotal, popcnt256(and(row, cm))) + } + + // N2: count 2x2 same-colour blocks over consecutive row pairs. + // For rows r0, r1: + // dark squares: (r0 & (r0>>1)) & (r1 & (r1>>1)) + // light squares: (~r0 & (~r0>>1)) & (~r1 & (~r1>>1)) [masked to colMask] + let n2count := 0 + for { let y := 0 } lt(y, sub(qrs, 1)) { y := add(y, 1) } { + let r0 := and(mload(add(rowsData, mul(y, 0x20))), cm) + let r1 := and(mload(add(rowsData, mul(add(y, 1), 0x20))), cm) + let d := and(and(r0, shr(1, r0)), and(r1, shr(1, r1))) + let nr0 := and(not(r0), cm) + let nr1 := and(not(r1), cm) + let l := and(and(nr0, shr(1, nr0)), and(nr1, shr(1, nr1))) + n2count := add(n2count, popcnt256(and(or(d, l), bm))) + } + + // N4 penalty calculation + let total := mul(qrs, qrs) + let darkDiff := 0 + let t20 := mul(darkTotal, 20) + let base10 := mul(total, 10) + switch gt(t20, base10) + case 1 { darkDiff := sub(t20, base10) } + default { darkDiff := sub(base10, t20) } + let c_val := div(add(darkDiff, sub(total, 1)), total) + let k_val := 0 + if gt(c_val, 0) { k_val := sub(c_val, 1) } + + result := add(result, add(mul(n2count, 3), mul(k_val, 10))) + } + } + + // N1+N3 penalty for one row (passed as a pre-loaded uint256 word). + function _penaltyLine(uint256 rowBits, uint qrsize) + private pure returns (uint score) + { + bool runColor = false; + uint runLen = 0; + uint[7] memory history; + score = 0; + for (uint x = 0; x < qrsize; x++) { + bool cur = ((rowBits >> x) & 1) != 0; + if (cur == runColor) { + runLen++; + if (runLen == 5) score += PENALTY_N1; + else if (runLen > 5) score++; + } else { + _finderPenaltyAddHistory(runLen, history, qrsize); + if (!runColor) score += _finderPenaltyCountPatterns(history) * PENALTY_N3; + runColor = cur; + runLen = 1; + } + } + score += _finderPenaltyTerminateAndCount(runColor, runLen, history, qrsize) * PENALTY_N3; + } + + // N1+N3 penalty for column x (reads rows[y] bit x for each y). + function _penaltyCol(uint256[] memory rows, uint x, uint qrsize) + private pure returns (uint score) + { + bool runColor = false; + uint runLen = 0; + uint[7] memory history; + score = 0; + uint256 xBit = uint256(1) << x; + for (uint y = 0; y < qrsize; y++) { + bool cur = (rows[y] & xBit) != 0; + if (cur == runColor) { + runLen++; + if (runLen == 5) score += PENALTY_N1; + else if (runLen > 5) score++; + } else { + _finderPenaltyAddHistory(runLen, history, qrsize); + if (!runColor) score += _finderPenaltyCountPatterns(history) * PENALTY_N3; + runColor = cur; + runLen = 1; + } + } + score += _finderPenaltyTerminateAndCount(runColor, runLen, history, qrsize) * PENALTY_N3; + } + + function _finderPenaltyCountPatterns(uint[7] memory h) private pure returns (uint) { + uint n = h[1]; + bool core = n > 0 && h[2] == n && h[3] == n * 3 && h[4] == n && h[5] == n; + uint cnt = 0; + if (core && h[0] >= n * 4 && h[6] >= n) cnt++; + if (core && h[6] >= n * 4 && h[0] >= n) cnt++; + return cnt; + } + + function _finderPenaltyTerminateAndCount( + bool runColor, + uint runLen, + uint[7] memory history, + uint qrsize + ) private pure returns (uint) { + if (runColor) { + _finderPenaltyAddHistory(runLen, history, qrsize); + runLen = 0; + } + runLen += qrsize; + _finderPenaltyAddHistory(runLen, history, qrsize); + return _finderPenaltyCountPatterns(history); + } + + function _finderPenaltyAddHistory(uint runLen, uint[7] memory h, uint qrsize) private pure { + if (h[0] == 0) runLen += qrsize; + h[6] = h[5]; h[5] = h[4]; h[4] = h[3]; + h[3] = h[2]; h[2] = h[1]; h[1] = h[0]; + h[0] = runLen; + } + + + /*======== Private: Grid-to-bytes conversion ========*/ + + /* + * Converts the uint256[] row grid to the standard packed-bytes output format: + * out[0] = qrsize + * out[1..] = module bits packed row-major, LSB-first within each byte. + * + * The Yul loop scans each row word once; only dark-module bits call mstore8. + */ + function _gridToBytes(uint256[] memory rows, uint qrsize) + private pure returns (bytes memory out) + { + uint bufLen = (qrsize * qrsize + 7) / 8 + 1; + out = new bytes(bufLen); + out[0] = bytes1(uint8(qrsize)); + assembly { + // out[1] is the first module-data byte. + // Memory layout: out -> length (32 bytes) -> out[0] (size) -> out[1..] (modules) + let outModBase := add(out, 0x21) // skip length word and size byte + let rowsData := add(rows, 0x20) + let qrs := qrsize + + for { let y := 0 } lt(y, qrs) { y := add(y, 1) } { + let row := mload(add(rowsData, mul(y, 0x20))) + let bitStart := mul(y, qrs) + + for { let x := 0 } lt(x, qrs) { x := add(x, 1) } { + if and(shr(x, row), 1) { + let bi := add(bitStart, x) + let byteIdx := shr(3, bi) + let bitOff := and(bi, 7) + let addr := add(outModBase, byteIdx) + mstore8(addr, or(byte(0, mload(addr)), shl(bitOff, 1))) + } + } + } + } + } + + + /*======== Private: uint256 grid module helpers ========*/ + + function _setMod(uint256[] memory rows, uint x, uint y, bool dark) private pure { + if (dark) + rows[y] |= (uint256(1) << x); + else + rows[y] &= ~(uint256(1) << x); + } + + function _clearMod(uint256[] memory rows, uint x, uint y) private pure { + rows[y] &= ~(uint256(1) << x); + } + + function _getMod(uint256[] memory rows, uint x, uint y) private pure returns (bool) { + return (rows[y] >> x) & 1 != 0; + } + + // Bounded set: silently ignores out-of-range coordinates. + function _setModU(uint256[] memory rows, uint qrsize, int x, int y, bool dark) private pure { + if (x >= 0 && x < int(qrsize) && y >= 0 && y < int(qrsize)) + _setMod(rows, uint(x), uint(y), dark); + } + + + /*======== Private: Packed-bytes module access (used by getModule only) ========*/ + + function _getModuleBounded(bytes memory qrcode, uint x, uint y) private pure returns (bool) { + uint qrsize = uint8(qrcode[0]); + uint index = y * qrsize + x; + return ((uint8(qrcode[(index >> 3) + 1]) >> (index & 7)) & 1) != 0; + } + + function _getBit(uint x, uint i) private pure returns (bool) { + return ((x >> i) & 1) != 0; + } + + + /*======== Private: Segment bit-length calculations ========*/ + + function _calcSegmentBitLength(uint8 mode, uint numChars) private pure returns (int) { + if (numChars > 32767) return LENGTH_OVERFLOW; + int result = int(numChars); + if (mode == MODE_NUMERIC) result = (result * 10 + 2) / 3; + else if (mode == MODE_ALPHANUMERIC) result = (result * 11 + 1) / 2; + else if (mode == MODE_BYTE) result *= 8; + else if (mode == MODE_KANJI) result *= 13; + else if (mode == MODE_ECI && numChars == 0) result = 3 * 8; + else return LENGTH_OVERFLOW; + if (result > 32767) return LENGTH_OVERFLOW; + return result; + } + + function _getTotalBits(Segment[] memory segs, uint8 version) private pure returns (int) { + int result = 0; + for (uint i = 0; i < segs.length; i++) { + uint ccbits = _numCharCountBits(segs[i].mode, version); + if (segs[i].numChars >= (1 << ccbits)) return LENGTH_OVERFLOW; + result += int(4 + ccbits + segs[i].bitLength); + if (result > 32767) return LENGTH_OVERFLOW; + } + return result; + } + + function _numCharCountBits(uint8 mode, uint8 version) private pure returns (uint) { + uint i = (uint(version) + 7) / 17; // 0 for v1–9, 1 for v10–26, 2 for v27–40 + if (mode == MODE_NUMERIC) { if (i == 0) return 10; if (i == 1) return 12; return 14; } + if (mode == MODE_ALPHANUMERIC) { if (i == 0) return 9; if (i == 1) return 11; return 13; } + if (mode == MODE_BYTE) { if (i == 0) return 8; return 16; } + if (mode == MODE_KANJI) { if (i == 0) return 8; if (i == 1) return 10; return 12; } + if (mode == MODE_ECI) return 0; + revert("QRCode: invalid mode"); + } + + + /*======== Private: Bit buffer ========*/ + + function _appendBitsToBuffer(uint val, uint numBits, bytes memory buffer, uint bitLen) + private pure returns (uint) + { + for (int i = int(numBits) - 1; i >= 0; i--) { + if (((val >> uint(i)) & 1) != 0) { + uint byteIdx = bitLen >> 3; + uint bitIdx = 7 - (bitLen & 7); + buffer[byteIdx] = bytes1(uint8(buffer[byteIdx]) | uint8(1 << bitIdx)); + } + bitLen++; + } + return bitLen; + } + + + /*======== Private: Alphanumeric character lookup ========*/ + + /* + * Returns (true, index) if c is in the QR alphanumeric charset, else (false, 0). + * Uses the pre-computed ALPHA_MAP constant: two range checks + one table lookup, + * replacing the original 11-branch if-else chain. + */ + function _alphanumericCharIndex(uint8 c) private pure returns (bool, uint) { + if (c < 0x20 || c > 0x5A) return (false, 0); + uint8 v = uint8(ALPHA_MAP[c - 0x20]); + if (v == 0) return (false, 0); + return (true, uint(v) - 1); + } + + + /*======== Private: ECC codeword lookup tables ========*/ + + function _eccCodewordsPerBlock(uint8 ecl, uint8 version) private pure returns (uint8) { + if (ecl == ECC_LOW) return uint8(_ECPB_LOW[version]); + if (ecl == ECC_MEDIUM) return uint8(_ECPB_MED[version]); + if (ecl == ECC_QUARTILE) return uint8(_ECPB_QRT[version]); + return uint8(_ECPB_HIGH[version]); + } + + function _numErrCorrBlocks(uint8 ecl, uint8 version) private pure returns (uint8) { + if (ecl == ECC_LOW) return uint8(_NECB_LOW[version]); + if (ecl == ECC_MEDIUM) return uint8(_NECB_MED[version]); + if (ecl == ECC_QUARTILE) return uint8(_NECB_QRT[version]); + return uint8(_NECB_HIGH[version]); + } + +} diff --git a/solidity/contracts/QRCodeDemo.sol b/solidity/contracts/QRCodeDemo.sol new file mode 100644 index 0000000..68ccd8c --- /dev/null +++ b/solidity/contracts/QRCodeDemo.sol @@ -0,0 +1,258 @@ +/* + * QR Code generator demo (Solidity) + * + * Solidity port and EVM optimizations copyright (c) trifle-labs contributors. + * Based on the C implementation by Project Nayuki (MIT License). + * https://www.nayuki.io/page/qr-code-generator-library + * + * Permission is hereby granted, free of charge, to any person obtaining a copy of + * this software and associated documentation files (the "Software"), to deal in + * the Software without restriction, including without limitation the rights to + * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of + * the Software, and to permit persons to whom the Software is furnished to do so, + * subject to the following conditions: + * - The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * - The Software is provided "as is", without warranty of any kind, express or + * implied, including but not limited to the warranties of merchantability, + * fitness for a particular purpose and noninfringement. In no event shall the + * authors or copyright holders be liable for any claim, damages or other + * liability, whether in an action of contract, tort or otherwise, arising from, + * out of or in connection with the Software or the use or other dealings in the + * Software. + */ + +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.0; + +import "./QRCode.sol"; + +/* + * A demo contract that exercises the QRCode library. + * + * All public functions are pure (no state) and return the raw QR Code bytes. + * Callers can inspect individual modules with QRCode.getModule() or render the + * symbol off-chain. See the Readme.markdown for the output format. + * + * toSvgString() shows how to render a QR Code to an inline SVG string entirely + * on-chain — useful for NFT metadata or other on-chain display. + */ +contract QRCodeDemo { + + // ----------------------------------------------------------------------- + // Demo scenarios + // ----------------------------------------------------------------------- + + // Simple: encode "Hello, world!" with Low ECC, automatic mask. + function doBasicDemo() external pure returns (bytes memory) { + return QRCode.encodeText( + "Hello, world!", + QRCode.ECC_LOW, + QRCode.VERSION_MIN, + QRCode.VERSION_MAX, + QRCode.MASK_AUTO, + true + ); + } + + // Same as doBasicDemo() but forces mask 2 (the mask AUTO selects for this input). + // Useful for testing when on-chain gas limits prohibit the 8-pass auto-mask scan. + function doBasicDemoFixedMask() external pure returns (bytes memory) { + return QRCode.encodeText( + "Hello, world!", + QRCode.ECC_LOW, + QRCode.VERSION_MIN, + QRCode.VERSION_MAX, + QRCode.MASK_2, + true + ); + } + + // Numeric mode: digits are encoded with 3.33 bits per digit. + function doNumericDemo() external pure returns (bytes memory) { + return QRCode.encodeText( + "314159265358979323846264338327950288419716939937510", + QRCode.ECC_MEDIUM, + QRCode.VERSION_MIN, + QRCode.VERSION_MAX, + QRCode.MASK_AUTO, + true + ); + } + + // Same as doNumericDemo() but forces mask 3 (the mask AUTO selects for this input). + // Useful for testing when on-chain gas limits prohibit the 8-pass auto-mask scan. + function doNumericDemoFixedMask() external pure returns (bytes memory) { + return QRCode.encodeText( + "314159265358979323846264338327950288419716939937510", + QRCode.ECC_MEDIUM, + QRCode.VERSION_MIN, + QRCode.VERSION_MAX, + QRCode.MASK_3, + true + ); + } + + // Alphanumeric mode: uppercase + special chars at 5.5 bits per character. + function doAlphanumericDemo() external pure returns (bytes memory) { + return QRCode.encodeText( + "DOLLAR-AMOUNT:$39.87 PERCENTAGE:100.00% OPERATIONS:+-*/", + QRCode.ECC_HIGH, + QRCode.VERSION_MIN, + QRCode.VERSION_MAX, + QRCode.MASK_AUTO, + true + ); + } + + // Same as doAlphanumericDemo() but forces mask 0. + // Useful for testing when on-chain gas limits prohibit the 8-pass auto-mask scan. + function doAlphanumericDemoFixedMask() external pure returns (bytes memory) { + return QRCode.encodeText( + "DOLLAR-AMOUNT:$39.87 PERCENTAGE:100.00% OPERATIONS:+-*/", + QRCode.ECC_HIGH, + QRCode.VERSION_MIN, + QRCode.VERSION_MAX, + QRCode.MASK_0, + true + ); + } + + // Binary / byte mode: arbitrary byte sequences. + function doBinaryDemo() external pure returns (bytes memory) { + bytes memory data = hex"48656c6c6f2c20776f726c6421"; // "Hello, world!" + return QRCode.encodeBinary( + data, + QRCode.ECC_MEDIUM, + QRCode.VERSION_MIN, + QRCode.VERSION_MAX, + QRCode.MASK_AUTO, + true + ); + } + + // Same as doBinaryDemo() but forces mask 0. + function doBinaryDemoFixedMask() external pure returns (bytes memory) { + bytes memory data = hex"48656c6c6f2c20776f726c6421"; // "Hello, world!" + return QRCode.encodeBinary( + data, + QRCode.ECC_MEDIUM, + QRCode.VERSION_MIN, + QRCode.VERSION_MAX, + QRCode.MASK_0, + true + ); + } + + // Fixed mask: forces mask pattern 3 instead of auto-selecting. + function doFixedMaskDemo() external pure returns (bytes memory) { + return QRCode.encodeText( + "https://www.nayuki.io/", + QRCode.ECC_HIGH, + QRCode.VERSION_MIN, + QRCode.VERSION_MAX, + QRCode.MASK_3, + true + ); + } + + // Segment API: mix alphanumeric + numeric segments for compact encoding. + function doSegmentDemo() external pure returns (bytes memory) { + QRCode.Segment[] memory segs = new QRCode.Segment[](2); + segs[0] = QRCode.makeAlphanumeric(bytes("THE SQUARE ROOT OF 2 IS 1.")); + segs[1] = QRCode.makeNumeric(bytes("41421356237309504880168872420969807856967187537694")); + return QRCode.encodeSegments(segs, QRCode.ECC_LOW); + } + + // Same as doSegmentDemo() but forces mask 0 to stay within the gas cap. + function doSegmentDemoFixedMask() external pure returns (bytes memory) { + QRCode.Segment[] memory segs = new QRCode.Segment[](2); + segs[0] = QRCode.makeAlphanumeric(bytes("THE SQUARE ROOT OF 2 IS 1.")); + segs[1] = QRCode.makeNumeric(bytes("41421356237309504880168872420969807856967187537694")); + return QRCode.encodeSegmentsAdvanced(segs, QRCode.ECC_LOW, + QRCode.VERSION_MIN, QRCode.VERSION_MAX, QRCode.MASK_0, true); + } + + // ECI segment: marks the payload as UTF-8 (ECI assignment value 26). + function doEciDemo() external pure returns (bytes memory) { + QRCode.Segment[] memory segs = new QRCode.Segment[](2); + segs[0] = QRCode.makeEci(26); + segs[1] = QRCode.makeBytes(hex"e4b8ade69687"); // Chinese "zhongwen" in UTF-8 + return QRCode.encodeSegments(segs, QRCode.ECC_MEDIUM); + } + + // Same as doEciDemo() but forces mask 0 to stay within the gas cap. + function doEciDemoFixedMask() external pure returns (bytes memory) { + QRCode.Segment[] memory segs = new QRCode.Segment[](2); + segs[0] = QRCode.makeEci(26); + segs[1] = QRCode.makeBytes(hex"e4b8ade69687"); // Chinese "zhongwen" in UTF-8 + return QRCode.encodeSegmentsAdvanced(segs, QRCode.ECC_MEDIUM, + QRCode.VERSION_MIN, QRCode.VERSION_MAX, QRCode.MASK_0, true); + } + + // Version-constrained: forces exactly version 5 (37×37 modules), mask 2, no ECC boost. + function doVersionConstraintDemo() external pure returns (bytes memory) { + return QRCode.encodeText( + "3141592653589793238462643383", + QRCode.ECC_HIGH, + 5, 5, + QRCode.MASK_2, + false + ); + } + + // ----------------------------------------------------------------------- + // SVG renderer (on-chain) + // ----------------------------------------------------------------------- + + /* + * Converts a QR Code to a minimal SVG string suitable for embedding in HTML + * or returning as NFT metadata. + * + * `border` is the number of quiet-zone modules to add on each side (the QR + * Code specification recommends at least 4). + */ + function toSvgString(bytes memory qrcode, uint border) + external pure returns (string memory) + { + uint sz = QRCode.getSize(qrcode); + uint total = sz + 2 * border; + + string memory svg = string(abi.encodePacked( + '', + '', + '', + '')); + } + + // Internal helper: convert uint to its decimal string representation. + function _uint2str(uint n) internal pure returns (string memory) { + if (n == 0) return "0"; + uint temp = n; + uint digits = 0; + while (temp != 0) { digits++; temp /= 10; } + bytes memory buf = new bytes(digits); + while (n != 0) { + digits--; + buf[digits] = bytes1(uint8(48 + n % 10)); + n /= 10; + } + return string(buf); + } +} diff --git a/solidity/gasReporterOutput.json b/solidity/gasReporterOutput.json new file mode 100644 index 0000000..ed79cc9 --- /dev/null +++ b/solidity/gasReporterOutput.json @@ -0,0 +1 @@ +{"namespace":"ethGasReporter","config":{"token":"ETH","blockLimit":30000000,"defaultGasPrice":5,"currency":"USD","gasPriceApi":"https://api.etherscan.io/api?module=proxy&action=eth_gasPrice","coinmarketcap":null,"ethPrice":null,"gasPrice":null,"outputFile":null,"forceConsoleOutput":false,"rst":false,"rstTitle":"","showTimeSpent":false,"srcPath":"contracts","artifactType":"truffle-v5","proxyResolver":null,"metadata":{"compiler":{"version":"0.8.34"},"settings":{"optimizer":{"enabled":true,"runs":200}}},"showMethodSig":false,"excludeContracts":[],"onlyCalledMethods":true,"url":"http://localhost:8545"},"info":{"addressCache":{},"methods":{"QRCodeDemo_7d24d9b7":{"key":"7d24d9b7","contract":"QRCodeDemo","method":"doAlphanumericDemo","fnSig":"doAlphanumericDemo()","gasData":[],"numberOfCalls":0},"QRCodeDemo_ae324b5d":{"key":"ae324b5d","contract":"QRCodeDemo","method":"doAlphanumericDemoFixedMask","fnSig":"doAlphanumericDemoFixedMask()","gasData":[],"numberOfCalls":0},"QRCodeDemo_b66bb332":{"key":"b66bb332","contract":"QRCodeDemo","method":"doBasicDemo","fnSig":"doBasicDemo()","gasData":[],"numberOfCalls":0},"QRCodeDemo_3ced44b5":{"key":"3ced44b5","contract":"QRCodeDemo","method":"doBasicDemoFixedMask","fnSig":"doBasicDemoFixedMask()","gasData":[],"numberOfCalls":0},"QRCodeDemo_8fca6de6":{"key":"8fca6de6","contract":"QRCodeDemo","method":"doBinaryDemo","fnSig":"doBinaryDemo()","gasData":[],"numberOfCalls":0},"QRCodeDemo_e660ad3f":{"key":"e660ad3f","contract":"QRCodeDemo","method":"doBinaryDemoFixedMask","fnSig":"doBinaryDemoFixedMask()","gasData":[],"numberOfCalls":0},"QRCodeDemo_8d042b1a":{"key":"8d042b1a","contract":"QRCodeDemo","method":"doEciDemo","fnSig":"doEciDemo()","gasData":[],"numberOfCalls":0},"QRCodeDemo_e0b41de5":{"key":"e0b41de5","contract":"QRCodeDemo","method":"doEciDemoFixedMask","fnSig":"doEciDemoFixedMask()","gasData":[],"numberOfCalls":0},"QRCodeDemo_1fee786b":{"key":"1fee786b","contract":"QRCodeDemo","method":"doFixedMaskDemo","fnSig":"doFixedMaskDemo()","gasData":[],"numberOfCalls":0},"QRCodeDemo_28cbf77d":{"key":"28cbf77d","contract":"QRCodeDemo","method":"doNumericDemo","fnSig":"doNumericDemo()","gasData":[],"numberOfCalls":0},"QRCodeDemo_cf68df27":{"key":"cf68df27","contract":"QRCodeDemo","method":"doNumericDemoFixedMask","fnSig":"doNumericDemoFixedMask()","gasData":[],"numberOfCalls":0},"QRCodeDemo_da4b5c89":{"key":"da4b5c89","contract":"QRCodeDemo","method":"doSegmentDemo","fnSig":"doSegmentDemo()","gasData":[],"numberOfCalls":0},"QRCodeDemo_913583f2":{"key":"913583f2","contract":"QRCodeDemo","method":"doSegmentDemoFixedMask","fnSig":"doSegmentDemoFixedMask()","gasData":[],"numberOfCalls":0},"QRCodeDemo_bb20f6be":{"key":"bb20f6be","contract":"QRCodeDemo","method":"doVersionConstraintDemo","fnSig":"doVersionConstraintDemo()","gasData":[],"numberOfCalls":0},"QRCodeDemo_fb0f4bf3":{"key":"fb0f4bf3","contract":"QRCodeDemo","method":"toSvgString","fnSig":"toSvgString(bytes,uint256)","gasData":[],"numberOfCalls":0}},"deployments":[{"name":"QRCode","bytecode":"0x60808060405234601757603a9081601d823930815050f35b600080fdfe600080fdfea2646970667358221220e8d9818643dc853f172e152d2c9a8bdcefdf2eee384cd376a23b16fbc6c0e2e264736f6c63430008220033","deployedBytecode":"0x600080fdfea2646970667358221220e8d9818643dc853f172e152d2c9a8bdcefdf2eee384cd376a23b16fbc6c0e2e264736f6c63430008220033","gasData":[]},{"name":"QRCodeDemo","bytecode":"0x6080806040523460155761492e908161001b8239f35b600080fdfe6080604052600436101561001257600080fd5b60003560e01c80631fee786b1461010757806328cbf77d146101025780633ced44b5146100fd5780637d24d9b7146100f85780638d042b1a146100f35780638fca6de6146100ee578063913583f2146100e9578063ae324b5d146100e4578063b66bb332146100df578063bb20f6be146100da578063cf68df27146100d5578063da4b5c89146100d0578063e0b41de5146100cb578063e660ad3f146100c65763fb0f4bf3146100c157600080fd5b610599565b6104f5565b610490565b610425565b610401565b6103ad565b610389565b610365565b6102f3565b6102a2565b610233565b61020f565b6101eb565b6101bb565b61015a565b60005b83811061011f5750506000910152565b818101518382015260200161010f565b9060208092818152019061014e8151809281855285808601910161010c565b601f01601f1916010190565b346101b65760003660031901126101b6576101b260406101a7815161017f8382610556565b601681527568747470733a2f2f7777772e6e6179756b692e696f2f60501b6020820152610d43565b90519182918261012f565b0390f35b600080fd5b346101b65760003660031901126101b6576101b26101df6101da610613565b610df2565b6040519182918261012f565b346101b65760003660031901126101b6576101b26101df61020a61066a565b610e87565b346101b65760003660031901126101b6576101b26101df61022e610695565b610f20565b346101b65760003660031901126101b65761024c610744565b61025461126d565b81511561029d57602082015280511561029d57610277610272610847565b611316565b81516001101561029d57816101df9160406101b294015261029781610816565b50611391565b610800565b346101b65760003660031901126101b6576102bb61066a565b6102cc6102c66107bf565b91611316565b81511561029d57602082015280511561029d576101df600160ff602882806101b2966119c7565b346101b65760003660031901126101b65761030c610744565b61031c61031761086b565b61149c565b81511561029d57602082015280511561029d5761033f61033a6108a6565b611660565b81516001101561029d57816101df9160406101b294015261035f81610816565b5061178b565b346101b65760003660031901126101b6576101b26101df610384610695565b610fb9565b346101b65760003660031901126101b6576101b26101df6103a861066a565b611052565b346101b65760003660031901126101b6576101b260406101a781516103d28382610556565b601c81527f333134313539323635333538393739333233383436323634333338330000000060208201526110eb565b346101b65760003660031901126101b6576101b26101df610420610613565b611184565b346101b65760003660031901126101b65761043e610744565b61044961031761086b565b81511561029d57602082015280511561029d5761046761033a6108a6565b9080516001101561029d576000816101b29360406101df94015261048a81610816565b506118ba565b346101b65760003660031901126101b6576104a9610744565b6104b161126d565b81511561029d57602082015280511561029d576104cf610272610847565b81516001101561029d57816101df9160406101b29401526104ef81610816565b50611898565b346101b65760003660031901126101b65761050e61066a565b6105196102c66107bf565b81511561029d57602082015280511561029d576101df60016000602882806101b2966119c7565b634e487b7160e01b600052604160045260246000fd5b90601f8019910116810190811067ffffffffffffffff82111761057857604052565b610540565b67ffffffffffffffff811161057857601f01601f191660200190565b346101b65760403660031901126101b65760043567ffffffffffffffff81116101b657366023820112156101b6578060040135906105d68261057d565b6105e36040519182610556565b82815236602484840101116101b65760006020846101b29560246101df9601838601378301015260243590610ab1565b60405190610622606083610556565b603382527203032383834313937313639333939333735313606c1b6040837f333134313539323635333538393739333233383436323634333338333237393560208201520152565b60405190610679604083610556565b600d82526c48656c6c6f2c20776f726c642160981b6020830152565b604051906106a4606083610556565b603782527f3130302e303025204f5045524154494f4e533a2b2d2a2f0000000000000000006040837f444f4c4c41522d414d4f554e543a2433392e38372050455243454e544147453a60208201520152565b67ffffffffffffffff81116105785760051b60200190565b604051906080820182811067ffffffffffffffff8211176105785760405260006060838281528260208201528160408201520152565b604051606091906107558382610556565b6002815291601f19018260005b82811061076e57505050565b60209061077961070e565b82828501015201610762565b60405190610794602083610556565b600080835282815b8281106107a857505050565b6020906107b361070e565b8282850101520161079c565b604080519091906107d08382610556565b6001815291601f19018260005b8281106107e957505050565b6020906107f461070e565b828285010152016107dd565b634e487b7160e01b600052603260045260246000fd5b80516001101561029d5760400190565b80511561029d5760200190565b805182101561029d5760209160051b010190565b60405190610856604083610556565b6006825265e4b8ade6968760d01b6020830152565b6040519061087a604083610556565b601a82527f5448452053515541524520524f4f54204f46203220495320312e0000000000006020830152565b604051906108b5606083610556565b60328252710e0c0dce0d4d8e4d8dcc4e0dcd4ccdcd8e4d60721b6040837f343134323133353632333733303935303438383031363838373234323039363960208201520152565b634e487b7160e01b600052601160045260246000fd5b600181901b91906001600160ff1b0381160361092a57565b6108fc565b90602d820291808304602d149015171561092a57565b90600a820291808304600a149015171561092a57565b9060038202918083046003149015171561092a57565b908160190291601983040361092a57565b908160031b918083046008149015171561092a57565b90611f25820291808304611f25149015171561092a57565b90610537820291808304610537149015171561092a57565b908160021b918083046004149015171561092a57565b908160011b918083046002149015171561092a57565b9060288202918083046028149015171561092a57565b8181029291811591840414171561092a57565b906007820180921161092a57565b906001820180921161092a57565b603001908160301161092a57565b600401908160041161092a57565b906002820180921161092a57565b906005820180921161092a57565b90600a820180921161092a57565b906003820180921161092a57565b9190820180921161092a57565b90610aad6020928281519485920161010c565b0190565b610aba81611afb565b610ba9610c58610ad2610acc86610912565b84610a8d565b610c4a610c21610bde610bc3610bb6610af3610aed87611b87565b96611b87565b610ba3604051998a98610ba3610b89610b4260208d016026907f3c3f786d6c2076657273696f6e3d22312e302220656e636f64696e673d22555481526523169c111f9f60d11b60208201520190565b7f3c73766720786d6c6e733d22687474703a2f2f7777772e77332e6f72672f3230815274181817b9bb3391103b32b939b4b7b71e911897189160591b602082015260350190565b6d0103b34b2bba137bc1e91181018160951b8152600e0190565b90610a9a565b600160fd1b815260010190565b601160f91b815260010190565b6e1039ba3937b5b29e913737b732911f60891b8152600f0190565b7f3c726563742077696474683d223130302522206865696768743d223130302522815270103334b6361e9111a3232323232311179f60791b602082015260310190565b7f3c706174682066696c6c3d22233030303030302220643d220000000000000000815260180190565b03601f198101835282610556565b9260005b828110610c995750505050610c96610c8191610c4a6040519384926020840190610a9a565b6811179f1e17b9bb339f60b91b815260090190565b90565b60005b838110610cac5750600101610c5c565b610cb7828287611c39565b610cc4575b600101610c9c565b94610d0d610d3b600192610c4a610d27610ce6610ce1898d610a8d565b611b87565b610ba3610d1a610cf9610ce18c8c610a8d565b92610ba3604051998a9860208a0190610a9a565b604d60f81b815260010190565b600b60fa1b815260010190565b673418bb18b41698bd60c11b815260080190565b959050610cbc565b805115610dde57610d526107bf565b90610d5c81611cc8565b15610d905760036028600182610c9695610d768396611660565b610d7f82610826565b52610d8981610826565b505b6119c7565b610d9981611d14565b15610db35760036028600182610c9695610d76839661149c565b610dbc90611316565b81511561029d57600360286001828582956020610c96980152610d8981610826565b50610c966001600360288282610d8b610785565b805115610e7357610e016107bf565b90610e0b81611cc8565b15610e255760ff6028600180610c9695610d768296611660565b610e2e81611d14565b15610e485760ff6028600180610c9695610d76829661149c565b610e5190611316565b81511561029d5760ff60286001808581956020610c96980152610d8981610826565b50610c96600160ff60288280610d8b610785565b805115610f0b57610e966107bf565b90610ea081611cc8565b15610ebb576002602860016000610c9695610d768396611660565b610ec481611d14565b15610edf576002602860016000610c9695610d76839661149c565b610ee890611316565b81511561029d5760026028600160008582956020610c96980152610d8981610826565b50610c96600160026028826000610d8b610785565b805115610fa457610f2f6107bf565b90610f3981611cc8565b15610f545760ff602860016003610c9695610d768396611660565b610f5d81611d14565b15610f785760ff602860016003610c9695610d76839661149c565b610f8190611316565b81511561029d5760ff6028600160038582956020610c96980152610d8981610826565b50610c96600160ff6028826003610d8b610785565b80511561103d57610fc86107bf565b90610fd281611cc8565b15610fed576000602860016003610c9695610d768396611660565b610ff681611d14565b15611011576000602860016003610c9695610d76839661149c565b61101a90611316565b81511561029d5760006028600160038582956020610c96980152610d8981610826565b50610c96600160006028826003610d8b610785565b8051156110d6576110616107bf565b9061106b81611cc8565b156110865760ff602860016000610c9695610d768396611660565b61108f81611d14565b156110aa5760ff602860016000610c9695610d76839661149c565b6110b390611316565b81511561029d5760ff6028600160008582956020610c96980152610d8981610826565b50610c96600160ff6028826000610d8b610785565b80511561116f576110fa6107bf565b9061110481611cc8565b1561111f5760026005806003610c9695610d76600096611660565b61112881611d14565b156111435760026005806003610c9695610d7660009661149c565b61114c90611316565b81511561029d5760026005806003856000956020610c96980152610d8981610826565b50610c96600060026005806003610d8b610785565b805115611205576111936107bf565b9061119d81611cc8565b156111b75760036028600180610c9695610d768296611660565b6111c081611d14565b156111da5760036028600180610c9695610d76829661149c565b6111e390611316565b81511561029d57600360286001808581956020610c96980152610d8981610826565b50610c966001600360288280610d8b610785565b6040805190919061122a8382610556565b6001815291601f1901366020840137565b906112458261057d565b6112526040519182610556565b8281528092611263601f199161057d565b0190602036910137565b61127561070e565b906007825260006020830152611289611219565b60006007601a825b808312156112a85750505060608401526040830152565b9091926112c16112c791600185871c166112ce5761148d565b93611d56565b9190611291565b8060031c6113106112e160078416611d68565b60ff60016112ef858d61141b565b8260f81b90511660f81c921b1660ff60f81b911760f81b16861a918961141b565b5361148d565b9061131f61070e565b9161132a81516120db565b600160ff1b811461134c57600484528151602085015260608401526040830152565b60405162461bcd60e51b815260206004820152601d60248201527f5152436f64653a2062797465207365676d656e7420746f6f206c6f6e670000006044820152606490fd5b6001610c96916118ba565b156113a357565b60405162461bcd60e51b815260206004820152602560248201527f5152436f64653a20616c7068616e756d65726963207365676d656e7420746f6f604482015264206c6f6e6760d81b6064820152608490fd5b634e487b7160e01b600052601260045260246000fd5b8115611416570490565b6113f6565b90815181101561029d570160200190565b1561143357565b60405162461bcd60e51b815260206004820152602c60248201527f5152436f64653a20696e76616c6964206368617220696e20616c7068616e756d60448201526b195c9a58c81cd959db595b9d60a21b6064820152608490fd5b600019811461092a5760010190565b906114a561070e565b918051906114b28261211e565b906114c3600160ff1b83141561139c565b600285528260208601526114ef6114ea6114e4606088019460008652610a1d565b60031c90565b61123b565b92600091829183915b81831061152657505050611510575b50506040830152565b61151d9083835191611ede565b90523880611507565b9091929361157461156a61156f61157a9361156361155e61155861154a8b8a61141b565b516001600160f81b03191690565b60f81c90565b6121aa565b939061142c565b61092f565b610a8d565b9461148d565b926002841461158e575b60010191906114f8565b92509261159e9086865191611e35565b84526000928392611584565b156115b157565b606460405162461bcd60e51b815260206004820152602060248201527f5152436f64653a206e756d65726963207365676d656e7420746f6f206c6f6e676044820152fd5b156115fc57565b60405162461bcd60e51b8152602060048201526024808201527f5152436f64653a206e6f6e2d646967697420696e206e756d65726963207365676044820152631b595b9d60e21b6064820152608490fd5b60ff602f199116019060ff821161092a57565b9061166961070e565b91805161167581612164565b90611686600160ff1b8314156115aa565b600185528060208601526116a76114ea6114e4606088019460008652610a1d565b92600090819282915b8183106116f35750505083826116cc575b505050506040830152565b6116e06116db6116e89461095b565b610a2b565b84519261201f565b9052388080836116c1565b9091939261174861174e9161174261173c61173661171761155861154a8c8a61141b565b9361173160ff86166030811015908161177f575b506115f5565b610945565b9261164d565b60ff1690565b90610a8d565b9361148d565b9360038514611762575b60010191906116b0565b9350916117729086865191611eab565b8452600092839290611758565b6039915011153861172b565b61179a60286001600084612274565b90911561188d5760016117af918360006122f9565b60ff8216916103fc8160021b16928084046004148115171561092a576011840180941161092a5783916117e2839261245a565b81858180826117f08661123b565b9b6117fb8d9761123b565b9c8d966118079261249c565b916118129287612576565b5061181c93612610565b61182582612354565b95828794926118348694612354565b926118408584846126d6565b848361184b8461281f565b60031c611857936128af565b8282611864868483612a01565b61186d926126d6565b61187992600092612ea6565b600061188493612f3c565b610c96916130bd565b505050610c96611219565b6118a6602860018084612274565b90911561188d5760016117af9183826122f9565b906118c9602860018385612274565b91929092156119bb576118df91836001926122f9565b60ff8216916103fc8160021b16928084046004148115171561092a576011840180941161092a5761190f9061245a565b818381808261191d8661123b565b996119288b9761123b565b9a8b966119349261249c565b9161193f9287612576565b5061194993612610565b828061195481612354565b8096819461196184612354565b9161196d8486846126d6565b83856119788461281f565b60031c611984936128af565b8184611991858483612a01565b61199a926126d6565b6119a686848484612cda565b926119b2928492612ea6565b61188493612f3c565b50505050610c96611219565b93926119d591928386612274565b90959115611aed57856119e7936122f9565b91819360ff81166103fc8260021b16958187046004148215171561092a576011870180971161092a578695611a1c879361245a565b8482818082611a2a8661123b565b9a611a358c9761123b565b9b8c96611a419261249c565b91611a4c9287612576565b50611a5693612610565b611a5f83612354565b9788968795611a6d83612354565b97611a798885846126d6565b8784611a848461281f565b60031c611a90936128af565b8783611a9d898483612a01565b611aa6926126d6565b60ff1660ff1498611acb96610c969a611ad0575b918491611ac693612ea6565b612f3c565b6130bd565b90935081611ae384611ac6948785612cda565b9491909250611aba565b505050505050610c96611219565b80511580159081611b64575b5015611b2657611b1860ff91610826565b8160f81b90511660f81c1690565b60405162461bcd60e51b81526020600482015260166024820152755152436f64653a20696e76616c6964207172636f646560501b6044820152606490fd5b905061029d57602081015160f81c151538611b07565b801561092a576000190190565b908115611c1857600082805b611bf9575080611ba3849261123b565b915b611bae57509150565b611bba611bf291611b7a565b93611bdd611bcd61173c600a8406610a39565b60f81b6001600160f81b03191690565b60001a611bea868561141b565b53600a900490565b9283611ba5565b9290611c07611c0f9161148d565b93600a900490565b80939193611b93565b9050604051611c28604082610556565b60018152600360fc1b602082015290565b909181511561029d576020820190815160f81c80851090811591611cbd575b50611cb45782511561029d57611c72915160f81c90610a0a565b91820180921161092a57816007611ca161155861154a611cae95611c9b6116db60019960031c90565b9061141b565b911660ff809216901c1690565b16151590565b50505050600090565b905081101538611c58565b60005b8151811015611d0d57611cde818361141b565b5160f81c60308110908115611d02575b50611cfb57600101611ccb565b5050600090565b603991501138611cee565b5050600190565b60005b8151811015611d0d57611d36611d2d828461141b565b5160f81c6121aa565b5015611cfb57600101611d17565b90600319820191821360011661092a57565b600160ff1b811461092a576000190190565b600703906007821161092a57565b60001981019190821161092a57565b600803906008821161092a57565b60071981019190821161092a57565b60011981019190821161092a57565b600a1981019190821161092a57565b60091981019190821161092a57565b60361981019190821161092a57565b60231981019190821161092a57565b60061981019190821161092a57565b600e0390600e821161092a57565b600e1981019190821161092a57565b60031981019190821161092a57565b9190820391821161092a57565b600a915b6000831215611e485750505090565b9091926112c1611e6191600185871c16611e685761148d565b9190611e39565b8060031c611310611e7b60078416611d68565b60ff6001611e89858a61141b565b8260f81b90511660f81c921b1660ff60f81b911760f81b1660001a918661141b565b6009915b6000831215611ebe5750505090565b9091926112c1611ed791600185871c16611e685761148d565b9190611eaf565b6005915b6000831215611ef15750505090565b9091926112c1611f0a91600185871c16611e685761148d565b9190611ee2565b6003915b6000831215611f245750505090565b9091926112c1611f3d91600185871c16611e685761148d565b9190611f15565b6000915b6000831215611f575750505090565b9091926112c1611f7091600185871c16611f775761148d565b9190611f48565b8060031c611310611f8a60078416611d68565b60ff600181611f99868b61141b565b5160f81c16921b1660ff60f81b911760f81b1660001a918661141b565b60001981019150811360011661092a575b6000811215611fd4575090565b90611fe1611fe79161148d565b91611d56565b611fc7565b6007915b6000831215611fff5750505090565b9091926112c161201891600185871c16611e685761148d565b9190611ff0565b9190600019810190811360011661092a5791905b60008312156120425750505090565b9091926112c161205b91600185871c166120625761148d565b9190612033565b8060031c6113106120a461207860078516611d68565b6120936001612087868b61141b565b5160f81c921b60ff1690565b1760f81b6001600160f81b03191690565b60001a918661141b565b908160030191821260011661092a57565b9190916000838201938412911290801582169115161761092a57565b6000617fff821161211357506000908060031b91508082056008149015171561092a57617fff811361210a5790565b50600160ff1b90565b50600160ff1b919050565b617fff811161210a57600b810290808205600b149015171561092a576001810190600060018312911290801582169115161761092a5760029005617fff811361210a5790565b617fff811161210a57600a810290808205600a149015171561092a576002810190600060028312911290801582169115161761092a5760039005617fff811361210a5790565b60ff16602081108015612259575b61225057604051906121cb606083610556565b603b82527f250000002627000000002829002a2b2c0102030405060708090a2d000000000060208301527e0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232400000000006040830152601f190160ff811161092a5761155861154a60ff938461223b94169061141b565b1680156122505761224b90611d76565b600191565b50600090600090565b50605a81116121b8565b60ff1660ff811461092a5760010190565b9092915b612282848261237c565b8060031b908082046008149015171561092a5761229f82846123bb565b90600082121590816122ee575b506122e2575060ff831660ff821610156122d3576122cc61228291612263565b9050612278565b50505050600090600090600090565b60019591945092509050565b9050811115386122ac565b921561234f5760015b600360ff821611156123145750505090565b61231e818361237c565b8060031b908082046008149015171561092a57831115612347575b61234290612263565b612302565b925082612339565b505090565b9061235e826106f6565b61236b6040519182610556565b8281528092611263601f19916106f6565b9060ff806123a061238c8561281f565b60031c9461239a8186613242565b946133e5565b1691160260ff811690810361092a57810390811161092a5790565b600090815b8151831015612453576123e18460ff6123d98686610833565b515116613499565b9060206123ee8585610833565b5101516001831b11156124455761241f61240a61242593610a47565b60606124168787610833565b51015190610a8d565b906120bf565b91617fff831361243857600101916123c0565b50600160ff1b9392505050565b50600160ff1b949350505050565b9250505090565b8060021b908082046004149015171561092a576011810180911161092a5761248460009180610a0a565b6007810180911161092a57610c96915060031c610a2b565b91909260009160005b845181101561256e576124f76124d76124c18388969998610833565b5195846124d261173c895160ff1690565b611f11565b8360208701516124f1896124ec8a5160ff1690565b613499565b9061201f565b946000966040606087019601965b865189101561255e57612556600191866125518461254a8e61253f8f61253861155861154a60079351611c9b8760031c90565b9216611d68565b60ff809216901c1690565b1660ff1690565b611f44565b980197612505565b91975093955093506001016124a5565b505091509150565b9192612582919361237c565b918260031b928084046008149015171561092a5780830383811161092a576125d291838260046125b794911161260857611fb6565b826125cd6125c760078416611d85565b60071690565b611fb6565b9160ec5b8184106125e35750505090565b6125f460ff60ec9216948486611fec565b93036126015760116125d6565b60ec6125d6565b506004611fb6565b9260ff61261d83856133e5565b169161264260ff61262e8387613242565b16946126398361281f565b60031c9261237c565b9280156114165780820681039181831161092a5785612664836126699361140c565b611e28565b92612673866135d3565b60009690875b84891061268c5750505050505050505050565b6126c38160019261156f8b8b8f8f8c908c8f938c8e918685106000146126cb576126bb60ff60005b1689610a8d565b9b8c916136d3565b980197612679565b6126bb60ff8f6126b4565b9190916126e382846137a1565b6126ed82846137d3565b6126f682613819565b6127088261270385611d93565b61384b565b61271a8261271585611d93565b613881565b6127238161394e565b60005b8181106127655750505060ff600791161015612740575050565b61275e826127598361275461276396611db1565b6138eb565b611db1565b613921565b565b801560005b83811061277b575050600101612726565b806001918887868680612817575b80156127fe575b80156127e4575b6127db576127c461173c61155861154a6127d5976127c96127c461173c61155861154a6127cf9a8c61141b565b611da2565b9661141b565b906138af565b0161276a565b505050506127d5565b506127ee89611d76565b8114801561279757508315612797565b50868015612790575061281089611d76565b8414612790565b508315612789565b60ff81169060041b610ff0166080810180911161092a578161284091610a0a565b906040820180921161092a5781600282101561285b57505090565b90915060079061289c9061289661289161287b858704610a55565b610a55565b61288c61288782610971565b611dc0565b610a0a565b611dcf565b90611e28565b9110156128a65790565b610c9690611dde565b9190916000906128be83611d76565b60018110156128d0575b505050505050565b600681146129d4575b60005b8481106128ff5750600281106128fa576128f590611da2565b6128be565b6128c8565b60009691965b6002811061291957506001019590956128dc565b6129238189611e28565b600261292e8a610a2b565b166129ce576129408361266489611d76565b61295261294e828488613a3c565b1590565b806129bd575b612967575b5050600101612905565b956129b06129b592600194986129a961298f61155861154a6129898860031c90565b8d61141b565b60ff61299d60078816611d68565b91166001911c16151590565b9188613bc4565b61148d565b94903861295d565b506129c789610982565b8710612958565b82612940565b5060056128d9565b6001600160ff1b03811461092a5760010190565b600160ff1b811461092a5760000390565b92909260075b612a1082611ded565b811015612a345780612a25612a2f9286613bf0565b6128768186613c02565b612a07565b5090926003195b6004811315612c0b5750612a4e8161394e565b60005b818110612b005750505060ff166007811015612a6c57505050565b8060005b600c8110612adf5750600c1b1760005b60068110612a8e5750505050565b60005b60038110612aa25750600101612a80565b91612ad8600191612ad2612ab98661156f89611db1565b848316151590612acb8288838d613bc4565b868a613bc4565b60011c90565b9201612a91565b91600190612af8612af382841b92600b1c90565b610998565b189201612a70565b801560005b838110612b16575050600101612a51565b8180612c03575b8015612bea575b8015612bd0575b612bc8576000195b6001811315612b4757506001905b01612b05565b6000195b898784876001851315612b6b575050505050612b66906129dc565b612b33565b91612ba786612b9c61173c61155861154a8a9997612ba1612bba9c612b9c61173c61155861154a612bb59f8e61141b565b6120bf565b9761141b565b9084159283612bbf57613bc4565b6129dc565b612b4b565b87159350613bc4565b600190612b41565b50612bda84611d76565b83148015612b2b57508015612b2b565b50818015612b245750612bfc84611d76565b8114612b24565b508015612b1d565b600081126003195b6004811315612c2c575050612c27906129dc565b612a3b565b612c71906000811215612cd457612c42816129f0565b8315612cce57612c51856129f0565b80821315612cc757505b60028114908115612cbc575b50612c76576129dc565b612c13565b612c93612c82826120ae565b612c8b866120ae565b90888a613c2c565b612ca3612c8282612b9c89611d44565b612bb5612caf826120ae565b612c8b86612b9c8a611d44565b600491501438612c67565b9050612c5b565b84612c51565b80612c42565b600094936000199390929091865b600860ff821610612cfb57505050505050565b612d0781858585612ea6565b612d1383858388612f3c565b6000612d216001861b611d76565b6001861115612ea057612d3e6001612d3888611d76565b1b611d76565b915b9160005b878110612e7c575060005b878110612e635750600090815b888110612e43575060009283916000198a01905b818410612dee5750505050600a60039160148980029102828202808211600114612de757035b600091908101600019010480612ddb575b500291020101868110612dce575b50600181612dc760ff93878787612ea6565b0116612ce8565b9097509450866001612db5565b60001901905038612da7565b9003612d96565b90919294600190612e38838c87602081818d60051b850101511692878d0160051b0101511690888119168983191680881c169080881c16169180871c169080871c16161716613cbf565b019501929190612d70565b91600190612e5b8560208660051b8c01015116613cbf565b019201612d5c565b92612e756001916117428a878b614693565b9301612d4f565b92612e996001916117428a86612e92898d610833565b51166145c2565b9301612d44565b81612d40565b929091926001841b91600019830192831161092a5760005b858110612ecd57505050505050565b8084612edb60019385613d09565b612ee58387610833565b51191616612ef38288610833565b5118612eff8288610833565b5201612ebe565b604051906080612f168184610556565b368337565b6040519060e0612f168184610556565b90600481101561029d5760051b0190565b612f86612f8061173c612f7960ff949897969885612f58612f06565b60018152600060208201526003604082015291600260608401521690612f2b565b5160ff1690565b60031b90565b9116178060005b600a811061309c5750600a1b176154121860005b60058111156130815750612fbe600682901c600116151583613a8d565b612fd1600782901c600116151583613ad8565b612fe4600882901c600116151583613b25565b60095b600f811061306c575060005b60088110613044575060085b600f811061301c5750506130166127639293611d93565b90613bb2565b8061303e61302f60019361156f89611e0a565b84831c60011615159086613a51565b01612fff565b8061306661305760019361266489611d76565b84831c60011615159086613b70565b01612ff3565b8061307b613057600193611dfc565b01612fe7565b613097906129b083821c60011615158286613a51565b612fa1565b916001906130b56130b082841b9260091c90565b6109b0565b189201612f8d565b91906130da6114ea6116db6114e46130d58580610a0a565b610a1d565b9260f882901b6001600160f81b03191660001a6130f685610826565b5360005b82811061310657505050565b60208160051b830101518382029060005b858110613129575050506001016130fa565b8060018381931c1661313c575b01613117565b80840182600760218360031c8d010192161b815160001a179053613136565b6040519061316a606083610556565b602982527fff0a101a1218101216161a1e161618181c1c1a1a1a1a1c1c1c1c1c1c1c1c1c1c60208301526807070707070707070760ba1b6040830152565b604051906131b7606083610556565b602982527fff0d16121a1218121614181c1a18141e181c1c1a1e1c1e1e1e1e1c1e1e1e1e1e6020830152680f0f0f0f0f0f0f0f0f60b91b6040830152565b60405190613204606083610556565b602982527fff111c1610161c1a1a181c181c1618181e1c1c1a1c1e181e1e1e1e1e1e1e1e1e6020830152680f0f0f0f0f0f0f0f0f60b91b6040830152565b60ff16801561329f576001811461328a576002146132765761155861154a610c969260ff61326e6131f5565b91169061141b565b61155861154a610c969260ff61326e6131a8565b5061155861154a610c969260ff61326e61315b565b5061155861154a610c969260ff604051916132bb606084610556565b602983527fff070a0f141a1214181e1214181a1e16181c1e1c1c1c1c1e1e1a1c1e1e1e1e1e6020840152680f0f0f0f0f0f0f0f0f60b91b6040840152169061141b565b6040519061330d606083610556565b602982526821232526282b2d2f3160b81b6040837fff01010102020404040505050809090a0a0b0d0e10111112141517191a1c1d1f60208201520152565b6040519061335a606083610556565b60298252680b4c0ccd4e0ecf905160ba1b6040837fff01010202040406060808080a0c100c11101215141717191b1d22222326282b60208201520152565b604051906133a7606083610556565b602982526836393c3f42464a4d5160b81b6040837fff010102040404050608080b0b101012101315191919221e202325282a2d303360208201520152565b60ff16801561343a5760018114613425576002146134115761155861154a610c969260ff61326e613398565b61155861154a610c969260ff61326e61334b565b5061155861154a610c969260ff61326e6132fe565b5061155861154a610c969260ff60405191613456606084610556565b602983527fff01010101010202020204040404040606060607080809090a0c0c0c0d0e0f1060208401526811121313141516181960b81b6040840152169061141b565b906134b16134aa60ff809316610a1d565b6011900490565b911660018114613569576002811461354b576004811461353b576008811461351d5760079150146135185760405162461bcd60e51b81526020600482015260146024820152735152436f64653a20696e76616c6964206d6f646560601b6044820152606490fd5b600090565b5080156135355760011461353057600c90565b600a90565b50600890565b501561354657601090565b600890565b5080156135635760011461355e57600d90565b600b90565b50600990565b5080156135815760011461357c57600e90565b600c90565b50600a90565b1561358e57565b60405162461bcd60e51b815260206004820152601e60248201527f5152436f64653a20525320646567726565206f7574206f662072616e676500006044820152606490fd5b906001821015806136c8575b6135e890613587565b6135f18261123b565b91600161360661360083611d76565b8561141b565b53600060015b82821061361857505050565b60005b838110613636575061362e6001916143d9565b91019061360c565b80613655611bcd8461365061155861154a6001978d61141b565b614456565b60001a613662828961141b565b538461366d82610a2b565b10613679575b0161361b565b6136b561368c61155861154a848b61141b565b6136a461155861154a61369e86610a2b565b8c61141b565b1860f81b6001600160f81b03191690565b60001a6136c2828961141b565b53613673565b50601e8211156135df565b919399979498928a6136e7918684866144c2565b9460005b8581106137475750505050505060005b86811061370b5750505050505050565b8061371b61154a6001938561141b565b61374061373561372b878a610a8d565b6117428986610a0a565b9160001a918961141b565b53016136fb565b808b61378b61376161375b8d600196610a0a565b8c610a8d565b8589851015613792575b5061378261154a61377c868a610a8d565b8a61141b565b60001a9261141b565b53016136eb565b61379b91611e28565b8561376b565b9060005b8281106137b157505050565b8060406137c060019385610833565b51176137cc8285610833565b52016137a5565b6001901b90600019820191821161092a5760005b600181106137f457505050565b80600191600601613812856138098387610833565b51179185610833565b52016137e7565b60005b60098110613828575050565b806101ff61383860019385610833565b51176138448285610833565b520161381c565b60ff901b9060005b6009811061386057505050565b808361386e60019385610833565b511761387a8285610833565b5201613853565b9060005b6008811061389257505050565b8060019184016138a86101ff6138098387610833565b5201613885565b601f909291921b60005b600581106138c75750505050565b8060019185016138e4846138db8388610833565b51179186610833565b52016138b9565b6007901b9060005b6006811061390057505050565b808361390e60019385610833565b511761391a8285610833565b52016138f3565b9060005b6003811061393257505050565b806001918401613947603f6138098387610833565b5201613925565b60408051919061395e8184610556565b60078352601f190136602084013760ff16908060018314613a3357509161398760078304610a55565b926139d86139d36139cd6139c86139b16139ac6139a389610982565b6117428b61095b565b610a63565b6139c26139bd8a6109c8565b611e19565b9061140c565b6109de565b946109c8565b610a71565b936139e281611d76565b60f886901b6001600160f81b03191660001a6139fe828561141b565b5360018114613a205784613a14613a1a92611b7a565b96611e28565b946139e2565b50925092506006613a3084610826565b53565b91505090600090565b600192613a4891610833565b51901c16151590565b9115613a735780610100613a68613a709385610833565b511792610833565b52565b613a709061010019613a858285610833565b511692610833565b9015613ab25780516007101561029d57610100818101511790613a7090600790610833565b80516007101561029d5761010081018051915161010019909216916007101561029d5752565b9015613aff5780516008101561029d576101208101516101001790613a7090600890610833565b80516008101561029d5761012081018051915161010019909216916008101561029d5752565b9015613b4b5780516008101561029d5761012081015160801790613a7090600890610833565b80516008101561029d57610120810180519151608019909216916008101561029d5752565b9115613b895760086001613a70921b613a688285610833565b81516008101561029d5760016020600860051b840101911b1981511691516008101561029d5752565b90613a7090610100613a688285610833565b9290919015613bde576001613a70921b613a688285610833565b6001613a70921b19613a858285610833565b90613a7090604019613a858285610833565b9081516006101561029d5760016020600660051b840101911b1981511691516006101561029d5752565b91929060008412159081613c73575b81613c67575b81613c5d575b50613c5157505050565b61276392600092613bc4565b9050811238613c47565b60008312159150613c41565b8085129150613c3b565b670f0f0f0f0f0f0f0f670101010101010101916755555555555555558160011c169003673333333333333333808260021c169116018060041c01160260381c90565b613ccb8160c01c613c7d565b613ce167ffffffffffffffff8360801c16613c7d565b0190613d0467ffffffffffffffff613cfd818460401c16613c7d565b9216613c7d565b010190565b60ff1690811561410a57600182146140f957600282146140d357600382146140545760048214614025576001811690600390069160058114613fa457600614613e875780158080613e7f575b613e6a578080613e60575b613e395780613e2f575b613e0957600114908180613e01575b613ddb5781613dd0575b50613dac577fe38e38e38e38e38e38e38e38e38e38e38e38e38e38e38e38e38e38e38e38e38e90565b7f8e38e38e38e38e38e38e38e38e38e38e38e38e38e38e38e38e38e38e38e38e3890565b600191501438613d83565b50507faaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa90565b508015613d79565b50507f1c71c71c71c71c71c71c71c71c71c71c71c71c71c71c71c71c71c71c71c71c7190565b5060028214613d6a565b5050507f71c71c71c71c71c71c71c71c71c71c71c71c71c71c71c71c71c71c71c71c71c790565b5060018314613d60565b5050506000805160206148d983398151915290565b508215613d55565b80158080613f9c575b613f93578080613f89575b613f625780613f58575b613f3257600114908180613f2a575b613f165781613f0b575b50613ee7577f1c71c71c71c71c71c71c71c71c71c71c71c71c71c71c71c71c71c71c71c71c7190565b7f71c71c71c71c71c71c71c71c71c71c71c71c71c71c71c71c71c71c71c71c71c790565b600191501438613ebe565b50506000805160206148d983398151915290565b508015613eb4565b50507fb6db6db6db6db6db6db6db6db6db6db6db6db6db6db6db6db6db6db6db6db6db90565b5060028214613ea5565b5050507fdb6db6db6db6db6db6db6db6db6db6db6db6db6db6db6db6db6db6db6db6db6d90565b5060018314613e9b565b50505060001990565b508215613e90565b5015808061401d575b61401557613ff05715613fde577f104104104104104104104104104104104104104104104104104104104104104190565b6000805160206148d983398151915290565b507f924924924924924924924924924924924924924924924924924924924924924990565b505060001990565b508115613fad565b60019150811c16613dac577f71c71c71c71c71c71c71c71c71c71c71c71c71c71c71c71c71c71c71c71c71c790565b6003900690508061408457507f924924924924924924924924924924924924924924924924924924924924924990565b6001036140af577f492492492492492492492492492492492492492492492492492492492492492490565b7f249249249249249249249249249249249249249249249249249249249249249290565b50507f924924924924924924924924924924924924924924924924924924924924924990565b600116151590506135185760001990565b60011615159050614127576000805160206148d983398151915290565b7faaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa90565b6040519061415b61012083610556565b61010082527fcb595fb09ca9a0510bf516eb7a752cd74faed5e9e6e7ade874d6f4eaa85058af610100837d011902321ac603df33ee1b68c74b0464e00e348def811cc169f8c8084c7160208201527f058a652fe1240f2135938edaf01282451db5c27d6a27f9b9c99a09784de472a660408201527f06bf8b6266dd30fde29825b31091228836d094ce8f96dbbdf1d2135c8338464060608201527f1e42b6a3c3487e6e6b3a2854fa85ba3dca5e9b9f0a15792b4ed4e5ac73f3a75760808201527f0770c0f78c80630d674adeed31c5fe18e3a5997726b8b47c114492d92320892e60a08201527f373fd15b95bccfcd908797b2dcfcbe61f256d3ab142a5d9e843c3953476d41a260c08201527f1f2d43d8b77ba476c41749ec7f0c6ff66ca13b52299d55aafb6086b1bbcc3e5a60e08201520152565b604051906142a161012083610556565b61010082527f122448903d7af4f5f7f3fbebcb8b0b162c58b07dfae9cf831b366cd8ad478e01610100837f01020408102040801d3a74e8cd8713264c982d5ab475eac98f03060c183060c060208201527f9d274e9c254a94356ad4b577eec19f23468c050a142850a05dba69d2b96fdea160408201527f5fbe61c2992f5ebc65ca890f1e3c78f0fde7d3bb6bd6b17ffee1dfa35bb671e260608201527fd9af4386112244880d1a3468d0bd67ce811f3e7cf8edc7933b76ecc5973366cc60808201527f85172e5cb86ddaa94f9e214284152a54a84d9a2952a455aa49923972e4d5b77360a08201527fe6d1bf63c6913f7efce5d7b37bf6f1ffe3dbab4b963162c495376edca557ae4160c08201527f82193264c88d070e1c3870e0dda753a651a259b279f2f9efc39b2b56ac458a0960e08201520152565b60ff168015801561444e575b614448576143fa906143f561414b565b61141b565b5160f81c61440661414b565b9081516002101561029d5761154a6115589160ff6022610c9695018160f81b90511660f81c160160ff81101561443f575b6143f5614291565b60fe1901614437565b50600090565b5060006143e5565b60ff16801580156144b7575b611cfb57610c969160ff61447b6144b0936143f561414b565b5160f81c9161449861448b61414b565b838060f81b93169061141b565b511660f81c160160ff81101561443f576143f5614291565b5160f81c90565b5060ff821615614462565b949392946144cf8461123b565b956144d8614291565b9060206144e361414b565b94818a019401019260005b8681106144ff575050505050505050565b6001825160001a865160001a1895019460001989018b60005b8281106145a85750600091508a01601f015360005b89811061453e5750506001016144ee565b808c60206001938801015160001a82858c818402614562575b50505050500161452d565b60208094928180948401015160001a9201015160001a0160fe811161459f575b8b01015160001a92010190815160001a1890538c3882858c614557565b60fe1901614582565b80600192016020602182015160001a910153018c90614518565b60009291836145cf612f1b565b94809381905b8482106145f657505091610c9694956145f192611742946148a1565b6109f4565b90949281861c60011615158315898115830361465b575050506146189061148d565b92600584036146355761462c600191610a7f565b955b01906145d5565b9460058411614647575b60019061462e565b9461465360019161148d565b95905061463f565b61466d9294955087919398969861476d565b61467c575b906001809361462e565b9361468d906117426145f1896147be565b93614672565b92916000806146a0612f1b565b95600182951b9082915b8583106146c75750505091610c9694956145f192611742946148a1565b90919593816146d68885610833565b5116151584158a81158303614735575050506146f19061148d565b936005850361470f57614705600191610a7f565b965b0191906146aa565b9560058511614721575b600190614707565b9561472d60019161148d565b969050614719565b6147479294965088919399979961476d565b614756575b9160018094614707565b94614767906117426145f18a6147be565b9461474c565b90918251156147af575b509060a08101805160c08301526080820190815190526060820190815190526040820190815190526020820190815190528151905252565b810180911161092a5738614777565b60208101518015159081614893575b8161487c575b8161486e575b81614860575b600092828061484d575b8061483f575b614836575b8261481e575b82614812575b50506148095790565b610c969061148d565b51101590503880614800565b915060c082015161482e826109c8565b1115916147fa565b600193506147f4565b508160c082015110156147ef565b508051614859836109c8565b11156147e9565b60a0830151811491506147df565b6080830151811491506147d9565b9050606082015161488c8261095b565b14906147d3565b6040830151811491506147cd565b8284916148c6575b50810180911161092a57610c9692826148c19261476d565b6147be565b6148cf9261476d565b600082826148a956fe5555555555555555555555555555555555555555555555555555555555555555a2646970667358221220a2ab092f927a5c9c8602049f4de81c27d044d7e87118f9061175de3f9a165b5564736f6c63430008220033","deployedBytecode":"0x6080604052600436101561001257600080fd5b60003560e01c80631fee786b1461010757806328cbf77d146101025780633ced44b5146100fd5780637d24d9b7146100f85780638d042b1a146100f35780638fca6de6146100ee578063913583f2146100e9578063ae324b5d146100e4578063b66bb332146100df578063bb20f6be146100da578063cf68df27146100d5578063da4b5c89146100d0578063e0b41de5146100cb578063e660ad3f146100c65763fb0f4bf3146100c157600080fd5b610599565b6104f5565b610490565b610425565b610401565b6103ad565b610389565b610365565b6102f3565b6102a2565b610233565b61020f565b6101eb565b6101bb565b61015a565b60005b83811061011f5750506000910152565b818101518382015260200161010f565b9060208092818152019061014e8151809281855285808601910161010c565b601f01601f1916010190565b346101b65760003660031901126101b6576101b260406101a7815161017f8382610556565b601681527568747470733a2f2f7777772e6e6179756b692e696f2f60501b6020820152610d43565b90519182918261012f565b0390f35b600080fd5b346101b65760003660031901126101b6576101b26101df6101da610613565b610df2565b6040519182918261012f565b346101b65760003660031901126101b6576101b26101df61020a61066a565b610e87565b346101b65760003660031901126101b6576101b26101df61022e610695565b610f20565b346101b65760003660031901126101b65761024c610744565b61025461126d565b81511561029d57602082015280511561029d57610277610272610847565b611316565b81516001101561029d57816101df9160406101b294015261029781610816565b50611391565b610800565b346101b65760003660031901126101b6576102bb61066a565b6102cc6102c66107bf565b91611316565b81511561029d57602082015280511561029d576101df600160ff602882806101b2966119c7565b346101b65760003660031901126101b65761030c610744565b61031c61031761086b565b61149c565b81511561029d57602082015280511561029d5761033f61033a6108a6565b611660565b81516001101561029d57816101df9160406101b294015261035f81610816565b5061178b565b346101b65760003660031901126101b6576101b26101df610384610695565b610fb9565b346101b65760003660031901126101b6576101b26101df6103a861066a565b611052565b346101b65760003660031901126101b6576101b260406101a781516103d28382610556565b601c81527f333134313539323635333538393739333233383436323634333338330000000060208201526110eb565b346101b65760003660031901126101b6576101b26101df610420610613565b611184565b346101b65760003660031901126101b65761043e610744565b61044961031761086b565b81511561029d57602082015280511561029d5761046761033a6108a6565b9080516001101561029d576000816101b29360406101df94015261048a81610816565b506118ba565b346101b65760003660031901126101b6576104a9610744565b6104b161126d565b81511561029d57602082015280511561029d576104cf610272610847565b81516001101561029d57816101df9160406101b29401526104ef81610816565b50611898565b346101b65760003660031901126101b65761050e61066a565b6105196102c66107bf565b81511561029d57602082015280511561029d576101df60016000602882806101b2966119c7565b634e487b7160e01b600052604160045260246000fd5b90601f8019910116810190811067ffffffffffffffff82111761057857604052565b610540565b67ffffffffffffffff811161057857601f01601f191660200190565b346101b65760403660031901126101b65760043567ffffffffffffffff81116101b657366023820112156101b6578060040135906105d68261057d565b6105e36040519182610556565b82815236602484840101116101b65760006020846101b29560246101df9601838601378301015260243590610ab1565b60405190610622606083610556565b603382527203032383834313937313639333939333735313606c1b6040837f333134313539323635333538393739333233383436323634333338333237393560208201520152565b60405190610679604083610556565b600d82526c48656c6c6f2c20776f726c642160981b6020830152565b604051906106a4606083610556565b603782527f3130302e303025204f5045524154494f4e533a2b2d2a2f0000000000000000006040837f444f4c4c41522d414d4f554e543a2433392e38372050455243454e544147453a60208201520152565b67ffffffffffffffff81116105785760051b60200190565b604051906080820182811067ffffffffffffffff8211176105785760405260006060838281528260208201528160408201520152565b604051606091906107558382610556565b6002815291601f19018260005b82811061076e57505050565b60209061077961070e565b82828501015201610762565b60405190610794602083610556565b600080835282815b8281106107a857505050565b6020906107b361070e565b8282850101520161079c565b604080519091906107d08382610556565b6001815291601f19018260005b8281106107e957505050565b6020906107f461070e565b828285010152016107dd565b634e487b7160e01b600052603260045260246000fd5b80516001101561029d5760400190565b80511561029d5760200190565b805182101561029d5760209160051b010190565b60405190610856604083610556565b6006825265e4b8ade6968760d01b6020830152565b6040519061087a604083610556565b601a82527f5448452053515541524520524f4f54204f46203220495320312e0000000000006020830152565b604051906108b5606083610556565b60328252710e0c0dce0d4d8e4d8dcc4e0dcd4ccdcd8e4d60721b6040837f343134323133353632333733303935303438383031363838373234323039363960208201520152565b634e487b7160e01b600052601160045260246000fd5b600181901b91906001600160ff1b0381160361092a57565b6108fc565b90602d820291808304602d149015171561092a57565b90600a820291808304600a149015171561092a57565b9060038202918083046003149015171561092a57565b908160190291601983040361092a57565b908160031b918083046008149015171561092a57565b90611f25820291808304611f25149015171561092a57565b90610537820291808304610537149015171561092a57565b908160021b918083046004149015171561092a57565b908160011b918083046002149015171561092a57565b9060288202918083046028149015171561092a57565b8181029291811591840414171561092a57565b906007820180921161092a57565b906001820180921161092a57565b603001908160301161092a57565b600401908160041161092a57565b906002820180921161092a57565b906005820180921161092a57565b90600a820180921161092a57565b906003820180921161092a57565b9190820180921161092a57565b90610aad6020928281519485920161010c565b0190565b610aba81611afb565b610ba9610c58610ad2610acc86610912565b84610a8d565b610c4a610c21610bde610bc3610bb6610af3610aed87611b87565b96611b87565b610ba3604051998a98610ba3610b89610b4260208d016026907f3c3f786d6c2076657273696f6e3d22312e302220656e636f64696e673d22555481526523169c111f9f60d11b60208201520190565b7f3c73766720786d6c6e733d22687474703a2f2f7777772e77332e6f72672f3230815274181817b9bb3391103b32b939b4b7b71e911897189160591b602082015260350190565b6d0103b34b2bba137bc1e91181018160951b8152600e0190565b90610a9a565b600160fd1b815260010190565b601160f91b815260010190565b6e1039ba3937b5b29e913737b732911f60891b8152600f0190565b7f3c726563742077696474683d223130302522206865696768743d223130302522815270103334b6361e9111a3232323232311179f60791b602082015260310190565b7f3c706174682066696c6c3d22233030303030302220643d220000000000000000815260180190565b03601f198101835282610556565b9260005b828110610c995750505050610c96610c8191610c4a6040519384926020840190610a9a565b6811179f1e17b9bb339f60b91b815260090190565b90565b60005b838110610cac5750600101610c5c565b610cb7828287611c39565b610cc4575b600101610c9c565b94610d0d610d3b600192610c4a610d27610ce6610ce1898d610a8d565b611b87565b610ba3610d1a610cf9610ce18c8c610a8d565b92610ba3604051998a9860208a0190610a9a565b604d60f81b815260010190565b600b60fa1b815260010190565b673418bb18b41698bd60c11b815260080190565b959050610cbc565b805115610dde57610d526107bf565b90610d5c81611cc8565b15610d905760036028600182610c9695610d768396611660565b610d7f82610826565b52610d8981610826565b505b6119c7565b610d9981611d14565b15610db35760036028600182610c9695610d76839661149c565b610dbc90611316565b81511561029d57600360286001828582956020610c96980152610d8981610826565b50610c966001600360288282610d8b610785565b805115610e7357610e016107bf565b90610e0b81611cc8565b15610e255760ff6028600180610c9695610d768296611660565b610e2e81611d14565b15610e485760ff6028600180610c9695610d76829661149c565b610e5190611316565b81511561029d5760ff60286001808581956020610c96980152610d8981610826565b50610c96600160ff60288280610d8b610785565b805115610f0b57610e966107bf565b90610ea081611cc8565b15610ebb576002602860016000610c9695610d768396611660565b610ec481611d14565b15610edf576002602860016000610c9695610d76839661149c565b610ee890611316565b81511561029d5760026028600160008582956020610c96980152610d8981610826565b50610c96600160026028826000610d8b610785565b805115610fa457610f2f6107bf565b90610f3981611cc8565b15610f545760ff602860016003610c9695610d768396611660565b610f5d81611d14565b15610f785760ff602860016003610c9695610d76839661149c565b610f8190611316565b81511561029d5760ff6028600160038582956020610c96980152610d8981610826565b50610c96600160ff6028826003610d8b610785565b80511561103d57610fc86107bf565b90610fd281611cc8565b15610fed576000602860016003610c9695610d768396611660565b610ff681611d14565b15611011576000602860016003610c9695610d76839661149c565b61101a90611316565b81511561029d5760006028600160038582956020610c96980152610d8981610826565b50610c96600160006028826003610d8b610785565b8051156110d6576110616107bf565b9061106b81611cc8565b156110865760ff602860016000610c9695610d768396611660565b61108f81611d14565b156110aa5760ff602860016000610c9695610d76839661149c565b6110b390611316565b81511561029d5760ff6028600160008582956020610c96980152610d8981610826565b50610c96600160ff6028826000610d8b610785565b80511561116f576110fa6107bf565b9061110481611cc8565b1561111f5760026005806003610c9695610d76600096611660565b61112881611d14565b156111435760026005806003610c9695610d7660009661149c565b61114c90611316565b81511561029d5760026005806003856000956020610c96980152610d8981610826565b50610c96600060026005806003610d8b610785565b805115611205576111936107bf565b9061119d81611cc8565b156111b75760036028600180610c9695610d768296611660565b6111c081611d14565b156111da5760036028600180610c9695610d76829661149c565b6111e390611316565b81511561029d57600360286001808581956020610c96980152610d8981610826565b50610c966001600360288280610d8b610785565b6040805190919061122a8382610556565b6001815291601f1901366020840137565b906112458261057d565b6112526040519182610556565b8281528092611263601f199161057d565b0190602036910137565b61127561070e565b906007825260006020830152611289611219565b60006007601a825b808312156112a85750505060608401526040830152565b9091926112c16112c791600185871c166112ce5761148d565b93611d56565b9190611291565b8060031c6113106112e160078416611d68565b60ff60016112ef858d61141b565b8260f81b90511660f81c921b1660ff60f81b911760f81b16861a918961141b565b5361148d565b9061131f61070e565b9161132a81516120db565b600160ff1b811461134c57600484528151602085015260608401526040830152565b60405162461bcd60e51b815260206004820152601d60248201527f5152436f64653a2062797465207365676d656e7420746f6f206c6f6e670000006044820152606490fd5b6001610c96916118ba565b156113a357565b60405162461bcd60e51b815260206004820152602560248201527f5152436f64653a20616c7068616e756d65726963207365676d656e7420746f6f604482015264206c6f6e6760d81b6064820152608490fd5b634e487b7160e01b600052601260045260246000fd5b8115611416570490565b6113f6565b90815181101561029d570160200190565b1561143357565b60405162461bcd60e51b815260206004820152602c60248201527f5152436f64653a20696e76616c6964206368617220696e20616c7068616e756d60448201526b195c9a58c81cd959db595b9d60a21b6064820152608490fd5b600019811461092a5760010190565b906114a561070e565b918051906114b28261211e565b906114c3600160ff1b83141561139c565b600285528260208601526114ef6114ea6114e4606088019460008652610a1d565b60031c90565b61123b565b92600091829183915b81831061152657505050611510575b50506040830152565b61151d9083835191611ede565b90523880611507565b9091929361157461156a61156f61157a9361156361155e61155861154a8b8a61141b565b516001600160f81b03191690565b60f81c90565b6121aa565b939061142c565b61092f565b610a8d565b9461148d565b926002841461158e575b60010191906114f8565b92509261159e9086865191611e35565b84526000928392611584565b156115b157565b606460405162461bcd60e51b815260206004820152602060248201527f5152436f64653a206e756d65726963207365676d656e7420746f6f206c6f6e676044820152fd5b156115fc57565b60405162461bcd60e51b8152602060048201526024808201527f5152436f64653a206e6f6e2d646967697420696e206e756d65726963207365676044820152631b595b9d60e21b6064820152608490fd5b60ff602f199116019060ff821161092a57565b9061166961070e565b91805161167581612164565b90611686600160ff1b8314156115aa565b600185528060208601526116a76114ea6114e4606088019460008652610a1d565b92600090819282915b8183106116f35750505083826116cc575b505050506040830152565b6116e06116db6116e89461095b565b610a2b565b84519261201f565b9052388080836116c1565b9091939261174861174e9161174261173c61173661171761155861154a8c8a61141b565b9361173160ff86166030811015908161177f575b506115f5565b610945565b9261164d565b60ff1690565b90610a8d565b9361148d565b9360038514611762575b60010191906116b0565b9350916117729086865191611eab565b8452600092839290611758565b6039915011153861172b565b61179a60286001600084612274565b90911561188d5760016117af918360006122f9565b60ff8216916103fc8160021b16928084046004148115171561092a576011840180941161092a5783916117e2839261245a565b81858180826117f08661123b565b9b6117fb8d9761123b565b9c8d966118079261249c565b916118129287612576565b5061181c93612610565b61182582612354565b95828794926118348694612354565b926118408584846126d6565b848361184b8461281f565b60031c611857936128af565b8282611864868483612a01565b61186d926126d6565b61187992600092612ea6565b600061188493612f3c565b610c96916130bd565b505050610c96611219565b6118a6602860018084612274565b90911561188d5760016117af9183826122f9565b906118c9602860018385612274565b91929092156119bb576118df91836001926122f9565b60ff8216916103fc8160021b16928084046004148115171561092a576011840180941161092a5761190f9061245a565b818381808261191d8661123b565b996119288b9761123b565b9a8b966119349261249c565b9161193f9287612576565b5061194993612610565b828061195481612354565b8096819461196184612354565b9161196d8486846126d6565b83856119788461281f565b60031c611984936128af565b8184611991858483612a01565b61199a926126d6565b6119a686848484612cda565b926119b2928492612ea6565b61188493612f3c565b50505050610c96611219565b93926119d591928386612274565b90959115611aed57856119e7936122f9565b91819360ff81166103fc8260021b16958187046004148215171561092a576011870180971161092a578695611a1c879361245a565b8482818082611a2a8661123b565b9a611a358c9761123b565b9b8c96611a419261249c565b91611a4c9287612576565b50611a5693612610565b611a5f83612354565b9788968795611a6d83612354565b97611a798885846126d6565b8784611a848461281f565b60031c611a90936128af565b8783611a9d898483612a01565b611aa6926126d6565b60ff1660ff1498611acb96610c969a611ad0575b918491611ac693612ea6565b612f3c565b6130bd565b90935081611ae384611ac6948785612cda565b9491909250611aba565b505050505050610c96611219565b80511580159081611b64575b5015611b2657611b1860ff91610826565b8160f81b90511660f81c1690565b60405162461bcd60e51b81526020600482015260166024820152755152436f64653a20696e76616c6964207172636f646560501b6044820152606490fd5b905061029d57602081015160f81c151538611b07565b801561092a576000190190565b908115611c1857600082805b611bf9575080611ba3849261123b565b915b611bae57509150565b611bba611bf291611b7a565b93611bdd611bcd61173c600a8406610a39565b60f81b6001600160f81b03191690565b60001a611bea868561141b565b53600a900490565b9283611ba5565b9290611c07611c0f9161148d565b93600a900490565b80939193611b93565b9050604051611c28604082610556565b60018152600360fc1b602082015290565b909181511561029d576020820190815160f81c80851090811591611cbd575b50611cb45782511561029d57611c72915160f81c90610a0a565b91820180921161092a57816007611ca161155861154a611cae95611c9b6116db60019960031c90565b9061141b565b911660ff809216901c1690565b16151590565b50505050600090565b905081101538611c58565b60005b8151811015611d0d57611cde818361141b565b5160f81c60308110908115611d02575b50611cfb57600101611ccb565b5050600090565b603991501138611cee565b5050600190565b60005b8151811015611d0d57611d36611d2d828461141b565b5160f81c6121aa565b5015611cfb57600101611d17565b90600319820191821360011661092a57565b600160ff1b811461092a576000190190565b600703906007821161092a57565b60001981019190821161092a57565b600803906008821161092a57565b60071981019190821161092a57565b60011981019190821161092a57565b600a1981019190821161092a57565b60091981019190821161092a57565b60361981019190821161092a57565b60231981019190821161092a57565b60061981019190821161092a57565b600e0390600e821161092a57565b600e1981019190821161092a57565b60031981019190821161092a57565b9190820391821161092a57565b600a915b6000831215611e485750505090565b9091926112c1611e6191600185871c16611e685761148d565b9190611e39565b8060031c611310611e7b60078416611d68565b60ff6001611e89858a61141b565b8260f81b90511660f81c921b1660ff60f81b911760f81b1660001a918661141b565b6009915b6000831215611ebe5750505090565b9091926112c1611ed791600185871c16611e685761148d565b9190611eaf565b6005915b6000831215611ef15750505090565b9091926112c1611f0a91600185871c16611e685761148d565b9190611ee2565b6003915b6000831215611f245750505090565b9091926112c1611f3d91600185871c16611e685761148d565b9190611f15565b6000915b6000831215611f575750505090565b9091926112c1611f7091600185871c16611f775761148d565b9190611f48565b8060031c611310611f8a60078416611d68565b60ff600181611f99868b61141b565b5160f81c16921b1660ff60f81b911760f81b1660001a918661141b565b60001981019150811360011661092a575b6000811215611fd4575090565b90611fe1611fe79161148d565b91611d56565b611fc7565b6007915b6000831215611fff5750505090565b9091926112c161201891600185871c16611e685761148d565b9190611ff0565b9190600019810190811360011661092a5791905b60008312156120425750505090565b9091926112c161205b91600185871c166120625761148d565b9190612033565b8060031c6113106120a461207860078516611d68565b6120936001612087868b61141b565b5160f81c921b60ff1690565b1760f81b6001600160f81b03191690565b60001a918661141b565b908160030191821260011661092a57565b9190916000838201938412911290801582169115161761092a57565b6000617fff821161211357506000908060031b91508082056008149015171561092a57617fff811361210a5790565b50600160ff1b90565b50600160ff1b919050565b617fff811161210a57600b810290808205600b149015171561092a576001810190600060018312911290801582169115161761092a5760029005617fff811361210a5790565b617fff811161210a57600a810290808205600a149015171561092a576002810190600060028312911290801582169115161761092a5760039005617fff811361210a5790565b60ff16602081108015612259575b61225057604051906121cb606083610556565b603b82527f250000002627000000002829002a2b2c0102030405060708090a2d000000000060208301527e0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232400000000006040830152601f190160ff811161092a5761155861154a60ff938461223b94169061141b565b1680156122505761224b90611d76565b600191565b50600090600090565b50605a81116121b8565b60ff1660ff811461092a5760010190565b9092915b612282848261237c565b8060031b908082046008149015171561092a5761229f82846123bb565b90600082121590816122ee575b506122e2575060ff831660ff821610156122d3576122cc61228291612263565b9050612278565b50505050600090600090600090565b60019591945092509050565b9050811115386122ac565b921561234f5760015b600360ff821611156123145750505090565b61231e818361237c565b8060031b908082046008149015171561092a57831115612347575b61234290612263565b612302565b925082612339565b505090565b9061235e826106f6565b61236b6040519182610556565b8281528092611263601f19916106f6565b9060ff806123a061238c8561281f565b60031c9461239a8186613242565b946133e5565b1691160260ff811690810361092a57810390811161092a5790565b600090815b8151831015612453576123e18460ff6123d98686610833565b515116613499565b9060206123ee8585610833565b5101516001831b11156124455761241f61240a61242593610a47565b60606124168787610833565b51015190610a8d565b906120bf565b91617fff831361243857600101916123c0565b50600160ff1b9392505050565b50600160ff1b949350505050565b9250505090565b8060021b908082046004149015171561092a576011810180911161092a5761248460009180610a0a565b6007810180911161092a57610c96915060031c610a2b565b91909260009160005b845181101561256e576124f76124d76124c18388969998610833565b5195846124d261173c895160ff1690565b611f11565b8360208701516124f1896124ec8a5160ff1690565b613499565b9061201f565b946000966040606087019601965b865189101561255e57612556600191866125518461254a8e61253f8f61253861155861154a60079351611c9b8760031c90565b9216611d68565b60ff809216901c1690565b1660ff1690565b611f44565b980197612505565b91975093955093506001016124a5565b505091509150565b9192612582919361237c565b918260031b928084046008149015171561092a5780830383811161092a576125d291838260046125b794911161260857611fb6565b826125cd6125c760078416611d85565b60071690565b611fb6565b9160ec5b8184106125e35750505090565b6125f460ff60ec9216948486611fec565b93036126015760116125d6565b60ec6125d6565b506004611fb6565b9260ff61261d83856133e5565b169161264260ff61262e8387613242565b16946126398361281f565b60031c9261237c565b9280156114165780820681039181831161092a5785612664836126699361140c565b611e28565b92612673866135d3565b60009690875b84891061268c5750505050505050505050565b6126c38160019261156f8b8b8f8f8c908c8f938c8e918685106000146126cb576126bb60ff60005b1689610a8d565b9b8c916136d3565b980197612679565b6126bb60ff8f6126b4565b9190916126e382846137a1565b6126ed82846137d3565b6126f682613819565b6127088261270385611d93565b61384b565b61271a8261271585611d93565b613881565b6127238161394e565b60005b8181106127655750505060ff600791161015612740575050565b61275e826127598361275461276396611db1565b6138eb565b611db1565b613921565b565b801560005b83811061277b575050600101612726565b806001918887868680612817575b80156127fe575b80156127e4575b6127db576127c461173c61155861154a6127d5976127c96127c461173c61155861154a6127cf9a8c61141b565b611da2565b9661141b565b906138af565b0161276a565b505050506127d5565b506127ee89611d76565b8114801561279757508315612797565b50868015612790575061281089611d76565b8414612790565b508315612789565b60ff81169060041b610ff0166080810180911161092a578161284091610a0a565b906040820180921161092a5781600282101561285b57505090565b90915060079061289c9061289661289161287b858704610a55565b610a55565b61288c61288782610971565b611dc0565b610a0a565b611dcf565b90611e28565b9110156128a65790565b610c9690611dde565b9190916000906128be83611d76565b60018110156128d0575b505050505050565b600681146129d4575b60005b8481106128ff5750600281106128fa576128f590611da2565b6128be565b6128c8565b60009691965b6002811061291957506001019590956128dc565b6129238189611e28565b600261292e8a610a2b565b166129ce576129408361266489611d76565b61295261294e828488613a3c565b1590565b806129bd575b612967575b5050600101612905565b956129b06129b592600194986129a961298f61155861154a6129898860031c90565b8d61141b565b60ff61299d60078816611d68565b91166001911c16151590565b9188613bc4565b61148d565b94903861295d565b506129c789610982565b8710612958565b82612940565b5060056128d9565b6001600160ff1b03811461092a5760010190565b600160ff1b811461092a5760000390565b92909260075b612a1082611ded565b811015612a345780612a25612a2f9286613bf0565b6128768186613c02565b612a07565b5090926003195b6004811315612c0b5750612a4e8161394e565b60005b818110612b005750505060ff166007811015612a6c57505050565b8060005b600c8110612adf5750600c1b1760005b60068110612a8e5750505050565b60005b60038110612aa25750600101612a80565b91612ad8600191612ad2612ab98661156f89611db1565b848316151590612acb8288838d613bc4565b868a613bc4565b60011c90565b9201612a91565b91600190612af8612af382841b92600b1c90565b610998565b189201612a70565b801560005b838110612b16575050600101612a51565b8180612c03575b8015612bea575b8015612bd0575b612bc8576000195b6001811315612b4757506001905b01612b05565b6000195b898784876001851315612b6b575050505050612b66906129dc565b612b33565b91612ba786612b9c61173c61155861154a8a9997612ba1612bba9c612b9c61173c61155861154a612bb59f8e61141b565b6120bf565b9761141b565b9084159283612bbf57613bc4565b6129dc565b612b4b565b87159350613bc4565b600190612b41565b50612bda84611d76565b83148015612b2b57508015612b2b565b50818015612b245750612bfc84611d76565b8114612b24565b508015612b1d565b600081126003195b6004811315612c2c575050612c27906129dc565b612a3b565b612c71906000811215612cd457612c42816129f0565b8315612cce57612c51856129f0565b80821315612cc757505b60028114908115612cbc575b50612c76576129dc565b612c13565b612c93612c82826120ae565b612c8b866120ae565b90888a613c2c565b612ca3612c8282612b9c89611d44565b612bb5612caf826120ae565b612c8b86612b9c8a611d44565b600491501438612c67565b9050612c5b565b84612c51565b80612c42565b600094936000199390929091865b600860ff821610612cfb57505050505050565b612d0781858585612ea6565b612d1383858388612f3c565b6000612d216001861b611d76565b6001861115612ea057612d3e6001612d3888611d76565b1b611d76565b915b9160005b878110612e7c575060005b878110612e635750600090815b888110612e43575060009283916000198a01905b818410612dee5750505050600a60039160148980029102828202808211600114612de757035b600091908101600019010480612ddb575b500291020101868110612dce575b50600181612dc760ff93878787612ea6565b0116612ce8565b9097509450866001612db5565b60001901905038612da7565b9003612d96565b90919294600190612e38838c87602081818d60051b850101511692878d0160051b0101511690888119168983191680881c169080881c16169180871c169080871c16161716613cbf565b019501929190612d70565b91600190612e5b8560208660051b8c01015116613cbf565b019201612d5c565b92612e756001916117428a878b614693565b9301612d4f565b92612e996001916117428a86612e92898d610833565b51166145c2565b9301612d44565b81612d40565b929091926001841b91600019830192831161092a5760005b858110612ecd57505050505050565b8084612edb60019385613d09565b612ee58387610833565b51191616612ef38288610833565b5118612eff8288610833565b5201612ebe565b604051906080612f168184610556565b368337565b6040519060e0612f168184610556565b90600481101561029d5760051b0190565b612f86612f8061173c612f7960ff949897969885612f58612f06565b60018152600060208201526003604082015291600260608401521690612f2b565b5160ff1690565b60031b90565b9116178060005b600a811061309c5750600a1b176154121860005b60058111156130815750612fbe600682901c600116151583613a8d565b612fd1600782901c600116151583613ad8565b612fe4600882901c600116151583613b25565b60095b600f811061306c575060005b60088110613044575060085b600f811061301c5750506130166127639293611d93565b90613bb2565b8061303e61302f60019361156f89611e0a565b84831c60011615159086613a51565b01612fff565b8061306661305760019361266489611d76565b84831c60011615159086613b70565b01612ff3565b8061307b613057600193611dfc565b01612fe7565b613097906129b083821c60011615158286613a51565b612fa1565b916001906130b56130b082841b9260091c90565b6109b0565b189201612f8d565b91906130da6114ea6116db6114e46130d58580610a0a565b610a1d565b9260f882901b6001600160f81b03191660001a6130f685610826565b5360005b82811061310657505050565b60208160051b830101518382029060005b858110613129575050506001016130fa565b8060018381931c1661313c575b01613117565b80840182600760218360031c8d010192161b815160001a179053613136565b6040519061316a606083610556565b602982527fff0a101a1218101216161a1e161618181c1c1a1a1a1a1c1c1c1c1c1c1c1c1c1c60208301526807070707070707070760ba1b6040830152565b604051906131b7606083610556565b602982527fff0d16121a1218121614181c1a18141e181c1c1a1e1c1e1e1e1e1c1e1e1e1e1e6020830152680f0f0f0f0f0f0f0f0f60b91b6040830152565b60405190613204606083610556565b602982527fff111c1610161c1a1a181c181c1618181e1c1c1a1c1e181e1e1e1e1e1e1e1e1e6020830152680f0f0f0f0f0f0f0f0f60b91b6040830152565b60ff16801561329f576001811461328a576002146132765761155861154a610c969260ff61326e6131f5565b91169061141b565b61155861154a610c969260ff61326e6131a8565b5061155861154a610c969260ff61326e61315b565b5061155861154a610c969260ff604051916132bb606084610556565b602983527fff070a0f141a1214181e1214181a1e16181c1e1c1c1c1c1e1e1a1c1e1e1e1e1e6020840152680f0f0f0f0f0f0f0f0f60b91b6040840152169061141b565b6040519061330d606083610556565b602982526821232526282b2d2f3160b81b6040837fff01010102020404040505050809090a0a0b0d0e10111112141517191a1c1d1f60208201520152565b6040519061335a606083610556565b60298252680b4c0ccd4e0ecf905160ba1b6040837fff01010202040406060808080a0c100c11101215141717191b1d22222326282b60208201520152565b604051906133a7606083610556565b602982526836393c3f42464a4d5160b81b6040837fff010102040404050608080b0b101012101315191919221e202325282a2d303360208201520152565b60ff16801561343a5760018114613425576002146134115761155861154a610c969260ff61326e613398565b61155861154a610c969260ff61326e61334b565b5061155861154a610c969260ff61326e6132fe565b5061155861154a610c969260ff60405191613456606084610556565b602983527fff01010101010202020204040404040606060607080809090a0c0c0c0d0e0f1060208401526811121313141516181960b81b6040840152169061141b565b906134b16134aa60ff809316610a1d565b6011900490565b911660018114613569576002811461354b576004811461353b576008811461351d5760079150146135185760405162461bcd60e51b81526020600482015260146024820152735152436f64653a20696e76616c6964206d6f646560601b6044820152606490fd5b600090565b5080156135355760011461353057600c90565b600a90565b50600890565b501561354657601090565b600890565b5080156135635760011461355e57600d90565b600b90565b50600990565b5080156135815760011461357c57600e90565b600c90565b50600a90565b1561358e57565b60405162461bcd60e51b815260206004820152601e60248201527f5152436f64653a20525320646567726565206f7574206f662072616e676500006044820152606490fd5b906001821015806136c8575b6135e890613587565b6135f18261123b565b91600161360661360083611d76565b8561141b565b53600060015b82821061361857505050565b60005b838110613636575061362e6001916143d9565b91019061360c565b80613655611bcd8461365061155861154a6001978d61141b565b614456565b60001a613662828961141b565b538461366d82610a2b565b10613679575b0161361b565b6136b561368c61155861154a848b61141b565b6136a461155861154a61369e86610a2b565b8c61141b565b1860f81b6001600160f81b03191690565b60001a6136c2828961141b565b53613673565b50601e8211156135df565b919399979498928a6136e7918684866144c2565b9460005b8581106137475750505050505060005b86811061370b5750505050505050565b8061371b61154a6001938561141b565b61374061373561372b878a610a8d565b6117428986610a0a565b9160001a918961141b565b53016136fb565b808b61378b61376161375b8d600196610a0a565b8c610a8d565b8589851015613792575b5061378261154a61377c868a610a8d565b8a61141b565b60001a9261141b565b53016136eb565b61379b91611e28565b8561376b565b9060005b8281106137b157505050565b8060406137c060019385610833565b51176137cc8285610833565b52016137a5565b6001901b90600019820191821161092a5760005b600181106137f457505050565b80600191600601613812856138098387610833565b51179185610833565b52016137e7565b60005b60098110613828575050565b806101ff61383860019385610833565b51176138448285610833565b520161381c565b60ff901b9060005b6009811061386057505050565b808361386e60019385610833565b511761387a8285610833565b5201613853565b9060005b6008811061389257505050565b8060019184016138a86101ff6138098387610833565b5201613885565b601f909291921b60005b600581106138c75750505050565b8060019185016138e4846138db8388610833565b51179186610833565b52016138b9565b6007901b9060005b6006811061390057505050565b808361390e60019385610833565b511761391a8285610833565b52016138f3565b9060005b6003811061393257505050565b806001918401613947603f6138098387610833565b5201613925565b60408051919061395e8184610556565b60078352601f190136602084013760ff16908060018314613a3357509161398760078304610a55565b926139d86139d36139cd6139c86139b16139ac6139a389610982565b6117428b61095b565b610a63565b6139c26139bd8a6109c8565b611e19565b9061140c565b6109de565b946109c8565b610a71565b936139e281611d76565b60f886901b6001600160f81b03191660001a6139fe828561141b565b5360018114613a205784613a14613a1a92611b7a565b96611e28565b946139e2565b50925092506006613a3084610826565b53565b91505090600090565b600192613a4891610833565b51901c16151590565b9115613a735780610100613a68613a709385610833565b511792610833565b52565b613a709061010019613a858285610833565b511692610833565b9015613ab25780516007101561029d57610100818101511790613a7090600790610833565b80516007101561029d5761010081018051915161010019909216916007101561029d5752565b9015613aff5780516008101561029d576101208101516101001790613a7090600890610833565b80516008101561029d5761012081018051915161010019909216916008101561029d5752565b9015613b4b5780516008101561029d5761012081015160801790613a7090600890610833565b80516008101561029d57610120810180519151608019909216916008101561029d5752565b9115613b895760086001613a70921b613a688285610833565b81516008101561029d5760016020600860051b840101911b1981511691516008101561029d5752565b90613a7090610100613a688285610833565b9290919015613bde576001613a70921b613a688285610833565b6001613a70921b19613a858285610833565b90613a7090604019613a858285610833565b9081516006101561029d5760016020600660051b840101911b1981511691516006101561029d5752565b91929060008412159081613c73575b81613c67575b81613c5d575b50613c5157505050565b61276392600092613bc4565b9050811238613c47565b60008312159150613c41565b8085129150613c3b565b670f0f0f0f0f0f0f0f670101010101010101916755555555555555558160011c169003673333333333333333808260021c169116018060041c01160260381c90565b613ccb8160c01c613c7d565b613ce167ffffffffffffffff8360801c16613c7d565b0190613d0467ffffffffffffffff613cfd818460401c16613c7d565b9216613c7d565b010190565b60ff1690811561410a57600182146140f957600282146140d357600382146140545760048214614025576001811690600390069160058114613fa457600614613e875780158080613e7f575b613e6a578080613e60575b613e395780613e2f575b613e0957600114908180613e01575b613ddb5781613dd0575b50613dac577fe38e38e38e38e38e38e38e38e38e38e38e38e38e38e38e38e38e38e38e38e38e90565b7f8e38e38e38e38e38e38e38e38e38e38e38e38e38e38e38e38e38e38e38e38e3890565b600191501438613d83565b50507faaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa90565b508015613d79565b50507f1c71c71c71c71c71c71c71c71c71c71c71c71c71c71c71c71c71c71c71c71c7190565b5060028214613d6a565b5050507f71c71c71c71c71c71c71c71c71c71c71c71c71c71c71c71c71c71c71c71c71c790565b5060018314613d60565b5050506000805160206148d983398151915290565b508215613d55565b80158080613f9c575b613f93578080613f89575b613f625780613f58575b613f3257600114908180613f2a575b613f165781613f0b575b50613ee7577f1c71c71c71c71c71c71c71c71c71c71c71c71c71c71c71c71c71c71c71c71c7190565b7f71c71c71c71c71c71c71c71c71c71c71c71c71c71c71c71c71c71c71c71c71c790565b600191501438613ebe565b50506000805160206148d983398151915290565b508015613eb4565b50507fb6db6db6db6db6db6db6db6db6db6db6db6db6db6db6db6db6db6db6db6db6db90565b5060028214613ea5565b5050507fdb6db6db6db6db6db6db6db6db6db6db6db6db6db6db6db6db6db6db6db6db6d90565b5060018314613e9b565b50505060001990565b508215613e90565b5015808061401d575b61401557613ff05715613fde577f104104104104104104104104104104104104104104104104104104104104104190565b6000805160206148d983398151915290565b507f924924924924924924924924924924924924924924924924924924924924924990565b505060001990565b508115613fad565b60019150811c16613dac577f71c71c71c71c71c71c71c71c71c71c71c71c71c71c71c71c71c71c71c71c71c790565b6003900690508061408457507f924924924924924924924924924924924924924924924924924924924924924990565b6001036140af577f492492492492492492492492492492492492492492492492492492492492492490565b7f249249249249249249249249249249249249249249249249249249249249249290565b50507f924924924924924924924924924924924924924924924924924924924924924990565b600116151590506135185760001990565b60011615159050614127576000805160206148d983398151915290565b7faaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa90565b6040519061415b61012083610556565b61010082527fcb595fb09ca9a0510bf516eb7a752cd74faed5e9e6e7ade874d6f4eaa85058af610100837d011902321ac603df33ee1b68c74b0464e00e348def811cc169f8c8084c7160208201527f058a652fe1240f2135938edaf01282451db5c27d6a27f9b9c99a09784de472a660408201527f06bf8b6266dd30fde29825b31091228836d094ce8f96dbbdf1d2135c8338464060608201527f1e42b6a3c3487e6e6b3a2854fa85ba3dca5e9b9f0a15792b4ed4e5ac73f3a75760808201527f0770c0f78c80630d674adeed31c5fe18e3a5997726b8b47c114492d92320892e60a08201527f373fd15b95bccfcd908797b2dcfcbe61f256d3ab142a5d9e843c3953476d41a260c08201527f1f2d43d8b77ba476c41749ec7f0c6ff66ca13b52299d55aafb6086b1bbcc3e5a60e08201520152565b604051906142a161012083610556565b61010082527f122448903d7af4f5f7f3fbebcb8b0b162c58b07dfae9cf831b366cd8ad478e01610100837f01020408102040801d3a74e8cd8713264c982d5ab475eac98f03060c183060c060208201527f9d274e9c254a94356ad4b577eec19f23468c050a142850a05dba69d2b96fdea160408201527f5fbe61c2992f5ebc65ca890f1e3c78f0fde7d3bb6bd6b17ffee1dfa35bb671e260608201527fd9af4386112244880d1a3468d0bd67ce811f3e7cf8edc7933b76ecc5973366cc60808201527f85172e5cb86ddaa94f9e214284152a54a84d9a2952a455aa49923972e4d5b77360a08201527fe6d1bf63c6913f7efce5d7b37bf6f1ffe3dbab4b963162c495376edca557ae4160c08201527f82193264c88d070e1c3870e0dda753a651a259b279f2f9efc39b2b56ac458a0960e08201520152565b60ff168015801561444e575b614448576143fa906143f561414b565b61141b565b5160f81c61440661414b565b9081516002101561029d5761154a6115589160ff6022610c9695018160f81b90511660f81c160160ff81101561443f575b6143f5614291565b60fe1901614437565b50600090565b5060006143e5565b60ff16801580156144b7575b611cfb57610c969160ff61447b6144b0936143f561414b565b5160f81c9161449861448b61414b565b838060f81b93169061141b565b511660f81c160160ff81101561443f576143f5614291565b5160f81c90565b5060ff821615614462565b949392946144cf8461123b565b956144d8614291565b9060206144e361414b565b94818a019401019260005b8681106144ff575050505050505050565b6001825160001a865160001a1895019460001989018b60005b8281106145a85750600091508a01601f015360005b89811061453e5750506001016144ee565b808c60206001938801015160001a82858c818402614562575b50505050500161452d565b60208094928180948401015160001a9201015160001a0160fe811161459f575b8b01015160001a92010190815160001a1890538c3882858c614557565b60fe1901614582565b80600192016020602182015160001a910153018c90614518565b60009291836145cf612f1b565b94809381905b8482106145f657505091610c9694956145f192611742946148a1565b6109f4565b90949281861c60011615158315898115830361465b575050506146189061148d565b92600584036146355761462c600191610a7f565b955b01906145d5565b9460058411614647575b60019061462e565b9461465360019161148d565b95905061463f565b61466d9294955087919398969861476d565b61467c575b906001809361462e565b9361468d906117426145f1896147be565b93614672565b92916000806146a0612f1b565b95600182951b9082915b8583106146c75750505091610c9694956145f192611742946148a1565b90919593816146d68885610833565b5116151584158a81158303614735575050506146f19061148d565b936005850361470f57614705600191610a7f565b965b0191906146aa565b9560058511614721575b600190614707565b9561472d60019161148d565b969050614719565b6147479294965088919399979961476d565b614756575b9160018094614707565b94614767906117426145f18a6147be565b9461474c565b90918251156147af575b509060a08101805160c08301526080820190815190526060820190815190526040820190815190526020820190815190528151905252565b810180911161092a5738614777565b60208101518015159081614893575b8161487c575b8161486e575b81614860575b600092828061484d575b8061483f575b614836575b8261481e575b82614812575b50506148095790565b610c969061148d565b51101590503880614800565b915060c082015161482e826109c8565b1115916147fa565b600193506147f4565b508160c082015110156147ef565b508051614859836109c8565b11156147e9565b60a0830151811491506147df565b6080830151811491506147d9565b9050606082015161488c8261095b565b14906147d3565b6040830151811491506147cd565b8284916148c6575b50810180911161092a57610c9692826148c19261476d565b6147be565b6148cf9261476d565b600082826148a956fe5555555555555555555555555555555555555555555555555555555555555555a2646970667358221220a2ab092f927a5c9c8602049f4de81c27d044d7e87118f9061175de3f9a165b5564736f6c63430008220033","gasData":[4102066,4102066]}],"codeHashMap":{"4d52f9216ee6b8627e17e4095705c673af59b94d":"QRCodeDemo"},"sync":{"url":"http://localhost:8545"},"blockLimit":30000000}} \ No newline at end of file diff --git a/solidity/hardhat.config.js b/solidity/hardhat.config.js new file mode 100644 index 0000000..2d061d5 --- /dev/null +++ b/solidity/hardhat.config.js @@ -0,0 +1,25 @@ +import "@nomicfoundation/hardhat-toolbox"; + +/** @type import('hardhat/config').HardhatUserConfig */ +const config = { + solidity: { + version: "0.8.34", + settings: { + viaIR: true, + optimizer: { + enabled: true, + runs: 200, + }, + }, + }, + networks: { + hardhat: { + // QR Code generation requires significant gas. + // blockGasLimit increases the cap for calls; gas is the default per-tx limit. + blockGasLimit: 30_000_000, + allowUnlimitedContractSize: true, + }, + }, +}; + +export default config; diff --git a/solidity/package-lock.json b/solidity/package-lock.json new file mode 100644 index 0000000..2a4f06a --- /dev/null +++ b/solidity/package-lock.json @@ -0,0 +1,8134 @@ +{ + "name": "qrcodegen-solidity", + "version": "1.0.0", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "qrcodegen-solidity", + "version": "1.0.0", + "license": "ISC", + "devDependencies": { + "@nomicfoundation/hardhat-toolbox": "^5.0.0", + "ethers": "^6.16.0", + "hardhat": "^2.28.6", + "solc": "^0.8.34" + } + }, + "node_modules/@adraffy/ens-normalize": { + "version": "1.10.1", + "resolved": "https://registry.npmjs.org/@adraffy/ens-normalize/-/ens-normalize-1.10.1.tgz", + "integrity": "sha512-96Z2IP3mYmF1Xg2cDm8f1gWGf/HUVedQ3FMifV4kG/PQ4yEP51xDtRAEfhVNt5f/uzpNkZHwWQuUcu6D6K+Ekw==", + "dev": true, + "license": "MIT" + }, + "node_modules/@cspotcode/source-map-support": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz", + "integrity": "sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "@jridgewell/trace-mapping": "0.3.9" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/@ethereumjs/rlp": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/@ethereumjs/rlp/-/rlp-5.0.2.tgz", + "integrity": "sha512-DziebCdg4JpGlEqEdGgXmjqcFoJi+JGulUXwEjsZGAscAQ7MyD/7LE/GVCP29vEQxKc7AAwjT3A2ywHp2xfoCA==", + "dev": true, + "license": "MPL-2.0", + "bin": { + "rlp": "bin/rlp.cjs" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@ethereumjs/util": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/@ethereumjs/util/-/util-9.1.0.tgz", + "integrity": "sha512-XBEKsYqLGXLah9PNJbgdkigthkG7TAGvlD/sH12beMXEyHDyigfcbdvHhmLyDWgDyOJn4QwiQUaF7yeuhnjdog==", + "dev": true, + "license": "MPL-2.0", + "dependencies": { + "@ethereumjs/rlp": "^5.0.2", + "ethereum-cryptography": "^2.2.1" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@ethereumjs/util/node_modules/@noble/curves": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/@noble/curves/-/curves-1.4.2.tgz", + "integrity": "sha512-TavHr8qycMChk8UwMld0ZDRvatedkzWfH8IiaeGCfymOP5i0hSCozz9vHOL0nkwk7HRMlFnAiKpS2jrUmSybcw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@noble/hashes": "1.4.0" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/@ethereumjs/util/node_modules/@noble/hashes": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.4.0.tgz", + "integrity": "sha512-V1JJ1WTRUqHHrOSh597hURcMqVKVGL/ea3kv0gSnEdsEZ0/+VyPghM1lMNGc00z7CIQorSvbKpuJkxvuHbvdbg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 16" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/@ethereumjs/util/node_modules/ethereum-cryptography": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-2.2.1.tgz", + "integrity": "sha512-r/W8lkHSiTLxUxW8Rf3u4HGB0xQweG2RyETjywylKZSzLWoWAijRz8WCuOtJ6wah+avllXBqZuk29HCCvhEIRg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@noble/curves": "1.4.2", + "@noble/hashes": "1.4.0", + "@scure/bip32": "1.4.0", + "@scure/bip39": "1.3.0" + } + }, + "node_modules/@ethersproject/abi": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/abi/-/abi-5.8.0.tgz", + "integrity": "sha512-b9YS/43ObplgyV6SlyQsG53/vkSal0MNA1fskSC4mbnCMi8R+NkcH8K9FPYNESf6jUefBUniE4SOKms0E/KK1Q==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT", + "dependencies": { + "@ethersproject/address": "^5.8.0", + "@ethersproject/bignumber": "^5.8.0", + "@ethersproject/bytes": "^5.8.0", + "@ethersproject/constants": "^5.8.0", + "@ethersproject/hash": "^5.8.0", + "@ethersproject/keccak256": "^5.8.0", + "@ethersproject/logger": "^5.8.0", + "@ethersproject/properties": "^5.8.0", + "@ethersproject/strings": "^5.8.0" + } + }, + "node_modules/@ethersproject/abstract-provider": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/abstract-provider/-/abstract-provider-5.8.0.tgz", + "integrity": "sha512-wC9SFcmh4UK0oKuLJQItoQdzS/qZ51EJegK6EmAWlh+OptpQ/npECOR3QqECd8iGHC0RJb4WKbVdSfif4ammrg==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT", + "dependencies": { + "@ethersproject/bignumber": "^5.8.0", + "@ethersproject/bytes": "^5.8.0", + "@ethersproject/logger": "^5.8.0", + "@ethersproject/networks": "^5.8.0", + "@ethersproject/properties": "^5.8.0", + "@ethersproject/transactions": "^5.8.0", + "@ethersproject/web": "^5.8.0" + } + }, + "node_modules/@ethersproject/abstract-signer": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/abstract-signer/-/abstract-signer-5.8.0.tgz", + "integrity": "sha512-N0XhZTswXcmIZQdYtUnd79VJzvEwXQw6PK0dTl9VoYrEBxxCPXqS0Eod7q5TNKRxe1/5WUMuR0u0nqTF/avdCA==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT", + "dependencies": { + "@ethersproject/abstract-provider": "^5.8.0", + "@ethersproject/bignumber": "^5.8.0", + "@ethersproject/bytes": "^5.8.0", + "@ethersproject/logger": "^5.8.0", + "@ethersproject/properties": "^5.8.0" + } + }, + "node_modules/@ethersproject/address": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/address/-/address-5.8.0.tgz", + "integrity": "sha512-GhH/abcC46LJwshoN+uBNoKVFPxUuZm6dA257z0vZkKmU1+t8xTn8oK7B9qrj8W2rFRMch4gbJl6PmVxjxBEBA==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT", + "dependencies": { + "@ethersproject/bignumber": "^5.8.0", + "@ethersproject/bytes": "^5.8.0", + "@ethersproject/keccak256": "^5.8.0", + "@ethersproject/logger": "^5.8.0", + "@ethersproject/rlp": "^5.8.0" + } + }, + "node_modules/@ethersproject/base64": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/base64/-/base64-5.8.0.tgz", + "integrity": "sha512-lN0oIwfkYj9LbPx4xEkie6rAMJtySbpOAFXSDVQaBnAzYfB4X2Qr+FXJGxMoc3Bxp2Sm8OwvzMrywxyw0gLjIQ==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT", + "dependencies": { + "@ethersproject/bytes": "^5.8.0" + } + }, + "node_modules/@ethersproject/basex": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/basex/-/basex-5.8.0.tgz", + "integrity": "sha512-PIgTszMlDRmNwW9nhS6iqtVfdTAKosA7llYXNmGPw4YAI1PUyMv28988wAb41/gHF/WqGdoLv0erHaRcHRKW2Q==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT", + "peer": true, + "dependencies": { + "@ethersproject/bytes": "^5.8.0", + "@ethersproject/properties": "^5.8.0" + } + }, + "node_modules/@ethersproject/bignumber": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/bignumber/-/bignumber-5.8.0.tgz", + "integrity": "sha512-ZyaT24bHaSeJon2tGPKIiHszWjD/54Sz8t57Toch475lCLljC6MgPmxk7Gtzz+ddNN5LuHea9qhAe0x3D+uYPA==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT", + "dependencies": { + "@ethersproject/bytes": "^5.8.0", + "@ethersproject/logger": "^5.8.0", + "bn.js": "^5.2.1" + } + }, + "node_modules/@ethersproject/bytes": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/bytes/-/bytes-5.8.0.tgz", + "integrity": "sha512-vTkeohgJVCPVHu5c25XWaWQOZ4v+DkGoC42/TS2ond+PARCxTJvgTFUNDZovyQ/uAQ4EcpqqowKydcdmRKjg7A==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT", + "dependencies": { + "@ethersproject/logger": "^5.8.0" + } + }, + "node_modules/@ethersproject/constants": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/constants/-/constants-5.8.0.tgz", + "integrity": "sha512-wigX4lrf5Vu+axVTIvNsuL6YrV4O5AXl5ubcURKMEME5TnWBouUh0CDTWxZ2GpnRn1kcCgE7l8O5+VbV9QTTcg==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT", + "dependencies": { + "@ethersproject/bignumber": "^5.8.0" + } + }, + "node_modules/@ethersproject/contracts": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/contracts/-/contracts-5.8.0.tgz", + "integrity": "sha512-0eFjGz9GtuAi6MZwhb4uvUM216F38xiuR0yYCjKJpNfSEy4HUM8hvqqBj9Jmm0IUz8l0xKEhWwLIhPgxNY0yvQ==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT", + "peer": true, + "dependencies": { + "@ethersproject/abi": "^5.8.0", + "@ethersproject/abstract-provider": "^5.8.0", + "@ethersproject/abstract-signer": "^5.8.0", + "@ethersproject/address": "^5.8.0", + "@ethersproject/bignumber": "^5.8.0", + "@ethersproject/bytes": "^5.8.0", + "@ethersproject/constants": "^5.8.0", + "@ethersproject/logger": "^5.8.0", + "@ethersproject/properties": "^5.8.0", + "@ethersproject/transactions": "^5.8.0" + } + }, + "node_modules/@ethersproject/hash": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/hash/-/hash-5.8.0.tgz", + "integrity": "sha512-ac/lBcTbEWW/VGJij0CNSw/wPcw9bSRgCB0AIBz8CvED/jfvDoV9hsIIiWfvWmFEi8RcXtlNwp2jv6ozWOsooA==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT", + "dependencies": { + "@ethersproject/abstract-signer": "^5.8.0", + "@ethersproject/address": "^5.8.0", + "@ethersproject/base64": "^5.8.0", + "@ethersproject/bignumber": "^5.8.0", + "@ethersproject/bytes": "^5.8.0", + "@ethersproject/keccak256": "^5.8.0", + "@ethersproject/logger": "^5.8.0", + "@ethersproject/properties": "^5.8.0", + "@ethersproject/strings": "^5.8.0" + } + }, + "node_modules/@ethersproject/hdnode": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/hdnode/-/hdnode-5.8.0.tgz", + "integrity": "sha512-4bK1VF6E83/3/Im0ERnnUeWOY3P1BZml4ZD3wcH8Ys0/d1h1xaFt6Zc+Dh9zXf9TapGro0T4wvO71UTCp3/uoA==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT", + "peer": true, + "dependencies": { + "@ethersproject/abstract-signer": "^5.8.0", + "@ethersproject/basex": "^5.8.0", + "@ethersproject/bignumber": "^5.8.0", + "@ethersproject/bytes": "^5.8.0", + "@ethersproject/logger": "^5.8.0", + "@ethersproject/pbkdf2": "^5.8.0", + "@ethersproject/properties": "^5.8.0", + "@ethersproject/sha2": "^5.8.0", + "@ethersproject/signing-key": "^5.8.0", + "@ethersproject/strings": "^5.8.0", + "@ethersproject/transactions": "^5.8.0", + "@ethersproject/wordlists": "^5.8.0" + } + }, + "node_modules/@ethersproject/json-wallets": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/json-wallets/-/json-wallets-5.8.0.tgz", + "integrity": "sha512-HxblNck8FVUtNxS3VTEYJAcwiKYsBIF77W15HufqlBF9gGfhmYOJtYZp8fSDZtn9y5EaXTE87zDwzxRoTFk11w==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT", + "peer": true, + "dependencies": { + "@ethersproject/abstract-signer": "^5.8.0", + "@ethersproject/address": "^5.8.0", + "@ethersproject/bytes": "^5.8.0", + "@ethersproject/hdnode": "^5.8.0", + "@ethersproject/keccak256": "^5.8.0", + "@ethersproject/logger": "^5.8.0", + "@ethersproject/pbkdf2": "^5.8.0", + "@ethersproject/properties": "^5.8.0", + "@ethersproject/random": "^5.8.0", + "@ethersproject/strings": "^5.8.0", + "@ethersproject/transactions": "^5.8.0", + "aes-js": "3.0.0", + "scrypt-js": "3.0.1" + } + }, + "node_modules/@ethersproject/json-wallets/node_modules/aes-js": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/aes-js/-/aes-js-3.0.0.tgz", + "integrity": "sha512-H7wUZRn8WpTq9jocdxQ2c8x2sKo9ZVmzfRE13GiNJXfp7NcKYEdvl3vspKjXox6RIG2VtaRe4JFvxG4rqp2Zuw==", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/@ethersproject/keccak256": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/keccak256/-/keccak256-5.8.0.tgz", + "integrity": "sha512-A1pkKLZSz8pDaQ1ftutZoaN46I6+jvuqugx5KYNeQOPqq+JZ0Txm7dlWesCHB5cndJSu5vP2VKptKf7cksERng==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT", + "dependencies": { + "@ethersproject/bytes": "^5.8.0", + "js-sha3": "0.8.0" + } + }, + "node_modules/@ethersproject/logger": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/logger/-/logger-5.8.0.tgz", + "integrity": "sha512-Qe6knGmY+zPPWTC+wQrpitodgBfH7XoceCGL5bJVejmH+yCS3R8jJm8iiWuvWbG76RUmyEG53oqv6GMVWqunjA==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT" + }, + "node_modules/@ethersproject/networks": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/networks/-/networks-5.8.0.tgz", + "integrity": "sha512-egPJh3aPVAzbHwq8DD7Po53J4OUSsA1MjQp8Vf/OZPav5rlmWUaFLiq8cvQiGK0Z5K6LYzm29+VA/p4RL1FzNg==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT", + "dependencies": { + "@ethersproject/logger": "^5.8.0" + } + }, + "node_modules/@ethersproject/pbkdf2": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/pbkdf2/-/pbkdf2-5.8.0.tgz", + "integrity": "sha512-wuHiv97BrzCmfEaPbUFpMjlVg/IDkZThp9Ri88BpjRleg4iePJaj2SW8AIyE8cXn5V1tuAaMj6lzvsGJkGWskg==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT", + "peer": true, + "dependencies": { + "@ethersproject/bytes": "^5.8.0", + "@ethersproject/sha2": "^5.8.0" + } + }, + "node_modules/@ethersproject/properties": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/properties/-/properties-5.8.0.tgz", + "integrity": "sha512-PYuiEoQ+FMaZZNGrStmN7+lWjlsoufGIHdww7454FIaGdbe/p5rnaCXTr5MtBYl3NkeoVhHZuyzChPeGeKIpQw==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT", + "dependencies": { + "@ethersproject/logger": "^5.8.0" + } + }, + "node_modules/@ethersproject/providers": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/providers/-/providers-5.8.0.tgz", + "integrity": "sha512-3Il3oTzEx3o6kzcg9ZzbE+oCZYyY+3Zh83sKkn4s1DZfTUjIegHnN2Cm0kbn9YFy45FDVcuCLLONhU7ny0SsCw==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT", + "peer": true, + "dependencies": { + "@ethersproject/abstract-provider": "^5.8.0", + "@ethersproject/abstract-signer": "^5.8.0", + "@ethersproject/address": "^5.8.0", + "@ethersproject/base64": "^5.8.0", + "@ethersproject/basex": "^5.8.0", + "@ethersproject/bignumber": "^5.8.0", + "@ethersproject/bytes": "^5.8.0", + "@ethersproject/constants": "^5.8.0", + "@ethersproject/hash": "^5.8.0", + "@ethersproject/logger": "^5.8.0", + "@ethersproject/networks": "^5.8.0", + "@ethersproject/properties": "^5.8.0", + "@ethersproject/random": "^5.8.0", + "@ethersproject/rlp": "^5.8.0", + "@ethersproject/sha2": "^5.8.0", + "@ethersproject/strings": "^5.8.0", + "@ethersproject/transactions": "^5.8.0", + "@ethersproject/web": "^5.8.0", + "bech32": "1.1.4", + "ws": "8.18.0" + } + }, + "node_modules/@ethersproject/providers/node_modules/ws": { + "version": "8.18.0", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.18.0.tgz", + "integrity": "sha512-8VbfWfHLbbwu3+N6OKsOMpBdT4kXPDDB9cJk2bJ6mh9ucxdlnNvH1e+roYkKmN9Nxw2yjz7VzeO9oOz2zJ04Pw==", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">=10.0.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": ">=5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } + } + }, + "node_modules/@ethersproject/random": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/random/-/random-5.8.0.tgz", + "integrity": "sha512-E4I5TDl7SVqyg4/kkA/qTfuLWAQGXmSOgYyO01So8hLfwgKvYK5snIlzxJMk72IFdG/7oh8yuSqY2KX7MMwg+A==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT", + "peer": true, + "dependencies": { + "@ethersproject/bytes": "^5.8.0", + "@ethersproject/logger": "^5.8.0" + } + }, + "node_modules/@ethersproject/rlp": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/rlp/-/rlp-5.8.0.tgz", + "integrity": "sha512-LqZgAznqDbiEunaUvykH2JAoXTT9NV0Atqk8rQN9nx9SEgThA/WMx5DnW8a9FOufo//6FZOCHZ+XiClzgbqV9Q==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT", + "dependencies": { + "@ethersproject/bytes": "^5.8.0", + "@ethersproject/logger": "^5.8.0" + } + }, + "node_modules/@ethersproject/sha2": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/sha2/-/sha2-5.8.0.tgz", + "integrity": "sha512-dDOUrXr9wF/YFltgTBYS0tKslPEKr6AekjqDW2dbn1L1xmjGR+9GiKu4ajxovnrDbwxAKdHjW8jNcwfz8PAz4A==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT", + "peer": true, + "dependencies": { + "@ethersproject/bytes": "^5.8.0", + "@ethersproject/logger": "^5.8.0", + "hash.js": "1.1.7" + } + }, + "node_modules/@ethersproject/signing-key": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/signing-key/-/signing-key-5.8.0.tgz", + "integrity": "sha512-LrPW2ZxoigFi6U6aVkFN/fa9Yx/+4AtIUe4/HACTvKJdhm0eeb107EVCIQcrLZkxaSIgc/eCrX8Q1GtbH+9n3w==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT", + "dependencies": { + "@ethersproject/bytes": "^5.8.0", + "@ethersproject/logger": "^5.8.0", + "@ethersproject/properties": "^5.8.0", + "bn.js": "^5.2.1", + "elliptic": "6.6.1", + "hash.js": "1.1.7" + } + }, + "node_modules/@ethersproject/solidity": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/solidity/-/solidity-5.8.0.tgz", + "integrity": "sha512-4CxFeCgmIWamOHwYN9d+QWGxye9qQLilpgTU0XhYs1OahkclF+ewO+3V1U0mvpiuQxm5EHHmv8f7ClVII8EHsA==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT", + "peer": true, + "dependencies": { + "@ethersproject/bignumber": "^5.8.0", + "@ethersproject/bytes": "^5.8.0", + "@ethersproject/keccak256": "^5.8.0", + "@ethersproject/logger": "^5.8.0", + "@ethersproject/sha2": "^5.8.0", + "@ethersproject/strings": "^5.8.0" + } + }, + "node_modules/@ethersproject/strings": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/strings/-/strings-5.8.0.tgz", + "integrity": "sha512-qWEAk0MAvl0LszjdfnZ2uC8xbR2wdv4cDabyHiBh3Cldq/T8dPH3V4BbBsAYJUeonwD+8afVXld274Ls+Y1xXg==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT", + "dependencies": { + "@ethersproject/bytes": "^5.8.0", + "@ethersproject/constants": "^5.8.0", + "@ethersproject/logger": "^5.8.0" + } + }, + "node_modules/@ethersproject/transactions": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/transactions/-/transactions-5.8.0.tgz", + "integrity": "sha512-UglxSDjByHG0TuU17bDfCemZ3AnKO2vYrL5/2n2oXvKzvb7Cz+W9gOWXKARjp2URVwcWlQlPOEQyAviKwT4AHg==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT", + "dependencies": { + "@ethersproject/address": "^5.8.0", + "@ethersproject/bignumber": "^5.8.0", + "@ethersproject/bytes": "^5.8.0", + "@ethersproject/constants": "^5.8.0", + "@ethersproject/keccak256": "^5.8.0", + "@ethersproject/logger": "^5.8.0", + "@ethersproject/properties": "^5.8.0", + "@ethersproject/rlp": "^5.8.0", + "@ethersproject/signing-key": "^5.8.0" + } + }, + "node_modules/@ethersproject/units": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/units/-/units-5.8.0.tgz", + "integrity": "sha512-lxq0CAnc5kMGIiWW4Mr041VT8IhNM+Pn5T3haO74XZWFulk7wH1Gv64HqE96hT4a7iiNMdOCFEBgaxWuk8ETKQ==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT", + "peer": true, + "dependencies": { + "@ethersproject/bignumber": "^5.8.0", + "@ethersproject/constants": "^5.8.0", + "@ethersproject/logger": "^5.8.0" + } + }, + "node_modules/@ethersproject/wallet": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/wallet/-/wallet-5.8.0.tgz", + "integrity": "sha512-G+jnzmgg6UxurVKRKvw27h0kvG75YKXZKdlLYmAHeF32TGUzHkOFd7Zn6QHOTYRFWnfjtSSFjBowKo7vfrXzPA==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT", + "peer": true, + "dependencies": { + "@ethersproject/abstract-provider": "^5.8.0", + "@ethersproject/abstract-signer": "^5.8.0", + "@ethersproject/address": "^5.8.0", + "@ethersproject/bignumber": "^5.8.0", + "@ethersproject/bytes": "^5.8.0", + "@ethersproject/hash": "^5.8.0", + "@ethersproject/hdnode": "^5.8.0", + "@ethersproject/json-wallets": "^5.8.0", + "@ethersproject/keccak256": "^5.8.0", + "@ethersproject/logger": "^5.8.0", + "@ethersproject/properties": "^5.8.0", + "@ethersproject/random": "^5.8.0", + "@ethersproject/signing-key": "^5.8.0", + "@ethersproject/transactions": "^5.8.0", + "@ethersproject/wordlists": "^5.8.0" + } + }, + "node_modules/@ethersproject/web": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/web/-/web-5.8.0.tgz", + "integrity": "sha512-j7+Ksi/9KfGviws6Qtf9Q7KCqRhpwrYKQPs+JBA/rKVFF/yaWLHJEH3zfVP2plVu+eys0d2DlFmhoQJayFewcw==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT", + "dependencies": { + "@ethersproject/base64": "^5.8.0", + "@ethersproject/bytes": "^5.8.0", + "@ethersproject/logger": "^5.8.0", + "@ethersproject/properties": "^5.8.0", + "@ethersproject/strings": "^5.8.0" + } + }, + "node_modules/@ethersproject/wordlists": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/wordlists/-/wordlists-5.8.0.tgz", + "integrity": "sha512-2df9bbXicZws2Sb5S6ET493uJ0Z84Fjr3pC4tu/qlnZERibZCeUVuqdtt+7Tv9xxhUxHoIekIA7avrKUWHrezg==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT", + "peer": true, + "dependencies": { + "@ethersproject/bytes": "^5.8.0", + "@ethersproject/hash": "^5.8.0", + "@ethersproject/logger": "^5.8.0", + "@ethersproject/properties": "^5.8.0", + "@ethersproject/strings": "^5.8.0" + } + }, + "node_modules/@fastify/busboy": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/@fastify/busboy/-/busboy-2.1.1.tgz", + "integrity": "sha512-vBZP4NlzfOlerQTnba4aqZoMhE/a9HY7HRqoOPaETQcSQuWEIyZMHGfVu6w9wGtGK5fED5qRs2DteVCjOH60sA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=14" + } + }, + "node_modules/@jridgewell/resolve-uri": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", + "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.5.5", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz", + "integrity": "sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.9", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz", + "integrity": "sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "@jridgewell/resolve-uri": "^3.0.3", + "@jridgewell/sourcemap-codec": "^1.4.10" + } + }, + "node_modules/@noble/curves": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@noble/curves/-/curves-1.2.0.tgz", + "integrity": "sha512-oYclrNgRaM9SsBUBVbb8M6DTV7ZHRTKugureoYEncY5c65HOmRzvSiTE3y5CYaPYJA/GVkrhXEoF0M3Ya9PMnw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@noble/hashes": "1.3.2" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/@noble/hashes": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.3.2.tgz", + "integrity": "sha512-MVC8EAQp7MvEcm30KWENFjgR+Mkmf+D189XJTkFIlwohU5hcBbn1ZkKq7KVTi2Hme3PMGF390DaL52beVrIihQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 16" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/@noble/secp256k1": { + "version": "1.7.1", + "resolved": "https://registry.npmjs.org/@noble/secp256k1/-/secp256k1-1.7.1.tgz", + "integrity": "sha512-hOUk6AyBFmqVrv7k5WAw/LpszxVbj9gGN4JRkIX52fdFAj1UA61KXmZDvqVEm+pOyec3+fIeZB02LYa/pWOArw==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + ], + "license": "MIT" + }, + "node_modules/@nodelib/fs.scandir": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.stat": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.walk": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nomicfoundation/edr": { + "version": "0.12.0-next.23", + "resolved": "https://registry.npmjs.org/@nomicfoundation/edr/-/edr-0.12.0-next.23.tgz", + "integrity": "sha512-F2/6HZh8Q9RsgkOIkRrckldbhPjIZY7d4mT9LYuW68miwGQ5l7CkAgcz9fRRiurA0+YJhtsbx/EyrD9DmX9BOw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@nomicfoundation/edr-darwin-arm64": "0.12.0-next.23", + "@nomicfoundation/edr-darwin-x64": "0.12.0-next.23", + "@nomicfoundation/edr-linux-arm64-gnu": "0.12.0-next.23", + "@nomicfoundation/edr-linux-arm64-musl": "0.12.0-next.23", + "@nomicfoundation/edr-linux-x64-gnu": "0.12.0-next.23", + "@nomicfoundation/edr-linux-x64-musl": "0.12.0-next.23", + "@nomicfoundation/edr-win32-x64-msvc": "0.12.0-next.23" + }, + "engines": { + "node": ">= 20" + } + }, + "node_modules/@nomicfoundation/edr-darwin-arm64": { + "version": "0.12.0-next.23", + "resolved": "https://registry.npmjs.org/@nomicfoundation/edr-darwin-arm64/-/edr-darwin-arm64-0.12.0-next.23.tgz", + "integrity": "sha512-Amh7mRoDzZyJJ4efqoePqdoZOzharmSOttZuJDlVE5yy07BoE8hL6ZRpa5fNYn0LCqn/KoWs8OHANWxhKDGhvQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 20" + } + }, + "node_modules/@nomicfoundation/edr-darwin-x64": { + "version": "0.12.0-next.23", + "resolved": "https://registry.npmjs.org/@nomicfoundation/edr-darwin-x64/-/edr-darwin-x64-0.12.0-next.23.tgz", + "integrity": "sha512-9wn489FIQm7m0UCD+HhktjWx6vskZzeZD9oDc2k9ZvbBzdXwPp5tiDqUBJ+eQpByAzCDfteAJwRn2lQCE0U+Iw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 20" + } + }, + "node_modules/@nomicfoundation/edr-linux-arm64-gnu": { + "version": "0.12.0-next.23", + "resolved": "https://registry.npmjs.org/@nomicfoundation/edr-linux-arm64-gnu/-/edr-linux-arm64-gnu-0.12.0-next.23.tgz", + "integrity": "sha512-nlk5EejSzEUfEngv0Jkhqq3/wINIfF2ED9wAofc22w/V1DV99ASh9l3/e/MIHOQFecIZ9MDqt0Em9/oDyB1Uew==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 20" + } + }, + "node_modules/@nomicfoundation/edr-linux-arm64-musl": { + "version": "0.12.0-next.23", + "resolved": "https://registry.npmjs.org/@nomicfoundation/edr-linux-arm64-musl/-/edr-linux-arm64-musl-0.12.0-next.23.tgz", + "integrity": "sha512-SJuPBp3Rc6vM92UtVTUxZQ/QlLhLfwTftt2XUiYohmGKB3RjGzpgduEFMCA0LEnucUckU6UHrJNFHiDm77C4PQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 20" + } + }, + "node_modules/@nomicfoundation/edr-linux-x64-gnu": { + "version": "0.12.0-next.23", + "resolved": "https://registry.npmjs.org/@nomicfoundation/edr-linux-x64-gnu/-/edr-linux-x64-gnu-0.12.0-next.23.tgz", + "integrity": "sha512-NU+Qs3u7Qt6t3bJFdmmjd5CsvgI2bPPzO31KifM2Ez96/jsXYho5debtTQnimlb5NAqiHTSlxjh/F8ROcptmeQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 20" + } + }, + "node_modules/@nomicfoundation/edr-linux-x64-musl": { + "version": "0.12.0-next.23", + "resolved": "https://registry.npmjs.org/@nomicfoundation/edr-linux-x64-musl/-/edr-linux-x64-musl-0.12.0-next.23.tgz", + "integrity": "sha512-F78fZA2h6/ssiCSZOovlgIu0dUeI7ItKPsDDF3UUlIibef052GCXmliMinC90jVPbrjUADMd1BUwjfI0Z8OllQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 20" + } + }, + "node_modules/@nomicfoundation/edr-win32-x64-msvc": { + "version": "0.12.0-next.23", + "resolved": "https://registry.npmjs.org/@nomicfoundation/edr-win32-x64-msvc/-/edr-win32-x64-msvc-0.12.0-next.23.tgz", + "integrity": "sha512-IfJZQJn7d/YyqhmguBIGoCKjE9dKjbu6V6iNEPApfwf5JyyjHYyyfkLU4rf7hygj57bfH4sl1jtQ6r8HnT62lw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 20" + } + }, + "node_modules/@nomicfoundation/hardhat-chai-matchers": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/@nomicfoundation/hardhat-chai-matchers/-/hardhat-chai-matchers-2.1.2.tgz", + "integrity": "sha512-NlUlde/ycXw2bLzA2gWjjbxQaD9xIRbAF30nsoEprAWzH8dXEI1ILZUKZMyux9n9iygEXTzN0SDVjE6zWDZi9g==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "@types/chai-as-promised": "^7.1.3", + "chai-as-promised": "^7.1.1", + "deep-eql": "^4.0.1", + "ordinal": "^1.0.3" + }, + "peerDependencies": { + "@nomicfoundation/hardhat-ethers": "^3.1.0", + "chai": "^4.2.0", + "ethers": "^6.14.0", + "hardhat": "^2.26.0" + } + }, + "node_modules/@nomicfoundation/hardhat-ethers": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/@nomicfoundation/hardhat-ethers/-/hardhat-ethers-3.1.3.tgz", + "integrity": "sha512-208JcDeVIl+7Wu3MhFUUtiA8TJ7r2Rn3Wr+lSx9PfsDTKkbsAsWPY6N6wQ4mtzDv0/pB9nIbJhkjoHe1EsgNsA==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "debug": "^4.1.1", + "lodash.isequal": "^4.5.0" + }, + "peerDependencies": { + "ethers": "^6.14.0", + "hardhat": "^2.28.0" + } + }, + "node_modules/@nomicfoundation/hardhat-ignition": { + "version": "0.15.16", + "resolved": "https://registry.npmjs.org/@nomicfoundation/hardhat-ignition/-/hardhat-ignition-0.15.16.tgz", + "integrity": "sha512-T0JTnuib7QcpsWkHCPLT7Z6F483EjTdcdjb1e00jqS9zTGCPqinPB66LLtR/duDLdvgoiCVS6K8WxTQkA/xR1Q==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "@nomicfoundation/ignition-core": "^0.15.15", + "@nomicfoundation/ignition-ui": "^0.15.13", + "chalk": "^4.0.0", + "debug": "^4.3.2", + "fs-extra": "^10.0.0", + "json5": "^2.2.3", + "prompts": "^2.4.2" + }, + "peerDependencies": { + "@nomicfoundation/hardhat-verify": "^2.1.0", + "hardhat": "^2.26.0" + } + }, + "node_modules/@nomicfoundation/hardhat-ignition-ethers": { + "version": "0.15.17", + "resolved": "https://registry.npmjs.org/@nomicfoundation/hardhat-ignition-ethers/-/hardhat-ignition-ethers-0.15.17.tgz", + "integrity": "sha512-io6Wrp1dUsJ94xEI3pw6qkPfhc9TFA+e6/+o16yQ8pvBTFMjgK5x8wIHKrrIHr9L3bkuTMtmDjyN4doqO2IqFQ==", + "dev": true, + "license": "MIT", + "peer": true, + "peerDependencies": { + "@nomicfoundation/hardhat-ethers": "^3.1.0", + "@nomicfoundation/hardhat-ignition": "^0.15.16", + "@nomicfoundation/ignition-core": "^0.15.15", + "ethers": "^6.14.0", + "hardhat": "^2.26.0" + } + }, + "node_modules/@nomicfoundation/hardhat-network-helpers": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@nomicfoundation/hardhat-network-helpers/-/hardhat-network-helpers-1.1.2.tgz", + "integrity": "sha512-p7HaUVDbLj7ikFivQVNhnfMHUBgiHYMwQWvGn9AriieuopGOELIrwj2KjyM2a6z70zai5YKO264Vwz+3UFJZPQ==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "ethereumjs-util": "^7.1.4" + }, + "peerDependencies": { + "hardhat": "^2.26.0" + } + }, + "node_modules/@nomicfoundation/hardhat-toolbox": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/@nomicfoundation/hardhat-toolbox/-/hardhat-toolbox-5.0.0.tgz", + "integrity": "sha512-FnUtUC5PsakCbwiVNsqlXVIWG5JIb5CEZoSXbJUsEBun22Bivx2jhF1/q9iQbzuaGpJKFQyOhemPB2+XlEE6pQ==", + "dev": true, + "license": "MIT", + "peerDependencies": { + "@nomicfoundation/hardhat-chai-matchers": "^2.0.0", + "@nomicfoundation/hardhat-ethers": "^3.0.0", + "@nomicfoundation/hardhat-ignition-ethers": "^0.15.0", + "@nomicfoundation/hardhat-network-helpers": "^1.0.0", + "@nomicfoundation/hardhat-verify": "^2.0.0", + "@typechain/ethers-v6": "^0.5.0", + "@typechain/hardhat": "^9.0.0", + "@types/chai": "^4.2.0", + "@types/mocha": ">=9.1.0", + "@types/node": ">=18.0.0", + "chai": "^4.2.0", + "ethers": "^6.4.0", + "hardhat": "^2.11.0", + "hardhat-gas-reporter": "^1.0.8", + "solidity-coverage": "^0.8.1", + "ts-node": ">=8.0.0", + "typechain": "^8.3.0", + "typescript": ">=4.5.0" + } + }, + "node_modules/@nomicfoundation/hardhat-verify": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/@nomicfoundation/hardhat-verify/-/hardhat-verify-2.1.3.tgz", + "integrity": "sha512-danbGjPp2WBhLkJdQy9/ARM3WQIK+7vwzE0urNem1qZJjh9f54Kf5f1xuQv8DvqewUAkuPxVt/7q4Grz5WjqSg==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "@ethersproject/abi": "^5.1.2", + "@ethersproject/address": "^5.0.2", + "cbor": "^8.1.0", + "debug": "^4.1.1", + "lodash.clonedeep": "^4.5.0", + "picocolors": "^1.1.0", + "semver": "^6.3.0", + "table": "^6.8.0", + "undici": "^5.14.0" + }, + "peerDependencies": { + "hardhat": "^2.26.0" + } + }, + "node_modules/@nomicfoundation/ignition-core": { + "version": "0.15.15", + "resolved": "https://registry.npmjs.org/@nomicfoundation/ignition-core/-/ignition-core-0.15.15.tgz", + "integrity": "sha512-JdKFxYknTfOYtFXMN6iFJ1vALJPednuB+9p9OwGIRdoI6HYSh4ZBzyRURgyXtHFyaJ/SF9lBpsYV9/1zEpcYwg==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "@ethersproject/address": "5.6.1", + "@nomicfoundation/solidity-analyzer": "^0.1.1", + "cbor": "^9.0.0", + "debug": "^4.3.2", + "ethers": "^6.14.0", + "fs-extra": "^10.0.0", + "immer": "10.0.2", + "lodash": "4.17.21", + "ndjson": "2.0.0" + } + }, + "node_modules/@nomicfoundation/ignition-core/node_modules/@ethersproject/address": { + "version": "5.6.1", + "resolved": "https://registry.npmjs.org/@ethersproject/address/-/address-5.6.1.tgz", + "integrity": "sha512-uOgF0kS5MJv9ZvCz7x6T2EXJSzotiybApn4XlOgoTX0xdtyVIJ7pF+6cGPxiEq/dpBiTfMiw7Yc81JcwhSYA0Q==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT", + "peer": true, + "dependencies": { + "@ethersproject/bignumber": "^5.6.2", + "@ethersproject/bytes": "^5.6.1", + "@ethersproject/keccak256": "^5.6.1", + "@ethersproject/logger": "^5.6.0", + "@ethersproject/rlp": "^5.6.1" + } + }, + "node_modules/@nomicfoundation/ignition-core/node_modules/cbor": { + "version": "9.0.2", + "resolved": "https://registry.npmjs.org/cbor/-/cbor-9.0.2.tgz", + "integrity": "sha512-JPypkxsB10s9QOWwa6zwPzqE1Md3vqpPc+cai4sAecuCsRyAtAl/pMyhPlMbT/xtPnm2dznJZYRLui57qiRhaQ==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "nofilter": "^3.1.0" + }, + "engines": { + "node": ">=16" + } + }, + "node_modules/@nomicfoundation/ignition-ui": { + "version": "0.15.13", + "resolved": "https://registry.npmjs.org/@nomicfoundation/ignition-ui/-/ignition-ui-0.15.13.tgz", + "integrity": "sha512-HbTszdN1iDHCkUS9hLeooqnLEW2U45FaqFwFEYT8nIno2prFZhG+n68JEERjmfFCB5u0WgbuJwk3CgLoqtSL7Q==", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/@nomicfoundation/solidity-analyzer": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer/-/solidity-analyzer-0.1.2.tgz", + "integrity": "sha512-q4n32/FNKIhQ3zQGGw5CvPF6GTvDCpYwIf7bEY/dZTZbgfDsHyjJwURxUJf3VQuuJj+fDIFl4+KkBVbw4Ef6jA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 12" + }, + "optionalDependencies": { + "@nomicfoundation/solidity-analyzer-darwin-arm64": "0.1.2", + "@nomicfoundation/solidity-analyzer-darwin-x64": "0.1.2", + "@nomicfoundation/solidity-analyzer-linux-arm64-gnu": "0.1.2", + "@nomicfoundation/solidity-analyzer-linux-arm64-musl": "0.1.2", + "@nomicfoundation/solidity-analyzer-linux-x64-gnu": "0.1.2", + "@nomicfoundation/solidity-analyzer-linux-x64-musl": "0.1.2", + "@nomicfoundation/solidity-analyzer-win32-x64-msvc": "0.1.2" + } + }, + "node_modules/@nomicfoundation/solidity-analyzer-darwin-arm64": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer-darwin-arm64/-/solidity-analyzer-darwin-arm64-0.1.2.tgz", + "integrity": "sha512-JaqcWPDZENCvm++lFFGjrDd8mxtf+CtLd2MiXvMNTBD33dContTZ9TWETwNFwg7JTJT5Q9HEecH7FA+HTSsIUw==", + "dev": true, + "license": "MIT", + "optional": true, + "engines": { + "node": ">= 12" + } + }, + "node_modules/@nomicfoundation/solidity-analyzer-darwin-x64": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer-darwin-x64/-/solidity-analyzer-darwin-x64-0.1.2.tgz", + "integrity": "sha512-fZNmVztrSXC03e9RONBT+CiksSeYcxI1wlzqyr0L7hsQlK1fzV+f04g2JtQ1c/Fe74ZwdV6aQBdd6Uwl1052sw==", + "dev": true, + "license": "MIT", + "optional": true, + "engines": { + "node": ">= 12" + } + }, + "node_modules/@nomicfoundation/solidity-analyzer-linux-arm64-gnu": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer-linux-arm64-gnu/-/solidity-analyzer-linux-arm64-gnu-0.1.2.tgz", + "integrity": "sha512-3d54oc+9ZVBuB6nbp8wHylk4xh0N0Gc+bk+/uJae+rUgbOBwQSfuGIbAZt1wBXs5REkSmynEGcqx6DutoK0tPA==", + "dev": true, + "license": "MIT", + "optional": true, + "engines": { + "node": ">= 12" + } + }, + "node_modules/@nomicfoundation/solidity-analyzer-linux-arm64-musl": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer-linux-arm64-musl/-/solidity-analyzer-linux-arm64-musl-0.1.2.tgz", + "integrity": "sha512-iDJfR2qf55vgsg7BtJa7iPiFAsYf2d0Tv/0B+vhtnI16+wfQeTbP7teookbGvAo0eJo7aLLm0xfS/GTkvHIucA==", + "dev": true, + "license": "MIT", + "optional": true, + "engines": { + "node": ">= 12" + } + }, + "node_modules/@nomicfoundation/solidity-analyzer-linux-x64-gnu": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer-linux-x64-gnu/-/solidity-analyzer-linux-x64-gnu-0.1.2.tgz", + "integrity": "sha512-9dlHMAt5/2cpWyuJ9fQNOUXFB/vgSFORg1jpjX1Mh9hJ/MfZXlDdHQ+DpFCs32Zk5pxRBb07yGvSHk9/fezL+g==", + "dev": true, + "license": "MIT", + "optional": true, + "engines": { + "node": ">= 12" + } + }, + "node_modules/@nomicfoundation/solidity-analyzer-linux-x64-musl": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer-linux-x64-musl/-/solidity-analyzer-linux-x64-musl-0.1.2.tgz", + "integrity": "sha512-GzzVeeJob3lfrSlDKQw2bRJ8rBf6mEYaWY+gW0JnTDHINA0s2gPR4km5RLIj1xeZZOYz4zRw+AEeYgLRqB2NXg==", + "dev": true, + "license": "MIT", + "optional": true, + "engines": { + "node": ">= 12" + } + }, + "node_modules/@nomicfoundation/solidity-analyzer-win32-x64-msvc": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer-win32-x64-msvc/-/solidity-analyzer-win32-x64-msvc-0.1.2.tgz", + "integrity": "sha512-Fdjli4DCcFHb4Zgsz0uEJXZ2K7VEO+w5KVv7HmT7WO10iODdU9csC2az4jrhEsRtiR9Gfd74FlG0NYlw1BMdyA==", + "dev": true, + "license": "MIT", + "optional": true, + "engines": { + "node": ">= 12" + } + }, + "node_modules/@scure/base": { + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/@scure/base/-/base-1.2.6.tgz", + "integrity": "sha512-g/nm5FgUa//MCj1gV09zTJTaM6KBAHqLN907YVQqf7zC49+DcO4B1so4ZX07Ef10Twr6nuqYEH9GEggFXA4Fmg==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/@scure/bip32": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/@scure/bip32/-/bip32-1.4.0.tgz", + "integrity": "sha512-sVUpc0Vq3tXCkDGYVWGIZTRfnvu8LoTDaev7vbwh0omSvVORONr960MQWdKqJDCReIEmTj3PAr73O3aoxz7OPg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@noble/curves": "~1.4.0", + "@noble/hashes": "~1.4.0", + "@scure/base": "~1.1.6" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/@scure/bip32/node_modules/@noble/curves": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/@noble/curves/-/curves-1.4.2.tgz", + "integrity": "sha512-TavHr8qycMChk8UwMld0ZDRvatedkzWfH8IiaeGCfymOP5i0hSCozz9vHOL0nkwk7HRMlFnAiKpS2jrUmSybcw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@noble/hashes": "1.4.0" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/@scure/bip32/node_modules/@noble/hashes": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.4.0.tgz", + "integrity": "sha512-V1JJ1WTRUqHHrOSh597hURcMqVKVGL/ea3kv0gSnEdsEZ0/+VyPghM1lMNGc00z7CIQorSvbKpuJkxvuHbvdbg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 16" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/@scure/bip32/node_modules/@scure/base": { + "version": "1.1.9", + "resolved": "https://registry.npmjs.org/@scure/base/-/base-1.1.9.tgz", + "integrity": "sha512-8YKhl8GHiNI/pU2VMaofa2Tor7PJRAjwQLBBuilkJ9L5+13yVbC7JO/wS7piioAvPSwR3JKM1IJ/u4xQzbcXKg==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/@scure/bip39": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/@scure/bip39/-/bip39-1.3.0.tgz", + "integrity": "sha512-disdg7gHuTDZtY+ZdkmLpPCk7fxZSu3gBiEGuoC1XYxv9cGx3Z6cpTggCgW6odSOOIXCiDjuGejW+aJKCY/pIQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@noble/hashes": "~1.4.0", + "@scure/base": "~1.1.6" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/@scure/bip39/node_modules/@noble/hashes": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.4.0.tgz", + "integrity": "sha512-V1JJ1WTRUqHHrOSh597hURcMqVKVGL/ea3kv0gSnEdsEZ0/+VyPghM1lMNGc00z7CIQorSvbKpuJkxvuHbvdbg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 16" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/@scure/bip39/node_modules/@scure/base": { + "version": "1.1.9", + "resolved": "https://registry.npmjs.org/@scure/base/-/base-1.1.9.tgz", + "integrity": "sha512-8YKhl8GHiNI/pU2VMaofa2Tor7PJRAjwQLBBuilkJ9L5+13yVbC7JO/wS7piioAvPSwR3JKM1IJ/u4xQzbcXKg==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/@sentry/core": { + "version": "5.30.0", + "resolved": "https://registry.npmjs.org/@sentry/core/-/core-5.30.0.tgz", + "integrity": "sha512-TmfrII8w1PQZSZgPpUESqjB+jC6MvZJZdLtE/0hZ+SrnKhW3x5WlYLvTXZpcWePYBku7rl2wn1RZu6uT0qCTeg==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "@sentry/hub": "5.30.0", + "@sentry/minimal": "5.30.0", + "@sentry/types": "5.30.0", + "@sentry/utils": "5.30.0", + "tslib": "^1.9.3" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/@sentry/core/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "dev": true, + "license": "0BSD" + }, + "node_modules/@sentry/hub": { + "version": "5.30.0", + "resolved": "https://registry.npmjs.org/@sentry/hub/-/hub-5.30.0.tgz", + "integrity": "sha512-2tYrGnzb1gKz2EkMDQcfLrDTvmGcQPuWxLnJKXJvYTQDGLlEvi2tWz1VIHjunmOvJrB5aIQLhm+dcMRwFZDCqQ==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "@sentry/types": "5.30.0", + "@sentry/utils": "5.30.0", + "tslib": "^1.9.3" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/@sentry/hub/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "dev": true, + "license": "0BSD" + }, + "node_modules/@sentry/minimal": { + "version": "5.30.0", + "resolved": "https://registry.npmjs.org/@sentry/minimal/-/minimal-5.30.0.tgz", + "integrity": "sha512-BwWb/owZKtkDX+Sc4zCSTNcvZUq7YcH3uAVlmh/gtR9rmUvbzAA3ewLuB3myi4wWRAMEtny6+J/FN/x+2wn9Xw==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "@sentry/hub": "5.30.0", + "@sentry/types": "5.30.0", + "tslib": "^1.9.3" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/@sentry/minimal/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "dev": true, + "license": "0BSD" + }, + "node_modules/@sentry/node": { + "version": "5.30.0", + "resolved": "https://registry.npmjs.org/@sentry/node/-/node-5.30.0.tgz", + "integrity": "sha512-Br5oyVBF0fZo6ZS9bxbJZG4ApAjRqAnqFFurMVJJdunNb80brh7a5Qva2kjhm+U6r9NJAB5OmDyPkA1Qnt+QVg==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "@sentry/core": "5.30.0", + "@sentry/hub": "5.30.0", + "@sentry/tracing": "5.30.0", + "@sentry/types": "5.30.0", + "@sentry/utils": "5.30.0", + "cookie": "^0.4.1", + "https-proxy-agent": "^5.0.0", + "lru_map": "^0.3.3", + "tslib": "^1.9.3" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/@sentry/node/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "dev": true, + "license": "0BSD" + }, + "node_modules/@sentry/tracing": { + "version": "5.30.0", + "resolved": "https://registry.npmjs.org/@sentry/tracing/-/tracing-5.30.0.tgz", + "integrity": "sha512-dUFowCr0AIMwiLD7Fs314Mdzcug+gBVo/+NCMyDw8tFxJkwWAKl7Qa2OZxLQ0ZHjakcj1hNKfCQJ9rhyfOl4Aw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@sentry/hub": "5.30.0", + "@sentry/minimal": "5.30.0", + "@sentry/types": "5.30.0", + "@sentry/utils": "5.30.0", + "tslib": "^1.9.3" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/@sentry/tracing/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "dev": true, + "license": "0BSD" + }, + "node_modules/@sentry/types": { + "version": "5.30.0", + "resolved": "https://registry.npmjs.org/@sentry/types/-/types-5.30.0.tgz", + "integrity": "sha512-R8xOqlSTZ+htqrfteCWU5Nk0CDN5ApUTvrlvBuiH1DyP6czDZ4ktbZB0hAgBlVcK0U+qpD3ag3Tqqpa5Q67rPw==", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=6" + } + }, + "node_modules/@sentry/utils": { + "version": "5.30.0", + "resolved": "https://registry.npmjs.org/@sentry/utils/-/utils-5.30.0.tgz", + "integrity": "sha512-zaYmoH0NWWtvnJjC9/CBseXMtKHm/tm40sz3YfJRxeQjyzRqNQPgivpd9R/oDJCYj999mzdW382p/qi2ypjLww==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "@sentry/types": "5.30.0", + "tslib": "^1.9.3" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/@sentry/utils/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "dev": true, + "license": "0BSD" + }, + "node_modules/@solidity-parser/parser": { + "version": "0.14.5", + "resolved": "https://registry.npmjs.org/@solidity-parser/parser/-/parser-0.14.5.tgz", + "integrity": "sha512-6dKnHZn7fg/iQATVEzqyUOyEidbn05q7YA2mQ9hC0MMXhhV3/JrsxmFSYZAcr7j1yUP700LLhTruvJ3MiQmjJg==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "antlr4ts": "^0.5.0-alpha.4" + } + }, + "node_modules/@tsconfig/node10": { + "version": "1.0.12", + "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.12.tgz", + "integrity": "sha512-UCYBaeFvM11aU2y3YPZ//O5Rhj+xKyzy7mvcIoAjASbigy8mHMryP5cK7dgjlz2hWxh1g5pLw084E0a/wlUSFQ==", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/@tsconfig/node12": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.11.tgz", + "integrity": "sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/@tsconfig/node14": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.3.tgz", + "integrity": "sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/@tsconfig/node16": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.4.tgz", + "integrity": "sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA==", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/@typechain/ethers-v6": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/@typechain/ethers-v6/-/ethers-v6-0.5.1.tgz", + "integrity": "sha512-F+GklO8jBWlsaVV+9oHaPh5NJdd6rAKN4tklGfInX1Q7h0xPgVLP39Jl3eCulPB5qexI71ZFHwbljx4ZXNfouA==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "lodash": "^4.17.15", + "ts-essentials": "^7.0.1" + }, + "peerDependencies": { + "ethers": "6.x", + "typechain": "^8.3.2", + "typescript": ">=4.7.0" + } + }, + "node_modules/@typechain/hardhat": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/@typechain/hardhat/-/hardhat-9.1.0.tgz", + "integrity": "sha512-mtaUlzLlkqTlfPwB3FORdejqBskSnh+Jl8AIJGjXNAQfRQ4ofHADPl1+oU7Z3pAJzmZbUXII8MhOLQltcHgKnA==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "fs-extra": "^9.1.0" + }, + "peerDependencies": { + "@typechain/ethers-v6": "^0.5.1", + "ethers": "^6.1.0", + "hardhat": "^2.9.9", + "typechain": "^8.3.2" + } + }, + "node_modules/@typechain/hardhat/node_modules/fs-extra": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", + "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "at-least-node": "^1.0.0", + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@types/bn.js": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/@types/bn.js/-/bn.js-5.2.0.tgz", + "integrity": "sha512-DLbJ1BPqxvQhIGbeu8VbUC1DiAiahHtAYvA0ZEAa4P31F7IaArc8z3C3BRQdWX4mtLQuABG4yzp76ZrS02Ui1Q==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/chai": { + "version": "4.3.20", + "resolved": "https://registry.npmjs.org/@types/chai/-/chai-4.3.20.tgz", + "integrity": "sha512-/pC9HAB5I/xMlc5FP77qjCnI16ChlJfW0tGa0IUcFn38VJrTV6DeZ60NU5KZBtaOZqjdpwTWohz5HU1RrhiYxQ==", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/@types/chai-as-promised": { + "version": "7.1.8", + "resolved": "https://registry.npmjs.org/@types/chai-as-promised/-/chai-as-promised-7.1.8.tgz", + "integrity": "sha512-ThlRVIJhr69FLlh6IctTXFkmhtP3NpMZ2QGq69StYLyKZFp/HOp1VdKZj7RvfNWYYcJ1xlbLGLLWj1UvP5u/Gw==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "@types/chai": "*" + } + }, + "node_modules/@types/concat-stream": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/@types/concat-stream/-/concat-stream-1.6.1.tgz", + "integrity": "sha512-eHE4cQPoj6ngxBZMvVf6Hw7Mh4jMW4U9lpGmS5GBPB9RYxlFg+CHaVN7ErNY4W9XfLIEn20b4VDYaIrbq0q4uA==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/form-data": { + "version": "0.0.33", + "resolved": "https://registry.npmjs.org/@types/form-data/-/form-data-0.0.33.tgz", + "integrity": "sha512-8BSvG1kGm83cyJITQMZSulnl6QV8jqAGreJsc5tPu1Jq0vTSOiY/k24Wx82JRpWwZSqrala6sd5rWi6aNXvqcw==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/glob": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@types/glob/-/glob-7.2.0.tgz", + "integrity": "sha512-ZUxbzKl0IfJILTS6t7ip5fQQM/J3TJYubDm3nMbgubNNYS62eXeUpoLUC8/7fJNiFYHTrGPQn7hspDUzIHX3UA==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "@types/minimatch": "*", + "@types/node": "*" + } + }, + "node_modules/@types/minimatch": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-5.1.2.tgz", + "integrity": "sha512-K0VQKziLUWkVKiRVrx4a40iPaxTUefQmjtkQofBkYRcoaaL/8rhwDWww9qWbrgicNOgnpIsMxyNIUM4+n6dUIA==", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/@types/mocha": { + "version": "10.0.10", + "resolved": "https://registry.npmjs.org/@types/mocha/-/mocha-10.0.10.tgz", + "integrity": "sha512-xPyYSz1cMPnJQhl0CLMH68j3gprKZaTjG3s5Vi+fDgx+uhG9NOXwbVt52eFS8ECyXhyKcjDLCBEqBExKuiZb7Q==", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/@types/node": { + "version": "25.3.3", + "resolved": "https://registry.npmjs.org/@types/node/-/node-25.3.3.tgz", + "integrity": "sha512-DpzbrH7wIcBaJibpKo9nnSQL0MTRdnWttGyE5haGwK86xgMOkFLp7vEyfQPGLOJh5wNYiJ3V9PmUMDhV9u8kkQ==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "undici-types": "~7.18.0" + } + }, + "node_modules/@types/pbkdf2": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@types/pbkdf2/-/pbkdf2-3.1.2.tgz", + "integrity": "sha512-uRwJqmiXmh9++aSu1VNEn3iIxWOhd8AHXNSdlaLfdAAdSTY9jYVeGWnzejM3dvrkbqE3/hyQkQQ29IFATEGlew==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/prettier": { + "version": "2.7.3", + "resolved": "https://registry.npmjs.org/@types/prettier/-/prettier-2.7.3.tgz", + "integrity": "sha512-+68kP9yzs4LMp7VNh8gdzMSPZFL44MLGqiHWvttYJe+6qnuVr4Ek9wSBQoveqY/r+LwjCcU29kNVkidwim+kYA==", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/@types/qs": { + "version": "6.14.0", + "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.14.0.tgz", + "integrity": "sha512-eOunJqu0K1923aExK6y8p6fsihYEn/BYuQ4g0CxAAgFc4b/ZLN4CrsRZ55srTdqoiLzU2B2evC+apEIxprEzkQ==", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/@types/secp256k1": { + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/@types/secp256k1/-/secp256k1-4.0.7.tgz", + "integrity": "sha512-Rcvjl6vARGAKRO6jHeKMatGrvOMGrR/AR11N1x2LqintPCyDZ7NBhrh238Z2VZc7aM7KIwnFpFQ7fnfK4H/9Qw==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/abbrev": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.0.9.tgz", + "integrity": "sha512-LEyx4aLEC3x6T0UguF6YILf+ntvmOaWsVfENmIW0E9H09vKlLDGelMjjSm0jkDHALj8A8quZ/HapKNigzwge+Q==", + "dev": true, + "license": "ISC", + "peer": true + }, + "node_modules/acorn": { + "version": "8.16.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.16.0.tgz", + "integrity": "sha512-UVJyE9MttOsBQIDKw1skb9nAwQuR5wuGD3+82K6JgJlm/Y+KI92oNsMNGZCYdDsVtRHSak0pcV5Dno5+4jh9sw==", + "dev": true, + "license": "MIT", + "peer": true, + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-walk": { + "version": "8.3.5", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.3.5.tgz", + "integrity": "sha512-HEHNfbars9v4pgpW6SO1KSPkfoS0xVOM/9UzkJltjlsHZmJasxg8aXkuZa7SMf8vKGIBhpUsPluQSqhJFCqebw==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "acorn": "^8.11.0" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/adm-zip": { + "version": "0.4.16", + "resolved": "https://registry.npmjs.org/adm-zip/-/adm-zip-0.4.16.tgz", + "integrity": "sha512-TFi4HBKSGfIKsK5YCkKaaFG2m4PEDyViZmEwof3MTIgzimHLto6muaHVpbrljdIvIrFZzEq/p4nafOeLcYegrg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.3.0" + } + }, + "node_modules/aes-js": { + "version": "4.0.0-beta.5", + "resolved": "https://registry.npmjs.org/aes-js/-/aes-js-4.0.0-beta.5.tgz", + "integrity": "sha512-G965FqalsNyrPqgEGON7nIx1e/OVENSgiEIzyC63haUMuvNnwIgIjMs52hlTCKhkBny7A2ORNlfY9Zu+jmGk1Q==", + "dev": true, + "license": "MIT" + }, + "node_modules/agent-base": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", + "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "debug": "4" + }, + "engines": { + "node": ">= 6.0.0" + } + }, + "node_modules/aggregate-error": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", + "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", + "dev": true, + "license": "MIT", + "dependencies": { + "clean-stack": "^2.0.0", + "indent-string": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/ajv": { + "version": "8.18.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.18.0.tgz", + "integrity": "sha512-PlXPeEWMXMZ7sPYOHqmDyCJzcfNrUr3fGNKtezX14ykXOEIvyK81d+qydx89KY5O71FKMPaQ2vBfBFI5NHR63A==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "fast-deep-equal": "^3.1.3", + "fast-uri": "^3.0.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/amdefine": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/amdefine/-/amdefine-1.0.1.tgz", + "integrity": "sha512-S2Hw0TtNkMJhIabBwIojKL9YHO5T0n5eNqWJ7Lrlel/zDbftQpxpapi8tZs3X1HWa+u+QeydGmzzNU0m09+Rcg==", + "dev": true, + "license": "BSD-3-Clause OR MIT", + "optional": true, + "peer": true, + "engines": { + "node": ">=0.4.2" + } + }, + "node_modules/ansi-align": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/ansi-align/-/ansi-align-3.0.1.tgz", + "integrity": "sha512-IOfwwBF5iczOjp/WeY4YxyjqAFMQoZufdQWDd19SEExbVLNXqvpzSJ/M7Za4/sCPmQ0+GRquoA7bGcINcxew6w==", + "dev": true, + "license": "ISC", + "dependencies": { + "string-width": "^4.1.0" + } + }, + "node_modules/ansi-colors": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.3.tgz", + "integrity": "sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/ansi-escapes": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", + "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "type-fest": "^0.21.3" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/antlr4ts": { + "version": "0.5.0-alpha.4", + "resolved": "https://registry.npmjs.org/antlr4ts/-/antlr4ts-0.5.0-alpha.4.tgz", + "integrity": "sha512-WPQDt1B74OfPv/IMS2ekXAKkTZIHl88uMetg6q3OTqgFxZ/dxDXI0EWLyZid/1Pe6hTftyg5N7gel5wNAGxXyQ==", + "dev": true, + "license": "BSD-3-Clause", + "peer": true + }, + "node_modules/anymatch": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", + "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", + "dev": true, + "license": "ISC", + "dependencies": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/arg": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", + "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true, + "license": "Python-2.0" + }, + "node_modules/array-back": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/array-back/-/array-back-3.1.0.tgz", + "integrity": "sha512-TkuxA4UCOvxuDK6NZYXCalszEzj+TLszyASooky+i742l9TqsOdYCMJJupxRic61hwquNtppB3hgcuq9SVSH1Q==", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/array-union": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", + "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/array-uniq": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz", + "integrity": "sha512-MNha4BWQ6JbwhFhj03YK552f7cb3AzoE8SzeljgChvL1dl3IcvggXVz1DilzySZkCja+CXuZbdW7yATchWn8/Q==", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/asap": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", + "integrity": "sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/assertion-error": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-1.1.0.tgz", + "integrity": "sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": "*" + } + }, + "node_modules/astral-regex": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz", + "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/async": { + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/async/-/async-1.5.2.tgz", + "integrity": "sha512-nSVgobk4rv61R9PUSDtYt7mPVB2olxNR5RWJcAsH676/ef11bUZwvu7+RGYrYauVdDPcO519v68wRhXQtxsV9w==", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/at-least-node": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz", + "integrity": "sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==", + "dev": true, + "license": "ISC", + "peer": true, + "engines": { + "node": ">= 4.0.0" + } + }, + "node_modules/available-typed-arrays": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.7.tgz", + "integrity": "sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "possible-typed-array-names": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/axios": { + "version": "1.13.6", + "resolved": "https://registry.npmjs.org/axios/-/axios-1.13.6.tgz", + "integrity": "sha512-ChTCHMouEe2kn713WHbQGcuYrr6fXTBiu460OTwWrWob16g1bXn4vtz07Ope7ewMozJAnEquLk5lWQWtBig9DQ==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "follow-redirects": "^1.15.11", + "form-data": "^4.0.5", + "proxy-from-env": "^1.1.0" + } + }, + "node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true, + "license": "MIT" + }, + "node_modules/base-x": { + "version": "3.0.11", + "resolved": "https://registry.npmjs.org/base-x/-/base-x-3.0.11.tgz", + "integrity": "sha512-xz7wQ8xDhdyP7tQxwdteLYeFfS68tSMNCZ/Y37WJ4bhGfKPpqEIlmIyueQHqOyoPhE6xNUqjzRr8ra0eF9VRvA==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "safe-buffer": "^5.0.1" + } + }, + "node_modules/bech32": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/bech32/-/bech32-1.1.4.tgz", + "integrity": "sha512-s0IrSOzLlbvX7yp4WBfPITzpAU8sqQcpsmwXDiKwrG4r491vwCO/XpejasRNl0piBMe/DvP4Tz0mIS/X1DPJBQ==", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/binary-extensions": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz", + "integrity": "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/blakejs": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/blakejs/-/blakejs-1.2.1.tgz", + "integrity": "sha512-QXUSXI3QVc/gJME0dBpXrag1kbzOqCjCX8/b54ntNyW6sjtoqxqRk3LTmXzaJoh71zMsDCjM+47jS7XiwN/+fQ==", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/bn.js": { + "version": "5.2.3", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.3.tgz", + "integrity": "sha512-EAcmnPkxpntVL+DS7bO1zhcZNvCkxqtkd0ZY53h06GNQ3DEkkGZ/gKgmDv6DdZQGj9BgfSPKtJJ7Dp1GPP8f7w==", + "dev": true, + "license": "MIT" + }, + "node_modules/boxen": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/boxen/-/boxen-5.1.2.tgz", + "integrity": "sha512-9gYgQKXx+1nP8mP7CzFyaUARhg7D3n1dF/FnErWmu9l6JvGpNUN278h0aSb+QjoiKSWG+iZ3uHrcqk0qrY9RQQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-align": "^3.0.0", + "camelcase": "^6.2.0", + "chalk": "^4.1.0", + "cli-boxes": "^2.2.1", + "string-width": "^4.2.2", + "type-fest": "^0.20.2", + "widest-line": "^3.1.0", + "wrap-ansi": "^7.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/boxen/node_modules/type-fest": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", + "dev": true, + "license": "(MIT OR CC0-1.0)", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/brace-expansion": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", + "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/braces": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", + "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", + "dev": true, + "license": "MIT", + "dependencies": { + "fill-range": "^7.1.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/brorand": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz", + "integrity": "sha512-cKV8tMCEpQs4hK/ik71d6LrPOnpkpGBR0wzxqr68g2m/LB2GxVYQroAjMJZRVM1Y4BCjCKc3vAamxSzOY2RP+w==", + "dev": true, + "license": "MIT" + }, + "node_modules/browser-stdout": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz", + "integrity": "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==", + "dev": true, + "license": "ISC" + }, + "node_modules/browserify-aes": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.2.0.tgz", + "integrity": "sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "buffer-xor": "^1.0.3", + "cipher-base": "^1.0.0", + "create-hash": "^1.1.0", + "evp_bytestokey": "^1.0.3", + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" + } + }, + "node_modules/bs58": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/bs58/-/bs58-4.0.1.tgz", + "integrity": "sha512-Ok3Wdf5vOIlBrgCvTq96gBkJw+JUEzdBgyaza5HLtPm7yTHkjRy8+JzNyHF7BHa0bNWOQIp3m5YF0nnFcOIKLw==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "base-x": "^3.0.2" + } + }, + "node_modules/bs58check": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/bs58check/-/bs58check-2.1.2.tgz", + "integrity": "sha512-0TS1jicxdU09dwJMNZtVAfzPi6Q6QeN0pM1Fkzrjn+XYHvzMKPU3pHVpva+769iNVSfIYWf7LJ6WR+BuuMf8cA==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "bs58": "^4.0.0", + "create-hash": "^1.1.0", + "safe-buffer": "^5.1.2" + } + }, + "node_modules/buffer-from": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", + "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/buffer-xor": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/buffer-xor/-/buffer-xor-1.0.3.tgz", + "integrity": "sha512-571s0T7nZWK6vB67HI5dyUF7wXiNcfaPPPTl6zYCNApANjIvYJTg7hlud/+cJpdAhS7dVzqMLmfhfHR3rAcOjQ==", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/bytes": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", + "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/call-bind": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.8.tgz", + "integrity": "sha512-oKlSFMcMwpUg2ednkhQ454wfWiU/ul3CkJe/PEHcTKuiX6RpbehUiFMXu13HalGZxfUwCQzZG747YXBn1im9ww==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "call-bind-apply-helpers": "^1.0.0", + "es-define-property": "^1.0.0", + "get-intrinsic": "^1.2.4", + "set-function-length": "^1.2.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/call-bind-apply-helpers": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz", + "integrity": "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "es-errors": "^1.3.0", + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/call-bound": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/call-bound/-/call-bound-1.0.4.tgz", + "integrity": "sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "call-bind-apply-helpers": "^1.0.2", + "get-intrinsic": "^1.3.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/camelcase": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", + "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/caseless": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", + "integrity": "sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw==", + "dev": true, + "license": "Apache-2.0", + "peer": true + }, + "node_modules/cbor": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/cbor/-/cbor-8.1.0.tgz", + "integrity": "sha512-DwGjNW9omn6EwP70aXsn7FQJx5kO12tX0bZkaTjzdVFM6/7nhA4t0EENocKGx6D2Bch9PE2KzCUf5SceBdeijg==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "nofilter": "^3.1.0" + }, + "engines": { + "node": ">=12.19" + } + }, + "node_modules/chai": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/chai/-/chai-4.5.0.tgz", + "integrity": "sha512-RITGBfijLkBddZvnn8jdqoTypxvqbOLYQkGGxXzeFjVHvudaPw0HNFD9x928/eUwYWd2dPCugVqspGALTZZQKw==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "assertion-error": "^1.1.0", + "check-error": "^1.0.3", + "deep-eql": "^4.1.3", + "get-func-name": "^2.0.2", + "loupe": "^2.3.6", + "pathval": "^1.1.1", + "type-detect": "^4.1.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/chai-as-promised": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/chai-as-promised/-/chai-as-promised-7.1.2.tgz", + "integrity": "sha512-aBDHZxRzYnUYuIAIPBH2s511DjlKPzXNlXSGFC8CwmroWQLfrW0LtE1nK3MAwwNhJPa9raEjNCmRoFpG0Hurdw==", + "dev": true, + "license": "WTFPL", + "peer": true, + "dependencies": { + "check-error": "^1.0.2" + }, + "peerDependencies": { + "chai": ">= 2.1.2 < 6" + } + }, + "node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/charenc": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/charenc/-/charenc-0.0.2.tgz", + "integrity": "sha512-yrLQ/yVUFXkzg7EDQsPieE/53+0RlaWTs+wBrvW36cyilJ2SaDWfl4Yj7MtLTXleV9uEKefbAGUPv2/iWSooRA==", + "dev": true, + "license": "BSD-3-Clause", + "peer": true, + "engines": { + "node": "*" + } + }, + "node_modules/check-error": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/check-error/-/check-error-1.0.3.tgz", + "integrity": "sha512-iKEoDYaRmd1mxM90a2OEfWhjsjPpYPuQ+lMYsoxB126+t8fw7ySEO48nmDg5COTjxDI65/Y2OWpeEHk3ZOe8zg==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "get-func-name": "^2.0.2" + }, + "engines": { + "node": "*" + } + }, + "node_modules/chokidar": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-4.0.3.tgz", + "integrity": "sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==", + "dev": true, + "license": "MIT", + "dependencies": { + "readdirp": "^4.0.1" + }, + "engines": { + "node": ">= 14.16.0" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/ci-info": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz", + "integrity": "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/cipher-base": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.7.tgz", + "integrity": "sha512-Mz9QMT5fJe7bKI7MH31UilT5cEK5EHHRCccw/YRFsRY47AuNgaV6HY3rscp0/I4Q+tTW/5zoqpSeRRI54TkDWA==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "inherits": "^2.0.4", + "safe-buffer": "^5.2.1", + "to-buffer": "^1.2.2" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/clean-stack": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", + "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/cli-boxes": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/cli-boxes/-/cli-boxes-2.2.1.tgz", + "integrity": "sha512-y4coMcylgSCdVinjiDBuR8PCC2bLjyGTwEmPb9NHR/QaNU6EUOXcTY/s6VjGMD6ENSEaeQYHCY0GNGS5jfMwPw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/cli-table3": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/cli-table3/-/cli-table3-0.5.1.tgz", + "integrity": "sha512-7Qg2Jrep1S/+Q3EceiZtQcDPWxhAvBw+ERf1162v4sikJrvojMHFqXt8QIVha8UlH9rgU0BeWPytZ9/TzYqlUw==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "object-assign": "^4.1.0", + "string-width": "^2.1.1" + }, + "engines": { + "node": ">=6" + }, + "optionalDependencies": { + "colors": "^1.1.2" + } + }, + "node_modules/cli-table3/node_modules/ansi-regex": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.1.tgz", + "integrity": "sha512-+O9Jct8wf++lXxxFc4hc8LsjaSq0HFzzL7cVsw8pRDIPdjKD2mT4ytDZlLuSBZ4cLKZFXIrMGO7DbQCtMJJMKw==", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/cli-table3/node_modules/is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha512-VHskAKYM8RfSFXwee5t5cbN5PZeq1Wrh6qd5bkyiXIf6UQcN6w/A0eXM9r6t8d+GYOh+o6ZhiEnb88LN/Y8m2w==", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/cli-table3/node_modules/string-width": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", + "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^4.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/cli-table3/node_modules/strip-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", + "integrity": "sha512-4XaJ2zQdCzROZDivEVIDPkcQn8LMFSa8kj8Gxb/Lnwzv9A8VctNZ+lfivC/sV3ivW8ElJTERXZoPBRrZKkNKow==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "ansi-regex": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/cliui": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", + "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", + "dev": true, + "license": "ISC", + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^7.0.0" + } + }, + "node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true, + "license": "MIT" + }, + "node_modules/colors": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/colors/-/colors-1.4.0.tgz", + "integrity": "sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA==", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">=0.1.90" + } + }, + "node_modules/combined-stream": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "delayed-stream": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/command-exists": { + "version": "1.2.9", + "resolved": "https://registry.npmjs.org/command-exists/-/command-exists-1.2.9.tgz", + "integrity": "sha512-LTQ/SGc+s0Xc0Fu5WaKnR0YiygZkm9eKFvyS+fRsU7/ZWFF8ykFM6Pc9aCVf1+xasOOZpO3BAVgVrKvsqKHV7w==", + "dev": true, + "license": "MIT" + }, + "node_modules/command-line-args": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/command-line-args/-/command-line-args-5.2.1.tgz", + "integrity": "sha512-H4UfQhZyakIjC74I9d34fGYDwk3XpSr17QhEd0Q3I9Xq1CETHo4Hcuo87WyWHpAF1aSLjLRf5lD9ZGX2qStUvg==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "array-back": "^3.1.0", + "find-replace": "^3.0.0", + "lodash.camelcase": "^4.3.0", + "typical": "^4.0.0" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/command-line-usage": { + "version": "6.1.3", + "resolved": "https://registry.npmjs.org/command-line-usage/-/command-line-usage-6.1.3.tgz", + "integrity": "sha512-sH5ZSPr+7UStsloltmDh7Ce5fb8XPlHyoPzTpyyMuYCtervL65+ubVZ6Q61cFtFl62UyJlc8/JwERRbAFPUqgw==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "array-back": "^4.0.2", + "chalk": "^2.4.2", + "table-layout": "^1.0.2", + "typical": "^5.2.0" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/command-line-usage/node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/command-line-usage/node_modules/array-back": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/array-back/-/array-back-4.0.2.tgz", + "integrity": "sha512-NbdMezxqf94cnNfWLL7V/im0Ub+Anbb0IoZhvzie8+4HJ4nMQuzHuy49FkGYCJK2yAloZ3meiB6AVMClbrI1vg==", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/command-line-usage/node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/command-line-usage/node_modules/color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/command-line-usage/node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/command-line-usage/node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/command-line-usage/node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/command-line-usage/node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/command-line-usage/node_modules/typical": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/typical/-/typical-5.2.0.tgz", + "integrity": "sha512-dvdQgNDNJo+8B2uBQoqdb11eUCE1JQXhvjC/CZtgvZseVd5TYMXnq0+vuUemXbd/Se29cTaUuPX3YIc2xgbvIg==", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/commander": { + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-8.3.0.tgz", + "integrity": "sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 12" + } + }, + "node_modules/concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/concat-stream": { + "version": "1.6.2", + "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz", + "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==", + "dev": true, + "engines": [ + "node >= 0.8" + ], + "license": "MIT", + "peer": true, + "dependencies": { + "buffer-from": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^2.2.2", + "typedarray": "^0.0.6" + } + }, + "node_modules/concat-stream/node_modules/isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/concat-stream/node_modules/readable-stream": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "node_modules/concat-stream/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/concat-stream/node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, + "node_modules/cookie": { + "version": "0.4.2", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.2.tgz", + "integrity": "sha512-aSWTXFzaKWkvHO1Ny/s+ePFpvKsPnjc551iI41v3ny/ow6tBG5Vd+FuqGNhh1LxOmVzOlGUriIlOaokOvhaStA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/core-util-is": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", + "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/create-hash": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/create-hash/-/create-hash-1.2.0.tgz", + "integrity": "sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "cipher-base": "^1.0.1", + "inherits": "^2.0.1", + "md5.js": "^1.3.4", + "ripemd160": "^2.0.1", + "sha.js": "^2.4.0" + } + }, + "node_modules/create-hmac": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/create-hmac/-/create-hmac-1.1.7.tgz", + "integrity": "sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "cipher-base": "^1.0.3", + "create-hash": "^1.1.0", + "inherits": "^2.0.1", + "ripemd160": "^2.0.0", + "safe-buffer": "^5.0.1", + "sha.js": "^2.4.8" + } + }, + "node_modules/create-require": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz", + "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/crypt": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/crypt/-/crypt-0.0.2.tgz", + "integrity": "sha512-mCxBlsHFYh9C+HVpiEacem8FEBnMXgU9gy4zmNC+SXAZNB/1idgp/aulFJ4FgCi7GPEVbfyng092GqL2k2rmow==", + "dev": true, + "license": "BSD-3-Clause", + "peer": true, + "engines": { + "node": "*" + } + }, + "node_modules/death": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/death/-/death-1.1.0.tgz", + "integrity": "sha512-vsV6S4KVHvTGxbEcij7hkWRv0It+sGGWVOM67dQde/o5Xjnr+KmLjxWJii2uEObIrt1CcM9w0Yaovx+iOlIL+w==", + "dev": true, + "peer": true + }, + "node_modules/debug": { + "version": "4.4.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", + "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/decamelize": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-4.0.0.tgz", + "integrity": "sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/deep-eql": { + "version": "4.1.4", + "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-4.1.4.tgz", + "integrity": "sha512-SUwdGfqdKOwxCPeVYjwSyRpJ7Z+fhpwIAtmCUdZIWZ/YP5R9WAsyuSgpLVDi9bjWoN2LXHNss/dk3urXtdQxGg==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "type-detect": "^4.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/deep-extend": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", + "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/deep-is": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", + "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/define-data-property": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz", + "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "gopd": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/depd": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", + "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/diff": { + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/diff/-/diff-5.2.2.tgz", + "integrity": "sha512-vtcDfH3TOjP8UekytvnHH1o1P4FcUdt4eQ1Y+Abap1tk/OB2MWQvcwS2ClCd1zuIhc3JKOx6p3kod8Vfys3E+A==", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.3.1" + } + }, + "node_modules/difflib": { + "version": "0.2.4", + "resolved": "https://registry.npmjs.org/difflib/-/difflib-0.2.4.tgz", + "integrity": "sha512-9YVwmMb0wQHQNr5J9m6BSj6fk4pfGITGQOOs+D9Fl+INODWFOfvhIU1hNv6GgR1RBoC/9NJcwu77zShxV0kT7w==", + "dev": true, + "peer": true, + "dependencies": { + "heap": ">= 0.2.0" + }, + "engines": { + "node": "*" + } + }, + "node_modules/dir-glob": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", + "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "path-type": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/dunder-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz", + "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "call-bind-apply-helpers": "^1.0.1", + "es-errors": "^1.3.0", + "gopd": "^1.2.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/elliptic": { + "version": "6.6.1", + "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.6.1.tgz", + "integrity": "sha512-RaddvvMatK2LJHqFJ+YA4WysVN5Ita9E35botqIYspQ4TkRAlCicdzKOjlyv/1Za5RyTNn7di//eEV0uTAfe3g==", + "dev": true, + "license": "MIT", + "dependencies": { + "bn.js": "^4.11.9", + "brorand": "^1.1.0", + "hash.js": "^1.0.0", + "hmac-drbg": "^1.0.1", + "inherits": "^2.0.4", + "minimalistic-assert": "^1.0.1", + "minimalistic-crypto-utils": "^1.0.1" + } + }, + "node_modules/elliptic/node_modules/bn.js": { + "version": "4.12.3", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.3.tgz", + "integrity": "sha512-fGTi3gxV/23FTYdAoUtLYp6qySe2KE3teyZitipKNRuVYcBkoP/bB3guXN/XVKUe9mxCHXnc9C4ocyz8OmgN0g==", + "dev": true, + "license": "MIT" + }, + "node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true, + "license": "MIT" + }, + "node_modules/enquirer": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.4.1.tgz", + "integrity": "sha512-rRqJg/6gd538VHvR3PSrdRBb/1Vy2YfzHqzvbhGIQpDRKIa4FgV/54b5Q1xYSxOOwKvjXweS26E0Q+nAMwp2pQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-colors": "^4.1.1", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/env-paths": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz", + "integrity": "sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/es-define-property": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz", + "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-errors": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", + "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-object-atoms": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.1.tgz", + "integrity": "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "es-errors": "^1.3.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-set-tostringtag": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.1.0.tgz", + "integrity": "sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.6", + "has-tostringtag": "^1.0.2", + "hasown": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/escalade": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", + "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/escodegen": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.8.1.tgz", + "integrity": "sha512-yhi5S+mNTOuRvyW4gWlg5W1byMaQGWWSYHXsuFZ7GBo7tpyOwi2EdzMP/QWxh9hwkD2m+wDVHJsxhRIj+v/b/A==", + "dev": true, + "license": "BSD-2-Clause", + "peer": true, + "dependencies": { + "esprima": "^2.7.1", + "estraverse": "^1.9.1", + "esutils": "^2.0.2", + "optionator": "^0.8.1" + }, + "bin": { + "escodegen": "bin/escodegen.js", + "esgenerate": "bin/esgenerate.js" + }, + "engines": { + "node": ">=0.12.0" + }, + "optionalDependencies": { + "source-map": "~0.2.0" + } + }, + "node_modules/esprima": { + "version": "2.7.3", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-2.7.3.tgz", + "integrity": "sha512-OarPfz0lFCiW4/AV2Oy1Rp9qu0iusTKqykwTspGCZtPxmF81JR4MmIebvF1F9+UOKth2ZubLQ4XGGaU+hSn99A==", + "dev": true, + "license": "BSD-2-Clause", + "peer": true, + "bin": { + "esparse": "bin/esparse.js", + "esvalidate": "bin/esvalidate.js" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/estraverse": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-1.9.3.tgz", + "integrity": "sha512-25w1fMXQrGdoquWnScXZGckOv+Wes+JDnuN/+7ex3SauFRS72r2lFDec0EKPt2YD1wUJ/IrfEex+9yp4hfSOJA==", + "dev": true, + "peer": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", + "dev": true, + "license": "BSD-2-Clause", + "peer": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/eth-gas-reporter": { + "version": "0.2.27", + "resolved": "https://registry.npmjs.org/eth-gas-reporter/-/eth-gas-reporter-0.2.27.tgz", + "integrity": "sha512-femhvoAM7wL0GcI8ozTdxfuBtBFJ9qsyIAsmKVjlWAHUbdnnXHt+lKzz/kmldM5lA9jLuNHGwuIxorNpLbR1Zw==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "@solidity-parser/parser": "^0.14.0", + "axios": "^1.5.1", + "cli-table3": "^0.5.0", + "colors": "1.4.0", + "ethereum-cryptography": "^1.0.3", + "ethers": "^5.7.2", + "fs-readdir-recursive": "^1.1.0", + "lodash": "^4.17.14", + "markdown-table": "^1.1.3", + "mocha": "^10.2.0", + "req-cwd": "^2.0.0", + "sha1": "^1.1.1", + "sync-request": "^6.0.0" + }, + "peerDependencies": { + "@codechecks/client": "^0.1.0" + }, + "peerDependenciesMeta": { + "@codechecks/client": { + "optional": true + } + } + }, + "node_modules/eth-gas-reporter/node_modules/@noble/hashes": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.2.0.tgz", + "integrity": "sha512-FZfhjEDbT5GRswV3C6uvLPHMiVD6lQBmpoX5+eSiPaMTXte/IKqI5dykDxzZB/WBeK/CDuQRBWarPdi3FNY2zQ==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + ], + "license": "MIT", + "peer": true + }, + "node_modules/eth-gas-reporter/node_modules/@scure/base": { + "version": "1.1.9", + "resolved": "https://registry.npmjs.org/@scure/base/-/base-1.1.9.tgz", + "integrity": "sha512-8YKhl8GHiNI/pU2VMaofa2Tor7PJRAjwQLBBuilkJ9L5+13yVbC7JO/wS7piioAvPSwR3JKM1IJ/u4xQzbcXKg==", + "dev": true, + "license": "MIT", + "peer": true, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/eth-gas-reporter/node_modules/@scure/bip32": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/@scure/bip32/-/bip32-1.1.5.tgz", + "integrity": "sha512-XyNh1rB0SkEqd3tXcXMi+Xe1fvg+kUIcoRIEujP1Jgv7DqW2r9lg3Ah0NkFaCs9sTkQAQA8kw7xiRXzENi9Rtw==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + ], + "license": "MIT", + "peer": true, + "dependencies": { + "@noble/hashes": "~1.2.0", + "@noble/secp256k1": "~1.7.0", + "@scure/base": "~1.1.0" + } + }, + "node_modules/eth-gas-reporter/node_modules/@scure/bip39": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@scure/bip39/-/bip39-1.1.1.tgz", + "integrity": "sha512-t+wDck2rVkh65Hmv280fYdVdY25J9YeEUIgn2LG1WM6gxFkGzcksoDiUkWVpVp3Oex9xGC68JU2dSbUfwZ2jPg==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + ], + "license": "MIT", + "peer": true, + "dependencies": { + "@noble/hashes": "~1.2.0", + "@scure/base": "~1.1.0" + } + }, + "node_modules/eth-gas-reporter/node_modules/ethereum-cryptography": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-1.2.0.tgz", + "integrity": "sha512-6yFQC9b5ug6/17CQpCyE3k9eKBMdhyVjzUy1WkiuY/E4vj/SXDBbCw8QEIaXqf0Mf2SnY6RmpDcwlUmBSS0EJw==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "@noble/hashes": "1.2.0", + "@noble/secp256k1": "1.7.1", + "@scure/bip32": "1.1.5", + "@scure/bip39": "1.1.1" + } + }, + "node_modules/eth-gas-reporter/node_modules/ethers": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/ethers/-/ethers-5.8.0.tgz", + "integrity": "sha512-DUq+7fHrCg1aPDFCHx6UIPb3nmt2XMpM7Y/g2gLhsl3lIBqeAfOJIl1qEvRf2uq3BiKxmh6Fh5pfp2ieyek7Kg==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT", + "peer": true, + "dependencies": { + "@ethersproject/abi": "5.8.0", + "@ethersproject/abstract-provider": "5.8.0", + "@ethersproject/abstract-signer": "5.8.0", + "@ethersproject/address": "5.8.0", + "@ethersproject/base64": "5.8.0", + "@ethersproject/basex": "5.8.0", + "@ethersproject/bignumber": "5.8.0", + "@ethersproject/bytes": "5.8.0", + "@ethersproject/constants": "5.8.0", + "@ethersproject/contracts": "5.8.0", + "@ethersproject/hash": "5.8.0", + "@ethersproject/hdnode": "5.8.0", + "@ethersproject/json-wallets": "5.8.0", + "@ethersproject/keccak256": "5.8.0", + "@ethersproject/logger": "5.8.0", + "@ethersproject/networks": "5.8.0", + "@ethersproject/pbkdf2": "5.8.0", + "@ethersproject/properties": "5.8.0", + "@ethersproject/providers": "5.8.0", + "@ethersproject/random": "5.8.0", + "@ethersproject/rlp": "5.8.0", + "@ethersproject/sha2": "5.8.0", + "@ethersproject/signing-key": "5.8.0", + "@ethersproject/solidity": "5.8.0", + "@ethersproject/strings": "5.8.0", + "@ethersproject/transactions": "5.8.0", + "@ethersproject/units": "5.8.0", + "@ethersproject/wallet": "5.8.0", + "@ethersproject/web": "5.8.0", + "@ethersproject/wordlists": "5.8.0" + } + }, + "node_modules/ethereum-bloom-filters": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/ethereum-bloom-filters/-/ethereum-bloom-filters-1.2.0.tgz", + "integrity": "sha512-28hyiE7HVsWubqhpVLVmZXFd4ITeHi+BUu05o9isf0GUpMtzBUi+8/gFrGaGYzvGAJQmJ3JKj77Mk9G98T84rA==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "@noble/hashes": "^1.4.0" + } + }, + "node_modules/ethereum-bloom-filters/node_modules/@noble/hashes": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.8.0.tgz", + "integrity": "sha512-jCs9ldd7NwzpgXDIf6P3+NrHh9/sD6CQdxHyjQI+h/6rDNo88ypBxxz45UDuZHz9r3tNz7N/VInSVoVdtXEI4A==", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": "^14.21.3 || >=16" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/ethereum-cryptography": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-0.1.3.tgz", + "integrity": "sha512-w8/4x1SGGzc+tO97TASLja6SLd3fRIK2tLVcV2Gx4IB21hE19atll5Cq9o3d0ZmAYC/8aw0ipieTSiekAea4SQ==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "@types/pbkdf2": "^3.0.0", + "@types/secp256k1": "^4.0.1", + "blakejs": "^1.1.0", + "browserify-aes": "^1.2.0", + "bs58check": "^2.1.2", + "create-hash": "^1.2.0", + "create-hmac": "^1.1.7", + "hash.js": "^1.1.7", + "keccak": "^3.0.0", + "pbkdf2": "^3.0.17", + "randombytes": "^2.1.0", + "safe-buffer": "^5.1.2", + "scrypt-js": "^3.0.0", + "secp256k1": "^4.0.1", + "setimmediate": "^1.0.5" + } + }, + "node_modules/ethereumjs-util": { + "version": "7.1.5", + "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-7.1.5.tgz", + "integrity": "sha512-SDl5kKrQAudFBUe5OJM9Ac6WmMyYmXX/6sTmLZ3ffG2eY6ZIGBes3pEDxNN6V72WyOw4CPD5RomKdsa8DAAwLg==", + "dev": true, + "license": "MPL-2.0", + "peer": true, + "dependencies": { + "@types/bn.js": "^5.1.0", + "bn.js": "^5.1.2", + "create-hash": "^1.1.2", + "ethereum-cryptography": "^0.1.3", + "rlp": "^2.2.4" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/ethers": { + "version": "6.16.0", + "resolved": "https://registry.npmjs.org/ethers/-/ethers-6.16.0.tgz", + "integrity": "sha512-U1wulmetNymijEhpSEQ7Ct/P/Jw9/e7R1j5XIbPRydgV2DjLVMsULDlNksq3RQnFgKoLlZf88ijYtWEXcPa07A==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/ethers-io/" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT", + "dependencies": { + "@adraffy/ens-normalize": "1.10.1", + "@noble/curves": "1.2.0", + "@noble/hashes": "1.3.2", + "@types/node": "22.7.5", + "aes-js": "4.0.0-beta.5", + "tslib": "2.7.0", + "ws": "8.17.1" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/ethers/node_modules/@types/node": { + "version": "22.7.5", + "resolved": "https://registry.npmjs.org/@types/node/-/node-22.7.5.tgz", + "integrity": "sha512-jML7s2NAzMWc//QSJ1a3prpk78cOPchGvXJsC3C6R6PSMoooztvRVQEz89gmBTBY1SPMaqo5teB4uNHPdetShQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "undici-types": "~6.19.2" + } + }, + "node_modules/ethers/node_modules/undici-types": { + "version": "6.19.8", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.19.8.tgz", + "integrity": "sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw==", + "dev": true, + "license": "MIT" + }, + "node_modules/ethjs-unit": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/ethjs-unit/-/ethjs-unit-0.1.6.tgz", + "integrity": "sha512-/Sn9Y0oKl0uqQuvgFk/zQgR7aw1g36qX/jzSQ5lSwlO0GigPymk4eGQfeNTD03w1dPOqfz8V77Cy43jH56pagw==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "bn.js": "4.11.6", + "number-to-bn": "1.7.0" + }, + "engines": { + "node": ">=6.5.0", + "npm": ">=3" + } + }, + "node_modules/ethjs-unit/node_modules/bn.js": { + "version": "4.11.6", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.6.tgz", + "integrity": "sha512-XWwnNNFCuuSQ0m3r3C4LE3EiORltHd9M05pq6FOlVeiophzRbMo50Sbz1ehl8K3Z+jw9+vmgnXefY1hz8X+2wA==", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/evp_bytestokey": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz", + "integrity": "sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "md5.js": "^1.3.4", + "safe-buffer": "^5.1.1" + } + }, + "node_modules/fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/fast-glob": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.3.tgz", + "integrity": "sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.8" + }, + "engines": { + "node": ">=8.6.0" + } + }, + "node_modules/fast-levenshtein": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/fast-uri": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.1.0.tgz", + "integrity": "sha512-iPeeDKJSWf4IEOasVVrknXpaBV0IApz/gp7S2bb7Z4Lljbl2MGJRqInZiUrQwV16cpzw/D3S5j5Julj/gT52AA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/fastify" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/fastify" + } + ], + "license": "BSD-3-Clause", + "peer": true + }, + "node_modules/fastq": { + "version": "1.20.1", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.20.1.tgz", + "integrity": "sha512-GGToxJ/w1x32s/D2EKND7kTil4n8OVk/9mycTc4VDza13lOvpUZTGX3mFSCtV9ksdGBVzvsyAVLM6mHFThxXxw==", + "dev": true, + "license": "ISC", + "peer": true, + "dependencies": { + "reusify": "^1.0.4" + } + }, + "node_modules/fill-range": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", + "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", + "dev": true, + "license": "MIT", + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/find-replace": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/find-replace/-/find-replace-3.0.0.tgz", + "integrity": "sha512-6Tb2myMioCAgv5kfvP5/PkZZ/ntTpVK39fHY7WkWBgvbeE+VHd/tZuZ4mrC+bxh4cfOZeYKVPaJIZtZXV7GNCQ==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "array-back": "^3.0.1" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "dev": true, + "license": "MIT", + "dependencies": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/flat": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz", + "integrity": "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==", + "dev": true, + "license": "BSD-3-Clause", + "bin": { + "flat": "cli.js" + } + }, + "node_modules/follow-redirects": { + "version": "1.15.11", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.11.tgz", + "integrity": "sha512-deG2P0JfjrTxl50XGCDyfI97ZGVCxIpfKYmfyrQ54n5FO/0gfIES8C/Psl6kWVDolizcaaxZJnTS0QSMxvnsBQ==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/RubenVerborgh" + } + ], + "license": "MIT", + "engines": { + "node": ">=4.0" + }, + "peerDependenciesMeta": { + "debug": { + "optional": true + } + } + }, + "node_modules/for-each": { + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.5.tgz", + "integrity": "sha512-dKx12eRCVIzqCxFGplyFKJMPvLEWgmNtUrpTiJIR5u97zEhRG8ySrtboPHZXx7daLxQVrl643cTzbab2tkQjxg==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "is-callable": "^1.2.7" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/form-data": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.5.tgz", + "integrity": "sha512-8RipRLol37bNs2bhoV67fiTEvdTrbMUYcFTiy3+wuuOnUog2QBHCZWXDRijWQfAkhBj2Uf5UnVaiWwA5vdd82w==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "es-set-tostringtag": "^2.1.0", + "hasown": "^2.0.2", + "mime-types": "^2.1.12" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/fp-ts": { + "version": "1.19.3", + "resolved": "https://registry.npmjs.org/fp-ts/-/fp-ts-1.19.3.tgz", + "integrity": "sha512-H5KQDspykdHuztLTg+ajGN0Z2qUjcEf3Ybxc6hLt0k7/zPkn29XnKnxlBPyW2XIddWrGaJBzBl4VLYOtk39yZg==", + "dev": true, + "license": "MIT" + }, + "node_modules/fs-extra": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", + "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/fs-readdir-recursive": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/fs-readdir-recursive/-/fs-readdir-recursive-1.1.0.tgz", + "integrity": "sha512-GNanXlVr2pf02+sPN40XN8HG+ePaNcvM0q5mZBd668Obwb0yD5GiUbZOFgwn8kGMY6I3mdyDJzieUy3PTYyTRA==", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", + "dev": true, + "license": "ISC" + }, + "node_modules/fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/function-bind": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", + "dev": true, + "license": "MIT", + "peer": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "dev": true, + "license": "ISC", + "engines": { + "node": "6.* || 8.* || >= 10.*" + } + }, + "node_modules/get-func-name": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/get-func-name/-/get-func-name-2.0.2.tgz", + "integrity": "sha512-8vXOvuE167CtIc3OyItco7N/dpRtBbYOsPsXCz7X/PMnlGjYjSGuZJgM1Y7mmew7BKf9BqvLX2tnOVy1BBUsxQ==", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": "*" + } + }, + "node_modules/get-intrinsic": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz", + "integrity": "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "call-bind-apply-helpers": "^1.0.2", + "es-define-property": "^1.0.1", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.1.1", + "function-bind": "^1.1.2", + "get-proto": "^1.0.1", + "gopd": "^1.2.0", + "has-symbols": "^1.1.0", + "hasown": "^2.0.2", + "math-intrinsics": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-port": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/get-port/-/get-port-3.2.0.tgz", + "integrity": "sha512-x5UJKlgeUiNT8nyo/AcnwLnZuZNcSjSw0kogRB+Whd1fjjFq4B1hySFxSFWWSn4mIBzg3sRNUDFYc4g5gjPoLg==", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/get-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz", + "integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "dunder-proto": "^1.0.1", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/ghost-testrpc": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/ghost-testrpc/-/ghost-testrpc-0.0.2.tgz", + "integrity": "sha512-i08dAEgJ2g8z5buJIrCTduwPIhih3DP+hOCTyyryikfV8T0bNvHnGXO67i0DD1H4GBDETTclPy9njZbfluQYrQ==", + "dev": true, + "license": "ISC", + "peer": true, + "dependencies": { + "chalk": "^2.4.2", + "node-emoji": "^1.10.0" + }, + "bin": { + "testrpc-sc": "index.js" + } + }, + "node_modules/ghost-testrpc/node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/ghost-testrpc/node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/ghost-testrpc/node_modules/color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/ghost-testrpc/node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/ghost-testrpc/node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/ghost-testrpc/node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/ghost-testrpc/node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/glob": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-8.1.0.tgz", + "integrity": "sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==", + "deprecated": "Old versions of glob are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting i@izs.me", + "dev": true, + "license": "ISC", + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^5.0.1", + "once": "^1.3.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "license": "ISC", + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/global-modules": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-2.0.0.tgz", + "integrity": "sha512-NGbfmJBp9x8IxyJSd1P+otYK8vonoJactOogrVfFRIAEY1ukil8RSKDz2Yo7wh1oihl51l/r6W4epkeKJHqL8A==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "global-prefix": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/global-prefix": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-3.0.0.tgz", + "integrity": "sha512-awConJSVCHVGND6x3tmMaKcQvwXLhjdkmomy2W+Goaui8YPgYgXJZewhg3fWC+DlfqqQuWg8AwqjGTD2nAPVWg==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "ini": "^1.3.5", + "kind-of": "^6.0.2", + "which": "^1.3.1" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/globby": { + "version": "10.0.2", + "resolved": "https://registry.npmjs.org/globby/-/globby-10.0.2.tgz", + "integrity": "sha512-7dUi7RvCoT/xast/o/dLN53oqND4yk0nsHkhRgn9w65C4PofCLOoJ39iSOg+qVDdWQPIEj+eszMHQ+aLVwwQSg==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "@types/glob": "^7.1.1", + "array-union": "^2.1.0", + "dir-glob": "^3.0.1", + "fast-glob": "^3.0.3", + "glob": "^7.1.3", + "ignore": "^5.1.1", + "merge2": "^1.2.3", + "slash": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/globby/node_modules/brace-expansion": { + "version": "1.1.12", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz", + "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/globby/node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "deprecated": "Old versions of glob are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting i@izs.me", + "dev": true, + "license": "ISC", + "peer": true, + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/globby/node_modules/minimatch": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.5.tgz", + "integrity": "sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w==", + "dev": true, + "license": "ISC", + "peer": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/gopd": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz", + "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/graceful-fs": { + "version": "4.2.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", + "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", + "dev": true, + "license": "ISC" + }, + "node_modules/handlebars": { + "version": "4.7.8", + "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.7.8.tgz", + "integrity": "sha512-vafaFqs8MZkRrSX7sFVUdo3ap/eNiLnb4IakshzvP56X5Nr1iGKAIqdX6tMlm6HcNRIkr6AxO5jFEoJzzpT8aQ==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "minimist": "^1.2.5", + "neo-async": "^2.6.2", + "source-map": "^0.6.1", + "wordwrap": "^1.0.0" + }, + "bin": { + "handlebars": "bin/handlebars" + }, + "engines": { + "node": ">=0.4.7" + }, + "optionalDependencies": { + "uglify-js": "^3.1.4" + } + }, + "node_modules/handlebars/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "license": "BSD-3-Clause", + "peer": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/hardhat": { + "version": "2.28.6", + "resolved": "https://registry.npmjs.org/hardhat/-/hardhat-2.28.6.tgz", + "integrity": "sha512-zQze7qe+8ltwHvhX5NQ8sN1N37WWZGw8L63y+2XcPxGwAjc/SMF829z3NS6o1krX0sryhAsVBK/xrwUqlsot4Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "@ethereumjs/util": "^9.1.0", + "@ethersproject/abi": "^5.1.2", + "@nomicfoundation/edr": "0.12.0-next.23", + "@nomicfoundation/solidity-analyzer": "^0.1.0", + "@sentry/node": "^5.18.1", + "adm-zip": "^0.4.16", + "aggregate-error": "^3.0.0", + "ansi-escapes": "^4.3.0", + "boxen": "^5.1.2", + "chokidar": "^4.0.0", + "ci-info": "^2.0.0", + "debug": "^4.1.1", + "enquirer": "^2.3.0", + "env-paths": "^2.2.0", + "ethereum-cryptography": "^1.0.3", + "find-up": "^5.0.0", + "fp-ts": "1.19.3", + "fs-extra": "^7.0.1", + "immutable": "^4.0.0-rc.12", + "io-ts": "1.10.4", + "json-stream-stringify": "^3.1.4", + "keccak": "^3.0.2", + "lodash": "^4.17.11", + "micro-eth-signer": "^0.14.0", + "mnemonist": "^0.38.0", + "mocha": "^10.0.0", + "p-map": "^4.0.0", + "picocolors": "^1.1.0", + "raw-body": "^2.4.1", + "resolve": "1.17.0", + "semver": "^6.3.0", + "solc": "0.8.26", + "source-map-support": "^0.5.13", + "stacktrace-parser": "^0.1.10", + "tinyglobby": "^0.2.6", + "tsort": "0.0.1", + "undici": "^5.14.0", + "uuid": "^8.3.2", + "ws": "^7.4.6" + }, + "bin": { + "hardhat": "internal/cli/bootstrap.js" + }, + "peerDependencies": { + "ts-node": "*", + "typescript": "*" + }, + "peerDependenciesMeta": { + "ts-node": { + "optional": true + }, + "typescript": { + "optional": true + } + } + }, + "node_modules/hardhat-gas-reporter": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/hardhat-gas-reporter/-/hardhat-gas-reporter-1.0.10.tgz", + "integrity": "sha512-02N4+So/fZrzJ88ci54GqwVA3Zrf0C9duuTyGt0CFRIh/CdNwbnTgkXkRfojOMLBQ+6t+lBIkgbsOtqMvNwikA==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "array-uniq": "1.0.3", + "eth-gas-reporter": "^0.2.25", + "sha1": "^1.1.1" + }, + "peerDependencies": { + "hardhat": "^2.0.2" + } + }, + "node_modules/hardhat/node_modules/@noble/hashes": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.2.0.tgz", + "integrity": "sha512-FZfhjEDbT5GRswV3C6uvLPHMiVD6lQBmpoX5+eSiPaMTXte/IKqI5dykDxzZB/WBeK/CDuQRBWarPdi3FNY2zQ==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + ], + "license": "MIT" + }, + "node_modules/hardhat/node_modules/@scure/base": { + "version": "1.1.9", + "resolved": "https://registry.npmjs.org/@scure/base/-/base-1.1.9.tgz", + "integrity": "sha512-8YKhl8GHiNI/pU2VMaofa2Tor7PJRAjwQLBBuilkJ9L5+13yVbC7JO/wS7piioAvPSwR3JKM1IJ/u4xQzbcXKg==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/hardhat/node_modules/@scure/bip32": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/@scure/bip32/-/bip32-1.1.5.tgz", + "integrity": "sha512-XyNh1rB0SkEqd3tXcXMi+Xe1fvg+kUIcoRIEujP1Jgv7DqW2r9lg3Ah0NkFaCs9sTkQAQA8kw7xiRXzENi9Rtw==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + ], + "license": "MIT", + "dependencies": { + "@noble/hashes": "~1.2.0", + "@noble/secp256k1": "~1.7.0", + "@scure/base": "~1.1.0" + } + }, + "node_modules/hardhat/node_modules/@scure/bip39": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@scure/bip39/-/bip39-1.1.1.tgz", + "integrity": "sha512-t+wDck2rVkh65Hmv280fYdVdY25J9YeEUIgn2LG1WM6gxFkGzcksoDiUkWVpVp3Oex9xGC68JU2dSbUfwZ2jPg==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + ], + "license": "MIT", + "dependencies": { + "@noble/hashes": "~1.2.0", + "@scure/base": "~1.1.0" + } + }, + "node_modules/hardhat/node_modules/ethereum-cryptography": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-1.2.0.tgz", + "integrity": "sha512-6yFQC9b5ug6/17CQpCyE3k9eKBMdhyVjzUy1WkiuY/E4vj/SXDBbCw8QEIaXqf0Mf2SnY6RmpDcwlUmBSS0EJw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@noble/hashes": "1.2.0", + "@noble/secp256k1": "1.7.1", + "@scure/bip32": "1.1.5", + "@scure/bip39": "1.1.1" + } + }, + "node_modules/hardhat/node_modules/fs-extra": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-7.0.1.tgz", + "integrity": "sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==", + "dev": true, + "license": "MIT", + "dependencies": { + "graceful-fs": "^4.1.2", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" + }, + "engines": { + "node": ">=6 <7 || >=8" + } + }, + "node_modules/hardhat/node_modules/jsonfile": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", + "integrity": "sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==", + "dev": true, + "license": "MIT", + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/hardhat/node_modules/solc": { + "version": "0.8.26", + "resolved": "https://registry.npmjs.org/solc/-/solc-0.8.26.tgz", + "integrity": "sha512-yiPQNVf5rBFHwN6SIf3TUUvVAFKcQqmSUFeq+fb6pNRCo0ZCgpYOZDi3BVoezCPIAcKrVYd/qXlBLUP9wVrZ9g==", + "dev": true, + "license": "MIT", + "dependencies": { + "command-exists": "^1.2.8", + "commander": "^8.1.0", + "follow-redirects": "^1.12.1", + "js-sha3": "0.8.0", + "memorystream": "^0.3.1", + "semver": "^5.5.0", + "tmp": "0.0.33" + }, + "bin": { + "solcjs": "solc.js" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/hardhat/node_modules/solc/node_modules/semver": { + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", + "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/hardhat/node_modules/universalify": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", + "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 4.0.0" + } + }, + "node_modules/hardhat/node_modules/ws": { + "version": "7.5.10", + "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.10.tgz", + "integrity": "sha512-+dbF1tHwZpXcbOJdVOkzLDxZP1ailvSxM6ZweXTegylPny803bFhA+vqBYw4s31NSAk4S2Qz+AKXK9a4wkdjcQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8.3.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": "^5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } + } + }, + "node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/has-property-descriptors": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz", + "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "es-define-property": "^1.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-symbols": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz", + "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-tostringtag": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz", + "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "has-symbols": "^1.0.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/hash-base": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.1.2.tgz", + "integrity": "sha512-Bb33KbowVTIj5s7Ked1OsqHUeCpz//tPwR+E2zJgJKo9Z5XolZ9b6bdUgjmYlwnWhoOQKoTd1TYToZGn5mAYOg==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "inherits": "^2.0.4", + "readable-stream": "^2.3.8", + "safe-buffer": "^5.2.1", + "to-buffer": "^1.2.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/hash-base/node_modules/isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/hash-base/node_modules/readable-stream": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "node_modules/hash-base/node_modules/readable-stream/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/hash-base/node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, + "node_modules/hash-base/node_modules/string_decoder/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/hash.js": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz", + "integrity": "sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==", + "dev": true, + "license": "MIT", + "dependencies": { + "inherits": "^2.0.3", + "minimalistic-assert": "^1.0.1" + } + }, + "node_modules/hasown": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", + "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/he": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", + "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", + "dev": true, + "license": "MIT", + "bin": { + "he": "bin/he" + } + }, + "node_modules/heap": { + "version": "0.2.7", + "resolved": "https://registry.npmjs.org/heap/-/heap-0.2.7.tgz", + "integrity": "sha512-2bsegYkkHO+h/9MGbn6KWcE45cHZgPANo5LXF7EvWdT0yT2EguSVO1nDgU5c8+ZOPwp2vMNa7YFsJhVcDR9Sdg==", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/hmac-drbg": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz", + "integrity": "sha512-Tti3gMqLdZfhOQY1Mzf/AanLiqh1WTiJgEj26ZuYQ9fbkLomzGchCws4FyrSd4VkpBfiNhaE1On+lOz894jvXg==", + "dev": true, + "license": "MIT", + "dependencies": { + "hash.js": "^1.0.3", + "minimalistic-assert": "^1.0.0", + "minimalistic-crypto-utils": "^1.0.1" + } + }, + "node_modules/http-basic": { + "version": "8.1.3", + "resolved": "https://registry.npmjs.org/http-basic/-/http-basic-8.1.3.tgz", + "integrity": "sha512-/EcDMwJZh3mABI2NhGfHOGOeOZITqfkEO4p/xK+l3NpyncIHUQBoMvCSF/b5GqvKtySC2srL/GGG3+EtlqlmCw==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "caseless": "^0.12.0", + "concat-stream": "^1.6.2", + "http-response-object": "^3.0.1", + "parse-cache-control": "^1.0.1" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/http-errors": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.1.tgz", + "integrity": "sha512-4FbRdAX+bSdmo4AUFuS0WNiPz8NgFt+r8ThgNWmlrjQjt1Q7ZR9+zTlce2859x4KSXrwIsaeTqDoKQmtP8pLmQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "depd": "~2.0.0", + "inherits": "~2.0.4", + "setprototypeof": "~1.2.0", + "statuses": "~2.0.2", + "toidentifier": "~1.0.1" + }, + "engines": { + "node": ">= 0.8" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/http-response-object": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/http-response-object/-/http-response-object-3.0.2.tgz", + "integrity": "sha512-bqX0XTF6fnXSQcEJ2Iuyr75yVakyjIDCqroJQ/aHfSdlM743Cwqoi2nDYMzLGWUcuTWGWy8AAvOKXTfiv6q9RA==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "@types/node": "^10.0.3" + } + }, + "node_modules/http-response-object/node_modules/@types/node": { + "version": "10.17.60", + "resolved": "https://registry.npmjs.org/@types/node/-/node-10.17.60.tgz", + "integrity": "sha512-F0KIgDJfy2nA3zMLmWGKxcH2ZVEtCZXHHdOQs2gSaQ27+lNeEfGxzkIw90aXswATX7AZ33tahPbzy6KAfUreVw==", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/https-proxy-agent": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", + "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==", + "dev": true, + "license": "MIT", + "dependencies": { + "agent-base": "6", + "debug": "4" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "dev": true, + "license": "MIT", + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ignore": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz", + "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">= 4" + } + }, + "node_modules/immer": { + "version": "10.0.2", + "resolved": "https://registry.npmjs.org/immer/-/immer-10.0.2.tgz", + "integrity": "sha512-Rx3CqeqQ19sxUtYV9CU911Vhy8/721wRFnJv3REVGWUmoAcIwzifTsdmJte/MV+0/XpM35LZdQMBGkRIoLPwQA==", + "dev": true, + "license": "MIT", + "peer": true, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/immer" + } + }, + "node_modules/immutable": { + "version": "4.3.8", + "resolved": "https://registry.npmjs.org/immutable/-/immutable-4.3.8.tgz", + "integrity": "sha512-d/Ld9aLbKpNwyl0KiM2CT1WYvkitQ1TSvmRtkcV8FKStiDoA7Slzgjmb/1G2yhKM1p0XeNOieaTbFZmU1d3Xuw==", + "dev": true, + "license": "MIT" + }, + "node_modules/indent-string": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", + "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", + "deprecated": "This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful.", + "dev": true, + "license": "ISC", + "dependencies": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "dev": true, + "license": "ISC" + }, + "node_modules/ini": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", + "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", + "dev": true, + "license": "ISC", + "peer": true + }, + "node_modules/interpret": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.4.0.tgz", + "integrity": "sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA==", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/io-ts": { + "version": "1.10.4", + "resolved": "https://registry.npmjs.org/io-ts/-/io-ts-1.10.4.tgz", + "integrity": "sha512-b23PteSnYXSONJ6JQXRAlvJhuw8KOtkqa87W4wDtvMrud/DTJd5X+NpOOI+O/zZwVq6v0VLAaJ+1EDViKEuN9g==", + "dev": true, + "license": "MIT", + "dependencies": { + "fp-ts": "^1.0.0" + } + }, + "node_modules/is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "dev": true, + "license": "MIT", + "dependencies": { + "binary-extensions": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-callable": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", + "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-hex-prefixed": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-hex-prefixed/-/is-hex-prefixed-1.0.0.tgz", + "integrity": "sha512-WvtOiug1VFrE9v1Cydwm+FnXd3+w9GaeVUss5W4v/SLy3UW00vP+6iNF2SdnfiBoLy4bTqVdkftNGTUeOFVsbA==", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">=6.5.0", + "npm": ">=3" + } + }, + "node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/is-plain-obj": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz", + "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/is-typed-array": { + "version": "1.1.15", + "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.15.tgz", + "integrity": "sha512-p3EcsicXjit7SaskXHs1hA91QxgTw46Fv6EFKKGS5DRFLD8yKnohjF3hxoju94b/OcMZoQukzpPpBE9uLVKzgQ==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "which-typed-array": "^1.1.16" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-unicode-supported": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", + "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/isarray": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", + "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "dev": true, + "license": "ISC", + "peer": true + }, + "node_modules/js-sha3": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/js-sha3/-/js-sha3-0.8.0.tgz", + "integrity": "sha512-gF1cRrHhIzNfToc802P800N8PpXS+evLLXfsVpowqmAFR9uwbi89WvXg2QspOmXL8QL86J4T1EpFu+yUkwJY3Q==", + "dev": true, + "license": "MIT" + }, + "node_modules/js-yaml": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.1.tgz", + "integrity": "sha512-qQKT4zQxXl8lLwBtHMWwaTcGfFOZviOJet3Oy/xmGk2gZH677CJM9EvtfdSkgWcATZhj/55JZ0rmy3myCT5lsA==", + "dev": true, + "license": "MIT", + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/json-stream-stringify": { + "version": "3.1.6", + "resolved": "https://registry.npmjs.org/json-stream-stringify/-/json-stream-stringify-3.1.6.tgz", + "integrity": "sha512-x7fpwxOkbhFCaJDJ8vb1fBY3DdSa4AlITaz+HHILQJzdPMnHEFjxPwVUi1ALIbcIxDE0PNe/0i7frnY8QnBQog==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=7.10.1" + } + }, + "node_modules/json-stringify-safe": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", + "integrity": "sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==", + "dev": true, + "license": "ISC", + "peer": true + }, + "node_modules/json5": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", + "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", + "dev": true, + "license": "MIT", + "peer": true, + "bin": { + "json5": "lib/cli.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/jsonfile": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.2.0.tgz", + "integrity": "sha512-FGuPw30AdOIUTRMC2OMRtQV+jkVj2cfPqSeWXv1NEAJ1qZ5zb1X6z1mFhbfOB/iy3ssJCD+3KuZ8r8C3uVFlAg==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "universalify": "^2.0.0" + }, + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/jsonschema": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/jsonschema/-/jsonschema-1.5.0.tgz", + "integrity": "sha512-K+A9hhqbn0f3pJX17Q/7H6yQfD/5OXgdrR5UE12gMXCiN9D5Xq2o5mddV2QEcX/bjla99ASsAAQUyMCCRWAEhw==", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": "*" + } + }, + "node_modules/keccak": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/keccak/-/keccak-3.0.4.tgz", + "integrity": "sha512-3vKuW0jV8J3XNTzvfyicFR5qvxrSAGl7KIhvgOu5cmWwM7tZRj3fMbj/pfIf4be7aznbc+prBWGjywox/g2Y6Q==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "dependencies": { + "node-addon-api": "^2.0.0", + "node-gyp-build": "^4.2.0", + "readable-stream": "^3.6.0" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/kind-of": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", + "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/kleur": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz", + "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/levn": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", + "integrity": "sha512-0OO4y2iOHix2W6ujICbKIaEQXvFQHue65vUG3pb5EUomzPI90z9hsA1VsO/dbIIpC53J8gxM9Q4Oho0jrCM/yA==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "prelude-ls": "~1.1.2", + "type-check": "~0.3.2" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/locate-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "dev": true, + "license": "MIT", + "dependencies": { + "p-locate": "^5.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", + "dev": true, + "license": "MIT" + }, + "node_modules/lodash.camelcase": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz", + "integrity": "sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA==", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/lodash.clonedeep": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz", + "integrity": "sha512-H5ZhCF25riFd9uB5UCkVKo61m3S/xZk1x4wA6yp/L3RFP6Z/eHH1ymQcGLo7J3GMPfm0V/7m1tryHuGVxpqEBQ==", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/lodash.isequal": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.isequal/-/lodash.isequal-4.5.0.tgz", + "integrity": "sha512-pDo3lu8Jhfjqls6GkMgpahsF9kCyayhgykjyLMNFTKWrpVdAQtYyB4muAMWozBB4ig/dtWAmsMxLEI8wuz+DYQ==", + "deprecated": "This package is deprecated. Use require('node:util').isDeepStrictEqual instead.", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/lodash.truncate": { + "version": "4.4.2", + "resolved": "https://registry.npmjs.org/lodash.truncate/-/lodash.truncate-4.4.2.tgz", + "integrity": "sha512-jttmRe7bRse52OsWIMDLaXxWqRAmtIUccAQ3garviCqJjafXOfNMO0yMfNpdD6zbGaTU0P5Nz7e7gAT6cKmJRw==", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/log-symbols": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", + "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", + "dev": true, + "license": "MIT", + "dependencies": { + "chalk": "^4.1.0", + "is-unicode-supported": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/loupe": { + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/loupe/-/loupe-2.3.7.tgz", + "integrity": "sha512-zSMINGVYkdpYSOBmLi0D1Uo7JU9nVdQKrHxC8eYlV+9YKK9WePqAlL7lSlorG/U2Fw1w0hTBmaa/jrQ3UbPHtA==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "get-func-name": "^2.0.1" + } + }, + "node_modules/lru_map": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/lru_map/-/lru_map-0.3.3.tgz", + "integrity": "sha512-Pn9cox5CsMYngeDbmChANltQl+5pi6XmTrraMSzhPmMBbmgcxmqWry0U3PGapCU1yB4/LqCcom7qhHZiF/jGfQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/make-error": { + "version": "1.3.6", + "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", + "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==", + "dev": true, + "license": "ISC", + "peer": true + }, + "node_modules/markdown-table": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/markdown-table/-/markdown-table-1.1.3.tgz", + "integrity": "sha512-1RUZVgQlpJSPWYbFSpmudq5nHY1doEIv89gBtF0s4gW1GF2XorxcA/70M5vq7rLv0a6mhOUccRsqkwhwLCIQ2Q==", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/math-intrinsics": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz", + "integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/md5.js": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.5.tgz", + "integrity": "sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "hash-base": "^3.0.0", + "inherits": "^2.0.1", + "safe-buffer": "^5.1.2" + } + }, + "node_modules/memorystream": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/memorystream/-/memorystream-0.3.1.tgz", + "integrity": "sha512-S3UwM3yj5mtUSEfP41UZmt/0SCoVYUcU1rkXv+BQ5Ig8ndL4sPoJNBUJERafdPb5jjHJGuMgytgKvKIf58XNBw==", + "dev": true, + "engines": { + "node": ">= 0.10.0" + } + }, + "node_modules/merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">= 8" + } + }, + "node_modules/micro-eth-signer": { + "version": "0.14.0", + "resolved": "https://registry.npmjs.org/micro-eth-signer/-/micro-eth-signer-0.14.0.tgz", + "integrity": "sha512-5PLLzHiVYPWClEvZIXXFu5yutzpadb73rnQCpUqIHu3No3coFuWQNfE5tkBQJ7djuLYl6aRLaS0MgWJYGoqiBw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@noble/curves": "~1.8.1", + "@noble/hashes": "~1.7.1", + "micro-packed": "~0.7.2" + } + }, + "node_modules/micro-eth-signer/node_modules/@noble/curves": { + "version": "1.8.2", + "resolved": "https://registry.npmjs.org/@noble/curves/-/curves-1.8.2.tgz", + "integrity": "sha512-vnI7V6lFNe0tLAuJMu+2sX+FcL14TaCWy1qiczg1VwRmPrpQCdq5ESXQMqUc2tluRNf6irBXrWbl1mGN8uaU/g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@noble/hashes": "1.7.2" + }, + "engines": { + "node": "^14.21.3 || >=16" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/micro-eth-signer/node_modules/@noble/hashes": { + "version": "1.7.2", + "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.7.2.tgz", + "integrity": "sha512-biZ0NUSxyjLLqo6KxEJ1b+C2NAx0wtDoFvCaXHGgUkeHzf3Xc1xKumFKREuT7f7DARNZ/slvYUwFG6B0f2b6hQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^14.21.3 || >=16" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/micro-ftch": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/micro-ftch/-/micro-ftch-0.3.1.tgz", + "integrity": "sha512-/0LLxhzP0tfiR5hcQebtudP56gUurs2CLkGarnCiB/OqEyUFQ6U3paQi/tgLv0hBJYt2rnr9MNpxz4fiiugstg==", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/micro-packed": { + "version": "0.7.3", + "resolved": "https://registry.npmjs.org/micro-packed/-/micro-packed-0.7.3.tgz", + "integrity": "sha512-2Milxs+WNC00TRlem41oRswvw31146GiSaoCT7s3Xi2gMUglW5QBeqlQaZeHr5tJx9nm3i57LNXPqxOOaWtTYg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@scure/base": "~1.2.5" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/micromatch": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", + "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "braces": "^3.0.3", + "picomatch": "^2.3.1" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "mime-db": "1.52.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/minimalistic-assert": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", + "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==", + "dev": true, + "license": "ISC" + }, + "node_modules/minimalistic-crypto-utils": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz", + "integrity": "sha512-JIYlbt6g8i5jKfJ3xz7rF0LXmv2TkDxBLUkiBeZ7bAx4GnnNMr8xFpGnOxn6GhTEHx3SjRrZEoU+j04prX1ktg==", + "dev": true, + "license": "MIT" + }, + "node_modules/minimatch": { + "version": "5.1.9", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.9.tgz", + "integrity": "sha512-7o1wEA2RyMP7Iu7GNba9vc0RWWGACJOCZBJX2GJWip0ikV+wcOsgVuY9uE8CPiyQhkGFSlhuSkZPavN7u1c2Fw==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/minimist": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", + "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", + "dev": true, + "license": "MIT", + "peer": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/mkdirp": { + "version": "0.5.6", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", + "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "minimist": "^1.2.6" + }, + "bin": { + "mkdirp": "bin/cmd.js" + } + }, + "node_modules/mnemonist": { + "version": "0.38.5", + "resolved": "https://registry.npmjs.org/mnemonist/-/mnemonist-0.38.5.tgz", + "integrity": "sha512-bZTFT5rrPKtPJxj8KSV0WkPyNxl72vQepqqVUAW2ARUpUSF2qXMB6jZj7hW5/k7C1rtpzqbD/IIbJwLXUjCHeg==", + "dev": true, + "license": "MIT", + "dependencies": { + "obliterator": "^2.0.0" + } + }, + "node_modules/mocha": { + "version": "10.8.2", + "resolved": "https://registry.npmjs.org/mocha/-/mocha-10.8.2.tgz", + "integrity": "sha512-VZlYo/WE8t1tstuRmqgeyBgCbJc/lEdopaa+axcKzTBJ+UIdlAB9XnmvTCAH4pwR4ElNInaedhEBmZD8iCSVEg==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-colors": "^4.1.3", + "browser-stdout": "^1.3.1", + "chokidar": "^3.5.3", + "debug": "^4.3.5", + "diff": "^5.2.0", + "escape-string-regexp": "^4.0.0", + "find-up": "^5.0.0", + "glob": "^8.1.0", + "he": "^1.2.0", + "js-yaml": "^4.1.0", + "log-symbols": "^4.1.0", + "minimatch": "^5.1.6", + "ms": "^2.1.3", + "serialize-javascript": "^6.0.2", + "strip-json-comments": "^3.1.1", + "supports-color": "^8.1.1", + "workerpool": "^6.5.1", + "yargs": "^16.2.0", + "yargs-parser": "^20.2.9", + "yargs-unparser": "^2.0.0" + }, + "bin": { + "_mocha": "bin/_mocha", + "mocha": "bin/mocha.js" + }, + "engines": { + "node": ">= 14.0.0" + } + }, + "node_modules/mocha/node_modules/chokidar": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz", + "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==", + "dev": true, + "license": "MIT", + "dependencies": { + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" + }, + "engines": { + "node": ">= 8.10.0" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + } + }, + "node_modules/mocha/node_modules/readdirp": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "dev": true, + "license": "MIT", + "dependencies": { + "picomatch": "^2.2.1" + }, + "engines": { + "node": ">=8.10.0" + } + }, + "node_modules/mocha/node_modules/supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" + } + }, + "node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true, + "license": "MIT" + }, + "node_modules/ndjson": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ndjson/-/ndjson-2.0.0.tgz", + "integrity": "sha512-nGl7LRGrzugTtaFcJMhLbpzJM6XdivmbkdlaGcrk/LXg2KL/YBC6z1g70xh0/al+oFuVFP8N8kiWRucmeEH/qQ==", + "dev": true, + "license": "BSD-3-Clause", + "peer": true, + "dependencies": { + "json-stringify-safe": "^5.0.1", + "minimist": "^1.2.5", + "readable-stream": "^3.6.0", + "split2": "^3.0.0", + "through2": "^4.0.0" + }, + "bin": { + "ndjson": "cli.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/neo-async": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", + "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/node-addon-api": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-2.0.2.tgz", + "integrity": "sha512-Ntyt4AIXyaLIuMHF6IOoTakB3K+RWxwtsHNRxllEoA6vPwP9o4866g6YWDLUdnucilZhmkxiHwHr11gAENw+QA==", + "dev": true, + "license": "MIT" + }, + "node_modules/node-emoji": { + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/node-emoji/-/node-emoji-1.11.0.tgz", + "integrity": "sha512-wo2DpQkQp7Sjm2A0cq+sN7EHKO6Sl0ctXeBdFZrL9T9+UywORbufTcTZxom8YqpLQt/FqNMUkOpkZrJVYSKD3A==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "lodash": "^4.17.21" + } + }, + "node_modules/node-gyp-build": { + "version": "4.8.4", + "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.8.4.tgz", + "integrity": "sha512-LA4ZjwlnUblHVgq0oBF3Jl/6h/Nvs5fzBLwdEF4nuxnFdsfajde4WfxtJr3CaiH+F6ewcIB/q4jQ4UzPyid+CQ==", + "dev": true, + "license": "MIT", + "bin": { + "node-gyp-build": "bin.js", + "node-gyp-build-optional": "optional.js", + "node-gyp-build-test": "build-test.js" + } + }, + "node_modules/nofilter": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/nofilter/-/nofilter-3.1.0.tgz", + "integrity": "sha512-l2NNj07e9afPnhAhvgVrCD/oy2Ai1yfLpuo3EpiO1jFTsB4sFz6oIfAfSZyQzVpkZQ9xS8ZS5g1jCBgq4Hwo0g==", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">=12.19" + } + }, + "node_modules/nopt": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-3.0.6.tgz", + "integrity": "sha512-4GUt3kSEYmk4ITxzB/b9vaIDfUVWN/Ml1Fwl11IlnIG2iaJ9O6WXZ9SrYM9NLI8OCBieN2Y8SWC2oJV0RQ7qYg==", + "dev": true, + "license": "ISC", + "peer": true, + "dependencies": { + "abbrev": "1" + }, + "bin": { + "nopt": "bin/nopt.js" + } + }, + "node_modules/normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/number-to-bn": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/number-to-bn/-/number-to-bn-1.7.0.tgz", + "integrity": "sha512-wsJ9gfSz1/s4ZsJN01lyonwuxA1tml6X1yBDnfpMglypcBRFZZkus26EdPSlqS5GJfYddVZa22p3VNb3z5m5Ig==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "bn.js": "4.11.6", + "strip-hex-prefix": "1.0.0" + }, + "engines": { + "node": ">=6.5.0", + "npm": ">=3" + } + }, + "node_modules/number-to-bn/node_modules/bn.js": { + "version": "4.11.6", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.6.tgz", + "integrity": "sha512-XWwnNNFCuuSQ0m3r3C4LE3EiORltHd9M05pq6FOlVeiophzRbMo50Sbz1ehl8K3Z+jw9+vmgnXefY1hz8X+2wA==", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-inspect": { + "version": "1.13.4", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.4.tgz", + "integrity": "sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/obliterator": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/obliterator/-/obliterator-2.0.5.tgz", + "integrity": "sha512-42CPE9AhahZRsMNslczq0ctAEtqk8Eka26QofnqC346BZdHDySk3LWka23LI7ULIw11NmltpiLagIq8gBozxTw==", + "dev": true, + "license": "MIT" + }, + "node_modules/once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", + "dev": true, + "license": "ISC", + "dependencies": { + "wrappy": "1" + } + }, + "node_modules/optionator": { + "version": "0.8.3", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz", + "integrity": "sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "deep-is": "~0.1.3", + "fast-levenshtein": "~2.0.6", + "levn": "~0.3.0", + "prelude-ls": "~1.1.2", + "type-check": "~0.3.2", + "word-wrap": "~1.2.3" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/ordinal": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/ordinal/-/ordinal-1.0.3.tgz", + "integrity": "sha512-cMddMgb2QElm8G7vdaa02jhUNbTSrhsgAGUz1OokD83uJTwSUn+nKoNoKVVaRa08yF6sgfO7Maou1+bgLd9rdQ==", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/os-tmpdir": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", + "integrity": "sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "yocto-queue": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "dev": true, + "license": "MIT", + "dependencies": { + "p-limit": "^3.0.2" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-map": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz", + "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "aggregate-error": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/parse-cache-control": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parse-cache-control/-/parse-cache-control-1.0.1.tgz", + "integrity": "sha512-60zvsJReQPX5/QP0Kzfd/VrpjScIQ7SHBW6bFCYfEP+fp0Eppr1SHhIO5nd1PjZtvclzSzES9D/p5nFJurwfWg==", + "dev": true, + "peer": true + }, + "node_modules/path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", + "dev": true, + "license": "MIT" + }, + "node_modules/path-type": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", + "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/pathval": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/pathval/-/pathval-1.1.1.tgz", + "integrity": "sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": "*" + } + }, + "node_modules/pbkdf2": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.1.5.tgz", + "integrity": "sha512-Q3CG/cYvCO1ye4QKkuH7EXxs3VC/rI1/trd+qX2+PolbaKG0H+bgcZzrTt96mMyRtejk+JMCiLUn3y29W8qmFQ==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "create-hash": "^1.2.0", + "create-hmac": "^1.1.7", + "ripemd160": "^2.0.3", + "safe-buffer": "^5.2.1", + "sha.js": "^2.4.12", + "to-buffer": "^1.2.1" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/picocolors": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", + "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", + "dev": true, + "license": "ISC" + }, + "node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/pify": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", + "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/possible-typed-array-names": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/possible-typed-array-names/-/possible-typed-array-names-1.1.0.tgz", + "integrity": "sha512-/+5VFTchJDoVj3bhoqi6UeymcD00DAwb1nJwamzPvHEszJ4FpF6SNNbUbOS8yI56qHzdV8eK0qEfOSiodkTdxg==", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/prelude-ls": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", + "integrity": "sha512-ESF23V4SKG6lVSGZgYNpbsiaAkdab6ZgOxe52p7+Kid3W3u3bxR4Vfd/o21dmN7jSt0IwgZ4v5MUd26FEtXE9w==", + "dev": true, + "peer": true, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/prettier": { + "version": "2.8.8", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.8.8.tgz", + "integrity": "sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q==", + "dev": true, + "license": "MIT", + "peer": true, + "bin": { + "prettier": "bin-prettier.js" + }, + "engines": { + "node": ">=10.13.0" + }, + "funding": { + "url": "https://github.com/prettier/prettier?sponsor=1" + } + }, + "node_modules/process-nextick-args": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", + "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/promise": { + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/promise/-/promise-8.3.0.tgz", + "integrity": "sha512-rZPNPKTOYVNEEKFaq1HqTgOwZD+4/YHS5ukLzQCypkj+OkYx7iv0mA91lJlpPPZ8vMau3IIGj5Qlwrx+8iiSmg==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "asap": "~2.0.6" + } + }, + "node_modules/prompts": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.2.tgz", + "integrity": "sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "kleur": "^3.0.3", + "sisteransi": "^1.0.5" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/proxy-from-env": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", + "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/qs": { + "version": "6.15.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.15.0.tgz", + "integrity": "sha512-mAZTtNCeetKMH+pSjrb76NAM8V9a05I9aBZOHztWy/UqcJdQYNsf59vrRKWnojAT9Y+GbIvoTBC++CPHqpDBhQ==", + "dev": true, + "license": "BSD-3-Clause", + "peer": true, + "dependencies": { + "side-channel": "^1.1.0" + }, + "engines": { + "node": ">=0.6" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT", + "peer": true + }, + "node_modules/randombytes": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", + "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "safe-buffer": "^5.1.0" + } + }, + "node_modules/raw-body": { + "version": "2.5.3", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.3.tgz", + "integrity": "sha512-s4VSOf6yN0rvbRZGxs8Om5CWj6seneMwK3oDb4lWDH0UPhWcxwOWw5+qk24bxq87szX1ydrwylIOp2uG1ojUpA==", + "dev": true, + "license": "MIT", + "dependencies": { + "bytes": "~3.1.2", + "http-errors": "~2.0.1", + "iconv-lite": "~0.4.24", + "unpipe": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/readable-stream": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "dev": true, + "license": "MIT", + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/readdirp": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-4.1.2.tgz", + "integrity": "sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 14.18.0" + }, + "funding": { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/rechoir": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.6.2.tgz", + "integrity": "sha512-HFM8rkZ+i3zrV+4LQjwQ0W+ez98pApMGM3HUrN04j3CqzPOzl9nmP15Y8YXNm8QHGv/eacOVEjqhmWpkRV0NAw==", + "dev": true, + "peer": true, + "dependencies": { + "resolve": "^1.1.6" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/recursive-readdir": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/recursive-readdir/-/recursive-readdir-2.2.3.tgz", + "integrity": "sha512-8HrF5ZsXk5FAH9dgsx3BlUer73nIhuj+9OrQwEbLTPOBzGkL1lsFCR01am+v+0m2Cmbs1nP12hLDl5FA7EszKA==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "minimatch": "^3.0.5" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/recursive-readdir/node_modules/brace-expansion": { + "version": "1.1.12", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz", + "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/recursive-readdir/node_modules/minimatch": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.5.tgz", + "integrity": "sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w==", + "dev": true, + "license": "ISC", + "peer": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/reduce-flatten": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/reduce-flatten/-/reduce-flatten-2.0.0.tgz", + "integrity": "sha512-EJ4UNY/U1t2P/2k6oqotuX2Cc3T6nxJwsM0N0asT7dhrtH1ltUxDn4NalSYmPE2rCkVpcf/X6R0wDwcFpzhd4w==", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/req-cwd": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/req-cwd/-/req-cwd-2.0.0.tgz", + "integrity": "sha512-ueoIoLo1OfB6b05COxAA9UpeoscNpYyM+BqYlA7H6LVF4hKGPXQQSSaD2YmvDVJMkk4UDpAHIeU1zG53IqjvlQ==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "req-from": "^2.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/req-from": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/req-from/-/req-from-2.0.0.tgz", + "integrity": "sha512-LzTfEVDVQHBRfjOUMgNBA+V6DWsSnoeKzf42J7l0xa/B4jyPOuuF5MlNSmomLNGemWTnV2TIdjSSLnEn95fOQA==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "resolve-from": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/require-from-string": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", + "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/resolve": { + "version": "1.17.0", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.17.0.tgz", + "integrity": "sha512-ic+7JYiV8Vi2yzQGFWOkiZD5Z9z7O2Zhm9XMaTxdJExKasieFCr+yXZ/WmXsckHiKl12ar0y6XiXDx3m4RHn1w==", + "dev": true, + "license": "MIT", + "dependencies": { + "path-parse": "^1.0.6" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/resolve-from": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-3.0.0.tgz", + "integrity": "sha512-GnlH6vxLymXJNMBo7XP1fJIzBFbdYt49CuTwmB/6N53t+kMPRMFKz783LlQ4tv28XoQfMWinAJX6WCGf2IlaIw==", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/reusify": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.1.0.tgz", + "integrity": "sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "iojs": ">=1.0.0", + "node": ">=0.10.0" + } + }, + "node_modules/ripemd160": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.3.tgz", + "integrity": "sha512-5Di9UC0+8h1L6ZD2d7awM7E/T4uA1fJRlx6zk/NvdCCVEoAnFqvHmCuNeIKoCeIixBX/q8uM+6ycDvF8woqosA==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "hash-base": "^3.1.2", + "inherits": "^2.0.4" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/rlp": { + "version": "2.2.7", + "resolved": "https://registry.npmjs.org/rlp/-/rlp-2.2.7.tgz", + "integrity": "sha512-d5gdPmgQ0Z+AklL2NVXr/IoSjNZFfTVvQWzL/AM2AOcSzYP2xjlb0AC8YyCLc41MSNf6P6QVtjgPdmVtzb+4lQ==", + "dev": true, + "license": "MPL-2.0", + "peer": true, + "dependencies": { + "bn.js": "^5.2.0" + }, + "bin": { + "rlp": "bin/rlp" + } + }, + "node_modules/run-parallel": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT", + "peer": true, + "dependencies": { + "queue-microtask": "^1.2.2" + } + }, + "node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, + "node_modules/safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", + "dev": true, + "license": "MIT" + }, + "node_modules/sc-istanbul": { + "version": "0.4.6", + "resolved": "https://registry.npmjs.org/sc-istanbul/-/sc-istanbul-0.4.6.tgz", + "integrity": "sha512-qJFF/8tW/zJsbyfh/iT/ZM5QNHE3CXxtLJbZsL+CzdJLBsPD7SedJZoUA4d8iAcN2IoMp/Dx80shOOd2x96X/g==", + "dev": true, + "license": "BSD-3-Clause", + "peer": true, + "dependencies": { + "abbrev": "1.0.x", + "async": "1.x", + "escodegen": "1.8.x", + "esprima": "2.7.x", + "glob": "^5.0.15", + "handlebars": "^4.0.1", + "js-yaml": "3.x", + "mkdirp": "0.5.x", + "nopt": "3.x", + "once": "1.x", + "resolve": "1.1.x", + "supports-color": "^3.1.0", + "which": "^1.1.1", + "wordwrap": "^1.0.0" + }, + "bin": { + "istanbul": "lib/cli.js" + } + }, + "node_modules/sc-istanbul/node_modules/argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "sprintf-js": "~1.0.2" + } + }, + "node_modules/sc-istanbul/node_modules/brace-expansion": { + "version": "1.1.12", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz", + "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/sc-istanbul/node_modules/glob": { + "version": "5.0.15", + "resolved": "https://registry.npmjs.org/glob/-/glob-5.0.15.tgz", + "integrity": "sha512-c9IPMazfRITpmAAKi22dK1VKxGDX9ehhqfABDriL/lzO92xcUKEJPQHrVA/2YHSNFB4iFlykVmWvwo48nr3OxA==", + "deprecated": "Old versions of glob are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting i@izs.me", + "dev": true, + "license": "ISC", + "peer": true, + "dependencies": { + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "2 || 3", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + } + }, + "node_modules/sc-istanbul/node_modules/has-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", + "integrity": "sha512-DyYHfIYwAJmjAjSSPKANxI8bFY9YtFrgkAfinBojQ8YJTOuOuav64tMUJv584SES4xl74PmuaevIyaLESHdTAA==", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/sc-istanbul/node_modules/js-yaml": { + "version": "3.14.2", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.2.tgz", + "integrity": "sha512-PMSmkqxr106Xa156c2M265Z+FTrPl+oxd/rgOQy2tijQeK5TxQ43psO1ZCwhVOSdnn+RzkzlRz/eY4BgJBYVpg==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/sc-istanbul/node_modules/js-yaml/node_modules/esprima": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", + "dev": true, + "license": "BSD-2-Clause", + "peer": true, + "bin": { + "esparse": "bin/esparse.js", + "esvalidate": "bin/esvalidate.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/sc-istanbul/node_modules/minimatch": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.5.tgz", + "integrity": "sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w==", + "dev": true, + "license": "ISC", + "peer": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/sc-istanbul/node_modules/resolve": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.1.7.tgz", + "integrity": "sha512-9znBF0vBcaSN3W2j7wKvdERPwqTxSpCq+if5C0WoTCyV9n24rua28jeuQ2pL/HOf+yUe/Mef+H/5p60K0Id3bg==", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/sc-istanbul/node_modules/supports-color": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", + "integrity": "sha512-Jds2VIYDrlp5ui7t8abHN2bjAu4LV/q4N2KivFPpGH0lrka0BMq/33AmECUXlKPcHigkNaqfXRENFju+rlcy+A==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "has-flag": "^1.0.0" + }, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/scrypt-js": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/scrypt-js/-/scrypt-js-3.0.1.tgz", + "integrity": "sha512-cdwTTnqPu0Hyvf5in5asVdZocVDTNRmR7XEcJuIzMjJeSHybHl7vpB66AzwTaIg6CLSbtjcxc8fqcySfnTkccA==", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/secp256k1": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/secp256k1/-/secp256k1-4.0.4.tgz", + "integrity": "sha512-6JfvwvjUOn8F/jUoBY2Q1v5WY5XS+rj8qSe0v8Y4ezH4InLgTEeOOPQsRll9OV429Pvo6BCHGavIyJfr3TAhsw==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "peer": true, + "dependencies": { + "elliptic": "^6.5.7", + "node-addon-api": "^5.0.0", + "node-gyp-build": "^4.2.0" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/secp256k1/node_modules/node-addon-api": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-5.1.0.tgz", + "integrity": "sha512-eh0GgfEkpnoWDq+VY8OyvYhFEzBk6jIYbRKdIlyTiAXIVJ8PyBaKb0rp7oDtoddbdoHWhq8wwr+XZ81F1rpNdA==", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/serialize-javascript": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.2.tgz", + "integrity": "sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "randombytes": "^2.1.0" + } + }, + "node_modules/set-function-length": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz", + "integrity": "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "define-data-property": "^1.1.4", + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.4", + "gopd": "^1.0.1", + "has-property-descriptors": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/setimmediate": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", + "integrity": "sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/setprototypeof": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", + "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==", + "dev": true, + "license": "ISC" + }, + "node_modules/sha.js": { + "version": "2.4.12", + "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.12.tgz", + "integrity": "sha512-8LzC5+bvI45BjpfXU8V5fdU2mfeKiQe1D1gIMn7XUlF3OTUrpdJpPPH4EMAnF0DsHHdSZqCdSss5qCmJKuiO3w==", + "dev": true, + "license": "(MIT AND BSD-3-Clause)", + "peer": true, + "dependencies": { + "inherits": "^2.0.4", + "safe-buffer": "^5.2.1", + "to-buffer": "^1.2.0" + }, + "bin": { + "sha.js": "bin.js" + }, + "engines": { + "node": ">= 0.10" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/sha1": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/sha1/-/sha1-1.1.1.tgz", + "integrity": "sha512-dZBS6OrMjtgVkopB1Gmo4RQCDKiZsqcpAQpkV/aaj+FCrCg8r4I4qMkDPQjBgLIxlmu9k4nUbWq6ohXahOneYA==", + "dev": true, + "license": "BSD-3-Clause", + "peer": true, + "dependencies": { + "charenc": ">= 0.0.1", + "crypt": ">= 0.0.1" + }, + "engines": { + "node": "*" + } + }, + "node_modules/shelljs": { + "version": "0.8.5", + "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.8.5.tgz", + "integrity": "sha512-TiwcRcrkhHvbrZbnRcFYMLl30Dfov3HKqzp5tO5b4pt6G/SezKcYhmDg15zXVBswHmctSAQKznqNW2LO5tTDow==", + "dev": true, + "license": "BSD-3-Clause", + "peer": true, + "dependencies": { + "glob": "^7.0.0", + "interpret": "^1.0.0", + "rechoir": "^0.6.2" + }, + "bin": { + "shjs": "bin/shjs" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/shelljs/node_modules/brace-expansion": { + "version": "1.1.12", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz", + "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/shelljs/node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "deprecated": "Old versions of glob are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting i@izs.me", + "dev": true, + "license": "ISC", + "peer": true, + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/shelljs/node_modules/minimatch": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.5.tgz", + "integrity": "sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w==", + "dev": true, + "license": "ISC", + "peer": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/side-channel": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.1.0.tgz", + "integrity": "sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "es-errors": "^1.3.0", + "object-inspect": "^1.13.3", + "side-channel-list": "^1.0.0", + "side-channel-map": "^1.0.1", + "side-channel-weakmap": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel-list": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/side-channel-list/-/side-channel-list-1.0.0.tgz", + "integrity": "sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "es-errors": "^1.3.0", + "object-inspect": "^1.13.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel-map": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/side-channel-map/-/side-channel-map-1.0.1.tgz", + "integrity": "sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.5", + "object-inspect": "^1.13.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel-weakmap": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/side-channel-weakmap/-/side-channel-weakmap-1.0.2.tgz", + "integrity": "sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.5", + "object-inspect": "^1.13.3", + "side-channel-map": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/sisteransi": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz", + "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/slice-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz", + "integrity": "sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "ansi-styles": "^4.0.0", + "astral-regex": "^2.0.0", + "is-fullwidth-code-point": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/slice-ansi?sponsor=1" + } + }, + "node_modules/solc": { + "version": "0.8.34", + "resolved": "https://registry.npmjs.org/solc/-/solc-0.8.34.tgz", + "integrity": "sha512-qf8HajA1sHhXRV0hMSDXLjVbc4v3Q+SQbL9zok+1WmgVj7Z4oMjMHxaysCzfGtFVqjZdfDDJWyZI+tcx5bO7Dw==", + "dev": true, + "license": "MIT", + "dependencies": { + "command-exists": "^1.2.8", + "commander": "^8.1.0", + "follow-redirects": "^1.12.1", + "js-sha3": "0.8.0", + "memorystream": "^0.3.1", + "semver": "^5.5.0", + "tmp": "0.0.33" + }, + "bin": { + "solcjs": "solc.js" + }, + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/solc/node_modules/semver": { + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", + "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/solidity-coverage": { + "version": "0.8.17", + "resolved": "https://registry.npmjs.org/solidity-coverage/-/solidity-coverage-0.8.17.tgz", + "integrity": "sha512-5P8vnB6qVX9tt1MfuONtCTEaEGO/O4WuEidPHIAJjx4sktHHKhO3rFvnE0q8L30nWJPTrcqGQMT7jpE29B2qow==", + "dev": true, + "license": "ISC", + "peer": true, + "dependencies": { + "@ethersproject/abi": "^5.0.9", + "@solidity-parser/parser": "^0.20.1", + "chalk": "^2.4.2", + "death": "^1.1.0", + "difflib": "^0.2.4", + "fs-extra": "^8.1.0", + "ghost-testrpc": "^0.0.2", + "global-modules": "^2.0.0", + "globby": "^10.0.1", + "jsonschema": "^1.2.4", + "lodash": "^4.17.21", + "mocha": "^10.2.0", + "node-emoji": "^1.10.0", + "pify": "^4.0.1", + "recursive-readdir": "^2.2.2", + "sc-istanbul": "^0.4.5", + "semver": "^7.3.4", + "shelljs": "^0.8.3", + "web3-utils": "^1.3.6" + }, + "bin": { + "solidity-coverage": "plugins/bin.js" + }, + "peerDependencies": { + "hardhat": "^2.11.0" + } + }, + "node_modules/solidity-coverage/node_modules/@solidity-parser/parser": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@solidity-parser/parser/-/parser-0.20.2.tgz", + "integrity": "sha512-rbu0bzwNvMcwAjH86hiEAcOeRI2EeK8zCkHDrFykh/Al8mvJeFmjy3UrE7GYQjNwOgbGUUtCn5/k8CB8zIu7QA==", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/solidity-coverage/node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/solidity-coverage/node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/solidity-coverage/node_modules/color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/solidity-coverage/node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/solidity-coverage/node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/solidity-coverage/node_modules/fs-extra": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", + "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" + }, + "engines": { + "node": ">=6 <7 || >=8" + } + }, + "node_modules/solidity-coverage/node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/solidity-coverage/node_modules/jsonfile": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", + "integrity": "sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==", + "dev": true, + "license": "MIT", + "peer": true, + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/solidity-coverage/node_modules/semver": { + "version": "7.7.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.4.tgz", + "integrity": "sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA==", + "dev": true, + "license": "ISC", + "peer": true, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/solidity-coverage/node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/solidity-coverage/node_modules/universalify": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", + "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">= 4.0.0" + } + }, + "node_modules/source-map": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.2.0.tgz", + "integrity": "sha512-CBdZ2oa/BHhS4xj5DlhjWNHcan57/5YuvfdLf17iVmIpd9KRm+DFLmC6nBNj+6Ua7Kt3TmOjDpQT1aTYOQtoUA==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "amdefine": ">=0.0.4" + }, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/source-map-support": { + "version": "0.5.21", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", + "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", + "dev": true, + "license": "MIT", + "dependencies": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + } + }, + "node_modules/source-map-support/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/split2": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/split2/-/split2-3.2.2.tgz", + "integrity": "sha512-9NThjpgZnifTkJpzTZ7Eue85S49QwpNhZTq6GRJwObb6jnLFNGB7Qm73V5HewTROPyxD0C29xqmaI68bQtV+hg==", + "dev": true, + "license": "ISC", + "peer": true, + "dependencies": { + "readable-stream": "^3.0.0" + } + }, + "node_modules/sprintf-js": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==", + "dev": true, + "license": "BSD-3-Clause", + "peer": true + }, + "node_modules/stacktrace-parser": { + "version": "0.1.11", + "resolved": "https://registry.npmjs.org/stacktrace-parser/-/stacktrace-parser-0.1.11.tgz", + "integrity": "sha512-WjlahMgHmCJpqzU8bIBy4qtsZdU9lRlcZE3Lvyej6t4tuOuv1vk57OW3MBrj6hXBFx/nNoC9MPMTcr5YA7NQbg==", + "dev": true, + "license": "MIT", + "dependencies": { + "type-fest": "^0.7.1" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/stacktrace-parser/node_modules/type-fest": { + "version": "0.7.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.7.1.tgz", + "integrity": "sha512-Ne2YiiGN8bmrmJJEuTWTLJR32nh/JdL1+PSicowtNb0WFpn59GK8/lfD61bVtzguz7b3PBt74nxpv/Pw5po5Rg==", + "dev": true, + "license": "(MIT OR CC0-1.0)", + "engines": { + "node": ">=8" + } + }, + "node_modules/statuses": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.2.tgz", + "integrity": "sha512-DvEy55V3DB7uknRo+4iOGT5fP1slR8wQohVdknigZPMpMstaKJQWhwiYBACJE3Ul2pTnATihhBYnRhZQHGBiRw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/string_decoder": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", + "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", + "dev": true, + "license": "MIT", + "dependencies": { + "safe-buffer": "~5.2.0" + } + }, + "node_modules/string-format": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/string-format/-/string-format-2.0.0.tgz", + "integrity": "sha512-bbEs3scLeYNXLecRRuk6uJxdXUSj6le/8rNPHChIJTn2V79aXVTR1EH2OH5zLKKoz0V02fOUKZZcw01pLUShZA==", + "dev": true, + "license": "WTFPL OR MIT", + "peer": true + }, + "node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "license": "MIT", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-hex-prefix": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/strip-hex-prefix/-/strip-hex-prefix-1.0.0.tgz", + "integrity": "sha512-q8d4ue7JGEiVcypji1bALTos+0pWtyGlivAWyPuTkHzuTCJqrK9sWxYQZUq6Nq3cuyv3bm734IhHvHtGGURU6A==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "is-hex-prefixed": "1.0.0" + }, + "engines": { + "node": ">=6.5.0", + "npm": ">=3" + } + }, + "node_modules/strip-json-comments": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/sync-request": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/sync-request/-/sync-request-6.1.0.tgz", + "integrity": "sha512-8fjNkrNlNCrVc/av+Jn+xxqfCjYaBoHqCsDz6mt030UMxJGr+GSfCV1dQt2gRtlL63+VPidwDVLr7V2OcTSdRw==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "http-response-object": "^3.0.1", + "sync-rpc": "^1.2.1", + "then-request": "^6.0.0" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/sync-rpc": { + "version": "1.3.6", + "resolved": "https://registry.npmjs.org/sync-rpc/-/sync-rpc-1.3.6.tgz", + "integrity": "sha512-J8jTXuZzRlvU7HemDgHi3pGnh/rkoqR/OZSjhTyyZrEkkYQbk7Z33AXp37mkPfPpfdOuj7Ex3H/TJM1z48uPQw==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "get-port": "^3.1.0" + } + }, + "node_modules/table": { + "version": "6.9.0", + "resolved": "https://registry.npmjs.org/table/-/table-6.9.0.tgz", + "integrity": "sha512-9kY+CygyYM6j02t5YFHbNz2FN5QmYGv9zAjVp4lCDjlCw7amdckXlEt/bjMhUIfj4ThGRE4gCUH5+yGnNuPo5A==", + "dev": true, + "license": "BSD-3-Clause", + "peer": true, + "dependencies": { + "ajv": "^8.0.1", + "lodash.truncate": "^4.4.2", + "slice-ansi": "^4.0.0", + "string-width": "^4.2.3", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/table-layout": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/table-layout/-/table-layout-1.0.2.tgz", + "integrity": "sha512-qd/R7n5rQTRFi+Zf2sk5XVVd9UQl6ZkduPFC3S7WEGJAmetDTjY3qPN50eSKzwuzEyQKy5TN2TiZdkIjos2L6A==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "array-back": "^4.0.1", + "deep-extend": "~0.6.0", + "typical": "^5.2.0", + "wordwrapjs": "^4.0.0" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/table-layout/node_modules/array-back": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/array-back/-/array-back-4.0.2.tgz", + "integrity": "sha512-NbdMezxqf94cnNfWLL7V/im0Ub+Anbb0IoZhvzie8+4HJ4nMQuzHuy49FkGYCJK2yAloZ3meiB6AVMClbrI1vg==", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/table-layout/node_modules/typical": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/typical/-/typical-5.2.0.tgz", + "integrity": "sha512-dvdQgNDNJo+8B2uBQoqdb11eUCE1JQXhvjC/CZtgvZseVd5TYMXnq0+vuUemXbd/Se29cTaUuPX3YIc2xgbvIg==", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/then-request": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/then-request/-/then-request-6.0.2.tgz", + "integrity": "sha512-3ZBiG7JvP3wbDzA9iNY5zJQcHL4jn/0BWtXIkagfz7QgOL/LqjCEOBQuJNZfu0XYnv5JhKh+cDxCPM4ILrqruA==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "@types/concat-stream": "^1.6.0", + "@types/form-data": "0.0.33", + "@types/node": "^8.0.0", + "@types/qs": "^6.2.31", + "caseless": "~0.12.0", + "concat-stream": "^1.6.0", + "form-data": "^2.2.0", + "http-basic": "^8.1.1", + "http-response-object": "^3.0.1", + "promise": "^8.0.0", + "qs": "^6.4.0" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/then-request/node_modules/@types/node": { + "version": "8.10.66", + "resolved": "https://registry.npmjs.org/@types/node/-/node-8.10.66.tgz", + "integrity": "sha512-tktOkFUA4kXx2hhhrB8bIFb5TbwzS4uOhKEmwiD+NoiL0qtP2OQ9mFldbgD4dV1djrlBYP6eBuQZiWjuHUpqFw==", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/then-request/node_modules/form-data": { + "version": "2.5.5", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.5.5.tgz", + "integrity": "sha512-jqdObeR2rxZZbPSGL+3VckHMYtu+f9//KXBsVny6JSX/pa38Fy+bGjuG8eW/H6USNQWhLi8Num++cU2yOCNz4A==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "es-set-tostringtag": "^2.1.0", + "hasown": "^2.0.2", + "mime-types": "^2.1.35", + "safe-buffer": "^5.2.1" + }, + "engines": { + "node": ">= 0.12" + } + }, + "node_modules/through2": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/through2/-/through2-4.0.2.tgz", + "integrity": "sha512-iOqSav00cVxEEICeD7TjLB1sueEL+81Wpzp2bY17uZjZN0pWZPuo4suZ/61VujxmqSGFfgOcNuTZ85QJwNZQpw==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "readable-stream": "3" + } + }, + "node_modules/tinyglobby": { + "version": "0.2.15", + "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.15.tgz", + "integrity": "sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "fdir": "^6.5.0", + "picomatch": "^4.0.3" + }, + "engines": { + "node": ">=12.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/SuperchupuDev" + } + }, + "node_modules/tinyglobby/node_modules/fdir": { + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.5.0.tgz", + "integrity": "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12.0.0" + }, + "peerDependencies": { + "picomatch": "^3 || ^4" + }, + "peerDependenciesMeta": { + "picomatch": { + "optional": true + } + } + }, + "node_modules/tinyglobby/node_modules/picomatch": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.3.tgz", + "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/tmp": { + "version": "0.0.33", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", + "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", + "dev": true, + "license": "MIT", + "dependencies": { + "os-tmpdir": "~1.0.2" + }, + "engines": { + "node": ">=0.6.0" + } + }, + "node_modules/to-buffer": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/to-buffer/-/to-buffer-1.2.2.tgz", + "integrity": "sha512-db0E3UJjcFhpDhAF4tLo03oli3pwl3dbnzXOUIlRKrp+ldk/VUxzpWYZENsw2SZiuBjHAk7DfB0VU7NKdpb6sw==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "isarray": "^2.0.5", + "safe-buffer": "^5.2.1", + "typed-array-buffer": "^1.0.3" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/toidentifier": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", + "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.6" + } + }, + "node_modules/ts-command-line-args": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/ts-command-line-args/-/ts-command-line-args-2.5.1.tgz", + "integrity": "sha512-H69ZwTw3rFHb5WYpQya40YAX2/w7Ut75uUECbgBIsLmM+BNuYnxsltfyyLMxy6sEeKxgijLTnQtLd0nKd6+IYw==", + "dev": true, + "license": "ISC", + "peer": true, + "dependencies": { + "chalk": "^4.1.0", + "command-line-args": "^5.1.1", + "command-line-usage": "^6.1.0", + "string-format": "^2.0.0" + }, + "bin": { + "write-markdown": "dist/write-markdown.js" + } + }, + "node_modules/ts-essentials": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/ts-essentials/-/ts-essentials-7.0.3.tgz", + "integrity": "sha512-8+gr5+lqO3G84KdiTSMRLtuyJ+nTBVRKuCrK4lidMPdVeEp0uqC875uE5NMcaA7YYMN7XsNiFQuMvasF8HT/xQ==", + "dev": true, + "license": "MIT", + "peer": true, + "peerDependencies": { + "typescript": ">=3.7.0" + } + }, + "node_modules/ts-node": { + "version": "10.9.2", + "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.9.2.tgz", + "integrity": "sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "@cspotcode/source-map-support": "^0.8.0", + "@tsconfig/node10": "^1.0.7", + "@tsconfig/node12": "^1.0.7", + "@tsconfig/node14": "^1.0.0", + "@tsconfig/node16": "^1.0.2", + "acorn": "^8.4.1", + "acorn-walk": "^8.1.1", + "arg": "^4.1.0", + "create-require": "^1.1.0", + "diff": "^4.0.1", + "make-error": "^1.1.1", + "v8-compile-cache-lib": "^3.0.1", + "yn": "3.1.1" + }, + "bin": { + "ts-node": "dist/bin.js", + "ts-node-cwd": "dist/bin-cwd.js", + "ts-node-esm": "dist/bin-esm.js", + "ts-node-script": "dist/bin-script.js", + "ts-node-transpile-only": "dist/bin-transpile.js", + "ts-script": "dist/bin-script-deprecated.js" + }, + "peerDependencies": { + "@swc/core": ">=1.2.50", + "@swc/wasm": ">=1.2.50", + "@types/node": "*", + "typescript": ">=2.7" + }, + "peerDependenciesMeta": { + "@swc/core": { + "optional": true + }, + "@swc/wasm": { + "optional": true + } + } + }, + "node_modules/ts-node/node_modules/diff": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.4.tgz", + "integrity": "sha512-X07nttJQkwkfKfvTPG/KSnE2OMdcUCao6+eXF3wmnIQRn2aPAHH3VxDbDOdegkd6JbPsXqShpvEOHfAT+nCNwQ==", + "dev": true, + "license": "BSD-3-Clause", + "peer": true, + "engines": { + "node": ">=0.3.1" + } + }, + "node_modules/tslib": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.7.0.tgz", + "integrity": "sha512-gLXCKdN1/j47AiHiOkJN69hJmcbGTHI0ImLmbYLHykhgeN0jVGola9yVjFgzCUklsZQMW55o+dW7IXv3RCXDzA==", + "dev": true, + "license": "0BSD" + }, + "node_modules/tsort": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/tsort/-/tsort-0.0.1.tgz", + "integrity": "sha512-Tyrf5mxF8Ofs1tNoxA13lFeZ2Zrbd6cKbuH3V+MQ5sb6DtBj5FjrXVsRWT8YvNAQTqNoz66dz1WsbigI22aEnw==", + "dev": true, + "license": "MIT" + }, + "node_modules/type-check": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", + "integrity": "sha512-ZCmOJdvOWDBYJlzAoFkC+Q0+bUyEOS1ltgp1MGU03fqHG+dbi9tBFU2Rd9QKiDZFAYrhPh2JUf7rZRIuHRKtOg==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "prelude-ls": "~1.1.2" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/type-detect": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.1.0.tgz", + "integrity": "sha512-Acylog8/luQ8L7il+geoSxhEkazvkslg7PSNKOX59mbB9cOveP5aq9h74Y7YU8yDpJwetzQQrfIwtf4Wp4LKcw==", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/type-fest": { + "version": "0.21.3", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", + "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", + "dev": true, + "license": "(MIT OR CC0-1.0)", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/typechain": { + "version": "8.3.2", + "resolved": "https://registry.npmjs.org/typechain/-/typechain-8.3.2.tgz", + "integrity": "sha512-x/sQYr5w9K7yv3es7jo4KTX05CLxOf7TRWwoHlrjRh8H82G64g+k7VuWPJlgMo6qrjfCulOdfBjiaDtmhFYD/Q==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "@types/prettier": "^2.1.1", + "debug": "^4.3.1", + "fs-extra": "^7.0.0", + "glob": "7.1.7", + "js-sha3": "^0.8.0", + "lodash": "^4.17.15", + "mkdirp": "^1.0.4", + "prettier": "^2.3.1", + "ts-command-line-args": "^2.2.0", + "ts-essentials": "^7.0.1" + }, + "bin": { + "typechain": "dist/cli/cli.js" + }, + "peerDependencies": { + "typescript": ">=4.3.0" + } + }, + "node_modules/typechain/node_modules/brace-expansion": { + "version": "1.1.12", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz", + "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/typechain/node_modules/fs-extra": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-7.0.1.tgz", + "integrity": "sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "graceful-fs": "^4.1.2", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" + }, + "engines": { + "node": ">=6 <7 || >=8" + } + }, + "node_modules/typechain/node_modules/glob": { + "version": "7.1.7", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.7.tgz", + "integrity": "sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==", + "deprecated": "Old versions of glob are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting i@izs.me", + "dev": true, + "license": "ISC", + "peer": true, + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/typechain/node_modules/jsonfile": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", + "integrity": "sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==", + "dev": true, + "license": "MIT", + "peer": true, + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/typechain/node_modules/minimatch": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.5.tgz", + "integrity": "sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w==", + "dev": true, + "license": "ISC", + "peer": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/typechain/node_modules/mkdirp": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", + "dev": true, + "license": "MIT", + "peer": true, + "bin": { + "mkdirp": "bin/cmd.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/typechain/node_modules/universalify": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", + "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">= 4.0.0" + } + }, + "node_modules/typed-array-buffer": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.3.tgz", + "integrity": "sha512-nAYYwfY3qnzX30IkA6AQZjVbtK6duGontcQm1WSG1MD94YLqK0515GNApXkoxKOWMusVssAHWLh9SeaoefYFGw==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "call-bound": "^1.0.3", + "es-errors": "^1.3.0", + "is-typed-array": "^1.1.14" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/typedarray": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", + "integrity": "sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA==", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/typescript": { + "version": "5.9.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.9.3.tgz", + "integrity": "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==", + "dev": true, + "license": "Apache-2.0", + "peer": true, + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=14.17" + } + }, + "node_modules/typical": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/typical/-/typical-4.0.0.tgz", + "integrity": "sha512-VAH4IvQ7BDFYglMd7BPRDfLgxZZX4O4TFcRDA6EN5X7erNJJq+McIEp8np9aVtxrCJ6qx4GTYVfOWNjcqwZgRw==", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/uglify-js": { + "version": "3.19.3", + "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.19.3.tgz", + "integrity": "sha512-v3Xu+yuwBXisp6QYTcH4UbH+xYJXqnq2m/LtQVWKWzYc1iehYnLixoQDN9FH6/j9/oybfd6W9Ghwkl8+UMKTKQ==", + "dev": true, + "license": "BSD-2-Clause", + "optional": true, + "peer": true, + "bin": { + "uglifyjs": "bin/uglifyjs" + }, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/undici": { + "version": "5.29.0", + "resolved": "https://registry.npmjs.org/undici/-/undici-5.29.0.tgz", + "integrity": "sha512-raqeBD6NQK4SkWhQzeYKd1KmIG6dllBOTt55Rmkt4HtI9mwdWtJljnrXjAFUBLTSN67HWrOIZ3EPF4kjUw80Bg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@fastify/busboy": "^2.0.0" + }, + "engines": { + "node": ">=14.0" + } + }, + "node_modules/undici-types": { + "version": "7.18.2", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-7.18.2.tgz", + "integrity": "sha512-AsuCzffGHJybSaRrmr5eHr81mwJU3kjw6M+uprWvCXiNeN9SOGwQ3Jn8jb8m3Z6izVgknn1R0FTCEAP2QrLY/w==", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/universalify": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", + "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/unpipe": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", + "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/utf8": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/utf8/-/utf8-3.0.0.tgz", + "integrity": "sha512-E8VjFIQ/TyQgp+TZfS6l8yp/xWppSAHzidGiRrqe4bK4XP9pTRyKFgGJpO3SN7zdX4DeomTrwaseCHovfpFcqQ==", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", + "dev": true, + "license": "MIT" + }, + "node_modules/uuid": { + "version": "8.3.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", + "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", + "dev": true, + "license": "MIT", + "bin": { + "uuid": "dist/bin/uuid" + } + }, + "node_modules/v8-compile-cache-lib": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz", + "integrity": "sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/web3-utils": { + "version": "1.10.4", + "resolved": "https://registry.npmjs.org/web3-utils/-/web3-utils-1.10.4.tgz", + "integrity": "sha512-tsu8FiKJLk2PzhDl9fXbGUWTkkVXYhtTA+SmEFkKft+9BgwLxfCRpU96sWv7ICC8zixBNd3JURVoiR3dUXgP8A==", + "dev": true, + "license": "LGPL-3.0", + "peer": true, + "dependencies": { + "@ethereumjs/util": "^8.1.0", + "bn.js": "^5.2.1", + "ethereum-bloom-filters": "^1.0.6", + "ethereum-cryptography": "^2.1.2", + "ethjs-unit": "0.1.6", + "number-to-bn": "1.7.0", + "randombytes": "^2.1.0", + "utf8": "3.0.0" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/web3-utils/node_modules/@ethereumjs/rlp": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@ethereumjs/rlp/-/rlp-4.0.1.tgz", + "integrity": "sha512-tqsQiBQDQdmPWE1xkkBq4rlSW5QZpLOUJ5RJh2/9fug+q9tnUhuZoVLk7s0scUIKTOzEtR72DFBXI4WiZcMpvw==", + "dev": true, + "license": "MPL-2.0", + "peer": true, + "bin": { + "rlp": "bin/rlp" + }, + "engines": { + "node": ">=14" + } + }, + "node_modules/web3-utils/node_modules/@ethereumjs/util": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/@ethereumjs/util/-/util-8.1.0.tgz", + "integrity": "sha512-zQ0IqbdX8FZ9aw11vP+dZkKDkS+kgIvQPHnSAXzP9pLu+Rfu3D3XEeLbicvoXJTYnhZiPmsZUxgdzXwNKxRPbA==", + "dev": true, + "license": "MPL-2.0", + "peer": true, + "dependencies": { + "@ethereumjs/rlp": "^4.0.1", + "ethereum-cryptography": "^2.0.0", + "micro-ftch": "^0.3.1" + }, + "engines": { + "node": ">=14" + } + }, + "node_modules/web3-utils/node_modules/@noble/curves": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/@noble/curves/-/curves-1.4.2.tgz", + "integrity": "sha512-TavHr8qycMChk8UwMld0ZDRvatedkzWfH8IiaeGCfymOP5i0hSCozz9vHOL0nkwk7HRMlFnAiKpS2jrUmSybcw==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "@noble/hashes": "1.4.0" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/web3-utils/node_modules/@noble/hashes": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.4.0.tgz", + "integrity": "sha512-V1JJ1WTRUqHHrOSh597hURcMqVKVGL/ea3kv0gSnEdsEZ0/+VyPghM1lMNGc00z7CIQorSvbKpuJkxvuHbvdbg==", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">= 16" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/web3-utils/node_modules/ethereum-cryptography": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-2.2.1.tgz", + "integrity": "sha512-r/W8lkHSiTLxUxW8Rf3u4HGB0xQweG2RyETjywylKZSzLWoWAijRz8WCuOtJ6wah+avllXBqZuk29HCCvhEIRg==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "@noble/curves": "1.4.2", + "@noble/hashes": "1.4.0", + "@scure/bip32": "1.4.0", + "@scure/bip39": "1.3.0" + } + }, + "node_modules/which": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "dev": true, + "license": "ISC", + "peer": true, + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "which": "bin/which" + } + }, + "node_modules/which-typed-array": { + "version": "1.1.20", + "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.20.tgz", + "integrity": "sha512-LYfpUkmqwl0h9A2HL09Mms427Q1RZWuOHsukfVcKRq9q95iQxdw0ix1JQrqbcDR9PH1QDwf5Qo8OZb5lksZ8Xg==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "available-typed-arrays": "^1.0.7", + "call-bind": "^1.0.8", + "call-bound": "^1.0.4", + "for-each": "^0.3.5", + "get-proto": "^1.0.1", + "gopd": "^1.2.0", + "has-tostringtag": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/widest-line": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/widest-line/-/widest-line-3.1.0.tgz", + "integrity": "sha512-NsmoXalsWVDMGupxZ5R08ka9flZjjiLvHVAWYOKtiKM8ujtZWr9cRffak+uSE48+Ob8ObalXpwyeUiyDD6QFgg==", + "dev": true, + "license": "MIT", + "dependencies": { + "string-width": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/word-wrap": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz", + "integrity": "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/wordwrap": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", + "integrity": "sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q==", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/wordwrapjs": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/wordwrapjs/-/wordwrapjs-4.0.1.tgz", + "integrity": "sha512-kKlNACbvHrkpIw6oPeYDSmdCTu2hdMHoyXLTcUKala++lx5Y+wjJ/e474Jqv5abnVmwxw08DiTuHmw69lJGksA==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "reduce-flatten": "^2.0.0", + "typical": "^5.2.0" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/wordwrapjs/node_modules/typical": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/typical/-/typical-5.2.0.tgz", + "integrity": "sha512-dvdQgNDNJo+8B2uBQoqdb11eUCE1JQXhvjC/CZtgvZseVd5TYMXnq0+vuUemXbd/Se29cTaUuPX3YIc2xgbvIg==", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/workerpool": { + "version": "6.5.1", + "resolved": "https://registry.npmjs.org/workerpool/-/workerpool-6.5.1.tgz", + "integrity": "sha512-Fs4dNYcsdpYSAfVxhnl1L5zTksjvOJxtC5hzMNl+1t9B8hTJTdKDyZ5ju7ztgPy+ft9tBFXoOlDNiOT9WUXZlA==", + "dev": true, + "license": "Apache-2.0" + }, + "node_modules/wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", + "dev": true, + "license": "ISC" + }, + "node_modules/ws": { + "version": "8.17.1", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.17.1.tgz", + "integrity": "sha512-6XQFvXTkbfUOZOKKILFG1PDK2NDQs4azKQl26T0YS5CxqWLgXajbPZ+h4gZekJyRqFU8pvnbAbbs/3TgRPy+GQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10.0.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": ">=5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } + } + }, + "node_modules/y18n": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=10" + } + }, + "node_modules/yargs": { + "version": "16.2.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", + "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", + "dev": true, + "license": "MIT", + "dependencies": { + "cliui": "^7.0.2", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.0", + "y18n": "^5.0.5", + "yargs-parser": "^20.2.2" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/yargs-parser": { + "version": "20.2.9", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", + "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=10" + } + }, + "node_modules/yargs-unparser": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/yargs-unparser/-/yargs-unparser-2.0.0.tgz", + "integrity": "sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA==", + "dev": true, + "license": "MIT", + "dependencies": { + "camelcase": "^6.0.0", + "decamelize": "^4.0.0", + "flat": "^5.0.2", + "is-plain-obj": "^2.1.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/yn": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz", + "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/yocto-queue": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", + "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + } + } +} diff --git a/solidity/package.json b/solidity/package.json new file mode 100644 index 0000000..6a90409 --- /dev/null +++ b/solidity/package.json @@ -0,0 +1,23 @@ +{ + "name": "qrcodegen-solidity", + "version": "1.0.0", + "description": "QR Code generator library — Solidity port", + "main": "index.js", + "directories": { + "test": "test" + }, + "scripts": { + "test": "hardhat test", + "compile": "node scripts/compile.js" + }, + "keywords": [], + "author": "", + "license": "ISC", + "type": "module", + "devDependencies": { + "@nomicfoundation/hardhat-toolbox": "^5.0.0", + "ethers": "^6.16.0", + "hardhat": "^2.28.6", + "solc": "^0.8.34" + } +} diff --git a/solidity/scripts/compile.js b/solidity/scripts/compile.js new file mode 100644 index 0000000..ed3e763 --- /dev/null +++ b/solidity/scripts/compile.js @@ -0,0 +1,62 @@ +#!/usr/bin/env node +/** + * Compile script — uses the bundled solc npm package (no internet required). + * Outputs compiled JSON artifacts to the artifacts/ directory. + * + * Usage: node scripts/compile.js + * or: npm run compile + */ + +import { readFileSync, writeFileSync, mkdirSync } from "fs"; +import { createRequire } from "module"; +import { resolve, dirname } from "path"; +import { fileURLToPath } from "url"; + +const require = createRequire(import.meta.url); +const __dirname = dirname(fileURLToPath(import.meta.url)); +const solc = require("solc"); + +const contractsDir = resolve(__dirname, "../contracts"); +const artifactsDir = resolve(__dirname, "../artifacts"); +mkdirSync(artifactsDir, { recursive: true }); + +const input = { + language: "Solidity", + sources: { + "QRCode.sol": { content: readFileSync(`${contractsDir}/QRCode.sol`, "utf8") }, + "QRCodeDemo.sol": { content: readFileSync(`${contractsDir}/QRCodeDemo.sol`, "utf8") }, + }, + settings: { + viaIR: true, + optimizer: { enabled: true, runs: 200 }, + outputSelection: { + "*": { "*": ["abi", "evm.bytecode.object", "evm.deployedBytecode.object"] }, + }, + }, +}; + +console.log(`Compiling with solc ${solc.version()} …`); +const output = JSON.parse(solc.compile(JSON.stringify(input))); + +let hasError = false; +for (const e of output.errors || []) { + const msg = `[${e.severity.toUpperCase()}] ${e.formattedMessage}`; + if (e.severity === "error") { console.error(msg); hasError = true; } + else { console.warn(msg); } +} +if (hasError) process.exit(1); + +for (const [, contracts] of Object.entries(output.contracts || {})) { + for (const [name, data] of Object.entries(contracts)) { + const artifact = { + contractName: name, + abi: data.abi, + bytecode: "0x" + data.evm.bytecode.object, + deployedBytecode: "0x" + data.evm.deployedBytecode.object, + }; + const outPath = `${artifactsDir}/${name}.json`; + writeFileSync(outPath, JSON.stringify(artifact, null, 2)); + console.log(` ✓ ${name} → artifacts/${name}.json`); + } +} +console.log("Compilation successful."); diff --git a/solidity/test/QRCodeTest.js b/solidity/test/QRCodeTest.js new file mode 100644 index 0000000..dd17fe4 --- /dev/null +++ b/solidity/test/QRCodeTest.js @@ -0,0 +1,227 @@ +/* + * QR Code generator test suite (Solidity) + * + * Deploys QRCodeDemo to a local Hardhat network and validates the output of + * every demo function against known-good values produced by the C reference + * implementation in this repository. + * + * Run with: npx hardhat test + * or: npm test + * + * Gas note: On-chain QR Code generation for small inputs costs 3–9 million gas. + * Auto-mask selection evaluates all 8 mask patterns and can exceed Hardhat's + * default per-transaction gas cap (16 777 216 gas, `FUSAKA_TRANSACTION_GAS_LIMIT` + * in hardhat/src/internal/constants.ts). The fixed-mask demo functions + * (doBasicDemoFixedMask, doNumericDemoFixedMask, etc.) are provided specifically + * to allow byte-exact comparison against the C reference output without triggering + * the 8-pass auto-mask penalty scoring. + * + * The expected byte strings were obtained by compiling and running the C reference + * implementation (c/qrcodegen.c) with identical parameters. + */ + +import { expect } from "chai"; +import hre from "hardhat"; + +// --------------------------------------------------------------------------- +// Utility: read a single module from raw QR Code bytes (JS-side helper) +// --------------------------------------------------------------------------- +function getModule(buf, x, y) { + const size = buf[0]; + if (x < 0 || x >= size || y < 0 || y >= size) return false; + const index = y * size + x; + const byteIdx = (index >> 3) + 1; // +1 because buf[0] is the size + const bitIdx = index & 7; + return ((buf[byteIdx] >> bitIdx) & 1) !== 0; +} + +// --------------------------------------------------------------------------- +// Helpers +// --------------------------------------------------------------------------- +function hexToBytes(hex) { + const h = hex.startsWith("0x") ? hex.slice(2) : hex; + return Buffer.from(h, "hex"); +} + +// --------------------------------------------------------------------------- +// Test suite +// --------------------------------------------------------------------------- +describe("QRCode library", function () { + + let demo; + + before(async function () { + const Demo = await hre.ethers.getContractFactory("QRCodeDemo"); + demo = await Demo.deploy(); + await demo.waitForDeployment(); + }); + + + // ----------------------------------------------------------------------- + // 1. Byte-for-byte comparison against C reference output + // (all use explicit fixed masks to stay within the ~16 M gas cap) + // ----------------------------------------------------------------------- + + it("'Hello, world!' ECC_LOW MASK_2 matches C reference", async function () { + // C: qrcodegen_encodeText("Hello, world!", …, Ecc_LOW, 1, 40, Mask_2, true) + // MASK_AUTO also selects mask 2 for this input (verified with C reference). + const expected = "157fd03f48097675ddaea0db3575839ee05ff50728007dce0733e622dd39535eb3170d01c2c79f3d0baa755d7bb9ab70747d93209af3b79400"; + const qr = await demo.doBasicDemoFixedMask(); + expect(hexToBytes(qr).toString("hex")).to.equal(expected); + }); + + it("50-digit π string ECC_MEDIUM MASK_3 matches C reference", async function () { + // MASK_AUTO also selects mask 3 for this input (verified with C reference). + const expected = "197f41fc83ea0a7611d7eddaa9db254f3748a2e05f557f805c00edcaa4617a999dd9898804a9aaad4452e225bb57d5dcc4bb4fcc2fbf006a23fd7d540aba8ad6a5fbbb6ba668d7eead20c1617fd14e01"; + const qr = await demo.doNumericDemoFixedMask(); + expect(hexToBytes(qr).toString("hex")).to.equal(expected); + }); + + it("version-5 HIGH MASK_2 no-boost matches C reference", async function () { + const expected = "257f6508cf3f68a7ef0b76d55b29dd2e744aa6db45deac748376fdbee05f5555f507a8bfda005ce991fd9c56ef6a79bb0b047f44571c56f6bd2fdcd60729a7e6d607fb4ef64f6d0de054fc70fa2cadfe0049104b434d6803d3564d9e3aa5a6151aa557908cc828520456b6cbd5f0e92f5e4ab1c06ae47eee8f7667cc18ba8e62973892567445bf00e64f32f61fc408d60de234ab085d4516f1b52bb7cf93765dfcded820496061fe874add2601"; + const qr = await demo.doVersionConstraintDemo(); + expect(hexToBytes(qr).toString("hex")).to.equal(expected); + }); + + it("'https://www.nayuki.io/' ECC_HIGH MASK_3 matches C reference", async function () { + const expected = "1d7f90d53fc8bc0b76c951dd2ee7afdb55aa7483a0b0e05f55f507987000cc016961224f2cbe770339c40188488dcbeb3b9591ad9c95ee96c5f9dbcdfbb45bc469d014f35c0b1057f52b9e4cdf015630f65ffc560b229c085d60f7b76b01e175c556c220cab8f5a7c48b00"; + const qr = await demo.doFixedMaskDemo(); + expect(hexToBytes(qr).toString("hex")).to.equal(expected); + }); + + it("binary 'Hello, world!' ECC_MEDIUM MASK_0 matches C reference", async function () { + const expected = "157fd63f680a7669dd2eacdb557583ace05ff507e000550869272153c1fe024274661100b2db1f4c0f62045dbda88bb77565d42086f4d78801"; + const qr = await demo.doBinaryDemoFixedMask(); + expect(hexToBytes(qr).toString("hex")).to.equal(expected); + }); + + it("mixed alphanumeric+numeric segment ECC_LOW MASK_0 matches C reference", async function () { + const expected = "1d7fc4cd3f68280b76e104dd2ea0acdb75d87583809de05f55f507b0a00055e00849c1cc499d5da07ccf6115830593916751f86e70bc0e548c7038efad85dd322d311707051055dd499ec7645f012e2cca1fc9d50fc29c285d15f4ad8bb19d75955ede202034fe37173401"; + const qr = await demo.doSegmentDemoFixedMask(); + expect(hexToBytes(qr).toString("hex")).to.equal(expected); + }); + + it("ECI(26)+UTF-8 bytes ECC_MEDIUM MASK_0 matches C reference", async function () { + const expected = "157fc93f88097609ddaea3db657583ace05ff507c000742df291a763e1e7504154374201c6df1fe30eaaf15d53a48bfb748dc720ccfa07ea01"; + const qr = await demo.doEciDemoFixedMask(); + expect(hexToBytes(qr).toString("hex")).to.equal(expected); + }); + + + // ----------------------------------------------------------------------- + // 2. Size / structural invariants for fixed-mask functions + // ----------------------------------------------------------------------- + + it("doBasicDemoFixedMask: size is 21 modules (version 1)", async function () { + const qr = await demo.doBasicDemoFixedMask(); + const size = hexToBytes(qr)[0]; + expect(size).to.equal(21); + }); + + it("doNumericDemoFixedMask: size is 25 modules (version 2)", async function () { + const qr = await demo.doNumericDemoFixedMask(); + const size = hexToBytes(qr)[0]; + expect(size).to.equal(25); + }); + + it("doVersionConstraintDemo: size is 37 modules (version 5)", async function () { + const qr = await demo.doVersionConstraintDemo(); + const size = hexToBytes(qr)[0]; + expect(size).to.equal(37); + }); + + it("doFixedMaskDemo: size is 29 modules (version 3)", async function () { + const qr = await demo.doFixedMaskDemo(); + const size = hexToBytes(qr)[0]; + expect(size).to.equal(29); + }); + + it("doSegmentDemoFixedMask: size is 29 modules (version 3)", async function () { + const qr = await demo.doSegmentDemoFixedMask(); + const size = hexToBytes(qr)[0]; + expect(size).to.equal(29); + }); + + it("doEciDemoFixedMask: size is 21 modules (version 1)", async function () { + const qr = await demo.doEciDemoFixedMask(); + const size = hexToBytes(qr)[0]; + expect(size).to.equal(21); + }); + + + // ----------------------------------------------------------------------- + // 3. Buffer-length invariant: length == 1 + ceil(size² / 8) + // ----------------------------------------------------------------------- + + const lengthCheckCases = [ + ["doBasicDemoFixedMask", (d) => d.doBasicDemoFixedMask()], + ["doNumericDemoFixedMask", (d) => d.doNumericDemoFixedMask()], + ["doVersionConstraintDemo", (d) => d.doVersionConstraintDemo()], + ["doFixedMaskDemo", (d) => d.doFixedMaskDemo()], + ["doSegmentDemoFixedMask", (d) => d.doSegmentDemoFixedMask()], + ["doEciDemoFixedMask", (d) => d.doEciDemoFixedMask()], + ]; + + for (const [name, fn] of lengthCheckCases) { + it(`${name}: buffer length equals 1 + ceil(size² / 8)`, async function () { + const qr = await fn(demo); + const buf = hexToBytes(qr); + const size = buf[0]; + const expected = 1 + Math.ceil(size * size / 8); + expect(buf.length).to.equal(expected); + }); + } + + + // ----------------------------------------------------------------------- + // 4. Finder-pattern module checks (version 1, top-left corner) + // ----------------------------------------------------------------------- + + it("finder pattern: outer corners dark, separator ring light, centre dark", async function () { + const qr = await demo.doBasicDemoFixedMask(); + const buf = hexToBytes(qr); + + // Top-left finder outer corners must be dark + expect(getModule(buf, 0, 0)).to.be.true; + expect(getModule(buf, 6, 0)).to.be.true; + expect(getModule(buf, 0, 6)).to.be.true; + expect(getModule(buf, 6, 6)).to.be.true; + + // Inner dark 3×3 centre + expect(getModule(buf, 3, 3)).to.be.true; + + // Separator ring (Chebyshev distance 2 from centre (3,3)) must be light + expect(getModule(buf, 1, 1)).to.be.false; + expect(getModule(buf, 5, 1)).to.be.false; + expect(getModule(buf, 1, 5)).to.be.false; + expect(getModule(buf, 5, 5)).to.be.false; + }); + + + // ----------------------------------------------------------------------- + // 5. Determinism: calling the same function twice gives the same output + // ----------------------------------------------------------------------- + + it("encodeText is deterministic", async function () { + const qr1 = await demo.doBasicDemoFixedMask(); + const qr2 = await demo.doBasicDemoFixedMask(); + expect(qr1).to.equal(qr2); + }); + + + // ----------------------------------------------------------------------- + // 6. SVG output + // ----------------------------------------------------------------------- + + it("toSvgString returns well-formed SVG", async function () { + const qr = await demo.doBasicDemoFixedMask(); + const svg = await demo.toSvgString(qr, 4); + expect(svg).to.include(''); + expect(svg).to.include('fill="#000000"'); + expect(svg).to.include('fill="#FFFFFF"'); + // viewBox = size + 2*border = 21 + 8 = 29 + expect(svg).to.include('viewBox="0 0 29 29"'); + }); + +});