diff --git a/package-lock.json b/package-lock.json index 4c98251..b96dcaf 100644 --- a/package-lock.json +++ b/package-lock.json @@ -9,10 +9,8 @@ "version": "1.0.0", "hasInstallScript": true, "dependencies": { - "@algorandfoundation/algokit-utils": "^6.2.1", "@algorandfoundation/algorand-typescript": "^0.0.1-alpha.22", "@algorandfoundation/puya-ts": "^1.0.0-alpha.34", - "algosdk": "^2.9.0", "elliptic": "^6.5.7", "js-sha256": "^0.11.0", "js-sha3": "^0.9.3", @@ -20,6 +18,7 @@ "tweetnacl": "^1.0.3" }, "devDependencies": { + "@algorandfoundation/algokit-utils": "^8.0.3", "@commitlint/cli": "^19.5.0", "@commitlint/config-conventional": "^19.5.0", "@eslint/eslintrc": "3.1.0", @@ -58,18 +57,19 @@ } }, "node_modules/@algorandfoundation/algokit-utils": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/@algorandfoundation/algokit-utils/-/algokit-utils-6.2.1.tgz", - "integrity": "sha512-oJbqT91KJp34OasYID2guWHysCLdgZ/4GVb06sdgXxORWKKMhZa/Uj12UiACo4VzZJBOUZEJCh/QrSuHmu/m2g==", + "version": "8.0.3", + "resolved": "https://registry.npmjs.org/@algorandfoundation/algokit-utils/-/algokit-utils-8.0.3.tgz", + "integrity": "sha512-2YYlCDJmT4pvNLUOLqdX6M1nwC2hh4l1gDZFi2ID+JFQ7ZDyASZqg+c2euFrzvxhZJi2Ue94iP+ARqrv74b0+w==", + "dev": true, "license": "MIT", "dependencies": { "buffer": "^6.0.3" }, "engines": { - "node": ">=18.0" + "node": ">=20.0" }, "peerDependencies": { - "algosdk": "^2.7.0" + "algosdk": "^3.0.0" } }, "node_modules/@algorandfoundation/algorand-typescript": { @@ -81,9 +81,9 @@ } }, "node_modules/@algorandfoundation/puya-ts": { - "version": "1.0.0-alpha.34", - "resolved": "https://registry.npmjs.org/@algorandfoundation/puya-ts/-/puya-ts-1.0.0-alpha.34.tgz", - "integrity": "sha512-H5MHNk6JDV5NeWlV9na+MZvN2Jge/PcVhINOCHNG4RixYU/rBPBzbpIvpbQkSjo7uWrqaxFSHUtL08H+/cLClg==", + "version": "1.0.0-beta.2", + "resolved": "https://registry.npmjs.org/@algorandfoundation/puya-ts/-/puya-ts-1.0.0-beta.2.tgz", + "integrity": "sha512-kHIWCOmsU18ceLMKrzTa6Q4hfHp7+Ai58rcxdqNNKtDfzvffWuPLI6oMP2gj6wP+ZTrIdoLNGMhJVOlvtCYpew==", "bundleDependencies": [ "typescript" ], @@ -166,13 +166,13 @@ } }, "node_modules/@babel/parser": { - "version": "7.26.2", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.26.2.tgz", - "integrity": "sha512-DWMCZH9WA4Maitz2q21SRKHo9QXZxkDsbNZoVD62gusNtNBBqDg9i7uOhASfTfIGNzW+O+r7+jAlM8dwphcJKQ==", + "version": "7.26.3", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.26.3.tgz", + "integrity": "sha512-WJ/CvmY8Mea8iDXo6a7RK2wbmJITT5fN3BEkRuFlxVyNx8jOKIIhmC4fSkTcPcf8JyavbBwIe6OpiCOBXt/IcA==", "dev": true, "license": "MIT", "dependencies": { - "@babel/types": "^7.26.0" + "@babel/types": "^7.26.3" }, "bin": { "parser": "bin/babel-parser.js" @@ -182,9 +182,9 @@ } }, "node_modules/@babel/types": { - "version": "7.26.0", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.26.0.tgz", - "integrity": "sha512-Z/yiTPj+lDVnF7lWeKCIJzaIkI0vYO87dMpZ4bg4TDrFe4XXLFWL1TbXU27gBP3QccxV9mZICCrnjnYlJjXHOA==", + "version": "7.26.3", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.26.3.tgz", + "integrity": "sha512-vN5p+1kl59GVKMvTHt55NzzmYVxprfJD+ql7U9NFIfKCBkYE55LYtS+WtPlaYOyzydrKI8Nezd+aZextrd+FMA==", "dev": true, "license": "MIT", "dependencies": { @@ -214,15 +214,15 @@ } }, "node_modules/@commitlint/cli": { - "version": "19.5.0", - "resolved": "https://registry.npmjs.org/@commitlint/cli/-/cli-19.5.0.tgz", - "integrity": "sha512-gaGqSliGwB86MDmAAKAtV9SV1SHdmN8pnGq4EJU4+hLisQ7IFfx4jvU4s+pk6tl0+9bv6yT+CaZkufOinkSJIQ==", + "version": "19.6.1", + "resolved": "https://registry.npmjs.org/@commitlint/cli/-/cli-19.6.1.tgz", + "integrity": "sha512-8hcyA6ZoHwWXC76BoC8qVOSr8xHy00LZhZpauiD0iO0VYbVhMnED0da85lTfIULxl7Lj4c6vZgF0Wu/ed1+jlQ==", "dev": true, "license": "MIT", "dependencies": { "@commitlint/format": "^19.5.0", - "@commitlint/lint": "^19.5.0", - "@commitlint/load": "^19.5.0", + "@commitlint/lint": "^19.6.0", + "@commitlint/load": "^19.6.1", "@commitlint/read": "^19.5.0", "@commitlint/types": "^19.5.0", "tinyexec": "^0.3.0", @@ -236,9 +236,9 @@ } }, "node_modules/@commitlint/config-conventional": { - "version": "19.5.0", - "resolved": "https://registry.npmjs.org/@commitlint/config-conventional/-/config-conventional-19.5.0.tgz", - "integrity": "sha512-OBhdtJyHNPryZKg0fFpZNOBM1ZDbntMvqMuSmpfyP86XSfwzGw4CaoYRG4RutUPg0BTK07VMRIkNJT6wi2zthg==", + "version": "19.6.0", + "resolved": "https://registry.npmjs.org/@commitlint/config-conventional/-/config-conventional-19.6.0.tgz", + "integrity": "sha512-DJT40iMnTYtBtUfw9ApbsLZFke1zKh6llITVJ+x9mtpHD08gsNXaIRqHTmwTZL3dNX5+WoyK7pCN/5zswvkBCQ==", "dev": true, "license": "MIT", "dependencies": { @@ -319,9 +319,9 @@ } }, "node_modules/@commitlint/is-ignored": { - "version": "19.5.0", - "resolved": "https://registry.npmjs.org/@commitlint/is-ignored/-/is-ignored-19.5.0.tgz", - "integrity": "sha512-0XQ7Llsf9iL/ANtwyZ6G0NGp5Y3EQ8eDQSxv/SRcfJ0awlBY4tHFAvwWbw66FVUaWICH7iE5en+FD9TQsokZ5w==", + "version": "19.6.0", + "resolved": "https://registry.npmjs.org/@commitlint/is-ignored/-/is-ignored-19.6.0.tgz", + "integrity": "sha512-Ov6iBgxJQFR9koOupDPHvcHU9keFupDgtB3lObdEZDroiG4jj1rzky60fbQozFKVYRTUdrBGICHG0YVmRuAJmw==", "dev": true, "license": "MIT", "dependencies": { @@ -333,15 +333,15 @@ } }, "node_modules/@commitlint/lint": { - "version": "19.5.0", - "resolved": "https://registry.npmjs.org/@commitlint/lint/-/lint-19.5.0.tgz", - "integrity": "sha512-cAAQwJcRtiBxQWO0eprrAbOurtJz8U6MgYqLz+p9kLElirzSCc0vGMcyCaA1O7AqBuxo11l1XsY3FhOFowLAAg==", + "version": "19.6.0", + "resolved": "https://registry.npmjs.org/@commitlint/lint/-/lint-19.6.0.tgz", + "integrity": "sha512-LRo7zDkXtcIrpco9RnfhOKeg8PAnE3oDDoalnrVU/EVaKHYBWYL1DlRR7+3AWn0JiBqD8yKOfetVxJGdEtZ0tg==", "dev": true, "license": "MIT", "dependencies": { - "@commitlint/is-ignored": "^19.5.0", + "@commitlint/is-ignored": "^19.6.0", "@commitlint/parse": "^19.5.0", - "@commitlint/rules": "^19.5.0", + "@commitlint/rules": "^19.6.0", "@commitlint/types": "^19.5.0" }, "engines": { @@ -349,9 +349,9 @@ } }, "node_modules/@commitlint/load": { - "version": "19.5.0", - "resolved": "https://registry.npmjs.org/@commitlint/load/-/load-19.5.0.tgz", - "integrity": "sha512-INOUhkL/qaKqwcTUvCE8iIUf5XHsEPCLY9looJ/ipzi7jtGhgmtH7OOFiNvwYgH7mA8osUWOUDV8t4E2HAi4xA==", + "version": "19.6.1", + "resolved": "https://registry.npmjs.org/@commitlint/load/-/load-19.6.1.tgz", + "integrity": "sha512-kE4mRKWWNju2QpsCWt428XBvUH55OET2N4QKQ0bF85qS/XbsRGG1MiTByDNlEVpEPceMkDr46LNH95DtRwcsfA==", "dev": true, "license": "MIT", "dependencies": { @@ -361,7 +361,7 @@ "@commitlint/types": "^19.5.0", "chalk": "^5.3.0", "cosmiconfig": "^9.0.0", - "cosmiconfig-typescript-loader": "^5.0.0", + "cosmiconfig-typescript-loader": "^6.1.0", "lodash.isplainobject": "^4.0.6", "lodash.merge": "^4.6.2", "lodash.uniq": "^4.5.0" @@ -431,9 +431,9 @@ } }, "node_modules/@commitlint/rules": { - "version": "19.5.0", - "resolved": "https://registry.npmjs.org/@commitlint/rules/-/rules-19.5.0.tgz", - "integrity": "sha512-hDW5TPyf/h1/EufSHEKSp6Hs+YVsDMHazfJ2azIk9tHPXS6UqSz1dIRs1gpqS3eMXgtkT7JH6TW4IShdqOwhAw==", + "version": "19.6.0", + "resolved": "https://registry.npmjs.org/@commitlint/rules/-/rules-19.6.0.tgz", + "integrity": "sha512-1f2reW7lbrI0X0ozZMesS/WZxgPa4/wi56vFuJENBmed6mWq5KsheN/nxqnl/C23ioxpPO/PL6tXpiiFy5Bhjw==", "dev": true, "license": "MIT", "dependencies": { @@ -1004,9 +1004,9 @@ } }, "node_modules/@eslint/object-schema": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/@eslint/object-schema/-/object-schema-2.1.4.tgz", - "integrity": "sha512-BsWiH1yFGjXXS2yvrf5LyuoSIIbPrGUWob917o+BTKuZ7qJdxX8aJLRxs1fS9n6r7vESrq1OUqb68dANcFXuQQ==", + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@eslint/object-schema/-/object-schema-2.1.5.tgz", + "integrity": "sha512-o0bhxnL89h5Bae5T318nFoFzGy+YE5i/gGkoPAgkmTVdRKTiv3p8JHevPiPaMwoloKfEiiaHlawCqaZMqRm+XQ==", "dev": true, "license": "Apache-2.0", "engines": { @@ -1106,9 +1106,9 @@ } }, "node_modules/@jridgewell/gen-mapping": { - "version": "0.3.5", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.5.tgz", - "integrity": "sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==", + "version": "0.3.8", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.8.tgz", + "integrity": "sha512-imAbBGkb+ebQyxKgzv5Hu2nmROxoDOXHh80evxdoXNOrvAnVx7zimzc1Oo5h9RlfV4vPXaE2iM5pOFbvOCClWA==", "dev": true, "license": "MIT", "dependencies": { @@ -1349,13 +1349,13 @@ "license": "MIT" }, "node_modules/@octokit/plugin-paginate-rest": { - "version": "11.3.5", - "resolved": "https://registry.npmjs.org/@octokit/plugin-paginate-rest/-/plugin-paginate-rest-11.3.5.tgz", - "integrity": "sha512-cgwIRtKrpwhLoBi0CUNuY83DPGRMaWVjqVI/bGKsLJ4PzyWZNaEmhHroI2xlrVXkk6nFv0IsZpOp+ZWSWUS2AQ==", + "version": "11.3.6", + "resolved": "https://registry.npmjs.org/@octokit/plugin-paginate-rest/-/plugin-paginate-rest-11.3.6.tgz", + "integrity": "sha512-zcvqqf/+TicbTCa/Z+3w4eBJcAxCFymtc0UAIsR3dEVoNilWld4oXdscQ3laXamTszUZdusw97K8+DrbFiOwjw==", "dev": true, "license": "MIT", "dependencies": { - "@octokit/types": "^13.6.0" + "@octokit/types": "^13.6.2" }, "engines": { "node": ">= 18" @@ -1429,9 +1429,9 @@ } }, "node_modules/@octokit/types": { - "version": "13.6.1", - "resolved": "https://registry.npmjs.org/@octokit/types/-/types-13.6.1.tgz", - "integrity": "sha512-PHZE9Z+kWXb23Ndik8MKPirBPziOc0D2/3KH1P+6jK5nGWe96kadZuE4jev2/Jq7FvIfTlT2Ltg8Fv2x1v0a5g==", + "version": "13.6.2", + "resolved": "https://registry.npmjs.org/@octokit/types/-/types-13.6.2.tgz", + "integrity": "sha512-WpbZfZUcZU77DrSW4wbsSgTPfKcp286q3ItaIgvSbBpZJlu6mnYXAkjZz6LVZPXkEvLIM8McanyZejKTYUHipA==", "dev": true, "license": "MIT", "dependencies": { @@ -1594,9 +1594,9 @@ } }, "node_modules/@rollup/plugin-typescript": { - "version": "12.1.1", - "resolved": "https://registry.npmjs.org/@rollup/plugin-typescript/-/plugin-typescript-12.1.1.tgz", - "integrity": "sha512-t7O653DpfB5MbFrqPe/VcKFFkvRuFNp9qId3xq4Eth5xlyymzxNpye2z8Hrl0RIMuXTSr5GGcFpkdlMeacUiFQ==", + "version": "12.1.2", + "resolved": "https://registry.npmjs.org/@rollup/plugin-typescript/-/plugin-typescript-12.1.2.tgz", + "integrity": "sha512-cdtSp154H5sv637uMr1a8OTWB0L1SWDSm1rDGiyfcGcvQ6cuTs4MDk2BVEBGysUWago4OJN4EQZqOTl/QY3Jgg==", "dev": true, "license": "MIT", "dependencies": { @@ -1621,9 +1621,9 @@ } }, "node_modules/@rollup/pluginutils": { - "version": "5.1.3", - "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-5.1.3.tgz", - "integrity": "sha512-Pnsb6f32CD2W3uCaLZIzDmeFyQ2b8UWMFI7xtwUezpcGBDVDW6y9XgAWIlARiGAo6eNF5FK5aQTr0LFyNyqq5A==", + "version": "5.1.4", + "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-5.1.4.tgz", + "integrity": "sha512-USm05zrsFxYLPdWWq+K3STlWiT/3ELn3RcV5hJMghpeAIhxfsUIg6mt12CBJBInWMV4VneoV7SfGv8xIwo2qNQ==", "dev": true, "license": "MIT", "dependencies": { @@ -1644,9 +1644,9 @@ } }, "node_modules/@rollup/rollup-android-arm-eabi": { - "version": "4.24.3", - "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.24.3.tgz", - "integrity": "sha512-ufb2CH2KfBWPJok95frEZZ82LtDl0A6QKTa8MoM+cWwDZvVGl5/jNb79pIhRvAalUu+7LD91VYR0nwRD799HkQ==", + "version": "4.28.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.28.1.tgz", + "integrity": "sha512-2aZp8AES04KI2dy3Ss6/MDjXbwBzj+i0GqKtWXgw2/Ma6E4jJvujryO6gJAghIRVz7Vwr9Gtl/8na3nDUKpraQ==", "cpu": [ "arm" ], @@ -1658,9 +1658,9 @@ ] }, "node_modules/@rollup/rollup-android-arm64": { - "version": "4.24.3", - "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.24.3.tgz", - "integrity": "sha512-iAHpft/eQk9vkWIV5t22V77d90CRofgR2006UiCjHcHJFVI1E0oBkQIAbz+pLtthFw3hWEmVB4ilxGyBf48i2Q==", + "version": "4.28.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.28.1.tgz", + "integrity": "sha512-EbkK285O+1YMrg57xVA+Dp0tDBRB93/BZKph9XhMjezf6F4TpYjaUSuPt5J0fZXlSag0LmZAsTmdGGqPp4pQFA==", "cpu": [ "arm64" ], @@ -1672,9 +1672,9 @@ ] }, "node_modules/@rollup/rollup-darwin-arm64": { - "version": "4.24.3", - "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.24.3.tgz", - "integrity": "sha512-QPW2YmkWLlvqmOa2OwrfqLJqkHm7kJCIMq9kOz40Zo9Ipi40kf9ONG5Sz76zszrmIZZ4hgRIkez69YnTHgEz1w==", + "version": "4.28.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.28.1.tgz", + "integrity": "sha512-prduvrMKU6NzMq6nxzQw445zXgaDBbMQvmKSJaxpaZ5R1QDM8w+eGxo6Y/jhT/cLoCvnZI42oEqf9KQNYz1fqQ==", "cpu": [ "arm64" ], @@ -1686,9 +1686,9 @@ ] }, "node_modules/@rollup/rollup-darwin-x64": { - "version": "4.24.3", - "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.24.3.tgz", - "integrity": "sha512-KO0pN5x3+uZm1ZXeIfDqwcvnQ9UEGN8JX5ufhmgH5Lz4ujjZMAnxQygZAVGemFWn+ZZC0FQopruV4lqmGMshow==", + "version": "4.28.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.28.1.tgz", + "integrity": "sha512-WsvbOunsUk0wccO/TV4o7IKgloJ942hVFK1CLatwv6TJspcCZb9umQkPdvB7FihmdxgaKR5JyxDjWpCOp4uZlQ==", "cpu": [ "x64" ], @@ -1700,9 +1700,9 @@ ] }, "node_modules/@rollup/rollup-freebsd-arm64": { - "version": "4.24.3", - "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.24.3.tgz", - "integrity": "sha512-CsC+ZdIiZCZbBI+aRlWpYJMSWvVssPuWqrDy/zi9YfnatKKSLFCe6fjna1grHuo/nVaHG+kiglpRhyBQYRTK4A==", + "version": "4.28.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.28.1.tgz", + "integrity": "sha512-HTDPdY1caUcU4qK23FeeGxCdJF64cKkqajU0iBnTVxS8F7H/7BewvYoG+va1KPSL63kQ1PGNyiwKOfReavzvNA==", "cpu": [ "arm64" ], @@ -1714,9 +1714,9 @@ ] }, "node_modules/@rollup/rollup-freebsd-x64": { - "version": "4.24.3", - "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.24.3.tgz", - "integrity": "sha512-F0nqiLThcfKvRQhZEzMIXOQG4EeX61im61VYL1jo4eBxv4aZRmpin6crnBJQ/nWnCsjH5F6J3W6Stdm0mBNqBg==", + "version": "4.28.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.28.1.tgz", + "integrity": "sha512-m/uYasxkUevcFTeRSM9TeLyPe2QDuqtjkeoTpP9SW0XxUWfcYrGDMkO/m2tTw+4NMAF9P2fU3Mw4ahNvo7QmsQ==", "cpu": [ "x64" ], @@ -1728,9 +1728,9 @@ ] }, "node_modules/@rollup/rollup-linux-arm-gnueabihf": { - "version": "4.24.3", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.24.3.tgz", - "integrity": "sha512-KRSFHyE/RdxQ1CSeOIBVIAxStFC/hnBgVcaiCkQaVC+EYDtTe4X7z5tBkFyRoBgUGtB6Xg6t9t2kulnX6wJc6A==", + "version": "4.28.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.28.1.tgz", + "integrity": "sha512-QAg11ZIt6mcmzpNE6JZBpKfJaKkqTm1A9+y9O+frdZJEuhQxiugM05gnCWiANHj4RmbgeVJpTdmKRmH/a+0QbA==", "cpu": [ "arm" ], @@ -1742,9 +1742,9 @@ ] }, "node_modules/@rollup/rollup-linux-arm-musleabihf": { - "version": "4.24.3", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.24.3.tgz", - "integrity": "sha512-h6Q8MT+e05zP5BxEKz0vi0DhthLdrNEnspdLzkoFqGwnmOzakEHSlXfVyA4HJ322QtFy7biUAVFPvIDEDQa6rw==", + "version": "4.28.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.28.1.tgz", + "integrity": "sha512-dRP9PEBfolq1dmMcFqbEPSd9VlRuVWEGSmbxVEfiq2cs2jlZAl0YNxFzAQS2OrQmsLBLAATDMb3Z6MFv5vOcXg==", "cpu": [ "arm" ], @@ -1756,9 +1756,9 @@ ] }, "node_modules/@rollup/rollup-linux-arm64-gnu": { - "version": "4.24.3", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.24.3.tgz", - "integrity": "sha512-fKElSyXhXIJ9pqiYRqisfirIo2Z5pTTve5K438URf08fsypXrEkVmShkSfM8GJ1aUyvjakT+fn2W7Czlpd/0FQ==", + "version": "4.28.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.28.1.tgz", + "integrity": "sha512-uGr8khxO+CKT4XU8ZUH1TTEUtlktK6Kgtv0+6bIFSeiSlnGJHG1tSFSjm41uQ9sAO/5ULx9mWOz70jYLyv1QkA==", "cpu": [ "arm64" ], @@ -1770,9 +1770,9 @@ ] }, "node_modules/@rollup/rollup-linux-arm64-musl": { - "version": "4.24.3", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.24.3.tgz", - "integrity": "sha512-YlddZSUk8G0px9/+V9PVilVDC6ydMz7WquxozToozSnfFK6wa6ne1ATUjUvjin09jp34p84milxlY5ikueoenw==", + "version": "4.28.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.28.1.tgz", + "integrity": "sha512-QF54q8MYGAqMLrX2t7tNpi01nvq5RI59UBNx+3+37zoKX5KViPo/gk2QLhsuqok05sSCRluj0D00LzCwBikb0A==", "cpu": [ "arm64" ], @@ -1783,10 +1783,24 @@ "linux" ] }, + "node_modules/@rollup/rollup-linux-loongarch64-gnu": { + "version": "4.28.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loongarch64-gnu/-/rollup-linux-loongarch64-gnu-4.28.1.tgz", + "integrity": "sha512-vPul4uodvWvLhRco2w0GcyZcdyBfpfDRgNKU+p35AWEbJ/HPs1tOUrkSueVbBS0RQHAf/A+nNtDpvw95PeVKOA==", + "cpu": [ + "loong64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, "node_modules/@rollup/rollup-linux-powerpc64le-gnu": { - "version": "4.24.3", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.24.3.tgz", - "integrity": "sha512-yNaWw+GAO8JjVx3s3cMeG5Esz1cKVzz8PkTJSfYzE5u7A+NvGmbVFEHP+BikTIyYWuz0+DX9kaA3pH9Sqxp69g==", + "version": "4.28.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.28.1.tgz", + "integrity": "sha512-pTnTdBuC2+pt1Rmm2SV7JWRqzhYpEILML4PKODqLz+C7Ou2apEV52h19CR7es+u04KlqplggmN9sqZlekg3R1A==", "cpu": [ "ppc64" ], @@ -1798,9 +1812,9 @@ ] }, "node_modules/@rollup/rollup-linux-riscv64-gnu": { - "version": "4.24.3", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.24.3.tgz", - "integrity": "sha512-lWKNQfsbpv14ZCtM/HkjCTm4oWTKTfxPmr7iPfp3AHSqyoTz5AgLemYkWLwOBWc+XxBbrU9SCokZP0WlBZM9lA==", + "version": "4.28.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.28.1.tgz", + "integrity": "sha512-vWXy1Nfg7TPBSuAncfInmAI/WZDd5vOklyLJDdIRKABcZWojNDY0NJwruY2AcnCLnRJKSaBgf/GiJfauu8cQZA==", "cpu": [ "riscv64" ], @@ -1812,9 +1826,9 @@ ] }, "node_modules/@rollup/rollup-linux-s390x-gnu": { - "version": "4.24.3", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.24.3.tgz", - "integrity": "sha512-HoojGXTC2CgCcq0Woc/dn12wQUlkNyfH0I1ABK4Ni9YXyFQa86Fkt2Q0nqgLfbhkyfQ6003i3qQk9pLh/SpAYw==", + "version": "4.28.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.28.1.tgz", + "integrity": "sha512-/yqC2Y53oZjb0yz8PVuGOQQNOTwxcizudunl/tFs1aLvObTclTwZ0JhXF2XcPT/zuaymemCDSuuUPXJJyqeDOg==", "cpu": [ "s390x" ], @@ -1826,9 +1840,9 @@ ] }, "node_modules/@rollup/rollup-linux-x64-gnu": { - "version": "4.24.3", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.24.3.tgz", - "integrity": "sha512-mnEOh4iE4USSccBOtcrjF5nj+5/zm6NcNhbSEfR3Ot0pxBwvEn5QVUXcuOwwPkapDtGZ6pT02xLoPaNv06w7KQ==", + "version": "4.28.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.28.1.tgz", + "integrity": "sha512-fzgeABz7rrAlKYB0y2kSEiURrI0691CSL0+KXwKwhxvj92VULEDQLpBYLHpF49MSiPG4sq5CK3qHMnb9tlCjBw==", "cpu": [ "x64" ], @@ -1840,9 +1854,9 @@ ] }, "node_modules/@rollup/rollup-linux-x64-musl": { - "version": "4.24.3", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.24.3.tgz", - "integrity": "sha512-rMTzawBPimBQkG9NKpNHvquIUTQPzrnPxPbCY1Xt+mFkW7pshvyIS5kYgcf74goxXOQk0CP3EoOC1zcEezKXhw==", + "version": "4.28.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.28.1.tgz", + "integrity": "sha512-xQTDVzSGiMlSshpJCtudbWyRfLaNiVPXt1WgdWTwWz9n0U12cI2ZVtWe/Jgwyv/6wjL7b66uu61Vg0POWVfz4g==", "cpu": [ "x64" ], @@ -1854,9 +1868,9 @@ ] }, "node_modules/@rollup/rollup-win32-arm64-msvc": { - "version": "4.24.3", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.24.3.tgz", - "integrity": "sha512-2lg1CE305xNvnH3SyiKwPVsTVLCg4TmNCF1z7PSHX2uZY2VbUpdkgAllVoISD7JO7zu+YynpWNSKAtOrX3AiuA==", + "version": "4.28.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.28.1.tgz", + "integrity": "sha512-wSXmDRVupJstFP7elGMgv+2HqXelQhuNf+IS4V+nUpNVi/GUiBgDmfwD0UGN3pcAnWsgKG3I52wMOBnk1VHr/A==", "cpu": [ "arm64" ], @@ -1868,9 +1882,9 @@ ] }, "node_modules/@rollup/rollup-win32-ia32-msvc": { - "version": "4.24.3", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.24.3.tgz", - "integrity": "sha512-9SjYp1sPyxJsPWuhOCX6F4jUMXGbVVd5obVpoVEi8ClZqo52ViZewA6eFz85y8ezuOA+uJMP5A5zo6Oz4S5rVQ==", + "version": "4.28.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.28.1.tgz", + "integrity": "sha512-ZkyTJ/9vkgrE/Rk9vhMXhf8l9D+eAhbAVbsGsXKy2ohmJaWg0LPQLnIxRdRp/bKyr8tXuPlXhIoGlEB5XpJnGA==", "cpu": [ "ia32" ], @@ -1882,9 +1896,9 @@ ] }, "node_modules/@rollup/rollup-win32-x64-msvc": { - "version": "4.24.3", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.24.3.tgz", - "integrity": "sha512-HGZgRFFYrMrP3TJlq58nR1xy8zHKId25vhmm5S9jETEfDf6xybPxsavFTJaufe2zgOGYJBskGlj49CwtEuFhWQ==", + "version": "4.28.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.28.1.tgz", + "integrity": "sha512-ZvK2jBafvttJjoIdKm/Q/Bh7IJ1Ose9IBOwpOXcOvW3ikGTQGmKDgxTC6oCAzW6PynbkKP8+um1du81XJHZ0JA==", "cpu": [ "x64" ], @@ -1978,9 +1992,9 @@ } }, "node_modules/@semantic-release/github": { - "version": "11.0.0", - "resolved": "https://registry.npmjs.org/@semantic-release/github/-/github-11.0.0.tgz", - "integrity": "sha512-Uon6G6gJD8U1JNvPm7X0j46yxNRJ8Ui6SgK4Zw5Ktu8RgjEft3BGn+l/RX1TTzhhO3/uUcKuqM+/9/ETFxWS/Q==", + "version": "11.0.1", + "resolved": "https://registry.npmjs.org/@semantic-release/github/-/github-11.0.1.tgz", + "integrity": "sha512-Z9cr0LgU/zgucbT9cksH0/pX9zmVda9hkDPcgIE0uvjMQ8w/mElDivGjx1w1pEQ+MuQJ5CBq3VCF16S6G4VH3A==", "dev": true, "license": "MIT", "dependencies": { @@ -2125,9 +2139,9 @@ } }, "node_modules/@semantic-release/release-notes-generator": { - "version": "14.0.1", - "resolved": "https://registry.npmjs.org/@semantic-release/release-notes-generator/-/release-notes-generator-14.0.1.tgz", - "integrity": "sha512-K0w+5220TM4HZTthE5dDpIuFrnkN1NfTGPidJFm04ULT1DEZ9WG89VNXN7F0c+6nMEpWgqmPvb7vY7JkB2jyyA==", + "version": "14.0.2", + "resolved": "https://registry.npmjs.org/@semantic-release/release-notes-generator/-/release-notes-generator-14.0.2.tgz", + "integrity": "sha512-ur2l2tVLBfX3fSEO2rCy2X6Kzg5S7BHGqdwTHvJrpWp4mOEN7W4K/2kWAjvfAlwMenEKjMnDIhBbxxjnP0S9hw==", "dev": true, "license": "MIT", "dependencies": { @@ -2248,9 +2262,9 @@ } }, "node_modules/@types/conventional-commits-parser": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/@types/conventional-commits-parser/-/conventional-commits-parser-5.0.0.tgz", - "integrity": "sha512-loB369iXNmAZglwWATL+WRe+CRMmmBPtpolYzIebFaX4YA3x+BEfLqhUAV9WanycKI3TG1IMr5bMJDajDKLlUQ==", + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/@types/conventional-commits-parser/-/conventional-commits-parser-5.0.1.tgz", + "integrity": "sha512-7uz5EHdzz2TqoMfV7ee61Egf5y6NkcO4FB/1iCCQnbeiI1F3xzv3vK5dBCXUCLQgGYS+mUeigK1iKQzvED+QnQ==", "dev": true, "license": "MIT", "dependencies": { @@ -2616,9 +2630,9 @@ } }, "node_modules/@vitest/pretty-format": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/@vitest/pretty-format/-/pretty-format-2.1.4.tgz", - "integrity": "sha512-L95zIAkEuTDbUX1IsjRl+vyBSLh3PwLLgKpghl37aCK9Jvw0iP+wKwIFhfjdUtA2myLgjrG6VU6JCFLv8q/3Ww==", + "version": "2.1.8", + "resolved": "https://registry.npmjs.org/@vitest/pretty-format/-/pretty-format-2.1.8.tgz", + "integrity": "sha512-9HiSZ9zpqNLKlbIDRWOnAWqgcA7xu+8YxXSekhr0Ykab7PAYFkhkwoqVArPOtJhPmYeE2YHgKZlj3CP36z2AJQ==", "dev": true, "license": "MIT", "dependencies": { @@ -2742,14 +2756,11 @@ } }, "node_modules/agent-base": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.1.tgz", - "integrity": "sha512-H0TSyFNDMomMNJQBn8wFV5YC/2eJ+VXECwOadZJT554xP6cODZHPX3H9QMQECxvrgiSOP1pHjy1sMWQVYJOUOA==", + "version": "7.1.3", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.3.tgz", + "integrity": "sha512-jRR5wdylq8CkOe6hei19GGZnxM6rBGwFl3Bg0YItGDimvjGtAvdZk4Pu6Cl4u4Igsws4a1fd1Vq3ezrhn4KmFw==", "dev": true, "license": "MIT", - "dependencies": { - "debug": "^4.3.4" - }, "engines": { "node": ">= 14" } @@ -2788,23 +2799,26 @@ "url": "https://github.com/sponsors/epoberezkin" } }, - "node_modules/algo-msgpack-with-bigint": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/algo-msgpack-with-bigint/-/algo-msgpack-with-bigint-2.1.1.tgz", - "integrity": "sha512-F1tGh056XczEaEAqu7s+hlZUDWwOBT70Eq0lfMpBP2YguSQVyxRbprLq5rELXKQOyOaixTWYhMeMQMzP0U5FoQ==", + "node_modules/algorand-msgpack": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/algorand-msgpack/-/algorand-msgpack-1.1.0.tgz", + "integrity": "sha512-08k7pBQnkaUB5p+jL7f1TRaUIlTSDE0cesFu1mD7llLao+1cAhtvvZmGE3OnisTd0xOn118QMw74SRqddqaYvw==", + "dev": true, "license": "ISC", + "peer": true, "engines": { - "node": ">= 10" + "node": ">= 14" } }, "node_modules/algosdk": { - "version": "2.9.0", - "resolved": "https://registry.npmjs.org/algosdk/-/algosdk-2.9.0.tgz", - "integrity": "sha512-o0n0nLMbTX6SFQdMUk2/2sy50jmEmZk5OTPYSh2aAeP8DUPxrhjMPfwGsYNvaO+qk75MixC2eWpfA9vygCQ/Mg==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/algosdk/-/algosdk-3.0.0.tgz", + "integrity": "sha512-PIKZ/YvbBpCudduug4KSH1CY/pTotI7/ccbUIbXKtcI9Onevl+57E+K5X4ow4gsCdysZ8zVvSLdxuCcXvsmPOw==", + "dev": true, "license": "MIT", + "peer": true, "dependencies": { - "algo-msgpack-with-bigint": "^2.1.1", - "buffer": "^6.0.3", + "algorand-msgpack": "^1.1.0", "hi-base32": "^0.5.1", "js-sha256": "^0.9.0", "js-sha3": "^0.8.0", @@ -2821,19 +2835,25 @@ "version": "0.9.0", "resolved": "https://registry.npmjs.org/js-sha256/-/js-sha256-0.9.0.tgz", "integrity": "sha512-sga3MHh9sgQN2+pJ9VYZ+1LPwXOxuBJBA5nrR5/ofPfuiJBE2hnjsaN8se8JznOmGLN2p49Pe5U/ttafcs/apA==", - "license": "MIT" + "dev": true, + "license": "MIT", + "peer": true }, "node_modules/algosdk/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==", - "license": "MIT" + "dev": true, + "license": "MIT", + "peer": true }, "node_modules/algosdk/node_modules/js-sha512": { "version": "0.8.0", "resolved": "https://registry.npmjs.org/js-sha512/-/js-sha512-0.8.0.tgz", "integrity": "sha512-PWsmefG6Jkodqt+ePTvBZCSMFgN7Clckjd0O7su3I0+BW2QWUTJNzjktHsztGLhncP2h8mcF9V9Y2Ha59pAViQ==", - "license": "MIT" + "dev": true, + "license": "MIT", + "peer": true }, "node_modules/ansi-escapes": { "version": "7.0.0", @@ -2898,14 +2918,14 @@ "license": "MIT" }, "node_modules/array-buffer-byte-length": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.1.tgz", - "integrity": "sha512-ahC5W1xgou+KTXix4sAO8Ki12Q+jf4i0+tmk3sC+zgcynshkHxzpXdImBehiUYKKKDwvfFiJl1tZt6ewscS1Mg==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.2.tgz", + "integrity": "sha512-LHE+8BuR7RYGDKvnrmcuSq3tDcKv9OFEXQt/HpbZhY7V6h0zlUXutnAD82GiFx9rdieCMjkvtcsPqBwgUl1Iiw==", "dev": true, "license": "MIT", "dependencies": { - "call-bind": "^1.0.5", - "is-array-buffer": "^3.0.4" + "call-bound": "^1.0.3", + "is-array-buffer": "^3.0.5" }, "engines": { "node": ">= 0.4" @@ -2922,20 +2942,19 @@ "license": "MIT" }, "node_modules/arraybuffer.prototype.slice": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.3.tgz", - "integrity": "sha512-bMxMKAjg13EBSVscxTaYA4mRc5t1UAXa2kXiGTNfZ079HIWXEkKmkgFrh/nJqamaLSrXO5H4WFFkPEaLJWbs3A==", + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.4.tgz", + "integrity": "sha512-BNoCY6SXXPQ7gF2opIP4GBE+Xw7U+pHMYKuzjgCN3GwiaIR09UUeKfheyIry77QtrCBlC0KK0q5/TER/tYh3PQ==", "dev": true, "license": "MIT", "dependencies": { "array-buffer-byte-length": "^1.0.1", - "call-bind": "^1.0.5", + "call-bind": "^1.0.8", "define-properties": "^1.2.1", - "es-abstract": "^1.22.3", - "es-errors": "^1.2.1", - "get-intrinsic": "^1.2.3", - "is-array-buffer": "^3.0.4", - "is-shared-array-buffer": "^1.0.2" + "es-abstract": "^1.23.5", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.6", + "is-array-buffer": "^3.0.4" }, "engines": { "node": ">= 0.4" @@ -3000,6 +3019,7 @@ "version": "1.5.1", "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", + "dev": true, "funding": [ { "type": "github", @@ -3057,15 +3077,17 @@ "version": "9.1.2", "resolved": "https://registry.npmjs.org/bignumber.js/-/bignumber.js-9.1.2.tgz", "integrity": "sha512-2/mKyZH9K85bzOEfhXDBFZTGd1CTs+5IHpeFQo9luiBG7hghdC851Pj2WAhb6E3R6b9tZj/XKhbg4fum+Kepug==", + "dev": true, "license": "MIT", + "peer": true, "engines": { "node": "*" } }, "node_modules/bn.js": { - "version": "4.12.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", + "version": "4.12.1", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.1.tgz", + "integrity": "sha512-k8TVBiPkPJT9uHLdOKfFpqcfprwBFOAAXXozRubr7R7PfIuKvQlzcI4M0pALeqXN09vdaMbUdUj+pass+uULAg==", "license": "MIT" }, "node_modules/bottleneck": { @@ -3109,6 +3131,7 @@ "version": "6.0.3", "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz", "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==", + "dev": true, "funding": [ { "type": "github", @@ -3140,17 +3163,47 @@ } }, "node_modules/call-bind": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.7.tgz", - "integrity": "sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==", + "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", "dependencies": { + "call-bind-apply-helpers": "^1.0.0", "es-define-property": "^1.0.0", - "es-errors": "^1.3.0", - "function-bind": "^1.1.2", "get-intrinsic": "^1.2.4", - "set-function-length": "^1.2.1" + "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.1", + "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.1.tgz", + "integrity": "sha512-BhYE+WDaywFg2TBWYNXAE+8B1ATnThNBqXHP5nQu0jWJdVvY2hvkpyB3qOmtmDePiS5/BDQ8wASEWGMWRG148g==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/call-bound": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/call-bound/-/call-bound-1.0.3.tgz", + "integrity": "sha512-YTd+6wGlNlPxSuri7Y6X8tY2dmm12UMH66RpKMhiX6rsk5wXXnYgbUcOt8kiS31/AjfoTOvCsE+w8nZQLQnzHA==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.1", + "get-intrinsic": "^1.2.6" }, "engines": { "node": ">= 0.4" @@ -3187,9 +3240,9 @@ } }, "node_modules/chalk": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.3.0.tgz", - "integrity": "sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w==", + "version": "5.4.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.4.0.tgz", + "integrity": "sha512-ZkD35Mx92acjB2yNJgziGqT9oKHEOxjTBTDRpOsRWtdecL/0jM3z5kM/CTzHWvHIen1GvkM85p6TuFfDGfc8/Q==", "license": "MIT", "engines": { "node": "^12.17.0 || ^14.13 || >=16.0.0" @@ -4017,21 +4070,21 @@ } }, "node_modules/cosmiconfig-typescript-loader": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/cosmiconfig-typescript-loader/-/cosmiconfig-typescript-loader-5.1.0.tgz", - "integrity": "sha512-7PtBB+6FdsOvZyJtlF3hEPpACq7RQX6BVGsgC7/lfVXnKMvNCu/XY3ykreqG5w/rBNdu2z8LCIKoF3kpHHdHlA==", + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/cosmiconfig-typescript-loader/-/cosmiconfig-typescript-loader-6.1.0.tgz", + "integrity": "sha512-tJ1w35ZRUiM5FeTzT7DtYWAFFv37ZLqSRkGi2oeCK1gPhvaWjkAtfXvLmvE1pRfxxp9aQo6ba/Pvg1dKj05D4g==", "dev": true, "license": "MIT", "dependencies": { - "jiti": "^1.21.6" + "jiti": "^2.4.1" }, "engines": { - "node": ">=v16" + "node": ">=v18" }, "peerDependencies": { "@types/node": "*", - "cosmiconfig": ">=8.2", - "typescript": ">=4" + "cosmiconfig": ">=9", + "typescript": ">=5" } }, "node_modules/cross-spawn": { @@ -4091,15 +4144,15 @@ } }, "node_modules/data-view-buffer": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/data-view-buffer/-/data-view-buffer-1.0.1.tgz", - "integrity": "sha512-0lht7OugA5x3iJLOWFhWK/5ehONdprk0ISXqVFn/NFrDu+cuc8iADFrGQz5BnRK7LLU3JmkbXSxaqX+/mXYtUA==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/data-view-buffer/-/data-view-buffer-1.0.2.tgz", + "integrity": "sha512-EmKO5V3OLXh1rtK2wgXRansaK1/mtVdTUEiEI0W8RkvgT05kfxaH29PliLnpLP73yYO6142Q72QNa8Wx/A5CqQ==", "dev": true, "license": "MIT", "dependencies": { - "call-bind": "^1.0.6", + "call-bound": "^1.0.3", "es-errors": "^1.3.0", - "is-data-view": "^1.0.1" + "is-data-view": "^1.0.2" }, "engines": { "node": ">= 0.4" @@ -4109,31 +4162,31 @@ } }, "node_modules/data-view-byte-length": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/data-view-byte-length/-/data-view-byte-length-1.0.1.tgz", - "integrity": "sha512-4J7wRJD3ABAzr8wP+OcIcqq2dlUKp4DVflx++hs5h5ZKydWMI6/D/fAot+yh6g2tHh8fLFTvNOaVN357NvSrOQ==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/data-view-byte-length/-/data-view-byte-length-1.0.2.tgz", + "integrity": "sha512-tuhGbE6CfTM9+5ANGf+oQb72Ky/0+s3xKUpHvShfiz2RxMFgFPjsXuRLBVMtvMs15awe45SRb83D6wH4ew6wlQ==", "dev": true, "license": "MIT", "dependencies": { - "call-bind": "^1.0.7", + "call-bound": "^1.0.3", "es-errors": "^1.3.0", - "is-data-view": "^1.0.1" + "is-data-view": "^1.0.2" }, "engines": { "node": ">= 0.4" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "url": "https://github.com/sponsors/inspect-js" } }, "node_modules/data-view-byte-offset": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/data-view-byte-offset/-/data-view-byte-offset-1.0.0.tgz", - "integrity": "sha512-t/Ygsytq+R995EJ5PZlD4Cu56sWa8InXySaViRzw9apusqsOO2bQP+SbYzAhR0pFKoB+43lYy8rWban9JSuXnA==", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/data-view-byte-offset/-/data-view-byte-offset-1.0.1.tgz", + "integrity": "sha512-BS8PfmtDGnrgYdOonGZQdLZslWIeCGFP9tpan0hi1Co2Zr2NKADsvGYA8XxuG/4UWgJ6Cjtv+YJnB6MM69QGlQ==", "dev": true, "license": "MIT", "dependencies": { - "call-bind": "^1.0.6", + "call-bound": "^1.0.2", "es-errors": "^1.3.0", "is-data-view": "^1.0.1" }, @@ -4152,9 +4205,9 @@ "license": "MIT" }, "node_modules/debug": { - "version": "4.3.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.7.tgz", - "integrity": "sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==", + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.0.tgz", + "integrity": "sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==", "dev": true, "license": "MIT", "dependencies": { @@ -4278,6 +4331,21 @@ "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", + "dependencies": { + "call-bind-apply-helpers": "^1.0.1", + "es-errors": "^1.3.0", + "gopd": "^1.2.0" + }, + "engines": { + "node": ">= 0.4" + } + }, "node_modules/duplexer2": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/duplexer2/-/duplexer2-0.1.4.tgz", @@ -4328,9 +4396,9 @@ "license": "MIT" }, "node_modules/elliptic": { - "version": "6.6.0", - "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.6.0.tgz", - "integrity": "sha512-dpwoQcLc/2WLQvJvLRHKZ+f9FgOdjnq11rurqwekGQygGPsYSK29OMMD2WalatiqQ+XGFDglTNixpPfI+lpaAA==", + "version": "6.6.1", + "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.6.1.tgz", + "integrity": "sha512-RaddvvMatK2LJHqFJ+YA4WysVN5Ita9E35botqIYspQ4TkRAlCicdzKOjlyv/1Za5RyTNn7di//eEV0uTAfe3g==", "license": "MIT", "dependencies": { "bn.js": "^4.11.9", @@ -4505,58 +4573,60 @@ } }, "node_modules/es-abstract": { - "version": "1.23.3", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.23.3.tgz", - "integrity": "sha512-e+HfNH61Bj1X9/jLc5v1owaLYuHdeHHSQlkhCBiTK8rBvKaULl/beGMxwrMXjpYrv4pz22BlY570vVePA2ho4A==", + "version": "1.23.6", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.23.6.tgz", + "integrity": "sha512-Ifco6n3yj2tMZDWNLyloZrytt9lqqlwvS83P3HtaETR0NUOYnIULGGHpktqYGObGy+8wc1okO25p8TjemhImvA==", "dev": true, "license": "MIT", "dependencies": { "array-buffer-byte-length": "^1.0.1", - "arraybuffer.prototype.slice": "^1.0.3", + "arraybuffer.prototype.slice": "^1.0.4", "available-typed-arrays": "^1.0.7", - "call-bind": "^1.0.7", + "call-bind": "^1.0.8", + "call-bound": "^1.0.3", "data-view-buffer": "^1.0.1", "data-view-byte-length": "^1.0.1", "data-view-byte-offset": "^1.0.0", - "es-define-property": "^1.0.0", + "es-define-property": "^1.0.1", "es-errors": "^1.3.0", "es-object-atoms": "^1.0.0", "es-set-tostringtag": "^2.0.3", - "es-to-primitive": "^1.2.1", - "function.prototype.name": "^1.1.6", - "get-intrinsic": "^1.2.4", + "es-to-primitive": "^1.3.0", + "function.prototype.name": "^1.1.7", + "get-intrinsic": "^1.2.6", "get-symbol-description": "^1.0.2", - "globalthis": "^1.0.3", - "gopd": "^1.0.1", + "globalthis": "^1.0.4", + "gopd": "^1.2.0", "has-property-descriptors": "^1.0.2", - "has-proto": "^1.0.3", - "has-symbols": "^1.0.3", + "has-proto": "^1.2.0", + "has-symbols": "^1.1.0", "hasown": "^2.0.2", - "internal-slot": "^1.0.7", + "internal-slot": "^1.1.0", "is-array-buffer": "^3.0.4", "is-callable": "^1.2.7", - "is-data-view": "^1.0.1", + "is-data-view": "^1.0.2", "is-negative-zero": "^2.0.3", - "is-regex": "^1.1.4", + "is-regex": "^1.2.1", "is-shared-array-buffer": "^1.0.3", - "is-string": "^1.0.7", + "is-string": "^1.1.1", "is-typed-array": "^1.1.13", - "is-weakref": "^1.0.2", - "object-inspect": "^1.13.1", + "is-weakref": "^1.1.0", + "math-intrinsics": "^1.0.0", + "object-inspect": "^1.13.3", "object-keys": "^1.1.1", "object.assign": "^4.1.5", - "regexp.prototype.flags": "^1.5.2", - "safe-array-concat": "^1.1.2", - "safe-regex-test": "^1.0.3", - "string.prototype.trim": "^1.2.9", - "string.prototype.trimend": "^1.0.8", + "regexp.prototype.flags": "^1.5.3", + "safe-array-concat": "^1.1.3", + "safe-regex-test": "^1.1.0", + "string.prototype.trim": "^1.2.10", + "string.prototype.trimend": "^1.0.9", "string.prototype.trimstart": "^1.0.8", "typed-array-buffer": "^1.0.2", "typed-array-byte-length": "^1.0.1", - "typed-array-byte-offset": "^1.0.2", - "typed-array-length": "^1.0.6", + "typed-array-byte-offset": "^1.0.3", + "typed-array-length": "^1.0.7", "unbox-primitive": "^1.0.2", - "which-typed-array": "^1.1.15" + "which-typed-array": "^1.1.16" }, "engines": { "node": ">= 0.4" @@ -4566,14 +4636,11 @@ } }, "node_modules/es-define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.0.tgz", - "integrity": "sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==", + "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", - "dependencies": { - "get-intrinsic": "^1.2.4" - }, "engines": { "node": ">= 0.4" } @@ -4617,15 +4684,15 @@ } }, "node_modules/es-to-primitive": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", - "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.3.0.tgz", + "integrity": "sha512-w+5mJ3GuFL+NjVtJlvydShqE1eN3h3PbI7/5LAsYJP/2qtuMXjfL2LpHSRqo4b4eSF5K/DH1JXKUAHSB2UW50g==", "dev": true, "license": "MIT", "dependencies": { - "is-callable": "^1.1.4", - "is-date-object": "^1.0.1", - "is-symbol": "^1.0.2" + "is-callable": "^1.2.7", + "is-date-object": "^1.0.5", + "is-symbol": "^1.0.4" }, "engines": { "node": ">= 0.4" @@ -5095,9 +5162,9 @@ } }, "node_modules/execa": { - "version": "9.5.1", - "resolved": "https://registry.npmjs.org/execa/-/execa-9.5.1.tgz", - "integrity": "sha512-QY5PPtSonnGwhhHDNI7+3RvY285c7iuJFFB+lU+oEzMY/gEGJ808owqJsrr8Otd1E/x07po1LkUBmdAc5duPAg==", + "version": "9.5.2", + "resolved": "https://registry.npmjs.org/execa/-/execa-9.5.2.tgz", + "integrity": "sha512-EHlpxMCpHWSAh1dgS6bVeoLAXGnJNdR93aabr4QCGbzOM73o5XmRfM/e5FUqsw3aagP8S8XEWUWFAxnRBnAF0Q==", "dev": true, "license": "MIT", "dependencies": { @@ -5343,9 +5410,9 @@ } }, "node_modules/flatted": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.3.1.tgz", - "integrity": "sha512-X8cqMLLie7KsNUDSdzeN8FYK9rEt4Dt67OsG/DNGnYTSDBG4uFAJFBnUeiV+zCVAvwFy56IjM9sH51jVaEhNxw==", + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.3.2.tgz", + "integrity": "sha512-AiwGJM8YcNOaobumgtng+6NHuOqC3A7MixFeDafM3X9cIUM+xUXoS5Vfgf+OihAYe20fxqNM9yPBXJzRtZ/4eA==", "dev": true, "license": "ISC" }, @@ -5481,16 +5548,18 @@ } }, "node_modules/function.prototype.name": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.6.tgz", - "integrity": "sha512-Z5kx79swU5P27WEayXM1tBi5Ze/lbIyiNgU3qyXUOf9b2rgXYyF9Dy9Cx+IQv/Lc8WCG6L82zwUPpSS9hGehIg==", + "version": "1.1.8", + "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.8.tgz", + "integrity": "sha512-e5iwyodOHhbMr/yNrc7fDYG4qlbIvI5gajyzPnb5TCwyhjApznQh1BMFou9b30SevY43gCJKXycoCBjMbsuW0Q==", "dev": true, "license": "MIT", "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1", - "functions-have-names": "^1.2.3" + "call-bind": "^1.0.8", + "call-bound": "^1.0.3", + "define-properties": "^1.2.1", + "functions-have-names": "^1.2.3", + "hasown": "^2.0.2", + "is-callable": "^1.2.7" }, "engines": { "node": ">= 0.4" @@ -5520,17 +5589,22 @@ } }, "node_modules/get-intrinsic": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.4.tgz", - "integrity": "sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==", + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.6.tgz", + "integrity": "sha512-qxsEs+9A+u85HhllWJJFicJfPDhRmjzoYdl64aMWW9yRIJmSyxdn8IEkuIM530/7T+lv0TIHd8L6Q/ra0tEoeA==", "dev": true, "license": "MIT", "dependencies": { + "call-bind-apply-helpers": "^1.0.1", + "dunder-proto": "^1.0.0", + "es-define-property": "^1.0.1", "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0", "function-bind": "^1.1.2", - "has-proto": "^1.0.1", - "has-symbols": "^1.0.3", - "hasown": "^2.0.0" + "gopd": "^1.2.0", + "has-symbols": "^1.1.0", + "hasown": "^2.0.2", + "math-intrinsics": "^1.0.0" }, "engines": { "node": ">= 0.4" @@ -5553,15 +5627,15 @@ } }, "node_modules/get-symbol-description": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.2.tgz", - "integrity": "sha512-g0QYk1dZBxGwk+Ngc+ltRH2IBp2f7zBkBMBJZCDerh6EhlhSR6+9irMCuT/09zD6qkarHUSn529sK/yL4S27mg==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.1.0.tgz", + "integrity": "sha512-w9UMqWwJxHNOvoNzSJ2oPF5wvYcvP7jUvYzhp67yEhTi17ZDBBC1z9pTdGuzjD+EFIqLSYRweZjqfiPzQ06Ebg==", "dev": true, "license": "MIT", "dependencies": { - "call-bind": "^1.0.5", + "call-bound": "^1.0.3", "es-errors": "^1.3.0", - "get-intrinsic": "^1.2.4" + "get-intrinsic": "^1.2.6" }, "engines": { "node": ">= 0.4" @@ -5793,13 +5867,13 @@ } }, "node_modules/gopd": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", - "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz", + "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==", "dev": true, "license": "MIT", - "dependencies": { - "get-intrinsic": "^1.1.3" + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -5842,11 +5916,14 @@ } }, "node_modules/has-bigints": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz", - "integrity": "sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.1.0.tgz", + "integrity": "sha512-R3pbpkcIqv2Pm3dUwgjclDRVmWpTJW2DcMzcIhEXEx1oh/CEMObMm3KLmRJOdvhM7o4uQBnwr8pzRK2sJWIqfg==", "dev": true, "license": "MIT", + "engines": { + "node": ">= 0.4" + }, "funding": { "url": "https://github.com/sponsors/ljharb" } @@ -5875,11 +5952,14 @@ } }, "node_modules/has-proto": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.3.tgz", - "integrity": "sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.2.0.tgz", + "integrity": "sha512-KIL7eQPfHQRC8+XluaIw7BHUwwqL19bQn4hzNgdr+1wXoU0KKj6rufu47lhY7KbJR2C6T6+PfyN0Ea7wkSS+qQ==", "dev": true, "license": "MIT", + "dependencies": { + "dunder-proto": "^1.0.0" + }, "engines": { "node": ">= 0.4" }, @@ -5888,9 +5968,9 @@ } }, "node_modules/has-symbols": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", - "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", + "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", "engines": { @@ -5943,7 +6023,9 @@ "version": "0.5.1", "resolved": "https://registry.npmjs.org/hi-base32/-/hi-base32-0.5.1.tgz", "integrity": "sha512-EmBBpvdYh/4XxsnUybsPag6VikPYnN30td+vQk+GI3qpahVEG9+gTkG0aXVxTjBqQ5T6ijbWIu77O+C5WFWsnA==", - "license": "MIT" + "dev": true, + "license": "MIT", + "peer": true }, "node_modules/highlight.js": { "version": "10.7.3", @@ -6008,13 +6090,13 @@ } }, "node_modules/https-proxy-agent": { - "version": "7.0.5", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.5.tgz", - "integrity": "sha512-1e4Wqeblerz+tMKPIq2EMGiiWW1dIjZOksyHWSUm1rmuvw/how9hBHZ38lAGj5ID4Ik6EdkOw7NmWPy6LAwalw==", + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.6.tgz", + "integrity": "sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw==", "dev": true, "license": "MIT", "dependencies": { - "agent-base": "^7.0.2", + "agent-base": "^7.1.2", "debug": "4" }, "engines": { @@ -6035,6 +6117,7 @@ "version": "1.2.1", "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", + "dev": true, "funding": [ { "type": "github", @@ -6178,15 +6261,15 @@ } }, "node_modules/internal-slot": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.7.tgz", - "integrity": "sha512-NGnrKwXzSms2qUUih/ILZ5JBqNTSa1+ZmP6flaIp6KmSElgE9qdndzS3cqjrDovwFdmwsGsLdeFgB6suw+1e9g==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.1.0.tgz", + "integrity": "sha512-4gd7VpWNQNB4UKKCFFVcp1AVv+FMOgs9NKzjHKusc8jTMhd5eL1NqQqOpE0KzMds804/yHlglp3uxgluOqAPLw==", "dev": true, "license": "MIT", "dependencies": { "es-errors": "^1.3.0", - "hasown": "^2.0.0", - "side-channel": "^1.0.4" + "hasown": "^2.0.2", + "side-channel": "^1.1.0" }, "engines": { "node": ">= 0.4" @@ -6210,14 +6293,15 @@ } }, "node_modules/is-array-buffer": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.4.tgz", - "integrity": "sha512-wcjaerHw0ydZwfhiKbXJWLDY8A7yV7KhjQOpb83hGgGfId/aQa4TOvwyzn2PuswW2gPCYEL/nEAiSVpdOj1lXw==", + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.5.tgz", + "integrity": "sha512-DDfANUiiG2wC1qawP66qlTugJeL5HyzMpfr8lLK+jMQirGzNod0B12cFB/9q838Ru27sBwfw78/rdoU7RERz6A==", "dev": true, "license": "MIT", "dependencies": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.2.1" + "call-bind": "^1.0.8", + "call-bound": "^1.0.3", + "get-intrinsic": "^1.2.6" }, "engines": { "node": ">= 0.4" @@ -6233,28 +6317,47 @@ "dev": true, "license": "MIT" }, + "node_modules/is-async-function": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-async-function/-/is-async-function-2.0.0.tgz", + "integrity": "sha512-Y1JXKrfykRJGdlDwdKlLpLyMIiWqWvuSd17TvZk68PLAOGOoF4Xyav1z0Xhoi+gCYjZVeC5SI+hYFOfvXmGRCA==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/is-bigint": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz", - "integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.1.0.tgz", + "integrity": "sha512-n4ZT37wG78iz03xPRKJrHTdZbe3IicyucEtdRsV5yglwc3GyUfbAfpSeD0FJ41NbUNSt5wbhqfp1fS+BgnvDFQ==", "dev": true, "license": "MIT", "dependencies": { - "has-bigints": "^1.0.1" + "has-bigints": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/is-boolean-object": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz", - "integrity": "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.2.1.tgz", + "integrity": "sha512-l9qO6eFlUETHtuihLcYOaLKByJ1f+N4kthcU9YjHy3N+B3hWv0y/2Nd0mu/7lTFnRQHTrSdXF50HQ3bl5fEnng==", "dev": true, "license": "MIT", "dependencies": { - "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" + "call-bound": "^1.0.2", + "has-tostringtag": "^1.0.2" }, "engines": { "node": ">= 0.4" @@ -6277,9 +6380,9 @@ } }, "node_modules/is-core-module": { - "version": "2.15.1", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.15.1.tgz", - "integrity": "sha512-z0vtXSwucUJtANQWldhbtbt7BnL0vxiFjIdDLAatwhDYty2bad6s+rijD6Ri4YuYJubLzIJLUidCh09e1djEVQ==", + "version": "2.16.0", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.16.0.tgz", + "integrity": "sha512-urTSINYfAYgcbLb0yDQ6egFm6h3Mo1DcF9EkyXSRjjzdHbsulg01qhwWuXdOoUBuTkbQ80KDboXa0vFJ+BDH+g==", "dev": true, "license": "MIT", "dependencies": { @@ -6293,12 +6396,14 @@ } }, "node_modules/is-data-view": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-data-view/-/is-data-view-1.0.1.tgz", - "integrity": "sha512-AHkaJrsUVW6wq6JS8y3JnM/GJF/9cf+k20+iDzlSaJrinEo5+7vRiteOSwBhHRiAyQATN1AmY4hwzxJKPmYf+w==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-data-view/-/is-data-view-1.0.2.tgz", + "integrity": "sha512-RKtWF8pGmS87i2D6gqQu/l7EYRlVdfzemCJN/P3UOs//x1QE7mfhvzHIApBTRf7axvT6DMGwSwBXYCT0nfB9xw==", "dev": true, "license": "MIT", "dependencies": { + "call-bound": "^1.0.2", + "get-intrinsic": "^1.2.6", "is-typed-array": "^1.1.13" }, "engines": { @@ -6309,13 +6414,14 @@ } }, "node_modules/is-date-object": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz", - "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.1.0.tgz", + "integrity": "sha512-PwwhEakHVKTdRNVOw+/Gyh0+MzlCl4R6qKvkhuvLtPMggI1WAHt9sOwZxQLSGpUaDnrdyDsomoRgNnCfKNSXXg==", "dev": true, "license": "MIT", "dependencies": { - "has-tostringtag": "^1.0.0" + "call-bound": "^1.0.2", + "has-tostringtag": "^1.0.2" }, "engines": { "node": ">= 0.4" @@ -6350,6 +6456,22 @@ "node": ">=0.10.0" } }, + "node_modules/is-finalizationregistry": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-finalizationregistry/-/is-finalizationregistry-1.1.1.tgz", + "integrity": "sha512-1pC6N8qWJbWoPtEjgcL2xyhQOP491EQjeUo3qTKcmV8YSDDJrOepfG8pcC7h/QgnQHYSv0mJ3Z/ZWxmatVrysg==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "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", @@ -6359,6 +6481,22 @@ "node": ">=8" } }, + "node_modules/is-generator-function": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.0.10.tgz", + "integrity": "sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/is-glob": { "version": "4.0.3", "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", @@ -6372,6 +6510,19 @@ "node": ">=0.10.0" } }, + "node_modules/is-map": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/is-map/-/is-map-2.0.3.tgz", + "integrity": "sha512-1Qed0/Hr2m+YqxnM09CjA2d/i6YZNfF6R2oRAOj36eUdS6qIV/huPJNSEpKbupewFs+ZsJlxsjjPbc0/afW6Lw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/is-module": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-module/-/is-module-1.0.0.tgz", @@ -6403,13 +6554,14 @@ } }, "node_modules/is-number-object": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.7.tgz", - "integrity": "sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.1.1.tgz", + "integrity": "sha512-lZhclumE1G6VYD8VHe35wFaIif+CTy5SJIi5+3y4psDgWu4wPDoBhF8NxUOinEc7pHgiTsT6MaBb92rKhhD+Xw==", "dev": true, "license": "MIT", "dependencies": { - "has-tostringtag": "^1.0.0" + "call-bound": "^1.0.3", + "has-tostringtag": "^1.0.2" }, "engines": { "node": ">= 0.4" @@ -6452,14 +6604,16 @@ } }, "node_modules/is-regex": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", - "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.2.1.tgz", + "integrity": "sha512-MjYsKHO5O7mCsmRGxWcLWheFqN9DJ/2TmngvjKXihe6efViPqc274+Fx/4fYj/r03+ESvBdTXK0V6tA3rgez1g==", "dev": true, "license": "MIT", "dependencies": { - "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" + "call-bound": "^1.0.2", + "gopd": "^1.2.0", + "has-tostringtag": "^1.0.2", + "hasown": "^2.0.2" }, "engines": { "node": ">= 0.4" @@ -6468,14 +6622,27 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/is-set": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/is-set/-/is-set-2.0.3.tgz", + "integrity": "sha512-iPAjerrse27/ygGLxw+EBR9agv9Y6uLeYVJMu+QNCoouJ1/1ri0mGrcWpfCqFZuzzx3WjtwxG098X+n4OuRkPg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/is-shared-array-buffer": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.3.tgz", - "integrity": "sha512-nA2hv5XIhLR3uVzDDfCIknerhx8XUKnstuOERPNNIinXG7v9u+ohXF67vxm4TPTEPU6lm61ZkwP3c9PCB97rhg==", + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.4.tgz", + "integrity": "sha512-ISWac8drv4ZGfwKl5slpHG9OwPNty4jOWPRIhBpxOoD+hqITiwuipOQ2bNthAzwA3B4fIjO4Nln74N0S9byq8A==", "dev": true, "license": "MIT", "dependencies": { - "call-bind": "^1.0.7" + "call-bound": "^1.0.3" }, "engines": { "node": ">= 0.4" @@ -6498,13 +6665,14 @@ } }, "node_modules/is-string": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz", - "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.1.1.tgz", + "integrity": "sha512-BtEeSsoaQjlSPBemMQIrY1MY0uM6vnS1g5fmufYOtnxLGUZM2178PKbhsk7Ffv58IX+ZtcvoGwccYsh0PglkAA==", "dev": true, "license": "MIT", "dependencies": { - "has-tostringtag": "^1.0.0" + "call-bound": "^1.0.3", + "has-tostringtag": "^1.0.2" }, "engines": { "node": ">= 0.4" @@ -6514,13 +6682,15 @@ } }, "node_modules/is-symbol": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz", - "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.1.1.tgz", + "integrity": "sha512-9gGx6GTtCQM73BgmHQXfDmLtfjjTUDSyoxTCbp5WtoixAhfgsDirWIcVQ/IHpvI5Vgd5i/J5F7B9cN/WlVbC/w==", "dev": true, "license": "MIT", "dependencies": { - "has-symbols": "^1.0.2" + "call-bound": "^1.0.2", + "has-symbols": "^1.1.0", + "safe-regex-test": "^1.1.0" }, "engines": { "node": ">= 0.4" @@ -6543,13 +6713,13 @@ } }, "node_modules/is-typed-array": { - "version": "1.1.13", - "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.13.tgz", - "integrity": "sha512-uZ25/bUAlUY5fR4OKT4rZQEBrzQWYV9ZJYGGsUmEJ6thodVJ1HX64ePQ6Z0qPWP+m+Uq6e9UugrE38jeYsDSMw==", + "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", "dependencies": { - "which-typed-array": "^1.1.14" + "which-typed-array": "^1.1.16" }, "engines": { "node": ">= 0.4" @@ -6571,14 +6741,47 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/is-weakmap": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/is-weakmap/-/is-weakmap-2.0.2.tgz", + "integrity": "sha512-K5pXYOm9wqY1RgjpL3YTkF39tni1XajUIkawTLUo9EZEVUFga5gSQJF8nNS7ZwJQ02y+1YCNYcMh+HIf1ZqE+w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/is-weakref": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz", - "integrity": "sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.1.0.tgz", + "integrity": "sha512-SXM8Nwyys6nT5WP6pltOwKytLV7FqQ4UiibxVmW+EIosHcmCqkkjViTb5SNssDlkCiEYRP1/pdWUKVvZBmsR2Q==", "dev": true, "license": "MIT", "dependencies": { - "call-bind": "^1.0.2" + "call-bound": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-weakset": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/is-weakset/-/is-weakset-2.0.4.tgz", + "integrity": "sha512-mfcwb6IzQyOKTs84CQMrOwW4gQcaTOAWJ0zzJCl2WSPDrWk/OzDaImWFH3djXhb24g4eudZfLRozAvPGw4d9hQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3", + "get-intrinsic": "^1.2.6" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -6707,13 +6910,13 @@ } }, "node_modules/jiti": { - "version": "1.21.6", - "resolved": "https://registry.npmjs.org/jiti/-/jiti-1.21.6.tgz", - "integrity": "sha512-2yTgeWTWzMWkHu6Jp9NKgePDaYHbntiwvYuuJLbbN9vl7DC9DvXKOB2BC3ZZ92D3cvV/aflH0osDfwpHepQ53w==", + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/jiti/-/jiti-2.4.2.tgz", + "integrity": "sha512-rg9zJN+G4n2nfJl5MW3BMygZX56zKPNVEYYqq7adpmMh4Jn2QNEwhvQlFy6jPVdcod7txZtKHWnyZiA3a0zP7A==", "dev": true, "license": "MIT", "bin": { - "jiti": "bin/jiti.js" + "jiti": "lib/jiti-cli.mjs" } }, "node_modules/js-sha256": { @@ -6758,7 +6961,9 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/json-bigint/-/json-bigint-1.0.0.tgz", "integrity": "sha512-SiPv/8VpZuWbvLSMtTDU8hEfrZWg/mH/nV/b4o0CYbSxu1UIQPLdwKOCIyLQX+VIPO5vrLX3i8qtqFyhdPSUSQ==", + "dev": true, "license": "MIT", + "peer": true, "dependencies": { "bignumber.js": "^9.0.0" } @@ -6792,13 +6997,14 @@ "license": "MIT" }, "node_modules/json-stable-stringify": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/json-stable-stringify/-/json-stable-stringify-1.1.1.tgz", - "integrity": "sha512-SU/971Kt5qVQfJpyDveVhQ/vya+5hvrjClFOcr8c0Fq5aODJjMwutrOfCU+eCnVD5gpx1Q3fEqkyom77zH1iIg==", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/json-stable-stringify/-/json-stable-stringify-1.2.0.tgz", + "integrity": "sha512-ex8jk9BZHBolvbd5cRnAgwyaYcYB0qZldy1e+LCOdcF6+AUmVZ6LcGUMzsRTW83QMeu+GxZGrcLqxqrgfXGvIw==", "dev": true, "license": "MIT", "dependencies": { - "call-bind": "^1.0.5", + "call-bind": "^1.0.8", + "call-bound": "^1.0.3", "isarray": "^2.0.5", "jsonify": "^0.0.1", "object-keys": "^1.1.1" @@ -7083,9 +7289,9 @@ } }, "node_modules/magic-string": { - "version": "0.30.12", - "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.12.tgz", - "integrity": "sha512-Ea8I3sQMVXr8JhN4z+H/d8zwo+tYDgHE9+5G4Wnrwhs0gaK9fXTKx0Tw5Xwsd/bCPTTZNRAdpyzvoeORe9LYpw==", + "version": "0.30.17", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.17.tgz", + "integrity": "sha512-sNPKHvyjVf7gyjwS4xGTaW/mCnF8wnjtifKBEhxfZ7E/S8tQ0rssrwGNn6q8JH/ohItJfSQp9mBtQYuTlH5QnA==", "dev": true, "license": "MIT", "dependencies": { @@ -7155,6 +7361,16 @@ "marked": ">=1 <15" } }, + "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", + "engines": { + "node": ">= 0.4" + } + }, "node_modules/memorystream": { "version": "0.3.1", "resolved": "https://registry.npmjs.org/memorystream/-/memorystream-0.3.1.tgz", @@ -7222,9 +7438,9 @@ } }, "node_modules/mime": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/mime/-/mime-4.0.4.tgz", - "integrity": "sha512-v8yqInVjhXyqP6+Kw4fV3ZzeMRqEW6FotRsKXjRS5VMTNIuXsdRoAvklpoRgSqXm6o9VNH4/C0mgedko9DdLsQ==", + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/mime/-/mime-4.0.6.tgz", + "integrity": "sha512-4rGt7rvQHBbaSOF9POGkk1ocRP16Md1x36Xma8sz8h8/vfCUI2OtEIeCqe4Ofes853x4xDoPiFLIT47J5fI/7A==", "dev": true, "funding": [ "https://github.com/sponsors/broofa" @@ -7367,9 +7583,9 @@ "license": "MIT" }, "node_modules/node-emoji": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/node-emoji/-/node-emoji-2.1.3.tgz", - "integrity": "sha512-E2WEOVsgs7O16zsURJ/eH8BqhF029wGpEOnv7Urwdo2wmQanOACwJQh0devF9D9RhoZru0+9JXIS0dBXIAz+lA==", + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/node-emoji/-/node-emoji-2.2.0.tgz", + "integrity": "sha512-Z3lTE9pLaJF47NyMhd4ww1yFTAP8YhYI8SleJiHzM46Fgpm5cnNzSl9XfzFNqbaz+VlJrIj3fXQ4DeN1Rjm6cw==", "dev": true, "license": "MIT", "dependencies": { @@ -10454,9 +10670,9 @@ } }, "node_modules/object-inspect": { - "version": "1.13.2", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.2.tgz", - "integrity": "sha512-IRZSRuzJiynemAXPYtPe5BoI/RESNYR7TYm50MC5Mqbd3Jmw5y790sErYw3V6SryFJD64b74qQQs9wn5Bg/k3g==", + "version": "1.13.3", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.3.tgz", + "integrity": "sha512-kDCGIbxkDSXE3euJZZXzc6to7fCrKHNI/hSRQnRuQ+BWjFNzZwiFF8fj/6o2t2G9/jTj8PSIYTfCLelLZEeRpA==", "dev": true, "license": "MIT", "engines": { @@ -10477,15 +10693,17 @@ } }, "node_modules/object.assign": { - "version": "4.1.5", - "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.5.tgz", - "integrity": "sha512-byy+U7gp+FVwmyzKPYhW2h5l3crpmGsxl7X2s8y43IgxvG4g3QZ6CffDtsNQy1WsmZpQbO+ybo0AlW7TY6DcBQ==", + "version": "4.1.7", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.7.tgz", + "integrity": "sha512-nK28WOo+QIjBkDduTINE4JkF/UJJKyf2EJxvJKfblDpyg0Q+pkOHNTL0Qwy6NP6FhE/EnzV73BxxqcJaXY9anw==", "dev": true, "license": "MIT", "dependencies": { - "call-bind": "^1.0.5", + "call-bind": "^1.0.8", + "call-bound": "^1.0.3", "define-properties": "^1.2.1", - "has-symbols": "^1.0.3", + "es-object-atoms": "^1.0.0", + "has-symbols": "^1.1.0", "object-keys": "^1.1.1" }, "engines": { @@ -10638,9 +10856,9 @@ } }, "node_modules/p-map": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/p-map/-/p-map-7.0.2.tgz", - "integrity": "sha512-z4cYYMMdKHzw4O5UkWJImbZynVIo0lSGTXc7bzB1e/rrDqkgGUNysK/o4bTr+0+xKvvLoTyGqYC4Fgljy9qe1Q==", + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-7.0.3.tgz", + "integrity": "sha512-VkndIv2fIB99swvQoA65bm+fsmt6UNdGeIB0oxBs+WhAhdh08QA04JXpI7rbB9r08/nkbysKoya9rtDERYOYMA==", "dev": true, "license": "MIT", "engines": { @@ -11090,9 +11308,9 @@ } }, "node_modules/postcss": { - "version": "8.4.47", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.47.tgz", - "integrity": "sha512-56rxCq7G/XfB4EkXq9Egn5GCqugWvDFjafDOThIdMBsI15iqPqR5r15TfSr1YPYeEI19YeaXMCbY6u88Y76GLQ==", + "version": "8.4.49", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.49.tgz", + "integrity": "sha512-OCVPnIObs4N29kxTjzLfUryOkvZEq+pf8jTF0lg8E7uETuWHA+v7j3c/xJmiqpX450191LlmZfUKkXxkTry7nA==", "dev": true, "funding": [ { @@ -11111,7 +11329,7 @@ "license": "MIT", "dependencies": { "nanoid": "^3.3.7", - "picocolors": "^1.1.0", + "picocolors": "^1.1.1", "source-map-js": "^1.2.1" }, "engines": { @@ -11158,9 +11376,9 @@ } }, "node_modules/pretty-ms": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/pretty-ms/-/pretty-ms-9.1.0.tgz", - "integrity": "sha512-o1piW0n3tgKIKCwk2vpM/vOV13zjJzvP37Ioze54YlTHE06m4tjEbzg9WsKkvTuyYln2DHjo5pY4qrZGI0otpw==", + "version": "9.2.0", + "resolved": "https://registry.npmjs.org/pretty-ms/-/pretty-ms-9.2.0.tgz", + "integrity": "sha512-4yf0QO/sllf/1zbZWYnvWw3NxCQwLXKzIj0G849LSufP15BXKM0rbD2Z3wVnkMfjdn/CB0Dpp444gYAACdsplg==", "dev": true, "license": "MIT", "dependencies": { @@ -11377,6 +11595,29 @@ "dev": true, "license": "MIT" }, + "node_modules/reflect.getprototypeof": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/reflect.getprototypeof/-/reflect.getprototypeof-1.0.9.tgz", + "integrity": "sha512-r0Ay04Snci87djAsI4U+WNRcSw5S4pOH7qFjd/veA5gC7TbqESR3tcj28ia95L/fYUDw11JKP7uqUKUAfVvV5Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "define-properties": "^1.2.1", + "dunder-proto": "^1.0.1", + "es-abstract": "^1.23.6", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.6", + "gopd": "^1.2.0", + "which-builtin-type": "^1.2.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/regexp.prototype.flags": { "version": "1.5.3", "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.3.tgz", @@ -11397,9 +11638,9 @@ } }, "node_modules/registry-auth-token": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-5.0.2.tgz", - "integrity": "sha512-o/3ikDxtXaA59BmZuZrJZDJv8NMDGSj+6j6XaeBmHw8eY1i1qd9+6H+LjVvQXx3HN6aRCGa1cUdJ9RaJZUugnQ==", + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-5.0.3.tgz", + "integrity": "sha512-1bpc9IyC+e+CNFRaWyn77tk4xGG4PPUyfakSmA6F6cvUDjrm58dfyJ3II+9yb10EDkHoy1LaPSmHaWLOH3m6HA==", "dev": true, "license": "MIT", "dependencies": { @@ -11430,19 +11671,22 @@ } }, "node_modules/resolve": { - "version": "1.22.8", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz", - "integrity": "sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==", + "version": "1.22.10", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.10.tgz", + "integrity": "sha512-NPRy+/ncIMeDlTAsuqwKIiferiawhefFJtkNSW0qZJEqMEb+qBt/77B/jGeeek+F0uOeN05CDa6HXbbIgtVX4w==", "dev": true, "license": "MIT", "dependencies": { - "is-core-module": "^2.13.0", + "is-core-module": "^2.16.0", "path-parse": "^1.0.7", "supports-preserve-symlinks-flag": "^1.0.0" }, "bin": { "resolve": "bin/resolve" }, + "engines": { + "node": ">= 0.4" + }, "funding": { "url": "https://github.com/sponsors/ljharb" } @@ -11499,9 +11743,9 @@ } }, "node_modules/rollup": { - "version": "4.24.3", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.24.3.tgz", - "integrity": "sha512-HBW896xR5HGmoksbi3JBDtmVzWiPAYqp7wip50hjQ67JbDz61nyoMPdqu1DvVW9asYb2M65Z20ZHsyJCMqMyDg==", + "version": "4.28.1", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.28.1.tgz", + "integrity": "sha512-61fXYl/qNVinKmGSTHAZ6Yy8I3YIJC/r2m9feHo6SwVAVcLT5MPwOUFe7EuURA/4m0NR8lXG4BBXuo/IZEsjMg==", "dev": true, "license": "MIT", "dependencies": { @@ -11515,24 +11759,25 @@ "npm": ">=8.0.0" }, "optionalDependencies": { - "@rollup/rollup-android-arm-eabi": "4.24.3", - "@rollup/rollup-android-arm64": "4.24.3", - "@rollup/rollup-darwin-arm64": "4.24.3", - "@rollup/rollup-darwin-x64": "4.24.3", - "@rollup/rollup-freebsd-arm64": "4.24.3", - "@rollup/rollup-freebsd-x64": "4.24.3", - "@rollup/rollup-linux-arm-gnueabihf": "4.24.3", - "@rollup/rollup-linux-arm-musleabihf": "4.24.3", - "@rollup/rollup-linux-arm64-gnu": "4.24.3", - "@rollup/rollup-linux-arm64-musl": "4.24.3", - "@rollup/rollup-linux-powerpc64le-gnu": "4.24.3", - "@rollup/rollup-linux-riscv64-gnu": "4.24.3", - "@rollup/rollup-linux-s390x-gnu": "4.24.3", - "@rollup/rollup-linux-x64-gnu": "4.24.3", - "@rollup/rollup-linux-x64-musl": "4.24.3", - "@rollup/rollup-win32-arm64-msvc": "4.24.3", - "@rollup/rollup-win32-ia32-msvc": "4.24.3", - "@rollup/rollup-win32-x64-msvc": "4.24.3", + "@rollup/rollup-android-arm-eabi": "4.28.1", + "@rollup/rollup-android-arm64": "4.28.1", + "@rollup/rollup-darwin-arm64": "4.28.1", + "@rollup/rollup-darwin-x64": "4.28.1", + "@rollup/rollup-freebsd-arm64": "4.28.1", + "@rollup/rollup-freebsd-x64": "4.28.1", + "@rollup/rollup-linux-arm-gnueabihf": "4.28.1", + "@rollup/rollup-linux-arm-musleabihf": "4.28.1", + "@rollup/rollup-linux-arm64-gnu": "4.28.1", + "@rollup/rollup-linux-arm64-musl": "4.28.1", + "@rollup/rollup-linux-loongarch64-gnu": "4.28.1", + "@rollup/rollup-linux-powerpc64le-gnu": "4.28.1", + "@rollup/rollup-linux-riscv64-gnu": "4.28.1", + "@rollup/rollup-linux-s390x-gnu": "4.28.1", + "@rollup/rollup-linux-x64-gnu": "4.28.1", + "@rollup/rollup-linux-x64-musl": "4.28.1", + "@rollup/rollup-win32-arm64-msvc": "4.28.1", + "@rollup/rollup-win32-ia32-msvc": "4.28.1", + "@rollup/rollup-win32-x64-msvc": "4.28.1", "fsevents": "~2.3.2" } }, @@ -11561,15 +11806,16 @@ } }, "node_modules/safe-array-concat": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.1.2.tgz", - "integrity": "sha512-vj6RsCsWBCf19jIeHEfkRMw8DPiBb+DMXklQ/1SGDHOMlHdPUkZXFQ2YdplS23zESTijAcurb1aSgJA3AgMu1Q==", + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.1.3.tgz", + "integrity": "sha512-AURm5f0jYEOydBj7VQlVvDrjeFgthDdEF5H1dP+6mNpoXOMo1quQqJ4wvJDyRZ9+pO3kGWoOdmV08cSv2aJV6Q==", "dev": true, "license": "MIT", "dependencies": { - "call-bind": "^1.0.7", - "get-intrinsic": "^1.2.4", - "has-symbols": "^1.0.3", + "call-bind": "^1.0.8", + "call-bound": "^1.0.2", + "get-intrinsic": "^1.2.6", + "has-symbols": "^1.1.0", "isarray": "^2.0.5" }, "engines": { @@ -11587,15 +11833,15 @@ "license": "MIT" }, "node_modules/safe-regex-test": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.0.3.tgz", - "integrity": "sha512-CdASjNJPvRa7roO6Ra/gLYBTzYzzPyyBXxIMdGW3USQLyjWEls2RgW5UBTXaQVp+OrpeCK3bLem8smtmheoRuw==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.1.0.tgz", + "integrity": "sha512-x/+Cz4YrimQxQccJf5mKEbIa1NzeCRNI5Ecl/ekmlYaampdNLPalVyIcCZNNH3MvmqBugV5TMYZXv0ljslUlaw==", "dev": true, "license": "MIT", "dependencies": { - "call-bind": "^1.0.6", + "call-bound": "^1.0.2", "es-errors": "^1.3.0", - "is-regex": "^1.1.4" + "is-regex": "^1.2.1" }, "engines": { "node": ">= 0.4" @@ -11649,9 +11895,9 @@ } }, "node_modules/semantic-release/node_modules/hosted-git-info": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-8.0.0.tgz", - "integrity": "sha512-4nw3vOVR+vHUOT8+U4giwe2tcGv+R3pwwRidUe67DoMBTjhrfr6rZYJVVwdkBE+Um050SG+X9tf0Jo4fOpn01w==", + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-8.0.2.tgz", + "integrity": "sha512-sYKnA7eGln5ov8T8gnYlkSOxFJvywzEx9BueN6xo/GKO8PGiI6uK6xx+DIGe45T3bdVjLAQDQW1aicT8z8JwQg==", "dev": true, "license": "ISC", "dependencies": { @@ -11766,26 +12012,86 @@ } }, "node_modules/shell-quote": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.8.1.tgz", - "integrity": "sha512-6j1W9l1iAs/4xYBI1SYOVZyFcCis9b4KCLQ8fgAGG07QvzaRLVVRQvAy85yNmmZSjYjg4MWh4gNvlPujU/5LpA==", + "version": "1.8.2", + "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.8.2.tgz", + "integrity": "sha512-AzqKpGKjrj7EM6rKVQEPpB288oCfnrEIuyoT9cyF4nmGa7V8Zk6f7RRqYisX8X9m+Q7bd632aZW4ky7EhbQztA==", "dev": true, "license": "MIT", + "engines": { + "node": ">= 0.4" + }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/side-channel": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.6.tgz", - "integrity": "sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA==", + "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", "dependencies": { - "call-bind": "^1.0.7", "es-errors": "^1.3.0", - "get-intrinsic": "^1.2.4", - "object-inspect": "^1.13.1" + "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", + "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", + "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", + "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" @@ -12047,9 +12353,9 @@ "license": "MIT" }, "node_modules/std-env": { - "version": "3.7.0", - "resolved": "https://registry.npmjs.org/std-env/-/std-env-3.7.0.tgz", - "integrity": "sha512-JPbdCEQLj1w5GilpiHAx3qJvFndqybBysA3qUOnznweH4QbNYUsW/ea8QzSrnh0vNsezMMw5bcVool8lM0gwzg==", + "version": "3.8.0", + "resolved": "https://registry.npmjs.org/std-env/-/std-env-3.8.0.tgz", + "integrity": "sha512-Bc3YwwCB+OzldMxOXJIIvC6cPRWr/LxOp48CdQTOkPyk/t4JWWJbrilwBd7RJzKV8QW7tJkcgAmeuLLJugl5/w==", "dev": true, "license": "MIT" }, @@ -12183,16 +12489,19 @@ } }, "node_modules/string.prototype.trim": { - "version": "1.2.9", - "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.9.tgz", - "integrity": "sha512-klHuCNxiMZ8MlsOihJhJEBJAiMVqU3Z2nEXWfWnIqjN0gEFS9J9+IxKozWWtQGcgoa1WUZzLjKPTr4ZHNFTFxw==", + "version": "1.2.10", + "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.10.tgz", + "integrity": "sha512-Rs66F0P/1kedk5lyYyH9uBzuiI/kNRmwJAR9quK6VOtIpZ2G+hMZd+HQbbv25MgCA6gEffoMZYxlTod4WcdrKA==", "dev": true, "license": "MIT", "dependencies": { - "call-bind": "^1.0.7", + "call-bind": "^1.0.8", + "call-bound": "^1.0.2", + "define-data-property": "^1.1.4", "define-properties": "^1.2.1", - "es-abstract": "^1.23.0", - "es-object-atoms": "^1.0.0" + "es-abstract": "^1.23.5", + "es-object-atoms": "^1.0.0", + "has-property-descriptors": "^1.0.2" }, "engines": { "node": ">= 0.4" @@ -12202,16 +12511,20 @@ } }, "node_modules/string.prototype.trimend": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.8.tgz", - "integrity": "sha512-p73uL5VCHCO2BZZ6krwwQE3kCzM7NKmis8S//xEC6fQonchbum4eP6kR4DLEjQFO3Wnj3Fuo8NM0kOSjVdHjZQ==", + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.9.tgz", + "integrity": "sha512-G7Ok5C6E/j4SGfyLCloXTrngQIQU3PWtXGst3yM7Bea9FRURf1S42ZHlZZtsNque2FN2PoUhfZXYLNWwEr4dLQ==", "dev": true, "license": "MIT", "dependencies": { - "call-bind": "^1.0.7", + "call-bind": "^1.0.8", + "call-bound": "^1.0.2", "define-properties": "^1.2.1", "es-object-atoms": "^1.0.0" }, + "engines": { + "node": ">= 0.4" + }, "funding": { "url": "https://github.com/sponsors/ljharb" } @@ -12385,9 +12698,9 @@ } }, "node_modules/table": { - "version": "6.8.2", - "resolved": "https://registry.npmjs.org/table/-/table-6.8.2.tgz", - "integrity": "sha512-w2sfv80nrAh2VCbqR5AK27wswXhqcck2AhfnNW76beQXskGZ1V12GwS//yYVa3d3fcvAip2OUnbDAjW2k3v9fA==", + "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", "dependencies": { @@ -12728,9 +13041,9 @@ "license": "MIT" }, "node_modules/tinypool": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/tinypool/-/tinypool-1.0.1.tgz", - "integrity": "sha512-URZYihUbRPcGv95En+sz6MfghfIc2OJ1sv/RmhWZLouPY0/8Vo80viwPvg3dlaS9fuq7fQMEfgRRK7BBZThBEA==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/tinypool/-/tinypool-1.0.2.tgz", + "integrity": "sha512-al6n+QEANGFOMf/dmUMsuS5/r9B06uwlyNjZZql/zv8J7ybHCgoihBNORZCY2mzUuAnomQa2JdhyHKzZxPCrFA==", "dev": true, "license": "MIT", "engines": { @@ -12797,9 +13110,9 @@ } }, "node_modules/ts-api-utils": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-1.4.0.tgz", - "integrity": "sha512-032cPxaEKwM+GT3vA5JXNzIaizx388rhsSW79vGRNGXfRRAdEAn2mvk36PvK5HnOchyWZ7afLEXqYCvPCrzuzQ==", + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-1.4.3.tgz", + "integrity": "sha512-i3eMG77UTMD0hZhgRS562pv83RC6ukSAC2GMNWc+9dieh/+jDM5u5YG+NHX6VNDRHQcHwmsTHctP9LhbC3WxVw==", "dev": true, "license": "MIT", "engines": { @@ -12855,9 +13168,9 @@ } }, "node_modules/type-fest": { - "version": "4.26.1", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-4.26.1.tgz", - "integrity": "sha512-yOGpmOAL7CkKe/91I5O3gPICmJNLJ1G4zFYVAsRHg7M64biSnPtRj0WNQt++bRkjYOqjWXrhnUw1utzmVErAdg==", + "version": "4.30.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-4.30.2.tgz", + "integrity": "sha512-UJShLPYi1aWqCdq9HycOL/gwsuqda1OISdBO3t8RlXQC4QvtuIz4b5FCfe2dQIWEpmlRExKmcTBfP1r9bhY7ig==", "dev": true, "license": "(MIT OR CC0-1.0)", "engines": { @@ -12868,32 +13181,32 @@ } }, "node_modules/typed-array-buffer": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.2.tgz", - "integrity": "sha512-gEymJYKZtKXzzBzM4jqa9w6Q1Jjm7x2d+sh19AdsD4wqnMPDYyvwpsIc2Q/835kHuo3BEQ7CjelGhfTsoBb2MQ==", + "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", "dependencies": { - "call-bind": "^1.0.7", + "call-bound": "^1.0.3", "es-errors": "^1.3.0", - "is-typed-array": "^1.1.13" + "is-typed-array": "^1.1.14" }, "engines": { "node": ">= 0.4" } }, "node_modules/typed-array-byte-length": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/typed-array-byte-length/-/typed-array-byte-length-1.0.1.tgz", - "integrity": "sha512-3iMJ9q0ao7WE9tWcaYKIptkNBuOIcZCCT0d4MRvuuH88fEoEH62IuQe0OtraD3ebQEoTRk8XCBoknUNc1Y67pw==", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/typed-array-byte-length/-/typed-array-byte-length-1.0.3.tgz", + "integrity": "sha512-BaXgOuIxz8n8pIq3e7Atg/7s+DpiYrxn4vdot3w9KbnBhcRQq6o3xemQdIfynqSeXeDrF32x+WvfzmOjPiY9lg==", "dev": true, "license": "MIT", "dependencies": { - "call-bind": "^1.0.7", + "call-bind": "^1.0.8", "for-each": "^0.3.3", - "gopd": "^1.0.1", - "has-proto": "^1.0.3", - "is-typed-array": "^1.1.13" + "gopd": "^1.2.0", + "has-proto": "^1.2.0", + "is-typed-array": "^1.1.14" }, "engines": { "node": ">= 0.4" @@ -12903,18 +13216,19 @@ } }, "node_modules/typed-array-byte-offset": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/typed-array-byte-offset/-/typed-array-byte-offset-1.0.2.tgz", - "integrity": "sha512-Ous0vodHa56FviZucS2E63zkgtgrACj7omjwd/8lTEMEPFFyjfixMZ1ZXenpgCFBBt4EC1J2XsyVS2gkG0eTFA==", + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/typed-array-byte-offset/-/typed-array-byte-offset-1.0.4.tgz", + "integrity": "sha512-bTlAFB/FBYMcuX81gbL4OcpH5PmlFHqlCCpAl8AlEzMz5k53oNDvN8p1PNOWLEmI2x4orp3raOFB51tv9X+MFQ==", "dev": true, "license": "MIT", "dependencies": { "available-typed-arrays": "^1.0.7", - "call-bind": "^1.0.7", + "call-bind": "^1.0.8", "for-each": "^0.3.3", - "gopd": "^1.0.1", - "has-proto": "^1.0.3", - "is-typed-array": "^1.1.13" + "gopd": "^1.2.0", + "has-proto": "^1.2.0", + "is-typed-array": "^1.1.15", + "reflect.getprototypeof": "^1.0.9" }, "engines": { "node": ">= 0.4" @@ -12924,18 +13238,18 @@ } }, "node_modules/typed-array-length": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.6.tgz", - "integrity": "sha512-/OxDN6OtAk5KBpGb28T+HZc2M+ADtvRxXrKKbUwtsLgdoxgX13hyy7ek6bFRl5+aBs2yZzB0c4CnQfAtVypW/g==", + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.7.tgz", + "integrity": "sha512-3KS2b+kL7fsuk/eJZ7EQdnEmQoaho/r6KUef7hxvltNA5DR8NAUM+8wJMbJyZ4G9/7i3v5zPBIMN5aybAh2/Jg==", "dev": true, "license": "MIT", "dependencies": { "call-bind": "^1.0.7", "for-each": "^0.3.3", "gopd": "^1.0.1", - "has-proto": "^1.0.3", "is-typed-array": "^1.1.13", - "possible-typed-array-names": "^1.0.0" + "possible-typed-array-names": "^1.0.0", + "reflect.getprototypeof": "^1.0.6" }, "engines": { "node": ">= 0.4" @@ -12972,16 +13286,19 @@ } }, "node_modules/unbox-primitive": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz", - "integrity": "sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.1.0.tgz", + "integrity": "sha512-nWJ91DjeOkej/TA8pXQ3myruKpKEYgqvpw9lz4OPHj/NWFNluYrjbz9j01CJ8yKQd2g4jFoOkINCTW2I5LEEyw==", "dev": true, "license": "MIT", "dependencies": { - "call-bind": "^1.0.2", + "call-bound": "^1.0.3", "has-bigints": "^1.0.2", - "has-symbols": "^1.0.3", - "which-boxed-primitive": "^1.0.2" + "has-symbols": "^1.1.0", + "which-boxed-primitive": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -13109,9 +13426,9 @@ } }, "node_modules/vite": { - "version": "5.4.10", - "resolved": "https://registry.npmjs.org/vite/-/vite-5.4.10.tgz", - "integrity": "sha512-1hvaPshuPUtxeQ0hsVH3Mud0ZanOLwVTneA1EgbAM5LhaZEqyPWGRQ7BtaMvUrTDeEaC8pxtj6a6jku3x4z6SQ==", + "version": "5.4.11", + "resolved": "https://registry.npmjs.org/vite/-/vite-5.4.11.tgz", + "integrity": "sha512-c7jFQRklXua0mTzneGW9QVyxFjUgwcihC4bXEtujIo2ouWCe1Ajt/amn2PCxYnhYfd5k09JX3SB7OYWFKYqj8Q==", "dev": true, "license": "MIT", "dependencies": { @@ -13689,7 +14006,9 @@ "version": "2.0.4", "resolved": "https://registry.npmjs.org/vlq/-/vlq-2.0.4.tgz", "integrity": "sha512-aodjPa2wPQFkra1G8CzJBTHXhgk3EVSwxSWXNPr1fgdFLUb8kvLV1iEb6rFgasIsjP82HWI6dsb5Io26DDnasA==", - "license": "MIT" + "dev": true, + "license": "MIT", + "peer": true }, "node_modules/which": { "version": "2.0.2", @@ -13707,33 +14026,84 @@ } }, "node_modules/which-boxed-primitive": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.1.1.tgz", + "integrity": "sha512-TbX3mj8n0odCBFVlY8AxkqcHASw3L60jIuF8jFP78az3C2YhmGvqbHBpAjTRH2/xqYunrJ9g1jSyjCjpoWzIAA==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-bigint": "^1.1.0", + "is-boolean-object": "^1.2.1", + "is-number-object": "^1.1.1", + "is-string": "^1.1.1", + "is-symbol": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/which-builtin-type": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/which-builtin-type/-/which-builtin-type-1.2.1.tgz", + "integrity": "sha512-6iBczoX+kDQ7a3+YJBnh3T+KZRxM/iYNPXicqk66/Qfm1b93iu+yOImkg0zHbj5LNOcNv1TEADiZ0xa34B4q6Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "function.prototype.name": "^1.1.6", + "has-tostringtag": "^1.0.2", + "is-async-function": "^2.0.0", + "is-date-object": "^1.1.0", + "is-finalizationregistry": "^1.1.0", + "is-generator-function": "^1.0.10", + "is-regex": "^1.2.1", + "is-weakref": "^1.0.2", + "isarray": "^2.0.5", + "which-boxed-primitive": "^1.1.0", + "which-collection": "^1.0.2", + "which-typed-array": "^1.1.16" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/which-collection": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz", - "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==", + "resolved": "https://registry.npmjs.org/which-collection/-/which-collection-1.0.2.tgz", + "integrity": "sha512-K4jVyjnBdgvc86Y6BkaLZEN933SwYOuBFkdmBu9ZfkcAbdVbpITnDmjvZ/aQjRXQrv5EPkTnD1s39GiiqbngCw==", "dev": true, "license": "MIT", "dependencies": { - "is-bigint": "^1.0.1", - "is-boolean-object": "^1.1.0", - "is-number-object": "^1.0.4", - "is-string": "^1.0.5", - "is-symbol": "^1.0.3" + "is-map": "^2.0.3", + "is-set": "^2.0.3", + "is-weakmap": "^2.0.2", + "is-weakset": "^2.0.3" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/which-typed-array": { - "version": "1.1.15", - "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.15.tgz", - "integrity": "sha512-oV0jmFtUky6CXfkqehVvBP/LSWJ2sy4vWMioiENyJLePrBO/yKyV9OyJySfAKosh+RYkIl5zJCNZ8/4JncrpdA==", + "version": "1.1.18", + "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.18.tgz", + "integrity": "sha512-qEcY+KJYlWyLH9vNbsr6/5j59AXk5ni5aakf8ldzBvGde6Iz4sxZGkJyWSAueTG7QhOvNRYb1lDdFmL5Td0QKA==", "dev": true, "license": "MIT", "dependencies": { "available-typed-arrays": "^1.0.7", - "call-bind": "^1.0.7", + "call-bind": "^1.0.8", + "call-bound": "^1.0.3", "for-each": "^0.3.3", - "gopd": "^1.0.1", + "gopd": "^1.2.0", "has-tostringtag": "^1.0.2" }, "engines": { @@ -13926,9 +14296,9 @@ } }, "node_modules/yaml": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.6.0.tgz", - "integrity": "sha512-a6ae//JvKDEra2kdi1qzCyrJW/WZCgFi8ydDV+eXExl95t+5R+ijnqHJbz9tmMh8FUjx3iv2fCQ4dclAQlO2UQ==", + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.6.1.tgz", + "integrity": "sha512-7r0XPzioN/Q9kXBro/XPnA6kznR73DHq+GXh5ON7ZozRO6aMjbmiBuKste2wslTFkC5d1dw0GooOCepZXJ2SAg==", "dev": true, "license": "ISC", "bin": { diff --git a/package.json b/package.json index b2d7492..513f04a 100644 --- a/package.json +++ b/package.json @@ -25,6 +25,7 @@ "build-examples": "rollup --config examples/rollup.config.ts --configPlugin typescript" }, "devDependencies": { + "@algorandfoundation/algokit-utils": "^8.0.3", "@commitlint/cli": "^19.5.0", "@commitlint/config-conventional": "^19.5.0", "@eslint/eslintrc": "3.1.0", @@ -62,10 +63,8 @@ "tslib": "^2.6.2" }, "dependencies": { - "@algorandfoundation/algokit-utils": "^6.2.1", "@algorandfoundation/algorand-typescript": "^0.0.1-alpha.22", "@algorandfoundation/puya-ts": "^1.0.0-alpha.34", - "algosdk": "^2.9.0", "elliptic": "^6.5.7", "js-sha256": "^0.11.0", "js-sha3": "^0.9.3", diff --git a/src/abi-metadata.ts b/src/abi-metadata.ts index 57723a6..9e97a2e 100644 --- a/src/abi-metadata.ts +++ b/src/abi-metadata.ts @@ -1,6 +1,6 @@ import { BaseContract, Contract } from '@algorandfoundation/algorand-typescript' import { AbiMethodConfig, BareMethodConfig, CreateOptions, OnCompleteActionStr } from '@algorandfoundation/algorand-typescript/arc4' -import { ABIMethod } from 'algosdk' +import { sha512_256 as js_sha512_256 } from 'js-sha512' import { TypeInfo } from './encoders' import { getArc4TypeName as getArc4TypeNameForARC4Encoded } from './impl/encoded-types' import { DeliberateAny } from './typescript-helpers' @@ -73,12 +73,16 @@ export const getArc4Signature = (metadata: AbiMetadata): string => { if (metadata.methodSignature === undefined) { const argTypes = metadata.argTypes.map((t) => JSON.parse(t) as TypeInfo).map(getArc4TypeName) const returnType = getArc4TypeName(JSON.parse(metadata.returnType) as TypeInfo) - const method = new ABIMethod({ name: metadata.methodName, args: argTypes.map((t) => ({ type: t })), returns: { type: returnType } }) - metadata.methodSignature = method.getSignature() + metadata.methodSignature = `${metadata.methodName}(${argTypes.join(',')})${returnType}` } return metadata.methodSignature } +export const getArc4Selector = (metadata: AbiMetadata): Uint8Array => { + const hash = js_sha512_256.array(getArc4Signature(metadata)) + return new Uint8Array(hash.slice(0, 4)) +} + const getArc4TypeName = (t: TypeInfo): string => { const map: Record string)> = { void: 'void', diff --git a/src/constants.ts b/src/constants.ts index 2536444..2637b14 100644 --- a/src/constants.ts +++ b/src/constants.ts @@ -43,3 +43,22 @@ export const ABI_RETURN_VALUE_LOG_PREFIX = Bytes.fromHex('151F7C75') export const UINT64_OVERFLOW_UNDERFLOW_MESSAGE = 'Uint64 overflow or underflow' export const BIGUINT_OVERFLOW_UNDERFLOW_MESSAGE = 'BigUint overflow or underflow' + +export const APP_ID_PREFIX = 'appID' +export const HASH_BYTES_LENGTH = 32 +export const ALGORAND_ADDRESS_BYTE_LENGTH = 36 +export const ALGORAND_CHECKSUM_BYTE_LENGTH = 4 +export const ALGORAND_ADDRESS_LENGTH = 58 + +export const PROGRAM_TAG = 'Program' + +export const TRANSACTION_GROUP_MAX_SIZE = 16 + +export enum OnApplicationComplete { + NoOpOC = 0, + OptInOC = 1, + CloseOutOC = 2, + ClearStateOC = 3, + UpdateApplicationOC = 4, + DeleteApplicationOC = 5, +} diff --git a/src/impl/application.ts b/src/impl/application.ts index 013b3b3..9ae03cd 100644 --- a/src/impl/application.ts +++ b/src/impl/application.ts @@ -1,10 +1,9 @@ -import { Account, Application, Bytes, bytes, LocalState, uint64 } from '@algorandfoundation/algorand-typescript' -import algosdk from 'algosdk' +import { Account, Application, bytes, LocalState, uint64 } from '@algorandfoundation/algorand-typescript' import { BytesMap } from '../collections/custom-key-map' import { ALWAYS_APPROVE_TEAL_PROGRAM } from '../constants' import { lazyContext } from '../context-helpers/internal-context' import { Mutable } from '../typescript-helpers' -import { asBigInt, asUint64 } from '../util' +import { asUint64, getApplicationAddress } from '../util' import { Uint64BackedCls } from './base' import { GlobalStateCls } from './state' @@ -76,7 +75,6 @@ export class ApplicationCls extends Uint64BackedCls implements Application { return this.data.application.creator } get address(): Account { - const addr = algosdk.getApplicationAddress(asBigInt(this.id)) - return Account(Bytes.fromBase32(addr)) + return getApplicationAddress(this.id) } } diff --git a/src/impl/crypto.ts b/src/impl/crypto.ts index 7cdbd46..6089807 100644 --- a/src/impl/crypto.ts +++ b/src/impl/crypto.ts @@ -1,14 +1,13 @@ import { arc4, bytes, Bytes, Ecdsa, gtxn, internal, VrfVerify } from '@algorandfoundation/algorand-typescript' -import algosdk from 'algosdk' import { ec } from 'elliptic' import { sha256 as js_sha256 } from 'js-sha256' import { keccak256 as js_keccak256, sha3_256 as js_sha3_256 } from 'js-sha3' import { sha512_256 as js_sha512_256 } from 'js-sha512' import nacl from 'tweetnacl' -import { LOGIC_DATA_PREFIX } from '../constants' +import { LOGIC_DATA_PREFIX, PROGRAM_TAG } from '../constants' import { lazyContext } from '../context-helpers/internal-context' import { notImplementedError } from '../errors' -import { asBytes, asBytesCls } from '../util' +import { asBytes, asBytesCls, asUint8Array, conactUint8Arrays } from '../util' export const sha256 = (a: internal.primitives.StubBytesCompat): bytes => { const bytesA = internal.primitives.BytesCls.fromCompat(a) @@ -59,10 +58,10 @@ export const ed25519verify = ( txn.onCompletion == arc4.OnCompleteAction[arc4.OnCompleteAction.ClearState] ? txn.clearStateProgram : txn.approvalProgram, ) - const logicSig = new algosdk.LogicSig(programBytes.asUint8Array()) - const decodedAddress = algosdk.decodeAddress(logicSig.address()) + const logicSig = conactUint8Arrays(asUint8Array(PROGRAM_TAG), programBytes.asUint8Array()) + const logicSigAddress = js_sha512_256.array(logicSig) - const addressBytes = Bytes(decodedAddress.publicKey) + const addressBytes = Bytes(logicSigAddress) const data = LOGIC_DATA_PREFIX.concat(addressBytes).concat(asBytes(a)) return ed25519verifyBare(data, b, c) } diff --git a/src/impl/encoded-types.ts b/src/impl/encoded-types.ts index 178a991..a9a7d26 100644 --- a/src/impl/encoded-types.ts +++ b/src/impl/encoded-types.ts @@ -16,9 +16,14 @@ import { UintN, } from '@algorandfoundation/algorand-typescript/arc4' import { encodingUtil } from '@algorandfoundation/puya-ts' -import { decodeAddress } from 'algosdk' import assert from 'assert' -import { ABI_RETURN_VALUE_LOG_PREFIX, BITS_IN_BYTE, UINT64_SIZE } from '../constants' +import { + ABI_RETURN_VALUE_LOG_PREFIX, + ALGORAND_ADDRESS_BYTE_LENGTH, + ALGORAND_CHECKSUM_BYTE_LENGTH, + BITS_IN_BYTE, + UINT64_SIZE, +} from '../constants' import { fromBytes, TypeInfo } from '../encoders' import { DeliberateAny } from '../typescript-helpers' import { asBigUint, asBigUintCls, asBytesCls, asUint64, asUint8Array, conactUint8Arrays, uint8ArrayToNumber } from '../util' @@ -429,7 +434,7 @@ export class AddressImpl extends Address { if (value === undefined) { uint8ArrayValue = new Uint8Array(32) } else if (typeof value === 'string') { - uint8ArrayValue = decodeAddress(value).publicKey + uint8ArrayValue = encodingUtil.base32ToUint8Array(value).slice(0, ALGORAND_ADDRESS_BYTE_LENGTH - ALGORAND_CHECKSUM_BYTE_LENGTH) } else if (internal.primitives.isBytes(value)) { uint8ArrayValue = internal.primitives.getUint8Array(value) } else { diff --git a/src/impl/global.ts b/src/impl/global.ts index 06921dc..5418937 100644 --- a/src/impl/global.ts +++ b/src/impl/global.ts @@ -1,5 +1,4 @@ import { Account, Application, Bytes, bytes, internal, op, Uint64, uint64 } from '@algorandfoundation/algorand-typescript' -import algosdk from 'algosdk' import { DEFAULT_ACCOUNT_MIN_BALANCE, DEFAULT_ASSET_CREATE_MIN_BALANCE, @@ -10,7 +9,7 @@ import { ZERO_ADDRESS, } from '../constants' import { lazyContext } from '../context-helpers/internal-context' -import { asBigInt, getObjectReference } from '../util' +import { getApplicationAddress, getObjectReference } from '../util' export class GlobalData { minTxnFee: uint64 @@ -128,8 +127,7 @@ export const Global: internal.opTypes.GlobalType = { * Address that the current application controls. Application mode only. */ get currentApplicationAddress(): Account { - const appAddress = algosdk.getApplicationAddress(asBigInt(this.currentApplicationId.id)) - return Account(Bytes.fromBase32(appAddress)) + return this.currentApplicationId.address }, /** @@ -163,8 +161,7 @@ export const Global: internal.opTypes.GlobalType = { * The application address of the application that called this application. ZeroAddress if this application is at the top-level. Application mode only. */ get callerApplicationAddress(): Account { - const appAddress = algosdk.getApplicationAddress(asBigInt(this.callerApplicationId)) - return Account(Bytes.fromBase32(appAddress)) + return getApplicationAddress(this.callerApplicationId) }, /** diff --git a/src/subcontexts/contract-context.ts b/src/subcontexts/contract-context.ts index 26b7d62..7f60248 100644 --- a/src/subcontexts/contract-context.ts +++ b/src/subcontexts/contract-context.ts @@ -10,11 +10,10 @@ import { internal, LocalState, } from '@algorandfoundation/algorand-typescript' -import { ABIMethod } from 'algosdk' import { AbiMetadata, copyAbiMetadatas, - getArc4Signature, + getArc4Selector, getContractAbiMetadata, getContractMethodAbiMetadata, isContractProxy, @@ -144,7 +143,7 @@ export class ContractContext { ...args: TParams ): Transaction[] { const app = lazyContext.ledger.getApplicationForContract(contract) - const methodSelector = abiMetadata ? ABIMethod.fromSignature(getArc4Signature(abiMetadata)).getSelector() : new Uint8Array() + const methodSelector = abiMetadata ? getArc4Selector(abiMetadata) : new Uint8Array() const { transactions, ...appCallArgs } = extractArraysFromArgs(app, methodSelector, args) const appTxn = lazyContext.any.txn.applicationCall({ appId: app, diff --git a/src/subcontexts/transaction-context.ts b/src/subcontexts/transaction-context.ts index dacd212..04e1863 100644 --- a/src/subcontexts/transaction-context.ts +++ b/src/subcontexts/transaction-context.ts @@ -1,6 +1,6 @@ import { bytes, Contract, internal, TransactionType, uint64 } from '@algorandfoundation/algorand-typescript' -import algosdk from 'algosdk' import { AbiMetadata, getContractMethodAbiMetadata } from '../abi-metadata' +import { TRANSACTION_GROUP_MAX_SIZE } from '../constants' import { lazyContext } from '../context-helpers/internal-context' import { DecodedLogs, decodeLogs, LogDecoding } from '../decode-logs' import { testInvariant } from '../errors' @@ -180,10 +180,8 @@ export class TransactionGroup { constructor(transactions: Transaction[], activeTransactionIndex?: number) { this.latestTimestamp = Date.now() - if (transactions.length > algosdk.AtomicTransactionComposer.MAX_GROUP_SIZE) { - internal.errors.internalError( - `Transaction group can have at most ${algosdk.AtomicTransactionComposer.MAX_GROUP_SIZE} transactions, as per AVM limits.`, - ) + if (transactions.length > TRANSACTION_GROUP_MAX_SIZE) { + internal.errors.internalError(`Transaction group can have at most ${TRANSACTION_GROUP_MAX_SIZE} transactions, as per AVM limits.`) } transactions.forEach((txn, index) => Object.assign(txn, { groupIndex: asUint64(index) })) this.activeTransactionIndex = activeTransactionIndex === undefined ? transactions.length - 1 : activeTransactionIndex @@ -245,8 +243,8 @@ export class TransactionGroup { if (!this.constructingItxnGroup.length) { internal.errors.internalError('itxn submit without itxn begin') } - if (this.constructingItxnGroup.length > algosdk.AtomicTransactionComposer.MAX_GROUP_SIZE) { - internal.errors.internalError('Cannot submit more than 16 inner transactions at once') + if (this.constructingItxnGroup.length > TRANSACTION_GROUP_MAX_SIZE) { + internal.errors.internalError(`Cannot submit more than ${TRANSACTION_GROUP_MAX_SIZE} inner transactions at once`) } const itxns = this.constructingItxnGroup.map((t) => createInnerTxn(t)) itxns.forEach((itxn, index) => Object.assign(itxn, { groupIndex: asUint64(index) })) diff --git a/src/test-execution-context.ts b/src/test-execution-context.ts index 250e3ab..f86e183 100644 --- a/src/test-execution-context.ts +++ b/src/test-execution-context.ts @@ -1,5 +1,4 @@ -import { Account, Application, Asset, Bytes, bytes, internal, uint64 } from '@algorandfoundation/algorand-typescript' -import algosdk from 'algosdk' +import { Account, Application, Asset, bytes, internal, uint64 } from '@algorandfoundation/algorand-typescript' import { captureMethodConfig } from './abi-metadata' import { DecodedLogs, LogDecoding } from './decode-logs' import * as ops from './impl' @@ -19,6 +18,7 @@ import { Box, BoxMap, BoxRef, GlobalState, LocalState } from './impl/state' import { ContractContext } from './subcontexts/contract-context' import { LedgerContext } from './subcontexts/ledger-context' import { TransactionContext } from './subcontexts/transaction-context' +import { getRandomBytes } from './util' import { ValueGenerator } from './value-generators' export class TestExecutionContext implements internal.ExecutionContext { @@ -34,7 +34,7 @@ export class TestExecutionContext implements internal.ExecutionContext { this.#ledgerContext = new LedgerContext() this.#txnContext = new TransactionContext() this.#valueGenerator = new ValueGenerator() - this.#defaultSender = Account(defaultSenderAddress ?? Bytes.fromBase32(algosdk.generateAccount().addr)) + this.#defaultSender = Account(defaultSenderAddress ?? getRandomBytes(32).asAlgoTs()) } account(address?: bytes): Account { diff --git a/src/util.ts b/src/util.ts index 31d3211..ff0ec08 100644 --- a/src/util.ts +++ b/src/util.ts @@ -1,7 +1,20 @@ -import { Bytes, bytes, internal } from '@algorandfoundation/algorand-typescript' +import { Account, Bytes, bytes, internal } from '@algorandfoundation/algorand-typescript' import { ARC4Encoded } from '@algorandfoundation/algorand-typescript/arc4' +import { encodingUtil } from '@algorandfoundation/puya-ts' import { randomBytes } from 'crypto' -import { BITS_IN_BYTE, MAX_BYTES_SIZE, MAX_UINT512, MAX_UINT8, UINT512_SIZE } from './constants' +import { sha512_256 as js_sha512_256 } from 'js-sha512' +import { + ALGORAND_ADDRESS_BYTE_LENGTH, + ALGORAND_ADDRESS_LENGTH, + ALGORAND_CHECKSUM_BYTE_LENGTH, + APP_ID_PREFIX, + BITS_IN_BYTE, + HASH_BYTES_LENGTH, + MAX_BYTES_SIZE, + MAX_UINT512, + MAX_UINT8, + UINT512_SIZE, +} from './constants' import { BytesBackedCls, Uint64BackedCls } from './impl/base' import { DeliberateAny } from './typescript-helpers' @@ -192,3 +205,25 @@ export const conactUint8Arrays = (...values: Uint8Array[]): Uint8Array => { export const uint8ArrayToNumber = (value: Uint8Array): number => { return value.reduce((acc, x) => acc * 256 + x, 0) } + +export const checksumFromPublicKey = (pk: Uint8Array): Uint8Array => { + return Uint8Array.from(js_sha512_256.array(pk).slice(HASH_BYTES_LENGTH - ALGORAND_CHECKSUM_BYTE_LENGTH, HASH_BYTES_LENGTH)) +} + +export const getApplicationAddress = (appId: internal.primitives.StubUint64Compat): Account => { + const toBeSigned = conactUint8Arrays(asUint8Array(APP_ID_PREFIX), encodingUtil.bigIntToUint8Array(asBigInt(appId), 8)) + const appIdHash = js_sha512_256.array(toBeSigned) + const publicKey = Uint8Array.from(appIdHash) + const address = encodeAddress(publicKey) + return Account(Bytes.fromBase32(address)) +} + +export const encodeAddress = (address: Uint8Array): string => { + const checksum = checksumFromPublicKey(address) + return encodingUtil.uint8ArrayToBase32(conactUint8Arrays(address, checksum)).slice(0, ALGORAND_ADDRESS_LENGTH) +} + +export const decodePublicKey = (address: string): Uint8Array => { + const decoded = encodingUtil.base32ToUint8Array(address) + return decoded.slice(0, ALGORAND_ADDRESS_BYTE_LENGTH - ALGORAND_CHECKSUM_BYTE_LENGTH) +} diff --git a/src/value-generators/avm.ts b/src/value-generators/avm.ts index b328f01..a79ec08 100644 --- a/src/value-generators/avm.ts +++ b/src/value-generators/avm.ts @@ -1,12 +1,11 @@ import { Account, Application, Asset, bytes, Bytes, internal, Uint64, uint64 } from '@algorandfoundation/algorand-typescript' -import algosdk from 'algosdk' import { randomBytes } from 'crypto' import { MAX_BYTES_SIZE, MAX_UINT64, ZERO_ADDRESS } from '../constants' import { lazyContext } from '../context-helpers/internal-context' import { AccountData } from '../impl/account' import { ApplicationCls, ApplicationData } from '../impl/application' import { AssetCls, AssetData } from '../impl/asset' -import { asBigInt, asUint64Cls, getRandomBigInt } from '../util' +import { asBigInt, asUint64Cls, getRandomBigInt, getRandomBytes } from '../util' type AccountContextData = Partial & { address?: Account @@ -37,7 +36,7 @@ export class AvmValueGenerator { } account(input?: AccountContextData): Account { - const account = input?.address ?? Account(Bytes.fromBase32(algosdk.generateAccount().addr)) + const account = input?.address ?? Account(getRandomBytes(32).asAlgoTs()) if (input?.address && lazyContext.ledger.accountDataMap.has(account)) { internal.errors.internalError( diff --git a/tests/arc4/address.spec.ts b/tests/arc4/address.spec.ts index 905504b..6b388f8 100644 --- a/tests/arc4/address.spec.ts +++ b/tests/arc4/address.spec.ts @@ -1,12 +1,13 @@ +import { getABIEncodedValue } from '@algorandfoundation/algokit-utils/types/app-arc56' import { Account, Bytes } from '@algorandfoundation/algorand-typescript' import { TestExecutionContext } from '@algorandfoundation/algorand-typescript-testing' import { Address, interpretAsArc4 } from '@algorandfoundation/algorand-typescript/arc4' -import { ABIType, encodeAddress } from 'algosdk' import { afterEach, describe, expect, test } from 'vitest' import { ABI_RETURN_VALUE_LOG_PREFIX } from '../../src/constants' +import { encodeAddress } from '../../src/util' import { asUint8Array } from '../util' -const abiAddressType = ABIType.from('address') +const abiTypeString = 'address' const testData = [ Bytes.fromHex('00'.repeat(32)), Bytes.fromHex('01'.repeat(32)), @@ -21,19 +22,19 @@ describe('arc4.Address', async () => { }) test.each(testData)('create address from bytes', async (value) => { - const sdkResult = abiAddressType.encode(asUint8Array(value)) + const sdkResult = getABIEncodedValue(asUint8Array(value), abiTypeString, {}) const result = new Address(value) expect(result.bytes).toEqual(sdkResult) }) test.each(testData)('create address from str', async (value) => { const stringValue = encodeAddress(asUint8Array(value)) - const sdkResult = abiAddressType.encode(stringValue) + const sdkResult = getABIEncodedValue(stringValue, abiTypeString, {}) const result = new Address(stringValue) expect(result.bytes).toEqual(sdkResult) }) test.each(testData)('create address from Account', async (value) => { const accountValue = Account(value) - const sdkResult = abiAddressType.encode(asUint8Array(accountValue.bytes)) + const sdkResult = getABIEncodedValue(asUint8Array(accountValue.bytes), abiTypeString, {}) const result = new Address(accountValue) expect(result.bytes).toEqual(sdkResult) }) @@ -69,13 +70,13 @@ describe('arc4.Address', async () => { }) test.each(testData)('fromBytes method', async (value) => { - const sdkResult = abiAddressType.encode(asUint8Array(value)) + const sdkResult = getABIEncodedValue(asUint8Array(value), abiTypeString, {}) const result = interpretAsArc4
(value) expect(result.bytes).toEqual(sdkResult) }) test.each(testData)('fromLog method', async (value) => { - const sdkResult = abiAddressType.encode(asUint8Array(value)) + const sdkResult = getABIEncodedValue(asUint8Array(value), abiTypeString, {}) const paddedValue = Bytes([...asUint8Array(ABI_RETURN_VALUE_LOG_PREFIX), ...asUint8Array(value)]) const result = interpretAsArc4
(paddedValue, 'log') expect(result.bytes).toEqual(sdkResult) diff --git a/tests/arc4/dynamic-array.spec.ts b/tests/arc4/dynamic-array.spec.ts index 836a83e..ee70df1 100644 --- a/tests/arc4/dynamic-array.spec.ts +++ b/tests/arc4/dynamic-array.spec.ts @@ -1,3 +1,4 @@ +import { getABIEncodedValue } from '@algorandfoundation/algokit-utils/types/app-arc56' import { Bytes, internal } from '@algorandfoundation/algorand-typescript' import { TestExecutionContext } from '@algorandfoundation/algorand-typescript-testing' import { @@ -13,14 +14,13 @@ import { UintN, } from '@algorandfoundation/algorand-typescript/arc4' import { encodingUtil } from '@algorandfoundation/puya-ts' -import { ABIType } from 'algosdk' import { afterEach, describe, expect, it, test } from 'vitest' import { AccountCls } from '../../src/impl/account' import { DeliberateAny } from '../../src/typescript-helpers' import { asBytes, asUint8Array } from '../../src/util' const addressDynamicArray = { - abiType: ABIType.from('address[]'), + abiTypeString: 'address[]', nativeValues() { return [ asUint8Array(Bytes.fromHex('00'.repeat(32))), @@ -46,7 +46,7 @@ const addressDynamicArray = { }, } const boolDynamicArray = { - abiType: ABIType.from('bool[]'), + abiTypeString: 'bool[]', nativeValues() { return [true, true, false, true, false, true, true, false, true, false] }, @@ -61,7 +61,7 @@ const boolDynamicArray = { }, } const uint256DynamicArray = { - abiType: ABIType.from('uint256[]'), + abiTypeString: 'uint256[]', nativeValues() { return [0n, 1n, 2n, 3n, 2n ** 8n, 2n ** 16n, 2n ** 32n, 2n ** 64n, 2n ** 128n, 2n ** 256n - 1n] }, @@ -76,7 +76,7 @@ const uint256DynamicArray = { }, } const ufixednxmDynamicArray = { - abiType: ABIType.from('ufixed256x16[]'), + abiTypeString: 'ufixed256x16[]', nativeValues() { return this.abiValues().map((v) => v.native.valueOf()) }, @@ -102,7 +102,7 @@ const ufixednxmDynamicArray = { }, } const stringDynamicArray = { - abiType: ABIType.from('string[]'), + abiTypeString: 'string[]', nativeValues() { return [ '', @@ -128,7 +128,7 @@ const stringDynamicArray = { }, } const boolDynamicArrayOfArray = { - abiType: ABIType.from('bool[][]'), + abiTypeString: 'bool[][]', nativeValues() { return [boolDynamicArray.nativeValues(), boolDynamicArray.nativeValues().reverse()] }, @@ -145,7 +145,7 @@ const boolDynamicArrayOfArray = { }, } const addressDynamicArrayOfArray = { - abiType: ABIType.from('address[][]'), + abiTypeString: 'address[][]', nativeValues() { return [addressDynamicArray.nativeValues(), addressDynamicArray.nativeValues().reverse()] }, @@ -162,7 +162,7 @@ const addressDynamicArrayOfArray = { }, } const uint256DynamicArrayOfArray = { - abiType: ABIType.from('uint256[][]'), + abiTypeString: 'uint256[][]', nativeValues() { return [uint256DynamicArray.nativeValues(), uint256DynamicArray.nativeValues().reverse()] }, @@ -179,7 +179,7 @@ const uint256DynamicArrayOfArray = { }, } const uint256DynamicArrayOfStaticArray = { - abiType: ABIType.from('uint256[10][]'), + abiTypeString: 'uint256[10][]', nativeValues() { return [uint256DynamicArray.nativeValues(), uint256DynamicArray.nativeValues().reverse()] }, @@ -196,7 +196,7 @@ const uint256DynamicArrayOfStaticArray = { }, } const stringDynamicArrayOfArray = { - abiType: ABIType.from('string[][]'), + abiTypeString: 'string[][]', nativeValues() { return [stringDynamicArray.nativeValues(), stringDynamicArray.nativeValues().reverse()] }, @@ -213,7 +213,7 @@ const stringDynamicArrayOfArray = { }, } const stringDynamicArrayOfArrayOfArray = { - abiType: ABIType.from('string[][][]'), + abiTypeString: 'string[][][]', nativeValues() { return [ [stringDynamicArray.nativeValues(), stringDynamicArray.nativeValues().reverse(), stringDynamicArray.nativeValues()], @@ -235,7 +235,7 @@ const stringDynamicArrayOfArrayOfArray = { }, } const tupleDynamicArray = { - abiType: ABIType.from('(string[],(string[],string,uint256,address),bool,uint256[3])[]'), + abiTypeString: '(string[],(string[],string,uint256,address),bool,uint256[3])[]', nativeValues() { return Array(2).fill([ stringDynamicArray.nativeValues().slice(0, 2), @@ -288,7 +288,7 @@ class Swapped extends Struct<{ a: Tuple<[DynamicArray, DynamicArray, Str, UintN<256>, Bool, StaticArray, 3>]> }> {} const structDynamicArray = { - abiType: ABIType.from('(uint256,bool,string,(string[],string[],string,uint256,bool,uint256[3]))[]'), + abiTypeString: '(uint256,bool,string,(string[],string[],string,uint256,bool,uint256[3]))[]', nativeValues() { return Array(2).fill([ uint256DynamicArray.nativeValues()[0], @@ -354,7 +354,7 @@ describe('arc4.DynamicArray', async () => { tupleDynamicArray, structDynamicArray, ])('should be able to get bytes representation', async (data) => { - const sdkResult = data.abiType.encode(data.nativeValues()) + const sdkResult = getABIEncodedValue(data.nativeValues(), data.abiTypeString, {}) const result = data.array().bytes expect(result).toEqual(sdkResult) }) @@ -374,7 +374,7 @@ describe('arc4.DynamicArray', async () => { tupleDynamicArray, structDynamicArray, ])('copy dynamic array', async (data) => { - const sdkResult = data.abiType.encode(data.nativeValues()) + const sdkResult = getABIEncodedValue(data.nativeValues(), data.abiTypeString, {}) const original = data.array() const copy = original.copy() const result = copy.bytes @@ -432,7 +432,7 @@ describe('arc4.DynamicArray', async () => { dynamicArrayCopy[dynamicArrayCopy.length - 1] = dynamicArrayCopy[0] dynamicArrayCopy[0] = arrayTemp - const sdkResult = data.abiType.encode(nativeValuesCopy) + const sdkResult = getABIEncodedValue(nativeValuesCopy, data.abiTypeString, {}) const result = dynamicArrayCopy.bytes expect(result).toEqual(Bytes(sdkResult)) }) @@ -452,7 +452,7 @@ describe('arc4.DynamicArray', async () => { tupleDynamicArray, structDynamicArray, ])('create dynamic array from bytes', async (data) => { - const sdkEncodedBytes = data.abiType.encode(data.nativeValues()) + const sdkEncodedBytes = getABIEncodedValue(data.nativeValues(), data.abiTypeString, {}) const result = data.create(Bytes(sdkEncodedBytes)) const nativeValues = data.nativeValues() for (let i = 0; i < result.length; i++) { @@ -484,7 +484,7 @@ describe('arc4.DynamicArray', async () => { const dynamicArrayCopy = dynamicArray.copy() dynamicArrayCopy.push(dynamicArray.at(-1) as never, dynamicArray[0] as never) - const sdkResult = data.abiType.encode(nativeValuesCopy) + const sdkResult = getABIEncodedValue(nativeValuesCopy, data.abiTypeString, {}) const result = dynamicArrayCopy.bytes expect(result).toEqual(Bytes(sdkResult)) }) @@ -505,7 +505,7 @@ describe('arc4.DynamicArray', async () => { structDynamicArray, ])('push item to empty dynamic array', async (data) => { const nativeValues = data.nativeValues() - const sdkResult = data.abiType.encode(nativeValues) + const sdkResult = getABIEncodedValue(nativeValues, data.abiTypeString, {}) const emptyArray = data.array(true) data.abiValues().forEach((v) => emptyArray.push(v as never)) @@ -529,9 +529,9 @@ describe('arc4.DynamicArray', async () => { structDynamicArray, ])('push item to empty dynamic array created from bytes', async (data) => { const nativeValues = data.nativeValues() - const sdkResult = data.abiType.encode(nativeValues) + const sdkResult = getABIEncodedValue(nativeValues, data.abiTypeString, {}) - const emptyArray = data.create(Bytes(data.abiType.encode([]))) + const emptyArray = data.create(Bytes(getABIEncodedValue([], data.abiTypeString, {}))) data.abiValues().forEach((v) => emptyArray.push(v as never)) expect(emptyArray.length).toEqual(nativeValues.length) expect(emptyArray.bytes).toEqual(sdkResult) @@ -565,7 +565,7 @@ describe('arc4.DynamicArray', async () => { compareARC4AndABIValue(value1, nativeValue1) compareARC4AndABIValue(value2, nativeValue2) - const sdkResult = data.abiType.encode(nativeValuesCopy) + const sdkResult = getABIEncodedValue(nativeValuesCopy, data.abiTypeString, {}) const result = dynamicArrayCopy.bytes expect(result).toEqual(Bytes(sdkResult)) }) @@ -578,7 +578,7 @@ describe('arc4.DynamicArray', async () => { const dynamicArray = data.array() dynamicArray[0][0][0] = new Str('new value') - const sdkResult = data.abiType.encode(nativeValues) + const sdkResult = getABIEncodedValue(nativeValues, data.abiTypeString, {}) const result = dynamicArray.bytes expect(result).toEqual(Bytes(sdkResult)) }) @@ -588,11 +588,11 @@ describe('arc4.DynamicArray', async () => { const nativeValues = data.nativeValues() nativeValues[0][0][0] = 'new value' - const sdkEncodedBytes = data.abiType.encode(data.nativeValues()) + const sdkEncodedBytes = getABIEncodedValue(data.nativeValues(), data.abiTypeString, {}) const dynamicArray = data.create(Bytes(sdkEncodedBytes)) dynamicArray[0][0][0] = new Str('new value') - const sdkResult = data.abiType.encode(nativeValues) + const sdkResult = getABIEncodedValue(nativeValues, data.abiTypeString, {}) const result = dynamicArray.bytes expect(result).toEqual(Bytes(sdkResult)) }) diff --git a/tests/arc4/dynamic-bytes.spec.ts b/tests/arc4/dynamic-bytes.spec.ts index ee1bfc2..4935f31 100644 --- a/tests/arc4/dynamic-bytes.spec.ts +++ b/tests/arc4/dynamic-bytes.spec.ts @@ -1,10 +1,10 @@ +import { getABIEncodedValue } from '@algorandfoundation/algokit-utils/types/app-arc56' import { Bytes } from '@algorandfoundation/algorand-typescript' import { DynamicBytes, interpretAsArc4 } from '@algorandfoundation/algorand-typescript/arc4' import { encodingUtil } from '@algorandfoundation/puya-ts' -import { ABIType } from 'algosdk' import { describe, expect, test } from 'vitest' -const abiType = ABIType.from('byte[]') +const abiTypeString = 'byte[]' const testData = [ { nativeValue() { @@ -16,7 +16,7 @@ const testData = [ }, { nativeValue() { - return encodingUtil.utf8ToUint8Array('01ff99aa'.repeat(8)) + return [...encodingUtil.utf8ToUint8Array('01ff99aa'.repeat(8))] }, dynamicBytes() { return new DynamicBytes('01ff99aa'.repeat(8)) @@ -26,7 +26,7 @@ const testData = [ describe('arc4.DynamicBytes', async () => { test.each(testData)('should be able to get bytes representation', async (data) => { - const sdkResult = abiType.encode(data.nativeValue()) + const sdkResult = getABIEncodedValue(data.nativeValue(), abiTypeString, {}) const result = data.dynamicBytes().bytes expect(result).toEqual(Bytes(sdkResult)) }) @@ -42,7 +42,7 @@ describe('arc4.DynamicBytes', async () => { test.each(testData)('create dynamic bytes from bytes', async (data) => { const nativeValue = data.nativeValue() - const sdkEncodedBytes = abiType.encode(nativeValue) + const sdkEncodedBytes = getABIEncodedValue(nativeValue, abiTypeString, {}) const result = interpretAsArc4(Bytes(sdkEncodedBytes)) for (let i = 0; i < result.length; i++) { expect(result[i].native).toEqual(nativeValue[i]) diff --git a/tests/arc4/static-array.spec.ts b/tests/arc4/static-array.spec.ts index 85a19b4..53e6e4c 100644 --- a/tests/arc4/static-array.spec.ts +++ b/tests/arc4/static-array.spec.ts @@ -1,3 +1,4 @@ +import { getABIEncodedValue } from '@algorandfoundation/algokit-utils/types/app-arc56' import { Bytes, internal } from '@algorandfoundation/algorand-typescript' import { TestExecutionContext } from '@algorandfoundation/algorand-typescript-testing' import { @@ -13,14 +14,13 @@ import { UintN, } from '@algorandfoundation/algorand-typescript/arc4' import { encodingUtil } from '@algorandfoundation/puya-ts' -import { ABIType } from 'algosdk' import { afterEach, describe, expect, it, test } from 'vitest' import { AccountCls } from '../../src/impl/account' import { DeliberateAny } from '../../src/typescript-helpers' import { asBytes, asUint8Array } from '../../src/util' const addressStaticArray = { - abiType: ABIType.from('address[10]'), + abiTypeString: 'address[10]', nativeValues() { return [ asUint8Array(Bytes.fromHex('00'.repeat(32))), @@ -46,7 +46,7 @@ const addressStaticArray = { }, } const boolStaticArray = { - abiType: ABIType.from('bool[10]'), + abiTypeString: 'bool[10]', nativeValues() { return [true, true, false, true, false, true, true, false, true, false] }, @@ -61,7 +61,7 @@ const boolStaticArray = { }, } const uint256StaticArray = { - abiType: ABIType.from('uint256[10]'), + abiTypeString: 'uint256[10]', nativeValues() { return [0n, 1n, 2n, 3n, 2n ** 8n, 2n ** 16n, 2n ** 32n, 2n ** 64n, 2n ** 128n, 2n ** 256n - 1n] }, @@ -76,7 +76,7 @@ const uint256StaticArray = { }, } const ufixednxmStaticArray = { - abiType: ABIType.from('ufixed256x16[10]'), + abiTypeString: 'ufixed256x16[10]', nativeValues() { return this.abiValues().map((v) => v.native.valueOf()) }, @@ -102,7 +102,7 @@ const ufixednxmStaticArray = { }, } const stringStaticArray = { - abiType: ABIType.from('string[10]'), + abiTypeString: 'string[10]', nativeValues() { return [ '', @@ -128,7 +128,7 @@ const stringStaticArray = { }, } const addressStaticArrayOfArray = { - abiType: ABIType.from('address[10][2]'), + abiTypeString: 'address[10][2]', nativeValues() { return [addressStaticArray.nativeValues(), addressStaticArray.nativeValues().reverse()] }, @@ -143,7 +143,7 @@ const addressStaticArrayOfArray = { }, } const boolStaticArrayOfArray = { - abiType: ABIType.from('bool[10][2]'), + abiTypeString: 'bool[10][2]', nativeValues() { return [boolStaticArray.nativeValues(), boolStaticArray.nativeValues().reverse()] }, @@ -158,7 +158,7 @@ const boolStaticArrayOfArray = { }, } const uint256StaticArrayOfArray = { - abiType: ABIType.from('uint256[10][2]'), + abiTypeString: 'uint256[10][2]', nativeValues() { return [uint256StaticArray.nativeValues(), uint256StaticArray.nativeValues().reverse()] }, @@ -173,7 +173,7 @@ const uint256StaticArrayOfArray = { }, } const uint256StaticArrayOfDynamicArray = { - abiType: ABIType.from('uint256[][2]'), + abiTypeString: 'uint256[][2]', nativeValues() { return [uint256StaticArray.nativeValues(), uint256StaticArray.nativeValues().reverse()] }, @@ -188,7 +188,7 @@ const uint256StaticArrayOfDynamicArray = { }, } const stringStaticArrayOfArray = { - abiType: ABIType.from('string[10][2]'), + abiTypeString: 'string[10][2]', nativeValues() { return [stringStaticArray.nativeValues(), stringStaticArray.nativeValues().reverse()] }, @@ -203,7 +203,7 @@ const stringStaticArrayOfArray = { }, } const stringStaticArrayOfArrayOfArray = { - abiType: ABIType.from('string[10][3][2]'), + abiTypeString: 'string[10][3][2]', nativeValues() { return [ [stringStaticArray.nativeValues(), stringStaticArray.nativeValues().reverse(), stringStaticArray.nativeValues()], @@ -225,7 +225,7 @@ const stringStaticArrayOfArrayOfArray = { }, } const tupleStaticArray = { - abiType: ABIType.from('(string[],(string[],string,uint256,address),bool,uint256[3])[2]'), + abiTypeString: '(string[],(string[],string,uint256,address),bool,uint256[3])[2]', nativeValues() { return Array(2).fill([ stringStaticArray.nativeValues().slice(0, 2), @@ -275,7 +275,7 @@ class Swapped extends Struct<{ a: Tuple<[DynamicArray, DynamicArray, Str, UintN<256>, Bool, StaticArray, 3>]> }> {} const structStaticArray = { - abiType: ABIType.from('(uint256,bool,string,(string[],string[],string,uint256,bool,uint256[3]))[2]'), + abiTypeString: '(uint256,bool,string,(string[],string[],string,uint256,bool,uint256[3]))[2]', nativeValues() { return Array(2).fill([ uint256StaticArray.nativeValues()[0], @@ -341,7 +341,7 @@ describe('arc4.StaticArray', async () => { tupleStaticArray, structStaticArray, ])('should be able to get bytes representation', async (data) => { - const sdkResult = data.abiType.encode(data.nativeValues()) + const sdkResult = getABIEncodedValue(data.nativeValues(), data.abiTypeString, {}) const result = data.array().bytes expect(result).toEqual(Bytes(sdkResult)) }) @@ -361,7 +361,7 @@ describe('arc4.StaticArray', async () => { tupleStaticArray, structStaticArray, ])('copy static array', async (data) => { - const sdkResult = data.abiType.encode(data.nativeValues()) + const sdkResult = getABIEncodedValue(data.nativeValues(), data.abiTypeString, {}) const original = data.array() const copy = original.copy() const result = copy.bytes @@ -419,7 +419,7 @@ describe('arc4.StaticArray', async () => { staticArrayCopy[staticArrayCopy.length - 1] = staticArrayCopy[0] staticArrayCopy[0] = arrayTemp - const sdkResult = data.abiType.encode(nativeValuesCopy) + const sdkResult = getABIEncodedValue(nativeValuesCopy, data.abiTypeString, {}) const result = staticArrayCopy.bytes expect(result).toEqual(Bytes(sdkResult)) }) @@ -439,7 +439,7 @@ describe('arc4.StaticArray', async () => { tupleStaticArray, structStaticArray, ])('create static array from bytes', async (data) => { - const sdkEncodedBytes = data.abiType.encode(data.nativeValues()) + const sdkEncodedBytes = getABIEncodedValue(data.nativeValues(), data.abiTypeString, {}) const result = data.create(Bytes(sdkEncodedBytes)) const nativeValues = data.nativeValues() for (let i = 0; i < result.length; i++) { @@ -463,7 +463,7 @@ describe('arc4.StaticArray', async () => { structStaticArray, ])('get item from static array created from bytes', async (data) => { const nativeValues = data.nativeValues() - const sdkEncodedBytes = data.abiType.encode(data.nativeValues()) + const sdkEncodedBytes = getABIEncodedValue(data.nativeValues(), data.abiTypeString, {}) const staticArray = data.create(Bytes(sdkEncodedBytes)) for (let i = 0; i < staticArray.length; i++) { compareARC4AndABIValue(staticArray[i], nativeValues[i]) @@ -492,14 +492,14 @@ describe('arc4.StaticArray', async () => { nativeValuesCopy[nativeValuesCopy.length - 1] = nativeValuesCopy[0] nativeValuesCopy[0] = nativeTemp - const sdkEncodedBytes = data.abiType.encode(data.nativeValues()) + const sdkEncodedBytes = getABIEncodedValue(data.nativeValues(), data.abiTypeString, {}) const staticArray = data.create(Bytes(sdkEncodedBytes)) const staticArrayCopy = staticArray.copy() const arrayTemp = staticArrayCopy.at(-1) staticArrayCopy[staticArrayCopy.length - 1] = staticArrayCopy[0] staticArrayCopy[0] = arrayTemp - const sdkResult = data.abiType.encode(nativeValuesCopy) + const sdkResult = getABIEncodedValue(nativeValuesCopy, data.abiTypeString, {}) const result = staticArrayCopy.bytes expect(result).toEqual(Bytes(sdkResult)) }) @@ -512,7 +512,7 @@ describe('arc4.StaticArray', async () => { const staticArray = data.array() staticArray[0][0][0] = new Str('new value') - const sdkResult = data.abiType.encode(nativeValues) + const sdkResult = getABIEncodedValue(nativeValues, data.abiTypeString, {}) const result = staticArray.bytes expect(result).toEqual(Bytes(sdkResult)) }) @@ -522,11 +522,11 @@ describe('arc4.StaticArray', async () => { const nativeValues = data.nativeValues() nativeValues[0][0][0] = 'new value' - const sdkEncodedBytes = data.abiType.encode(data.nativeValues()) + const sdkEncodedBytes = getABIEncodedValue(data.nativeValues(), data.abiTypeString, {}) const staticArray = data.create(Bytes(sdkEncodedBytes)) staticArray[0][0][0] = new Str('new value') - const sdkResult = data.abiType.encode(nativeValues) + const sdkResult = getABIEncodedValue(nativeValues, data.abiTypeString, {}) const result = staticArray.bytes expect(result).toEqual(Bytes(sdkResult)) }) diff --git a/tests/arc4/static-bytes.spec.ts b/tests/arc4/static-bytes.spec.ts index ed71e3d..6d8cfca 100644 --- a/tests/arc4/static-bytes.spec.ts +++ b/tests/arc4/static-bytes.spec.ts @@ -1,13 +1,13 @@ +import { getABIEncodedValue } from '@algorandfoundation/algokit-utils/types/app-arc56' import { Bytes } from '@algorandfoundation/algorand-typescript' import { interpretAsArc4, StaticBytes } from '@algorandfoundation/algorand-typescript/arc4' import { encodingUtil } from '@algorandfoundation/puya-ts' -import { ABIType } from 'algosdk' import { describe, expect, test } from 'vitest' const testData = [ { - abiType() { - return ABIType.from(`byte[${this.nativeValue().length}]`) + abiTypeString() { + return `byte[${this.nativeValue().length}]` }, nativeValue() { return [0, 1, 8, 16, 32, 64, 128, 255, 20, 30, 40, 50, 111] @@ -17,8 +17,8 @@ const testData = [ }, }, { - abiType() { - return ABIType.from(`byte[${this.nativeValue().length}]`) + abiTypeString() { + return `byte[${this.nativeValue().length}]` }, nativeValue() { return encodingUtil.utf8ToUint8Array('01ff99aa'.repeat(8)) @@ -31,7 +31,7 @@ const testData = [ describe('arc4.StaticBytes', async () => { test.each(testData)('should be able to get bytes representation', async (data) => { - const sdkResult = data.abiType().encode(data.nativeValue()) + const sdkResult = getABIEncodedValue(data.nativeValue(), data.abiTypeString(), {}) const result = data.staticBytes().bytes expect(result).toEqual(Bytes(sdkResult)) }) @@ -47,7 +47,7 @@ describe('arc4.StaticBytes', async () => { test.each(testData)('create static bytes from bytes', async (data) => { const nativeValue = data.nativeValue() - const sdkEncodedBytes = data.abiType().encode(nativeValue) + const sdkEncodedBytes = getABIEncodedValue(nativeValue, data.abiTypeString(), {}) const result = interpretAsArc4(Bytes(sdkEncodedBytes)) for (let i = 0; i < result.length; i++) { expect(result[i].native).toEqual(nativeValue[i]) diff --git a/tests/arc4/struct.spec.ts b/tests/arc4/struct.spec.ts index a9f8137..64cdc04 100644 --- a/tests/arc4/struct.spec.ts +++ b/tests/arc4/struct.spec.ts @@ -1,7 +1,6 @@ +import { getABIEncodedValue } from '@algorandfoundation/algokit-utils/types/app-arc56' import { Bytes, internal } from '@algorandfoundation/algorand-typescript' import { Bool, DynamicArray, interpretAsArc4, StaticArray, Str, Struct, Tuple, UintN } from '@algorandfoundation/algorand-typescript/arc4' -import { ABIType } from 'algosdk' - import { encodingUtil } from '@algorandfoundation/puya-ts' import { describe, expect, it, test } from 'vitest' import { AccountCls } from '../../src/impl/account' @@ -60,7 +59,7 @@ class Swapped6 extends Struct<{ const testData = [ { - abiType: ABIType.from('(uint64,bool,string,(uint64,bool,bool))'), + abiTypeString: '(uint64,bool,string,(uint64,bool,bool))', nativeValues() { return [nativeNumber, nativeBool, nativeString, [nativeNumber, nativeBool, nativeBool]] }, @@ -75,7 +74,7 @@ const testData = [ }, }, { - abiType: ABIType.from('(uint64,bool,string,((uint64,bool,bool),(uint64,bool,bool)))'), + abiTypeString: '(uint64,bool,string,((uint64,bool,bool),(uint64,bool,bool)))', nativeValues() { return [ nativeNumber, @@ -103,7 +102,7 @@ const testData = [ }, }, { - abiType: ABIType.from('(uint64,bool,string,(string[],string[],string,uint64,bool,uint64[3]))'), + abiTypeString: '(uint64,bool,string,(string[],string[],string,uint64,bool,uint64[3]))', nativeValues() { return [ nativeNumber, @@ -142,7 +141,7 @@ const testData = [ }, }, { - abiType: ABIType.from('(uint64,bool,string,((bool,string[],string),uint64,uint64[3]))'), + abiTypeString: '(uint64,bool,string,((bool,string[],string),uint64,uint64[3]))', nativeValues() { return [ nativeNumber, @@ -171,7 +170,7 @@ const testData = [ }, }, { - abiType: ABIType.from('(uint64,bool,string,((bool,string[],string),(uint64,uint64[3])))'), + abiTypeString: '(uint64,bool,string,((bool,string[],string),(uint64,uint64[3])))', nativeValues() { return [ nativeNumber, @@ -202,7 +201,7 @@ const testData = [ }, }, { - abiType: ABIType.from('(uint64,bool,string,((bool,(string[],string)),(uint64,uint64[3])))'), + abiTypeString: '(uint64,bool,string,((bool,(string[],string)),(uint64,uint64[3])))', nativeValues() { return [ nativeNumber, @@ -236,14 +235,14 @@ const testData = [ describe('arc4.Struct', async () => { test.each(testData)('should be able to get bytes representation', async (data) => { - const sdkResult = data.abiType.encode(data.nativeValues()) + const sdkResult = getABIEncodedValue(data.nativeValues(), data.abiTypeString, {}) const result = data.struct() expect(result.bytes).toEqual(sdkResult) }) test.each(testData)('create struct from bytes', async (data) => { const nativeValues = data.nativeValues() - const sdkResult = data.abiType.encode(nativeValues) + const sdkResult = getABIEncodedValue(nativeValues, data.abiTypeString, {}) const result = data.create(Bytes(sdkResult)) let i = 0 @@ -261,7 +260,7 @@ describe('arc4.Struct', async () => { nativeValues[3][0][1][0][1] = 'hello, world' nativeValues[3][0][1][0].push('test') nativeValues[3][1][1][0] = 24 - const sdkResult = data.abiType.encode(nativeValues) + const sdkResult = getABIEncodedValue(nativeValues, data.abiTypeString, {}) const abiValues = data.struct() as Swapped6 abiValues.b = new UintN<64>(43) @@ -282,9 +281,9 @@ describe('arc4.Struct', async () => { nativeValues[3][0][1][0][1] = 'hello, world' nativeValues[3][0][1][0].push('test') nativeValues[3][1][1][0] = 24 - const sdkResult = data.abiType.encode(nativeValues) + const sdkResult = getABIEncodedValue(nativeValues, data.abiTypeString, {}) - const bytes = Bytes(data.abiType.encode(data.nativeValues())) + const bytes = Bytes(getABIEncodedValue(data.nativeValues(), data.abiTypeString, {})) const abiValues = data.create(bytes) as Swapped6 abiValues.b = new UintN<64>(43) abiValues.d = new Str('world') diff --git a/tests/arc4/tuple.spec.ts b/tests/arc4/tuple.spec.ts index 78e8627..d4cc2a4 100644 --- a/tests/arc4/tuple.spec.ts +++ b/tests/arc4/tuple.spec.ts @@ -1,8 +1,8 @@ +import { getABIEncodedValue } from '@algorandfoundation/algokit-utils/types/app-arc56' import { Bytes, internal } from '@algorandfoundation/algorand-typescript' import { TestExecutionContext } from '@algorandfoundation/algorand-typescript-testing' import { Address, Bool, DynamicArray, interpretAsArc4, StaticArray, Str, Tuple, UintN } from '@algorandfoundation/algorand-typescript/arc4' import { encodingUtil } from '@algorandfoundation/puya-ts' -import { ABIType } from 'algosdk' import { afterEach, describe, expect, test } from 'vitest' import { AccountCls } from '../../src/impl/account' import { DeliberateAny } from '../../src/typescript-helpers' @@ -26,7 +26,7 @@ const otherAbiUint8 = new UintN<8>(42) const testData = [ { - abiType: ABIType.from('(uint8,bool,bool,address)'), + abiTypeString: '(uint8,bool,bool,address)', nativeValues() { return [nativeNumber, nativeBool, nativeBool, nativeAddress] }, @@ -41,7 +41,7 @@ const testData = [ }, }, { - abiType: ABIType.from('(string,uint8,bool)'), + abiTypeString: '(string,uint8,bool)', nativeValues() { return [nativeString, nativeNumber, nativeBool] }, @@ -56,7 +56,7 @@ const testData = [ }, }, { - abiType: ABIType.from('((uint8,bool,bool),(uint8,bool,bool))'), + abiTypeString: '((uint8,bool,bool),(uint8,bool,bool))', nativeValues() { return [ [nativeNumber, nativeBool, nativeBool], @@ -77,7 +77,7 @@ const testData = [ }, }, { - abiType: ABIType.from('(string[],string[],string,uint8,bool,uint8[3])'), + abiTypeString: '(string[],string[],string,uint8,bool,uint8[3])', nativeValues() { return [ [nativeString, nativeString], @@ -106,7 +106,7 @@ const testData = [ }, }, { - abiType: ABIType.from('((bool,string[],string),uint8,uint8[3])'), + abiTypeString: '((bool,string[],string),uint8,uint8[3])', nativeValues() { return [[nativeBool, [nativeString, nativeString], nativeString], nativeNumber, [nativeNumber, nativeNumber, nativeNumber]] }, @@ -125,7 +125,7 @@ const testData = [ }, }, { - abiType: ABIType.from('((bool,string[],string),(uint8,uint8[3]))'), + abiTypeString: '((bool,string[],string),(uint8,uint8[3]))', nativeValues() { return [ [nativeBool, [nativeString, nativeString], nativeString], @@ -146,7 +146,7 @@ const testData = [ }, }, { - abiType: ABIType.from('((bool,(string[],string,address)),(uint8,uint8[3]))'), + abiTypeString: '((bool,(string[],string,address)),(uint8,uint8[3]))', nativeValues() { return [ [nativeBool, [[nativeString, nativeString], nativeString, nativeAddress]], @@ -177,7 +177,7 @@ const testData = [ const testDataWithArray = [ { - abiType: ABIType.from('(string[],string[],string,uint8,bool,uint8[3])'), + abiTypeString: '(string[],string[],string,uint8,bool,uint8[3])', updatedNativeValues() { return [ [otherNativeString, nativeString, otherNativeString], @@ -211,7 +211,7 @@ const testDataWithArray = [ }, }, { - abiType: ABIType.from('((bool,string[],string),uint8,uint8[3])'), + abiTypeString: '((bool,string[],string),uint8,uint8[3])', updatedNativeValues() { return [ [nativeBool, [otherNativeString, nativeString, otherNativeString], nativeString], @@ -237,7 +237,7 @@ const testDataWithArray = [ }, }, { - abiType: ABIType.from('((bool,string[],string),(uint8,uint8[3]))'), + abiTypeString: '((bool,string[],string),(uint8,uint8[3]))', updatedNativeValues() { return [ [nativeBool, [otherNativeString, nativeString, otherNativeString], nativeString], @@ -261,7 +261,7 @@ const testDataWithArray = [ }, }, { - abiType: ABIType.from('((bool,(string[],string,address)),(uint8,uint8[3]))'), + abiTypeString: '((bool,(string[],string,address)),(uint8,uint8[3]))', updatedNativeValues() { return [ [nativeBool, [[otherNativeString, nativeString, otherNativeString], nativeString, nativeAddress]], @@ -298,7 +298,7 @@ describe('arc4.Tuple', async () => { }) test.each(testData)('should be able to get bytes representation', async (data) => { - const sdkResult = data.abiType.encode(data.nativeValues()) + const sdkResult = getABIEncodedValue(data.nativeValues(), data.abiTypeString, {}) const result = data.tuple().bytes expect(result).toEqual(Bytes(sdkResult)) }) @@ -314,7 +314,7 @@ describe('arc4.Tuple', async () => { test.each(testData)('create tuple from bytes', async (data) => { const nativeValues = data.nativeValues() - const sdkEncodedBytes = data.abiType.encode(nativeValues) + const sdkEncodedBytes = getABIEncodedValue(nativeValues, data.abiTypeString, {}) const result = data.create(Bytes(sdkEncodedBytes)) const tupleValues = result.native @@ -325,7 +325,7 @@ describe('arc4.Tuple', async () => { }) test.each(testDataWithArray)('update array values in tuple', async (data) => { - const sdkResult = data.abiType.encode(data.updatedNativeValues()) + const sdkResult = getABIEncodedValue(data.updatedNativeValues(), data.abiTypeString, {}) const tuple = data.tuple() data.update(tuple as DeliberateAny) const result = tuple.bytes diff --git a/tests/arc4/uintn.spec.ts b/tests/arc4/uintn.spec.ts index b3e8c77..a12eff7 100644 --- a/tests/arc4/uintn.spec.ts +++ b/tests/arc4/uintn.spec.ts @@ -43,8 +43,8 @@ describe('arc4.UintN', async () => { const result = new UintN32(value) - expect(result.native).toEqual(BigInt(expected)) - expect(avmResult).toEqual(BigInt(expected)) + expect(result.native).toEqual(expected) + expect(avmResult).toEqual(expected) }) test.each([ @@ -211,7 +211,7 @@ describe('arc4.UintN', async () => { const avmResult = await getAvmResult({ appClient }, 'verify_uintn_from_log', logValue) const result = interpretAsArc4>(Bytes(logValue), 'log') - expect(avmResult).toEqual(expected) + expect(BigInt(avmResult as number)).toEqual(expected) expect(result.native).toEqual(expected) }) diff --git a/tests/artifacts/crypto-ops/data/CryptoOpsContract.arc56.json b/tests/artifacts/crypto-ops/data/CryptoOpsContract.arc56.json new file mode 100644 index 0000000..13d7f43 --- /dev/null +++ b/tests/artifacts/crypto-ops/data/CryptoOpsContract.arc56.json @@ -0,0 +1,467 @@ +{ + "name": "CryptoOpsContract", + "structs": {}, + "methods": [ + { + "name": "verify_sha256", + "args": [ + { + "type": "byte[]", + "name": "a" + }, + { + "type": "uint64", + "name": "pad_size" + } + ], + "returns": { + "type": "byte[]" + }, + "actions": { + "create": [], + "call": [ + "NoOp" + ] + }, + "readonly": false, + "events": [], + "recommendations": {} + }, + { + "name": "verify_sha3_256", + "args": [ + { + "type": "byte[]", + "name": "a" + }, + { + "type": "uint64", + "name": "pad_size" + } + ], + "returns": { + "type": "byte[]" + }, + "actions": { + "create": [], + "call": [ + "NoOp" + ] + }, + "readonly": false, + "events": [], + "recommendations": {} + }, + { + "name": "verify_keccak_256", + "args": [ + { + "type": "byte[]", + "name": "a" + }, + { + "type": "uint64", + "name": "pad_size" + } + ], + "returns": { + "type": "byte[]" + }, + "actions": { + "create": [], + "call": [ + "NoOp" + ] + }, + "readonly": false, + "events": [], + "recommendations": {} + }, + { + "name": "verify_sha512_256", + "args": [ + { + "type": "byte[]", + "name": "a" + }, + { + "type": "uint64", + "name": "pad_size" + } + ], + "returns": { + "type": "byte[]" + }, + "actions": { + "create": [], + "call": [ + "NoOp" + ] + }, + "readonly": false, + "events": [], + "recommendations": {} + }, + { + "name": "verify_ed25519verify", + "args": [ + { + "type": "byte[]", + "name": "a" + }, + { + "type": "byte[]", + "name": "b" + }, + { + "type": "byte[]", + "name": "c" + } + ], + "returns": { + "type": "bool" + }, + "actions": { + "create": [], + "call": [ + "NoOp" + ] + }, + "readonly": false, + "events": [], + "recommendations": {} + }, + { + "name": "verify_ed25519verify_bare", + "args": [ + { + "type": "byte[]", + "name": "a" + }, + { + "type": "byte[]", + "name": "b" + }, + { + "type": "byte[]", + "name": "c" + } + ], + "returns": { + "type": "bool" + }, + "actions": { + "create": [], + "call": [ + "NoOp" + ] + }, + "readonly": false, + "events": [], + "recommendations": {} + }, + { + "name": "verify_ecdsa_verify_k1", + "args": [ + { + "type": "byte[]", + "name": "a" + }, + { + "type": "byte[]", + "name": "b" + }, + { + "type": "byte[]", + "name": "c" + }, + { + "type": "byte[]", + "name": "d" + }, + { + "type": "byte[]", + "name": "e" + } + ], + "returns": { + "type": "bool" + }, + "actions": { + "create": [], + "call": [ + "NoOp" + ] + }, + "readonly": false, + "events": [], + "recommendations": {} + }, + { + "name": "verify_ecdsa_verify_r1", + "args": [ + { + "type": "byte[]", + "name": "a" + }, + { + "type": "byte[]", + "name": "b" + }, + { + "type": "byte[]", + "name": "c" + }, + { + "type": "byte[]", + "name": "d" + }, + { + "type": "byte[]", + "name": "e" + } + ], + "returns": { + "type": "bool" + }, + "actions": { + "create": [], + "call": [ + "NoOp" + ] + }, + "readonly": false, + "events": [], + "recommendations": {} + }, + { + "name": "verify_ecdsa_recover_k1", + "args": [ + { + "type": "byte[]", + "name": "a" + }, + { + "type": "uint64", + "name": "b" + }, + { + "type": "byte[]", + "name": "c" + }, + { + "type": "byte[]", + "name": "d" + } + ], + "returns": { + "type": "(byte[],byte[])" + }, + "actions": { + "create": [], + "call": [ + "NoOp" + ] + }, + "readonly": false, + "events": [], + "recommendations": {} + }, + { + "name": "verify_ecdsa_recover_r1", + "args": [ + { + "type": "byte[]", + "name": "a" + }, + { + "type": "uint64", + "name": "b" + }, + { + "type": "byte[]", + "name": "c" + }, + { + "type": "byte[]", + "name": "d" + } + ], + "returns": { + "type": "(byte[],byte[])" + }, + "actions": { + "create": [], + "call": [ + "NoOp" + ] + }, + "readonly": false, + "events": [], + "recommendations": {} + }, + { + "name": "verify_ecdsa_decompress_k1", + "args": [ + { + "type": "byte[]", + "name": "a" + } + ], + "returns": { + "type": "(byte[],byte[])" + }, + "actions": { + "create": [], + "call": [ + "NoOp" + ] + }, + "readonly": false, + "events": [], + "recommendations": {} + }, + { + "name": "verify_ecdsa_decompress_r1", + "args": [ + { + "type": "byte[]", + "name": "a" + } + ], + "returns": { + "type": "(byte[],byte[])" + }, + "actions": { + "create": [], + "call": [ + "NoOp" + ] + }, + "readonly": false, + "events": [], + "recommendations": {} + }, + { + "name": "verify_vrf_verify", + "args": [ + { + "type": "byte[]", + "name": "a" + }, + { + "type": "byte[]", + "name": "b" + }, + { + "type": "byte[]", + "name": "c" + } + ], + "returns": { + "type": "(byte[],bool)" + }, + "actions": { + "create": [], + "call": [ + "NoOp" + ] + }, + "readonly": false, + "events": [], + "recommendations": {} + } + ], + "arcs": [ + 22, + 28 + ], + "networks": {}, + "state": { + "schema": { + "global": { + "ints": 0, + "bytes": 0 + }, + "local": { + "ints": 0, + "bytes": 0 + } + }, + "keys": { + "global": {}, + "local": {}, + "box": {} + }, + "maps": { + "global": {}, + "local": {}, + "box": {} + } + }, + "bareActions": { + "create": [ + "NoOp" + ], + "call": [] + }, + "sourceInfo": { + "approval": { + "sourceInfo": [ + { + "pc": [ + 139, + 173, + 207, + 241, + 275, + 309, + 343, + 394, + 445, + 520, + 595, + 654, + 713 + ], + "errorMessage": "OnCompletion is not NoOp" + }, + { + "pc": [ + 775 + ], + "errorMessage": "can only call when creating" + }, + { + "pc": [ + 142, + 176, + 210, + 244, + 278, + 312, + 346, + 397, + 448, + 523, + 598, + 657, + 716 + ], + "errorMessage": "can only call when not creating" + } + ], + "pcOffsetMethod": "none" + }, + "clear": { + "sourceInfo": [], + "pcOffsetMethod": "none" + } + }, + "source": { + "approval": "I3ByYWdtYSB2ZXJzaW9uIDEwCgp0ZXN0cy9hcnRpZmFjdHMvY3J5cHRvLW9wcy9jb250cmFjdC5hbGdvLnRzOjpDcnlwdG9PcHNDb250cmFjdC5hcHByb3ZhbFByb2dyYW06CiAgICBpbnRjYmxvY2sgMCAxIDQgMzAwMAogICAgYnl0ZWNibG9jayAweDE1MWY3Yzc1IDB4MDAgMHgwMDA0IDB4MDY4MTAxCiAgICBjYWxsc3ViIF9fcHV5YV9hcmM0X3JvdXRlcl9fCiAgICByZXR1cm4KCgovLyB0ZXN0cy9hcnRpZmFjdHMvY3J5cHRvLW9wcy9jb250cmFjdC5hbGdvLnRzOjpDcnlwdG9PcHNDb250cmFjdC5fX3B1eWFfYXJjNF9yb3V0ZXJfXygpIC0+IHVpbnQ2NDoKX19wdXlhX2FyYzRfcm91dGVyX186CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvY3J5cHRvLW9wcy9jb250cmFjdC5hbGdvLnRzOjQKICAgIC8vIGV4cG9ydCBjbGFzcyBDcnlwdG9PcHNDb250cmFjdCBleHRlbmRzIGFyYzQuQ29udHJhY3QgewogICAgcHJvdG8gMCAxCiAgICB0eG4gTnVtQXBwQXJncwogICAgYnogX19wdXlhX2FyYzRfcm91dGVyX19fYmFyZV9yb3V0aW5nQDE3CiAgICBwdXNoYnl0ZXNzIDB4MzQ1NmM0YzMgMHhlODQ0MmI4NCAweDY1ZjU2N2FhIDB4MjU4NDU1YjEgMHgzNWFmMGYzOCAweDY1ODJjOTk3IDB4NjI5OGZmYmIgMHgzODg1YjU0ZiAweDIxNjRlMGJmIDB4NzU1Yjc5YTUgMHhmMDZiYjA3NyAweDEzM2Y4Y2NjIDB4MmY3YzY4YTkgLy8gbWV0aG9kICJ2ZXJpZnlfc2hhMjU2KGJ5dGVbXSx1aW50NjQpYnl0ZVtdIiwgbWV0aG9kICJ2ZXJpZnlfc2hhM18yNTYoYnl0ZVtdLHVpbnQ2NClieXRlW10iLCBtZXRob2QgInZlcmlmeV9rZWNjYWtfMjU2KGJ5dGVbXSx1aW50NjQpYnl0ZVtdIiwgbWV0aG9kICJ2ZXJpZnlfc2hhNTEyXzI1NihieXRlW10sdWludDY0KWJ5dGVbXSIsIG1ldGhvZCAidmVyaWZ5X2VkMjU1MTl2ZXJpZnkoYnl0ZVtdLGJ5dGVbXSxieXRlW10pYm9vbCIsIG1ldGhvZCAidmVyaWZ5X2VkMjU1MTl2ZXJpZnlfYmFyZShieXRlW10sYnl0ZVtdLGJ5dGVbXSlib29sIiwgbWV0aG9kICJ2ZXJpZnlfZWNkc2FfdmVyaWZ5X2sxKGJ5dGVbXSxieXRlW10sYnl0ZVtdLGJ5dGVbXSxieXRlW10pYm9vbCIsIG1ldGhvZCAidmVyaWZ5X2VjZHNhX3ZlcmlmeV9yMShieXRlW10sYnl0ZVtdLGJ5dGVbXSxieXRlW10sYnl0ZVtdKWJvb2wiLCBtZXRob2QgInZlcmlmeV9lY2RzYV9yZWNvdmVyX2sxKGJ5dGVbXSx1aW50NjQsYnl0ZVtdLGJ5dGVbXSkoYnl0ZVtdLGJ5dGVbXSkiLCBtZXRob2QgInZlcmlmeV9lY2RzYV9yZWNvdmVyX3IxKGJ5dGVbXSx1aW50NjQsYnl0ZVtdLGJ5dGVbXSkoYnl0ZVtdLGJ5dGVbXSkiLCBtZXRob2QgInZlcmlmeV9lY2RzYV9kZWNvbXByZXNzX2sxKGJ5dGVbXSkoYnl0ZVtdLGJ5dGVbXSkiLCBtZXRob2QgInZlcmlmeV9lY2RzYV9kZWNvbXByZXNzX3IxKGJ5dGVbXSkoYnl0ZVtdLGJ5dGVbXSkiLCBtZXRob2QgInZlcmlmeV92cmZfdmVyaWZ5KGJ5dGVbXSxieXRlW10sYnl0ZVtdKShieXRlW10sYm9vbCkiCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAwCiAgICBtYXRjaCBfX3B1eWFfYXJjNF9yb3V0ZXJfX192ZXJpZnlfc2hhMjU2X3JvdXRlQDIgX19wdXlhX2FyYzRfcm91dGVyX19fdmVyaWZ5X3NoYTNfMjU2X3JvdXRlQDMgX19wdXlhX2FyYzRfcm91dGVyX19fdmVyaWZ5X2tlY2Nha18yNTZfcm91dGVANCBfX3B1eWFfYXJjNF9yb3V0ZXJfX192ZXJpZnlfc2hhNTEyXzI1Nl9yb3V0ZUA1IF9fcHV5YV9hcmM0X3JvdXRlcl9fX3ZlcmlmeV9lZDI1NTE5dmVyaWZ5X3JvdXRlQDYgX19wdXlhX2FyYzRfcm91dGVyX19fdmVyaWZ5X2VkMjU1MTl2ZXJpZnlfYmFyZV9yb3V0ZUA3IF9fcHV5YV9hcmM0X3JvdXRlcl9fX3ZlcmlmeV9lY2RzYV92ZXJpZnlfazFfcm91dGVAOCBfX3B1eWFfYXJjNF9yb3V0ZXJfX192ZXJpZnlfZWNkc2FfdmVyaWZ5X3IxX3JvdXRlQDkgX19wdXlhX2FyYzRfcm91dGVyX19fdmVyaWZ5X2VjZHNhX3JlY292ZXJfazFfcm91dGVAMTAgX19wdXlhX2FyYzRfcm91dGVyX19fdmVyaWZ5X2VjZHNhX3JlY292ZXJfcjFfcm91dGVAMTEgX19wdXlhX2FyYzRfcm91dGVyX19fdmVyaWZ5X2VjZHNhX2RlY29tcHJlc3NfazFfcm91dGVAMTIgX19wdXlhX2FyYzRfcm91dGVyX19fdmVyaWZ5X2VjZHNhX2RlY29tcHJlc3NfcjFfcm91dGVAMTMgX19wdXlhX2FyYzRfcm91dGVyX19fdmVyaWZ5X3ZyZl92ZXJpZnlfcm91dGVAMTQKICAgIGludGNfMCAvLyAwCiAgICByZXRzdWIKCl9fcHV5YV9hcmM0X3JvdXRlcl9fX3ZlcmlmeV9zaGEyNTZfcm91dGVAMjoKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9jcnlwdG8tb3BzL2NvbnRyYWN0LmFsZ28udHM6NQogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2NyeXB0by1vcHMvY29udHJhY3QuYWxnby50czo0CiAgICAvLyBleHBvcnQgY2xhc3MgQ3J5cHRvT3BzQ29udHJhY3QgZXh0ZW5kcyBhcmM0LkNvbnRyYWN0IHsKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGV4dHJhY3QgMiAwCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAyCiAgICBidG9pCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvY3J5cHRvLW9wcy9jb250cmFjdC5hbGdvLnRzOjUKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICBjYWxsc3ViIHZlcmlmeV9zaGEyNTYKICAgIGR1cAogICAgbGVuCiAgICBpdG9iCiAgICBleHRyYWN0IDYgMgogICAgc3dhcAogICAgY29uY2F0CiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzEgLy8gMQogICAgcmV0c3ViCgpfX3B1eWFfYXJjNF9yb3V0ZXJfX192ZXJpZnlfc2hhM18yNTZfcm91dGVAMzoKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9jcnlwdG8tb3BzL2NvbnRyYWN0LmFsZ28udHM6MTIKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9jcnlwdG8tb3BzL2NvbnRyYWN0LmFsZ28udHM6NAogICAgLy8gZXhwb3J0IGNsYXNzIENyeXB0b09wc0NvbnRyYWN0IGV4dGVuZHMgYXJjNC5Db250cmFjdCB7CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBleHRyYWN0IDIgMAogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgogICAgYnRvaQogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2NyeXB0by1vcHMvY29udHJhY3QuYWxnby50czoxMgogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIGNhbGxzdWIgdmVyaWZ5X3NoYTNfMjU2CiAgICBkdXAKICAgIGxlbgogICAgaXRvYgogICAgZXh0cmFjdCA2IDIKICAgIHN3YXAKICAgIGNvbmNhdAogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18xIC8vIDEKICAgIHJldHN1YgoKX19wdXlhX2FyYzRfcm91dGVyX19fdmVyaWZ5X2tlY2Nha18yNTZfcm91dGVANDoKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9jcnlwdG8tb3BzL2NvbnRyYWN0LmFsZ28udHM6MTkKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9jcnlwdG8tb3BzL2NvbnRyYWN0LmFsZ28udHM6NAogICAgLy8gZXhwb3J0IGNsYXNzIENyeXB0b09wc0NvbnRyYWN0IGV4dGVuZHMgYXJjNC5Db250cmFjdCB7CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBleHRyYWN0IDIgMAogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgogICAgYnRvaQogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2NyeXB0by1vcHMvY29udHJhY3QuYWxnby50czoxOQogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIGNhbGxzdWIgdmVyaWZ5X2tlY2Nha18yNTYKICAgIGR1cAogICAgbGVuCiAgICBpdG9iCiAgICBleHRyYWN0IDYgMgogICAgc3dhcAogICAgY29uY2F0CiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzEgLy8gMQogICAgcmV0c3ViCgpfX3B1eWFfYXJjNF9yb3V0ZXJfX192ZXJpZnlfc2hhNTEyXzI1Nl9yb3V0ZUA1OgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2NyeXB0by1vcHMvY29udHJhY3QuYWxnby50czoyNgogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2NyeXB0by1vcHMvY29udHJhY3QuYWxnby50czo0CiAgICAvLyBleHBvcnQgY2xhc3MgQ3J5cHRvT3BzQ29udHJhY3QgZXh0ZW5kcyBhcmM0LkNvbnRyYWN0IHsKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGV4dHJhY3QgMiAwCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAyCiAgICBidG9pCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvY3J5cHRvLW9wcy9jb250cmFjdC5hbGdvLnRzOjI2CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgY2FsbHN1YiB2ZXJpZnlfc2hhNTEyXzI1NgogICAgZHVwCiAgICBsZW4KICAgIGl0b2IKICAgIGV4dHJhY3QgNiAyCiAgICBzd2FwCiAgICBjb25jYXQKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMSAvLyAxCiAgICByZXRzdWIKCl9fcHV5YV9hcmM0X3JvdXRlcl9fX3ZlcmlmeV9lZDI1NTE5dmVyaWZ5X3JvdXRlQDY6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvY3J5cHRvLW9wcy9jb250cmFjdC5hbGdvLnRzOjMzCiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvY3J5cHRvLW9wcy9jb250cmFjdC5hbGdvLnRzOjQKICAgIC8vIGV4cG9ydCBjbGFzcyBDcnlwdG9PcHNDb250cmFjdCBleHRlbmRzIGFyYzQuQ29udHJhY3QgewogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZXh0cmFjdCAyIDAKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDIKICAgIGV4dHJhY3QgMiAwCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAzCiAgICBleHRyYWN0IDIgMAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2NyeXB0by1vcHMvY29udHJhY3QuYWxnby50czozMwogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIGNhbGxzdWIgdmVyaWZ5X2VkMjU1MTl2ZXJpZnkKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMSAvLyAxCiAgICByZXRzdWIKCl9fcHV5YV9hcmM0X3JvdXRlcl9fX3ZlcmlmeV9lZDI1NTE5dmVyaWZ5X2JhcmVfcm91dGVANzoKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9jcnlwdG8tb3BzL2NvbnRyYWN0LmFsZ28udHM6NDAKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9jcnlwdG8tb3BzL2NvbnRyYWN0LmFsZ28udHM6NAogICAgLy8gZXhwb3J0IGNsYXNzIENyeXB0b09wc0NvbnRyYWN0IGV4dGVuZHMgYXJjNC5Db250cmFjdCB7CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBleHRyYWN0IDIgMAogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgogICAgZXh0cmFjdCAyIDAKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDMKICAgIGV4dHJhY3QgMiAwCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvY3J5cHRvLW9wcy9jb250cmFjdC5hbGdvLnRzOjQwCiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgY2FsbHN1YiB2ZXJpZnlfZWQyNTUxOXZlcmlmeV9iYXJlCiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzEgLy8gMQogICAgcmV0c3ViCgpfX3B1eWFfYXJjNF9yb3V0ZXJfX192ZXJpZnlfZWNkc2FfdmVyaWZ5X2sxX3JvdXRlQDg6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvY3J5cHRvLW9wcy9jb250cmFjdC5hbGdvLnRzOjQ3CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvY3J5cHRvLW9wcy9jb250cmFjdC5hbGdvLnRzOjQKICAgIC8vIGV4cG9ydCBjbGFzcyBDcnlwdG9PcHNDb250cmFjdCBleHRlbmRzIGFyYzQuQ29udHJhY3QgewogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZXh0cmFjdCAyIDAKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDIKICAgIGV4dHJhY3QgMiAwCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAzCiAgICBleHRyYWN0IDIgMAogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgNAogICAgZXh0cmFjdCAyIDAKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDUKICAgIGV4dHJhY3QgMiAwCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvY3J5cHRvLW9wcy9jb250cmFjdC5hbGdvLnRzOjQ3CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgY2FsbHN1YiB2ZXJpZnlfZWNkc2FfdmVyaWZ5X2sxCiAgICBieXRlY18xIC8vIDB4MDAKICAgIGludGNfMCAvLyAwCiAgICB1bmNvdmVyIDIKICAgIHNldGJpdAogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18xIC8vIDEKICAgIHJldHN1YgoKX19wdXlhX2FyYzRfcm91dGVyX19fdmVyaWZ5X2VjZHNhX3ZlcmlmeV9yMV9yb3V0ZUA5OgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2NyeXB0by1vcHMvY29udHJhY3QuYWxnby50czo1NAogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2NyeXB0by1vcHMvY29udHJhY3QuYWxnby50czo0CiAgICAvLyBleHBvcnQgY2xhc3MgQ3J5cHRvT3BzQ29udHJhY3QgZXh0ZW5kcyBhcmM0LkNvbnRyYWN0IHsKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGV4dHJhY3QgMiAwCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAyCiAgICBleHRyYWN0IDIgMAogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMwogICAgZXh0cmFjdCAyIDAKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDQKICAgIGV4dHJhY3QgMiAwCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyA1CiAgICBleHRyYWN0IDIgMAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2NyeXB0by1vcHMvY29udHJhY3QuYWxnby50czo1NAogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIGNhbGxzdWIgdmVyaWZ5X2VjZHNhX3ZlcmlmeV9yMQogICAgYnl0ZWNfMSAvLyAweDAwCiAgICBpbnRjXzAgLy8gMAogICAgdW5jb3ZlciAyCiAgICBzZXRiaXQKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMSAvLyAxCiAgICByZXRzdWIKCl9fcHV5YV9hcmM0X3JvdXRlcl9fX3ZlcmlmeV9lY2RzYV9yZWNvdmVyX2sxX3JvdXRlQDEwOgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2NyeXB0by1vcHMvY29udHJhY3QuYWxnby50czo2MQogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2NyeXB0by1vcHMvY29udHJhY3QuYWxnby50czo0CiAgICAvLyBleHBvcnQgY2xhc3MgQ3J5cHRvT3BzQ29udHJhY3QgZXh0ZW5kcyBhcmM0LkNvbnRyYWN0IHsKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGV4dHJhY3QgMiAwCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAyCiAgICBidG9pCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAzCiAgICBleHRyYWN0IDIgMAogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgNAogICAgZXh0cmFjdCAyIDAKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9jcnlwdG8tb3BzL2NvbnRyYWN0LmFsZ28udHM6NjEKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICBjYWxsc3ViIHZlcmlmeV9lY2RzYV9yZWNvdmVyX2sxCiAgICBkaWcgMQogICAgbGVuCiAgICBpdG9iCiAgICBleHRyYWN0IDYgMgogICAgdW5jb3ZlciAyCiAgICBjb25jYXQKICAgIGRpZyAxCiAgICBsZW4KICAgIGl0b2IKICAgIGV4dHJhY3QgNiAyCiAgICB1bmNvdmVyIDIKICAgIGNvbmNhdAogICAgZGlnIDEKICAgIGxlbgogICAgaW50Y18yIC8vIDQKICAgICsKICAgIGl0b2IKICAgIGV4dHJhY3QgNiAyCiAgICBieXRlY18yIC8vIDB4MDAwNAogICAgc3dhcAogICAgY29uY2F0CiAgICB1bmNvdmVyIDIKICAgIGNvbmNhdAogICAgc3dhcAogICAgY29uY2F0CiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzEgLy8gMQogICAgcmV0c3ViCgpfX3B1eWFfYXJjNF9yb3V0ZXJfX192ZXJpZnlfZWNkc2FfcmVjb3Zlcl9yMV9yb3V0ZUAxMToKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9jcnlwdG8tb3BzL2NvbnRyYWN0LmFsZ28udHM6NjcKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9jcnlwdG8tb3BzL2NvbnRyYWN0LmFsZ28udHM6NAogICAgLy8gZXhwb3J0IGNsYXNzIENyeXB0b09wc0NvbnRyYWN0IGV4dGVuZHMgYXJjNC5Db250cmFjdCB7CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBleHRyYWN0IDIgMAogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgogICAgYnRvaQogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMwogICAgZXh0cmFjdCAyIDAKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDQKICAgIGV4dHJhY3QgMiAwCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvY3J5cHRvLW9wcy9jb250cmFjdC5hbGdvLnRzOjY3CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgY2FsbHN1YiB2ZXJpZnlfZWNkc2FfcmVjb3Zlcl9yMQogICAgZGlnIDEKICAgIGxlbgogICAgaXRvYgogICAgZXh0cmFjdCA2IDIKICAgIHVuY292ZXIgMgogICAgY29uY2F0CiAgICBkaWcgMQogICAgbGVuCiAgICBpdG9iCiAgICBleHRyYWN0IDYgMgogICAgdW5jb3ZlciAyCiAgICBjb25jYXQKICAgIGRpZyAxCiAgICBsZW4KICAgIGludGNfMiAvLyA0CiAgICArCiAgICBpdG9iCiAgICBleHRyYWN0IDYgMgogICAgYnl0ZWNfMiAvLyAweDAwMDQKICAgIHN3YXAKICAgIGNvbmNhdAogICAgdW5jb3ZlciAyCiAgICBjb25jYXQKICAgIHN3YXAKICAgIGNvbmNhdAogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18xIC8vIDEKICAgIHJldHN1YgoKX19wdXlhX2FyYzRfcm91dGVyX19fdmVyaWZ5X2VjZHNhX2RlY29tcHJlc3NfazFfcm91dGVAMTI6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvY3J5cHRvLW9wcy9jb250cmFjdC5hbGdvLnRzOjc2CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvY3J5cHRvLW9wcy9jb250cmFjdC5hbGdvLnRzOjQKICAgIC8vIGV4cG9ydCBjbGFzcyBDcnlwdG9PcHNDb250cmFjdCBleHRlbmRzIGFyYzQuQ29udHJhY3QgewogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZXh0cmFjdCAyIDAKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9jcnlwdG8tb3BzL2NvbnRyYWN0LmFsZ28udHM6NzYKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICBjYWxsc3ViIHZlcmlmeV9lY2RzYV9kZWNvbXByZXNzX2sxCiAgICBkaWcgMQogICAgbGVuCiAgICBpdG9iCiAgICBleHRyYWN0IDYgMgogICAgdW5jb3ZlciAyCiAgICBjb25jYXQKICAgIGRpZyAxCiAgICBsZW4KICAgIGl0b2IKICAgIGV4dHJhY3QgNiAyCiAgICB1bmNvdmVyIDIKICAgIGNvbmNhdAogICAgZGlnIDEKICAgIGxlbgogICAgaW50Y18yIC8vIDQKICAgICsKICAgIGl0b2IKICAgIGV4dHJhY3QgNiAyCiAgICBieXRlY18yIC8vIDB4MDAwNAogICAgc3dhcAogICAgY29uY2F0CiAgICB1bmNvdmVyIDIKICAgIGNvbmNhdAogICAgc3dhcAogICAgY29uY2F0CiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzEgLy8gMQogICAgcmV0c3ViCgpfX3B1eWFfYXJjNF9yb3V0ZXJfX192ZXJpZnlfZWNkc2FfZGVjb21wcmVzc19yMV9yb3V0ZUAxMzoKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9jcnlwdG8tb3BzL2NvbnRyYWN0LmFsZ28udHM6ODIKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9jcnlwdG8tb3BzL2NvbnRyYWN0LmFsZ28udHM6NAogICAgLy8gZXhwb3J0IGNsYXNzIENyeXB0b09wc0NvbnRyYWN0IGV4dGVuZHMgYXJjNC5Db250cmFjdCB7CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBleHRyYWN0IDIgMAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2NyeXB0by1vcHMvY29udHJhY3QuYWxnby50czo4MgogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIGNhbGxzdWIgdmVyaWZ5X2VjZHNhX2RlY29tcHJlc3NfcjEKICAgIGRpZyAxCiAgICBsZW4KICAgIGl0b2IKICAgIGV4dHJhY3QgNiAyCiAgICB1bmNvdmVyIDIKICAgIGNvbmNhdAogICAgZGlnIDEKICAgIGxlbgogICAgaXRvYgogICAgZXh0cmFjdCA2IDIKICAgIHVuY292ZXIgMgogICAgY29uY2F0CiAgICBkaWcgMQogICAgbGVuCiAgICBpbnRjXzIgLy8gNAogICAgKwogICAgaXRvYgogICAgZXh0cmFjdCA2IDIKICAgIGJ5dGVjXzIgLy8gMHgwMDA0CiAgICBzd2FwCiAgICBjb25jYXQKICAgIHVuY292ZXIgMgogICAgY29uY2F0CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMSAvLyAxCiAgICByZXRzdWIKCl9fcHV5YV9hcmM0X3JvdXRlcl9fX3ZlcmlmeV92cmZfdmVyaWZ5X3JvdXRlQDE0OgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2NyeXB0by1vcHMvY29udHJhY3QuYWxnby50czo4OAogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2NyeXB0by1vcHMvY29udHJhY3QuYWxnby50czo0CiAgICAvLyBleHBvcnQgY2xhc3MgQ3J5cHRvT3BzQ29udHJhY3QgZXh0ZW5kcyBhcmM0LkNvbnRyYWN0IHsKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGV4dHJhY3QgMiAwCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAyCiAgICBleHRyYWN0IDIgMAogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMwogICAgZXh0cmFjdCAyIDAKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9jcnlwdG8tb3BzL2NvbnRyYWN0LmFsZ28udHM6ODgKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICBjYWxsc3ViIHZlcmlmeV92cmZfdmVyaWZ5CiAgICBkaWcgMQogICAgbGVuCiAgICBpdG9iCiAgICBleHRyYWN0IDYgMgogICAgdW5jb3ZlciAyCiAgICBjb25jYXQKICAgIGJ5dGVjXzEgLy8gMHgwMAogICAgaW50Y18wIC8vIDAKICAgIHVuY292ZXIgMwogICAgc2V0Yml0CiAgICBwdXNoYnl0ZXMgMHgwMDAzCiAgICBzd2FwCiAgICBjb25jYXQKICAgIHN3YXAKICAgIGNvbmNhdAogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18xIC8vIDEKICAgIHJldHN1YgoKX19wdXlhX2FyYzRfcm91dGVyX19fYmFyZV9yb3V0aW5nQDE3OgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2NyeXB0by1vcHMvY29udHJhY3QuYWxnby50czo0CiAgICAvLyBleHBvcnQgY2xhc3MgQ3J5cHRvT3BzQ29udHJhY3QgZXh0ZW5kcyBhcmM0LkNvbnRyYWN0IHsKICAgIHR4biBPbkNvbXBsZXRpb24KICAgIGJueiBfX3B1eWFfYXJjNF9yb3V0ZXJfX19hZnRlcl9pZl9lbHNlQDIxCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgIQogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBjcmVhdGluZwogICAgaW50Y18xIC8vIDEKICAgIHJldHN1YgoKX19wdXlhX2FyYzRfcm91dGVyX19fYWZ0ZXJfaWZfZWxzZUAyMToKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9jcnlwdG8tb3BzL2NvbnRyYWN0LmFsZ28udHM6NAogICAgLy8gZXhwb3J0IGNsYXNzIENyeXB0b09wc0NvbnRyYWN0IGV4dGVuZHMgYXJjNC5Db250cmFjdCB7CiAgICBpbnRjXzAgLy8gMAogICAgcmV0c3ViCgoKLy8gdGVzdHMvYXJ0aWZhY3RzL2NyeXB0by1vcHMvY29udHJhY3QuYWxnby50czo6Q3J5cHRvT3BzQ29udHJhY3QudmVyaWZ5X3NoYTI1NihhOiBieXRlcywgcGFkX3NpemU6IHVpbnQ2NCkgLT4gYnl0ZXM6CnZlcmlmeV9zaGEyNTY6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvY3J5cHRvLW9wcy9jb250cmFjdC5hbGdvLnRzOjUtNgogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIC8vIHB1YmxpYyB2ZXJpZnlfc2hhMjU2KGE6IGJ5dGVzLCBwYWRfc2l6ZTogdWludDY0KTogYnl0ZXMgewogICAgcHJvdG8gMiAxCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvY3J5cHRvLW9wcy9jb250cmFjdC5hbGdvLnRzOjcKICAgIC8vIGNvbnN0IHBhZGRlZEEgPSBvcC5iemVybyhwYWRfc2l6ZSkuY29uY2F0KGEpCiAgICBmcmFtZV9kaWcgLTEKICAgIGJ6ZXJvCiAgICBmcmFtZV9kaWcgLTIKICAgIGNvbmNhdAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2NyeXB0by1vcHMvY29udHJhY3QuYWxnby50czo4CiAgICAvLyBjb25zdCByZXN1bHQgPSBvcC5zaGEyNTYocGFkZGVkQSkKICAgIHNoYTI1NgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2NyeXB0by1vcHMvY29udHJhY3QuYWxnby50czo5CiAgICAvLyByZXR1cm4gcmVzdWx0CiAgICByZXRzdWIKCgovLyB0ZXN0cy9hcnRpZmFjdHMvY3J5cHRvLW9wcy9jb250cmFjdC5hbGdvLnRzOjpDcnlwdG9PcHNDb250cmFjdC52ZXJpZnlfc2hhM18yNTYoYTogYnl0ZXMsIHBhZF9zaXplOiB1aW50NjQpIC0+IGJ5dGVzOgp2ZXJpZnlfc2hhM18yNTY6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvY3J5cHRvLW9wcy9jb250cmFjdC5hbGdvLnRzOjEyLTEzCiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgLy8gcHVibGljIHZlcmlmeV9zaGEzXzI1NihhOiBieXRlcywgcGFkX3NpemU6IHVpbnQ2NCk6IGJ5dGVzIHsKICAgIHByb3RvIDIgMQogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2NyeXB0by1vcHMvY29udHJhY3QuYWxnby50czoxNAogICAgLy8gY29uc3QgcGFkZGVkQSA9IG9wLmJ6ZXJvKHBhZF9zaXplKS5jb25jYXQoYSkKICAgIGZyYW1lX2RpZyAtMQogICAgYnplcm8KICAgIGZyYW1lX2RpZyAtMgogICAgY29uY2F0CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvY3J5cHRvLW9wcy9jb250cmFjdC5hbGdvLnRzOjE1CiAgICAvLyBjb25zdCByZXN1bHQgPSBvcC5zaGEzXzI1NihwYWRkZWRBKQogICAgc2hhM18yNTYKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9jcnlwdG8tb3BzL2NvbnRyYWN0LmFsZ28udHM6MTYKICAgIC8vIHJldHVybiByZXN1bHQKICAgIHJldHN1YgoKCi8vIHRlc3RzL2FydGlmYWN0cy9jcnlwdG8tb3BzL2NvbnRyYWN0LmFsZ28udHM6OkNyeXB0b09wc0NvbnRyYWN0LnZlcmlmeV9rZWNjYWtfMjU2KGE6IGJ5dGVzLCBwYWRfc2l6ZTogdWludDY0KSAtPiBieXRlczoKdmVyaWZ5X2tlY2Nha18yNTY6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvY3J5cHRvLW9wcy9jb250cmFjdC5hbGdvLnRzOjE5LTIwCiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgLy8gcHVibGljIHZlcmlmeV9rZWNjYWtfMjU2KGE6IGJ5dGVzLCBwYWRfc2l6ZTogdWludDY0KTogYnl0ZXMgewogICAgcHJvdG8gMiAxCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvY3J5cHRvLW9wcy9jb250cmFjdC5hbGdvLnRzOjIxCiAgICAvLyBjb25zdCBwYWRkZWRBID0gb3AuYnplcm8ocGFkX3NpemUpLmNvbmNhdChhKQogICAgZnJhbWVfZGlnIC0xCiAgICBiemVybwogICAgZnJhbWVfZGlnIC0yCiAgICBjb25jYXQKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9jcnlwdG8tb3BzL2NvbnRyYWN0LmFsZ28udHM6MjIKICAgIC8vIGNvbnN0IHJlc3VsdCA9IG9wLmtlY2NhazI1NihwYWRkZWRBKQogICAga2VjY2FrMjU2CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvY3J5cHRvLW9wcy9jb250cmFjdC5hbGdvLnRzOjIzCiAgICAvLyByZXR1cm4gcmVzdWx0CiAgICByZXRzdWIKCgovLyB0ZXN0cy9hcnRpZmFjdHMvY3J5cHRvLW9wcy9jb250cmFjdC5hbGdvLnRzOjpDcnlwdG9PcHNDb250cmFjdC52ZXJpZnlfc2hhNTEyXzI1NihhOiBieXRlcywgcGFkX3NpemU6IHVpbnQ2NCkgLT4gYnl0ZXM6CnZlcmlmeV9zaGE1MTJfMjU2OgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2NyeXB0by1vcHMvY29udHJhY3QuYWxnby50czoyNi0yNwogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIC8vIHB1YmxpYyB2ZXJpZnlfc2hhNTEyXzI1NihhOiBieXRlcywgcGFkX3NpemU6IHVpbnQ2NCk6IGJ5dGVzIHsKICAgIHByb3RvIDIgMQogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2NyeXB0by1vcHMvY29udHJhY3QuYWxnby50czoyOAogICAgLy8gY29uc3QgcGFkZGVkQSA9IG9wLmJ6ZXJvKHBhZF9zaXplKS5jb25jYXQoYSkKICAgIGZyYW1lX2RpZyAtMQogICAgYnplcm8KICAgIGZyYW1lX2RpZyAtMgogICAgY29uY2F0CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvY3J5cHRvLW9wcy9jb250cmFjdC5hbGdvLnRzOjI5CiAgICAvLyBjb25zdCByZXN1bHQgPSBvcC5zaGE1MTJfMjU2KHBhZGRlZEEpCiAgICBzaGE1MTJfMjU2CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvY3J5cHRvLW9wcy9jb250cmFjdC5hbGdvLnRzOjMwCiAgICAvLyByZXR1cm4gcmVzdWx0CiAgICByZXRzdWIKCgovLyB0ZXN0cy9hcnRpZmFjdHMvY3J5cHRvLW9wcy9jb250cmFjdC5hbGdvLnRzOjpDcnlwdG9PcHNDb250cmFjdC52ZXJpZnlfZWQyNTUxOXZlcmlmeShhOiBieXRlcywgYjogYnl0ZXMsIGM6IGJ5dGVzKSAtPiBieXRlczoKdmVyaWZ5X2VkMjU1MTl2ZXJpZnk6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvY3J5cHRvLW9wcy9jb250cmFjdC5hbGdvLnRzOjMzLTM0CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgLy8gcHVibGljIHZlcmlmeV9lZDI1NTE5dmVyaWZ5KGE6IGJ5dGVzLCBiOiBieXRlcywgYzogYnl0ZXMpOiBCb29sIHsKICAgIHByb3RvIDMgMQogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2NyeXB0by1vcHMvY29udHJhY3QuYWxnby50czozNQogICAgLy8gZW5zdXJlQnVkZ2V0KDE5MDAsIE9wVXBGZWVTb3VyY2UuR3JvdXBDcmVkaXQpCiAgICBwdXNoaW50IDE5MDAgLy8gMTkwMAogICAgaW50Y18wIC8vIDAKICAgIGNhbGxzdWIgZW5zdXJlX2J1ZGdldAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2NyeXB0by1vcHMvY29udHJhY3QuYWxnby50czozNgogICAgLy8gY29uc3QgcmVzdWx0ID0gb3AuZWQyNTUxOXZlcmlmeShhLCBiLCBjKQogICAgZnJhbWVfZGlnIC0zCiAgICBmcmFtZV9kaWcgLTIKICAgIGZyYW1lX2RpZyAtMQogICAgZWQyNTUxOXZlcmlmeQogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2NyeXB0by1vcHMvY29udHJhY3QuYWxnby50czozNwogICAgLy8gcmV0dXJuIG5ldyBCb29sKHJlc3VsdCkKICAgIGJ5dGVjXzEgLy8gMHgwMAogICAgaW50Y18wIC8vIDAKICAgIHVuY292ZXIgMgogICAgc2V0Yml0CiAgICByZXRzdWIKCgovLyB0ZXN0cy9hcnRpZmFjdHMvY3J5cHRvLW9wcy9jb250cmFjdC5hbGdvLnRzOjpDcnlwdG9PcHNDb250cmFjdC52ZXJpZnlfZWQyNTUxOXZlcmlmeV9iYXJlKGE6IGJ5dGVzLCBiOiBieXRlcywgYzogYnl0ZXMpIC0+IGJ5dGVzOgp2ZXJpZnlfZWQyNTUxOXZlcmlmeV9iYXJlOgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2NyeXB0by1vcHMvY29udHJhY3QuYWxnby50czo0MC00MQogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIC8vIHB1YmxpYyB2ZXJpZnlfZWQyNTUxOXZlcmlmeV9iYXJlKGE6IGJ5dGVzLCBiOiBieXRlcywgYzogYnl0ZXMpOiBCb29sIHsKICAgIHByb3RvIDMgMQogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2NyeXB0by1vcHMvY29udHJhY3QuYWxnby50czo0MgogICAgLy8gZW5zdXJlQnVkZ2V0KDIwMDAwMDAwMCwgT3BVcEZlZVNvdXJjZS5Hcm91cENyZWRpdCkKICAgIHB1c2hpbnQgMjAwMDAwMDAwIC8vIDIwMDAwMDAwMAogICAgaW50Y18wIC8vIDAKICAgIGNhbGxzdWIgZW5zdXJlX2J1ZGdldAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2NyeXB0by1vcHMvY29udHJhY3QuYWxnby50czo0MwogICAgLy8gY29uc3QgcmVzdWx0ID0gb3AuZWQyNTUxOXZlcmlmeUJhcmUoYSwgYiwgYykKICAgIGZyYW1lX2RpZyAtMwogICAgZnJhbWVfZGlnIC0yCiAgICBmcmFtZV9kaWcgLTEKICAgIGVkMjU1MTl2ZXJpZnlfYmFyZQogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2NyeXB0by1vcHMvY29udHJhY3QuYWxnby50czo0NAogICAgLy8gcmV0dXJuIG5ldyBCb29sKHJlc3VsdCkKICAgIGJ5dGVjXzEgLy8gMHgwMAogICAgaW50Y18wIC8vIDAKICAgIHVuY292ZXIgMgogICAgc2V0Yml0CiAgICByZXRzdWIKCgovLyB0ZXN0cy9hcnRpZmFjdHMvY3J5cHRvLW9wcy9jb250cmFjdC5hbGdvLnRzOjpDcnlwdG9PcHNDb250cmFjdC52ZXJpZnlfZWNkc2FfdmVyaWZ5X2sxKGE6IGJ5dGVzLCBiOiBieXRlcywgYzogYnl0ZXMsIGQ6IGJ5dGVzLCBlOiBieXRlcykgLT4gdWludDY0Ogp2ZXJpZnlfZWNkc2FfdmVyaWZ5X2sxOgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2NyeXB0by1vcHMvY29udHJhY3QuYWxnby50czo0Ny00OAogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIC8vIHB1YmxpYyB2ZXJpZnlfZWNkc2FfdmVyaWZ5X2sxKGE6IGJ5dGVzLCBiOiBieXRlcywgYzogYnl0ZXMsIGQ6IGJ5dGVzLCBlOiBieXRlcyk6IGJvb2xlYW4gewogICAgcHJvdG8gNSAxCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvY3J5cHRvLW9wcy9jb250cmFjdC5hbGdvLnRzOjQ5CiAgICAvLyBlbnN1cmVCdWRnZXQoMzAwMCwgT3BVcEZlZVNvdXJjZS5Hcm91cENyZWRpdCkKICAgIGludGNfMyAvLyAzMDAwCiAgICBpbnRjXzAgLy8gMAogICAgY2FsbHN1YiBlbnN1cmVfYnVkZ2V0CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvY3J5cHRvLW9wcy9jb250cmFjdC5hbGdvLnRzOjUwCiAgICAvLyBjb25zdCByZXN1bHRfazEgPSBvcC5lY2RzYVZlcmlmeShFY2RzYS5TZWNwMjU2azEsIGEsIGIsIGMsIGQsIGUpCiAgICBmcmFtZV9kaWcgLTUKICAgIGZyYW1lX2RpZyAtNAogICAgZnJhbWVfZGlnIC0zCiAgICBmcmFtZV9kaWcgLTIKICAgIGZyYW1lX2RpZyAtMQogICAgZWNkc2FfdmVyaWZ5IFNlY3AyNTZrMQogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2NyeXB0by1vcHMvY29udHJhY3QuYWxnby50czo1MQogICAgLy8gcmV0dXJuIHJlc3VsdF9rMQogICAgcmV0c3ViCgoKLy8gdGVzdHMvYXJ0aWZhY3RzL2NyeXB0by1vcHMvY29udHJhY3QuYWxnby50czo6Q3J5cHRvT3BzQ29udHJhY3QudmVyaWZ5X2VjZHNhX3ZlcmlmeV9yMShhOiBieXRlcywgYjogYnl0ZXMsIGM6IGJ5dGVzLCBkOiBieXRlcywgZTogYnl0ZXMpIC0+IHVpbnQ2NDoKdmVyaWZ5X2VjZHNhX3ZlcmlmeV9yMToKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9jcnlwdG8tb3BzL2NvbnRyYWN0LmFsZ28udHM6NTQtNTUKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICAvLyBwdWJsaWMgdmVyaWZ5X2VjZHNhX3ZlcmlmeV9yMShhOiBieXRlcywgYjogYnl0ZXMsIGM6IGJ5dGVzLCBkOiBieXRlcywgZTogYnl0ZXMpOiBib29sZWFuIHsKICAgIHByb3RvIDUgMQogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2NyeXB0by1vcHMvY29udHJhY3QuYWxnby50czo1NgogICAgLy8gZW5zdXJlQnVkZ2V0KDMwMDAsIE9wVXBGZWVTb3VyY2UuR3JvdXBDcmVkaXQpCiAgICBpbnRjXzMgLy8gMzAwMAogICAgaW50Y18wIC8vIDAKICAgIGNhbGxzdWIgZW5zdXJlX2J1ZGdldAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2NyeXB0by1vcHMvY29udHJhY3QuYWxnby50czo1NwogICAgLy8gY29uc3QgcmVzdWx0X3IxID0gb3AuZWNkc2FWZXJpZnkoRWNkc2EuU2VjcDI1NnIxLCBhLCBiLCBjLCBkLCBlKQogICAgZnJhbWVfZGlnIC01CiAgICBmcmFtZV9kaWcgLTQKICAgIGZyYW1lX2RpZyAtMwogICAgZnJhbWVfZGlnIC0yCiAgICBmcmFtZV9kaWcgLTEKICAgIGVjZHNhX3ZlcmlmeSBTZWNwMjU2cjEKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9jcnlwdG8tb3BzL2NvbnRyYWN0LmFsZ28udHM6NTgKICAgIC8vIHJldHVybiByZXN1bHRfcjEKICAgIHJldHN1YgoKCi8vIHRlc3RzL2FydGlmYWN0cy9jcnlwdG8tb3BzL2NvbnRyYWN0LmFsZ28udHM6OkNyeXB0b09wc0NvbnRyYWN0LnZlcmlmeV9lY2RzYV9yZWNvdmVyX2sxKGE6IGJ5dGVzLCBiOiB1aW50NjQsIGM6IGJ5dGVzLCBkOiBieXRlcykgLT4gYnl0ZXMsIGJ5dGVzOgp2ZXJpZnlfZWNkc2FfcmVjb3Zlcl9rMToKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9jcnlwdG8tb3BzL2NvbnRyYWN0LmFsZ28udHM6NjEtNjIKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICAvLyBwdWJsaWMgdmVyaWZ5X2VjZHNhX3JlY292ZXJfazEoYTogYnl0ZXMsIGI6IHVpbnQ2NCwgYzogYnl0ZXMsIGQ6IGJ5dGVzKTogcmVhZG9ubHkgW2J5dGVzLCBieXRlc10gewogICAgcHJvdG8gNCAyCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvY3J5cHRvLW9wcy9jb250cmFjdC5hbGdvLnRzOjYzCiAgICAvLyBlbnN1cmVCdWRnZXQoMzAwMCwgT3BVcEZlZVNvdXJjZS5Hcm91cENyZWRpdCkKICAgIGludGNfMyAvLyAzMDAwCiAgICBpbnRjXzAgLy8gMAogICAgY2FsbHN1YiBlbnN1cmVfYnVkZ2V0CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvY3J5cHRvLW9wcy9jb250cmFjdC5hbGdvLnRzOjY0CiAgICAvLyByZXR1cm4gb3AuZWNkc2FQa1JlY292ZXIoRWNkc2EuU2VjcDI1NmsxLCBhLCBiLCBjLCBkKQogICAgZnJhbWVfZGlnIC00CiAgICBmcmFtZV9kaWcgLTMKICAgIGZyYW1lX2RpZyAtMgogICAgZnJhbWVfZGlnIC0xCiAgICBlY2RzYV9wa19yZWNvdmVyIFNlY3AyNTZrMQogICAgcmV0c3ViCgoKLy8gdGVzdHMvYXJ0aWZhY3RzL2NyeXB0by1vcHMvY29udHJhY3QuYWxnby50czo6Q3J5cHRvT3BzQ29udHJhY3QudmVyaWZ5X2VjZHNhX3JlY292ZXJfcjEoYTogYnl0ZXMsIGI6IHVpbnQ2NCwgYzogYnl0ZXMsIGQ6IGJ5dGVzKSAtPiBieXRlcywgYnl0ZXM6CnZlcmlmeV9lY2RzYV9yZWNvdmVyX3IxOgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2NyeXB0by1vcHMvY29udHJhY3QuYWxnby50czo2Ny02OAogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIC8vIHB1YmxpYyB2ZXJpZnlfZWNkc2FfcmVjb3Zlcl9yMShhOiBieXRlcywgYjogdWludDY0LCBjOiBieXRlcywgZDogYnl0ZXMpOiByZWFkb25seSBbYnl0ZXMsIGJ5dGVzXSB7CiAgICBwcm90byA0IDIKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9jcnlwdG8tb3BzL2NvbnRyYWN0LmFsZ28udHM6NzIKICAgIC8vIGVuc3VyZUJ1ZGdldCgzMDAwLCBPcFVwRmVlU291cmNlLkdyb3VwQ3JlZGl0KQogICAgaW50Y18zIC8vIDMwMDAKICAgIGludGNfMCAvLyAwCiAgICBjYWxsc3ViIGVuc3VyZV9idWRnZXQKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9jcnlwdG8tb3BzL2NvbnRyYWN0LmFsZ28udHM6NzMKICAgIC8vIHJldHVybiBvcC5lY2RzYVBrUmVjb3ZlcihFY2RzYS5TZWNwMjU2cjEsIGEsIGIsIGMsIGQpCiAgICBmcmFtZV9kaWcgLTQKICAgIGZyYW1lX2RpZyAtMwogICAgZnJhbWVfZGlnIC0yCiAgICBmcmFtZV9kaWcgLTEKICAgIGVjZHNhX3BrX3JlY292ZXIgU2VjcDI1NnIxCiAgICByZXRzdWIKCgovLyB0ZXN0cy9hcnRpZmFjdHMvY3J5cHRvLW9wcy9jb250cmFjdC5hbGdvLnRzOjpDcnlwdG9PcHNDb250cmFjdC52ZXJpZnlfZWNkc2FfZGVjb21wcmVzc19rMShhOiBieXRlcykgLT4gYnl0ZXMsIGJ5dGVzOgp2ZXJpZnlfZWNkc2FfZGVjb21wcmVzc19rMToKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9jcnlwdG8tb3BzL2NvbnRyYWN0LmFsZ28udHM6NzYtNzcKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICAvLyBwdWJsaWMgdmVyaWZ5X2VjZHNhX2RlY29tcHJlc3NfazEoYTogYnl0ZXMpOiByZWFkb25seSBbYnl0ZXMsIGJ5dGVzXSB7CiAgICBwcm90byAxIDIKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9jcnlwdG8tb3BzL2NvbnRyYWN0LmFsZ28udHM6NzgKICAgIC8vIGVuc3VyZUJ1ZGdldCg3MDAsIE9wVXBGZWVTb3VyY2UuR3JvdXBDcmVkaXQpCiAgICBwdXNoaW50IDcwMCAvLyA3MDAKICAgIGludGNfMCAvLyAwCiAgICBjYWxsc3ViIGVuc3VyZV9idWRnZXQKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9jcnlwdG8tb3BzL2NvbnRyYWN0LmFsZ28udHM6NzkKICAgIC8vIHJldHVybiBvcC5lY2RzYVBrRGVjb21wcmVzcyhFY2RzYS5TZWNwMjU2azEsIGEpCiAgICBmcmFtZV9kaWcgLTEKICAgIGVjZHNhX3BrX2RlY29tcHJlc3MgU2VjcDI1NmsxCiAgICByZXRzdWIKCgovLyB0ZXN0cy9hcnRpZmFjdHMvY3J5cHRvLW9wcy9jb250cmFjdC5hbGdvLnRzOjpDcnlwdG9PcHNDb250cmFjdC52ZXJpZnlfZWNkc2FfZGVjb21wcmVzc19yMShhOiBieXRlcykgLT4gYnl0ZXMsIGJ5dGVzOgp2ZXJpZnlfZWNkc2FfZGVjb21wcmVzc19yMToKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9jcnlwdG8tb3BzL2NvbnRyYWN0LmFsZ28udHM6ODItODMKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICAvLyBwdWJsaWMgdmVyaWZ5X2VjZHNhX2RlY29tcHJlc3NfcjEoYTogYnl0ZXMpOiByZWFkb25seSBbYnl0ZXMsIGJ5dGVzXSB7CiAgICBwcm90byAxIDIKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9jcnlwdG8tb3BzL2NvbnRyYWN0LmFsZ28udHM6ODQKICAgIC8vIGVuc3VyZUJ1ZGdldCg3MDAsIE9wVXBGZWVTb3VyY2UuR3JvdXBDcmVkaXQpCiAgICBwdXNoaW50IDcwMCAvLyA3MDAKICAgIGludGNfMCAvLyAwCiAgICBjYWxsc3ViIGVuc3VyZV9idWRnZXQKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9jcnlwdG8tb3BzL2NvbnRyYWN0LmFsZ28udHM6ODUKICAgIC8vIHJldHVybiBvcC5lY2RzYVBrRGVjb21wcmVzcyhFY2RzYS5TZWNwMjU2cjEsIGEpCiAgICBmcmFtZV9kaWcgLTEKICAgIGVjZHNhX3BrX2RlY29tcHJlc3MgU2VjcDI1NnIxCiAgICByZXRzdWIKCgovLyB0ZXN0cy9hcnRpZmFjdHMvY3J5cHRvLW9wcy9jb250cmFjdC5hbGdvLnRzOjpDcnlwdG9PcHNDb250cmFjdC52ZXJpZnlfdnJmX3ZlcmlmeShhOiBieXRlcywgYjogYnl0ZXMsIGM6IGJ5dGVzKSAtPiBieXRlcywgdWludDY0Ogp2ZXJpZnlfdnJmX3ZlcmlmeToKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9jcnlwdG8tb3BzL2NvbnRyYWN0LmFsZ28udHM6ODgtODkKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICAvLyBwdWJsaWMgdmVyaWZ5X3ZyZl92ZXJpZnkoYTogYnl0ZXMsIGI6IGJ5dGVzLCBjOiBieXRlcyk6IHJlYWRvbmx5IFtieXRlcywgYm9vbGVhbl0gewogICAgcHJvdG8gMyAyCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvY3J5cHRvLW9wcy9jb250cmFjdC5hbGdvLnRzOjkwCiAgICAvLyBlbnN1cmVCdWRnZXQoNTcwMCwgT3BVcEZlZVNvdXJjZS5Hcm91cENyZWRpdCkKICAgIHB1c2hpbnQgNTcwMCAvLyA1NzAwCiAgICBpbnRjXzAgLy8gMAogICAgY2FsbHN1YiBlbnN1cmVfYnVkZ2V0CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvY3J5cHRvLW9wcy9jb250cmFjdC5hbGdvLnRzOjkxCiAgICAvLyBjb25zdCByZXN1bHQgPSBvcC52cmZWZXJpZnkoVnJmVmVyaWZ5LlZyZkFsZ29yYW5kLCBhLCBiLCBjKQogICAgZnJhbWVfZGlnIC0zCiAgICBmcmFtZV9kaWcgLTIKICAgIGZyYW1lX2RpZyAtMQogICAgdnJmX3ZlcmlmeSBWcmZBbGdvcmFuZAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2NyeXB0by1vcHMvY29udHJhY3QuYWxnby50czo5MgogICAgLy8gcmV0dXJuIHJlc3VsdAogICAgcmV0c3ViCgoKLy8gX3B1eWFfbGliLnV0aWwuZW5zdXJlX2J1ZGdldChyZXF1aXJlZF9idWRnZXQ6IHVpbnQ2NCwgZmVlX3NvdXJjZTogdWludDY0KSAtPiB2b2lkOgplbnN1cmVfYnVkZ2V0OgogICAgcHJvdG8gMiAwCiAgICBmcmFtZV9kaWcgLTIKICAgIHB1c2hpbnQgMTAgLy8gMTAKICAgICsKCmVuc3VyZV9idWRnZXRfd2hpbGVfdG9wQDE6CiAgICBmcmFtZV9kaWcgMAogICAgZ2xvYmFsIE9wY29kZUJ1ZGdldAogICAgPgogICAgYnogZW5zdXJlX2J1ZGdldF9hZnRlcl93aGlsZUA3CiAgICBpdHhuX2JlZ2luCiAgICBwdXNoaW50IDYgLy8gYXBwbAogICAgaXR4bl9maWVsZCBUeXBlRW51bQogICAgcHVzaGludCA1IC8vIERlbGV0ZUFwcGxpY2F0aW9uCiAgICBpdHhuX2ZpZWxkIE9uQ29tcGxldGlvbgogICAgYnl0ZWNfMyAvLyAweDA2ODEwMQogICAgaXR4bl9maWVsZCBBcHByb3ZhbFByb2dyYW0KICAgIGJ5dGVjXzMgLy8gMHgwNjgxMDEKICAgIGl0eG5fZmllbGQgQ2xlYXJTdGF0ZVByb2dyYW0KICAgIGZyYW1lX2RpZyAtMQogICAgc3dpdGNoIGVuc3VyZV9idWRnZXRfc3dpdGNoX2Nhc2VfMEAzIGVuc3VyZV9idWRnZXRfc3dpdGNoX2Nhc2VfMUA0CiAgICBiIGVuc3VyZV9idWRnZXRfc3dpdGNoX2Nhc2VfbmV4dEA2CgplbnN1cmVfYnVkZ2V0X3N3aXRjaF9jYXNlXzBAMzoKICAgIGludGNfMCAvLyAwCiAgICBpdHhuX2ZpZWxkIEZlZQogICAgYiBlbnN1cmVfYnVkZ2V0X3N3aXRjaF9jYXNlX25leHRANgoKZW5zdXJlX2J1ZGdldF9zd2l0Y2hfY2FzZV8xQDQ6CiAgICBnbG9iYWwgTWluVHhuRmVlCiAgICBpdHhuX2ZpZWxkIEZlZQoKZW5zdXJlX2J1ZGdldF9zd2l0Y2hfY2FzZV9uZXh0QDY6CiAgICBpdHhuX3N1Ym1pdAogICAgYiBlbnN1cmVfYnVkZ2V0X3doaWxlX3RvcEAxCgplbnN1cmVfYnVkZ2V0X2FmdGVyX3doaWxlQDc6CiAgICByZXRzdWIK", + "clear": "I3ByYWdtYSB2ZXJzaW9uIDEwCgp0ZXN0cy9hcnRpZmFjdHMvY3J5cHRvLW9wcy9jb250cmFjdC5hbGdvLnRzOjpDcnlwdG9PcHNDb250cmFjdC5jbGVhclN0YXRlUHJvZ3JhbToKICAgIHB1c2hpbnQgMSAvLyAxCiAgICByZXR1cm4K" + }, + "events": [], + "templateVariables": {} +} \ No newline at end of file diff --git a/tests/avm-invoker.ts b/tests/avm-invoker.ts index 4c6713a..b54e858 100644 --- a/tests/avm-invoker.ts +++ b/tests/avm-invoker.ts @@ -1,15 +1,16 @@ import * as algokit from '@algorandfoundation/algokit-utils' import { AlgoAmount } from '@algorandfoundation/algokit-utils/types/amount' -import { ABIAppCallArg, AppCallTransactionResult } from '@algorandfoundation/algokit-utils/types/app' -import { ApplicationClient } from '@algorandfoundation/algokit-utils/types/app-client' +import { AppClient } from '@algorandfoundation/algokit-utils/types/app-client' import { AppSpec } from '@algorandfoundation/algokit-utils/types/app-spec' +import { AssetCreateParams } from '@algorandfoundation/algokit-utils/types/composer' import { KmdAccountManager } from '@algorandfoundation/algokit-utils/types/kmd-account-manager' import { nullLogger } from '@algorandfoundation/algokit-utils/types/logging' -import { SendTransactionFrom, SendTransactionParams } from '@algorandfoundation/algokit-utils/types/transaction' import { Account, Bytes, internal, uint64 } from '@algorandfoundation/algorand-typescript' -import { ABIValue, generateAccount } from 'algosdk' import { randomUUID } from 'crypto' -import { asUint64, getRandomNumber, Lazy } from '../src/util' +import { Mutable } from '../src/typescript-helpers' +import { asUint64, getRandomBigInt, getRandomNumber, Lazy } from '../src/util' + +export type ABIValue = boolean | number | bigint | string | Uint8Array | ABIValue[] algokit.Config.configure({ logger: nullLogger }) @@ -23,52 +24,56 @@ export const getAlgorandAppClient = async (appSpec: AppSpec) => { } export const getAlgorandAppClientWithApp = async (appSpec: AppSpec) => { - const client = algorandClient() - const defaultSigner = await client.account.kmd.getLocalNetDispenserAccount() - const appClient = algokit.getAppClient({ app: appSpec, resolveBy: 'id', id: 0, sender: defaultSigner.account }, client.client.algod) - const app = await appClient.create({ note: randomUUID() }) - return [appClient, app] as const + const algorand = algorandClient() + const defaultSigner = await algorand.account.kmd.getLocalNetDispenserAccount() + const appClient = algorand.client.getAppFactory({ + appSpec, + defaultSigner: defaultSigner.signer, + defaultSender: defaultSigner.account.sender.addr, + }) + const app = await appClient.deploy({ appName: `${appSpec.contract.name}${randomUUID()}`, createParams: { extraProgramPages: undefined } }) + + return [app.appClient, app.result] as const } const invokeMethod = async ( - appClient: ApplicationClient, + appClient: AppClient, method: string, - sendParams?: SendTransactionParams, - ...methodArgs: ABIAppCallArg[] -): Promise => { - const response = await appClient.call({ method, methodArgs, note: randomUUID(), sendParams }) - - if (response.return?.decodeError) { - throw response.return.decodeError - } + sendParams?: Partial[0]>, + ...methodArgs: ABIValue[] +): ReturnType => { + const response = await appClient.send.call({ method, args: methodArgs, note: randomUUID(), ...sendParams }) return response } export const getAvmResult = async ( - { appClient, sendParams }: { appClient: ApplicationClient; sendParams?: SendTransactionParams }, + { appClient, sendParams }: { appClient: AppClient; sendParams?: Partial[0]> }, method: string, - ...methodArgs: ABIAppCallArg[] + ...methodArgs: ABIValue[] ): Promise => { const result = await invokeMethod(appClient, method, sendParams, ...methodArgs) - return result?.return?.returnValue as TResult + if (result.returns?.at(-1)?.decodeError) { + throw result.returns.at(-1)!.decodeError + } + return result?.return?.valueOf() as TResult } export const getAvmResultLog = async ( - { appClient, sendParams }: { appClient: ApplicationClient; sendParams?: SendTransactionParams }, + { appClient, sendParams }: { appClient: AppClient; sendParams?: Partial[0]> }, method: string, - ...methodArgs: ABIAppCallArg[] + ...methodArgs: ABIValue[] ): Promise => { const result = await invokeMethod(appClient, method, sendParams, ...methodArgs) return result?.confirmation?.logs } export const getAvmResultRaw = async ( - { appClient, sendParams }: { appClient: ApplicationClient; sendParams?: SendTransactionParams }, + { appClient, sendParams }: { appClient: AppClient; sendParams?: Partial[0]> }, method: string, - ...methodArgs: ABIAppCallArg[] + ...methodArgs: ABIValue[] ): Promise => { const result = await invokeMethod(appClient, method, sendParams, ...methodArgs) - return result?.return?.rawReturnValue + return result?.returns?.at(-1)?.rawReturnValue } export const getLocalNetDefaultAccount = () => { @@ -77,66 +82,49 @@ export const getLocalNetDefaultAccount = () => { return kmdAccountManager.getLocalNetDispenserAccount() } +export const generateAVMTestAccount = async (): Promise> => { + const client = algorandClient() + const account = client.account.random() + await client.account.ensureFundedFromEnvironment(account.addr, AlgoAmount.MicroAlgos(INITIAL_BALANCE_MICRO_ALGOS)) + return account +} + export const generateTestAccount = async (): Promise => { - const account = generateAccount() - - await algokit.ensureFunded( - { - accountToFund: account, - minSpendingBalance: AlgoAmount.MicroAlgos(INITIAL_BALANCE_MICRO_ALGOS), - }, - algorandClient().client.algod, - ) - return Account(Bytes.fromBase32(account.addr)) + // const account = generateAccount() + const account = await generateAVMTestAccount() + return Account(Bytes.fromBase32(account.addr.toString())) } -export const generateTestAsset = async (fields: { - creator: SendTransactionFrom - total?: number | bigint - decimals?: number - name?: string - unit?: string - url?: string - metadataHash?: string - manager?: SendTransactionFrom - reserveAccount?: SendTransactionFrom - freezeAccount?: SendTransactionFrom - clawbackAccount?: SendTransactionFrom - frozenByDefault?: boolean -}): Promise => { - const client = algorandClient() +export const generateTestAsset = async (fields: Mutable): Promise => { if (fields.total === undefined) { - fields.total = getRandomNumber(20, 120) + fields.total = getRandomBigInt(20, 120) } - if (fields.name === undefined) { - fields.name = `ASA ${getRandomNumber(1, 100)}_${getRandomNumber(1, 100)}_${fields.total}` + if (fields.assetName === undefined) { + fields.assetName = `ASA ${getRandomNumber(1, 100)}_${getRandomNumber(1, 100)}_${fields.total}` } if (fields.decimals === undefined) { fields.decimals = 0 } - const params = await client.getSuggestedParams() - const x = await algokit.createAsset( - { - creator: fields.creator, - total: BigInt(fields.total) * 10n ** BigInt(fields.decimals), - decimals: fields.decimals, - name: fields.name, - unit: fields.unit ?? '', - url: fields.url ?? 'https://algorand.co', - metadataHash: fields.metadataHash, - manager: fields.manager, - reserveAccount: fields.reserveAccount, - freezeAccount: fields.freezeAccount, - clawbackAccount: fields.clawbackAccount, - frozenByDefault: fields.frozenByDefault ?? false, - transactionParams: params, - note: randomUUID(), - }, - client.client.algod, - ) - if (x.confirmation === undefined) { + + const client = algorandClient() + const x = await client.send.assetCreate({ + sender: fields.sender, + total: BigInt(fields.total) * 10n ** BigInt(fields.decimals), + decimals: fields.decimals, + assetName: fields.assetName, + unitName: fields.unitName ?? '', + url: fields.url ?? 'https://algorand.co', + metadataHash: fields.metadataHash, + manager: fields.manager, + reserve: fields.reserve, + freeze: fields.freeze, + clawback: fields.clawback, + defaultFrozen: fields.defaultFrozen ?? false, + note: randomUUID(), + }) + if (x.confirmation === undefined || x.confirmation.assetIndex === undefined) { internal.errors.internalError('Failed to create asset') } return asUint64(x.confirmation.assetIndex) diff --git a/tests/crypto-op-codes.spec.ts b/tests/crypto-op-codes.spec.ts index 09a4995..b6d98f1 100644 --- a/tests/crypto-op-codes.spec.ts +++ b/tests/crypto-op-codes.spec.ts @@ -1,16 +1,17 @@ import { AlgoAmount } from '@algorandfoundation/algokit-utils/types/amount' import { AppSpec } from '@algorandfoundation/algokit-utils/types/app-spec' import { Bytes, Ec, Ecdsa, internal, uint64, VrfVerify } from '@algorandfoundation/algorand-typescript' -import algosdk from 'algosdk' import { ec } from 'elliptic' import { keccak256 as js_keccak256 } from 'js-sha3' +import { sha512_256 as js_sha512_256 } from 'js-sha512' import nacl from 'tweetnacl' import { afterEach, describe, expect, it, Mock, test, vi } from 'vitest' import { TestExecutionContext } from '../src' -import { MAX_BYTES_SIZE } from '../src/constants' +import { LOGIC_DATA_PREFIX, MAX_BYTES_SIZE, PROGRAM_TAG } from '../src/constants' import * as op from '../src/impl/crypto' +import { conactUint8Arrays, decodePublicKey } from '../src/util' import appSpecJson from './artifacts/crypto-ops/data/CryptoOpsContract.arc32.json' -import { getAlgorandAppClientWithApp, getAvmResult } from './avm-invoker' +import { generateAVMTestAccount, getAlgorandAppClientWithApp, getAvmResult } from './avm-invoker' import { asUint8Array, getPaddedBytes } from './util' const MAX_ARG_LEN = 2048 @@ -99,7 +100,7 @@ describe('crypto op codes', async () => { const signature = nacl.sign.detached(asUint8Array(message), keyPair.secretKey) const avmResult = await getAvmResult( - { appClient, sendParams: { fee: AlgoAmount.Algos(2000) } }, + { appClient, sendParams: { staticFee: AlgoAmount.Algos(2000) } }, 'verify_ed25519verify_bare', asUint8Array(message), signature, @@ -112,18 +113,22 @@ describe('crypto op codes', async () => { describe('ed25519verify', async () => { it('should return true for valid signature', async () => { - const approval = app.compiledApproval + const approval = app.compiledApproval! const appCallTxn = ctx.any.txn.applicationCall({ approvalProgram: Bytes(approval.compiledBase64ToBytes), }) const message = Bytes('Test message for ed25519 verification') - const account = algosdk.generateAccount() - const publicKey = algosdk.decodeAddress(account.addr).publicKey - const signature = algosdk.tealSignFromProgram(account.sk, asUint8Array(message), approval.compiledBase64ToBytes) + const account = await generateAVMTestAccount() + const publicKey = decodePublicKey(account.addr.toString()) + const logicSig = conactUint8Arrays(asUint8Array(PROGRAM_TAG), approval.compiledBase64ToBytes) + const logicSigAddress = js_sha512_256.array(logicSig) + const parts = conactUint8Arrays(new Uint8Array(logicSigAddress), asUint8Array(message)) + const toBeSigned = conactUint8Arrays(asUint8Array(LOGIC_DATA_PREFIX), parts) + const signature = nacl.sign.detached(toBeSigned, account.account.sk) const avmResult = await getAvmResult( - { appClient, sendParams: { fee: AlgoAmount.Algos(2000) } }, + { appClient, sendParams: { staticFee: AlgoAmount.Algos(2000) } }, 'verify_ed25519verify', asUint8Array(message), signature, @@ -149,7 +154,7 @@ describe('crypto op codes', async () => { const pubkeyY = Bytes.fromHex('48d0d337704fe2c675909d2c93f7995e199156f302f63c74a8b96827b28d777b') const avmResult = await getAvmResult( - { appClient, sendParams: { fee: AlgoAmount.Algos(5000) } }, + { appClient, sendParams: { staticFee: AlgoAmount.Algos(5000) } }, 'verify_ecdsa_verify_k1', asUint8Array(messageHash), asUint8Array(sigR), @@ -169,7 +174,7 @@ describe('crypto op codes', async () => { const pubkeyY = Bytes.fromHex('bd437b75d6f1db67155a95a0da4b41f2b6b3dc5d42f7db56238449e404a6c0a3') const avmResult = await getAvmResult( - { appClient, sendParams: { fee: AlgoAmount.Algos(5000) } }, + { appClient, sendParams: { staticFee: AlgoAmount.Algos(5000) } }, 'verify_ecdsa_verify_r1', asUint8Array(messageHash), asUint8Array(sigR), @@ -191,7 +196,7 @@ describe('crypto op codes', async () => { const c = testData.r const d = testData.s const avmResult = await getAvmResult( - { appClient, sendParams: { fee: AlgoAmount.Algos(5000) } }, + { appClient, sendParams: { staticFee: AlgoAmount.Algos(5000) } }, 'verify_ecdsa_recover_k1', asUint8Array(a), b.asNumber(), @@ -212,7 +217,7 @@ describe('crypto op codes', async () => { const d = testData.s await expect( getAvmResult( - { appClient, sendParams: { fee: AlgoAmount.Algos(5000) } }, + { appClient, sendParams: { staticFee: AlgoAmount.Algos(5000) } }, 'verify_ecdsa_recover_r1', asUint8Array(a), b.asNumber(), @@ -233,7 +238,7 @@ describe('crypto op codes', async () => { const keyPair = ecdsa.keyFromPublic(testData.pubkeyX.concat(testData.pubkeyY).asUint8Array()) const pubKeyArray = new Uint8Array(keyPair.getPublic(true, 'array')) const avmResult = await getAvmResult( - { appClient, sendParams: { fee: AlgoAmount.Algos(3000) } }, + { appClient, sendParams: { staticFee: AlgoAmount.Algos(3000) } }, 'verify_ecdsa_decompress_k1', pubKeyArray, ) @@ -257,7 +262,7 @@ describe('crypto op codes', async () => { it('should return mocked result', async () => { const avmResult = await getAvmResult<[Uint8Array, boolean]>( - { appClient, sendParams: { fee: AlgoAmount.Algos(6000) } }, + { appClient, sendParams: { staticFee: AlgoAmount.Algos(6000) } }, 'verify_vrf_verify', asUint8Array(a), asUint8Array(b), diff --git a/tests/global-state-arc4-values.spec.ts b/tests/global-state-arc4-values.spec.ts index e7900d3..9d35afb 100644 --- a/tests/global-state-arc4-values.spec.ts +++ b/tests/global-state-arc4-values.spec.ts @@ -20,7 +20,7 @@ import { asUint8Array } from './util' describe('ARC4 AppGlobal values', async () => { const appClient = await getAlgorandAppClient(arc4AppGlobalAppSpecJson as AppSpec) const localNetAccount = await getLocalNetDefaultAccount() - const defaultSenderAccountAddress = Bytes.fromBase32(localNetAccount.addr) + const defaultSenderAccountAddress = Bytes.fromBase32(localNetAccount.addr.toString()) const ctx = new TestExecutionContext(defaultSenderAccountAddress) afterEach(async () => { diff --git a/tests/local-state-arc4-values.spec.ts b/tests/local-state-arc4-values.spec.ts index c214378..f7d7848 100644 --- a/tests/local-state-arc4-values.spec.ts +++ b/tests/local-state-arc4-values.spec.ts @@ -1,4 +1,4 @@ -import { ApplicationClient } from '@algorandfoundation/algokit-utils/types/app-client' +import { AppClient } from '@algorandfoundation/algokit-utils/types/app-client' import { AppSpec } from '@algorandfoundation/algokit-utils/types/app-spec' import { Account, Bytes } from '@algorandfoundation/algorand-typescript' import { TestExecutionContext } from '@algorandfoundation/algorand-typescript-testing' @@ -12,6 +12,7 @@ import { } from '@algorandfoundation/algorand-typescript-testing/runtime-helpers' import { Address, ARC4Encoded, BitSize, Bool, Byte, DynamicBytes, Str, UintN } from '@algorandfoundation/algorand-typescript/arc4' import { afterEach, describe, expect, test } from 'vitest' +import { OnApplicationComplete } from '../src/constants' import { DeliberateAny } from '../src/typescript-helpers' import { LocalStateContract } from './artifacts/state-ops/contract.algo' import arc4AppLocalAppSpecJson from './artifacts/state-ops/data/LocalStateContract.arc32.json' @@ -20,7 +21,7 @@ import { getAlgorandAppClient, getAvmResult, getLocalNetDefaultAccount } from '. describe('ARC4 AppLocal values', async () => { const appClient = await getAlgorandAppClient(arc4AppLocalAppSpecJson as AppSpec) const localNetAccount = await getLocalNetDefaultAccount() - const defaultSenderAccountAddress = Bytes.fromBase32(localNetAccount.addr) + const defaultSenderAccountAddress = Bytes.fromBase32(localNetAccount.addr.toString()) const ctx = new TestExecutionContext(defaultSenderAccountAddress) await tryOptIn(appClient) @@ -92,16 +93,16 @@ describe('ARC4 AppLocal values', async () => { ]) test.each(testData)('should be able to get arc4 state values', async (data) => { - const avmResult = await getAvmResult({ appClient }, data.methodName, localNetAccount.addr) + const avmResult = await getAvmResult({ appClient }, data.methodName, localNetAccount.addr.toString()) const contract = ctx.contract.create(LocalStateContract) contract.opt_in() const result = contract[data.methodName as keyof LocalStateContract](Account(defaultSenderAccountAddress)) as ARC4Encoded data.assert(result, avmResult) }) }) -const tryOptIn = async (client: ApplicationClient) => { +const tryOptIn = async (client: AppClient) => { try { - await client.optIn({ method: 'opt_in', methodArgs: [] }) + await client.send.call({ method: 'opt_in', args: [], onComplete: OnApplicationComplete.OptInOC }) } catch (e) { if (!(e as DeliberateAny).message.includes('has already opted in to app')) { throw e diff --git a/tests/state-op-codes.spec.ts b/tests/state-op-codes.spec.ts index 8bbeea6..938c6fb 100644 --- a/tests/state-op-codes.spec.ts +++ b/tests/state-op-codes.spec.ts @@ -1,11 +1,11 @@ import { AlgoAmount } from '@algorandfoundation/algokit-utils/types/amount' -import { ApplicationClient } from '@algorandfoundation/algokit-utils/types/app-client' +import { AppClient } from '@algorandfoundation/algokit-utils/types/app-client' import { AppSpec } from '@algorandfoundation/algokit-utils/types/app-spec' import { Account, arc4, bytes, Bytes, internal, op, TransactionType, uint64, Uint64 } from '@algorandfoundation/algorand-typescript' import { DynamicBytes, UintN64 } from '@algorandfoundation/algorand-typescript/arc4' import { afterEach, describe, expect, it, test } from 'vitest' import { TestExecutionContext } from '../src' -import { ABI_RETURN_VALUE_LOG_PREFIX, MIN_TXN_FEE, ZERO_ADDRESS } from '../src/constants' +import { ABI_RETURN_VALUE_LOG_PREFIX, MIN_TXN_FEE, OnApplicationComplete, ZERO_ADDRESS } from '../src/constants' import { testInvariant } from '../src/errors' import { Block, gloadBytes, gloadUint64 } from '../src/impl' import { AccountCls } from '../src/impl/account' @@ -87,7 +87,7 @@ describe('State op codes', async () => { }) const avmResult = await getAvmResult( - { appClient, sendParams: { fee: AlgoAmount.Algos(1000) } }, + { appClient, sendParams: { staticFee: AlgoAmount.Algos(1000) } }, methodName, asUint8Array(dummyAccount.bytes), ) @@ -116,16 +116,16 @@ describe('State op codes', async () => { ])('%s should return %s', async (methodName, expectedValue) => { const application = ctx.any.application({ applicationId: app.appId, - approvalProgram: Bytes(app.compiledApproval.compiledBase64ToBytes), - clearStateProgram: Bytes(app.compiledClear.compiledBase64ToBytes), + approvalProgram: Bytes(app.compiledApproval!.compiledBase64ToBytes), + clearStateProgram: Bytes(app.compiledClear!.compiledBase64ToBytes), globalNumUint: Uint64(0), globalNumBytes: Uint64(0), localNumUint: Uint64(0), localNumBytes: Uint64(0), extraProgramPages: Uint64(0), - creator: Account(Bytes.fromBase32(dummyAccount.addr)), + creator: Account(Bytes.fromBase32(dummyAccount.addr.toString())), }) - const avmResult = await getAvmResult({ appClient, sendParams: { fee: AlgoAmount.Algos(1000) } }, methodName, app.appId) + const avmResult = await getAvmResult({ appClient, sendParams: { staticFee: AlgoAmount.Algos(1000) } }, methodName, app.appId) const mockContract = ctx.contract.create(StateAppParamsContract) const mockResult = mockContract[methodName as keyof StateAppParamsContract](application) @@ -150,12 +150,12 @@ describe('State op codes', async () => { ['verify_asset_frozen_get', false], ])('should return the correct field value of the asset holding', async (methodName, expectedValue) => { const dummyAsset = await generateTestAsset({ - creator: dummyAccount, - total: 100, + sender: dummyAccount.addr, + total: 100n, decimals: 0, - frozenByDefault: false, + defaultFrozen: false, }) - const avmResult = await getAvmResult({ appClient }, methodName, dummyAccount.addr, asBigInt(dummyAsset)) + const avmResult = await getAvmResult({ appClient }, methodName, dummyAccount.addr.toString(), asBigInt(dummyAsset)) const mockAsset = ctx.any.asset() const mockAccount = ctx.any.account({ @@ -192,7 +192,7 @@ describe('State op codes', async () => { ['verify_asset_params_get_clawback', ZERO_ADDRESS], ['verify_asset_params_get_creator', 'creator'], ])('should return the correct field value of the asset', async (methodName, expectedValue) => { - const creator = Account(Bytes.fromBase32(dummyAccount.addr)) + const creator = Account(Bytes.fromBase32(dummyAccount.addr.toString())) const metadataHash = Bytes(`test${' '.repeat(28)}`) const mockAsset = ctx.any.asset({ total: Uint64(100), @@ -205,12 +205,12 @@ describe('State op codes', async () => { }) const dummyAsset = await generateTestAsset({ - creator: dummyAccount, - total: 100, + sender: dummyAccount.addr, + total: 100n, decimals: 0, - frozenByDefault: false, - name: 'TEST', - unit: 'UNIT', + defaultFrozen: false, + assetName: 'TEST', + unitName: 'UNIT', url: 'https://algorand.co', metadataHash: metadataHash.toString(), }) @@ -518,23 +518,34 @@ describe('State op codes', async () => { it('should be able to put, get and delete app local state', async () => { const localNetAccount = await getLocalNetDefaultAccount() - const account = Account(Bytes.fromBase32(localNetAccount.addr)) + const account = Account(Bytes.fromBase32(localNetAccount.addr.toString())) const bytesKey = 'local_bytes' const uint64Key = 'local_uint64' const bytesValue = 'test_bytes' const uint64Value = 42 // put - await getAvmResult({ appClient }, 'verify_put_bytes', localNetAccount.addr, asUint8Array(bytesKey), asUint8Array(bytesValue)) - await getAvmResult({ appClient }, 'verify_put_uint64', localNetAccount.addr, asUint8Array(uint64Key), uint64Value) + await getAvmResult( + { appClient }, + 'verify_put_bytes', + localNetAccount.addr.toString(), + asUint8Array(bytesKey), + asUint8Array(bytesValue), + ) + await getAvmResult({ appClient }, 'verify_put_uint64', localNetAccount.addr.toString(), asUint8Array(uint64Key), uint64Value) const contract = ctx.contract.create(StateAppLocalContract) contract.verify_put_bytes(account, Bytes(bytesKey), Bytes(bytesValue)) contract.verify_put_uint64(account, Bytes(uint64Key), Uint64(uint64Value)) // get - const bytesAvmResult = await getAvmResult({ appClient }, 'verify_get_bytes', localNetAccount.addr, asUint8Array(bytesKey)) - const uint64AvmResult = await getAvmResult({ appClient }, 'verify_get_uint64', localNetAccount.addr, asUint8Array(uint64Key)) + const bytesAvmResult = await getAvmResult({ appClient }, 'verify_get_bytes', localNetAccount.addr.toString(), asUint8Array(bytesKey)) + const uint64AvmResult = await getAvmResult( + { appClient }, + 'verify_get_uint64', + localNetAccount.addr.toString(), + asUint8Array(uint64Key), + ) const bytesResult = contract.verify_get_bytes(account, Bytes(bytesKey)) const uint64Result = contract.verify_get_uint64(account, Bytes(uint64Key)) @@ -542,15 +553,22 @@ describe('State op codes', async () => { expect(asBigInt(uint64Result)).toEqual(uint64AvmResult) // delete - await getAvmResult({ appClient }, 'verify_delete', localNetAccount.addr, asUint8Array(bytesKey)) - await getAvmResult({ appClient }, 'verify_delete', localNetAccount.addr, asUint8Array(uint64Key)) + await getAvmResult({ appClient }, 'verify_delete', localNetAccount.addr.toString(), asUint8Array(bytesKey)) + await getAvmResult({ appClient }, 'verify_delete', localNetAccount.addr.toString(), asUint8Array(uint64Key)) contract.verify_delete(account, Bytes(bytesKey)) contract.verify_delete(account, Bytes(uint64Key)) - await expect(() => getAvmResult({ appClient }, 'verify_get_bytes', localNetAccount.addr, asUint8Array(bytesKey))).rejects.toThrow() + await expect(() => + getAvmResult({ appClient }, 'verify_get_bytes', localNetAccount.addr.toString(), asUint8Array(bytesKey)), + ).rejects.toThrow() expect(() => contract.verify_get_bytes(account, Bytes(bytesKey))).toThrow('value is not set') - const uint64AvmResult2 = await getAvmResult({ appClient }, 'verify_get_uint64', localNetAccount.addr, asUint8Array(uint64Key)) + const uint64AvmResult2 = await getAvmResult( + { appClient }, + 'verify_get_uint64', + localNetAccount.addr.toString(), + asUint8Array(uint64Key), + ) const uint64Result2 = contract.verify_get_uint64(account, Bytes(uint64Key)) expect(asBigInt(uint64Result2)).toEqual(uint64AvmResult2) }) @@ -558,13 +576,19 @@ describe('State op codes', async () => { it('should be able to use _ex methods to get state of another app', async () => { const key = 'local_bytes' const localNetAccount = await getLocalNetDefaultAccount() - const account = Account(Bytes.fromBase32(localNetAccount.addr)) + const account = Account(Bytes.fromBase32(localNetAccount.addr.toString())) const secondContract = ctx.contract.create(StateAppLocalExContract) const secondApp = ctx.ledger.getApplicationForContract(secondContract) expect(secondApp.localNumUint.valueOf()).toEqual(1) expect(secondApp.localNumBytes.valueOf()).toEqual(2) - const bytesAvmResult = await getAvmResult({ appClient }, 'verify_get_ex_bytes', localNetAccount.addr, exApp.appId, asUint8Array(key)) + const bytesAvmResult = await getAvmResult( + { appClient }, + 'verify_get_ex_bytes', + localNetAccount.addr.toString(), + exApp.appId, + asUint8Array(key), + ) const contract = ctx.contract.create(StateAppLocalContract) secondContract.localBytes(account).value = Bytes('dummy_bytes_from_external_contract') @@ -576,13 +600,19 @@ describe('State op codes', async () => { it('should be able to use _ex methods to get arc4 state values of another app', async () => { const key = 'local_arc4_bytes' const localNetAccount = await getLocalNetDefaultAccount() - const account = Account(Bytes.fromBase32(localNetAccount.addr)) + const account = Account(Bytes.fromBase32(localNetAccount.addr.toString())) const secondContract = ctx.contract.create(StateAppLocalExContract) const secondApp = ctx.ledger.getApplicationForContract(secondContract) expect(secondApp.localNumUint.valueOf()).toEqual(1) expect(secondApp.localNumBytes.valueOf()).toEqual(2) - const bytesAvmResult = await getAvmResult({ appClient }, 'verify_get_ex_bytes', localNetAccount.addr, exApp.appId, asUint8Array(key)) + const bytesAvmResult = await getAvmResult( + { appClient }, + 'verify_get_ex_bytes', + localNetAccount.addr.toString(), + exApp.appId, + asUint8Array(key), + ) const contract = ctx.contract.create(StateAppLocalContract) secondContract.localArc4Bytes(account).value = new DynamicBytes('dummy_arc4_bytes') @@ -592,9 +622,9 @@ describe('State op codes', async () => { }) }) }) -const tryOptIn = async (client: ApplicationClient) => { +const tryOptIn = async (client: AppClient) => { try { - await client.optIn({ method: 'opt_in', methodArgs: [] }) + await client.send.call({ method: 'opt_in', args: [], onComplete: OnApplicationComplete.OptInOC }) } catch (e) { if (!(e as DeliberateAny).message.includes('has already opted in to app')) { throw e diff --git a/tests/util.ts b/tests/util.ts index bffce72..ae307dc 100644 --- a/tests/util.ts +++ b/tests/util.ts @@ -1,6 +1,6 @@ import { Bytes, bytes, internal } from '@algorandfoundation/algorand-typescript' -import { ABIValue } from 'algosdk' import { createHash } from 'crypto' +import type { ABIValue } from './avm-invoker' export const padUint8Array = (arr: Uint8Array, padSize: number): Uint8Array => { const paddedUint8Array = new Uint8Array(arr.length + padSize)