From 50662ad2e2d11f2bce7378df6cf1a5452f11a3b5 Mon Sep 17 00:00:00 2001 From: Jacob Homanics Date: Thu, 1 Feb 2024 01:49:33 -0600 Subject: [PATCH] upgraded scaffold eth 2 project --- .github/ISSUE_TEMPLATE/bug_report.yml | 47 - .github/ISSUE_TEMPLATE/config.yml | 8 - .github/pull_request_template.md | 16 - .github/workflows/lint.yaml | 22 +- .gitmodules | 2 +- README.md | 10 +- package.json | 2 +- packages/foundry/deployments/5.json | 3 - packages/foundry/lib/forge-std/.gitattributes | 1 + packages/foundry/lib/forge-std/package.json | 2 +- packages/foundry/lib/forge-std/scripts/vm.py | 635 + .../foundry/lib/forge-std/src/StdChains.sol | 6 +- .../foundry/lib/forge-std/src/StdCheats.sol | 4 +- .../foundry/lib/forge-std/src/StdUtils.sol | 94 +- packages/foundry/lib/forge-std/src/Vm.sol | 1262 +- .../lib/forge-std/src/mocks/MockERC20.sol | 216 + .../lib/forge-std/src/mocks/MockERC721.sol | 221 + .../foundry/lib/forge-std/test/StdError.t.sol | 4 +- .../foundry/lib/forge-std/test/StdUtils.t.sol | 4 +- packages/foundry/lib/forge-std/test/Vm.t.sol | 4 +- .../lib/forge-std/test/mocks/MockERC20.t.sol | 441 + .../lib/forge-std/test/mocks/MockERC721.t.sol | 721 + .../.changeset/afraid-walls-smell.md | 5 - .../.changeset/angry-ties-switch.md | 5 - .../.changeset/big-plums-cover.md | 4 - .../.changeset/blue-horses-do.md | 5 - .../.changeset/blue-scissors-design.md | 5 - .../.changeset/brave-lobsters-punch.md | 5 - .../.changeset/bright-tomatoes-sing.md | 5 - .../.changeset/chilled-spiders-attack.md | 5 - .../.changeset/clever-bats-kick.md | 5 - .../.changeset/clever-pumas-beg.md | 5 - .../.changeset/dull-ghosts-sip.md | 6 - .../.changeset/eight-peaches-guess.md | 5 - .../.changeset/eighty-crabs-listen.md | 5 - .../.changeset/eighty-lemons-shake.md | 5 - .../.changeset/empty-cheetahs-hunt.md | 5 - .../.changeset/empty-taxis-kiss.md | 5 - .../.changeset/fair-humans-peel.md | 5 - .../.changeset/fifty-owls-retire.md | 5 - .../.changeset/flat-bottles-wonder.md | 7 - .../.changeset/fluffy-countries-buy.md | 5 - .../.changeset/four-adults-knock.md | 5 - .../.changeset/fresh-birds-kiss.md | 5 - .../.changeset/green-pumpkins-end.md | 5 - .../.changeset/grumpy-bulldogs-call.md | 5 - .../.changeset/grumpy-poets-rush.md | 5 - .../.changeset/grumpy-worms-tease.md | 5 - .../.changeset/happy-falcons-walk.md | 5 - .../.changeset/healthy-gorillas-applaud.md | 5 - .../.changeset/heavy-drinks-fail.md | 5 - .../.changeset/hip-beds-provide.md | 5 - .../.changeset/hip-goats-fail.md | 5 - .../.changeset/hot-coins-judge.md | 5 - .../.changeset/hot-dingos-kiss.md | 5 - .../.changeset/hot-plums-approve.md | 5 - .../.changeset/large-humans-remain.md | 5 - .../.changeset/lazy-rice-joke.md | 5 - .../.changeset/little-falcons-build.md | 5 - .../.changeset/loud-shrimps-play.md | 5 - .../.changeset/lovely-geckos-hide.md | 5 - .../.changeset/mean-walls-watch.md | 5 - .../.changeset/mighty-donuts-smile.md | 6 - .../.changeset/orange-apes-draw.md | 5 - .../.changeset/pink-suns-mix.md | 5 - .../.changeset/popular-deers-raise.md | 5 - .../.changeset/pre.json | 89 - .../.changeset/proud-seals-complain.md | 5 - .../.changeset/proud-spiders-attend.md | 5 - .../.changeset/purple-cats-cheer.md | 5 - .../.changeset/purple-squids-attend.md | 6 - .../.changeset/quiet-trainers-kick.md | 5 - .../.changeset/red-dots-fold.md | 5 - .../.changeset/rotten-insects-wash.md | 5 - .../.changeset/serious-books-lie.md | 5 - .../.changeset/short-eels-enjoy.md | 5 - .../.changeset/silly-bees-beam.md | 7 - .../.changeset/six-frogs-turn.md | 5 - .../.changeset/sixty-numbers-reply.md | 5 - .../.changeset/slimy-penguins-attack.md | 5 - .../.changeset/smooth-books-wink.md | 5 - .../.changeset/smooth-cougars-jump.md | 5 - .../.changeset/spicy-sheep-eat.md | 5 - .../.changeset/spotty-hotels-type.md | 5 - .../.changeset/strong-poems-thank.md | 5 - .../.changeset/swift-bags-divide.md | 5 - .../.changeset/swift-numbers-cry.md | 5 - .../.changeset/tasty-tomatoes-turn.md | 5 - .../.changeset/tender-shirts-turn.md | 5 - .../.changeset/thick-pumpkins-exercise.md | 5 - .../.changeset/thin-camels-matter.md | 5 - .../.changeset/thirty-drinks-happen.md | 5 - .../.changeset/tough-drinks-hammer.md | 5 - .../.changeset/two-wasps-punch.md | 5 - .../.changeset/unlucky-beans-obey.md | 5 - .../.changeset/violet-dancers-cough.md | 5 - .../.changeset/violet-melons-press.md | 5 - .../.changeset/warm-guests-rule.md | 5 - .../.changeset/wet-bears-heal.md | 5 - .../.changeset/wild-beds-visit.md | 5 - .../.changeset/wild-peas-remain.md | 5 - .../.changeset/wild-rockets-rush.md | 5 - .../.changeset/wild-windows-trade.md | 5 - .../.github/workflows/release-cycle.yml | 4 - .../lib/openzeppelin-contracts/CHANGELOG.md | 335 +- .../lib/openzeppelin-contracts/README.md | 4 - .../lib/openzeppelin-contracts/SECURITY.md | 2 +- .../audits/2023-10-v5.0.pdf | Bin 0 -> 910284 bytes .../openzeppelin-contracts/audits/README.md | 1 + .../access_manager_AccessManager.sol.patch | 97 + .../contracts/access/AccessControl.sol | 2 +- .../contracts/access/IAccessControl.sol | 2 +- .../contracts/access/Ownable.sol | 2 +- .../contracts/access/Ownable2Step.sol | 2 +- .../contracts/access/README.adoc | 6 +- .../AccessControlDefaultAdminRules.sol | 2 +- .../extensions/AccessControlEnumerable.sol | 2 +- .../IAccessControlDefaultAdminRules.sol | 2 +- .../extensions/IAccessControlEnumerable.sol | 2 +- .../access/manager/AccessManaged.sol | 16 +- .../access/manager/AccessManager.sol | 392 +- .../access/manager/AuthorityUtils.sol | 2 +- .../access/manager/IAccessManaged.sol | 16 +- .../access/manager/IAccessManager.sol | 284 +- .../contracts/access/manager/IAuthority.sol | 2 +- .../contracts/finance/VestingWallet.sol | 2 +- .../contracts/governance/Governor.sol | 2 +- .../contracts/governance/IGovernor.sol | 2 +- .../governance/TimelockController.sol | 2 +- .../extensions/GovernorCountingSimple.sol | 2 +- .../extensions/GovernorPreventLateQuorum.sol | 2 +- .../extensions/GovernorSettings.sol | 2 +- .../governance/extensions/GovernorStorage.sol | 2 +- .../extensions/GovernorTimelockAccess.sol | 2 +- .../extensions/GovernorTimelockCompound.sol | 2 +- .../extensions/GovernorTimelockControl.sol | 2 +- .../governance/extensions/GovernorVotes.sol | 2 +- .../GovernorVotesQuorumFraction.sol | 2 +- .../contracts/governance/utils/IVotes.sol | 2 +- .../contracts/governance/utils/Votes.sol | 4 +- .../contracts/interfaces/IERC1155.sol | 2 +- .../interfaces/IERC1155MetadataURI.sol | 2 +- .../contracts/interfaces/IERC1155Receiver.sol | 2 +- .../contracts/interfaces/IERC1271.sol | 2 +- .../contracts/interfaces/IERC1363.sol | 2 +- .../contracts/interfaces/IERC1363Receiver.sol | 2 +- .../contracts/interfaces/IERC1363Spender.sol | 2 +- .../contracts/interfaces/IERC165.sol | 2 +- .../interfaces/IERC1820Implementer.sol | 2 +- .../contracts/interfaces/IERC1820Registry.sol | 2 +- .../contracts/interfaces/IERC1967.sol | 2 +- .../contracts/interfaces/IERC20.sol | 2 +- .../contracts/interfaces/IERC20Metadata.sol | 2 +- .../contracts/interfaces/IERC2309.sol | 2 +- .../contracts/interfaces/IERC2612.sol | 2 +- .../contracts/interfaces/IERC2981.sol | 2 +- .../contracts/interfaces/IERC3156.sol | 2 +- .../interfaces/IERC3156FlashBorrower.sol | 2 +- .../interfaces/IERC3156FlashLender.sol | 2 +- .../contracts/interfaces/IERC4626.sol | 2 +- .../contracts/interfaces/IERC4906.sol | 2 +- .../contracts/interfaces/IERC5267.sol | 2 +- .../contracts/interfaces/IERC5313.sol | 2 +- .../contracts/interfaces/IERC5805.sol | 2 +- .../contracts/interfaces/IERC6372.sol | 2 +- .../contracts/interfaces/IERC721.sol | 2 +- .../interfaces/IERC721Enumerable.sol | 2 +- .../contracts/interfaces/IERC721Metadata.sol | 2 +- .../contracts/interfaces/IERC721Receiver.sol | 2 +- .../contracts/interfaces/IERC777.sol | 2 +- .../contracts/interfaces/IERC777Recipient.sol | 2 +- .../contracts/interfaces/IERC777Sender.sol | 2 +- .../contracts/interfaces/draft-IERC1822.sol | 2 +- .../contracts/interfaces/draft-IERC6093.sol | 2 +- .../contracts/metatx/ERC2771Context.sol | 31 +- .../contracts/metatx/ERC2771Forwarder.sol | 2 +- .../contracts/mocks/AccessManagedTarget.sol | 11 + .../contracts/mocks/AuthorityMock.sol | 69 + .../contracts/mocks/ERC2771ContextMock.sol | 7 +- .../mocks/token/ERC20ForceApproveMock.sol | 2 +- .../contracts/package.json | 2 +- .../contracts/proxy/Clones.sol | 2 +- .../contracts/proxy/ERC1967/ERC1967Proxy.sol | 2 +- .../contracts/proxy/ERC1967/ERC1967Utils.sol | 2 +- .../contracts/proxy/Proxy.sol | 2 +- .../contracts/proxy/beacon/BeaconProxy.sol | 2 +- .../contracts/proxy/beacon/IBeacon.sol | 2 +- .../proxy/beacon/UpgradeableBeacon.sol | 2 +- .../proxy/transparent/ProxyAdmin.sol | 2 +- .../TransparentUpgradeableProxy.sol | 2 +- .../contracts/proxy/utils/Initializable.sol | 2 +- .../contracts/proxy/utils/UUPSUpgradeable.sol | 2 +- .../contracts/token/ERC1155/ERC1155.sol | 2 +- .../contracts/token/ERC1155/IERC1155.sol | 5 +- .../token/ERC1155/IERC1155Receiver.sol | 2 +- .../ERC1155/extensions/ERC1155Burnable.sol | 2 +- .../ERC1155/extensions/ERC1155Pausable.sol | 2 +- .../ERC1155/extensions/ERC1155Supply.sol | 2 +- .../ERC1155/extensions/ERC1155URIStorage.sol | 2 +- .../extensions/IERC1155MetadataURI.sol | 2 +- .../token/ERC1155/utils/ERC1155Holder.sol | 2 +- .../contracts/token/ERC20/ERC20.sol | 2 +- .../contracts/token/ERC20/IERC20.sol | 2 +- .../token/ERC20/extensions/ERC20Burnable.sol | 2 +- .../token/ERC20/extensions/ERC20Capped.sol | 2 +- .../token/ERC20/extensions/ERC20FlashMint.sol | 2 +- .../token/ERC20/extensions/ERC20Pausable.sol | 2 +- .../token/ERC20/extensions/ERC20Permit.sol | 2 +- .../token/ERC20/extensions/ERC20Votes.sol | 2 +- .../token/ERC20/extensions/ERC20Wrapper.sol | 2 +- .../token/ERC20/extensions/ERC4626.sol | 2 +- .../token/ERC20/extensions/IERC20Metadata.sol | 2 +- .../token/ERC20/extensions/IERC20Permit.sol | 2 +- .../contracts/token/ERC20/utils/SafeERC20.sol | 2 +- .../contracts/token/ERC721/ERC721.sol | 2 +- .../contracts/token/ERC721/IERC721.sol | 2 +- .../token/ERC721/IERC721Receiver.sol | 2 +- .../ERC721/extensions/ERC721Burnable.sol | 2 +- .../ERC721/extensions/ERC721Consecutive.sol | 2 +- .../ERC721/extensions/ERC721Enumerable.sol | 2 +- .../ERC721/extensions/ERC721Pausable.sol | 2 +- .../token/ERC721/extensions/ERC721Royalty.sol | 2 +- .../ERC721/extensions/ERC721URIStorage.sol | 2 +- .../token/ERC721/extensions/ERC721Votes.sol | 2 +- .../token/ERC721/extensions/ERC721Wrapper.sol | 2 +- .../ERC721/extensions/IERC721Enumerable.sol | 2 +- .../ERC721/extensions/IERC721Metadata.sol | 2 +- .../token/ERC721/utils/ERC721Holder.sol | 2 +- .../contracts/token/common/ERC2981.sol | 2 +- .../contracts/utils/Address.sol | 2 +- .../contracts/utils/Arrays.sol | 2 +- .../contracts/utils/Base64.sol | 2 +- .../contracts/utils/Context.sol | 6 +- .../contracts/utils/Create2.sol | 2 +- .../contracts/utils/Multicall.sol | 20 +- .../contracts/utils/Nonces.sol | 2 +- .../contracts/utils/Pausable.sol | 2 +- .../contracts/utils/ReentrancyGuard.sol | 2 +- .../contracts/utils/ShortStrings.sol | 2 +- .../contracts/utils/StorageSlot.sol | 2 +- .../contracts/utils/Strings.sol | 2 +- .../contracts/utils/cryptography/ECDSA.sol | 2 +- .../contracts/utils/cryptography/EIP712.sol | 2 +- .../utils/cryptography/MerkleProof.sol | 2 +- .../utils/cryptography/MessageHashUtils.sol | 2 +- .../utils/cryptography/SignatureChecker.sol | 2 +- .../contracts/utils/introspection/ERC165.sol | 2 +- .../utils/introspection/ERC165Checker.sol | 2 +- .../contracts/utils/introspection/IERC165.sol | 2 +- .../contracts/utils/math/Math.sol | 2 +- .../contracts/utils/math/SafeCast.sol | 2 +- .../contracts/utils/math/SignedMath.sol | 2 +- .../contracts/utils/structs/BitMaps.sol | 2 +- .../contracts/utils/structs/Checkpoints.sol | 2 +- .../utils/structs/DoubleEndedQueue.sol | 2 +- .../contracts/utils/structs/EnumerableMap.sol | 2 +- .../contracts/utils/structs/EnumerableSet.sol | 2 +- .../contracts/utils/types/Time.sol | 18 +- .../vendor/compound/ICompoundTimelock.sol | 2 +- .../openzeppelin-contracts/hardhat.config.js | 4 + .../hardhat/env-contract.js | 23 +- .../openzeppelin-contracts/package-lock.json | 8 +- .../lib/openzeppelin-contracts/package.json | 6 +- .../release/workflow/github-release.js | 1 + .../scripts/upgradeable/transpile.sh | 2 +- .../test/access/manager/AccessManaged.test.js | 142 + .../access/manager/AccessManager.behavior.js | 711 + .../test/access/manager/AccessManager.test.js | 3270 +++- .../access/manager/AuthorityUtils.test.js | 91 + .../extensions/GovernorTimelockAccess.test.js | 373 +- .../test/helpers/access-manager.js | 69 + .../test/metatx/ERC2771Context.test.js | 56 +- .../test/metatx/ERC2771Forwarder.test.js | 1 - .../token/ERC20/extensions/ERC4626.test.js | 4 +- .../lib/solidity-bytes-utils/.gitignore | 4 +- .../lib/solidity-bytes-utils/README.md | 5 +- .../contracts/AssertBytes.sol | 97 + .../contracts/BytesLib.sol | 66 + .../contracts/Migrations.sol | 27 - .../migrations/1_initial_migration.js | 5 - .../migrations/2_deploy_contracts.js | 5 - .../solidity-bytes-utils/package-lock.json | 10939 +---------- .../lib/solidity-bytes-utils/package.json | 8 +- .../lib/solidity-bytes-utils/remappings.txt | 2 + .../test/TestBytesLib1.sol | 296 +- .../test/TestBytesLib2.sol | 79 +- .../lib/solidity-bytes-utils/truffle.js | 49 - packages/foundry/package.json | 2 +- .../script/exampleSetupsForDebugPage.txt | 1 - packages/foundry/script/generateTsAbis.js | 39 +- .../_components}/AddressCodeTab.tsx | 0 .../_components/AddressComponent.tsx | 35 + .../_components}/AddressLogsTab.tsx | 0 .../_components}/AddressStorageTab.tsx | 6 +- .../blockexplorer/_components/BackButton.tsx | 12 + .../_components/ContractTabs.tsx | 92 + .../_components}/PaginationButton.tsx | 4 +- .../blockexplorer/_components}/SearchBar.tsx | 4 +- .../_components}/TransactionHash.tsx | 2 + .../_components}/TransactionsTable.tsx | 7 +- .../blockexplorer/_components}/index.tsx | 8 +- .../blockexplorer/address/[address]/page.tsx | 85 + packages/nextjs/app/blockexplorer/layout.tsx | 12 + .../index.tsx => app/blockexplorer/page.tsx} | 26 +- .../transaction/[txHash]/page.tsx} | 21 +- .../app/debug/_components/DebugContracts.tsx | 65 + .../_components/contract}/ContractInput.tsx | 2 + .../contract/ContractReadMethods.tsx | 43 + .../_components/contract}/ContractUI.tsx | 16 +- .../contract}/ContractVariables.tsx | 24 +- .../contract/ContractWriteMethods.tsx | 49 + .../_components/contract}/DisplayVariable.tsx | 20 +- .../contract/InheritanceTooltip.tsx | 14 + .../contract}/ReadOnlyFunctionForm.tsx | 28 +- .../debug/_components/contract}/TxReceipt.tsx | 2 +- .../contract}/WriteOnlyFunctionForm.tsx | 31 +- .../debug/_components/contract}/index.tsx | 0 .../_components/contract}/utilsContract.tsx | 37 +- .../_components/contract}/utilsDisplay.tsx | 4 +- packages/nextjs/app/debug/page.tsx | 28 + packages/nextjs/app/layout.tsx | 54 + .../nextjs/{pages/index.tsx => app/page.tsx} | 18 +- .../_components/RepTokensDemo.tsx | 60 + packages/nextjs/app/rep-tokens-demo/page.tsx | 18 + packages/nextjs/components/Footer.tsx | 16 +- packages/nextjs/components/Header.tsx | 30 +- packages/nextjs/components/MetaHeader.tsx | 52 - .../ScaffoldEthAppWithProviders.tsx} | 48 +- packages/nextjs/components/SwitchTheme.tsx | 7 +- packages/nextjs/components/assets/Spinner.tsx | 23 - .../rep-tokens-demo/MainTokensCardConfig.tsx | 12 +- .../components/scaffold-eth/Address.tsx | 115 +- .../components/scaffold-eth/Balance.tsx | 36 +- .../components/scaffold-eth/BlockieAvatar.tsx | 2 + .../Contract/ContractReadMethods.tsx | 29 - .../Contract/ContractWriteMethods.tsx | 39 - .../nextjs/components/scaffold-eth/Faucet.tsx | 10 +- .../components/scaffold-eth/FaucetButton.tsx | 6 +- .../scaffold-eth/Input/AddressInput.tsx | 6 +- .../scaffold-eth/Input/EtherInput.tsx | 54 +- .../scaffold-eth/Input/InputBase.tsx | 2 +- .../scaffold-eth/Input/IntegerInput.tsx | 7 +- .../components/scaffold-eth/Input/utils.ts | 4 +- .../components/scaffold-eth/ProgressBar.tsx | 72 + .../RainbowKitCustomConnectButton.tsx | 195 - .../AddressInfoDropdown.tsx | 132 + .../AddressQRCodeModal.tsx | 33 + .../NetworkOptions.tsx | 47 + .../WrongNetworkDropdown.tsx | 32 + .../RainbowKitCustomConnectButton/index.tsx | 68 + .../nextjs/components/scaffold-eth/index.tsx | 1 - .../nextjs/contracts/deployedContracts.ts | 45 +- .../nextjs/contracts/externalContracts.ts | 1993 +- .../hooks/scaffold-eth/useAccountBalance.ts | 10 +- .../hooks/scaffold-eth/useAutoConnect.ts | 38 +- .../hooks/scaffold-eth/useBurnerWallet.ts | 63 +- .../nextjs/hooks/scaffold-eth/useDarkMode.ts | 43 + .../scaffold-eth/useDeployedContractInfo.ts | 13 +- .../scaffold-eth/useNativeCurrencyPrice.ts | 9 +- .../hooks/scaffold-eth/useNetworkColor.ts | 16 +- .../hooks/scaffold-eth/useOutsideClick.ts | 6 +- .../hooks/scaffold-eth/useScaffoldContract.ts | 9 +- .../scaffold-eth/useScaffoldContractRead.ts | 8 +- .../scaffold-eth/useScaffoldContractWrite.ts | 20 +- .../scaffold-eth/useScaffoldEventHistory.ts | 88 +- .../useScaffoldEventSubscriber.ts | 12 +- .../hooks/scaffold-eth/useTargetNetwork.ts | 29 + .../hooks/scaffold-eth/useTransactor.tsx | 18 +- packages/nextjs/next.config.js | 9 +- packages/nextjs/package.json | 18 +- .../pages/blockexplorer/address/[address].tsx | 197 - packages/nextjs/pages/debug.tsx | 74 - packages/nextjs/pages/repTokensDemo.tsx | 19 - packages/nextjs/public/atxdao-logo.png | Bin 23781 -> 0 bytes packages/nextjs/scaffold.config.ts | 10 +- packages/nextjs/services/store/store.ts | 10 +- .../web3/wagmi-burner/BurnerConnector.ts | 29 +- .../wagmi-burner/BurnerConnectorErrors.ts | 5 +- .../web3/wagmi-burner/burnerWalletConfig.ts | 22 +- .../nextjs/services/web3/wagmiConnectors.tsx | 22 +- packages/nextjs/styles/globals.css | 2 +- packages/nextjs/tailwind.config.js | 84 +- packages/nextjs/tsconfig.json | 9 +- packages/nextjs/types/abitype/abi.d.ts | 6 +- packages/nextjs/types/utils.ts | 3 + packages/nextjs/utils/scaffold-eth/block.ts | 8 +- .../nextjs/utils/scaffold-eth/contract.ts | 52 +- .../utils/scaffold-eth/contractNames.ts | 7 - .../utils/scaffold-eth/contractsData.ts | 7 + .../scaffold-eth/fetchPriceFromUniswap.ts | 22 +- .../nextjs/utils/scaffold-eth/getMetadata.ts | 34 + .../utils/scaffold-eth/getParsedError.ts | 31 + packages/nextjs/utils/scaffold-eth/index.ts | 1 + .../nextjs/utils/scaffold-eth/networks.ts | 32 +- .../utils/scaffold-eth/notification.tsx | 21 +- yarn.lock | 15335 ++++++---------- 396 files changed, 15593 insertions(+), 27004 deletions(-) delete mode 100644 .github/ISSUE_TEMPLATE/bug_report.yml delete mode 100644 .github/ISSUE_TEMPLATE/config.yml delete mode 100644 .github/pull_request_template.md delete mode 100644 packages/foundry/deployments/5.json create mode 100644 packages/foundry/lib/forge-std/.gitattributes create mode 100755 packages/foundry/lib/forge-std/scripts/vm.py create mode 100644 packages/foundry/lib/forge-std/src/mocks/MockERC20.sol create mode 100644 packages/foundry/lib/forge-std/src/mocks/MockERC721.sol create mode 100644 packages/foundry/lib/forge-std/test/mocks/MockERC20.t.sol create mode 100644 packages/foundry/lib/forge-std/test/mocks/MockERC721.t.sol delete mode 100644 packages/foundry/lib/openzeppelin-contracts/.changeset/afraid-walls-smell.md delete mode 100644 packages/foundry/lib/openzeppelin-contracts/.changeset/angry-ties-switch.md delete mode 100644 packages/foundry/lib/openzeppelin-contracts/.changeset/big-plums-cover.md delete mode 100644 packages/foundry/lib/openzeppelin-contracts/.changeset/blue-horses-do.md delete mode 100644 packages/foundry/lib/openzeppelin-contracts/.changeset/blue-scissors-design.md delete mode 100644 packages/foundry/lib/openzeppelin-contracts/.changeset/brave-lobsters-punch.md delete mode 100644 packages/foundry/lib/openzeppelin-contracts/.changeset/bright-tomatoes-sing.md delete mode 100644 packages/foundry/lib/openzeppelin-contracts/.changeset/chilled-spiders-attack.md delete mode 100644 packages/foundry/lib/openzeppelin-contracts/.changeset/clever-bats-kick.md delete mode 100644 packages/foundry/lib/openzeppelin-contracts/.changeset/clever-pumas-beg.md delete mode 100644 packages/foundry/lib/openzeppelin-contracts/.changeset/dull-ghosts-sip.md delete mode 100644 packages/foundry/lib/openzeppelin-contracts/.changeset/eight-peaches-guess.md delete mode 100644 packages/foundry/lib/openzeppelin-contracts/.changeset/eighty-crabs-listen.md delete mode 100644 packages/foundry/lib/openzeppelin-contracts/.changeset/eighty-lemons-shake.md delete mode 100644 packages/foundry/lib/openzeppelin-contracts/.changeset/empty-cheetahs-hunt.md delete mode 100644 packages/foundry/lib/openzeppelin-contracts/.changeset/empty-taxis-kiss.md delete mode 100644 packages/foundry/lib/openzeppelin-contracts/.changeset/fair-humans-peel.md delete mode 100644 packages/foundry/lib/openzeppelin-contracts/.changeset/fifty-owls-retire.md delete mode 100644 packages/foundry/lib/openzeppelin-contracts/.changeset/flat-bottles-wonder.md delete mode 100644 packages/foundry/lib/openzeppelin-contracts/.changeset/fluffy-countries-buy.md delete mode 100644 packages/foundry/lib/openzeppelin-contracts/.changeset/four-adults-knock.md delete mode 100644 packages/foundry/lib/openzeppelin-contracts/.changeset/fresh-birds-kiss.md delete mode 100644 packages/foundry/lib/openzeppelin-contracts/.changeset/green-pumpkins-end.md delete mode 100644 packages/foundry/lib/openzeppelin-contracts/.changeset/grumpy-bulldogs-call.md delete mode 100644 packages/foundry/lib/openzeppelin-contracts/.changeset/grumpy-poets-rush.md delete mode 100644 packages/foundry/lib/openzeppelin-contracts/.changeset/grumpy-worms-tease.md delete mode 100644 packages/foundry/lib/openzeppelin-contracts/.changeset/happy-falcons-walk.md delete mode 100644 packages/foundry/lib/openzeppelin-contracts/.changeset/healthy-gorillas-applaud.md delete mode 100644 packages/foundry/lib/openzeppelin-contracts/.changeset/heavy-drinks-fail.md delete mode 100644 packages/foundry/lib/openzeppelin-contracts/.changeset/hip-beds-provide.md delete mode 100644 packages/foundry/lib/openzeppelin-contracts/.changeset/hip-goats-fail.md delete mode 100644 packages/foundry/lib/openzeppelin-contracts/.changeset/hot-coins-judge.md delete mode 100644 packages/foundry/lib/openzeppelin-contracts/.changeset/hot-dingos-kiss.md delete mode 100644 packages/foundry/lib/openzeppelin-contracts/.changeset/hot-plums-approve.md delete mode 100644 packages/foundry/lib/openzeppelin-contracts/.changeset/large-humans-remain.md delete mode 100644 packages/foundry/lib/openzeppelin-contracts/.changeset/lazy-rice-joke.md delete mode 100644 packages/foundry/lib/openzeppelin-contracts/.changeset/little-falcons-build.md delete mode 100644 packages/foundry/lib/openzeppelin-contracts/.changeset/loud-shrimps-play.md delete mode 100644 packages/foundry/lib/openzeppelin-contracts/.changeset/lovely-geckos-hide.md delete mode 100644 packages/foundry/lib/openzeppelin-contracts/.changeset/mean-walls-watch.md delete mode 100644 packages/foundry/lib/openzeppelin-contracts/.changeset/mighty-donuts-smile.md delete mode 100644 packages/foundry/lib/openzeppelin-contracts/.changeset/orange-apes-draw.md delete mode 100644 packages/foundry/lib/openzeppelin-contracts/.changeset/pink-suns-mix.md delete mode 100644 packages/foundry/lib/openzeppelin-contracts/.changeset/popular-deers-raise.md delete mode 100644 packages/foundry/lib/openzeppelin-contracts/.changeset/pre.json delete mode 100644 packages/foundry/lib/openzeppelin-contracts/.changeset/proud-seals-complain.md delete mode 100644 packages/foundry/lib/openzeppelin-contracts/.changeset/proud-spiders-attend.md delete mode 100644 packages/foundry/lib/openzeppelin-contracts/.changeset/purple-cats-cheer.md delete mode 100644 packages/foundry/lib/openzeppelin-contracts/.changeset/purple-squids-attend.md delete mode 100644 packages/foundry/lib/openzeppelin-contracts/.changeset/quiet-trainers-kick.md delete mode 100644 packages/foundry/lib/openzeppelin-contracts/.changeset/red-dots-fold.md delete mode 100644 packages/foundry/lib/openzeppelin-contracts/.changeset/rotten-insects-wash.md delete mode 100644 packages/foundry/lib/openzeppelin-contracts/.changeset/serious-books-lie.md delete mode 100644 packages/foundry/lib/openzeppelin-contracts/.changeset/short-eels-enjoy.md delete mode 100644 packages/foundry/lib/openzeppelin-contracts/.changeset/silly-bees-beam.md delete mode 100644 packages/foundry/lib/openzeppelin-contracts/.changeset/six-frogs-turn.md delete mode 100644 packages/foundry/lib/openzeppelin-contracts/.changeset/sixty-numbers-reply.md delete mode 100644 packages/foundry/lib/openzeppelin-contracts/.changeset/slimy-penguins-attack.md delete mode 100644 packages/foundry/lib/openzeppelin-contracts/.changeset/smooth-books-wink.md delete mode 100644 packages/foundry/lib/openzeppelin-contracts/.changeset/smooth-cougars-jump.md delete mode 100644 packages/foundry/lib/openzeppelin-contracts/.changeset/spicy-sheep-eat.md delete mode 100644 packages/foundry/lib/openzeppelin-contracts/.changeset/spotty-hotels-type.md delete mode 100644 packages/foundry/lib/openzeppelin-contracts/.changeset/strong-poems-thank.md delete mode 100644 packages/foundry/lib/openzeppelin-contracts/.changeset/swift-bags-divide.md delete mode 100644 packages/foundry/lib/openzeppelin-contracts/.changeset/swift-numbers-cry.md delete mode 100644 packages/foundry/lib/openzeppelin-contracts/.changeset/tasty-tomatoes-turn.md delete mode 100644 packages/foundry/lib/openzeppelin-contracts/.changeset/tender-shirts-turn.md delete mode 100644 packages/foundry/lib/openzeppelin-contracts/.changeset/thick-pumpkins-exercise.md delete mode 100644 packages/foundry/lib/openzeppelin-contracts/.changeset/thin-camels-matter.md delete mode 100644 packages/foundry/lib/openzeppelin-contracts/.changeset/thirty-drinks-happen.md delete mode 100644 packages/foundry/lib/openzeppelin-contracts/.changeset/tough-drinks-hammer.md delete mode 100644 packages/foundry/lib/openzeppelin-contracts/.changeset/two-wasps-punch.md delete mode 100644 packages/foundry/lib/openzeppelin-contracts/.changeset/unlucky-beans-obey.md delete mode 100644 packages/foundry/lib/openzeppelin-contracts/.changeset/violet-dancers-cough.md delete mode 100644 packages/foundry/lib/openzeppelin-contracts/.changeset/violet-melons-press.md delete mode 100644 packages/foundry/lib/openzeppelin-contracts/.changeset/warm-guests-rule.md delete mode 100644 packages/foundry/lib/openzeppelin-contracts/.changeset/wet-bears-heal.md delete mode 100644 packages/foundry/lib/openzeppelin-contracts/.changeset/wild-beds-visit.md delete mode 100644 packages/foundry/lib/openzeppelin-contracts/.changeset/wild-peas-remain.md delete mode 100644 packages/foundry/lib/openzeppelin-contracts/.changeset/wild-rockets-rush.md delete mode 100644 packages/foundry/lib/openzeppelin-contracts/.changeset/wild-windows-trade.md create mode 100644 packages/foundry/lib/openzeppelin-contracts/audits/2023-10-v5.0.pdf create mode 100644 packages/foundry/lib/openzeppelin-contracts/certora/diff/access_manager_AccessManager.sol.patch create mode 100644 packages/foundry/lib/openzeppelin-contracts/contracts/mocks/AuthorityMock.sol create mode 100644 packages/foundry/lib/openzeppelin-contracts/test/access/manager/AccessManaged.test.js create mode 100644 packages/foundry/lib/openzeppelin-contracts/test/access/manager/AccessManager.behavior.js create mode 100644 packages/foundry/lib/openzeppelin-contracts/test/access/manager/AuthorityUtils.test.js create mode 100644 packages/foundry/lib/openzeppelin-contracts/test/helpers/access-manager.js delete mode 100755 packages/foundry/lib/solidity-bytes-utils/contracts/Migrations.sol delete mode 100755 packages/foundry/lib/solidity-bytes-utils/migrations/1_initial_migration.js delete mode 100755 packages/foundry/lib/solidity-bytes-utils/migrations/2_deploy_contracts.js create mode 100644 packages/foundry/lib/solidity-bytes-utils/remappings.txt delete mode 100755 packages/foundry/lib/solidity-bytes-utils/truffle.js delete mode 100644 packages/foundry/script/exampleSetupsForDebugPage.txt rename packages/nextjs/{components/blockexplorer => app/blockexplorer/_components}/AddressCodeTab.tsx (100%) create mode 100644 packages/nextjs/app/blockexplorer/_components/AddressComponent.tsx rename packages/nextjs/{components/blockexplorer => app/blockexplorer/_components}/AddressLogsTab.tsx (100%) rename packages/nextjs/{components/blockexplorer => app/blockexplorer/_components}/AddressStorageTab.tsx (90%) create mode 100644 packages/nextjs/app/blockexplorer/_components/BackButton.tsx create mode 100644 packages/nextjs/app/blockexplorer/_components/ContractTabs.tsx rename packages/nextjs/{components/blockexplorer => app/blockexplorer/_components}/PaginationButton.tsx (97%) rename packages/nextjs/{components/blockexplorer => app/blockexplorer/_components}/SearchBar.tsx (95%) rename packages/nextjs/{components/blockexplorer => app/blockexplorer/_components}/TransactionHash.tsx (98%) rename packages/nextjs/{components/blockexplorer => app/blockexplorer/_components}/TransactionsTable.tsx (92%) rename packages/nextjs/{components/blockexplorer => app/blockexplorer/_components}/index.tsx (70%) create mode 100644 packages/nextjs/app/blockexplorer/address/[address]/page.tsx create mode 100644 packages/nextjs/app/blockexplorer/layout.tsx rename packages/nextjs/{pages/blockexplorer/index.tsx => app/blockexplorer/page.tsx} (71%) rename packages/nextjs/{pages/blockexplorer/transaction/[txHash].tsx => app/blockexplorer/transaction/[txHash]/page.tsx} (88%) create mode 100644 packages/nextjs/app/debug/_components/DebugContracts.tsx rename packages/nextjs/{components/scaffold-eth/Contract => app/debug/_components/contract}/ContractInput.tsx (98%) create mode 100644 packages/nextjs/app/debug/_components/contract/ContractReadMethods.tsx rename packages/nextjs/{components/scaffold-eth/Contract => app/debug/_components/contract}/ContractUI.tsx (91%) rename packages/nextjs/{components/scaffold-eth/Contract => app/debug/_components/contract}/ContractVariables.tsx (51%) create mode 100644 packages/nextjs/app/debug/_components/contract/ContractWriteMethods.tsx rename packages/nextjs/{components/scaffold-eth/Contract => app/debug/_components/contract}/DisplayVariable.tsx (79%) create mode 100644 packages/nextjs/app/debug/_components/contract/InheritanceTooltip.tsx rename packages/nextjs/{components/scaffold-eth/Contract => app/debug/_components/contract}/ReadOnlyFunctionForm.tsx (76%) rename packages/nextjs/{components/scaffold-eth/Contract => app/debug/_components/contract}/TxReceipt.tsx (96%) rename packages/nextjs/{components/scaffold-eth/Contract => app/debug/_components/contract}/WriteOnlyFunctionForm.tsx (82%) rename packages/nextjs/{components/scaffold-eth/Contract => app/debug/_components/contract}/index.tsx (100%) rename packages/nextjs/{components/scaffold-eth/Contract => app/debug/_components/contract}/utilsContract.tsx (61%) rename packages/nextjs/{components/scaffold-eth/Contract => app/debug/_components/contract}/utilsDisplay.tsx (89%) create mode 100644 packages/nextjs/app/debug/page.tsx create mode 100644 packages/nextjs/app/layout.tsx rename packages/nextjs/{pages/index.tsx => app/page.tsx} (75%) create mode 100644 packages/nextjs/app/rep-tokens-demo/_components/RepTokensDemo.tsx create mode 100644 packages/nextjs/app/rep-tokens-demo/page.tsx delete mode 100644 packages/nextjs/components/MetaHeader.tsx rename packages/nextjs/{pages/_app.tsx => components/ScaffoldEthAppWithProviders.tsx} (54%) delete mode 100644 packages/nextjs/components/assets/Spinner.tsx delete mode 100644 packages/nextjs/components/scaffold-eth/Contract/ContractReadMethods.tsx delete mode 100644 packages/nextjs/components/scaffold-eth/Contract/ContractWriteMethods.tsx create mode 100644 packages/nextjs/components/scaffold-eth/ProgressBar.tsx delete mode 100644 packages/nextjs/components/scaffold-eth/RainbowKitCustomConnectButton.tsx create mode 100644 packages/nextjs/components/scaffold-eth/RainbowKitCustomConnectButton/AddressInfoDropdown.tsx create mode 100644 packages/nextjs/components/scaffold-eth/RainbowKitCustomConnectButton/AddressQRCodeModal.tsx create mode 100644 packages/nextjs/components/scaffold-eth/RainbowKitCustomConnectButton/NetworkOptions.tsx create mode 100644 packages/nextjs/components/scaffold-eth/RainbowKitCustomConnectButton/WrongNetworkDropdown.tsx create mode 100644 packages/nextjs/components/scaffold-eth/RainbowKitCustomConnectButton/index.tsx create mode 100644 packages/nextjs/hooks/scaffold-eth/useDarkMode.ts create mode 100644 packages/nextjs/hooks/scaffold-eth/useTargetNetwork.ts delete mode 100644 packages/nextjs/pages/blockexplorer/address/[address].tsx delete mode 100644 packages/nextjs/pages/debug.tsx delete mode 100644 packages/nextjs/pages/repTokensDemo.tsx delete mode 100644 packages/nextjs/public/atxdao-logo.png create mode 100644 packages/nextjs/types/utils.ts delete mode 100644 packages/nextjs/utils/scaffold-eth/contractNames.ts create mode 100644 packages/nextjs/utils/scaffold-eth/contractsData.ts create mode 100644 packages/nextjs/utils/scaffold-eth/getMetadata.ts create mode 100644 packages/nextjs/utils/scaffold-eth/getParsedError.ts diff --git a/.github/ISSUE_TEMPLATE/bug_report.yml b/.github/ISSUE_TEMPLATE/bug_report.yml deleted file mode 100644 index fea43a3..0000000 --- a/.github/ISSUE_TEMPLATE/bug_report.yml +++ /dev/null @@ -1,47 +0,0 @@ -name: Bug Report -description: File a bug/issue -title: 'bug: ' -body: - - type: markdown - attributes: - value: | - Thanks for taking the time to fill out this bug report! The more info you provide, the more we can help you ๐Ÿ™Œ - - - type: checkboxes - attributes: - label: Is there an existing issue for this? - description: Please search to see if an issue already exists for the bug you encountered. - options: - - label: I have looked through the [existing issues](https://github.com/scaffold-eth/scaffold-eth-2/issues) - required: true - - - type: textarea - attributes: - label: Current Behavior - description: A concise description of what you're experiencing. - validations: - required: false - - - type: textarea - attributes: - label: Expected Behavior - description: A concise description of what you expected to happen. - validations: - required: false - - - type: textarea - attributes: - label: Steps To Reproduce - description: Steps or code snippets to reproduce the behavior. - validations: - required: false - - - type: textarea - attributes: - label: Anything else? - description: | - Browser info? Screenshots? Anything that will give us more context about the issue you are encountering! - - Tip: You can attach images or log files by clicking this area to highlight it and then dragging files in. - validations: - required: false \ No newline at end of file diff --git a/.github/ISSUE_TEMPLATE/config.yml b/.github/ISSUE_TEMPLATE/config.yml deleted file mode 100644 index 0261210..0000000 --- a/.github/ISSUE_TEMPLATE/config.yml +++ /dev/null @@ -1,8 +0,0 @@ -blank_issues_enabled: true -contact_links: - - name: Ask Question - url: https://github.com/scaffold-eth/scaffold-eth-2/discussions/new?category=q-a - about: Ask questions and discuss with other community members - - name: Request Feature - url: https://github.com/scaffold-eth/scaffold-eth-2/discussions/new?category=ideas - about: Requests features or brainstorm ideas for new functionality \ No newline at end of file diff --git a/.github/pull_request_template.md b/.github/pull_request_template.md deleted file mode 100644 index 9db8868..0000000 --- a/.github/pull_request_template.md +++ /dev/null @@ -1,16 +0,0 @@ -## Description - -_Concise description of proposed changes, We recommend using screenshots and videos for better description_ - -## Additional Information - -- [ ] I have read the [contributing docs](/scaffold-eth/scaffold-eth-2/blob/main/CONTRIBUTING.md) (if this is your first contribution) -- [ ] This is not a duplicate of any [existing pull request](https://github.com/scaffold-eth/scaffold-eth-2/pulls) - -## Related Issues - -_Closes #{issue number}_ - -_Note: If your changes are small and straightforward, you may skip the creation of an issue beforehand and remove this section. However, for medium-to-large changes, it is recommended to have an open issue for discussion and approval prior to submitting a pull request._ - -Your ENS/address: diff --git a/.github/workflows/lint.yaml b/.github/workflows/lint.yaml index c8dfa53..9938cae 100644 --- a/.github/workflows/lint.yaml +++ b/.github/workflows/lint.yaml @@ -15,7 +15,7 @@ jobs: strategy: matrix: os: [ubuntu-latest] - node: [16.x] + node: [lts/*] steps: - name: Checkout @@ -25,25 +25,13 @@ jobs: uses: actions/setup-node@v3 with: node-version: ${{ matrix.node }} - cache : yarn + cache: yarn - name: Install dependencies run: yarn install --immutable - - name: Install Foundry - uses: foundry-rs/foundry-toolchain@v1 - - - name: Run foundry node, deploy contracts (& generate contracts typescript output) - env: - ETHERSCAN_API_KEY: ${{ secrets.ETHERSCAN_API_KEY }} + - name: Run hardhat node, deploy contracts (& generate contracts typescript output) run: yarn chain & yarn deploy - id: build - - - name: Run tests - run: forge test -vvv - - - name: Run snapshot - run: forge snapshot - name: Run nextjs lint run: yarn next:lint --max-warnings=0 @@ -51,5 +39,5 @@ jobs: - name: Check typings on nextjs run: yarn next:check-types - #- name: Run hardhat lint - # run: yarn hardhat:lint --max-warnings=0 + - name: Run hardhat lint + run: yarn hardhat:lint --max-warnings=0 diff --git a/.gitmodules b/.gitmodules index 2aab2bf..fd8e0a9 100644 --- a/.gitmodules +++ b/.gitmodules @@ -9,4 +9,4 @@ url = https://github.com/gnsps/solidity-bytes-utils [submodule "packages/foundry/lib/reputation"] path = packages/foundry/lib/reputation - url = https://github.com/atxdao/reputation + url = https://github.com/ATXDAO/reputation diff --git a/README.md b/README.md index 542c0f4..7c1ad00 100644 --- a/README.md +++ b/README.md @@ -2,7 +2,7 @@ ๐Ÿงช An open-source, up-to-date toolkit for building decentralized applications (dapps) on the Ethereum blockchain. It's designed to make it easier for developers to create and deploy smart contracts and build user interfaces that interact with those contracts. -โš™๏ธ Built using NextJS, RainbowKit, Hardhat, Wagmi, and Typescript. +โš™๏ธ Built using NextJS, RainbowKit, Hardhat, Wagmi, Viem, and Typescript. - โœ… **Contract Hot Reload**: Your frontend auto-adapts to your smart contract as you edit it. - ๐Ÿ”ฅ **Burner Wallet & Local Faucet**: Quickly test your application with a burner wallet and local faucet. @@ -114,6 +114,14 @@ You can verify your smart contract on Etherscan by running: yarn verify --network network_name ``` +eg: `yarn verify --network sepolia` + +This uses [etherscan-verify from hardhat-deploy](https://www.npmjs.com/package/hardhat-deploy#4-hardhat-etherscan-verify) to verify all the deployed contracts. + +You can alternatively use [hardhat-verify](https://hardhat.org/hardhat-runner/plugins/nomicfoundation-hardhat-verify) to verify your contracts, passing network name, contract address and constructor arguments (if any): `yarn hardhat-verify --network network_name contract_address "Constructor arg 1"` + +If the chain you're using is not supported by any of the verifying methods, you can add new supported chains to your chosen method, either [etherscan-verify](https://www.npmjs.com/package/hardhat-deploy#options-2) or [hardhat-verify](https://hardhat.org/hardhat-runner/plugins/nomicfoundation-hardhat-verify#adding-support-for-other-networks). + ## Deploying your NextJS App **Hint**: We recommend connecting your GitHub repo to Vercel (through the Vercel UI) so it gets automatically deployed when pushing to `main`. diff --git a/package.json b/package.json index 9ad2091..8475360 100644 --- a/package.json +++ b/package.json @@ -37,4 +37,4 @@ "lint-staged": "~13.2.2" }, "packageManager": "yarn@3.2.3" -} \ No newline at end of file +} diff --git a/packages/foundry/deployments/5.json b/packages/foundry/deployments/5.json deleted file mode 100644 index 3c104b5..0000000 --- a/packages/foundry/deployments/5.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "networkName": "Goerli" -} \ No newline at end of file diff --git a/packages/foundry/lib/forge-std/.gitattributes b/packages/foundry/lib/forge-std/.gitattributes new file mode 100644 index 0000000..27042d4 --- /dev/null +++ b/packages/foundry/lib/forge-std/.gitattributes @@ -0,0 +1 @@ +src/Vm.sol linguist-generated diff --git a/packages/foundry/lib/forge-std/package.json b/packages/foundry/lib/forge-std/package.json index 749695a..acc004b 100644 --- a/packages/foundry/lib/forge-std/package.json +++ b/packages/foundry/lib/forge-std/package.json @@ -1,6 +1,6 @@ { "name": "forge-std", - "version": "1.7.2", + "version": "1.7.6", "description": "Forge Standard Library is a collection of helpful contracts and libraries for use with Forge and Foundry.", "homepage": "https://book.getfoundry.sh/forge/forge-std", "bugs": "https://github.com/foundry-rs/forge-std/issues", diff --git a/packages/foundry/lib/forge-std/scripts/vm.py b/packages/foundry/lib/forge-std/scripts/vm.py new file mode 100755 index 0000000..3cb8452 --- /dev/null +++ b/packages/foundry/lib/forge-std/scripts/vm.py @@ -0,0 +1,635 @@ +#!/usr/bin/env python3 + +import copy +import json +import re +import subprocess +from enum import Enum as PyEnum +from typing import Callable +from urllib import request + +VoidFn = Callable[[], None] + +CHEATCODES_JSON_URL = "https://raw.githubusercontent.com/foundry-rs/foundry/master/crates/cheatcodes/assets/cheatcodes.json" +OUT_PATH = "src/Vm.sol" + +VM_SAFE_DOC = """\ +/// The `VmSafe` interface does not allow manipulation of the EVM state or other actions that may +/// result in Script simulations differing from on-chain execution. It is recommended to only use +/// these cheats in scripts. +""" + +VM_DOC = """\ +/// The `Vm` interface does allow manipulation of the EVM state. These are all intended to be used +/// in tests, but it is not recommended to use these cheats in scripts. +""" + + +def main(): + json_str = request.urlopen(CHEATCODES_JSON_URL).read().decode("utf-8") + contract = Cheatcodes.from_json(json_str) + + ccs = contract.cheatcodes + ccs = list(filter(lambda cc: cc.status != "experimental", ccs)) + ccs.sort(key=lambda cc: cc.func.id) + + safe = list(filter(lambda cc: cc.safety == "safe", ccs)) + safe.sort(key=CmpCheatcode) + unsafe = list(filter(lambda cc: cc.safety == "unsafe", ccs)) + unsafe.sort(key=CmpCheatcode) + assert len(safe) + len(unsafe) == len(ccs) + + prefix_with_group_headers(safe) + prefix_with_group_headers(unsafe) + + out = "" + + out += "// Automatically @generated by scripts/vm.py. Do not modify manually.\n\n" + + pp = CheatcodesPrinter( + spdx_identifier="MIT OR Apache-2.0", + solidity_requirement=">=0.6.2 <0.9.0", + abicoder_pragma=True, + ) + pp.p_prelude() + pp.prelude = False + out += pp.finish() + + out += "\n\n" + out += VM_SAFE_DOC + vm_safe = Cheatcodes( + # TODO: Custom errors were introduced in 0.8.4 + errors=[], # contract.errors + events=contract.events, + enums=contract.enums, + structs=contract.structs, + cheatcodes=safe, + ) + pp.p_contract(vm_safe, "VmSafe") + out += pp.finish() + + out += "\n\n" + out += VM_DOC + vm_unsafe = Cheatcodes( + errors=[], + events=[], + enums=[], + structs=[], + cheatcodes=unsafe, + ) + pp.p_contract(vm_unsafe, "Vm", "VmSafe") + out += pp.finish() + + # Compatibility with <0.8.0 + def memory_to_calldata(m: re.Match) -> str: + return " calldata " + m.group(1) + + out = re.sub(r" memory (.*returns)", memory_to_calldata, out) + + with open(OUT_PATH, "w") as f: + f.write(out) + + forge_fmt = ["forge", "fmt", OUT_PATH] + res = subprocess.run(forge_fmt) + assert res.returncode == 0, f"command failed: {forge_fmt}" + + print(f"Wrote to {OUT_PATH}") + + +class CmpCheatcode: + cheatcode: "Cheatcode" + + def __init__(self, cheatcode: "Cheatcode"): + self.cheatcode = cheatcode + + def __lt__(self, other: "CmpCheatcode") -> bool: + return cmp_cheatcode(self.cheatcode, other.cheatcode) < 0 + + def __eq__(self, other: "CmpCheatcode") -> bool: + return cmp_cheatcode(self.cheatcode, other.cheatcode) == 0 + + def __gt__(self, other: "CmpCheatcode") -> bool: + return cmp_cheatcode(self.cheatcode, other.cheatcode) > 0 + + +def cmp_cheatcode(a: "Cheatcode", b: "Cheatcode") -> int: + if a.group != b.group: + return -1 if a.group < b.group else 1 + if a.status != b.status: + return -1 if a.status < b.status else 1 + if a.safety != b.safety: + return -1 if a.safety < b.safety else 1 + if a.func.id != b.func.id: + return -1 if a.func.id < b.func.id else 1 + return 0 + + +# HACK: A way to add group header comments without having to modify printer code +def prefix_with_group_headers(cheats: list["Cheatcode"]): + s = set() + for i, cheat in enumerate(cheats): + if cheat.group in s: + continue + + s.add(cheat.group) + + c = copy.deepcopy(cheat) + c.func.description = "" + c.func.declaration = f"// ======== {group(c.group)} ========" + cheats.insert(i, c) + return cheats + + +def group(s: str) -> str: + if s == "evm": + return "EVM" + if s == "json": + return "JSON" + return s[0].upper() + s[1:] + + +class Visibility(PyEnum): + EXTERNAL: str = "external" + PUBLIC: str = "public" + INTERNAL: str = "internal" + PRIVATE: str = "private" + + def __str__(self): + return self.value + + +class Mutability(PyEnum): + PURE: str = "pure" + VIEW: str = "view" + NONE: str = "" + + def __str__(self): + return self.value + + +class Function: + id: str + description: str + declaration: str + visibility: Visibility + mutability: Mutability + signature: str + selector: str + selector_bytes: bytes + + def __init__( + self, + id: str, + description: str, + declaration: str, + visibility: Visibility, + mutability: Mutability, + signature: str, + selector: str, + selector_bytes: bytes, + ): + self.id = id + self.description = description + self.declaration = declaration + self.visibility = visibility + self.mutability = mutability + self.signature = signature + self.selector = selector + self.selector_bytes = selector_bytes + + @staticmethod + def from_dict(d: dict) -> "Function": + return Function( + d["id"], + d["description"], + d["declaration"], + Visibility(d["visibility"]), + Mutability(d["mutability"]), + d["signature"], + d["selector"], + bytes(d["selectorBytes"]), + ) + + +class Cheatcode: + func: Function + group: str + status: str + safety: str + + def __init__(self, func: Function, group: str, status: str, safety: str): + self.func = func + self.group = group + self.status = status + self.safety = safety + + @staticmethod + def from_dict(d: dict) -> "Cheatcode": + return Cheatcode( + Function.from_dict(d["func"]), + str(d["group"]), + str(d["status"]), + str(d["safety"]), + ) + + +class Error: + name: str + description: str + declaration: str + + def __init__(self, name: str, description: str, declaration: str): + self.name = name + self.description = description + self.declaration = declaration + + @staticmethod + def from_dict(d: dict) -> "Error": + return Error(**d) + + +class Event: + name: str + description: str + declaration: str + + def __init__(self, name: str, description: str, declaration: str): + self.name = name + self.description = description + self.declaration = declaration + + @staticmethod + def from_dict(d: dict) -> "Event": + return Event(**d) + + +class EnumVariant: + name: str + description: str + + def __init__(self, name: str, description: str): + self.name = name + self.description = description + + +class Enum: + name: str + description: str + variants: list[EnumVariant] + + def __init__(self, name: str, description: str, variants: list[EnumVariant]): + self.name = name + self.description = description + self.variants = variants + + @staticmethod + def from_dict(d: dict) -> "Enum": + return Enum( + d["name"], + d["description"], + list(map(lambda v: EnumVariant(**v), d["variants"])), + ) + + +class StructField: + name: str + ty: str + description: str + + def __init__(self, name: str, ty: str, description: str): + self.name = name + self.ty = ty + self.description = description + + +class Struct: + name: str + description: str + fields: list[StructField] + + def __init__(self, name: str, description: str, fields: list[StructField]): + self.name = name + self.description = description + self.fields = fields + + @staticmethod + def from_dict(d: dict) -> "Struct": + return Struct( + d["name"], + d["description"], + list(map(lambda f: StructField(**f), d["fields"])), + ) + + +class Cheatcodes: + errors: list[Error] + events: list[Event] + enums: list[Enum] + structs: list[Struct] + cheatcodes: list[Cheatcode] + + def __init__( + self, + errors: list[Error], + events: list[Event], + enums: list[Enum], + structs: list[Struct], + cheatcodes: list[Cheatcode], + ): + self.errors = errors + self.events = events + self.enums = enums + self.structs = structs + self.cheatcodes = cheatcodes + + @staticmethod + def from_dict(d: dict) -> "Cheatcodes": + return Cheatcodes( + errors=[Error.from_dict(e) for e in d["errors"]], + events=[Event.from_dict(e) for e in d["events"]], + enums=[Enum.from_dict(e) for e in d["enums"]], + structs=[Struct.from_dict(e) for e in d["structs"]], + cheatcodes=[Cheatcode.from_dict(e) for e in d["cheatcodes"]], + ) + + @staticmethod + def from_json(s) -> "Cheatcodes": + return Cheatcodes.from_dict(json.loads(s)) + + @staticmethod + def from_json_file(file_path: str) -> "Cheatcodes": + with open(file_path, "r") as f: + return Cheatcodes.from_dict(json.load(f)) + + +class Item(PyEnum): + ERROR: str = "error" + EVENT: str = "event" + ENUM: str = "enum" + STRUCT: str = "struct" + FUNCTION: str = "function" + + +class ItemOrder: + _list: list[Item] + + def __init__(self, list: list[Item]) -> None: + assert len(list) <= len(Item), "list must not contain more items than Item" + assert len(list) == len(set(list)), "list must not contain duplicates" + self._list = list + pass + + def get_list(self) -> list[Item]: + return self._list + + @staticmethod + def default() -> "ItemOrder": + return ItemOrder( + [ + Item.ERROR, + Item.EVENT, + Item.ENUM, + Item.STRUCT, + Item.FUNCTION, + ] + ) + + +class CheatcodesPrinter: + buffer: str + + prelude: bool + spdx_identifier: str + solidity_requirement: str + abicoder_v2: bool + + block_doc_style: bool + + indent_level: int + _indent_str: str + + nl_str: str + + items_order: ItemOrder + + def __init__( + self, + buffer: str = "", + prelude: bool = True, + spdx_identifier: str = "UNLICENSED", + solidity_requirement: str = "", + abicoder_pragma: bool = False, + block_doc_style: bool = False, + indent_level: int = 0, + indent_with: int | str = 4, + nl_str: str = "\n", + items_order: ItemOrder = ItemOrder.default(), + ): + self.prelude = prelude + self.spdx_identifier = spdx_identifier + self.solidity_requirement = solidity_requirement + self.abicoder_v2 = abicoder_pragma + self.block_doc_style = block_doc_style + self.buffer = buffer + self.indent_level = indent_level + self.nl_str = nl_str + + if isinstance(indent_with, int): + assert indent_with >= 0 + self._indent_str = " " * indent_with + elif isinstance(indent_with, str): + self._indent_str = indent_with + else: + assert False, "indent_with must be int or str" + + self.items_order = items_order + + def finish(self) -> str: + ret = self.buffer.rstrip() + self.buffer = "" + return ret + + def p_contract(self, contract: Cheatcodes, name: str, inherits: str = ""): + if self.prelude: + self.p_prelude(contract) + + self._p_str("interface ") + name = name.strip() + if name != "": + self._p_str(name) + self._p_str(" ") + if inherits != "": + self._p_str("is ") + self._p_str(inherits) + self._p_str(" ") + self._p_str("{") + self._p_nl() + self._with_indent(lambda: self._p_items(contract)) + self._p_str("}") + self._p_nl() + + def _p_items(self, contract: Cheatcodes): + for item in self.items_order.get_list(): + if item == Item.ERROR: + self.p_errors(contract.errors) + elif item == Item.EVENT: + self.p_events(contract.events) + elif item == Item.ENUM: + self.p_enums(contract.enums) + elif item == Item.STRUCT: + self.p_structs(contract.structs) + elif item == Item.FUNCTION: + self.p_functions(contract.cheatcodes) + else: + assert False, f"unknown item {item}" + + def p_prelude(self, contract: Cheatcodes | None = None): + self._p_str(f"// SPDX-License-Identifier: {self.spdx_identifier}") + self._p_nl() + + if self.solidity_requirement != "": + req = self.solidity_requirement + elif contract and len(contract.errors) > 0: + req = ">=0.8.4 <0.9.0" + else: + req = ">=0.6.0 <0.9.0" + self._p_str(f"pragma solidity {req};") + self._p_nl() + + if self.abicoder_v2: + self._p_str("pragma experimental ABIEncoderV2;") + self._p_nl() + + self._p_nl() + + def p_errors(self, errors: list[Error]): + for error in errors: + self._p_line(lambda: self.p_error(error)) + + def p_error(self, error: Error): + self._p_comment(error.description, doc=True) + self._p_line(lambda: self._p_str(error.declaration)) + + def p_events(self, events: list[Event]): + for event in events: + self._p_line(lambda: self.p_event(event)) + + def p_event(self, event: Event): + self._p_comment(event.description, doc=True) + self._p_line(lambda: self._p_str(event.declaration)) + + def p_enums(self, enums: list[Enum]): + for enum in enums: + self._p_line(lambda: self.p_enum(enum)) + + def p_enum(self, enum: Enum): + self._p_comment(enum.description, doc=True) + self._p_line(lambda: self._p_str(f"enum {enum.name} {{")) + self._with_indent(lambda: self.p_enum_variants(enum.variants)) + self._p_line(lambda: self._p_str("}")) + + def p_enum_variants(self, variants: list[EnumVariant]): + for i, variant in enumerate(variants): + self._p_indent() + self._p_comment(variant.description) + + self._p_indent() + self._p_str(variant.name) + if i < len(variants) - 1: + self._p_str(",") + self._p_nl() + + def p_structs(self, structs: list[Struct]): + for struct in structs: + self._p_line(lambda: self.p_struct(struct)) + + def p_struct(self, struct: Struct): + self._p_comment(struct.description, doc=True) + self._p_line(lambda: self._p_str(f"struct {struct.name} {{")) + self._with_indent(lambda: self.p_struct_fields(struct.fields)) + self._p_line(lambda: self._p_str("}")) + + def p_struct_fields(self, fields: list[StructField]): + for field in fields: + self._p_line(lambda: self.p_struct_field(field)) + + def p_struct_field(self, field: StructField): + self._p_comment(field.description) + self._p_indented(lambda: self._p_str(f"{field.ty} {field.name};")) + + def p_functions(self, cheatcodes: list[Cheatcode]): + for cheatcode in cheatcodes: + self._p_line(lambda: self.p_function(cheatcode.func)) + + def p_function(self, func: Function): + self._p_comment(func.description, doc=True) + self._p_line(lambda: self._p_str(func.declaration)) + + def _p_comment(self, s: str, doc: bool = False): + s = s.strip() + if s == "": + return + + s = map(lambda line: line.lstrip(), s.split("\n")) + if self.block_doc_style: + self._p_str("/*") + if doc: + self._p_str("*") + self._p_nl() + for line in s: + self._p_indent() + self._p_str(" ") + if doc: + self._p_str("* ") + self._p_str(line) + self._p_nl() + self._p_indent() + self._p_str(" */") + self._p_nl() + else: + first_line = True + for line in s: + if not first_line: + self._p_indent() + first_line = False + + if doc: + self._p_str("/// ") + else: + self._p_str("// ") + self._p_str(line) + self._p_nl() + + def _with_indent(self, f: VoidFn): + self._inc_indent() + f() + self._dec_indent() + + def _p_line(self, f: VoidFn): + self._p_indent() + f() + self._p_nl() + + def _p_indented(self, f: VoidFn): + self._p_indent() + f() + + def _p_indent(self): + for _ in range(self.indent_level): + self._p_str(self._indent_str) + + def _p_nl(self): + self._p_str(self.nl_str) + + def _p_str(self, txt: str): + self.buffer += txt + + def _inc_indent(self): + self.indent_level += 1 + + def _dec_indent(self): + self.indent_level -= 1 + + +if __name__ == "__main__": + main() diff --git a/packages/foundry/lib/forge-std/src/StdChains.sol b/packages/foundry/lib/forge-std/src/StdChains.sol index 7ad12cc..bdc1c56 100644 --- a/packages/foundry/lib/forge-std/src/StdChains.sol +++ b/packages/foundry/lib/forge-std/src/StdChains.sol @@ -148,7 +148,11 @@ abstract contract StdChains { // lookup rpcUrl, in descending order of priority: // current -> config (foundry.toml) -> environment variable -> default - function getChainWithUpdatedRpcUrl(string memory chainAlias, Chain memory chain) private returns (Chain memory) { + function getChainWithUpdatedRpcUrl(string memory chainAlias, Chain memory chain) + private + view + returns (Chain memory) + { if (bytes(chain.rpcUrl).length == 0) { try vm.rpcUrl(chainAlias) returns (string memory configRpcUrl) { chain.rpcUrl = configRpcUrl; diff --git a/packages/foundry/lib/forge-std/src/StdCheats.sol b/packages/foundry/lib/forge-std/src/StdCheats.sol index 008b743..f293313 100644 --- a/packages/foundry/lib/forge-std/src/StdCheats.sol +++ b/packages/foundry/lib/forge-std/src/StdCheats.sol @@ -697,7 +697,7 @@ abstract contract StdCheats is StdCheatsSafe { } function changePrank(address msgSender) internal virtual { - console2_log("changePrank is deprecated. Please use vm.startPrank instead."); + console2_log_StdCheats("changePrank is deprecated. Please use vm.startPrank instead."); vm.stopPrank(); vm.startPrank(msgSender); } @@ -810,7 +810,7 @@ abstract contract StdCheats is StdCheatsSafe { } // Used to prevent the compilation of console, which shortens the compilation time when console is not used elsewhere. - function console2_log(string memory p0) private view { + function console2_log_StdCheats(string memory p0) private view { (bool status,) = address(CONSOLE2_ADDRESS).staticcall(abi.encodeWithSignature("log(string)", p0)); status; } diff --git a/packages/foundry/lib/forge-std/src/StdUtils.sol b/packages/foundry/lib/forge-std/src/StdUtils.sol index ad9566e..0f61305 100644 --- a/packages/foundry/lib/forge-std/src/StdUtils.sol +++ b/packages/foundry/lib/forge-std/src/StdUtils.sol @@ -4,6 +4,8 @@ pragma solidity >=0.6.2 <0.9.0; pragma experimental ABIEncoderV2; import {IMulticall3} from "./interfaces/IMulticall3.sol"; +import {MockERC20} from "./mocks/MockERC20.sol"; +import {MockERC721} from "./mocks/MockERC721.sol"; import {VmSafe} from "./Vm.sol"; abstract contract StdUtils { @@ -55,9 +57,9 @@ abstract contract StdUtils { } } - function bound(uint256 x, uint256 min, uint256 max) internal view virtual returns (uint256 result) { + function bound(uint256 x, uint256 min, uint256 max) internal pure virtual returns (uint256 result) { result = _bound(x, min, max); - console2_log("Bound Result", result); + console2_log_StdUtils("Bound Result", result); } function _bound(int256 x, int256 min, int256 max) internal pure virtual returns (int256 result) { @@ -80,9 +82,9 @@ abstract contract StdUtils { result = y < INT256_MIN_ABS ? int256(~(INT256_MIN_ABS - y) + 1) : int256(y - INT256_MIN_ABS); } - function bound(int256 x, int256 min, int256 max) internal view virtual returns (int256 result) { + function bound(int256 x, int256 min, int256 max) internal pure virtual returns (int256 result) { result = _bound(x, min, max); - console2_log("Bound result", vm.toString(result)); + console2_log_StdUtils("Bound result", vm.toString(result)); } function boundPrivateKey(uint256 privateKey) internal pure virtual returns (uint256 result) { @@ -97,26 +99,8 @@ abstract contract StdUtils { /// @dev Compute the address a contract will be deployed at for a given deployer address and nonce /// @notice adapted from Solmate implementation (https://github.com/Rari-Capital/solmate/blob/main/src/utils/LibRLP.sol) function computeCreateAddress(address deployer, uint256 nonce) internal pure virtual returns (address) { - // forgefmt: disable-start - // The integer zero is treated as an empty byte string, and as a result it only has a length prefix, 0x80, computed via 0x80 + 0. - // A one byte integer uses its own value as its length prefix, there is no additional "0x80 + length" prefix that comes before it. - if (nonce == 0x00) return addressFromLast20Bytes(keccak256(abi.encodePacked(bytes1(0xd6), bytes1(0x94), deployer, bytes1(0x80)))); - if (nonce <= 0x7f) return addressFromLast20Bytes(keccak256(abi.encodePacked(bytes1(0xd6), bytes1(0x94), deployer, uint8(nonce)))); - - // Nonces greater than 1 byte all follow a consistent encoding scheme, where each value is preceded by a prefix of 0x80 + length. - if (nonce <= 2**8 - 1) return addressFromLast20Bytes(keccak256(abi.encodePacked(bytes1(0xd7), bytes1(0x94), deployer, bytes1(0x81), uint8(nonce)))); - if (nonce <= 2**16 - 1) return addressFromLast20Bytes(keccak256(abi.encodePacked(bytes1(0xd8), bytes1(0x94), deployer, bytes1(0x82), uint16(nonce)))); - if (nonce <= 2**24 - 1) return addressFromLast20Bytes(keccak256(abi.encodePacked(bytes1(0xd9), bytes1(0x94), deployer, bytes1(0x83), uint24(nonce)))); - // forgefmt: disable-end - - // More details about RLP encoding can be found here: https://eth.wiki/fundamentals/rlp - // 0xda = 0xc0 (short RLP prefix) + 0x16 (length of: 0x94 ++ proxy ++ 0x84 ++ nonce) - // 0x94 = 0x80 + 0x14 (0x14 = the length of an address, 20 bytes, in hex) - // 0x84 = 0x80 + 0x04 (0x04 = the bytes length of the nonce, 4 bytes, in hex) - // We assume nobody can have a nonce large enough to require more than 32 bytes. - return addressFromLast20Bytes( - keccak256(abi.encodePacked(bytes1(0xda), bytes1(0x94), deployer, bytes1(0x84), uint32(nonce))) - ); + console2_log_StdUtils("computeCreateAddress is deprecated. Please use vm.computeCreateAddress instead."); + return vm.computeCreateAddress(deployer, nonce); } function computeCreate2Address(bytes32 salt, bytes32 initcodeHash, address deployer) @@ -125,12 +109,29 @@ abstract contract StdUtils { virtual returns (address) { - return addressFromLast20Bytes(keccak256(abi.encodePacked(bytes1(0xff), deployer, salt, initcodeHash))); + console2_log_StdUtils("computeCreate2Address is deprecated. Please use vm.computeCreate2Address instead."); + return vm.computeCreate2Address(salt, initcodeHash, deployer); } /// @dev returns the address of a contract created with CREATE2 using the default CREATE2 deployer function computeCreate2Address(bytes32 salt, bytes32 initCodeHash) internal pure returns (address) { - return computeCreate2Address(salt, initCodeHash, CREATE2_FACTORY); + console2_log_StdUtils("computeCreate2Address is deprecated. Please use vm.computeCreate2Address instead."); + return vm.computeCreate2Address(salt, initCodeHash); + } + + /// @dev returns an initialized mock ERC20 contract + function deployMockERC20(string memory name, string memory symbol, uint8 decimals) + internal + returns (MockERC20 mock) + { + mock = new MockERC20(); + mock.initialize(name, symbol, decimals); + } + + /// @dev returns an initialized mock ERC721 contract + function deployMockERC721(string memory name, string memory symbol) internal returns (MockERC721 mock) { + mock = new MockERC721(); + mock.initialize(name, symbol); } /// @dev returns the hash of the init code (creation code + no args) used in CREATE2 with no constructor arguments @@ -184,15 +185,42 @@ abstract contract StdUtils { return address(uint160(uint256(bytesValue))); } - // Used to prevent the compilation of console, which shortens the compilation time when console is not used elsewhere. + // This section is used to prevent the compilation of console, which shortens the compilation time when console is + // not used elsewhere. We also trick the compiler into letting us make the console log methods as `pure` to avoid + // any breaking changes to function signatures. + function _castLogPayloadViewToPure(function(bytes memory) internal view fnIn) + internal + pure + returns (function(bytes memory) internal pure fnOut) + { + assembly { + fnOut := fnIn + } + } + + function _sendLogPayload(bytes memory payload) internal pure { + _castLogPayloadViewToPure(_sendLogPayloadView)(payload); + } + + function _sendLogPayloadView(bytes memory payload) private view { + uint256 payloadLength = payload.length; + address consoleAddress = CONSOLE2_ADDRESS; + /// @solidity memory-safe-assembly + assembly { + let payloadStart := add(payload, 32) + let r := staticcall(gas(), consoleAddress, payloadStart, payloadLength, 0, 0) + } + } + + function console2_log_StdUtils(string memory p0) private pure { + _sendLogPayload(abi.encodeWithSignature("log(string)", p0)); + } - function console2_log(string memory p0, uint256 p1) private view { - (bool status,) = address(CONSOLE2_ADDRESS).staticcall(abi.encodeWithSignature("log(string,uint256)", p0, p1)); - status; + function console2_log_StdUtils(string memory p0, uint256 p1) private pure { + _sendLogPayload(abi.encodeWithSignature("log(string,uint256)", p0, p1)); } - function console2_log(string memory p0, string memory p1) private view { - (bool status,) = address(CONSOLE2_ADDRESS).staticcall(abi.encodeWithSignature("log(string,string)", p0, p1)); - status; + function console2_log_StdUtils(string memory p0, string memory p1) private pure { + _sendLogPayload(abi.encodeWithSignature("log(string,string)", p0, p1)); } } diff --git a/packages/foundry/lib/forge-std/src/Vm.sol b/packages/foundry/lib/forge-std/src/Vm.sol index 67ae315..cbb3e4a 100644 --- a/packages/foundry/lib/forge-std/src/Vm.sol +++ b/packages/foundry/lib/forge-std/src/Vm.sol @@ -1,768 +1,1114 @@ -// SPDX-License-Identifier: MIT -pragma solidity >=0.6.2 <0.9.0; +// Automatically @generated by scripts/vm.py. Do not modify manually. +// SPDX-License-Identifier: MIT OR Apache-2.0 +pragma solidity >=0.6.2 <0.9.0; pragma experimental ABIEncoderV2; -// Cheatcodes are marked as view/pure/none using the following rules: -// 0. A call's observable behaviour includes its return value, logs, reverts and state writes, -// 1. If you can influence a later call's observable behaviour, you're neither `view` nor `pure (you are modifying some state be it the EVM, interpreter, filesystem, etc), -// 2. Otherwise if you can be influenced by an earlier call, or if reading some state, you're `view`, -// 3. Otherwise you're `pure`. - -// The `VmSafe` interface does not allow manipulation of the EVM state or other actions that may -// result in Script simulations differing from on-chain execution. It is recommended to only use -// these cheats in scripts. +/// The `VmSafe` interface does not allow manipulation of the EVM state or other actions that may +/// result in Script simulations differing from on-chain execution. It is recommended to only use +/// these cheats in scripts. interface VmSafe { - // ======== Types ======== + /// A modification applied to either `msg.sender` or `tx.origin`. Returned by `readCallers`. enum CallerMode { + // No caller modification is currently active. None, + // A one time broadcast triggered by a `vm.broadcast()` call is currently active. Broadcast, + // A recurrent broadcast triggered by a `vm.startBroadcast()` call is currently active. RecurrentBroadcast, + // A one time prank triggered by a `vm.prank()` call is currently active. Prank, + // A recurrent prank triggered by a `vm.startPrank()` call is currently active. RecurrentPrank } + /// The kind of account access that occurred. + enum AccountAccessKind { + // The account was called. + Call, + // The account was called via delegatecall. + DelegateCall, + // The account was called via callcode. + CallCode, + // The account was called via staticcall. + StaticCall, + // The account was created. + Create, + // The account was selfdestructed. + SelfDestruct, + // Synthetic access indicating the current context has resumed after a previous sub-context (AccountAccess). + Resume, + // The account's balance was read. + Balance, + // The account's codesize was read. + Extcodesize, + // The account's codehash was read. + Extcodehash, + // The account's code was copied. + Extcodecopy + } + + /// An Ethereum log. Returned by `getRecordedLogs`. struct Log { + // The topics of the log, including the signature, if any. bytes32[] topics; + // The raw data of the log. bytes data; + // The address of the log's emitter. address emitter; } + /// An RPC URL and its alias. Returned by `rpcUrlStructs`. struct Rpc { + // The alias of the RPC URL. string key; + // The RPC URL. string url; } + /// An RPC log object. Returned by `eth_getLogs`. struct EthGetLogs { + // The address of the log's emitter. address emitter; + // The topics of the log, including the signature, if any. bytes32[] topics; + // The raw data of the log. bytes data; + // The block hash. bytes32 blockHash; + // The block number. uint64 blockNumber; + // The transaction hash. bytes32 transactionHash; + // The transaction index in the block. uint64 transactionIndex; + // The log index. uint256 logIndex; + // Whether the log was removed. bool removed; } + /// A single entry in a directory listing. Returned by `readDir`. struct DirEntry { + // The error message, if any. string errorMessage; + // The path of the entry. string path; + // The depth of the entry. uint64 depth; + // Whether the entry is a directory. bool isDir; + // Whether the entry is a symlink. bool isSymlink; } + /// Metadata information about a file. + /// This structure is returned from the `fsMetadata` function and represents known + /// metadata about a file such as its permissions, size, modification + /// times, etc. struct FsMetadata { + // True if this metadata is for a directory. bool isDir; + // True if this metadata is for a symlink. bool isSymlink; + // The size of the file, in bytes, this metadata is for. uint256 length; + // True if this metadata is for a readonly (unwritable) file. bool readOnly; + // The last modification time listed in this metadata. uint256 modified; + // The last access time of this metadata. uint256 accessed; + // The creation time listed in this metadata. uint256 created; } + /// A wallet with a public and private key. struct Wallet { + // The wallet's address. address addr; + // The wallet's public key `X`. uint256 publicKeyX; + // The wallet's public key `Y`. uint256 publicKeyY; + // The wallet's private key. uint256 privateKey; } + /// The result of a `tryFfi` call. struct FfiResult { + // The exit code of the call. int32 exitCode; + // The optionally hex-decoded `stdout` data. bytes stdout; + // The `stderr` data. bytes stderr; } - // ======== EVM ======== + /// Information on the chain and fork. + struct ChainInfo { + // The fork identifier. Set to zero if no fork is active. + uint256 forkId; + // The chain ID of the current fork. + uint256 chainId; + } - // Gets the address for a given private key - function addr(uint256 privateKey) external pure returns (address keyAddr); + /// The result of a `stopAndReturnStateDiff` call. + struct AccountAccess { + // The chain and fork the access occurred. + ChainInfo chainInfo; + // The kind of account access that determines what the account is. + // If kind is Call, DelegateCall, StaticCall or CallCode, then the account is the callee. + // If kind is Create, then the account is the newly created account. + // If kind is SelfDestruct, then the account is the selfdestruct recipient. + // If kind is a Resume, then account represents a account context that has resumed. + AccountAccessKind kind; + // The account that was accessed. + // It's either the account created, callee or a selfdestruct recipient for CREATE, CALL or SELFDESTRUCT. + address account; + // What accessed the account. + address accessor; + // If the account was initialized or empty prior to the access. + // An account is considered initialized if it has code, a + // non-zero nonce, or a non-zero balance. + bool initialized; + // The previous balance of the accessed account. + uint256 oldBalance; + // The potential new balance of the accessed account. + // That is, all balance changes are recorded here, even if reverts occurred. + uint256 newBalance; + // Code of the account deployed by CREATE. + bytes deployedCode; + // Value passed along with the account access + uint256 value; + // Input data provided to the CREATE or CALL + bytes data; + // If this access reverted in either the current or parent context. + bool reverted; + // An ordered list of storage accesses made during an account access operation. + StorageAccess[] storageAccesses; + } - // Gets the nonce of an account. - // See `getNonce(Wallet memory wallet)` for an alternative way to manage users and get their nonces. - function getNonce(address account) external view returns (uint64 nonce); + /// The storage accessed during an `AccountAccess`. + struct StorageAccess { + // The account whose storage was accessed. + address account; + // The slot that was accessed. + bytes32 slot; + // If the access was a write. + bool isWrite; + // The previous value of the slot. + bytes32 previousValue; + // The new value of the slot. + bytes32 newValue; + // If the access was reverted. + bool reverted; + } - // Loads a storage slot from an address - function load(address target, bytes32 slot) external view returns (bytes32 data); + // ======== Environment ======== - // Signs data - function sign(uint256 privateKey, bytes32 digest) external pure returns (uint8 v, bytes32 r, bytes32 s); + /// Gets the environment variable `name` and parses it as `address`. + /// Reverts if the variable was not found or could not be parsed. + function envAddress(string calldata name) external view returns (address value); - // -------- Record Storage -------- - // Records all storage reads and writes - function record() external; + /// Gets the environment variable `name` and parses it as an array of `address`, delimited by `delim`. + /// Reverts if the variable was not found or could not be parsed. + function envAddress(string calldata name, string calldata delim) external view returns (address[] memory value); - // Gets all accessed reads and write slot from a `vm.record` session, for a given address - function accesses(address target) external returns (bytes32[] memory readSlots, bytes32[] memory writeSlots); + /// Gets the environment variable `name` and parses it as `bool`. + /// Reverts if the variable was not found or could not be parsed. + function envBool(string calldata name) external view returns (bool value); - // -------- Recording Map Writes -------- + /// Gets the environment variable `name` and parses it as an array of `bool`, delimited by `delim`. + /// Reverts if the variable was not found or could not be parsed. + function envBool(string calldata name, string calldata delim) external view returns (bool[] memory value); - // Starts recording all map SSTOREs for later retrieval. - function startMappingRecording() external; + /// Gets the environment variable `name` and parses it as `bytes32`. + /// Reverts if the variable was not found or could not be parsed. + function envBytes32(string calldata name) external view returns (bytes32 value); - // Stops recording all map SSTOREs for later retrieval and clears the recorded data. - function stopMappingRecording() external; + /// Gets the environment variable `name` and parses it as an array of `bytes32`, delimited by `delim`. + /// Reverts if the variable was not found or could not be parsed. + function envBytes32(string calldata name, string calldata delim) external view returns (bytes32[] memory value); - // Gets the number of elements in the mapping at the given slot, for a given address. - function getMappingLength(address target, bytes32 mappingSlot) external returns (uint256 length); + /// Gets the environment variable `name` and parses it as `bytes`. + /// Reverts if the variable was not found or could not be parsed. + function envBytes(string calldata name) external view returns (bytes memory value); - // Gets the elements at index idx of the mapping at the given slot, for a given address. The - // index must be less than the length of the mapping (i.e. the number of keys in the mapping). - function getMappingSlotAt(address target, bytes32 mappingSlot, uint256 idx) external returns (bytes32 value); + /// Gets the environment variable `name` and parses it as an array of `bytes`, delimited by `delim`. + /// Reverts if the variable was not found or could not be parsed. + function envBytes(string calldata name, string calldata delim) external view returns (bytes[] memory value); - // Gets the map key and parent of a mapping at a given slot, for a given address. - function getMappingKeyAndParentOf(address target, bytes32 elementSlot) + /// Gets the environment variable `name` and parses it as `int256`. + /// Reverts if the variable was not found or could not be parsed. + function envInt(string calldata name) external view returns (int256 value); + + /// Gets the environment variable `name` and parses it as an array of `int256`, delimited by `delim`. + /// Reverts if the variable was not found or could not be parsed. + function envInt(string calldata name, string calldata delim) external view returns (int256[] memory value); + + /// Gets the environment variable `name` and parses it as `bool`. + /// Reverts if the variable could not be parsed. + /// Returns `defaultValue` if the variable was not found. + function envOr(string calldata name, bool defaultValue) external view returns (bool value); + + /// Gets the environment variable `name` and parses it as `uint256`. + /// Reverts if the variable could not be parsed. + /// Returns `defaultValue` if the variable was not found. + function envOr(string calldata name, uint256 defaultValue) external view returns (uint256 value); + + /// Gets the environment variable `name` and parses it as an array of `address`, delimited by `delim`. + /// Reverts if the variable could not be parsed. + /// Returns `defaultValue` if the variable was not found. + function envOr(string calldata name, string calldata delim, address[] calldata defaultValue) external - returns (bool found, bytes32 key, bytes32 parent); + view + returns (address[] memory value); - // -------- Record Logs -------- - // Record all the transaction logs - function recordLogs() external; + /// Gets the environment variable `name` and parses it as an array of `bytes32`, delimited by `delim`. + /// Reverts if the variable could not be parsed. + /// Returns `defaultValue` if the variable was not found. + function envOr(string calldata name, string calldata delim, bytes32[] calldata defaultValue) + external + view + returns (bytes32[] memory value); - // Gets all the recorded logs - function getRecordedLogs() external returns (Log[] memory logs); + /// Gets the environment variable `name` and parses it as an array of `string`, delimited by `delim`. + /// Reverts if the variable could not be parsed. + /// Returns `defaultValue` if the variable was not found. + function envOr(string calldata name, string calldata delim, string[] calldata defaultValue) + external + view + returns (string[] memory value); - // -------- Gas Metering -------- - // It's recommend to use the `noGasMetering` modifier included with forge-std, instead of - // using these functions directly. + /// Gets the environment variable `name` and parses it as an array of `bytes`, delimited by `delim`. + /// Reverts if the variable could not be parsed. + /// Returns `defaultValue` if the variable was not found. + function envOr(string calldata name, string calldata delim, bytes[] calldata defaultValue) + external + view + returns (bytes[] memory value); - // Pauses gas metering (i.e. gas usage is not counted). Noop if already paused. - function pauseGasMetering() external; + /// Gets the environment variable `name` and parses it as `int256`. + /// Reverts if the variable could not be parsed. + /// Returns `defaultValue` if the variable was not found. + function envOr(string calldata name, int256 defaultValue) external view returns (int256 value); + + /// Gets the environment variable `name` and parses it as `address`. + /// Reverts if the variable could not be parsed. + /// Returns `defaultValue` if the variable was not found. + function envOr(string calldata name, address defaultValue) external view returns (address value); + + /// Gets the environment variable `name` and parses it as `bytes32`. + /// Reverts if the variable could not be parsed. + /// Returns `defaultValue` if the variable was not found. + function envOr(string calldata name, bytes32 defaultValue) external view returns (bytes32 value); + + /// Gets the environment variable `name` and parses it as `string`. + /// Reverts if the variable could not be parsed. + /// Returns `defaultValue` if the variable was not found. + function envOr(string calldata name, string calldata defaultValue) external view returns (string memory value); + + /// Gets the environment variable `name` and parses it as `bytes`. + /// Reverts if the variable could not be parsed. + /// Returns `defaultValue` if the variable was not found. + function envOr(string calldata name, bytes calldata defaultValue) external view returns (bytes memory value); + + /// Gets the environment variable `name` and parses it as an array of `bool`, delimited by `delim`. + /// Reverts if the variable could not be parsed. + /// Returns `defaultValue` if the variable was not found. + function envOr(string calldata name, string calldata delim, bool[] calldata defaultValue) + external + view + returns (bool[] memory value); - // Resumes gas metering (i.e. gas usage is counted again). Noop if already on. - function resumeGasMetering() external; + /// Gets the environment variable `name` and parses it as an array of `uint256`, delimited by `delim`. + /// Reverts if the variable could not be parsed. + /// Returns `defaultValue` if the variable was not found. + function envOr(string calldata name, string calldata delim, uint256[] calldata defaultValue) + external + view + returns (uint256[] memory value); + + /// Gets the environment variable `name` and parses it as an array of `int256`, delimited by `delim`. + /// Reverts if the variable could not be parsed. + /// Returns `defaultValue` if the variable was not found. + function envOr(string calldata name, string calldata delim, int256[] calldata defaultValue) + external + view + returns (int256[] memory value); + + /// Gets the environment variable `name` and parses it as `string`. + /// Reverts if the variable was not found or could not be parsed. + function envString(string calldata name) external view returns (string memory value); + + /// Gets the environment variable `name` and parses it as an array of `string`, delimited by `delim`. + /// Reverts if the variable was not found or could not be parsed. + function envString(string calldata name, string calldata delim) external view returns (string[] memory value); + + /// Gets the environment variable `name` and parses it as `uint256`. + /// Reverts if the variable was not found or could not be parsed. + function envUint(string calldata name) external view returns (uint256 value); + + /// Gets the environment variable `name` and parses it as an array of `uint256`, delimited by `delim`. + /// Reverts if the variable was not found or could not be parsed. + function envUint(string calldata name, string calldata delim) external view returns (uint256[] memory value); - // -------- RPC Methods -------- + /// Sets environment variables. + function setEnv(string calldata name, string calldata value) external; + + // ======== EVM ======== + + /// Gets all accessed reads and write slot from a `vm.record` session, for a given address. + function accesses(address target) external returns (bytes32[] memory readSlots, bytes32[] memory writeSlots); + + /// Gets the address for a given private key. + function addr(uint256 privateKey) external pure returns (address keyAddr); /// Gets all the logs according to specified filter. function eth_getLogs(uint256 fromBlock, uint256 toBlock, address target, bytes32[] calldata topics) external returns (EthGetLogs[] memory logs); - // Performs an Ethereum JSON-RPC request to the current fork URL. - function rpc(string calldata method, string calldata params) external returns (bytes memory data); + /// Gets the current `block.number`. + /// You should use this instead of `block.number` if you use `vm.roll`, as `block.number` is assumed to be constant across a transaction, + /// and as a result will get optimized out by the compiler. + /// See https://github.com/foundry-rs/foundry/issues/6180 + function getBlockNumber() external view returns (uint256 height); - // ======== Test Configuration ======== + /// Gets the current `block.timestamp`. + /// You should use this instead of `block.timestamp` if you use `vm.warp`, as `block.timestamp` is assumed to be constant across a transaction, + /// and as a result will get optimized out by the compiler. + /// See https://github.com/foundry-rs/foundry/issues/6180 + function getBlockTimestamp() external view returns (uint256 timestamp); - // If the condition is false, discard this run's fuzz inputs and generate new ones. - function assume(bool condition) external pure; + /// Gets the map key and parent of a mapping at a given slot, for a given address. + function getMappingKeyAndParentOf(address target, bytes32 elementSlot) + external + returns (bool found, bytes32 key, bytes32 parent); - // Writes a breakpoint to jump to in the debugger - function breakpoint(string calldata char) external; + /// Gets the number of elements in the mapping at the given slot, for a given address. + function getMappingLength(address target, bytes32 mappingSlot) external returns (uint256 length); - // Writes a conditional breakpoint to jump to in the debugger - function breakpoint(string calldata char, bool value) external; + /// Gets the elements at index idx of the mapping at the given slot, for a given address. The + /// index must be less than the length of the mapping (i.e. the number of keys in the mapping). + function getMappingSlotAt(address target, bytes32 mappingSlot, uint256 idx) external returns (bytes32 value); - // Returns the RPC url for the given alias - function rpcUrl(string calldata rpcAlias) external view returns (string memory json); + /// Gets the nonce of an account. + function getNonce(address account) external view returns (uint64 nonce); - // Returns all rpc urls and their aliases `[alias, url][]` - function rpcUrls() external view returns (string[2][] memory urls); + /// Gets all the recorded logs. + function getRecordedLogs() external returns (Log[] memory logs); - // Returns all rpc urls and their aliases as structs. - function rpcUrlStructs() external view returns (Rpc[] memory urls); + /// Loads a storage slot from an address. + function load(address target, bytes32 slot) external view returns (bytes32 data); - // Suspends execution of the main thread for `duration` milliseconds - function sleep(uint256 duration) external; + /// Pauses gas metering (i.e. gas usage is not counted). Noop if already paused. + function pauseGasMetering() external; - // ======== OS and Filesystem ======== + /// Records all storage reads and writes. + function record() external; - // -------- Metadata -------- + /// Record all the transaction logs. + function recordLogs() external; - // Returns true if the given path points to an existing entity, else returns false - function exists(string calldata path) external returns (bool result); + /// Resumes gas metering (i.e. gas usage is counted again). Noop if already on. + function resumeGasMetering() external; - // Given a path, query the file system to get information about a file, directory, etc. - function fsMetadata(string calldata path) external view returns (FsMetadata memory metadata); + /// Performs an Ethereum JSON-RPC request to the current fork URL. + function rpc(string calldata method, string calldata params) external returns (bytes memory data); - // Returns true if the path exists on disk and is pointing at a directory, else returns false - function isDir(string calldata path) external returns (bool result); + /// Signs `digest` with `privateKey` using the secp256r1 curve. + function signP256(uint256 privateKey, bytes32 digest) external pure returns (bytes32 r, bytes32 s); - // Returns true if the path exists on disk and is pointing at a regular file, else returns false - function isFile(string calldata path) external returns (bool result); + /// Signs `digest` with `privateKey` using the secp256k1 curve. + function sign(uint256 privateKey, bytes32 digest) external pure returns (uint8 v, bytes32 r, bytes32 s); - // Get the path of the current project root. - function projectRoot() external view returns (string memory path); + /// Starts recording all map SSTOREs for later retrieval. + function startMappingRecording() external; - // Returns the time since unix epoch in milliseconds - function unixTime() external returns (uint256 milliseconds); + /// Record all account accesses as part of CREATE, CALL or SELFDESTRUCT opcodes in order, + /// along with the context of the calls + function startStateDiffRecording() external; + + /// Returns an ordered array of all account accesses from a `vm.startStateDiffRecording` session. + function stopAndReturnStateDiff() external returns (AccountAccess[] memory accountAccesses); + + /// Stops recording all map SSTOREs for later retrieval and clears the recorded data. + function stopMappingRecording() external; - // -------- Reading and writing -------- + // ======== Filesystem ======== - // Closes file for reading, resetting the offset and allowing to read it from beginning with readLine. - // `path` is relative to the project root. + /// Closes file for reading, resetting the offset and allowing to read it from beginning with readLine. + /// `path` is relative to the project root. function closeFile(string calldata path) external; - // Copies the contents of one file to another. This function will **overwrite** the contents of `to`. - // On success, the total number of bytes copied is returned and it is equal to the length of the `to` file as reported by `metadata`. - // Both `from` and `to` are relative to the project root. + /// Copies the contents of one file to another. This function will **overwrite** the contents of `to`. + /// On success, the total number of bytes copied is returned and it is equal to the length of the `to` file as reported by `metadata`. + /// Both `from` and `to` are relative to the project root. function copyFile(string calldata from, string calldata to) external returns (uint64 copied); - // Creates a new, empty directory at the provided path. - // This cheatcode will revert in the following situations, but is not limited to just these cases: - // - User lacks permissions to modify `path`. - // - A parent of the given path doesn't exist and `recursive` is false. - // - `path` already exists and `recursive` is false. - // `path` is relative to the project root. + /// Creates a new, empty directory at the provided path. + /// This cheatcode will revert in the following situations, but is not limited to just these cases: + /// - User lacks permissions to modify `path`. + /// - A parent of the given path doesn't exist and `recursive` is false. + /// - `path` already exists and `recursive` is false. + /// `path` is relative to the project root. function createDir(string calldata path, bool recursive) external; - // Reads the directory at the given path recursively, up to `max_depth`. - // `max_depth` defaults to 1, meaning only the direct children of the given directory will be returned. - // Follows symbolic links if `follow_links` is true. + /// Returns true if the given path points to an existing entity, else returns false. + function exists(string calldata path) external returns (bool result); + + /// Performs a foreign function call via the terminal. + function ffi(string[] calldata commandInput) external returns (bytes memory result); + + /// Given a path, query the file system to get information about a file, directory, etc. + function fsMetadata(string calldata path) external view returns (FsMetadata memory metadata); + + /// Gets the creation bytecode from an artifact file. Takes in the relative path to the json file. + function getCode(string calldata artifactPath) external view returns (bytes memory creationBytecode); + + /// Gets the deployed bytecode from an artifact file. Takes in the relative path to the json file. + function getDeployedCode(string calldata artifactPath) external view returns (bytes memory runtimeBytecode); + + /// Returns true if the path exists on disk and is pointing at a directory, else returns false. + function isDir(string calldata path) external returns (bool result); + + /// Returns true if the path exists on disk and is pointing at a regular file, else returns false. + function isFile(string calldata path) external returns (bool result); + + /// Get the path of the current project root. + function projectRoot() external view returns (string memory path); + + /// Reads the directory at the given path recursively, up to `maxDepth`. + /// `maxDepth` defaults to 1, meaning only the direct children of the given directory will be returned. + /// Follows symbolic links if `followLinks` is true. function readDir(string calldata path) external view returns (DirEntry[] memory entries); + + /// See `readDir(string)`. function readDir(string calldata path, uint64 maxDepth) external view returns (DirEntry[] memory entries); + + /// See `readDir(string)`. function readDir(string calldata path, uint64 maxDepth, bool followLinks) external view returns (DirEntry[] memory entries); - // Reads the entire content of file to string. `path` is relative to the project root. + /// Reads the entire content of file to string. `path` is relative to the project root. function readFile(string calldata path) external view returns (string memory data); - // Reads the entire content of file as binary. `path` is relative to the project root. + /// Reads the entire content of file as binary. `path` is relative to the project root. function readFileBinary(string calldata path) external view returns (bytes memory data); - // Reads next line of file to string. + /// Reads next line of file to string. function readLine(string calldata path) external view returns (string memory line); - // Reads a symbolic link, returning the path that the link points to. - // This cheatcode will revert in the following situations, but is not limited to just these cases: - // - `path` is not a symbolic link. - // - `path` does not exist. + /// Reads a symbolic link, returning the path that the link points to. + /// This cheatcode will revert in the following situations, but is not limited to just these cases: + /// - `path` is not a symbolic link. + /// - `path` does not exist. function readLink(string calldata linkPath) external view returns (string memory targetPath); - // Removes a directory at the provided path. - // This cheatcode will revert in the following situations, but is not limited to just these cases: - // - `path` doesn't exist. - // - `path` isn't a directory. - // - User lacks permissions to modify `path`. - // - The directory is not empty and `recursive` is false. - // `path` is relative to the project root. + /// Removes a directory at the provided path. + /// This cheatcode will revert in the following situations, but is not limited to just these cases: + /// - `path` doesn't exist. + /// - `path` isn't a directory. + /// - User lacks permissions to modify `path`. + /// - The directory is not empty and `recursive` is false. + /// `path` is relative to the project root. function removeDir(string calldata path, bool recursive) external; - // Removes a file from the filesystem. - // This cheatcode will revert in the following situations, but is not limited to just these cases: - // - `path` points to a directory. - // - The file doesn't exist. - // - The user lacks permissions to remove the file. - // `path` is relative to the project root. + /// Removes a file from the filesystem. + /// This cheatcode will revert in the following situations, but is not limited to just these cases: + /// - `path` points to a directory. + /// - The file doesn't exist. + /// - The user lacks permissions to remove the file. + /// `path` is relative to the project root. function removeFile(string calldata path) external; - // Writes data to file, creating a file if it does not exist, and entirely replacing its contents if it does. - // `path` is relative to the project root. + /// Performs a foreign function call via terminal and returns the exit code, stdout, and stderr. + function tryFfi(string[] calldata commandInput) external returns (FfiResult memory result); + + /// Returns the time since unix epoch in milliseconds. + function unixTime() external returns (uint256 milliseconds); + + /// Writes data to file, creating a file if it does not exist, and entirely replacing its contents if it does. + /// `path` is relative to the project root. function writeFile(string calldata path, string calldata data) external; - // Writes binary data to a file, creating a file if it does not exist, and entirely replacing its contents if it does. - // `path` is relative to the project root. + /// Writes binary data to a file, creating a file if it does not exist, and entirely replacing its contents if it does. + /// `path` is relative to the project root. function writeFileBinary(string calldata path, bytes calldata data) external; - // Writes line to file, creating a file if it does not exist. - // `path` is relative to the project root. + /// Writes line to file, creating a file if it does not exist. + /// `path` is relative to the project root. function writeLine(string calldata path, string calldata data) external; - // -------- Foreign Function Interface -------- + // ======== JSON ======== - // Performs a foreign function call via the terminal - function ffi(string[] calldata commandInput) external returns (bytes memory result); + /// Checks if `key` exists in a JSON object. + function keyExists(string calldata json, string calldata key) external view returns (bool); - // Performs a foreign function call via terminal and returns the exit code, stdout, and stderr - function tryFfi(string[] calldata commandInput) external returns (FfiResult memory result); + /// Parses a string of JSON data at `key` and coerces it to `address`. + function parseJsonAddress(string calldata json, string calldata key) external pure returns (address); - // ======== Environment Variables ======== + /// Parses a string of JSON data at `key` and coerces it to `address[]`. + function parseJsonAddressArray(string calldata json, string calldata key) + external + pure + returns (address[] memory); - // Sets environment variables - function setEnv(string calldata name, string calldata value) external; + /// Parses a string of JSON data at `key` and coerces it to `bool`. + function parseJsonBool(string calldata json, string calldata key) external pure returns (bool); - // Reads environment variables, (name) => (value) - function envBool(string calldata name) external view returns (bool value); - function envUint(string calldata name) external view returns (uint256 value); - function envInt(string calldata name) external view returns (int256 value); - function envAddress(string calldata name) external view returns (address value); - function envBytes32(string calldata name) external view returns (bytes32 value); - function envString(string calldata name) external view returns (string memory value); - function envBytes(string calldata name) external view returns (bytes memory value); + /// Parses a string of JSON data at `key` and coerces it to `bool[]`. + function parseJsonBoolArray(string calldata json, string calldata key) external pure returns (bool[] memory); - // Reads environment variables as arrays - function envBool(string calldata name, string calldata delim) external view returns (bool[] memory value); - function envUint(string calldata name, string calldata delim) external view returns (uint256[] memory value); - function envInt(string calldata name, string calldata delim) external view returns (int256[] memory value); - function envAddress(string calldata name, string calldata delim) external view returns (address[] memory value); - function envBytes32(string calldata name, string calldata delim) external view returns (bytes32[] memory value); - function envString(string calldata name, string calldata delim) external view returns (string[] memory value); - function envBytes(string calldata name, string calldata delim) external view returns (bytes[] memory value); + /// Parses a string of JSON data at `key` and coerces it to `bytes`. + function parseJsonBytes(string calldata json, string calldata key) external pure returns (bytes memory); - // Read environment variables with default value - function envOr(string calldata name, bool defaultValue) external returns (bool value); - function envOr(string calldata name, uint256 defaultValue) external returns (uint256 value); - function envOr(string calldata name, int256 defaultValue) external returns (int256 value); - function envOr(string calldata name, address defaultValue) external returns (address value); - function envOr(string calldata name, bytes32 defaultValue) external returns (bytes32 value); - function envOr(string calldata name, string calldata defaultValue) external returns (string memory value); - function envOr(string calldata name, bytes calldata defaultValue) external returns (bytes memory value); + /// Parses a string of JSON data at `key` and coerces it to `bytes32`. + function parseJsonBytes32(string calldata json, string calldata key) external pure returns (bytes32); - // Read environment variables as arrays with default value - function envOr(string calldata name, string calldata delim, bool[] calldata defaultValue) + /// Parses a string of JSON data at `key` and coerces it to `bytes32[]`. + function parseJsonBytes32Array(string calldata json, string calldata key) external - returns (bool[] memory value); - function envOr(string calldata name, string calldata delim, uint256[] calldata defaultValue) + pure + returns (bytes32[] memory); + + /// Parses a string of JSON data at `key` and coerces it to `bytes[]`. + function parseJsonBytesArray(string calldata json, string calldata key) external pure returns (bytes[] memory); + + /// Parses a string of JSON data at `key` and coerces it to `int256`. + function parseJsonInt(string calldata json, string calldata key) external pure returns (int256); + + /// Parses a string of JSON data at `key` and coerces it to `int256[]`. + function parseJsonIntArray(string calldata json, string calldata key) external pure returns (int256[] memory); + + /// Returns an array of all the keys in a JSON object. + function parseJsonKeys(string calldata json, string calldata key) external pure returns (string[] memory keys); + + /// Parses a string of JSON data at `key` and coerces it to `string`. + function parseJsonString(string calldata json, string calldata key) external pure returns (string memory); + + /// Parses a string of JSON data at `key` and coerces it to `string[]`. + function parseJsonStringArray(string calldata json, string calldata key) external pure returns (string[] memory); + + /// Parses a string of JSON data at `key` and coerces it to `uint256`. + function parseJsonUint(string calldata json, string calldata key) external pure returns (uint256); + + /// Parses a string of JSON data at `key` and coerces it to `uint256[]`. + function parseJsonUintArray(string calldata json, string calldata key) external pure returns (uint256[] memory); + + /// ABI-encodes a JSON object. + function parseJson(string calldata json) external pure returns (bytes memory abiEncodedData); + + /// ABI-encodes a JSON object at `key`. + function parseJson(string calldata json, string calldata key) external pure returns (bytes memory abiEncodedData); + + /// See `serializeJson`. + function serializeAddress(string calldata objectKey, string calldata valueKey, address value) external - returns (uint256[] memory value); - function envOr(string calldata name, string calldata delim, int256[] calldata defaultValue) + returns (string memory json); + + /// See `serializeJson`. + function serializeAddress(string calldata objectKey, string calldata valueKey, address[] calldata values) external - returns (int256[] memory value); - function envOr(string calldata name, string calldata delim, address[] calldata defaultValue) + returns (string memory json); + + /// See `serializeJson`. + function serializeBool(string calldata objectKey, string calldata valueKey, bool value) external - returns (address[] memory value); - function envOr(string calldata name, string calldata delim, bytes32[] calldata defaultValue) + returns (string memory json); + + /// See `serializeJson`. + function serializeBool(string calldata objectKey, string calldata valueKey, bool[] calldata values) external - returns (bytes32[] memory value); - function envOr(string calldata name, string calldata delim, string[] calldata defaultValue) + returns (string memory json); + + /// See `serializeJson`. + function serializeBytes32(string calldata objectKey, string calldata valueKey, bytes32 value) external - returns (string[] memory value); - function envOr(string calldata name, string calldata delim, bytes[] calldata defaultValue) + returns (string memory json); + + /// See `serializeJson`. + function serializeBytes32(string calldata objectKey, string calldata valueKey, bytes32[] calldata values) external - returns (bytes[] memory value); + returns (string memory json); - // ======== User Management ======== + /// See `serializeJson`. + function serializeBytes(string calldata objectKey, string calldata valueKey, bytes calldata value) + external + returns (string memory json); - // Derives a private key from the name, labels the account with that name, and returns the wallet - function createWallet(string calldata walletLabel) external returns (Wallet memory wallet); + /// See `serializeJson`. + function serializeBytes(string calldata objectKey, string calldata valueKey, bytes[] calldata values) + external + returns (string memory json); - // Generates a wallet from the private key and returns the wallet - function createWallet(uint256 privateKey) external returns (Wallet memory wallet); + /// See `serializeJson`. + function serializeInt(string calldata objectKey, string calldata valueKey, int256 value) + external + returns (string memory json); - // Generates a wallet from the private key, labels the account with that name, and returns the wallet - function createWallet(uint256 privateKey, string calldata walletLabel) external returns (Wallet memory wallet); + /// See `serializeJson`. + function serializeInt(string calldata objectKey, string calldata valueKey, int256[] calldata values) + external + returns (string memory json); - // Gets the label for the specified address - function getLabel(address account) external returns (string memory currentLabel); + /// Serializes a key and value to a JSON object stored in-memory that can be later written to a file. + /// Returns the stringified version of the specific JSON file up to that moment. + function serializeJson(string calldata objectKey, string calldata value) external returns (string memory json); - // Get nonce for a Wallet. - // See `getNonce(address account)` for an alternative way to get a nonce. - function getNonce(Wallet calldata wallet) external returns (uint64 nonce); + /// See `serializeJson`. + function serializeString(string calldata objectKey, string calldata valueKey, string calldata value) + external + returns (string memory json); - // Labels an address in call traces - function label(address account, string calldata newLabel) external; + /// See `serializeJson`. + function serializeString(string calldata objectKey, string calldata valueKey, string[] calldata values) + external + returns (string memory json); - // Signs data, (Wallet, digest) => (v, r, s) - function sign(Wallet calldata wallet, bytes32 digest) external returns (uint8 v, bytes32 r, bytes32 s); + /// See `serializeJson`. + function serializeUint(string calldata objectKey, string calldata valueKey, uint256 value) + external + returns (string memory json); - // ======== Scripts ======== + /// See `serializeJson`. + function serializeUint(string calldata objectKey, string calldata valueKey, uint256[] calldata values) + external + returns (string memory json); - // -------- Broadcasting Transactions -------- + /// Write a serialized JSON object to a file. If the file exists, it will be overwritten. + function writeJson(string calldata json, string calldata path) external; + + /// Write a serialized JSON object to an **existing** JSON file, replacing a value with key = <value_key.> + /// This is useful to replace a specific value of a JSON file, without having to parse the entire thing. + function writeJson(string calldata json, string calldata path, string calldata valueKey) external; + + // ======== Scripting ======== - // Using the address that calls the test contract, has the next call (at this call depth only) create a transaction that can later be signed and sent onchain + /// Using the address that calls the test contract, has the next call (at this call depth only) + /// create a transaction that can later be signed and sent onchain. function broadcast() external; - // Has the next call (at this call depth only) create a transaction with the address provided as the sender that can later be signed and sent onchain + /// Has the next call (at this call depth only) create a transaction with the address provided + /// as the sender that can later be signed and sent onchain. function broadcast(address signer) external; - // Has the next call (at this call depth only) create a transaction with the private key provided as the sender that can later be signed and sent onchain + /// Has the next call (at this call depth only) create a transaction with the private key + /// provided as the sender that can later be signed and sent onchain. function broadcast(uint256 privateKey) external; - // Using the address that calls the test contract, has all subsequent calls (at this call depth only) create transactions that can later be signed and sent onchain + /// Using the address that calls the test contract, has all subsequent calls + /// (at this call depth only) create transactions that can later be signed and sent onchain. function startBroadcast() external; - // Has all subsequent calls (at this call depth only) create transactions with the address provided that can later be signed and sent onchain + /// Has all subsequent calls (at this call depth only) create transactions with the address + /// provided that can later be signed and sent onchain. function startBroadcast(address signer) external; - // Has all subsequent calls (at this call depth only) create transactions with the private key provided that can later be signed and sent onchain + /// Has all subsequent calls (at this call depth only) create transactions with the private key + /// provided that can later be signed and sent onchain. function startBroadcast(uint256 privateKey) external; - // Stops collecting onchain transactions + /// Stops collecting onchain transactions. function stopBroadcast() external; - // -------- Key Management -------- + // ======== String ======== - // Derive a private key from a provided mnenomic string (or mnenomic file path) at the derivation path m/44'/60'/0'/0/{index} - function deriveKey(string calldata mnemonic, uint32 index) external pure returns (uint256 privateKey); + /// Parses the given `string` into an `address`. + function parseAddress(string calldata stringifiedValue) external pure returns (address parsedValue); - // Derive a private key from a provided mnenomic string (or mnenomic file path) at {derivationPath}{index} - function deriveKey(string calldata mnemonic, string calldata derivationPath, uint32 index) - external - pure - returns (uint256 privateKey); + /// Parses the given `string` into a `bool`. + function parseBool(string calldata stringifiedValue) external pure returns (bool parsedValue); - // Adds a private key to the local forge wallet and returns the address - function rememberKey(uint256 privateKey) external returns (address keyAddr); + /// Parses the given `string` into `bytes`. + function parseBytes(string calldata stringifiedValue) external pure returns (bytes memory parsedValue); - // ======== Utilities ======== + /// Parses the given `string` into a `bytes32`. + function parseBytes32(string calldata stringifiedValue) external pure returns (bytes32 parsedValue); - // Convert values to a string + /// Parses the given `string` into a `int256`. + function parseInt(string calldata stringifiedValue) external pure returns (int256 parsedValue); + + /// Parses the given `string` into a `uint256`. + function parseUint(string calldata stringifiedValue) external pure returns (uint256 parsedValue); + + /// Converts the given value to a `string`. function toString(address value) external pure returns (string memory stringifiedValue); + + /// Converts the given value to a `string`. function toString(bytes calldata value) external pure returns (string memory stringifiedValue); + + /// Converts the given value to a `string`. function toString(bytes32 value) external pure returns (string memory stringifiedValue); + + /// Converts the given value to a `string`. function toString(bool value) external pure returns (string memory stringifiedValue); + + /// Converts the given value to a `string`. function toString(uint256 value) external pure returns (string memory stringifiedValue); + + /// Converts the given value to a `string`. function toString(int256 value) external pure returns (string memory stringifiedValue); - // Convert values from a string - function parseBytes(string calldata stringifiedValue) external pure returns (bytes memory parsedValue); - function parseAddress(string calldata stringifiedValue) external pure returns (address parsedValue); - function parseUint(string calldata stringifiedValue) external pure returns (uint256 parsedValue); - function parseInt(string calldata stringifiedValue) external pure returns (int256 parsedValue); - function parseBytes32(string calldata stringifiedValue) external pure returns (bytes32 parsedValue); - function parseBool(string calldata stringifiedValue) external pure returns (bool parsedValue); + // ======== Testing ======== - // Gets the creation bytecode from an artifact file. Takes in the relative path to the json file - function getCode(string calldata artifactPath) external view returns (bytes memory creationBytecode); + /// If the condition is false, discard this run's fuzz inputs and generate new ones. + function assume(bool condition) external pure; - // Gets the deployed bytecode from an artifact file. Takes in the relative path to the json file - function getDeployedCode(string calldata artifactPath) external view returns (bytes memory runtimeBytecode); + /// Writes a breakpoint to jump to in the debugger. + function breakpoint(string calldata char) external; - // ======== JSON Parsing and Manipulation ======== + /// Writes a conditional breakpoint to jump to in the debugger. + function breakpoint(string calldata char, bool value) external; - // -------- Reading -------- + /// Returns the RPC url for the given alias. + function rpcUrl(string calldata rpcAlias) external view returns (string memory json); - // NOTE: Please read https://book.getfoundry.sh/cheatcodes/parse-json to understand the - // limitations and caveats of the JSON parsing cheats. + /// Returns all rpc urls and their aliases as structs. + function rpcUrlStructs() external view returns (Rpc[] memory urls); - // Checks if a key exists in a JSON object. - function keyExists(string calldata json, string calldata key) external view returns (bool); + /// Returns all rpc urls and their aliases `[alias, url][]`. + function rpcUrls() external view returns (string[2][] memory urls); - // Given a string of JSON, return it as ABI-encoded - function parseJson(string calldata json, string calldata key) external pure returns (bytes memory abiEncodedData); - function parseJson(string calldata json) external pure returns (bytes memory abiEncodedData); + /// Suspends execution of the main thread for `duration` milliseconds. + function sleep(uint256 duration) external; - // The following parseJson cheatcodes will do type coercion, for the type that they indicate. - // For example, parseJsonUint will coerce all values to a uint256. That includes stringified numbers '12' - // and hex numbers '0xEF'. - // Type coercion works ONLY for discrete values or arrays. That means that the key must return a value or array, not - // a JSON object. - function parseJsonUint(string calldata json, string calldata key) external pure returns (uint256); - function parseJsonUintArray(string calldata json, string calldata key) external pure returns (uint256[] memory); - function parseJsonInt(string calldata json, string calldata key) external pure returns (int256); - function parseJsonIntArray(string calldata json, string calldata key) external pure returns (int256[] memory); - function parseJsonBool(string calldata json, string calldata key) external pure returns (bool); - function parseJsonBoolArray(string calldata json, string calldata key) external pure returns (bool[] memory); - function parseJsonAddress(string calldata json, string calldata key) external pure returns (address); - function parseJsonAddressArray(string calldata json, string calldata key) - external - pure - returns (address[] memory); - function parseJsonString(string calldata json, string calldata key) external pure returns (string memory); - function parseJsonStringArray(string calldata json, string calldata key) external pure returns (string[] memory); - function parseJsonBytes(string calldata json, string calldata key) external pure returns (bytes memory); - function parseJsonBytesArray(string calldata json, string calldata key) external pure returns (bytes[] memory); - function parseJsonBytes32(string calldata json, string calldata key) external pure returns (bytes32); - function parseJsonBytes32Array(string calldata json, string calldata key) + // ======== Utilities ======== + + /// Compute the address of a contract created with CREATE2 using the given CREATE2 deployer. + function computeCreate2Address(bytes32 salt, bytes32 initCodeHash, address deployer) external pure - returns (bytes32[] memory); + returns (address); - // Returns array of keys for a JSON object - function parseJsonKeys(string calldata json, string calldata key) external pure returns (string[] memory keys); + /// Compute the address of a contract created with CREATE2 using the default CREATE2 deployer. + function computeCreate2Address(bytes32 salt, bytes32 initCodeHash) external pure returns (address); - // -------- Writing -------- + /// Compute the address a contract will be deployed at for a given deployer address and nonce. + function computeCreateAddress(address deployer, uint256 nonce) external pure returns (address); - // NOTE: Please read https://book.getfoundry.sh/cheatcodes/serialize-json to understand how - // to use the serialization cheats. + /// Derives a private key from the name, labels the account with that name, and returns the wallet. + function createWallet(string calldata walletLabel) external returns (Wallet memory wallet); - // Serialize a key and value to a JSON object stored in-memory that can be later written to a file - // It returns the stringified version of the specific JSON file up to that moment. - function serializeJson(string calldata objectKey, string calldata value) external returns (string memory json); - function serializeBool(string calldata objectKey, string calldata valueKey, bool value) - external - returns (string memory json); - function serializeUint(string calldata objectKey, string calldata valueKey, uint256 value) - external - returns (string memory json); - function serializeInt(string calldata objectKey, string calldata valueKey, int256 value) - external - returns (string memory json); - function serializeAddress(string calldata objectKey, string calldata valueKey, address value) - external - returns (string memory json); - function serializeBytes32(string calldata objectKey, string calldata valueKey, bytes32 value) - external - returns (string memory json); - function serializeString(string calldata objectKey, string calldata valueKey, string calldata value) - external - returns (string memory json); - function serializeBytes(string calldata objectKey, string calldata valueKey, bytes calldata value) - external - returns (string memory json); + /// Generates a wallet from the private key and returns the wallet. + function createWallet(uint256 privateKey) external returns (Wallet memory wallet); - function serializeBool(string calldata objectKey, string calldata valueKey, bool[] calldata values) - external - returns (string memory json); - function serializeUint(string calldata objectKey, string calldata valueKey, uint256[] calldata values) - external - returns (string memory json); - function serializeInt(string calldata objectKey, string calldata valueKey, int256[] calldata values) - external - returns (string memory json); - function serializeAddress(string calldata objectKey, string calldata valueKey, address[] calldata values) - external - returns (string memory json); - function serializeBytes32(string calldata objectKey, string calldata valueKey, bytes32[] calldata values) + /// Generates a wallet from the private key, labels the account with that name, and returns the wallet. + function createWallet(uint256 privateKey, string calldata walletLabel) external returns (Wallet memory wallet); + + /// Derive a private key from a provided mnenomic string (or mnenomic file path) + /// at the derivation path `m/44'/60'/0'/0/{index}`. + function deriveKey(string calldata mnemonic, uint32 index) external pure returns (uint256 privateKey); + + /// Derive a private key from a provided mnenomic string (or mnenomic file path) + /// at `{derivationPath}{index}`. + function deriveKey(string calldata mnemonic, string calldata derivationPath, uint32 index) external - returns (string memory json); - function serializeString(string calldata objectKey, string calldata valueKey, string[] calldata values) + pure + returns (uint256 privateKey); + + /// Derive a private key from a provided mnenomic string (or mnenomic file path) in the specified language + /// at the derivation path `m/44'/60'/0'/0/{index}`. + function deriveKey(string calldata mnemonic, uint32 index, string calldata language) external - returns (string memory json); - function serializeBytes(string calldata objectKey, string calldata valueKey, bytes[] calldata values) + pure + returns (uint256 privateKey); + + /// Derive a private key from a provided mnenomic string (or mnenomic file path) in the specified language + /// at `{derivationPath}{index}`. + function deriveKey(string calldata mnemonic, string calldata derivationPath, uint32 index, string calldata language) external - returns (string memory json); + pure + returns (uint256 privateKey); - // NOTE: Please read https://book.getfoundry.sh/cheatcodes/write-json to understand how - // to use the JSON writing cheats. + /// Gets the label for the specified address. + function getLabel(address account) external view returns (string memory currentLabel); - // Write a serialized JSON object to a file. If the file exists, it will be overwritten. - function writeJson(string calldata json, string calldata path) external; + /// Get a `Wallet`'s nonce. + function getNonce(Wallet calldata wallet) external returns (uint64 nonce); - // Write a serialized JSON object to an **existing** JSON file, replacing a value with key = <value_key> - // This is useful to replace a specific value of a JSON file, without having to parse the entire thing - function writeJson(string calldata json, string calldata path, string calldata valueKey) external; + /// Labels an address in call traces. + function label(address account, string calldata newLabel) external; + + /// Adds a private key to the local forge wallet and returns the address. + function rememberKey(uint256 privateKey) external returns (address keyAddr); + + /// Signs data with a `Wallet`. + function sign(Wallet calldata wallet, bytes32 digest) external returns (uint8 v, bytes32 r, bytes32 s); + + /// Encodes a `bytes` value to a base64url string. + function toBase64URL(bytes calldata data) external pure returns (string memory); + + /// Encodes a `string` value to a base64url string. + function toBase64URL(string calldata data) external pure returns (string memory); + + /// Encodes a `bytes` value to a base64 string. + function toBase64(bytes calldata data) external pure returns (string memory); + + /// Encodes a `string` value to a base64 string. + function toBase64(string calldata data) external pure returns (string memory); } -// The `Vm` interface does allow manipulation of the EVM state. These are all intended to be used -// in tests, but it is not recommended to use these cheats in scripts. +/// The `Vm` interface does allow manipulation of the EVM state. These are all intended to be used +/// in tests, but it is not recommended to use these cheats in scripts. interface Vm is VmSafe { - // ======== EVM ======== + // ======== EVM ======== + + /// Returns the identifier of the currently active fork. Reverts if no fork is currently active. + function activeFork() external view returns (uint256 forkId); - // -------- Block and Transaction Properties -------- + /// In forking mode, explicitly grant the given address cheatcode access. + function allowCheatcodes(address account) external; - // Sets block.chainid + /// Sets `block.chainid`. function chainId(uint256 newChainId) external; - // Sets block.coinbase - function coinbase(address newCoinbase) external; + /// Clears all mocked calls. + function clearMockedCalls() external; - // Sets block.difficulty - // Not available on EVM versions from Paris onwards. Use `prevrandao` instead. - // If used on unsupported EVM versions it will revert. - function difficulty(uint256 newDifficulty) external; + /// Sets `block.coinbase`. + function coinbase(address newCoinbase) external; - // Sets block.basefee - function fee(uint256 newBasefee) external; + /// Creates a new fork with the given endpoint and the _latest_ block and returns the identifier of the fork. + function createFork(string calldata urlOrAlias) external returns (uint256 forkId); - // Sets block.prevrandao - // Not available on EVM versions before Paris. Use `difficulty` instead. - // If used on unsupported EVM versions it will revert. - function prevrandao(bytes32 newPrevrandao) external; + /// Creates a new fork with the given endpoint and block and returns the identifier of the fork. + function createFork(string calldata urlOrAlias, uint256 blockNumber) external returns (uint256 forkId); - // Sets block.height - function roll(uint256 newHeight) external; + /// Creates a new fork with the given endpoint and at the block the given transaction was mined in, + /// replays all transaction mined in the block before the transaction, and returns the identifier of the fork. + function createFork(string calldata urlOrAlias, bytes32 txHash) external returns (uint256 forkId); - // Sets tx.gasprice - function txGasPrice(uint256 newGasPrice) external; + /// Creates and also selects a new fork with the given endpoint and the latest block and returns the identifier of the fork. + function createSelectFork(string calldata urlOrAlias) external returns (uint256 forkId); - // Sets block.timestamp - function warp(uint256 newTimestamp) external; + /// Creates and also selects a new fork with the given endpoint and block and returns the identifier of the fork. + function createSelectFork(string calldata urlOrAlias, uint256 blockNumber) external returns (uint256 forkId); - // -------- Account State -------- + /// Creates and also selects new fork with the given endpoint and at the block the given transaction was mined in, + /// replays all transaction mined in the block before the transaction, returns the identifier of the fork. + function createSelectFork(string calldata urlOrAlias, bytes32 txHash) external returns (uint256 forkId); - // Sets an address' balance + /// Sets an address' balance. function deal(address account, uint256 newBalance) external; - // Sets an address' code - function etch(address target, bytes calldata newRuntimeBytecode) external; + /// Removes the snapshot with the given ID created by `snapshot`. + /// Takes the snapshot ID to delete. + /// Returns `true` if the snapshot was successfully deleted. + /// Returns `false` if the snapshot does not exist. + function deleteSnapshot(uint256 snapshotId) external returns (bool success); - // Load a genesis JSON file's `allocs` into the in-memory state. - function loadAllocs(string calldata pathToAllocsJson) external; + /// Removes _all_ snapshots previously created by `snapshot`. + function deleteSnapshots() external; - // Resets the nonce of an account to 0 for EOAs and 1 for contract accounts - function resetNonce(address account) external; + /// Sets `block.difficulty`. + /// Not available on EVM versions from Paris onwards. Use `prevrandao` instead. + /// Reverts if used on unsupported EVM versions. + function difficulty(uint256 newDifficulty) external; - // Sets the nonce of an account; must be higher than the current nonce of the account - function setNonce(address account, uint64 newNonce) external; + /// Dump a genesis JSON file's `allocs` to disk. + function dumpState(string calldata pathToStateJson) external; - // Sets the nonce of an account to an arbitrary value - function setNonceUnsafe(address account, uint64 newNonce) external; + /// Sets an address' code. + function etch(address target, bytes calldata newRuntimeBytecode) external; - // Stores a value to an address' storage slot. - function store(address target, bytes32 slot, bytes32 value) external; + /// Sets `block.basefee`. + function fee(uint256 newBasefee) external; - // -------- Call Manipulation -------- - // --- Mocks --- + /// Returns true if the account is marked as persistent. + function isPersistent(address account) external view returns (bool persistent); - // Clears all mocked calls - function clearMockedCalls() external; + /// Load a genesis JSON file's `allocs` into the in-memory revm state. + function loadAllocs(string calldata pathToAllocsJson) external; - // Mocks a call to an address, returning specified data. - // Calldata can either be strict or a partial match, e.g. if you only - // pass a Solidity selector to the expected calldata, then the entire Solidity - // function will be mocked. - function mockCall(address callee, bytes calldata data, bytes calldata returnData) external; + /// Marks that the account(s) should use persistent storage across fork swaps in a multifork setup + /// Meaning, changes made to the state of this account will be kept when switching forks. + function makePersistent(address account) external; - // Mocks a call to an address with a specific msg.value, returning specified data. - // Calldata match takes precedence over msg.value in case of ambiguity. - function mockCall(address callee, uint256 msgValue, bytes calldata data, bytes calldata returnData) external; + /// See `makePersistent(address)`. + function makePersistent(address account0, address account1) external; - // Reverts a call to an address with specified revert data. + /// See `makePersistent(address)`. + function makePersistent(address account0, address account1, address account2) external; + + /// See `makePersistent(address)`. + function makePersistent(address[] calldata accounts) external; + + /// Reverts a call to an address with specified revert data. function mockCallRevert(address callee, bytes calldata data, bytes calldata revertData) external; - // Reverts a call to an address with a specific msg.value, with specified revert data. + /// Reverts a call to an address with a specific `msg.value`, with specified revert data. function mockCallRevert(address callee, uint256 msgValue, bytes calldata data, bytes calldata revertData) external; - // --- Impersonation (pranks) --- + /// Mocks a call to an address, returning specified data. + /// Calldata can either be strict or a partial match, e.g. if you only + /// pass a Solidity selector to the expected calldata, then the entire Solidity + /// function will be mocked. + function mockCall(address callee, bytes calldata data, bytes calldata returnData) external; - // Sets the *next* call's msg.sender to be the input address - function prank(address msgSender) external; + /// Mocks a call to an address with a specific `msg.value`, returning specified data. + /// Calldata match takes precedence over `msg.value` in case of ambiguity. + function mockCall(address callee, uint256 msgValue, bytes calldata data, bytes calldata returnData) external; - // Sets all subsequent calls' msg.sender to be the input address until `stopPrank` is called - function startPrank(address msgSender) external; + /// Sets the *next* call's `msg.sender` to be the input address. + function prank(address msgSender) external; - // Sets the *next* call's msg.sender to be the input address, and the tx.origin to be the second input + /// Sets the *next* call's `msg.sender` to be the input address, and the `tx.origin` to be the second input. function prank(address msgSender, address txOrigin) external; - // Sets all subsequent calls' msg.sender to be the input address until `stopPrank` is called, and the tx.origin to be the second input - function startPrank(address msgSender, address txOrigin) external; - - // Resets subsequent calls' msg.sender to be `address(this)` - function stopPrank() external; + /// Sets `block.prevrandao`. + /// Not available on EVM versions before Paris. Use `difficulty` instead. + /// If used on unsupported EVM versions it will revert. + function prevrandao(bytes32 newPrevrandao) external; - // Reads the current `msg.sender` and `tx.origin` from state and reports if there is any active caller modification + /// Reads the current `msg.sender` and `tx.origin` from state and reports if there is any active caller modification. function readCallers() external returns (CallerMode callerMode, address msgSender, address txOrigin); - // -------- State Snapshots -------- - - // Snapshot the current state of the evm. - // Returns the id of the snapshot that was created. - // To revert a snapshot use `revertTo` - function snapshot() external returns (uint256 snapshotId); + /// Resets the nonce of an account to 0 for EOAs and 1 for contract accounts. + function resetNonce(address account) external; - // Revert the state of the EVM to a previous snapshot - // Takes the snapshot id to revert to. - // This deletes the snapshot and all snapshots taken after the given snapshot id. + /// Revert the state of the EVM to a previous snapshot + /// Takes the snapshot ID to revert to. + /// Returns `true` if the snapshot was successfully reverted. + /// Returns `false` if the snapshot does not exist. + /// **Note:** This does not automatically delete the snapshot. To delete the snapshot use `deleteSnapshot`. function revertTo(uint256 snapshotId) external returns (bool success); - // -------- Forking -------- - // --- Creation and Selection --- - - // Returns the identifier of the currently active fork. Reverts if no fork is currently active. - function activeFork() external view returns (uint256 forkId); - - // Creates a new fork with the given endpoint and block and returns the identifier of the fork - function createFork(string calldata urlOrAlias, uint256 blockNumber) external returns (uint256 forkId); - - // Creates a new fork with the given endpoint and the _latest_ block and returns the identifier of the fork - function createFork(string calldata urlOrAlias) external returns (uint256 forkId); - - // Creates a new fork with the given endpoint and at the block the given transaction was mined in, replays all transaction mined in the block before the transaction, - // and returns the identifier of the fork - function createFork(string calldata urlOrAlias, bytes32 txHash) external returns (uint256 forkId); + /// Revert the state of the EVM to a previous snapshot and automatically deletes the snapshots + /// Takes the snapshot ID to revert to. + /// Returns `true` if the snapshot was successfully reverted and deleted. + /// Returns `false` if the snapshot does not exist. + function revertToAndDelete(uint256 snapshotId) external returns (bool success); - // Creates and also selects a new fork with the given endpoint and block and returns the identifier of the fork - function createSelectFork(string calldata urlOrAlias, uint256 blockNumber) external returns (uint256 forkId); + /// Revokes persistent status from the address, previously added via `makePersistent`. + function revokePersistent(address account) external; - // Creates and also selects new fork with the given endpoint and at the block the given transaction was mined in, replays all transaction mined in the block before - // the transaction, returns the identifier of the fork - function createSelectFork(string calldata urlOrAlias, bytes32 txHash) external returns (uint256 forkId); + /// See `revokePersistent(address)`. + function revokePersistent(address[] calldata accounts) external; - // Creates and also selects a new fork with the given endpoint and the latest block and returns the identifier of the fork - function createSelectFork(string calldata urlOrAlias) external returns (uint256 forkId); + /// Sets `block.height`. + function roll(uint256 newHeight) external; - // Updates the currently active fork to given block number - // This is similar to `roll` but for the currently active fork + /// Updates the currently active fork to given block number + /// This is similar to `roll` but for the currently active fork. function rollFork(uint256 blockNumber) external; - // Updates the currently active fork to given transaction - // this will `rollFork` with the number of the block the transaction was mined in and replays all transaction mined before it in the block + /// Updates the currently active fork to given transaction. This will `rollFork` with the number + /// of the block the transaction was mined in and replays all transaction mined before it in the block. function rollFork(bytes32 txHash) external; - // Updates the given fork to given block number + /// Updates the given fork to given block number. function rollFork(uint256 forkId, uint256 blockNumber) external; - // Updates the given fork to block number of the given transaction and replays all transaction mined before it in the block + /// Updates the given fork to block number of the given transaction and replays all transaction mined before it in the block. function rollFork(uint256 forkId, bytes32 txHash) external; - // Takes a fork identifier created by `createFork` and sets the corresponding forked state as active. + /// Takes a fork identifier created by `createFork` and sets the corresponding forked state as active. function selectFork(uint256 forkId) external; - // Fetches the given transaction from the active fork and executes it on the current state + /// Sets the nonce of an account. Must be higher than the current nonce of the account. + function setNonce(address account, uint64 newNonce) external; + + /// Sets the nonce of an account to an arbitrary value. + function setNonceUnsafe(address account, uint64 newNonce) external; + + /// Snapshot the current state of the evm. + /// Returns the ID of the snapshot that was created. + /// To revert a snapshot use `revertTo`. + function snapshot() external returns (uint256 snapshotId); + + /// Sets all subsequent calls' `msg.sender` to be the input address until `stopPrank` is called. + function startPrank(address msgSender) external; + + /// Sets all subsequent calls' `msg.sender` to be the input address until `stopPrank` is called, and the `tx.origin` to be the second input. + function startPrank(address msgSender, address txOrigin) external; + + /// Resets subsequent calls' `msg.sender` to be `address(this)`. + function stopPrank() external; + + /// Stores a value to an address' storage slot. + function store(address target, bytes32 slot, bytes32 value) external; + + /// Fetches the given transaction from the active fork and executes it on the current state. function transact(bytes32 txHash) external; - // Fetches the given transaction from the given fork and executes it on the current state + /// Fetches the given transaction from the given fork and executes it on the current state. function transact(uint256 forkId, bytes32 txHash) external; - // --- Behavior --- + /// Sets `tx.gasprice`. + function txGasPrice(uint256 newGasPrice) external; - // In forking mode, explicitly grant the given address cheatcode access - function allowCheatcodes(address account) external; + /// Sets `block.timestamp`. + function warp(uint256 newTimestamp) external; - // Marks that the account(s) should use persistent storage across fork swaps in a multifork setup - // Meaning, changes made to the state of this account will be kept when switching forks - function makePersistent(address account) external; - function makePersistent(address account0, address account1) external; - function makePersistent(address account0, address account1, address account2) external; - function makePersistent(address[] calldata accounts) external; + // ======== Testing ======== - // Revokes persistent status from the address, previously added via `makePersistent` - function revokePersistent(address account) external; - function revokePersistent(address[] calldata accounts) external; - - // Returns true if the account is marked as persistent - function isPersistent(address account) external view returns (bool persistent); + /// Expect a call to an address with the specified `msg.value` and calldata, and a *minimum* amount of gas. + function expectCallMinGas(address callee, uint256 msgValue, uint64 minGas, bytes calldata data) external; - // ======== Test Assertions and Utilities ======== + /// Expect given number of calls to an address with the specified `msg.value` and calldata, and a *minimum* amount of gas. + function expectCallMinGas(address callee, uint256 msgValue, uint64 minGas, bytes calldata data, uint64 count) + external; - // Expects a call to an address with the specified calldata. - // Calldata can either be a strict or a partial match + /// Expects a call to an address with the specified calldata. + /// Calldata can either be a strict or a partial match. function expectCall(address callee, bytes calldata data) external; - // Expects given number of calls to an address with the specified calldata. + /// Expects given number of calls to an address with the specified calldata. function expectCall(address callee, bytes calldata data, uint64 count) external; - // Expects a call to an address with the specified msg.value and calldata + /// Expects a call to an address with the specified `msg.value` and calldata. function expectCall(address callee, uint256 msgValue, bytes calldata data) external; - // Expects given number of calls to an address with the specified msg.value and calldata + /// Expects given number of calls to an address with the specified `msg.value` and calldata. function expectCall(address callee, uint256 msgValue, bytes calldata data, uint64 count) external; - // Expect a call to an address with the specified msg.value, gas, and calldata. + /// Expect a call to an address with the specified `msg.value`, gas, and calldata. function expectCall(address callee, uint256 msgValue, uint64 gas, bytes calldata data) external; - // Expects given number of calls to an address with the specified msg.value, gas, and calldata. + /// Expects given number of calls to an address with the specified `msg.value`, gas, and calldata. function expectCall(address callee, uint256 msgValue, uint64 gas, bytes calldata data, uint64 count) external; - // Expect a call to an address with the specified msg.value and calldata, and a *minimum* amount of gas. - function expectCallMinGas(address callee, uint256 msgValue, uint64 minGas, bytes calldata data) external; - - // Expect given number of calls to an address with the specified msg.value and calldata, and a *minimum* amount of gas. - function expectCallMinGas(address callee, uint256 msgValue, uint64 minGas, bytes calldata data, uint64 count) - external; - - // Prepare an expected log with (bool checkTopic1, bool checkTopic2, bool checkTopic3, bool checkData). - // Call this function, then emit an event, then call a function. Internally after the call, we check if - // logs were emitted in the expected order with the expected topics and data (as specified by the booleans). + /// Prepare an expected log with (bool checkTopic1, bool checkTopic2, bool checkTopic3, bool checkData.). + /// Call this function, then emit an event, then call a function. Internally after the call, we check if + /// logs were emitted in the expected order with the expected topics and data (as specified by the booleans). function expectEmit(bool checkTopic1, bool checkTopic2, bool checkTopic3, bool checkData) external; - // Same as the previous method, but also checks supplied address against emitting contract. + /// Same as the previous method, but also checks supplied address against emitting contract. function expectEmit(bool checkTopic1, bool checkTopic2, bool checkTopic3, bool checkData, address emitter) external; - // Prepare an expected log with all topic and data checks enabled. - // Call this function, then emit an event, then call a function. Internally after the call, we check if - // logs were emitted in the expected order with the expected topics and data. + /// Prepare an expected log with all topic and data checks enabled. + /// Call this function, then emit an event, then call a function. Internally after the call, we check if + /// logs were emitted in the expected order with the expected topics and data. function expectEmit() external; - // Same as the previous method, but also checks supplied address against emitting contract. + /// Same as the previous method, but also checks supplied address against emitting contract. function expectEmit(address emitter) external; - // Expects an error on next call that exactly matches the revert data. - function expectRevert(bytes calldata revertData) external; + /// Expects an error on next call with any revert data. + function expectRevert() external; - // Expects an error on next call that starts with the revert data. + /// Expects an error on next call that starts with the revert data. function expectRevert(bytes4 revertData) external; - // Expects an error on next call with any revert data. - function expectRevert() external; + /// Expects an error on next call that exactly matches the revert data. + function expectRevert(bytes calldata revertData) external; - // Only allows memory writes to offsets [0x00, 0x60) โˆช [min, max) in the current subcontext. If any other - // memory is written to, the test will fail. Can be called multiple times to add more ranges to the set. + /// Only allows memory writes to offsets [0x00, 0x60) โˆช [min, max) in the current subcontext. If any other + /// memory is written to, the test will fail. Can be called multiple times to add more ranges to the set. function expectSafeMemory(uint64 min, uint64 max) external; - // Only allows memory writes to offsets [0x00, 0x60) โˆช [min, max) in the next created subcontext. - // If any other memory is written to, the test will fail. Can be called multiple times to add more ranges - // to the set. + /// Only allows memory writes to offsets [0x00, 0x60) โˆช [min, max) in the next created subcontext. + /// If any other memory is written to, the test will fail. Can be called multiple times to add more ranges + /// to the set. function expectSafeMemoryCall(uint64 min, uint64 max) external; - // Marks a test as skipped. Must be called at the top of the test. + /// Marks a test as skipped. Must be called at the top of the test. function skip(bool skipTest) external; } diff --git a/packages/foundry/lib/forge-std/src/mocks/MockERC20.sol b/packages/foundry/lib/forge-std/src/mocks/MockERC20.sol new file mode 100644 index 0000000..6b825a0 --- /dev/null +++ b/packages/foundry/lib/forge-std/src/mocks/MockERC20.sol @@ -0,0 +1,216 @@ +// SPDX-License-Identifier: MIT +pragma solidity >=0.6.2 <0.9.0; + +/// @notice This is a mock contract of the ERC20 standard for testing purposes only, it SHOULD NOT be used in production. +/// @dev Forked from: https://github.com/transmissions11/solmate/blob/0384dbaaa4fcb5715738a9254a7c0a4cb62cf458/src/tokens/ERC20.sol +contract MockERC20 { + /*////////////////////////////////////////////////////////////// + EVENTS + //////////////////////////////////////////////////////////////*/ + + event Transfer(address indexed from, address indexed to, uint256 amount); + + event Approval(address indexed owner, address indexed spender, uint256 amount); + + /*////////////////////////////////////////////////////////////// + METADATA STORAGE + //////////////////////////////////////////////////////////////*/ + + string public name; + + string public symbol; + + uint8 public decimals; + + /*////////////////////////////////////////////////////////////// + ERC20 STORAGE + //////////////////////////////////////////////////////////////*/ + + uint256 public totalSupply; + + mapping(address => uint256) public balanceOf; + + mapping(address => mapping(address => uint256)) public allowance; + + /*////////////////////////////////////////////////////////////// + EIP-2612 STORAGE + //////////////////////////////////////////////////////////////*/ + + uint256 internal INITIAL_CHAIN_ID; + + bytes32 internal INITIAL_DOMAIN_SEPARATOR; + + mapping(address => uint256) public nonces; + + /*////////////////////////////////////////////////////////////// + INITIALIZE + //////////////////////////////////////////////////////////////*/ + + /// @dev A bool to track whether the contract has been initialized. + bool private initialized; + + /// @dev To hide constructor warnings across solc versions due to different constructor visibility requirements and + /// syntaxes, we add an initialization function that can be called only once. + function initialize(string memory _name, string memory _symbol, uint8 _decimals) public { + require(!initialized, "ALREADY_INITIALIZED"); + + name = _name; + symbol = _symbol; + decimals = _decimals; + + INITIAL_CHAIN_ID = _pureChainId(); + INITIAL_DOMAIN_SEPARATOR = computeDomainSeparator(); + + initialized = true; + } + + /*////////////////////////////////////////////////////////////// + ERC20 LOGIC + //////////////////////////////////////////////////////////////*/ + + function approve(address spender, uint256 amount) public virtual returns (bool) { + allowance[msg.sender][spender] = amount; + + emit Approval(msg.sender, spender, amount); + + return true; + } + + function transfer(address to, uint256 amount) public virtual returns (bool) { + balanceOf[msg.sender] = _sub(balanceOf[msg.sender], amount); + balanceOf[to] = _add(balanceOf[to], amount); + + emit Transfer(msg.sender, to, amount); + + return true; + } + + function transferFrom(address from, address to, uint256 amount) public virtual returns (bool) { + uint256 allowed = allowance[from][msg.sender]; // Saves gas for limited approvals. + + if (allowed != ~uint256(0)) allowance[from][msg.sender] = _sub(allowed, amount); + + balanceOf[from] = _sub(balanceOf[from], amount); + balanceOf[to] = _add(balanceOf[to], amount); + + emit Transfer(from, to, amount); + + return true; + } + + /*////////////////////////////////////////////////////////////// + EIP-2612 LOGIC + //////////////////////////////////////////////////////////////*/ + + function permit(address owner, address spender, uint256 value, uint256 deadline, uint8 v, bytes32 r, bytes32 s) + public + virtual + { + require(deadline >= block.timestamp, "PERMIT_DEADLINE_EXPIRED"); + + address recoveredAddress = ecrecover( + keccak256( + abi.encodePacked( + "\x19\x01", + DOMAIN_SEPARATOR(), + keccak256( + abi.encode( + keccak256( + "Permit(address owner,address spender,uint256 value,uint256 nonce,uint256 deadline)" + ), + owner, + spender, + value, + nonces[owner]++, + deadline + ) + ) + ) + ), + v, + r, + s + ); + + require(recoveredAddress != address(0) && recoveredAddress == owner, "INVALID_SIGNER"); + + allowance[recoveredAddress][spender] = value; + + emit Approval(owner, spender, value); + } + + function DOMAIN_SEPARATOR() public view virtual returns (bytes32) { + return _pureChainId() == INITIAL_CHAIN_ID ? INITIAL_DOMAIN_SEPARATOR : computeDomainSeparator(); + } + + function computeDomainSeparator() internal view virtual returns (bytes32) { + return keccak256( + abi.encode( + keccak256("EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)"), + keccak256(bytes(name)), + keccak256("1"), + _pureChainId(), + address(this) + ) + ); + } + + /*////////////////////////////////////////////////////////////// + INTERNAL MINT/BURN LOGIC + //////////////////////////////////////////////////////////////*/ + + function _mint(address to, uint256 amount) internal virtual { + totalSupply = _add(totalSupply, amount); + balanceOf[to] = _add(balanceOf[to], amount); + + emit Transfer(address(0), to, amount); + } + + function _burn(address from, uint256 amount) internal virtual { + balanceOf[from] = _sub(balanceOf[from], amount); + totalSupply = _sub(totalSupply, amount); + + emit Transfer(from, address(0), amount); + } + + /*////////////////////////////////////////////////////////////// + INTERNAL SAFE MATH LOGIC + //////////////////////////////////////////////////////////////*/ + + function _add(uint256 a, uint256 b) internal pure returns (uint256) { + uint256 c = a + b; + require(c >= a, "ERC20: addition overflow"); + return c; + } + + function _sub(uint256 a, uint256 b) internal pure returns (uint256) { + require(a >= b, "ERC20: subtraction underflow"); + return a - b; + } + + /*////////////////////////////////////////////////////////////// + HELPERS + //////////////////////////////////////////////////////////////*/ + + // We use this complex approach of `_viewChainId` and `_pureChainId` to ensure there are no + // compiler warnings when accessing chain ID in any solidity version supported by forge-std. We + // can't simply access the chain ID in a normal view or pure function because the solc View Pure + // Checker changed `chainid` from pure to view in 0.8.0. + function _viewChainId() private view returns (uint256 chainId) { + // Assembly required since `block.chainid` was introduced in 0.8.0. + assembly { + chainId := chainid() + } + + address(this); // Silence warnings in older Solc versions. + } + + function _pureChainId() private pure returns (uint256 chainId) { + function() internal view returns (uint256) fnIn = _viewChainId; + function() internal pure returns (uint256) pureChainId; + assembly { + pureChainId := fnIn + } + chainId = pureChainId(); + } +} diff --git a/packages/foundry/lib/forge-std/src/mocks/MockERC721.sol b/packages/foundry/lib/forge-std/src/mocks/MockERC721.sol new file mode 100644 index 0000000..7584087 --- /dev/null +++ b/packages/foundry/lib/forge-std/src/mocks/MockERC721.sol @@ -0,0 +1,221 @@ +// SPDX-License-Identifier: MIT +pragma solidity >=0.6.2 <0.9.0; + +/// @notice This is a mock contract of the ERC721 standard for testing purposes only, it SHOULD NOT be used in production. +/// @dev Forked from: https://github.com/transmissions11/solmate/blob/0384dbaaa4fcb5715738a9254a7c0a4cb62cf458/src/tokens/ERC721.sol +contract MockERC721 { + /*////////////////////////////////////////////////////////////// + EVENTS + //////////////////////////////////////////////////////////////*/ + + event Transfer(address indexed from, address indexed to, uint256 indexed id); + + event Approval(address indexed owner, address indexed spender, uint256 indexed id); + + event ApprovalForAll(address indexed owner, address indexed operator, bool approved); + + /*////////////////////////////////////////////////////////////// + METADATA STORAGE/LOGIC + //////////////////////////////////////////////////////////////*/ + + string public name; + + string public symbol; + + function tokenURI(uint256 id) public view virtual returns (string memory) {} + + /*////////////////////////////////////////////////////////////// + ERC721 BALANCE/OWNER STORAGE + //////////////////////////////////////////////////////////////*/ + + mapping(uint256 => address) internal _ownerOf; + + mapping(address => uint256) internal _balanceOf; + + function ownerOf(uint256 id) public view virtual returns (address owner) { + require((owner = _ownerOf[id]) != address(0), "NOT_MINTED"); + } + + function balanceOf(address owner) public view virtual returns (uint256) { + require(owner != address(0), "ZERO_ADDRESS"); + + return _balanceOf[owner]; + } + + /*////////////////////////////////////////////////////////////// + ERC721 APPROVAL STORAGE + //////////////////////////////////////////////////////////////*/ + + mapping(uint256 => address) public getApproved; + + mapping(address => mapping(address => bool)) public isApprovedForAll; + + /*////////////////////////////////////////////////////////////// + INITIALIZE + //////////////////////////////////////////////////////////////*/ + + /// @dev A bool to track whether the contract has been initialized. + bool private initialized; + + /// @dev To hide constructor warnings across solc versions due to different constructor visibility requirements and + /// syntaxes, we add an initialization function that can be called only once. + function initialize(string memory _name, string memory _symbol) public { + require(!initialized, "ALREADY_INITIALIZED"); + + name = _name; + symbol = _symbol; + + initialized = true; + } + + /*////////////////////////////////////////////////////////////// + ERC721 LOGIC + //////////////////////////////////////////////////////////////*/ + + function approve(address spender, uint256 id) public virtual { + address owner = _ownerOf[id]; + + require(msg.sender == owner || isApprovedForAll[owner][msg.sender], "NOT_AUTHORIZED"); + + getApproved[id] = spender; + + emit Approval(owner, spender, id); + } + + function setApprovalForAll(address operator, bool approved) public virtual { + isApprovedForAll[msg.sender][operator] = approved; + + emit ApprovalForAll(msg.sender, operator, approved); + } + + function transferFrom(address from, address to, uint256 id) public virtual { + require(from == _ownerOf[id], "WRONG_FROM"); + + require(to != address(0), "INVALID_RECIPIENT"); + + require( + msg.sender == from || isApprovedForAll[from][msg.sender] || msg.sender == getApproved[id], "NOT_AUTHORIZED" + ); + + // Underflow of the sender's balance is impossible because we check for + // ownership above and the recipient's balance can't realistically overflow. + _balanceOf[from]--; + + _balanceOf[to]++; + + _ownerOf[id] = to; + + delete getApproved[id]; + + emit Transfer(from, to, id); + } + + function safeTransferFrom(address from, address to, uint256 id) public virtual { + transferFrom(from, to, id); + + require( + !_isContract(to) + || IERC721TokenReceiver(to).onERC721Received(msg.sender, from, id, "") + == IERC721TokenReceiver.onERC721Received.selector, + "UNSAFE_RECIPIENT" + ); + } + + function safeTransferFrom(address from, address to, uint256 id, bytes memory data) public virtual { + transferFrom(from, to, id); + + require( + !_isContract(to) + || IERC721TokenReceiver(to).onERC721Received(msg.sender, from, id, data) + == IERC721TokenReceiver.onERC721Received.selector, + "UNSAFE_RECIPIENT" + ); + } + + /*////////////////////////////////////////////////////////////// + ERC165 LOGIC + //////////////////////////////////////////////////////////////*/ + + function supportsInterface(bytes4 interfaceId) public pure virtual returns (bool) { + return interfaceId == 0x01ffc9a7 // ERC165 Interface ID for ERC165 + || interfaceId == 0x80ac58cd // ERC165 Interface ID for ERC721 + || interfaceId == 0x5b5e139f; // ERC165 Interface ID for ERC721Metadata + } + + /*////////////////////////////////////////////////////////////// + INTERNAL MINT/BURN LOGIC + //////////////////////////////////////////////////////////////*/ + + function _mint(address to, uint256 id) internal virtual { + require(to != address(0), "INVALID_RECIPIENT"); + + require(_ownerOf[id] == address(0), "ALREADY_MINTED"); + + // Counter overflow is incredibly unrealistic. + + _balanceOf[to]++; + + _ownerOf[id] = to; + + emit Transfer(address(0), to, id); + } + + function _burn(uint256 id) internal virtual { + address owner = _ownerOf[id]; + + require(owner != address(0), "NOT_MINTED"); + + _balanceOf[owner]--; + + delete _ownerOf[id]; + + delete getApproved[id]; + + emit Transfer(owner, address(0), id); + } + + /*////////////////////////////////////////////////////////////// + INTERNAL SAFE MINT LOGIC + //////////////////////////////////////////////////////////////*/ + + function _safeMint(address to, uint256 id) internal virtual { + _mint(to, id); + + require( + !_isContract(to) + || IERC721TokenReceiver(to).onERC721Received(msg.sender, address(0), id, "") + == IERC721TokenReceiver.onERC721Received.selector, + "UNSAFE_RECIPIENT" + ); + } + + function _safeMint(address to, uint256 id, bytes memory data) internal virtual { + _mint(to, id); + + require( + !_isContract(to) + || IERC721TokenReceiver(to).onERC721Received(msg.sender, address(0), id, data) + == IERC721TokenReceiver.onERC721Received.selector, + "UNSAFE_RECIPIENT" + ); + } + + /*////////////////////////////////////////////////////////////// + HELPERS + //////////////////////////////////////////////////////////////*/ + + function _isContract(address _addr) private view returns (bool) { + uint256 codeLength; + + // Assembly required for versions < 0.8.0 to check extcodesize. + assembly { + codeLength := extcodesize(_addr) + } + + return codeLength > 0; + } +} + +interface IERC721TokenReceiver { + function onERC721Received(address, address, uint256, bytes calldata) external returns (bytes4); +} diff --git a/packages/foundry/lib/forge-std/test/StdError.t.sol b/packages/foundry/lib/forge-std/test/StdError.t.sol index a6da60b..a306eaa 100644 --- a/packages/foundry/lib/forge-std/test/StdError.t.sol +++ b/packages/foundry/lib/forge-std/test/StdError.t.sol @@ -63,7 +63,9 @@ contract StdErrorsTest is Test { } contract ErrorsTest { - enum T {T1} + enum T { + T1 + } uint256[] public someArr; bytes someBytes; diff --git a/packages/foundry/lib/forge-std/test/StdUtils.t.sol b/packages/foundry/lib/forge-std/test/StdUtils.t.sol index 386e3a8..80acc25 100644 --- a/packages/foundry/lib/forge-std/test/StdUtils.t.sol +++ b/packages/foundry/lib/forge-std/test/StdUtils.t.sol @@ -12,11 +12,11 @@ contract StdUtilsMock is StdUtils { return getTokenBalances(token, addresses); } - function exposed_bound(int256 num, int256 min, int256 max) external view returns (int256) { + function exposed_bound(int256 num, int256 min, int256 max) external pure returns (int256) { return bound(num, min, max); } - function exposed_bound(uint256 num, uint256 min, uint256 max) external view returns (uint256) { + function exposed_bound(uint256 num, uint256 min, uint256 max) external pure returns (uint256) { return bound(num, min, max); } diff --git a/packages/foundry/lib/forge-std/test/Vm.t.sol b/packages/foundry/lib/forge-std/test/Vm.t.sol index 7278837..95d6145 100644 --- a/packages/foundry/lib/forge-std/test/Vm.t.sol +++ b/packages/foundry/lib/forge-std/test/Vm.t.sol @@ -9,7 +9,7 @@ contract VmTest is Test { // inadvertently moved between Vm and VmSafe. This test must be updated each time a function is // added to or removed from Vm or VmSafe. function test_interfaceId() public { - assertEq(type(VmSafe).interfaceId, bytes4(0x1578a242), "VmSafe"); - assertEq(type(Vm).interfaceId, bytes4(0x316cedc3), "Vm"); + assertEq(type(VmSafe).interfaceId, bytes4(0x01ec102d), "VmSafe"); + assertEq(type(Vm).interfaceId, bytes4(0xa63eed6b), "Vm"); } } diff --git a/packages/foundry/lib/forge-std/test/mocks/MockERC20.t.sol b/packages/foundry/lib/forge-std/test/mocks/MockERC20.t.sol new file mode 100644 index 0000000..3649e60 --- /dev/null +++ b/packages/foundry/lib/forge-std/test/mocks/MockERC20.t.sol @@ -0,0 +1,441 @@ +// SPDX-License-Identifier: MIT +pragma solidity >=0.7.0 <0.9.0; + +import {MockERC20} from "../../src/mocks/MockERC20.sol"; +import {StdCheats} from "../../src/StdCheats.sol"; +import {Test} from "../../src/Test.sol"; + +contract Token_ERC20 is MockERC20 { + constructor(string memory name, string memory symbol, uint8 decimals) { + initialize(name, symbol, decimals); + } + + function mint(address to, uint256 value) public virtual { + _mint(to, value); + } + + function burn(address from, uint256 value) public virtual { + _burn(from, value); + } +} + +contract MockERC20Test is StdCheats, Test { + Token_ERC20 token; + + bytes32 constant PERMIT_TYPEHASH = + keccak256("Permit(address owner,address spender,uint256 value,uint256 nonce,uint256 deadline)"); + + function setUp() public { + token = new Token_ERC20("Token", "TKN", 18); + } + + function invariantMetadata() public { + assertEq(token.name(), "Token"); + assertEq(token.symbol(), "TKN"); + assertEq(token.decimals(), 18); + } + + function testMint() public { + token.mint(address(0xBEEF), 1e18); + + assertEq(token.totalSupply(), 1e18); + assertEq(token.balanceOf(address(0xBEEF)), 1e18); + } + + function testBurn() public { + token.mint(address(0xBEEF), 1e18); + token.burn(address(0xBEEF), 0.9e18); + + assertEq(token.totalSupply(), 1e18 - 0.9e18); + assertEq(token.balanceOf(address(0xBEEF)), 0.1e18); + } + + function testApprove() public { + assertTrue(token.approve(address(0xBEEF), 1e18)); + + assertEq(token.allowance(address(this), address(0xBEEF)), 1e18); + } + + function testTransfer() public { + token.mint(address(this), 1e18); + + assertTrue(token.transfer(address(0xBEEF), 1e18)); + assertEq(token.totalSupply(), 1e18); + + assertEq(token.balanceOf(address(this)), 0); + assertEq(token.balanceOf(address(0xBEEF)), 1e18); + } + + function testTransferFrom() public { + address from = address(0xABCD); + + token.mint(from, 1e18); + + vm.prank(from); + token.approve(address(this), 1e18); + + assertTrue(token.transferFrom(from, address(0xBEEF), 1e18)); + assertEq(token.totalSupply(), 1e18); + + assertEq(token.allowance(from, address(this)), 0); + + assertEq(token.balanceOf(from), 0); + assertEq(token.balanceOf(address(0xBEEF)), 1e18); + } + + function testInfiniteApproveTransferFrom() public { + address from = address(0xABCD); + + token.mint(from, 1e18); + + vm.prank(from); + token.approve(address(this), type(uint256).max); + + assertTrue(token.transferFrom(from, address(0xBEEF), 1e18)); + assertEq(token.totalSupply(), 1e18); + + assertEq(token.allowance(from, address(this)), type(uint256).max); + + assertEq(token.balanceOf(from), 0); + assertEq(token.balanceOf(address(0xBEEF)), 1e18); + } + + function testPermit() public { + uint256 privateKey = 0xBEEF; + address owner = vm.addr(privateKey); + + (uint8 v, bytes32 r, bytes32 s) = vm.sign( + privateKey, + keccak256( + abi.encodePacked( + "\x19\x01", + token.DOMAIN_SEPARATOR(), + keccak256(abi.encode(PERMIT_TYPEHASH, owner, address(0xCAFE), 1e18, 0, block.timestamp)) + ) + ) + ); + + token.permit(owner, address(0xCAFE), 1e18, block.timestamp, v, r, s); + + assertEq(token.allowance(owner, address(0xCAFE)), 1e18); + assertEq(token.nonces(owner), 1); + } + + function testFailTransferInsufficientBalance() public { + token.mint(address(this), 0.9e18); + token.transfer(address(0xBEEF), 1e18); + } + + function testFailTransferFromInsufficientAllowance() public { + address from = address(0xABCD); + + token.mint(from, 1e18); + + vm.prank(from); + token.approve(address(this), 0.9e18); + + token.transferFrom(from, address(0xBEEF), 1e18); + } + + function testFailTransferFromInsufficientBalance() public { + address from = address(0xABCD); + + token.mint(from, 0.9e18); + + vm.prank(from); + token.approve(address(this), 1e18); + + token.transferFrom(from, address(0xBEEF), 1e18); + } + + function testFailPermitBadNonce() public { + uint256 privateKey = 0xBEEF; + address owner = vm.addr(privateKey); + + (uint8 v, bytes32 r, bytes32 s) = vm.sign( + privateKey, + keccak256( + abi.encodePacked( + "\x19\x01", + token.DOMAIN_SEPARATOR(), + keccak256(abi.encode(PERMIT_TYPEHASH, owner, address(0xCAFE), 1e18, 1, block.timestamp)) + ) + ) + ); + + token.permit(owner, address(0xCAFE), 1e18, block.timestamp, v, r, s); + } + + function testFailPermitBadDeadline() public { + uint256 privateKey = 0xBEEF; + address owner = vm.addr(privateKey); + + (uint8 v, bytes32 r, bytes32 s) = vm.sign( + privateKey, + keccak256( + abi.encodePacked( + "\x19\x01", + token.DOMAIN_SEPARATOR(), + keccak256(abi.encode(PERMIT_TYPEHASH, owner, address(0xCAFE), 1e18, 0, block.timestamp)) + ) + ) + ); + + token.permit(owner, address(0xCAFE), 1e18, block.timestamp + 1, v, r, s); + } + + function testFailPermitPastDeadline() public { + uint256 oldTimestamp = block.timestamp; + uint256 privateKey = 0xBEEF; + address owner = vm.addr(privateKey); + + (uint8 v, bytes32 r, bytes32 s) = vm.sign( + privateKey, + keccak256( + abi.encodePacked( + "\x19\x01", + token.DOMAIN_SEPARATOR(), + keccak256(abi.encode(PERMIT_TYPEHASH, owner, address(0xCAFE), 1e18, 0, oldTimestamp)) + ) + ) + ); + + vm.warp(block.timestamp + 1); + token.permit(owner, address(0xCAFE), 1e18, oldTimestamp, v, r, s); + } + + function testFailPermitReplay() public { + uint256 privateKey = 0xBEEF; + address owner = vm.addr(privateKey); + + (uint8 v, bytes32 r, bytes32 s) = vm.sign( + privateKey, + keccak256( + abi.encodePacked( + "\x19\x01", + token.DOMAIN_SEPARATOR(), + keccak256(abi.encode(PERMIT_TYPEHASH, owner, address(0xCAFE), 1e18, 0, block.timestamp)) + ) + ) + ); + + token.permit(owner, address(0xCAFE), 1e18, block.timestamp, v, r, s); + token.permit(owner, address(0xCAFE), 1e18, block.timestamp, v, r, s); + } + + function testMetadata(string calldata name, string calldata symbol, uint8 decimals) public { + Token_ERC20 tkn = new Token_ERC20(name, symbol, decimals); + assertEq(tkn.name(), name); + assertEq(tkn.symbol(), symbol); + assertEq(tkn.decimals(), decimals); + } + + function testMint(address from, uint256 amount) public { + token.mint(from, amount); + + assertEq(token.totalSupply(), amount); + assertEq(token.balanceOf(from), amount); + } + + function testBurn(address from, uint256 mintAmount, uint256 burnAmount) public { + burnAmount = bound(burnAmount, 0, mintAmount); + + token.mint(from, mintAmount); + token.burn(from, burnAmount); + + assertEq(token.totalSupply(), mintAmount - burnAmount); + assertEq(token.balanceOf(from), mintAmount - burnAmount); + } + + function testApprove(address to, uint256 amount) public { + assertTrue(token.approve(to, amount)); + + assertEq(token.allowance(address(this), to), amount); + } + + function testTransfer(address from, uint256 amount) public { + token.mint(address(this), amount); + + assertTrue(token.transfer(from, amount)); + assertEq(token.totalSupply(), amount); + + if (address(this) == from) { + assertEq(token.balanceOf(address(this)), amount); + } else { + assertEq(token.balanceOf(address(this)), 0); + assertEq(token.balanceOf(from), amount); + } + } + + function testTransferFrom(address to, uint256 approval, uint256 amount) public { + amount = bound(amount, 0, approval); + + address from = address(0xABCD); + + token.mint(from, amount); + + vm.prank(from); + token.approve(address(this), approval); + + assertTrue(token.transferFrom(from, to, amount)); + assertEq(token.totalSupply(), amount); + + uint256 app = from == address(this) || approval == type(uint256).max ? approval : approval - amount; + assertEq(token.allowance(from, address(this)), app); + + if (from == to) { + assertEq(token.balanceOf(from), amount); + } else { + assertEq(token.balanceOf(from), 0); + assertEq(token.balanceOf(to), amount); + } + } + + function testPermit(uint248 privKey, address to, uint256 amount, uint256 deadline) public { + uint256 privateKey = privKey; + if (deadline < block.timestamp) deadline = block.timestamp; + if (privateKey == 0) privateKey = 1; + + address owner = vm.addr(privateKey); + + (uint8 v, bytes32 r, bytes32 s) = vm.sign( + privateKey, + keccak256( + abi.encodePacked( + "\x19\x01", + token.DOMAIN_SEPARATOR(), + keccak256(abi.encode(PERMIT_TYPEHASH, owner, to, amount, 0, deadline)) + ) + ) + ); + + token.permit(owner, to, amount, deadline, v, r, s); + + assertEq(token.allowance(owner, to), amount); + assertEq(token.nonces(owner), 1); + } + + function testFailBurnInsufficientBalance(address to, uint256 mintAmount, uint256 burnAmount) public { + burnAmount = bound(burnAmount, mintAmount + 1, type(uint256).max); + + token.mint(to, mintAmount); + token.burn(to, burnAmount); + } + + function testFailTransferInsufficientBalance(address to, uint256 mintAmount, uint256 sendAmount) public { + sendAmount = bound(sendAmount, mintAmount + 1, type(uint256).max); + + token.mint(address(this), mintAmount); + token.transfer(to, sendAmount); + } + + function testFailTransferFromInsufficientAllowance(address to, uint256 approval, uint256 amount) public { + amount = bound(amount, approval + 1, type(uint256).max); + + address from = address(0xABCD); + + token.mint(from, amount); + + vm.prank(from); + token.approve(address(this), approval); + + token.transferFrom(from, to, amount); + } + + function testFailTransferFromInsufficientBalance(address to, uint256 mintAmount, uint256 sendAmount) public { + sendAmount = bound(sendAmount, mintAmount + 1, type(uint256).max); + + address from = address(0xABCD); + + token.mint(from, mintAmount); + + vm.prank(from); + token.approve(address(this), sendAmount); + + token.transferFrom(from, to, sendAmount); + } + + function testFailPermitBadNonce(uint256 privateKey, address to, uint256 amount, uint256 deadline, uint256 nonce) + public + { + if (deadline < block.timestamp) deadline = block.timestamp; + if (privateKey == 0) privateKey = 1; + if (nonce == 0) nonce = 1; + + address owner = vm.addr(privateKey); + + (uint8 v, bytes32 r, bytes32 s) = vm.sign( + privateKey, + keccak256( + abi.encodePacked( + "\x19\x01", + token.DOMAIN_SEPARATOR(), + keccak256(abi.encode(PERMIT_TYPEHASH, owner, to, amount, nonce, deadline)) + ) + ) + ); + + token.permit(owner, to, amount, deadline, v, r, s); + } + + function testFailPermitBadDeadline(uint256 privateKey, address to, uint256 amount, uint256 deadline) public { + if (deadline < block.timestamp) deadline = block.timestamp; + if (privateKey == 0) privateKey = 1; + + address owner = vm.addr(privateKey); + + (uint8 v, bytes32 r, bytes32 s) = vm.sign( + privateKey, + keccak256( + abi.encodePacked( + "\x19\x01", + token.DOMAIN_SEPARATOR(), + keccak256(abi.encode(PERMIT_TYPEHASH, owner, to, amount, 0, deadline)) + ) + ) + ); + + token.permit(owner, to, amount, deadline + 1, v, r, s); + } + + function testFailPermitPastDeadline(uint256 privateKey, address to, uint256 amount, uint256 deadline) public { + deadline = bound(deadline, 0, block.timestamp - 1); + if (privateKey == 0) privateKey = 1; + + address owner = vm.addr(privateKey); + + (uint8 v, bytes32 r, bytes32 s) = vm.sign( + privateKey, + keccak256( + abi.encodePacked( + "\x19\x01", + token.DOMAIN_SEPARATOR(), + keccak256(abi.encode(PERMIT_TYPEHASH, owner, to, amount, 0, deadline)) + ) + ) + ); + + token.permit(owner, to, amount, deadline, v, r, s); + } + + function testFailPermitReplay(uint256 privateKey, address to, uint256 amount, uint256 deadline) public { + if (deadline < block.timestamp) deadline = block.timestamp; + if (privateKey == 0) privateKey = 1; + + address owner = vm.addr(privateKey); + + (uint8 v, bytes32 r, bytes32 s) = vm.sign( + privateKey, + keccak256( + abi.encodePacked( + "\x19\x01", + token.DOMAIN_SEPARATOR(), + keccak256(abi.encode(PERMIT_TYPEHASH, owner, to, amount, 0, deadline)) + ) + ) + ); + + token.permit(owner, to, amount, deadline, v, r, s); + token.permit(owner, to, amount, deadline, v, r, s); + } +} diff --git a/packages/foundry/lib/forge-std/test/mocks/MockERC721.t.sol b/packages/foundry/lib/forge-std/test/mocks/MockERC721.t.sol new file mode 100644 index 0000000..3bf84c9 --- /dev/null +++ b/packages/foundry/lib/forge-std/test/mocks/MockERC721.t.sol @@ -0,0 +1,721 @@ +// SPDX-License-Identifier: MIT +pragma solidity >=0.7.0 <0.9.0; + +import {MockERC721, IERC721TokenReceiver} from "../../src/mocks/MockERC721.sol"; +import {StdCheats} from "../../src/StdCheats.sol"; +import {Test} from "../../src/Test.sol"; + +contract ERC721Recipient is IERC721TokenReceiver { + address public operator; + address public from; + uint256 public id; + bytes public data; + + function onERC721Received(address _operator, address _from, uint256 _id, bytes calldata _data) + public + virtual + override + returns (bytes4) + { + operator = _operator; + from = _from; + id = _id; + data = _data; + + return IERC721TokenReceiver.onERC721Received.selector; + } +} + +contract RevertingERC721Recipient is IERC721TokenReceiver { + function onERC721Received(address, address, uint256, bytes calldata) public virtual override returns (bytes4) { + revert(string(abi.encodePacked(IERC721TokenReceiver.onERC721Received.selector))); + } +} + +contract WrongReturnDataERC721Recipient is IERC721TokenReceiver { + function onERC721Received(address, address, uint256, bytes calldata) public virtual override returns (bytes4) { + return 0xCAFEBEEF; + } +} + +contract NonERC721Recipient {} + +contract Token_ERC721 is MockERC721 { + constructor(string memory _name, string memory _symbol) { + initialize(_name, _symbol); + } + + function tokenURI(uint256) public pure virtual override returns (string memory) {} + + function mint(address to, uint256 tokenId) public virtual { + _mint(to, tokenId); + } + + function burn(uint256 tokenId) public virtual { + _burn(tokenId); + } + + function safeMint(address to, uint256 tokenId) public virtual { + _safeMint(to, tokenId); + } + + function safeMint(address to, uint256 tokenId, bytes memory data) public virtual { + _safeMint(to, tokenId, data); + } +} + +contract MockERC721Test is StdCheats, Test { + Token_ERC721 token; + + function setUp() public { + token = new Token_ERC721("Token", "TKN"); + } + + function invariantMetadata() public { + assertEq(token.name(), "Token"); + assertEq(token.symbol(), "TKN"); + } + + function testMint() public { + token.mint(address(0xBEEF), 1337); + + assertEq(token.balanceOf(address(0xBEEF)), 1); + assertEq(token.ownerOf(1337), address(0xBEEF)); + } + + function testBurn() public { + token.mint(address(0xBEEF), 1337); + token.burn(1337); + + assertEq(token.balanceOf(address(0xBEEF)), 0); + + vm.expectRevert("NOT_MINTED"); + token.ownerOf(1337); + } + + function testApprove() public { + token.mint(address(this), 1337); + + token.approve(address(0xBEEF), 1337); + + assertEq(token.getApproved(1337), address(0xBEEF)); + } + + function testApproveBurn() public { + token.mint(address(this), 1337); + + token.approve(address(0xBEEF), 1337); + + token.burn(1337); + + assertEq(token.balanceOf(address(this)), 0); + assertEq(token.getApproved(1337), address(0)); + + vm.expectRevert("NOT_MINTED"); + token.ownerOf(1337); + } + + function testApproveAll() public { + token.setApprovalForAll(address(0xBEEF), true); + + assertTrue(token.isApprovedForAll(address(this), address(0xBEEF))); + } + + function testTransferFrom() public { + address from = address(0xABCD); + + token.mint(from, 1337); + + vm.prank(from); + token.approve(address(this), 1337); + + token.transferFrom(from, address(0xBEEF), 1337); + + assertEq(token.getApproved(1337), address(0)); + assertEq(token.ownerOf(1337), address(0xBEEF)); + assertEq(token.balanceOf(address(0xBEEF)), 1); + assertEq(token.balanceOf(from), 0); + } + + function testTransferFromSelf() public { + token.mint(address(this), 1337); + + token.transferFrom(address(this), address(0xBEEF), 1337); + + assertEq(token.getApproved(1337), address(0)); + assertEq(token.ownerOf(1337), address(0xBEEF)); + assertEq(token.balanceOf(address(0xBEEF)), 1); + assertEq(token.balanceOf(address(this)), 0); + } + + function testTransferFromApproveAll() public { + address from = address(0xABCD); + + token.mint(from, 1337); + + vm.prank(from); + token.setApprovalForAll(address(this), true); + + token.transferFrom(from, address(0xBEEF), 1337); + + assertEq(token.getApproved(1337), address(0)); + assertEq(token.ownerOf(1337), address(0xBEEF)); + assertEq(token.balanceOf(address(0xBEEF)), 1); + assertEq(token.balanceOf(from), 0); + } + + function testSafeTransferFromToEOA() public { + address from = address(0xABCD); + + token.mint(from, 1337); + + vm.prank(from); + token.setApprovalForAll(address(this), true); + + token.safeTransferFrom(from, address(0xBEEF), 1337); + + assertEq(token.getApproved(1337), address(0)); + assertEq(token.ownerOf(1337), address(0xBEEF)); + assertEq(token.balanceOf(address(0xBEEF)), 1); + assertEq(token.balanceOf(from), 0); + } + + function testSafeTransferFromToERC721Recipient() public { + address from = address(0xABCD); + ERC721Recipient recipient = new ERC721Recipient(); + + token.mint(from, 1337); + + vm.prank(from); + token.setApprovalForAll(address(this), true); + + token.safeTransferFrom(from, address(recipient), 1337); + + assertEq(token.getApproved(1337), address(0)); + assertEq(token.ownerOf(1337), address(recipient)); + assertEq(token.balanceOf(address(recipient)), 1); + assertEq(token.balanceOf(from), 0); + + assertEq(recipient.operator(), address(this)); + assertEq(recipient.from(), from); + assertEq(recipient.id(), 1337); + assertEq(recipient.data(), ""); + } + + function testSafeTransferFromToERC721RecipientWithData() public { + address from = address(0xABCD); + ERC721Recipient recipient = new ERC721Recipient(); + + token.mint(from, 1337); + + vm.prank(from); + token.setApprovalForAll(address(this), true); + + token.safeTransferFrom(from, address(recipient), 1337, "testing 123"); + + assertEq(token.getApproved(1337), address(0)); + assertEq(token.ownerOf(1337), address(recipient)); + assertEq(token.balanceOf(address(recipient)), 1); + assertEq(token.balanceOf(from), 0); + + assertEq(recipient.operator(), address(this)); + assertEq(recipient.from(), from); + assertEq(recipient.id(), 1337); + assertEq(recipient.data(), "testing 123"); + } + + function testSafeMintToEOA() public { + token.safeMint(address(0xBEEF), 1337); + + assertEq(token.ownerOf(1337), address(address(0xBEEF))); + assertEq(token.balanceOf(address(address(0xBEEF))), 1); + } + + function testSafeMintToERC721Recipient() public { + ERC721Recipient to = new ERC721Recipient(); + + token.safeMint(address(to), 1337); + + assertEq(token.ownerOf(1337), address(to)); + assertEq(token.balanceOf(address(to)), 1); + + assertEq(to.operator(), address(this)); + assertEq(to.from(), address(0)); + assertEq(to.id(), 1337); + assertEq(to.data(), ""); + } + + function testSafeMintToERC721RecipientWithData() public { + ERC721Recipient to = new ERC721Recipient(); + + token.safeMint(address(to), 1337, "testing 123"); + + assertEq(token.ownerOf(1337), address(to)); + assertEq(token.balanceOf(address(to)), 1); + + assertEq(to.operator(), address(this)); + assertEq(to.from(), address(0)); + assertEq(to.id(), 1337); + assertEq(to.data(), "testing 123"); + } + + function testFailMintToZero() public { + token.mint(address(0), 1337); + } + + function testFailDoubleMint() public { + token.mint(address(0xBEEF), 1337); + token.mint(address(0xBEEF), 1337); + } + + function testFailBurnUnMinted() public { + token.burn(1337); + } + + function testFailDoubleBurn() public { + token.mint(address(0xBEEF), 1337); + + token.burn(1337); + token.burn(1337); + } + + function testFailApproveUnMinted() public { + token.approve(address(0xBEEF), 1337); + } + + function testFailApproveUnAuthorized() public { + token.mint(address(0xCAFE), 1337); + + token.approve(address(0xBEEF), 1337); + } + + function testFailTransferFromUnOwned() public { + token.transferFrom(address(0xFEED), address(0xBEEF), 1337); + } + + function testFailTransferFromWrongFrom() public { + token.mint(address(0xCAFE), 1337); + + token.transferFrom(address(0xFEED), address(0xBEEF), 1337); + } + + function testFailTransferFromToZero() public { + token.mint(address(this), 1337); + + token.transferFrom(address(this), address(0), 1337); + } + + function testFailTransferFromNotOwner() public { + token.mint(address(0xFEED), 1337); + + token.transferFrom(address(0xFEED), address(0xBEEF), 1337); + } + + function testFailSafeTransferFromToNonERC721Recipient() public { + token.mint(address(this), 1337); + + token.safeTransferFrom(address(this), address(new NonERC721Recipient()), 1337); + } + + function testFailSafeTransferFromToNonERC721RecipientWithData() public { + token.mint(address(this), 1337); + + token.safeTransferFrom(address(this), address(new NonERC721Recipient()), 1337, "testing 123"); + } + + function testFailSafeTransferFromToRevertingERC721Recipient() public { + token.mint(address(this), 1337); + + token.safeTransferFrom(address(this), address(new RevertingERC721Recipient()), 1337); + } + + function testFailSafeTransferFromToRevertingERC721RecipientWithData() public { + token.mint(address(this), 1337); + + token.safeTransferFrom(address(this), address(new RevertingERC721Recipient()), 1337, "testing 123"); + } + + function testFailSafeTransferFromToERC721RecipientWithWrongReturnData() public { + token.mint(address(this), 1337); + + token.safeTransferFrom(address(this), address(new WrongReturnDataERC721Recipient()), 1337); + } + + function testFailSafeTransferFromToERC721RecipientWithWrongReturnDataWithData() public { + token.mint(address(this), 1337); + + token.safeTransferFrom(address(this), address(new WrongReturnDataERC721Recipient()), 1337, "testing 123"); + } + + function testFailSafeMintToNonERC721Recipient() public { + token.safeMint(address(new NonERC721Recipient()), 1337); + } + + function testFailSafeMintToNonERC721RecipientWithData() public { + token.safeMint(address(new NonERC721Recipient()), 1337, "testing 123"); + } + + function testFailSafeMintToRevertingERC721Recipient() public { + token.safeMint(address(new RevertingERC721Recipient()), 1337); + } + + function testFailSafeMintToRevertingERC721RecipientWithData() public { + token.safeMint(address(new RevertingERC721Recipient()), 1337, "testing 123"); + } + + function testFailSafeMintToERC721RecipientWithWrongReturnData() public { + token.safeMint(address(new WrongReturnDataERC721Recipient()), 1337); + } + + function testFailSafeMintToERC721RecipientWithWrongReturnDataWithData() public { + token.safeMint(address(new WrongReturnDataERC721Recipient()), 1337, "testing 123"); + } + + function testFailBalanceOfZeroAddress() public view { + token.balanceOf(address(0)); + } + + function testFailOwnerOfUnminted() public view { + token.ownerOf(1337); + } + + function testMetadata(string memory name, string memory symbol) public { + MockERC721 tkn = new Token_ERC721(name, symbol); + + assertEq(tkn.name(), name); + assertEq(tkn.symbol(), symbol); + } + + function testMint(address to, uint256 id) public { + if (to == address(0)) to = address(0xBEEF); + + token.mint(to, id); + + assertEq(token.balanceOf(to), 1); + assertEq(token.ownerOf(id), to); + } + + function testBurn(address to, uint256 id) public { + if (to == address(0)) to = address(0xBEEF); + + token.mint(to, id); + token.burn(id); + + assertEq(token.balanceOf(to), 0); + + vm.expectRevert("NOT_MINTED"); + token.ownerOf(id); + } + + function testApprove(address to, uint256 id) public { + if (to == address(0)) to = address(0xBEEF); + + token.mint(address(this), id); + + token.approve(to, id); + + assertEq(token.getApproved(id), to); + } + + function testApproveBurn(address to, uint256 id) public { + token.mint(address(this), id); + + token.approve(address(to), id); + + token.burn(id); + + assertEq(token.balanceOf(address(this)), 0); + assertEq(token.getApproved(id), address(0)); + + vm.expectRevert("NOT_MINTED"); + token.ownerOf(id); + } + + function testApproveAll(address to, bool approved) public { + token.setApprovalForAll(to, approved); + + assertEq(token.isApprovedForAll(address(this), to), approved); + } + + function testTransferFrom(uint256 id, address to) public { + address from = address(0xABCD); + + if (to == address(0) || to == from) to = address(0xBEEF); + + token.mint(from, id); + + vm.prank(from); + token.approve(address(this), id); + + token.transferFrom(from, to, id); + + assertEq(token.getApproved(id), address(0)); + assertEq(token.ownerOf(id), to); + assertEq(token.balanceOf(to), 1); + assertEq(token.balanceOf(from), 0); + } + + function testTransferFromSelf(uint256 id, address to) public { + if (to == address(0) || to == address(this)) to = address(0xBEEF); + + token.mint(address(this), id); + + token.transferFrom(address(this), to, id); + + assertEq(token.getApproved(id), address(0)); + assertEq(token.ownerOf(id), to); + assertEq(token.balanceOf(to), 1); + assertEq(token.balanceOf(address(this)), 0); + } + + function testTransferFromApproveAll(uint256 id, address to) public { + address from = address(0xABCD); + + if (to == address(0) || to == from) to = address(0xBEEF); + + token.mint(from, id); + + vm.prank(from); + token.setApprovalForAll(address(this), true); + + token.transferFrom(from, to, id); + + assertEq(token.getApproved(id), address(0)); + assertEq(token.ownerOf(id), to); + assertEq(token.balanceOf(to), 1); + assertEq(token.balanceOf(from), 0); + } + + function testSafeTransferFromToEOA(uint256 id, address to) public { + address from = address(0xABCD); + + if (to == address(0) || to == from) to = address(0xBEEF); + + if (uint256(uint160(to)) <= 18 || to.code.length > 0) return; + + token.mint(from, id); + + vm.prank(from); + token.setApprovalForAll(address(this), true); + + token.safeTransferFrom(from, to, id); + + assertEq(token.getApproved(id), address(0)); + assertEq(token.ownerOf(id), to); + assertEq(token.balanceOf(to), 1); + assertEq(token.balanceOf(from), 0); + } + + function testSafeTransferFromToERC721Recipient(uint256 id) public { + address from = address(0xABCD); + + ERC721Recipient recipient = new ERC721Recipient(); + + token.mint(from, id); + + vm.prank(from); + token.setApprovalForAll(address(this), true); + + token.safeTransferFrom(from, address(recipient), id); + + assertEq(token.getApproved(id), address(0)); + assertEq(token.ownerOf(id), address(recipient)); + assertEq(token.balanceOf(address(recipient)), 1); + assertEq(token.balanceOf(from), 0); + + assertEq(recipient.operator(), address(this)); + assertEq(recipient.from(), from); + assertEq(recipient.id(), id); + assertEq(recipient.data(), ""); + } + + function testSafeTransferFromToERC721RecipientWithData(uint256 id, bytes calldata data) public { + address from = address(0xABCD); + ERC721Recipient recipient = new ERC721Recipient(); + + token.mint(from, id); + + vm.prank(from); + token.setApprovalForAll(address(this), true); + + token.safeTransferFrom(from, address(recipient), id, data); + + assertEq(token.getApproved(id), address(0)); + assertEq(token.ownerOf(id), address(recipient)); + assertEq(token.balanceOf(address(recipient)), 1); + assertEq(token.balanceOf(from), 0); + + assertEq(recipient.operator(), address(this)); + assertEq(recipient.from(), from); + assertEq(recipient.id(), id); + assertEq(recipient.data(), data); + } + + function testSafeMintToEOA(uint256 id, address to) public { + if (to == address(0)) to = address(0xBEEF); + + if (uint256(uint160(to)) <= 18 || to.code.length > 0) return; + + token.safeMint(to, id); + + assertEq(token.ownerOf(id), address(to)); + assertEq(token.balanceOf(address(to)), 1); + } + + function testSafeMintToERC721Recipient(uint256 id) public { + ERC721Recipient to = new ERC721Recipient(); + + token.safeMint(address(to), id); + + assertEq(token.ownerOf(id), address(to)); + assertEq(token.balanceOf(address(to)), 1); + + assertEq(to.operator(), address(this)); + assertEq(to.from(), address(0)); + assertEq(to.id(), id); + assertEq(to.data(), ""); + } + + function testSafeMintToERC721RecipientWithData(uint256 id, bytes calldata data) public { + ERC721Recipient to = new ERC721Recipient(); + + token.safeMint(address(to), id, data); + + assertEq(token.ownerOf(id), address(to)); + assertEq(token.balanceOf(address(to)), 1); + + assertEq(to.operator(), address(this)); + assertEq(to.from(), address(0)); + assertEq(to.id(), id); + assertEq(to.data(), data); + } + + function testFailMintToZero(uint256 id) public { + token.mint(address(0), id); + } + + function testFailDoubleMint(uint256 id, address to) public { + if (to == address(0)) to = address(0xBEEF); + + token.mint(to, id); + token.mint(to, id); + } + + function testFailBurnUnMinted(uint256 id) public { + token.burn(id); + } + + function testFailDoubleBurn(uint256 id, address to) public { + if (to == address(0)) to = address(0xBEEF); + + token.mint(to, id); + + token.burn(id); + token.burn(id); + } + + function testFailApproveUnMinted(uint256 id, address to) public { + token.approve(to, id); + } + + function testFailApproveUnAuthorized(address owner, uint256 id, address to) public { + if (owner == address(0) || owner == address(this)) owner = address(0xBEEF); + + token.mint(owner, id); + + token.approve(to, id); + } + + function testFailTransferFromUnOwned(address from, address to, uint256 id) public { + token.transferFrom(from, to, id); + } + + function testFailTransferFromWrongFrom(address owner, address from, address to, uint256 id) public { + if (owner == address(0)) to = address(0xBEEF); + if (from == owner) revert(); + + token.mint(owner, id); + + token.transferFrom(from, to, id); + } + + function testFailTransferFromToZero(uint256 id) public { + token.mint(address(this), id); + + token.transferFrom(address(this), address(0), id); + } + + function testFailTransferFromNotOwner(address from, address to, uint256 id) public { + if (from == address(this)) from = address(0xBEEF); + + token.mint(from, id); + + token.transferFrom(from, to, id); + } + + function testFailSafeTransferFromToNonERC721Recipient(uint256 id) public { + token.mint(address(this), id); + + token.safeTransferFrom(address(this), address(new NonERC721Recipient()), id); + } + + function testFailSafeTransferFromToNonERC721RecipientWithData(uint256 id, bytes calldata data) public { + token.mint(address(this), id); + + token.safeTransferFrom(address(this), address(new NonERC721Recipient()), id, data); + } + + function testFailSafeTransferFromToRevertingERC721Recipient(uint256 id) public { + token.mint(address(this), id); + + token.safeTransferFrom(address(this), address(new RevertingERC721Recipient()), id); + } + + function testFailSafeTransferFromToRevertingERC721RecipientWithData(uint256 id, bytes calldata data) public { + token.mint(address(this), id); + + token.safeTransferFrom(address(this), address(new RevertingERC721Recipient()), id, data); + } + + function testFailSafeTransferFromToERC721RecipientWithWrongReturnData(uint256 id) public { + token.mint(address(this), id); + + token.safeTransferFrom(address(this), address(new WrongReturnDataERC721Recipient()), id); + } + + function testFailSafeTransferFromToERC721RecipientWithWrongReturnDataWithData(uint256 id, bytes calldata data) + public + { + token.mint(address(this), id); + + token.safeTransferFrom(address(this), address(new WrongReturnDataERC721Recipient()), id, data); + } + + function testFailSafeMintToNonERC721Recipient(uint256 id) public { + token.safeMint(address(new NonERC721Recipient()), id); + } + + function testFailSafeMintToNonERC721RecipientWithData(uint256 id, bytes calldata data) public { + token.safeMint(address(new NonERC721Recipient()), id, data); + } + + function testFailSafeMintToRevertingERC721Recipient(uint256 id) public { + token.safeMint(address(new RevertingERC721Recipient()), id); + } + + function testFailSafeMintToRevertingERC721RecipientWithData(uint256 id, bytes calldata data) public { + token.safeMint(address(new RevertingERC721Recipient()), id, data); + } + + function testFailSafeMintToERC721RecipientWithWrongReturnData(uint256 id) public { + token.safeMint(address(new WrongReturnDataERC721Recipient()), id); + } + + function testFailSafeMintToERC721RecipientWithWrongReturnDataWithData(uint256 id, bytes calldata data) public { + token.safeMint(address(new WrongReturnDataERC721Recipient()), id, data); + } + + function testFailOwnerOfUnminted(uint256 id) public view { + token.ownerOf(id); + } +} diff --git a/packages/foundry/lib/openzeppelin-contracts/.changeset/afraid-walls-smell.md b/packages/foundry/lib/openzeppelin-contracts/.changeset/afraid-walls-smell.md deleted file mode 100644 index 682fdde..0000000 --- a/packages/foundry/lib/openzeppelin-contracts/.changeset/afraid-walls-smell.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'openzeppelin-solidity': major ---- - -`ERC1155Receiver`: Removed in favor of `ERC1155Holder`. diff --git a/packages/foundry/lib/openzeppelin-contracts/.changeset/angry-ties-switch.md b/packages/foundry/lib/openzeppelin-contracts/.changeset/angry-ties-switch.md deleted file mode 100644 index f3ec7db..0000000 --- a/packages/foundry/lib/openzeppelin-contracts/.changeset/angry-ties-switch.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'openzeppelin-solidity': major ---- - -`TimelockController`: Changed the role architecture to use `DEFAULT_ADMIN_ROLE` as the admin for all roles, instead of the bespoke `TIMELOCK_ADMIN_ROLE` that was used previously. This aligns with the general recommendation for `AccessControl` and makes the addition of new roles easier. Accordingly, the `admin` parameter and timelock will now be granted `DEFAULT_ADMIN_ROLE` instead of `TIMELOCK_ADMIN_ROLE`. ([#3799](https://github.com/OpenZeppelin/openzeppelin-contracts/pull/3799)) diff --git a/packages/foundry/lib/openzeppelin-contracts/.changeset/big-plums-cover.md b/packages/foundry/lib/openzeppelin-contracts/.changeset/big-plums-cover.md deleted file mode 100644 index 4111562..0000000 --- a/packages/foundry/lib/openzeppelin-contracts/.changeset/big-plums-cover.md +++ /dev/null @@ -1,4 +0,0 @@ ---- -'openzeppelin-solidity': major ---- -Use `abi.encodeCall` in place of `abi.encodeWithSelector` and `abi.encodeWithSignature` for improved type-checking of parameters diff --git a/packages/foundry/lib/openzeppelin-contracts/.changeset/blue-horses-do.md b/packages/foundry/lib/openzeppelin-contracts/.changeset/blue-horses-do.md deleted file mode 100644 index 9df604f..0000000 --- a/packages/foundry/lib/openzeppelin-contracts/.changeset/blue-horses-do.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'openzeppelin-solidity': major ---- - -`ERC2771Forwarder`: Added `deadline` for expiring transactions, batching, and more secure handling of `msg.value`. diff --git a/packages/foundry/lib/openzeppelin-contracts/.changeset/blue-scissors-design.md b/packages/foundry/lib/openzeppelin-contracts/.changeset/blue-scissors-design.md deleted file mode 100644 index c2f815a..0000000 --- a/packages/foundry/lib/openzeppelin-contracts/.changeset/blue-scissors-design.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'openzeppelin-solidity': minor ---- - -`Math`: Make `ceilDiv` to revert on 0 division even if the numerator is 0 diff --git a/packages/foundry/lib/openzeppelin-contracts/.changeset/brave-lobsters-punch.md b/packages/foundry/lib/openzeppelin-contracts/.changeset/brave-lobsters-punch.md deleted file mode 100644 index 60f04e4..0000000 --- a/packages/foundry/lib/openzeppelin-contracts/.changeset/brave-lobsters-punch.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'openzeppelin-solidity': major ---- - -`Governor`: Refactored internals to implement common queuing logic in the core module of the Governor. Added `queue` and `_queueOperations` functions that act at different levels. Modules that implement queuing via timelocks are expected to override `_queueOperations` to implement the timelock-specific logic. Added `_executeOperations` as the equivalent for execution. diff --git a/packages/foundry/lib/openzeppelin-contracts/.changeset/bright-tomatoes-sing.md b/packages/foundry/lib/openzeppelin-contracts/.changeset/bright-tomatoes-sing.md deleted file mode 100644 index 7ef6d92..0000000 --- a/packages/foundry/lib/openzeppelin-contracts/.changeset/bright-tomatoes-sing.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'openzeppelin-solidity': major ---- - -`ERC20`, `ERC721`, `ERC1155`: Deleted `_beforeTokenTransfer` and `_afterTokenTransfer` hooks, added a new internal `_update` function for customizations, and refactored all extensions using those hooks to use `_update` instead. ([#3838](https://github.com/OpenZeppelin/openzeppelin-contracts/pull/3838), [#3876](https://github.com/OpenZeppelin/openzeppelin-contracts/pull/3876), [#4377](https://github.com/OpenZeppelin/openzeppelin-contracts/pull/4377)) diff --git a/packages/foundry/lib/openzeppelin-contracts/.changeset/chilled-spiders-attack.md b/packages/foundry/lib/openzeppelin-contracts/.changeset/chilled-spiders-attack.md deleted file mode 100644 index ef3fc4f..0000000 --- a/packages/foundry/lib/openzeppelin-contracts/.changeset/chilled-spiders-attack.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'openzeppelin-solidity': major ---- - -`ERC1155Supply`: add a `totalSupply()` function that returns the total amount of token circulating, this change will restrict the total tokens minted across all ids to 2\*\*256-1 . diff --git a/packages/foundry/lib/openzeppelin-contracts/.changeset/clever-bats-kick.md b/packages/foundry/lib/openzeppelin-contracts/.changeset/clever-bats-kick.md deleted file mode 100644 index b35301b..0000000 --- a/packages/foundry/lib/openzeppelin-contracts/.changeset/clever-bats-kick.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'openzeppelin-solidity': patch ---- - -`Ownable`: Prevent using address(0) as the initial owner. diff --git a/packages/foundry/lib/openzeppelin-contracts/.changeset/clever-pumas-beg.md b/packages/foundry/lib/openzeppelin-contracts/.changeset/clever-pumas-beg.md deleted file mode 100644 index 5f1f4b1..0000000 --- a/packages/foundry/lib/openzeppelin-contracts/.changeset/clever-pumas-beg.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'openzeppelin-solidity': major ---- - -`Ownable`: Add an `initialOwner` parameter to the constructor, making the ownership initialization explicit. diff --git a/packages/foundry/lib/openzeppelin-contracts/.changeset/dull-ghosts-sip.md b/packages/foundry/lib/openzeppelin-contracts/.changeset/dull-ghosts-sip.md deleted file mode 100644 index 6c36233..0000000 --- a/packages/foundry/lib/openzeppelin-contracts/.changeset/dull-ghosts-sip.md +++ /dev/null @@ -1,6 +0,0 @@ ---- -'openzeppelin-solidity': patch ---- - -`AccessManager`, `AccessManaged`, `GovernorTimelockAccess`: Ensure that calldata shorter than 4 bytes is not padded to 4 bytes. -pr: #4624 diff --git a/packages/foundry/lib/openzeppelin-contracts/.changeset/eight-peaches-guess.md b/packages/foundry/lib/openzeppelin-contracts/.changeset/eight-peaches-guess.md deleted file mode 100644 index ba4e87c..0000000 --- a/packages/foundry/lib/openzeppelin-contracts/.changeset/eight-peaches-guess.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'openzeppelin-solidity': minor ---- - -`Proxy`: Removed redundant `receive` function. diff --git a/packages/foundry/lib/openzeppelin-contracts/.changeset/eighty-crabs-listen.md b/packages/foundry/lib/openzeppelin-contracts/.changeset/eighty-crabs-listen.md deleted file mode 100644 index 7de904d..0000000 --- a/packages/foundry/lib/openzeppelin-contracts/.changeset/eighty-crabs-listen.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'openzeppelin-solidity': patch ---- - -Optimize `Strings.equal` diff --git a/packages/foundry/lib/openzeppelin-contracts/.changeset/eighty-lemons-shake.md b/packages/foundry/lib/openzeppelin-contracts/.changeset/eighty-lemons-shake.md deleted file mode 100644 index 4e53893..0000000 --- a/packages/foundry/lib/openzeppelin-contracts/.changeset/eighty-lemons-shake.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'openzeppelin-solidity': major ---- - -`ERC721`: `_approve` no longer allows approving the owner of the tokenId. `_setApprovalForAll` no longer allows setting address(0) as an operator. diff --git a/packages/foundry/lib/openzeppelin-contracts/.changeset/empty-cheetahs-hunt.md b/packages/foundry/lib/openzeppelin-contracts/.changeset/empty-cheetahs-hunt.md deleted file mode 100644 index eb20381..0000000 --- a/packages/foundry/lib/openzeppelin-contracts/.changeset/empty-cheetahs-hunt.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'openzeppelin-solidity': major ---- - -`ERC721URIStorage`: Allow setting the token URI prior to minting. diff --git a/packages/foundry/lib/openzeppelin-contracts/.changeset/empty-taxis-kiss.md b/packages/foundry/lib/openzeppelin-contracts/.changeset/empty-taxis-kiss.md deleted file mode 100644 index b01c92b..0000000 --- a/packages/foundry/lib/openzeppelin-contracts/.changeset/empty-taxis-kiss.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'openzeppelin-solidity': major ---- - -`UUPSUpgradeable`, `TransparentUpgradeableProxy` and `ProxyAdmin`: Removed `upgradeTo` and `upgrade` functions, and made `upgradeToAndCall` and `upgradeAndCall` ignore the data argument if it is empty. It is no longer possible to invoke the receive function (or send value with empty data) along with an upgrade. diff --git a/packages/foundry/lib/openzeppelin-contracts/.changeset/fair-humans-peel.md b/packages/foundry/lib/openzeppelin-contracts/.changeset/fair-humans-peel.md deleted file mode 100644 index 3c0dc3c..0000000 --- a/packages/foundry/lib/openzeppelin-contracts/.changeset/fair-humans-peel.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'openzeppelin-solidity': major ---- - -`ERC721URIStorage`, `ERC721Royalty`: Stop resetting token-specific URI and royalties when burning. diff --git a/packages/foundry/lib/openzeppelin-contracts/.changeset/fifty-owls-retire.md b/packages/foundry/lib/openzeppelin-contracts/.changeset/fifty-owls-retire.md deleted file mode 100644 index 118fad4..0000000 --- a/packages/foundry/lib/openzeppelin-contracts/.changeset/fifty-owls-retire.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'openzeppelin-solidity': major ---- - -`Address`: Removed the ability to customize error messages. A common custom error is always used if the underlying revert reason cannot be bubbled up. diff --git a/packages/foundry/lib/openzeppelin-contracts/.changeset/flat-bottles-wonder.md b/packages/foundry/lib/openzeppelin-contracts/.changeset/flat-bottles-wonder.md deleted file mode 100644 index f7ee7dd..0000000 --- a/packages/foundry/lib/openzeppelin-contracts/.changeset/flat-bottles-wonder.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -'openzeppelin-solidity': minor ---- - -Replace some uses of `abi.encodePacked` with clearer alternatives (e.g. `bytes.concat`, `string.concat`). (#4504)[https://github.com/OpenZeppelin/openzeppelin-contracts/pull/4504] - -pr: #4296 diff --git a/packages/foundry/lib/openzeppelin-contracts/.changeset/fluffy-countries-buy.md b/packages/foundry/lib/openzeppelin-contracts/.changeset/fluffy-countries-buy.md deleted file mode 100644 index 0cc7de3..0000000 --- a/packages/foundry/lib/openzeppelin-contracts/.changeset/fluffy-countries-buy.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'openzeppelin-solidity': minor ---- - -`Arrays`: Optimize `findUpperBound` by removing redundant SLOAD. diff --git a/packages/foundry/lib/openzeppelin-contracts/.changeset/four-adults-knock.md b/packages/foundry/lib/openzeppelin-contracts/.changeset/four-adults-knock.md deleted file mode 100644 index f6f566d..0000000 --- a/packages/foundry/lib/openzeppelin-contracts/.changeset/four-adults-knock.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'openzeppelin-solidity': patch ---- - -`ECDSA`: Use unchecked arithmetic for the `tryRecover` function that receives the `r` and `vs` short-signature fields separately. diff --git a/packages/foundry/lib/openzeppelin-contracts/.changeset/fresh-birds-kiss.md b/packages/foundry/lib/openzeppelin-contracts/.changeset/fresh-birds-kiss.md deleted file mode 100644 index 221f54c..0000000 --- a/packages/foundry/lib/openzeppelin-contracts/.changeset/fresh-birds-kiss.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'openzeppelin-solidity': major ---- - -`Checkpoints`: library moved from `utils` to `utils/structs` diff --git a/packages/foundry/lib/openzeppelin-contracts/.changeset/green-pumpkins-end.md b/packages/foundry/lib/openzeppelin-contracts/.changeset/green-pumpkins-end.md deleted file mode 100644 index 03cfe02..0000000 --- a/packages/foundry/lib/openzeppelin-contracts/.changeset/green-pumpkins-end.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'openzeppelin-solidity': major ---- - -`SafeERC20`: Removed `safePermit` in favor of documentation-only `permit` recommendations. diff --git a/packages/foundry/lib/openzeppelin-contracts/.changeset/grumpy-bulldogs-call.md b/packages/foundry/lib/openzeppelin-contracts/.changeset/grumpy-bulldogs-call.md deleted file mode 100644 index c034587..0000000 --- a/packages/foundry/lib/openzeppelin-contracts/.changeset/grumpy-bulldogs-call.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'openzeppelin-solidity': major ---- - -`Governor`: Optimized use of storage for proposal data diff --git a/packages/foundry/lib/openzeppelin-contracts/.changeset/grumpy-poets-rush.md b/packages/foundry/lib/openzeppelin-contracts/.changeset/grumpy-poets-rush.md deleted file mode 100644 index e566a10..0000000 --- a/packages/foundry/lib/openzeppelin-contracts/.changeset/grumpy-poets-rush.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'openzeppelin-solidity': major ---- - -Upgradeable Contracts: No longer transpile interfaces, libraries, and stateless contracts. diff --git a/packages/foundry/lib/openzeppelin-contracts/.changeset/grumpy-worms-tease.md b/packages/foundry/lib/openzeppelin-contracts/.changeset/grumpy-worms-tease.md deleted file mode 100644 index 910b996..0000000 --- a/packages/foundry/lib/openzeppelin-contracts/.changeset/grumpy-worms-tease.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'openzeppelin-solidity': major ---- - -`ERC1967Utils`: Refactor the `ERC1967Upgrade` abstract contract as a library. diff --git a/packages/foundry/lib/openzeppelin-contracts/.changeset/happy-falcons-walk.md b/packages/foundry/lib/openzeppelin-contracts/.changeset/happy-falcons-walk.md deleted file mode 100644 index bba9642..0000000 --- a/packages/foundry/lib/openzeppelin-contracts/.changeset/happy-falcons-walk.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'openzeppelin-solidity': major ---- - -`TransparentUpgradeableProxy`: Admin is now stored in an immutable variable (set during construction) to avoid unnecessary storage reads on every proxy call. This removed the ability to ever change the admin. Transfer of the upgrade capability is exclusively handled through the ownership of the `ProxyAdmin`. diff --git a/packages/foundry/lib/openzeppelin-contracts/.changeset/healthy-gorillas-applaud.md b/packages/foundry/lib/openzeppelin-contracts/.changeset/healthy-gorillas-applaud.md deleted file mode 100644 index 1d4156e..0000000 --- a/packages/foundry/lib/openzeppelin-contracts/.changeset/healthy-gorillas-applaud.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'openzeppelin-solidity': major ---- - -`VestingWallet`: Use `Ownable` instead of an immutable `beneficiary`. diff --git a/packages/foundry/lib/openzeppelin-contracts/.changeset/heavy-drinks-fail.md b/packages/foundry/lib/openzeppelin-contracts/.changeset/heavy-drinks-fail.md deleted file mode 100644 index bbe93ca..0000000 --- a/packages/foundry/lib/openzeppelin-contracts/.changeset/heavy-drinks-fail.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'openzeppelin-solidity': major ---- - -`ERC20`: Remove `Approval` event previously emitted in `transferFrom` to indicate that part of the allowance was consumed. With this change, allowances are no longer reconstructible from events. See the code for guidelines on how to re-enable this event if needed. diff --git a/packages/foundry/lib/openzeppelin-contracts/.changeset/hip-beds-provide.md b/packages/foundry/lib/openzeppelin-contracts/.changeset/hip-beds-provide.md deleted file mode 100644 index c672838..0000000 --- a/packages/foundry/lib/openzeppelin-contracts/.changeset/hip-beds-provide.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'openzeppelin-solidity': major ---- - -Move the logic to validate ERC-1822 during an upgrade from `ERC1967Utils` to `UUPSUpgradeable`. diff --git a/packages/foundry/lib/openzeppelin-contracts/.changeset/hip-goats-fail.md b/packages/foundry/lib/openzeppelin-contracts/.changeset/hip-goats-fail.md deleted file mode 100644 index 5cfe2ef..0000000 --- a/packages/foundry/lib/openzeppelin-contracts/.changeset/hip-goats-fail.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'openzeppelin-solidity': patch ---- - -`VestingWallet`: Fix revert during 1 second time window when duration is 0. diff --git a/packages/foundry/lib/openzeppelin-contracts/.changeset/hot-coins-judge.md b/packages/foundry/lib/openzeppelin-contracts/.changeset/hot-coins-judge.md deleted file mode 100644 index e544af4..0000000 --- a/packages/foundry/lib/openzeppelin-contracts/.changeset/hot-coins-judge.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'openzeppelin-solidity': minor ---- - -`Arrays`: Add `unsafeMemoryAccess` helpers to read from a memory array without checking the length. diff --git a/packages/foundry/lib/openzeppelin-contracts/.changeset/hot-dingos-kiss.md b/packages/foundry/lib/openzeppelin-contracts/.changeset/hot-dingos-kiss.md deleted file mode 100644 index fb213cd..0000000 --- a/packages/foundry/lib/openzeppelin-contracts/.changeset/hot-dingos-kiss.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'openzeppelin-solidity': major ---- - -`MessageHashUtils`: Add a new library for creating message digest to be used along with signing or recovery such as ECDSA or ERC-1271. These functions are moved from the `ECDSA` library. diff --git a/packages/foundry/lib/openzeppelin-contracts/.changeset/hot-plums-approve.md b/packages/foundry/lib/openzeppelin-contracts/.changeset/hot-plums-approve.md deleted file mode 100644 index 1315590..0000000 --- a/packages/foundry/lib/openzeppelin-contracts/.changeset/hot-plums-approve.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'openzeppelin-solidity': minor ---- - -`GovernorTimelockControl`: Clean up timelock id on execution for gas refund. diff --git a/packages/foundry/lib/openzeppelin-contracts/.changeset/large-humans-remain.md b/packages/foundry/lib/openzeppelin-contracts/.changeset/large-humans-remain.md deleted file mode 100644 index 95b72ae..0000000 --- a/packages/foundry/lib/openzeppelin-contracts/.changeset/large-humans-remain.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'openzeppelin-solidity': patch ---- - -`MerkleProof`: Use custom error to report invalid multiproof instead of reverting with overflow panic. diff --git a/packages/foundry/lib/openzeppelin-contracts/.changeset/lazy-rice-joke.md b/packages/foundry/lib/openzeppelin-contracts/.changeset/lazy-rice-joke.md deleted file mode 100644 index 6e12430..0000000 --- a/packages/foundry/lib/openzeppelin-contracts/.changeset/lazy-rice-joke.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'openzeppelin-solidity': minor ---- - -`Initializable`: Use intermediate variables to improve readability. diff --git a/packages/foundry/lib/openzeppelin-contracts/.changeset/little-falcons-build.md b/packages/foundry/lib/openzeppelin-contracts/.changeset/little-falcons-build.md deleted file mode 100644 index b310a8a..0000000 --- a/packages/foundry/lib/openzeppelin-contracts/.changeset/little-falcons-build.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'openzeppelin-solidity': minor ---- - -`EIP712`: Add internal getters for the name and version strings diff --git a/packages/foundry/lib/openzeppelin-contracts/.changeset/loud-shrimps-play.md b/packages/foundry/lib/openzeppelin-contracts/.changeset/loud-shrimps-play.md deleted file mode 100644 index 3de2da0..0000000 --- a/packages/foundry/lib/openzeppelin-contracts/.changeset/loud-shrimps-play.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'openzeppelin-solidity': minor ---- - -`TimelockController`: Add a state getter that returns an `OperationState` enum. diff --git a/packages/foundry/lib/openzeppelin-contracts/.changeset/lovely-geckos-hide.md b/packages/foundry/lib/openzeppelin-contracts/.changeset/lovely-geckos-hide.md deleted file mode 100644 index 1fbcb20..0000000 --- a/packages/foundry/lib/openzeppelin-contracts/.changeset/lovely-geckos-hide.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'openzeppelin-solidity': major ---- - -Replace revert strings and require statements with custom errors. diff --git a/packages/foundry/lib/openzeppelin-contracts/.changeset/mean-walls-watch.md b/packages/foundry/lib/openzeppelin-contracts/.changeset/mean-walls-watch.md deleted file mode 100644 index 6bcf609..0000000 --- a/packages/foundry/lib/openzeppelin-contracts/.changeset/mean-walls-watch.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'openzeppelin-solidity': major ---- - -`Nonces`: Added a new contract to keep track of user nonces. Used for signatures in `ERC20Permit`, `ERC20Votes`, and `ERC721Votes`. ([#3816](https://github.com/OpenZeppelin/openzeppelin-contracts/pull/3816)) diff --git a/packages/foundry/lib/openzeppelin-contracts/.changeset/mighty-donuts-smile.md b/packages/foundry/lib/openzeppelin-contracts/.changeset/mighty-donuts-smile.md deleted file mode 100644 index 5885a73..0000000 --- a/packages/foundry/lib/openzeppelin-contracts/.changeset/mighty-donuts-smile.md +++ /dev/null @@ -1,6 +0,0 @@ ---- -'openzeppelin-solidity': patch ---- - -`Governor`: Add validation in ERC1155 and ERC721 receiver hooks to ensure Governor is the executor. - diff --git a/packages/foundry/lib/openzeppelin-contracts/.changeset/orange-apes-draw.md b/packages/foundry/lib/openzeppelin-contracts/.changeset/orange-apes-draw.md deleted file mode 100644 index 5f2b7d9..0000000 --- a/packages/foundry/lib/openzeppelin-contracts/.changeset/orange-apes-draw.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'openzeppelin-solidity': major ---- - -Switched to using explicit Solidity import statements. Some previously available symbols may now have to be separately imported. diff --git a/packages/foundry/lib/openzeppelin-contracts/.changeset/pink-suns-mix.md b/packages/foundry/lib/openzeppelin-contracts/.changeset/pink-suns-mix.md deleted file mode 100644 index eb7aaac..0000000 --- a/packages/foundry/lib/openzeppelin-contracts/.changeset/pink-suns-mix.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'openzeppelin-solidity': patch ---- - -`Math`: Optimized stack operations in `mulDiv`. diff --git a/packages/foundry/lib/openzeppelin-contracts/.changeset/popular-deers-raise.md b/packages/foundry/lib/openzeppelin-contracts/.changeset/popular-deers-raise.md deleted file mode 100644 index ec1fb74..0000000 --- a/packages/foundry/lib/openzeppelin-contracts/.changeset/popular-deers-raise.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'openzeppelin-solidity': major ---- - -`Governor`: Add support for casting votes with ERC-1271 signatures by using a `bytes memory signature` instead of `r`, `s` and `v` arguments in the `castVoteBySig` and `castVoteWithReasonAndParamsBySig` functions. diff --git a/packages/foundry/lib/openzeppelin-contracts/.changeset/pre.json b/packages/foundry/lib/openzeppelin-contracts/.changeset/pre.json deleted file mode 100644 index f84a1a9..0000000 --- a/packages/foundry/lib/openzeppelin-contracts/.changeset/pre.json +++ /dev/null @@ -1,89 +0,0 @@ -{ - "mode": "pre", - "tag": "rc", - "initialVersions": { - "openzeppelin-solidity": "4.9.2" - }, - "changesets": [ - "afraid-walls-smell", - "angry-ties-switch", - "big-plums-cover", - "blue-horses-do", - "blue-scissors-design", - "brave-lobsters-punch", - "bright-tomatoes-sing", - "chilled-spiders-attack", - "clever-bats-kick", - "clever-pumas-beg", - "dull-ghosts-sip", - "eight-peaches-guess", - "eighty-crabs-listen", - "eighty-lemons-shake", - "empty-cheetahs-hunt", - "empty-taxis-kiss", - "fair-humans-peel", - "fifty-owls-retire", - "flat-bottles-wonder", - "fluffy-countries-buy", - "four-adults-knock", - "fresh-birds-kiss", - "green-pumpkins-end", - "grumpy-bulldogs-call", - "grumpy-poets-rush", - "grumpy-worms-tease", - "happy-falcons-walk", - "healthy-gorillas-applaud", - "heavy-drinks-fail", - "hip-beds-provide", - "hip-goats-fail", - "hot-coins-judge", - "hot-dingos-kiss", - "hot-plums-approve", - "large-humans-remain", - "lazy-rice-joke", - "little-falcons-build", - "loud-shrimps-play", - "lovely-geckos-hide", - "mean-walls-watch", - "mighty-donuts-smile", - "orange-apes-draw", - "pink-suns-mix", - "popular-deers-raise", - "proud-seals-complain", - "proud-spiders-attend", - "purple-cats-cheer", - "purple-squids-attend", - "quiet-trainers-kick", - "red-dots-fold", - "rotten-insects-wash", - "serious-books-lie", - "short-eels-enjoy", - "silly-bees-beam", - "six-frogs-turn", - "sixty-numbers-reply", - "slimy-penguins-attack", - "smooth-books-wink", - "smooth-cougars-jump", - "spicy-sheep-eat", - "spotty-hotels-type", - "strong-poems-thank", - "swift-bags-divide", - "swift-numbers-cry", - "tasty-tomatoes-turn", - "tender-shirts-turn", - "thick-pumpkins-exercise", - "thin-camels-matter", - "thirty-drinks-happen", - "tough-drinks-hammer", - "two-wasps-punch", - "unlucky-beans-obey", - "violet-dancers-cough", - "violet-melons-press", - "warm-guests-rule", - "wet-bears-heal", - "wild-beds-visit", - "wild-peas-remain", - "wild-rockets-rush", - "wild-windows-trade" - ] -} diff --git a/packages/foundry/lib/openzeppelin-contracts/.changeset/proud-seals-complain.md b/packages/foundry/lib/openzeppelin-contracts/.changeset/proud-seals-complain.md deleted file mode 100644 index 35df477..0000000 --- a/packages/foundry/lib/openzeppelin-contracts/.changeset/proud-seals-complain.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'openzeppelin-solidity': patch ---- - -`BeaconProxy`: Use an immutable variable to store the address of the beacon. It is no longer possible for a `BeaconProxy` to upgrade by changing to another beacon. diff --git a/packages/foundry/lib/openzeppelin-contracts/.changeset/proud-spiders-attend.md b/packages/foundry/lib/openzeppelin-contracts/.changeset/proud-spiders-attend.md deleted file mode 100644 index a8f7694..0000000 --- a/packages/foundry/lib/openzeppelin-contracts/.changeset/proud-spiders-attend.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'openzeppelin-solidity': major ---- - -`ERC721`: Renamed `_requireMinted` to `_requireOwned` and added a return value with the current owner. Implemented `ownerOf` in terms of `_requireOwned`. diff --git a/packages/foundry/lib/openzeppelin-contracts/.changeset/purple-cats-cheer.md b/packages/foundry/lib/openzeppelin-contracts/.changeset/purple-cats-cheer.md deleted file mode 100644 index 7e9dc1c..0000000 --- a/packages/foundry/lib/openzeppelin-contracts/.changeset/purple-cats-cheer.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'openzeppelin-solidity': major ---- - -`GovernorTimelockControl`: Add the Governor instance address as part of the TimelockController operation `salt` to avoid operation id collisions between governors using the same TimelockController. diff --git a/packages/foundry/lib/openzeppelin-contracts/.changeset/purple-squids-attend.md b/packages/foundry/lib/openzeppelin-contracts/.changeset/purple-squids-attend.md deleted file mode 100644 index 7a13c7b..0000000 --- a/packages/foundry/lib/openzeppelin-contracts/.changeset/purple-squids-attend.md +++ /dev/null @@ -1,6 +0,0 @@ ---- -'openzeppelin-solidity': patch ---- - -`AccessManager`: Use named return parameters in functions that return multiple values. -pr: #4624 diff --git a/packages/foundry/lib/openzeppelin-contracts/.changeset/quiet-trainers-kick.md b/packages/foundry/lib/openzeppelin-contracts/.changeset/quiet-trainers-kick.md deleted file mode 100644 index 5de9646..0000000 --- a/packages/foundry/lib/openzeppelin-contracts/.changeset/quiet-trainers-kick.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'openzeppelin-solidity': minor ---- - -`AccessManager`: Added a new contract for managing access control of complex systems in a consolidated location. diff --git a/packages/foundry/lib/openzeppelin-contracts/.changeset/red-dots-fold.md b/packages/foundry/lib/openzeppelin-contracts/.changeset/red-dots-fold.md deleted file mode 100644 index 08cc778..0000000 --- a/packages/foundry/lib/openzeppelin-contracts/.changeset/red-dots-fold.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'openzeppelin-solidity': major ---- - -Overrides are now used internally for a number of functions that were previously hardcoded to their default implementation in certain locations: `ERC1155Supply.totalSupply`, `ERC721.ownerOf`, `ERC721.balanceOf` and `ERC721.totalSupply` in `ERC721Enumerable`, `ERC20.totalSupply` in `ERC20FlashMint`, and `ERC1967._getImplementation` in `ERC1967Proxy`. diff --git a/packages/foundry/lib/openzeppelin-contracts/.changeset/rotten-insects-wash.md b/packages/foundry/lib/openzeppelin-contracts/.changeset/rotten-insects-wash.md deleted file mode 100644 index 9b2f117..0000000 --- a/packages/foundry/lib/openzeppelin-contracts/.changeset/rotten-insects-wash.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'openzeppelin-solidity': major ---- - -`ProxyAdmin`: Removed `getProxyAdmin` and `getProxyImplementation` getters. ([#3820](https://github.com/OpenZeppelin/openzeppelin-contracts/pull/3820)) diff --git a/packages/foundry/lib/openzeppelin-contracts/.changeset/serious-books-lie.md b/packages/foundry/lib/openzeppelin-contracts/.changeset/serious-books-lie.md deleted file mode 100644 index 6f0a0a7..0000000 --- a/packages/foundry/lib/openzeppelin-contracts/.changeset/serious-books-lie.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'openzeppelin-solidity': patch ---- - -`ERC1155`: Optimize array allocation. diff --git a/packages/foundry/lib/openzeppelin-contracts/.changeset/short-eels-enjoy.md b/packages/foundry/lib/openzeppelin-contracts/.changeset/short-eels-enjoy.md deleted file mode 100644 index e826c6d..0000000 --- a/packages/foundry/lib/openzeppelin-contracts/.changeset/short-eels-enjoy.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'openzeppelin-solidity': major ---- - -Bump minimum compiler version required to 0.8.20 diff --git a/packages/foundry/lib/openzeppelin-contracts/.changeset/silly-bees-beam.md b/packages/foundry/lib/openzeppelin-contracts/.changeset/silly-bees-beam.md deleted file mode 100644 index 0f4f405..0000000 --- a/packages/foundry/lib/openzeppelin-contracts/.changeset/silly-bees-beam.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -'openzeppelin-solidity': major ---- - -`ERC20Votes`: Changed internal vote accounting to reusable `Votes` module previously used by `ERC721Votes`. Removed implicit `ERC20Permit` inheritance. Note that the `DOMAIN_SEPARATOR` getter was previously guaranteed to be available for `ERC20Votes` contracts, but is no longer available unless `ERC20Permit` is explicitly used; ERC-5267 support is included in `ERC20Votes` with `EIP712` and is recommended as an alternative. - -pr: #3816 diff --git a/packages/foundry/lib/openzeppelin-contracts/.changeset/six-frogs-turn.md b/packages/foundry/lib/openzeppelin-contracts/.changeset/six-frogs-turn.md deleted file mode 100644 index 9c5668b..0000000 --- a/packages/foundry/lib/openzeppelin-contracts/.changeset/six-frogs-turn.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'openzeppelin-solidity': major ---- - -`ERC20`: Remove the non-standard `increaseAllowance` and `decreaseAllowance` functions. diff --git a/packages/foundry/lib/openzeppelin-contracts/.changeset/sixty-numbers-reply.md b/packages/foundry/lib/openzeppelin-contracts/.changeset/sixty-numbers-reply.md deleted file mode 100644 index 4e6faa8..0000000 --- a/packages/foundry/lib/openzeppelin-contracts/.changeset/sixty-numbers-reply.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'openzeppelin-solidity': major ---- - -`Governor`: Add `voter` and `nonce` parameters in signed ballots, to avoid forging signatures for random addresses, prevent signature replay, and allow invalidating signatures. Add `voter` as a new parameter in the `castVoteBySig` and `castVoteWithReasonAndParamsBySig` functions. diff --git a/packages/foundry/lib/openzeppelin-contracts/.changeset/slimy-penguins-attack.md b/packages/foundry/lib/openzeppelin-contracts/.changeset/slimy-penguins-attack.md deleted file mode 100644 index dcf91e9..0000000 --- a/packages/foundry/lib/openzeppelin-contracts/.changeset/slimy-penguins-attack.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'openzeppelin-solidity': major ---- - -`TransparentUpgradeableProxy`: Removed `admin` and `implementation` getters, which were only callable by the proxy owner and thus not very useful. ([#3820](https://github.com/OpenZeppelin/openzeppelin-contracts/pull/3820)) diff --git a/packages/foundry/lib/openzeppelin-contracts/.changeset/smooth-books-wink.md b/packages/foundry/lib/openzeppelin-contracts/.changeset/smooth-books-wink.md deleted file mode 100644 index e5eb3fb..0000000 --- a/packages/foundry/lib/openzeppelin-contracts/.changeset/smooth-books-wink.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'openzeppelin-solidity': major ---- - -`ERC1155`: Remove check for address zero in `balanceOf`. diff --git a/packages/foundry/lib/openzeppelin-contracts/.changeset/smooth-cougars-jump.md b/packages/foundry/lib/openzeppelin-contracts/.changeset/smooth-cougars-jump.md deleted file mode 100644 index 337101c..0000000 --- a/packages/foundry/lib/openzeppelin-contracts/.changeset/smooth-cougars-jump.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'openzeppelin-solidity': major ---- - -`ReentrancyGuard`, `Pausable`: Moved to `utils` directory. diff --git a/packages/foundry/lib/openzeppelin-contracts/.changeset/spicy-sheep-eat.md b/packages/foundry/lib/openzeppelin-contracts/.changeset/spicy-sheep-eat.md deleted file mode 100644 index 17b6d55..0000000 --- a/packages/foundry/lib/openzeppelin-contracts/.changeset/spicy-sheep-eat.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'openzeppelin-solidity': major ---- - -`access`: Move `AccessControl` extensions to a dedicated directory. diff --git a/packages/foundry/lib/openzeppelin-contracts/.changeset/spotty-hotels-type.md b/packages/foundry/lib/openzeppelin-contracts/.changeset/spotty-hotels-type.md deleted file mode 100644 index 866d8fc..0000000 --- a/packages/foundry/lib/openzeppelin-contracts/.changeset/spotty-hotels-type.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'openzeppelin-solidity': patch ---- - -`ERC721Consecutive`: Add a `_firstConsecutiveId` internal function that can be overridden to change the id of the first token minted through `_mintConsecutive`. diff --git a/packages/foundry/lib/openzeppelin-contracts/.changeset/strong-poems-thank.md b/packages/foundry/lib/openzeppelin-contracts/.changeset/strong-poems-thank.md deleted file mode 100644 index 5f496de..0000000 --- a/packages/foundry/lib/openzeppelin-contracts/.changeset/strong-poems-thank.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'openzeppelin-solidity': major ---- - -`DoubleEndedQueue`: refactor internal structure to use `uint128` instead of `int128`. This has no effect on the library interface. diff --git a/packages/foundry/lib/openzeppelin-contracts/.changeset/swift-bags-divide.md b/packages/foundry/lib/openzeppelin-contracts/.changeset/swift-bags-divide.md deleted file mode 100644 index 9af63e9..0000000 --- a/packages/foundry/lib/openzeppelin-contracts/.changeset/swift-bags-divide.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'openzeppelin-solidity': patch ---- - -`Governor`: Add a mechanism to restrict the address of the proposer using a suffix in the description. diff --git a/packages/foundry/lib/openzeppelin-contracts/.changeset/swift-numbers-cry.md b/packages/foundry/lib/openzeppelin-contracts/.changeset/swift-numbers-cry.md deleted file mode 100644 index 48afbd2..0000000 --- a/packages/foundry/lib/openzeppelin-contracts/.changeset/swift-numbers-cry.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'openzeppelin-solidity': minor ---- - -`Governor`, `Initializable`, and `UUPSUpgradeable`: Use internal functions in modifiers to optimize bytecode size. diff --git a/packages/foundry/lib/openzeppelin-contracts/.changeset/tasty-tomatoes-turn.md b/packages/foundry/lib/openzeppelin-contracts/.changeset/tasty-tomatoes-turn.md deleted file mode 100644 index 3fe46a9..0000000 --- a/packages/foundry/lib/openzeppelin-contracts/.changeset/tasty-tomatoes-turn.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'openzeppelin-solidity': major ---- - -`Strings`: Rename `toString(int256)` to `toStringSigned(int256)`. diff --git a/packages/foundry/lib/openzeppelin-contracts/.changeset/tender-shirts-turn.md b/packages/foundry/lib/openzeppelin-contracts/.changeset/tender-shirts-turn.md deleted file mode 100644 index 9c98e6e..0000000 --- a/packages/foundry/lib/openzeppelin-contracts/.changeset/tender-shirts-turn.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'openzeppelin-solidity': major ---- - -`BeaconProxy`: Reject value in initialization unless a payable function is explicitly invoked. diff --git a/packages/foundry/lib/openzeppelin-contracts/.changeset/thick-pumpkins-exercise.md b/packages/foundry/lib/openzeppelin-contracts/.changeset/thick-pumpkins-exercise.md deleted file mode 100644 index 8df8b51..0000000 --- a/packages/foundry/lib/openzeppelin-contracts/.changeset/thick-pumpkins-exercise.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'openzeppelin-solidity': major ---- - -`Initializable`: Use the namespaced storage pattern to avoid putting critical variables in slot 0. Allow reinitializer versions greater than 256. diff --git a/packages/foundry/lib/openzeppelin-contracts/.changeset/thin-camels-matter.md b/packages/foundry/lib/openzeppelin-contracts/.changeset/thin-camels-matter.md deleted file mode 100644 index c832b11..0000000 --- a/packages/foundry/lib/openzeppelin-contracts/.changeset/thin-camels-matter.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'openzeppelin-solidity': minor ---- - -`ERC1155`: Bubble errors triggered in the `onERC1155Received` and `onERC1155BatchReceived` hooks. diff --git a/packages/foundry/lib/openzeppelin-contracts/.changeset/thirty-drinks-happen.md b/packages/foundry/lib/openzeppelin-contracts/.changeset/thirty-drinks-happen.md deleted file mode 100644 index 85be973..0000000 --- a/packages/foundry/lib/openzeppelin-contracts/.changeset/thirty-drinks-happen.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'openzeppelin-solidity': major ---- - -`AccessManager`: Make `schedule` and `execute` more conservative when delay is 0. diff --git a/packages/foundry/lib/openzeppelin-contracts/.changeset/tough-drinks-hammer.md b/packages/foundry/lib/openzeppelin-contracts/.changeset/tough-drinks-hammer.md deleted file mode 100644 index 51b3836..0000000 --- a/packages/foundry/lib/openzeppelin-contracts/.changeset/tough-drinks-hammer.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'openzeppelin-solidity': patch ---- - -`ERC1155`: Optimize array accesses by skipping bounds checking when unnecessary. diff --git a/packages/foundry/lib/openzeppelin-contracts/.changeset/two-wasps-punch.md b/packages/foundry/lib/openzeppelin-contracts/.changeset/two-wasps-punch.md deleted file mode 100644 index d382ab6..0000000 --- a/packages/foundry/lib/openzeppelin-contracts/.changeset/two-wasps-punch.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'openzeppelin-solidity': minor ---- - -`AccessControl`: Add a boolean return value to the internal `_grantRole` and `_revokeRole` functions indicating whether the role was granted or revoked. diff --git a/packages/foundry/lib/openzeppelin-contracts/.changeset/unlucky-beans-obey.md b/packages/foundry/lib/openzeppelin-contracts/.changeset/unlucky-beans-obey.md deleted file mode 100644 index e472d3c..0000000 --- a/packages/foundry/lib/openzeppelin-contracts/.changeset/unlucky-beans-obey.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'openzeppelin-solidity': patch ---- - -`ERC2771Context`: Return the forwarder address whenever the `msg.data` of a call originating from a trusted forwarder is not long enough to contain the request signer address (i.e. `msg.data.length` is less than 20 bytes), as specified by ERC-2771. diff --git a/packages/foundry/lib/openzeppelin-contracts/.changeset/violet-dancers-cough.md b/packages/foundry/lib/openzeppelin-contracts/.changeset/violet-dancers-cough.md deleted file mode 100644 index c6160d2..0000000 --- a/packages/foundry/lib/openzeppelin-contracts/.changeset/violet-dancers-cough.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'openzeppelin-solidity': minor ---- - -Remove the `override` specifier from functions that only override a single interface function. diff --git a/packages/foundry/lib/openzeppelin-contracts/.changeset/violet-melons-press.md b/packages/foundry/lib/openzeppelin-contracts/.changeset/violet-melons-press.md deleted file mode 100644 index 18fd70b..0000000 --- a/packages/foundry/lib/openzeppelin-contracts/.changeset/violet-melons-press.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'openzeppelin-solidity': major ---- - -`GovernorTimelockAccess`: Added a module to connect a governor with an instance of `AccessManager`, allowing the governor to make calls that are delay-restricted by the manager using the normal `queue` workflow. diff --git a/packages/foundry/lib/openzeppelin-contracts/.changeset/warm-guests-rule.md b/packages/foundry/lib/openzeppelin-contracts/.changeset/warm-guests-rule.md deleted file mode 100644 index 049da4d..0000000 --- a/packages/foundry/lib/openzeppelin-contracts/.changeset/warm-guests-rule.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'openzeppelin-solidity': patch ---- - -`ERC2771Context`: Prevent revert in `_msgData()` when a call originating from a trusted forwarder is not long enough to contain the request signer address (i.e. `msg.data.length` is less than 20 bytes). Return the full calldata in that case. diff --git a/packages/foundry/lib/openzeppelin-contracts/.changeset/wet-bears-heal.md b/packages/foundry/lib/openzeppelin-contracts/.changeset/wet-bears-heal.md deleted file mode 100644 index 2df32f3..0000000 --- a/packages/foundry/lib/openzeppelin-contracts/.changeset/wet-bears-heal.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'openzeppelin-solidity': major ---- - -Upgradeable contracts now use namespaced storage (EIP-7201). diff --git a/packages/foundry/lib/openzeppelin-contracts/.changeset/wild-beds-visit.md b/packages/foundry/lib/openzeppelin-contracts/.changeset/wild-beds-visit.md deleted file mode 100644 index e97dee2..0000000 --- a/packages/foundry/lib/openzeppelin-contracts/.changeset/wild-beds-visit.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'openzeppelin-solidity': major ---- - -`GovernorStorage`: Added a new governor extension that stores the proposal details in storage, with an interface that operates on `proposalId`, as well as proposal enumerability. This replaces the old `GovernorCompatibilityBravo` module. diff --git a/packages/foundry/lib/openzeppelin-contracts/.changeset/wild-peas-remain.md b/packages/foundry/lib/openzeppelin-contracts/.changeset/wild-peas-remain.md deleted file mode 100644 index 83b4bb3..0000000 --- a/packages/foundry/lib/openzeppelin-contracts/.changeset/wild-peas-remain.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'openzeppelin-solidity': major ---- - -`Votes`: Use Trace208 for checkpoints. This enables EIP-6372 clock support for keys but reduces the max supported voting power to uint208. diff --git a/packages/foundry/lib/openzeppelin-contracts/.changeset/wild-rockets-rush.md b/packages/foundry/lib/openzeppelin-contracts/.changeset/wild-rockets-rush.md deleted file mode 100644 index 7fc6f59..0000000 --- a/packages/foundry/lib/openzeppelin-contracts/.changeset/wild-rockets-rush.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'openzeppelin-solidity': major ---- - -`Math`: Renamed members of `Rounding` enum, and added a new rounding mode for "away from zero". diff --git a/packages/foundry/lib/openzeppelin-contracts/.changeset/wild-windows-trade.md b/packages/foundry/lib/openzeppelin-contracts/.changeset/wild-windows-trade.md deleted file mode 100644 index f599d0f..0000000 --- a/packages/foundry/lib/openzeppelin-contracts/.changeset/wild-windows-trade.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'openzeppelin-solidity': major ---- - -`SafeERC20`: Refactor `safeDecreaseAllowance` and `safeIncreaseAllowance` to support USDT-like tokens. diff --git a/packages/foundry/lib/openzeppelin-contracts/.github/workflows/release-cycle.yml b/packages/foundry/lib/openzeppelin-contracts/.github/workflows/release-cycle.yml index 21d77ab..12da449 100644 --- a/packages/foundry/lib/openzeppelin-contracts/.github/workflows/release-cycle.yml +++ b/packages/foundry/lib/openzeppelin-contracts/.github/workflows/release-cycle.yml @@ -147,16 +147,12 @@ jobs: with: name: ${{ github.ref_name }} path: ${{ steps.pack.outputs.tarball }} - - name: Tag - run: npx changeset tag - name: Publish run: bash scripts/release/workflow/publish.sh env: NPM_TOKEN: ${{ secrets.NPM_TOKEN }} TARBALL: ${{ steps.pack.outputs.tarball }} TAG: ${{ steps.pack.outputs.tag }} - - name: Push tags - run: git push --tags - name: Create Github Release uses: actions/github-script@v6 env: diff --git a/packages/foundry/lib/openzeppelin-contracts/CHANGELOG.md b/packages/foundry/lib/openzeppelin-contracts/CHANGELOG.md index 039e566..2dee312 100644 --- a/packages/foundry/lib/openzeppelin-contracts/CHANGELOG.md +++ b/packages/foundry/lib/openzeppelin-contracts/CHANGELOG.md @@ -1,107 +1,31 @@ # Changelog -## 5.0.0-rc.2 (2023-10-02) +## 5.0.1 (2023-12-07) -- `AccessManager`: Make `schedule` and `execute` more conservative when delay is 0. +- `ERC2771Context` and `Context`: Introduce a `_contextPrefixLength()` getter, used to trim extra information appended to `msg.data`. +- `Multicall`: Make aware of non-canonical context (i.e. `msg.sender` is not `_msgSender()`), allowing compatibility with `ERC2771Context`. -## 5.0.0-rc.1 (2023-09-28) +## 5.0.0 (2023-10-05) -- Upgradeable Contracts: No longer transpile interfaces, libraries, and stateless contracts. ([#4636](https://github.com/OpenZeppelin/openzeppelin-contracts/pull/4636)) -- `AccessManager`, `AccessManaged`, `GovernorTimelockAccess`: Ensure that calldata shorter than 4 bytes is not padded to 4 bytes. ([#4624](https://github.com/OpenZeppelin/openzeppelin-contracts/pull/4624)) -- `AccessManager`: Use named return parameters in functions that return multiple values. ([#4624](https://github.com/OpenZeppelin/openzeppelin-contracts/pull/4624)) - -## 5.0.0-rc.0 (2023-09-19) - -- `ERC1155Receiver`: Removed in favor of `ERC1155Holder`. ([#4450](https://github.com/OpenZeppelin/openzeppelin-contracts/pull/4450)) -- `TimelockController`: Changed the role architecture to use `DEFAULT_ADMIN_ROLE` as the admin for all roles, instead of the bespoke `TIMELOCK_ADMIN_ROLE` that was used previously. This aligns with the general recommendation for `AccessControl` and makes the addition of new roles easier. Accordingly, the `admin` parameter and timelock will now be granted `DEFAULT_ADMIN_ROLE` instead of `TIMELOCK_ADMIN_ROLE`. ([#3799](https://github.com/OpenZeppelin/openzeppelin-contracts/pull/3799)) - -- Use `abi.encodeCall` in place of `abi.encodeWithSelector` and `abi.encodeWithSignature` for improved type-checking of parameters ([#4293](https://github.com/OpenZeppelin/openzeppelin-contracts/pull/4293)) -- `ERC2771Forwarder`: Added `deadline` for expiring transactions, batching, and more secure handling of `msg.value`. ([#4346](https://github.com/OpenZeppelin/openzeppelin-contracts/pull/4346)) -- `Governor`: Refactored internals to implement common queuing logic in the core module of the Governor. Added `queue` and `_queueOperations` functions that act at different levels. Modules that implement queuing via timelocks are expected to override `_queueOperations` to implement the timelock-specific logic. Added `_executeOperations` as the equivalent for execution. ([#4360](https://github.com/OpenZeppelin/openzeppelin-contracts/pull/4360)) -- `ERC20`, `ERC721`, `ERC1155`: Deleted `_beforeTokenTransfer` and `_afterTokenTransfer` hooks, added a new internal `_update` function for customizations, and refactored all extensions using those hooks to use `_update` instead. ([#3838](https://github.com/OpenZeppelin/openzeppelin-contracts/pull/3838), [#3876](https://github.com/OpenZeppelin/openzeppelin-contracts/pull/3876), [#4377](https://github.com/OpenZeppelin/openzeppelin-contracts/pull/4377)) - -- `ERC1155Supply`: add a `totalSupply()` function that returns the total amount of token circulating, this change will restrict the total tokens minted across all ids to 2\*\*256-1 . ([#3962](https://github.com/OpenZeppelin/openzeppelin-contracts/pull/3962)) -- `Ownable`: Add an `initialOwner` parameter to the constructor, making the ownership initialization explicit. ([#4267](https://github.com/OpenZeppelin/openzeppelin-contracts/pull/4267)) -- `ERC721`: `_approve` no longer allows approving the owner of the tokenId. `_setApprovalForAll` no longer allows setting address(0) as an operator. ([#4377](https://github.com/OpenZeppelin/openzeppelin-contracts/pull/4377)) -- `ERC721URIStorage`: Allow setting the token URI prior to minting. ([#4559](https://github.com/OpenZeppelin/openzeppelin-contracts/pull/4559)) -- `UUPSUpgradeable`, `TransparentUpgradeableProxy` and `ProxyAdmin`: Removed `upgradeTo` and `upgrade` functions, and made `upgradeToAndCall` and `upgradeAndCall` ignore the data argument if it is empty. It is no longer possible to invoke the receive function (or send value with empty data) along with an upgrade. ([#4382](https://github.com/OpenZeppelin/openzeppelin-contracts/pull/4382)) -- `ERC721URIStorage`, `ERC721Royalty`: Stop resetting token-specific URI and royalties when burning. ([#4561](https://github.com/OpenZeppelin/openzeppelin-contracts/pull/4561)) -- `Address`: Removed the ability to customize error messages. A common custom error is always used if the underlying revert reason cannot be bubbled up. ([#4502](https://github.com/OpenZeppelin/openzeppelin-contracts/pull/4502)) -- `Checkpoints`: library moved from `utils` to `utils/structs` ([#4275](https://github.com/OpenZeppelin/openzeppelin-contracts/pull/4275)) -- `SafeERC20`: Removed `safePermit` in favor of documentation-only `permit` recommendations. ([#4582](https://github.com/OpenZeppelin/openzeppelin-contracts/pull/4582)) -- `Governor`: Optimized use of storage for proposal data ([#4268](https://github.com/OpenZeppelin/openzeppelin-contracts/pull/4268)) -- `ERC1967Utils`: Refactor the `ERC1967Upgrade` abstract contract as a library. ([#4325](https://github.com/OpenZeppelin/openzeppelin-contracts/pull/4325)) -- `TransparentUpgradeableProxy`: Admin is now stored in an immutable variable (set during construction) to avoid unnecessary storage reads on every proxy call. This removed the ability to ever change the admin. Transfer of the upgrade capability is exclusively handled through the ownership of the `ProxyAdmin`. ([#4354](https://github.com/OpenZeppelin/openzeppelin-contracts/pull/4354)) -- `VestingWallet`: Use `Ownable` instead of an immutable `beneficiary`. ([#4508](https://github.com/OpenZeppelin/openzeppelin-contracts/pull/4508)) -- `ERC20`: Remove `Approval` event previously emitted in `transferFrom` to indicate that part of the allowance was consumed. With this change, allowances are no longer reconstructible from events. See the code for guidelines on how to re-enable this event if needed. ([#4370](https://github.com/OpenZeppelin/openzeppelin-contracts/pull/4370)) -- Move the logic to validate ERC-1822 during an upgrade from `ERC1967Utils` to `UUPSUpgradeable`. ([#4356](https://github.com/OpenZeppelin/openzeppelin-contracts/pull/4356)) -- `MessageHashUtils`: Add a new library for creating message digest to be used along with signing or recovery such as ECDSA or ERC-1271. These functions are moved from the `ECDSA` library. ([#4430](https://github.com/OpenZeppelin/openzeppelin-contracts/pull/4430)) -- Replace revert strings and require statements with custom errors. ([#4261](https://github.com/OpenZeppelin/openzeppelin-contracts/pull/4261)) -- `Nonces`: Added a new contract to keep track of user nonces. Used for signatures in `ERC20Permit`, `ERC20Votes`, and `ERC721Votes`. ([#3816](https://github.com/OpenZeppelin/openzeppelin-contracts/pull/3816)) - -- Switched to using explicit Solidity import statements. Some previously available symbols may now have to be separately imported. ([#4399](https://github.com/OpenZeppelin/openzeppelin-contracts/pull/4399)) -- `Governor`: Add support for casting votes with ERC-1271 signatures by using a `bytes memory signature` instead of `r`, `s` and `v` arguments in the `castVoteBySig` and `castVoteWithReasonAndParamsBySig` functions. ([#4418](https://github.com/OpenZeppelin/openzeppelin-contracts/pull/4418)) -- `ERC721`: Renamed `_requireMinted` to `_requireOwned` and added a return value with the current owner. Implemented `ownerOf` in terms of `_requireOwned`. ([#4566](https://github.com/OpenZeppelin/openzeppelin-contracts/pull/4566)) -- `GovernorTimelockControl`: Add the Governor instance address as part of the TimelockController operation `salt` to avoid operation id collisions between governors using the same TimelockController. -- Overrides are now used internally for a number of functions that were previously hardcoded to their default implementation in certain locations: `ERC1155Supply.totalSupply`, `ERC721.ownerOf`, `ERC721.balanceOf` and `ERC721.totalSupply` in `ERC721Enumerable`, `ERC20.totalSupply` in `ERC20FlashMint`, and `ERC1967._getImplementation` in `ERC1967Proxy`. ([#4299](https://github.com/OpenZeppelin/openzeppelin-contracts/pull/4299)) -- `ProxyAdmin`: Removed `getProxyAdmin` and `getProxyImplementation` getters. ([#3820](https://github.com/OpenZeppelin/openzeppelin-contracts/pull/3820)) - -- Bump minimum compiler version required to 0.8.20 ([#4288](https://github.com/OpenZeppelin/openzeppelin-contracts/pull/4288)) -- `ERC20Votes`: Changed internal vote accounting to reusable `Votes` module previously used by `ERC721Votes`. Removed implicit `ERC20Permit` inheritance. Note that the `DOMAIN_SEPARATOR` getter was previously guaranteed to be available for `ERC20Votes` contracts, but is no longer available unless `ERC20Permit` is explicitly used; ERC-5267 support is included in `ERC20Votes` with `EIP712` and is recommended as an alternative. ([#3816](https://github.com/OpenZeppelin/openzeppelin-contracts/pull/3816)) -- `ERC20`: Remove the non-standard `increaseAllowance` and `decreaseAllowance` functions. ([#4585](https://github.com/OpenZeppelin/openzeppelin-contracts/pull/4585)) -- `Governor`: Add `voter` and `nonce` parameters in signed ballots, to avoid forging signatures for random addresses, prevent signature replay, and allow invalidating signatures. Add `voter` as a new parameter in the `castVoteBySig` and `castVoteWithReasonAndParamsBySig` functions. ([#4378](https://github.com/OpenZeppelin/openzeppelin-contracts/pull/4378)) -- `TransparentUpgradeableProxy`: Removed `admin` and `implementation` getters, which were only callable by the proxy owner and thus not very useful. ([#3820](https://github.com/OpenZeppelin/openzeppelin-contracts/pull/3820)) - -- `ERC1155`: Remove check for address zero in `balanceOf`. ([#4263](https://github.com/OpenZeppelin/openzeppelin-contracts/pull/4263)) -- `ReentrancyGuard`, `Pausable`: Moved to `utils` directory. ([#4551](https://github.com/OpenZeppelin/openzeppelin-contracts/pull/4551)) -- `access`: Move `AccessControl` extensions to a dedicated directory. ([#4359](https://github.com/OpenZeppelin/openzeppelin-contracts/pull/4359)) -- `DoubleEndedQueue`: refactor internal structure to use `uint128` instead of `int128`. This has no effect on the library interface. ([#4150](https://github.com/OpenZeppelin/openzeppelin-contracts/pull/4150)) -- `Strings`: Rename `toString(int256)` to `toStringSigned(int256)`. ([#4330](https://github.com/OpenZeppelin/openzeppelin-contracts/pull/4330)) -- `BeaconProxy`: Reject value in initialization unless a payable function is explicitly invoked. ([#4382](https://github.com/OpenZeppelin/openzeppelin-contracts/pull/4382)) -- `Initializable`: Use the namespaced storage pattern to avoid putting critical variables in slot 0. Allow reinitializer versions greater than 256. ([#4460](https://github.com/OpenZeppelin/openzeppelin-contracts/pull/4460)) -- `GovernorTimelockAccess`: Added a module to connect a governor with an instance of `AccessManager`, allowing the governor to make calls that are delay-restricted by the manager using the normal `queue` workflow. ([#4523](https://github.com/OpenZeppelin/openzeppelin-contracts/pull/4523)) -- Upgradeable contracts now use namespaced storage (EIP-7201). ([#4534](https://github.com/OpenZeppelin/openzeppelin-contracts/pull/4534)) -- `GovernorStorage`: Added a new governor extension that stores the proposal details in storage, with an interface that operates on `proposalId`, as well as proposal enumerability. This replaces the old `GovernorCompatibilityBravo` module. ([#4360](https://github.com/OpenZeppelin/openzeppelin-contracts/pull/4360)) -- `Votes`: Use Trace208 for checkpoints. This enables EIP-6372 clock support for keys but reduces the max supported voting power to uint208. ([#4539](https://github.com/OpenZeppelin/openzeppelin-contracts/pull/4539)) -- `Math`: Renamed members of `Rounding` enum, and added a new rounding mode for "away from zero". ([#4455](https://github.com/OpenZeppelin/openzeppelin-contracts/pull/4455)) -- `SafeERC20`: Refactor `safeDecreaseAllowance` and `safeIncreaseAllowance` to support USDT-like tokens. ([#4260](https://github.com/OpenZeppelin/openzeppelin-contracts/pull/4260)) -- `Math`: Make `ceilDiv` to revert on 0 division even if the numerator is 0 ([#4348](https://github.com/OpenZeppelin/openzeppelin-contracts/pull/4348)) -- `Proxy`: Removed redundant `receive` function. ([#4434](https://github.com/OpenZeppelin/openzeppelin-contracts/pull/4434)) -- Replace some uses of `abi.encodePacked` with clearer alternatives (e.g. `bytes.concat`, `string.concat`). (#4504)[https://github.com/OpenZeppelin/openzeppelin-contracts/pull/4504] ([#4296](https://github.com/OpenZeppelin/openzeppelin-contracts/pull/4296)) -- `Arrays`: Optimize `findUpperBound` by removing redundant SLOAD. ([#4442](https://github.com/OpenZeppelin/openzeppelin-contracts/pull/4442)) -- `Arrays`: Add `unsafeMemoryAccess` helpers to read from a memory array without checking the length. ([#4300](https://github.com/OpenZeppelin/openzeppelin-contracts/pull/4300)) -- `GovernorTimelockControl`: Clean up timelock id on execution for gas refund. ([#4118](https://github.com/OpenZeppelin/openzeppelin-contracts/pull/4118)) -- `Initializable`: Use intermediate variables to improve readability. ([#4576](https://github.com/OpenZeppelin/openzeppelin-contracts/pull/4576)) -- `EIP712`: Add internal getters for the name and version strings ([#4303](https://github.com/OpenZeppelin/openzeppelin-contracts/pull/4303)) -- `TimelockController`: Add a state getter that returns an `OperationState` enum. ([#4358](https://github.com/OpenZeppelin/openzeppelin-contracts/pull/4358)) -- `AccessManager`: Added a new contract for managing access control of complex systems in a consolidated location. ([#4121](https://github.com/OpenZeppelin/openzeppelin-contracts/pull/4121)) -- `Governor`, `Initializable`, and `UUPSUpgradeable`: Use internal functions in modifiers to optimize bytecode size. ([#4472](https://github.com/OpenZeppelin/openzeppelin-contracts/pull/4472)) -- `ERC1155`: Bubble errors triggered in the `onERC1155Received` and `onERC1155BatchReceived` hooks. ([#4314](https://github.com/OpenZeppelin/openzeppelin-contracts/pull/4314)) -- `AccessControl`: Add a boolean return value to the internal `_grantRole` and `_revokeRole` functions indicating whether the role was granted or revoked. ([#4241](https://github.com/OpenZeppelin/openzeppelin-contracts/pull/4241)) -- Remove the `override` specifier from functions that only override a single interface function. ([#4315](https://github.com/OpenZeppelin/openzeppelin-contracts/pull/4315)) -- `Ownable`: Prevent using address(0) as the initial owner. ([#4531](https://github.com/OpenZeppelin/openzeppelin-contracts/pull/4531)) -- Optimize `Strings.equal` ([#4262](https://github.com/OpenZeppelin/openzeppelin-contracts/pull/4262)) -- `ECDSA`: Use unchecked arithmetic for the `tryRecover` function that receives the `r` and `vs` short-signature fields separately. ([#4301](https://github.com/OpenZeppelin/openzeppelin-contracts/pull/4301)) -- `VestingWallet`: Fix revert during 1 second time window when duration is 0. ([#4502](https://github.com/OpenZeppelin/openzeppelin-contracts/pull/4502)) -- `MerkleProof`: Use custom error to report invalid multiproof instead of reverting with overflow panic. ([#4564](https://github.com/OpenZeppelin/openzeppelin-contracts/pull/4564)) -- `Governor`: Add validation in ERC1155 and ERC721 receiver hooks to ensure Governor is the executor. ([#4314](https://github.com/OpenZeppelin/openzeppelin-contracts/pull/4314)) -- `Math`: Optimized stack operations in `mulDiv`. ([#4494](https://github.com/OpenZeppelin/openzeppelin-contracts/pull/4494)) -- `BeaconProxy`: Use an immutable variable to store the address of the beacon. It is no longer possible for a `BeaconProxy` to upgrade by changing to another beacon. ([#4435](https://github.com/OpenZeppelin/openzeppelin-contracts/pull/4435)) -- `ERC1155`: Optimize array allocation. ([#4196](https://github.com/OpenZeppelin/openzeppelin-contracts/pull/4196)) -- `ERC721Consecutive`: Add a `_firstConsecutiveId` internal function that can be overridden to change the id of the first token minted through `_mintConsecutive`. ([#4097](https://github.com/OpenZeppelin/openzeppelin-contracts/pull/4097)) -- `Governor`: Add a mechanism to restrict the address of the proposer using a suffix in the description. -- `ERC1155`: Optimize array accesses by skipping bounds checking when unnecessary. ([#4300](https://github.com/OpenZeppelin/openzeppelin-contracts/pull/4300)) -- `ERC2771Context`: Return the forwarder address whenever the `msg.data` of a call originating from a trusted forwarder is not long enough to contain the request signer address (i.e. `msg.data.length` is less than 20 bytes), as specified by ERC-2771. ([#4481](https://github.com/OpenZeppelin/openzeppelin-contracts/pull/4481)) -- `ERC2771Context`: Prevent revert in `_msgData()` when a call originating from a trusted forwarder is not long enough to contain the request signer address (i.e. `msg.data.length` is less than 20 bytes). Return the full calldata in that case. ([#4484](https://github.com/OpenZeppelin/openzeppelin-contracts/pull/4484)) +### Additions Summary -## Unreleased +The following contracts and libraries were added: -> **Warning** Version 5.0 is under active development and should not be used. Install the releases from npm or use the version tags in the repository. +- `AccessManager`: A consolidated system for managing access control in complex systems. + - `AccessManaged`: A module for connecting a contract to an authority in charge of its access control. + - `GovernorTimelockAccess`: An adapter for time-locking governance proposals using an `AccessManager`. + - `AuthorityUtils`: A library of utilities for interacting with authority contracts. +- `GovernorStorage`: A Governor module that stores proposal details in storage. +- `ERC2771Forwarder`: An ERC2771 forwarder for meta transactions. +- `ERC1967Utils`: A library with ERC1967 events, errors and getters. +- `Nonces`: An abstraction for managing account nonces. +- `MessageHashUtils`: A library for producing digests for ECDSA operations. +- `Time`: A library with helpers for manipulating time-related objects. -### Removals +### Removals Summary -The following contracts, libraries and functions were removed: +The following contracts, libraries, and functions were removed: - `Address.isContract` (because of its ambiguous nature and potential for misuse) - `Checkpoints.History` @@ -125,41 +49,147 @@ The following contracts, libraries and functions were removed: These removals were implemented in the following PRs: [#3637](https://github.com/OpenZeppelin/openzeppelin-contracts/pull/3637), [#3880](https://github.com/OpenZeppelin/openzeppelin-contracts/pull/3880), [#3945](https://github.com/OpenZeppelin/openzeppelin-contracts/pull/3945), [#4258](https://github.com/OpenZeppelin/openzeppelin-contracts/pull/4258), [#4276](https://github.com/OpenZeppelin/openzeppelin-contracts/pull/4276), [#4289](https://github.com/OpenZeppelin/openzeppelin-contracts/pull/4289) -### How to upgrade from 4.x +### Changes by category + +#### General + +- Replaced revert strings and require statements with custom errors. ([#4261](https://github.com/OpenZeppelin/openzeppelin-contracts/pull/4261)) +- Bumped minimum compiler version required to 0.8.20 ([#4288](https://github.com/OpenZeppelin/openzeppelin-contracts/pull/4288)) +- Use of `abi.encodeCall` in place of `abi.encodeWithSelector` and `abi.encodeWithSignature` for improved type-checking of parameters ([#4293](https://github.com/OpenZeppelin/openzeppelin-contracts/pull/4293)) +- Replaced some uses of `abi.encodePacked` with clearer alternatives (e.g. `bytes.concat`, `string.concat`). ([#4504](https://github.com/OpenZeppelin/openzeppelin-contracts/pull/4504)) ([#4296](https://github.com/OpenZeppelin/openzeppelin-contracts/pull/4296)) +- Overrides are now used internally for a number of functions that were previously hardcoded to their default implementation in certain locations: `ERC1155Supply.totalSupply`, `ERC721.ownerOf`, `ERC721.balanceOf` and `ERC721.totalSupply` in `ERC721Enumerable`, `ERC20.totalSupply` in `ERC20FlashMint`, and `ERC1967._getImplementation` in `ERC1967Proxy`. ([#4299](https://github.com/OpenZeppelin/openzeppelin-contracts/pull/4299)) +- Removed the `override` specifier from functions that only override a single interface function. ([#4315](https://github.com/OpenZeppelin/openzeppelin-contracts/pull/4315)) +- Switched to using explicit Solidity import statements. Some previously available symbols may now have to be separately imported. ([#4399](https://github.com/OpenZeppelin/openzeppelin-contracts/pull/4399)) +- `Governor`, `Initializable`, and `UUPSUpgradeable`: Use internal functions in modifiers to optimize bytecode size. ([#4472](https://github.com/OpenZeppelin/openzeppelin-contracts/pull/4472)) +- Upgradeable contracts now use namespaced storage (EIP-7201). ([#4534](https://github.com/OpenZeppelin/openzeppelin-contracts/pull/4534)) +- Upgradeable contracts no longer transpile interfaces and libraries. ([#4628](https://github.com/OpenZeppelin/openzeppelin-contracts/pull/4628)) + +#### Access + +- `Ownable`: Added an `initialOwner` parameter to the constructor, making the ownership initialization explicit. ([#4267](https://github.com/OpenZeppelin/openzeppelin-contracts/pull/4267)) +- `Ownable`: Prevent using address(0) as the initial owner. ([#4531](https://github.com/OpenZeppelin/openzeppelin-contracts/pull/4531)) +- `AccessControl`: Added a boolean return value to the internal `_grantRole` and `_revokeRole` functions indicating whether the role was granted or revoked. ([#4241](https://github.com/OpenZeppelin/openzeppelin-contracts/pull/4241)) +- `access`: Moved `AccessControl` extensions to a dedicated directory. ([#4359](https://github.com/OpenZeppelin/openzeppelin-contracts/pull/4359)) +- `AccessManager`: Added a new contract for managing access control of complex systems in a consolidated location. ([#4121](https://github.com/OpenZeppelin/openzeppelin-contracts/pull/4121)) +- `AccessManager`, `AccessManaged`, `GovernorTimelockAccess`: Ensure that calldata shorter than 4 bytes is not padded to 4 bytes. ([#4624](https://github.com/OpenZeppelin/openzeppelin-contracts/pull/4624)) +- `AccessManager`: Use named return parameters in functions that return multiple values. ([#4624](https://github.com/OpenZeppelin/openzeppelin-contracts/pull/4624)) +- `AccessManager`: Make `schedule` and `execute` more conservative when delay is 0. ([#4644](https://github.com/OpenZeppelin/openzeppelin-contracts/pull/4644)) + +#### Finance + +- `VestingWallet`: Fixed revert during 1 second time window when duration is 0. ([#4502](https://github.com/OpenZeppelin/openzeppelin-contracts/pull/4502)) +- `VestingWallet`: Use `Ownable` instead of an immutable `beneficiary`. ([#4508](https://github.com/OpenZeppelin/openzeppelin-contracts/pull/4508)) + +#### Governance + +- `Governor`: Optimized use of storage for proposal data ([#4268](https://github.com/OpenZeppelin/openzeppelin-contracts/pull/4268)) +- `Governor`: Added validation in ERC1155 and ERC721 receiver hooks to ensure Governor is the executor. ([#4314](https://github.com/OpenZeppelin/openzeppelin-contracts/pull/4314)) +- `Governor`: Refactored internals to implement common queuing logic in the core module of the Governor. Added `queue` and `_queueOperations` functions that act at different levels. Modules that implement queuing via timelocks are expected to override `_queueOperations` to implement the timelock-specific logic. Added `_executeOperations` as the equivalent for execution. ([#4360](https://github.com/OpenZeppelin/openzeppelin-contracts/pull/4360)) +- `Governor`: Added `voter` and `nonce` parameters in signed ballots, to avoid forging signatures for random addresses, prevent signature replay, and allow invalidating signatures. Add `voter` as a new parameter in the `castVoteBySig` and `castVoteWithReasonAndParamsBySig` functions. ([#4378](https://github.com/OpenZeppelin/openzeppelin-contracts/pull/4378)) +- `Governor`: Added support for casting votes with ERC-1271 signatures by using a `bytes memory signature` instead of `r`, `s` and `v` arguments in the `castVoteBySig` and `castVoteWithReasonAndParamsBySig` functions. ([#4418](https://github.com/OpenZeppelin/openzeppelin-contracts/pull/4418)) +- `Governor`: Added a mechanism to restrict the address of the proposer using a suffix in the description. +- `GovernorStorage`: Added a new governor extension that stores the proposal details in storage, with an interface that operates on `proposalId`, as well as proposal enumerability. This replaces the old `GovernorCompatibilityBravo` module. ([#4360](https://github.com/OpenZeppelin/openzeppelin-contracts/pull/4360)) +- `GovernorTimelockAccess`: Added a module to connect a governor with an instance of `AccessManager`, allowing the governor to make calls that are delay-restricted by the manager using the normal `queue` workflow. ([#4523](https://github.com/OpenZeppelin/openzeppelin-contracts/pull/4523)) +- `GovernorTimelockControl`: Clean up timelock id on execution for gas refund. ([#4118](https://github.com/OpenZeppelin/openzeppelin-contracts/pull/4118)) +- `GovernorTimelockControl`: Added the Governor instance address as part of the TimelockController operation `salt` to avoid operation id collisions between governors using the same TimelockController. ([#4432](https://github.com/OpenZeppelin/openzeppelin-contracts/pull/4432)) +- `TimelockController`: Changed the role architecture to use `DEFAULT_ADMIN_ROLE` as the admin for all roles, instead of the bespoke `TIMELOCK_ADMIN_ROLE` that was used previously. This aligns with the general recommendation for `AccessControl` and makes the addition of new roles easier. Accordingly, the `admin` parameter and timelock will now be granted `DEFAULT_ADMIN_ROLE` instead of `TIMELOCK_ADMIN_ROLE`. ([#3799](https://github.com/OpenZeppelin/openzeppelin-contracts/pull/3799)) +- `TimelockController`: Added a state getter that returns an `OperationState` enum. ([#4358](https://github.com/OpenZeppelin/openzeppelin-contracts/pull/4358)) +- `Votes`: Use Trace208 for checkpoints. This enables EIP-6372 clock support for keys but reduces the max supported voting power to uint208. ([#4539](https://github.com/OpenZeppelin/openzeppelin-contracts/pull/4539)) + +#### Metatx + +- `ERC2771Forwarder`: Added `deadline` for expiring transactions, batching, and more secure handling of `msg.value`. ([#4346](https://github.com/OpenZeppelin/openzeppelin-contracts/pull/4346)) +- `ERC2771Context`: Return the forwarder address whenever the `msg.data` of a call originating from a trusted forwarder is not long enough to contain the request signer address (i.e. `msg.data.length` is less than 20 bytes), as specified by ERC-2771. ([#4481](https://github.com/OpenZeppelin/openzeppelin-contracts/pull/4481)) +- `ERC2771Context`: Prevent revert in `_msgData()` when a call originating from a trusted forwarder is not long enough to contain the request signer address (i.e. `msg.data.length` is less than 20 bytes). Return the full calldata in that case. ([#4484](https://github.com/OpenZeppelin/openzeppelin-contracts/pull/4484)) + +#### Proxy + +- `ProxyAdmin`: Removed `getProxyAdmin` and `getProxyImplementation` getters. ([#3820](https://github.com/OpenZeppelin/openzeppelin-contracts/pull/3820)) +- `TransparentUpgradeableProxy`: Removed `admin` and `implementation` getters, which were only callable by the proxy owner and thus not very useful. ([#3820](https://github.com/OpenZeppelin/openzeppelin-contracts/pull/3820)) +- `ERC1967Utils`: Refactored the `ERC1967Upgrade` abstract contract as a library. ([#4325](https://github.com/OpenZeppelin/openzeppelin-contracts/pull/4325)) +- `TransparentUpgradeableProxy`: Admin is now stored in an immutable variable (set during construction) to avoid unnecessary storage reads on every proxy call. This removed the ability to ever change the admin. Transfer of the upgrade capability is exclusively handled through the ownership of the `ProxyAdmin`. ([#4354](https://github.com/OpenZeppelin/openzeppelin-contracts/pull/4354)) +- Moved the logic to validate ERC-1822 during an upgrade from `ERC1967Utils` to `UUPSUpgradeable`. ([#4356](https://github.com/OpenZeppelin/openzeppelin-contracts/pull/4356)) +- `UUPSUpgradeable`, `TransparentUpgradeableProxy` and `ProxyAdmin`: Removed `upgradeTo` and `upgrade` functions, and made `upgradeToAndCall` and `upgradeAndCall` ignore the data argument if it is empty. It is no longer possible to invoke the receive function (or send value with empty data) along with an upgrade. ([#4382](https://github.com/OpenZeppelin/openzeppelin-contracts/pull/4382)) +- `BeaconProxy`: Reject value in initialization unless a payable function is explicitly invoked. ([#4382](https://github.com/OpenZeppelin/openzeppelin-contracts/pull/4382)) +- `Proxy`: Removed redundant `receive` function. ([#4434](https://github.com/OpenZeppelin/openzeppelin-contracts/pull/4434)) +- `BeaconProxy`: Use an immutable variable to store the address of the beacon. It is no longer possible for a `BeaconProxy` to upgrade by changing to another beacon. ([#4435](https://github.com/OpenZeppelin/openzeppelin-contracts/pull/4435)) +- `Initializable`: Use the namespaced storage pattern to avoid putting critical variables in slot 0. Allow reinitializer versions greater than 256. ([#4460](https://github.com/OpenZeppelin/openzeppelin-contracts/pull/4460)) +- `Initializable`: Use intermediate variables to improve readability. ([#4576](https://github.com/OpenZeppelin/openzeppelin-contracts/pull/4576)) + +#### Token + +- `ERC20`, `ERC721`, `ERC1155`: Deleted `_beforeTokenTransfer` and `_afterTokenTransfer` hooks, added a new internal `_update` function for customizations, and refactored all extensions using those hooks to use `_update` instead. ([#3838](https://github.com/OpenZeppelin/openzeppelin-contracts/pull/3838), [#3876](https://github.com/OpenZeppelin/openzeppelin-contracts/pull/3876), [#4377](https://github.com/OpenZeppelin/openzeppelin-contracts/pull/4377)) +- `ERC20`: Removed `Approval` event previously emitted in `transferFrom` to indicate that part of the allowance was consumed. With this change, allowances are no longer reconstructible from events. See the code for guidelines on how to re-enable this event if needed. ([#4370](https://github.com/OpenZeppelin/openzeppelin-contracts/pull/4370)) +- `ERC20`: Removed the non-standard `increaseAllowance` and `decreaseAllowance` functions. ([#4585](https://github.com/OpenZeppelin/openzeppelin-contracts/pull/4585)) +- `ERC20Votes`: Changed internal vote accounting to reusable `Votes` module previously used by `ERC721Votes`. Removed implicit `ERC20Permit` inheritance. Note that the `DOMAIN_SEPARATOR` getter was previously guaranteed to be available for `ERC20Votes` contracts, but is no longer available unless `ERC20Permit` is explicitly used; ERC-5267 support is included in `ERC20Votes` with `EIP712` and is recommended as an alternative. ([#3816](https://github.com/OpenZeppelin/openzeppelin-contracts/pull/3816)) +- `SafeERC20`: Refactored `safeDecreaseAllowance` and `safeIncreaseAllowance` to support USDT-like tokens. ([#4260](https://github.com/OpenZeppelin/openzeppelin-contracts/pull/4260)) +- `SafeERC20`: Removed `safePermit` in favor of documentation-only `permit` recommendations. Based on recommendations from @trust1995 ([#4582](https://github.com/OpenZeppelin/openzeppelin-contracts/pull/4582)) +- `ERC721`: `_approve` no longer allows approving the owner of the tokenId. ([#4377](https://github.com/OpenZeppelin/openzeppelin-contracts/issues/4377)) `_setApprovalForAll` no longer allows setting address(0) as an operator. ([#4377](https://github.com/OpenZeppelin/openzeppelin-contracts/pull/4377)) +- `ERC721`: Renamed `_requireMinted` to `_requireOwned` and added a return value with the current owner. Implemented `ownerOf` in terms of `_requireOwned`. ([#4566](https://github.com/OpenZeppelin/openzeppelin-contracts/pull/4566)) +- `ERC721Consecutive`: Added a `_firstConsecutiveId` internal function that can be overridden to change the id of the first token minted through `_mintConsecutive`. ([#4097](https://github.com/OpenZeppelin/openzeppelin-contracts/pull/4097)) +- `ERC721URIStorage`: Allow setting the token URI prior to minting. ([#4559](https://github.com/OpenZeppelin/openzeppelin-contracts/pull/4559)) +- `ERC721URIStorage`, `ERC721Royalty`: Stop resetting token-specific URI and royalties when burning. ([#4561](https://github.com/OpenZeppelin/openzeppelin-contracts/pull/4561)) +- `ERC1155`: Optimized array allocation. ([#4196](https://github.com/OpenZeppelin/openzeppelin-contracts/pull/4196)) +- `ERC1155`: Removed check for address zero in `balanceOf`. ([#4263](https://github.com/OpenZeppelin/openzeppelin-contracts/pull/4263)) +- `ERC1155`: Optimized array accesses by skipping bounds checking when unnecessary. ([#4300](https://github.com/OpenZeppelin/openzeppelin-contracts/pull/4300)) +- `ERC1155`: Bubble errors triggered in the `onERC1155Received` and `onERC1155BatchReceived` hooks. ([#4314](https://github.com/OpenZeppelin/openzeppelin-contracts/pull/4314)) +- `ERC1155Supply`: Added a `totalSupply()` function that returns the total amount of token circulating, this change will restrict the total tokens minted across all ids to 2\*\*256-1 . ([#3962](https://github.com/OpenZeppelin/openzeppelin-contracts/pull/3962)) +- `ERC1155Receiver`: Removed in favor of `ERC1155Holder`. ([#4450](https://github.com/OpenZeppelin/openzeppelin-contracts/pull/4450)) + +#### Utils + +- `Address`: Removed the ability to customize error messages. A common custom error is always used if the underlying revert reason cannot be bubbled up. ([#4502](https://github.com/OpenZeppelin/openzeppelin-contracts/pull/4502)) +- `Arrays`: Added `unsafeMemoryAccess` helpers to read from a memory array without checking the length. ([#4300](https://github.com/OpenZeppelin/openzeppelin-contracts/pull/4300)) +- `Arrays`: Optimized `findUpperBound` by removing redundant SLOAD. ([#4442](https://github.com/OpenZeppelin/openzeppelin-contracts/pull/4442)) +- `Checkpoints`: Library moved from `utils` to `utils/structs` ([#4275](https://github.com/OpenZeppelin/openzeppelin-contracts/pull/4275)) +- `DoubleEndedQueue`: Refactored internal structure to use `uint128` instead of `int128`. This has no effect on the library interface. ([#4150](https://github.com/OpenZeppelin/openzeppelin-contracts/pull/4150)) +- `ECDSA`: Use unchecked arithmetic for the `tryRecover` function that receives the `r` and `vs` short-signature fields separately. ([#4301](https://github.com/OpenZeppelin/openzeppelin-contracts/pull/4301)) +- `EIP712`: Added internal getters for the name and version strings ([#4303](https://github.com/OpenZeppelin/openzeppelin-contracts/pull/4303)) +- `Math`: Makes `ceilDiv` to revert on 0 division even if the numerator is 0 ([#4348](https://github.com/OpenZeppelin/openzeppelin-contracts/pull/4348)) +- `Math`: Optimized stack operations in `mulDiv`. ([#4494](https://github.com/OpenZeppelin/openzeppelin-contracts/pull/4494)) +- `Math`: Renamed members of `Rounding` enum, and added a new rounding mode for "away from zero". ([#4455](https://github.com/OpenZeppelin/openzeppelin-contracts/pull/4455)) +- `MerkleProof`: Use custom error to report invalid multiproof instead of reverting with overflow panic. ([#4564](https://github.com/OpenZeppelin/openzeppelin-contracts/pull/4564)) +- `MessageHashUtils`: Added a new library for creating message digest to be used along with signing or recovery such as ECDSA or ERC-1271. These functions are moved from the `ECDSA` library. ([#4430](https://github.com/OpenZeppelin/openzeppelin-contracts/pull/4430)) +- `Nonces`: Added a new contract to keep track of user nonces. Used for signatures in `ERC20Permit`, `ERC20Votes`, and `ERC721Votes`. ([#3816](https://github.com/OpenZeppelin/openzeppelin-contracts/pull/3816)) +- `ReentrancyGuard`, `Pausable`: Moved to `utils` directory. ([#4551](https://github.com/OpenZeppelin/openzeppelin-contracts/pull/4551)) +- `Strings`: Renamed `toString(int256)` to `toStringSigned(int256)`. ([#4330](https://github.com/OpenZeppelin/openzeppelin-contracts/pull/4330)) +- Optimized `Strings.equal` ([#4262](https://github.com/OpenZeppelin/openzeppelin-contracts/pull/4262)) + +### How to migrate from 4.x #### ERC20, ERC721, and ERC1155 -These breaking changes will require modifications to ERC20, ERC721, and ERC1155 contracts, since the `_afterTokenTransfer` and `_beforeTokenTransfer` functions were removed. Any customization made through those hooks should now be done overriding the new `_update` function instead. +These breaking changes will require modifications to ERC20, ERC721, and ERC1155 contracts, since the `_afterTokenTransfer` and `_beforeTokenTransfer` functions were removed. Thus, any customization made through those hooks should now be done overriding the new `_update` function instead. Minting and burning are implemented by `_update` and customizations should be done by overriding this function as well. `_transfer`, `_mint` and `_burn` are no longer virtual (meaning they are not overridable) to guard against possible inconsistencies. For example, a contract using `ERC20`'s `_beforeTokenTransfer` hook would have to be changed in the following way. ```diff -- function _beforeTokenTransfer( -+ function _update( - address from, - address to, - uint256 amount - ) internal virtual override { -- super._beforeTokenTransfer(from, to, amount); - require(!condition(), "ERC20: wrong condition"); -+ super._update(from, to, amount); - } +-function _beforeTokenTransfer( ++function _update( + address from, + address to, + uint256 amount + ) internal virtual override { +- super._beforeTokenTransfer(from, to, amount); + require(!condition(), "ERC20: wrong condition"); ++ super._update(from, to, amount); + } ``` -### More about ERC721 +#### More about ERC721 -In the case of `ERC721`, the `_update` function does not include a `from` parameter, as the sender is implicitly the previous owner of the `tokenId`. The address of -this previous owner is returned by the `_update` function, so it can be used for a posteriori checks. In addition to `to` and `tokenId`, a third parameter (`auth`) is -present in this function. This parameter enabled an optional check that the caller/spender is approved to do the transfer. This check cannot be performed after the transfer (because the transfer resets the approval), and doing it before `_update` would require a duplicate call to `_ownerOf`. +In the case of `ERC721`, the `_update` function does not include a `from` parameter, as the sender is implicitly the previous owner of the `tokenId`. The address of this previous owner is returned by the `_update` function, so it can be used for a posteriori checks. In addition to `to` and `tokenId`, a third parameter (`auth`) is present in this function. This parameter enabled an optional check that the caller/spender is approved to do the transfer. This check cannot be performed after the transfer (because the transfer resets the approval), and doing it before `_update` would require a duplicate call to `_ownerOf`. -In this logic of removing hidden SLOADs, the `_isApprovedOrOwner` function was removed in favor of a new `_isAuthorized` function. Overrides that used to target the -`_isApprovedOrOwner` should now be performed on the `_isAuthorized` function. Calls to `_isApprovedOrOwner` that preceded a call to `_transfer`, `_burn` or `_approve` -should be removed in favor of using the `auth` argument in `_update` and `_approve`. This is showcased in `ERC721Burnable.burn` and in `ERC721Wrapper.withdrawTo`. +In this logic of removing hidden SLOADs, the `_isApprovedOrOwner` function was removed in favor of a new `_isAuthorized` function. Overrides that used to target the `_isApprovedOrOwner` should now be performed on the `_isAuthorized` function. Calls to `_isApprovedOrOwner` that preceded a call to `_transfer`, `_burn` or `_approve` should be removed in favor of using the `auth` argument in `_update` and `_approve`. This is showcased in `ERC721Burnable.burn` and in `ERC721Wrapper.withdrawTo`. The `_exists` function was removed. Calls to this function can be replaced by `_ownerOf(tokenId) != address(0)`. +#### More about ERC1155 + +Batch transfers will now emit `TransferSingle` if the batch consists of a single token, while in previous versions the `TransferBatch` event would be used for all transfers initiated through `safeBatchTransferFrom`. Both behaviors are compliant with the ERC-1155 specification. + #### ERC165Storage Users that were registering EIP-165 interfaces with `_registerInterface` from `ERC165Storage` should instead do so so by overriding the `supportsInterface` function as seen below: @@ -170,6 +200,85 @@ function supportsInterface(bytes4 interfaceId) public view virtual override retu } ``` +#### SafeMath + +Methods in SafeMath superseded by native overflow checks in Solidity 0.8.0 were removed along with operations providing an interface for revert strings. The remaining methods were moved to `utils/Math.sol`. + +```diff +- import "@openzeppelin/contracts/utils/math/SafeMath.sol"; ++ import "@openzeppelin/contracts/utils/math/Math.sol"; + + function tryOperations(uint256 x, uint256 y) external view { +- (bool overflowsAdd, uint256 resultAdd) = SafeMath.tryAdd(x, y); ++ (bool overflowsAdd, uint256 resultAdd) = Math.tryAdd(x, y); +- (bool overflowsSub, uint256 resultSub) = SafeMath.trySub(x, y); ++ (bool overflowsSub, uint256 resultSub) = Math.trySub(x, y); +- (bool overflowsMul, uint256 resultMul) = SafeMath.tryMul(x, y); ++ (bool overflowsMul, uint256 resultMul) = Math.tryMul(x, y); +- (bool overflowsDiv, uint256 resultDiv) = SafeMath.tryDiv(x, y); ++ (bool overflowsDiv, uint256 resultDiv) = Math.tryDiv(x, y); + // ... + } +``` + +#### Adapting Governor modules + +Custom Governor modules that override internal functions may require modifications if migrated to v5. In particular, the new internal functions `_queueOperations` and `_executeOperations` may need to be used. If assistance with this migration is needed reach out via the [OpenZeppelin Support Forum](https://forum.openzeppelin.com/c/support/contracts/18). + +#### ECDSA and MessageHashUtils + +The `ECDSA` library is now focused on signer recovery. Previously it also included utility methods for producing digests to be used with signing or recovery. These utilities have been moved to the `MessageHashUtils` library and should be imported if needed: + +```diff + import {ECDSA} from "@openzeppelin/contracts/utils/cryptography/ECDSA.sol"; ++import {MessageHashUtils} from "@openzeppelin/contracts/utils/cryptography/MessageHashUtils.sol"; + + contract Verifier { + using ECDSA for bytes32; ++ using MessageHashUtils for bytes32; + + function _verify(bytes32 data, bytes memory signature, address account) internal pure returns (bool) { + return data + .toEthSignedMessageHash() + .recover(signature) == account; + } + } +``` + +#### Interfaces and libraries in upgradeable contracts + +The upgradeable version of the contracts library used to include a variant suffixed with `Upgradeable` for every contract. These variants, which are produced automatically, mainly include changes for dealing with storage that don't apply to libraries and interfaces. + +The upgradeable library no longer includes upgradeable variants for libraries and interfaces. Projects migrating to 5.0 should replace their library and interface imports with their corresponding non-upgradeable version: + +```diff + // Libraries +-import {AddressUpgradeable} from '@openzeppelin/contracts-upgradeable/utils/AddressUpgradeable.sol'; ++import {Address} from '@openzeppelin/contracts/utils/Address.sol'; + + // Interfaces +-import {IERC20Upgradeable} from '@openzeppelin/contracts-upgradeable/interfaces/IERC20.sol'; ++import {IERC20} from '@openzeppelin/contracts/interfaces/IERC20.sol'; +``` + +#### Offchain Considerations + +Some changes may affect offchain systems if they rely on assumptions that are changed along with these new breaking changes. These cases are: + +##### Relying on revert strings for processing errors + +A concrete example is AccessControl, where it was previously advised to catch revert reasons using the following regex: + +``` +/^AccessControl: account (0x[0-9a-f]{40}) is missing role (0x[0-9a-f]{64})$/ +``` + +Instead, contracts now revert with custom errors. Systems that interact with smart contracts outside of the network should consider reliance on revert strings and possibly support the new custom errors. + +##### Relying on storage locations for retrieving data + +After 5.0, the storage location of some variables were changed. This is the case for `Initializable` and all the upgradeable contracts since they now use namespaced storaged locations. Any system relying on storage locations for retrieving data or detecting capabilities should be updated to support these new locations. + ## 4.9.2 (2023-06-16) - `MerkleProof`: Fix a bug in `processMultiProof` and `processMultiProofCalldata` that allows proving arbitrary leaves if the tree contains a node with value 0 at depth 1. diff --git a/packages/foundry/lib/openzeppelin-contracts/README.md b/packages/foundry/lib/openzeppelin-contracts/README.md index 549891e..9ca4157 100644 --- a/packages/foundry/lib/openzeppelin-contracts/README.md +++ b/packages/foundry/lib/openzeppelin-contracts/README.md @@ -1,7 +1,3 @@ -> [!NOTE] -> Version 5.0 is currently in release candidate period. Bug bounty rewards are boosted 50% until the release. -> [See more details on Immunefi.](https://immunefi.com/bounty/openzeppelin/) - # <img src="logo.svg" alt="OpenZeppelin" height="40px"> [![NPM Package](https://img.shields.io/npm/v/@openzeppelin/contracts.svg)](https://www.npmjs.org/package/@openzeppelin/contracts) diff --git a/packages/foundry/lib/openzeppelin-contracts/SECURITY.md b/packages/foundry/lib/openzeppelin-contracts/SECURITY.md index 4d6ff96..e9a5148 100644 --- a/packages/foundry/lib/openzeppelin-contracts/SECURITY.md +++ b/packages/foundry/lib/openzeppelin-contracts/SECURITY.md @@ -39,4 +39,4 @@ Note as well that the Solidity language itself only guarantees security updates ## Legal -Smart contracts are a nascent techology and carry a high level of technical risk and uncertainty. OpenZeppelin Contracts is made available under the MIT License, which disclaims all warranties in relation to the project and which limits the liability of those that contribute and maintain the project, including OpenZeppelin. Your use of the project is also governed by the terms found at www.openzeppelin.com/tos (the "Terms"). As set out in the Terms, you are solely responsible for any use of OpenZeppelin Contracts and you assume all risks associated with any such use. This Security Policy in no way evidences or represents an on-going duty by any contributor, including OpenZeppelin, to correct any flaws or alert you to all or any of the potential risks of utilizing the project. +Smart contracts are a nascent technology and carry a high level of technical risk and uncertainty. OpenZeppelin Contracts is made available under the MIT License, which disclaims all warranties in relation to the project and which limits the liability of those that contribute and maintain the project, including OpenZeppelin. Your use of the project is also governed by the terms found at www.openzeppelin.com/tos (the "Terms"). As set out in the Terms, you are solely responsible for any use of OpenZeppelin Contracts and you assume all risks associated with any such use. This Security Policy in no way evidences or represents an on-going duty by any contributor, including OpenZeppelin, to correct any flaws or alert you to all or any of the potential risks of utilizing the project. diff --git a/packages/foundry/lib/openzeppelin-contracts/audits/2023-10-v5.0.pdf b/packages/foundry/lib/openzeppelin-contracts/audits/2023-10-v5.0.pdf new file mode 100644 index 0000000000000000000000000000000000000000..991026ecd206174a63e2187aef9e1572af0c2668 GIT binary patch literal 910284 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 z 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≫ct%)rddOm!=Ock<49f{A1%AFXG5Ya^-X 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%0D_6uetz$j-No13h>Sc=)4rL2M zcW7FLo}5AYCHUN@v~N!FmXp@*hTR$AqKXxd2kPyn-G)~~^N_cOM=<QNQeD8RXn6)r zE15>=%1+e8@~5AkYO#~^pvN@Ro3)cmxkj9#a6W8^#!N*TJJfIF3v1G+nXpbYL40Yq zU5+b5Hh!2fp#^*9?0}Dhugmyz><8iaw)acYTK#E>g3(1}YIQHciRFiD78P?KU;5V$ zU&6U_u8ShkXyB;~KQZX|s-)S)^*Dl0ESbpso*5LjOH>LLvmE*`V!JI!iZ#L-v@hPo z5$i|LcP?qRend|Rr)3!gB^398UH0nU9aBs8&po1zu7L4BdU<yyqVF=rVsdAAi)^OE zyYL9!4F<YjzCVqRA6Z%SWZ1dy=sQ=g=6*eQJr+-PJ%3y!^aFbrmt`FuYL(4?PBb`J z5pl7)WNg$GIsL++bMaig#Vjeosd2KcHKKc?n>n-jI^x)IxN^SxDfc7S`EHYHt0L>Y z)6(lIHKwz98h}ykZKmt%c9MVk^+J>t%yV+q339UE8E8+6hjsWcYK4_EnR)EoIKwj2 z!NP5;x6t<)HF1q=dTBTES>4nlbs=Z==9KzjVdV#H-+d3zmKt__$Y-W^AFx34<?`lL z`q4J`3HJ1b$4>IZm2{Z8iU4`C{)hINVJ7(`*IDwJUH7YSVY2%Q>#6Ph!s~%b{pcZ< z&&a&>lF$1%@Aakj8s`um(&+^!OZXG0r08Rd{hF~v=QDcGz>9~&48qU!@bX6+zR65e z?8c0xh29^t&f#g1Y2Mtij_otU9;5rtE!lbBo{3ANo@PF~!!FG36J~5!v4J`J|9>AN ze{%#1+c5i|z{nT8m~X_w^rzD&j(wQ1{{JVy>whTWc7~R)0OWB&3uh;J6GtIC8+$uj z6I*9|b~+(DYdc3Jdjlhr|ACT=IU0BX$o~+_<qaHdoc;qWx3hM!v30^{WMO8dlXo;R zwlH$Ga|8gA1Hj4uKXA^)O)SjJo$;CJ>FFeF0U+r1cK?B(|HC<#HnBBxHpgdVWoKah zKgi`0HU?%U{}*&QotlO5e{2AQ|1T8ttjjGAf0-jJh#R+I{ZNBSk!8kuVy$NCx$*}o zLP3g4k$iGVks@V9K}r%Siez#LiF)Of#x>}mxQhw>G=|Bn9lU0)gKe*zldKb->o&LU z+@5xi>o?w$$*vP#Ko8QrNj(Vs`}UMG7!VLpoZAq|3Nwyij{cSnCkUWpbihysB2KKc zXYk*67{Sr~;3t{17+?&@14EHl?)&EdI49!nJoaMU{x^iF$P2H|(;yS}m+`-&C_U?c zDmUWp&Qdvh|0x_HI9h;rVgqpX(ieKK8(e(@kZGYwa%>f5DQ5_P1N<7H@e-_KTL9_r zApXKUun7ww>ES7IP18Dn0pu}2#kt(%7Jvl0kGr!ldF=f^EUL)#ZlHjEZy<_X*?;Wa z{z-BrC9df)|MBw!WPi`J$o!2b4@Hp|0EF?M2hU)NygsDVj5z-p@K=PU$QAu3?HiCJ z2l$@$KiMAs@e-JSe%aw4Er9)tf)C&UBjP`r4G?Mk`p(}-fl2_T4lMqOegQ;>?pprk z%Kn=oFV6qm1gFS_L-u3+YnC6V&>Iu`Uo1DM09t?NzsPUU3cc_C$Nr5Xm;Hav2#k~2 zBK`Ab2LC8Av<(ZuyUQj1QpnS_@Xv!b{3GOM@2E4#|Gak;8YhGK=Vn;k-B|zMl-&>% zdguSs{SHZyOa4zcpWrx|1^7SRcmzj@!T)qiiNAo!ypH|T-3PGgwCk{d_@8dDkR-Wj zrhf_h3{H}p{K@t&!wA@lybS+KB!CC{f7v5ALJs_=Q&0RQSpRPgJfkV{V*F#}1(d_E z(Ero{#0DYwGXBmUK69Zr5}e^ben2ro&0Ns`OC37Ew@U1PmFaIEcL&wm{Wl+W;xC*3 z3h0KT(7XCyxjo}3@~-?ZYB-8qEvmYIH2~;t@x*2OR|Bwx-n2g9|Ge}9XyJHH`<F;- zf+Ht0gnyBI0ch~I|4Nmgn1B3a{C`d(0;&%SkCyqbCLmx%UbKJK2tofZ@<jEYKf>P% zy{8TSPIfqg_zQMs)L*j*1aWs9A^%7Q0LkLs@y~;Bz(J#B(!Yb!eQ5}UvcFaAPrxFD z1YI?9(25P<VDbp~%W+r!%LXdMGsa;@er~=<Dw(~}>`#u*+7%VkcZyu1u)m(+m+QC> zp{AyCJ`#SM;2nRam@s0m0CX@yW)A^^o2$6#>Y{?^mTmn_>7xIBQx)1D?|+6R`*-H} zA1E2j@6VHGUV9{bSiAM6-t-IckDNgM)>{6uixmV!E?&adw91DOH=O8qMP3Nrzs2WI zj{0YQrKtb?pmO%>6fjZGaF0xXGj^(Atot0(X_dNiM~R{V82B3<f6~vl$~KvZ`)-O8 z3F7&<ySge|i@z((>_PT&v&gug&R`J#Ai<H*dBoqO&7IYCK!*GVJcSwdO+7UhQ2gf8 zW$v=KNF<WPsMPZKe!$7;>FFL1z1==<PnVnZE6(PCSo@N3gejMghv`@#@&PkPI=NMg zsMKaU^*fnTH5^`J|0abd^Go+*#SixzIAGduy$v+mQhQ=L#eBtI(&*iYqV8yDt<($R zbjtc!EXj)&1D1MdblP?O<N>;co34m|RJ!K&e(S~+8XpO2!}_Ic<)9Hcp2bGYVzVxF zsq=b}#YgB@VHqwN0WK|OpK_rLIKzb7Mn;veUx|()U02<R(lXRq%pGD1+)}I;Oi#Pp zc4mGa%D@n4%AD$R1~yz!8*zg8pQc=UI?nxc`C3E^!xeu~=gqO>1o>*qb2^FCQIXF# z5<4G>ExAJc2?1D!)1`v!8h$Lo`dPvVAyd!y2ee_eC3_j4g`#bmcuP{CI<0AK^tAC1 zrgDG)`IpYADrxxfkB{75ur44zOP)cXy}xM^{Tkn|&Th4`44b|82CSgWRzu`o68Y8S z&I02jwXd)MPKg1zmgqL>3)W!mTfqPBy$ceIqX8Ll&Wc_%9RJU9q4)Q+4hPN2$9uoC zQUiSRxv&+vYAQV%z;axLzAQZ$o+%rW6bt9XCQC8vb2OQf@jK@Hb>xDIWeKoIB4|>m zs)-I3c{@NT$%G+L#OPlQLrMJk!z*V6x}tsmMy1ry$O>>QZlkSoK0ftM$C48yoH_*J zVVSR?`7<e6h*W(&6EMzBq-11)*Bhjxf7bp)A-Am9w);^O-DM8Q({5olrqmmdBCmew z*Mjl1GpQOTE$+;@Az;Y<pjScGqR<<mOEOkxd2-;`u)XFyb7$ZQu$jdgnE*C1e9fUp ziMEx4SgAQRwZ^Ark^gquPot!%?P{9uGI4jnG6$$NWF9+~k9IxbtxdGRK=^_mz2qJ2 zI$G!%_(z~WSAqGK=ojvysjAr)=z)L^S(q?PdX|5L(2BqK?{;zsu~;_=C|Mqd2Nth? z1M=@YOx=2@&w7}}i@OWx!b;IIsDIg(Do?k@1p>MYztA|$*HX2N5`r)E)+h5_j8Zfu zDt+6?HU(^){@i;_)|O)ioCC9<6nLwpFB3w=Lh>OyU#+EQ=zws3S3Ucy+kbFr9?bTy zLej*dNF$&_xYF;N9znKyC<dM(Bq^3V9W+-+kNmf6T%Bp{OC05J7jq!M<}(~oDHb@c z)tgMD&|u`s(~IVHKWJisTSmxt>D^0+-MsKMYw2?WHsf%|uWs&eMe9DZcF;NecE#@Z z$KQ*U8V#NHRWm1BQFO=2zQsc9RjU`a@z1cJK>p%))>AQ0A&Q)*@WQ$eh2BGSHp`Xq zF=la@x-0S)#^m&M4QB`-C|QcGg@0pc*Jw$#vQ#tu<Koo?DWd6I=*<xQ=_X_oVb<FB zFg~kXcTFPGv*`@UF$j2NTaO7RVEYWW#IW%z#pxdWY{u$@5>ZDf^bV<M`!&_}TK+|S z_d^Rs@hUS?CM<5l=wu5c0MryPe}NY^jCVQqU)`<uKWYTyj}q%%VurMNeMcI(SWLY! zJ|34Y?O4#>Xb+TrFKdWMhy9l?nvd=3Fu~7)$8i(Hj9U@+aka-6Ki|`w(xwQr&pFL5 zKOOoOK#l|3eq-rXVgRN~;o=~prUd*W>|zG%58ssoy&)m{QDoayhl`xb{N`wAC#ON) zWENww5M=e*A~|{#z({xV<J?cVYwq)};vTJoW0P<Bh)8vOxwl)mWqSfl@OY1Th<KE& zZy*Z<!Skl?muUll)57x-?@sV?LaT||_4ngk(fu(^#6=dqpi*~!EcfA9bB)p|7PVM% za60QkvUIzR9o_-~U}aovNTI_+RO(bdQyf}&x>#!<Gt527`4LZ{Cs^}I!fiqB<4-pA zEW2qoB^`z!d(9*CHwPX8O?Eq+3k=~Ay-9RmU2@5frDY|oUW;)(gVL?r&X9XNJzO9y z4S+JCr?^w>&J4}HR#B=D^IA&iiE33T&e5Tu=$QZ8lno6H;|B*BRVq?Y$~-1{FS@?1 z%Y110VNGeB*?|J_Q=ocK=p`$xc&w}zq;EGJ5yA6bwEz6zqm`1-@S`8?LFuXe9TJ_1 z>Z;*)5%xvvpaJfmO@Z5ZYfPnjyX2V<I8_Mh6}z8-KMuOAE(fkVttP~Nw{0r9&-8=C zs0L>#b@-hr7VTp;S}#p5WsHOKmbJ`Gy#c@f!mfB|-e3*^2HIs(t8C$RUM+!Huux?l znv&SKbJW?_9eJVk@~X*9F+E*Z!sz8%F>~O35Tj$kq4T%%mUx+dpvNI$SGj4jHX92N z>XN~$#mMF4GkP0tHa;={w|%GH^04}F&ISgmA-*>AIlg8B$ob(PMOwP3a*V-bX(jGF zAY#oe+(Kz>b_4aa6+&SD*)+``0VUMlw_Fzcv{|?Xd4^Q%CjYVVRa(&5+eRgWSC9C} zgq>5pR)yW1Rx<$|CS&_#>L3cFQ(Vt`6N$5_1T0Kb=sj2Q+!B)jf<~IgYfO}o_1I=2 z(={kkz`#cB`o#7MJ@A5`0Bh{C*^+I>sSCs>Fpkz_X=k5=)M_8j7Eh~r<B22tGWU38 z&1UVqNFRDH0M-%1=2B30<__!)PNCQM+j~_(aCca!ICd>uR#tXtnhT6`11ZPtZkM+q z<t+txvUd>{2ypc+QnG3QmjIlqD!S|$B8b#-H>13qIb@94bHfGUR}#W#1L|IVBe^X0 zq4Qsy-xa${m2aFN%KWver16>%YwqM0G1-Ei9nU=dcYN8}j)6NLFwTQw%CLX{m(r1< z68Fy@{#FP7u{Ooj$t@lVj{zlo=|j{KNiYHd)o}N{X4#D_!uo3iuAFxNK%|*;R~`5i zgyr0I%iy^uz8Q?3@~ATVKc;r~;nX@`#p&h~uqVj>(l!+Q6&!eG@wa)wWx|b$mJvoo zgdiiskYRIp6YhhK$b=25)Jm^8!HkTcjk0^QU)rzt#J9X`Hwm#9#k#B(Q^oP$k|4`@ zGgdYt=SB%x=rU7PI}a&_AVH(n%X+sjxSD3dg;&XkIEKKGpitT$9+Dh|pZWJkQUIP! zu{Si_8+<1E&w3b7d*R_2Dwd&CDuog?FE8);&0ga`n48U!Z>vwv9f_Y?cYrG1j%}X8 zLA%bdw~%BBUx?6Xt6v}2r0)R4&X*87WQ^1ArJ7XjU&_^A9Xup}X5!NxAJ-pFk(%{i z(`Ns}XKW)W0cdMUCWMsLl8@&A{)z=Emw`~&^B*-V$Z^Ojyg!dn{M_TK`DMwqi!2=h zt*yaV=ub)E-}c)^SGxN*K(1PucSZC<jI9{ZUHL|LIK1PlSnS*7Ifm*;!(nM7_18+A z0cr89;RM-#O^qVy4KL;^F#*u(Mb1e`2tV@z6Miq(sP$-0XVKi}!eX($e@-X}5lBdV z#(osa@o#5!#5V?cWE`U|A&Sym<$BkZX?4x(4BJ7Wt={VCS`-|ia46QkB<|ogawMl$ z?3`&YJLehbFh9T1V=-N4Jc$o@7Yh;JE-Xg>Z0Wvl(E;k{!I>SrRvSw5{5ZjdazpSc z=F#5R`4BwWW~I0|x?bJ?RV5NO--@(zcgA7CikDSDHR8-IrUk}y!P}C8$^!2ywfT7V zI?FX}`p(=a!yM&Mj{QWYlKG=Jb|YM2vf)9b(<fUtYeon56_>{$*iCoGBnc-s_UmrE z>6q<`%6`e|ek>EC#-qatV*waK?R>50Vqk}(JiW(nIazVD3`+|7_s@fOFH)O)QHRsa z&uE{_r=dp7jz~uYuad`VOU`8k%BQa&M+uH*_tT~0Yb)qx-#xLrdd-TR3w2E?6c1Bs zy@-yUCOq@p7ZtVf5C2@c*dsJ;{rokz`$G_QG@26~G1Bd-ii!V+qpOT+v+1^P6)RAn zxV3n2N^xs(rzE%*DDLji;;zB1NN{%z#UZ#m6bY_DgWi01er2t!XXcEanSJ)2fsVKn z*TGJel;M29b6WA-Ttl?y=QnoyYY|U+cH>}NzfZ);#LKnTp_?N&56CVVq59V#n?m0- z#=y#U&|TLUPgt}~+UE^>X~nniNML}D{4Rf;JSJy_l>U(>icC?<?Cc`T$EC#-0Vky} z)brE7*$MZQ*dG5Sid;_poMlRU%0_;=eU3ey>Ui_m<gq(I{h-Xw%CSzUzwDf2_#kKr zvpfH4w(^x}#yKjn)La$kECxG@%+UI$?$0$85@!#MS*@a5v!+ZF@HE@T))T21(K*l$ zDxPsxqHe~cMvP4zlARJpaBTMBUwRwolR-Ay0-y~upk<G9?YX5QrFU}b@+EJp1jxx9 zeKdAoV{d?IzO1qj-otRrEBdn^Ayw|B%^?kk(q_(-Ty(2EyZnq1(~a#~`ZB`yc<G`f z4;7<gyHs*JDSX53nFivPEue{}?0eRd$j=i8FQVu))e_@ZK7D2U>9_dpuE6>Tj>YY_ z{cf%jRCj!M&pNogd7>wS0k3bkkvwuzmMhbeVcs#AMziaE(_Y44-TFy)<4yUG>r5WX zE(2HjzAhjXzbc55<AeOQ`^pg4OU$bseKse-vo**jUJ^t7@=3Y7I)#!StM5`b?`D@m zNo}kv9j+C6ZWklz5w}-A2kua;s%s{q;dW?}>xdc%yhW!d@`1?k-<kXzx1sTQ{aWfy zV43V9$k(3leKbQJP_$d)m3fiR8|sg^?fkaOCQ=lXwU&;~3!%)LDi>RHiXIuR2`*K- zTA7>{EPrVqh$squFkXSQ<KO5wB>hb@Vmcq88mP(sqA952IyIca|9M*VObpSF=23Wt zIcH>XTdBW)x72!SxnD4D1k?0R-ZGK(mb&(g=>c<`FG|GV8pRCU#6v=l+$j#_)@9dZ zq}5=%1u0c^fsfU!!%MTP<FBs8JqIRhT9c0t8O4{trmN<DWxgNWA;*~>jfl3|ERltd zu~D{4Q?~2s-I51ux5Rzfod*19*f*FvTuj+S?7EfX)UBu*XOnn8)To9sSwJNB_cbmv z16guDn8UHTE_9lal2lds3_TO#bG)LYdWjINMOet-@;ha$DzfG=sUTsBMX&K@RNf|Y zyOmUJ1-cGQejgtkSn9uZ$DP9{9&f#Zi$%Fl4Qt+kloh|Rm9RK_9c5lr)@9dxB+~mt zLM#MlIXIZJ*Olp72);C@?7|r;kOV*kBckJ!eUpV)m?#(l>sQaMA|X+^PP7_X1wN*7 z!%;yE)rAXqL9T0(PdkdAd^j2yq$MFfM`&%U9<RPS35sr(L+~GurRV-L7r4JtWVmVD z%zSN~$f(eyKhW~G+*~Z$Jr1EieBk+RV}TPF8jhq|;&^{xX{h-jGAaYn;MAr#y}UHX z=eTF3(WzE=7N9zd-YMjAA24q36qJLYZwENOJFH3;e2E5Fk8XPt^YOw{Y1s5l#Npw? zx%2z!pMDZ~0&o_AMEq|gEM)?M4icr|eo&IvRYvjKr2PQcS@Ce{?D%r9u8<Hsl3ZE) zOXR<t!`CXn?<r582=*;Qy=odG&;!#Ds~gZN1RpJyNU)3Oe$jS)c3w2GSA08|Y;uJe zSW^RnlC_^hbA6dyGRBpWm{E9w0j>#@=ieH@*$Qc1RlOE<Ov=av5Yvkw*F7Q`89T`b zr}@ys5qqGRZ9Ih2Jky^#HXvfdMYjB(!PjPh;ZRGIg^f?Sy?_@)ZT}|NY5Hp<djdvG z3IaPBU8JExagPS`aVWyK-D2yQPa$(WGe(%<%W5>LwHlV?L+nnoXk`8>Az}O(RunU@ z_xA?`z*(%s`<54Pl6zy;z*QxZ&s98254`_Lw(sXV)wZxCN{1UnIbTMbJO73`iC)cf zvzQn9%sv_Q8e3=d3yAZzlKzLkG}%Q{CgMnBIV7gaa9Q3)Pm^Nga3Ec?|G9{}Y5gEP zXh0Ep7r8d?!^*W3kcQAdviWR=o?)sfHnfraDj_~Q`6=j7`<H44Vs*qYiMhB+*kgwy zH*sVG5&hYBJA||F?D*0l_n<LKY;|{}6}9!IjrXqP{_JY|671h>^XEl!HsgEh{1lEc zB!ax<=M7$%Uav`cvwJeJP3wjj5M{#1J^iK$#D|MEDAp+W?<*?<n0wmAY<7Tr%6_S^ z?zfVGadX|hYeyN>(2OE&a}Qsgc=(sYmey08w_Dh~W>C?w^(3WJy-lY=+zfemmkCyl z(&S-*TLWs><ZuY;SNzoVSgH0%m)~g27#H|#y_WFr_ua<#0P)4hvA51CczrPZ)AS~r z+7Sp{z}O6}UVjXZPD1Fj%tRCXh)UKcE`4A?eXV=YhQ%%qg3cK`=d)R#Yfm3M@_Ddb zzd}M*EvZ(mi;a5hAjFh>3Wg-+hiz$k^?&-|{5n3zKfH0t-5>Pi+Lc`&sRie^IJnn` z84Jc`#|pgM;(nOMsAqSR-CWB~bc9gKr3(Ug*%fb||Lrp*)oh)-uc}+nRPk={I_8;% z+aswmIVN#)6hhba%}kBdZ%fMhmuS^j$6wEP*dlyS{6wE2KDa~n7m{^03ArIk`9(fx zIWr{vi!s8|9Nrm?Ob6D3x8Ty}$lIOw96svetuPAAc0QeZvX!Ehr*aF|z$;(jK}_GS zy9-4MwmGNKb-}P%LbVG+9vph1;lUF!=4juOSEtwdR(HWM%1;XZ@dnAX*9|3J_lEck zxWgH3`oXFj){}(WhyIx?0~h)*&3!2eZ1bDycMUdLpu5jR<EK+3GVgO9W!aa+?arGs z$8sR%xS`HFvxF5K>&=V}H=xVRtw}$kly*kF4e!xl7MJ%gtzGjCsoz^SZ;01G)WiYL zTcfQR{KpuJN!H43SF}}j7N!35P5-(4ak{V$n@f3?K-1O!e3e0Jr0`Zqx?OO<_tT2@ zedoLr^jaUrry-Mq*;j0c&0|B>k!b%Y8*TJ@mN7%;bI7@e4nRuzG|~rhn5#b2l7c>` z@sEIG4s3H(!6;z3!oNTJ2GcK|RgYHFaBeBSZP{Fw#|Np0+s`!Mf22O<K8@9Cb@HVz zgNH4``Y@V<yEFNREyncXaF(D$Md8D|dzhF&Y`B=*Y1ReRkUe0Xa-PJ>W867}jF(N! zx2qqTMz)21;C=`D*)HS0jZ=dm&NB5zb@N`@*p)E51i82>r__0FjJdFd81_xcv~#15 zVKLkRi>{p;mW0?p^k=X>n%Il};$hf796mWq8^en&>h&o<J=x0iEGK<qM3^<IkA$VM zAY{j6?pHLXIgf6mDIx=qtZ<<lR}kCHqIs!lPbK}$3m-8FbBZo(#r))QK%J--`%S~V z>Y-fUj%>6po2ZP<IurS*@F22uKh;RrIxIwfh}plJtZv5rw_49?p%?g|UuhDlE&%!a zGmE;DyvWm`mddiC1_2b4)qkrnPOx^wQNUs@Ie6fB66b|9UYkC{7~$hOn=BazLMIc1 zT%B2wgWr4lC%p%<=SifPga#5K4@h$TbJuj^@(hPp&WJNkS2K%t>b~H1?1`LXv5B?E zdR-9^Np`!;^~}l{(=wf8?JY)SGz0kd?YG~s@wpZ0bBKgo+B96@XmB7aM*i$fi5+B? zW=yMl((KY+B6u?SLBpwA+eU&`gp=ZSB4pXD9h&&m!zycI9%=En%n9>Mc~yIPVTTA? zt=j0NW{|(aNEi#JihHWSi2KuRWG#CRFZn2&0&KbFK(og1@1Zu!i`JxlV@DxatB<xq zvc-ZTXVCy9^$SaVsH=k8o@js=-Hrqu>m;Qa&N_ca6S?Xk!jbnqA@M}rQJDd>nX6ET z>O8b0S;<=diPA^ioaB>jnmn6!O{>c?@fUU$eN(&HB6Ocu0}W1wXc7u7a0y}8Cxt>C zKXAjt0#!{3`ITpE;wtR9=92l7Kp(GNxi9c;;@PqSYGrb)Kr)xL_e9sHeC>8RX+8ST z>;c;g__#GDoPMqjyJ_C`p^aH($kx7l<@saC%;|(a(vRz3RQ&m9fbe`x$Q9aE`+Vfs zDofL^u%eUB3B|UQ&TfEj`!rFm8_U?G2Qo0vFjYs|Q1NIxy->p8(CkLSDAfBbN;Fh- zRoIR*7I3q-|9lC8X}bL?Nv2ljnXPr)CY_?KbqT>+vfqwB5)73(oIZ6+AzZlv%TiF# zj#fGCN@k|nLFIF5@0RXH39R@mldqKzR!aT%;8a99AF^`Yzd7T+a}x5r+YrS!s*Xz1 ztHB&YEbKo<J%SM(`;&rI=19+o+>lWgCCUPChs-(t?vLYtEQUy~PV)^5Yfd!iT6QRN z`AHBeY`aI%Au9JuO2@-t3aJJWpobp5pruhUrS&`UPpg~@_q@UCX{Z=ylQBcf;TUxC zZ!78fw1W3~anXpueMIKT-IXfLy=6XYsOYDq&X@@Pmm<ISox%k?F`Q<qDdT|c<68p2 zn}N18HP38w@3*f7=Qpf~3Ui7wQd_Rst*sWQZ{!+;wlPc6`LpfJ^VC)6*HFlQ6K1sg zMVkTg6@m7*;1UM*pPmDc>MBp6{wS2xKHbXm)(OOxA#-wlD{210h%!T(%`y*H=4%II zW+$In0Gck#>q*&VDs&wl+kMYOU#;ctqZWXE@oMs85c6hu+Q)W7@Qa?|jF`U_g&kR) zeCwfR*^T<w_3>sRCbw>UCo>^ePebKsgD1GMP28XTJAQtjcV2$Zn&a%g1AEOMuWq{3 zW~W18`?}O_)vuj*PRn@h7QkM&4qiUF;!-fpa<Gpay&Ju+sAH`~?D_6KZg_>GqKiP8 z30E0`bxAH~gp!j3U#IKh9X5GW5v6E3CLyz0t1(2Lc;56hD(*`mWv7up;O@lrf8!{) zYEH=a@R!-c4aKADRe$s|g`!X<o?-F#NdziR(^2rUErC(g*@rahbzzln)AhPNe}Eng zlBQEzn7=Q<$K)?~PDe^UR0M`Kp>Et`_sS}8MG9Y(O$${;7W;RCYW;lLwd2fdA(g(K zgms04%Di+ut?W6b+H+j7LJrI)X2Fb2(T_4K+;z@JY~TDKTL&wAS?x}{axv`1U{_?j zb5S7e$BN<Iv|wfKsJCe&$uZ-n%XEYCS-S?$2V`bS3N7vcR75JjDxV;C{2hp~`*7LM z&{9%FLE5}0!5?SOTl<y;UYG6SW{k<Y%Tu@4^*NWNY$Zc8BXO6rA0#@wY&*Z{Z}R3Q zSF1<g)12PbWq3lY=}i@>e=2BEnGt00n1ncX=M)(-1ms**2Z{v%ODA*;xUo*KxsUVY z*JsONRM@C6kSvm)_tyMF4p3g-^gx(`yMgErhwxWn1@9=F|C%#Vu@%M2DRY3Kw5bf^ zj=Bapf$jV^i(9+59ngFnB2Jc35w1-)fpx*&-*V*(Pw$rvp~lQbtDRK!x}8;ffh?p~ zN-pnfI)S3YT@&!Pg(hPFwvpAWne~l9@5VChFIj*0c!YgkaA*O=;_JZn)R2Qgd1U!v z5)eu{toe5#;Hf9i>){ur74*KxvBGHK7LawT>rqowc3gh%J(>=F48?(%5-YQ2y7<j* zmtJMD`|3J4xTBqxj(Xsv^7x(kHwGuOkw5f`%(OJWS+mYovR~(rH$+CeM_-w-akgpN z9E5m@gd6ah{!?3yhoh}~-S2$c<}tK;w&3mX6tHBOuhg!Ce_zV&d4o@Ym6MUF*HE~H z?I{R-5V~P|*>h3R;9sSkQ7d*l@reZmpiR9QQZJix_ags(TM|mqUWQ?kbY*fX+BDrb zktY@S)~zV!1>nmyv)6_EVHEnbHP+q)+<F@Cwa1*=X4~kD&aWrV9FKGgQTj8%5so3A z)?@gx;M3ekA;vzQeX+<%6{3&BL+Q`XdsqHaPv>Q47%jjjnyE@JWXy>FeLQ*ke1(%y z2N55xhkIJjvB^Mfpj$bir@zH;ZTXf{WT~FCz3X`3Oxx3folr?q<;Lm7PHoERZQicV zYdKbVcM@bu9cHH~_3vc^=;)~{4kD`lYaOGRv&?)}oTuphd$5jVl|Qp5$tcn=j>UF7 zf_MB9VOo_bTzmn?F4cE9hs<C39FuEMKat*Nz3ZGSps_9wqg#_<JvjQ5&2SJfnl7yJ z&iPe~v?jptF0?`%H-_D9+=tP-Gf^{7ARoI0v8u0iWk;jY_WLpFFH#E%-gU03&+-_x zaKgd=5o%7W!~DI7GV3qp;0K+N&rbQE@fwuwY4cQ7Y|*{i#4QN{5ymsiiEpiX+AUDN zb`q`ZM^I8xn@MEg<34O}Cwva~el71xqX`Xch&WNw4WF$v_7$SFVqLe{1n>{%Vl-{v zCHK$y9=S8}2xzT+OR-cQ578A%6?LkEy;qt3rs8fcrfY4Sxwws1#twwqc0?|!8F+qh zr>QX2j&5e8k6H0Qr{8tg2dLjl8225S22x%lOhazJjkvGgJisW*zir4qRFzl1zVT^} zUfS_H*<PCK#TX=Ce8fQIrfp>R7Yvl|Yt)BTU74TYHOnF!FRPa`_>o!pM>=&2Ju_HO z5*7CZJ0G(0atK&XU?u7%969!d_N*-;x3M}6e7BE3O(?Q3DVGF<NKZ`Db+9HFb@0a% z<8uXGM3~{dqQ8+AR7PHlDwFDg%t*XPb5C0sA!s$5<wduLJePkS|JrPvbZs!fhkY1F zYJX!x;Tkv0_cr|8@r1L~!M$Y4w<!xd%y;i@K+LSU>b_!4#sh%$ms5V@njAkheO_Js z562O@{|=Rgum4z=@#_+PdBtC|xrO6Za6ct2P`-7^F6j?zVj2OGLJa=l(A<q*F8wO{ zpy=rInNHaLZUVb4%Og9gDpL8lpFzylAr)a7Ti-@02BGnu&DCfJB}n?%c>KYxS|doG z4vBOa@DTK@ZksS8F}`POzeDYFvpiD?XR={VY+_P2&N_L4Ff7GSvyU7%W`B)fH>c0V z*ekVJ+E+OvwExSwL;R6j@2}sNg*f-ukT8?pYe6zsFG5@2fi@C#>6t)%6s*9WAv(@n zmr8gCiL^$4)*D<n*iI)_%4WzewpK)wfBg1Q#mF@oVY~hA%u<E2(+S`C3-!5fU5e+T z7=#LtzcO}|v03C3dRo`P&Bhh0zQxt@RL`k{D6~5>V-8VIXm&x|kG<vThbok2wQZ%K zmOEh+GpCxSv{##{`A8JfV=bWj)^)L~?BUfKUeur2*2JX!%*miH^u`1xgb)<w!?0{$ zDDdkh?c`)nFRaWb$d^5+p2v5uutP>zbp)QUeMSFPFhD0aAC>VbQSR&0v@NbVL={GX zb;8zg9T3G9rM)|2HZAfYw;_H4%ESG0)XlLNivmkt+M9)M`!%afq*K6eKaI=EUkRli zQVYr<ueozN8W+b)vs*S3QMtae$4+)GwkFPu>stCH6z*14-9W~&{a=He0JW>P5+NL5 z$Y2?tg;S2_YcC{7ycu=e#x-ymPcEYer=31K!iLz<J;`<c(b)S4A2xnwAAtUCMI#?6 zx%UGmp|S7u`$*HmDi+8LvR1(MevUdFj{=N3pF1&gKl+Z9qde|FfYQLEV9L7dn)s2L z{HvxjX4g0bq}n-_nT7w#9APFRAd8Htn~rau*TSwAJ*dAw5FvIl5zVJJ4Lh^HyhC9_ z%PQ^Mw$;(9`_#(H!Ob}B+@E%fx7w15&-soOA*nH-S(+!Mp%g4XSc+SIV6*+sNZm3_ z>w+%ii$34<>_xX5SdP0wOZ{_^{m3V=z>eVf3nh3qI`q7}=K+LJbtVQTuD5CjiWza` z2Dh{eB2m*sgLn=jSnCl>rTSo}$frcPvF50slq;@#4>o#(3+Z>!Bv@+$LJP46XQdor zO)0_zH4oBW6$4o(gdYLfc-7@yg}AH2n+aG{Cz|iYKW%c{nOOxNfjKHl^8Y>$q^b33 z9Yi$RL?^Cpyb_kN*re5nZU@`j33r(F|N0j_GX3}F{UPU#pf)!j-INy{%Sy#p!(@kz z!Ae+ZLKedJ&|<g!A@l0*lTozWPn2<E8bZf|Lr4;qng&Mog(20EB2_`aKIO!ukjc$| z`3GK6B`cZn`K|4}0(c3H9-kwY=Z(Y2Nl2ElPv31?m0Hf+m2!!(?JGA)Hz%L_KExOt z^MUXBg`$vPe(^hp`VU3YbAhWBM!Ys+3aqH-cuZQ|(`>qy*f*N@wu==2N>py`c#Cpi z(}s{5tL;J`EDAeGq8rlu_(K66XOL(pU%dQk@2v;dPEdSujpIG&yMw?+Z``R2O=(Ij z&-$I2^61UPVMmfXkxTKWjX(1XPoH&c2$)$~SUsvj&o!65OseC`9JMIdvOfu|$og-m z>Zj>gy2?Wi^;Be47|PiP$=G}M;X?i1L2Buu-&#MH88;%@OUPrxd6k#gPwnPM-xnUA zn7Q_FfuN9>Hoz8%SjV&gAvZ{L0A-mgq{)eOuraP{wn(ihVDgkokF6V5)H7$jSP3bO z2%uD{^!NkJJ{JAZEqijO1T^Dc*kE4zuK9hvkOy<}Jw?=Mu17C2WX4cbf}Ko)ihUuF zQ<|}jrDdEOe8sVt(lT#Ln=3rD{QSecXlo`fsU^4iLuNnO^)p5l--t9REbEAPORwqT zR&<#L@?}lU-r9R`UpIDLoH~7F$w-r?@70*Q-(A>QgD@aQxTJ+Kccg}$bURr>i>Dj< z&YSWy>@SH%OO!xQ`2eQX5Ud{r)upH)VEI>!Hht|An~rEvrd$zHWF1&R3$s9Eu&)Vk zgPc?kO22V|{hn(&6PB?pZ#x^M*lk9N$Mc9EBia=DX%N|YNohP6?R`2Jj*xq*rmx2s zxD~Mu^CMWs&vn<Ptu6KpK_*#lg8t4{%Yid_7<at%ltPnz8E8|dUrPXnez32bd>V<% z*!z9@jZz1-?h%pf_d=$KwK!!z9L+@+Sjt&#NpfgvPOuf#6;*P&y`|)+V8go!y}mUC z-cX^ToQC0uNf-}yUE~A68x5$7O`FAO8DGaw_NeTBLm72>7L=>q8<5n(<9zvJG;MKR z`FeQv_jj{BqTeC?<#lXM!Httsu{C^uvFk&!O|5lXt~5`eJOV%6=}`^NV6a{Fku|jb zQNXIqh=NY|>Z5%LeiqeAukQeEWcVAF3}s|CZk=bLMn(v^)q-YmpsmluunczB<QGx$ zfmSNVt0!7_P+dy%p#_{t>}Y&R%!@V^5o?R543kmW%3dBXz7D#YX>b;p7H>|E{RbX9 zp%L<J{$Ml^RzahZ5Zh_2OK0Gq5Km#&xpDFc63b71$SG8k<8GyJy?P4V&X{<;N&VYN zj&$$V((BLpvTdY86JHE_q}WDhXsfG@We>n`)}T=5B+IVUR4jK#MsyFJAM#a%PMLV> zEGeqH>p|9!U9o)*uX0>Szr2C`<FMaH$KwbZHaHj&6Uf&g`%q?;S!Q@r_mH`%GL~!$ zr8JtnG&-q`1~HsAvgPfk2(2#udiW3bn4U<uDSo*yfV_6i^i3V(cZDfI=8J|pj=HoK ze_iynYt0^pa?}54ULzR?hI}gR!-PVKKW8GM=O!5?xO_u$Lmq<#T^TUFktFV?<f~$1 z9sze0JAzYppRh6H=Bz8xbaFVy{Qf1z3~+K#IiD4FhJk7?D`a#WbV!xY#|zLJ-=Dm3 z>tvi(>(_0Rs+^yexh_A<p48v2QSr(?dNN&?vf5QWu#nb~ftv<ppBil=RW~|pm)G&F zt-?B~eNHWAy5H;6JRqYBeVQWJW&7e#Bslq!Ft2Ks)!~7OVc%GXr5~u5m<sgW&=dKl zj{M^+aTbeI$poF<gq8!MJSOhEkZV7$Fe_YI)ULH7^eqi{l-%<_jHUk2%{!tOSAw54 z{r!`P`%FhPGp&mJlSrPPdENPyRV$=E?ahXPQPsWY8Y4@(r7j&=&Jpm`KNYJ!^Ae7u z(<06Qf_6(NH9TZKUER>Wypl+*_}|*GeNRX<ieLOQ;qk`}fh>S}<L;qlu$mkKuBE<l zY4NFA)H27VCZ2fvpVcAUJC5hk?OADxmSJg0OudmomghS5@gzjYuLTXug;!gJ0BeqU z2U=4%qRsSuNb4Z+6^x!fr25a;huqz_@{6Y)9@y3%l4^_pY(%P$I4t0p8H&gdHO`r{ z{&{SkBfgoEf0ZehuCaG4qnWG9oLYGatOuJu;5VYo>NOl&W*A|aP?ZK2)wt#t{5`MD z?S<^t{r`ZW22itd%QuVqys~It_qKJvt|d++KXNq1@F;6U+QbVd^7nCtKsQ)ce}v1& z00%O@3uas6C!=`bzkeQDFYhu)WrXn%S&BL=bRphUqz)NC55Nu74IWxYZuH%%7qrwz zeKxFc-7hi)=_>P6FxATOAYc5Zu_7LsI7_jfuRc-t@<sW}y9x4mJN*2PYib(ny<ay< z$mIduL<XNF&XR!gzNWf)*&!9j*@>PzAJaIwe4Ato(!+c0L}B`L8ws`7#5&HeLyt9c z%_?k3NyDc3GVSnc;^vT9<3C`0OKR)K=40-_u+Mm4gsKo(A4oL!#Wj)R+XI21G}0jI zYx{-BrC_t?SM+|qPb>T6De}@?YX6+)W}-_j**+A@GcKnfr7K%HZK(4H3|Z%w<j9Ax z%7gfp{jNSiz{x8TdkIdN{J6U>yJI9#MC-G_{3AvtNh6p{;--sdn9BhUML!U_jDh>9 zUe<r*d(TrKT3chI!YZ{Qof{j07a{um?x|&TJc=z1b-wFwC<##I>=^PQY0&XH2mwaC z|7&$GH91&L-zc?B9T`K=npP7QNiwucMZSZf{w0RLINkw0s7*Glh?0?{xgb@B-0Y<N zaQ$i7BcKG#F}bi3-Ibx(a3nOtg}|E`W_%p+6LytB6S@zRh&!rs4L(>Rs>wWE_iPli zm08QwHK-PV%&2bCfXwTjlA{9QzrFb(pk>R{x2Na0P2q+o<rqMo=%UedHur3`z@m1J z*;k#>yiQ4HGEAzYje}g_0LCKLIwg&=y+wiP=i+6H%wrB?0T5vQ`?)>-q*n?{lMKPZ zTQrm*Da^~|S5Pf=0*k(*s&VWiG}(%E3G1ls=0`ur?#`o5AwyP=M7<BfN}eFT)>i#U zJ`(Yps=dTho<{m!5LA1)z-sB7ts?XC(;$7tj6%d?U?9V_$oDcjd)1f)T!|Sj+kRG^ z!c$@RvLvfH6TEHj1@|%Ytb*AwviR$2LL?`NB%c-fjOkT)GEAvdPj-1^)epceZaBsa z1gTx;XAg=+)`ybE2q8xxKD$b$73j$N?ZINuCc6LINtKXC9nFT~We<=qoo3SG5dq`_ z9BYW%kkwM%*<$>QBs-u?PDvHR07&z8e<?+t!kDa=!B{{7u%1Cy=oGK`X>A#fF=GJ5 zs+aym+O4{gH1^v3jv_yLipeTt1t@J3pPpCyY|8k|I(6cr&zd2p7pJE4yCg`Ree70m zxH?(zI&z$%s1jGs`1#_4rf#hWr1rJBfWOi`r@Z0AYYu>nMgGg-{^g{PdcdEjG{>DA zS5nK7B<!su#VMlPCG+}0tDOz}Q|sS*pe_$TRDlBBf)45MGDQ}d<EDZHtq>$QjZ&@; zbyty^MpIS(1}6|Cd5w{EHl7y=9-nZV$VVSn8`oOZcM!iKy?#}zCg?i;Hl1}DZpR*% zCDD=Ul_Fn#j0@CJm8+D3fGuD}W(G3M8bfx$Ox^U5mc7QN1{;Oc=h1lSyD_2DZCb;- zr~)4;Qx4&G<KI(Q$H}jy<zbq?oAYANoL7(i(KV!fk~N2RYRnW(?*(<53LEGl;!zej zTgDAPN>+P4PTFEYf>#V8LL~V3r!)rkJb+Bj@XD&I=y0%o$4@bq^OzZSIEyTa*0UI; zkY(sMt#an>II1H%Cj)<J-sAX+c(gW-8lr0adN*)xh;Kx*aUc>LOV;IIJL<=gHgr_z zYOwg&o2fbB%QS@v^UKBM_b<DDjH7G@yJ`<XXZ=K@Xm<}w<_I@}<XpPBY}F$#etJvM zrKkWi+~Ok^AMu!n?LqrG=QM@1oB_Q5g!nhD2pNFTrE+g$IozSs0m8{J-)t%QL+l<Z z9ysj{?xa(TVaY7UoSD1t^%id18An@WQJqe9>Jn2=M(cUhw#DzSq9jh<M2oo6h10H9 zfqA~v7ekd_>lN#H^?)>J`%~LyKQPai%xU1>py?2qMux~WW2qNbAwSzQV#)q8SOwSL z>xdQl_&pfisKCs>{vOxHQdaU;)%@u908f7WQU1Qebp4w*!$)uQ&hWVqFbB-TVV^q= zvAVo+&x=}oDXD%G8?EOR`naNoEy=Hy>~ncQ(p8a#YqKc9B+<}SWPA`kYJ}e7=u^fc zgNb{IJ_*q&@EYRZiP!!dR4yFQ{|P?-H?`{vOZn1!!JtCcJgYYBCp8+UNWWjy3uKgp z75Z44GQOHfmT9_=zl2{2+`ZLJTy+*Jy8KO!yN_9rR}#v&K^Jk7_s_Vi|A&QcLzrKq z=6gOl+B|(A^TLBSRdeL!i_Ukcm!fcTx0qd}?6VsZ3G91fSDq*{o&0KdE?cu2VC}0d zeO4m;5%wwOe{#IfC&P!_u6H4Z?A}i4?Lz?D)k4dI5X3&3L>7y7+8J?zTcE{F@J~F^ zfQkZklQ!BjxPHMN8rs;IFucq=Wu7g2in}(O*waYF(Pji$*f<~*zBJsN!5gTA7ut$h zwP*5(5`wLph5RWIDy%*tej(b`dxTj5^BGHT<qB(ND<yzF{1`kLXL|@PP?veM!Qz#3 zb76#lSMhEUiL_ozkAFGlMXNy2RIWlQF~vMK_3R>wCf)pt4?QYwC8NXacpSdI$;fcL zN9-hg*Lm~22aq<Ogy9~=%;qp|NEJchpbFCBim)D;bOUdiPx&VG3Y8a{*6<9L;AIeM zxJRecO6kL7yt<i$K7R)QIjDh9bi`Zh!JhS|!}jSLIGV&|VohW-f+T71CLYZ_Ud{6= zAunqHV0gaUZhIQV2zRTCp_xINq*z9Gk0EDT!n!+rwg-A8OA3Iz^MZy3n7*W7KX<V~ zfNynHBg%~<FGF>C;RNLh00>UpXNSr0#@kPE^1)(3{BsMhtF|W<BK)X|e5xW&W(KMc zY*9V8jA`5=C@pi_SVZ&yYSiCfZL_!v?wo^PZ0wMGUfr#v3b;x*RaMj>FYG^(Cf(Y3 z6?EuGj+aq$04Dvb{$cs0weHx$=Kr)6jlS6f2nmSl#PNxo7I0&h^mFg&ZYG?ZLflWg zuLMdn?*&*MsUDJ0w8pR}l@L@$vPdxE5N#kwwIz<R$i6p<s}@oPJa`NaA-itTpOJcH zH%TV#kwlJ%^(3E@sMHEifQnB0)zX~bWfFs+51?Vkh;a`C&5w*y&x{i7DY0swfTFaB zP5M59?42JX<X($9zXD&Oc4^-A6@5viy6V;>My>@!daNteE>$lppl6_^M^E1|d%^!+ zNmuWDsn{>PXJ60Bd6z*Ssx@+n2xsTo7*L21OJo_s#d&@98P0+%4~>R%{y;?`A7e7< zNquS+PK@;ER;n-6Lp2O<%RB-kKmJ?G65)s7HVPH9#DVgj6F+6YiDUk7oSG>5dZ~km z9pI3j0$8`s%Q)pMCqc0xo@veHcCwE&T7tAD?zEdt_m>TId^h}!gXT-lQVl~m+vfM! zlr781UEe6~%6hj+emOs30tV+%I{UR3NIs(t5I;B_UvR>$S4P_!oettnOHJ4BojGd$ z_4Oz3&~gNw@7j4m);Pw$R&qRCA*&@n_TQSK*IDnL71{~&NoamFFW9&5=Hv$CSa49Y z13Z%rD}C1>J~bwakd{;Vn<vTmqtg=l`-6A1QF%8&g|TEivUziK_Gj}M2+jX?iSWL- z<h|#gD6Ny0;jKj2llL3+fBLW+2jB5@7~l#Zfh`ksTKs02Ed8&eimKI+J!wONomfHD zcz6L&7Wr_>Gq<#DZGW+eBX%c7I<-C!uoesdUpr+|>H&Q|j*Bd?i42w{I~{U#Y<jAF zD)Om`-Frt{(7ZO2V41l{Ua<b}a}*}P;=U%NQ<QpOko=-mtQX)b`#ggUL5Q12U*5zw z4#rr(%(vgye(rhVMkzP9ThQ8QBRpq;?EdZM#T$dwN$qlrl=QCsc(75z5_<D#O*rkE zle)1QlSYmy_qSKX7F%T1jfk4oib+CQoXO`dCLP5_(Itq~7dW?*Tus`qfVM&5zA|u? zC2=enZ1f=Bwiu4i6|7VJT_wvXXew3@A#vUqt(SA`XO!2;J#adf)}P*b{*co8atLq- z65Z#Zs}K}J)vMqW#4RUE_-yF+w6Hu9L7LHaj^kRh(SAVdG~~By^^P`(eTGnH=1F@q z8p|*zF@XuvxcDGcIUdsItMeP=v-3mAaXT69<PFNjyBW%2D<vcWz5*Inch)cdGNLJ8 zFu@N&0~u~(wa=EQE{XCVl=v6XUd$cy2j75!`0>lbFG5D<VGWs#=i0uV^=D^l^yYIN z1?7F$Y{k{@%ql*ds6QDmf`68<YLi}}^Dd)2!0q;5%QYKor^=e%vUMsDn@rS@QVD%q zC$eqqYk)`QS}x7Ao@Q2#%h%f0w*^4A`CV+yMU9#ZU!X!jjQ8pvfu@^Hu;`5PCGCf? zx8iBzbJn=DDUgJu*~D_i1FRt+t$_=h>k{4qeFZstL&c^ccFO$O*%t`{dmxlgHn#rD zt!qGT2<>2z{dcj~HTLxrWJB68F=h7F@TOaul0*8!E<FthZ&2m<wK|1o!VEsY!;nzs z)EuS%A?7yg^7OI$So#K%qlsxzWGPaEmXP2WK5VGz@(1rY=zk?1m+}8nkgq@6?y|!I zwYj1Mid|H9`2C|IPZCf?!~O#a%JFfs@Hy!=QLF-=DVA@4Eg?k%&JmrQ`l$I-hu*n@ z_cT=eO?NS&Sk%%7*`+qb8(gO`&JK7R;uuI}P~hWeB5Xld%r&goKq1F49f@<}lCfRZ zHZ}aYjl-fYT(W9Bn1hCppqXBUN!$u!Ar-_2y>{UOb~Dm;`?r`3CAKh;CCZ1pAu!gZ zl3RbNjkuMg=hE9#p-I=Z*MD$c*P;4?KeA^2j)y`UT7a9ubW_>S@5I6rZ*Z;2wmip| z^5CVH6sxBAFIg{%zTve^kFKM9(aOQT#9LGWQ(`3LN-9V73`zKuup;o@1PQ7S41nl2 zm|VLP=`YtWKEhdqzWbARU9Fmz!o!@lvAh<qw<+yc$p>zK-+fhh4aq>)xE2Ef4h=J2 zhPo|l0t070IJkPJf&@p~{&&6v!Zh{$Kj<_Nma~K>`(oT6)Jxg4NRJboT#A%_9|u9u z9OWEYaF3x}uo;s=NFu5dmTSgf%8kXU{=le1?}OJOT<A}|y%Uw=hqfu*jEb$`2kqa} z2eEK)<H@ap=Ep8PQ4-=wuXNu-{H5$*y7{SW^#pfD8vOQxUVR1T>lEACZ_V0&>H8|$ zFMix0aF#OA+1o-55mue|NExq1aq4)DXP2rS2kDK;bT=--c2T}R*jY`~zVakF5r=g+ z5EK>8AQL4uc<<N1fv=)FIND@v7grXkMYvI3i*5ka`9Mop*ZJeY*bsvqV27k9pUg(U zsVmxoze{^|gz0UQ!I*SUv2BfBGv9?jCJ+=+P7;E!TSQ0g>W!~EImH$=jjc8=iivIj zo^9q36o!29yVo0iOZ(6&R=n!kn1|3(hS|-gMJtl=%Mag(Zv3`__e9OzsLBXW58rqw zt+EAG-)p1h_aFPGpCA1GbXIb{+|KDwyWmdl_{V#deCTJ_mrM7)YW%usJLu4P)~UY# zm(c<|bLz0ot5fvDhS@LIccLzYwlU0I6~S_S8cR6!KO*qRv9l!gJ}WT5FI*}@EWnyx zNEr6S%2(Og6TVre*IwZukG+c4Zhp3%M;1~Dx8W?&AY~M^zuFEU&76D{Y8!8xaa7h4 zGDE_-vV?lRszSdso3s1VgOki18m-0=Rg_lzrL#WdWQapem2asOLds$rSzecePh{P> zk1P3l6|inG*~d*v#I2DLSdtl?>VZt9<yh$lh{Siw(KV!Wco4hIc8Pptx#lzKq7XM% zE_klJR}oo5NUmyHN6=D;!!!lD(Jo5bFkv&(&FmGK53ov8JN(kH)OvQtqmWcIJEDJd zqkwhw<I6c}AkmJU!_SUxfc}s4ovwCV;VwYdRc$3d7})VM<cHoj-J7JDlCLeI3RiT0 zF(8F?t=^%2l`L@%=vh1mUXMl=>Jc@<-uyGzz1!Z%57v;Ji6#6{==TJTZhE+m3hzOL zv8M^E;R_RIzO~zFwc&WnO<v{wJm-T$OceY0#5+;_fdF>Ut32DGU6B5%*D0vQ8GPs* zF8geHljf77w)x@t8le9>NaptEN~IWP$J_97l8G>WM_zreXd;MO9WQ=EudoWMtQ-;@ z7YC;Q%?3B%LV+5*2DbmtcFW3BD2IE-p#bI+t^SbdS#jB$3kIsR_uQ%JWFk=_7P>~V z)+eBG*D1QG#xh$)DY!Lpfhz8u$>W+WC#S0f05YR@Pjf}%dteGdqqoXk3wZqM!3?|3 zlMGd1+)O00#>t(q50dI}lnckv0YM`SMvmVd;Mvc2#J;pY*GS{IvlS9?EKc3vK&+i* zhmfEDN4y4y#`ti&$EwVA(J~{*CTr|^D;LlziegPQXO*OxOrw{WxgV=q@P7Yc`OH$q zK$N);t*D#D^WfM2wN!F`?<SsWVz`vj0tjEAxlNw~pSmuAX*|VzZBQQFwE(xur>n&4 z<POpC%yf$F?J|zxUs-U-d<SgPu;}E>StJfW{APo9H0v9y{-E4(^U=tLR(SE4YQJ*@ zg4R|^vtesBRHffUI5Lq}Sw`aVspg+%0WfEYSgtwtf2H+;%D&sh>GCD+^820M7WykJ zLwCVGr;K8W^i)zqxSpy^JYR35VY|@9MN@3`AqB}PAT(I$$Q`lw*s3PuUj9f>Kq(Zo zgn%TVqAVPEpPlqY8`k+6QNiwSKN?|4jVwlT96!s!K;J^V&&$=>3JgSgc1>Fi+=K>g z1E$!-iHyyY>;PwA<YMyv4TBMfK?47M8soAXMgyGOFAbWj+Vx@h{oEypA0QCuolT5> z;^8S?=ikEhaCDTRmNgwR%=XHJ=sWq6O8YDC#P9RdCjp{cZugCXs)x){g4pbH8_n@R zF?%92=&9Vd97M%XTC{21(W@1fhFwp;d#v`y1c##bKK{N#Jy8)WkIW@}*TMgBXS(@c zMtYlMC_oL1v2AG$s2SfM7-QR`7lr!j768}{fn&ewo^m?CrP^4UBZV`2W*=0^Aiu2y zsgH09*5u`u$B=p5fWuJ7b;rdV_A0%W-pd@rY$TBi(U#}1zLn74XVlIyJg^TV)@X(n zQd|)tL-NHX^YcEPamR>Gu#*X~1c(pCBd}#u>|mYLEUxiB;y9}dN{5v&-^(XSgaeSp zQVs9mAo-FT8zI>qua-{@+w;ALv=Hmo&ima-c>n}+aXqGRJke4fK;Mw+S3i-0P(LZE zup;lkO}7%L?Pw0akD00q!HjvwguGHXT9V%Pa02V@bFAv|+7;M0%0C7p<Ig@eG`Fqy zO;c4HX8%+zRRlq2f|EX_WwbiJgq!{NHR3c9L~W-8$T`?B)6#|lww0FMROb|(3Rb@G zS&zCv{25A8zyc-Lremhc<yer|$7ZnS{%0isBqDP51LY;e$37KSxl2x=KrlJwUAK<U z{cqk(ykfxR`B3mWqY)S1N~HZQK_+f*G4chnL#B9s_ecdjxV0&-kzAR^C|p3qWaTjz z$Nr#S|57GRM^VJgu<)NQjnWmnweI$><!|n}QEoMwX9_cmt@28<^Crs=l)I-DGS7;I zK%sx!MfjK^3t=k`B=l5G9JC%)|5Csl2Lp&zNzdx?o|;HSYOn3|{eM2@D#Dt1`+{OZ zNE4xKtuC@*b8RBmq@+5vHA(wzU#ALnbd$#NhWhBO9&#y*ux9LEz|t@K!nYPExs<;w zUQV7fHAy-ylM!aQP(cFjLX*V4vv4?f@^~%kIl|2TNA!HcIkJ%Q8lPm-8aEP5mknMo zTH2uo1H}@%mR>jaEevdRhS@J!_}oS{u#ejV2w$0!$-o+))?WKR^;Lmu!JhfcZwgeD z>`FR@OiaY($mFP0DZ?87`^LEf9(TG`%*UtQs!N|Z%#toSr8Vb5JCL^ssS$H7P+A}4 z3;l2gsMGhy(<_q+zo@>)Cct82tnbnCk4Zyl3vsv+x!X&VD`@{OSR2{8tIMwbY*PQN zlRO_nXOh)Nv1cI8-Mb-34H6gK-ctw%#~!|szYw%hnsHO~{A)X=d{<go>30}$xx8Pz zI7&~!H>8YYUAv}ZRKE+I?8cNvDPnm<x9N7iHsBEGkjhqZpjH#30uPnNe-9T-yJ+$S zfJ)-s{7Z%t^QhyELZ3M*8E;Y15z9?GjoBkq#p<O#ux#n}7B};hNY9tm@cv<a_l?5% zQWWqLp_cL$by-7c0VsXG3&p=u-4qEe@-@L7kl<6mT|6xxRg|vMvU>oJlTo9df)Zd! zGNrdrkTV~ILsO;Z@yG-WVhoIeAU;iT-6B$dP8I(?%hvcEJ1wcJ$kS$4)Gh*Yl3<4H zAJ@^9U!i%tqP<0t@XY+KKk3QAq?Gr^iUrIFQ5=ASx%f}u6-5iWz~;M0iz&H((fuMA z0P5*^@SN+d!8{%u4}&E$8=3VgQoyo$s+d+;*QHJo90(r2tN2_OfB#uvmfGm5eWEu0 zize}&Brq1w{8J=~LT3fK;~#JC^IQlpo{I~}+O*m<K$~K0qso`|gPEI(^ibd#CNy<# zk{BH007b3ww%p_Z5H;$#|5DZFUWT|&AGpl4dCAvEfq4txTj#rW7YS*<M*~ogkAnMM z2g@t>!w^viF(DV)$)?)-ISuAdTEuPE?50%W4%7OSg^5HrPqD5JTb>QE=9FJ4;C73v zZ(3(Q0|}1*N3^+&#wVAX%-&3S^Y64MSZJ;9UAMPf_`qo<Gi8BK@)ghFKs){EspYI` z7J&>Pry)_)R|}w?@WtaeYO?$lldLyG&2rzvU~N5Ba9P+ac0pE%B@RvW8YHzr_Ft4X zF@0mo_cgc!|2js=si6|pEV2K^muo-j7raEy&fpjn3-PYk&nN=4#I-YvGTxM%8Vg^e zx(Oxf8rPBK|NchDeUf*Kwp$i;{EW97R=FR0K<PU0!-N(TH*nSXE&r?djV9nKh+-&q z+$0dp=h>TI9PEr;x_}Ydb97!yOP<742PPw<@2QH^+m_E;_0%ooZr&bHCslLBnQAA` zhEg+oA+-z&>nnPQ!c74P!J;0d^3v75M1yT-tz$HGj^~6rw+wl+plm20$Mp}f?d@oA zj<a<kYXdQp9Z$uY$qiyW2IXnmgEgM>Gv#Rka1(>R2Ts?m*9S_=o6Z#KIj1~2SIgS@ z-dPY-Q#$JduWFj?;BzZrPXm-fZVq~H!KXxAlQKazARG|TYc~<KoJyE8^8>BI4<Wvs z0vhjq@0P*~6pbmB0oWco<R@<pnc!=*J_#LVOjfBQ->=s$z%<3KvM!1SikdT{4!*$a z%Go-O{9&bje+`@&B1Pza^Y)C@maF2lIwP<@UjIG$iA@~wr^ZKfD(3miE|)^2w)i{G z#Kib);z_C-=g=iVC1m*#X|yd%?6Le|4NkAYy9G;_xi<M}({t~9X7^D+efbCs73=z1 zaYu;e9lA{|NwL(Prsw$?srS&U-zMY*6771dRVF_+;~?dO-cNn+QKf&}k+Sn<jaYXG z1n!g1RT*}&96RWsk|Ijpj7pz})Dt=0BVD4lut9igM%#b6sO{c?J{leh*>8$%XS9dh z$1K*#>c+BMO{lMuMB=hQz@=QjTgRTNX*0cOE#BP0Mi6{^=rmzG05|$_(MU^m^}F+= zuC(^K3lZMb)VNch49z+a7vBo!O;*+CZZMPcvIx!{@7^+9HfGRzzua!;<48s#Unt=H z{LWb8!#?j8ujBeTQhd|xUu?rkzcvu%iVqZv6<7tp4{0k_sw!S})K8h*_7~Y|C?qq6 z;AEU;Pu|qPT)wuXXA(<^+6!#42_;aj8(+oAbXr6Cn`BeA165Iv4#yN|H${*8OZSCn zpuD=6bme0oO=bkvH6w2AN*}pA-Zxw~%M0QT8STIBpIaK?quNDHIF_~_hih3Q8+d9W z4Mb7D4*%Y3hVH@GS3Mb!*7$o^2DdOJ4ix=a<2vA8Jc?j!{lQgcIN8j>{1pr2Al`hM zlCt+;O~oUm-K(oJO7wSwvhutAF0MlR2||XL7YTe?J(Jr?720Ky9;e>(_fO4=NYunT zd!i)XZ9mBJ)?Tm5!ujq}?>0kzdFOsjceBfQZ9-QOdrlMc2d&M0QYD~>31Il9zguQ{ zpB6KH<d2x%N*4@$r4Z!~O<6ro(lG_@%n+KL`&aOzfm}uhMi8J0@IS70tGj(!lJku0 zqDHL$;pLO}>w9!CaBJ`C*&P=NZQCP=DoEl!+@*c8tWkvcOy2*vS;X8_pR&0gX2yuO zcWa8(V_SwSavaB`<9sW@Vs8d%FV8)vB)i>OZ1mDdG3#s1c$)6V6sC(U2MaHsW={G_ zD+)?7Y30rLL=D_oum4F=XU?Nak^Ek4j=X_)ZPy+@-Apnq{p)8G!1BH^5ji9NepWjS zhAmVZ`RgogEcDWZ)0bwSZmRzMaN?|hp<cF@UtV$8R0M&T60s*})jO$c?D{B&QXC5l zR=@Ieow!&#zP}3vcRKBhijXSAJPj>QA2+c_b^noZHKCL|M(s?#d}4oL+-um|u-M~> z(vw9jYP-qnYS5xdFC8oB6hEScYN<Q9-+blBu`bBcz5wlNWmezvw(VZ<pgj$ho}<Zw zf9u^K!k08d$U7xDa*C-QXur#su$N0;<5n4g42=h3wXxF8msR>PCL#!rQOEWa6wl85 zi$5+YDL0gJ#zBp&hpOW!ZB+A=hccjkoznJS+047S_sF~sje>X9WC(J@qee?_(az`w zsjHvY9Nybu+XkYp<%dSf=M2<GX^xtER9kO3Dz!xlaEiJWLoq@PFPDu_3J5>1;l+E= zr#MjSLcV_m=@S1oJ>=&NX`9&bh*z(e8=&ZtW25l+>-Q;KH+$E1M45t&_F>@ftX%~W z8^NG|Zu*Zo`|k@VI~j*Jgzg(RD~=OZstlKEAqtwdLjr(G<1E33L%KTqXJDGdC2d5k zhQ8xR2%o)+#RE29v8zJLQ>&3m%(H&6M%I$6Rh`>QHF*F}l*sdn<_;8f#Zptu+TrEJ za@``b95MU$9e=aUe!}cC)$n=ec$I#U@-g$#eWAWebp$o?ceB-R+*^16O(udK%BoAf zibals#2|Mc+E!iAyN;}E+hnDBNuNTe-Kq9lgW7hKHsL8ONgck^*F7>g<{#M8!C<gj z$a6*|>cX9M<r5*A;zQN|acncajO&#qJr5&3$P}-=vWU}dnEd||v&PyY=uZO&zgLD~ zLE`+&>xxe?&L@FQY}+xvS-s#%@}|#CmIE8KGM_OS|95Rek|Te0%Z;A_GA%w4f&70n zu^l<N^m@g5P`Fe>`AOSdTFizGV1B6J+OGu;lrI5yjji7gfMOWf`jQE5^OQF#Pfn|* z?PyU(9jx`oJoSbXw=9TX6<o&bR~~Zir#TGUNe3mdw;B*(lWuR@))2nlv4!#lBSWfI zoAwDi^}hccK<Lka>IFmAJc>C+y~^Di_eq>|r__qM=Q*16<V(uES5SCw78?=zbnD<L z7RG=~&U=|_S0TI7{ZP$xEA8Hdc_o>Db2V)-i^Q0ggR#cHIV*nRGAtqLV)*ONhTll> z!pSR4xN#%)4N0x|OQVmr>m<GU3B8Z7;&0)}3ILuTxf$-dS??a9W-fW<Nc<L`OAJS| zwO1izPlJ;*iO`y|{OR}x=sBl*Qx-+cdc899`|K}h9X(XX=QMvgh(An%Ph&I^8n}K+ zUhq2wigu<8)QeX&Ek%lOB8J&gfI004Cy!{$scB<V<}LANzil$}`>6DFy*uO0AQY#~ zvo8O~*q6XV*+%UTDI|NPvL{Kh?`yWGB$a(9k)0UEzJzE&WlMHmDSH~k*cBm+WE;zn zWF4}NWi0=D##C=_ec$)*_j|g>Ip@00b<Xq5823DL-xSV~?uq1>YUhM299L-bCu(oc zC~Qb&Cf#b)U*WEAHAvlU)@i#wpJQWuCEWG->aFOA+HHlwgOYs0yxFlR)VFk1jw?mA zR_WI*yltKatHDguY|?e5qbp~iYa!+)v_&YdkUlCqzU<GBTWCgNh0Wxm&hR8IRZm%L zU#4dUH?m1>ZV$f`Op$JOhQX7oIx)2^+wVOtkV|sGk~fZR&(M#iR-{ULU$hN~<Bd^E z1m77lWgS}3T+v`!SSUpMqPhmntP2z=pYo#Lzi5hjX{OL0$Y<o_viJnQM$}~|+YTcx zop)nzx6m_AoQQ|-zSb=)9C;aP-N71gJTWsekZoHQmS5esPhNCzx9~MK;meE-D#2|W z)~=NeYdV4)dU$5p!sp&(UP*`RGljWhoG0!n1XQF`yzsL!akQIi{p@l`Jeh~3a+QYt zQTJ}~h~NREc9{UJ+>Xrx+^uheSF6y26+N}3Yc=Lw4%eS_vsKM#X$`)aUpKqGI$+pF zKAUe|fJ>XFbTDk5|BT{~^FUm=Ed7n%r517?=7}njI;SjQwFE99feA!jg@LY|y5Czr z6P-kzz{D{Mn&IB|Yp9L14ut8f(oU;qeIzEcVvQ?2yH6GC%Fj?c6pMJ17ni{2%u*YI zC_FL9mrq^sOv2=~sTGFD3Hmle;u1E6ovKId%T>WNjDYR9m(56U@Y7(`^RHtCTlz2N z-Ih$Umo73u&sk@cpV63=Io{7VzVDTWEgfx}X7D<^0Jg8N79k?|@#%7#W`zd1QRh;A z!Ag<>azw2c^9nVyGwG&vy0%ta#ki+e-YqcrzND|D*-V>*=@lhk_2sFgGhFdY)zBy% z%`3BN$LytOr6opZoSIH_vY|`@#QipDH%%YDV?ICqr0Z^6dyR~4aha<^HOamgTo-+0 zBPIEzS#0IIL-cy>lJembOM&7&$r}2m<E#ZZ?#ZHnuBJS7K1P|hKB)oaMez*Fvae!` z3MaWfXiZN{a23coIJ0U$G~M;>i8)b5pMJiq?d|n$tVVPsU4irUHrCA5u%-B<+aKsx z;9}r4Wuf26O3v=Kx`s<C=We>)z4yIs)jlTB^#ht3yYefAwjSqAcuSZ3y&4zX)(&|O z%0EGJFC<VsxYo*K<v8EOg9cCe=z;FCto!6s#|1w>%gHip62Ga%%qsar9f2?bUw`GB z5u_^=j>uYDbrsb<#URkmbK%-ci4xzD$$9~q^Sx{K(m9KQGcQ-mHL3><VS}qOo1IZZ zCsPIm5x4HUMk=vP_jY1nPDX)GF0SCO6mVzI+Koh?ewtYpDyrZYy<Sbr`(<+a{4RHD zt9J1Bp=N0!%4@TFR2OB+%{MaV+gi_STI1;J7#Acibq&AEGyCW#HT|mm>+IG)VF^jj z`A8wDFX*Fb5Be%5L@+q&BByi3o4v&!24L+{iLpiNR403+gg#`AF{SHlF85TOI0|jZ z<r~D^G>*&ug6r5Gxz>zv@2!*YNqgs~Yd)Flklwzeq0nWt8=S<}Ewp*^a9;R|PfM?M z%6qKaDMQx+=y~*)dondi&1}`Yx+<l&{d!&FRK;n%Ywh{;q4NFy*|FgJ&JJoP?4?{# zsM0W4?FP=LXS@DQQ-iT*;#|smo_28$UO(f7+ww>FvUQ9Wn6+1XXk=JthE&G4+Pqh5 zk^0_3wCA~uOi`MtYld5&FMCd5Lfc>udSNK0)xaL@*Wk90x3w`>W|BN`6i<A_9^{fE z65fvRe0~+48F<McaO2fj^@wAIzu(8OtnD}1^SP%3Kj_BqMAQg`6%?d?US09;y})H^ zUb^L$qd}*X@wBSPpzm$|Hq3l%Sm<p`YORWE@5q8?O>EwyktuVxxNLc^oU%tdX*QiR zxxPN_uW#rYM$1hnB%dV%zm`tj0C!3}m0fkaf(@W;sS?0dQ~AsWqMl1+Ue+pjnCmV` zJNW#e)AibPEXAwbyHX19CMKDg;hu?2{&|N*@D1o|WMP-zR87kpvEc%Z#{F4)P|rT! z$Q|FFiiy;x(tTf2(Q^BSuD`y<q(RxodM3L8w7oG7`&1*4TKw(fV`1h3XBb*gA(3Qf z@0{dkI6b49(#VzP+1uY&6pPwX4O1sudg$6;ZlXT_*8CRA%BZugPvbKqDn6-@2|b|T z4yAtLe*`okiN|m}x0<U)7~LvSZtIh2Yjw##vHc)ZAM4DR&^yI&nN|Af+$+_H(r@n% zOTg^}1LQl7nYmXwMt(cWz_r*`ss%m@+epUABzvP`-hbjO&(}IpwrMn|*@lLJy(@L~ zCj=f9@D=xU!%CZ`Y6p{a9g3%NSqvEk=D6RC-7}wuF2D4r6?;-`IOu9@YQ>zqP*IqJ zvnx_(bE;9}I2t};%OPa;HSeL^ly!=k)yt{P^5*8#YmDaPmRf@}UnCK3;8TCbiyQai zpyuIRdE78TNc{fYyw#d`@nWVC*C(kDhK&augWAx~CNNNRblT%Z$GEYZgQG@iJ(Z%g z^LA4SNp6O1CrT3rg>bdFJguV(692qu`s^uPJlWqrQ^YI>$<~u#`?~aPu1~^A-aFO% zYfEm{J2j5mT7?0%@$=8^#BrORJT%}^7|QXBtVBdNB&Obz`KrX5y;F(!l=aCtd3X6n zO1$W{n<TU>KOqlcnEkCNYE_Q;bWMSIw$jNEPTE@cJ3JxV92_5?k4&9Sq(|1G<K%k3 zAMqO3Wi@%k*Kxue6VUD8$Ld?yB*x@o9$=-?>0?+fXEGh8bN>NNWTAIb;mF&MeP`t? zZr!qBW5DHEM{F6D)#+C3F5C?4+%<EVGac>WrQbh$#$mI%vC(+2XZF(7Fx=LxP;Ynd z>Qx5nSBGEq-0fh-Pj^p`eKU3LNK(_1IWL_fo*a)6d630^P_SnAXm$^W#;bR0gVS>q zB?|dxeaRB88Bv#sXyk=;MAaF2yy=ryzrco`2b?=I*HvM$`cY_BiBKGc$6PjxhSOD@ zH@xDNhPYFapA^NJsFOcG{1in)-dah^HiY;--9sAKZt7CHBF5#Gyu{nHCA%}mx?34? zpOumdzAG2PKF3SWQy#x_iC5FUpNSVe+@Y1M$H1F*LpM$H4t*p0zK$dJPX=|zYQ0kS zXZ?p$_MYh(f3hfTg=~Se&hvMz%*(`IUsK!SH@8^|k>~dKawJtXv1r1fmYwQ&SYmAS z${TtTUh`@HSWoEGgp4QMjoE?y(*iqB4cpX9qn4#^F@Z!(kqUJ(b*1|{mRCkexrfCi z+gjKs>c}N4KU68-PmdLR?z;ir#fbY@g=awmm>-`zq70b?u>CU2n=K+a<vp&|cb+Wq z>Q1tLqQ%<f;U4e|-{PJ(AAK3)g<hYf@;YX-m0gX-IXe}zzo;5+o5V^4+>lH-B2`+V zptiJeG5B7)u^3-dp!qi!s=zI2U6~WUJ-eq5%OoG0F=vqVtQ0w4kiA=zn0`n7(1T@} zawnEf?~qcrdYC)>T&+<MG-fwtnR9jWGtXg}w-MJ~`tdg_*_K{)9vJu2A91th?v=&v zO6_XMw+Ym)LNbsK_o-~RT`2d+S9Un#FmRjQ-cWOgp*7`Qhe*aw_7s1L5j|s9;O(pH zVaH-mAE_KdM#R-v7d<=gTlmDE@iG&y&dX~ZZD{)jimRU{wr_Xza#Ei$jxB%+=S|qR zhWx`$i@363bWTW|Hv9NQNs4yG*X7oDeq#w<1x^Kpk>#t4s=IUC8J8Rjj<y@eW+iAD zmwa!|9&vW^e%=<V#j9I2yvmQMd54?qOqqRHLA#&Xytl-T^Kwgm+%nU-Sg`KXNyY5= zgwlUjQJC#JJ9m$uzLi&A0cU1a#>C^kX$RbAerSXI`1Lzr$|3efwzGYA$y?3+zLV`K zNevN~lR{4?lsZ0D<n{L3xVv%wg*^@V%OPvWjh(j!XJ`r+^VyL9G%@w%8>)DolF>K$ zoC6la&A!}|fBlV3kK0&LHDYIDwy1Uo<>=~Mhy!AexGzpbI_OgcynN-*SNMDl(RGBw ztp%NKxSFf05*<`pmTy#QzlzS}+f+IwwNSFDo2N%POz-ElIs+a}n^L{=2X`Hu{gi24 zjjB)cvT-p(U=!GHt(CU7;2jSN+`Y3<Oa~SU2g*G$t=@r~c1j_n)JeKU&sjDf=WFKa z6&O{kjn8+~eG{1Q{VJXz^p-}4OK`)i!tjkv=@kqG6G!wvemw8u3k+WSwJ>l$NVs_J zTDoHJmLXUJIq^6SyD(Vpf{W+heXhl)dP5;Q_Qrnu&u8>&hP*FPQZ6ong_3BpSuYQk zdSZ-RJWqb(OEwX&xB-^e#QzKZ_-F;}48tW`?t(7!9}JvlDhvB?M7sto-S>)-{n5K; z1oz6m!7_rMhW68;C!k?q<s;N&0-t{2m5k8!(0;fIA;%Eh6XS#FW7&(Sf8NuUzy~wy z3JnEoBoZ{p!rd{bQlqjq#>WQY7549A5@Of0jvqfheO%qs8RW;6?LskY)c2B;E*}?q z*%$(cj0>>Wbm&A>BtCmhnW2-l)$&eH^gvMY&=vG|a{X>eh};+ZZ=W1qu*K~N$6q^B zgVF3e+RaJ{)=E_*bB$RlojQB;Ky**{4yRqWtjv*ac7o@W>yxGT)!a-6z-+t3{>#IC zre1a)01`y;?c~I)`xBF6=WtGXTm?H9B|m+=gLlX^c(=kvMDJP_AL?hFH!qs<O?g#H z3RYKzY_)i|u2o`(pQx;3s)cs@SKh~`?#HjjPshn3Xwa7%bL-e4y=dg@U~kHXsE7id zY$zEE?ylfEaiCF_vz+OiWWFfdG#-)MZYOAtK9OmO#Q2_lcmCa~Y4`r)?7*Q&N8`KE zdfl_8>&s$w{chkx;nFH<{1yNlH>Kt#m@f_Z>x6TUhwLnzT;Nx20*e|$=<dETtI0!A zg)7Ak^Gyv!+QbNamtg>opbuj&6N>6=r-fdQY>I!_{kYpeddm+uAQ{p#6TbP+p~qAa zsWeOH^Zbm^%Zhl%$@?*8H4h}1Q>VKFcL#QhRz>yzmeQ9t)Q&RHhS;>cd$WrUGJIc6 zOAwVQ<yAbmskR|>vBbxqVpspmdXlCpp(WSXdClvupJ?FlUXC8xolJK5evJuas5^Ro zg87=R%CW<U0~0&vnLb{XpvSL!uNZ0>J&`wLu72#Wzqb2!w9I*~ar_1W92Pl#Sq#un zrSIKeO?I;;8bs6x=ORLEh#cXxo5Ov`*HGTQeb{!#!&3AK06<hv*a(_$&H6MHOS)a? z=!>-BBoL)rzVO?piE%8ma_#6_wP6xwz&B5k>`S(v?xx+r#@;M)_o}KX#7&zoc$Nso zs@R1{FHOsS!}U8+3D!1oB8Le&$!=!*Ntzb%9b#_w{pOV@l$DvGhzFdc=b6y((lkCM zVP<}0{jALm742ZWUG?PE)-|ZL>Gl48tY1`upoO_9-b|y`s$W`EBh=vg_1b7&l-9Ec zgla{EZ`54hzY<2@OPh9}rgGF&#gagB)~B`ab!n4OgESU|lct?Iz88Pv3HatwqsKk^ zj_<Ym%&Uj$bXf55PaY&MQRk+MJ`&ntWmumH^gjgFu?3e(#Y<lERRx(WipeL9B!Ukj z#gE`ORZ#p2ZsX2ccA(~hOQ(_7_>|^nfVHbZNymgIX5F$!gp^z7j;zl-Kv3_owAk{R ze-Uc83>9;9s(VN#*9#U{hqwmCFUcEUbw8Hj7$B^EOqZCk>msjtd$>n9{pAI&V9OQZ zy@aY<;M3x!X&SCjm)b*q;;o+#?_IEJmo}UovSlC8MSXjQ=-N0)tX>M-BeQa3+mdW; zX)}oFe$n%Tgl09+->8|?EC?%~&aTrBxuVI5uQ39O1ydRFaui%IN2W;x?N=oBQvUNs zYoqDebHrlLqdNVjvR!<E5ng4y=4;=~Lg`i2((3g0b}|@!X4;yt@>G+=$!zG@_r2xu zA<1tvHq4~@VuU)%gqzu1h>^*ft@>*uE)7z~MUR4*h(_i0SV5aB3ejIaU>+I<7wzpR zP#5-{7j2s0b6CxJI-0DeazA0!eTWG~($W$38Qo(Q)B}gVpS<(-6`}E&%Kfn}wsu7g zAGo>IpROGuY+?X;OAn?ozM6G5e8}$W3Stu9e74sHnb1ocH=F1rMtg3~%+={<5i`aK z84mkLR#9<<b47zoY2q@mnGca*Svw}VLtNpLJJep_3v~ESIEP)`FgrVKc`UfMhHd@e zp1PrfiA&;@gKa{j^0CLiXZo;f?_G?MZ|Qc=dtP~zb0>MRWi7Y}Ec-uIjJpGFctJHn zAlb3c%br}by^j?#>Azg@4@)oG0Y!rh1_Yan&xxkvc0IdPUOm%{DwZD}w(V`>@zs#? zM$IROhrZ0scG1-*zGr@azI3nQad<2(5cY^tIDX-X_Hnei3t5fNX&=JND#ZQn+LGz! zn^#Z#^gmL0UH89mIP$BCApZ697$ZDEFzs~(Gy8rUzkb3VBZ{iX*rMB}(OFUx*J|tZ zQwl{66RvtFWp4^>9(Ag7Tx#qIJ&9nZ-Tb|V5d5=K=!}6NI`4%@jc(RH^S!+vf*x^H z`|%(3VQ-@3-)9_^Tfuy=8vj~qfgGszyYu3xr5^j&58}dm2|o<*q8pi*DZpJxG;&AR zbGi0TAcgd7z4L(h1x;{klaH59-NQ3Uh>Y(R_?N{)GI<FuZ(luf*?3l`ucdBGcxAV^ zI&W5^w|w_#cc=ZLdtIJA-@#)KRG3$mz;zxZT;T&&;7dXXa|(@XXJrWxUgU&$^jrIK zUL*?X%mn?oo;l7;h77woFi^km5_LUgK32<j?4SylTtEIvYvqPrs&+m*j@!oI(^?YK zMuA@_-;O<Ku&+Eds(ZL&_}bJ2{s|XC>I+s>q%pkm=1%bOv=c`n3BR#|q=R|Q(f0T5 z_OGdq<|P$L>~%NxpjWZ+*h0g-yI!LyK}^@BVJc(w0)XY%VPu<RgHF@hEF!ol^+CrY z{AsRB7OnOxs1-k~>=|QCQk3aFe@}Vud_pS|ibl_9b5=1wTO^)}x81yGD_!af#gi>R zi=6))GTa)-eeA(#>K$+@J$|0bDIGyHGdPvm3*<F>o2fv&d3-kt)9hYu&)usfuc~yl zUWxi~^|)sy2nPJ~3X7)sxW4y1QVeJ0MF&wG60h~O7|o;UJGS?v%Y6^_jM$$yPAwid z85+bC)~mXFQGwXhn{hYn{{iQ+>)j7|=@%Z|m}wF`B%bQgvJ|A>B?nW<NWj;9=z;E8 z%g|R%=tDpA#TaC#<~zQ`q;!(~5UhDqrzdVdb*Vp&oJ8>8wrSV3V{G+%SL$iKNRhb3 z?PJdtU*%-V5if#5%U9?_;=`ifFSO{rX!!oXS_Y)r`xjxfOMZz?0rl72nZ$nW&h(e9 zlzwcNB=WCqkS^Xgd938{j)N|2VdsJLJlj#&J`68eEB2{MdA40(P}l9VVrQFJmKJ1D z#bGpO9xeDcx_>PVoUd*>g}#B@Ct^6M*}%~Ij}q7E$@kfu<IoX=&#d7E&f{!l+*b3| z)R|6~YTms43hx?g38h!(G>=ho3&?Do^cW2=u-a-mls0{?GV0JdTA%BSFKiy?_rH?N zM^vRe+i>@Dr2qVRXNg&jJcRpf<Ud<vU8xl^_Wb%hqwVMYbJX%`b#6+k6(hXstUMML z!uZgL@J|kxlXK?N5Af0_H~VV}zf+D|=Bk5)^}D+LrBT1Sq~z@E0(CbQ5f=is8(@nl zVd5x49P#^I;qCa&;zx1fC_x-0iK7&8l-?U9h<p-6J_#b91d&gI$R|PMlOXa*5cwpC zd=f-HNg|&lkx!DyCrRX!B=SiT`6P*al0-g9BA+CYPm0JVMdXtr@<|c-q=<Y{L_R4Z zpA?Z#ipVEL<dY`yNfY^`iG0#TK4~JKG?7o5$R|zYlP2;>@9~KW?eU2U?eU2U?eU2U z?eU2U?eU2U?eU2U?eU2U?eU2U?eU2U5&49Pe8NONVIrR}kx!V&CrsoMCh`dr`Gkpl z!bCn1BA*D6PlU)PLgW)6@`(`nM2LJML_QHBp9qmpl*lJa<P#<Gi4yrliF~3&K2ai{ zD3MQ;$R|qV6C?785&6W3d}2gCF(RKBkxz`sCr0EGBl3w6`H0UCQR4GMRGh$PDyZye zZGB7G#mg9<Ph47DKtxhp99#raV!{GaQqqzVVy0ljH?VJ;GZgIjhJS7ds<^qh{vQZU zuqmA7{}BVWlf&;hCoH~qss(RYySsR}Sy{USlQ^LY!5c16{8n*7f;w(?PX7m;j<>6| z;5D#woPq-W1p~ju9bPVRtGoaC#Z*{AN?ht+yUL-eQ_NkyUW^|`&uUM3L)<@59N2|K zl6qR;EMLohzghYEq3{;Rt6UpPD0BY+d7wX<LS(+;RqQ+SxD%;&U&MS86isa5@a~jO zsGqik2ku&z><)gj>o4;+{T4onR@iRNxnrP#%R6sdtFRN<s1xthLOZ5pG$|s#we6C& zvo1wF-iY2=?oJEX5nGk)pR^n)vm0c8;c)^B&&G`52^MR2z+Z+F<~u7wf{m%OyKDhF z*y+F>u_){9s)RHJE$a^&m$e6)$I&){#%+^!0pl)%>(UdFJJ|Jg=>iw|g~j&1<WGI& z=mk4}oQv<y>pqs+t$v)mrpqp7BW2BZ^3Cpd2L+e3-M+@o-E|b?qW2q~N4|zAiuE@0 z-LcNV?Fq~0;n_Pb7%q<U{;4lo*ght0&q<sr*<Kr{N$p`1#ICn3O3AaeW%qY>*RM2B zEWWq@=MH;($pBxi0j+Oak6P!(@)yIlnnT!Fu?gJm$mOM{BW0GR<zh$Gv>F`|9W^I? zQo<`w!qDThD<%EU=epzROg)Wbtc`A~@fgR*@l$0^dK;AAIm?{6Z0}HVb&l$z=i%qy z>}=RYxQ*$J?_g09ZzsKz7zU-rZ5(dAxbKwQMN?qx<8fxB+q$#tG)^p&)1XYoB2tMt zCtt#%T+W#}%c%~v^L{its?WoutBLo0)2u`^)rny1vPGlQvid@mQGM+++z}lfRq=Oh zn0W@g`0YMAj{hTLu_m0sY4AeEBH_->G&eYjgZgDSYT0>QeBip6FaTMjyP6WqP4sV} zkrc^&*@Z1NnM&e<9#w_7R)vWh&9ha4w&Ta_97HhtomgZ|P|qE4k0d&hXM;-Ry>G** z`(v>m%dY0`^F%Wa%4o9|w<)|X5FH58^uCSQl0yZR$^;dA7d7_uGW$1G^(@+3t6IV% z^<~!zYzM!V0>Mp^nF%sxm@^O6ECeLX3cm3tc6n6I4?Zf>Or7;IEdyhRgxOlv>m!#W zOfbpu{Y{rV-lAR|p{{dW9jP?7YnJG+ZR|N1lj4;8nnqt%Aw4n%D`VnxD0AVRL}tMy zBYiP4%xtl^@byxWN}7J_3xo3fAj{RWw&SN{Uth)Yci4{i3)t|L6ebqj=WX^*><d-1 zC}GUgjdZxl%+s@2S&;v|tg)=%lA+;Pb(FVI528wsg`8I?s(Ys_{&kjGg?Exk&qZC1 z<wfnDhrC&Lj+<9~(COvmAHOkg9!mKHQ68WlL1&~)hE$4x$WYKLl5;BCQsM_vFpz5e zFp^Gjs8aBAx@oF&;vYg-Ln$&$BOp=)1kw4^!A<a|bE_7Pox!7iIMPGtIN_lbU?73g zoeZK;4n;EH2YhmZ1_9N=firvLM2@}C(D*$B7+mR2{`hGR-v>SXlLHk-5%f25d}Ydm zLG5;yVXzakLBmXXUdG}s4khP6?~LktPYHt2K0wIhO>u*-(QJ?@@F$&nBc8~#vR{pR zEh=7wdu{8*(>Iy!1`Dx6LvON6zg-sW>x!~8e%)wS6DaZ2b!}lIHB<$zA*HO*KySnl zg?#E7;Yq1(dr3+e5vo%BA3OOJ#~1}a!L16TRJQ<81Q<=1z)w3OlnZ`}CBw9VMCziH zD)A?7ygS@B!8J5~&&@qXhaqGG210rmC3!!A{O?gf6Ug?94xnj}N<SsfGep%r{Xw2- z`osQ%T%&<R<~K0_U7uC(0S?-B)}zjuimxiCf~LQuxIs3eWlbmLev6>X!xm{;T*0&a zlS^#_$#2=C3+CnHYe)R6M80+%494uljnKy{Z4FoNBEHZfm9|J^BF-yo5C%n!Eqa5W zMn&>Pb=&*34l)nUgNLAjI~15Nv~_!kJ?BpcKfw<H`_NOX<552x5Y~6>8QeSgAw6V$ zACxXIG@dX7(R_(UG6V*BF2dT?_Q;7Gd!bzLJp>qnLe_u$w1-E$$oj=0umfTF3pu_r zdLu$Drrp<nJjB-uiVP<0r5R}}`_@O(T>dm~C*P&5(1ZO2?$E-<$HmH(6VVQh`HnTU z0dtG7)>=>P3qqEs{me#Z+y~LE^?eg2X=?=v3(Go!Ar1@v3bot*3Pq-~MQIBiY~w;j z6`$P}Cvq%5EzHY$>2HEl2O2RAu1Wkr4hB+<A4bs6Z3_Nrn5OzP{vm|*ANCB>O>pHA zLie0M9oz(eI`=kscH>b$9O)q|T=0KDYghI`9|r`{e2PXs#SftRO?o3R2yBCA_Z~U- zc3qd$XW<2KgOAL&DzWX_ZIel({_b1h9I|VZEo8S+^f`-KnmW<D*e0=qo`om%yK-D^ zD=n{{xne}`cJzW|0G#Op?828@f{8P1zPNZeM}==MVn1bu?qfQm{gj#29Gvij49dPr zcP#`jQWV?`MV`eEWL;*DAu@+gh3Y9O+a5U;F~6TOcn<-994IOV<vapV)tBH8#oi^W z%ivIgGyOmS;9cAQGU7A-z^~mUE6(`E;oTJ)&!lPV-4)>}_#C;ENr^EN3!b>Zg{rny zZhLqdUS+F_V4|KHy})Q>CYAvlmA+kMdk6rGv|Y=j<lh7G3!dnjCxoSk5FD3=&rGkR zew51Y9!$9Nv5b4knf<)D;mV}>&a~F<)^ej5^=$i!o9<Cfck!5LeU?6srjf)!0efLt z??Za#^BS28&pQ*_=52VHwGyP#NS)+NCorysS-!)8lkF-wjHVrv@X5dplU6OCqMh=y zq=RUjZ?xMBZNH)kzuKjyWi8=>^D4OEwgWk)S2x=x6L{ontIN0huD)x(UvAl5*4oxN znpRpk?sgD0IqtIHKa!AE8fZTKP{9iKQIKV4ahC5*bJ!idC5ya7ry{v<sBitm*68xa z7mwCTOkus_Oo8)Skw_s-wn@U^{lH}oWhUl)j2owFPDbHH{@Wy`f)~!Z%g!^RI(U7Z zTSJj{7rk?D?5p!6ElF{Dbs`37E%d54S6G>+oC;Ds*9dQSw=`e7aZf(m^T0{yiFj*! z21=wg`^=evfxh96WQSFLisXAv@~z5>Ndcx;$L}KB9&0=wn@U|4njb%?UQQXq?<C7I ztfzW(aMKk!Dc6stVj1>kX{tE#5>nVxKb=k|L#vzB*yVJx`slhVRIAP6eLao(S}X>t z&%iR={lvYY%PG6WpNo%W*oqC?*v9$YHmo^*U`n8r>@t;{CzGss|JV^W1m>OaoYlSN z`I3Uhn~3Ag!`5#|t%t{6BOGH8mxIjuEcvKpJrg|G<{W~X=Vw|cl1E<;=9XHT@OaG? zo*t2y|K4vJZ&&Qj4hXxOrs3rjruVv{f*qku+Mi~h_P<6vn|kF-$};>$m)1MHdHyCt z%gSLn&jiPwMxD{uh_7GNm@_n2`V)^t&EJ{`A#sKBFrHq8)LZ1S&CuO4FXu(P3b>5* z(6WBn%qvx?NiL8xPCj*~2rLwdXnWgl=M~aCFJiP|k=L%aR<)pF2$XgrbZK?1u0AT8 z$v{^6j(C={Q9AXgWO~3#pUhqgjda%b3u&PM(qAmgbXWQo9vC|?JMUdOW0~o(R%Nhy z&30H`(EBB~JoE5r2zmF=_kQ_=9y%kK{;f3NVd7)AF@kk2%Y3Eo9d;L0vKyA~953dF z&!>XwxC#(S)xv<Yqx;(GQI_GB-0=Io!{T(s-Q04XopvWa(SSrHGo0O(i03-9mkB>u z{^PMGXS6B=P;8U+G)*8~w4VGaBiJBiKfk@Q@rF=C<zVZh4CfOPl@1q6^5OFxJ-*Lu zhf^f;*bWvTmMf_Tug*Gm_j{gr;Q=#?0pAcAPRYZAWCiu)KZ0nD6Rm2q^Cs2ds^I^8 zpEK}z38m>m`Sja)Y$5<(rE{B!4dHNmNvgh57T5r%Ly))&01o8hA<tnLsse<&IJ=q= zY*J@X5@dD=ufsF8hg0?r>ygo5kB_~U)f%^GJ_~v(Y}zSIkrM8d?E#}+jR)0xvb^pV zDnN8A(5}Wds=-hNeiw`9uMW!S)OV`Ea!2-I5#2UD`2Q=h)352A2oLS?|2y#<^PGd_ zyl*9+f#slPgSY2(s>$bIgXAoDvj{a67UA$k#;R7f-TGNE+H`q<8aM0_un@L6tj9`y z95?*Rhqiy=YD+G_<mlYHyFDM9?^725i;PnT273jITEsmh2wsi4Lir=O)PWo~++9N} zibZHr&;oOJ>OEH6u(mjRF<Rb9W5M)PF=zimnJ!+K)~v|6{)N=swV-Wh+_I2mt*=qM zWn;jaPCH20_v*69Dq{BBE*BOtTXmWli^vh7*$<dj*#J|!p1eh^?{jsRNit~J5(#eD zbA`F7{6S<t^-@;k%4$HUyV+8ctQs~N_NW-veu0&8b$Hw8{l>ExxWqB9wGRU=-)H2P z%sdVJ<O9nj=hN2sP2Q~Q4l`~u++FvP?7N125xz5&@4$guFaq0eXLe5ri)p=c;9)n1 zzLZO0<qo#%b5yXe-mFAJ+lHX9s_w^k-WUoni%=BYJEWY)xeuAa8G^L`zyX)M1(6cF zMQ22PJXBBRK)Q;`fsCHVO19#+ATq#=0*L&3hZMsJC_DlJwFRgXdqln}2ZH{C_(jwt z&Z;#ATRHsV2Chrnt2)AJv*tx-b97q60ODJKhp9Yuw*J+2^N#Mdm&QX)-ILcHt3-P0 z9=<w=dbMlpRq#ewbXD6&kSX43CdAV{H_3P+br#z?t+3YZ9?<pq_>1dPn$Jcco9mew zZt}GoMy-CbyNFtmG!;2kwBP%L94qBn=oQ<PC=%AI&7r;1&yWE!2VA9C8I1^@LsPCY zr{M(8G2|EsJkQE#kYlA7-YuNrLGT38{G_17<XA!e>LHM0cP^6VonLw$wf!ViFYr`G z4?E=)lKqnHsyc(w_LCrB3hp8NNGh{JFyW)pRS1!nY!{-*T&JQ>!8f@m!RP6U;X4<V z^Ugm-&P0<z@#Zyk1_MAs^9Q$C_jQ)xE=?AHY7uLP%v*DB{7f9U_}K1cfAoCh1xtM_ zr{N9H-L4A5z&e?32=bmQ>uFv3QZVhu3G4KM)zB$B>>a8&KhDrza9}r->E@Qh=!||H z9H>bu66iC*P~>yMLDuD81NNl(3m6bY00N2vaA20hAW|Qh?%JmP1mX$Ex)jVQGQ@u! znSks!74rZn@sUZ{w*7wr6BYcFP0S2o{YJ$J-#e6`AamWG<o_}AjRL#)sI><;?Q%a~ zcWmfQ+-%93T2y&f%*NWY?5soYv57th?=4)uJ>9R>ayW6jj43OeOEUP%-23mxH9OMW zK006TsCyA6o76ku^X)--W9(pb;E@*`sK&#pzR#3x!+0aGLi@YquW%MO;4OD;X|*W| zfQ5|^qs(_j2}-L?H)nY;<4+WbsSM{O(<7khFn`3%TOPbCe}x1}p^bNDf+X-?Nq_}7 zmEhsLp??yr35C@i{2K}{4WNquio)Gu4C=kbNP%rRO^1omq%(@q<UsKxDZ;fRf^E|r z?;@W&l6Lu*P?CYbP!JgLmp~;DNLsHjK$Zytl^sebRY5R5kfLCZm7`KiLdimtz)0E! z0yD(-g7JYtG$17iAQ^r98r|KMw^{#ayO>i@@LOVFv_{0O+x0MvURU`b+ZTk{c=I6J zS7*EG-YmZ>YRrQ5-p!tshV2@I_mL$j6#Rpf$a>F{a7P|x1cq$XLYCgBj4{JnmPDri zYG^!0)pp=&5Dl;ld!8(I<WVI51Jwq=gI6K=7;6GJJ%oS)V6rJdhjQW}ZS$;rk@cIE zm;?;Le?{T_!=9wB#dw8yp%7M}5TA=E!daHypp5Z9x%OC1yFo!fEC?rs{v`NW>EKl| zqBNq2e^m+!wiv+IO_2T{e|ZXo<#!Q;{!KrRBKD{A&Sl&7I}dEr#t(NXH1lSNH}hut zM`^3#SaL$K(pTx{+>=kDCZ)LH-=r?UI|+fY$me^(nIMR)mnA0xABb^JW-!_d{uKxq z@BU!>S0Jg(M`B9gBz4$Jhi9QI*kk&c5(;$H1D15FRCo1q>Gmet3F-D%wW$NvJM!OR zuBYxpi-+5_n<Z&|vzIA%Z-rw|U{3oi+>(^cgC-8s84XZp#0^7aZb^pfd8*iUIzw1W zn3eeuobVE6#qha%$W~{Hg1G}oPGGq$Nv7wyZ|d<MC~L`3?A(Dmd<+3h0{wtT;lU7A zVDa@-v9OlxgMR$YN=yQV;=iKs{@aoe8iGQ+&~z1`5ac3?K)qom<wN{87lAd&0Tcwp z;=_Y}5&WnWJ9n>+D2*uMUzLJ_^M6VI-H#cd4*FfhUjIzGh5z^d1OY9e1wW+!|8<?v zKhQ>?_2)StbgJTo)m|t5Ke`^&yFE>ZS<6v@qtl|0mFHR0t-e9koA1vBo^vmWxyxEp z>jFO8q`iH0#WYP}@bzqtsKMni(v0O7Bp#)xEh+P8s>rQ|j3ORpK@lGr0gg(_;)X4$ z?WTPS==O(-vlIUQsL1`BI@u0yk-S4xcBm1W3g_C8yvI~sY;K$=6#-?wugdUnlZbgv zrr;w4i>mL33$|e<5m-VDy%8r<rtgO^3)%{bf<I9B82PU!i<JccD$Mqe7$|K8-5e)V zx(dNbhv8((_*arWXC@$k|3Oe0ZbGK_R}_#2#NPcY3KXOW3MvK#VIMz49<0Ep1PSmZ zh61`NP;~#VqJN7y31TSzRrD_usEck`MSzsps^3tgPzr*RY_DrUGywzh+p_D{+VbLl z=w#VW_O-TtM2#;3BRHnlXRei(+nK%mkL(=OxL~JRiz|gqeE;gO*yn8l`Eg8&j~ODY z9GxpWWP})IhsKpo!bs1C7r@+k(wA<U*4{IAt@TZshdI7YD#Cuc#|3wkQf|Aq4_XW+ zNtvUN&W$8e{a`MWTHSWQHHb!nCBwRr-bjKaJp@?F$0*J*(;(~rK$VP9U?f<A@G%2; zF!_`P0R_O|SCMO|Cv#L?$ynjE?Qd3M5-?c&6@~YgkAatMyh6NCMRK4J<l-lYK)kTJ z6sTS<1H)ar<YKPDi-rwMBt$2yd^c?#zxNC?c`n8HV6{W*N4=f-4AlU(^7x?h_Ylo< zXD5B7hj#*CR+@2Z7}#y2k+wOhxZ7GaU8W98E%Gy^&I0U_umtbQGXpL)m2FQ`kY@)d z3!btfGj8#~FMBHcw$O}TD`7O^md(&D*(Vb_7pm8C)i!P}2<)nuQGJW2__C*B_#db| z08W^L;A3<N;B*xN3V>;*03AxhlQi#E?F*~lti&W>2>vSy@2|c^?s^8V5HFO36)42# zB8o^&W;AG#PFHceYRf$ts^>;C^*EW)s6{#>F4?@BQ<|svsk<_tG&%HQ2W7$6WaMT1 zz=8x0IL~CCt4<LNs$GN&|LkChvDo#e9x^{)Xf}rMykKA!dLjDxp$|Q`Yp9c-8zpxJ zopDgk(ATw9Ft?%!)_&Wf>T__x7yHl`4ZD_67~xyHUO^*2_kbiJ+(5A5wKVpA4oqjR zUEk}~O-lYF8n&+t6v+vLGUCC0*K4ms;~#Ltb<U-S5QdEGn<T6{=Q2#+GZ>sbid1^f zV01PfdE<2u4PhVz=NUkV3>xoAWnLO6Yv7{@!6@Bx!Pz&9reFRy7l;HzbvN+o_Cx>3 zYWkj3>Nlc)Wi7l(dF}|+RQjKkX5B!a0YO+FG}aLYjd6@-f9iNzB4-ijLs9E*Qc@4| z*ZI(I9ovbnOqKT>tbX?(;Zs?g8`HwX;FjCaHulqS5?kYToQBKV@}!?j^`vac%r`5u z*0ahQdh|vm2a!tn;Q>-055jWmNCtNv1;63`DGvN_!M5eBA~_fmbjjlLNuiH*L*w&L z!fzc(4<QWrU`)xuIwHeU-5?r3^b{XO2=+9*V9}E6AoE8q5DAEi3F#oLe`HP2h5SzR zudHonNj3CHWIp^?{!`sPpby9-=u?rpXd4z1sz(@tXvR1)<XKJ?3*_yGzRizERuYb* z$gvV5<=MSM5saii9*4KtQx@zUB&-5?+;IG1u17WMYRI4Av3I05T9=0Q?j3#5D!>?E z$R7-x1P8Xl3cPD;2JhOM!TYT!@UD$j!!}L!Xk8a~RaTP5`W9yblFfM*W*YyvDH;(v zXX=7lW$#%+^L%uO8hw}-h<2mvKKh)u<Hf^~{I2ANOpQaC+Ea}4{!iTdc}5*fYWMY= z5P)&ed}-Hro#tRLqB)r{!9gk`6%iUAa?ut>N5aCQs@$e@3eKXcNKXC)=|)G%Pfm}l z2Nu}~viJ~+snI`B(h;Ga<n(p;7y_6K>WW9<!6dA}f(W^2Asx{Nh5lwGCILh7Ur~6! zYy^acpb#%KJp?EOxricAtg57KO8?D8V14HR3IbyB;X%I$epKp7{-lm5jVR(@m4brL z{gVE>A4798=%)xTP4)80sGYZiZ_12IzqfgnH7;(X52~O&dXnwi?;DCIsw98SkQI=O z(Wv@z$UCra*}LUq%;{j;BFTGwbLCE6y-p`)+>-`HS8GHHjJG|v+|u&d-XygJceJ^i znMHl}{q#I<VvUzJ;rJ@<dUDKUwnU4`+rD?cZ}f%&`t-{fGKck);e(e$;|oG<%j4*V zow!Nc2$l#>WAJBA936%b1OCk6R)rZ;);sfozsLTI!p9&Az+Wnt0gAHgkC-WEKF)q8 zZbfo}lN05{t^BVfdrnnAVEYFFv^<XD++R^8aS&GfE#JzXb#n!s@xk2A`{rw}S<kZ< zEDj)Qyb*5{5{;`)DO@=%DR`T;nwNUMbj{eV08Cw`xNX>!3bt7*=b4;_w^}QPyCove zCQxD~M1oW*uGq%4h3Zutnz|;yXfz>`p(_A>9kzvH-4g50CXleU{ufmMz-9vbq(F=w z0USg_K;gmZcsjuZ%6zwt=TW~~_mY5IWPe8iKi2JdT?RoR5PAT5CV>*4izs64@X`9z z1_mSEbD8pC7vMR?p?U`&+G<(SV|dS{$2FYn*EUe~J*Z)uT^xZue6%aI;Ur4iK$$P> z0u;o|@t(^7F~IVB3<I!``4V_23w}d^1QGMR=Ys!*GHnjFt&Q5(6~IcK-sr&+G2eHG zqrYgJ170|;2sbA<Ly(nw0h!w}G|D&+7K*YNOZ>$6r)v^m{(1&Ku|9dTM<v6foU*kZ z3O)jv1k>DCX6NMudkjLGiIdvW#`sSGoQ^z72?Mj~U}7K4V@qQiYmk+)`paO#9(I*5 zwO%IgD0H1Ndbr{_En_~yU9<!Q=iDi_Is#a`_E^7J8t=`=cU2BXaS`U|QIi>|Zv9hN z5plF&{#;o3ZC13e$N@>TXREM$e_*+1W%5W1P5v!-HB3;$eQ|fGFK~U?JkYyX6qBg1 zGMA3FnV3jn9Di3Dke9$TtDw6qmEgHv;VtVs;W4z?nQ~r!;G$%G*~oc^<OEs9fwSej z!-4<w*{SsQH2EmQSsf8dnzpj#nq`9g5oHhDhnrrpjYFKo|2YEJwk*bM<?tV}?e3bj z;p;FPj9qj*d-`>xRZovtoZU_4W-M~P$*kMDi2R-Z3DHbVv8yq{w&TxYb75g8$|JiZ zENE#D*J-d8&A!cy)V?hKa`KK67m{YJ>}0oro*EB~jU;8(i+}v1L=<mih0lcJ_~$oq ztZfV@?)EqvYBka#t=!Ai;HWn}quTs=j9K8$7A&h%vb`!ai5j^|Ix05LcS2|RMsr?| z^PIMTM^y*zu0+(6veV6mN0IKV#e)i2k)o3_7EW3t$DQ^`B!0MM%+v0Cmc$3#bu++I z=8>P9cw=Nh;CysxAzRn&{7Pqq6c$CWObY6FwGgT)F9oLucXBJuYqc3??rQsT;9&a0 z$Ub=|Zc%XWkAG5ESxbAXA^t|2xP7yh#*qFQ+(3sNxEo0)JTJwl3-Yn&YyWM&2s)=Q zH%TfA)9^f2c4X5fU)Dm216{DExjW{cDl<84&BF^?GP)>D$>&NkF{wwHi}ZMo!0+79 zm}vG;V{Y~o)^7?eTde%(pv)ySaK9(FN&I!B_Jwih+;FGlS2X=9j~P%0@?YK1^U8Tm z)9-H?wx-i)l2>Cm=2RLqt9VTkCG0-XTU9M6dbMH&^Zrf9sge`I3w?~Yz6wRo)0S&% z@>}GZi~H%jnt$|aj*+|9BIY+^Jls@MZeFUvv1xq}-Em*4<aCWKqf_$9;__Ro8f>jB z0*Es{)my8Mojx?$>-P}Z@YT&+4Y`@&YxW3(L4{f7S)thqZWB-X1=P}v!>V41_?4l> zrKN}1u?B0Vnx%!+m|@5Awg3_3ytGHi8J>O6DIPBPW(x&o`xb;|`&Ovl`QsTqS_h_( zT57hdF{a&J@QSSQ>r=9tN$qBR2UaI0bQdW~1J^0`qgSmPZ`an|s4D8pqs|z+7~5Q) zGd->TIB(k1S%1yGSrxwUECS0KgG33_V`NWf;-W5DVDJ{kt{N)_BVh3dF_JzEMv<uz z^O30(ST!x>ye`JBk*WK(E-R<tC*<idzy-{zYie4ge|HfO)m@DBBU4}wpMd;Hibwip z@nr0||4aHK*VM?=B@1z%lPG3FzEHg^o=kuMGA`KybETxu$$n;e%7Q&I;EF-oui$gw z5hTD&26Ftzj2BKI0<OEiBYq<SrCPWU$Ov8dA-HF+4k+kC@vkoY5Dc0_2DM#L1#Z=1 zV*mbw#J3e+&)i=B{)PP6R?u;>|CCDX0KVhOd%}Nqf#?dN`PT_?nZ0(@2$nMgJ~NYb z!hdomTabtUl#{h2%D3_bt=-n^{6=hue@*JpNgLK^_D-38#0Yn!d1o5tilFb8&7Mh5 z*{6LxrR|%Mn!X~ND@_>6nv}MU$gd^;489Z(d%J8CUoFUaHsJQniou0Z5k*co>0xC) zMKFtgjiLY&hGa{JNRgch)eBO#-G3&Ch6GH^r_&jc986aM7TRkR`H=lc&OcBGuTfw~ z4hG?4_T#~%Q*;Cr07GN|9Toy6+^-c*AN$QpOacarzoPJd+G`LNf<nAd#c-ey<SHPF zAU{L)XRbZgK72v>gm4J!Pl6wn0<pnFX+#nKsuUD#K&YD_{dYfV-(kpqL=ecqoEt%G z;h3$>a95An^Imq*H{Wh~G_9E$eP6jF`mox;r>0tNH2G3#Y+6)l#qyH}^QqsLXs9MO zup%Kz4o!{2beEI&V;$F>OxMjjngt65i)t4VBv#rWW=<Qs&Rp}X>~r5{5i9i+{OpgA zOZ5;|KOyBdaxOT|0z#v3EMp>s-bmqCdI+tW?S@5YJnez0(GYr+zYu8~`9A3PKTrUS zpgk}OVgL$&No3aXC_Fd_Pd7}?RqR*nAhY?Km6!w!27g5X2S^DaCny9$4<YM;LV{3& z2#mt9;6HN_So_66K|m}%T=6Ht&q@)rY8FIkL=nF#1)9m?X+1U7&Bvm4B8sl%EDh8y z+#Q{a#vS}_YJOGeTEk&T^qTf@Xi>T(LTq^V@MMB)qF}h>*iPN}HY=x#;L)1z)VcaX zy-ABKBT7-Q#HyLNijA`Z@}$abTpVyYQbqFUAmkDS1%{0zC`4V+)|)IeUL7(uN>69R zMv^f>50UXA3-yc+s#~Ifu*&@x#Sg&q^bjc!6HfpK(GXC0a5|oDje_D_^yu@b->rK| zKrXVsqk!Kt8d6tJPzZ!Vpx-Gd@VSU05bBB+-emvHMPPN+1O)-HARL1HN$|7Md3rhn zqO?CM1)75=K;6|MK{VAOp?XD!GJ5#-O(FSIY*$<9P`=g>79VSh0<+`FdHM&C8T$8- zGjW`7AM3*Deh{({$5|{OQS%~epQpMcxg$=P{9{ys-9}B@yBfbClJSKZ?V)U(Kmv59 zec=vErR9818x^b6WcB081V#(&eNo(J-yWsGkeJnmOAn*^BlEDwSc=_CI<{8b%>pY^ z9O0b_(gD=nSWKn4yE|G!`p)*#a;Z)moI<LANm)`6?vpha+(bgT&3Yfyb%26DArd)X zLIPHA3yp76v#oFpq7h)um?)t)5@1db0T$Q*#kmA(Wc?o~w*d-_0CNyNrUDNJPc;Gx zfJtNkoo7O1o!da+^we)wViGV|{1t`w!v-KM1ci8^isV2c$i+_-fp8@IBNvz~l7p?N zpX#hh>e#M%NLdqLvQ!7#9>E=!^B?KfdQQDn>b+@funYYdy12Va8k7|6$16+0KcHmW zLZe7d7?crn5ZA}7q49GZ@LS~RA%r1=TNcdNkY|{B(ixQOLn?XF8I^<}pR$6fAN)WF zZli$^88kd0G9PG^HSke{V3aj^Ft=>s^qK$W0+E2Ij=%tc{*l$x6C(8+(Z8|^$Woje zAerL$jWP@us`oZfGu$<;?%*0_fh#+bbBG7t;IGU_7!-j6$u`euFs6{M@>a{15KcQq zH_vD^rjT)DejgZuj}U(Pi(h_-+?4{)nua{MM#B1ob=yJa9xfD1NJ+wK!@vXIJIJBW zE+r$M6Al(IZk>qI8)F^LZ`cmcZ}87WEUcNbuV5PWIQ{$HXpc6X9#YY7v?``ta~;06 zIkhT>#cggrlwq7fcNa$OH+{2GChvt4E}BzPMaW0kmXlNR`_gqe)1Isx3?YjrSm-fW zjtpzslPC;6=A!LDNW?sr<L)rqDfk~Kd<@L@aa{>H9+mlL%rKj3@nA?04Z*1j9}Efo zSCTzvgs1Og<R1i6&a?~$e?<XlKrF>yQJ^3aP*6Q62uM?IW5cHe3GgK{7y&v^w8gKY ze~WpH1gQRBMgI#0ghB!8++M4GL(w7Y2~PUCKe|RF0O4e~$OH5k$rEJIVzz~88+nDD zXR8L>8(32&o9xB$UM|1BzPWc^mU`t>wPf?}538&;<T`70#K0IgFBsLL_v<YfJeFi% z`*imd{M<$5w!46agOZ=>DbiVqRLbCSX#D<5wuX;`XpWxBuvTI)I(jNS1X#*BD9=$b zAnX4?m2gmEj-Cp_#~9+llv5T26abUT06I^qr*$P9MboywS&2!&VDVQJ-e1l^!a`7p z7ph1O6oOp*L=nc1$^Oi>$J&Q4=o}%Og!L!Ek4k~qV4^glh<{ZI3N|3rO_2V(AH{zW z@*fcd@~RhE|9gK(KyyJ02-16eFM^x+-sgrZ&pI>4hD;yzn(F{l8Hv5a-e$R+zosn+ zcS#POJtj-lO}GJ&p#YI}-cLR79lJ!=%_Ii%_cg3+i|X5!>xE1^u4Ykut+;~kn_?@= z($ji|S^{aQcar;Or{8LtrP1YW)M-51QSfRQ-dBiLjMDyAgsxx{EGjvl^Chj(2|K?v zv+R%ZN$#B0Z!d2~^e(LS4)pQxwh6lMtYf}+b#H90N(49iRE_(h9h)@JNyw#YN`5pm zvVQF}+|NZBu|PdK>dR<UBbhPbyH93)qz@`bHr$1wTUoIRPwzSS^&?`ue0(x1oC8}Z z$%@$?u3f>wSZa$9-h-G1%d^pz0yR0EdQsSI$F7~p<_FR&lWcL`?VSsAzLK+n6$|u6 zIJS(^1rnJ#-_YI~bzAfrgas?F?11KiW91dY{iBhs$rJ@2DUqD+C*ilRlIeXTn|drw zZ<NTG5hqO|bL(oT-ZxcS>#L#IkCb)z7!e+2K6g^+2R!ON07F=T#rK=4h4oeN(f)5% zK0>%67>fUj!uxN7yGsbU@F~+(_Hq$LphS5{|I9^T%>f_n<Hh2o1^puUp&9$}ejQO7 zQA9XFETK|RaQ-jpzxy$Xj6uJP*z1I8xA6bopCF(Gv;cJLZ~f~`hOiJ?fbXATj(<NB zn6I-}cm%Fwa5F8qcFV%4PoD+%n}T_`yB_67f<ye(z;)d%)&Ke+8)DhEN9Bb_`L;*D zo)Ju4atFNoWv<P!=N_d}E3;~tjILaqGnL;u2>Vh|Vbxjgj!j-13DX+88|8Mu^N!DK zKzK6S0Z)CjdCpXa{GAh+zI}DDN4TVDAG;w&qbB(b>!E!z$JRpQ?`YXd&Xce_@>Ono z%L9Mpt4KbciWHfr<R524)&mRk8d>}u+9``aP{-FoJ;&MV@G%51IaCOb!h=azfdz3# z%i{Q2A5`o&D=`TeivNnj`<d4uGz5isq3Iz&A;?7(fr|7cZF~FQTm)8}11JcH#fJy| zBKT3M=Xh!zQ5sRizbXX<pZg{KcR!{{KInH5d;K%-?)u;R69lw?7W|O@x2^-to8>U* zvP;_V^=&5H8aq}nQB731G;+i8gnQx0lFcl3kY}KLajmvy%U?M7cF0&Cf@$ge)-1ci zcG?>C(0K*albtb_-Hj#(t<%>reBgV3c~x;jvo>5`7tGNHjmDKbXA9zXu;I&$%{lF> zhqb4}?OIt=do9aL>|0mucJ28B{p!2AqB{L{3aTB$XLbjR@_SL(O6{JBq_C!P^oSpJ zdTbZvvfCA~vzD_lmUiCXArI&4-dwxj-Gf$0Y&!19_l(TMiML?FFWE7zr067nqo+b) zVN>IBj#a%5G(gDbqTX$4@rP%y53%1jv<n;NwyNWF9kLUa$2QJ-Sb~*~*v_VQlt<<* zZ%w1mvlhu(=NZqmq7thGt@Exr?$60q$djKJ96mZn;aD`ZZmpp2VmDjcvsx0~Li10y z+qUIykW)s@_a)c5N#=XHc6oaI)XZ84`Pp*!SMsZUTHfYg8u?4f9RiWP&gI>Xue6S1 z_I=d$kHbqT__VZv6B#t>zx;K1Ol;nXyEEGa{m;_!MoPOK%hqgCbLDD>V6RwAWB~KP z09z3zCLddRzE6B5+Z^}QKi4E-OSCsTa92#<e_+J3q|>CWWYy%kJ5D1vWZcg&m5 zRg0N~Jd0Mbf4?5eY}(I2|8o?1vvL8g{oH__XwAop*ej%Px6^BqG<iCb8pj92Wyx2n zj+mF&Pn!%6v1?iR_P&Pq@SCMwixS-R%689+m0JxH>4TwX>ZI9vbw9>Q$G?yX4J<7; z8<d*SFlN0ZG3wM=9DP%z@8CBq+u$NH)x7%i@)}lpHm4x18qU+BHKKQ`!>RL?MlI?o zYy6Vujkb+T<FISBF_mXm-+DThee#?EiaC4Y24<BLXJmRSUsgBx$-#?qXokx)Tq1|q zzEG73`h%~%nDp(IyH5|1<Z8Vg7Wf=<$@t=(49uZ672*A<GfdTD(Vntw3W2$0Q0YK4 zw!Xl*c|1cm-QyHHl?VS!g=6B4L4N1>xg-AdQR~>FtHus#FXk}aec@RC!D;T4T9-V# zq&Yva()u;O!kxv$!0L?yGpRSYqFQR7xbsG1_{^ItQ#I^lhbn~1!?Le5wvT%|f#sNk z9cxStW=QJJ;B5LNu04of>fh0;pP2YmaqrId%w}Pa`|7X_e@jAszI|3n!0_a_d%1Kx z%2_+Dm<`dqczM$K&HtnBJ;R#X+HPStDhd|t(os>|iVBiN5h+`A2Wg_96g3nn(whOK z%Lc?k5s|9G#t4XD5Rl$QrAY}@2}MO9bg2<y!Z(vFNCH03`<`>1Ki{u4=3T}d_rz(| znylQknNI3`dRcP9<#DfZk8OS84Q2h&s+`-2ISV=RMv`-i0)>^A8?-CWW!YsdxWw0^ z%)7F~Tco)gPAhkr<?v?4pVa7^-zwp~+F89lH_kIzpZM7|W<G83lUbXKr{zgyFG`bZ zOt$U2USgu)e23k3!_1QR=IbIpYwoRV%1^eD+*gRQxE}h-or7%r@~nJ>&HDx+{7_|D zUE2-CU9*RGhi<Q)cpZPXKG9|0=UH#wjNKD{cZ=(vZU3m_bn=b*s7a`;DgQuN!NbCM z<@&^_j|p7vPn2^KOFR@q^*;9nPT5-fSPq0uO}MeiM0U7+zo~Sxq)oSmESGs{`@k=9 zC&8UxPH?`KUu{%QYp%G|Q7^H;cJ_I=hnJ__z2YHXd_d0eS+~{-_Yn)cnON-{S<Lo^ zAl|H}vP8Ru<ImxYw5RCMO0U}K_c@kB+Vkw6Q{VUVT^F-nAWuZ(YG~^w|4d35*7t0F zqBih>5I^-voaD4auJZQhc5m~pP^A~Pky8_MUV>`2Sr?1E=4KCjg^whT8CTk0`TLVp z^+coLH$AJzro^{NB`<W6>>gUmz5Fn>$86oyxBEHTtu@I4iS?BO7l!n#lv8GdUinOo zzOUDi2$p&tNr@^Rt;Qd>a{nB`=W--Y`JhL!%Y554k9x-vLHrksbs`?=uY{ft-9M5_ z$;_$HJ!$p%ZPVudxvR-J3$wkEM{`EIH(%Y<Ma~Kw@B8^|a#sk7J>C0<RfAlpL5|23 zMbD>VPJ*R2qwU_SvUF49y%o=Se~rLjX-)T>*xm(cc$~Z^IKXkTp-s{*Irhfh*6_J} z@zBu`gh28Od}2!Ln6abv!MmNB4l~vbwQk<{4(tA|-99t#r#8A~#g*plG#s)!&-Z7C zdsM;Nj)(GCd=|g`O}V(smmH4O_5D=yLgMlD?N*_p*=^hUf7M>*IzE8tF!6b1GI%p; zHfX9V+n{py)sSmgpK{v?xmBOHTl07oJ`d%ObMySJ^XFh<$2A`(tAOdzCjBR$o1C)V z2xZ3#aJ3nveHKSudZm%_vG{71h62%j)YEg9&45-q&L&(e!F2e(a-GYu)@OBsA;nf% zxf+M@HUUoQ`1%NJ0DkVZuALXIH2Ft%%lO?np7fNV@#gNC*Ve=N<F;a`4u#HLL;1xN zv(F*T>Y`d9supR(T~gMzcjSZ=iBVQ+rQJn8CVVGz60eTjXjypPB{-t<ENyo@fy-6& zWSee$t_gR0Ff_Yv6g47~o1Jrt)Yf#l$1XnEvUfc5ob!~xTHP+8C>PZi|9qEeY{MWu zEQH*!$_qJ0eIwi@MJ~~DLd4yk6Ou<rGBFYZhO6<Jr3YIVE@@tWRbylIdH7Wr@pc6< z1pHl=MDKSs9=-1eIs_v${_VdaHXa;N^nU!KT+ZPP#W&_RrPu~8X9v0bQc<gK#_gGp zGNk;n_n`=JN&dhtT=6QnEk3ML6!x|A`n&?4-0<|KnSQ_KmwbFVAL`P0F3xLkjE)aa zQLY^hjM7f;)Id?L{cSgf{dtr0>?`)6f;vU0EcKD!$~H38RvQ1gKLpa!=>~ewiQ`gY zi*0uxDRHrLdyb2PeiYPZ6Pnkow9&SV))5xnotJCvzUS>E?>rVBU|J$n_OCBT=EuX^ z_uSuOQFWj|%_8DrV}%Rod5EpiQ4!{9tgyrP8GO2?^1S|QepFG^^XFfK5SDAUD}B4C zXz6fC{ZMGC`Q_#t6+t?Am(8=^w;q>9$xn5B<<)C^VSi#fzgT#r!5y6@RS`nQn|mBP zA<kG1%nvQ==-0dK%i|qF1W$+*tqYk^_g^Kk>*$4RO$omJFGiAbF_{%6ViOI%M+WkO zb^rXDV)R#!R=I@P{%j|8efNYZb+^XIW8yn+3CmxP?TtF4c2sWX{$|yL6E7?@-pQd~ zvkA=HwoHCu6cg9oE6{9gH5T*r57Y<Ip#74ouOn6DIN2sIaFvzm`AV;QA0(WeaEF8K zRb!LW>+nB#)ij*>-}SfDAgqt<WXn3|G;}PhTl<uF<pq7m>K|vG{Tr<vD`@%Yj(hc{ z8#@2?JZLzf=4@1Q%jaH&cW2|%vZCj*{~)-0&u{t2=k6bOQ*EB({Vk4+gc2@76x(>& zPH0!;+5{Ev%730*cDw2SOx9tOD2~6#PkF<EwHyBEPBfA$Ke6?p!{%fErab(y8Jjfk zz=i#~ij#fE6H^T7pOb20zJWjfx_s+SnTEuPgJMY@_c}Gp(;q$jeuv<vRkkH^&4scp z-*Z*}IPG*ie}n3^Ne`p5nLC14?Un3KY}|VDcxU*doeoI!&X*fx*yF4wC;r-I>Ey(# z!g*~y`u5l#tGOBtgSa2CsRfXf!ln)f@$&AP-oYI^KT#_t?L*qMK&ktgtSRjiO8ya* zkoU@@t=p_Hhvyn%8hj{U@7%QDC`a6dIrUadU9c$gX7U9EX@iG#X%qReV-#Y4?u3hs zKyRJm%l_fI(ihX#&2K7_HGSALxuZ^R_4A!T-qQIl_@V4C12)wt4>5~Km9-<46$ylM zR|K5@GL-7l`o=->IPdS^)`;{V7Km&0vm4x*v*E~UJhIcgU9eZ@c#2cTD5tb$)gbpj zwVhV4Mu-0?OFSOBPw(idT~-JFc|*)7O#fDa6yI($CgpYfn4GWA?u|)#S4|FA`cn#I zw7z%BHnfw=QR)r1)IJRM+Ks&YdIoXIFd{?rHfLg*MUBlT*9`8=(^o#Yi;CW}!lQ)a ztBMbA+RuIB?EyC&Y4V4J@`wJd>XCB0%vHW;q?e3jDZJ(Q%RIGMM{Lb%Qv;P7Q)+ta zpWKl<XEn9Uh*$pfHQ(2zYp%SAUhiUaDDTqWPcLa?_?g{D?ezFnHHJ^HDls+D-oz94 z#soq3{!}S~Noc=xfGjwB{C?Ltr<PFifS99<^m7+47ip=&ERW9YF5|TO$&@uQ9)W1J zV|O(FPEI?84E*({^0%KC3bK9_#{6vBiT;uQNGR##j(#>R=OYr{{gkuug|{R_&yHy} zOGUGDRTdnM?Rs={+lhg9k06E3pHEAU3<_EWJIAzUl<oigtfDYy_^+d)HJSIl;u9p^ z?U{VM)oE|8gl~I(qwe4Od=XdD<T5C8geSYPVO9C5^Xc!Vu`h<!t2%K$*dgvpV%u!^ z!K5p0^P5bW=5ai)LP#E`{rD;IUW3V3h>vKUx7XOd%|2B*{9Skbbj=)Bm6P$0Gm(LM zI=x>*5!-?TFmL!Yw$zPso!<V#yia4xSn!wEo@l+T>5a!!R1S9>P)BbK*o>i^ImIUY zWcG(bXk{k%H@PlFa6q};GKp(L=cOLAvzMh3Gs5)z)*pDP)2@E~>+D_h2lG(e+1|`b zg3WEqM<LNRxjJEDqv966?~g1@<gu0U*2<5kufCap-sgZCDXHhvTJLUR=y~@_#6WJk zZ0+CJzR>q;jIc-lN%r(<3@Et!?`e|cK1VsD2}#o`(JXK7Q>$0scRKe>>F#Nl&fQ)g z-|5WqxTM^gJf=GzTy<8+iRaCOcD4R%Nf#wF?+Q(l0-uSRL<!u}&JneW-Q=2~bTd}# zmdlxXSGf=7mnEn3_HDme&nEq$@PYndUyHW7hxEO}W$y!$r=ExY?PyFmbFcNQcpUMI zy~+0Rm#9nVWSef!XHR|<4WRD^I^W+IKlv`>kfHdbx@qFSD)=40PE9`w%Xj{O`=f5% zw_I`ieWe+eUo5>0(U-hr#m2t%o_T@Y+<J>}`9sNkle(kPNZ@Sag|QRr2JZJ)Wn_<k zG);_`%KtK6srmWAmAj{&Defu{2-wasyE-vpz~;?!3rCCEA?!0AfAhyzI0aDBf)i-# zTAmvRBDS4~vM*obCh^KRZ>C+<%sBqc;f4+VmPv|;!?)9HOyUzbUX0u)Melrb-Dyo& zR2n3l{(P$x*Zk<uKSN%d__yeuvoOv$qg08N&yhDD`gzCA^O;Nc__Lj7bwa{sizvGb zcbzUhcFy7THD&F02^J6jiu!yWeYVHoP7oqK!scp!cZsx`s@N7E^v?&-ZYj;@Zs*c# zt)$=F>4|rJ^T*|QuXL-zSBI`gCnB3j&xLdB*`nU|g{X~TImr7w54(3M{F*R`Lw^le zt!Qc1#M8Oqywczkh1Hzjj=ny-S2_OC(TrpGn<;uXtn}k|U6}~{Hi11h@71+SLx-R6 ze8BS~V)ji<^f}ig&OlDhKNDi?MlJR#70z=zlVm&;+9KK1c(V88KU5)&pH%jgACk@M zlzGQNYIZOTDmXLNa7AGXtK_^n$Hb>v@t8>bDV<DQV^})d(fkItFSiR*%MH%P-6`(c zP-bPU)RQZzPZ52x#-K5q_;;6muy_U5|AE|K%aOYqM{U)HlQl1<N7lVPUu{#6Q@g6| z-GKac^}Z_Q+g8#?J1uoeJrp+RZSA>i+yA=hF8(<tef&D|Zsz$X&BR(EzmB(YcUvs% z?B-u4e|GmURXM#dr*}{<aN|s3x%6qV>}`8Tt!qq`w%tNn+hd>N-dm&u#Wjf3-}jyJ z?`qR7DoX7&alX=eCalEbl=GRkb?=PRwr3t|3zMqix`VOJm+T8@RFxT+EbDoiG|9c1 zn@?2Rn?G(t*1^fE{TJ^vYM)#4-9FY@EL!w^T1~O%29c(it7{JuDk#IxGhb`&i+F$G z=X7?}xOqT>7r&iJMxm#uLq>g2-orD2orCQId!JV2f0?~}_sEfO)$fD7PcsYBlk`cm z=x&`ka&-4)bL3TyXX;JT2Ye#e9r%pgLonPM9B`>597$^26FrvNJ2yRGiNCMoFFE;q zui$RUs;BcOP0Rn46)Z*n%`<pwa0EG!^&IOZxATC`gDWQWXLJv%hE3zD`Eb%t20A`} z>C=4g^Ht&QuR(1!V~rfV^8B`c*9}XZ{4jQY#>-hKw=LdLXUH*Xdhf^F1T{-1`=?td zv0rv~_-y#Ku$Ft(FZ})5l{bIX{%P>d-`_Vudo$A;duXlI#D3E%jD9O9A+dNTcwAZn z+z2B6({13#`eM$v;yc!U(apzfo-0&|U8DM!BRcaRKbebs;(A(^``+i~daW*h-}j^< zMj_>d!-LDW9$49}N#k#k#7o_Ha?7K^WpC6ayt7GFOn9^ko>;L%w#i&;%=g_6H5(5J z^+Q3{F6(ohT>d%i`{C@C&hvF<0qZYcetA^q!>#a(U!4r}rV1j7h}T}~TrOAJL=qEj zE)=p!Y7GaSpB3V<NO44Be%_ndYP4$Ckf+AVWudl{gO>$vt%#6>Th75P6cKO>MT8{W za*p1tZ4W{cZaF6jx157pC?en%iU_!cA_8uqh=5xtBH$K^2)KnJ0&by*fLkac;1-Gq zxP>ADZlQ>PTPPyn7K#YCg(3oOp@@K6C?en%iU_!cA_8uqh=5xtBH$K^2)KnJ0&by* zfLkac;1-GqxP>ADZlQ>PTPPyn7K#YCg(3oOp@@K6C?en%iU_!cA_8uqh=5xtBH$K^ z2)KnJ0&bxQiPKvELU0R32yUSW!7UUaxP>AFw@`%O7K#wuLJ@*nC_-=xMF?)82*E8B zA-IJi1h-Ix;1-Gy+(Hq8TPQ+s3q=TSp$Ne(6d|~UA_TWkgy0s65Zpo$f?Fs;a0^8U zZlMUlEfgWRg(3vEP=w$XiV)mF5rSJNLU0R32yUSW!7UUaxP>AFw@`%O7K#wuLJ@*n zC_-=xMF?)82*E8BA-IJi1h-Ix;1-Gy+(Hq8TPQ+s3q=TSp$Ne(6d`&G#XS(bKOlI2 zK=A&6;Qax?`vZda2L$gA@H7ebn${i&-X9RWKOlI2K=A&6;Qax?`vZda2L$gA2;LtM zygwj#e?aj5fZ+WB!TSS(_Xh;;4+!2L5WGJicz;0f{(#{90m1tNg7*gm?+*yx9}v7h zAb5X3@cw|{{Q<%I1A_Ml1n&=szCZpCTT#;f@A>~vD@v-||9sT2big1ZDZw~TxY<$H zg$m_UD@i1JcyXeHzWjJFrzGL~fnDyFJ$u}0zGlDUAASV9eD1~m!EQC;#@F=mJEr{$ z`WG!lg(UH}JWjv5HmJM*e)?AHzxRv9gTG4WQ}Sk^P&2BTT+)ec9w3%_&D+P<C*zAK z)?OLjq=}w6=v=Lv#e!6KL$8Eqi6>=zVRq24<m$PBhJ{&01#)4jcfrU&k$Uo=cWGx- zL(~)*x?11sM)}nan4)~hnhUk1BrYGaXZ{mAlZBpvQVL~o;b-lfT*$zbnU&AjC`g&} zB#kco`ql2U09saB7k;YsEH<ocn0W8-xPPW;N=fYWg4u^*r>rR1qWFfXPRevCK2eiA zo=EP(zW>!mc_S)eDAez1-R>kk+LP2Hv>@e7?3)-ry^!CRTT2$>%B6ht=9%jCXpS0{ zE0Lq5fxlT2)oK^u5*ZrLmpiV3@3F@>l*-%1%xBvV%v#5bwOjriYac89>U}b@<QTD8 z?pUq(3He<7yaM!W+F?ldyZ5DeZ+ouHL6_na^6^P#a+>#>D=fLiM&qP@x+orP?{m+W zk&m|<z<W7L6K!QQnrEDDNE4k;pvIb^!p9`p_(<ct;IaOa&B?<vP9=GdJq*r~FJyvi zN!+ns+me%VPsZvDy6WVQCJ&nxR4EhD^1)N$)yhODu3pU}Gyk#2)pNwJCBSi0zHYQT zDs;?IF54%*591*hU*CMwHFWH&yH&%N`<`g7UQ0p2^f6>^)HfH+8f9Xi`{j=98VUts zCLY;w>*fe0Pc*fACqcgrNvC|k?<RM2^uQ<if`)<S?9vS>K$l&zWnNADSbp)VoG9J7 zj;`*D;9tU{^sXtgOF>R@j0d`bI0$v`n(L775ldF{xDMu?b2-^Hkm@lSXWyLCb!0Nz zqXcxKlBsGRllmm{)P6SzHB6qBDguT%_Y>Jf1z>0h?o0=PaRbfy#q0&jM7i7xIA;ei zOAC@~G-i)bmo}e#(0$L*IJ_P@zw5g-Q7#8pVHODjJ|VemKM4zU^*R*1an+e42zLBP z_yb(}XQez{fxi*SMczxW8&l(xpYCbu>Wp#|I9jVrObiyhP33E_opz9~1xh?^?JHb? zl6d@&1e7h25Et18^_UYo<d51;H?jwh;kuBR<SCoVu4XSw`wExNE`!^6{A&SMP2xmL z&zVk4p@z&kTi(5fg^y2miJTm>voE*(b`V6r3Kl%((kYL^6O40u#|CBN<{xy+7bIJQ zdVskux4F-}vTKyX?J_m0&i1GHXGbE`)p7M|NMUkHups-%vACqELGSF|F-sdvV3vSu z?&JBEq$aRfykf};Jr6_25@<7YVSl6)qrgwfGVjUlzd<r67|hURM`#`eGc<#O>%k1p z5`Z5acW(5(UWtq5fRsD;NM2#_AMx|1;HO?GsPLpOuW%FM92x5vIyT|0h_VMcvm;-x zRd)3j2Md~?922xBHhX3Cj?F$g@ig6Ma&zmAtXhxn=8E@*Df<(x!`~%#-R$j3M%$++ zqbIfOpIce;y5cF_%~_6WJtf`){mNEt=@WT2hk7F4y}El@^LvS{C7u{HfxJw_?0;?8 z=KlGLRqnxCy}L`Ki*E=BR(ESYEKGj<O*|hF`@P=c;mHJH8X~BUtqGwSFe+pIEC{$Z zisWyXeRvYMf|wDa;NeMMdOm{*M!@B#G8W=2;))FK<k4_Ch~B@5pz5dPv;l`e^-~-R z(serMuoTD0pdwwT>*Cc<8^fq%*8#;6>dF9ejcDo^!WVUl<|CrNpCg>53I`Q4A)pfo zT#REu*zf1QtjrkGyY6%yeZZAHymOgw+iCGnj;{TlLesHRUSyI}i4?Z5uDws{=aX^r z%o9z6AwJRWwh^07oli6BujHTH7Hi1w);5qv_UF8_Dhiv5DU}~Udnia3dwpC@swwmK zy4@p`j6Zr+bn3P|UnioBTtKlg>u%O?h#u$BD7g;J#WjY}5W3HUO_^rEefLmeLBPcx zKF%R97YAHOX2gS<iz}n&GnilmT;<<ADrKkSG1bH%k)G|clZz<Uv%!cq@DK59uwX%= zJ=<lL;uslJB-(?B_S7U)QOOXoOlVvW$Q7rlV+dc=88ObIUUCpk6Amh7LO>@FxERNR zbW098tjustL-ZgDCguIAi9q<c-t}{{r%E4&XYcKmqjX?f)6)k`C$)Ow+h4!Z|8%nO zOnYf*=4$7<7dcO?>q=(RM5o?(b#?4+D;XUiSIjv2WU||L`cUfU(t3PIcGAPK+2s9V z9tDRsPf1{^YlB3@z<SXTwn+U;71e-<Em9}2AZ*b`qe+PbVXEt+1vA2kih*@p#sqVU ziXozlM)a;5m_u$cxbJ34%1bCbibtI`Xbg+u(O^dCJ~K8(918+2_V6eU0U8;S83_zm z)oxrSd{Jk?q=a8}t$zqjIH;HjfsE*7^}sa}YHHW~CL_eT-wdg1U@q<!1B43<f2>s? zNQ#kWiG5~7g<(=Q8Pj9XQ2Ra6pt_<>7@UXKjD@O?I9`-&^Lizch3zZEl)ewc&%0+- z61^Xq$)oBjj?`LY9>G*+`iIbwXzex`njuJ}cAG2<60MbpKB7jb$^<TnSSD0UsL5Od z=QEh-2)H(i)XKKSnDJ;tnnC)JjbTg3RG&SZIyitf)km@*lzwCxBaQ_DSGlRak}{19 z$BZh0T)%3nI)?B?o!BF_Mwv$vgsH-*6*Hk~s=&oK7F3XV#CK&zn#oiBNL+*&k2+m= zR&KM!tP7`r$H`!G`()f{4?ghuni0r#9sHq-bnt&1_?){baBiwAq_8qhek1r8s|QBB zqwC}IaUDf}m$-ydZz+KJT)W_Y@UaOpcZ1AIDfj5nyux6kjzaL^9%{lzOWj;+ncv|^ z{8T~x01iFPC$A1ZS>ue8rNH0b?K0sKI_A{b#qOItdlC>$I4NYe9|m_4ao{8W4fvpJ zNG8<*5rPU=sUNi=Z*q;nr)cD0OOI10#zU{;hw+2nF>s$*rwh#Pv;R(weeFha$&L%! z<<3fh`;F6FLg;S!&JMz<fv(T-o{d8D;g+M|PfL<C)gFCyvKIblO2V*RwpWo7wJ>P7 zQ0p__d3#SgrSwWG&(zf3!^ESb1L-y%hStHk<B@CZ)x6>(hsV?$OSPQS@Z*Y}tLnJ~ zT}Qu`UJV?_x)k2do$^|kN?4WmChDP-aEaHilqod%K~rwRgxSxV&A;?=W2#2m4Aj{Z z@r9q;R{hz<&J{I#&G}Nnra{mZA+h)_cNhDh?FWY#0lRc;XlEB8q4-rdey8hzmt}8? zlm>t2)8^ahQMI1=c_)*L*VsAcHcmD5I7ZgGT`Z`p5sMmjyWo26acYjWMBKP*GJdto zrkG77vz5c6p4zVUazu6`S;JQ0*TwNUqE06oq>}^XJ0#slLfhx$@=qpf^d%V}0WH_M zW3_JQxys|NcM0Boi5rkqkV{RK&sM2VY`DUnOzNE}I5Jc}sL~K=!s}HyYn|EI;%8Mb zTWQV5U)VF*A(Y<ibjkHx_-Jfe1ve&{a;sP@yx>MshN2N3;pSK%ZxkqX-<4P|KAQ3r z7X`e>cDs(hG43_v-c5WIU+?wJNvG5#UPd$Y#YcjNPf<=-`3TyhD2G_`xWN8H+`4+= z>`$F}_pa@SF$1$VQMXBQvRy*ywO(4px;%5UcG8Qn#|k|Kuks(1+p<Y!6W^3~ojC22 zmy@eAvx?v2-kUdjBMNVHsGF*peB`tCIFB07olxcq=MJ>>Ywjr}4RU+rT&Qw5sc@#b z=;)Vx`CSvgyf)nI_--keep=ZzMN#&FwyhOuQjSxw1V54!S7PhqbfKYLk%!~HhGX+A zxv0}Sb%d{PUimb3fE=*NA&L|)w#B`KCuG<9L#Pe@kFaZ%kXe779lX5f`E<!&RYoh# z=%ZUCV%I9Ej&Jba!4$n{ZfDz@Xzlx;iNv<oPk+yIVAd+wwVtOAHfR4;WdS&g#kOeW z?OM+vK%Y_-WMP=1ff6eBa`Pg||B8G0lyG%Qpt`T1y5)LVh5d(QB+wZ^tqzX<U$59U zS!%HYgUU~jxAe4zVTV;ixWXQtXq|LF*LTeMCvq&y{1nOeVads#7aq_2`q!Ae?)zCy z-6?TpiCF$>3#a`F!Zbvv30o6FGhnL2{8<oiZ4^=7ChN2xxPq9GM1j+OUwS@+2}Z!> zR~-gE^v)u~g?ThW_M^WqBIv}!a@v4H;KV~53(^hQ@30id$e<$K5L59J4;#a%WTt>( z2{mN^xkfZ~4B?A9MU^F@`Bey2RN<gvCIoZ>fs1i02+ObXWo5>o-t`dE=@Oj!*A5GF zh_CJuHrQOX9f`nvwn#$TLfQpVu{<cgx*fkU*C7#!)|i+k5)$FZ6uoH9#;FeiPAW;B zRO}%@5@Zgd>1GkM4UPLyu|0%{rcX&F!@*{1bV>KQ`}KucPILbnVy||jy9tGaW=2KS zMzxFXc1;md-0pJnSWk{A(Nh0M&aYgB@O@HEqw(Q5#Q|r-F_Nc&VhSn_J7he14a&Zc zYdNN*Oh=ar*Ynd1NbSP)0xalKA-DSIK6J}5;NsR`Lf6o($JpR}1`{0t7rS;L|8N>A zD9Pn`Y{%b(7mLWkYPVksb+A>|YBz=jVLSf*vJ}V2pdxI?dn2pe2^cEbdqA;-qD+9? za+*4Z@I{@vqu0c<?>Anc3a3`ggj%Qq7voqED*Jxf%8c5K`i}R6m#B@u6Ao-Z77z&P z@eiR1WJ0MfTV<A)N?(=Vti_2oeVW?;wzzx>pNdYNjO8lWEmAQT5Rz1PufMN-bI;_g zyK?WbY@Z}8#iE)#TYLQtDc)yeiDd0&AMy{;_9@Nz=;T!APnFynLMD(`P$Q0p&@;!` zlxYUs^l>E?1YGRRmFoq(f`ALjjJQ!=L1pxO1`~{ct9<%+r7VdXGiVZ&6uMP*ei6kg zd@!O7{6iEzSg@ef(5*5{af}QqN)0_8t$-vDsAR`unNYtTkSk78#}K}#v$c|2T}T*B z6Amh7LO>@FxERNRbcKW+R%YBt%L+YSFwgBbXtGi`umM@ow0aUSRDsmWU_=-)S+k;4 z`l|e9Ekc}Usj~j3#f_RhM!nH%5JY!(d6zdon;J7Nd4dJEfJsvBjc%?v=Y*zHUp0S9 zs^}eU-~3^g;xue3=6r9~!v3MV$Mk5v<4bc(H_wf2CB4_(7p86x&K>5LR9Drlc#f7- zM>dNeLTw6f@~AKs2bWgb2nR8{i>1{$bt_Dv-?&xBH-(q81XH<M#d$O;o=<m+AG*3J zyb(vAfNlgcf{9JR1yC~2&v5_Gl&tdTGjf0#9q8l?p{z=Nm&OCK-~O)X|FR}Z%1g!l zzoPt4Yr-KwUv%&zV26KDjD>=KCLXlH7k`fM+Itodiaer^B^TBg24-v$vgz(ZDkonU zp#K|^-)K7x9wUsSHM4*_Ve3=Z+`FBFX;Whff#A6!B=ZMmjP(9k?(UkmQpI`dr7qm% z>FH4clUkuQZ-+5^etp%+?wf1;hm^3cy<&5T{Kx6Ox!3==Q5NoKZt<Z=a&1t-9NHh8 z^k9c9Ck<hhw7&dFH9)aSS_Bq^RcbQgR7t>4T}>9u2$T9?hYUTR!33k!2T-)qq~7(t zmQcWR+>VDz%1cQ5EU!9k(0Ji2uLd(h?|jI{h+{#(#jbspQ-DT>WJZF+f9~J3O!%VC z0!|gbL;C|lXu?6oObBE|FRKTxk#Knb+TUb^I`4Xj)ZJ?-9`JmHa8P684yr&<&mr`V zhd>|$2@b34D-xo#+g#p9)us!qAHfeFN-b@XY<=SW;Poten(XLKo)Ww}I5+pNkyvt~ zrY=$ZsATM$7K<jW1YsH?sH&|Ep&2kLY5^<=xHgF#-6`9o1zf?*NV1?w%a@+dV1f~F z`KhRdIwvI}!y|b$E+0leUqp~)N;z%7DPWm`V?nx?4?8TyF*2w~_p+6^WlCchmCOoI zETO>+AlHbdjv;(er|411=r<P$XQ{$L#Y_n31OgZ1SP=Hj#V;!}ruD90wn8T+vWG{m z6b@`a77z&PQBtM}WJ1|qr@wqEF^2HcLFS~}jTv4Q7CH9Zb+el=pG)=v>qcP3+4O9Y zU9vi+-JqGo3v%q&^W&vMoZB`EO<zVF5o_6KTknJN9<9<WEj2(?sTC`{^q;9ZXMaWV zwLqVx`~8B1!ifuF>K=7J+7z#tA`E>V50pBfUtH!c(b=k)vO5mjZ(M8y&HRIF*`TCM zN0-Fb^V1ASZL#$NEa;LLw|em&bjt?d;?`h7M(EZJY;Zn<iH?AaU0V#?1nv$>G7yh- zKSg-4h%AQI`lV0@TV#jUVptH?{nVGGI7S8)VcpA(hSnxvsAT1UVhIJ90J-HfbqwK) zI(3VU#Ap6#yg(IBt(Xb5Pz5f=u^`mUKV>U3-e%OhmlIxs*HeEZ9N2&?AQ05!A3_tz zgi;N*$Sg0FzAC?23z;^3n%c$1RSuMh#hm64pkI0Fa0&h)nA1EcFpj3%W!pZJJsZVb z6-OPL*k?<f_QZev<xUh9n;{qaO{s?}lCD=Syjb_rhorRb4TT&ry5Bk(eP5F^-=|cv z@1R#>^CiU*zn~;8iCBfR1Og2e%<u8VPz_ZU^Lr9l5ODbo`hi;^std!6g0Ko_ztHm; zOfbSKR2j|xYx30V0dD#fvUwecz!K6BG8Lx{z-^o<#DZGaaqut2F*2yAbsdko(0(+H zj7NhBq0@le=w-rTorEF3jY(YFWNE@d#Y_m4YP77L#Trw&w#lr_0E@nk2j%skeEQT% z;lS2R6-ce85w{KqWJ2hfQ*0|rrLW4;T2#tzpW>QtedlR)dT_Sp6;}<~=Xt-FNdK%B zahmjW^`E1IKYs*_H`wnV8ZIqX6q+yD9I(*W5dLEz75&Ix6s3~a6yeXOu?>qp@KtqO zC9iz{S5;lw2pP`oo{sYuy{eLj`;A+)_~2J|mS8HE?lwCJkb7*yIvn__q)eXxHb&5x zao_?dndWD>|7S{8dGr~Nff?Vz<V!+XmHaNv4rFuwuIT@=CL08niu->>N&R6ktw~+| z`b6vN{!Q5kCBi431oUXodG{V3WAT&1kFZa-s<zj!$9$%n3tW)g)M(<<t(=QyFT0$k znf%Ylsr=8X?E~f;1jsGQ#k1Om2885}Ckvhv%2Nf3l%fvJYBjQoqGV;IM7mJ+FUqIH z3(7O|lLwU-WbIF${wCMvZB23r`&u%(&+R^T*tLGZGPg?cho4HE{lg0Hj~4UCF@u%< zA#{`~v|WZ~2uc##F3W;ag%Hu+>I6b1a3Nxu&_}{h<r+Aj!9+*EwJ}NPWZUOZ9t}lv zh#cLBTSC(&?9J4H2zuHC$%0Vi=rTqe3j(h4X%i)78X1lmRRXzwgH&}4;fp%4-XD$T zk0)TL!l@NAp+Ty^#W)sJFrQ)a<ZkUcveUOF^JBS%ino!PS0mfE?{-V+|2e2AFEt-o z|76bnlMYvUW#1>=?P3i=t4Ylf6`Hzaah~I`rtd5sZcPxTA%ZG$O$g0^Q9=5%AmG|4 z!n0NO;a1=ZVn)Xc9&Yue=QEgK1YCY9Nbp-}VPtp^w}!+%^!`NzRo^M64b}@(-@&mU zU5R}TOL2@0D$<p>CSHA~F^o!f4Nxqhsth34h^CGqd{L(;&+%x}Gla8L;h<tB1aty{ zi*YOnYkKC3-U%B>G%(n_?{#B_(<cj^&3tt=Urn9@6E>oPJ<Cat@Vf}(1pN~>;>+`l z6HNME<I?!03UoGa;HP`RaF;BN)ffYEz+3@fu5u6*8&RQDS+i&jb;i<6$o3jzUz5Hc z8TB<^{R~6{b9WyOq^L?RbeuX{Qe<!<PYtzO&)Z8uooK-KX1puV9#3rO5pp4|+aNo2 zYd^{DoKS;D=VrU6)W8`{LBe-S;{i>pyUB**uOr1{FTb_0;z+>I5aH#4H6b(uCgp%X z3j(f<Ns(J*tvG-yh#83&SaJB$^BGJq0xrLl1K?J18&X@1TjS_nbju=wvi-|x18`R6 zk7Gf)NB24`#W6CdNcX6*c(#Az1uB^_pjblhGJsqonmUH?MV+aU;?b9t2rsC@LB&i6 z=mY{6<5&>(veK888Q=7-A2mj|Ze!P0TPYmafGi*o)T5+K6G%snX$Ud$zlQZ{<6c9P z){nn|-?^%FC2q!7@}0Av*cx!f#Z6vOs!Y+#u<yyjtxY4Ex(ni5lCg3v7L(@_glULS zb9!wE&48&s9l(NsYm*4qPT9%xz!l7lBnu|b`_l6nOfUj2zv|PW&ix6<@IYP-!Nch9 ziwJUiQBE6h3b?(%u^?T+!wySvj0`H$6|@p}d(jw1C9?t)ONfvG<Qmb`F@!Jb6y=hP zmb*x(q6!BUGa;Z82waR~L0GwqUsh&-$00#0bYB8{c;HImzy@RifuJ5GWtzZ6RQo0v zYu3S5DPfDzPqKw--vor1bs)3U@fMMme037G3BW22g3M!b8Z&5Cp<(s!iUi&5b5i5h z>0G5QjgN>?+ub};NWSW0pbdbRT6gcN!$O;HPx`f17cO{5Oij<sJ;?3NBzLyUY^lXh zow{_mx>PaNcV_-*kK`J>@r`!B*GGEDo3Dt9`<To)+pisZokw~({L1acB|K^TS9s2s zxg>e34Ue!ne+^n~2ueD7zMz9Gk(g6v1TLwx5yq0)?QXwe2R5h7;y3O`-FP-XmS8GZ z>QV7nKwf<Gd|n4z0){>TY@|(GMzEq%GSAO&{})OEccV|s@GS~C;16<NclTu<TeWZP z?dzr|wTP#tcPkJ*OXRuglgaCE3;XqYZ7JIPqm=T+;;x~>=B7&f(%{@un*n(VnV#Ik z6pJ6lT$JR11F}Nw6#LR_=_W6+?+=6wCc-bwHILqqIV>G}As-i16A(hX1Y<AcmmObj zG{1NZ9aKa0l`|q?qxnTU2;+pYzIe<5gwRI`CUhfD#0CMH&rTdOY4Q|6o(R6W7gq_~ z)JvxYvQG(dSUQ?T0D~4CT(cHd#V~@osO-}vx0SzMt}ubDZ$83G%Bi;V3S#stFz8ob zFBG)>SYO907+}3Av?=>`rA6D1KT)hv|2>%-MDJM1$qhIYshlKUK|jV+RC5ACYX0B$ zPlVwO85ew>d@RjD4C9A0!iriPhc!#(wndF&{#BH3YVA&p%l&g;ozM%%JcRX}%F8MA z441Y5M#VWuq;;#T77bx9Dt|dkH5`w<s7zo%*o&1$S^^2eR9B@1Gs1|rZk3_uGnil` z+Il?t;(*@umnKk32=2M8lJXJ?AL3T04I0CSxHXs&I#HI55yygni#>d3y#S32$&C1i z&pK~hCVWw6ftG-uinD(RO*p8S34x60W%a-{5>%bnuw)QAViM7#AGgW6m>()0|EQJc zV$M@ne+1l#M}j-?S_@!Coy-Dv;QGk+`Xd3qF=rvv1_8-*38L1BDH=8dZmj~q2}pJT z5^x)T1oN3TrB;E$U#AHl#}x^Zr3<r4-aT=V%|EP3dEP$qrBPAt4|)`jZV<>NUs0U@ zG5j;e+nYQ-<y5o-J<3+{`Z;=j{wH*QrYOhDu%b<<MXSYCVdk3qg37ud=<WP2tB}oq zaBHmFgGSR3O5j!*j%qN11a395AmA!TuToN`xp2$~sk?5E13jO?1S8#bM&bfx8TFgX zEM!+<23PrqETN>;;?cB00%o;%EHfeuty;r~V?n^RF=_P{SsGaoGm>coa@Cg!hjpTz zSFtz$v0gyn7BGN{nGh&doMv8GS?eF``B!G}509)0!fq}zl3lezIH)mUkSY+=^A~}z z3J8>Gi}CPo6dQ;e?Y11hUYgnEB~u#bQKLr2b@X<s##KI@_qP7^aISZjoGZjXY}Ifw zYGA58UTz|5rcSf8-#Et-`kaI_eXOKRM-jH1{4@hH+?G>-1x48Ms^=U+n?43EUJWK> zi8g!82In)F=m@yj!)*nJKS~9Q;GtL>Z9>%|vdGl%tELWi$YyF_SP<4m`^!=sBZG>t zHqAzv8VSNwvSvWBgz8Ly+;W;ahVVt5x;d8OpOYHHsKTigGa*x|z{NNgg!-IRwlbqX zqu!>OP$RYJcfx@U$N~aEJpmy!ff)UsBj_}Hso0siN?GkTE_V%mAD_KuwkF|y{h^yP z-YDj_YwP%=Sid|$-eXKw_Bl7+(A1Qi>Jh!{{1_bQvaL9;rJv#c=d)g3lx0fU%9Ci? znKW>L)9p&x<`u`~JHd(j@^k9N6Km0<J7rcLu+t9R|Kkz%v>p(?{Ky%cw$o0hBO-a# znGf9=hw1;v$M5cGh@;e_esEmAD3=9+ll5rk-z6}97eJ8Z^)GXT)?-fa`s4UFDG_97 z*S8iS?8cC?-<DX+DejNBJwg2zTa+s4SL6-oj!Bn+atHOLd9GUYko}1<ocs~+!h4k? z(V_Hdf2x4%^|~LYh??vrofJy!*N*-Zwt1;s*D~aGp-c4;pVYiawmg)~qi;fZjZsg? zA5QJJnwZUfrSNIDW9fwN+te<_Ek8%y5{M;wp0D<noOJj=A<vYxmEM>e9axxaQXH{a zc=O%+`Tfz;O>GG5C4$fVAJ#tI)^a@x%Eh;vTCM*?72n29^Q!8mCro!+bE~H(pl7Hf zV~E8)UVQs)t2MXAZ`@5D>BizL!GH^pAe*iKEGF`D>Zb2S(<gw9U`8-8H@E;wrumuN z|0CrxdGr~Tz>HVv<V!+XmHajh39=o2SM+~blSUk^I5y>unG2;)T(Sd=JQCXjkLd~e z7-$rJPaG3UoULd3B;QxFHdnL9FbBF<k^E5A*0QBn=9O!R?&}X%YK4P4dee1vzbPz) z1m2Cn?bktu>v0Isk?yqv4m1Og#<c@z7NmR4O#E&{W0)RrnL*457oo?&znlr?jL_pz zzvi5V$dHJAS7WhFG(mU?sibWbp$=3DXVZdMP{B4)Uq&1Y0xmz5H2)A98HO2!IPceC z52vbQ2w&8Rx*JixUq?xqCLC1Egg}P+vU=be(Fb(cev<(Xl|?b484`Iq-+1d(uO?a_ zz&2%XYq!w(b{Hk<7=ew*L$<444fu^YYnv`%qXxK#fr?AF#O6rfHlE8C-s<Tl4>?E4 z+Em(gMa{QvUEj9T#q`NSJb%oWTFuGE<W!&NWlyHyQIU=HNpR`u@IOCA@}k^cl&yTm zr9JHe7kF+4ul28Z5Z?)&<(EGJFFp&4a_y8^`RGo2od1sx$KXHOl@GJvIiB|18xhE> z&ipvfcufC4ey|7s(Q;7_5x|4^qFfdPp4p?BPbn797DCkjo%S|m^E)Bo+vIG@mN;Cs z26=;iRc#OBc!U++&W%zQIiCjt(E>4L7WC_11nP5j)b_dA`NsNRQBtF&#c@@&YF&yN zw)+l^KOP`y^~JTNw-c@is(#71>w{|Z^toK~>&+=2jc>WVo6-l#;}e56YFFF51$9F- zJEf<_J*G+V!*hjw&4#mPEs84B@!sT$Gd&jDyf7-$0U>lGirXziGX#s^cFVFLQJi%2 z8AHO^Y2cEMWkNj!)#<fxK7)ylfNPToPO&Y9z^C!d9=co77`BA=&$EY92V&^`^GFti zx?57lh+{#(Rla{-Nts55V@8!guAd539Ygq{PVAW;qitRZ!c^hZikXlKRp4SA3o6*= z<-0P2Z1VIjC8OSR$j@LZr7ytqWw0wAUnORn<>MnC|1e7SeFjgd=dWKc$wm*Y72Yi1 zqhzW~ziTx|RsEau(Q<xUsw%h@T?kA&;x#YHb>mM=bwZFxAb7EphOqpqU#h4E@S3D5 zfdygtYmA)!Oc18JYAl!$Ml^7n3_YL01S3)Ki%9+<z3ZFJpc9X9-_I*4FQM?$JnFPT zW7ugP4Q7PyJI}_5V?n^h9u9utNh3otBk&cDgpJFDFX}9C`qQr({A!dY98}DNKt}Yk zdf*xfH3@5elL6jlJr53mwfyw;52MqLNXAAaBC|3t67=+~AW^kobF-92V2xgB&B$!A z(23+liK>M<A~V6OSYactf=fGo%|%H~_;{Uom>o6Wb$x8)_{g-Rg2(kM`||7>eeRDh z{8?Y@w5mn-S=&IW&yMWFs0*o0JF|H;T3(|6ex*8oA+`L>D^*?E2)UivJuR4h`09mJ z+;7~6i<MuovjkJQbX%+-K<?4<(&6t{O3L&JVB=02GY(t;CDZ&2_y0`EDvv(nVKC!c zn0!entCHWPS%GZM-xd8|)`U}Fskr|uN}F%G1yU2DsK-Bp&9|2}W#2U%?0A=sw*4ke zHD7)FGXkse3z<bXPv>u+>kybDD;M_@4GpTs@p8$f{0lXa3-;*)L~z(<JDodV`)f|c ztYO^{S*4$X4hxJa#F>sE!}B)?(2;KcF$bD~Pow`Bng!|h+lj{%HiqQ`mmS26a1r?% z_?I)moDuna>iynnh#S(eAG<6hToZ(sP<7`f5$XU%sOk)6K?M@7zKl2)1YCaAodF>< zG7K{cbv7Mi52vbQ2w&8RiYY8N9aB=K2?rH3A&{ZItRA>VwAmQjZ!#)n5v~}~8`9Cg z5e|w0H3EU4p53w%u0S9Y!hS@3Szao<Dl6B5te4v!M*9v;g~ZeOD<K|eE;T-djZU5N zo%YFdR`45_@|}3<S8FOp+q!R$=6Mjl`hl0`uJFkdiVEd9sBdNmT2o)o^~f`zeI<xX z-UGanNm{E(^~^aH41xFXXy47LfZ~r)U)ii3#DaJ4Y%110cFo1%EL+@&jaloSx^jVU z4S{#|EKJ+nh~jT>U=sY9F*F!7R#3fBQl78fhz<tlfFsNG*T3!E6Qcp$84Y>;h9@62 zkEatu#<T*x6dSzHCP{B@g}mAoXDbw5c?6X>p8YX$fXGF;>QPH7X&@Yw?`ys!H*zRA zDH)25(;^UPsK8y-7eh5PS-7hvupr>_8$1*cLUUo5Q7|@6>kB=f!2~00T$7P|jmcB_ zMBMZvWV1G>z!K8Xv=pZel$13sAr{oC&B?zM$H<_fR&8E&%|mD!8LtKta!Uhpqn8PX zbrOaSZAwbsA?vOR44`5r1WGlcnO9bpn!H11WrkeaXKh}Td}8_Zqm{yet(hv2T2CWR z8wg}V=$S`sD@vuW%5T=9Qr3f}_V<emUVHSNJXL!2-#6{OQfB0c)#;lC+BfWQO=*@? zB)vi1&+X~hJ|T8RSi<35wj*g(`^2xVK-BlZta^My@%wcdc0zdt-ae#T!N-p|kf*xV zIe7Z$lmB$k6skGi{Av2JjXY=PxZ{pIp{E1!<ZDw6n-^x$!h$+-NbL!3jrYRni!_AV z8CrIMYA}IzhBmSw;3~f;r=(1C;g}Ip_r0(KJ)gk@Bi;8V;yW8M>hD!r92Uf+-1HAw zLP_6_N7Dugm~Y2pnGxaT%{7cT76e=ylfG@0rI7_OqZ4gFuKF_Juuk+Pxk{Pq8A8*w zS)XR(Zk!}lgub!-)HgeSqzyInT5N_?aJ0*#N8~B#%(QFd^i1Ea;ZiT@Q=XUE^Sqo) z1Rnkx?cH15ZuU><4ekkVf%!A&pYwRRg}&o+sDqik_O*@nF}amCg+8VD68;QL2h!2D z($aG`(?d@uaDlt&@E$SkCxU_cgQXR+fn@T*srKZ@;|>%nXi66oQ_3koyYQl>bbU>h z8|!{uB1D%`eSVBc*jV?g)uKNg+5YR&7Z5@pDOJ*q2%nv@G+(Pxe|n|tKsplPBN;oF z+IXCH!F@CgFsE3Fvj||&5@Jg^`RS?{MlctZ9r$=Z(p4>=QoaqaN6)2F*+b@rGwM^i z))k){?OvdypdLSfzPa9<N$Dc@r93TeDNgc8evu}Cnv#0;xP(O6M*c=BI5`q8mRtHG z?0m13vWJZTKF4n+zkA!%OR;nx&z7n2o6v$*LBFAD`>$FH+C^>9i()1|C6;JSNkrF` z2AR_?kFax5xR0fex(5t7nL=ZIc<O$s4aWK$LV*n8TvR!T0ijKj3lg!k3zZy+SkQ8h z_c?TRN-V*Ig$@n{F@TlI!$gOP`CqdxhFVk1pe5!0K)FL5O%7E#mU4b@h${k1X|$L> zok*md|Jt$79J=!E5%%ac)%IP-F`xH=FD-4=F37pVgSzr=$8XGayN)MX-;Zu0?K<wq z6uoH9{#%{!X<yQG$=~1$QU4d*3BnNhh2drm{1>}uGB!jk^r=Al?W8d+pEncF+Dgy3 z#8_Xms`y|_$`a7BCeL}H>bQrs%r|FW3ar1kiJL^ZXGx+c9?|wH;Mk0~gsHw5ETX+r zR)U7G>X*J$Q4Nx@>X!&C2&>*|BylN0nCfb^U`7~G?VU38d<GMYM71TO)o1jsCs{!; zFL9<Xm6VrIcnYsNZO|B&!mGiI&}J{$7;!8JxY)x}I0a~ANM<BBTy=5NGU1Cl3nVW2 zRbLDUp$W&ZAdnHgtRA>VLe0gszsU%7Hh+oKO|lY?c?pCI4sWD>8T|-pUP-TwU4r~{ zQdcU}%T4~sji^|@(l+7XBIW1^<t?9ecY1eG3_fv7om+F&`a!n9b%oRE##e�<TWF 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 %|OBt__ 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 literal 0 HcmV?d00001 diff --git a/packages/foundry/lib/openzeppelin-contracts/audits/README.md b/packages/foundry/lib/openzeppelin-contracts/audits/README.md index c629f51..369d064 100644 --- a/packages/foundry/lib/openzeppelin-contracts/audits/README.md +++ b/packages/foundry/lib/openzeppelin-contracts/audits/README.md @@ -2,6 +2,7 @@ | Date | Version | Commit | Auditor | Scope | Links | | ------------ | ------- | --------- | ------------ | -------------------- | ----------------------------------------------------------- | +| October 2023 | v5.0.0 | `b5a3e69` | OpenZeppelin | v5.0 Changes | [๐Ÿ”—](./2023-10-v5.0.pdf) | | May 2023 | v4.9.0 | `91df66c` | OpenZeppelin | v4.9 Changes | [๐Ÿ”—](./2023-05-v4.9.pdf) | | October 2022 | v4.8.0 | `14f98db` | OpenZeppelin | ERC4626, Checkpoints | [๐Ÿ”—](./2022-10-ERC4626.pdf) [๐Ÿ”—](./2022-10-Checkpoints.pdf) | | October 2018 | v2.0.0 | `dac5bcc` | LevelK | Everything | [๐Ÿ”—](./2018-10.pdf) | diff --git a/packages/foundry/lib/openzeppelin-contracts/certora/diff/access_manager_AccessManager.sol.patch b/packages/foundry/lib/openzeppelin-contracts/certora/diff/access_manager_AccessManager.sol.patch new file mode 100644 index 0000000..29ff923 --- /dev/null +++ b/packages/foundry/lib/openzeppelin-contracts/certora/diff/access_manager_AccessManager.sol.patch @@ -0,0 +1,97 @@ +--- access/manager/AccessManager.sol 2023-10-05 12:17:09.694051809 -0300 ++++ access/manager/AccessManager.sol 2023-10-05 12:26:18.498688718 -0300 +@@ -6,7 +6,6 @@ + import {IAccessManaged} from "./IAccessManaged.sol"; + import {Address} from "../../utils/Address.sol"; + import {Context} from "../../utils/Context.sol"; +-import {Multicall} from "../../utils/Multicall.sol"; + import {Math} from "../../utils/math/Math.sol"; + import {Time} from "../../utils/types/Time.sol"; + +@@ -57,7 +56,8 @@ + * mindful of the danger associated with functions such as {{Ownable-renounceOwnership}} or + * {{AccessControl-renounceRole}}. + */ +-contract AccessManager is Context, Multicall, IAccessManager { ++// NOTE: The FV version of this contract doesn't include Multicall because CVL HAVOCs on any `delegatecall`. ++contract AccessManager is Context, IAccessManager { + using Time for *; + + // Structure that stores the details for a target contract. +@@ -105,7 +105,7 @@ + + // Used to identify operations that are currently being executed via {execute}. + // This should be transient storage when supported by the EVM. +- bytes32 private _executionId; ++ bytes32 internal _executionId; // private โ†’ internal for FV + + /** + * @dev Check that the caller is authorized to perform the operation, following the restrictions encoded in +@@ -253,6 +253,11 @@ + _setGrantDelay(roleId, newDelay); + } + ++ // Exposed for FV ++ function _getTargetAdminDelayFull(address target) internal view virtual returns (uint32, uint32, uint48) { ++ return _targets[target].adminDelay.getFull(); ++ } ++ + /** + * @dev Internal version of {grantRole} without access control. Returns true if the role was newly granted. + * +@@ -287,6 +292,11 @@ + return newMember; + } + ++ // Exposed for FV ++ function _getRoleGrantDelayFull(uint64 roleId) internal view virtual returns (uint32, uint32, uint48) { ++ return _roles[roleId].grantDelay.getFull(); ++ } ++ + /** + * @dev Internal version of {revokeRole} without access control. This logic is also used by {renounceRole}. + * Returns true if the role was previously granted. +@@ -586,7 +596,7 @@ + /** + * @dev Check if the current call is authorized according to admin logic. + */ +- function _checkAuthorized() private { ++ function _checkAuthorized() internal virtual { // private โ†’ internal virtual for FV + address caller = _msgSender(); + (bool immediate, uint32 delay) = _canCallSelf(caller, _msgData()); + if (!immediate) { +@@ -609,7 +619,7 @@ + */ + function _getAdminRestrictions( + bytes calldata data +- ) private view returns (bool restricted, uint64 roleAdminId, uint32 executionDelay) { ++ ) internal view returns (bool restricted, uint64 roleAdminId, uint32 executionDelay) { // private โ†’ internal for FV + if (data.length < 4) { + return (false, 0, 0); + } +@@ -662,7 +672,7 @@ + address caller, + address target, + bytes calldata data +- ) private view returns (bool immediate, uint32 delay) { ++ ) internal view returns (bool immediate, uint32 delay) { // private โ†’ internal for FV + if (target == address(this)) { + return _canCallSelf(caller, data); + } else { +@@ -716,14 +726,14 @@ + /** + * @dev Extracts the selector from calldata. Panics if data is not at least 4 bytes + */ +- function _checkSelector(bytes calldata data) private pure returns (bytes4) { ++ function _checkSelector(bytes calldata data) internal pure returns (bytes4) { // private โ†’ internal for FV + return bytes4(data[0:4]); + } + + /** + * @dev Hashing function for execute protection + */ +- function _hashExecutionId(address target, bytes4 selector) private pure returns (bytes32) { ++ function _hashExecutionId(address target, bytes4 selector) internal pure returns (bytes32) { // private โ†’ internal for FV + return keccak256(abi.encode(target, selector)); + } + } diff --git a/packages/foundry/lib/openzeppelin-contracts/contracts/access/AccessControl.sol b/packages/foundry/lib/openzeppelin-contracts/contracts/access/AccessControl.sol index 47ce7d8..3e3341e 100644 --- a/packages/foundry/lib/openzeppelin-contracts/contracts/access/AccessControl.sol +++ b/packages/foundry/lib/openzeppelin-contracts/contracts/access/AccessControl.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: MIT -// OpenZeppelin Contracts (last updated v5.0.0-rc.0) (access/AccessControl.sol) +// OpenZeppelin Contracts (last updated v5.0.0) (access/AccessControl.sol) pragma solidity ^0.8.20; diff --git a/packages/foundry/lib/openzeppelin-contracts/contracts/access/IAccessControl.sol b/packages/foundry/lib/openzeppelin-contracts/contracts/access/IAccessControl.sol index 35c5ff5..2ac89ca 100644 --- a/packages/foundry/lib/openzeppelin-contracts/contracts/access/IAccessControl.sol +++ b/packages/foundry/lib/openzeppelin-contracts/contracts/access/IAccessControl.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: MIT -// OpenZeppelin Contracts (last updated v5.0.0-rc.0) (access/IAccessControl.sol) +// OpenZeppelin Contracts (last updated v5.0.0) (access/IAccessControl.sol) pragma solidity ^0.8.20; diff --git a/packages/foundry/lib/openzeppelin-contracts/contracts/access/Ownable.sol b/packages/foundry/lib/openzeppelin-contracts/contracts/access/Ownable.sol index 6738b72..bd96f66 100644 --- a/packages/foundry/lib/openzeppelin-contracts/contracts/access/Ownable.sol +++ b/packages/foundry/lib/openzeppelin-contracts/contracts/access/Ownable.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: MIT -// OpenZeppelin Contracts (last updated v5.0.0-rc.0) (access/Ownable.sol) +// OpenZeppelin Contracts (last updated v5.0.0) (access/Ownable.sol) pragma solidity ^0.8.20; diff --git a/packages/foundry/lib/openzeppelin-contracts/contracts/access/Ownable2Step.sol b/packages/foundry/lib/openzeppelin-contracts/contracts/access/Ownable2Step.sol index 90ad840..f0427e2 100644 --- a/packages/foundry/lib/openzeppelin-contracts/contracts/access/Ownable2Step.sol +++ b/packages/foundry/lib/openzeppelin-contracts/contracts/access/Ownable2Step.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: MIT -// OpenZeppelin Contracts (last updated v5.0.0-rc.0) (access/Ownable2Step.sol) +// OpenZeppelin Contracts (last updated v5.0.0) (access/Ownable2Step.sol) pragma solidity ^0.8.20; diff --git a/packages/foundry/lib/openzeppelin-contracts/contracts/access/README.adoc b/packages/foundry/lib/openzeppelin-contracts/contracts/access/README.adoc index c40b8db..ba9c02f 100644 --- a/packages/foundry/lib/openzeppelin-contracts/contracts/access/README.adoc +++ b/packages/foundry/lib/openzeppelin-contracts/contracts/access/README.adoc @@ -32,8 +32,12 @@ This directory provides ways to restrict who can access the functions of a contr {{IAuthority}} +{{IAccessManager}} + {{AccessManager}} +{{IAccessManaged}} + {{AccessManaged}} -{{AccessManagerAdapter}} +{{AuthorityUtils}} diff --git a/packages/foundry/lib/openzeppelin-contracts/contracts/access/extensions/AccessControlDefaultAdminRules.sol b/packages/foundry/lib/openzeppelin-contracts/contracts/access/extensions/AccessControlDefaultAdminRules.sol index f0f63bd..ef71a64 100644 --- a/packages/foundry/lib/openzeppelin-contracts/contracts/access/extensions/AccessControlDefaultAdminRules.sol +++ b/packages/foundry/lib/openzeppelin-contracts/contracts/access/extensions/AccessControlDefaultAdminRules.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: MIT -// OpenZeppelin Contracts (last updated v5.0.0-rc.0) (access/extensions/AccessControlDefaultAdminRules.sol) +// OpenZeppelin Contracts (last updated v5.0.0) (access/extensions/AccessControlDefaultAdminRules.sol) pragma solidity ^0.8.20; diff --git a/packages/foundry/lib/openzeppelin-contracts/contracts/access/extensions/AccessControlEnumerable.sol b/packages/foundry/lib/openzeppelin-contracts/contracts/access/extensions/AccessControlEnumerable.sol index 39ab221..151de05 100644 --- a/packages/foundry/lib/openzeppelin-contracts/contracts/access/extensions/AccessControlEnumerable.sol +++ b/packages/foundry/lib/openzeppelin-contracts/contracts/access/extensions/AccessControlEnumerable.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: MIT -// OpenZeppelin Contracts (last updated v5.0.0-rc.0) (access/extensions/AccessControlEnumerable.sol) +// OpenZeppelin Contracts (last updated v5.0.0) (access/extensions/AccessControlEnumerable.sol) pragma solidity ^0.8.20; diff --git a/packages/foundry/lib/openzeppelin-contracts/contracts/access/extensions/IAccessControlDefaultAdminRules.sol b/packages/foundry/lib/openzeppelin-contracts/contracts/access/extensions/IAccessControlDefaultAdminRules.sol index b2c6fc8..73531fa 100644 --- a/packages/foundry/lib/openzeppelin-contracts/contracts/access/extensions/IAccessControlDefaultAdminRules.sol +++ b/packages/foundry/lib/openzeppelin-contracts/contracts/access/extensions/IAccessControlDefaultAdminRules.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: MIT -// OpenZeppelin Contracts (last updated v5.0.0-rc.0) (access/extensions/IAccessControlDefaultAdminRules.sol) +// OpenZeppelin Contracts (last updated v5.0.0) (access/extensions/IAccessControlDefaultAdminRules.sol) pragma solidity ^0.8.20; diff --git a/packages/foundry/lib/openzeppelin-contracts/contracts/access/extensions/IAccessControlEnumerable.sol b/packages/foundry/lib/openzeppelin-contracts/contracts/access/extensions/IAccessControlEnumerable.sol index 4dc8da4..a39d051 100644 --- a/packages/foundry/lib/openzeppelin-contracts/contracts/access/extensions/IAccessControlEnumerable.sol +++ b/packages/foundry/lib/openzeppelin-contracts/contracts/access/extensions/IAccessControlEnumerable.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: MIT -// OpenZeppelin Contracts (last updated v5.0.0-rc.0) (access/extensions/IAccessControlEnumerable.sol) +// OpenZeppelin Contracts (last updated v5.0.0) (access/extensions/IAccessControlEnumerable.sol) pragma solidity ^0.8.20; diff --git a/packages/foundry/lib/openzeppelin-contracts/contracts/access/manager/AccessManaged.sol b/packages/foundry/lib/openzeppelin-contracts/contracts/access/manager/AccessManaged.sol index 6797749..b5f4524 100644 --- a/packages/foundry/lib/openzeppelin-contracts/contracts/access/manager/AccessManaged.sol +++ b/packages/foundry/lib/openzeppelin-contracts/contracts/access/manager/AccessManaged.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: MIT -// OpenZeppelin Contracts (last updated v5.0.0-rc.1) (access/manager/AccessManaged.sol) +// OpenZeppelin Contracts (last updated v5.0.0) (access/manager/AccessManaged.sol) pragma solidity ^0.8.20; @@ -58,16 +58,12 @@ abstract contract AccessManaged is Context, IAccessManaged { _; } - /** - * @dev Returns the current authority. - */ + /// @inheritdoc IAccessManaged function authority() public view virtual returns (address) { return _authority; } - /** - * @dev Transfers control to a new authority. The caller must be the current authority. - */ + /// @inheritdoc IAccessManaged function setAuthority(address newAuthority) public virtual { address caller = _msgSender(); if (caller != authority()) { @@ -79,11 +75,7 @@ abstract contract AccessManaged is Context, IAccessManaged { _setAuthority(newAuthority); } - /** - * @dev Returns true only in the context of a delayed restricted call, at the moment that the scheduled operation is - * being consumed. Prevents denial of service for delayed restricted calls in the case that the contract performs - * attacker controlled calls. - */ + /// @inheritdoc IAccessManaged function isConsumingScheduledOp() public view returns (bytes4) { return _consumingSchedule ? this.isConsumingScheduledOp.selector : bytes4(0); } diff --git a/packages/foundry/lib/openzeppelin-contracts/contracts/access/manager/AccessManager.sol b/packages/foundry/lib/openzeppelin-contracts/contracts/access/manager/AccessManager.sol index 2b5b5a0..1e4afa4 100644 --- a/packages/foundry/lib/openzeppelin-contracts/contracts/access/manager/AccessManager.sol +++ b/packages/foundry/lib/openzeppelin-contracts/contracts/access/manager/AccessManager.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: MIT -// OpenZeppelin Contracts (last updated v5.0.0-rc.2) (access/manager/AccessManager.sol) +// OpenZeppelin Contracts (last updated v5.0.0) (access/manager/AccessManager.sol) pragma solidity ^0.8.20; @@ -14,23 +14,32 @@ import {Time} from "../../utils/types/Time.sol"; /** * @dev AccessManager is a central contract to store the permissions of a system. * - * The smart contracts under the control of an AccessManager instance will have a set of "restricted" functions, and the - * exact details of how access is restricted for each of those functions is configurable by the admins of the instance. - * These restrictions are expressed in terms of "roles". + * A smart contract under the control of an AccessManager instance is known as a target, and will inherit from the + * {AccessManaged} contract, be connected to this contract as its manager and implement the {AccessManaged-restricted} + * modifier on a set of functions selected to be permissioned. Note that any function without this setup won't be + * effectively restricted. * - * An AccessManager instance will define a set of roles. Accounts can be added into any number of these roles. Each of - * them defines a role, and may confer access to some of the restricted functions in the system, as configured by admins - * through the use of {setFunctionAllowedRoles}. + * The restriction rules for such functions are defined in terms of "roles" identified by an `uint64` and scoped + * by target (`address`) and function selectors (`bytes4`). These roles are stored in this contract and can be + * configured by admins (`ADMIN_ROLE` members) after a delay (see {getTargetAdminDelay}). * - * Note that a function in a target contract may become permissioned in this way only when: 1) said contract is - * {AccessManaged} and is connected to this contract as its manager, and 2) said function is decorated with the - * `restricted` modifier. + * For each target contract, admins can configure the following without any delay: * - * There is a special role defined by default named "public" which all accounts automatically have. + * * The target's {AccessManaged-authority} via {updateAuthority}. + * * Close or open a target via {setTargetClosed} keeping the permissions intact. + * * The roles that are allowed (or disallowed) to call a given function (identified by its selector) through {setTargetFunctionRole}. * - * In addition to the access rules defined by each target's functions being assigned to roles, then entire target can - * be "closed". This "closed" mode is set/unset by the admin using {setTargetClosed} and can be used to lock a contract - * while permissions are being (re-)configured. + * By default every address is member of the `PUBLIC_ROLE` and every target function is restricted to the `ADMIN_ROLE` until configured otherwise. + * Additionally, each role has the following configuration options restricted to this manager's admins: + * + * * A role's admin role via {setRoleAdmin} who can grant or revoke roles. + * * A role's guardian role via {setRoleGuardian} who's allowed to cancel operations. + * * A delay in which a role takes effect after being granted through {setGrantDelay}. + * * A delay of any target's admin action via {setTargetAdminDelay}. + * * A role label for discoverability purposes with {labelRole}. + * + * Any account can be added and removed into any number of these roles by using the {grantRole} and {revokeRole} functions + * restricted to each role's admin (see {getRoleAdmin}). * * Since all the permissions of the managed system can be modified by the admins of this instance, it is expected that * they will be highly secured (e.g., a multisig or a well-configured DAO). @@ -61,28 +70,30 @@ contract AccessManager is Context, Multicall, IAccessManager { // Structure that stores the details for a role/account pair. This structures fit into a single slot. struct Access { - // Timepoint at which the user gets the permission. If this is either 0, or in the future, the role - // permission is not available. + // Timepoint at which the user gets the permission. + // If this is either 0 or in the future, then the role permission is not available. uint48 since; // Delay for execution. Only applies to restricted() / execute() calls. Time.Delay delay; } - // Structure that stores the details of a role, including: - // - the members of the role - // - the admin role (that can grant or revoke permissions) - // - the guardian role (that can cancel operations targeting functions that need this role) - // - the grand delay + // Structure that stores the details of a role. struct Role { + // Members of the role. mapping(address user => Access access) members; + // Admin who can grant or revoke permissions. uint64 admin; + // Guardian who can cancel operations targeting functions that need this role. uint64 guardian; + // Delay in which the role takes effect after being granted. Time.Delay grantDelay; } // Structure that stores the details for a scheduled operation. This structure fits into a single slot. struct Schedule { + // Moment at which the operation can be executed. uint48 timepoint; + // Operation nonce to allow third-party contracts to identify the operation. uint32 nonce; } @@ -93,6 +104,7 @@ contract AccessManager is Context, Multicall, IAccessManager { mapping(uint64 roleId => Role) private _roles; mapping(bytes32 operationId => Schedule) private _schedules; + // Used to identify operations that are currently being executed via {execute}. // This should be transient storage when supported by the EVM. bytes32 private _executionId; @@ -115,22 +127,7 @@ contract AccessManager is Context, Multicall, IAccessManager { } // =================================================== GETTERS ==================================================== - /** - * @dev Check if an address (`caller`) is authorised to call a given function on a given contract directly (with - * no restriction). Additionally, it returns the delay needed to perform the call indirectly through the {schedule} - * & {execute} workflow. - * - * This function is usually called by the targeted contract to control immediate execution of restricted functions. - * Therefore we only return true is the call can be performed without any delay. If the call is subject to a delay, - * then the function should return false, and the caller should schedule the operation for future execution. - * - * We may be able to hash the operation, and check if the call was scheduled, but we would not be able to cleanup - * the schedule, leaving the possibility of multiple executions. Maybe this function should not be view? - * - * NOTE: The IAuthority interface does not include the `uint32` delay. This is an extension of that interface that - * is backward compatible. Some contracts may thus ignore the second return argument. In that case they will fail - * to identify the indirect workflow, and will consider calls that require a delay to be forbidden. - */ + /// @inheritdoc IAccessManager function canCall( address caller, address target, @@ -149,82 +146,47 @@ contract AccessManager is Context, Multicall, IAccessManager { } } - /** - * @dev Expiration delay for scheduled proposals. Defaults to 1 week. - */ + /// @inheritdoc IAccessManager function expiration() public view virtual returns (uint32) { return 1 weeks; } - /** - * @dev Minimum setback for all delay updates, with the exception of execution delays, which - * can be increased without setback (and in the event of an accidental increase can be reset - * via {revokeRole}). Defaults to 5 days. - */ + /// @inheritdoc IAccessManager function minSetback() public view virtual returns (uint32) { return 5 days; } - /** - * @dev Get the mode under which a contract is operating. - */ + /// @inheritdoc IAccessManager function isTargetClosed(address target) public view virtual returns (bool) { return _targets[target].closed; } - /** - * @dev Get the role required to call a function. - */ + /// @inheritdoc IAccessManager function getTargetFunctionRole(address target, bytes4 selector) public view virtual returns (uint64) { return _targets[target].allowedRoles[selector]; } - /** - * @dev Get the admin delay for a target contract. Changes to contract configuration are subject to this delay. - */ + /// @inheritdoc IAccessManager function getTargetAdminDelay(address target) public view virtual returns (uint32) { return _targets[target].adminDelay.get(); } - /** - * @dev Get the id of the role that acts as an admin for given role. - * - * The admin permission is required to grant the role, revoke the role and update the execution delay to execute - * an operation that is restricted to this role. - */ + /// @inheritdoc IAccessManager function getRoleAdmin(uint64 roleId) public view virtual returns (uint64) { return _roles[roleId].admin; } - /** - * @dev Get the role that acts as a guardian for a given role. - * - * The guardian permission allows canceling operations that have been scheduled under the role. - */ + /// @inheritdoc IAccessManager function getRoleGuardian(uint64 roleId) public view virtual returns (uint64) { return _roles[roleId].guardian; } - /** - * @dev Get the role current grant delay, that value may change at any point, without an event emitted, following - * a call to {setGrantDelay}. Changes to this value, including effect timepoint are notified by the - * {RoleGrantDelayChanged} event. - */ + /// @inheritdoc IAccessManager function getRoleGrantDelay(uint64 roleId) public view virtual returns (uint32) { return _roles[roleId].grantDelay.get(); } - /** - * @dev Get the access details for a given account for a given role. These details include the timepoint at which - * membership becomes active, and the delay applied to all operation by this user that requires this permission - * level. - * - * Returns: - * [0] Timestamp at which the account membership becomes valid. 0 means role is not granted. - * [1] Current execution delay for the account. - * [2] Pending execution delay for the account. - * [3] Timestamp at which the pending execution delay will become active. 0 means no delay update is scheduled. - */ + /// @inheritdoc IAccessManager function getAccess( uint64 roleId, address account @@ -237,10 +199,7 @@ contract AccessManager is Context, Multicall, IAccessManager { return (since, currentDelay, pendingDelay, effect); } - /** - * @dev Check if a given account currently had the permission level corresponding to a given role. Note that this - * permission might be associated with a delay. {getAccess} can provide more details. - */ + /// @inheritdoc IAccessManager function hasRole( uint64 roleId, address account @@ -254,11 +213,7 @@ contract AccessManager is Context, Multicall, IAccessManager { } // =============================================== ROLE MANAGEMENT =============================================== - /** - * @dev Give a label to a role, for improved role discoverabily by UIs. - * - * Emits a {RoleLabel} event. - */ + /// @inheritdoc IAccessManager function labelRole(uint64 roleId, string calldata label) public virtual onlyAuthorized { if (roleId == ADMIN_ROLE || roleId == PUBLIC_ROLE) { revert AccessManagerLockedRole(roleId); @@ -266,53 +221,17 @@ contract AccessManager is Context, Multicall, IAccessManager { emit RoleLabel(roleId, label); } - /** - * @dev Add `account` to `roleId`, or change its execution delay. - * - * This gives the account the authorization to call any function that is restricted to this role. An optional - * execution delay (in seconds) can be set. If that delay is non 0, the user is required to schedule any operation - * that is restricted to members this role. The user will only be able to execute the operation after the delay has - * passed, before it has expired. During this period, admin and guardians can cancel the operation (see {cancel}). - * - * If the account has already been granted this role, the execution delay will be updated. This update is not - * immediate and follows the delay rules. For example, If a user currently has a delay of 3 hours, and this is - * called to reduce that delay to 1 hour, the new delay will take some time to take effect, enforcing that any - * operation executed in the 3 hours that follows this update was indeed scheduled before this update. - * - * Requirements: - * - * - the caller must be an admin for the role (see {getRoleAdmin}) - * - * Emits a {RoleGranted} event - */ + /// @inheritdoc IAccessManager function grantRole(uint64 roleId, address account, uint32 executionDelay) public virtual onlyAuthorized { _grantRole(roleId, account, getRoleGrantDelay(roleId), executionDelay); } - /** - * @dev Remove an account from a role, with immediate effect. If the account does not have the role, this call has - * no effect. - * - * Requirements: - * - * - the caller must be an admin for the role (see {getRoleAdmin}) - * - * Emits a {RoleRevoked} event if the account had the role. - */ + /// @inheritdoc IAccessManager function revokeRole(uint64 roleId, address account) public virtual onlyAuthorized { _revokeRole(roleId, account); } - /** - * @dev Renounce role permissions for the calling account, with immediate effect. If the sender is not in - * the role, this call has no effect. - * - * Requirements: - * - * - the caller must be `callerConfirmation`. - * - * Emits a {RoleRevoked} event if the account had the role. - */ + /// @inheritdoc IAccessManager function renounceRole(uint64 roleId, address callerConfirmation) public virtual { if (callerConfirmation != _msgSender()) { revert AccessManagerBadConfirmation(); @@ -320,41 +239,17 @@ contract AccessManager is Context, Multicall, IAccessManager { _revokeRole(roleId, callerConfirmation); } - /** - * @dev Change admin role for a given role. - * - * Requirements: - * - * - the caller must be a global admin - * - * Emits a {RoleAdminChanged} event - */ + /// @inheritdoc IAccessManager function setRoleAdmin(uint64 roleId, uint64 admin) public virtual onlyAuthorized { _setRoleAdmin(roleId, admin); } - /** - * @dev Change guardian role for a given role. - * - * Requirements: - * - * - the caller must be a global admin - * - * Emits a {RoleGuardianChanged} event - */ + /// @inheritdoc IAccessManager function setRoleGuardian(uint64 roleId, uint64 guardian) public virtual onlyAuthorized { _setRoleGuardian(roleId, guardian); } - /** - * @dev Update the delay for granting a `roleId`. - * - * Requirements: - * - * - the caller must be a global admin - * - * Emits a {RoleGrantDelayChanged} event. - */ + /// @inheritdoc IAccessManager function setGrantDelay(uint64 roleId, uint32 newDelay) public virtual onlyAuthorized { _setGrantDelay(roleId, newDelay); } @@ -417,7 +312,10 @@ contract AccessManager is Context, Multicall, IAccessManager { /** * @dev Internal version of {setRoleAdmin} without access control. * - * Emits a {RoleAdminChanged} event + * Emits a {RoleAdminChanged} event. + * + * NOTE: Setting the admin role as the `PUBLIC_ROLE` is allowed, but it will effectively allow + * anyone to set grant or revoke such role. */ function _setRoleAdmin(uint64 roleId, uint64 admin) internal virtual { if (roleId == ADMIN_ROLE || roleId == PUBLIC_ROLE) { @@ -432,7 +330,10 @@ contract AccessManager is Context, Multicall, IAccessManager { /** * @dev Internal version of {setRoleGuardian} without access control. * - * Emits a {RoleGuardianChanged} event + * Emits a {RoleGuardianChanged} event. + * + * NOTE: Setting the guardian role as the `PUBLIC_ROLE` is allowed, but it will effectively allow + * anyone to cancel any scheduled operation for such role. */ function _setRoleGuardian(uint64 roleId, uint64 guardian) internal virtual { if (roleId == ADMIN_ROLE || roleId == PUBLIC_ROLE) { @@ -447,7 +348,7 @@ contract AccessManager is Context, Multicall, IAccessManager { /** * @dev Internal version of {setGrantDelay} without access control. * - * Emits a {RoleGrantDelayChanged} event + * Emits a {RoleGrantDelayChanged} event. */ function _setGrantDelay(uint64 roleId, uint32 newDelay) internal virtual { if (roleId == PUBLIC_ROLE) { @@ -461,15 +362,7 @@ contract AccessManager is Context, Multicall, IAccessManager { } // ============================================= FUNCTION MANAGEMENT ============================================== - /** - * @dev Set the role required to call functions identified by the `selectors` in the `target` contract. - * - * Requirements: - * - * - the caller must be a global admin - * - * Emits a {TargetFunctionRoleUpdated} event per selector. - */ + /// @inheritdoc IAccessManager function setTargetFunctionRole( address target, bytes4[] calldata selectors, @@ -481,24 +374,16 @@ contract AccessManager is Context, Multicall, IAccessManager { } /** - * @dev Internal version of {setFunctionAllowedRole} without access control. + * @dev Internal version of {setTargetFunctionRole} without access control. * - * Emits a {TargetFunctionRoleUpdated} event + * Emits a {TargetFunctionRoleUpdated} event. */ function _setTargetFunctionRole(address target, bytes4 selector, uint64 roleId) internal virtual { _targets[target].allowedRoles[selector] = roleId; emit TargetFunctionRoleUpdated(target, selector, roleId); } - /** - * @dev Set the delay for changing the configuration of a given target contract. - * - * Requirements: - * - * - the caller must be a global admin - * - * Emits a {TargetAdminDelayUpdated} event per selector - */ + /// @inheritdoc IAccessManager function setTargetAdminDelay(address target, uint32 newDelay) public virtual onlyAuthorized { _setTargetAdminDelay(target, newDelay); } @@ -506,7 +391,7 @@ contract AccessManager is Context, Multicall, IAccessManager { /** * @dev Internal version of {setTargetAdminDelay} without access control. * - * Emits a {TargetAdminDelayUpdated} event + * Emits a {TargetAdminDelayUpdated} event. */ function _setTargetAdminDelay(address target, uint32 newDelay) internal virtual { uint48 effect; @@ -516,15 +401,7 @@ contract AccessManager is Context, Multicall, IAccessManager { } // =============================================== MODE MANAGEMENT ================================================ - /** - * @dev Set the closed flag for a contract. - * - * Requirements: - * - * - the caller must be a global admin - * - * Emits a {TargetClosed} event. - */ + /// @inheritdoc IAccessManager function setTargetClosed(address target, bool closed) public virtual onlyAuthorized { _setTargetClosed(target, closed); } @@ -543,38 +420,18 @@ contract AccessManager is Context, Multicall, IAccessManager { } // ============================================== DELAYED OPERATIONS ============================================== - /** - * @dev Return the timepoint at which a scheduled operation will be ready for execution. This returns 0 if the - * operation is not yet scheduled, has expired, was executed, or was canceled. - */ + /// @inheritdoc IAccessManager function getSchedule(bytes32 id) public view virtual returns (uint48) { uint48 timepoint = _schedules[id].timepoint; return _isExpired(timepoint) ? 0 : timepoint; } - /** - * @dev Return the nonce for the latest scheduled operation with a given id. Returns 0 if the operation has never - * been scheduled. - */ + /// @inheritdoc IAccessManager function getNonce(bytes32 id) public view virtual returns (uint32) { return _schedules[id].nonce; } - /** - * @dev Schedule a delayed operation for future execution, and return the operation identifier. It is possible to - * choose the timestamp at which the operation becomes executable as long as it satisfies the execution delays - * required for the caller. The special value zero will automatically set the earliest possible time. - * - * Returns the `operationId` that was scheduled. Since this value is a hash of the parameters, it can reoccur when - * the same parameters are used; if this is relevant, the returned `nonce` can be used to uniquely identify this - * scheduled operation from other occurrences of the same `operationId` in invocations of {execute} and {cancel}. - * - * Emits a {OperationScheduled} event. - * - * NOTE: It is not possible to concurrently schedule more than one operation with the same `target` and `data`. If - * this is necessary, a random byte can be appended to `data` to act as a salt that will be ignored by the target - * contract if it is using standard Solidity ABI encoding. - */ + /// @inheritdoc IAccessManager function schedule( address target, bytes calldata data, @@ -622,15 +479,7 @@ contract AccessManager is Context, Multicall, IAccessManager { } } - /** - * @dev Execute a function that is delay restricted, provided it was properly scheduled beforehand, or the - * execution delay is 0. - * - * Returns the nonce that identifies the previously scheduled operation that is executed, or 0 if the - * operation wasn't previously scheduled (if the caller doesn't have an execution delay). - * - * Emits an {OperationExecuted} event only if the call was scheduled and delayed. - */ + /// @inheritdoc IAccessManager // Reentrancy is not an issue because permissions are checked on msg.sender. Additionally, // _consumeScheduledOp guarantees a scheduled operation is only executed once. // slither-disable-next-line reentrancy-no-eth @@ -667,15 +516,31 @@ contract AccessManager is Context, Multicall, IAccessManager { return nonce; } - /** - * @dev Consume a scheduled operation targeting the caller. If such an operation exists, mark it as consumed - * (emit an {OperationExecuted} event and clean the state). Otherwise, throw an error. - * - * This is useful for contract that want to enforce that calls targeting them were scheduled on the manager, - * with all the verifications that it implies. - * - * Emit a {OperationExecuted} event - */ + /// @inheritdoc IAccessManager + function cancel(address caller, address target, bytes calldata data) public virtual returns (uint32) { + address msgsender = _msgSender(); + bytes4 selector = _checkSelector(data); + + bytes32 operationId = hashOperation(caller, target, data); + if (_schedules[operationId].timepoint == 0) { + revert AccessManagerNotScheduled(operationId); + } else if (caller != msgsender) { + // calls can only be canceled by the account that scheduled them, a global admin, or by a guardian of the required role. + (bool isAdmin, ) = hasRole(ADMIN_ROLE, msgsender); + (bool isGuardian, ) = hasRole(getRoleGuardian(getTargetFunctionRole(target, selector)), msgsender); + if (!isAdmin && !isGuardian) { + revert AccessManagerUnauthorizedCancel(msgsender, caller, target, selector); + } + } + + delete _schedules[operationId].timepoint; // reset the timepoint, keep the nonce + uint32 nonce = _schedules[operationId].nonce; + emit OperationCanceled(operationId, nonce); + + return nonce; + } + + /// @inheritdoc IAccessManager function consumeScheduledOp(address caller, bytes calldata data) public virtual { address target = _msgSender(); if (IAccessManaged(target).isConsumingScheduledOp() != IAccessManaged.isConsumingScheduledOp.selector) { @@ -707,61 +572,13 @@ contract AccessManager is Context, Multicall, IAccessManager { return nonce; } - /** - * @dev Cancel a scheduled (delayed) operation. Returns the nonce that identifies the previously scheduled - * operation that is cancelled. - * - * Requirements: - * - * - the caller must be the proposer, a guardian of the targeted function, or a global admin - * - * Emits a {OperationCanceled} event. - */ - function cancel(address caller, address target, bytes calldata data) public virtual returns (uint32) { - address msgsender = _msgSender(); - bytes4 selector = _checkSelector(data); - - bytes32 operationId = hashOperation(caller, target, data); - if (_schedules[operationId].timepoint == 0) { - revert AccessManagerNotScheduled(operationId); - } else if (caller != msgsender) { - // calls can only be canceled by the account that scheduled them, a global admin, or by a guardian of the required role. - (bool isAdmin, ) = hasRole(ADMIN_ROLE, msgsender); - (bool isGuardian, ) = hasRole(getRoleGuardian(getTargetFunctionRole(target, selector)), msgsender); - if (!isAdmin && !isGuardian) { - revert AccessManagerUnauthorizedCancel(msgsender, caller, target, selector); - } - } - - delete _schedules[operationId].timepoint; // reset the timepoint, keep the nonce - uint32 nonce = _schedules[operationId].nonce; - emit OperationCanceled(operationId, nonce); - - return nonce; - } - - /** - * @dev Hashing function for delayed operations - */ + /// @inheritdoc IAccessManager function hashOperation(address caller, address target, bytes calldata data) public view virtual returns (bytes32) { return keccak256(abi.encode(caller, target, data)); } - /** - * @dev Hashing function for execute protection - */ - function _hashExecutionId(address target, bytes4 selector) private pure returns (bytes32) { - return keccak256(abi.encode(target, selector)); - } - // ==================================================== OTHERS ==================================================== - /** - * @dev Change the AccessManager instance used by a contract that correctly uses this instance. - * - * Requirements: - * - * - the caller must be a global admin - */ + /// @inheritdoc IAccessManager function updateAuthority(address target, address newAuthority) public virtual onlyAuthorized { IAccessManaged(target).setAuthority(newAuthority); } @@ -789,7 +606,7 @@ contract AccessManager is Context, Multicall, IAccessManager { * Returns: * - bool restricted: does this data match a restricted operation * - uint64: which role is this operation restricted to - * - uint32: minimum delay to enforce for that operation (on top of the admin's execution delay) + * - uint32: minimum delay to enforce for that operation (max between operation's delay and admin's execution delay) */ function _getAdminRestrictions( bytes calldata data @@ -835,14 +652,12 @@ contract AccessManager is Context, Multicall, IAccessManager { // =================================================== HELPERS ==================================================== /** - * @dev An extended version of {canCall} for internal use that considers restrictions for admin functions. + * @dev An extended version of {canCall} for internal usage that checks {_canCallSelf} + * when the target is this contract. * * Returns: * - bool immediate: whether the operation can be executed immediately (with no delay) * - uint32 delay: the execution delay - * - * If immediate is true, the delay can be disregarded and the operation can be immediately executed. - * If immediate is false, the operation can be executed if and only if delay is greater than 0. */ function _canCallExtended( address caller, @@ -905,4 +720,11 @@ contract AccessManager is Context, Multicall, IAccessManager { function _checkSelector(bytes calldata data) private pure returns (bytes4) { return bytes4(data[0:4]); } + + /** + * @dev Hashing function for execute protection + */ + function _hashExecutionId(address target, bytes4 selector) private pure returns (bytes32) { + return keccak256(abi.encode(target, selector)); + } } diff --git a/packages/foundry/lib/openzeppelin-contracts/contracts/access/manager/AuthorityUtils.sol b/packages/foundry/lib/openzeppelin-contracts/contracts/access/manager/AuthorityUtils.sol index c2a118e..fb3018c 100644 --- a/packages/foundry/lib/openzeppelin-contracts/contracts/access/manager/AuthorityUtils.sol +++ b/packages/foundry/lib/openzeppelin-contracts/contracts/access/manager/AuthorityUtils.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: MIT -// OpenZeppelin Contracts (last updated v5.0.0-rc.0) (access/manager/AuthorityUtils.sol) +// OpenZeppelin Contracts (last updated v5.0.0) (access/manager/AuthorityUtils.sol) pragma solidity ^0.8.20; diff --git a/packages/foundry/lib/openzeppelin-contracts/contracts/access/manager/IAccessManaged.sol b/packages/foundry/lib/openzeppelin-contracts/contracts/access/manager/IAccessManaged.sol index fad7c5d..95206bd 100644 --- a/packages/foundry/lib/openzeppelin-contracts/contracts/access/manager/IAccessManaged.sol +++ b/packages/foundry/lib/openzeppelin-contracts/contracts/access/manager/IAccessManaged.sol @@ -1,18 +1,32 @@ // SPDX-License-Identifier: MIT -// OpenZeppelin Contracts (last updated v5.0.0-rc.0) (access/manager/IAccessManaged.sol) +// OpenZeppelin Contracts (last updated v5.0.0) (access/manager/IAccessManaged.sol) pragma solidity ^0.8.20; interface IAccessManaged { + /** + * @dev Authority that manages this contract was updated. + */ event AuthorityUpdated(address authority); error AccessManagedUnauthorized(address caller); error AccessManagedRequiredDelay(address caller, uint32 delay); error AccessManagedInvalidAuthority(address authority); + /** + * @dev Returns the current authority. + */ function authority() external view returns (address); + /** + * @dev Transfers control to a new authority. The caller must be the current authority. + */ function setAuthority(address) external; + /** + * @dev Returns true only in the context of a delayed restricted call, at the moment that the scheduled operation is + * being consumed. Prevents denial of service for delayed restricted calls in the case that the contract performs + * attacker controlled calls. + */ function isConsumingScheduledOp() external view returns (bytes4); } diff --git a/packages/foundry/lib/openzeppelin-contracts/contracts/access/manager/IAccessManager.sol b/packages/foundry/lib/openzeppelin-contracts/contracts/access/manager/IAccessManager.sol index 01ecedd..3a6dc73 100644 --- a/packages/foundry/lib/openzeppelin-contracts/contracts/access/manager/IAccessManager.sol +++ b/packages/foundry/lib/openzeppelin-contracts/contracts/access/manager/IAccessManager.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: MIT -// OpenZeppelin Contracts (last updated v5.0.0-rc.0) (access/manager/IAccessManager.sol) +// OpenZeppelin Contracts (last updated v5.0.0) (access/manager/IAccessManager.sol) pragma solidity ^0.8.20; @@ -29,14 +29,53 @@ interface IAccessManager { */ event OperationCanceled(bytes32 indexed operationId, uint32 indexed nonce); + /** + * @dev Informational labelling for a roleId. + */ event RoleLabel(uint64 indexed roleId, string label); + + /** + * @dev Emitted when `account` is granted `roleId`. + * + * NOTE: The meaning of the `since` argument depends on the `newMember` argument. + * If the role is granted to a new member, the `since` argument indicates when the account becomes a member of the role, + * otherwise it indicates the execution delay for this account and roleId is updated. + */ event RoleGranted(uint64 indexed roleId, address indexed account, uint32 delay, uint48 since, bool newMember); + + /** + * @dev Emitted when `account` membership or `roleId` is revoked. Unlike granting, revoking is instantaneous. + */ event RoleRevoked(uint64 indexed roleId, address indexed account); + + /** + * @dev Role acting as admin over a given `roleId` is updated. + */ event RoleAdminChanged(uint64 indexed roleId, uint64 indexed admin); + + /** + * @dev Role acting as guardian over a given `roleId` is updated. + */ event RoleGuardianChanged(uint64 indexed roleId, uint64 indexed guardian); + + /** + * @dev Grant delay for a given `roleId` will be updated to `delay` when `since` is reached. + */ event RoleGrantDelayChanged(uint64 indexed roleId, uint32 delay, uint48 since); + + /** + * @dev Target mode is updated (true = closed, false = open). + */ event TargetClosed(address indexed target, bool closed); + + /** + * @dev Role required to invoke `selector` on `target` is updated to `roleId`. + */ event TargetFunctionRoleUpdated(address indexed target, bytes4 selector, uint64 indexed roleId); + + /** + * @dev Admin delay for a given `target` will be updated to `delay` when `since` is reached. + */ event TargetAdminDelayUpdated(address indexed target, uint32 delay, uint48 since); error AccessManagerAlreadyScheduled(bytes32 operationId); @@ -52,63 +91,302 @@ interface IAccessManager { error AccessManagerUnauthorizedCancel(address msgsender, address caller, address target, bytes4 selector); error AccessManagerInvalidInitialAdmin(address initialAdmin); + /** + * @dev Check if an address (`caller`) is authorised to call a given function on a given contract directly (with + * no restriction). Additionally, it returns the delay needed to perform the call indirectly through the {schedule} + * & {execute} workflow. + * + * This function is usually called by the targeted contract to control immediate execution of restricted functions. + * Therefore we only return true if the call can be performed without any delay. If the call is subject to a + * previously set delay (not zero), then the function should return false and the caller should schedule the operation + * for future execution. + * + * If `immediate` is true, the delay can be disregarded and the operation can be immediately executed, otherwise + * the operation can be executed if and only if delay is greater than 0. + * + * NOTE: The IAuthority interface does not include the `uint32` delay. This is an extension of that interface that + * is backward compatible. Some contracts may thus ignore the second return argument. In that case they will fail + * to identify the indirect workflow, and will consider calls that require a delay to be forbidden. + * + * NOTE: This function does not report the permissions of this manager itself. These are defined by the + * {_canCallSelf} function instead. + */ function canCall( address caller, address target, bytes4 selector ) external view returns (bool allowed, uint32 delay); - function hashOperation(address caller, address target, bytes calldata data) external view returns (bytes32); - + /** + * @dev Expiration delay for scheduled proposals. Defaults to 1 week. + * + * IMPORTANT: Avoid overriding the expiration with 0. Otherwise every contract proposal will be expired immediately, + * disabling any scheduling usage. + */ function expiration() external view returns (uint32); + /** + * @dev Minimum setback for all delay updates, with the exception of execution delays. It + * can be increased without setback (and reset via {revokeRole} in the case event of an + * accidental increase). Defaults to 5 days. + */ + function minSetback() external view returns (uint32); + + /** + * @dev Get whether the contract is closed disabling any access. Otherwise role permissions are applied. + */ function isTargetClosed(address target) external view returns (bool); + /** + * @dev Get the role required to call a function. + */ function getTargetFunctionRole(address target, bytes4 selector) external view returns (uint64); + /** + * @dev Get the admin delay for a target contract. Changes to contract configuration are subject to this delay. + */ function getTargetAdminDelay(address target) external view returns (uint32); + /** + * @dev Get the id of the role that acts as an admin for the given role. + * + * The admin permission is required to grant the role, revoke the role and update the execution delay to execute + * an operation that is restricted to this role. + */ function getRoleAdmin(uint64 roleId) external view returns (uint64); + /** + * @dev Get the role that acts as a guardian for a given role. + * + * The guardian permission allows canceling operations that have been scheduled under the role. + */ function getRoleGuardian(uint64 roleId) external view returns (uint64); + /** + * @dev Get the role current grant delay. + * + * Its value may change at any point without an event emitted following a call to {setGrantDelay}. + * Changes to this value, including effect timepoint are notified in advance by the {RoleGrantDelayChanged} event. + */ function getRoleGrantDelay(uint64 roleId) external view returns (uint32); + /** + * @dev Get the access details for a given account for a given role. These details include the timepoint at which + * membership becomes active, and the delay applied to all operation by this user that requires this permission + * level. + * + * Returns: + * [0] Timestamp at which the account membership becomes valid. 0 means role is not granted. + * [1] Current execution delay for the account. + * [2] Pending execution delay for the account. + * [3] Timestamp at which the pending execution delay will become active. 0 means no delay update is scheduled. + */ function getAccess(uint64 roleId, address account) external view returns (uint48, uint32, uint32, uint48); + /** + * @dev Check if a given account currently has the permission level corresponding to a given role. Note that this + * permission might be associated with an execution delay. {getAccess} can provide more details. + */ function hasRole(uint64 roleId, address account) external view returns (bool, uint32); + /** + * @dev Give a label to a role, for improved role discoverability by UIs. + * + * Requirements: + * + * - the caller must be a global admin + * + * Emits a {RoleLabel} event. + */ function labelRole(uint64 roleId, string calldata label) external; + /** + * @dev Add `account` to `roleId`, or change its execution delay. + * + * This gives the account the authorization to call any function that is restricted to this role. An optional + * execution delay (in seconds) can be set. If that delay is non 0, the user is required to schedule any operation + * that is restricted to members of this role. The user will only be able to execute the operation after the delay has + * passed, before it has expired. During this period, admin and guardians can cancel the operation (see {cancel}). + * + * If the account has already been granted this role, the execution delay will be updated. This update is not + * immediate and follows the delay rules. For example, if a user currently has a delay of 3 hours, and this is + * called to reduce that delay to 1 hour, the new delay will take some time to take effect, enforcing that any + * operation executed in the 3 hours that follows this update was indeed scheduled before this update. + * + * Requirements: + * + * - the caller must be an admin for the role (see {getRoleAdmin}) + * - granted role must not be the `PUBLIC_ROLE` + * + * Emits a {RoleGranted} event. + */ function grantRole(uint64 roleId, address account, uint32 executionDelay) external; + /** + * @dev Remove an account from a role, with immediate effect. If the account does not have the role, this call has + * no effect. + * + * Requirements: + * + * - the caller must be an admin for the role (see {getRoleAdmin}) + * - revoked role must not be the `PUBLIC_ROLE` + * + * Emits a {RoleRevoked} event if the account had the role. + */ function revokeRole(uint64 roleId, address account) external; + /** + * @dev Renounce role permissions for the calling account with immediate effect. If the sender is not in + * the role this call has no effect. + * + * Requirements: + * + * - the caller must be `callerConfirmation`. + * + * Emits a {RoleRevoked} event if the account had the role. + */ function renounceRole(uint64 roleId, address callerConfirmation) external; + /** + * @dev Change admin role for a given role. + * + * Requirements: + * + * - the caller must be a global admin + * + * Emits a {RoleAdminChanged} event + */ function setRoleAdmin(uint64 roleId, uint64 admin) external; + /** + * @dev Change guardian role for a given role. + * + * Requirements: + * + * - the caller must be a global admin + * + * Emits a {RoleGuardianChanged} event + */ function setRoleGuardian(uint64 roleId, uint64 guardian) external; + /** + * @dev Update the delay for granting a `roleId`. + * + * Requirements: + * + * - the caller must be a global admin + * + * Emits a {RoleGrantDelayChanged} event. + */ function setGrantDelay(uint64 roleId, uint32 newDelay) external; + /** + * @dev Set the role required to call functions identified by the `selectors` in the `target` contract. + * + * Requirements: + * + * - the caller must be a global admin + * + * Emits a {TargetFunctionRoleUpdated} event per selector. + */ function setTargetFunctionRole(address target, bytes4[] calldata selectors, uint64 roleId) external; + /** + * @dev Set the delay for changing the configuration of a given target contract. + * + * Requirements: + * + * - the caller must be a global admin + * + * Emits a {TargetAdminDelayUpdated} event. + */ function setTargetAdminDelay(address target, uint32 newDelay) external; + /** + * @dev Set the closed flag for a contract. + * + * Requirements: + * + * - the caller must be a global admin + * + * Emits a {TargetClosed} event. + */ function setTargetClosed(address target, bool closed) external; + /** + * @dev Return the timepoint at which a scheduled operation will be ready for execution. This returns 0 if the + * operation is not yet scheduled, has expired, was executed, or was canceled. + */ function getSchedule(bytes32 id) external view returns (uint48); + /** + * @dev Return the nonce for the latest scheduled operation with a given id. Returns 0 if the operation has never + * been scheduled. + */ function getNonce(bytes32 id) external view returns (uint32); + /** + * @dev Schedule a delayed operation for future execution, and return the operation identifier. It is possible to + * choose the timestamp at which the operation becomes executable as long as it satisfies the execution delays + * required for the caller. The special value zero will automatically set the earliest possible time. + * + * Returns the `operationId` that was scheduled. Since this value is a hash of the parameters, it can reoccur when + * the same parameters are used; if this is relevant, the returned `nonce` can be used to uniquely identify this + * scheduled operation from other occurrences of the same `operationId` in invocations of {execute} and {cancel}. + * + * Emits a {OperationScheduled} event. + * + * NOTE: It is not possible to concurrently schedule more than one operation with the same `target` and `data`. If + * this is necessary, a random byte can be appended to `data` to act as a salt that will be ignored by the target + * contract if it is using standard Solidity ABI encoding. + */ function schedule(address target, bytes calldata data, uint48 when) external returns (bytes32, uint32); + /** + * @dev Execute a function that is delay restricted, provided it was properly scheduled beforehand, or the + * execution delay is 0. + * + * Returns the nonce that identifies the previously scheduled operation that is executed, or 0 if the + * operation wasn't previously scheduled (if the caller doesn't have an execution delay). + * + * Emits an {OperationExecuted} event only if the call was scheduled and delayed. + */ function execute(address target, bytes calldata data) external payable returns (uint32); + /** + * @dev Cancel a scheduled (delayed) operation. Returns the nonce that identifies the previously scheduled + * operation that is cancelled. + * + * Requirements: + * + * - the caller must be the proposer, a guardian of the targeted function, or a global admin + * + * Emits a {OperationCanceled} event. + */ function cancel(address caller, address target, bytes calldata data) external returns (uint32); + /** + * @dev Consume a scheduled operation targeting the caller. If such an operation exists, mark it as consumed + * (emit an {OperationExecuted} event and clean the state). Otherwise, throw an error. + * + * This is useful for contract that want to enforce that calls targeting them were scheduled on the manager, + * with all the verifications that it implies. + * + * Emit a {OperationExecuted} event. + */ function consumeScheduledOp(address caller, bytes calldata data) external; + /** + * @dev Hashing function for delayed operations. + */ + function hashOperation(address caller, address target, bytes calldata data) external view returns (bytes32); + + /** + * @dev Changes the authority of a target managed by this manager instance. + * + * Requirements: + * + * - the caller must be a global admin + */ function updateAuthority(address target, address newAuthority) external; } diff --git a/packages/foundry/lib/openzeppelin-contracts/contracts/access/manager/IAuthority.sol b/packages/foundry/lib/openzeppelin-contracts/contracts/access/manager/IAuthority.sol index 78d6104..e2d3898 100644 --- a/packages/foundry/lib/openzeppelin-contracts/contracts/access/manager/IAuthority.sol +++ b/packages/foundry/lib/openzeppelin-contracts/contracts/access/manager/IAuthority.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: MIT -// OpenZeppelin Contracts (last updated v5.0.0-rc.0) (access/manager/IAuthority.sol) +// OpenZeppelin Contracts (last updated v5.0.0) (access/manager/IAuthority.sol) pragma solidity ^0.8.20; diff --git a/packages/foundry/lib/openzeppelin-contracts/contracts/finance/VestingWallet.sol b/packages/foundry/lib/openzeppelin-contracts/contracts/finance/VestingWallet.sol index f6373a6..5abb7cd 100644 --- a/packages/foundry/lib/openzeppelin-contracts/contracts/finance/VestingWallet.sol +++ b/packages/foundry/lib/openzeppelin-contracts/contracts/finance/VestingWallet.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: MIT -// OpenZeppelin Contracts (last updated v5.0.0-rc.0) (finance/VestingWallet.sol) +// OpenZeppelin Contracts (last updated v5.0.0) (finance/VestingWallet.sol) pragma solidity ^0.8.20; import {IERC20} from "../token/ERC20/IERC20.sol"; diff --git a/packages/foundry/lib/openzeppelin-contracts/contracts/governance/Governor.sol b/packages/foundry/lib/openzeppelin-contracts/contracts/governance/Governor.sol index 9c65483..830c9d8 100644 --- a/packages/foundry/lib/openzeppelin-contracts/contracts/governance/Governor.sol +++ b/packages/foundry/lib/openzeppelin-contracts/contracts/governance/Governor.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: MIT -// OpenZeppelin Contracts (last updated v5.0.0-rc.0) (governance/Governor.sol) +// OpenZeppelin Contracts (last updated v5.0.0) (governance/Governor.sol) pragma solidity ^0.8.20; diff --git a/packages/foundry/lib/openzeppelin-contracts/contracts/governance/IGovernor.sol b/packages/foundry/lib/openzeppelin-contracts/contracts/governance/IGovernor.sol index e0fcc8f..6cde0e8 100644 --- a/packages/foundry/lib/openzeppelin-contracts/contracts/governance/IGovernor.sol +++ b/packages/foundry/lib/openzeppelin-contracts/contracts/governance/IGovernor.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: MIT -// OpenZeppelin Contracts (last updated v5.0.0-rc.0) (governance/IGovernor.sol) +// OpenZeppelin Contracts (last updated v5.0.0) (governance/IGovernor.sol) pragma solidity ^0.8.20; diff --git a/packages/foundry/lib/openzeppelin-contracts/contracts/governance/TimelockController.sol b/packages/foundry/lib/openzeppelin-contracts/contracts/governance/TimelockController.sol index 53596d3..349d940 100644 --- a/packages/foundry/lib/openzeppelin-contracts/contracts/governance/TimelockController.sol +++ b/packages/foundry/lib/openzeppelin-contracts/contracts/governance/TimelockController.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: MIT -// OpenZeppelin Contracts (last updated v5.0.0-rc.0) (governance/TimelockController.sol) +// OpenZeppelin Contracts (last updated v5.0.0) (governance/TimelockController.sol) pragma solidity ^0.8.20; diff --git a/packages/foundry/lib/openzeppelin-contracts/contracts/governance/extensions/GovernorCountingSimple.sol b/packages/foundry/lib/openzeppelin-contracts/contracts/governance/extensions/GovernorCountingSimple.sol index 44e7184..ac9c22a 100644 --- a/packages/foundry/lib/openzeppelin-contracts/contracts/governance/extensions/GovernorCountingSimple.sol +++ b/packages/foundry/lib/openzeppelin-contracts/contracts/governance/extensions/GovernorCountingSimple.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: MIT -// OpenZeppelin Contracts (last updated v5.0.0-rc.0) (governance/extensions/GovernorCountingSimple.sol) +// OpenZeppelin Contracts (last updated v5.0.0) (governance/extensions/GovernorCountingSimple.sol) pragma solidity ^0.8.20; diff --git a/packages/foundry/lib/openzeppelin-contracts/contracts/governance/extensions/GovernorPreventLateQuorum.sol b/packages/foundry/lib/openzeppelin-contracts/contracts/governance/extensions/GovernorPreventLateQuorum.sol index 6dd3f94..ff80af6 100644 --- a/packages/foundry/lib/openzeppelin-contracts/contracts/governance/extensions/GovernorPreventLateQuorum.sol +++ b/packages/foundry/lib/openzeppelin-contracts/contracts/governance/extensions/GovernorPreventLateQuorum.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: MIT -// OpenZeppelin Contracts (last updated v5.0.0-rc.0) (governance/extensions/GovernorPreventLateQuorum.sol) +// OpenZeppelin Contracts (last updated v5.0.0) (governance/extensions/GovernorPreventLateQuorum.sol) pragma solidity ^0.8.20; diff --git a/packages/foundry/lib/openzeppelin-contracts/contracts/governance/extensions/GovernorSettings.sol b/packages/foundry/lib/openzeppelin-contracts/contracts/governance/extensions/GovernorSettings.sol index 82ce646..7347ee2 100644 --- a/packages/foundry/lib/openzeppelin-contracts/contracts/governance/extensions/GovernorSettings.sol +++ b/packages/foundry/lib/openzeppelin-contracts/contracts/governance/extensions/GovernorSettings.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: MIT -// OpenZeppelin Contracts (last updated v5.0.0-rc.0) (governance/extensions/GovernorSettings.sol) +// OpenZeppelin Contracts (last updated v5.0.0) (governance/extensions/GovernorSettings.sol) pragma solidity ^0.8.20; diff --git a/packages/foundry/lib/openzeppelin-contracts/contracts/governance/extensions/GovernorStorage.sol b/packages/foundry/lib/openzeppelin-contracts/contracts/governance/extensions/GovernorStorage.sol index a90f13a..2547b55 100644 --- a/packages/foundry/lib/openzeppelin-contracts/contracts/governance/extensions/GovernorStorage.sol +++ b/packages/foundry/lib/openzeppelin-contracts/contracts/governance/extensions/GovernorStorage.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: MIT -// OpenZeppelin Contracts (last updated v5.0.0-rc.0) (governance/extensions/GovernorStorage.sol) +// OpenZeppelin Contracts (last updated v5.0.0) (governance/extensions/GovernorStorage.sol) pragma solidity ^0.8.20; diff --git a/packages/foundry/lib/openzeppelin-contracts/contracts/governance/extensions/GovernorTimelockAccess.sol b/packages/foundry/lib/openzeppelin-contracts/contracts/governance/extensions/GovernorTimelockAccess.sol index bee48a7..a2373a4 100644 --- a/packages/foundry/lib/openzeppelin-contracts/contracts/governance/extensions/GovernorTimelockAccess.sol +++ b/packages/foundry/lib/openzeppelin-contracts/contracts/governance/extensions/GovernorTimelockAccess.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: MIT -// OpenZeppelin Contracts (last updated v5.0.0-rc.1) (governance/extensions/GovernorTimelockAccess.sol) +// OpenZeppelin Contracts (last updated v5.0.0) (governance/extensions/GovernorTimelockAccess.sol) pragma solidity ^0.8.20; diff --git a/packages/foundry/lib/openzeppelin-contracts/contracts/governance/extensions/GovernorTimelockCompound.sol b/packages/foundry/lib/openzeppelin-contracts/contracts/governance/extensions/GovernorTimelockCompound.sol index 8f2ec18..117df01 100644 --- a/packages/foundry/lib/openzeppelin-contracts/contracts/governance/extensions/GovernorTimelockCompound.sol +++ b/packages/foundry/lib/openzeppelin-contracts/contracts/governance/extensions/GovernorTimelockCompound.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: MIT -// OpenZeppelin Contracts (last updated v5.0.0-rc.0) (governance/extensions/GovernorTimelockCompound.sol) +// OpenZeppelin Contracts (last updated v5.0.0) (governance/extensions/GovernorTimelockCompound.sol) pragma solidity ^0.8.20; diff --git a/packages/foundry/lib/openzeppelin-contracts/contracts/governance/extensions/GovernorTimelockControl.sol b/packages/foundry/lib/openzeppelin-contracts/contracts/governance/extensions/GovernorTimelockControl.sol index c41eb7e..53503cc 100644 --- a/packages/foundry/lib/openzeppelin-contracts/contracts/governance/extensions/GovernorTimelockControl.sol +++ b/packages/foundry/lib/openzeppelin-contracts/contracts/governance/extensions/GovernorTimelockControl.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: MIT -// OpenZeppelin Contracts (last updated v5.0.0-rc.0) (governance/extensions/GovernorTimelockControl.sol) +// OpenZeppelin Contracts (last updated v5.0.0) (governance/extensions/GovernorTimelockControl.sol) pragma solidity ^0.8.20; diff --git a/packages/foundry/lib/openzeppelin-contracts/contracts/governance/extensions/GovernorVotes.sol b/packages/foundry/lib/openzeppelin-contracts/contracts/governance/extensions/GovernorVotes.sol index d95fee1..ec32ba4 100644 --- a/packages/foundry/lib/openzeppelin-contracts/contracts/governance/extensions/GovernorVotes.sol +++ b/packages/foundry/lib/openzeppelin-contracts/contracts/governance/extensions/GovernorVotes.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: MIT -// OpenZeppelin Contracts (last updated v5.0.0-rc.0) (governance/extensions/GovernorVotes.sol) +// OpenZeppelin Contracts (last updated v5.0.0) (governance/extensions/GovernorVotes.sol) pragma solidity ^0.8.20; diff --git a/packages/foundry/lib/openzeppelin-contracts/contracts/governance/extensions/GovernorVotesQuorumFraction.sol b/packages/foundry/lib/openzeppelin-contracts/contracts/governance/extensions/GovernorVotesQuorumFraction.sol index 4a43388..85a1f98 100644 --- a/packages/foundry/lib/openzeppelin-contracts/contracts/governance/extensions/GovernorVotesQuorumFraction.sol +++ b/packages/foundry/lib/openzeppelin-contracts/contracts/governance/extensions/GovernorVotesQuorumFraction.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: MIT -// OpenZeppelin Contracts (last updated v5.0.0-rc.0) (governance/extensions/GovernorVotesQuorumFraction.sol) +// OpenZeppelin Contracts (last updated v5.0.0) (governance/extensions/GovernorVotesQuorumFraction.sol) pragma solidity ^0.8.20; diff --git a/packages/foundry/lib/openzeppelin-contracts/contracts/governance/utils/IVotes.sol b/packages/foundry/lib/openzeppelin-contracts/contracts/governance/utils/IVotes.sol index 7131ecf..7ba012e 100644 --- a/packages/foundry/lib/openzeppelin-contracts/contracts/governance/utils/IVotes.sol +++ b/packages/foundry/lib/openzeppelin-contracts/contracts/governance/utils/IVotes.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: MIT -// OpenZeppelin Contracts (last updated v5.0.0-rc.0) (governance/utils/IVotes.sol) +// OpenZeppelin Contracts (last updated v5.0.0) (governance/utils/IVotes.sol) pragma solidity ^0.8.20; /** diff --git a/packages/foundry/lib/openzeppelin-contracts/contracts/governance/utils/Votes.sol b/packages/foundry/lib/openzeppelin-contracts/contracts/governance/utils/Votes.sol index 56c8772..9f96676 100644 --- a/packages/foundry/lib/openzeppelin-contracts/contracts/governance/utils/Votes.sol +++ b/packages/foundry/lib/openzeppelin-contracts/contracts/governance/utils/Votes.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: MIT -// OpenZeppelin Contracts (last updated v5.0.0-rc.0) (governance/utils/Votes.sol) +// OpenZeppelin Contracts (last updated v5.0.0) (governance/utils/Votes.sol) pragma solidity ^0.8.20; import {IERC5805} from "../../interfaces/IERC5805.sol"; @@ -27,7 +27,7 @@ import {Time} from "../../utils/types/Time.sol"; * * When using this module the derived contract must implement {_getVotingUnits} (for example, make it return * {ERC721-balanceOf}), and can use {_transferVotingUnits} to track a change in the distribution of those units (in the - * previous example, it would be included in {ERC721-_beforeTokenTransfer}). + * previous example, it would be included in {ERC721-_update}). */ abstract contract Votes is Context, EIP712, Nonces, IERC5805 { using Checkpoints for Checkpoints.Trace208; diff --git a/packages/foundry/lib/openzeppelin-contracts/contracts/interfaces/IERC1155.sol b/packages/foundry/lib/openzeppelin-contracts/contracts/interfaces/IERC1155.sol index 4375627..bb502b1 100644 --- a/packages/foundry/lib/openzeppelin-contracts/contracts/interfaces/IERC1155.sol +++ b/packages/foundry/lib/openzeppelin-contracts/contracts/interfaces/IERC1155.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: MIT -// OpenZeppelin Contracts (last updated v5.0.0-rc.0) (interfaces/IERC1155.sol) +// OpenZeppelin Contracts (last updated v5.0.0) (interfaces/IERC1155.sol) pragma solidity ^0.8.20; diff --git a/packages/foundry/lib/openzeppelin-contracts/contracts/interfaces/IERC1155MetadataURI.sol b/packages/foundry/lib/openzeppelin-contracts/contracts/interfaces/IERC1155MetadataURI.sol index 72448a2..dac0bab 100644 --- a/packages/foundry/lib/openzeppelin-contracts/contracts/interfaces/IERC1155MetadataURI.sol +++ b/packages/foundry/lib/openzeppelin-contracts/contracts/interfaces/IERC1155MetadataURI.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: MIT -// OpenZeppelin Contracts (last updated v5.0.0-rc.0) (interfaces/IERC1155MetadataURI.sol) +// OpenZeppelin Contracts (last updated v5.0.0) (interfaces/IERC1155MetadataURI.sol) pragma solidity ^0.8.20; diff --git a/packages/foundry/lib/openzeppelin-contracts/contracts/interfaces/IERC1155Receiver.sol b/packages/foundry/lib/openzeppelin-contracts/contracts/interfaces/IERC1155Receiver.sol index ec3aa39..6bb7c96 100644 --- a/packages/foundry/lib/openzeppelin-contracts/contracts/interfaces/IERC1155Receiver.sol +++ b/packages/foundry/lib/openzeppelin-contracts/contracts/interfaces/IERC1155Receiver.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: MIT -// OpenZeppelin Contracts (last updated v5.0.0-rc.0) (interfaces/IERC1155Receiver.sol) +// OpenZeppelin Contracts (last updated v5.0.0) (interfaces/IERC1155Receiver.sol) pragma solidity ^0.8.20; diff --git a/packages/foundry/lib/openzeppelin-contracts/contracts/interfaces/IERC1271.sol b/packages/foundry/lib/openzeppelin-contracts/contracts/interfaces/IERC1271.sol index 52a1ef2..a56057b 100644 --- a/packages/foundry/lib/openzeppelin-contracts/contracts/interfaces/IERC1271.sol +++ b/packages/foundry/lib/openzeppelin-contracts/contracts/interfaces/IERC1271.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: MIT -// OpenZeppelin Contracts (last updated v5.0.0-rc.0) (interfaces/IERC1271.sol) +// OpenZeppelin Contracts (last updated v5.0.0) (interfaces/IERC1271.sol) pragma solidity ^0.8.20; diff --git a/packages/foundry/lib/openzeppelin-contracts/contracts/interfaces/IERC1363.sol b/packages/foundry/lib/openzeppelin-contracts/contracts/interfaces/IERC1363.sol index 6f32a6d..8b02aba 100644 --- a/packages/foundry/lib/openzeppelin-contracts/contracts/interfaces/IERC1363.sol +++ b/packages/foundry/lib/openzeppelin-contracts/contracts/interfaces/IERC1363.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: MIT -// OpenZeppelin Contracts (last updated v5.0.0-rc.0) (interfaces/IERC1363.sol) +// OpenZeppelin Contracts (last updated v5.0.0) (interfaces/IERC1363.sol) pragma solidity ^0.8.20; diff --git a/packages/foundry/lib/openzeppelin-contracts/contracts/interfaces/IERC1363Receiver.sol b/packages/foundry/lib/openzeppelin-contracts/contracts/interfaces/IERC1363Receiver.sol index 875fc60..64d669d 100644 --- a/packages/foundry/lib/openzeppelin-contracts/contracts/interfaces/IERC1363Receiver.sol +++ b/packages/foundry/lib/openzeppelin-contracts/contracts/interfaces/IERC1363Receiver.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: MIT -// OpenZeppelin Contracts (last updated v5.0.0-rc.0) (interfaces/IERC1363Receiver.sol) +// OpenZeppelin Contracts (last updated v5.0.0) (interfaces/IERC1363Receiver.sol) pragma solidity ^0.8.20; diff --git a/packages/foundry/lib/openzeppelin-contracts/contracts/interfaces/IERC1363Spender.sol b/packages/foundry/lib/openzeppelin-contracts/contracts/interfaces/IERC1363Spender.sol index b68d9b5..f221541 100644 --- a/packages/foundry/lib/openzeppelin-contracts/contracts/interfaces/IERC1363Spender.sol +++ b/packages/foundry/lib/openzeppelin-contracts/contracts/interfaces/IERC1363Spender.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: MIT -// OpenZeppelin Contracts (last updated v5.0.0-rc.0) (interfaces/IERC1363Spender.sol) +// OpenZeppelin Contracts (last updated v5.0.0) (interfaces/IERC1363Spender.sol) pragma solidity ^0.8.20; diff --git a/packages/foundry/lib/openzeppelin-contracts/contracts/interfaces/IERC165.sol b/packages/foundry/lib/openzeppelin-contracts/contracts/interfaces/IERC165.sol index e3cc30c..944dd0d 100644 --- a/packages/foundry/lib/openzeppelin-contracts/contracts/interfaces/IERC165.sol +++ b/packages/foundry/lib/openzeppelin-contracts/contracts/interfaces/IERC165.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: MIT -// OpenZeppelin Contracts (last updated v5.0.0-rc.0) (interfaces/IERC165.sol) +// OpenZeppelin Contracts (last updated v5.0.0) (interfaces/IERC165.sol) pragma solidity ^0.8.20; diff --git a/packages/foundry/lib/openzeppelin-contracts/contracts/interfaces/IERC1820Implementer.sol b/packages/foundry/lib/openzeppelin-contracts/contracts/interfaces/IERC1820Implementer.sol index debe03c..38e8a4e 100644 --- a/packages/foundry/lib/openzeppelin-contracts/contracts/interfaces/IERC1820Implementer.sol +++ b/packages/foundry/lib/openzeppelin-contracts/contracts/interfaces/IERC1820Implementer.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: MIT -// OpenZeppelin Contracts (last updated v5.0.0-rc.0) (interfaces/IERC1820Implementer.sol) +// OpenZeppelin Contracts (last updated v5.0.0) (interfaces/IERC1820Implementer.sol) pragma solidity ^0.8.20; diff --git a/packages/foundry/lib/openzeppelin-contracts/contracts/interfaces/IERC1820Registry.sol b/packages/foundry/lib/openzeppelin-contracts/contracts/interfaces/IERC1820Registry.sol index 7e7a962..bf0140a 100644 --- a/packages/foundry/lib/openzeppelin-contracts/contracts/interfaces/IERC1820Registry.sol +++ b/packages/foundry/lib/openzeppelin-contracts/contracts/interfaces/IERC1820Registry.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: MIT -// OpenZeppelin Contracts (last updated v5.0.0-rc.0) (interfaces/IERC1820Registry.sol) +// OpenZeppelin Contracts (last updated v5.0.0) (interfaces/IERC1820Registry.sol) pragma solidity ^0.8.20; diff --git a/packages/foundry/lib/openzeppelin-contracts/contracts/interfaces/IERC1967.sol b/packages/foundry/lib/openzeppelin-contracts/contracts/interfaces/IERC1967.sol index 9af812c..d285ec8 100644 --- a/packages/foundry/lib/openzeppelin-contracts/contracts/interfaces/IERC1967.sol +++ b/packages/foundry/lib/openzeppelin-contracts/contracts/interfaces/IERC1967.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: MIT -// OpenZeppelin Contracts (last updated v5.0.0-rc.0) (interfaces/IERC1967.sol) +// OpenZeppelin Contracts (last updated v5.0.0) (interfaces/IERC1967.sol) pragma solidity ^0.8.20; diff --git a/packages/foundry/lib/openzeppelin-contracts/contracts/interfaces/IERC20.sol b/packages/foundry/lib/openzeppelin-contracts/contracts/interfaces/IERC20.sol index d97be9f..21d5a41 100644 --- a/packages/foundry/lib/openzeppelin-contracts/contracts/interfaces/IERC20.sol +++ b/packages/foundry/lib/openzeppelin-contracts/contracts/interfaces/IERC20.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: MIT -// OpenZeppelin Contracts (last updated v5.0.0-rc.0) (interfaces/IERC20.sol) +// OpenZeppelin Contracts (last updated v5.0.0) (interfaces/IERC20.sol) pragma solidity ^0.8.20; diff --git a/packages/foundry/lib/openzeppelin-contracts/contracts/interfaces/IERC20Metadata.sol b/packages/foundry/lib/openzeppelin-contracts/contracts/interfaces/IERC20Metadata.sol index b8b33bf..b7bc691 100644 --- a/packages/foundry/lib/openzeppelin-contracts/contracts/interfaces/IERC20Metadata.sol +++ b/packages/foundry/lib/openzeppelin-contracts/contracts/interfaces/IERC20Metadata.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: MIT -// OpenZeppelin Contracts (last updated v5.0.0-rc.0) (interfaces/IERC20Metadata.sol) +// OpenZeppelin Contracts (last updated v5.0.0) (interfaces/IERC20Metadata.sol) pragma solidity ^0.8.20; diff --git a/packages/foundry/lib/openzeppelin-contracts/contracts/interfaces/IERC2309.sol b/packages/foundry/lib/openzeppelin-contracts/contracts/interfaces/IERC2309.sol index 49d9be1..aa00f34 100644 --- a/packages/foundry/lib/openzeppelin-contracts/contracts/interfaces/IERC2309.sol +++ b/packages/foundry/lib/openzeppelin-contracts/contracts/interfaces/IERC2309.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: MIT -// OpenZeppelin Contracts (last updated v5.0.0-rc.0) (interfaces/IERC2309.sol) +// OpenZeppelin Contracts (last updated v5.0.0) (interfaces/IERC2309.sol) pragma solidity ^0.8.20; diff --git a/packages/foundry/lib/openzeppelin-contracts/contracts/interfaces/IERC2612.sol b/packages/foundry/lib/openzeppelin-contracts/contracts/interfaces/IERC2612.sol index 626eb00..c0427bb 100644 --- a/packages/foundry/lib/openzeppelin-contracts/contracts/interfaces/IERC2612.sol +++ b/packages/foundry/lib/openzeppelin-contracts/contracts/interfaces/IERC2612.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: MIT -// OpenZeppelin Contracts (last updated v5.0.0-rc.0) (interfaces/IERC2612.sol) +// OpenZeppelin Contracts (last updated v5.0.0) (interfaces/IERC2612.sol) pragma solidity ^0.8.20; diff --git a/packages/foundry/lib/openzeppelin-contracts/contracts/interfaces/IERC2981.sol b/packages/foundry/lib/openzeppelin-contracts/contracts/interfaces/IERC2981.sol index 16244ab..9e7871d 100644 --- a/packages/foundry/lib/openzeppelin-contracts/contracts/interfaces/IERC2981.sol +++ b/packages/foundry/lib/openzeppelin-contracts/contracts/interfaces/IERC2981.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: MIT -// OpenZeppelin Contracts (last updated v5.0.0-rc.0) (interfaces/IERC2981.sol) +// OpenZeppelin Contracts (last updated v5.0.0) (interfaces/IERC2981.sol) pragma solidity ^0.8.20; diff --git a/packages/foundry/lib/openzeppelin-contracts/contracts/interfaces/IERC3156.sol b/packages/foundry/lib/openzeppelin-contracts/contracts/interfaces/IERC3156.sol index 1446e04..0f48bf3 100644 --- a/packages/foundry/lib/openzeppelin-contracts/contracts/interfaces/IERC3156.sol +++ b/packages/foundry/lib/openzeppelin-contracts/contracts/interfaces/IERC3156.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: MIT -// OpenZeppelin Contracts (last updated v5.0.0-rc.0) (interfaces/IERC3156.sol) +// OpenZeppelin Contracts (last updated v5.0.0) (interfaces/IERC3156.sol) pragma solidity ^0.8.20; diff --git a/packages/foundry/lib/openzeppelin-contracts/contracts/interfaces/IERC3156FlashBorrower.sol b/packages/foundry/lib/openzeppelin-contracts/contracts/interfaces/IERC3156FlashBorrower.sol index ded8ef2..53e17ea 100644 --- a/packages/foundry/lib/openzeppelin-contracts/contracts/interfaces/IERC3156FlashBorrower.sol +++ b/packages/foundry/lib/openzeppelin-contracts/contracts/interfaces/IERC3156FlashBorrower.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: MIT -// OpenZeppelin Contracts (last updated v5.0.0-rc.0) (interfaces/IERC3156FlashBorrower.sol) +// OpenZeppelin Contracts (last updated v5.0.0) (interfaces/IERC3156FlashBorrower.sol) pragma solidity ^0.8.20; diff --git a/packages/foundry/lib/openzeppelin-contracts/contracts/interfaces/IERC3156FlashLender.sol b/packages/foundry/lib/openzeppelin-contracts/contracts/interfaces/IERC3156FlashLender.sol index 1ad0dec..cfae3c0 100644 --- a/packages/foundry/lib/openzeppelin-contracts/contracts/interfaces/IERC3156FlashLender.sol +++ b/packages/foundry/lib/openzeppelin-contracts/contracts/interfaces/IERC3156FlashLender.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: MIT -// OpenZeppelin Contracts (last updated v5.0.0-rc.0) (interfaces/IERC3156FlashLender.sol) +// OpenZeppelin Contracts (last updated v5.0.0) (interfaces/IERC3156FlashLender.sol) pragma solidity ^0.8.20; diff --git a/packages/foundry/lib/openzeppelin-contracts/contracts/interfaces/IERC4626.sol b/packages/foundry/lib/openzeppelin-contracts/contracts/interfaces/IERC4626.sol index bd76c84..cfff53b 100644 --- a/packages/foundry/lib/openzeppelin-contracts/contracts/interfaces/IERC4626.sol +++ b/packages/foundry/lib/openzeppelin-contracts/contracts/interfaces/IERC4626.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: MIT -// OpenZeppelin Contracts (last updated v5.0.0-rc.0) (interfaces/IERC4626.sol) +// OpenZeppelin Contracts (last updated v5.0.0) (interfaces/IERC4626.sol) pragma solidity ^0.8.20; diff --git a/packages/foundry/lib/openzeppelin-contracts/contracts/interfaces/IERC4906.sol b/packages/foundry/lib/openzeppelin-contracts/contracts/interfaces/IERC4906.sol index ba7fbd3..bc008e3 100644 --- a/packages/foundry/lib/openzeppelin-contracts/contracts/interfaces/IERC4906.sol +++ b/packages/foundry/lib/openzeppelin-contracts/contracts/interfaces/IERC4906.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: MIT -// OpenZeppelin Contracts (last updated v5.0.0-rc.0) (interfaces/IERC4906.sol) +// OpenZeppelin Contracts (last updated v5.0.0) (interfaces/IERC4906.sol) pragma solidity ^0.8.20; diff --git a/packages/foundry/lib/openzeppelin-contracts/contracts/interfaces/IERC5267.sol b/packages/foundry/lib/openzeppelin-contracts/contracts/interfaces/IERC5267.sol index 6e0a9bc..47a9fd5 100644 --- a/packages/foundry/lib/openzeppelin-contracts/contracts/interfaces/IERC5267.sol +++ b/packages/foundry/lib/openzeppelin-contracts/contracts/interfaces/IERC5267.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: MIT -// OpenZeppelin Contracts (last updated v5.0.0-rc.0) (interfaces/IERC5267.sol) +// OpenZeppelin Contracts (last updated v5.0.0) (interfaces/IERC5267.sol) pragma solidity ^0.8.20; diff --git a/packages/foundry/lib/openzeppelin-contracts/contracts/interfaces/IERC5313.sol b/packages/foundry/lib/openzeppelin-contracts/contracts/interfaces/IERC5313.sol index 61556dd..62f8d75 100644 --- a/packages/foundry/lib/openzeppelin-contracts/contracts/interfaces/IERC5313.sol +++ b/packages/foundry/lib/openzeppelin-contracts/contracts/interfaces/IERC5313.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: MIT -// OpenZeppelin Contracts (last updated v5.0.0-rc.0) (interfaces/IERC5313.sol) +// OpenZeppelin Contracts (last updated v5.0.0) (interfaces/IERC5313.sol) pragma solidity ^0.8.20; diff --git a/packages/foundry/lib/openzeppelin-contracts/contracts/interfaces/IERC5805.sol b/packages/foundry/lib/openzeppelin-contracts/contracts/interfaces/IERC5805.sol index 1d7451d..a89e22d 100644 --- a/packages/foundry/lib/openzeppelin-contracts/contracts/interfaces/IERC5805.sol +++ b/packages/foundry/lib/openzeppelin-contracts/contracts/interfaces/IERC5805.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: MIT -// OpenZeppelin Contracts (last updated v5.0.0-rc.0) (interfaces/IERC5805.sol) +// OpenZeppelin Contracts (last updated v5.0.0) (interfaces/IERC5805.sol) pragma solidity ^0.8.20; diff --git a/packages/foundry/lib/openzeppelin-contracts/contracts/interfaces/IERC6372.sol b/packages/foundry/lib/openzeppelin-contracts/contracts/interfaces/IERC6372.sol index f4973ec..7d2ea4a 100644 --- a/packages/foundry/lib/openzeppelin-contracts/contracts/interfaces/IERC6372.sol +++ b/packages/foundry/lib/openzeppelin-contracts/contracts/interfaces/IERC6372.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: MIT -// OpenZeppelin Contracts (last updated v5.0.0-rc.0) (interfaces/IERC6372.sol) +// OpenZeppelin Contracts (last updated v5.0.0) (interfaces/IERC6372.sol) pragma solidity ^0.8.20; diff --git a/packages/foundry/lib/openzeppelin-contracts/contracts/interfaces/IERC721.sol b/packages/foundry/lib/openzeppelin-contracts/contracts/interfaces/IERC721.sol index d671eca..0ea735b 100644 --- a/packages/foundry/lib/openzeppelin-contracts/contracts/interfaces/IERC721.sol +++ b/packages/foundry/lib/openzeppelin-contracts/contracts/interfaces/IERC721.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: MIT -// OpenZeppelin Contracts (last updated v5.0.0-rc.0) (interfaces/IERC721.sol) +// OpenZeppelin Contracts (last updated v5.0.0) (interfaces/IERC721.sol) pragma solidity ^0.8.20; diff --git a/packages/foundry/lib/openzeppelin-contracts/contracts/interfaces/IERC721Enumerable.sol b/packages/foundry/lib/openzeppelin-contracts/contracts/interfaces/IERC721Enumerable.sol index 4134593..d83a056 100644 --- a/packages/foundry/lib/openzeppelin-contracts/contracts/interfaces/IERC721Enumerable.sol +++ b/packages/foundry/lib/openzeppelin-contracts/contracts/interfaces/IERC721Enumerable.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: MIT -// OpenZeppelin Contracts (last updated v5.0.0-rc.0) (interfaces/IERC721Enumerable.sol) +// OpenZeppelin Contracts (last updated v5.0.0) (interfaces/IERC721Enumerable.sol) pragma solidity ^0.8.20; diff --git a/packages/foundry/lib/openzeppelin-contracts/contracts/interfaces/IERC721Metadata.sol b/packages/foundry/lib/openzeppelin-contracts/contracts/interfaces/IERC721Metadata.sol index 6d8452e..d79dd68 100644 --- a/packages/foundry/lib/openzeppelin-contracts/contracts/interfaces/IERC721Metadata.sol +++ b/packages/foundry/lib/openzeppelin-contracts/contracts/interfaces/IERC721Metadata.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: MIT -// OpenZeppelin Contracts (last updated v5.0.0-rc.0) (interfaces/IERC721Metadata.sol) +// OpenZeppelin Contracts (last updated v5.0.0) (interfaces/IERC721Metadata.sol) pragma solidity ^0.8.20; diff --git a/packages/foundry/lib/openzeppelin-contracts/contracts/interfaces/IERC721Receiver.sol b/packages/foundry/lib/openzeppelin-contracts/contracts/interfaces/IERC721Receiver.sol index 950e0a4..6b2a5aa 100644 --- a/packages/foundry/lib/openzeppelin-contracts/contracts/interfaces/IERC721Receiver.sol +++ b/packages/foundry/lib/openzeppelin-contracts/contracts/interfaces/IERC721Receiver.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: MIT -// OpenZeppelin Contracts (last updated v5.0.0-rc.0) (interfaces/IERC721Receiver.sol) +// OpenZeppelin Contracts (last updated v5.0.0) (interfaces/IERC721Receiver.sol) pragma solidity ^0.8.20; diff --git a/packages/foundry/lib/openzeppelin-contracts/contracts/interfaces/IERC777.sol b/packages/foundry/lib/openzeppelin-contracts/contracts/interfaces/IERC777.sol index a432ca6..56dfbef 100644 --- a/packages/foundry/lib/openzeppelin-contracts/contracts/interfaces/IERC777.sol +++ b/packages/foundry/lib/openzeppelin-contracts/contracts/interfaces/IERC777.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: MIT -// OpenZeppelin Contracts (last updated v5.0.0-rc.0) (interfaces/IERC777.sol) +// OpenZeppelin Contracts (last updated v5.0.0) (interfaces/IERC777.sol) pragma solidity ^0.8.20; diff --git a/packages/foundry/lib/openzeppelin-contracts/contracts/interfaces/IERC777Recipient.sol b/packages/foundry/lib/openzeppelin-contracts/contracts/interfaces/IERC777Recipient.sol index 2a937f5..6378e14 100644 --- a/packages/foundry/lib/openzeppelin-contracts/contracts/interfaces/IERC777Recipient.sol +++ b/packages/foundry/lib/openzeppelin-contracts/contracts/interfaces/IERC777Recipient.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: MIT -// OpenZeppelin Contracts (last updated v5.0.0-rc.0) (interfaces/IERC777Recipient.sol) +// OpenZeppelin Contracts (last updated v5.0.0) (interfaces/IERC777Recipient.sol) pragma solidity ^0.8.20; diff --git a/packages/foundry/lib/openzeppelin-contracts/contracts/interfaces/IERC777Sender.sol b/packages/foundry/lib/openzeppelin-contracts/contracts/interfaces/IERC777Sender.sol index 5c10973..5c0ec0b 100644 --- a/packages/foundry/lib/openzeppelin-contracts/contracts/interfaces/IERC777Sender.sol +++ b/packages/foundry/lib/openzeppelin-contracts/contracts/interfaces/IERC777Sender.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: MIT -// OpenZeppelin Contracts (last updated v5.0.0-rc.0) (interfaces/IERC777Sender.sol) +// OpenZeppelin Contracts (last updated v5.0.0) (interfaces/IERC777Sender.sol) pragma solidity ^0.8.20; diff --git a/packages/foundry/lib/openzeppelin-contracts/contracts/interfaces/draft-IERC1822.sol b/packages/foundry/lib/openzeppelin-contracts/contracts/interfaces/draft-IERC1822.sol index c3679a6..4d0f0f8 100644 --- a/packages/foundry/lib/openzeppelin-contracts/contracts/interfaces/draft-IERC1822.sol +++ b/packages/foundry/lib/openzeppelin-contracts/contracts/interfaces/draft-IERC1822.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: MIT -// OpenZeppelin Contracts (last updated v5.0.0-rc.0) (interfaces/draft-IERC1822.sol) +// OpenZeppelin Contracts (last updated v5.0.0) (interfaces/draft-IERC1822.sol) pragma solidity ^0.8.20; diff --git a/packages/foundry/lib/openzeppelin-contracts/contracts/interfaces/draft-IERC6093.sol b/packages/foundry/lib/openzeppelin-contracts/contracts/interfaces/draft-IERC6093.sol index c6bcfff..f6990e6 100644 --- a/packages/foundry/lib/openzeppelin-contracts/contracts/interfaces/draft-IERC6093.sol +++ b/packages/foundry/lib/openzeppelin-contracts/contracts/interfaces/draft-IERC6093.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: MIT -// OpenZeppelin Contracts (last updated v5.0.0-rc.0) (interfaces/draft-IERC6093.sol) +// OpenZeppelin Contracts (last updated v5.0.0) (interfaces/draft-IERC6093.sol) pragma solidity ^0.8.20; /** diff --git a/packages/foundry/lib/openzeppelin-contracts/contracts/metatx/ERC2771Context.sol b/packages/foundry/lib/openzeppelin-contracts/contracts/metatx/ERC2771Context.sol index 5b5954e..66b0122 100644 --- a/packages/foundry/lib/openzeppelin-contracts/contracts/metatx/ERC2771Context.sol +++ b/packages/foundry/lib/openzeppelin-contracts/contracts/metatx/ERC2771Context.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: MIT -// OpenZeppelin Contracts (last updated v5.0.0-rc.0) (metatx/ERC2771Context.sol) +// OpenZeppelin Contracts (last updated v5.0.1) (metatx/ERC2771Context.sol) pragma solidity ^0.8.20; @@ -13,6 +13,10 @@ import {Context} from "../utils/Context.sol"; * specification adding the address size in bytes (20) to the calldata size. An example of an unexpected * behavior could be an unintended fallback (or another function) invocation while trying to invoke the `receive` * function only accessible if `msg.data.length == 0`. + * + * WARNING: The usage of `delegatecall` in this contract is dangerous and may result in context corruption. + * Any forwarded request to this contract triggering a `delegatecall` to itself will result in an invalid {_msgSender} + * recovery. */ abstract contract ERC2771Context is Context { /// @custom:oz-upgrades-unsafe-allow state-variable-immutable @@ -48,13 +52,11 @@ abstract contract ERC2771Context is Context { * a call is not performed by the trusted forwarder or the calldata length is less than * 20 bytes (an address length). */ - function _msgSender() internal view virtual override returns (address sender) { - if (isTrustedForwarder(msg.sender) && msg.data.length >= 20) { - // The assembly code is more direct than the Solidity version using `abi.decode`. - /// @solidity memory-safe-assembly - assembly { - sender := shr(96, calldataload(sub(calldatasize(), 20))) - } + function _msgSender() internal view virtual override returns (address) { + uint256 calldataLength = msg.data.length; + uint256 contextSuffixLength = _contextSuffixLength(); + if (isTrustedForwarder(msg.sender) && calldataLength >= contextSuffixLength) { + return address(bytes20(msg.data[calldataLength - contextSuffixLength:])); } else { return super._msgSender(); } @@ -66,10 +68,19 @@ abstract contract ERC2771Context is Context { * 20 bytes (an address length). */ function _msgData() internal view virtual override returns (bytes calldata) { - if (isTrustedForwarder(msg.sender) && msg.data.length >= 20) { - return msg.data[:msg.data.length - 20]; + uint256 calldataLength = msg.data.length; + uint256 contextSuffixLength = _contextSuffixLength(); + if (isTrustedForwarder(msg.sender) && calldataLength >= contextSuffixLength) { + return msg.data[:calldataLength - contextSuffixLength]; } else { return super._msgData(); } } + + /** + * @dev ERC-2771 specifies the context as being a single address (20 bytes). + */ + function _contextSuffixLength() internal view virtual override returns (uint256) { + return 20; + } } diff --git a/packages/foundry/lib/openzeppelin-contracts/contracts/metatx/ERC2771Forwarder.sol b/packages/foundry/lib/openzeppelin-contracts/contracts/metatx/ERC2771Forwarder.sol index 5298405..4815c1a 100644 --- a/packages/foundry/lib/openzeppelin-contracts/contracts/metatx/ERC2771Forwarder.sol +++ b/packages/foundry/lib/openzeppelin-contracts/contracts/metatx/ERC2771Forwarder.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: MIT -// OpenZeppelin Contracts (last updated v5.0.0-rc.0) (metatx/ERC2771Forwarder.sol) +// OpenZeppelin Contracts (last updated v5.0.0) (metatx/ERC2771Forwarder.sol) pragma solidity ^0.8.20; diff --git a/packages/foundry/lib/openzeppelin-contracts/contracts/mocks/AccessManagedTarget.sol b/packages/foundry/lib/openzeppelin-contracts/contracts/mocks/AccessManagedTarget.sol index 0f7c7a1..673feed 100644 --- a/packages/foundry/lib/openzeppelin-contracts/contracts/mocks/AccessManagedTarget.sol +++ b/packages/foundry/lib/openzeppelin-contracts/contracts/mocks/AccessManagedTarget.sol @@ -3,6 +3,7 @@ pragma solidity ^0.8.20; import {AccessManaged} from "../access/manager/AccessManaged.sol"; +import {StorageSlot} from "../utils/StorageSlot.sol"; abstract contract AccessManagedTarget is AccessManaged { event CalledRestricted(address caller); @@ -17,6 +18,16 @@ abstract contract AccessManagedTarget is AccessManaged { emit CalledUnrestricted(msg.sender); } + function setIsConsumingScheduledOp(bool isConsuming, bytes32 slot) external { + // Memory layout is 0x....<_consumingSchedule (boolean)><authority (address)> + bytes32 mask = bytes32(uint256(1 << 160)); + if (isConsuming) { + StorageSlot.getBytes32Slot(slot).value |= mask; + } else { + StorageSlot.getBytes32Slot(slot).value &= ~mask; + } + } + fallback() external { emit CalledFallback(msg.sender); } diff --git a/packages/foundry/lib/openzeppelin-contracts/contracts/mocks/AuthorityMock.sol b/packages/foundry/lib/openzeppelin-contracts/contracts/mocks/AuthorityMock.sol new file mode 100644 index 0000000..bf2434b --- /dev/null +++ b/packages/foundry/lib/openzeppelin-contracts/contracts/mocks/AuthorityMock.sol @@ -0,0 +1,69 @@ +// SPDX-License-Identifier: MIT + +pragma solidity ^0.8.20; + +import {IAccessManaged} from "../access/manager/IAccessManaged.sol"; +import {IAuthority} from "../access/manager/IAuthority.sol"; + +contract NotAuthorityMock is IAuthority { + function canCall(address /* caller */, address /* target */, bytes4 /* selector */) external pure returns (bool) { + revert("AuthorityNoDelayMock: not implemented"); + } +} + +contract AuthorityNoDelayMock is IAuthority { + bool _immediate; + + function canCall( + address /* caller */, + address /* target */, + bytes4 /* selector */ + ) external view returns (bool immediate) { + return _immediate; + } + + function _setImmediate(bool immediate) external { + _immediate = immediate; + } +} + +contract AuthorityDelayMock { + bool _immediate; + uint32 _delay; + + function canCall( + address /* caller */, + address /* target */, + bytes4 /* selector */ + ) external view returns (bool immediate, uint32 delay) { + return (_immediate, _delay); + } + + function _setImmediate(bool immediate) external { + _immediate = immediate; + } + + function _setDelay(uint32 delay) external { + _delay = delay; + } +} + +contract AuthorityNoResponse { + function canCall(address /* caller */, address /* target */, bytes4 /* selector */) external view {} +} + +contract AuthoritiyObserveIsConsuming { + event ConsumeScheduledOpCalled(address caller, bytes data, bytes4 isConsuming); + + function canCall( + address /* caller */, + address /* target */, + bytes4 /* selector */ + ) external pure returns (bool immediate, uint32 delay) { + return (false, 1); + } + + function consumeScheduledOp(address caller, bytes memory data) public { + emit ConsumeScheduledOpCalled(caller, data, IAccessManaged(msg.sender).isConsumingScheduledOp()); + } +} diff --git a/packages/foundry/lib/openzeppelin-contracts/contracts/mocks/ERC2771ContextMock.sol b/packages/foundry/lib/openzeppelin-contracts/contracts/mocks/ERC2771ContextMock.sol index 22b9203..33887cf 100644 --- a/packages/foundry/lib/openzeppelin-contracts/contracts/mocks/ERC2771ContextMock.sol +++ b/packages/foundry/lib/openzeppelin-contracts/contracts/mocks/ERC2771ContextMock.sol @@ -4,10 +4,11 @@ pragma solidity ^0.8.20; import {ContextMock} from "./ContextMock.sol"; import {Context} from "../utils/Context.sol"; +import {Multicall} from "../utils/Multicall.sol"; import {ERC2771Context} from "../metatx/ERC2771Context.sol"; // By inheriting from ERC2771Context, Context's internal functions are overridden automatically -contract ERC2771ContextMock is ContextMock, ERC2771Context { +contract ERC2771ContextMock is ContextMock, ERC2771Context, Multicall { /// @custom:oz-upgrades-unsafe-allow constructor constructor(address trustedForwarder) ERC2771Context(trustedForwarder) { emit Sender(_msgSender()); // _msgSender() should be accessible during construction @@ -20,4 +21,8 @@ contract ERC2771ContextMock is ContextMock, ERC2771Context { function _msgData() internal view override(Context, ERC2771Context) returns (bytes calldata) { return ERC2771Context._msgData(); } + + function _contextSuffixLength() internal view override(Context, ERC2771Context) returns (uint256) { + return ERC2771Context._contextSuffixLength(); + } } diff --git a/packages/foundry/lib/openzeppelin-contracts/contracts/mocks/token/ERC20ForceApproveMock.sol b/packages/foundry/lib/openzeppelin-contracts/contracts/mocks/token/ERC20ForceApproveMock.sol index 9fbca97..36c0f57 100644 --- a/packages/foundry/lib/openzeppelin-contracts/contracts/mocks/token/ERC20ForceApproveMock.sol +++ b/packages/foundry/lib/openzeppelin-contracts/contracts/mocks/token/ERC20ForceApproveMock.sol @@ -4,7 +4,7 @@ pragma solidity ^0.8.20; import {ERC20} from "../../token/ERC20/ERC20.sol"; -// contract that replicate USDT (0xdac17f958d2ee523a2206206994597c13d831ec7) approval beavior +// contract that replicate USDT (0xdac17f958d2ee523a2206206994597c13d831ec7) approval behavior abstract contract ERC20ForceApproveMock is ERC20 { function approve(address spender, uint256 amount) public virtual override returns (bool) { require(amount == 0 || allowance(msg.sender, spender) == 0, "USDT approval failure"); diff --git a/packages/foundry/lib/openzeppelin-contracts/contracts/package.json b/packages/foundry/lib/openzeppelin-contracts/contracts/package.json index 5cd2263..6ab8913 100644 --- a/packages/foundry/lib/openzeppelin-contracts/contracts/package.json +++ b/packages/foundry/lib/openzeppelin-contracts/contracts/package.json @@ -1,7 +1,7 @@ { "name": "@openzeppelin/contracts", "description": "Secure Smart Contract library for Solidity", - "version": "5.0.0-rc.2", + "version": "5.0.1", "files": [ "**/*.sol", "/build/contracts/*.json", diff --git a/packages/foundry/lib/openzeppelin-contracts/contracts/proxy/Clones.sol b/packages/foundry/lib/openzeppelin-contracts/contracts/proxy/Clones.sol index 1e35a55..95e467d 100644 --- a/packages/foundry/lib/openzeppelin-contracts/contracts/proxy/Clones.sol +++ b/packages/foundry/lib/openzeppelin-contracts/contracts/proxy/Clones.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: MIT -// OpenZeppelin Contracts (last updated v5.0.0-rc.0) (proxy/Clones.sol) +// OpenZeppelin Contracts (last updated v5.0.0) (proxy/Clones.sol) pragma solidity ^0.8.20; diff --git a/packages/foundry/lib/openzeppelin-contracts/contracts/proxy/ERC1967/ERC1967Proxy.sol b/packages/foundry/lib/openzeppelin-contracts/contracts/proxy/ERC1967/ERC1967Proxy.sol index 0f49f50..0fa61b5 100644 --- a/packages/foundry/lib/openzeppelin-contracts/contracts/proxy/ERC1967/ERC1967Proxy.sol +++ b/packages/foundry/lib/openzeppelin-contracts/contracts/proxy/ERC1967/ERC1967Proxy.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: MIT -// OpenZeppelin Contracts (last updated v5.0.0-rc.0) (proxy/ERC1967/ERC1967Proxy.sol) +// OpenZeppelin Contracts (last updated v5.0.0) (proxy/ERC1967/ERC1967Proxy.sol) pragma solidity ^0.8.20; diff --git a/packages/foundry/lib/openzeppelin-contracts/contracts/proxy/ERC1967/ERC1967Utils.sol b/packages/foundry/lib/openzeppelin-contracts/contracts/proxy/ERC1967/ERC1967Utils.sol index e0689c6..e55bae2 100644 --- a/packages/foundry/lib/openzeppelin-contracts/contracts/proxy/ERC1967/ERC1967Utils.sol +++ b/packages/foundry/lib/openzeppelin-contracts/contracts/proxy/ERC1967/ERC1967Utils.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: MIT -// OpenZeppelin Contracts (last updated v5.0.0-rc.0) (proxy/ERC1967/ERC1967Utils.sol) +// OpenZeppelin Contracts (last updated v5.0.0) (proxy/ERC1967/ERC1967Utils.sol) pragma solidity ^0.8.20; diff --git a/packages/foundry/lib/openzeppelin-contracts/contracts/proxy/Proxy.sol b/packages/foundry/lib/openzeppelin-contracts/contracts/proxy/Proxy.sol index 8a59ff3..0e73651 100644 --- a/packages/foundry/lib/openzeppelin-contracts/contracts/proxy/Proxy.sol +++ b/packages/foundry/lib/openzeppelin-contracts/contracts/proxy/Proxy.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: MIT -// OpenZeppelin Contracts (last updated v5.0.0-rc.0) (proxy/Proxy.sol) +// OpenZeppelin Contracts (last updated v5.0.0) (proxy/Proxy.sol) pragma solidity ^0.8.20; diff --git a/packages/foundry/lib/openzeppelin-contracts/contracts/proxy/beacon/BeaconProxy.sol b/packages/foundry/lib/openzeppelin-contracts/contracts/proxy/beacon/BeaconProxy.sol index b9d7d00..05e26e5 100644 --- a/packages/foundry/lib/openzeppelin-contracts/contracts/proxy/beacon/BeaconProxy.sol +++ b/packages/foundry/lib/openzeppelin-contracts/contracts/proxy/beacon/BeaconProxy.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: MIT -// OpenZeppelin Contracts (last updated v5.0.0-rc.0) (proxy/beacon/BeaconProxy.sol) +// OpenZeppelin Contracts (last updated v5.0.0) (proxy/beacon/BeaconProxy.sol) pragma solidity ^0.8.20; diff --git a/packages/foundry/lib/openzeppelin-contracts/contracts/proxy/beacon/IBeacon.sol b/packages/foundry/lib/openzeppelin-contracts/contracts/proxy/beacon/IBeacon.sol index bdc38e1..36a3c76 100644 --- a/packages/foundry/lib/openzeppelin-contracts/contracts/proxy/beacon/IBeacon.sol +++ b/packages/foundry/lib/openzeppelin-contracts/contracts/proxy/beacon/IBeacon.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: MIT -// OpenZeppelin Contracts (last updated v5.0.0-rc.0) (proxy/beacon/IBeacon.sol) +// OpenZeppelin Contracts (last updated v5.0.0) (proxy/beacon/IBeacon.sol) pragma solidity ^0.8.20; diff --git a/packages/foundry/lib/openzeppelin-contracts/contracts/proxy/beacon/UpgradeableBeacon.sol b/packages/foundry/lib/openzeppelin-contracts/contracts/proxy/beacon/UpgradeableBeacon.sol index db3caf9..8db9bd2 100644 --- a/packages/foundry/lib/openzeppelin-contracts/contracts/proxy/beacon/UpgradeableBeacon.sol +++ b/packages/foundry/lib/openzeppelin-contracts/contracts/proxy/beacon/UpgradeableBeacon.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: MIT -// OpenZeppelin Contracts (last updated v5.0.0-rc.0) (proxy/beacon/UpgradeableBeacon.sol) +// OpenZeppelin Contracts (last updated v5.0.0) (proxy/beacon/UpgradeableBeacon.sol) pragma solidity ^0.8.20; diff --git a/packages/foundry/lib/openzeppelin-contracts/contracts/proxy/transparent/ProxyAdmin.sol b/packages/foundry/lib/openzeppelin-contracts/contracts/proxy/transparent/ProxyAdmin.sol index e546293..dab55ef 100644 --- a/packages/foundry/lib/openzeppelin-contracts/contracts/proxy/transparent/ProxyAdmin.sol +++ b/packages/foundry/lib/openzeppelin-contracts/contracts/proxy/transparent/ProxyAdmin.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: MIT -// OpenZeppelin Contracts (last updated v5.0.0-rc.0) (proxy/transparent/ProxyAdmin.sol) +// OpenZeppelin Contracts (last updated v5.0.0) (proxy/transparent/ProxyAdmin.sol) pragma solidity ^0.8.20; diff --git a/packages/foundry/lib/openzeppelin-contracts/contracts/proxy/transparent/TransparentUpgradeableProxy.sol b/packages/foundry/lib/openzeppelin-contracts/contracts/proxy/transparent/TransparentUpgradeableProxy.sol index ba23a60..b2021c7 100644 --- a/packages/foundry/lib/openzeppelin-contracts/contracts/proxy/transparent/TransparentUpgradeableProxy.sol +++ b/packages/foundry/lib/openzeppelin-contracts/contracts/proxy/transparent/TransparentUpgradeableProxy.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: MIT -// OpenZeppelin Contracts (last updated v5.0.0-rc.0) (proxy/transparent/TransparentUpgradeableProxy.sol) +// OpenZeppelin Contracts (last updated v5.0.0) (proxy/transparent/TransparentUpgradeableProxy.sol) pragma solidity ^0.8.20; diff --git a/packages/foundry/lib/openzeppelin-contracts/contracts/proxy/utils/Initializable.sol b/packages/foundry/lib/openzeppelin-contracts/contracts/proxy/utils/Initializable.sol index 955c264..b3d82b5 100644 --- a/packages/foundry/lib/openzeppelin-contracts/contracts/proxy/utils/Initializable.sol +++ b/packages/foundry/lib/openzeppelin-contracts/contracts/proxy/utils/Initializable.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: MIT -// OpenZeppelin Contracts (last updated v5.0.0-rc.0) (proxy/utils/Initializable.sol) +// OpenZeppelin Contracts (last updated v5.0.0) (proxy/utils/Initializable.sol) pragma solidity ^0.8.20; diff --git a/packages/foundry/lib/openzeppelin-contracts/contracts/proxy/utils/UUPSUpgradeable.sol b/packages/foundry/lib/openzeppelin-contracts/contracts/proxy/utils/UUPSUpgradeable.sol index dedf281..8a4e693 100644 --- a/packages/foundry/lib/openzeppelin-contracts/contracts/proxy/utils/UUPSUpgradeable.sol +++ b/packages/foundry/lib/openzeppelin-contracts/contracts/proxy/utils/UUPSUpgradeable.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: MIT -// OpenZeppelin Contracts (last updated v5.0.0-rc.2) (proxy/utils/UUPSUpgradeable.sol) +// OpenZeppelin Contracts (last updated v5.0.0) (proxy/utils/UUPSUpgradeable.sol) pragma solidity ^0.8.20; diff --git a/packages/foundry/lib/openzeppelin-contracts/contracts/token/ERC1155/ERC1155.sol b/packages/foundry/lib/openzeppelin-contracts/contracts/token/ERC1155/ERC1155.sol index b88381e..316f329 100644 --- a/packages/foundry/lib/openzeppelin-contracts/contracts/token/ERC1155/ERC1155.sol +++ b/packages/foundry/lib/openzeppelin-contracts/contracts/token/ERC1155/ERC1155.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: MIT -// OpenZeppelin Contracts (last updated v5.0.0-rc.0) (token/ERC1155/ERC1155.sol) +// OpenZeppelin Contracts (last updated v5.0.0) (token/ERC1155/ERC1155.sol) pragma solidity ^0.8.20; diff --git a/packages/foundry/lib/openzeppelin-contracts/contracts/token/ERC1155/IERC1155.sol b/packages/foundry/lib/openzeppelin-contracts/contracts/token/ERC1155/IERC1155.sol index 7e86df9..1c99a41 100644 --- a/packages/foundry/lib/openzeppelin-contracts/contracts/token/ERC1155/IERC1155.sol +++ b/packages/foundry/lib/openzeppelin-contracts/contracts/token/ERC1155/IERC1155.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: MIT -// OpenZeppelin Contracts (last updated v5.0.0-rc.0) (token/ERC1155/IERC1155.sol) +// OpenZeppelin Contracts (last updated v5.0.1) (token/ERC1155/IERC1155.sol) pragma solidity ^0.8.20; @@ -104,13 +104,12 @@ interface IERC1155 is IERC165 { /** * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {safeTransferFrom}. * - * * WARNING: This function can potentially allow a reentrancy attack when transferring tokens * to an untrusted contract, when invoking {onERC1155BatchReceived} on the receiver. * Ensure to follow the checks-effects-interactions pattern and consider employing * reentrancy guards when interacting with untrusted contracts. * - * Emits a {TransferBatch} event. + * Emits either a {TransferSingle} or a {TransferBatch} event, depending on the length of the array arguments. * * Requirements: * diff --git a/packages/foundry/lib/openzeppelin-contracts/contracts/token/ERC1155/IERC1155Receiver.sol b/packages/foundry/lib/openzeppelin-contracts/contracts/token/ERC1155/IERC1155Receiver.sol index 4abe834..0f6e2bf 100644 --- a/packages/foundry/lib/openzeppelin-contracts/contracts/token/ERC1155/IERC1155Receiver.sol +++ b/packages/foundry/lib/openzeppelin-contracts/contracts/token/ERC1155/IERC1155Receiver.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: MIT -// OpenZeppelin Contracts (last updated v5.0.0-rc.0) (token/ERC1155/IERC1155Receiver.sol) +// OpenZeppelin Contracts (last updated v5.0.0) (token/ERC1155/IERC1155Receiver.sol) pragma solidity ^0.8.20; diff --git a/packages/foundry/lib/openzeppelin-contracts/contracts/token/ERC1155/extensions/ERC1155Burnable.sol b/packages/foundry/lib/openzeppelin-contracts/contracts/token/ERC1155/extensions/ERC1155Burnable.sol index a6264f8..fd6ad61 100644 --- a/packages/foundry/lib/openzeppelin-contracts/contracts/token/ERC1155/extensions/ERC1155Burnable.sol +++ b/packages/foundry/lib/openzeppelin-contracts/contracts/token/ERC1155/extensions/ERC1155Burnable.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: MIT -// OpenZeppelin Contracts (last updated v5.0.0-rc.0) (token/ERC1155/extensions/ERC1155Burnable.sol) +// OpenZeppelin Contracts (last updated v5.0.0) (token/ERC1155/extensions/ERC1155Burnable.sol) pragma solidity ^0.8.20; diff --git a/packages/foundry/lib/openzeppelin-contracts/contracts/token/ERC1155/extensions/ERC1155Pausable.sol b/packages/foundry/lib/openzeppelin-contracts/contracts/token/ERC1155/extensions/ERC1155Pausable.sol index 6d2e798..529a465 100644 --- a/packages/foundry/lib/openzeppelin-contracts/contracts/token/ERC1155/extensions/ERC1155Pausable.sol +++ b/packages/foundry/lib/openzeppelin-contracts/contracts/token/ERC1155/extensions/ERC1155Pausable.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: MIT -// OpenZeppelin Contracts (last updated v5.0.0-rc.0) (token/ERC1155/extensions/ERC1155Pausable.sol) +// OpenZeppelin Contracts (last updated v5.0.0) (token/ERC1155/extensions/ERC1155Pausable.sol) pragma solidity ^0.8.20; diff --git a/packages/foundry/lib/openzeppelin-contracts/contracts/token/ERC1155/extensions/ERC1155Supply.sol b/packages/foundry/lib/openzeppelin-contracts/contracts/token/ERC1155/extensions/ERC1155Supply.sol index 7f5b163..cef11b4 100644 --- a/packages/foundry/lib/openzeppelin-contracts/contracts/token/ERC1155/extensions/ERC1155Supply.sol +++ b/packages/foundry/lib/openzeppelin-contracts/contracts/token/ERC1155/extensions/ERC1155Supply.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: MIT -// OpenZeppelin Contracts (last updated v5.0.0-rc.0) (token/ERC1155/extensions/ERC1155Supply.sol) +// OpenZeppelin Contracts (last updated v5.0.0) (token/ERC1155/extensions/ERC1155Supply.sol) pragma solidity ^0.8.20; diff --git a/packages/foundry/lib/openzeppelin-contracts/contracts/token/ERC1155/extensions/ERC1155URIStorage.sol b/packages/foundry/lib/openzeppelin-contracts/contracts/token/ERC1155/extensions/ERC1155URIStorage.sol index dfbde20..c2a5bdc 100644 --- a/packages/foundry/lib/openzeppelin-contracts/contracts/token/ERC1155/extensions/ERC1155URIStorage.sol +++ b/packages/foundry/lib/openzeppelin-contracts/contracts/token/ERC1155/extensions/ERC1155URIStorage.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: MIT -// OpenZeppelin Contracts (last updated v5.0.0-rc.0) (token/ERC1155/extensions/ERC1155URIStorage.sol) +// OpenZeppelin Contracts (last updated v5.0.0) (token/ERC1155/extensions/ERC1155URIStorage.sol) pragma solidity ^0.8.20; diff --git a/packages/foundry/lib/openzeppelin-contracts/contracts/token/ERC1155/extensions/IERC1155MetadataURI.sol b/packages/foundry/lib/openzeppelin-contracts/contracts/token/ERC1155/extensions/IERC1155MetadataURI.sol index c218486..e3fb74d 100644 --- a/packages/foundry/lib/openzeppelin-contracts/contracts/token/ERC1155/extensions/IERC1155MetadataURI.sol +++ b/packages/foundry/lib/openzeppelin-contracts/contracts/token/ERC1155/extensions/IERC1155MetadataURI.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: MIT -// OpenZeppelin Contracts (last updated v5.0.0-rc.0) (token/ERC1155/extensions/IERC1155MetadataURI.sol) +// OpenZeppelin Contracts (last updated v5.0.0) (token/ERC1155/extensions/IERC1155MetadataURI.sol) pragma solidity ^0.8.20; diff --git a/packages/foundry/lib/openzeppelin-contracts/contracts/token/ERC1155/utils/ERC1155Holder.sol b/packages/foundry/lib/openzeppelin-contracts/contracts/token/ERC1155/utils/ERC1155Holder.sol index 9e4f9f5..b108cdb 100644 --- a/packages/foundry/lib/openzeppelin-contracts/contracts/token/ERC1155/utils/ERC1155Holder.sol +++ b/packages/foundry/lib/openzeppelin-contracts/contracts/token/ERC1155/utils/ERC1155Holder.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: MIT -// OpenZeppelin Contracts (last updated v5.0.0-rc.2) (token/ERC1155/utils/ERC1155Holder.sol) +// OpenZeppelin Contracts (last updated v5.0.0) (token/ERC1155/utils/ERC1155Holder.sol) pragma solidity ^0.8.20; diff --git a/packages/foundry/lib/openzeppelin-contracts/contracts/token/ERC20/ERC20.sol b/packages/foundry/lib/openzeppelin-contracts/contracts/token/ERC20/ERC20.sol index e456391..1fde527 100644 --- a/packages/foundry/lib/openzeppelin-contracts/contracts/token/ERC20/ERC20.sol +++ b/packages/foundry/lib/openzeppelin-contracts/contracts/token/ERC20/ERC20.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: MIT -// OpenZeppelin Contracts (last updated v5.0.0-rc.0) (token/ERC20/ERC20.sol) +// OpenZeppelin Contracts (last updated v5.0.0) (token/ERC20/ERC20.sol) pragma solidity ^0.8.20; diff --git a/packages/foundry/lib/openzeppelin-contracts/contracts/token/ERC20/IERC20.sol b/packages/foundry/lib/openzeppelin-contracts/contracts/token/ERC20/IERC20.sol index 8b00999..db01cf4 100644 --- a/packages/foundry/lib/openzeppelin-contracts/contracts/token/ERC20/IERC20.sol +++ b/packages/foundry/lib/openzeppelin-contracts/contracts/token/ERC20/IERC20.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: MIT -// OpenZeppelin Contracts (last updated v5.0.0-rc.0) (token/ERC20/IERC20.sol) +// OpenZeppelin Contracts (last updated v5.0.0) (token/ERC20/IERC20.sol) pragma solidity ^0.8.20; diff --git a/packages/foundry/lib/openzeppelin-contracts/contracts/token/ERC20/extensions/ERC20Burnable.sol b/packages/foundry/lib/openzeppelin-contracts/contracts/token/ERC20/extensions/ERC20Burnable.sol index 0500864..4d482d8 100644 --- a/packages/foundry/lib/openzeppelin-contracts/contracts/token/ERC20/extensions/ERC20Burnable.sol +++ b/packages/foundry/lib/openzeppelin-contracts/contracts/token/ERC20/extensions/ERC20Burnable.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: MIT -// OpenZeppelin Contracts (last updated v5.0.0-rc.0) (token/ERC20/extensions/ERC20Burnable.sol) +// OpenZeppelin Contracts (last updated v5.0.0) (token/ERC20/extensions/ERC20Burnable.sol) pragma solidity ^0.8.20; diff --git a/packages/foundry/lib/openzeppelin-contracts/contracts/token/ERC20/extensions/ERC20Capped.sol b/packages/foundry/lib/openzeppelin-contracts/contracts/token/ERC20/extensions/ERC20Capped.sol index 765f9c1..56bafb3 100644 --- a/packages/foundry/lib/openzeppelin-contracts/contracts/token/ERC20/extensions/ERC20Capped.sol +++ b/packages/foundry/lib/openzeppelin-contracts/contracts/token/ERC20/extensions/ERC20Capped.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: MIT -// OpenZeppelin Contracts (last updated v5.0.0-rc.0) (token/ERC20/extensions/ERC20Capped.sol) +// OpenZeppelin Contracts (last updated v5.0.0) (token/ERC20/extensions/ERC20Capped.sol) pragma solidity ^0.8.20; diff --git a/packages/foundry/lib/openzeppelin-contracts/contracts/token/ERC20/extensions/ERC20FlashMint.sol b/packages/foundry/lib/openzeppelin-contracts/contracts/token/ERC20/extensions/ERC20FlashMint.sol index 1b9a53c..0e89312 100644 --- a/packages/foundry/lib/openzeppelin-contracts/contracts/token/ERC20/extensions/ERC20FlashMint.sol +++ b/packages/foundry/lib/openzeppelin-contracts/contracts/token/ERC20/extensions/ERC20FlashMint.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: MIT -// OpenZeppelin Contracts (last updated v5.0.0-rc.0) (token/ERC20/extensions/ERC20FlashMint.sol) +// OpenZeppelin Contracts (last updated v5.0.0) (token/ERC20/extensions/ERC20FlashMint.sol) pragma solidity ^0.8.20; diff --git a/packages/foundry/lib/openzeppelin-contracts/contracts/token/ERC20/extensions/ERC20Pausable.sol b/packages/foundry/lib/openzeppelin-contracts/contracts/token/ERC20/extensions/ERC20Pausable.sol index db0c0a5..8fe832b 100644 --- a/packages/foundry/lib/openzeppelin-contracts/contracts/token/ERC20/extensions/ERC20Pausable.sol +++ b/packages/foundry/lib/openzeppelin-contracts/contracts/token/ERC20/extensions/ERC20Pausable.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: MIT -// OpenZeppelin Contracts (last updated v5.0.0-rc.0) (token/ERC20/extensions/ERC20Pausable.sol) +// OpenZeppelin Contracts (last updated v5.0.0) (token/ERC20/extensions/ERC20Pausable.sol) pragma solidity ^0.8.20; diff --git a/packages/foundry/lib/openzeppelin-contracts/contracts/token/ERC20/extensions/ERC20Permit.sol b/packages/foundry/lib/openzeppelin-contracts/contracts/token/ERC20/extensions/ERC20Permit.sol index f9d1b49..36667ad 100644 --- a/packages/foundry/lib/openzeppelin-contracts/contracts/token/ERC20/extensions/ERC20Permit.sol +++ b/packages/foundry/lib/openzeppelin-contracts/contracts/token/ERC20/extensions/ERC20Permit.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: MIT -// OpenZeppelin Contracts (last updated v5.0.0-rc.0) (token/ERC20/extensions/ERC20Permit.sol) +// OpenZeppelin Contracts (last updated v5.0.0) (token/ERC20/extensions/ERC20Permit.sol) pragma solidity ^0.8.20; diff --git a/packages/foundry/lib/openzeppelin-contracts/contracts/token/ERC20/extensions/ERC20Votes.sol b/packages/foundry/lib/openzeppelin-contracts/contracts/token/ERC20/extensions/ERC20Votes.sol index a3081bd..6aa6ed0 100644 --- a/packages/foundry/lib/openzeppelin-contracts/contracts/token/ERC20/extensions/ERC20Votes.sol +++ b/packages/foundry/lib/openzeppelin-contracts/contracts/token/ERC20/extensions/ERC20Votes.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: MIT -// OpenZeppelin Contracts (last updated v5.0.0-rc.0) (token/ERC20/extensions/ERC20Votes.sol) +// OpenZeppelin Contracts (last updated v5.0.0) (token/ERC20/extensions/ERC20Votes.sol) pragma solidity ^0.8.20; diff --git a/packages/foundry/lib/openzeppelin-contracts/contracts/token/ERC20/extensions/ERC20Wrapper.sol b/packages/foundry/lib/openzeppelin-contracts/contracts/token/ERC20/extensions/ERC20Wrapper.sol index 0d4ec86..6144880 100644 --- a/packages/foundry/lib/openzeppelin-contracts/contracts/token/ERC20/extensions/ERC20Wrapper.sol +++ b/packages/foundry/lib/openzeppelin-contracts/contracts/token/ERC20/extensions/ERC20Wrapper.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: MIT -// OpenZeppelin Contracts (last updated v5.0.0-rc.0) (token/ERC20/extensions/ERC20Wrapper.sol) +// OpenZeppelin Contracts (last updated v5.0.0) (token/ERC20/extensions/ERC20Wrapper.sol) pragma solidity ^0.8.20; diff --git a/packages/foundry/lib/openzeppelin-contracts/contracts/token/ERC20/extensions/ERC4626.sol b/packages/foundry/lib/openzeppelin-contracts/contracts/token/ERC20/extensions/ERC4626.sol index bded3b4..ec60872 100644 --- a/packages/foundry/lib/openzeppelin-contracts/contracts/token/ERC20/extensions/ERC4626.sol +++ b/packages/foundry/lib/openzeppelin-contracts/contracts/token/ERC20/extensions/ERC4626.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: MIT -// OpenZeppelin Contracts (last updated v5.0.0-rc.0) (token/ERC20/extensions/ERC4626.sol) +// OpenZeppelin Contracts (last updated v5.0.0) (token/ERC20/extensions/ERC4626.sol) pragma solidity ^0.8.20; diff --git a/packages/foundry/lib/openzeppelin-contracts/contracts/token/ERC20/extensions/IERC20Metadata.sol b/packages/foundry/lib/openzeppelin-contracts/contracts/token/ERC20/extensions/IERC20Metadata.sol index 14dd725..1a38cba 100644 --- a/packages/foundry/lib/openzeppelin-contracts/contracts/token/ERC20/extensions/IERC20Metadata.sol +++ b/packages/foundry/lib/openzeppelin-contracts/contracts/token/ERC20/extensions/IERC20Metadata.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: MIT -// OpenZeppelin Contracts (last updated v5.0.0-rc.0) (token/ERC20/extensions/IERC20Metadata.sol) +// OpenZeppelin Contracts (last updated v5.0.0) (token/ERC20/extensions/IERC20Metadata.sol) pragma solidity ^0.8.20; diff --git a/packages/foundry/lib/openzeppelin-contracts/contracts/token/ERC20/extensions/IERC20Permit.sol b/packages/foundry/lib/openzeppelin-contracts/contracts/token/ERC20/extensions/IERC20Permit.sol index 40ae7ba..5af4810 100644 --- a/packages/foundry/lib/openzeppelin-contracts/contracts/token/ERC20/extensions/IERC20Permit.sol +++ b/packages/foundry/lib/openzeppelin-contracts/contracts/token/ERC20/extensions/IERC20Permit.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: MIT -// OpenZeppelin Contracts (last updated v5.0.0-rc.0) (token/ERC20/extensions/IERC20Permit.sol) +// OpenZeppelin Contracts (last updated v5.0.0) (token/ERC20/extensions/IERC20Permit.sol) pragma solidity ^0.8.20; diff --git a/packages/foundry/lib/openzeppelin-contracts/contracts/token/ERC20/utils/SafeERC20.sol b/packages/foundry/lib/openzeppelin-contracts/contracts/token/ERC20/utils/SafeERC20.sol index af81159..bb65709 100644 --- a/packages/foundry/lib/openzeppelin-contracts/contracts/token/ERC20/utils/SafeERC20.sol +++ b/packages/foundry/lib/openzeppelin-contracts/contracts/token/ERC20/utils/SafeERC20.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: MIT -// OpenZeppelin Contracts (last updated v5.0.0-rc.0) (token/ERC20/utils/SafeERC20.sol) +// OpenZeppelin Contracts (last updated v5.0.0) (token/ERC20/utils/SafeERC20.sol) pragma solidity ^0.8.20; diff --git a/packages/foundry/lib/openzeppelin-contracts/contracts/token/ERC721/ERC721.sol b/packages/foundry/lib/openzeppelin-contracts/contracts/token/ERC721/ERC721.sol index b912797..98a80e5 100644 --- a/packages/foundry/lib/openzeppelin-contracts/contracts/token/ERC721/ERC721.sol +++ b/packages/foundry/lib/openzeppelin-contracts/contracts/token/ERC721/ERC721.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: MIT -// OpenZeppelin Contracts (last updated v5.0.0-rc.0) (token/ERC721/ERC721.sol) +// OpenZeppelin Contracts (last updated v5.0.0) (token/ERC721/ERC721.sol) pragma solidity ^0.8.20; diff --git a/packages/foundry/lib/openzeppelin-contracts/contracts/token/ERC721/IERC721.sol b/packages/foundry/lib/openzeppelin-contracts/contracts/token/ERC721/IERC721.sol index 98a4213..12f3236 100644 --- a/packages/foundry/lib/openzeppelin-contracts/contracts/token/ERC721/IERC721.sol +++ b/packages/foundry/lib/openzeppelin-contracts/contracts/token/ERC721/IERC721.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: MIT -// OpenZeppelin Contracts (last updated v5.0.0-rc.0) (token/ERC721/IERC721.sol) +// OpenZeppelin Contracts (last updated v5.0.0) (token/ERC721/IERC721.sol) pragma solidity ^0.8.20; diff --git a/packages/foundry/lib/openzeppelin-contracts/contracts/token/ERC721/IERC721Receiver.sol b/packages/foundry/lib/openzeppelin-contracts/contracts/token/ERC721/IERC721Receiver.sol index 4d25a01..f9dc133 100644 --- a/packages/foundry/lib/openzeppelin-contracts/contracts/token/ERC721/IERC721Receiver.sol +++ b/packages/foundry/lib/openzeppelin-contracts/contracts/token/ERC721/IERC721Receiver.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: MIT -// OpenZeppelin Contracts (last updated v5.0.0-rc.0) (token/ERC721/IERC721Receiver.sol) +// OpenZeppelin Contracts (last updated v5.0.0) (token/ERC721/IERC721Receiver.sol) pragma solidity ^0.8.20; diff --git a/packages/foundry/lib/openzeppelin-contracts/contracts/token/ERC721/extensions/ERC721Burnable.sol b/packages/foundry/lib/openzeppelin-contracts/contracts/token/ERC721/extensions/ERC721Burnable.sol index 639661e..2a150af 100644 --- a/packages/foundry/lib/openzeppelin-contracts/contracts/token/ERC721/extensions/ERC721Burnable.sol +++ b/packages/foundry/lib/openzeppelin-contracts/contracts/token/ERC721/extensions/ERC721Burnable.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: MIT -// OpenZeppelin Contracts (last updated v5.0.0-rc.0) (token/ERC721/extensions/ERC721Burnable.sol) +// OpenZeppelin Contracts (last updated v5.0.0) (token/ERC721/extensions/ERC721Burnable.sol) pragma solidity ^0.8.20; diff --git a/packages/foundry/lib/openzeppelin-contracts/contracts/token/ERC721/extensions/ERC721Consecutive.sol b/packages/foundry/lib/openzeppelin-contracts/contracts/token/ERC721/extensions/ERC721Consecutive.sol index 8e670d5..0d6cbc7 100644 --- a/packages/foundry/lib/openzeppelin-contracts/contracts/token/ERC721/extensions/ERC721Consecutive.sol +++ b/packages/foundry/lib/openzeppelin-contracts/contracts/token/ERC721/extensions/ERC721Consecutive.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: MIT -// OpenZeppelin Contracts (last updated v5.0.0-rc.0) (token/ERC721/extensions/ERC721Consecutive.sol) +// OpenZeppelin Contracts (last updated v5.0.0) (token/ERC721/extensions/ERC721Consecutive.sol) pragma solidity ^0.8.20; diff --git a/packages/foundry/lib/openzeppelin-contracts/contracts/token/ERC721/extensions/ERC721Enumerable.sol b/packages/foundry/lib/openzeppelin-contracts/contracts/token/ERC721/extensions/ERC721Enumerable.sol index 803a937..cbf3e03 100644 --- a/packages/foundry/lib/openzeppelin-contracts/contracts/token/ERC721/extensions/ERC721Enumerable.sol +++ b/packages/foundry/lib/openzeppelin-contracts/contracts/token/ERC721/extensions/ERC721Enumerable.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: MIT -// OpenZeppelin Contracts (last updated v5.0.0-rc.0) (token/ERC721/extensions/ERC721Enumerable.sol) +// OpenZeppelin Contracts (last updated v5.0.0) (token/ERC721/extensions/ERC721Enumerable.sol) pragma solidity ^0.8.20; diff --git a/packages/foundry/lib/openzeppelin-contracts/contracts/token/ERC721/extensions/ERC721Pausable.sol b/packages/foundry/lib/openzeppelin-contracts/contracts/token/ERC721/extensions/ERC721Pausable.sol index cc3d46b..0b34fd9 100644 --- a/packages/foundry/lib/openzeppelin-contracts/contracts/token/ERC721/extensions/ERC721Pausable.sol +++ b/packages/foundry/lib/openzeppelin-contracts/contracts/token/ERC721/extensions/ERC721Pausable.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: MIT -// OpenZeppelin Contracts (last updated v5.0.0-rc.0) (token/ERC721/extensions/ERC721Pausable.sol) +// OpenZeppelin Contracts (last updated v5.0.0) (token/ERC721/extensions/ERC721Pausable.sol) pragma solidity ^0.8.20; diff --git a/packages/foundry/lib/openzeppelin-contracts/contracts/token/ERC721/extensions/ERC721Royalty.sol b/packages/foundry/lib/openzeppelin-contracts/contracts/token/ERC721/extensions/ERC721Royalty.sol index e76a512..be98ec7 100644 --- a/packages/foundry/lib/openzeppelin-contracts/contracts/token/ERC721/extensions/ERC721Royalty.sol +++ b/packages/foundry/lib/openzeppelin-contracts/contracts/token/ERC721/extensions/ERC721Royalty.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: MIT -// OpenZeppelin Contracts (last updated v5.0.0-rc.0) (token/ERC721/extensions/ERC721Royalty.sol) +// OpenZeppelin Contracts (last updated v5.0.0) (token/ERC721/extensions/ERC721Royalty.sol) pragma solidity ^0.8.20; diff --git a/packages/foundry/lib/openzeppelin-contracts/contracts/token/ERC721/extensions/ERC721URIStorage.sol b/packages/foundry/lib/openzeppelin-contracts/contracts/token/ERC721/extensions/ERC721URIStorage.sol index d9948ea..2584cb5 100644 --- a/packages/foundry/lib/openzeppelin-contracts/contracts/token/ERC721/extensions/ERC721URIStorage.sol +++ b/packages/foundry/lib/openzeppelin-contracts/contracts/token/ERC721/extensions/ERC721URIStorage.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: MIT -// OpenZeppelin Contracts (last updated v5.0.0-rc.0) (token/ERC721/extensions/ERC721URIStorage.sol) +// OpenZeppelin Contracts (last updated v5.0.0) (token/ERC721/extensions/ERC721URIStorage.sol) pragma solidity ^0.8.20; diff --git a/packages/foundry/lib/openzeppelin-contracts/contracts/token/ERC721/extensions/ERC721Votes.sol b/packages/foundry/lib/openzeppelin-contracts/contracts/token/ERC721/extensions/ERC721Votes.sol index d87fb8f..5628715 100644 --- a/packages/foundry/lib/openzeppelin-contracts/contracts/token/ERC721/extensions/ERC721Votes.sol +++ b/packages/foundry/lib/openzeppelin-contracts/contracts/token/ERC721/extensions/ERC721Votes.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: MIT -// OpenZeppelin Contracts (last updated v5.0.0-rc.0) (token/ERC721/extensions/ERC721Votes.sol) +// OpenZeppelin Contracts (last updated v5.0.0) (token/ERC721/extensions/ERC721Votes.sol) pragma solidity ^0.8.20; diff --git a/packages/foundry/lib/openzeppelin-contracts/contracts/token/ERC721/extensions/ERC721Wrapper.sol b/packages/foundry/lib/openzeppelin-contracts/contracts/token/ERC721/extensions/ERC721Wrapper.sol index 8da6da6..e091bdd 100644 --- a/packages/foundry/lib/openzeppelin-contracts/contracts/token/ERC721/extensions/ERC721Wrapper.sol +++ b/packages/foundry/lib/openzeppelin-contracts/contracts/token/ERC721/extensions/ERC721Wrapper.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: MIT -// OpenZeppelin Contracts (last updated v5.0.0-rc.0) (token/ERC721/extensions/ERC721Wrapper.sol) +// OpenZeppelin Contracts (last updated v5.0.0) (token/ERC721/extensions/ERC721Wrapper.sol) pragma solidity ^0.8.20; diff --git a/packages/foundry/lib/openzeppelin-contracts/contracts/token/ERC721/extensions/IERC721Enumerable.sol b/packages/foundry/lib/openzeppelin-contracts/contracts/token/ERC721/extensions/IERC721Enumerable.sol index 553a936..7a09cc6 100644 --- a/packages/foundry/lib/openzeppelin-contracts/contracts/token/ERC721/extensions/IERC721Enumerable.sol +++ b/packages/foundry/lib/openzeppelin-contracts/contracts/token/ERC721/extensions/IERC721Enumerable.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: MIT -// OpenZeppelin Contracts (last updated v5.0.0-rc.0) (token/ERC721/extensions/IERC721Enumerable.sol) +// OpenZeppelin Contracts (last updated v5.0.0) (token/ERC721/extensions/IERC721Enumerable.sol) pragma solidity ^0.8.20; diff --git a/packages/foundry/lib/openzeppelin-contracts/contracts/token/ERC721/extensions/IERC721Metadata.sol b/packages/foundry/lib/openzeppelin-contracts/contracts/token/ERC721/extensions/IERC721Metadata.sol index a2d76fd..e9e00fa 100644 --- a/packages/foundry/lib/openzeppelin-contracts/contracts/token/ERC721/extensions/IERC721Metadata.sol +++ b/packages/foundry/lib/openzeppelin-contracts/contracts/token/ERC721/extensions/IERC721Metadata.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: MIT -// OpenZeppelin Contracts (last updated v5.0.0-rc.0) (token/ERC721/extensions/IERC721Metadata.sol) +// OpenZeppelin Contracts (last updated v5.0.0) (token/ERC721/extensions/IERC721Metadata.sol) pragma solidity ^0.8.20; diff --git a/packages/foundry/lib/openzeppelin-contracts/contracts/token/ERC721/utils/ERC721Holder.sol b/packages/foundry/lib/openzeppelin-contracts/contracts/token/ERC721/utils/ERC721Holder.sol index c4d47d1..6bb23ac 100644 --- a/packages/foundry/lib/openzeppelin-contracts/contracts/token/ERC721/utils/ERC721Holder.sol +++ b/packages/foundry/lib/openzeppelin-contracts/contracts/token/ERC721/utils/ERC721Holder.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: MIT -// OpenZeppelin Contracts (last updated v5.0.0-rc.2) (token/ERC721/utils/ERC721Holder.sol) +// OpenZeppelin Contracts (last updated v5.0.0) (token/ERC721/utils/ERC721Holder.sol) pragma solidity ^0.8.20; diff --git a/packages/foundry/lib/openzeppelin-contracts/contracts/token/common/ERC2981.sol b/packages/foundry/lib/openzeppelin-contracts/contracts/token/common/ERC2981.sol index a885e21..fce0251 100644 --- a/packages/foundry/lib/openzeppelin-contracts/contracts/token/common/ERC2981.sol +++ b/packages/foundry/lib/openzeppelin-contracts/contracts/token/common/ERC2981.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: MIT -// OpenZeppelin Contracts (last updated v5.0.0-rc.0) (token/common/ERC2981.sol) +// OpenZeppelin Contracts (last updated v5.0.0) (token/common/ERC2981.sol) pragma solidity ^0.8.20; diff --git a/packages/foundry/lib/openzeppelin-contracts/contracts/utils/Address.sol b/packages/foundry/lib/openzeppelin-contracts/contracts/utils/Address.sol index f8c157a..b7e3059 100644 --- a/packages/foundry/lib/openzeppelin-contracts/contracts/utils/Address.sol +++ b/packages/foundry/lib/openzeppelin-contracts/contracts/utils/Address.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: MIT -// OpenZeppelin Contracts (last updated v5.0.0-rc.0) (utils/Address.sol) +// OpenZeppelin Contracts (last updated v5.0.0) (utils/Address.sol) pragma solidity ^0.8.20; diff --git a/packages/foundry/lib/openzeppelin-contracts/contracts/utils/Arrays.sol b/packages/foundry/lib/openzeppelin-contracts/contracts/utils/Arrays.sol index a34d0a7..aaab3ce 100644 --- a/packages/foundry/lib/openzeppelin-contracts/contracts/utils/Arrays.sol +++ b/packages/foundry/lib/openzeppelin-contracts/contracts/utils/Arrays.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: MIT -// OpenZeppelin Contracts (last updated v5.0.0-rc.0) (utils/Arrays.sol) +// OpenZeppelin Contracts (last updated v5.0.0) (utils/Arrays.sol) pragma solidity ^0.8.20; diff --git a/packages/foundry/lib/openzeppelin-contracts/contracts/utils/Base64.sol b/packages/foundry/lib/openzeppelin-contracts/contracts/utils/Base64.sol index 0b76284..f8547d1 100644 --- a/packages/foundry/lib/openzeppelin-contracts/contracts/utils/Base64.sol +++ b/packages/foundry/lib/openzeppelin-contracts/contracts/utils/Base64.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: MIT -// OpenZeppelin Contracts (last updated v5.0.0-rc.0) (utils/Base64.sol) +// OpenZeppelin Contracts (last updated v5.0.0) (utils/Base64.sol) pragma solidity ^0.8.20; diff --git a/packages/foundry/lib/openzeppelin-contracts/contracts/utils/Context.sol b/packages/foundry/lib/openzeppelin-contracts/contracts/utils/Context.sol index 772a3c3..4e535fe 100644 --- a/packages/foundry/lib/openzeppelin-contracts/contracts/utils/Context.sol +++ b/packages/foundry/lib/openzeppelin-contracts/contracts/utils/Context.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: MIT -// OpenZeppelin Contracts (last updated v5.0.0-rc.2) (utils/Context.sol) +// OpenZeppelin Contracts (last updated v5.0.1) (utils/Context.sol) pragma solidity ^0.8.20; @@ -21,4 +21,8 @@ abstract contract Context { function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } + + function _contextSuffixLength() internal view virtual returns (uint256) { + return 0; + } } diff --git a/packages/foundry/lib/openzeppelin-contracts/contracts/utils/Create2.sol b/packages/foundry/lib/openzeppelin-contracts/contracts/utils/Create2.sol index 99f2242..ad1cd5f 100644 --- a/packages/foundry/lib/openzeppelin-contracts/contracts/utils/Create2.sol +++ b/packages/foundry/lib/openzeppelin-contracts/contracts/utils/Create2.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: MIT -// OpenZeppelin Contracts (last updated v5.0.0-rc.0) (utils/Create2.sol) +// OpenZeppelin Contracts (last updated v5.0.0) (utils/Create2.sol) pragma solidity ^0.8.20; diff --git a/packages/foundry/lib/openzeppelin-contracts/contracts/utils/Multicall.sol b/packages/foundry/lib/openzeppelin-contracts/contracts/utils/Multicall.sol index f61025d..0dd5b4a 100644 --- a/packages/foundry/lib/openzeppelin-contracts/contracts/utils/Multicall.sol +++ b/packages/foundry/lib/openzeppelin-contracts/contracts/utils/Multicall.sol @@ -1,22 +1,36 @@ // SPDX-License-Identifier: MIT -// OpenZeppelin Contracts (last updated v5.0.0-rc.2) (utils/Multicall.sol) +// OpenZeppelin Contracts (last updated v5.0.1) (utils/Multicall.sol) pragma solidity ^0.8.20; import {Address} from "./Address.sol"; +import {Context} from "./Context.sol"; /** * @dev Provides a function to batch together multiple calls in a single external call. + * + * Consider any assumption about calldata validation performed by the sender may be violated if it's not especially + * careful about sending transactions invoking {multicall}. For example, a relay address that filters function + * selectors won't filter calls nested within a {multicall} operation. + * + * NOTE: Since 5.0.1 and 4.9.4, this contract identifies non-canonical contexts (i.e. `msg.sender` is not {_msgSender}). + * If a non-canonical context is identified, the following self `delegatecall` appends the last bytes of `msg.data` + * to the subcall. This makes it safe to use with {ERC2771Context}. Contexts that don't affect the resolution of + * {_msgSender} are not propagated to subcalls. */ -abstract contract Multicall { +abstract contract Multicall is Context { /** * @dev Receives and executes a batch of function calls on this contract. * @custom:oz-upgrades-unsafe-allow-reachable delegatecall */ function multicall(bytes[] calldata data) external virtual returns (bytes[] memory results) { + bytes memory context = msg.sender == _msgSender() + ? new bytes(0) + : msg.data[msg.data.length - _contextSuffixLength():]; + results = new bytes[](data.length); for (uint256 i = 0; i < data.length; i++) { - results[i] = Address.functionDelegateCall(address(this), data[i]); + results[i] = Address.functionDelegateCall(address(this), bytes.concat(data[i], context)); } return results; } diff --git a/packages/foundry/lib/openzeppelin-contracts/contracts/utils/Nonces.sol b/packages/foundry/lib/openzeppelin-contracts/contracts/utils/Nonces.sol index 500dcd9..37451ff 100644 --- a/packages/foundry/lib/openzeppelin-contracts/contracts/utils/Nonces.sol +++ b/packages/foundry/lib/openzeppelin-contracts/contracts/utils/Nonces.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: MIT -// OpenZeppelin Contracts (last updated v5.0.0-rc.0) (utils/Nonces.sol) +// OpenZeppelin Contracts (last updated v5.0.0) (utils/Nonces.sol) pragma solidity ^0.8.20; /** diff --git a/packages/foundry/lib/openzeppelin-contracts/contracts/utils/Pausable.sol b/packages/foundry/lib/openzeppelin-contracts/contracts/utils/Pausable.sol index 5b3e72a..312f1cb 100644 --- a/packages/foundry/lib/openzeppelin-contracts/contracts/utils/Pausable.sol +++ b/packages/foundry/lib/openzeppelin-contracts/contracts/utils/Pausable.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: MIT -// OpenZeppelin Contracts (last updated v5.0.0-rc.0) (utils/Pausable.sol) +// OpenZeppelin Contracts (last updated v5.0.0) (utils/Pausable.sol) pragma solidity ^0.8.20; diff --git a/packages/foundry/lib/openzeppelin-contracts/contracts/utils/ReentrancyGuard.sol b/packages/foundry/lib/openzeppelin-contracts/contracts/utils/ReentrancyGuard.sol index 92108ed..291d92f 100644 --- a/packages/foundry/lib/openzeppelin-contracts/contracts/utils/ReentrancyGuard.sol +++ b/packages/foundry/lib/openzeppelin-contracts/contracts/utils/ReentrancyGuard.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: MIT -// OpenZeppelin Contracts (last updated v5.0.0-rc.0) (utils/ReentrancyGuard.sol) +// OpenZeppelin Contracts (last updated v5.0.0) (utils/ReentrancyGuard.sol) pragma solidity ^0.8.20; diff --git a/packages/foundry/lib/openzeppelin-contracts/contracts/utils/ShortStrings.sol b/packages/foundry/lib/openzeppelin-contracts/contracts/utils/ShortStrings.sol index 87dd081..fdfe774 100644 --- a/packages/foundry/lib/openzeppelin-contracts/contracts/utils/ShortStrings.sol +++ b/packages/foundry/lib/openzeppelin-contracts/contracts/utils/ShortStrings.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: MIT -// OpenZeppelin Contracts (last updated v5.0.0-rc.0) (utils/ShortStrings.sol) +// OpenZeppelin Contracts (last updated v5.0.0) (utils/ShortStrings.sol) pragma solidity ^0.8.20; diff --git a/packages/foundry/lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol b/packages/foundry/lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol index 4618c65..0841832 100644 --- a/packages/foundry/lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol +++ b/packages/foundry/lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: MIT -// OpenZeppelin Contracts (last updated v5.0.0-rc.0) (utils/StorageSlot.sol) +// OpenZeppelin Contracts (last updated v5.0.0) (utils/StorageSlot.sol) // This file was procedurally generated from scripts/generate/templates/StorageSlot.js. pragma solidity ^0.8.20; diff --git a/packages/foundry/lib/openzeppelin-contracts/contracts/utils/Strings.sol b/packages/foundry/lib/openzeppelin-contracts/contracts/utils/Strings.sol index be42c0b..b2c0a40 100644 --- a/packages/foundry/lib/openzeppelin-contracts/contracts/utils/Strings.sol +++ b/packages/foundry/lib/openzeppelin-contracts/contracts/utils/Strings.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: MIT -// OpenZeppelin Contracts (last updated v5.0.0-rc.0) (utils/Strings.sol) +// OpenZeppelin Contracts (last updated v5.0.0) (utils/Strings.sol) pragma solidity ^0.8.20; diff --git a/packages/foundry/lib/openzeppelin-contracts/contracts/utils/cryptography/ECDSA.sol b/packages/foundry/lib/openzeppelin-contracts/contracts/utils/cryptography/ECDSA.sol index ea8127a..04b3e5e 100644 --- a/packages/foundry/lib/openzeppelin-contracts/contracts/utils/cryptography/ECDSA.sol +++ b/packages/foundry/lib/openzeppelin-contracts/contracts/utils/cryptography/ECDSA.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: MIT -// OpenZeppelin Contracts (last updated v5.0.0-rc.0) (utils/cryptography/ECDSA.sol) +// OpenZeppelin Contracts (last updated v5.0.0) (utils/cryptography/ECDSA.sol) pragma solidity ^0.8.20; diff --git a/packages/foundry/lib/openzeppelin-contracts/contracts/utils/cryptography/EIP712.sol b/packages/foundry/lib/openzeppelin-contracts/contracts/utils/cryptography/EIP712.sol index b29b08d..8e548cd 100644 --- a/packages/foundry/lib/openzeppelin-contracts/contracts/utils/cryptography/EIP712.sol +++ b/packages/foundry/lib/openzeppelin-contracts/contracts/utils/cryptography/EIP712.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: MIT -// OpenZeppelin Contracts (last updated v5.0.0-rc.0) (utils/cryptography/EIP712.sol) +// OpenZeppelin Contracts (last updated v5.0.0) (utils/cryptography/EIP712.sol) pragma solidity ^0.8.20; diff --git a/packages/foundry/lib/openzeppelin-contracts/contracts/utils/cryptography/MerkleProof.sol b/packages/foundry/lib/openzeppelin-contracts/contracts/utils/cryptography/MerkleProof.sol index 68293c4..525f5da 100644 --- a/packages/foundry/lib/openzeppelin-contracts/contracts/utils/cryptography/MerkleProof.sol +++ b/packages/foundry/lib/openzeppelin-contracts/contracts/utils/cryptography/MerkleProof.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: MIT -// OpenZeppelin Contracts (last updated v5.0.0-rc.0) (utils/cryptography/MerkleProof.sol) +// OpenZeppelin Contracts (last updated v5.0.0) (utils/cryptography/MerkleProof.sol) pragma solidity ^0.8.20; diff --git a/packages/foundry/lib/openzeppelin-contracts/contracts/utils/cryptography/MessageHashUtils.sol b/packages/foundry/lib/openzeppelin-contracts/contracts/utils/cryptography/MessageHashUtils.sol index ef23977..8836693 100644 --- a/packages/foundry/lib/openzeppelin-contracts/contracts/utils/cryptography/MessageHashUtils.sol +++ b/packages/foundry/lib/openzeppelin-contracts/contracts/utils/cryptography/MessageHashUtils.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: MIT -// OpenZeppelin Contracts (last updated v5.0.0-rc.0) (utils/cryptography/MessageHashUtils.sol) +// OpenZeppelin Contracts (last updated v5.0.0) (utils/cryptography/MessageHashUtils.sol) pragma solidity ^0.8.20; diff --git a/packages/foundry/lib/openzeppelin-contracts/contracts/utils/cryptography/SignatureChecker.sol b/packages/foundry/lib/openzeppelin-contracts/contracts/utils/cryptography/SignatureChecker.sol index 584e33d..59a2c6d 100644 --- a/packages/foundry/lib/openzeppelin-contracts/contracts/utils/cryptography/SignatureChecker.sol +++ b/packages/foundry/lib/openzeppelin-contracts/contracts/utils/cryptography/SignatureChecker.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: MIT -// OpenZeppelin Contracts (last updated v5.0.0-rc.0) (utils/cryptography/SignatureChecker.sol) +// OpenZeppelin Contracts (last updated v5.0.0) (utils/cryptography/SignatureChecker.sol) pragma solidity ^0.8.20; diff --git a/packages/foundry/lib/openzeppelin-contracts/contracts/utils/introspection/ERC165.sol b/packages/foundry/lib/openzeppelin-contracts/contracts/utils/introspection/ERC165.sol index 3648e68..1e77b60 100644 --- a/packages/foundry/lib/openzeppelin-contracts/contracts/utils/introspection/ERC165.sol +++ b/packages/foundry/lib/openzeppelin-contracts/contracts/utils/introspection/ERC165.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: MIT -// OpenZeppelin Contracts (last updated v5.0.0-rc.2) (utils/introspection/ERC165.sol) +// OpenZeppelin Contracts (last updated v5.0.0) (utils/introspection/ERC165.sol) pragma solidity ^0.8.20; diff --git a/packages/foundry/lib/openzeppelin-contracts/contracts/utils/introspection/ERC165Checker.sol b/packages/foundry/lib/openzeppelin-contracts/contracts/utils/introspection/ERC165Checker.sol index a04f9c0..7b52241 100644 --- a/packages/foundry/lib/openzeppelin-contracts/contracts/utils/introspection/ERC165Checker.sol +++ b/packages/foundry/lib/openzeppelin-contracts/contracts/utils/introspection/ERC165Checker.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: MIT -// OpenZeppelin Contracts (last updated v5.0.0-rc.0) (utils/introspection/ERC165Checker.sol) +// OpenZeppelin Contracts (last updated v5.0.0) (utils/introspection/ERC165Checker.sol) pragma solidity ^0.8.20; diff --git a/packages/foundry/lib/openzeppelin-contracts/contracts/utils/introspection/IERC165.sol b/packages/foundry/lib/openzeppelin-contracts/contracts/utils/introspection/IERC165.sol index cfc9a19..c09f31f 100644 --- a/packages/foundry/lib/openzeppelin-contracts/contracts/utils/introspection/IERC165.sol +++ b/packages/foundry/lib/openzeppelin-contracts/contracts/utils/introspection/IERC165.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: MIT -// OpenZeppelin Contracts (last updated v5.0.0-rc.0) (utils/introspection/IERC165.sol) +// OpenZeppelin Contracts (last updated v5.0.0) (utils/introspection/IERC165.sol) pragma solidity ^0.8.20; diff --git a/packages/foundry/lib/openzeppelin-contracts/contracts/utils/math/Math.sol b/packages/foundry/lib/openzeppelin-contracts/contracts/utils/math/Math.sol index 184dbd7..9681524 100644 --- a/packages/foundry/lib/openzeppelin-contracts/contracts/utils/math/Math.sol +++ b/packages/foundry/lib/openzeppelin-contracts/contracts/utils/math/Math.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: MIT -// OpenZeppelin Contracts (last updated v5.0.0-rc.0) (utils/math/Math.sol) +// OpenZeppelin Contracts (last updated v5.0.0) (utils/math/Math.sol) pragma solidity ^0.8.20; diff --git a/packages/foundry/lib/openzeppelin-contracts/contracts/utils/math/SafeCast.sol b/packages/foundry/lib/openzeppelin-contracts/contracts/utils/math/SafeCast.sol index 117dfa3..0ed458b 100644 --- a/packages/foundry/lib/openzeppelin-contracts/contracts/utils/math/SafeCast.sol +++ b/packages/foundry/lib/openzeppelin-contracts/contracts/utils/math/SafeCast.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: MIT -// OpenZeppelin Contracts (last updated v5.0.0-rc.0) (utils/math/SafeCast.sol) +// OpenZeppelin Contracts (last updated v5.0.0) (utils/math/SafeCast.sol) // This file was procedurally generated from scripts/generate/templates/SafeCast.js. pragma solidity ^0.8.20; diff --git a/packages/foundry/lib/openzeppelin-contracts/contracts/utils/math/SignedMath.sol b/packages/foundry/lib/openzeppelin-contracts/contracts/utils/math/SignedMath.sol index 776b045..66a6151 100644 --- a/packages/foundry/lib/openzeppelin-contracts/contracts/utils/math/SignedMath.sol +++ b/packages/foundry/lib/openzeppelin-contracts/contracts/utils/math/SignedMath.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: MIT -// OpenZeppelin Contracts (last updated v5.0.0-rc.0) (utils/math/SignedMath.sol) +// OpenZeppelin Contracts (last updated v5.0.0) (utils/math/SignedMath.sol) pragma solidity ^0.8.20; diff --git a/packages/foundry/lib/openzeppelin-contracts/contracts/utils/structs/BitMaps.sol b/packages/foundry/lib/openzeppelin-contracts/contracts/utils/structs/BitMaps.sol index 086653e..40cceb9 100644 --- a/packages/foundry/lib/openzeppelin-contracts/contracts/utils/structs/BitMaps.sol +++ b/packages/foundry/lib/openzeppelin-contracts/contracts/utils/structs/BitMaps.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: MIT -// OpenZeppelin Contracts (last updated v5.0.0-rc.0) (utils/structs/BitMaps.sol) +// OpenZeppelin Contracts (last updated v5.0.0) (utils/structs/BitMaps.sol) pragma solidity ^0.8.20; /** diff --git a/packages/foundry/lib/openzeppelin-contracts/contracts/utils/structs/Checkpoints.sol b/packages/foundry/lib/openzeppelin-contracts/contracts/utils/structs/Checkpoints.sol index 49d73ce..6561b0d 100644 --- a/packages/foundry/lib/openzeppelin-contracts/contracts/utils/structs/Checkpoints.sol +++ b/packages/foundry/lib/openzeppelin-contracts/contracts/utils/structs/Checkpoints.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: MIT -// OpenZeppelin Contracts (last updated v5.0.0-rc.0) (utils/structs/Checkpoints.sol) +// OpenZeppelin Contracts (last updated v5.0.0) (utils/structs/Checkpoints.sol) // This file was procedurally generated from scripts/generate/templates/Checkpoints.js. pragma solidity ^0.8.20; diff --git a/packages/foundry/lib/openzeppelin-contracts/contracts/utils/structs/DoubleEndedQueue.sol b/packages/foundry/lib/openzeppelin-contracts/contracts/utils/structs/DoubleEndedQueue.sol index 1050675..218a2fb 100644 --- a/packages/foundry/lib/openzeppelin-contracts/contracts/utils/structs/DoubleEndedQueue.sol +++ b/packages/foundry/lib/openzeppelin-contracts/contracts/utils/structs/DoubleEndedQueue.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: MIT -// OpenZeppelin Contracts (last updated v5.0.0-rc.0) (utils/structs/DoubleEndedQueue.sol) +// OpenZeppelin Contracts (last updated v5.0.0) (utils/structs/DoubleEndedQueue.sol) pragma solidity ^0.8.20; /** diff --git a/packages/foundry/lib/openzeppelin-contracts/contracts/utils/structs/EnumerableMap.sol b/packages/foundry/lib/openzeppelin-contracts/contracts/utils/structs/EnumerableMap.sol index 7736f55..929ae7c 100644 --- a/packages/foundry/lib/openzeppelin-contracts/contracts/utils/structs/EnumerableMap.sol +++ b/packages/foundry/lib/openzeppelin-contracts/contracts/utils/structs/EnumerableMap.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: MIT -// OpenZeppelin Contracts (last updated v5.0.0-rc.0) (utils/structs/EnumerableMap.sol) +// OpenZeppelin Contracts (last updated v5.0.0) (utils/structs/EnumerableMap.sol) // This file was procedurally generated from scripts/generate/templates/EnumerableMap.js. pragma solidity ^0.8.20; diff --git a/packages/foundry/lib/openzeppelin-contracts/contracts/utils/structs/EnumerableSet.sol b/packages/foundry/lib/openzeppelin-contracts/contracts/utils/structs/EnumerableSet.sol index 7cdeb84..4c7fc5e 100644 --- a/packages/foundry/lib/openzeppelin-contracts/contracts/utils/structs/EnumerableSet.sol +++ b/packages/foundry/lib/openzeppelin-contracts/contracts/utils/structs/EnumerableSet.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: MIT -// OpenZeppelin Contracts (last updated v5.0.0-rc.0) (utils/structs/EnumerableSet.sol) +// OpenZeppelin Contracts (last updated v5.0.0) (utils/structs/EnumerableSet.sol) // This file was procedurally generated from scripts/generate/templates/EnumerableSet.js. pragma solidity ^0.8.20; diff --git a/packages/foundry/lib/openzeppelin-contracts/contracts/utils/types/Time.sol b/packages/foundry/lib/openzeppelin-contracts/contracts/utils/types/Time.sol index df4d0af..9faef31 100644 --- a/packages/foundry/lib/openzeppelin-contracts/contracts/utils/types/Time.sol +++ b/packages/foundry/lib/openzeppelin-contracts/contracts/utils/types/Time.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: MIT -// OpenZeppelin Contracts (last updated v5.0.0-rc.0) (utils/types/Time.sol) +// OpenZeppelin Contracts (last updated v5.0.0) (utils/types/Time.sol) pragma solidity ^0.8.20; @@ -97,22 +97,26 @@ library Time { * enforce the old delay at the moment of the update. Returns the updated Delay object and the timestamp when the * new delay becomes effective. */ - function withUpdate(Delay self, uint32 newValue, uint32 minSetback) internal view returns (Delay, uint48) { + function withUpdate( + Delay self, + uint32 newValue, + uint32 minSetback + ) internal view returns (Delay updatedDelay, uint48 effect) { uint32 value = self.get(); uint32 setback = uint32(Math.max(minSetback, value > newValue ? value - newValue : 0)); - uint48 effect = timestamp() + setback; + effect = timestamp() + setback; return (pack(value, newValue, effect), effect); } /** * @dev Split a delay into its components: valueBefore, valueAfter and effect (transition timepoint). */ - function unpack(Delay self) internal pure returns (uint32, uint32, uint48) { + function unpack(Delay self) internal pure returns (uint32 valueBefore, uint32 valueAfter, uint48 effect) { uint112 raw = Delay.unwrap(self); - uint32 valueAfter = uint32(raw); - uint32 valueBefore = uint32(raw >> 32); - uint48 effect = uint48(raw >> 64); + valueAfter = uint32(raw); + valueBefore = uint32(raw >> 32); + effect = uint48(raw >> 64); return (valueBefore, valueAfter, effect); } diff --git a/packages/foundry/lib/openzeppelin-contracts/contracts/vendor/compound/ICompoundTimelock.sol b/packages/foundry/lib/openzeppelin-contracts/contracts/vendor/compound/ICompoundTimelock.sol index 145e0a6..320eea1 100644 --- a/packages/foundry/lib/openzeppelin-contracts/contracts/vendor/compound/ICompoundTimelock.sol +++ b/packages/foundry/lib/openzeppelin-contracts/contracts/vendor/compound/ICompoundTimelock.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: MIT -// OpenZeppelin Contracts (last updated v5.0.0-rc.0) (vendor/compound/ICompoundTimelock.sol) +// OpenZeppelin Contracts (last updated v5.0.0) (vendor/compound/ICompoundTimelock.sol) pragma solidity ^0.8.20; diff --git a/packages/foundry/lib/openzeppelin-contracts/hardhat.config.js b/packages/foundry/lib/openzeppelin-contracts/hardhat.config.js index f5d9527..4d5ab94 100644 --- a/packages/foundry/lib/openzeppelin-contracts/hardhat.config.js +++ b/packages/foundry/lib/openzeppelin-contracts/hardhat.config.js @@ -61,6 +61,10 @@ require('hardhat-exposed'); require('solidity-docgen'); argv.foundry && require('@nomicfoundation/hardhat-foundry'); +if (argv.foundry && argv.coverage) { + throw Error('Coverage analysis is incompatible with Foundry. Disable with `FOUNDRY=false` in the environment'); +} + for (const f of fs.readdirSync(path.join(__dirname, 'hardhat'))) { require(path.join(__dirname, 'hardhat', f)); } diff --git a/packages/foundry/lib/openzeppelin-contracts/hardhat/env-contract.js b/packages/foundry/lib/openzeppelin-contracts/hardhat/env-contract.js index 74d54cf..c615249 100644 --- a/packages/foundry/lib/openzeppelin-contracts/hardhat/env-contract.js +++ b/packages/foundry/lib/openzeppelin-contracts/hardhat/env-contract.js @@ -2,9 +2,24 @@ extendEnvironment(env => { const { contract } = env; env.contract = function (name, body) { - // remove the default account from the accounts list used in tests, in order - // to protect tests against accidentally passing due to the contract - // deployer being used subsequently as function caller - contract(name, accounts => body(accounts.slice(1))); + const { takeSnapshot } = require('@nomicfoundation/hardhat-network-helpers'); + + contract(name, accounts => { + // reset the state of the chain in between contract test suites + let snapshot; + + before(async function () { + snapshot = await takeSnapshot(); + }); + + after(async function () { + await snapshot.restore(); + }); + + // remove the default account from the accounts list used in tests, in order + // to protect tests against accidentally passing due to the contract + // deployer being used subsequently as function caller + body(accounts.slice(1)); + }); }; }); diff --git a/packages/foundry/lib/openzeppelin-contracts/package-lock.json b/packages/foundry/lib/openzeppelin-contracts/package-lock.json index 30d6561..0f4f9f5 100644 --- a/packages/foundry/lib/openzeppelin-contracts/package-lock.json +++ b/packages/foundry/lib/openzeppelin-contracts/package-lock.json @@ -17,7 +17,7 @@ "@nomicfoundation/hardhat-network-helpers": "^1.0.3", "@nomiclabs/hardhat-truffle5": "^2.0.5", "@nomiclabs/hardhat-web3": "^2.0.0", - "@openzeppelin/docs-utils": "^0.1.4", + "@openzeppelin/docs-utils": "^0.1.5", "@openzeppelin/test-helpers": "^0.5.13", "@openzeppelin/upgrade-safe-transpiler": "^0.3.32", "@openzeppelin/upgrades-core": "^1.20.6", @@ -2299,9 +2299,9 @@ } }, "node_modules/@openzeppelin/docs-utils": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/@openzeppelin/docs-utils/-/docs-utils-0.1.4.tgz", - "integrity": "sha512-2I56U1GhnNlymz0gGmJbyZKhnErGIaJ+rqtKTGyNf7YX3jgeS9/Twv8H0T+OgLV4dimtCHPz/27w6CYhWQ/TGg==", + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/@openzeppelin/docs-utils/-/docs-utils-0.1.5.tgz", + "integrity": "sha512-GfqXArKmdq8rv+hsP+g8uS1VEkvMIzWs31dCONffzmqFwJ+MOsaNQNZNXQnLRgUkzk8i5mTNDjJuxDy+aBZImQ==", "dev": true, "dependencies": { "@frangio/servbot": "^0.2.5", diff --git a/packages/foundry/lib/openzeppelin-contracts/package.json b/packages/foundry/lib/openzeppelin-contracts/package.json index 7550199..1afd5b1 100644 --- a/packages/foundry/lib/openzeppelin-contracts/package.json +++ b/packages/foundry/lib/openzeppelin-contracts/package.json @@ -1,7 +1,7 @@ { "name": "openzeppelin-solidity", "description": "Secure Smart Contract library for Solidity", - "version": "5.0.0-rc.2", + "version": "5.0.1", "private": true, "files": [ "/contracts/**/*.sol", @@ -9,7 +9,7 @@ ], "scripts": { "compile": "hardhat compile", - "coverage": "env COVERAGE=true hardhat coverage", + "coverage": "env COVERAGE=true FOUNDRY=false hardhat coverage", "docs": "npm run prepare-docs && oz-docs", "docs:watch": "oz-docs watch contracts docs/templates docs/config.js", "prepare-docs": "scripts/prepare-docs.sh", @@ -57,7 +57,7 @@ "@nomicfoundation/hardhat-network-helpers": "^1.0.3", "@nomiclabs/hardhat-truffle5": "^2.0.5", "@nomiclabs/hardhat-web3": "^2.0.0", - "@openzeppelin/docs-utils": "^0.1.4", + "@openzeppelin/docs-utils": "^0.1.5", "@openzeppelin/test-helpers": "^0.5.13", "@openzeppelin/upgrade-safe-transpiler": "^0.3.32", "@openzeppelin/upgrades-core": "^1.20.6", diff --git a/packages/foundry/lib/openzeppelin-contracts/scripts/release/workflow/github-release.js b/packages/foundry/lib/openzeppelin-contracts/scripts/release/workflow/github-release.js index 92a47d9..f213106 100644 --- a/packages/foundry/lib/openzeppelin-contracts/scripts/release/workflow/github-release.js +++ b/packages/foundry/lib/openzeppelin-contracts/scripts/release/workflow/github-release.js @@ -9,6 +9,7 @@ module.exports = async ({ github, context }) => { owner: context.repo.owner, repo: context.repo.repo, tag_name: `v${version}`, + target_commitish: github.ref_name, body: extractSection(changelog, version), prerelease: process.env.PRERELEASE === 'true', }); diff --git a/packages/foundry/lib/openzeppelin-contracts/scripts/upgradeable/transpile.sh b/packages/foundry/lib/openzeppelin-contracts/scripts/upgradeable/transpile.sh index f212693..ebc8c32 100644 --- a/packages/foundry/lib/openzeppelin-contracts/scripts/upgradeable/transpile.sh +++ b/packages/foundry/lib/openzeppelin-contracts/scripts/upgradeable/transpile.sh @@ -6,7 +6,7 @@ VERSION="$(jq -r .version contracts/package.json)" DIRNAME="$(dirname -- "${BASH_SOURCE[0]}")" bash "$DIRNAME/patch-apply.sh" -sed -i "s/<package-version>/$VERSION/g" contracts/package.json +sed -i'' -e "s/<package-version>/$VERSION/g" "contracts/package.json" git add contracts/package.json npm run clean diff --git a/packages/foundry/lib/openzeppelin-contracts/test/access/manager/AccessManaged.test.js b/packages/foundry/lib/openzeppelin-contracts/test/access/manager/AccessManaged.test.js new file mode 100644 index 0000000..9e94af6 --- /dev/null +++ b/packages/foundry/lib/openzeppelin-contracts/test/access/manager/AccessManaged.test.js @@ -0,0 +1,142 @@ +const { expectEvent, time, expectRevert } = require('@openzeppelin/test-helpers'); +const { selector } = require('../../helpers/methods'); +const { expectRevertCustomError } = require('../../helpers/customError'); +const { + time: { setNextBlockTimestamp }, +} = require('@nomicfoundation/hardhat-network-helpers'); +const { impersonate } = require('../../helpers/account'); + +const AccessManaged = artifacts.require('$AccessManagedTarget'); +const AccessManager = artifacts.require('$AccessManager'); + +const AuthoritiyObserveIsConsuming = artifacts.require('$AuthoritiyObserveIsConsuming'); + +contract('AccessManaged', function (accounts) { + const [admin, roleMember, other] = accounts; + + beforeEach(async function () { + this.authority = await AccessManager.new(admin); + this.managed = await AccessManaged.new(this.authority.address); + }); + + it('sets authority and emits AuthorityUpdated event during construction', async function () { + await expectEvent.inConstruction(this.managed, 'AuthorityUpdated', { + authority: this.authority.address, + }); + expect(await this.managed.authority()).to.eq(this.authority.address); + }); + + describe('restricted modifier', function () { + const method = 'fnRestricted()'; + + beforeEach(async function () { + this.selector = selector(method); + this.role = web3.utils.toBN(42); + await this.authority.$_setTargetFunctionRole(this.managed.address, this.selector, this.role); + await this.authority.$_grantRole(this.role, roleMember, 0, 0); + }); + + it('succeeds when role is granted without execution delay', async function () { + await this.managed.methods[method]({ from: roleMember }); + }); + + it('reverts when role is not granted', async function () { + await expectRevertCustomError(this.managed.methods[method]({ from: other }), 'AccessManagedUnauthorized', [ + other, + ]); + }); + + it('panics in short calldata', async function () { + // We avoid adding the `restricted` modifier to the fallback function because other tests may depend on it + // being accessible without restrictions. We check for the internal `_checkCanCall` instead. + await expectRevert.unspecified(this.managed.$_checkCanCall(other, '0x1234')); + }); + + describe('when role is granted with execution delay', function () { + beforeEach(async function () { + const executionDelay = web3.utils.toBN(911); + await this.authority.$_grantRole(this.role, roleMember, 0, executionDelay); + }); + + it('reverts if the operation is not scheduled', async function () { + const calldata = await this.managed.contract.methods[method]().encodeABI(); + const opId = await this.authority.hashOperation(roleMember, this.managed.address, calldata); + + await expectRevertCustomError(this.managed.methods[method]({ from: roleMember }), 'AccessManagerNotScheduled', [ + opId, + ]); + }); + + it('succeeds if the operation is scheduled', async function () { + // Arguments + const delay = time.duration.hours(12); + const calldata = await this.managed.contract.methods[method]().encodeABI(); + + // Schedule + const timestamp = await time.latest(); + const scheduledAt = timestamp.addn(1); + const when = scheduledAt.add(delay); + await setNextBlockTimestamp(scheduledAt); + await this.authority.schedule(this.managed.address, calldata, when, { + from: roleMember, + }); + + // Set execution date + await setNextBlockTimestamp(when); + + // Shouldn't revert + await this.managed.methods[method]({ from: roleMember }); + }); + }); + }); + + describe('setAuthority', function () { + beforeEach(async function () { + this.newAuthority = await AccessManager.new(admin); + }); + + it('reverts if the caller is not the authority', async function () { + await expectRevertCustomError(this.managed.setAuthority(other, { from: other }), 'AccessManagedUnauthorized', [ + other, + ]); + }); + + it('reverts if the new authority is not a valid authority', async function () { + await impersonate(this.authority.address); + await expectRevertCustomError( + this.managed.setAuthority(other, { from: this.authority.address }), + 'AccessManagedInvalidAuthority', + [other], + ); + }); + + it('sets authority and emits AuthorityUpdated event', async function () { + await impersonate(this.authority.address); + const { receipt } = await this.managed.setAuthority(this.newAuthority.address, { from: this.authority.address }); + await expectEvent(receipt, 'AuthorityUpdated', { + authority: this.newAuthority.address, + }); + expect(await this.managed.authority()).to.eq(this.newAuthority.address); + }); + }); + + describe('isConsumingScheduledOp', function () { + beforeEach(async function () { + this.authority = await AuthoritiyObserveIsConsuming.new(); + this.managed = await AccessManaged.new(this.authority.address); + }); + + it('returns bytes4(0) when not consuming operation', async function () { + expect(await this.managed.isConsumingScheduledOp()).to.eq('0x00000000'); + }); + + it('returns isConsumingScheduledOp selector when consuming operation', async function () { + const receipt = await this.managed.fnRestricted({ from: other }); + await expectEvent.inTransaction(receipt.tx, this.authority, 'ConsumeScheduledOpCalled', { + caller: other, + data: this.managed.contract.methods.fnRestricted().encodeABI(), + isConsuming: selector('isConsumingScheduledOp()'), + }); + }); + }); +}); diff --git a/packages/foundry/lib/openzeppelin-contracts/test/access/manager/AccessManager.behavior.js b/packages/foundry/lib/openzeppelin-contracts/test/access/manager/AccessManager.behavior.js new file mode 100644 index 0000000..d528ffb --- /dev/null +++ b/packages/foundry/lib/openzeppelin-contracts/test/access/manager/AccessManager.behavior.js @@ -0,0 +1,711 @@ +const { time } = require('@openzeppelin/test-helpers'); +const { + time: { setNextBlockTimestamp }, + setStorageAt, + mine, +} = require('@nomicfoundation/hardhat-network-helpers'); +const { impersonate } = require('../../helpers/account'); +const { expectRevertCustomError } = require('../../helpers/customError'); +const { EXPIRATION, EXECUTION_ID_STORAGE_SLOT } = require('../../helpers/access-manager'); + +// ============ COMMON PATHS ============ + +const COMMON_IS_EXECUTING_PATH = { + executing() { + it('succeeds', async function () { + await web3.eth.sendTransaction({ to: this.target.address, data: this.calldata, from: this.caller }); + }); + }, + notExecuting() { + it('reverts as AccessManagerUnauthorizedAccount', async function () { + await expectRevertCustomError( + web3.eth.sendTransaction({ to: this.target.address, data: this.calldata, from: this.caller }), + 'AccessManagerUnauthorizedAccount', + [this.caller, this.role.id], + ); + }); + }, +}; + +const COMMON_GET_ACCESS_PATH = { + requiredRoleIsGranted: { + roleGrantingIsDelayed: { + callerHasAnExecutionDelay: { + beforeGrantDelay() { + it('reverts as AccessManagerUnauthorizedAccount', async function () { + await expectRevertCustomError( + web3.eth.sendTransaction({ to: this.target.address, data: this.calldata, from: this.caller }), + 'AccessManagerUnauthorizedAccount', + [this.caller, this.role.id], + ); + }); + }, + afterGrantDelay: undefined, // Diverges if there's an operation delay or not + }, + callerHasNoExecutionDelay: { + beforeGrantDelay() { + it('reverts as AccessManagerUnauthorizedAccount', async function () { + await expectRevertCustomError( + web3.eth.sendTransaction({ to: this.target.address, data: this.calldata, from: this.caller }), + 'AccessManagerUnauthorizedAccount', + [this.caller, this.role.id], + ); + }); + }, + afterGrantDelay() { + it('succeeds called directly', async function () { + await web3.eth.sendTransaction({ to: this.target.address, data: this.calldata, from: this.caller }); + }); + + it('succeeds via execute', async function () { + await this.manager.execute(this.target.address, this.calldata, { from: this.caller }); + }); + }, + }, + }, + roleGrantingIsNotDelayed: { + callerHasAnExecutionDelay: undefined, // Diverges if there's an operation to schedule or not + callerHasNoExecutionDelay() { + it('succeeds called directly', async function () { + await web3.eth.sendTransaction({ to: this.target.address, data: this.calldata, from: this.caller }); + }); + + it('succeeds via execute', async function () { + await this.manager.execute(this.target.address, this.calldata, { from: this.caller }); + }); + }, + }, + }, + requiredRoleIsNotGranted() { + it('reverts as AccessManagerUnauthorizedAccount', async function () { + await expectRevertCustomError( + web3.eth.sendTransaction({ to: this.target.address, data: this.calldata, from: this.caller }), + 'AccessManagerUnauthorizedAccount', + [this.caller, this.role.id], + ); + }); + }, +}; + +const COMMON_SCHEDULABLE_PATH = { + scheduled: { + before() { + it('reverts as AccessManagerNotReady', async function () { + await expectRevertCustomError( + web3.eth.sendTransaction({ to: this.target.address, data: this.calldata, from: this.caller }), + 'AccessManagerNotReady', + [this.operationId], + ); + }); + }, + after() { + it('succeeds called directly', async function () { + await web3.eth.sendTransaction({ to: this.target.address, data: this.calldata, from: this.caller }); + }); + + it('succeeds via execute', async function () { + await this.manager.execute(this.target.address, this.calldata, { from: this.caller }); + }); + }, + expired() { + it('reverts as AccessManagerExpired', async function () { + await expectRevertCustomError( + web3.eth.sendTransaction({ to: this.target.address, data: this.calldata, from: this.caller }), + 'AccessManagerExpired', + [this.operationId], + ); + }); + }, + }, + notScheduled() { + it('reverts as AccessManagerNotScheduled', async function () { + await expectRevertCustomError( + web3.eth.sendTransaction({ to: this.target.address, data: this.calldata, from: this.caller }), + 'AccessManagerNotScheduled', + [this.operationId], + ); + }); + }, +}; + +const COMMON_SCHEDULABLE_PATH_IF_ZERO_DELAY = { + scheduled: { + before() { + it.skip('is not reachable without a delay'); + }, + after() { + it.skip('is not reachable without a delay'); + }, + expired() { + it.skip('is not reachable without a delay'); + }, + }, + notScheduled() { + it('succeeds', async function () { + await this.manager.execute(this.target.address, this.calldata, { from: this.caller }); + }); + }, +}; + +// ============ MODE HELPERS ============ + +/** + * @requires this.{manager,target} + */ +function shouldBehaveLikeClosable({ closed, open }) { + describe('when the manager is closed', function () { + beforeEach('close', async function () { + await this.manager.$_setTargetClosed(this.target.address, true); + }); + + closed(); + }); + + describe('when the manager is open', function () { + beforeEach('open', async function () { + await this.manager.$_setTargetClosed(this.target.address, false); + }); + + open(); + }); +} + +// ============ DELAY HELPERS ============ + +/** + * @requires this.{delay} + */ +function shouldBehaveLikeDelay(type, { before, after }) { + beforeEach('define timestamp when delay takes effect', async function () { + const timestamp = await time.latest(); + this.delayEffect = timestamp.add(this.delay); + }); + + describe(`when ${type} delay has not taken effect yet`, function () { + beforeEach(`set next block timestamp before ${type} takes effect`, async function () { + await setNextBlockTimestamp(this.delayEffect.subn(1)); + }); + + before(); + }); + + describe(`when ${type} delay has taken effect`, function () { + beforeEach(`set next block timestamp when ${type} takes effect`, async function () { + await setNextBlockTimestamp(this.delayEffect); + }); + + after(); + }); +} + +// ============ OPERATION HELPERS ============ + +/** + * @requires this.{manager,scheduleIn,caller,target,calldata} + */ +function shouldBehaveLikeSchedulableOperation({ scheduled: { before, after, expired }, notScheduled }) { + describe('when operation is scheduled', function () { + beforeEach('schedule operation', async function () { + await impersonate(this.caller); // May be a contract + const { operationId } = await scheduleOperation(this.manager, { + caller: this.caller, + target: this.target.address, + calldata: this.calldata, + delay: this.scheduleIn, + }); + this.operationId = operationId; + }); + + describe('when operation is not ready for execution', function () { + beforeEach('set next block time before operation is ready', async function () { + this.scheduledAt = await time.latest(); + const schedule = await this.manager.getSchedule(this.operationId); + await setNextBlockTimestamp(schedule.subn(1)); + }); + + before(); + }); + + describe('when operation is ready for execution', function () { + beforeEach('set next block time when operation is ready for execution', async function () { + this.scheduledAt = await time.latest(); + const schedule = await this.manager.getSchedule(this.operationId); + await setNextBlockTimestamp(schedule); + }); + + after(); + }); + + describe('when operation has expired', function () { + beforeEach('set next block time when operation expired', async function () { + this.scheduledAt = await time.latest(); + const schedule = await this.manager.getSchedule(this.operationId); + await setNextBlockTimestamp(schedule.add(EXPIRATION)); + }); + + expired(); + }); + }); + + describe('when operation is not scheduled', function () { + beforeEach('set expected operationId', async function () { + this.operationId = await this.manager.hashOperation(this.caller, this.target.address, this.calldata); + + // Assert operation is not scheduled + expect(await this.manager.getSchedule(this.operationId)).to.be.bignumber.equal(web3.utils.toBN(0)); + }); + + notScheduled(); + }); +} + +/** + * @requires this.{manager,roles,target,calldata} + */ +function shouldBehaveLikeARestrictedOperation({ callerIsNotTheManager, callerIsTheManager }) { + describe('when the call comes from the manager (msg.sender == manager)', function () { + beforeEach('define caller as manager', async function () { + this.caller = this.manager.address; + await impersonate(this.caller); + }); + + shouldBehaveLikeCanCallExecuting(callerIsTheManager); + }); + + describe('when the call does not come from the manager (msg.sender != manager)', function () { + beforeEach('define non manager caller', function () { + this.caller = this.roles.SOME.members[0]; + }); + + callerIsNotTheManager(); + }); +} + +/** + * @requires this.{manager,roles,executionDelay,operationDelay,target} + */ +function shouldBehaveLikeDelayedOperation() { + describe('with operation delay', function () { + describe('when operation delay is greater than execution delay', function () { + beforeEach('set operation delay', async function () { + this.operationDelay = this.executionDelay.add(time.duration.hours(1)); + await this.manager.$_setTargetAdminDelay(this.target.address, this.operationDelay); + this.scheduleIn = this.operationDelay; // For shouldBehaveLikeSchedulableOperation + }); + + shouldBehaveLikeSchedulableOperation(COMMON_SCHEDULABLE_PATH); + }); + + describe('when operation delay is shorter than execution delay', function () { + beforeEach('set operation delay', async function () { + this.operationDelay = this.executionDelay.sub(time.duration.hours(1)); + await this.manager.$_setTargetAdminDelay(this.target.address, this.operationDelay); + this.scheduleIn = this.executionDelay; // For shouldBehaveLikeSchedulableOperation + }); + + shouldBehaveLikeSchedulableOperation(COMMON_SCHEDULABLE_PATH); + }); + }); + + describe('without operation delay', function () { + beforeEach('set operation delay', async function () { + this.operationDelay = web3.utils.toBN(0); + await this.manager.$_setTargetAdminDelay(this.target.address, this.operationDelay); + this.scheduleIn = this.executionDelay; // For shouldBehaveLikeSchedulableOperation + }); + + shouldBehaveLikeSchedulableOperation(COMMON_SCHEDULABLE_PATH); + }); +} + +// ============ METHOD HELPERS ============ + +/** + * @requires this.{manager,roles,role,target,calldata} + */ +function shouldBehaveLikeCanCall({ + closed, + open: { + callerIsTheManager, + callerIsNotTheManager: { publicRoleIsRequired, specificRoleIsRequired }, + }, +}) { + shouldBehaveLikeClosable({ + closed, + open() { + shouldBehaveLikeARestrictedOperation({ + callerIsTheManager, + callerIsNotTheManager() { + shouldBehaveLikeHasRole({ + publicRoleIsRequired, + specificRoleIsRequired, + }); + }, + }); + }, + }); +} + +/** + * @requires this.{target,calldata} + */ +function shouldBehaveLikeCanCallExecuting({ executing, notExecuting }) { + describe('when _executionId is in storage for target and selector', function () { + beforeEach('set _executionId flag from calldata and target', async function () { + const executionId = await web3.utils.keccak256( + web3.eth.abi.encodeParameters(['address', 'bytes4'], [this.target.address, this.calldata.substring(0, 10)]), + ); + await setStorageAt(this.manager.address, EXECUTION_ID_STORAGE_SLOT, executionId); + }); + + executing(); + }); + + describe('when _executionId does not match target and selector', notExecuting); +} + +/** + * @requires this.{target,calldata,roles,role} + */ +function shouldBehaveLikeHasRole({ publicRoleIsRequired, specificRoleIsRequired }) { + describe('when the function requires the caller to be granted with the PUBLIC_ROLE', function () { + beforeEach('set target function role as PUBLIC_ROLE', async function () { + this.role = this.roles.PUBLIC; + await this.manager.$_setTargetFunctionRole(this.target.address, this.calldata.substring(0, 10), this.role.id, { + from: this.roles.ADMIN.members[0], + }); + }); + + publicRoleIsRequired(); + }); + + describe('when the function requires the caller to be granted with a role other than PUBLIC_ROLE', function () { + beforeEach('set target function role as PUBLIC_ROLE', async function () { + await this.manager.$_setTargetFunctionRole(this.target.address, this.calldata.substring(0, 10), this.role.id, { + from: this.roles.ADMIN.members[0], + }); + }); + + shouldBehaveLikeGetAccess(specificRoleIsRequired); + }); +} + +/** + * @requires this.{manager,role,caller} + */ +function shouldBehaveLikeGetAccess({ + requiredRoleIsGranted: { + roleGrantingIsDelayed: { + // Because both grant and execution delay are set within the same $_grantRole call + // it's not possible to create a set of tests that diverge between grant and execution delay. + // Therefore, the shouldBehaveLikeDelay arguments are renamed for clarity: + // before => beforeGrantDelay + // after => afterGrantDelay + callerHasAnExecutionDelay: { beforeGrantDelay: case1, afterGrantDelay: case2 }, + callerHasNoExecutionDelay: { beforeGrantDelay: case3, afterGrantDelay: case4 }, + }, + roleGrantingIsNotDelayed: { callerHasAnExecutionDelay: case5, callerHasNoExecutionDelay: case6 }, + }, + requiredRoleIsNotGranted, +}) { + describe('when the required role is granted to the caller', function () { + describe('when role granting is delayed', function () { + beforeEach('define delay', function () { + this.grantDelay = time.duration.minutes(3); + this.delay = this.grantDelay; // For shouldBehaveLikeDelay + }); + + describe('when caller has an execution delay', function () { + beforeEach('set role and delay', async function () { + this.executionDelay = time.duration.hours(10); + this.delay = this.grantDelay; + await this.manager.$_grantRole(this.role.id, this.caller, this.grantDelay, this.executionDelay); + }); + + shouldBehaveLikeDelay('grant', { before: case1, after: case2 }); + }); + + describe('when caller has no execution delay', function () { + beforeEach('set role and delay', async function () { + this.executionDelay = web3.utils.toBN(0); + await this.manager.$_grantRole(this.role.id, this.caller, this.grantDelay, this.executionDelay); + }); + + shouldBehaveLikeDelay('grant', { before: case3, after: case4 }); + }); + }); + + describe('when role granting is not delayed', function () { + beforeEach('define delay', function () { + this.grantDelay = web3.utils.toBN(0); + }); + + describe('when caller has an execution delay', function () { + beforeEach('set role and delay', async function () { + this.executionDelay = time.duration.hours(10); + await this.manager.$_grantRole(this.role.id, this.caller, this.grantDelay, this.executionDelay); + }); + + case5(); + }); + + describe('when caller has no execution delay', function () { + beforeEach('set role and delay', async function () { + this.executionDelay = web3.utils.toBN(0); + await this.manager.$_grantRole(this.role.id, this.caller, this.grantDelay, this.executionDelay); + }); + + case6(); + }); + }); + }); + + describe('when role is not granted', function () { + // Because this helper can be composed with other helpers, it's possible + // that role has been set already by another helper. + // Although this is highly unlikely, we check for it here to avoid false positives. + beforeEach('assert role is unset', async function () { + const { since } = await this.manager.getAccess(this.role.id, this.caller); + expect(since).to.be.bignumber.equal(web3.utils.toBN(0)); + }); + + requiredRoleIsNotGranted(); + }); +} + +// ============ ADMIN OPERATION HELPERS ============ + +/** + * @requires this.{manager,roles,calldata,role} + */ +function shouldBehaveLikeDelayedAdminOperation() { + const getAccessPath = COMMON_GET_ACCESS_PATH; + getAccessPath.requiredRoleIsGranted.roleGrantingIsDelayed.callerHasAnExecutionDelay.afterGrantDelay = function () { + beforeEach('consume previously set grant delay', async function () { + // Consume previously set delay + await mine(); + }); + shouldBehaveLikeDelayedOperation(); + }; + getAccessPath.requiredRoleIsGranted.roleGrantingIsNotDelayed.callerHasAnExecutionDelay = function () { + beforeEach('set execution delay', async function () { + this.scheduleIn = this.executionDelay; // For shouldBehaveLikeDelayedOperation + }); + shouldBehaveLikeSchedulableOperation(COMMON_SCHEDULABLE_PATH); + }; + + beforeEach('set target as manager', function () { + this.target = this.manager; + }); + + shouldBehaveLikeARestrictedOperation({ + callerIsTheManager: COMMON_IS_EXECUTING_PATH, + callerIsNotTheManager() { + shouldBehaveLikeHasRole({ + publicRoleIsRequired() { + it('reverts as AccessManagerUnauthorizedAccount', async function () { + await expectRevertCustomError( + web3.eth.sendTransaction({ to: this.target.address, data: this.calldata, from: this.caller }), + 'AccessManagerUnauthorizedAccount', + [ + this.caller, + this.roles.ADMIN.id, // Although PUBLIC is required, target function role doesn't apply to admin ops + ], + ); + }); + }, + specificRoleIsRequired: getAccessPath, + }); + }, + }); +} + +/** + * @requires this.{manager,roles,calldata,role} + */ +function shouldBehaveLikeNotDelayedAdminOperation() { + const getAccessPath = COMMON_GET_ACCESS_PATH; + getAccessPath.requiredRoleIsGranted.roleGrantingIsDelayed.callerHasAnExecutionDelay.afterGrantDelay = function () { + beforeEach('set execution delay', async function () { + await mine(); + this.scheduleIn = this.executionDelay; // For shouldBehaveLikeSchedulableOperation + }); + shouldBehaveLikeSchedulableOperation(COMMON_SCHEDULABLE_PATH); + }; + getAccessPath.requiredRoleIsGranted.roleGrantingIsNotDelayed.callerHasAnExecutionDelay = function () { + beforeEach('set execution delay', async function () { + this.scheduleIn = this.executionDelay; // For shouldBehaveLikeSchedulableOperation + }); + shouldBehaveLikeSchedulableOperation(COMMON_SCHEDULABLE_PATH); + }; + + beforeEach('set target as manager', function () { + this.target = this.manager; + }); + + shouldBehaveLikeARestrictedOperation({ + callerIsTheManager: COMMON_IS_EXECUTING_PATH, + callerIsNotTheManager() { + shouldBehaveLikeHasRole({ + publicRoleIsRequired() { + it('reverts as AccessManagerUnauthorizedAccount', async function () { + await expectRevertCustomError( + web3.eth.sendTransaction({ to: this.target.address, data: this.calldata, from: this.caller }), + 'AccessManagerUnauthorizedAccount', + [this.caller, this.roles.ADMIN.id], // Although PUBLIC_ROLE is required, admin ops are not subject to target function roles + ); + }); + }, + specificRoleIsRequired: getAccessPath, + }); + }, + }); +} + +/** + * @requires this.{manager,roles,calldata,role} + */ +function shouldBehaveLikeRoleAdminOperation(roleAdmin) { + const getAccessPath = COMMON_GET_ACCESS_PATH; + getAccessPath.requiredRoleIsGranted.roleGrantingIsDelayed.callerHasAnExecutionDelay.afterGrantDelay = function () { + beforeEach('set operation delay', async function () { + await mine(); + this.scheduleIn = this.executionDelay; // For shouldBehaveLikeSchedulableOperation + }); + shouldBehaveLikeSchedulableOperation(COMMON_SCHEDULABLE_PATH); + }; + getAccessPath.requiredRoleIsGranted.roleGrantingIsNotDelayed.callerHasAnExecutionDelay = function () { + beforeEach('set execution delay', async function () { + this.scheduleIn = this.executionDelay; // For shouldBehaveLikeSchedulableOperation + }); + shouldBehaveLikeSchedulableOperation(COMMON_SCHEDULABLE_PATH); + }; + + beforeEach('set target as manager', function () { + this.target = this.manager; + }); + + shouldBehaveLikeARestrictedOperation({ + callerIsTheManager: COMMON_IS_EXECUTING_PATH, + callerIsNotTheManager() { + shouldBehaveLikeHasRole({ + publicRoleIsRequired() { + it('reverts as AccessManagerUnauthorizedAccount', async function () { + await expectRevertCustomError( + web3.eth.sendTransaction({ to: this.target.address, data: this.calldata, from: this.caller }), + 'AccessManagerUnauthorizedAccount', + [this.caller, roleAdmin], // Role admin ops require the role's admin + ); + }); + }, + specificRoleIsRequired: getAccessPath, + }); + }, + }); +} + +// ============ RESTRICTED OPERATION HELPERS ============ + +/** + * @requires this.{manager,roles,calldata,role} + */ +function shouldBehaveLikeAManagedRestrictedOperation() { + function revertUnauthorized() { + it('reverts as AccessManagedUnauthorized', async function () { + await expectRevertCustomError( + web3.eth.sendTransaction({ to: this.target.address, data: this.calldata, from: this.caller }), + 'AccessManagedUnauthorized', + [this.caller], + ); + }); + } + + const getAccessPath = COMMON_GET_ACCESS_PATH; + + getAccessPath.requiredRoleIsGranted.roleGrantingIsDelayed.callerHasAnExecutionDelay.beforeGrantDelay = + revertUnauthorized; + getAccessPath.requiredRoleIsGranted.roleGrantingIsDelayed.callerHasNoExecutionDelay.beforeGrantDelay = + revertUnauthorized; + getAccessPath.requiredRoleIsNotGranted = revertUnauthorized; + + getAccessPath.requiredRoleIsGranted.roleGrantingIsDelayed.callerHasAnExecutionDelay.afterGrantDelay = function () { + beforeEach('consume previously set grant delay', async function () { + // Consume previously set delay + await mine(); + this.scheduleIn = this.executionDelay; // For shouldBehaveLikeSchedulableOperation + }); + shouldBehaveLikeSchedulableOperation(COMMON_SCHEDULABLE_PATH); + }; + getAccessPath.requiredRoleIsGranted.roleGrantingIsNotDelayed.callerHasAnExecutionDelay = function () { + beforeEach('consume previously set grant delay', async function () { + this.scheduleIn = this.executionDelay; // For shouldBehaveLikeSchedulableOperation + }); + shouldBehaveLikeSchedulableOperation(COMMON_SCHEDULABLE_PATH); + }; + + const isExecutingPath = COMMON_IS_EXECUTING_PATH; + isExecutingPath.notExecuting = revertUnauthorized; + + shouldBehaveLikeCanCall({ + closed: revertUnauthorized, + open: { + callerIsTheManager: isExecutingPath, + callerIsNotTheManager: { + publicRoleIsRequired() { + it('succeeds called directly', async function () { + await web3.eth.sendTransaction({ to: this.target.address, data: this.calldata, from: this.caller }); + }); + + it('succeeds via execute', async function () { + await this.manager.execute(this.target.address, this.calldata, { from: this.caller }); + }); + }, + specificRoleIsRequired: getAccessPath, + }, + }, + }); +} + +// ============ HELPERS ============ + +/** + * @requires this.{manager, caller, target, calldata} + */ +async function scheduleOperation(manager, { caller, target, calldata, delay }) { + const timestamp = await time.latest(); + const scheduledAt = timestamp.addn(1); + await setNextBlockTimestamp(scheduledAt); // Fix next block timestamp for predictability + const { receipt } = await manager.schedule(target, calldata, scheduledAt.add(delay), { + from: caller, + }); + + return { + receipt, + scheduledAt, + operationId: await manager.hashOperation(caller, target, calldata), + }; +} + +module.exports = { + // COMMON PATHS + COMMON_SCHEDULABLE_PATH, + COMMON_SCHEDULABLE_PATH_IF_ZERO_DELAY, + // MODE HELPERS + shouldBehaveLikeClosable, + // DELAY HELPERS + shouldBehaveLikeDelay, + // OPERATION HELPERS + shouldBehaveLikeSchedulableOperation, + // METHOD HELPERS + shouldBehaveLikeCanCall, + shouldBehaveLikeGetAccess, + shouldBehaveLikeHasRole, + // ADMIN OPERATION HELPERS + shouldBehaveLikeDelayedAdminOperation, + shouldBehaveLikeNotDelayedAdminOperation, + shouldBehaveLikeRoleAdminOperation, + // RESTRICTED OPERATION HELPERS + shouldBehaveLikeAManagedRestrictedOperation, + // HELPERS + scheduleOperation, +}; diff --git a/packages/foundry/lib/openzeppelin-contracts/test/access/manager/AccessManager.test.js b/packages/foundry/lib/openzeppelin-contracts/test/access/manager/AccessManager.test.js index 5d8ed5d..705af1a 100644 --- a/packages/foundry/lib/openzeppelin-contracts/test/access/manager/AccessManager.test.js +++ b/packages/foundry/lib/openzeppelin-contracts/test/access/manager/AccessManager.test.js @@ -1,1030 +1,2592 @@ const { web3 } = require('hardhat'); -const { constants, expectEvent, time } = require('@openzeppelin/test-helpers'); +const { constants, expectEvent, time, expectRevert } = require('@openzeppelin/test-helpers'); const { expectRevertCustomError } = require('../../helpers/customError'); const { selector } = require('../../helpers/methods'); const { clockFromReceipt } = require('../../helpers/time'); -const { product } = require('../../helpers/iterate'); -const helpers = require('@nomicfoundation/hardhat-network-helpers'); +const { + buildBaseRoles, + formatAccess, + EXPIRATION, + MINSETBACK, + EXECUTION_ID_STORAGE_SLOT, + CONSUMING_SCHEDULE_STORAGE_SLOT, +} = require('../../helpers/access-manager'); +const { + // COMMON PATHS + COMMON_SCHEDULABLE_PATH, + COMMON_SCHEDULABLE_PATH_IF_ZERO_DELAY, + // MODE HELPERS + shouldBehaveLikeClosable, + // DELAY HELPERS + shouldBehaveLikeDelay, + // OPERATION HELPERS + shouldBehaveLikeSchedulableOperation, + // METHOD HELPERS + shouldBehaveLikeCanCall, + shouldBehaveLikeGetAccess, + shouldBehaveLikeHasRole, + // ADMIN OPERATION HELPERS + shouldBehaveLikeDelayedAdminOperation, + shouldBehaveLikeNotDelayedAdminOperation, + shouldBehaveLikeRoleAdminOperation, + // RESTRICTED OPERATION HELPERS + shouldBehaveLikeAManagedRestrictedOperation, + // HELPERS + scheduleOperation, +} = require('./AccessManager.behavior'); +const { default: Wallet } = require('ethereumjs-wallet'); +const { + mine, + time: { setNextBlockTimestamp }, + getStorageAt, +} = require('@nomicfoundation/hardhat-network-helpers'); +const { MAX_UINT48 } = require('../../helpers/constants'); +const { impersonate } = require('../../helpers/account'); const AccessManager = artifacts.require('$AccessManager'); const AccessManagedTarget = artifacts.require('$AccessManagedTarget'); const Ownable = artifacts.require('$Ownable'); -const MAX_UINT64 = web3.utils.toBN((2n ** 64n - 1n).toString()); - -const ROLES = { - ADMIN: web3.utils.toBN(0), - SOME_ADMIN: web3.utils.toBN(17), - SOME: web3.utils.toBN(42), - PUBLIC: MAX_UINT64, -}; -Object.assign(ROLES, Object.fromEntries(Object.entries(ROLES).map(([key, value]) => [value, key]))); - -const executeDelay = web3.utils.toBN(10); -const grantDelay = web3.utils.toBN(10); -const MINSETBACK = time.duration.days(5); - -const formatAccess = access => [access[0], access[1].toString()]; +const someAddress = Wallet.generate().getChecksumAddressString(); contract('AccessManager', function (accounts) { - const [admin, manager, member, user, other] = accounts; + const [admin, manager, guardian, member, user, other] = accounts; beforeEach(async function () { + this.roles = buildBaseRoles(); + + // Add members + this.roles.ADMIN.members = [admin]; + this.roles.SOME_ADMIN.members = [manager]; + this.roles.SOME_GUARDIAN.members = [guardian]; + this.roles.SOME.members = [member]; + this.roles.PUBLIC.members = [admin, manager, guardian, member, user, other]; + this.manager = await AccessManager.new(admin); + this.target = await AccessManagedTarget.new(this.manager.address); - // add member to role - await this.manager.$_setRoleAdmin(ROLES.SOME, ROLES.SOME_ADMIN); - await this.manager.$_setRoleGuardian(ROLES.SOME, ROLES.SOME_ADMIN); - await this.manager.$_grantRole(ROLES.SOME_ADMIN, manager, 0, 0); - await this.manager.$_grantRole(ROLES.SOME, member, 0, 0); - }); + for (const { id: roleId, admin, guardian, members } of Object.values(this.roles)) { + if (roleId === this.roles.PUBLIC.id) continue; // Every address belong to public and is locked + if (roleId === this.roles.ADMIN.id) continue; // Admin set during construction and is locked - it('rejects zero address for initialAdmin', async function () { - await expectRevertCustomError(AccessManager.new(constants.ZERO_ADDRESS), 'AccessManagerInvalidInitialAdmin', [ - constants.ZERO_ADDRESS, - ]); - }); + // Set admin role avoiding default + if (admin.id !== this.roles.ADMIN.id) { + await this.manager.$_setRoleAdmin(roleId, admin.id); + } - it('default minsetback is 1 day', async function () { - expect(await this.manager.minSetback()).to.be.bignumber.equal(MINSETBACK); + // Set guardian role avoiding default + if (guardian.id !== this.roles.ADMIN.id) { + await this.manager.$_setRoleGuardian(roleId, guardian.id); + } + + // Grant role to members + for (const member of members) { + await this.manager.$_grantRole(roleId, member, 0, 0); + } + } }); - it('roles are correctly initialized', async function () { - // role admin - expect(await this.manager.getRoleAdmin(ROLES.ADMIN)).to.be.bignumber.equal(ROLES.ADMIN); - expect(await this.manager.getRoleAdmin(ROLES.SOME_ADMIN)).to.be.bignumber.equal(ROLES.ADMIN); - expect(await this.manager.getRoleAdmin(ROLES.SOME)).to.be.bignumber.equal(ROLES.SOME_ADMIN); - expect(await this.manager.getRoleAdmin(ROLES.PUBLIC)).to.be.bignumber.equal(ROLES.ADMIN); - // role guardian - expect(await this.manager.getRoleGuardian(ROLES.ADMIN)).to.be.bignumber.equal(ROLES.ADMIN); - expect(await this.manager.getRoleGuardian(ROLES.SOME_ADMIN)).to.be.bignumber.equal(ROLES.ADMIN); - expect(await this.manager.getRoleGuardian(ROLES.SOME)).to.be.bignumber.equal(ROLES.SOME_ADMIN); - expect(await this.manager.getRoleGuardian(ROLES.PUBLIC)).to.be.bignumber.equal(ROLES.ADMIN); - // role members - expect(await this.manager.hasRole(ROLES.ADMIN, admin).then(formatAccess)).to.be.deep.equal([true, '0']); - expect(await this.manager.hasRole(ROLES.ADMIN, manager).then(formatAccess)).to.be.deep.equal([false, '0']); - expect(await this.manager.hasRole(ROLES.ADMIN, member).then(formatAccess)).to.be.deep.equal([false, '0']); - expect(await this.manager.hasRole(ROLES.ADMIN, user).then(formatAccess)).to.be.deep.equal([false, '0']); - expect(await this.manager.hasRole(ROLES.SOME_ADMIN, admin).then(formatAccess)).to.be.deep.equal([false, '0']); - expect(await this.manager.hasRole(ROLES.SOME_ADMIN, manager).then(formatAccess)).to.be.deep.equal([true, '0']); - expect(await this.manager.hasRole(ROLES.SOME_ADMIN, member).then(formatAccess)).to.be.deep.equal([false, '0']); - expect(await this.manager.hasRole(ROLES.SOME_ADMIN, user).then(formatAccess)).to.be.deep.equal([false, '0']); - expect(await this.manager.hasRole(ROLES.SOME, admin).then(formatAccess)).to.be.deep.equal([false, '0']); - expect(await this.manager.hasRole(ROLES.SOME, manager).then(formatAccess)).to.be.deep.equal([false, '0']); - expect(await this.manager.hasRole(ROLES.SOME, member).then(formatAccess)).to.be.deep.equal([true, '0']); - expect(await this.manager.hasRole(ROLES.SOME, user).then(formatAccess)).to.be.deep.equal([false, '0']); - expect(await this.manager.hasRole(ROLES.PUBLIC, admin).then(formatAccess)).to.be.deep.equal([true, '0']); - expect(await this.manager.hasRole(ROLES.PUBLIC, manager).then(formatAccess)).to.be.deep.equal([true, '0']); - expect(await this.manager.hasRole(ROLES.PUBLIC, member).then(formatAccess)).to.be.deep.equal([true, '0']); - expect(await this.manager.hasRole(ROLES.PUBLIC, user).then(formatAccess)).to.be.deep.equal([true, '0']); + describe('during construction', function () { + it('grants admin role to initialAdmin', async function () { + const manager = await AccessManager.new(other); + expect(await manager.hasRole(this.roles.ADMIN.id, other).then(formatAccess)).to.be.deep.equal([true, '0']); + }); + + it('rejects zero address for initialAdmin', async function () { + await expectRevertCustomError(AccessManager.new(constants.ZERO_ADDRESS), 'AccessManagerInvalidInitialAdmin', [ + constants.ZERO_ADDRESS, + ]); + }); + + it('initializes setup roles correctly', async function () { + for (const { id: roleId, admin, guardian, members } of Object.values(this.roles)) { + expect(await this.manager.getRoleAdmin(roleId)).to.be.bignumber.equal(admin.id); + expect(await this.manager.getRoleGuardian(roleId)).to.be.bignumber.equal(guardian.id); + + for (const user of this.roles.PUBLIC.members) { + expect(await this.manager.hasRole(roleId, user).then(formatAccess)).to.be.deep.equal([ + members.includes(user), + '0', + ]); + } + } + }); }); - describe('Roles management', function () { - describe('label role', function () { - it('admin can emit a label event', async function () { - expectEvent(await this.manager.labelRole(ROLES.SOME, 'Some label', { from: admin }), 'RoleLabel', { - roleId: ROLES.SOME, - label: 'Some label', + describe('getters', function () { + describe('#canCall', function () { + beforeEach('set calldata', function () { + this.calldata = '0x12345678'; + this.role = { id: web3.utils.toBN(379204) }; + }); + + shouldBehaveLikeCanCall({ + closed() { + it('should return false and no delay', async function () { + const { immediate, delay } = await this.manager.canCall( + someAddress, + this.target.address, + this.calldata.substring(0, 10), + ); + expect(immediate).to.be.equal(false); + expect(delay).to.be.bignumber.equal('0'); + }); + }, + open: { + callerIsTheManager: { + executing() { + it('should return true and no delay', async function () { + const { immediate, delay } = await this.manager.canCall( + this.caller, + this.target.address, + this.calldata.substring(0, 10), + ); + expect(immediate).to.be.equal(true); + expect(delay).to.be.bignumber.equal('0'); + }); + }, + notExecuting() { + it('should return false and no delay', async function () { + const { immediate, delay } = await this.manager.canCall( + this.caller, + this.target.address, + this.calldata.substring(0, 10), + ); + expect(immediate).to.be.equal(false); + expect(delay).to.be.bignumber.equal('0'); + }); + }, + }, + callerIsNotTheManager: { + publicRoleIsRequired() { + it('should return true and no delay', async function () { + const { immediate, delay } = await this.manager.canCall( + this.caller, + this.target.address, + this.calldata.substring(0, 10), + ); + expect(immediate).to.be.equal(true); + expect(delay).to.be.bignumber.equal('0'); + }); + }, + specificRoleIsRequired: { + requiredRoleIsGranted: { + roleGrantingIsDelayed: { + callerHasAnExecutionDelay: { + beforeGrantDelay() { + beforeEach('consume previously set grant delay', async function () { + // Consume previously set delay + await mine(); + }); + + it('should return false and no execution delay', async function () { + const { immediate, delay } = await this.manager.canCall( + this.caller, + this.target.address, + this.calldata.substring(0, 10), + ); + expect(immediate).to.be.equal(false); + expect(delay).to.be.bignumber.equal('0'); + }); + }, + afterGrantDelay() { + beforeEach('consume previously set grant delay', async function () { + // Consume previously set delay + await mine(); + this.scheduleIn = this.executionDelay; // For shouldBehaveLikeSchedulableOperation + }); + + shouldBehaveLikeSchedulableOperation({ + scheduled: { + before() { + beforeEach('consume previously set delay', async function () { + // Consume previously set delay + await mine(); + }); + + it('should return false and execution delay', async function () { + const { immediate, delay } = await this.manager.canCall( + this.caller, + this.target.address, + this.calldata.substring(0, 10), + ); + expect(immediate).to.be.equal(false); + expect(delay).to.be.bignumber.equal(this.executionDelay); + }); + }, + after() { + beforeEach('consume previously set delay', async function () { + // Consume previously set delay + await mine(); + }); + + it('should return false and execution delay', async function () { + const { immediate, delay } = await this.manager.canCall( + this.caller, + this.target.address, + this.calldata.substring(0, 10), + ); + expect(immediate).to.be.equal(false); + expect(delay).to.be.bignumber.equal(this.executionDelay); + }); + }, + expired() { + beforeEach('consume previously set delay', async function () { + // Consume previously set delay + await mine(); + }); + it('should return false and execution delay', async function () { + const { immediate, delay } = await this.manager.canCall( + this.caller, + this.target.address, + this.calldata.substring(0, 10), + ); + expect(immediate).to.be.equal(false); + expect(delay).to.be.bignumber.equal(this.executionDelay); + }); + }, + }, + notScheduled() { + it('should return false and execution delay', async function () { + const { immediate, delay } = await this.manager.canCall( + this.caller, + this.target.address, + this.calldata.substring(0, 10), + ); + expect(immediate).to.be.equal(false); + expect(delay).to.be.bignumber.equal(this.executionDelay); + }); + }, + }); + }, + }, + callerHasNoExecutionDelay: { + beforeGrantDelay() { + beforeEach('consume previously set grant delay', async function () { + // Consume previously set delay + await mine(); + }); + + it('should return false and no execution delay', async function () { + const { immediate, delay } = await this.manager.canCall( + this.caller, + this.target.address, + this.calldata.substring(0, 10), + ); + expect(immediate).to.be.equal(false); + expect(delay).to.be.bignumber.equal('0'); + }); + }, + afterGrantDelay() { + beforeEach('consume previously set grant delay', async function () { + // Consume previously set delay + await mine(); + }); + + it('should return true and no execution delay', async function () { + const { immediate, delay } = await this.manager.canCall( + this.caller, + this.target.address, + this.calldata.substring(0, 10), + ); + expect(immediate).to.be.equal(true); + expect(delay).to.be.bignumber.equal('0'); + }); + }, + }, + }, + roleGrantingIsNotDelayed: { + callerHasAnExecutionDelay() { + it('should return false and execution delay', async function () { + const { immediate, delay } = await this.manager.canCall( + this.caller, + this.target.address, + this.calldata.substring(0, 10), + ); + expect(immediate).to.be.equal(false); + expect(delay).to.be.bignumber.equal(this.executionDelay); + }); + }, + callerHasNoExecutionDelay() { + it('should return true and no execution delay', async function () { + const { immediate, delay } = await this.manager.canCall( + this.caller, + this.target.address, + this.calldata.substring(0, 10), + ); + expect(immediate).to.be.equal(true); + expect(delay).to.be.bignumber.equal('0'); + }); + }, + }, + }, + requiredRoleIsNotGranted() { + it('should return false and no execution delay', async function () { + const { immediate, delay } = await this.manager.canCall( + this.caller, + this.target.address, + this.calldata.substring(0, 10), + ); + expect(immediate).to.be.equal(false); + expect(delay).to.be.bignumber.equal('0'); + }); + }, + }, + }, + }, + }); + }); + + describe('#expiration', function () { + it('has a 7 days default expiration', async function () { + expect(await this.manager.expiration()).to.be.bignumber.equal(EXPIRATION); + }); + }); + + describe('#minSetback', function () { + it('has a 5 days default minimum setback', async function () { + expect(await this.manager.minSetback()).to.be.bignumber.equal(MINSETBACK); + }); + }); + + describe('#isTargetClosed', function () { + shouldBehaveLikeClosable({ + closed() { + it('returns true', async function () { + expect(await this.manager.isTargetClosed(this.target.address)).to.be.equal(true); + }); + }, + open() { + it('returns false', async function () { + expect(await this.manager.isTargetClosed(this.target.address)).to.be.equal(false); + }); + }, + }); + }); + + describe('#getTargetFunctionRole', function () { + const methodSelector = selector('something(address,bytes)'); + + it('returns the target function role', async function () { + const roleId = web3.utils.toBN(21498); + await this.manager.$_setTargetFunctionRole(this.target.address, methodSelector, roleId); + + expect(await this.manager.getTargetFunctionRole(this.target.address, methodSelector)).to.be.bignumber.equal( + roleId, + ); + }); + + it('returns the ADMIN role if not set', async function () { + expect(await this.manager.getTargetFunctionRole(this.target.address, methodSelector)).to.be.bignumber.equal( + this.roles.ADMIN.id, + ); + }); + }); + + describe('#getTargetAdminDelay', function () { + describe('when the target admin delay is setup', function () { + beforeEach('set target admin delay', async function () { + this.oldDelay = await this.manager.getTargetAdminDelay(this.target.address); + this.newDelay = time.duration.days(10); + + await this.manager.$_setTargetAdminDelay(this.target.address, this.newDelay); + this.delay = MINSETBACK; // For shouldBehaveLikeDelay + }); + + shouldBehaveLikeDelay('effect', { + before() { + beforeEach('consume previously set grant delay', async function () { + // Consume previously set delay + await mine(); + }); + + it('returns the old target admin delay', async function () { + expect(await this.manager.getTargetAdminDelay(this.target.address)).to.be.bignumber.equal(this.oldDelay); + }); + }, + after() { + beforeEach('consume previously set grant delay', async function () { + // Consume previously set delay + await mine(); + }); + + it('returns the new target admin delay', async function () { + expect(await this.manager.getTargetAdminDelay(this.target.address)).to.be.bignumber.equal(this.newDelay); + }); + }, }); }); - it('admin can re-emit a label event', async function () { - await this.manager.labelRole(ROLES.SOME, 'Some label', { from: admin }); + it('returns the 0 if not set', async function () { + expect(await this.manager.getTargetAdminDelay(this.target.address)).to.be.bignumber.equal('0'); + }); + }); + + describe('#getRoleAdmin', function () { + const roleId = web3.utils.toBN(5234907); + + it('returns the role admin', async function () { + const adminId = web3.utils.toBN(789433); + + await this.manager.$_setRoleAdmin(roleId, adminId); + + expect(await this.manager.getRoleAdmin(roleId)).to.be.bignumber.equal(adminId); + }); + + it('returns the ADMIN role if not set', async function () { + expect(await this.manager.getRoleAdmin(roleId)).to.be.bignumber.equal(this.roles.ADMIN.id); + }); + }); + + describe('#getRoleGuardian', function () { + const roleId = web3.utils.toBN(5234907); - expectEvent(await this.manager.labelRole(ROLES.SOME, 'Updated label', { from: admin }), 'RoleLabel', { - roleId: ROLES.SOME, - label: 'Updated label', + it('returns the role guardian', async function () { + const guardianId = web3.utils.toBN(789433); + + await this.manager.$_setRoleGuardian(roleId, guardianId); + + expect(await this.manager.getRoleGuardian(roleId)).to.be.bignumber.equal(guardianId); + }); + + it('returns the ADMIN role if not set', async function () { + expect(await this.manager.getRoleGuardian(roleId)).to.be.bignumber.equal(this.roles.ADMIN.id); + }); + }); + + describe('#getRoleGrantDelay', function () { + const roleId = web3.utils.toBN(9248439); + + describe('when the grant admin delay is setup', function () { + beforeEach('set grant admin delay', async function () { + this.oldDelay = await this.manager.getRoleGrantDelay(roleId); + this.newDelay = time.duration.days(11); + + await this.manager.$_setGrantDelay(roleId, this.newDelay); + this.delay = MINSETBACK; // For shouldBehaveLikeDelay + }); + + shouldBehaveLikeDelay('grant', { + before() { + beforeEach('consume previously set grant delay', async function () { + // Consume previously set delay + await mine(); + }); + + it('returns the old role grant delay', async function () { + expect(await this.manager.getRoleGrantDelay(roleId)).to.be.bignumber.equal(this.oldDelay); + }); + }, + after() { + beforeEach('consume previously set grant delay', async function () { + // Consume previously set delay + await mine(); + }); + + it('returns the new role grant delay', async function () { + expect(await this.manager.getRoleGrantDelay(roleId)).to.be.bignumber.equal(this.newDelay); + }); + }, }); }); - it('emitting a label is restricted', async function () { - await expectRevertCustomError( - this.manager.labelRole(ROLES.SOME, 'Invalid label', { from: other }), - 'AccessManagerUnauthorizedAccount', - [other, ROLES.ADMIN], + it('returns 0 if delay is not set', async function () { + expect(await this.manager.getTargetAdminDelay(this.target.address)).to.be.bignumber.equal('0'); + }); + }); + + describe('#getAccess', function () { + beforeEach('set role', function () { + this.role = { id: web3.utils.toBN(9452) }; + this.caller = user; + }); + + shouldBehaveLikeGetAccess({ + requiredRoleIsGranted: { + roleGrantingIsDelayed: { + callerHasAnExecutionDelay: { + beforeGrantDelay() { + beforeEach('consume previously set grant delay', async function () { + // Consume previously set delay + await mine(); + }); + + it('role is not in effect and execution delay is set', async function () { + const access = await this.manager.getAccess(this.role.id, this.caller); + expect(access[0]).to.be.bignumber.equal(this.delayEffect); // inEffectSince + expect(access[1]).to.be.bignumber.equal(this.executionDelay); // currentDelay + expect(access[2]).to.be.bignumber.equal('0'); // pendingDelay + expect(access[3]).to.be.bignumber.equal('0'); // pendingDelayEffect + + // Not in effect yet + expect(await time.latest()).to.be.bignumber.lt(access[0]); + }); + }, + afterGrantDelay() { + beforeEach('consume previously set grant delay', async function () { + // Consume previously set delay + await mine(); + }); + + it('access has role in effect and execution delay is set', async function () { + const access = await this.manager.getAccess(this.role.id, this.caller); + + expect(access[0]).to.be.bignumber.equal(this.delayEffect); // inEffectSince + expect(access[1]).to.be.bignumber.equal(this.executionDelay); // currentDelay + expect(access[2]).to.be.bignumber.equal('0'); // pendingDelay + expect(access[3]).to.be.bignumber.equal('0'); // pendingDelayEffect + + // Already in effect + expect(await time.latest()).to.be.bignumber.equal(access[0]); + }); + }, + }, + callerHasNoExecutionDelay: { + beforeGrantDelay() { + beforeEach('consume previously set grant delay', async function () { + // Consume previously set delay + await mine(); + }); + + it('access has role not in effect without execution delay', async function () { + const access = await this.manager.getAccess(this.role.id, this.caller); + expect(access[0]).to.be.bignumber.equal(this.delayEffect); // inEffectSince + expect(access[1]).to.be.bignumber.equal('0'); // currentDelay + expect(access[2]).to.be.bignumber.equal('0'); // pendingDelay + expect(access[3]).to.be.bignumber.equal('0'); // pendingDelayEffect + + // Not in effect yet + expect(await time.latest()).to.be.bignumber.lt(access[0]); + }); + }, + afterGrantDelay() { + beforeEach('consume previously set grant delay', async function () { + // Consume previously set delay + await mine(); + }); + + it('role is in effect without execution delay', async function () { + const access = await this.manager.getAccess(this.role.id, this.caller); + expect(access[0]).to.be.bignumber.equal(this.delayEffect); // inEffectSince + expect(access[1]).to.be.bignumber.equal('0'); // currentDelay + expect(access[2]).to.be.bignumber.equal('0'); // pendingDelay + expect(access[3]).to.be.bignumber.equal('0'); // pendingDelayEffect + + // Already in effect + expect(await time.latest()).to.be.bignumber.equal(access[0]); + }); + }, + }, + }, + roleGrantingIsNotDelayed: { + callerHasAnExecutionDelay() { + it('access has role in effect and execution delay is set', async function () { + const access = await this.manager.getAccess(this.role.id, this.caller); + expect(access[0]).to.be.bignumber.equal(await time.latest()); // inEffectSince + expect(access[1]).to.be.bignumber.equal(this.executionDelay); // currentDelay + expect(access[2]).to.be.bignumber.equal('0'); // pendingDelay + expect(access[3]).to.be.bignumber.equal('0'); // pendingDelayEffect + + // Already in effect + expect(await time.latest()).to.be.bignumber.equal(access[0]); + }); + }, + callerHasNoExecutionDelay() { + it('access has role in effect without execution delay', async function () { + const access = await this.manager.getAccess(this.role.id, this.caller); + expect(access[0]).to.be.bignumber.equal(await time.latest()); // inEffectSince + expect(access[1]).to.be.bignumber.equal('0'); // currentDelay + expect(access[2]).to.be.bignumber.equal('0'); // pendingDelay + expect(access[3]).to.be.bignumber.equal('0'); // pendingDelayEffect + + // Already in effect + expect(await time.latest()).to.be.bignumber.equal(access[0]); + }); + }, + }, + }, + requiredRoleIsNotGranted() { + it('has empty access', async function () { + const access = await this.manager.getAccess(this.role.id, this.caller); + expect(access[0]).to.be.bignumber.equal('0'); // inEffectSince + expect(access[1]).to.be.bignumber.equal('0'); // currentDelay + expect(access[2]).to.be.bignumber.equal('0'); // pendingDelay + expect(access[3]).to.be.bignumber.equal('0'); // pendingDelayEffect + }); + }, + }); + }); + + describe('#hasRole', function () { + beforeEach('setup shouldBehaveLikeHasRole', function () { + this.role = { id: web3.utils.toBN(49832) }; + this.calldata = '0x1234'; + this.caller = user; + }); + + shouldBehaveLikeHasRole({ + publicRoleIsRequired() { + it('has PUBLIC role', async function () { + const { isMember, executionDelay } = await this.manager.hasRole(this.role.id, this.caller); + expect(isMember).to.be.true; + expect(executionDelay).to.be.bignumber.eq('0'); + }); + }, + specificRoleIsRequired: { + requiredRoleIsGranted: { + roleGrantingIsDelayed: { + callerHasAnExecutionDelay: { + beforeGrantDelay() { + beforeEach('consume previously set grant delay', async function () { + // Consume previously set delay + await mine(); + }); + + it('does not have role but execution delay', async function () { + const { isMember, executionDelay } = await this.manager.hasRole(this.role.id, this.caller); + expect(isMember).to.be.false; + expect(executionDelay).to.be.bignumber.eq(this.executionDelay); + }); + }, + afterGrantDelay() { + beforeEach('consume previously set grant delay', async function () { + // Consume previously set delay + await mine(); + }); + + it('has role and execution delay', async function () { + const { isMember, executionDelay } = await this.manager.hasRole(this.role.id, this.caller); + expect(isMember).to.be.true; + expect(executionDelay).to.be.bignumber.eq(this.executionDelay); + }); + }, + }, + callerHasNoExecutionDelay: { + beforeGrantDelay() { + beforeEach('consume previously set grant delay', async function () { + // Consume previously set delay + await mine(); + }); + + it('does not have role nor execution delay', async function () { + const { isMember, executionDelay } = await this.manager.hasRole(this.role.id, this.caller); + expect(isMember).to.be.false; + expect(executionDelay).to.be.bignumber.eq('0'); + }); + }, + afterGrantDelay() { + beforeEach('consume previously set grant delay', async function () { + // Consume previously set delay + await mine(); + }); + + it('has role and no execution delay', async function () { + const { isMember, executionDelay } = await this.manager.hasRole(this.role.id, this.caller); + expect(isMember).to.be.true; + expect(executionDelay).to.be.bignumber.eq('0'); + }); + }, + }, + }, + roleGrantingIsNotDelayed: { + callerHasAnExecutionDelay() { + it('has role and execution delay', async function () { + const { isMember, executionDelay } = await this.manager.hasRole(this.role.id, this.caller); + expect(isMember).to.be.true; + expect(executionDelay).to.be.bignumber.eq(this.executionDelay); + }); + }, + callerHasNoExecutionDelay() { + it('has role and no execution delay', async function () { + const { isMember, executionDelay } = await this.manager.hasRole(this.role.id, this.caller); + expect(isMember).to.be.true; + expect(executionDelay).to.be.bignumber.eq('0'); + }); + }, + }, + }, + requiredRoleIsNotGranted() { + it('has no role and no execution delay', async function () { + const { isMember, executionDelay } = await this.manager.hasRole(this.role.id, this.caller); + expect(isMember).to.be.false; + expect(executionDelay).to.be.bignumber.eq('0'); + }); + }, + }, + }); + }); + + describe('#getSchedule', function () { + beforeEach('set role and calldata', async function () { + const method = 'fnRestricted()'; + this.caller = user; + this.role = { id: web3.utils.toBN(493590) }; + await this.manager.$_setTargetFunctionRole(this.target.address, selector(method), this.role.id); + await this.manager.$_grantRole(this.role.id, this.caller, 0, 1); // nonzero execution delay + + this.calldata = await this.target.contract.methods[method]().encodeABI(); + this.scheduleIn = time.duration.days(10); // For shouldBehaveLikeSchedulableOperation + }); + + shouldBehaveLikeSchedulableOperation({ + scheduled: { + before() { + beforeEach('consume previously set grant delay', async function () { + // Consume previously set delay + await mine(); + }); + + it('returns schedule in the future', async function () { + const schedule = await this.manager.getSchedule(this.operationId); + expect(schedule).to.be.bignumber.equal(this.scheduledAt.add(this.scheduleIn)); + expect(schedule).to.be.bignumber.gt(await time.latest()); + }); + }, + after() { + beforeEach('consume previously set grant delay', async function () { + // Consume previously set delay + await mine(); + }); + + it('returns schedule', async function () { + const schedule = await this.manager.getSchedule(this.operationId); + expect(schedule).to.be.bignumber.equal(this.scheduledAt.add(this.scheduleIn)); + expect(schedule).to.be.bignumber.eq(await time.latest()); + }); + }, + expired() { + beforeEach('consume previously set grant delay', async function () { + // Consume previously set delay + await mine(); + }); + + it('returns 0', async function () { + expect(await this.manager.getSchedule(this.operationId)).to.be.bignumber.equal('0'); + }); + }, + }, + notScheduled() { + it('defaults to 0', async function () { + expect(await this.manager.getSchedule(this.operationId)).to.be.bignumber.equal('0'); + }); + }, + }); + }); + + describe('#getNonce', function () { + describe('when operation is scheduled', function () { + beforeEach('schedule operation', async function () { + const method = 'fnRestricted()'; + this.caller = user; + this.role = { id: web3.utils.toBN(4209043) }; + await this.manager.$_setTargetFunctionRole(this.target.address, selector(method), this.role.id); + await this.manager.$_grantRole(this.role.id, this.caller, 0, 1); // nonzero execution delay + + this.calldata = await this.target.contract.methods[method]().encodeABI(); + this.delay = time.duration.days(10); + + const { operationId } = await scheduleOperation(this.manager, { + caller: this.caller, + target: this.target.address, + calldata: this.calldata, + delay: this.delay, + }); + this.operationId = operationId; + }); + + it('returns nonce', async function () { + expect(await this.manager.getNonce(this.operationId)).to.be.bignumber.equal('1'); + }); + }); + + describe('when is not scheduled', function () { + it('returns default 0', async function () { + expect(await this.manager.getNonce(web3.utils.keccak256('operation'))).to.be.bignumber.equal('0'); + }); + }); + }); + + describe('#hashOperation', function () { + it('returns an operationId', async function () { + const calldata = '0x123543'; + const address = someAddress; + + const args = [user, address, calldata]; + + expect(await this.manager.hashOperation(...args)).to.be.bignumber.eq( + await web3.utils.keccak256(web3.eth.abi.encodeParameters(['address', 'address', 'bytes'], args)), ); }); }); + }); - describe('grant role', function () { - describe('without a grant delay', function () { - it('without an execute delay', async function () { - expect(await this.manager.hasRole(ROLES.SOME, user).then(formatAccess)).to.be.deep.equal([false, '0']); - - const { receipt } = await this.manager.grantRole(ROLES.SOME, user, 0, { from: manager }); - const timestamp = await clockFromReceipt.timestamp(receipt).then(web3.utils.toBN); - expectEvent(receipt, 'RoleGranted', { - roleId: ROLES.SOME, - account: user, - since: timestamp, - delay: '0', - newMember: true, + describe('admin operations', function () { + beforeEach('set required role', function () { + this.role = this.roles.ADMIN; + }); + + describe('subject to a delay', function () { + describe('#labelRole', function () { + describe('restrictions', function () { + beforeEach('set method and args', function () { + const method = 'labelRole(uint64,string)'; + const args = [123443, 'TEST']; + this.calldata = this.manager.contract.methods[method](...args).encodeABI(); }); - expect(await this.manager.hasRole(ROLES.SOME, user).then(formatAccess)).to.be.deep.equal([true, '0']); + shouldBehaveLikeDelayedAdminOperation(); + }); - const access = await this.manager.getAccess(ROLES.SOME, user); - expect(access[0]).to.be.bignumber.equal(timestamp); // inRoleSince - expect(access[1]).to.be.bignumber.equal('0'); // currentDelay - expect(access[2]).to.be.bignumber.equal('0'); // pendingDelay - expect(access[3]).to.be.bignumber.equal('0'); // effect + it('emits an event with the label', async function () { + expectEvent(await this.manager.labelRole(this.roles.SOME.id, 'Some label', { from: admin }), 'RoleLabel', { + roleId: this.roles.SOME.id, + label: 'Some label', + }); }); - it('with an execute delay', async function () { - expect(await this.manager.hasRole(ROLES.SOME, user).then(formatAccess)).to.be.deep.equal([false, '0']); - - const { receipt } = await this.manager.grantRole(ROLES.SOME, user, executeDelay, { from: manager }); - const timestamp = await clockFromReceipt.timestamp(receipt).then(web3.utils.toBN); - expectEvent(receipt, 'RoleGranted', { - roleId: ROLES.SOME, - account: user, - since: timestamp, - delay: executeDelay, - newMember: true, + it('updates label on a second call', async function () { + await this.manager.labelRole(this.roles.SOME.id, 'Some label', { from: admin }); + + expectEvent(await this.manager.labelRole(this.roles.SOME.id, 'Updated label', { from: admin }), 'RoleLabel', { + roleId: this.roles.SOME.id, + label: 'Updated label', }); + }); - expect(await this.manager.hasRole(ROLES.SOME, user).then(formatAccess)).to.be.deep.equal([ - true, - executeDelay.toString(), - ]); + it('reverts labeling PUBLIC_ROLE', async function () { + await expectRevertCustomError( + this.manager.labelRole(this.roles.PUBLIC.id, 'Some label', { from: admin }), + 'AccessManagerLockedRole', + [this.roles.PUBLIC.id], + ); + }); + + it('reverts labeling ADMIN_ROLE', async function () { + await expectRevertCustomError( + this.manager.labelRole(this.roles.ADMIN.id, 'Some label', { from: admin }), + 'AccessManagerLockedRole', + [this.roles.ADMIN.id], + ); + }); + }); + + describe('#setRoleAdmin', function () { + describe('restrictions', function () { + beforeEach('set method and args', function () { + const method = 'setRoleAdmin(uint64,uint64)'; + const args = [93445, 84532]; + this.calldata = this.manager.contract.methods[method](...args).encodeABI(); + }); - const access = await this.manager.getAccess(ROLES.SOME, user); - expect(access[0]).to.be.bignumber.equal(timestamp); // inRoleSince - expect(access[1]).to.be.bignumber.equal(executeDelay); // currentDelay - expect(access[2]).to.be.bignumber.equal('0'); // pendingDelay - expect(access[3]).to.be.bignumber.equal('0'); // effect + shouldBehaveLikeDelayedAdminOperation(); }); - it('to a user that is already in the role', async function () { - expect(await this.manager.hasRole(ROLES.SOME, member).then(formatAccess)).to.be.deep.equal([true, '0']); - await this.manager.grantRole(ROLES.SOME, member, 0, { from: manager }); - expect(await this.manager.hasRole(ROLES.SOME, member).then(formatAccess)).to.be.deep.equal([true, '0']); + it("sets any role's admin if called by an admin", async function () { + expect(await this.manager.getRoleAdmin(this.roles.SOME.id)).to.be.bignumber.equal(this.roles.SOME_ADMIN.id); + + const { receipt } = await this.manager.setRoleAdmin(this.roles.SOME.id, this.roles.ADMIN.id, { from: admin }); + expectEvent(receipt, 'RoleAdminChanged', { roleId: this.roles.SOME.id, admin: this.roles.ADMIN.id }); + + expect(await this.manager.getRoleAdmin(this.roles.SOME.id)).to.be.bignumber.equal(this.roles.ADMIN.id); }); - it('to a user that is scheduled for joining the role', async function () { - await this.manager.$_grantRole(ROLES.SOME, user, 10, 0); // grant delay 10 - expect(await this.manager.hasRole(ROLES.SOME, user).then(formatAccess)).to.be.deep.equal([false, '0']); - await this.manager.grantRole(ROLES.SOME, user, 0, { from: manager }); - expect(await this.manager.hasRole(ROLES.SOME, user).then(formatAccess)).to.be.deep.equal([false, '0']); + it('reverts setting PUBLIC_ROLE admin', async function () { + await expectRevertCustomError( + this.manager.setRoleAdmin(this.roles.PUBLIC.id, this.roles.ADMIN.id, { from: admin }), + 'AccessManagerLockedRole', + [this.roles.PUBLIC.id], + ); }); - it('grant role is restricted', async function () { + it('reverts setting ADMIN_ROLE admin', async function () { await expectRevertCustomError( - this.manager.grantRole(ROLES.SOME, user, 0, { from: other }), - 'AccessManagerUnauthorizedAccount', - [other, ROLES.SOME_ADMIN], + this.manager.setRoleAdmin(this.roles.ADMIN.id, this.roles.ADMIN.id, { from: admin }), + 'AccessManagerLockedRole', + [this.roles.ADMIN.id], ); }); }); - describe('with a grant delay', function () { - beforeEach(async function () { - await this.manager.$_setGrantDelay(ROLES.SOME, grantDelay); - await time.increase(MINSETBACK); + describe('#setRoleGuardian', function () { + describe('restrictions', function () { + beforeEach('set method and args', function () { + const method = 'setRoleGuardian(uint64,uint64)'; + const args = [93445, 84532]; + this.calldata = this.manager.contract.methods[method](...args).encodeABI(); + }); + + shouldBehaveLikeDelayedAdminOperation(); + }); + + it("sets any role's guardian if called by an admin", async function () { + expect(await this.manager.getRoleGuardian(this.roles.SOME.id)).to.be.bignumber.equal( + this.roles.SOME_GUARDIAN.id, + ); + + const { receipt } = await this.manager.setRoleGuardian(this.roles.SOME.id, this.roles.ADMIN.id, { + from: admin, + }); + expectEvent(receipt, 'RoleGuardianChanged', { roleId: this.roles.SOME.id, guardian: this.roles.ADMIN.id }); + + expect(await this.manager.getRoleGuardian(this.roles.SOME.id)).to.be.bignumber.equal(this.roles.ADMIN.id); + }); + + it('reverts setting PUBLIC_ROLE admin', async function () { + await expectRevertCustomError( + this.manager.setRoleGuardian(this.roles.PUBLIC.id, this.roles.ADMIN.id, { from: admin }), + 'AccessManagerLockedRole', + [this.roles.PUBLIC.id], + ); + }); + + it('reverts setting ADMIN_ROLE admin', async function () { + await expectRevertCustomError( + this.manager.setRoleGuardian(this.roles.ADMIN.id, this.roles.ADMIN.id, { from: admin }), + 'AccessManagerLockedRole', + [this.roles.ADMIN.id], + ); }); + }); - it('granted role is not active immediately', async function () { - const { receipt } = await this.manager.grantRole(ROLES.SOME, user, 0, { from: manager }); - const timestamp = await clockFromReceipt.timestamp(receipt).then(web3.utils.toBN); - expectEvent(receipt, 'RoleGranted', { - roleId: ROLES.SOME, - account: user, - since: timestamp.add(grantDelay), - delay: '0', - newMember: true, + describe('#setGrantDelay', function () { + describe('restrictions', function () { + beforeEach('set method and args', function () { + const method = 'setGrantDelay(uint64,uint32)'; + const args = [984910, time.duration.days(2)]; + this.calldata = this.manager.contract.methods[method](...args).encodeABI(); }); - expect(await this.manager.hasRole(ROLES.SOME, user).then(formatAccess)).to.be.deep.equal([false, '0']); + shouldBehaveLikeDelayedAdminOperation(); + }); - const access = await this.manager.getAccess(ROLES.SOME, user); - expect(access[0]).to.be.bignumber.equal(timestamp.add(grantDelay)); // inRoleSince - expect(access[1]).to.be.bignumber.equal('0'); // currentDelay - expect(access[2]).to.be.bignumber.equal('0'); // pendingDelay - expect(access[3]).to.be.bignumber.equal('0'); // effect + it('reverts setting grant delay for the PUBLIC_ROLE', async function () { + await expectRevertCustomError( + this.manager.setGrantDelay(this.roles.PUBLIC.id, web3.utils.toBN(69), { from: admin }), + 'AccessManagerLockedRole', + [this.roles.PUBLIC.id], + ); }); - it('granted role is active after the delay', async function () { - const { receipt } = await this.manager.grantRole(ROLES.SOME, user, 0, { from: manager }); - const timestamp = await clockFromReceipt.timestamp(receipt).then(web3.utils.toBN); - expectEvent(receipt, 'RoleGranted', { - roleId: ROLES.SOME, - account: user, - since: timestamp.add(grantDelay), - delay: '0', - newMember: true, + describe('when increasing the delay', function () { + const oldDelay = web3.utils.toBN(10); + const newDelay = web3.utils.toBN(100); + + beforeEach('sets old delay', async function () { + this.role = this.roles.SOME; + await this.manager.$_setGrantDelay(this.role.id, oldDelay); + await time.increase(MINSETBACK); + expect(await this.manager.getRoleGrantDelay(this.role.id)).to.be.bignumber.equal(oldDelay); + }); + + it('increases the delay after minsetback', async function () { + const { receipt } = await this.manager.setGrantDelay(this.role.id, newDelay, { from: admin }); + const timestamp = await clockFromReceipt.timestamp(receipt).then(web3.utils.toBN); + expectEvent(receipt, 'RoleGrantDelayChanged', { + roleId: this.role.id, + delay: newDelay, + since: timestamp.add(MINSETBACK), + }); + + expect(await this.manager.getRoleGrantDelay(this.role.id)).to.be.bignumber.equal(oldDelay); + await time.increase(MINSETBACK); + expect(await this.manager.getRoleGrantDelay(this.role.id)).to.be.bignumber.equal(newDelay); + }); + }); + + describe('when reducing the delay', function () { + const oldDelay = time.duration.days(10); + + beforeEach('sets old delay', async function () { + this.role = this.roles.SOME; + await this.manager.$_setGrantDelay(this.role.id, oldDelay); + await time.increase(MINSETBACK); + expect(await this.manager.getRoleGrantDelay(this.role.id)).to.be.bignumber.equal(oldDelay); + }); + + describe('when the delay difference is shorter than minimum setback', function () { + const newDelay = oldDelay.subn(1); + + it('increases the delay after minsetback', async function () { + const { receipt } = await this.manager.setGrantDelay(this.role.id, newDelay, { from: admin }); + const timestamp = await clockFromReceipt.timestamp(receipt).then(web3.utils.toBN); + expectEvent(receipt, 'RoleGrantDelayChanged', { + roleId: this.role.id, + delay: newDelay, + since: timestamp.add(MINSETBACK), + }); + + expect(await this.manager.getRoleGrantDelay(this.role.id)).to.be.bignumber.equal(oldDelay); + await time.increase(MINSETBACK); + expect(await this.manager.getRoleGrantDelay(this.role.id)).to.be.bignumber.equal(newDelay); + }); }); - await time.increase(grantDelay); + describe('when the delay difference is longer than minimum setback', function () { + const newDelay = web3.utils.toBN(1); - expect(await this.manager.hasRole(ROLES.SOME, user).then(formatAccess)).to.be.deep.equal([true, '0']); + beforeEach('assert delay difference is higher than minsetback', function () { + expect(oldDelay.sub(newDelay)).to.be.bignumber.gt(MINSETBACK); + }); - const access = await this.manager.getAccess(ROLES.SOME, user); - expect(access[0]).to.be.bignumber.equal(timestamp.add(grantDelay)); // inRoleSince - expect(access[1]).to.be.bignumber.equal('0'); // currentDelay - expect(access[2]).to.be.bignumber.equal('0'); // pendingDelay - expect(access[3]).to.be.bignumber.equal('0'); // effect + it('increases the delay after delay difference', async function () { + const setback = oldDelay.sub(newDelay); + const { receipt } = await this.manager.setGrantDelay(this.role.id, newDelay, { from: admin }); + const timestamp = await clockFromReceipt.timestamp(receipt).then(web3.utils.toBN); + expectEvent(receipt, 'RoleGrantDelayChanged', { + roleId: this.role.id, + delay: newDelay, + since: timestamp.add(setback), + }); + + expect(await this.manager.getRoleGrantDelay(this.role.id)).to.be.bignumber.equal(oldDelay); + await time.increase(setback); + expect(await this.manager.getRoleGrantDelay(this.role.id)).to.be.bignumber.equal(newDelay); + }); + }); }); }); - it('cannot grant public role', async function () { - await expectRevertCustomError( - this.manager.$_grantRole(ROLES.PUBLIC, other, 0, executeDelay, { from: manager }), - 'AccessManagerLockedRole', - [ROLES.PUBLIC], - ); + describe('#setTargetAdminDelay', function () { + describe('restrictions', function () { + beforeEach('set method and args', function () { + const method = 'setTargetAdminDelay(address,uint32)'; + const args = [someAddress, time.duration.days(3)]; + this.calldata = this.manager.contract.methods[method](...args).encodeABI(); + }); + + shouldBehaveLikeDelayedAdminOperation(); + }); + + describe('when increasing the delay', function () { + const oldDelay = time.duration.days(10); + const newDelay = time.duration.days(11); + const target = someAddress; + + beforeEach('sets old delay', async function () { + await this.manager.$_setTargetAdminDelay(target, oldDelay); + await time.increase(MINSETBACK); + expect(await this.manager.getTargetAdminDelay(target)).to.be.bignumber.equal(oldDelay); + }); + + it('increases the delay after minsetback', async function () { + const { receipt } = await this.manager.setTargetAdminDelay(target, newDelay, { from: admin }); + const timestamp = await clockFromReceipt.timestamp(receipt).then(web3.utils.toBN); + expectEvent(receipt, 'TargetAdminDelayUpdated', { + target, + delay: newDelay, + since: timestamp.add(MINSETBACK), + }); + + expect(await this.manager.getTargetAdminDelay(target)).to.be.bignumber.equal(oldDelay); + await time.increase(MINSETBACK); + expect(await this.manager.getTargetAdminDelay(target)).to.be.bignumber.equal(newDelay); + }); + }); + + describe('when reducing the delay', function () { + const oldDelay = time.duration.days(10); + const target = someAddress; + + beforeEach('sets old delay', async function () { + await this.manager.$_setTargetAdminDelay(target, oldDelay); + await time.increase(MINSETBACK); + expect(await this.manager.getTargetAdminDelay(target)).to.be.bignumber.equal(oldDelay); + }); + + describe('when the delay difference is shorter than minimum setback', function () { + const newDelay = oldDelay.subn(1); + + it('increases the delay after minsetback', async function () { + const { receipt } = await this.manager.setTargetAdminDelay(target, newDelay, { from: admin }); + const timestamp = await clockFromReceipt.timestamp(receipt).then(web3.utils.toBN); + expectEvent(receipt, 'TargetAdminDelayUpdated', { + target, + delay: newDelay, + since: timestamp.add(MINSETBACK), + }); + + expect(await this.manager.getTargetAdminDelay(target)).to.be.bignumber.equal(oldDelay); + await time.increase(MINSETBACK); + expect(await this.manager.getTargetAdminDelay(target)).to.be.bignumber.equal(newDelay); + }); + }); + + describe('when the delay difference is longer than minimum setback', function () { + const newDelay = web3.utils.toBN(1); + + beforeEach('assert delay difference is higher than minsetback', function () { + expect(oldDelay.sub(newDelay)).to.be.bignumber.gt(MINSETBACK); + }); + + it('increases the delay after delay difference', async function () { + const setback = oldDelay.sub(newDelay); + const { receipt } = await this.manager.setTargetAdminDelay(target, newDelay, { from: admin }); + const timestamp = await clockFromReceipt.timestamp(receipt).then(web3.utils.toBN); + expectEvent(receipt, 'TargetAdminDelayUpdated', { + target, + delay: newDelay, + since: timestamp.add(setback), + }); + + expect(await this.manager.getTargetAdminDelay(target)).to.be.bignumber.equal(oldDelay); + await time.increase(setback); + expect(await this.manager.getTargetAdminDelay(target)).to.be.bignumber.equal(newDelay); + }); + }); + }); }); }); - describe('revoke role', function () { - it('from a user that is already in the role', async function () { - expect(await this.manager.hasRole(ROLES.SOME, member).then(formatAccess)).to.be.deep.equal([true, '0']); + describe('not subject to a delay', function () { + describe('#updateAuthority', function () { + beforeEach('create a target and a new authority', async function () { + this.newAuthority = await AccessManager.new(admin); + this.newManagedTarget = await AccessManagedTarget.new(this.manager.address); + }); + + describe('restrictions', function () { + beforeEach('set method and args', function () { + const method = 'updateAuthority(address,address)'; + const args = [this.newManagedTarget.address, this.newAuthority.address]; + this.calldata = this.manager.contract.methods[method](...args).encodeABI(); + }); - const { receipt } = await this.manager.revokeRole(ROLES.SOME, member, { from: manager }); - expectEvent(receipt, 'RoleRevoked', { roleId: ROLES.SOME, account: member }); + shouldBehaveLikeNotDelayedAdminOperation(); + }); - expect(await this.manager.hasRole(ROLES.SOME, member).then(formatAccess)).to.be.deep.equal([false, '0']); + it('changes the authority', async function () { + expect(await this.newManagedTarget.authority()).to.be.equal(this.manager.address); - const access = await this.manager.getAccess(ROLES.SOME, user); - expect(access[0]).to.be.bignumber.equal('0'); // inRoleSince - expect(access[1]).to.be.bignumber.equal('0'); // currentDelay - expect(access[2]).to.be.bignumber.equal('0'); // pendingDelay - expect(access[3]).to.be.bignumber.equal('0'); // effect + const { tx } = await this.manager.updateAuthority(this.newManagedTarget.address, this.newAuthority.address, { + from: admin, + }); + + // Managed contract is responsible of notifying the change through an event + await expectEvent.inTransaction(tx, this.newManagedTarget, 'AuthorityUpdated', { + authority: this.newAuthority.address, + }); + + expect(await this.newManagedTarget.authority()).to.be.equal(this.newAuthority.address); + }); }); - it('from a user that is scheduled for joining the role', async function () { - await this.manager.$_grantRole(ROLES.SOME, user, 10, 0); // grant delay 10 + describe('#setTargetClosed', function () { + describe('restrictions', function () { + beforeEach('set method and args', function () { + const method = 'setTargetClosed(address,bool)'; + const args = [someAddress, true]; + this.calldata = this.manager.contract.methods[method](...args).encodeABI(); + }); - expect(await this.manager.hasRole(ROLES.SOME, user).then(formatAccess)).to.be.deep.equal([false, '0']); + shouldBehaveLikeNotDelayedAdminOperation(); + }); - const { receipt } = await this.manager.revokeRole(ROLES.SOME, user, { from: manager }); - expectEvent(receipt, 'RoleRevoked', { roleId: ROLES.SOME, account: user }); + it('closes and opens a target', async function () { + const close = await this.manager.setTargetClosed(this.target.address, true, { from: admin }); + expectEvent(close.receipt, 'TargetClosed', { target: this.target.address, closed: true }); - expect(await this.manager.hasRole(ROLES.SOME, user).then(formatAccess)).to.be.deep.equal([false, '0']); + expect(await this.manager.isTargetClosed(this.target.address)).to.be.equal(true); - const access = await this.manager.getAccess(ROLES.SOME, user); - expect(access[0]).to.be.bignumber.equal('0'); // inRoleSince - expect(access[1]).to.be.bignumber.equal('0'); // currentDelay - expect(access[2]).to.be.bignumber.equal('0'); // pendingDelay - expect(access[3]).to.be.bignumber.equal('0'); // effect - }); + const open = await this.manager.setTargetClosed(this.target.address, false, { from: admin }); + expectEvent(open.receipt, 'TargetClosed', { target: this.target.address, closed: false }); + expect(await this.manager.isTargetClosed(this.target.address)).to.be.equal(false); + }); - it('from a user that is not in the role', async function () { - expect(await this.manager.hasRole(ROLES.SOME, user).then(formatAccess)).to.be.deep.equal([false, '0']); - await this.manager.revokeRole(ROLES.SOME, user, { from: manager }); - expect(await this.manager.hasRole(ROLES.SOME, user).then(formatAccess)).to.be.deep.equal([false, '0']); + it('reverts if closing the manager', async function () { + await expectRevertCustomError( + this.manager.setTargetClosed(this.manager.address, true, { from: admin }), + 'AccessManagerLockedAccount', + [this.manager.address], + ); + }); }); - it('revoke role is restricted', async function () { - await expectRevertCustomError( - this.manager.revokeRole(ROLES.SOME, member, { from: other }), - 'AccessManagerUnauthorizedAccount', - [other, ROLES.SOME_ADMIN], - ); + describe('#setTargetFunctionRole', function () { + describe('restrictions', function () { + beforeEach('set method and args', function () { + const method = 'setTargetFunctionRole(address,bytes4[],uint64)'; + const args = [someAddress, ['0x12345678'], 443342]; + this.calldata = this.manager.contract.methods[method](...args).encodeABI(); + }); + + shouldBehaveLikeNotDelayedAdminOperation(); + }); + + const sigs = ['someFunction()', 'someOtherFunction(uint256)', 'oneMoreFunction(address,uint8)'].map(selector); + + it('sets function roles', async function () { + for (const sig of sigs) { + expect(await this.manager.getTargetFunctionRole(this.target.address, sig)).to.be.bignumber.equal( + this.roles.ADMIN.id, + ); + } + + const { receipt: receipt1 } = await this.manager.setTargetFunctionRole( + this.target.address, + sigs, + this.roles.SOME.id, + { + from: admin, + }, + ); + + for (const sig of sigs) { + expectEvent(receipt1, 'TargetFunctionRoleUpdated', { + target: this.target.address, + selector: sig, + roleId: this.roles.SOME.id, + }); + expect(await this.manager.getTargetFunctionRole(this.target.address, sig)).to.be.bignumber.equal( + this.roles.SOME.id, + ); + } + + const { receipt: receipt2 } = await this.manager.setTargetFunctionRole( + this.target.address, + [sigs[1]], + this.roles.SOME_ADMIN.id, + { + from: admin, + }, + ); + expectEvent(receipt2, 'TargetFunctionRoleUpdated', { + target: this.target.address, + selector: sigs[1], + roleId: this.roles.SOME_ADMIN.id, + }); + + for (const sig of sigs) { + expect(await this.manager.getTargetFunctionRole(this.target.address, sig)).to.be.bignumber.equal( + sig == sigs[1] ? this.roles.SOME_ADMIN.id : this.roles.SOME.id, + ); + } + }); }); - }); - describe('renounce role', function () { - it('for a user that is already in the role', async function () { - expect(await this.manager.hasRole(ROLES.SOME, member).then(formatAccess)).to.be.deep.equal([true, '0']); + describe('role admin operations', function () { + const ANOTHER_ADMIN = web3.utils.toBN(0xdeadc0de1); + const ANOTHER_ROLE = web3.utils.toBN(0xdeadc0de2); + + beforeEach('set required role', async function () { + // Make admin a member of ANOTHER_ADMIN + await this.manager.$_grantRole(ANOTHER_ADMIN, admin, 0, 0); + await this.manager.$_setRoleAdmin(ANOTHER_ROLE, ANOTHER_ADMIN); + + this.role = { id: ANOTHER_ADMIN }; + this.user = user; + await this.manager.$_grantRole(this.role.id, this.user, 0, 0); + }); + + describe('#grantRole', function () { + describe('restrictions', function () { + beforeEach('set method and args', function () { + const method = 'grantRole(uint64,address,uint32)'; + const args = [ANOTHER_ROLE, someAddress, 0]; + this.calldata = this.manager.contract.methods[method](...args).encodeABI(); + }); + + shouldBehaveLikeRoleAdminOperation(ANOTHER_ADMIN); + }); + + it('reverts when granting PUBLIC_ROLE', async function () { + await expectRevertCustomError( + this.manager.grantRole(this.roles.PUBLIC.id, user, 0, { + from: admin, + }), + 'AccessManagerLockedRole', + [this.roles.PUBLIC.id], + ); + }); + + describe('when the user is not a role member', function () { + describe('with grant delay', function () { + beforeEach('set grant delay and grant role', async function () { + // Delay granting + this.grantDelay = time.duration.weeks(2); + await this.manager.$_setGrantDelay(ANOTHER_ROLE, this.grantDelay); + await time.increase(MINSETBACK); + + // Grant role + this.executionDelay = time.duration.days(3); + expect(await this.manager.hasRole(ANOTHER_ROLE, this.user).then(formatAccess)).to.be.deep.equal([ + false, + '0', + ]); + const { receipt } = await this.manager.grantRole(ANOTHER_ROLE, this.user, this.executionDelay, { + from: admin, + }); + + this.receipt = receipt; + this.delay = this.grantDelay; // For shouldBehaveLikeDelay + }); + + shouldBehaveLikeDelay('grant', { + before() { + beforeEach('consume previously set grant delay', async function () { + // Consume previously set delay + await mine(); + }); + + it('does not grant role to the user yet', async function () { + const timestamp = await clockFromReceipt.timestamp(this.receipt).then(web3.utils.toBN); + expectEvent(this.receipt, 'RoleGranted', { + roleId: ANOTHER_ROLE, + account: this.user, + since: timestamp.add(this.grantDelay), + delay: this.executionDelay, + newMember: true, + }); + + // Access is correctly stored + const access = await this.manager.getAccess(ANOTHER_ROLE, user); + expect(access[0]).to.be.bignumber.equal(timestamp.add(this.grantDelay)); // inEffectSince + expect(access[1]).to.be.bignumber.equal(this.executionDelay); // currentDelay + expect(access[2]).to.be.bignumber.equal('0'); // pendingDelay + expect(access[3]).to.be.bignumber.equal('0'); // pendingDelayEffect + + // Not in effect yet + const currentTimestamp = await time.latest(); + expect(currentTimestamp).to.be.a.bignumber.lt(access[0]); + expect(await this.manager.hasRole(ANOTHER_ROLE, user).then(formatAccess)).to.be.deep.equal([ + false, + this.executionDelay.toString(), + ]); + }); + }, + after() { + beforeEach('consume previously set grant delay', async function () { + // Consume previously set delay + await mine(); + }); + + it('grants role to the user', async function () { + const timestamp = await clockFromReceipt.timestamp(this.receipt).then(web3.utils.toBN); + expectEvent(this.receipt, 'RoleGranted', { + roleId: ANOTHER_ROLE, + account: this.user, + since: timestamp.add(this.grantDelay), + delay: this.executionDelay, + newMember: true, + }); + + // Access is correctly stored + const access = await this.manager.getAccess(ANOTHER_ROLE, user); + expect(access[0]).to.be.bignumber.equal(timestamp.add(this.grantDelay)); // inEffectSince + expect(access[1]).to.be.bignumber.equal(this.executionDelay); // currentDelay + expect(access[2]).to.be.bignumber.equal('0'); // pendingDelay + expect(access[3]).to.be.bignumber.equal('0'); // pendingDelayEffect + + // Already in effect + const currentTimestamp = await time.latest(); + expect(currentTimestamp).to.be.a.bignumber.equal(access[0]); + expect(await this.manager.hasRole(ANOTHER_ROLE, user).then(formatAccess)).to.be.deep.equal([ + true, + this.executionDelay.toString(), + ]); + }); + }, + }); + }); + + describe('without grant delay', function () { + beforeEach('set granting delay', async function () { + // Delay granting + this.grantDelay = 0; + await this.manager.$_setGrantDelay(ANOTHER_ROLE, this.grantDelay); + await time.increase(MINSETBACK); + }); + + it('immediately grants the role to the user', async function () { + this.executionDelay = time.duration.days(6); + expect(await this.manager.hasRole(ANOTHER_ROLE, this.user).then(formatAccess)).to.be.deep.equal([ + false, + '0', + ]); + const { receipt } = await this.manager.grantRole(ANOTHER_ROLE, this.user, this.executionDelay, { + from: admin, + }); + + const timestamp = await clockFromReceipt.timestamp(receipt).then(web3.utils.toBN); + expectEvent(receipt, 'RoleGranted', { + roleId: ANOTHER_ROLE, + account: this.user, + since: timestamp, + delay: this.executionDelay, + newMember: true, + }); + + // Access is correctly stored + const access = await this.manager.getAccess(ANOTHER_ROLE, user); + expect(access[0]).to.be.bignumber.equal(timestamp); // inEffectSince + expect(access[1]).to.be.bignumber.equal(this.executionDelay); // currentDelay + expect(access[2]).to.be.bignumber.equal('0'); // pendingDelay + expect(access[3]).to.be.bignumber.equal('0'); // pendingDelayEffect + + // Already in effect + const currentTimestamp = await time.latest(); + expect(currentTimestamp).to.be.a.bignumber.equal(access[0]); + expect(await this.manager.hasRole(ANOTHER_ROLE, user).then(formatAccess)).to.be.deep.equal([ + true, + this.executionDelay.toString(), + ]); + }); + }); + }); + + describe('when the user is already a role member', function () { + beforeEach('make user role member', async function () { + this.previousExecutionDelay = time.duration.days(6); + await this.manager.$_grantRole(ANOTHER_ROLE, this.user, 0, this.previousExecutionDelay); + this.oldAccess = await this.manager.getAccess(ANOTHER_ROLE, user); + }); + + describe('with grant delay', function () { + beforeEach('set granting delay', async function () { + // Delay granting + const grantDelay = time.duration.weeks(2); + await this.manager.$_setGrantDelay(ANOTHER_ROLE, grantDelay); + await time.increase(MINSETBACK); + }); - const { receipt } = await this.manager.renounceRole(ROLES.SOME, member, { from: member }); - expectEvent(receipt, 'RoleRevoked', { roleId: ROLES.SOME, account: member }); + describe('when increasing the execution delay', function () { + beforeEach('set increased new execution delay', async function () { + expect(await this.manager.hasRole(ANOTHER_ROLE, this.user).then(formatAccess)).to.be.deep.equal([ + true, + this.previousExecutionDelay.toString(), + ]); - expect(await this.manager.hasRole(ROLES.SOME, member).then(formatAccess)).to.be.deep.equal([false, '0']); + this.newExecutionDelay = this.previousExecutionDelay.add(time.duration.days(4)); + }); - const access = await this.manager.getAccess(ROLES.SOME, member); - expect(access[0]).to.be.bignumber.equal('0'); // inRoleSince - expect(access[1]).to.be.bignumber.equal('0'); // currentDelay - expect(access[2]).to.be.bignumber.equal('0'); // pendingDelay - expect(access[3]).to.be.bignumber.equal('0'); // effect - }); + it('emits event and immediately changes the execution delay', async function () { + expect(await this.manager.hasRole(ANOTHER_ROLE, this.user).then(formatAccess)).to.be.deep.equal([ + true, + this.previousExecutionDelay.toString(), + ]); + const { receipt } = await this.manager.grantRole(ANOTHER_ROLE, this.user, this.newExecutionDelay, { + from: admin, + }); + const timestamp = await clockFromReceipt.timestamp(receipt).then(web3.utils.toBN); + + expectEvent(receipt, 'RoleGranted', { + roleId: ANOTHER_ROLE, + account: this.user, + since: timestamp, + delay: this.newExecutionDelay, + newMember: false, + }); + + // Access is correctly stored + const access = await this.manager.getAccess(ANOTHER_ROLE, user); + expect(access[0]).to.be.bignumber.equal(this.oldAccess[0]); // inEffectSince + expect(access[1]).to.be.bignumber.equal(this.newExecutionDelay); // currentDelay + expect(access[2]).to.be.bignumber.equal('0'); // pendingDelay + expect(access[3]).to.be.bignumber.equal('0'); // pendingDelayEffect + + // Already in effect + expect(await this.manager.hasRole(ANOTHER_ROLE, user).then(formatAccess)).to.be.deep.equal([ + true, + this.newExecutionDelay.toString(), + ]); + }); + }); - it('for a user that is schedule for joining the role', async function () { - await this.manager.$_grantRole(ROLES.SOME, user, 10, 0); // grant delay 10 + describe('when decreasing the execution delay', function () { + beforeEach('decrease execution delay', async function () { + expect(await this.manager.hasRole(ANOTHER_ROLE, this.user).then(formatAccess)).to.be.deep.equal([ + true, + this.previousExecutionDelay.toString(), + ]); + + this.newExecutionDelay = this.previousExecutionDelay.sub(time.duration.days(4)); + const { receipt } = await this.manager.grantRole(ANOTHER_ROLE, this.user, this.newExecutionDelay, { + from: admin, + }); + this.grantTimestamp = await clockFromReceipt.timestamp(receipt).then(web3.utils.toBN); + + this.receipt = receipt; + this.delay = this.previousExecutionDelay.sub(this.newExecutionDelay); // For shouldBehaveLikeDelay + }); - expect(await this.manager.hasRole(ROLES.SOME, user).then(formatAccess)).to.be.deep.equal([false, '0']); + it('emits event', function () { + expectEvent(this.receipt, 'RoleGranted', { + roleId: ANOTHER_ROLE, + account: this.user, + since: this.grantTimestamp.add(this.delay), + delay: this.newExecutionDelay, + newMember: false, + }); + }); - const { receipt } = await this.manager.renounceRole(ROLES.SOME, user, { from: user }); - expectEvent(receipt, 'RoleRevoked', { roleId: ROLES.SOME, account: user }); + shouldBehaveLikeDelay('execution delay effect', { + before() { + beforeEach('consume effect delay', async function () { + // Consume previously set delay + await mine(); + }); + + it('does not change the execution delay yet', async function () { + // Access is correctly stored + const access = await this.manager.getAccess(ANOTHER_ROLE, user); + expect(access[0]).to.be.bignumber.equal(this.oldAccess[0]); // inEffectSince + expect(access[1]).to.be.bignumber.equal(this.previousExecutionDelay); // currentDelay + expect(access[2]).to.be.bignumber.equal(this.newExecutionDelay); // pendingDelay + expect(access[3]).to.be.bignumber.equal(this.grantTimestamp.add(this.delay)); // pendingDelayEffect + + // Not in effect yet + expect(await this.manager.hasRole(ANOTHER_ROLE, user).then(formatAccess)).to.be.deep.equal([ + true, + this.previousExecutionDelay.toString(), + ]); + }); + }, + after() { + beforeEach('consume effect delay', async function () { + // Consume previously set delay + await mine(); + }); + + it('changes the execution delay', async function () { + // Access is correctly stored + const access = await this.manager.getAccess(ANOTHER_ROLE, user); + + expect(access[0]).to.be.bignumber.equal(this.oldAccess[0]); // inEffectSince + expect(access[1]).to.be.bignumber.equal(this.newExecutionDelay); // currentDelay + expect(access[2]).to.be.bignumber.equal('0'); // pendingDelay + expect(access[3]).to.be.bignumber.equal('0'); // pendingDelayEffect + + // Already in effect + expect(await this.manager.hasRole(ANOTHER_ROLE, user).then(formatAccess)).to.be.deep.equal([ + true, + this.newExecutionDelay.toString(), + ]); + }); + }, + }); + }); + }); - expect(await this.manager.hasRole(ROLES.SOME, user).then(formatAccess)).to.be.deep.equal([false, '0']); + describe('without grant delay', function () { + beforeEach('set granting delay', async function () { + // Delay granting + const grantDelay = 0; + await this.manager.$_setGrantDelay(ANOTHER_ROLE, grantDelay); + await time.increase(MINSETBACK); + }); - const access = await this.manager.getAccess(ROLES.SOME, user); - expect(access[0]).to.be.bignumber.equal('0'); // inRoleSince - expect(access[1]).to.be.bignumber.equal('0'); // currentDelay - expect(access[2]).to.be.bignumber.equal('0'); // pendingDelay - expect(access[3]).to.be.bignumber.equal('0'); // effect - }); + describe('when increasing the execution delay', function () { + beforeEach('set increased new execution delay', async function () { + expect(await this.manager.hasRole(ANOTHER_ROLE, this.user).then(formatAccess)).to.be.deep.equal([ + true, + this.previousExecutionDelay.toString(), + ]); - it('for a user that is not in the role', async function () { - await this.manager.renounceRole(ROLES.SOME, user, { from: user }); - }); + this.newExecutionDelay = this.previousExecutionDelay.add(time.duration.days(4)); + }); - it('bad user confirmation', async function () { - await expectRevertCustomError( - this.manager.renounceRole(ROLES.SOME, member, { from: user }), - 'AccessManagerBadConfirmation', - [], - ); - }); - }); + it('emits event and immediately changes the execution delay', async function () { + expect(await this.manager.hasRole(ANOTHER_ROLE, this.user).then(formatAccess)).to.be.deep.equal([ + true, + this.previousExecutionDelay.toString(), + ]); + const { receipt } = await this.manager.grantRole(ANOTHER_ROLE, this.user, this.newExecutionDelay, { + from: admin, + }); + const timestamp = await clockFromReceipt.timestamp(receipt).then(web3.utils.toBN); + + expectEvent(receipt, 'RoleGranted', { + roleId: ANOTHER_ROLE, + account: this.user, + since: timestamp, + delay: this.newExecutionDelay, + newMember: false, + }); + + // Access is correctly stored + const access = await this.manager.getAccess(ANOTHER_ROLE, user); + expect(access[0]).to.be.bignumber.equal(this.oldAccess[0]); // inEffectSince + expect(access[1]).to.be.bignumber.equal(this.newExecutionDelay); // currentDelay + expect(access[2]).to.be.bignumber.equal('0'); // pendingDelay + expect(access[3]).to.be.bignumber.equal('0'); // pendingDelayEffect + + // Already in effect + expect(await this.manager.hasRole(ANOTHER_ROLE, user).then(formatAccess)).to.be.deep.equal([ + true, + this.newExecutionDelay.toString(), + ]); + }); + }); - describe('change role admin', function () { - it("admin can set any role's admin", async function () { - expect(await this.manager.getRoleAdmin(ROLES.SOME)).to.be.bignumber.equal(ROLES.SOME_ADMIN); + describe('when decreasing the execution delay', function () { + beforeEach('decrease execution delay', async function () { + expect(await this.manager.hasRole(ANOTHER_ROLE, this.user).then(formatAccess)).to.be.deep.equal([ + true, + this.previousExecutionDelay.toString(), + ]); + + this.newExecutionDelay = this.previousExecutionDelay.sub(time.duration.days(4)); + const { receipt } = await this.manager.grantRole(ANOTHER_ROLE, this.user, this.newExecutionDelay, { + from: admin, + }); + this.grantTimestamp = await clockFromReceipt.timestamp(receipt).then(web3.utils.toBN); + + this.receipt = receipt; + this.delay = this.previousExecutionDelay.sub(this.newExecutionDelay); // For shouldBehaveLikeDelay + }); - const { receipt } = await this.manager.setRoleAdmin(ROLES.SOME, ROLES.ADMIN, { from: admin }); - expectEvent(receipt, 'RoleAdminChanged', { roleId: ROLES.SOME, admin: ROLES.ADMIN }); + it('emits event', function () { + expectEvent(this.receipt, 'RoleGranted', { + roleId: ANOTHER_ROLE, + account: this.user, + since: this.grantTimestamp.add(this.delay), + delay: this.newExecutionDelay, + newMember: false, + }); + }); - expect(await this.manager.getRoleAdmin(ROLES.SOME)).to.be.bignumber.equal(ROLES.ADMIN); - }); + shouldBehaveLikeDelay('execution delay effect', { + before() { + beforeEach('consume effect delay', async function () { + // Consume previously set delay + await mine(); + }); + + it('does not change the execution delay yet', async function () { + // Access is correctly stored + const access = await this.manager.getAccess(ANOTHER_ROLE, user); + expect(access[0]).to.be.bignumber.equal(this.oldAccess[0]); // inEffectSince + expect(access[1]).to.be.bignumber.equal(this.previousExecutionDelay); // currentDelay + expect(access[2]).to.be.bignumber.equal(this.newExecutionDelay); // pendingDelay + expect(access[3]).to.be.bignumber.equal(this.grantTimestamp.add(this.delay)); // pendingDelayEffect + + // Not in effect yet + expect(await this.manager.hasRole(ANOTHER_ROLE, user).then(formatAccess)).to.be.deep.equal([ + true, + this.previousExecutionDelay.toString(), + ]); + }); + }, + after() { + beforeEach('consume effect delay', async function () { + // Consume previously set delay + await mine(); + }); + + it('changes the execution delay', async function () { + // Access is correctly stored + const access = await this.manager.getAccess(ANOTHER_ROLE, user); + + expect(access[0]).to.be.bignumber.equal(this.oldAccess[0]); // inEffectSince + expect(access[1]).to.be.bignumber.equal(this.newExecutionDelay); // currentDelay + expect(access[2]).to.be.bignumber.equal('0'); // pendingDelay + expect(access[3]).to.be.bignumber.equal('0'); // pendingDelayEffect + + // Already in effect + expect(await this.manager.hasRole(ANOTHER_ROLE, user).then(formatAccess)).to.be.deep.equal([ + true, + this.newExecutionDelay.toString(), + ]); + }); + }, + }); + }); + }); + }); + }); - it("setting a role's admin is restricted", async function () { - await expectRevertCustomError( - this.manager.setRoleAdmin(ROLES.SOME, ROLES.SOME, { from: manager }), - 'AccessManagerUnauthorizedAccount', - [manager, ROLES.ADMIN], - ); - }); - }); + describe('#revokeRole', function () { + describe('restrictions', function () { + beforeEach('set method and args', async function () { + const method = 'revokeRole(uint64,address)'; + const args = [ANOTHER_ROLE, someAddress]; + this.calldata = this.manager.contract.methods[method](...args).encodeABI(); - describe('change role guardian', function () { - it("admin can set any role's admin", async function () { - expect(await this.manager.getRoleGuardian(ROLES.SOME)).to.be.bignumber.equal(ROLES.SOME_ADMIN); + // Need to be set before revoking + await this.manager.$_grantRole(...args, 0, 0); + }); - const { receipt } = await this.manager.setRoleGuardian(ROLES.SOME, ROLES.ADMIN, { from: admin }); - expectEvent(receipt, 'RoleGuardianChanged', { roleId: ROLES.SOME, guardian: ROLES.ADMIN }); + shouldBehaveLikeRoleAdminOperation(ANOTHER_ADMIN); + }); - expect(await this.manager.getRoleGuardian(ROLES.SOME)).to.be.bignumber.equal(ROLES.ADMIN); - }); + describe('when role has been granted', function () { + beforeEach('grant role with grant delay', async function () { + this.grantDelay = time.duration.weeks(1); + await this.manager.$_grantRole(ANOTHER_ROLE, user, this.grantDelay, 0); - it("setting a role's admin is restricted", async function () { - await expectRevertCustomError( - this.manager.setRoleGuardian(ROLES.SOME, ROLES.SOME, { from: other }), - 'AccessManagerUnauthorizedAccount', - [other, ROLES.ADMIN], - ); - }); - }); + this.delay = this.grantDelay; // For shouldBehaveLikeDelay + }); - describe('change execution delay', function () { - it('increasing the delay has immediate effect', async function () { - const oldDelay = web3.utils.toBN(10); - const newDelay = web3.utils.toBN(100); + shouldBehaveLikeDelay('grant', { + before() { + beforeEach('consume previously set grant delay', async function () { + // Consume previously set delay + await mine(); + }); - // role is already granted (with no delay) in the initial setup. this update takes time. - await this.manager.$_grantRole(ROLES.SOME, member, 0, oldDelay); + it('revokes a granted role that will take effect in the future', async function () { + expect(await this.manager.hasRole(ANOTHER_ROLE, user).then(formatAccess)).to.be.deep.equal([ + false, + '0', + ]); + + const { receipt } = await this.manager.revokeRole(ANOTHER_ROLE, user, { from: admin }); + expectEvent(receipt, 'RoleRevoked', { roleId: ANOTHER_ROLE, account: user }); + + expect(await this.manager.hasRole(ANOTHER_ROLE, user).then(formatAccess)).to.be.deep.equal([ + false, + '0', + ]); + + const access = await this.manager.getAccess(ANOTHER_ROLE, user); + expect(access[0]).to.be.bignumber.equal('0'); // inRoleSince + expect(access[1]).to.be.bignumber.equal('0'); // currentDelay + expect(access[2]).to.be.bignumber.equal('0'); // pendingDelay + expect(access[3]).to.be.bignumber.equal('0'); // effect + }); + }, + after() { + beforeEach('consume previously set grant delay', async function () { + // Consume previously set delay + await mine(); + }); - const accessBefore = await this.manager.getAccess(ROLES.SOME, member); - expect(accessBefore[1]).to.be.bignumber.equal(oldDelay); // currentDelay - expect(accessBefore[2]).to.be.bignumber.equal('0'); // pendingDelay - expect(accessBefore[3]).to.be.bignumber.equal('0'); // effect + it('revokes a granted role that already took effect', async function () { + expect(await this.manager.hasRole(ANOTHER_ROLE, user).then(formatAccess)).to.be.deep.equal([ + true, + '0', + ]); + + const { receipt } = await this.manager.revokeRole(ANOTHER_ROLE, user, { from: admin }); + expectEvent(receipt, 'RoleRevoked', { roleId: ANOTHER_ROLE, account: user }); + + expect(await this.manager.hasRole(ANOTHER_ROLE, user).then(formatAccess)).to.be.deep.equal([ + false, + '0', + ]); + + const access = await this.manager.getAccess(ANOTHER_ROLE, user); + expect(access[0]).to.be.bignumber.equal('0'); // inRoleSince + expect(access[1]).to.be.bignumber.equal('0'); // currentDelay + expect(access[2]).to.be.bignumber.equal('0'); // pendingDelay + expect(access[3]).to.be.bignumber.equal('0'); // effect + }); + }, + }); + }); - const { receipt } = await this.manager.grantRole(ROLES.SOME, member, newDelay, { - from: manager, - }); - const timestamp = await clockFromReceipt.timestamp(receipt).then(web3.utils.toBN); - - expectEvent(receipt, 'RoleGranted', { - roleId: ROLES.SOME, - account: member, - since: timestamp, - delay: newDelay, - newMember: false, - }); + describe('when role has not been granted', function () { + it('has no effect', async function () { + expect(await this.manager.hasRole(this.roles.SOME.id, user).then(formatAccess)).to.be.deep.equal([ + false, + '0', + ]); + const { receipt } = await this.manager.revokeRole(this.roles.SOME.id, user, { from: manager }); + expectEvent.notEmitted(receipt, 'RoleRevoked', { roleId: ANOTHER_ROLE, account: user }); + expect(await this.manager.hasRole(this.roles.SOME.id, user).then(formatAccess)).to.be.deep.equal([ + false, + '0', + ]); + }); + }); - // immediate effect - const accessAfter = await this.manager.getAccess(ROLES.SOME, member); - expect(accessAfter[1]).to.be.bignumber.equal(newDelay); // currentDelay - expect(accessAfter[2]).to.be.bignumber.equal('0'); // pendingDelay - expect(accessAfter[3]).to.be.bignumber.equal('0'); // effect + it('reverts revoking PUBLIC_ROLE', async function () { + await expectRevertCustomError( + this.manager.revokeRole(this.roles.PUBLIC.id, user, { from: admin }), + 'AccessManagerLockedRole', + [this.roles.PUBLIC.id], + ); + }); + }); }); - it('decreasing the delay takes time', async function () { - const oldDelay = web3.utils.toBN(100); - const newDelay = web3.utils.toBN(10); - - // role is already granted (with no delay) in the initial setup. this update takes time. - await this.manager.$_grantRole(ROLES.SOME, member, 0, oldDelay); + describe('self role operations', function () { + describe('#renounceRole', function () { + beforeEach('grant role', async function () { + this.role = { id: web3.utils.toBN(783164) }; + this.caller = user; + await this.manager.$_grantRole(this.role.id, this.caller, 0, 0); + }); - const accessBefore = await this.manager.getAccess(ROLES.SOME, member); - expect(accessBefore[1]).to.be.bignumber.equal(oldDelay); // currentDelay - expect(accessBefore[2]).to.be.bignumber.equal('0'); // pendingDelay - expect(accessBefore[3]).to.be.bignumber.equal('0'); // effect + it('renounces a role', async function () { + expect(await this.manager.hasRole(this.role.id, this.caller).then(formatAccess)).to.be.deep.equal([ + true, + '0', + ]); + const { receipt } = await this.manager.renounceRole(this.role.id, this.caller, { + from: this.caller, + }); + expectEvent(receipt, 'RoleRevoked', { + roleId: this.role.id, + account: this.caller, + }); + expect(await this.manager.hasRole(this.role.id, this.caller).then(formatAccess)).to.be.deep.equal([ + false, + '0', + ]); + }); - const { receipt } = await this.manager.grantRole(ROLES.SOME, member, newDelay, { - from: manager, - }); - const timestamp = await clockFromReceipt.timestamp(receipt).then(web3.utils.toBN); - const setback = oldDelay.sub(newDelay); - - expectEvent(receipt, 'RoleGranted', { - roleId: ROLES.SOME, - account: member, - since: timestamp.add(setback), - delay: newDelay, - newMember: false, - }); + it('reverts if renouncing the PUBLIC_ROLE', async function () { + await expectRevertCustomError( + this.manager.renounceRole(this.roles.PUBLIC.id, this.caller, { + from: this.caller, + }), + 'AccessManagerLockedRole', + [this.roles.PUBLIC.id], + ); + }); - // no immediate effect - const accessAfter = await this.manager.getAccess(ROLES.SOME, member); - expect(accessAfter[1]).to.be.bignumber.equal(oldDelay); // currentDelay - expect(accessAfter[2]).to.be.bignumber.equal(newDelay); // pendingDelay - expect(accessAfter[3]).to.be.bignumber.equal(timestamp.add(setback)); // effect - - // delayed effect - await time.increase(setback); - const accessAfterSetback = await this.manager.getAccess(ROLES.SOME, member); - expect(accessAfterSetback[1]).to.be.bignumber.equal(newDelay); // currentDelay - expect(accessAfterSetback[2]).to.be.bignumber.equal('0'); // pendingDelay - expect(accessAfterSetback[3]).to.be.bignumber.equal('0'); // effect - }); - - it('can set a user execution delay during the grant delay', async function () { - await this.manager.$_grantRole(ROLES.SOME, other, 10, 0); - // here: "other" is pending to get the role, but doesn't yet have it. - - const { receipt } = await this.manager.grantRole(ROLES.SOME, other, executeDelay, { from: manager }); - const timestamp = await clockFromReceipt.timestamp(receipt).then(web3.utils.toBN); - - // increasing the execution delay from 0 to executeDelay is immediate - expectEvent(receipt, 'RoleGranted', { - roleId: ROLES.SOME, - account: other, - since: timestamp, - delay: executeDelay, - newMember: false, + it('reverts if renouncing with bad caller confirmation', async function () { + await expectRevertCustomError( + this.manager.renounceRole(this.role.id, someAddress, { + from: this.caller, + }), + 'AccessManagerBadConfirmation', + [], + ); + }); }); }); }); + }); - describe('change grant delay', function () { - it('increasing the delay has immediate effect', async function () { - const oldDelay = web3.utils.toBN(10); - const newDelay = web3.utils.toBN(100); - - await this.manager.$_setGrantDelay(ROLES.SOME, oldDelay); - await time.increase(MINSETBACK); - - expect(await this.manager.getRoleGrantDelay(ROLES.SOME)).to.be.bignumber.equal(oldDelay); + describe('access managed target operations', function () { + describe('when calling a restricted target function', function () { + const method = 'fnRestricted()'; - const { receipt } = await this.manager.setGrantDelay(ROLES.SOME, newDelay, { from: admin }); - const timestamp = await clockFromReceipt.timestamp(receipt).then(web3.utils.toBN); - const setback = web3.utils.BN.max(MINSETBACK, oldDelay.sub(newDelay)); + beforeEach('set required role', function () { + this.role = { id: web3.utils.toBN(3597243) }; + this.manager.$_setTargetFunctionRole(this.target.address, selector(method), this.role.id); + }); - expect(setback).to.be.bignumber.equal(MINSETBACK); - expectEvent(receipt, 'RoleGrantDelayChanged', { - roleId: ROLES.SOME, - delay: newDelay, - since: timestamp.add(setback), + describe('restrictions', function () { + beforeEach('set method and args', function () { + this.calldata = this.target.contract.methods[method]().encodeABI(); + this.caller = user; }); - expect(await this.manager.getRoleGrantDelay(ROLES.SOME)).to.be.bignumber.equal(oldDelay); - await time.increase(setback); - expect(await this.manager.getRoleGrantDelay(ROLES.SOME)).to.be.bignumber.equal(newDelay); + shouldBehaveLikeAManagedRestrictedOperation(); }); - it('increasing the delay has delay effect #1', async function () { - const oldDelay = web3.utils.toBN(100); - const newDelay = web3.utils.toBN(10); + it('succeeds called by a role member', async function () { + await this.manager.$_grantRole(this.role.id, user, 0, 0); - await this.manager.$_setGrantDelay(ROLES.SOME, oldDelay); - await time.increase(MINSETBACK); - - expect(await this.manager.getRoleGrantDelay(ROLES.SOME)).to.be.bignumber.equal(oldDelay); - - const { receipt } = await this.manager.setGrantDelay(ROLES.SOME, newDelay, { from: admin }); - const timestamp = await clockFromReceipt.timestamp(receipt).then(web3.utils.toBN); - const setback = web3.utils.BN.max(MINSETBACK, oldDelay.sub(newDelay)); - - expect(setback).to.be.bignumber.equal(MINSETBACK); - expectEvent(receipt, 'RoleGrantDelayChanged', { - roleId: ROLES.SOME, - delay: newDelay, - since: timestamp.add(setback), + const { receipt } = await this.target.methods[method]({ + data: this.calldata, + from: user, + }); + expectEvent(receipt, 'CalledRestricted', { + caller: user, }); - - expect(await this.manager.getRoleGrantDelay(ROLES.SOME)).to.be.bignumber.equal(oldDelay); - await time.increase(setback); - expect(await this.manager.getRoleGrantDelay(ROLES.SOME)).to.be.bignumber.equal(newDelay); }); + }); - it('increasing the delay has delay effect #2', async function () { - const oldDelay = time.duration.days(30); // more than the minsetback - const newDelay = web3.utils.toBN(10); - - await this.manager.$_setGrantDelay(ROLES.SOME, oldDelay); - await time.increase(MINSETBACK); - - expect(await this.manager.getRoleGrantDelay(ROLES.SOME)).to.be.bignumber.equal(oldDelay); - - const { receipt } = await this.manager.setGrantDelay(ROLES.SOME, newDelay, { from: admin }); - const timestamp = await clockFromReceipt.timestamp(receipt).then(web3.utils.toBN); - const setback = web3.utils.BN.max(MINSETBACK, oldDelay.sub(newDelay)); - - expect(setback).to.be.bignumber.gt(MINSETBACK); - expectEvent(receipt, 'RoleGrantDelayChanged', { - roleId: ROLES.SOME, - delay: newDelay, - since: timestamp.add(setback), - }); + describe('when calling a non-restricted target function', function () { + const method = 'fnUnrestricted()'; - expect(await this.manager.getRoleGrantDelay(ROLES.SOME)).to.be.bignumber.equal(oldDelay); - await time.increase(setback); - expect(await this.manager.getRoleGrantDelay(ROLES.SOME)).to.be.bignumber.equal(newDelay); + beforeEach('set required role', async function () { + this.role = { id: web3.utils.toBN(879435) }; + await this.manager.$_setTargetFunctionRole(this.target.address, selector(method), this.role.id); }); - it('changing the grant delay is restricted', async function () { - await expectRevertCustomError( - this.manager.setGrantDelay(ROLES.SOME, grantDelay, { from: other }), - 'AccessManagerUnauthorizedAccount', - [ROLES.ADMIN, other], - ); + it('succeeds called by anyone', async function () { + const { receipt } = await this.target.methods[method]({ + data: this.calldata, + from: user, + }); + expectEvent(receipt, 'CalledUnrestricted', { + caller: user, + }); }); }); }); - describe('with AccessManaged target contract', function () { - beforeEach('deploy target contract', async function () { - this.target = await AccessManagedTarget.new(this.manager.address); - // helpers for indirect calls - this.callData = selector('fnRestricted()'); - this.call = [this.target.address, this.callData]; - this.opId = web3.utils.keccak256( - web3.eth.abi.encodeParameters(['address', 'address', 'bytes'], [user, ...this.call]), - ); - this.direct = (opts = {}) => this.target.fnRestricted({ from: user, ...opts }); - this.schedule = (opts = {}) => this.manager.schedule(...this.call, 0, { from: user, ...opts }); - this.execute = (opts = {}) => this.manager.execute(...this.call, { from: user, ...opts }); - this.cancel = (opts = {}) => this.manager.cancel(user, ...this.call, { from: user, ...opts }); - }); + describe('#schedule', function () { + const method = 'fnRestricted()'; - describe('Change function permissions', function () { - const sigs = ['someFunction()', 'someOtherFunction(uint256)', 'oneMoreFunction(address,uint8)'].map(selector); + beforeEach('set target function role', async function () { + this.role = { id: web3.utils.toBN(498305) }; + this.caller = user; - it('admin can set function role', async function () { - for (const sig of sigs) { - expect(await this.manager.getTargetFunctionRole(this.target.address, sig)).to.be.bignumber.equal(ROLES.ADMIN); - } + await this.manager.$_setTargetFunctionRole(this.target.address, selector(method), this.role.id); + await this.manager.$_grantRole(this.role.id, this.caller, 0, 1); // nonzero execution delay - const { receipt: receipt1 } = await this.manager.setTargetFunctionRole(this.target.address, sigs, ROLES.SOME, { - from: admin, - }); + this.calldata = this.target.contract.methods[method]().encodeABI(); + this.delay = time.duration.weeks(2); + }); - for (const sig of sigs) { - expectEvent(receipt1, 'TargetFunctionRoleUpdated', { - target: this.target.address, - selector: sig, - roleId: ROLES.SOME, + describe('restrictions', function () { + shouldBehaveLikeCanCall({ + closed() { + it('reverts as AccessManagerUnauthorizedCall', async function () { + await expectRevertCustomError( + scheduleOperation(this.manager, { + caller: this.caller, + target: this.target.address, + calldata: this.calldata, + delay: this.delay, + }), + 'AccessManagerUnauthorizedCall', + [this.caller, this.target.address, this.calldata.substring(0, 10)], + ); }); - expect(await this.manager.getTargetFunctionRole(this.target.address, sig)).to.be.bignumber.equal(ROLES.SOME); - } - - const { receipt: receipt2 } = await this.manager.setTargetFunctionRole( - this.target.address, - [sigs[1]], - ROLES.SOME_ADMIN, - { - from: admin, + }, + open: { + callerIsTheManager: { + executing() { + it.skip('is not reachable because schedule is not restrictable'); + }, + notExecuting() { + it('reverts as AccessManagerUnauthorizedCall', async function () { + await expectRevertCustomError( + scheduleOperation(this.manager, { + caller: this.caller, + target: this.target.address, + calldata: this.calldata, + delay: this.delay, + }), + 'AccessManagerUnauthorizedCall', + [this.caller, this.target.address, this.calldata.substring(0, 10)], + ); + }); + }, }, - ); - expectEvent(receipt2, 'TargetFunctionRoleUpdated', { - target: this.target.address, - selector: sigs[1], - roleId: ROLES.SOME_ADMIN, - }); + callerIsNotTheManager: { + publicRoleIsRequired() { + it('reverts as AccessManagerUnauthorizedCall', async function () { + // scheduleOperation is not used here because it alters the next block timestamp + await expectRevertCustomError( + this.manager.schedule(this.target.address, this.calldata, MAX_UINT48, { + from: this.caller, + }), + 'AccessManagerUnauthorizedCall', + [this.caller, this.target.address, this.calldata.substring(0, 10)], + ); + }); + }, + specificRoleIsRequired: { + requiredRoleIsGranted: { + roleGrantingIsDelayed: { + callerHasAnExecutionDelay: { + beforeGrantDelay() { + it('reverts as AccessManagerUnauthorizedCall', async function () { + // scheduleOperation is not used here because it alters the next block timestamp + await expectRevertCustomError( + this.manager.schedule(this.target.address, this.calldata, MAX_UINT48, { + from: this.caller, + }), + 'AccessManagerUnauthorizedCall', + [this.caller, this.target.address, this.calldata.substring(0, 10)], + ); + }); + }, + afterGrantDelay() { + it('succeeds', async function () { + // scheduleOperation is not used here because it alters the next block timestamp + await this.manager.schedule(this.target.address, this.calldata, MAX_UINT48, { + from: this.caller, + }); + }); + }, + }, + callerHasNoExecutionDelay: { + beforeGrantDelay() { + it('reverts as AccessManagerUnauthorizedCall', async function () { + // scheduleOperation is not used here because it alters the next block timestamp + await expectRevertCustomError( + this.manager.schedule(this.target.address, this.calldata, MAX_UINT48, { + from: this.caller, + }), + 'AccessManagerUnauthorizedCall', + [this.caller, this.target.address, this.calldata.substring(0, 10)], + ); + }); + }, + afterGrantDelay() { + it('reverts as AccessManagerUnauthorizedCall', async function () { + // scheduleOperation is not used here because it alters the next block timestamp + await expectRevertCustomError( + this.manager.schedule(this.target.address, this.calldata, MAX_UINT48, { + from: this.caller, + }), + 'AccessManagerUnauthorizedCall', + [this.caller, this.target.address, this.calldata.substring(0, 10)], + ); + }); + }, + }, + }, + roleGrantingIsNotDelayed: { + callerHasAnExecutionDelay() { + it('succeeds', async function () { + await scheduleOperation(this.manager, { + caller: this.caller, + target: this.target.address, + calldata: this.calldata, + delay: this.delay, + }); + }); + }, + callerHasNoExecutionDelay() { + it('reverts as AccessManagerUnauthorizedCall', async function () { + // scheduleOperation is not used here because it alters the next block timestamp + await expectRevertCustomError( + this.manager.schedule(this.target.address, this.calldata, MAX_UINT48, { + from: this.caller, + }), + 'AccessManagerUnauthorizedCall', + [this.caller, this.target.address, this.calldata.substring(0, 10)], + ); + }); + }, + }, + }, + requiredRoleIsNotGranted() { + it('reverts as AccessManagerUnauthorizedCall', async function () { + await expectRevertCustomError( + scheduleOperation(this.manager, { + caller: this.caller, + target: this.target.address, + calldata: this.calldata, + delay: this.delay, + }), + 'AccessManagerUnauthorizedCall', + [this.caller, this.target.address, this.calldata.substring(0, 10)], + ); + }); + }, + }, + }, + }, + }); + }); - for (const sig of sigs) { - expect(await this.manager.getTargetFunctionRole(this.target.address, sig)).to.be.bignumber.equal( - sig == sigs[1] ? ROLES.SOME_ADMIN : ROLES.SOME, - ); - } + it('schedules an operation at the specified execution date if it is larger than caller execution delay', async function () { + const { operationId, scheduledAt, receipt } = await scheduleOperation(this.manager, { + caller: this.caller, + target: this.target.address, + calldata: this.calldata, + delay: this.delay, }); - it('non-admin cannot set function role', async function () { - await expectRevertCustomError( - this.manager.setTargetFunctionRole(this.target.address, sigs, ROLES.SOME, { from: other }), - 'AccessManagerUnauthorizedAccount', - [other, ROLES.ADMIN], - ); + expect(await this.manager.getSchedule(operationId)).to.be.bignumber.equal(scheduledAt.add(this.delay)); + expectEvent(receipt, 'OperationScheduled', { + operationId, + nonce: '1', + schedule: scheduledAt.add(this.delay), + target: this.target.address, + data: this.calldata, }); }); - // WIP - describe('Calling restricted & unrestricted functions', function () { - for (const [callerRoles, fnRole, closed, delay] of product( - [[], [ROLES.SOME]], - [undefined, ROLES.ADMIN, ROLES.SOME, ROLES.PUBLIC], - [false, true], - [null, executeDelay], - )) { - // can we call with a delay ? - const indirectSuccess = (fnRole == ROLES.PUBLIC || callerRoles.includes(fnRole)) && !closed; - - // can we call without a delay ? - const directSuccess = (fnRole == ROLES.PUBLIC || (callerRoles.includes(fnRole) && !delay)) && !closed; - - const description = [ - 'Caller in roles', - '[' + (callerRoles ?? []).map(roleId => ROLES[roleId]).join(', ') + ']', - delay ? 'with a delay' : 'without a delay', - '+', - 'functions open to roles', - '[' + (ROLES[fnRole] ?? '') + ']', - closed ? `(closed)` : '', - ].join(' '); - - describe(description, function () { - beforeEach(async function () { - if (!delay || fnRole === ROLES.PUBLIC) this.skip(); // TODO: Fixed in #4613 - - // setup - await Promise.all([ - this.manager.$_setTargetClosed(this.target.address, closed), - fnRole && this.manager.$_setTargetFunctionRole(this.target.address, selector('fnRestricted()'), fnRole), - fnRole && this.manager.$_setTargetFunctionRole(this.target.address, selector('fnUnrestricted()'), fnRole), - ...callerRoles - .filter(roleId => roleId != ROLES.PUBLIC) - .map(roleId => this.manager.$_grantRole(roleId, user, 0, delay ?? 0)), - ]); - - // post setup checks - expect(await this.manager.isTargetClosed(this.target.address)).to.be.equal(closed); - - if (fnRole) { - expect( - await this.manager.getTargetFunctionRole(this.target.address, selector('fnRestricted()')), - ).to.be.bignumber.equal(fnRole); - expect( - await this.manager.getTargetFunctionRole(this.target.address, selector('fnUnrestricted()')), - ).to.be.bignumber.equal(fnRole); - } - - for (const roleId of callerRoles) { - const access = await this.manager.getAccess(roleId, user); - if (roleId == ROLES.PUBLIC) { - expect(access[0]).to.be.bignumber.equal('0'); // inRoleSince - expect(access[1]).to.be.bignumber.equal('0'); // currentDelay - expect(access[2]).to.be.bignumber.equal('0'); // pendingDelay - expect(access[3]).to.be.bignumber.equal('0'); // effect - } else { - expect(access[0]).to.be.bignumber.gt('0'); // inRoleSince - expect(access[1]).to.be.bignumber.eq(String(delay ?? 0)); // currentDelay - expect(access[2]).to.be.bignumber.equal('0'); // pendingDelay - expect(access[3]).to.be.bignumber.equal('0'); // effect - } - } - }); - - it('canCall', async function () { - const result = await this.manager.canCall(user, this.target.address, selector('fnRestricted()')); - expect(result[0]).to.be.equal(directSuccess); - expect(result[1]).to.be.bignumber.equal(!directSuccess && indirectSuccess ? delay ?? '0' : '0'); - }); - - it('Calling a non restricted function never revert', async function () { - expectEvent(await this.target.fnUnrestricted({ from: user }), 'CalledUnrestricted', { - caller: user, - }); - }); - - it(`Calling a restricted function directly should ${ - directSuccess ? 'succeed' : 'revert' - }`, async function () { - const promise = this.direct(); - - if (directSuccess) { - expectEvent(await promise, 'CalledRestricted', { caller: user }); - } else if (indirectSuccess) { - await expectRevertCustomError(promise, 'AccessManagerNotScheduled', [this.opId]); - } else { - await expectRevertCustomError(promise, 'AccessManagedUnauthorized', [user]); - } - }); + it('schedules an operation at the minimum execution date if no specified execution date (when == 0)', async function () { + const executionDelay = await time.duration.hours(72); + await this.manager.$_grantRole(this.role.id, this.caller, 0, executionDelay); - it('Calling indirectly: only execute', async function () { - // execute without schedule - if (directSuccess) { - const nonceBefore = await this.manager.getNonce(this.opId); - const { receipt, tx } = await this.execute(); - - expectEvent.notEmitted(receipt, 'OperationExecuted', { operationId: this.opId }); - await expectEvent.inTransaction(tx, this.target, 'CalledRestricted', { caller: this.manager.address }); - - // nonce is not modified - expect(await this.manager.getNonce(this.opId)).to.be.bignumber.equal(nonceBefore); - } else if (indirectSuccess) { - await expectRevertCustomError(this.execute(), 'AccessManagerNotScheduled', [this.opId]); - } else { - await expectRevertCustomError(this.execute(), 'AccessManagerUnauthorizedCall', [user, ...this.call]); - } - }); + const timestamp = await time.latest(); + const scheduledAt = timestamp.addn(1); + await setNextBlockTimestamp(scheduledAt); + const { receipt } = await this.manager.schedule(this.target.address, this.calldata, 0, { + from: this.caller, + }); - it('Calling indirectly: schedule and execute', async function () { - if (directSuccess || indirectSuccess) { - const nonceBefore = await this.manager.getNonce(this.opId); - const { receipt } = await this.schedule(); - const timestamp = await clockFromReceipt.timestamp(receipt).then(web3.utils.toBN); + const operationId = await this.manager.hashOperation(this.caller, this.target.address, this.calldata); - expectEvent(receipt, 'OperationScheduled', { - operationId: this.opId, - caller: user, - target: this.call[0], - data: this.call[1], - }); + expect(await this.manager.getSchedule(operationId)).to.be.bignumber.equal(scheduledAt.add(executionDelay)); + expectEvent(receipt, 'OperationScheduled', { + operationId, + nonce: '1', + schedule: scheduledAt.add(executionDelay), + target: this.target.address, + data: this.calldata, + }); + }); - // if can call directly, delay should be 0. Otherwise, the delay should be applied - expect(await this.manager.getSchedule(this.opId)).to.be.bignumber.equal( - timestamp.add(directSuccess ? web3.utils.toBN(0) : delay), - ); + it('increases the nonce of an operation scheduled more than once', async function () { + // Setup and check initial nonce + const expectedOperationId = await web3.utils.keccak256( + web3.eth.abi.encodeParameters( + ['address', 'address', 'bytes'], + [this.caller, this.target.address, this.calldata], + ), + ); + expect(await this.manager.getNonce(expectedOperationId)).to.be.bignumber.eq('0'); + + // Schedule + const op1 = await scheduleOperation(this.manager, { + caller: this.caller, + target: this.target.address, + calldata: this.calldata, + delay: this.delay, + }); + expectEvent(op1.receipt, 'OperationScheduled', { + operationId: op1.operationId, + nonce: '1', + schedule: op1.scheduledAt.add(this.delay), + target: this.target.address, + data: this.calldata, + }); + expect(expectedOperationId).to.eq(op1.operationId); - // nonce is incremented - expect(await this.manager.getNonce(this.opId)).to.be.bignumber.equal(nonceBefore.addn(1)); - - // execute without wait - if (directSuccess) { - const { receipt, tx } = await this.execute(); - - await expectEvent.inTransaction(tx, this.target, 'CalledRestricted', { caller: this.manager.address }); - if (delay && fnRole !== ROLES.PUBLIC) { - expectEvent(receipt, 'OperationExecuted', { operationId: this.opId }); - expect(await this.manager.getSchedule(this.opId)).to.be.bignumber.equal('0'); - } - - // nonce is not modified by execute - expect(await this.manager.getNonce(this.opId)).to.be.bignumber.equal(nonceBefore.addn(1)); - } else if (indirectSuccess) { - await expectRevertCustomError(this.execute(), 'AccessManagerNotReady', [this.opId]); - } else { - await expectRevertCustomError(this.execute(), 'AccessManagerUnauthorizedCall', [user, ...this.call]); - } - } else { - await expectRevertCustomError(this.schedule(), 'AccessManagerUnauthorizedCall', [user, ...this.call]); - } - }); + // Consume + await time.increase(this.delay); + await this.manager.$_consumeScheduledOp(expectedOperationId); - it('Calling indirectly: schedule wait and execute', async function () { - if (directSuccess || indirectSuccess) { - const nonceBefore = await this.manager.getNonce(this.opId); - const { receipt } = await this.schedule(); - const timestamp = await clockFromReceipt.timestamp(receipt).then(web3.utils.toBN); + // Check nonce + expect(await this.manager.getNonce(expectedOperationId)).to.be.bignumber.eq('1'); - expectEvent(receipt, 'OperationScheduled', { - operationId: this.opId, - caller: user, - target: this.call[0], - data: this.call[1], - }); + // Schedule again + const op2 = await scheduleOperation(this.manager, { + caller: this.caller, + target: this.target.address, + calldata: this.calldata, + delay: this.delay, + }); + expectEvent(op2.receipt, 'OperationScheduled', { + operationId: op2.operationId, + nonce: '2', + schedule: op2.scheduledAt.add(this.delay), + target: this.target.address, + data: this.calldata, + }); + expect(expectedOperationId).to.eq(op2.operationId); - // if can call directly, delay should be 0. Otherwise, the delay should be applied - expect(await this.manager.getSchedule(this.opId)).to.be.bignumber.equal( - timestamp.add(directSuccess ? web3.utils.toBN(0) : delay), - ); + // Check final nonce + expect(await this.manager.getNonce(expectedOperationId)).to.be.bignumber.eq('2'); + }); - // nonce is incremented - expect(await this.manager.getNonce(this.opId)).to.be.bignumber.equal(nonceBefore.addn(1)); - - // wait - await time.increase(delay ?? 0); - - // execute without wait - if (directSuccess || indirectSuccess) { - const { receipt, tx } = await this.execute(); - - await expectEvent.inTransaction(tx, this.target, 'CalledRestricted', { caller: this.manager.address }); - if (delay && fnRole !== ROLES.PUBLIC) { - expectEvent(receipt, 'OperationExecuted', { operationId: this.opId }); - expect(await this.manager.getSchedule(this.opId)).to.be.bignumber.equal('0'); - } - - // nonce is not modified by execute - expect(await this.manager.getNonce(this.opId)).to.be.bignumber.equal(nonceBefore.addn(1)); - } else { - await expectRevertCustomError(this.execute(), 'AccessManagerUnauthorizedCall', [user, ...this.call]); - } - } else { - await expectRevertCustomError(this.schedule(), 'AccessManagerUnauthorizedCall', [user, ...this.call]); - } - }); + it('reverts if the specified execution date is before the current timestamp + caller execution delay', async function () { + const executionDelay = time.duration.weeks(1).add(this.delay); + await this.manager.$_grantRole(this.role.id, this.caller, 0, executionDelay); - it('Calling directly: schedule and call', async function () { - if (directSuccess || indirectSuccess) { - const nonceBefore = await this.manager.getNonce(this.opId); - const { receipt } = await this.schedule(); - const timestamp = await clockFromReceipt.timestamp(receipt).then(web3.utils.toBN); + await expectRevertCustomError( + scheduleOperation(this.manager, { + caller: this.caller, + target: this.target.address, + calldata: this.calldata, + delay: this.delay, + }), + 'AccessManagerUnauthorizedCall', + [this.caller, this.target.address, this.calldata.substring(0, 10)], + ); + }); - expectEvent(receipt, 'OperationScheduled', { - operationId: this.opId, - caller: user, - target: this.call[0], - data: this.call[1], - }); + it('reverts if an operation is already schedule', async function () { + const { operationId } = await scheduleOperation(this.manager, { + caller: this.caller, + target: this.target.address, + calldata: this.calldata, + delay: this.delay, + }); - // if can call directly, delay should be 0. Otherwise, the delay should be applied - const schedule = timestamp.add(directSuccess ? web3.utils.toBN(0) : delay); - expect(await this.manager.getSchedule(this.opId)).to.be.bignumber.equal(schedule); - - // nonce is incremented - expect(await this.manager.getNonce(this.opId)).to.be.bignumber.equal(nonceBefore.addn(1)); - - // execute without wait - const promise = this.direct(); - if (directSuccess) { - expectEvent(await promise, 'CalledRestricted', { caller: user }); - - // schedule is not reset - expect(await this.manager.getSchedule(this.opId)).to.be.bignumber.equal(schedule); - - // nonce is not modified by execute - expect(await this.manager.getNonce(this.opId)).to.be.bignumber.equal(nonceBefore.addn(1)); - } else if (indirectSuccess) { - await expectRevertCustomError(promise, 'AccessManagerNotReady', [this.opId]); - } else { - await expectRevertCustomError(promise, 'AccessManagerUnauthorizedCall', [user, ...this.call]); - } - } else { - await expectRevertCustomError(this.schedule(), 'AccessManagerUnauthorizedCall', [user, ...this.call]); - } - }); + await expectRevertCustomError( + scheduleOperation(this.manager, { + caller: this.caller, + target: this.target.address, + calldata: this.calldata, + delay: this.delay, + }), + 'AccessManagerAlreadyScheduled', + [operationId], + ); + }); - it('Calling directly: schedule wait and call', async function () { - if (directSuccess || indirectSuccess) { - const nonceBefore = await this.manager.getNonce(this.opId); - const { receipt } = await this.schedule(); - const timestamp = await clockFromReceipt.timestamp(receipt).then(web3.utils.toBN); + it('panics scheduling calldata with less than 4 bytes', async function () { + const calldata = '0x1234'; // 2 bytes - expectEvent(receipt, 'OperationScheduled', { - operationId: this.opId, - caller: user, - target: this.call[0], - data: this.call[1], - }); + // Managed contract + await expectRevert.unspecified( + scheduleOperation(this.manager, { + caller: this.caller, + target: this.target.address, + calldata: calldata, + delay: this.delay, + }), + ); - // if can call directly, delay should be 0. Otherwise, the delay should be applied - const schedule = timestamp.add(directSuccess ? web3.utils.toBN(0) : delay); - expect(await this.manager.getSchedule(this.opId)).to.be.bignumber.equal(schedule); + // Manager contract + await expectRevert.unspecified( + scheduleOperation(this.manager, { + caller: this.caller, + target: this.manager.address, + calldata: calldata, + delay: this.delay, + }), + ); + }); - // nonce is incremented - expect(await this.manager.getNonce(this.opId)).to.be.bignumber.equal(nonceBefore.addn(1)); + it('reverts scheduling an unknown operation to the manager', async function () { + const calldata = '0x12345678'; - // wait - await time.increase(delay ?? 0); + await expectRevertCustomError( + scheduleOperation(this.manager, { + caller: this.caller, + target: this.manager.address, + calldata, + delay: this.delay, + }), + 'AccessManagerUnauthorizedCall', + [this.caller, this.manager.address, calldata], + ); + }); + }); - // execute without wait - const promise = await this.direct(); - if (directSuccess) { - expectEvent(await promise, 'CalledRestricted', { caller: user }); + describe('#execute', function () { + const method = 'fnRestricted()'; - // schedule is not reset - expect(await this.manager.getSchedule(this.opId)).to.be.bignumber.equal(schedule); + beforeEach('set target function role', async function () { + this.role = { id: web3.utils.toBN(9825430) }; + this.caller = user; - // nonce is not modified by execute - expect(await this.manager.getNonce(this.opId)).to.be.bignumber.equal(nonceBefore.addn(1)); - } else if (indirectSuccess) { - const receipt = await promise; + await this.manager.$_setTargetFunctionRole(this.target.address, selector(method), this.role.id); + await this.manager.$_grantRole(this.role.id, this.caller, 0, 0); - expectEvent(receipt, 'CalledRestricted', { caller: user }); - await expectEvent.inTransaction(receipt.tx, this.manager, 'OperationExecuted', { - operationId: this.opId, - }); + this.calldata = this.target.contract.methods[method]().encodeABI(); + }); - // schedule is reset - expect(await this.manager.getSchedule(this.opId)).to.be.bignumber.equal('0'); - - // nonce is not modified by execute - expect(await this.manager.getNonce(this.opId)).to.be.bignumber.equal(nonceBefore.addn(1)); - } else { - await expectRevertCustomError(this.direct(), 'AccessManagerUnauthorizedCall', [user, ...this.call]); - } - } else { - await expectRevertCustomError(this.schedule(), 'AccessManagerUnauthorizedCall', [user, ...this.call]); - } + describe('restrictions', function () { + shouldBehaveLikeCanCall({ + closed() { + it('reverts as AccessManagerUnauthorizedCall', async function () { + await expectRevertCustomError( + this.manager.execute(this.target.address, this.calldata, { from: this.caller }), + 'AccessManagerUnauthorizedCall', + [this.caller, this.target.address, this.calldata.substring(0, 10)], + ); }); - - it('Scheduling for later than needed'); // TODO - }); - } + }, + open: { + callerIsTheManager: { + executing() { + it('succeeds', async function () { + await this.manager.execute(this.target.address, this.calldata, { from: this.caller }); + }); + }, + notExecuting() { + it('reverts as AccessManagerUnauthorizedCall', async function () { + await expectRevertCustomError( + this.manager.execute(this.target.address, this.calldata, { from: this.caller }), + 'AccessManagerUnauthorizedCall', + [this.caller, this.target.address, this.calldata.substring(0, 10)], + ); + }); + }, + }, + callerIsNotTheManager: { + publicRoleIsRequired() { + shouldBehaveLikeSchedulableOperation(COMMON_SCHEDULABLE_PATH_IF_ZERO_DELAY); + }, + specificRoleIsRequired: { + requiredRoleIsGranted: { + roleGrantingIsDelayed: { + callerHasAnExecutionDelay: { + beforeGrantDelay() { + it('reverts as AccessManagerUnauthorizedCall', async function () { + await expectRevertCustomError( + this.manager.execute(this.target.address, this.calldata, { from: this.caller }), + 'AccessManagerUnauthorizedCall', + [this.caller, this.target.address, this.calldata.substring(0, 10)], + ); + }); + }, + afterGrantDelay() { + beforeEach('define schedule delay', async function () { + // Consume previously set delay + await mine(); + this.scheduleIn = time.duration.days(21); + }); + + shouldBehaveLikeSchedulableOperation(COMMON_SCHEDULABLE_PATH); + }, + }, + callerHasNoExecutionDelay: { + beforeGrantDelay() { + it('reverts as AccessManagerUnauthorizedCall', async function () { + await expectRevertCustomError( + this.manager.execute(this.target.address, this.calldata, { from: this.caller }), + 'AccessManagerUnauthorizedCall', + [this.caller, this.target.address, this.calldata.substring(0, 10)], + ); + }); + }, + afterGrantDelay() { + beforeEach('define schedule delay', async function () { + // Consume previously set delay + await mine(); + }); + + shouldBehaveLikeSchedulableOperation(COMMON_SCHEDULABLE_PATH_IF_ZERO_DELAY); + }, + }, + }, + roleGrantingIsNotDelayed: { + callerHasAnExecutionDelay() { + beforeEach('define schedule delay', async function () { + this.scheduleIn = time.duration.days(15); + }); + + shouldBehaveLikeSchedulableOperation(COMMON_SCHEDULABLE_PATH); + }, + callerHasNoExecutionDelay() { + shouldBehaveLikeSchedulableOperation(COMMON_SCHEDULABLE_PATH_IF_ZERO_DELAY); + }, + }, + }, + requiredRoleIsNotGranted() { + it('reverts as AccessManagerUnauthorizedCall', async function () { + await expectRevertCustomError( + this.manager.execute(this.target.address, this.calldata, { from: this.caller }), + 'AccessManagerUnauthorizedCall', + [this.caller, this.target.address, this.calldata.substring(0, 10)], + ); + }); + }, + }, + }, + }, + }); }); - describe('Indirect execution corner-cases', async function () { - beforeEach(async function () { - await this.manager.$_setTargetFunctionRole(this.target.address, this.callData, ROLES.SOME); - await this.manager.$_grantRole(ROLES.SOME, user, 0, executeDelay); - }); + it('executes with a delay consuming the scheduled operation', async function () { + const delay = time.duration.hours(4); + await this.manager.$_grantRole(this.role.id, this.caller, 0, 1); // Execution delay is needed so the operation is consumed - it('Checking canCall when caller is the manager depend on the _executionId', async function () { - const result = await this.manager.canCall(this.manager.address, this.target.address, '0x00000000'); - expect(result[0]).to.be.false; - expect(result[1]).to.be.bignumber.equal('0'); + const { operationId } = await scheduleOperation(this.manager, { + caller: this.caller, + target: this.target.address, + calldata: this.calldata, + delay, }); + await time.increase(delay); + const { receipt } = await this.manager.execute(this.target.address, this.calldata, { from: this.caller }); + expectEvent(receipt, 'OperationExecuted', { + operationId, + nonce: '1', + }); + expect(await this.manager.getSchedule(operationId)).to.be.bignumber.equal('0'); + }); - it('Cannot execute earlier', async function () { - const { receipt } = await this.schedule(); - const timestamp = await clockFromReceipt.timestamp(receipt).then(web3.utils.toBN); - - expect(await this.manager.getSchedule(this.opId)).to.be.bignumber.equal(timestamp.add(executeDelay)); - - // too early - await helpers.time.setNextBlockTimestamp(timestamp.add(executeDelay).subn(1)); - await expectRevertCustomError(this.execute(), 'AccessManagerNotReady', [this.opId]); - - // the revert happened one second before the execution delay expired - expect(await time.latest()).to.be.bignumber.equal(timestamp.add(executeDelay).subn(1)); + it('executes with no delay consuming a scheduled operation', async function () { + const delay = time.duration.hours(4); - // ok - await helpers.time.setNextBlockTimestamp(timestamp.add(executeDelay)); - await this.execute(); + // give caller an execution delay + await this.manager.$_grantRole(this.role.id, this.caller, 0, 1); - // the success happened when the delay was reached (earliest possible) - expect(await time.latest()).to.be.bignumber.equal(timestamp.add(executeDelay)); + const { operationId } = await scheduleOperation(this.manager, { + caller: this.caller, + target: this.target.address, + calldata: this.calldata, + delay, }); - it('Cannot schedule an already scheduled operation', async function () { - const { receipt } = await this.schedule(); - expectEvent(receipt, 'OperationScheduled', { - operationId: this.opId, - caller: user, - target: this.call[0], - data: this.call[1], - }); + // remove the execution delay + await this.manager.$_grantRole(this.role.id, this.caller, 0, 0); - await expectRevertCustomError(this.schedule(), 'AccessManagerAlreadyScheduled', [this.opId]); + await time.increase(delay); + const { receipt } = await this.manager.execute(this.target.address, this.calldata, { from: this.caller }); + expectEvent(receipt, 'OperationExecuted', { + operationId, + nonce: '1', }); + expect(await this.manager.getSchedule(operationId)).to.be.bignumber.equal('0'); + }); - it('Cannot cancel an operation that is not scheduled', async function () { - await expectRevertCustomError(this.cancel(), 'AccessManagerNotScheduled', [this.opId]); - }); + it('keeps the original _executionId after finishing the call', async function () { + const executionIdBefore = await getStorageAt(this.manager.address, EXECUTION_ID_STORAGE_SLOT); + await this.manager.execute(this.target.address, this.calldata, { from: this.caller }); + const executionIdAfter = await getStorageAt(this.manager.address, EXECUTION_ID_STORAGE_SLOT); + expect(executionIdBefore).to.be.bignumber.equal(executionIdAfter); + }); - it('Cannot cancel an operation that is already executed', async function () { - await this.schedule(); - await time.increase(executeDelay); - await this.execute(); + it('reverts executing twice', async function () { + const delay = time.duration.hours(2); + await this.manager.$_grantRole(this.role.id, this.caller, 0, 1); // Execution delay is needed so the operation is consumed - await expectRevertCustomError(this.cancel(), 'AccessManagerNotScheduled', [this.opId]); + const { operationId } = await scheduleOperation(this.manager, { + caller: this.caller, + target: this.target.address, + calldata: this.calldata, + delay, }); + await time.increase(delay); + await this.manager.execute(this.target.address, this.calldata, { from: this.caller }); + await expectRevertCustomError( + this.manager.execute(this.target.address, this.calldata, { from: this.caller }), + 'AccessManagerNotScheduled', + [operationId], + ); + }); + }); - it('Scheduler can cancel', async function () { - await this.schedule(); + describe('#consumeScheduledOp', function () { + beforeEach('define scheduling parameters', async function () { + const method = 'fnRestricted()'; + this.caller = this.target.address; + this.calldata = this.target.contract.methods[method]().encodeABI(); + this.role = { id: web3.utils.toBN(9834983) }; - expect(await this.manager.getSchedule(this.opId)).to.not.be.bignumber.equal('0'); + await this.manager.$_setTargetFunctionRole(this.target.address, selector(method), this.role.id); + await this.manager.$_grantRole(this.role.id, this.caller, 0, 1); // nonzero execution delay - expectEvent(await this.cancel({ from: manager }), 'OperationCanceled', { operationId: this.opId }); + this.scheduleIn = time.duration.hours(10); // For shouldBehaveLikeSchedulableOperation + }); - expect(await this.manager.getSchedule(this.opId)).to.be.bignumber.equal('0'); + describe('when caller is not consuming scheduled operation', function () { + beforeEach('set consuming false', async function () { + await this.target.setIsConsumingScheduledOp(false, `0x${CONSUMING_SCHEDULE_STORAGE_SLOT.toString(16)}`); }); - it('Guardian can cancel', async function () { - await this.schedule(); - - expect(await this.manager.getSchedule(this.opId)).to.not.be.bignumber.equal('0'); - - expectEvent(await this.cancel({ from: manager }), 'OperationCanceled', { operationId: this.opId }); + it('reverts as AccessManagerUnauthorizedConsume', async function () { + await impersonate(this.caller); + await expectRevertCustomError( + this.manager.consumeScheduledOp(this.caller, this.calldata, { from: this.caller }), + 'AccessManagerUnauthorizedConsume', + [this.caller], + ); + }); + }); - expect(await this.manager.getSchedule(this.opId)).to.be.bignumber.equal('0'); + describe('when caller is consuming scheduled operation', function () { + beforeEach('set consuming true', async function () { + await this.target.setIsConsumingScheduledOp(true, `0x${CONSUMING_SCHEDULE_STORAGE_SLOT.toString(16)}`); }); - it('Cancel is restricted', async function () { - await this.schedule(); + shouldBehaveLikeSchedulableOperation({ + scheduled: { + before() { + it('reverts as AccessManagerNotReady', async function () { + await impersonate(this.caller); + await expectRevertCustomError( + this.manager.consumeScheduledOp(this.caller, this.calldata, { from: this.caller }), + 'AccessManagerNotReady', + [this.operationId], + ); + }); + }, + after() { + it('consumes the scheduled operation and resets timepoint', async function () { + expect(await this.manager.getSchedule(this.operationId)).to.be.bignumber.equal( + this.scheduledAt.add(this.scheduleIn), + ); + await impersonate(this.caller); + const { receipt } = await this.manager.consumeScheduledOp(this.caller, this.calldata, { + from: this.caller, + }); + expectEvent(receipt, 'OperationExecuted', { + operationId: this.operationId, + nonce: '1', + }); + expect(await this.manager.getSchedule(this.operationId)).to.be.bignumber.equal('0'); + }); + }, + expired() { + it('reverts as AccessManagerExpired', async function () { + await impersonate(this.caller); + await expectRevertCustomError( + this.manager.consumeScheduledOp(this.caller, this.calldata, { from: this.caller }), + 'AccessManagerExpired', + [this.operationId], + ); + }); + }, + }, + notScheduled() { + it('reverts as AccessManagerNotScheduled', async function () { + await impersonate(this.caller); + await expectRevertCustomError( + this.manager.consumeScheduledOp(this.caller, this.calldata, { from: this.caller }), + 'AccessManagerNotScheduled', + [this.operationId], + ); + }); + }, + }); + }); + }); - expect(await this.manager.getSchedule(this.opId)).to.not.be.bignumber.equal('0'); + describe('#cancelScheduledOp', function () { + const method = 'fnRestricted()'; - await expectRevertCustomError(this.cancel({ from: other }), 'AccessManagerUnauthorizedCancel', [ - other, - user, - ...this.call, - ]); + beforeEach('setup scheduling', async function () { + this.caller = this.roles.SOME.members[0]; + await this.manager.$_setTargetFunctionRole(this.target.address, selector(method), this.roles.SOME.id); + await this.manager.$_grantRole(this.roles.SOME.id, this.caller, 0, 1); // nonzero execution delay - expect(await this.manager.getSchedule(this.opId)).to.not.be.bignumber.equal('0'); - }); + this.calldata = await this.target.contract.methods[method]().encodeABI(); + this.scheduleIn = time.duration.days(10); // For shouldBehaveLikeSchedulableOperation + }); - it('Can re-schedule after execution', async function () { - await this.schedule(); - await time.increase(executeDelay); - await this.execute(); + shouldBehaveLikeSchedulableOperation({ + scheduled: { + before() { + describe('when caller is the scheduler', function () { + it('succeeds', async function () { + await this.manager.cancel(this.caller, this.target.address, this.calldata, { from: this.caller }); + }); + }); - // reschedule - const { receipt } = await this.schedule(); - expectEvent(receipt, 'OperationScheduled', { - operationId: this.opId, - caller: user, - target: this.call[0], - data: this.call[1], - }); - }); + describe('when caller is an admin', function () { + it('succeeds', async function () { + await this.manager.cancel(this.caller, this.target.address, this.calldata, { + from: this.roles.ADMIN.members[0], + }); + }); + }); - it('Can re-schedule after cancel', async function () { - await this.schedule(); - await this.cancel(); + describe('when caller is the role guardian', function () { + it('succeeds', async function () { + await this.manager.cancel(this.caller, this.target.address, this.calldata, { + from: this.roles.SOME_GUARDIAN.members[0], + }); + }); + }); - // reschedule - const { receipt } = await this.schedule(); - expectEvent(receipt, 'OperationScheduled', { - operationId: this.opId, - caller: user, - target: this.call[0], - data: this.call[1], + describe('when caller is any other account', function () { + it('reverts as AccessManagerUnauthorizedCancel', async function () { + await expectRevertCustomError( + this.manager.cancel(this.caller, this.target.address, this.calldata, { from: other }), + 'AccessManagerUnauthorizedCancel', + [other, this.caller, this.target.address, selector(method)], + ); + }); + }); + }, + after() { + it('succeeds', async function () { + await this.manager.cancel(this.caller, this.target.address, this.calldata, { from: this.caller }); + }); + }, + expired() { + it('succeeds', async function () { + await this.manager.cancel(this.caller, this.target.address, this.calldata, { from: this.caller }); + }); + }, + }, + notScheduled() { + it('reverts as AccessManagerNotScheduled', async function () { + await expectRevertCustomError( + this.manager.cancel(this.caller, this.target.address, this.calldata), + 'AccessManagerNotScheduled', + [this.operationId], + ); }); + }, + }); + + it('cancels an operation and resets schedule', async function () { + const { operationId } = await scheduleOperation(this.manager, { + caller: this.caller, + target: this.target.address, + calldata: this.calldata, + delay: this.scheduleIn, }); + const { receipt } = await this.manager.cancel(this.caller, this.target.address, this.calldata, { + from: this.caller, + }); + expectEvent(receipt, 'OperationCanceled', { + operationId, + nonce: '1', + }); + expect(await this.manager.getSchedule(operationId)).to.be.bignumber.eq('0'); }); }); @@ -1095,7 +2657,11 @@ contract('AccessManager', function (accounts) { describe('function is open to public role', function () { beforeEach(async function () { - await this.manager.$_setTargetFunctionRole(this.ownable.address, selector('$_checkOwner()'), ROLES.PUBLIC); + await this.manager.$_setTargetFunctionRole( + this.ownable.address, + selector('$_checkOwner()'), + this.roles.PUBLIC.id, + ); }); it('directly call: reverts', async function () { @@ -1114,50 +2680,4 @@ contract('AccessManager', function (accounts) { }); }); }); - - describe('authority update', function () { - beforeEach(async function () { - this.newManager = await AccessManager.new(admin); - this.target = await AccessManagedTarget.new(this.manager.address); - }); - - it('admin can change authority', async function () { - expect(await this.target.authority()).to.be.equal(this.manager.address); - - const { tx } = await this.manager.updateAuthority(this.target.address, this.newManager.address, { from: admin }); - await expectEvent.inTransaction(tx, this.target, 'AuthorityUpdated', { authority: this.newManager.address }); - - expect(await this.target.authority()).to.be.equal(this.newManager.address); - }); - - it('cannot set an address without code as the authority', async function () { - await expectRevertCustomError( - this.manager.updateAuthority(this.target.address, user, { from: admin }), - 'AccessManagedInvalidAuthority', - [user], - ); - }); - - it('updateAuthority is restricted on manager', async function () { - await expectRevertCustomError( - this.manager.updateAuthority(this.target.address, this.newManager.address, { from: other }), - 'AccessManagerUnauthorizedAccount', - [other, ROLES.ADMIN], - ); - }); - - it('setAuthority is restricted on AccessManaged', async function () { - await expectRevertCustomError( - this.target.setAuthority(this.newManager.address, { from: admin }), - 'AccessManagedUnauthorized', - [admin], - ); - }); - }); - - // TODO: - // - check opening/closing a contract - // - check updating the contract delay - // - check the delay applies to admin function - describe.skip('contract modes', function () {}); }); diff --git a/packages/foundry/lib/openzeppelin-contracts/test/access/manager/AuthorityUtils.test.js b/packages/foundry/lib/openzeppelin-contracts/test/access/manager/AuthorityUtils.test.js new file mode 100644 index 0000000..346be03 --- /dev/null +++ b/packages/foundry/lib/openzeppelin-contracts/test/access/manager/AuthorityUtils.test.js @@ -0,0 +1,91 @@ +require('@openzeppelin/test-helpers'); + +const AuthorityUtils = artifacts.require('$AuthorityUtils'); +const NotAuthorityMock = artifacts.require('NotAuthorityMock'); +const AuthorityNoDelayMock = artifacts.require('AuthorityNoDelayMock'); +const AuthorityDelayMock = artifacts.require('AuthorityDelayMock'); +const AuthorityNoResponse = artifacts.require('AuthorityNoResponse'); + +contract('AuthorityUtils', function (accounts) { + const [user, other] = accounts; + + beforeEach(async function () { + this.mock = await AuthorityUtils.new(); + }); + + describe('canCallWithDelay', function () { + describe('when authority does not have a canCall function', function () { + beforeEach(async function () { + this.authority = await NotAuthorityMock.new(); + }); + + it('returns (immediate = 0, delay = 0)', async function () { + const { immediate, delay } = await this.mock.$canCallWithDelay( + this.authority.address, + user, + other, + '0x12345678', + ); + expect(immediate).to.equal(false); + expect(delay).to.be.bignumber.equal('0'); + }); + }); + + describe('when authority has no delay', function () { + beforeEach(async function () { + this.authority = await AuthorityNoDelayMock.new(); + this.immediate = true; + await this.authority._setImmediate(this.immediate); + }); + + it('returns (immediate, delay = 0)', async function () { + const { immediate, delay } = await this.mock.$canCallWithDelay( + this.authority.address, + user, + other, + '0x12345678', + ); + expect(immediate).to.equal(this.immediate); + expect(delay).to.be.bignumber.equal('0'); + }); + }); + + describe('when authority replies with a delay', function () { + beforeEach(async function () { + this.authority = await AuthorityDelayMock.new(); + this.immediate = true; + this.delay = web3.utils.toBN(42); + await this.authority._setImmediate(this.immediate); + await this.authority._setDelay(this.delay); + }); + + it('returns (immediate, delay)', async function () { + const { immediate, delay } = await this.mock.$canCallWithDelay( + this.authority.address, + user, + other, + '0x12345678', + ); + expect(immediate).to.equal(this.immediate); + expect(delay).to.be.bignumber.equal(this.delay); + }); + }); + + describe('when authority replies with empty data', function () { + beforeEach(async function () { + this.authority = await AuthorityNoResponse.new(); + }); + + it('returns (immediate = 0, delay = 0)', async function () { + const { immediate, delay } = await this.mock.$canCallWithDelay( + this.authority.address, + user, + other, + '0x12345678', + ); + expect(immediate).to.equal(false); + expect(delay).to.be.bignumber.equal('0'); + }); + }); + }); +}); diff --git a/packages/foundry/lib/openzeppelin-contracts/test/governance/extensions/GovernorTimelockAccess.test.js b/packages/foundry/lib/openzeppelin-contracts/test/governance/extensions/GovernorTimelockAccess.test.js index 9734a2f..68df99e 100644 --- a/packages/foundry/lib/openzeppelin-contracts/test/governance/extensions/GovernorTimelockAccess.test.js +++ b/packages/foundry/lib/openzeppelin-contracts/test/governance/extensions/GovernorTimelockAccess.test.js @@ -1,4 +1,4 @@ -const { expectEvent } = require('@openzeppelin/test-helpers'); +const { expectEvent, time } = require('@openzeppelin/test-helpers'); const { expect } = require('chai'); const Enums = require('../../helpers/enums'); @@ -12,7 +12,7 @@ const Governor = artifacts.require('$GovernorTimelockAccessMock'); const AccessManagedTarget = artifacts.require('$AccessManagedTarget'); const TOKENS = [ - // { Token: artifacts.require('$ERC20Votes'), mode: 'blocknumber' }, + { Token: artifacts.require('$ERC20Votes'), mode: 'blocknumber' }, { Token: artifacts.require('$ERC20VotesTimestampMock'), mode: 'timestamp' }, ]; @@ -20,7 +20,7 @@ const hashOperation = (caller, target, data) => web3.utils.keccak256(web3.eth.abi.encodeParameters(['address', 'address', 'bytes'], [caller, target, data])); contract('GovernorTimelockAccess', function (accounts) { - const [admin, voter1, voter2, voter3, voter4] = accounts; + const [admin, voter1, voter2, voter3, voter4, other] = accounts; const name = 'OZ-Governor'; const version = '1'; @@ -112,6 +112,139 @@ contract('GovernorTimelockAccess', function (accounts) { expect(await this.mock.accessManager()).to.be.equal(this.manager.address); }); + it('sets base delay (seconds)', async function () { + const baseDelay = time.duration.hours(10); + + // Only through governance + await expectRevertCustomError( + this.mock.setBaseDelaySeconds(baseDelay, { from: voter1 }), + 'GovernorOnlyExecutor', + [voter1], + ); + + this.proposal = await this.helper.setProposal( + [ + { + target: this.mock.address, + value: '0', + data: this.mock.contract.methods.setBaseDelaySeconds(baseDelay).encodeABI(), + }, + ], + 'descr', + ); + + await this.helper.propose(); + await this.helper.waitForSnapshot(); + await this.helper.vote({ support: Enums.VoteType.For }, { from: voter1 }); + await this.helper.waitForDeadline(); + const receipt = await this.helper.execute(); + + expectEvent(receipt, 'BaseDelaySet', { + oldBaseDelaySeconds: '0', + newBaseDelaySeconds: baseDelay, + }); + + expect(await this.mock.baseDelaySeconds()).to.be.bignumber.eq(baseDelay); + }); + + it('sets access manager ignored', async function () { + const selectors = ['0x12345678', '0x87654321', '0xabcdef01']; + + // Only through governance + await expectRevertCustomError( + this.mock.setAccessManagerIgnored(other, selectors, true, { from: voter1 }), + 'GovernorOnlyExecutor', + [voter1], + ); + + // Ignore + const helperIgnore = new GovernorHelper(this.mock, mode); + await helperIgnore.setProposal( + [ + { + target: this.mock.address, + value: '0', + data: this.mock.contract.methods.setAccessManagerIgnored(other, selectors, true).encodeABI(), + }, + ], + 'descr', + ); + + await helperIgnore.propose(); + await helperIgnore.waitForSnapshot(); + await helperIgnore.vote({ support: Enums.VoteType.For }, { from: voter1 }); + await helperIgnore.waitForDeadline(); + const ignoreReceipt = await helperIgnore.execute(); + + for (const selector of selectors) { + expectEvent(ignoreReceipt, 'AccessManagerIgnoredSet', { + target: other, + selector, + ignored: true, + }); + expect(await this.mock.isAccessManagerIgnored(other, selector)).to.be.true; + } + + // Unignore + const helperUnignore = new GovernorHelper(this.mock, mode); + await helperUnignore.setProposal( + [ + { + target: this.mock.address, + value: '0', + data: this.mock.contract.methods.setAccessManagerIgnored(other, selectors, false).encodeABI(), + }, + ], + 'descr', + ); + + await helperUnignore.propose(); + await helperUnignore.waitForSnapshot(); + await helperUnignore.vote({ support: Enums.VoteType.For }, { from: voter1 }); + await helperUnignore.waitForDeadline(); + const unignoreReceipt = await helperUnignore.execute(); + + for (const selector of selectors) { + expectEvent(unignoreReceipt, 'AccessManagerIgnoredSet', { + target: other, + selector, + ignored: false, + }); + expect(await this.mock.isAccessManagerIgnored(other, selector)).to.be.false; + } + }); + + it('sets access manager ignored when target is the governor', async function () { + const other = this.mock.address; + const selectors = ['0x12345678', '0x87654321', '0xabcdef01']; + + await this.helper.setProposal( + [ + { + target: this.mock.address, + value: '0', + data: this.mock.contract.methods.setAccessManagerIgnored(other, selectors, true).encodeABI(), + }, + ], + 'descr', + ); + + await this.helper.propose(); + await this.helper.waitForSnapshot(); + await this.helper.vote({ support: Enums.VoteType.For }, { from: voter1 }); + await this.helper.waitForDeadline(); + const receipt = await this.helper.execute(); + + for (const selector of selectors) { + expectEvent(receipt, 'AccessManagerIgnoredSet', { + target: other, + selector, + ignored: true, + }); + expect(await this.mock.isAccessManagerIgnored(other, selector)).to.be.true; + } + }); + describe('base delay only', function () { for (const [delay, queue] of [ [0, true], @@ -124,10 +257,15 @@ contract('GovernorTimelockAccess', function (accounts) { this.proposal = await this.helper.setProposal([this.unrestricted.operation], 'descr'); await this.helper.propose(); + const { delay: planDelay, indirect, withDelay } = await this.mock.proposalExecutionPlan(this.proposal.id); + expect(planDelay).to.be.bignumber.eq(web3.utils.toBN(delay)); + expect(indirect).to.deep.eq([false]); + expect(withDelay).to.deep.eq([false]); + await this.helper.waitForSnapshot(); await this.helper.vote({ support: Enums.VoteType.For }, { from: voter1 }); await this.helper.waitForDeadline(); - if (queue) { + if (await this.mock.proposalNeedsQueuing(this.proposal.id)) { const txQueue = await this.helper.queue(); expectEvent(txQueue, 'ProposalQueued', { proposalId: this.proposal.id }); } @@ -141,6 +279,82 @@ contract('GovernorTimelockAccess', function (accounts) { } }); + it('reverts when an operation is executed before eta', async function () { + const delay = time.duration.hours(2); + await this.mock.$_setBaseDelaySeconds(delay); + + this.proposal = await this.helper.setProposal([this.unrestricted.operation], 'descr'); + + await this.helper.propose(); + expect(await this.mock.proposalNeedsQueuing(this.proposal.id)).to.be.eq(true); + const { delay: planDelay, indirect, withDelay } = await this.mock.proposalExecutionPlan(this.proposal.id); + expect(planDelay).to.be.bignumber.eq(web3.utils.toBN(delay)); + expect(indirect).to.deep.eq([false]); + expect(withDelay).to.deep.eq([false]); + + await this.helper.waitForSnapshot(); + await this.helper.vote({ support: Enums.VoteType.For }, { from: voter1 }); + await this.helper.waitForDeadline(); + await this.helper.queue(); + await expectRevertCustomError(this.helper.execute(), 'GovernorUnmetDelay', [ + this.proposal.id, + await this.mock.proposalEta(this.proposal.id), + ]); + }); + + it('reverts with a proposal including multiple operations but one of those was cancelled in the manager', async function () { + const delay = time.duration.hours(2); + const roleId = '1'; + + await this.manager.setTargetFunctionRole(this.receiver.address, [this.restricted.selector], roleId, { + from: admin, + }); + await this.manager.grantRole(roleId, this.mock.address, delay, { from: admin }); + + // Set proposals + const original = new GovernorHelper(this.mock, mode); + await original.setProposal([this.restricted.operation, this.unrestricted.operation], 'descr'); + + // Go through all the governance process + await original.propose(); + expect(await this.mock.proposalNeedsQueuing(original.currentProposal.id)).to.be.eq(true); + const { + delay: planDelay, + indirect, + withDelay, + } = await this.mock.proposalExecutionPlan(original.currentProposal.id); + expect(planDelay).to.be.bignumber.eq(web3.utils.toBN(delay)); + expect(indirect).to.deep.eq([true, false]); + expect(withDelay).to.deep.eq([true, false]); + await original.waitForSnapshot(); + await original.vote({ support: Enums.VoteType.For }, { from: voter1 }); + await original.waitForDeadline(); + await original.queue(); + await original.waitForEta(); + + // Suddenly cancel one of the proposed operations in the manager + await this.manager.cancel(this.mock.address, this.restricted.operation.target, this.restricted.operation.data, { + from: admin, + }); + + // Reschedule the same operation in a different proposal to avoid "AccessManagerNotScheduled" error + const rescheduled = new GovernorHelper(this.mock, mode); + await rescheduled.setProposal([this.restricted.operation], 'descr'); + await rescheduled.propose(); + await rescheduled.waitForSnapshot(); + await rescheduled.vote({ support: Enums.VoteType.For }, { from: voter1 }); + await rescheduled.waitForDeadline(); + await rescheduled.queue(); // This will schedule it again in the manager + await rescheduled.waitForEta(); + + // Attempt to execute + await expectRevertCustomError(original.execute(), 'GovernorMismatchedNonce', [ + original.currentProposal.id, + 1, + 2, + ]); + }); + it('single operation with access manager delay', async function () { const delay = 1000; const roleId = '1'; @@ -153,6 +367,12 @@ contract('GovernorTimelockAccess', function (accounts) { this.proposal = await this.helper.setProposal([this.restricted.operation], 'descr'); await this.helper.propose(); + expect(await this.mock.proposalNeedsQueuing(this.proposal.id)).to.be.eq(true); + const { delay: planDelay, indirect, withDelay } = await this.mock.proposalExecutionPlan(this.proposal.id); + expect(planDelay).to.be.bignumber.eq(web3.utils.toBN(delay)); + expect(indirect).to.deep.eq([true]); + expect(withDelay).to.deep.eq([true]); + await this.helper.waitForSnapshot(); await this.helper.vote({ support: Enums.VoteType.For }, { from: voter1 }); await this.helper.waitForDeadline(); @@ -197,6 +417,12 @@ contract('GovernorTimelockAccess', function (accounts) { ); await this.helper.propose(); + expect(await this.mock.proposalNeedsQueuing(this.proposal.id)).to.be.eq(true); + const { delay: planDelay, indirect, withDelay } = await this.mock.proposalExecutionPlan(this.proposal.id); + expect(planDelay).to.be.bignumber.eq(web3.utils.toBN(baseDelay)); + expect(indirect).to.deep.eq([true, false, false]); + expect(withDelay).to.deep.eq([true, false, false]); + await this.helper.waitForSnapshot(); await this.helper.vote({ support: Enums.VoteType.For }, { from: voter1 }); await this.helper.waitForDeadline(); @@ -235,10 +461,16 @@ contract('GovernorTimelockAccess', function (accounts) { await this.manager.grantRole(roleId, this.mock.address, delay, { from: admin }); }); - it('cancellation after queue (internal)', async function () { + it('cancels restricted with delay after queue (internal)', async function () { this.proposal = await this.helper.setProposal([this.restricted.operation], 'descr'); await this.helper.propose(); + expect(await this.mock.proposalNeedsQueuing(this.proposal.id)).to.be.eq(true); + const { delay: planDelay, indirect, withDelay } = await this.mock.proposalExecutionPlan(this.proposal.id); + expect(planDelay).to.be.bignumber.eq(web3.utils.toBN(delay)); + expect(indirect).to.deep.eq([true]); + expect(withDelay).to.deep.eq([true]); + await this.helper.waitForSnapshot(); await this.helper.vote({ support: Enums.VoteType.For }, { from: voter1 }); await this.helper.waitForDeadline(); @@ -259,7 +491,114 @@ contract('GovernorTimelockAccess', function (accounts) { ]); }); - it('cancel calls already canceled by guardian', async function () { + it('cancels restricted with queueing if the same operation is part of a more recent proposal (internal)', async function () { + // Set proposals + const original = new GovernorHelper(this.mock, mode); + await original.setProposal([this.restricted.operation], 'descr'); + + // Go through all the governance process + await original.propose(); + expect(await this.mock.proposalNeedsQueuing(original.currentProposal.id)).to.be.eq(true); + const { + delay: planDelay, + indirect, + withDelay, + } = await this.mock.proposalExecutionPlan(original.currentProposal.id); + expect(planDelay).to.be.bignumber.eq(web3.utils.toBN(delay)); + expect(indirect).to.deep.eq([true]); + expect(withDelay).to.deep.eq([true]); + await original.waitForSnapshot(); + await original.vote({ support: Enums.VoteType.For }, { from: voter1 }); + await original.waitForDeadline(); + await original.queue(); + + // Cancel the operation in the manager + await this.manager.cancel( + this.mock.address, + this.restricted.operation.target, + this.restricted.operation.data, + { from: admin }, + ); + + // Another proposal is added with the same operation + const rescheduled = new GovernorHelper(this.mock, mode); + await rescheduled.setProposal([this.restricted.operation], 'another descr'); + + // Queue the new proposal + await rescheduled.propose(); + await rescheduled.waitForSnapshot(); + await rescheduled.vote({ support: Enums.VoteType.For }, { from: voter1 }); + await rescheduled.waitForDeadline(); + await rescheduled.queue(); // This will schedule it again in the manager + + // Cancel + const eta = await this.mock.proposalEta(rescheduled.currentProposal.id); + const txCancel = await original.cancel('internal'); + expectEvent(txCancel, 'ProposalCanceled', { proposalId: original.currentProposal.id }); + + await time.increase(eta); // waitForEta() + await expectRevertCustomError(original.execute(), 'GovernorUnexpectedProposalState', [ + original.currentProposal.id, + Enums.ProposalState.Canceled, + proposalStatesToBitMap([Enums.ProposalState.Succeeded, Enums.ProposalState.Queued]), + ]); + }); + + it('cancels unrestricted with queueing (internal)', async function () { + this.proposal = await this.helper.setProposal([this.unrestricted.operation], 'descr'); + + await this.helper.propose(); + expect(await this.mock.proposalNeedsQueuing(this.proposal.id)).to.be.eq(false); + const { delay: planDelay, indirect, withDelay } = await this.mock.proposalExecutionPlan(this.proposal.id); + expect(planDelay).to.be.bignumber.eq(web3.utils.toBN('0')); + expect(indirect).to.deep.eq([false]); + expect(withDelay).to.deep.eq([false]); + + await this.helper.waitForSnapshot(); + await this.helper.vote({ support: Enums.VoteType.For }, { from: voter1 }); + await this.helper.waitForDeadline(); + await this.helper.queue(); + + const eta = await this.mock.proposalEta(this.proposal.id); + const txCancel = await this.helper.cancel('internal'); + expectEvent(txCancel, 'ProposalCanceled', { proposalId: this.proposal.id }); + + await time.increase(eta); // waitForEta() + await expectRevertCustomError(this.helper.execute(), 'GovernorUnexpectedProposalState', [ + this.proposal.id, + Enums.ProposalState.Canceled, + proposalStatesToBitMap([Enums.ProposalState.Succeeded, Enums.ProposalState.Queued]), + ]); + }); + + it('cancels unrestricted without queueing (internal)', async function () { + this.proposal = await this.helper.setProposal([this.unrestricted.operation], 'descr'); + + await this.helper.propose(); + expect(await this.mock.proposalNeedsQueuing(this.proposal.id)).to.be.eq(false); + const { delay: planDelay, indirect, withDelay } = await this.mock.proposalExecutionPlan(this.proposal.id); + expect(planDelay).to.be.bignumber.eq(web3.utils.toBN('0')); + expect(indirect).to.deep.eq([false]); + expect(withDelay).to.deep.eq([false]); + + await this.helper.waitForSnapshot(); + await this.helper.vote({ support: Enums.VoteType.For }, { from: voter1 }); + await this.helper.waitForDeadline(); + // await this.helper.queue(); + + // const eta = await this.mock.proposalEta(this.proposal.id); + const txCancel = await this.helper.cancel('internal'); + expectEvent(txCancel, 'ProposalCanceled', { proposalId: this.proposal.id }); + + // await time.increase(eta); // waitForEta() + await expectRevertCustomError(this.helper.execute(), 'GovernorUnexpectedProposalState', [ + this.proposal.id, + Enums.ProposalState.Canceled, + proposalStatesToBitMap([Enums.ProposalState.Succeeded, Enums.ProposalState.Queued]), + ]); + }); + + it('cancels calls already canceled by guardian', async function () { const operationA = { target: this.receiver.address, data: this.restricted.selector + '00' }; const operationB = { target: this.receiver.address, data: this.restricted.selector + '01' }; const operationC = { target: this.receiver.address, data: this.restricted.selector + '02' }; @@ -353,6 +692,12 @@ contract('GovernorTimelockAccess', function (accounts) { ); await this.helper.propose(); + expect(await this.mock.proposalNeedsQueuing(this.proposal.id)).to.be.eq(false); + const { delay: planDelay, indirect, withDelay } = await this.mock.proposalExecutionPlan(this.proposal.id); + expect(planDelay).to.be.bignumber.eq(web3.utils.toBN('0')); + expect(indirect).to.deep.eq([]); // Governor operations ignore access manager + expect(withDelay).to.deep.eq([]); // Governor operations ignore access manager + await this.helper.waitForSnapshot(); await this.helper.vote({ support: Enums.VoteType.For }, { from: voter1 }); await this.helper.waitForDeadline(); @@ -393,8 +738,14 @@ contract('GovernorTimelockAccess', function (accounts) { await this.manager.setTargetFunctionRole(target, [selector], roleId, { from: admin }); await this.manager.grantRole(roleId, this.mock.address, 0, { from: admin }); - await this.helper.setProposal([{ target, data, value: '0' }], '1'); + const proposal = await this.helper.setProposal([{ target, data, value: '0' }], '1'); await this.helper.propose(); + expect(await this.mock.proposalNeedsQueuing(this.proposal.id)).to.be.eq(false); + const plan = await this.mock.proposalExecutionPlan(proposal.id); + expect(plan.delay).to.be.bignumber.eq(web3.utils.toBN('0')); + expect(plan.indirect).to.deep.eq([true]); + expect(plan.withDelay).to.deep.eq([false]); + await this.helper.waitForSnapshot(); await this.helper.vote({ support: Enums.VoteType.For }, { from: voter1 }); await this.helper.waitForDeadline(); @@ -406,8 +757,14 @@ contract('GovernorTimelockAccess', function (accounts) { await this.mock.$_setAccessManagerIgnored(target, selector, true); - await this.helper.setProposal([{ target, data, value: '0' }], '2'); + const proposalIgnored = await this.helper.setProposal([{ target, data, value: '0' }], '2'); await this.helper.propose(); + expect(await this.mock.proposalNeedsQueuing(this.proposal.id)).to.be.eq(false); + const planIgnored = await this.mock.proposalExecutionPlan(proposalIgnored.id); + expect(planIgnored.delay).to.be.bignumber.eq(web3.utils.toBN('0')); + expect(planIgnored.indirect).to.deep.eq([false]); + expect(planIgnored.withDelay).to.deep.eq([false]); + await this.helper.waitForSnapshot(); await this.helper.vote({ support: Enums.VoteType.For }, { from: voter1 }); await this.helper.waitForDeadline(); diff --git a/packages/foundry/lib/openzeppelin-contracts/test/helpers/access-manager.js b/packages/foundry/lib/openzeppelin-contracts/test/helpers/access-manager.js new file mode 100644 index 0000000..7dfc4c3 --- /dev/null +++ b/packages/foundry/lib/openzeppelin-contracts/test/helpers/access-manager.js @@ -0,0 +1,69 @@ +const { time } = require('@openzeppelin/test-helpers'); +const { MAX_UINT64 } = require('./constants'); +const { artifacts } = require('hardhat'); + +function buildBaseRoles() { + const roles = { + ADMIN: { + id: web3.utils.toBN(0), + }, + SOME_ADMIN: { + id: web3.utils.toBN(17), + }, + SOME_GUARDIAN: { + id: web3.utils.toBN(35), + }, + SOME: { + id: web3.utils.toBN(42), + }, + PUBLIC: { + id: MAX_UINT64, + }, + }; + + // Names + Object.entries(roles).forEach(([name, role]) => (role.name = name)); + + // Defaults + for (const role of Object.keys(roles)) { + roles[role].admin = roles.ADMIN; + roles[role].guardian = roles.ADMIN; + } + + // Admins + roles.SOME.admin = roles.SOME_ADMIN; + + // Guardians + roles.SOME.guardian = roles.SOME_GUARDIAN; + + return roles; +} + +const formatAccess = access => [access[0], access[1].toString()]; + +const MINSETBACK = time.duration.days(5); +const EXPIRATION = time.duration.weeks(1); + +let EXECUTION_ID_STORAGE_SLOT = 3n; +let CONSUMING_SCHEDULE_STORAGE_SLOT = 0n; +try { + // Try to get the artifact paths, will throw if it doesn't exist + artifacts._getArtifactPathSync('AccessManagerUpgradeable'); + artifacts._getArtifactPathSync('AccessManagedUpgradeable'); + + // ERC-7201 namespace location for AccessManager + EXECUTION_ID_STORAGE_SLOT += 0x40c6c8c28789853c7efd823ab20824bbd71718a8a5915e855f6f288c9a26ad00n; + // ERC-7201 namespace location for AccessManaged + CONSUMING_SCHEDULE_STORAGE_SLOT += 0xf3177357ab46d8af007ab3fdb9af81da189e1068fefdc0073dca88a2cab40a00n; +} catch (_) { + // eslint-disable-next-line no-empty +} + +module.exports = { + buildBaseRoles, + formatAccess, + MINSETBACK, + EXPIRATION, + EXECUTION_ID_STORAGE_SLOT, + CONSUMING_SCHEDULE_STORAGE_SLOT, +}; diff --git a/packages/foundry/lib/openzeppelin-contracts/test/metatx/ERC2771Context.test.js b/packages/foundry/lib/openzeppelin-contracts/test/metatx/ERC2771Context.test.js index b0ebccc..b19e941 100644 --- a/packages/foundry/lib/openzeppelin-contracts/test/metatx/ERC2771Context.test.js +++ b/packages/foundry/lib/openzeppelin-contracts/test/metatx/ERC2771Context.test.js @@ -13,7 +13,7 @@ const ContextMockCaller = artifacts.require('ContextMockCaller'); const { shouldBehaveLikeRegularContext } = require('../utils/Context.behavior'); contract('ERC2771Context', function (accounts) { - const [, trustedForwarder] = accounts; + const [, trustedForwarder, other] = accounts; beforeEach(async function () { this.forwarder = await ERC2771Forwarder.new('ERC2771Forwarder'); @@ -131,4 +131,58 @@ contract('ERC2771Context', function (accounts) { await expectEvent(receipt, 'DataShort', { data }); }); }); + + it('multicall poison attack', async function () { + const attacker = Wallet.generate(); + const attackerAddress = attacker.getChecksumAddressString(); + const nonce = await this.forwarder.nonces(attackerAddress); + + const msgSenderCall = web3.eth.abi.encodeFunctionCall( + { + name: 'msgSender', + type: 'function', + inputs: [], + }, + [], + ); + + const data = web3.eth.abi.encodeFunctionCall( + { + name: 'multicall', + type: 'function', + inputs: [ + { + internalType: 'bytes[]', + name: 'data', + type: 'bytes[]', + }, + ], + }, + [[web3.utils.encodePacked({ value: msgSenderCall, type: 'bytes' }, { value: other, type: 'address' })]], + ); + + const req = { + from: attackerAddress, + to: this.recipient.address, + value: '0', + gas: '100000', + data, + nonce: Number(nonce), + deadline: MAX_UINT48, + }; + + req.signature = await ethSigUtil.signTypedMessage(attacker.getPrivateKey(), { + data: { + types: this.types, + domain: this.domain, + primaryType: 'ForwardRequest', + message: req, + }, + }); + + expect(await this.forwarder.verify(req)).to.equal(true); + + const receipt = await this.forwarder.execute(req); + await expectEvent.inTransaction(receipt.tx, ERC2771ContextMock, 'Sender', { sender: attackerAddress }); + }); }); diff --git a/packages/foundry/lib/openzeppelin-contracts/test/metatx/ERC2771Forwarder.test.js b/packages/foundry/lib/openzeppelin-contracts/test/metatx/ERC2771Forwarder.test.js index 209c84b..0e09988 100644 --- a/packages/foundry/lib/openzeppelin-contracts/test/metatx/ERC2771Forwarder.test.js +++ b/packages/foundry/lib/openzeppelin-contracts/test/metatx/ERC2771Forwarder.test.js @@ -16,7 +16,6 @@ contract('ERC2771Forwarder', function (accounts) { from: another, value: web3.utils.toWei('0.5'), data: '0x1742', - deadline: 0xdeadbeef, }; beforeEach(async function () { diff --git a/packages/foundry/lib/openzeppelin-contracts/test/token/ERC20/extensions/ERC4626.test.js b/packages/foundry/lib/openzeppelin-contracts/test/token/ERC20/extensions/ERC4626.test.js index 499cf06..fa66785 100644 --- a/packages/foundry/lib/openzeppelin-contracts/test/token/ERC20/extensions/ERC4626.test.js +++ b/packages/foundry/lib/openzeppelin-contracts/test/token/ERC20/extensions/ERC4626.test.js @@ -88,7 +88,7 @@ contract('ERC4626', function (accounts) { const sharesForDeposit = await vault.previewDeposit(value, { from: holder }); const sharesForReenter = await vault.previewDeposit(reenterValue, { from: holder }); - // Do deposit normally, triggering the _beforeTokenTransfer hook + // Deposit normally, reentering before the internal `_update` const receipt = await vault.deposit(value, holder, { from: holder }); // Main deposit event @@ -170,7 +170,7 @@ contract('ERC4626', function (accounts) { // Price before const sharesBefore = await vault.previewDeposit(value); - // Deposit, triggering the _beforeTokenTransfer hook + // Deposit, reentering before the internal `_update` const receipt = await vault.deposit(value, holder, { from: holder }); // Price is as previewed diff --git a/packages/foundry/lib/solidity-bytes-utils/.gitignore b/packages/foundry/lib/solidity-bytes-utils/.gitignore index 77de008..2308701 100644 --- a/packages/foundry/lib/solidity-bytes-utils/.gitignore +++ b/packages/foundry/lib/solidity-bytes-utils/.gitignore @@ -12,5 +12,5 @@ secrets.json # ================================================ build/* node_modules/* - - +cache/* +out/* \ No newline at end of file diff --git a/packages/foundry/lib/solidity-bytes-utils/README.md b/packages/foundry/lib/solidity-bytes-utils/README.md index 9629c1b..0e5bd34 100644 --- a/packages/foundry/lib/solidity-bytes-utils/README.md +++ b/packages/foundry/lib/solidity-bytes-utils/README.md @@ -1,5 +1,3 @@ -![Codeship Status for GNSPS/solidity-bytes-utils](https://app.codeship.com/projects/45b97080-bc0c-0135-fb75-76c2fb8e249b/status?branch=master) - # Solidity Bytes Arrays Utils Bytes tightly packed arrays' utility library for ethereum contracts written in Solidity. @@ -34,6 +32,9 @@ This made me realize that in permissioned blockchains where gas is also not a li ## _Version Notes_: +* Version `v0.9.0` has a new feature: a new "equal_nonAligned" method that allows for comparing two bytes arrays that are not aligned to 32 bytes. +This is useful for comparing bytes arrays that were created with assembly/Yul or other, non-Solidity compilers that don't pad bytes arrays to 32 bytes. + * Starting from version `v0.8.0` the versioning will change to follow compatible Solidity's compiler versions. This means that now the library will only compile on Solidity versions `>=0.8.0` so, if you need `<0.8.0` support for your project just use `v0.1.2` of the library with: diff --git a/packages/foundry/lib/solidity-bytes-utils/contracts/AssertBytes.sol b/packages/foundry/lib/solidity-bytes-utils/contracts/AssertBytes.sol index 9965677..3751ac2 100644 --- a/packages/foundry/lib/solidity-bytes-utils/contracts/AssertBytes.sol +++ b/packages/foundry/lib/solidity-bytes-utils/contracts/AssertBytes.sol @@ -86,6 +86,103 @@ library AssertBytes { return !returnBool; } + /* + Function: equal_nonAligned(bytes memory, bytes memory) + + Assert that two tightly packed bytes arrays that are not aligned to 32 bytes are equal. + + Params: + A (bytes) - The first bytes. + B (bytes) - The second bytes. + message (string) - A message that is sent if the assertion fails. + + Returns: + result (bool) - The result. + */ + + + function _equal_nonAligned(bytes memory _preBytes, bytes memory _postBytes) internal pure returns (bool) { + bool success = true; + + assembly { + let length := mload(_preBytes) + + // if lengths don't match the arrays are not equal + switch eq(length, mload(_postBytes)) + case 1 { + // cb is a circuit breaker in the for loop since there's + // no said feature for inline assembly loops + // cb = 1 - don't breaker + // cb = 0 - break + let cb := 1 + + let endMinusWord := add(_preBytes, length) + let mc := add(_preBytes, 0x20) + let cc := add(_postBytes, 0x20) + + for { + // the next line is the loop condition: + // while(uint256(mc < endWord) + cb == 2) + } eq(add(lt(mc, endMinusWord), cb), 2) { + mc := add(mc, 0x20) + cc := add(cc, 0x20) + } { + // if any of these checks fails then arrays are not equal + if iszero(eq(mload(mc), mload(cc))) { + // unsuccess: + success := 0 + cb := 0 + } + } + + // Only if still successful + // For <1 word tail bytes + if gt(success, 0) { + // Get the remainder of length/32 + // length % 32 = AND(length, 32 - 1) + let numTailBytes := and(length, 0x1f) + let mcRem := mload(mc) + let ccRem := mload(cc) + for { + let i := 0 + // the next line is the loop condition: + // while(uint256(i < numTailBytes) + cb == 2) + } eq(add(lt(i, numTailBytes), cb), 2) { + i := add(i, 1) + } { + if iszero(eq(byte(i, mcRem), byte(i, ccRem))) { + // unsuccess: + success := 0 + cb := 0 + } + } + } + } + default { + // unsuccess: + success := 0 + } + } + + return success; + } + + function equal_nonAligned(bytes memory _a, bytes memory _b, string memory message) internal returns (bool) { + bool returnBool = _equal_nonAligned(_a, _b); + + _report(returnBool, message); + + return returnBool; + } + + function notEqual_nonAligned(bytes memory _a, bytes memory _b, string memory message) internal returns (bool) { + bool returnBool = _equal_nonAligned(_a, _b); + + _report(!returnBool, message); + + return !returnBool; + } + /* Function: equal(bytes storage, bytes memory) diff --git a/packages/foundry/lib/solidity-bytes-utils/contracts/BytesLib.sol b/packages/foundry/lib/solidity-bytes-utils/contracts/BytesLib.sol index 532897a..13e018c 100644 --- a/packages/foundry/lib/solidity-bytes-utils/contracts/BytesLib.sol +++ b/packages/foundry/lib/solidity-bytes-utils/contracts/BytesLib.sol @@ -436,6 +436,72 @@ library BytesLib { return success; } + function equal_nonAligned(bytes memory _preBytes, bytes memory _postBytes) internal pure returns (bool) { + bool success = true; + + assembly { + let length := mload(_preBytes) + + // if lengths don't match the arrays are not equal + switch eq(length, mload(_postBytes)) + case 1 { + // cb is a circuit breaker in the for loop since there's + // no said feature for inline assembly loops + // cb = 1 - don't breaker + // cb = 0 - break + let cb := 1 + + let endMinusWord := add(_preBytes, length) + let mc := add(_preBytes, 0x20) + let cc := add(_postBytes, 0x20) + + for { + // the next line is the loop condition: + // while(uint256(mc < endWord) + cb == 2) + } eq(add(lt(mc, endMinusWord), cb), 2) { + mc := add(mc, 0x20) + cc := add(cc, 0x20) + } { + // if any of these checks fails then arrays are not equal + if iszero(eq(mload(mc), mload(cc))) { + // unsuccess: + success := 0 + cb := 0 + } + } + + // Only if still successful + // For <1 word tail bytes + if gt(success, 0) { + // Get the remainder of length/32 + // length % 32 = AND(length, 32 - 1) + let numTailBytes := and(length, 0x1f) + let mcRem := mload(mc) + let ccRem := mload(cc) + for { + let i := 0 + // the next line is the loop condition: + // while(uint256(i < numTailBytes) + cb == 2) + } eq(add(lt(i, numTailBytes), cb), 2) { + i := add(i, 1) + } { + if iszero(eq(byte(i, mcRem), byte(i, ccRem))) { + // unsuccess: + success := 0 + cb := 0 + } + } + } + } + default { + // unsuccess: + success := 0 + } + } + + return success; + } + function equalStorage( bytes storage _preBytes, bytes memory _postBytes diff --git a/packages/foundry/lib/solidity-bytes-utils/contracts/Migrations.sol b/packages/foundry/lib/solidity-bytes-utils/contracts/Migrations.sol deleted file mode 100755 index 23883af..0000000 --- a/packages/foundry/lib/solidity-bytes-utils/contracts/Migrations.sol +++ /dev/null @@ -1,27 +0,0 @@ -// SPDX-License-Identifier: Unlicense -pragma solidity >=0.8.0; - - - - -contract Migrations { - address public owner; - uint256 public last_completed_migration; - - modifier restricted() { - if (msg.sender == owner) _; - } - - constructor () { - owner = msg.sender; - } - - function setCompleted(uint256 completed) public restricted { - last_completed_migration = completed; - } - - function upgrade(address new_address) public restricted { - Migrations upgraded = Migrations(new_address); - upgraded.setCompleted(last_completed_migration); - } -} diff --git a/packages/foundry/lib/solidity-bytes-utils/migrations/1_initial_migration.js b/packages/foundry/lib/solidity-bytes-utils/migrations/1_initial_migration.js deleted file mode 100755 index 4d5f3f9..0000000 --- a/packages/foundry/lib/solidity-bytes-utils/migrations/1_initial_migration.js +++ /dev/null @@ -1,5 +0,0 @@ -var Migrations = artifacts.require("./Migrations.sol"); - -module.exports = function(deployer) { - deployer.deploy(Migrations); -}; diff --git a/packages/foundry/lib/solidity-bytes-utils/migrations/2_deploy_contracts.js b/packages/foundry/lib/solidity-bytes-utils/migrations/2_deploy_contracts.js deleted file mode 100755 index 4752b91..0000000 --- a/packages/foundry/lib/solidity-bytes-utils/migrations/2_deploy_contracts.js +++ /dev/null @@ -1,5 +0,0 @@ -var BytesLib = artifacts.require("./BytesLib.sol"); - -module.exports = function(deployer) { - deployer.deploy(BytesLib); -}; diff --git a/packages/foundry/lib/solidity-bytes-utils/package-lock.json b/packages/foundry/lib/solidity-bytes-utils/package-lock.json index e5324b5..01bb404 100644 --- a/packages/foundry/lib/solidity-bytes-utils/package-lock.json +++ b/packages/foundry/lib/solidity-bytes-utils/package-lock.json @@ -1,10935 +1,38 @@ { "name": "solidity-bytes-utils", - "version": "0.1.1", + "version": "0.8.2", "lockfileVersion": 2, "requires": true, "packages": { "": { - "version": "0.1.1", + "name": "solidity-bytes-utils", + "version": "0.8.2", "license": "MIT", "dependencies": { - "@truffle/hdwallet-provider": "latest" - }, - "devDependencies": { - "truffle": "latest" + "ds-test": "github:dapphub/ds-test", + "forge-std": "^1.1.2" } }, - "node_modules/@babel/helper-module-imports": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.10.4.tgz", - "integrity": "sha512-nEQJHqYavI217oD9+s5MUBzk6x1IlvoS9WTPfgG43CbMEeStE0v+r+TucWdx8KFGowPGvyOkDT9+7DHedIDnVw==", - "dependencies": { - "@babel/types": "^7.10.4" - } - }, - "node_modules/@babel/helper-plugin-utils": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz", - "integrity": "sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg==" - }, - "node_modules/@babel/helper-validator-identifier": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.10.4.tgz", - "integrity": "sha512-3U9y+43hz7ZM+rzG24Qe2mufW5KhvFg/NhnNph+i9mgCtdTCtMJuI1TMkrIUiK7Ix4PYlRF9I5dhqaLYA/ADXw==" - }, - "node_modules/@babel/plugin-transform-runtime": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.10.4.tgz", - "integrity": "sha512-8ULlGv8p+Vuxu+kz2Y1dk6MYS2b/Dki+NO6/0ZlfSj5tMalfDL7jI/o/2a+rrWLqSXvnadEqc2WguB4gdQIxZw==", - "dependencies": { - "@babel/helper-module-imports": "^7.10.4", - "@babel/helper-plugin-utils": "^7.10.4", - "resolve": "^1.8.1", - "semver": "^5.5.1" - } - }, - "node_modules/@babel/plugin-transform-runtime/node_modules/semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "bin": { - "semver": "bin/semver" - } - }, - "node_modules/@babel/runtime": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.10.4.tgz", - "integrity": "sha512-UpTN5yUJr9b4EX2CnGNWIvER7Ab83ibv0pcvvHc4UOdrBI5jb8bj+32cCwPX6xu0mt2daFNjYhoi+X7beH0RSw==", - "dependencies": { - "regenerator-runtime": "^0.13.4" - } - }, - "node_modules/@babel/types": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.10.4.tgz", - "integrity": "sha512-UTCFOxC3FsFHb7lkRMVvgLzaRVamXuAs2Tz4wajva4WxtVY82eZeaUBtC2Zt95FU9TiznuC0Zk35tsim8jeVpg==", - "dependencies": { - "@babel/helper-validator-identifier": "^7.10.4", - "lodash": "^4.17.13", - "to-fast-properties": "^2.0.0" - } - }, - "node_modules/@sindresorhus/is": { - "version": "0.14.0", - "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-0.14.0.tgz", - "integrity": "sha512-9NET910DNaIPngYnLLPeg+Ogzqsi9uM4mSboU5y6p8S5DzMTVEsJZrawi+BoDNUVBa2DhJqQYUFvMDfgU062LQ==", - "engines": { - "node": ">=6" - } - }, - "node_modules/@szmarczak/http-timer": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-1.1.2.tgz", - "integrity": "sha512-XIB2XbzHTN6ieIjfIMV9hlVcfPU26s2vafYWQcZHWXHOxiaRZYEDKEwdl129Zyg50+foYV2jCgtrqSA6qNuNSA==", - "dependencies": { - "defer-to-connect": "^1.0.1" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/@truffle/hdwallet-provider": { - "version": "1.0.37", - "resolved": "https://registry.npmjs.org/@truffle/hdwallet-provider/-/hdwallet-provider-1.0.37.tgz", - "integrity": "sha512-LPsMNaBxwpCpDrTgvMGvNtk4c/pDDpZ5AXLrugzK1lVT3SW/DCpjPDgcUckOCNNAx8ktG0PzJbiVFM6Ami92nQ==", - "dependencies": { - "@trufflesuite/web3-provider-engine": "14.0.7", - "any-promise": "^1.3.0", - "bindings": "^1.5.0", - "bip39": "^2.4.2", - "ethereum-protocol": "^1.0.1", - "ethereumjs-tx": "^1.0.0", - "ethereumjs-util": "^6.1.0", - "ethereumjs-wallet": "^0.6.3", - "source-map-support": "^0.5.19", - "web3": "1.2.1" - } - }, - "node_modules/@trufflesuite/web3-provider-engine": { - "version": "14.0.7", - "resolved": "https://registry.npmjs.org/@trufflesuite/web3-provider-engine/-/web3-provider-engine-14.0.7.tgz", - "integrity": "sha512-+OCKZOF1aVCOW9gWIXdK1l/SQnRPVcve56LpSGZQ+LZ6OKT6xVoLNNF+wKVvFxIis1JAZvnVKJFbUYbKEZ5aPQ==", - "dependencies": { - "async": "^2.5.0", - "backoff": "^2.5.0", - "clone": "^2.0.0", - "cross-fetch": "^2.1.0", - "eth-block-tracker": "^4.2.0", - "eth-json-rpc-filters": "^4.0.2", - "eth-json-rpc-infura": "^3.1.0", - "eth-json-rpc-middleware": "^4.1.1", - "eth-sig-util": "^1.4.2", - "ethereumjs-block": "^1.2.2", - "ethereumjs-tx": "^1.2.0", - "ethereumjs-util": "^5.1.5", - "ethereumjs-vm": "^2.3.4", - "json-rpc-error": "^2.0.0", - "json-stable-stringify": "^1.0.1", - "promise-to-callback": "^1.0.0", - "readable-stream": "^2.2.9", - "request": "^2.85.0", - "semaphore": "^1.0.3", - "ws": "^5.1.1", - "xhr": "^2.2.0", - "xtend": "^4.0.1" - } - }, - "node_modules/@trufflesuite/web3-provider-engine/node_modules/ethereumjs-util": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-5.2.0.tgz", - "integrity": "sha512-CJAKdI0wgMbQFLlLRtZKGcy/L6pzVRgelIZqRqNbuVFM3K9VEnyfbcvz0ncWMRNCe4kaHWjwRYQcYMucmwsnWA==", - "dependencies": { - "bn.js": "^4.11.0", - "create-hash": "^1.1.2", - "ethjs-util": "^0.1.3", - "keccak": "^1.0.2", - "rlp": "^2.0.0", - "safe-buffer": "^5.1.1", - "secp256k1": "^3.0.1" - } - }, - "node_modules/@trufflesuite/web3-provider-engine/node_modules/keccak": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/keccak/-/keccak-1.4.0.tgz", - "integrity": "sha512-eZVaCpblK5formjPjeTBik7TAg+pqnDrMHIffSvi9Lh7PQgM1+hSzakUeZFCk9DVVG0dacZJuaz2ntwlzZUIBw==", - "hasInstallScript": true, - "dependencies": { - "bindings": "^1.2.1", - "inherits": "^2.0.3", - "nan": "^2.2.1", - "safe-buffer": "^5.1.0" - }, - "engines": { - "node": ">=4.0.0" - } - }, - "node_modules/@trufflesuite/web3-provider-engine/node_modules/ws": { - "version": "5.2.2", - "resolved": "https://registry.npmjs.org/ws/-/ws-5.2.2.tgz", - "integrity": "sha512-jaHFD6PFv6UgoIVda6qZllptQsMlDEJkTQcybzzXDYM1XO9Y8em691FGMPmM46WGyLU4z9KMgQN+qrux/nhlHA==", - "dependencies": { - "async-limiter": "~1.0.0" - } - }, - "node_modules/@types/bn.js": { - "version": "4.11.6", - "resolved": "https://registry.npmjs.org/@types/bn.js/-/bn.js-4.11.6.tgz", - "integrity": "sha512-pqr857jrp2kPuO9uRjZ3PwnJTjoQy+fcdxvBTvHm6dkmEL9q+hDD/2j/0ELOBPtPnS8LjCX0gI9nbl8lVkadpg==", - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/node": { - "version": "10.17.26", - "resolved": "https://registry.npmjs.org/@types/node/-/node-10.17.26.tgz", - "integrity": "sha512-myMwkO2Cr82kirHY8uknNRHEVtn0wV3DTQfkrjx17jmkstDRZ24gNUdl8AHXVyVclTYI/bNjgTPTAWvWLqXqkw==" - }, - "node_modules/abstract-leveldown": { - "version": "2.6.3", - "resolved": "https://registry.npmjs.org/abstract-leveldown/-/abstract-leveldown-2.6.3.tgz", - "integrity": "sha512-2++wDf/DYqkPR3o5tbfdhF96EfMApo1GpPfzOsR/ZYXdkSmELlvOOEAl9iKkRsktMPHdGjO4rtkBpf2I7TiTeA==", - "dependencies": { - "xtend": "~4.0.0" - } - }, - "node_modules/accepts": { - "version": "1.3.7", - "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.7.tgz", - "integrity": "sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA==", - "dependencies": { - "mime-types": "~2.1.24", - "negotiator": "0.6.2" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/aes-js": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/aes-js/-/aes-js-3.0.0.tgz", - "integrity": "sha1-4h3xCtbCBTKVvLuNq0Cwnb6ofk0=" - }, - "node_modules/ajv": { - "version": "6.12.2", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.2.tgz", - "integrity": "sha512-k+V+hzjm5q/Mr8ef/1Y9goCmlsK4I6Sm74teeyGvFk1XrOsbsKLjEdrvny42CZ+a8sXbk8KWpY/bDwS+FLL2UQ==", - "dependencies": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - } - }, - "node_modules/ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ansi-styles": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", - "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/any-promise": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz", - "integrity": "sha1-q8av7tzqUugJzcA3au0845Y10X8=" - }, - "node_modules/app-module-path": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/app-module-path/-/app-module-path-2.2.0.tgz", - "integrity": "sha1-ZBqlXft9am8KgUHEucCqULbCTdU=", - "dev": true - }, - "node_modules/array-flatten": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", - "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=" - }, - "node_modules/asn1": { - "version": "0.2.4", - "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.4.tgz", - "integrity": "sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg==", - "dependencies": { - "safer-buffer": "~2.1.0" - } - }, - "node_modules/asn1.js": { - "version": "4.10.1", - "resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-4.10.1.tgz", - "integrity": "sha512-p32cOF5q0Zqs9uBiONKYLm6BClCoBCM5O9JfeUSlnQLBTxYdTK+pW+nXflm8UkKd2UYlEbYz5qEi0JuZR9ckSw==", - "dependencies": { - "bn.js": "^4.0.0", - "inherits": "^2.0.1", - "minimalistic-assert": "^1.0.0" - } - }, - "node_modules/assert-plus": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", - "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", - "engines": { - "node": ">=0.8" - } - }, - "node_modules/async": { - "version": "2.6.3", - "resolved": "https://registry.npmjs.org/async/-/async-2.6.3.tgz", - "integrity": "sha512-zflvls11DCy+dQWzTW2dzuilv8Z5X/pjfmZOWba6TNIVDm+2UDaJmXSOXlasHKfNBs8oo3M0aT50fDEWfKZjXg==", - "dependencies": { - "lodash": "^4.17.14" - } - }, - "node_modules/async-eventemitter": { - "version": "0.2.4", - "resolved": "https://registry.npmjs.org/async-eventemitter/-/async-eventemitter-0.2.4.tgz", - "integrity": "sha512-pd20BwL7Yt1zwDFy+8MX8F1+WCT8aQeKj0kQnTrH9WaeRETlRamVhD0JtRPmrV4GfOJ2F9CvdQkZeZhnh2TuHw==", - "dependencies": { - "async": "^2.4.0" - } - }, - "node_modules/async-limiter": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/async-limiter/-/async-limiter-1.0.1.tgz", - "integrity": "sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ==" - }, - "node_modules/asynckit": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=" - }, - "node_modules/await-semaphore": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/await-semaphore/-/await-semaphore-0.1.3.tgz", - "integrity": "sha512-d1W2aNSYcz/sxYO4pMGX9vq65qOTu0P800epMud+6cYYX0QcT7zyqcxec3VWzpgvdXo57UWmVbZpLMjX2m1I7Q==" - }, - "node_modules/aws-sign2": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", - "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=", - "engines": { - "node": "*" - } - }, - "node_modules/aws4": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.10.0.tgz", - "integrity": "sha512-3YDiu347mtVtjpyV3u5kVqQLP242c06zwDOgpeRnybmXlYYsLbtTrUBUm8i8srONt+FWobl5aibnU1030PeeuA==" - }, - "node_modules/babel-code-frame": { - "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-code-frame/-/babel-code-frame-6.26.0.tgz", - "integrity": "sha1-Y/1D99weO7fONZR9uP42mj9Yx0s=", - "dependencies": { - "chalk": "^1.1.3", - "esutils": "^2.0.2", - "js-tokens": "^3.0.2" - } - }, - "node_modules/babel-core": { - "version": "6.26.3", - "resolved": "https://registry.npmjs.org/babel-core/-/babel-core-6.26.3.tgz", - "integrity": "sha512-6jyFLuDmeidKmUEb3NM+/yawG0M2bDZ9Z1qbZP59cyHLz8kYGKYwpJP0UwUKKUiTRNvxfLesJnTedqczP7cTDA==", - "dependencies": { - "babel-code-frame": "^6.26.0", - "babel-generator": "^6.26.0", - "babel-helpers": "^6.24.1", - "babel-messages": "^6.23.0", - "babel-register": "^6.26.0", - "babel-runtime": "^6.26.0", - "babel-template": "^6.26.0", - "babel-traverse": "^6.26.0", - "babel-types": "^6.26.0", - "babylon": "^6.18.0", - "convert-source-map": "^1.5.1", - "debug": "^2.6.9", - "json5": "^0.5.1", - "lodash": "^4.17.4", - "minimatch": "^3.0.4", - "path-is-absolute": "^1.0.1", - "private": "^0.1.8", - "slash": "^1.0.0", - "source-map": "^0.5.7" - } - }, - "node_modules/babel-generator": { - "version": "6.26.1", - "resolved": "https://registry.npmjs.org/babel-generator/-/babel-generator-6.26.1.tgz", - "integrity": "sha512-HyfwY6ApZj7BYTcJURpM5tznulaBvyio7/0d4zFOeMPUmfxkCjHocCuoLa2SAGzBI8AREcH3eP3758F672DppA==", - "dependencies": { - "babel-messages": "^6.23.0", - "babel-runtime": "^6.26.0", - "babel-types": "^6.26.0", - "detect-indent": "^4.0.0", - "jsesc": "^1.3.0", - "lodash": "^4.17.4", - "source-map": "^0.5.7", - "trim-right": "^1.0.1" - } - }, - "node_modules/babel-generator/node_modules/jsesc": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-1.3.0.tgz", - "integrity": "sha1-RsP+yMGJKxKwgz25vHYiF226s0s=", - "bin": { - "jsesc": "bin/jsesc" - } - }, - "node_modules/babel-helper-builder-binary-assignment-operator-visitor": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-helper-builder-binary-assignment-operator-visitor/-/babel-helper-builder-binary-assignment-operator-visitor-6.24.1.tgz", - "integrity": "sha1-zORReto1b0IgvK6KAsKzRvmlZmQ=", - "dependencies": { - "babel-helper-explode-assignable-expression": "^6.24.1", - "babel-runtime": "^6.22.0", - "babel-types": "^6.24.1" - } - }, - "node_modules/babel-helper-call-delegate": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-helper-call-delegate/-/babel-helper-call-delegate-6.24.1.tgz", - "integrity": "sha1-7Oaqzdx25Bw0YfiL/Fdb0Nqi340=", - "dependencies": { - "babel-helper-hoist-variables": "^6.24.1", - "babel-runtime": "^6.22.0", - "babel-traverse": "^6.24.1", - "babel-types": "^6.24.1" - } - }, - "node_modules/babel-helper-define-map": { - "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-helper-define-map/-/babel-helper-define-map-6.26.0.tgz", - "integrity": "sha1-pfVtq0GiX5fstJjH66ypgZ+Vvl8=", - "dependencies": { - "babel-helper-function-name": "^6.24.1", - "babel-runtime": "^6.26.0", - "babel-types": "^6.26.0", - "lodash": "^4.17.4" - } - }, - "node_modules/babel-helper-explode-assignable-expression": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-helper-explode-assignable-expression/-/babel-helper-explode-assignable-expression-6.24.1.tgz", - "integrity": "sha1-8luCz33BBDPFX3BZLVdGQArCLKo=", - "dependencies": { - "babel-runtime": "^6.22.0", - "babel-traverse": "^6.24.1", - "babel-types": "^6.24.1" - } - }, - "node_modules/babel-helper-function-name": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-helper-function-name/-/babel-helper-function-name-6.24.1.tgz", - "integrity": "sha1-00dbjAPtmCQqJbSDUasYOZ01gKk=", - "dependencies": { - "babel-helper-get-function-arity": "^6.24.1", - "babel-runtime": "^6.22.0", - "babel-template": "^6.24.1", - "babel-traverse": "^6.24.1", - "babel-types": "^6.24.1" - } - }, - "node_modules/babel-helper-get-function-arity": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-helper-get-function-arity/-/babel-helper-get-function-arity-6.24.1.tgz", - "integrity": "sha1-j3eCqpNAfEHTqlCQj4mwMbG2hT0=", - "dependencies": { - "babel-runtime": "^6.22.0", - "babel-types": "^6.24.1" - } - }, - "node_modules/babel-helper-hoist-variables": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-helper-hoist-variables/-/babel-helper-hoist-variables-6.24.1.tgz", - "integrity": "sha1-HssnaJydJVE+rbyZFKc/VAi+enY=", - "dependencies": { - "babel-runtime": "^6.22.0", - "babel-types": "^6.24.1" - } - }, - "node_modules/babel-helper-optimise-call-expression": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-helper-optimise-call-expression/-/babel-helper-optimise-call-expression-6.24.1.tgz", - "integrity": "sha1-96E0J7qfc/j0+pk8VKl4gtEkQlc=", - "dependencies": { - "babel-runtime": "^6.22.0", - "babel-types": "^6.24.1" - } - }, - "node_modules/babel-helper-regex": { - "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-helper-regex/-/babel-helper-regex-6.26.0.tgz", - "integrity": "sha1-MlxZ+QL4LyS3T6zu0DY5VPZJXnI=", - "dependencies": { - "babel-runtime": "^6.26.0", - "babel-types": "^6.26.0", - "lodash": "^4.17.4" - } - }, - "node_modules/babel-helper-remap-async-to-generator": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-helper-remap-async-to-generator/-/babel-helper-remap-async-to-generator-6.24.1.tgz", - "integrity": "sha1-XsWBgnrXI/7N04HxySg5BnbkVRs=", - "dependencies": { - "babel-helper-function-name": "^6.24.1", - "babel-runtime": "^6.22.0", - "babel-template": "^6.24.1", - "babel-traverse": "^6.24.1", - "babel-types": "^6.24.1" - } - }, - "node_modules/babel-helper-replace-supers": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-helper-replace-supers/-/babel-helper-replace-supers-6.24.1.tgz", - "integrity": "sha1-v22/5Dk40XNpohPKiov3S2qQqxo=", - "dependencies": { - "babel-helper-optimise-call-expression": "^6.24.1", - "babel-messages": "^6.23.0", - "babel-runtime": "^6.22.0", - "babel-template": "^6.24.1", - "babel-traverse": "^6.24.1", - "babel-types": "^6.24.1" - } - }, - "node_modules/babel-helpers": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-helpers/-/babel-helpers-6.24.1.tgz", - "integrity": "sha1-NHHenK7DiOXIUOWX5Yom3fN2ArI=", - "dependencies": { - "babel-runtime": "^6.22.0", - "babel-template": "^6.24.1" - } - }, - "node_modules/babel-messages": { - "version": "6.23.0", - "resolved": "https://registry.npmjs.org/babel-messages/-/babel-messages-6.23.0.tgz", - "integrity": "sha1-8830cDhYA1sqKVHG7F7fbGLyYw4=", - "dependencies": { - "babel-runtime": "^6.22.0" - } - }, - "node_modules/babel-plugin-check-es2015-constants": { - "version": "6.22.0", - "resolved": "https://registry.npmjs.org/babel-plugin-check-es2015-constants/-/babel-plugin-check-es2015-constants-6.22.0.tgz", - "integrity": "sha1-NRV7EBQm/S/9PaP3XH0ekYNbv4o=", - "dependencies": { - "babel-runtime": "^6.22.0" - } - }, - "node_modules/babel-plugin-syntax-async-functions": { - "version": "6.13.0", - "resolved": "https://registry.npmjs.org/babel-plugin-syntax-async-functions/-/babel-plugin-syntax-async-functions-6.13.0.tgz", - "integrity": "sha1-ytnK0RkbWtY0vzCuCHI5HgZHvpU=" - }, - "node_modules/babel-plugin-syntax-exponentiation-operator": { - "version": "6.13.0", - "resolved": "https://registry.npmjs.org/babel-plugin-syntax-exponentiation-operator/-/babel-plugin-syntax-exponentiation-operator-6.13.0.tgz", - "integrity": "sha1-nufoM3KQ2pUoggGmpX9BcDF4MN4=" - }, - "node_modules/babel-plugin-syntax-trailing-function-commas": { - "version": "6.22.0", - "resolved": "https://registry.npmjs.org/babel-plugin-syntax-trailing-function-commas/-/babel-plugin-syntax-trailing-function-commas-6.22.0.tgz", - "integrity": "sha1-ugNgk3+NBuQBgKQ/4NVhb/9TLPM=" - }, - "node_modules/babel-plugin-transform-async-to-generator": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-async-to-generator/-/babel-plugin-transform-async-to-generator-6.24.1.tgz", - "integrity": "sha1-ZTbjeK/2yx1VF6wOQOs+n8jQh2E=", - "dependencies": { - "babel-helper-remap-async-to-generator": "^6.24.1", - "babel-plugin-syntax-async-functions": "^6.8.0", - "babel-runtime": "^6.22.0" - } - }, - "node_modules/babel-plugin-transform-es2015-arrow-functions": { - "version": "6.22.0", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-arrow-functions/-/babel-plugin-transform-es2015-arrow-functions-6.22.0.tgz", - "integrity": "sha1-RSaSy3EdX3ncf4XkQM5BufJE0iE=", - "dependencies": { - "babel-runtime": "^6.22.0" - } - }, - "node_modules/babel-plugin-transform-es2015-block-scoped-functions": { - "version": "6.22.0", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-block-scoped-functions/-/babel-plugin-transform-es2015-block-scoped-functions-6.22.0.tgz", - "integrity": "sha1-u8UbSflk1wy42OC5ToICRs46YUE=", - "dependencies": { - "babel-runtime": "^6.22.0" - } - }, - "node_modules/babel-plugin-transform-es2015-block-scoping": { - "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-block-scoping/-/babel-plugin-transform-es2015-block-scoping-6.26.0.tgz", - "integrity": "sha1-1w9SmcEwjQXBL0Y4E7CgnnOxiV8=", - "dependencies": { - "babel-runtime": "^6.26.0", - "babel-template": "^6.26.0", - "babel-traverse": "^6.26.0", - "babel-types": "^6.26.0", - "lodash": "^4.17.4" - } - }, - "node_modules/babel-plugin-transform-es2015-classes": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-classes/-/babel-plugin-transform-es2015-classes-6.24.1.tgz", - "integrity": "sha1-WkxYpQyclGHlZLSyo7+ryXolhNs=", - "dependencies": { - "babel-helper-define-map": "^6.24.1", - "babel-helper-function-name": "^6.24.1", - "babel-helper-optimise-call-expression": "^6.24.1", - "babel-helper-replace-supers": "^6.24.1", - "babel-messages": "^6.23.0", - "babel-runtime": "^6.22.0", - "babel-template": "^6.24.1", - "babel-traverse": "^6.24.1", - "babel-types": "^6.24.1" - } - }, - "node_modules/babel-plugin-transform-es2015-computed-properties": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-computed-properties/-/babel-plugin-transform-es2015-computed-properties-6.24.1.tgz", - "integrity": "sha1-b+Ko0WiV1WNPTNmZttNICjCBWbM=", - "dependencies": { - "babel-runtime": "^6.22.0", - "babel-template": "^6.24.1" - } - }, - "node_modules/babel-plugin-transform-es2015-destructuring": { - "version": "6.23.0", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-destructuring/-/babel-plugin-transform-es2015-destructuring-6.23.0.tgz", - "integrity": "sha1-mXux8auWf2gtKwh2/jWNYOdlxW0=", - "dependencies": { - "babel-runtime": "^6.22.0" - } - }, - "node_modules/babel-plugin-transform-es2015-duplicate-keys": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-duplicate-keys/-/babel-plugin-transform-es2015-duplicate-keys-6.24.1.tgz", - "integrity": "sha1-c+s9MQypaePvnskcU3QabxV2Qj4=", - "dependencies": { - "babel-runtime": "^6.22.0", - "babel-types": "^6.24.1" - } - }, - "node_modules/babel-plugin-transform-es2015-for-of": { - "version": "6.23.0", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-for-of/-/babel-plugin-transform-es2015-for-of-6.23.0.tgz", - "integrity": "sha1-9HyVsrYT3x0+zC/bdXNiPHUkhpE=", - "dependencies": { - "babel-runtime": "^6.22.0" - } - }, - "node_modules/babel-plugin-transform-es2015-function-name": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-function-name/-/babel-plugin-transform-es2015-function-name-6.24.1.tgz", - "integrity": "sha1-g0yJhTvDaxrw86TF26qU/Y6sqos=", - "dependencies": { - "babel-helper-function-name": "^6.24.1", - "babel-runtime": "^6.22.0", - "babel-types": "^6.24.1" - } - }, - "node_modules/babel-plugin-transform-es2015-literals": { - "version": "6.22.0", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-literals/-/babel-plugin-transform-es2015-literals-6.22.0.tgz", - "integrity": "sha1-T1SgLWzWbPkVKAAZox0xklN3yi4=", - "dependencies": { - "babel-runtime": "^6.22.0" - } - }, - "node_modules/babel-plugin-transform-es2015-modules-amd": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-modules-amd/-/babel-plugin-transform-es2015-modules-amd-6.24.1.tgz", - "integrity": "sha1-Oz5UAXI5hC1tGcMBHEvS8AoA0VQ=", - "dependencies": { - "babel-plugin-transform-es2015-modules-commonjs": "^6.24.1", - "babel-runtime": "^6.22.0", - "babel-template": "^6.24.1" - } - }, - "node_modules/babel-plugin-transform-es2015-modules-commonjs": { - "version": "6.26.2", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-modules-commonjs/-/babel-plugin-transform-es2015-modules-commonjs-6.26.2.tgz", - "integrity": "sha512-CV9ROOHEdrjcwhIaJNBGMBCodN+1cfkwtM1SbUHmvyy35KGT7fohbpOxkE2uLz1o6odKK2Ck/tz47z+VqQfi9Q==", - "dependencies": { - "babel-plugin-transform-strict-mode": "^6.24.1", - "babel-runtime": "^6.26.0", - "babel-template": "^6.26.0", - "babel-types": "^6.26.0" - } - }, - "node_modules/babel-plugin-transform-es2015-modules-systemjs": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-modules-systemjs/-/babel-plugin-transform-es2015-modules-systemjs-6.24.1.tgz", - "integrity": "sha1-/4mhQrkRmpBhlfXxBuzzBdlAfSM=", - "dependencies": { - "babel-helper-hoist-variables": "^6.24.1", - "babel-runtime": "^6.22.0", - "babel-template": "^6.24.1" - } - }, - "node_modules/babel-plugin-transform-es2015-modules-umd": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-modules-umd/-/babel-plugin-transform-es2015-modules-umd-6.24.1.tgz", - "integrity": "sha1-rJl+YoXNGO1hdq22B9YCNErThGg=", - "dependencies": { - "babel-plugin-transform-es2015-modules-amd": "^6.24.1", - "babel-runtime": "^6.22.0", - "babel-template": "^6.24.1" - } - }, - "node_modules/babel-plugin-transform-es2015-object-super": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-object-super/-/babel-plugin-transform-es2015-object-super-6.24.1.tgz", - "integrity": "sha1-JM72muIcuDp/hgPa0CH1cusnj40=", - "dependencies": { - "babel-helper-replace-supers": "^6.24.1", - "babel-runtime": "^6.22.0" - } - }, - "node_modules/babel-plugin-transform-es2015-parameters": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-parameters/-/babel-plugin-transform-es2015-parameters-6.24.1.tgz", - "integrity": "sha1-V6w1GrScrxSpfNE7CfZv3wpiXys=", - "dependencies": { - "babel-helper-call-delegate": "^6.24.1", - "babel-helper-get-function-arity": "^6.24.1", - "babel-runtime": "^6.22.0", - "babel-template": "^6.24.1", - "babel-traverse": "^6.24.1", - "babel-types": "^6.24.1" - } - }, - "node_modules/babel-plugin-transform-es2015-shorthand-properties": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-shorthand-properties/-/babel-plugin-transform-es2015-shorthand-properties-6.24.1.tgz", - "integrity": "sha1-JPh11nIch2YbvZmkYi5R8U3jiqA=", - "dependencies": { - "babel-runtime": "^6.22.0", - "babel-types": "^6.24.1" - } - }, - "node_modules/babel-plugin-transform-es2015-spread": { - "version": "6.22.0", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-spread/-/babel-plugin-transform-es2015-spread-6.22.0.tgz", - "integrity": "sha1-1taKmfia7cRTbIGlQujdnxdG+NE=", - "dependencies": { - "babel-runtime": "^6.22.0" - } - }, - "node_modules/babel-plugin-transform-es2015-sticky-regex": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-sticky-regex/-/babel-plugin-transform-es2015-sticky-regex-6.24.1.tgz", - "integrity": "sha1-AMHNsaynERLN8M9hJsLta0V8zbw=", - "dependencies": { - "babel-helper-regex": "^6.24.1", - "babel-runtime": "^6.22.0", - "babel-types": "^6.24.1" - } - }, - "node_modules/babel-plugin-transform-es2015-template-literals": { - "version": "6.22.0", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-template-literals/-/babel-plugin-transform-es2015-template-literals-6.22.0.tgz", - "integrity": "sha1-qEs0UPfp+PH2g51taH2oS7EjbY0=", - "dependencies": { - "babel-runtime": "^6.22.0" - } - }, - "node_modules/babel-plugin-transform-es2015-typeof-symbol": { - "version": "6.23.0", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-typeof-symbol/-/babel-plugin-transform-es2015-typeof-symbol-6.23.0.tgz", - "integrity": "sha1-3sCfHN3/lLUqxz1QXITfWdzOs3I=", - "dependencies": { - "babel-runtime": "^6.22.0" - } - }, - "node_modules/babel-plugin-transform-es2015-unicode-regex": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-unicode-regex/-/babel-plugin-transform-es2015-unicode-regex-6.24.1.tgz", - "integrity": "sha1-04sS9C6nMj9yk4fxinxa4frrNek=", - "dependencies": { - "babel-helper-regex": "^6.24.1", - "babel-runtime": "^6.22.0", - "regexpu-core": "^2.0.0" - } - }, - "node_modules/babel-plugin-transform-exponentiation-operator": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-exponentiation-operator/-/babel-plugin-transform-exponentiation-operator-6.24.1.tgz", - "integrity": "sha1-KrDJx/MJj6SJB3cruBP+QejeOg4=", - "dependencies": { - "babel-helper-builder-binary-assignment-operator-visitor": "^6.24.1", - "babel-plugin-syntax-exponentiation-operator": "^6.8.0", - "babel-runtime": "^6.22.0" - } - }, - "node_modules/babel-plugin-transform-regenerator": { - "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-regenerator/-/babel-plugin-transform-regenerator-6.26.0.tgz", - "integrity": "sha1-4HA2lvveJ/Cj78rPi03KL3s6jy8=", - "dependencies": { - "regenerator-transform": "^0.10.0" - } - }, - "node_modules/babel-plugin-transform-strict-mode": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-strict-mode/-/babel-plugin-transform-strict-mode-6.24.1.tgz", - "integrity": "sha1-1fr3qleKZbvlkc9e2uBKDGcCB1g=", - "dependencies": { - "babel-runtime": "^6.22.0", - "babel-types": "^6.24.1" - } - }, - "node_modules/babel-preset-env": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/babel-preset-env/-/babel-preset-env-1.7.0.tgz", - "integrity": "sha512-9OR2afuKDneX2/q2EurSftUYM0xGu4O2D9adAhVfADDhrYDaxXV0rBbevVYoY9n6nyX1PmQW/0jtpJvUNr9CHg==", - "dependencies": { - "babel-plugin-check-es2015-constants": "^6.22.0", - "babel-plugin-syntax-trailing-function-commas": "^6.22.0", - "babel-plugin-transform-async-to-generator": "^6.22.0", - "babel-plugin-transform-es2015-arrow-functions": "^6.22.0", - "babel-plugin-transform-es2015-block-scoped-functions": "^6.22.0", - "babel-plugin-transform-es2015-block-scoping": "^6.23.0", - "babel-plugin-transform-es2015-classes": "^6.23.0", - "babel-plugin-transform-es2015-computed-properties": "^6.22.0", - "babel-plugin-transform-es2015-destructuring": "^6.23.0", - "babel-plugin-transform-es2015-duplicate-keys": "^6.22.0", - "babel-plugin-transform-es2015-for-of": "^6.23.0", - "babel-plugin-transform-es2015-function-name": "^6.22.0", - "babel-plugin-transform-es2015-literals": "^6.22.0", - "babel-plugin-transform-es2015-modules-amd": "^6.22.0", - "babel-plugin-transform-es2015-modules-commonjs": "^6.23.0", - "babel-plugin-transform-es2015-modules-systemjs": "^6.23.0", - "babel-plugin-transform-es2015-modules-umd": "^6.23.0", - "babel-plugin-transform-es2015-object-super": "^6.22.0", - "babel-plugin-transform-es2015-parameters": "^6.23.0", - "babel-plugin-transform-es2015-shorthand-properties": "^6.22.0", - "babel-plugin-transform-es2015-spread": "^6.22.0", - "babel-plugin-transform-es2015-sticky-regex": "^6.22.0", - "babel-plugin-transform-es2015-template-literals": "^6.22.0", - "babel-plugin-transform-es2015-typeof-symbol": "^6.23.0", - "babel-plugin-transform-es2015-unicode-regex": "^6.22.0", - "babel-plugin-transform-exponentiation-operator": "^6.22.0", - "babel-plugin-transform-regenerator": "^6.22.0", - "browserslist": "^3.2.6", - "invariant": "^2.2.2", - "semver": "^5.3.0" - } - }, - "node_modules/babel-preset-env/node_modules/semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "bin": { - "semver": "bin/semver" - } - }, - "node_modules/babel-register": { - "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-register/-/babel-register-6.26.0.tgz", - "integrity": "sha1-btAhFz4vy0htestFxgCahW9kcHE=", - "dependencies": { - "babel-core": "^6.26.0", - "babel-runtime": "^6.26.0", - "core-js": "^2.5.0", - "home-or-tmp": "^2.0.0", - "lodash": "^4.17.4", - "mkdirp": "^0.5.1", - "source-map-support": "^0.4.15" - } - }, - "node_modules/babel-register/node_modules/source-map-support": { - "version": "0.4.18", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.4.18.tgz", - "integrity": "sha512-try0/JqxPLF9nOjvSta7tVondkP5dwgyLDjVoyMDlmjugT2lRZ1OfsrYTkCd2hkDnJTKRbO/Rl3orm8vlsUzbA==", - "dependencies": { - "source-map": "^0.5.6" - } - }, - "node_modules/babel-runtime": { - "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz", - "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=", - "dependencies": { - "core-js": "^2.4.0", - "regenerator-runtime": "^0.11.0" - } - }, - "node_modules/babel-runtime/node_modules/regenerator-runtime": { - "version": "0.11.1", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz", - "integrity": "sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg==" - }, - "node_modules/babel-template": { - "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-template/-/babel-template-6.26.0.tgz", - "integrity": "sha1-3gPi0WOWsGn0bdn/+FIfsaDjXgI=", - "dependencies": { - "babel-runtime": "^6.26.0", - "babel-traverse": "^6.26.0", - "babel-types": "^6.26.0", - "babylon": "^6.18.0", - "lodash": "^4.17.4" - } - }, - "node_modules/babel-traverse": { - "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-traverse/-/babel-traverse-6.26.0.tgz", - "integrity": "sha1-RqnL1+3MYsjlwGTi0tjQ9ANXZu4=", - "dependencies": { - "babel-code-frame": "^6.26.0", - "babel-messages": "^6.23.0", - "babel-runtime": "^6.26.0", - "babel-types": "^6.26.0", - "babylon": "^6.18.0", - "debug": "^2.6.8", - "globals": "^9.18.0", - "invariant": "^2.2.2", - "lodash": "^4.17.4" - } - }, - "node_modules/babel-types": { - "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-types/-/babel-types-6.26.0.tgz", - "integrity": "sha1-o7Bz+Uq0nrb6Vc1lInozQ4BjJJc=", - "dependencies": { - "babel-runtime": "^6.26.0", - "esutils": "^2.0.2", - "lodash": "^4.17.4", - "to-fast-properties": "^1.0.3" - } - }, - "node_modules/babel-types/node_modules/to-fast-properties": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-1.0.3.tgz", - "integrity": "sha1-uDVx+k2MJbguIxsG46MFXeTKGkc=", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/babelify": { - "version": "7.3.0", - "resolved": "https://registry.npmjs.org/babelify/-/babelify-7.3.0.tgz", - "integrity": "sha1-qlau3nBn/XvVSWZu4W3ChQh+iOU=", - "dependencies": { - "babel-core": "^6.0.14", - "object-assign": "^4.0.0" - } - }, - "node_modules/babylon": { - "version": "6.18.0", - "resolved": "https://registry.npmjs.org/babylon/-/babylon-6.18.0.tgz", - "integrity": "sha512-q/UEjfGJ2Cm3oKV71DJz9d25TPnq5rhBVL2Q4fA5wcC3jcrdn7+SssEybFIxwAvvP+YCsCYNKughoF33GxgycQ==", - "bin": { - "babylon": "bin/babylon.js" - } - }, - "node_modules/backoff": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/backoff/-/backoff-2.5.0.tgz", - "integrity": "sha1-9hbtqdPktmuMp/ynn2lXIsX44m8=", - "dependencies": { - "precond": "0.2" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/balanced-match": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", - "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=" - }, - "node_modules/base-x": { - "version": "3.0.8", - "resolved": "https://registry.npmjs.org/base-x/-/base-x-3.0.8.tgz", - "integrity": "sha512-Rl/1AWP4J/zRrk54hhlxH4drNxPJXYUaKffODVI53/dAsV4t9fBxyxYKAVPU1XBHxYwOWP9h9H0hM2MVw4YfJA==", - "dependencies": { - "safe-buffer": "^5.0.1" - } - }, - "node_modules/base64-js": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.3.1.tgz", - "integrity": "sha512-mLQ4i2QO1ytvGWFWmcngKO//JXAQueZvwEKtjgQFM4jIK0kU+ytMfplL8j+n5mspOfjHwoAg+9yhb7BwAHm36g==" - }, - "node_modules/bcrypt-pbkdf": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", - "integrity": "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=", - "dependencies": { - "tweetnacl": "^0.14.3" - } - }, - "node_modules/bindings": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/bindings/-/bindings-1.5.0.tgz", - "integrity": "sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==", - "dependencies": { - "file-uri-to-path": "1.0.0" - } - }, - "node_modules/bip39": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/bip39/-/bip39-2.6.0.tgz", - "integrity": "sha512-RrnQRG2EgEoqO24ea+Q/fftuPUZLmrEM3qNhhGsA3PbaXaCW791LTzPuVyx/VprXQcTbPJ3K3UeTna8ZnVl2sg==", - "dependencies": { - "create-hash": "^1.1.0", - "pbkdf2": "^3.0.9", - "randombytes": "^2.0.1", - "safe-buffer": "^5.0.1", - "unorm": "^1.3.3" - } - }, - "node_modules/bip66": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/bip66/-/bip66-1.1.5.tgz", - "integrity": "sha1-AfqHSHhcpwlV1QESF9GzE5lpyiI=", - "dependencies": { - "safe-buffer": "^5.0.1" - } - }, - "node_modules/bl": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/bl/-/bl-1.2.2.tgz", - "integrity": "sha512-e8tQYnZodmebYDWGH7KMRvtzKXaJHx3BbilrgZCfvyLUYdKpK1t5PSPmpkny/SgiTSCnjfLW7v5rlONXVFkQEA==", - "dependencies": { - "readable-stream": "^2.3.5", - "safe-buffer": "^5.1.1" - } - }, - "node_modules/bluebird": { - "version": "3.7.2", - "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz", - "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==" - }, - "node_modules/bn.js": { - "version": "4.11.9", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.9.tgz", - "integrity": "sha512-E6QoYqCKZfgatHTdHzs1RRKP7ip4vvm+EyRUeE2RF0NblwVvb0p6jSVeNTOFxPn26QXN2o6SMfNxKp6kU8zQaw==" - }, - "node_modules/body-parser": { - "version": "1.19.0", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.19.0.tgz", - "integrity": "sha512-dhEPs72UPbDnAQJ9ZKMNTP6ptJaionhP5cBb541nXPlW60Jepo9RV/a4fX4XWW9CuFNK22krhrj1+rgzifNCsw==", - "dependencies": { - "bytes": "3.1.0", - "content-type": "~1.0.4", - "debug": "2.6.9", - "depd": "~1.1.2", - "http-errors": "1.7.2", - "iconv-lite": "0.4.24", - "on-finished": "~2.3.0", - "qs": "6.7.0", - "raw-body": "2.4.0", - "type-is": "~1.6.17" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/brorand": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz", - "integrity": "sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8=" - }, - "node_modules/browser-stdout": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz", - "integrity": "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==", - "dev": true - }, - "node_modules/browserify-aes": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.2.0.tgz", - "integrity": "sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==", - "dependencies": { - "buffer-xor": "^1.0.3", - "cipher-base": "^1.0.0", - "create-hash": "^1.1.0", - "evp_bytestokey": "^1.0.3", - "inherits": "^2.0.1", - "safe-buffer": "^5.0.1" - } - }, - "node_modules/browserify-cipher": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/browserify-cipher/-/browserify-cipher-1.0.1.tgz", - "integrity": "sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w==", - "dependencies": { - "browserify-aes": "^1.0.4", - "browserify-des": "^1.0.0", - "evp_bytestokey": "^1.0.0" - } - }, - "node_modules/browserify-des": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/browserify-des/-/browserify-des-1.0.2.tgz", - "integrity": "sha512-BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A==", - "dependencies": { - "cipher-base": "^1.0.1", - "des.js": "^1.0.0", - "inherits": "^2.0.1", - "safe-buffer": "^5.1.2" - } - }, - "node_modules/browserify-rsa": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/browserify-rsa/-/browserify-rsa-4.0.1.tgz", - "integrity": "sha1-IeCr+vbyApzy+vsTNWenAdQTVSQ=", - "dependencies": { - "bn.js": "^4.1.0", - "randombytes": "^2.0.1" - } - }, - "node_modules/browserify-sign": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/browserify-sign/-/browserify-sign-4.2.0.tgz", - "integrity": "sha512-hEZC1KEeYuoHRqhGhTy6gWrpJA3ZDjFWv0DE61643ZnOXAKJb3u7yWcrU0mMc9SwAqK1n7myPGndkp0dFG7NFA==", - "dependencies": { - "bn.js": "^5.1.1", - "browserify-rsa": "^4.0.1", - "create-hash": "^1.2.0", - "create-hmac": "^1.1.7", - "elliptic": "^6.5.2", - "inherits": "^2.0.4", - "parse-asn1": "^5.1.5", - "readable-stream": "^3.6.0", - "safe-buffer": "^5.2.0" - } - }, - "node_modules/browserify-sign/node_modules/bn.js": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.1.2.tgz", - "integrity": "sha512-40rZaf3bUNKTVYu9sIeeEGOg7g14Yvnj9kH7b50EiwX0Q7A6umbvfI5tvHaOERH0XigqKkfLkFQxzb4e6CIXnA==" - }, - "node_modules/browserify-sign/node_modules/readable-stream": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", - "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", - "dependencies": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/browserslist": { - "version": "3.2.8", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-3.2.8.tgz", - "integrity": "sha512-WHVocJYavUwVgVViC0ORikPHQquXwVh939TaelZ4WDqpWgTX/FsGhl/+P4qBUAGcRvtOgDgC+xftNWWp2RUTAQ==", - "dependencies": { - "caniuse-lite": "^1.0.30000844", - "electron-to-chromium": "^1.3.47" - }, - "bin": { - "browserslist": "cli.js" - } - }, - "node_modules/bs58": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/bs58/-/bs58-4.0.1.tgz", - "integrity": "sha1-vhYedsNU9veIrkBx9j806MTwpCo=", - "dependencies": { - "base-x": "^3.0.2" - } - }, - "node_modules/bs58check": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/bs58check/-/bs58check-2.1.2.tgz", - "integrity": "sha512-0TS1jicxdU09dwJMNZtVAfzPi6Q6QeN0pM1Fkzrjn+XYHvzMKPU3pHVpva+769iNVSfIYWf7LJ6WR+BuuMf8cA==", - "dependencies": { - "bs58": "^4.0.0", - "create-hash": "^1.1.0", - "safe-buffer": "^5.1.2" - } - }, - "node_modules/btoa": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/btoa/-/btoa-1.2.1.tgz", - "integrity": "sha512-SB4/MIGlsiVkMcHmT+pSmIPoNDoHg+7cMzmt3Uxt628MTz2487DKSqK/fuhFBrkuqrYv5UCEnACpF4dTFNKc/g==", - "bin": { - "btoa": "bin/btoa.js" - }, - "engines": { - "node": ">= 0.4.0" - } - }, - "node_modules/buffer": { - "version": "5.6.0", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.6.0.tgz", - "integrity": "sha512-/gDYp/UtU0eA1ys8bOs9J6a+E/KWIY+DZ+Q2WESNUA0jFRsJOc0SNUO6xJ5SGA1xueg3NL65W6s+NY5l9cunuw==", - "dependencies": { - "base64-js": "^1.0.2", - "ieee754": "^1.1.4" - } - }, - "node_modules/buffer-alloc": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/buffer-alloc/-/buffer-alloc-1.2.0.tgz", - "integrity": "sha512-CFsHQgjtW1UChdXgbyJGtnm+O/uLQeZdtbDo8mfUgYXCHSM1wgrVxXm6bSyrUuErEb+4sYVGCzASBRot7zyrow==", - "dependencies": { - "buffer-alloc-unsafe": "^1.1.0", - "buffer-fill": "^1.0.0" - } - }, - "node_modules/buffer-alloc-unsafe": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/buffer-alloc-unsafe/-/buffer-alloc-unsafe-1.1.0.tgz", - "integrity": "sha512-TEM2iMIEQdJ2yjPJoSIsldnleVaAk1oW3DBVUykyOLsEsFmEc9kn+SFFPz+gl54KQNxlDnAwCXosOS9Okx2xAg==" - }, - "node_modules/buffer-crc32": { - "version": "0.2.13", - "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz", - "integrity": "sha1-DTM+PwDqxQqhRUq9MO+MKl2ackI=", - "engines": { - "node": "*" - } - }, - "node_modules/buffer-fill": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/buffer-fill/-/buffer-fill-1.0.0.tgz", - "integrity": "sha1-+PeLdniYiO858gXNY39o5wISKyw=" - }, - "node_modules/buffer-from": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz", - "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==" - }, - "node_modules/buffer-to-arraybuffer": { - "version": "0.0.5", - "resolved": "https://registry.npmjs.org/buffer-to-arraybuffer/-/buffer-to-arraybuffer-0.0.5.tgz", - "integrity": "sha1-YGSkD6dutDxyOrqe+PbhIW0QURo=" - }, - "node_modules/buffer-xor": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/buffer-xor/-/buffer-xor-1.0.3.tgz", - "integrity": "sha1-JuYe0UIvtw3ULm42cp7VHYVf6Nk=" - }, - "node_modules/bytes": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz", - "integrity": "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg==", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/cacheable-request": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-6.1.0.tgz", - "integrity": "sha512-Oj3cAGPCqOZX7Rz64Uny2GYAZNliQSqfbePrgAQ1wKAihYmCUnraBtJtKcGR4xz7wF+LoJC+ssFZvv5BgF9Igg==", - "dependencies": { - "clone-response": "^1.0.2", - "get-stream": "^5.1.0", - "http-cache-semantics": "^4.0.0", - "keyv": "^3.0.0", - "lowercase-keys": "^2.0.0", - "normalize-url": "^4.1.0", - "responselike": "^1.0.2" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/cacheable-request/node_modules/get-stream": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.1.0.tgz", - "integrity": "sha512-EXr1FOzrzTfGeL0gQdeFEvOMm2mzMOglyiOXSTpPC+iAjAKftbr3jpCMWynogwYnM+eSj9sHGc6wjIcDvYiygw==", - "dependencies": { - "pump": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/cacheable-request/node_modules/lowercase-keys": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-2.0.0.tgz", - "integrity": "sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==", - "engines": { - "node": ">=8" - } - }, - "node_modules/caniuse-lite": { - "version": "1.0.30001093", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001093.tgz", - "integrity": "sha512-0+ODNoOjtWD5eS9aaIpf4K0gQqZfILNY4WSNuYzeT1sXni+lMrrVjc0odEobJt6wrODofDZUX8XYi/5y7+xl8g==" - }, - "node_modules/caseless": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", - "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=" - }, - "node_modules/chalk": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", - "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", - "dependencies": { - "ansi-styles": "^2.2.1", - "escape-string-regexp": "^1.0.2", - "has-ansi": "^2.0.0", - "strip-ansi": "^3.0.0", - "supports-color": "^2.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/chalk/node_modules/supports-color": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", - "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/checkpoint-store": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/checkpoint-store/-/checkpoint-store-1.1.0.tgz", - "integrity": "sha1-BOTLUWuRQziTWB5tRgGnjpVS6gY=", - "dependencies": { - "functional-red-black-tree": "^1.0.1" - } - }, - "node_modules/chownr": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", - "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==" - }, - "node_modules/cipher-base": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.4.tgz", - "integrity": "sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==", - "dependencies": { - "inherits": "^2.0.1", - "safe-buffer": "^5.0.1" - } - }, - "node_modules/clone": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/clone/-/clone-2.1.2.tgz", - "integrity": "sha1-G39Ln1kfHo+DZwQBYANFoCiHQ18=", - "engines": { - "node": ">=0.8" - } - }, - "node_modules/clone-response": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/clone-response/-/clone-response-1.0.2.tgz", - "integrity": "sha1-0dyXOSAxTfZ/vrlCI7TuNQI56Ws=", - "dependencies": { - "mimic-response": "^1.0.0" - } - }, - "node_modules/combined-stream": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", - "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", - "dependencies": { - "delayed-stream": "~1.0.0" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/commander": { - "version": "2.8.1", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.8.1.tgz", - "integrity": "sha1-Br42f+v9oMMwqh4qBy09yXYkJdQ=", - "dependencies": { - "graceful-readlink": ">= 1.0.0" - }, - "engines": { - "node": ">= 0.6.x" - } - }, - "node_modules/concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" - }, - "node_modules/concat-stream": { - "version": "1.6.2", - "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz", - "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==", - "engines": [ - "node >= 0.8" - ], - "dependencies": { - "buffer-from": "^1.0.0", - "inherits": "^2.0.3", - "readable-stream": "^2.2.2", - "typedarray": "^0.0.6" - } - }, - "node_modules/content-disposition": { - "version": "0.5.3", - "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.3.tgz", - "integrity": "sha512-ExO0774ikEObIAEV9kDo50o+79VCUdEB6n6lzKgGwupcVeRlhrj3qGAfwq8G6uBJjkqLrhT0qEYFcWng8z1z0g==", - "dependencies": { - "safe-buffer": "5.1.2" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/content-disposition/node_modules/safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" - }, - "node_modules/content-type": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz", - "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/convert-source-map": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.7.0.tgz", - "integrity": "sha512-4FJkXzKXEDB1snCFZlLP4gpC3JILicCpGbzG9f9G7tGqGCzETQ2hWPrcinA9oU4wtf2biUaEH5065UnMeR33oA==", - "dependencies": { - "safe-buffer": "~5.1.1" - } - }, - "node_modules/convert-source-map/node_modules/safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" - }, - "node_modules/cookie": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.0.tgz", - "integrity": "sha512-+Hp8fLp57wnUSt0tY0tHEXh4voZRDnoIrZPqlo3DPiI4y9lwg/jqx+1Om94/W6ZaPDOUbnjOt/99w66zk+l1Xg==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/cookie-signature": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", - "integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw=" - }, - "node_modules/cookiejar": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/cookiejar/-/cookiejar-2.1.2.tgz", - "integrity": "sha512-Mw+adcfzPxcPeI+0WlvRrr/3lGVO0bD75SxX6811cxSh1Wbxx7xZBGK1eVtDf6si8rg2lhnUjsVLMFMfbRIuwA==" - }, - "node_modules/core-js": { - "version": "2.6.11", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.6.11.tgz", - "integrity": "sha512-5wjnpaT/3dV+XB4borEsnAYQchn00XSgTAWKDkEqv+K8KevjbzmofK6hfJ9TZIlpj2N0xQpazy7PiRQiWHqzWg==", - "hasInstallScript": true - }, - "node_modules/core-util-is": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", - "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=" - }, - "node_modules/cors": { - "version": "2.8.5", - "resolved": "https://registry.npmjs.org/cors/-/cors-2.8.5.tgz", - "integrity": "sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==", - "dependencies": { - "object-assign": "^4", - "vary": "^1" - }, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/create-ecdh": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/create-ecdh/-/create-ecdh-4.0.3.tgz", - "integrity": "sha512-GbEHQPMOswGpKXM9kCWVrremUcBmjteUaQ01T9rkKCPDXfUHX0IoP9LpHYo2NPFampa4e+/pFDc3jQdxrxQLaw==", - "dependencies": { - "bn.js": "^4.1.0", - "elliptic": "^6.0.0" - } - }, - "node_modules/create-hash": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/create-hash/-/create-hash-1.2.0.tgz", - "integrity": "sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==", - "dependencies": { - "cipher-base": "^1.0.1", - "inherits": "^2.0.1", - "md5.js": "^1.3.4", - "ripemd160": "^2.0.1", - "sha.js": "^2.4.0" - } - }, - "node_modules/create-hmac": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/create-hmac/-/create-hmac-1.1.7.tgz", - "integrity": "sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==", - "dependencies": { - "cipher-base": "^1.0.3", - "create-hash": "^1.1.0", - "inherits": "^2.0.1", - "ripemd160": "^2.0.0", - "safe-buffer": "^5.0.1", - "sha.js": "^2.4.8" - } - }, - "node_modules/cross-fetch": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-2.2.3.tgz", - "integrity": "sha512-PrWWNH3yL2NYIb/7WF/5vFG3DCQiXDOVf8k3ijatbrtnwNuhMWLC7YF7uqf53tbTFDzHIUD8oITw4Bxt8ST3Nw==", - "dependencies": { - "node-fetch": "2.1.2", - "whatwg-fetch": "2.0.4" - } - }, - "node_modules/crypto-browserify": { - "version": "3.12.0", - "resolved": "https://registry.npmjs.org/crypto-browserify/-/crypto-browserify-3.12.0.tgz", - "integrity": "sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg==", - "dependencies": { - "browserify-cipher": "^1.0.0", - "browserify-sign": "^4.0.0", - "create-ecdh": "^4.0.0", - "create-hash": "^1.1.0", - "create-hmac": "^1.1.0", - "diffie-hellman": "^5.0.0", - "inherits": "^2.0.1", - "pbkdf2": "^3.0.3", - "public-encrypt": "^4.0.0", - "randombytes": "^2.0.0", - "randomfill": "^1.0.3" - }, - "engines": { - "node": "*" - } - }, - "node_modules/d": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/d/-/d-1.0.1.tgz", - "integrity": "sha512-m62ShEObQ39CfralilEQRjH6oAMtNCV1xJyEx5LpRYUVN+EviphDgUc/F3hnYbADmkiNs67Y+3ylmlG7Lnu+FA==", - "dependencies": { - "es5-ext": "^0.10.50", - "type": "^1.0.1" - } - }, - "node_modules/dashdash": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", - "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=", - "dependencies": { - "assert-plus": "^1.0.0" - }, - "engines": { - "node": ">=0.10" - } - }, - "node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/decode-uri-component": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz", - "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=", - "engines": { - "node": ">=0.10" - } - }, - "node_modules/decompress": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/decompress/-/decompress-4.2.1.tgz", - "integrity": "sha512-e48kc2IjU+2Zw8cTb6VZcJQ3lgVbS4uuB1TfCHbiZIP/haNXm+SVyhu+87jts5/3ROpd82GSVCoNs/z8l4ZOaQ==", - "dependencies": { - "decompress-tar": "^4.0.0", - "decompress-tarbz2": "^4.0.0", - "decompress-targz": "^4.0.0", - "decompress-unzip": "^4.0.1", - "graceful-fs": "^4.1.10", - "make-dir": "^1.0.0", - "pify": "^2.3.0", - "strip-dirs": "^2.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/decompress-response": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-3.3.0.tgz", - "integrity": "sha1-gKTdMjdIOEv6JICDYirt7Jgq3/M=", - "dependencies": { - "mimic-response": "^1.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/decompress-tar": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/decompress-tar/-/decompress-tar-4.1.1.tgz", - "integrity": "sha512-JdJMaCrGpB5fESVyxwpCx4Jdj2AagLmv3y58Qy4GE6HMVjWz1FeVQk1Ct4Kye7PftcdOo/7U7UKzYBJgqnGeUQ==", - "dependencies": { - "file-type": "^5.2.0", - "is-stream": "^1.1.0", - "tar-stream": "^1.5.2" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/decompress-tarbz2": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/decompress-tarbz2/-/decompress-tarbz2-4.1.1.tgz", - "integrity": "sha512-s88xLzf1r81ICXLAVQVzaN6ZmX4A6U4z2nMbOwobxkLoIIfjVMBg7TeguTUXkKeXni795B6y5rnvDw7rxhAq9A==", - "dependencies": { - "decompress-tar": "^4.1.0", - "file-type": "^6.1.0", - "is-stream": "^1.1.0", - "seek-bzip": "^1.0.5", - "unbzip2-stream": "^1.0.9" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/decompress-tarbz2/node_modules/file-type": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/file-type/-/file-type-6.2.0.tgz", - "integrity": "sha512-YPcTBDV+2Tm0VqjybVd32MHdlEGAtuxS3VAYsumFokDSMG+ROT5wawGlnHDoz7bfMcMDt9hxuXvXwoKUx2fkOg==", - "engines": { - "node": ">=4" - } - }, - "node_modules/decompress-targz": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/decompress-targz/-/decompress-targz-4.1.1.tgz", - "integrity": "sha512-4z81Znfr6chWnRDNfFNqLwPvm4db3WuZkqV+UgXQzSngG3CEKdBkw5jrv3axjjL96glyiiKjsxJG3X6WBZwX3w==", - "dependencies": { - "decompress-tar": "^4.1.1", - "file-type": "^5.2.0", - "is-stream": "^1.1.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/decompress-unzip": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/decompress-unzip/-/decompress-unzip-4.0.1.tgz", - "integrity": "sha1-3qrM39FK6vhVePczroIQ+bSEj2k=", - "dependencies": { - "file-type": "^3.8.0", - "get-stream": "^2.2.0", - "pify": "^2.3.0", - "yauzl": "^2.4.2" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/decompress-unzip/node_modules/file-type": { - "version": "3.9.0", - "resolved": "https://registry.npmjs.org/file-type/-/file-type-3.9.0.tgz", - "integrity": "sha1-JXoHg4TR24CHvESdEH1SpSZyuek=", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/decompress-unzip/node_modules/get-stream": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-2.3.1.tgz", - "integrity": "sha1-Xzj5PzRgCWZu4BUKBUFn+Rvdld4=", - "dependencies": { - "object-assign": "^4.0.1", - "pinkie-promise": "^2.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/deep-equal": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-1.1.1.tgz", - "integrity": "sha512-yd9c5AdiqVcR+JjcwUQb9DkhJc8ngNr0MahEBGvDiJw8puWab2yZlh+nkasOnZP+EGTAP6rRp2JzJhJZzvNF8g==", - "dependencies": { - "is-arguments": "^1.0.4", - "is-date-object": "^1.0.1", - "is-regex": "^1.0.4", - "object-is": "^1.0.1", - "object-keys": "^1.1.1", - "regexp.prototype.flags": "^1.2.0" - } - }, - "node_modules/deep-equal/node_modules/object-keys": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", - "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/defer-to-connect": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-1.1.3.tgz", - "integrity": "sha512-0ISdNousHvZT2EiFlZeZAHBUvSxmKswVCEf8hW7KWgG4a8MVEu/3Vb6uWYozkjylyCxe0JBIiRB1jV45S70WVQ==" - }, - "node_modules/deferred-leveldown": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/deferred-leveldown/-/deferred-leveldown-1.2.2.tgz", - "integrity": "sha512-uukrWD2bguRtXilKt6cAWKyoXrTSMo5m7crUdLfWQmu8kIm88w3QZoUL+6nhpfKVmhHANER6Re3sKoNoZ3IKMA==", - "dependencies": { - "abstract-leveldown": "~2.6.0" - } - }, - "node_modules/define-properties": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", - "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==", - "dependencies": { - "object-keys": "^1.0.12" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/define-properties/node_modules/object-keys": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", - "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/defined": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/defined/-/defined-1.0.0.tgz", - "integrity": "sha1-yY2bzvdWdBiOEQlpFRGZ45sfppM=" - }, - "node_modules/delayed-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", - "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=", - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/depd": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", - "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/des.js": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/des.js/-/des.js-1.0.1.tgz", - "integrity": "sha512-Q0I4pfFrv2VPd34/vfLrFOoRmlYj3OV50i7fskps1jZWK1kApMWWT9G6RRUeYedLcBDIhnSDaUvJMb3AhUlaEA==", - "dependencies": { - "inherits": "^2.0.1", - "minimalistic-assert": "^1.0.0" - } - }, - "node_modules/destroy": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz", - "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=" - }, - "node_modules/detect-indent": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/detect-indent/-/detect-indent-4.0.0.tgz", - "integrity": "sha1-920GQ1LN9Docts5hnE7jqUdd4gg=", - "dependencies": { - "repeating": "^2.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/diff": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/diff/-/diff-3.5.0.tgz", - "integrity": "sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA==", - "dev": true, - "engines": { - "node": ">=0.3.1" - } - }, - "node_modules/diffie-hellman": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/diffie-hellman/-/diffie-hellman-5.0.3.tgz", - "integrity": "sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg==", - "dependencies": { - "bn.js": "^4.1.0", - "miller-rabin": "^4.0.0", - "randombytes": "^2.0.0" - } - }, - "node_modules/dom-walk": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/dom-walk/-/dom-walk-0.1.2.tgz", - "integrity": "sha512-6QvTW9mrGeIegrFXdtQi9pk7O/nSK6lSdXW2eqUspN5LWD7UTji2Fqw5V2YLjBpHEoU9Xl/eUWNpDeZvoyOv2w==" - }, - "node_modules/dotignore": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/dotignore/-/dotignore-0.1.2.tgz", - "integrity": "sha512-UGGGWfSauusaVJC+8fgV+NVvBXkCTmVv7sk6nojDZZvuOUNGUy0Zk4UpHQD6EDjS0jpBwcACvH4eofvyzBcRDw==", - "dependencies": { - "minimatch": "^3.0.4" - }, - "bin": { - "ignored": "bin/ignored" - } - }, - "node_modules/drbg.js": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/drbg.js/-/drbg.js-1.0.1.tgz", - "integrity": "sha1-Pja2xCs3BDgjzbwzLVjzHiRFSAs=", - "dependencies": { - "browserify-aes": "^1.0.6", - "create-hash": "^1.1.2", - "create-hmac": "^1.1.4" - }, - "engines": { - "node": ">=0.10" - } - }, - "node_modules/duplexer3": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/duplexer3/-/duplexer3-0.1.4.tgz", - "integrity": "sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI=" - }, - "node_modules/ecc-jsbn": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", - "integrity": "sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=", - "dependencies": { - "jsbn": "~0.1.0", - "safer-buffer": "^2.1.0" - } - }, - "node_modules/ee-first": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", - "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=" - }, - "node_modules/electron-to-chromium": { - "version": "1.3.484", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.484.tgz", - "integrity": "sha512-esh5mmjAGl6HhAaYgHlDZme+jCIc+XIrLrBTwxviE+pM64UBmdLUIHLlrPzJGbit7hQI1TR/oGDQWCvQZ5yrFA==" - }, - "node_modules/elliptic": { - "version": "6.5.3", - "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.3.tgz", - "integrity": "sha512-IMqzv5wNQf+E6aHeIqATs0tOLeOTwj1QKbRcS3jBbYkl5oLAserA8yJTT7/VyHUYG91PRmPyeQDObKLPpeS4dw==", - "dependencies": { - "bn.js": "^4.4.0", - "brorand": "^1.0.1", - "hash.js": "^1.0.0", - "hmac-drbg": "^1.0.0", - "inherits": "^2.0.1", - "minimalistic-assert": "^1.0.0", - "minimalistic-crypto-utils": "^1.0.0" - } - }, - "node_modules/encodeurl": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", - "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/encoding": { - "version": "0.1.12", - "resolved": "https://registry.npmjs.org/encoding/-/encoding-0.1.12.tgz", - "integrity": "sha1-U4tm8+5izRq1HsMjgp0flIDHS+s=", - "dependencies": { - "iconv-lite": "~0.4.13" - } - }, - "node_modules/end-of-stream": { - "version": "1.4.4", - "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", - "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", - "dependencies": { - "once": "^1.4.0" - } - }, - "node_modules/errno": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/errno/-/errno-0.1.7.tgz", - "integrity": "sha512-MfrRBDWzIWifgq6tJj60gkAwtLNb6sQPlcFrSOflcP1aFmmruKQ2wRnze/8V6kgyz7H3FF8Npzv78mZ7XLLflg==", - "dependencies": { - "prr": "~1.0.1" - }, - "bin": { - "errno": "cli.js" - } - }, - "node_modules/es-abstract": { - "version": "1.17.6", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.17.6.tgz", - "integrity": "sha512-Fr89bON3WFyUi5EvAeI48QTWX0AyekGgLA8H+c+7fbfCkJwRWRMLd8CQedNEyJuoYYhmtEqY92pgte1FAhBlhw==", - "dependencies": { - "es-to-primitive": "^1.2.1", - "function-bind": "^1.1.1", - "has": "^1.0.3", - "has-symbols": "^1.0.1", - "is-callable": "^1.2.0", - "is-regex": "^1.1.0", - "object-inspect": "^1.7.0", - "object-keys": "^1.1.1", - "object.assign": "^4.1.0", - "string.prototype.trimend": "^1.0.1", - "string.prototype.trimstart": "^1.0.1" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/es-abstract/node_modules/is-regex": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.0.tgz", - "integrity": "sha512-iI97M8KTWID2la5uYXlkbSDQIg4F6o1sYboZKKTDpnDQMLtUL86zxhgDet3Q2SriaYsyGqZ6Mn2SjbRKeLHdqw==", - "dependencies": { - "has-symbols": "^1.0.1" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/es-abstract/node_modules/object-keys": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", - "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", - "engines": { - "node": ">= 0.4" - } - }, - "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==", - "dependencies": { - "is-callable": "^1.1.4", - "is-date-object": "^1.0.1", - "is-symbol": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/es5-ext": { - "version": "0.10.53", - "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.53.tgz", - "integrity": "sha512-Xs2Stw6NiNHWypzRTY1MtaG/uJlwCk8kH81920ma8mvN8Xq1gsfhZvpkImLQArw8AHnv8MT2I45J3c0R8slE+Q==", - "dependencies": { - "es6-iterator": "~2.0.3", - "es6-symbol": "~3.1.3", - "next-tick": "~1.0.0" - } - }, - "node_modules/es6-iterator": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.3.tgz", - "integrity": "sha1-p96IkUGgWpSwhUQDstCg+/qY87c=", - "dependencies": { - "d": "1", - "es5-ext": "^0.10.35", - "es6-symbol": "^3.1.1" - } - }, - "node_modules/es6-symbol": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.3.tgz", - "integrity": "sha512-NJ6Yn3FuDinBaBRWl/q5X/s4koRHBrgKAu+yGI6JCBeiu3qrcbJhwT2GeR/EXVfylRk8dpQVJoLEFhK+Mu31NA==", - "dependencies": { - "d": "^1.0.1", - "ext": "^1.1.2" - } - }, - "node_modules/escape-html": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", - "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=" - }, - "node_modules/escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/esutils": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", - "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/etag": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", - "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/eth-block-tracker": { - "version": "4.4.3", - "resolved": "https://registry.npmjs.org/eth-block-tracker/-/eth-block-tracker-4.4.3.tgz", - "integrity": "sha512-A8tG4Z4iNg4mw5tP1Vung9N9IjgMNqpiMoJ/FouSFwNCGHv2X0mmOYwtQOJzki6XN7r7Tyo01S29p7b224I4jw==", - "dependencies": { - "@babel/plugin-transform-runtime": "^7.5.5", - "@babel/runtime": "^7.5.5", - "eth-query": "^2.1.0", - "json-rpc-random-id": "^1.0.1", - "pify": "^3.0.0", - "safe-event-emitter": "^1.0.1" - } - }, - "node_modules/eth-block-tracker/node_modules/pify": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", - "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", - "engines": { - "node": ">=4" - } - }, - "node_modules/eth-ens-namehash": { - "version": "2.0.8", - "resolved": "https://registry.npmjs.org/eth-ens-namehash/-/eth-ens-namehash-2.0.8.tgz", - "integrity": "sha1-IprEbsqG1S4MmR58sq74P/D2i88=", - "dependencies": { - "idna-uts46-hx": "^2.3.1", - "js-sha3": "^0.5.7" - } - }, - "node_modules/eth-json-rpc-errors": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/eth-json-rpc-errors/-/eth-json-rpc-errors-1.1.1.tgz", - "integrity": "sha512-WT5shJ5KfNqHi9jOZD+ID8I1kuYWNrigtZat7GOQkvwo99f8SzAVaEcWhJUv656WiZOAg3P1RiJQANtUmDmbIg==", - "dependencies": { - "fast-safe-stringify": "^2.0.6" - } - }, - "node_modules/eth-json-rpc-filters": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/eth-json-rpc-filters/-/eth-json-rpc-filters-4.1.1.tgz", - "integrity": "sha512-GkXb2h6STznD+AmMzblwXgm1JMvjdK9PTIXG7BvIkTlXQ9g0QOxuU1iQRYHoslF9S30BYBSoLSisAYPdLggW+A==", - "dependencies": { - "await-semaphore": "^0.1.3", - "eth-json-rpc-middleware": "^4.1.4", - "eth-query": "^2.1.2", - "json-rpc-engine": "^5.1.3", - "lodash.flatmap": "^4.5.0", - "safe-event-emitter": "^1.0.1" - } - }, - "node_modules/eth-json-rpc-infura": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/eth-json-rpc-infura/-/eth-json-rpc-infura-3.2.1.tgz", - "integrity": "sha512-W7zR4DZvyTn23Bxc0EWsq4XGDdD63+XPUCEhV2zQvQGavDVC4ZpFDK4k99qN7bd7/fjj37+rxmuBOBeIqCA5Mw==", - "dependencies": { - "cross-fetch": "^2.1.1", - "eth-json-rpc-middleware": "^1.5.0", - "json-rpc-engine": "^3.4.0", - "json-rpc-error": "^2.0.0" - } - }, - "node_modules/eth-json-rpc-infura/node_modules/eth-json-rpc-middleware": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/eth-json-rpc-middleware/-/eth-json-rpc-middleware-1.6.0.tgz", - "integrity": "sha512-tDVCTlrUvdqHKqivYMjtFZsdD7TtpNLBCfKAcOpaVs7orBMS/A8HWro6dIzNtTZIR05FAbJ3bioFOnZpuCew9Q==", - "dependencies": { - "async": "^2.5.0", - "eth-query": "^2.1.2", - "eth-tx-summary": "^3.1.2", - "ethereumjs-block": "^1.6.0", - "ethereumjs-tx": "^1.3.3", - "ethereumjs-util": "^5.1.2", - "ethereumjs-vm": "^2.1.0", - "fetch-ponyfill": "^4.0.0", - "json-rpc-engine": "^3.6.0", - "json-rpc-error": "^2.0.0", - "json-stable-stringify": "^1.0.1", - "promise-to-callback": "^1.0.0", - "tape": "^4.6.3" - } - }, - "node_modules/eth-json-rpc-infura/node_modules/ethereumjs-util": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-5.2.0.tgz", - "integrity": "sha512-CJAKdI0wgMbQFLlLRtZKGcy/L6pzVRgelIZqRqNbuVFM3K9VEnyfbcvz0ncWMRNCe4kaHWjwRYQcYMucmwsnWA==", - "dependencies": { - "bn.js": "^4.11.0", - "create-hash": "^1.1.2", - "ethjs-util": "^0.1.3", - "keccak": "^1.0.2", - "rlp": "^2.0.0", - "safe-buffer": "^5.1.1", - "secp256k1": "^3.0.1" - } - }, - "node_modules/eth-json-rpc-infura/node_modules/json-rpc-engine": { - "version": "3.8.0", - "resolved": "https://registry.npmjs.org/json-rpc-engine/-/json-rpc-engine-3.8.0.tgz", - "integrity": "sha512-6QNcvm2gFuuK4TKU1uwfH0Qd/cOSb9c1lls0gbnIhciktIUQJwz6NQNAW4B1KiGPenv7IKu97V222Yo1bNhGuA==", - "dependencies": { - "async": "^2.0.1", - "babel-preset-env": "^1.7.0", - "babelify": "^7.3.0", - "json-rpc-error": "^2.0.0", - "promise-to-callback": "^1.0.0", - "safe-event-emitter": "^1.0.1" - } - }, - "node_modules/eth-json-rpc-infura/node_modules/keccak": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/keccak/-/keccak-1.4.0.tgz", - "integrity": "sha512-eZVaCpblK5formjPjeTBik7TAg+pqnDrMHIffSvi9Lh7PQgM1+hSzakUeZFCk9DVVG0dacZJuaz2ntwlzZUIBw==", - "hasInstallScript": true, - "dependencies": { - "bindings": "^1.2.1", - "inherits": "^2.0.3", - "nan": "^2.2.1", - "safe-buffer": "^5.1.0" - }, - "engines": { - "node": ">=4.0.0" - } - }, - "node_modules/eth-json-rpc-middleware": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/eth-json-rpc-middleware/-/eth-json-rpc-middleware-4.4.1.tgz", - "integrity": "sha512-yoSuRgEYYGFdVeZg3poWOwAlRI+MoBIltmOB86MtpoZjvLbou9EB/qWMOWSmH2ryCWLW97VYY6NWsmWm3OAA7A==", - "dependencies": { - "btoa": "^1.2.1", - "clone": "^2.1.1", - "eth-json-rpc-errors": "^1.0.1", - "eth-query": "^2.1.2", - "eth-sig-util": "^1.4.2", - "ethereumjs-block": "^1.6.0", - "ethereumjs-tx": "^1.3.7", - "ethereumjs-util": "^5.1.2", - "ethereumjs-vm": "^2.6.0", - "fetch-ponyfill": "^4.0.0", - "json-rpc-engine": "^5.1.3", - "json-stable-stringify": "^1.0.1", - "pify": "^3.0.0", - "safe-event-emitter": "^1.0.1" - } - }, - "node_modules/eth-json-rpc-middleware/node_modules/ethereumjs-util": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-5.2.0.tgz", - "integrity": "sha512-CJAKdI0wgMbQFLlLRtZKGcy/L6pzVRgelIZqRqNbuVFM3K9VEnyfbcvz0ncWMRNCe4kaHWjwRYQcYMucmwsnWA==", - "dependencies": { - "bn.js": "^4.11.0", - "create-hash": "^1.1.2", - "ethjs-util": "^0.1.3", - "keccak": "^1.0.2", - "rlp": "^2.0.0", - "safe-buffer": "^5.1.1", - "secp256k1": "^3.0.1" - } - }, - "node_modules/eth-json-rpc-middleware/node_modules/keccak": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/keccak/-/keccak-1.4.0.tgz", - "integrity": "sha512-eZVaCpblK5formjPjeTBik7TAg+pqnDrMHIffSvi9Lh7PQgM1+hSzakUeZFCk9DVVG0dacZJuaz2ntwlzZUIBw==", - "hasInstallScript": true, - "dependencies": { - "bindings": "^1.2.1", - "inherits": "^2.0.3", - "nan": "^2.2.1", - "safe-buffer": "^5.1.0" - }, - "engines": { - "node": ">=4.0.0" - } - }, - "node_modules/eth-json-rpc-middleware/node_modules/pify": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", - "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", - "engines": { - "node": ">=4" - } - }, - "node_modules/eth-lib": { - "version": "0.1.29", - "resolved": "https://registry.npmjs.org/eth-lib/-/eth-lib-0.1.29.tgz", - "integrity": "sha512-bfttrr3/7gG4E02HoWTDUcDDslN003OlOoBxk9virpAZQ1ja/jDgwkWB8QfJF7ojuEowrqy+lzp9VcJG7/k5bQ==", - "dependencies": { - "bn.js": "^4.11.6", - "elliptic": "^6.4.0", - "nano-json-stream-parser": "^0.1.2", - "servify": "^0.1.12", - "ws": "^3.0.0", - "xhr-request-promise": "^0.1.2" - } - }, - "node_modules/eth-query": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/eth-query/-/eth-query-2.1.2.tgz", - "integrity": "sha1-1nQdkAAQa1FRDHLbktY2VFam2l4=", - "dependencies": { - "json-rpc-random-id": "^1.0.0", - "xtend": "^4.0.1" - } - }, - "node_modules/eth-sig-util": { - "version": "1.4.2", - "resolved": "https://registry.npmjs.org/eth-sig-util/-/eth-sig-util-1.4.2.tgz", - "integrity": "sha1-jZWCAsftuq6Dlwf7pvCf8ydgYhA=", - "dependencies": { - "ethereumjs-abi": "git+https://github.com/ethereumjs/ethereumjs-abi.git", - "ethereumjs-util": "^5.1.1" - } - }, - "node_modules/eth-sig-util/node_modules/ethereumjs-util": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-5.2.0.tgz", - "integrity": "sha512-CJAKdI0wgMbQFLlLRtZKGcy/L6pzVRgelIZqRqNbuVFM3K9VEnyfbcvz0ncWMRNCe4kaHWjwRYQcYMucmwsnWA==", - "dependencies": { - "bn.js": "^4.11.0", - "create-hash": "^1.1.2", - "ethjs-util": "^0.1.3", - "keccak": "^1.0.2", - "rlp": "^2.0.0", - "safe-buffer": "^5.1.1", - "secp256k1": "^3.0.1" - } - }, - "node_modules/eth-sig-util/node_modules/keccak": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/keccak/-/keccak-1.4.0.tgz", - "integrity": "sha512-eZVaCpblK5formjPjeTBik7TAg+pqnDrMHIffSvi9Lh7PQgM1+hSzakUeZFCk9DVVG0dacZJuaz2ntwlzZUIBw==", - "hasInstallScript": true, - "dependencies": { - "bindings": "^1.2.1", - "inherits": "^2.0.3", - "nan": "^2.2.1", - "safe-buffer": "^5.1.0" - }, - "engines": { - "node": ">=4.0.0" - } - }, - "node_modules/eth-tx-summary": { - "version": "3.2.4", - "resolved": "https://registry.npmjs.org/eth-tx-summary/-/eth-tx-summary-3.2.4.tgz", - "integrity": "sha512-NtlDnaVZah146Rm8HMRUNMgIwG/ED4jiqk0TME9zFheMl1jOp6jL1m0NKGjJwehXQ6ZKCPr16MTr+qspKpEXNg==", - "dependencies": { - "async": "^2.1.2", - "clone": "^2.0.0", - "concat-stream": "^1.5.1", - "end-of-stream": "^1.1.0", - "eth-query": "^2.0.2", - "ethereumjs-block": "^1.4.1", - "ethereumjs-tx": "^1.1.1", - "ethereumjs-util": "^5.0.1", - "ethereumjs-vm": "^2.6.0", - "through2": "^2.0.3" - } - }, - "node_modules/eth-tx-summary/node_modules/ethereumjs-util": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-5.2.0.tgz", - "integrity": "sha512-CJAKdI0wgMbQFLlLRtZKGcy/L6pzVRgelIZqRqNbuVFM3K9VEnyfbcvz0ncWMRNCe4kaHWjwRYQcYMucmwsnWA==", - "dependencies": { - "bn.js": "^4.11.0", - "create-hash": "^1.1.2", - "ethjs-util": "^0.1.3", - "keccak": "^1.0.2", - "rlp": "^2.0.0", - "safe-buffer": "^5.1.1", - "secp256k1": "^3.0.1" - } - }, - "node_modules/eth-tx-summary/node_modules/keccak": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/keccak/-/keccak-1.4.0.tgz", - "integrity": "sha512-eZVaCpblK5formjPjeTBik7TAg+pqnDrMHIffSvi9Lh7PQgM1+hSzakUeZFCk9DVVG0dacZJuaz2ntwlzZUIBw==", - "hasInstallScript": true, - "dependencies": { - "bindings": "^1.2.1", - "inherits": "^2.0.3", - "nan": "^2.2.1", - "safe-buffer": "^5.1.0" - }, - "engines": { - "node": ">=4.0.0" - } - }, - "node_modules/ethereum-common": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/ethereum-common/-/ethereum-common-0.2.0.tgz", - "integrity": "sha512-XOnAR/3rntJgbCdGhqdaLIxDLWKLmsZOGhHdBKadEr6gEnJLH52k93Ou+TUdFaPN3hJc3isBZBal3U/XZ15abA==" - }, - "node_modules/ethereum-protocol": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/ethereum-protocol/-/ethereum-protocol-1.0.1.tgz", - "integrity": "sha512-3KLX1mHuEsBW0dKG+c6EOJS1NBNqdCICvZW9sInmZTt5aY0oxmHVggYRE0lJu1tcnMD1K+AKHdLi6U43Awm1Vg==" - }, - "node_modules/ethereumjs-abi": { - "resolved": "git+ssh://git@github.com/ethereumjs/ethereumjs-abi.git#1cfbb13862f90f0b391d8a699544d5fe4dfb8c7b", - "dependencies": { - "bn.js": "^4.11.8", - "ethereumjs-util": "^6.0.0" - } - }, - "node_modules/ethereumjs-account": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/ethereumjs-account/-/ethereumjs-account-2.0.5.tgz", - "integrity": "sha512-bgDojnXGjhMwo6eXQC0bY6UK2liSFUSMwwylOmQvZbSl/D7NXQ3+vrGO46ZeOgjGfxXmgIeVNDIiHw7fNZM4VA==", - "dependencies": { - "ethereumjs-util": "^5.0.0", - "rlp": "^2.0.0", - "safe-buffer": "^5.1.1" - } - }, - "node_modules/ethereumjs-account/node_modules/ethereumjs-util": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-5.2.0.tgz", - "integrity": "sha512-CJAKdI0wgMbQFLlLRtZKGcy/L6pzVRgelIZqRqNbuVFM3K9VEnyfbcvz0ncWMRNCe4kaHWjwRYQcYMucmwsnWA==", - "dependencies": { - "bn.js": "^4.11.0", - "create-hash": "^1.1.2", - "ethjs-util": "^0.1.3", - "keccak": "^1.0.2", - "rlp": "^2.0.0", - "safe-buffer": "^5.1.1", - "secp256k1": "^3.0.1" - } - }, - "node_modules/ethereumjs-account/node_modules/keccak": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/keccak/-/keccak-1.4.0.tgz", - "integrity": "sha512-eZVaCpblK5formjPjeTBik7TAg+pqnDrMHIffSvi9Lh7PQgM1+hSzakUeZFCk9DVVG0dacZJuaz2ntwlzZUIBw==", - "hasInstallScript": true, - "dependencies": { - "bindings": "^1.2.1", - "inherits": "^2.0.3", - "nan": "^2.2.1", - "safe-buffer": "^5.1.0" - }, - "engines": { - "node": ">=4.0.0" - } - }, - "node_modules/ethereumjs-block": { - "version": "1.7.1", - "resolved": "https://registry.npmjs.org/ethereumjs-block/-/ethereumjs-block-1.7.1.tgz", - "integrity": "sha512-B+sSdtqm78fmKkBq78/QLKJbu/4Ts4P2KFISdgcuZUPDm9x+N7qgBPIIFUGbaakQh8bzuquiRVbdmvPKqbILRg==", - "dependencies": { - "async": "^2.0.1", - "ethereum-common": "0.2.0", - "ethereumjs-tx": "^1.2.2", - "ethereumjs-util": "^5.0.0", - "merkle-patricia-tree": "^2.1.2" - } - }, - "node_modules/ethereumjs-block/node_modules/ethereumjs-util": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-5.2.0.tgz", - "integrity": "sha512-CJAKdI0wgMbQFLlLRtZKGcy/L6pzVRgelIZqRqNbuVFM3K9VEnyfbcvz0ncWMRNCe4kaHWjwRYQcYMucmwsnWA==", - "dependencies": { - "bn.js": "^4.11.0", - "create-hash": "^1.1.2", - "ethjs-util": "^0.1.3", - "keccak": "^1.0.2", - "rlp": "^2.0.0", - "safe-buffer": "^5.1.1", - "secp256k1": "^3.0.1" - } - }, - "node_modules/ethereumjs-block/node_modules/keccak": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/keccak/-/keccak-1.4.0.tgz", - "integrity": "sha512-eZVaCpblK5formjPjeTBik7TAg+pqnDrMHIffSvi9Lh7PQgM1+hSzakUeZFCk9DVVG0dacZJuaz2ntwlzZUIBw==", - "hasInstallScript": true, - "dependencies": { - "bindings": "^1.2.1", - "inherits": "^2.0.3", - "nan": "^2.2.1", - "safe-buffer": "^5.1.0" - }, - "engines": { - "node": ">=4.0.0" - } - }, - "node_modules/ethereumjs-common": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/ethereumjs-common/-/ethereumjs-common-1.5.1.tgz", - "integrity": "sha512-aVUPRLgmXORGXXEVkFYgPhr9TGtpBY2tGhZ9Uh0A3lIUzUDr1x6kQx33SbjPUkLkX3eniPQnIL/2psjkjrOfcQ==" - }, - "node_modules/ethereumjs-tx": { - "version": "1.3.7", - "resolved": "https://registry.npmjs.org/ethereumjs-tx/-/ethereumjs-tx-1.3.7.tgz", - "integrity": "sha512-wvLMxzt1RPhAQ9Yi3/HKZTn0FZYpnsmQdbKYfUUpi4j1SEIcbkd9tndVjcPrufY3V7j2IebOpC00Zp2P/Ay2kA==", - "dependencies": { - "ethereum-common": "^0.0.18", - "ethereumjs-util": "^5.0.0" - } - }, - "node_modules/ethereumjs-tx/node_modules/ethereum-common": { - "version": "0.0.18", - "resolved": "https://registry.npmjs.org/ethereum-common/-/ethereum-common-0.0.18.tgz", - "integrity": "sha1-L9w1dvIykDNYl26znaeDIT/5Uj8=" - }, - "node_modules/ethereumjs-tx/node_modules/ethereumjs-util": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-5.2.0.tgz", - "integrity": "sha512-CJAKdI0wgMbQFLlLRtZKGcy/L6pzVRgelIZqRqNbuVFM3K9VEnyfbcvz0ncWMRNCe4kaHWjwRYQcYMucmwsnWA==", - "dependencies": { - "bn.js": "^4.11.0", - "create-hash": "^1.1.2", - "ethjs-util": "^0.1.3", - "keccak": "^1.0.2", - "rlp": "^2.0.0", - "safe-buffer": "^5.1.1", - "secp256k1": "^3.0.1" - } - }, - "node_modules/ethereumjs-tx/node_modules/keccak": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/keccak/-/keccak-1.4.0.tgz", - "integrity": "sha512-eZVaCpblK5formjPjeTBik7TAg+pqnDrMHIffSvi9Lh7PQgM1+hSzakUeZFCk9DVVG0dacZJuaz2ntwlzZUIBw==", - "hasInstallScript": true, - "dependencies": { - "bindings": "^1.2.1", - "inherits": "^2.0.3", - "nan": "^2.2.1", - "safe-buffer": "^5.1.0" - }, - "engines": { - "node": ">=4.0.0" - } - }, - "node_modules/ethereumjs-util": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-6.2.0.tgz", - "integrity": "sha512-vb0XN9J2QGdZGIEKG2vXM+kUdEivUfU6Wmi5y0cg+LRhDYKnXIZ/Lz7XjFbHRR9VIKq2lVGLzGBkA++y2nOdOQ==", - "dependencies": { - "@types/bn.js": "^4.11.3", - "bn.js": "^4.11.0", - "create-hash": "^1.1.2", - "ethjs-util": "0.1.6", - "keccak": "^2.0.0", - "rlp": "^2.2.3", - "secp256k1": "^3.0.1" - } - }, - "node_modules/ethereumjs-vm": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/ethereumjs-vm/-/ethereumjs-vm-2.6.0.tgz", - "integrity": "sha512-r/XIUik/ynGbxS3y+mvGnbOKnuLo40V5Mj1J25+HEO63aWYREIqvWeRO/hnROlMBE5WoniQmPmhiaN0ctiHaXw==", - "dependencies": { - "async": "^2.1.2", - "async-eventemitter": "^0.2.2", - "ethereumjs-account": "^2.0.3", - "ethereumjs-block": "~2.2.0", - "ethereumjs-common": "^1.1.0", - "ethereumjs-util": "^6.0.0", - "fake-merkle-patricia-tree": "^1.0.1", - "functional-red-black-tree": "^1.0.1", - "merkle-patricia-tree": "^2.3.2", - "rustbn.js": "~0.2.0", - "safe-buffer": "^5.1.1" - } - }, - "node_modules/ethereumjs-vm/node_modules/ethereumjs-block": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/ethereumjs-block/-/ethereumjs-block-2.2.2.tgz", - "integrity": "sha512-2p49ifhek3h2zeg/+da6XpdFR3GlqY3BIEiqxGF8j9aSRIgkb7M1Ky+yULBKJOu8PAZxfhsYA+HxUk2aCQp3vg==", - "dependencies": { - "async": "^2.0.1", - "ethereumjs-common": "^1.5.0", - "ethereumjs-tx": "^2.1.1", - "ethereumjs-util": "^5.0.0", - "merkle-patricia-tree": "^2.1.2" - } - }, - "node_modules/ethereumjs-vm/node_modules/ethereumjs-block/node_modules/ethereumjs-util": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-5.2.0.tgz", - "integrity": "sha512-CJAKdI0wgMbQFLlLRtZKGcy/L6pzVRgelIZqRqNbuVFM3K9VEnyfbcvz0ncWMRNCe4kaHWjwRYQcYMucmwsnWA==", - "dependencies": { - "bn.js": "^4.11.0", - "create-hash": "^1.1.2", - "ethjs-util": "^0.1.3", - "keccak": "^1.0.2", - "rlp": "^2.0.0", - "safe-buffer": "^5.1.1", - "secp256k1": "^3.0.1" - } - }, - "node_modules/ethereumjs-vm/node_modules/ethereumjs-tx": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ethereumjs-tx/-/ethereumjs-tx-2.1.2.tgz", - "integrity": "sha512-zZEK1onCeiORb0wyCXUvg94Ve5It/K6GD1K+26KfFKodiBiS6d9lfCXlUKGBBdQ+bv7Day+JK0tj1K+BeNFRAw==", - "dependencies": { - "ethereumjs-common": "^1.5.0", - "ethereumjs-util": "^6.0.0" - } - }, - "node_modules/ethereumjs-vm/node_modules/keccak": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/keccak/-/keccak-1.4.0.tgz", - "integrity": "sha512-eZVaCpblK5formjPjeTBik7TAg+pqnDrMHIffSvi9Lh7PQgM1+hSzakUeZFCk9DVVG0dacZJuaz2ntwlzZUIBw==", - "hasInstallScript": true, - "dependencies": { - "bindings": "^1.2.1", - "inherits": "^2.0.3", - "nan": "^2.2.1", - "safe-buffer": "^5.1.0" - }, - "engines": { - "node": ">=4.0.0" - } - }, - "node_modules/ethereumjs-wallet": { - "version": "0.6.4", - "resolved": "https://registry.npmjs.org/ethereumjs-wallet/-/ethereumjs-wallet-0.6.4.tgz", - "integrity": "sha512-xAYLWVH/MA9Ds1+BiDTfdRrCBQIz7r70EJSjuBnvw/x40qJ1jBoBBAp8/l+I9VPGAsUXvHTfcnp2OZ9LbcTs/g==", - "dependencies": { - "aes-js": "^3.1.1", - "bs58check": "^2.1.2", - "ethereumjs-util": "^6.0.0", - "hdkey": "^1.1.1", - "randombytes": "^2.0.6", - "safe-buffer": "^5.1.2", - "scryptsy": "^1.2.1", - "utf8": "^3.0.0", - "uuid": "^3.3.2" - } - }, - "node_modules/ethereumjs-wallet/node_modules/aes-js": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/aes-js/-/aes-js-3.1.2.tgz", - "integrity": "sha512-e5pEa2kBnBOgR4Y/p20pskXI74UEz7de8ZGVo58asOtvSVG5YAbJeELPZxOmt+Bnz3rX753YKhfIn4X4l1PPRQ==" - }, - "node_modules/ethereumjs-wallet/node_modules/scryptsy": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/scryptsy/-/scryptsy-1.2.1.tgz", - "integrity": "sha1-oyJfpLJST4AnAHYeKFW987LZIWM=", - "dependencies": { - "pbkdf2": "^3.0.3" - } - }, - "node_modules/ethers": { - "version": "4.0.0-beta.3", - "resolved": "https://registry.npmjs.org/ethers/-/ethers-4.0.0-beta.3.tgz", - "integrity": "sha512-YYPogooSknTwvHg3+Mv71gM/3Wcrx+ZpCzarBj3mqs9njjRkrOo2/eufzhHloOCo3JSoNI4TQJJ6yU5ABm3Uog==", - "dependencies": { - "@types/node": "^10.3.2", - "aes-js": "3.0.0", - "bn.js": "^4.4.0", - "elliptic": "6.3.3", - "hash.js": "1.1.3", - "js-sha3": "0.5.7", - "scrypt-js": "2.0.3", - "setimmediate": "1.0.4", - "uuid": "2.0.1", - "xmlhttprequest": "1.8.0" - } - }, - "node_modules/ethers/node_modules/elliptic": { - "version": "6.3.3", - "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.3.3.tgz", - "integrity": "sha1-VILZZG1UvLif19mU/J4ulWiHbj8=", - "dependencies": { - "bn.js": "^4.4.0", - "brorand": "^1.0.1", - "hash.js": "^1.0.0", - "inherits": "^2.0.1" - } - }, - "node_modules/ethers/node_modules/hash.js": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.3.tgz", - "integrity": "sha512-/UETyP0W22QILqS+6HowevwhEFJ3MBJnwTf75Qob9Wz9t0DPuisL8kW8YZMK62dHAKE1c1p+gY1TtOLY+USEHA==", - "dependencies": { - "inherits": "^2.0.3", - "minimalistic-assert": "^1.0.0" - } - }, - "node_modules/ethers/node_modules/setimmediate": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.4.tgz", - "integrity": "sha1-IOgd5iLUoCWIzgyNqJc8vPHTE48=" - }, - "node_modules/ethers/node_modules/uuid": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-2.0.1.tgz", - "integrity": "sha1-wqMN7bPlNdcsz4LjQ5QaULqFM6w=" - }, - "node_modules/ethjs-unit": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/ethjs-unit/-/ethjs-unit-0.1.6.tgz", - "integrity": "sha1-xmWSHkduh7ziqdWIpv4EBbLEFpk=", - "dependencies": { - "bn.js": "4.11.6", - "number-to-bn": "1.7.0" - }, - "engines": { - "node": ">=6.5.0", - "npm": ">=3" - } - }, - "node_modules/ethjs-unit/node_modules/bn.js": { - "version": "4.11.6", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.6.tgz", - "integrity": "sha1-UzRK2xRhehP26N0s4okF0cC6MhU=" - }, - "node_modules/ethjs-util": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/ethjs-util/-/ethjs-util-0.1.6.tgz", - "integrity": "sha512-CUnVOQq7gSpDHZVVrQW8ExxUETWrnrvXYvYz55wOU8Uj4VCgw56XC2B/fVqQN+f7gmrnRHSLVnFAwsCuNwji8w==", - "dependencies": { - "is-hex-prefixed": "1.0.0", - "strip-hex-prefix": "1.0.0" - }, - "engines": { - "node": ">=6.5.0", - "npm": ">=3" - } - }, - "node_modules/eventemitter3": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-3.1.2.tgz", - "integrity": "sha512-tvtQIeLVHjDkJYnzf2dgVMxfuSGJeM/7UCG17TT4EumTfNtF+0nebF/4zWOIkCreAbtNqhGEboB6BWrwqNaw4Q==" - }, - "node_modules/events": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/events/-/events-3.1.0.tgz", - "integrity": "sha512-Rv+u8MLHNOdMjTAFeT3nCjHn2aGlx435FP/sDHNaRhDEMwyI/aB22Kj2qIN8R0cw3z28psEQLYwxVKLsKrMgWg==", - "engines": { - "node": ">=0.8.x" - } - }, - "node_modules/evp_bytestokey": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz", - "integrity": "sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==", - "dependencies": { - "md5.js": "^1.3.4", - "safe-buffer": "^5.1.1" - } - }, - "node_modules/express": { - "version": "4.17.1", - "resolved": "https://registry.npmjs.org/express/-/express-4.17.1.tgz", - "integrity": "sha512-mHJ9O79RqluphRrcw2X/GTh3k9tVv8YcoyY4Kkh4WDMUYKRZUq0h1o0w2rrrxBqM7VoeUVqgb27xlEMXTnYt4g==", - "dependencies": { - "accepts": "~1.3.7", - "array-flatten": "1.1.1", - "body-parser": "1.19.0", - "content-disposition": "0.5.3", - "content-type": "~1.0.4", - "cookie": "0.4.0", - "cookie-signature": "1.0.6", - "debug": "2.6.9", - "depd": "~1.1.2", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "etag": "~1.8.1", - "finalhandler": "~1.1.2", - "fresh": "0.5.2", - "merge-descriptors": "1.0.1", - "methods": "~1.1.2", - "on-finished": "~2.3.0", - "parseurl": "~1.3.3", - "path-to-regexp": "0.1.7", - "proxy-addr": "~2.0.5", - "qs": "6.7.0", - "range-parser": "~1.2.1", - "safe-buffer": "5.1.2", - "send": "0.17.1", - "serve-static": "1.14.1", - "setprototypeof": "1.1.1", - "statuses": "~1.5.0", - "type-is": "~1.6.18", - "utils-merge": "1.0.1", - "vary": "~1.1.2" - }, - "engines": { - "node": ">= 0.10.0" - } - }, - "node_modules/express/node_modules/safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" - }, - "node_modules/ext": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/ext/-/ext-1.4.0.tgz", - "integrity": "sha512-Key5NIsUxdqKg3vIsdw9dSuXpPCQ297y6wBjL30edxwPgt2E44WcWBZey/ZvUc6sERLTxKdyCu4gZFmUbk1Q7A==", - "dependencies": { - "type": "^2.0.0" - } - }, - "node_modules/ext/node_modules/type": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/type/-/type-2.0.0.tgz", - "integrity": "sha512-KBt58xCHry4Cejnc2ISQAF7QY+ORngsWfxezO68+12hKV6lQY8P/psIkcbjeHWn7MqcgciWJyCCevFMJdIXpow==" - }, - "node_modules/extend": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", - "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==" - }, - "node_modules/extsprintf": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", - "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=", - "engines": [ - "node >=0.6.0" - ] - }, - "node_modules/fake-merkle-patricia-tree": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/fake-merkle-patricia-tree/-/fake-merkle-patricia-tree-1.0.1.tgz", - "integrity": "sha1-S4w6z7Ugr635hgsfFM2M40As3dM=", - "dependencies": { - "checkpoint-store": "^1.1.0" - } - }, - "node_modules/fast-deep-equal": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", - "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==" - }, - "node_modules/fast-json-stable-stringify": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", - "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==" - }, - "node_modules/fast-safe-stringify": { - "version": "2.0.7", - "resolved": "https://registry.npmjs.org/fast-safe-stringify/-/fast-safe-stringify-2.0.7.tgz", - "integrity": "sha512-Utm6CdzT+6xsDk2m8S6uL8VHxNwI6Jub+e9NYTcAms28T84pTa25GJQV9j0CY0N1rM8hK4x6grpF2BQf+2qwVA==" - }, - "node_modules/fd-slicer": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz", - "integrity": "sha1-JcfInLH5B3+IkbvmHY85Dq4lbx4=", - "dependencies": { - "pend": "~1.2.0" - } - }, - "node_modules/fetch-ponyfill": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/fetch-ponyfill/-/fetch-ponyfill-4.1.0.tgz", - "integrity": "sha1-rjzl9zLGReq4fkroeTQUcJsjmJM=", - "dependencies": { - "node-fetch": "~1.7.1" - } - }, - "node_modules/fetch-ponyfill/node_modules/node-fetch": { - "version": "1.7.3", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-1.7.3.tgz", - "integrity": "sha512-NhZ4CsKx7cYm2vSrBAr2PvFOe6sWDf0UYLRqA6svUYg7+/TSfVAu49jYC4BvQ4Sms9SZgdqGBgroqfDhJdTyKQ==", - "dependencies": { - "encoding": "^0.1.11", - "is-stream": "^1.0.1" - } - }, - "node_modules/file-type": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/file-type/-/file-type-5.2.0.tgz", - "integrity": "sha1-LdvqfHP/42No365J3DOMBYwritY=", - "engines": { - "node": ">=4" - } - }, - "node_modules/file-uri-to-path": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz", - "integrity": "sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==" - }, - "node_modules/finalhandler": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz", - "integrity": "sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==", - "dependencies": { - "debug": "2.6.9", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "on-finished": "~2.3.0", - "parseurl": "~1.3.3", - "statuses": "~1.5.0", - "unpipe": "~1.0.0" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/for-each": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz", - "integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==", - "dependencies": { - "is-callable": "^1.1.3" - } - }, - "node_modules/forever-agent": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", - "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=", - "engines": { - "node": "*" - } - }, - "node_modules/form-data": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz", - "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==", - "dependencies": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.6", - "mime-types": "^2.1.12" - }, - "engines": { - "node": ">= 0.12" - } - }, - "node_modules/forwarded": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.1.2.tgz", - "integrity": "sha1-mMI9qxF1ZXuMBXPozszZGw/xjIQ=", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/fresh": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", - "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/fs-constants": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz", - "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==" - }, - "node_modules/fs-extra": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-4.0.3.tgz", - "integrity": "sha512-q6rbdDd1o2mAnQreO7YADIxf/Whx4AHBiRf6d+/cVT8h44ss+lHgxf1FemcqDnQt9X3ct4McHr+JMGlYSsK7Cg==", - "dependencies": { - "graceful-fs": "^4.1.2", - "jsonfile": "^4.0.0", - "universalify": "^0.1.0" - } - }, - "node_modules/fs-minipass": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-1.2.7.tgz", - "integrity": "sha512-GWSSJGFy4e9GUeCcbIkED+bgAoFyj7XF1mV8rma3QW4NIqX9Kyx79N/PF61H5udOV3aY1IaMLs6pGbH71nlCTA==", - "dependencies": { - "minipass": "^2.6.0" - } - }, - "node_modules/fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" - }, - "node_modules/function-bind": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" - }, - "node_modules/functional-red-black-tree": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", - "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=" - }, - "node_modules/get-stream": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", - "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", - "dependencies": { - "pump": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/getpass": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", - "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=", - "dependencies": { - "assert-plus": "^1.0.0" - } - }, - "node_modules/glob": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz", - "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==", - "dev": true, - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" - } - }, - "node_modules/global": { - "version": "4.3.2", - "resolved": "https://registry.npmjs.org/global/-/global-4.3.2.tgz", - "integrity": "sha1-52mJJopsdMOJCLEwWxD8DjlOnQ8=", - "dependencies": { - "min-document": "^2.19.0", - "process": "~0.5.1" - } - }, - "node_modules/globals": { - "version": "9.18.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-9.18.0.tgz", - "integrity": "sha512-S0nG3CLEQiY/ILxqtztTWH/3iRRdyBLw6KMDxnKMchrtbj2OFmehVh0WUCfW3DUrIgx/qFrJPICrq4Z4sTR9UQ==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/got": { - "version": "9.6.0", - "resolved": "https://registry.npmjs.org/got/-/got-9.6.0.tgz", - "integrity": "sha512-R7eWptXuGYxwijs0eV+v3o6+XH1IqVK8dJOEecQfTmkncw9AV4dcw/Dhxi8MdlqPthxxpZyizMzyg8RTmEsG+Q==", - "dependencies": { - "@sindresorhus/is": "^0.14.0", - "@szmarczak/http-timer": "^1.1.2", - "cacheable-request": "^6.0.0", - "decompress-response": "^3.3.0", - "duplexer3": "^0.1.4", - "get-stream": "^4.1.0", - "lowercase-keys": "^1.0.1", - "mimic-response": "^1.0.1", - "p-cancelable": "^1.0.0", - "to-readable-stream": "^1.0.0", - "url-parse-lax": "^3.0.0" - }, - "engines": { - "node": ">=8.6" - } - }, - "node_modules/graceful-fs": { - "version": "4.2.4", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.4.tgz", - "integrity": "sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw==" - }, - "node_modules/graceful-readlink": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/graceful-readlink/-/graceful-readlink-1.0.1.tgz", - "integrity": "sha1-TK+tdrxi8C+gObL5Tpo906ORpyU=" - }, - "node_modules/growl": { - "version": "1.10.5", - "resolved": "https://registry.npmjs.org/growl/-/growl-1.10.5.tgz", - "integrity": "sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA==", - "dev": true, - "engines": { - "node": ">=4.x" - } - }, - "node_modules/har-schema": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", - "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=", - "engines": { - "node": ">=4" - } - }, - "node_modules/har-validator": { - "version": "5.1.3", - "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.3.tgz", - "integrity": "sha512-sNvOCzEQNr/qrvJgc3UG/kD4QtlHycrzwS+6mfTrrSq97BvaYcPZZI1ZSqGSPR73Cxn4LKTD4PttRwfU7jWq5g==", - "dependencies": { - "ajv": "^6.5.5", - "har-schema": "^2.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/has": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", - "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", - "dependencies": { - "function-bind": "^1.1.1" - }, - "engines": { - "node": ">= 0.4.0" - } - }, - "node_modules/has-ansi": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", - "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=", - "dependencies": { - "ansi-regex": "^2.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/has-symbol-support-x": { - "version": "1.4.2", - "resolved": "https://registry.npmjs.org/has-symbol-support-x/-/has-symbol-support-x-1.4.2.tgz", - "integrity": "sha512-3ToOva++HaW+eCpgqZrCfN51IPB+7bJNVT6CUATzueB5Heb8o6Nam0V3HG5dlDvZU1Gn5QLcbahiKw/XVk5JJw==", - "engines": { - "node": "*" - } - }, - "node_modules/has-symbols": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.1.tgz", - "integrity": "sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg==", - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/has-to-string-tag-x": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/has-to-string-tag-x/-/has-to-string-tag-x-1.4.1.tgz", - "integrity": "sha512-vdbKfmw+3LoOYVr+mtxHaX5a96+0f3DljYd8JOqvOLsf5mw2Otda2qCDT9qRqLAhrjyQ0h7ual5nOiASpsGNFw==", - "dependencies": { - "has-symbol-support-x": "^1.4.1" - }, - "engines": { - "node": "*" - } - }, - "node_modules/hash-base": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.1.0.tgz", - "integrity": "sha512-1nmYp/rhMDiE7AYkDw+lLwlAzz0AntGIe51F3RfFfEqyQ3feY2eI/NcwC6umIQVOASPMsWJLJScWKSSvzL9IVA==", - "dependencies": { - "inherits": "^2.0.4", - "readable-stream": "^3.6.0", - "safe-buffer": "^5.2.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/hash-base/node_modules/readable-stream": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", - "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", - "dependencies": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/hash.js": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz", - "integrity": "sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==", - "dependencies": { - "inherits": "^2.0.3", - "minimalistic-assert": "^1.0.1" - } - }, - "node_modules/hdkey": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/hdkey/-/hdkey-1.1.2.tgz", - "integrity": "sha512-PTQ4VKu0oRnCrYfLp04iQZ7T2Cxz0UsEXYauk2j8eh6PJXCpbXuCFhOmtIFtbET0i3PMWmHN9J11gU8LEgUljQ==", - "dependencies": { - "bs58check": "^2.1.2", - "safe-buffer": "^5.1.1", - "secp256k1": "^3.0.1" - } - }, - "node_modules/he": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/he/-/he-1.1.1.tgz", - "integrity": "sha1-k0EP0hsAlzUVH4howvJx80J+I/0=", - "dev": true, - "bin": { - "he": "bin/he" - } - }, - "node_modules/hmac-drbg": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz", - "integrity": "sha1-0nRXAQJabHdabFRXk+1QL8DGSaE=", - "dependencies": { - "hash.js": "^1.0.3", - "minimalistic-assert": "^1.0.0", - "minimalistic-crypto-utils": "^1.0.1" - } - }, - "node_modules/home-or-tmp": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/home-or-tmp/-/home-or-tmp-2.0.0.tgz", - "integrity": "sha1-42w/LSyufXRqhX440Y1fMqeILbg=", - "dependencies": { - "os-homedir": "^1.0.0", - "os-tmpdir": "^1.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/http-cache-semantics": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.0.tgz", - "integrity": "sha512-carPklcUh7ROWRK7Cv27RPtdhYhUsela/ue5/jKzjegVvXDqM2ILE9Q2BGn9JZJh1g87cp56su/FgQSzcWS8cQ==" - }, - "node_modules/http-errors": { - "version": "1.7.2", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.7.2.tgz", - "integrity": "sha512-uUQBt3H/cSIVfch6i1EuPNy/YsRSOUBXTVfZ+yR7Zjez3qjBz6i9+i4zjNaoqcoFVI4lQJ5plg63TvGfRSDCRg==", - "dependencies": { - "depd": "~1.1.2", - "inherits": "2.0.3", - "setprototypeof": "1.1.1", - "statuses": ">= 1.5.0 < 2", - "toidentifier": "1.0.0" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/http-errors/node_modules/inherits": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" - }, - "node_modules/http-https": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/http-https/-/http-https-1.0.0.tgz", - "integrity": "sha1-L5CN1fHbQGjAWM1ubUzjkskTOJs=" - }, - "node_modules/http-signature": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", - "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=", - "dependencies": { - "assert-plus": "^1.0.0", - "jsprim": "^1.2.2", - "sshpk": "^1.7.0" - }, - "engines": { - "node": ">=0.8", - "npm": ">=1.3.7" - } - }, - "node_modules/iconv-lite": { - "version": "0.4.24", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", - "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", - "dependencies": { - "safer-buffer": ">= 2.1.2 < 3" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/idna-uts46-hx": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/idna-uts46-hx/-/idna-uts46-hx-2.3.1.tgz", - "integrity": "sha512-PWoF9Keq6laYdIRwwCdhTPl60xRqAloYNMQLiyUnG42VjT53oW07BXIRM+NK7eQjzXjAk2gUvX9caRxlnF9TAA==", - "dependencies": { - "punycode": "2.1.0" - }, - "engines": { - "node": ">=4.0.0" - } - }, - "node_modules/idna-uts46-hx/node_modules/punycode": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.0.tgz", - "integrity": "sha1-X4Y+3Im5bbCQdLrXlHvwkFbKTn0=", - "engines": { - "node": ">=6" - } - }, - "node_modules/ieee754": { - "version": "1.1.13", - "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.1.13.tgz", - "integrity": "sha512-4vf7I2LYV/HaWerSo3XmlMkp5eZ83i+/CDluXi/IGTs/O1sejBNhTtnxzmRZfvOUqj7lZjqHkeTvpgSFDlWZTg==" - }, - "node_modules/immediate": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/immediate/-/immediate-3.3.0.tgz", - "integrity": "sha512-HR7EVodfFUdQCTIeySw+WDRFJlPcLOJbXfwwZ7Oom6tjsvZ3bOkCDJHehQC3nxJrv7+f9XecwazynjU8e4Vw3Q==" - }, - "node_modules/inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", - "dependencies": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "node_modules/inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" - }, - "node_modules/invariant": { - "version": "2.2.4", - "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz", - "integrity": "sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==", - "dependencies": { - "loose-envify": "^1.0.0" - } - }, - "node_modules/ipaddr.js": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", - "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/is-arguments": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.0.4.tgz", - "integrity": "sha512-xPh0Rmt8NE65sNzvyUmWgI1tz3mKq74lGA0mL8LYZcoIzKOzDh6HmrYm3d18k60nHerC8A9Km8kYu87zfSFnLA==", - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/is-callable": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.0.tgz", - "integrity": "sha512-pyVD9AaGLxtg6srb2Ng6ynWJqkHU9bEM087AKck0w8QwDarTfNcpIYoU8x8Hv2Icm8u6kFJM18Dag8lyqGkviw==", - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/is-date-object": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.2.tgz", - "integrity": "sha512-USlDT524woQ08aoZFzh3/Z6ch9Y/EWXEHQ/AaRN0SkKq4t2Jw2R2339tSXmwuVoY7LLlBCbOIlx2myP/L5zk0g==", - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/is-finite": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-finite/-/is-finite-1.1.0.tgz", - "integrity": "sha512-cdyMtqX/BOqqNBBiKlIVkytNHm49MtMlYyn1zxzvJKWmFMlGzm+ry5BBfYyeY9YmNKbRSo/o7OX9w9ale0wg3w==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-fn": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-fn/-/is-fn-1.0.0.tgz", - "integrity": "sha1-lUPV3nvPWwiiLsiiC65uKG1RDYw=", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-function": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-function/-/is-function-1.0.2.tgz", - "integrity": "sha512-lw7DUp0aWXYg+CBCN+JKkcE0Q2RayZnSvnZBlwgxHBQhqt5pZNVy4Ri7H9GmmXkdu7LUthszM+Tor1u/2iBcpQ==" - }, - "node_modules/is-hex-prefixed": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-hex-prefixed/-/is-hex-prefixed-1.0.0.tgz", - "integrity": "sha1-fY035q135dEnFIkTxXPggtd39VQ=", - "engines": { - "node": ">=6.5.0", - "npm": ">=3" - } - }, - "node_modules/is-natural-number": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/is-natural-number/-/is-natural-number-4.0.1.tgz", - "integrity": "sha1-q5124dtM7VHjXeDHLr7PCfc0zeg=" - }, - "node_modules/is-object": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-object/-/is-object-1.0.1.tgz", - "integrity": "sha1-iVJojF7C/9awPsyF52ngKQMINHA=" - }, - "node_modules/is-plain-obj": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz", - "integrity": "sha1-caUMhCnfync8kqOQpKA7OfzVHT4=", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-regex": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.0.5.tgz", - "integrity": "sha512-vlKW17SNq44owv5AQR3Cq0bQPEb8+kF3UKZ2fiZNOWtztYE5i0CzCZxFDwO58qAOWtxdBRVO/V5Qin1wjCqFYQ==", - "dependencies": { - "has": "^1.0.3" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/is-retry-allowed": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/is-retry-allowed/-/is-retry-allowed-1.2.0.tgz", - "integrity": "sha512-RUbUeKwvm3XG2VYamhJL1xFktgjvPzL0Hq8C+6yrWIswDy3BIXGqCxhxkc30N9jqK311gVU137K8Ei55/zVJRg==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-stream": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", - "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-symbol": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.3.tgz", - "integrity": "sha512-OwijhaRSgqvhm/0ZdAcXNZt9lYdKFpcRDT5ULUuYXPoT794UNOdU+gpT6Rzo7b4V2HUl/op6GqY894AZwv9faQ==", - "dependencies": { - "has-symbols": "^1.0.1" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/is-typedarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", - "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=" - }, - "node_modules/isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" - }, - "node_modules/isstream": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", - "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=" - }, - "node_modules/isurl": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isurl/-/isurl-1.0.0.tgz", - "integrity": "sha512-1P/yWsxPlDtn7QeRD+ULKQPaIaN6yF368GZ2vDfv0AL0NwpStafjWCDDdn0k8wgFMWpVAqG7oJhxHnlud42i9w==", - "dependencies": { - "has-to-string-tag-x": "^1.2.0", - "is-object": "^1.0.1" - }, - "engines": { - "node": ">= 4" - } - }, - "node_modules/js-sha3": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/js-sha3/-/js-sha3-0.5.7.tgz", - "integrity": "sha1-DU/9gALVMzqrr0oj7tL2N0yfKOc=" - }, - "node_modules/js-tokens": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-3.0.2.tgz", - "integrity": "sha1-mGbfOVECEw449/mWvOtlRDIJwls=" - }, - "node_modules/jsbn": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", - "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=" - }, - "node_modules/jsesc": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", - "integrity": "sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0=", - "bin": { - "jsesc": "bin/jsesc" - } - }, - "node_modules/json-buffer": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.0.tgz", - "integrity": "sha1-Wx85evx11ne96Lz8Dkfh+aPZqJg=" - }, - "node_modules/json-rpc-engine": { - "version": "5.1.8", - "resolved": "https://registry.npmjs.org/json-rpc-engine/-/json-rpc-engine-5.1.8.tgz", - "integrity": "sha512-vTBSDEPJV1fPAsbm2g5sEuPjsgLdiab2f1CTn2PyRr8nxggUpA996PDlNQDsM0gnrA99F8KIBLq2nIKrOFl1Mg==", - "dependencies": { - "async": "^2.0.1", - "eth-json-rpc-errors": "^2.0.1", - "promise-to-callback": "^1.0.0", - "safe-event-emitter": "^1.0.1" - } - }, - "node_modules/json-rpc-engine/node_modules/eth-json-rpc-errors": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/eth-json-rpc-errors/-/eth-json-rpc-errors-2.0.2.tgz", - "integrity": "sha512-uBCRM2w2ewusRHGxN8JhcuOb2RN3ueAOYH/0BhqdFmQkZx5lj5+fLKTz0mIVOzd4FG5/kUksCzCD7eTEim6gaA==", - "dependencies": { - "fast-safe-stringify": "^2.0.6" - } - }, - "node_modules/json-rpc-error": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/json-rpc-error/-/json-rpc-error-2.0.0.tgz", - "integrity": "sha1-p6+cICg4tekFxyUOVH8a/3cligI=", - "dependencies": { - "inherits": "^2.0.1" - } - }, - "node_modules/json-rpc-random-id": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json-rpc-random-id/-/json-rpc-random-id-1.0.1.tgz", - "integrity": "sha1-uknZat7RRE27jaPSA3SKy7zeyMg=" - }, - "node_modules/json-schema": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz", - "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=" - }, - "node_modules/json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==" - }, - "node_modules/json-stable-stringify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json-stable-stringify/-/json-stable-stringify-1.0.1.tgz", - "integrity": "sha1-mnWdOcXy/1A/1TAGRu1EX4jE+a8=", - "dependencies": { - "jsonify": "~0.0.0" - } - }, - "node_modules/json-stringify-safe": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", - "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=" - }, - "node_modules/json5": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/json5/-/json5-0.5.1.tgz", - "integrity": "sha1-Hq3nrMASA0rYTiOWdn6tn6VJWCE=", - "bin": { - "json5": "lib/cli.js" - } - }, - "node_modules/jsonfile": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", - "integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=", - "dependencies": { - "graceful-fs": "^4.1.6" - } - }, - "node_modules/jsonify": { - "version": "0.0.0", - "resolved": "https://registry.npmjs.org/jsonify/-/jsonify-0.0.0.tgz", - "integrity": "sha1-LHS27kHZPKUbe1qu6PUDYx0lKnM=", - "engines": { - "node": "*" - } - }, - "node_modules/jsprim": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz", - "integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=", - "engines": [ - "node >=0.6.0" - ], - "dependencies": { - "assert-plus": "1.0.0", - "extsprintf": "1.3.0", - "json-schema": "0.2.3", - "verror": "1.10.0" - } - }, - "node_modules/keccak": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/keccak/-/keccak-2.1.0.tgz", - "integrity": "sha512-m1wbJRTo+gWbctZWay9i26v5fFnYkOn7D5PCxJ3fZUGUEb49dE1Pm4BREUYCt/aoO6di7jeoGmhvqN9Nzylm3Q==", - "hasInstallScript": true, - "dependencies": { - "bindings": "^1.5.0", - "inherits": "^2.0.4", - "nan": "^2.14.0", - "safe-buffer": "^5.2.0" - }, - "engines": { - "node": ">=5.12.0" - } - }, - "node_modules/keyv": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/keyv/-/keyv-3.1.0.tgz", - "integrity": "sha512-9ykJ/46SN/9KPM/sichzQ7OvXyGDYKGTaDlKMGCAlg2UK8KRy4jb0d8sFc+0Tt0YYnThq8X2RZgCg74RPxgcVA==", - "dependencies": { - "json-buffer": "3.0.0" - } - }, - "node_modules/level-codec": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/level-codec/-/level-codec-7.0.1.tgz", - "integrity": "sha512-Ua/R9B9r3RasXdRmOtd+t9TCOEIIlts+TN/7XTT2unhDaL6sJn83S3rUyljbr6lVtw49N3/yA0HHjpV6Kzb2aQ==" - }, - "node_modules/level-errors": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/level-errors/-/level-errors-1.0.5.tgz", - "integrity": "sha512-/cLUpQduF6bNrWuAC4pwtUKA5t669pCsCi2XbmojG2tFeOr9j6ShtdDCtFFQO1DRt+EVZhx9gPzP9G2bUaG4ig==", - "dependencies": { - "errno": "~0.1.1" - } - }, - "node_modules/level-iterator-stream": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/level-iterator-stream/-/level-iterator-stream-1.3.1.tgz", - "integrity": "sha1-5Dt4sagUPm+pek9IXrjqUwNS8u0=", - "dependencies": { - "inherits": "^2.0.1", - "level-errors": "^1.0.3", - "readable-stream": "^1.0.33", - "xtend": "^4.0.0" - } - }, - "node_modules/level-iterator-stream/node_modules/isarray": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", - "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=" - }, - "node_modules/level-iterator-stream/node_modules/readable-stream": { - "version": "1.1.14", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz", - "integrity": "sha1-fPTFTvZI44EwhMY23SB54WbAgdk=", - "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.1", - "isarray": "0.0.1", - "string_decoder": "~0.10.x" - } - }, - "node_modules/level-iterator-stream/node_modules/string_decoder": { - "version": "0.10.31", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", - "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=" - }, - "node_modules/level-ws": { - "version": "0.0.0", - "resolved": "https://registry.npmjs.org/level-ws/-/level-ws-0.0.0.tgz", - "integrity": "sha1-Ny5RIXeSSgBCSwtDrvK7QkltIos=", - "dependencies": { - "readable-stream": "~1.0.15", - "xtend": "~2.1.1" - } - }, - "node_modules/level-ws/node_modules/isarray": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", - "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=" - }, - "node_modules/level-ws/node_modules/readable-stream": { - "version": "1.0.34", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz", - "integrity": "sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=", - "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.1", - "isarray": "0.0.1", - "string_decoder": "~0.10.x" - } - }, - "node_modules/level-ws/node_modules/string_decoder": { - "version": "0.10.31", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", - "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=" - }, - "node_modules/level-ws/node_modules/xtend": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/xtend/-/xtend-2.1.2.tgz", - "integrity": "sha1-bv7MKk2tjmlixJAbM3znuoe10os=", - "dependencies": { - "object-keys": "~0.4.0" - }, - "engines": { - "node": ">=0.4" - } - }, - "node_modules/levelup": { - "version": "1.3.9", - "resolved": "https://registry.npmjs.org/levelup/-/levelup-1.3.9.tgz", - "integrity": "sha512-VVGHfKIlmw8w1XqpGOAGwq6sZm2WwWLmlDcULkKWQXEA5EopA8OBNJ2Ck2v6bdk8HeEZSbCSEgzXadyQFm76sQ==", - "dependencies": { - "deferred-leveldown": "~1.2.1", - "level-codec": "~7.0.0", - "level-errors": "~1.0.3", - "level-iterator-stream": "~1.3.0", - "prr": "~1.0.1", - "semver": "~5.4.1", - "xtend": "~4.0.0" - } - }, - "node_modules/levelup/node_modules/semver": { - "version": "5.4.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.4.1.tgz", - "integrity": "sha512-WfG/X9+oATh81XtllIo/I8gOiY9EXRdv1cQdyykeXK17YcUW3EXUAi2To4pcH6nZtJPr7ZOpM5OMyWJZm+8Rsg==", - "bin": { - "semver": "bin/semver" - } - }, - "node_modules/lodash": { - "version": "4.17.15", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.15.tgz", - "integrity": "sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A==" - }, - "node_modules/lodash.flatmap": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/lodash.flatmap/-/lodash.flatmap-4.5.0.tgz", - "integrity": "sha1-74y/QI9uSCaGYzRTBcaswLd4cC4=" - }, - "node_modules/loose-envify": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", - "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", - "dependencies": { - "js-tokens": "^3.0.0 || ^4.0.0" - }, - "bin": { - "loose-envify": "cli.js" - } - }, - "node_modules/lowercase-keys": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.1.tgz", - "integrity": "sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ltgt": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/ltgt/-/ltgt-2.2.1.tgz", - "integrity": "sha1-81ypHEk/e3PaDgdJUwTxezH4fuU=" - }, - "node_modules/make-dir": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-1.3.0.tgz", - "integrity": "sha512-2w31R7SJtieJJnQtGc7RVL2StM2vGYVfqUOvUDxH6bC6aJTxPxTF0GnIgCyu7tjockiUWAYQRbxa7vKn34s5sQ==", - "dependencies": { - "pify": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/make-dir/node_modules/pify": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", - "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", - "engines": { - "node": ">=4" - } - }, - "node_modules/md5.js": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.5.tgz", - "integrity": "sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==", - "dependencies": { - "hash-base": "^3.0.0", - "inherits": "^2.0.1", - "safe-buffer": "^5.1.2" - } - }, - "node_modules/media-typer": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", - "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/memdown": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/memdown/-/memdown-1.4.1.tgz", - "integrity": "sha1-tOThkhdGZP+65BNhqlAPMRnv4hU=", - "dependencies": { - "abstract-leveldown": "~2.7.1", - "functional-red-black-tree": "^1.0.1", - "immediate": "^3.2.3", - "inherits": "~2.0.1", - "ltgt": "~2.2.0", - "safe-buffer": "~5.1.1" - } - }, - "node_modules/memdown/node_modules/abstract-leveldown": { - "version": "2.7.2", - "resolved": "https://registry.npmjs.org/abstract-leveldown/-/abstract-leveldown-2.7.2.tgz", - "integrity": "sha512-+OVvxH2rHVEhWLdbudP6p0+dNMXu8JA1CbhP19T8paTYAcX7oJ4OVjT+ZUVpv7mITxXHqDMej+GdqXBmXkw09w==", - "dependencies": { - "xtend": "~4.0.0" - } - }, - "node_modules/memdown/node_modules/safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" - }, - "node_modules/merge-descriptors": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", - "integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E=" - }, - "node_modules/merkle-patricia-tree": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/merkle-patricia-tree/-/merkle-patricia-tree-2.3.2.tgz", - "integrity": "sha512-81PW5m8oz/pz3GvsAwbauj7Y00rqm81Tzad77tHBwU7pIAtN+TJnMSOJhxBKflSVYhptMMb9RskhqHqrSm1V+g==", - "dependencies": { - "async": "^1.4.2", - "ethereumjs-util": "^5.0.0", - "level-ws": "0.0.0", - "levelup": "^1.2.1", - "memdown": "^1.0.0", - "readable-stream": "^2.0.0", - "rlp": "^2.0.0", - "semaphore": ">=1.0.1" - } - }, - "node_modules/merkle-patricia-tree/node_modules/async": { - "version": "1.5.2", - "resolved": "https://registry.npmjs.org/async/-/async-1.5.2.tgz", - "integrity": "sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo=" - }, - "node_modules/merkle-patricia-tree/node_modules/ethereumjs-util": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-5.2.0.tgz", - "integrity": "sha512-CJAKdI0wgMbQFLlLRtZKGcy/L6pzVRgelIZqRqNbuVFM3K9VEnyfbcvz0ncWMRNCe4kaHWjwRYQcYMucmwsnWA==", - "dependencies": { - "bn.js": "^4.11.0", - "create-hash": "^1.1.2", - "ethjs-util": "^0.1.3", - "keccak": "^1.0.2", - "rlp": "^2.0.0", - "safe-buffer": "^5.1.1", - "secp256k1": "^3.0.1" - } - }, - "node_modules/merkle-patricia-tree/node_modules/keccak": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/keccak/-/keccak-1.4.0.tgz", - "integrity": "sha512-eZVaCpblK5formjPjeTBik7TAg+pqnDrMHIffSvi9Lh7PQgM1+hSzakUeZFCk9DVVG0dacZJuaz2ntwlzZUIBw==", - "hasInstallScript": true, - "dependencies": { - "bindings": "^1.2.1", - "inherits": "^2.0.3", - "nan": "^2.2.1", - "safe-buffer": "^5.1.0" - }, - "engines": { - "node": ">=4.0.0" - } - }, - "node_modules/methods": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", - "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/miller-rabin": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/miller-rabin/-/miller-rabin-4.0.1.tgz", - "integrity": "sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA==", - "dependencies": { - "bn.js": "^4.0.0", - "brorand": "^1.0.1" - }, - "bin": { - "miller-rabin": "bin/miller-rabin" - } - }, - "node_modules/mime": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", - "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", - "bin": { - "mime": "cli.js" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/mime-db": { - "version": "1.44.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.44.0.tgz", - "integrity": "sha512-/NOTfLrsPBVeH7YtFPgsVWveuL+4SjjYxaQ1xtM1KMFj7HdxlBlxeyNLzhyJVx7r4rZGJAZ/6lkKCitSc/Nmpg==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/mime-types": { - "version": "2.1.27", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.27.tgz", - "integrity": "sha512-JIhqnCasI9yD+SsmkquHBxTSEuZdQX5BuQnS2Vc7puQQQ+8yiP5AY5uWhpdv4YL4VM5c6iliiYWPgJ/nJQLp7w==", - "dependencies": { - "mime-db": "1.44.0" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/mimic-response": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz", - "integrity": "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==", - "engines": { - "node": ">=4" - } - }, - "node_modules/min-document": { - "version": "2.19.0", - "resolved": "https://registry.npmjs.org/min-document/-/min-document-2.19.0.tgz", - "integrity": "sha1-e9KC4/WELtKVu3SM3Z8f+iyCRoU=", - "dependencies": { - "dom-walk": "^0.1.0" - } - }, - "node_modules/minimalistic-assert": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", - "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==" - }, - "node_modules/minimalistic-crypto-utils": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz", - "integrity": "sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo=" - }, - "node_modules/minimatch": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", - "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "node_modules/minimist": { - "version": "0.0.8", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", - "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=" - }, - "node_modules/minipass": { - "version": "2.9.0", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-2.9.0.tgz", - "integrity": "sha512-wxfUjg9WebH+CUDX/CdbRlh5SmfZiy/hpkxaRI16Y9W56Pa75sWgd/rvFilSgrauD9NyFymP/+JFV3KwzIsJeg==", - "dependencies": { - "safe-buffer": "^5.1.2", - "yallist": "^3.0.0" - } - }, - "node_modules/minizlib": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-1.3.3.tgz", - "integrity": "sha512-6ZYMOEnmVsdCeTJVE0W9ZD+pVnE8h9Hma/iOwwRDsdQoePpoX56/8B6z3P9VNwppJuBKNRuFDRNRqRWexT9G9Q==", - "dependencies": { - "minipass": "^2.9.0" - } - }, - "node_modules/mkdirp": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", - "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", - "dependencies": { - "minimist": "0.0.8" - }, - "bin": { - "mkdirp": "bin/cmd.js" - } - }, - "node_modules/mkdirp-promise": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/mkdirp-promise/-/mkdirp-promise-5.0.1.tgz", - "integrity": "sha1-6bj2jlUsaKnBcTuEiD96HdA5uKE=", - "dependencies": { - "mkdirp": "*" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/mocha": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/mocha/-/mocha-5.2.0.tgz", - "integrity": "sha512-2IUgKDhc3J7Uug+FxMXuqIyYzH7gJjXECKe/w43IGgQHTSj3InJi+yAA7T24L9bQMRKiUEHxEX37G5JpVUGLcQ==", - "dev": true, - "dependencies": { - "browser-stdout": "1.3.1", - "commander": "2.15.1", - "debug": "3.1.0", - "diff": "3.5.0", - "escape-string-regexp": "1.0.5", - "glob": "7.1.2", - "growl": "1.10.5", - "he": "1.1.1", - "minimatch": "3.0.4", - "mkdirp": "0.5.1", - "supports-color": "5.4.0" - }, - "bin": { - "_mocha": "bin/_mocha", - "mocha": "bin/mocha" - }, - "engines": { - "node": ">= 4.0.0" - } - }, - "node_modules/mocha/node_modules/commander": { - "version": "2.15.1", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.15.1.tgz", - "integrity": "sha512-VlfT9F3V0v+jr4yxPc5gg9s62/fIVWsd2Bk2iD435um1NlGMYdVCq+MjcXnhYq2icNOizHr1kK+5TI6H0Hy0ag==", - "dev": true - }, - "node_modules/mocha/node_modules/debug": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", - "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", - "dev": true, - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/mock-fs": { - "version": "4.12.0", - "resolved": "https://registry.npmjs.org/mock-fs/-/mock-fs-4.12.0.tgz", - "integrity": "sha512-/P/HtrlvBxY4o/PzXY9cCNBrdylDNxg7gnrv2sMNxj+UJ2m8jSpl0/A6fuJeNAWr99ZvGWH8XCbE0vmnM5KupQ==" - }, - "node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" - }, - "node_modules/nan": { - "version": "2.14.1", - "resolved": "https://registry.npmjs.org/nan/-/nan-2.14.1.tgz", - "integrity": "sha512-isWHgVjnFjh2x2yuJ/tj3JbwoHu3UC2dX5G/88Cm24yB6YopVgxvBObDY7n5xW6ExmFhJpSEQqFPvq9zaXc8Jw==" - }, - "node_modules/nano-json-stream-parser": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/nano-json-stream-parser/-/nano-json-stream-parser-0.1.2.tgz", - "integrity": "sha1-DMj20OK2IrR5xA1JnEbWS3Vcb18=" - }, - "node_modules/negotiator": { - "version": "0.6.2", - "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.2.tgz", - "integrity": "sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/next-tick": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/next-tick/-/next-tick-1.0.0.tgz", - "integrity": "sha1-yobR/ogoFpsBICCOPchCS524NCw=" - }, - "node_modules/node-fetch": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.1.2.tgz", - "integrity": "sha1-q4hOjn5X44qUR1POxwb3iNF2i7U=", - "engines": { - "node": "4.x || >=6.0.0" - } - }, - "node_modules/normalize-url": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-4.5.0.tgz", - "integrity": "sha512-2s47yzUxdexf1OhyRi4Em83iQk0aPvwTddtFz4hnSSw9dCEsLEGf6SwIO8ss/19S9iBb5sJaOuTvTGDeZI00BQ==", - "engines": { - "node": ">=8" - } - }, - "node_modules/number-to-bn": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/number-to-bn/-/number-to-bn-1.7.0.tgz", - "integrity": "sha1-uzYjWS9+X54AMLGXe9QaDFP+HqA=", - "dependencies": { - "bn.js": "4.11.6", - "strip-hex-prefix": "1.0.0" - }, - "engines": { - "node": ">=6.5.0", - "npm": ">=3" - } - }, - "node_modules/number-to-bn/node_modules/bn.js": { - "version": "4.11.6", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.6.tgz", - "integrity": "sha1-UzRK2xRhehP26N0s4okF0cC6MhU=" - }, - "node_modules/oauth-sign": { - "version": "0.9.0", - "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz", - "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==", - "engines": { - "node": "*" - } - }, - "node_modules/object-assign": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/object-inspect": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.7.0.tgz", - "integrity": "sha512-a7pEHdh1xKIAgTySUGgLMx/xwDZskN1Ud6egYYN3EdRW4ZMPNEDUTF+hwy2LUC+Bl+SyLXANnwz/jyh/qutKUw==" - }, - "node_modules/object-is": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/object-is/-/object-is-1.1.2.tgz", - "integrity": "sha512-5lHCz+0uufF6wZ7CRFWJN3hp8Jqblpgve06U5CMQ3f//6iDjPr2PEo9MWCjEssDsa+UZEL4PkFpr+BMop6aKzQ==", - "dependencies": { - "define-properties": "^1.1.3", - "es-abstract": "^1.17.5" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/object-keys": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-0.4.0.tgz", - "integrity": "sha1-KKaq50KN0sOpLz2V8hM13SBOAzY=" - }, - "node_modules/object.assign": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.0.tgz", - "integrity": "sha512-exHJeq6kBKj58mqGyTQ9DFvrZC/eR6OwxzoM9YRoGBqrXYonaFyGiFMuc9VZrXf7DarreEwMpurG3dd+CNyW5w==", - "dependencies": { - "define-properties": "^1.1.2", - "function-bind": "^1.1.1", - "has-symbols": "^1.0.0", - "object-keys": "^1.0.11" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/object.assign/node_modules/object-keys": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", - "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/oboe": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/oboe/-/oboe-2.1.4.tgz", - "integrity": "sha1-IMiM2wwVNxuwQRklfU/dNLCqSfY=", - "dependencies": { - "http-https": "^1.0.0" - } - }, - "node_modules/on-finished": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", - "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=", - "dependencies": { - "ee-first": "1.1.1" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", - "dependencies": { - "wrappy": "1" - } - }, - "node_modules/original-require": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/original-require/-/original-require-1.0.1.tgz", - "integrity": "sha1-DxMEcVhM0zURxew4yNWSE/msXiA=", - "dev": true - }, - "node_modules/os-homedir": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz", - "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/os-tmpdir": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", - "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/p-cancelable": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-1.1.0.tgz", - "integrity": "sha512-s73XxOZ4zpt1edZYZzvhqFa6uvQc1vwUa0K0BdtIZgQMAJj9IbebH+JkgKZc9h+B05PKHLOTl4ajG1BmNrVZlw==", - "engines": { - "node": ">=6" - } - }, - "node_modules/p-finally": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", - "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=", - "engines": { - "node": ">=4" - } - }, - "node_modules/p-timeout": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/p-timeout/-/p-timeout-1.2.1.tgz", - "integrity": "sha1-XrOzU7f86Z8QGhA4iAuwVOu+o4Y=", - "dependencies": { - "p-finally": "^1.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/parse-asn1": { - "version": "5.1.5", - "resolved": "https://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.5.tgz", - "integrity": "sha512-jkMYn1dcJqF6d5CpU689bq7w/b5ALS9ROVSpQDPrZsqqesUJii9qutvoT5ltGedNXMO2e16YUWIghG9KxaViTQ==", - "dependencies": { - "asn1.js": "^4.0.0", - "browserify-aes": "^1.0.0", - "create-hash": "^1.1.0", - "evp_bytestokey": "^1.0.0", - "pbkdf2": "^3.0.3", - "safe-buffer": "^5.1.1" - } - }, - "node_modules/parse-headers": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/parse-headers/-/parse-headers-2.0.3.tgz", - "integrity": "sha512-QhhZ+DCCit2Coi2vmAKbq5RGTRcQUOE2+REgv8vdyu7MnYx2eZztegqtTx99TZ86GTIwqiy3+4nQTWZ2tgmdCA==" - }, - "node_modules/parseurl": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", - "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/path-is-absolute": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/path-parse": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz", - "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==" - }, - "node_modules/path-to-regexp": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", - "integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w=" - }, - "node_modules/pbkdf2": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.1.1.tgz", - "integrity": "sha512-4Ejy1OPxi9f2tt1rRV7Go7zmfDQ+ZectEQz3VGUQhgq62HtIRPDyG/JtnwIxs6x3uNMwo2V7q1fMvKjb+Tnpqg==", - "dependencies": { - "create-hash": "^1.1.2", - "create-hmac": "^1.1.4", - "ripemd160": "^2.0.1", - "safe-buffer": "^5.0.1", - "sha.js": "^2.4.8" - }, - "engines": { - "node": ">=0.12" - } - }, - "node_modules/pend": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz", - "integrity": "sha1-elfrVQpng/kRUzH89GY9XI4AelA=" - }, - "node_modules/performance-now": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", - "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=" - }, - "node_modules/pify": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/pinkie": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz", - "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA=", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/pinkie-promise": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz", - "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=", - "dependencies": { - "pinkie": "^2.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/precond": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/precond/-/precond-0.2.3.tgz", - "integrity": "sha1-qpWRvKokkj8eD0hJ0kD0fvwQdaw=", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/prepend-http": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-2.0.0.tgz", - "integrity": "sha1-6SQ0v6XqjBn0HN/UAddBo8gZ2Jc=", - "engines": { - "node": ">=4" - } - }, - "node_modules/private": { - "version": "0.1.8", - "resolved": "https://registry.npmjs.org/private/-/private-0.1.8.tgz", - "integrity": "sha512-VvivMrbvd2nKkiG38qjULzlc+4Vx4wm/whI9pQD35YrARNnhxeiRktSOhSukRLFNlzg6Br/cJPet5J/u19r/mg==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/process": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/process/-/process-0.5.2.tgz", - "integrity": "sha1-FjjYqONML0QKkduVq5rrZ3/Bhc8=", - "engines": { - "node": ">= 0.6.0" - } - }, - "node_modules/process-nextick-args": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", - "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==" - }, - "node_modules/promise-to-callback": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/promise-to-callback/-/promise-to-callback-1.0.0.tgz", - "integrity": "sha1-XSp0kBC/tn2WNZj805YHRqaP7vc=", - "dependencies": { - "is-fn": "^1.0.0", - "set-immediate-shim": "^1.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/proxy-addr": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.6.tgz", - "integrity": "sha512-dh/frvCBVmSsDYzw6n926jv974gddhkFPfiN8hPOi30Wax25QZyZEGveluCgliBnqmuM+UJmBErbAUFIoDbjOw==", - "dependencies": { - "forwarded": "~0.1.2", - "ipaddr.js": "1.9.1" - }, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/prr": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/prr/-/prr-1.0.1.tgz", - "integrity": "sha1-0/wRS6BplaRexok/SEzrHXj19HY=" - }, - "node_modules/psl": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/psl/-/psl-1.8.0.tgz", - "integrity": "sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ==" - }, - "node_modules/public-encrypt": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/public-encrypt/-/public-encrypt-4.0.3.tgz", - "integrity": "sha512-zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q==", - "dependencies": { - "bn.js": "^4.1.0", - "browserify-rsa": "^4.0.0", - "create-hash": "^1.1.0", - "parse-asn1": "^5.0.0", - "randombytes": "^2.0.1", - "safe-buffer": "^5.1.2" - } - }, - "node_modules/pump": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", - "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", - "dependencies": { - "end-of-stream": "^1.1.0", - "once": "^1.3.1" - } - }, - "node_modules/punycode": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", - "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", - "engines": { - "node": ">=6" - } - }, - "node_modules/qs": { - "version": "6.7.0", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.7.0.tgz", - "integrity": "sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ==", - "engines": { - "node": ">=0.6" - } - }, - "node_modules/query-string": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/query-string/-/query-string-5.1.1.tgz", - "integrity": "sha512-gjWOsm2SoGlgLEdAGt7a6slVOk9mGiXmPFMqrEhLQ68rhQuBnpfs3+EmlvqKyxnCo9/PPlF+9MtY02S1aFg+Jw==", - "dependencies": { - "decode-uri-component": "^0.2.0", - "object-assign": "^4.1.0", - "strict-uri-encode": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/randombytes": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", - "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", - "dependencies": { - "safe-buffer": "^5.1.0" - } - }, - "node_modules/randomfill": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/randomfill/-/randomfill-1.0.4.tgz", - "integrity": "sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw==", - "dependencies": { - "randombytes": "^2.0.5", - "safe-buffer": "^5.1.0" - } - }, - "node_modules/randomhex": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/randomhex/-/randomhex-0.1.5.tgz", - "integrity": "sha1-us7vmCMpCRQA8qKRLGzQLxCU9YU=" - }, - "node_modules/range-parser": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", - "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/raw-body": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.4.0.tgz", - "integrity": "sha512-4Oz8DUIwdvoa5qMJelxipzi/iJIi40O5cGV1wNYp5hvZP8ZN0T+jiNkL0QepXs+EsQ9XJ8ipEDoiH70ySUJP3Q==", - "dependencies": { - "bytes": "3.1.0", - "http-errors": "1.7.2", - "iconv-lite": "0.4.24", - "unpipe": "1.0.0" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/readable-stream": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", - "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "node_modules/readable-stream/node_modules/safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" - }, - "node_modules/regenerate": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.1.tgz", - "integrity": "sha512-j2+C8+NtXQgEKWk49MMP5P/u2GhnahTtVkRIHr5R5lVRlbKvmQ+oS+A5aLKWp2ma5VkT8sh6v+v4hbH0YHR66A==" - }, - "node_modules/regenerator-runtime": { - "version": "0.13.5", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.5.tgz", - "integrity": "sha512-ZS5w8CpKFinUzOwW3c83oPeVXoNsrLsaCoLtJvAClH135j/R77RuymhiSErhm2lKcwSCIpmvIWSbDkIfAqKQlA==" - }, - "node_modules/regenerator-transform": { - "version": "0.10.1", - "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.10.1.tgz", - "integrity": "sha512-PJepbvDbuK1xgIgnau7Y90cwaAmO/LCLMI2mPvaXq2heGMR3aWW5/BQvYrhJ8jgmQjXewXvBjzfqKcVOmhjZ6Q==", - "dependencies": { - "babel-runtime": "^6.18.0", - "babel-types": "^6.19.0", - "private": "^0.1.6" - } - }, - "node_modules/regexp.prototype.flags": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.3.0.tgz", - "integrity": "sha512-2+Q0C5g951OlYlJz6yu5/M33IcsESLlLfsyIaLJaG4FA2r4yP8MvVMJUUP/fVBkSpbbbZlS5gynbEWLipiiXiQ==", - "dependencies": { - "define-properties": "^1.1.3", - "es-abstract": "^1.17.0-next.1" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/regexpu-core": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-2.0.0.tgz", - "integrity": "sha1-SdA4g3uNz4v6W5pCE5k45uoq4kA=", - "dependencies": { - "regenerate": "^1.2.1", - "regjsgen": "^0.2.0", - "regjsparser": "^0.1.4" - } - }, - "node_modules/regjsgen": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.2.0.tgz", - "integrity": "sha1-bAFq3qxVT3WCP+N6wFuS1aTtsfc=" - }, - "node_modules/regjsparser": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.1.5.tgz", - "integrity": "sha1-fuj4Tcb6eS0/0K4ijSS9lJ6tIFw=", - "dependencies": { - "jsesc": "~0.5.0" - }, - "bin": { - "regjsparser": "bin/parser" - } - }, - "node_modules/repeating": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/repeating/-/repeating-2.0.1.tgz", - "integrity": "sha1-UhTFOpJtNVJwdSf7q0FdvAjQbdo=", - "dependencies": { - "is-finite": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/request": { - "version": "2.88.2", - "resolved": "https://registry.npmjs.org/request/-/request-2.88.2.tgz", - "integrity": "sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw==", - "dependencies": { - "aws-sign2": "~0.7.0", - "aws4": "^1.8.0", - "caseless": "~0.12.0", - "combined-stream": "~1.0.6", - "extend": "~3.0.2", - "forever-agent": "~0.6.1", - "form-data": "~2.3.2", - "har-validator": "~5.1.3", - "http-signature": "~1.2.0", - "is-typedarray": "~1.0.0", - "isstream": "~0.1.2", - "json-stringify-safe": "~5.0.1", - "mime-types": "~2.1.19", - "oauth-sign": "~0.9.0", - "performance-now": "^2.1.0", - "qs": "~6.5.2", - "safe-buffer": "^5.1.2", - "tough-cookie": "~2.5.0", - "tunnel-agent": "^0.6.0", - "uuid": "^3.3.2" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/request/node_modules/qs": { - "version": "6.5.2", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz", - "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==", - "engines": { - "node": ">=0.6" - } - }, - "node_modules/resolve": { - "version": "1.17.0", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.17.0.tgz", - "integrity": "sha512-ic+7JYiV8Vi2yzQGFWOkiZD5Z9z7O2Zhm9XMaTxdJExKasieFCr+yXZ/WmXsckHiKl12ar0y6XiXDx3m4RHn1w==", - "dependencies": { - "path-parse": "^1.0.6" - } - }, - "node_modules/responselike": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/responselike/-/responselike-1.0.2.tgz", - "integrity": "sha1-kYcg7ztjHFZCvgaPFa3lpG9Loec=", - "dependencies": { - "lowercase-keys": "^1.0.0" - } - }, - "node_modules/resumer": { - "version": "0.0.0", - "resolved": "https://registry.npmjs.org/resumer/-/resumer-0.0.0.tgz", - "integrity": "sha1-8ej0YeQGS6Oegq883CqMiT0HZ1k=", - "dependencies": { - "through": "~2.3.4" - } - }, - "node_modules/ripemd160": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.2.tgz", - "integrity": "sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==", - "dependencies": { - "hash-base": "^3.0.0", - "inherits": "^2.0.1" - } - }, - "node_modules/rlp": { - "version": "2.2.5", - "resolved": "https://registry.npmjs.org/rlp/-/rlp-2.2.5.tgz", - "integrity": "sha512-y1QxTQOp0OZnjn19FxBmped4p+BSKPHwGndaqrESseyd2xXZtcgR3yuTIosh8CaMaOii9SKIYerBXnV/CpJ3qw==", - "dependencies": { - "bn.js": "^4.11.1" - }, - "bin": { - "rlp": "bin/rlp" - } - }, - "node_modules/rustbn.js": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/rustbn.js/-/rustbn.js-0.2.0.tgz", - "integrity": "sha512-4VlvkRUuCJvr2J6Y0ImW7NvTCriMi7ErOAqWk1y69vAdoNIzCF3yPmgeNzx+RQTLEDFq5sHfscn1MwHxP9hNfA==" - }, - "node_modules/safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==" - }, - "node_modules/safe-event-emitter": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/safe-event-emitter/-/safe-event-emitter-1.0.1.tgz", - "integrity": "sha512-e1wFe99A91XYYxoQbcq2ZJUWurxEyP8vfz7A7vuUe1s95q8r5ebraVaA1BukYJcpM6V16ugWoD9vngi8Ccu5fg==", - "dependencies": { - "events": "^3.0.0" - } - }, - "node_modules/safer-buffer": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" - }, - "node_modules/scrypt-js": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/scrypt-js/-/scrypt-js-2.0.3.tgz", - "integrity": "sha1-uwBAvgMEPamgEqLOqfyfhSz8h9Q=" - }, - "node_modules/scryptsy": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/scryptsy/-/scryptsy-2.1.0.tgz", - "integrity": "sha512-1CdSqHQowJBnMAFyPEBRfqag/YP9OF394FV+4YREIJX4ljD7OxvQRDayyoyyCk+senRjSkP6VnUNQmVQqB6g7w==" - }, - "node_modules/secp256k1": { - "version": "3.8.0", - "resolved": "https://registry.npmjs.org/secp256k1/-/secp256k1-3.8.0.tgz", - "integrity": "sha512-k5ke5avRZbtl9Tqx/SA7CbY3NF6Ro+Sj9cZxezFzuBlLDmyqPiL8hJJ+EmzD8Ig4LUDByHJ3/iPOVoRixs/hmw==", - "hasInstallScript": true, - "dependencies": { - "bindings": "^1.5.0", - "bip66": "^1.1.5", - "bn.js": "^4.11.8", - "create-hash": "^1.2.0", - "drbg.js": "^1.0.1", - "elliptic": "^6.5.2", - "nan": "^2.14.0", - "safe-buffer": "^5.1.2" - }, - "engines": { - "node": ">=4.0.0" - } - }, - "node_modules/seek-bzip": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/seek-bzip/-/seek-bzip-1.0.5.tgz", - "integrity": "sha1-z+kXyz0nS8/6x5J1ivUxc+sfq9w=", - "dependencies": { - "commander": "~2.8.1" - }, - "bin": { - "seek-bunzip": "bin/seek-bunzip", - "seek-table": "bin/seek-bzip-table" - } - }, - "node_modules/semaphore": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/semaphore/-/semaphore-1.1.0.tgz", - "integrity": "sha512-O4OZEaNtkMd/K0i6js9SL+gqy0ZCBMgUvlSqHKi4IBdjhe7wB8pwztUk1BbZ1fmrvpwFrPbHzqd2w5pTcJH6LA==", - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/semver": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.2.0.tgz", - "integrity": "sha512-jdFC1VdUGT/2Scgbimf7FSx9iJLXoqfglSF+gJeuNWVpiE37OIbc1jywR/GJyFdz3mnkz2/id0L0J/cr0izR5A==", - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/send": { - "version": "0.17.1", - "resolved": "https://registry.npmjs.org/send/-/send-0.17.1.tgz", - "integrity": "sha512-BsVKsiGcQMFwT8UxypobUKyv7irCNRHk1T0G680vk88yf6LBByGcZJOTJCrTP2xVN6yI+XjPJcNuE3V4fT9sAg==", - "dependencies": { - "debug": "2.6.9", - "depd": "~1.1.2", - "destroy": "~1.0.4", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "etag": "~1.8.1", - "fresh": "0.5.2", - "http-errors": "~1.7.2", - "mime": "1.6.0", - "ms": "2.1.1", - "on-finished": "~2.3.0", - "range-parser": "~1.2.1", - "statuses": "~1.5.0" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/send/node_modules/ms": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", - "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==" - }, - "node_modules/serve-static": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.14.1.tgz", - "integrity": "sha512-JMrvUwE54emCYWlTI+hGrGv5I8dEwmco/00EvkzIIsR7MqrHonbD9pO2MOfFnpFntl7ecpZs+3mW+XbQZu9QCg==", - "dependencies": { - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "parseurl": "~1.3.3", - "send": "0.17.1" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/servify": { - "version": "0.1.12", - "resolved": "https://registry.npmjs.org/servify/-/servify-0.1.12.tgz", - "integrity": "sha512-/xE6GvsKKqyo1BAY+KxOWXcLpPsUUyji7Qg3bVD7hh1eRze5bR1uYiuDA/k3Gof1s9BTzQZEJK8sNcNGFIzeWw==", - "dependencies": { - "body-parser": "^1.16.0", - "cors": "^2.8.1", - "express": "^4.14.0", - "request": "^2.79.0", - "xhr": "^2.3.3" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/set-immediate-shim": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/set-immediate-shim/-/set-immediate-shim-1.0.1.tgz", - "integrity": "sha1-SysbJ+uAip+NzEgaWOXlb1mfP2E=", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/setimmediate": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", - "integrity": "sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU=" - }, - "node_modules/setprototypeof": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.1.tgz", - "integrity": "sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw==" - }, - "node_modules/sha.js": { - "version": "2.4.11", - "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz", - "integrity": "sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==", - "dependencies": { - "inherits": "^2.0.1", - "safe-buffer": "^5.0.1" - }, - "bin": { - "sha.js": "bin.js" - } - }, - "node_modules/simple-concat": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/simple-concat/-/simple-concat-1.0.0.tgz", - "integrity": "sha1-c0TLuLbib7J9ZrL8hvn21Zl1IcY=" - }, - "node_modules/simple-get": { - "version": "2.8.1", - "resolved": "https://registry.npmjs.org/simple-get/-/simple-get-2.8.1.tgz", - "integrity": "sha512-lSSHRSw3mQNUGPAYRqo7xy9dhKmxFXIjLjp4KHpf99GEH2VH7C3AM+Qfx6du6jhfUi6Vm7XnbEVEf7Wb6N8jRw==", - "dependencies": { - "decompress-response": "^3.3.0", - "once": "^1.3.1", - "simple-concat": "^1.0.0" - } - }, - "node_modules/slash": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-1.0.0.tgz", - "integrity": "sha1-xB8vbDn8FtHNF61LXYlhFK5HDVU=", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/source-map-support": { - "version": "0.5.19", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.19.tgz", - "integrity": "sha512-Wonm7zOCIJzBGQdB+thsPar0kYuCIzYvxZwlBa87yi/Mdjv7Tip2cyVbLj5o0cFPN4EVkuTwb3GDDyUx2DGnGw==", - "dependencies": { - "buffer-from": "^1.0.0", - "source-map": "^0.6.0" - } - }, - "node_modules/source-map-support/node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/sshpk": { - "version": "1.16.1", - "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.16.1.tgz", - "integrity": "sha512-HXXqVUq7+pcKeLqqZj6mHFUMvXtOJt1uoUx09pFW6011inTMxqI8BA8PM95myrIyyKwdnzjdFjLiE6KBPVtJIg==", - "dependencies": { - "asn1": "~0.2.3", - "assert-plus": "^1.0.0", - "bcrypt-pbkdf": "^1.0.0", - "dashdash": "^1.12.0", - "ecc-jsbn": "~0.1.1", - "getpass": "^0.1.1", - "jsbn": "~0.1.0", - "safer-buffer": "^2.0.2", - "tweetnacl": "~0.14.0" - }, - "bin": { - "sshpk-conv": "bin/sshpk-conv", - "sshpk-sign": "bin/sshpk-sign", - "sshpk-verify": "bin/sshpk-verify" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/statuses": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", - "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/strict-uri-encode": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/strict-uri-encode/-/strict-uri-encode-1.1.0.tgz", - "integrity": "sha1-J5siXfHVgrH1TmWt3UNS4Y+qBxM=", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dependencies": { - "safe-buffer": "~5.1.0" - } - }, - "node_modules/string_decoder/node_modules/safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" - }, - "node_modules/string.prototype.trim": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.1.tgz", - "integrity": "sha512-MjGFEeqixw47dAMFMtgUro/I0+wNqZB5GKXGt1fFr24u3TzDXCPu7J9Buppzoe3r/LqkSDLDDJzE15RGWDGAVw==", - "dependencies": { - "define-properties": "^1.1.3", - "es-abstract": "^1.17.0-next.1", - "function-bind": "^1.1.1" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/string.prototype.trimend": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.1.tgz", - "integrity": "sha512-LRPxFUaTtpqYsTeNKaFOw3R4bxIzWOnbQ837QfBylo8jIxtcbK/A/sMV7Q+OAV/vWo+7s25pOE10KYSjaSO06g==", - "dependencies": { - "define-properties": "^1.1.3", - "es-abstract": "^1.17.5" - } - }, - "node_modules/string.prototype.trimstart": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.1.tgz", - "integrity": "sha512-XxZn+QpvrBI1FOcg6dIpxUPgWCPuNXvMD72aaRaUQv1eD4e/Qy8i/hFTe0BUmD60p/QA6bh1avmuPTfNjqVWRw==", - "dependencies": { - "define-properties": "^1.1.3", - "es-abstract": "^1.17.5" - } - }, - "node_modules/strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", - "dependencies": { - "ansi-regex": "^2.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/strip-dirs": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/strip-dirs/-/strip-dirs-2.1.0.tgz", - "integrity": "sha512-JOCxOeKLm2CAS73y/U4ZeZPTkE+gNVCzKt7Eox84Iej1LT/2pTWYpZKJuxwQpvX1LiZb1xokNR7RLfuBAa7T3g==", - "dependencies": { - "is-natural-number": "^4.0.1" - } - }, - "node_modules/strip-hex-prefix": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/strip-hex-prefix/-/strip-hex-prefix-1.0.0.tgz", - "integrity": "sha1-DF8VX+8RUTczd96du1iNoFUA428=", - "dependencies": { - "is-hex-prefixed": "1.0.0" - }, - "engines": { - "node": ">=6.5.0", - "npm": ">=3" - } - }, - "node_modules/supports-color": { - "version": "5.4.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.4.0.tgz", - "integrity": "sha512-zjaXglF5nnWpsq470jSv6P9DwPvgLkuapYmfDm3JWOm0vkNTVF2tI4UrN2r6jH1qM/uc/WtxYY1hYoA2dOKj5w==", - "dev": true, - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/swarm-js": { - "version": "0.1.39", - "resolved": "https://registry.npmjs.org/swarm-js/-/swarm-js-0.1.39.tgz", - "integrity": "sha512-QLMqL2rzF6n5s50BptyD6Oi0R1aWlJC5Y17SRIVXRj6OR1DRIPM7nepvrxxkjA1zNzFz6mUOMjfeqeDaWB7OOg==", - "dependencies": { - "bluebird": "^3.5.0", - "buffer": "^5.0.5", - "decompress": "^4.0.0", - "eth-lib": "^0.1.26", - "fs-extra": "^4.0.2", - "got": "^7.1.0", - "mime-types": "^2.1.16", - "mkdirp-promise": "^5.0.1", - "mock-fs": "^4.1.0", - "setimmediate": "^1.0.5", - "tar": "^4.0.2", - "xhr-request-promise": "^0.1.2" - } - }, - "node_modules/swarm-js/node_modules/get-stream": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz", - "integrity": "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=", - "engines": { - "node": ">=4" - } - }, - "node_modules/swarm-js/node_modules/got": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/got/-/got-7.1.0.tgz", - "integrity": "sha512-Y5WMo7xKKq1muPsxD+KmrR8DH5auG7fBdDVueZwETwV6VytKyU9OX/ddpq2/1hp1vIPvVb4T81dKQz3BivkNLw==", - "dependencies": { - "decompress-response": "^3.2.0", - "duplexer3": "^0.1.4", - "get-stream": "^3.0.0", - "is-plain-obj": "^1.1.0", - "is-retry-allowed": "^1.0.0", - "is-stream": "^1.0.0", - "isurl": "^1.0.0-alpha5", - "lowercase-keys": "^1.0.0", - "p-cancelable": "^0.3.0", - "p-timeout": "^1.1.1", - "safe-buffer": "^5.0.1", - "timed-out": "^4.0.0", - "url-parse-lax": "^1.0.0", - "url-to-options": "^1.0.1" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/swarm-js/node_modules/p-cancelable": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-0.3.0.tgz", - "integrity": "sha512-RVbZPLso8+jFeq1MfNvgXtCRED2raz/dKpacfTNxsx6pLEpEomM7gah6VeHSYV3+vo0OAi4MkArtQcWWXuQoyw==", - "engines": { - "node": ">=4" - } - }, - "node_modules/swarm-js/node_modules/prepend-http": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-1.0.4.tgz", - "integrity": "sha1-1PRWKwzjaW5BrFLQ4ALlemNdxtw=", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/swarm-js/node_modules/url-parse-lax": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-1.0.0.tgz", - "integrity": "sha1-evjzA2Rem9eaJy56FKxovAYJ2nM=", - "dependencies": { - "prepend-http": "^1.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/tape": { - "version": "4.13.3", - "resolved": "https://registry.npmjs.org/tape/-/tape-4.13.3.tgz", - "integrity": "sha512-0/Y20PwRIUkQcTCSi4AASs+OANZZwqPKaipGCEwp10dQMipVvSZwUUCi01Y/OklIGyHKFhIcjock+DKnBfLAFw==", - "dependencies": { - "deep-equal": "~1.1.1", - "defined": "~1.0.0", - "dotignore": "~0.1.2", - "for-each": "~0.3.3", - "function-bind": "~1.1.1", - "glob": "~7.1.6", - "has": "~1.0.3", - "inherits": "~2.0.4", - "is-regex": "~1.0.5", - "minimist": "~1.2.5", - "object-inspect": "~1.7.0", - "resolve": "~1.17.0", - "resumer": "~0.0.0", - "string.prototype.trim": "~1.2.1", - "through": "~2.3.8" - }, - "bin": { - "tape": "bin/tape" - } - }, - "node_modules/tape/node_modules/glob": { - "version": "7.1.6", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", - "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" - } - }, - "node_modules/tape/node_modules/minimist": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", - "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==" - }, - "node_modules/tar": { - "version": "4.4.13", - "resolved": "https://registry.npmjs.org/tar/-/tar-4.4.13.tgz", - "integrity": "sha512-w2VwSrBoHa5BsSyH+KxEqeQBAllHhccyMFVHtGtdMpF4W7IRWfZjFiQceJPChOeTsSDVUpER2T8FA93pr0L+QA==", - "dependencies": { - "chownr": "^1.1.1", - "fs-minipass": "^1.2.5", - "minipass": "^2.8.6", - "minizlib": "^1.2.1", - "mkdirp": "^0.5.0", - "safe-buffer": "^5.1.2", - "yallist": "^3.0.3" - }, - "engines": { - "node": ">=4.5" - } - }, - "node_modules/tar-stream": { - "version": "1.6.2", - "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-1.6.2.tgz", - "integrity": "sha512-rzS0heiNf8Xn7/mpdSVVSMAWAoy9bfb1WOTYC78Z0UQKeKa/CWS8FOq0lKGNa8DWKAn9gxjCvMLYc5PGXYlK2A==", - "dependencies": { - "bl": "^1.0.0", - "buffer-alloc": "^1.2.0", - "end-of-stream": "^1.0.0", - "fs-constants": "^1.0.0", - "readable-stream": "^2.3.0", - "to-buffer": "^1.1.1", - "xtend": "^4.0.0" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/through": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", - "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=" - }, - "node_modules/through2": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", - "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", - "dependencies": { - "readable-stream": "~2.3.6", - "xtend": "~4.0.1" - } - }, - "node_modules/timed-out": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/timed-out/-/timed-out-4.0.1.tgz", - "integrity": "sha1-8y6srFoXW+ol1/q1Zas+2HQe9W8=", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/to-buffer": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/to-buffer/-/to-buffer-1.1.1.tgz", - "integrity": "sha512-lx9B5iv7msuFYE3dytT+KE5tap+rNYw+K4jVkb9R/asAb+pbBSM17jtunHplhBe6RRJdZx3Pn2Jph24O32mOVg==" - }, - "node_modules/to-fast-properties": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", - "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=", - "engines": { - "node": ">=4" - } - }, - "node_modules/to-readable-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/to-readable-stream/-/to-readable-stream-1.0.0.tgz", - "integrity": "sha512-Iq25XBt6zD5npPhlLVXGFN3/gyR2/qODcKNNyTMd4vbm39HUaOiAM4PMq0eMVC/Tkxz+Zjdsc55g9yyz+Yq00Q==", - "engines": { - "node": ">=6" - } - }, - "node_modules/toidentifier": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.0.tgz", - "integrity": "sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw==", - "engines": { - "node": ">=0.6" - } - }, - "node_modules/tough-cookie": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz", - "integrity": "sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==", - "dependencies": { - "psl": "^1.1.28", - "punycode": "^2.1.1" - }, - "engines": { - "node": ">=0.8" - } - }, - "node_modules/trim-right": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/trim-right/-/trim-right-1.0.1.tgz", - "integrity": "sha1-yy4SAwZ+DI3h9hQJS5/kVwTqYAM=", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/truffle": { - "version": "5.1.33", - "resolved": "https://registry.npmjs.org/truffle/-/truffle-5.1.33.tgz", - "integrity": "sha512-zV220OC6YtKSOViA+eQpU61orAlNX4msDogecUsjsxjH0MZGIVPMfsh1LiA817KXIg1uEM7G5XPjTaCJeRB8iw==", - "dev": true, - "hasInstallScript": true, - "dependencies": { - "app-module-path": "^2.2.0", - "mocha": "5.2.0", - "original-require": "1.0.1" - }, - "bin": { - "truffle": "build/cli.bundled.js" - } - }, - "node_modules/tunnel-agent": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", - "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=", - "dependencies": { - "safe-buffer": "^5.0.1" - }, - "engines": { - "node": "*" - } - }, - "node_modules/tweetnacl": { - "version": "0.14.5", - "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", - "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=" - }, - "node_modules/type": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/type/-/type-1.2.0.tgz", - "integrity": "sha512-+5nt5AAniqsCnu2cEQQdpzCAh33kVx8n0VoFidKpB1dVVLAN/F+bgVOqOJqOnEnrhp222clB5p3vUlD+1QAnfg==" - }, - "node_modules/type-is": { - "version": "1.6.18", - "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", - "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", - "dependencies": { - "media-typer": "0.3.0", - "mime-types": "~2.1.24" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/typedarray": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", - "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=" - }, - "node_modules/typedarray-to-buffer": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz", - "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==", - "dependencies": { - "is-typedarray": "^1.0.0" - } - }, - "node_modules/ultron": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/ultron/-/ultron-1.1.1.tgz", - "integrity": "sha512-UIEXBNeYmKptWH6z8ZnqTeS8fV74zG0/eRU9VGkpzz+LIJNs8W/zM/L+7ctCkRrgbNnnR0xxw4bKOr0cW0N0Og==" - }, - "node_modules/unbzip2-stream": { - "version": "1.4.3", - "resolved": "https://registry.npmjs.org/unbzip2-stream/-/unbzip2-stream-1.4.3.tgz", - "integrity": "sha512-mlExGW4w71ebDJviH16lQLtZS32VKqsSfk80GCfUlwT/4/hNRFsoscrF/c++9xinkMzECL1uL9DDwXqFWkruPg==", - "dependencies": { - "buffer": "^5.2.1", - "through": "^2.3.8" - } - }, - "node_modules/underscore": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.9.1.tgz", - "integrity": "sha512-5/4etnCkd9c8gwgowi5/om/mYO5ajCaOgdzj/oW+0eQV9WxKBDZw5+ycmKmeaTXjInS/W0BzpGLo2xR2aBwZdg==" - }, - "node_modules/universalify": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", - "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", - "engines": { - "node": ">= 4.0.0" - } - }, - "node_modules/unorm": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/unorm/-/unorm-1.6.0.tgz", - "integrity": "sha512-b2/KCUlYZUeA7JFUuRJZPUtr4gZvBh7tavtv4fvk4+KV9pfGiR6CQAQAWl49ZpR3ts2dk4FYkP7EIgDJoiOLDA==", - "engines": { - "node": ">= 0.4.0" - } - }, - "node_modules/unpipe": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", - "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/uri-js": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.2.2.tgz", - "integrity": "sha512-KY9Frmirql91X2Qgjry0Wd4Y+YTdrdZheS8TFwvkbLWf/G5KNJDCh6pKL5OZctEW4+0Baa5idK2ZQuELRwPznQ==", - "dependencies": { - "punycode": "^2.1.0" - } - }, - "node_modules/url-parse-lax": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-3.0.0.tgz", - "integrity": "sha1-FrXK/Afb42dsGxmZF3gj1lA6yww=", - "dependencies": { - "prepend-http": "^2.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/url-set-query": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/url-set-query/-/url-set-query-1.0.0.tgz", - "integrity": "sha1-AW6M/Xwg7gXK/neV6JK9BwL6ozk=" - }, - "node_modules/url-to-options": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/url-to-options/-/url-to-options-1.0.1.tgz", - "integrity": "sha1-FQWgOiiaSMvXpDTvuu7FBV9WM6k=", - "engines": { - "node": ">= 4" - } - }, - "node_modules/utf8": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/utf8/-/utf8-3.0.0.tgz", - "integrity": "sha512-E8VjFIQ/TyQgp+TZfS6l8yp/xWppSAHzidGiRrqe4bK4XP9pTRyKFgGJpO3SN7zdX4DeomTrwaseCHovfpFcqQ==" - }, - "node_modules/util-deprecate": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" - }, - "node_modules/utils-merge": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", - "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=", - "engines": { - "node": ">= 0.4.0" - } - }, - "node_modules/uuid": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", - "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==", - "bin": { - "uuid": "bin/uuid" - } - }, - "node_modules/vary": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", - "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/verror": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", - "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=", - "engines": [ - "node >=0.6.0" - ], - "dependencies": { - "assert-plus": "^1.0.0", - "core-util-is": "1.0.2", - "extsprintf": "^1.2.0" - } - }, - "node_modules/web3": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/web3/-/web3-1.2.1.tgz", - "integrity": "sha512-nNMzeCK0agb5i/oTWNdQ1aGtwYfXzHottFP2Dz0oGIzavPMGSKyVlr8ibVb1yK5sJBjrWVnTdGaOC2zKDFuFRw==", - "dependencies": { - "web3-bzz": "1.2.1", - "web3-core": "1.2.1", - "web3-eth": "1.2.1", - "web3-eth-personal": "1.2.1", - "web3-net": "1.2.1", - "web3-shh": "1.2.1", - "web3-utils": "1.2.1" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/web3-bzz": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/web3-bzz/-/web3-bzz-1.2.1.tgz", - "integrity": "sha512-LdOO44TuYbGIPfL4ilkuS89GQovxUpmLz6C1UC7VYVVRILeZS740FVB3j9V4P4FHUk1RenaDfKhcntqgVCHtjw==", - "dependencies": { - "got": "9.6.0", - "swarm-js": "0.1.39", - "underscore": "1.9.1" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/web3-core": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/web3-core/-/web3-core-1.2.1.tgz", - "integrity": "sha512-5ODwIqgl8oIg/0+Ai4jsLxkKFWJYE0uLuE1yUKHNVCL4zL6n3rFjRMpKPokd6id6nJCNgeA64KdWQ4XfpnjdMg==", - "dependencies": { - "web3-core-helpers": "1.2.1", - "web3-core-method": "1.2.1", - "web3-core-requestmanager": "1.2.1", - "web3-utils": "1.2.1" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/web3-core-helpers": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/web3-core-helpers/-/web3-core-helpers-1.2.1.tgz", - "integrity": "sha512-Gx3sTEajD5r96bJgfuW377PZVFmXIH4TdqDhgGwd2lZQCcMi+DA4TgxJNJGxn0R3aUVzyyE76j4LBrh412mXrw==", - "dependencies": { - "underscore": "1.9.1", - "web3-eth-iban": "1.2.1", - "web3-utils": "1.2.1" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/web3-core-method": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/web3-core-method/-/web3-core-method-1.2.1.tgz", - "integrity": "sha512-Ghg2WS23qi6Xj8Od3VCzaImLHseEA7/usvnOItluiIc5cKs00WYWsNy2YRStzU9a2+z8lwQywPYp0nTzR/QXdQ==", - "dependencies": { - "underscore": "1.9.1", - "web3-core-helpers": "1.2.1", - "web3-core-promievent": "1.2.1", - "web3-core-subscriptions": "1.2.1", - "web3-utils": "1.2.1" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/web3-core-promievent": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/web3-core-promievent/-/web3-core-promievent-1.2.1.tgz", - "integrity": "sha512-IVUqgpIKoeOYblwpex4Hye6npM0aMR+kU49VP06secPeN0rHMyhGF0ZGveWBrGvf8WDPI7jhqPBFIC6Jf3Q3zw==", - "dependencies": { - "any-promise": "1.3.0", - "eventemitter3": "3.1.2" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/web3-core-requestmanager": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/web3-core-requestmanager/-/web3-core-requestmanager-1.2.1.tgz", - "integrity": "sha512-xfknTC69RfYmLKC+83Jz73IC3/sS2ZLhGtX33D4Q5nQ8yc39ElyAolxr9sJQS8kihOcM6u4J+8gyGMqsLcpIBg==", - "dependencies": { - "underscore": "1.9.1", - "web3-core-helpers": "1.2.1", - "web3-providers-http": "1.2.1", - "web3-providers-ipc": "1.2.1", - "web3-providers-ws": "1.2.1" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/web3-core-subscriptions": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/web3-core-subscriptions/-/web3-core-subscriptions-1.2.1.tgz", - "integrity": "sha512-nmOwe3NsB8V8UFsY1r+sW6KjdOS68h8nuh7NzlWxBQT/19QSUGiERRTaZXWu5BYvo1EoZRMxCKyCQpSSXLc08g==", - "dependencies": { - "eventemitter3": "3.1.2", - "underscore": "1.9.1", - "web3-core-helpers": "1.2.1" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/web3-eth": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/web3-eth/-/web3-eth-1.2.1.tgz", - "integrity": "sha512-/2xly4Yry5FW1i+uygPjhfvgUP/MS/Dk+PDqmzp5M88tS86A+j8BzKc23GrlA8sgGs0645cpZK/999LpEF5UdA==", - "dependencies": { - "underscore": "1.9.1", - "web3-core": "1.2.1", - "web3-core-helpers": "1.2.1", - "web3-core-method": "1.2.1", - "web3-core-subscriptions": "1.2.1", - "web3-eth-abi": "1.2.1", - "web3-eth-accounts": "1.2.1", - "web3-eth-contract": "1.2.1", - "web3-eth-ens": "1.2.1", - "web3-eth-iban": "1.2.1", - "web3-eth-personal": "1.2.1", - "web3-net": "1.2.1", - "web3-utils": "1.2.1" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/web3-eth-abi": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/web3-eth-abi/-/web3-eth-abi-1.2.1.tgz", - "integrity": "sha512-jI/KhU2a/DQPZXHjo2GW0myEljzfiKOn+h1qxK1+Y9OQfTcBMxrQJyH5AP89O6l6NZ1QvNdq99ThAxBFoy5L+g==", - "dependencies": { - "ethers": "4.0.0-beta.3", - "underscore": "1.9.1", - "web3-utils": "1.2.1" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/web3-eth-accounts": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/web3-eth-accounts/-/web3-eth-accounts-1.2.1.tgz", - "integrity": "sha512-26I4qq42STQ8IeKUyur3MdQ1NzrzCqPsmzqpux0j6X/XBD7EjZ+Cs0lhGNkSKH5dI3V8CJasnQ5T1mNKeWB7nQ==", - "dependencies": { - "any-promise": "1.3.0", - "crypto-browserify": "3.12.0", - "eth-lib": "0.2.7", - "scryptsy": "2.1.0", - "semver": "6.2.0", - "underscore": "1.9.1", - "uuid": "3.3.2", - "web3-core": "1.2.1", - "web3-core-helpers": "1.2.1", - "web3-core-method": "1.2.1", - "web3-utils": "1.2.1" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/web3-eth-accounts/node_modules/eth-lib": { - "version": "0.2.7", - "resolved": "https://registry.npmjs.org/eth-lib/-/eth-lib-0.2.7.tgz", - "integrity": "sha1-L5Pxex4jrsN1nNSj/iDBKGo/wco=", - "dependencies": { - "bn.js": "^4.11.6", - "elliptic": "^6.4.0", - "xhr-request-promise": "^0.1.2" - } - }, - "node_modules/web3-eth-accounts/node_modules/uuid": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.3.2.tgz", - "integrity": "sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA==", - "bin": { - "uuid": "bin/uuid" - } - }, - "node_modules/web3-eth-contract": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/web3-eth-contract/-/web3-eth-contract-1.2.1.tgz", - "integrity": "sha512-kYFESbQ3boC9bl2rYVghj7O8UKMiuKaiMkxvRH5cEDHil8V7MGEGZNH0slSdoyeftZVlaWSMqkRP/chfnKND0g==", - "dependencies": { - "underscore": "1.9.1", - "web3-core": "1.2.1", - "web3-core-helpers": "1.2.1", - "web3-core-method": "1.2.1", - "web3-core-promievent": "1.2.1", - "web3-core-subscriptions": "1.2.1", - "web3-eth-abi": "1.2.1", - "web3-utils": "1.2.1" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/web3-eth-ens": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/web3-eth-ens/-/web3-eth-ens-1.2.1.tgz", - "integrity": "sha512-lhP1kFhqZr2nnbu3CGIFFrAnNxk2veXpOXBY48Tub37RtobDyHijHgrj+xTh+mFiPokyrapVjpFsbGa+Xzye4Q==", - "dependencies": { - "eth-ens-namehash": "2.0.8", - "underscore": "1.9.1", - "web3-core": "1.2.1", - "web3-core-helpers": "1.2.1", - "web3-core-promievent": "1.2.1", - "web3-eth-abi": "1.2.1", - "web3-eth-contract": "1.2.1", - "web3-utils": "1.2.1" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/web3-eth-iban": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/web3-eth-iban/-/web3-eth-iban-1.2.1.tgz", - "integrity": "sha512-9gkr4QPl1jCU+wkgmZ8EwODVO3ovVj6d6JKMos52ggdT2YCmlfvFVF6wlGLwi0VvNa/p+0BjJzaqxnnG/JewjQ==", - "dependencies": { - "bn.js": "4.11.8", - "web3-utils": "1.2.1" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/web3-eth-iban/node_modules/bn.js": { - "version": "4.11.8", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.8.tgz", - "integrity": "sha512-ItfYfPLkWHUjckQCk8xC+LwxgK8NYcXywGigJgSwOP8Y2iyWT4f2vsZnoOXTTbo+o5yXmIUJ4gn5538SO5S3gA==" - }, - "node_modules/web3-eth-personal": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/web3-eth-personal/-/web3-eth-personal-1.2.1.tgz", - "integrity": "sha512-RNDVSiaSoY4aIp8+Hc7z+X72H7lMb3fmAChuSBADoEc7DsJrY/d0R5qQDK9g9t2BO8oxgLrLNyBP/9ub2Hc6Bg==", - "dependencies": { - "web3-core": "1.2.1", - "web3-core-helpers": "1.2.1", - "web3-core-method": "1.2.1", - "web3-net": "1.2.1", - "web3-utils": "1.2.1" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/web3-net": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/web3-net/-/web3-net-1.2.1.tgz", - "integrity": "sha512-Yt1Bs7WgnLESPe0rri/ZoPWzSy55ovioaP35w1KZydrNtQ5Yq4WcrAdhBzcOW7vAkIwrsLQsvA+hrOCy7mNauw==", - "dependencies": { - "web3-core": "1.2.1", - "web3-core-method": "1.2.1", - "web3-utils": "1.2.1" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/web3-providers-http": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/web3-providers-http/-/web3-providers-http-1.2.1.tgz", - "integrity": "sha512-BDtVUVolT9b3CAzeGVA/np1hhn7RPUZ6YYGB/sYky+GjeO311Yoq8SRDUSezU92x8yImSC2B+SMReGhd1zL+bQ==", - "dependencies": { - "web3-core-helpers": "1.2.1", - "xhr2-cookies": "1.1.0" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/web3-providers-ipc": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/web3-providers-ipc/-/web3-providers-ipc-1.2.1.tgz", - "integrity": "sha512-oPEuOCwxVx8L4CPD0TUdnlOUZwGBSRKScCz/Ws2YHdr9Ium+whm+0NLmOZjkjQp5wovQbyBzNa6zJz1noFRvFA==", - "dependencies": { - "oboe": "2.1.4", - "underscore": "1.9.1", - "web3-core-helpers": "1.2.1" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/web3-providers-ws": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/web3-providers-ws/-/web3-providers-ws-1.2.1.tgz", - "integrity": "sha512-oqsQXzu+ejJACVHy864WwIyw+oB21nw/pI65/sD95Zi98+/HQzFfNcIFneF1NC4bVF3VNX4YHTNq2I2o97LAiA==", - "dependencies": { - "underscore": "1.9.1", - "web3-core-helpers": "1.2.1", - "websocket": "github:web3-js/WebSocket-Node#polyfill/globalThis" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/web3-providers-ws/node_modules/websocket": { - "resolved": "git+ssh://git@github.com/web3-js/WebSocket-Node.git#ef5ea2f41daf4a2113b80c9223df884b4d56c400", - "hasInstallScript": true, - "dependencies": { - "debug": "^2.2.0", - "es5-ext": "^0.10.50", - "nan": "^2.14.0", - "typedarray-to-buffer": "^3.1.5", - "yaeti": "^0.0.6" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/web3-shh": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/web3-shh/-/web3-shh-1.2.1.tgz", - "integrity": "sha512-/3Cl04nza5kuFn25bV3FJWa0s3Vafr5BlT933h26xovQ6HIIz61LmvNQlvX1AhFL+SNJOTcQmK1SM59vcyC8bA==", - "dependencies": { - "web3-core": "1.2.1", - "web3-core-method": "1.2.1", - "web3-core-subscriptions": "1.2.1", - "web3-net": "1.2.1" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/web3-utils": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/web3-utils/-/web3-utils-1.2.1.tgz", - "integrity": "sha512-Mrcn3l58L+yCKz3zBryM6JZpNruWuT0OCbag8w+reeNROSGVlXzUQkU+gtAwc9JCZ7tKUyg67+2YUGqUjVcyBA==", - "dependencies": { - "bn.js": "4.11.8", - "eth-lib": "0.2.7", - "ethjs-unit": "0.1.6", - "number-to-bn": "1.7.0", - "randomhex": "0.1.5", - "underscore": "1.9.1", - "utf8": "3.0.0" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/web3-utils/node_modules/bn.js": { - "version": "4.11.8", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.8.tgz", - "integrity": "sha512-ItfYfPLkWHUjckQCk8xC+LwxgK8NYcXywGigJgSwOP8Y2iyWT4f2vsZnoOXTTbo+o5yXmIUJ4gn5538SO5S3gA==" - }, - "node_modules/web3-utils/node_modules/eth-lib": { - "version": "0.2.7", - "resolved": "https://registry.npmjs.org/eth-lib/-/eth-lib-0.2.7.tgz", - "integrity": "sha1-L5Pxex4jrsN1nNSj/iDBKGo/wco=", - "dependencies": { - "bn.js": "^4.11.6", - "elliptic": "^6.4.0", - "xhr-request-promise": "^0.1.2" - } - }, - "node_modules/whatwg-fetch": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/whatwg-fetch/-/whatwg-fetch-2.0.4.tgz", - "integrity": "sha512-dcQ1GWpOD/eEQ97k66aiEVpNnapVj90/+R+SXTPYGHpYBBypfKJEQjLrvMZ7YXbKm21gXd4NcuxUTjiv1YtLng==" - }, - "node_modules/wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" - }, - "node_modules/ws": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/ws/-/ws-3.3.3.tgz", - "integrity": "sha512-nnWLa/NwZSt4KQJu51MYlCcSQ5g7INpOrOMt4XV8j4dqTXdmlUmSHQ8/oLC069ckre0fRsgfvsKwbTdtKLCDkA==", - "dependencies": { - "async-limiter": "~1.0.0", - "safe-buffer": "~5.1.0", - "ultron": "~1.1.0" - } - }, - "node_modules/ws/node_modules/safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" - }, - "node_modules/xhr": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/xhr/-/xhr-2.5.0.tgz", - "integrity": "sha512-4nlO/14t3BNUZRXIXfXe+3N6w3s1KoxcJUUURctd64BLRe67E4gRwp4PjywtDY72fXpZ1y6Ch0VZQRY/gMPzzQ==", - "dependencies": { - "global": "~4.3.0", - "is-function": "^1.0.1", - "parse-headers": "^2.0.0", - "xtend": "^4.0.0" - } - }, - "node_modules/xhr-request": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/xhr-request/-/xhr-request-1.1.0.tgz", - "integrity": "sha512-Y7qzEaR3FDtL3fP30k9wO/e+FBnBByZeybKOhASsGP30NIkRAAkKD/sCnLvgEfAIEC1rcmK7YG8f4oEnIrrWzA==", - "dependencies": { - "buffer-to-arraybuffer": "^0.0.5", - "object-assign": "^4.1.1", - "query-string": "^5.0.1", - "simple-get": "^2.7.0", - "timed-out": "^4.0.1", - "url-set-query": "^1.0.0", - "xhr": "^2.0.4" - } - }, - "node_modules/xhr-request-promise": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/xhr-request-promise/-/xhr-request-promise-0.1.3.tgz", - "integrity": "sha512-YUBytBsuwgitWtdRzXDDkWAXzhdGB8bYm0sSzMPZT7Z2MBjMSTHFsyCT1yCRATY+XC69DUrQraRAEgcoCRaIPg==", - "dependencies": { - "xhr-request": "^1.1.0" - } - }, - "node_modules/xhr2-cookies": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/xhr2-cookies/-/xhr2-cookies-1.1.0.tgz", - "integrity": "sha1-fXdEnQmZGX8VXLc7I99yUF7YnUg=", - "dependencies": { - "cookiejar": "^2.1.1" - } - }, - "node_modules/xmlhttprequest": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/xmlhttprequest/-/xmlhttprequest-1.8.0.tgz", - "integrity": "sha1-Z/4HXFwk/vOfnWX197f+dRcZaPw=", - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/xtend": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", - "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", - "engines": { - "node": ">=0.4" - } - }, - "node_modules/yaeti": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/yaeti/-/yaeti-0.0.6.tgz", - "integrity": "sha1-8m9ITXJoTPQr7ft2lwqhYI+/lXc=", - "engines": { - "node": ">=0.10.32" - } - }, - "node_modules/yallist": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", - "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==" - }, - "node_modules/yauzl": { - "version": "2.10.0", - "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.10.0.tgz", - "integrity": "sha1-x+sXyT4RLLEIb6bY5R+wZnt5pfk=", - "dependencies": { - "buffer-crc32": "~0.2.3", - "fd-slicer": "~1.1.0" - } - } - }, - "dependencies": { - "@babel/helper-module-imports": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.10.4.tgz", - "integrity": "sha512-nEQJHqYavI217oD9+s5MUBzk6x1IlvoS9WTPfgG43CbMEeStE0v+r+TucWdx8KFGowPGvyOkDT9+7DHedIDnVw==", - "requires": { - "@babel/types": "^7.10.4" - } - }, - "@babel/helper-plugin-utils": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz", - "integrity": "sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg==" - }, - "@babel/helper-validator-identifier": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.10.4.tgz", - "integrity": "sha512-3U9y+43hz7ZM+rzG24Qe2mufW5KhvFg/NhnNph+i9mgCtdTCtMJuI1TMkrIUiK7Ix4PYlRF9I5dhqaLYA/ADXw==" - }, - "@babel/plugin-transform-runtime": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.10.4.tgz", - "integrity": "sha512-8ULlGv8p+Vuxu+kz2Y1dk6MYS2b/Dki+NO6/0ZlfSj5tMalfDL7jI/o/2a+rrWLqSXvnadEqc2WguB4gdQIxZw==", - "requires": { - "@babel/helper-module-imports": "^7.10.4", - "@babel/helper-plugin-utils": "^7.10.4", - "resolve": "^1.8.1", - "semver": "^5.5.1" - }, - "dependencies": { - "semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" - } - } - }, - "@babel/runtime": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.10.4.tgz", - "integrity": "sha512-UpTN5yUJr9b4EX2CnGNWIvER7Ab83ibv0pcvvHc4UOdrBI5jb8bj+32cCwPX6xu0mt2daFNjYhoi+X7beH0RSw==", - "requires": { - "regenerator-runtime": "^0.13.4" - } - }, - "@babel/types": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.10.4.tgz", - "integrity": "sha512-UTCFOxC3FsFHb7lkRMVvgLzaRVamXuAs2Tz4wajva4WxtVY82eZeaUBtC2Zt95FU9TiznuC0Zk35tsim8jeVpg==", - "requires": { - "@babel/helper-validator-identifier": "^7.10.4", - "lodash": "^4.17.13", - "to-fast-properties": "^2.0.0" - } - }, - "@sindresorhus/is": { - "version": "0.14.0", - "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-0.14.0.tgz", - "integrity": "sha512-9NET910DNaIPngYnLLPeg+Ogzqsi9uM4mSboU5y6p8S5DzMTVEsJZrawi+BoDNUVBa2DhJqQYUFvMDfgU062LQ==" - }, - "@szmarczak/http-timer": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-1.1.2.tgz", - "integrity": "sha512-XIB2XbzHTN6ieIjfIMV9hlVcfPU26s2vafYWQcZHWXHOxiaRZYEDKEwdl129Zyg50+foYV2jCgtrqSA6qNuNSA==", - "requires": { - "defer-to-connect": "^1.0.1" - } - }, - "@truffle/hdwallet-provider": { - "version": "1.0.37", - "resolved": "https://registry.npmjs.org/@truffle/hdwallet-provider/-/hdwallet-provider-1.0.37.tgz", - "integrity": "sha512-LPsMNaBxwpCpDrTgvMGvNtk4c/pDDpZ5AXLrugzK1lVT3SW/DCpjPDgcUckOCNNAx8ktG0PzJbiVFM6Ami92nQ==", - "requires": { - "@trufflesuite/web3-provider-engine": "14.0.7", - "any-promise": "^1.3.0", - "bindings": "^1.5.0", - "bip39": "^2.4.2", - "ethereum-protocol": "^1.0.1", - "ethereumjs-tx": "^1.0.0", - "ethereumjs-util": "^6.1.0", - "ethereumjs-wallet": "^0.6.3", - "source-map-support": "^0.5.19", - "web3": "1.2.1" - } - }, - "@trufflesuite/web3-provider-engine": { - "version": "14.0.7", - "resolved": "https://registry.npmjs.org/@trufflesuite/web3-provider-engine/-/web3-provider-engine-14.0.7.tgz", - "integrity": "sha512-+OCKZOF1aVCOW9gWIXdK1l/SQnRPVcve56LpSGZQ+LZ6OKT6xVoLNNF+wKVvFxIis1JAZvnVKJFbUYbKEZ5aPQ==", - "requires": { - "async": "^2.5.0", - "backoff": "^2.5.0", - "clone": "^2.0.0", - "cross-fetch": "^2.1.0", - "eth-block-tracker": "^4.2.0", - "eth-json-rpc-filters": "^4.0.2", - "eth-json-rpc-infura": "^3.1.0", - "eth-json-rpc-middleware": "^4.1.1", - "eth-sig-util": "^1.4.2", - "ethereumjs-block": "^1.2.2", - "ethereumjs-tx": "^1.2.0", - "ethereumjs-util": "^5.1.5", - "ethereumjs-vm": "^2.3.4", - "json-rpc-error": "^2.0.0", - "json-stable-stringify": "^1.0.1", - "promise-to-callback": "^1.0.0", - "readable-stream": "^2.2.9", - "request": "^2.85.0", - "semaphore": "^1.0.3", - "ws": "^5.1.1", - "xhr": "^2.2.0", - "xtend": "^4.0.1" - }, - "dependencies": { - "ethereumjs-util": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-5.2.0.tgz", - "integrity": "sha512-CJAKdI0wgMbQFLlLRtZKGcy/L6pzVRgelIZqRqNbuVFM3K9VEnyfbcvz0ncWMRNCe4kaHWjwRYQcYMucmwsnWA==", - "requires": { - "bn.js": "^4.11.0", - "create-hash": "^1.1.2", - "ethjs-util": "^0.1.3", - "keccak": "^1.0.2", - "rlp": "^2.0.0", - "safe-buffer": "^5.1.1", - "secp256k1": "^3.0.1" - } - }, - "keccak": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/keccak/-/keccak-1.4.0.tgz", - "integrity": "sha512-eZVaCpblK5formjPjeTBik7TAg+pqnDrMHIffSvi9Lh7PQgM1+hSzakUeZFCk9DVVG0dacZJuaz2ntwlzZUIBw==", - "requires": { - "bindings": "^1.2.1", - "inherits": "^2.0.3", - "nan": "^2.2.1", - "safe-buffer": "^5.1.0" - } - }, - "ws": { - "version": "5.2.2", - "resolved": "https://registry.npmjs.org/ws/-/ws-5.2.2.tgz", - "integrity": "sha512-jaHFD6PFv6UgoIVda6qZllptQsMlDEJkTQcybzzXDYM1XO9Y8em691FGMPmM46WGyLU4z9KMgQN+qrux/nhlHA==", - "requires": { - "async-limiter": "~1.0.0" - } - } - } - }, - "@types/bn.js": { - "version": "4.11.6", - "resolved": "https://registry.npmjs.org/@types/bn.js/-/bn.js-4.11.6.tgz", - "integrity": "sha512-pqr857jrp2kPuO9uRjZ3PwnJTjoQy+fcdxvBTvHm6dkmEL9q+hDD/2j/0ELOBPtPnS8LjCX0gI9nbl8lVkadpg==", - "requires": { - "@types/node": "*" - } - }, - "@types/node": { - "version": "10.17.26", - "resolved": "https://registry.npmjs.org/@types/node/-/node-10.17.26.tgz", - "integrity": "sha512-myMwkO2Cr82kirHY8uknNRHEVtn0wV3DTQfkrjx17jmkstDRZ24gNUdl8AHXVyVclTYI/bNjgTPTAWvWLqXqkw==" - }, - "abstract-leveldown": { - "version": "2.6.3", - "resolved": "https://registry.npmjs.org/abstract-leveldown/-/abstract-leveldown-2.6.3.tgz", - "integrity": "sha512-2++wDf/DYqkPR3o5tbfdhF96EfMApo1GpPfzOsR/ZYXdkSmELlvOOEAl9iKkRsktMPHdGjO4rtkBpf2I7TiTeA==", - "requires": { - "xtend": "~4.0.0" - } - }, - "accepts": { - "version": "1.3.7", - "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.7.tgz", - "integrity": "sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA==", - "requires": { - "mime-types": "~2.1.24", - "negotiator": "0.6.2" - } - }, - "aes-js": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/aes-js/-/aes-js-3.0.0.tgz", - "integrity": "sha1-4h3xCtbCBTKVvLuNq0Cwnb6ofk0=" - }, - "ajv": { - "version": "6.12.2", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.2.tgz", - "integrity": "sha512-k+V+hzjm5q/Mr8ef/1Y9goCmlsK4I6Sm74teeyGvFk1XrOsbsKLjEdrvny42CZ+a8sXbk8KWpY/bDwS+FLL2UQ==", - "requires": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - } - }, - "ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=" - }, - "ansi-styles": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", - "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=" - }, - "any-promise": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz", - "integrity": "sha1-q8av7tzqUugJzcA3au0845Y10X8=" - }, - "app-module-path": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/app-module-path/-/app-module-path-2.2.0.tgz", - "integrity": "sha1-ZBqlXft9am8KgUHEucCqULbCTdU=", - "dev": true - }, - "array-flatten": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", - "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=" - }, - "asn1": { - "version": "0.2.4", - "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.4.tgz", - "integrity": "sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg==", - "requires": { - "safer-buffer": "~2.1.0" - } - }, - "asn1.js": { - "version": "4.10.1", - "resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-4.10.1.tgz", - "integrity": "sha512-p32cOF5q0Zqs9uBiONKYLm6BClCoBCM5O9JfeUSlnQLBTxYdTK+pW+nXflm8UkKd2UYlEbYz5qEi0JuZR9ckSw==", - "requires": { - "bn.js": "^4.0.0", - "inherits": "^2.0.1", - "minimalistic-assert": "^1.0.0" - } - }, - "assert-plus": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", - "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=" - }, - "async": { - "version": "2.6.3", - "resolved": "https://registry.npmjs.org/async/-/async-2.6.3.tgz", - "integrity": "sha512-zflvls11DCy+dQWzTW2dzuilv8Z5X/pjfmZOWba6TNIVDm+2UDaJmXSOXlasHKfNBs8oo3M0aT50fDEWfKZjXg==", - "requires": { - "lodash": "^4.17.14" - } - }, - "async-eventemitter": { - "version": "0.2.4", - "resolved": "https://registry.npmjs.org/async-eventemitter/-/async-eventemitter-0.2.4.tgz", - "integrity": "sha512-pd20BwL7Yt1zwDFy+8MX8F1+WCT8aQeKj0kQnTrH9WaeRETlRamVhD0JtRPmrV4GfOJ2F9CvdQkZeZhnh2TuHw==", - "requires": { - "async": "^2.4.0" - } - }, - "async-limiter": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/async-limiter/-/async-limiter-1.0.1.tgz", - "integrity": "sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ==" - }, - "asynckit": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=" - }, - "await-semaphore": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/await-semaphore/-/await-semaphore-0.1.3.tgz", - "integrity": "sha512-d1W2aNSYcz/sxYO4pMGX9vq65qOTu0P800epMud+6cYYX0QcT7zyqcxec3VWzpgvdXo57UWmVbZpLMjX2m1I7Q==" - }, - "aws-sign2": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", - "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=" - }, - "aws4": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.10.0.tgz", - "integrity": "sha512-3YDiu347mtVtjpyV3u5kVqQLP242c06zwDOgpeRnybmXlYYsLbtTrUBUm8i8srONt+FWobl5aibnU1030PeeuA==" - }, - "babel-code-frame": { - "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-code-frame/-/babel-code-frame-6.26.0.tgz", - "integrity": "sha1-Y/1D99weO7fONZR9uP42mj9Yx0s=", - "requires": { - "chalk": "^1.1.3", - "esutils": "^2.0.2", - "js-tokens": "^3.0.2" - } - }, - "babel-core": { - "version": "6.26.3", - "resolved": "https://registry.npmjs.org/babel-core/-/babel-core-6.26.3.tgz", - "integrity": "sha512-6jyFLuDmeidKmUEb3NM+/yawG0M2bDZ9Z1qbZP59cyHLz8kYGKYwpJP0UwUKKUiTRNvxfLesJnTedqczP7cTDA==", - "requires": { - "babel-code-frame": "^6.26.0", - "babel-generator": "^6.26.0", - "babel-helpers": "^6.24.1", - "babel-messages": "^6.23.0", - "babel-register": "^6.26.0", - "babel-runtime": "^6.26.0", - "babel-template": "^6.26.0", - "babel-traverse": "^6.26.0", - "babel-types": "^6.26.0", - "babylon": "^6.18.0", - "convert-source-map": "^1.5.1", - "debug": "^2.6.9", - "json5": "^0.5.1", - "lodash": "^4.17.4", - "minimatch": "^3.0.4", - "path-is-absolute": "^1.0.1", - "private": "^0.1.8", - "slash": "^1.0.0", - "source-map": "^0.5.7" - } - }, - "babel-generator": { - "version": "6.26.1", - "resolved": "https://registry.npmjs.org/babel-generator/-/babel-generator-6.26.1.tgz", - "integrity": "sha512-HyfwY6ApZj7BYTcJURpM5tznulaBvyio7/0d4zFOeMPUmfxkCjHocCuoLa2SAGzBI8AREcH3eP3758F672DppA==", - "requires": { - "babel-messages": "^6.23.0", - "babel-runtime": "^6.26.0", - "babel-types": "^6.26.0", - "detect-indent": "^4.0.0", - "jsesc": "^1.3.0", - "lodash": "^4.17.4", - "source-map": "^0.5.7", - "trim-right": "^1.0.1" - }, - "dependencies": { - "jsesc": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-1.3.0.tgz", - "integrity": "sha1-RsP+yMGJKxKwgz25vHYiF226s0s=" - } - } - }, - "babel-helper-builder-binary-assignment-operator-visitor": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-helper-builder-binary-assignment-operator-visitor/-/babel-helper-builder-binary-assignment-operator-visitor-6.24.1.tgz", - "integrity": "sha1-zORReto1b0IgvK6KAsKzRvmlZmQ=", - "requires": { - "babel-helper-explode-assignable-expression": "^6.24.1", - "babel-runtime": "^6.22.0", - "babel-types": "^6.24.1" - } - }, - "babel-helper-call-delegate": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-helper-call-delegate/-/babel-helper-call-delegate-6.24.1.tgz", - "integrity": "sha1-7Oaqzdx25Bw0YfiL/Fdb0Nqi340=", - "requires": { - "babel-helper-hoist-variables": "^6.24.1", - "babel-runtime": "^6.22.0", - "babel-traverse": "^6.24.1", - "babel-types": "^6.24.1" - } - }, - "babel-helper-define-map": { - "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-helper-define-map/-/babel-helper-define-map-6.26.0.tgz", - "integrity": "sha1-pfVtq0GiX5fstJjH66ypgZ+Vvl8=", - "requires": { - "babel-helper-function-name": "^6.24.1", - "babel-runtime": "^6.26.0", - "babel-types": "^6.26.0", - "lodash": "^4.17.4" - } - }, - "babel-helper-explode-assignable-expression": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-helper-explode-assignable-expression/-/babel-helper-explode-assignable-expression-6.24.1.tgz", - "integrity": "sha1-8luCz33BBDPFX3BZLVdGQArCLKo=", - "requires": { - "babel-runtime": "^6.22.0", - "babel-traverse": "^6.24.1", - "babel-types": "^6.24.1" - } - }, - "babel-helper-function-name": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-helper-function-name/-/babel-helper-function-name-6.24.1.tgz", - "integrity": "sha1-00dbjAPtmCQqJbSDUasYOZ01gKk=", - "requires": { - "babel-helper-get-function-arity": "^6.24.1", - "babel-runtime": "^6.22.0", - "babel-template": "^6.24.1", - "babel-traverse": "^6.24.1", - "babel-types": "^6.24.1" - } - }, - "babel-helper-get-function-arity": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-helper-get-function-arity/-/babel-helper-get-function-arity-6.24.1.tgz", - "integrity": "sha1-j3eCqpNAfEHTqlCQj4mwMbG2hT0=", - "requires": { - "babel-runtime": "^6.22.0", - "babel-types": "^6.24.1" - } - }, - "babel-helper-hoist-variables": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-helper-hoist-variables/-/babel-helper-hoist-variables-6.24.1.tgz", - "integrity": "sha1-HssnaJydJVE+rbyZFKc/VAi+enY=", - "requires": { - "babel-runtime": "^6.22.0", - "babel-types": "^6.24.1" - } - }, - "babel-helper-optimise-call-expression": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-helper-optimise-call-expression/-/babel-helper-optimise-call-expression-6.24.1.tgz", - "integrity": "sha1-96E0J7qfc/j0+pk8VKl4gtEkQlc=", - "requires": { - "babel-runtime": "^6.22.0", - "babel-types": "^6.24.1" - } - }, - "babel-helper-regex": { - "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-helper-regex/-/babel-helper-regex-6.26.0.tgz", - "integrity": "sha1-MlxZ+QL4LyS3T6zu0DY5VPZJXnI=", - "requires": { - "babel-runtime": "^6.26.0", - "babel-types": "^6.26.0", - "lodash": "^4.17.4" - } - }, - "babel-helper-remap-async-to-generator": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-helper-remap-async-to-generator/-/babel-helper-remap-async-to-generator-6.24.1.tgz", - "integrity": "sha1-XsWBgnrXI/7N04HxySg5BnbkVRs=", - "requires": { - "babel-helper-function-name": "^6.24.1", - "babel-runtime": "^6.22.0", - "babel-template": "^6.24.1", - "babel-traverse": "^6.24.1", - "babel-types": "^6.24.1" - } - }, - "babel-helper-replace-supers": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-helper-replace-supers/-/babel-helper-replace-supers-6.24.1.tgz", - "integrity": "sha1-v22/5Dk40XNpohPKiov3S2qQqxo=", - "requires": { - "babel-helper-optimise-call-expression": "^6.24.1", - "babel-messages": "^6.23.0", - "babel-runtime": "^6.22.0", - "babel-template": "^6.24.1", - "babel-traverse": "^6.24.1", - "babel-types": "^6.24.1" - } - }, - "babel-helpers": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-helpers/-/babel-helpers-6.24.1.tgz", - "integrity": "sha1-NHHenK7DiOXIUOWX5Yom3fN2ArI=", - "requires": { - "babel-runtime": "^6.22.0", - "babel-template": "^6.24.1" - } - }, - "babel-messages": { - "version": "6.23.0", - "resolved": "https://registry.npmjs.org/babel-messages/-/babel-messages-6.23.0.tgz", - "integrity": "sha1-8830cDhYA1sqKVHG7F7fbGLyYw4=", - "requires": { - "babel-runtime": "^6.22.0" - } - }, - "babel-plugin-check-es2015-constants": { - "version": "6.22.0", - "resolved": "https://registry.npmjs.org/babel-plugin-check-es2015-constants/-/babel-plugin-check-es2015-constants-6.22.0.tgz", - "integrity": "sha1-NRV7EBQm/S/9PaP3XH0ekYNbv4o=", - "requires": { - "babel-runtime": "^6.22.0" - } - }, - "babel-plugin-syntax-async-functions": { - "version": "6.13.0", - "resolved": "https://registry.npmjs.org/babel-plugin-syntax-async-functions/-/babel-plugin-syntax-async-functions-6.13.0.tgz", - "integrity": "sha1-ytnK0RkbWtY0vzCuCHI5HgZHvpU=" - }, - "babel-plugin-syntax-exponentiation-operator": { - "version": "6.13.0", - "resolved": "https://registry.npmjs.org/babel-plugin-syntax-exponentiation-operator/-/babel-plugin-syntax-exponentiation-operator-6.13.0.tgz", - "integrity": "sha1-nufoM3KQ2pUoggGmpX9BcDF4MN4=" - }, - "babel-plugin-syntax-trailing-function-commas": { - "version": "6.22.0", - "resolved": "https://registry.npmjs.org/babel-plugin-syntax-trailing-function-commas/-/babel-plugin-syntax-trailing-function-commas-6.22.0.tgz", - "integrity": "sha1-ugNgk3+NBuQBgKQ/4NVhb/9TLPM=" - }, - "babel-plugin-transform-async-to-generator": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-async-to-generator/-/babel-plugin-transform-async-to-generator-6.24.1.tgz", - "integrity": "sha1-ZTbjeK/2yx1VF6wOQOs+n8jQh2E=", - "requires": { - "babel-helper-remap-async-to-generator": "^6.24.1", - "babel-plugin-syntax-async-functions": "^6.8.0", - "babel-runtime": "^6.22.0" - } - }, - "babel-plugin-transform-es2015-arrow-functions": { - "version": "6.22.0", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-arrow-functions/-/babel-plugin-transform-es2015-arrow-functions-6.22.0.tgz", - "integrity": "sha1-RSaSy3EdX3ncf4XkQM5BufJE0iE=", - "requires": { - "babel-runtime": "^6.22.0" - } - }, - "babel-plugin-transform-es2015-block-scoped-functions": { - "version": "6.22.0", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-block-scoped-functions/-/babel-plugin-transform-es2015-block-scoped-functions-6.22.0.tgz", - "integrity": "sha1-u8UbSflk1wy42OC5ToICRs46YUE=", - "requires": { - "babel-runtime": "^6.22.0" - } - }, - "babel-plugin-transform-es2015-block-scoping": { - "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-block-scoping/-/babel-plugin-transform-es2015-block-scoping-6.26.0.tgz", - "integrity": "sha1-1w9SmcEwjQXBL0Y4E7CgnnOxiV8=", - "requires": { - "babel-runtime": "^6.26.0", - "babel-template": "^6.26.0", - "babel-traverse": "^6.26.0", - "babel-types": "^6.26.0", - "lodash": "^4.17.4" - } - }, - "babel-plugin-transform-es2015-classes": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-classes/-/babel-plugin-transform-es2015-classes-6.24.1.tgz", - "integrity": "sha1-WkxYpQyclGHlZLSyo7+ryXolhNs=", - "requires": { - "babel-helper-define-map": "^6.24.1", - "babel-helper-function-name": "^6.24.1", - "babel-helper-optimise-call-expression": "^6.24.1", - "babel-helper-replace-supers": "^6.24.1", - "babel-messages": "^6.23.0", - "babel-runtime": "^6.22.0", - "babel-template": "^6.24.1", - "babel-traverse": "^6.24.1", - "babel-types": "^6.24.1" - } - }, - "babel-plugin-transform-es2015-computed-properties": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-computed-properties/-/babel-plugin-transform-es2015-computed-properties-6.24.1.tgz", - "integrity": "sha1-b+Ko0WiV1WNPTNmZttNICjCBWbM=", - "requires": { - "babel-runtime": "^6.22.0", - "babel-template": "^6.24.1" - } - }, - "babel-plugin-transform-es2015-destructuring": { - "version": "6.23.0", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-destructuring/-/babel-plugin-transform-es2015-destructuring-6.23.0.tgz", - "integrity": "sha1-mXux8auWf2gtKwh2/jWNYOdlxW0=", - "requires": { - "babel-runtime": "^6.22.0" - } - }, - "babel-plugin-transform-es2015-duplicate-keys": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-duplicate-keys/-/babel-plugin-transform-es2015-duplicate-keys-6.24.1.tgz", - "integrity": "sha1-c+s9MQypaePvnskcU3QabxV2Qj4=", - "requires": { - "babel-runtime": "^6.22.0", - "babel-types": "^6.24.1" - } - }, - "babel-plugin-transform-es2015-for-of": { - "version": "6.23.0", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-for-of/-/babel-plugin-transform-es2015-for-of-6.23.0.tgz", - "integrity": "sha1-9HyVsrYT3x0+zC/bdXNiPHUkhpE=", - "requires": { - "babel-runtime": "^6.22.0" - } - }, - "babel-plugin-transform-es2015-function-name": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-function-name/-/babel-plugin-transform-es2015-function-name-6.24.1.tgz", - "integrity": "sha1-g0yJhTvDaxrw86TF26qU/Y6sqos=", - "requires": { - "babel-helper-function-name": "^6.24.1", - "babel-runtime": "^6.22.0", - "babel-types": "^6.24.1" - } - }, - "babel-plugin-transform-es2015-literals": { - "version": "6.22.0", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-literals/-/babel-plugin-transform-es2015-literals-6.22.0.tgz", - "integrity": "sha1-T1SgLWzWbPkVKAAZox0xklN3yi4=", - "requires": { - "babel-runtime": "^6.22.0" - } - }, - "babel-plugin-transform-es2015-modules-amd": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-modules-amd/-/babel-plugin-transform-es2015-modules-amd-6.24.1.tgz", - "integrity": "sha1-Oz5UAXI5hC1tGcMBHEvS8AoA0VQ=", - "requires": { - "babel-plugin-transform-es2015-modules-commonjs": "^6.24.1", - "babel-runtime": "^6.22.0", - "babel-template": "^6.24.1" - } - }, - "babel-plugin-transform-es2015-modules-commonjs": { - "version": "6.26.2", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-modules-commonjs/-/babel-plugin-transform-es2015-modules-commonjs-6.26.2.tgz", - "integrity": "sha512-CV9ROOHEdrjcwhIaJNBGMBCodN+1cfkwtM1SbUHmvyy35KGT7fohbpOxkE2uLz1o6odKK2Ck/tz47z+VqQfi9Q==", - "requires": { - "babel-plugin-transform-strict-mode": "^6.24.1", - "babel-runtime": "^6.26.0", - "babel-template": "^6.26.0", - "babel-types": "^6.26.0" - } - }, - "babel-plugin-transform-es2015-modules-systemjs": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-modules-systemjs/-/babel-plugin-transform-es2015-modules-systemjs-6.24.1.tgz", - "integrity": "sha1-/4mhQrkRmpBhlfXxBuzzBdlAfSM=", - "requires": { - "babel-helper-hoist-variables": "^6.24.1", - "babel-runtime": "^6.22.0", - "babel-template": "^6.24.1" - } - }, - "babel-plugin-transform-es2015-modules-umd": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-modules-umd/-/babel-plugin-transform-es2015-modules-umd-6.24.1.tgz", - "integrity": "sha1-rJl+YoXNGO1hdq22B9YCNErThGg=", - "requires": { - "babel-plugin-transform-es2015-modules-amd": "^6.24.1", - "babel-runtime": "^6.22.0", - "babel-template": "^6.24.1" - } - }, - "babel-plugin-transform-es2015-object-super": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-object-super/-/babel-plugin-transform-es2015-object-super-6.24.1.tgz", - "integrity": "sha1-JM72muIcuDp/hgPa0CH1cusnj40=", - "requires": { - "babel-helper-replace-supers": "^6.24.1", - "babel-runtime": "^6.22.0" - } - }, - "babel-plugin-transform-es2015-parameters": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-parameters/-/babel-plugin-transform-es2015-parameters-6.24.1.tgz", - "integrity": "sha1-V6w1GrScrxSpfNE7CfZv3wpiXys=", - "requires": { - "babel-helper-call-delegate": "^6.24.1", - "babel-helper-get-function-arity": "^6.24.1", - "babel-runtime": "^6.22.0", - "babel-template": "^6.24.1", - "babel-traverse": "^6.24.1", - "babel-types": "^6.24.1" - } - }, - "babel-plugin-transform-es2015-shorthand-properties": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-shorthand-properties/-/babel-plugin-transform-es2015-shorthand-properties-6.24.1.tgz", - "integrity": "sha1-JPh11nIch2YbvZmkYi5R8U3jiqA=", - "requires": { - "babel-runtime": "^6.22.0", - "babel-types": "^6.24.1" - } - }, - "babel-plugin-transform-es2015-spread": { - "version": "6.22.0", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-spread/-/babel-plugin-transform-es2015-spread-6.22.0.tgz", - "integrity": "sha1-1taKmfia7cRTbIGlQujdnxdG+NE=", - "requires": { - "babel-runtime": "^6.22.0" - } - }, - "babel-plugin-transform-es2015-sticky-regex": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-sticky-regex/-/babel-plugin-transform-es2015-sticky-regex-6.24.1.tgz", - "integrity": "sha1-AMHNsaynERLN8M9hJsLta0V8zbw=", - "requires": { - "babel-helper-regex": "^6.24.1", - "babel-runtime": "^6.22.0", - "babel-types": "^6.24.1" - } - }, - "babel-plugin-transform-es2015-template-literals": { - "version": "6.22.0", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-template-literals/-/babel-plugin-transform-es2015-template-literals-6.22.0.tgz", - "integrity": "sha1-qEs0UPfp+PH2g51taH2oS7EjbY0=", - "requires": { - "babel-runtime": "^6.22.0" - } - }, - "babel-plugin-transform-es2015-typeof-symbol": { - "version": "6.23.0", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-typeof-symbol/-/babel-plugin-transform-es2015-typeof-symbol-6.23.0.tgz", - "integrity": "sha1-3sCfHN3/lLUqxz1QXITfWdzOs3I=", - "requires": { - "babel-runtime": "^6.22.0" - } - }, - "babel-plugin-transform-es2015-unicode-regex": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-unicode-regex/-/babel-plugin-transform-es2015-unicode-regex-6.24.1.tgz", - "integrity": "sha1-04sS9C6nMj9yk4fxinxa4frrNek=", - "requires": { - "babel-helper-regex": "^6.24.1", - "babel-runtime": "^6.22.0", - "regexpu-core": "^2.0.0" - } - }, - "babel-plugin-transform-exponentiation-operator": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-exponentiation-operator/-/babel-plugin-transform-exponentiation-operator-6.24.1.tgz", - "integrity": "sha1-KrDJx/MJj6SJB3cruBP+QejeOg4=", - "requires": { - "babel-helper-builder-binary-assignment-operator-visitor": "^6.24.1", - "babel-plugin-syntax-exponentiation-operator": "^6.8.0", - "babel-runtime": "^6.22.0" - } - }, - "babel-plugin-transform-regenerator": { - "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-regenerator/-/babel-plugin-transform-regenerator-6.26.0.tgz", - "integrity": "sha1-4HA2lvveJ/Cj78rPi03KL3s6jy8=", - "requires": { - "regenerator-transform": "^0.10.0" - } - }, - "babel-plugin-transform-strict-mode": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-strict-mode/-/babel-plugin-transform-strict-mode-6.24.1.tgz", - "integrity": "sha1-1fr3qleKZbvlkc9e2uBKDGcCB1g=", - "requires": { - "babel-runtime": "^6.22.0", - "babel-types": "^6.24.1" - } - }, - "babel-preset-env": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/babel-preset-env/-/babel-preset-env-1.7.0.tgz", - "integrity": "sha512-9OR2afuKDneX2/q2EurSftUYM0xGu4O2D9adAhVfADDhrYDaxXV0rBbevVYoY9n6nyX1PmQW/0jtpJvUNr9CHg==", - "requires": { - "babel-plugin-check-es2015-constants": "^6.22.0", - "babel-plugin-syntax-trailing-function-commas": "^6.22.0", - "babel-plugin-transform-async-to-generator": "^6.22.0", - "babel-plugin-transform-es2015-arrow-functions": "^6.22.0", - "babel-plugin-transform-es2015-block-scoped-functions": "^6.22.0", - "babel-plugin-transform-es2015-block-scoping": "^6.23.0", - "babel-plugin-transform-es2015-classes": "^6.23.0", - "babel-plugin-transform-es2015-computed-properties": "^6.22.0", - "babel-plugin-transform-es2015-destructuring": "^6.23.0", - "babel-plugin-transform-es2015-duplicate-keys": "^6.22.0", - "babel-plugin-transform-es2015-for-of": "^6.23.0", - "babel-plugin-transform-es2015-function-name": "^6.22.0", - "babel-plugin-transform-es2015-literals": "^6.22.0", - "babel-plugin-transform-es2015-modules-amd": "^6.22.0", - "babel-plugin-transform-es2015-modules-commonjs": "^6.23.0", - "babel-plugin-transform-es2015-modules-systemjs": "^6.23.0", - "babel-plugin-transform-es2015-modules-umd": "^6.23.0", - "babel-plugin-transform-es2015-object-super": "^6.22.0", - "babel-plugin-transform-es2015-parameters": "^6.23.0", - "babel-plugin-transform-es2015-shorthand-properties": "^6.22.0", - "babel-plugin-transform-es2015-spread": "^6.22.0", - "babel-plugin-transform-es2015-sticky-regex": "^6.22.0", - "babel-plugin-transform-es2015-template-literals": "^6.22.0", - "babel-plugin-transform-es2015-typeof-symbol": "^6.23.0", - "babel-plugin-transform-es2015-unicode-regex": "^6.22.0", - "babel-plugin-transform-exponentiation-operator": "^6.22.0", - "babel-plugin-transform-regenerator": "^6.22.0", - "browserslist": "^3.2.6", - "invariant": "^2.2.2", - "semver": "^5.3.0" - }, - "dependencies": { - "semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" - } - } - }, - "babel-register": { - "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-register/-/babel-register-6.26.0.tgz", - "integrity": "sha1-btAhFz4vy0htestFxgCahW9kcHE=", - "requires": { - "babel-core": "^6.26.0", - "babel-runtime": "^6.26.0", - "core-js": "^2.5.0", - "home-or-tmp": "^2.0.0", - "lodash": "^4.17.4", - "mkdirp": "^0.5.1", - "source-map-support": "^0.4.15" - }, - "dependencies": { - "source-map-support": { - "version": "0.4.18", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.4.18.tgz", - "integrity": "sha512-try0/JqxPLF9nOjvSta7tVondkP5dwgyLDjVoyMDlmjugT2lRZ1OfsrYTkCd2hkDnJTKRbO/Rl3orm8vlsUzbA==", - "requires": { - "source-map": "^0.5.6" - } - } - } - }, - "babel-runtime": { - "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz", - "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=", - "requires": { - "core-js": "^2.4.0", - "regenerator-runtime": "^0.11.0" - }, - "dependencies": { - "regenerator-runtime": { - "version": "0.11.1", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz", - "integrity": "sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg==" - } - } - }, - "babel-template": { - "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-template/-/babel-template-6.26.0.tgz", - "integrity": "sha1-3gPi0WOWsGn0bdn/+FIfsaDjXgI=", - "requires": { - "babel-runtime": "^6.26.0", - "babel-traverse": "^6.26.0", - "babel-types": "^6.26.0", - "babylon": "^6.18.0", - "lodash": "^4.17.4" - } - }, - "babel-traverse": { - "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-traverse/-/babel-traverse-6.26.0.tgz", - "integrity": "sha1-RqnL1+3MYsjlwGTi0tjQ9ANXZu4=", - "requires": { - "babel-code-frame": "^6.26.0", - "babel-messages": "^6.23.0", - "babel-runtime": "^6.26.0", - "babel-types": "^6.26.0", - "babylon": "^6.18.0", - "debug": "^2.6.8", - "globals": "^9.18.0", - "invariant": "^2.2.2", - "lodash": "^4.17.4" - } - }, - "babel-types": { - "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-types/-/babel-types-6.26.0.tgz", - "integrity": "sha1-o7Bz+Uq0nrb6Vc1lInozQ4BjJJc=", - "requires": { - "babel-runtime": "^6.26.0", - "esutils": "^2.0.2", - "lodash": "^4.17.4", - "to-fast-properties": "^1.0.3" - }, - "dependencies": { - "to-fast-properties": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-1.0.3.tgz", - "integrity": "sha1-uDVx+k2MJbguIxsG46MFXeTKGkc=" - } - } - }, - "babelify": { - "version": "7.3.0", - "resolved": "https://registry.npmjs.org/babelify/-/babelify-7.3.0.tgz", - "integrity": "sha1-qlau3nBn/XvVSWZu4W3ChQh+iOU=", - "requires": { - "babel-core": "^6.0.14", - "object-assign": "^4.0.0" - } - }, - "babylon": { - "version": "6.18.0", - "resolved": "https://registry.npmjs.org/babylon/-/babylon-6.18.0.tgz", - "integrity": "sha512-q/UEjfGJ2Cm3oKV71DJz9d25TPnq5rhBVL2Q4fA5wcC3jcrdn7+SssEybFIxwAvvP+YCsCYNKughoF33GxgycQ==" - }, - "backoff": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/backoff/-/backoff-2.5.0.tgz", - "integrity": "sha1-9hbtqdPktmuMp/ynn2lXIsX44m8=", - "requires": { - "precond": "0.2" - } - }, - "balanced-match": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", - "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=" - }, - "base-x": { - "version": "3.0.8", - "resolved": "https://registry.npmjs.org/base-x/-/base-x-3.0.8.tgz", - "integrity": "sha512-Rl/1AWP4J/zRrk54hhlxH4drNxPJXYUaKffODVI53/dAsV4t9fBxyxYKAVPU1XBHxYwOWP9h9H0hM2MVw4YfJA==", - "requires": { - "safe-buffer": "^5.0.1" - } - }, - "base64-js": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.3.1.tgz", - "integrity": "sha512-mLQ4i2QO1ytvGWFWmcngKO//JXAQueZvwEKtjgQFM4jIK0kU+ytMfplL8j+n5mspOfjHwoAg+9yhb7BwAHm36g==" - }, - "bcrypt-pbkdf": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", - "integrity": "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=", - "requires": { - "tweetnacl": "^0.14.3" - } - }, - "bindings": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/bindings/-/bindings-1.5.0.tgz", - "integrity": "sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==", - "requires": { - "file-uri-to-path": "1.0.0" - } - }, - "bip39": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/bip39/-/bip39-2.6.0.tgz", - "integrity": "sha512-RrnQRG2EgEoqO24ea+Q/fftuPUZLmrEM3qNhhGsA3PbaXaCW791LTzPuVyx/VprXQcTbPJ3K3UeTna8ZnVl2sg==", - "requires": { - "create-hash": "^1.1.0", - "pbkdf2": "^3.0.9", - "randombytes": "^2.0.1", - "safe-buffer": "^5.0.1", - "unorm": "^1.3.3" - } - }, - "bip66": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/bip66/-/bip66-1.1.5.tgz", - "integrity": "sha1-AfqHSHhcpwlV1QESF9GzE5lpyiI=", - "requires": { - "safe-buffer": "^5.0.1" - } - }, - "bl": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/bl/-/bl-1.2.2.tgz", - "integrity": "sha512-e8tQYnZodmebYDWGH7KMRvtzKXaJHx3BbilrgZCfvyLUYdKpK1t5PSPmpkny/SgiTSCnjfLW7v5rlONXVFkQEA==", - "requires": { - "readable-stream": "^2.3.5", - "safe-buffer": "^5.1.1" - } - }, - "bluebird": { - "version": "3.7.2", - "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz", - "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==" - }, - "bn.js": { - "version": "4.11.9", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.9.tgz", - "integrity": "sha512-E6QoYqCKZfgatHTdHzs1RRKP7ip4vvm+EyRUeE2RF0NblwVvb0p6jSVeNTOFxPn26QXN2o6SMfNxKp6kU8zQaw==" - }, - "body-parser": { - "version": "1.19.0", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.19.0.tgz", - "integrity": "sha512-dhEPs72UPbDnAQJ9ZKMNTP6ptJaionhP5cBb541nXPlW60Jepo9RV/a4fX4XWW9CuFNK22krhrj1+rgzifNCsw==", - "requires": { - "bytes": "3.1.0", - "content-type": "~1.0.4", - "debug": "2.6.9", - "depd": "~1.1.2", - "http-errors": "1.7.2", - "iconv-lite": "0.4.24", - "on-finished": "~2.3.0", - "qs": "6.7.0", - "raw-body": "2.4.0", - "type-is": "~1.6.17" - } - }, - "brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "requires": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "brorand": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz", - "integrity": "sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8=" - }, - "browser-stdout": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz", - "integrity": "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==", - "dev": true - }, - "browserify-aes": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.2.0.tgz", - "integrity": "sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==", - "requires": { - "buffer-xor": "^1.0.3", - "cipher-base": "^1.0.0", - "create-hash": "^1.1.0", - "evp_bytestokey": "^1.0.3", - "inherits": "^2.0.1", - "safe-buffer": "^5.0.1" - } - }, - "browserify-cipher": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/browserify-cipher/-/browserify-cipher-1.0.1.tgz", - "integrity": "sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w==", - "requires": { - "browserify-aes": "^1.0.4", - "browserify-des": "^1.0.0", - "evp_bytestokey": "^1.0.0" - } - }, - "browserify-des": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/browserify-des/-/browserify-des-1.0.2.tgz", - "integrity": "sha512-BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A==", - "requires": { - "cipher-base": "^1.0.1", - "des.js": "^1.0.0", - "inherits": "^2.0.1", - "safe-buffer": "^5.1.2" - } - }, - "browserify-rsa": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/browserify-rsa/-/browserify-rsa-4.0.1.tgz", - "integrity": "sha1-IeCr+vbyApzy+vsTNWenAdQTVSQ=", - "requires": { - "bn.js": "^4.1.0", - "randombytes": "^2.0.1" - } - }, - "browserify-sign": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/browserify-sign/-/browserify-sign-4.2.0.tgz", - "integrity": "sha512-hEZC1KEeYuoHRqhGhTy6gWrpJA3ZDjFWv0DE61643ZnOXAKJb3u7yWcrU0mMc9SwAqK1n7myPGndkp0dFG7NFA==", - "requires": { - "bn.js": "^5.1.1", - "browserify-rsa": "^4.0.1", - "create-hash": "^1.2.0", - "create-hmac": "^1.1.7", - "elliptic": "^6.5.2", - "inherits": "^2.0.4", - "parse-asn1": "^5.1.5", - "readable-stream": "^3.6.0", - "safe-buffer": "^5.2.0" - }, - "dependencies": { - "bn.js": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.1.2.tgz", - "integrity": "sha512-40rZaf3bUNKTVYu9sIeeEGOg7g14Yvnj9kH7b50EiwX0Q7A6umbvfI5tvHaOERH0XigqKkfLkFQxzb4e6CIXnA==" - }, - "readable-stream": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", - "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", - "requires": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - } - } - } - }, - "browserslist": { - "version": "3.2.8", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-3.2.8.tgz", - "integrity": "sha512-WHVocJYavUwVgVViC0ORikPHQquXwVh939TaelZ4WDqpWgTX/FsGhl/+P4qBUAGcRvtOgDgC+xftNWWp2RUTAQ==", - "requires": { - "caniuse-lite": "^1.0.30000844", - "electron-to-chromium": "^1.3.47" - } - }, - "bs58": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/bs58/-/bs58-4.0.1.tgz", - "integrity": "sha1-vhYedsNU9veIrkBx9j806MTwpCo=", - "requires": { - "base-x": "^3.0.2" - } - }, - "bs58check": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/bs58check/-/bs58check-2.1.2.tgz", - "integrity": "sha512-0TS1jicxdU09dwJMNZtVAfzPi6Q6QeN0pM1Fkzrjn+XYHvzMKPU3pHVpva+769iNVSfIYWf7LJ6WR+BuuMf8cA==", - "requires": { - "bs58": "^4.0.0", - "create-hash": "^1.1.0", - "safe-buffer": "^5.1.2" - } - }, - "btoa": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/btoa/-/btoa-1.2.1.tgz", - "integrity": "sha512-SB4/MIGlsiVkMcHmT+pSmIPoNDoHg+7cMzmt3Uxt628MTz2487DKSqK/fuhFBrkuqrYv5UCEnACpF4dTFNKc/g==" - }, - "buffer": { - "version": "5.6.0", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.6.0.tgz", - "integrity": "sha512-/gDYp/UtU0eA1ys8bOs9J6a+E/KWIY+DZ+Q2WESNUA0jFRsJOc0SNUO6xJ5SGA1xueg3NL65W6s+NY5l9cunuw==", - "requires": { - "base64-js": "^1.0.2", - "ieee754": "^1.1.4" - } - }, - "buffer-alloc": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/buffer-alloc/-/buffer-alloc-1.2.0.tgz", - "integrity": "sha512-CFsHQgjtW1UChdXgbyJGtnm+O/uLQeZdtbDo8mfUgYXCHSM1wgrVxXm6bSyrUuErEb+4sYVGCzASBRot7zyrow==", - "requires": { - "buffer-alloc-unsafe": "^1.1.0", - "buffer-fill": "^1.0.0" - } - }, - "buffer-alloc-unsafe": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/buffer-alloc-unsafe/-/buffer-alloc-unsafe-1.1.0.tgz", - "integrity": "sha512-TEM2iMIEQdJ2yjPJoSIsldnleVaAk1oW3DBVUykyOLsEsFmEc9kn+SFFPz+gl54KQNxlDnAwCXosOS9Okx2xAg==" - }, - "buffer-crc32": { - "version": "0.2.13", - "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz", - "integrity": "sha1-DTM+PwDqxQqhRUq9MO+MKl2ackI=" - }, - "buffer-fill": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/buffer-fill/-/buffer-fill-1.0.0.tgz", - "integrity": "sha1-+PeLdniYiO858gXNY39o5wISKyw=" - }, - "buffer-from": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz", - "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==" - }, - "buffer-to-arraybuffer": { - "version": "0.0.5", - "resolved": "https://registry.npmjs.org/buffer-to-arraybuffer/-/buffer-to-arraybuffer-0.0.5.tgz", - "integrity": "sha1-YGSkD6dutDxyOrqe+PbhIW0QURo=" - }, - "buffer-xor": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/buffer-xor/-/buffer-xor-1.0.3.tgz", - "integrity": "sha1-JuYe0UIvtw3ULm42cp7VHYVf6Nk=" - }, - "bytes": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz", - "integrity": "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg==" - }, - "cacheable-request": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-6.1.0.tgz", - "integrity": "sha512-Oj3cAGPCqOZX7Rz64Uny2GYAZNliQSqfbePrgAQ1wKAihYmCUnraBtJtKcGR4xz7wF+LoJC+ssFZvv5BgF9Igg==", - "requires": { - "clone-response": "^1.0.2", - "get-stream": "^5.1.0", - "http-cache-semantics": "^4.0.0", - "keyv": "^3.0.0", - "lowercase-keys": "^2.0.0", - "normalize-url": "^4.1.0", - "responselike": "^1.0.2" - }, - "dependencies": { - "get-stream": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.1.0.tgz", - "integrity": "sha512-EXr1FOzrzTfGeL0gQdeFEvOMm2mzMOglyiOXSTpPC+iAjAKftbr3jpCMWynogwYnM+eSj9sHGc6wjIcDvYiygw==", - "requires": { - "pump": "^3.0.0" - } - }, - "lowercase-keys": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-2.0.0.tgz", - "integrity": "sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==" - } - } - }, - "caniuse-lite": { - "version": "1.0.30001093", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001093.tgz", - "integrity": "sha512-0+ODNoOjtWD5eS9aaIpf4K0gQqZfILNY4WSNuYzeT1sXni+lMrrVjc0odEobJt6wrODofDZUX8XYi/5y7+xl8g==" - }, - "caseless": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", - "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=" - }, - "chalk": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", - "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", - "requires": { - "ansi-styles": "^2.2.1", - "escape-string-regexp": "^1.0.2", - "has-ansi": "^2.0.0", - "strip-ansi": "^3.0.0", - "supports-color": "^2.0.0" - }, - "dependencies": { - "supports-color": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", - "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=" - } - } - }, - "checkpoint-store": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/checkpoint-store/-/checkpoint-store-1.1.0.tgz", - "integrity": "sha1-BOTLUWuRQziTWB5tRgGnjpVS6gY=", - "requires": { - "functional-red-black-tree": "^1.0.1" - } - }, - "chownr": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", - "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==" - }, - "cipher-base": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.4.tgz", - "integrity": "sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==", - "requires": { - "inherits": "^2.0.1", - "safe-buffer": "^5.0.1" - } - }, - "clone": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/clone/-/clone-2.1.2.tgz", - "integrity": "sha1-G39Ln1kfHo+DZwQBYANFoCiHQ18=" - }, - "clone-response": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/clone-response/-/clone-response-1.0.2.tgz", - "integrity": "sha1-0dyXOSAxTfZ/vrlCI7TuNQI56Ws=", - "requires": { - "mimic-response": "^1.0.0" - } - }, - "combined-stream": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", - "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", - "requires": { - "delayed-stream": "~1.0.0" - } - }, - "commander": { - "version": "2.8.1", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.8.1.tgz", - "integrity": "sha1-Br42f+v9oMMwqh4qBy09yXYkJdQ=", - "requires": { - "graceful-readlink": ">= 1.0.0" - } - }, - "concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" - }, - "concat-stream": { - "version": "1.6.2", - "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz", - "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==", - "requires": { - "buffer-from": "^1.0.0", - "inherits": "^2.0.3", - "readable-stream": "^2.2.2", - "typedarray": "^0.0.6" - } - }, - "content-disposition": { - "version": "0.5.3", - "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.3.tgz", - "integrity": "sha512-ExO0774ikEObIAEV9kDo50o+79VCUdEB6n6lzKgGwupcVeRlhrj3qGAfwq8G6uBJjkqLrhT0qEYFcWng8z1z0g==", - "requires": { - "safe-buffer": "5.1.2" - }, - "dependencies": { - "safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" - } - } - }, - "content-type": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz", - "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==" - }, - "convert-source-map": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.7.0.tgz", - "integrity": "sha512-4FJkXzKXEDB1snCFZlLP4gpC3JILicCpGbzG9f9G7tGqGCzETQ2hWPrcinA9oU4wtf2biUaEH5065UnMeR33oA==", - "requires": { - "safe-buffer": "~5.1.1" - }, - "dependencies": { - "safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" - } - } - }, - "cookie": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.0.tgz", - "integrity": "sha512-+Hp8fLp57wnUSt0tY0tHEXh4voZRDnoIrZPqlo3DPiI4y9lwg/jqx+1Om94/W6ZaPDOUbnjOt/99w66zk+l1Xg==" - }, - "cookie-signature": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", - "integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw=" - }, - "cookiejar": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/cookiejar/-/cookiejar-2.1.2.tgz", - "integrity": "sha512-Mw+adcfzPxcPeI+0WlvRrr/3lGVO0bD75SxX6811cxSh1Wbxx7xZBGK1eVtDf6si8rg2lhnUjsVLMFMfbRIuwA==" - }, - "core-js": { - "version": "2.6.11", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.6.11.tgz", - "integrity": "sha512-5wjnpaT/3dV+XB4borEsnAYQchn00XSgTAWKDkEqv+K8KevjbzmofK6hfJ9TZIlpj2N0xQpazy7PiRQiWHqzWg==" - }, - "core-util-is": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", - "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=" - }, - "cors": { - "version": "2.8.5", - "resolved": "https://registry.npmjs.org/cors/-/cors-2.8.5.tgz", - "integrity": "sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==", - "requires": { - "object-assign": "^4", - "vary": "^1" - } - }, - "create-ecdh": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/create-ecdh/-/create-ecdh-4.0.3.tgz", - "integrity": "sha512-GbEHQPMOswGpKXM9kCWVrremUcBmjteUaQ01T9rkKCPDXfUHX0IoP9LpHYo2NPFampa4e+/pFDc3jQdxrxQLaw==", - "requires": { - "bn.js": "^4.1.0", - "elliptic": "^6.0.0" - } - }, - "create-hash": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/create-hash/-/create-hash-1.2.0.tgz", - "integrity": "sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==", - "requires": { - "cipher-base": "^1.0.1", - "inherits": "^2.0.1", - "md5.js": "^1.3.4", - "ripemd160": "^2.0.1", - "sha.js": "^2.4.0" - } - }, - "create-hmac": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/create-hmac/-/create-hmac-1.1.7.tgz", - "integrity": "sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==", - "requires": { - "cipher-base": "^1.0.3", - "create-hash": "^1.1.0", - "inherits": "^2.0.1", - "ripemd160": "^2.0.0", - "safe-buffer": "^5.0.1", - "sha.js": "^2.4.8" - } - }, - "cross-fetch": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-2.2.3.tgz", - "integrity": "sha512-PrWWNH3yL2NYIb/7WF/5vFG3DCQiXDOVf8k3ijatbrtnwNuhMWLC7YF7uqf53tbTFDzHIUD8oITw4Bxt8ST3Nw==", - "requires": { - "node-fetch": "2.1.2", - "whatwg-fetch": "2.0.4" - } - }, - "crypto-browserify": { - "version": "3.12.0", - "resolved": "https://registry.npmjs.org/crypto-browserify/-/crypto-browserify-3.12.0.tgz", - "integrity": "sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg==", - "requires": { - "browserify-cipher": "^1.0.0", - "browserify-sign": "^4.0.0", - "create-ecdh": "^4.0.0", - "create-hash": "^1.1.0", - "create-hmac": "^1.1.0", - "diffie-hellman": "^5.0.0", - "inherits": "^2.0.1", - "pbkdf2": "^3.0.3", - "public-encrypt": "^4.0.0", - "randombytes": "^2.0.0", - "randomfill": "^1.0.3" - } - }, - "d": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/d/-/d-1.0.1.tgz", - "integrity": "sha512-m62ShEObQ39CfralilEQRjH6oAMtNCV1xJyEx5LpRYUVN+EviphDgUc/F3hnYbADmkiNs67Y+3ylmlG7Lnu+FA==", - "requires": { - "es5-ext": "^0.10.50", - "type": "^1.0.1" - } - }, - "dashdash": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", - "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=", - "requires": { - "assert-plus": "^1.0.0" - } - }, - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "requires": { - "ms": "2.0.0" - } - }, - "decode-uri-component": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz", - "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=" - }, - "decompress": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/decompress/-/decompress-4.2.1.tgz", - "integrity": "sha512-e48kc2IjU+2Zw8cTb6VZcJQ3lgVbS4uuB1TfCHbiZIP/haNXm+SVyhu+87jts5/3ROpd82GSVCoNs/z8l4ZOaQ==", - "requires": { - "decompress-tar": "^4.0.0", - "decompress-tarbz2": "^4.0.0", - "decompress-targz": "^4.0.0", - "decompress-unzip": "^4.0.1", - "graceful-fs": "^4.1.10", - "make-dir": "^1.0.0", - "pify": "^2.3.0", - "strip-dirs": "^2.0.0" - } - }, - "decompress-response": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-3.3.0.tgz", - "integrity": "sha1-gKTdMjdIOEv6JICDYirt7Jgq3/M=", - "requires": { - "mimic-response": "^1.0.0" - } - }, - "decompress-tar": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/decompress-tar/-/decompress-tar-4.1.1.tgz", - "integrity": "sha512-JdJMaCrGpB5fESVyxwpCx4Jdj2AagLmv3y58Qy4GE6HMVjWz1FeVQk1Ct4Kye7PftcdOo/7U7UKzYBJgqnGeUQ==", - "requires": { - "file-type": "^5.2.0", - "is-stream": "^1.1.0", - "tar-stream": "^1.5.2" - } - }, - "decompress-tarbz2": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/decompress-tarbz2/-/decompress-tarbz2-4.1.1.tgz", - "integrity": "sha512-s88xLzf1r81ICXLAVQVzaN6ZmX4A6U4z2nMbOwobxkLoIIfjVMBg7TeguTUXkKeXni795B6y5rnvDw7rxhAq9A==", - "requires": { - "decompress-tar": "^4.1.0", - "file-type": "^6.1.0", - "is-stream": "^1.1.0", - "seek-bzip": "^1.0.5", - "unbzip2-stream": "^1.0.9" - }, - "dependencies": { - "file-type": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/file-type/-/file-type-6.2.0.tgz", - "integrity": "sha512-YPcTBDV+2Tm0VqjybVd32MHdlEGAtuxS3VAYsumFokDSMG+ROT5wawGlnHDoz7bfMcMDt9hxuXvXwoKUx2fkOg==" - } - } - }, - "decompress-targz": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/decompress-targz/-/decompress-targz-4.1.1.tgz", - "integrity": "sha512-4z81Znfr6chWnRDNfFNqLwPvm4db3WuZkqV+UgXQzSngG3CEKdBkw5jrv3axjjL96glyiiKjsxJG3X6WBZwX3w==", - "requires": { - "decompress-tar": "^4.1.1", - "file-type": "^5.2.0", - "is-stream": "^1.1.0" - } - }, - "decompress-unzip": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/decompress-unzip/-/decompress-unzip-4.0.1.tgz", - "integrity": "sha1-3qrM39FK6vhVePczroIQ+bSEj2k=", - "requires": { - "file-type": "^3.8.0", - "get-stream": "^2.2.0", - "pify": "^2.3.0", - "yauzl": "^2.4.2" - }, - "dependencies": { - "file-type": { - "version": "3.9.0", - "resolved": "https://registry.npmjs.org/file-type/-/file-type-3.9.0.tgz", - "integrity": "sha1-JXoHg4TR24CHvESdEH1SpSZyuek=" - }, - "get-stream": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-2.3.1.tgz", - "integrity": "sha1-Xzj5PzRgCWZu4BUKBUFn+Rvdld4=", - "requires": { - "object-assign": "^4.0.1", - "pinkie-promise": "^2.0.0" - } - } - } - }, - "deep-equal": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-1.1.1.tgz", - "integrity": "sha512-yd9c5AdiqVcR+JjcwUQb9DkhJc8ngNr0MahEBGvDiJw8puWab2yZlh+nkasOnZP+EGTAP6rRp2JzJhJZzvNF8g==", - "requires": { - "is-arguments": "^1.0.4", - "is-date-object": "^1.0.1", - "is-regex": "^1.0.4", - "object-is": "^1.0.1", - "object-keys": "^1.1.1", - "regexp.prototype.flags": "^1.2.0" - }, - "dependencies": { - "object-keys": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", - "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==" - } - } - }, - "defer-to-connect": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-1.1.3.tgz", - "integrity": "sha512-0ISdNousHvZT2EiFlZeZAHBUvSxmKswVCEf8hW7KWgG4a8MVEu/3Vb6uWYozkjylyCxe0JBIiRB1jV45S70WVQ==" - }, - "deferred-leveldown": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/deferred-leveldown/-/deferred-leveldown-1.2.2.tgz", - "integrity": "sha512-uukrWD2bguRtXilKt6cAWKyoXrTSMo5m7crUdLfWQmu8kIm88w3QZoUL+6nhpfKVmhHANER6Re3sKoNoZ3IKMA==", - "requires": { - "abstract-leveldown": "~2.6.0" - } - }, - "define-properties": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", - "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==", - "requires": { - "object-keys": "^1.0.12" - }, - "dependencies": { - "object-keys": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", - "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==" - } - } - }, - "defined": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/defined/-/defined-1.0.0.tgz", - "integrity": "sha1-yY2bzvdWdBiOEQlpFRGZ45sfppM=" - }, - "delayed-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", - "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=" - }, - "depd": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", - "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=" - }, - "des.js": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/des.js/-/des.js-1.0.1.tgz", - "integrity": "sha512-Q0I4pfFrv2VPd34/vfLrFOoRmlYj3OV50i7fskps1jZWK1kApMWWT9G6RRUeYedLcBDIhnSDaUvJMb3AhUlaEA==", - "requires": { - "inherits": "^2.0.1", - "minimalistic-assert": "^1.0.0" - } - }, - "destroy": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz", - "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=" - }, - "detect-indent": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/detect-indent/-/detect-indent-4.0.0.tgz", - "integrity": "sha1-920GQ1LN9Docts5hnE7jqUdd4gg=", - "requires": { - "repeating": "^2.0.0" - } - }, - "diff": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/diff/-/diff-3.5.0.tgz", - "integrity": "sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA==", - "dev": true - }, - "diffie-hellman": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/diffie-hellman/-/diffie-hellman-5.0.3.tgz", - "integrity": "sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg==", - "requires": { - "bn.js": "^4.1.0", - "miller-rabin": "^4.0.0", - "randombytes": "^2.0.0" - } - }, - "dom-walk": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/dom-walk/-/dom-walk-0.1.2.tgz", - "integrity": "sha512-6QvTW9mrGeIegrFXdtQi9pk7O/nSK6lSdXW2eqUspN5LWD7UTji2Fqw5V2YLjBpHEoU9Xl/eUWNpDeZvoyOv2w==" - }, - "dotignore": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/dotignore/-/dotignore-0.1.2.tgz", - "integrity": "sha512-UGGGWfSauusaVJC+8fgV+NVvBXkCTmVv7sk6nojDZZvuOUNGUy0Zk4UpHQD6EDjS0jpBwcACvH4eofvyzBcRDw==", - "requires": { - "minimatch": "^3.0.4" - } - }, - "drbg.js": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/drbg.js/-/drbg.js-1.0.1.tgz", - "integrity": "sha1-Pja2xCs3BDgjzbwzLVjzHiRFSAs=", - "requires": { - "browserify-aes": "^1.0.6", - "create-hash": "^1.1.2", - "create-hmac": "^1.1.4" - } - }, - "duplexer3": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/duplexer3/-/duplexer3-0.1.4.tgz", - "integrity": "sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI=" - }, - "ecc-jsbn": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", - "integrity": "sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=", - "requires": { - "jsbn": "~0.1.0", - "safer-buffer": "^2.1.0" - } - }, - "ee-first": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", - "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=" - }, - "electron-to-chromium": { - "version": "1.3.484", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.484.tgz", - "integrity": "sha512-esh5mmjAGl6HhAaYgHlDZme+jCIc+XIrLrBTwxviE+pM64UBmdLUIHLlrPzJGbit7hQI1TR/oGDQWCvQZ5yrFA==" - }, - "elliptic": { - "version": "6.5.3", - "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.3.tgz", - "integrity": "sha512-IMqzv5wNQf+E6aHeIqATs0tOLeOTwj1QKbRcS3jBbYkl5oLAserA8yJTT7/VyHUYG91PRmPyeQDObKLPpeS4dw==", - "requires": { - "bn.js": "^4.4.0", - "brorand": "^1.0.1", - "hash.js": "^1.0.0", - "hmac-drbg": "^1.0.0", - "inherits": "^2.0.1", - "minimalistic-assert": "^1.0.0", - "minimalistic-crypto-utils": "^1.0.0" - } - }, - "encodeurl": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", - "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=" - }, - "encoding": { - "version": "0.1.12", - "resolved": "https://registry.npmjs.org/encoding/-/encoding-0.1.12.tgz", - "integrity": "sha1-U4tm8+5izRq1HsMjgp0flIDHS+s=", - "requires": { - "iconv-lite": "~0.4.13" - } - }, - "end-of-stream": { - "version": "1.4.4", - "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", - "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", - "requires": { - "once": "^1.4.0" - } - }, - "errno": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/errno/-/errno-0.1.7.tgz", - "integrity": "sha512-MfrRBDWzIWifgq6tJj60gkAwtLNb6sQPlcFrSOflcP1aFmmruKQ2wRnze/8V6kgyz7H3FF8Npzv78mZ7XLLflg==", - "requires": { - "prr": "~1.0.1" - } - }, - "es-abstract": { - "version": "1.17.6", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.17.6.tgz", - "integrity": "sha512-Fr89bON3WFyUi5EvAeI48QTWX0AyekGgLA8H+c+7fbfCkJwRWRMLd8CQedNEyJuoYYhmtEqY92pgte1FAhBlhw==", - "requires": { - "es-to-primitive": "^1.2.1", - "function-bind": "^1.1.1", - "has": "^1.0.3", - "has-symbols": "^1.0.1", - "is-callable": "^1.2.0", - "is-regex": "^1.1.0", - "object-inspect": "^1.7.0", - "object-keys": "^1.1.1", - "object.assign": "^4.1.0", - "string.prototype.trimend": "^1.0.1", - "string.prototype.trimstart": "^1.0.1" - }, - "dependencies": { - "is-regex": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.0.tgz", - "integrity": "sha512-iI97M8KTWID2la5uYXlkbSDQIg4F6o1sYboZKKTDpnDQMLtUL86zxhgDet3Q2SriaYsyGqZ6Mn2SjbRKeLHdqw==", - "requires": { - "has-symbols": "^1.0.1" - } - }, - "object-keys": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", - "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==" - } - } - }, - "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==", - "requires": { - "is-callable": "^1.1.4", - "is-date-object": "^1.0.1", - "is-symbol": "^1.0.2" - } - }, - "es5-ext": { - "version": "0.10.53", - "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.53.tgz", - "integrity": "sha512-Xs2Stw6NiNHWypzRTY1MtaG/uJlwCk8kH81920ma8mvN8Xq1gsfhZvpkImLQArw8AHnv8MT2I45J3c0R8slE+Q==", - "requires": { - "es6-iterator": "~2.0.3", - "es6-symbol": "~3.1.3", - "next-tick": "~1.0.0" - } - }, - "es6-iterator": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.3.tgz", - "integrity": "sha1-p96IkUGgWpSwhUQDstCg+/qY87c=", - "requires": { - "d": "1", - "es5-ext": "^0.10.35", - "es6-symbol": "^3.1.1" - } - }, - "es6-symbol": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.3.tgz", - "integrity": "sha512-NJ6Yn3FuDinBaBRWl/q5X/s4koRHBrgKAu+yGI6JCBeiu3qrcbJhwT2GeR/EXVfylRk8dpQVJoLEFhK+Mu31NA==", - "requires": { - "d": "^1.0.1", - "ext": "^1.1.2" - } - }, - "escape-html": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", - "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=" - }, - "escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=" - }, - "esutils": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", - "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==" - }, - "etag": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", - "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=" - }, - "eth-block-tracker": { - "version": "4.4.3", - "resolved": "https://registry.npmjs.org/eth-block-tracker/-/eth-block-tracker-4.4.3.tgz", - "integrity": "sha512-A8tG4Z4iNg4mw5tP1Vung9N9IjgMNqpiMoJ/FouSFwNCGHv2X0mmOYwtQOJzki6XN7r7Tyo01S29p7b224I4jw==", - "requires": { - "@babel/plugin-transform-runtime": "^7.5.5", - "@babel/runtime": "^7.5.5", - "eth-query": "^2.1.0", - "json-rpc-random-id": "^1.0.1", - "pify": "^3.0.0", - "safe-event-emitter": "^1.0.1" - }, - "dependencies": { - "pify": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", - "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=" - } - } - }, - "eth-ens-namehash": { - "version": "2.0.8", - "resolved": "https://registry.npmjs.org/eth-ens-namehash/-/eth-ens-namehash-2.0.8.tgz", - "integrity": "sha1-IprEbsqG1S4MmR58sq74P/D2i88=", - "requires": { - "idna-uts46-hx": "^2.3.1", - "js-sha3": "^0.5.7" - } - }, - "eth-json-rpc-errors": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/eth-json-rpc-errors/-/eth-json-rpc-errors-1.1.1.tgz", - "integrity": "sha512-WT5shJ5KfNqHi9jOZD+ID8I1kuYWNrigtZat7GOQkvwo99f8SzAVaEcWhJUv656WiZOAg3P1RiJQANtUmDmbIg==", - "requires": { - "fast-safe-stringify": "^2.0.6" - } - }, - "eth-json-rpc-filters": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/eth-json-rpc-filters/-/eth-json-rpc-filters-4.1.1.tgz", - "integrity": "sha512-GkXb2h6STznD+AmMzblwXgm1JMvjdK9PTIXG7BvIkTlXQ9g0QOxuU1iQRYHoslF9S30BYBSoLSisAYPdLggW+A==", - "requires": { - "await-semaphore": "^0.1.3", - "eth-json-rpc-middleware": "^4.1.4", - "eth-query": "^2.1.2", - "json-rpc-engine": "^5.1.3", - "lodash.flatmap": "^4.5.0", - "safe-event-emitter": "^1.0.1" - } - }, - "eth-json-rpc-infura": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/eth-json-rpc-infura/-/eth-json-rpc-infura-3.2.1.tgz", - "integrity": "sha512-W7zR4DZvyTn23Bxc0EWsq4XGDdD63+XPUCEhV2zQvQGavDVC4ZpFDK4k99qN7bd7/fjj37+rxmuBOBeIqCA5Mw==", - "requires": { - "cross-fetch": "^2.1.1", - "eth-json-rpc-middleware": "^1.5.0", - "json-rpc-engine": "^3.4.0", - "json-rpc-error": "^2.0.0" - }, - "dependencies": { - "eth-json-rpc-middleware": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/eth-json-rpc-middleware/-/eth-json-rpc-middleware-1.6.0.tgz", - "integrity": "sha512-tDVCTlrUvdqHKqivYMjtFZsdD7TtpNLBCfKAcOpaVs7orBMS/A8HWro6dIzNtTZIR05FAbJ3bioFOnZpuCew9Q==", - "requires": { - "async": "^2.5.0", - "eth-query": "^2.1.2", - "eth-tx-summary": "^3.1.2", - "ethereumjs-block": "^1.6.0", - "ethereumjs-tx": "^1.3.3", - "ethereumjs-util": "^5.1.2", - "ethereumjs-vm": "^2.1.0", - "fetch-ponyfill": "^4.0.0", - "json-rpc-engine": "^3.6.0", - "json-rpc-error": "^2.0.0", - "json-stable-stringify": "^1.0.1", - "promise-to-callback": "^1.0.0", - "tape": "^4.6.3" - } - }, - "ethereumjs-util": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-5.2.0.tgz", - "integrity": "sha512-CJAKdI0wgMbQFLlLRtZKGcy/L6pzVRgelIZqRqNbuVFM3K9VEnyfbcvz0ncWMRNCe4kaHWjwRYQcYMucmwsnWA==", - "requires": { - "bn.js": "^4.11.0", - "create-hash": "^1.1.2", - "ethjs-util": "^0.1.3", - "keccak": "^1.0.2", - "rlp": "^2.0.0", - "safe-buffer": "^5.1.1", - "secp256k1": "^3.0.1" - } - }, - "json-rpc-engine": { - "version": "3.8.0", - "resolved": "https://registry.npmjs.org/json-rpc-engine/-/json-rpc-engine-3.8.0.tgz", - "integrity": "sha512-6QNcvm2gFuuK4TKU1uwfH0Qd/cOSb9c1lls0gbnIhciktIUQJwz6NQNAW4B1KiGPenv7IKu97V222Yo1bNhGuA==", - "requires": { - "async": "^2.0.1", - "babel-preset-env": "^1.7.0", - "babelify": "^7.3.0", - "json-rpc-error": "^2.0.0", - "promise-to-callback": "^1.0.0", - "safe-event-emitter": "^1.0.1" - } - }, - "keccak": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/keccak/-/keccak-1.4.0.tgz", - "integrity": "sha512-eZVaCpblK5formjPjeTBik7TAg+pqnDrMHIffSvi9Lh7PQgM1+hSzakUeZFCk9DVVG0dacZJuaz2ntwlzZUIBw==", - "requires": { - "bindings": "^1.2.1", - "inherits": "^2.0.3", - "nan": "^2.2.1", - "safe-buffer": "^5.1.0" - } - } - } - }, - "eth-json-rpc-middleware": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/eth-json-rpc-middleware/-/eth-json-rpc-middleware-4.4.1.tgz", - "integrity": "sha512-yoSuRgEYYGFdVeZg3poWOwAlRI+MoBIltmOB86MtpoZjvLbou9EB/qWMOWSmH2ryCWLW97VYY6NWsmWm3OAA7A==", - "requires": { - "btoa": "^1.2.1", - "clone": "^2.1.1", - "eth-json-rpc-errors": "^1.0.1", - "eth-query": "^2.1.2", - "eth-sig-util": "^1.4.2", - "ethereumjs-block": "^1.6.0", - "ethereumjs-tx": "^1.3.7", - "ethereumjs-util": "^5.1.2", - "ethereumjs-vm": "^2.6.0", - "fetch-ponyfill": "^4.0.0", - "json-rpc-engine": "^5.1.3", - "json-stable-stringify": "^1.0.1", - "pify": "^3.0.0", - "safe-event-emitter": "^1.0.1" - }, - "dependencies": { - "ethereumjs-util": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-5.2.0.tgz", - "integrity": "sha512-CJAKdI0wgMbQFLlLRtZKGcy/L6pzVRgelIZqRqNbuVFM3K9VEnyfbcvz0ncWMRNCe4kaHWjwRYQcYMucmwsnWA==", - "requires": { - "bn.js": "^4.11.0", - "create-hash": "^1.1.2", - "ethjs-util": "^0.1.3", - "keccak": "^1.0.2", - "rlp": "^2.0.0", - "safe-buffer": "^5.1.1", - "secp256k1": "^3.0.1" - } - }, - "keccak": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/keccak/-/keccak-1.4.0.tgz", - "integrity": "sha512-eZVaCpblK5formjPjeTBik7TAg+pqnDrMHIffSvi9Lh7PQgM1+hSzakUeZFCk9DVVG0dacZJuaz2ntwlzZUIBw==", - "requires": { - "bindings": "^1.2.1", - "inherits": "^2.0.3", - "nan": "^2.2.1", - "safe-buffer": "^5.1.0" - } - }, - "pify": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", - "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=" - } - } - }, - "eth-lib": { - "version": "0.1.29", - "resolved": "https://registry.npmjs.org/eth-lib/-/eth-lib-0.1.29.tgz", - "integrity": "sha512-bfttrr3/7gG4E02HoWTDUcDDslN003OlOoBxk9virpAZQ1ja/jDgwkWB8QfJF7ojuEowrqy+lzp9VcJG7/k5bQ==", - "requires": { - "bn.js": "^4.11.6", - "elliptic": "^6.4.0", - "nano-json-stream-parser": "^0.1.2", - "servify": "^0.1.12", - "ws": "^3.0.0", - "xhr-request-promise": "^0.1.2" - } - }, - "eth-query": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/eth-query/-/eth-query-2.1.2.tgz", - "integrity": "sha1-1nQdkAAQa1FRDHLbktY2VFam2l4=", - "requires": { - "json-rpc-random-id": "^1.0.0", - "xtend": "^4.0.1" - } - }, - "eth-sig-util": { - "version": "1.4.2", - "resolved": "https://registry.npmjs.org/eth-sig-util/-/eth-sig-util-1.4.2.tgz", - "integrity": "sha1-jZWCAsftuq6Dlwf7pvCf8ydgYhA=", - "requires": { - "ethereumjs-abi": "git+https://github.com/ethereumjs/ethereumjs-abi.git", - "ethereumjs-util": "^5.1.1" - }, - "dependencies": { - "ethereumjs-util": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-5.2.0.tgz", - "integrity": "sha512-CJAKdI0wgMbQFLlLRtZKGcy/L6pzVRgelIZqRqNbuVFM3K9VEnyfbcvz0ncWMRNCe4kaHWjwRYQcYMucmwsnWA==", - "requires": { - "bn.js": "^4.11.0", - "create-hash": "^1.1.2", - "ethjs-util": "^0.1.3", - "keccak": "^1.0.2", - "rlp": "^2.0.0", - "safe-buffer": "^5.1.1", - "secp256k1": "^3.0.1" - } - }, - "keccak": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/keccak/-/keccak-1.4.0.tgz", - "integrity": "sha512-eZVaCpblK5formjPjeTBik7TAg+pqnDrMHIffSvi9Lh7PQgM1+hSzakUeZFCk9DVVG0dacZJuaz2ntwlzZUIBw==", - "requires": { - "bindings": "^1.2.1", - "inherits": "^2.0.3", - "nan": "^2.2.1", - "safe-buffer": "^5.1.0" - } - } - } - }, - "eth-tx-summary": { - "version": "3.2.4", - "resolved": "https://registry.npmjs.org/eth-tx-summary/-/eth-tx-summary-3.2.4.tgz", - "integrity": "sha512-NtlDnaVZah146Rm8HMRUNMgIwG/ED4jiqk0TME9zFheMl1jOp6jL1m0NKGjJwehXQ6ZKCPr16MTr+qspKpEXNg==", - "requires": { - "async": "^2.1.2", - "clone": "^2.0.0", - "concat-stream": "^1.5.1", - "end-of-stream": "^1.1.0", - "eth-query": "^2.0.2", - "ethereumjs-block": "^1.4.1", - "ethereumjs-tx": "^1.1.1", - "ethereumjs-util": "^5.0.1", - "ethereumjs-vm": "^2.6.0", - "through2": "^2.0.3" - }, - "dependencies": { - "ethereumjs-util": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-5.2.0.tgz", - "integrity": "sha512-CJAKdI0wgMbQFLlLRtZKGcy/L6pzVRgelIZqRqNbuVFM3K9VEnyfbcvz0ncWMRNCe4kaHWjwRYQcYMucmwsnWA==", - "requires": { - "bn.js": "^4.11.0", - "create-hash": "^1.1.2", - "ethjs-util": "^0.1.3", - "keccak": "^1.0.2", - "rlp": "^2.0.0", - "safe-buffer": "^5.1.1", - "secp256k1": "^3.0.1" - } - }, - "keccak": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/keccak/-/keccak-1.4.0.tgz", - "integrity": "sha512-eZVaCpblK5formjPjeTBik7TAg+pqnDrMHIffSvi9Lh7PQgM1+hSzakUeZFCk9DVVG0dacZJuaz2ntwlzZUIBw==", - "requires": { - "bindings": "^1.2.1", - "inherits": "^2.0.3", - "nan": "^2.2.1", - "safe-buffer": "^5.1.0" - } - } - } - }, - "ethereum-common": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/ethereum-common/-/ethereum-common-0.2.0.tgz", - "integrity": "sha512-XOnAR/3rntJgbCdGhqdaLIxDLWKLmsZOGhHdBKadEr6gEnJLH52k93Ou+TUdFaPN3hJc3isBZBal3U/XZ15abA==" - }, - "ethereum-protocol": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/ethereum-protocol/-/ethereum-protocol-1.0.1.tgz", - "integrity": "sha512-3KLX1mHuEsBW0dKG+c6EOJS1NBNqdCICvZW9sInmZTt5aY0oxmHVggYRE0lJu1tcnMD1K+AKHdLi6U43Awm1Vg==" - }, - "ethereumjs-abi": { - "version": "git+ssh://git@github.com/ethereumjs/ethereumjs-abi.git#1cfbb13862f90f0b391d8a699544d5fe4dfb8c7b", - "from": "ethereumjs-abi@git+https://github.com/ethereumjs/ethereumjs-abi.git", - "requires": { - "bn.js": "^4.11.8", - "ethereumjs-util": "^6.0.0" - } - }, - "ethereumjs-account": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/ethereumjs-account/-/ethereumjs-account-2.0.5.tgz", - "integrity": "sha512-bgDojnXGjhMwo6eXQC0bY6UK2liSFUSMwwylOmQvZbSl/D7NXQ3+vrGO46ZeOgjGfxXmgIeVNDIiHw7fNZM4VA==", - "requires": { - "ethereumjs-util": "^5.0.0", - "rlp": "^2.0.0", - "safe-buffer": "^5.1.1" - }, - "dependencies": { - "ethereumjs-util": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-5.2.0.tgz", - "integrity": "sha512-CJAKdI0wgMbQFLlLRtZKGcy/L6pzVRgelIZqRqNbuVFM3K9VEnyfbcvz0ncWMRNCe4kaHWjwRYQcYMucmwsnWA==", - "requires": { - "bn.js": "^4.11.0", - "create-hash": "^1.1.2", - "ethjs-util": "^0.1.3", - "keccak": "^1.0.2", - "rlp": "^2.0.0", - "safe-buffer": "^5.1.1", - "secp256k1": "^3.0.1" - } - }, - "keccak": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/keccak/-/keccak-1.4.0.tgz", - "integrity": "sha512-eZVaCpblK5formjPjeTBik7TAg+pqnDrMHIffSvi9Lh7PQgM1+hSzakUeZFCk9DVVG0dacZJuaz2ntwlzZUIBw==", - "requires": { - "bindings": "^1.2.1", - "inherits": "^2.0.3", - "nan": "^2.2.1", - "safe-buffer": "^5.1.0" - } - } - } - }, - "ethereumjs-block": { - "version": "1.7.1", - "resolved": "https://registry.npmjs.org/ethereumjs-block/-/ethereumjs-block-1.7.1.tgz", - "integrity": "sha512-B+sSdtqm78fmKkBq78/QLKJbu/4Ts4P2KFISdgcuZUPDm9x+N7qgBPIIFUGbaakQh8bzuquiRVbdmvPKqbILRg==", - "requires": { - "async": "^2.0.1", - "ethereum-common": "0.2.0", - "ethereumjs-tx": "^1.2.2", - "ethereumjs-util": "^5.0.0", - "merkle-patricia-tree": "^2.1.2" - }, - "dependencies": { - "ethereumjs-util": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-5.2.0.tgz", - "integrity": "sha512-CJAKdI0wgMbQFLlLRtZKGcy/L6pzVRgelIZqRqNbuVFM3K9VEnyfbcvz0ncWMRNCe4kaHWjwRYQcYMucmwsnWA==", - "requires": { - "bn.js": "^4.11.0", - "create-hash": "^1.1.2", - "ethjs-util": "^0.1.3", - "keccak": "^1.0.2", - "rlp": "^2.0.0", - "safe-buffer": "^5.1.1", - "secp256k1": "^3.0.1" - } - }, - "keccak": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/keccak/-/keccak-1.4.0.tgz", - "integrity": "sha512-eZVaCpblK5formjPjeTBik7TAg+pqnDrMHIffSvi9Lh7PQgM1+hSzakUeZFCk9DVVG0dacZJuaz2ntwlzZUIBw==", - "requires": { - "bindings": "^1.2.1", - "inherits": "^2.0.3", - "nan": "^2.2.1", - "safe-buffer": "^5.1.0" - } - } - } - }, - "ethereumjs-common": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/ethereumjs-common/-/ethereumjs-common-1.5.1.tgz", - "integrity": "sha512-aVUPRLgmXORGXXEVkFYgPhr9TGtpBY2tGhZ9Uh0A3lIUzUDr1x6kQx33SbjPUkLkX3eniPQnIL/2psjkjrOfcQ==" - }, - "ethereumjs-tx": { - "version": "1.3.7", - "resolved": "https://registry.npmjs.org/ethereumjs-tx/-/ethereumjs-tx-1.3.7.tgz", - "integrity": "sha512-wvLMxzt1RPhAQ9Yi3/HKZTn0FZYpnsmQdbKYfUUpi4j1SEIcbkd9tndVjcPrufY3V7j2IebOpC00Zp2P/Ay2kA==", - "requires": { - "ethereum-common": "^0.0.18", - "ethereumjs-util": "^5.0.0" - }, - "dependencies": { - "ethereum-common": { - "version": "0.0.18", - "resolved": "https://registry.npmjs.org/ethereum-common/-/ethereum-common-0.0.18.tgz", - "integrity": "sha1-L9w1dvIykDNYl26znaeDIT/5Uj8=" - }, - "ethereumjs-util": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-5.2.0.tgz", - "integrity": "sha512-CJAKdI0wgMbQFLlLRtZKGcy/L6pzVRgelIZqRqNbuVFM3K9VEnyfbcvz0ncWMRNCe4kaHWjwRYQcYMucmwsnWA==", - "requires": { - "bn.js": "^4.11.0", - "create-hash": "^1.1.2", - "ethjs-util": "^0.1.3", - "keccak": "^1.0.2", - "rlp": "^2.0.0", - "safe-buffer": "^5.1.1", - "secp256k1": "^3.0.1" - } - }, - "keccak": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/keccak/-/keccak-1.4.0.tgz", - "integrity": "sha512-eZVaCpblK5formjPjeTBik7TAg+pqnDrMHIffSvi9Lh7PQgM1+hSzakUeZFCk9DVVG0dacZJuaz2ntwlzZUIBw==", - "requires": { - "bindings": "^1.2.1", - "inherits": "^2.0.3", - "nan": "^2.2.1", - "safe-buffer": "^5.1.0" - } - } - } - }, - "ethereumjs-util": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-6.2.0.tgz", - "integrity": "sha512-vb0XN9J2QGdZGIEKG2vXM+kUdEivUfU6Wmi5y0cg+LRhDYKnXIZ/Lz7XjFbHRR9VIKq2lVGLzGBkA++y2nOdOQ==", - "requires": { - "@types/bn.js": "^4.11.3", - "bn.js": "^4.11.0", - "create-hash": "^1.1.2", - "ethjs-util": "0.1.6", - "keccak": "^2.0.0", - "rlp": "^2.2.3", - "secp256k1": "^3.0.1" - } - }, - "ethereumjs-vm": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/ethereumjs-vm/-/ethereumjs-vm-2.6.0.tgz", - "integrity": "sha512-r/XIUik/ynGbxS3y+mvGnbOKnuLo40V5Mj1J25+HEO63aWYREIqvWeRO/hnROlMBE5WoniQmPmhiaN0ctiHaXw==", - "requires": { - "async": "^2.1.2", - "async-eventemitter": "^0.2.2", - "ethereumjs-account": "^2.0.3", - "ethereumjs-block": "~2.2.0", - "ethereumjs-common": "^1.1.0", - "ethereumjs-util": "^6.0.0", - "fake-merkle-patricia-tree": "^1.0.1", - "functional-red-black-tree": "^1.0.1", - "merkle-patricia-tree": "^2.3.2", - "rustbn.js": "~0.2.0", - "safe-buffer": "^5.1.1" - }, - "dependencies": { - "ethereumjs-block": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/ethereumjs-block/-/ethereumjs-block-2.2.2.tgz", - "integrity": "sha512-2p49ifhek3h2zeg/+da6XpdFR3GlqY3BIEiqxGF8j9aSRIgkb7M1Ky+yULBKJOu8PAZxfhsYA+HxUk2aCQp3vg==", - "requires": { - "async": "^2.0.1", - "ethereumjs-common": "^1.5.0", - "ethereumjs-tx": "^2.1.1", - "ethereumjs-util": "^5.0.0", - "merkle-patricia-tree": "^2.1.2" - }, - "dependencies": { - "ethereumjs-util": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-5.2.0.tgz", - "integrity": "sha512-CJAKdI0wgMbQFLlLRtZKGcy/L6pzVRgelIZqRqNbuVFM3K9VEnyfbcvz0ncWMRNCe4kaHWjwRYQcYMucmwsnWA==", - "requires": { - "bn.js": "^4.11.0", - "create-hash": "^1.1.2", - "ethjs-util": "^0.1.3", - "keccak": "^1.0.2", - "rlp": "^2.0.0", - "safe-buffer": "^5.1.1", - "secp256k1": "^3.0.1" - } - } - } - }, - "ethereumjs-tx": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ethereumjs-tx/-/ethereumjs-tx-2.1.2.tgz", - "integrity": "sha512-zZEK1onCeiORb0wyCXUvg94Ve5It/K6GD1K+26KfFKodiBiS6d9lfCXlUKGBBdQ+bv7Day+JK0tj1K+BeNFRAw==", - "requires": { - "ethereumjs-common": "^1.5.0", - "ethereumjs-util": "^6.0.0" - } - }, - "keccak": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/keccak/-/keccak-1.4.0.tgz", - "integrity": "sha512-eZVaCpblK5formjPjeTBik7TAg+pqnDrMHIffSvi9Lh7PQgM1+hSzakUeZFCk9DVVG0dacZJuaz2ntwlzZUIBw==", - "requires": { - "bindings": "^1.2.1", - "inherits": "^2.0.3", - "nan": "^2.2.1", - "safe-buffer": "^5.1.0" - } - } - } - }, - "ethereumjs-wallet": { - "version": "0.6.4", - "resolved": "https://registry.npmjs.org/ethereumjs-wallet/-/ethereumjs-wallet-0.6.4.tgz", - "integrity": "sha512-xAYLWVH/MA9Ds1+BiDTfdRrCBQIz7r70EJSjuBnvw/x40qJ1jBoBBAp8/l+I9VPGAsUXvHTfcnp2OZ9LbcTs/g==", - "requires": { - "aes-js": "^3.1.1", - "bs58check": "^2.1.2", - "ethereumjs-util": "^6.0.0", - "hdkey": "^1.1.1", - "randombytes": "^2.0.6", - "safe-buffer": "^5.1.2", - "scryptsy": "^1.2.1", - "utf8": "^3.0.0", - "uuid": "^3.3.2" - }, - "dependencies": { - "aes-js": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/aes-js/-/aes-js-3.1.2.tgz", - "integrity": "sha512-e5pEa2kBnBOgR4Y/p20pskXI74UEz7de8ZGVo58asOtvSVG5YAbJeELPZxOmt+Bnz3rX753YKhfIn4X4l1PPRQ==" - }, - "scryptsy": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/scryptsy/-/scryptsy-1.2.1.tgz", - "integrity": "sha1-oyJfpLJST4AnAHYeKFW987LZIWM=", - "requires": { - "pbkdf2": "^3.0.3" - } - } - } - }, - "ethers": { - "version": "4.0.0-beta.3", - "resolved": "https://registry.npmjs.org/ethers/-/ethers-4.0.0-beta.3.tgz", - "integrity": "sha512-YYPogooSknTwvHg3+Mv71gM/3Wcrx+ZpCzarBj3mqs9njjRkrOo2/eufzhHloOCo3JSoNI4TQJJ6yU5ABm3Uog==", - "requires": { - "@types/node": "^10.3.2", - "aes-js": "3.0.0", - "bn.js": "^4.4.0", - "elliptic": "6.3.3", - "hash.js": "1.1.3", - "js-sha3": "0.5.7", - "scrypt-js": "2.0.3", - "setimmediate": "1.0.4", - "uuid": "2.0.1", - "xmlhttprequest": "1.8.0" - }, - "dependencies": { - "elliptic": { - "version": "6.3.3", - "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.3.3.tgz", - "integrity": "sha1-VILZZG1UvLif19mU/J4ulWiHbj8=", - "requires": { - "bn.js": "^4.4.0", - "brorand": "^1.0.1", - "hash.js": "^1.0.0", - "inherits": "^2.0.1" - } - }, - "hash.js": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.3.tgz", - "integrity": "sha512-/UETyP0W22QILqS+6HowevwhEFJ3MBJnwTf75Qob9Wz9t0DPuisL8kW8YZMK62dHAKE1c1p+gY1TtOLY+USEHA==", - "requires": { - "inherits": "^2.0.3", - "minimalistic-assert": "^1.0.0" - } - }, - "setimmediate": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.4.tgz", - "integrity": "sha1-IOgd5iLUoCWIzgyNqJc8vPHTE48=" - }, - "uuid": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-2.0.1.tgz", - "integrity": "sha1-wqMN7bPlNdcsz4LjQ5QaULqFM6w=" - } - } - }, - "ethjs-unit": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/ethjs-unit/-/ethjs-unit-0.1.6.tgz", - "integrity": "sha1-xmWSHkduh7ziqdWIpv4EBbLEFpk=", - "requires": { - "bn.js": "4.11.6", - "number-to-bn": "1.7.0" - }, - "dependencies": { - "bn.js": { - "version": "4.11.6", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.6.tgz", - "integrity": "sha1-UzRK2xRhehP26N0s4okF0cC6MhU=" - } - } - }, - "ethjs-util": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/ethjs-util/-/ethjs-util-0.1.6.tgz", - "integrity": "sha512-CUnVOQq7gSpDHZVVrQW8ExxUETWrnrvXYvYz55wOU8Uj4VCgw56XC2B/fVqQN+f7gmrnRHSLVnFAwsCuNwji8w==", - "requires": { - "is-hex-prefixed": "1.0.0", - "strip-hex-prefix": "1.0.0" - } - }, - "eventemitter3": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-3.1.2.tgz", - "integrity": "sha512-tvtQIeLVHjDkJYnzf2dgVMxfuSGJeM/7UCG17TT4EumTfNtF+0nebF/4zWOIkCreAbtNqhGEboB6BWrwqNaw4Q==" - }, - "events": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/events/-/events-3.1.0.tgz", - "integrity": "sha512-Rv+u8MLHNOdMjTAFeT3nCjHn2aGlx435FP/sDHNaRhDEMwyI/aB22Kj2qIN8R0cw3z28psEQLYwxVKLsKrMgWg==" - }, - "evp_bytestokey": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz", - "integrity": "sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==", - "requires": { - "md5.js": "^1.3.4", - "safe-buffer": "^5.1.1" - } - }, - "express": { - "version": "4.17.1", - "resolved": "https://registry.npmjs.org/express/-/express-4.17.1.tgz", - "integrity": "sha512-mHJ9O79RqluphRrcw2X/GTh3k9tVv8YcoyY4Kkh4WDMUYKRZUq0h1o0w2rrrxBqM7VoeUVqgb27xlEMXTnYt4g==", - "requires": { - "accepts": "~1.3.7", - "array-flatten": "1.1.1", - "body-parser": "1.19.0", - "content-disposition": "0.5.3", - "content-type": "~1.0.4", - "cookie": "0.4.0", - "cookie-signature": "1.0.6", - "debug": "2.6.9", - "depd": "~1.1.2", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "etag": "~1.8.1", - "finalhandler": "~1.1.2", - "fresh": "0.5.2", - "merge-descriptors": "1.0.1", - "methods": "~1.1.2", - "on-finished": "~2.3.0", - "parseurl": "~1.3.3", - "path-to-regexp": "0.1.7", - "proxy-addr": "~2.0.5", - "qs": "6.7.0", - "range-parser": "~1.2.1", - "safe-buffer": "5.1.2", - "send": "0.17.1", - "serve-static": "1.14.1", - "setprototypeof": "1.1.1", - "statuses": "~1.5.0", - "type-is": "~1.6.18", - "utils-merge": "1.0.1", - "vary": "~1.1.2" - }, - "dependencies": { - "safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" - } - } - }, - "ext": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/ext/-/ext-1.4.0.tgz", - "integrity": "sha512-Key5NIsUxdqKg3vIsdw9dSuXpPCQ297y6wBjL30edxwPgt2E44WcWBZey/ZvUc6sERLTxKdyCu4gZFmUbk1Q7A==", - "requires": { - "type": "^2.0.0" - }, - "dependencies": { - "type": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/type/-/type-2.0.0.tgz", - "integrity": "sha512-KBt58xCHry4Cejnc2ISQAF7QY+ORngsWfxezO68+12hKV6lQY8P/psIkcbjeHWn7MqcgciWJyCCevFMJdIXpow==" - } - } - }, - "extend": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", - "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==" - }, - "extsprintf": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", - "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=" - }, - "fake-merkle-patricia-tree": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/fake-merkle-patricia-tree/-/fake-merkle-patricia-tree-1.0.1.tgz", - "integrity": "sha1-S4w6z7Ugr635hgsfFM2M40As3dM=", - "requires": { - "checkpoint-store": "^1.1.0" - } - }, - "fast-deep-equal": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", - "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==" - }, - "fast-json-stable-stringify": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", - "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==" - }, - "fast-safe-stringify": { - "version": "2.0.7", - "resolved": "https://registry.npmjs.org/fast-safe-stringify/-/fast-safe-stringify-2.0.7.tgz", - "integrity": "sha512-Utm6CdzT+6xsDk2m8S6uL8VHxNwI6Jub+e9NYTcAms28T84pTa25GJQV9j0CY0N1rM8hK4x6grpF2BQf+2qwVA==" - }, - "fd-slicer": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz", - "integrity": "sha1-JcfInLH5B3+IkbvmHY85Dq4lbx4=", - "requires": { - "pend": "~1.2.0" - } - }, - "fetch-ponyfill": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/fetch-ponyfill/-/fetch-ponyfill-4.1.0.tgz", - "integrity": "sha1-rjzl9zLGReq4fkroeTQUcJsjmJM=", - "requires": { - "node-fetch": "~1.7.1" - }, - "dependencies": { - "node-fetch": { - "version": "1.7.3", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-1.7.3.tgz", - "integrity": "sha512-NhZ4CsKx7cYm2vSrBAr2PvFOe6sWDf0UYLRqA6svUYg7+/TSfVAu49jYC4BvQ4Sms9SZgdqGBgroqfDhJdTyKQ==", - "requires": { - "encoding": "^0.1.11", - "is-stream": "^1.0.1" - } - } - } - }, - "file-type": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/file-type/-/file-type-5.2.0.tgz", - "integrity": "sha1-LdvqfHP/42No365J3DOMBYwritY=" - }, - "file-uri-to-path": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz", - "integrity": "sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==" - }, - "finalhandler": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz", - "integrity": "sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==", - "requires": { - "debug": "2.6.9", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "on-finished": "~2.3.0", - "parseurl": "~1.3.3", - "statuses": "~1.5.0", - "unpipe": "~1.0.0" - } - }, - "for-each": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz", - "integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==", - "requires": { - "is-callable": "^1.1.3" - } - }, - "forever-agent": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", - "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=" - }, - "form-data": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz", - "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==", - "requires": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.6", - "mime-types": "^2.1.12" - } - }, - "forwarded": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.1.2.tgz", - "integrity": "sha1-mMI9qxF1ZXuMBXPozszZGw/xjIQ=" - }, - "fresh": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", - "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=" - }, - "fs-constants": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz", - "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==" - }, - "fs-extra": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-4.0.3.tgz", - "integrity": "sha512-q6rbdDd1o2mAnQreO7YADIxf/Whx4AHBiRf6d+/cVT8h44ss+lHgxf1FemcqDnQt9X3ct4McHr+JMGlYSsK7Cg==", - "requires": { - "graceful-fs": "^4.1.2", - "jsonfile": "^4.0.0", - "universalify": "^0.1.0" - } - }, - "fs-minipass": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-1.2.7.tgz", - "integrity": "sha512-GWSSJGFy4e9GUeCcbIkED+bgAoFyj7XF1mV8rma3QW4NIqX9Kyx79N/PF61H5udOV3aY1IaMLs6pGbH71nlCTA==", - "requires": { - "minipass": "^2.6.0" - } - }, - "fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" - }, - "function-bind": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" - }, - "functional-red-black-tree": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", - "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=" - }, - "get-stream": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", - "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", - "requires": { - "pump": "^3.0.0" - } - }, - "getpass": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", - "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=", - "requires": { - "assert-plus": "^1.0.0" - } - }, - "glob": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz", - "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==", - "dev": true, - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - }, - "global": { - "version": "4.3.2", - "resolved": "https://registry.npmjs.org/global/-/global-4.3.2.tgz", - "integrity": "sha1-52mJJopsdMOJCLEwWxD8DjlOnQ8=", - "requires": { - "min-document": "^2.19.0", - "process": "~0.5.1" - } - }, - "globals": { - "version": "9.18.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-9.18.0.tgz", - "integrity": "sha512-S0nG3CLEQiY/ILxqtztTWH/3iRRdyBLw6KMDxnKMchrtbj2OFmehVh0WUCfW3DUrIgx/qFrJPICrq4Z4sTR9UQ==" - }, - "got": { - "version": "9.6.0", - "resolved": "https://registry.npmjs.org/got/-/got-9.6.0.tgz", - "integrity": "sha512-R7eWptXuGYxwijs0eV+v3o6+XH1IqVK8dJOEecQfTmkncw9AV4dcw/Dhxi8MdlqPthxxpZyizMzyg8RTmEsG+Q==", - "requires": { - "@sindresorhus/is": "^0.14.0", - "@szmarczak/http-timer": "^1.1.2", - "cacheable-request": "^6.0.0", - "decompress-response": "^3.3.0", - "duplexer3": "^0.1.4", - "get-stream": "^4.1.0", - "lowercase-keys": "^1.0.1", - "mimic-response": "^1.0.1", - "p-cancelable": "^1.0.0", - "to-readable-stream": "^1.0.0", - "url-parse-lax": "^3.0.0" - } - }, - "graceful-fs": { - "version": "4.2.4", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.4.tgz", - "integrity": "sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw==" - }, - "graceful-readlink": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/graceful-readlink/-/graceful-readlink-1.0.1.tgz", - "integrity": "sha1-TK+tdrxi8C+gObL5Tpo906ORpyU=" - }, - "growl": { - "version": "1.10.5", - "resolved": "https://registry.npmjs.org/growl/-/growl-1.10.5.tgz", - "integrity": "sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA==", - "dev": true - }, - "har-schema": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", - "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=" - }, - "har-validator": { - "version": "5.1.3", - "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.3.tgz", - "integrity": "sha512-sNvOCzEQNr/qrvJgc3UG/kD4QtlHycrzwS+6mfTrrSq97BvaYcPZZI1ZSqGSPR73Cxn4LKTD4PttRwfU7jWq5g==", - "requires": { - "ajv": "^6.5.5", - "har-schema": "^2.0.0" - } - }, - "has": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", - "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", - "requires": { - "function-bind": "^1.1.1" - } - }, - "has-ansi": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", - "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=", - "requires": { - "ansi-regex": "^2.0.0" - } - }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", - "dev": true - }, - "has-symbol-support-x": { - "version": "1.4.2", - "resolved": "https://registry.npmjs.org/has-symbol-support-x/-/has-symbol-support-x-1.4.2.tgz", - "integrity": "sha512-3ToOva++HaW+eCpgqZrCfN51IPB+7bJNVT6CUATzueB5Heb8o6Nam0V3HG5dlDvZU1Gn5QLcbahiKw/XVk5JJw==" - }, - "has-symbols": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.1.tgz", - "integrity": "sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg==" - }, - "has-to-string-tag-x": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/has-to-string-tag-x/-/has-to-string-tag-x-1.4.1.tgz", - "integrity": "sha512-vdbKfmw+3LoOYVr+mtxHaX5a96+0f3DljYd8JOqvOLsf5mw2Otda2qCDT9qRqLAhrjyQ0h7ual5nOiASpsGNFw==", - "requires": { - "has-symbol-support-x": "^1.4.1" - } - }, - "hash-base": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.1.0.tgz", - "integrity": "sha512-1nmYp/rhMDiE7AYkDw+lLwlAzz0AntGIe51F3RfFfEqyQ3feY2eI/NcwC6umIQVOASPMsWJLJScWKSSvzL9IVA==", - "requires": { - "inherits": "^2.0.4", - "readable-stream": "^3.6.0", - "safe-buffer": "^5.2.0" - }, - "dependencies": { - "readable-stream": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", - "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", - "requires": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - } - } - } - }, - "hash.js": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz", - "integrity": "sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==", - "requires": { - "inherits": "^2.0.3", - "minimalistic-assert": "^1.0.1" - } - }, - "hdkey": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/hdkey/-/hdkey-1.1.2.tgz", - "integrity": "sha512-PTQ4VKu0oRnCrYfLp04iQZ7T2Cxz0UsEXYauk2j8eh6PJXCpbXuCFhOmtIFtbET0i3PMWmHN9J11gU8LEgUljQ==", - "requires": { - "bs58check": "^2.1.2", - "safe-buffer": "^5.1.1", - "secp256k1": "^3.0.1" - } - }, - "he": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/he/-/he-1.1.1.tgz", - "integrity": "sha1-k0EP0hsAlzUVH4howvJx80J+I/0=", - "dev": true - }, - "hmac-drbg": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz", - "integrity": "sha1-0nRXAQJabHdabFRXk+1QL8DGSaE=", - "requires": { - "hash.js": "^1.0.3", - "minimalistic-assert": "^1.0.0", - "minimalistic-crypto-utils": "^1.0.1" - } - }, - "home-or-tmp": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/home-or-tmp/-/home-or-tmp-2.0.0.tgz", - "integrity": "sha1-42w/LSyufXRqhX440Y1fMqeILbg=", - "requires": { - "os-homedir": "^1.0.0", - "os-tmpdir": "^1.0.1" - } - }, - "http-cache-semantics": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.0.tgz", - "integrity": "sha512-carPklcUh7ROWRK7Cv27RPtdhYhUsela/ue5/jKzjegVvXDqM2ILE9Q2BGn9JZJh1g87cp56su/FgQSzcWS8cQ==" - }, - "http-errors": { - "version": "1.7.2", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.7.2.tgz", - "integrity": "sha512-uUQBt3H/cSIVfch6i1EuPNy/YsRSOUBXTVfZ+yR7Zjez3qjBz6i9+i4zjNaoqcoFVI4lQJ5plg63TvGfRSDCRg==", - "requires": { - "depd": "~1.1.2", - "inherits": "2.0.3", - "setprototypeof": "1.1.1", - "statuses": ">= 1.5.0 < 2", - "toidentifier": "1.0.0" - }, - "dependencies": { - "inherits": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" - } - } - }, - "http-https": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/http-https/-/http-https-1.0.0.tgz", - "integrity": "sha1-L5CN1fHbQGjAWM1ubUzjkskTOJs=" - }, - "http-signature": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", - "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=", - "requires": { - "assert-plus": "^1.0.0", - "jsprim": "^1.2.2", - "sshpk": "^1.7.0" - } - }, - "iconv-lite": { - "version": "0.4.24", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", - "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", - "requires": { - "safer-buffer": ">= 2.1.2 < 3" - } - }, - "idna-uts46-hx": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/idna-uts46-hx/-/idna-uts46-hx-2.3.1.tgz", - "integrity": "sha512-PWoF9Keq6laYdIRwwCdhTPl60xRqAloYNMQLiyUnG42VjT53oW07BXIRM+NK7eQjzXjAk2gUvX9caRxlnF9TAA==", - "requires": { - "punycode": "2.1.0" - }, - "dependencies": { - "punycode": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.0.tgz", - "integrity": "sha1-X4Y+3Im5bbCQdLrXlHvwkFbKTn0=" - } - } - }, - "ieee754": { - "version": "1.1.13", - "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.1.13.tgz", - "integrity": "sha512-4vf7I2LYV/HaWerSo3XmlMkp5eZ83i+/CDluXi/IGTs/O1sejBNhTtnxzmRZfvOUqj7lZjqHkeTvpgSFDlWZTg==" - }, - "immediate": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/immediate/-/immediate-3.3.0.tgz", - "integrity": "sha512-HR7EVodfFUdQCTIeySw+WDRFJlPcLOJbXfwwZ7Oom6tjsvZ3bOkCDJHehQC3nxJrv7+f9XecwazynjU8e4Vw3Q==" - }, - "inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", - "requires": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" - }, - "invariant": { - "version": "2.2.4", - "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz", - "integrity": "sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==", - "requires": { - "loose-envify": "^1.0.0" - } - }, - "ipaddr.js": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", - "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==" - }, - "is-arguments": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.0.4.tgz", - "integrity": "sha512-xPh0Rmt8NE65sNzvyUmWgI1tz3mKq74lGA0mL8LYZcoIzKOzDh6HmrYm3d18k60nHerC8A9Km8kYu87zfSFnLA==" - }, - "is-callable": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.0.tgz", - "integrity": "sha512-pyVD9AaGLxtg6srb2Ng6ynWJqkHU9bEM087AKck0w8QwDarTfNcpIYoU8x8Hv2Icm8u6kFJM18Dag8lyqGkviw==" - }, - "is-date-object": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.2.tgz", - "integrity": "sha512-USlDT524woQ08aoZFzh3/Z6ch9Y/EWXEHQ/AaRN0SkKq4t2Jw2R2339tSXmwuVoY7LLlBCbOIlx2myP/L5zk0g==" - }, - "is-finite": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-finite/-/is-finite-1.1.0.tgz", - "integrity": "sha512-cdyMtqX/BOqqNBBiKlIVkytNHm49MtMlYyn1zxzvJKWmFMlGzm+ry5BBfYyeY9YmNKbRSo/o7OX9w9ale0wg3w==" - }, - "is-fn": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-fn/-/is-fn-1.0.0.tgz", - "integrity": "sha1-lUPV3nvPWwiiLsiiC65uKG1RDYw=" - }, - "is-function": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-function/-/is-function-1.0.2.tgz", - "integrity": "sha512-lw7DUp0aWXYg+CBCN+JKkcE0Q2RayZnSvnZBlwgxHBQhqt5pZNVy4Ri7H9GmmXkdu7LUthszM+Tor1u/2iBcpQ==" - }, - "is-hex-prefixed": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-hex-prefixed/-/is-hex-prefixed-1.0.0.tgz", - "integrity": "sha1-fY035q135dEnFIkTxXPggtd39VQ=" - }, - "is-natural-number": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/is-natural-number/-/is-natural-number-4.0.1.tgz", - "integrity": "sha1-q5124dtM7VHjXeDHLr7PCfc0zeg=" - }, - "is-object": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-object/-/is-object-1.0.1.tgz", - "integrity": "sha1-iVJojF7C/9awPsyF52ngKQMINHA=" - }, - "is-plain-obj": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz", - "integrity": "sha1-caUMhCnfync8kqOQpKA7OfzVHT4=" - }, - "is-regex": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.0.5.tgz", - "integrity": "sha512-vlKW17SNq44owv5AQR3Cq0bQPEb8+kF3UKZ2fiZNOWtztYE5i0CzCZxFDwO58qAOWtxdBRVO/V5Qin1wjCqFYQ==", - "requires": { - "has": "^1.0.3" - } - }, - "is-retry-allowed": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/is-retry-allowed/-/is-retry-allowed-1.2.0.tgz", - "integrity": "sha512-RUbUeKwvm3XG2VYamhJL1xFktgjvPzL0Hq8C+6yrWIswDy3BIXGqCxhxkc30N9jqK311gVU137K8Ei55/zVJRg==" - }, - "is-stream": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", - "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=" - }, - "is-symbol": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.3.tgz", - "integrity": "sha512-OwijhaRSgqvhm/0ZdAcXNZt9lYdKFpcRDT5ULUuYXPoT794UNOdU+gpT6Rzo7b4V2HUl/op6GqY894AZwv9faQ==", - "requires": { - "has-symbols": "^1.0.1" - } - }, - "is-typedarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", - "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=" - }, - "isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" - }, - "isstream": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", - "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=" - }, - "isurl": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isurl/-/isurl-1.0.0.tgz", - "integrity": "sha512-1P/yWsxPlDtn7QeRD+ULKQPaIaN6yF368GZ2vDfv0AL0NwpStafjWCDDdn0k8wgFMWpVAqG7oJhxHnlud42i9w==", - "requires": { - "has-to-string-tag-x": "^1.2.0", - "is-object": "^1.0.1" - } - }, - "js-sha3": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/js-sha3/-/js-sha3-0.5.7.tgz", - "integrity": "sha1-DU/9gALVMzqrr0oj7tL2N0yfKOc=" - }, - "js-tokens": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-3.0.2.tgz", - "integrity": "sha1-mGbfOVECEw449/mWvOtlRDIJwls=" - }, - "jsbn": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", - "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=" - }, - "jsesc": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", - "integrity": "sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0=" - }, - "json-buffer": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.0.tgz", - "integrity": "sha1-Wx85evx11ne96Lz8Dkfh+aPZqJg=" - }, - "json-rpc-engine": { - "version": "5.1.8", - "resolved": "https://registry.npmjs.org/json-rpc-engine/-/json-rpc-engine-5.1.8.tgz", - "integrity": "sha512-vTBSDEPJV1fPAsbm2g5sEuPjsgLdiab2f1CTn2PyRr8nxggUpA996PDlNQDsM0gnrA99F8KIBLq2nIKrOFl1Mg==", - "requires": { - "async": "^2.0.1", - "eth-json-rpc-errors": "^2.0.1", - "promise-to-callback": "^1.0.0", - "safe-event-emitter": "^1.0.1" - }, - "dependencies": { - "eth-json-rpc-errors": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/eth-json-rpc-errors/-/eth-json-rpc-errors-2.0.2.tgz", - "integrity": "sha512-uBCRM2w2ewusRHGxN8JhcuOb2RN3ueAOYH/0BhqdFmQkZx5lj5+fLKTz0mIVOzd4FG5/kUksCzCD7eTEim6gaA==", - "requires": { - "fast-safe-stringify": "^2.0.6" - } - } - } - }, - "json-rpc-error": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/json-rpc-error/-/json-rpc-error-2.0.0.tgz", - "integrity": "sha1-p6+cICg4tekFxyUOVH8a/3cligI=", - "requires": { - "inherits": "^2.0.1" - } - }, - "json-rpc-random-id": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json-rpc-random-id/-/json-rpc-random-id-1.0.1.tgz", - "integrity": "sha1-uknZat7RRE27jaPSA3SKy7zeyMg=" - }, - "json-schema": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz", - "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=" - }, - "json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==" - }, - "json-stable-stringify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json-stable-stringify/-/json-stable-stringify-1.0.1.tgz", - "integrity": "sha1-mnWdOcXy/1A/1TAGRu1EX4jE+a8=", - "requires": { - "jsonify": "~0.0.0" - } - }, - "json-stringify-safe": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", - "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=" - }, - "json5": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/json5/-/json5-0.5.1.tgz", - "integrity": "sha1-Hq3nrMASA0rYTiOWdn6tn6VJWCE=" - }, - "jsonfile": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", - "integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=", - "requires": { - "graceful-fs": "^4.1.6" - } - }, - "jsonify": { - "version": "0.0.0", - "resolved": "https://registry.npmjs.org/jsonify/-/jsonify-0.0.0.tgz", - "integrity": "sha1-LHS27kHZPKUbe1qu6PUDYx0lKnM=" - }, - "jsprim": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz", - "integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=", - "requires": { - "assert-plus": "1.0.0", - "extsprintf": "1.3.0", - "json-schema": "0.2.3", - "verror": "1.10.0" - } - }, - "keccak": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/keccak/-/keccak-2.1.0.tgz", - "integrity": "sha512-m1wbJRTo+gWbctZWay9i26v5fFnYkOn7D5PCxJ3fZUGUEb49dE1Pm4BREUYCt/aoO6di7jeoGmhvqN9Nzylm3Q==", - "requires": { - "bindings": "^1.5.0", - "inherits": "^2.0.4", - "nan": "^2.14.0", - "safe-buffer": "^5.2.0" - } - }, - "keyv": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/keyv/-/keyv-3.1.0.tgz", - "integrity": "sha512-9ykJ/46SN/9KPM/sichzQ7OvXyGDYKGTaDlKMGCAlg2UK8KRy4jb0d8sFc+0Tt0YYnThq8X2RZgCg74RPxgcVA==", - "requires": { - "json-buffer": "3.0.0" - } - }, - "level-codec": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/level-codec/-/level-codec-7.0.1.tgz", - "integrity": "sha512-Ua/R9B9r3RasXdRmOtd+t9TCOEIIlts+TN/7XTT2unhDaL6sJn83S3rUyljbr6lVtw49N3/yA0HHjpV6Kzb2aQ==" - }, - "level-errors": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/level-errors/-/level-errors-1.0.5.tgz", - "integrity": "sha512-/cLUpQduF6bNrWuAC4pwtUKA5t669pCsCi2XbmojG2tFeOr9j6ShtdDCtFFQO1DRt+EVZhx9gPzP9G2bUaG4ig==", - "requires": { - "errno": "~0.1.1" - } - }, - "level-iterator-stream": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/level-iterator-stream/-/level-iterator-stream-1.3.1.tgz", - "integrity": "sha1-5Dt4sagUPm+pek9IXrjqUwNS8u0=", - "requires": { - "inherits": "^2.0.1", - "level-errors": "^1.0.3", - "readable-stream": "^1.0.33", - "xtend": "^4.0.0" - }, - "dependencies": { - "isarray": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", - "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=" - }, - "readable-stream": { - "version": "1.1.14", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz", - "integrity": "sha1-fPTFTvZI44EwhMY23SB54WbAgdk=", - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.1", - "isarray": "0.0.1", - "string_decoder": "~0.10.x" - } - }, - "string_decoder": { - "version": "0.10.31", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", - "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=" - } - } - }, - "level-ws": { - "version": "0.0.0", - "resolved": "https://registry.npmjs.org/level-ws/-/level-ws-0.0.0.tgz", - "integrity": "sha1-Ny5RIXeSSgBCSwtDrvK7QkltIos=", - "requires": { - "readable-stream": "~1.0.15", - "xtend": "~2.1.1" - }, - "dependencies": { - "isarray": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", - "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=" - }, - "readable-stream": { - "version": "1.0.34", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz", - "integrity": "sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=", - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.1", - "isarray": "0.0.1", - "string_decoder": "~0.10.x" - } - }, - "string_decoder": { - "version": "0.10.31", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", - "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=" - }, - "xtend": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/xtend/-/xtend-2.1.2.tgz", - "integrity": "sha1-bv7MKk2tjmlixJAbM3znuoe10os=", - "requires": { - "object-keys": "~0.4.0" - } - } - } - }, - "levelup": { - "version": "1.3.9", - "resolved": "https://registry.npmjs.org/levelup/-/levelup-1.3.9.tgz", - "integrity": "sha512-VVGHfKIlmw8w1XqpGOAGwq6sZm2WwWLmlDcULkKWQXEA5EopA8OBNJ2Ck2v6bdk8HeEZSbCSEgzXadyQFm76sQ==", - "requires": { - "deferred-leveldown": "~1.2.1", - "level-codec": "~7.0.0", - "level-errors": "~1.0.3", - "level-iterator-stream": "~1.3.0", - "prr": "~1.0.1", - "semver": "~5.4.1", - "xtend": "~4.0.0" - }, - "dependencies": { - "semver": { - "version": "5.4.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.4.1.tgz", - "integrity": "sha512-WfG/X9+oATh81XtllIo/I8gOiY9EXRdv1cQdyykeXK17YcUW3EXUAi2To4pcH6nZtJPr7ZOpM5OMyWJZm+8Rsg==" - } - } - }, - "lodash": { - "version": "4.17.15", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.15.tgz", - "integrity": "sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A==" - }, - "lodash.flatmap": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/lodash.flatmap/-/lodash.flatmap-4.5.0.tgz", - "integrity": "sha1-74y/QI9uSCaGYzRTBcaswLd4cC4=" - }, - "loose-envify": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", - "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", - "requires": { - "js-tokens": "^3.0.0 || ^4.0.0" - } - }, - "lowercase-keys": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.1.tgz", - "integrity": "sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA==" - }, - "ltgt": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/ltgt/-/ltgt-2.2.1.tgz", - "integrity": "sha1-81ypHEk/e3PaDgdJUwTxezH4fuU=" - }, - "make-dir": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-1.3.0.tgz", - "integrity": "sha512-2w31R7SJtieJJnQtGc7RVL2StM2vGYVfqUOvUDxH6bC6aJTxPxTF0GnIgCyu7tjockiUWAYQRbxa7vKn34s5sQ==", - "requires": { - "pify": "^3.0.0" - }, - "dependencies": { - "pify": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", - "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=" - } - } - }, - "md5.js": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.5.tgz", - "integrity": "sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==", - "requires": { - "hash-base": "^3.0.0", - "inherits": "^2.0.1", - "safe-buffer": "^5.1.2" - } - }, - "media-typer": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", - "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=" - }, - "memdown": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/memdown/-/memdown-1.4.1.tgz", - "integrity": "sha1-tOThkhdGZP+65BNhqlAPMRnv4hU=", - "requires": { - "abstract-leveldown": "~2.7.1", - "functional-red-black-tree": "^1.0.1", - "immediate": "^3.2.3", - "inherits": "~2.0.1", - "ltgt": "~2.2.0", - "safe-buffer": "~5.1.1" - }, - "dependencies": { - "abstract-leveldown": { - "version": "2.7.2", - "resolved": "https://registry.npmjs.org/abstract-leveldown/-/abstract-leveldown-2.7.2.tgz", - "integrity": "sha512-+OVvxH2rHVEhWLdbudP6p0+dNMXu8JA1CbhP19T8paTYAcX7oJ4OVjT+ZUVpv7mITxXHqDMej+GdqXBmXkw09w==", - "requires": { - "xtend": "~4.0.0" - } - }, - "safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" - } - } - }, - "merge-descriptors": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", - "integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E=" - }, - "merkle-patricia-tree": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/merkle-patricia-tree/-/merkle-patricia-tree-2.3.2.tgz", - "integrity": "sha512-81PW5m8oz/pz3GvsAwbauj7Y00rqm81Tzad77tHBwU7pIAtN+TJnMSOJhxBKflSVYhptMMb9RskhqHqrSm1V+g==", - "requires": { - "async": "^1.4.2", - "ethereumjs-util": "^5.0.0", - "level-ws": "0.0.0", - "levelup": "^1.2.1", - "memdown": "^1.0.0", - "readable-stream": "^2.0.0", - "rlp": "^2.0.0", - "semaphore": ">=1.0.1" - }, - "dependencies": { - "async": { - "version": "1.5.2", - "resolved": "https://registry.npmjs.org/async/-/async-1.5.2.tgz", - "integrity": "sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo=" - }, - "ethereumjs-util": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-5.2.0.tgz", - "integrity": "sha512-CJAKdI0wgMbQFLlLRtZKGcy/L6pzVRgelIZqRqNbuVFM3K9VEnyfbcvz0ncWMRNCe4kaHWjwRYQcYMucmwsnWA==", - "requires": { - "bn.js": "^4.11.0", - "create-hash": "^1.1.2", - "ethjs-util": "^0.1.3", - "keccak": "^1.0.2", - "rlp": "^2.0.0", - "safe-buffer": "^5.1.1", - "secp256k1": "^3.0.1" - } - }, - "keccak": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/keccak/-/keccak-1.4.0.tgz", - "integrity": "sha512-eZVaCpblK5formjPjeTBik7TAg+pqnDrMHIffSvi9Lh7PQgM1+hSzakUeZFCk9DVVG0dacZJuaz2ntwlzZUIBw==", - "requires": { - "bindings": "^1.2.1", - "inherits": "^2.0.3", - "nan": "^2.2.1", - "safe-buffer": "^5.1.0" - } - } - } - }, - "methods": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", - "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=" - }, - "miller-rabin": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/miller-rabin/-/miller-rabin-4.0.1.tgz", - "integrity": "sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA==", - "requires": { - "bn.js": "^4.0.0", - "brorand": "^1.0.1" - } - }, - "mime": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", - "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==" - }, - "mime-db": { - "version": "1.44.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.44.0.tgz", - "integrity": "sha512-/NOTfLrsPBVeH7YtFPgsVWveuL+4SjjYxaQ1xtM1KMFj7HdxlBlxeyNLzhyJVx7r4rZGJAZ/6lkKCitSc/Nmpg==" - }, - "mime-types": { - "version": "2.1.27", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.27.tgz", - "integrity": "sha512-JIhqnCasI9yD+SsmkquHBxTSEuZdQX5BuQnS2Vc7puQQQ+8yiP5AY5uWhpdv4YL4VM5c6iliiYWPgJ/nJQLp7w==", - "requires": { - "mime-db": "1.44.0" - } - }, - "mimic-response": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz", - "integrity": "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==" - }, - "min-document": { - "version": "2.19.0", - "resolved": "https://registry.npmjs.org/min-document/-/min-document-2.19.0.tgz", - "integrity": "sha1-e9KC4/WELtKVu3SM3Z8f+iyCRoU=", - "requires": { - "dom-walk": "^0.1.0" - } - }, - "minimalistic-assert": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", - "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==" - }, - "minimalistic-crypto-utils": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz", - "integrity": "sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo=" - }, - "minimatch": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", - "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", - "requires": { - "brace-expansion": "^1.1.7" - } - }, - "minimist": { - "version": "0.0.8", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", - "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=" - }, - "minipass": { - "version": "2.9.0", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-2.9.0.tgz", - "integrity": "sha512-wxfUjg9WebH+CUDX/CdbRlh5SmfZiy/hpkxaRI16Y9W56Pa75sWgd/rvFilSgrauD9NyFymP/+JFV3KwzIsJeg==", - "requires": { - "safe-buffer": "^5.1.2", - "yallist": "^3.0.0" - } - }, - "minizlib": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-1.3.3.tgz", - "integrity": "sha512-6ZYMOEnmVsdCeTJVE0W9ZD+pVnE8h9Hma/iOwwRDsdQoePpoX56/8B6z3P9VNwppJuBKNRuFDRNRqRWexT9G9Q==", - "requires": { - "minipass": "^2.9.0" - } - }, - "mkdirp": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", - "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", - "requires": { - "minimist": "0.0.8" - } - }, - "mkdirp-promise": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/mkdirp-promise/-/mkdirp-promise-5.0.1.tgz", - "integrity": "sha1-6bj2jlUsaKnBcTuEiD96HdA5uKE=", - "requires": { - "mkdirp": "*" - } - }, - "mocha": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/mocha/-/mocha-5.2.0.tgz", - "integrity": "sha512-2IUgKDhc3J7Uug+FxMXuqIyYzH7gJjXECKe/w43IGgQHTSj3InJi+yAA7T24L9bQMRKiUEHxEX37G5JpVUGLcQ==", - "dev": true, - "requires": { - "browser-stdout": "1.3.1", - "commander": "2.15.1", - "debug": "3.1.0", - "diff": "3.5.0", - "escape-string-regexp": "1.0.5", - "glob": "7.1.2", - "growl": "1.10.5", - "he": "1.1.1", - "minimatch": "3.0.4", - "mkdirp": "0.5.1", - "supports-color": "5.4.0" - }, - "dependencies": { - "commander": { - "version": "2.15.1", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.15.1.tgz", - "integrity": "sha512-VlfT9F3V0v+jr4yxPc5gg9s62/fIVWsd2Bk2iD435um1NlGMYdVCq+MjcXnhYq2icNOizHr1kK+5TI6H0Hy0ag==", - "dev": true - }, - "debug": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", - "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - } - } - }, - "mock-fs": { - "version": "4.12.0", - "resolved": "https://registry.npmjs.org/mock-fs/-/mock-fs-4.12.0.tgz", - "integrity": "sha512-/P/HtrlvBxY4o/PzXY9cCNBrdylDNxg7gnrv2sMNxj+UJ2m8jSpl0/A6fuJeNAWr99ZvGWH8XCbE0vmnM5KupQ==" - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" - }, - "nan": { - "version": "2.14.1", - "resolved": "https://registry.npmjs.org/nan/-/nan-2.14.1.tgz", - "integrity": "sha512-isWHgVjnFjh2x2yuJ/tj3JbwoHu3UC2dX5G/88Cm24yB6YopVgxvBObDY7n5xW6ExmFhJpSEQqFPvq9zaXc8Jw==" - }, - "nano-json-stream-parser": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/nano-json-stream-parser/-/nano-json-stream-parser-0.1.2.tgz", - "integrity": "sha1-DMj20OK2IrR5xA1JnEbWS3Vcb18=" - }, - "negotiator": { - "version": "0.6.2", - "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.2.tgz", - "integrity": "sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw==" - }, - "next-tick": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/next-tick/-/next-tick-1.0.0.tgz", - "integrity": "sha1-yobR/ogoFpsBICCOPchCS524NCw=" - }, - "node-fetch": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.1.2.tgz", - "integrity": "sha1-q4hOjn5X44qUR1POxwb3iNF2i7U=" - }, - "normalize-url": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-4.5.0.tgz", - "integrity": "sha512-2s47yzUxdexf1OhyRi4Em83iQk0aPvwTddtFz4hnSSw9dCEsLEGf6SwIO8ss/19S9iBb5sJaOuTvTGDeZI00BQ==" - }, - "number-to-bn": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/number-to-bn/-/number-to-bn-1.7.0.tgz", - "integrity": "sha1-uzYjWS9+X54AMLGXe9QaDFP+HqA=", - "requires": { - "bn.js": "4.11.6", - "strip-hex-prefix": "1.0.0" - }, - "dependencies": { - "bn.js": { - "version": "4.11.6", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.6.tgz", - "integrity": "sha1-UzRK2xRhehP26N0s4okF0cC6MhU=" - } - } - }, - "oauth-sign": { - "version": "0.9.0", - "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz", - "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==" - }, - "object-assign": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=" - }, - "object-inspect": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.7.0.tgz", - "integrity": "sha512-a7pEHdh1xKIAgTySUGgLMx/xwDZskN1Ud6egYYN3EdRW4ZMPNEDUTF+hwy2LUC+Bl+SyLXANnwz/jyh/qutKUw==" - }, - "object-is": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/object-is/-/object-is-1.1.2.tgz", - "integrity": "sha512-5lHCz+0uufF6wZ7CRFWJN3hp8Jqblpgve06U5CMQ3f//6iDjPr2PEo9MWCjEssDsa+UZEL4PkFpr+BMop6aKzQ==", - "requires": { - "define-properties": "^1.1.3", - "es-abstract": "^1.17.5" - } - }, - "object-keys": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-0.4.0.tgz", - "integrity": "sha1-KKaq50KN0sOpLz2V8hM13SBOAzY=" - }, - "object.assign": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.0.tgz", - "integrity": "sha512-exHJeq6kBKj58mqGyTQ9DFvrZC/eR6OwxzoM9YRoGBqrXYonaFyGiFMuc9VZrXf7DarreEwMpurG3dd+CNyW5w==", - "requires": { - "define-properties": "^1.1.2", - "function-bind": "^1.1.1", - "has-symbols": "^1.0.0", - "object-keys": "^1.0.11" - }, - "dependencies": { - "object-keys": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", - "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==" - } - } - }, - "oboe": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/oboe/-/oboe-2.1.4.tgz", - "integrity": "sha1-IMiM2wwVNxuwQRklfU/dNLCqSfY=", - "requires": { - "http-https": "^1.0.0" - } - }, - "on-finished": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", - "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=", - "requires": { - "ee-first": "1.1.1" - } - }, - "once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", - "requires": { - "wrappy": "1" - } - }, - "original-require": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/original-require/-/original-require-1.0.1.tgz", - "integrity": "sha1-DxMEcVhM0zURxew4yNWSE/msXiA=", - "dev": true - }, - "os-homedir": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz", - "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=" - }, - "os-tmpdir": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", - "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=" - }, - "p-cancelable": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-1.1.0.tgz", - "integrity": "sha512-s73XxOZ4zpt1edZYZzvhqFa6uvQc1vwUa0K0BdtIZgQMAJj9IbebH+JkgKZc9h+B05PKHLOTl4ajG1BmNrVZlw==" - }, - "p-finally": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", - "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=" - }, - "p-timeout": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/p-timeout/-/p-timeout-1.2.1.tgz", - "integrity": "sha1-XrOzU7f86Z8QGhA4iAuwVOu+o4Y=", - "requires": { - "p-finally": "^1.0.0" - } - }, - "parse-asn1": { - "version": "5.1.5", - "resolved": "https://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.5.tgz", - "integrity": "sha512-jkMYn1dcJqF6d5CpU689bq7w/b5ALS9ROVSpQDPrZsqqesUJii9qutvoT5ltGedNXMO2e16YUWIghG9KxaViTQ==", - "requires": { - "asn1.js": "^4.0.0", - "browserify-aes": "^1.0.0", - "create-hash": "^1.1.0", - "evp_bytestokey": "^1.0.0", - "pbkdf2": "^3.0.3", - "safe-buffer": "^5.1.1" - } - }, - "parse-headers": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/parse-headers/-/parse-headers-2.0.3.tgz", - "integrity": "sha512-QhhZ+DCCit2Coi2vmAKbq5RGTRcQUOE2+REgv8vdyu7MnYx2eZztegqtTx99TZ86GTIwqiy3+4nQTWZ2tgmdCA==" - }, - "parseurl": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", - "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==" - }, - "path-is-absolute": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=" - }, - "path-parse": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz", - "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==" - }, - "path-to-regexp": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", - "integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w=" - }, - "pbkdf2": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.1.1.tgz", - "integrity": "sha512-4Ejy1OPxi9f2tt1rRV7Go7zmfDQ+ZectEQz3VGUQhgq62HtIRPDyG/JtnwIxs6x3uNMwo2V7q1fMvKjb+Tnpqg==", - "requires": { - "create-hash": "^1.1.2", - "create-hmac": "^1.1.4", - "ripemd160": "^2.0.1", - "safe-buffer": "^5.0.1", - "sha.js": "^2.4.8" - } - }, - "pend": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz", - "integrity": "sha1-elfrVQpng/kRUzH89GY9XI4AelA=" - }, - "performance-now": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", - "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=" - }, - "pify": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=" - }, - "pinkie": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz", - "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA=" - }, - "pinkie-promise": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz", - "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=", - "requires": { - "pinkie": "^2.0.0" - } - }, - "precond": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/precond/-/precond-0.2.3.tgz", - "integrity": "sha1-qpWRvKokkj8eD0hJ0kD0fvwQdaw=" - }, - "prepend-http": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-2.0.0.tgz", - "integrity": "sha1-6SQ0v6XqjBn0HN/UAddBo8gZ2Jc=" - }, - "private": { - "version": "0.1.8", - "resolved": "https://registry.npmjs.org/private/-/private-0.1.8.tgz", - "integrity": "sha512-VvivMrbvd2nKkiG38qjULzlc+4Vx4wm/whI9pQD35YrARNnhxeiRktSOhSukRLFNlzg6Br/cJPet5J/u19r/mg==" - }, - "process": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/process/-/process-0.5.2.tgz", - "integrity": "sha1-FjjYqONML0QKkduVq5rrZ3/Bhc8=" - }, - "process-nextick-args": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", - "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==" - }, - "promise-to-callback": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/promise-to-callback/-/promise-to-callback-1.0.0.tgz", - "integrity": "sha1-XSp0kBC/tn2WNZj805YHRqaP7vc=", - "requires": { - "is-fn": "^1.0.0", - "set-immediate-shim": "^1.0.1" - } - }, - "proxy-addr": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.6.tgz", - "integrity": "sha512-dh/frvCBVmSsDYzw6n926jv974gddhkFPfiN8hPOi30Wax25QZyZEGveluCgliBnqmuM+UJmBErbAUFIoDbjOw==", - "requires": { - "forwarded": "~0.1.2", - "ipaddr.js": "1.9.1" - } - }, - "prr": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/prr/-/prr-1.0.1.tgz", - "integrity": "sha1-0/wRS6BplaRexok/SEzrHXj19HY=" - }, - "psl": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/psl/-/psl-1.8.0.tgz", - "integrity": "sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ==" - }, - "public-encrypt": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/public-encrypt/-/public-encrypt-4.0.3.tgz", - "integrity": "sha512-zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q==", - "requires": { - "bn.js": "^4.1.0", - "browserify-rsa": "^4.0.0", - "create-hash": "^1.1.0", - "parse-asn1": "^5.0.0", - "randombytes": "^2.0.1", - "safe-buffer": "^5.1.2" - } - }, - "pump": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", - "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", - "requires": { - "end-of-stream": "^1.1.0", - "once": "^1.3.1" - } - }, - "punycode": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", - "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==" - }, - "qs": { - "version": "6.7.0", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.7.0.tgz", - "integrity": "sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ==" - }, - "query-string": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/query-string/-/query-string-5.1.1.tgz", - "integrity": "sha512-gjWOsm2SoGlgLEdAGt7a6slVOk9mGiXmPFMqrEhLQ68rhQuBnpfs3+EmlvqKyxnCo9/PPlF+9MtY02S1aFg+Jw==", - "requires": { - "decode-uri-component": "^0.2.0", - "object-assign": "^4.1.0", - "strict-uri-encode": "^1.0.0" - } - }, - "randombytes": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", - "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", - "requires": { - "safe-buffer": "^5.1.0" - } - }, - "randomfill": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/randomfill/-/randomfill-1.0.4.tgz", - "integrity": "sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw==", - "requires": { - "randombytes": "^2.0.5", - "safe-buffer": "^5.1.0" - } - }, - "randomhex": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/randomhex/-/randomhex-0.1.5.tgz", - "integrity": "sha1-us7vmCMpCRQA8qKRLGzQLxCU9YU=" - }, - "range-parser": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", - "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==" - }, - "raw-body": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.4.0.tgz", - "integrity": "sha512-4Oz8DUIwdvoa5qMJelxipzi/iJIi40O5cGV1wNYp5hvZP8ZN0T+jiNkL0QepXs+EsQ9XJ8ipEDoiH70ySUJP3Q==", - "requires": { - "bytes": "3.1.0", - "http-errors": "1.7.2", - "iconv-lite": "0.4.24", - "unpipe": "1.0.0" - } - }, - "readable-stream": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - }, - "dependencies": { - "safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" - } - } - }, - "regenerate": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.1.tgz", - "integrity": "sha512-j2+C8+NtXQgEKWk49MMP5P/u2GhnahTtVkRIHr5R5lVRlbKvmQ+oS+A5aLKWp2ma5VkT8sh6v+v4hbH0YHR66A==" - }, - "regenerator-runtime": { - "version": "0.13.5", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.5.tgz", - "integrity": "sha512-ZS5w8CpKFinUzOwW3c83oPeVXoNsrLsaCoLtJvAClH135j/R77RuymhiSErhm2lKcwSCIpmvIWSbDkIfAqKQlA==" - }, - "regenerator-transform": { - "version": "0.10.1", - "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.10.1.tgz", - "integrity": "sha512-PJepbvDbuK1xgIgnau7Y90cwaAmO/LCLMI2mPvaXq2heGMR3aWW5/BQvYrhJ8jgmQjXewXvBjzfqKcVOmhjZ6Q==", - "requires": { - "babel-runtime": "^6.18.0", - "babel-types": "^6.19.0", - "private": "^0.1.6" - } - }, - "regexp.prototype.flags": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.3.0.tgz", - "integrity": "sha512-2+Q0C5g951OlYlJz6yu5/M33IcsESLlLfsyIaLJaG4FA2r4yP8MvVMJUUP/fVBkSpbbbZlS5gynbEWLipiiXiQ==", - "requires": { - "define-properties": "^1.1.3", - "es-abstract": "^1.17.0-next.1" - } - }, - "regexpu-core": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-2.0.0.tgz", - "integrity": "sha1-SdA4g3uNz4v6W5pCE5k45uoq4kA=", - "requires": { - "regenerate": "^1.2.1", - "regjsgen": "^0.2.0", - "regjsparser": "^0.1.4" - } - }, - "regjsgen": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.2.0.tgz", - "integrity": "sha1-bAFq3qxVT3WCP+N6wFuS1aTtsfc=" - }, - "regjsparser": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.1.5.tgz", - "integrity": "sha1-fuj4Tcb6eS0/0K4ijSS9lJ6tIFw=", - "requires": { - "jsesc": "~0.5.0" - } - }, - "repeating": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/repeating/-/repeating-2.0.1.tgz", - "integrity": "sha1-UhTFOpJtNVJwdSf7q0FdvAjQbdo=", - "requires": { - "is-finite": "^1.0.0" - } - }, - "request": { - "version": "2.88.2", - "resolved": "https://registry.npmjs.org/request/-/request-2.88.2.tgz", - "integrity": "sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw==", - "requires": { - "aws-sign2": "~0.7.0", - "aws4": "^1.8.0", - "caseless": "~0.12.0", - "combined-stream": "~1.0.6", - "extend": "~3.0.2", - "forever-agent": "~0.6.1", - "form-data": "~2.3.2", - "har-validator": "~5.1.3", - "http-signature": "~1.2.0", - "is-typedarray": "~1.0.0", - "isstream": "~0.1.2", - "json-stringify-safe": "~5.0.1", - "mime-types": "~2.1.19", - "oauth-sign": "~0.9.0", - "performance-now": "^2.1.0", - "qs": "~6.5.2", - "safe-buffer": "^5.1.2", - "tough-cookie": "~2.5.0", - "tunnel-agent": "^0.6.0", - "uuid": "^3.3.2" - }, - "dependencies": { - "qs": { - "version": "6.5.2", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz", - "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==" - } - } - }, - "resolve": { - "version": "1.17.0", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.17.0.tgz", - "integrity": "sha512-ic+7JYiV8Vi2yzQGFWOkiZD5Z9z7O2Zhm9XMaTxdJExKasieFCr+yXZ/WmXsckHiKl12ar0y6XiXDx3m4RHn1w==", - "requires": { - "path-parse": "^1.0.6" - } - }, - "responselike": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/responselike/-/responselike-1.0.2.tgz", - "integrity": "sha1-kYcg7ztjHFZCvgaPFa3lpG9Loec=", - "requires": { - "lowercase-keys": "^1.0.0" - } - }, - "resumer": { - "version": "0.0.0", - "resolved": "https://registry.npmjs.org/resumer/-/resumer-0.0.0.tgz", - "integrity": "sha1-8ej0YeQGS6Oegq883CqMiT0HZ1k=", - "requires": { - "through": "~2.3.4" - } - }, - "ripemd160": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.2.tgz", - "integrity": "sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==", - "requires": { - "hash-base": "^3.0.0", - "inherits": "^2.0.1" - } - }, - "rlp": { - "version": "2.2.5", - "resolved": "https://registry.npmjs.org/rlp/-/rlp-2.2.5.tgz", - "integrity": "sha512-y1QxTQOp0OZnjn19FxBmped4p+BSKPHwGndaqrESseyd2xXZtcgR3yuTIosh8CaMaOii9SKIYerBXnV/CpJ3qw==", - "requires": { - "bn.js": "^4.11.1" - } - }, - "rustbn.js": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/rustbn.js/-/rustbn.js-0.2.0.tgz", - "integrity": "sha512-4VlvkRUuCJvr2J6Y0ImW7NvTCriMi7ErOAqWk1y69vAdoNIzCF3yPmgeNzx+RQTLEDFq5sHfscn1MwHxP9hNfA==" - }, - "safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==" - }, - "safe-event-emitter": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/safe-event-emitter/-/safe-event-emitter-1.0.1.tgz", - "integrity": "sha512-e1wFe99A91XYYxoQbcq2ZJUWurxEyP8vfz7A7vuUe1s95q8r5ebraVaA1BukYJcpM6V16ugWoD9vngi8Ccu5fg==", - "requires": { - "events": "^3.0.0" - } - }, - "safer-buffer": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" - }, - "scrypt-js": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/scrypt-js/-/scrypt-js-2.0.3.tgz", - "integrity": "sha1-uwBAvgMEPamgEqLOqfyfhSz8h9Q=" - }, - "scryptsy": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/scryptsy/-/scryptsy-2.1.0.tgz", - "integrity": "sha512-1CdSqHQowJBnMAFyPEBRfqag/YP9OF394FV+4YREIJX4ljD7OxvQRDayyoyyCk+senRjSkP6VnUNQmVQqB6g7w==" - }, - "secp256k1": { - "version": "3.8.0", - "resolved": "https://registry.npmjs.org/secp256k1/-/secp256k1-3.8.0.tgz", - "integrity": "sha512-k5ke5avRZbtl9Tqx/SA7CbY3NF6Ro+Sj9cZxezFzuBlLDmyqPiL8hJJ+EmzD8Ig4LUDByHJ3/iPOVoRixs/hmw==", - "requires": { - "bindings": "^1.5.0", - "bip66": "^1.1.5", - "bn.js": "^4.11.8", - "create-hash": "^1.2.0", - "drbg.js": "^1.0.1", - "elliptic": "^6.5.2", - "nan": "^2.14.0", - "safe-buffer": "^5.1.2" - } - }, - "seek-bzip": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/seek-bzip/-/seek-bzip-1.0.5.tgz", - "integrity": "sha1-z+kXyz0nS8/6x5J1ivUxc+sfq9w=", - "requires": { - "commander": "~2.8.1" - } - }, - "semaphore": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/semaphore/-/semaphore-1.1.0.tgz", - "integrity": "sha512-O4OZEaNtkMd/K0i6js9SL+gqy0ZCBMgUvlSqHKi4IBdjhe7wB8pwztUk1BbZ1fmrvpwFrPbHzqd2w5pTcJH6LA==" - }, - "semver": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.2.0.tgz", - "integrity": "sha512-jdFC1VdUGT/2Scgbimf7FSx9iJLXoqfglSF+gJeuNWVpiE37OIbc1jywR/GJyFdz3mnkz2/id0L0J/cr0izR5A==" - }, - "send": { - "version": "0.17.1", - "resolved": "https://registry.npmjs.org/send/-/send-0.17.1.tgz", - "integrity": "sha512-BsVKsiGcQMFwT8UxypobUKyv7irCNRHk1T0G680vk88yf6LBByGcZJOTJCrTP2xVN6yI+XjPJcNuE3V4fT9sAg==", - "requires": { - "debug": "2.6.9", - "depd": "~1.1.2", - "destroy": "~1.0.4", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "etag": "~1.8.1", - "fresh": "0.5.2", - "http-errors": "~1.7.2", - "mime": "1.6.0", - "ms": "2.1.1", - "on-finished": "~2.3.0", - "range-parser": "~1.2.1", - "statuses": "~1.5.0" - }, - "dependencies": { - "ms": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", - "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==" - } - } - }, - "serve-static": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.14.1.tgz", - "integrity": "sha512-JMrvUwE54emCYWlTI+hGrGv5I8dEwmco/00EvkzIIsR7MqrHonbD9pO2MOfFnpFntl7ecpZs+3mW+XbQZu9QCg==", - "requires": { - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "parseurl": "~1.3.3", - "send": "0.17.1" - } - }, - "servify": { - "version": "0.1.12", - "resolved": "https://registry.npmjs.org/servify/-/servify-0.1.12.tgz", - "integrity": "sha512-/xE6GvsKKqyo1BAY+KxOWXcLpPsUUyji7Qg3bVD7hh1eRze5bR1uYiuDA/k3Gof1s9BTzQZEJK8sNcNGFIzeWw==", - "requires": { - "body-parser": "^1.16.0", - "cors": "^2.8.1", - "express": "^4.14.0", - "request": "^2.79.0", - "xhr": "^2.3.3" - } - }, - "set-immediate-shim": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/set-immediate-shim/-/set-immediate-shim-1.0.1.tgz", - "integrity": "sha1-SysbJ+uAip+NzEgaWOXlb1mfP2E=" - }, - "setimmediate": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", - "integrity": "sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU=" - }, - "setprototypeof": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.1.tgz", - "integrity": "sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw==" - }, - "sha.js": { - "version": "2.4.11", - "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz", - "integrity": "sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==", - "requires": { - "inherits": "^2.0.1", - "safe-buffer": "^5.0.1" - } - }, - "simple-concat": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/simple-concat/-/simple-concat-1.0.0.tgz", - "integrity": "sha1-c0TLuLbib7J9ZrL8hvn21Zl1IcY=" - }, - "simple-get": { - "version": "2.8.1", - "resolved": "https://registry.npmjs.org/simple-get/-/simple-get-2.8.1.tgz", - "integrity": "sha512-lSSHRSw3mQNUGPAYRqo7xy9dhKmxFXIjLjp4KHpf99GEH2VH7C3AM+Qfx6du6jhfUi6Vm7XnbEVEf7Wb6N8jRw==", - "requires": { - "decompress-response": "^3.3.0", - "once": "^1.3.1", - "simple-concat": "^1.0.0" - } - }, - "slash": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-1.0.0.tgz", - "integrity": "sha1-xB8vbDn8FtHNF61LXYlhFK5HDVU=" - }, - "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=" - }, - "source-map-support": { - "version": "0.5.19", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.19.tgz", - "integrity": "sha512-Wonm7zOCIJzBGQdB+thsPar0kYuCIzYvxZwlBa87yi/Mdjv7Tip2cyVbLj5o0cFPN4EVkuTwb3GDDyUx2DGnGw==", - "requires": { - "buffer-from": "^1.0.0", - "source-map": "^0.6.0" - }, - "dependencies": { - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" - } - } - }, - "sshpk": { - "version": "1.16.1", - "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.16.1.tgz", - "integrity": "sha512-HXXqVUq7+pcKeLqqZj6mHFUMvXtOJt1uoUx09pFW6011inTMxqI8BA8PM95myrIyyKwdnzjdFjLiE6KBPVtJIg==", - "requires": { - "asn1": "~0.2.3", - "assert-plus": "^1.0.0", - "bcrypt-pbkdf": "^1.0.0", - "dashdash": "^1.12.0", - "ecc-jsbn": "~0.1.1", - "getpass": "^0.1.1", - "jsbn": "~0.1.0", - "safer-buffer": "^2.0.2", - "tweetnacl": "~0.14.0" - } - }, - "statuses": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", - "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=" - }, - "strict-uri-encode": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/strict-uri-encode/-/strict-uri-encode-1.1.0.tgz", - "integrity": "sha1-J5siXfHVgrH1TmWt3UNS4Y+qBxM=" - }, - "string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "requires": { - "safe-buffer": "~5.1.0" - }, - "dependencies": { - "safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" - } - } - }, - "string.prototype.trim": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.1.tgz", - "integrity": "sha512-MjGFEeqixw47dAMFMtgUro/I0+wNqZB5GKXGt1fFr24u3TzDXCPu7J9Buppzoe3r/LqkSDLDDJzE15RGWDGAVw==", - "requires": { - "define-properties": "^1.1.3", - "es-abstract": "^1.17.0-next.1", - "function-bind": "^1.1.1" - } - }, - "string.prototype.trimend": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.1.tgz", - "integrity": "sha512-LRPxFUaTtpqYsTeNKaFOw3R4bxIzWOnbQ837QfBylo8jIxtcbK/A/sMV7Q+OAV/vWo+7s25pOE10KYSjaSO06g==", - "requires": { - "define-properties": "^1.1.3", - "es-abstract": "^1.17.5" - } - }, - "string.prototype.trimstart": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.1.tgz", - "integrity": "sha512-XxZn+QpvrBI1FOcg6dIpxUPgWCPuNXvMD72aaRaUQv1eD4e/Qy8i/hFTe0BUmD60p/QA6bh1avmuPTfNjqVWRw==", - "requires": { - "define-properties": "^1.1.3", - "es-abstract": "^1.17.5" - } - }, - "strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", - "requires": { - "ansi-regex": "^2.0.0" - } - }, - "strip-dirs": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/strip-dirs/-/strip-dirs-2.1.0.tgz", - "integrity": "sha512-JOCxOeKLm2CAS73y/U4ZeZPTkE+gNVCzKt7Eox84Iej1LT/2pTWYpZKJuxwQpvX1LiZb1xokNR7RLfuBAa7T3g==", - "requires": { - "is-natural-number": "^4.0.1" - } - }, - "strip-hex-prefix": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/strip-hex-prefix/-/strip-hex-prefix-1.0.0.tgz", - "integrity": "sha1-DF8VX+8RUTczd96du1iNoFUA428=", - "requires": { - "is-hex-prefixed": "1.0.0" - } - }, - "supports-color": { - "version": "5.4.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.4.0.tgz", - "integrity": "sha512-zjaXglF5nnWpsq470jSv6P9DwPvgLkuapYmfDm3JWOm0vkNTVF2tI4UrN2r6jH1qM/uc/WtxYY1hYoA2dOKj5w==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - }, - "swarm-js": { - "version": "0.1.39", - "resolved": "https://registry.npmjs.org/swarm-js/-/swarm-js-0.1.39.tgz", - "integrity": "sha512-QLMqL2rzF6n5s50BptyD6Oi0R1aWlJC5Y17SRIVXRj6OR1DRIPM7nepvrxxkjA1zNzFz6mUOMjfeqeDaWB7OOg==", - "requires": { - "bluebird": "^3.5.0", - "buffer": "^5.0.5", - "decompress": "^4.0.0", - "eth-lib": "^0.1.26", - "fs-extra": "^4.0.2", - "got": "^7.1.0", - "mime-types": "^2.1.16", - "mkdirp-promise": "^5.0.1", - "mock-fs": "^4.1.0", - "setimmediate": "^1.0.5", - "tar": "^4.0.2", - "xhr-request-promise": "^0.1.2" - }, - "dependencies": { - "get-stream": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz", - "integrity": "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=" - }, - "got": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/got/-/got-7.1.0.tgz", - "integrity": "sha512-Y5WMo7xKKq1muPsxD+KmrR8DH5auG7fBdDVueZwETwV6VytKyU9OX/ddpq2/1hp1vIPvVb4T81dKQz3BivkNLw==", - "requires": { - "decompress-response": "^3.2.0", - "duplexer3": "^0.1.4", - "get-stream": "^3.0.0", - "is-plain-obj": "^1.1.0", - "is-retry-allowed": "^1.0.0", - "is-stream": "^1.0.0", - "isurl": "^1.0.0-alpha5", - "lowercase-keys": "^1.0.0", - "p-cancelable": "^0.3.0", - "p-timeout": "^1.1.1", - "safe-buffer": "^5.0.1", - "timed-out": "^4.0.0", - "url-parse-lax": "^1.0.0", - "url-to-options": "^1.0.1" - } - }, - "p-cancelable": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-0.3.0.tgz", - "integrity": "sha512-RVbZPLso8+jFeq1MfNvgXtCRED2raz/dKpacfTNxsx6pLEpEomM7gah6VeHSYV3+vo0OAi4MkArtQcWWXuQoyw==" - }, - "prepend-http": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-1.0.4.tgz", - "integrity": "sha1-1PRWKwzjaW5BrFLQ4ALlemNdxtw=" - }, - "url-parse-lax": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-1.0.0.tgz", - "integrity": "sha1-evjzA2Rem9eaJy56FKxovAYJ2nM=", - "requires": { - "prepend-http": "^1.0.1" - } - } - } - }, - "tape": { - "version": "4.13.3", - "resolved": "https://registry.npmjs.org/tape/-/tape-4.13.3.tgz", - "integrity": "sha512-0/Y20PwRIUkQcTCSi4AASs+OANZZwqPKaipGCEwp10dQMipVvSZwUUCi01Y/OklIGyHKFhIcjock+DKnBfLAFw==", - "requires": { - "deep-equal": "~1.1.1", - "defined": "~1.0.0", - "dotignore": "~0.1.2", - "for-each": "~0.3.3", - "function-bind": "~1.1.1", - "glob": "~7.1.6", - "has": "~1.0.3", - "inherits": "~2.0.4", - "is-regex": "~1.0.5", - "minimist": "~1.2.5", - "object-inspect": "~1.7.0", - "resolve": "~1.17.0", - "resumer": "~0.0.0", - "string.prototype.trim": "~1.2.1", - "through": "~2.3.8" - }, - "dependencies": { - "glob": { - "version": "7.1.6", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", - "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - }, - "minimist": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", - "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==" - } - } - }, - "tar": { - "version": "4.4.13", - "resolved": "https://registry.npmjs.org/tar/-/tar-4.4.13.tgz", - "integrity": "sha512-w2VwSrBoHa5BsSyH+KxEqeQBAllHhccyMFVHtGtdMpF4W7IRWfZjFiQceJPChOeTsSDVUpER2T8FA93pr0L+QA==", - "requires": { - "chownr": "^1.1.1", - "fs-minipass": "^1.2.5", - "minipass": "^2.8.6", - "minizlib": "^1.2.1", - "mkdirp": "^0.5.0", - "safe-buffer": "^5.1.2", - "yallist": "^3.0.3" - } - }, - "tar-stream": { - "version": "1.6.2", - "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-1.6.2.tgz", - "integrity": "sha512-rzS0heiNf8Xn7/mpdSVVSMAWAoy9bfb1WOTYC78Z0UQKeKa/CWS8FOq0lKGNa8DWKAn9gxjCvMLYc5PGXYlK2A==", - "requires": { - "bl": "^1.0.0", - "buffer-alloc": "^1.2.0", - "end-of-stream": "^1.0.0", - "fs-constants": "^1.0.0", - "readable-stream": "^2.3.0", - "to-buffer": "^1.1.1", - "xtend": "^4.0.0" - } - }, - "through": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", - "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=" - }, - "through2": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", - "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", - "requires": { - "readable-stream": "~2.3.6", - "xtend": "~4.0.1" - } - }, - "timed-out": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/timed-out/-/timed-out-4.0.1.tgz", - "integrity": "sha1-8y6srFoXW+ol1/q1Zas+2HQe9W8=" - }, - "to-buffer": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/to-buffer/-/to-buffer-1.1.1.tgz", - "integrity": "sha512-lx9B5iv7msuFYE3dytT+KE5tap+rNYw+K4jVkb9R/asAb+pbBSM17jtunHplhBe6RRJdZx3Pn2Jph24O32mOVg==" - }, - "to-fast-properties": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", - "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=" - }, - "to-readable-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/to-readable-stream/-/to-readable-stream-1.0.0.tgz", - "integrity": "sha512-Iq25XBt6zD5npPhlLVXGFN3/gyR2/qODcKNNyTMd4vbm39HUaOiAM4PMq0eMVC/Tkxz+Zjdsc55g9yyz+Yq00Q==" - }, - "toidentifier": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.0.tgz", - "integrity": "sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw==" - }, - "tough-cookie": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz", - "integrity": "sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==", - "requires": { - "psl": "^1.1.28", - "punycode": "^2.1.1" - } - }, - "trim-right": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/trim-right/-/trim-right-1.0.1.tgz", - "integrity": "sha1-yy4SAwZ+DI3h9hQJS5/kVwTqYAM=" - }, - "truffle": { - "version": "5.1.33", - "resolved": "https://registry.npmjs.org/truffle/-/truffle-5.1.33.tgz", - "integrity": "sha512-zV220OC6YtKSOViA+eQpU61orAlNX4msDogecUsjsxjH0MZGIVPMfsh1LiA817KXIg1uEM7G5XPjTaCJeRB8iw==", - "dev": true, - "requires": { - "app-module-path": "^2.2.0", - "mocha": "5.2.0", - "original-require": "1.0.1" - } - }, - "tunnel-agent": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", - "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=", - "requires": { - "safe-buffer": "^5.0.1" - } - }, - "tweetnacl": { - "version": "0.14.5", - "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", - "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=" - }, - "type": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/type/-/type-1.2.0.tgz", - "integrity": "sha512-+5nt5AAniqsCnu2cEQQdpzCAh33kVx8n0VoFidKpB1dVVLAN/F+bgVOqOJqOnEnrhp222clB5p3vUlD+1QAnfg==" - }, - "type-is": { - "version": "1.6.18", - "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", - "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", - "requires": { - "media-typer": "0.3.0", - "mime-types": "~2.1.24" - } - }, - "typedarray": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", - "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=" - }, - "typedarray-to-buffer": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz", - "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==", - "requires": { - "is-typedarray": "^1.0.0" - } - }, - "ultron": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/ultron/-/ultron-1.1.1.tgz", - "integrity": "sha512-UIEXBNeYmKptWH6z8ZnqTeS8fV74zG0/eRU9VGkpzz+LIJNs8W/zM/L+7ctCkRrgbNnnR0xxw4bKOr0cW0N0Og==" - }, - "unbzip2-stream": { - "version": "1.4.3", - "resolved": "https://registry.npmjs.org/unbzip2-stream/-/unbzip2-stream-1.4.3.tgz", - "integrity": "sha512-mlExGW4w71ebDJviH16lQLtZS32VKqsSfk80GCfUlwT/4/hNRFsoscrF/c++9xinkMzECL1uL9DDwXqFWkruPg==", - "requires": { - "buffer": "^5.2.1", - "through": "^2.3.8" - } - }, - "underscore": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.9.1.tgz", - "integrity": "sha512-5/4etnCkd9c8gwgowi5/om/mYO5ajCaOgdzj/oW+0eQV9WxKBDZw5+ycmKmeaTXjInS/W0BzpGLo2xR2aBwZdg==" - }, - "universalify": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", - "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==" - }, - "unorm": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/unorm/-/unorm-1.6.0.tgz", - "integrity": "sha512-b2/KCUlYZUeA7JFUuRJZPUtr4gZvBh7tavtv4fvk4+KV9pfGiR6CQAQAWl49ZpR3ts2dk4FYkP7EIgDJoiOLDA==" - }, - "unpipe": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", - "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=" - }, - "uri-js": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.2.2.tgz", - "integrity": "sha512-KY9Frmirql91X2Qgjry0Wd4Y+YTdrdZheS8TFwvkbLWf/G5KNJDCh6pKL5OZctEW4+0Baa5idK2ZQuELRwPznQ==", - "requires": { - "punycode": "^2.1.0" - } - }, - "url-parse-lax": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-3.0.0.tgz", - "integrity": "sha1-FrXK/Afb42dsGxmZF3gj1lA6yww=", - "requires": { - "prepend-http": "^2.0.0" - } - }, - "url-set-query": { + "node_modules/ds-test": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/url-set-query/-/url-set-query-1.0.0.tgz", - "integrity": "sha1-AW6M/Xwg7gXK/neV6JK9BwL6ozk=" - }, - "url-to-options": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/url-to-options/-/url-to-options-1.0.1.tgz", - "integrity": "sha1-FQWgOiiaSMvXpDTvuu7FBV9WM6k=" - }, - "utf8": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/utf8/-/utf8-3.0.0.tgz", - "integrity": "sha512-E8VjFIQ/TyQgp+TZfS6l8yp/xWppSAHzidGiRrqe4bK4XP9pTRyKFgGJpO3SN7zdX4DeomTrwaseCHovfpFcqQ==" - }, - "util-deprecate": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" + "resolved": "git+ssh://git@github.com/dapphub/ds-test.git#e282159d5170298eb2455a6c05280ab5a73a4ef0", + "license": "GPL-3.0" }, - "utils-merge": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", - "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=" - }, - "uuid": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", - "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==" - }, - "vary": { + "node_modules/forge-std": { "version": "1.1.2", - "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", - "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=" - }, - "verror": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", - "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=", - "requires": { - "assert-plus": "^1.0.0", - "core-util-is": "1.0.2", - "extsprintf": "^1.2.0" - } - }, - "web3": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/web3/-/web3-1.2.1.tgz", - "integrity": "sha512-nNMzeCK0agb5i/oTWNdQ1aGtwYfXzHottFP2Dz0oGIzavPMGSKyVlr8ibVb1yK5sJBjrWVnTdGaOC2zKDFuFRw==", - "requires": { - "web3-bzz": "1.2.1", - "web3-core": "1.2.1", - "web3-eth": "1.2.1", - "web3-eth-personal": "1.2.1", - "web3-net": "1.2.1", - "web3-shh": "1.2.1", - "web3-utils": "1.2.1" - } - }, - "web3-bzz": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/web3-bzz/-/web3-bzz-1.2.1.tgz", - "integrity": "sha512-LdOO44TuYbGIPfL4ilkuS89GQovxUpmLz6C1UC7VYVVRILeZS740FVB3j9V4P4FHUk1RenaDfKhcntqgVCHtjw==", - "requires": { - "got": "9.6.0", - "swarm-js": "0.1.39", - "underscore": "1.9.1" - } - }, - "web3-core": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/web3-core/-/web3-core-1.2.1.tgz", - "integrity": "sha512-5ODwIqgl8oIg/0+Ai4jsLxkKFWJYE0uLuE1yUKHNVCL4zL6n3rFjRMpKPokd6id6nJCNgeA64KdWQ4XfpnjdMg==", - "requires": { - "web3-core-helpers": "1.2.1", - "web3-core-method": "1.2.1", - "web3-core-requestmanager": "1.2.1", - "web3-utils": "1.2.1" - } - }, - "web3-core-helpers": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/web3-core-helpers/-/web3-core-helpers-1.2.1.tgz", - "integrity": "sha512-Gx3sTEajD5r96bJgfuW377PZVFmXIH4TdqDhgGwd2lZQCcMi+DA4TgxJNJGxn0R3aUVzyyE76j4LBrh412mXrw==", - "requires": { - "underscore": "1.9.1", - "web3-eth-iban": "1.2.1", - "web3-utils": "1.2.1" - } - }, - "web3-core-method": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/web3-core-method/-/web3-core-method-1.2.1.tgz", - "integrity": "sha512-Ghg2WS23qi6Xj8Od3VCzaImLHseEA7/usvnOItluiIc5cKs00WYWsNy2YRStzU9a2+z8lwQywPYp0nTzR/QXdQ==", - "requires": { - "underscore": "1.9.1", - "web3-core-helpers": "1.2.1", - "web3-core-promievent": "1.2.1", - "web3-core-subscriptions": "1.2.1", - "web3-utils": "1.2.1" - } - }, - "web3-core-promievent": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/web3-core-promievent/-/web3-core-promievent-1.2.1.tgz", - "integrity": "sha512-IVUqgpIKoeOYblwpex4Hye6npM0aMR+kU49VP06secPeN0rHMyhGF0ZGveWBrGvf8WDPI7jhqPBFIC6Jf3Q3zw==", - "requires": { - "any-promise": "1.3.0", - "eventemitter3": "3.1.2" - } - }, - "web3-core-requestmanager": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/web3-core-requestmanager/-/web3-core-requestmanager-1.2.1.tgz", - "integrity": "sha512-xfknTC69RfYmLKC+83Jz73IC3/sS2ZLhGtX33D4Q5nQ8yc39ElyAolxr9sJQS8kihOcM6u4J+8gyGMqsLcpIBg==", - "requires": { - "underscore": "1.9.1", - "web3-core-helpers": "1.2.1", - "web3-providers-http": "1.2.1", - "web3-providers-ipc": "1.2.1", - "web3-providers-ws": "1.2.1" - } - }, - "web3-core-subscriptions": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/web3-core-subscriptions/-/web3-core-subscriptions-1.2.1.tgz", - "integrity": "sha512-nmOwe3NsB8V8UFsY1r+sW6KjdOS68h8nuh7NzlWxBQT/19QSUGiERRTaZXWu5BYvo1EoZRMxCKyCQpSSXLc08g==", - "requires": { - "eventemitter3": "3.1.2", - "underscore": "1.9.1", - "web3-core-helpers": "1.2.1" - } - }, - "web3-eth": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/web3-eth/-/web3-eth-1.2.1.tgz", - "integrity": "sha512-/2xly4Yry5FW1i+uygPjhfvgUP/MS/Dk+PDqmzp5M88tS86A+j8BzKc23GrlA8sgGs0645cpZK/999LpEF5UdA==", - "requires": { - "underscore": "1.9.1", - "web3-core": "1.2.1", - "web3-core-helpers": "1.2.1", - "web3-core-method": "1.2.1", - "web3-core-subscriptions": "1.2.1", - "web3-eth-abi": "1.2.1", - "web3-eth-accounts": "1.2.1", - "web3-eth-contract": "1.2.1", - "web3-eth-ens": "1.2.1", - "web3-eth-iban": "1.2.1", - "web3-eth-personal": "1.2.1", - "web3-net": "1.2.1", - "web3-utils": "1.2.1" - } - }, - "web3-eth-abi": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/web3-eth-abi/-/web3-eth-abi-1.2.1.tgz", - "integrity": "sha512-jI/KhU2a/DQPZXHjo2GW0myEljzfiKOn+h1qxK1+Y9OQfTcBMxrQJyH5AP89O6l6NZ1QvNdq99ThAxBFoy5L+g==", - "requires": { - "ethers": "4.0.0-beta.3", - "underscore": "1.9.1", - "web3-utils": "1.2.1" - } - }, - "web3-eth-accounts": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/web3-eth-accounts/-/web3-eth-accounts-1.2.1.tgz", - "integrity": "sha512-26I4qq42STQ8IeKUyur3MdQ1NzrzCqPsmzqpux0j6X/XBD7EjZ+Cs0lhGNkSKH5dI3V8CJasnQ5T1mNKeWB7nQ==", - "requires": { - "any-promise": "1.3.0", - "crypto-browserify": "3.12.0", - "eth-lib": "0.2.7", - "scryptsy": "2.1.0", - "semver": "6.2.0", - "underscore": "1.9.1", - "uuid": "3.3.2", - "web3-core": "1.2.1", - "web3-core-helpers": "1.2.1", - "web3-core-method": "1.2.1", - "web3-utils": "1.2.1" - }, - "dependencies": { - "eth-lib": { - "version": "0.2.7", - "resolved": "https://registry.npmjs.org/eth-lib/-/eth-lib-0.2.7.tgz", - "integrity": "sha1-L5Pxex4jrsN1nNSj/iDBKGo/wco=", - "requires": { - "bn.js": "^4.11.6", - "elliptic": "^6.4.0", - "xhr-request-promise": "^0.1.2" - } - }, - "uuid": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.3.2.tgz", - "integrity": "sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA==" - } - } - }, - "web3-eth-contract": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/web3-eth-contract/-/web3-eth-contract-1.2.1.tgz", - "integrity": "sha512-kYFESbQ3boC9bl2rYVghj7O8UKMiuKaiMkxvRH5cEDHil8V7MGEGZNH0slSdoyeftZVlaWSMqkRP/chfnKND0g==", - "requires": { - "underscore": "1.9.1", - "web3-core": "1.2.1", - "web3-core-helpers": "1.2.1", - "web3-core-method": "1.2.1", - "web3-core-promievent": "1.2.1", - "web3-core-subscriptions": "1.2.1", - "web3-eth-abi": "1.2.1", - "web3-utils": "1.2.1" - } - }, - "web3-eth-ens": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/web3-eth-ens/-/web3-eth-ens-1.2.1.tgz", - "integrity": "sha512-lhP1kFhqZr2nnbu3CGIFFrAnNxk2veXpOXBY48Tub37RtobDyHijHgrj+xTh+mFiPokyrapVjpFsbGa+Xzye4Q==", - "requires": { - "eth-ens-namehash": "2.0.8", - "underscore": "1.9.1", - "web3-core": "1.2.1", - "web3-core-helpers": "1.2.1", - "web3-core-promievent": "1.2.1", - "web3-eth-abi": "1.2.1", - "web3-eth-contract": "1.2.1", - "web3-utils": "1.2.1" - } - }, - "web3-eth-iban": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/web3-eth-iban/-/web3-eth-iban-1.2.1.tgz", - "integrity": "sha512-9gkr4QPl1jCU+wkgmZ8EwODVO3ovVj6d6JKMos52ggdT2YCmlfvFVF6wlGLwi0VvNa/p+0BjJzaqxnnG/JewjQ==", - "requires": { - "bn.js": "4.11.8", - "web3-utils": "1.2.1" - }, - "dependencies": { - "bn.js": { - "version": "4.11.8", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.8.tgz", - "integrity": "sha512-ItfYfPLkWHUjckQCk8xC+LwxgK8NYcXywGigJgSwOP8Y2iyWT4f2vsZnoOXTTbo+o5yXmIUJ4gn5538SO5S3gA==" - } - } - }, - "web3-eth-personal": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/web3-eth-personal/-/web3-eth-personal-1.2.1.tgz", - "integrity": "sha512-RNDVSiaSoY4aIp8+Hc7z+X72H7lMb3fmAChuSBADoEc7DsJrY/d0R5qQDK9g9t2BO8oxgLrLNyBP/9ub2Hc6Bg==", - "requires": { - "web3-core": "1.2.1", - "web3-core-helpers": "1.2.1", - "web3-core-method": "1.2.1", - "web3-net": "1.2.1", - "web3-utils": "1.2.1" - } - }, - "web3-net": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/web3-net/-/web3-net-1.2.1.tgz", - "integrity": "sha512-Yt1Bs7WgnLESPe0rri/ZoPWzSy55ovioaP35w1KZydrNtQ5Yq4WcrAdhBzcOW7vAkIwrsLQsvA+hrOCy7mNauw==", - "requires": { - "web3-core": "1.2.1", - "web3-core-method": "1.2.1", - "web3-utils": "1.2.1" - } - }, - "web3-providers-http": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/web3-providers-http/-/web3-providers-http-1.2.1.tgz", - "integrity": "sha512-BDtVUVolT9b3CAzeGVA/np1hhn7RPUZ6YYGB/sYky+GjeO311Yoq8SRDUSezU92x8yImSC2B+SMReGhd1zL+bQ==", - "requires": { - "web3-core-helpers": "1.2.1", - "xhr2-cookies": "1.1.0" - } - }, - "web3-providers-ipc": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/web3-providers-ipc/-/web3-providers-ipc-1.2.1.tgz", - "integrity": "sha512-oPEuOCwxVx8L4CPD0TUdnlOUZwGBSRKScCz/Ws2YHdr9Ium+whm+0NLmOZjkjQp5wovQbyBzNa6zJz1noFRvFA==", - "requires": { - "oboe": "2.1.4", - "underscore": "1.9.1", - "web3-core-helpers": "1.2.1" - } - }, - "web3-providers-ws": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/web3-providers-ws/-/web3-providers-ws-1.2.1.tgz", - "integrity": "sha512-oqsQXzu+ejJACVHy864WwIyw+oB21nw/pI65/sD95Zi98+/HQzFfNcIFneF1NC4bVF3VNX4YHTNq2I2o97LAiA==", - "requires": { - "underscore": "1.9.1", - "web3-core-helpers": "1.2.1", - "websocket": "github:web3-js/WebSocket-Node#polyfill/globalThis" - }, - "dependencies": { - "websocket": { - "version": "git+ssh://git@github.com/web3-js/WebSocket-Node.git#ef5ea2f41daf4a2113b80c9223df884b4d56c400", - "from": "websocket@github:web3-js/WebSocket-Node#polyfill/globalThis", - "requires": { - "debug": "^2.2.0", - "es5-ext": "^0.10.50", - "nan": "^2.14.0", - "typedarray-to-buffer": "^3.1.5", - "yaeti": "^0.0.6" - } - } - } - }, - "web3-shh": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/web3-shh/-/web3-shh-1.2.1.tgz", - "integrity": "sha512-/3Cl04nza5kuFn25bV3FJWa0s3Vafr5BlT933h26xovQ6HIIz61LmvNQlvX1AhFL+SNJOTcQmK1SM59vcyC8bA==", - "requires": { - "web3-core": "1.2.1", - "web3-core-method": "1.2.1", - "web3-core-subscriptions": "1.2.1", - "web3-net": "1.2.1" - } - }, - "web3-utils": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/web3-utils/-/web3-utils-1.2.1.tgz", - "integrity": "sha512-Mrcn3l58L+yCKz3zBryM6JZpNruWuT0OCbag8w+reeNROSGVlXzUQkU+gtAwc9JCZ7tKUyg67+2YUGqUjVcyBA==", - "requires": { - "bn.js": "4.11.8", - "eth-lib": "0.2.7", - "ethjs-unit": "0.1.6", - "number-to-bn": "1.7.0", - "randomhex": "0.1.5", - "underscore": "1.9.1", - "utf8": "3.0.0" - }, - "dependencies": { - "bn.js": { - "version": "4.11.8", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.8.tgz", - "integrity": "sha512-ItfYfPLkWHUjckQCk8xC+LwxgK8NYcXywGigJgSwOP8Y2iyWT4f2vsZnoOXTTbo+o5yXmIUJ4gn5538SO5S3gA==" - }, - "eth-lib": { - "version": "0.2.7", - "resolved": "https://registry.npmjs.org/eth-lib/-/eth-lib-0.2.7.tgz", - "integrity": "sha1-L5Pxex4jrsN1nNSj/iDBKGo/wco=", - "requires": { - "bn.js": "^4.11.6", - "elliptic": "^6.4.0", - "xhr-request-promise": "^0.1.2" - } - } - } - }, - "whatwg-fetch": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/whatwg-fetch/-/whatwg-fetch-2.0.4.tgz", - "integrity": "sha512-dcQ1GWpOD/eEQ97k66aiEVpNnapVj90/+R+SXTPYGHpYBBypfKJEQjLrvMZ7YXbKm21gXd4NcuxUTjiv1YtLng==" - }, - "wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" - }, - "ws": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/ws/-/ws-3.3.3.tgz", - "integrity": "sha512-nnWLa/NwZSt4KQJu51MYlCcSQ5g7INpOrOMt4XV8j4dqTXdmlUmSHQ8/oLC069ckre0fRsgfvsKwbTdtKLCDkA==", - "requires": { - "async-limiter": "~1.0.0", - "safe-buffer": "~5.1.0", - "ultron": "~1.1.0" - }, - "dependencies": { - "safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" - } - } - }, - "xhr": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/xhr/-/xhr-2.5.0.tgz", - "integrity": "sha512-4nlO/14t3BNUZRXIXfXe+3N6w3s1KoxcJUUURctd64BLRe67E4gRwp4PjywtDY72fXpZ1y6Ch0VZQRY/gMPzzQ==", - "requires": { - "global": "~4.3.0", - "is-function": "^1.0.1", - "parse-headers": "^2.0.0", - "xtend": "^4.0.0" - } - }, - "xhr-request": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/xhr-request/-/xhr-request-1.1.0.tgz", - "integrity": "sha512-Y7qzEaR3FDtL3fP30k9wO/e+FBnBByZeybKOhASsGP30NIkRAAkKD/sCnLvgEfAIEC1rcmK7YG8f4oEnIrrWzA==", - "requires": { - "buffer-to-arraybuffer": "^0.0.5", - "object-assign": "^4.1.1", - "query-string": "^5.0.1", - "simple-get": "^2.7.0", - "timed-out": "^4.0.1", - "url-set-query": "^1.0.0", - "xhr": "^2.0.4" - } - }, - "xhr-request-promise": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/xhr-request-promise/-/xhr-request-promise-0.1.3.tgz", - "integrity": "sha512-YUBytBsuwgitWtdRzXDDkWAXzhdGB8bYm0sSzMPZT7Z2MBjMSTHFsyCT1yCRATY+XC69DUrQraRAEgcoCRaIPg==", - "requires": { - "xhr-request": "^1.1.0" - } - }, - "xhr2-cookies": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/xhr2-cookies/-/xhr2-cookies-1.1.0.tgz", - "integrity": "sha1-fXdEnQmZGX8VXLc7I99yUF7YnUg=", - "requires": { - "cookiejar": "^2.1.1" - } - }, - "xmlhttprequest": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/xmlhttprequest/-/xmlhttprequest-1.8.0.tgz", - "integrity": "sha1-Z/4HXFwk/vOfnWX197f+dRcZaPw=" - }, - "xtend": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", - "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==" - }, - "yaeti": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/yaeti/-/yaeti-0.0.6.tgz", - "integrity": "sha1-8m9ITXJoTPQr7ft2lwqhYI+/lXc=" - }, - "yallist": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", - "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==" + "resolved": "https://registry.npmjs.org/forge-std/-/forge-std-1.1.2.tgz", + "integrity": "sha512-Wfb0iAS9PcfjMKtGpWQw9mXzJxrWD62kJCUqqLcyuI0+VRtJ3j20XembjF3kS20qELYdXft1vD/SPFVWVKMFOw==" + } + }, + "dependencies": { + "ds-test": { + "version": "git+ssh://git@github.com/dapphub/ds-test.git#e282159d5170298eb2455a6c05280ab5a73a4ef0", + "from": "ds-test@github:dapphub/ds-test" }, - "yauzl": { - "version": "2.10.0", - "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.10.0.tgz", - "integrity": "sha1-x+sXyT4RLLEIb6bY5R+wZnt5pfk=", - "requires": { - "buffer-crc32": "~0.2.3", - "fd-slicer": "~1.1.0" - } + "forge-std": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/forge-std/-/forge-std-1.1.2.tgz", + "integrity": "sha512-Wfb0iAS9PcfjMKtGpWQw9mXzJxrWD62kJCUqqLcyuI0+VRtJ3j20XembjF3kS20qELYdXft1vD/SPFVWVKMFOw==" } } } diff --git a/packages/foundry/lib/solidity-bytes-utils/package.json b/packages/foundry/lib/solidity-bytes-utils/package.json index 218a4d9..ad61cd9 100644 --- a/packages/foundry/lib/solidity-bytes-utils/package.json +++ b/packages/foundry/lib/solidity-bytes-utils/package.json @@ -1,6 +1,6 @@ { "name": "solidity-bytes-utils", - "version": "0.8.0", + "version": "0.8.2", "description": "Solidity bytes tightly packed arrays utility library.", "main": "truffle.js", "repository": { @@ -26,9 +26,7 @@ }, "homepage": "https://github.com/GNSPS/solidity-bytes-utils#readme", "dependencies": { - "@truffle/hdwallet-provider": "latest" - }, - "devDependencies": { - "truffle": "latest" + "ds-test": "github:dapphub/ds-test", + "forge-std": "^1.1.2" } } diff --git a/packages/foundry/lib/solidity-bytes-utils/remappings.txt b/packages/foundry/lib/solidity-bytes-utils/remappings.txt new file mode 100644 index 0000000..99e3a3f --- /dev/null +++ b/packages/foundry/lib/solidity-bytes-utils/remappings.txt @@ -0,0 +1,2 @@ +forge-std/=node_modules/forge-std/ +ds-test/=node_modules/ds-test/src/ \ No newline at end of file diff --git a/packages/foundry/lib/solidity-bytes-utils/test/TestBytesLib1.sol b/packages/foundry/lib/solidity-bytes-utils/test/TestBytesLib1.sol index 24cca58..0714d1a 100755 --- a/packages/foundry/lib/solidity-bytes-utils/test/TestBytesLib1.sol +++ b/packages/foundry/lib/solidity-bytes-utils/test/TestBytesLib1.sol @@ -1,12 +1,12 @@ // SPDX-License-Identifier: Unlicense pragma solidity >=0.8.0 <0.9.0; -import "truffle/Assert.sol"; +import "forge-std/Test.sol"; import "../contracts/AssertBytes.sol"; import "../contracts/BytesLib.sol"; -contract TestBytesLib1 { +contract TestBytesLib1 is Test { using BytesLib for bytes; bytes storageCheckBytes = hex"aabbccddeeff"; @@ -38,22 +38,28 @@ contract TestBytesLib1 { bytes memory checkBytesWrongLength = hex"aa0000"; bytes memory checkBytesWrongContent = hex"aabbccddee00"; - // This next line is needed in order for Truffle to activate the Solidity unit testing feature - // otherwise it doesn't interpret any events fired as results of tests - Assert.equal(uint256(1), uint256(1), "This should not fail! :D"); - + assertEq(checkBytes, checkBytesRight, "Sanity check should be checking equal bytes arrays out."); + assertTrue(keccak256(checkBytes) != keccak256(checkBytesWrongLength), "Sanity check should be checking different length bytes arrays out."); + assertTrue(keccak256(checkBytes) != keccak256(checkBytesWrongContent), "Sanity check should be checking different content bytes arrays out."); AssertBytes.equal(checkBytes, checkBytesRight, "Sanity check should be checking equal bytes arrays out."); AssertBytes.notEqual(checkBytes, checkBytesWrongLength, "Sanity check should be checking different length bytes arrays out."); AssertBytes.notEqual(checkBytes, checkBytesWrongContent, "Sanity check should be checking different content bytes arrays out."); + assertEq(storageCheckBytes, checkBytesRight, "Sanity check should be checking equal bytes arrays out. (Storage)"); + assertTrue(keccak256(storageCheckBytes) != keccak256(checkBytesWrongLength), "Sanity check should be checking different length bytes arrays out. (Storage)"); + assertTrue(keccak256(storageCheckBytes) != keccak256(checkBytesWrongContent), "Sanity check should be checking different content bytes arrays out. (Storage)"); AssertBytes.equalStorage(storageCheckBytes, checkBytesRight, "Sanity check should be checking equal bytes arrays out. (Storage)"); AssertBytes.notEqualStorage(storageCheckBytes, checkBytesWrongLength, "Sanity check should be checking different length bytes arrays out. (Storage)"); AssertBytes.notEqualStorage(storageCheckBytes, checkBytesWrongContent, "Sanity check should be checking different content bytes arrays out. (Storage)"); // Zero-length checks + assertEq(checkBytesZeroLength, checkBytesZeroLengthRight, "Sanity check should be checking equal zero-length bytes arrays out."); + assertTrue(keccak256(checkBytesZeroLength) != keccak256(checkBytes), "Sanity check should be checking different length bytes arrays out."); AssertBytes.equal(checkBytesZeroLength, checkBytesZeroLengthRight, "Sanity check should be checking equal zero-length bytes arrays out."); AssertBytes.notEqual(checkBytesZeroLength, checkBytes, "Sanity check should be checking different length bytes arrays out."); + assertEq(storageCheckBytesZeroLength, checkBytesZeroLengthRight, "Sanity check should be checking equal zero-length bytes arrays out. (Storage)"); + assertTrue(keccak256(storageCheckBytesZeroLength) != keccak256(checkBytes), "Sanity check should be checking different length bytes arrays out. (Storage)"); AssertBytes.equalStorage(storageCheckBytesZeroLength, checkBytesZeroLengthRight, "Sanity check should be checking equal zero-length bytes arrays out. (Storage)"); AssertBytes.notEqualStorage(storageCheckBytesZeroLength, checkBytes, "Sanity check should be checking different length bytes arrays out. (Storage)"); } @@ -76,13 +82,18 @@ contract TestBytesLib1 { // Now we should make sure that all the other previously initialized arrays stayed the same testBytes = hex"f00dfeed"; + assertEq(preBytes4, testBytes, "After a postBytes4 concat the preBytes4 integrity check failed."); + assertEq(postBytes4, testBytes, "After a postBytes4 concat the postBytes4 integrity check failed."); AssertBytes.equal(preBytes4, testBytes, "After a postBytes4 concat the preBytes4 integrity check failed."); AssertBytes.equal(postBytes4, testBytes, "After a postBytes4 concat the postBytes4 integrity check failed."); testBytes = hex"f00d000000000000000000000000000000000000000000000000000000feed"; + assertEq(postBytes31, testBytes, "After a postBytes4 concat the postBytes31 integrity check failed."); AssertBytes.equal(postBytes31, testBytes, "After a postBytes4 concat the postBytes31 integrity check failed."); testBytes = hex"f00d00000000000000000000000000000000000000000000000000000000feed"; + assertEq(postBytes32, testBytes, "After a postBytes4 concat the postBytes32 integrity check failed."); AssertBytes.equal(postBytes32, testBytes, "After a postBytes4 concat the postBytes32 integrity check failed."); testBytes = hex"f00d0000000000000000000000000000000000000000000000000000000000feed"; + assertEq(postBytes33, testBytes, "After a postBytes4 concat the postBytes33 integrity check failed."); AssertBytes.equal(postBytes33, testBytes, "After a postBytes4 concat the postBytes33 integrity check failed."); } @@ -100,13 +111,18 @@ contract TestBytesLib1 { // Now we should make sure that all the other previously initialized arrays stayed the same testBytes = hex"f00dfeed"; + assertEq(preBytes4, testBytes, "After a postBytes31 concat the preBytes4 integrity check failed."); + assertEq(postBytes4, testBytes, "After a postBytes31 concat the postBytes4 integrity check failed."); AssertBytes.equal(preBytes4, testBytes, "After a postBytes31 concat the preBytes4 integrity check failed."); AssertBytes.equal(postBytes4, testBytes, "After a postBytes31 concat the postBytes4 integrity check failed."); testBytes = hex"f00d000000000000000000000000000000000000000000000000000000feed"; + assertEq(postBytes31, testBytes, "After a postBytes31 concat the postBytes31 integrity check failed."); AssertBytes.equal(postBytes31, testBytes, "After a postBytes31 concat the postBytes31 integrity check failed."); testBytes = hex"f00d00000000000000000000000000000000000000000000000000000000feed"; + assertEq(postBytes32, testBytes, "After a postBytes31 concat the postBytes32 integrity check failed."); AssertBytes.equal(postBytes32, testBytes, "After a postBytes31 concat the postBytes32 integrity check failed."); testBytes = hex"f00d0000000000000000000000000000000000000000000000000000000000feed"; + assertEq(postBytes33, testBytes, "After a postBytes31 concat the postBytes33 integrity check failed."); AssertBytes.equal(postBytes33, testBytes, "After a postBytes31 concat the postBytes33 integrity check failed."); } @@ -124,15 +140,20 @@ contract TestBytesLib1 { // Now we should make sure that all the other previously initialized arrays stayed the same testBytes = hex"f00dfeed"; + assertEq(preBytes4, testBytes, "After a postBytes32 concat the preBytes4 integrity check failed."); + assertEq(postBytes4, testBytes, "After a postBytes32 concat the postBytes4 integrity check failed."); AssertBytes.equal(preBytes4, testBytes, "After a postBytes32 concat the preBytes4 integrity check failed."); AssertBytes.equal(postBytes4, testBytes, "After a postBytes32 concat the postBytes4 integrity check failed."); testBytes = hex"f00d000000000000000000000000000000000000000000000000000000feed"; + assertEq(postBytes31, testBytes, "After a postBytes32 concat the postBytes31 integrity check failed."); AssertBytes.equal(postBytes31, testBytes, "After a postBytes32 concat the postBytes31 integrity check failed."); testBytes = hex"f00d00000000000000000000000000000000000000000000000000000000feed"; + assertEq(postBytes32, testBytes, "After a postBytes32 concat the postBytes32 integrity check failed."); AssertBytes.equal(postBytes32, testBytes, "After a postBytes32 concat the postBytes32 integrity check failed."); testBytes = hex"f00d0000000000000000000000000000000000000000000000000000000000feed"; + assertEq(postBytes33, testBytes, "After a postBytes32 concat the postBytes33 integrity check failed."); AssertBytes.equal(postBytes33, testBytes, "After a postBytes32 concat the postBytes33 integrity check failed."); - } +} function testMemoryIntegrityCheck33Bytes() public { bytes memory preBytes4 = hex"f00dfeed"; @@ -148,13 +169,18 @@ contract TestBytesLib1 { // Now we should make sure that all the other previously initialized arrays stayed the same testBytes = hex"f00dfeed"; + assertEq(preBytes4, testBytes, "After a postBytes33 concat the preBytes4 integrity check failed."); + assertEq(postBytes4, testBytes, "After a postBytes33 concat the postBytes4 integrity check failed."); AssertBytes.equal(preBytes4, testBytes, "After a postBytes33 concat the preBytes4 integrity check failed."); AssertBytes.equal(postBytes4, testBytes, "After a postBytes33 concat the postBytes4 integrity check failed."); testBytes = hex"f00d000000000000000000000000000000000000000000000000000000feed"; + assertEq(postBytes31, testBytes, "After a postBytes33 concat the postBytes31 integrity check failed."); AssertBytes.equal(postBytes31, testBytes, "After a postBytes33 concat the postBytes31 integrity check failed."); testBytes = hex"f00d00000000000000000000000000000000000000000000000000000000feed"; + assertEq(postBytes32, testBytes, "After a postBytes33 concat the postBytes32 integrity check failed."); AssertBytes.equal(postBytes32, testBytes, "After a postBytes33 concat the postBytes32 integrity check failed."); testBytes = hex"f00d0000000000000000000000000000000000000000000000000000000000feed"; + assertEq(postBytes33, testBytes, "After a postBytes33 concat the postBytes33 integrity check failed."); AssertBytes.equal(postBytes33, testBytes, "After a postBytes33 concat the postBytes33 integrity check failed."); } @@ -176,18 +202,22 @@ contract TestBytesLib1 { resultBytes = preBytes4.concat(postBytes4); testBytes = hex"f00dfeedf00dfeed"; + assertEq(resultBytes, testBytes, "preBytes4 + postBytes4 concatenation failed."); AssertBytes.equal(resultBytes, testBytes, "preBytes4 + postBytes4 concatenation failed."); resultBytes = preBytes31.concat(postBytes4); testBytes = hex"f00d000000000000000000000000000000000000000000000000000000feedf00dfeed"; + assertEq(resultBytes, testBytes, "preBytes31 + postBytes4 concatenation failed."); AssertBytes.equal(resultBytes, testBytes, "preBytes31 + postBytes4 concatenation failed."); resultBytes = preBytes32.concat(postBytes4); testBytes = hex"f00d00000000000000000000000000000000000000000000000000000000feedf00dfeed"; + assertEq(resultBytes, testBytes, "preBytes32 + postBytes4 concatenation failed."); AssertBytes.equal(resultBytes, testBytes, "preBytes32 + postBytes4 concatenation failed."); resultBytes = preBytes33.concat(postBytes4); testBytes = hex"f00d0000000000000000000000000000000000000000000000000000000000feedf00dfeed"; + assertEq(resultBytes, testBytes, "preBytes33 + postBytes4 concatenation failed."); AssertBytes.equal(resultBytes, testBytes, "preBytes33 + postBytes4 concatenation failed."); } @@ -205,18 +235,22 @@ contract TestBytesLib1 { resultBytes = preBytes4.concat(postBytes31); testBytes = hex"f00dfeedf00d000000000000000000000000000000000000000000000000000000feed"; + assertEq(resultBytes, testBytes, "preBytes4 + postBytes31 concatenation failed."); AssertBytes.equal(resultBytes, testBytes, "preBytes4 + postBytes31 concatenation failed."); resultBytes = preBytes31.concat(postBytes31); testBytes = hex"f00d000000000000000000000000000000000000000000000000000000feedf00d000000000000000000000000000000000000000000000000000000feed"; + assertEq(resultBytes, testBytes, "preBytes31 + postBytes31 concatenation failed."); AssertBytes.equal(resultBytes, testBytes, "preBytes31 + postBytes31 concatenation failed."); resultBytes = preBytes32.concat(postBytes31); testBytes = hex"f00d00000000000000000000000000000000000000000000000000000000feedf00d000000000000000000000000000000000000000000000000000000feed"; + assertEq(resultBytes, testBytes, "preBytes32 + postBytes31 concatenation failed."); AssertBytes.equal(resultBytes, testBytes, "preBytes32 + postBytes31 concatenation failed."); resultBytes = preBytes33.concat(postBytes31); testBytes = hex"f00d0000000000000000000000000000000000000000000000000000000000feedf00d000000000000000000000000000000000000000000000000000000feed"; + assertEq(resultBytes, testBytes, "preBytes33 + postBytes31 concatenation failed."); AssertBytes.equal(resultBytes, testBytes, "preBytes33 + postBytes31 concatenation failed."); } @@ -234,18 +268,22 @@ contract TestBytesLib1 { resultBytes = preBytes4.concat(postBytes32); testBytes = hex"f00dfeedf00d00000000000000000000000000000000000000000000000000000000feed"; + assertEq(resultBytes, testBytes, "preBytes4 + postBytes32 concatenation failed."); AssertBytes.equal(resultBytes, testBytes, "preBytes4 + postBytes32 concatenation failed."); resultBytes = preBytes31.concat(postBytes32); testBytes = hex"f00d000000000000000000000000000000000000000000000000000000feedf00d00000000000000000000000000000000000000000000000000000000feed"; + assertEq(resultBytes, testBytes, "preBytes31 + postBytes32 concatenation failed."); AssertBytes.equal(resultBytes, testBytes, "preBytes31 + postBytes32 concatenation failed."); resultBytes = preBytes32.concat(postBytes32); testBytes = hex"f00d00000000000000000000000000000000000000000000000000000000feedf00d00000000000000000000000000000000000000000000000000000000feed"; + assertEq(resultBytes, testBytes, "preBytes32 + postBytes32 concatenation failed."); AssertBytes.equal(resultBytes, testBytes, "preBytes32 + postBytes32 concatenation failed."); resultBytes = preBytes33.concat(postBytes32); testBytes = hex"f00d0000000000000000000000000000000000000000000000000000000000feedf00d00000000000000000000000000000000000000000000000000000000feed"; + assertEq(resultBytes, testBytes, "preBytes33 + postBytes32 concatenation failed."); AssertBytes.equal(resultBytes, testBytes, "preBytes33 + postBytes32 concatenation failed."); } @@ -255,29 +293,30 @@ contract TestBytesLib1 { bytes memory preBytes31 = hex"f00d000000000000000000000000000000000000000000000000000000feed"; bytes memory preBytes32 = hex"f00d00000000000000000000000000000000000000000000000000000000feed"; bytes memory preBytes33 = hex"f00d0000000000000000000000000000000000000000000000000000000000feed"; - // And another set of the same to concatenate with - bytes memory postBytes4 = hex"f00dfeed"; - bytes memory postBytes31 = hex"f00d000000000000000000000000000000000000000000000000000000feed"; - bytes memory postBytes32 = hex"f00d00000000000000000000000000000000000000000000000000000000feed"; - bytes memory postBytes33 = hex"f00d0000000000000000000000000000000000000000000000000000000000feed"; + + bytes memory postBytes33 = hex"f00d0000000000000000000000000000000000000000000000000000000000feed"; bytes memory testBytes; bytes memory resultBytes; resultBytes = preBytes4.concat(postBytes33); testBytes = hex"f00dfeedf00d0000000000000000000000000000000000000000000000000000000000feed"; + assertEq(resultBytes, testBytes, "preBytes4 + postBytes33 concatenation failed."); AssertBytes.equal(resultBytes, testBytes, "preBytes4 + postBytes33 concatenation failed."); resultBytes = preBytes31.concat(postBytes33); testBytes = hex"f00d000000000000000000000000000000000000000000000000000000feedf00d0000000000000000000000000000000000000000000000000000000000feed"; + assertEq(resultBytes, testBytes, "preBytes31 + postBytes33 concatenation failed."); AssertBytes.equal(resultBytes, testBytes, "preBytes31 + postBytes33 concatenation failed."); resultBytes = preBytes32.concat(postBytes33); testBytes = hex"f00d00000000000000000000000000000000000000000000000000000000feedf00d0000000000000000000000000000000000000000000000000000000000feed"; + assertEq(resultBytes, testBytes, "preBytes32 + postBytes33 concatenation failed."); AssertBytes.equal(resultBytes, testBytes, "preBytes32 + postBytes33 concatenation failed."); resultBytes = preBytes33.concat(postBytes33); testBytes = hex"f00d0000000000000000000000000000000000000000000000000000000000feedf00d0000000000000000000000000000000000000000000000000000000000feed"; + assertEq(resultBytes, testBytes, "preBytes33 + postBytes33 concatenation failed."); AssertBytes.equal(resultBytes, testBytes, "preBytes33 + postBytes33 concatenation failed."); } @@ -301,34 +340,42 @@ contract TestBytesLib1 { storageBytes4.concatStorage(memBytes4); testBytes = hex"f00dfeedf00dfeed"; + assertEq(storageBytes4, testBytes, "storageBytes4 + memBytes4 concatenation failed."); AssertBytes.equalStorage(storageBytes4, testBytes, "storageBytes4 + memBytes4 concatenation failed."); storageBytes31.concatStorage(memBytes4); testBytes = hex"f00d000000000000000000000000000000000000000000000000000000feedf00dfeed"; + assertEq(storageBytes31, testBytes, "storageBytes31 + memBytes4 concatenation failed."); AssertBytes.equalStorage(storageBytes31, testBytes, "storageBytes31 + memBytes4 concatenation failed."); storageBytes32.concatStorage(memBytes4); testBytes = hex"f00d00000000000000000000000000000000000000000000000000000000feedf00dfeed"; + assertEq(storageBytes32, testBytes, "storageBytes32 + memBytes4 concatenation failed."); AssertBytes.equalStorage(storageBytes32, testBytes, "storageBytes32 + memBytes4 concatenation failed."); storageBytes33.concatStorage(memBytes4); testBytes = hex"f00d0000000000000000000000000000000000000000000000000000000000feedf00dfeed"; + assertEq(storageBytes33, testBytes, "storageBytes33 + memBytes4 concatenation failed."); AssertBytes.equalStorage(storageBytes33, testBytes, "storageBytes33 + memBytes4 concatenation failed."); storageBytes63.concatStorage(memBytes4); testBytes = hex"f00d0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000feedf00dfeed"; + assertEq(storageBytes63, testBytes, "storageBytes63 + memBytes4 concatenation failed."); AssertBytes.equalStorage(storageBytes63, testBytes, "storageBytes63 + memBytes4 concatenation failed."); storageBytes64.concatStorage(memBytes4); testBytes = hex"f00d000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000feedf00dfeed"; + assertEq(storageBytes64, testBytes, "storageBytes64 + memBytes4 concatenation failed."); AssertBytes.equalStorage(storageBytes64, testBytes, "storageBytes64 + memBytes4 concatenation failed."); storageBytes65.concatStorage(memBytes4); testBytes = hex"f00d00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000feedf00dfeed"; + assertEq(storageBytes65, testBytes, "storageBytes65 + memBytes4 concatenation failed."); AssertBytes.equalStorage(storageBytes65, testBytes, "storageBytes65 + memBytes4 concatenation failed."); storageBytes70.concatStorage(memBytes4); testBytes = hex"f00d000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000feedf00dfeed"; + assertEq(storageBytes70, testBytes, "storageBytes70 + memBytes4 concatenation failed."); AssertBytes.equalStorage(storageBytes70, testBytes, "storageBytes70 + memBytes4 concatenation failed."); resetStorage(); @@ -350,34 +397,42 @@ contract TestBytesLib1 { storageBytes4.concatStorage(memBytes31); testBytes = hex"f00dfeedf00d000000000000000000000000000000000000000000000000000000feed"; + assertEq(storageBytes4, testBytes, "storageBytes4 + memBytes31 concatenation failed."); AssertBytes.equalStorage(storageBytes4, testBytes, "storageBytes4 + memBytes31 concatenation failed."); storageBytes31.concatStorage(memBytes31); testBytes = hex"f00d000000000000000000000000000000000000000000000000000000feedf00d000000000000000000000000000000000000000000000000000000feed"; + assertEq(storageBytes31, testBytes, "storageBytes31 + memBytes31 concatenation failed."); AssertBytes.equalStorage(storageBytes31, testBytes, "storageBytes31 + memBytes31 concatenation failed."); storageBytes32.concatStorage(memBytes31); testBytes = hex"f00d00000000000000000000000000000000000000000000000000000000feedf00d000000000000000000000000000000000000000000000000000000feed"; + assertEq(storageBytes32, testBytes, "storageBytes32 + memBytes31 concatenation failed."); AssertBytes.equalStorage(storageBytes32, testBytes, "storageBytes32 + memBytes31 concatenation failed."); storageBytes33.concatStorage(memBytes31); testBytes = hex"f00d0000000000000000000000000000000000000000000000000000000000feedf00d000000000000000000000000000000000000000000000000000000feed"; + assertEq(storageBytes33, testBytes, "storageBytes33 + memBytes31 concatenation failed."); AssertBytes.equalStorage(storageBytes33, testBytes, "storageBytes33 + memBytes31 concatenation failed."); storageBytes63.concatStorage(memBytes31); testBytes = hex"f00d0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000feedf00d000000000000000000000000000000000000000000000000000000feed"; + assertEq(storageBytes63, testBytes, "storageBytes63 + memBytes31 concatenation failed."); AssertBytes.equalStorage(storageBytes63, testBytes, "storageBytes63 + memBytes31 concatenation failed."); storageBytes64.concatStorage(memBytes31); testBytes = hex"f00d000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000feedf00d000000000000000000000000000000000000000000000000000000feed"; + assertEq(storageBytes64, testBytes, "storageBytes64 + memBytes31 concatenation failed."); AssertBytes.equalStorage(storageBytes64, testBytes, "storageBytes64 + memBytes31 concatenation failed."); storageBytes65.concatStorage(memBytes31); testBytes = hex"f00d00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000feedf00d000000000000000000000000000000000000000000000000000000feed"; + assertEq(storageBytes65, testBytes, "storageBytes65 + memBytes31 concatenation failed."); AssertBytes.equalStorage(storageBytes65, testBytes, "storageBytes65 + memBytes31 concatenation failed."); storageBytes70.concatStorage(memBytes31); testBytes = hex"f00d000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000feedf00d000000000000000000000000000000000000000000000000000000feed"; + assertEq(storageBytes70, testBytes, "storageBytes70 + memBytes31 concatenation failed."); AssertBytes.equalStorage(storageBytes70, testBytes, "storageBytes70 + memBytes31 concatenation failed."); resetStorage(); @@ -399,34 +454,42 @@ contract TestBytesLib1 { storageBytes4.concatStorage(memBytes32); testBytes = hex"f00dfeedf00d00000000000000000000000000000000000000000000000000000000feed"; + assertEq(storageBytes4, testBytes, "storageBytes4 + memBytes32 concatenation failed."); AssertBytes.equalStorage(storageBytes4, testBytes, "storageBytes4 + memBytes32 concatenation failed."); storageBytes31.concatStorage(memBytes32); testBytes = hex"f00d000000000000000000000000000000000000000000000000000000feedf00d00000000000000000000000000000000000000000000000000000000feed"; + assertEq(storageBytes31, testBytes, "storageBytes31 + memBytes32 concatenation failed."); AssertBytes.equalStorage(storageBytes31, testBytes, "storageBytes31 + memBytes32 concatenation failed."); storageBytes32.concatStorage(memBytes32); testBytes = hex"f00d00000000000000000000000000000000000000000000000000000000feedf00d00000000000000000000000000000000000000000000000000000000feed"; + assertEq(storageBytes32, testBytes, "storageBytes32 + memBytes32 concatenation failed."); AssertBytes.equalStorage(storageBytes32, testBytes, "storageBytes32 + memBytes32 concatenation failed."); storageBytes33.concatStorage(memBytes32); testBytes = hex"f00d0000000000000000000000000000000000000000000000000000000000feedf00d00000000000000000000000000000000000000000000000000000000feed"; + assertEq(storageBytes33, testBytes, "storageBytes33 + memBytes32 concatenation failed."); AssertBytes.equalStorage(storageBytes33, testBytes, "storageBytes33 + memBytes32 concatenation failed."); storageBytes63.concatStorage(memBytes32); testBytes = hex"f00d0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000feedf00d00000000000000000000000000000000000000000000000000000000feed"; + assertEq(storageBytes63, testBytes, "storageBytes63 + memBytes32 concatenation failed."); AssertBytes.equalStorage(storageBytes63, testBytes, "storageBytes63 + memBytes32 concatenation failed."); storageBytes64.concatStorage(memBytes32); testBytes = hex"f00d000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000feedf00d00000000000000000000000000000000000000000000000000000000feed"; + assertEq(storageBytes64, testBytes, "storageBytes64 + memBytes32 concatenation failed."); AssertBytes.equalStorage(storageBytes64, testBytes, "storageBytes64 + memBytes32 concatenation failed."); storageBytes65.concatStorage(memBytes32); testBytes = hex"f00d00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000feedf00d00000000000000000000000000000000000000000000000000000000feed"; + assertEq(storageBytes65, testBytes, "storageBytes65 + memBytes32 concatenation failed."); AssertBytes.equalStorage(storageBytes65, testBytes, "storageBytes65 + memBytes32 concatenation failed."); storageBytes70.concatStorage(memBytes32); testBytes = hex"f00d000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000feedf00d00000000000000000000000000000000000000000000000000000000feed"; + assertEq(storageBytes70, testBytes, "storageBytes70 + memBytes32 concatenation failed."); AssertBytes.equalStorage(storageBytes70, testBytes, "storageBytes70 + memBytes32 concatenation failed."); resetStorage(); @@ -448,39 +511,247 @@ contract TestBytesLib1 { storageBytes4.concatStorage(memBytes33); testBytes = hex"f00dfeedf00d0000000000000000000000000000000000000000000000000000000000feed"; + assertEq(storageBytes4, testBytes, "storageBytes4 + memBytes33 concatenation failed."); AssertBytes.equalStorage(storageBytes4, testBytes, "storageBytes4 + memBytes33 concatenation failed."); storageBytes31.concatStorage(memBytes33); testBytes = hex"f00d000000000000000000000000000000000000000000000000000000feedf00d0000000000000000000000000000000000000000000000000000000000feed"; + assertEq(storageBytes31, testBytes, "storageBytes31 + memBytes33 concatenation failed."); AssertBytes.equalStorage(storageBytes31, testBytes, "storageBytes31 + memBytes33 concatenation failed."); storageBytes32.concatStorage(memBytes33); testBytes = hex"f00d00000000000000000000000000000000000000000000000000000000feedf00d0000000000000000000000000000000000000000000000000000000000feed"; + assertEq(storageBytes32, testBytes, "storageBytes32 + memBytes33 concatenation failed."); AssertBytes.equalStorage(storageBytes32, testBytes, "storageBytes32 + memBytes33 concatenation failed."); storageBytes33.concatStorage(memBytes33); testBytes = hex"f00d0000000000000000000000000000000000000000000000000000000000feedf00d0000000000000000000000000000000000000000000000000000000000feed"; + assertEq(storageBytes33, testBytes, "storageBytes33 + memBytes33 concatenation failed."); AssertBytes.equalStorage(storageBytes33, testBytes, "storageBytes33 + memBytes33 concatenation failed."); storageBytes63.concatStorage(memBytes33); testBytes = hex"f00d0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000feedf00d0000000000000000000000000000000000000000000000000000000000feed"; + assertEq(storageBytes63, testBytes, "storageBytes63 + memBytes33 concatenation failed."); AssertBytes.equalStorage(storageBytes63, testBytes, "storageBytes63 + memBytes33 concatenation failed."); storageBytes64.concatStorage(memBytes33); testBytes = hex"f00d000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000feedf00d0000000000000000000000000000000000000000000000000000000000feed"; + assertEq(storageBytes64, testBytes, "storageBytes64 + memBytes33 concatenation failed."); AssertBytes.equalStorage(storageBytes64, testBytes, "storageBytes64 + memBytes33 concatenation failed."); storageBytes65.concatStorage(memBytes33); testBytes = hex"f00d00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000feedf00d0000000000000000000000000000000000000000000000000000000000feed"; + assertEq(storageBytes65, testBytes, "storageBytes65 + memBytes33 concatenation failed."); AssertBytes.equalStorage(storageBytes65, testBytes, "storageBytes65 + memBytes33 concatenation failed."); storageBytes70.concatStorage(memBytes33); testBytes = hex"f00d000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000feedf00d0000000000000000000000000000000000000000000000000000000000feed"; + assertEq(storageBytes70, testBytes, "storageBytes70 + memBytes33 concatenation failed."); AssertBytes.equalStorage(storageBytes70, testBytes, "storageBytes70 + memBytes33 concatenation failed."); resetStorage(); } + /** + * Equality Non-aligned Tests + */ + + function testEqualNonAligned4Bytes() public { + bytes memory memBytes1; // hex"f00dfeed" + bytes memory memBytes2; // hex"f00dfeed" + + // We need to make sure that the bytes are not aligned to a 32 byte boundary + // so we need to use assembly to allocate the bytes in contiguous memory + // Solidity will not let us do this normally, this equality method exists + // to test the edge case of non-aligned bytes created in assembly + assembly { + // Fetch free memory pointer + let freePointer := mload(0x40) + + // We first store the length of the byte array (4 bytes) + // And then we write a byte at a time + memBytes1 := freePointer + mstore(freePointer, 0x04) + freePointer := add(freePointer, 0x20) + mstore8(freePointer, 0xf0) + freePointer := add(freePointer, 0x1) + mstore8(freePointer, 0x0d) + freePointer := add(freePointer, 0x1) + mstore8(freePointer, 0xfe) + freePointer := add(freePointer, 0x1) + mstore8(freePointer, 0xed) + freePointer := add(freePointer, 0x1) + + // We do the same for memBytes2 in contiguous memory + memBytes2 := freePointer + mstore(freePointer, 0x04) + freePointer := add(freePointer, 0x20) + mstore8(freePointer, 0xf0) + freePointer := add(freePointer, 0x1) + mstore8(freePointer, 0x0d) + freePointer := add(freePointer, 0x1) + mstore8(freePointer, 0xfe) + freePointer := add(freePointer, 0x1) + mstore8(freePointer, 0xed) + freePointer := add(freePointer, 0x1) + + // We add some garbage bytes in contiguous memory + mstore8(freePointer, 0xde) + freePointer := add(freePointer, 0x1) + mstore8(freePointer, 0xad) + freePointer := add(freePointer, 0x1) + + // now, just for completeness sake we'll update the free-memory pointer accordingly + mstore(0x40, freePointer) + } + + AssertBytes.equal_nonAligned(memBytes1, memBytes2, "The equality check for the non-aligned equality 4-bytes-long test failed."); + // The equality check for aligned byte arrays should fail for non-aligned bytes + AssertBytes.notEqual(memBytes1, memBytes2, "The equality check for the non-aligned equality 4-bytes-long test failed."); + } + + function testEqualNonAligned4BytesFail() public { + bytes memory memBytes1; // hex"f00dfeed" + bytes memory memBytes2; // hex"feedf00d" + + // We need to make sure that the bytes are not aligned to a 32 byte boundary + // so we need to use assembly to allocate the bytes in contiguous memory + // Solidity will not let us do this normally, this equality method exists + // to test the edge case of non-aligned bytes created in assembly + assembly { + // Fetch free memory pointer + let freePointer := mload(0x40) + + // We first store the length of the byte array (4 bytes) + // And then we write a byte at a time + memBytes1 := freePointer + mstore(freePointer, 0x04) + freePointer := add(freePointer, 0x20) + mstore8(freePointer, 0xf0) + freePointer := add(freePointer, 0x1) + mstore8(freePointer, 0x0d) + freePointer := add(freePointer, 0x1) + mstore8(freePointer, 0xfe) + freePointer := add(freePointer, 0x1) + mstore8(freePointer, 0xed) + freePointer := add(freePointer, 0x1) + + // We do the same for memBytes2 in contiguous memory + memBytes2 := freePointer + mstore(freePointer, 0x04) + freePointer := add(freePointer, 0x20) + mstore8(freePointer, 0xfe) + freePointer := add(freePointer, 0x1) + mstore8(freePointer, 0xed) + freePointer := add(freePointer, 0x1) + mstore8(freePointer, 0xf0) + freePointer := add(freePointer, 0x1) + mstore8(freePointer, 0x0d) + freePointer := add(freePointer, 0x1) + + // We add some garbage bytes in contiguous memory + mstore8(freePointer, 0xde) + freePointer := add(freePointer, 0x1) + mstore8(freePointer, 0xad) + freePointer := add(freePointer, 0x1) + + // now, just for completeness sake we'll update the free-memory pointer accordingly + mstore(0x40, freePointer) + } + + AssertBytes.notEqual_nonAligned(memBytes1, memBytes2, "The non equality check for the non-aligned equality 4-bytes-long test failed."); + } + + function testEqualNonAligned33Bytes() public { + bytes memory memBytes1; // hex"f00d00000000000000000000000000000000000000000000000000000000feedcc"; + bytes memory memBytes2; // hex"f00d00000000000000000000000000000000000000000000000000000000feedcc"; + + // We need to make sure that the bytes are not aligned to a 32 byte boundary + // so we need to use assembly to allocate the bytes in contiguous memory + // Solidity will not let us do this normally, this equality method exists + // to test the edge case of non-aligned bytes created in assembly + assembly { + // Fetch free memory pointer + let freePointer := mload(0x40) + + // We first store the length of the byte array (33 bytes) + // And then we write a word and then a byte + memBytes1 := freePointer + mstore(freePointer, 0x21) + freePointer := add(freePointer, 0x20) + mstore(freePointer, 0xf00d00000000000000000000000000000000000000000000000000000000feed) + freePointer := add(freePointer, 0x20) + mstore8(freePointer, 0xcc) + freePointer := add(freePointer, 0x1) + + // We do the same for memBytes2 in contiguous memory + memBytes2 := freePointer + mstore(freePointer, 0x21) + freePointer := add(freePointer, 0x20) + mstore(freePointer, 0xf00d00000000000000000000000000000000000000000000000000000000feed) + freePointer := add(freePointer, 0x20) + mstore8(freePointer, 0xcc) + freePointer := add(freePointer, 0x1) + + // We add some garbage bytes in contiguous memory + mstore8(freePointer, 0xde) + freePointer := add(freePointer, 0x1) + mstore8(freePointer, 0xad) + freePointer := add(freePointer, 0x1) + + // now, just for completeness sake we'll update the free-memory pointer accordingly + mstore(0x40, freePointer) + } + + AssertBytes.equal_nonAligned(memBytes1, memBytes2, "The equality check for the non-aligned equality 33-bytes-long test failed."); + // The equality check for aligned byte arrays should fail for non-aligned bytes + AssertBytes.notEqual(memBytes1, memBytes2, "The equality check for the non-aligned equality 4-bytes-long test failed."); + } + + function testEqualNonAligned33BytesFail() public { + bytes memory memBytes1; // hex"f00d00000000000000000000000000000000000000000000000000000000feedcc"; + bytes memory memBytes2; // hex"f00d00000000000000000000000000000000000000000000000000000000feedee"; + + // We need to make sure that the bytes are not aligned to a 32 byte boundary + // so we need to use assembly to allocate the bytes in contiguous memory + // Solidity will not let us do this normally, this equality method exists + // to test the edge case of non-aligned bytes created in assembly + assembly { + // Fetch free memory pointer + let freePointer := mload(0x40) + + // We first store the length of the byte array (33 bytes) + // And then we write a word and then a byte + memBytes1 := freePointer + mstore(freePointer, 0x21) + freePointer := add(freePointer, 0x20) + mstore(freePointer, 0xf00d00000000000000000000000000000000000000000000000000000000feed) + freePointer := add(freePointer, 0x20) + mstore8(freePointer, 0xcc) + freePointer := add(freePointer, 0x1) + + // We do the same for memBytes2 in contiguous memory + memBytes2 := freePointer + mstore(freePointer, 0x21) + freePointer := add(freePointer, 0x20) + mstore(freePointer, 0xf00d00000000000000000000000000000000000000000000000000000000feed) + freePointer := add(freePointer, 0x20) + mstore8(freePointer, 0xee) + freePointer := add(freePointer, 0x1) + + // We add some garbage bytes in contiguous memory + mstore8(freePointer, 0xde) + freePointer := add(freePointer, 0x1) + mstore8(freePointer, 0xad) + freePointer := add(freePointer, 0x1) + + // now, just for completeness sake we'll update the free-memory pointer accordingly + mstore(0x40, freePointer) + } + + AssertBytes.notEqual_nonAligned(memBytes1, memBytes2, "The non equality check for the non-aligned equality 33-bytes-long test failed."); + } + /** * Edge Cases */ @@ -495,6 +766,7 @@ contract TestBytesLib1 { resultBytes = preZeroLength.concat(postZeroLength); testBytes = hex""; + assertEq(resultBytes, testBytes, "Zero Length concatenation failed."); AssertBytes.equal(resultBytes, testBytes, "Zero Length concatenation failed."); } diff --git a/packages/foundry/lib/solidity-bytes-utils/test/TestBytesLib2.sol b/packages/foundry/lib/solidity-bytes-utils/test/TestBytesLib2.sol index 65b1cad..cb54ca3 100755 --- a/packages/foundry/lib/solidity-bytes-utils/test/TestBytesLib2.sol +++ b/packages/foundry/lib/solidity-bytes-utils/test/TestBytesLib2.sol @@ -1,12 +1,12 @@ // SPDX-License-Identifier: Unlicense pragma solidity >=0.8.0 <0.9.0; -import "truffle/Assert.sol"; +import "forge-std/Test.sol"; import "../contracts/AssertBytes.sol"; import "../contracts/BytesLib.sol"; -contract TestBytesLib2 { +contract TestBytesLib2 is Test { using BytesLib for bytes; bytes storageCheckBytes = hex"aabbccddeeff"; @@ -31,20 +31,24 @@ contract TestBytesLib2 { bytes memory checkBytesWrongLength = hex"aa0000"; bytes memory checkBytesWrongContent = hex"aabbccddee00"; - // This next line is needed in order for Truffle to activate the Solidity unit testing feature - // otherwise it doesn't interpret any events fired as results of tests - Assert.equal(uint256(1), uint256(1), "This should not fail! :D"); - + assertEq(checkBytes, checkBytesRight, "Sanity check should be checking equal bytes arrays out."); + assertTrue(keccak256(checkBytes) != keccak256(checkBytesWrongLength), "Sanity check should be checking different length bytes arrays out."); + assertTrue(keccak256(checkBytes) != keccak256(checkBytesWrongContent), "Sanity check should be checking different content bytes arrays out."); AssertBytes.equal(checkBytes, checkBytesRight, "Sanity check should be checking equal bytes arrays out."); AssertBytes.notEqual(checkBytes, checkBytesWrongLength, "Sanity check should be checking different length bytes arrays out."); AssertBytes.notEqual(checkBytes, checkBytesWrongContent, "Sanity check should be checking different content bytes arrays out."); - AssertBytes.equalStorage(storageCheckBytes, checkBytesRight, "Sanity check should be checking equal bytes arrays out. (Storage)"); + assertEq(storageCheckBytes, checkBytesRight, "Sanity check should be checking equal bytes arrays out. (Storage)"); + assertTrue(keccak256(storageCheckBytes) != keccak256(checkBytesWrongLength), "Sanity check should be checking different length bytes arrays out. (Storage)"); + assertTrue(keccak256(storageCheckBytes) != keccak256(checkBytesWrongContent), "Sanity check should be checking different content bytes arrays out. (Storage)"); +AssertBytes.equalStorage(storageCheckBytes, checkBytesRight, "Sanity check should be checking equal bytes arrays out. (Storage)"); AssertBytes.notEqualStorage(storageCheckBytes, checkBytesWrongLength, "Sanity check should be checking different length bytes arrays out. (Storage)"); AssertBytes.notEqualStorage(storageCheckBytes, checkBytesWrongContent, "Sanity check should be checking different content bytes arrays out. (Storage)"); // Zero-length checks - AssertBytes.equal(checkBytesZeroLength, checkBytesZeroLengthRight, "Sanity check should be checking equal zero-length bytes arrays out."); + assertEq(checkBytesZeroLength, checkBytesZeroLengthRight, "Sanity check should be checking equal zero-length bytes arrays out."); + assertTrue(keccak256(checkBytesZeroLength) != keccak256(checkBytes), "Sanity check should be checking different length bytes arrays out."); +AssertBytes.equal(checkBytesZeroLength, checkBytesZeroLengthRight, "Sanity check should be checking equal zero-length bytes arrays out."); AssertBytes.notEqual(checkBytesZeroLength, checkBytes, "Sanity check should be checking different length bytes arrays out."); AssertBytes.equalStorage(storageCheckBytesZeroLength, checkBytesZeroLengthRight, "Sanity check should be checking equal zero-length bytes arrays out. (Storage)"); @@ -63,30 +67,37 @@ contract TestBytesLib2 { testBytes = hex"f00d"; resultBytes = memBytes.slice(0,2); + assertEq(resultBytes, testBytes); AssertBytes.equal(resultBytes, testBytes, "Normal slicing array failed."); testBytes = hex""; resultBytes = memBytes.slice(1,0); + assertEq(resultBytes, testBytes); AssertBytes.equal(resultBytes, testBytes, "Slicing with zero-length failed."); testBytes = hex""; resultBytes = memBytes.slice(0,0); + assertEq(resultBytes, testBytes); AssertBytes.equal(resultBytes, testBytes, "Slicing with zero-length on index 0 failed."); testBytes = hex"feed"; resultBytes = memBytes.slice(31,2); + assertEq(resultBytes, testBytes); AssertBytes.equal(resultBytes, testBytes, "Slicing across the 32-byte slot boundary failed."); testBytes = hex"f00d0000000000000000000000000000000000000000000000000000000000feed"; resultBytes = memBytes.slice(0,33); + assertEq(resultBytes, testBytes); AssertBytes.equal(resultBytes, testBytes, "Full length slice failed."); testBytes = hex"f00d0000000000000000000000000000000000000000000000000000000000fe"; resultBytes = memBytes.slice(0,32); + assertEq(resultBytes, testBytes); AssertBytes.equal(resultBytes, testBytes, "Multiple of 32 bytes slice failed."); testBytes = hex"f00d0000000000000000000000000000000000000000000000000000000000feedf00d00000000000000000000000000000000000000000000000000000000fe"; resultBytes = memBytes.slice(0,64); + assertEq(resultBytes, testBytes); AssertBytes.equal(resultBytes, testBytes, "Multiple (*2) of 32 bytes slice failed."); // With v0.5.x we can now entirely replace the ThrowProxy patterns that was creating issues with the js-vm @@ -98,31 +109,31 @@ contract TestBytesLib2 { // msg.data equal to the throwing function selector that we want to be sure throws and using only the boolean // value associated with the message call's success (r, ) = address(this).call(abi.encodePacked(this.sliceIndexThrow.selector)); - Assert.isFalse(r, "Slicing with wrong index should throw"); + assertFalse(r); (r, ) = address(this).call(abi.encodePacked(this.sliceOverflowLength0Throw.selector)); - Assert.isFalse(r, "Slicing with overflow in length and _start 0 should throw"); + assertFalse(r); (r, ) = address(this).call(abi.encodePacked(this.sliceOverflowLength1Throw.selector)); - Assert.isFalse(r, "Slicing with overflow in length and _start 1 should throw"); + assertFalse(r); (r, ) = address(this).call(abi.encodePacked(this.sliceOverflowLength33Throw.selector)); - Assert.isFalse(r, "Slicing with overflow in length and _start 33 should throw"); + assertFalse(r); (r, ) = address(this).call(abi.encodePacked(this.sliceOverflowLengthMinus32Throw.selector)); - Assert.isFalse(r, "Slicing with overflow in length minus 32 and _start 1 should throw"); + assertFalse(r); (r, ) = address(this).call(abi.encodePacked(this.sliceOverflowStart0Throw.selector)); - Assert.isFalse(r, "Slicing with overflow in _start and length 0 should throw"); + assertFalse(r); (r, ) = address(this).call(abi.encodePacked(this.sliceOverflowStart1Throw.selector)); - Assert.isFalse(r, "Slicing with overflow in _start and length 1 should throw"); + assertFalse(r); (r, ) = address(this).call(abi.encodePacked(this.sliceOverflowStart33Throw.selector)); - Assert.isFalse(r, "Slicing with overflow in _start and length 33 should throw"); + assertFalse(r); (r, ) = address(this).call(abi.encodePacked(this.sliceLengthThrow.selector)); - Assert.isFalse(r, "Slicing with wrong length should throw"); + assertFalse(r); } function sliceIndexThrow() public pure { @@ -241,11 +252,13 @@ contract TestBytesLib2 { // Try a zero-length slice from a non-zero-length array resultBytes = testBytes4.slice(0,0); + assertEq(hex"", resultBytes); AssertBytes.equal(hex"", resultBytes, "The result of a zero-length slice is not a zero-length array."); // Try a zero-length slice from a zero-length array resultBytes = emptyBytes.slice(0,0); + assertEq(hex"", resultBytes); AssertBytes.equal(hex"", resultBytes, "The result of a zero-length slice is not a zero-length array."); } @@ -260,11 +273,11 @@ contract TestBytesLib2 { uint8 resultUint8; resultUint8 = memBytes.toUint8(2); - Assert.equal(uint256(resultUint8), uint256(testUint8), "Typecast to 8-bit-wide unsigned integer failed."); + assertEq(uint256(resultUint8), uint256(testUint8)); // Testing for the throw conditions below (bool r, ) = address(this).call(abi.encodePacked(this.toUint8Throw.selector)); - Assert.isFalse(r, "Typecasting with wrong index should throw"); + assertFalse(r); } function toUint8Throw() public pure { @@ -283,11 +296,11 @@ contract TestBytesLib2 { uint16 resultUint16; resultUint16 = memBytes.toUint16(2); - Assert.equal(uint256(resultUint16), uint256(testUint16), "Typecast to 16-bit-wide unsigned integer failed."); + assertEq(uint256(resultUint16), uint256(testUint16)); // Testing for the throw conditions below (bool r, ) = address(this).call(abi.encodePacked(this.toUint16Throw.selector)); - Assert.isFalse(r, "Typecasting with wrong index should throw"); + assertFalse(r); } function toUint16Throw() public pure { @@ -306,11 +319,11 @@ contract TestBytesLib2 { uint32 resultUint32; resultUint32 = memBytes.toUint32(2); - Assert.equal(uint256(resultUint32), uint256(testUint32), "Typecast to 32-bit-wide unsigned integer failed."); + assertEq(uint256(resultUint32), uint256(testUint32)); // Testing for the throw conditions below (bool r, ) = address(this).call(abi.encodePacked(this.toUint32Throw.selector)); - Assert.isFalse(r, "Typecasting with wrong index should throw"); + assertFalse(r); } function toUint32Throw() public pure { @@ -329,11 +342,11 @@ contract TestBytesLib2 { uint64 resultUint64; resultUint64 = memBytes.toUint64(2); - Assert.equal(uint256(resultUint64), uint256(testUint64), "Typecast to 64-bit-wide unsigned integer failed."); + assertEq(uint256(resultUint64), uint256(testUint64)); // Testing for the throw conditions below (bool r, ) = address(this).call(abi.encodePacked(this.toUint64Throw.selector)); - Assert.isFalse(r, "Typecasting with wrong index should throw"); + assertFalse(r); } function toUint64Throw() public pure { @@ -351,11 +364,11 @@ contract TestBytesLib2 { uint96 resultUint96; resultUint96 = memBytes.toUint96(2); - Assert.equal(uint256(resultUint96), uint256(testUint96), "Typecast to 96-bit-wide unsigned integer failed."); + assertEq(uint256(resultUint96), uint256(testUint96)); // Testing for the throw conditions below (bool r, ) = address(this).call(abi.encodePacked(this.toUint64Throw.selector)); - Assert.isFalse(r, "Typecasting with wrong index should throw"); + assertFalse(r); } function toUint96Throw() public pure { @@ -373,11 +386,11 @@ contract TestBytesLib2 { uint128 resultUint128; resultUint128 = memBytes.toUint128(2); - Assert.equal(uint256(resultUint128), uint256(testUint128), "Typecast to 128-bit-wide unsigned integer failed."); + assertEq(uint256(resultUint128), uint256(testUint128)); // Testing for the throw conditions below (bool r, ) = address(this).call(abi.encodePacked(this.toUint128Throw.selector)); - Assert.isFalse(r, "Typecasting with wrong index should throw"); + assertFalse(r); } function toUint128Throw() public pure { @@ -395,11 +408,11 @@ contract TestBytesLib2 { uint256 resultUint; resultUint = memBytes.toUint256(2); - Assert.equal(resultUint, testUint, "Typecast to 256-bit-wide unsigned integer failed."); + assertEq(resultUint, testUint); // Testing for the throw conditions below (bool r, ) = address(this).call(abi.encodePacked(this.toUintThrow.selector)); - Assert.isFalse(r, "Typecasting with wrong index should throw"); + assertFalse(r); } function toUintThrow() public pure { @@ -418,11 +431,11 @@ contract TestBytesLib2 { address resultAddress; resultAddress = memBytes.toAddress(4); - Assert.equal(resultAddress, testAddress, "Typecast to address failed."); + assertEq(resultAddress, testAddress); // Testing for the throw conditions below (bool r, ) = address(this).call(abi.encodePacked(this.toAddressThrow.selector)); - Assert.isFalse(r, "Typecasting with wrong index should throw"); + assertFalse(r); } function toAddressThrow() public pure { diff --git a/packages/foundry/lib/solidity-bytes-utils/truffle.js b/packages/foundry/lib/solidity-bytes-utils/truffle.js deleted file mode 100755 index 529d99f..0000000 --- a/packages/foundry/lib/solidity-bytes-utils/truffle.js +++ /dev/null @@ -1,49 +0,0 @@ -const HDWalletProvider = require('@truffle/hdwallet-provider') -const fs = require('fs') - -// First read in the secrets.json to get our mnemonic -let secrets -let mnemonic -if (fs.existsSync('secrets.json')) { - secrets = JSON.parse(fs.readFileSync('secrets.json', 'utf8')) - mnemonic = secrets.mnemonic -} else { - console.log('No secrets.json found. If you are trying to publish EPM ' + - 'this will fail. Otherwise, you can ignore this message!') - // Example mnemonic below. PLEASE DON'T USE FOR ANYTHING ELSE! - mnemonic = 'wrist find shock leisure stand barely field sunset script evidence key idea diesel journey gravity' -} - -module.exports = { - networks: { - live: { - provider: () => new HDWalletProvider(mnemonic, 'https://mainnet.infura.io/v3/130dfea36eb541b79694f0b6c003b2b2'), - network_id: 1 // Ethereum public network - // optional config values - // host - defaults to "localhost" - // port - defaults to 8545 - // gas - // gasPrice - // from - default address to use for any transaction Truffle makes during migrations - }, - ropsten: { - provider: () => new HDWalletProvider(mnemonic, 'https://ropsten.infura.io/v3/130dfea36eb541b79694f0b6c003b2b2'), - network_id: '3' - }, - development: { - host: "localhost", - port: 8545, - network_id: "*" // Match any network id - }, - // ganache: { - // host: "localhost", - // port: 7545, - // network_id: "*" // Match any network id - // }, - }, - compilers: { - solc: { - version: "0.8.3", // A version or constraint - Ex. "^0.5.0" - } - } -}; diff --git a/packages/foundry/package.json b/packages/foundry/package.json index f9ea2c2..9471ed9 100644 --- a/packages/foundry/package.json +++ b/packages/foundry/package.json @@ -25,4 +25,4 @@ "@types/prettier": "2", "@types/qrcode": "1" } -} \ No newline at end of file +} diff --git a/packages/foundry/script/exampleSetupsForDebugPage.txt b/packages/foundry/script/exampleSetupsForDebugPage.txt deleted file mode 100644 index 5c59b7e..0000000 --- a/packages/foundry/script/exampleSetupsForDebugPage.txt +++ /dev/null @@ -1 +0,0 @@ -mint() = {"to": "0x62286D694F89a1B12c0214bfcD567bb6c2951491", "operations": [{ "id": 0, "amount":10 }] }; \ No newline at end of file diff --git a/packages/foundry/script/generateTsAbis.js b/packages/foundry/script/generateTsAbis.js index a6869bb..7c5a42e 100644 --- a/packages/foundry/script/generateTsAbis.js +++ b/packages/foundry/script/generateTsAbis.js @@ -21,7 +21,7 @@ function getFiles(path) { return fs.statSync(path + "/" + file).isFile(); }); } -function getAbiOfContract(contractName) { +function getArtifactOfContract(contractName) { const current_path_to_artifacts = path.join( __dirname, "..", @@ -31,7 +31,36 @@ function getAbiOfContract(contractName) { fs.readFileSync(`${current_path_to_artifacts}/${contractName}.json`) ); - return artifactJson.abi; + return artifactJson; +} + +function getInheritedFromContracts(artifact) { + let inheritedFromContracts = []; + for (const astNode of artifact.ast.nodes) { + if (astNode.nodeType == "ContractDefinition") { + if (astNode.baseContracts.length > 0) { + inheritedFromContracts = astNode.baseContracts.map(({baseName}) => baseName.name); + } + } + } + return inheritedFromContracts; +} + +function getInheritedFunctions(mainArtifact) { + const inheritedFromContracts = getInheritedFromContracts(mainArtifact); + const inheritedFunctions = {}; + for (const inheritanceContractName of inheritedFromContracts) { + const { + abi, + ast: { absolutePath }, + } = getArtifactOfContract(inheritanceContractName); + for (const abiEntry of abi) { + if (abiEntry.type == "function") { + inheritedFunctions[abiEntry.name] = absolutePath; + } + } + } + return inheritedFunctions; } function main() { @@ -67,12 +96,16 @@ function main() { (transaction) => transaction.transactionType == "CREATE" ); transactionsCreate.forEach((transaction) => { + const artifact = getArtifactOfContract(transaction.contractName); allGeneratedContracts[chain][ deployments[chain][transaction.contractAddress] || transaction.contractName ] = { address: transaction.contractAddress, - abi: getAbiOfContract(transaction.contractName), + abi: artifact.abi, + inheritedFunctions: getInheritedFunctions( + artifact, + ), }; }); }); diff --git a/packages/nextjs/components/blockexplorer/AddressCodeTab.tsx b/packages/nextjs/app/blockexplorer/_components/AddressCodeTab.tsx similarity index 100% rename from packages/nextjs/components/blockexplorer/AddressCodeTab.tsx rename to packages/nextjs/app/blockexplorer/_components/AddressCodeTab.tsx diff --git a/packages/nextjs/app/blockexplorer/_components/AddressComponent.tsx b/packages/nextjs/app/blockexplorer/_components/AddressComponent.tsx new file mode 100644 index 0000000..c0c14d6 --- /dev/null +++ b/packages/nextjs/app/blockexplorer/_components/AddressComponent.tsx @@ -0,0 +1,35 @@ +import { BackButton } from "./BackButton"; +import { ContractTabs } from "./ContractTabs"; +import { Address, Balance } from "~~/components/scaffold-eth"; + +export const AddressComponent = ({ + address, + contractData, +}: { + address: string; + contractData: { bytecode: string; assembly: string } | null; +}) => { + return ( + <div className="m-10 mb-20"> + <div className="flex justify-start mb-5"> + <BackButton /> + </div> + <div className="col-span-5 grid grid-cols-1 lg:grid-cols-2 gap-8 lg:gap-10"> + <div className="col-span-1 flex flex-col"> + <div className="bg-base-100 border-base-300 border shadow-md shadow-secondary rounded-3xl px-6 lg:px-8 mb-6 space-y-1 py-4 overflow-x-auto"> + <div className="flex"> + <div className="flex flex-col gap-1"> + <Address address={address} format="long" /> + <div className="flex gap-1 items-center"> + <span className="font-bold text-sm">Balance:</span> + <Balance address={address} className="text" /> + </div> + </div> + </div> + </div> + </div> + </div> + <ContractTabs address={address} contractData={contractData} /> + </div> + ); +}; diff --git a/packages/nextjs/components/blockexplorer/AddressLogsTab.tsx b/packages/nextjs/app/blockexplorer/_components/AddressLogsTab.tsx similarity index 100% rename from packages/nextjs/components/blockexplorer/AddressLogsTab.tsx rename to packages/nextjs/app/blockexplorer/_components/AddressLogsTab.tsx diff --git a/packages/nextjs/components/blockexplorer/AddressStorageTab.tsx b/packages/nextjs/app/blockexplorer/_components/AddressStorageTab.tsx similarity index 90% rename from packages/nextjs/components/blockexplorer/AddressStorageTab.tsx rename to packages/nextjs/app/blockexplorer/_components/AddressStorageTab.tsx index f9f4d4f..86c4f21 100644 --- a/packages/nextjs/components/blockexplorer/AddressStorageTab.tsx +++ b/packages/nextjs/app/blockexplorer/_components/AddressStorageTab.tsx @@ -1,5 +1,7 @@ +"use client"; + import { useEffect, useState } from "react"; -import { createPublicClient, http, toHex } from "viem"; +import { Address, createPublicClient, http, toHex } from "viem"; import { hardhat } from "viem/chains"; const publicClient = createPublicClient({ @@ -7,7 +9,7 @@ const publicClient = createPublicClient({ transport: http(), }); -export const AddressStorageTab = ({ address }: { address: string }) => { +export const AddressStorageTab = ({ address }: { address: Address }) => { const [storage, setStorage] = useState<string[]>([]); useEffect(() => { diff --git a/packages/nextjs/app/blockexplorer/_components/BackButton.tsx b/packages/nextjs/app/blockexplorer/_components/BackButton.tsx new file mode 100644 index 0000000..bdfde8b --- /dev/null +++ b/packages/nextjs/app/blockexplorer/_components/BackButton.tsx @@ -0,0 +1,12 @@ +"use client"; + +import { useRouter } from "next/navigation"; + +export const BackButton = () => { + const router = useRouter(); + return ( + <button className="btn btn-sm btn-primary" onClick={() => router.back()}> + Back + </button> + ); +}; diff --git a/packages/nextjs/app/blockexplorer/_components/ContractTabs.tsx b/packages/nextjs/app/blockexplorer/_components/ContractTabs.tsx new file mode 100644 index 0000000..bb020ef --- /dev/null +++ b/packages/nextjs/app/blockexplorer/_components/ContractTabs.tsx @@ -0,0 +1,92 @@ +"use client"; + +import { useEffect, useState } from "react"; +import { AddressCodeTab } from "./AddressCodeTab"; +import { AddressLogsTab } from "./AddressLogsTab"; +import { AddressStorageTab } from "./AddressStorageTab"; +import { PaginationButton } from "./PaginationButton"; +import { TransactionsTable } from "./TransactionsTable"; +import { createPublicClient, http } from "viem"; +import { hardhat } from "viem/chains"; +import { useFetchBlocks } from "~~/hooks/scaffold-eth"; + +type AddressCodeTabProps = { + bytecode: string; + assembly: string; +}; + +type PageProps = { + address: string; + contractData: AddressCodeTabProps | null; +}; + +const publicClient = createPublicClient({ + chain: hardhat, + transport: http(), +}); + +export const ContractTabs = ({ address, contractData }: PageProps) => { + const { blocks, transactionReceipts, currentPage, totalBlocks, setCurrentPage } = useFetchBlocks(); + const [activeTab, setActiveTab] = useState("transactions"); + const [isContract, setIsContract] = useState(false); + + useEffect(() => { + const checkIsContract = async () => { + const contractCode = await publicClient.getBytecode({ address: address }); + setIsContract(contractCode !== undefined && contractCode !== "0x"); + }; + + checkIsContract(); + }, [address]); + + const filteredBlocks = blocks.filter(block => + block.transactions.some(tx => { + if (typeof tx === "string") { + return false; + } + return tx.from.toLowerCase() === address.toLowerCase() || tx.to?.toLowerCase() === address.toLowerCase(); + }), + ); + + return ( + <> + {isContract && ( + <div className="tabs tabs-lifted w-min"> + <button + className={`tab ${activeTab === "transactions" ? "tab-active" : ""}`} + onClick={() => setActiveTab("transactions")} + > + Transactions + </button> + <button className={`tab ${activeTab === "code" ? "tab-active" : ""}`} onClick={() => setActiveTab("code")}> + Code + </button> + <button + className={`tab ${activeTab === "storage" ? "tab-active" : ""}`} + onClick={() => setActiveTab("storage")} + > + Storage + </button> + <button className={`tab ${activeTab === "logs" ? "tab-active" : ""}`} onClick={() => setActiveTab("logs")}> + Logs + </button> + </div> + )} + {activeTab === "transactions" && ( + <div className="pt-4"> + <TransactionsTable blocks={filteredBlocks} transactionReceipts={transactionReceipts} /> + <PaginationButton + currentPage={currentPage} + totalItems={Number(totalBlocks)} + setCurrentPage={setCurrentPage} + /> + </div> + )} + {activeTab === "code" && contractData && ( + <AddressCodeTab bytecode={contractData.bytecode} assembly={contractData.assembly} /> + )} + {activeTab === "storage" && <AddressStorageTab address={address} />} + {activeTab === "logs" && <AddressLogsTab address={address} />} + </> + ); +}; diff --git a/packages/nextjs/components/blockexplorer/PaginationButton.tsx b/packages/nextjs/app/blockexplorer/_components/PaginationButton.tsx similarity index 97% rename from packages/nextjs/components/blockexplorer/PaginationButton.tsx rename to packages/nextjs/app/blockexplorer/_components/PaginationButton.tsx index 97e4cb9..77aefbc 100644 --- a/packages/nextjs/components/blockexplorer/PaginationButton.tsx +++ b/packages/nextjs/app/blockexplorer/_components/PaginationButton.tsx @@ -1,10 +1,10 @@ import { ArrowLeftIcon, ArrowRightIcon } from "@heroicons/react/24/outline"; -interface PaginationButtonProps { +type PaginationButtonProps = { currentPage: number; totalItems: number; setCurrentPage: (page: number) => void; -} +}; const ITEMS_PER_PAGE = 20; diff --git a/packages/nextjs/components/blockexplorer/SearchBar.tsx b/packages/nextjs/app/blockexplorer/_components/SearchBar.tsx similarity index 95% rename from packages/nextjs/components/blockexplorer/SearchBar.tsx rename to packages/nextjs/app/blockexplorer/_components/SearchBar.tsx index abbf691..82b8839 100644 --- a/packages/nextjs/components/blockexplorer/SearchBar.tsx +++ b/packages/nextjs/app/blockexplorer/_components/SearchBar.tsx @@ -1,5 +1,7 @@ +"use client"; + import { useState } from "react"; -import { useRouter } from "next/router"; +import { useRouter } from "next/navigation"; import { isAddress, isHex } from "viem"; import { hardhat } from "viem/chains"; import { usePublicClient } from "wagmi"; diff --git a/packages/nextjs/components/blockexplorer/TransactionHash.tsx b/packages/nextjs/app/blockexplorer/_components/TransactionHash.tsx similarity index 98% rename from packages/nextjs/components/blockexplorer/TransactionHash.tsx rename to packages/nextjs/app/blockexplorer/_components/TransactionHash.tsx index 5d36151..d4fd929 100644 --- a/packages/nextjs/components/blockexplorer/TransactionHash.tsx +++ b/packages/nextjs/app/blockexplorer/_components/TransactionHash.tsx @@ -1,3 +1,5 @@ +"use client"; + import { useState } from "react"; import Link from "next/link"; import { CopyToClipboard } from "react-copy-to-clipboard"; diff --git a/packages/nextjs/components/blockexplorer/TransactionsTable.tsx b/packages/nextjs/app/blockexplorer/_components/TransactionsTable.tsx similarity index 92% rename from packages/nextjs/components/blockexplorer/TransactionsTable.tsx rename to packages/nextjs/app/blockexplorer/_components/TransactionsTable.tsx index 5f9d461..b91892c 100644 --- a/packages/nextjs/components/blockexplorer/TransactionsTable.tsx +++ b/packages/nextjs/app/blockexplorer/_components/TransactionsTable.tsx @@ -1,11 +1,12 @@ +import { TransactionHash } from "./TransactionHash"; import { formatEther } from "viem"; -import { TransactionHash } from "~~/components/blockexplorer/TransactionHash"; import { Address } from "~~/components/scaffold-eth"; -import { TransactionWithFunction, getTargetNetwork } from "~~/utils/scaffold-eth"; +import { useTargetNetwork } from "~~/hooks/scaffold-eth/useTargetNetwork"; +import { TransactionWithFunction } from "~~/utils/scaffold-eth"; import { TransactionsTableProps } from "~~/utils/scaffold-eth/"; export const TransactionsTable = ({ blocks, transactionReceipts }: TransactionsTableProps) => { - const targetNetwork = getTargetNetwork(); + const { targetNetwork } = useTargetNetwork(); return ( <div className="flex justify-center px-4 md:px-0"> diff --git a/packages/nextjs/components/blockexplorer/index.tsx b/packages/nextjs/app/blockexplorer/_components/index.tsx similarity index 70% rename from packages/nextjs/components/blockexplorer/index.tsx rename to packages/nextjs/app/blockexplorer/_components/index.tsx index bc0a716..20d8eb2 100644 --- a/packages/nextjs/components/blockexplorer/index.tsx +++ b/packages/nextjs/app/blockexplorer/_components/index.tsx @@ -1,7 +1,7 @@ -export * from "./AddressCodeTab"; -export * from "./AddressLogsTab"; -export * from "./AddressStorageTab"; -export * from "./PaginationButton"; export * from "./SearchBar"; +export * from "./BackButton"; +export * from "./AddressCodeTab"; export * from "./TransactionHash"; +export * from "./ContractTabs"; +export * from "./PaginationButton"; export * from "./TransactionsTable"; diff --git a/packages/nextjs/app/blockexplorer/address/[address]/page.tsx b/packages/nextjs/app/blockexplorer/address/[address]/page.tsx new file mode 100644 index 0000000..2f8dc26 --- /dev/null +++ b/packages/nextjs/app/blockexplorer/address/[address]/page.tsx @@ -0,0 +1,85 @@ +import fs from "fs"; +import path from "path"; +import { foundry } from "viem/chains"; +import { AddressComponent } from "~~/app/blockexplorer/_components/AddressComponent"; +import deployedContracts from "~~/contracts/deployedContracts"; +import { GenericContractsDeclaration } from "~~/utils/scaffold-eth/contract"; + +type PageProps = { + params: { address: string }; +}; + +async function fetchByteCodeAndAssembly(buildInfoDirectory: string, contractPath: string) { + const buildInfoFiles = fs.readdirSync(buildInfoDirectory); + let bytecode = ""; + let assembly = ""; + + for (let i = 0; i < buildInfoFiles.length; i++) { + const filePath = path.join(buildInfoDirectory, buildInfoFiles[i]); + + const buildInfo = JSON.parse(fs.readFileSync(filePath, "utf8")); + + if (buildInfo.output.contracts[contractPath]) { + for (const contract in buildInfo.output.contracts[contractPath]) { + bytecode = buildInfo.output.contracts[contractPath][contract].evm.bytecode.object; + assembly = buildInfo.output.contracts[contractPath][contract].evm.bytecode.opcodes; + break; + } + } + + if (bytecode && assembly) { + break; + } + } + + return { bytecode, assembly }; +} + +const getContractData = async (address: string) => { + const contracts = deployedContracts as GenericContractsDeclaration | null; + const chainId = foundry.id; + let contractPath = ""; + + const buildInfoDirectory = path.join( + __dirname, + "..", + "..", + "..", + "..", + "..", + "..", + "..", + "foundry", + "out", + "build-info", + ); + + if (!fs.existsSync(buildInfoDirectory)) { + throw new Error(`Directory ${buildInfoDirectory} not found.`); + } + + const deployedContractsOnChain = contracts ? contracts[chainId] : {}; + for (const [contractName, contractInfo] of Object.entries(deployedContractsOnChain)) { + if (contractInfo.address.toLowerCase() === address) { + contractPath = `contracts/${contractName}.sol`; + break; + } + } + + if (!contractPath) { + // No contract found at this address + return null; + } + + const { bytecode, assembly } = await fetchByteCodeAndAssembly(buildInfoDirectory, contractPath); + + return { bytecode, assembly }; +}; + +const AddressPage = async ({ params }: PageProps) => { + const address = params?.address as string; + const contractData: { bytecode: string; assembly: string } | null = await getContractData(address); + return <AddressComponent address={address} contractData={contractData} />; +}; + +export default AddressPage; diff --git a/packages/nextjs/app/blockexplorer/layout.tsx b/packages/nextjs/app/blockexplorer/layout.tsx new file mode 100644 index 0000000..1abc7ec --- /dev/null +++ b/packages/nextjs/app/blockexplorer/layout.tsx @@ -0,0 +1,12 @@ +import { getMetadata } from "~~/utils/scaffold-eth/getMetadata"; + +export const metadata = getMetadata({ + title: "Block Explorer", + description: "Block Explorer created with ๐Ÿ— Scaffold-ETH 2", +}); + +const BlockExplorerLayout = ({ children }: { children: React.ReactNode }) => { + return <>{children}</>; +}; + +export default BlockExplorerLayout; diff --git a/packages/nextjs/pages/blockexplorer/index.tsx b/packages/nextjs/app/blockexplorer/page.tsx similarity index 71% rename from packages/nextjs/pages/blockexplorer/index.tsx rename to packages/nextjs/app/blockexplorer/page.tsx index cbd4c67..80f481c 100644 --- a/packages/nextjs/pages/blockexplorer/index.tsx +++ b/packages/nextjs/app/blockexplorer/page.tsx @@ -1,17 +1,19 @@ +"use client"; + import { useEffect } from "react"; +import { PaginationButton, SearchBar, TransactionsTable } from "./_components"; import type { NextPage } from "next"; import { hardhat } from "viem/chains"; -import { PaginationButton } from "~~/components/blockexplorer/PaginationButton"; -import { SearchBar } from "~~/components/blockexplorer/SearchBar"; -import { TransactionsTable } from "~~/components/blockexplorer/TransactionsTable"; import { useFetchBlocks } from "~~/hooks/scaffold-eth"; -import { getTargetNetwork, notification } from "~~/utils/scaffold-eth"; +import { useTargetNetwork } from "~~/hooks/scaffold-eth/useTargetNetwork"; +import { notification } from "~~/utils/scaffold-eth"; -const Blockexplorer: NextPage = () => { +const BlockExplorer: NextPage = () => { const { blocks, transactionReceipts, currentPage, totalBlocks, setCurrentPage, error } = useFetchBlocks(); + const { targetNetwork } = useTargetNetwork(); useEffect(() => { - if (getTargetNetwork().id === hardhat.id && error) { + if (targetNetwork.id === hardhat.id && error) { notification.error( <> <p className="font-bold mt-0 mb-1">Cannot connect to local provider</p> @@ -26,27 +28,27 @@ const Blockexplorer: NextPage = () => { ); } - if (getTargetNetwork().id !== hardhat.id) { + if (targetNetwork.id !== hardhat.id) { notification.error( <> <p className="font-bold mt-0 mb-1"> <code className="italic bg-base-300 text-base font-bold"> targeNetwork </code> is not localhost </p> <p className="m-0"> - - You are on <code className="italic bg-base-300 text-base font-bold">{getTargetNetwork().name}</code> .This + - You are on <code className="italic bg-base-300 text-base font-bold">{targetNetwork.name}</code> .This block explorer is only for <code className="italic bg-base-300 text-base font-bold">localhost</code>. </p> <p className="mt-1 break-normal"> - You can use{" "} - <a className="text-accent" href={getTargetNetwork().blockExplorers?.default.url}> - {getTargetNetwork().blockExplorers?.default.name} + <a className="text-accent" href={targetNetwork.blockExplorers?.default.url}> + {targetNetwork.blockExplorers?.default.name} </a>{" "} instead </p> </>, ); } - }, [error]); + }, [error, targetNetwork]); return ( <div className="container mx-auto my-10"> @@ -57,4 +59,4 @@ const Blockexplorer: NextPage = () => { ); }; -export default Blockexplorer; +export default BlockExplorer; diff --git a/packages/nextjs/pages/blockexplorer/transaction/[txHash].tsx b/packages/nextjs/app/blockexplorer/transaction/[txHash]/page.tsx similarity index 88% rename from packages/nextjs/pages/blockexplorer/transaction/[txHash].tsx rename to packages/nextjs/app/blockexplorer/transaction/[txHash]/page.tsx index 266a510..d9c45f5 100644 --- a/packages/nextjs/pages/blockexplorer/transaction/[txHash].tsx +++ b/packages/nextjs/app/blockexplorer/transaction/[txHash]/page.tsx @@ -1,23 +1,28 @@ +"use client"; + import { useEffect, useState } from "react"; -import { useRouter } from "next/router"; +import { useRouter } from "next/navigation"; import type { NextPage } from "next"; -import { Transaction, TransactionReceipt, formatEther, formatUnits } from "viem"; +import { Hash, Transaction, TransactionReceipt, formatEther, formatUnits } from "viem"; import { hardhat } from "viem/chains"; import { usePublicClient } from "wagmi"; import { Address } from "~~/components/scaffold-eth"; -import { decodeTransactionData, getFunctionDetails, getTargetNetwork } from "~~/utils/scaffold-eth"; +import { useTargetNetwork } from "~~/hooks/scaffold-eth/useTargetNetwork"; +import { decodeTransactionData, getFunctionDetails } from "~~/utils/scaffold-eth"; import { replacer } from "~~/utils/scaffold-eth/common"; -const TransactionPage: NextPage = () => { +type PageProps = { + params: { txHash?: Hash }; +}; +const TransactionPage: NextPage<PageProps> = ({ params }: PageProps) => { const client = usePublicClient({ chainId: hardhat.id }); - + const txHash = params?.txHash as Hash; const router = useRouter(); - const { txHash } = router.query as { txHash?: `0x${string}` }; const [transaction, setTransaction] = useState<Transaction>(); const [receipt, setReceipt] = useState<TransactionReceipt>(); const [functionCalled, setFunctionCalled] = useState<string>(); - const configuredNetwork = getTargetNetwork(); + const { targetNetwork } = useTargetNetwork(); useEffect(() => { if (txHash) { @@ -87,7 +92,7 @@ const TransactionPage: NextPage = () => { <strong>Value:</strong> </td> <td> - {formatEther(transaction.value)} {configuredNetwork.nativeCurrency.symbol} + {formatEther(transaction.value)} {targetNetwork.nativeCurrency.symbol} </td> </tr> <tr> diff --git a/packages/nextjs/app/debug/_components/DebugContracts.tsx b/packages/nextjs/app/debug/_components/DebugContracts.tsx new file mode 100644 index 0000000..195246c --- /dev/null +++ b/packages/nextjs/app/debug/_components/DebugContracts.tsx @@ -0,0 +1,65 @@ +"use client"; + +import { useEffect } from "react"; +import { useLocalStorage } from "usehooks-ts"; +import { BarsArrowUpIcon } from "@heroicons/react/20/solid"; +import { ContractUI } from "~~/app/debug/_components/contract"; +import { ContractName } from "~~/utils/scaffold-eth/contract"; +import { getAllContracts } from "~~/utils/scaffold-eth/contractsData"; + +const selectedContractStorageKey = "scaffoldEth2.selectedContract"; +const contractsData = getAllContracts(); +const contractNames = Object.keys(contractsData) as ContractName[]; + +export function DebugContracts() { + const [selectedContract, setSelectedContract] = useLocalStorage<ContractName>( + selectedContractStorageKey, + contractNames[0], + ); + + useEffect(() => { + if (!contractNames.includes(selectedContract)) { + setSelectedContract(contractNames[0]); + } + }, [selectedContract, setSelectedContract]); + + return ( + <div className="flex flex-col gap-y-6 lg:gap-y-8 py-8 lg:py-12 justify-center items-center"> + {contractNames.length === 0 ? ( + <p className="text-3xl mt-14">No contracts found!</p> + ) : ( + <> + {contractNames.length > 1 && ( + <div className="flex flex-row gap-2 w-full max-w-7xl pb-1 px-6 lg:px-10 flex-wrap"> + {contractNames.map(contractName => ( + <button + className={`btn btn-secondary btn-sm font-light hover:border-transparent ${ + contractName === selectedContract + ? "bg-base-300 hover:bg-base-300 no-animation" + : "bg-base-100 hover:bg-secondary" + }`} + key={contractName} + onClick={() => setSelectedContract(contractName)} + > + {contractName} + {contractsData[contractName].external && ( + <span className="tooltip tooltip-top tooltip-accent" data-tip="External contract"> + <BarsArrowUpIcon className="h-4 w-4 cursor-pointer" /> + </span> + )} + </button> + ))} + </div> + )} + {contractNames.map(contractName => ( + <ContractUI + key={contractName} + contractName={contractName} + className={contractName === selectedContract ? "" : "hidden"} + /> + ))} + </> + )} + </div> + ); +} diff --git a/packages/nextjs/components/scaffold-eth/Contract/ContractInput.tsx b/packages/nextjs/app/debug/_components/contract/ContractInput.tsx similarity index 98% rename from packages/nextjs/components/scaffold-eth/Contract/ContractInput.tsx rename to packages/nextjs/app/debug/_components/contract/ContractInput.tsx index 396f4a9..e27c56e 100644 --- a/packages/nextjs/components/scaffold-eth/Contract/ContractInput.tsx +++ b/packages/nextjs/app/debug/_components/contract/ContractInput.tsx @@ -1,3 +1,5 @@ +"use client"; + import { Dispatch, SetStateAction } from "react"; import { AbiParameter } from "abitype"; import { diff --git a/packages/nextjs/app/debug/_components/contract/ContractReadMethods.tsx b/packages/nextjs/app/debug/_components/contract/ContractReadMethods.tsx new file mode 100644 index 0000000..f269fa9 --- /dev/null +++ b/packages/nextjs/app/debug/_components/contract/ContractReadMethods.tsx @@ -0,0 +1,43 @@ +import { Abi, AbiFunction } from "abitype"; +import { ReadOnlyFunctionForm } from "~~/app/debug/_components/contract"; +import { Contract, ContractName, GenericContract, InheritedFunctions } from "~~/utils/scaffold-eth/contract"; + +export const ContractReadMethods = ({ deployedContractData }: { deployedContractData: Contract<ContractName> }) => { + if (!deployedContractData) { + return null; + } + + const functionsToDisplay = ( + ((deployedContractData.abi || []) as Abi).filter(part => part.type === "function") as AbiFunction[] + ) + .filter(fn => { + const isQueryableWithParams = + (fn.stateMutability === "view" || fn.stateMutability === "pure") && fn.inputs.length > 0; + return isQueryableWithParams; + }) + .map(fn => { + return { + fn, + inheritedFrom: ((deployedContractData as GenericContract)?.inheritedFunctions as InheritedFunctions)?.[fn.name], + }; + }) + .sort((a, b) => (b.inheritedFrom ? b.inheritedFrom.localeCompare(a.inheritedFrom) : 1)); + + if (!functionsToDisplay.length) { + return <>No read methods</>; + } + + return ( + <> + {functionsToDisplay.map(({ fn, inheritedFrom }) => ( + <ReadOnlyFunctionForm + abi={deployedContractData.abi as Abi} + contractAddress={deployedContractData.address} + abiFunction={fn} + key={fn.name} + inheritedFrom={inheritedFrom} + /> + ))} + </> + ); +}; diff --git a/packages/nextjs/components/scaffold-eth/Contract/ContractUI.tsx b/packages/nextjs/app/debug/_components/contract/ContractUI.tsx similarity index 91% rename from packages/nextjs/components/scaffold-eth/Contract/ContractUI.tsx rename to packages/nextjs/app/debug/_components/contract/ContractUI.tsx index bcacf9c..49f0f2e 100644 --- a/packages/nextjs/components/scaffold-eth/Contract/ContractUI.tsx +++ b/packages/nextjs/app/debug/_components/contract/ContractUI.tsx @@ -1,11 +1,12 @@ +"use client"; + import { useReducer } from "react"; import { ContractReadMethods } from "./ContractReadMethods"; import { ContractVariables } from "./ContractVariables"; import { ContractWriteMethods } from "./ContractWriteMethods"; -import { Spinner } from "~~/components/assets/Spinner"; import { Address, Balance } from "~~/components/scaffold-eth"; import { useDeployedContractInfo, useNetworkColor } from "~~/hooks/scaffold-eth"; -import { getTargetNetwork } from "~~/utils/scaffold-eth"; +import { useTargetNetwork } from "~~/hooks/scaffold-eth/useTargetNetwork"; import { ContractName } from "~~/utils/scaffold-eth/contract"; type ContractUIProps = { @@ -18,15 +19,14 @@ type ContractUIProps = { **/ export const ContractUI = ({ contractName, className = "" }: ContractUIProps) => { const [refreshDisplayVariables, triggerRefreshDisplayVariables] = useReducer(value => !value, false); - const configuredNetwork = getTargetNetwork(); - + const { targetNetwork } = useTargetNetwork(); const { data: deployedContractData, isLoading: deployedContractLoading } = useDeployedContractInfo(contractName); const networkColor = useNetworkColor(); if (deployedContractLoading) { return ( <div className="mt-14"> - <Spinner width="50px" height="50px" /> + <span className="loading loading-spinner loading-lg"></span> </div> ); } @@ -34,7 +34,7 @@ export const ContractUI = ({ contractName, className = "" }: ContractUIProps) => if (!deployedContractData) { return ( <p className="text-3xl mt-14"> - {`No contract found by the name of "${contractName}" on chain "${configuredNetwork.name}"!`} + {`No contract found by the name of "${contractName}" on chain "${targetNetwork.name}"!`} </p> ); } @@ -54,10 +54,10 @@ export const ContractUI = ({ contractName, className = "" }: ContractUIProps) => </div> </div> </div> - {configuredNetwork && ( + {targetNetwork && ( <p className="my-0 text-sm"> <span className="font-bold">Network</span>:{" "} - <span style={{ color: networkColor }}>{configuredNetwork.name}</span> + <span style={{ color: networkColor }}>{targetNetwork.name}</span> </p> )} </div> diff --git a/packages/nextjs/components/scaffold-eth/Contract/ContractVariables.tsx b/packages/nextjs/app/debug/_components/contract/ContractVariables.tsx similarity index 51% rename from packages/nextjs/components/scaffold-eth/Contract/ContractVariables.tsx rename to packages/nextjs/app/debug/_components/contract/ContractVariables.tsx index 8045699..9d25782 100644 --- a/packages/nextjs/components/scaffold-eth/Contract/ContractVariables.tsx +++ b/packages/nextjs/app/debug/_components/contract/ContractVariables.tsx @@ -1,6 +1,6 @@ import { DisplayVariable } from "./DisplayVariable"; import { Abi, AbiFunction } from "abitype"; -import { Contract, ContractName } from "~~/utils/scaffold-eth/contract"; +import { Contract, ContractName, GenericContract, InheritedFunctions } from "~~/utils/scaffold-eth/contract"; export const ContractVariables = ({ refreshDisplayVariables, @@ -15,11 +15,19 @@ export const ContractVariables = ({ const functionsToDisplay = ( (deployedContractData.abi as Abi).filter(part => part.type === "function") as AbiFunction[] - ).filter(fn => { - const isQueryableWithNoParams = - (fn.stateMutability === "view" || fn.stateMutability === "pure") && fn.inputs.length === 0; - return isQueryableWithNoParams; - }); + ) + .filter(fn => { + const isQueryableWithNoParams = + (fn.stateMutability === "view" || fn.stateMutability === "pure") && fn.inputs.length === 0; + return isQueryableWithNoParams; + }) + .map(fn => { + return { + fn, + inheritedFrom: ((deployedContractData as GenericContract)?.inheritedFunctions as InheritedFunctions)?.[fn.name], + }; + }) + .sort((a, b) => (b.inheritedFrom ? b.inheritedFrom.localeCompare(a.inheritedFrom) : 1)); if (!functionsToDisplay.length) { return <>No contract variables</>; @@ -27,12 +35,14 @@ export const ContractVariables = ({ return ( <> - {functionsToDisplay.map(fn => ( + {functionsToDisplay.map(({ fn, inheritedFrom }) => ( <DisplayVariable + abi={deployedContractData.abi as Abi} abiFunction={fn} contractAddress={deployedContractData.address} key={fn.name} refreshDisplayVariables={refreshDisplayVariables} + inheritedFrom={inheritedFrom} /> ))} </> diff --git a/packages/nextjs/app/debug/_components/contract/ContractWriteMethods.tsx b/packages/nextjs/app/debug/_components/contract/ContractWriteMethods.tsx new file mode 100644 index 0000000..ee703a6 --- /dev/null +++ b/packages/nextjs/app/debug/_components/contract/ContractWriteMethods.tsx @@ -0,0 +1,49 @@ +import { Abi, AbiFunction } from "abitype"; +import { WriteOnlyFunctionForm } from "~~/app/debug/_components/contract"; +import { Contract, ContractName, GenericContract, InheritedFunctions } from "~~/utils/scaffold-eth/contract"; + +export const ContractWriteMethods = ({ + onChange, + deployedContractData, +}: { + onChange: () => void; + deployedContractData: Contract<ContractName>; +}) => { + if (!deployedContractData) { + return null; + } + + const functionsToDisplay = ( + (deployedContractData.abi as Abi).filter(part => part.type === "function") as AbiFunction[] + ) + .filter(fn => { + const isWriteableFunction = fn.stateMutability !== "view" && fn.stateMutability !== "pure"; + return isWriteableFunction; + }) + .map(fn => { + return { + fn, + inheritedFrom: ((deployedContractData as GenericContract)?.inheritedFunctions as InheritedFunctions)?.[fn.name], + }; + }) + .sort((a, b) => (b.inheritedFrom ? b.inheritedFrom.localeCompare(a.inheritedFrom) : 1)); + + if (!functionsToDisplay.length) { + return <>No write methods</>; + } + + return ( + <> + {functionsToDisplay.map(({ fn, inheritedFrom }, idx) => ( + <WriteOnlyFunctionForm + abi={deployedContractData.abi as Abi} + key={`${fn.name}-${idx}}`} + abiFunction={fn} + onChange={onChange} + contractAddress={deployedContractData.address} + inheritedFrom={inheritedFrom} + /> + ))} + </> + ); +}; diff --git a/packages/nextjs/components/scaffold-eth/Contract/DisplayVariable.tsx b/packages/nextjs/app/debug/_components/contract/DisplayVariable.tsx similarity index 79% rename from packages/nextjs/components/scaffold-eth/Contract/DisplayVariable.tsx rename to packages/nextjs/app/debug/_components/contract/DisplayVariable.tsx index 69bd745..805593d 100644 --- a/packages/nextjs/components/scaffold-eth/Contract/DisplayVariable.tsx +++ b/packages/nextjs/app/debug/_components/contract/DisplayVariable.tsx @@ -1,9 +1,12 @@ +"use client"; + import { useEffect } from "react"; +import { InheritanceTooltip } from "./InheritanceTooltip"; +import { displayTxResult } from "./utilsDisplay"; import { Abi, AbiFunction } from "abitype"; import { Address } from "viem"; import { useContractRead } from "wagmi"; import { ArrowPathIcon } from "@heroicons/react/24/outline"; -import { displayTxResult } from "~~/components/scaffold-eth"; import { useAnimationConfig } from "~~/hooks/scaffold-eth"; import { notification } from "~~/utils/scaffold-eth"; @@ -11,9 +14,17 @@ type DisplayVariableProps = { contractAddress: Address; abiFunction: AbiFunction; refreshDisplayVariables: boolean; + inheritedFrom?: string; + abi: Abi; }; -export const DisplayVariable = ({ contractAddress, abiFunction, refreshDisplayVariables }: DisplayVariableProps) => { +export const DisplayVariable = ({ + contractAddress, + abiFunction, + refreshDisplayVariables, + abi, + inheritedFrom, +}: DisplayVariableProps) => { const { data: result, isFetching, @@ -21,7 +32,7 @@ export const DisplayVariable = ({ contractAddress, abiFunction, refreshDisplayVa } = useContractRead({ address: contractAddress, functionName: abiFunction.name, - abi: [abiFunction] as Abi, + abi: abi, onError: error => { notification.error(error.message); }, @@ -35,7 +46,7 @@ export const DisplayVariable = ({ contractAddress, abiFunction, refreshDisplayVa return ( <div className="space-y-1 pb-2"> - <div className="flex items-center gap-2"> + <div className="flex items-center"> <h3 className="font-medium text-lg mb-0 break-all">{abiFunction.name}</h3> <button className="btn btn-ghost btn-xs" onClick={async () => await refetch()}> {isFetching ? ( @@ -44,6 +55,7 @@ export const DisplayVariable = ({ contractAddress, abiFunction, refreshDisplayVa <ArrowPathIcon className="h-3 w-3 cursor-pointer" aria-hidden="true" /> )} </button> + <InheritanceTooltip inheritedFrom={inheritedFrom} /> </div> <div className="text-gray-500 font-medium flex flex-col items-start"> <div> diff --git a/packages/nextjs/app/debug/_components/contract/InheritanceTooltip.tsx b/packages/nextjs/app/debug/_components/contract/InheritanceTooltip.tsx new file mode 100644 index 0000000..9825520 --- /dev/null +++ b/packages/nextjs/app/debug/_components/contract/InheritanceTooltip.tsx @@ -0,0 +1,14 @@ +import { InformationCircleIcon } from "@heroicons/react/20/solid"; + +export const InheritanceTooltip = ({ inheritedFrom }: { inheritedFrom?: string }) => ( + <> + {inheritedFrom && ( + <span + className="tooltip tooltip-top tooltip-accent px-2 md:break-normal" + data-tip={`Inherited from: ${inheritedFrom}`} + > + <InformationCircleIcon className="h-4 w-4" aria-hidden="true" /> + </span> + )} + </> +); diff --git a/packages/nextjs/components/scaffold-eth/Contract/ReadOnlyFunctionForm.tsx b/packages/nextjs/app/debug/_components/contract/ReadOnlyFunctionForm.tsx similarity index 76% rename from packages/nextjs/components/scaffold-eth/Contract/ReadOnlyFunctionForm.tsx rename to packages/nextjs/app/debug/_components/contract/ReadOnlyFunctionForm.tsx index 6572fd1..42013ed 100644 --- a/packages/nextjs/components/scaffold-eth/Contract/ReadOnlyFunctionForm.tsx +++ b/packages/nextjs/app/debug/_components/contract/ReadOnlyFunctionForm.tsx @@ -1,4 +1,7 @@ +"use client"; + import { useState } from "react"; +import { InheritanceTooltip } from "./InheritanceTooltip"; import { Abi, AbiFunction } from "abitype"; import { Address } from "viem"; import { useContractRead } from "wagmi"; @@ -8,26 +11,34 @@ import { getFunctionInputKey, getInitialFormState, getParsedContractFunctionArgs, -} from "~~/components/scaffold-eth"; -import { notification } from "~~/utils/scaffold-eth"; +} from "~~/app/debug/_components/contract"; +import { getParsedError, notification } from "~~/utils/scaffold-eth"; -type TReadOnlyFunctionFormProps = { +type ReadOnlyFunctionFormProps = { contractAddress: Address; abiFunction: AbiFunction; + inheritedFrom?: string; + abi: Abi; }; -export const ReadOnlyFunctionForm = ({ contractAddress, abiFunction }: TReadOnlyFunctionFormProps) => { +export const ReadOnlyFunctionForm = ({ + contractAddress, + abiFunction, + inheritedFrom, + abi, +}: ReadOnlyFunctionFormProps) => { const [form, setForm] = useState<Record<string, any>>(() => getInitialFormState(abiFunction)); const [result, setResult] = useState<unknown>(); const { isFetching, refetch } = useContractRead({ address: contractAddress, functionName: abiFunction.name, - abi: [abiFunction] as Abi, + abi: abi, args: getParsedContractFunctionArgs(form), enabled: false, onError: (error: any) => { - notification.error(error.message); + const parsedErrror = getParsedError(error); + notification.error(parsedErrror); }, }); @@ -49,7 +60,10 @@ export const ReadOnlyFunctionForm = ({ contractAddress, abiFunction }: TReadOnly return ( <div className="flex flex-col gap-3 py-5 first:pt-0 last:pb-1"> - <p className="font-medium my-0 break-words">{abiFunction.name}</p> + <p className="font-medium my-0 break-words"> + {abiFunction.name} + <InheritanceTooltip inheritedFrom={inheritedFrom} /> + </p> {inputElements} <div className="flex justify-between gap-2 flex-wrap"> <div className="flex-grow w-4/5"> diff --git a/packages/nextjs/components/scaffold-eth/Contract/TxReceipt.tsx b/packages/nextjs/app/debug/_components/contract/TxReceipt.tsx similarity index 96% rename from packages/nextjs/components/scaffold-eth/Contract/TxReceipt.tsx rename to packages/nextjs/app/debug/_components/contract/TxReceipt.tsx index 6308ed2..87e74f5 100644 --- a/packages/nextjs/components/scaffold-eth/Contract/TxReceipt.tsx +++ b/packages/nextjs/app/debug/_components/contract/TxReceipt.tsx @@ -2,7 +2,7 @@ import { useState } from "react"; import { CopyToClipboard } from "react-copy-to-clipboard"; import { TransactionReceipt } from "viem"; import { CheckCircleIcon, DocumentDuplicateIcon } from "@heroicons/react/24/outline"; -import { displayTxResult } from "~~/components/scaffold-eth"; +import { displayTxResult } from "~~/app/debug/_components/contract"; export const TxReceipt = ( txResult: string | number | bigint | Record<string, any> | TransactionReceipt | undefined, diff --git a/packages/nextjs/components/scaffold-eth/Contract/WriteOnlyFunctionForm.tsx b/packages/nextjs/app/debug/_components/contract/WriteOnlyFunctionForm.tsx similarity index 82% rename from packages/nextjs/components/scaffold-eth/Contract/WriteOnlyFunctionForm.tsx rename to packages/nextjs/app/debug/_components/contract/WriteOnlyFunctionForm.tsx index 5d2e9e2..d713501 100644 --- a/packages/nextjs/components/scaffold-eth/Contract/WriteOnlyFunctionForm.tsx +++ b/packages/nextjs/app/debug/_components/contract/WriteOnlyFunctionForm.tsx @@ -1,31 +1,43 @@ +"use client"; + import { useEffect, useState } from "react"; +import { InheritanceTooltip } from "./InheritanceTooltip"; import { Abi, AbiFunction } from "abitype"; import { Address, TransactionReceipt } from "viem"; import { useContractWrite, useNetwork, useWaitForTransaction } from "wagmi"; import { ContractInput, - IntegerInput, TxReceipt, getFunctionInputKey, getInitialFormState, getParsedContractFunctionArgs, - getParsedError, -} from "~~/components/scaffold-eth"; +} from "~~/app/debug/_components/contract"; +import { IntegerInput } from "~~/components/scaffold-eth"; import { useTransactor } from "~~/hooks/scaffold-eth"; -import { getTargetNetwork, notification } from "~~/utils/scaffold-eth"; +import { useTargetNetwork } from "~~/hooks/scaffold-eth/useTargetNetwork"; +import { getParsedError, notification } from "~~/utils/scaffold-eth"; type WriteOnlyFunctionFormProps = { + abi: Abi; abiFunction: AbiFunction; onChange: () => void; contractAddress: Address; + inheritedFrom?: string; }; -export const WriteOnlyFunctionForm = ({ abiFunction, onChange, contractAddress }: WriteOnlyFunctionFormProps) => { +export const WriteOnlyFunctionForm = ({ + abi, + abiFunction, + onChange, + contractAddress, + inheritedFrom, +}: WriteOnlyFunctionFormProps) => { const [form, setForm] = useState<Record<string, any>>(() => getInitialFormState(abiFunction)); const [txValue, setTxValue] = useState<string | bigint>(""); const { chain } = useNetwork(); const writeTxn = useTransactor(); - const writeDisabled = !chain || chain?.id !== getTargetNetwork().id; + const { targetNetwork } = useTargetNetwork(); + const writeDisabled = !chain || chain?.id !== targetNetwork.id; const { data: result, @@ -34,7 +46,7 @@ export const WriteOnlyFunctionForm = ({ abiFunction, onChange, contractAddress } } = useContractWrite({ address: contractAddress, functionName: abiFunction.name, - abi: [abiFunction] as Abi, + abi: abi, args: getParsedContractFunctionArgs(form), }); @@ -80,7 +92,10 @@ export const WriteOnlyFunctionForm = ({ abiFunction, onChange, contractAddress } return ( <div className="py-5 space-y-3 first:pt-0 last:pb-1"> <div className={`flex gap-3 ${zeroInputs ? "flex-row justify-between items-center" : "flex-col"}`}> - <p className="font-medium my-0 break-words">{abiFunction.name}</p> + <p className="font-medium my-0 break-words"> + {abiFunction.name} + <InheritanceTooltip inheritedFrom={inheritedFrom} /> + </p> {inputs} {abiFunction.stateMutability === "payable" ? ( <IntegerInput diff --git a/packages/nextjs/components/scaffold-eth/Contract/index.tsx b/packages/nextjs/app/debug/_components/contract/index.tsx similarity index 100% rename from packages/nextjs/components/scaffold-eth/Contract/index.tsx rename to packages/nextjs/app/debug/_components/contract/index.tsx diff --git a/packages/nextjs/components/scaffold-eth/Contract/utilsContract.tsx b/packages/nextjs/app/debug/_components/contract/utilsContract.tsx similarity index 61% rename from packages/nextjs/components/scaffold-eth/Contract/utilsContract.tsx rename to packages/nextjs/app/debug/_components/contract/utilsContract.tsx index 286fa3b..ad0b256 100644 --- a/packages/nextjs/components/scaffold-eth/Contract/utilsContract.tsx +++ b/packages/nextjs/app/debug/_components/contract/utilsContract.tsx @@ -1,47 +1,18 @@ import { AbiFunction, AbiParameter } from "abitype"; -import { BaseError as BaseViemError } from "viem"; /** - * @dev utility function to generate key corresponding to function metaData - * @param {AbiFunction} functionName - * @param {utils.ParamType} input - object containing function name and input type corresponding to index - * @param {number} inputIndex - * @returns {string} key + * Generates a key based on function metadata */ const getFunctionInputKey = (functionName: string, input: AbiParameter, inputIndex: number): string => { const name = input?.name || `input_${inputIndex}_`; return functionName + "_" + name + "_" + input.internalType + "_" + input.type; }; -/** - * @dev utility function to parse error - * @param e - error object - * @returns {string} parsed error string - */ -const getParsedError = (e: any | BaseViemError): string => { - let message = e.message ?? "An unknown error occurred"; - - if (e instanceof BaseViemError) { - if (e.details) { - message = e.details; - } else if (e.shortMessage) { - message = e.shortMessage; - } else if (e.message) { - message = e.message; - } else if (e.name) { - message = e.name; - } - } - - return message; -}; - // This regex is used to identify array types in the form of `type[size]` const ARRAY_TYPE_REGEX = /\[.*\]$/; + /** - * @dev Parse form input with array support - * @param {Record<string,any>} form - form object containing key value pairs - * @returns parsed error string + * Parses form input with array support */ const getParsedContractFunctionArgs = (form: Record<string, any>) => { const keys = Object.keys(form); @@ -78,4 +49,4 @@ const getInitialFormState = (abiFunction: AbiFunction) => { return initialForm; }; -export { getFunctionInputKey, getInitialFormState, getParsedContractFunctionArgs, getParsedError }; +export { getFunctionInputKey, getInitialFormState, getParsedContractFunctionArgs }; diff --git a/packages/nextjs/components/scaffold-eth/Contract/utilsDisplay.tsx b/packages/nextjs/app/debug/_components/contract/utilsDisplay.tsx similarity index 89% rename from packages/nextjs/components/scaffold-eth/Contract/utilsDisplay.tsx rename to packages/nextjs/app/debug/_components/contract/utilsDisplay.tsx index 5fcf310..f5d2129 100644 --- a/packages/nextjs/components/scaffold-eth/Contract/utilsDisplay.tsx +++ b/packages/nextjs/app/debug/_components/contract/utilsDisplay.tsx @@ -1,5 +1,5 @@ import { ReactElement } from "react"; -import { TransactionBase, TransactionReceipt, formatEther } from "viem"; +import { TransactionBase, TransactionReceipt, formatEther, isAddress } from "viem"; import { Address } from "~~/components/scaffold-eth"; import { replacer } from "~~/utils/scaffold-eth/common"; @@ -34,7 +34,7 @@ export const displayTxResult = ( } } - if (typeof displayContent === "string" && displayContent.indexOf("0x") === 0 && displayContent.length === 42) { + if (typeof displayContent === "string" && isAddress(displayContent)) { return asText ? displayContent : <Address address={displayContent} />; } diff --git a/packages/nextjs/app/debug/page.tsx b/packages/nextjs/app/debug/page.tsx new file mode 100644 index 0000000..e6fb89f --- /dev/null +++ b/packages/nextjs/app/debug/page.tsx @@ -0,0 +1,28 @@ +import { DebugContracts } from "./_components/DebugContracts"; +import type { NextPage } from "next"; +import { getMetadata } from "~~/utils/scaffold-eth/getMetadata"; + +export const metadata = getMetadata({ + title: "Debug Contracts", + description: "Debug your deployed ๐Ÿ— Scaffold-ETH 2 contracts in an easy way", +}); + +const Debug: NextPage = () => { + return ( + <> + <DebugContracts /> + <div className="text-center mt-8 bg-secondary p-10"> + <h1 className="text-4xl my-0">Debug Contracts</h1> + <p className="text-neutral"> + You can debug & interact with your deployed contracts here. + <br /> Check{" "} + <code className="italic bg-base-300 text-base font-bold [word-spacing:-0.5rem] px-1"> + packages / nextjs / app / debug / page.tsx + </code>{" "} + </p> + </div> + </> + ); +}; + +export default Debug; diff --git a/packages/nextjs/app/layout.tsx b/packages/nextjs/app/layout.tsx new file mode 100644 index 0000000..824f4f3 --- /dev/null +++ b/packages/nextjs/app/layout.tsx @@ -0,0 +1,54 @@ +import "@rainbow-me/rainbowkit/styles.css"; +import { Metadata } from "next"; +import { ScaffoldEthAppWithProviders } from "~~/components/ScaffoldEthAppWithProviders"; +import "~~/styles/globals.css"; + +const baseUrl = process.env.NEXT_PUBLIC_VERCEL_URL + ? `https://${process.env.NEXT_PUBLIC_VERCEL_URL}` + : `http://localhost:${process.env.PORT}`; +const imageUrl = `${baseUrl}/thumbnail.jpg`; + +export const metadata: Metadata = { + metadataBase: new URL(baseUrl), + title: { + default: "Scaffold-ETH 2 App", + template: "%s | Scaffold-ETH 2", + }, + description: "Built with ๐Ÿ— Scaffold-ETH 2", + openGraph: { + title: { + default: "Scaffold-ETH 2 App", + template: "%s | Scaffold-ETH 2", + }, + description: "Built with ๐Ÿ— Scaffold-ETH 2", + images: [ + { + url: imageUrl, + }, + ], + }, + twitter: { + card: "summary_large_image", + images: [imageUrl], + title: { + default: "Scaffold-ETH 2", + template: "%s | Scaffold-ETH 2", + }, + description: "Built with ๐Ÿ— Scaffold-ETH 2", + }, + icons: { + icon: [{ url: "/favicon.png", sizes: "32x32", type: "image/png" }], + }, +}; + +const ScaffoldEthApp = ({ children }: { children: React.ReactNode }) => { + return ( + <html> + <body> + <ScaffoldEthAppWithProviders>{children}</ScaffoldEthAppWithProviders> + </body> + </html> + ); +}; + +export default ScaffoldEthApp; diff --git a/packages/nextjs/pages/index.tsx b/packages/nextjs/app/page.tsx similarity index 75% rename from packages/nextjs/pages/index.tsx rename to packages/nextjs/app/page.tsx index 8c8826b..035b331 100644 --- a/packages/nextjs/pages/index.tsx +++ b/packages/nextjs/app/page.tsx @@ -1,22 +1,20 @@ import Link from "next/link"; import type { NextPage } from "next"; -import { BugAntIcon, MagnifyingGlassIcon, SparklesIcon } from "@heroicons/react/24/outline"; -import { MetaHeader } from "~~/components/MetaHeader"; +import { BugAntIcon, MagnifyingGlassIcon } from "@heroicons/react/24/outline"; const Home: NextPage = () => { return ( <> - <MetaHeader /> <div className="flex items-center flex-col flex-grow pt-10"> <div className="px-5"> <h1 className="text-center mb-8"> <span className="block text-2xl mb-2">Welcome to</span> - <span className="block text-4xl font-bold">Reputation & Roles</span> + <span className="block text-4xl font-bold">Scaffold-ETH 2</span> </h1> <p className="text-center text-lg"> Get started by editing{" "} <code className="italic bg-base-300 text-base font-bold max-w-full break-words break-all inline-block"> - packages/nextjs/pages/index.tsx + packages/nextjs/app/page.tsx </code> </p> <p className="text-center text-lg"> @@ -53,16 +51,6 @@ const Home: NextPage = () => { tab. </p> </div> - <div className="flex flex-col bg-base-100 px-10 py-10 text-center items-center max-w-xs rounded-3xl"> - <SparklesIcon className="h-8 w-8 fill-secondary" /> - <p> - Experiment with{" "} - <Link href="/example-ui" passHref className="link"> - Example UI - </Link>{" "} - to build your own UI. - </p> - </div> </div> </div> </div> diff --git a/packages/nextjs/app/rep-tokens-demo/_components/RepTokensDemo.tsx b/packages/nextjs/app/rep-tokens-demo/_components/RepTokensDemo.tsx new file mode 100644 index 0000000..31ed172 --- /dev/null +++ b/packages/nextjs/app/rep-tokens-demo/_components/RepTokensDemo.tsx @@ -0,0 +1,60 @@ +"use client"; + +import { useAccount } from "wagmi"; +import { tokenGroupCardConfigProps } from "~~/components/rep-tokens-demo/MainTokensCardConfig"; +import { TokenGroupCard } from "~~/components/rep-tokens/cards/token-group-card/TokenGroupCard"; +import { useRepTokens } from "~~/components/rep-tokens/hooks/Hooks"; +import { buildTokenCards, buildTokenGroupCard } from "~~/components/rep-tokens/utils/buildTokensCard"; +import { Address } from "~~/components/scaffold-eth"; + +export function RepTokensDemo() { + const { address } = useAccount(); + const { tokensData } = useRepTokens(address); + + for (let i = 0; i < tokensData.tokens.length; i++) { + tokensData.tokens[i].image = tokensData.tokens[i].image?.replace("ipfs://", "https://ipfs.io/ipfs/"); + } + + const mainTokenCards = buildTokenCards( + tokensData.tokens, + tokensData.address, + tokenGroupCardConfigProps.tokenCardProps, + ); + const mainTokenGroupCardProps = buildTokenGroupCard(tokenGroupCardConfigProps, mainTokenCards, tokensData.address); + + if (tokenGroupCardConfigProps.address?.isRendering) { + mainTokenGroupCardProps.addressOutput = <Address props={mainTokenGroupCardProps.addressProps} />; + } + + return ( + <> + {/* <div className="flex flex-col justify-center items-center bg-primary bg-[length:100%_100%] py-1 px-5 sm:px-0 lg:py-auto max-w-[100vw] "> + <div> + <TokenGroupCard + address={tokensData.address} + tokenCardsProps={navBarTokenCard} + elementsClasses={navBarTokenGroupCardElementsClasses} + isBeautifyingTokenGroupCardLoadingProps={isBeuatyingNavBarTokenGroupCardLoadingProps} + /> + </div> + </div> */} + + <div className="flex flex-col justify-center items-center bg-primary bg-[length:100%_100%] py-1 px-5 sm:px-0 lg:py-auto max-w-[100vw] "> + <div> + <TokenGroupCard props={mainTokenGroupCardProps} /> + </div> + </div> + + {/* <div className="flex flex-col justify-center items-center bg-primary bg-[length:100%_100%] py-1 px-5 sm:px-0 lg:py-auto max-w-[100vw] "> + <div> + <TokenGroupCard + address={tokensData.address} + tokenCardsProps={mainNumberOverlayTokenCard} + elementsClasses={mainNumberOverlayTokensCardElementsClasses} + isBeautifyingTokenGroupCardLoadingProps={mainNumberOverlayTokensCardPrettifyLoadingProps} + /> + </div> + </div> */} + </> + ); +} diff --git a/packages/nextjs/app/rep-tokens-demo/page.tsx b/packages/nextjs/app/rep-tokens-demo/page.tsx new file mode 100644 index 0000000..75beede --- /dev/null +++ b/packages/nextjs/app/rep-tokens-demo/page.tsx @@ -0,0 +1,18 @@ +import { RepTokensDemo } from "./_components/RepTokensDemo"; +import type { NextPage } from "next"; +import { getMetadata } from "~~/utils/scaffold-eth/getMetadata"; + +export const metadata = getMetadata({ + title: "Debug Contracts", + description: "Debug your deployed ๐Ÿ— Scaffold-ETH 2 contracts in an easy way", +}); + +const RepTokensDemoPage: NextPage = () => { + return ( + <> + <RepTokensDemo /> + </> + ); +}; + +export default RepTokensDemoPage; diff --git a/packages/nextjs/components/Footer.tsx b/packages/nextjs/components/Footer.tsx index b0ee024..7aac136 100644 --- a/packages/nextjs/components/Footer.tsx +++ b/packages/nextjs/components/Footer.tsx @@ -4,16 +4,18 @@ import { hardhat } from "viem/chains"; import { CurrencyDollarIcon, MagnifyingGlassIcon } from "@heroicons/react/24/outline"; import { HeartIcon } from "@heroicons/react/24/outline"; import { SwitchTheme } from "~~/components/SwitchTheme"; +import { BuidlGuidlLogo } from "~~/components/assets/BuidlGuidlLogo"; import { Faucet } from "~~/components/scaffold-eth"; +import { useTargetNetwork } from "~~/hooks/scaffold-eth/useTargetNetwork"; import { useGlobalState } from "~~/services/store/store"; -import { getTargetNetwork } from "~~/utils/scaffold-eth"; /** * Site footer */ export const Footer = () => { const nativeCurrencyPrice = useGlobalState(state => state.nativeCurrencyPrice); - const isLocalNetwork = getTargetNetwork().id === hardhat.id; + const { targetNetwork } = useTargetNetwork(); + const isLocalNetwork = targetNetwork.id === hardhat.id; return ( <div className="min-h-0 py-5 px-1 mb-11 lg:mb-0"> @@ -22,7 +24,7 @@ export const Footer = () => { <div className="flex flex-col md:flex-row gap-2 pointer-events-auto"> {nativeCurrencyPrice > 0 && ( <div> - <div className="btn btn-primary btn-sm font-normal normal-case gap-1 cursor-auto"> + <div className="btn btn-primary btn-sm font-normal gap-1 cursor-auto"> <CurrencyDollarIcon className="h-4 w-4" /> <span>{nativeCurrencyPrice}</span> </div> @@ -31,7 +33,7 @@ export const Footer = () => { {isLocalNetwork && ( <> <Faucet /> - <Link href="/blockexplorer" passHref className="btn btn-primary btn-sm font-normal normal-case gap-1"> + <Link href="/blockexplorer" passHref className="btn btn-primary btn-sm font-normal gap-1"> <MagnifyingGlassIcon className="h-4 w-4" /> <span>Block Explorer</span> </Link> @@ -56,12 +58,12 @@ export const Footer = () => { </p> <a className="flex justify-center items-center gap-1" - href="https://atxdao.com/" + href="https://buidlguidl.com/" target="_blank" rel="noreferrer" > - {/* <BuidlGuidlLogo className="w-3 h-5 pb-1" /> */} - <span className="link">ATX DAO</span> + <BuidlGuidlLogo className="w-3 h-5 pb-1" /> + <span className="link">BuidlGuidl</span> </a> </div> <span>ยท</span> diff --git a/packages/nextjs/components/Header.tsx b/packages/nextjs/components/Header.tsx index 24fb494..98da7f8 100644 --- a/packages/nextjs/components/Header.tsx +++ b/packages/nextjs/components/Header.tsx @@ -1,16 +1,18 @@ +"use client"; + import React, { useCallback, useRef, useState } from "react"; import Image from "next/image"; import Link from "next/link"; -import { useRouter } from "next/router"; -import { Bars3Icon, BugAntIcon, SparklesIcon } from "@heroicons/react/24/outline"; +import { usePathname } from "next/navigation"; +import { Bars3Icon, BugAntIcon } from "@heroicons/react/24/outline"; import { FaucetButton, RainbowKitCustomConnectButton } from "~~/components/scaffold-eth"; import { useOutsideClick } from "~~/hooks/scaffold-eth"; -interface HeaderMenuLink { +type HeaderMenuLink = { label: string; href: string; icon?: React.ReactNode; -} +}; export const menuLinks: HeaderMenuLink[] = [ { @@ -23,26 +25,26 @@ export const menuLinks: HeaderMenuLink[] = [ icon: <BugAntIcon className="h-4 w-4" />, }, { - label: "Demo", - href: "/repTokensDemo", - icon: <SparklesIcon className="h-4 w-4" />, + label: "Rep Tokens Demo", + href: "/rep-tokens-demo", }, ]; export const HeaderMenuLinks = () => { - const router = useRouter(); + const pathname = usePathname(); return ( <> {menuLinks.map(({ label, href, icon }) => { - const isActive = router.pathname === href; + const isActive = pathname === href; return ( <li key={href}> <Link href={href} passHref - className={`${isActive ? "bg-secondary shadow-md" : ""} - hover:bg-secondary hover:shadow-md focus:!bg-secondary active:!text-neutral py-1.5 px-3 text-sm rounded-full gap-2 grid grid-flow-col`} + className={`${ + isActive ? "bg-secondary shadow-md" : "" + } hover:bg-secondary hover:shadow-md focus:!bg-secondary active:!text-neutral py-1.5 px-3 text-sm rounded-full gap-2 grid grid-flow-col`} > {icon} <span>{label}</span> @@ -92,11 +94,11 @@ export const Header = () => { </div> <Link href="/" passHref className="hidden lg:flex items-center gap-2 ml-4 mr-6 shrink-0"> <div className="flex relative w-10 h-10"> - <Image alt="SE2 logo" className="cursor-pointer" fill src="/atxdao-logo.png" /> + <Image alt="SE2 logo" className="cursor-pointer" fill src="/logo.svg" /> </div> <div className="flex flex-col"> - <span className="font-bold leading-tight">Reputation & Roles</span> - <span className="text-xs">Decentralized Trust & Authority/Responsibilities</span> + <span className="font-bold leading-tight">Scaffold-ETH</span> + <span className="text-xs">Ethereum dev stack</span> </div> </Link> <ul className="hidden lg:flex lg:flex-nowrap menu menu-horizontal px-1 gap-2"> diff --git a/packages/nextjs/components/MetaHeader.tsx b/packages/nextjs/components/MetaHeader.tsx deleted file mode 100644 index 4760762..0000000 --- a/packages/nextjs/components/MetaHeader.tsx +++ /dev/null @@ -1,52 +0,0 @@ -import React from "react"; -import Head from "next/head"; - -type MetaHeaderProps = { - title?: string; - description?: string; - image?: string; - twitterCard?: string; - children?: React.ReactNode; -}; - -// Images must have an absolute path to work properly on Twitter. -// We try to get it dynamically from Vercel, but we default to relative path. -const baseUrl = process.env.NEXT_PUBLIC_VERCEL_URL ? `https://${process.env.NEXT_PUBLIC_VERCEL_URL}/` : "/"; - -export const MetaHeader = ({ - title = "Scaffold-ETH 2 App", - description = "Built with ๐Ÿ— Scaffold-ETH 2", - image = "thumbnail.jpg", - twitterCard = "summary_large_image", - children, -}: MetaHeaderProps) => { - const imageUrl = baseUrl + image; - - return ( - <Head> - {title && ( - <> - <title>{title} - - - - )} - {description && ( - <> - - - - - )} - {image && ( - <> - - - - )} - {twitterCard && } - - {children} - - ); -}; diff --git a/packages/nextjs/pages/_app.tsx b/packages/nextjs/components/ScaffoldEthAppWithProviders.tsx similarity index 54% rename from packages/nextjs/pages/_app.tsx rename to packages/nextjs/components/ScaffoldEthAppWithProviders.tsx index 70b8895..1eb3bd3 100644 --- a/packages/nextjs/pages/_app.tsx +++ b/packages/nextjs/components/ScaffoldEthAppWithProviders.tsx @@ -1,26 +1,22 @@ -import { useEffect, useState } from "react"; -import type { AppProps } from "next/app"; +"use client"; + +import { useEffect } from "react"; import { RainbowKitProvider, darkTheme, lightTheme } from "@rainbow-me/rainbowkit"; -import "@rainbow-me/rainbowkit/styles.css"; -import NextNProgress from "nextjs-progressbar"; import { Toaster } from "react-hot-toast"; -import { useDarkMode } from "usehooks-ts"; import { WagmiConfig } from "wagmi"; import { Footer } from "~~/components/Footer"; import { Header } from "~~/components/Header"; import { BlockieAvatar } from "~~/components/scaffold-eth"; +import { ProgressBar } from "~~/components/scaffold-eth/ProgressBar"; import { useNativeCurrencyPrice } from "~~/hooks/scaffold-eth"; +import { useDarkMode } from "~~/hooks/scaffold-eth/useDarkMode"; import { useGlobalState } from "~~/services/store/store"; import { wagmiConfig } from "~~/services/web3/wagmiConfig"; import { appChains } from "~~/services/web3/wagmiConnectors"; -import "~~/styles/globals.css"; -const ScaffoldEthApp = ({ Component, pageProps }: AppProps) => { +const ScaffoldEthApp = ({ children }: { children: React.ReactNode }) => { const price = useNativeCurrencyPrice(); const setNativeCurrencyPrice = useGlobalState(state => state.setNativeCurrencyPrice); - // This variable is required for initial client side rendering of correct theme for RainbowKit - const [isDarkTheme, setIsDarkTheme] = useState(true); - const { isDarkMode } = useDarkMode(); useEffect(() => { if (price > 0) { @@ -28,29 +24,31 @@ const ScaffoldEthApp = ({ Component, pageProps }: AppProps) => { } }, [setNativeCurrencyPrice, price]); - useEffect(() => { - setIsDarkTheme(isDarkMode); - }, [isDarkMode]); + return ( + <> +
+
+
{children}
+
+
+ + + ); +}; + +export const ScaffoldEthAppWithProviders = ({ children }: { children: React.ReactNode }) => { + const { isDarkMode } = useDarkMode(); return ( - + -
-
-
- -
-
-
- + {children}
); }; - -export default ScaffoldEthApp; diff --git a/packages/nextjs/components/SwitchTheme.tsx b/packages/nextjs/components/SwitchTheme.tsx index 4752e35..b53dd6c 100644 --- a/packages/nextjs/components/SwitchTheme.tsx +++ b/packages/nextjs/components/SwitchTheme.tsx @@ -1,6 +1,9 @@ +"use client"; + import { useEffect } from "react"; -import { useDarkMode, useIsMounted } from "usehooks-ts"; +import { useIsMounted } from "usehooks-ts"; import { MoonIcon, SunIcon } from "@heroicons/react/24/outline"; +import { useDarkMode } from "~~/hooks/scaffold-eth/useDarkMode"; export const SwitchTheme = ({ className }: { className?: string }) => { const { isDarkMode, toggle } = useDarkMode(); @@ -16,7 +19,7 @@ export const SwitchTheme = ({ className }: { className?: string }) => { diff --git a/packages/nextjs/components/assets/Spinner.tsx b/packages/nextjs/components/assets/Spinner.tsx deleted file mode 100644 index 01f103c..0000000 --- a/packages/nextjs/components/assets/Spinner.tsx +++ /dev/null @@ -1,23 +0,0 @@ -export const Spinner = ({ width, height }: { width?: string; height?: string }) => { - return ( - - ); -}; diff --git a/packages/nextjs/components/rep-tokens-demo/MainTokensCardConfig.tsx b/packages/nextjs/components/rep-tokens-demo/MainTokensCardConfig.tsx index 870ed88..45bc9c1 100644 --- a/packages/nextjs/components/rep-tokens-demo/MainTokensCardConfig.tsx +++ b/packages/nextjs/components/rep-tokens-demo/MainTokensCardConfig.tsx @@ -11,7 +11,7 @@ export const balanceProps = { isRendering: true, classes: { card: "bg-slate-300", - value: "text-4xl mx-auto text-center", + value: "text-4xl mx-auto text-center text-black", }, isPrettyLoading: true, } as ValueCardConfigProps; @@ -30,7 +30,7 @@ export const nameProps = { isRendering: true, classes: { card: "bg-slate-300", - value: "text-1xl text-center object-center mx-auto font-bold break-all", + value: "text-1xl text-center object-center mx-auto font-bold break-all text-black", }, isPrettyLoading: true, } as ValueCardConfigProps; @@ -39,7 +39,7 @@ export const descriptionProps = { isRendering: true, classes: { card: "bg-slate-300", - value: "text-1xl mx-auto text-center break-words", + value: "text-1xl mx-auto text-center break-words text-black", }, isPrettyLoading: true, } as ValueCardConfigProps; @@ -48,7 +48,7 @@ export const addressProps = { isRendering: true, classes: { card: "flex items-center justify-center bg-slate-300", - value: "rounded mx-auto", + value: "rounded mx-auto text-cyan-800", }, isPrettyLoading: true, } as ValueCardConfigProps; @@ -76,8 +76,8 @@ export const tokenGroupCardConfigProps = { address: { isRendering: true, classes: { - card: "m-5 flex items-center justify-center bg-slate-300", - value: "rounded mx-auto", + card: "my-5 flex items-center justify-center bg-slate-300", + value: "rounded mx-auto text-cyan-800", }, isPrettyLoading: true, } as ValueCardConfigProps, diff --git a/packages/nextjs/components/scaffold-eth/Address.tsx b/packages/nextjs/components/scaffold-eth/Address.tsx index 5fee2be..9e56999 100644 --- a/packages/nextjs/components/scaffold-eth/Address.tsx +++ b/packages/nextjs/components/scaffold-eth/Address.tsx @@ -1,21 +1,22 @@ +"use client"; + import { useEffect, useState } from "react"; import Link from "next/link"; import { StringCardProps } from "../rep-tokens/cards/value-cards/StringCard"; -// import { ElementClasses } from "../rep-tokens/types/Types"; import { CopyToClipboard } from "react-copy-to-clipboard"; -import { isAddress } from "viem"; +import { Address as AddressType, isAddress } from "viem"; import { hardhat } from "viem/chains"; import { useEnsAvatar, useEnsName } from "wagmi"; import { CheckCircleIcon, DocumentDuplicateIcon } from "@heroicons/react/24/outline"; import { BlockieAvatar } from "~~/components/scaffold-eth"; -import { getBlockExplorerAddressLink, getTargetNetwork } from "~~/utils/scaffold-eth"; +import { useTargetNetwork } from "~~/hooks/scaffold-eth/useTargetNetwork"; +import { getBlockExplorerAddressLink } from "~~/utils/scaffold-eth"; -type TAddressProps = { - address?: string; +type AddressProps = { + address?: AddressType; disableAddressLink?: boolean; format?: "short" | "long"; size?: "xs" | "sm" | "base" | "lg" | "xl" | "2xl" | "3xl"; - // classes?: ElementClasses; props?: StringCardProps; }; @@ -32,23 +33,14 @@ const blockieSizeMap = { /** * Displays an address (or ENS) with a Blockie image and option to copy address. */ -export const Address = ({ - // address, - disableAddressLink, - format, - size = "base", - // classes = { container: "flex items-center", value: "ml-1.5 text-${size} font-normal" }, - props, -}: TAddressProps) => { +export const Address = ({ address, disableAddressLink, format, size = "base", props }: AddressProps) => { const [ens, setEns] = useState(); const [ensAvatar, setEnsAvatar] = useState(); const [addressCopied, setAddressCopied] = useState(false); - const { data: fetchedEns } = useEnsName({ - address: props?.value, - enabled: isAddress(props?.value ?? ""), - chainId: 1, - }); + const { targetNetwork } = useTargetNetwork(); + + const { data: fetchedEns } = useEnsName({ address, enabled: isAddress(address ?? ""), chainId: 1 }); const { data: fetchedEnsAvatar } = useEnsAvatar({ name: fetchedEns, enabled: Boolean(fetchedEns), @@ -81,8 +73,8 @@ export const Address = ({ return Wrong address; } - const blockExplorerAddressLink = getBlockExplorerAddressLink(getTargetNetwork(), props?.value); - let displayAddress = props?.value?.slice(0, 5) + "..." + props?.value?.slice(-4); + const blockExplorerAddressLink = getBlockExplorerAddressLink(targetNetwork, props?.value); + let displayAddress = props?.value?.slice(0, 5) + "..." + props?.value.slice(-4); if (ens) { displayAddress = ens; @@ -90,49 +82,54 @@ export const Address = ({ displayAddress = props?.value; } - // let textClass = `ml-1.5 text-${size} font-normal text-white`; - return (
-
- -
- {disableAddressLink ? ( - {displayAddress} - ) : getTargetNetwork().id === hardhat.id ? ( - - {displayAddress} - - ) : ( - - {displayAddress} - - )} - {addressCopied ? ( -
); }; diff --git a/packages/nextjs/components/scaffold-eth/Balance.tsx b/packages/nextjs/components/scaffold-eth/Balance.tsx index 7de5e84..7811f5f 100644 --- a/packages/nextjs/components/scaffold-eth/Balance.tsx +++ b/packages/nextjs/components/scaffold-eth/Balance.tsx @@ -1,17 +1,29 @@ +"use client"; + +import { useState } from "react"; +import { Address } from "viem"; import { useAccountBalance } from "~~/hooks/scaffold-eth"; -import { getTargetNetwork } from "~~/utils/scaffold-eth"; +import { useTargetNetwork } from "~~/hooks/scaffold-eth/useTargetNetwork"; -type TBalanceProps = { - address?: string; +type BalanceProps = { + address?: Address; className?: string; + usdMode?: boolean; }; /** * Display (ETH & USD) balance of an ETH address. */ -export const Balance = ({ address, className = "" }: TBalanceProps) => { - const configuredNetwork = getTargetNetwork(); - const { balance, price, isError, isLoading, onToggleBalance, isEthBalance } = useAccountBalance(address); +export const Balance = ({ address, className = "", usdMode }: BalanceProps) => { + const { targetNetwork } = useTargetNetwork(); + const { balance, price, isError, isLoading } = useAccountBalance(address); + const [displayUsdMode, setDisplayUsdMode] = useState(price > 0 ? Boolean(usdMode) : false); + + const toggleBalanceMode = () => { + if (price > 0) { + setDisplayUsdMode(prevMode => !prevMode); + } + }; if (!address || isLoading || balance === null) { return ( @@ -35,18 +47,18 @@ export const Balance = ({ address, className = "" }: TBalanceProps) => { return ( + + } /> ); diff --git a/packages/nextjs/components/scaffold-eth/Input/InputBase.tsx b/packages/nextjs/components/scaffold-eth/Input/InputBase.tsx index 62be760..73d5a4f 100644 --- a/packages/nextjs/components/scaffold-eth/Input/InputBase.tsx +++ b/packages/nextjs/components/scaffold-eth/Input/InputBase.tsx @@ -35,7 +35,7 @@ export const InputBase = string } | undefined = str
{prefix} & { variant?: IntegerVariant; + disableMultiplyBy1e18?: boolean; }; export const IntegerInput = ({ @@ -12,6 +15,7 @@ export const IntegerInput = ({ placeholder, disabled, variant = IntegerVariant.UINT256, + disableMultiplyBy1e18 = false, }: IntegerInputProps) => { const [inputError, setInputError] = useState(false); const multiplyBy1e18 = useCallback(() => { @@ -41,7 +45,8 @@ export const IntegerInput = ({ onChange={onChange} disabled={disabled} suffix={ - !inputError && ( + !inputError && + !disableMultiplyBy1e18 && (
{ +export type CommonInputProps = { value: T; onChange: (newValue: T) => void; name?: string; placeholder?: string; disabled?: boolean; -} +}; export enum IntegerVariant { UINT8 = "uint8", diff --git a/packages/nextjs/components/scaffold-eth/ProgressBar.tsx b/packages/nextjs/components/scaffold-eth/ProgressBar.tsx new file mode 100644 index 0000000..9ade9bc --- /dev/null +++ b/packages/nextjs/components/scaffold-eth/ProgressBar.tsx @@ -0,0 +1,72 @@ +"use client"; + +import { useEffect } from "react"; +import NProgress from "nprogress"; + +type PushStateInput = [data: any, unused: string, url?: string | URL | null | undefined]; + +export function ProgressBar() { + const height = "3px"; + const color = "#2299dd"; + + const styles = ( + + ); + + useEffect(() => { + NProgress.configure({ showSpinner: false }); + + const handleAnchorClick = (event: MouseEvent) => { + const targetUrl = (event.currentTarget as HTMLAnchorElement).href; + const currentUrl = location.href; + if (targetUrl !== currentUrl) { + NProgress.start(); + } + }; + + const handleMutation: MutationCallback = () => { + const anchorElements = document.querySelectorAll("a"); + anchorElements.forEach(anchor => anchor.addEventListener("click", handleAnchorClick)); + }; + + const mutationObserver = new MutationObserver(handleMutation); + mutationObserver.observe(document, { childList: true, subtree: true }); + + window.history.pushState = new Proxy(window.history.pushState, { + apply: (target, thisArg, argArray: PushStateInput) => { + NProgress.done(); + return target.apply(thisArg, argArray); + }, + }); + }); + + return styles; +} diff --git a/packages/nextjs/components/scaffold-eth/RainbowKitCustomConnectButton.tsx b/packages/nextjs/components/scaffold-eth/RainbowKitCustomConnectButton.tsx deleted file mode 100644 index 803bb8c..0000000 --- a/packages/nextjs/components/scaffold-eth/RainbowKitCustomConnectButton.tsx +++ /dev/null @@ -1,195 +0,0 @@ -import { useState } from "react"; -import { ConnectButton } from "@rainbow-me/rainbowkit"; -import { QRCodeSVG } from "qrcode.react"; -import CopyToClipboard from "react-copy-to-clipboard"; -import { useDisconnect, useSwitchNetwork } from "wagmi"; -import { - ArrowLeftOnRectangleIcon, - ArrowTopRightOnSquareIcon, - ArrowsRightLeftIcon, - CheckCircleIcon, - ChevronDownIcon, - DocumentDuplicateIcon, - QrCodeIcon, -} from "@heroicons/react/24/outline"; -import { Address, Balance, BlockieAvatar } from "~~/components/scaffold-eth"; -import { useAutoConnect, useNetworkColor } from "~~/hooks/scaffold-eth"; -import { getBlockExplorerAddressLink, getTargetNetwork } from "~~/utils/scaffold-eth"; - -/** - * Custom Wagmi Connect Button (watch balance + custom design) - */ -export const RainbowKitCustomConnectButton = () => { - useAutoConnect(); - const networkColor = useNetworkColor(); - const configuredNetwork = getTargetNetwork(); - const { disconnect } = useDisconnect(); - const { switchNetwork } = useSwitchNetwork(); - const [addressCopied, setAddressCopied] = useState(false); - - return ( - - {({ account, chain, openConnectModal, mounted }) => { - const connected = mounted && account && chain; - const blockExplorerAddressLink = account - ? getBlockExplorerAddressLink(getTargetNetwork(), account.address) - : undefined; - - return ( - <> - {(() => { - if (!connected) { - return ( - - ); - } - - if (chain.unsupported || chain.id !== configuredNetwork.id) { - return ( -
- -
    -
  • - -
  • -
  • - -
  • -
-
- ); - } - - return ( -
-
- - - {chain.name} - -
-
- -
    -
  • - {addressCopied ? ( -
    -
    - ) : ( - { - setAddressCopied(true); - setTimeout(() => { - setAddressCopied(false); - }, 800); - }} - > -
    -
    -
    - )} -
  • -
  • - -
  • -
  • - -
  • -
  • - -
  • -
-
-
- - -
-
- ); - })()} - - ); - }} -
- ); -}; diff --git a/packages/nextjs/components/scaffold-eth/RainbowKitCustomConnectButton/AddressInfoDropdown.tsx b/packages/nextjs/components/scaffold-eth/RainbowKitCustomConnectButton/AddressInfoDropdown.tsx new file mode 100644 index 0000000..9112d93 --- /dev/null +++ b/packages/nextjs/components/scaffold-eth/RainbowKitCustomConnectButton/AddressInfoDropdown.tsx @@ -0,0 +1,132 @@ +import { useRef, useState } from "react"; +import { NetworkOptions } from "./NetworkOptions"; +import CopyToClipboard from "react-copy-to-clipboard"; +import { Address, useDisconnect } from "wagmi"; +import { + ArrowLeftOnRectangleIcon, + ArrowTopRightOnSquareIcon, + ArrowsRightLeftIcon, + CheckCircleIcon, + ChevronDownIcon, + DocumentDuplicateIcon, + QrCodeIcon, +} from "@heroicons/react/24/outline"; +import { BlockieAvatar } from "~~/components/scaffold-eth"; +import { useOutsideClick } from "~~/hooks/scaffold-eth"; +import { getTargetNetworks } from "~~/utils/scaffold-eth"; + +const allowedNetworks = getTargetNetworks(); + +type AddressInfoDropdownProps = { + address: Address; + blockExplorerAddressLink: string | undefined; + displayName: string; + ensAvatar?: string; +}; + +export const AddressInfoDropdown = ({ + address, + ensAvatar, + displayName, + blockExplorerAddressLink, +}: AddressInfoDropdownProps) => { + const { disconnect } = useDisconnect(); + + const [addressCopied, setAddressCopied] = useState(false); + + const [selectingNetwork, setSelectingNetwork] = useState(false); + const dropdownRef = useRef(null); + const closeDropdown = () => { + setSelectingNetwork(false); + dropdownRef.current?.removeAttribute("open"); + }; + useOutsideClick(dropdownRef, closeDropdown); + + return ( + <> +
+ + + {displayName} + + +
    +
+
+ + ); +}; diff --git a/packages/nextjs/components/scaffold-eth/RainbowKitCustomConnectButton/AddressQRCodeModal.tsx b/packages/nextjs/components/scaffold-eth/RainbowKitCustomConnectButton/AddressQRCodeModal.tsx new file mode 100644 index 0000000..98cb166 --- /dev/null +++ b/packages/nextjs/components/scaffold-eth/RainbowKitCustomConnectButton/AddressQRCodeModal.tsx @@ -0,0 +1,33 @@ +import { QRCodeSVG } from "qrcode.react"; +import { Address as AddressType } from "viem"; +import { Address } from "~~/components/scaffold-eth"; + +type AddressQRCodeModalProps = { + address: AddressType; + modalId: string; +}; + +export const AddressQRCodeModal = ({ address, modalId }: AddressQRCodeModalProps) => { + return ( + <> +
+ + +
+ + ); +}; diff --git a/packages/nextjs/components/scaffold-eth/RainbowKitCustomConnectButton/NetworkOptions.tsx b/packages/nextjs/components/scaffold-eth/RainbowKitCustomConnectButton/NetworkOptions.tsx new file mode 100644 index 0000000..b81fe1a --- /dev/null +++ b/packages/nextjs/components/scaffold-eth/RainbowKitCustomConnectButton/NetworkOptions.tsx @@ -0,0 +1,47 @@ +import { useNetwork, useSwitchNetwork } from "wagmi"; +import { ArrowsRightLeftIcon } from "@heroicons/react/24/solid"; +import { getNetworkColor } from "~~/hooks/scaffold-eth"; +import { useDarkMode } from "~~/hooks/scaffold-eth/useDarkMode"; +import { getTargetNetworks } from "~~/utils/scaffold-eth"; + +const allowedNetworks = getTargetNetworks(); + +type NetworkOptionsProps = { + hidden?: boolean; +}; + +export const NetworkOptions = ({ hidden = false }: NetworkOptionsProps) => { + const { isDarkMode } = useDarkMode(); + const { switchNetwork } = useSwitchNetwork(); + const { chain } = useNetwork(); + + return ( + <> + {allowedNetworks + .filter(allowedNetwork => allowedNetwork.id !== chain?.id) + .map(allowedNetwork => ( +
  • + +
  • + ))} + + ); +}; diff --git a/packages/nextjs/components/scaffold-eth/RainbowKitCustomConnectButton/WrongNetworkDropdown.tsx b/packages/nextjs/components/scaffold-eth/RainbowKitCustomConnectButton/WrongNetworkDropdown.tsx new file mode 100644 index 0000000..f9f0fd8 --- /dev/null +++ b/packages/nextjs/components/scaffold-eth/RainbowKitCustomConnectButton/WrongNetworkDropdown.tsx @@ -0,0 +1,32 @@ +import { NetworkOptions } from "./NetworkOptions"; +import { useDisconnect } from "wagmi"; +import { ArrowLeftOnRectangleIcon, ChevronDownIcon } from "@heroicons/react/24/outline"; + +export const WrongNetworkDropdown = () => { + const { disconnect } = useDisconnect(); + + return ( +
    + +
      + +
    • + +
    • +
    +
    + ); +}; diff --git a/packages/nextjs/components/scaffold-eth/RainbowKitCustomConnectButton/index.tsx b/packages/nextjs/components/scaffold-eth/RainbowKitCustomConnectButton/index.tsx new file mode 100644 index 0000000..d0d6040 --- /dev/null +++ b/packages/nextjs/components/scaffold-eth/RainbowKitCustomConnectButton/index.tsx @@ -0,0 +1,68 @@ +"use client"; + +// @refresh reset +import { Balance } from "../Balance"; +import { AddressInfoDropdown } from "./AddressInfoDropdown"; +import { AddressQRCodeModal } from "./AddressQRCodeModal"; +import { WrongNetworkDropdown } from "./WrongNetworkDropdown"; +import { ConnectButton } from "@rainbow-me/rainbowkit"; +import { Address } from "viem"; +import { useAutoConnect, useNetworkColor } from "~~/hooks/scaffold-eth"; +import { useTargetNetwork } from "~~/hooks/scaffold-eth/useTargetNetwork"; +import { getBlockExplorerAddressLink } from "~~/utils/scaffold-eth"; + +/** + * Custom Wagmi Connect Button (watch balance + custom design) + */ +export const RainbowKitCustomConnectButton = () => { + useAutoConnect(); + const networkColor = useNetworkColor(); + const { targetNetwork } = useTargetNetwork(); + + return ( + + {({ account, chain, openConnectModal, mounted }) => { + const connected = mounted && account && chain; + const blockExplorerAddressLink = account + ? getBlockExplorerAddressLink(targetNetwork, account.address) + : undefined; + + return ( + <> + {(() => { + if (!connected) { + return ( + + ); + } + + if (chain.unsupported || chain.id !== targetNetwork.id) { + return ; + } + + return ( + <> +
    + + + {chain.name} + +
    + + + + ); + })()} + + ); + }} +
    + ); +}; diff --git a/packages/nextjs/components/scaffold-eth/index.tsx b/packages/nextjs/components/scaffold-eth/index.tsx index 5d51ad5..bf1e8a7 100644 --- a/packages/nextjs/components/scaffold-eth/index.tsx +++ b/packages/nextjs/components/scaffold-eth/index.tsx @@ -1,7 +1,6 @@ export * from "./Address"; export * from "./Balance"; export * from "./BlockieAvatar"; -export * from "./Contract"; export * from "./Faucet"; export * from "./FaucetButton"; export * from "./Input"; diff --git a/packages/nextjs/contracts/deployedContracts.ts b/packages/nextjs/contracts/deployedContracts.ts index d35ae73..5a467d5 100644 --- a/packages/nextjs/contracts/deployedContracts.ts +++ b/packages/nextjs/contracts/deployedContracts.ts @@ -7,7 +7,7 @@ import { GenericContractsDeclaration } from "~~/utils/scaffold-eth/contract"; const deployedContracts = { 31337: { ReputationTokensStandalone: { - address: "0x5FbDB2315678afecb367f032d93F642f64180aa3", + address: "0x84eA74d481Ee0A5332c457a4d796187F6Ba67fEB", abi: [ { type: "constructor", @@ -1514,6 +1514,49 @@ const deployedContracts = { inputs: [], }, ], + inheritedFunctions: { + BURNER_ROLE: "lib/reputation/src/ReputationTokensBase.sol", + DISTRIBUTOR_ROLE: "lib/reputation/src/ReputationTokensBase.sol", + MINTER_ROLE: "lib/reputation/src/ReputationTokensBase.sol", + TOKEN_CREATOR_ROLE: "lib/reputation/src/ReputationTokensBase.sol", + TOKEN_MIGRATOR_ROLE: "lib/reputation/src/ReputationTokensBase.sol", + TOKEN_UPDATER_ROLE: "lib/reputation/src/ReputationTokensBase.sol", + TOKEN_URI_SETTER_ROLE: "lib/reputation/src/ReputationTokensBase.sol", + acceptOwnership: "lib/reputation/src/ReputationTokensBase.sol", + accountsByToken: "lib/reputation/src/ReputationTokensBase.sol", + balanceOf: "lib/reputation/src/ReputationTokensBase.sol", + balanceOfBatch: "lib/reputation/src/ReputationTokensBase.sol", + batchCreateTokens: "lib/reputation/src/ReputationTokensBase.sol", + batchUpdateTokens: "lib/reputation/src/ReputationTokensBase.sol", + createToken: "lib/reputation/src/ReputationTokensBase.sol", + distribute: "lib/reputation/src/ReputationTokensBase.sol", + distributeBatch: "lib/reputation/src/ReputationTokensBase.sol", + getRoleAdmin: "lib/reputation/src/ReputationTokensBase.sol", + getRoleMember: "lib/reputation/src/ReputationTokensBase.sol", + getRoleMemberCount: "lib/reputation/src/ReputationTokensBase.sol", + grantRole: "lib/reputation/src/ReputationTokensBase.sol", + hasRole: "lib/reputation/src/ReputationTokensBase.sol", + isApprovedForAll: "lib/reputation/src/ReputationTokensBase.sol", + migrateOwnershipOfTokens: "lib/reputation/src/ReputationTokensBase.sol", + mint: "lib/reputation/src/ReputationTokensBase.sol", + mintBatch: "lib/reputation/src/ReputationTokensBase.sol", + nomineeOwner: "lib/reputation/src/ReputationTokensBase.sol", + owner: "lib/reputation/src/ReputationTokensBase.sol", + renounceRole: "lib/reputation/src/ReputationTokensBase.sol", + revokeRole: "lib/reputation/src/ReputationTokensBase.sol", + safeBatchTransferFrom: "lib/reputation/src/ReputationTokensBase.sol", + safeTransferFrom: "lib/reputation/src/ReputationTokensBase.sol", + setApprovalForAll: "lib/reputation/src/ReputationTokensBase.sol", + setDestinationWallet: "lib/reputation/src/ReputationTokensBase.sol", + setTokenURI: "lib/reputation/src/ReputationTokensBase.sol", + supportsInterface: "lib/reputation/src/ReputationTokensBase.sol", + tokensByAccount: "lib/reputation/src/ReputationTokensBase.sol", + totalHolders: "lib/reputation/src/ReputationTokensBase.sol", + totalSupply: "lib/reputation/src/ReputationTokensBase.sol", + transferOwnership: "lib/reputation/src/ReputationTokensBase.sol", + updateToken: "lib/reputation/src/ReputationTokensBase.sol", + uri: "lib/reputation/src/ReputationTokensBase.sol", + }, }, }, } as const; diff --git a/packages/nextjs/contracts/externalContracts.ts b/packages/nextjs/contracts/externalContracts.ts index 10b4c31..ab6daa8 100644 --- a/packages/nextjs/contracts/externalContracts.ts +++ b/packages/nextjs/contracts/externalContracts.ts @@ -5,1995 +5,12 @@ import { GenericContractsDeclaration } from "~~/utils/scaffold-eth/contract"; * const externalContracts = { * 1: { * DAI: { - * address: "0x...", - * abi: [...], - * } + * address: "0x...", + * abi: [...], + * }, + * }, * } as const; */ -const externalContracts = { - 5: { - CadentRepDistributor: { - address: "0xDaa8dDd19899D4b02faed9c5bCE751378C36f122", - abi: [ - { - inputs: [ - { internalType: "address", name: "rep", type: "address" }, - { internalType: "uint256", name: "amountDistributedPerCadence", type: "uint256" }, - { internalType: "uint256", name: "cadenceCycle", type: "uint256" }, - ], - stateMutability: "nonpayable", - type: "constructor", - }, - { inputs: [], name: "CadentRepDistributor__NOT_ENOUGH_TIME_PASSED", type: "error" }, - { inputs: [], name: "CadentRepDistributor__NOT_ENOUGH_TOkENS_TO_DISTRIBUTE", type: "error" }, - { - anonymous: false, - inputs: [{ indexed: true, internalType: "address", name: "recipient", type: "address" }], - name: "DistributedRep", - type: "event", - }, - { inputs: [], name: "claim", outputs: [], stateMutability: "nonpayable", type: "function" }, - { - inputs: [], - name: "getAmountToDistributePerCadence", - outputs: [{ internalType: "uint256", name: "", type: "uint256" }], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "getCadence", - outputs: [{ internalType: "uint256", name: "", type: "uint256" }], - stateMutability: "view", - type: "function", - }, - { - inputs: [{ internalType: "address", name: "addr", type: "address" }], - name: "getRemainingTime", - outputs: [{ internalType: "int256", name: "", type: "int256" }], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { internalType: "address", name: "", type: "address" }, - { internalType: "address", name: "", type: "address" }, - { internalType: "uint256[]", name: "", type: "uint256[]" }, - { internalType: "uint256[]", name: "", type: "uint256[]" }, - { internalType: "bytes", name: "", type: "bytes" }, - ], - name: "onERC1155BatchReceived", - outputs: [{ internalType: "bytes4", name: "", type: "bytes4" }], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { internalType: "address", name: "", type: "address" }, - { internalType: "address", name: "", type: "address" }, - { internalType: "uint256", name: "", type: "uint256" }, - { internalType: "uint256", name: "", type: "uint256" }, - { internalType: "bytes", name: "", type: "bytes" }, - ], - name: "onERC1155Received", - outputs: [{ internalType: "bytes4", name: "", type: "bytes4" }], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [{ internalType: "bytes4", name: "interfaceId", type: "bytes4" }], - name: "supportsInterface", - outputs: [{ internalType: "bool", name: "", type: "bool" }], - stateMutability: "view", - type: "function", - }, - ], - }, - Hats: { - address: "0x3bc1A0Ad72417f2d411118085256fC53CBdDd137", - abi: [ - { - inputs: [ - { - internalType: "string", - name: "_name", - type: "string", - }, - { - internalType: "string", - name: "_baseImageURI", - type: "string", - }, - ], - stateMutability: "nonpayable", - type: "constructor", - }, - { - inputs: [ - { - internalType: "uint256", - name: "hatId", - type: "uint256", - }, - ], - name: "AllHatsWorn", - type: "error", - }, - { - inputs: [ - { - internalType: "address", - name: "wearer", - type: "address", - }, - { - internalType: "uint256", - name: "hatId", - type: "uint256", - }, - ], - name: "AlreadyWearingHat", - type: "error", - }, - { - inputs: [], - name: "BatchArrayLengthMismatch", - type: "error", - }, - { - inputs: [], - name: "CircularLinkage", - type: "error", - }, - { - inputs: [], - name: "CrossTreeLinkage", - type: "error", - }, - { - inputs: [ - { - internalType: "uint256", - name: "hatId", - type: "uint256", - }, - ], - name: "HatDoesNotExist", - type: "error", - }, - { - inputs: [], - name: "HatNotActive", - type: "error", - }, - { - inputs: [], - name: "Immutable", - type: "error", - }, - { - inputs: [], - name: "InvalidHatId", - type: "error", - }, - { - inputs: [], - name: "InvalidUnlink", - type: "error", - }, - { - inputs: [], - name: "LinkageNotRequested", - type: "error", - }, - { - inputs: [], - name: "MaxLevelsReached", - type: "error", - }, - { - inputs: [], - name: "MaxLevelsReached", - type: "error", - }, - { - inputs: [], - name: "NewMaxSupplyTooLow", - type: "error", - }, - { - inputs: [ - { - internalType: "address", - name: "user", - type: "address", - }, - { - internalType: "uint256", - name: "hatId", - type: "uint256", - }, - ], - name: "NotAdmin", - type: "error", - }, - { - inputs: [], - name: "NotAdminOrWearer", - type: "error", - }, - { - inputs: [], - name: "NotEligible", - type: "error", - }, - { - inputs: [], - name: "NotHatWearer", - type: "error", - }, - { - inputs: [], - name: "NotHatsEligibility", - type: "error", - }, - { - inputs: [], - name: "NotHatsToggle", - type: "error", - }, - { - inputs: [], - name: "StringTooLong", - type: "error", - }, - { - inputs: [], - name: "ZeroAddress", - type: "error", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "owner", - type: "address", - }, - { - indexed: true, - internalType: "address", - name: "operator", - type: "address", - }, - { - indexed: false, - internalType: "bool", - name: "approved", - type: "bool", - }, - ], - name: "ApprovalForAll", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "uint256", - name: "id", - type: "uint256", - }, - { - indexed: false, - internalType: "string", - name: "details", - type: "string", - }, - { - indexed: false, - internalType: "uint32", - name: "maxSupply", - type: "uint32", - }, - { - indexed: false, - internalType: "address", - name: "eligibility", - type: "address", - }, - { - indexed: false, - internalType: "address", - name: "toggle", - type: "address", - }, - { - indexed: false, - internalType: "bool", - name: "mutable_", - type: "bool", - }, - { - indexed: false, - internalType: "string", - name: "imageURI", - type: "string", - }, - ], - name: "HatCreated", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "uint256", - name: "hatId", - type: "uint256", - }, - { - indexed: false, - internalType: "string", - name: "newDetails", - type: "string", - }, - ], - name: "HatDetailsChanged", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "uint256", - name: "hatId", - type: "uint256", - }, - { - indexed: false, - internalType: "address", - name: "newEligibility", - type: "address", - }, - ], - name: "HatEligibilityChanged", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "uint256", - name: "hatId", - type: "uint256", - }, - { - indexed: false, - internalType: "string", - name: "newImageURI", - type: "string", - }, - ], - name: "HatImageURIChanged", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "uint256", - name: "hatId", - type: "uint256", - }, - { - indexed: false, - internalType: "uint32", - name: "newMaxSupply", - type: "uint32", - }, - ], - name: "HatMaxSupplyChanged", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "uint256", - name: "hatId", - type: "uint256", - }, - ], - name: "HatMutabilityChanged", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "uint256", - name: "hatId", - type: "uint256", - }, - { - indexed: false, - internalType: "bool", - name: "newStatus", - type: "bool", - }, - ], - name: "HatStatusChanged", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "uint256", - name: "hatId", - type: "uint256", - }, - { - indexed: false, - internalType: "address", - name: "newToggle", - type: "address", - }, - ], - name: "HatToggleChanged", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "uint32", - name: "domain", - type: "uint32", - }, - { - indexed: false, - internalType: "uint256", - name: "newAdmin", - type: "uint256", - }, - ], - name: "TopHatLinkRequested", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "uint32", - name: "domain", - type: "uint32", - }, - { - indexed: false, - internalType: "uint256", - name: "newAdmin", - type: "uint256", - }, - ], - name: "TopHatLinked", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "operator", - type: "address", - }, - { - indexed: true, - internalType: "address", - name: "from", - type: "address", - }, - { - indexed: true, - internalType: "address", - name: "to", - type: "address", - }, - { - indexed: false, - internalType: "uint256[]", - name: "ids", - type: "uint256[]", - }, - { - indexed: false, - internalType: "uint256[]", - name: "amounts", - type: "uint256[]", - }, - ], - name: "TransferBatch", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "operator", - type: "address", - }, - { - indexed: true, - internalType: "address", - name: "from", - type: "address", - }, - { - indexed: true, - internalType: "address", - name: "to", - type: "address", - }, - { - indexed: false, - internalType: "uint256", - name: "id", - type: "uint256", - }, - { - indexed: false, - internalType: "uint256", - name: "amount", - type: "uint256", - }, - ], - name: "TransferSingle", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "string", - name: "value", - type: "string", - }, - { - indexed: true, - internalType: "uint256", - name: "id", - type: "uint256", - }, - ], - name: "URI", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "uint256", - name: "hatId", - type: "uint256", - }, - { - indexed: false, - internalType: "address", - name: "wearer", - type: "address", - }, - { - indexed: false, - internalType: "bool", - name: "wearerStanding", - type: "bool", - }, - ], - name: "WearerStandingChanged", - type: "event", - }, - { - inputs: [ - { - internalType: "uint32", - name: "_topHatDomain", - type: "uint32", - }, - { - internalType: "uint256", - name: "_newAdminHat", - type: "uint256", - }, - { - internalType: "address", - name: "_eligibility", - type: "address", - }, - { - internalType: "address", - name: "_toggle", - type: "address", - }, - { - internalType: "string", - name: "_details", - type: "string", - }, - { - internalType: "string", - name: "_imageURI", - type: "string", - }, - ], - name: "approveLinkTopHatToTree", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - { - internalType: "address", - name: "", - type: "address", - }, - ], - name: "badStandings", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "_wearer", - type: "address", - }, - { - internalType: "uint256", - name: "_hatId", - type: "uint256", - }, - ], - name: "balanceOf", - outputs: [ - { - internalType: "uint256", - name: "balance", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address[]", - name: "_wearers", - type: "address[]", - }, - { - internalType: "uint256[]", - name: "_hatIds", - type: "uint256[]", - }, - ], - name: "balanceOfBatch", - outputs: [ - { - internalType: "uint256[]", - name: "balances", - type: "uint256[]", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "baseImageURI", - outputs: [ - { - internalType: "string", - name: "", - type: "string", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256[]", - name: "_admins", - type: "uint256[]", - }, - { - internalType: "string[]", - name: "_details", - type: "string[]", - }, - { - internalType: "uint32[]", - name: "_maxSupplies", - type: "uint32[]", - }, - { - internalType: "address[]", - name: "_eligibilityModules", - type: "address[]", - }, - { - internalType: "address[]", - name: "_toggleModules", - type: "address[]", - }, - { - internalType: "bool[]", - name: "_mutables", - type: "bool[]", - }, - { - internalType: "string[]", - name: "_imageURIs", - type: "string[]", - }, - ], - name: "batchCreateHats", - outputs: [ - { - internalType: "bool", - name: "success", - type: "bool", - }, - ], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256[]", - name: "_hatIds", - type: "uint256[]", - }, - { - internalType: "address[]", - name: "_wearers", - type: "address[]", - }, - ], - name: "batchMintHats", - outputs: [ - { - internalType: "bool", - name: "success", - type: "bool", - }, - ], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_admin", - type: "uint256", - }, - { - internalType: "uint16", - name: "_newHat", - type: "uint16", - }, - ], - name: "buildHatId", - outputs: [ - { - internalType: "uint256", - name: "id", - type: "uint256", - }, - ], - stateMutability: "pure", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_hatId", - type: "uint256", - }, - { - internalType: "string", - name: "_newDetails", - type: "string", - }, - ], - name: "changeHatDetails", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_hatId", - type: "uint256", - }, - { - internalType: "address", - name: "_newEligibility", - type: "address", - }, - ], - name: "changeHatEligibility", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_hatId", - type: "uint256", - }, - { - internalType: "string", - name: "_newImageURI", - type: "string", - }, - ], - name: "changeHatImageURI", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_hatId", - type: "uint256", - }, - { - internalType: "uint32", - name: "_newMaxSupply", - type: "uint32", - }, - ], - name: "changeHatMaxSupply", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_hatId", - type: "uint256", - }, - { - internalType: "address", - name: "_newToggle", - type: "address", - }, - ], - name: "changeHatToggle", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_hatId", - type: "uint256", - }, - ], - name: "checkHatStatus", - outputs: [ - { - internalType: "bool", - name: "toggled", - type: "bool", - }, - ], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_hatId", - type: "uint256", - }, - { - internalType: "address", - name: "_wearer", - type: "address", - }, - ], - name: "checkHatWearerStatus", - outputs: [ - { - internalType: "bool", - name: "updated", - type: "bool", - }, - ], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_admin", - type: "uint256", - }, - { - internalType: "string", - name: "_details", - type: "string", - }, - { - internalType: "uint32", - name: "_maxSupply", - type: "uint32", - }, - { - internalType: "address", - name: "_eligibility", - type: "address", - }, - { - internalType: "address", - name: "_toggle", - type: "address", - }, - { - internalType: "bool", - name: "_mutable", - type: "bool", - }, - { - internalType: "string", - name: "_imageURI", - type: "string", - }, - ], - name: "createHat", - outputs: [ - { - internalType: "uint256", - name: "newHatId", - type: "uint256", - }, - ], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_hatId", - type: "uint256", - }, - { - internalType: "uint32", - name: "_level", - type: "uint32", - }, - ], - name: "getAdminAtLevel", - outputs: [ - { - internalType: "uint256", - name: "admin", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_hatId", - type: "uint256", - }, - { - internalType: "uint32", - name: "_level", - type: "uint32", - }, - ], - name: "getAdminAtLocalLevel", - outputs: [ - { - internalType: "uint256", - name: "admin", - type: "uint256", - }, - ], - stateMutability: "pure", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_hatId", - type: "uint256", - }, - ], - name: "getHatEligibilityModule", - outputs: [ - { - internalType: "address", - name: "eligibility", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_hatId", - type: "uint256", - }, - ], - name: "getHatLevel", - outputs: [ - { - internalType: "uint32", - name: "level", - type: "uint32", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_hatId", - type: "uint256", - }, - ], - name: "getHatMaxSupply", - outputs: [ - { - internalType: "uint32", - name: "maxSupply", - type: "uint32", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_hatId", - type: "uint256", - }, - ], - name: "getHatToggleModule", - outputs: [ - { - internalType: "address", - name: "toggle", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_hatId", - type: "uint256", - }, - ], - name: "getImageURIForHat", - outputs: [ - { - internalType: "string", - name: "_uri", - type: "string", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_hatId", - type: "uint256", - }, - ], - name: "getLocalHatLevel", - outputs: [ - { - internalType: "uint32", - name: "level", - type: "uint32", - }, - ], - stateMutability: "pure", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_admin", - type: "uint256", - }, - ], - name: "getNextId", - outputs: [ - { - internalType: "uint256", - name: "nextId", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint32", - name: "_topHatDomain", - type: "uint32", - }, - ], - name: "getTippyTopHatDomain", - outputs: [ - { - internalType: "uint32", - name: "domain", - type: "uint32", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_hatId", - type: "uint256", - }, - ], - name: "getTopHatDomain", - outputs: [ - { - internalType: "uint32", - name: "domain", - type: "uint32", - }, - ], - stateMutability: "pure", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_hatId", - type: "uint256", - }, - ], - name: "hatSupply", - outputs: [ - { - internalType: "uint32", - name: "supply", - type: "uint32", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_hatId", - type: "uint256", - }, - ], - name: "isActive", - outputs: [ - { - internalType: "bool", - name: "active", - type: "bool", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "_user", - type: "address", - }, - { - internalType: "uint256", - name: "_hatId", - type: "uint256", - }, - ], - name: "isAdminOfHat", - outputs: [ - { - internalType: "bool", - name: "isAdmin", - type: "bool", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - { - internalType: "address", - name: "", - type: "address", - }, - ], - name: "isApprovedForAll", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "_wearer", - type: "address", - }, - { - internalType: "uint256", - name: "_hatId", - type: "uint256", - }, - ], - name: "isEligible", - outputs: [ - { - internalType: "bool", - name: "eligible", - type: "bool", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "_wearer", - type: "address", - }, - { - internalType: "uint256", - name: "_hatId", - type: "uint256", - }, - ], - name: "isInGoodStanding", - outputs: [ - { - internalType: "bool", - name: "standing", - type: "bool", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_hatId", - type: "uint256", - }, - ], - name: "isLocalTopHat", - outputs: [ - { - internalType: "bool", - name: "_isLocalTopHat", - type: "bool", - }, - ], - stateMutability: "pure", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_hatId", - type: "uint256", - }, - ], - name: "isTopHat", - outputs: [ - { - internalType: "bool", - name: "_isTopHat", - type: "bool", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_hatId", - type: "uint256", - }, - ], - name: "isValidHatId", - outputs: [ - { - internalType: "bool", - name: "validHatId", - type: "bool", - }, - ], - stateMutability: "pure", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "_user", - type: "address", - }, - { - internalType: "uint256", - name: "_hatId", - type: "uint256", - }, - ], - name: "isWearerOfHat", - outputs: [ - { - internalType: "bool", - name: "isWearer", - type: "bool", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "lastTopHatId", - outputs: [ - { - internalType: "uint32", - name: "", - type: "uint32", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint32", - name: "", - type: "uint32", - }, - ], - name: "linkedTreeAdmins", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint32", - name: "", - type: "uint32", - }, - ], - name: "linkedTreeRequests", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_hatId", - type: "uint256", - }, - ], - name: "makeHatImmutable", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_hatId", - type: "uint256", - }, - { - internalType: "address", - name: "_wearer", - type: "address", - }, - ], - name: "mintHat", - outputs: [ - { - internalType: "bool", - name: "success", - type: "bool", - }, - ], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "_target", - type: "address", - }, - { - internalType: "string", - name: "_details", - type: "string", - }, - { - internalType: "string", - name: "_imageURI", - type: "string", - }, - ], - name: "mintTopHat", - outputs: [ - { - internalType: "uint256", - name: "topHatId", - type: "uint256", - }, - ], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "bytes[]", - name: "data", - type: "bytes[]", - }, - ], - name: "multicall", - outputs: [ - { - internalType: "bytes[]", - name: "", - type: "bytes[]", - }, - ], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "name", - outputs: [ - { - internalType: "string", - name: "", - type: "string", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint32", - name: "_topHatDomain", - type: "uint32", - }, - { - internalType: "uint256", - name: "_linkedAdmin", - type: "uint256", - }, - ], - name: "noCircularLinkage", - outputs: [ - { - internalType: "bool", - name: "notCircular", - type: "bool", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint32", - name: "_topHatDomain", - type: "uint32", - }, - { - internalType: "uint256", - name: "_newAdminHat", - type: "uint256", - }, - { - internalType: "address", - name: "_eligibility", - type: "address", - }, - { - internalType: "address", - name: "_toggle", - type: "address", - }, - { - internalType: "string", - name: "_details", - type: "string", - }, - { - internalType: "string", - name: "_imageURI", - type: "string", - }, - ], - name: "relinkTopHatWithinTree", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_hatId", - type: "uint256", - }, - ], - name: "renounceHat", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint32", - name: "_topHatDomain", - type: "uint32", - }, - { - internalType: "uint256", - name: "_requestedAdminHat", - type: "uint256", - }, - ], - name: "requestLinkTopHatToTree", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - { - internalType: "address", - name: "", - type: "address", - }, - { - internalType: "uint256[]", - name: "", - type: "uint256[]", - }, - { - internalType: "uint256[]", - name: "", - type: "uint256[]", - }, - { - internalType: "bytes", - name: "", - type: "bytes", - }, - ], - name: "safeBatchTransferFrom", - outputs: [], - stateMutability: "pure", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - { - internalType: "address", - name: "", - type: "address", - }, - { - internalType: "uint256", - name: "", - type: "uint256", - }, - { - internalType: "uint256", - name: "", - type: "uint256", - }, - { - internalType: "bytes", - name: "", - type: "bytes", - }, - ], - name: "safeTransferFrom", - outputs: [], - stateMutability: "pure", - type: "function", - }, - { - inputs: [ - { - internalType: "uint32", - name: "_topHatDomain", - type: "uint32", - }, - { - internalType: "uint256", - name: "_newAdminHat", - type: "uint256", - }, - ], - name: "sameTippyTopHatDomain", - outputs: [ - { - internalType: "bool", - name: "sameDomain", - type: "bool", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - name: "setApprovalForAll", - outputs: [], - stateMutability: "pure", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_hatId", - type: "uint256", - }, - { - internalType: "bool", - name: "_newStatus", - type: "bool", - }, - ], - name: "setHatStatus", - outputs: [ - { - internalType: "bool", - name: "toggled", - type: "bool", - }, - ], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_hatId", - type: "uint256", - }, - { - internalType: "address", - name: "_wearer", - type: "address", - }, - { - internalType: "bool", - name: "_eligible", - type: "bool", - }, - { - internalType: "bool", - name: "_standing", - type: "bool", - }, - ], - name: "setHatWearerStatus", - outputs: [ - { - internalType: "bool", - name: "updated", - type: "bool", - }, - ], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "bytes4", - name: "interfaceId", - type: "bytes4", - }, - ], - name: "supportsInterface", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "pure", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_hatId", - type: "uint256", - }, - { - internalType: "address", - name: "_from", - type: "address", - }, - { - internalType: "address", - name: "_to", - type: "address", - }, - ], - name: "transferHat", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint32", - name: "_topHatDomain", - type: "uint32", - }, - { - internalType: "address", - name: "_wearer", - type: "address", - }, - ], - name: "unlinkTopHatFromTree", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "id", - type: "uint256", - }, - ], - name: "uri", - outputs: [ - { - internalType: "string", - name: "_uri", - type: "string", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_hatId", - type: "uint256", - }, - ], - name: "viewHat", - outputs: [ - { - internalType: "string", - name: "details", - type: "string", - }, - { - internalType: "uint32", - name: "maxSupply", - type: "uint32", - }, - { - internalType: "uint32", - name: "supply", - type: "uint32", - }, - { - internalType: "address", - name: "eligibility", - type: "address", - }, - { - internalType: "address", - name: "toggle", - type: "address", - }, - { - internalType: "string", - name: "imageURI", - type: "string", - }, - { - internalType: "uint16", - name: "lastHatId", - type: "uint16", - }, - { - internalType: "bool", - name: "mutable_", - type: "bool", - }, - { - internalType: "bool", - name: "active", - type: "bool", - }, - ], - stateMutability: "view", - type: "function", - }, - ], - }, - }, -} as const; +const externalContracts = {} as const; export default externalContracts satisfies GenericContractsDeclaration; diff --git a/packages/nextjs/hooks/scaffold-eth/useAccountBalance.ts b/packages/nextjs/hooks/scaffold-eth/useAccountBalance.ts index 01cc076..b52fb21 100644 --- a/packages/nextjs/hooks/scaffold-eth/useAccountBalance.ts +++ b/packages/nextjs/hooks/scaffold-eth/useAccountBalance.ts @@ -1,12 +1,14 @@ import { useCallback, useEffect, useState } from "react"; +import { useTargetNetwork } from "./useTargetNetwork"; +import { Address } from "viem"; import { useBalance } from "wagmi"; import { useGlobalState } from "~~/services/store/store"; -import { getTargetNetwork } from "~~/utils/scaffold-eth"; -export function useAccountBalance(address?: string) { +export function useAccountBalance(address?: Address) { const [isEthBalance, setIsEthBalance] = useState(true); const [balance, setBalance] = useState(null); const price = useGlobalState(state => state.nativeCurrencyPrice); + const { targetNetwork } = useTargetNetwork(); const { data: fetchedBalanceData, @@ -15,7 +17,7 @@ export function useAccountBalance(address?: string) { } = useBalance({ address, watch: true, - chainId: getTargetNetwork().id, + chainId: targetNetwork.id, }); const onToggleBalance = useCallback(() => { @@ -28,7 +30,7 @@ export function useAccountBalance(address?: string) { if (fetchedBalanceData?.formatted) { setBalance(Number(fetchedBalanceData.formatted)); } - }, [fetchedBalanceData]); + }, [fetchedBalanceData, targetNetwork]); return { balance, price, isError, isLoading, onToggleBalance, isEthBalance }; } diff --git a/packages/nextjs/hooks/scaffold-eth/useAutoConnect.ts b/packages/nextjs/hooks/scaffold-eth/useAutoConnect.ts index baf2b11..f0f9129 100644 --- a/packages/nextjs/hooks/scaffold-eth/useAutoConnect.ts +++ b/packages/nextjs/hooks/scaffold-eth/useAutoConnect.ts @@ -1,12 +1,11 @@ -import { useEffect } from "react"; import { useEffectOnce, useLocalStorage, useReadLocalStorage } from "usehooks-ts"; -import { hardhat } from "viem/chains"; +import { Chain, hardhat } from "viem/chains"; import { Connector, useAccount, useConnect } from "wagmi"; import scaffoldConfig from "~~/scaffold.config"; -import { burnerWalletId, defaultBurnerChainId } from "~~/services/web3/wagmi-burner/BurnerConnector"; -import { getTargetNetwork } from "~~/utils/scaffold-eth"; +import { burnerWalletId } from "~~/services/web3/wagmi-burner/BurnerConnector"; +import { getTargetNetworks } from "~~/utils/scaffold-eth"; -const SCAFFOLD_WALLET_STROAGE_KEY = "scaffoldEth2.wallet"; +const SCAFFOLD_WALLET_STORAGE_KEY = "scaffoldEth2.wallet"; const WAGMI_WALLET_STORAGE_KEY = "wagmi.wallet"; // ID of the SAFE connector instance @@ -14,11 +13,13 @@ const SAFE_ID = "safe"; /** * This function will get the initial wallet connector (if any), the app will connect to + * @param initialNetwork * @param previousWalletId * @param connectors * @returns */ const getInitialConnector = ( + initialNetwork: Chain, previousWalletId: string, connectors: Connector[], ): { connector: Connector | undefined; chainId?: number } | undefined => { @@ -29,14 +30,13 @@ const getInitialConnector = ( return { connector: safeConnectorInstance }; } - const targetNetwork = getTargetNetwork(); - const allowBurner = scaffoldConfig.onlyLocalBurnerWallet ? targetNetwork.id === hardhat.id : true; + const allowBurner = scaffoldConfig.onlyLocalBurnerWallet ? initialNetwork.id === hardhat.id : true; if (!previousWalletId) { // The user was not connected to a wallet if (allowBurner && scaffoldConfig.walletAutoConnect) { const connector = connectors.find(f => f.id === burnerWalletId); - return { connector, chainId: defaultBurnerChainId }; + return { connector, chainId: initialNetwork.id }; } } else { // the user was connected to wallet @@ -58,24 +58,20 @@ const getInitialConnector = ( */ export const useAutoConnect = (): void => { const wagmiWalletValue = useReadLocalStorage(WAGMI_WALLET_STORAGE_KEY); - const [walletId, setWalletId] = useLocalStorage(SCAFFOLD_WALLET_STROAGE_KEY, wagmiWalletValue ?? ""); + const [walletId, setWalletId] = useLocalStorage(SCAFFOLD_WALLET_STORAGE_KEY, wagmiWalletValue ?? ""); const connectState = useConnect(); - const accountState = useAccount(); - - useEffect(() => { - if (accountState.isConnected) { - // user is connected, set walletName - setWalletId(accountState.connector?.id ?? ""); - } else { - // user has disconnected, reset walletName + useAccount({ + onConnect({ connector }) { + setWalletId(connector?.id ?? ""); + }, + onDisconnect() { window.localStorage.setItem(WAGMI_WALLET_STORAGE_KEY, JSON.stringify("")); setWalletId(""); - } - // eslint-disable-next-line react-hooks/exhaustive-deps - }, [accountState.isConnected, accountState.connector?.name]); + }, + }); useEffectOnce(() => { - const initialConnector = getInitialConnector(walletId, connectState.connectors); + const initialConnector = getInitialConnector(getTargetNetworks()[0], walletId, connectState.connectors); if (initialConnector?.connector) { connectState.connect({ connector: initialConnector.connector, chainId: initialConnector.chainId }); diff --git a/packages/nextjs/hooks/scaffold-eth/useBurnerWallet.ts b/packages/nextjs/hooks/scaffold-eth/useBurnerWallet.ts index 8f97332..bb75706 100644 --- a/packages/nextjs/hooks/scaffold-eth/useBurnerWallet.ts +++ b/packages/nextjs/hooks/scaffold-eth/useBurnerWallet.ts @@ -7,10 +7,7 @@ import { WalletClient, usePublicClient } from "wagmi"; const burnerStorageKey = "scaffoldEth2.burnerWallet.sk"; /** - * Is the private key valid - * @internal - * @param pk - * @returns + * Checks if the private key is valid */ const isValidSk = (pk: Hex | string | undefined | null): boolean => { return pk?.length === 64 || pk?.length === 66; @@ -19,13 +16,10 @@ const isValidSk = (pk: Hex | string | undefined | null): boolean => { /** * If no burner is found in localstorage, we will generate a random private key */ -const newDefaultPriaveKey = generatePrivateKey(); +const newDefaultPrivateKey = generatePrivateKey(); /** - * Save the current burner private key from storage - * Can be used outside of react. Used by the burnerConnector. - * @internal - * @returns + * Save the current burner private key to local storage */ export const saveBurnerSK = (privateKey: Hex): void => { if (typeof window != "undefined" && window != null) { @@ -34,10 +28,7 @@ export const saveBurnerSK = (privateKey: Hex): void => { }; /** - * Gets the current burner private key from storage - * Can be used outside of react. Used by the burnerConnector. - * @internal - * @returns + * Gets the current burner private key from local storage */ export const loadBurnerSK = (): Hex => { let currentSk: Hex = "0x"; @@ -48,47 +39,25 @@ export const loadBurnerSK = (): Hex => { if (!!currentSk && isValidSk(currentSk)) { return currentSk; } else { - saveBurnerSK(newDefaultPriaveKey); - return newDefaultPriaveKey; + saveBurnerSK(newDefaultPrivateKey); + return newDefaultPrivateKey; } }; -/** - * #### Summary - * Return type of useBurnerSigner: - * - * ##### โœ๏ธ Notes - * - provides signer - * - methods of interacting with burner signer - * - methods to save and loadd signer from local storage - * - * @category Hooks - */ -export type TBurnerSigner = { +type BurnerAccount = { walletClient: WalletClient | undefined; account: PrivateKeyAccount | undefined; - /** - * create a new burner signer - */ + // creates a new burner account generateNewBurner: () => void; - /** - * explictly save burner to storage - */ + // explicitly save burner to storage saveBurner: () => void; }; /** - * #### Summary - * A hook that creates a burner signer/address and provides ways of interacting with - * and updating the signer - * - * @category Hooks - * - * @param localProvider localhost provider - * @returns IBurnerSigner + * Creates a burner wallet */ -export const useBurnerWallet = (): TBurnerSigner => { - const [burnerSk, setBurnerSk] = useLocalStorage(burnerStorageKey, newDefaultPriaveKey); +export const useBurnerWallet = (): BurnerAccount => { + const [burnerSk, setBurnerSk] = useLocalStorage(burnerStorageKey, newDefaultPrivateKey); const publicClient = usePublicClient(); const [walletClient, setWalletClient] = useState>(); @@ -96,16 +65,10 @@ export const useBurnerWallet = (): TBurnerSigner => { const [account, setAccount] = useState(); const isCreatingNewBurnerRef = useRef(false); - /** - * callback to save current wallet sk - */ const saveBurner = useCallback(() => { setBurnerSk(generatedPrivateKey); }, [setBurnerSk, generatedPrivateKey]); - /** - * create a new burnerkey - */ const generateNewBurner = useCallback(() => { if (publicClient && !isCreatingNewBurnerRef.current) { console.log("๐Ÿ”‘ Create new burner wallet..."); @@ -125,7 +88,7 @@ export const useBurnerWallet = (): TBurnerSigner => { setAccount(randomAccount); setBurnerSk(() => { - console.log("๐Ÿ”ฅ ...Save new burner wallet"); + console.log("๐Ÿ”ฅ Saving new burner wallet"); isCreatingNewBurnerRef.current = false; return randomPrivateKey; }); diff --git a/packages/nextjs/hooks/scaffold-eth/useDarkMode.ts b/packages/nextjs/hooks/scaffold-eth/useDarkMode.ts new file mode 100644 index 0000000..c0ac96e --- /dev/null +++ b/packages/nextjs/hooks/scaffold-eth/useDarkMode.ts @@ -0,0 +1,43 @@ +import { useEffect, useState } from "react"; +import { useLocalStorage, useMediaQuery, useReadLocalStorage } from "usehooks-ts"; + +const COLOR_SCHEME_QUERY = "(prefers-color-scheme: dark)"; + +interface UseDarkModeOutput { + isDarkMode: boolean; + toggle: () => void; + enable: () => void; + disable: () => void; +} + +const LOCAL_STORAGE_THEME_KEY = "usehooks-ts-dark-mode"; + +export function useDarkMode(defaultValue?: boolean): UseDarkModeOutput { + const isDarkOS = useMediaQuery(COLOR_SCHEME_QUERY); + const [prevIsDarkOs, setPrevIsDarkOs] = useState(isDarkOS); + + const initialStorageValue: boolean | null = useReadLocalStorage(LOCAL_STORAGE_THEME_KEY); + const [isDarkMode, setIsDarkMode] = useLocalStorage(LOCAL_STORAGE_THEME_KEY, Boolean(defaultValue)); + + // set if no init value + useEffect(() => { + if (initialStorageValue === null) { + setIsDarkMode(defaultValue || isDarkOS); + } + }, [defaultValue, isDarkOS, setIsDarkMode, initialStorageValue]); + + // update on os color change + useEffect(() => { + if (isDarkOS !== prevIsDarkOs) { + setPrevIsDarkOs(isDarkOS); + setIsDarkMode(isDarkOS); + } + }, [isDarkOS, prevIsDarkOs, setIsDarkMode]); + + return { + isDarkMode, + toggle: () => setIsDarkMode(prev => !prev), + enable: () => setIsDarkMode(true), + disable: () => setIsDarkMode(false), + }; +} diff --git a/packages/nextjs/hooks/scaffold-eth/useDeployedContractInfo.ts b/packages/nextjs/hooks/scaffold-eth/useDeployedContractInfo.ts index ed9c00a..f82dce1 100644 --- a/packages/nextjs/hooks/scaffold-eth/useDeployedContractInfo.ts +++ b/packages/nextjs/hooks/scaffold-eth/useDeployedContractInfo.ts @@ -1,20 +1,19 @@ import { useEffect, useState } from "react"; +import { useTargetNetwork } from "./useTargetNetwork"; import { useIsMounted } from "usehooks-ts"; import { usePublicClient } from "wagmi"; -import scaffoldConfig from "~~/scaffold.config"; import { Contract, ContractCodeStatus, ContractName, contracts } from "~~/utils/scaffold-eth/contract"; /** - * Gets the matching contract info from the contracts file generated by `yarn deploy` - * @param contractName - name of deployed contract + * Gets the matching contract info for the provided contract name from the contracts present in deployedContracts.ts + * and externalContracts.ts corresponding to targetNetworks configured in scaffold.config.ts */ export const useDeployedContractInfo = (contractName: TContractName) => { const isMounted = useIsMounted(); - const deployedContract = contracts?.[scaffoldConfig.targetNetwork.id]?.[ - contractName as ContractName - ] as Contract; + const { targetNetwork } = useTargetNetwork(); + const deployedContract = contracts?.[targetNetwork.id]?.[contractName as ContractName] as Contract; const [status, setStatus] = useState(ContractCodeStatus.LOADING); - const publicClient = usePublicClient({ chainId: scaffoldConfig.targetNetwork.id }); + const publicClient = usePublicClient({ chainId: targetNetwork.id }); useEffect(() => { const checkContractDeployment = async () => { diff --git a/packages/nextjs/hooks/scaffold-eth/useNativeCurrencyPrice.ts b/packages/nextjs/hooks/scaffold-eth/useNativeCurrencyPrice.ts index 6af4895..edcb9db 100644 --- a/packages/nextjs/hooks/scaffold-eth/useNativeCurrencyPrice.ts +++ b/packages/nextjs/hooks/scaffold-eth/useNativeCurrencyPrice.ts @@ -1,4 +1,5 @@ import { useEffect, useState } from "react"; +import { useTargetNetwork } from "./useTargetNetwork"; import { useInterval } from "usehooks-ts"; import scaffoldConfig from "~~/scaffold.config"; import { fetchPriceFromUniswap } from "~~/utils/scaffold-eth"; @@ -7,23 +8,23 @@ const enablePolling = false; /** * Get the price of Native Currency based on Native Token/DAI trading pair from Uniswap SDK - * @returns nativeCurrencyPrice: number */ export const useNativeCurrencyPrice = () => { + const { targetNetwork } = useTargetNetwork(); const [nativeCurrencyPrice, setNativeCurrencyPrice] = useState(0); // Get the price of ETH from Uniswap on mount useEffect(() => { (async () => { - const price = await fetchPriceFromUniswap(); + const price = await fetchPriceFromUniswap(targetNetwork); setNativeCurrencyPrice(price); })(); - }, []); + }, [targetNetwork]); // Get the price of ETH from Uniswap at a given interval useInterval( async () => { - const price = await fetchPriceFromUniswap(); + const price = await fetchPriceFromUniswap(targetNetwork); setNativeCurrencyPrice(price); }, enablePolling ? scaffoldConfig.pollingInterval : null, diff --git a/packages/nextjs/hooks/scaffold-eth/useNetworkColor.ts b/packages/nextjs/hooks/scaffold-eth/useNetworkColor.ts index b4f5931..4f83f3f 100644 --- a/packages/nextjs/hooks/scaffold-eth/useNetworkColor.ts +++ b/packages/nextjs/hooks/scaffold-eth/useNetworkColor.ts @@ -1,14 +1,20 @@ -import { useDarkMode } from "usehooks-ts"; -import { getTargetNetwork } from "~~/utils/scaffold-eth"; +import { useDarkMode } from "./useDarkMode"; +import { useTargetNetwork } from "./useTargetNetwork"; +import { ChainWithAttributes } from "~~/utils/scaffold-eth"; -const DEFAULT_NETWORK_COLOR: [string, string] = ["#666666", "#bbbbbb"]; +export const DEFAULT_NETWORK_COLOR: [string, string] = ["#666666", "#bbbbbb"]; + +export function getNetworkColor(network: ChainWithAttributes, isDarkMode: boolean) { + const colorConfig = network.color ?? DEFAULT_NETWORK_COLOR; + return Array.isArray(colorConfig) ? (isDarkMode ? colorConfig[1] : colorConfig[0]) : colorConfig; +} /** * Gets the color of the target network */ export const useNetworkColor = () => { const { isDarkMode } = useDarkMode(); - const colorConfig = getTargetNetwork().color ?? DEFAULT_NETWORK_COLOR; + const { targetNetwork } = useTargetNetwork(); - return Array.isArray(colorConfig) ? (isDarkMode ? colorConfig[1] : colorConfig[0]) : colorConfig; + return getNetworkColor(targetNetwork, isDarkMode); }; diff --git a/packages/nextjs/hooks/scaffold-eth/useOutsideClick.ts b/packages/nextjs/hooks/scaffold-eth/useOutsideClick.ts index a74a558..d7f2e0e 100644 --- a/packages/nextjs/hooks/scaffold-eth/useOutsideClick.ts +++ b/packages/nextjs/hooks/scaffold-eth/useOutsideClick.ts @@ -1,9 +1,11 @@ import React, { useEffect } from "react"; /** - * Check if a click was made outside the passed ref + * Handles clicks outside of passed ref element + * @param ref - react ref of the element + * @param callback - callback function to call when clicked outside */ -export const useOutsideClick = (ref: React.RefObject, callback: { (): void }) => { +export const useOutsideClick = (ref: React.RefObject, callback: { (): void }) => { useEffect(() => { function handleOutsideClick(event: MouseEvent) { if (!(event.target instanceof Element)) { diff --git a/packages/nextjs/hooks/scaffold-eth/useScaffoldContract.ts b/packages/nextjs/hooks/scaffold-eth/useScaffoldContract.ts index 5dd782a..a97d674 100644 --- a/packages/nextjs/hooks/scaffold-eth/useScaffoldContract.ts +++ b/packages/nextjs/hooks/scaffold-eth/useScaffoldContract.ts @@ -5,10 +5,11 @@ import { useDeployedContractInfo } from "~~/hooks/scaffold-eth"; import { Contract, ContractName } from "~~/utils/scaffold-eth/contract"; /** - * Gets a deployed contract by contract name and returns a contract instance - * @param config - The config settings - * @param config.contractName - Deployed contract name - * @param config.walletClient - An viem wallet client instance (optional) + * Gets a viem instance of the contract present in deployedContracts.ts or externalContracts.ts corresponding to + * targetNetworks configured in scaffold.config.ts. Optional walletClient can be passed for doing write transactions. + * @param config - The config settings for the hook + * @param config.contractName - deployed contract name + * @param config.walletClient - optional walletClient from wagmi useWalletClient hook can be passed for doing write transactions */ export const useScaffoldContract = < TContractName extends ContractName, diff --git a/packages/nextjs/hooks/scaffold-eth/useScaffoldContractRead.ts b/packages/nextjs/hooks/scaffold-eth/useScaffoldContractRead.ts index e44b784..39c0cb1 100644 --- a/packages/nextjs/hooks/scaffold-eth/useScaffoldContractRead.ts +++ b/packages/nextjs/hooks/scaffold-eth/useScaffoldContractRead.ts @@ -1,7 +1,7 @@ +import { useTargetNetwork } from "./useTargetNetwork"; import type { ExtractAbiFunctionNames } from "abitype"; import { useContractRead } from "wagmi"; import { useDeployedContractInfo } from "~~/hooks/scaffold-eth"; -import { getTargetNetwork } from "~~/utils/scaffold-eth"; import { AbiFunctionReturnType, ContractAbi, @@ -10,7 +10,8 @@ import { } from "~~/utils/scaffold-eth/contract"; /** - * @dev wrapper for wagmi's useContractRead hook which loads in deployed contract contract abi, address automatically + * Wrapper around wagmi's useContractRead hook which automatically loads (by name) the contract ABI and address from + * the contracts present in deployedContracts.ts & externalContracts.ts corresponding to targetNetworks configured in scaffold.config.ts * @param config - The config settings, including extra wagmi configuration * @param config.contractName - deployed contract name * @param config.functionName - name of the function to be called @@ -26,9 +27,10 @@ export const useScaffoldContractRead = < ...readConfig }: UseScaffoldReadConfig) => { const { data: deployedContract } = useDeployedContractInfo(contractName); + const { targetNetwork } = useTargetNetwork(); return useContractRead({ - chainId: getTargetNetwork().id, + chainId: targetNetwork.id, functionName, address: deployedContract?.address, abi: deployedContract?.abi, diff --git a/packages/nextjs/hooks/scaffold-eth/useScaffoldContractWrite.ts b/packages/nextjs/hooks/scaffold-eth/useScaffoldContractWrite.ts index 7efe10f..cc99834 100644 --- a/packages/nextjs/hooks/scaffold-eth/useScaffoldContractWrite.ts +++ b/packages/nextjs/hooks/scaffold-eth/useScaffoldContractWrite.ts @@ -1,20 +1,23 @@ import { useState } from "react"; +import { useTargetNetwork } from "./useTargetNetwork"; import { Abi, ExtractAbiFunctionNames } from "abitype"; import { useContractWrite, useNetwork } from "wagmi"; -import { getParsedError } from "~~/components/scaffold-eth"; import { useDeployedContractInfo, useTransactor } from "~~/hooks/scaffold-eth"; -import { getTargetNetwork, notification } from "~~/utils/scaffold-eth"; +import { getParsedError, notification } from "~~/utils/scaffold-eth"; import { ContractAbi, ContractName, UseScaffoldWriteConfig } from "~~/utils/scaffold-eth/contract"; type UpdatedArgs = Parameters>["writeAsync"]>[0]; /** - * @dev wrapper for wagmi's useContractWrite hook(with config prepared by usePrepareContractWrite hook) which loads in deployed contract abi and address automatically + * Wrapper around wagmi's useContractWrite hook which automatically loads (by name) the contract ABI and address from + * the contracts present in deployedContracts.ts & externalContracts.ts corresponding to targetNetworks configured in scaffold.config.ts * @param config - The config settings, including extra wagmi configuration - * @param config.contractName - deployed contract name + * @param config.contractName - contract name * @param config.functionName - name of the function to be called * @param config.args - arguments for the function * @param config.value - value in ETH that will be sent with transaction + * @param config.blockConfirmations - number of block confirmations to wait for (default: 1) + * @param config.onBlockConfirmation - callback that will be called after blockConfirmations. */ export const useScaffoldContractWrite = < TContractName extends ContractName, @@ -32,9 +35,10 @@ export const useScaffoldContractWrite = < const { chain } = useNetwork(); const writeTx = useTransactor(); const [isMining, setIsMining] = useState(false); - const configuredNetwork = getTargetNetwork(); + const { targetNetwork } = useTargetNetwork(); const wagmiContractWrite = useContractWrite({ + chainId: targetNetwork.id, address: deployedContractData?.address, abi: deployedContractData?.abi as Abi, functionName: functionName as any, @@ -59,7 +63,7 @@ export const useScaffoldContractWrite = < notification.error("Please connect your wallet"); return; } - if (chain?.id !== configuredNetwork.id) { + if (chain?.id !== targetNetwork.id) { notification.error("You are on the wrong network"); return; } @@ -67,7 +71,7 @@ export const useScaffoldContractWrite = < if (wagmiContractWrite.writeAsync) { try { setIsMining(true); - await writeTx( + const writeTxResult = await writeTx( () => wagmiContractWrite.writeAsync({ args: newArgs ?? args, @@ -76,6 +80,8 @@ export const useScaffoldContractWrite = < }), { onBlockConfirmation, blockConfirmations }, ); + + return writeTxResult; } catch (e: any) { const message = getParsedError(e); notification.error(message); diff --git a/packages/nextjs/hooks/scaffold-eth/useScaffoldEventHistory.ts b/packages/nextjs/hooks/scaffold-eth/useScaffoldEventHistory.ts index 3095979..a8c2b3a 100644 --- a/packages/nextjs/hooks/scaffold-eth/useScaffoldEventHistory.ts +++ b/packages/nextjs/hooks/scaffold-eth/useScaffoldEventHistory.ts @@ -1,8 +1,12 @@ import { useEffect, useMemo, useState } from "react"; +import { useTargetNetwork } from "./useTargetNetwork"; import { Abi, AbiEvent, ExtractAbiEventNames } from "abitype"; +import { useInterval } from "usehooks-ts"; import { Hash } from "viem"; +import * as chains from "viem/chains"; import { usePublicClient } from "wagmi"; import { useDeployedContractInfo } from "~~/hooks/scaffold-eth"; +import scaffoldConfig from "~~/scaffold.config"; import { replacer } from "~~/utils/scaffold-eth/common"; import { ContractAbi, @@ -12,7 +16,7 @@ import { } from "~~/utils/scaffold-eth/contract"; /** - * @dev reads events from a deployed contract + * Reads events from a deployed contract * @param config - The config settings * @param config.contractName - deployed contract name * @param config.eventName - name of the event to listen for @@ -21,6 +25,8 @@ import { * @param config.blockData - if set to true it will return the block data for each event (default: false) * @param config.transactionData - if set to true it will return the transaction data for each event (default: false) * @param config.receiptData - if set to true it will return the receipt data for each event (default: false) + * @param config.watch - if set to true, the events will be updated every pollingInterval milliseconds set at scaffoldConfig (default: false) + * @param config.enabled - set this to false to disable the hook from running (default: true) */ export const useScaffoldEventHistory = < TContractName extends ContractName, @@ -36,30 +42,45 @@ export const useScaffoldEventHistory = < blockData, transactionData, receiptData, + watch, + enabled = true, }: UseScaffoldEventHistoryConfig) => { const [events, setEvents] = useState(); - const [isLoading, setIsLoading] = useState(true); + const [isLoading, setIsLoading] = useState(false); const [error, setError] = useState(); + const [fromBlockUpdated, setFromBlockUpdated] = useState(fromBlock); + const { data: deployedContractData, isLoading: deployedContractLoading } = useDeployedContractInfo(contractName); const publicClient = usePublicClient(); + const { targetNetwork } = useTargetNetwork(); - useEffect(() => { - async function readEvents() { - try { - if (!deployedContractData) { - throw new Error("Contract not found"); - } + const readEvents = async (fromBlock?: bigint) => { + setIsLoading(true); + try { + if (!deployedContractData) { + throw new Error("Contract not found"); + } + + if (!enabled) { + throw new Error("Hook disabled"); + } + + const event = (deployedContractData.abi as Abi).find( + part => part.type === "event" && part.name === eventName, + ) as AbiEvent; - const event = (deployedContractData.abi as Abi).find( - part => part.type === "event" && part.name === eventName, - ) as AbiEvent; + const blockNumber = await publicClient.getBlockNumber({ cacheTime: 0 }); + if ((fromBlock && blockNumber >= fromBlock) || blockNumber >= fromBlockUpdated) { const logs = await publicClient.getLogs({ address: deployedContractData?.address, event, args: filters as any, // TODO: check if it works and fix type - fromBlock, + fromBlock: fromBlock || fromBlockUpdated, + toBlock: blockNumber, }); + setFromBlockUpdated(blockNumber + 1n); + const newEvents = []; for (let i = logs.length - 1; i >= 0; i--) { newEvents.push({ @@ -79,23 +100,34 @@ export const useScaffoldEventHistory = < : null, }); } - setEvents(newEvents); + if (events && typeof fromBlock === "undefined") { + setEvents([...newEvents, ...events]); + } else { + setEvents(newEvents); + } setError(undefined); - } catch (e: any) { - console.error(e); - setEvents(undefined); - setError(e); - } finally { - setIsLoading(false); } + } catch (e: any) { + console.error(e); + setEvents(undefined); + setError(e); + } finally { + setIsLoading(false); } + }; + + useEffect(() => { + readEvents(fromBlock); + // eslint-disable-next-line react-hooks/exhaustive-deps + }, [fromBlock, enabled]); + + useEffect(() => { if (!deployedContractLoading) { readEvents(); } // eslint-disable-next-line react-hooks/exhaustive-deps }, [ publicClient, - fromBlock, contractName, eventName, deployedContractLoading, @@ -108,6 +140,22 @@ export const useScaffoldEventHistory = < receiptData, ]); + useEffect(() => { + // Reset the internal state when target network or fromBlock changed + setEvents([]); + setFromBlockUpdated(fromBlock); + setError(undefined); + }, [fromBlock, targetNetwork.id]); + + useInterval( + async () => { + if (!deployedContractLoading) { + readEvents(); + } + }, + watch ? (targetNetwork.id !== chains.hardhat.id ? scaffoldConfig.pollingInterval : 4_000) : null, + ); + const eventHistoryData = useMemo( () => events?.map(addIndexedArgsToEvent) as UseScaffoldEventHistoryData< diff --git a/packages/nextjs/hooks/scaffold-eth/useScaffoldEventSubscriber.ts b/packages/nextjs/hooks/scaffold-eth/useScaffoldEventSubscriber.ts index 96c1dba..389553c 100644 --- a/packages/nextjs/hooks/scaffold-eth/useScaffoldEventSubscriber.ts +++ b/packages/nextjs/hooks/scaffold-eth/useScaffoldEventSubscriber.ts @@ -1,12 +1,13 @@ +import { useTargetNetwork } from "./useTargetNetwork"; import { Abi, ExtractAbiEventNames } from "abitype"; import { Log } from "viem"; import { useContractEvent } from "wagmi"; import { addIndexedArgsToEvent, useDeployedContractInfo } from "~~/hooks/scaffold-eth"; -import { getTargetNetwork } from "~~/utils/scaffold-eth"; import { ContractAbi, ContractName, UseScaffoldEventConfig } from "~~/utils/scaffold-eth/contract"; /** - * @dev wrapper for wagmi's useContractEvent + * Wrapper around wagmi's useEventSubscriber hook which automatically loads (by name) the contract ABI and + * address from the contracts present in deployedContracts.ts & externalContracts.ts * @param config - The config settings * @param config.contractName - deployed contract name * @param config.eventName - name of the event to listen for @@ -21,15 +22,16 @@ export const useScaffoldEventSubscriber = < listener, }: UseScaffoldEventConfig) => { const { data: deployedContractData } = useDeployedContractInfo(contractName); + const { targetNetwork } = useTargetNetwork(); - const addInexedArgsToLogs = (logs: Log[]) => logs.map(addIndexedArgsToEvent); + const addIndexedArgsToLogs = (logs: Log[]) => logs.map(addIndexedArgsToEvent); const listenerWithIndexedArgs = (logs: Log[]) => - listener(addInexedArgsToLogs(logs) as Parameters[0]); + listener(addIndexedArgsToLogs(logs) as Parameters[0]); return useContractEvent({ address: deployedContractData?.address, abi: deployedContractData?.abi as Abi, - chainId: getTargetNetwork().id, + chainId: targetNetwork.id, listener: listenerWithIndexedArgs, eventName, }); diff --git a/packages/nextjs/hooks/scaffold-eth/useTargetNetwork.ts b/packages/nextjs/hooks/scaffold-eth/useTargetNetwork.ts new file mode 100644 index 0000000..e2f318b --- /dev/null +++ b/packages/nextjs/hooks/scaffold-eth/useTargetNetwork.ts @@ -0,0 +1,29 @@ +import { useEffect } from "react"; +import { useNetwork } from "wagmi"; +import scaffoldConfig from "~~/scaffold.config"; +import { useGlobalState } from "~~/services/store/store"; +import { ChainWithAttributes } from "~~/utils/scaffold-eth"; +import { NETWORKS_EXTRA_DATA } from "~~/utils/scaffold-eth"; + +/** + * Retrieves the connected wallet's network from scaffold.config or defaults to the 0th network in the list if the wallet is not connected. + */ +export function useTargetNetwork(): { targetNetwork: ChainWithAttributes } { + const { chain } = useNetwork(); + const targetNetwork = useGlobalState(({ targetNetwork }) => targetNetwork); + const setTargetNetwork = useGlobalState(({ setTargetNetwork }) => setTargetNetwork); + + useEffect(() => { + const newSelectedNetwork = scaffoldConfig.targetNetworks.find(targetNetwork => targetNetwork.id === chain?.id); + if (newSelectedNetwork && newSelectedNetwork.id !== targetNetwork.id) { + setTargetNetwork(newSelectedNetwork); + } + }, [chain?.id, setTargetNetwork, targetNetwork.id]); + + return { + targetNetwork: { + ...targetNetwork, + ...NETWORKS_EXTRA_DATA[targetNetwork.id], + }, + }; +} diff --git a/packages/nextjs/hooks/scaffold-eth/useTransactor.tsx b/packages/nextjs/hooks/scaffold-eth/useTransactor.tsx index 76de9e7..73a38f0 100644 --- a/packages/nextjs/hooks/scaffold-eth/useTransactor.tsx +++ b/packages/nextjs/hooks/scaffold-eth/useTransactor.tsx @@ -1,11 +1,10 @@ import { WriteContractResult, getPublicClient } from "@wagmi/core"; import { Hash, SendTransactionParameters, TransactionReceipt, WalletClient } from "viem"; import { useWalletClient } from "wagmi"; -import { getParsedError } from "~~/components/scaffold-eth"; -import { getBlockExplorerTxLink, notification } from "~~/utils/scaffold-eth"; +import { getBlockExplorerTxLink, getParsedError, notification } from "~~/utils/scaffold-eth"; type TransactionFunc = ( - tx: (() => Promise) | SendTransactionParameters, + tx: (() => Promise) | (() => Promise) | SendTransactionParameters, options?: { onBlockConfirmation?: (txnReceipt: TransactionReceipt) => void; blockConfirmations?: number; @@ -29,9 +28,9 @@ const TxnNotification = ({ message, blockExplorerLink }: { message: string; bloc }; /** - * @description Runs Transaction passed in to returned funtion showing UI feedback. - * @param _walletClient - * @returns function that takes a transaction and returns a promise of the transaction hash + * Runs Transaction passed in to returned function showing UI feedback. + * @param _walletClient - Optional wallet client to use. If not provided, will use the one from useWalletClient. + * @returns function that takes in transaction function as callback, shows UI feedback for transaction and returns a promise of the transaction hash */ export const useTransactor = (_walletClient?: WalletClient): TransactionFunc => { let walletClient = _walletClient; @@ -57,7 +56,12 @@ export const useTransactor = (_walletClient?: WalletClient): TransactionFunc => notificationId = notification.loading(); if (typeof tx === "function") { // Tx is already prepared by the caller - transactionHash = (await tx()).hash; + const result = await tx(); + if (typeof result === "string") { + transactionHash = result; + } else { + transactionHash = result.hash; + } } else if (tx != null) { transactionHash = await walletClient.sendTransaction(tx); } else { diff --git a/packages/nextjs/next.config.js b/packages/nextjs/next.config.js index 43ea3bd..16786e9 100644 --- a/packages/nextjs/next.config.js +++ b/packages/nextjs/next.config.js @@ -11,18 +11,15 @@ const nextConfig = { }, webpack: config => { config.resolve.fallback = { fs: false, net: false, tls: false }; + config.externals.push("pino-pretty", "lokijs", "encoding"); return config; }, images: { remotePatterns: [ { - protocol: 'https', - hostname: 'ipfs.io', + protocol: "https", + hostname: "ipfs.io", }, - { - protocol: 'https', - hostname: 'picsum.photos' - } ], }, }; diff --git a/packages/nextjs/package.json b/packages/nextjs/package.json index 8d141d5..64b6f92 100644 --- a/packages/nextjs/package.json +++ b/packages/nextjs/package.json @@ -15,15 +15,14 @@ }, "dependencies": { "@ethersproject/providers": "~5.7.2", - "@hatsprotocol/sdk-v1-core": "^0.8.0", "@heroicons/react": "~2.0.11", - "@rainbow-me/rainbowkit": "1.1.2", + "@rainbow-me/rainbowkit": "1.3.0", "@uniswap/sdk-core": "~4.0.1", "@uniswap/v2-sdk": "~3.0.1", "blo": "~1.0.1", - "daisyui": "~3.5.1", - "next": "~13.1.6", - "nextjs-progressbar": "~0.0.16", + "daisyui": "~4.4.19", + "next": "~14.0.4", + "nprogress": "~0.2.0", "qrcode.react": "~3.1.0", "react": "~18.2.0", "react-copy-to-clipboard": "~5.1.0", @@ -31,19 +30,20 @@ "react-hot-toast": "~2.4.0", "use-debounce": "~8.0.4", "usehooks-ts": "~2.9.1", - "viem": "^1.19.11", - "wagmi": "1.4.4", + "viem": "1.19.9", + "wagmi": "1.4.12", "zustand": "~4.1.2" }, "devDependencies": { "@trivago/prettier-plugin-sort-imports": "~4.1.1", "@types/node": "^17.0.45", + "@types/nprogress": "^0", "@types/react": "^18.0.21", "@types/react-copy-to-clipboard": "^5.0.4", "@typescript-eslint/eslint-plugin": "~5.40.0", "autoprefixer": "~10.4.12", "eslint": "~8.24.0", - "eslint-config-next": "~13.1.6", + "eslint-config-next": "~14.0.4", "eslint-config-prettier": "~8.5.0", "eslint-plugin-prettier": "~4.2.1", "postcss": "~8.4.16", @@ -51,6 +51,6 @@ "tailwindcss": "~3.3.3", "type-fest": "~4.6.0", "typescript": "~5.1.6", - "vercel": "~28.15.1" + "vercel": "~32.4.1" } } diff --git a/packages/nextjs/pages/blockexplorer/address/[address].tsx b/packages/nextjs/pages/blockexplorer/address/[address].tsx deleted file mode 100644 index 465714b..0000000 --- a/packages/nextjs/pages/blockexplorer/address/[address].tsx +++ /dev/null @@ -1,197 +0,0 @@ -import { useEffect, useState } from "react"; -import { useRouter } from "next/router"; -import fs from "fs"; -import { GetServerSideProps } from "next"; -import path from "path"; -import { createPublicClient, http } from "viem"; -import { hardhat } from "viem/chains"; -import { - AddressCodeTab, - AddressLogsTab, - AddressStorageTab, - PaginationButton, - TransactionsTable, -} from "~~/components/blockexplorer/"; -import { Address, Balance } from "~~/components/scaffold-eth"; -import deployedContracts from "~~/contracts/deployedContracts"; -import { useFetchBlocks } from "~~/hooks/scaffold-eth"; -import { getTargetNetwork } from "~~/utils/scaffold-eth"; -import { GenericContractsDeclaration } from "~~/utils/scaffold-eth/contract"; - -type AddressCodeTabProps = { - bytecode: string; - assembly: string; -}; - -type PageProps = { - address: string; - contractData: AddressCodeTabProps | null; -}; - -const publicClient = createPublicClient({ - chain: hardhat, - transport: http(), -}); - -const AddressPage = ({ address, contractData }: PageProps) => { - const router = useRouter(); - const { blocks, transactionReceipts, currentPage, totalBlocks, setCurrentPage } = useFetchBlocks(); - const [activeTab, setActiveTab] = useState("transactions"); - const [isContract, setIsContract] = useState(false); - - useEffect(() => { - const checkIsContract = async () => { - const contractCode = await publicClient.getBytecode({ address: address }); - setIsContract(contractCode !== undefined && contractCode !== "0x"); - }; - - checkIsContract(); - }, [address]); - - const filteredBlocks = blocks.filter(block => - block.transactions.some(tx => { - if (typeof tx === "string") { - return false; - } - return tx.from.toLowerCase() === address.toLowerCase() || tx.to?.toLowerCase() === address.toLowerCase(); - }), - ); - - return ( -
    -
    - -
    -
    -
    -
    -
    -
    -
    -
    - Balance: - -
    -
    -
    -
    -
    -
    - {isContract && ( -
    - - - - -
    - )} - {activeTab === "transactions" && ( -
    - - -
    - )} - {activeTab === "code" && contractData && ( - - )} - {activeTab === "storage" && } - {activeTab === "logs" && } -
    - ); -}; - -export default AddressPage; - -async function fetchByteCodeAndAssembly(buildInfoDirectory: string, contractPath: string) { - const buildInfoFiles = fs.readdirSync(buildInfoDirectory); - let bytecode = ""; - let assembly = ""; - - for (let i = 0; i < buildInfoFiles.length; i++) { - const filePath = path.join(buildInfoDirectory, buildInfoFiles[i]); - - const buildInfo = JSON.parse(fs.readFileSync(filePath, "utf8")); - - if (buildInfo.output.contracts[contractPath]) { - for (const contract in buildInfo.output.contracts[contractPath]) { - bytecode = buildInfo.output.contracts[contractPath][contract].evm.bytecode.object; - assembly = buildInfo.output.contracts[contractPath][contract].evm.bytecode.opcodes; - break; - } - } - - if (bytecode && assembly) { - break; - } - } - - return { bytecode, assembly }; -} - -export const getServerSideProps: GetServerSideProps = async context => { - const configuredNetwork = getTargetNetwork(); - const address = (context.params?.address as string).toLowerCase(); - const contracts = deployedContracts as GenericContractsDeclaration | null; - const chainId = hardhat.id; - let contractPath = ""; - - const buildInfoDirectory = path.join( - __dirname, - "..", - "..", - "..", - "..", - "..", - "..", - `${configuredNetwork.network}`, - `${configuredNetwork.network === "hardhat" ? "artifacts" : "out"}`, - "build-info", - ); - - if (!fs.existsSync(buildInfoDirectory)) { - throw new Error(`Directory ${buildInfoDirectory} not found.`); - } - - const deployedContractsOnChain = contracts ? contracts[chainId] : {}; - for (const [contractName, contractInfo] of Object.entries(deployedContractsOnChain)) { - if (contractInfo.address.toLowerCase() === address) { - contractPath = `contracts/${contractName}.sol`; - break; - } - } - - if (!contractPath) { - // No contract found at this address - return { props: { address, contractData: null } }; - } - - const { bytecode, assembly } = await fetchByteCodeAndAssembly(buildInfoDirectory, contractPath); - - return { props: { address, contractData: { bytecode, assembly } } }; -}; diff --git a/packages/nextjs/pages/debug.tsx b/packages/nextjs/pages/debug.tsx deleted file mode 100644 index 3dbef7f..0000000 --- a/packages/nextjs/pages/debug.tsx +++ /dev/null @@ -1,74 +0,0 @@ -import { useEffect } from "react"; -import type { NextPage } from "next"; -import { useLocalStorage } from "usehooks-ts"; -import { MetaHeader } from "~~/components/MetaHeader"; -import { ContractUI } from "~~/components/scaffold-eth"; -import { ContractName } from "~~/utils/scaffold-eth/contract"; -import { getContractNames } from "~~/utils/scaffold-eth/contractNames"; - -const selectedContractStorageKey = "scaffoldEth2.selectedContract"; -const contractNames = getContractNames(); - -const Debug: NextPage = () => { - const [selectedContract, setSelectedContract] = useLocalStorage( - selectedContractStorageKey, - contractNames[0], - ); - - useEffect(() => { - if (!contractNames.includes(selectedContract)) { - setSelectedContract(contractNames[0]); - } - }, [selectedContract, setSelectedContract]); - - return ( - <> - -
    - {contractNames.length === 0 ? ( -

    No contracts found!

    - ) : ( - <> - {contractNames.length > 1 && ( -
    - {contractNames.map(contractName => ( - - ))} -
    - )} - {contractNames.map(contractName => ( - - ))} - - )} -
    -
    -

    Debug Contracts

    -

    - You can debug & interact with your deployed contracts here. -
    Check{" "} - - packages / nextjs / pages / debug.tsx - {" "} -

    -
    - - ); -}; - -export default Debug; diff --git a/packages/nextjs/pages/repTokensDemo.tsx b/packages/nextjs/pages/repTokensDemo.tsx deleted file mode 100644 index 367e4d7..0000000 --- a/packages/nextjs/pages/repTokensDemo.tsx +++ /dev/null @@ -1,19 +0,0 @@ -import type { NextPage } from "next"; -import { MetaHeader } from "~~/components/MetaHeader"; -import { Index } from "~~/components/rep-tokens-demo/Index"; - -const RepTokensDemo: NextPage = () => { - return ( - <> - -
    - -
    - - ); -}; - -export default RepTokensDemo; diff --git a/packages/nextjs/public/atxdao-logo.png b/packages/nextjs/public/atxdao-logo.png deleted file mode 100644 index e83b41bda1d1c6ee8f44acad9e016148894484b1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 23781 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 diff --git a/packages/nextjs/scaffold.config.ts b/packages/nextjs/scaffold.config.ts index 7d981d8..1c21295 100644 --- a/packages/nextjs/scaffold.config.ts +++ b/packages/nextjs/scaffold.config.ts @@ -1,7 +1,7 @@ import * as chains from "viem/chains"; export type ScaffoldConfig = { - targetNetwork: chains.Chain; + targetNetworks: readonly chains.Chain[]; pollingInterval: number; alchemyApiKey: string; walletConnectProjectId: string; @@ -10,11 +10,11 @@ export type ScaffoldConfig = { }; const scaffoldConfig = { - // The network where your DApp lives in - targetNetwork: chains.foundry, + // The networks on which your DApp is live + targetNetworks: [chains.foundry], // The interval at which your front-end polls the RPC servers for new data - // it has no effect on the local network + // it has no effect if you only target the local network (default is 4000) pollingInterval: 30000, // This is ours Alchemy's default API key. @@ -38,6 +38,6 @@ const scaffoldConfig = { * 2. If user is not connected to any wallet: On reload, connect to burner wallet if burnerWallet.enabled is true && burnerWallet.onlyLocal is false */ walletAutoConnect: true, -} satisfies ScaffoldConfig; +} as const satisfies ScaffoldConfig; export default scaffoldConfig; diff --git a/packages/nextjs/services/store/store.ts b/packages/nextjs/services/store/store.ts index 041119c..b4a58f4 100644 --- a/packages/nextjs/services/store/store.ts +++ b/packages/nextjs/services/store/store.ts @@ -1,4 +1,6 @@ import create from "zustand"; +import scaffoldConfig from "~~/scaffold.config"; +import { ChainWithAttributes } from "~~/utils/scaffold-eth"; /** * Zustand Store @@ -9,12 +11,16 @@ import create from "zustand"; * Think about it as a global useState. */ -type TGlobalState = { +type GlobalState = { nativeCurrencyPrice: number; setNativeCurrencyPrice: (newNativeCurrencyPriceState: number) => void; + targetNetwork: ChainWithAttributes; + setTargetNetwork: (newTargetNetwork: ChainWithAttributes) => void; }; -export const useGlobalState = create(set => ({ +export const useGlobalState = create(set => ({ nativeCurrencyPrice: 0, setNativeCurrencyPrice: (newValue: number): void => set(() => ({ nativeCurrencyPrice: newValue })), + targetNetwork: scaffoldConfig.targetNetworks[0], + setTargetNetwork: (newTargetNetwork: ChainWithAttributes) => set(() => ({ targetNetwork: newTargetNetwork })), })); diff --git a/packages/nextjs/services/web3/wagmi-burner/BurnerConnector.ts b/packages/nextjs/services/web3/wagmi-burner/BurnerConnector.ts index 37db98a..311c6d9 100644 --- a/packages/nextjs/services/web3/wagmi-burner/BurnerConnector.ts +++ b/packages/nextjs/services/web3/wagmi-burner/BurnerConnector.ts @@ -1,15 +1,13 @@ import { StaticJsonRpcProvider } from "@ethersproject/providers"; -import { Chain, HttpTransport, PrivateKeyAccount, WalletClient, createWalletClient, http } from "viem"; +import { Address, Chain, HttpTransport, PrivateKeyAccount, WalletClient, createWalletClient, http } from "viem"; import { privateKeyToAccount } from "viem/accounts"; import { Connector } from "wagmi"; import { loadBurnerSK } from "~~/hooks/scaffold-eth"; import { BurnerConnectorError, BurnerConnectorErrorList } from "~~/services/web3/wagmi-burner/BurnerConnectorErrors"; import { BurnerConnectorData, BurnerConnectorOptions } from "~~/services/web3/wagmi-burner/BurnerConnectorTypes"; -import { getTargetNetwork } from "~~/utils/scaffold-eth"; export const burnerWalletId = "burner-wallet"; export const burnerWalletName = "Burner Wallet"; -export const defaultBurnerChainId = getTargetNetwork().id; /** * This class is a wagmi connector for BurnerWallet. Its used by {@link burnerWalletConfig} @@ -20,9 +18,8 @@ export class BurnerConnector extends Connector | undefined; constructor(config: { chains?: Chain[]; options: BurnerConnectorOptions }) { @@ -41,11 +38,11 @@ export class BurnerConnector extends Connector f.id === resolveChainId); @@ -92,9 +90,9 @@ export class BurnerConnector extends Connector { + async getAccount(): Promise
    { const bunerAccount = privateKeyToAccount(loadBurnerSK()); - return bunerAccount.address as `0x${string}`; + return bunerAccount.address as Address; } async getChainId(): Promise { @@ -128,6 +126,15 @@ export class BurnerConnector extends Connector ({ id: burnerWalletId, @@ -30,13 +24,13 @@ export const burnerWalletConfig = ({ chains }: BurnerWalletOptions): Wallet => ( iconBackground: "#ffffff", hidden: () => { if (onlyLocalBurnerWallet) { - return targetNetwork.id !== hardhat.id; + return targetNetworks.some(({ id }) => id !== hardhat.id); } return false; }, createConnector: () => { - const connector = new BurnerConnector({ chains, options: { defaultChainId: defaultBurnerChainId } }); + const connector = new BurnerConnector({ chains, options: { defaultChainId: targetNetworks[0].id } }); return { connector, diff --git a/packages/nextjs/services/web3/wagmiConnectors.tsx b/packages/nextjs/services/web3/wagmiConnectors.tsx index 2703fad..1d42e30 100644 --- a/packages/nextjs/services/web3/wagmiConnectors.tsx +++ b/packages/nextjs/services/web3/wagmiConnectors.tsx @@ -14,13 +14,15 @@ import { alchemyProvider } from "wagmi/providers/alchemy"; import { publicProvider } from "wagmi/providers/public"; import scaffoldConfig from "~~/scaffold.config"; import { burnerWalletConfig } from "~~/services/web3/wagmi-burner/burnerWalletConfig"; -import { getTargetNetwork } from "~~/utils/scaffold-eth"; +import { getTargetNetworks } from "~~/utils/scaffold-eth"; -const configuredNetwork = getTargetNetwork(); +const targetNetworks = getTargetNetworks(); const { onlyLocalBurnerWallet } = scaffoldConfig; // We always want to have mainnet enabled (ENS resolution, ETH price, etc). But only once. -const enabledChains = configuredNetwork.id === 1 ? [configuredNetwork] : [configuredNetwork, chains.mainnet]; +const enabledChains = targetNetworks.find(network => network.id === 1) + ? targetNetworks + : [...targetNetworks, chains.mainnet]; /** * Chains for the app @@ -36,8 +38,8 @@ export const appChains = configureChains( { // We might not need this checkout https://github.com/scaffold-eth/scaffold-eth-2/pull/45#discussion_r1024496359, will test and remove this before merging stallTimeout: 3_000, - // Sets pollingInterval if using chain's other than local hardhat chain - ...(configuredNetwork.id !== chains.hardhat.id + // Sets pollingInterval if using chains other than local hardhat chain + ...(targetNetworks.find(network => network.id !== chains.hardhat.id) ? { pollingInterval: scaffoldConfig.pollingInterval, } @@ -53,10 +55,14 @@ const wallets = [ braveWallet(walletsOptions), coinbaseWallet({ ...walletsOptions, appName: "scaffold-eth-2" }), rainbowWallet(walletsOptions), - ...(configuredNetwork.id === chains.hardhat.id || !onlyLocalBurnerWallet - ? [burnerWalletConfig({ chains: [appChains.chains[0]] })] + ...(!targetNetworks.some(network => network.id !== chains.hardhat.id) || !onlyLocalBurnerWallet + ? [ + burnerWalletConfig({ + chains: appChains.chains.filter(chain => targetNetworks.map(({ id }) => id).includes(chain.id)), + }), + ] : []), - safeWallet({ ...walletsOptions, debug: false, allowedDomains: [/gnosis-safe.io$/, /app.safe.global$/] }), + safeWallet({ ...walletsOptions }), ]; /** diff --git a/packages/nextjs/styles/globals.css b/packages/nextjs/styles/globals.css index 8090d38..3fb55ae 100644 --- a/packages/nextjs/styles/globals.css +++ b/packages/nextjs/styles/globals.css @@ -4,7 +4,7 @@ :root, [data-theme] { - background: hsl(var(--b2)); + background: oklch(var(--b2)); } body { diff --git a/packages/nextjs/tailwind.config.js b/packages/nextjs/tailwind.config.js index e3bbb72..e1ca91d 100644 --- a/packages/nextjs/tailwind.config.js +++ b/packages/nextjs/tailwind.config.js @@ -1,6 +1,6 @@ /** @type {import('tailwindcss').Config} */ module.exports = { - content: ["./pages/**/*.{js,ts,jsx,tsx}", "./components/**/*.{js,ts,jsx,tsx}", "./utils/**/*.{js,ts,jsx,tsx}"], + content: ["./app/**/*.{js,ts,jsx,tsx}", "./components/**/*.{js,ts,jsx,tsx}", "./utils/**/*.{js,ts,jsx,tsx}"], plugins: [require("daisyui")], darkTheme: "scaffoldEthDark", // DaisyUI theme colors @@ -30,22 +30,28 @@ module.exports = { ".tooltip": { "--tooltip-tail": "6px", }, + ".link": { + textUnderlineOffset: "2px", + }, + ".link:hover": { + opacity: "80%", + }, }, }, { scaffoldEthDark: { - primary: "#da5732", - "primary-content": "black", - secondary: "#da5732", - "secondary-content": "black", - accent: "black", - "accent-content": "orange", - neutral: "black", - "neutral-content": "grey", - "base-100": "grey", - "base-200": "#a83e20", - "base-300": "#424141", - "base-content": "black", + primary: "#212638", + "primary-content": "#F9FBFF", + secondary: "#323f61", + "secondary-content": "#F9FBFF", + accent: "#4969A6", + "accent-content": "#F9FBFF", + neutral: "#F9FBFF", + "neutral-content": "#385183", + "base-100": "#385183", + "base-200": "#2A3655", + "base-300": "#212638", + "base-content": "#F9FBFF", info: "#385183", success: "#34EEB6", warning: "#FFCF72", @@ -55,65 +61,25 @@ module.exports = { ".tooltip": { "--tooltip-tail": "6px", - "--tooltip-color": "hsl(var(--p))", + "--tooltip-color": "oklch(var(--p))", }, - }, - }, - { - exampleUi: { - primary: "#000000", - "primary-content": "#ffffff", - secondary: "#FF6644", - "secondary-content": "#212638", - accent: "#93BBFB", - "accent-content": "#212638", - neutral: "#f3f3f3", - "neutral-content": "#212638", - "base-100": "#ffffff", - "base-200": "#f1f1f1", - "base-300": "#d0d0d0", - "base-content": "#212638", - info: "#93BBFB", - success: "#34EEB6", - warning: "#FFCF72", - error: "#FF8863", - - "--rounded-btn": "9999rem", - - ".tooltip": { - "--tooltip-tail": "6px", + ".link": { + textUnderlineOffset: "2px", + }, + ".link:hover": { + opacity: "80%", }, }, }, ], }, theme: { - // Extend Tailwind classes (e.g. font-bai-jamjuree, animate-grow) extend: { - fontFamily: { - "bai-jamjuree": ["Bai Jamjuree", "sans-serif"], - }, boxShadow: { center: "0 0 12px -2px rgb(0 0 0 / 0.05)", }, - keyframes: { - grow: { - "0%": { - width: "0%", - }, - "100%": { - width: "100%", - }, - }, - zoom: { - "0%, 100%": { transform: "scale(1, 1)" }, - "50%": { transform: "scale(1.1, 1.1)" }, - }, - }, animation: { - grow: "grow 5s linear infinite", "pulse-fast": "pulse 1s cubic-bezier(0.4, 0, 0.6, 1) infinite", - zoom: "zoom 1s ease infinite", }, }, }, diff --git a/packages/nextjs/tsconfig.json b/packages/nextjs/tsconfig.json index 708cc8e..7d1e6d9 100644 --- a/packages/nextjs/tsconfig.json +++ b/packages/nextjs/tsconfig.json @@ -16,8 +16,13 @@ "incremental": true, "paths": { "~~/*": ["./*"] - } + }, + "plugins": [ + { + "name": "next" + } + ] }, - "include": ["next-env.d.ts", "**/*.ts", "**/*.tsx"], + "include": ["next-env.d.ts", "**/*.ts", "**/*.tsx", ".next/types/**/*.ts"], "exclude": ["node_modules"] } diff --git a/packages/nextjs/types/abitype/abi.d.ts b/packages/nextjs/types/abitype/abi.d.ts index 9922602..8b1301a 100644 --- a/packages/nextjs/types/abitype/abi.d.ts +++ b/packages/nextjs/types/abitype/abi.d.ts @@ -1,13 +1,15 @@ import "abitype"; +type AddressType = string; + declare module "viem/node_modules/abitype" { export interface Config { - AddressType: string; + AddressType: AddressType; } } declare module "abitype" { export interface Config { - AddressType: string; + AddressType: AddressType; } } diff --git a/packages/nextjs/types/utils.ts b/packages/nextjs/types/utils.ts new file mode 100644 index 0000000..8bb3bd3 --- /dev/null +++ b/packages/nextjs/types/utils.ts @@ -0,0 +1,3 @@ +export type Tuple = Current["length"] extends MaxLength + ? Current + : Current | Tuple; diff --git a/packages/nextjs/utils/scaffold-eth/block.ts b/packages/nextjs/utils/scaffold-eth/block.ts index 4cd753f..19e8c9f 100644 --- a/packages/nextjs/utils/scaffold-eth/block.ts +++ b/packages/nextjs/utils/scaffold-eth/block.ts @@ -7,11 +7,11 @@ export type TransactionWithFunction = Transaction & { functionArgTypes?: string[]; }; -interface TransactionReceipts { +type TransactionReceipts = { [key: string]: TransactionReceipt; -} +}; -export interface TransactionsTableProps { +export type TransactionsTableProps = { blocks: Block[]; transactionReceipts: TransactionReceipts; -} +}; diff --git a/packages/nextjs/utils/scaffold-eth/contract.ts b/packages/nextjs/utils/scaffold-eth/contract.ts index 18db05e..ac7fe4a 100644 --- a/packages/nextjs/utils/scaffold-eth/contract.ts +++ b/packages/nextjs/utils/scaffold-eth/contract.ts @@ -23,34 +23,54 @@ import deployedContractsData from "~~/contracts/deployedContracts"; import externalContractsData from "~~/contracts/externalContracts"; import scaffoldConfig from "~~/scaffold.config"; -const deepMergeContracts = , S extends Record>( - destination: D, - source: S, +type AddExternalFlag = { + [ChainId in keyof T]: { + [ContractName in keyof T[ChainId]]: T[ChainId][ContractName] & { external?: true }; + }; +}; + +const deepMergeContracts = , E extends Record>( + local: L, + external: E, ) => { const result: Record = {}; - - const allKeys = Array.from(new Set([...Object.keys(source), ...Object.keys(destination)])); + const allKeys = Array.from(new Set([...Object.keys(external), ...Object.keys(local)])); for (const key of allKeys) { - result[key] = { ...destination[key], ...source[key] }; + if (!external[key]) { + result[key] = local[key]; + continue; + } + const amendedExternal = Object.fromEntries( + Object.entries(external[key] as Record>).map(([contractName, declaration]) => [ + contractName, + { ...declaration, external: true }, + ]), + ); + result[key] = { ...local[key], ...amendedExternal }; } - - return result as MergeDeepRecord; + return result as MergeDeepRecord, AddExternalFlag, { arrayMergeMode: "replace" }>; }; const contractsData = deepMergeContracts(deployedContractsData, externalContractsData); +export type InheritedFunctions = { readonly [key: string]: string }; + +export type GenericContract = { + address: Address; + abi: Abi; + inheritedFunctions?: InheritedFunctions; + external?: true; +}; + export type GenericContractsDeclaration = { [chainId: number]: { - [contractName: string]: { - address: Address; - abi: Abi; - }; + [contractName: string]: GenericContract; }; }; export const contracts = contractsData as GenericContractsDeclaration | null; -type ConfiguredChainId = (typeof scaffoldConfig)["targetNetwork"]["id"]; +type ConfiguredChainId = (typeof scaffoldConfig)["targetNetworks"][0]["id"]; type IsContractDeclarationMissing = typeof contractsData extends { [key in ConfiguredChainId]: any } ? TNo @@ -84,7 +104,9 @@ export type AbiFunctionOutputs = export type AbiFunctionReturnType = IsContractDeclarationMissing< any, - AbiParametersToPrimitiveTypes>[0] + AbiParametersToPrimitiveTypes> extends readonly [any] + ? AbiParametersToPrimitiveTypes>[0] + : AbiParametersToPrimitiveTypes> >; export type AbiEventInputs> = ExtractAbiEvent< @@ -235,6 +257,8 @@ export type UseScaffoldEventHistoryConfig< blockData?: TBlockData; transactionData?: TTransactionData; receiptData?: TReceiptData; + watch?: boolean; + enabled?: boolean; }; export type UseScaffoldEventHistoryData< diff --git a/packages/nextjs/utils/scaffold-eth/contractNames.ts b/packages/nextjs/utils/scaffold-eth/contractNames.ts deleted file mode 100644 index 962b98b..0000000 --- a/packages/nextjs/utils/scaffold-eth/contractNames.ts +++ /dev/null @@ -1,7 +0,0 @@ -import scaffoldConfig from "~~/scaffold.config"; -import { ContractName, contracts } from "~~/utils/scaffold-eth/contract"; - -export function getContractNames() { - const contractsData = contracts?.[scaffoldConfig.targetNetwork.id]; - return contractsData ? (Object.keys(contractsData) as ContractName[]) : []; -} diff --git a/packages/nextjs/utils/scaffold-eth/contractsData.ts b/packages/nextjs/utils/scaffold-eth/contractsData.ts new file mode 100644 index 0000000..84d4278 --- /dev/null +++ b/packages/nextjs/utils/scaffold-eth/contractsData.ts @@ -0,0 +1,7 @@ +import scaffoldConfig from "~~/scaffold.config"; +import { contracts } from "~~/utils/scaffold-eth/contract"; + +export function getAllContracts() { + const contractsData = contracts?.[scaffoldConfig.targetNetworks[0].id]; + return contractsData ? contractsData : {}; +} diff --git a/packages/nextjs/utils/scaffold-eth/fetchPriceFromUniswap.ts b/packages/nextjs/utils/scaffold-eth/fetchPriceFromUniswap.ts index 312b07b..5a94ebd 100644 --- a/packages/nextjs/utils/scaffold-eth/fetchPriceFromUniswap.ts +++ b/packages/nextjs/utils/scaffold-eth/fetchPriceFromUniswap.ts @@ -1,9 +1,9 @@ import { CurrencyAmount, Token } from "@uniswap/sdk-core"; import { Pair, Route } from "@uniswap/v2-sdk"; -import { createPublicClient, http, parseAbi } from "viem"; +import { Address, createPublicClient, http, parseAbi } from "viem"; import { mainnet } from "wagmi"; import scaffoldConfig from "~~/scaffold.config"; -import { getTargetNetwork } from "~~/utils/scaffold-eth"; +import { ChainWithAttributes } from "~~/utils/scaffold-eth"; const publicClient = createPublicClient({ chain: mainnet, @@ -16,12 +16,11 @@ const ABI = parseAbi([ "function token1() external view returns (address)", ]); -export const fetchPriceFromUniswap = async (): Promise => { - const configuredNetwork = getTargetNetwork(); +export const fetchPriceFromUniswap = async (targetNetwork: ChainWithAttributes): Promise => { if ( - configuredNetwork.nativeCurrency.symbol !== "ETH" && - configuredNetwork.nativeCurrency.symbol !== "SEP" && - !configuredNetwork.nativeCurrencyTokenAddress + targetNetwork.nativeCurrency.symbol !== "ETH" && + targetNetwork.nativeCurrency.symbol !== "SEP" && + !targetNetwork.nativeCurrencyTokenAddress ) { return 0; } @@ -29,10 +28,10 @@ export const fetchPriceFromUniswap = async (): Promise => { const DAI = new Token(1, "0x6B175474E89094C44Da98b954EedeAC495271d0F", 18); const TOKEN = new Token( 1, - configuredNetwork.nativeCurrencyTokenAddress || "0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2", + targetNetwork.nativeCurrencyTokenAddress || "0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2", 18, ); - const pairAddress = Pair.getAddress(TOKEN, DAI); + const pairAddress = Pair.getAddress(TOKEN, DAI) as Address; const wagmiConfig = { address: pairAddress, @@ -63,7 +62,10 @@ export const fetchPriceFromUniswap = async (): Promise => { const price = parseFloat(route.midPrice.toSignificant(6)); return price; } catch (error) { - console.error("useNativeCurrencyPrice - Error fetching ETH price from Uniswap: ", error); + console.error( + `useNativeCurrencyPrice - Error fetching ${targetNetwork.nativeCurrency.symbol} price from Uniswap: `, + error, + ); return 0; } }; diff --git a/packages/nextjs/utils/scaffold-eth/getMetadata.ts b/packages/nextjs/utils/scaffold-eth/getMetadata.ts new file mode 100644 index 0000000..533784d --- /dev/null +++ b/packages/nextjs/utils/scaffold-eth/getMetadata.ts @@ -0,0 +1,34 @@ +import type { Metadata } from "next"; + +export const getMetadata = ({ + title, + description, + imageRelativePath = "/thumbnail.jpg", +}: { + title: string; + description: string; + imageRelativePath?: string; +}): Metadata => { + const baseUrl = process.env.NEXT_PUBLIC_VERCEL_URL + ? `https://${process.env.NEXT_PUBLIC_VERCEL_URL}` + : `http://localhost:${process.env.PORT}`; + const imageUrl = `${baseUrl}${imageRelativePath}`; + return { + title: title, + description: description, + openGraph: { + title: title, + description: description, + images: [ + { + url: imageUrl, + }, + ], + }, + twitter: { + title: title, + description: description, + images: [imageUrl], + }, + }; +}; diff --git a/packages/nextjs/utils/scaffold-eth/getParsedError.ts b/packages/nextjs/utils/scaffold-eth/getParsedError.ts new file mode 100644 index 0000000..31e7414 --- /dev/null +++ b/packages/nextjs/utils/scaffold-eth/getParsedError.ts @@ -0,0 +1,31 @@ +import { BaseError as BaseViemError, DecodeErrorResultReturnType } from "viem"; + +/** + * Parses an viem/wagmi error to get a displayable string + * @param e - error object + * @returns parsed error string + */ +export const getParsedError = (e: any): string => { + let message: string = e.message ?? "An unknown error occurred"; + if (e instanceof BaseViemError) { + if (e.details) { + message = e.details; + } else if (e.shortMessage) { + message = e.shortMessage; + const cause = e.cause as { data?: DecodeErrorResultReturnType } | undefined; + // if its not generic error, append custom error name and its args to message + if (cause?.data && cause.data?.abiItem?.name !== "Error") { + const customErrorArgs = cause.data.args?.toString() ?? ""; + message = `${message.replace(/reverted\.$/, "reverted with following reason:")}\n${ + cause.data.errorName + }(${customErrorArgs})`; + } + } else if (e.message) { + message = e.message; + } else if (e.name) { + message = e.name; + } + } + + return message; +}; diff --git a/packages/nextjs/utils/scaffold-eth/index.ts b/packages/nextjs/utils/scaffold-eth/index.ts index c6a6bd2..6d69193 100644 --- a/packages/nextjs/utils/scaffold-eth/index.ts +++ b/packages/nextjs/utils/scaffold-eth/index.ts @@ -3,3 +3,4 @@ export * from "./networks"; export * from "./notification"; export * from "./block"; export * from "./decodeTxData"; +export * from "./getParsedError"; diff --git a/packages/nextjs/utils/scaffold-eth/networks.ts b/packages/nextjs/utils/scaffold-eth/networks.ts index 6a31fd1..e2a39ac 100644 --- a/packages/nextjs/utils/scaffold-eth/networks.ts +++ b/packages/nextjs/utils/scaffold-eth/networks.ts @@ -1,7 +1,7 @@ import * as chains from "viem/chains"; import scaffoldConfig from "~~/scaffold.config"; -export type TChainAttributes = { +type ChainAttributes = { // color | [lightThemeColor, darkThemeColor] color: string | [string, string]; // Used to fetch price by providing mainnet token address @@ -9,7 +9,9 @@ export type TChainAttributes = { nativeCurrencyTokenAddress?: string; }; -export const NETWORKS_EXTRA_DATA: Record = { +export type ChainWithAttributes = chains.Chain & Partial; + +export const NETWORKS_EXTRA_DATA: Record = { [chains.hardhat.id]: { color: "#b8af0c", }, @@ -57,10 +59,7 @@ export const NETWORKS_EXTRA_DATA: Record = { }; /** - * Gives the block explorer transaction URL. - * @param network - * @param txnHash - * @dev returns empty string if the network is localChain + * Gives the block explorer transaction URL, returns empty string if the network is a local chain */ export function getBlockExplorerTxLink(chainId: number, txnHash: string) { const chainNames = Object.keys(chains); @@ -86,10 +85,8 @@ export function getBlockExplorerTxLink(chainId: number, txnHash: string) { } /** - * Gives the block explorer Address URL. - * @param network - wagmi chain object - * @param address - * @returns block explorer address URL and etherscan URL if block explorer URL is not present for wagmi network + * Gives the block explorer URL for a given address. + * Defaults to Etherscan if no (wagmi) block explorer is configured for the network. */ export function getBlockExplorerAddressLink(network: chains.Chain, address: string) { const blockExplorerBaseURL = network.blockExplorers?.default?.url; @@ -105,14 +102,11 @@ export function getBlockExplorerAddressLink(network: chains.Chain, address: stri } /** - * @returns targetNetwork object consisting targetNetwork from scaffold.config and extra network metadata + * @returns targetNetworks array containing networks configured in scaffold.config including extra network metadata */ - -export function getTargetNetwork(): chains.Chain & Partial { - const configuredNetwork = scaffoldConfig.targetNetwork; - - return { - ...configuredNetwork, - ...NETWORKS_EXTRA_DATA[configuredNetwork.id], - }; +export function getTargetNetworks(): ChainWithAttributes[] { + return scaffoldConfig.targetNetworks.map(targetNetwork => ({ + ...targetNetwork, + ...NETWORKS_EXTRA_DATA[targetNetwork.id], + })); } diff --git a/packages/nextjs/utils/scaffold-eth/notification.tsx b/packages/nextjs/utils/scaffold-eth/notification.tsx index bc454d4..cf57849 100644 --- a/packages/nextjs/utils/scaffold-eth/notification.tsx +++ b/packages/nextjs/utils/scaffold-eth/notification.tsx @@ -1,5 +1,5 @@ import React from "react"; -import { toast } from "react-hot-toast"; +import { ToastPosition, toast } from "react-hot-toast"; import { XMarkIcon } from "@heroicons/react/20/solid"; import { CheckCircleIcon, @@ -7,34 +7,31 @@ import { ExclamationTriangleIcon, InformationCircleIcon, } from "@heroicons/react/24/solid"; -import { Spinner } from "~~/components/assets/Spinner"; -type TPositions = "top-left" | "top-center" | "top-right" | "bottom-left" | "bottom-center" | "bottom-right"; - -type TNotificationProps = { +type NotificationProps = { content: React.ReactNode; status: "success" | "info" | "loading" | "error" | "warning"; duration?: number; icon?: string; - position?: TPositions; + position?: ToastPosition; }; type NotificationOptions = { duration?: number; icon?: string; - position?: TPositions; + position?: ToastPosition; }; const ENUM_STATUSES = { success: , - loading: , + loading: , error: , info: , warning: , }; const DEFAULT_DURATION = 3000; -const DEFAULT_POSITION: TPositions = "top-center"; +const DEFAULT_POSITION: ToastPosition = "top-center"; /** * Custom Notification @@ -45,7 +42,7 @@ const Notification = ({ duration = DEFAULT_DURATION, icon, position = DEFAULT_POSITION, -}: TNotificationProps) => { +}: NotificationProps) => { return toast.custom( t => (
    -
    {icon ? icon : ENUM_STATUSES[status]}
    -
    {content}
    +
    {icon ? icon : ENUM_STATUSES[status]}
    +
    {content}
    toast.dismiss(t.id)}> toast.remove(t.id)} /> diff --git a/yarn.lock b/yarn.lock index f6870db..3bc81eb 100644 --- a/yarn.lock +++ b/yarn.lock @@ -19,13 +19,6 @@ __metadata: languageName: node linkType: hard -"@adraffy/ens-normalize@npm:1.9.4": - version: 1.9.4 - resolution: "@adraffy/ens-normalize@npm:1.9.4" - checksum: 7d7fff58ebe2c4961f7e5e61dad123aa6a63fec0df5c84af1fa41079dc05d398599690be4427b3a94d2baa94084544bcfdf2d51cbed7504b9b0583b0960ad550 - languageName: node - linkType: hard - "@alloc/quick-lru@npm:^5.2.0": version: 5.2.0 resolution: "@alloc/quick-lru@npm:5.2.0" @@ -33,53 +26,13 @@ __metadata: languageName: node linkType: hard -"@ampproject/remapping@npm:^2.2.0": - version: 2.2.1 - resolution: "@ampproject/remapping@npm:2.2.1" - dependencies: - "@jridgewell/gen-mapping": ^0.3.0 - "@jridgewell/trace-mapping": ^0.3.9 - checksum: 03c04fd526acc64a1f4df22651186f3e5ef0a9d6d6530ce4482ec9841269cf7a11dbb8af79237c282d721c5312024ff17529cd72cc4768c11e999b58e2302079 - languageName: node - linkType: hard - -"@babel/code-frame@npm:^7.16.7, @babel/code-frame@npm:^7.22.13": - version: 7.22.13 - resolution: "@babel/code-frame@npm:7.22.13" +"@babel/code-frame@npm:^7.16.7, @babel/code-frame@npm:^7.23.5": + version: 7.23.5 + resolution: "@babel/code-frame@npm:7.23.5" dependencies: - "@babel/highlight": ^7.22.13 + "@babel/highlight": ^7.23.4 chalk: ^2.4.2 - checksum: 22e342c8077c8b77eeb11f554ecca2ba14153f707b85294fcf6070b6f6150aae88a7b7436dd88d8c9289970585f3fe5b9b941c5aa3aa26a6d5a8ef3f292da058 - languageName: node - linkType: hard - -"@babel/compat-data@npm:^7.22.6, @babel/compat-data@npm:^7.22.9, @babel/compat-data@npm:^7.23.3": - version: 7.23.3 - resolution: "@babel/compat-data@npm:7.23.3" - checksum: 52fff649d4e25b10e29e8a9b1c9ef117f44d354273c17b5ef056555f8e5db2429b35df4c38bdfb6865d23133e0fba92e558d31be87bb8457db4ac688646fdbf1 - languageName: node - linkType: hard - -"@babel/core@npm:^7.18.6, @babel/core@npm:^7.20.7": - version: 7.23.3 - resolution: "@babel/core@npm:7.23.3" - dependencies: - "@ampproject/remapping": ^2.2.0 - "@babel/code-frame": ^7.22.13 - "@babel/generator": ^7.23.3 - "@babel/helper-compilation-targets": ^7.22.15 - "@babel/helper-module-transforms": ^7.23.3 - "@babel/helpers": ^7.23.2 - "@babel/parser": ^7.23.3 - "@babel/template": ^7.22.15 - "@babel/traverse": ^7.23.3 - "@babel/types": ^7.23.3 - convert-source-map: ^2.0.0 - debug: ^4.1.0 - gensync: ^1.0.0-beta.2 - json5: ^2.2.3 - semver: ^6.3.1 - checksum: d306c1fa68972f4e085e9e7ad165aee80eb801ef331f6f07808c86309f03534d638b82ad00a3bc08f4d3de4860ccd38512b2790a39e6acc2caf9ea21e526afe7 + checksum: d90981fdf56a2824a9b14d19a4c0e8db93633fd488c772624b4e83e0ceac6039a27cd298a247c3214faa952bf803ba23696172ae7e7235f3b97f43ba278c569a languageName: node linkType: hard @@ -94,104 +47,26 @@ __metadata: languageName: node linkType: hard -"@babel/generator@npm:^7.17.3, @babel/generator@npm:^7.18.6, @babel/generator@npm:^7.23.3": - version: 7.23.3 - resolution: "@babel/generator@npm:7.23.3" +"@babel/generator@npm:^7.17.3": + version: 7.23.6 + resolution: "@babel/generator@npm:7.23.6" dependencies: - "@babel/types": ^7.23.3 + "@babel/types": ^7.23.6 "@jridgewell/gen-mapping": ^0.3.2 "@jridgewell/trace-mapping": ^0.3.17 jsesc: ^2.5.1 - checksum: b6e71cca852d4e1aa01a28a30b8c74ffc3b8d56ccb7ae3ee783028ee015f63ad861a2e386c3eb490a9a8634db485a503a33521680f4af510151e90346c46da17 - languageName: node - linkType: hard - -"@babel/helper-annotate-as-pure@npm:^7.22.5": - version: 7.22.5 - resolution: "@babel/helper-annotate-as-pure@npm:7.22.5" - dependencies: - "@babel/types": ^7.22.5 - checksum: 53da330f1835c46f26b7bf4da31f7a496dee9fd8696cca12366b94ba19d97421ce519a74a837f687749318f94d1a37f8d1abcbf35e8ed22c32d16373b2f6198d - languageName: node - linkType: hard - -"@babel/helper-builder-binary-assignment-operator-visitor@npm:^7.22.15": - version: 7.22.15 - resolution: "@babel/helper-builder-binary-assignment-operator-visitor@npm:7.22.15" - dependencies: - "@babel/types": ^7.22.15 - checksum: 639c697a1c729f9fafa2dd4c9af2e18568190299b5907bd4c2d0bc818fcbd1e83ffeecc2af24327a7faa7ac4c34edd9d7940510a5e66296c19bad17001cf5c7a - languageName: node - linkType: hard - -"@babel/helper-compilation-targets@npm:^7.22.15, @babel/helper-compilation-targets@npm:^7.22.6": - version: 7.22.15 - resolution: "@babel/helper-compilation-targets@npm:7.22.15" - dependencies: - "@babel/compat-data": ^7.22.9 - "@babel/helper-validator-option": ^7.22.15 - browserslist: ^4.21.9 - lru-cache: ^5.1.1 - semver: ^6.3.1 - checksum: ce85196769e091ae54dd39e4a80c2a9df1793da8588e335c383d536d54f06baf648d0a08fc873044f226398c4ded15c4ae9120ee18e7dfd7c639a68e3cdc9980 - languageName: node - linkType: hard - -"@babel/helper-create-class-features-plugin@npm:^7.22.15": - version: 7.22.15 - resolution: "@babel/helper-create-class-features-plugin@npm:7.22.15" - dependencies: - "@babel/helper-annotate-as-pure": ^7.22.5 - "@babel/helper-environment-visitor": ^7.22.5 - "@babel/helper-function-name": ^7.22.5 - "@babel/helper-member-expression-to-functions": ^7.22.15 - "@babel/helper-optimise-call-expression": ^7.22.5 - "@babel/helper-replace-supers": ^7.22.9 - "@babel/helper-skip-transparent-expression-wrappers": ^7.22.5 - "@babel/helper-split-export-declaration": ^7.22.6 - semver: ^6.3.1 - peerDependencies: - "@babel/core": ^7.0.0 - checksum: 52c500d8d164abb3a360b1b7c4b8fff77bc4a5920d3a2b41ae6e1d30617b0dc0b972c1f5db35b1752007e04a748908b4a99bc872b73549ae837e87dcdde005a3 - languageName: node - linkType: hard - -"@babel/helper-create-regexp-features-plugin@npm:^7.18.6, @babel/helper-create-regexp-features-plugin@npm:^7.22.15, @babel/helper-create-regexp-features-plugin@npm:^7.22.5": - version: 7.22.15 - resolution: "@babel/helper-create-regexp-features-plugin@npm:7.22.15" - dependencies: - "@babel/helper-annotate-as-pure": ^7.22.5 - regexpu-core: ^5.3.1 - semver: ^6.3.1 - peerDependencies: - "@babel/core": ^7.0.0 - checksum: 0243b8d4854f1dc8861b1029a46d3f6393ad72f366a5a08e36a4648aa682044f06da4c6e87a456260e1e1b33c999f898ba591a0760842c1387bcc93fbf2151a6 - languageName: node - linkType: hard - -"@babel/helper-define-polyfill-provider@npm:^0.4.3": - version: 0.4.3 - resolution: "@babel/helper-define-polyfill-provider@npm:0.4.3" - dependencies: - "@babel/helper-compilation-targets": ^7.22.6 - "@babel/helper-plugin-utils": ^7.22.5 - debug: ^4.1.1 - lodash.debounce: ^4.0.8 - resolve: ^1.14.2 - peerDependencies: - "@babel/core": ^7.4.0 || ^8.0.0-0 <8.0.0 - checksum: 5d21e3f47b320e4b5b644195ec405e7ebc3739e48e65899efc808c5fa9c3bf5b06ce0d8ff5246ca99d1411e368f4557bc66730196c5781a5c4e986ee703bee79 + checksum: 1a1a1c4eac210f174cd108d479464d053930a812798e09fee069377de39a893422df5b5b146199ead7239ae6d3a04697b45fc9ac6e38e0f6b76374390f91fc6c languageName: node linkType: hard -"@babel/helper-environment-visitor@npm:^7.16.7, @babel/helper-environment-visitor@npm:^7.22.20, @babel/helper-environment-visitor@npm:^7.22.5": +"@babel/helper-environment-visitor@npm:^7.16.7": version: 7.22.20 resolution: "@babel/helper-environment-visitor@npm:7.22.20" checksum: d80ee98ff66f41e233f36ca1921774c37e88a803b2f7dca3db7c057a5fea0473804db9fb6729e5dbfd07f4bed722d60f7852035c2c739382e84c335661590b69 languageName: node linkType: hard -"@babel/helper-function-name@npm:^7.16.7, @babel/helper-function-name@npm:^7.22.5, @babel/helper-function-name@npm:^7.23.0": +"@babel/helper-function-name@npm:^7.16.7": version: 7.23.0 resolution: "@babel/helper-function-name@npm:7.23.0" dependencies: @@ -201,7 +76,7 @@ __metadata: languageName: node linkType: hard -"@babel/helper-hoist-variables@npm:^7.16.7, @babel/helper-hoist-variables@npm:^7.22.5": +"@babel/helper-hoist-variables@npm:^7.16.7": version: 7.22.5 resolution: "@babel/helper-hoist-variables@npm:7.22.5" dependencies: @@ -210,10694 +85,6916 @@ __metadata: languageName: node linkType: hard -"@babel/helper-member-expression-to-functions@npm:^7.22.15": - version: 7.23.0 - resolution: "@babel/helper-member-expression-to-functions@npm:7.23.0" +"@babel/helper-split-export-declaration@npm:^7.16.7": + version: 7.22.6 + resolution: "@babel/helper-split-export-declaration@npm:7.22.6" dependencies: - "@babel/types": ^7.23.0 - checksum: 494659361370c979ada711ca685e2efe9460683c36db1b283b446122596602c901e291e09f2f980ecedfe6e0f2bd5386cb59768285446530df10c14df1024e75 + "@babel/types": ^7.22.5 + checksum: e141cace583b19d9195f9c2b8e17a3ae913b7ee9b8120246d0f9ca349ca6f03cb2c001fd5ec57488c544347c0bb584afec66c936511e447fd20a360e591ac921 languageName: node linkType: hard -"@babel/helper-module-imports@npm:^7.22.15": - version: 7.22.15 - resolution: "@babel/helper-module-imports@npm:7.22.15" - dependencies: - "@babel/types": ^7.22.15 - checksum: ecd7e457df0a46f889228f943ef9b4a47d485d82e030676767e6a2fdcbdaa63594d8124d4b55fd160b41c201025aec01fc27580352b1c87a37c9c6f33d116702 +"@babel/helper-string-parser@npm:^7.23.4": + version: 7.23.4 + resolution: "@babel/helper-string-parser@npm:7.23.4" + checksum: c0641144cf1a7e7dc93f3d5f16d5327465b6cf5d036b48be61ecba41e1eece161b48f46b7f960951b67f8c3533ce506b16dece576baef4d8b3b49f8c65410f90 languageName: node linkType: hard -"@babel/helper-module-transforms@npm:^7.23.3": - version: 7.23.3 - resolution: "@babel/helper-module-transforms@npm:7.23.3" - dependencies: - "@babel/helper-environment-visitor": ^7.22.20 - "@babel/helper-module-imports": ^7.22.15 - "@babel/helper-simple-access": ^7.22.5 - "@babel/helper-split-export-declaration": ^7.22.6 - "@babel/helper-validator-identifier": ^7.22.20 - peerDependencies: - "@babel/core": ^7.0.0 - checksum: 5d0895cfba0e16ae16f3aa92fee108517023ad89a855289c4eb1d46f7aef4519adf8e6f971e1d55ac20c5461610e17213f1144097a8f932e768a9132e2278d71 +"@babel/helper-validator-identifier@npm:^7.16.7, @babel/helper-validator-identifier@npm:^7.22.20": + version: 7.22.20 + resolution: "@babel/helper-validator-identifier@npm:7.22.20" + checksum: 136412784d9428266bcdd4d91c32bcf9ff0e8d25534a9d94b044f77fe76bc50f941a90319b05aafd1ec04f7d127cd57a179a3716009ff7f3412ef835ada95bdc languageName: node linkType: hard -"@babel/helper-optimise-call-expression@npm:^7.22.5": - version: 7.22.5 - resolution: "@babel/helper-optimise-call-expression@npm:7.22.5" +"@babel/highlight@npm:^7.23.4": + version: 7.23.4 + resolution: "@babel/highlight@npm:7.23.4" dependencies: - "@babel/types": ^7.22.5 - checksum: c70ef6cc6b6ed32eeeec4482127e8be5451d0e5282d5495d5d569d39eb04d7f1d66ec99b327f45d1d5842a9ad8c22d48567e93fc502003a47de78d122e355f7c + "@babel/helper-validator-identifier": ^7.22.20 + chalk: ^2.4.2 + js-tokens: ^4.0.0 + checksum: 643acecdc235f87d925979a979b539a5d7d1f31ae7db8d89047269082694122d11aa85351304c9c978ceeb6d250591ccadb06c366f358ccee08bb9c122476b89 languageName: node linkType: hard -"@babel/helper-plugin-utils@npm:^7.0.0, @babel/helper-plugin-utils@npm:^7.10.4, @babel/helper-plugin-utils@npm:^7.12.13, @babel/helper-plugin-utils@npm:^7.14.5, @babel/helper-plugin-utils@npm:^7.18.6, @babel/helper-plugin-utils@npm:^7.22.5, @babel/helper-plugin-utils@npm:^7.8.0, @babel/helper-plugin-utils@npm:^7.8.3": - version: 7.22.5 - resolution: "@babel/helper-plugin-utils@npm:7.22.5" - checksum: c0fc7227076b6041acd2f0e818145d2e8c41968cc52fb5ca70eed48e21b8fe6dd88a0a91cbddf4951e33647336eb5ae184747ca706817ca3bef5e9e905151ff5 +"@babel/parser@npm:^7.17.3, @babel/parser@npm:^7.20.5, @babel/parser@npm:^7.23.9": + version: 7.23.9 + resolution: "@babel/parser@npm:7.23.9" + bin: + parser: ./bin/babel-parser.js + checksum: e7cd4960ac8671774e13803349da88d512f9292d7baa952173260d3e8f15620a28a3701f14f709d769209022f9e7b79965256b8be204fc550cfe783cdcabe7c7 languageName: node linkType: hard -"@babel/helper-remap-async-to-generator@npm:^7.22.20": - version: 7.22.20 - resolution: "@babel/helper-remap-async-to-generator@npm:7.22.20" +"@babel/runtime@npm:^7.12.5, @babel/runtime@npm:^7.23.2": + version: 7.23.9 + resolution: "@babel/runtime@npm:7.23.9" dependencies: - "@babel/helper-annotate-as-pure": ^7.22.5 - "@babel/helper-environment-visitor": ^7.22.20 - "@babel/helper-wrap-function": ^7.22.20 - peerDependencies: - "@babel/core": ^7.0.0 - checksum: 2fe6300a6f1b58211dffa0aed1b45d4958506d096543663dba83bd9251fe8d670fa909143a65b45e72acb49e7e20fbdb73eae315d9ddaced467948c3329986e7 + regenerator-runtime: ^0.14.0 + checksum: 6bbebe8d27c0c2dd275d1ac197fc1a6c00e18dab68cc7aaff0adc3195b45862bae9c4cc58975629004b0213955b2ed91e99eccb3d9b39cabea246c657323d667 languageName: node linkType: hard -"@babel/helper-replace-supers@npm:^7.22.20, @babel/helper-replace-supers@npm:^7.22.9": - version: 7.22.20 - resolution: "@babel/helper-replace-supers@npm:7.22.20" +"@babel/template@npm:^7.22.15": + version: 7.23.9 + resolution: "@babel/template@npm:7.23.9" dependencies: - "@babel/helper-environment-visitor": ^7.22.20 - "@babel/helper-member-expression-to-functions": ^7.22.15 - "@babel/helper-optimise-call-expression": ^7.22.5 - peerDependencies: - "@babel/core": ^7.0.0 - checksum: a0008332e24daedea2e9498733e3c39b389d6d4512637e000f96f62b797e702ee24a407ccbcd7a236a551590a38f31282829a8ef35c50a3c0457d88218cae639 + "@babel/code-frame": ^7.23.5 + "@babel/parser": ^7.23.9 + "@babel/types": ^7.23.9 + checksum: 6e67414c0f7125d7ecaf20c11fab88085fa98a96c3ef10da0a61e962e04fdf3a18a496a66047005ddd1bb682a7cc7842d556d1db2f3f3f6ccfca97d5e445d342 languageName: node linkType: hard -"@babel/helper-simple-access@npm:^7.22.5": - version: 7.22.5 - resolution: "@babel/helper-simple-access@npm:7.22.5" +"@babel/traverse@npm:7.17.3": + version: 7.17.3 + resolution: "@babel/traverse@npm:7.17.3" dependencies: - "@babel/types": ^7.22.5 - checksum: fe9686714caf7d70aedb46c3cce090f8b915b206e09225f1e4dbc416786c2fdbbee40b38b23c268b7ccef749dd2db35f255338fb4f2444429874d900dede5ad2 + "@babel/code-frame": ^7.16.7 + "@babel/generator": ^7.17.3 + "@babel/helper-environment-visitor": ^7.16.7 + "@babel/helper-function-name": ^7.16.7 + "@babel/helper-hoist-variables": ^7.16.7 + "@babel/helper-split-export-declaration": ^7.16.7 + "@babel/parser": ^7.17.3 + "@babel/types": ^7.17.0 + debug: ^4.1.0 + globals: ^11.1.0 + checksum: 780d7ecf711758174989794891af08d378f81febdb8932056c0d9979524bf0298e28f8e7708a872d7781151506c28f56c85c63ea3f1f654662c2fcb8a3eb9fdc languageName: node linkType: hard -"@babel/helper-skip-transparent-expression-wrappers@npm:^7.22.5": - version: 7.22.5 - resolution: "@babel/helper-skip-transparent-expression-wrappers@npm:7.22.5" +"@babel/types@npm:7.17.0": + version: 7.17.0 + resolution: "@babel/types@npm:7.17.0" dependencies: - "@babel/types": ^7.22.5 - checksum: 1012ef2295eb12dc073f2b9edf3425661e9b8432a3387e62a8bc27c42963f1f216ab3124228015c748770b2257b4f1fda882ca8fa34c0bf485e929ae5bc45244 + "@babel/helper-validator-identifier": ^7.16.7 + to-fast-properties: ^2.0.0 + checksum: 12e5a287986fe557188e87b2c5202223f1dc83d9239a196ab936fdb9f8c1eb0be717ff19f934b5fad4e29a75586d5798f74bed209bccea1c20376b9952056f0e languageName: node linkType: hard -"@babel/helper-split-export-declaration@npm:^7.16.7, @babel/helper-split-export-declaration@npm:^7.22.6": - version: 7.22.6 - resolution: "@babel/helper-split-export-declaration@npm:7.22.6" +"@babel/types@npm:^7.17.0, @babel/types@npm:^7.22.5, @babel/types@npm:^7.23.0, @babel/types@npm:^7.23.6, @babel/types@npm:^7.23.9, @babel/types@npm:^7.8.3": + version: 7.23.9 + resolution: "@babel/types@npm:7.23.9" dependencies: - "@babel/types": ^7.22.5 - checksum: e141cace583b19d9195f9c2b8e17a3ae913b7ee9b8120246d0f9ca349ca6f03cb2c001fd5ec57488c544347c0bb584afec66c936511e447fd20a360e591ac921 + "@babel/helper-string-parser": ^7.23.4 + "@babel/helper-validator-identifier": ^7.22.20 + to-fast-properties: ^2.0.0 + checksum: 0a9b008e9bfc89beb8c185e620fa0f8ed6c771f1e1b2e01e1596870969096fec7793898a1d64a035176abf1dd13e2668ee30bf699f2d92c210a8128f4b151e65 languageName: node linkType: hard -"@babel/helper-string-parser@npm:^7.22.5": - version: 7.22.5 - resolution: "@babel/helper-string-parser@npm:7.22.5" - checksum: 836851ca5ec813077bbb303acc992d75a360267aa3b5de7134d220411c852a6f17de7c0d0b8c8dcc0f567f67874c00f4528672b2a4f1bc978a3ada64c8c78467 +"@coinbase/wallet-sdk@npm:^3.6.6": + version: 3.9.1 + resolution: "@coinbase/wallet-sdk@npm:3.9.1" + dependencies: + bn.js: ^5.2.1 + buffer: ^6.0.3 + clsx: ^1.2.1 + eth-block-tracker: ^7.1.0 + eth-json-rpc-filters: ^6.0.0 + eventemitter3: ^5.0.1 + keccak: ^3.0.3 + preact: ^10.16.0 + sha.js: ^2.4.11 + checksum: 8e6ab9c1fdfe87c703e65e046c62b5d24821b103ae616646dd79b5639a6fef8861e5548a501598bd21d3b6884cd2ed86821b4517c1d3b90574f23f4ca4a459ba languageName: node linkType: hard -"@babel/helper-validator-identifier@npm:^7.16.7, @babel/helper-validator-identifier@npm:^7.22.20": - version: 7.22.20 - resolution: "@babel/helper-validator-identifier@npm:7.22.20" - checksum: 136412784d9428266bcdd4d91c32bcf9ff0e8d25534a9d94b044f77fe76bc50f941a90319b05aafd1ec04f7d127cd57a179a3716009ff7f3412ef835ada95bdc +"@cspotcode/source-map-support@npm:^0.8.0": + version: 0.8.1 + resolution: "@cspotcode/source-map-support@npm:0.8.1" + dependencies: + "@jridgewell/trace-mapping": 0.3.9 + checksum: 5718f267085ed8edb3e7ef210137241775e607ee18b77d95aa5bd7514f47f5019aa2d82d96b3bf342ef7aa890a346fa1044532ff7cc3009e7d24fce3ce6200fa languageName: node linkType: hard -"@babel/helper-validator-option@npm:^7.22.15": - version: 7.22.15 - resolution: "@babel/helper-validator-option@npm:7.22.15" - checksum: 68da52b1e10002a543161494c4bc0f4d0398c8fdf361d5f7f4272e95c45d5b32d974896d44f6a0ea7378c9204988879d73613ca683e13bd1304e46d25ff67a8d +"@edge-runtime/cookies@npm:3.4.1": + version: 3.4.1 + resolution: "@edge-runtime/cookies@npm:3.4.1" + checksum: 606642b61f29559f9e26752a1503e3eb33e86c6ec042905f872ab31aca758872ccdef145b3c5597107732df0ee81935974bbcc21a614744a7b2808780316a910 languageName: node linkType: hard -"@babel/helper-wrap-function@npm:^7.22.20": - version: 7.22.20 - resolution: "@babel/helper-wrap-function@npm:7.22.20" - dependencies: - "@babel/helper-function-name": ^7.22.5 - "@babel/template": ^7.22.15 - "@babel/types": ^7.22.19 - checksum: 221ed9b5572612aeb571e4ce6a256f2dee85b3c9536f1dd5e611b0255e5f59a3d0ec392d8d46d4152149156a8109f92f20379b1d6d36abb613176e0e33f05fca +"@edge-runtime/format@npm:2.2.0": + version: 2.2.0 + resolution: "@edge-runtime/format@npm:2.2.0" + checksum: cfe6e009264b8676de4b1ec8f6ddc64efdea2f801a600af02ca487dc88cde35f4396d288a1bc5efc75a9ac1d6d5130b285c8ea80a13125d225daf2e803a68925 languageName: node linkType: hard -"@babel/helpers@npm:^7.23.2": - version: 7.23.2 - resolution: "@babel/helpers@npm:7.23.2" +"@edge-runtime/node-utils@npm:2.2.1": + version: 2.2.1 + resolution: "@edge-runtime/node-utils@npm:2.2.1" dependencies: - "@babel/template": ^7.22.15 - "@babel/traverse": ^7.23.2 - "@babel/types": ^7.23.0 - checksum: aaf4828df75ec460eaa70e5c9f66e6dadc28dae3728ddb7f6c13187dbf38030e142194b83d81aa8a31bbc35a5529a5d7d3f3cf59d5d0b595f5dd7f9d8f1ced8e + "@edge-runtime/cookies": 3.4.1 + checksum: 6c18350bf7a6e273c2725d62bf3ffb317ce19378fba8c3191803653b27d1550a0ade0372d58b11a967768b75372f5bebe1fb33f25f0e53c414d61bfdaa14a40a languageName: node linkType: hard -"@babel/highlight@npm:^7.22.13": - version: 7.22.20 - resolution: "@babel/highlight@npm:7.22.20" - dependencies: - "@babel/helper-validator-identifier": ^7.22.20 - chalk: ^2.4.2 - js-tokens: ^4.0.0 - checksum: 84bd034dca309a5e680083cd827a766780ca63cef37308404f17653d32366ea76262bd2364b2d38776232f2d01b649f26721417d507e8b4b6da3e4e739f6d134 +"@edge-runtime/primitives@npm:3.1.1": + version: 3.1.1 + resolution: "@edge-runtime/primitives@npm:3.1.1" + checksum: 8390c10c7c484735704444571293a5221c5574c6c83db8e0e98cf189969564ee62d44055badf50640b899908e4f79f6b29333ceae6634c0c12fec665414791f7 languageName: node linkType: hard -"@babel/parser@npm:^7.17.3, @babel/parser@npm:^7.18.6, @babel/parser@npm:^7.20.5, @babel/parser@npm:^7.22.15, @babel/parser@npm:^7.23.3": - version: 7.23.3 - resolution: "@babel/parser@npm:7.23.3" - bin: - parser: ./bin/babel-parser.js - checksum: 4aa7366e401b5467192c1dbf2bef99ac0958c45ef69ed6704abbae68f98fab6409a527b417d1528fddc49d7664450670528adc7f45abb04db5fafca7ed766d57 +"@edge-runtime/vm@npm:3.1.1": + version: 3.1.1 + resolution: "@edge-runtime/vm@npm:3.1.1" + dependencies: + "@edge-runtime/primitives": 3.1.1 + checksum: 6b9b2a558163e166aa7e234903fabcf49e7552b8b6b915c7a34535e2bce6146791d7ab62c572105796cde3dc08007d37eb20a1f43ee1f60848b0add2e1d1eedc languageName: node linkType: hard -"@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@npm:^7.23.3": - version: 7.23.3 - resolution: "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@npm:7.23.3" - dependencies: - "@babel/helper-plugin-utils": ^7.22.5 - peerDependencies: - "@babel/core": ^7.0.0 - checksum: ddbaf2c396b7780f15e80ee01d6dd790db076985f3dfeb6527d1a8d4cacf370e49250396a3aa005b2c40233cac214a106232f83703d5e8491848bde273938232 +"@emotion/hash@npm:^0.8.0": + version: 0.8.0 + resolution: "@emotion/hash@npm:0.8.0" + checksum: 4b35d88a97e67275c1d990c96d3b0450451d089d1508619488fc0acb882cb1ac91e93246d471346ebd1b5402215941ef4162efe5b51534859b39d8b3a0e3ffaa languageName: node linkType: hard -"@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@npm:^7.23.3": - version: 7.23.3 - resolution: "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@npm:7.23.3" +"@eslint/eslintrc@npm:^1.3.2": + version: 1.4.1 + resolution: "@eslint/eslintrc@npm:1.4.1" dependencies: - "@babel/helper-plugin-utils": ^7.22.5 - "@babel/helper-skip-transparent-expression-wrappers": ^7.22.5 - "@babel/plugin-transform-optional-chaining": ^7.23.3 - peerDependencies: - "@babel/core": ^7.13.0 - checksum: 434b9d710ae856fa1a456678cc304fbc93915af86d581ee316e077af746a709a741ea39d7e1d4f5b98861b629cc7e87f002d3138f5e836775632466d4c74aef2 + ajv: ^6.12.4 + debug: ^4.3.2 + espree: ^9.4.0 + globals: ^13.19.0 + ignore: ^5.2.0 + import-fresh: ^3.2.1 + js-yaml: ^4.1.0 + minimatch: ^3.1.2 + strip-json-comments: ^3.1.1 + checksum: cd3e5a8683db604739938b1c1c8b77927dc04fce3e28e0c88e7f2cd4900b89466baf83dfbad76b2b9e4d2746abdd00dd3f9da544d3e311633d8693f327d04cd7 languageName: node linkType: hard -"@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@npm:^7.23.3": - version: 7.23.3 - resolution: "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@npm:7.23.3" +"@ethereumjs/common@npm:^3.2.0": + version: 3.2.0 + resolution: "@ethereumjs/common@npm:3.2.0" dependencies: - "@babel/helper-environment-visitor": ^7.22.20 - "@babel/helper-plugin-utils": ^7.22.5 - peerDependencies: - "@babel/core": ^7.0.0 - checksum: 4690123f0ef7c11d6bf1a9579e4f463ce363563b75ec3f6ca66cf68687e39d8d747a82c833847653962f79da367eca895d9095c60d8ebb224a1d4277003acc11 + "@ethereumjs/util": ^8.1.0 + crc-32: ^1.2.0 + checksum: cb9cc11f5c868cb577ba611cebf55046e509218bbb89b47ccce010776dafe8256d70f8f43fab238aec74cf71f62601cd5842bc03a83261200802de365732a14b languageName: node linkType: hard -"@babel/plugin-proposal-private-property-in-object@npm:7.21.0-placeholder-for-preset-env.2": - version: 7.21.0-placeholder-for-preset-env.2 - resolution: "@babel/plugin-proposal-private-property-in-object@npm:7.21.0-placeholder-for-preset-env.2" - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: d97745d098b835d55033ff3a7fb2b895b9c5295b08a5759e4f20df325aa385a3e0bc9bd5ad8f2ec554a44d4e6525acfc257b8c5848a1345cb40f26a30e277e91 +"@ethereumjs/rlp@npm:^4.0.1": + version: 4.0.1 + resolution: "@ethereumjs/rlp@npm:4.0.1" + bin: + rlp: bin/rlp + checksum: 30db19c78faa2b6ff27275ab767646929207bb207f903f09eb3e4c273ce2738b45f3c82169ddacd67468b4f063d8d96035f2bf36f02b6b7e4d928eefe2e3ecbc languageName: node linkType: hard -"@babel/plugin-syntax-async-generators@npm:^7.8.4": - version: 7.8.4 - resolution: "@babel/plugin-syntax-async-generators@npm:7.8.4" +"@ethereumjs/tx@npm:^4.1.2, @ethereumjs/tx@npm:^4.2.0": + version: 4.2.0 + resolution: "@ethereumjs/tx@npm:4.2.0" dependencies: - "@babel/helper-plugin-utils": ^7.8.0 - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 7ed1c1d9b9e5b64ef028ea5e755c0be2d4e5e4e3d6cf7df757b9a8c4cfa4193d268176d0f1f7fbecdda6fe722885c7fda681f480f3741d8a2d26854736f05367 + "@ethereumjs/common": ^3.2.0 + "@ethereumjs/rlp": ^4.0.1 + "@ethereumjs/util": ^8.1.0 + ethereum-cryptography: ^2.0.0 + checksum: 87a3f5f2452cfbf6712f8847525a80c213210ed453c211c793c5df801fe35ecef28bae17fadd222fcbdd94277478a47e52d2b916a90a6b30cda21f1e0cdaee42 languageName: node linkType: hard -"@babel/plugin-syntax-class-properties@npm:^7.12.13": - version: 7.12.13 - resolution: "@babel/plugin-syntax-class-properties@npm:7.12.13" +"@ethereumjs/util@npm:^8.1.0": + version: 8.1.0 + resolution: "@ethereumjs/util@npm:8.1.0" dependencies: - "@babel/helper-plugin-utils": ^7.12.13 - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 24f34b196d6342f28d4bad303612d7ff566ab0a013ce89e775d98d6f832969462e7235f3e7eaf17678a533d4be0ba45d3ae34ab4e5a9dcbda5d98d49e5efa2fc + "@ethereumjs/rlp": ^4.0.1 + ethereum-cryptography: ^2.0.0 + micro-ftch: ^0.3.1 + checksum: 9ae5dee8f12b0faf81cd83f06a41560e79b0ba96a48262771d897a510ecae605eb6d84f687da001ab8ccffd50f612ae50f988ef76e6312c752897f462f3ac08d languageName: node linkType: hard -"@babel/plugin-syntax-class-static-block@npm:^7.14.5": - version: 7.14.5 - resolution: "@babel/plugin-syntax-class-static-block@npm:7.14.5" +"@ethersproject/abi@npm:5.7.0, @ethersproject/abi@npm:^5.7.0": + version: 5.7.0 + resolution: "@ethersproject/abi@npm:5.7.0" dependencies: - "@babel/helper-plugin-utils": ^7.14.5 - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 3e80814b5b6d4fe17826093918680a351c2d34398a914ce6e55d8083d72a9bdde4fbaf6a2dcea0e23a03de26dc2917ae3efd603d27099e2b98380345703bf948 + "@ethersproject/address": ^5.7.0 + "@ethersproject/bignumber": ^5.7.0 + "@ethersproject/bytes": ^5.7.0 + "@ethersproject/constants": ^5.7.0 + "@ethersproject/hash": ^5.7.0 + "@ethersproject/keccak256": ^5.7.0 + "@ethersproject/logger": ^5.7.0 + "@ethersproject/properties": ^5.7.0 + "@ethersproject/strings": ^5.7.0 + checksum: bc6962bb6cb854e4d2a4d65b2c49c716477675b131b1363312234bdbb7e19badb7d9ce66f4ca2a70ae2ea84f7123dbc4e300a1bfe5d58864a7eafabc1466627e languageName: node linkType: hard -"@babel/plugin-syntax-dynamic-import@npm:^7.8.3": - version: 7.8.3 - resolution: "@babel/plugin-syntax-dynamic-import@npm:7.8.3" +"@ethersproject/abstract-provider@npm:5.7.0, @ethersproject/abstract-provider@npm:^5.7.0": + version: 5.7.0 + resolution: "@ethersproject/abstract-provider@npm:5.7.0" dependencies: - "@babel/helper-plugin-utils": ^7.8.0 - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: ce307af83cf433d4ec42932329fad25fa73138ab39c7436882ea28742e1c0066626d224e0ad2988724c82644e41601cef607b36194f695cb78a1fcdc959637bd + "@ethersproject/bignumber": ^5.7.0 + "@ethersproject/bytes": ^5.7.0 + "@ethersproject/logger": ^5.7.0 + "@ethersproject/networks": ^5.7.0 + "@ethersproject/properties": ^5.7.0 + "@ethersproject/transactions": ^5.7.0 + "@ethersproject/web": ^5.7.0 + checksum: 74cf4696245cf03bb7cc5b6cbf7b4b89dd9a79a1c4688126d214153a938126d4972d42c93182198653ce1de35f2a2cad68be40337d4774b3698a39b28f0228a8 languageName: node linkType: hard -"@babel/plugin-syntax-export-namespace-from@npm:^7.8.3": - version: 7.8.3 - resolution: "@babel/plugin-syntax-export-namespace-from@npm:7.8.3" +"@ethersproject/abstract-signer@npm:5.7.0, @ethersproject/abstract-signer@npm:^5.7.0": + version: 5.7.0 + resolution: "@ethersproject/abstract-signer@npm:5.7.0" dependencies: - "@babel/helper-plugin-utils": ^7.8.3 - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 85740478be5b0de185228e7814451d74ab8ce0a26fcca7613955262a26e99e8e15e9da58f60c754b84515d4c679b590dbd3f2148f0f58025f4ae706f1c5a5d4a + "@ethersproject/abstract-provider": ^5.7.0 + "@ethersproject/bignumber": ^5.7.0 + "@ethersproject/bytes": ^5.7.0 + "@ethersproject/logger": ^5.7.0 + "@ethersproject/properties": ^5.7.0 + checksum: a823dac9cfb761e009851050ebebd5b229d1b1cc4a75b125c2da130ff37e8218208f7f9d1386f77407705b889b23d4a230ad67185f8872f083143e0073cbfbe3 languageName: node linkType: hard -"@babel/plugin-syntax-import-assertions@npm:^7.23.3": - version: 7.23.3 - resolution: "@babel/plugin-syntax-import-assertions@npm:7.23.3" +"@ethersproject/address@npm:5.7.0, @ethersproject/address@npm:^5.0.0, @ethersproject/address@npm:^5.0.2, @ethersproject/address@npm:^5.7.0": + version: 5.7.0 + resolution: "@ethersproject/address@npm:5.7.0" dependencies: - "@babel/helper-plugin-utils": ^7.22.5 - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 883e6b35b2da205138caab832d54505271a3fee3fc1e8dc0894502434fc2b5d517cbe93bbfbfef8068a0fb6ec48ebc9eef3f605200a489065ba43d8cddc1c9a7 + "@ethersproject/bignumber": ^5.7.0 + "@ethersproject/bytes": ^5.7.0 + "@ethersproject/keccak256": ^5.7.0 + "@ethersproject/logger": ^5.7.0 + "@ethersproject/rlp": ^5.7.0 + checksum: 64ea5ebea9cc0e845c413e6cb1e54e157dd9fc0dffb98e239d3a3efc8177f2ff798cd4e3206cf3660ee8faeb7bef1a47dc0ebef0d7b132c32e61e550c7d4c843 languageName: node linkType: hard -"@babel/plugin-syntax-import-attributes@npm:^7.23.3": - version: 7.23.3 - resolution: "@babel/plugin-syntax-import-attributes@npm:7.23.3" +"@ethersproject/base64@npm:5.7.0, @ethersproject/base64@npm:^5.7.0": + version: 5.7.0 + resolution: "@ethersproject/base64@npm:5.7.0" dependencies: - "@babel/helper-plugin-utils": ^7.22.5 - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 9aed7661ffb920ca75df9f494757466ca92744e43072e0848d87fa4aa61a3f2ee5a22198ac1959856c036434b5614a8f46f1fb70298835dbe28220cdd1d4c11e + "@ethersproject/bytes": ^5.7.0 + checksum: 7dd5d734d623582f08f665434f53685041a3d3b334a0e96c0c8afa8bbcaab934d50e5b6b980e826a8fde8d353e0b18f11e61faf17468177274b8e7c69cd9742b languageName: node linkType: hard -"@babel/plugin-syntax-import-meta@npm:^7.10.4": - version: 7.10.4 - resolution: "@babel/plugin-syntax-import-meta@npm:7.10.4" +"@ethersproject/basex@npm:5.7.0, @ethersproject/basex@npm:^5.7.0": + version: 5.7.0 + resolution: "@ethersproject/basex@npm:5.7.0" dependencies: - "@babel/helper-plugin-utils": ^7.10.4 - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 166ac1125d10b9c0c430e4156249a13858c0366d38844883d75d27389621ebe651115cb2ceb6dc011534d5055719fa1727b59f39e1ab3ca97820eef3dcab5b9b + "@ethersproject/bytes": ^5.7.0 + "@ethersproject/properties": ^5.7.0 + checksum: 326087b7e1f3787b5fe6cd1cf2b4b5abfafbc355a45e88e22e5e9d6c845b613ffc5301d629b28d5c4d5e2bfe9ec424e6782c804956dff79be05f0098cb5817de languageName: node linkType: hard -"@babel/plugin-syntax-json-strings@npm:^7.8.3": - version: 7.8.3 - resolution: "@babel/plugin-syntax-json-strings@npm:7.8.3" +"@ethersproject/bignumber@npm:5.7.0, @ethersproject/bignumber@npm:^5.7.0": + version: 5.7.0 + resolution: "@ethersproject/bignumber@npm:5.7.0" dependencies: - "@babel/helper-plugin-utils": ^7.8.0 - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: bf5aea1f3188c9a507e16efe030efb996853ca3cadd6512c51db7233cc58f3ac89ff8c6bdfb01d30843b161cfe7d321e1bf28da82f7ab8d7e6bc5464666f354a + "@ethersproject/bytes": ^5.7.0 + "@ethersproject/logger": ^5.7.0 + bn.js: ^5.2.1 + checksum: 8c9a134b76f3feb4ec26a5a27379efb4e156b8fb2de0678a67788a91c7f4e30abe9d948638458e4b20f2e42380da0adacc7c9389d05fce070692edc6ae9b4904 languageName: node linkType: hard -"@babel/plugin-syntax-jsx@npm:^7.18.6, @babel/plugin-syntax-jsx@npm:^7.23.3": - version: 7.23.3 - resolution: "@babel/plugin-syntax-jsx@npm:7.23.3" +"@ethersproject/bytes@npm:5.7.0, @ethersproject/bytes@npm:^5.7.0": + version: 5.7.0 + resolution: "@ethersproject/bytes@npm:5.7.0" dependencies: - "@babel/helper-plugin-utils": ^7.22.5 - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 89037694314a74e7f0e7a9c8d3793af5bf6b23d80950c29b360db1c66859d67f60711ea437e70ad6b5b4b29affe17eababda841b6c01107c2b638e0493bafb4e + "@ethersproject/logger": ^5.7.0 + checksum: 66ad365ceaab5da1b23b72225c71dce472cf37737af5118181fa8ab7447d696bea15ca22e3a0e8836fdd8cfac161afe321a7c67d0dde96f9f645ddd759676621 languageName: node linkType: hard -"@babel/plugin-syntax-logical-assignment-operators@npm:^7.10.4": - version: 7.10.4 - resolution: "@babel/plugin-syntax-logical-assignment-operators@npm:7.10.4" +"@ethersproject/constants@npm:5.7.0, @ethersproject/constants@npm:^5.7.0": + version: 5.7.0 + resolution: "@ethersproject/constants@npm:5.7.0" dependencies: - "@babel/helper-plugin-utils": ^7.10.4 - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: aff33577037e34e515911255cdbb1fd39efee33658aa00b8a5fd3a4b903585112d037cce1cc9e4632f0487dc554486106b79ccd5ea63a2e00df4363f6d4ff886 + "@ethersproject/bignumber": ^5.7.0 + checksum: 6d4b1355747cce837b3e76ec3bde70e4732736f23b04f196f706ebfa5d4d9c2be50904a390d4d40ce77803b98d03d16a9b6898418e04ba63491933ce08c4ba8a languageName: node linkType: hard -"@babel/plugin-syntax-nullish-coalescing-operator@npm:^7.8.3": - version: 7.8.3 - resolution: "@babel/plugin-syntax-nullish-coalescing-operator@npm:7.8.3" +"@ethersproject/contracts@npm:5.7.0": + version: 5.7.0 + resolution: "@ethersproject/contracts@npm:5.7.0" dependencies: - "@babel/helper-plugin-utils": ^7.8.0 - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 87aca4918916020d1fedba54c0e232de408df2644a425d153be368313fdde40d96088feed6c4e5ab72aac89be5d07fef2ddf329a15109c5eb65df006bf2580d1 - languageName: node + "@ethersproject/abi": ^5.7.0 + "@ethersproject/abstract-provider": ^5.7.0 + "@ethersproject/abstract-signer": ^5.7.0 + "@ethersproject/address": ^5.7.0 + "@ethersproject/bignumber": ^5.7.0 + "@ethersproject/bytes": ^5.7.0 + "@ethersproject/constants": ^5.7.0 + "@ethersproject/logger": ^5.7.0 + "@ethersproject/properties": ^5.7.0 + "@ethersproject/transactions": ^5.7.0 + checksum: 6ccf1121cba01b31e02f8c507cb971ab6bfed85706484a9ec09878ef1594a62215f43c4fdef8f4a4875b99c4a800bc95e3be69b1803f8ce479e07634b5a740c0 + languageName: node linkType: hard -"@babel/plugin-syntax-numeric-separator@npm:^7.10.4": - version: 7.10.4 - resolution: "@babel/plugin-syntax-numeric-separator@npm:7.10.4" +"@ethersproject/hash@npm:5.7.0, @ethersproject/hash@npm:^5.7.0": + version: 5.7.0 + resolution: "@ethersproject/hash@npm:5.7.0" dependencies: - "@babel/helper-plugin-utils": ^7.10.4 - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 01ec5547bd0497f76cc903ff4d6b02abc8c05f301c88d2622b6d834e33a5651aa7c7a3d80d8d57656a4588f7276eba357f6b7e006482f5b564b7a6488de493a1 + "@ethersproject/abstract-signer": ^5.7.0 + "@ethersproject/address": ^5.7.0 + "@ethersproject/base64": ^5.7.0 + "@ethersproject/bignumber": ^5.7.0 + "@ethersproject/bytes": ^5.7.0 + "@ethersproject/keccak256": ^5.7.0 + "@ethersproject/logger": ^5.7.0 + "@ethersproject/properties": ^5.7.0 + "@ethersproject/strings": ^5.7.0 + checksum: 6e9fa8d14eb08171cd32f17f98cc108ec2aeca74a427655f0d689c550fee0b22a83b3b400fad7fb3f41cf14d4111f87f170aa7905bcbcd1173a55f21b06262ef languageName: node linkType: hard -"@babel/plugin-syntax-object-rest-spread@npm:^7.8.3": - version: 7.8.3 - resolution: "@babel/plugin-syntax-object-rest-spread@npm:7.8.3" +"@ethersproject/hdnode@npm:5.7.0, @ethersproject/hdnode@npm:^5.7.0": + version: 5.7.0 + resolution: "@ethersproject/hdnode@npm:5.7.0" dependencies: - "@babel/helper-plugin-utils": ^7.8.0 - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: fddcf581a57f77e80eb6b981b10658421bc321ba5f0a5b754118c6a92a5448f12a0c336f77b8abf734841e102e5126d69110a306eadb03ca3e1547cab31f5cbf + "@ethersproject/abstract-signer": ^5.7.0 + "@ethersproject/basex": ^5.7.0 + "@ethersproject/bignumber": ^5.7.0 + "@ethersproject/bytes": ^5.7.0 + "@ethersproject/logger": ^5.7.0 + "@ethersproject/pbkdf2": ^5.7.0 + "@ethersproject/properties": ^5.7.0 + "@ethersproject/sha2": ^5.7.0 + "@ethersproject/signing-key": ^5.7.0 + "@ethersproject/strings": ^5.7.0 + "@ethersproject/transactions": ^5.7.0 + "@ethersproject/wordlists": ^5.7.0 + checksum: bfe5ca2d89a42de73655f853170ef4766b933c5f481cddad709b3aca18823275b096e572f92d1602a052f80b426edde44ad6b9d028799775a7dad4a5bbed2133 languageName: node linkType: hard -"@babel/plugin-syntax-optional-catch-binding@npm:^7.8.3": - version: 7.8.3 - resolution: "@babel/plugin-syntax-optional-catch-binding@npm:7.8.3" +"@ethersproject/json-wallets@npm:5.7.0, @ethersproject/json-wallets@npm:^5.7.0": + version: 5.7.0 + resolution: "@ethersproject/json-wallets@npm:5.7.0" dependencies: - "@babel/helper-plugin-utils": ^7.8.0 - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 910d90e72bc90ea1ce698e89c1027fed8845212d5ab588e35ef91f13b93143845f94e2539d831dc8d8ededc14ec02f04f7bd6a8179edd43a326c784e7ed7f0b9 + "@ethersproject/abstract-signer": ^5.7.0 + "@ethersproject/address": ^5.7.0 + "@ethersproject/bytes": ^5.7.0 + "@ethersproject/hdnode": ^5.7.0 + "@ethersproject/keccak256": ^5.7.0 + "@ethersproject/logger": ^5.7.0 + "@ethersproject/pbkdf2": ^5.7.0 + "@ethersproject/properties": ^5.7.0 + "@ethersproject/random": ^5.7.0 + "@ethersproject/strings": ^5.7.0 + "@ethersproject/transactions": ^5.7.0 + aes-js: 3.0.0 + scrypt-js: 3.0.1 + checksum: f583458d22db62efaaf94d38dd243482776a45bf90f9f3882fbad5aa0b8fd288b41eb7c1ff8ec0b99c9b751088e43d6173530db64dd33c59f9d8daa8d7ad5aa2 languageName: node linkType: hard -"@babel/plugin-syntax-optional-chaining@npm:^7.8.3": - version: 7.8.3 - resolution: "@babel/plugin-syntax-optional-chaining@npm:7.8.3" +"@ethersproject/keccak256@npm:5.7.0, @ethersproject/keccak256@npm:^5.7.0": + version: 5.7.0 + resolution: "@ethersproject/keccak256@npm:5.7.0" dependencies: - "@babel/helper-plugin-utils": ^7.8.0 - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: eef94d53a1453361553c1f98b68d17782861a04a392840341bc91780838dd4e695209c783631cf0de14c635758beafb6a3a65399846ffa4386bff90639347f30 + "@ethersproject/bytes": ^5.7.0 + js-sha3: 0.8.0 + checksum: ff70950d82203aab29ccda2553422cbac2e7a0c15c986bd20a69b13606ed8bb6e4fdd7b67b8d3b27d4f841e8222cbaccd33ed34be29f866fec7308f96ed244c6 languageName: node linkType: hard -"@babel/plugin-syntax-private-property-in-object@npm:^7.14.5": - version: 7.14.5 - resolution: "@babel/plugin-syntax-private-property-in-object@npm:7.14.5" - dependencies: - "@babel/helper-plugin-utils": ^7.14.5 - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: b317174783e6e96029b743ccff2a67d63d38756876e7e5d0ba53a322e38d9ca452c13354a57de1ad476b4c066dbae699e0ca157441da611117a47af88985ecda +"@ethersproject/logger@npm:5.7.0, @ethersproject/logger@npm:^5.7.0": + version: 5.7.0 + resolution: "@ethersproject/logger@npm:5.7.0" + checksum: 075ab2f605f1fd0813f2e39c3308f77b44a67732b36e712d9bc085f22a84aac4da4f71b39bee50fe78da3e1c812673fadc41180c9970fe5e486e91ea17befe0d languageName: node linkType: hard -"@babel/plugin-syntax-top-level-await@npm:^7.14.5": - version: 7.14.5 - resolution: "@babel/plugin-syntax-top-level-await@npm:7.14.5" +"@ethersproject/networks@npm:5.7.1, @ethersproject/networks@npm:^5.7.0": + version: 5.7.1 + resolution: "@ethersproject/networks@npm:5.7.1" dependencies: - "@babel/helper-plugin-utils": ^7.14.5 - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: bbd1a56b095be7820029b209677b194db9b1d26691fe999856462e66b25b281f031f3dfd91b1619e9dcf95bebe336211833b854d0fb8780d618e35667c2d0d7e + "@ethersproject/logger": ^5.7.0 + checksum: 0339f312304c17d9a0adce550edb825d4d2c8c9468c1634c44172c67a9ed256f594da62c4cda5c3837a0f28b7fabc03aca9b492f68ff1fdad337ee861b27bd5d languageName: node linkType: hard -"@babel/plugin-syntax-typescript@npm:^7.20.0, @babel/plugin-syntax-typescript@npm:^7.23.3": - version: 7.23.3 - resolution: "@babel/plugin-syntax-typescript@npm:7.23.3" +"@ethersproject/pbkdf2@npm:5.7.0, @ethersproject/pbkdf2@npm:^5.7.0": + version: 5.7.0 + resolution: "@ethersproject/pbkdf2@npm:5.7.0" dependencies: - "@babel/helper-plugin-utils": ^7.22.5 - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: abfad3a19290d258b028e285a1f34c9b8a0cbe46ef79eafed4ed7ffce11b5d0720b5e536c82f91cbd8442cde35a3dd8e861fa70366d87ff06fdc0d4756e30876 + "@ethersproject/bytes": ^5.7.0 + "@ethersproject/sha2": ^5.7.0 + checksum: b895adb9e35a8a127e794f7aadc31a2424ef355a70e51cde10d457e3e888bb8102373199a540cf61f2d6b9a32e47358f9c65b47d559f42bf8e596b5fd67901e9 languageName: node linkType: hard -"@babel/plugin-syntax-unicode-sets-regex@npm:^7.18.6": - version: 7.18.6 - resolution: "@babel/plugin-syntax-unicode-sets-regex@npm:7.18.6" +"@ethersproject/properties@npm:5.7.0, @ethersproject/properties@npm:^5.7.0": + version: 5.7.0 + resolution: "@ethersproject/properties@npm:5.7.0" dependencies: - "@babel/helper-create-regexp-features-plugin": ^7.18.6 - "@babel/helper-plugin-utils": ^7.18.6 - peerDependencies: - "@babel/core": ^7.0.0 - checksum: a651d700fe63ff0ddfd7186f4ebc24447ca734f114433139e3c027bc94a900d013cf1ef2e2db8430425ba542e39ae160c3b05f06b59fd4656273a3df97679e9c + "@ethersproject/logger": ^5.7.0 + checksum: 6ab0ccf0c3aadc9221e0cdc5306ce6cd0df7f89f77d77bccdd1277182c9ead0202cd7521329ba3acde130820bf8af299e17cf567d0d497c736ee918207bbf59f languageName: node linkType: hard -"@babel/plugin-transform-arrow-functions@npm:^7.23.3": - version: 7.23.3 - resolution: "@babel/plugin-transform-arrow-functions@npm:7.23.3" +"@ethersproject/providers@npm:5.7.2, @ethersproject/providers@npm:~5.7.2": + version: 5.7.2 + resolution: "@ethersproject/providers@npm:5.7.2" dependencies: - "@babel/helper-plugin-utils": ^7.22.5 - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 1e99118176e5366c2636064d09477016ab5272b2a92e78b8edb571d20bc3eaa881789a905b20042942c3c2d04efc530726cf703f937226db5ebc495f5d067e66 + "@ethersproject/abstract-provider": ^5.7.0 + "@ethersproject/abstract-signer": ^5.7.0 + "@ethersproject/address": ^5.7.0 + "@ethersproject/base64": ^5.7.0 + "@ethersproject/basex": ^5.7.0 + "@ethersproject/bignumber": ^5.7.0 + "@ethersproject/bytes": ^5.7.0 + "@ethersproject/constants": ^5.7.0 + "@ethersproject/hash": ^5.7.0 + "@ethersproject/logger": ^5.7.0 + "@ethersproject/networks": ^5.7.0 + "@ethersproject/properties": ^5.7.0 + "@ethersproject/random": ^5.7.0 + "@ethersproject/rlp": ^5.7.0 + "@ethersproject/sha2": ^5.7.0 + "@ethersproject/strings": ^5.7.0 + "@ethersproject/transactions": ^5.7.0 + "@ethersproject/web": ^5.7.0 + bech32: 1.1.4 + ws: 7.4.6 + checksum: 1754c731a5ca6782ae9677f4a9cd8b6246c4ef21a966c9a01b133750f3c578431ec43ec254e699969c4a0f87e84463ded50f96b415600aabd37d2056aee58c19 languageName: node linkType: hard -"@babel/plugin-transform-async-generator-functions@npm:^7.23.3": - version: 7.23.3 - resolution: "@babel/plugin-transform-async-generator-functions@npm:7.23.3" +"@ethersproject/random@npm:5.7.0, @ethersproject/random@npm:^5.7.0": + version: 5.7.0 + resolution: "@ethersproject/random@npm:5.7.0" dependencies: - "@babel/helper-environment-visitor": ^7.22.20 - "@babel/helper-plugin-utils": ^7.22.5 - "@babel/helper-remap-async-to-generator": ^7.22.20 - "@babel/plugin-syntax-async-generators": ^7.8.4 - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 39407e5d92905a824d6ef115af70755b26a6b458639686092d7e05d0701f7ff42e995e2c5aab28d6ab5311752190667766417e58834b54c98fac78c857e30320 + "@ethersproject/bytes": ^5.7.0 + "@ethersproject/logger": ^5.7.0 + checksum: 017829c91cff6c76470852855108115b0b52c611b6be817ed1948d56ba42d6677803ec2012aa5ae298a7660024156a64c11fcf544e235e239ab3f89f0fff7345 languageName: node linkType: hard -"@babel/plugin-transform-async-to-generator@npm:^7.23.3": - version: 7.23.3 - resolution: "@babel/plugin-transform-async-to-generator@npm:7.23.3" +"@ethersproject/rlp@npm:5.7.0, @ethersproject/rlp@npm:^5.7.0": + version: 5.7.0 + resolution: "@ethersproject/rlp@npm:5.7.0" dependencies: - "@babel/helper-module-imports": ^7.22.15 - "@babel/helper-plugin-utils": ^7.22.5 - "@babel/helper-remap-async-to-generator": ^7.22.20 - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 2e9d9795d4b3b3d8090332104e37061c677f29a1ce65bcbda4099a32d243e5d9520270a44bbabf0fb1fb40d463bd937685b1a1042e646979086c546d55319c3c + "@ethersproject/bytes": ^5.7.0 + "@ethersproject/logger": ^5.7.0 + checksum: bce165b0f7e68e4d091c9d3cf47b247cac33252df77a095ca4281d32d5eeaaa3695d9bc06b2b057c5015353a68df89f13a4a54a72e888e4beeabbe56b15dda6e languageName: node linkType: hard -"@babel/plugin-transform-block-scoped-functions@npm:^7.23.3": - version: 7.23.3 - resolution: "@babel/plugin-transform-block-scoped-functions@npm:7.23.3" +"@ethersproject/sha2@npm:5.7.0, @ethersproject/sha2@npm:^5.7.0": + version: 5.7.0 + resolution: "@ethersproject/sha2@npm:5.7.0" dependencies: - "@babel/helper-plugin-utils": ^7.22.5 - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: e63b16d94ee5f4d917e669da3db5ea53d1e7e79141a2ec873c1e644678cdafe98daa556d0d359963c827863d6b3665d23d4938a94a4c5053a1619c4ebd01d020 + "@ethersproject/bytes": ^5.7.0 + "@ethersproject/logger": ^5.7.0 + hash.js: 1.1.7 + checksum: 09321057c022effbff4cc2d9b9558228690b5dd916329d75c4b1ffe32ba3d24b480a367a7cc92d0f0c0b1c896814d03351ae4630e2f1f7160be2bcfbde435dbc languageName: node linkType: hard -"@babel/plugin-transform-block-scoping@npm:^7.23.3": - version: 7.23.3 - resolution: "@babel/plugin-transform-block-scoping@npm:7.23.3" +"@ethersproject/signing-key@npm:5.7.0, @ethersproject/signing-key@npm:^5.7.0": + version: 5.7.0 + resolution: "@ethersproject/signing-key@npm:5.7.0" dependencies: - "@babel/helper-plugin-utils": ^7.22.5 - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 2bad9491502942266ddacd76e026ee2095e71c2a6aa3d038343d65f8db67a2a2262701b2db23a30b7f06ab49710cbf0ab5bedbb930a9f39780cb366aecd30540 + "@ethersproject/bytes": ^5.7.0 + "@ethersproject/logger": ^5.7.0 + "@ethersproject/properties": ^5.7.0 + bn.js: ^5.2.1 + elliptic: 6.5.4 + hash.js: 1.1.7 + checksum: 8f8de09b0aac709683bbb49339bc0a4cd2f95598f3546436c65d6f3c3a847ffa98e06d35e9ed2b17d8030bd2f02db9b7bd2e11c5cf8a71aad4537487ab4cf03a languageName: node linkType: hard -"@babel/plugin-transform-class-properties@npm:^7.23.3": - version: 7.23.3 - resolution: "@babel/plugin-transform-class-properties@npm:7.23.3" +"@ethersproject/solidity@npm:5.7.0, @ethersproject/solidity@npm:^5.0.0": + version: 5.7.0 + resolution: "@ethersproject/solidity@npm:5.7.0" dependencies: - "@babel/helper-create-class-features-plugin": ^7.22.15 - "@babel/helper-plugin-utils": ^7.22.5 - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 9c6f8366f667897541d360246de176dd29efc7a13d80a5b48361882f7173d9173be4646c3b7d9b003ccc0e01e25df122330308f33db921fa553aa17ad544b3fc + "@ethersproject/bignumber": ^5.7.0 + "@ethersproject/bytes": ^5.7.0 + "@ethersproject/keccak256": ^5.7.0 + "@ethersproject/logger": ^5.7.0 + "@ethersproject/sha2": ^5.7.0 + "@ethersproject/strings": ^5.7.0 + checksum: 9a02f37f801c96068c3e7721f83719d060175bc4e80439fe060e92bd7acfcb6ac1330c7e71c49f4c2535ca1308f2acdcb01e00133129aac00581724c2d6293f3 languageName: node linkType: hard -"@babel/plugin-transform-class-static-block@npm:^7.23.3": - version: 7.23.3 - resolution: "@babel/plugin-transform-class-static-block@npm:7.23.3" +"@ethersproject/strings@npm:5.7.0, @ethersproject/strings@npm:^5.7.0": + version: 5.7.0 + resolution: "@ethersproject/strings@npm:5.7.0" dependencies: - "@babel/helper-create-class-features-plugin": ^7.22.15 - "@babel/helper-plugin-utils": ^7.22.5 - "@babel/plugin-syntax-class-static-block": ^7.14.5 - peerDependencies: - "@babel/core": ^7.12.0 - checksum: 1325e1d1989efbef4d48505e5c0c416d118be0e615c12a8d5581af032d0bc6ae00525c8fb4af68ba9098fa1578ec7738db0a9d362193b8507660d2a24124ddf4 + "@ethersproject/bytes": ^5.7.0 + "@ethersproject/constants": ^5.7.0 + "@ethersproject/logger": ^5.7.0 + checksum: 5ff78693ae3fdf3cf23e1f6dc047a61e44c8197d2408c42719fef8cb7b7b3613a4eec88ac0ed1f9f5558c74fe0de7ae3195a29ca91a239c74b9f444d8e8b50df languageName: node linkType: hard -"@babel/plugin-transform-classes@npm:^7.23.3": - version: 7.23.3 - resolution: "@babel/plugin-transform-classes@npm:7.23.3" +"@ethersproject/transactions@npm:5.7.0, @ethersproject/transactions@npm:^5.7.0": + version: 5.7.0 + resolution: "@ethersproject/transactions@npm:5.7.0" dependencies: - "@babel/helper-annotate-as-pure": ^7.22.5 - "@babel/helper-compilation-targets": ^7.22.15 - "@babel/helper-environment-visitor": ^7.22.20 - "@babel/helper-function-name": ^7.23.0 - "@babel/helper-optimise-call-expression": ^7.22.5 - "@babel/helper-plugin-utils": ^7.22.5 - "@babel/helper-replace-supers": ^7.22.20 - "@babel/helper-split-export-declaration": ^7.22.6 - globals: ^11.1.0 - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 1b90b40d729d14466415a1de2d427ede6ec0e401e8dc00e84d309f2e6a1f09ef16d43983f378b51d34251f6c36f7275959477cb2e89b04afc7f248356642fc6d + "@ethersproject/address": ^5.7.0 + "@ethersproject/bignumber": ^5.7.0 + "@ethersproject/bytes": ^5.7.0 + "@ethersproject/constants": ^5.7.0 + "@ethersproject/keccak256": ^5.7.0 + "@ethersproject/logger": ^5.7.0 + "@ethersproject/properties": ^5.7.0 + "@ethersproject/rlp": ^5.7.0 + "@ethersproject/signing-key": ^5.7.0 + checksum: a31b71996d2b283f68486241bff0d3ea3f1ba0e8f1322a8fffc239ccc4f4a7eb2ea9994b8fd2f093283fd75f87bae68171e01b6265261f821369aca319884a79 languageName: node linkType: hard -"@babel/plugin-transform-computed-properties@npm:^7.23.3": - version: 7.23.3 - resolution: "@babel/plugin-transform-computed-properties@npm:7.23.3" +"@ethersproject/units@npm:5.7.0": + version: 5.7.0 + resolution: "@ethersproject/units@npm:5.7.0" dependencies: - "@babel/helper-plugin-utils": ^7.22.5 - "@babel/template": ^7.22.15 - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 80452661dc25a0956f89fe98cb562e8637a9556fb6c00d312c57653ce7df8798f58d138603c7e1aad96614ee9ccd10c47e50ab9ded6b6eded5adeb230d2a982e + "@ethersproject/bignumber": ^5.7.0 + "@ethersproject/constants": ^5.7.0 + "@ethersproject/logger": ^5.7.0 + checksum: 304714f848cd32e57df31bf545f7ad35c2a72adae957198b28cbc62166daa929322a07bff6e9c9ac4577ab6aa0de0546b065ed1b2d20b19e25748b7d475cb0fc languageName: node linkType: hard -"@babel/plugin-transform-destructuring@npm:^7.23.3": - version: 7.23.3 - resolution: "@babel/plugin-transform-destructuring@npm:7.23.3" +"@ethersproject/wallet@npm:5.7.0": + version: 5.7.0 + resolution: "@ethersproject/wallet@npm:5.7.0" dependencies: - "@babel/helper-plugin-utils": ^7.22.5 - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 9e015099877272501162419bfe781689aec5c462cd2aec752ee22288f209eec65969ff11b8fdadca2eaddea71d705d3bba5b9c60752fcc1be67874fcec687105 + "@ethersproject/abstract-provider": ^5.7.0 + "@ethersproject/abstract-signer": ^5.7.0 + "@ethersproject/address": ^5.7.0 + "@ethersproject/bignumber": ^5.7.0 + "@ethersproject/bytes": ^5.7.0 + "@ethersproject/hash": ^5.7.0 + "@ethersproject/hdnode": ^5.7.0 + "@ethersproject/json-wallets": ^5.7.0 + "@ethersproject/keccak256": ^5.7.0 + "@ethersproject/logger": ^5.7.0 + "@ethersproject/properties": ^5.7.0 + "@ethersproject/random": ^5.7.0 + "@ethersproject/signing-key": ^5.7.0 + "@ethersproject/transactions": ^5.7.0 + "@ethersproject/wordlists": ^5.7.0 + checksum: a4009bf7331eddab38e3015b5e9101ef92de7f705b00a6196b997db0e5635b6d83561674d46c90c6f77b87c0500fe4a6b0183ba13749efc22db59c99deb82fbd languageName: node linkType: hard -"@babel/plugin-transform-dotall-regex@npm:^7.23.3": - version: 7.23.3 - resolution: "@babel/plugin-transform-dotall-regex@npm:7.23.3" +"@ethersproject/web@npm:5.7.1, @ethersproject/web@npm:^5.7.0": + version: 5.7.1 + resolution: "@ethersproject/web@npm:5.7.1" dependencies: - "@babel/helper-create-regexp-features-plugin": ^7.22.15 - "@babel/helper-plugin-utils": ^7.22.5 - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: a2dbbf7f1ea16a97948c37df925cb364337668c41a3948b8d91453f140507bd8a3429030c7ce66d09c299987b27746c19a2dd18b6f17dcb474854b14fd9159a3 + "@ethersproject/base64": ^5.7.0 + "@ethersproject/bytes": ^5.7.0 + "@ethersproject/logger": ^5.7.0 + "@ethersproject/properties": ^5.7.0 + "@ethersproject/strings": ^5.7.0 + checksum: 7028c47103f82fd2e2c197ce0eecfacaa9180ffeec7de7845b1f4f9b19d84081b7a48227aaddde05a4aaa526af574a9a0ce01cc0fc75e3e371f84b38b5b16b2b languageName: node linkType: hard -"@babel/plugin-transform-duplicate-keys@npm:^7.23.3": - version: 7.23.3 - resolution: "@babel/plugin-transform-duplicate-keys@npm:7.23.3" +"@ethersproject/wordlists@npm:5.7.0, @ethersproject/wordlists@npm:^5.7.0": + version: 5.7.0 + resolution: "@ethersproject/wordlists@npm:5.7.0" dependencies: - "@babel/helper-plugin-utils": ^7.22.5 - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: c2a21c34dc0839590cd945192cbc46fde541a27e140c48fe1808315934664cdbf18db64889e23c4eeb6bad9d3e049482efdca91d29de5734ffc887c4fbabaa16 + "@ethersproject/bytes": ^5.7.0 + "@ethersproject/hash": ^5.7.0 + "@ethersproject/logger": ^5.7.0 + "@ethersproject/properties": ^5.7.0 + "@ethersproject/strings": ^5.7.0 + checksum: 30eb6eb0731f9ef5faa44bf9c0c6e950bcaaef61e4d2d9ce0ae6d341f4e2d6d1f4ab4f8880bfce03b7aac4b862fb740e1421170cfbf8e2aafc359277d49e6e97 languageName: node linkType: hard -"@babel/plugin-transform-dynamic-import@npm:^7.23.3": - version: 7.23.3 - resolution: "@babel/plugin-transform-dynamic-import@npm:7.23.3" - dependencies: - "@babel/helper-plugin-utils": ^7.22.5 - "@babel/plugin-syntax-dynamic-import": ^7.8.3 +"@heroicons/react@npm:~2.0.11": + version: 2.0.18 + resolution: "@heroicons/react@npm:2.0.18" peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: d1d379dbb1c22c02aa2f5a3f2f1885840aabc21b42e3d42746599f66004239f1ac830012552e6d42113e4defe0625fbf4865864ee3d52963e80125f8c9dad406 + react: ">= 16" + checksum: 597e8668818623d568a302e343ef06b69f62ce297c14b88c2ebbfed0c0f00cd85ec44fae33ec8a249931b4e7dcf145743ae3198095a9f4682108de5155f5f4c3 languageName: node linkType: hard -"@babel/plugin-transform-exponentiation-operator@npm:^7.23.3": - version: 7.23.3 - resolution: "@babel/plugin-transform-exponentiation-operator@npm:7.23.3" +"@humanwhocodes/config-array@npm:^0.10.5": + version: 0.10.7 + resolution: "@humanwhocodes/config-array@npm:0.10.7" dependencies: - "@babel/helper-builder-binary-assignment-operator-visitor": ^7.22.15 - "@babel/helper-plugin-utils": ^7.22.5 - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 00d05ab14ad0f299160fcf9d8f55a1cc1b740e012ab0b5ce30207d2365f091665115557af7d989cd6260d075a252d9e4283de5f2b247dfbbe0e42ae586e6bf66 + "@humanwhocodes/object-schema": ^1.2.1 + debug: ^4.1.1 + minimatch: ^3.0.4 + checksum: 009d64be8d5bd098ff04e10af79e34f5633245250581fca032fac12a8667b2df8e7d169e69c05bff4d83ea3dd3c7d2d0e05ea9b94d89a7d092e26530caf6f8a3 languageName: node linkType: hard -"@babel/plugin-transform-export-namespace-from@npm:^7.23.3": - version: 7.23.3 - resolution: "@babel/plugin-transform-export-namespace-from@npm:7.23.3" - dependencies: - "@babel/helper-plugin-utils": ^7.22.5 - "@babel/plugin-syntax-export-namespace-from": ^7.8.3 - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: c65e21e5b54135378cfbe7563e884d778ea0864b5950c7db85f984170f20c2e110675c8407b1803ffe587401e5990fbd53eb159c3b3a6d7593ae6f9ffdb83cc4 +"@humanwhocodes/gitignore-to-minimatch@npm:^1.0.2": + version: 1.0.2 + resolution: "@humanwhocodes/gitignore-to-minimatch@npm:1.0.2" + checksum: aba5c40c9e3770ed73a558b0bfb53323842abfc2ce58c91d7e8b1073995598e6374456d38767be24ab6176915f0a8d8b23eaae5c85e2b488c0dccca6d795e2ad languageName: node linkType: hard -"@babel/plugin-transform-for-of@npm:^7.23.3": - version: 7.23.3 - resolution: "@babel/plugin-transform-for-of@npm:7.23.3" - dependencies: - "@babel/helper-plugin-utils": ^7.22.5 - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: a6288122a5091d96c744b9eb23dc1b2d4cce25f109ac1e26a0ea03c4ea60330e6f3cc58530b33ba7369fa07163b71001399a145238b7e92bff6270ef3b9c32a0 +"@humanwhocodes/module-importer@npm:^1.0.1": + version: 1.0.1 + resolution: "@humanwhocodes/module-importer@npm:1.0.1" + checksum: 0fd22007db8034a2cdf2c764b140d37d9020bbfce8a49d3ec5c05290e77d4b0263b1b972b752df8c89e5eaa94073408f2b7d977aed131faf6cf396ebb5d7fb61 languageName: node linkType: hard -"@babel/plugin-transform-function-name@npm:^7.23.3": - version: 7.23.3 - resolution: "@babel/plugin-transform-function-name@npm:7.23.3" - dependencies: - "@babel/helper-compilation-targets": ^7.22.15 - "@babel/helper-function-name": ^7.23.0 - "@babel/helper-plugin-utils": ^7.22.5 - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 355c6dbe07c919575ad42b2f7e020f320866d72f8b79181a16f8e0cd424a2c761d979f03f47d583d9471b55dcd68a8a9d829b58e1eebcd572145b934b48975a6 +"@humanwhocodes/object-schema@npm:^1.2.1": + version: 1.2.1 + resolution: "@humanwhocodes/object-schema@npm:1.2.1" + checksum: a824a1ec31591231e4bad5787641f59e9633827d0a2eaae131a288d33c9ef0290bd16fda8da6f7c0fcb014147865d12118df10db57f27f41e20da92369fcb3f1 languageName: node linkType: hard -"@babel/plugin-transform-json-strings@npm:^7.23.3": - version: 7.23.3 - resolution: "@babel/plugin-transform-json-strings@npm:7.23.3" - dependencies: - "@babel/helper-plugin-utils": ^7.22.5 - "@babel/plugin-syntax-json-strings": ^7.8.3 - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: a5949613b8883a64ad2a0eb41d26a80ac226ea03db7cef8f57f4ca18045fdc834aee420548272a633510e7aa88ec3cb4e15d2e27ddc45f9ef5db09228f0478c1 +"@ioredis/commands@npm:^1.1.1": + version: 1.2.0 + resolution: "@ioredis/commands@npm:1.2.0" + checksum: 9b20225ba36ef3e5caf69b3c0720597c3016cc9b1e157f519ea388f621dd9037177f84cfe7e25c4c32dad7dd90c70ff9123cd411f747e053cf292193c9c461e2 languageName: node linkType: hard -"@babel/plugin-transform-literals@npm:^7.23.3": - version: 7.23.3 - resolution: "@babel/plugin-transform-literals@npm:7.23.3" +"@isaacs/cliui@npm:^8.0.2": + version: 8.0.2 + resolution: "@isaacs/cliui@npm:8.0.2" dependencies: - "@babel/helper-plugin-utils": ^7.22.5 - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 519a544cd58586b9001c4c9b18da25a62f17d23c48600ff7a685d75ca9eb18d2c5e8f5476f067f0a8f1fea2a31107eff950b9864833061e6076dcc4bdc3e71ed + string-width: ^5.1.2 + string-width-cjs: "npm:string-width@^4.2.0" + strip-ansi: ^7.0.1 + strip-ansi-cjs: "npm:strip-ansi@^6.0.1" + wrap-ansi: ^8.1.0 + wrap-ansi-cjs: "npm:wrap-ansi@^7.0.0" + checksum: 4a473b9b32a7d4d3cfb7a614226e555091ff0c5a29a1734c28c72a182c2f6699b26fc6b5c2131dfd841e86b185aea714c72201d7c98c2fba5f17709333a67aeb languageName: node linkType: hard -"@babel/plugin-transform-logical-assignment-operators@npm:^7.23.3": - version: 7.23.3 - resolution: "@babel/plugin-transform-logical-assignment-operators@npm:7.23.3" +"@jridgewell/gen-mapping@npm:^0.3.2": + version: 0.3.3 + resolution: "@jridgewell/gen-mapping@npm:0.3.3" dependencies: - "@babel/helper-plugin-utils": ^7.22.5 - "@babel/plugin-syntax-logical-assignment-operators": ^7.10.4 - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: cbab57a2bb6d5ddd621b91684845e576664862a6d7697fa9dddb796238330dd3dac21cda223f7b1553c9f650e0eebcd5d9bb1e478ed9ba937ce06dc6d0fbd0f6 + "@jridgewell/set-array": ^1.0.1 + "@jridgewell/sourcemap-codec": ^1.4.10 + "@jridgewell/trace-mapping": ^0.3.9 + checksum: 4a74944bd31f22354fc01c3da32e83c19e519e3bbadafa114f6da4522ea77dd0c2842607e923a591d60a76699d819a2fbb6f3552e277efdb9b58b081390b60ab languageName: node linkType: hard -"@babel/plugin-transform-member-expression-literals@npm:^7.23.3": - version: 7.23.3 - resolution: "@babel/plugin-transform-member-expression-literals@npm:7.23.3" - dependencies: - "@babel/helper-plugin-utils": ^7.22.5 - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 95cec13c36d447c5aa6b8e4c778b897eeba66dcb675edef01e0d2afcec9e8cb9726baf4f81b4bbae7a782595aed72e6a0d44ffb773272c3ca180fada99bf92db +"@jridgewell/resolve-uri@npm:^3.0.3, @jridgewell/resolve-uri@npm:^3.1.0": + version: 3.1.1 + resolution: "@jridgewell/resolve-uri@npm:3.1.1" + checksum: f5b441fe7900eab4f9155b3b93f9800a916257f4e8563afbcd3b5a5337b55e52bd8ae6735453b1b745457d9f6cdb16d74cd6220bbdd98cf153239e13f6cbb653 languageName: node linkType: hard -"@babel/plugin-transform-modules-amd@npm:^7.23.3": - version: 7.23.3 - resolution: "@babel/plugin-transform-modules-amd@npm:7.23.3" - dependencies: - "@babel/helper-module-transforms": ^7.23.3 - "@babel/helper-plugin-utils": ^7.22.5 - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: d163737b6a3d67ea579c9aa3b83d4df4b5c34d9dcdf25f415f027c0aa8cded7bac2750d2de5464081f67a042ad9e1c03930c2fab42acd79f9e57c00cf969ddff +"@jridgewell/set-array@npm:^1.0.1": + version: 1.1.2 + resolution: "@jridgewell/set-array@npm:1.1.2" + checksum: 69a84d5980385f396ff60a175f7177af0b8da4ddb81824cb7016a9ef914eee9806c72b6b65942003c63f7983d4f39a5c6c27185bbca88eb4690b62075602e28e languageName: node linkType: hard -"@babel/plugin-transform-modules-commonjs@npm:^7.23.3": - version: 7.23.3 - resolution: "@babel/plugin-transform-modules-commonjs@npm:7.23.3" - dependencies: - "@babel/helper-module-transforms": ^7.23.3 - "@babel/helper-plugin-utils": ^7.22.5 - "@babel/helper-simple-access": ^7.22.5 - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 720a231ceade4ae4d2632478db4e7fecf21987d444942b72d523487ac8d715ca97de6c8f415c71e939595e1a4776403e7dc24ed68fe9125ad4acf57753c9bff7 +"@jridgewell/sourcemap-codec@npm:^1.4.10, @jridgewell/sourcemap-codec@npm:^1.4.14": + version: 1.4.15 + resolution: "@jridgewell/sourcemap-codec@npm:1.4.15" + checksum: b881c7e503db3fc7f3c1f35a1dd2655a188cc51a3612d76efc8a6eb74728bef5606e6758ee77423e564092b4a518aba569bbb21c9bac5ab7a35b0c6ae7e344c8 languageName: node linkType: hard -"@babel/plugin-transform-modules-systemjs@npm:^7.23.3": - version: 7.23.3 - resolution: "@babel/plugin-transform-modules-systemjs@npm:7.23.3" +"@jridgewell/trace-mapping@npm:0.3.9": + version: 0.3.9 + resolution: "@jridgewell/trace-mapping@npm:0.3.9" dependencies: - "@babel/helper-hoist-variables": ^7.22.5 - "@babel/helper-module-transforms": ^7.23.3 - "@babel/helper-plugin-utils": ^7.22.5 - "@babel/helper-validator-identifier": ^7.22.20 - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 0d2fdd993c785aecac9e0850cd5ed7f7d448f0fbb42992a950cc0590167144df25d82af5aac9a5c99ef913d2286782afa44e577af30c10901c5ee8984910fa1f + "@jridgewell/resolve-uri": ^3.0.3 + "@jridgewell/sourcemap-codec": ^1.4.10 + checksum: d89597752fd88d3f3480845691a05a44bd21faac18e2185b6f436c3b0fd0c5a859fbbd9aaa92050c4052caf325ad3e10e2e1d1b64327517471b7d51babc0ddef languageName: node linkType: hard -"@babel/plugin-transform-modules-umd@npm:^7.23.3": - version: 7.23.3 - resolution: "@babel/plugin-transform-modules-umd@npm:7.23.3" +"@jridgewell/trace-mapping@npm:^0.3.17, @jridgewell/trace-mapping@npm:^0.3.9": + version: 0.3.22 + resolution: "@jridgewell/trace-mapping@npm:0.3.22" dependencies: - "@babel/helper-module-transforms": ^7.23.3 - "@babel/helper-plugin-utils": ^7.22.5 - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 586a7a2241e8b4e753a37af9466a9ffa8a67b4ba9aa756ad7500712c05d8fa9a8c1ed4f7bd25fae2a8265e6cf8fe781ec85a8ee885dd34cf50d8955ee65f12dc + "@jridgewell/resolve-uri": ^3.1.0 + "@jridgewell/sourcemap-codec": ^1.4.14 + checksum: ac7dd2cfe0b479aa1b81776d40d789243131cc792dc8b6b6a028c70fcd6171958ae1a71bf67b618ffe3c0c3feead9870c095ee46a5e30319410d92976b28f498 languageName: node linkType: hard -"@babel/plugin-transform-named-capturing-groups-regex@npm:^7.22.5": - version: 7.22.5 - resolution: "@babel/plugin-transform-named-capturing-groups-regex@npm:7.22.5" - dependencies: - "@babel/helper-create-regexp-features-plugin": ^7.22.5 - "@babel/helper-plugin-utils": ^7.22.5 - peerDependencies: - "@babel/core": ^7.0.0 - checksum: 3ee564ddee620c035b928fdc942c5d17e9c4b98329b76f9cefac65c111135d925eb94ed324064cd7556d4f5123beec79abea1d4b97d1c8a2a5c748887a2eb623 +"@lit-labs/ssr-dom-shim@npm:^1.0.0, @lit-labs/ssr-dom-shim@npm:^1.1.0": + version: 1.2.0 + resolution: "@lit-labs/ssr-dom-shim@npm:1.2.0" + checksum: 704621c28df8d651e54a1b93f6ede8103db2dd3e7a1f02463fe5492bd28aa22de813314c7833260204fed5c8491a6bbd763f6051abc25690df537d812a508c35 languageName: node linkType: hard -"@babel/plugin-transform-new-target@npm:^7.23.3": - version: 7.23.3 - resolution: "@babel/plugin-transform-new-target@npm:7.23.3" +"@lit/reactive-element@npm:^1.3.0, @lit/reactive-element@npm:^1.6.0": + version: 1.6.3 + resolution: "@lit/reactive-element@npm:1.6.3" dependencies: - "@babel/helper-plugin-utils": ^7.22.5 - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: e5053389316fce73ad5201b7777437164f333e24787fbcda4ae489cd2580dbbbdfb5694a7237bad91fabb46b591d771975d69beb1c740b82cb4761625379f00b + "@lit-labs/ssr-dom-shim": ^1.0.0 + checksum: 79b58631c38effeabad090070324431da8a22cf0ff665f5e4de35e4d791f984742b3d340c9c7fce996d1124a8da95febc582471b4c237236c770b1300b56ef6e languageName: node linkType: hard -"@babel/plugin-transform-nullish-coalescing-operator@npm:^7.23.3": - version: 7.23.3 - resolution: "@babel/plugin-transform-nullish-coalescing-operator@npm:7.23.3" +"@mapbox/node-pre-gyp@npm:^1.0.5": + version: 1.0.11 + resolution: "@mapbox/node-pre-gyp@npm:1.0.11" dependencies: - "@babel/helper-plugin-utils": ^7.22.5 - "@babel/plugin-syntax-nullish-coalescing-operator": ^7.8.3 - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: ea844a12a3ae5647d6d2ae0685fde48ae53e724ef9ce5d9fbf36e8f1ff0107f76a5349ef34c2a06984b3836c001748caf9701afb172bd7ba71a5dff79e16b434 + detect-libc: ^2.0.0 + https-proxy-agent: ^5.0.0 + make-dir: ^3.1.0 + node-fetch: ^2.6.7 + nopt: ^5.0.0 + npmlog: ^5.0.1 + rimraf: ^3.0.2 + semver: ^7.3.5 + tar: ^6.1.11 + bin: + node-pre-gyp: bin/node-pre-gyp + checksum: b848f6abc531a11961d780db813cc510ca5a5b6bf3184d72134089c6875a91c44d571ba6c1879470020803f7803609e7b2e6e429651c026fe202facd11d444b8 languageName: node linkType: hard -"@babel/plugin-transform-numeric-separator@npm:^7.23.3": - version: 7.23.3 - resolution: "@babel/plugin-transform-numeric-separator@npm:7.23.3" +"@metamask/eth-json-rpc-provider@npm:^1.0.0": + version: 1.0.1 + resolution: "@metamask/eth-json-rpc-provider@npm:1.0.1" dependencies: - "@babel/helper-plugin-utils": ^7.22.5 - "@babel/plugin-syntax-numeric-separator": ^7.10.4 - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: f5515532fac2bbf9da082eedc16fd597fb8b787e7a6d256d53dcd9daa054b8f695a312bfec888dd34c03d63dcc2c65c8249ac33c2e23bd3d4d246ce4d44d141d + "@metamask/json-rpc-engine": ^7.0.0 + "@metamask/safe-event-emitter": ^3.0.0 + "@metamask/utils": ^5.0.1 + checksum: ff97648b002d2889bd020c03abc26137cf068df3280e46144b5333c1b294f35f5099361343825f900ef20b9dcb6819495830b7a99eb1cbfbd671e5b11c0dfde1 languageName: node linkType: hard -"@babel/plugin-transform-object-rest-spread@npm:^7.23.3": - version: 7.23.3 - resolution: "@babel/plugin-transform-object-rest-spread@npm:7.23.3" +"@metamask/json-rpc-engine@npm:^7.0.0": + version: 7.3.2 + resolution: "@metamask/json-rpc-engine@npm:7.3.2" dependencies: - "@babel/compat-data": ^7.23.3 - "@babel/helper-compilation-targets": ^7.22.15 - "@babel/helper-plugin-utils": ^7.22.5 - "@babel/plugin-syntax-object-rest-spread": ^7.8.3 - "@babel/plugin-transform-parameters": ^7.23.3 - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: acd42344a1be3abaf0a4ece15d6445df34d281f3be797c94c16a382799d4567995aad16406265b992ba43115a34721f67a3f0898360f7e26bce55fa9720dad7a + "@metamask/rpc-errors": ^6.1.0 + "@metamask/safe-event-emitter": ^3.0.0 + "@metamask/utils": ^8.3.0 + checksum: 396861afc72944af410d5b06c81806db2fd9812206dbf799438f42d974edac6931f6814133adf52d6aa233d5ea3f3629663ef4f54a0cf9ccb948ce9b527137fd languageName: node linkType: hard -"@babel/plugin-transform-object-super@npm:^7.23.3": - version: 7.23.3 - resolution: "@babel/plugin-transform-object-super@npm:7.23.3" +"@metamask/rpc-errors@npm:^6.1.0": + version: 6.1.0 + resolution: "@metamask/rpc-errors@npm:6.1.0" dependencies: - "@babel/helper-plugin-utils": ^7.22.5 - "@babel/helper-replace-supers": ^7.22.20 - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: e495497186f621fa79026e183b4f1fbb172fd9df812cbd2d7f02c05b08adbe58012b1a6eb6dd58d11a30343f6ec80d0f4074f9b501d70aa1c94df76d59164c53 + "@metamask/utils": ^8.1.0 + fast-safe-stringify: ^2.0.6 + checksum: 9f4821d804e2fcaa8987b0958d02c6d829b7c7db49740c811cb593f381d0c4b00dabb7f1802907f1b2f6126f7c0d83ec34219183d29650f5d24df014ac72906a languageName: node linkType: hard -"@babel/plugin-transform-optional-catch-binding@npm:^7.23.3": - version: 7.23.3 - resolution: "@babel/plugin-transform-optional-catch-binding@npm:7.23.3" - dependencies: - "@babel/helper-plugin-utils": ^7.22.5 - "@babel/plugin-syntax-optional-catch-binding": ^7.8.3 - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 2c59c78cf8c7070be84f1087116508211323dacd93581529b95b31927b2fab67dd11aca363584e99bebc7e4e20720f2b59d99ade7e8cf1577732eef609a34c45 +"@metamask/safe-event-emitter@npm:^2.0.0": + version: 2.0.0 + resolution: "@metamask/safe-event-emitter@npm:2.0.0" + checksum: 8b717ac5d53df0027c05509f03d0534700b5898dd1c3a53fb2dc4c0499ca5971b14aae67f522d09eb9f509e77f50afa95fdb3eda1afbff8b071c18a3d2905e93 languageName: node linkType: hard -"@babel/plugin-transform-optional-chaining@npm:^7.23.3": - version: 7.23.3 - resolution: "@babel/plugin-transform-optional-chaining@npm:7.23.3" - dependencies: - "@babel/helper-plugin-utils": ^7.22.5 - "@babel/helper-skip-transparent-expression-wrappers": ^7.22.5 - "@babel/plugin-syntax-optional-chaining": ^7.8.3 - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 98529b9d10b5502ceb87259b538e5649d111ec1582c4c49c620f3181d53489c1ff887075fb208245baa43fa45ae85c9950f0db47be00e55b52c9bcd36271d701 +"@metamask/safe-event-emitter@npm:^3.0.0": + version: 3.0.0 + resolution: "@metamask/safe-event-emitter@npm:3.0.0" + checksum: 8dc58a76f9f75bf2405931465fc311c68043d851e6b8ebe9f82ae339073a08a83430dba9338f8e3adc4bfc8067607125074bcafa32baee3a5157f42343dc89e5 languageName: node linkType: hard -"@babel/plugin-transform-parameters@npm:^7.23.3": - version: 7.23.3 - resolution: "@babel/plugin-transform-parameters@npm:7.23.3" +"@metamask/utils@npm:^5.0.1": + version: 5.0.2 + resolution: "@metamask/utils@npm:5.0.2" dependencies: - "@babel/helper-plugin-utils": ^7.22.5 - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: a735b3e85316d17ec102e3d3d1b6993b429bdb3b494651c9d754e3b7d270462ee1f1a126ccd5e3d871af5e683727e9ef98c9d34d4a42204fffaabff91052ed16 + "@ethereumjs/tx": ^4.1.2 + "@types/debug": ^4.1.7 + debug: ^4.3.4 + semver: ^7.3.8 + superstruct: ^1.0.3 + checksum: eca82e42911b2840deb4f32f0f215c5ffd14d22d68afbbe92d3180e920e509e310777b15eab29def3448f3535b66596ceb4c23666ec846adacc8e1bb093ff882 languageName: node linkType: hard -"@babel/plugin-transform-private-methods@npm:^7.23.3": - version: 7.23.3 - resolution: "@babel/plugin-transform-private-methods@npm:7.23.3" +"@metamask/utils@npm:^8.1.0, @metamask/utils@npm:^8.3.0": + version: 8.3.0 + resolution: "@metamask/utils@npm:8.3.0" dependencies: - "@babel/helper-create-class-features-plugin": ^7.22.15 - "@babel/helper-plugin-utils": ^7.22.5 - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: cedc1285c49b5a6d9a3d0e5e413b756ac40b3ac2f8f68bdfc3ae268bc8d27b00abd8bb0861c72756ff5dd8bf1eb77211b7feb5baf4fdae2ebbaabe49b9adc1d0 + "@ethereumjs/tx": ^4.2.0 + "@noble/hashes": ^1.3.1 + "@scure/base": ^1.1.3 + "@types/debug": ^4.1.7 + debug: ^4.3.4 + pony-cause: ^2.1.10 + semver: ^7.5.4 + superstruct: ^1.0.3 + checksum: cd60c49b4c0397fb31e6b38937a0d9346cbb8337cb8add59db8db0e0e2156fb063ff4df93a26410157f0cc02aa9a9b785fc1b53cfc4ab73204462893ed11cacb languageName: node linkType: hard -"@babel/plugin-transform-private-property-in-object@npm:^7.23.3": - version: 7.23.3 - resolution: "@babel/plugin-transform-private-property-in-object@npm:7.23.3" +"@motionone/animation@npm:^10.15.1, @motionone/animation@npm:^10.17.0": + version: 10.17.0 + resolution: "@motionone/animation@npm:10.17.0" dependencies: - "@babel/helper-annotate-as-pure": ^7.22.5 - "@babel/helper-create-class-features-plugin": ^7.22.15 - "@babel/helper-plugin-utils": ^7.22.5 - "@babel/plugin-syntax-private-property-in-object": ^7.14.5 - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 2d2edd9d1da4bf6b5e2c0894aa8782c3e035b18fcdc7a995a627cced121cab326d5a9f273eec8df6cba44ed7a9797f013e3e82f2a1ec59881037e57e990f2f2a + "@motionone/easing": ^10.17.0 + "@motionone/types": ^10.17.0 + "@motionone/utils": ^10.17.0 + tslib: ^2.3.1 + checksum: 8cab13cde7ccbe29bcaff1cb43ba39acdc51d9be4726628f4d0ba27898c59456887fd9ec56aceaa3d5b82993efbdfa9a7b9e99d4b96bc458f486208394027093 languageName: node linkType: hard -"@babel/plugin-transform-property-literals@npm:^7.23.3": - version: 7.23.3 - resolution: "@babel/plugin-transform-property-literals@npm:7.23.3" +"@motionone/dom@npm:^10.16.2, @motionone/dom@npm:^10.16.4": + version: 10.17.0 + resolution: "@motionone/dom@npm:10.17.0" dependencies: - "@babel/helper-plugin-utils": ^7.22.5 - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 16b048c8e87f25095f6d53634ab7912992f78e6997a6ff549edc3cf519db4fca01c7b4e0798530d7f6a05228ceee479251245cdd850a5531c6e6f404104d6cc9 + "@motionone/animation": ^10.17.0 + "@motionone/generators": ^10.17.0 + "@motionone/types": ^10.17.0 + "@motionone/utils": ^10.17.0 + hey-listen: ^1.0.8 + tslib: ^2.3.1 + checksum: 6415f17032136218dfa88b9b00fbab738e514544129edf6f5c01dbdacefe9be48efd2d06f3d0cb7f2f5d2d2d79c94362effc7d034332406fd4dec6a710e603a2 languageName: node linkType: hard -"@babel/plugin-transform-regenerator@npm:^7.23.3": - version: 7.23.3 - resolution: "@babel/plugin-transform-regenerator@npm:7.23.3" +"@motionone/easing@npm:^10.17.0": + version: 10.17.0 + resolution: "@motionone/easing@npm:10.17.0" dependencies: - "@babel/helper-plugin-utils": ^7.22.5 - regenerator-transform: ^0.15.2 - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 7fdacc7b40008883871b519c9e5cdea493f75495118ccc56ac104b874983569a24edd024f0f5894ba1875c54ee2b442f295d6241c3280e61c725d0dd3317c8e6 + "@motionone/utils": ^10.17.0 + tslib: ^2.3.1 + checksum: 2870d9e94645cf4ed3a27309a858dccee26615291ec46b56e993ef3ac9f059a659b02a2115ed61d27250fc8800acc9640f0319aeb402de7fa0e15dffbebeb548 languageName: node linkType: hard -"@babel/plugin-transform-reserved-words@npm:^7.23.3": - version: 7.23.3 - resolution: "@babel/plugin-transform-reserved-words@npm:7.23.3" +"@motionone/generators@npm:^10.17.0": + version: 10.17.0 + resolution: "@motionone/generators@npm:10.17.0" dependencies: - "@babel/helper-plugin-utils": ^7.22.5 - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 298c4440ddc136784ff920127cea137168e068404e635dc946ddb5d7b2a27b66f1dd4c4acb01f7184478ff7d5c3e7177a127279479926519042948fb7fa0fa48 + "@motionone/types": ^10.17.0 + "@motionone/utils": ^10.17.0 + tslib: ^2.3.1 + checksum: 6d048a0362692db3f450b97c1679a8d0265bff93106412bdcc33b9c48b9362a3e97f672f29a2932d5e393330750fdd55921c1c9b2bf20690922a37a0164e649f languageName: node linkType: hard -"@babel/plugin-transform-shorthand-properties@npm:^7.23.3": - version: 7.23.3 - resolution: "@babel/plugin-transform-shorthand-properties@npm:7.23.3" +"@motionone/svelte@npm:^10.16.2": + version: 10.16.4 + resolution: "@motionone/svelte@npm:10.16.4" dependencies: - "@babel/helper-plugin-utils": ^7.22.5 - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 5d677a03676f9fff969b0246c423d64d77502e90a832665dc872a5a5e05e5708161ce1effd56bb3c0f2c20a1112fca874be57c8a759d8b08152755519281f326 + "@motionone/dom": ^10.16.4 + tslib: ^2.3.1 + checksum: 699e20955ea832bcf32d410ae9f88edf61a5c2cf2b56527119ab1df6fecbf2632b62d541743d0f6d278fd700a15a20b9eb7c8aa5266e7aed5e113b8f8f75b863 languageName: node linkType: hard -"@babel/plugin-transform-spread@npm:^7.23.3": - version: 7.23.3 - resolution: "@babel/plugin-transform-spread@npm:7.23.3" - dependencies: - "@babel/helper-plugin-utils": ^7.22.5 - "@babel/helper-skip-transparent-expression-wrappers": ^7.22.5 - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 8fd5cac201e77a0b4825745f4e07a25f923842f282f006b3a79223c00f61075c8868d12eafec86b2642cd0b32077cdd32314e27bcb75ee5e6a68c0144140dcf2 +"@motionone/types@npm:^10.15.1, @motionone/types@npm:^10.17.0": + version: 10.17.0 + resolution: "@motionone/types@npm:10.17.0" + checksum: 3996c84e1578b17146c14bd581ab682b7b2a06ca7fd5a7dc378a0f3b10539256d7b803a7df748f0c60d6df6b33950269a27ba2bb1839de779196bd024bee4b87 languageName: node linkType: hard -"@babel/plugin-transform-sticky-regex@npm:^7.23.3": - version: 7.23.3 - resolution: "@babel/plugin-transform-sticky-regex@npm:7.23.3" +"@motionone/utils@npm:^10.15.1, @motionone/utils@npm:^10.17.0": + version: 10.17.0 + resolution: "@motionone/utils@npm:10.17.0" dependencies: - "@babel/helper-plugin-utils": ^7.22.5 - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 53e55eb2575b7abfdb4af7e503a2bf7ef5faf8bf6b92d2cd2de0700bdd19e934e5517b23e6dfed94ba50ae516b62f3f916773ef7d9bc81f01503f585051e2949 + "@motionone/types": ^10.17.0 + hey-listen: ^1.0.8 + tslib: ^2.3.1 + checksum: 408e278c9051a221e528bb9ca0a773018b9953ecd53bb88715421afc009f4647417b0d9f163c8195467badd934f39ade24f57e007416988e4291242e749ea43d languageName: node linkType: hard -"@babel/plugin-transform-template-literals@npm:^7.23.3": - version: 7.23.3 - resolution: "@babel/plugin-transform-template-literals@npm:7.23.3" +"@motionone/vue@npm:^10.16.2": + version: 10.16.4 + resolution: "@motionone/vue@npm:10.16.4" dependencies: - "@babel/helper-plugin-utils": ^7.22.5 - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: b16c5cb0b8796be0118e9c144d15bdc0d20a7f3f59009c6303a6e9a8b74c146eceb3f05186f5b97afcba7cfa87e34c1585a22186e3d5b22f2fd3d27d959d92b2 + "@motionone/dom": ^10.16.4 + tslib: ^2.3.1 + checksum: 746e38d0ee831829bfac2ce471f3d98a9e37bd8cbdf2706fa3becce69c17f51180a1ee47582d97758d68aafdfc9a187ab47ff216c77254ac994287dabcf266c1 languageName: node linkType: hard -"@babel/plugin-transform-typeof-symbol@npm:^7.23.3": - version: 7.23.3 - resolution: "@babel/plugin-transform-typeof-symbol@npm:7.23.3" - dependencies: - "@babel/helper-plugin-utils": ^7.22.5 - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 0af7184379d43afac7614fc89b1bdecce4e174d52f4efaeee8ec1a4f2c764356c6dba3525c0685231f1cbf435b6dd4ee9e738d7417f3b10ce8bbe869c32f4384 +"@next/env@npm:14.0.4": + version: 14.0.4 + resolution: "@next/env@npm:14.0.4" + checksum: e8dac033d92c10e55d3b1802f8fd9be00383ed9d479add9fee0823a9a0bf2ab0f4421d5baea52921871c82daf5cd292421db8a1ed5d173e3cb088c3b3a984c0d languageName: node linkType: hard -"@babel/plugin-transform-typescript@npm:^7.23.3": - version: 7.23.3 - resolution: "@babel/plugin-transform-typescript@npm:7.23.3" +"@next/eslint-plugin-next@npm:14.0.4": + version: 14.0.4 + resolution: "@next/eslint-plugin-next@npm:14.0.4" dependencies: - "@babel/helper-annotate-as-pure": ^7.22.5 - "@babel/helper-create-class-features-plugin": ^7.22.15 - "@babel/helper-plugin-utils": ^7.22.5 - "@babel/plugin-syntax-typescript": ^7.23.3 - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 01ba1d5d41c6b41c139fc6f2df744a82e7572335209976a75f0007ebbaea02dcb3265c44123afe09cc3f4aafb177bcb967a20af0218a95eae4fd883f6dd9d0d6 + glob: 7.1.7 + checksum: 62e353227cdd1b47e35c3eb0aaac6d5160edaa2822ce23439459546375e841c2204abe66e3e6eded08c41e50ec467221df855b903f03378dc84982b73ac00e98 languageName: node linkType: hard -"@babel/plugin-transform-unicode-escapes@npm:^7.23.3": - version: 7.23.3 - resolution: "@babel/plugin-transform-unicode-escapes@npm:7.23.3" - dependencies: - "@babel/helper-plugin-utils": ^7.22.5 - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 561c429183a54b9e4751519a3dfba6014431e9cdc1484fad03bdaf96582dfc72c76a4f8661df2aeeae7c34efd0fa4d02d3b83a2f63763ecf71ecc925f9cc1f60 +"@next/swc-darwin-arm64@npm:14.0.4": + version: 14.0.4 + resolution: "@next/swc-darwin-arm64@npm:14.0.4" + conditions: os=darwin & cpu=arm64 languageName: node linkType: hard -"@babel/plugin-transform-unicode-property-regex@npm:^7.23.3": - version: 7.23.3 - resolution: "@babel/plugin-transform-unicode-property-regex@npm:7.23.3" - dependencies: - "@babel/helper-create-regexp-features-plugin": ^7.22.15 - "@babel/helper-plugin-utils": ^7.22.5 - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 2298461a194758086d17c23c26c7de37aa533af910f9ebf31ebd0893d4aa317468043d23f73edc782ec21151d3c46cf0ff8098a83b725c49a59de28a1d4d6225 +"@next/swc-darwin-x64@npm:14.0.4": + version: 14.0.4 + resolution: "@next/swc-darwin-x64@npm:14.0.4" + conditions: os=darwin & cpu=x64 languageName: node linkType: hard -"@babel/plugin-transform-unicode-regex@npm:^7.23.3": - version: 7.23.3 - resolution: "@babel/plugin-transform-unicode-regex@npm:7.23.3" - dependencies: - "@babel/helper-create-regexp-features-plugin": ^7.22.15 - "@babel/helper-plugin-utils": ^7.22.5 - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: c5f835d17483ba899787f92e313dfa5b0055e3deab332f1d254078a2bba27ede47574b6599fcf34d3763f0c048ae0779dc21d2d8db09295edb4057478dc80a9a +"@next/swc-linux-arm64-gnu@npm:14.0.4": + version: 14.0.4 + resolution: "@next/swc-linux-arm64-gnu@npm:14.0.4" + conditions: os=linux & cpu=arm64 & libc=glibc languageName: node linkType: hard -"@babel/plugin-transform-unicode-sets-regex@npm:^7.23.3": - version: 7.23.3 - resolution: "@babel/plugin-transform-unicode-sets-regex@npm:7.23.3" - dependencies: - "@babel/helper-create-regexp-features-plugin": ^7.22.15 - "@babel/helper-plugin-utils": ^7.22.5 - peerDependencies: - "@babel/core": ^7.0.0 - checksum: 79d0b4c951955ca68235c87b91ab2b393c96285f8aeaa34d6db416d2ddac90000c9bd6e8c4d82b60a2b484da69930507245035f28ba63c6cae341cf3ba68fdef - languageName: node - linkType: hard - -"@babel/preset-env@npm:^7.18.6": - version: 7.23.3 - resolution: "@babel/preset-env@npm:7.23.3" - dependencies: - "@babel/compat-data": ^7.23.3 - "@babel/helper-compilation-targets": ^7.22.15 - "@babel/helper-plugin-utils": ^7.22.5 - "@babel/helper-validator-option": ^7.22.15 - "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": ^7.23.3 - "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": ^7.23.3 - "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": ^7.23.3 - "@babel/plugin-proposal-private-property-in-object": 7.21.0-placeholder-for-preset-env.2 - "@babel/plugin-syntax-async-generators": ^7.8.4 - "@babel/plugin-syntax-class-properties": ^7.12.13 - "@babel/plugin-syntax-class-static-block": ^7.14.5 - "@babel/plugin-syntax-dynamic-import": ^7.8.3 - "@babel/plugin-syntax-export-namespace-from": ^7.8.3 - "@babel/plugin-syntax-import-assertions": ^7.23.3 - "@babel/plugin-syntax-import-attributes": ^7.23.3 - "@babel/plugin-syntax-import-meta": ^7.10.4 - "@babel/plugin-syntax-json-strings": ^7.8.3 - "@babel/plugin-syntax-logical-assignment-operators": ^7.10.4 - "@babel/plugin-syntax-nullish-coalescing-operator": ^7.8.3 - "@babel/plugin-syntax-numeric-separator": ^7.10.4 - "@babel/plugin-syntax-object-rest-spread": ^7.8.3 - "@babel/plugin-syntax-optional-catch-binding": ^7.8.3 - "@babel/plugin-syntax-optional-chaining": ^7.8.3 - "@babel/plugin-syntax-private-property-in-object": ^7.14.5 - "@babel/plugin-syntax-top-level-await": ^7.14.5 - "@babel/plugin-syntax-unicode-sets-regex": ^7.18.6 - "@babel/plugin-transform-arrow-functions": ^7.23.3 - "@babel/plugin-transform-async-generator-functions": ^7.23.3 - "@babel/plugin-transform-async-to-generator": ^7.23.3 - "@babel/plugin-transform-block-scoped-functions": ^7.23.3 - "@babel/plugin-transform-block-scoping": ^7.23.3 - "@babel/plugin-transform-class-properties": ^7.23.3 - "@babel/plugin-transform-class-static-block": ^7.23.3 - "@babel/plugin-transform-classes": ^7.23.3 - "@babel/plugin-transform-computed-properties": ^7.23.3 - "@babel/plugin-transform-destructuring": ^7.23.3 - "@babel/plugin-transform-dotall-regex": ^7.23.3 - "@babel/plugin-transform-duplicate-keys": ^7.23.3 - "@babel/plugin-transform-dynamic-import": ^7.23.3 - "@babel/plugin-transform-exponentiation-operator": ^7.23.3 - "@babel/plugin-transform-export-namespace-from": ^7.23.3 - "@babel/plugin-transform-for-of": ^7.23.3 - "@babel/plugin-transform-function-name": ^7.23.3 - "@babel/plugin-transform-json-strings": ^7.23.3 - "@babel/plugin-transform-literals": ^7.23.3 - "@babel/plugin-transform-logical-assignment-operators": ^7.23.3 - "@babel/plugin-transform-member-expression-literals": ^7.23.3 - "@babel/plugin-transform-modules-amd": ^7.23.3 - "@babel/plugin-transform-modules-commonjs": ^7.23.3 - "@babel/plugin-transform-modules-systemjs": ^7.23.3 - "@babel/plugin-transform-modules-umd": ^7.23.3 - "@babel/plugin-transform-named-capturing-groups-regex": ^7.22.5 - "@babel/plugin-transform-new-target": ^7.23.3 - "@babel/plugin-transform-nullish-coalescing-operator": ^7.23.3 - "@babel/plugin-transform-numeric-separator": ^7.23.3 - "@babel/plugin-transform-object-rest-spread": ^7.23.3 - "@babel/plugin-transform-object-super": ^7.23.3 - "@babel/plugin-transform-optional-catch-binding": ^7.23.3 - "@babel/plugin-transform-optional-chaining": ^7.23.3 - "@babel/plugin-transform-parameters": ^7.23.3 - "@babel/plugin-transform-private-methods": ^7.23.3 - "@babel/plugin-transform-private-property-in-object": ^7.23.3 - "@babel/plugin-transform-property-literals": ^7.23.3 - "@babel/plugin-transform-regenerator": ^7.23.3 - "@babel/plugin-transform-reserved-words": ^7.23.3 - "@babel/plugin-transform-shorthand-properties": ^7.23.3 - "@babel/plugin-transform-spread": ^7.23.3 - "@babel/plugin-transform-sticky-regex": ^7.23.3 - "@babel/plugin-transform-template-literals": ^7.23.3 - "@babel/plugin-transform-typeof-symbol": ^7.23.3 - "@babel/plugin-transform-unicode-escapes": ^7.23.3 - "@babel/plugin-transform-unicode-property-regex": ^7.23.3 - "@babel/plugin-transform-unicode-regex": ^7.23.3 - "@babel/plugin-transform-unicode-sets-regex": ^7.23.3 - "@babel/preset-modules": 0.1.6-no-external-plugins - babel-plugin-polyfill-corejs2: ^0.4.6 - babel-plugin-polyfill-corejs3: ^0.8.5 - babel-plugin-polyfill-regenerator: ^0.5.3 - core-js-compat: ^3.31.0 - semver: ^6.3.1 - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: a16780b7d7deeccf70796cd8467e4aa6ad86b33fc86f67e23a606ae6bd6f2f26a952ccd17cf3f6ffb72584ac70d6cd6a936910ee31dbe4ac9622583ad5c2ae30 +"@next/swc-linux-arm64-musl@npm:14.0.4": + version: 14.0.4 + resolution: "@next/swc-linux-arm64-musl@npm:14.0.4" + conditions: os=linux & cpu=arm64 & libc=musl languageName: node linkType: hard -"@babel/preset-modules@npm:0.1.6-no-external-plugins": - version: 0.1.6-no-external-plugins - resolution: "@babel/preset-modules@npm:0.1.6-no-external-plugins" - dependencies: - "@babel/helper-plugin-utils": ^7.0.0 - "@babel/types": ^7.4.4 - esutils: ^2.0.2 - peerDependencies: - "@babel/core": ^7.0.0-0 || ^8.0.0-0 <8.0.0 - checksum: 4855e799bc50f2449fb5210f78ea9e8fd46cf4f242243f1e2ed838e2bd702e25e73e822e7f8447722a5f4baa5e67a8f7a0e403f3e7ce04540ff743a9c411c375 +"@next/swc-linux-x64-gnu@npm:14.0.4": + version: 14.0.4 + resolution: "@next/swc-linux-x64-gnu@npm:14.0.4" + conditions: os=linux & cpu=x64 & libc=glibc languageName: node linkType: hard -"@babel/preset-typescript@npm:^7.18.6": - version: 7.23.3 - resolution: "@babel/preset-typescript@npm:7.23.3" - dependencies: - "@babel/helper-plugin-utils": ^7.22.5 - "@babel/helper-validator-option": ^7.22.15 - "@babel/plugin-syntax-jsx": ^7.23.3 - "@babel/plugin-transform-modules-commonjs": ^7.23.3 - "@babel/plugin-transform-typescript": ^7.23.3 - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 105a2d39bbc464da0f7e1ad7f535c77c5f62d6b410219355b20e552e7d29933567a5c55339b5d0aec1a5c7a0a7dfdf1b54aae601a4fe15a157d54dcbfcb3e854 +"@next/swc-linux-x64-musl@npm:14.0.4": + version: 14.0.4 + resolution: "@next/swc-linux-x64-musl@npm:14.0.4" + conditions: os=linux & cpu=x64 & libc=musl languageName: node linkType: hard -"@babel/regjsgen@npm:^0.8.0": - version: 0.8.0 - resolution: "@babel/regjsgen@npm:0.8.0" - checksum: 89c338fee774770e5a487382170711014d49a68eb281e74f2b5eac88f38300a4ad545516a7786a8dd5702e9cf009c94c2f582d200f077ac5decd74c56b973730 +"@next/swc-win32-arm64-msvc@npm:14.0.4": + version: 14.0.4 + resolution: "@next/swc-win32-arm64-msvc@npm:14.0.4" + conditions: os=win32 & cpu=arm64 languageName: node linkType: hard -"@babel/runtime@npm:7.12.1": - version: 7.12.1 - resolution: "@babel/runtime@npm:7.12.1" - dependencies: - regenerator-runtime: ^0.13.4 - checksum: fb4b4c8f704a338d3500ff75bfd28a35927444e0c48254d60ce87a9402d7e149e2189e5f55fa3bd2927d4c10fa25fe34c239ae0be68df77af040b01561c5bcc8 +"@next/swc-win32-ia32-msvc@npm:14.0.4": + version: 14.0.4 + resolution: "@next/swc-win32-ia32-msvc@npm:14.0.4" + conditions: os=win32 & cpu=ia32 languageName: node linkType: hard -"@babel/runtime@npm:^7.12.5, @babel/runtime@npm:^7.17.2, @babel/runtime@npm:^7.23.2, @babel/runtime@npm:^7.8.4": - version: 7.23.2 - resolution: "@babel/runtime@npm:7.23.2" - dependencies: - regenerator-runtime: ^0.14.0 - checksum: 6c4df4839ec75ca10175f636d6362f91df8a3137f86b38f6cd3a4c90668a0fe8e9281d320958f4fbd43b394988958585a17c3aab2a4ea6bf7316b22916a371fb +"@next/swc-win32-x64-msvc@npm:14.0.4": + version: 14.0.4 + resolution: "@next/swc-win32-x64-msvc@npm:14.0.4" + conditions: os=win32 & cpu=x64 languageName: node linkType: hard -"@babel/template@npm:^7.22.15": - version: 7.22.15 - resolution: "@babel/template@npm:7.22.15" +"@noble/curves@npm:1.2.0, @noble/curves@npm:~1.2.0": + version: 1.2.0 + resolution: "@noble/curves@npm:1.2.0" dependencies: - "@babel/code-frame": ^7.22.13 - "@babel/parser": ^7.22.15 - "@babel/types": ^7.22.15 - checksum: 1f3e7dcd6c44f5904c184b3f7fe280394b191f2fed819919ffa1e529c259d5b197da8981b6ca491c235aee8dbad4a50b7e31304aa531271cb823a4a24a0dd8fd + "@noble/hashes": 1.3.2 + checksum: bb798d7a66d8e43789e93bc3c2ddff91a1e19fdb79a99b86cd98f1e5eff0ee2024a2672902c2576ef3577b6f282f3b5c778bebd55761ddbb30e36bf275e83dd0 languageName: node linkType: hard -"@babel/traverse@npm:7.17.3": - version: 7.17.3 - resolution: "@babel/traverse@npm:7.17.3" +"@noble/curves@npm:1.3.0, @noble/curves@npm:~1.3.0": + version: 1.3.0 + resolution: "@noble/curves@npm:1.3.0" dependencies: - "@babel/code-frame": ^7.16.7 - "@babel/generator": ^7.17.3 - "@babel/helper-environment-visitor": ^7.16.7 - "@babel/helper-function-name": ^7.16.7 - "@babel/helper-hoist-variables": ^7.16.7 - "@babel/helper-split-export-declaration": ^7.16.7 - "@babel/parser": ^7.17.3 - "@babel/types": ^7.17.0 - debug: ^4.1.0 - globals: ^11.1.0 - checksum: 780d7ecf711758174989794891af08d378f81febdb8932056c0d9979524bf0298e28f8e7708a872d7781151506c28f56c85c63ea3f1f654662c2fcb8a3eb9fdc + "@noble/hashes": 1.3.3 + checksum: b65342ee66c4a440eee2978524412eabba9a9efdd16d6370e15218c6a7d80bddf35e66bb57ed52c0dfd32cb9a717b439ab3a72db618f1a0066dfebe3fd12a421 languageName: node linkType: hard -"@babel/traverse@npm:^7.18.6, @babel/traverse@npm:^7.23.2, @babel/traverse@npm:^7.23.3": - version: 7.23.3 - resolution: "@babel/traverse@npm:7.23.3" - dependencies: - "@babel/code-frame": ^7.22.13 - "@babel/generator": ^7.23.3 - "@babel/helper-environment-visitor": ^7.22.20 - "@babel/helper-function-name": ^7.23.0 - "@babel/helper-hoist-variables": ^7.22.5 - "@babel/helper-split-export-declaration": ^7.22.6 - "@babel/parser": ^7.23.3 - "@babel/types": ^7.23.3 - debug: ^4.1.0 - globals: ^11.1.0 - checksum: f4e0c05f2f82368b9be7e1fed38cfcc2e1074967a8b76ac837b89661adbd391e99d0b1fd8c31215ffc3a04d2d5d7ee5e627914a09082db84ec5606769409fe2b +"@noble/hashes@npm:1.3.2": + version: 1.3.2 + resolution: "@noble/hashes@npm:1.3.2" + checksum: fe23536b436539d13f90e4b9be843cc63b1b17666a07634a2b1259dded6f490be3d050249e6af98076ea8f2ea0d56f578773c2197f2aa0eeaa5fba5bc18ba474 languageName: node linkType: hard -"@babel/types@npm:7.17.0": - version: 7.17.0 - resolution: "@babel/types@npm:7.17.0" - dependencies: - "@babel/helper-validator-identifier": ^7.16.7 - to-fast-properties: ^2.0.0 - checksum: 12e5a287986fe557188e87b2c5202223f1dc83d9239a196ab936fdb9f8c1eb0be717ff19f934b5fad4e29a75586d5798f74bed209bccea1c20376b9952056f0e +"@noble/hashes@npm:1.3.3, @noble/hashes@npm:^1.3.1, @noble/hashes@npm:~1.3.0, @noble/hashes@npm:~1.3.2": + version: 1.3.3 + resolution: "@noble/hashes@npm:1.3.3" + checksum: 8a6496d1c0c64797339bc694ad06cdfaa0f9e56cd0c3f68ae3666cfb153a791a55deb0af9c653c7ed2db64d537aa3e3054629740d2f2338bb1dcb7ab60cd205b languageName: node linkType: hard -"@babel/types@npm:^7.17.0, @babel/types@npm:^7.20.2, @babel/types@npm:^7.22.15, @babel/types@npm:^7.22.19, @babel/types@npm:^7.22.5, @babel/types@npm:^7.23.0, @babel/types@npm:^7.23.3, @babel/types@npm:^7.4.4, @babel/types@npm:^7.8.3": - version: 7.23.3 - resolution: "@babel/types@npm:7.23.3" +"@nodelib/fs.scandir@npm:2.1.5": + version: 2.1.5 + resolution: "@nodelib/fs.scandir@npm:2.1.5" dependencies: - "@babel/helper-string-parser": ^7.22.5 - "@babel/helper-validator-identifier": ^7.22.20 - to-fast-properties: ^2.0.0 - checksum: b96f1ec495351aeb2a5f98dd494aafa17df02a351548ae96999460f35c933261c839002a34c1e83552ff0d9f5e94d0b5b8e105d38131c7c9b0f5a6588676f35d + "@nodelib/fs.stat": 2.0.5 + run-parallel: ^1.1.9 + checksum: a970d595bd23c66c880e0ef1817791432dbb7acbb8d44b7e7d0e7a22f4521260d4a83f7f9fd61d44fda4610105577f8f58a60718105fb38352baed612fd79e59 languageName: node linkType: hard -"@coinbase/wallet-sdk@npm:^3.6.6": - version: 3.7.2 - resolution: "@coinbase/wallet-sdk@npm:3.7.2" - dependencies: - "@metamask/safe-event-emitter": 2.0.0 - "@solana/web3.js": ^1.70.1 - bind-decorator: ^1.0.11 - bn.js: ^5.1.1 - buffer: ^6.0.3 - clsx: ^1.1.0 - eth-block-tracker: 6.1.0 - eth-json-rpc-filters: 5.1.0 - eth-rpc-errors: 4.0.2 - json-rpc-engine: 6.1.0 - keccak: ^3.0.1 - preact: ^10.5.9 - qs: ^6.10.3 - rxjs: ^6.6.3 - sha.js: ^2.4.11 - stream-browserify: ^3.0.0 - util: ^0.12.4 - checksum: d42a7b7e443942f657f636eede671979024308c6713af68f774309c04c0e1974cdbfe83514adebf4c0bcdb84adce6a026e5a92b5cff35e08eb1fb0772b1ec7e5 +"@nodelib/fs.stat@npm:2.0.5, @nodelib/fs.stat@npm:^2.0.2": + version: 2.0.5 + resolution: "@nodelib/fs.stat@npm:2.0.5" + checksum: 012480b5ca9d97bff9261571dbbec7bbc6033f69cc92908bc1ecfad0792361a5a1994bc48674b9ef76419d056a03efadfce5a6cf6dbc0a36559571a7a483f6f0 languageName: node linkType: hard -"@cspotcode/source-map-support@npm:^0.8.0": - version: 0.8.1 - resolution: "@cspotcode/source-map-support@npm:0.8.1" +"@nodelib/fs.walk@npm:^1.2.3": + version: 1.2.8 + resolution: "@nodelib/fs.walk@npm:1.2.8" dependencies: - "@jridgewell/trace-mapping": 0.3.9 - checksum: 5718f267085ed8edb3e7ef210137241775e607ee18b77d95aa5bd7514f47f5019aa2d82d96b3bf342ef7aa890a346fa1044532ff7cc3009e7d24fce3ce6200fa - languageName: node - linkType: hard - -"@edge-runtime/format@npm:1.1.0": - version: 1.1.0 - resolution: "@edge-runtime/format@npm:1.1.0" - checksum: b017896197776eed3490bcb92ce6265d9cd1c46ab66a8eb65f1895093a163fbef281bf44acd2129d0d92882437876281a71e160f174ec0b43ef34893a3fe96fd + "@nodelib/fs.scandir": 2.1.5 + fastq: ^1.6.0 + checksum: 190c643f156d8f8f277bf2a6078af1ffde1fd43f498f187c2db24d35b4b4b5785c02c7dc52e356497b9a1b65b13edc996de08de0b961c32844364da02986dc53 languageName: node linkType: hard -"@edge-runtime/primitives@npm:2.0.0": - version: 2.0.0 - resolution: "@edge-runtime/primitives@npm:2.0.0" - checksum: f383faab52bafb3fe3f8f24bd6b963f2fd173ae8e76724b9a0b66653f76f14d936efadbaf520c0983a8354a59e7b85241650a24ae230b8aa135ba8d1cd7f5c06 +"@npmcli/agent@npm:^2.0.0": + version: 2.2.0 + resolution: "@npmcli/agent@npm:2.2.0" + dependencies: + agent-base: ^7.1.0 + http-proxy-agent: ^7.0.0 + https-proxy-agent: ^7.0.1 + lru-cache: ^10.0.1 + socks-proxy-agent: ^8.0.1 + checksum: 3b25312edbdfaa4089af28e2d423b6f19838b945e47765b0c8174c1395c79d43c3ad6d23cb364b43f59fd3acb02c93e3b493f72ddbe3dfea04c86843a7311fc4 languageName: node linkType: hard -"@edge-runtime/vm@npm:2.0.0": - version: 2.0.0 - resolution: "@edge-runtime/vm@npm:2.0.0" +"@npmcli/fs@npm:^3.1.0": + version: 3.1.0 + resolution: "@npmcli/fs@npm:3.1.0" dependencies: - "@edge-runtime/primitives": 2.0.0 - checksum: fee554b8fbc6887a4a23a4c65b947fc7a5c7901c2b12d5b211d80cd210e3885168985513ea278488afd0e107c470a6e8f535e010e3fc7903bc5f306a3c8094f7 + semver: ^7.3.5 + checksum: a50a6818de5fc557d0b0e6f50ec780a7a02ab8ad07e5ac8b16bf519e0ad60a144ac64f97d05c443c3367235d337182e1d012bbac0eb8dbae8dc7b40b193efd0e languageName: node linkType: hard -"@emotion/hash@npm:^0.8.0": - version: 0.8.0 - resolution: "@emotion/hash@npm:0.8.0" - checksum: 4b35d88a97e67275c1d990c96d3b0450451d089d1508619488fc0acb882cb1ac91e93246d471346ebd1b5402215941ef4162efe5b51534859b39d8b3a0e3ffaa +"@parcel/watcher-android-arm64@npm:2.4.0": + version: 2.4.0 + resolution: "@parcel/watcher-android-arm64@npm:2.4.0" + conditions: os=android & cpu=arm64 languageName: node linkType: hard -"@emotion/hash@npm:^0.9.0": - version: 0.9.1 - resolution: "@emotion/hash@npm:0.9.1" - checksum: 716e17e48bf9047bf9383982c071de49f2615310fb4e986738931776f5a823bc1f29c84501abe0d3df91a3803c80122d24e28b57351bca9e01356ebb33d89876 +"@parcel/watcher-darwin-arm64@npm:2.4.0": + version: 2.4.0 + resolution: "@parcel/watcher-darwin-arm64@npm:2.4.0" + conditions: os=darwin & cpu=arm64 languageName: node linkType: hard -"@esbuild-plugins/node-modules-polyfill@npm:^0.1.4": - version: 0.1.4 - resolution: "@esbuild-plugins/node-modules-polyfill@npm:0.1.4" - dependencies: - escape-string-regexp: ^4.0.0 - rollup-plugin-node-polyfills: ^0.2.1 - peerDependencies: - esbuild: "*" - checksum: 39ff2a816139d71ebfbb78914c024565b6026da3146776aa10d27ee1330938ce78c7b2aad11c2d7768c7675d0942d1d1690dabfe60fa79e07dbb31cfbe396cec +"@parcel/watcher-darwin-x64@npm:2.4.0": + version: 2.4.0 + resolution: "@parcel/watcher-darwin-x64@npm:2.4.0" + conditions: os=darwin & cpu=x64 languageName: node linkType: hard -"@esbuild/android-arm64@npm:0.16.3": - version: 0.16.3 - resolution: "@esbuild/android-arm64@npm:0.16.3" - conditions: os=android & cpu=arm64 +"@parcel/watcher-freebsd-x64@npm:2.4.0": + version: 2.4.0 + resolution: "@parcel/watcher-freebsd-x64@npm:2.4.0" + conditions: os=freebsd & cpu=x64 languageName: node linkType: hard -"@esbuild/android-arm64@npm:0.17.6": - version: 0.17.6 - resolution: "@esbuild/android-arm64@npm:0.17.6" - conditions: os=android & cpu=arm64 +"@parcel/watcher-linux-arm-glibc@npm:2.4.0": + version: 2.4.0 + resolution: "@parcel/watcher-linux-arm-glibc@npm:2.4.0" + conditions: os=linux & cpu=arm & libc=glibc languageName: node linkType: hard -"@esbuild/android-arm64@npm:0.18.20": - version: 0.18.20 - resolution: "@esbuild/android-arm64@npm:0.18.20" - conditions: os=android & cpu=arm64 +"@parcel/watcher-linux-arm64-glibc@npm:2.4.0": + version: 2.4.0 + resolution: "@parcel/watcher-linux-arm64-glibc@npm:2.4.0" + conditions: os=linux & cpu=arm64 & libc=glibc languageName: node linkType: hard -"@esbuild/android-arm@npm:0.16.3": - version: 0.16.3 - resolution: "@esbuild/android-arm@npm:0.16.3" - conditions: os=android & cpu=arm +"@parcel/watcher-linux-arm64-musl@npm:2.4.0": + version: 2.4.0 + resolution: "@parcel/watcher-linux-arm64-musl@npm:2.4.0" + conditions: os=linux & cpu=arm64 & libc=musl languageName: node linkType: hard -"@esbuild/android-arm@npm:0.17.6": - version: 0.17.6 - resolution: "@esbuild/android-arm@npm:0.17.6" - conditions: os=android & cpu=arm +"@parcel/watcher-linux-x64-glibc@npm:2.4.0": + version: 2.4.0 + resolution: "@parcel/watcher-linux-x64-glibc@npm:2.4.0" + conditions: os=linux & cpu=x64 & libc=glibc languageName: node linkType: hard -"@esbuild/android-arm@npm:0.18.20": - version: 0.18.20 - resolution: "@esbuild/android-arm@npm:0.18.20" - conditions: os=android & cpu=arm +"@parcel/watcher-linux-x64-musl@npm:2.4.0": + version: 2.4.0 + resolution: "@parcel/watcher-linux-x64-musl@npm:2.4.0" + conditions: os=linux & cpu=x64 & libc=musl languageName: node linkType: hard -"@esbuild/android-x64@npm:0.16.3": - version: 0.16.3 - resolution: "@esbuild/android-x64@npm:0.16.3" - conditions: os=android & cpu=x64 +"@parcel/watcher-wasm@npm:2.4.0": + version: 2.4.0 + resolution: "@parcel/watcher-wasm@npm:2.4.0" + dependencies: + is-glob: ^4.0.3 + micromatch: ^4.0.5 + napi-wasm: ^1.1.0 + checksum: f32af594a20a809981b6830e8abdb59e604b670568f2344c7bc69b7447fbc135fb8a6900ba1feb5a197b3a5633a663bdfd9502e4a684aebd10abfb99f36f678b languageName: node linkType: hard -"@esbuild/android-x64@npm:0.17.6": - version: 0.17.6 - resolution: "@esbuild/android-x64@npm:0.17.6" - conditions: os=android & cpu=x64 +"@parcel/watcher-win32-arm64@npm:2.4.0": + version: 2.4.0 + resolution: "@parcel/watcher-win32-arm64@npm:2.4.0" + conditions: os=win32 & cpu=arm64 languageName: node linkType: hard -"@esbuild/android-x64@npm:0.18.20": - version: 0.18.20 - resolution: "@esbuild/android-x64@npm:0.18.20" - conditions: os=android & cpu=x64 +"@parcel/watcher-win32-ia32@npm:2.4.0": + version: 2.4.0 + resolution: "@parcel/watcher-win32-ia32@npm:2.4.0" + conditions: os=win32 & cpu=ia32 languageName: node linkType: hard -"@esbuild/darwin-arm64@npm:0.16.3": - version: 0.16.3 - resolution: "@esbuild/darwin-arm64@npm:0.16.3" - conditions: os=darwin & cpu=arm64 +"@parcel/watcher-win32-x64@npm:2.4.0": + version: 2.4.0 + resolution: "@parcel/watcher-win32-x64@npm:2.4.0" + conditions: os=win32 & cpu=x64 languageName: node linkType: hard -"@esbuild/darwin-arm64@npm:0.17.6": - version: 0.17.6 - resolution: "@esbuild/darwin-arm64@npm:0.17.6" - conditions: os=darwin & cpu=arm64 +"@parcel/watcher@npm:^2.4.0": + version: 2.4.0 + resolution: "@parcel/watcher@npm:2.4.0" + dependencies: + "@parcel/watcher-android-arm64": 2.4.0 + "@parcel/watcher-darwin-arm64": 2.4.0 + "@parcel/watcher-darwin-x64": 2.4.0 + "@parcel/watcher-freebsd-x64": 2.4.0 + "@parcel/watcher-linux-arm-glibc": 2.4.0 + "@parcel/watcher-linux-arm64-glibc": 2.4.0 + "@parcel/watcher-linux-arm64-musl": 2.4.0 + "@parcel/watcher-linux-x64-glibc": 2.4.0 + "@parcel/watcher-linux-x64-musl": 2.4.0 + "@parcel/watcher-win32-arm64": 2.4.0 + "@parcel/watcher-win32-ia32": 2.4.0 + "@parcel/watcher-win32-x64": 2.4.0 + detect-libc: ^1.0.3 + is-glob: ^4.0.3 + micromatch: ^4.0.5 + node-addon-api: ^7.0.0 + node-gyp: latest + dependenciesMeta: + "@parcel/watcher-android-arm64": + optional: true + "@parcel/watcher-darwin-arm64": + optional: true + "@parcel/watcher-darwin-x64": + optional: true + "@parcel/watcher-freebsd-x64": + optional: true + "@parcel/watcher-linux-arm-glibc": + optional: true + "@parcel/watcher-linux-arm64-glibc": + optional: true + "@parcel/watcher-linux-arm64-musl": + optional: true + "@parcel/watcher-linux-x64-glibc": + optional: true + "@parcel/watcher-linux-x64-musl": + optional: true + "@parcel/watcher-win32-arm64": + optional: true + "@parcel/watcher-win32-ia32": + optional: true + "@parcel/watcher-win32-x64": + optional: true + checksum: 9ff89d7e8c0beeee998b28a173870c657b65aa76fafb3c98524f4c28f37103b70e84538de3a380a1126b28e4e84c90df87804398c38fdcaef877f87aa06db961 languageName: node linkType: hard -"@esbuild/darwin-arm64@npm:0.18.20": - version: 0.18.20 - resolution: "@esbuild/darwin-arm64@npm:0.18.20" - conditions: os=darwin & cpu=arm64 +"@pkgjs/parseargs@npm:^0.11.0": + version: 0.11.0 + resolution: "@pkgjs/parseargs@npm:0.11.0" + checksum: 6ad6a00fc4f2f2cfc6bff76fb1d88b8ee20bc0601e18ebb01b6d4be583733a860239a521a7fbca73b612e66705078809483549d2b18f370eb346c5155c8e4a0f languageName: node linkType: hard -"@esbuild/darwin-x64@npm:0.16.3": - version: 0.16.3 - resolution: "@esbuild/darwin-x64@npm:0.16.3" - conditions: os=darwin & cpu=x64 +"@rainbow-me/rainbowkit@npm:1.3.0": + version: 1.3.0 + resolution: "@rainbow-me/rainbowkit@npm:1.3.0" + dependencies: + "@vanilla-extract/css": 1.9.1 + "@vanilla-extract/dynamic": 2.0.2 + "@vanilla-extract/sprinkles": 1.5.0 + clsx: 1.1.1 + i18n-js: ^4.3.2 + qrcode: 1.5.0 + react-remove-scroll: 2.5.4 + ua-parser-js: ^1.0.35 + peerDependencies: + react: ">=17" + react-dom: ">=17" + viem: ~0.3.19 || ^1.0.0 + wagmi: ~1.0.1 || ~1.1.0 || ~1.2.0 || ~1.3.0 || ~1.4.0 + checksum: d038e0543d199da2b727c0b1d58cb07efadd0be08f5e15cab1b269f26ae5b332da46de36102f6a18a32afda93057fbea39fcad1ed287c3bb874aec91d9b2094f languageName: node linkType: hard -"@esbuild/darwin-x64@npm:0.17.6": - version: 0.17.6 - resolution: "@esbuild/darwin-x64@npm:0.17.6" - conditions: os=darwin & cpu=x64 +"@rollup/pluginutils@npm:^4.0.0": + version: 4.2.1 + resolution: "@rollup/pluginutils@npm:4.2.1" + dependencies: + estree-walker: ^2.0.1 + picomatch: ^2.2.2 + checksum: 6bc41f22b1a0f1efec3043899e4d3b6b1497b3dea4d94292d8f83b4cf07a1073ecbaedd562a22d11913ff7659f459677b01b09e9598a98936e746780ecc93a12 languageName: node linkType: hard -"@esbuild/darwin-x64@npm:0.18.20": - version: 0.18.20 - resolution: "@esbuild/darwin-x64@npm:0.18.20" - conditions: os=darwin & cpu=x64 +"@rushstack/eslint-patch@npm:^1.3.3": + version: 1.7.2 + resolution: "@rushstack/eslint-patch@npm:1.7.2" + checksum: 9c773e712cef97d4e9defbd80eb25430e727137acda45d5236c620da7b93d93ae00901f7e10e893f5a8445312f2a7ff74c241024109c066bffb423f5e3ed0b1c languageName: node linkType: hard -"@esbuild/freebsd-arm64@npm:0.16.3": - version: 0.16.3 - resolution: "@esbuild/freebsd-arm64@npm:0.16.3" - conditions: os=freebsd & cpu=arm64 +"@safe-global/safe-apps-provider@npm:^0.18.1": + version: 0.18.2 + resolution: "@safe-global/safe-apps-provider@npm:0.18.2" + dependencies: + "@safe-global/safe-apps-sdk": ^9.0.0 + events: ^3.3.0 + checksum: 36fa3ab829328655053e84a3be394f2cf39c363b79034ff028306ae24badc7f707423dd0af39e4076b549c5ed8088cbe2c8aca3c23d373041400dcf0b13101c8 languageName: node linkType: hard -"@esbuild/freebsd-arm64@npm:0.17.6": - version: 0.17.6 - resolution: "@esbuild/freebsd-arm64@npm:0.17.6" - conditions: os=freebsd & cpu=arm64 +"@safe-global/safe-apps-sdk@npm:^8.1.0": + version: 8.1.0 + resolution: "@safe-global/safe-apps-sdk@npm:8.1.0" + dependencies: + "@safe-global/safe-gateway-typescript-sdk": ^3.5.3 + viem: ^1.0.0 + checksum: e9d31ed6d9cd2cd9ed71ef5a0e1f6ecfca9f0c62acb9b86a0ddb1b65a609090f2297c4304591ac0518b266a1bcc88d1dad31b0d05e50c7732accccb65adab754 languageName: node linkType: hard -"@esbuild/freebsd-arm64@npm:0.18.20": - version: 0.18.20 - resolution: "@esbuild/freebsd-arm64@npm:0.18.20" - conditions: os=freebsd & cpu=arm64 +"@safe-global/safe-apps-sdk@npm:^9.0.0": + version: 9.0.0 + resolution: "@safe-global/safe-apps-sdk@npm:9.0.0" + dependencies: + "@safe-global/safe-gateway-typescript-sdk": ^3.5.3 + viem: ^1.6.0 + checksum: 91d233d39d60574550a0455dc55e8cc58eb8b2324bf522e87ab0ed8b08eee702f60f71310790d0a892c5ad9cfc054ef5c7a05ef52f84ba2ecec7a1dcab689f7c languageName: node linkType: hard -"@esbuild/freebsd-x64@npm:0.16.3": - version: 0.16.3 - resolution: "@esbuild/freebsd-x64@npm:0.16.3" - conditions: os=freebsd & cpu=x64 +"@safe-global/safe-gateway-typescript-sdk@npm:^3.5.3": + version: 3.14.0 + resolution: "@safe-global/safe-gateway-typescript-sdk@npm:3.14.0" + checksum: a5242ba434aa25a68a1e06f5c413fd0c5c82df9d300909e955aa32dd99146cbc2b060fe7bc43db6b242d473652b5a94ce6a6d6ebaf06eb96106129c6982c06d7 languageName: node linkType: hard -"@esbuild/freebsd-x64@npm:0.17.6": - version: 0.17.6 - resolution: "@esbuild/freebsd-x64@npm:0.17.6" - conditions: os=freebsd & cpu=x64 +"@scure/base@npm:^1.1.3, @scure/base@npm:~1.1.0, @scure/base@npm:~1.1.2, @scure/base@npm:~1.1.4": + version: 1.1.5 + resolution: "@scure/base@npm:1.1.5" + checksum: 9e9ee6088cb3aa0fb91f5a48497d26682c7829df3019b1251d088d166d7a8c0f941c68aaa8e7b96bbad20c71eb210397cb1099062cde3e29d4bad6b975c18519 languageName: node linkType: hard -"@esbuild/freebsd-x64@npm:0.18.20": - version: 0.18.20 - resolution: "@esbuild/freebsd-x64@npm:0.18.20" - conditions: os=freebsd & cpu=x64 +"@scure/bip32@npm:1.3.2": + version: 1.3.2 + resolution: "@scure/bip32@npm:1.3.2" + dependencies: + "@noble/curves": ~1.2.0 + "@noble/hashes": ~1.3.2 + "@scure/base": ~1.1.2 + checksum: c5ae84fae43490853693b481531132b89e056d45c945fc8b92b9d032577f753dfd79c5a7bbcbf0a7f035951006ff0311b6cf7a389e26c9ec6335e42b20c53157 languageName: node linkType: hard -"@esbuild/linux-arm64@npm:0.16.3": - version: 0.16.3 - resolution: "@esbuild/linux-arm64@npm:0.16.3" - conditions: os=linux & cpu=arm64 +"@scure/bip32@npm:1.3.3": + version: 1.3.3 + resolution: "@scure/bip32@npm:1.3.3" + dependencies: + "@noble/curves": ~1.3.0 + "@noble/hashes": ~1.3.2 + "@scure/base": ~1.1.4 + checksum: f939ca733972622fcc1e61d4fdf170a0ad294b24ddb7ed7cdd4c467e1ef283b970154cb101cf5f1a7b64cf5337e917ad31135911dfc36b1d76625320167df2fa languageName: node linkType: hard -"@esbuild/linux-arm64@npm:0.17.6": - version: 0.17.6 - resolution: "@esbuild/linux-arm64@npm:0.17.6" - conditions: os=linux & cpu=arm64 +"@scure/bip39@npm:1.2.1": + version: 1.2.1 + resolution: "@scure/bip39@npm:1.2.1" + dependencies: + "@noble/hashes": ~1.3.0 + "@scure/base": ~1.1.0 + checksum: c5bd6f1328fdbeae2dcdd891825b1610225310e5e62a4942714db51066866e4f7bef242c7b06a1b9dcc8043a4a13412cf5c5df76d3b10aa9e36b82e9b6e3eeaa languageName: node linkType: hard -"@esbuild/linux-arm64@npm:0.18.20": - version: 0.18.20 - resolution: "@esbuild/linux-arm64@npm:0.18.20" - conditions: os=linux & cpu=arm64 +"@scure/bip39@npm:1.2.2": + version: 1.2.2 + resolution: "@scure/bip39@npm:1.2.2" + dependencies: + "@noble/hashes": ~1.3.2 + "@scure/base": ~1.1.4 + checksum: cb99505e6d2deef8e55e81df8c563ce8dbfdf1595596dc912bceadcf366c91b05a98130e928ecb090df74efdb20150b64acc4be55bc42768cab4d39a2833d234 languageName: node linkType: hard -"@esbuild/linux-arm@npm:0.16.3": - version: 0.16.3 - resolution: "@esbuild/linux-arm@npm:0.16.3" - conditions: os=linux & cpu=arm - languageName: node - linkType: hard +"@se-2/foundry@workspace:packages/foundry": + version: 0.0.0-use.local + resolution: "@se-2/foundry@workspace:packages/foundry" + dependencies: + "@types/prettier": 2 + "@types/qrcode": 1 + dotenv: ~16.3.1 + envfile: ~6.18.0 + ethers: ~5.7.1 + prettier: ~2.8.8 + qrcode: ~1.5.3 + toml: ~3.0.0 + languageName: unknown + linkType: soft -"@esbuild/linux-arm@npm:0.17.6": - version: 0.17.6 - resolution: "@esbuild/linux-arm@npm:0.17.6" - conditions: os=linux & cpu=arm - languageName: node - linkType: hard +"@se-2/nextjs@workspace:packages/nextjs": + version: 0.0.0-use.local + resolution: "@se-2/nextjs@workspace:packages/nextjs" + dependencies: + "@ethersproject/providers": ~5.7.2 + "@heroicons/react": ~2.0.11 + "@rainbow-me/rainbowkit": 1.3.0 + "@trivago/prettier-plugin-sort-imports": ~4.1.1 + "@types/node": ^17.0.45 + "@types/nprogress": ^0 + "@types/react": ^18.0.21 + "@types/react-copy-to-clipboard": ^5.0.4 + "@typescript-eslint/eslint-plugin": ~5.40.0 + "@uniswap/sdk-core": ~4.0.1 + "@uniswap/v2-sdk": ~3.0.1 + autoprefixer: ~10.4.12 + blo: ~1.0.1 + daisyui: ~4.4.19 + eslint: ~8.24.0 + eslint-config-next: ~14.0.4 + eslint-config-prettier: ~8.5.0 + eslint-plugin-prettier: ~4.2.1 + next: ~14.0.4 + nprogress: ~0.2.0 + postcss: ~8.4.16 + prettier: ~2.8.4 + qrcode.react: ~3.1.0 + react: ~18.2.0 + react-copy-to-clipboard: ~5.1.0 + react-dom: ~18.2.0 + react-hot-toast: ~2.4.0 + tailwindcss: ~3.3.3 + type-fest: ~4.6.0 + typescript: ~5.1.6 + use-debounce: ~8.0.4 + usehooks-ts: ~2.9.1 + vercel: ~32.4.1 + viem: 1.19.9 + wagmi: 1.4.12 + zustand: ~4.1.2 + languageName: unknown + linkType: soft -"@esbuild/linux-arm@npm:0.18.20": - version: 0.18.20 - resolution: "@esbuild/linux-arm@npm:0.18.20" - conditions: os=linux & cpu=arm +"@sinclair/typebox@npm:0.25.24": + version: 0.25.24 + resolution: "@sinclair/typebox@npm:0.25.24" + checksum: 10219c58f40b8414c50b483b0550445e9710d4fe7b2c4dccb9b66533dd90ba8e024acc776026cebe81e87f06fa24b07fdd7bc30dd277eb9cc386ec50151a3026 languageName: node linkType: hard -"@esbuild/linux-ia32@npm:0.16.3": - version: 0.16.3 - resolution: "@esbuild/linux-ia32@npm:0.16.3" - conditions: os=linux & cpu=ia32 +"@stablelib/aead@npm:^1.0.1": + version: 1.0.1 + resolution: "@stablelib/aead@npm:1.0.1" + checksum: 1a6f68d138f105d17dd65349751515bd252ab0498c77255b8555478d28415600dde493f909eb718245047a993f838dfae546071e1687566ffb7b8c3e10c918d9 languageName: node linkType: hard -"@esbuild/linux-ia32@npm:0.17.6": - version: 0.17.6 - resolution: "@esbuild/linux-ia32@npm:0.17.6" - conditions: os=linux & cpu=ia32 +"@stablelib/binary@npm:^1.0.1": + version: 1.0.1 + resolution: "@stablelib/binary@npm:1.0.1" + dependencies: + "@stablelib/int": ^1.0.1 + checksum: dca9b98eb1f56a4002b5b9e7351fbc49f3d8616af87007c01e833bd763ac89214eb5f3b7e18673c91ce59d4a0e4856a2eb661ace33d39f17fb1ad267271fccd8 languageName: node linkType: hard -"@esbuild/linux-ia32@npm:0.18.20": - version: 0.18.20 - resolution: "@esbuild/linux-ia32@npm:0.18.20" - conditions: os=linux & cpu=ia32 +"@stablelib/bytes@npm:^1.0.1": + version: 1.0.1 + resolution: "@stablelib/bytes@npm:1.0.1" + checksum: 456267e08c3384abcb71d3ad3e97a6f99185ad754bac016f501ebea4e4886f37900589143b57e33bdbbf513a92fc89368c15dd4517e0540d0bdc79ecdf9dd087 languageName: node linkType: hard -"@esbuild/linux-loong64@npm:0.16.3": - version: 0.16.3 - resolution: "@esbuild/linux-loong64@npm:0.16.3" - conditions: os=linux & cpu=loong64 +"@stablelib/chacha20poly1305@npm:1.0.1": + version: 1.0.1 + resolution: "@stablelib/chacha20poly1305@npm:1.0.1" + dependencies: + "@stablelib/aead": ^1.0.1 + "@stablelib/binary": ^1.0.1 + "@stablelib/chacha": ^1.0.1 + "@stablelib/constant-time": ^1.0.1 + "@stablelib/poly1305": ^1.0.1 + "@stablelib/wipe": ^1.0.1 + checksum: 81f1a32330838d31e4dc3144d76eba7244b56d9ea38c1f604f2c34d93ed8e67e9a6167d2cfd72254c13cc46dfc1f5ce5157b37939a575295d69d9144abb4e4fb languageName: node linkType: hard -"@esbuild/linux-loong64@npm:0.17.6": - version: 0.17.6 - resolution: "@esbuild/linux-loong64@npm:0.17.6" - conditions: os=linux & cpu=loong64 +"@stablelib/chacha@npm:^1.0.1": + version: 1.0.1 + resolution: "@stablelib/chacha@npm:1.0.1" + dependencies: + "@stablelib/binary": ^1.0.1 + "@stablelib/wipe": ^1.0.1 + checksum: f061f36c4ca4bf177dd7cac11e7c65ced164f141b6065885141ae5a55f32e16ba0209aefcdcc966aef013f1da616ce901a3a80653b4b6f833cf7e3397ae2d6bd languageName: node linkType: hard -"@esbuild/linux-loong64@npm:0.18.20": - version: 0.18.20 - resolution: "@esbuild/linux-loong64@npm:0.18.20" - conditions: os=linux & cpu=loong64 +"@stablelib/constant-time@npm:^1.0.1": + version: 1.0.1 + resolution: "@stablelib/constant-time@npm:1.0.1" + checksum: dba4f4bf508de2ff15f7f0cbd875e70391aa3ba3698290fe1ed2feb151c243ba08a90fc6fb390ec2230e30fcc622318c591a7c0e35dcb8150afb50c797eac3d7 languageName: node linkType: hard -"@esbuild/linux-mips64el@npm:0.16.3": - version: 0.16.3 - resolution: "@esbuild/linux-mips64el@npm:0.16.3" - conditions: os=linux & cpu=mips64el +"@stablelib/ed25519@npm:^1.0.2": + version: 1.0.3 + resolution: "@stablelib/ed25519@npm:1.0.3" + dependencies: + "@stablelib/random": ^1.0.2 + "@stablelib/sha512": ^1.0.1 + "@stablelib/wipe": ^1.0.1 + checksum: e18279de078edac67396ba07dbb862dce0fe89efa8141c21a5b04108a29914bd51636019522323ca5097ec596a90b3028ed64e88ee009b0ac7de7c1ab6499ccb languageName: node linkType: hard -"@esbuild/linux-mips64el@npm:0.17.6": - version: 0.17.6 - resolution: "@esbuild/linux-mips64el@npm:0.17.6" - conditions: os=linux & cpu=mips64el +"@stablelib/hash@npm:^1.0.1": + version: 1.0.1 + resolution: "@stablelib/hash@npm:1.0.1" + checksum: 3ff1f12d1a4082aaf4b6cdf40c2010aabe5c4209d3b40b97b5bbb0d9abc0ee94abdc545e57de0614afaea807ca0212ac870e247ec8f66cdce91ec39ce82948cf languageName: node linkType: hard -"@esbuild/linux-mips64el@npm:0.18.20": - version: 0.18.20 - resolution: "@esbuild/linux-mips64el@npm:0.18.20" - conditions: os=linux & cpu=mips64el +"@stablelib/hkdf@npm:1.0.1": + version: 1.0.1 + resolution: "@stablelib/hkdf@npm:1.0.1" + dependencies: + "@stablelib/hash": ^1.0.1 + "@stablelib/hmac": ^1.0.1 + "@stablelib/wipe": ^1.0.1 + checksum: 9d45e303715a1835c8612b78e6c1b9d2b7463699b484241d8681fb5c17e0f2bbde5ce211c882134b64616a402e09177baeba80426995ff227b3654a155ab225d languageName: node linkType: hard -"@esbuild/linux-ppc64@npm:0.16.3": - version: 0.16.3 - resolution: "@esbuild/linux-ppc64@npm:0.16.3" - conditions: os=linux & cpu=ppc64 +"@stablelib/hmac@npm:^1.0.1": + version: 1.0.1 + resolution: "@stablelib/hmac@npm:1.0.1" + dependencies: + "@stablelib/constant-time": ^1.0.1 + "@stablelib/hash": ^1.0.1 + "@stablelib/wipe": ^1.0.1 + checksum: e3b93f7144a5846a6e30213278f7570de6d3f9d09131b95ce76d5c5c8bf37bf5d1830f2ee8d847555707271dbfd6e2461221719fd4d8b27ff06b9dd689c0ec21 languageName: node linkType: hard -"@esbuild/linux-ppc64@npm:0.17.6": - version: 0.17.6 - resolution: "@esbuild/linux-ppc64@npm:0.17.6" - conditions: os=linux & cpu=ppc64 +"@stablelib/int@npm:^1.0.1": + version: 1.0.1 + resolution: "@stablelib/int@npm:1.0.1" + checksum: 65bfbf50a382eea70c68e05366bf379cfceff8fbc076f1c267ef2f2411d7aed64fd140c415cb6c29f19a3910d3b8b7805d4b32ad5721a5007a8e744a808c7ae3 languageName: node linkType: hard -"@esbuild/linux-ppc64@npm:0.18.20": - version: 0.18.20 - resolution: "@esbuild/linux-ppc64@npm:0.18.20" - conditions: os=linux & cpu=ppc64 +"@stablelib/keyagreement@npm:^1.0.1": + version: 1.0.1 + resolution: "@stablelib/keyagreement@npm:1.0.1" + dependencies: + "@stablelib/bytes": ^1.0.1 + checksum: 3c8ec904dd50f72f3162f5447a0fa8f1d9ca6e24cd272d3dbe84971267f3b47f9bd5dc4e4eeedf3fbac2fe01f2d9277053e57c8e60db8c5544bfb35c62d290dd languageName: node linkType: hard -"@esbuild/linux-riscv64@npm:0.16.3": - version: 0.16.3 - resolution: "@esbuild/linux-riscv64@npm:0.16.3" - conditions: os=linux & cpu=riscv64 +"@stablelib/poly1305@npm:^1.0.1": + version: 1.0.1 + resolution: "@stablelib/poly1305@npm:1.0.1" + dependencies: + "@stablelib/constant-time": ^1.0.1 + "@stablelib/wipe": ^1.0.1 + checksum: 70b845bb0481c66b7ba3f3865d01e4c67a4dffc9616fc6de1d23efc5e828ec09de25f8e3be4e1f15a23b8e87e3036ee3d949c2fd4785047e6f7028bbec0ead18 languageName: node linkType: hard -"@esbuild/linux-riscv64@npm:0.17.6": - version: 0.17.6 - resolution: "@esbuild/linux-riscv64@npm:0.17.6" - conditions: os=linux & cpu=riscv64 +"@stablelib/random@npm:^1.0.1, @stablelib/random@npm:^1.0.2": + version: 1.0.2 + resolution: "@stablelib/random@npm:1.0.2" + dependencies: + "@stablelib/binary": ^1.0.1 + "@stablelib/wipe": ^1.0.1 + checksum: f5ace0a588dc4c21f01cb85837892d4c872e994ae77a58a8eb7dd61aa0b26fb1e9b46b0445e71af57d963ef7d9f5965c64258fc0d04df7b2947bc48f2d3560c5 languageName: node linkType: hard -"@esbuild/linux-riscv64@npm:0.18.20": - version: 0.18.20 - resolution: "@esbuild/linux-riscv64@npm:0.18.20" - conditions: os=linux & cpu=riscv64 +"@stablelib/sha256@npm:1.0.1": + version: 1.0.1 + resolution: "@stablelib/sha256@npm:1.0.1" + dependencies: + "@stablelib/binary": ^1.0.1 + "@stablelib/hash": ^1.0.1 + "@stablelib/wipe": ^1.0.1 + checksum: 38669871e1bda72eb537629ebceac1c72da8890273a9fbe088f81f6d14c1ec04e78be8c5b455380a06c67f8e62b2508e11e9063fcc257dbaa1b5c27ac756ba77 languageName: node linkType: hard -"@esbuild/linux-s390x@npm:0.16.3": - version: 0.16.3 - resolution: "@esbuild/linux-s390x@npm:0.16.3" - conditions: os=linux & cpu=s390x +"@stablelib/sha512@npm:^1.0.1": + version: 1.0.1 + resolution: "@stablelib/sha512@npm:1.0.1" + dependencies: + "@stablelib/binary": ^1.0.1 + "@stablelib/hash": ^1.0.1 + "@stablelib/wipe": ^1.0.1 + checksum: b7c82f7608a35948a2147a534c0c9afc80deab3fd5f72a2e27b2454e7c0c6944d39381be3abcb1b7fac5b824ba030ae3e98209d517a579c143d8ed63930b042f languageName: node linkType: hard -"@esbuild/linux-s390x@npm:0.17.6": - version: 0.17.6 - resolution: "@esbuild/linux-s390x@npm:0.17.6" - conditions: os=linux & cpu=s390x +"@stablelib/wipe@npm:^1.0.1": + version: 1.0.1 + resolution: "@stablelib/wipe@npm:1.0.1" + checksum: 287802eb146810a46ba72af70b82022caf83a8aeebde23605f5ee0decf64fe2b97a60c856e43b6617b5801287c30cfa863cfb0469e7fcde6f02d143cf0c6cbf4 languageName: node linkType: hard -"@esbuild/linux-s390x@npm:0.18.20": - version: 0.18.20 - resolution: "@esbuild/linux-s390x@npm:0.18.20" - conditions: os=linux & cpu=s390x +"@stablelib/x25519@npm:^1.0.3": + version: 1.0.3 + resolution: "@stablelib/x25519@npm:1.0.3" + dependencies: + "@stablelib/keyagreement": ^1.0.1 + "@stablelib/random": ^1.0.2 + "@stablelib/wipe": ^1.0.1 + checksum: f8537066b542b6770c1b5b2ae5ad0688d1b986e4bf818067c152c123a5471531987bbf024224f75f387f481ccc5b628e391e49e92102b8b1a3e2d449d6105402 languageName: node linkType: hard -"@esbuild/linux-x64@npm:0.16.3": - version: 0.16.3 - resolution: "@esbuild/linux-x64@npm:0.16.3" - conditions: os=linux & cpu=x64 +"@swc/helpers@npm:0.5.2": + version: 0.5.2 + resolution: "@swc/helpers@npm:0.5.2" + dependencies: + tslib: ^2.4.0 + checksum: 51d7e3d8bd56818c49d6bfbd715f0dbeedc13cf723af41166e45c03e37f109336bbcb57a1f2020f4015957721aeb21e1a7fff281233d797ff7d3dd1f447fa258 languageName: node linkType: hard -"@esbuild/linux-x64@npm:0.17.6": - version: 0.17.6 - resolution: "@esbuild/linux-x64@npm:0.17.6" - conditions: os=linux & cpu=x64 +"@tanstack/query-core@npm:4.36.1": + version: 4.36.1 + resolution: "@tanstack/query-core@npm:4.36.1" + checksum: 47672094da20d89402d9fe03bb7b0462be73a76ff9ca715169738bc600a719d064d106d083a8eedae22a2c22de22f87d5eb5d31ef447aba771d9190f2117ed10 languageName: node linkType: hard -"@esbuild/linux-x64@npm:0.18.20": - version: 0.18.20 - resolution: "@esbuild/linux-x64@npm:0.18.20" - conditions: os=linux & cpu=x64 +"@tanstack/query-persist-client-core@npm:4.36.1": + version: 4.36.1 + resolution: "@tanstack/query-persist-client-core@npm:4.36.1" + dependencies: + "@tanstack/query-core": 4.36.1 + checksum: f67eab79cb6d9581716d1532c490d00452d8e2c5438874599fdd2d8d930445137ed9afa8199a569452bf3d5ec581c223750d5777b63b65cbc1baf5bdf6fe3322 languageName: node linkType: hard -"@esbuild/netbsd-x64@npm:0.16.3": - version: 0.16.3 - resolution: "@esbuild/netbsd-x64@npm:0.16.3" - conditions: os=netbsd & cpu=x64 +"@tanstack/query-sync-storage-persister@npm:^4.27.1": + version: 4.36.1 + resolution: "@tanstack/query-sync-storage-persister@npm:4.36.1" + dependencies: + "@tanstack/query-persist-client-core": 4.36.1 + checksum: 461467ab13b0434dd4647c1ea8969ed06db6dabf77e3a68d978bbeb78d3d491b242fb7cd13bd37512f787e6ef891113ce208fad6355fa7eb49987c6942ca196b languageName: node linkType: hard -"@esbuild/netbsd-x64@npm:0.17.6": - version: 0.17.6 - resolution: "@esbuild/netbsd-x64@npm:0.17.6" - conditions: os=netbsd & cpu=x64 +"@tanstack/react-query-persist-client@npm:^4.28.0": + version: 4.36.1 + resolution: "@tanstack/react-query-persist-client@npm:4.36.1" + dependencies: + "@tanstack/query-persist-client-core": 4.36.1 + peerDependencies: + "@tanstack/react-query": ^4.36.1 + checksum: d938449bd8395da0c6ff69c83218c7efe63832f4e588b75f4f0c4f4db8c20194cb1507a1d5d8dd76b193545df3d3c0d5a409c117cc5306847fc02df3d2d16d45 languageName: node linkType: hard -"@esbuild/netbsd-x64@npm:0.18.20": - version: 0.18.20 - resolution: "@esbuild/netbsd-x64@npm:0.18.20" - conditions: os=netbsd & cpu=x64 +"@tanstack/react-query@npm:^4.28.0": + version: 4.36.1 + resolution: "@tanstack/react-query@npm:4.36.1" + dependencies: + "@tanstack/query-core": 4.36.1 + use-sync-external-store: ^1.2.0 + peerDependencies: + react: ^16.8.0 || ^17.0.0 || ^18.0.0 + react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 + react-native: "*" + peerDependenciesMeta: + react-dom: + optional: true + react-native: + optional: true + checksum: 1aff0a476859386f8d32253fa0d0bde7b81769a6d4d4d9cbd78778f0f955459a3bdb7ee27a0d2ee7373090f12998b45df80db0b5b313bd0a7a39d36c6e8e51c5 languageName: node linkType: hard -"@esbuild/openbsd-x64@npm:0.16.3": - version: 0.16.3 - resolution: "@esbuild/openbsd-x64@npm:0.16.3" - conditions: os=openbsd & cpu=x64 +"@tootallnate/once@npm:2.0.0": + version: 2.0.0 + resolution: "@tootallnate/once@npm:2.0.0" + checksum: ad87447820dd3f24825d2d947ebc03072b20a42bfc96cbafec16bff8bbda6c1a81fcb0be56d5b21968560c5359a0af4038a68ba150c3e1694fe4c109a063bed8 languageName: node linkType: hard -"@esbuild/openbsd-x64@npm:0.17.6": - version: 0.17.6 - resolution: "@esbuild/openbsd-x64@npm:0.17.6" - conditions: os=openbsd & cpu=x64 +"@trivago/prettier-plugin-sort-imports@npm:~4.1.1": + version: 4.1.1 + resolution: "@trivago/prettier-plugin-sort-imports@npm:4.1.1" + dependencies: + "@babel/generator": 7.17.7 + "@babel/parser": ^7.20.5 + "@babel/traverse": 7.17.3 + "@babel/types": 7.17.0 + javascript-natural-sort: 0.7.1 + lodash: ^4.17.21 + peerDependencies: + "@vue/compiler-sfc": 3.x + prettier: 2.x + peerDependenciesMeta: + "@vue/compiler-sfc": + optional: true + checksum: 09b4c3c3f4a9e7883737acf92ae7f2a59eb3f7a6f104621a883bdb2a962dcf98398891489267a6fdbba1227a3484676f8d7470e1b3bc6422b4f457382fd030ce languageName: node linkType: hard -"@esbuild/openbsd-x64@npm:0.18.20": - version: 0.18.20 - resolution: "@esbuild/openbsd-x64@npm:0.18.20" - conditions: os=openbsd & cpu=x64 +"@ts-morph/common@npm:~0.11.0": + version: 0.11.1 + resolution: "@ts-morph/common@npm:0.11.1" + dependencies: + fast-glob: ^3.2.7 + minimatch: ^3.0.4 + mkdirp: ^1.0.4 + path-browserify: ^1.0.1 + checksum: 2853215cfdfb9b65f96ceef91b15a73ab6591fd27d072801884ea5acc1a8f0becd5ac214d5f3d840f5d650b7654585a9b9df86fc4287872e7be1c6f566381bfd languageName: node linkType: hard -"@esbuild/sunos-x64@npm:0.16.3": - version: 0.16.3 - resolution: "@esbuild/sunos-x64@npm:0.16.3" - conditions: os=sunos & cpu=x64 +"@tsconfig/node10@npm:^1.0.7": + version: 1.0.9 + resolution: "@tsconfig/node10@npm:1.0.9" + checksum: a33ae4dc2a621c0678ac8ac4bceb8e512ae75dac65417a2ad9b022d9b5411e863c4c198b6ba9ef659e14b9fb609bbec680841a2e84c1172df7a5ffcf076539df languageName: node linkType: hard -"@esbuild/sunos-x64@npm:0.17.6": - version: 0.17.6 - resolution: "@esbuild/sunos-x64@npm:0.17.6" - conditions: os=sunos & cpu=x64 +"@tsconfig/node12@npm:^1.0.7": + version: 1.0.11 + resolution: "@tsconfig/node12@npm:1.0.11" + checksum: 5ce29a41b13e7897a58b8e2df11269c5395999e588b9a467386f99d1d26f6c77d1af2719e407621412520ea30517d718d5192a32403b8dfcc163bf33e40a338a languageName: node linkType: hard -"@esbuild/sunos-x64@npm:0.18.20": - version: 0.18.20 - resolution: "@esbuild/sunos-x64@npm:0.18.20" - conditions: os=sunos & cpu=x64 +"@tsconfig/node14@npm:^1.0.0": + version: 1.0.3 + resolution: "@tsconfig/node14@npm:1.0.3" + checksum: 19275fe80c4c8d0ad0abed6a96dbf00642e88b220b090418609c4376e1cef81bf16237bf170ad1b341452feddb8115d8dd2e5acdfdea1b27422071163dc9ba9d languageName: node linkType: hard -"@esbuild/win32-arm64@npm:0.16.3": - version: 0.16.3 - resolution: "@esbuild/win32-arm64@npm:0.16.3" - conditions: os=win32 & cpu=arm64 +"@tsconfig/node16@npm:^1.0.2": + version: 1.0.4 + resolution: "@tsconfig/node16@npm:1.0.4" + checksum: 202319785901f942a6e1e476b872d421baec20cf09f4b266a1854060efbf78cde16a4d256e8bc949d31e6cd9a90f1e8ef8fb06af96a65e98338a2b6b0de0a0ff languageName: node linkType: hard -"@esbuild/win32-arm64@npm:0.17.6": - version: 0.17.6 - resolution: "@esbuild/win32-arm64@npm:0.17.6" - conditions: os=win32 & cpu=arm64 +"@types/debug@npm:^4.1.7": + version: 4.1.12 + resolution: "@types/debug@npm:4.1.12" + dependencies: + "@types/ms": "*" + checksum: 47876a852de8240bfdaf7481357af2b88cb660d30c72e73789abf00c499d6bc7cd5e52f41c915d1b9cd8ec9fef5b05688d7b7aef17f7f272c2d04679508d1053 languageName: node linkType: hard -"@esbuild/win32-arm64@npm:0.18.20": - version: 0.18.20 - resolution: "@esbuild/win32-arm64@npm:0.18.20" - conditions: os=win32 & cpu=arm64 +"@types/json-schema@npm:^7.0.6, @types/json-schema@npm:^7.0.9": + version: 7.0.15 + resolution: "@types/json-schema@npm:7.0.15" + checksum: 97ed0cb44d4070aecea772b7b2e2ed971e10c81ec87dd4ecc160322ffa55ff330dace1793489540e3e318d90942064bb697cc0f8989391797792d919737b3b98 languageName: node linkType: hard -"@esbuild/win32-ia32@npm:0.16.3": - version: 0.16.3 - resolution: "@esbuild/win32-ia32@npm:0.16.3" - conditions: os=win32 & cpu=ia32 +"@types/json5@npm:^0.0.29": + version: 0.0.29 + resolution: "@types/json5@npm:0.0.29" + checksum: e60b153664572116dfea673c5bda7778dbff150498f44f998e34b5886d8afc47f16799280e4b6e241c0472aef1bc36add771c569c68fc5125fc2ae519a3eb9ac languageName: node linkType: hard -"@esbuild/win32-ia32@npm:0.17.6": - version: 0.17.6 - resolution: "@esbuild/win32-ia32@npm:0.17.6" - conditions: os=win32 & cpu=ia32 +"@types/ms@npm:*": + version: 0.7.34 + resolution: "@types/ms@npm:0.7.34" + checksum: f38d36e7b6edecd9badc9cf50474159e9da5fa6965a75186cceaf883278611b9df6669dc3a3cc122b7938d317b68a9e3d573d316fcb35d1be47ec9e468c6bd8a languageName: node linkType: hard -"@esbuild/win32-ia32@npm:0.18.20": - version: 0.18.20 - resolution: "@esbuild/win32-ia32@npm:0.18.20" - conditions: os=win32 & cpu=ia32 +"@types/node@npm:*": + version: 20.11.14 + resolution: "@types/node@npm:20.11.14" + dependencies: + undici-types: ~5.26.4 + checksum: 656644db447386dbefb97e76861f1f69e32995196503f6e215261ef2fd92f065c15b60f506c5e930c33a5c3a0d9513e0a93eb319c146b38ec2d5f9bde45b8886 languageName: node linkType: hard -"@esbuild/win32-x64@npm:0.16.3": - version: 0.16.3 - resolution: "@esbuild/win32-x64@npm:0.16.3" - conditions: os=win32 & cpu=x64 +"@types/node@npm:14.18.33": + version: 14.18.33 + resolution: "@types/node@npm:14.18.33" + checksum: 4e23f95186d8ae1d38c999bc6b46fe94e790da88744b0a3bfeedcbd0d9ffe2cb0ff39e85f43014f6739e5270292c1a1f6f97a1fc606fd573a0c17fda9a1d42de languageName: node linkType: hard -"@esbuild/win32-x64@npm:0.17.6": - version: 0.17.6 - resolution: "@esbuild/win32-x64@npm:0.17.6" - conditions: os=win32 & cpu=x64 +"@types/node@npm:^17.0.45": + version: 17.0.45 + resolution: "@types/node@npm:17.0.45" + checksum: aa04366b9103b7d6cfd6b2ef64182e0eaa7d4462c3f817618486ea0422984c51fc69fd0d436eae6c9e696ddfdbec9ccaa27a917f7c2e8c75c5d57827fe3d95e8 languageName: node linkType: hard -"@esbuild/win32-x64@npm:0.18.20": - version: 0.18.20 - resolution: "@esbuild/win32-x64@npm:0.18.20" - conditions: os=win32 & cpu=x64 +"@types/nprogress@npm:^0": + version: 0.2.3 + resolution: "@types/nprogress@npm:0.2.3" + checksum: 2bd96ba1167f548e8f898ae8a790b6501a5422217621c9b8ea75962f3e8473f0e371058b79d83e04e80a6bfee2d66fc6612cdb28296648007b35d3c2a6d64e5c languageName: node linkType: hard -"@eslint/eslintrc@npm:^1.3.2": - version: 1.4.1 - resolution: "@eslint/eslintrc@npm:1.4.1" - dependencies: - ajv: ^6.12.4 - debug: ^4.3.2 - espree: ^9.4.0 - globals: ^13.19.0 - ignore: ^5.2.0 - import-fresh: ^3.2.1 - js-yaml: ^4.1.0 - minimatch: ^3.1.2 - strip-json-comments: ^3.1.1 - checksum: cd3e5a8683db604739938b1c1c8b77927dc04fce3e28e0c88e7f2cd4900b89466baf83dfbad76b2b9e4d2746abdd00dd3f9da544d3e311633d8693f327d04cd7 +"@types/prettier@npm:2": + version: 2.7.3 + resolution: "@types/prettier@npm:2.7.3" + checksum: 705384209cea6d1433ff6c187c80dcc0b95d99d5c5ce21a46a9a58060c527973506822e428789d842761e0280d25e3359300f017fbe77b9755bc772ab3dc2f83 languageName: node linkType: hard -"@ethersproject/abi@npm:5.7.0, @ethersproject/abi@npm:^5.7.0": - version: 5.7.0 - resolution: "@ethersproject/abi@npm:5.7.0" - dependencies: - "@ethersproject/address": ^5.7.0 - "@ethersproject/bignumber": ^5.7.0 - "@ethersproject/bytes": ^5.7.0 - "@ethersproject/constants": ^5.7.0 - "@ethersproject/hash": ^5.7.0 - "@ethersproject/keccak256": ^5.7.0 - "@ethersproject/logger": ^5.7.0 - "@ethersproject/properties": ^5.7.0 - "@ethersproject/strings": ^5.7.0 - checksum: bc6962bb6cb854e4d2a4d65b2c49c716477675b131b1363312234bdbb7e19badb7d9ce66f4ca2a70ae2ea84f7123dbc4e300a1bfe5d58864a7eafabc1466627e +"@types/prop-types@npm:*": + version: 15.7.11 + resolution: "@types/prop-types@npm:15.7.11" + checksum: 7519ff11d06fbf6b275029fe03fff9ec377b4cb6e864cac34d87d7146c7f5a7560fd164bdc1d2dbe00b60c43713631251af1fd3d34d46c69cd354602bc0c7c54 languageName: node linkType: hard -"@ethersproject/abstract-provider@npm:5.7.0, @ethersproject/abstract-provider@npm:^5.7.0": - version: 5.7.0 - resolution: "@ethersproject/abstract-provider@npm:5.7.0" +"@types/qrcode@npm:1": + version: 1.5.5 + resolution: "@types/qrcode@npm:1.5.5" dependencies: - "@ethersproject/bignumber": ^5.7.0 - "@ethersproject/bytes": ^5.7.0 - "@ethersproject/logger": ^5.7.0 - "@ethersproject/networks": ^5.7.0 - "@ethersproject/properties": ^5.7.0 - "@ethersproject/transactions": ^5.7.0 - "@ethersproject/web": ^5.7.0 - checksum: 74cf4696245cf03bb7cc5b6cbf7b4b89dd9a79a1c4688126d214153a938126d4972d42c93182198653ce1de35f2a2cad68be40337d4774b3698a39b28f0228a8 + "@types/node": "*" + checksum: d92c1d3e77406bf13a03ec521b2ffb1ac99b2e6ea3a17cad670f2610f62e1293554c57e4074bb2fd4e9369f475f863b69e0ae8c543cb049c4a3c1b0c2d92522a languageName: node linkType: hard -"@ethersproject/abstract-signer@npm:5.7.0, @ethersproject/abstract-signer@npm:^5.7.0": - version: 5.7.0 - resolution: "@ethersproject/abstract-signer@npm:5.7.0" +"@types/react-copy-to-clipboard@npm:^5.0.4": + version: 5.0.7 + resolution: "@types/react-copy-to-clipboard@npm:5.0.7" dependencies: - "@ethersproject/abstract-provider": ^5.7.0 - "@ethersproject/bignumber": ^5.7.0 - "@ethersproject/bytes": ^5.7.0 - "@ethersproject/logger": ^5.7.0 - "@ethersproject/properties": ^5.7.0 - checksum: a823dac9cfb761e009851050ebebd5b229d1b1cc4a75b125c2da130ff37e8218208f7f9d1386f77407705b889b23d4a230ad67185f8872f083143e0073cbfbe3 + "@types/react": "*" + checksum: adc2970c8756e648daa06e294c422df3dc076a784344ab2ecb78a17ebd7e8e3dfd7f31e68c24267de4815cdeec573a743d952a308b45b8380f6b7912a9a8b911 languageName: node linkType: hard -"@ethersproject/address@npm:5.7.0, @ethersproject/address@npm:^5.0.0, @ethersproject/address@npm:^5.0.2, @ethersproject/address@npm:^5.7.0": - version: 5.7.0 - resolution: "@ethersproject/address@npm:5.7.0" +"@types/react@npm:*, @types/react@npm:^18.0.21": + version: 18.2.49 + resolution: "@types/react@npm:18.2.49" dependencies: - "@ethersproject/bignumber": ^5.7.0 - "@ethersproject/bytes": ^5.7.0 - "@ethersproject/keccak256": ^5.7.0 - "@ethersproject/logger": ^5.7.0 - "@ethersproject/rlp": ^5.7.0 - checksum: 64ea5ebea9cc0e845c413e6cb1e54e157dd9fc0dffb98e239d3a3efc8177f2ff798cd4e3206cf3660ee8faeb7bef1a47dc0ebef0d7b132c32e61e550c7d4c843 + "@types/prop-types": "*" + "@types/scheduler": "*" + csstype: ^3.0.2 + checksum: cc0b0e3bd6a72099dce2f89550f7b4a8f768c3a700db7bb87c3fbc622e2a2ccdcb9fe86dab4ca53e2d68057d6d6c57cd24b8fa17f8a73eedb938c5b81d512911 languageName: node linkType: hard -"@ethersproject/base64@npm:5.7.0, @ethersproject/base64@npm:^5.7.0": - version: 5.7.0 - resolution: "@ethersproject/base64@npm:5.7.0" - dependencies: - "@ethersproject/bytes": ^5.7.0 - checksum: 7dd5d734d623582f08f665434f53685041a3d3b334a0e96c0c8afa8bbcaab934d50e5b6b980e826a8fde8d353e0b18f11e61faf17468177274b8e7c69cd9742b +"@types/scheduler@npm:*": + version: 0.16.8 + resolution: "@types/scheduler@npm:0.16.8" + checksum: 6c091b096daa490093bf30dd7947cd28e5b2cd612ec93448432b33f724b162587fed9309a0acc104d97b69b1d49a0f3fc755a62282054d62975d53d7fd13472d languageName: node linkType: hard -"@ethersproject/basex@npm:5.7.0, @ethersproject/basex@npm:^5.7.0": - version: 5.7.0 - resolution: "@ethersproject/basex@npm:5.7.0" - dependencies: - "@ethersproject/bytes": ^5.7.0 - "@ethersproject/properties": ^5.7.0 - checksum: 326087b7e1f3787b5fe6cd1cf2b4b5abfafbc355a45e88e22e5e9d6c845b613ffc5301d629b28d5c4d5e2bfe9ec424e6782c804956dff79be05f0098cb5817de +"@types/semver@npm:^7.3.12": + version: 7.5.6 + resolution: "@types/semver@npm:7.5.6" + checksum: 563a0120ec0efcc326567db2ed920d5d98346f3638b6324ea6b50222b96f02a8add3c51a916b6897b51523aad8ac227d21d3dcf8913559f1bfc6c15b14d23037 languageName: node linkType: hard -"@ethersproject/bignumber@npm:5.7.0, @ethersproject/bignumber@npm:^5.7.0": - version: 5.7.0 - resolution: "@ethersproject/bignumber@npm:5.7.0" - dependencies: - "@ethersproject/bytes": ^5.7.0 - "@ethersproject/logger": ^5.7.0 - bn.js: ^5.2.1 - checksum: 8c9a134b76f3feb4ec26a5a27379efb4e156b8fb2de0678a67788a91c7f4e30abe9d948638458e4b20f2e42380da0adacc7c9389d05fce070692edc6ae9b4904 +"@types/trusted-types@npm:^2.0.2": + version: 2.0.7 + resolution: "@types/trusted-types@npm:2.0.7" + checksum: 8e4202766a65877efcf5d5a41b7dd458480b36195e580a3b1085ad21e948bc417d55d6f8af1fd2a7ad008015d4117d5fdfe432731157da3c68678487174e4ba3 languageName: node linkType: hard -"@ethersproject/bytes@npm:5.7.0, @ethersproject/bytes@npm:^5.7.0": - version: 5.7.0 - resolution: "@ethersproject/bytes@npm:5.7.0" +"@typescript-eslint/eslint-plugin@npm:~5.40.0": + version: 5.40.1 + resolution: "@typescript-eslint/eslint-plugin@npm:5.40.1" dependencies: - "@ethersproject/logger": ^5.7.0 - checksum: 66ad365ceaab5da1b23b72225c71dce472cf37737af5118181fa8ab7447d696bea15ca22e3a0e8836fdd8cfac161afe321a7c67d0dde96f9f645ddd759676621 + "@typescript-eslint/scope-manager": 5.40.1 + "@typescript-eslint/type-utils": 5.40.1 + "@typescript-eslint/utils": 5.40.1 + debug: ^4.3.4 + ignore: ^5.2.0 + regexpp: ^3.2.0 + semver: ^7.3.7 + tsutils: ^3.21.0 + peerDependencies: + "@typescript-eslint/parser": ^5.0.0 + eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 + peerDependenciesMeta: + typescript: + optional: true + checksum: 61f19bde0f1206beb20aeb28d18c1ef26a98cf4d2ead9f1d2f204cb91af31582eb5ee9422fe5f92d6aa10cebf85cd50f1b41e8cf8ce65808e2208664c3b1d66a languageName: node linkType: hard -"@ethersproject/constants@npm:5.7.0, @ethersproject/constants@npm:^5.7.0": - version: 5.7.0 - resolution: "@ethersproject/constants@npm:5.7.0" +"@typescript-eslint/parser@npm:^5.4.2 || ^6.0.0": + version: 6.20.0 + resolution: "@typescript-eslint/parser@npm:6.20.0" dependencies: - "@ethersproject/bignumber": ^5.7.0 - checksum: 6d4b1355747cce837b3e76ec3bde70e4732736f23b04f196f706ebfa5d4d9c2be50904a390d4d40ce77803b98d03d16a9b6898418e04ba63491933ce08c4ba8a + "@typescript-eslint/scope-manager": 6.20.0 + "@typescript-eslint/types": 6.20.0 + "@typescript-eslint/typescript-estree": 6.20.0 + "@typescript-eslint/visitor-keys": 6.20.0 + debug: ^4.3.4 + peerDependencies: + eslint: ^7.0.0 || ^8.0.0 + peerDependenciesMeta: + typescript: + optional: true + checksum: 91c0a715e7a37a0386770b0c4c208d0732736828294a3f58901655f0edf9230d1211dbfb8ac0ea562993506130773131fc1ee241311f43d78007af959bd46b9a languageName: node linkType: hard -"@ethersproject/contracts@npm:5.7.0": - version: 5.7.0 - resolution: "@ethersproject/contracts@npm:5.7.0" +"@typescript-eslint/scope-manager@npm:5.40.1": + version: 5.40.1 + resolution: "@typescript-eslint/scope-manager@npm:5.40.1" dependencies: - "@ethersproject/abi": ^5.7.0 - "@ethersproject/abstract-provider": ^5.7.0 - "@ethersproject/abstract-signer": ^5.7.0 - "@ethersproject/address": ^5.7.0 - "@ethersproject/bignumber": ^5.7.0 - "@ethersproject/bytes": ^5.7.0 - "@ethersproject/constants": ^5.7.0 - "@ethersproject/logger": ^5.7.0 - "@ethersproject/properties": ^5.7.0 - "@ethersproject/transactions": ^5.7.0 - checksum: 6ccf1121cba01b31e02f8c507cb971ab6bfed85706484a9ec09878ef1594a62215f43c4fdef8f4a4875b99c4a800bc95e3be69b1803f8ce479e07634b5a740c0 + "@typescript-eslint/types": 5.40.1 + "@typescript-eslint/visitor-keys": 5.40.1 + checksum: 5f25b86bfd09fbf8cdfdf932eaf0b41a7594c9b4539d3c8321f882bf7b4bf486454256fdb9a5a8c4eae305419d377fa93d382f80004711d759ff77b3d565c1dc languageName: node linkType: hard -"@ethersproject/hash@npm:5.7.0, @ethersproject/hash@npm:^5.7.0": - version: 5.7.0 - resolution: "@ethersproject/hash@npm:5.7.0" +"@typescript-eslint/scope-manager@npm:6.20.0": + version: 6.20.0 + resolution: "@typescript-eslint/scope-manager@npm:6.20.0" dependencies: - "@ethersproject/abstract-signer": ^5.7.0 - "@ethersproject/address": ^5.7.0 - "@ethersproject/base64": ^5.7.0 - "@ethersproject/bignumber": ^5.7.0 - "@ethersproject/bytes": ^5.7.0 - "@ethersproject/keccak256": ^5.7.0 - "@ethersproject/logger": ^5.7.0 - "@ethersproject/properties": ^5.7.0 - "@ethersproject/strings": ^5.7.0 - checksum: 6e9fa8d14eb08171cd32f17f98cc108ec2aeca74a427655f0d689c550fee0b22a83b3b400fad7fb3f41cf14d4111f87f170aa7905bcbcd1173a55f21b06262ef + "@typescript-eslint/types": 6.20.0 + "@typescript-eslint/visitor-keys": 6.20.0 + checksum: 54a06c485d4be6ac95b283fe2e29c2cd8a9a0b159d0f38e5f670dd2e1265358e2ad7b4442a0c61870430b38a6d0bf640843caaaf4c7f122523455221bbb3b011 languageName: node linkType: hard -"@ethersproject/hdnode@npm:5.7.0, @ethersproject/hdnode@npm:^5.7.0": - version: 5.7.0 - resolution: "@ethersproject/hdnode@npm:5.7.0" +"@typescript-eslint/type-utils@npm:5.40.1": + version: 5.40.1 + resolution: "@typescript-eslint/type-utils@npm:5.40.1" dependencies: - "@ethersproject/abstract-signer": ^5.7.0 - "@ethersproject/basex": ^5.7.0 - "@ethersproject/bignumber": ^5.7.0 - "@ethersproject/bytes": ^5.7.0 - "@ethersproject/logger": ^5.7.0 - "@ethersproject/pbkdf2": ^5.7.0 - "@ethersproject/properties": ^5.7.0 - "@ethersproject/sha2": ^5.7.0 - "@ethersproject/signing-key": ^5.7.0 - "@ethersproject/strings": ^5.7.0 - "@ethersproject/transactions": ^5.7.0 - "@ethersproject/wordlists": ^5.7.0 - checksum: bfe5ca2d89a42de73655f853170ef4766b933c5f481cddad709b3aca18823275b096e572f92d1602a052f80b426edde44ad6b9d028799775a7dad4a5bbed2133 + "@typescript-eslint/typescript-estree": 5.40.1 + "@typescript-eslint/utils": 5.40.1 + debug: ^4.3.4 + tsutils: ^3.21.0 + peerDependencies: + eslint: "*" + peerDependenciesMeta: + typescript: + optional: true + checksum: 6771196b8f16f4893bae70aa1371ff004b0058e8edef9b935143e2f1272e471049e9c34beb1d625fb6423db95dd377e01e938b70dd4506fbf071566e2bfb574d languageName: node linkType: hard -"@ethersproject/json-wallets@npm:5.7.0, @ethersproject/json-wallets@npm:^5.7.0": - version: 5.7.0 - resolution: "@ethersproject/json-wallets@npm:5.7.0" +"@typescript-eslint/types@npm:5.40.1": + version: 5.40.1 + resolution: "@typescript-eslint/types@npm:5.40.1" + checksum: 2430c799667c820903df7ef39bc4c2762cb7654dbb8525d56f37e73f8cefb82186b80654dbbe0294c5b55affe929c641cdb90232e2749dcd7838f9e500a41549 + languageName: node + linkType: hard + +"@typescript-eslint/types@npm:6.20.0": + version: 6.20.0 + resolution: "@typescript-eslint/types@npm:6.20.0" + checksum: a4551ce9ce40119c2401a70d5a0f9fd16eec4771d076933983fd5fd4a42c0d9a1ac883dfa7640ddec0459057005d4ef4fd19d681b14b8cef89b094283a117f5f + languageName: node + linkType: hard + +"@typescript-eslint/typescript-estree@npm:5.40.1": + version: 5.40.1 + resolution: "@typescript-eslint/typescript-estree@npm:5.40.1" dependencies: - "@ethersproject/abstract-signer": ^5.7.0 - "@ethersproject/address": ^5.7.0 - "@ethersproject/bytes": ^5.7.0 - "@ethersproject/hdnode": ^5.7.0 - "@ethersproject/keccak256": ^5.7.0 - "@ethersproject/logger": ^5.7.0 - "@ethersproject/pbkdf2": ^5.7.0 - "@ethersproject/properties": ^5.7.0 - "@ethersproject/random": ^5.7.0 - "@ethersproject/strings": ^5.7.0 - "@ethersproject/transactions": ^5.7.0 - aes-js: 3.0.0 - scrypt-js: 3.0.1 - checksum: f583458d22db62efaaf94d38dd243482776a45bf90f9f3882fbad5aa0b8fd288b41eb7c1ff8ec0b99c9b751088e43d6173530db64dd33c59f9d8daa8d7ad5aa2 + "@typescript-eslint/types": 5.40.1 + "@typescript-eslint/visitor-keys": 5.40.1 + debug: ^4.3.4 + globby: ^11.1.0 + is-glob: ^4.0.3 + semver: ^7.3.7 + tsutils: ^3.21.0 + peerDependenciesMeta: + typescript: + optional: true + checksum: d0426a55d24b76a3f042816dd8baaaa7a8da0158870bb08fff5a5524821c13ca196117dc269f098b8887ef75e01da1a498637153ab3c29c370ca356bfe4a1716 languageName: node linkType: hard -"@ethersproject/keccak256@npm:5.7.0, @ethersproject/keccak256@npm:^5.7.0": - version: 5.7.0 - resolution: "@ethersproject/keccak256@npm:5.7.0" +"@typescript-eslint/typescript-estree@npm:6.20.0": + version: 6.20.0 + resolution: "@typescript-eslint/typescript-estree@npm:6.20.0" dependencies: - "@ethersproject/bytes": ^5.7.0 - js-sha3: 0.8.0 - checksum: ff70950d82203aab29ccda2553422cbac2e7a0c15c986bd20a69b13606ed8bb6e4fdd7b67b8d3b27d4f841e8222cbaccd33ed34be29f866fec7308f96ed244c6 + "@typescript-eslint/types": 6.20.0 + "@typescript-eslint/visitor-keys": 6.20.0 + debug: ^4.3.4 + globby: ^11.1.0 + is-glob: ^4.0.3 + minimatch: 9.0.3 + semver: ^7.5.4 + ts-api-utils: ^1.0.1 + peerDependenciesMeta: + typescript: + optional: true + checksum: 256cdeae8c9c365f23ab1cefb29b9bc20451fc7b879651f47fd388e13976b62ecd0da56bf5b7a5d7050de1160b0e05fc841c4e5b0e91d8b03728a52d76e8caf9 languageName: node linkType: hard -"@ethersproject/logger@npm:5.7.0, @ethersproject/logger@npm:^5.7.0": - version: 5.7.0 - resolution: "@ethersproject/logger@npm:5.7.0" - checksum: 075ab2f605f1fd0813f2e39c3308f77b44a67732b36e712d9bc085f22a84aac4da4f71b39bee50fe78da3e1c812673fadc41180c9970fe5e486e91ea17befe0d +"@typescript-eslint/utils@npm:5.40.1": + version: 5.40.1 + resolution: "@typescript-eslint/utils@npm:5.40.1" + dependencies: + "@types/json-schema": ^7.0.9 + "@types/semver": ^7.3.12 + "@typescript-eslint/scope-manager": 5.40.1 + "@typescript-eslint/types": 5.40.1 + "@typescript-eslint/typescript-estree": 5.40.1 + eslint-scope: ^5.1.1 + eslint-utils: ^3.0.0 + semver: ^7.3.7 + peerDependencies: + eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 + checksum: a971101bb2f4c742a1734a87e17997addb7ffa6639d472097fe098f6c5f09567b858949b97f05892aabb20f38479abecdfdd69cf740046aa601dd3fc39a44090 languageName: node linkType: hard -"@ethersproject/networks@npm:5.7.1, @ethersproject/networks@npm:^5.7.0": - version: 5.7.1 - resolution: "@ethersproject/networks@npm:5.7.1" +"@typescript-eslint/visitor-keys@npm:5.40.1": + version: 5.40.1 + resolution: "@typescript-eslint/visitor-keys@npm:5.40.1" dependencies: - "@ethersproject/logger": ^5.7.0 - checksum: 0339f312304c17d9a0adce550edb825d4d2c8c9468c1634c44172c67a9ed256f594da62c4cda5c3837a0f28b7fabc03aca9b492f68ff1fdad337ee861b27bd5d + "@typescript-eslint/types": 5.40.1 + eslint-visitor-keys: ^3.3.0 + checksum: b5dbf1e484ba2832ca1883ee9cf7da5967f70aa5624f3fb67f13c3be90a3770b0bb96e64ccfb0c31b5d8f80794b5727e14b6c0d8c5184634a686f0ea6e798772 languageName: node linkType: hard -"@ethersproject/pbkdf2@npm:5.7.0, @ethersproject/pbkdf2@npm:^5.7.0": - version: 5.7.0 - resolution: "@ethersproject/pbkdf2@npm:5.7.0" +"@typescript-eslint/visitor-keys@npm:6.20.0": + version: 6.20.0 + resolution: "@typescript-eslint/visitor-keys@npm:6.20.0" dependencies: - "@ethersproject/bytes": ^5.7.0 - "@ethersproject/sha2": ^5.7.0 - checksum: b895adb9e35a8a127e794f7aadc31a2424ef355a70e51cde10d457e3e888bb8102373199a540cf61f2d6b9a32e47358f9c65b47d559f42bf8e596b5fd67901e9 + "@typescript-eslint/types": 6.20.0 + eslint-visitor-keys: ^3.4.1 + checksum: 6a360f16b7b28d3cbb539252d17c6ac8519fd26e5f27f895cd7d400e9ec428b67ecda131f2bd2d57144c0436dcdb15022749b163a46c61e62af2312e8e3be488 languageName: node linkType: hard -"@ethersproject/properties@npm:5.7.0, @ethersproject/properties@npm:^5.7.0": - version: 5.7.0 - resolution: "@ethersproject/properties@npm:5.7.0" +"@uniswap/sdk-core@npm:^3.0.0-alpha.3": + version: 3.2.3 + resolution: "@uniswap/sdk-core@npm:3.2.3" dependencies: - "@ethersproject/logger": ^5.7.0 - checksum: 6ab0ccf0c3aadc9221e0cdc5306ce6cd0df7f89f77d77bccdd1277182c9ead0202cd7521329ba3acde130820bf8af299e17cf567d0d497c736ee918207bbf59f + "@ethersproject/address": ^5.0.2 + big.js: ^5.2.2 + decimal.js-light: ^2.5.0 + jsbi: ^3.1.4 + tiny-invariant: ^1.1.0 + toformat: ^2.0.0 + checksum: a19367c7e1d7b391b1664f59b808836cbaed9a12880bdf6b9a31e6c3b63f2edce2966bdda65144a3003e4c3cd96085b86129c174971330a9766194c404263346 languageName: node linkType: hard -"@ethersproject/providers@npm:5.7.2, @ethersproject/providers@npm:~5.7.2": - version: 5.7.2 - resolution: "@ethersproject/providers@npm:5.7.2" +"@uniswap/sdk-core@npm:~4.0.1": + version: 4.0.10 + resolution: "@uniswap/sdk-core@npm:4.0.10" dependencies: - "@ethersproject/abstract-provider": ^5.7.0 - "@ethersproject/abstract-signer": ^5.7.0 - "@ethersproject/address": ^5.7.0 - "@ethersproject/base64": ^5.7.0 - "@ethersproject/basex": ^5.7.0 - "@ethersproject/bignumber": ^5.7.0 - "@ethersproject/bytes": ^5.7.0 - "@ethersproject/constants": ^5.7.0 - "@ethersproject/hash": ^5.7.0 - "@ethersproject/logger": ^5.7.0 - "@ethersproject/networks": ^5.7.0 - "@ethersproject/properties": ^5.7.0 - "@ethersproject/random": ^5.7.0 - "@ethersproject/rlp": ^5.7.0 - "@ethersproject/sha2": ^5.7.0 - "@ethersproject/strings": ^5.7.0 - "@ethersproject/transactions": ^5.7.0 - "@ethersproject/web": ^5.7.0 - bech32: 1.1.4 - ws: 7.4.6 - checksum: 1754c731a5ca6782ae9677f4a9cd8b6246c4ef21a966c9a01b133750f3c578431ec43ec254e699969c4a0f87e84463ded50f96b415600aabd37d2056aee58c19 + "@ethersproject/address": ^5.0.2 + big.js: ^5.2.2 + decimal.js-light: ^2.5.0 + jsbi: ^3.1.4 + tiny-invariant: ^1.1.0 + toformat: ^2.0.0 + checksum: 85c1ca851c94a6acdb822eb6bfda50e55701a1fb72b7928e6f7b0a6d6ced42cb987f392d3a4d4cc3453421fe52b850e5aaa896a42075d50786f28648399b977f languageName: node linkType: hard -"@ethersproject/random@npm:5.7.0, @ethersproject/random@npm:^5.7.0": - version: 5.7.0 - resolution: "@ethersproject/random@npm:5.7.0" +"@uniswap/v2-sdk@npm:~3.0.1": + version: 3.0.1 + resolution: "@uniswap/v2-sdk@npm:3.0.1" dependencies: - "@ethersproject/bytes": ^5.7.0 - "@ethersproject/logger": ^5.7.0 - checksum: 017829c91cff6c76470852855108115b0b52c611b6be817ed1948d56ba42d6677803ec2012aa5ae298a7660024156a64c11fcf544e235e239ab3f89f0fff7345 + "@ethersproject/address": ^5.0.0 + "@ethersproject/solidity": ^5.0.0 + "@uniswap/sdk-core": ^3.0.0-alpha.3 + tiny-invariant: ^1.1.0 + tiny-warning: ^1.0.3 + checksum: 2fd2de4adc462c53f1b963d4747b6b413292dc0054ebe93372753a3b2605a23169fcd8d9a8daf6ebc08568e0ae8891f9daeb29cabfe4369698e8a58395706e20 languageName: node linkType: hard -"@ethersproject/rlp@npm:5.7.0, @ethersproject/rlp@npm:^5.7.0": - version: 5.7.0 - resolution: "@ethersproject/rlp@npm:5.7.0" +"@vanilla-extract/css@npm:1.9.1": + version: 1.9.1 + resolution: "@vanilla-extract/css@npm:1.9.1" dependencies: - "@ethersproject/bytes": ^5.7.0 - "@ethersproject/logger": ^5.7.0 - checksum: bce165b0f7e68e4d091c9d3cf47b247cac33252df77a095ca4281d32d5eeaaa3695d9bc06b2b057c5015353a68df89f13a4a54a72e888e4beeabbe56b15dda6e + "@emotion/hash": ^0.8.0 + "@vanilla-extract/private": ^1.0.3 + ahocorasick: 1.0.2 + chalk: ^4.1.1 + css-what: ^5.0.1 + cssesc: ^3.0.0 + csstype: ^3.0.7 + deep-object-diff: ^1.1.0 + deepmerge: ^4.2.2 + media-query-parser: ^2.0.2 + outdent: ^0.8.0 + checksum: 91127d8e2eaaf521b155a39fb6a93e0fbfe5ddd5a8bdf1c732aba278cfdb9505cba24c755a982bc47682b9ff582a06d11e51e6f8d810404164ba098799ce6800 languageName: node linkType: hard -"@ethersproject/sha2@npm:5.7.0, @ethersproject/sha2@npm:^5.7.0": - version: 5.7.0 - resolution: "@ethersproject/sha2@npm:5.7.0" +"@vanilla-extract/dynamic@npm:2.0.2": + version: 2.0.2 + resolution: "@vanilla-extract/dynamic@npm:2.0.2" dependencies: - "@ethersproject/bytes": ^5.7.0 - "@ethersproject/logger": ^5.7.0 - hash.js: 1.1.7 - checksum: 09321057c022effbff4cc2d9b9558228690b5dd916329d75c4b1ffe32ba3d24b480a367a7cc92d0f0c0b1c896814d03351ae4630e2f1f7160be2bcfbde435dbc + "@vanilla-extract/private": ^1.0.3 + checksum: c6f22606bce094a5682c6d842be6d6965b9448f8973eaabdaa7a7438146458c22490c1c63345f08d2226f1c95ac20731835a5140c2c18646b2c1287b65607b84 languageName: node linkType: hard -"@ethersproject/signing-key@npm:5.7.0, @ethersproject/signing-key@npm:^5.7.0": - version: 5.7.0 - resolution: "@ethersproject/signing-key@npm:5.7.0" - dependencies: - "@ethersproject/bytes": ^5.7.0 - "@ethersproject/logger": ^5.7.0 - "@ethersproject/properties": ^5.7.0 - bn.js: ^5.2.1 - elliptic: 6.5.4 - hash.js: 1.1.7 - checksum: 8f8de09b0aac709683bbb49339bc0a4cd2f95598f3546436c65d6f3c3a847ffa98e06d35e9ed2b17d8030bd2f02db9b7bd2e11c5cf8a71aad4537487ab4cf03a +"@vanilla-extract/private@npm:^1.0.3": + version: 1.0.3 + resolution: "@vanilla-extract/private@npm:1.0.3" + checksum: 866a71ba6804edeb0735684e7723ba78f5cf0bb40d4fb538fe6bf7d73928099e341312337b2a510ac0ce96ff8a4b39eb7f7a5fad0c842532353dd20e7278f29b languageName: node linkType: hard -"@ethersproject/solidity@npm:5.7.0, @ethersproject/solidity@npm:^5.0.0": - version: 5.7.0 - resolution: "@ethersproject/solidity@npm:5.7.0" - dependencies: - "@ethersproject/bignumber": ^5.7.0 - "@ethersproject/bytes": ^5.7.0 - "@ethersproject/keccak256": ^5.7.0 - "@ethersproject/logger": ^5.7.0 - "@ethersproject/sha2": ^5.7.0 - "@ethersproject/strings": ^5.7.0 - checksum: 9a02f37f801c96068c3e7721f83719d060175bc4e80439fe060e92bd7acfcb6ac1330c7e71c49f4c2535ca1308f2acdcb01e00133129aac00581724c2d6293f3 +"@vanilla-extract/sprinkles@npm:1.5.0": + version: 1.5.0 + resolution: "@vanilla-extract/sprinkles@npm:1.5.0" + peerDependencies: + "@vanilla-extract/css": ^1.0.0 + checksum: 522b96afe856a72d76072ab41453edc35117772a6ac829c8a5ad09cddd69152e152b1cbda0b4344d50dbde59d0effa39301beb7acf319ef88f485966c89c80fd languageName: node linkType: hard -"@ethersproject/strings@npm:5.7.0, @ethersproject/strings@npm:^5.7.0": - version: 5.7.0 - resolution: "@ethersproject/strings@npm:5.7.0" - dependencies: - "@ethersproject/bytes": ^5.7.0 - "@ethersproject/constants": ^5.7.0 - "@ethersproject/logger": ^5.7.0 - checksum: 5ff78693ae3fdf3cf23e1f6dc047a61e44c8197d2408c42719fef8cb7b7b3613a4eec88ac0ed1f9f5558c74fe0de7ae3195a29ca91a239c74b9f444d8e8b50df +"@vercel/build-utils@npm:7.2.2": + version: 7.2.2 + resolution: "@vercel/build-utils@npm:7.2.2" + checksum: a229573ce56ef81e24af81e30c4abcc460a8d18d27200ee4c4d513d5e017c03708b02c4ee0841d3e8e630fad934f5db893fe4f4c27d43a64292db223cabc575e languageName: node linkType: hard -"@ethersproject/transactions@npm:5.7.0, @ethersproject/transactions@npm:^5.7.0": - version: 5.7.0 - resolution: "@ethersproject/transactions@npm:5.7.0" - dependencies: - "@ethersproject/address": ^5.7.0 - "@ethersproject/bignumber": ^5.7.0 - "@ethersproject/bytes": ^5.7.0 - "@ethersproject/constants": ^5.7.0 - "@ethersproject/keccak256": ^5.7.0 - "@ethersproject/logger": ^5.7.0 - "@ethersproject/properties": ^5.7.0 - "@ethersproject/rlp": ^5.7.0 - "@ethersproject/signing-key": ^5.7.0 - checksum: a31b71996d2b283f68486241bff0d3ea3f1ba0e8f1322a8fffc239ccc4f4a7eb2ea9994b8fd2f093283fd75f87bae68171e01b6265261f821369aca319884a79 +"@vercel/error-utils@npm:2.0.1": + version: 2.0.1 + resolution: "@vercel/error-utils@npm:2.0.1" + checksum: 267c21a5d84fec8905f04e4da458e444508541351b094b6450353fba9b264807e72aab6761493cf5000e9257192f91a43d06ab0737756111ccb30339c478b34c languageName: node linkType: hard -"@ethersproject/units@npm:5.7.0": - version: 5.7.0 - resolution: "@ethersproject/units@npm:5.7.0" +"@vercel/fun@npm:1.1.0": + version: 1.1.0 + resolution: "@vercel/fun@npm:1.1.0" + dependencies: + "@tootallnate/once": 2.0.0 + async-listen: 1.2.0 + debug: 4.1.1 + execa: 3.2.0 + fs-extra: 8.1.0 + generic-pool: 3.4.2 + micro: 9.3.5-canary.3 + ms: 2.1.1 + node-fetch: 2.6.7 + path-match: 1.2.4 + promisepipe: 3.0.0 + semver: 7.3.5 + stat-mode: 0.3.0 + stream-to-promise: 2.2.0 + tar: 4.4.18 + tree-kill: 1.2.2 + uid-promise: 1.0.0 + uuid: 3.3.2 + xdg-app-paths: 5.1.0 + yauzl-promise: 2.1.3 + checksum: c67529db2c371b792f8bb0e8ddb6db11fe0a928ed600150f69a9273c4a132070b39bf6d414e465df4c36bf30bf8dc9515499e5e61fb5c061430e814418d06102 + languageName: node + linkType: hard + +"@vercel/gatsby-plugin-vercel-analytics@npm:1.0.11": + version: 1.0.11 + resolution: "@vercel/gatsby-plugin-vercel-analytics@npm:1.0.11" dependencies: - "@ethersproject/bignumber": ^5.7.0 - "@ethersproject/constants": ^5.7.0 - "@ethersproject/logger": ^5.7.0 - checksum: 304714f848cd32e57df31bf545f7ad35c2a72adae957198b28cbc62166daa929322a07bff6e9c9ac4577ab6aa0de0546b065ed1b2d20b19e25748b7d475cb0fc + web-vitals: 0.2.4 + checksum: 4f17f7957b2c1b1a6fa7c3de3f51731ce5aa03d5ed31d7432f38200c674a1dd46ea9e5770f87dbad6bfc00e678f73a3e3f8f4f0979d31ea084312d291f6a87f9 languageName: node linkType: hard -"@ethersproject/wallet@npm:5.7.0": - version: 5.7.0 - resolution: "@ethersproject/wallet@npm:5.7.0" +"@vercel/gatsby-plugin-vercel-builder@npm:2.0.7": + version: 2.0.7 + resolution: "@vercel/gatsby-plugin-vercel-builder@npm:2.0.7" dependencies: - "@ethersproject/abstract-provider": ^5.7.0 - "@ethersproject/abstract-signer": ^5.7.0 - "@ethersproject/address": ^5.7.0 - "@ethersproject/bignumber": ^5.7.0 - "@ethersproject/bytes": ^5.7.0 - "@ethersproject/hash": ^5.7.0 - "@ethersproject/hdnode": ^5.7.0 - "@ethersproject/json-wallets": ^5.7.0 - "@ethersproject/keccak256": ^5.7.0 - "@ethersproject/logger": ^5.7.0 - "@ethersproject/properties": ^5.7.0 - "@ethersproject/random": ^5.7.0 - "@ethersproject/signing-key": ^5.7.0 - "@ethersproject/transactions": ^5.7.0 - "@ethersproject/wordlists": ^5.7.0 - checksum: a4009bf7331eddab38e3015b5e9101ef92de7f705b00a6196b997db0e5635b6d83561674d46c90c6f77b87c0500fe4a6b0183ba13749efc22db59c99deb82fbd + "@sinclair/typebox": 0.25.24 + "@vercel/build-utils": 7.2.2 + "@vercel/routing-utils": 3.0.0 + esbuild: 0.14.47 + etag: 1.8.1 + fs-extra: 11.1.0 + checksum: cb26d365711cbf7eb8443d4c5aad2dcd27f52f0b66be9c7e4ba2d132c2064908d0f8eddb31c195b5700bd26401c2b1662a90d4a58b09dc17d283b7b1e2e2f297 languageName: node linkType: hard -"@ethersproject/web@npm:5.7.1, @ethersproject/web@npm:^5.7.0": - version: 5.7.1 - resolution: "@ethersproject/web@npm:5.7.1" - dependencies: - "@ethersproject/base64": ^5.7.0 - "@ethersproject/bytes": ^5.7.0 - "@ethersproject/logger": ^5.7.0 - "@ethersproject/properties": ^5.7.0 - "@ethersproject/strings": ^5.7.0 - checksum: 7028c47103f82fd2e2c197ce0eecfacaa9180ffeec7de7845b1f4f9b19d84081b7a48227aaddde05a4aaa526af574a9a0ce01cc0fc75e3e371f84b38b5b16b2b +"@vercel/go@npm:3.0.3": + version: 3.0.3 + resolution: "@vercel/go@npm:3.0.3" + checksum: cf9fa10e00f8bba70c520c9371d4ba7e2d4e6e1970ae74c44b0db86f626c2a294eff7cc36e0f76112084a8bffc35569eca38abc8b3912b59e1081bcfdc2134a3 languageName: node linkType: hard -"@ethersproject/wordlists@npm:5.7.0, @ethersproject/wordlists@npm:^5.7.0": - version: 5.7.0 - resolution: "@ethersproject/wordlists@npm:5.7.0" +"@vercel/hydrogen@npm:1.0.1": + version: 1.0.1 + resolution: "@vercel/hydrogen@npm:1.0.1" dependencies: - "@ethersproject/bytes": ^5.7.0 - "@ethersproject/hash": ^5.7.0 - "@ethersproject/logger": ^5.7.0 - "@ethersproject/properties": ^5.7.0 - "@ethersproject/strings": ^5.7.0 - checksum: 30eb6eb0731f9ef5faa44bf9c0c6e950bcaaef61e4d2d9ce0ae6d341f4e2d6d1f4ab4f8880bfce03b7aac4b862fb740e1421170cfbf8e2aafc359277d49e6e97 - languageName: node - linkType: hard - -"@gar/promisify@npm:^1.0.1": - version: 1.1.3 - resolution: "@gar/promisify@npm:1.1.3" - checksum: 4059f790e2d07bf3c3ff3e0fec0daa8144fe35c1f6e0111c9921bd32106adaa97a4ab096ad7dab1e28ee6a9060083c4d1a4ada42a7f5f3f7a96b8812e2b757c1 + "@vercel/static-config": 3.0.0 + ts-morph: 12.0.0 + checksum: a13cdacfba84ff10ca2036815ea9d0e36fa5d8fe7e5af2083a8cf93a3b47d5e9c102be491d1882c08b555764804f4092cf10ba5e7d4b2495fb434bda1610f4de languageName: node linkType: hard -"@graphql-typed-document-node/core@npm:^3.2.0": - version: 3.2.0 - resolution: "@graphql-typed-document-node/core@npm:3.2.0" - peerDependencies: - graphql: ^0.8.0 || ^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 - checksum: fa44443accd28c8cf4cb96aaaf39d144a22e8b091b13366843f4e97d19c7bfeaf609ce3c7603a4aeffe385081eaf8ea245d078633a7324c11c5ec4b2011bb76d +"@vercel/next@npm:4.0.10": + version: 4.0.10 + resolution: "@vercel/next@npm:4.0.10" + dependencies: + "@vercel/nft": 0.24.2 + checksum: 6e1ac873d514a73cda9fc4b54778f8579d03019ec923751c31ed2f27a33ada94d076ecbe243a8c6338fcf6665d4f42bf835a7be302f4883e2d409bc9e36a47d2 languageName: node linkType: hard -"@hatsprotocol/sdk-v1-core@npm:^0.8.0": - version: 0.8.0 - resolution: "@hatsprotocol/sdk-v1-core@npm:0.8.0" +"@vercel/nft@npm:0.24.2": + version: 0.24.2 + resolution: "@vercel/nft@npm:0.24.2" dependencies: - "@hatsprotocol/sdk-v1-subgraph": 0.4.0 - graphql: ^16.6.0 - graphql-request: ^6.1.0 - peerDependencies: - viem: ^1.11.0 - checksum: c9bee2ae478220a008e3125f03a2c1627c053d10e83c1cd2404094a6ae37091a775a9aafa51b6127126a8a5f70650326d5bb4f36d325e479ed062d425fde7e98 + "@mapbox/node-pre-gyp": ^1.0.5 + "@rollup/pluginutils": ^4.0.0 + acorn: ^8.6.0 + async-sema: ^3.1.1 + bindings: ^1.4.0 + estree-walker: 2.0.2 + glob: ^7.1.3 + graceful-fs: ^4.2.9 + micromatch: ^4.0.2 + node-gyp-build: ^4.2.2 + resolve-from: ^5.0.0 + bin: + nft: out/cli.js + checksum: 1be8ed9860a5e091181aff8eb9031463c7b35b7712d06ab399d6d35b5356d9d309b8e9991ae365b677fa7ba9be63377b51d3fc14559c66ee39c4f879fcc216f8 languageName: node linkType: hard -"@hatsprotocol/sdk-v1-subgraph@npm:0.4.0": - version: 0.4.0 - resolution: "@hatsprotocol/sdk-v1-subgraph@npm:0.4.0" +"@vercel/node@npm:3.0.7": + version: 3.0.7 + resolution: "@vercel/node@npm:3.0.7" dependencies: - graphql: ^16.6.0 - graphql-request: ^6.1.0 - zod: ^3.22.4 - checksum: f3470daca1ec5c34ec04ff7f57e0a6da7d380a8bbae400f6d7c4aeada4337aae7f6eee29109fa75d09e29c13d43756522a44eb6865cf413adda3edb2d6949a4d + "@edge-runtime/node-utils": 2.2.1 + "@edge-runtime/primitives": 3.1.1 + "@edge-runtime/vm": 3.1.1 + "@types/node": 14.18.33 + "@vercel/build-utils": 7.2.2 + "@vercel/error-utils": 2.0.1 + "@vercel/nft": 0.24.2 + "@vercel/static-config": 3.0.0 + async-listen: 3.0.0 + edge-runtime: 2.5.1 + esbuild: 0.14.47 + etag: 1.8.1 + exit-hook: 2.2.1 + node-fetch: 2.6.9 + path-to-regexp: 6.2.1 + ts-morph: 12.0.0 + ts-node: 10.9.1 + typescript: 4.9.5 + undici: 5.23.0 + checksum: 11dd113b3ecb94fee02730384ca4bc35ab6b274a6fd79fc7ff7d9703e8f94e040d0d95d73c3ad6dc7eafbed6a4ef79a6490e7def1f7b1027dbe343b50635e381 languageName: node linkType: hard -"@heroicons/react@npm:~2.0.11": - version: 2.0.18 - resolution: "@heroicons/react@npm:2.0.18" - peerDependencies: - react: ">= 16" - checksum: 597e8668818623d568a302e343ef06b69f62ce297c14b88c2ebbfed0c0f00cd85ec44fae33ec8a249931b4e7dcf145743ae3198095a9f4682108de5155f5f4c3 +"@vercel/python@npm:4.0.2": + version: 4.0.2 + resolution: "@vercel/python@npm:4.0.2" + checksum: 268510d8cb11c18f8676dfcaf0c49d0500e3847ba3a8917b98affa0871c6f9156db729986379e222ee1283a69b4a79aff736b35905ced7a7f0126958bdc6d09f languageName: node linkType: hard -"@humanwhocodes/config-array@npm:^0.10.5": - version: 0.10.7 - resolution: "@humanwhocodes/config-array@npm:0.10.7" +"@vercel/redwood@npm:2.0.4": + version: 2.0.4 + resolution: "@vercel/redwood@npm:2.0.4" dependencies: - "@humanwhocodes/object-schema": ^1.2.1 - debug: ^4.1.1 - minimatch: ^3.0.4 - checksum: 009d64be8d5bd098ff04e10af79e34f5633245250581fca032fac12a8667b2df8e7d169e69c05bff4d83ea3dd3c7d2d0e05ea9b94d89a7d092e26530caf6f8a3 + "@vercel/nft": 0.24.2 + "@vercel/routing-utils": 3.0.0 + semver: 6.3.1 + checksum: a7909fe2f8ef1e2ed8118d36baeb6766a2a18b395230379462922548d9e79ade03080c518f59b3b526465c9935922aa03701915d22dfe8a554085aa7361c8f39 languageName: node linkType: hard -"@humanwhocodes/gitignore-to-minimatch@npm:^1.0.2": - version: 1.0.2 - resolution: "@humanwhocodes/gitignore-to-minimatch@npm:1.0.2" - checksum: aba5c40c9e3770ed73a558b0bfb53323842abfc2ce58c91d7e8b1073995598e6374456d38767be24ab6176915f0a8d8b23eaae5c85e2b488c0dccca6d795e2ad +"@vercel/remix-builder@npm:2.0.9": + version: 2.0.9 + resolution: "@vercel/remix-builder@npm:2.0.9" + dependencies: + "@vercel/nft": 0.24.2 + "@vercel/static-config": 3.0.0 + ts-morph: 12.0.0 + checksum: 62759fcb405d629ff28b9ab2b4b24280805a3d66d1113e6ab73d2f084b1f23733ba6bc601249400efc59c0ae8147de2741e1b7849d036fbbf920246265d9184a languageName: node linkType: hard -"@humanwhocodes/module-importer@npm:^1.0.1": - version: 1.0.1 - resolution: "@humanwhocodes/module-importer@npm:1.0.1" - checksum: 0fd22007db8034a2cdf2c764b140d37d9020bbfce8a49d3ec5c05290e77d4b0263b1b972b752df8c89e5eaa94073408f2b7d977aed131faf6cf396ebb5d7fb61 +"@vercel/routing-utils@npm:3.0.0": + version: 3.0.0 + resolution: "@vercel/routing-utils@npm:3.0.0" + dependencies: + ajv: ^6.0.0 + path-to-regexp: 6.1.0 + dependenciesMeta: + ajv: + optional: true + checksum: 8d043eae38c2a8581bcab0fe5c8a7c5416c0cc1ef804a23f7aa6edc056787ec1964be0f6bfb1a9376503304d36dc37759b588c611d6065b05d3e61229126da1f languageName: node linkType: hard -"@humanwhocodes/object-schema@npm:^1.2.1": - version: 1.2.1 - resolution: "@humanwhocodes/object-schema@npm:1.2.1" - checksum: a824a1ec31591231e4bad5787641f59e9633827d0a2eaae131a288d33c9ef0290bd16fda8da6f7c0fcb014147865d12118df10db57f27f41e20da92369fcb3f1 +"@vercel/ruby@npm:2.0.2": + version: 2.0.2 + resolution: "@vercel/ruby@npm:2.0.2" + checksum: 7e15e8302a09ad3b2db12d958c2501701afccec8b845451096e5a89b6f442cfd55290b98ab027ba606f875a16a4fd724b6356b650aaa0cd4e0c07a4088a1bcde languageName: node linkType: hard -"@ioredis/commands@npm:^1.1.1": - version: 1.2.0 - resolution: "@ioredis/commands@npm:1.2.0" - checksum: 9b20225ba36ef3e5caf69b3c0720597c3016cc9b1e157f519ea388f621dd9037177f84cfe7e25c4c32dad7dd90c70ff9123cd411f747e053cf292193c9c461e2 +"@vercel/static-build@npm:2.0.8": + version: 2.0.8 + resolution: "@vercel/static-build@npm:2.0.8" + dependencies: + "@vercel/gatsby-plugin-vercel-analytics": 1.0.11 + "@vercel/gatsby-plugin-vercel-builder": 2.0.7 + "@vercel/static-config": 3.0.0 + ts-morph: 12.0.0 + checksum: 8691a573613e137c567f9e467275b100eccbc347f8c6712f89b72aee46887df9c93eb900919493d97693a7eb3dc3ef6c9e0dbe43463ca273de021a45b329a51a languageName: node linkType: hard -"@isaacs/cliui@npm:^8.0.2": - version: 8.0.2 - resolution: "@isaacs/cliui@npm:8.0.2" +"@vercel/static-config@npm:3.0.0": + version: 3.0.0 + resolution: "@vercel/static-config@npm:3.0.0" dependencies: - string-width: ^5.1.2 - string-width-cjs: "npm:string-width@^4.2.0" - strip-ansi: ^7.0.1 - strip-ansi-cjs: "npm:strip-ansi@^6.0.1" - wrap-ansi: ^8.1.0 - wrap-ansi-cjs: "npm:wrap-ansi@^7.0.0" - checksum: 4a473b9b32a7d4d3cfb7a614226e555091ff0c5a29a1734c28c72a182c2f6699b26fc6b5c2131dfd841e86b185aea714c72201d7c98c2fba5f17709333a67aeb + ajv: 8.6.3 + json-schema-to-ts: 1.6.4 + ts-morph: 12.0.0 + checksum: aa69e98b31e5b0db416e4906a70ff7b9fe168146a1d9e67007a2e4514999f7ce0d02153b6314f0ea6fb3a7a0c2ccf841511d09873695e8623a4d95546461bfc9 languageName: node linkType: hard -"@jridgewell/gen-mapping@npm:^0.3.0, @jridgewell/gen-mapping@npm:^0.3.2": - version: 0.3.3 - resolution: "@jridgewell/gen-mapping@npm:0.3.3" +"@wagmi/connectors@npm:3.1.10": + version: 3.1.10 + resolution: "@wagmi/connectors@npm:3.1.10" dependencies: - "@jridgewell/set-array": ^1.0.1 - "@jridgewell/sourcemap-codec": ^1.4.10 - "@jridgewell/trace-mapping": ^0.3.9 - checksum: 4a74944bd31f22354fc01c3da32e83c19e519e3bbadafa114f6da4522ea77dd0c2842607e923a591d60a76699d819a2fbb6f3552e277efdb9b58b081390b60ab + "@coinbase/wallet-sdk": ^3.6.6 + "@safe-global/safe-apps-provider": ^0.18.1 + "@safe-global/safe-apps-sdk": ^8.1.0 + "@walletconnect/ethereum-provider": 2.10.6 + "@walletconnect/legacy-provider": ^2.0.0 + "@walletconnect/modal": 2.6.2 + "@walletconnect/utils": 2.10.2 + abitype: 0.8.7 + eventemitter3: ^4.0.7 + peerDependencies: + typescript: ">=5.0.4" + viem: ">=0.3.35" + peerDependenciesMeta: + typescript: + optional: true + checksum: 65eeb30881fbbf018ec842eb156f4119090c804450f55de60d95c92b124d86b5a769cdc02f4db0bc04ae481b678375d6061d67a86b14b30b62527c202a688574 languageName: node linkType: hard -"@jridgewell/resolve-uri@npm:^3.0.3, @jridgewell/resolve-uri@npm:^3.1.0": - version: 3.1.1 - resolution: "@jridgewell/resolve-uri@npm:3.1.1" - checksum: f5b441fe7900eab4f9155b3b93f9800a916257f4e8563afbcd3b5a5337b55e52bd8ae6735453b1b745457d9f6cdb16d74cd6220bbdd98cf153239e13f6cbb653 +"@wagmi/core@npm:1.4.12": + version: 1.4.12 + resolution: "@wagmi/core@npm:1.4.12" + dependencies: + "@wagmi/connectors": 3.1.10 + abitype: 0.8.7 + eventemitter3: ^4.0.7 + zustand: ^4.3.1 + peerDependencies: + typescript: ">=5.0.4" + viem: ">=0.3.35" + peerDependenciesMeta: + typescript: + optional: true + checksum: 4f1e7c532e7f8a984c6918328a6690543cf77d224f0e1119a7eba4e3495da466d7a2c64718922bc5e3741cabf17c20ff0de2600531ea3f9bd07ba4b27067d68b languageName: node linkType: hard -"@jridgewell/set-array@npm:^1.0.1": - version: 1.1.2 - resolution: "@jridgewell/set-array@npm:1.1.2" - checksum: 69a84d5980385f396ff60a175f7177af0b8da4ddb81824cb7016a9ef914eee9806c72b6b65942003c63f7983d4f39a5c6c27185bbca88eb4690b62075602e28e +"@walletconnect/core@npm:2.10.6": + version: 2.10.6 + resolution: "@walletconnect/core@npm:2.10.6" + dependencies: + "@walletconnect/heartbeat": 1.2.1 + "@walletconnect/jsonrpc-provider": 1.0.13 + "@walletconnect/jsonrpc-types": 1.0.3 + "@walletconnect/jsonrpc-utils": 1.0.8 + "@walletconnect/jsonrpc-ws-connection": 1.0.14 + "@walletconnect/keyvaluestorage": ^1.1.1 + "@walletconnect/logger": ^2.0.1 + "@walletconnect/relay-api": ^1.0.9 + "@walletconnect/relay-auth": ^1.0.4 + "@walletconnect/safe-json": ^1.0.2 + "@walletconnect/time": ^1.0.2 + "@walletconnect/types": 2.10.6 + "@walletconnect/utils": 2.10.6 + events: ^3.3.0 + lodash.isequal: 4.5.0 + uint8arrays: ^3.1.0 + checksum: 7ed74d0feaf4f4b332da2e82932340e6897e26910ae66c111e8724f41b15f14376fd9fd4b93ba9395107d24d2147932ef29bd7b7edce1bbde89e4258e8b2f574 languageName: node linkType: hard -"@jridgewell/sourcemap-codec@npm:^1.4.10, @jridgewell/sourcemap-codec@npm:^1.4.14": - version: 1.4.15 - resolution: "@jridgewell/sourcemap-codec@npm:1.4.15" - checksum: b881c7e503db3fc7f3c1f35a1dd2655a188cc51a3612d76efc8a6eb74728bef5606e6758ee77423e564092b4a518aba569bbb21c9bac5ab7a35b0c6ae7e344c8 +"@walletconnect/crypto@npm:^1.0.3": + version: 1.0.3 + resolution: "@walletconnect/crypto@npm:1.0.3" + dependencies: + "@walletconnect/encoding": ^1.0.2 + "@walletconnect/environment": ^1.0.1 + "@walletconnect/randombytes": ^1.0.3 + aes-js: ^3.1.2 + hash.js: ^1.1.7 + tslib: 1.14.1 + checksum: 056c80451178d74be6237f24e53eb96951379ad2f556642b4f07231a9cac53512af182dfb58ee359d1d6803231030de747eb17b35a9a25577e20de3ef2d8fdec languageName: node linkType: hard -"@jridgewell/trace-mapping@npm:0.3.9": - version: 0.3.9 - resolution: "@jridgewell/trace-mapping@npm:0.3.9" +"@walletconnect/encoding@npm:^1.0.2": + version: 1.0.2 + resolution: "@walletconnect/encoding@npm:1.0.2" dependencies: - "@jridgewell/resolve-uri": ^3.0.3 - "@jridgewell/sourcemap-codec": ^1.4.10 - checksum: d89597752fd88d3f3480845691a05a44bd21faac18e2185b6f436c3b0fd0c5a859fbbd9aaa92050c4052caf325ad3e10e2e1d1b64327517471b7d51babc0ddef + is-typedarray: 1.0.0 + tslib: 1.14.1 + typedarray-to-buffer: 3.1.5 + checksum: 648029d6a04e0e3675e1220b87c982e5d69764873e30a45a7c57f18223cd7c13e6758138d4644fd05d8fa03bd438fafb0a0ebc6ae168ed6f4a9bf1f93de1b82f languageName: node linkType: hard -"@jridgewell/trace-mapping@npm:^0.3.17, @jridgewell/trace-mapping@npm:^0.3.9": - version: 0.3.20 - resolution: "@jridgewell/trace-mapping@npm:0.3.20" +"@walletconnect/environment@npm:^1.0.1": + version: 1.0.1 + resolution: "@walletconnect/environment@npm:1.0.1" dependencies: - "@jridgewell/resolve-uri": ^3.1.0 - "@jridgewell/sourcemap-codec": ^1.4.14 - checksum: cd1a7353135f385909468ff0cf20bdd37e59f2ee49a13a966dedf921943e222082c583ade2b579ff6cd0d8faafcb5461f253e1bf2a9f48fec439211fdbe788f5 + tslib: 1.14.1 + checksum: a18731d857bdca73910147e59992cef3c6e292c37ab3d3013307bd706f06cb216aa804f0f48b25a78df6493ad8127e633629f4b50acb4f69d3765d6ac0524f68 languageName: node linkType: hard -"@ledgerhq/connect-kit-loader@npm:^1.1.0": - version: 1.1.2 - resolution: "@ledgerhq/connect-kit-loader@npm:1.1.2" - checksum: 614fdd9ac2363da60af667adcfe4721f863d8ea06ee45a08192a162c28e806dc07491bee4833d14def74de673eac1f1450eaf67e783c8c28da4e0cd095b4474a +"@walletconnect/ethereum-provider@npm:2.10.6": + version: 2.10.6 + resolution: "@walletconnect/ethereum-provider@npm:2.10.6" + dependencies: + "@walletconnect/jsonrpc-http-connection": ^1.0.7 + "@walletconnect/jsonrpc-provider": ^1.0.13 + "@walletconnect/jsonrpc-types": ^1.0.3 + "@walletconnect/jsonrpc-utils": ^1.0.8 + "@walletconnect/modal": ^2.4.3 + "@walletconnect/sign-client": 2.10.6 + "@walletconnect/types": 2.10.6 + "@walletconnect/universal-provider": 2.10.6 + "@walletconnect/utils": 2.10.6 + events: ^3.3.0 + checksum: 02452044400ef751358598aada659ce77ae69495f3b01f040a6888289d74d22a03c1736a4860a9e1157bc0211bbcde1e3b0eb01d4ff209c2bf14efe7172774c9 languageName: node linkType: hard -"@lit-labs/ssr-dom-shim@npm:^1.0.0, @lit-labs/ssr-dom-shim@npm:^1.1.0": - version: 1.1.2 - resolution: "@lit-labs/ssr-dom-shim@npm:1.1.2" - checksum: 73fd787893851d4ec4aaa5c775405ed2aae4ca0891b2dd3c973b32c2f4bf70ada5481dd0224e52b786d037aa8a00052186ad1623c44551affd66f6409cca8da6 +"@walletconnect/events@npm:^1.0.1": + version: 1.0.1 + resolution: "@walletconnect/events@npm:1.0.1" + dependencies: + keyvaluestorage-interface: ^1.0.0 + tslib: 1.14.1 + checksum: d28aa4dcc981bdaf38f0aeed979731ca793cead7e7a4ee730a9146d99d89db09a86c8e3192ed860638283276961c0723ba00cf3b8776f0692b36ec7df6c01be4 languageName: node linkType: hard -"@lit/reactive-element@npm:^1.3.0, @lit/reactive-element@npm:^1.6.0": - version: 1.6.3 - resolution: "@lit/reactive-element@npm:1.6.3" +"@walletconnect/heartbeat@npm:1.2.1": + version: 1.2.1 + resolution: "@walletconnect/heartbeat@npm:1.2.1" dependencies: - "@lit-labs/ssr-dom-shim": ^1.0.0 - checksum: 79b58631c38effeabad090070324431da8a22cf0ff665f5e4de35e4d791f984742b3d340c9c7fce996d1124a8da95febc582471b4c237236c770b1300b56ef6e + "@walletconnect/events": ^1.0.1 + "@walletconnect/time": ^1.0.2 + tslib: 1.14.1 + checksum: df4d492a2d336283f834bc205c09b795f85cd507a61b14745dc2124e510a250fefbd83d51216f93df2e0aa0cf8120134db2679de8019eddd63877e9928997952 languageName: node linkType: hard -"@mapbox/node-pre-gyp@npm:^1.0.5": - version: 1.0.11 - resolution: "@mapbox/node-pre-gyp@npm:1.0.11" +"@walletconnect/jsonrpc-http-connection@npm:^1.0.4, @walletconnect/jsonrpc-http-connection@npm:^1.0.7": + version: 1.0.7 + resolution: "@walletconnect/jsonrpc-http-connection@npm:1.0.7" dependencies: - detect-libc: ^2.0.0 - https-proxy-agent: ^5.0.0 - make-dir: ^3.1.0 - node-fetch: ^2.6.7 - nopt: ^5.0.0 - npmlog: ^5.0.1 - rimraf: ^3.0.2 - semver: ^7.3.5 - tar: ^6.1.11 - bin: - node-pre-gyp: bin/node-pre-gyp - checksum: b848f6abc531a11961d780db813cc510ca5a5b6bf3184d72134089c6875a91c44d571ba6c1879470020803f7803609e7b2e6e429651c026fe202facd11d444b8 + "@walletconnect/jsonrpc-utils": ^1.0.6 + "@walletconnect/safe-json": ^1.0.1 + cross-fetch: ^3.1.4 + tslib: 1.14.1 + checksum: c4efcd46d4b344727ca6879badca2c2f855499ac76c8dace5d118f4423167adce34e41a99f3dcab0febb945ce51c6ef0ac8556567d5e38d8dad864b131eb5b00 languageName: node linkType: hard -"@metamask/safe-event-emitter@npm:2.0.0, @metamask/safe-event-emitter@npm:^2.0.0": - version: 2.0.0 - resolution: "@metamask/safe-event-emitter@npm:2.0.0" - checksum: 8b717ac5d53df0027c05509f03d0534700b5898dd1c3a53fb2dc4c0499ca5971b14aae67f522d09eb9f509e77f50afa95fdb3eda1afbff8b071c18a3d2905e93 +"@walletconnect/jsonrpc-provider@npm:1.0.13, @walletconnect/jsonrpc-provider@npm:^1.0.13, @walletconnect/jsonrpc-provider@npm:^1.0.6": + version: 1.0.13 + resolution: "@walletconnect/jsonrpc-provider@npm:1.0.13" + dependencies: + "@walletconnect/jsonrpc-utils": ^1.0.8 + "@walletconnect/safe-json": ^1.0.2 + tslib: 1.14.1 + checksum: 497dfdd9f988432f171bc98336f3583c679059f0a166f95d6e51c8e1937c17abd9a5fd3aadfcebf6964bae14edd1e05fb0453e370d6e3bbc7ff4919fcad7c478 languageName: node linkType: hard -"@metamask/utils@npm:^3.0.1": - version: 3.6.0 - resolution: "@metamask/utils@npm:3.6.0" +"@walletconnect/jsonrpc-types@npm:1.0.3, @walletconnect/jsonrpc-types@npm:^1.0.2, @walletconnect/jsonrpc-types@npm:^1.0.3": + version: 1.0.3 + resolution: "@walletconnect/jsonrpc-types@npm:1.0.3" dependencies: - "@types/debug": ^4.1.7 - debug: ^4.3.4 - semver: ^7.3.8 - superstruct: ^1.0.3 - checksum: 1ebc6677bb017e4d09d4af143621fe27194d8ed815234cfd76469c3c734dc1db2ea7b577c01a2096c21c04d8c9c4d721d3035b5353fe2ded3b4737f326755e43 + keyvaluestorage-interface: ^1.0.0 + tslib: 1.14.1 + checksum: 26e6f1d8f4207328d3df465c36d0d67844772863dc8e9e78e6cfec417cfc359300eab049d99ea558982b3f0948f4ca26b75253bdf635ffd82ffe30a5276b790c languageName: node linkType: hard -"@motionone/animation@npm:^10.15.1, @motionone/animation@npm:^10.16.3": - version: 10.16.3 - resolution: "@motionone/animation@npm:10.16.3" +"@walletconnect/jsonrpc-utils@npm:1.0.8, @walletconnect/jsonrpc-utils@npm:^1.0.4, @walletconnect/jsonrpc-utils@npm:^1.0.6, @walletconnect/jsonrpc-utils@npm:^1.0.7, @walletconnect/jsonrpc-utils@npm:^1.0.8": + version: 1.0.8 + resolution: "@walletconnect/jsonrpc-utils@npm:1.0.8" dependencies: - "@motionone/easing": ^10.16.3 - "@motionone/types": ^10.16.3 - "@motionone/utils": ^10.16.3 - tslib: ^2.3.1 - checksum: 797cacea335e6f892af27579eff51450dcf18c5bbc5c0ca44a000929b21857f4afb974ffb411c4935bfbd01ef2ddb3ef542ba3313ae66e1e5392b5d314df6ad3 + "@walletconnect/environment": ^1.0.1 + "@walletconnect/jsonrpc-types": ^1.0.3 + tslib: 1.14.1 + checksum: f43a85dfce8150c3e3d1f009e8d8241ab8e10b026ea435f0918edf4db6b3a17586ba9d9c54a93cc61e4d3c685611e5bd5954fc377a581af503acd38e6d84c2ef languageName: node linkType: hard -"@motionone/dom@npm:^10.16.2, @motionone/dom@npm:^10.16.4": - version: 10.16.4 - resolution: "@motionone/dom@npm:10.16.4" +"@walletconnect/jsonrpc-ws-connection@npm:1.0.14": + version: 1.0.14 + resolution: "@walletconnect/jsonrpc-ws-connection@npm:1.0.14" dependencies: - "@motionone/animation": ^10.16.3 - "@motionone/generators": ^10.16.4 - "@motionone/types": ^10.16.3 - "@motionone/utils": ^10.16.3 - hey-listen: ^1.0.8 - tslib: ^2.3.1 - checksum: 8307864351d1c0108492c2f414ab564f59f4bb797180382948696df44e7389339560e642c7d0fbdbe63c1755515b2ace8264b5f8827ba2590636e11d474dd226 + "@walletconnect/jsonrpc-utils": ^1.0.6 + "@walletconnect/safe-json": ^1.0.2 + events: ^3.3.0 + ws: ^7.5.1 + checksum: a401e60b19390098183ef1b2a7b3e15c4dd3c64f9ac87fd2bbc0ae1f7fb31539ba542374ca021193efc4a2ae59fa3b04e588aed98cdf5c364f50524403d50f9f languageName: node linkType: hard -"@motionone/easing@npm:^10.16.3": - version: 10.16.3 - resolution: "@motionone/easing@npm:10.16.3" +"@walletconnect/keyvaluestorage@npm:^1.0.2, @walletconnect/keyvaluestorage@npm:^1.1.1": + version: 1.1.1 + resolution: "@walletconnect/keyvaluestorage@npm:1.1.1" dependencies: - "@motionone/utils": ^10.16.3 - tslib: ^2.3.1 - checksum: 03e2460cdd35ee4967a86ce28ffbaaaca589263f659f652801cf6bd667baba9b3d5ce6d134df6b64413b60b34dd21d7c38b0cd8a4c3e1ed789789cdb971905b2 + "@walletconnect/safe-json": ^1.0.1 + idb-keyval: ^6.2.1 + unstorage: ^1.9.0 + peerDependencies: + "@react-native-async-storage/async-storage": 1.x + peerDependenciesMeta: + "@react-native-async-storage/async-storage": + optional: true + checksum: 7f85cb83963153417745367742070ccb78e03bd62adb549de57a7d5fae7bcfbd9a8f42b2f445ca76a3817ffacacc69d85bbf67757c3616ee7b3525f2f8a0faea languageName: node linkType: hard -"@motionone/generators@npm:^10.16.4": - version: 10.16.4 - resolution: "@motionone/generators@npm:10.16.4" +"@walletconnect/legacy-client@npm:^2.0.0": + version: 2.0.0 + resolution: "@walletconnect/legacy-client@npm:2.0.0" dependencies: - "@motionone/types": ^10.16.3 - "@motionone/utils": ^10.16.3 - tslib: ^2.3.1 - checksum: 185091c5cfbe67c38e84bf3920d1b5862e5d7eb624136494a7e4779b2f9d06855ebe3e633d95dcc5a1735d92d59d1ae28a0724c2f9d8bddd60fc9bc3603fab48 + "@walletconnect/crypto": ^1.0.3 + "@walletconnect/encoding": ^1.0.2 + "@walletconnect/jsonrpc-utils": ^1.0.4 + "@walletconnect/legacy-types": ^2.0.0 + "@walletconnect/legacy-utils": ^2.0.0 + "@walletconnect/safe-json": ^1.0.1 + "@walletconnect/window-getters": ^1.0.1 + "@walletconnect/window-metadata": ^1.0.1 + detect-browser: ^5.3.0 + query-string: ^6.13.5 + checksum: 57de9e373b24766e937734989080eb6d476e40d5406d4f817c989b278f25a09aa8636dfbe34a33f4de80ef90aea9641fdb7841007ecdba8e5ad47cd11614ee94 languageName: node linkType: hard -"@motionone/svelte@npm:^10.16.2": - version: 10.16.4 - resolution: "@motionone/svelte@npm:10.16.4" +"@walletconnect/legacy-modal@npm:^2.0.0": + version: 2.0.0 + resolution: "@walletconnect/legacy-modal@npm:2.0.0" dependencies: - "@motionone/dom": ^10.16.4 - tslib: ^2.3.1 - checksum: 699e20955ea832bcf32d410ae9f88edf61a5c2cf2b56527119ab1df6fecbf2632b62d541743d0f6d278fd700a15a20b9eb7c8aa5266e7aed5e113b8f8f75b863 + "@walletconnect/legacy-types": ^2.0.0 + "@walletconnect/legacy-utils": ^2.0.0 + copy-to-clipboard: ^3.3.3 + preact: ^10.12.0 + qrcode: ^1.5.1 + checksum: 897a02c9f4129a8f0b8e37832bf49a408e7e6f2828e78bea90c3718471cb57558f5522dd69c19456b5cc54a4aa04a4f7942f262ad9b031d318a5498ca0ca4078 languageName: node linkType: hard -"@motionone/types@npm:^10.15.1, @motionone/types@npm:^10.16.3": - version: 10.16.3 - resolution: "@motionone/types@npm:10.16.3" - checksum: ff38982f5aff2c0abbc3051c843d186d6f954c971e97dd6fced97a4ef50ee04f6e49607541ebb80e14dd143cf63553c388392110e270d04eca23f6b529f7f321 +"@walletconnect/legacy-provider@npm:^2.0.0": + version: 2.0.0 + resolution: "@walletconnect/legacy-provider@npm:2.0.0" + dependencies: + "@walletconnect/jsonrpc-http-connection": ^1.0.4 + "@walletconnect/jsonrpc-provider": ^1.0.6 + "@walletconnect/legacy-client": ^2.0.0 + "@walletconnect/legacy-modal": ^2.0.0 + "@walletconnect/legacy-types": ^2.0.0 + "@walletconnect/legacy-utils": ^2.0.0 + checksum: 48adf2d938d3580be1dbaa4c7005cdf715896a56d3f4ab500c301cd5b442343c7df11bfccbc8e32bf9a7ba4b9a379208846ad848d79b1b6b511c1c4121fc83cf languageName: node linkType: hard -"@motionone/utils@npm:^10.15.1, @motionone/utils@npm:^10.16.3": - version: 10.16.3 - resolution: "@motionone/utils@npm:10.16.3" +"@walletconnect/legacy-types@npm:^2.0.0": + version: 2.0.0 + resolution: "@walletconnect/legacy-types@npm:2.0.0" dependencies: - "@motionone/types": ^10.16.3 - hey-listen: ^1.0.8 - tslib: ^2.3.1 - checksum: d06025911c54c2217c98026cd38d4d681268a2b9b2830ac7342820881ba6be09721dd03626f52547749ead0543d5e2f2a69c9270ffdeaabc0949f7afb3233817 + "@walletconnect/jsonrpc-types": ^1.0.2 + checksum: 358d789f8a50e689edcfd8eb668fcdf8e1f03ab08757b12fad0e658ce7ef62268f8022502b476bce69e5165aa4454c4ad1ea41f17244ab8d0fcd9026bd94707c languageName: node linkType: hard -"@motionone/vue@npm:^10.16.2": - version: 10.16.4 - resolution: "@motionone/vue@npm:10.16.4" - dependencies: - "@motionone/dom": ^10.16.4 - tslib: ^2.3.1 - checksum: 746e38d0ee831829bfac2ce471f3d98a9e37bd8cbdf2706fa3becce69c17f51180a1ee47582d97758d68aafdfc9a187ab47ff216c77254ac994287dabcf266c1 +"@walletconnect/legacy-utils@npm:^2.0.0": + version: 2.0.0 + resolution: "@walletconnect/legacy-utils@npm:2.0.0" + dependencies: + "@walletconnect/encoding": ^1.0.2 + "@walletconnect/jsonrpc-utils": ^1.0.4 + "@walletconnect/legacy-types": ^2.0.0 + "@walletconnect/safe-json": ^1.0.1 + "@walletconnect/window-getters": ^1.0.1 + "@walletconnect/window-metadata": ^1.0.1 + detect-browser: ^5.3.0 + query-string: ^6.13.5 + checksum: ea90e98c2f2f0a7f1d8801f7284bae909952979413b5d8e339004948199a2777af025195442a3c78a27aa3c16bb546ef54bf9c592e5622e1f003bef6d4b355ca languageName: node linkType: hard -"@next/env@npm:13.1.6": - version: 13.1.6 - resolution: "@next/env@npm:13.1.6" - checksum: 0f911a18f0b3372007632fffa87f5d7f802c00d07b3bf757d2d09574735ae43f60000ecdf64b6f06e195971c508c2bcee82dd1e3aab27a08a4300eb0317652bb +"@walletconnect/logger@npm:^2.0.1": + version: 2.0.1 + resolution: "@walletconnect/logger@npm:2.0.1" + dependencies: + pino: 7.11.0 + tslib: 1.14.1 + checksum: b686679d176d5d22a3441d93e71be2652e6c447682a6d6f014baf7c2d9dcd23b93e2f434d4410e33cc532d068333f6b3c1d899aeb0d6f60cc296ed17f57b0c2c languageName: node linkType: hard -"@next/eslint-plugin-next@npm:13.1.6": - version: 13.1.6 - resolution: "@next/eslint-plugin-next@npm:13.1.6" +"@walletconnect/modal-core@npm:2.6.2": + version: 2.6.2 + resolution: "@walletconnect/modal-core@npm:2.6.2" dependencies: - glob: 7.1.7 - checksum: 15d3b5913a56d40c7ad33c77f5285a2388a3a4b4da2eb80a3899ac4b871c7bfca74fd45f98fcac3d6a91c8dce738da2661cf71e7e3116a14d5da0d5b68939e8d + valtio: 1.11.2 + checksum: 94daceba50c323b06ecbeac2968d9f0972f327359c6118887c6526cd64006249b12f64322d71bc6c4a2b928436ecc89cf3d3af706511fcdc264c1f4b34a2dd5d languageName: node linkType: hard -"@next/swc-android-arm-eabi@npm:13.1.6": - version: 13.1.6 - resolution: "@next/swc-android-arm-eabi@npm:13.1.6" - conditions: os=android & cpu=arm +"@walletconnect/modal-ui@npm:2.6.2": + version: 2.6.2 + resolution: "@walletconnect/modal-ui@npm:2.6.2" + dependencies: + "@walletconnect/modal-core": 2.6.2 + lit: 2.8.0 + motion: 10.16.2 + qrcode: 1.5.3 + checksum: cd1ec0205eb491e529670599d3dd26f6782d7c5a99d5594bf6949a8c760c1c5f4eb6ed72b8662450774fe4e2dd47678f2c05145c8f2494bd7153446ddf4bd7ed languageName: node linkType: hard -"@next/swc-android-arm64@npm:13.1.6": - version: 13.1.6 - resolution: "@next/swc-android-arm64@npm:13.1.6" - conditions: os=android & cpu=arm64 +"@walletconnect/modal@npm:2.6.2, @walletconnect/modal@npm:^2.4.3": + version: 2.6.2 + resolution: "@walletconnect/modal@npm:2.6.2" + dependencies: + "@walletconnect/modal-core": 2.6.2 + "@walletconnect/modal-ui": 2.6.2 + checksum: 68b354d49960b96d22de0e47a3801df27c01a3e96ec5fbde3ca6df1344ca2b20668b0c4d58fe1803f5670ac7b7b4c6f5b7b405e354f5f9eaff5cca147c13de9c languageName: node linkType: hard -"@next/swc-darwin-arm64@npm:13.1.6": - version: 13.1.6 - resolution: "@next/swc-darwin-arm64@npm:13.1.6" - conditions: os=darwin & cpu=arm64 +"@walletconnect/randombytes@npm:^1.0.3": + version: 1.0.3 + resolution: "@walletconnect/randombytes@npm:1.0.3" + dependencies: + "@walletconnect/encoding": ^1.0.2 + "@walletconnect/environment": ^1.0.1 + randombytes: ^2.1.0 + tslib: 1.14.1 + checksum: 3ba1d5906299256c64affcd03348ec1397e2fadb1e60baaa13d4f46ba0267580fc354e67839d3fa4faa8abb375723f7ab96334b4e842f5814ce2080ed15f3578 languageName: node linkType: hard -"@next/swc-darwin-x64@npm:13.1.6": - version: 13.1.6 - resolution: "@next/swc-darwin-x64@npm:13.1.6" - conditions: os=darwin & cpu=x64 +"@walletconnect/relay-api@npm:^1.0.9": + version: 1.0.9 + resolution: "@walletconnect/relay-api@npm:1.0.9" + dependencies: + "@walletconnect/jsonrpc-types": ^1.0.2 + tslib: 1.14.1 + checksum: 5870579b6552f1ce7351878f1acb8386b0c11288c64d39133c7cee5040feeb7ccf9114228d97a59749d60366ad107b097d656407d534567c24f5d3878ea6e246 languageName: node linkType: hard -"@next/swc-freebsd-x64@npm:13.1.6": - version: 13.1.6 - resolution: "@next/swc-freebsd-x64@npm:13.1.6" - conditions: os=freebsd & cpu=x64 +"@walletconnect/relay-auth@npm:^1.0.4": + version: 1.0.4 + resolution: "@walletconnect/relay-auth@npm:1.0.4" + dependencies: + "@stablelib/ed25519": ^1.0.2 + "@stablelib/random": ^1.0.1 + "@walletconnect/safe-json": ^1.0.1 + "@walletconnect/time": ^1.0.2 + tslib: 1.14.1 + uint8arrays: ^3.0.0 + checksum: 35b3229d7b57e74fdb8fe6827d8dd8291dc60bacda880a57b2acb47a34d38f12be46c971c9eff361eb4073e896648b550de7a7a3852ef3752f9619c08dfba891 languageName: node linkType: hard -"@next/swc-linux-arm-gnueabihf@npm:13.1.6": - version: 13.1.6 - resolution: "@next/swc-linux-arm-gnueabihf@npm:13.1.6" - conditions: os=linux & cpu=arm +"@walletconnect/safe-json@npm:^1.0.1, @walletconnect/safe-json@npm:^1.0.2": + version: 1.0.2 + resolution: "@walletconnect/safe-json@npm:1.0.2" + dependencies: + tslib: 1.14.1 + checksum: fee03fcc70adb5635ab9419ea6ec6555aa2467bef650ad3b9526451c3a5cf247836db0f3ae3bb435d2e585d99e50c2ebe7dc9c429cfa3df900cf3fe4bd06d37f languageName: node linkType: hard -"@next/swc-linux-arm64-gnu@npm:13.1.6": - version: 13.1.6 - resolution: "@next/swc-linux-arm64-gnu@npm:13.1.6" - conditions: os=linux & cpu=arm64 & libc=glibc +"@walletconnect/sign-client@npm:2.10.6": + version: 2.10.6 + resolution: "@walletconnect/sign-client@npm:2.10.6" + dependencies: + "@walletconnect/core": 2.10.6 + "@walletconnect/events": ^1.0.1 + "@walletconnect/heartbeat": 1.2.1 + "@walletconnect/jsonrpc-utils": 1.0.8 + "@walletconnect/logger": ^2.0.1 + "@walletconnect/time": ^1.0.2 + "@walletconnect/types": 2.10.6 + "@walletconnect/utils": 2.10.6 + events: ^3.3.0 + checksum: 610dd354d53159eb26ec61d3399507ba63739d9070a458b3a791a944d8b62d9b55d487d3d41c68aa9af0052fc04daea0a05a2f5d664c6ff21cb89e0909a1323b languageName: node linkType: hard -"@next/swc-linux-arm64-musl@npm:13.1.6": - version: 13.1.6 - resolution: "@next/swc-linux-arm64-musl@npm:13.1.6" - conditions: os=linux & cpu=arm64 & libc=musl +"@walletconnect/time@npm:^1.0.2": + version: 1.0.2 + resolution: "@walletconnect/time@npm:1.0.2" + dependencies: + tslib: 1.14.1 + checksum: e3fc0113ca9e7ecedfc65f9e1517196682d5ffcda60750f51073b8d704719a17fea75da8b242c804bfa5b994707723043892a2db3cc86988b190b7b8711fe3c0 languageName: node linkType: hard -"@next/swc-linux-x64-gnu@npm:13.1.6": - version: 13.1.6 - resolution: "@next/swc-linux-x64-gnu@npm:13.1.6" - conditions: os=linux & cpu=x64 & libc=glibc +"@walletconnect/types@npm:2.10.2": + version: 2.10.2 + resolution: "@walletconnect/types@npm:2.10.2" + dependencies: + "@walletconnect/events": ^1.0.1 + "@walletconnect/heartbeat": 1.2.1 + "@walletconnect/jsonrpc-types": 1.0.3 + "@walletconnect/keyvaluestorage": ^1.0.2 + "@walletconnect/logger": ^2.0.1 + events: ^3.3.0 + checksum: dafcb840b2b93343db56ca6684edfe8a20d9b2f703f81b2d1fdbea558fe41de9fbddec12c24e9d51a50c75ee6298a1cfd347d7fa0202146033788670371cfd6a languageName: node linkType: hard -"@next/swc-linux-x64-musl@npm:13.1.6": - version: 13.1.6 - resolution: "@next/swc-linux-x64-musl@npm:13.1.6" - conditions: os=linux & cpu=x64 & libc=musl +"@walletconnect/types@npm:2.10.6": + version: 2.10.6 + resolution: "@walletconnect/types@npm:2.10.6" + dependencies: + "@walletconnect/events": ^1.0.1 + "@walletconnect/heartbeat": 1.2.1 + "@walletconnect/jsonrpc-types": 1.0.3 + "@walletconnect/keyvaluestorage": ^1.1.1 + "@walletconnect/logger": ^2.0.1 + events: ^3.3.0 + checksum: 84f411fd41debc310b4aae4969e5a78074f1f8cc937c4f1a6f92fa80775dd88bb400b365533396fc9325109a3c5dc4c4951615f2e265b5f82e9f454b17b96d5e languageName: node linkType: hard -"@next/swc-win32-arm64-msvc@npm:13.1.6": - version: 13.1.6 - resolution: "@next/swc-win32-arm64-msvc@npm:13.1.6" - conditions: os=win32 & cpu=arm64 +"@walletconnect/universal-provider@npm:2.10.6": + version: 2.10.6 + resolution: "@walletconnect/universal-provider@npm:2.10.6" + dependencies: + "@walletconnect/jsonrpc-http-connection": ^1.0.7 + "@walletconnect/jsonrpc-provider": 1.0.13 + "@walletconnect/jsonrpc-types": ^1.0.2 + "@walletconnect/jsonrpc-utils": ^1.0.7 + "@walletconnect/logger": ^2.0.1 + "@walletconnect/sign-client": 2.10.6 + "@walletconnect/types": 2.10.6 + "@walletconnect/utils": 2.10.6 + events: ^3.3.0 + checksum: c09fd28819389d990edafb261d0570d54527f0872dd3c2ac38ac0c6fc25905dc2248809fc4fea2de382b2f68c86eee8e1d192fb46402bcc49370d76959662436 languageName: node linkType: hard -"@next/swc-win32-ia32-msvc@npm:13.1.6": - version: 13.1.6 - resolution: "@next/swc-win32-ia32-msvc@npm:13.1.6" - conditions: os=win32 & cpu=ia32 +"@walletconnect/utils@npm:2.10.2": + version: 2.10.2 + resolution: "@walletconnect/utils@npm:2.10.2" + dependencies: + "@stablelib/chacha20poly1305": 1.0.1 + "@stablelib/hkdf": 1.0.1 + "@stablelib/random": ^1.0.2 + "@stablelib/sha256": 1.0.1 + "@stablelib/x25519": ^1.0.3 + "@walletconnect/relay-api": ^1.0.9 + "@walletconnect/safe-json": ^1.0.2 + "@walletconnect/time": ^1.0.2 + "@walletconnect/types": 2.10.2 + "@walletconnect/window-getters": ^1.0.1 + "@walletconnect/window-metadata": ^1.0.1 + detect-browser: 5.3.0 + query-string: 7.1.3 + uint8arrays: ^3.1.0 + checksum: 168e65d48ce6121f04f040662668fce63c8e42050c7c7d1da2948cf2e486657f8bf972f3386dc84251fcabf3626a26bb696e3363d55bc92826ec1602d7b493c7 languageName: node linkType: hard -"@next/swc-win32-x64-msvc@npm:13.1.6": - version: 13.1.6 - resolution: "@next/swc-win32-x64-msvc@npm:13.1.6" - conditions: os=win32 & cpu=x64 +"@walletconnect/utils@npm:2.10.6": + version: 2.10.6 + resolution: "@walletconnect/utils@npm:2.10.6" + dependencies: + "@stablelib/chacha20poly1305": 1.0.1 + "@stablelib/hkdf": 1.0.1 + "@stablelib/random": ^1.0.2 + "@stablelib/sha256": 1.0.1 + "@stablelib/x25519": ^1.0.3 + "@walletconnect/relay-api": ^1.0.9 + "@walletconnect/safe-json": ^1.0.2 + "@walletconnect/time": ^1.0.2 + "@walletconnect/types": 2.10.6 + "@walletconnect/window-getters": ^1.0.1 + "@walletconnect/window-metadata": ^1.0.1 + detect-browser: 5.3.0 + query-string: 7.1.3 + uint8arrays: ^3.1.0 + checksum: f6543601897aaa00f7aa0178df1cb88cca8f06f65846d3f4be85c458e79d04c462ad45e1f38d3fc993fcfa4f77871c92308e81620d6256da8138ae10e4b7546c languageName: node linkType: hard -"@noble/curves@npm:1.2.0, @noble/curves@npm:^1.2.0, @noble/curves@npm:~1.2.0": - version: 1.2.0 - resolution: "@noble/curves@npm:1.2.0" +"@walletconnect/window-getters@npm:^1.0.1": + version: 1.0.1 + resolution: "@walletconnect/window-getters@npm:1.0.1" dependencies: - "@noble/hashes": 1.3.2 - checksum: bb798d7a66d8e43789e93bc3c2ddff91a1e19fdb79a99b86cd98f1e5eff0ee2024a2672902c2576ef3577b6f282f3b5c778bebd55761ddbb30e36bf275e83dd0 + tslib: 1.14.1 + checksum: fae312c4e1be5574d97f071de58e6aa0d0296869761499caf9d4a9a5fd2643458af32233a2120521b00873a599ff88457d405bd82ced5fb5bd6dc3191c07a3e5 languageName: node linkType: hard -"@noble/hashes@npm:1.3.2, @noble/hashes@npm:^1.3.1, @noble/hashes@npm:~1.3.0, @noble/hashes@npm:~1.3.2": - version: 1.3.2 - resolution: "@noble/hashes@npm:1.3.2" - checksum: fe23536b436539d13f90e4b9be843cc63b1b17666a07634a2b1259dded6f490be3d050249e6af98076ea8f2ea0d56f578773c2197f2aa0eeaa5fba5bc18ba474 +"@walletconnect/window-metadata@npm:^1.0.1": + version: 1.0.1 + resolution: "@walletconnect/window-metadata@npm:1.0.1" + dependencies: + "@walletconnect/window-getters": ^1.0.1 + tslib: 1.14.1 + checksum: e82aea7195c6fe95c00e87bb38051c5549838c2e8302da94f1afa48206f79f0b620166c9820f847494505d282d1568e2086a1561b0493d2d0a1fa115f9106aef languageName: node linkType: hard -"@nodelib/fs.scandir@npm:2.1.5": - version: 2.1.5 - resolution: "@nodelib/fs.scandir@npm:2.1.5" - dependencies: - "@nodelib/fs.stat": 2.0.5 - run-parallel: ^1.1.9 - checksum: a970d595bd23c66c880e0ef1817791432dbb7acbb8d44b7e7d0e7a22f4521260d4a83f7f9fd61d44fda4610105577f8f58a60718105fb38352baed612fd79e59 +"abbrev@npm:1": + version: 1.1.1 + resolution: "abbrev@npm:1.1.1" + checksum: a4a97ec07d7ea112c517036882b2ac22f3109b7b19077dc656316d07d308438aac28e4d9746dc4d84bf6b1e75b4a7b0a5f3cb30592419f128ca9a8cee3bcfa17 languageName: node linkType: hard -"@nodelib/fs.stat@npm:2.0.5, @nodelib/fs.stat@npm:^2.0.2": - version: 2.0.5 - resolution: "@nodelib/fs.stat@npm:2.0.5" - checksum: 012480b5ca9d97bff9261571dbbec7bbc6033f69cc92908bc1ecfad0792361a5a1994bc48674b9ef76419d056a03efadfce5a6cf6dbc0a36559571a7a483f6f0 +"abbrev@npm:^2.0.0": + version: 2.0.0 + resolution: "abbrev@npm:2.0.0" + checksum: 0e994ad2aa6575f94670d8a2149afe94465de9cedaaaac364e7fb43a40c3691c980ff74899f682f4ca58fa96b4cbd7421a015d3a6defe43a442117d7821a2f36 languageName: node linkType: hard -"@nodelib/fs.walk@npm:^1.2.3": - version: 1.2.8 - resolution: "@nodelib/fs.walk@npm:1.2.8" - dependencies: - "@nodelib/fs.scandir": 2.1.5 - fastq: ^1.6.0 - checksum: 190c643f156d8f8f277bf2a6078af1ffde1fd43f498f187c2db24d35b4b4b5785c02c7dc52e356497b9a1b65b13edc996de08de0b961c32844364da02986dc53 +"abitype@npm:0.8.7": + version: 0.8.7 + resolution: "abitype@npm:0.8.7" + peerDependencies: + typescript: ">=5.0.4" + zod: ^3 >=3.19.1 + peerDependenciesMeta: + zod: + optional: true + checksum: 4351466808969bcc73e5c535c3d96bb687ee2be0bccd48eba024c47e6cc248f0c8bd368f9e42dab35d39923e63b1349ade470f72812de27127968caf1a1426c9 languageName: node linkType: hard -"@npmcli/agent@npm:^2.0.0": - version: 2.2.0 - resolution: "@npmcli/agent@npm:2.2.0" - dependencies: - agent-base: ^7.1.0 - http-proxy-agent: ^7.0.0 - https-proxy-agent: ^7.0.1 - lru-cache: ^10.0.1 - socks-proxy-agent: ^8.0.1 - checksum: 3b25312edbdfaa4089af28e2d423b6f19838b945e47765b0c8174c1395c79d43c3ad6d23cb364b43f59fd3acb02c93e3b493f72ddbe3dfea04c86843a7311fc4 +"abitype@npm:0.9.8": + version: 0.9.8 + resolution: "abitype@npm:0.9.8" + peerDependencies: + typescript: ">=5.0.4" + zod: ^3 >=3.19.1 + peerDependenciesMeta: + typescript: + optional: true + zod: + optional: true + checksum: d7d887f29d6821e3f7a400de9620511b80ead3f85c5c87308aaec97965d3493e6687ed816e88722b4f512249bd66dee9e69231b49af0e1db8f69400a62c87cf6 languageName: node linkType: hard -"@npmcli/fs@npm:^1.0.0": - version: 1.1.1 - resolution: "@npmcli/fs@npm:1.1.1" - dependencies: - "@gar/promisify": ^1.0.1 - semver: ^7.3.5 - checksum: f5ad92f157ed222e4e31c352333d0901df02c7c04311e42a81d8eb555d4ec4276ea9c635011757de20cc476755af33e91622838de573b17e52e2e7703f0a9965 +"acorn-jsx@npm:^5.3.2": + version: 5.3.2 + resolution: "acorn-jsx@npm:5.3.2" + peerDependencies: + acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 + checksum: c3d3b2a89c9a056b205b69530a37b972b404ee46ec8e5b341666f9513d3163e2a4f214a71f4dfc7370f5a9c07472d2fd1c11c91c3f03d093e37637d95da98950 languageName: node linkType: hard -"@npmcli/fs@npm:^3.1.0": - version: 3.1.0 - resolution: "@npmcli/fs@npm:3.1.0" - dependencies: - semver: ^7.3.5 - checksum: a50a6818de5fc557d0b0e6f50ec780a7a02ab8ad07e5ac8b16bf519e0ad60a144ac64f97d05c443c3367235d337182e1d012bbac0eb8dbae8dc7b40b193efd0e +"acorn-walk@npm:^8.1.1": + version: 8.3.2 + resolution: "acorn-walk@npm:8.3.2" + checksum: 3626b9d26a37b1b427796feaa5261faf712307a8920392c8dce9a5739fb31077667f4ad2ec71c7ac6aaf9f61f04a9d3d67ff56f459587206fc04aa31c27ef392 languageName: node linkType: hard -"@npmcli/move-file@npm:^1.0.1": - version: 1.1.2 - resolution: "@npmcli/move-file@npm:1.1.2" - dependencies: - mkdirp: ^1.0.4 - rimraf: ^3.0.2 - checksum: c96381d4a37448ea280951e46233f7e541058cf57a57d4094dd4bdcaae43fa5872b5f2eb6bfb004591a68e29c5877abe3cdc210cb3588cbf20ab2877f31a7de7 +"acorn@npm:^8.11.3, acorn@npm:^8.4.1, acorn@npm:^8.6.0, acorn@npm:^8.9.0": + version: 8.11.3 + resolution: "acorn@npm:8.11.3" + bin: + acorn: bin/acorn + checksum: 76d8e7d559512566b43ab4aadc374f11f563f0a9e21626dd59cb2888444e9445923ae9f3699972767f18af61df89cd89f5eaaf772d1327b055b45cb829b4a88c languageName: node linkType: hard -"@npmcli/package-json@npm:^2.0.0": - version: 2.0.0 - resolution: "@npmcli/package-json@npm:2.0.0" - dependencies: - json-parse-even-better-errors: ^2.3.1 - checksum: 7a598e42d2778654ec87438ebfafbcbafbe5a5f5e89ed2ca1db6ca3f94ef14655e304aa41f77632a2a3f5c66b6bd5960bd9370e0ceb4902ea09346720364f9e4 +"aes-js@npm:3.0.0": + version: 3.0.0 + resolution: "aes-js@npm:3.0.0" + checksum: 251e26d533cd1a915b44896b17d5ed68c24a02484cfdd2e74ec700a309267db96651ea4eb657bf20aac32a3baa61f6e34edf8e2fec2de440a655da9942d334b8 languageName: node linkType: hard -"@parcel/watcher-android-arm64@npm:2.3.0": - version: 2.3.0 - resolution: "@parcel/watcher-android-arm64@npm:2.3.0" - conditions: os=android & cpu=arm64 +"aes-js@npm:^3.1.2": + version: 3.1.2 + resolution: "aes-js@npm:3.1.2" + checksum: 062154d50b1e433cc8c3b8ca7879f3a6375d5e79c2a507b2b6c4ec920b4cd851bf2afa7f65c98761a9da89c0ab618cbe6529e8e9a1c71f93290b53128fb8f712 languageName: node linkType: hard -"@parcel/watcher-darwin-arm64@npm:2.3.0": - version: 2.3.0 - resolution: "@parcel/watcher-darwin-arm64@npm:2.3.0" - conditions: os=darwin & cpu=arm64 +"agent-base@npm:6": + version: 6.0.2 + resolution: "agent-base@npm:6.0.2" + dependencies: + debug: 4 + checksum: f52b6872cc96fd5f622071b71ef200e01c7c4c454ee68bc9accca90c98cfb39f2810e3e9aa330435835eedc8c23f4f8a15267f67c6e245d2b33757575bdac49d languageName: node linkType: hard -"@parcel/watcher-darwin-x64@npm:2.3.0": - version: 2.3.0 - resolution: "@parcel/watcher-darwin-x64@npm:2.3.0" - conditions: os=darwin & cpu=x64 +"agent-base@npm:^7.0.2, agent-base@npm:^7.1.0": + version: 7.1.0 + resolution: "agent-base@npm:7.1.0" + dependencies: + debug: ^4.3.4 + checksum: f7828f991470a0cc22cb579c86a18cbae83d8a3cbed39992ab34fc7217c4d126017f1c74d0ab66be87f71455318a8ea3e757d6a37881b8d0f2a2c6aa55e5418f languageName: node linkType: hard -"@parcel/watcher-freebsd-x64@npm:2.3.0": - version: 2.3.0 - resolution: "@parcel/watcher-freebsd-x64@npm:2.3.0" - conditions: os=freebsd & cpu=x64 +"aggregate-error@npm:^3.0.0": + version: 3.1.0 + resolution: "aggregate-error@npm:3.1.0" + dependencies: + clean-stack: ^2.0.0 + indent-string: ^4.0.0 + checksum: 1101a33f21baa27a2fa8e04b698271e64616b886795fd43c31068c07533c7b3facfcaf4e9e0cab3624bd88f729a592f1c901a1a229c9e490eafce411a8644b79 languageName: node linkType: hard -"@parcel/watcher-linux-arm-glibc@npm:2.3.0": - version: 2.3.0 - resolution: "@parcel/watcher-linux-arm-glibc@npm:2.3.0" - conditions: os=linux & cpu=arm & libc=glibc +"ahocorasick@npm:1.0.2": + version: 1.0.2 + resolution: "ahocorasick@npm:1.0.2" + checksum: a13ce4403554ae782cf5e28d468a732acf1fd3d0bff251f5dcfddfa5497b6cc343948d69cd94dfdbe8d4dfdb81e2b34cb1c92079e6301f38b0143d314fb95bd6 languageName: node linkType: hard -"@parcel/watcher-linux-arm64-glibc@npm:2.3.0": - version: 2.3.0 - resolution: "@parcel/watcher-linux-arm64-glibc@npm:2.3.0" - conditions: os=linux & cpu=arm64 & libc=glibc +"ajv@npm:8.6.3": + version: 8.6.3 + resolution: "ajv@npm:8.6.3" + dependencies: + fast-deep-equal: ^3.1.1 + json-schema-traverse: ^1.0.0 + require-from-string: ^2.0.2 + uri-js: ^4.2.2 + checksum: 690ffb9408415fdab43686b3f92037ba0c8362f5d0709a123ba3fb546e6ad81414455f80a2b5cc432ce924afe9864671198f022bc331a19c072d4ede152ec3ca languageName: node linkType: hard -"@parcel/watcher-linux-arm64-musl@npm:2.3.0": - version: 2.3.0 - resolution: "@parcel/watcher-linux-arm64-musl@npm:2.3.0" - conditions: os=linux & cpu=arm64 & libc=musl +"ajv@npm:^6.0.0, ajv@npm:^6.10.0, ajv@npm:^6.12.4": + version: 6.12.6 + resolution: "ajv@npm:6.12.6" + dependencies: + fast-deep-equal: ^3.1.1 + fast-json-stable-stringify: ^2.0.0 + json-schema-traverse: ^0.4.1 + uri-js: ^4.2.2 + checksum: 874972efe5c4202ab0a68379481fbd3d1b5d0a7bd6d3cc21d40d3536ebff3352a2a1fabb632d4fd2cc7fe4cbdcd5ed6782084c9bbf7f32a1536d18f9da5007d4 languageName: node linkType: hard -"@parcel/watcher-linux-x64-glibc@npm:2.3.0": - version: 2.3.0 - resolution: "@parcel/watcher-linux-x64-glibc@npm:2.3.0" - conditions: os=linux & cpu=x64 & libc=glibc +"ansi-escapes@npm:^4.3.0": + version: 4.3.2 + resolution: "ansi-escapes@npm:4.3.2" + dependencies: + type-fest: ^0.21.3 + checksum: 93111c42189c0a6bed9cdb4d7f2829548e943827ee8479c74d6e0b22ee127b2a21d3f8b5ca57723b8ef78ce011fbfc2784350eb2bde3ccfccf2f575fa8489815 languageName: node linkType: hard -"@parcel/watcher-linux-x64-musl@npm:2.3.0": - version: 2.3.0 - resolution: "@parcel/watcher-linux-x64-musl@npm:2.3.0" - conditions: os=linux & cpu=x64 & libc=musl +"ansi-regex@npm:^5.0.1": + version: 5.0.1 + resolution: "ansi-regex@npm:5.0.1" + checksum: 2aa4bb54caf2d622f1afdad09441695af2a83aa3fe8b8afa581d205e57ed4261c183c4d3877cee25794443fde5876417d859c108078ab788d6af7e4fe52eb66b languageName: node linkType: hard -"@parcel/watcher-wasm@npm:2.3.0": - version: 2.3.0 - resolution: "@parcel/watcher-wasm@npm:2.3.0" +"ansi-regex@npm:^6.0.1": + version: 6.0.1 + resolution: "ansi-regex@npm:6.0.1" + checksum: 1ff8b7667cded1de4fa2c9ae283e979fc87036864317da86a2e546725f96406746411d0d85e87a2d12fa5abd715d90006de7fa4fa0477c92321ad3b4c7d4e169 + languageName: node + linkType: hard + +"ansi-styles@npm:^3.2.1": + version: 3.2.1 + resolution: "ansi-styles@npm:3.2.1" dependencies: - is-glob: ^4.0.3 - micromatch: ^4.0.5 - napi-wasm: ^1.1.0 - checksum: 61e3209e5253fc4eda2ddf903877475836cc3c65dca8b19c538de4b1fb598c17ca2797ab52cb45f61c01be963aed44059f2f9e536eb68539e31f27f1fcfb09ba + color-convert: ^1.9.0 + checksum: d85ade01c10e5dd77b6c89f34ed7531da5830d2cb5882c645f330079975b716438cd7ebb81d0d6e6b4f9c577f19ae41ab55f07f19786b02f9dfd9e0377395665 languageName: node linkType: hard -"@parcel/watcher-win32-arm64@npm:2.3.0": - version: 2.3.0 - resolution: "@parcel/watcher-win32-arm64@npm:2.3.0" - conditions: os=win32 & cpu=arm64 +"ansi-styles@npm:^4.0.0, ansi-styles@npm:^4.1.0": + version: 4.3.0 + resolution: "ansi-styles@npm:4.3.0" + dependencies: + color-convert: ^2.0.1 + checksum: 513b44c3b2105dd14cc42a19271e80f386466c4be574bccf60b627432f9198571ebf4ab1e4c3ba17347658f4ee1711c163d574248c0c1cdc2d5917a0ad582ec4 languageName: node linkType: hard -"@parcel/watcher-win32-ia32@npm:2.3.0": - version: 2.3.0 - resolution: "@parcel/watcher-win32-ia32@npm:2.3.0" - conditions: os=win32 & cpu=ia32 +"ansi-styles@npm:^6.0.0, ansi-styles@npm:^6.1.0": + version: 6.2.1 + resolution: "ansi-styles@npm:6.2.1" + checksum: ef940f2f0ced1a6347398da88a91da7930c33ecac3c77b72c5905f8b8fe402c52e6fde304ff5347f616e27a742da3f1dc76de98f6866c69251ad0b07a66776d9 languageName: node linkType: hard -"@parcel/watcher-win32-x64@npm:2.3.0": - version: 2.3.0 - resolution: "@parcel/watcher-win32-x64@npm:2.3.0" - conditions: os=win32 & cpu=x64 +"any-promise@npm:^1.0.0, any-promise@npm:^1.1.0, any-promise@npm:~1.3.0": + version: 1.3.0 + resolution: "any-promise@npm:1.3.0" + checksum: 0ee8a9bdbe882c90464d75d1f55cf027f5458650c4bd1f0467e65aec38ccccda07ca5844969ee77ed46d04e7dded3eaceb027e8d32f385688523fe305fa7e1de languageName: node linkType: hard -"@parcel/watcher@npm:^2.3.0": - version: 2.3.0 - resolution: "@parcel/watcher@npm:2.3.0" - dependencies: - "@parcel/watcher-android-arm64": 2.3.0 - "@parcel/watcher-darwin-arm64": 2.3.0 - "@parcel/watcher-darwin-x64": 2.3.0 - "@parcel/watcher-freebsd-x64": 2.3.0 - "@parcel/watcher-linux-arm-glibc": 2.3.0 - "@parcel/watcher-linux-arm64-glibc": 2.3.0 - "@parcel/watcher-linux-arm64-musl": 2.3.0 - "@parcel/watcher-linux-x64-glibc": 2.3.0 - "@parcel/watcher-linux-x64-musl": 2.3.0 - "@parcel/watcher-win32-arm64": 2.3.0 - "@parcel/watcher-win32-ia32": 2.3.0 - "@parcel/watcher-win32-x64": 2.3.0 - detect-libc: ^1.0.3 - is-glob: ^4.0.3 - micromatch: ^4.0.5 - node-addon-api: ^7.0.0 - node-gyp: latest - dependenciesMeta: - "@parcel/watcher-android-arm64": - optional: true - "@parcel/watcher-darwin-arm64": - optional: true - "@parcel/watcher-darwin-x64": - optional: true - "@parcel/watcher-freebsd-x64": - optional: true - "@parcel/watcher-linux-arm-glibc": - optional: true - "@parcel/watcher-linux-arm64-glibc": - optional: true - "@parcel/watcher-linux-arm64-musl": - optional: true - "@parcel/watcher-linux-x64-glibc": - optional: true - "@parcel/watcher-linux-x64-musl": - optional: true - "@parcel/watcher-win32-arm64": - optional: true - "@parcel/watcher-win32-ia32": - optional: true - "@parcel/watcher-win32-x64": - optional: true - checksum: 12f494998dbae363cc9c48b49f7e09589c179e84133e3b6cd0c087573a7dc70b3adec458f95b39e3b8e4d9c93cff770ce15b1d2452d6741a5047f1ca90485ded +"anymatch@npm:^3.1.3, anymatch@npm:~3.1.1, anymatch@npm:~3.1.2": + version: 3.1.3 + resolution: "anymatch@npm:3.1.3" + dependencies: + normalize-path: ^3.0.0 + picomatch: ^2.0.4 + checksum: 3e044fd6d1d26545f235a9fe4d7a534e2029d8e59fa7fd9f2a6eb21230f6b5380ea1eaf55136e60cbf8e613544b3b766e7a6fa2102e2a3a117505466e3025dc2 languageName: node linkType: hard -"@pkgjs/parseargs@npm:^0.11.0": - version: 0.11.0 - resolution: "@pkgjs/parseargs@npm:0.11.0" - checksum: 6ad6a00fc4f2f2cfc6bff76fb1d88b8ee20bc0601e18ebb01b6d4be583733a860239a521a7fbca73b612e66705078809483549d2b18f370eb346c5155c8e4a0f +"aproba@npm:^1.0.3 || ^2.0.0": + version: 2.0.0 + resolution: "aproba@npm:2.0.0" + checksum: 5615cadcfb45289eea63f8afd064ab656006361020e1735112e346593856f87435e02d8dcc7ff0d11928bc7d425f27bc7c2a84f6c0b35ab0ff659c814c138a24 languageName: node linkType: hard -"@rainbow-me/rainbowkit@npm:1.1.2": - version: 1.1.2 - resolution: "@rainbow-me/rainbowkit@npm:1.1.2" +"are-we-there-yet@npm:^2.0.0": + version: 2.0.0 + resolution: "are-we-there-yet@npm:2.0.0" dependencies: - "@vanilla-extract/css": 1.9.1 - "@vanilla-extract/dynamic": 2.0.2 - "@vanilla-extract/sprinkles": 1.5.0 - clsx: 1.1.1 - i18n-js: ^4.3.2 - qrcode: 1.5.0 - react-remove-scroll: 2.5.4 - peerDependencies: - react: ">=17" - react-dom: ">=17" - viem: ~0.3.19 || ^1.0.0 - wagmi: ~1.0.1 || ~1.1.0 || ~1.2.0 || ~1.3.0 || ~1.4.0 - checksum: 54087b6991b8bd058a653f31f7067f88f9122895d6b11f3280b7b45135ca498b928e11b2b11fdee509d9d919931fe5df03006e29c7af06b4f3927cd1f2d1c431 - languageName: node - linkType: hard - -"@remix-run/dev@npm:1.12.0": - version: 1.12.0 - resolution: "@remix-run/dev@npm:1.12.0" - dependencies: - "@babel/core": ^7.18.6 - "@babel/generator": ^7.18.6 - "@babel/parser": ^7.18.6 - "@babel/plugin-syntax-jsx": ^7.18.6 - "@babel/plugin-syntax-typescript": ^7.20.0 - "@babel/preset-env": ^7.18.6 - "@babel/preset-typescript": ^7.18.6 - "@babel/traverse": ^7.18.6 - "@babel/types": ^7.20.2 - "@esbuild-plugins/node-modules-polyfill": ^0.1.4 - "@npmcli/package-json": ^2.0.0 - "@remix-run/server-runtime": 1.12.0 - "@vanilla-extract/integration": ^6.0.2 - arg: ^5.0.1 - cacache: ^15.0.5 - chalk: ^4.1.2 - chokidar: ^3.5.1 - dotenv: ^16.0.0 - esbuild: 0.16.3 - execa: 5.1.1 - exit-hook: 2.2.1 - express: ^4.17.1 - fast-glob: 3.2.11 - fs-extra: ^10.0.0 - get-port: ^5.1.1 - gunzip-maybe: ^1.4.2 - inquirer: ^8.2.1 - jsesc: 3.0.2 - json5: ^2.2.1 - lodash: ^4.17.21 - lodash.debounce: ^4.0.8 - lru-cache: ^7.14.1 - minimatch: ^3.0.4 - node-fetch: ^2.6.7 - ora: ^5.4.1 - postcss: ^8.4.19 - postcss-discard-duplicates: ^5.1.0 - postcss-modules: ^6.0.0 - prettier: 2.7.1 - pretty-ms: ^7.0.1 - proxy-agent: ^5.0.0 - recast: ^0.21.5 - remark-frontmatter: 4.0.1 - remark-mdx-frontmatter: ^1.0.1 - semver: ^7.3.7 - sort-package-json: ^1.55.0 - tar-fs: ^2.1.1 - tsconfig-paths: ^4.0.0 - ws: ^7.4.5 - xdm: ^2.0.0 - peerDependencies: - "@remix-run/serve": ^1.12.0 - peerDependenciesMeta: - "@remix-run/serve": - optional: true - bin: - remix: dist/cli.js - checksum: 318a9aa0f6074500fd049133008da171e6b2dd7be0c38d4590dcedf6d58d3abc7d9eaf38d6acbc88d402d5d2a1fb3c396e3f0c36ebd1fe46652122e9cb81de2c + delegates: ^1.0.0 + readable-stream: ^3.6.0 + checksum: 6c80b4fd04ecee6ba6e737e0b72a4b41bdc64b7d279edfc998678567ff583c8df27e27523bc789f2c99be603ffa9eaa612803da1d886962d2086e7ff6fa90c7c languageName: node linkType: hard -"@remix-run/router@npm:1.3.1": - version: 1.3.1 - resolution: "@remix-run/router@npm:1.3.1" - checksum: c91cba100b13fbb83cdaf43ca66b0d9fc1ab9dfe0bc58ac80ff2a4889488bf518a111267c790350eac8c7f764cc7809402430de15bdf70282d0bd60acf06d9de +"arg@npm:4.1.0": + version: 4.1.0 + resolution: "arg@npm:4.1.0" + checksum: ea97513bf27aa5f2acf5dadf41501108fe786631fdd9d33f373174631800b57f85272dbf8190e937008a02b38d5c2f679514146f89a23123d8cb4ba30e8c066c languageName: node linkType: hard -"@remix-run/server-runtime@npm:1.12.0": - version: 1.12.0 - resolution: "@remix-run/server-runtime@npm:1.12.0" - dependencies: - "@remix-run/router": 1.3.1 - "@types/cookie": ^0.4.0 - "@types/react": ^18.0.15 - "@web3-storage/multipart-parser": ^1.0.0 - cookie: ^0.4.1 - set-cookie-parser: ^2.4.8 - source-map: ^0.7.3 - checksum: 67b4d433a9b9ef494b9e2c5691a08b627697f197f7973d9c0b36904becf402d8389b19cf4978ed69a2e918045206bb7382c1f5933b562c7b0358dfbc1eecda0b +"arg@npm:^4.1.0": + version: 4.1.3 + resolution: "arg@npm:4.1.3" + checksum: 544af8dd3f60546d3e4aff084d451b96961d2267d668670199692f8d054f0415d86fc5497d0e641e91546f0aa920e7c29e5250e99fc89f5552a34b5d93b77f43 languageName: node linkType: hard -"@rollup/pluginutils@npm:^4.0.0": - version: 4.2.1 - resolution: "@rollup/pluginutils@npm:4.2.1" - dependencies: - estree-walker: ^2.0.1 - picomatch: ^2.2.2 - checksum: 6bc41f22b1a0f1efec3043899e4d3b6b1497b3dea4d94292d8f83b4cf07a1073ecbaedd562a22d11913ff7659f459677b01b09e9598a98936e746780ecc93a12 +"arg@npm:^5.0.2": + version: 5.0.2 + resolution: "arg@npm:5.0.2" + checksum: 6c69ada1a9943d332d9e5382393e897c500908d91d5cb735a01120d5f71daf1b339b7b8980cbeaba8fd1afc68e658a739746179e4315a26e8a28951ff9930078 languageName: node linkType: hard -"@rushstack/eslint-patch@npm:^1.1.3": - version: 1.5.1 - resolution: "@rushstack/eslint-patch@npm:1.5.1" - checksum: e4c25322312dbaa29e835a7ab4fbac53c8731dd0da65e46646e38945e296429e7fb91c2ef3da5af5d5938d44b0cde1d5290438ebb3dcb015e02b80b5e2530d24 +"argparse@npm:^2.0.1": + version: 2.0.1 + resolution: "argparse@npm:2.0.1" + checksum: 83644b56493e89a254bae05702abf3a1101b4fa4d0ca31df1c9985275a5a5bd47b3c27b7fa0b71098d41114d8ca000e6ed90cad764b306f8a503665e4d517ced languageName: node linkType: hard -"@safe-global/safe-apps-provider@npm:^0.17.1": - version: 0.17.1 - resolution: "@safe-global/safe-apps-provider@npm:0.17.1" +"aria-query@npm:^5.3.0": + version: 5.3.0 + resolution: "aria-query@npm:5.3.0" dependencies: - "@safe-global/safe-apps-sdk": 8.0.0 - events: ^3.3.0 - checksum: 02f0415a4bb77b82e55f0055be045af715d9c0ea0fa7daa4e0604f40cc2189051d111b8ead67ddab0e99b1e423b444753c11d69bb213d51e459f706d2b430e34 + dequal: ^2.0.3 + checksum: 305bd73c76756117b59aba121d08f413c7ff5e80fa1b98e217a3443fcddb9a232ee790e24e432b59ae7625aebcf4c47cb01c2cac872994f0b426f5bdfcd96ba9 languageName: node linkType: hard -"@safe-global/safe-apps-sdk@npm:8.0.0": - version: 8.0.0 - resolution: "@safe-global/safe-apps-sdk@npm:8.0.0" +"array-buffer-byte-length@npm:^1.0.0": + version: 1.0.0 + resolution: "array-buffer-byte-length@npm:1.0.0" dependencies: - "@safe-global/safe-gateway-typescript-sdk": ^3.5.3 - viem: ^1.0.0 - checksum: 07295c44afa4d85fbc9419b4baac56b4fb493816d4438d6956842261e0689fdcea639ab86b39ee693c456fddace17b6c556c77a637892634a57de96f6b00b0c3 + call-bind: ^1.0.2 + is-array-buffer: ^3.0.1 + checksum: 044e101ce150f4804ad19c51d6c4d4cfa505c5b2577bd179256e4aa3f3f6a0a5e9874c78cd428ee566ac574c8a04d7ce21af9fe52e844abfdccb82b33035a7c3 languageName: node linkType: hard -"@safe-global/safe-apps-sdk@npm:^8.0.0": - version: 8.1.0 - resolution: "@safe-global/safe-apps-sdk@npm:8.1.0" +"array-includes@npm:^3.1.6, array-includes@npm:^3.1.7": + version: 3.1.7 + resolution: "array-includes@npm:3.1.7" dependencies: - "@safe-global/safe-gateway-typescript-sdk": ^3.5.3 - viem: ^1.0.0 - checksum: e9d31ed6d9cd2cd9ed71ef5a0e1f6ecfca9f0c62acb9b86a0ddb1b65a609090f2297c4304591ac0518b266a1bcc88d1dad31b0d05e50c7732accccb65adab754 + call-bind: ^1.0.2 + define-properties: ^1.2.0 + es-abstract: ^1.22.1 + get-intrinsic: ^1.2.1 + is-string: ^1.0.7 + checksum: 06f9e4598fac12a919f7c59a3f04f010ea07f0b7f0585465ed12ef528a60e45f374e79d1bddbb34cdd4338357d00023ddbd0ac18b0be36964f5e726e8965d7fc languageName: node linkType: hard -"@safe-global/safe-gateway-typescript-sdk@npm:^3.5.3": - version: 3.13.2 - resolution: "@safe-global/safe-gateway-typescript-sdk@npm:3.13.2" - checksum: a1689557743b70ce8814974443d28d54d39d73e16ed2f5eeb044740287e38c052af00016278ba6aa0ab8523ad5dec4b79c609e5d192bc8a19434c076210050ed +"array-union@npm:^2.1.0": + version: 2.1.0 + resolution: "array-union@npm:2.1.0" + checksum: 5bee12395cba82da674931df6d0fea23c4aa4660cb3b338ced9f828782a65caa232573e6bf3968f23e0c5eb301764a382cef2f128b170a9dc59de0e36c39f98d languageName: node linkType: hard -"@scure/base@npm:~1.1.0, @scure/base@npm:~1.1.2": - version: 1.1.3 - resolution: "@scure/base@npm:1.1.3" - checksum: 1606ab8a4db898cb3a1ada16c15437c3bce4e25854fadc8eb03ae93cbbbac1ed90655af4b0be3da37e12056fef11c0374499f69b9e658c9e5b7b3e06353c630c +"array.prototype.findlastindex@npm:^1.2.3": + version: 1.2.3 + resolution: "array.prototype.findlastindex@npm:1.2.3" + dependencies: + call-bind: ^1.0.2 + define-properties: ^1.2.0 + es-abstract: ^1.22.1 + es-shim-unscopables: ^1.0.0 + get-intrinsic: ^1.2.1 + checksum: 31f35d7b370c84db56484618132041a9af401b338f51899c2e78ef7690fbba5909ee7ca3c59a7192085b328cc0c68c6fd1f6d1553db01a689a589ae510f3966e languageName: node linkType: hard -"@scure/bip32@npm:1.3.2": +"array.prototype.flat@npm:^1.3.1, array.prototype.flat@npm:^1.3.2": version: 1.3.2 - resolution: "@scure/bip32@npm:1.3.2" + resolution: "array.prototype.flat@npm:1.3.2" dependencies: - "@noble/curves": ~1.2.0 - "@noble/hashes": ~1.3.2 - "@scure/base": ~1.1.2 - checksum: c5ae84fae43490853693b481531132b89e056d45c945fc8b92b9d032577f753dfd79c5a7bbcbf0a7f035951006ff0311b6cf7a389e26c9ec6335e42b20c53157 - languageName: node - linkType: hard - -"@scure/bip39@npm:1.2.1": - version: 1.2.1 - resolution: "@scure/bip39@npm:1.2.1" - dependencies: - "@noble/hashes": ~1.3.0 - "@scure/base": ~1.1.0 - checksum: c5bd6f1328fdbeae2dcdd891825b1610225310e5e62a4942714db51066866e4f7bef242c7b06a1b9dcc8043a4a13412cf5c5df76d3b10aa9e36b82e9b6e3eeaa + call-bind: ^1.0.2 + define-properties: ^1.2.0 + es-abstract: ^1.22.1 + es-shim-unscopables: ^1.0.0 + checksum: 5d6b4bf102065fb3f43764bfff6feb3295d372ce89591e6005df3d0ce388527a9f03c909af6f2a973969a4d178ab232ffc9236654149173e0e187ec3a1a6b87b languageName: node linkType: hard -"@se-2/foundry@workspace:packages/foundry": - version: 0.0.0-use.local - resolution: "@se-2/foundry@workspace:packages/foundry" - dependencies: - "@types/prettier": 2 - "@types/qrcode": 1 - dotenv: ~16.3.1 - envfile: ~6.18.0 - ethers: ~5.7.1 - prettier: ~2.8.8 - qrcode: ~1.5.3 - toml: ~3.0.0 - languageName: unknown - linkType: soft - -"@se-2/nextjs@workspace:packages/nextjs": - version: 0.0.0-use.local - resolution: "@se-2/nextjs@workspace:packages/nextjs" +"array.prototype.flatmap@npm:^1.3.1, array.prototype.flatmap@npm:^1.3.2": + version: 1.3.2 + resolution: "array.prototype.flatmap@npm:1.3.2" dependencies: - "@ethersproject/providers": ~5.7.2 - "@hatsprotocol/sdk-v1-core": ^0.8.0 - "@heroicons/react": ~2.0.11 - "@rainbow-me/rainbowkit": 1.1.2 - "@trivago/prettier-plugin-sort-imports": ~4.1.1 - "@types/node": ^17.0.45 - "@types/react": ^18.0.21 - "@types/react-copy-to-clipboard": ^5.0.4 - "@typescript-eslint/eslint-plugin": ~5.40.0 - "@uniswap/sdk-core": ~4.0.1 - "@uniswap/v2-sdk": ~3.0.1 - autoprefixer: ~10.4.12 - blo: ~1.0.1 - daisyui: ~3.5.1 - eslint: ~8.24.0 - eslint-config-next: ~13.1.6 - eslint-config-prettier: ~8.5.0 - eslint-plugin-prettier: ~4.2.1 - next: ~13.1.6 - nextjs-progressbar: ~0.0.16 - postcss: ~8.4.16 - prettier: ~2.8.4 - qrcode.react: ~3.1.0 - react: ~18.2.0 - react-copy-to-clipboard: ~5.1.0 - react-dom: ~18.2.0 - react-hot-toast: ~2.4.0 - tailwindcss: ~3.3.3 - type-fest: ~4.6.0 - typescript: ~5.1.6 - use-debounce: ~8.0.4 - usehooks-ts: ~2.9.1 - vercel: ~28.15.1 - viem: ^1.19.11 - wagmi: 1.4.4 - zustand: ~4.1.2 - languageName: unknown - linkType: soft - -"@sindresorhus/is@npm:^4.0.0": - version: 4.6.0 - resolution: "@sindresorhus/is@npm:4.6.0" - checksum: 83839f13da2c29d55c97abc3bc2c55b250d33a0447554997a85c539e058e57b8da092da396e252b11ec24a0279a0bed1f537fa26302209327060643e327f81d2 + call-bind: ^1.0.2 + define-properties: ^1.2.0 + es-abstract: ^1.22.1 + es-shim-unscopables: ^1.0.0 + checksum: ce09fe21dc0bcd4f30271f8144083aa8c13d4639074d6c8dc82054b847c7fc9a0c97f857491f4da19d4003e507172a78f4bcd12903098adac8b9cd374f734be3 languageName: node linkType: hard -"@solana/buffer-layout@npm:^4.0.0": - version: 4.0.1 - resolution: "@solana/buffer-layout@npm:4.0.1" +"array.prototype.tosorted@npm:^1.1.1": + version: 1.1.2 + resolution: "array.prototype.tosorted@npm:1.1.2" dependencies: - buffer: ~6.0.3 - checksum: bf846888e813187243d4008a7a9f58b49d16cbd995b9d7f1b72898aa510ed77b1ce5e8468e7b2fd26dd81e557a4e74a666e21fccb95f123c1f740d41138bbacd + call-bind: ^1.0.2 + define-properties: ^1.2.0 + es-abstract: ^1.22.1 + es-shim-unscopables: ^1.0.0 + get-intrinsic: ^1.2.1 + checksum: 3607a7d6b117f0ffa6f4012457b7af0d47d38cf05e01d50e09682fd2fb782a66093a5e5fbbdbad77c8c824794a9d892a51844041641f719ad41e3a974f0764de languageName: node linkType: hard -"@solana/web3.js@npm:^1.70.1": - version: 1.87.6 - resolution: "@solana/web3.js@npm:1.87.6" +"arraybuffer.prototype.slice@npm:^1.0.2": + version: 1.0.2 + resolution: "arraybuffer.prototype.slice@npm:1.0.2" dependencies: - "@babel/runtime": ^7.23.2 - "@noble/curves": ^1.2.0 - "@noble/hashes": ^1.3.1 - "@solana/buffer-layout": ^4.0.0 - agentkeepalive: ^4.3.0 - bigint-buffer: ^1.1.5 - bn.js: ^5.2.1 - borsh: ^0.7.0 - bs58: ^4.0.1 - buffer: 6.0.3 - fast-stable-stringify: ^1.0.0 - jayson: ^4.1.0 - node-fetch: ^2.6.12 - rpc-websockets: ^7.5.1 - superstruct: ^0.14.2 - checksum: 182eb2a953f6ebebdfbc7dfda031d1985fb1591a2aa38b388d5dfb9fd3df0fb53a3962373384dbd91df343e148ec3d42a579324effab9ca86f0560c4f6f08481 + array-buffer-byte-length: ^1.0.0 + call-bind: ^1.0.2 + define-properties: ^1.2.0 + es-abstract: ^1.22.1 + get-intrinsic: ^1.2.1 + is-array-buffer: ^3.0.2 + is-shared-array-buffer: ^1.0.2 + checksum: c200faf437786f5b2c80d4564ff5481c886a16dee642ef02abdc7306c7edd523d1f01d1dd12b769c7eb42ac9bc53874510db19a92a2c035c0f6696172aafa5d3 languageName: node linkType: hard -"@stablelib/aead@npm:^1.0.1": - version: 1.0.1 - resolution: "@stablelib/aead@npm:1.0.1" - checksum: 1a6f68d138f105d17dd65349751515bd252ab0498c77255b8555478d28415600dde493f909eb718245047a993f838dfae546071e1687566ffb7b8c3e10c918d9 +"ast-types-flow@npm:^0.0.8": + version: 0.0.8 + resolution: "ast-types-flow@npm:0.0.8" + checksum: 0a64706609a179233aac23817837abab614f3548c252a2d3d79ea1e10c74aa28a0846e11f466cf72771b6ed8713abc094dcf8c40c3ec4207da163efa525a94a8 languageName: node linkType: hard -"@stablelib/binary@npm:^1.0.1": - version: 1.0.1 - resolution: "@stablelib/binary@npm:1.0.1" - dependencies: - "@stablelib/int": ^1.0.1 - checksum: dca9b98eb1f56a4002b5b9e7351fbc49f3d8616af87007c01e833bd763ac89214eb5f3b7e18673c91ce59d4a0e4856a2eb661ace33d39f17fb1ad267271fccd8 +"astral-regex@npm:^2.0.0": + version: 2.0.0 + resolution: "astral-regex@npm:2.0.0" + checksum: 876231688c66400473ba505731df37ea436e574dd524520294cc3bbc54ea40334865e01fa0d074d74d036ee874ee7e62f486ea38bc421ee8e6a871c06f011766 languageName: node linkType: hard -"@stablelib/bytes@npm:^1.0.1": - version: 1.0.1 - resolution: "@stablelib/bytes@npm:1.0.1" - checksum: 456267e08c3384abcb71d3ad3e97a6f99185ad754bac016f501ebea4e4886f37900589143b57e33bdbbf513a92fc89368c15dd4517e0540d0bdc79ecdf9dd087 +"async-listen@npm:1.2.0": + version: 1.2.0 + resolution: "async-listen@npm:1.2.0" + checksum: 259f0406fccf1ecc80a707b0808d7607e0d1c7f5212ae1537b4f597202713e2d6cbd48026ed3bf9bc6bd8f85077c308797ac38831e93eb920e3ce2907efa816c languageName: node linkType: hard -"@stablelib/chacha20poly1305@npm:1.0.1": - version: 1.0.1 - resolution: "@stablelib/chacha20poly1305@npm:1.0.1" - dependencies: - "@stablelib/aead": ^1.0.1 - "@stablelib/binary": ^1.0.1 - "@stablelib/chacha": ^1.0.1 - "@stablelib/constant-time": ^1.0.1 - "@stablelib/poly1305": ^1.0.1 - "@stablelib/wipe": ^1.0.1 - checksum: 81f1a32330838d31e4dc3144d76eba7244b56d9ea38c1f604f2c34d93ed8e67e9a6167d2cfd72254c13cc46dfc1f5ce5157b37939a575295d69d9144abb4e4fb +"async-listen@npm:3.0.0": + version: 3.0.0 + resolution: "async-listen@npm:3.0.0" + checksum: 3c238e213219ca71bd1239398a852d7c40b9fe212066616d5ab80861c2a014c100acebe48cd57b5ac2d8d66096ee0ea760b25d574f99a0236977921ff7149582 languageName: node linkType: hard -"@stablelib/chacha@npm:^1.0.1": - version: 1.0.1 - resolution: "@stablelib/chacha@npm:1.0.1" - dependencies: - "@stablelib/binary": ^1.0.1 - "@stablelib/wipe": ^1.0.1 - checksum: f061f36c4ca4bf177dd7cac11e7c65ced164f141b6065885141ae5a55f32e16ba0209aefcdcc966aef013f1da616ce901a3a80653b4b6f833cf7e3397ae2d6bd +"async-listen@npm:3.0.1": + version: 3.0.1 + resolution: "async-listen@npm:3.0.1" + checksum: ff519d0bdd819b5d2eee209bd7a573b7f058690696b11aa45128fe4073bd33e2441da0d01134bd464b81def6f423a5de1c28ab35d10ba1a8d81a5374f3515b90 languageName: node linkType: hard -"@stablelib/constant-time@npm:^1.0.1": - version: 1.0.1 - resolution: "@stablelib/constant-time@npm:1.0.1" - checksum: dba4f4bf508de2ff15f7f0cbd875e70391aa3ba3698290fe1ed2feb151c243ba08a90fc6fb390ec2230e30fcc622318c591a7c0e35dcb8150afb50c797eac3d7 +"async-mutex@npm:^0.2.6": + version: 0.2.6 + resolution: "async-mutex@npm:0.2.6" + dependencies: + tslib: ^2.0.0 + checksum: f50102e0c57f6a958528cff7dff13da070897f17107b42274417a7248905b927b6e51c3387f8aed1f5cd6005b0e692d64a83a0789be602e4e7e7da4afe08b889 languageName: node linkType: hard -"@stablelib/ed25519@npm:^1.0.2": - version: 1.0.3 - resolution: "@stablelib/ed25519@npm:1.0.3" - dependencies: - "@stablelib/random": ^1.0.2 - "@stablelib/sha512": ^1.0.1 - "@stablelib/wipe": ^1.0.1 - checksum: e18279de078edac67396ba07dbb862dce0fe89efa8141c21a5b04108a29914bd51636019522323ca5097ec596a90b3028ed64e88ee009b0ac7de7c1ab6499ccb +"async-sema@npm:^3.1.1": + version: 3.1.1 + resolution: "async-sema@npm:3.1.1" + checksum: 07b8c51f6cab107417ecdd8126b7a9fe5a75151b7f69fdd420dcc8ee08f9e37c473a217247e894b56e999b088b32e902dbe41637e4e9b594d3f8dfcdddfadc5e languageName: node linkType: hard -"@stablelib/hash@npm:^1.0.1": - version: 1.0.1 - resolution: "@stablelib/hash@npm:1.0.1" - checksum: 3ff1f12d1a4082aaf4b6cdf40c2010aabe5c4209d3b40b97b5bbb0d9abc0ee94abdc545e57de0614afaea807ca0212ac870e247ec8f66cdce91ec39ce82948cf +"asynciterator.prototype@npm:^1.0.0": + version: 1.0.0 + resolution: "asynciterator.prototype@npm:1.0.0" + dependencies: + has-symbols: ^1.0.3 + checksum: e8ebfd9493ac651cf9b4165e9d64030b3da1d17181bb1963627b59e240cdaf021d9b59d44b827dc1dde4e22387ec04c2d0f8720cf58a1c282e34e40cc12721b3 languageName: node linkType: hard -"@stablelib/hkdf@npm:1.0.1": - version: 1.0.1 - resolution: "@stablelib/hkdf@npm:1.0.1" - dependencies: - "@stablelib/hash": ^1.0.1 - "@stablelib/hmac": ^1.0.1 - "@stablelib/wipe": ^1.0.1 - checksum: 9d45e303715a1835c8612b78e6c1b9d2b7463699b484241d8681fb5c17e0f2bbde5ce211c882134b64616a402e09177baeba80426995ff227b3654a155ab225d +"atomic-sleep@npm:^1.0.0": + version: 1.0.0 + resolution: "atomic-sleep@npm:1.0.0" + checksum: b95275afb2f80732f22f43a60178430c468906a415a7ff18bcd0feeebc8eec3930b51250aeda91a476062a90e07132b43a1794e8d8ffcf9b650e8139be75fa36 languageName: node linkType: hard -"@stablelib/hmac@npm:^1.0.1": - version: 1.0.1 - resolution: "@stablelib/hmac@npm:1.0.1" +"autoprefixer@npm:~10.4.12": + version: 10.4.17 + resolution: "autoprefixer@npm:10.4.17" dependencies: - "@stablelib/constant-time": ^1.0.1 - "@stablelib/hash": ^1.0.1 - "@stablelib/wipe": ^1.0.1 - checksum: e3b93f7144a5846a6e30213278f7570de6d3f9d09131b95ce76d5c5c8bf37bf5d1830f2ee8d847555707271dbfd6e2461221719fd4d8b27ff06b9dd689c0ec21 + browserslist: ^4.22.2 + caniuse-lite: ^1.0.30001578 + fraction.js: ^4.3.7 + normalize-range: ^0.1.2 + picocolors: ^1.0.0 + postcss-value-parser: ^4.2.0 + peerDependencies: + postcss: ^8.1.0 + bin: + autoprefixer: bin/autoprefixer + checksum: 1b4cf4097507f9dc48cef3194f18a05901311c881380cc634b308fce54a6554cf2dcd20aec8384b44e994d4665ab12c63dc89492523f8d74ff5d4d5eb1469f8c languageName: node linkType: hard -"@stablelib/int@npm:^1.0.1": - version: 1.0.1 - resolution: "@stablelib/int@npm:1.0.1" - checksum: 65bfbf50a382eea70c68e05366bf379cfceff8fbc076f1c267ef2f2411d7aed64fd140c415cb6c29f19a3910d3b8b7805d4b32ad5721a5007a8e744a808c7ae3 +"available-typed-arrays@npm:^1.0.5": + version: 1.0.6 + resolution: "available-typed-arrays@npm:1.0.6" + checksum: 8295571eb86447138adf64a0df0c08ae61250b17190bba30e1fae8c80a816077a6d028e5506f602c382c0197d3080bae131e92e331139d55460989580eeae659 languageName: node linkType: hard -"@stablelib/keyagreement@npm:^1.0.1": - version: 1.0.1 - resolution: "@stablelib/keyagreement@npm:1.0.1" - dependencies: - "@stablelib/bytes": ^1.0.1 - checksum: 3c8ec904dd50f72f3162f5447a0fa8f1d9ca6e24cd272d3dbe84971267f3b47f9bd5dc4e4eeedf3fbac2fe01f2d9277053e57c8e60db8c5544bfb35c62d290dd +"axe-core@npm:=4.7.0": + version: 4.7.0 + resolution: "axe-core@npm:4.7.0" + checksum: f086bcab42be1761ba2b0b127dec350087f4c3a853bba8dd58f69d898cefaac31a1561da23146f6f3c07954c76171d1f2ce460e555e052d2b02cd79af628fa4a languageName: node linkType: hard -"@stablelib/poly1305@npm:^1.0.1": - version: 1.0.1 - resolution: "@stablelib/poly1305@npm:1.0.1" +"axobject-query@npm:^3.2.1": + version: 3.2.1 + resolution: "axobject-query@npm:3.2.1" dependencies: - "@stablelib/constant-time": ^1.0.1 - "@stablelib/wipe": ^1.0.1 - checksum: 70b845bb0481c66b7ba3f3865d01e4c67a4dffc9616fc6de1d23efc5e828ec09de25f8e3be4e1f15a23b8e87e3036ee3d949c2fd4785047e6f7028bbec0ead18 + dequal: ^2.0.3 + checksum: a94047e702b57c91680e6a952ec4a1aaa2cfd0d80ead76bc8c954202980d8c51968a6ea18b4d8010e8e2cf95676533d8022a8ebba9abc1dfe25686721df26fd2 languageName: node linkType: hard -"@stablelib/random@npm:^1.0.1, @stablelib/random@npm:^1.0.2": +"balanced-match@npm:^1.0.0": version: 1.0.2 - resolution: "@stablelib/random@npm:1.0.2" - dependencies: - "@stablelib/binary": ^1.0.1 - "@stablelib/wipe": ^1.0.1 - checksum: f5ace0a588dc4c21f01cb85837892d4c872e994ae77a58a8eb7dd61aa0b26fb1e9b46b0445e71af57d963ef7d9f5965c64258fc0d04df7b2947bc48f2d3560c5 + resolution: "balanced-match@npm:1.0.2" + checksum: 9706c088a283058a8a99e0bf91b0a2f75497f185980d9ffa8b304de1d9e58ebda7c72c07ebf01dadedaac5b2907b2c6f566f660d62bd336c3468e960403b9d65 languageName: node linkType: hard -"@stablelib/sha256@npm:1.0.1": - version: 1.0.1 - resolution: "@stablelib/sha256@npm:1.0.1" - dependencies: - "@stablelib/binary": ^1.0.1 - "@stablelib/hash": ^1.0.1 - "@stablelib/wipe": ^1.0.1 - checksum: 38669871e1bda72eb537629ebceac1c72da8890273a9fbe088f81f6d14c1ec04e78be8c5b455380a06c67f8e62b2508e11e9063fcc257dbaa1b5c27ac756ba77 +"base64-js@npm:^1.3.1": + version: 1.5.1 + resolution: "base64-js@npm:1.5.1" + checksum: 669632eb3745404c2f822a18fc3a0122d2f9a7a13f7fb8b5823ee19d1d2ff9ee5b52c53367176ea4ad093c332fd5ab4bd0ebae5a8e27917a4105a4cfc86b1005 languageName: node linkType: hard -"@stablelib/sha512@npm:^1.0.1": - version: 1.0.1 - resolution: "@stablelib/sha512@npm:1.0.1" - dependencies: - "@stablelib/binary": ^1.0.1 - "@stablelib/hash": ^1.0.1 - "@stablelib/wipe": ^1.0.1 - checksum: b7c82f7608a35948a2147a534c0c9afc80deab3fd5f72a2e27b2454e7c0c6944d39381be3abcb1b7fac5b824ba030ae3e98209d517a579c143d8ed63930b042f +"bech32@npm:1.1.4": + version: 1.1.4 + resolution: "bech32@npm:1.1.4" + checksum: 0e98db619191548390d6f09ff68b0253ba7ae6a55db93dfdbb070ba234c1fd3308c0606fbcc95fad50437227b10011e2698b89f0181f6e7f845c499bd14d0f4b languageName: node linkType: hard -"@stablelib/wipe@npm:^1.0.1": - version: 1.0.1 - resolution: "@stablelib/wipe@npm:1.0.1" - checksum: 287802eb146810a46ba72af70b82022caf83a8aeebde23605f5ee0decf64fe2b97a60c856e43b6617b5801287c30cfa863cfb0469e7fcde6f02d143cf0c6cbf4 +"big.js@npm:^5.2.2": + version: 5.2.2 + resolution: "big.js@npm:5.2.2" + checksum: b89b6e8419b097a8fb4ed2399a1931a68c612bce3cfd5ca8c214b2d017531191070f990598de2fc6f3f993d91c0f08aa82697717f6b3b8732c9731866d233c9e languageName: node linkType: hard -"@stablelib/x25519@npm:^1.0.3": - version: 1.0.3 - resolution: "@stablelib/x25519@npm:1.0.3" - dependencies: - "@stablelib/keyagreement": ^1.0.1 - "@stablelib/random": ^1.0.2 - "@stablelib/wipe": ^1.0.1 - checksum: f8537066b542b6770c1b5b2ae5ad0688d1b986e4bf818067c152c123a5471531987bbf024224f75f387f481ccc5b628e391e49e92102b8b1a3e2d449d6105402 +"bignumber.js@npm:*": + version: 9.1.2 + resolution: "bignumber.js@npm:9.1.2" + checksum: 582c03af77ec9cb0ebd682a373ee6c66475db94a4325f92299621d544aa4bd45cb45fd60001610e94aef8ae98a0905fa538241d9638d4422d57abbeeac6fadaf languageName: node linkType: hard -"@swc/helpers@npm:0.4.14": - version: 0.4.14 - resolution: "@swc/helpers@npm:0.4.14" - dependencies: - tslib: ^2.4.0 - checksum: 273fd3f3fc461a92f3790cc551ea054745c6d6959afbe1232e6d7aa1c722bbc114d308aab96bef5c78fc0303c85c7b472ef00e2253251cc89737f3b1af56e5a5 +"binary-extensions@npm:^2.0.0": + version: 2.2.0 + resolution: "binary-extensions@npm:2.2.0" + checksum: ccd267956c58d2315f5d3ea6757cf09863c5fc703e50fbeb13a7dc849b812ef76e3cf9ca8f35a0c48498776a7478d7b4a0418e1e2b8cb9cb9731f2922aaad7f8 languageName: node linkType: hard -"@szmarczak/http-timer@npm:^4.0.5": - version: 4.0.6 - resolution: "@szmarczak/http-timer@npm:4.0.6" +"bindings@npm:^1.4.0": + version: 1.5.0 + resolution: "bindings@npm:1.5.0" dependencies: - defer-to-connect: ^2.0.0 - checksum: c29df3bcec6fc3bdec2b17981d89d9c9fc9bd7d0c9bcfe92821dc533f4440bc890ccde79971838b4ceed1921d456973c4180d7175ee1d0023ad0562240a58d95 + file-uri-to-path: 1.0.0 + checksum: 65b6b48095717c2e6105a021a7da4ea435aa8d3d3cd085cb9e85bcb6e5773cf318c4745c3f7c504412855940b585bdf9b918236612a1c7a7942491de176f1ae7 languageName: node linkType: hard -"@tanstack/query-core@npm:4.36.1": - version: 4.36.1 - resolution: "@tanstack/query-core@npm:4.36.1" - checksum: 47672094da20d89402d9fe03bb7b0462be73a76ff9ca715169738bc600a719d064d106d083a8eedae22a2c22de22f87d5eb5d31ef447aba771d9190f2117ed10 +"blo@npm:~1.0.1": + version: 1.0.1 + resolution: "blo@npm:1.0.1" + checksum: 2aff11ca1d49e616ffa81907b1a011130b2156f8199bf37df62a9689aeb2a0874c61885cc2f9c79df0d216e14c85cc62902404288f8058cd0b0c311d4f01c3f9 languageName: node linkType: hard -"@tanstack/query-persist-client-core@npm:4.36.1": - version: 4.36.1 - resolution: "@tanstack/query-persist-client-core@npm:4.36.1" - dependencies: - "@tanstack/query-core": 4.36.1 - checksum: f67eab79cb6d9581716d1532c490d00452d8e2c5438874599fdd2d8d930445137ed9afa8199a569452bf3d5ec581c223750d5777b63b65cbc1baf5bdf6fe3322 +"bn.js@npm:^4.11.9": + version: 4.12.0 + resolution: "bn.js@npm:4.12.0" + checksum: 39afb4f15f4ea537b55eaf1446c896af28ac948fdcf47171961475724d1bb65118cca49fa6e3d67706e4790955ec0e74de584e45c8f1ef89f46c812bee5b5a12 languageName: node linkType: hard -"@tanstack/query-sync-storage-persister@npm:^4.27.1": - version: 4.36.1 - resolution: "@tanstack/query-sync-storage-persister@npm:4.36.1" - dependencies: - "@tanstack/query-persist-client-core": 4.36.1 - checksum: 461467ab13b0434dd4647c1ea8969ed06db6dabf77e3a68d978bbeb78d3d491b242fb7cd13bd37512f787e6ef891113ce208fad6355fa7eb49987c6942ca196b +"bn.js@npm:^5.2.1": + version: 5.2.1 + resolution: "bn.js@npm:5.2.1" + checksum: 3dd8c8d38055fedfa95c1d5fc3c99f8dd547b36287b37768db0abab3c239711f88ff58d18d155dd8ad902b0b0cee973747b7ae20ea12a09473272b0201c9edd3 languageName: node linkType: hard -"@tanstack/react-query-persist-client@npm:^4.28.0": - version: 4.36.1 - resolution: "@tanstack/react-query-persist-client@npm:4.36.1" +"brace-expansion@npm:^1.1.7": + version: 1.1.11 + resolution: "brace-expansion@npm:1.1.11" dependencies: - "@tanstack/query-persist-client-core": 4.36.1 - peerDependencies: - "@tanstack/react-query": ^4.36.1 - checksum: d938449bd8395da0c6ff69c83218c7efe63832f4e588b75f4f0c4f4db8c20194cb1507a1d5d8dd76b193545df3d3c0d5a409c117cc5306847fc02df3d2d16d45 + balanced-match: ^1.0.0 + concat-map: 0.0.1 + checksum: faf34a7bb0c3fcf4b59c7808bc5d2a96a40988addf2e7e09dfbb67a2251800e0d14cd2bfc1aa79174f2f5095c54ff27f46fb1289fe2d77dac755b5eb3434cc07 languageName: node linkType: hard -"@tanstack/react-query@npm:^4.28.0": - version: 4.36.1 - resolution: "@tanstack/react-query@npm:4.36.1" +"brace-expansion@npm:^2.0.1": + version: 2.0.1 + resolution: "brace-expansion@npm:2.0.1" dependencies: - "@tanstack/query-core": 4.36.1 - use-sync-external-store: ^1.2.0 - peerDependencies: - react: ^16.8.0 || ^17.0.0 || ^18.0.0 - react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 - react-native: "*" - peerDependenciesMeta: - react-dom: - optional: true - react-native: - optional: true - checksum: 1aff0a476859386f8d32253fa0d0bde7b81769a6d4d4d9cbd78778f0f955459a3bdb7ee27a0d2ee7373090f12998b45df80db0b5b313bd0a7a39d36c6e8e51c5 + balanced-match: ^1.0.0 + checksum: a61e7cd2e8a8505e9f0036b3b6108ba5e926b4b55089eeb5550cd04a471fe216c96d4fe7e4c7f995c728c554ae20ddfc4244cad10aef255e72b62930afd233d1 languageName: node linkType: hard -"@tootallnate/once@npm:1": - version: 1.1.2 - resolution: "@tootallnate/once@npm:1.1.2" - checksum: e1fb1bbbc12089a0cb9433dc290f97bddd062deadb6178ce9bcb93bb7c1aecde5e60184bc7065aec42fe1663622a213493c48bbd4972d931aae48315f18e1be9 +"braces@npm:^3.0.2, braces@npm:~3.0.2": + version: 3.0.2 + resolution: "braces@npm:3.0.2" + dependencies: + fill-range: ^7.0.1 + checksum: e2a8e769a863f3d4ee887b5fe21f63193a891c68b612ddb4b68d82d1b5f3ff9073af066c343e9867a393fe4c2555dcb33e89b937195feb9c1613d259edfcd459 languageName: node linkType: hard -"@trivago/prettier-plugin-sort-imports@npm:~4.1.1": - version: 4.1.1 - resolution: "@trivago/prettier-plugin-sort-imports@npm:4.1.1" - dependencies: - "@babel/generator": 7.17.7 - "@babel/parser": ^7.20.5 - "@babel/traverse": 7.17.3 - "@babel/types": 7.17.0 - javascript-natural-sort: 0.7.1 - lodash: ^4.17.21 - peerDependencies: - "@vue/compiler-sfc": 3.x - prettier: 2.x - peerDependenciesMeta: - "@vue/compiler-sfc": - optional: true - checksum: 09b4c3c3f4a9e7883737acf92ae7f2a59eb3f7a6f104621a883bdb2a962dcf98398891489267a6fdbba1227a3484676f8d7470e1b3bc6422b4f457382fd030ce +"brorand@npm:^1.1.0": + version: 1.1.0 + resolution: "brorand@npm:1.1.0" + checksum: 8a05c9f3c4b46572dec6ef71012b1946db6cae8c7bb60ccd4b7dd5a84655db49fe043ecc6272e7ef1f69dc53d6730b9e2a3a03a8310509a3d797a618cbee52be languageName: node linkType: hard -"@ts-morph/common@npm:~0.11.0": - version: 0.11.1 - resolution: "@ts-morph/common@npm:0.11.1" +"browserslist@npm:^4.22.2": + version: 4.22.3 + resolution: "browserslist@npm:4.22.3" dependencies: - fast-glob: ^3.2.7 - minimatch: ^3.0.4 - mkdirp: ^1.0.4 - path-browserify: ^1.0.1 - checksum: 2853215cfdfb9b65f96ceef91b15a73ab6591fd27d072801884ea5acc1a8f0becd5ac214d5f3d840f5d650b7654585a9b9df86fc4287872e7be1c6f566381bfd + caniuse-lite: ^1.0.30001580 + electron-to-chromium: ^1.4.648 + node-releases: ^2.0.14 + update-browserslist-db: ^1.0.13 + bin: + browserslist: cli.js + checksum: e62b17348e92143fe58181b02a6a97c4a98bd812d1dc9274673a54f73eec53dbed1c855ebf73e318ee00ee039f23c9a6d0e7629d24f3baef08c7a5b469742d57 languageName: node linkType: hard -"@tsconfig/node10@npm:^1.0.7": - version: 1.0.9 - resolution: "@tsconfig/node10@npm:1.0.9" - checksum: a33ae4dc2a621c0678ac8ac4bceb8e512ae75dac65417a2ad9b022d9b5411e863c4c198b6ba9ef659e14b9fb609bbec680841a2e84c1172df7a5ffcf076539df +"buffer-crc32@npm:~0.2.3": + version: 0.2.13 + resolution: "buffer-crc32@npm:0.2.13" + checksum: 06252347ae6daca3453b94e4b2f1d3754a3b146a111d81c68924c22d91889a40623264e95e67955b1cb4a68cbedf317abeabb5140a9766ed248973096db5ce1c languageName: node linkType: hard -"@tsconfig/node12@npm:^1.0.7": - version: 1.0.11 - resolution: "@tsconfig/node12@npm:1.0.11" - checksum: 5ce29a41b13e7897a58b8e2df11269c5395999e588b9a467386f99d1d26f6c77d1af2719e407621412520ea30517d718d5192a32403b8dfcc163bf33e40a338a +"buffer@npm:^6.0.3": + version: 6.0.3 + resolution: "buffer@npm:6.0.3" + dependencies: + base64-js: ^1.3.1 + ieee754: ^1.2.1 + checksum: 5ad23293d9a731e4318e420025800b42bf0d264004c0286c8cc010af7a270c7a0f6522e84f54b9ad65cbd6db20b8badbfd8d2ebf4f80fa03dab093b89e68c3f9 languageName: node linkType: hard -"@tsconfig/node14@npm:^1.0.0": - version: 1.0.3 - resolution: "@tsconfig/node14@npm:1.0.3" - checksum: 19275fe80c4c8d0ad0abed6a96dbf00642e88b220b090418609c4376e1cef81bf16237bf170ad1b341452feddb8115d8dd2e5acdfdea1b27422071163dc9ba9d +"busboy@npm:1.6.0, busboy@npm:^1.6.0": + version: 1.6.0 + resolution: "busboy@npm:1.6.0" + dependencies: + streamsearch: ^1.1.0 + checksum: 32801e2c0164e12106bf236291a00795c3c4e4b709ae02132883fe8478ba2ae23743b11c5735a0aae8afe65ac4b6ca4568b91f0d9fed1fdbc32ede824a73746e languageName: node linkType: hard -"@tsconfig/node16@npm:^1.0.2": - version: 1.0.4 - resolution: "@tsconfig/node16@npm:1.0.4" - checksum: 202319785901f942a6e1e476b872d421baec20cf09f4b266a1854060efbf78cde16a4d256e8bc949d31e6cd9a90f1e8ef8fb06af96a65e98338a2b6b0de0a0ff +"bytes@npm:3.1.0": + version: 3.1.0 + resolution: "bytes@npm:3.1.0" + checksum: 7c3b21c5d9d44ed455460d5d36a31abc6fa2ce3807964ba60a4b03fd44454c8cf07bb0585af83bfde1c5cc2ea4bbe5897bc3d18cd15e0acf25a3615a35aba2df languageName: node linkType: hard -"@types/acorn@npm:^4.0.0": - version: 4.0.6 - resolution: "@types/acorn@npm:4.0.6" +"cacache@npm:^18.0.0": + version: 18.0.2 + resolution: "cacache@npm:18.0.2" dependencies: - "@types/estree": "*" - checksum: 60e1fd28af18d6cb54a93a7231c7c18774a9a8739c9b179e9e8750dca631e10cbef2d82b02830ea3f557b1d121e6406441e9e1250bd492dc81d4b3456e76e4d4 + "@npmcli/fs": ^3.1.0 + fs-minipass: ^3.0.0 + glob: ^10.2.2 + lru-cache: ^10.0.1 + minipass: ^7.0.3 + minipass-collect: ^2.0.1 + minipass-flush: ^1.0.5 + minipass-pipeline: ^1.2.4 + p-map: ^4.0.0 + ssri: ^10.0.0 + tar: ^6.1.11 + unique-filename: ^3.0.0 + checksum: 0250df80e1ad0c828c956744850c5f742c24244e9deb5b7dc81bca90f8c10e011e132ecc58b64497cc1cad9a98968676147fb6575f4f94722f7619757b17a11b languageName: node linkType: hard -"@types/cacheable-request@npm:^6.0.1": - version: 6.0.3 - resolution: "@types/cacheable-request@npm:6.0.3" +"call-bind@npm:^1.0.0, call-bind@npm:^1.0.2, call-bind@npm:^1.0.4, call-bind@npm:^1.0.5": + version: 1.0.5 + resolution: "call-bind@npm:1.0.5" dependencies: - "@types/http-cache-semantics": "*" - "@types/keyv": ^3.1.4 - "@types/node": "*" - "@types/responselike": ^1.0.0 - checksum: d9b26403fe65ce6b0cb3720b7030104c352bcb37e4fac2a7089a25a97de59c355fa08940658751f2f347a8512aa9d18fdb66ab3ade835975b2f454f2d5befbd9 + function-bind: ^1.1.2 + get-intrinsic: ^1.2.1 + set-function-length: ^1.1.1 + checksum: 449e83ecbd4ba48e7eaac5af26fea3b50f8f6072202c2dd7c5a6e7a6308f2421abe5e13a3bbd55221087f76320c5e09f25a8fdad1bab2b77c68ae74d92234ea5 languageName: node linkType: hard -"@types/connect@npm:^3.4.33": - version: 3.4.38 - resolution: "@types/connect@npm:3.4.38" - dependencies: - "@types/node": "*" - checksum: 7eb1bc5342a9604facd57598a6c62621e244822442976c443efb84ff745246b10d06e8b309b6e80130026a396f19bf6793b7cecd7380169f369dac3bfc46fb99 +"callsites@npm:^3.0.0": + version: 3.1.0 + resolution: "callsites@npm:3.1.0" + checksum: 072d17b6abb459c2ba96598918b55868af677154bec7e73d222ef95a8fdb9bbf7dae96a8421085cdad8cd190d86653b5b6dc55a4484f2e5b2e27d5e0c3fc15b3 languageName: node linkType: hard -"@types/cookie@npm:^0.4.0": - version: 0.4.1 - resolution: "@types/cookie@npm:0.4.1" - checksum: 3275534ed69a76c68eb1a77d547d75f99fedc80befb75a3d1d03662fb08d697e6f8b1274e12af1a74c6896071b11510631ba891f64d30c78528d0ec45a9c1a18 +"camelcase-css@npm:^2.0.1": + version: 2.0.1 + resolution: "camelcase-css@npm:2.0.1" + checksum: 1cec2b3b3dcb5026688a470b00299a8db7d904c4802845c353dbd12d9d248d3346949a814d83bfd988d4d2e5b9904c07efe76fecd195a1d4f05b543e7c0b56b1 languageName: node linkType: hard -"@types/debug@npm:^4.0.0, @types/debug@npm:^4.1.7": - version: 4.1.12 - resolution: "@types/debug@npm:4.1.12" - dependencies: - "@types/ms": "*" - checksum: 47876a852de8240bfdaf7481357af2b88cb660d30c72e73789abf00c499d6bc7cd5e52f41c915d1b9cd8ec9fef5b05688d7b7aef17f7f272c2d04679508d1053 +"camelcase@npm:^5.0.0": + version: 5.3.1 + resolution: "camelcase@npm:5.3.1" + checksum: e6effce26b9404e3c0f301498184f243811c30dfe6d0b9051863bd8e4034d09c8c2923794f280d6827e5aa055f6c434115ff97864a16a963366fb35fd673024b languageName: node linkType: hard -"@types/estree-jsx@npm:^0.0.1": - version: 0.0.1 - resolution: "@types/estree-jsx@npm:0.0.1" - dependencies: - "@types/estree": "*" - checksum: aed43dfcbcc9c881f571618847661cd69026680466657d1443c12f51d835c7a8ccf5109a800e56c8fc33ae093f096aa937e4656ce3eb71c4f914334c389cf7be +"caniuse-lite@npm:^1.0.30001406, caniuse-lite@npm:^1.0.30001578, caniuse-lite@npm:^1.0.30001580": + version: 1.0.30001581 + resolution: "caniuse-lite@npm:1.0.30001581" + checksum: ca4e2cd9d0acf5e3c71fa2e7cd65561e4532d32b640145f634c333792074bb63de1239b35abfb6b6d372f97caf26f8d97faac7ba51ef190717ad2d3ae9c0d7a2 languageName: node linkType: hard -"@types/estree-jsx@npm:^1.0.0": - version: 1.0.3 - resolution: "@types/estree-jsx@npm:1.0.3" - dependencies: - "@types/estree": "*" - checksum: 6887a134308b6db4a33a147b56c9d0a47c17ea7e810bdd7c498c306a0fd00bcf2619cb0f57f74009d03dda974b3cd7e414767f85332b1d1b2be30a3ef9e1cca9 +"chalk@npm:5.2.0": + version: 5.2.0 + resolution: "chalk@npm:5.2.0" + checksum: 03d8060277de6cf2fd567dc25fcf770593eb5bb85f460ce443e49255a30ff1242edd0c90a06a03803b0466ff0687a939b41db1757bec987113e83de89a003caa languageName: node linkType: hard -"@types/estree@npm:*, @types/estree@npm:^1.0.0": - version: 1.0.5 - resolution: "@types/estree@npm:1.0.5" - checksum: dd8b5bed28e6213b7acd0fb665a84e693554d850b0df423ac8076cc3ad5823a6bc26b0251d080bdc545af83179ede51dd3f6fa78cad2c46ed1f29624ddf3e41a +"chalk@npm:^2.4.2": + version: 2.4.2 + resolution: "chalk@npm:2.4.2" + dependencies: + ansi-styles: ^3.2.1 + escape-string-regexp: ^1.0.5 + supports-color: ^5.3.0 + checksum: ec3661d38fe77f681200f878edbd9448821924e0f93a9cefc0e26a33b145f1027a2084bf19967160d11e1f03bfe4eaffcabf5493b89098b2782c3fe0b03d80c2 languageName: node linkType: hard -"@types/glob@npm:^7.1.1": - version: 7.2.0 - resolution: "@types/glob@npm:7.2.0" +"chalk@npm:^4.0.0, chalk@npm:^4.1.1": + version: 4.1.2 + resolution: "chalk@npm:4.1.2" dependencies: - "@types/minimatch": "*" - "@types/node": "*" - checksum: 6ae717fedfdfdad25f3d5a568323926c64f52ef35897bcac8aca8e19bc50c0bd84630bbd063e5d52078b2137d8e7d3c26eabebd1a2f03ff350fff8a91e79fc19 + ansi-styles: ^4.1.0 + supports-color: ^7.1.0 + checksum: fe75c9d5c76a7a98d45495b91b2172fa3b7a09e0cc9370e5c8feb1c567b85c4288e2b3fded7cfdd7359ac28d6b3844feb8b82b8686842e93d23c827c417e83fc languageName: node linkType: hard -"@types/hast@npm:^2.0.0": - version: 2.3.8 - resolution: "@types/hast@npm:2.3.8" +"chokidar@npm:3.3.1": + version: 3.3.1 + resolution: "chokidar@npm:3.3.1" dependencies: - "@types/unist": ^2 - checksum: 4c3b3efb7067d32a568a9bf5d2a7599f99ec08c2eaade3aaeb579b7a31bcdf8f6475f56c1ac5bc3f4e4e07b84a93a9b1cf1ef9a8b52b39e3deabea7989e5dd4b + anymatch: ~3.1.1 + braces: ~3.0.2 + fsevents: ~2.1.2 + glob-parent: ~5.1.0 + is-binary-path: ~2.1.0 + is-glob: ~4.0.1 + normalize-path: ~3.0.0 + readdirp: ~3.3.0 + dependenciesMeta: + fsevents: + optional: true + checksum: 84b01c2e750fbc72b9823da9fde83141c6f83a8aa1a3c2c683b4e55d40b93b5d168f6030dfb7aca27755329a464c69ac0d0f2fb39beafd2f6280fae74c3d1117 languageName: node linkType: hard -"@types/http-cache-semantics@npm:*": - version: 4.0.4 - resolution: "@types/http-cache-semantics@npm:4.0.4" - checksum: 7f4dd832e618bc1e271be49717d7b4066d77c2d4eed5b81198eb987e532bb3e1c7e02f45d77918185bad936f884b700c10cebe06305f50400f382ab75055f9e8 +"chokidar@npm:^3.5.3": + version: 3.5.3 + resolution: "chokidar@npm:3.5.3" + dependencies: + anymatch: ~3.1.2 + braces: ~3.0.2 + fsevents: ~2.3.2 + glob-parent: ~5.1.2 + is-binary-path: ~2.1.0 + is-glob: ~4.0.1 + normalize-path: ~3.0.0 + readdirp: ~3.6.0 + dependenciesMeta: + fsevents: + optional: true + checksum: b49fcde40176ba007ff361b198a2d35df60d9bb2a5aab228279eb810feae9294a6b4649ab15981304447afe1e6ffbf4788ad5db77235dc770ab777c6e771980c languageName: node linkType: hard -"@types/json-schema@npm:^7.0.6, @types/json-schema@npm:^7.0.9": - version: 7.0.15 - resolution: "@types/json-schema@npm:7.0.15" - checksum: 97ed0cb44d4070aecea772b7b2e2ed971e10c81ec87dd4ecc160322ffa55ff330dace1793489540e3e318d90942064bb697cc0f8989391797792d919737b3b98 +"chownr@npm:^1.1.4": + version: 1.1.4 + resolution: "chownr@npm:1.1.4" + checksum: 115648f8eb38bac5e41c3857f3e663f9c39ed6480d1349977c4d96c95a47266fcacc5a5aabf3cb6c481e22d72f41992827db47301851766c4fd77ac21a4f081d languageName: node linkType: hard -"@types/json5@npm:^0.0.29": - version: 0.0.29 - resolution: "@types/json5@npm:0.0.29" - checksum: e60b153664572116dfea673c5bda7778dbff150498f44f998e34b5886d8afc47f16799280e4b6e241c0472aef1bc36add771c569c68fc5125fc2ae519a3eb9ac +"chownr@npm:^2.0.0": + version: 2.0.0 + resolution: "chownr@npm:2.0.0" + checksum: c57cf9dd0791e2f18a5ee9c1a299ae6e801ff58fee96dc8bfd0dcb4738a6ce58dd252a3605b1c93c6418fe4f9d5093b28ffbf4d66648cb2a9c67eaef9679be2f languageName: node linkType: hard -"@types/keyv@npm:^3.1.4": - version: 3.1.4 - resolution: "@types/keyv@npm:3.1.4" +"citty@npm:^0.1.5": + version: 0.1.5 + resolution: "citty@npm:0.1.5" dependencies: - "@types/node": "*" - checksum: e009a2bfb50e90ca9b7c6e8f648f8464067271fd99116f881073fa6fa76dc8d0133181dd65e6614d5fb1220d671d67b0124aef7d97dc02d7e342ab143a47779d + consola: ^3.2.3 + checksum: 9a2379fd01345500f1eb2bcc33f5e60be8379551091b43a3ba4e3a39c63a92e41453dea542ab9f2528fe9e19177ff1453c01a845a74529292af34fdafd23a5f6 languageName: node linkType: hard -"@types/mdast@npm:^3.0.0": - version: 3.0.15 - resolution: "@types/mdast@npm:3.0.15" - dependencies: - "@types/unist": ^2 - checksum: af85042a4e3af3f879bde4059fa9e76c71cb552dffc896cdcc6cf9dc1fd38e37035c2dbd6245cfa6535b433f1f0478f5549696234ccace47a64055a10c656530 +"clean-stack@npm:^2.0.0": + version: 2.2.0 + resolution: "clean-stack@npm:2.2.0" + checksum: 2ac8cd2b2f5ec986a3c743935ec85b07bc174d5421a5efc8017e1f146a1cf5f781ae962618f416352103b32c9cd7e203276e8c28241bbe946160cab16149fb68 languageName: node linkType: hard -"@types/mdurl@npm:^1.0.0": - version: 1.0.5 - resolution: "@types/mdurl@npm:1.0.5" - checksum: e8e872e8da8f517a9c748b06cec61c947cb73fd3069e8aeb0926670ec5dfac5d30549b3d0f1634950401633e812f9b7263f2d5dbe7e98fce12bcb2c659aa4b21 +"cli-cursor@npm:^3.1.0": + version: 3.1.0 + resolution: "cli-cursor@npm:3.1.0" + dependencies: + restore-cursor: ^3.1.0 + checksum: 2692784c6cd2fd85cfdbd11f53aea73a463a6d64a77c3e098b2b4697a20443f430c220629e1ca3b195ea5ac4a97a74c2ee411f3807abf6df2b66211fec0c0a29 languageName: node linkType: hard -"@types/minimatch@npm:*": - version: 5.1.2 - resolution: "@types/minimatch@npm:5.1.2" - checksum: 0391a282860c7cb6fe262c12b99564732401bdaa5e395bee9ca323c312c1a0f45efbf34dce974682036e857db59a5c9b1da522f3d6055aeead7097264c8705a8 +"cli-truncate@npm:^2.1.0": + version: 2.1.0 + resolution: "cli-truncate@npm:2.1.0" + dependencies: + slice-ansi: ^3.0.0 + string-width: ^4.2.0 + checksum: bf1e4e6195392dc718bf9cd71f317b6300dc4a9191d052f31046b8773230ece4fa09458813bf0e3455a5e68c0690d2ea2c197d14a8b85a7b5e01c97f4b5feb5d languageName: node linkType: hard -"@types/ms@npm:*": - version: 0.7.34 - resolution: "@types/ms@npm:0.7.34" - checksum: f38d36e7b6edecd9badc9cf50474159e9da5fa6965a75186cceaf883278611b9df6669dc3a3cc122b7938d317b68a9e3d573d316fcb35d1be47ec9e468c6bd8a +"cli-truncate@npm:^3.1.0": + version: 3.1.0 + resolution: "cli-truncate@npm:3.1.0" + dependencies: + slice-ansi: ^5.0.0 + string-width: ^5.0.0 + checksum: c3243e41974445691c63f8b405df1d5a24049dc33d324fe448dc572e561a7b772ae982692900b1a5960901cc4fc7def25a629b9c69a4208ee89d12ab3332617a languageName: node linkType: hard -"@types/node@npm:*": - version: 20.9.0 - resolution: "@types/node@npm:20.9.0" - dependencies: - undici-types: ~5.26.4 - checksum: bfd927da6bff8a32051fa44bb47ca32a56d2c8bc8ba0170770f181cc1fa3c0b05863c9b930f0ba8604a48d5eb0d319166601709ca53bf2deae0025d8b6c6b8a3 +"client-only@npm:0.0.1": + version: 0.0.1 + resolution: "client-only@npm:0.0.1" + checksum: 0c16bf660dadb90610553c1d8946a7fdfb81d624adea073b8440b7d795d5b5b08beb3c950c6a2cf16279365a3265158a236876d92bce16423c485c322d7dfaf8 languageName: node linkType: hard -"@types/node@npm:14.18.33": - version: 14.18.33 - resolution: "@types/node@npm:14.18.33" - checksum: 4e23f95186d8ae1d38c999bc6b46fe94e790da88744b0a3bfeedcbd0d9ffe2cb0ff39e85f43014f6739e5270292c1a1f6f97a1fc606fd573a0c17fda9a1d42de +"clipboardy@npm:^4.0.0": + version: 4.0.0 + resolution: "clipboardy@npm:4.0.0" + dependencies: + execa: ^8.0.1 + is-wsl: ^3.1.0 + is64bit: ^2.0.0 + checksum: ac7fa4438451d4a509fd7163505c08be92087c1a0ab8f54f8063eb04a69191ded1b59333344e2fd60bad9688e2a3dd69e50a813bf05ebf8369fa8bf65a0f47a2 languageName: node linkType: hard -"@types/node@npm:^12.12.54": - version: 12.20.55 - resolution: "@types/node@npm:12.20.55" - checksum: e4f86785f4092706e0d3b0edff8dca5a13b45627e4b36700acd8dfe6ad53db71928c8dee914d4276c7fd3b6ccd829aa919811c9eb708a2c8e4c6eb3701178c37 +"cliui@npm:^6.0.0": + version: 6.0.0 + resolution: "cliui@npm:6.0.0" + dependencies: + string-width: ^4.2.0 + strip-ansi: ^6.0.0 + wrap-ansi: ^6.2.0 + checksum: 4fcfd26d292c9f00238117f39fc797608292ae36bac2168cfee4c85923817d0607fe21b3329a8621e01aedf512c99b7eaa60e363a671ffd378df6649fb48ae42 languageName: node linkType: hard -"@types/node@npm:^17.0.45": - version: 17.0.45 - resolution: "@types/node@npm:17.0.45" - checksum: aa04366b9103b7d6cfd6b2ef64182e0eaa7d4462c3f817618486ea0422984c51fc69fd0d436eae6c9e696ddfdbec9ccaa27a917f7c2e8c75c5d57827fe3d95e8 +"clsx@npm:1.1.1": + version: 1.1.1 + resolution: "clsx@npm:1.1.1" + checksum: ff052650329773b9b245177305fc4c4dc3129f7b2be84af4f58dc5defa99538c61d4207be7419405a5f8f3d92007c954f4daba5a7b74e563d5de71c28c830063 languageName: node linkType: hard -"@types/nprogress@npm:^0.2.0": - version: 0.2.3 - resolution: "@types/nprogress@npm:0.2.3" - checksum: 2bd96ba1167f548e8f898ae8a790b6501a5422217621c9b8ea75962f3e8473f0e371058b79d83e04e80a6bfee2d66fc6612cdb28296648007b35d3c2a6d64e5c +"clsx@npm:^1.2.1": + version: 1.2.1 + resolution: "clsx@npm:1.2.1" + checksum: 30befca8019b2eb7dbad38cff6266cf543091dae2825c856a62a8ccf2c3ab9c2907c4d12b288b73101196767f66812365400a227581484a05f968b0307cfaf12 languageName: node linkType: hard -"@types/prettier@npm:2": - version: 2.7.3 - resolution: "@types/prettier@npm:2.7.3" - checksum: 705384209cea6d1433ff6c187c80dcc0b95d99d5c5ce21a46a9a58060c527973506822e428789d842761e0280d25e3359300f017fbe77b9755bc772ab3dc2f83 +"cluster-key-slot@npm:^1.1.0": + version: 1.1.2 + resolution: "cluster-key-slot@npm:1.1.2" + checksum: be0ad2d262502adc998597e83f9ded1b80f827f0452127c5a37b22dfca36bab8edf393f7b25bb626006fb9fb2436106939ede6d2d6ecf4229b96a47f27edd681 languageName: node linkType: hard -"@types/prop-types@npm:*": - version: 15.7.10 - resolution: "@types/prop-types@npm:15.7.10" - checksum: 39ecc2d9e439ed16b32937a08d98b84ed4a70f53bcd52c8564c0cd7a36fe1004ca83a1fb94b13c1b7a5c048760f06445c3c6a91a6972c8eff652c0b50c9424b1 +"code-block-writer@npm:^10.1.1": + version: 10.1.1 + resolution: "code-block-writer@npm:10.1.1" + checksum: e048037acbcbda19fca62a3a63e4a64226ea6b5dc0fad7632d34a88c1165b29a357e5e19f0497811e9911472e824ab85f68176f40e439da87e051908956eb47c languageName: node linkType: hard -"@types/qrcode@npm:1": - version: 1.5.5 - resolution: "@types/qrcode@npm:1.5.5" +"color-convert@npm:^1.9.0": + version: 1.9.3 + resolution: "color-convert@npm:1.9.3" dependencies: - "@types/node": "*" - checksum: d92c1d3e77406bf13a03ec521b2ffb1ac99b2e6ea3a17cad670f2610f62e1293554c57e4074bb2fd4e9369f475f863b69e0ae8c543cb049c4a3c1b0c2d92522a + color-name: 1.1.3 + checksum: fd7a64a17cde98fb923b1dd05c5f2e6f7aefda1b60d67e8d449f9328b4e53b228a428fd38bfeaeb2db2ff6b6503a776a996150b80cdf224062af08a5c8a3a203 languageName: node linkType: hard -"@types/react-copy-to-clipboard@npm:^5.0.4": - version: 5.0.7 - resolution: "@types/react-copy-to-clipboard@npm:5.0.7" +"color-convert@npm:^2.0.1": + version: 2.0.1 + resolution: "color-convert@npm:2.0.1" dependencies: - "@types/react": "*" - checksum: adc2970c8756e648daa06e294c422df3dc076a784344ab2ecb78a17ebd7e8e3dfd7f31e68c24267de4815cdeec573a743d952a308b45b8380f6b7912a9a8b911 + color-name: ~1.1.4 + checksum: 79e6bdb9fd479a205c71d89574fccfb22bd9053bd98c6c4d870d65c132e5e904e6034978e55b43d69fcaa7433af2016ee203ce76eeba9cfa554b373e7f7db336 languageName: node linkType: hard -"@types/react@npm:*, @types/react@npm:^18.0.15, @types/react@npm:^18.0.21": - version: 18.2.37 - resolution: "@types/react@npm:18.2.37" - dependencies: - "@types/prop-types": "*" - "@types/scheduler": "*" - csstype: ^3.0.2 - checksum: 2d2599f1a09e4f678509161fea8baeaf76d21deee460f4f3ccc1ca431ebe85f896d7d0b906127de17e97ed57240cec61955eb97d0b5d9cbf4e97fd6620b1acdb +"color-name@npm:1.1.3": + version: 1.1.3 + resolution: "color-name@npm:1.1.3" + checksum: 09c5d3e33d2105850153b14466501f2bfb30324a2f76568a408763a3b7433b0e50e5b4ab1947868e65cb101bb7cb75029553f2c333b6d4b8138a73fcc133d69d languageName: node linkType: hard -"@types/responselike@npm:^1.0.0": - version: 1.0.3 - resolution: "@types/responselike@npm:1.0.3" - dependencies: - "@types/node": "*" - checksum: 6ac4b35723429b11b117e813c7acc42c3af8b5554caaf1fc750404c1ae59f9b7376bc69b9e9e194a5a97357a597c2228b7173d317320f0360d617b6425212f58 +"color-name@npm:~1.1.4": + version: 1.1.4 + resolution: "color-name@npm:1.1.4" + checksum: b0445859521eb4021cd0fb0cc1a75cecf67fceecae89b63f62b201cca8d345baf8b952c966862a9d9a2632987d4f6581f0ec8d957dfacece86f0a7919316f610 languageName: node linkType: hard -"@types/scheduler@npm:*": - version: 0.16.6 - resolution: "@types/scheduler@npm:0.16.6" - checksum: 4cec89727584a50c66a07c322469a4d9e64f5b0117691f36afd4ceae75741c0038a6e107c05e515511d5358b5897becbe065b6e4560664cb1b16f6754915043d +"color-support@npm:^1.1.2": + version: 1.1.3 + resolution: "color-support@npm:1.1.3" + bin: + color-support: bin.js + checksum: 9b7356817670b9a13a26ca5af1c21615463b500783b739b7634a0c2047c16cef4b2865d7576875c31c3cddf9dd621fa19285e628f20198b233a5cfdda6d0793b languageName: node linkType: hard -"@types/semver@npm:^7.3.12": - version: 7.5.5 - resolution: "@types/semver@npm:7.5.5" - checksum: 533e6c93d1262d65f449423d94a445f7f3db0672e7429f21b6a1636d6051dbab3a2989ddcda9b79c69bb37830931d09fc958a65305a891357f5cea3257c297f5 +"colorette@npm:^2.0.19": + version: 2.0.20 + resolution: "colorette@npm:2.0.20" + checksum: 0c016fea2b91b733eb9f4bcdb580018f52c0bc0979443dad930e5037a968237ac53d9beb98e218d2e9235834f8eebce7f8e080422d6194e957454255bde71d3d languageName: node linkType: hard -"@types/trusted-types@npm:^2.0.2": - version: 2.0.6 - resolution: "@types/trusted-types@npm:2.0.6" - checksum: 04250c7175e565b4d32cc2fd9ac1824ab9f0b2cfa82a7978581ffa1c96d7ed4166dc2415b4670cfcb734b389c49c3e9fc028b06ff325d77cc9e6f06bb05e273e +"commander@npm:^10.0.0": + version: 10.0.1 + resolution: "commander@npm:10.0.1" + checksum: 436901d64a818295803c1996cd856621a74f30b9f9e28a588e726b2b1670665bccd7c1a77007ebf328729f0139838a88a19265858a0fa7a8728c4656796db948 languageName: node linkType: hard -"@types/unist@npm:^2, @types/unist@npm:^2.0.0": - version: 2.0.10 - resolution: "@types/unist@npm:2.0.10" - checksum: e2924e18dedf45f68a5c6ccd6015cd62f1643b1b43baac1854efa21ae9e70505db94290434a23da1137d9e31eb58e54ca175982005698ac37300a1c889f6c4aa +"commander@npm:^4.0.0": + version: 4.1.1 + resolution: "commander@npm:4.1.1" + checksum: d7b9913ff92cae20cb577a4ac6fcc121bd6223319e54a40f51a14740a681ad5c574fd29a57da478a5f234a6fa6c52cbf0b7c641353e03c648b1ae85ba670b977 languageName: node linkType: hard -"@types/ws@npm:^7.4.4": - version: 7.4.7 - resolution: "@types/ws@npm:7.4.7" - dependencies: - "@types/node": "*" - checksum: b4c9b8ad209620c9b21e78314ce4ff07515c0cadab9af101c1651e7bfb992d7fd933bd8b9c99d110738fd6db523ed15f82f29f50b45510288da72e964dedb1a3 +"concat-map@npm:0.0.1": + version: 0.0.1 + resolution: "concat-map@npm:0.0.1" + checksum: 902a9f5d8967a3e2faf138d5cb784b9979bad2e6db5357c5b21c568df4ebe62bcb15108af1b2253744844eb964fc023fbd9afbbbb6ddd0bcc204c6fb5b7bf3af languageName: node linkType: hard -"@typescript-eslint/eslint-plugin@npm:~5.40.0": - version: 5.40.1 - resolution: "@typescript-eslint/eslint-plugin@npm:5.40.1" - dependencies: - "@typescript-eslint/scope-manager": 5.40.1 - "@typescript-eslint/type-utils": 5.40.1 - "@typescript-eslint/utils": 5.40.1 - debug: ^4.3.4 - ignore: ^5.2.0 - regexpp: ^3.2.0 - semver: ^7.3.7 - tsutils: ^3.21.0 - peerDependencies: - "@typescript-eslint/parser": ^5.0.0 - eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 - peerDependenciesMeta: - typescript: - optional: true - checksum: 61f19bde0f1206beb20aeb28d18c1ef26a98cf4d2ead9f1d2f204cb91af31582eb5ee9422fe5f92d6aa10cebf85cd50f1b41e8cf8ce65808e2208664c3b1d66a +"consola@npm:^3.2.3": + version: 3.2.3 + resolution: "consola@npm:3.2.3" + checksum: 32ec70e177dd2385c42e38078958cc7397be91db21af90c6f9faa0b16168b49b1c61d689338604bbb2d64370b9347a35f42a9197663a913d3a405bb0ce728499 languageName: node linkType: hard -"@typescript-eslint/parser@npm:^5.42.0": - version: 5.62.0 - resolution: "@typescript-eslint/parser@npm:5.62.0" - dependencies: - "@typescript-eslint/scope-manager": 5.62.0 - "@typescript-eslint/types": 5.62.0 - "@typescript-eslint/typescript-estree": 5.62.0 - debug: ^4.3.4 - peerDependencies: - eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 - peerDependenciesMeta: - typescript: - optional: true - checksum: d168f4c7f21a7a63f47002e2d319bcbb6173597af5c60c1cf2de046b46c76b4930a093619e69faf2d30214c29ab27b54dcf1efc7046a6a6bd6f37f59a990e752 +"console-control-strings@npm:^1.0.0, console-control-strings@npm:^1.1.0": + version: 1.1.0 + resolution: "console-control-strings@npm:1.1.0" + checksum: 8755d76787f94e6cf79ce4666f0c5519906d7f5b02d4b884cf41e11dcd759ed69c57da0670afd9236d229a46e0f9cf519db0cd829c6dca820bb5a5c3def584ed languageName: node linkType: hard -"@typescript-eslint/scope-manager@npm:5.40.1": - version: 5.40.1 - resolution: "@typescript-eslint/scope-manager@npm:5.40.1" - dependencies: - "@typescript-eslint/types": 5.40.1 - "@typescript-eslint/visitor-keys": 5.40.1 - checksum: 5f25b86bfd09fbf8cdfdf932eaf0b41a7594c9b4539d3c8321f882bf7b4bf486454256fdb9a5a8c4eae305419d377fa93d382f80004711d759ff77b3d565c1dc +"content-type@npm:1.0.4": + version: 1.0.4 + resolution: "content-type@npm:1.0.4" + checksum: 3d93585fda985d1554eca5ebd251994327608d2e200978fdbfba21c0c679914d5faf266d17027de44b34a72c7b0745b18584ecccaa7e1fdfb6a68ac7114f12e0 languageName: node linkType: hard -"@typescript-eslint/scope-manager@npm:5.62.0": - version: 5.62.0 - resolution: "@typescript-eslint/scope-manager@npm:5.62.0" - dependencies: - "@typescript-eslint/types": 5.62.0 - "@typescript-eslint/visitor-keys": 5.62.0 - checksum: 6062d6b797fe1ce4d275bb0d17204c827494af59b5eaf09d8a78cdd39dadddb31074dded4297aaf5d0f839016d601032857698b0e4516c86a41207de606e9573 +"convert-hrtime@npm:^3.0.0": + version: 3.0.0 + resolution: "convert-hrtime@npm:3.0.0" + checksum: d022c950e99753ccb948583cacbc77353e7686982219d046da34957dc2924f8d6f198f55fef233d017b73d1afeb18541e7f7cd0ea5934bd8ca272edace83a7b9 languageName: node linkType: hard -"@typescript-eslint/type-utils@npm:5.40.1": - version: 5.40.1 - resolution: "@typescript-eslint/type-utils@npm:5.40.1" - dependencies: - "@typescript-eslint/typescript-estree": 5.40.1 - "@typescript-eslint/utils": 5.40.1 - debug: ^4.3.4 - tsutils: ^3.21.0 - peerDependencies: - eslint: "*" - peerDependenciesMeta: - typescript: - optional: true - checksum: 6771196b8f16f4893bae70aa1371ff004b0058e8edef9b935143e2f1272e471049e9c34beb1d625fb6423db95dd377e01e938b70dd4506fbf071566e2bfb574d +"cookie-es@npm:^1.0.0": + version: 1.0.0 + resolution: "cookie-es@npm:1.0.0" + checksum: e8721cf4d38f3e44049c9118874b323f4f674b1c5cef84a2b888f5bf86ad720ad17b51b43150cad7535a375c24e2921da603801ad28aa6125c3d36c031b41468 languageName: node linkType: hard -"@typescript-eslint/types@npm:5.40.1": - version: 5.40.1 - resolution: "@typescript-eslint/types@npm:5.40.1" - checksum: 2430c799667c820903df7ef39bc4c2762cb7654dbb8525d56f37e73f8cefb82186b80654dbbe0294c5b55affe929c641cdb90232e2749dcd7838f9e500a41549 +"copy-to-clipboard@npm:^3.3.1, copy-to-clipboard@npm:^3.3.3": + version: 3.3.3 + resolution: "copy-to-clipboard@npm:3.3.3" + dependencies: + toggle-selection: ^1.0.6 + checksum: e0a325e39b7615108e6c1c8ac110ae7b829cdc4ee3278b1df6a0e4228c490442cc86444cd643e2da344fbc424b3aab8909e2fec82f8bc75e7e5b190b7c24eecf languageName: node linkType: hard -"@typescript-eslint/types@npm:5.62.0": - version: 5.62.0 - resolution: "@typescript-eslint/types@npm:5.62.0" - checksum: 48c87117383d1864766486f24de34086155532b070f6264e09d0e6139449270f8a9559cfef3c56d16e3bcfb52d83d42105d61b36743626399c7c2b5e0ac3b670 +"crc-32@npm:^1.2.0": + version: 1.2.2 + resolution: "crc-32@npm:1.2.2" + bin: + crc32: bin/crc32.njs + checksum: ad2d0ad0cbd465b75dcaeeff0600f8195b686816ab5f3ba4c6e052a07f728c3e70df2e3ca9fd3d4484dc4ba70586e161ca5a2334ec8bf5a41bf022a6103ff243 languageName: node linkType: hard -"@typescript-eslint/typescript-estree@npm:5.40.1": - version: 5.40.1 - resolution: "@typescript-eslint/typescript-estree@npm:5.40.1" - dependencies: - "@typescript-eslint/types": 5.40.1 - "@typescript-eslint/visitor-keys": 5.40.1 - debug: ^4.3.4 - globby: ^11.1.0 - is-glob: ^4.0.3 - semver: ^7.3.7 - tsutils: ^3.21.0 - peerDependenciesMeta: - typescript: - optional: true - checksum: d0426a55d24b76a3f042816dd8baaaa7a8da0158870bb08fff5a5524821c13ca196117dc269f098b8887ef75e01da1a498637153ab3c29c370ca356bfe4a1716 +"create-require@npm:^1.1.0": + version: 1.1.1 + resolution: "create-require@npm:1.1.1" + checksum: a9a1503d4390d8b59ad86f4607de7870b39cad43d929813599a23714831e81c520bddf61bcdd1f8e30f05fd3a2b71ae8538e946eb2786dc65c2bbc520f692eff languageName: node linkType: hard -"@typescript-eslint/typescript-estree@npm:5.62.0": - version: 5.62.0 - resolution: "@typescript-eslint/typescript-estree@npm:5.62.0" +"cross-fetch@npm:^3.1.4": + version: 3.1.8 + resolution: "cross-fetch@npm:3.1.8" dependencies: - "@typescript-eslint/types": 5.62.0 - "@typescript-eslint/visitor-keys": 5.62.0 - debug: ^4.3.4 - globby: ^11.1.0 - is-glob: ^4.0.3 - semver: ^7.3.7 - tsutils: ^3.21.0 - peerDependenciesMeta: - typescript: - optional: true - checksum: 3624520abb5807ed8f57b1197e61c7b1ed770c56dfcaca66372d584ff50175225798bccb701f7ef129d62c5989070e1ee3a0aa2d84e56d9524dcf011a2bb1a52 + node-fetch: ^2.6.12 + checksum: 78f993fa099eaaa041122ab037fe9503ecbbcb9daef234d1d2e0b9230a983f64d645d088c464e21a247b825a08dc444a6e7064adfa93536d3a9454b4745b3632 languageName: node linkType: hard -"@typescript-eslint/utils@npm:5.40.1": - version: 5.40.1 - resolution: "@typescript-eslint/utils@npm:5.40.1" +"cross-spawn@npm:^7.0.0, cross-spawn@npm:^7.0.2, cross-spawn@npm:^7.0.3": + version: 7.0.3 + resolution: "cross-spawn@npm:7.0.3" dependencies: - "@types/json-schema": ^7.0.9 - "@types/semver": ^7.3.12 - "@typescript-eslint/scope-manager": 5.40.1 - "@typescript-eslint/types": 5.40.1 - "@typescript-eslint/typescript-estree": 5.40.1 - eslint-scope: ^5.1.1 - eslint-utils: ^3.0.0 - semver: ^7.3.7 - peerDependencies: - eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 - checksum: a971101bb2f4c742a1734a87e17997addb7ffa6639d472097fe098f6c5f09567b858949b97f05892aabb20f38479abecdfdd69cf740046aa601dd3fc39a44090 + path-key: ^3.1.0 + shebang-command: ^2.0.0 + which: ^2.0.1 + checksum: 671cc7c7288c3a8406f3c69a3ae2fc85555c04169e9d611def9a675635472614f1c0ed0ef80955d5b6d4e724f6ced67f0ad1bb006c2ea643488fcfef994d7f52 languageName: node linkType: hard -"@typescript-eslint/visitor-keys@npm:5.40.1": - version: 5.40.1 - resolution: "@typescript-eslint/visitor-keys@npm:5.40.1" - dependencies: - "@typescript-eslint/types": 5.40.1 - eslint-visitor-keys: ^3.3.0 - checksum: b5dbf1e484ba2832ca1883ee9cf7da5967f70aa5624f3fb67f13c3be90a3770b0bb96e64ccfb0c31b5d8f80794b5727e14b6c0d8c5184634a686f0ea6e798772 +"crossws@npm:^0.1.0": + version: 0.1.1 + resolution: "crossws@npm:0.1.1" + checksum: 4cd8eadb497d852998b770d54a10779ba9e0c38c823d141c35040c7a7afc7a6fcd274ce82a8614e992e3f71cb5e41c71a01ee0923ab6e1bec215842404555d7d languageName: node linkType: hard -"@typescript-eslint/visitor-keys@npm:5.62.0": - version: 5.62.0 - resolution: "@typescript-eslint/visitor-keys@npm:5.62.0" +"css-selector-tokenizer@npm:^0.8": + version: 0.8.0 + resolution: "css-selector-tokenizer@npm:0.8.0" dependencies: - "@typescript-eslint/types": 5.62.0 - eslint-visitor-keys: ^3.3.0 - checksum: 976b05d103fe8335bef5c93ad3f76d781e3ce50329c0243ee0f00c0fcfb186c81df50e64bfdd34970148113f8ade90887f53e3c4938183afba830b4ba8e30a35 + cssesc: ^3.0.0 + fastparse: ^1.1.2 + checksum: 1eb7ca7d2c21ede700a0fab7df4547198431c30ba62663d81a566a8abe6ab7524f627ce6c0bde63f34917e199b73be4081e449bd8faf107d155766204082aa0a languageName: node linkType: hard -"@uniswap/sdk-core@npm:^3.0.0-alpha.3": - version: 3.2.3 - resolution: "@uniswap/sdk-core@npm:3.2.3" - dependencies: - "@ethersproject/address": ^5.0.2 - big.js: ^5.2.2 - decimal.js-light: ^2.5.0 - jsbi: ^3.1.4 - tiny-invariant: ^1.1.0 - toformat: ^2.0.0 - checksum: a19367c7e1d7b391b1664f59b808836cbaed9a12880bdf6b9a31e6c3b63f2edce2966bdda65144a3003e4c3cd96085b86129c174971330a9766194c404263346 +"css-what@npm:^5.0.1": + version: 5.1.0 + resolution: "css-what@npm:5.1.0" + checksum: 0b75d1bac95c885c168573c85744a6c6843d8c33345f54f717218b37ea6296b0e99bb12105930ea170fd4a921990392a7c790c16c585c1d8960c49e2b7ec39f7 languageName: node linkType: hard -"@uniswap/sdk-core@npm:~4.0.1": - version: 4.0.9 - resolution: "@uniswap/sdk-core@npm:4.0.9" - dependencies: - "@ethersproject/address": ^5.0.2 - big.js: ^5.2.2 - decimal.js-light: ^2.5.0 - jsbi: ^3.1.4 - tiny-invariant: ^1.1.0 - toformat: ^2.0.0 - checksum: f4ed31d995ddd04579061ecc9d613c88da400c50a8be820142fb7cce958532b828ec1992d0c0a5115f839a3cd5e4722cbd853578fa0a28a46aabbd60c3a54ef7 +"cssesc@npm:^3.0.0": + version: 3.0.0 + resolution: "cssesc@npm:3.0.0" + bin: + cssesc: bin/cssesc + checksum: f8c4ababffbc5e2ddf2fa9957dda1ee4af6048e22aeda1869d0d00843223c1b13ad3f5d88b51caa46c994225eacb636b764eb807a8883e2fb6f99b4f4e8c48b2 languageName: node linkType: hard -"@uniswap/v2-sdk@npm:~3.0.1": - version: 3.0.1 - resolution: "@uniswap/v2-sdk@npm:3.0.1" - dependencies: - "@ethersproject/address": ^5.0.0 - "@ethersproject/solidity": ^5.0.0 - "@uniswap/sdk-core": ^3.0.0-alpha.3 - tiny-invariant: ^1.1.0 - tiny-warning: ^1.0.3 - checksum: 2fd2de4adc462c53f1b963d4747b6b413292dc0054ebe93372753a3b2605a23169fcd8d9a8daf6ebc08568e0ae8891f9daeb29cabfe4369698e8a58395706e20 +"csstype@npm:^3.0.2, csstype@npm:^3.0.7": + version: 3.1.3 + resolution: "csstype@npm:3.1.3" + checksum: 8db785cc92d259102725b3c694ec0c823f5619a84741b5c7991b8ad135dfaa66093038a1cc63e03361a6cd28d122be48f2106ae72334e067dd619a51f49eddf7 languageName: node linkType: hard -"@vanilla-extract/babel-plugin-debug-ids@npm:^1.0.2": - version: 1.0.3 - resolution: "@vanilla-extract/babel-plugin-debug-ids@npm:1.0.3" - dependencies: - "@babel/core": ^7.20.7 - checksum: aff82b7f5c0e1df0e3018335287d194832930b1e7a586716dbcf5dd2b0d6d74d48cb5cd64ab84232d2b597ff04c8bb2a734f3965c931e07fd3385d4954592fb0 +"culori@npm:^3": + version: 3.3.0 + resolution: "culori@npm:3.3.0" + checksum: 7091ab572ed49222a25872a0c2c350340b96dac1c3237a7b58a93bfb02d11c64d68c585c32f91985a563b3d52402d16722e33a00087456287df28e3db5d99f13 languageName: node linkType: hard -"@vanilla-extract/css@npm:1.9.1": - version: 1.9.1 - resolution: "@vanilla-extract/css@npm:1.9.1" +"daisyui@npm:~4.4.19": + version: 4.4.24 + resolution: "daisyui@npm:4.4.24" dependencies: - "@emotion/hash": ^0.8.0 - "@vanilla-extract/private": ^1.0.3 - ahocorasick: 1.0.2 - chalk: ^4.1.1 - css-what: ^5.0.1 - cssesc: ^3.0.0 - csstype: ^3.0.7 - deep-object-diff: ^1.1.0 - deepmerge: ^4.2.2 - media-query-parser: ^2.0.2 - outdent: ^0.8.0 - checksum: 91127d8e2eaaf521b155a39fb6a93e0fbfe5ddd5a8bdf1c732aba278cfdb9505cba24c755a982bc47682b9ff582a06d11e51e6f8d810404164ba098799ce6800 + css-selector-tokenizer: ^0.8 + culori: ^3 + picocolors: ^1 + postcss-js: ^4 + checksum: 06b226e798ef95cd836952fe9095e950a0ed461299e061293b5c174ddf38cf829a05d993aef7319fcd95ce63934c6638794b3dfd19f965b7a798f4be7099f259 languageName: node linkType: hard -"@vanilla-extract/css@npm:^1.14.0": - version: 1.14.0 - resolution: "@vanilla-extract/css@npm:1.14.0" - dependencies: - "@emotion/hash": ^0.9.0 - "@vanilla-extract/private": ^1.0.3 - chalk: ^4.1.1 - css-what: ^6.1.0 - cssesc: ^3.0.0 - csstype: ^3.0.7 - deep-object-diff: ^1.1.9 - deepmerge: ^4.2.2 - media-query-parser: ^2.0.2 - modern-ahocorasick: ^1.0.0 - outdent: ^0.8.0 - checksum: ca12de26f72b908c7ac2ee9319faff885fb451ab3da7cef86aae8660c7e042c447041be40ac8c6155d87e8a709efb0697214db3a6cce211e8ef3c110d4dcf8a1 +"damerau-levenshtein@npm:^1.0.8": + version: 1.0.8 + resolution: "damerau-levenshtein@npm:1.0.8" + checksum: d240b7757544460ae0586a341a53110ab0a61126570ef2d8c731e3eab3f0cb6e488e2609e6a69b46727635de49be20b071688698744417ff1b6c1d7ccd03e0de languageName: node linkType: hard -"@vanilla-extract/dynamic@npm:2.0.2": - version: 2.0.2 - resolution: "@vanilla-extract/dynamic@npm:2.0.2" +"debug@npm:4, debug@npm:^4.1.0, debug@npm:^4.1.1, debug@npm:^4.3.2, debug@npm:^4.3.4": + version: 4.3.4 + resolution: "debug@npm:4.3.4" dependencies: - "@vanilla-extract/private": ^1.0.3 - checksum: c6f22606bce094a5682c6d842be6d6965b9448f8973eaabdaa7a7438146458c22490c1c63345f08d2226f1c95ac20731835a5140c2c18646b2c1287b65607b84 + ms: 2.1.2 + peerDependenciesMeta: + supports-color: + optional: true + checksum: 3dbad3f94ea64f34431a9cbf0bafb61853eda57bff2880036153438f50fb5a84f27683ba0d8e5426bf41a8c6ff03879488120cf5b3a761e77953169c0600a708 languageName: node linkType: hard -"@vanilla-extract/integration@npm:^6.0.2": - version: 6.2.3 - resolution: "@vanilla-extract/integration@npm:6.2.3" +"debug@npm:4.1.1": + version: 4.1.1 + resolution: "debug@npm:4.1.1" dependencies: - "@babel/core": ^7.20.7 - "@babel/plugin-syntax-typescript": ^7.20.0 - "@vanilla-extract/babel-plugin-debug-ids": ^1.0.2 - "@vanilla-extract/css": ^1.14.0 - esbuild: 0.17.6 - eval: 0.1.8 - find-up: ^5.0.0 - javascript-stringify: ^2.0.1 - lodash: ^4.17.21 - mlly: ^1.1.0 - outdent: ^0.8.0 - vite: ^4.1.4 - vite-node: ^0.28.5 - checksum: 2f5dec52423052d991cb2ec2295514306a3121c7ff153614216351711281a3f9ea82ab03a23bde2256caf9220c6b764ffe7ec986eaf1d432cc6212217a17b3a0 + ms: ^2.1.1 + checksum: 1e681f5cce94ba10f8dde74b20b42e4d8cf0d2a6700f4c165bb3bb6885565ef5ca5885bf07e704974a835f2415ff095a63164f539988a1f07e8a69fe8b1d65ad languageName: node linkType: hard -"@vanilla-extract/private@npm:^1.0.3": - version: 1.0.3 - resolution: "@vanilla-extract/private@npm:1.0.3" - checksum: 866a71ba6804edeb0735684e7723ba78f5cf0bb40d4fb538fe6bf7d73928099e341312337b2a510ac0ce96ff8a4b39eb7f7a5fad0c842532353dd20e7278f29b +"debug@npm:^3.2.7": + version: 3.2.7 + resolution: "debug@npm:3.2.7" + dependencies: + ms: ^2.1.1 + checksum: b3d8c5940799914d30314b7c3304a43305fd0715581a919dacb8b3176d024a782062368405b47491516d2091d6462d4d11f2f4974a405048094f8bfebfa3071c languageName: node linkType: hard -"@vanilla-extract/sprinkles@npm:1.5.0": - version: 1.5.0 - resolution: "@vanilla-extract/sprinkles@npm:1.5.0" - peerDependencies: - "@vanilla-extract/css": ^1.0.0 - checksum: 522b96afe856a72d76072ab41453edc35117772a6ac829c8a5ad09cddd69152e152b1cbda0b4344d50dbde59d0effa39301beb7acf319ef88f485966c89c80fd +"decamelize@npm:^1.2.0": + version: 1.2.0 + resolution: "decamelize@npm:1.2.0" + checksum: ad8c51a7e7e0720c70ec2eeb1163b66da03e7616d7b98c9ef43cce2416395e84c1e9548dd94f5f6ffecfee9f8b94251fc57121a8b021f2ff2469b2bae247b8aa languageName: node linkType: hard -"@vercel/build-utils@npm:6.2.4": - version: 6.2.4 - resolution: "@vercel/build-utils@npm:6.2.4" - checksum: 7ecb21cc9714e81af683148602175fd7b51695530134ff70dc7b0e5272a354280b32a6da7a82394876cea84eb7ef8d3809e12447ce5165f2dc16e43823fe92c1 +"decimal.js-light@npm:^2.5.0": + version: 2.5.1 + resolution: "decimal.js-light@npm:2.5.1" + checksum: f5a2c7eac1c4541c8ab8a5c8abea64fc1761cefc7794bd5f8afd57a8a78d1b51785e0c4e4f85f4895a043eaa90ddca1edc3981d1263eb6ddce60f32bf5fe66c9 languageName: node linkType: hard -"@vercel/gatsby-plugin-vercel-analytics@npm:1.0.7": - version: 1.0.7 - resolution: "@vercel/gatsby-plugin-vercel-analytics@npm:1.0.7" - dependencies: - "@babel/runtime": 7.12.1 - web-vitals: 0.2.4 - checksum: 5501a55d0ae0bc52a1ce673ed9ec0056fbcb91cf1e62dfe26ccd6cca60803aeb89e297602408a18f437d4907fcd717e65f455d60e49a973ed285e3fa364946c3 +"decode-uri-component@npm:^0.2.0, decode-uri-component@npm:^0.2.2": + version: 0.2.2 + resolution: "decode-uri-component@npm:0.2.2" + checksum: 95476a7d28f267292ce745eac3524a9079058bbb35767b76e3ee87d42e34cd0275d2eb19d9d08c3e167f97556e8a2872747f5e65cbebcac8b0c98d83e285f139 languageName: node linkType: hard -"@vercel/gatsby-plugin-vercel-builder@npm:1.1.6": - version: 1.1.6 - resolution: "@vercel/gatsby-plugin-vercel-builder@npm:1.1.6" - dependencies: - "@vercel/build-utils": 6.2.4 - "@vercel/node": 2.9.5 - "@vercel/routing-utils": 2.1.9 - ajv: 8.12.0 - esbuild: 0.14.47 - etag: 1.8.1 - fs-extra: 11.1.0 - checksum: 273115faaf5e160709a6ad2c275e0a870f4ef79806ca7fbc1a87592a44f4310ee9ecce9bcee80a77089b10a376162e4edca49119d8810b2d0bdcb2a04deb7985 +"deep-is@npm:^0.1.3": + version: 0.1.4 + resolution: "deep-is@npm:0.1.4" + checksum: edb65dd0d7d1b9c40b2f50219aef30e116cedd6fc79290e740972c132c09106d2e80aa0bc8826673dd5a00222d4179c84b36a790eef63a4c4bca75a37ef90804 languageName: node linkType: hard -"@vercel/go@npm:2.3.6": - version: 2.3.6 - resolution: "@vercel/go@npm:2.3.6" - checksum: 0318cadf509b2f3c15b2e09fcc1a417d47643726d24a903a4ed69f5df98fdcf623c16cd2546a459470bf2a350c67f02ca8b30b19e66ac4259e41fa7bd8835476 +"deep-object-diff@npm:^1.1.0": + version: 1.1.9 + resolution: "deep-object-diff@npm:1.1.9" + checksum: ecd42455e4773f653595d28070295e7aaa8402db5f8ab21d0bec115a7cb4de5e207a5665514767da5f025c96597f1d3a0a4888aeb4dd49e03c996871a3aa05ef languageName: node linkType: hard -"@vercel/hydrogen@npm:0.0.52": - version: 0.0.52 - resolution: "@vercel/hydrogen@npm:0.0.52" - checksum: b23fed7f51d086ec8b09c5eb93de74069895bf74d1ad93a6aaf499b436bc0c43900536d9abcdcd4b18fb72f6028dd48b104fdf9232dbdbc861c94ba5fb3a389f +"deepmerge@npm:^4.2.2": + version: 4.3.1 + resolution: "deepmerge@npm:4.3.1" + checksum: 2024c6a980a1b7128084170c4cf56b0fd58a63f2da1660dcfe977415f27b17dbe5888668b59d0b063753f3220719d5e400b7f113609489c90160bb9a5518d052 languageName: node linkType: hard -"@vercel/next@npm:3.4.6": - version: 3.4.6 - resolution: "@vercel/next@npm:3.4.6" - checksum: ddc9e8bfe0419519c244539acd6bb06ee5603b25f741b90a76e8116d652aa603bc3763a67bdeb53d8aee909dd9c5bfea0b119265d0bc69001c925513370b0167 +"define-data-property@npm:^1.0.1, define-data-property@npm:^1.1.1": + version: 1.1.1 + resolution: "define-data-property@npm:1.1.1" + dependencies: + get-intrinsic: ^1.2.1 + gopd: ^1.0.1 + has-property-descriptors: ^1.0.0 + checksum: a29855ad3f0630ea82e3c5012c812efa6ca3078d5c2aa8df06b5f597c1cde6f7254692df41945851d903e05a1668607b6d34e778f402b9ff9ffb38111f1a3f0d languageName: node linkType: hard -"@vercel/nft@npm:0.22.5": - version: 0.22.5 - resolution: "@vercel/nft@npm:0.22.5" +"define-properties@npm:^1.1.3, define-properties@npm:^1.2.0, define-properties@npm:^1.2.1": + version: 1.2.1 + resolution: "define-properties@npm:1.2.1" dependencies: - "@mapbox/node-pre-gyp": ^1.0.5 - "@rollup/pluginutils": ^4.0.0 - acorn: ^8.6.0 - async-sema: ^3.1.1 - bindings: ^1.4.0 - estree-walker: 2.0.2 - glob: ^7.1.3 - graceful-fs: ^4.2.9 - micromatch: ^4.0.2 - node-gyp-build: ^4.2.2 - resolve-from: ^5.0.0 - bin: - nft: out/cli.js - checksum: 9bc965a6b096c55ed14bfc761668fe3900db83cf379bf1e9741d31510579950dff12d8223867b3fd0c3af1bb96a1b4519c4b0f93d1c26949d2e216a4272f59b4 + define-data-property: ^1.0.1 + has-property-descriptors: ^1.0.0 + object-keys: ^1.1.1 + checksum: b4ccd00597dd46cb2d4a379398f5b19fca84a16f3374e2249201992f36b30f6835949a9429669ee6b41b6e837205a163eadd745e472069e70dfc10f03e5fcc12 languageName: node linkType: hard -"@vercel/node-bridge@npm:3.1.11": - version: 3.1.11 - resolution: "@vercel/node-bridge@npm:3.1.11" - checksum: 57c3e52307dd92a2dcf3b8606023f6be68ecc8dd582af06a89c6673498f6dc28a77a9c170c86b12e2af263385909ac91b3d3d7c9042e83386c7cdd68e4c7b7a0 +"defu@npm:^6.1.3, defu@npm:^6.1.4": + version: 6.1.4 + resolution: "defu@npm:6.1.4" + checksum: 40e3af6338f195ac1564f53d1887fa2d0429ac7e8c081204bc4d29191180059d3952b5f4e08fe5df8d59eb873aa26e9c88b56d4fac699673d4a372c93620b229 languageName: node linkType: hard -"@vercel/node@npm:2.9.5": - version: 2.9.5 - resolution: "@vercel/node@npm:2.9.5" - dependencies: - "@edge-runtime/vm": 2.0.0 - "@types/node": 14.18.33 - "@vercel/build-utils": 6.2.4 - "@vercel/node-bridge": 3.1.11 - "@vercel/static-config": 2.0.12 - edge-runtime: 2.0.0 - esbuild: 0.14.47 - exit-hook: 2.2.1 - node-fetch: 2.6.7 - ts-node: 10.9.1 - typescript: 4.3.4 - checksum: 3ffde9ba4cd38a365a8252656711748fa5d2b8dbd2cd86db3c4cf86fa57be9656b5767b0a11786873ead4d73ef267091e12a4d06c2ee7e9af5e7c73250d5487b +"delegates@npm:^1.0.0": + version: 1.0.0 + resolution: "delegates@npm:1.0.0" + checksum: a51744d9b53c164ba9c0492471a1a2ffa0b6727451bdc89e31627fdf4adda9d51277cfcbfb20f0a6f08ccb3c436f341df3e92631a3440226d93a8971724771fd languageName: node linkType: hard -"@vercel/python@npm:3.1.48": - version: 3.1.48 - resolution: "@vercel/python@npm:3.1.48" - checksum: 31f699c32bdae45b2caf003786741c8242be219f08015140666a120d997b54eef84a84de90b21f0ef60c2cd7c6097b26faae15594fa28a18480d56bf697cb878 +"denque@npm:^2.1.0": + version: 2.1.0 + resolution: "denque@npm:2.1.0" + checksum: 1d4ae1d05e59ac3a3481e7b478293f4b4c813819342273f3d5b826c7ffa9753c520919ba264f377e09108d24ec6cf0ec0ac729a5686cbb8f32d797126c5dae74 languageName: node linkType: hard -"@vercel/redwood@npm:1.1.4": - version: 1.1.4 - resolution: "@vercel/redwood@npm:1.1.4" - dependencies: - "@vercel/nft": 0.22.5 - "@vercel/routing-utils": 2.1.9 - semver: 6.1.1 - checksum: c77e94eac5a14d58acf28512d32ce5748a7373bbc4508c32d07f48a402385e5d703f2d874837ca572547793c4e8f29fae75cd939eab8d0459158ade6efbd4e5a +"depd@npm:~1.1.2": + version: 1.1.2 + resolution: "depd@npm:1.1.2" + checksum: 6b406620d269619852885ce15965272b829df6f409724415e0002c8632ab6a8c0a08ec1f0bd2add05dc7bd7507606f7e2cc034fa24224ab829580040b835ecd9 languageName: node linkType: hard -"@vercel/remix@npm:1.3.2": - version: 1.3.2 - resolution: "@vercel/remix@npm:1.3.2" - dependencies: - "@remix-run/dev": 1.12.0 - "@vercel/nft": 0.22.5 - "@vercel/static-config": 2.0.12 - path-to-regexp: 6.2.1 - ts-morph: 12.0.0 - checksum: 34970741e70a2b781241ecd95c4141cc6333ee8a90c393c1f91e1dba9a12beaf4aed08f2bd2fb7c547c0da059b564a2b83f1cc1279038b2cf6a21cc451c50d8e +"dequal@npm:^2.0.3": + version: 2.0.3 + resolution: "dequal@npm:2.0.3" + checksum: 8679b850e1a3d0ebbc46ee780d5df7b478c23f335887464023a631d1b9af051ad4a6595a44220f9ff8ff95a8ddccf019b5ad778a976fd7bbf77383d36f412f90 languageName: node linkType: hard -"@vercel/routing-utils@npm:2.1.9": - version: 2.1.9 - resolution: "@vercel/routing-utils@npm:2.1.9" - dependencies: - ajv: ^6.0.0 - path-to-regexp: 6.1.0 - dependenciesMeta: - ajv: - optional: true - checksum: c2e92ca8c2dd178a7c5b6e383b04146cfc5f485237c04641c94cad65731d3281a11a43dccf154873465b4f0fd592dbde87cd5b9c96430c86279ae3ac18849ba6 +"destr@npm:^2.0.1, destr@npm:^2.0.2": + version: 2.0.2 + resolution: "destr@npm:2.0.2" + checksum: cb63dd477d1c323f95650ce7784f1497466d68150ac0fddd6c99652be45c9dcb997d53fd5eb6c6fda6c0b2a5e5b4fc7fa3c3e18dace3d810ba4cf45d8b55bdd6 languageName: node linkType: hard -"@vercel/ruby@npm:1.3.64": - version: 1.3.64 - resolution: "@vercel/ruby@npm:1.3.64" - checksum: 8cc7e0499aaf6862c878c79a20e99335f613dd6155f85b93c8f044c63826b8f43ce5b8a4a1bcf5f13929953f139faf3534abe168f4f7b7128db3391a09a2ff2a +"detect-browser@npm:5.3.0, detect-browser@npm:^5.3.0": + version: 5.3.0 + resolution: "detect-browser@npm:5.3.0" + checksum: dd6e08d55da1d9e0f22510ac79872078ae03d9dfa13c5e66c96baedc1c86567345a88f96949161f6be8f3e0fafa93bf179bdb1cd311b14f5f163112fcc70ab49 languageName: node linkType: hard -"@vercel/static-build@npm:1.3.8": - version: 1.3.8 - resolution: "@vercel/static-build@npm:1.3.8" - dependencies: - "@vercel/gatsby-plugin-vercel-analytics": 1.0.7 - "@vercel/gatsby-plugin-vercel-builder": 1.1.6 - checksum: 7731d9a9df81c659338ac1c89631e6ff3baab2634d9a9a3afe80e7818f8c754d524f00e4430063e456b241614bafc30cd2b684fc996fc212a155ac6c85602826 +"detect-libc@npm:^1.0.3": + version: 1.0.3 + resolution: "detect-libc@npm:1.0.3" + bin: + detect-libc: ./bin/detect-libc.js + checksum: daaaed925ffa7889bd91d56e9624e6c8033911bb60f3a50a74a87500680652969dbaab9526d1e200a4c94acf80fc862a22131841145a0a8482d60a99c24f4a3e languageName: node linkType: hard -"@vercel/static-config@npm:2.0.12": - version: 2.0.12 - resolution: "@vercel/static-config@npm:2.0.12" - dependencies: - ajv: 8.6.3 - json-schema-to-ts: 1.6.4 - ts-morph: 12.0.0 - checksum: b9715ec1ec6c488de0c1b6c00d459704e224453602cf4c68992ed31763fa03d370ecaaa223c6b78929587fd31d6779c42afb47ed5526c910ee5f793d15b60b31 +"detect-libc@npm:^2.0.0": + version: 2.0.2 + resolution: "detect-libc@npm:2.0.2" + checksum: 2b2cd3649b83d576f4be7cc37eb3b1815c79969c8b1a03a40a4d55d83bc74d010753485753448eacb98784abf22f7dbd3911fd3b60e29fda28fed2d1a997944d languageName: node linkType: hard -"@wagmi/connectors@npm:3.1.2": - version: 3.1.2 - resolution: "@wagmi/connectors@npm:3.1.2" - dependencies: - "@coinbase/wallet-sdk": ^3.6.6 - "@ledgerhq/connect-kit-loader": ^1.1.0 - "@safe-global/safe-apps-provider": ^0.17.1 - "@safe-global/safe-apps-sdk": ^8.0.0 - "@walletconnect/ethereum-provider": 2.10.1 - "@walletconnect/legacy-provider": ^2.0.0 - "@walletconnect/modal": 2.6.2 - "@walletconnect/utils": 2.10.1 - abitype: 0.8.7 - eventemitter3: ^4.0.7 - peerDependencies: - typescript: ">=5.0.4" - viem: ">=0.3.35" - peerDependenciesMeta: - typescript: - optional: true - checksum: 9e00708bafbd2735dafcadb40360fbbf8a90850f19d79172e7549bb4f9655dcdea20159638e1f0ed20c92beb6beb4fd0168cd946ef1c3fa271a1ed92f4265d5c +"detect-node-es@npm:^1.1.0": + version: 1.1.0 + resolution: "detect-node-es@npm:1.1.0" + checksum: e46307d7264644975b71c104b9f028ed1d3d34b83a15b8a22373640ce5ea630e5640b1078b8ea15f202b54641da71e4aa7597093bd4b91f113db520a26a37449 languageName: node linkType: hard -"@wagmi/core@npm:1.4.4": - version: 1.4.4 - resolution: "@wagmi/core@npm:1.4.4" - dependencies: - "@wagmi/connectors": 3.1.2 - abitype: 0.8.7 - eventemitter3: ^4.0.7 - zustand: ^4.3.1 - peerDependencies: - typescript: ">=5.0.4" - viem: ">=0.3.35" - peerDependenciesMeta: - typescript: - optional: true - checksum: ee4946a6ebdc9526024898e10d472b64eba673f7d9075f56aa564541a4a3c394c5e285a64f297f1a315471a8b7b7649e688ddd2cd82c9b38c77d036d2278b86f +"didyoumean@npm:^1.2.2": + version: 1.2.2 + resolution: "didyoumean@npm:1.2.2" + checksum: d5d98719d58b3c2fa59663c4c42ba9716f1fd01245c31d5fce31915bd3aa26e6aac149788e007358f778ebbd68a2256eb5973e8ca6f221df221ba060115acf2e languageName: node linkType: hard -"@walletconnect/core@npm:2.10.1": - version: 2.10.1 - resolution: "@walletconnect/core@npm:2.10.1" - dependencies: - "@walletconnect/heartbeat": 1.2.1 - "@walletconnect/jsonrpc-provider": 1.0.13 - "@walletconnect/jsonrpc-types": 1.0.3 - "@walletconnect/jsonrpc-utils": 1.0.8 - "@walletconnect/jsonrpc-ws-connection": 1.0.13 - "@walletconnect/keyvaluestorage": ^1.0.2 - "@walletconnect/logger": ^2.0.1 - "@walletconnect/relay-api": ^1.0.9 - "@walletconnect/relay-auth": ^1.0.4 - "@walletconnect/safe-json": ^1.0.2 - "@walletconnect/time": ^1.0.2 - "@walletconnect/types": 2.10.1 - "@walletconnect/utils": 2.10.1 - events: ^3.3.0 - lodash.isequal: 4.5.0 - uint8arrays: ^3.1.0 - checksum: d58ae15c53efe1792da8c7aa1b7ba47efb49807cfe0c73f225d59c5cd847a0e50979ce6965b94915812412deba3e5aa2dca13a02bd41c087e85575e99afad223 +"diff@npm:^4.0.1": + version: 4.0.2 + resolution: "diff@npm:4.0.2" + checksum: f2c09b0ce4e6b301c221addd83bf3f454c0bc00caa3dd837cf6c127d6edf7223aa2bbe3b688feea110b7f262adbfc845b757c44c8a9f8c0c5b15d8fa9ce9d20d languageName: node linkType: hard -"@walletconnect/crypto@npm:^1.0.3": +"dijkstrajs@npm:^1.0.1": version: 1.0.3 - resolution: "@walletconnect/crypto@npm:1.0.3" - dependencies: - "@walletconnect/encoding": ^1.0.2 - "@walletconnect/environment": ^1.0.1 - "@walletconnect/randombytes": ^1.0.3 - aes-js: ^3.1.2 - hash.js: ^1.1.7 - tslib: 1.14.1 - checksum: 056c80451178d74be6237f24e53eb96951379ad2f556642b4f07231a9cac53512af182dfb58ee359d1d6803231030de747eb17b35a9a25577e20de3ef2d8fdec + resolution: "dijkstrajs@npm:1.0.3" + checksum: 82ff2c6633f235dd5e6bed04ec62cdfb1f327b4d7534557bd52f18991313f864ee50654543072fff4384a92b643ada4d5452f006b7098dbdfad6c8744a8c9e08 languageName: node linkType: hard -"@walletconnect/encoding@npm:^1.0.2": - version: 1.0.2 - resolution: "@walletconnect/encoding@npm:1.0.2" +"dir-glob@npm:^3.0.1": + version: 3.0.1 + resolution: "dir-glob@npm:3.0.1" dependencies: - is-typedarray: 1.0.0 - tslib: 1.14.1 - typedarray-to-buffer: 3.1.5 - checksum: 648029d6a04e0e3675e1220b87c982e5d69764873e30a45a7c57f18223cd7c13e6758138d4644fd05d8fa03bd438fafb0a0ebc6ae168ed6f4a9bf1f93de1b82f + path-type: ^4.0.0 + checksum: fa05e18324510d7283f55862f3161c6759a3f2f8dbce491a2fc14c8324c498286c54282c1f0e933cb930da8419b30679389499b919122952a4f8592362ef4615 languageName: node linkType: hard -"@walletconnect/environment@npm:^1.0.1": - version: 1.0.1 - resolution: "@walletconnect/environment@npm:1.0.1" - dependencies: - tslib: 1.14.1 - checksum: a18731d857bdca73910147e59992cef3c6e292c37ab3d3013307bd706f06cb216aa804f0f48b25a78df6493ad8127e633629f4b50acb4f69d3765d6ac0524f68 +"dlv@npm:^1.1.3": + version: 1.1.3 + resolution: "dlv@npm:1.1.3" + checksum: d7381bca22ed11933a1ccf376db7a94bee2c57aa61e490f680124fa2d1cd27e94eba641d9f45be57caab4f9a6579de0983466f620a2cd6230d7ec93312105ae7 languageName: node linkType: hard -"@walletconnect/ethereum-provider@npm:2.10.1": - version: 2.10.1 - resolution: "@walletconnect/ethereum-provider@npm:2.10.1" +"doctrine@npm:^2.1.0": + version: 2.1.0 + resolution: "doctrine@npm:2.1.0" dependencies: - "@walletconnect/jsonrpc-http-connection": ^1.0.7 - "@walletconnect/jsonrpc-provider": ^1.0.13 - "@walletconnect/jsonrpc-types": ^1.0.3 - "@walletconnect/jsonrpc-utils": ^1.0.8 - "@walletconnect/sign-client": 2.10.1 - "@walletconnect/types": 2.10.1 - "@walletconnect/universal-provider": 2.10.1 - "@walletconnect/utils": 2.10.1 - events: ^3.3.0 - peerDependencies: - "@walletconnect/modal": ">=2" - peerDependenciesMeta: - "@walletconnect/modal": - optional: true - checksum: ec3d88ba101a5d8f193262b5b1e770cccad6457ec56fa1f3d17fa531de4e07e8cf03a1341669122c61956f0d5c3a6eca57d3f12f524e046acddb401cdb76fe7c + esutils: ^2.0.2 + checksum: a45e277f7feaed309fe658ace1ff286c6e2002ac515af0aaf37145b8baa96e49899638c7cd47dccf84c3d32abfc113246625b3ac8f552d1046072adee13b0dc8 languageName: node linkType: hard -"@walletconnect/events@npm:^1.0.1": - version: 1.0.1 - resolution: "@walletconnect/events@npm:1.0.1" +"doctrine@npm:^3.0.0": + version: 3.0.0 + resolution: "doctrine@npm:3.0.0" dependencies: - keyvaluestorage-interface: ^1.0.0 - tslib: 1.14.1 - checksum: d28aa4dcc981bdaf38f0aeed979731ca793cead7e7a4ee730a9146d99d89db09a86c8e3192ed860638283276961c0723ba00cf3b8776f0692b36ec7df6c01be4 + esutils: ^2.0.2 + checksum: fd7673ca77fe26cd5cba38d816bc72d641f500f1f9b25b83e8ce28827fe2da7ad583a8da26ab6af85f834138cf8dae9f69b0cd6ab925f52ddab1754db44d99ce languageName: node linkType: hard -"@walletconnect/heartbeat@npm:1.2.1": - version: 1.2.1 - resolution: "@walletconnect/heartbeat@npm:1.2.1" - dependencies: - "@walletconnect/events": ^1.0.1 - "@walletconnect/time": ^1.0.2 - tslib: 1.14.1 - checksum: df4d492a2d336283f834bc205c09b795f85cd507a61b14745dc2124e510a250fefbd83d51216f93df2e0aa0cf8120134db2679de8019eddd63877e9928997952 +"dotenv@npm:~16.3.1": + version: 16.3.2 + resolution: "dotenv@npm:16.3.2" + checksum: 917b27eeb654b95846484009326b1c52af7a7c25f7b09e2939ed49de8f98cb9895dcc04f13a39cdb078d247985e21147311ccb5bfbf2fd151afb20fa8f96de15 languageName: node linkType: hard -"@walletconnect/jsonrpc-http-connection@npm:^1.0.4, @walletconnect/jsonrpc-http-connection@npm:^1.0.7": - version: 1.0.7 - resolution: "@walletconnect/jsonrpc-http-connection@npm:1.0.7" +"duplexify@npm:^4.1.2": + version: 4.1.2 + resolution: "duplexify@npm:4.1.2" dependencies: - "@walletconnect/jsonrpc-utils": ^1.0.6 - "@walletconnect/safe-json": ^1.0.1 - cross-fetch: ^3.1.4 - tslib: 1.14.1 - checksum: c4efcd46d4b344727ca6879badca2c2f855499ac76c8dace5d118f4423167adce34e41a99f3dcab0febb945ce51c6ef0ac8556567d5e38d8dad864b131eb5b00 + end-of-stream: ^1.4.1 + inherits: ^2.0.3 + readable-stream: ^3.1.1 + stream-shift: ^1.0.0 + checksum: 964376c61c0e92f6ed0694b3ba97c84f199413dc40ab8dfdaef80b7a7f4982fcabf796214e28ed614a5bc1ec45488a29b81e7d46fa3f5ddf65bcb118c20145ad languageName: node linkType: hard -"@walletconnect/jsonrpc-provider@npm:1.0.13, @walletconnect/jsonrpc-provider@npm:^1.0.13, @walletconnect/jsonrpc-provider@npm:^1.0.6": - version: 1.0.13 - resolution: "@walletconnect/jsonrpc-provider@npm:1.0.13" - dependencies: - "@walletconnect/jsonrpc-utils": ^1.0.8 - "@walletconnect/safe-json": ^1.0.2 - tslib: 1.14.1 - checksum: 497dfdd9f988432f171bc98336f3583c679059f0a166f95d6e51c8e1937c17abd9a5fd3aadfcebf6964bae14edd1e05fb0453e370d6e3bbc7ff4919fcad7c478 +"eastasianwidth@npm:^0.2.0": + version: 0.2.0 + resolution: "eastasianwidth@npm:0.2.0" + checksum: 7d00d7cd8e49b9afa762a813faac332dee781932d6f2c848dc348939c4253f1d4564341b7af1d041853bc3f32c2ef141b58e0a4d9862c17a7f08f68df1e0f1ed languageName: node linkType: hard -"@walletconnect/jsonrpc-types@npm:1.0.3, @walletconnect/jsonrpc-types@npm:^1.0.2, @walletconnect/jsonrpc-types@npm:^1.0.3": - version: 1.0.3 - resolution: "@walletconnect/jsonrpc-types@npm:1.0.3" +"edge-runtime@npm:2.5.1": + version: 2.5.1 + resolution: "edge-runtime@npm:2.5.1" dependencies: - keyvaluestorage-interface: ^1.0.0 - tslib: 1.14.1 - checksum: 26e6f1d8f4207328d3df465c36d0d67844772863dc8e9e78e6cfec417cfc359300eab049d99ea558982b3f0948f4ca26b75253bdf635ffd82ffe30a5276b790c + "@edge-runtime/format": 2.2.0 + "@edge-runtime/vm": 3.1.1 + async-listen: 3.0.1 + mri: 1.2.0 + picocolors: 1.0.0 + pretty-bytes: 5.6.0 + pretty-ms: 7.0.1 + signal-exit: 4.0.2 + time-span: 4.0.0 + bin: + edge-runtime: dist/cli/index.js + checksum: 30f5960b3eb3b6036ed5b8acf604834c13995c72c4035b288e8e0eb056dfcbf16f91888e5308d422a30c6271edae6640278340cf40d1941e3e90f41c7988e471 languageName: node linkType: hard -"@walletconnect/jsonrpc-utils@npm:1.0.8, @walletconnect/jsonrpc-utils@npm:^1.0.4, @walletconnect/jsonrpc-utils@npm:^1.0.6, @walletconnect/jsonrpc-utils@npm:^1.0.7, @walletconnect/jsonrpc-utils@npm:^1.0.8": - version: 1.0.8 - resolution: "@walletconnect/jsonrpc-utils@npm:1.0.8" - dependencies: - "@walletconnect/environment": ^1.0.1 - "@walletconnect/jsonrpc-types": ^1.0.3 - tslib: 1.14.1 - checksum: f43a85dfce8150c3e3d1f009e8d8241ab8e10b026ea435f0918edf4db6b3a17586ba9d9c54a93cc61e4d3c685611e5bd5954fc377a581af503acd38e6d84c2ef +"electron-to-chromium@npm:^1.4.648": + version: 1.4.653 + resolution: "electron-to-chromium@npm:1.4.653" + checksum: 5e1fb48e749811f4384cd7a9940585a124f46d2a9f5bdfd2d7e79685d55db448433da303bd0fb6c3665ed052299843b5661319e10119821defbc3be8ff8eb060 languageName: node linkType: hard -"@walletconnect/jsonrpc-ws-connection@npm:1.0.13": - version: 1.0.13 - resolution: "@walletconnect/jsonrpc-ws-connection@npm:1.0.13" +"elliptic@npm:6.5.4": + version: 6.5.4 + resolution: "elliptic@npm:6.5.4" dependencies: - "@walletconnect/jsonrpc-utils": ^1.0.6 - "@walletconnect/safe-json": ^1.0.2 - events: ^3.3.0 - tslib: 1.14.1 - ws: ^7.5.1 - checksum: f2253b17564f7622e69b1252830f05efdf7f4d58b120adb3a3e950c2087845171c912307c39948d0b869aa8610688b83f54f54de4657091f7431aea95a59f8b9 + bn.js: ^4.11.9 + brorand: ^1.1.0 + hash.js: ^1.0.0 + hmac-drbg: ^1.0.1 + inherits: ^2.0.4 + minimalistic-assert: ^1.0.1 + minimalistic-crypto-utils: ^1.0.1 + checksum: d56d21fd04e97869f7ffcc92e18903b9f67f2d4637a23c860492fbbff5a3155fd9ca0184ce0c865dd6eb2487d234ce9551335c021c376cd2d3b7cb749c7d10f4 languageName: node linkType: hard -"@walletconnect/keyvaluestorage@npm:^1.0.2": - version: 1.1.0 - resolution: "@walletconnect/keyvaluestorage@npm:1.1.0" - dependencies: - "@walletconnect/safe-json": ^1.0.1 - idb-keyval: ^6.2.1 - unstorage: ^1.9.0 - peerDependencies: - "@react-native-async-storage/async-storage": 1.x - peerDependenciesMeta: - "@react-native-async-storage/async-storage": - optional: true - checksum: a6b310c5731f4252d9f889d4468405ef3338ca97c511d53d0dbd8d1aca7430f77ba8dc2214788c86a7418e23ec1bce226e64745c4988c1ca6da94d8570104fc9 +"emoji-regex@npm:^8.0.0": + version: 8.0.0 + resolution: "emoji-regex@npm:8.0.0" + checksum: d4c5c39d5a9868b5fa152f00cada8a936868fd3367f33f71be515ecee4c803132d11b31a6222b2571b1e5f7e13890156a94880345594d0ce7e3c9895f560f192 languageName: node linkType: hard -"@walletconnect/legacy-client@npm:^2.0.0": - version: 2.0.0 - resolution: "@walletconnect/legacy-client@npm:2.0.0" - dependencies: - "@walletconnect/crypto": ^1.0.3 - "@walletconnect/encoding": ^1.0.2 - "@walletconnect/jsonrpc-utils": ^1.0.4 - "@walletconnect/legacy-types": ^2.0.0 - "@walletconnect/legacy-utils": ^2.0.0 - "@walletconnect/safe-json": ^1.0.1 - "@walletconnect/window-getters": ^1.0.1 - "@walletconnect/window-metadata": ^1.0.1 - detect-browser: ^5.3.0 - query-string: ^6.13.5 - checksum: 57de9e373b24766e937734989080eb6d476e40d5406d4f817c989b278f25a09aa8636dfbe34a33f4de80ef90aea9641fdb7841007ecdba8e5ad47cd11614ee94 +"emoji-regex@npm:^9.2.2": + version: 9.2.2 + resolution: "emoji-regex@npm:9.2.2" + checksum: 8487182da74aabd810ac6d6f1994111dfc0e331b01271ae01ec1eb0ad7b5ecc2bbbbd2f053c05cb55a1ac30449527d819bbfbf0e3de1023db308cbcb47f86601 languageName: node linkType: hard -"@walletconnect/legacy-modal@npm:^2.0.0": - version: 2.0.0 - resolution: "@walletconnect/legacy-modal@npm:2.0.0" +"encode-utf8@npm:^1.0.3": + version: 1.0.3 + resolution: "encode-utf8@npm:1.0.3" + checksum: 550224bf2a104b1d355458c8a82e9b4ea07f9fc78387bc3a49c151b940ad26473de8dc9e121eefc4e84561cb0b46de1e4cd2bc766f72ee145e9ea9541482817f + languageName: node + linkType: hard + +"encoding@npm:^0.1.13": + version: 0.1.13 + resolution: "encoding@npm:0.1.13" dependencies: - "@walletconnect/legacy-types": ^2.0.0 - "@walletconnect/legacy-utils": ^2.0.0 - copy-to-clipboard: ^3.3.3 - preact: ^10.12.0 - qrcode: ^1.5.1 - checksum: 897a02c9f4129a8f0b8e37832bf49a408e7e6f2828e78bea90c3718471cb57558f5522dd69c19456b5cc54a4aa04a4f7942f262ad9b031d318a5498ca0ca4078 + iconv-lite: ^0.6.2 + checksum: bb98632f8ffa823996e508ce6a58ffcf5856330fde839ae42c9e1f436cc3b5cc651d4aeae72222916545428e54fd0f6aa8862fd8d25bdbcc4589f1e3f3715e7f languageName: node linkType: hard -"@walletconnect/legacy-provider@npm:^2.0.0": - version: 2.0.0 - resolution: "@walletconnect/legacy-provider@npm:2.0.0" +"end-of-stream@npm:^1.1.0, end-of-stream@npm:^1.4.1": + version: 1.4.4 + resolution: "end-of-stream@npm:1.4.4" dependencies: - "@walletconnect/jsonrpc-http-connection": ^1.0.4 - "@walletconnect/jsonrpc-provider": ^1.0.6 - "@walletconnect/legacy-client": ^2.0.0 - "@walletconnect/legacy-modal": ^2.0.0 - "@walletconnect/legacy-types": ^2.0.0 - "@walletconnect/legacy-utils": ^2.0.0 - checksum: 48adf2d938d3580be1dbaa4c7005cdf715896a56d3f4ab500c301cd5b442343c7df11bfccbc8e32bf9a7ba4b9a379208846ad848d79b1b6b511c1c4121fc83cf + once: ^1.4.0 + checksum: 530a5a5a1e517e962854a31693dbb5c0b2fc40b46dad2a56a2deec656ca040631124f4795823acc68238147805f8b021abbe221f4afed5ef3c8e8efc2024908b languageName: node linkType: hard -"@walletconnect/legacy-types@npm:^2.0.0": - version: 2.0.0 - resolution: "@walletconnect/legacy-types@npm:2.0.0" +"end-of-stream@npm:~1.1.0": + version: 1.1.0 + resolution: "end-of-stream@npm:1.1.0" dependencies: - "@walletconnect/jsonrpc-types": ^1.0.2 - checksum: 358d789f8a50e689edcfd8eb668fcdf8e1f03ab08757b12fad0e658ce7ef62268f8022502b476bce69e5165aa4454c4ad1ea41f17244ab8d0fcd9026bd94707c + once: ~1.3.0 + checksum: 9fa637e259e50e5e3634e8e14064a183bd0d407733594631362f9df596409739bef5f7064840e6725212a9edc8b4a70a5a3088ac423e8564f9dc183dd098c719 languageName: node linkType: hard -"@walletconnect/legacy-utils@npm:^2.0.0": - version: 2.0.0 - resolution: "@walletconnect/legacy-utils@npm:2.0.0" - dependencies: - "@walletconnect/encoding": ^1.0.2 - "@walletconnect/jsonrpc-utils": ^1.0.4 - "@walletconnect/legacy-types": ^2.0.0 - "@walletconnect/safe-json": ^1.0.1 - "@walletconnect/window-getters": ^1.0.1 - "@walletconnect/window-metadata": ^1.0.1 - detect-browser: ^5.3.0 - query-string: ^6.13.5 - checksum: ea90e98c2f2f0a7f1d8801f7284bae909952979413b5d8e339004948199a2777af025195442a3c78a27aa3c16bb546ef54bf9c592e5622e1f003bef6d4b355ca - languageName: node - linkType: hard - -"@walletconnect/logger@npm:^2.0.1": - version: 2.0.1 - resolution: "@walletconnect/logger@npm:2.0.1" - dependencies: - pino: 7.11.0 - tslib: 1.14.1 - checksum: b686679d176d5d22a3441d93e71be2652e6c447682a6d6f014baf7c2d9dcd23b93e2f434d4410e33cc532d068333f6b3c1d899aeb0d6f60cc296ed17f57b0c2c - languageName: node - linkType: hard - -"@walletconnect/modal-core@npm:2.6.2": - version: 2.6.2 - resolution: "@walletconnect/modal-core@npm:2.6.2" - dependencies: - valtio: 1.11.2 - checksum: 94daceba50c323b06ecbeac2968d9f0972f327359c6118887c6526cd64006249b12f64322d71bc6c4a2b928436ecc89cf3d3af706511fcdc264c1f4b34a2dd5d - languageName: node - linkType: hard - -"@walletconnect/modal-ui@npm:2.6.2": - version: 2.6.2 - resolution: "@walletconnect/modal-ui@npm:2.6.2" +"enhanced-resolve@npm:^5.12.0": + version: 5.15.0 + resolution: "enhanced-resolve@npm:5.15.0" dependencies: - "@walletconnect/modal-core": 2.6.2 - lit: 2.8.0 - motion: 10.16.2 - qrcode: 1.5.3 - checksum: cd1ec0205eb491e529670599d3dd26f6782d7c5a99d5594bf6949a8c760c1c5f4eb6ed72b8662450774fe4e2dd47678f2c05145c8f2494bd7153446ddf4bd7ed + graceful-fs: ^4.2.4 + tapable: ^2.2.0 + checksum: fbd8cdc9263be71cc737aa8a7d6c57b43d6aa38f6cc75dde6fcd3598a130cc465f979d2f4d01bb3bf475acb43817749c79f8eef9be048683602ca91ab52e4f11 languageName: node linkType: hard -"@walletconnect/modal@npm:2.6.2": - version: 2.6.2 - resolution: "@walletconnect/modal@npm:2.6.2" - dependencies: - "@walletconnect/modal-core": 2.6.2 - "@walletconnect/modal-ui": 2.6.2 - checksum: 68b354d49960b96d22de0e47a3801df27c01a3e96ec5fbde3ca6df1344ca2b20668b0c4d58fe1803f5670ac7b7b4c6f5b7b405e354f5f9eaff5cca147c13de9c +"env-paths@npm:^2.2.0": + version: 2.2.1 + resolution: "env-paths@npm:2.2.1" + checksum: 65b5df55a8bab92229ab2b40dad3b387fad24613263d103a97f91c9fe43ceb21965cd3392b1ccb5d77088021e525c4e0481adb309625d0cb94ade1d1fb8dc17e languageName: node linkType: hard -"@walletconnect/randombytes@npm:^1.0.3": - version: 1.0.3 - resolution: "@walletconnect/randombytes@npm:1.0.3" - dependencies: - "@walletconnect/encoding": ^1.0.2 - "@walletconnect/environment": ^1.0.1 - randombytes: ^2.1.0 - tslib: 1.14.1 - checksum: 3ba1d5906299256c64affcd03348ec1397e2fadb1e60baaa13d4f46ba0267580fc354e67839d3fa4faa8abb375723f7ab96334b4e842f5814ce2080ed15f3578 +"envfile@npm:~6.18.0": + version: 6.18.0 + resolution: "envfile@npm:6.18.0" + bin: + envfile: bin.cjs + checksum: 3a3762994d7b84ccf0293c1269cdfa5ea8971bdbbf7e3571fb686a6415eee2029e43d3faf36ed4222a83eaaf38fbc4fa37b3f50b77ea417ca35561e0e54059c1 languageName: node linkType: hard -"@walletconnect/relay-api@npm:^1.0.9": - version: 1.0.9 - resolution: "@walletconnect/relay-api@npm:1.0.9" - dependencies: - "@walletconnect/jsonrpc-types": ^1.0.2 - tslib: 1.14.1 - checksum: 5870579b6552f1ce7351878f1acb8386b0c11288c64d39133c7cee5040feeb7ccf9114228d97a59749d60366ad107b097d656407d534567c24f5d3878ea6e246 +"err-code@npm:^2.0.2": + version: 2.0.3 + resolution: "err-code@npm:2.0.3" + checksum: 8b7b1be20d2de12d2255c0bc2ca638b7af5171142693299416e6a9339bd7d88fc8d7707d913d78e0993176005405a236b066b45666b27b797252c771156ace54 languageName: node linkType: hard -"@walletconnect/relay-auth@npm:^1.0.4": - version: 1.0.4 - resolution: "@walletconnect/relay-auth@npm:1.0.4" +"es-abstract@npm:^1.22.1": + version: 1.22.3 + resolution: "es-abstract@npm:1.22.3" dependencies: - "@stablelib/ed25519": ^1.0.2 - "@stablelib/random": ^1.0.1 - "@walletconnect/safe-json": ^1.0.1 - "@walletconnect/time": ^1.0.2 - tslib: 1.14.1 - uint8arrays: ^3.0.0 - checksum: 35b3229d7b57e74fdb8fe6827d8dd8291dc60bacda880a57b2acb47a34d38f12be46c971c9eff361eb4073e896648b550de7a7a3852ef3752f9619c08dfba891 + array-buffer-byte-length: ^1.0.0 + arraybuffer.prototype.slice: ^1.0.2 + available-typed-arrays: ^1.0.5 + call-bind: ^1.0.5 + es-set-tostringtag: ^2.0.1 + es-to-primitive: ^1.2.1 + function.prototype.name: ^1.1.6 + get-intrinsic: ^1.2.2 + get-symbol-description: ^1.0.0 + globalthis: ^1.0.3 + gopd: ^1.0.1 + has-property-descriptors: ^1.0.0 + has-proto: ^1.0.1 + has-symbols: ^1.0.3 + hasown: ^2.0.0 + internal-slot: ^1.0.5 + is-array-buffer: ^3.0.2 + is-callable: ^1.2.7 + is-negative-zero: ^2.0.2 + is-regex: ^1.1.4 + is-shared-array-buffer: ^1.0.2 + is-string: ^1.0.7 + is-typed-array: ^1.1.12 + is-weakref: ^1.0.2 + object-inspect: ^1.13.1 + object-keys: ^1.1.1 + object.assign: ^4.1.4 + regexp.prototype.flags: ^1.5.1 + safe-array-concat: ^1.0.1 + safe-regex-test: ^1.0.0 + string.prototype.trim: ^1.2.8 + string.prototype.trimend: ^1.0.7 + string.prototype.trimstart: ^1.0.7 + typed-array-buffer: ^1.0.0 + typed-array-byte-length: ^1.0.0 + typed-array-byte-offset: ^1.0.0 + typed-array-length: ^1.0.4 + unbox-primitive: ^1.0.2 + which-typed-array: ^1.1.13 + checksum: b1bdc962856836f6e72be10b58dc128282bdf33771c7a38ae90419d920fc3b36cc5d2b70a222ad8016e3fc322c367bf4e9e89fc2bc79b7e933c05b218e83d79a languageName: node linkType: hard -"@walletconnect/safe-json@npm:^1.0.1, @walletconnect/safe-json@npm:^1.0.2": - version: 1.0.2 - resolution: "@walletconnect/safe-json@npm:1.0.2" +"es-iterator-helpers@npm:^1.0.12, es-iterator-helpers@npm:^1.0.15": + version: 1.0.15 + resolution: "es-iterator-helpers@npm:1.0.15" dependencies: - tslib: 1.14.1 - checksum: fee03fcc70adb5635ab9419ea6ec6555aa2467bef650ad3b9526451c3a5cf247836db0f3ae3bb435d2e585d99e50c2ebe7dc9c429cfa3df900cf3fe4bd06d37f + asynciterator.prototype: ^1.0.0 + call-bind: ^1.0.2 + define-properties: ^1.2.1 + es-abstract: ^1.22.1 + es-set-tostringtag: ^2.0.1 + function-bind: ^1.1.1 + get-intrinsic: ^1.2.1 + globalthis: ^1.0.3 + has-property-descriptors: ^1.0.0 + has-proto: ^1.0.1 + has-symbols: ^1.0.3 + internal-slot: ^1.0.5 + iterator.prototype: ^1.1.2 + safe-array-concat: ^1.0.1 + checksum: 50081ae5c549efe62e5c1d244df0194b40b075f7897fc2116b7e1aa437eb3c41f946d2afda18c33f9b31266ec544765932542765af839f76fa6d7b7855d1e0e1 languageName: node linkType: hard -"@walletconnect/sign-client@npm:2.10.1": - version: 2.10.1 - resolution: "@walletconnect/sign-client@npm:2.10.1" +"es-set-tostringtag@npm:^2.0.1": + version: 2.0.2 + resolution: "es-set-tostringtag@npm:2.0.2" dependencies: - "@walletconnect/core": 2.10.1 - "@walletconnect/events": ^1.0.1 - "@walletconnect/heartbeat": 1.2.1 - "@walletconnect/jsonrpc-utils": 1.0.8 - "@walletconnect/logger": ^2.0.1 - "@walletconnect/time": ^1.0.2 - "@walletconnect/types": 2.10.1 - "@walletconnect/utils": 2.10.1 - events: ^3.3.0 - checksum: dbdced8dece73b20ae73df9c0cf0d9e3eee753f6c81e264c87583ca60d1d13d4f7d61944e4b22d1f70c5f32424fd842a7de778838aa7d0ae27195976a86e102f + get-intrinsic: ^1.2.2 + has-tostringtag: ^1.0.0 + hasown: ^2.0.0 + checksum: afcec3a4c9890ae14d7ec606204858441c801ff84f312538e1d1ccf1e5493c8b17bd672235df785f803756472cb4f2d49b87bde5237aef33411e74c22f194e07 languageName: node linkType: hard -"@walletconnect/time@npm:^1.0.2": +"es-shim-unscopables@npm:^1.0.0": version: 1.0.2 - resolution: "@walletconnect/time@npm:1.0.2" - dependencies: - tslib: 1.14.1 - checksum: e3fc0113ca9e7ecedfc65f9e1517196682d5ffcda60750f51073b8d704719a17fea75da8b242c804bfa5b994707723043892a2db3cc86988b190b7b8711fe3c0 - languageName: node - linkType: hard - -"@walletconnect/types@npm:2.10.1": - version: 2.10.1 - resolution: "@walletconnect/types@npm:2.10.1" - dependencies: - "@walletconnect/events": ^1.0.1 - "@walletconnect/heartbeat": 1.2.1 - "@walletconnect/jsonrpc-types": 1.0.3 - "@walletconnect/keyvaluestorage": ^1.0.2 - "@walletconnect/logger": ^2.0.1 - events: ^3.3.0 - checksum: b663a236404bb423d3cc5cde656794ce42132f09193da5a51dac815d844f78eebb29c7275ebe10f6134492db21386ffd81b66ce42992332847b72c9128f74990 - languageName: node - linkType: hard - -"@walletconnect/universal-provider@npm:2.10.1": - version: 2.10.1 - resolution: "@walletconnect/universal-provider@npm:2.10.1" - dependencies: - "@walletconnect/jsonrpc-http-connection": ^1.0.7 - "@walletconnect/jsonrpc-provider": 1.0.13 - "@walletconnect/jsonrpc-types": ^1.0.2 - "@walletconnect/jsonrpc-utils": ^1.0.7 - "@walletconnect/logger": ^2.0.1 - "@walletconnect/sign-client": 2.10.1 - "@walletconnect/types": 2.10.1 - "@walletconnect/utils": 2.10.1 - events: ^3.3.0 - checksum: a33ad597a7601157cd96bceb7637c3463a5df981e5548c5343ab84f92c542bd7cae577fb2884d549164c9ad8262b097dc5fc0bc7fd9a515ee7c3f30b271cb034 - languageName: node - linkType: hard - -"@walletconnect/utils@npm:2.10.1": - version: 2.10.1 - resolution: "@walletconnect/utils@npm:2.10.1" - dependencies: - "@stablelib/chacha20poly1305": 1.0.1 - "@stablelib/hkdf": 1.0.1 - "@stablelib/random": ^1.0.2 - "@stablelib/sha256": 1.0.1 - "@stablelib/x25519": ^1.0.3 - "@walletconnect/relay-api": ^1.0.9 - "@walletconnect/safe-json": ^1.0.2 - "@walletconnect/time": ^1.0.2 - "@walletconnect/types": 2.10.1 - "@walletconnect/window-getters": ^1.0.1 - "@walletconnect/window-metadata": ^1.0.1 - detect-browser: 5.3.0 - query-string: 7.1.3 - uint8arrays: ^3.1.0 - checksum: 150d1a3c75ce0736ffc8ed8a844e3dc63476e556f7f308154ee6bc9d99e08907bc11a504b7ce3889951293b48d9eef4e32b84de1c7f27b7a84e6731a7bb65189 - languageName: node - linkType: hard - -"@walletconnect/window-getters@npm:^1.0.1": - version: 1.0.1 - resolution: "@walletconnect/window-getters@npm:1.0.1" + resolution: "es-shim-unscopables@npm:1.0.2" dependencies: - tslib: 1.14.1 - checksum: fae312c4e1be5574d97f071de58e6aa0d0296869761499caf9d4a9a5fd2643458af32233a2120521b00873a599ff88457d405bd82ced5fb5bd6dc3191c07a3e5 + hasown: ^2.0.0 + checksum: 432bd527c62065da09ed1d37a3f8e623c423683285e6188108286f4a1e8e164a5bcbfbc0051557c7d14633cd2a41ce24c7048e6bbb66a985413fd32f1be72626 languageName: node linkType: hard -"@walletconnect/window-metadata@npm:^1.0.1": - version: 1.0.1 - resolution: "@walletconnect/window-metadata@npm:1.0.1" +"es-to-primitive@npm:^1.2.1": + version: 1.2.1 + resolution: "es-to-primitive@npm:1.2.1" dependencies: - "@walletconnect/window-getters": ^1.0.1 - tslib: 1.14.1 - checksum: e82aea7195c6fe95c00e87bb38051c5549838c2e8302da94f1afa48206f79f0b620166c9820f847494505d282d1568e2086a1561b0493d2d0a1fa115f9106aef + is-callable: ^1.1.4 + is-date-object: ^1.0.1 + is-symbol: ^1.0.2 + checksum: 4ead6671a2c1402619bdd77f3503991232ca15e17e46222b0a41a5d81aebc8740a77822f5b3c965008e631153e9ef0580540007744521e72de8e33599fca2eed languageName: node linkType: hard -"@web3-storage/multipart-parser@npm:^1.0.0": - version: 1.0.0 - resolution: "@web3-storage/multipart-parser@npm:1.0.0" - checksum: d8bbb5b9b0a5c07b4119c33c64ef4b7cc8d74ca4de2dd783f608f2653f81ef298bf04136b7cdb7ce97306d5fe2217572b5655236b70e1b625ed18d4a21a81913 +"esbuild-android-64@npm:0.14.47": + version: 0.14.47 + resolution: "esbuild-android-64@npm:0.14.47" + conditions: os=android & cpu=x64 languageName: node linkType: hard -"JSONStream@npm:^1.3.5": - version: 1.3.5 - resolution: "JSONStream@npm:1.3.5" - dependencies: - jsonparse: ^1.2.0 - through: ">=2.2.7 <3" - bin: - JSONStream: ./bin.js - checksum: 2605fa124260c61bad38bb65eba30d2f72216a78e94d0ab19b11b4e0327d572b8d530c0c9cc3b0764f727ad26d39e00bf7ebad57781ca6368394d73169c59e46 +"esbuild-android-arm64@npm:0.14.47": + version: 0.14.47 + resolution: "esbuild-android-arm64@npm:0.14.47" + conditions: os=android & cpu=arm64 languageName: node linkType: hard -"abbrev@npm:1": - version: 1.1.1 - resolution: "abbrev@npm:1.1.1" - checksum: a4a97ec07d7ea112c517036882b2ac22f3109b7b19077dc656316d07d308438aac28e4d9746dc4d84bf6b1e75b4a7b0a5f3cb30592419f128ca9a8cee3bcfa17 - languageName: node - linkType: hard - -"abbrev@npm:^2.0.0": - version: 2.0.0 - resolution: "abbrev@npm:2.0.0" - checksum: 0e994ad2aa6575f94670d8a2149afe94465de9cedaaaac364e7fb43a40c3691c980ff74899f682f4ca58fa96b4cbd7421a015d3a6defe43a442117d7821a2f36 - languageName: node - linkType: hard - -"abitype@npm:0.8.7": - version: 0.8.7 - resolution: "abitype@npm:0.8.7" - peerDependencies: - typescript: ">=5.0.4" - zod: ^3 >=3.19.1 - peerDependenciesMeta: - zod: - optional: true - checksum: 4351466808969bcc73e5c535c3d96bb687ee2be0bccd48eba024c47e6cc248f0c8bd368f9e42dab35d39923e63b1349ade470f72812de27127968caf1a1426c9 - languageName: node - linkType: hard - -"abitype@npm:0.9.8": - version: 0.9.8 - resolution: "abitype@npm:0.9.8" - peerDependencies: - typescript: ">=5.0.4" - zod: ^3 >=3.19.1 - peerDependenciesMeta: - typescript: - optional: true - zod: - optional: true - checksum: d7d887f29d6821e3f7a400de9620511b80ead3f85c5c87308aaec97965d3493e6687ed816e88722b4f512249bd66dee9e69231b49af0e1db8f69400a62c87cf6 - languageName: node - linkType: hard - -"accepts@npm:~1.3.8": - version: 1.3.8 - resolution: "accepts@npm:1.3.8" - dependencies: - mime-types: ~2.1.34 - negotiator: 0.6.3 - checksum: 50c43d32e7b50285ebe84b613ee4a3aa426715a7d131b65b786e2ead0fd76b6b60091b9916d3478a75f11f162628a2139991b6c03ab3f1d9ab7c86075dc8eab4 - languageName: node - linkType: hard - -"acorn-jsx@npm:^5.0.0, acorn-jsx@npm:^5.3.2": - version: 5.3.2 - resolution: "acorn-jsx@npm:5.3.2" - peerDependencies: - acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 - checksum: c3d3b2a89c9a056b205b69530a37b972b404ee46ec8e5b341666f9513d3163e2a4f214a71f4dfc7370f5a9c07472d2fd1c11c91c3f03d093e37637d95da98950 - languageName: node - linkType: hard - -"acorn-walk@npm:^8.1.1, acorn-walk@npm:^8.2.0": - version: 8.3.0 - resolution: "acorn-walk@npm:8.3.0" - checksum: 15ea56ab6529135be05e7d018f935ca80a572355dd3f6d3cd717e36df3346e0f635a93ae781b1c7942607693e2e5f3ef81af5c6fc697bbadcc377ebda7b7f5f6 - languageName: node - linkType: hard - -"acorn@npm:^8.0.0, acorn@npm:^8.10.0, acorn@npm:^8.4.1, acorn@npm:^8.6.0, acorn@npm:^8.7.0, acorn@npm:^8.9.0": - version: 8.11.2 - resolution: "acorn@npm:8.11.2" - bin: - acorn: bin/acorn - checksum: 818450408684da89423e3daae24e4dc9b68692db8ab49ea4569c7c5abb7a3f23669438bf129cc81dfdada95e1c9b944ee1bfca2c57a05a4dc73834a612fbf6a7 - languageName: node - linkType: hard - -"aes-js@npm:3.0.0": - version: 3.0.0 - resolution: "aes-js@npm:3.0.0" - checksum: 251e26d533cd1a915b44896b17d5ed68c24a02484cfdd2e74ec700a309267db96651ea4eb657bf20aac32a3baa61f6e34edf8e2fec2de440a655da9942d334b8 - languageName: node - linkType: hard - -"aes-js@npm:^3.1.2": - version: 3.1.2 - resolution: "aes-js@npm:3.1.2" - checksum: 062154d50b1e433cc8c3b8ca7879f3a6375d5e79c2a507b2b6c4ec920b4cd851bf2afa7f65c98761a9da89c0ab618cbe6529e8e9a1c71f93290b53128fb8f712 - languageName: node - linkType: hard - -"agent-base@npm:6, agent-base@npm:^6.0.0, agent-base@npm:^6.0.2": - version: 6.0.2 - resolution: "agent-base@npm:6.0.2" - dependencies: - debug: 4 - checksum: f52b6872cc96fd5f622071b71ef200e01c7c4c454ee68bc9accca90c98cfb39f2810e3e9aa330435835eedc8c23f4f8a15267f67c6e245d2b33757575bdac49d - languageName: node - linkType: hard - -"agent-base@npm:^7.0.2, agent-base@npm:^7.1.0": - version: 7.1.0 - resolution: "agent-base@npm:7.1.0" - dependencies: - debug: ^4.3.4 - checksum: f7828f991470a0cc22cb579c86a18cbae83d8a3cbed39992ab34fc7217c4d126017f1c74d0ab66be87f71455318a8ea3e757d6a37881b8d0f2a2c6aa55e5418f - languageName: node - linkType: hard - -"agentkeepalive@npm:^4.3.0": - version: 4.5.0 - resolution: "agentkeepalive@npm:4.5.0" - dependencies: - humanize-ms: ^1.2.1 - checksum: 13278cd5b125e51eddd5079f04d6fe0914ac1b8b91c1f3db2c1822f99ac1a7457869068997784342fe455d59daaff22e14fb7b8c3da4e741896e7e31faf92481 - languageName: node - linkType: hard - -"aggregate-error@npm:^3.0.0": - version: 3.1.0 - resolution: "aggregate-error@npm:3.1.0" - dependencies: - clean-stack: ^2.0.0 - indent-string: ^4.0.0 - checksum: 1101a33f21baa27a2fa8e04b698271e64616b886795fd43c31068c07533c7b3facfcaf4e9e0cab3624bd88f729a592f1c901a1a229c9e490eafce411a8644b79 - languageName: node - linkType: hard - -"ahocorasick@npm:1.0.2": - version: 1.0.2 - resolution: "ahocorasick@npm:1.0.2" - checksum: a13ce4403554ae782cf5e28d468a732acf1fd3d0bff251f5dcfddfa5497b6cc343948d69cd94dfdbe8d4dfdb81e2b34cb1c92079e6301f38b0143d314fb95bd6 - languageName: node - linkType: hard - -"ajv@npm:8.12.0": - version: 8.12.0 - resolution: "ajv@npm:8.12.0" - dependencies: - fast-deep-equal: ^3.1.1 - json-schema-traverse: ^1.0.0 - require-from-string: ^2.0.2 - uri-js: ^4.2.2 - checksum: 4dc13714e316e67537c8b31bc063f99a1d9d9a497eb4bbd55191ac0dcd5e4985bbb71570352ad6f1e76684fb6d790928f96ba3b2d4fd6e10024be9612fe3f001 - languageName: node - linkType: hard - -"ajv@npm:8.6.3": - version: 8.6.3 - resolution: "ajv@npm:8.6.3" - dependencies: - fast-deep-equal: ^3.1.1 - json-schema-traverse: ^1.0.0 - require-from-string: ^2.0.2 - uri-js: ^4.2.2 - checksum: 690ffb9408415fdab43686b3f92037ba0c8362f5d0709a123ba3fb546e6ad81414455f80a2b5cc432ce924afe9864671198f022bc331a19c072d4ede152ec3ca - languageName: node - linkType: hard - -"ajv@npm:^6.0.0, ajv@npm:^6.10.0, ajv@npm:^6.12.4": - version: 6.12.6 - resolution: "ajv@npm:6.12.6" - dependencies: - fast-deep-equal: ^3.1.1 - fast-json-stable-stringify: ^2.0.0 - json-schema-traverse: ^0.4.1 - uri-js: ^4.2.2 - checksum: 874972efe5c4202ab0a68379481fbd3d1b5d0a7bd6d3cc21d40d3536ebff3352a2a1fabb632d4fd2cc7fe4cbdcd5ed6782084c9bbf7f32a1536d18f9da5007d4 - languageName: node - linkType: hard - -"ansi-escapes@npm:^4.2.1, ansi-escapes@npm:^4.3.0": - version: 4.3.2 - resolution: "ansi-escapes@npm:4.3.2" - dependencies: - type-fest: ^0.21.3 - checksum: 93111c42189c0a6bed9cdb4d7f2829548e943827ee8479c74d6e0b22ee127b2a21d3f8b5ca57723b8ef78ce011fbfc2784350eb2bde3ccfccf2f575fa8489815 - languageName: node - linkType: hard - -"ansi-regex@npm:^5.0.1": - version: 5.0.1 - resolution: "ansi-regex@npm:5.0.1" - checksum: 2aa4bb54caf2d622f1afdad09441695af2a83aa3fe8b8afa581d205e57ed4261c183c4d3877cee25794443fde5876417d859c108078ab788d6af7e4fe52eb66b - languageName: node - linkType: hard - -"ansi-regex@npm:^6.0.1": - version: 6.0.1 - resolution: "ansi-regex@npm:6.0.1" - checksum: 1ff8b7667cded1de4fa2c9ae283e979fc87036864317da86a2e546725f96406746411d0d85e87a2d12fa5abd715d90006de7fa4fa0477c92321ad3b4c7d4e169 - languageName: node - linkType: hard - -"ansi-styles@npm:^3.2.1": - version: 3.2.1 - resolution: "ansi-styles@npm:3.2.1" - dependencies: - color-convert: ^1.9.0 - checksum: d85ade01c10e5dd77b6c89f34ed7531da5830d2cb5882c645f330079975b716438cd7ebb81d0d6e6b4f9c577f19ae41ab55f07f19786b02f9dfd9e0377395665 - languageName: node - linkType: hard - -"ansi-styles@npm:^4.0.0, ansi-styles@npm:^4.1.0": - version: 4.3.0 - resolution: "ansi-styles@npm:4.3.0" - dependencies: - color-convert: ^2.0.1 - checksum: 513b44c3b2105dd14cc42a19271e80f386466c4be574bccf60b627432f9198571ebf4ab1e4c3ba17347658f4ee1711c163d574248c0c1cdc2d5917a0ad582ec4 - languageName: node - linkType: hard - -"ansi-styles@npm:^6.0.0, ansi-styles@npm:^6.1.0": - version: 6.2.1 - resolution: "ansi-styles@npm:6.2.1" - checksum: ef940f2f0ced1a6347398da88a91da7930c33ecac3c77b72c5905f8b8fe402c52e6fde304ff5347f616e27a742da3f1dc76de98f6866c69251ad0b07a66776d9 - languageName: node - linkType: hard - -"any-promise@npm:^1.0.0": - version: 1.3.0 - resolution: "any-promise@npm:1.3.0" - checksum: 0ee8a9bdbe882c90464d75d1f55cf027f5458650c4bd1f0467e65aec38ccccda07ca5844969ee77ed46d04e7dded3eaceb027e8d32f385688523fe305fa7e1de - languageName: node - linkType: hard - -"anymatch@npm:^3.1.3, anymatch@npm:~3.1.2": - version: 3.1.3 - resolution: "anymatch@npm:3.1.3" - dependencies: - normalize-path: ^3.0.0 - picomatch: ^2.0.4 - checksum: 3e044fd6d1d26545f235a9fe4d7a534e2029d8e59fa7fd9f2a6eb21230f6b5380ea1eaf55136e60cbf8e613544b3b766e7a6fa2102e2a3a117505466e3025dc2 - languageName: node - linkType: hard - -"aproba@npm:^1.0.3 || ^2.0.0": - version: 2.0.0 - resolution: "aproba@npm:2.0.0" - checksum: 5615cadcfb45289eea63f8afd064ab656006361020e1735112e346593856f87435e02d8dcc7ff0d11928bc7d425f27bc7c2a84f6c0b35ab0ff659c814c138a24 - languageName: node - linkType: hard - -"arch@npm:^2.2.0": - version: 2.2.0 - resolution: "arch@npm:2.2.0" - checksum: e21b7635029fe8e9cdd5a026f9a6c659103e63fff423834323cdf836a1bb240a72d0c39ca8c470f84643385cf581bd8eda2cad8bf493e27e54bd9783abe9101f - languageName: node - linkType: hard - -"are-we-there-yet@npm:^2.0.0": - version: 2.0.0 - resolution: "are-we-there-yet@npm:2.0.0" - dependencies: - delegates: ^1.0.0 - readable-stream: ^3.6.0 - checksum: 6c80b4fd04ecee6ba6e737e0b72a4b41bdc64b7d279edfc998678567ff583c8df27e27523bc789f2c99be603ffa9eaa612803da1d886962d2086e7ff6fa90c7c - languageName: node - linkType: hard - -"arg@npm:^4.1.0": - version: 4.1.3 - resolution: "arg@npm:4.1.3" - checksum: 544af8dd3f60546d3e4aff084d451b96961d2267d668670199692f8d054f0415d86fc5497d0e641e91546f0aa920e7c29e5250e99fc89f5552a34b5d93b77f43 - languageName: node - linkType: hard - -"arg@npm:^5.0.1, arg@npm:^5.0.2": - version: 5.0.2 - resolution: "arg@npm:5.0.2" - checksum: 6c69ada1a9943d332d9e5382393e897c500908d91d5cb735a01120d5f71daf1b339b7b8980cbeaba8fd1afc68e658a739746179e4315a26e8a28951ff9930078 - languageName: node - linkType: hard - -"argparse@npm:^2.0.1": - version: 2.0.1 - resolution: "argparse@npm:2.0.1" - checksum: 83644b56493e89a254bae05702abf3a1101b4fa4d0ca31df1c9985275a5a5bd47b3c27b7fa0b71098d41114d8ca000e6ed90cad764b306f8a503665e4d517ced - languageName: node - linkType: hard - -"aria-query@npm:^5.3.0": - version: 5.3.0 - resolution: "aria-query@npm:5.3.0" - dependencies: - dequal: ^2.0.3 - checksum: 305bd73c76756117b59aba121d08f413c7ff5e80fa1b98e217a3443fcddb9a232ee790e24e432b59ae7625aebcf4c47cb01c2cac872994f0b426f5bdfcd96ba9 - languageName: node - linkType: hard - -"array-buffer-byte-length@npm:^1.0.0": - version: 1.0.0 - resolution: "array-buffer-byte-length@npm:1.0.0" - dependencies: - call-bind: ^1.0.2 - is-array-buffer: ^3.0.1 - checksum: 044e101ce150f4804ad19c51d6c4d4cfa505c5b2577bd179256e4aa3f3f6a0a5e9874c78cd428ee566ac574c8a04d7ce21af9fe52e844abfdccb82b33035a7c3 - languageName: node - linkType: hard - -"array-flatten@npm:1.1.1": - version: 1.1.1 - resolution: "array-flatten@npm:1.1.1" - checksum: a9925bf3512d9dce202112965de90c222cd59a4fbfce68a0951d25d965cf44642931f40aac72309c41f12df19afa010ecadceb07cfff9ccc1621e99d89ab5f3b - languageName: node - linkType: hard - -"array-includes@npm:^3.1.6, array-includes@npm:^3.1.7": - version: 3.1.7 - resolution: "array-includes@npm:3.1.7" - dependencies: - call-bind: ^1.0.2 - define-properties: ^1.2.0 - es-abstract: ^1.22.1 - get-intrinsic: ^1.2.1 - is-string: ^1.0.7 - checksum: 06f9e4598fac12a919f7c59a3f04f010ea07f0b7f0585465ed12ef528a60e45f374e79d1bddbb34cdd4338357d00023ddbd0ac18b0be36964f5e726e8965d7fc - languageName: node - linkType: hard - -"array-union@npm:^2.1.0": - version: 2.1.0 - resolution: "array-union@npm:2.1.0" - checksum: 5bee12395cba82da674931df6d0fea23c4aa4660cb3b338ced9f828782a65caa232573e6bf3968f23e0c5eb301764a382cef2f128b170a9dc59de0e36c39f98d - languageName: node - linkType: hard - -"array.prototype.findlastindex@npm:^1.2.3": - version: 1.2.3 - resolution: "array.prototype.findlastindex@npm:1.2.3" - dependencies: - call-bind: ^1.0.2 - define-properties: ^1.2.0 - es-abstract: ^1.22.1 - es-shim-unscopables: ^1.0.0 - get-intrinsic: ^1.2.1 - checksum: 31f35d7b370c84db56484618132041a9af401b338f51899c2e78ef7690fbba5909ee7ca3c59a7192085b328cc0c68c6fd1f6d1553db01a689a589ae510f3966e - languageName: node - linkType: hard - -"array.prototype.flat@npm:^1.3.1, array.prototype.flat@npm:^1.3.2": - version: 1.3.2 - resolution: "array.prototype.flat@npm:1.3.2" - dependencies: - call-bind: ^1.0.2 - define-properties: ^1.2.0 - es-abstract: ^1.22.1 - es-shim-unscopables: ^1.0.0 - checksum: 5d6b4bf102065fb3f43764bfff6feb3295d372ce89591e6005df3d0ce388527a9f03c909af6f2a973969a4d178ab232ffc9236654149173e0e187ec3a1a6b87b - languageName: node - linkType: hard - -"array.prototype.flatmap@npm:^1.3.1, array.prototype.flatmap@npm:^1.3.2": - version: 1.3.2 - resolution: "array.prototype.flatmap@npm:1.3.2" - dependencies: - call-bind: ^1.0.2 - define-properties: ^1.2.0 - es-abstract: ^1.22.1 - es-shim-unscopables: ^1.0.0 - checksum: ce09fe21dc0bcd4f30271f8144083aa8c13d4639074d6c8dc82054b847c7fc9a0c97f857491f4da19d4003e507172a78f4bcd12903098adac8b9cd374f734be3 - languageName: node - linkType: hard - -"array.prototype.tosorted@npm:^1.1.1": - version: 1.1.2 - resolution: "array.prototype.tosorted@npm:1.1.2" - dependencies: - call-bind: ^1.0.2 - define-properties: ^1.2.0 - es-abstract: ^1.22.1 - es-shim-unscopables: ^1.0.0 - get-intrinsic: ^1.2.1 - checksum: 3607a7d6b117f0ffa6f4012457b7af0d47d38cf05e01d50e09682fd2fb782a66093a5e5fbbdbad77c8c824794a9d892a51844041641f719ad41e3a974f0764de - languageName: node - linkType: hard - -"arraybuffer.prototype.slice@npm:^1.0.2": - version: 1.0.2 - resolution: "arraybuffer.prototype.slice@npm:1.0.2" - dependencies: - array-buffer-byte-length: ^1.0.0 - call-bind: ^1.0.2 - define-properties: ^1.2.0 - es-abstract: ^1.22.1 - get-intrinsic: ^1.2.1 - is-array-buffer: ^3.0.2 - is-shared-array-buffer: ^1.0.2 - checksum: c200faf437786f5b2c80d4564ff5481c886a16dee642ef02abdc7306c7edd523d1f01d1dd12b769c7eb42ac9bc53874510db19a92a2c035c0f6696172aafa5d3 - languageName: node - linkType: hard - -"ast-types-flow@npm:^0.0.8": - version: 0.0.8 - resolution: "ast-types-flow@npm:0.0.8" - checksum: 0a64706609a179233aac23817837abab614f3548c252a2d3d79ea1e10c74aa28a0846e11f466cf72771b6ed8713abc094dcf8c40c3ec4207da163efa525a94a8 - languageName: node - linkType: hard - -"ast-types@npm:0.15.2": - version: 0.15.2 - resolution: "ast-types@npm:0.15.2" - dependencies: - tslib: ^2.0.1 - checksum: 24f0d86bf9e4c8dae16fa24b13c1776f2c2677040bcfbd4eb4f27911db49020be4876885e45e6cfcc548ed4dfea3a0742d77e3346b84fae47379cb0b89e9daa0 - languageName: node - linkType: hard - -"ast-types@npm:^0.13.2": - version: 0.13.4 - resolution: "ast-types@npm:0.13.4" - dependencies: - tslib: ^2.0.1 - checksum: 5a51f7b70588ecced3601845a0e203279ca2f5fdc184416a0a1640c93ec0a267241d6090a328e78eebb8de81f8754754e0a4f1558ba2a3d638f8ccbd0b1f0eff - languageName: node - linkType: hard - -"astral-regex@npm:^2.0.0": - version: 2.0.0 - resolution: "astral-regex@npm:2.0.0" - checksum: 876231688c66400473ba505731df37ea436e574dd524520294cc3bbc54ea40334865e01fa0d074d74d036ee874ee7e62f486ea38bc421ee8e6a871c06f011766 - languageName: node - linkType: hard - -"astring@npm:^1.6.0": - version: 1.8.6 - resolution: "astring@npm:1.8.6" - bin: - astring: bin/astring - checksum: 6f034d2acef1dac8bb231e7cc26c573d3c14e1975ea6e04f20312b43d4f462f963209bc64187d25d477a182dc3c33277959a0156ab7a3617aa79b1eac4d88e1f - languageName: node - linkType: hard - -"async-mutex@npm:^0.2.6": - version: 0.2.6 - resolution: "async-mutex@npm:0.2.6" - dependencies: - tslib: ^2.0.0 - checksum: f50102e0c57f6a958528cff7dff13da070897f17107b42274417a7248905b927b6e51c3387f8aed1f5cd6005b0e692d64a83a0789be602e4e7e7da4afe08b889 - languageName: node - linkType: hard - -"async-sema@npm:^3.1.1": - version: 3.1.1 - resolution: "async-sema@npm:3.1.1" - checksum: 07b8c51f6cab107417ecdd8126b7a9fe5a75151b7f69fdd420dcc8ee08f9e37c473a217247e894b56e999b088b32e902dbe41637e4e9b594d3f8dfcdddfadc5e - languageName: node - linkType: hard - -"asynciterator.prototype@npm:^1.0.0": - version: 1.0.0 - resolution: "asynciterator.prototype@npm:1.0.0" - dependencies: - has-symbols: ^1.0.3 - checksum: e8ebfd9493ac651cf9b4165e9d64030b3da1d17181bb1963627b59e240cdaf021d9b59d44b827dc1dde4e22387ec04c2d0f8720cf58a1c282e34e40cc12721b3 - languageName: node - linkType: hard - -"atomic-sleep@npm:^1.0.0": - version: 1.0.0 - resolution: "atomic-sleep@npm:1.0.0" - checksum: b95275afb2f80732f22f43a60178430c468906a415a7ff18bcd0feeebc8eec3930b51250aeda91a476062a90e07132b43a1794e8d8ffcf9b650e8139be75fa36 - languageName: node - linkType: hard - -"autoprefixer@npm:~10.4.12": - version: 10.4.16 - resolution: "autoprefixer@npm:10.4.16" - dependencies: - browserslist: ^4.21.10 - caniuse-lite: ^1.0.30001538 - fraction.js: ^4.3.6 - normalize-range: ^0.1.2 - picocolors: ^1.0.0 - postcss-value-parser: ^4.2.0 - peerDependencies: - postcss: ^8.1.0 - bin: - autoprefixer: bin/autoprefixer - checksum: 45fad7086495048dacb14bb7b00313e70e135b5d8e8751dcc60548889400763705ab16fc2d99ea628b44c3472698fb0e39598f595ba28409c965ab159035afde - languageName: node - linkType: hard - -"available-typed-arrays@npm:^1.0.5": - version: 1.0.5 - resolution: "available-typed-arrays@npm:1.0.5" - checksum: 20eb47b3cefd7db027b9bbb993c658abd36d4edd3fe1060e83699a03ee275b0c9b216cc076ff3f2db29073225fb70e7613987af14269ac1fe2a19803ccc97f1a - languageName: node - linkType: hard - -"axe-core@npm:=4.7.0": - version: 4.7.0 - resolution: "axe-core@npm:4.7.0" - checksum: f086bcab42be1761ba2b0b127dec350087f4c3a853bba8dd58f69d898cefaac31a1561da23146f6f3c07954c76171d1f2ce460e555e052d2b02cd79af628fa4a - languageName: node - linkType: hard - -"axobject-query@npm:^3.2.1": - version: 3.2.1 - resolution: "axobject-query@npm:3.2.1" - dependencies: - dequal: ^2.0.3 - checksum: a94047e702b57c91680e6a952ec4a1aaa2cfd0d80ead76bc8c954202980d8c51968a6ea18b4d8010e8e2cf95676533d8022a8ebba9abc1dfe25686721df26fd2 - languageName: node - linkType: hard - -"babel-plugin-polyfill-corejs2@npm:^0.4.6": - version: 0.4.6 - resolution: "babel-plugin-polyfill-corejs2@npm:0.4.6" - dependencies: - "@babel/compat-data": ^7.22.6 - "@babel/helper-define-polyfill-provider": ^0.4.3 - semver: ^6.3.1 - peerDependencies: - "@babel/core": ^7.4.0 || ^8.0.0-0 <8.0.0 - checksum: 08896811df31530be6a9bcdd630cb9fd4b5ae5181039d18db3796efbc54e38d57a42af460845c10a04434e1bc45c0d47743c7e6c860383cc6b141083cde22030 - languageName: node - linkType: hard - -"babel-plugin-polyfill-corejs3@npm:^0.8.5": - version: 0.8.6 - resolution: "babel-plugin-polyfill-corejs3@npm:0.8.6" - dependencies: - "@babel/helper-define-polyfill-provider": ^0.4.3 - core-js-compat: ^3.33.1 - peerDependencies: - "@babel/core": ^7.4.0 || ^8.0.0-0 <8.0.0 - checksum: 36951c2edac42ac0f05b200502e90d77bf66ccee5b52e2937d23496c6ef2372cce31b8c64144da374b77bd3eb65e2721703a52eac56cad16a152326c092cbf77 - languageName: node - linkType: hard - -"babel-plugin-polyfill-regenerator@npm:^0.5.3": - version: 0.5.3 - resolution: "babel-plugin-polyfill-regenerator@npm:0.5.3" - dependencies: - "@babel/helper-define-polyfill-provider": ^0.4.3 - peerDependencies: - "@babel/core": ^7.4.0 || ^8.0.0-0 <8.0.0 - checksum: 2bb546582cda1870d19e646a7183baeb2cccd56e0ef3e4eaeabd28e120daf17cb87399194a9ccdcf32506bcaa68d23e73440fc8ab990a7a0f8c5a77c12d5d4bc - languageName: node - linkType: hard - -"bail@npm:^2.0.0": - version: 2.0.2 - resolution: "bail@npm:2.0.2" - checksum: aab4e8ccdc8d762bf3fdfce8e706601695620c0c2eda256dd85088dc0be3cfd7ff126f6e99c2bee1f24f5d418414aacf09d7f9702f16d6963df2fa488cda8824 - languageName: node - linkType: hard - -"balanced-match@npm:^1.0.0": - version: 1.0.2 - resolution: "balanced-match@npm:1.0.2" - checksum: 9706c088a283058a8a99e0bf91b0a2f75497f185980d9ffa8b304de1d9e58ebda7c72c07ebf01dadedaac5b2907b2c6f566f660d62bd336c3468e960403b9d65 - languageName: node - linkType: hard - -"base-x@npm:^3.0.2": - version: 3.0.9 - resolution: "base-x@npm:3.0.9" - dependencies: - safe-buffer: ^5.0.1 - checksum: 957101d6fd09e1903e846fd8f69fd7e5e3e50254383e61ab667c725866bec54e5ece5ba49ce385128ae48f9ec93a26567d1d5ebb91f4d56ef4a9cc0d5a5481e8 - languageName: node - linkType: hard - -"base64-js@npm:^1.3.1": - version: 1.5.1 - resolution: "base64-js@npm:1.5.1" - checksum: 669632eb3745404c2f822a18fc3a0122d2f9a7a13f7fb8b5823ee19d1d2ff9ee5b52c53367176ea4ad093c332fd5ab4bd0ebae5a8e27917a4105a4cfc86b1005 - languageName: node - linkType: hard - -"bech32@npm:1.1.4": - version: 1.1.4 - resolution: "bech32@npm:1.1.4" - checksum: 0e98db619191548390d6f09ff68b0253ba7ae6a55db93dfdbb070ba234c1fd3308c0606fbcc95fad50437227b10011e2698b89f0181f6e7f845c499bd14d0f4b - languageName: node - linkType: hard - -"big.js@npm:^5.2.2": - version: 5.2.2 - resolution: "big.js@npm:5.2.2" - checksum: b89b6e8419b097a8fb4ed2399a1931a68c612bce3cfd5ca8c214b2d017531191070f990598de2fc6f3f993d91c0f08aa82697717f6b3b8732c9731866d233c9e - languageName: node - linkType: hard - -"bigint-buffer@npm:^1.1.5": - version: 1.1.5 - resolution: "bigint-buffer@npm:1.1.5" - dependencies: - bindings: ^1.3.0 - node-gyp: latest - checksum: d010c9f57758bcdaccb435d88b483ffcc95fe8bbc6e7fb3a44fb5221f29c894ffaf4a3c5a4a530e0e7d6608203c2cde9b79ee4f2386cd6d4462d1070bc8c9f4e - languageName: node - linkType: hard - -"bignumber.js@npm:*": - version: 9.1.2 - resolution: "bignumber.js@npm:9.1.2" - checksum: 582c03af77ec9cb0ebd682a373ee6c66475db94a4325f92299621d544aa4bd45cb45fd60001610e94aef8ae98a0905fa538241d9638d4422d57abbeeac6fadaf - languageName: node - linkType: hard - -"binary-extensions@npm:^2.0.0": - version: 2.2.0 - resolution: "binary-extensions@npm:2.2.0" - checksum: ccd267956c58d2315f5d3ea6757cf09863c5fc703e50fbeb13a7dc849b812ef76e3cf9ca8f35a0c48498776a7478d7b4a0418e1e2b8cb9cb9731f2922aaad7f8 - languageName: node - linkType: hard - -"bind-decorator@npm:^1.0.11": - version: 1.0.11 - resolution: "bind-decorator@npm:1.0.11" - checksum: 41b6c69af51ee7e6e01ea6f2939df94c9c760383f89f5befda0890951657baedbf499a0b96a789fd85cb77252465134f4e6184aae6639ed60cf59549ef15353d - languageName: node - linkType: hard - -"bindings@npm:^1.3.0, bindings@npm:^1.4.0, bindings@npm:^1.5.0": - version: 1.5.0 - resolution: "bindings@npm:1.5.0" - dependencies: - file-uri-to-path: 1.0.0 - checksum: 65b6b48095717c2e6105a021a7da4ea435aa8d3d3cd085cb9e85bcb6e5773cf318c4745c3f7c504412855940b585bdf9b918236612a1c7a7942491de176f1ae7 - languageName: node - linkType: hard - -"bl@npm:^4.0.3, bl@npm:^4.1.0": - version: 4.1.0 - resolution: "bl@npm:4.1.0" - dependencies: - buffer: ^5.5.0 - inherits: ^2.0.4 - readable-stream: ^3.4.0 - checksum: 9e8521fa7e83aa9427c6f8ccdcba6e8167ef30cc9a22df26effcc5ab682ef91d2cbc23a239f945d099289e4bbcfae7a192e9c28c84c6202e710a0dfec3722662 - languageName: node - linkType: hard - -"blo@npm:~1.0.1": - version: 1.0.1 - resolution: "blo@npm:1.0.1" - checksum: 2aff11ca1d49e616ffa81907b1a011130b2156f8199bf37df62a9689aeb2a0874c61885cc2f9c79df0d216e14c85cc62902404288f8058cd0b0c311d4f01c3f9 - languageName: node - linkType: hard - -"bn.js@npm:^4.11.9": - version: 4.12.0 - resolution: "bn.js@npm:4.12.0" - checksum: 39afb4f15f4ea537b55eaf1446c896af28ac948fdcf47171961475724d1bb65118cca49fa6e3d67706e4790955ec0e74de584e45c8f1ef89f46c812bee5b5a12 - languageName: node - linkType: hard - -"bn.js@npm:^5.1.1, bn.js@npm:^5.2.0, bn.js@npm:^5.2.1": - version: 5.2.1 - resolution: "bn.js@npm:5.2.1" - checksum: 3dd8c8d38055fedfa95c1d5fc3c99f8dd547b36287b37768db0abab3c239711f88ff58d18d155dd8ad902b0b0cee973747b7ae20ea12a09473272b0201c9edd3 - languageName: node - linkType: hard - -"body-parser@npm:1.20.1": - version: 1.20.1 - resolution: "body-parser@npm:1.20.1" - dependencies: - bytes: 3.1.2 - content-type: ~1.0.4 - debug: 2.6.9 - depd: 2.0.0 - destroy: 1.2.0 - http-errors: 2.0.0 - iconv-lite: 0.4.24 - on-finished: 2.4.1 - qs: 6.11.0 - raw-body: 2.5.1 - type-is: ~1.6.18 - unpipe: 1.0.0 - checksum: f1050dbac3bede6a78f0b87947a8d548ce43f91ccc718a50dd774f3c81f2d8b04693e52acf62659fad23101827dd318da1fb1363444ff9a8482b886a3e4a5266 - languageName: node - linkType: hard - -"borsh@npm:^0.7.0": - version: 0.7.0 - resolution: "borsh@npm:0.7.0" - dependencies: - bn.js: ^5.2.0 - bs58: ^4.0.0 - text-encoding-utf-8: ^1.0.2 - checksum: e98bfb5f7cfb820819c2870b884dac58dd4b4ce6a86c286c8fbf5c9ca582e73a8c6094df67e81a28c418ff07a309c6b118b2e27fdfea83fd92b8100c741da0b5 - languageName: node - linkType: hard - -"brace-expansion@npm:^1.1.7": - version: 1.1.11 - resolution: "brace-expansion@npm:1.1.11" - dependencies: - balanced-match: ^1.0.0 - concat-map: 0.0.1 - checksum: faf34a7bb0c3fcf4b59c7808bc5d2a96a40988addf2e7e09dfbb67a2251800e0d14cd2bfc1aa79174f2f5095c54ff27f46fb1289fe2d77dac755b5eb3434cc07 - languageName: node - linkType: hard - -"brace-expansion@npm:^2.0.1": - version: 2.0.1 - resolution: "brace-expansion@npm:2.0.1" - dependencies: - balanced-match: ^1.0.0 - checksum: a61e7cd2e8a8505e9f0036b3b6108ba5e926b4b55089eeb5550cd04a471fe216c96d4fe7e4c7f995c728c554ae20ddfc4244cad10aef255e72b62930afd233d1 - languageName: node - linkType: hard - -"braces@npm:^3.0.2, braces@npm:~3.0.2": - version: 3.0.2 - resolution: "braces@npm:3.0.2" - dependencies: - fill-range: ^7.0.1 - checksum: e2a8e769a863f3d4ee887b5fe21f63193a891c68b612ddb4b68d82d1b5f3ff9073af066c343e9867a393fe4c2555dcb33e89b937195feb9c1613d259edfcd459 - languageName: node - linkType: hard - -"brorand@npm:^1.1.0": - version: 1.1.0 - resolution: "brorand@npm:1.1.0" - checksum: 8a05c9f3c4b46572dec6ef71012b1946db6cae8c7bb60ccd4b7dd5a84655db49fe043ecc6272e7ef1f69dc53d6730b9e2a3a03a8310509a3d797a618cbee52be - languageName: node - linkType: hard - -"browserify-zlib@npm:^0.1.4": - version: 0.1.4 - resolution: "browserify-zlib@npm:0.1.4" - dependencies: - pako: ~0.2.0 - checksum: abee4cb4349e8a21391fd874564f41b113fe691372913980e6fa06a777e4ea2aad4e942af14ab99bce190d5ac8f5328201432f4ef0eae48c6d02208bc212976f - languageName: node - linkType: hard - -"browserslist@npm:^4.21.10, browserslist@npm:^4.21.9, browserslist@npm:^4.22.1": - version: 4.22.1 - resolution: "browserslist@npm:4.22.1" - dependencies: - caniuse-lite: ^1.0.30001541 - electron-to-chromium: ^1.4.535 - node-releases: ^2.0.13 - update-browserslist-db: ^1.0.13 - bin: - browserslist: cli.js - checksum: 7e6b10c53f7dd5d83fd2b95b00518889096382539fed6403829d447e05df4744088de46a571071afb447046abc3c66ad06fbc790e70234ec2517452e32ffd862 - languageName: node - linkType: hard - -"bs58@npm:^4.0.0, bs58@npm:^4.0.1": - version: 4.0.1 - resolution: "bs58@npm:4.0.1" - dependencies: - base-x: ^3.0.2 - checksum: b3c5365bb9e0c561e1a82f1a2d809a1a692059fae016be233a6127ad2f50a6b986467c3a50669ce4c18929dcccb297c5909314dd347a25a68c21b68eb3e95ac2 - languageName: node - linkType: hard - -"buffer-from@npm:^1.0.0": - version: 1.1.2 - resolution: "buffer-from@npm:1.1.2" - checksum: 0448524a562b37d4d7ed9efd91685a5b77a50672c556ea254ac9a6d30e3403a517d8981f10e565db24e8339413b43c97ca2951f10e399c6125a0d8911f5679bb - languageName: node - linkType: hard - -"buffer@npm:6.0.3, buffer@npm:^6.0.3, buffer@npm:~6.0.3": - version: 6.0.3 - resolution: "buffer@npm:6.0.3" - dependencies: - base64-js: ^1.3.1 - ieee754: ^1.2.1 - checksum: 5ad23293d9a731e4318e420025800b42bf0d264004c0286c8cc010af7a270c7a0f6522e84f54b9ad65cbd6db20b8badbfd8d2ebf4f80fa03dab093b89e68c3f9 - languageName: node - linkType: hard - -"buffer@npm:^5.5.0": - version: 5.7.1 - resolution: "buffer@npm:5.7.1" - dependencies: - base64-js: ^1.3.1 - ieee754: ^1.1.13 - checksum: e2cf8429e1c4c7b8cbd30834ac09bd61da46ce35f5c22a78e6c2f04497d6d25541b16881e30a019c6fd3154150650ccee27a308eff3e26229d788bbdeb08ab84 - languageName: node - linkType: hard - -"bufferutil@npm:^4.0.1": - version: 4.0.8 - resolution: "bufferutil@npm:4.0.8" - dependencies: - node-gyp: latest - node-gyp-build: ^4.3.0 - checksum: 7e9a46f1867dca72fda350966eb468eca77f4d623407b0650913fadf73d5750d883147d6e5e21c56f9d3b0bdc35d5474e80a600b9f31ec781315b4d2469ef087 - languageName: node - linkType: hard - -"bytes@npm:3.1.2": - version: 3.1.2 - resolution: "bytes@npm:3.1.2" - checksum: e4bcd3948d289c5127591fbedf10c0b639ccbf00243504e4e127374a15c3bc8eed0d28d4aaab08ff6f1cf2abc0cce6ba3085ed32f4f90e82a5683ce0014e1b6e - languageName: node - linkType: hard - -"cac@npm:^6.7.14": - version: 6.7.14 - resolution: "cac@npm:6.7.14" - checksum: 45a2496a9443abbe7f52a49b22fbe51b1905eff46e03fd5e6c98e3f85077be3f8949685a1849b1a9cd2bc3e5567dfebcf64f01ce01847baf918f1b37c839791a - languageName: node - linkType: hard - -"cacache@npm:^15.0.5": - version: 15.3.0 - resolution: "cacache@npm:15.3.0" - dependencies: - "@npmcli/fs": ^1.0.0 - "@npmcli/move-file": ^1.0.1 - chownr: ^2.0.0 - fs-minipass: ^2.0.0 - glob: ^7.1.4 - infer-owner: ^1.0.4 - lru-cache: ^6.0.0 - minipass: ^3.1.1 - minipass-collect: ^1.0.2 - minipass-flush: ^1.0.5 - minipass-pipeline: ^1.2.2 - mkdirp: ^1.0.3 - p-map: ^4.0.0 - promise-inflight: ^1.0.1 - rimraf: ^3.0.2 - ssri: ^8.0.1 - tar: ^6.0.2 - unique-filename: ^1.1.1 - checksum: a07327c27a4152c04eb0a831c63c00390d90f94d51bb80624a66f4e14a6b6360bbf02a84421267bd4d00ca73ac9773287d8d7169e8d2eafe378d2ce140579db8 - languageName: node - linkType: hard - -"cacache@npm:^18.0.0": - version: 18.0.0 - resolution: "cacache@npm:18.0.0" - dependencies: - "@npmcli/fs": ^3.1.0 - fs-minipass: ^3.0.0 - glob: ^10.2.2 - lru-cache: ^10.0.1 - minipass: ^7.0.3 - minipass-collect: ^1.0.2 - minipass-flush: ^1.0.5 - minipass-pipeline: ^1.2.4 - p-map: ^4.0.0 - ssri: ^10.0.0 - tar: ^6.1.11 - unique-filename: ^3.0.0 - checksum: 2cd6bf15551abd4165acb3a4d1ef0593b3aa2fd6853ae16b5bb62199c2faecf27d36555a9545c0e07dd03347ec052e782923bdcece724a24611986aafb53e152 - languageName: node - linkType: hard - -"cacheable-lookup@npm:^5.0.3": - version: 5.0.4 - resolution: "cacheable-lookup@npm:5.0.4" - checksum: 763e02cf9196bc9afccacd8c418d942fc2677f22261969a4c2c2e760fa44a2351a81557bd908291c3921fe9beb10b976ba8fa50c5ca837c5a0dd945f16468f2d - languageName: node - linkType: hard - -"cacheable-request@npm:^7.0.2": - version: 7.0.4 - resolution: "cacheable-request@npm:7.0.4" - dependencies: - clone-response: ^1.0.2 - get-stream: ^5.1.0 - http-cache-semantics: ^4.0.0 - keyv: ^4.0.0 - lowercase-keys: ^2.0.0 - normalize-url: ^6.0.1 - responselike: ^2.0.0 - checksum: 0de9df773fd4e7dd9bd118959878f8f2163867e2e1ab3575ffbecbe6e75e80513dd0c68ba30005e5e5a7b377cc6162bbc00ab1db019bb4e9cb3c2f3f7a6f1ee4 - languageName: node - linkType: hard - -"call-bind@npm:^1.0.0, call-bind@npm:^1.0.2, call-bind@npm:^1.0.4, call-bind@npm:^1.0.5": - version: 1.0.5 - resolution: "call-bind@npm:1.0.5" - dependencies: - function-bind: ^1.1.2 - get-intrinsic: ^1.2.1 - set-function-length: ^1.1.1 - checksum: 449e83ecbd4ba48e7eaac5af26fea3b50f8f6072202c2dd7c5a6e7a6308f2421abe5e13a3bbd55221087f76320c5e09f25a8fdad1bab2b77c68ae74d92234ea5 - languageName: node - linkType: hard - -"callsites@npm:^3.0.0": - version: 3.1.0 - resolution: "callsites@npm:3.1.0" - checksum: 072d17b6abb459c2ba96598918b55868af677154bec7e73d222ef95a8fdb9bbf7dae96a8421085cdad8cd190d86653b5b6dc55a4484f2e5b2e27d5e0c3fc15b3 - languageName: node - linkType: hard - -"camelcase-css@npm:^2.0.1": - version: 2.0.1 - resolution: "camelcase-css@npm:2.0.1" - checksum: 1cec2b3b3dcb5026688a470b00299a8db7d904c4802845c353dbd12d9d248d3346949a814d83bfd988d4d2e5b9904c07efe76fecd195a1d4f05b543e7c0b56b1 - languageName: node - linkType: hard - -"camelcase@npm:^5.0.0": - version: 5.3.1 - resolution: "camelcase@npm:5.3.1" - checksum: e6effce26b9404e3c0f301498184f243811c30dfe6d0b9051863bd8e4034d09c8c2923794f280d6827e5aa055f6c434115ff97864a16a963366fb35fd673024b - languageName: node - linkType: hard - -"caniuse-lite@npm:^1.0.30001406, caniuse-lite@npm:^1.0.30001538, caniuse-lite@npm:^1.0.30001541": - version: 1.0.30001562 - resolution: "caniuse-lite@npm:1.0.30001562" - checksum: 414ed45ae47a432607be1c9588bd478440acb033e46ede74c97501bfdb9ba4b1615e221d3ce7c7be55e1e0834725fd1ce5bf5e037bb9dd384c8e85b5e83dc6d1 - languageName: node - linkType: hard - -"chalk@npm:5.2.0": - version: 5.2.0 - resolution: "chalk@npm:5.2.0" - checksum: 03d8060277de6cf2fd567dc25fcf770593eb5bb85f460ce443e49255a30ff1242edd0c90a06a03803b0466ff0687a939b41db1757bec987113e83de89a003caa - languageName: node - linkType: hard - -"chalk@npm:^2.4.2": - version: 2.4.2 - resolution: "chalk@npm:2.4.2" - dependencies: - ansi-styles: ^3.2.1 - escape-string-regexp: ^1.0.5 - supports-color: ^5.3.0 - checksum: ec3661d38fe77f681200f878edbd9448821924e0f93a9cefc0e26a33b145f1027a2084bf19967160d11e1f03bfe4eaffcabf5493b89098b2782c3fe0b03d80c2 - languageName: node - linkType: hard - -"chalk@npm:^4.0.0, chalk@npm:^4.1.0, chalk@npm:^4.1.1, chalk@npm:^4.1.2": - version: 4.1.2 - resolution: "chalk@npm:4.1.2" - dependencies: - ansi-styles: ^4.1.0 - supports-color: ^7.1.0 - checksum: fe75c9d5c76a7a98d45495b91b2172fa3b7a09e0cc9370e5c8feb1c567b85c4288e2b3fded7cfdd7359ac28d6b3844feb8b82b8686842e93d23c827c417e83fc - languageName: node - linkType: hard - -"character-entities-html4@npm:^2.0.0": - version: 2.1.0 - resolution: "character-entities-html4@npm:2.1.0" - checksum: 7034aa7c7fa90309667f6dd50499c8a760c3d3a6fb159adb4e0bada0107d194551cdbad0714302f62d06ce4ed68565c8c2e15fdef2e8f8764eb63fa92b34b11d - languageName: node - linkType: hard - -"character-entities-legacy@npm:^3.0.0": - version: 3.0.0 - resolution: "character-entities-legacy@npm:3.0.0" - checksum: 7582af055cb488b626d364b7d7a4e46b06abd526fb63c0e4eb35bcb9c9799cc4f76b39f34fdccef2d1174ac95e53e9ab355aae83227c1a2505877893fce77731 - languageName: node - linkType: hard - -"character-entities@npm:^2.0.0": - version: 2.0.2 - resolution: "character-entities@npm:2.0.2" - checksum: cf1643814023697f725e47328fcec17923b8f1799102a8a79c1514e894815651794a2bffd84bb1b3a4b124b050154e4529ed6e81f7c8068a734aecf07a6d3def - languageName: node - linkType: hard - -"character-reference-invalid@npm:^2.0.0": - version: 2.0.1 - resolution: "character-reference-invalid@npm:2.0.1" - checksum: 98d3b1a52ae510b7329e6ee7f6210df14f1e318c5415975d4c9e7ee0ef4c07875d47c6e74230c64551f12f556b4a8ccc24d9f3691a2aa197019e72a95e9297ee - languageName: node - linkType: hard - -"chardet@npm:^0.7.0": - version: 0.7.0 - resolution: "chardet@npm:0.7.0" - checksum: 6fd5da1f5d18ff5712c1e0aed41da200d7c51c28f11b36ee3c7b483f3696dabc08927fc6b227735eb8f0e1215c9a8abd8154637f3eff8cada5959df7f58b024d - languageName: node - linkType: hard - -"chokidar@npm:^3.5.1, chokidar@npm:^3.5.3": - version: 3.5.3 - resolution: "chokidar@npm:3.5.3" - dependencies: - anymatch: ~3.1.2 - braces: ~3.0.2 - fsevents: ~2.3.2 - glob-parent: ~5.1.2 - is-binary-path: ~2.1.0 - is-glob: ~4.0.1 - normalize-path: ~3.0.0 - readdirp: ~3.6.0 - dependenciesMeta: - fsevents: - optional: true - checksum: b49fcde40176ba007ff361b198a2d35df60d9bb2a5aab228279eb810feae9294a6b4649ab15981304447afe1e6ffbf4788ad5db77235dc770ab777c6e771980c - languageName: node - linkType: hard - -"chownr@npm:^1.1.1": - version: 1.1.4 - resolution: "chownr@npm:1.1.4" - checksum: 115648f8eb38bac5e41c3857f3e663f9c39ed6480d1349977c4d96c95a47266fcacc5a5aabf3cb6c481e22d72f41992827db47301851766c4fd77ac21a4f081d - languageName: node - linkType: hard - -"chownr@npm:^2.0.0": - version: 2.0.0 - resolution: "chownr@npm:2.0.0" - checksum: c57cf9dd0791e2f18a5ee9c1a299ae6e801ff58fee96dc8bfd0dcb4738a6ce58dd252a3605b1c93c6418fe4f9d5093b28ffbf4d66648cb2a9c67eaef9679be2f - languageName: node - linkType: hard - -"citty@npm:^0.1.3, citty@npm:^0.1.4": - version: 0.1.4 - resolution: "citty@npm:0.1.4" - dependencies: - consola: ^3.2.3 - checksum: d70f739c32c8a65170be5bad0407f22e860a819da1712d66c14993b1f46356c95c4d5acee7a36f763b7f7132dd0acd2bbdae02f8188970bbd3c978c1ada9bae5 - languageName: node - linkType: hard - -"clean-stack@npm:^2.0.0": - version: 2.2.0 - resolution: "clean-stack@npm:2.2.0" - checksum: 2ac8cd2b2f5ec986a3c743935ec85b07bc174d5421a5efc8017e1f146a1cf5f781ae962618f416352103b32c9cd7e203276e8c28241bbe946160cab16149fb68 - languageName: node - linkType: hard - -"cli-cursor@npm:^3.1.0": - version: 3.1.0 - resolution: "cli-cursor@npm:3.1.0" - dependencies: - restore-cursor: ^3.1.0 - checksum: 2692784c6cd2fd85cfdbd11f53aea73a463a6d64a77c3e098b2b4697a20443f430c220629e1ca3b195ea5ac4a97a74c2ee411f3807abf6df2b66211fec0c0a29 - languageName: node - linkType: hard - -"cli-spinners@npm:^2.5.0": - version: 2.9.1 - resolution: "cli-spinners@npm:2.9.1" - checksum: 1780618be58309c469205bc315db697934bac68bce78cd5dfd46248e507a533172d623c7348ecfd904734f597ce0a4e5538684843d2cfb7af485d4466699940c - languageName: node - linkType: hard - -"cli-truncate@npm:^2.1.0": - version: 2.1.0 - resolution: "cli-truncate@npm:2.1.0" - dependencies: - slice-ansi: ^3.0.0 - string-width: ^4.2.0 - checksum: bf1e4e6195392dc718bf9cd71f317b6300dc4a9191d052f31046b8773230ece4fa09458813bf0e3455a5e68c0690d2ea2c197d14a8b85a7b5e01c97f4b5feb5d - languageName: node - linkType: hard - -"cli-truncate@npm:^3.1.0": - version: 3.1.0 - resolution: "cli-truncate@npm:3.1.0" - dependencies: - slice-ansi: ^5.0.0 - string-width: ^5.0.0 - checksum: c3243e41974445691c63f8b405df1d5a24049dc33d324fe448dc572e561a7b772ae982692900b1a5960901cc4fc7def25a629b9c69a4208ee89d12ab3332617a - languageName: node - linkType: hard - -"cli-width@npm:^3.0.0": - version: 3.0.0 - resolution: "cli-width@npm:3.0.0" - checksum: 4c94af3769367a70e11ed69aa6095f1c600c0ff510f3921ab4045af961820d57c0233acfa8b6396037391f31b4c397e1f614d234294f979ff61430a6c166c3f6 - languageName: node - linkType: hard - -"client-only@npm:0.0.1": - version: 0.0.1 - resolution: "client-only@npm:0.0.1" - checksum: 0c16bf660dadb90610553c1d8946a7fdfb81d624adea073b8440b7d795d5b5b08beb3c950c6a2cf16279365a3265158a236876d92bce16423c485c322d7dfaf8 - languageName: node - linkType: hard - -"clipboardy@npm:^3.0.0": - version: 3.0.0 - resolution: "clipboardy@npm:3.0.0" - dependencies: - arch: ^2.2.0 - execa: ^5.1.1 - is-wsl: ^2.2.0 - checksum: 2c292acb59705494cbe07d7df7c8becff4f01651514d32ebd80f4aec2d20946d8f3824aac67ecdf2d09ef21fdf0eb24b6a7f033c137ccdceedc4661c54455c94 - languageName: node - linkType: hard - -"cliui@npm:^6.0.0": - version: 6.0.0 - resolution: "cliui@npm:6.0.0" - dependencies: - string-width: ^4.2.0 - strip-ansi: ^6.0.0 - wrap-ansi: ^6.2.0 - checksum: 4fcfd26d292c9f00238117f39fc797608292ae36bac2168cfee4c85923817d0607fe21b3329a8621e01aedf512c99b7eaa60e363a671ffd378df6649fb48ae42 - languageName: node - linkType: hard - -"clone-response@npm:^1.0.2": - version: 1.0.3 - resolution: "clone-response@npm:1.0.3" - dependencies: - mimic-response: ^1.0.0 - checksum: 4e671cac39b11c60aa8ba0a450657194a5d6504df51bca3fac5b3bd0145c4f8e8464898f87c8406b83232e3bc5cca555f51c1f9c8ac023969ebfbf7f6bdabb2e - languageName: node - linkType: hard - -"clone@npm:^1.0.2": - version: 1.0.4 - resolution: "clone@npm:1.0.4" - checksum: d06418b7335897209e77bdd430d04f882189582e67bd1f75a04565f3f07f5b3f119a9d670c943b6697d0afb100f03b866b3b8a1f91d4d02d72c4ecf2bb64b5dd - languageName: node - linkType: hard - -"clsx@npm:1.1.1": - version: 1.1.1 - resolution: "clsx@npm:1.1.1" - checksum: ff052650329773b9b245177305fc4c4dc3129f7b2be84af4f58dc5defa99538c61d4207be7419405a5f8f3d92007c954f4daba5a7b74e563d5de71c28c830063 - languageName: node - linkType: hard - -"clsx@npm:^1.1.0": - version: 1.2.1 - resolution: "clsx@npm:1.2.1" - checksum: 30befca8019b2eb7dbad38cff6266cf543091dae2825c856a62a8ccf2c3ab9c2907c4d12b288b73101196767f66812365400a227581484a05f968b0307cfaf12 - languageName: node - linkType: hard - -"cluster-key-slot@npm:^1.1.0": - version: 1.1.2 - resolution: "cluster-key-slot@npm:1.1.2" - checksum: be0ad2d262502adc998597e83f9ded1b80f827f0452127c5a37b22dfca36bab8edf393f7b25bb626006fb9fb2436106939ede6d2d6ecf4229b96a47f27edd681 - languageName: node - linkType: hard - -"code-block-writer@npm:^10.1.1": - version: 10.1.1 - resolution: "code-block-writer@npm:10.1.1" - checksum: e048037acbcbda19fca62a3a63e4a64226ea6b5dc0fad7632d34a88c1165b29a357e5e19f0497811e9911472e824ab85f68176f40e439da87e051908956eb47c - languageName: node - linkType: hard - -"color-convert@npm:^1.9.0": - version: 1.9.3 - resolution: "color-convert@npm:1.9.3" - dependencies: - color-name: 1.1.3 - checksum: fd7a64a17cde98fb923b1dd05c5f2e6f7aefda1b60d67e8d449f9328b4e53b228a428fd38bfeaeb2db2ff6b6503a776a996150b80cdf224062af08a5c8a3a203 - languageName: node - linkType: hard - -"color-convert@npm:^2.0.1": - version: 2.0.1 - resolution: "color-convert@npm:2.0.1" - dependencies: - color-name: ~1.1.4 - checksum: 79e6bdb9fd479a205c71d89574fccfb22bd9053bd98c6c4d870d65c132e5e904e6034978e55b43d69fcaa7433af2016ee203ce76eeba9cfa554b373e7f7db336 - languageName: node - linkType: hard - -"color-name@npm:1.1.3": - version: 1.1.3 - resolution: "color-name@npm:1.1.3" - checksum: 09c5d3e33d2105850153b14466501f2bfb30324a2f76568a408763a3b7433b0e50e5b4ab1947868e65cb101bb7cb75029553f2c333b6d4b8138a73fcc133d69d - languageName: node - linkType: hard - -"color-name@npm:~1.1.4": - version: 1.1.4 - resolution: "color-name@npm:1.1.4" - checksum: b0445859521eb4021cd0fb0cc1a75cecf67fceecae89b63f62b201cca8d345baf8b952c966862a9d9a2632987d4f6581f0ec8d957dfacece86f0a7919316f610 - languageName: node - linkType: hard - -"color-support@npm:^1.1.2": - version: 1.1.3 - resolution: "color-support@npm:1.1.3" - bin: - color-support: bin.js - checksum: 9b7356817670b9a13a26ca5af1c21615463b500783b739b7634a0c2047c16cef4b2865d7576875c31c3cddf9dd621fa19285e628f20198b233a5cfdda6d0793b - languageName: node - linkType: hard - -"colord@npm:^2.9": - version: 2.9.3 - resolution: "colord@npm:2.9.3" - checksum: 95d909bfbcfd8d5605cbb5af56f2d1ce2b323990258fd7c0d2eb0e6d3bb177254d7fb8213758db56bb4ede708964f78c6b992b326615f81a18a6aaf11d64c650 - languageName: node - linkType: hard - -"colorette@npm:^2.0.19": - version: 2.0.20 - resolution: "colorette@npm:2.0.20" - checksum: 0c016fea2b91b733eb9f4bcdb580018f52c0bc0979443dad930e5037a968237ac53d9beb98e218d2e9235834f8eebce7f8e080422d6194e957454255bde71d3d - languageName: node - linkType: hard - -"comma-separated-tokens@npm:^2.0.0": - version: 2.0.3 - resolution: "comma-separated-tokens@npm:2.0.3" - checksum: e3bf9e0332a5c45f49b90e79bcdb4a7a85f28d6a6f0876a94f1bb9b2bfbdbbb9292aac50e1e742d8c0db1e62a0229a106f57917e2d067fca951d81737651700d - languageName: node - linkType: hard - -"commander@npm:^10.0.0": - version: 10.0.1 - resolution: "commander@npm:10.0.1" - checksum: 436901d64a818295803c1996cd856621a74f30b9f9e28a588e726b2b1670665bccd7c1a77007ebf328729f0139838a88a19265858a0fa7a8728c4656796db948 - languageName: node - linkType: hard - -"commander@npm:^2.20.3": - version: 2.20.3 - resolution: "commander@npm:2.20.3" - checksum: ab8c07884e42c3a8dbc5dd9592c606176c7eb5c1ca5ff274bcf907039b2c41de3626f684ea75ccf4d361ba004bbaff1f577d5384c155f3871e456bdf27becf9e - languageName: node - linkType: hard - -"commander@npm:^4.0.0": - version: 4.1.1 - resolution: "commander@npm:4.1.1" - checksum: d7b9913ff92cae20cb577a4ac6fcc121bd6223319e54a40f51a14740a681ad5c574fd29a57da478a5f234a6fa6c52cbf0b7c641353e03c648b1ae85ba670b977 - languageName: node - linkType: hard - -"concat-map@npm:0.0.1": - version: 0.0.1 - resolution: "concat-map@npm:0.0.1" - checksum: 902a9f5d8967a3e2faf138d5cb784b9979bad2e6db5357c5b21c568df4ebe62bcb15108af1b2253744844eb964fc023fbd9afbbbb6ddd0bcc204c6fb5b7bf3af - languageName: node - linkType: hard - -"consola@npm:^3.2.3": - version: 3.2.3 - resolution: "consola@npm:3.2.3" - checksum: 32ec70e177dd2385c42e38078958cc7397be91db21af90c6f9faa0b16168b49b1c61d689338604bbb2d64370b9347a35f42a9197663a913d3a405bb0ce728499 - languageName: node - linkType: hard - -"console-control-strings@npm:^1.0.0, console-control-strings@npm:^1.1.0": - version: 1.1.0 - resolution: "console-control-strings@npm:1.1.0" - checksum: 8755d76787f94e6cf79ce4666f0c5519906d7f5b02d4b884cf41e11dcd759ed69c57da0670afd9236d229a46e0f9cf519db0cd829c6dca820bb5a5c3def584ed - languageName: node - linkType: hard - -"content-disposition@npm:0.5.4": - version: 0.5.4 - resolution: "content-disposition@npm:0.5.4" - dependencies: - safe-buffer: 5.2.1 - checksum: afb9d545e296a5171d7574fcad634b2fdf698875f4006a9dd04a3e1333880c5c0c98d47b560d01216fb6505a54a2ba6a843ee3a02ec86d7e911e8315255f56c3 - languageName: node - linkType: hard - -"content-type@npm:~1.0.4": - version: 1.0.5 - resolution: "content-type@npm:1.0.5" - checksum: 566271e0a251642254cde0f845f9dd4f9856e52d988f4eb0d0dcffbb7a1f8ec98de7a5215fc628f3bce30fe2fb6fd2bc064b562d721658c59b544e2d34ea2766 - languageName: node - linkType: hard - -"convert-hrtime@npm:^3.0.0": - version: 3.0.0 - resolution: "convert-hrtime@npm:3.0.0" - checksum: d022c950e99753ccb948583cacbc77353e7686982219d046da34957dc2924f8d6f198f55fef233d017b73d1afeb18541e7f7cd0ea5934bd8ca272edace83a7b9 - languageName: node - linkType: hard - -"convert-source-map@npm:^2.0.0": - version: 2.0.0 - resolution: "convert-source-map@npm:2.0.0" - checksum: 63ae9933be5a2b8d4509daca5124e20c14d023c820258e484e32dc324d34c2754e71297c94a05784064ad27615037ef677e3f0c00469fb55f409d2bb21261035 - languageName: node - linkType: hard - -"cookie-es@npm:^1.0.0": - version: 1.0.0 - resolution: "cookie-es@npm:1.0.0" - checksum: e8721cf4d38f3e44049c9118874b323f4f674b1c5cef84a2b888f5bf86ad720ad17b51b43150cad7535a375c24e2921da603801ad28aa6125c3d36c031b41468 - languageName: node - linkType: hard - -"cookie-signature@npm:1.0.6": - version: 1.0.6 - resolution: "cookie-signature@npm:1.0.6" - checksum: f4e1b0a98a27a0e6e66fd7ea4e4e9d8e038f624058371bf4499cfcd8f3980be9a121486995202ba3fca74fbed93a407d6d54d43a43f96fd28d0bd7a06761591a - languageName: node - linkType: hard - -"cookie@npm:0.5.0": - version: 0.5.0 - resolution: "cookie@npm:0.5.0" - checksum: 1f4bd2ca5765f8c9689a7e8954183f5332139eb72b6ff783d8947032ec1fdf43109852c178e21a953a30c0dd42257828185be01b49d1eb1a67fd054ca588a180 - languageName: node - linkType: hard - -"cookie@npm:^0.4.1": - version: 0.4.2 - resolution: "cookie@npm:0.4.2" - checksum: a00833c998bedf8e787b4c342defe5fa419abd96b32f4464f718b91022586b8f1bafbddd499288e75c037642493c83083da426c6a9080d309e3bd90fd11baa9b - languageName: node - linkType: hard - -"copy-to-clipboard@npm:^3.3.1, copy-to-clipboard@npm:^3.3.3": - version: 3.3.3 - resolution: "copy-to-clipboard@npm:3.3.3" - dependencies: - toggle-selection: ^1.0.6 - checksum: e0a325e39b7615108e6c1c8ac110ae7b829cdc4ee3278b1df6a0e4228c490442cc86444cd643e2da344fbc424b3aab8909e2fec82f8bc75e7e5b190b7c24eecf - languageName: node - linkType: hard - -"core-js-compat@npm:^3.31.0, core-js-compat@npm:^3.33.1": - version: 3.33.2 - resolution: "core-js-compat@npm:3.33.2" - dependencies: - browserslist: ^4.22.1 - checksum: 4206d3ff282a9188399e9003301fa4b96844152afcea7b9c9accc653542f40f581f77bf079b8be67f614e305da1f29e868a49ceebb6dbe3f5fb4a28bd2dbf431 - languageName: node - linkType: hard - -"core-util-is@npm:~1.0.0": - version: 1.0.3 - resolution: "core-util-is@npm:1.0.3" - checksum: 9de8597363a8e9b9952491ebe18167e3b36e7707569eed0ebf14f8bba773611376466ae34575bca8cfe3c767890c859c74056084738f09d4e4a6f902b2ad7d99 - languageName: node - linkType: hard - -"create-require@npm:^1.1.0": - version: 1.1.1 - resolution: "create-require@npm:1.1.1" - checksum: a9a1503d4390d8b59ad86f4607de7870b39cad43d929813599a23714831e81c520bddf61bcdd1f8e30f05fd3a2b71ae8538e946eb2786dc65c2bbc520f692eff - languageName: node - linkType: hard - -"cross-fetch@npm:^3.1.4, cross-fetch@npm:^3.1.5": - version: 3.1.8 - resolution: "cross-fetch@npm:3.1.8" - dependencies: - node-fetch: ^2.6.12 - checksum: 78f993fa099eaaa041122ab037fe9503ecbbcb9daef234d1d2e0b9230a983f64d645d088c464e21a247b825a08dc444a6e7064adfa93536d3a9454b4745b3632 - languageName: node - linkType: hard - -"cross-spawn@npm:^7.0.0, cross-spawn@npm:^7.0.2, cross-spawn@npm:^7.0.3": - version: 7.0.3 - resolution: "cross-spawn@npm:7.0.3" - dependencies: - path-key: ^3.1.0 - shebang-command: ^2.0.0 - which: ^2.0.1 - checksum: 671cc7c7288c3a8406f3c69a3ae2fc85555c04169e9d611def9a675635472614f1c0ed0ef80955d5b6d4e724f6ced67f0ad1bb006c2ea643488fcfef994d7f52 - languageName: node - linkType: hard - -"css-selector-tokenizer@npm:^0.8": - version: 0.8.0 - resolution: "css-selector-tokenizer@npm:0.8.0" - dependencies: - cssesc: ^3.0.0 - fastparse: ^1.1.2 - checksum: 1eb7ca7d2c21ede700a0fab7df4547198431c30ba62663d81a566a8abe6ab7524f627ce6c0bde63f34917e199b73be4081e449bd8faf107d155766204082aa0a - languageName: node - linkType: hard - -"css-what@npm:^5.0.1": - version: 5.1.0 - resolution: "css-what@npm:5.1.0" - checksum: 0b75d1bac95c885c168573c85744a6c6843d8c33345f54f717218b37ea6296b0e99bb12105930ea170fd4a921990392a7c790c16c585c1d8960c49e2b7ec39f7 - languageName: node - linkType: hard - -"css-what@npm:^6.1.0": - version: 6.1.0 - resolution: "css-what@npm:6.1.0" - checksum: b975e547e1e90b79625918f84e67db5d33d896e6de846c9b584094e529f0c63e2ab85ee33b9daffd05bff3a146a1916bec664e18bb76dd5f66cbff9fc13b2bbe - languageName: node - linkType: hard - -"cssesc@npm:^3.0.0": - version: 3.0.0 - resolution: "cssesc@npm:3.0.0" - bin: - cssesc: bin/cssesc - checksum: f8c4ababffbc5e2ddf2fa9957dda1ee4af6048e22aeda1869d0d00843223c1b13ad3f5d88b51caa46c994225eacb636b764eb807a8883e2fb6f99b4f4e8c48b2 - languageName: node - linkType: hard - -"csstype@npm:^3.0.2, csstype@npm:^3.0.7": - version: 3.1.2 - resolution: "csstype@npm:3.1.2" - checksum: e1a52e6c25c1314d6beef5168da704ab29c5186b877c07d822bd0806717d9a265e8493a2e35ca7e68d0f5d472d43fac1cdce70fd79fd0853dff81f3028d857b5 - languageName: node - linkType: hard - -"daisyui@npm:~3.5.1": - version: 3.5.1 - resolution: "daisyui@npm:3.5.1" - dependencies: - colord: ^2.9 - css-selector-tokenizer: ^0.8 - postcss: ^8 - postcss-js: ^4 - tailwindcss: ^3 - checksum: 0f7e572b8fd4bfd5922b8ae1315734cad635383cfcd5c9f272b932012fdcffc35cdec43ebee2f69ac9166114741fe948ebfdd67d929daa198cda3e0ab00ff99e - languageName: node - linkType: hard - -"damerau-levenshtein@npm:^1.0.8": - version: 1.0.8 - resolution: "damerau-levenshtein@npm:1.0.8" - checksum: d240b7757544460ae0586a341a53110ab0a61126570ef2d8c731e3eab3f0cb6e488e2609e6a69b46727635de49be20b071688698744417ff1b6c1d7ccd03e0de - languageName: node - linkType: hard - -"data-uri-to-buffer@npm:3": - version: 3.0.1 - resolution: "data-uri-to-buffer@npm:3.0.1" - checksum: c59c3009686a78c071806b72f4810856ec28222f0f4e252aa495ec027ed9732298ceea99c50328cf59b151dd34cbc3ad6150bbb43e41fc56fa19f48c99e9fc30 - languageName: node - linkType: hard - -"deasync@npm:^0.1.0": - version: 0.1.29 - resolution: "deasync@npm:0.1.29" - dependencies: - bindings: ^1.5.0 - node-addon-api: ^1.7.1 - checksum: 60a23d893153832cd2e2da7afcdb7e21afdd63b0450f67466aefd387e8ca49b649484527ce7bd9e6282a1ea27be9db45a83e6a6cf8ddedd71c51aaf8c10cc323 - languageName: node - linkType: hard - -"debug@npm:2.6.9": - version: 2.6.9 - resolution: "debug@npm:2.6.9" - dependencies: - ms: 2.0.0 - checksum: d2f51589ca66df60bf36e1fa6e4386b318c3f1e06772280eea5b1ae9fd3d05e9c2b7fd8a7d862457d00853c75b00451aa2d7459b924629ee385287a650f58fe6 - languageName: node - linkType: hard - -"debug@npm:4, debug@npm:^4.0.0, debug@npm:^4.1.0, debug@npm:^4.1.1, debug@npm:^4.3.2, debug@npm:^4.3.4": - version: 4.3.4 - resolution: "debug@npm:4.3.4" - dependencies: - ms: 2.1.2 - peerDependenciesMeta: - supports-color: - optional: true - checksum: 3dbad3f94ea64f34431a9cbf0bafb61853eda57bff2880036153438f50fb5a84f27683ba0d8e5426bf41a8c6ff03879488120cf5b3a761e77953169c0600a708 - languageName: node - linkType: hard - -"debug@npm:^3.2.7": - version: 3.2.7 - resolution: "debug@npm:3.2.7" - dependencies: - ms: ^2.1.1 - checksum: b3d8c5940799914d30314b7c3304a43305fd0715581a919dacb8b3176d024a782062368405b47491516d2091d6462d4d11f2f4974a405048094f8bfebfa3071c - languageName: node - linkType: hard - -"decamelize@npm:^1.2.0": - version: 1.2.0 - resolution: "decamelize@npm:1.2.0" - checksum: ad8c51a7e7e0720c70ec2eeb1163b66da03e7616d7b98c9ef43cce2416395e84c1e9548dd94f5f6ffecfee9f8b94251fc57121a8b021f2ff2469b2bae247b8aa - languageName: node - linkType: hard - -"decimal.js-light@npm:^2.5.0": - version: 2.5.1 - resolution: "decimal.js-light@npm:2.5.1" - checksum: f5a2c7eac1c4541c8ab8a5c8abea64fc1761cefc7794bd5f8afd57a8a78d1b51785e0c4e4f85f4895a043eaa90ddca1edc3981d1263eb6ddce60f32bf5fe66c9 - languageName: node - linkType: hard - -"decode-named-character-reference@npm:^1.0.0": - version: 1.0.2 - resolution: "decode-named-character-reference@npm:1.0.2" - dependencies: - character-entities: ^2.0.0 - checksum: f4c71d3b93105f20076052f9cb1523a22a9c796b8296cd35eef1ca54239c78d182c136a848b83ff8da2071e3ae2b1d300bf29d00650a6d6e675438cc31b11d78 - languageName: node - linkType: hard - -"decode-uri-component@npm:^0.2.0, decode-uri-component@npm:^0.2.2": - version: 0.2.2 - resolution: "decode-uri-component@npm:0.2.2" - checksum: 95476a7d28f267292ce745eac3524a9079058bbb35767b76e3ee87d42e34cd0275d2eb19d9d08c3e167f97556e8a2872747f5e65cbebcac8b0c98d83e285f139 - languageName: node - linkType: hard - -"decompress-response@npm:^6.0.0": - version: 6.0.0 - resolution: "decompress-response@npm:6.0.0" - dependencies: - mimic-response: ^3.1.0 - checksum: d377cf47e02d805e283866c3f50d3d21578b779731e8c5072d6ce8c13cc31493db1c2f6784da9d1d5250822120cefa44f1deab112d5981015f2e17444b763812 - languageName: node - linkType: hard - -"deep-is@npm:^0.1.3, deep-is@npm:~0.1.3": - version: 0.1.4 - resolution: "deep-is@npm:0.1.4" - checksum: edb65dd0d7d1b9c40b2f50219aef30e116cedd6fc79290e740972c132c09106d2e80aa0bc8826673dd5a00222d4179c84b36a790eef63a4c4bca75a37ef90804 - languageName: node - linkType: hard - -"deep-object-diff@npm:^1.1.0, deep-object-diff@npm:^1.1.9": - version: 1.1.9 - resolution: "deep-object-diff@npm:1.1.9" - checksum: ecd42455e4773f653595d28070295e7aaa8402db5f8ab21d0bec115a7cb4de5e207a5665514767da5f025c96597f1d3a0a4888aeb4dd49e03c996871a3aa05ef - languageName: node - linkType: hard - -"deepmerge@npm:^4.2.2": - version: 4.3.1 - resolution: "deepmerge@npm:4.3.1" - checksum: 2024c6a980a1b7128084170c4cf56b0fd58a63f2da1660dcfe977415f27b17dbe5888668b59d0b063753f3220719d5e400b7f113609489c90160bb9a5518d052 - languageName: node - linkType: hard - -"defaults@npm:^1.0.3": - version: 1.0.4 - resolution: "defaults@npm:1.0.4" - dependencies: - clone: ^1.0.2 - checksum: 3a88b7a587fc076b84e60affad8b85245c01f60f38fc1d259e7ac1d89eb9ce6abb19e27215de46b98568dd5bc48471730b327637e6f20b0f1bc85cf00440c80a - languageName: node - linkType: hard - -"defer-to-connect@npm:^2.0.0": - version: 2.0.1 - resolution: "defer-to-connect@npm:2.0.1" - checksum: 8a9b50d2f25446c0bfefb55a48e90afd58f85b21bcf78e9207cd7b804354f6409032a1705c2491686e202e64fc05f147aa5aa45f9aa82627563f045937f5791b - languageName: node - linkType: hard - -"define-data-property@npm:^1.0.1, define-data-property@npm:^1.1.1": - version: 1.1.1 - resolution: "define-data-property@npm:1.1.1" - dependencies: - get-intrinsic: ^1.2.1 - gopd: ^1.0.1 - has-property-descriptors: ^1.0.0 - checksum: a29855ad3f0630ea82e3c5012c812efa6ca3078d5c2aa8df06b5f597c1cde6f7254692df41945851d903e05a1668607b6d34e778f402b9ff9ffb38111f1a3f0d - languageName: node - linkType: hard - -"define-properties@npm:^1.1.3, define-properties@npm:^1.1.4, define-properties@npm:^1.2.0, define-properties@npm:^1.2.1": - version: 1.2.1 - resolution: "define-properties@npm:1.2.1" - dependencies: - define-data-property: ^1.0.1 - has-property-descriptors: ^1.0.0 - object-keys: ^1.1.1 - checksum: b4ccd00597dd46cb2d4a379398f5b19fca84a16f3374e2249201992f36b30f6835949a9429669ee6b41b6e837205a163eadd745e472069e70dfc10f03e5fcc12 - languageName: node - linkType: hard - -"defu@npm:^6.1.2": - version: 6.1.3 - resolution: "defu@npm:6.1.3" - checksum: c857a0cf854632e8528dad36454fd1c812bff8f5f091d5a6892e75d7f6b76d8319afbbfb8c504daab84ac86e40037ff37c544d50f89ed5b5419ba1989a226777 - languageName: node - linkType: hard - -"degenerator@npm:^3.0.2": - version: 3.0.4 - resolution: "degenerator@npm:3.0.4" - dependencies: - ast-types: ^0.13.2 - escodegen: ^1.8.1 - esprima: ^4.0.0 - vm2: ^3.9.17 - checksum: 99c27c9456095e32c4f6e01091d2b5c249f246b574487c52bca571e1e586b02d4b74a0ea7f22f30cc953c914383d02e2038d7d476a22f2704a8c1e88b671007d - languageName: node - linkType: hard - -"delay@npm:^5.0.0": - version: 5.0.0 - resolution: "delay@npm:5.0.0" - checksum: 62f151151ecfde0d9afbb8a6be37a6d103c4cb24f35a20ef3fe56f920b0d0d0bb02bc9c0a3084d0179ef669ca332b91155f2ee4d9854622cd2cdba5fc95285f9 - languageName: node - linkType: hard - -"delegates@npm:^1.0.0": - version: 1.0.0 - resolution: "delegates@npm:1.0.0" - checksum: a51744d9b53c164ba9c0492471a1a2ffa0b6727451bdc89e31627fdf4adda9d51277cfcbfb20f0a6f08ccb3c436f341df3e92631a3440226d93a8971724771fd - languageName: node - linkType: hard - -"denque@npm:^2.1.0": - version: 2.1.0 - resolution: "denque@npm:2.1.0" - checksum: 1d4ae1d05e59ac3a3481e7b478293f4b4c813819342273f3d5b826c7ffa9753c520919ba264f377e09108d24ec6cf0ec0ac729a5686cbb8f32d797126c5dae74 - languageName: node - linkType: hard - -"depd@npm:2.0.0": - version: 2.0.0 - resolution: "depd@npm:2.0.0" - checksum: abbe19c768c97ee2eed6282d8ce3031126662252c58d711f646921c9623f9052e3e1906443066beec1095832f534e57c523b7333f8e7e0d93051ab6baef5ab3a - languageName: node - linkType: hard - -"dequal@npm:^2.0.0, dequal@npm:^2.0.3": - version: 2.0.3 - resolution: "dequal@npm:2.0.3" - checksum: 8679b850e1a3d0ebbc46ee780d5df7b478c23f335887464023a631d1b9af051ad4a6595a44220f9ff8ff95a8ddccf019b5ad778a976fd7bbf77383d36f412f90 - languageName: node - linkType: hard - -"destr@npm:^2.0.1, destr@npm:^2.0.2": - version: 2.0.2 - resolution: "destr@npm:2.0.2" - checksum: cb63dd477d1c323f95650ce7784f1497466d68150ac0fddd6c99652be45c9dcb997d53fd5eb6c6fda6c0b2a5e5b4fc7fa3c3e18dace3d810ba4cf45d8b55bdd6 - languageName: node - linkType: hard - -"destroy@npm:1.2.0": - version: 1.2.0 - resolution: "destroy@npm:1.2.0" - checksum: 0acb300b7478a08b92d810ab229d5afe0d2f4399272045ab22affa0d99dbaf12637659411530a6fcd597a9bdac718fc94373a61a95b4651bbc7b83684a565e38 - languageName: node - linkType: hard - -"detect-browser@npm:5.3.0, detect-browser@npm:^5.3.0": - version: 5.3.0 - resolution: "detect-browser@npm:5.3.0" - checksum: dd6e08d55da1d9e0f22510ac79872078ae03d9dfa13c5e66c96baedc1c86567345a88f96949161f6be8f3e0fafa93bf179bdb1cd311b14f5f163112fcc70ab49 - languageName: node - linkType: hard - -"detect-indent@npm:^6.0.0": - version: 6.1.0 - resolution: "detect-indent@npm:6.1.0" - checksum: ab953a73c72dbd4e8fc68e4ed4bfd92c97eb6c43734af3900add963fd3a9316f3bc0578b018b24198d4c31a358571eff5f0656e81a1f3b9ad5c547d58b2d093d - languageName: node - linkType: hard - -"detect-libc@npm:^1.0.3": - version: 1.0.3 - resolution: "detect-libc@npm:1.0.3" - bin: - detect-libc: ./bin/detect-libc.js - checksum: daaaed925ffa7889bd91d56e9624e6c8033911bb60f3a50a74a87500680652969dbaab9526d1e200a4c94acf80fc862a22131841145a0a8482d60a99c24f4a3e - languageName: node - linkType: hard - -"detect-libc@npm:^2.0.0": - version: 2.0.2 - resolution: "detect-libc@npm:2.0.2" - checksum: 2b2cd3649b83d576f4be7cc37eb3b1815c79969c8b1a03a40a4d55d83bc74d010753485753448eacb98784abf22f7dbd3911fd3b60e29fda28fed2d1a997944d - languageName: node - linkType: hard - -"detect-newline@npm:3.1.0": - version: 3.1.0 - resolution: "detect-newline@npm:3.1.0" - checksum: ae6cd429c41ad01b164c59ea36f264a2c479598e61cba7c99da24175a7ab80ddf066420f2bec9a1c57a6bead411b4655ff15ad7d281c000a89791f48cbe939e7 - languageName: node - linkType: hard - -"detect-node-es@npm:^1.1.0": - version: 1.1.0 - resolution: "detect-node-es@npm:1.1.0" - checksum: e46307d7264644975b71c104b9f028ed1d3d34b83a15b8a22373640ce5ea630e5640b1078b8ea15f202b54641da71e4aa7597093bd4b91f113db520a26a37449 - languageName: node - linkType: hard - -"didyoumean@npm:^1.2.2": - version: 1.2.2 - resolution: "didyoumean@npm:1.2.2" - checksum: d5d98719d58b3c2fa59663c4c42ba9716f1fd01245c31d5fce31915bd3aa26e6aac149788e007358f778ebbd68a2256eb5973e8ca6f221df221ba060115acf2e - languageName: node - linkType: hard - -"diff@npm:^4.0.1": - version: 4.0.2 - resolution: "diff@npm:4.0.2" - checksum: f2c09b0ce4e6b301c221addd83bf3f454c0bc00caa3dd837cf6c127d6edf7223aa2bbe3b688feea110b7f262adbfc845b757c44c8a9f8c0c5b15d8fa9ce9d20d - languageName: node - linkType: hard - -"diff@npm:^5.0.0": - version: 5.1.0 - resolution: "diff@npm:5.1.0" - checksum: c7bf0df7c9bfbe1cf8a678fd1b2137c4fb11be117a67bc18a0e03ae75105e8533dbfb1cda6b46beb3586ef5aed22143ef9d70713977d5fb1f9114e21455fba90 - languageName: node - linkType: hard - -"dijkstrajs@npm:^1.0.1": - version: 1.0.3 - resolution: "dijkstrajs@npm:1.0.3" - checksum: 82ff2c6633f235dd5e6bed04ec62cdfb1f327b4d7534557bd52f18991313f864ee50654543072fff4384a92b643ada4d5452f006b7098dbdfad6c8744a8c9e08 - languageName: node - linkType: hard - -"dir-glob@npm:^3.0.1": - version: 3.0.1 - resolution: "dir-glob@npm:3.0.1" - dependencies: - path-type: ^4.0.0 - checksum: fa05e18324510d7283f55862f3161c6759a3f2f8dbce491a2fc14c8324c498286c54282c1f0e933cb930da8419b30679389499b919122952a4f8592362ef4615 - languageName: node - linkType: hard - -"dlv@npm:^1.1.3": - version: 1.1.3 - resolution: "dlv@npm:1.1.3" - checksum: d7381bca22ed11933a1ccf376db7a94bee2c57aa61e490f680124fa2d1cd27e94eba641d9f45be57caab4f9a6579de0983466f620a2cd6230d7ec93312105ae7 - languageName: node - linkType: hard - -"doctrine@npm:^2.1.0": - version: 2.1.0 - resolution: "doctrine@npm:2.1.0" - dependencies: - esutils: ^2.0.2 - checksum: a45e277f7feaed309fe658ace1ff286c6e2002ac515af0aaf37145b8baa96e49899638c7cd47dccf84c3d32abfc113246625b3ac8f552d1046072adee13b0dc8 - languageName: node - linkType: hard - -"doctrine@npm:^3.0.0": - version: 3.0.0 - resolution: "doctrine@npm:3.0.0" - dependencies: - esutils: ^2.0.2 - checksum: fd7673ca77fe26cd5cba38d816bc72d641f500f1f9b25b83e8ce28827fe2da7ad583a8da26ab6af85f834138cf8dae9f69b0cd6ab925f52ddab1754db44d99ce - languageName: node - linkType: hard - -"dotenv@npm:^16.0.0, dotenv@npm:~16.3.1": - version: 16.3.1 - resolution: "dotenv@npm:16.3.1" - checksum: 15d75e7279018f4bafd0ee9706593dd14455ddb71b3bcba9c52574460b7ccaf67d5cf8b2c08a5af1a9da6db36c956a04a1192b101ee102a3e0cf8817bbcf3dfd - languageName: node - linkType: hard - -"duplexify@npm:^3.5.0, duplexify@npm:^3.6.0": - version: 3.7.1 - resolution: "duplexify@npm:3.7.1" - dependencies: - end-of-stream: ^1.0.0 - inherits: ^2.0.1 - readable-stream: ^2.0.0 - stream-shift: ^1.0.0 - checksum: 3c2ed2223d956a5da713dae12ba8295acb61d9acd966ccbba938090d04f4574ca4dca75cca089b5077c2d7e66101f32e6ea9b36a78ca213eff574e7a8b8accf2 - languageName: node - linkType: hard - -"duplexify@npm:^4.1.2": - version: 4.1.2 - resolution: "duplexify@npm:4.1.2" - dependencies: - end-of-stream: ^1.4.1 - inherits: ^2.0.3 - readable-stream: ^3.1.1 - stream-shift: ^1.0.0 - checksum: 964376c61c0e92f6ed0694b3ba97c84f199413dc40ab8dfdaef80b7a7f4982fcabf796214e28ed614a5bc1ec45488a29b81e7d46fa3f5ddf65bcb118c20145ad - languageName: node - linkType: hard - -"eastasianwidth@npm:^0.2.0": - version: 0.2.0 - resolution: "eastasianwidth@npm:0.2.0" - checksum: 7d00d7cd8e49b9afa762a813faac332dee781932d6f2c848dc348939c4253f1d4564341b7af1d041853bc3f32c2ef141b58e0a4d9862c17a7f08f68df1e0f1ed - languageName: node - linkType: hard - -"edge-runtime@npm:2.0.0": - version: 2.0.0 - resolution: "edge-runtime@npm:2.0.0" - dependencies: - "@edge-runtime/format": 1.1.0 - "@edge-runtime/vm": 2.0.0 - exit-hook: 2.2.1 - http-status: 1.5.3 - mri: 1.2.0 - picocolors: 1.0.0 - pretty-bytes: 5.6.0 - pretty-ms: 7.0.1 - time-span: 4.0.0 - bin: - edge-runtime: dist/cli/index.js - checksum: 406dd2a6ffdc19e54e14dcac1d9433f12069c1f867ca9a6264108f1a38397e5910f48c0e5999a7eb1bfd705747f056e1f0eb479f88003663a817819f61212149 - languageName: node - linkType: hard - -"ee-first@npm:1.1.1": - version: 1.1.1 - resolution: "ee-first@npm:1.1.1" - checksum: 1b4cac778d64ce3b582a7e26b218afe07e207a0f9bfe13cc7395a6d307849cfe361e65033c3251e00c27dd060cab43014c2d6b2647676135e18b77d2d05b3f4f - languageName: node - linkType: hard - -"electron-to-chromium@npm:^1.4.535": - version: 1.4.583 - resolution: "electron-to-chromium@npm:1.4.583" - checksum: 4fd0c79993613d3a8da18a15197e02750910e0d3005a706aa81ae5c83321694b35879d0e26e63fc6aa30746cfad53fd939641cf592f97ea9c010c89e93dd6ee0 - languageName: node - linkType: hard - -"elliptic@npm:6.5.4": - version: 6.5.4 - resolution: "elliptic@npm:6.5.4" - dependencies: - bn.js: ^4.11.9 - brorand: ^1.1.0 - hash.js: ^1.0.0 - hmac-drbg: ^1.0.1 - inherits: ^2.0.4 - minimalistic-assert: ^1.0.1 - minimalistic-crypto-utils: ^1.0.1 - checksum: d56d21fd04e97869f7ffcc92e18903b9f67f2d4637a23c860492fbbff5a3155fd9ca0184ce0c865dd6eb2487d234ce9551335c021c376cd2d3b7cb749c7d10f4 - languageName: node - linkType: hard - -"emoji-regex@npm:^8.0.0": - version: 8.0.0 - resolution: "emoji-regex@npm:8.0.0" - checksum: d4c5c39d5a9868b5fa152f00cada8a936868fd3367f33f71be515ecee4c803132d11b31a6222b2571b1e5f7e13890156a94880345594d0ce7e3c9895f560f192 - languageName: node - linkType: hard - -"emoji-regex@npm:^9.2.2": - version: 9.2.2 - resolution: "emoji-regex@npm:9.2.2" - checksum: 8487182da74aabd810ac6d6f1994111dfc0e331b01271ae01ec1eb0ad7b5ecc2bbbbd2f053c05cb55a1ac30449527d819bbfbf0e3de1023db308cbcb47f86601 - languageName: node - linkType: hard - -"emojis-list@npm:^3.0.0": - version: 3.0.0 - resolution: "emojis-list@npm:3.0.0" - checksum: ddaaa02542e1e9436c03970eeed445f4ed29a5337dfba0fe0c38dfdd2af5da2429c2a0821304e8a8d1cadf27fdd5b22ff793571fa803ae16852a6975c65e8e70 - languageName: node - linkType: hard - -"encode-utf8@npm:^1.0.3": - version: 1.0.3 - resolution: "encode-utf8@npm:1.0.3" - checksum: 550224bf2a104b1d355458c8a82e9b4ea07f9fc78387bc3a49c151b940ad26473de8dc9e121eefc4e84561cb0b46de1e4cd2bc766f72ee145e9ea9541482817f - languageName: node - linkType: hard - -"encodeurl@npm:~1.0.2": - version: 1.0.2 - resolution: "encodeurl@npm:1.0.2" - checksum: e50e3d508cdd9c4565ba72d2012e65038e5d71bdc9198cb125beb6237b5b1ade6c0d343998da9e170fb2eae52c1bed37d4d6d98a46ea423a0cddbed5ac3f780c - languageName: node - linkType: hard - -"encoding@npm:^0.1.13": - version: 0.1.13 - resolution: "encoding@npm:0.1.13" - dependencies: - iconv-lite: ^0.6.2 - checksum: bb98632f8ffa823996e508ce6a58ffcf5856330fde839ae42c9e1f436cc3b5cc651d4aeae72222916545428e54fd0f6aa8862fd8d25bdbcc4589f1e3f3715e7f - languageName: node - linkType: hard - -"end-of-stream@npm:^1.0.0, end-of-stream@npm:^1.1.0, end-of-stream@npm:^1.4.1": - version: 1.4.4 - resolution: "end-of-stream@npm:1.4.4" - dependencies: - once: ^1.4.0 - checksum: 530a5a5a1e517e962854a31693dbb5c0b2fc40b46dad2a56a2deec656ca040631124f4795823acc68238147805f8b021abbe221f4afed5ef3c8e8efc2024908b - languageName: node - linkType: hard - -"enhanced-resolve@npm:^5.12.0": - version: 5.15.0 - resolution: "enhanced-resolve@npm:5.15.0" - dependencies: - graceful-fs: ^4.2.4 - tapable: ^2.2.0 - checksum: fbd8cdc9263be71cc737aa8a7d6c57b43d6aa38f6cc75dde6fcd3598a130cc465f979d2f4d01bb3bf475acb43817749c79f8eef9be048683602ca91ab52e4f11 - languageName: node - linkType: hard - -"env-paths@npm:^2.2.0": - version: 2.2.1 - resolution: "env-paths@npm:2.2.1" - checksum: 65b5df55a8bab92229ab2b40dad3b387fad24613263d103a97f91c9fe43ceb21965cd3392b1ccb5d77088021e525c4e0481adb309625d0cb94ade1d1fb8dc17e - languageName: node - linkType: hard - -"envfile@npm:~6.18.0": - version: 6.18.0 - resolution: "envfile@npm:6.18.0" - bin: - envfile: bin.cjs - checksum: 3a3762994d7b84ccf0293c1269cdfa5ea8971bdbbf7e3571fb686a6415eee2029e43d3faf36ed4222a83eaaf38fbc4fa37b3f50b77ea417ca35561e0e54059c1 - languageName: node - linkType: hard - -"err-code@npm:^2.0.2": - version: 2.0.3 - resolution: "err-code@npm:2.0.3" - checksum: 8b7b1be20d2de12d2255c0bc2ca638b7af5171142693299416e6a9339bd7d88fc8d7707d913d78e0993176005405a236b066b45666b27b797252c771156ace54 - languageName: node - linkType: hard - -"es-abstract@npm:^1.22.1": - version: 1.22.3 - resolution: "es-abstract@npm:1.22.3" - dependencies: - array-buffer-byte-length: ^1.0.0 - arraybuffer.prototype.slice: ^1.0.2 - available-typed-arrays: ^1.0.5 - call-bind: ^1.0.5 - es-set-tostringtag: ^2.0.1 - es-to-primitive: ^1.2.1 - function.prototype.name: ^1.1.6 - get-intrinsic: ^1.2.2 - get-symbol-description: ^1.0.0 - globalthis: ^1.0.3 - gopd: ^1.0.1 - has-property-descriptors: ^1.0.0 - has-proto: ^1.0.1 - has-symbols: ^1.0.3 - hasown: ^2.0.0 - internal-slot: ^1.0.5 - is-array-buffer: ^3.0.2 - is-callable: ^1.2.7 - is-negative-zero: ^2.0.2 - is-regex: ^1.1.4 - is-shared-array-buffer: ^1.0.2 - is-string: ^1.0.7 - is-typed-array: ^1.1.12 - is-weakref: ^1.0.2 - object-inspect: ^1.13.1 - object-keys: ^1.1.1 - object.assign: ^4.1.4 - regexp.prototype.flags: ^1.5.1 - safe-array-concat: ^1.0.1 - safe-regex-test: ^1.0.0 - string.prototype.trim: ^1.2.8 - string.prototype.trimend: ^1.0.7 - string.prototype.trimstart: ^1.0.7 - typed-array-buffer: ^1.0.0 - typed-array-byte-length: ^1.0.0 - typed-array-byte-offset: ^1.0.0 - typed-array-length: ^1.0.4 - unbox-primitive: ^1.0.2 - which-typed-array: ^1.1.13 - checksum: b1bdc962856836f6e72be10b58dc128282bdf33771c7a38ae90419d920fc3b36cc5d2b70a222ad8016e3fc322c367bf4e9e89fc2bc79b7e933c05b218e83d79a - languageName: node - linkType: hard - -"es-iterator-helpers@npm:^1.0.12, es-iterator-helpers@npm:^1.0.15": - version: 1.0.15 - resolution: "es-iterator-helpers@npm:1.0.15" - dependencies: - asynciterator.prototype: ^1.0.0 - call-bind: ^1.0.2 - define-properties: ^1.2.1 - es-abstract: ^1.22.1 - es-set-tostringtag: ^2.0.1 - function-bind: ^1.1.1 - get-intrinsic: ^1.2.1 - globalthis: ^1.0.3 - has-property-descriptors: ^1.0.0 - has-proto: ^1.0.1 - has-symbols: ^1.0.3 - internal-slot: ^1.0.5 - iterator.prototype: ^1.1.2 - safe-array-concat: ^1.0.1 - checksum: 50081ae5c549efe62e5c1d244df0194b40b075f7897fc2116b7e1aa437eb3c41f946d2afda18c33f9b31266ec544765932542765af839f76fa6d7b7855d1e0e1 - languageName: node - linkType: hard - -"es-set-tostringtag@npm:^2.0.1": - version: 2.0.2 - resolution: "es-set-tostringtag@npm:2.0.2" - dependencies: - get-intrinsic: ^1.2.2 - has-tostringtag: ^1.0.0 - hasown: ^2.0.0 - checksum: afcec3a4c9890ae14d7ec606204858441c801ff84f312538e1d1ccf1e5493c8b17bd672235df785f803756472cb4f2d49b87bde5237aef33411e74c22f194e07 - languageName: node - linkType: hard - -"es-shim-unscopables@npm:^1.0.0": - version: 1.0.2 - resolution: "es-shim-unscopables@npm:1.0.2" - dependencies: - hasown: ^2.0.0 - checksum: 432bd527c62065da09ed1d37a3f8e623c423683285e6188108286f4a1e8e164a5bcbfbc0051557c7d14633cd2a41ce24c7048e6bbb66a985413fd32f1be72626 - languageName: node - linkType: hard - -"es-to-primitive@npm:^1.2.1": - version: 1.2.1 - resolution: "es-to-primitive@npm:1.2.1" - dependencies: - is-callable: ^1.1.4 - is-date-object: ^1.0.1 - is-symbol: ^1.0.2 - checksum: 4ead6671a2c1402619bdd77f3503991232ca15e17e46222b0a41a5d81aebc8740a77822f5b3c965008e631153e9ef0580540007744521e72de8e33599fca2eed - languageName: node - linkType: hard - -"es6-promise@npm:^4.0.3": - version: 4.2.8 - resolution: "es6-promise@npm:4.2.8" - checksum: 95614a88873611cb9165a85d36afa7268af5c03a378b35ca7bda9508e1d4f1f6f19a788d4bc755b3fd37c8ebba40782018e02034564ff24c9d6fa37e959ad57d - languageName: node - linkType: hard - -"es6-promisify@npm:^5.0.0": - version: 5.0.0 - resolution: "es6-promisify@npm:5.0.0" - dependencies: - es6-promise: ^4.0.3 - checksum: fbed9d791598831413be84a5374eca8c24800ec71a16c1c528c43a98e2dadfb99331483d83ae6094ddb9b87e6f799a15d1553cebf756047e0865c753bc346b92 - languageName: node - linkType: hard - -"esbuild-android-64@npm:0.14.47": - version: 0.14.47 - resolution: "esbuild-android-64@npm:0.14.47" - conditions: os=android & cpu=x64 - languageName: node - linkType: hard - -"esbuild-android-arm64@npm:0.14.47": - version: 0.14.47 - resolution: "esbuild-android-arm64@npm:0.14.47" - conditions: os=android & cpu=arm64 - languageName: node - linkType: hard - -"esbuild-darwin-64@npm:0.14.47": - version: 0.14.47 - resolution: "esbuild-darwin-64@npm:0.14.47" - conditions: os=darwin & cpu=x64 - languageName: node - linkType: hard - -"esbuild-darwin-arm64@npm:0.14.47": - version: 0.14.47 - resolution: "esbuild-darwin-arm64@npm:0.14.47" - conditions: os=darwin & cpu=arm64 - languageName: node - linkType: hard - -"esbuild-freebsd-64@npm:0.14.47": - version: 0.14.47 - resolution: "esbuild-freebsd-64@npm:0.14.47" - conditions: os=freebsd & cpu=x64 - languageName: node - linkType: hard - -"esbuild-freebsd-arm64@npm:0.14.47": - version: 0.14.47 - resolution: "esbuild-freebsd-arm64@npm:0.14.47" - conditions: os=freebsd & cpu=arm64 - languageName: node - linkType: hard - -"esbuild-linux-32@npm:0.14.47": - version: 0.14.47 - resolution: "esbuild-linux-32@npm:0.14.47" - conditions: os=linux & cpu=ia32 - languageName: node - linkType: hard - -"esbuild-linux-64@npm:0.14.47": - version: 0.14.47 - resolution: "esbuild-linux-64@npm:0.14.47" - conditions: os=linux & cpu=x64 - languageName: node - linkType: hard - -"esbuild-linux-arm64@npm:0.14.47": - version: 0.14.47 - resolution: "esbuild-linux-arm64@npm:0.14.47" - conditions: os=linux & cpu=arm64 - languageName: node - linkType: hard - -"esbuild-linux-arm@npm:0.14.47": - version: 0.14.47 - resolution: "esbuild-linux-arm@npm:0.14.47" - conditions: os=linux & cpu=arm - languageName: node - linkType: hard - -"esbuild-linux-mips64le@npm:0.14.47": - version: 0.14.47 - resolution: "esbuild-linux-mips64le@npm:0.14.47" - conditions: os=linux & cpu=mips64el - languageName: node - linkType: hard - -"esbuild-linux-ppc64le@npm:0.14.47": - version: 0.14.47 - resolution: "esbuild-linux-ppc64le@npm:0.14.47" - conditions: os=linux & cpu=ppc64 - languageName: node - linkType: hard - -"esbuild-linux-riscv64@npm:0.14.47": - version: 0.14.47 - resolution: "esbuild-linux-riscv64@npm:0.14.47" - conditions: os=linux & cpu=riscv64 - languageName: node - linkType: hard - -"esbuild-linux-s390x@npm:0.14.47": - version: 0.14.47 - resolution: "esbuild-linux-s390x@npm:0.14.47" - conditions: os=linux & cpu=s390x - languageName: node - linkType: hard - -"esbuild-netbsd-64@npm:0.14.47": - version: 0.14.47 - resolution: "esbuild-netbsd-64@npm:0.14.47" - conditions: os=netbsd & cpu=x64 - languageName: node - linkType: hard - -"esbuild-openbsd-64@npm:0.14.47": - version: 0.14.47 - resolution: "esbuild-openbsd-64@npm:0.14.47" - conditions: os=openbsd & cpu=x64 - languageName: node - linkType: hard - -"esbuild-sunos-64@npm:0.14.47": - version: 0.14.47 - resolution: "esbuild-sunos-64@npm:0.14.47" - conditions: os=sunos & cpu=x64 - languageName: node - linkType: hard - -"esbuild-windows-32@npm:0.14.47": - version: 0.14.47 - resolution: "esbuild-windows-32@npm:0.14.47" - conditions: os=win32 & cpu=ia32 - languageName: node - linkType: hard - -"esbuild-windows-64@npm:0.14.47": - version: 0.14.47 - resolution: "esbuild-windows-64@npm:0.14.47" - conditions: os=win32 & cpu=x64 - languageName: node - linkType: hard - -"esbuild-windows-arm64@npm:0.14.47": - version: 0.14.47 - resolution: "esbuild-windows-arm64@npm:0.14.47" - conditions: os=win32 & cpu=arm64 - languageName: node - linkType: hard - -"esbuild@npm:0.14.47": - version: 0.14.47 - resolution: "esbuild@npm:0.14.47" - dependencies: - esbuild-android-64: 0.14.47 - esbuild-android-arm64: 0.14.47 - esbuild-darwin-64: 0.14.47 - esbuild-darwin-arm64: 0.14.47 - esbuild-freebsd-64: 0.14.47 - esbuild-freebsd-arm64: 0.14.47 - esbuild-linux-32: 0.14.47 - esbuild-linux-64: 0.14.47 - esbuild-linux-arm: 0.14.47 - esbuild-linux-arm64: 0.14.47 - esbuild-linux-mips64le: 0.14.47 - esbuild-linux-ppc64le: 0.14.47 - esbuild-linux-riscv64: 0.14.47 - esbuild-linux-s390x: 0.14.47 - esbuild-netbsd-64: 0.14.47 - esbuild-openbsd-64: 0.14.47 - esbuild-sunos-64: 0.14.47 - esbuild-windows-32: 0.14.47 - esbuild-windows-64: 0.14.47 - esbuild-windows-arm64: 0.14.47 - dependenciesMeta: - esbuild-android-64: - optional: true - esbuild-android-arm64: - optional: true - esbuild-darwin-64: - optional: true - esbuild-darwin-arm64: - optional: true - esbuild-freebsd-64: - optional: true - esbuild-freebsd-arm64: - optional: true - esbuild-linux-32: - optional: true - esbuild-linux-64: - optional: true - esbuild-linux-arm: - optional: true - esbuild-linux-arm64: - optional: true - esbuild-linux-mips64le: - optional: true - esbuild-linux-ppc64le: - optional: true - esbuild-linux-riscv64: - optional: true - esbuild-linux-s390x: - optional: true - esbuild-netbsd-64: - optional: true - esbuild-openbsd-64: - optional: true - esbuild-sunos-64: - optional: true - esbuild-windows-32: - optional: true - esbuild-windows-64: - optional: true - esbuild-windows-arm64: - optional: true - bin: - esbuild: bin/esbuild - checksum: 77a8bff8c3fe52dc9d2823448843b0f53c9a9f3701e3637a54e396270c9ca04cc46a4b08ef86cbaa8d202854e02c790f61683bfa75ebff540b1e24414f536e91 - languageName: node - linkType: hard - -"esbuild@npm:0.16.3": - version: 0.16.3 - resolution: "esbuild@npm:0.16.3" - dependencies: - "@esbuild/android-arm": 0.16.3 - "@esbuild/android-arm64": 0.16.3 - "@esbuild/android-x64": 0.16.3 - "@esbuild/darwin-arm64": 0.16.3 - "@esbuild/darwin-x64": 0.16.3 - "@esbuild/freebsd-arm64": 0.16.3 - "@esbuild/freebsd-x64": 0.16.3 - "@esbuild/linux-arm": 0.16.3 - "@esbuild/linux-arm64": 0.16.3 - "@esbuild/linux-ia32": 0.16.3 - "@esbuild/linux-loong64": 0.16.3 - "@esbuild/linux-mips64el": 0.16.3 - "@esbuild/linux-ppc64": 0.16.3 - "@esbuild/linux-riscv64": 0.16.3 - "@esbuild/linux-s390x": 0.16.3 - "@esbuild/linux-x64": 0.16.3 - "@esbuild/netbsd-x64": 0.16.3 - "@esbuild/openbsd-x64": 0.16.3 - "@esbuild/sunos-x64": 0.16.3 - "@esbuild/win32-arm64": 0.16.3 - "@esbuild/win32-ia32": 0.16.3 - "@esbuild/win32-x64": 0.16.3 - dependenciesMeta: - "@esbuild/android-arm": - optional: true - "@esbuild/android-arm64": - optional: true - "@esbuild/android-x64": - optional: true - "@esbuild/darwin-arm64": - optional: true - "@esbuild/darwin-x64": - optional: true - "@esbuild/freebsd-arm64": - optional: true - "@esbuild/freebsd-x64": - optional: true - "@esbuild/linux-arm": - optional: true - "@esbuild/linux-arm64": - optional: true - "@esbuild/linux-ia32": - optional: true - "@esbuild/linux-loong64": - optional: true - "@esbuild/linux-mips64el": - optional: true - "@esbuild/linux-ppc64": - optional: true - "@esbuild/linux-riscv64": - optional: true - "@esbuild/linux-s390x": - optional: true - "@esbuild/linux-x64": - optional: true - "@esbuild/netbsd-x64": - optional: true - "@esbuild/openbsd-x64": - optional: true - "@esbuild/sunos-x64": - optional: true - "@esbuild/win32-arm64": - optional: true - "@esbuild/win32-ia32": - optional: true - "@esbuild/win32-x64": - optional: true - bin: - esbuild: bin/esbuild - checksum: c2986b0433c6048b917c185067ea42427413ef4136c45012e180e48fc24e6f01af9c94ca7e9bc6dd29ac529af45d26c9d4eb5b8639c9a79f68f337d24aeda2af - languageName: node - linkType: hard - -"esbuild@npm:0.17.6": - version: 0.17.6 - resolution: "esbuild@npm:0.17.6" - dependencies: - "@esbuild/android-arm": 0.17.6 - "@esbuild/android-arm64": 0.17.6 - "@esbuild/android-x64": 0.17.6 - "@esbuild/darwin-arm64": 0.17.6 - "@esbuild/darwin-x64": 0.17.6 - "@esbuild/freebsd-arm64": 0.17.6 - "@esbuild/freebsd-x64": 0.17.6 - "@esbuild/linux-arm": 0.17.6 - "@esbuild/linux-arm64": 0.17.6 - "@esbuild/linux-ia32": 0.17.6 - "@esbuild/linux-loong64": 0.17.6 - "@esbuild/linux-mips64el": 0.17.6 - "@esbuild/linux-ppc64": 0.17.6 - "@esbuild/linux-riscv64": 0.17.6 - "@esbuild/linux-s390x": 0.17.6 - "@esbuild/linux-x64": 0.17.6 - "@esbuild/netbsd-x64": 0.17.6 - "@esbuild/openbsd-x64": 0.17.6 - "@esbuild/sunos-x64": 0.17.6 - "@esbuild/win32-arm64": 0.17.6 - "@esbuild/win32-ia32": 0.17.6 - "@esbuild/win32-x64": 0.17.6 - dependenciesMeta: - "@esbuild/android-arm": - optional: true - "@esbuild/android-arm64": - optional: true - "@esbuild/android-x64": - optional: true - "@esbuild/darwin-arm64": - optional: true - "@esbuild/darwin-x64": - optional: true - "@esbuild/freebsd-arm64": - optional: true - "@esbuild/freebsd-x64": - optional: true - "@esbuild/linux-arm": - optional: true - "@esbuild/linux-arm64": - optional: true - "@esbuild/linux-ia32": - optional: true - "@esbuild/linux-loong64": - optional: true - "@esbuild/linux-mips64el": - optional: true - "@esbuild/linux-ppc64": - optional: true - "@esbuild/linux-riscv64": - optional: true - "@esbuild/linux-s390x": - optional: true - "@esbuild/linux-x64": - optional: true - "@esbuild/netbsd-x64": - optional: true - "@esbuild/openbsd-x64": - optional: true - "@esbuild/sunos-x64": - optional: true - "@esbuild/win32-arm64": - optional: true - "@esbuild/win32-ia32": - optional: true - "@esbuild/win32-x64": - optional: true - bin: - esbuild: bin/esbuild - checksum: 13c4c3bcaa7ff291810d2c8294a1eb997b4672c60a9285b32d8eafcbc552e4468e06efe9d1a15067f5cbd41adcb12ddb4362618845e2e916e437f281c9aa80ab - languageName: node - linkType: hard - -"esbuild@npm:^0.18.10": - version: 0.18.20 - resolution: "esbuild@npm:0.18.20" - dependencies: - "@esbuild/android-arm": 0.18.20 - "@esbuild/android-arm64": 0.18.20 - "@esbuild/android-x64": 0.18.20 - "@esbuild/darwin-arm64": 0.18.20 - "@esbuild/darwin-x64": 0.18.20 - "@esbuild/freebsd-arm64": 0.18.20 - "@esbuild/freebsd-x64": 0.18.20 - "@esbuild/linux-arm": 0.18.20 - "@esbuild/linux-arm64": 0.18.20 - "@esbuild/linux-ia32": 0.18.20 - "@esbuild/linux-loong64": 0.18.20 - "@esbuild/linux-mips64el": 0.18.20 - "@esbuild/linux-ppc64": 0.18.20 - "@esbuild/linux-riscv64": 0.18.20 - "@esbuild/linux-s390x": 0.18.20 - "@esbuild/linux-x64": 0.18.20 - "@esbuild/netbsd-x64": 0.18.20 - "@esbuild/openbsd-x64": 0.18.20 - "@esbuild/sunos-x64": 0.18.20 - "@esbuild/win32-arm64": 0.18.20 - "@esbuild/win32-ia32": 0.18.20 - "@esbuild/win32-x64": 0.18.20 - dependenciesMeta: - "@esbuild/android-arm": - optional: true - "@esbuild/android-arm64": - optional: true - "@esbuild/android-x64": - optional: true - "@esbuild/darwin-arm64": - optional: true - "@esbuild/darwin-x64": - optional: true - "@esbuild/freebsd-arm64": - optional: true - "@esbuild/freebsd-x64": - optional: true - "@esbuild/linux-arm": - optional: true - "@esbuild/linux-arm64": - optional: true - "@esbuild/linux-ia32": - optional: true - "@esbuild/linux-loong64": - optional: true - "@esbuild/linux-mips64el": - optional: true - "@esbuild/linux-ppc64": - optional: true - "@esbuild/linux-riscv64": - optional: true - "@esbuild/linux-s390x": - optional: true - "@esbuild/linux-x64": - optional: true - "@esbuild/netbsd-x64": - optional: true - "@esbuild/openbsd-x64": - optional: true - "@esbuild/sunos-x64": - optional: true - "@esbuild/win32-arm64": - optional: true - "@esbuild/win32-ia32": - optional: true - "@esbuild/win32-x64": - optional: true - bin: - esbuild: bin/esbuild - checksum: 5d253614e50cdb6ec22095afd0c414f15688e7278a7eb4f3720a6dd1306b0909cf431e7b9437a90d065a31b1c57be60130f63fe3e8d0083b588571f31ee6ec7b - languageName: node - linkType: hard - -"escalade@npm:^3.1.1": - version: 3.1.1 - resolution: "escalade@npm:3.1.1" - checksum: a3e2a99f07acb74b3ad4989c48ca0c3140f69f923e56d0cba0526240ee470b91010f9d39001f2a4a313841d237ede70a729e92125191ba5d21e74b106800b133 - languageName: node - linkType: hard - -"escape-html@npm:~1.0.3": - version: 1.0.3 - resolution: "escape-html@npm:1.0.3" - checksum: 6213ca9ae00d0ab8bccb6d8d4e0a98e76237b2410302cf7df70aaa6591d509a2a37ce8998008cbecae8fc8ffaadf3fb0229535e6a145f3ce0b211d060decbb24 - languageName: node - linkType: hard - -"escape-string-regexp@npm:^1.0.5": - version: 1.0.5 - resolution: "escape-string-regexp@npm:1.0.5" - checksum: 6092fda75c63b110c706b6a9bfde8a612ad595b628f0bd2147eea1d3406723020810e591effc7db1da91d80a71a737a313567c5abb3813e8d9c71f4aa595b410 - languageName: node - linkType: hard - -"escape-string-regexp@npm:^4.0.0": - version: 4.0.0 - resolution: "escape-string-regexp@npm:4.0.0" - checksum: 98b48897d93060f2322108bf29db0feba7dd774be96cd069458d1453347b25ce8682ecc39859d4bca2203cc0ab19c237bcc71755eff49a0f8d90beadeeba5cc5 - languageName: node - linkType: hard - -"escodegen@npm:^1.8.1": - version: 1.14.3 - resolution: "escodegen@npm:1.14.3" - dependencies: - esprima: ^4.0.1 - estraverse: ^4.2.0 - esutils: ^2.0.2 - optionator: ^0.8.1 - source-map: ~0.6.1 - dependenciesMeta: - source-map: - optional: true - bin: - escodegen: bin/escodegen.js - esgenerate: bin/esgenerate.js - checksum: 381cdc4767ecdb221206bbbab021b467bbc2a6f5c9a99c9e6353040080bdd3dfe73d7604ad89a47aca6ea7d58bc635f6bd3fbc8da9a1998e9ddfa8372362ccd0 - languageName: node - linkType: hard - -"eslint-config-next@npm:~13.1.6": - version: 13.1.6 - resolution: "eslint-config-next@npm:13.1.6" - dependencies: - "@next/eslint-plugin-next": 13.1.6 - "@rushstack/eslint-patch": ^1.1.3 - "@typescript-eslint/parser": ^5.42.0 - eslint-import-resolver-node: ^0.3.6 - eslint-import-resolver-typescript: ^3.5.2 - eslint-plugin-import: ^2.26.0 - eslint-plugin-jsx-a11y: ^6.5.1 - eslint-plugin-react: ^7.31.7 - eslint-plugin-react-hooks: ^4.5.0 - peerDependencies: - eslint: ^7.23.0 || ^8.0.0 - typescript: ">=3.3.1" - peerDependenciesMeta: - typescript: - optional: true - checksum: 864b29060f87086802eeb6ea5922dd10764120aba814a1e67103ae9ebed667bc927a4c389217ce51c7b92981a8754f5607deaa2d3676e4716493ce8cc0878522 - languageName: node - linkType: hard - -"eslint-config-prettier@npm:~8.5.0": - version: 8.5.0 - resolution: "eslint-config-prettier@npm:8.5.0" - peerDependencies: - eslint: ">=7.0.0" - bin: - eslint-config-prettier: bin/cli.js - checksum: 0d0f5c32e7a0ad91249467ce71ca92394ccd343178277d318baf32063b79ea90216f4c81d1065d60f96366fdc60f151d4d68ae7811a58bd37228b84c2083f893 - languageName: node - linkType: hard - -"eslint-import-resolver-node@npm:^0.3.6, eslint-import-resolver-node@npm:^0.3.9": - version: 0.3.9 - resolution: "eslint-import-resolver-node@npm:0.3.9" - dependencies: - debug: ^3.2.7 - is-core-module: ^2.13.0 - resolve: ^1.22.4 - checksum: 439b91271236b452d478d0522a44482e8c8540bf9df9bd744062ebb89ab45727a3acd03366a6ba2bdbcde8f9f718bab7fe8db64688aca75acf37e04eafd25e22 - languageName: node - linkType: hard - -"eslint-import-resolver-typescript@npm:^3.5.2": - version: 3.6.1 - resolution: "eslint-import-resolver-typescript@npm:3.6.1" - dependencies: - debug: ^4.3.4 - enhanced-resolve: ^5.12.0 - eslint-module-utils: ^2.7.4 - fast-glob: ^3.3.1 - get-tsconfig: ^4.5.0 - is-core-module: ^2.11.0 - is-glob: ^4.0.3 - peerDependencies: - eslint: "*" - eslint-plugin-import: "*" - checksum: 454fa0646533050fb57f13d27daf8c71f51b0bb9156d6a461290ccb8576d892209fcc6702a89553f3f5ea8e5b407395ca2e5de169a952c953685f1f7c46b4496 - languageName: node - linkType: hard - -"eslint-module-utils@npm:^2.7.4, eslint-module-utils@npm:^2.8.0": - version: 2.8.0 - resolution: "eslint-module-utils@npm:2.8.0" - dependencies: - debug: ^3.2.7 - peerDependenciesMeta: - eslint: - optional: true - checksum: 74c6dfea7641ebcfe174be61168541a11a14aa8d72e515f5f09af55cd0d0862686104b0524aa4b8e0ce66418a44aa38a94d2588743db5fd07a6b49ffd16921d2 - languageName: node - linkType: hard - -"eslint-plugin-import@npm:^2.26.0": - version: 2.29.0 - resolution: "eslint-plugin-import@npm:2.29.0" - dependencies: - array-includes: ^3.1.7 - array.prototype.findlastindex: ^1.2.3 - array.prototype.flat: ^1.3.2 - array.prototype.flatmap: ^1.3.2 - debug: ^3.2.7 - doctrine: ^2.1.0 - eslint-import-resolver-node: ^0.3.9 - eslint-module-utils: ^2.8.0 - hasown: ^2.0.0 - is-core-module: ^2.13.1 - is-glob: ^4.0.3 - minimatch: ^3.1.2 - object.fromentries: ^2.0.7 - object.groupby: ^1.0.1 - object.values: ^1.1.7 - semver: ^6.3.1 - tsconfig-paths: ^3.14.2 - peerDependencies: - eslint: ^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8 - checksum: 19ee541fb95eb7a796f3daebe42387b8d8262bbbcc4fd8a6e92f63a12035f3d2c6cb8bc0b6a70864fa14b1b50ed6b8e6eed5833e625e16cb6bb98b665beff269 - languageName: node - linkType: hard - -"eslint-plugin-jsx-a11y@npm:^6.5.1": - version: 6.8.0 - resolution: "eslint-plugin-jsx-a11y@npm:6.8.0" - dependencies: - "@babel/runtime": ^7.23.2 - aria-query: ^5.3.0 - array-includes: ^3.1.7 - array.prototype.flatmap: ^1.3.2 - ast-types-flow: ^0.0.8 - axe-core: =4.7.0 - axobject-query: ^3.2.1 - damerau-levenshtein: ^1.0.8 - emoji-regex: ^9.2.2 - es-iterator-helpers: ^1.0.15 - hasown: ^2.0.0 - jsx-ast-utils: ^3.3.5 - language-tags: ^1.0.9 - minimatch: ^3.1.2 - object.entries: ^1.1.7 - object.fromentries: ^2.0.7 - peerDependencies: - eslint: ^3 || ^4 || ^5 || ^6 || ^7 || ^8 - checksum: 3dec00e2a3089c4c61ac062e4196a70985fb7eda1fd67fe035363d92578debde92fdb8ed2e472321fc0d71e75f4a1e8888c6a3218c14dd93c8e8d19eb6f51554 - languageName: node - linkType: hard - -"eslint-plugin-prettier@npm:~4.2.1": - version: 4.2.1 - resolution: "eslint-plugin-prettier@npm:4.2.1" - dependencies: - prettier-linter-helpers: ^1.0.0 - peerDependencies: - eslint: ">=7.28.0" - prettier: ">=2.0.0" - peerDependenciesMeta: - eslint-config-prettier: - optional: true - checksum: b9e839d2334ad8ec7a5589c5cb0f219bded260839a857d7a486997f9870e95106aa59b8756ff3f37202085ebab658de382b0267cae44c3a7f0eb0bcc03a4f6d6 - languageName: node - linkType: hard - -"eslint-plugin-react-hooks@npm:^4.5.0": - version: 4.6.0 - resolution: "eslint-plugin-react-hooks@npm:4.6.0" - peerDependencies: - eslint: ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0 - checksum: 23001801f14c1d16bf0a837ca7970d9dd94e7b560384b41db378b49b6e32dc43d6e2790de1bd737a652a86f81a08d6a91f402525061b47719328f586a57e86c3 - languageName: node - linkType: hard - -"eslint-plugin-react@npm:^7.31.7": - version: 7.33.2 - resolution: "eslint-plugin-react@npm:7.33.2" - dependencies: - array-includes: ^3.1.6 - array.prototype.flatmap: ^1.3.1 - array.prototype.tosorted: ^1.1.1 - doctrine: ^2.1.0 - es-iterator-helpers: ^1.0.12 - estraverse: ^5.3.0 - jsx-ast-utils: ^2.4.1 || ^3.0.0 - minimatch: ^3.1.2 - object.entries: ^1.1.6 - object.fromentries: ^2.0.6 - object.hasown: ^1.1.2 - object.values: ^1.1.6 - prop-types: ^15.8.1 - resolve: ^2.0.0-next.4 - semver: ^6.3.1 - string.prototype.matchall: ^4.0.8 - peerDependencies: - eslint: ^3 || ^4 || ^5 || ^6 || ^7 || ^8 - checksum: b4c3d76390b0ae6b6f9fed78170604cc2c04b48e6778a637db339e8e3911ec9ef22510b0ae77c429698151d0f1b245f282177f384105b6830e7b29b9c9b26610 - languageName: node - linkType: hard - -"eslint-scope@npm:^5.1.1": - version: 5.1.1 - resolution: "eslint-scope@npm:5.1.1" - dependencies: - esrecurse: ^4.3.0 - estraverse: ^4.1.1 - checksum: 47e4b6a3f0cc29c7feedee6c67b225a2da7e155802c6ea13bbef4ac6b9e10c66cd2dcb987867ef176292bf4e64eccc680a49e35e9e9c669f4a02bac17e86abdb - languageName: node - linkType: hard - -"eslint-scope@npm:^7.1.1": - version: 7.2.2 - resolution: "eslint-scope@npm:7.2.2" - dependencies: - esrecurse: ^4.3.0 - estraverse: ^5.2.0 - checksum: ec97dbf5fb04b94e8f4c5a91a7f0a6dd3c55e46bfc7bbcd0e3138c3a76977570e02ed89a1810c778dcd72072ff0e9621ba1379b4babe53921d71e2e4486fda3e - languageName: node - linkType: hard - -"eslint-utils@npm:^3.0.0": - version: 3.0.0 - resolution: "eslint-utils@npm:3.0.0" - dependencies: - eslint-visitor-keys: ^2.0.0 - peerDependencies: - eslint: ">=5" - checksum: 0668fe02f5adab2e5a367eee5089f4c39033af20499df88fe4e6aba2015c20720404d8c3d6349b6f716b08fdf91b9da4e5d5481f265049278099c4c836ccb619 - languageName: node - linkType: hard - -"eslint-visitor-keys@npm:^2.0.0": - version: 2.1.0 - resolution: "eslint-visitor-keys@npm:2.1.0" - checksum: e3081d7dd2611a35f0388bbdc2f5da60b3a3c5b8b6e928daffff7391146b434d691577aa95064c8b7faad0b8a680266bcda0a42439c18c717b80e6718d7e267d - languageName: node - linkType: hard - -"eslint-visitor-keys@npm:^3.3.0, eslint-visitor-keys@npm:^3.4.1": - version: 3.4.3 - resolution: "eslint-visitor-keys@npm:3.4.3" - checksum: 36e9ef87fca698b6fd7ca5ca35d7b2b6eeaaf106572e2f7fd31c12d3bfdaccdb587bba6d3621067e5aece31c8c3a348b93922ab8f7b2cbc6aaab5e1d89040c60 - languageName: node - linkType: hard - -"eslint@npm:~8.24.0": - version: 8.24.0 - resolution: "eslint@npm:8.24.0" - dependencies: - "@eslint/eslintrc": ^1.3.2 - "@humanwhocodes/config-array": ^0.10.5 - "@humanwhocodes/gitignore-to-minimatch": ^1.0.2 - "@humanwhocodes/module-importer": ^1.0.1 - ajv: ^6.10.0 - chalk: ^4.0.0 - cross-spawn: ^7.0.2 - debug: ^4.3.2 - doctrine: ^3.0.0 - escape-string-regexp: ^4.0.0 - eslint-scope: ^7.1.1 - eslint-utils: ^3.0.0 - eslint-visitor-keys: ^3.3.0 - espree: ^9.4.0 - esquery: ^1.4.0 - esutils: ^2.0.2 - fast-deep-equal: ^3.1.3 - file-entry-cache: ^6.0.1 - find-up: ^5.0.0 - glob-parent: ^6.0.1 - globals: ^13.15.0 - globby: ^11.1.0 - grapheme-splitter: ^1.0.4 - ignore: ^5.2.0 - import-fresh: ^3.0.0 - imurmurhash: ^0.1.4 - is-glob: ^4.0.0 - js-sdsl: ^4.1.4 - js-yaml: ^4.1.0 - json-stable-stringify-without-jsonify: ^1.0.1 - levn: ^0.4.1 - lodash.merge: ^4.6.2 - minimatch: ^3.1.2 - natural-compare: ^1.4.0 - optionator: ^0.9.1 - regexpp: ^3.2.0 - strip-ansi: ^6.0.1 - strip-json-comments: ^3.1.0 - text-table: ^0.2.0 - bin: - eslint: bin/eslint.js - checksum: ca293ce7116599b742d7ab4d43db469beec22f40dd272092d809498be3cff3a7c567769f9763bdf6799aac13dd53447b93a99629b7b54092783046eb57eaced6 - languageName: node - linkType: hard - -"espree@npm:^9.4.0": - version: 9.6.1 - resolution: "espree@npm:9.6.1" - dependencies: - acorn: ^8.9.0 - acorn-jsx: ^5.3.2 - eslint-visitor-keys: ^3.4.1 - checksum: eb8c149c7a2a77b3f33a5af80c10875c3abd65450f60b8af6db1bfcfa8f101e21c1e56a561c6dc13b848e18148d43469e7cd208506238554fb5395a9ea5a1ab9 - languageName: node - linkType: hard - -"esprima@npm:^4.0.0, esprima@npm:^4.0.1, esprima@npm:~4.0.0": - version: 4.0.1 - resolution: "esprima@npm:4.0.1" - bin: - esparse: ./bin/esparse.js - esvalidate: ./bin/esvalidate.js - checksum: b45bc805a613dbea2835278c306b91aff6173c8d034223fa81498c77dcbce3b2931bf6006db816f62eacd9fd4ea975dfd85a5b7f3c6402cfd050d4ca3c13a628 - languageName: node - linkType: hard - -"esquery@npm:^1.4.0": - version: 1.5.0 - resolution: "esquery@npm:1.5.0" - dependencies: - estraverse: ^5.1.0 - checksum: aefb0d2596c230118656cd4ec7532d447333a410a48834d80ea648b1e7b5c9bc9ed8b5e33a89cb04e487b60d622f44cf5713bf4abed7c97343edefdc84a35900 - languageName: node - linkType: hard - -"esrecurse@npm:^4.3.0": - version: 4.3.0 - resolution: "esrecurse@npm:4.3.0" - dependencies: - estraverse: ^5.2.0 - checksum: ebc17b1a33c51cef46fdc28b958994b1dc43cd2e86237515cbc3b4e5d2be6a811b2315d0a1a4d9d340b6d2308b15322f5c8291059521cc5f4802f65e7ec32837 - languageName: node - linkType: hard - -"estraverse@npm:^4.1.1, estraverse@npm:^4.2.0": - version: 4.3.0 - resolution: "estraverse@npm:4.3.0" - checksum: a6299491f9940bb246124a8d44b7b7a413a8336f5436f9837aaa9330209bd9ee8af7e91a654a3545aee9c54b3308e78ee360cef1d777d37cfef77d2fa33b5827 - languageName: node - linkType: hard - -"estraverse@npm:^5.1.0, estraverse@npm:^5.2.0, estraverse@npm:^5.3.0": - version: 5.3.0 - resolution: "estraverse@npm:5.3.0" - checksum: 072780882dc8416ad144f8fe199628d2b3e7bbc9989d9ed43795d2c90309a2047e6bc5979d7e2322a341163d22cfad9e21f4110597fe487519697389497e4e2b - languageName: node - linkType: hard - -"estree-util-attach-comments@npm:^2.0.0": - version: 2.1.1 - resolution: "estree-util-attach-comments@npm:2.1.1" - dependencies: - "@types/estree": ^1.0.0 - checksum: c5c2c41c9a55a169fb4fba9627057843f0d2e21e47a2e3e24318a11ffcf6bc704c0f96f405a529bddac7969b7c44f6cf86711505faaf0c5862c2024419b19704 - languageName: node - linkType: hard - -"estree-util-build-jsx@npm:^2.0.0": - version: 2.2.2 - resolution: "estree-util-build-jsx@npm:2.2.2" - dependencies: - "@types/estree-jsx": ^1.0.0 - estree-util-is-identifier-name: ^2.0.0 - estree-walker: ^3.0.0 - checksum: d008ac36a45d797eadca696f41b4c1ac0587ec0e0b52560cfb0e76d14ef15fc18e526f9023b6e5457dafa9cf3f010c9bb1dfc9c727ebd7cf0ba2ebbaa43919ac - languageName: node - linkType: hard - -"estree-util-is-identifier-name@npm:^1.0.0": - version: 1.1.0 - resolution: "estree-util-is-identifier-name@npm:1.1.0" - checksum: ec55a74708b2fdac7de8d5a1dd82caf36783993608f11b8bc0dcd3b426746ccf21ee7da86ab94e4500c292dc1dde48b7ce65e5dc41f3dc4363a499ea15db32cc - languageName: node - linkType: hard - -"estree-util-is-identifier-name@npm:^2.0.0": - version: 2.1.0 - resolution: "estree-util-is-identifier-name@npm:2.1.0" - checksum: cab317a071fafb99cf83b57df7924bccd2e6ab4e252688739e49f00b16cefd168e279c171442b0557c80a1c80ffaa927d670dadea65bb3c9b151efb8e772e89d - languageName: node - linkType: hard - -"estree-util-value-to-estree@npm:^1.0.0": - version: 1.3.0 - resolution: "estree-util-value-to-estree@npm:1.3.0" - dependencies: - is-plain-obj: ^3.0.0 - checksum: a13c65f0712f32897ecae128d30dedafc439e39ab3722b0a4e51c455a6a0f506fcf2cd4f4c5cce35dafb738f1f55a933a3a44ce277e2140d4a4133968b2becb3 - languageName: node - linkType: hard - -"estree-util-visit@npm:^1.0.0": - version: 1.2.1 - resolution: "estree-util-visit@npm:1.2.1" - dependencies: - "@types/estree-jsx": ^1.0.0 - "@types/unist": ^2.0.0 - checksum: 6feea4fdc43b0ba0f79faf1d57cf32373007e146d4810c7c09c13f5a9c1b8600c1ac57a8d949967cedd2a9a91dddd246e19b59bacfc01e417168b4ebf220f691 - languageName: node - linkType: hard - -"estree-walker@npm:2.0.2, estree-walker@npm:^2.0.1": - version: 2.0.2 - resolution: "estree-walker@npm:2.0.2" - checksum: 6151e6f9828abe2259e57f5fd3761335bb0d2ebd76dc1a01048ccee22fabcfef3c0859300f6d83ff0d1927849368775ec5a6d265dde2f6de5a1be1721cd94efc - languageName: node - linkType: hard - -"estree-walker@npm:^0.6.1": - version: 0.6.1 - resolution: "estree-walker@npm:0.6.1" - checksum: 9d6f82a4921f11eec18f8089fb3cce6e53bcf45a8e545c42a2674d02d055fb30f25f90495f8be60803df6c39680c80dcee7f944526867eb7aa1fc9254883b23d - languageName: node - linkType: hard - -"estree-walker@npm:^3.0.0": - version: 3.0.3 - resolution: "estree-walker@npm:3.0.3" - dependencies: - "@types/estree": ^1.0.0 - checksum: a65728d5727b71de172c5df323385755a16c0fdab8234dc756c3854cfee343261ddfbb72a809a5660fac8c75d960bb3e21aa898c2d7e9b19bb298482ca58a3af - languageName: node - linkType: hard - -"esutils@npm:^2.0.2": - version: 2.0.3 - resolution: "esutils@npm:2.0.3" - checksum: 22b5b08f74737379a840b8ed2036a5fb35826c709ab000683b092d9054e5c2a82c27818f12604bfc2a9a76b90b6834ef081edbc1c7ae30d1627012e067c6ec87 - languageName: node - linkType: hard - -"etag@npm:1.8.1, etag@npm:~1.8.1": - version: 1.8.1 - resolution: "etag@npm:1.8.1" - checksum: 571aeb3dbe0f2bbd4e4fadbdb44f325fc75335cd5f6f6b6a091e6a06a9f25ed5392f0863c5442acb0646787446e816f13cbfc6edce5b07658541dff573cab1ff - languageName: node - linkType: hard - -"eth-block-tracker@npm:6.1.0": - version: 6.1.0 - resolution: "eth-block-tracker@npm:6.1.0" - dependencies: - "@metamask/safe-event-emitter": ^2.0.0 - "@metamask/utils": ^3.0.1 - json-rpc-random-id: ^1.0.1 - pify: ^3.0.0 - checksum: 33ee6375a26822649d1e9ac24a3c39d70338eb505715f72b9102fb82e40d7a48902b4a7dd4a33bb4f121b79707c5ab045777507a2881cfcdb385c8ccbb3ac2a0 - languageName: node - linkType: hard - -"eth-json-rpc-filters@npm:5.1.0": - version: 5.1.0 - resolution: "eth-json-rpc-filters@npm:5.1.0" - dependencies: - "@metamask/safe-event-emitter": ^2.0.0 - async-mutex: ^0.2.6 - eth-query: ^2.1.2 - json-rpc-engine: ^6.1.0 - pify: ^5.0.0 - checksum: 864092e96277953c399a139df66572b864bd41247c5c1d18e6529973804d4fd8962658d8b10571152554802fa8daaa1003588aee79ffce754e0bc57c39b771d5 - languageName: node - linkType: hard - -"eth-query@npm:^2.1.2": - version: 2.1.2 - resolution: "eth-query@npm:2.1.2" - dependencies: - json-rpc-random-id: ^1.0.0 - xtend: ^4.0.1 - checksum: 83daa0e28452c54722aec78cd24d036bad5b6e7c08035d98e10d4bea11f71662f12cab63ebd8a848d4df46ad316503d54ecccb41c9244d2ea8b29364b0a20201 - languageName: node - linkType: hard - -"eth-rpc-errors@npm:4.0.2": - version: 4.0.2 - resolution: "eth-rpc-errors@npm:4.0.2" - dependencies: - fast-safe-stringify: ^2.0.6 - checksum: 1dbdee8f416090f1d318e17bdee2251d174d73c8faa4286fa364bc51ae9105672045f2d078ec23ca6a2b4b92af7cfbe7fa1ba17ad49e591fc653a363bf8cbab2 - languageName: node - linkType: hard - -"eth-rpc-errors@npm:^4.0.2": - version: 4.0.3 - resolution: "eth-rpc-errors@npm:4.0.3" - dependencies: - fast-safe-stringify: ^2.0.6 - checksum: 5fa31d1a10fdb340733b9a55e38e7687222c501052ca20743cef4d0c911a9bbcc0cad54aa6bf3e4b428604c071ff519803060e1cbc79ddb7c9257c11d407d32a - languageName: node - linkType: hard - -"ethers@npm:~5.7.1": - version: 5.7.2 - resolution: "ethers@npm:5.7.2" - dependencies: - "@ethersproject/abi": 5.7.0 - "@ethersproject/abstract-provider": 5.7.0 - "@ethersproject/abstract-signer": 5.7.0 - "@ethersproject/address": 5.7.0 - "@ethersproject/base64": 5.7.0 - "@ethersproject/basex": 5.7.0 - "@ethersproject/bignumber": 5.7.0 - "@ethersproject/bytes": 5.7.0 - "@ethersproject/constants": 5.7.0 - "@ethersproject/contracts": 5.7.0 - "@ethersproject/hash": 5.7.0 - "@ethersproject/hdnode": 5.7.0 - "@ethersproject/json-wallets": 5.7.0 - "@ethersproject/keccak256": 5.7.0 - "@ethersproject/logger": 5.7.0 - "@ethersproject/networks": 5.7.1 - "@ethersproject/pbkdf2": 5.7.0 - "@ethersproject/properties": 5.7.0 - "@ethersproject/providers": 5.7.2 - "@ethersproject/random": 5.7.0 - "@ethersproject/rlp": 5.7.0 - "@ethersproject/sha2": 5.7.0 - "@ethersproject/signing-key": 5.7.0 - "@ethersproject/solidity": 5.7.0 - "@ethersproject/strings": 5.7.0 - "@ethersproject/transactions": 5.7.0 - "@ethersproject/units": 5.7.0 - "@ethersproject/wallet": 5.7.0 - "@ethersproject/web": 5.7.1 - "@ethersproject/wordlists": 5.7.0 - checksum: b7c08cf3e257185a7946117dbbf764433b7ba0e77c27298dec6088b3bc871aff711462b0621930c56880ff0a7ceb8b1d3a361ffa259f93377b48e34107f62553 - languageName: node - linkType: hard - -"eval@npm:0.1.8": - version: 0.1.8 - resolution: "eval@npm:0.1.8" - dependencies: - "@types/node": "*" - require-like: ">= 0.1.1" - checksum: d005567f394cfbe60948e34982e4637d2665030f9aa7dcac581ea6f9ec6eceb87133ed3dc0ae21764aa362485c242a731dbb6371f1f1a86807c58676431e9d1a - languageName: node - linkType: hard - -"eventemitter3@npm:^4.0.7": - version: 4.0.7 - resolution: "eventemitter3@npm:4.0.7" - checksum: 1875311c42fcfe9c707b2712c32664a245629b42bb0a5a84439762dd0fd637fc54d078155ea83c2af9e0323c9ac13687e03cfba79b03af9f40c89b4960099374 - languageName: node - linkType: hard - -"events@npm:^3.3.0": - version: 3.3.0 - resolution: "events@npm:3.3.0" - checksum: f6f487ad2198aa41d878fa31452f1a3c00958f46e9019286ff4787c84aac329332ab45c9cdc8c445928fc6d7ded294b9e005a7fce9426488518017831b272780 - languageName: node - linkType: hard - -"execa@npm:5.1.1, execa@npm:^5.1.1": - version: 5.1.1 - resolution: "execa@npm:5.1.1" - dependencies: - cross-spawn: ^7.0.3 - get-stream: ^6.0.0 - human-signals: ^2.1.0 - is-stream: ^2.0.0 - merge-stream: ^2.0.0 - npm-run-path: ^4.0.1 - onetime: ^5.1.2 - signal-exit: ^3.0.3 - strip-final-newline: ^2.0.0 - checksum: fba9022c8c8c15ed862847e94c252b3d946036d7547af310e344a527e59021fd8b6bb0723883ea87044dc4f0201f949046993124a42ccb0855cae5bf8c786343 - languageName: node - linkType: hard - -"execa@npm:^7.0.0": - version: 7.2.0 - resolution: "execa@npm:7.2.0" - dependencies: - cross-spawn: ^7.0.3 - get-stream: ^6.0.1 - human-signals: ^4.3.0 - is-stream: ^3.0.0 - merge-stream: ^2.0.0 - npm-run-path: ^5.1.0 - onetime: ^6.0.0 - signal-exit: ^3.0.7 - strip-final-newline: ^3.0.0 - checksum: 14fd17ba0ca8c87b277584d93b1d9fc24f2a65e5152b31d5eb159a3b814854283eaae5f51efa9525e304447e2f757c691877f7adff8fde5746aae67eb1edd1cc - languageName: node - linkType: hard - -"exit-hook@npm:2.2.1": - version: 2.2.1 - resolution: "exit-hook@npm:2.2.1" - checksum: 1aa8359b6c5590a012d6cadf9cd337d227291bfcaa8970dc585d73dffef0582af34ed8ac56f6164f8979979fb417cff1eb49f03cdfd782f9332a30c773f0ada0 - languageName: node - linkType: hard - -"exponential-backoff@npm:^3.1.1": - version: 3.1.1 - resolution: "exponential-backoff@npm:3.1.1" - checksum: 3d21519a4f8207c99f7457287291316306255a328770d320b401114ec8481986e4e467e854cb9914dd965e0a1ca810a23ccb559c642c88f4c7f55c55778a9b48 - languageName: node - linkType: hard - -"express@npm:^4.17.1": - version: 4.18.2 - resolution: "express@npm:4.18.2" - dependencies: - accepts: ~1.3.8 - array-flatten: 1.1.1 - body-parser: 1.20.1 - content-disposition: 0.5.4 - content-type: ~1.0.4 - cookie: 0.5.0 - cookie-signature: 1.0.6 - debug: 2.6.9 - depd: 2.0.0 - encodeurl: ~1.0.2 - escape-html: ~1.0.3 - etag: ~1.8.1 - finalhandler: 1.2.0 - fresh: 0.5.2 - http-errors: 2.0.0 - merge-descriptors: 1.0.1 - methods: ~1.1.2 - on-finished: 2.4.1 - parseurl: ~1.3.3 - path-to-regexp: 0.1.7 - proxy-addr: ~2.0.7 - qs: 6.11.0 - range-parser: ~1.2.1 - safe-buffer: 5.2.1 - send: 0.18.0 - serve-static: 1.15.0 - setprototypeof: 1.2.0 - statuses: 2.0.1 - type-is: ~1.6.18 - utils-merge: 1.0.1 - vary: ~1.1.2 - checksum: 3c4b9b076879442f6b968fe53d85d9f1eeacbb4f4c41e5f16cc36d77ce39a2b0d81b3f250514982110d815b2f7173f5561367f9110fcc541f9371948e8c8b037 - languageName: node - linkType: hard - -"extend@npm:^3.0.0": - version: 3.0.2 - resolution: "extend@npm:3.0.2" - checksum: a50a8309ca65ea5d426382ff09f33586527882cf532931cb08ca786ea3146c0553310bda688710ff61d7668eba9f96b923fe1420cdf56a2c3eaf30fcab87b515 - languageName: node - linkType: hard - -"external-editor@npm:^3.0.3": - version: 3.1.0 - resolution: "external-editor@npm:3.1.0" - dependencies: - chardet: ^0.7.0 - iconv-lite: ^0.4.24 - tmp: ^0.0.33 - checksum: 1c2a616a73f1b3435ce04030261bed0e22d4737e14b090bb48e58865da92529c9f2b05b893de650738d55e692d071819b45e1669259b2b354bc3154d27a698c7 - languageName: node - linkType: hard - -"eyes@npm:^0.1.8": - version: 0.1.8 - resolution: "eyes@npm:0.1.8" - checksum: c31703a92bf36ba75ee8d379ee7985c24ee6149f3a6175f44cec7a05b178c38bce9836d3ca48c9acb0329a960ac2c4b2ead4e60cdd4fe6e8c92cad7cd6913687 - languageName: node - linkType: hard - -"fast-deep-equal@npm:^3.1.1, fast-deep-equal@npm:^3.1.3": - version: 3.1.3 - resolution: "fast-deep-equal@npm:3.1.3" - checksum: e21a9d8d84f53493b6aa15efc9cfd53dd5b714a1f23f67fb5dc8f574af80df889b3bce25dc081887c6d25457cce704e636395333abad896ccdec03abaf1f3f9d - languageName: node - linkType: hard - -"fast-diff@npm:^1.1.2": - version: 1.3.0 - resolution: "fast-diff@npm:1.3.0" - checksum: d22d371b994fdc8cce9ff510d7b8dc4da70ac327bcba20df607dd5b9cae9f908f4d1028f5fe467650f058d1e7270235ae0b8230809a262b4df587a3b3aa216c3 - languageName: node - linkType: hard - -"fast-glob@npm:3.2.11": - version: 3.2.11 - resolution: "fast-glob@npm:3.2.11" - dependencies: - "@nodelib/fs.stat": ^2.0.2 - "@nodelib/fs.walk": ^1.2.3 - glob-parent: ^5.1.2 - merge2: ^1.3.0 - micromatch: ^4.0.4 - checksum: f473105324a7780a20c06de842e15ddbb41d3cb7e71d1e4fe6e8373204f22245d54f5ab9e2061e6a1c613047345954d29b022e0e76f5c28b1df9858179a0e6d7 - languageName: node - linkType: hard - -"fast-glob@npm:^3.0.3, fast-glob@npm:^3.2.7, fast-glob@npm:^3.2.9, fast-glob@npm:^3.3.0, fast-glob@npm:^3.3.1": - version: 3.3.2 - resolution: "fast-glob@npm:3.3.2" - dependencies: - "@nodelib/fs.stat": ^2.0.2 - "@nodelib/fs.walk": ^1.2.3 - glob-parent: ^5.1.2 - merge2: ^1.3.0 - micromatch: ^4.0.4 - checksum: 900e4979f4dbc3313840078419245621259f349950411ca2fa445a2f9a1a6d98c3b5e7e0660c5ccd563aa61abe133a21765c6c0dec8e57da1ba71d8000b05ec1 - languageName: node - linkType: hard - -"fast-json-stable-stringify@npm:^2.0.0": - version: 2.1.0 - resolution: "fast-json-stable-stringify@npm:2.1.0" - checksum: b191531e36c607977e5b1c47811158733c34ccb3bfde92c44798929e9b4154884378536d26ad90dfecd32e1ffc09c545d23535ad91b3161a27ddbb8ebe0cbecb - languageName: node - linkType: hard - -"fast-levenshtein@npm:^2.0.6, fast-levenshtein@npm:~2.0.6": - version: 2.0.6 - resolution: "fast-levenshtein@npm:2.0.6" - checksum: 92cfec0a8dfafd9c7a15fba8f2cc29cd0b62b85f056d99ce448bbcd9f708e18ab2764bda4dd5158364f4145a7c72788538994f0d1787b956ef0d1062b0f7c24c - languageName: node - linkType: hard - -"fast-redact@npm:^3.0.0": - version: 3.3.0 - resolution: "fast-redact@npm:3.3.0" - checksum: 3f7becc70a5a2662a9cbfdc52a4291594f62ae998806ee00315af307f32d9559dbf512146259a22739ee34401950ef47598c1f4777d33b0ed5027203d67f549c - languageName: node - linkType: hard - -"fast-safe-stringify@npm:^2.0.6": - version: 2.1.1 - resolution: "fast-safe-stringify@npm:2.1.1" - checksum: a851cbddc451745662f8f00ddb622d6766f9bd97642dabfd9a405fb0d646d69fc0b9a1243cbf67f5f18a39f40f6fa821737651ff1bceeba06c9992ca2dc5bd3d - languageName: node - linkType: hard - -"fast-stable-stringify@npm:^1.0.0": - version: 1.0.0 - resolution: "fast-stable-stringify@npm:1.0.0" - checksum: ef1203d246a7e8ac15e2bfbda0a89fa375947bccf9f7910be0ea759856dbe8ea5024a0d8cc2cceabe18a9cb67e95927b78bb6173a3ae37ec55a518cf36e5244b - languageName: node - linkType: hard - -"fastparse@npm:^1.1.2": - version: 1.1.2 - resolution: "fastparse@npm:1.1.2" - checksum: c4d199809dc4e8acafeb786be49481cc9144de296e2d54df4540ccfd868d0df73afc649aba70a748925eb32bbc4208b723d6288adf92382275031a8c7e10c0aa - languageName: node - linkType: hard - -"fastq@npm:^1.6.0": - version: 1.15.0 - resolution: "fastq@npm:1.15.0" - dependencies: - reusify: ^1.0.4 - checksum: 0170e6bfcd5d57a70412440b8ef600da6de3b2a6c5966aeaf0a852d542daff506a0ee92d6de7679d1de82e644bce69d7a574a6c93f0b03964b5337eed75ada1a - languageName: node - linkType: hard - -"fault@npm:^2.0.0": - version: 2.0.1 - resolution: "fault@npm:2.0.1" - dependencies: - format: ^0.2.0 - checksum: c9b30f47d95769177130a9409976a899ed31eb598450fbad5b0d39f2f5f56d5f4a9ff9257e0bee8407cb0fc3ce37165657888c6aa6d78472e403893104329b72 - languageName: node - linkType: hard - -"figures@npm:^3.0.0": - version: 3.2.0 - resolution: "figures@npm:3.2.0" - dependencies: - escape-string-regexp: ^1.0.5 - checksum: 85a6ad29e9aca80b49b817e7c89ecc4716ff14e3779d9835af554db91bac41c0f289c418923519392a1e582b4d10482ad282021330cd045bb7b80c84152f2a2b - languageName: node - linkType: hard - -"file-entry-cache@npm:^6.0.1": - version: 6.0.1 - resolution: "file-entry-cache@npm:6.0.1" - dependencies: - flat-cache: ^3.0.4 - checksum: f49701feaa6314c8127c3c2f6173cfefff17612f5ed2daaafc6da13b5c91fd43e3b2a58fd0d63f9f94478a501b167615931e7200e31485e320f74a33885a9c74 - languageName: node - linkType: hard - -"file-uri-to-path@npm:1.0.0": - version: 1.0.0 - resolution: "file-uri-to-path@npm:1.0.0" - checksum: b648580bdd893a008c92c7ecc96c3ee57a5e7b6c4c18a9a09b44fb5d36d79146f8e442578bc0e173dc027adf3987e254ba1dfd6e3ec998b7c282873010502144 - languageName: node - linkType: hard - -"file-uri-to-path@npm:2": - version: 2.0.0 - resolution: "file-uri-to-path@npm:2.0.0" - checksum: 4a71a99ddaa6ae7ae7bffe2948c34da59982ed465d930a0af9cb59fcc10fcd93366cc356ec3337c18373fde5df7ac52afda4558f155febd1799d135552207edb - languageName: node - linkType: hard - -"fill-range@npm:^7.0.1": - version: 7.0.1 - resolution: "fill-range@npm:7.0.1" - dependencies: - to-regex-range: ^5.0.1 - checksum: cc283f4e65b504259e64fd969bcf4def4eb08d85565e906b7d36516e87819db52029a76b6363d0f02d0d532f0033c9603b9e2d943d56ee3b0d4f7ad3328ff917 - languageName: node - linkType: hard - -"filter-obj@npm:^1.1.0": - version: 1.1.0 - resolution: "filter-obj@npm:1.1.0" - checksum: cf2104a7c45ff48e7f505b78a3991c8f7f30f28bd8106ef582721f321f1c6277f7751aacd5d83026cb079d9d5091082f588d14a72e7c5d720ece79118fa61e10 - languageName: node - linkType: hard - -"finalhandler@npm:1.2.0": - version: 1.2.0 - resolution: "finalhandler@npm:1.2.0" - dependencies: - debug: 2.6.9 - encodeurl: ~1.0.2 - escape-html: ~1.0.3 - on-finished: 2.4.1 - parseurl: ~1.3.3 - statuses: 2.0.1 - unpipe: ~1.0.0 - checksum: 92effbfd32e22a7dff2994acedbd9bcc3aa646a3e919ea6a53238090e87097f8ef07cced90aa2cc421abdf993aefbdd5b00104d55c7c5479a8d00ed105b45716 - languageName: node - linkType: hard - -"find-up@npm:^4.1.0": - version: 4.1.0 - resolution: "find-up@npm:4.1.0" - dependencies: - locate-path: ^5.0.0 - path-exists: ^4.0.0 - checksum: 4c172680e8f8c1f78839486e14a43ef82e9decd0e74145f40707cc42e7420506d5ec92d9a11c22bd2c48fb0c384ea05dd30e10dd152fefeec6f2f75282a8b844 - languageName: node - linkType: hard - -"find-up@npm:^5.0.0": - version: 5.0.0 - resolution: "find-up@npm:5.0.0" - dependencies: - locate-path: ^6.0.0 - path-exists: ^4.0.0 - checksum: 07955e357348f34660bde7920783204ff5a26ac2cafcaa28bace494027158a97b9f56faaf2d89a6106211a8174db650dd9f503f9c0d526b1202d5554a00b9095 - languageName: node - linkType: hard - -"flat-cache@npm:^3.0.4": - version: 3.2.0 - resolution: "flat-cache@npm:3.2.0" - dependencies: - flatted: ^3.2.9 - keyv: ^4.5.3 - rimraf: ^3.0.2 - checksum: e7e0f59801e288b54bee5cb9681e9ee21ee28ef309f886b312c9d08415b79fc0f24ac842f84356ce80f47d6a53de62197ce0e6e148dc42d5db005992e2a756ec - languageName: node - linkType: hard - -"flatted@npm:^3.2.9": - version: 3.2.9 - resolution: "flatted@npm:3.2.9" - checksum: f14167fbe26a9d20f6fca8d998e8f1f41df72c8e81f9f2c9d61ed2bea058248f5e1cbd05e7f88c0e5087a6a0b822a1e5e2b446e879f3cfbe0b07ba2d7f80b026 - languageName: node - linkType: hard - -"for-each@npm:^0.3.3": - version: 0.3.3 - resolution: "for-each@npm:0.3.3" - dependencies: - is-callable: ^1.1.3 - checksum: 6c48ff2bc63362319c65e2edca4a8e1e3483a2fabc72fbe7feaf8c73db94fc7861bd53bc02c8a66a0c1dd709da6b04eec42e0abdd6b40ce47305ae92a25e5d28 - languageName: node - linkType: hard - -"foreground-child@npm:^3.1.0": - version: 3.1.1 - resolution: "foreground-child@npm:3.1.1" - dependencies: - cross-spawn: ^7.0.0 - signal-exit: ^4.0.1 - checksum: 139d270bc82dc9e6f8bc045fe2aae4001dc2472157044fdfad376d0a3457f77857fa883c1c8b21b491c6caade9a926a4bed3d3d2e8d3c9202b151a4cbbd0bcd5 - languageName: node - linkType: hard - -"format@npm:^0.2.0": - version: 0.2.2 - resolution: "format@npm:0.2.2" - checksum: 646a60e1336250d802509cf24fb801e43bd4a70a07510c816fa133aa42cdbc9c21e66e9cc0801bb183c5b031c9d68be62e7fbb6877756e52357850f92aa28799 - languageName: node - linkType: hard - -"forwarded@npm:0.2.0": - version: 0.2.0 - resolution: "forwarded@npm:0.2.0" - checksum: fd27e2394d8887ebd16a66ffc889dc983fbbd797d5d3f01087c020283c0f019a7d05ee85669383d8e0d216b116d720fc0cef2f6e9b7eb9f4c90c6e0bc7fd28e6 - languageName: node - linkType: hard - -"fraction.js@npm:^4.3.6": - version: 4.3.7 - resolution: "fraction.js@npm:4.3.7" - checksum: e1553ae3f08e3ba0e8c06e43a3ab20b319966dfb7ddb96fd9b5d0ee11a66571af7f993229c88ebbb0d4a816eb813a24ed48207b140d442a8f76f33763b8d1f3f - languageName: node - linkType: hard - -"fresh@npm:0.5.2": - version: 0.5.2 - resolution: "fresh@npm:0.5.2" - checksum: 13ea8b08f91e669a64e3ba3a20eb79d7ca5379a81f1ff7f4310d54e2320645503cc0c78daedc93dfb6191287295f6479544a649c64d8e41a1c0fb0c221552346 - languageName: node - linkType: hard - -"fs-constants@npm:^1.0.0": - version: 1.0.0 - resolution: "fs-constants@npm:1.0.0" - checksum: 18f5b718371816155849475ac36c7d0b24d39a11d91348cfcb308b4494824413e03572c403c86d3a260e049465518c4f0d5bd00f0371cdfcad6d4f30a85b350d - languageName: node - linkType: hard - -"fs-extra@npm:11.1.0": - version: 11.1.0 - resolution: "fs-extra@npm:11.1.0" - dependencies: - graceful-fs: ^4.2.0 - jsonfile: ^6.0.1 - universalify: ^2.0.0 - checksum: 5ca476103fa1f5ff4a9b3c4f331548f8a3c1881edaae323a4415d3153b5dc11dc6a981c8d1dd93eec8367ceee27b53f8bd27eecbbf66ffcdd04927510c171e7f - languageName: node - linkType: hard - -"fs-extra@npm:^10.0.0": - version: 10.1.0 - resolution: "fs-extra@npm:10.1.0" - dependencies: - graceful-fs: ^4.2.0 - jsonfile: ^6.0.1 - universalify: ^2.0.0 - checksum: dc94ab37096f813cc3ca12f0f1b5ad6744dfed9ed21e953d72530d103cea193c2f81584a39e9dee1bea36de5ee66805678c0dddc048e8af1427ac19c00fffc50 - languageName: node - linkType: hard - -"fs-extra@npm:^8.1.0": - version: 8.1.0 - resolution: "fs-extra@npm:8.1.0" - dependencies: - graceful-fs: ^4.2.0 - jsonfile: ^4.0.0 - universalify: ^0.1.0 - checksum: bf44f0e6cea59d5ce071bba4c43ca76d216f89e402dc6285c128abc0902e9b8525135aa808adad72c9d5d218e9f4bcc63962815529ff2f684ad532172a284880 +"esbuild-darwin-64@npm:0.14.47": + version: 0.14.47 + resolution: "esbuild-darwin-64@npm:0.14.47" + conditions: os=darwin & cpu=x64 languageName: node linkType: hard -"fs-minipass@npm:^2.0.0": - version: 2.1.0 - resolution: "fs-minipass@npm:2.1.0" - dependencies: - minipass: ^3.0.0 - checksum: 1b8d128dae2ac6cc94230cc5ead341ba3e0efaef82dab46a33d171c044caaa6ca001364178d42069b2809c35a1c3c35079a32107c770e9ffab3901b59af8c8b1 +"esbuild-darwin-arm64@npm:0.14.47": + version: 0.14.47 + resolution: "esbuild-darwin-arm64@npm:0.14.47" + conditions: os=darwin & cpu=arm64 languageName: node linkType: hard -"fs-minipass@npm:^3.0.0": - version: 3.0.3 - resolution: "fs-minipass@npm:3.0.3" - dependencies: - minipass: ^7.0.3 - checksum: 8722a41109130851d979222d3ec88aabaceeaaf8f57b2a8f744ef8bd2d1ce95453b04a61daa0078822bc5cd21e008814f06fe6586f56fef511e71b8d2394d802 +"esbuild-freebsd-64@npm:0.14.47": + version: 0.14.47 + resolution: "esbuild-freebsd-64@npm:0.14.47" + conditions: os=freebsd & cpu=x64 languageName: node linkType: hard -"fs.realpath@npm:^1.0.0": - version: 1.0.0 - resolution: "fs.realpath@npm:1.0.0" - checksum: 99ddea01a7e75aa276c250a04eedeffe5662bce66c65c07164ad6264f9de18fb21be9433ead460e54cff20e31721c811f4fb5d70591799df5f85dce6d6746fd0 +"esbuild-freebsd-arm64@npm:0.14.47": + version: 0.14.47 + resolution: "esbuild-freebsd-arm64@npm:0.14.47" + conditions: os=freebsd & cpu=arm64 languageName: node linkType: hard -"fsevents@npm:~2.3.2": - version: 2.3.3 - resolution: "fsevents@npm:2.3.3" - dependencies: - node-gyp: latest - checksum: 11e6ea6fea15e42461fc55b4b0e4a0a3c654faa567f1877dbd353f39156f69def97a69936d1746619d656c4b93de2238bf731f6085a03a50cabf287c9d024317 - conditions: os=darwin +"esbuild-linux-32@npm:0.14.47": + version: 0.14.47 + resolution: "esbuild-linux-32@npm:0.14.47" + conditions: os=linux & cpu=ia32 languageName: node linkType: hard -"fsevents@patch:fsevents@~2.3.2#~builtin": - version: 2.3.3 - resolution: "fsevents@patch:fsevents@npm%3A2.3.3#~builtin::version=2.3.3&hash=18f3a7" - dependencies: - node-gyp: latest - conditions: os=darwin +"esbuild-linux-64@npm:0.14.47": + version: 0.14.47 + resolution: "esbuild-linux-64@npm:0.14.47" + conditions: os=linux & cpu=x64 languageName: node linkType: hard -"ftp@npm:^0.3.10": - version: 0.3.10 - resolution: "ftp@npm:0.3.10" - dependencies: - readable-stream: 1.1.x - xregexp: 2.0.0 - checksum: ddd313c1d44eb7429f3a7d77a0155dc8fe86a4c64dca58f395632333ce4b4e74c61413c6e0ef66ea3f3d32d905952fbb6d028c7117d522f793eb1fa282e17357 +"esbuild-linux-arm64@npm:0.14.47": + version: 0.14.47 + resolution: "esbuild-linux-arm64@npm:0.14.47" + conditions: os=linux & cpu=arm64 languageName: node linkType: hard -"function-bind@npm:^1.1.1, function-bind@npm:^1.1.2": - version: 1.1.2 - resolution: "function-bind@npm:1.1.2" - checksum: 2b0ff4ce708d99715ad14a6d1f894e2a83242e4a52ccfcefaee5e40050562e5f6dafc1adbb4ce2d4ab47279a45dc736ab91ea5042d843c3c092820dfe032efb1 +"esbuild-linux-arm@npm:0.14.47": + version: 0.14.47 + resolution: "esbuild-linux-arm@npm:0.14.47" + conditions: os=linux & cpu=arm languageName: node linkType: hard -"function.prototype.name@npm:^1.1.5, function.prototype.name@npm:^1.1.6": - version: 1.1.6 - resolution: "function.prototype.name@npm:1.1.6" - dependencies: - call-bind: ^1.0.2 - define-properties: ^1.2.0 - es-abstract: ^1.22.1 - functions-have-names: ^1.2.3 - checksum: 7a3f9bd98adab09a07f6e1f03da03d3f7c26abbdeaeee15223f6c04a9fb5674792bdf5e689dac19b97ac71de6aad2027ba3048a9b883aa1b3173eed6ab07f479 +"esbuild-linux-mips64le@npm:0.14.47": + version: 0.14.47 + resolution: "esbuild-linux-mips64le@npm:0.14.47" + conditions: os=linux & cpu=mips64el languageName: node linkType: hard -"functions-have-names@npm:^1.2.3": - version: 1.2.3 - resolution: "functions-have-names@npm:1.2.3" - checksum: c3f1f5ba20f4e962efb71344ce0a40722163e85bee2101ce25f88214e78182d2d2476aa85ef37950c579eb6cf6ee811c17b3101bb84004bb75655f3e33f3fdb5 +"esbuild-linux-ppc64le@npm:0.14.47": + version: 0.14.47 + resolution: "esbuild-linux-ppc64le@npm:0.14.47" + conditions: os=linux & cpu=ppc64 languageName: node linkType: hard -"gauge@npm:^3.0.0": - version: 3.0.2 - resolution: "gauge@npm:3.0.2" - dependencies: - aproba: ^1.0.3 || ^2.0.0 - color-support: ^1.1.2 - console-control-strings: ^1.0.0 - has-unicode: ^2.0.1 - object-assign: ^4.1.1 - signal-exit: ^3.0.0 - string-width: ^4.2.3 - strip-ansi: ^6.0.1 - wide-align: ^1.1.2 - checksum: 81296c00c7410cdd48f997800155fbead4f32e4f82109be0719c63edc8560e6579946cc8abd04205297640691ec26d21b578837fd13a4e96288ab4b40b1dc3e9 +"esbuild-linux-riscv64@npm:0.14.47": + version: 0.14.47 + resolution: "esbuild-linux-riscv64@npm:0.14.47" + conditions: os=linux & cpu=riscv64 languageName: node linkType: hard -"generic-names@npm:^4.0.0": - version: 4.0.0 - resolution: "generic-names@npm:4.0.0" - dependencies: - loader-utils: ^3.2.0 - checksum: 8dabd2505164191501b75f2861b5e1194458a344ae2a7c9776bdd72d1f50b248dff737bcdf118fff677275edb3632f2d10662e6ac122dd7b245c5baa8d303270 +"esbuild-linux-s390x@npm:0.14.47": + version: 0.14.47 + resolution: "esbuild-linux-s390x@npm:0.14.47" + conditions: os=linux & cpu=s390x languageName: node linkType: hard -"gensync@npm:^1.0.0-beta.2": - version: 1.0.0-beta.2 - resolution: "gensync@npm:1.0.0-beta.2" - checksum: a7437e58c6be12aa6c90f7730eac7fa9833dc78872b4ad2963d2031b00a3367a93f98aec75f9aaac7220848e4026d67a8655e870b24f20a543d103c0d65952ec +"esbuild-netbsd-64@npm:0.14.47": + version: 0.14.47 + resolution: "esbuild-netbsd-64@npm:0.14.47" + conditions: os=netbsd & cpu=x64 languageName: node linkType: hard -"get-caller-file@npm:^2.0.1": - version: 2.0.5 - resolution: "get-caller-file@npm:2.0.5" - checksum: b9769a836d2a98c3ee734a88ba712e62703f1df31b94b784762c433c27a386dd6029ff55c2a920c392e33657d80191edbf18c61487e198844844516f843496b9 +"esbuild-openbsd-64@npm:0.14.47": + version: 0.14.47 + resolution: "esbuild-openbsd-64@npm:0.14.47" + conditions: os=openbsd & cpu=x64 languageName: node linkType: hard -"get-intrinsic@npm:^1.0.2, get-intrinsic@npm:^1.1.1, get-intrinsic@npm:^1.1.3, get-intrinsic@npm:^1.2.0, get-intrinsic@npm:^1.2.1, get-intrinsic@npm:^1.2.2": - version: 1.2.2 - resolution: "get-intrinsic@npm:1.2.2" - dependencies: - function-bind: ^1.1.2 - has-proto: ^1.0.1 - has-symbols: ^1.0.3 - hasown: ^2.0.0 - checksum: 447ff0724df26829908dc033b62732359596fcf66027bc131ab37984afb33842d9cd458fd6cecadfe7eac22fd8a54b349799ed334cf2726025c921c7250e7417 +"esbuild-sunos-64@npm:0.14.47": + version: 0.14.47 + resolution: "esbuild-sunos-64@npm:0.14.47" + conditions: os=sunos & cpu=x64 languageName: node linkType: hard -"get-nonce@npm:^1.0.0": - version: 1.0.1 - resolution: "get-nonce@npm:1.0.1" - checksum: e2614e43b4694c78277bb61b0f04583d45786881289285c73770b07ded246a98be7e1f78b940c80cbe6f2b07f55f0b724e6db6fd6f1bcbd1e8bdac16521074ed +"esbuild-windows-32@npm:0.14.47": + version: 0.14.47 + resolution: "esbuild-windows-32@npm:0.14.47" + conditions: os=win32 & cpu=ia32 languageName: node linkType: hard -"get-port-please@npm:^3.1.1": - version: 3.1.1 - resolution: "get-port-please@npm:3.1.1" - checksum: e2b0b3822e5a5a37994a0bd1c708eb220ca47fd4b29adbc6ba076fb378d4706c07eba4d382a8283f6534e870f9081a58f923a9f873f7d1f298f5fae386470211 +"esbuild-windows-64@npm:0.14.47": + version: 0.14.47 + resolution: "esbuild-windows-64@npm:0.14.47" + conditions: os=win32 & cpu=x64 languageName: node linkType: hard -"get-port@npm:^5.1.1": - version: 5.1.1 - resolution: "get-port@npm:5.1.1" - checksum: 0162663ffe5c09e748cd79d97b74cd70e5a5c84b760a475ce5767b357fb2a57cb821cee412d646aa8a156ed39b78aab88974eddaa9e5ee926173c036c0713787 +"esbuild-windows-arm64@npm:0.14.47": + version: 0.14.47 + resolution: "esbuild-windows-arm64@npm:0.14.47" + conditions: os=win32 & cpu=arm64 languageName: node linkType: hard -"get-stream@npm:^5.1.0": - version: 5.2.0 - resolution: "get-stream@npm:5.2.0" +"esbuild@npm:0.14.47": + version: 0.14.47 + resolution: "esbuild@npm:0.14.47" dependencies: - pump: ^3.0.0 - checksum: 8bc1a23174a06b2b4ce600df38d6c98d2ef6d84e020c1ddad632ad75bac4e092eeb40e4c09e0761c35fc2dbc5e7fff5dab5e763a383582c4a167dd69a905bd12 + esbuild-android-64: 0.14.47 + esbuild-android-arm64: 0.14.47 + esbuild-darwin-64: 0.14.47 + esbuild-darwin-arm64: 0.14.47 + esbuild-freebsd-64: 0.14.47 + esbuild-freebsd-arm64: 0.14.47 + esbuild-linux-32: 0.14.47 + esbuild-linux-64: 0.14.47 + esbuild-linux-arm: 0.14.47 + esbuild-linux-arm64: 0.14.47 + esbuild-linux-mips64le: 0.14.47 + esbuild-linux-ppc64le: 0.14.47 + esbuild-linux-riscv64: 0.14.47 + esbuild-linux-s390x: 0.14.47 + esbuild-netbsd-64: 0.14.47 + esbuild-openbsd-64: 0.14.47 + esbuild-sunos-64: 0.14.47 + esbuild-windows-32: 0.14.47 + esbuild-windows-64: 0.14.47 + esbuild-windows-arm64: 0.14.47 + dependenciesMeta: + esbuild-android-64: + optional: true + esbuild-android-arm64: + optional: true + esbuild-darwin-64: + optional: true + esbuild-darwin-arm64: + optional: true + esbuild-freebsd-64: + optional: true + esbuild-freebsd-arm64: + optional: true + esbuild-linux-32: + optional: true + esbuild-linux-64: + optional: true + esbuild-linux-arm: + optional: true + esbuild-linux-arm64: + optional: true + esbuild-linux-mips64le: + optional: true + esbuild-linux-ppc64le: + optional: true + esbuild-linux-riscv64: + optional: true + esbuild-linux-s390x: + optional: true + esbuild-netbsd-64: + optional: true + esbuild-openbsd-64: + optional: true + esbuild-sunos-64: + optional: true + esbuild-windows-32: + optional: true + esbuild-windows-64: + optional: true + esbuild-windows-arm64: + optional: true + bin: + esbuild: bin/esbuild + checksum: 77a8bff8c3fe52dc9d2823448843b0f53c9a9f3701e3637a54e396270c9ca04cc46a4b08ef86cbaa8d202854e02c790f61683bfa75ebff540b1e24414f536e91 languageName: node linkType: hard -"get-stream@npm:^6.0.0, get-stream@npm:^6.0.1": - version: 6.0.1 - resolution: "get-stream@npm:6.0.1" - checksum: e04ecece32c92eebf5b8c940f51468cd53554dcbb0ea725b2748be583c9523d00128137966afce410b9b051eb2ef16d657cd2b120ca8edafcf5a65e81af63cad +"escalade@npm:^3.1.1": + version: 3.1.1 + resolution: "escalade@npm:3.1.1" + checksum: a3e2a99f07acb74b3ad4989c48ca0c3140f69f923e56d0cba0526240ee470b91010f9d39001f2a4a313841d237ede70a729e92125191ba5d21e74b106800b133 languageName: node linkType: hard -"get-symbol-description@npm:^1.0.0": - version: 1.0.0 - resolution: "get-symbol-description@npm:1.0.0" - dependencies: - call-bind: ^1.0.2 - get-intrinsic: ^1.1.1 - checksum: 9ceff8fe968f9270a37a1f73bf3f1f7bda69ca80f4f80850670e0e7b9444ff99323f7ac52f96567f8b5f5fbe7ac717a0d81d3407c7313e82810c6199446a5247 +"escape-string-regexp@npm:^1.0.5": + version: 1.0.5 + resolution: "escape-string-regexp@npm:1.0.5" + checksum: 6092fda75c63b110c706b6a9bfde8a612ad595b628f0bd2147eea1d3406723020810e591effc7db1da91d80a71a737a313567c5abb3813e8d9c71f4aa595b410 languageName: node linkType: hard -"get-tsconfig@npm:^4.5.0": - version: 4.7.2 - resolution: "get-tsconfig@npm:4.7.2" - dependencies: - resolve-pkg-maps: ^1.0.0 - checksum: 172358903250eff0103943f816e8a4e51d29b8e5449058bdf7266714a908a48239f6884308bd3a6ff28b09f692b9533dbebfd183ab63e4e14f073cda91f1bca9 +"escape-string-regexp@npm:^4.0.0": + version: 4.0.0 + resolution: "escape-string-regexp@npm:4.0.0" + checksum: 98b48897d93060f2322108bf29db0feba7dd774be96cd069458d1453347b25ce8682ecc39859d4bca2203cc0ab19c237bcc71755eff49a0f8d90beadeeba5cc5 languageName: node linkType: hard -"get-uri@npm:3": - version: 3.0.2 - resolution: "get-uri@npm:3.0.2" +"eslint-config-next@npm:~14.0.4": + version: 14.0.4 + resolution: "eslint-config-next@npm:14.0.4" dependencies: - "@tootallnate/once": 1 - data-uri-to-buffer: 3 - debug: 4 - file-uri-to-path: 2 - fs-extra: ^8.1.0 - ftp: ^0.3.10 - checksum: 5325b2906b08ca37529ca421cf52bc50376e75c6a945e0a8064e3f76b4bb67b8ab1e316a2fc7a307c8c606ab36d030720f39a57c97b027ff1134335e12102946 + "@next/eslint-plugin-next": 14.0.4 + "@rushstack/eslint-patch": ^1.3.3 + "@typescript-eslint/parser": ^5.4.2 || ^6.0.0 + eslint-import-resolver-node: ^0.3.6 + eslint-import-resolver-typescript: ^3.5.2 + eslint-plugin-import: ^2.28.1 + eslint-plugin-jsx-a11y: ^6.7.1 + eslint-plugin-react: ^7.33.2 + eslint-plugin-react-hooks: ^4.5.0 || 5.0.0-canary-7118f5dd7-20230705 + peerDependencies: + eslint: ^7.23.0 || ^8.0.0 + typescript: ">=3.3.1" + peerDependenciesMeta: + typescript: + optional: true + checksum: 6abb85c2dde8e2a49042d31e85ba6ebccbfd3f6576f470a8df6842afebb1ec14c89ae485cfb9c490df830c7ada55a8bcf7547936def13c5e483f4b882a281cab languageName: node linkType: hard -"git-hooks-list@npm:1.0.3": - version: 1.0.3 - resolution: "git-hooks-list@npm:1.0.3" - checksum: a1dd03d39c1d727ba08a35dbdbdcc6e96de8c4170c942dc95bf787ca6e34998d39fb5295a00242b58a3d265de0b69a0686d0cf583baa6b7830f268542c4576b9 +"eslint-config-prettier@npm:~8.5.0": + version: 8.5.0 + resolution: "eslint-config-prettier@npm:8.5.0" + peerDependencies: + eslint: ">=7.0.0" + bin: + eslint-config-prettier: bin/cli.js + checksum: 0d0f5c32e7a0ad91249467ce71ca92394ccd343178277d318baf32063b79ea90216f4c81d1065d60f96366fdc60f151d4d68ae7811a58bd37228b84c2083f893 languageName: node linkType: hard -"glob-parent@npm:^5.1.2, glob-parent@npm:~5.1.2": - version: 5.1.2 - resolution: "glob-parent@npm:5.1.2" +"eslint-import-resolver-node@npm:^0.3.6, eslint-import-resolver-node@npm:^0.3.9": + version: 0.3.9 + resolution: "eslint-import-resolver-node@npm:0.3.9" dependencies: - is-glob: ^4.0.1 - checksum: f4f2bfe2425296e8a47e36864e4f42be38a996db40420fe434565e4480e3322f18eb37589617a98640c5dc8fdec1a387007ee18dbb1f3f5553409c34d17f425e + debug: ^3.2.7 + is-core-module: ^2.13.0 + resolve: ^1.22.4 + checksum: 439b91271236b452d478d0522a44482e8c8540bf9df9bd744062ebb89ab45727a3acd03366a6ba2bdbcde8f9f718bab7fe8db64688aca75acf37e04eafd25e22 languageName: node linkType: hard -"glob-parent@npm:^6.0.1, glob-parent@npm:^6.0.2": - version: 6.0.2 - resolution: "glob-parent@npm:6.0.2" +"eslint-import-resolver-typescript@npm:^3.5.2": + version: 3.6.1 + resolution: "eslint-import-resolver-typescript@npm:3.6.1" dependencies: + debug: ^4.3.4 + enhanced-resolve: ^5.12.0 + eslint-module-utils: ^2.7.4 + fast-glob: ^3.3.1 + get-tsconfig: ^4.5.0 + is-core-module: ^2.11.0 is-glob: ^4.0.3 - checksum: c13ee97978bef4f55106b71e66428eb1512e71a7466ba49025fc2aec59a5bfb0954d5abd58fc5ee6c9b076eef4e1f6d3375c2e964b88466ca390da4419a786a8 + peerDependencies: + eslint: "*" + eslint-plugin-import: "*" + checksum: 454fa0646533050fb57f13d27daf8c71f51b0bb9156d6a461290ccb8576d892209fcc6702a89553f3f5ea8e5b407395ca2e5de169a952c953685f1f7c46b4496 languageName: node linkType: hard -"glob@npm:7.1.6": - version: 7.1.6 - resolution: "glob@npm:7.1.6" +"eslint-module-utils@npm:^2.7.4, eslint-module-utils@npm:^2.8.0": + version: 2.8.0 + resolution: "eslint-module-utils@npm:2.8.0" dependencies: - fs.realpath: ^1.0.0 - inflight: ^1.0.4 - inherits: 2 - minimatch: ^3.0.4 - once: ^1.3.0 - path-is-absolute: ^1.0.0 - checksum: 351d549dd90553b87c2d3f90ce11aed9e1093c74130440e7ae0592e11bbcd2ce7f0ebb8ba6bfe63aaf9b62166a7f4c80cb84490ae5d78408bb2572bf7d4ee0a6 + debug: ^3.2.7 + peerDependenciesMeta: + eslint: + optional: true + checksum: 74c6dfea7641ebcfe174be61168541a11a14aa8d72e515f5f09af55cd0d0862686104b0524aa4b8e0ce66418a44aa38a94d2588743db5fd07a6b49ffd16921d2 languageName: node linkType: hard -"glob@npm:7.1.7": - version: 7.1.7 - resolution: "glob@npm:7.1.7" +"eslint-plugin-import@npm:^2.28.1": + version: 2.29.1 + resolution: "eslint-plugin-import@npm:2.29.1" dependencies: - fs.realpath: ^1.0.0 - inflight: ^1.0.4 - inherits: 2 - minimatch: ^3.0.4 - once: ^1.3.0 - path-is-absolute: ^1.0.0 - checksum: b61f48973bbdcf5159997b0874a2165db572b368b931135832599875919c237fc05c12984e38fe828e69aa8a921eb0e8a4997266211c517c9cfaae8a93988bb8 + array-includes: ^3.1.7 + array.prototype.findlastindex: ^1.2.3 + array.prototype.flat: ^1.3.2 + array.prototype.flatmap: ^1.3.2 + debug: ^3.2.7 + doctrine: ^2.1.0 + eslint-import-resolver-node: ^0.3.9 + eslint-module-utils: ^2.8.0 + hasown: ^2.0.0 + is-core-module: ^2.13.1 + is-glob: ^4.0.3 + minimatch: ^3.1.2 + object.fromentries: ^2.0.7 + object.groupby: ^1.0.1 + object.values: ^1.1.7 + semver: ^6.3.1 + tsconfig-paths: ^3.15.0 + peerDependencies: + eslint: ^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8 + checksum: e65159aef808136d26d029b71c8c6e4cb5c628e65e5de77f1eb4c13a379315ae55c9c3afa847f43f4ff9df7e54515c77ffc6489c6a6f81f7dd7359267577468c languageName: node linkType: hard -"glob@npm:^10.2.2, glob@npm:^10.3.10": - version: 10.3.10 - resolution: "glob@npm:10.3.10" +"eslint-plugin-jsx-a11y@npm:^6.7.1": + version: 6.8.0 + resolution: "eslint-plugin-jsx-a11y@npm:6.8.0" dependencies: - foreground-child: ^3.1.0 - jackspeak: ^2.3.5 - minimatch: ^9.0.1 - minipass: ^5.0.0 || ^6.0.2 || ^7.0.0 - path-scurry: ^1.10.1 - bin: - glob: dist/esm/bin.mjs - checksum: 4f2fe2511e157b5a3f525a54092169a5f92405f24d2aed3142f4411df328baca13059f4182f1db1bf933e2c69c0bd89e57ae87edd8950cba8c7ccbe84f721cf3 + "@babel/runtime": ^7.23.2 + aria-query: ^5.3.0 + array-includes: ^3.1.7 + array.prototype.flatmap: ^1.3.2 + ast-types-flow: ^0.0.8 + axe-core: =4.7.0 + axobject-query: ^3.2.1 + damerau-levenshtein: ^1.0.8 + emoji-regex: ^9.2.2 + es-iterator-helpers: ^1.0.15 + hasown: ^2.0.0 + jsx-ast-utils: ^3.3.5 + language-tags: ^1.0.9 + minimatch: ^3.1.2 + object.entries: ^1.1.7 + object.fromentries: ^2.0.7 + peerDependencies: + eslint: ^3 || ^4 || ^5 || ^6 || ^7 || ^8 + checksum: 3dec00e2a3089c4c61ac062e4196a70985fb7eda1fd67fe035363d92578debde92fdb8ed2e472321fc0d71e75f4a1e8888c6a3218c14dd93c8e8d19eb6f51554 languageName: node linkType: hard -"glob@npm:^7.1.3, glob@npm:^7.1.4": - version: 7.2.3 - resolution: "glob@npm:7.2.3" +"eslint-plugin-prettier@npm:~4.2.1": + version: 4.2.1 + resolution: "eslint-plugin-prettier@npm:4.2.1" dependencies: - fs.realpath: ^1.0.0 - inflight: ^1.0.4 - inherits: 2 - minimatch: ^3.1.1 - once: ^1.3.0 - path-is-absolute: ^1.0.0 - checksum: 29452e97b38fa704dabb1d1045350fb2467cf0277e155aa9ff7077e90ad81d1ea9d53d3ee63bd37c05b09a065e90f16aec4a65f5b8de401d1dac40bc5605d133 + prettier-linter-helpers: ^1.0.0 + peerDependencies: + eslint: ">=7.28.0" + prettier: ">=2.0.0" + peerDependenciesMeta: + eslint-config-prettier: + optional: true + checksum: b9e839d2334ad8ec7a5589c5cb0f219bded260839a857d7a486997f9870e95106aa59b8756ff3f37202085ebab658de382b0267cae44c3a7f0eb0bcc03a4f6d6 languageName: node linkType: hard -"globals@npm:^11.1.0": - version: 11.12.0 - resolution: "globals@npm:11.12.0" - checksum: 67051a45eca3db904aee189dfc7cd53c20c7d881679c93f6146ddd4c9f4ab2268e68a919df740d39c71f4445d2b38ee360fc234428baea1dbdfe68bbcb46979e +"eslint-plugin-react-hooks@npm:^4.5.0 || 5.0.0-canary-7118f5dd7-20230705": + version: 5.0.0-canary-7118f5dd7-20230705 + resolution: "eslint-plugin-react-hooks@npm:5.0.0-canary-7118f5dd7-20230705" + peerDependencies: + eslint: ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0 + checksum: 20e334e60bf5e56cf9f760598411847525c3ff826e6ae7757c8efdc60b33d47a97ddbe1b94ce95956ea9f7bbef37995b19c716be50bd44e6a1e789cba08b6224 languageName: node linkType: hard -"globals@npm:^13.15.0, globals@npm:^13.19.0": - version: 13.23.0 - resolution: "globals@npm:13.23.0" +"eslint-plugin-react@npm:^7.33.2": + version: 7.33.2 + resolution: "eslint-plugin-react@npm:7.33.2" dependencies: - type-fest: ^0.20.2 - checksum: 194c97cf8d1ef6ba59417234c2386549c4103b6e5f24b1ff1952de61a4753e5d2069435ba629de711a6480b1b1d114a98e2ab27f85e966d5a10c319c3bbd3dc3 + array-includes: ^3.1.6 + array.prototype.flatmap: ^1.3.1 + array.prototype.tosorted: ^1.1.1 + doctrine: ^2.1.0 + es-iterator-helpers: ^1.0.12 + estraverse: ^5.3.0 + jsx-ast-utils: ^2.4.1 || ^3.0.0 + minimatch: ^3.1.2 + object.entries: ^1.1.6 + object.fromentries: ^2.0.6 + object.hasown: ^1.1.2 + object.values: ^1.1.6 + prop-types: ^15.8.1 + resolve: ^2.0.0-next.4 + semver: ^6.3.1 + string.prototype.matchall: ^4.0.8 + peerDependencies: + eslint: ^3 || ^4 || ^5 || ^6 || ^7 || ^8 + checksum: b4c3d76390b0ae6b6f9fed78170604cc2c04b48e6778a637db339e8e3911ec9ef22510b0ae77c429698151d0f1b245f282177f384105b6830e7b29b9c9b26610 languageName: node linkType: hard -"globalthis@npm:^1.0.3": - version: 1.0.3 - resolution: "globalthis@npm:1.0.3" +"eslint-scope@npm:^5.1.1": + version: 5.1.1 + resolution: "eslint-scope@npm:5.1.1" dependencies: - define-properties: ^1.1.3 - checksum: fbd7d760dc464c886d0196166d92e5ffb4c84d0730846d6621a39fbbc068aeeb9c8d1421ad330e94b7bca4bb4ea092f5f21f3d36077812af5d098b4dc006c998 + esrecurse: ^4.3.0 + estraverse: ^4.1.1 + checksum: 47e4b6a3f0cc29c7feedee6c67b225a2da7e155802c6ea13bbef4ac6b9e10c66cd2dcb987867ef176292bf4e64eccc680a49e35e9e9c669f4a02bac17e86abdb languageName: node linkType: hard -"globby@npm:10.0.0": - version: 10.0.0 - resolution: "globby@npm:10.0.0" +"eslint-scope@npm:^7.1.1": + version: 7.2.2 + resolution: "eslint-scope@npm:7.2.2" dependencies: - "@types/glob": ^7.1.1 - array-union: ^2.1.0 - dir-glob: ^3.0.1 - fast-glob: ^3.0.3 - glob: ^7.1.3 - ignore: ^5.1.1 - merge2: ^1.2.3 - slash: ^3.0.0 - checksum: fbff58d2fcaedd9207901f6e3b5341ff885b6d499c3a095f7befde0fd03ec1ea634452a82f81e894e46f6a5d704da44b842ba93066f90dced52adf84d4b8d1cc + esrecurse: ^4.3.0 + estraverse: ^5.2.0 + checksum: ec97dbf5fb04b94e8f4c5a91a7f0a6dd3c55e46bfc7bbcd0e3138c3a76977570e02ed89a1810c778dcd72072ff0e9621ba1379b4babe53921d71e2e4486fda3e languageName: node linkType: hard -"globby@npm:^11.1.0": - version: 11.1.0 - resolution: "globby@npm:11.1.0" +"eslint-utils@npm:^3.0.0": + version: 3.0.0 + resolution: "eslint-utils@npm:3.0.0" dependencies: - array-union: ^2.1.0 - dir-glob: ^3.0.1 - fast-glob: ^3.2.9 - ignore: ^5.2.0 - merge2: ^1.4.1 - slash: ^3.0.0 - checksum: b4be8885e0cfa018fc783792942d53926c35c50b3aefd3fdcfb9d22c627639dc26bd2327a40a0b74b074100ce95bb7187bfeae2f236856aa3de183af7a02aea6 - languageName: node - linkType: hard - -"goober@npm:^2.1.10": - version: 2.1.13 - resolution: "goober@npm:2.1.13" + eslint-visitor-keys: ^2.0.0 peerDependencies: - csstype: ^3.0.10 - checksum: 0c00b90d26d1a2fad432e311fd4f47bc9fef1eee2a733158d9e2c72a89cf76d414090d063a8d20fe378f2b2b8087df0a83b0f00a3244d1466b97a0d3b14344a7 - languageName: node - linkType: hard - -"gopd@npm:^1.0.1": - version: 1.0.1 - resolution: "gopd@npm:1.0.1" - dependencies: - get-intrinsic: ^1.1.3 - checksum: a5ccfb8806e0917a94e0b3de2af2ea4979c1da920bc381667c260e00e7cafdbe844e2cb9c5bcfef4e5412e8bf73bab837285bc35c7ba73aaaf0134d4583393a6 + eslint: ">=5" + checksum: 0668fe02f5adab2e5a367eee5089f4c39033af20499df88fe4e6aba2015c20720404d8c3d6349b6f716b08fdf91b9da4e5d5481f265049278099c4c836ccb619 languageName: node linkType: hard -"got@npm:^11.0.0": - version: 11.8.6 - resolution: "got@npm:11.8.6" - dependencies: - "@sindresorhus/is": ^4.0.0 - "@szmarczak/http-timer": ^4.0.5 - "@types/cacheable-request": ^6.0.1 - "@types/responselike": ^1.0.0 - cacheable-lookup: ^5.0.3 - cacheable-request: ^7.0.2 - decompress-response: ^6.0.0 - http2-wrapper: ^1.0.0-beta.5.2 - lowercase-keys: ^2.0.0 - p-cancelable: ^2.0.0 - responselike: ^2.0.0 - checksum: bbc783578a8d5030c8164ef7f57ce41b5ad7db2ed13371e1944bef157eeca5a7475530e07c0aaa71610d7085474d0d96222c9f4268d41db333a17e39b463f45d +"eslint-visitor-keys@npm:^2.0.0": + version: 2.1.0 + resolution: "eslint-visitor-keys@npm:2.1.0" + checksum: e3081d7dd2611a35f0388bbdc2f5da60b3a3c5b8b6e928daffff7391146b434d691577aa95064c8b7faad0b8a680266bcda0a42439c18c717b80e6718d7e267d languageName: node linkType: hard -"graceful-fs@npm:^4.1.6, graceful-fs@npm:^4.2.0, graceful-fs@npm:^4.2.4, graceful-fs@npm:^4.2.6, graceful-fs@npm:^4.2.9": - version: 4.2.11 - resolution: "graceful-fs@npm:4.2.11" - checksum: ac85f94da92d8eb6b7f5a8b20ce65e43d66761c55ce85ac96df6865308390da45a8d3f0296dd3a663de65d30ba497bd46c696cc1e248c72b13d6d567138a4fc7 +"eslint-visitor-keys@npm:^3.3.0, eslint-visitor-keys@npm:^3.4.1": + version: 3.4.3 + resolution: "eslint-visitor-keys@npm:3.4.3" + checksum: 36e9ef87fca698b6fd7ca5ca35d7b2b6eeaaf106572e2f7fd31c12d3bfdaccdb587bba6d3621067e5aece31c8c3a348b93922ab8f7b2cbc6aaab5e1d89040c60 languageName: node linkType: hard -"grapheme-splitter@npm:^1.0.4": - version: 1.0.4 - resolution: "grapheme-splitter@npm:1.0.4" - checksum: 0c22ec54dee1b05cd480f78cf14f732cb5b108edc073572c4ec205df4cd63f30f8db8025afc5debc8835a8ddeacf648a1c7992fe3dcd6ad38f9a476d84906620 +"eslint@npm:~8.24.0": + version: 8.24.0 + resolution: "eslint@npm:8.24.0" + dependencies: + "@eslint/eslintrc": ^1.3.2 + "@humanwhocodes/config-array": ^0.10.5 + "@humanwhocodes/gitignore-to-minimatch": ^1.0.2 + "@humanwhocodes/module-importer": ^1.0.1 + ajv: ^6.10.0 + chalk: ^4.0.0 + cross-spawn: ^7.0.2 + debug: ^4.3.2 + doctrine: ^3.0.0 + escape-string-regexp: ^4.0.0 + eslint-scope: ^7.1.1 + eslint-utils: ^3.0.0 + eslint-visitor-keys: ^3.3.0 + espree: ^9.4.0 + esquery: ^1.4.0 + esutils: ^2.0.2 + fast-deep-equal: ^3.1.3 + file-entry-cache: ^6.0.1 + find-up: ^5.0.0 + glob-parent: ^6.0.1 + globals: ^13.15.0 + globby: ^11.1.0 + grapheme-splitter: ^1.0.4 + ignore: ^5.2.0 + import-fresh: ^3.0.0 + imurmurhash: ^0.1.4 + is-glob: ^4.0.0 + js-sdsl: ^4.1.4 + js-yaml: ^4.1.0 + json-stable-stringify-without-jsonify: ^1.0.1 + levn: ^0.4.1 + lodash.merge: ^4.6.2 + minimatch: ^3.1.2 + natural-compare: ^1.4.0 + optionator: ^0.9.1 + regexpp: ^3.2.0 + strip-ansi: ^6.0.1 + strip-json-comments: ^3.1.0 + text-table: ^0.2.0 + bin: + eslint: bin/eslint.js + checksum: ca293ce7116599b742d7ab4d43db469beec22f40dd272092d809498be3cff3a7c567769f9763bdf6799aac13dd53447b93a99629b7b54092783046eb57eaced6 languageName: node linkType: hard -"graphql-request@npm:^6.1.0": - version: 6.1.0 - resolution: "graphql-request@npm:6.1.0" +"espree@npm:^9.4.0": + version: 9.6.1 + resolution: "espree@npm:9.6.1" dependencies: - "@graphql-typed-document-node/core": ^3.2.0 - cross-fetch: ^3.1.5 - peerDependencies: - graphql: 14 - 16 - checksum: 6d62630a0169574442320651c1f7626c0c602025c3c46b19e09417c9579bb209306ee63de9793a03be2e1701bb7f13971f8545d99bc6573e340f823af0ad35b2 - languageName: node - linkType: hard - -"graphql@npm:^16.6.0": - version: 16.8.1 - resolution: "graphql@npm:16.8.1" - checksum: 8d304b7b6f708c8c5cc164b06e92467dfe36aff6d4f2cf31dd19c4c2905a0e7b89edac4b7e225871131fd24e21460836b369de0c06532644d15b461d55b1ccc0 + acorn: ^8.9.0 + acorn-jsx: ^5.3.2 + eslint-visitor-keys: ^3.4.1 + checksum: eb8c149c7a2a77b3f33a5af80c10875c3abd65450f60b8af6db1bfcfa8f101e21c1e56a561c6dc13b848e18148d43469e7cd208506238554fb5395a9ea5a1ab9 languageName: node linkType: hard -"gunzip-maybe@npm:^1.4.2": - version: 1.4.2 - resolution: "gunzip-maybe@npm:1.4.2" +"esquery@npm:^1.4.0": + version: 1.5.0 + resolution: "esquery@npm:1.5.0" dependencies: - browserify-zlib: ^0.1.4 - is-deflate: ^1.0.0 - is-gzip: ^1.0.0 - peek-stream: ^1.1.0 - pumpify: ^1.3.3 - through2: ^2.0.3 - bin: - gunzip-maybe: bin.js - checksum: bc4d4977c24a2860238df271de75d53dd72a359d19f1248d1c613807dc221d3b8ae09624e3085c8106663e3e1b59db62a85b261d1138c2cc24efad9df577d4e1 + estraverse: ^5.1.0 + checksum: aefb0d2596c230118656cd4ec7532d447333a410a48834d80ea648b1e7b5c9bc9ed8b5e33a89cb04e487b60d622f44cf5713bf4abed7c97343edefdc84a35900 languageName: node linkType: hard -"h3@npm:^1.8.1, h3@npm:^1.8.2": - version: 1.8.2 - resolution: "h3@npm:1.8.2" +"esrecurse@npm:^4.3.0": + version: 4.3.0 + resolution: "esrecurse@npm:4.3.0" dependencies: - cookie-es: ^1.0.0 - defu: ^6.1.2 - destr: ^2.0.1 - iron-webcrypto: ^0.10.1 - radix3: ^1.1.0 - ufo: ^1.3.0 - uncrypto: ^0.1.3 - unenv: ^1.7.4 - checksum: 9e57860d54b17d48439242992b9cc5b7f2cf220c2a9d22cabec8ef3e17a5bfef1ffa9bf681891dbcabbef40a35143965908cb01eb51b760705b3dfbae9366abf - languageName: node - linkType: hard - -"has-bigints@npm:^1.0.1, has-bigints@npm:^1.0.2": - version: 1.0.2 - resolution: "has-bigints@npm:1.0.2" - checksum: 390e31e7be7e5c6fe68b81babb73dfc35d413604d7ee5f56da101417027a4b4ce6a27e46eff97ad040c835b5d228676eae99a9b5c3bc0e23c8e81a49241ff45b + estraverse: ^5.2.0 + checksum: ebc17b1a33c51cef46fdc28b958994b1dc43cd2e86237515cbc3b4e5d2be6a811b2315d0a1a4d9d340b6d2308b15322f5c8291059521cc5f4802f65e7ec32837 languageName: node linkType: hard -"has-flag@npm:^3.0.0": - version: 3.0.0 - resolution: "has-flag@npm:3.0.0" - checksum: 4a15638b454bf086c8148979aae044dd6e39d63904cd452d970374fa6a87623423da485dfb814e7be882e05c096a7ccf1ebd48e7e7501d0208d8384ff4dea73b +"estraverse@npm:^4.1.1": + version: 4.3.0 + resolution: "estraverse@npm:4.3.0" + checksum: a6299491f9940bb246124a8d44b7b7a413a8336f5436f9837aaa9330209bd9ee8af7e91a654a3545aee9c54b3308e78ee360cef1d777d37cfef77d2fa33b5827 languageName: node linkType: hard -"has-flag@npm:^4.0.0": - version: 4.0.0 - resolution: "has-flag@npm:4.0.0" - checksum: 261a1357037ead75e338156b1f9452c016a37dcd3283a972a30d9e4a87441ba372c8b81f818cd0fbcd9c0354b4ae7e18b9e1afa1971164aef6d18c2b6095a8ad +"estraverse@npm:^5.1.0, estraverse@npm:^5.2.0, estraverse@npm:^5.3.0": + version: 5.3.0 + resolution: "estraverse@npm:5.3.0" + checksum: 072780882dc8416ad144f8fe199628d2b3e7bbc9989d9ed43795d2c90309a2047e6bc5979d7e2322a341163d22cfad9e21f4110597fe487519697389497e4e2b languageName: node linkType: hard -"has-property-descriptors@npm:^1.0.0": - version: 1.0.1 - resolution: "has-property-descriptors@npm:1.0.1" - dependencies: - get-intrinsic: ^1.2.2 - checksum: 2bcc6bf6ec6af375add4e4b4ef586e43674850a91ad4d46666d0b28ba8e1fd69e424c7677d24d60f69470ad0afaa2f3197f508b20b0bb7dd99a8ab77ffc4b7c4 +"estree-walker@npm:2.0.2, estree-walker@npm:^2.0.1": + version: 2.0.2 + resolution: "estree-walker@npm:2.0.2" + checksum: 6151e6f9828abe2259e57f5fd3761335bb0d2ebd76dc1a01048ccee22fabcfef3c0859300f6d83ff0d1927849368775ec5a6d265dde2f6de5a1be1721cd94efc languageName: node linkType: hard -"has-proto@npm:^1.0.1": - version: 1.0.1 - resolution: "has-proto@npm:1.0.1" - checksum: febc5b5b531de8022806ad7407935e2135f1cc9e64636c3916c6842bd7995994ca3b29871ecd7954bd35f9e2986c17b3b227880484d22259e2f8e6ce63fd383e +"esutils@npm:^2.0.2": + version: 2.0.3 + resolution: "esutils@npm:2.0.3" + checksum: 22b5b08f74737379a840b8ed2036a5fb35826c709ab000683b092d9054e5c2a82c27818f12604bfc2a9a76b90b6834ef081edbc1c7ae30d1627012e067c6ec87 languageName: node linkType: hard -"has-symbols@npm:^1.0.2, has-symbols@npm:^1.0.3": - version: 1.0.3 - resolution: "has-symbols@npm:1.0.3" - checksum: a054c40c631c0d5741a8285010a0777ea0c068f99ed43e5d6eb12972da223f8af553a455132fdb0801bdcfa0e0f443c0c03a68d8555aa529b3144b446c3f2410 +"etag@npm:1.8.1": + version: 1.8.1 + resolution: "etag@npm:1.8.1" + checksum: 571aeb3dbe0f2bbd4e4fadbdb44f325fc75335cd5f6f6b6a091e6a06a9f25ed5392f0863c5442acb0646787446e816f13cbfc6edce5b07658541dff573cab1ff languageName: node linkType: hard -"has-tostringtag@npm:^1.0.0": - version: 1.0.0 - resolution: "has-tostringtag@npm:1.0.0" +"eth-block-tracker@npm:^7.1.0": + version: 7.1.0 + resolution: "eth-block-tracker@npm:7.1.0" dependencies: - has-symbols: ^1.0.2 - checksum: cc12eb28cb6ae22369ebaad3a8ab0799ed61270991be88f208d508076a1e99abe4198c965935ce85ea90b60c94ddda73693b0920b58e7ead048b4a391b502c1c - languageName: node - linkType: hard - -"has-unicode@npm:^2.0.1": - version: 2.0.1 - resolution: "has-unicode@npm:2.0.1" - checksum: 1eab07a7436512db0be40a710b29b5dc21fa04880b7f63c9980b706683127e3c1b57cb80ea96d47991bdae2dfe479604f6a1ba410106ee1046a41d1bd0814400 + "@metamask/eth-json-rpc-provider": ^1.0.0 + "@metamask/safe-event-emitter": ^3.0.0 + "@metamask/utils": ^5.0.1 + json-rpc-random-id: ^1.0.1 + pify: ^3.0.0 + checksum: 1d019f261e0ef07387cd74538b160700caa35ba9859ab9d4e5137c48bf9c92822c3b4ade40f8a504f16cb813de4c317c5378d047625ddf04592e256be8842588 languageName: node linkType: hard -"hash.js@npm:1.1.7, hash.js@npm:^1.0.0, hash.js@npm:^1.0.3, hash.js@npm:^1.1.7": - version: 1.1.7 - resolution: "hash.js@npm:1.1.7" +"eth-json-rpc-filters@npm:^6.0.0": + version: 6.0.1 + resolution: "eth-json-rpc-filters@npm:6.0.1" dependencies: - inherits: ^2.0.3 - minimalistic-assert: ^1.0.1 - checksum: e350096e659c62422b85fa508e4b3669017311aa4c49b74f19f8e1bc7f3a54a584fdfd45326d4964d6011f2b2d882e38bea775a96046f2a61b7779a979629d8f + "@metamask/safe-event-emitter": ^3.0.0 + async-mutex: ^0.2.6 + eth-query: ^2.1.2 + json-rpc-engine: ^6.1.0 + pify: ^5.0.0 + checksum: 216f7417417599a48273b08fb2894581175276fe21cb1c9ffa66e98a9c2a67bc0ac821ad2ca163fdb8e8de0960aea0d9c5e53aee9d5dcfec355abf020e9458c5 languageName: node linkType: hard -"hasown@npm:^2.0.0": - version: 2.0.0 - resolution: "hasown@npm:2.0.0" +"eth-query@npm:^2.1.2": + version: 2.1.2 + resolution: "eth-query@npm:2.1.2" dependencies: - function-bind: ^1.1.2 - checksum: 6151c75ca12554565098641c98a40f4cc86b85b0fd5b6fe92360967e4605a4f9610f7757260b4e8098dd1c2ce7f4b095f2006fe72a570e3b6d2d28de0298c176 - languageName: node - linkType: hard - -"hast-util-to-estree@npm:^2.0.0": - version: 2.3.3 - resolution: "hast-util-to-estree@npm:2.3.3" - dependencies: - "@types/estree": ^1.0.0 - "@types/estree-jsx": ^1.0.0 - "@types/hast": ^2.0.0 - "@types/unist": ^2.0.0 - comma-separated-tokens: ^2.0.0 - estree-util-attach-comments: ^2.0.0 - estree-util-is-identifier-name: ^2.0.0 - hast-util-whitespace: ^2.0.0 - mdast-util-mdx-expression: ^1.0.0 - mdast-util-mdxjs-esm: ^1.0.0 - property-information: ^6.0.0 - space-separated-tokens: ^2.0.0 - style-to-object: ^0.4.1 - unist-util-position: ^4.0.0 - zwitch: ^2.0.0 - checksum: a09de0214db4d71f11cbd6f18663a8032116f82cb076b05d2d735444c05a9692902dae1023b70d0a254fc0a776f81e97450ca396bb9252c8fd631c3ba2e12f24 - languageName: node - linkType: hard - -"hast-util-whitespace@npm:^2.0.0": - version: 2.0.1 - resolution: "hast-util-whitespace@npm:2.0.1" - checksum: 431be6b2f35472f951615540d7a53f69f39461e5e080c0190268bdeb2be9ab9b1dddfd1f467dd26c1de7e7952df67beb1307b6ee940baf78b24a71b5e0663868 - languageName: node - linkType: hard - -"hey-listen@npm:^1.0.8": - version: 1.0.8 - resolution: "hey-listen@npm:1.0.8" - checksum: 6bad60b367688f5348e25e7ca3276a74b59ac5a09b0455e6ff8ab7d4a9e38cd2116c708a7dcd8a954d27253ce1d8717ec891d175723ea739885b828cf44e4072 + json-rpc-random-id: ^1.0.0 + xtend: ^4.0.1 + checksum: 83daa0e28452c54722aec78cd24d036bad5b6e7c08035d98e10d4bea11f71662f12cab63ebd8a848d4df46ad316503d54ecccb41c9244d2ea8b29364b0a20201 languageName: node linkType: hard -"hmac-drbg@npm:^1.0.1": - version: 1.0.1 - resolution: "hmac-drbg@npm:1.0.1" +"eth-rpc-errors@npm:^4.0.2": + version: 4.0.3 + resolution: "eth-rpc-errors@npm:4.0.3" dependencies: - hash.js: ^1.0.3 - minimalistic-assert: ^1.0.0 - minimalistic-crypto-utils: ^1.0.1 - checksum: bd30b6a68d7f22d63f10e1888aee497d7c2c5c0bb469e66bbdac99f143904d1dfe95f8131f95b3e86c86dd239963c9d972fcbe147e7cffa00e55d18585c43fe0 - languageName: node - linkType: hard - -"http-cache-semantics@npm:^4.0.0, http-cache-semantics@npm:^4.1.1": - version: 4.1.1 - resolution: "http-cache-semantics@npm:4.1.1" - checksum: 83ac0bc60b17a3a36f9953e7be55e5c8f41acc61b22583060e8dedc9dd5e3607c823a88d0926f9150e571f90946835c7fe150732801010845c72cd8bbff1a236 + fast-safe-stringify: ^2.0.6 + checksum: 5fa31d1a10fdb340733b9a55e38e7687222c501052ca20743cef4d0c911a9bbcc0cad54aa6bf3e4b428604c071ff519803060e1cbc79ddb7c9257c11d407d32a languageName: node linkType: hard -"http-errors@npm:2.0.0": - version: 2.0.0 - resolution: "http-errors@npm:2.0.0" +"ethereum-cryptography@npm:^2.0.0": + version: 2.1.3 + resolution: "ethereum-cryptography@npm:2.1.3" dependencies: - depd: 2.0.0 - inherits: 2.0.4 - setprototypeof: 1.2.0 - statuses: 2.0.1 - toidentifier: 1.0.1 - checksum: 9b0a3782665c52ce9dc658a0d1560bcb0214ba5699e4ea15aefb2a496e2ca83db03ebc42e1cce4ac1f413e4e0d2d736a3fd755772c556a9a06853ba2a0b7d920 + "@noble/curves": 1.3.0 + "@noble/hashes": 1.3.3 + "@scure/bip32": 1.3.3 + "@scure/bip39": 1.2.2 + checksum: 7f9c14f868a588641179cace3eb86c332c4743290865db699870710253cabc4dc74bd4bce5e7bc6db667482e032e94d6f79521219eb6be5dc422059d279a27b7 languageName: node linkType: hard -"http-proxy-agent@npm:^4.0.0, http-proxy-agent@npm:^4.0.1": - version: 4.0.1 - resolution: "http-proxy-agent@npm:4.0.1" +"ethers@npm:~5.7.1": + version: 5.7.2 + resolution: "ethers@npm:5.7.2" dependencies: - "@tootallnate/once": 1 - agent-base: 6 - debug: 4 - checksum: c6a5da5a1929416b6bbdf77b1aca13888013fe7eb9d59fc292e25d18e041bb154a8dfada58e223fc7b76b9b2d155a87e92e608235201f77d34aa258707963a82 + "@ethersproject/abi": 5.7.0 + "@ethersproject/abstract-provider": 5.7.0 + "@ethersproject/abstract-signer": 5.7.0 + "@ethersproject/address": 5.7.0 + "@ethersproject/base64": 5.7.0 + "@ethersproject/basex": 5.7.0 + "@ethersproject/bignumber": 5.7.0 + "@ethersproject/bytes": 5.7.0 + "@ethersproject/constants": 5.7.0 + "@ethersproject/contracts": 5.7.0 + "@ethersproject/hash": 5.7.0 + "@ethersproject/hdnode": 5.7.0 + "@ethersproject/json-wallets": 5.7.0 + "@ethersproject/keccak256": 5.7.0 + "@ethersproject/logger": 5.7.0 + "@ethersproject/networks": 5.7.1 + "@ethersproject/pbkdf2": 5.7.0 + "@ethersproject/properties": 5.7.0 + "@ethersproject/providers": 5.7.2 + "@ethersproject/random": 5.7.0 + "@ethersproject/rlp": 5.7.0 + "@ethersproject/sha2": 5.7.0 + "@ethersproject/signing-key": 5.7.0 + "@ethersproject/solidity": 5.7.0 + "@ethersproject/strings": 5.7.0 + "@ethersproject/transactions": 5.7.0 + "@ethersproject/units": 5.7.0 + "@ethersproject/wallet": 5.7.0 + "@ethersproject/web": 5.7.1 + "@ethersproject/wordlists": 5.7.0 + checksum: b7c08cf3e257185a7946117dbbf764433b7ba0e77c27298dec6088b3bc871aff711462b0621930c56880ff0a7ceb8b1d3a361ffa259f93377b48e34107f62553 languageName: node linkType: hard -"http-proxy-agent@npm:^7.0.0": - version: 7.0.0 - resolution: "http-proxy-agent@npm:7.0.0" - dependencies: - agent-base: ^7.1.0 - debug: ^4.3.4 - checksum: 48d4fac997917e15f45094852b63b62a46d0c8a4f0b9c6c23ca26d27b8df8d178bed88389e604745e748bd9a01f5023e25093722777f0593c3f052009ff438b6 +"eventemitter3@npm:^4.0.7": + version: 4.0.7 + resolution: "eventemitter3@npm:4.0.7" + checksum: 1875311c42fcfe9c707b2712c32664a245629b42bb0a5a84439762dd0fd637fc54d078155ea83c2af9e0323c9ac13687e03cfba79b03af9f40c89b4960099374 languageName: node linkType: hard -"http-shutdown@npm:^1.2.2": - version: 1.2.2 - resolution: "http-shutdown@npm:1.2.2" - checksum: 5dccd94f4fe4f51f9cbd7ec4586121160cd6470728e581662ea8032724440d891c4c92b8210b871ac468adadb3c99c40098ad0f752a781a550abae49dfa26206 +"eventemitter3@npm:^5.0.1": + version: 5.0.1 + resolution: "eventemitter3@npm:5.0.1" + checksum: 543d6c858ab699303c3c32e0f0f47fc64d360bf73c3daf0ac0b5079710e340d6fe9f15487f94e66c629f5f82cd1a8678d692f3dbb6f6fcd1190e1b97fcad36f8 languageName: node linkType: hard -"http-status@npm:1.5.3": - version: 1.5.3 - resolution: "http-status@npm:1.5.3" - checksum: bcb07045f790dcf184c3940b1399113381d1b895bfb7f4d7d8eacf6bd1aef5461064b8fbc4e23c7276bfe4a275a3ebedc50d80e5216b3909478fb3dc58dbbb04 +"events-intercept@npm:^2.0.0": + version: 2.0.0 + resolution: "events-intercept@npm:2.0.0" + checksum: 1aa3447249584abb15d046ce847476e57772a98ec856d3093cea33c90bdd60428125834668c624f9f0e54203d6efd0b35550547082ddcc374e029d85664eddb0 languageName: node linkType: hard -"http2-wrapper@npm:^1.0.0-beta.5.2": - version: 1.0.3 - resolution: "http2-wrapper@npm:1.0.3" - dependencies: - quick-lru: ^5.1.1 - resolve-alpn: ^1.0.0 - checksum: 74160b862ec699e3f859739101ff592d52ce1cb207b7950295bf7962e4aa1597ef709b4292c673bece9c9b300efad0559fc86c71b1409c7a1e02b7229456003e +"events@npm:^3.3.0": + version: 3.3.0 + resolution: "events@npm:3.3.0" + checksum: f6f487ad2198aa41d878fa31452f1a3c00958f46e9019286ff4787c84aac329332ab45c9cdc8c445928fc6d7ded294b9e005a7fce9426488518017831b272780 languageName: node linkType: hard -"https-proxy-agent@npm:5, https-proxy-agent@npm:^5.0.0": - version: 5.0.1 - resolution: "https-proxy-agent@npm:5.0.1" +"execa@npm:3.2.0": + version: 3.2.0 + resolution: "execa@npm:3.2.0" dependencies: - agent-base: 6 - debug: 4 - checksum: 571fccdf38184f05943e12d37d6ce38197becdd69e58d03f43637f7fa1269cf303a7d228aa27e5b27bbd3af8f09fd938e1c91dcfefff2df7ba77c20ed8dfc765 + cross-spawn: ^7.0.0 + get-stream: ^5.0.0 + human-signals: ^1.1.1 + is-stream: ^2.0.0 + merge-stream: ^2.0.0 + npm-run-path: ^4.0.0 + onetime: ^5.1.0 + p-finally: ^2.0.0 + signal-exit: ^3.0.2 + strip-final-newline: ^2.0.0 + checksum: 1c5e4629d5e40151ee6b3902740b0fee1e1fe519483472d020e0ec1bc6a4f12903ba02c569868c81416f6ad122da9d96f273164bc641648bada42cce9c56f907 languageName: node linkType: hard -"https-proxy-agent@npm:^7.0.1": - version: 7.0.2 - resolution: "https-proxy-agent@npm:7.0.2" +"execa@npm:^7.0.0": + version: 7.2.0 + resolution: "execa@npm:7.2.0" dependencies: - agent-base: ^7.0.2 - debug: 4 - checksum: 088969a0dd476ea7a0ed0a2cf1283013682b08f874c3bc6696c83fa061d2c157d29ef0ad3eb70a2046010bb7665573b2388d10fdcb3e410a66995e5248444292 + cross-spawn: ^7.0.3 + get-stream: ^6.0.1 + human-signals: ^4.3.0 + is-stream: ^3.0.0 + merge-stream: ^2.0.0 + npm-run-path: ^5.1.0 + onetime: ^6.0.0 + signal-exit: ^3.0.7 + strip-final-newline: ^3.0.0 + checksum: 14fd17ba0ca8c87b277584d93b1d9fc24f2a65e5152b31d5eb159a3b814854283eaae5f51efa9525e304447e2f757c691877f7adff8fde5746aae67eb1edd1cc languageName: node linkType: hard -"human-signals@npm:^2.1.0": - version: 2.1.0 - resolution: "human-signals@npm:2.1.0" - checksum: b87fd89fce72391625271454e70f67fe405277415b48bcc0117ca73d31fa23a4241787afdc8d67f5a116cf37258c052f59ea82daffa72364d61351423848e3b8 +"execa@npm:^8.0.1": + version: 8.0.1 + resolution: "execa@npm:8.0.1" + dependencies: + cross-spawn: ^7.0.3 + get-stream: ^8.0.1 + human-signals: ^5.0.0 + is-stream: ^3.0.0 + merge-stream: ^2.0.0 + npm-run-path: ^5.1.0 + onetime: ^6.0.0 + signal-exit: ^4.1.0 + strip-final-newline: ^3.0.0 + checksum: cac1bf86589d1d9b73bdc5dda65c52012d1a9619c44c526891956745f7b366ca2603d29fe3f7460bacc2b48c6eab5d6a4f7afe0534b31473d3708d1265545e1f languageName: node linkType: hard -"human-signals@npm:^4.3.0": - version: 4.3.1 - resolution: "human-signals@npm:4.3.1" - checksum: 6f12958df3f21b6fdaf02d90896c271df00636a31e2bbea05bddf817a35c66b38a6fdac5863e2df85bd52f34958997f1f50350ff97249e1dff8452865d5235d1 +"exit-hook@npm:2.2.1": + version: 2.2.1 + resolution: "exit-hook@npm:2.2.1" + checksum: 1aa8359b6c5590a012d6cadf9cd337d227291bfcaa8970dc585d73dffef0582af34ed8ac56f6164f8979979fb417cff1eb49f03cdfd782f9332a30c773f0ada0 languageName: node linkType: hard -"humanize-ms@npm:^1.2.1": - version: 1.2.1 - resolution: "humanize-ms@npm:1.2.1" - dependencies: - ms: ^2.0.0 - checksum: 9c7a74a2827f9294c009266c82031030eae811ca87b0da3dceb8d6071b9bde22c9f3daef0469c3c533cc67a97d8a167cd9fc0389350e5f415f61a79b171ded16 +"exponential-backoff@npm:^3.1.1": + version: 3.1.1 + resolution: "exponential-backoff@npm:3.1.1" + checksum: 3d21519a4f8207c99f7457287291316306255a328770d320b401114ec8481986e4e467e854cb9914dd965e0a1ca810a23ccb559c642c88f4c7f55c55778a9b48 languageName: node linkType: hard -"husky@npm:~8.0.3": - version: 8.0.3 - resolution: "husky@npm:8.0.3" - bin: - husky: lib/bin.js - checksum: 837bc7e4413e58c1f2946d38fb050f5d7324c6f16b0fd66411ffce5703b294bd21429e8ba58711cd331951ee86ed529c5be4f76805959ff668a337dbfa82a1b0 +"fast-deep-equal@npm:^3.1.1, fast-deep-equal@npm:^3.1.3": + version: 3.1.3 + resolution: "fast-deep-equal@npm:3.1.3" + checksum: e21a9d8d84f53493b6aa15efc9cfd53dd5b714a1f23f67fb5dc8f574af80df889b3bce25dc081887c6d25457cce704e636395333abad896ccdec03abaf1f3f9d languageName: node linkType: hard -"i18n-js@npm:^4.3.2": - version: 4.3.2 - resolution: "i18n-js@npm:4.3.2" - dependencies: - bignumber.js: "*" - lodash: "*" - make-plural: "*" - checksum: 08a051dba75d93447e2021c1feb92f34c9034b5a818957885ea19ac58954d764c848c4deaaf46ada3e15d51f61ad9f7e0bf4ddffa3c765871ff1b26638ca0a8f +"fast-diff@npm:^1.1.2": + version: 1.3.0 + resolution: "fast-diff@npm:1.3.0" + checksum: d22d371b994fdc8cce9ff510d7b8dc4da70ac327bcba20df607dd5b9cae9f908f4d1028f5fe467650f058d1e7270235ae0b8230809a262b4df587a3b3aa216c3 languageName: node linkType: hard -"iconv-lite@npm:0.4.24, iconv-lite@npm:^0.4.24": - version: 0.4.24 - resolution: "iconv-lite@npm:0.4.24" +"fast-glob@npm:^3.2.7, fast-glob@npm:^3.2.9, fast-glob@npm:^3.3.0, fast-glob@npm:^3.3.1": + version: 3.3.2 + resolution: "fast-glob@npm:3.3.2" dependencies: - safer-buffer: ">= 2.1.2 < 3" - checksum: bd9f120f5a5b306f0bc0b9ae1edeb1577161503f5f8252a20f1a9e56ef8775c9959fd01c55f2d3a39d9a8abaf3e30c1abeb1895f367dcbbe0a8fd1c9ca01c4f6 + "@nodelib/fs.stat": ^2.0.2 + "@nodelib/fs.walk": ^1.2.3 + glob-parent: ^5.1.2 + merge2: ^1.3.0 + micromatch: ^4.0.4 + checksum: 900e4979f4dbc3313840078419245621259f349950411ca2fa445a2f9a1a6d98c3b5e7e0660c5ccd563aa61abe133a21765c6c0dec8e57da1ba71d8000b05ec1 languageName: node linkType: hard -"iconv-lite@npm:^0.6.2": - version: 0.6.3 - resolution: "iconv-lite@npm:0.6.3" - dependencies: - safer-buffer: ">= 2.1.2 < 3.0.0" - checksum: 3f60d47a5c8fc3313317edfd29a00a692cc87a19cac0159e2ce711d0ebc9019064108323b5e493625e25594f11c6236647d8e256fbe7a58f4a3b33b89e6d30bf +"fast-json-stable-stringify@npm:^2.0.0": + version: 2.1.0 + resolution: "fast-json-stable-stringify@npm:2.1.0" + checksum: b191531e36c607977e5b1c47811158733c34ccb3bfde92c44798929e9b4154884378536d26ad90dfecd32e1ffc09c545d23535ad91b3161a27ddbb8ebe0cbecb languageName: node linkType: hard -"icss-utils@npm:^5.0.0, icss-utils@npm:^5.1.0": - version: 5.1.0 - resolution: "icss-utils@npm:5.1.0" - peerDependencies: - postcss: ^8.1.0 - checksum: 5c324d283552b1269cfc13a503aaaa172a280f914e5b81544f3803bc6f06a3b585fb79f66f7c771a2c052db7982c18bf92d001e3b47282e3abbbb4c4cc488d68 +"fast-levenshtein@npm:^2.0.6": + version: 2.0.6 + resolution: "fast-levenshtein@npm:2.0.6" + checksum: 92cfec0a8dfafd9c7a15fba8f2cc29cd0b62b85f056d99ce448bbcd9f708e18ab2764bda4dd5158364f4145a7c72788538994f0d1787b956ef0d1062b0f7c24c languageName: node linkType: hard -"idb-keyval@npm:^6.2.1": - version: 6.2.1 - resolution: "idb-keyval@npm:6.2.1" - checksum: 7c0836f832096086e99258167740181132a71dd2694c8b8454a4f5ec69114ba6d70983115153306f0b6de1c8d3bad04f67eed3dff8f50c96815b9985d6d78470 +"fast-redact@npm:^3.0.0": + version: 3.3.0 + resolution: "fast-redact@npm:3.3.0" + checksum: 3f7becc70a5a2662a9cbfdc52a4291594f62ae998806ee00315af307f32d9559dbf512146259a22739ee34401950ef47598c1f4777d33b0ed5027203d67f549c languageName: node linkType: hard -"ieee754@npm:^1.1.13, ieee754@npm:^1.2.1": - version: 1.2.1 - resolution: "ieee754@npm:1.2.1" - checksum: 5144c0c9815e54ada181d80a0b810221a253562422e7c6c3a60b1901154184f49326ec239d618c416c1c5945a2e197107aee8d986a3dd836b53dffefd99b5e7e +"fast-safe-stringify@npm:^2.0.6": + version: 2.1.1 + resolution: "fast-safe-stringify@npm:2.1.1" + checksum: a851cbddc451745662f8f00ddb622d6766f9bd97642dabfd9a405fb0d646d69fc0b9a1243cbf67f5f18a39f40f6fa821737651ff1bceeba06c9992ca2dc5bd3d languageName: node linkType: hard -"ignore@npm:^5.1.1, ignore@npm:^5.2.0": - version: 5.2.4 - resolution: "ignore@npm:5.2.4" - checksum: 3d4c309c6006e2621659311783eaea7ebcd41fe4ca1d78c91c473157ad6666a57a2df790fe0d07a12300d9aac2888204d7be8d59f9aaf665b1c7fcdb432517ef +"fastparse@npm:^1.1.2": + version: 1.1.2 + resolution: "fastparse@npm:1.1.2" + checksum: c4d199809dc4e8acafeb786be49481cc9144de296e2d54df4540ccfd868d0df73afc649aba70a748925eb32bbc4208b723d6288adf92382275031a8c7e10c0aa languageName: node linkType: hard -"import-fresh@npm:^3.0.0, import-fresh@npm:^3.2.1": - version: 3.3.0 - resolution: "import-fresh@npm:3.3.0" +"fastq@npm:^1.6.0": + version: 1.17.0 + resolution: "fastq@npm:1.17.0" dependencies: - parent-module: ^1.0.0 - resolve-from: ^4.0.0 - checksum: 2cacfad06e652b1edc50be650f7ec3be08c5e5a6f6d12d035c440a42a8cc028e60a5b99ca08a77ab4d6b1346da7d971915828f33cdab730d3d42f08242d09baa + reusify: ^1.0.4 + checksum: a1c88c357a220bdc666c2df5ec6071d49bdf79ea827d92f9a9559da3ff1b4288eecca3ecbb7b6ddf0ba016eb0a4bf756bf17c411a6d10c814aecd26e939cbd06 languageName: node linkType: hard -"imurmurhash@npm:^0.1.4": - version: 0.1.4 - resolution: "imurmurhash@npm:0.1.4" - checksum: 7cae75c8cd9a50f57dadd77482359f659eaebac0319dd9368bcd1714f55e65badd6929ca58569da2b6494ef13fdd5598cd700b1eba23f8b79c5f19d195a3ecf7 +"fd-slicer@npm:~1.1.0": + version: 1.1.0 + resolution: "fd-slicer@npm:1.1.0" + dependencies: + pend: ~1.2.0 + checksum: c8585fd5713f4476eb8261150900d2cb7f6ff2d87f8feb306ccc8a1122efd152f1783bdb2b8dc891395744583436bfd8081d8e63ece0ec8687eeefea394d4ff2 languageName: node linkType: hard -"indent-string@npm:^4.0.0": - version: 4.0.0 - resolution: "indent-string@npm:4.0.0" - checksum: 824cfb9929d031dabf059bebfe08cf3137365e112019086ed3dcff6a0a7b698cb80cf67ccccde0e25b9e2d7527aa6cc1fed1ac490c752162496caba3e6699612 +"file-entry-cache@npm:^6.0.1": + version: 6.0.1 + resolution: "file-entry-cache@npm:6.0.1" + dependencies: + flat-cache: ^3.0.4 + checksum: f49701feaa6314c8127c3c2f6173cfefff17612f5ed2daaafc6da13b5c91fd43e3b2a58fd0d63f9f94478a501b167615931e7200e31485e320f74a33885a9c74 languageName: node linkType: hard -"infer-owner@npm:^1.0.4": - version: 1.0.4 - resolution: "infer-owner@npm:1.0.4" - checksum: 181e732764e4a0611576466b4b87dac338972b839920b2a8cde43642e4ed6bd54dc1fb0b40874728f2a2df9a1b097b8ff83b56d5f8f8e3927f837fdcb47d8a89 +"file-uri-to-path@npm:1.0.0": + version: 1.0.0 + resolution: "file-uri-to-path@npm:1.0.0" + checksum: b648580bdd893a008c92c7ecc96c3ee57a5e7b6c4c18a9a09b44fb5d36d79146f8e442578bc0e173dc027adf3987e254ba1dfd6e3ec998b7c282873010502144 languageName: node linkType: hard -"inflight@npm:^1.0.4": - version: 1.0.6 - resolution: "inflight@npm:1.0.6" +"fill-range@npm:^7.0.1": + version: 7.0.1 + resolution: "fill-range@npm:7.0.1" dependencies: - once: ^1.3.0 - wrappy: 1 - checksum: f4f76aa072ce19fae87ce1ef7d221e709afb59d445e05d47fba710e85470923a75de35bfae47da6de1b18afc3ce83d70facf44cfb0aff89f0a3f45c0a0244dfd + to-regex-range: ^5.0.1 + checksum: cc283f4e65b504259e64fd969bcf4def4eb08d85565e906b7d36516e87819db52029a76b6363d0f02d0d532f0033c9603b9e2d943d56ee3b0d4f7ad3328ff917 languageName: node linkType: hard -"inherits@npm:2, inherits@npm:2.0.4, inherits@npm:^2.0.1, inherits@npm:^2.0.3, inherits@npm:^2.0.4, inherits@npm:~2.0.1, inherits@npm:~2.0.3, inherits@npm:~2.0.4": - version: 2.0.4 - resolution: "inherits@npm:2.0.4" - checksum: 4a48a733847879d6cf6691860a6b1e3f0f4754176e4d71494c41f3475553768b10f84b5ce1d40fbd0e34e6bfbb864ee35858ad4dd2cf31e02fc4a154b724d7f1 +"filter-obj@npm:^1.1.0": + version: 1.1.0 + resolution: "filter-obj@npm:1.1.0" + checksum: cf2104a7c45ff48e7f505b78a3991c8f7f30f28bd8106ef582721f321f1c6277f7751aacd5d83026cb079d9d5091082f588d14a72e7c5d720ece79118fa61e10 languageName: node linkType: hard -"inline-style-parser@npm:0.1.1": - version: 0.1.1 - resolution: "inline-style-parser@npm:0.1.1" - checksum: 5d545056a3e1f2bf864c928a886a0e1656a3517127d36917b973de581bd54adc91b4bf1febcb0da054f204b4934763f1a4e09308b4d55002327cf1d48ac5d966 +"find-up@npm:^4.1.0": + version: 4.1.0 + resolution: "find-up@npm:4.1.0" + dependencies: + locate-path: ^5.0.0 + path-exists: ^4.0.0 + checksum: 4c172680e8f8c1f78839486e14a43ef82e9decd0e74145f40707cc42e7420506d5ec92d9a11c22bd2c48fb0c384ea05dd30e10dd152fefeec6f2f75282a8b844 languageName: node linkType: hard -"inquirer@npm:^8.2.1": - version: 8.2.6 - resolution: "inquirer@npm:8.2.6" +"find-up@npm:^5.0.0": + version: 5.0.0 + resolution: "find-up@npm:5.0.0" dependencies: - ansi-escapes: ^4.2.1 - chalk: ^4.1.1 - cli-cursor: ^3.1.0 - cli-width: ^3.0.0 - external-editor: ^3.0.3 - figures: ^3.0.0 - lodash: ^4.17.21 - mute-stream: 0.0.8 - ora: ^5.4.1 - run-async: ^2.4.0 - rxjs: ^7.5.5 - string-width: ^4.1.0 - strip-ansi: ^6.0.0 - through: ^2.3.6 - wrap-ansi: ^6.0.1 - checksum: 387ffb0a513559cc7414eb42c57556a60e302f820d6960e89d376d092e257a919961cd485a1b4de693dbb5c0de8bc58320bfd6247dfd827a873aa82a4215a240 + locate-path: ^6.0.0 + path-exists: ^4.0.0 + checksum: 07955e357348f34660bde7920783204ff5a26ac2cafcaa28bace494027158a97b9f56faaf2d89a6106211a8174db650dd9f503f9c0d526b1202d5554a00b9095 languageName: node linkType: hard -"internal-slot@npm:^1.0.5": - version: 1.0.6 - resolution: "internal-slot@npm:1.0.6" +"flat-cache@npm:^3.0.4": + version: 3.2.0 + resolution: "flat-cache@npm:3.2.0" dependencies: - get-intrinsic: ^1.2.2 - hasown: ^2.0.0 - side-channel: ^1.0.4 - checksum: 7872454888047553ce97a3fa1da7cc054a28ec5400a9c2e9f4dbe4fe7c1d041cb8e8301467614b80d4246d50377aad2fb58860b294ed74d6700cc346b6f89549 + flatted: ^3.2.9 + keyv: ^4.5.3 + rimraf: ^3.0.2 + checksum: e7e0f59801e288b54bee5cb9681e9ee21ee28ef309f886b312c9d08415b79fc0f24ac842f84356ce80f47d6a53de62197ce0e6e148dc42d5db005992e2a756ec languageName: node linkType: hard -"invariant@npm:^2.2.4": - version: 2.2.4 - resolution: "invariant@npm:2.2.4" - dependencies: - loose-envify: ^1.0.0 - checksum: cc3182d793aad82a8d1f0af697b462939cb46066ec48bbf1707c150ad5fad6406137e91a262022c269702e01621f35ef60269f6c0d7fd178487959809acdfb14 +"flatted@npm:^3.2.9": + version: 3.2.9 + resolution: "flatted@npm:3.2.9" + checksum: f14167fbe26a9d20f6fca8d998e8f1f41df72c8e81f9f2c9d61ed2bea058248f5e1cbd05e7f88c0e5087a6a0b822a1e5e2b446e879f3cfbe0b07ba2d7f80b026 languageName: node linkType: hard -"ioredis@npm:^5.3.2": - version: 5.3.2 - resolution: "ioredis@npm:5.3.2" +"for-each@npm:^0.3.3": + version: 0.3.3 + resolution: "for-each@npm:0.3.3" dependencies: - "@ioredis/commands": ^1.1.1 - cluster-key-slot: ^1.1.0 - debug: ^4.3.4 - denque: ^2.1.0 - lodash.defaults: ^4.2.0 - lodash.isarguments: ^3.1.0 - redis-errors: ^1.2.0 - redis-parser: ^3.0.0 - standard-as-callback: ^2.1.0 - checksum: 9a23559133e862a768778301efb68ae8c2af3c33562174b54a4c2d6574b976e85c75a4c34857991af733e35c48faf4c356e7daa8fb0a3543d85ff1768c8754bc + is-callable: ^1.1.3 + checksum: 6c48ff2bc63362319c65e2edca4a8e1e3483a2fabc72fbe7feaf8c73db94fc7861bd53bc02c8a66a0c1dd709da6b04eec42e0abdd6b40ce47305ae92a25e5d28 languageName: node linkType: hard -"ip@npm:^1.1.5": - version: 1.1.8 - resolution: "ip@npm:1.1.8" - checksum: a2ade53eb339fb0cbe9e69a44caab10d6e3784662285eb5d2677117ee4facc33a64679051c35e0dfdb1a3983a51ce2f5d2cb36446d52e10d01881789b76e28fb +"foreground-child@npm:^3.1.0": + version: 3.1.1 + resolution: "foreground-child@npm:3.1.1" + dependencies: + cross-spawn: ^7.0.0 + signal-exit: ^4.0.1 + checksum: 139d270bc82dc9e6f8bc045fe2aae4001dc2472157044fdfad376d0a3457f77857fa883c1c8b21b491c6caade9a926a4bed3d3d2e8d3c9202b151a4cbbd0bcd5 languageName: node linkType: hard -"ip@npm:^2.0.0": - version: 2.0.0 - resolution: "ip@npm:2.0.0" - checksum: cfcfac6b873b701996d71ec82a7dd27ba92450afdb421e356f44044ed688df04567344c36cbacea7d01b1c39a4c732dc012570ebe9bebfb06f27314bca625349 +"fraction.js@npm:^4.3.7": + version: 4.3.7 + resolution: "fraction.js@npm:4.3.7" + checksum: e1553ae3f08e3ba0e8c06e43a3ab20b319966dfb7ddb96fd9b5d0ee11a66571af7f993229c88ebbb0d4a816eb813a24ed48207b140d442a8f76f33763b8d1f3f languageName: node linkType: hard -"ipaddr.js@npm:1.9.1": - version: 1.9.1 - resolution: "ipaddr.js@npm:1.9.1" - checksum: f88d3825981486f5a1942414c8d77dd6674dd71c065adcfa46f578d677edcb99fda25af42675cb59db492fdf427b34a5abfcde3982da11a8fd83a500b41cfe77 +"fs-extra@npm:11.1.0": + version: 11.1.0 + resolution: "fs-extra@npm:11.1.0" + dependencies: + graceful-fs: ^4.2.0 + jsonfile: ^6.0.1 + universalify: ^2.0.0 + checksum: 5ca476103fa1f5ff4a9b3c4f331548f8a3c1881edaae323a4415d3153b5dc11dc6a981c8d1dd93eec8367ceee27b53f8bd27eecbbf66ffcdd04927510c171e7f languageName: node linkType: hard -"iron-webcrypto@npm:^0.10.1": - version: 0.10.1 - resolution: "iron-webcrypto@npm:0.10.1" - checksum: a473820d5ab5cb1dfbf00ee06f9b3a48b99fb2bb3058485ab13b153e7cd71dd63af74e6df6a5a4fb6b09d6041d049583913e4c6fff3bd5301087472ea78372ce +"fs-extra@npm:8.1.0": + version: 8.1.0 + resolution: "fs-extra@npm:8.1.0" + dependencies: + graceful-fs: ^4.2.0 + jsonfile: ^4.0.0 + universalify: ^0.1.0 + checksum: bf44f0e6cea59d5ce071bba4c43ca76d216f89e402dc6285c128abc0902e9b8525135aa808adad72c9d5d218e9f4bcc63962815529ff2f684ad532172a284880 languageName: node linkType: hard -"is-alphabetical@npm:^2.0.0": - version: 2.0.1 - resolution: "is-alphabetical@npm:2.0.1" - checksum: 56207db8d9de0850f0cd30f4966bf731eb82cedfe496cbc2e97e7c3bacaf66fc54a972d2d08c0d93bb679cb84976a05d24c5ad63de56fabbfc60aadae312edaa +"fs-minipass@npm:^1.2.7": + version: 1.2.7 + resolution: "fs-minipass@npm:1.2.7" + dependencies: + minipass: ^2.6.0 + checksum: 40fd46a2b5dcb74b3a580269f9a0c36f9098c2ebd22cef2e1a004f375b7b665c11f1507ec3f66ee6efab5664109f72d0a74ea19c3370842214c3da5168d6fdd7 languageName: node linkType: hard -"is-alphanumerical@npm:^2.0.0": - version: 2.0.1 - resolution: "is-alphanumerical@npm:2.0.1" +"fs-minipass@npm:^2.0.0": + version: 2.1.0 + resolution: "fs-minipass@npm:2.1.0" dependencies: - is-alphabetical: ^2.0.0 - is-decimal: ^2.0.0 - checksum: 87acc068008d4c9c4e9f5bd5e251041d42e7a50995c77b1499cf6ed248f971aadeddb11f239cabf09f7975ee58cac7a48ffc170b7890076d8d227b24a68663c9 + minipass: ^3.0.0 + checksum: 1b8d128dae2ac6cc94230cc5ead341ba3e0efaef82dab46a33d171c044caaa6ca001364178d42069b2809c35a1c3c35079a32107c770e9ffab3901b59af8c8b1 languageName: node linkType: hard -"is-arguments@npm:^1.0.4": - version: 1.1.1 - resolution: "is-arguments@npm:1.1.1" +"fs-minipass@npm:^3.0.0": + version: 3.0.3 + resolution: "fs-minipass@npm:3.0.3" dependencies: - call-bind: ^1.0.2 - has-tostringtag: ^1.0.0 - checksum: 7f02700ec2171b691ef3e4d0e3e6c0ba408e8434368504bb593d0d7c891c0dbfda6d19d30808b904a6cb1929bca648c061ba438c39f296c2a8ca083229c49f27 + minipass: ^7.0.3 + checksum: 8722a41109130851d979222d3ec88aabaceeaaf8f57b2a8f744ef8bd2d1ce95453b04a61daa0078822bc5cd21e008814f06fe6586f56fef511e71b8d2394d802 + languageName: node + linkType: hard + +"fs.realpath@npm:^1.0.0": + version: 1.0.0 + resolution: "fs.realpath@npm:1.0.0" + checksum: 99ddea01a7e75aa276c250a04eedeffe5662bce66c65c07164ad6264f9de18fb21be9433ead460e54cff20e31721c811f4fb5d70591799df5f85dce6d6746fd0 languageName: node linkType: hard -"is-array-buffer@npm:^3.0.1, is-array-buffer@npm:^3.0.2": - version: 3.0.2 - resolution: "is-array-buffer@npm:3.0.2" +"fsevents@npm:~2.1.2": + version: 2.1.3 + resolution: "fsevents@npm:2.1.3" dependencies: - call-bind: ^1.0.2 - get-intrinsic: ^1.2.0 - is-typed-array: ^1.1.10 - checksum: dcac9dda66ff17df9cabdc58214172bf41082f956eab30bb0d86bc0fab1e44b690fc8e1f855cf2481245caf4e8a5a006a982a71ddccec84032ed41f9d8da8c14 + node-gyp: latest + checksum: b5ec0516b44d75b60af5c01ff80a80cd995d175e4640d2a92fbabd02991dd664d76b241b65feef0775c23d531c3c74742c0fbacd6205af812a9c3cef59f04292 + conditions: os=darwin languageName: node linkType: hard -"is-async-function@npm:^2.0.0": - version: 2.0.0 - resolution: "is-async-function@npm:2.0.0" +"fsevents@npm:~2.3.2": + version: 2.3.3 + resolution: "fsevents@npm:2.3.3" dependencies: - has-tostringtag: ^1.0.0 - checksum: e3471d95e6c014bf37cad8a93f2f4b6aac962178e0a5041e8903147166964fdc1c5c1d2ef87e86d77322c370ca18f2ea004fa7420581fa747bcaf7c223069dbd + node-gyp: latest + checksum: 11e6ea6fea15e42461fc55b4b0e4a0a3c654faa567f1877dbd353f39156f69def97a69936d1746619d656c4b93de2238bf731f6085a03a50cabf287c9d024317 + conditions: os=darwin languageName: node linkType: hard -"is-bigint@npm:^1.0.1": - version: 1.0.4 - resolution: "is-bigint@npm:1.0.4" +"fsevents@patch:fsevents@~2.1.2#~builtin": + version: 2.1.3 + resolution: "fsevents@patch:fsevents@npm%3A2.1.3#~builtin::version=2.1.3&hash=18f3a7" dependencies: - has-bigints: ^1.0.1 - checksum: c56edfe09b1154f8668e53ebe8252b6f185ee852a50f9b41e8d921cb2bed425652049fbe438723f6cb48a63ca1aa051e948e7e401e093477c99c84eba244f666 + node-gyp: latest + conditions: os=darwin languageName: node linkType: hard -"is-binary-path@npm:~2.1.0": - version: 2.1.0 - resolution: "is-binary-path@npm:2.1.0" +"fsevents@patch:fsevents@~2.3.2#~builtin": + version: 2.3.3 + resolution: "fsevents@patch:fsevents@npm%3A2.3.3#~builtin::version=2.3.3&hash=18f3a7" dependencies: - binary-extensions: ^2.0.0 - checksum: 84192eb88cff70d320426f35ecd63c3d6d495da9d805b19bc65b518984b7c0760280e57dbf119b7e9be6b161784a5a673ab2c6abe83abb5198a432232ad5b35c + node-gyp: latest + conditions: os=darwin languageName: node linkType: hard -"is-boolean-object@npm:^1.1.0": +"function-bind@npm:^1.1.1, function-bind@npm:^1.1.2": version: 1.1.2 - resolution: "is-boolean-object@npm:1.1.2" - dependencies: - call-bind: ^1.0.2 - has-tostringtag: ^1.0.0 - checksum: c03b23dbaacadc18940defb12c1c0e3aaece7553ef58b162a0f6bba0c2a7e1551b59f365b91e00d2dbac0522392d576ef322628cb1d036a0fe51eb466db67222 + resolution: "function-bind@npm:1.1.2" + checksum: 2b0ff4ce708d99715ad14a6d1f894e2a83242e4a52ccfcefaee5e40050562e5f6dafc1adbb4ce2d4ab47279a45dc736ab91ea5042d843c3c092820dfe032efb1 languageName: node linkType: hard -"is-buffer@npm:^2.0.0": - version: 2.0.5 - resolution: "is-buffer@npm:2.0.5" - checksum: 764c9ad8b523a9f5a32af29bdf772b08eb48c04d2ad0a7240916ac2688c983bf5f8504bf25b35e66240edeb9d9085461f9b5dae1f3d2861c6b06a65fe983de42 +"function.prototype.name@npm:^1.1.5, function.prototype.name@npm:^1.1.6": + version: 1.1.6 + resolution: "function.prototype.name@npm:1.1.6" + dependencies: + call-bind: ^1.0.2 + define-properties: ^1.2.0 + es-abstract: ^1.22.1 + functions-have-names: ^1.2.3 + checksum: 7a3f9bd98adab09a07f6e1f03da03d3f7c26abbdeaeee15223f6c04a9fb5674792bdf5e689dac19b97ac71de6aad2027ba3048a9b883aa1b3173eed6ab07f479 languageName: node linkType: hard -"is-callable@npm:^1.1.3, is-callable@npm:^1.1.4, is-callable@npm:^1.2.7": - version: 1.2.7 - resolution: "is-callable@npm:1.2.7" - checksum: 61fd57d03b0d984e2ed3720fb1c7a897827ea174bd44402878e059542ea8c4aeedee0ea0985998aa5cc2736b2fa6e271c08587addb5b3959ac52cf665173d1ac +"functions-have-names@npm:^1.2.3": + version: 1.2.3 + resolution: "functions-have-names@npm:1.2.3" + checksum: c3f1f5ba20f4e962efb71344ce0a40722163e85bee2101ce25f88214e78182d2d2476aa85ef37950c579eb6cf6ee811c17b3101bb84004bb75655f3e33f3fdb5 languageName: node linkType: hard -"is-core-module@npm:^2.11.0, is-core-module@npm:^2.13.0, is-core-module@npm:^2.13.1": - version: 2.13.1 - resolution: "is-core-module@npm:2.13.1" +"gauge@npm:^3.0.0": + version: 3.0.2 + resolution: "gauge@npm:3.0.2" dependencies: - hasown: ^2.0.0 - checksum: 256559ee8a9488af90e4bad16f5583c6d59e92f0742e9e8bb4331e758521ee86b810b93bae44f390766ffbc518a0488b18d9dab7da9a5ff997d499efc9403f7c + aproba: ^1.0.3 || ^2.0.0 + color-support: ^1.1.2 + console-control-strings: ^1.0.0 + has-unicode: ^2.0.1 + object-assign: ^4.1.1 + signal-exit: ^3.0.0 + string-width: ^4.2.3 + strip-ansi: ^6.0.1 + wide-align: ^1.1.2 + checksum: 81296c00c7410cdd48f997800155fbead4f32e4f82109be0719c63edc8560e6579946cc8abd04205297640691ec26d21b578837fd13a4e96288ab4b40b1dc3e9 languageName: node linkType: hard -"is-date-object@npm:^1.0.1, is-date-object@npm:^1.0.5": - version: 1.0.5 - resolution: "is-date-object@npm:1.0.5" - dependencies: - has-tostringtag: ^1.0.0 - checksum: baa9077cdf15eb7b58c79398604ca57379b2fc4cf9aa7a9b9e295278648f628c9b201400c01c5e0f7afae56507d741185730307cbe7cad3b9f90a77e5ee342fc +"generic-pool@npm:3.4.2": + version: 3.4.2 + resolution: "generic-pool@npm:3.4.2" + checksum: 174a787d8d7dc6b6426efa61e5111a29c32a34c64246837fbda0eb874e943fa5fbbff31535abbd11d6288fb2c4207589e1ec1b60eb9a4025fd774e3acb5bf769 languageName: node linkType: hard -"is-decimal@npm:^2.0.0": - version: 2.0.1 - resolution: "is-decimal@npm:2.0.1" - checksum: 97132de7acdce77caa7b797632970a2ecd649a88e715db0e4dbc00ab0708b5e7574ba5903962c860cd4894a14fd12b100c0c4ac8aed445cf6f55c6cf747a4158 +"get-caller-file@npm:^2.0.1": + version: 2.0.5 + resolution: "get-caller-file@npm:2.0.5" + checksum: b9769a836d2a98c3ee734a88ba712e62703f1df31b94b784762c433c27a386dd6029ff55c2a920c392e33657d80191edbf18c61487e198844844516f843496b9 languageName: node linkType: hard -"is-deflate@npm:^1.0.0": - version: 1.0.0 - resolution: "is-deflate@npm:1.0.0" - checksum: c2f9f2d3db79ac50c5586697d1e69a55282a2b0cc5e437b3c470dd47f24e40b6216dcd7e024511e21381607bf57afa019343e3bd0e08a119032818b596004262 +"get-intrinsic@npm:^1.0.2, get-intrinsic@npm:^1.1.1, get-intrinsic@npm:^1.1.3, get-intrinsic@npm:^1.2.0, get-intrinsic@npm:^1.2.1, get-intrinsic@npm:^1.2.2": + version: 1.2.2 + resolution: "get-intrinsic@npm:1.2.2" + dependencies: + function-bind: ^1.1.2 + has-proto: ^1.0.1 + has-symbols: ^1.0.3 + hasown: ^2.0.0 + checksum: 447ff0724df26829908dc033b62732359596fcf66027bc131ab37984afb33842d9cd458fd6cecadfe7eac22fd8a54b349799ed334cf2726025c921c7250e7417 languageName: node linkType: hard -"is-docker@npm:^2.0.0": - version: 2.2.1 - resolution: "is-docker@npm:2.2.1" - bin: - is-docker: cli.js - checksum: 3fef7ddbf0be25958e8991ad941901bf5922ab2753c46980b60b05c1bf9c9c2402d35e6dc32e4380b980ef5e1970a5d9d5e5aa2e02d77727c3b6b5e918474c56 +"get-nonce@npm:^1.0.0": + version: 1.0.1 + resolution: "get-nonce@npm:1.0.1" + checksum: e2614e43b4694c78277bb61b0f04583d45786881289285c73770b07ded246a98be7e1f78b940c80cbe6f2b07f55f0b724e6db6fd6f1bcbd1e8bdac16521074ed languageName: node linkType: hard -"is-extglob@npm:^2.1.1": - version: 2.1.1 - resolution: "is-extglob@npm:2.1.1" - checksum: df033653d06d0eb567461e58a7a8c9f940bd8c22274b94bf7671ab36df5719791aae15eef6d83bbb5e23283967f2f984b8914559d4449efda578c775c4be6f85 +"get-port-please@npm:^3.1.2": + version: 3.1.2 + resolution: "get-port-please@npm:3.1.2" + checksum: 8e65b56459ead2f31c446d76bb8eb639c33e04e72b07a4dd5d8acc39738f12962591e90b2befecf10492844d0d11c2122c281f5204ee48692d4a8ba0ec68733a languageName: node linkType: hard -"is-finalizationregistry@npm:^1.0.2": - version: 1.0.2 - resolution: "is-finalizationregistry@npm:1.0.2" +"get-stream@npm:^5.0.0": + version: 5.2.0 + resolution: "get-stream@npm:5.2.0" dependencies: - call-bind: ^1.0.2 - checksum: 4f243a8e06228cd45bdab8608d2cb7abfc20f6f0189c8ac21ea8d603f1f196eabd531ce0bb8e08cbab047e9845ef2c191a3761c9a17ad5cabf8b35499c4ad35d + pump: ^3.0.0 + checksum: 8bc1a23174a06b2b4ce600df38d6c98d2ef6d84e020c1ddad632ad75bac4e092eeb40e4c09e0761c35fc2dbc5e7fff5dab5e763a383582c4a167dd69a905bd12 languageName: node linkType: hard -"is-fullwidth-code-point@npm:^3.0.0": - version: 3.0.0 - resolution: "is-fullwidth-code-point@npm:3.0.0" - checksum: 44a30c29457c7fb8f00297bce733f0a64cd22eca270f83e58c105e0d015e45c019491a4ab2faef91ab51d4738c670daff901c799f6a700e27f7314029e99e348 +"get-stream@npm:^6.0.1": + version: 6.0.1 + resolution: "get-stream@npm:6.0.1" + checksum: e04ecece32c92eebf5b8c940f51468cd53554dcbb0ea725b2748be583c9523d00128137966afce410b9b051eb2ef16d657cd2b120ca8edafcf5a65e81af63cad languageName: node linkType: hard -"is-fullwidth-code-point@npm:^4.0.0": - version: 4.0.0 - resolution: "is-fullwidth-code-point@npm:4.0.0" - checksum: 8ae89bf5057bdf4f57b346fb6c55e9c3dd2549983d54191d722d5c739397a903012cc41a04ee3403fd872e811243ef91a7c5196da7b5841dc6b6aae31a264a8d +"get-stream@npm:^8.0.1": + version: 8.0.1 + resolution: "get-stream@npm:8.0.1" + checksum: 01e3d3cf29e1393f05f44d2f00445c5f9ec3d1c49e8179b31795484b9c117f4c695e5e07b88b50785d5c8248a788c85d9913a79266fc77e3ef11f78f10f1b974 languageName: node linkType: hard -"is-generator-function@npm:^1.0.10, is-generator-function@npm:^1.0.7": - version: 1.0.10 - resolution: "is-generator-function@npm:1.0.10" +"get-symbol-description@npm:^1.0.0": + version: 1.0.0 + resolution: "get-symbol-description@npm:1.0.0" dependencies: - has-tostringtag: ^1.0.0 - checksum: d54644e7dbaccef15ceb1e5d91d680eb5068c9ee9f9eb0a9e04173eb5542c9b51b5ab52c5537f5703e48d5fddfd376817c1ca07a84a407b7115b769d4bdde72b + call-bind: ^1.0.2 + get-intrinsic: ^1.1.1 + checksum: 9ceff8fe968f9270a37a1f73bf3f1f7bda69ca80f4f80850670e0e7b9444ff99323f7ac52f96567f8b5f5fbe7ac717a0d81d3407c7313e82810c6199446a5247 languageName: node linkType: hard -"is-glob@npm:^4.0.0, is-glob@npm:^4.0.1, is-glob@npm:^4.0.3, is-glob@npm:~4.0.1": - version: 4.0.3 - resolution: "is-glob@npm:4.0.3" +"get-tsconfig@npm:^4.5.0": + version: 4.7.2 + resolution: "get-tsconfig@npm:4.7.2" dependencies: - is-extglob: ^2.1.1 - checksum: d381c1319fcb69d341cc6e6c7cd588e17cd94722d9a32dbd60660b993c4fb7d0f19438674e68dfec686d09b7c73139c9166b47597f846af387450224a8101ab4 + resolve-pkg-maps: ^1.0.0 + checksum: 172358903250eff0103943f816e8a4e51d29b8e5449058bdf7266714a908a48239f6884308bd3a6ff28b09f692b9533dbebfd183ab63e4e14f073cda91f1bca9 languageName: node linkType: hard -"is-gzip@npm:^1.0.0": - version: 1.0.0 - resolution: "is-gzip@npm:1.0.0" - checksum: 0d28931c1f445fa29c900cf9f48e06e9d1d477a3bf7bd7332e7ce68f1333ccd8cb381de2f0f62a9a262d9c0912608a9a71b4a40e788e201b3dbd67072bb20d86 +"glob-parent@npm:^5.1.2, glob-parent@npm:~5.1.0, glob-parent@npm:~5.1.2": + version: 5.1.2 + resolution: "glob-parent@npm:5.1.2" + dependencies: + is-glob: ^4.0.1 + checksum: f4f2bfe2425296e8a47e36864e4f42be38a996db40420fe434565e4480e3322f18eb37589617a98640c5dc8fdec1a387007ee18dbb1f3f5553409c34d17f425e languageName: node linkType: hard -"is-hexadecimal@npm:^2.0.0": - version: 2.0.1 - resolution: "is-hexadecimal@npm:2.0.1" - checksum: 66a2ea85994c622858f063f23eda506db29d92b52580709eb6f4c19550552d4dcf3fb81952e52f7cf972097237959e00adc7bb8c9400cd12886e15bf06145321 +"glob-parent@npm:^6.0.1, glob-parent@npm:^6.0.2": + version: 6.0.2 + resolution: "glob-parent@npm:6.0.2" + dependencies: + is-glob: ^4.0.3 + checksum: c13ee97978bef4f55106b71e66428eb1512e71a7466ba49025fc2aec59a5bfb0954d5abd58fc5ee6c9b076eef4e1f6d3375c2e964b88466ca390da4419a786a8 languageName: node linkType: hard -"is-interactive@npm:^1.0.0": - version: 1.0.0 - resolution: "is-interactive@npm:1.0.0" - checksum: 824808776e2d468b2916cdd6c16acacebce060d844c35ca6d82267da692e92c3a16fdba624c50b54a63f38bdc4016055b6f443ce57d7147240de4f8cdabaf6f9 +"glob-to-regexp@npm:^0.4.1": + version: 0.4.1 + resolution: "glob-to-regexp@npm:0.4.1" + checksum: e795f4e8f06d2a15e86f76e4d92751cf8bbfcf0157cea5c2f0f35678a8195a750b34096b1256e436f0cebc1883b5ff0888c47348443e69546a5a87f9e1eb1167 languageName: node linkType: hard -"is-lambda@npm:^1.0.1": - version: 1.0.1 - resolution: "is-lambda@npm:1.0.1" - checksum: 93a32f01940220532e5948538699ad610d5924ac86093fcee83022252b363eb0cc99ba53ab084a04e4fb62bf7b5731f55496257a4c38adf87af9c4d352c71c35 +"glob@npm:7.1.7": + version: 7.1.7 + resolution: "glob@npm:7.1.7" + dependencies: + fs.realpath: ^1.0.0 + inflight: ^1.0.4 + inherits: 2 + minimatch: ^3.0.4 + once: ^1.3.0 + path-is-absolute: ^1.0.0 + checksum: b61f48973bbdcf5159997b0874a2165db572b368b931135832599875919c237fc05c12984e38fe828e69aa8a921eb0e8a4997266211c517c9cfaae8a93988bb8 languageName: node linkType: hard -"is-map@npm:^2.0.1": - version: 2.0.2 - resolution: "is-map@npm:2.0.2" - checksum: ace3d0ecd667bbdefdb1852de601268f67f2db725624b1958f279316e13fecb8fa7df91fd60f690d7417b4ec180712f5a7ee967008e27c65cfd475cc84337728 +"glob@npm:^10.2.2, glob@npm:^10.3.10": + version: 10.3.10 + resolution: "glob@npm:10.3.10" + dependencies: + foreground-child: ^3.1.0 + jackspeak: ^2.3.5 + minimatch: ^9.0.1 + minipass: ^5.0.0 || ^6.0.2 || ^7.0.0 + path-scurry: ^1.10.1 + bin: + glob: dist/esm/bin.mjs + checksum: 4f2fe2511e157b5a3f525a54092169a5f92405f24d2aed3142f4411df328baca13059f4182f1db1bf933e2c69c0bd89e57ae87edd8950cba8c7ccbe84f721cf3 languageName: node linkType: hard -"is-negative-zero@npm:^2.0.2": - version: 2.0.2 - resolution: "is-negative-zero@npm:2.0.2" - checksum: f3232194c47a549da60c3d509c9a09be442507616b69454716692e37ae9f37c4dea264fb208ad0c9f3efd15a796a46b79df07c7e53c6227c32170608b809149a +"glob@npm:^7.1.3": + version: 7.2.3 + resolution: "glob@npm:7.2.3" + dependencies: + fs.realpath: ^1.0.0 + inflight: ^1.0.4 + inherits: 2 + minimatch: ^3.1.1 + once: ^1.3.0 + path-is-absolute: ^1.0.0 + checksum: 29452e97b38fa704dabb1d1045350fb2467cf0277e155aa9ff7077e90ad81d1ea9d53d3ee63bd37c05b09a065e90f16aec4a65f5b8de401d1dac40bc5605d133 languageName: node linkType: hard -"is-number-object@npm:^1.0.4": - version: 1.0.7 - resolution: "is-number-object@npm:1.0.7" - dependencies: - has-tostringtag: ^1.0.0 - checksum: d1e8d01bb0a7134c74649c4e62da0c6118a0bfc6771ea3c560914d52a627873e6920dd0fd0ebc0e12ad2ff4687eac4c308f7e80320b973b2c8a2c8f97a7524f7 +"globals@npm:^11.1.0": + version: 11.12.0 + resolution: "globals@npm:11.12.0" + checksum: 67051a45eca3db904aee189dfc7cd53c20c7d881679c93f6146ddd4c9f4ab2268e68a919df740d39c71f4445d2b38ee360fc234428baea1dbdfe68bbcb46979e languageName: node linkType: hard -"is-number@npm:^7.0.0": - version: 7.0.0 - resolution: "is-number@npm:7.0.0" - checksum: 456ac6f8e0f3111ed34668a624e45315201dff921e5ac181f8ec24923b99e9f32ca1a194912dc79d539c97d33dba17dc635202ff0b2cf98326f608323276d27a +"globals@npm:^13.15.0, globals@npm:^13.19.0": + version: 13.24.0 + resolution: "globals@npm:13.24.0" + dependencies: + type-fest: ^0.20.2 + checksum: 56066ef058f6867c04ff203b8a44c15b038346a62efbc3060052a1016be9f56f4cf0b2cd45b74b22b81e521a889fc7786c73691b0549c2f3a6e825b3d394f43c languageName: node linkType: hard -"is-plain-obj@npm:2.1.0": - version: 2.1.0 - resolution: "is-plain-obj@npm:2.1.0" - checksum: cec9100678b0a9fe0248a81743041ed990c2d4c99f893d935545cfbc42876cbe86d207f3b895700c690ad2fa520e568c44afc1605044b535a7820c1d40e38daa +"globalthis@npm:^1.0.3": + version: 1.0.3 + resolution: "globalthis@npm:1.0.3" + dependencies: + define-properties: ^1.1.3 + checksum: fbd7d760dc464c886d0196166d92e5ffb4c84d0730846d6621a39fbbc068aeeb9c8d1421ad330e94b7bca4bb4ea092f5f21f3d36077812af5d098b4dc006c998 languageName: node linkType: hard -"is-plain-obj@npm:^3.0.0": - version: 3.0.0 - resolution: "is-plain-obj@npm:3.0.0" - checksum: a6ebdf8e12ab73f33530641972a72a4b8aed6df04f762070d823808303e4f76d87d5ea5bd76f96a7bbe83d93f04ac7764429c29413bd9049853a69cb630fb21c +"globby@npm:^11.1.0": + version: 11.1.0 + resolution: "globby@npm:11.1.0" + dependencies: + array-union: ^2.1.0 + dir-glob: ^3.0.1 + fast-glob: ^3.2.9 + ignore: ^5.2.0 + merge2: ^1.4.1 + slash: ^3.0.0 + checksum: b4be8885e0cfa018fc783792942d53926c35c50b3aefd3fdcfb9d22c627639dc26bd2327a40a0b74b074100ce95bb7187bfeae2f236856aa3de183af7a02aea6 languageName: node linkType: hard -"is-plain-obj@npm:^4.0.0": - version: 4.1.0 - resolution: "is-plain-obj@npm:4.1.0" - checksum: 6dc45da70d04a81f35c9310971e78a6a3c7a63547ef782e3a07ee3674695081b6ca4e977fbb8efc48dae3375e0b34558d2bcd722aec9bddfa2d7db5b041be8ce +"goober@npm:^2.1.10": + version: 2.1.14 + resolution: "goober@npm:2.1.14" + peerDependencies: + csstype: ^3.0.10 + checksum: 78978b7192d6a1af5cfbf1fd64b661b5f53ee6c733554b1f1b2ad3e1e2c979847fc080434390647640bb8358c0b193895d0007432c0886d12001f02f8f56b5e6 languageName: node linkType: hard -"is-reference@npm:^3.0.0": - version: 3.0.2 - resolution: "is-reference@npm:3.0.2" +"gopd@npm:^1.0.1": + version: 1.0.1 + resolution: "gopd@npm:1.0.1" dependencies: - "@types/estree": "*" - checksum: ac3bf5626fe9d0afbd7454760d73c47f16b9f471401b9749721ad3b66f0a39644390382acf88ca9d029c95782c1e2ec65662855e3ba91acf52d82231247a7fd3 + get-intrinsic: ^1.1.3 + checksum: a5ccfb8806e0917a94e0b3de2af2ea4979c1da920bc381667c260e00e7cafdbe844e2cb9c5bcfef4e5412e8bf73bab837285bc35c7ba73aaaf0134d4583393a6 languageName: node linkType: hard -"is-regex@npm:^1.1.4": - version: 1.1.4 - resolution: "is-regex@npm:1.1.4" - dependencies: - call-bind: ^1.0.2 - has-tostringtag: ^1.0.0 - checksum: 362399b33535bc8f386d96c45c9feb04cf7f8b41c182f54174c1a45c9abbbe5e31290bbad09a458583ff6bf3b2048672cdb1881b13289569a7c548370856a652 +"graceful-fs@npm:^4.1.2, graceful-fs@npm:^4.1.6, graceful-fs@npm:^4.2.0, graceful-fs@npm:^4.2.11, graceful-fs@npm:^4.2.4, graceful-fs@npm:^4.2.6, graceful-fs@npm:^4.2.9": + version: 4.2.11 + resolution: "graceful-fs@npm:4.2.11" + checksum: ac85f94da92d8eb6b7f5a8b20ce65e43d66761c55ce85ac96df6865308390da45a8d3f0296dd3a663de65d30ba497bd46c696cc1e248c72b13d6d567138a4fc7 languageName: node linkType: hard -"is-set@npm:^2.0.1": - version: 2.0.2 - resolution: "is-set@npm:2.0.2" - checksum: b64343faf45e9387b97a6fd32be632ee7b269bd8183701f3b3f5b71a7cf00d04450ed8669d0bd08753e08b968beda96fca73a10fd0ff56a32603f64deba55a57 +"grapheme-splitter@npm:^1.0.4": + version: 1.0.4 + resolution: "grapheme-splitter@npm:1.0.4" + checksum: 0c22ec54dee1b05cd480f78cf14f732cb5b108edc073572c4ec205df4cd63f30f8db8025afc5debc8835a8ddeacf648a1c7992fe3dcd6ad38f9a476d84906620 languageName: node linkType: hard -"is-shared-array-buffer@npm:^1.0.2": - version: 1.0.2 - resolution: "is-shared-array-buffer@npm:1.0.2" +"h3@npm:^1.10.1, h3@npm:^1.8.2": + version: 1.10.1 + resolution: "h3@npm:1.10.1" dependencies: - call-bind: ^1.0.2 - checksum: 9508929cf14fdc1afc9d61d723c6e8d34f5e117f0bffda4d97e7a5d88c3a8681f633a74f8e3ad1fe92d5113f9b921dc5ca44356492079612f9a247efbce7032a + cookie-es: ^1.0.0 + defu: ^6.1.4 + destr: ^2.0.2 + iron-webcrypto: ^1.0.0 + ohash: ^1.1.3 + radix3: ^1.1.0 + ufo: ^1.3.2 + uncrypto: ^0.1.3 + unenv: ^1.9.0 + checksum: f2849e08610adc6d65259142336cfee0ad42d6e1342d87f396a6b53a8bb8e9919dac5263e8403d5a1d0b8774150b96f9bf2b3c6c836017ca80152559c0195b80 languageName: node linkType: hard -"is-stream@npm:^2.0.0": - version: 2.0.1 - resolution: "is-stream@npm:2.0.1" - checksum: b8e05ccdf96ac330ea83c12450304d4a591f9958c11fd17bed240af8d5ffe08aedafa4c0f4cfccd4d28dc9d4d129daca1023633d5c11601a6cbc77521f6fae66 +"has-bigints@npm:^1.0.1, has-bigints@npm:^1.0.2": + version: 1.0.2 + resolution: "has-bigints@npm:1.0.2" + checksum: 390e31e7be7e5c6fe68b81babb73dfc35d413604d7ee5f56da101417027a4b4ce6a27e46eff97ad040c835b5d228676eae99a9b5c3bc0e23c8e81a49241ff45b languageName: node linkType: hard -"is-stream@npm:^3.0.0": +"has-flag@npm:^3.0.0": version: 3.0.0 - resolution: "is-stream@npm:3.0.0" - checksum: 172093fe99119ffd07611ab6d1bcccfe8bc4aa80d864b15f43e63e54b7abc71e779acd69afdb854c4e2a67fdc16ae710e370eda40088d1cfc956a50ed82d8f16 + resolution: "has-flag@npm:3.0.0" + checksum: 4a15638b454bf086c8148979aae044dd6e39d63904cd452d970374fa6a87623423da485dfb814e7be882e05c096a7ccf1ebd48e7e7501d0208d8384ff4dea73b languageName: node linkType: hard -"is-string@npm:^1.0.5, is-string@npm:^1.0.7": - version: 1.0.7 - resolution: "is-string@npm:1.0.7" - dependencies: - has-tostringtag: ^1.0.0 - checksum: 323b3d04622f78d45077cf89aab783b2f49d24dc641aa89b5ad1a72114cfeff2585efc8c12ef42466dff32bde93d839ad321b26884cf75e5a7892a938b089989 +"has-flag@npm:^4.0.0": + version: 4.0.0 + resolution: "has-flag@npm:4.0.0" + checksum: 261a1357037ead75e338156b1f9452c016a37dcd3283a972a30d9e4a87441ba372c8b81f818cd0fbcd9c0354b4ae7e18b9e1afa1971164aef6d18c2b6095a8ad languageName: node linkType: hard -"is-symbol@npm:^1.0.2, is-symbol@npm:^1.0.3": - version: 1.0.4 - resolution: "is-symbol@npm:1.0.4" +"has-property-descriptors@npm:^1.0.0, has-property-descriptors@npm:^1.0.1": + version: 1.0.1 + resolution: "has-property-descriptors@npm:1.0.1" dependencies: - has-symbols: ^1.0.2 - checksum: 92805812ef590738d9de49d677cd17dfd486794773fb6fa0032d16452af46e9b91bb43ffe82c983570f015b37136f4b53b28b8523bfb10b0ece7a66c31a54510 + get-intrinsic: ^1.2.2 + checksum: 2bcc6bf6ec6af375add4e4b4ef586e43674850a91ad4d46666d0b28ba8e1fd69e424c7677d24d60f69470ad0afaa2f3197f508b20b0bb7dd99a8ab77ffc4b7c4 languageName: node linkType: hard -"is-typed-array@npm:^1.1.10, is-typed-array@npm:^1.1.12, is-typed-array@npm:^1.1.3, is-typed-array@npm:^1.1.9": - version: 1.1.12 - resolution: "is-typed-array@npm:1.1.12" - dependencies: - which-typed-array: ^1.1.11 - checksum: 4c89c4a3be07186caddadf92197b17fda663a9d259ea0d44a85f171558270d36059d1c386d34a12cba22dfade5aba497ce22778e866adc9406098c8fc4771796 +"has-proto@npm:^1.0.1": + version: 1.0.1 + resolution: "has-proto@npm:1.0.1" + checksum: febc5b5b531de8022806ad7407935e2135f1cc9e64636c3916c6842bd7995994ca3b29871ecd7954bd35f9e2986c17b3b227880484d22259e2f8e6ce63fd383e languageName: node linkType: hard -"is-typedarray@npm:1.0.0, is-typedarray@npm:^1.0.0": - version: 1.0.0 - resolution: "is-typedarray@npm:1.0.0" - checksum: 3508c6cd0a9ee2e0df2fa2e9baabcdc89e911c7bd5cf64604586697212feec525aa21050e48affb5ffc3df20f0f5d2e2cf79b08caa64e1ccc9578e251763aef7 +"has-symbols@npm:^1.0.2, has-symbols@npm:^1.0.3": + version: 1.0.3 + resolution: "has-symbols@npm:1.0.3" + checksum: a054c40c631c0d5741a8285010a0777ea0c068f99ed43e5d6eb12972da223f8af553a455132fdb0801bdcfa0e0f443c0c03a68d8555aa529b3144b446c3f2410 languageName: node linkType: hard -"is-unicode-supported@npm:^0.1.0": - version: 0.1.0 - resolution: "is-unicode-supported@npm:0.1.0" - checksum: a2aab86ee7712f5c2f999180daaba5f361bdad1efadc9610ff5b8ab5495b86e4f627839d085c6530363c6d6d4ecbde340fb8e54bdb83da4ba8e0865ed5513c52 +"has-tostringtag@npm:^1.0.0": + version: 1.0.0 + resolution: "has-tostringtag@npm:1.0.0" + dependencies: + has-symbols: ^1.0.2 + checksum: cc12eb28cb6ae22369ebaad3a8ab0799ed61270991be88f208d508076a1e99abe4198c965935ce85ea90b60c94ddda73693b0920b58e7ead048b4a391b502c1c languageName: node linkType: hard -"is-weakmap@npm:^2.0.1": +"has-unicode@npm:^2.0.1": version: 2.0.1 - resolution: "is-weakmap@npm:2.0.1" - checksum: 1222bb7e90c32bdb949226e66d26cb7bce12e1e28e3e1b40bfa6b390ba3e08192a8664a703dff2a00a84825f4e022f9cd58c4599ff9981ab72b1d69479f4f7f6 - languageName: node - linkType: hard - -"is-weakref@npm:^1.0.2": - version: 1.0.2 - resolution: "is-weakref@npm:1.0.2" - dependencies: - call-bind: ^1.0.2 - checksum: 95bd9a57cdcb58c63b1c401c60a474b0f45b94719c30f548c891860f051bc2231575c290a6b420c6bc6e7ed99459d424c652bd5bf9a1d5259505dc35b4bf83de + resolution: "has-unicode@npm:2.0.1" + checksum: 1eab07a7436512db0be40a710b29b5dc21fa04880b7f63c9980b706683127e3c1b57cb80ea96d47991bdae2dfe479604f6a1ba410106ee1046a41d1bd0814400 languageName: node linkType: hard -"is-weakset@npm:^2.0.1": - version: 2.0.2 - resolution: "is-weakset@npm:2.0.2" +"hash.js@npm:1.1.7, hash.js@npm:^1.0.0, hash.js@npm:^1.0.3, hash.js@npm:^1.1.7": + version: 1.1.7 + resolution: "hash.js@npm:1.1.7" dependencies: - call-bind: ^1.0.2 - get-intrinsic: ^1.1.1 - checksum: 5d8698d1fa599a0635d7ca85be9c26d547b317ed8fd83fc75f03efbe75d50001b5eececb1e9971de85fcde84f69ae6f8346bc92d20d55d46201d328e4c74a367 + inherits: ^2.0.3 + minimalistic-assert: ^1.0.1 + checksum: e350096e659c62422b85fa508e4b3669017311aa4c49b74f19f8e1bc7f3a54a584fdfd45326d4964d6011f2b2d882e38bea775a96046f2a61b7779a979629d8f languageName: node linkType: hard -"is-wsl@npm:^2.2.0": - version: 2.2.0 - resolution: "is-wsl@npm:2.2.0" +"hasown@npm:^2.0.0": + version: 2.0.0 + resolution: "hasown@npm:2.0.0" dependencies: - is-docker: ^2.0.0 - checksum: 20849846ae414997d290b75e16868e5261e86ff5047f104027026fd61d8b5a9b0b3ade16239f35e1a067b3c7cc02f70183cb661010ed16f4b6c7c93dad1b19d8 + function-bind: ^1.1.2 + checksum: 6151c75ca12554565098641c98a40f4cc86b85b0fd5b6fe92360967e4605a4f9610f7757260b4e8098dd1c2ce7f4b095f2006fe72a570e3b6d2d28de0298c176 languageName: node linkType: hard -"isarray@npm:0.0.1": - version: 0.0.1 - resolution: "isarray@npm:0.0.1" - checksum: 49191f1425681df4a18c2f0f93db3adb85573bcdd6a4482539d98eac9e705d8961317b01175627e860516a2fc45f8f9302db26e5a380a97a520e272e2a40a8d4 +"hey-listen@npm:^1.0.8": + version: 1.0.8 + resolution: "hey-listen@npm:1.0.8" + checksum: 6bad60b367688f5348e25e7ca3276a74b59ac5a09b0455e6ff8ab7d4a9e38cd2116c708a7dcd8a954d27253ce1d8717ec891d175723ea739885b828cf44e4072 languageName: node linkType: hard -"isarray@npm:^2.0.5": - version: 2.0.5 - resolution: "isarray@npm:2.0.5" - checksum: bd5bbe4104438c4196ba58a54650116007fa0262eccef13a4c55b2e09a5b36b59f1e75b9fcc49883dd9d4953892e6fc007eef9e9155648ceea036e184b0f930a +"hmac-drbg@npm:^1.0.1": + version: 1.0.1 + resolution: "hmac-drbg@npm:1.0.1" + dependencies: + hash.js: ^1.0.3 + minimalistic-assert: ^1.0.0 + minimalistic-crypto-utils: ^1.0.1 + checksum: bd30b6a68d7f22d63f10e1888aee497d7c2c5c0bb469e66bbdac99f143904d1dfe95f8131f95b3e86c86dd239963c9d972fcbe147e7cffa00e55d18585c43fe0 languageName: node linkType: hard -"isarray@npm:~1.0.0": - version: 1.0.0 - resolution: "isarray@npm:1.0.0" - checksum: f032df8e02dce8ec565cf2eb605ea939bdccea528dbcf565cdf92bfa2da9110461159d86a537388ef1acef8815a330642d7885b29010e8f7eac967c9993b65ab +"http-cache-semantics@npm:^4.1.1": + version: 4.1.1 + resolution: "http-cache-semantics@npm:4.1.1" + checksum: 83ac0bc60b17a3a36f9953e7be55e5c8f41acc61b22583060e8dedc9dd5e3607c823a88d0926f9150e571f90946835c7fe150732801010845c72cd8bbff1a236 languageName: node linkType: hard -"isexe@npm:^2.0.0": - version: 2.0.0 - resolution: "isexe@npm:2.0.0" - checksum: 26bf6c5480dda5161c820c5b5c751ae1e766c587b1f951ea3fcfc973bafb7831ae5b54a31a69bd670220e42e99ec154475025a468eae58ea262f813fdc8d1c62 +"http-errors@npm:1.7.3": + version: 1.7.3 + resolution: "http-errors@npm:1.7.3" + dependencies: + depd: ~1.1.2 + inherits: 2.0.4 + setprototypeof: 1.1.1 + statuses: ">= 1.5.0 < 2" + toidentifier: 1.0.0 + checksum: a59f359473f4b3ea78305beee90d186268d6075432622a46fb7483059068a2dd4c854a20ac8cd438883127e06afb78c1309168bde6cdfeed1e3700eb42487d99 languageName: node linkType: hard -"isexe@npm:^3.1.1": - version: 3.1.1 - resolution: "isexe@npm:3.1.1" - checksum: 7fe1931ee4e88eb5aa524cd3ceb8c882537bc3a81b02e438b240e47012eef49c86904d0f0e593ea7c3a9996d18d0f1f3be8d3eaa92333977b0c3a9d353d5563e +"http-errors@npm:~1.4.0": + version: 1.4.0 + resolution: "http-errors@npm:1.4.0" + dependencies: + inherits: 2.0.1 + statuses: ">= 1.2.1 < 2" + checksum: e25e56567f696f38009bdeeebf6ad0b5706113f21ae2241d4f1438ce303182b649187c5a3b68c4c3a07cd4df7192d58d22186a0b491c638bf3a7ea2626448681 languageName: node linkType: hard -"isomorphic-ws@npm:^4.0.1": - version: 4.0.1 - resolution: "isomorphic-ws@npm:4.0.1" - peerDependencies: - ws: "*" - checksum: d7190eadefdc28bdb93d67b5f0c603385aaf87724fa2974abb382ac1ec9756ed2cfb27065cbe76122879c2d452e2982bc4314317f3d6c737ddda6c047328771a +"http-proxy-agent@npm:^7.0.0": + version: 7.0.0 + resolution: "http-proxy-agent@npm:7.0.0" + dependencies: + agent-base: ^7.1.0 + debug: ^4.3.4 + checksum: 48d4fac997917e15f45094852b63b62a46d0c8a4f0b9c6c23ca26d27b8df8d178bed88389e604745e748bd9a01f5023e25093722777f0593c3f052009ff438b6 languageName: node linkType: hard -"isows@npm:1.0.3": - version: 1.0.3 - resolution: "isows@npm:1.0.3" - peerDependencies: - ws: "*" - checksum: 9cacd5cf59f67deb51e825580cd445ab1725ecb05a67c704050383fb772856f3cd5e7da8ad08f5a3bd2823680d77d099459d0c6a7037972a74d6429af61af440 +"http-shutdown@npm:^1.2.2": + version: 1.2.2 + resolution: "http-shutdown@npm:1.2.2" + checksum: 5dccd94f4fe4f51f9cbd7ec4586121160cd6470728e581662ea8032724440d891c4c92b8210b871ac468adadb3c99c40098ad0f752a781a550abae49dfa26206 languageName: node linkType: hard -"iterator.prototype@npm:^1.1.2": - version: 1.1.2 - resolution: "iterator.prototype@npm:1.1.2" +"https-proxy-agent@npm:^5.0.0": + version: 5.0.1 + resolution: "https-proxy-agent@npm:5.0.1" dependencies: - define-properties: ^1.2.1 - get-intrinsic: ^1.2.1 - has-symbols: ^1.0.3 - reflect.getprototypeof: ^1.0.4 - set-function-name: ^2.0.1 - checksum: d8a507e2ccdc2ce762e8a1d3f4438c5669160ac72b88b648e59a688eec6bc4e64b22338e74000518418d9e693faf2a092d2af21b9ec7dbf7763b037a54701168 + agent-base: 6 + debug: 4 + checksum: 571fccdf38184f05943e12d37d6ce38197becdd69e58d03f43637f7fa1269cf303a7d228aa27e5b27bbd3af8f09fd938e1c91dcfefff2df7ba77c20ed8dfc765 languageName: node linkType: hard -"jackspeak@npm:^2.3.5": - version: 2.3.6 - resolution: "jackspeak@npm:2.3.6" +"https-proxy-agent@npm:^7.0.1": + version: 7.0.2 + resolution: "https-proxy-agent@npm:7.0.2" dependencies: - "@isaacs/cliui": ^8.0.2 - "@pkgjs/parseargs": ^0.11.0 - dependenciesMeta: - "@pkgjs/parseargs": - optional: true - checksum: 57d43ad11eadc98cdfe7496612f6bbb5255ea69fe51ea431162db302c2a11011642f50cfad57288bd0aea78384a0612b16e131944ad8ecd09d619041c8531b54 + agent-base: ^7.0.2 + debug: 4 + checksum: 088969a0dd476ea7a0ed0a2cf1283013682b08f874c3bc6696c83fa061d2c157d29ef0ad3eb70a2046010bb7665573b2388d10fdcb3e410a66995e5248444292 languageName: node linkType: hard -"javascript-natural-sort@npm:0.7.1": - version: 0.7.1 - resolution: "javascript-natural-sort@npm:0.7.1" - checksum: 161e2c512cc7884bc055a582c6645d9032cab88497a76123d73cb23bfb03d97a04cf7772ecdb8bd3366fc07192c2f996366f479f725c23ef073fffe03d6a586a +"human-signals@npm:^1.1.1": + version: 1.1.1 + resolution: "human-signals@npm:1.1.1" + checksum: d587647c9e8ec24e02821b6be7de5a0fc37f591f6c4e319b3054b43fd4c35a70a94c46fc74d8c1a43c47fde157d23acd7421f375e1c1365b09a16835b8300205 languageName: node linkType: hard -"javascript-stringify@npm:^2.0.1": - version: 2.1.0 - resolution: "javascript-stringify@npm:2.1.0" - checksum: 009981ec84299da88795fc764221ed213e3d52251cc93a396430a7a02ae09f1163a9be36a36808689681a8e6113cf00fe97ec2eea2552df48111f79be59e9358 +"human-signals@npm:^4.3.0": + version: 4.3.1 + resolution: "human-signals@npm:4.3.1" + checksum: 6f12958df3f21b6fdaf02d90896c271df00636a31e2bbea05bddf817a35c66b38a6fdac5863e2df85bd52f34958997f1f50350ff97249e1dff8452865d5235d1 languageName: node linkType: hard -"jayson@npm:^4.1.0": - version: 4.1.0 - resolution: "jayson@npm:4.1.0" - dependencies: - "@types/connect": ^3.4.33 - "@types/node": ^12.12.54 - "@types/ws": ^7.4.4 - JSONStream: ^1.3.5 - commander: ^2.20.3 - delay: ^5.0.0 - es6-promisify: ^5.0.0 - eyes: ^0.1.8 - isomorphic-ws: ^4.0.1 - json-stringify-safe: ^5.0.1 - uuid: ^8.3.2 - ws: ^7.4.5 - bin: - jayson: bin/jayson.js - checksum: 86464322fbdc6db65d2bb4fc278cb6c86fad5c2a506065490d39459f09ba0d30f2b4fb740b33828a1424791419b6c8bd295dc54d361a4ad959bf70cc62b1ca7e +"human-signals@npm:^5.0.0": + version: 5.0.0 + resolution: "human-signals@npm:5.0.0" + checksum: 6504560d5ed91444f16bea3bd9dfc66110a339442084e56c3e7fa7bbdf3f406426d6563d662bdce67064b165eac31eeabfc0857ed170aaa612cf14ec9f9a464c languageName: node linkType: hard -"jiti@npm:^1.19.1, jiti@npm:^1.20.0": - version: 1.21.0 - resolution: "jiti@npm:1.21.0" +"husky@npm:~8.0.3": + version: 8.0.3 + resolution: "husky@npm:8.0.3" bin: - jiti: bin/jiti.js - checksum: a7bd5d63921c170eaec91eecd686388181c7828e1fa0657ab374b9372bfc1f383cf4b039e6b272383d5cb25607509880af814a39abdff967322459cca41f2961 + husky: lib/bin.js + checksum: 837bc7e4413e58c1f2946d38fb050f5d7324c6f16b0fd66411ffce5703b294bd21429e8ba58711cd331951ee86ed529c5be4f76805959ff668a337dbfa82a1b0 languageName: node linkType: hard -"js-sdsl@npm:^4.1.4": - version: 4.4.2 - resolution: "js-sdsl@npm:4.4.2" - checksum: ba705adc1788bf3c6f6c8e5077824f2bb4f0acab5a984420ce5cc492c7fff3daddc26335ad2c9a67d4f5e3241ec790f9e5b72a625adcf20cf321d2fd85e62b8b +"i18n-js@npm:^4.3.2": + version: 4.3.2 + resolution: "i18n-js@npm:4.3.2" + dependencies: + bignumber.js: "*" + lodash: "*" + make-plural: "*" + checksum: 08a051dba75d93447e2021c1feb92f34c9034b5a818957885ea19ac58954d764c848c4deaaf46ada3e15d51f61ad9f7e0bf4ddffa3c765871ff1b26638ca0a8f languageName: node linkType: hard -"js-sha3@npm:0.8.0": - version: 0.8.0 - resolution: "js-sha3@npm:0.8.0" - checksum: 75df77c1fc266973f06cce8309ce010e9e9f07ec35ab12022ed29b7f0d9c8757f5a73e1b35aa24840dced0dea7059085aa143d817aea9e188e2a80d569d9adce +"iconv-lite@npm:0.4.24": + version: 0.4.24 + resolution: "iconv-lite@npm:0.4.24" + dependencies: + safer-buffer: ">= 2.1.2 < 3" + checksum: bd9f120f5a5b306f0bc0b9ae1edeb1577161503f5f8252a20f1a9e56ef8775c9959fd01c55f2d3a39d9a8abaf3e30c1abeb1895f367dcbbe0a8fd1c9ca01c4f6 languageName: node linkType: hard -"js-tokens@npm:^3.0.0 || ^4.0.0, js-tokens@npm:^4.0.0": - version: 4.0.0 - resolution: "js-tokens@npm:4.0.0" - checksum: 8a95213a5a77deb6cbe94d86340e8d9ace2b93bc367790b260101d2f36a2eaf4e4e22d9fa9cf459b38af3a32fb4190e638024cf82ec95ef708680e405ea7cc78 +"iconv-lite@npm:^0.6.2": + version: 0.6.3 + resolution: "iconv-lite@npm:0.6.3" + dependencies: + safer-buffer: ">= 2.1.2 < 3.0.0" + checksum: 3f60d47a5c8fc3313317edfd29a00a692cc87a19cac0159e2ce711d0ebc9019064108323b5e493625e25594f11c6236647d8e256fbe7a58f4a3b33b89e6d30bf languageName: node linkType: hard -"js-yaml@npm:^4.0.0, js-yaml@npm:^4.1.0": - version: 4.1.0 - resolution: "js-yaml@npm:4.1.0" - dependencies: - argparse: ^2.0.1 - bin: - js-yaml: bin/js-yaml.js - checksum: c7830dfd456c3ef2c6e355cc5a92e6700ceafa1d14bba54497b34a99f0376cecbb3e9ac14d3e5849b426d5a5140709a66237a8c991c675431271c4ce5504151a +"idb-keyval@npm:^6.2.1": + version: 6.2.1 + resolution: "idb-keyval@npm:6.2.1" + checksum: 7c0836f832096086e99258167740181132a71dd2694c8b8454a4f5ec69114ba6d70983115153306f0b6de1c8d3bad04f67eed3dff8f50c96815b9985d6d78470 languageName: node linkType: hard -"jsbi@npm:^3.1.4": - version: 3.2.5 - resolution: "jsbi@npm:3.2.5" - checksum: 642d1bb139ad1c1e96c4907eb159565e980a0d168487626b493d0d0b7b341da0e43001089d3b21703fe17b18a7a6c0f42c92026f71d54471ed0a0d1b3015ec0f +"ieee754@npm:^1.2.1": + version: 1.2.1 + resolution: "ieee754@npm:1.2.1" + checksum: 5144c0c9815e54ada181d80a0b810221a253562422e7c6c3a60b1901154184f49326ec239d618c416c1c5945a2e197107aee8d986a3dd836b53dffefd99b5e7e languageName: node linkType: hard -"jsesc@npm:3.0.2": - version: 3.0.2 - resolution: "jsesc@npm:3.0.2" - bin: - jsesc: bin/jsesc - checksum: a36d3ca40574a974d9c2063bf68c2b6141c20da8f2a36bd3279fc802563f35f0527a6c828801295bdfb2803952cf2cf387786c2c90ed564f88d5782475abfe3c +"ignore@npm:^5.2.0": + version: 5.3.1 + resolution: "ignore@npm:5.3.1" + checksum: 71d7bb4c1dbe020f915fd881108cbe85a0db3d636a0ea3ba911393c53946711d13a9b1143c7e70db06d571a5822c0a324a6bcde5c9904e7ca5047f01f1bf8cd3 languageName: node linkType: hard -"jsesc@npm:^2.5.1": - version: 2.5.2 - resolution: "jsesc@npm:2.5.2" - bin: - jsesc: bin/jsesc - checksum: 4dc190771129e12023f729ce20e1e0bfceac84d73a85bc3119f7f938843fe25a4aeccb54b6494dce26fcf263d815f5f31acdefac7cc9329efb8422a4f4d9fa9d +"import-fresh@npm:^3.0.0, import-fresh@npm:^3.2.1": + version: 3.3.0 + resolution: "import-fresh@npm:3.3.0" + dependencies: + parent-module: ^1.0.0 + resolve-from: ^4.0.0 + checksum: 2cacfad06e652b1edc50be650f7ec3be08c5e5a6f6d12d035c440a42a8cc028e60a5b99ca08a77ab4d6b1346da7d971915828f33cdab730d3d42f08242d09baa languageName: node linkType: hard -"jsesc@npm:~0.5.0": - version: 0.5.0 - resolution: "jsesc@npm:0.5.0" - bin: - jsesc: bin/jsesc - checksum: b8b44cbfc92f198ad972fba706ee6a1dfa7485321ee8c0b25f5cedd538dcb20cde3197de16a7265430fce8277a12db066219369e3d51055038946039f6e20e17 +"imurmurhash@npm:^0.1.4": + version: 0.1.4 + resolution: "imurmurhash@npm:0.1.4" + checksum: 7cae75c8cd9a50f57dadd77482359f659eaebac0319dd9368bcd1714f55e65badd6929ca58569da2b6494ef13fdd5598cd700b1eba23f8b79c5f19d195a3ecf7 languageName: node linkType: hard -"json-buffer@npm:3.0.1": - version: 3.0.1 - resolution: "json-buffer@npm:3.0.1" - checksum: 9026b03edc2847eefa2e37646c579300a1f3a4586cfb62bf857832b60c852042d0d6ae55d1afb8926163fa54c2b01d83ae24705f34990348bdac6273a29d4581 +"indent-string@npm:^4.0.0": + version: 4.0.0 + resolution: "indent-string@npm:4.0.0" + checksum: 824cfb9929d031dabf059bebfe08cf3137365e112019086ed3dcff6a0a7b698cb80cf67ccccde0e25b9e2d7527aa6cc1fed1ac490c752162496caba3e6699612 languageName: node linkType: hard -"json-parse-even-better-errors@npm:^2.3.1": - version: 2.3.1 - resolution: "json-parse-even-better-errors@npm:2.3.1" - checksum: 798ed4cf3354a2d9ccd78e86d2169515a0097a5c133337807cdf7f1fc32e1391d207ccfc276518cc1d7d8d4db93288b8a50ba4293d212ad1336e52a8ec0a941f +"inflight@npm:^1.0.4": + version: 1.0.6 + resolution: "inflight@npm:1.0.6" + dependencies: + once: ^1.3.0 + wrappy: 1 + checksum: f4f76aa072ce19fae87ce1ef7d221e709afb59d445e05d47fba710e85470923a75de35bfae47da6de1b18afc3ce83d70facf44cfb0aff89f0a3f45c0a0244dfd languageName: node linkType: hard -"json-rpc-engine@npm:6.1.0, json-rpc-engine@npm:^6.1.0": - version: 6.1.0 - resolution: "json-rpc-engine@npm:6.1.0" - dependencies: - "@metamask/safe-event-emitter": ^2.0.0 - eth-rpc-errors: ^4.0.2 - checksum: 33b6c9bbd81abf8e323a0281ee05871713203c40d34a4d0bda27706cd0a0935c7b51845238ba89b73027e44ebc8034bbd82db9f962e6c578eb922d9b95acc8bd +"inherits@npm:2, inherits@npm:2.0.4, inherits@npm:^2.0.1, inherits@npm:^2.0.3, inherits@npm:^2.0.4": + version: 2.0.4 + resolution: "inherits@npm:2.0.4" + checksum: 4a48a733847879d6cf6691860a6b1e3f0f4754176e4d71494c41f3475553768b10f84b5ce1d40fbd0e34e6bfbb864ee35858ad4dd2cf31e02fc4a154b724d7f1 languageName: node linkType: hard -"json-rpc-random-id@npm:^1.0.0, json-rpc-random-id@npm:^1.0.1": - version: 1.0.1 - resolution: "json-rpc-random-id@npm:1.0.1" - checksum: fcd2e884193a129ace4002bd65a86e9cdb206733b4693baea77bd8b372cf8de3043fbea27716a2c9a716581a908ca8d978d9dfec4847eb2cf77edb4cf4b2252c +"inherits@npm:2.0.1": + version: 2.0.1 + resolution: "inherits@npm:2.0.1" + checksum: 6536b9377296d4ce8ee89c5c543cb75030934e61af42dba98a428e7d026938c5985ea4d1e3b87743a5b834f40ed1187f89c2d7479e9d59e41d2d1051aefba07b languageName: node linkType: hard -"json-schema-to-ts@npm:1.6.4": - version: 1.6.4 - resolution: "json-schema-to-ts@npm:1.6.4" +"internal-slot@npm:^1.0.5": + version: 1.0.6 + resolution: "internal-slot@npm:1.0.6" dependencies: - "@types/json-schema": ^7.0.6 - ts-toolbelt: ^6.15.5 - checksum: 35399baff3167abafb44c926bf10755fcaa46fa52a52c5c4e467ae18add779c39ad7a998f624d96cb265c6c0f6ba45ff81bc85c8cdb58bb47ba8c4e8f79835df + get-intrinsic: ^1.2.2 + hasown: ^2.0.0 + side-channel: ^1.0.4 + checksum: 7872454888047553ce97a3fa1da7cc054a28ec5400a9c2e9f4dbe4fe7c1d041cb8e8301467614b80d4246d50377aad2fb58860b294ed74d6700cc346b6f89549 languageName: node linkType: hard -"json-schema-traverse@npm:^0.4.1": - version: 0.4.1 - resolution: "json-schema-traverse@npm:0.4.1" - checksum: 7486074d3ba247769fda17d5181b345c9fb7d12e0da98b22d1d71a5db9698d8b4bd900a3ec1a4ffdd60846fc2556274a5c894d0c48795f14cb03aeae7b55260b +"invariant@npm:^2.2.4": + version: 2.2.4 + resolution: "invariant@npm:2.2.4" + dependencies: + loose-envify: ^1.0.0 + checksum: cc3182d793aad82a8d1f0af697b462939cb46066ec48bbf1707c150ad5fad6406137e91a262022c269702e01621f35ef60269f6c0d7fd178487959809acdfb14 languageName: node linkType: hard -"json-schema-traverse@npm:^1.0.0": - version: 1.0.0 - resolution: "json-schema-traverse@npm:1.0.0" - checksum: 02f2f466cdb0362558b2f1fd5e15cce82ef55d60cd7f8fa828cf35ba74330f8d767fcae5c5c2adb7851fa811766c694b9405810879bc4e1ddd78a7c0e03658ad +"ioredis@npm:^5.3.2": + version: 5.3.2 + resolution: "ioredis@npm:5.3.2" + dependencies: + "@ioredis/commands": ^1.1.1 + cluster-key-slot: ^1.1.0 + debug: ^4.3.4 + denque: ^2.1.0 + lodash.defaults: ^4.2.0 + lodash.isarguments: ^3.1.0 + redis-errors: ^1.2.0 + redis-parser: ^3.0.0 + standard-as-callback: ^2.1.0 + checksum: 9a23559133e862a768778301efb68ae8c2af3c33562174b54a4c2d6574b976e85c75a4c34857991af733e35c48faf4c356e7daa8fb0a3543d85ff1768c8754bc languageName: node linkType: hard -"json-stable-stringify-without-jsonify@npm:^1.0.1": - version: 1.0.1 - resolution: "json-stable-stringify-without-jsonify@npm:1.0.1" - checksum: cff44156ddce9c67c44386ad5cddf91925fe06b1d217f2da9c4910d01f358c6e3989c4d5a02683c7a5667f9727ff05831f7aa8ae66c8ff691c556f0884d49215 +"ip@npm:^2.0.0": + version: 2.0.0 + resolution: "ip@npm:2.0.0" + checksum: cfcfac6b873b701996d71ec82a7dd27ba92450afdb421e356f44044ed688df04567344c36cbacea7d01b1c39a4c732dc012570ebe9bebfb06f27314bca625349 languageName: node linkType: hard -"json-stringify-safe@npm:^5.0.1": - version: 5.0.1 - resolution: "json-stringify-safe@npm:5.0.1" - checksum: 48ec0adad5280b8a96bb93f4563aa1667fd7a36334f79149abd42446d0989f2ddc58274b479f4819f1f00617957e6344c886c55d05a4e15ebb4ab931e4a6a8ee +"iron-webcrypto@npm:^1.0.0": + version: 1.0.0 + resolution: "iron-webcrypto@npm:1.0.0" + checksum: bbd96cbbfec7d072296bc7464763b96555bdadb12aca50f1f1c7e4fcdc6acb102bc3488333e924f94404dd50eda24f84b67ad28323b9138ec7255a023e8dc19e languageName: node linkType: hard -"json5@npm:^1.0.2": - version: 1.0.2 - resolution: "json5@npm:1.0.2" +"is-array-buffer@npm:^3.0.1, is-array-buffer@npm:^3.0.2": + version: 3.0.2 + resolution: "is-array-buffer@npm:3.0.2" dependencies: - minimist: ^1.2.0 - bin: - json5: lib/cli.js - checksum: 866458a8c58a95a49bef3adba929c625e82532bcff1fe93f01d29cb02cac7c3fe1f4b79951b7792c2da9de0b32871a8401a6e3c5b36778ad852bf5b8a61165d7 + call-bind: ^1.0.2 + get-intrinsic: ^1.2.0 + is-typed-array: ^1.1.10 + checksum: dcac9dda66ff17df9cabdc58214172bf41082f956eab30bb0d86bc0fab1e44b690fc8e1f855cf2481245caf4e8a5a006a982a71ddccec84032ed41f9d8da8c14 languageName: node linkType: hard -"json5@npm:^2.1.2, json5@npm:^2.2.1, json5@npm:^2.2.2, json5@npm:^2.2.3": - version: 2.2.3 - resolution: "json5@npm:2.2.3" - bin: - json5: lib/cli.js - checksum: 2a7436a93393830bce797d4626275152e37e877b265e94ca69c99e3d20c2b9dab021279146a39cdb700e71b2dd32a4cebd1514cd57cee102b1af906ce5040349 +"is-async-function@npm:^2.0.0": + version: 2.0.0 + resolution: "is-async-function@npm:2.0.0" + dependencies: + has-tostringtag: ^1.0.0 + checksum: e3471d95e6c014bf37cad8a93f2f4b6aac962178e0a5041e8903147166964fdc1c5c1d2ef87e86d77322c370ca18f2ea004fa7420581fa747bcaf7c223069dbd languageName: node linkType: hard -"jsonc-parser@npm:^3.2.0": - version: 3.2.0 - resolution: "jsonc-parser@npm:3.2.0" - checksum: 946dd9a5f326b745aa326d48a7257e3f4a4b62c5e98ec8e49fa2bdd8d96cef7e6febf1399f5c7016114fd1f68a1c62c6138826d5d90bc650448e3cf0951c53c7 +"is-bigint@npm:^1.0.1": + version: 1.0.4 + resolution: "is-bigint@npm:1.0.4" + dependencies: + has-bigints: ^1.0.1 + checksum: c56edfe09b1154f8668e53ebe8252b6f185ee852a50f9b41e8d921cb2bed425652049fbe438723f6cb48a63ca1aa051e948e7e401e093477c99c84eba244f666 languageName: node linkType: hard -"jsonfile@npm:^4.0.0": - version: 4.0.0 - resolution: "jsonfile@npm:4.0.0" +"is-binary-path@npm:~2.1.0": + version: 2.1.0 + resolution: "is-binary-path@npm:2.1.0" dependencies: - graceful-fs: ^4.1.6 - dependenciesMeta: - graceful-fs: - optional: true - checksum: 6447d6224f0d31623eef9b51185af03ac328a7553efcee30fa423d98a9e276ca08db87d71e17f2310b0263fd3ffa6c2a90a6308367f661dc21580f9469897c9e + binary-extensions: ^2.0.0 + checksum: 84192eb88cff70d320426f35ecd63c3d6d495da9d805b19bc65b518984b7c0760280e57dbf119b7e9be6b161784a5a673ab2c6abe83abb5198a432232ad5b35c languageName: node linkType: hard -"jsonfile@npm:^6.0.1": - version: 6.1.0 - resolution: "jsonfile@npm:6.1.0" +"is-boolean-object@npm:^1.1.0": + version: 1.1.2 + resolution: "is-boolean-object@npm:1.1.2" dependencies: - graceful-fs: ^4.1.6 - universalify: ^2.0.0 - dependenciesMeta: - graceful-fs: - optional: true - checksum: 7af3b8e1ac8fe7f1eccc6263c6ca14e1966fcbc74b618d3c78a0a2075579487547b94f72b7a1114e844a1e15bb00d440e5d1720bfc4612d790a6f285d5ea8354 + call-bind: ^1.0.2 + has-tostringtag: ^1.0.0 + checksum: c03b23dbaacadc18940defb12c1c0e3aaece7553ef58b162a0f6bba0c2a7e1551b59f365b91e00d2dbac0522392d576ef322628cb1d036a0fe51eb466db67222 languageName: node linkType: hard -"jsonparse@npm:^1.2.0": - version: 1.3.1 - resolution: "jsonparse@npm:1.3.1" - checksum: 6514a7be4674ebf407afca0eda3ba284b69b07f9958a8d3113ef1005f7ec610860c312be067e450c569aab8b89635e332cee3696789c750692bb60daba627f4d +"is-callable@npm:^1.1.3, is-callable@npm:^1.1.4, is-callable@npm:^1.2.7": + version: 1.2.7 + resolution: "is-callable@npm:1.2.7" + checksum: 61fd57d03b0d984e2ed3720fb1c7a897827ea174bd44402878e059542ea8c4aeedee0ea0985998aa5cc2736b2fa6e271c08587addb5b3959ac52cf665173d1ac languageName: node linkType: hard -"jsx-ast-utils@npm:^2.4.1 || ^3.0.0, jsx-ast-utils@npm:^3.3.5": - version: 3.3.5 - resolution: "jsx-ast-utils@npm:3.3.5" +"is-core-module@npm:^2.11.0, is-core-module@npm:^2.13.0, is-core-module@npm:^2.13.1": + version: 2.13.1 + resolution: "is-core-module@npm:2.13.1" dependencies: - array-includes: ^3.1.6 - array.prototype.flat: ^1.3.1 - object.assign: ^4.1.4 - object.values: ^1.1.6 - checksum: f4b05fa4d7b5234230c905cfa88d36dc8a58a6666975a3891429b1a8cdc8a140bca76c297225cb7a499fad25a2c052ac93934449a2c31a44fc9edd06c773780a + hasown: ^2.0.0 + checksum: 256559ee8a9488af90e4bad16f5583c6d59e92f0742e9e8bb4331e758521ee86b810b93bae44f390766ffbc518a0488b18d9dab7da9a5ff997d499efc9403f7c languageName: node linkType: hard -"keccak@npm:^3.0.1": - version: 3.0.4 - resolution: "keccak@npm:3.0.4" +"is-date-object@npm:^1.0.1, is-date-object@npm:^1.0.5": + version: 1.0.5 + resolution: "is-date-object@npm:1.0.5" dependencies: - node-addon-api: ^2.0.0 - node-gyp: latest - node-gyp-build: ^4.2.0 - readable-stream: ^3.6.0 - checksum: 2bf27b97b2f24225b1b44027de62be547f5c7326d87d249605665abd0c8c599d774671c35504c62c9b922cae02758504c6f76a73a84234d23af8a2211afaaa11 + has-tostringtag: ^1.0.0 + checksum: baa9077cdf15eb7b58c79398604ca57379b2fc4cf9aa7a9b9e295278648f628c9b201400c01c5e0f7afae56507d741185730307cbe7cad3b9f90a77e5ee342fc languageName: node linkType: hard -"keyv@npm:^4.0.0, keyv@npm:^4.5.3": - version: 4.5.4 - resolution: "keyv@npm:4.5.4" - dependencies: - json-buffer: 3.0.1 - checksum: 74a24395b1c34bd44ad5cb2b49140d087553e170625240b86755a6604cd65aa16efdbdeae5cdb17ba1284a0fbb25ad06263755dbc71b8d8b06f74232ce3cdd72 +"is-docker@npm:^3.0.0": + version: 3.0.0 + resolution: "is-docker@npm:3.0.0" + bin: + is-docker: cli.js + checksum: b698118f04feb7eaf3338922bd79cba064ea54a1c3db6ec8c0c8d8ee7613e7e5854d802d3ef646812a8a3ace81182a085dfa0a71cc68b06f3fa794b9783b3c90 languageName: node linkType: hard -"keyvaluestorage-interface@npm:^1.0.0": - version: 1.0.0 - resolution: "keyvaluestorage-interface@npm:1.0.0" - checksum: e20530e71b738dc094ad170a91a98d4b9bdc772dd9044b23cdaaa102aafa8997b1ac867550a1e66ba1d64fcaa949214df31aed18413b4bac31e5fe1f2c76c9de +"is-extglob@npm:^2.1.1": + version: 2.1.1 + resolution: "is-extglob@npm:2.1.1" + checksum: df033653d06d0eb567461e58a7a8c9f940bd8c22274b94bf7671ab36df5719791aae15eef6d83bbb5e23283967f2f984b8914559d4449efda578c775c4be6f85 languageName: node linkType: hard -"kleur@npm:^4.0.3": - version: 4.1.5 - resolution: "kleur@npm:4.1.5" - checksum: 1dc476e32741acf0b1b5b0627ffd0d722e342c1b0da14de3e8ae97821327ca08f9fb944542fb3c126d90ac5f27f9d804edbe7c585bf7d12ef495d115e0f22c12 +"is-finalizationregistry@npm:^1.0.2": + version: 1.0.2 + resolution: "is-finalizationregistry@npm:1.0.2" + dependencies: + call-bind: ^1.0.2 + checksum: 4f243a8e06228cd45bdab8608d2cb7abfc20f6f0189c8ac21ea8d603f1f196eabd531ce0bb8e08cbab047e9845ef2c191a3761c9a17ad5cabf8b35499c4ad35d languageName: node linkType: hard -"language-subtag-registry@npm:^0.3.20": - version: 0.3.22 - resolution: "language-subtag-registry@npm:0.3.22" - checksum: 8ab70a7e0e055fe977ac16ea4c261faec7205ac43db5e806f72e5b59606939a3b972c4bd1e10e323b35d6ffa97c3e1c4c99f6553069dad2dfdd22020fa3eb56a +"is-fullwidth-code-point@npm:^3.0.0": + version: 3.0.0 + resolution: "is-fullwidth-code-point@npm:3.0.0" + checksum: 44a30c29457c7fb8f00297bce733f0a64cd22eca270f83e58c105e0d015e45c019491a4ab2faef91ab51d4738c670daff901c799f6a700e27f7314029e99e348 + languageName: node + linkType: hard + +"is-fullwidth-code-point@npm:^4.0.0": + version: 4.0.0 + resolution: "is-fullwidth-code-point@npm:4.0.0" + checksum: 8ae89bf5057bdf4f57b346fb6c55e9c3dd2549983d54191d722d5c739397a903012cc41a04ee3403fd872e811243ef91a7c5196da7b5841dc6b6aae31a264a8d languageName: node linkType: hard -"language-tags@npm:^1.0.9": - version: 1.0.9 - resolution: "language-tags@npm:1.0.9" +"is-generator-function@npm:^1.0.10": + version: 1.0.10 + resolution: "is-generator-function@npm:1.0.10" dependencies: - language-subtag-registry: ^0.3.20 - checksum: 57c530796dc7179914dee71bc94f3747fd694612480241d0453a063777265dfe3a951037f7acb48f456bf167d6eb419d4c00263745326b3ba1cdcf4657070e78 + has-tostringtag: ^1.0.0 + checksum: d54644e7dbaccef15ceb1e5d91d680eb5068c9ee9f9eb0a9e04173eb5542c9b51b5ab52c5537f5703e48d5fddfd376817c1ca07a84a407b7115b769d4bdde72b languageName: node linkType: hard -"levn@npm:^0.4.1": - version: 0.4.1 - resolution: "levn@npm:0.4.1" +"is-glob@npm:^4.0.0, is-glob@npm:^4.0.1, is-glob@npm:^4.0.3, is-glob@npm:~4.0.1": + version: 4.0.3 + resolution: "is-glob@npm:4.0.3" dependencies: - prelude-ls: ^1.2.1 - type-check: ~0.4.0 - checksum: 12c5021c859bd0f5248561bf139121f0358285ec545ebf48bb3d346820d5c61a4309535c7f387ed7d84361cf821e124ce346c6b7cef8ee09a67c1473b46d0fc4 + is-extglob: ^2.1.1 + checksum: d381c1319fcb69d341cc6e6c7cd588e17cd94722d9a32dbd60660b993c4fb7d0f19438674e68dfec686d09b7c73139c9166b47597f846af387450224a8101ab4 languageName: node linkType: hard -"levn@npm:~0.3.0": - version: 0.3.0 - resolution: "levn@npm:0.3.0" +"is-inside-container@npm:^1.0.0": + version: 1.0.0 + resolution: "is-inside-container@npm:1.0.0" dependencies: - prelude-ls: ~1.1.2 - type-check: ~0.3.2 - checksum: 0d084a524231a8246bb10fec48cdbb35282099f6954838604f3c7fc66f2e16fa66fd9cc2f3f20a541a113c4dafdf181e822c887c8a319c9195444e6c64ac395e + is-docker: ^3.0.0 + bin: + is-inside-container: cli.js + checksum: c50b75a2ab66ab3e8b92b3bc534e1ea72ca25766832c0623ac22d134116a98bcf012197d1caabe1d1c4bd5f84363d4aa5c36bb4b585fbcaf57be172cd10a1a03 languageName: node linkType: hard -"lilconfig@npm:2.1.0, lilconfig@npm:^2.0.5, lilconfig@npm:^2.1.0": - version: 2.1.0 - resolution: "lilconfig@npm:2.1.0" - checksum: 8549bb352b8192375fed4a74694cd61ad293904eee33f9d4866c2192865c44c4eb35d10782966242634e0cbc1e91fe62b1247f148dc5514918e3a966da7ea117 +"is-lambda@npm:^1.0.1": + version: 1.0.1 + resolution: "is-lambda@npm:1.0.1" + checksum: 93a32f01940220532e5948538699ad610d5924ac86093fcee83022252b363eb0cc99ba53ab084a04e4fb62bf7b5731f55496257a4c38adf87af9c4d352c71c35 languageName: node linkType: hard -"lines-and-columns@npm:^1.1.6": - version: 1.2.4 - resolution: "lines-and-columns@npm:1.2.4" - checksum: 0c37f9f7fa212b38912b7145e1cd16a5f3cd34d782441c3e6ca653485d326f58b3caccda66efce1c5812bde4961bbde3374fae4b0d11bf1226152337f3894aa5 +"is-map@npm:^2.0.1": + version: 2.0.2 + resolution: "is-map@npm:2.0.2" + checksum: ace3d0ecd667bbdefdb1852de601268f67f2db725624b1958f279316e13fecb8fa7df91fd60f690d7417b4ec180712f5a7ee967008e27c65cfd475cc84337728 languageName: node linkType: hard -"lint-staged@npm:~13.2.2": - version: 13.2.3 - resolution: "lint-staged@npm:13.2.3" - dependencies: - chalk: 5.2.0 - cli-truncate: ^3.1.0 - commander: ^10.0.0 - debug: ^4.3.4 - execa: ^7.0.0 - lilconfig: 2.1.0 - listr2: ^5.0.7 - micromatch: ^4.0.5 - normalize-path: ^3.0.0 - object-inspect: ^1.12.3 - pidtree: ^0.6.0 - string-argv: ^0.3.1 - yaml: ^2.2.2 - bin: - lint-staged: bin/lint-staged.js - checksum: ff51a1e33072f488b28b938ed47323816a1ff278ef6d0e5cbe1704b292773a6c8ce945b504eae3a9b5702917a979523a741f17023e16077bd5fa35be687cc067 +"is-negative-zero@npm:^2.0.2": + version: 2.0.2 + resolution: "is-negative-zero@npm:2.0.2" + checksum: f3232194c47a549da60c3d509c9a09be442507616b69454716692e37ae9f37c4dea264fb208ad0c9f3efd15a796a46b79df07c7e53c6227c32170608b809149a languageName: node linkType: hard -"listhen@npm:^1.5.5": - version: 1.5.5 - resolution: "listhen@npm:1.5.5" +"is-number-object@npm:^1.0.4": + version: 1.0.7 + resolution: "is-number-object@npm:1.0.7" dependencies: - "@parcel/watcher": ^2.3.0 - "@parcel/watcher-wasm": 2.3.0 - citty: ^0.1.4 - clipboardy: ^3.0.0 - consola: ^3.2.3 - defu: ^6.1.2 - get-port-please: ^3.1.1 - h3: ^1.8.1 - http-shutdown: ^1.2.2 - jiti: ^1.20.0 - mlly: ^1.4.2 - node-forge: ^1.3.1 - pathe: ^1.1.1 - std-env: ^3.4.3 - ufo: ^1.3.0 - untun: ^0.1.2 - uqr: ^0.1.2 - bin: - listen: bin/listhen.mjs - listhen: bin/listhen.mjs - checksum: 2d4a9d9d25b41e1569b50f0c7c72004dacb35ced91b0de943734f4e2f828fdeea890d9f5ab48c37133b06ee1f188ee1d335ae6dbb5dee6a86c21740aa309f485 + has-tostringtag: ^1.0.0 + checksum: d1e8d01bb0a7134c74649c4e62da0c6118a0bfc6771ea3c560914d52a627873e6920dd0fd0ebc0e12ad2ff4687eac4c308f7e80320b973b2c8a2c8f97a7524f7 languageName: node linkType: hard -"listr2@npm:^5.0.7": - version: 5.0.8 - resolution: "listr2@npm:5.0.8" - dependencies: - cli-truncate: ^2.1.0 - colorette: ^2.0.19 - log-update: ^4.0.0 - p-map: ^4.0.0 - rfdc: ^1.3.0 - rxjs: ^7.8.0 - through: ^2.3.8 - wrap-ansi: ^7.0.0 - peerDependencies: - enquirer: ">= 2.3.0 < 3" - peerDependenciesMeta: - enquirer: - optional: true - checksum: 8be9f5632627c4df0dc33f452c98d415a49e5f1614650d3cab1b103c33e95f2a7a0e9f3e1e5de00d51bf0b4179acd8ff11b25be77dbe097cf3773c05e728d46c +"is-number@npm:^7.0.0": + version: 7.0.0 + resolution: "is-number@npm:7.0.0" + checksum: 456ac6f8e0f3111ed34668a624e45315201dff921e5ac181f8ec24923b99e9f32ca1a194912dc79d539c97d33dba17dc635202ff0b2cf98326f608323276d27a languageName: node linkType: hard -"lit-element@npm:^3.3.0": - version: 3.3.3 - resolution: "lit-element@npm:3.3.3" +"is-regex@npm:^1.1.4": + version: 1.1.4 + resolution: "is-regex@npm:1.1.4" dependencies: - "@lit-labs/ssr-dom-shim": ^1.1.0 - "@lit/reactive-element": ^1.3.0 - lit-html: ^2.8.0 - checksum: 29a596fa556e231cce7246ca3e5687ad238f299b0cb374a0934d5e6fe9adf1436e031d4fbd21b280aabfc0e21a66e6c4b52da558a908df2566d09d960f3ca93d + call-bind: ^1.0.2 + has-tostringtag: ^1.0.0 + checksum: 362399b33535bc8f386d96c45c9feb04cf7f8b41c182f54174c1a45c9abbbe5e31290bbad09a458583ff6bf3b2048672cdb1881b13289569a7c548370856a652 languageName: node linkType: hard -"lit-html@npm:^2.8.0": - version: 2.8.0 - resolution: "lit-html@npm:2.8.0" - dependencies: - "@types/trusted-types": ^2.0.2 - checksum: 2d70df07248bcb2f502a3afb1e91d260735024fa669669ffb1417575aa39c3092779725ac1b90f5f39e4ce78c63f431f51176bc67f532389f0285a6991573255 +"is-set@npm:^2.0.1": + version: 2.0.2 + resolution: "is-set@npm:2.0.2" + checksum: b64343faf45e9387b97a6fd32be632ee7b269bd8183701f3b3f5b71a7cf00d04450ed8669d0bd08753e08b968beda96fca73a10fd0ff56a32603f64deba55a57 languageName: node linkType: hard -"lit@npm:2.8.0": - version: 2.8.0 - resolution: "lit@npm:2.8.0" +"is-shared-array-buffer@npm:^1.0.2": + version: 1.0.2 + resolution: "is-shared-array-buffer@npm:1.0.2" dependencies: - "@lit/reactive-element": ^1.6.0 - lit-element: ^3.3.0 - lit-html: ^2.8.0 - checksum: 2480e733f7d022d3ecba91abc58a20968f0ca8f5fa30b3341ecf4bcf4845e674ad27b721a5ae53529cafc6ca603c015b80d0979ceb7a711e268ef20bb6bc7527 + call-bind: ^1.0.2 + checksum: 9508929cf14fdc1afc9d61d723c6e8d34f5e117f0bffda4d97e7a5d88c3a8681f633a74f8e3ad1fe92d5113f9b921dc5ca44356492079612f9a247efbce7032a languageName: node linkType: hard -"loader-utils@npm:^2.0.0": - version: 2.0.4 - resolution: "loader-utils@npm:2.0.4" - dependencies: - big.js: ^5.2.2 - emojis-list: ^3.0.0 - json5: ^2.1.2 - checksum: a5281f5fff1eaa310ad5e1164095689443630f3411e927f95031ab4fb83b4a98f388185bb1fe949e8ab8d4247004336a625e9255c22122b815bb9a4c5d8fc3b7 +"is-stream@npm:^2.0.0": + version: 2.0.1 + resolution: "is-stream@npm:2.0.1" + checksum: b8e05ccdf96ac330ea83c12450304d4a591f9958c11fd17bed240af8d5ffe08aedafa4c0f4cfccd4d28dc9d4d129daca1023633d5c11601a6cbc77521f6fae66 languageName: node linkType: hard -"loader-utils@npm:^3.2.0": - version: 3.2.1 - resolution: "loader-utils@npm:3.2.1" - checksum: 4e3ea054cdc8be1ab1f1238f49f42fdf0483039eff920fb1d442039f3f0ad4ebd11fb8e584ccdf2cb7e3c56b3d40c1832416e6408a55651b843da288960cc792 +"is-stream@npm:^3.0.0": + version: 3.0.0 + resolution: "is-stream@npm:3.0.0" + checksum: 172093fe99119ffd07611ab6d1bcccfe8bc4aa80d864b15f43e63e54b7abc71e779acd69afdb854c4e2a67fdc16ae710e370eda40088d1cfc956a50ed82d8f16 languageName: node linkType: hard -"locate-path@npm:^5.0.0": - version: 5.0.0 - resolution: "locate-path@npm:5.0.0" +"is-string@npm:^1.0.5, is-string@npm:^1.0.7": + version: 1.0.7 + resolution: "is-string@npm:1.0.7" dependencies: - p-locate: ^4.1.0 - checksum: 83e51725e67517287d73e1ded92b28602e3ae5580b301fe54bfb76c0c723e3f285b19252e375712316774cf52006cb236aed5704692c32db0d5d089b69696e30 + has-tostringtag: ^1.0.0 + checksum: 323b3d04622f78d45077cf89aab783b2f49d24dc641aa89b5ad1a72114cfeff2585efc8c12ef42466dff32bde93d839ad321b26884cf75e5a7892a938b089989 languageName: node linkType: hard -"locate-path@npm:^6.0.0": - version: 6.0.0 - resolution: "locate-path@npm:6.0.0" +"is-symbol@npm:^1.0.2, is-symbol@npm:^1.0.3": + version: 1.0.4 + resolution: "is-symbol@npm:1.0.4" dependencies: - p-locate: ^5.0.0 - checksum: 72eb661788a0368c099a184c59d2fee760b3831c9c1c33955e8a19ae4a21b4116e53fa736dc086cdeb9fce9f7cc508f2f92d2d3aae516f133e16a2bb59a39f5a + has-symbols: ^1.0.2 + checksum: 92805812ef590738d9de49d677cd17dfd486794773fb6fa0032d16452af46e9b91bb43ffe82c983570f015b37136f4b53b28b8523bfb10b0ece7a66c31a54510 languageName: node linkType: hard -"lodash.camelcase@npm:^4.3.0": - version: 4.3.0 - resolution: "lodash.camelcase@npm:4.3.0" - checksum: cb9227612f71b83e42de93eccf1232feeb25e705bdb19ba26c04f91e885bfd3dd5c517c4a97137658190581d3493ea3973072ca010aab7e301046d90740393d1 +"is-typed-array@npm:^1.1.10, is-typed-array@npm:^1.1.12, is-typed-array@npm:^1.1.9": + version: 1.1.12 + resolution: "is-typed-array@npm:1.1.12" + dependencies: + which-typed-array: ^1.1.11 + checksum: 4c89c4a3be07186caddadf92197b17fda663a9d259ea0d44a85f171558270d36059d1c386d34a12cba22dfade5aba497ce22778e866adc9406098c8fc4771796 languageName: node linkType: hard -"lodash.debounce@npm:^4.0.8": - version: 4.0.8 - resolution: "lodash.debounce@npm:4.0.8" - checksum: a3f527d22c548f43ae31c861ada88b2637eb48ac6aa3eb56e82d44917971b8aa96fbb37aa60efea674dc4ee8c42074f90f7b1f772e9db375435f6c83a19b3bc6 +"is-typedarray@npm:1.0.0, is-typedarray@npm:^1.0.0": + version: 1.0.0 + resolution: "is-typedarray@npm:1.0.0" + checksum: 3508c6cd0a9ee2e0df2fa2e9baabcdc89e911c7bd5cf64604586697212feec525aa21050e48affb5ffc3df20f0f5d2e2cf79b08caa64e1ccc9578e251763aef7 languageName: node linkType: hard -"lodash.defaults@npm:^4.2.0": - version: 4.2.0 - resolution: "lodash.defaults@npm:4.2.0" - checksum: 84923258235592c8886e29de5491946ff8c2ae5c82a7ac5cddd2e3cb697e6fbdfbbb6efcca015795c86eec2bb953a5a2ee4016e3735a3f02720428a40efbb8f1 +"is-weakmap@npm:^2.0.1": + version: 2.0.1 + resolution: "is-weakmap@npm:2.0.1" + checksum: 1222bb7e90c32bdb949226e66d26cb7bce12e1e28e3e1b40bfa6b390ba3e08192a8664a703dff2a00a84825f4e022f9cd58c4599ff9981ab72b1d69479f4f7f6 languageName: node linkType: hard -"lodash.isarguments@npm:^3.1.0": - version: 3.1.0 - resolution: "lodash.isarguments@npm:3.1.0" - checksum: ae1526f3eb5c61c77944b101b1f655f846ecbedcb9e6b073526eba6890dc0f13f09f72e11ffbf6540b602caee319af9ac363d6cdd6be41f4ee453436f04f13b5 +"is-weakref@npm:^1.0.2": + version: 1.0.2 + resolution: "is-weakref@npm:1.0.2" + dependencies: + call-bind: ^1.0.2 + checksum: 95bd9a57cdcb58c63b1c401c60a474b0f45b94719c30f548c891860f051bc2231575c290a6b420c6bc6e7ed99459d424c652bd5bf9a1d5259505dc35b4bf83de languageName: node linkType: hard -"lodash.isequal@npm:4.5.0": - version: 4.5.0 - resolution: "lodash.isequal@npm:4.5.0" - checksum: da27515dc5230eb1140ba65ff8de3613649620e8656b19a6270afe4866b7bd461d9ba2ac8a48dcc57f7adac4ee80e1de9f965d89d4d81a0ad52bb3eec2609644 +"is-weakset@npm:^2.0.1": + version: 2.0.2 + resolution: "is-weakset@npm:2.0.2" + dependencies: + call-bind: ^1.0.2 + get-intrinsic: ^1.1.1 + checksum: 5d8698d1fa599a0635d7ca85be9c26d547b317ed8fd83fc75f03efbe75d50001b5eececb1e9971de85fcde84f69ae6f8346bc92d20d55d46201d328e4c74a367 languageName: node linkType: hard -"lodash.merge@npm:^4.6.2": - version: 4.6.2 - resolution: "lodash.merge@npm:4.6.2" - checksum: ad580b4bdbb7ca1f7abf7e1bce63a9a0b98e370cf40194b03380a46b4ed799c9573029599caebc1b14e3f24b111aef72b96674a56cfa105e0f5ac70546cdc005 +"is-wsl@npm:^3.1.0": + version: 3.1.0 + resolution: "is-wsl@npm:3.1.0" + dependencies: + is-inside-container: ^1.0.0 + checksum: f9734c81f2f9cf9877c5db8356bfe1ff61680f1f4c1011e91278a9c0564b395ae796addb4bf33956871041476ec82c3e5260ed57b22ac91794d4ae70a1d2f0a9 languageName: node linkType: hard -"lodash@npm:*, lodash@npm:^4.17.21": - version: 4.17.21 - resolution: "lodash@npm:4.17.21" - checksum: eb835a2e51d381e561e508ce932ea50a8e5a68f4ebdd771ea240d3048244a8d13658acbd502cd4829768c56f2e16bdd4340b9ea141297d472517b83868e677f7 +"is64bit@npm:^2.0.0": + version: 2.0.0 + resolution: "is64bit@npm:2.0.0" + dependencies: + system-architecture: ^0.1.0 + checksum: 253079e64b6f9bb90295a63b73a046bea67364cdc104bc5abeffcf4cbc52b3e66b0e921cb14f686deb71b5cab628f9f490845c1194c6e94f84068d177c7f15cd languageName: node linkType: hard -"log-symbols@npm:^4.1.0": - version: 4.1.0 - resolution: "log-symbols@npm:4.1.0" - dependencies: - chalk: ^4.1.0 - is-unicode-supported: ^0.1.0 - checksum: fce1497b3135a0198803f9f07464165e9eb83ed02ceb2273930a6f8a508951178d8cf4f0378e9d28300a2ed2bc49050995d2bd5f53ab716bb15ac84d58c6ef74 +"isarray@npm:0.0.1": + version: 0.0.1 + resolution: "isarray@npm:0.0.1" + checksum: 49191f1425681df4a18c2f0f93db3adb85573bcdd6a4482539d98eac9e705d8961317b01175627e860516a2fc45f8f9302db26e5a380a97a520e272e2a40a8d4 languageName: node linkType: hard -"log-update@npm:^4.0.0": - version: 4.0.0 - resolution: "log-update@npm:4.0.0" - dependencies: - ansi-escapes: ^4.3.0 - cli-cursor: ^3.1.0 - slice-ansi: ^4.0.0 - wrap-ansi: ^6.2.0 - checksum: ae2f85bbabc1906034154fb7d4c4477c79b3e703d22d78adee8b3862fa913942772e7fa11713e3d96fb46de4e3cabefbf5d0a544344f03b58d3c4bff52aa9eb2 +"isarray@npm:^2.0.5": + version: 2.0.5 + resolution: "isarray@npm:2.0.5" + checksum: bd5bbe4104438c4196ba58a54650116007fa0262eccef13a4c55b2e09a5b36b59f1e75b9fcc49883dd9d4953892e6fc007eef9e9155648ceea036e184b0f930a languageName: node linkType: hard -"longest-streak@npm:^3.0.0": - version: 3.1.0 - resolution: "longest-streak@npm:3.1.0" - checksum: d7f952ed004cbdb5c8bcfc4f7f5c3d65449e6c5a9e9be4505a656e3df5a57ee125f284286b4bf8ecea0c21a7b3bf2b8f9001ad506c319b9815ad6a63a47d0fd0 +"isexe@npm:^2.0.0": + version: 2.0.0 + resolution: "isexe@npm:2.0.0" + checksum: 26bf6c5480dda5161c820c5b5c751ae1e766c587b1f951ea3fcfc973bafb7831ae5b54a31a69bd670220e42e99ec154475025a468eae58ea262f813fdc8d1c62 languageName: node linkType: hard -"loose-envify@npm:^1.0.0, loose-envify@npm:^1.1.0, loose-envify@npm:^1.4.0": - version: 1.4.0 - resolution: "loose-envify@npm:1.4.0" - dependencies: - js-tokens: ^3.0.0 || ^4.0.0 - bin: - loose-envify: cli.js - checksum: 6517e24e0cad87ec9888f500c5b5947032cdfe6ef65e1c1936a0c48a524b81e65542c9c3edc91c97d5bddc806ee2a985dbc79be89215d613b1de5db6d1cfe6f4 +"isexe@npm:^3.1.1": + version: 3.1.1 + resolution: "isexe@npm:3.1.1" + checksum: 7fe1931ee4e88eb5aa524cd3ceb8c882537bc3a81b02e438b240e47012eef49c86904d0f0e593ea7c3a9996d18d0f1f3be8d3eaa92333977b0c3a9d353d5563e languageName: node linkType: hard -"lowercase-keys@npm:^2.0.0": - version: 2.0.0 - resolution: "lowercase-keys@npm:2.0.0" - checksum: 24d7ebd56ccdf15ff529ca9e08863f3c54b0b9d1edb97a3ae1af34940ae666c01a1e6d200707bce730a8ef76cb57cc10e65f245ecaaf7e6bc8639f2fb460ac23 +"isows@npm:1.0.3": + version: 1.0.3 + resolution: "isows@npm:1.0.3" + peerDependencies: + ws: "*" + checksum: 9cacd5cf59f67deb51e825580cd445ab1725ecb05a67c704050383fb772856f3cd5e7da8ad08f5a3bd2823680d77d099459d0c6a7037972a74d6429af61af440 languageName: node linkType: hard -"lru-cache@npm:^10.0.1, lru-cache@npm:^10.0.2, lru-cache@npm:^9.1.1 || ^10.0.0": - version: 10.0.2 - resolution: "lru-cache@npm:10.0.2" +"iterator.prototype@npm:^1.1.2": + version: 1.1.2 + resolution: "iterator.prototype@npm:1.1.2" dependencies: - semver: ^7.3.5 - checksum: 83ad0e899d79f48574bdda131fe8157c6d65cbd073a6e78e0d1a3467a85dce1ef4d8dc9fd618a56c57a068271501c81d54471e13f84dd121e046b155ed061ed4 + define-properties: ^1.2.1 + get-intrinsic: ^1.2.1 + has-symbols: ^1.0.3 + reflect.getprototypeof: ^1.0.4 + set-function-name: ^2.0.1 + checksum: d8a507e2ccdc2ce762e8a1d3f4438c5669160ac72b88b648e59a688eec6bc4e64b22338e74000518418d9e693faf2a092d2af21b9ec7dbf7763b037a54701168 languageName: node linkType: hard -"lru-cache@npm:^5.1.1": - version: 5.1.1 - resolution: "lru-cache@npm:5.1.1" +"jackspeak@npm:^2.3.5": + version: 2.3.6 + resolution: "jackspeak@npm:2.3.6" dependencies: - yallist: ^3.0.2 - checksum: c154ae1cbb0c2206d1501a0e94df349653c92c8cbb25236d7e85190bcaf4567a03ac6eb43166fabfa36fd35623694da7233e88d9601fbf411a9a481d85dbd2cb + "@isaacs/cliui": ^8.0.2 + "@pkgjs/parseargs": ^0.11.0 + dependenciesMeta: + "@pkgjs/parseargs": + optional: true + checksum: 57d43ad11eadc98cdfe7496612f6bbb5255ea69fe51ea431162db302c2a11011642f50cfad57288bd0aea78384a0612b16e131944ad8ecd09d619041c8531b54 languageName: node linkType: hard -"lru-cache@npm:^6.0.0": - version: 6.0.0 - resolution: "lru-cache@npm:6.0.0" - dependencies: - yallist: ^4.0.0 - checksum: f97f499f898f23e4585742138a22f22526254fdba6d75d41a1c2526b3b6cc5747ef59c5612ba7375f42aca4f8461950e925ba08c991ead0651b4918b7c978297 +"javascript-natural-sort@npm:0.7.1": + version: 0.7.1 + resolution: "javascript-natural-sort@npm:0.7.1" + checksum: 161e2c512cc7884bc055a582c6645d9032cab88497a76123d73cb23bfb03d97a04cf7772ecdb8bd3366fc07192c2f996366f479f725c23ef073fffe03d6a586a languageName: node linkType: hard -"lru-cache@npm:^7.14.1": - version: 7.18.3 - resolution: "lru-cache@npm:7.18.3" - checksum: e550d772384709deea3f141af34b6d4fa392e2e418c1498c078de0ee63670f1f46f5eee746e8ef7e69e1c895af0d4224e62ee33e66a543a14763b0f2e74c1356 +"jiti@npm:^1.19.1, jiti@npm:^1.21.0": + version: 1.21.0 + resolution: "jiti@npm:1.21.0" + bin: + jiti: bin/jiti.js + checksum: a7bd5d63921c170eaec91eecd686388181c7828e1fa0657ab374b9372bfc1f383cf4b039e6b272383d5cb25607509880af814a39abdff967322459cca41f2961 languageName: node linkType: hard -"magic-string@npm:^0.25.3": - version: 0.25.9 - resolution: "magic-string@npm:0.25.9" - dependencies: - sourcemap-codec: ^1.4.8 - checksum: 9a0e55a15c7303fc360f9572a71cffba1f61451bc92c5602b1206c9d17f492403bf96f946dfce7483e66822d6b74607262e24392e87b0ac27b786e69a40e9b1a +"js-sdsl@npm:^4.1.4": + version: 4.4.2 + resolution: "js-sdsl@npm:4.4.2" + checksum: ba705adc1788bf3c6f6c8e5077824f2bb4f0acab5a984420ce5cc492c7fff3daddc26335ad2c9a67d4f5e3241ec790f9e5b72a625adcf20cf321d2fd85e62b8b languageName: node linkType: hard -"make-dir@npm:^3.1.0": - version: 3.1.0 - resolution: "make-dir@npm:3.1.0" - dependencies: - semver: ^6.0.0 - checksum: 484200020ab5a1fdf12f393fe5f385fc8e4378824c940fba1729dcd198ae4ff24867bc7a5646331e50cead8abff5d9270c456314386e629acec6dff4b8016b78 +"js-sha3@npm:0.8.0": + version: 0.8.0 + resolution: "js-sha3@npm:0.8.0" + checksum: 75df77c1fc266973f06cce8309ce010e9e9f07ec35ab12022ed29b7f0d9c8757f5a73e1b35aa24840dced0dea7059085aa143d817aea9e188e2a80d569d9adce languageName: node linkType: hard -"make-error@npm:^1.1.1": - version: 1.3.6 - resolution: "make-error@npm:1.3.6" - checksum: b86e5e0e25f7f777b77fabd8e2cbf15737972869d852a22b7e73c17623928fccb826d8e46b9951501d3f20e51ad74ba8c59ed584f610526a48f8ccf88aaec402 +"js-tokens@npm:^3.0.0 || ^4.0.0, js-tokens@npm:^4.0.0": + version: 4.0.0 + resolution: "js-tokens@npm:4.0.0" + checksum: 8a95213a5a77deb6cbe94d86340e8d9ace2b93bc367790b260101d2f36a2eaf4e4e22d9fa9cf459b38af3a32fb4190e638024cf82ec95ef708680e405ea7cc78 languageName: node linkType: hard -"make-fetch-happen@npm:^13.0.0": - version: 13.0.0 - resolution: "make-fetch-happen@npm:13.0.0" +"js-yaml@npm:^4.1.0": + version: 4.1.0 + resolution: "js-yaml@npm:4.1.0" dependencies: - "@npmcli/agent": ^2.0.0 - cacache: ^18.0.0 - http-cache-semantics: ^4.1.1 - is-lambda: ^1.0.1 - minipass: ^7.0.2 - minipass-fetch: ^3.0.0 - minipass-flush: ^1.0.5 - minipass-pipeline: ^1.2.4 - negotiator: ^0.6.3 - promise-retry: ^2.0.1 - ssri: ^10.0.0 - checksum: 7c7a6d381ce919dd83af398b66459a10e2fe8f4504f340d1d090d3fa3d1b0c93750220e1d898114c64467223504bd258612ba83efbc16f31b075cd56de24b4af + argparse: ^2.0.1 + bin: + js-yaml: bin/js-yaml.js + checksum: c7830dfd456c3ef2c6e355cc5a92e6700ceafa1d14bba54497b34a99f0376cecbb3e9ac14d3e5849b426d5a5140709a66237a8c991c675431271c4ce5504151a languageName: node linkType: hard -"make-plural@npm:*": - version: 7.3.0 - resolution: "make-plural@npm:7.3.0" - checksum: bb39b4b77533f0d5fb94eec128340b54dda8c1707d6b0a98c148e5d7bc23094e123f88275a61573fa31dc2f5d7352215cee0df523cd69b5d8fcb3969a2bcf8f8 +"jsbi@npm:^3.1.4": + version: 3.2.5 + resolution: "jsbi@npm:3.2.5" + checksum: 642d1bb139ad1c1e96c4907eb159565e980a0d168487626b493d0d0b7b341da0e43001089d3b21703fe17b18a7a6c0f42c92026f71d54471ed0a0d1b3015ec0f languageName: node linkType: hard -"markdown-extensions@npm:^1.0.0": - version: 1.1.1 - resolution: "markdown-extensions@npm:1.1.1" - checksum: 8a6dd128be1c524049ea6a41a9193715c2835d3d706af4b8b714ff2043a82786dbcd4a8f1fa9ddd28facbc444426c97515aef2d1f3dd11d5e2d63749ba577b1e +"jsesc@npm:^2.5.1": + version: 2.5.2 + resolution: "jsesc@npm:2.5.2" + bin: + jsesc: bin/jsesc + checksum: 4dc190771129e12023f729ce20e1e0bfceac84d73a85bc3119f7f938843fe25a4aeccb54b6494dce26fcf263d815f5f31acdefac7cc9329efb8422a4f4d9fa9d languageName: node linkType: hard -"mdast-util-definitions@npm:^5.0.0": - version: 5.1.2 - resolution: "mdast-util-definitions@npm:5.1.2" - dependencies: - "@types/mdast": ^3.0.0 - "@types/unist": ^2.0.0 - unist-util-visit: ^4.0.0 - checksum: 2544daccab744ea1ede76045c2577ae4f1cc1b9eb1ea51ab273fe1dca8db5a8d6f50f87759c0ce6484975914b144b7f40316f805cb9c86223a78db8de0b77bae +"json-buffer@npm:3.0.1": + version: 3.0.1 + resolution: "json-buffer@npm:3.0.1" + checksum: 9026b03edc2847eefa2e37646c579300a1f3a4586cfb62bf857832b60c852042d0d6ae55d1afb8926163fa54c2b01d83ae24705f34990348bdac6273a29d4581 languageName: node linkType: hard -"mdast-util-from-markdown@npm:^1.0.0": - version: 1.3.1 - resolution: "mdast-util-from-markdown@npm:1.3.1" +"json-rpc-engine@npm:^6.1.0": + version: 6.1.0 + resolution: "json-rpc-engine@npm:6.1.0" dependencies: - "@types/mdast": ^3.0.0 - "@types/unist": ^2.0.0 - decode-named-character-reference: ^1.0.0 - mdast-util-to-string: ^3.1.0 - micromark: ^3.0.0 - micromark-util-decode-numeric-character-reference: ^1.0.0 - micromark-util-decode-string: ^1.0.0 - micromark-util-normalize-identifier: ^1.0.0 - micromark-util-symbol: ^1.0.0 - micromark-util-types: ^1.0.0 - unist-util-stringify-position: ^3.0.0 - uvu: ^0.5.0 - checksum: c2fac225167e248d394332a4ea39596e04cbde07d8cdb3889e91e48972c4c3462a02b39fda3855345d90231eb17a90ac6e082fb4f012a77c1d0ddfb9c7446940 + "@metamask/safe-event-emitter": ^2.0.0 + eth-rpc-errors: ^4.0.2 + checksum: 33b6c9bbd81abf8e323a0281ee05871713203c40d34a4d0bda27706cd0a0935c7b51845238ba89b73027e44ebc8034bbd82db9f962e6c578eb922d9b95acc8bd languageName: node linkType: hard -"mdast-util-frontmatter@npm:^1.0.0": +"json-rpc-random-id@npm:^1.0.0, json-rpc-random-id@npm:^1.0.1": version: 1.0.1 - resolution: "mdast-util-frontmatter@npm:1.0.1" - dependencies: - "@types/mdast": ^3.0.0 - mdast-util-to-markdown: ^1.3.0 - micromark-extension-frontmatter: ^1.0.0 - checksum: 0b0552047b753931da8265f2231a0b79aad1309ad7ad6599181c2d264e9b70b61acf742f29bdf2de8e901eb6eb37dd42b6f66007e735fd8138b2bf4d9acb0118 + resolution: "json-rpc-random-id@npm:1.0.1" + checksum: fcd2e884193a129ace4002bd65a86e9cdb206733b4693baea77bd8b372cf8de3043fbea27716a2c9a716581a908ca8d978d9dfec4847eb2cf77edb4cf4b2252c languageName: node linkType: hard -"mdast-util-mdx-expression@npm:^1.0.0": - version: 1.3.2 - resolution: "mdast-util-mdx-expression@npm:1.3.2" +"json-schema-to-ts@npm:1.6.4": + version: 1.6.4 + resolution: "json-schema-to-ts@npm:1.6.4" dependencies: - "@types/estree-jsx": ^1.0.0 - "@types/hast": ^2.0.0 - "@types/mdast": ^3.0.0 - mdast-util-from-markdown: ^1.0.0 - mdast-util-to-markdown: ^1.0.0 - checksum: e4c90f26deaa5eb6217b0a9af559a80de41da02ab3bcd864c56bed3304b056ae703896e9876bc6ded500f4aff59f4de5cbf6a4b109a5ba408f2342805fe6dc05 + "@types/json-schema": ^7.0.6 + ts-toolbelt: ^6.15.5 + checksum: 35399baff3167abafb44c926bf10755fcaa46fa52a52c5c4e467ae18add779c39ad7a998f624d96cb265c6c0f6ba45ff81bc85c8cdb58bb47ba8c4e8f79835df languageName: node linkType: hard -"mdast-util-mdx-jsx@npm:^1.0.0": - version: 1.2.0 - resolution: "mdast-util-mdx-jsx@npm:1.2.0" - dependencies: - "@types/estree-jsx": ^0.0.1 - "@types/mdast": ^3.0.0 - mdast-util-to-markdown: ^1.0.0 - parse-entities: ^4.0.0 - stringify-entities: ^4.0.0 - unist-util-remove-position: ^4.0.0 - unist-util-stringify-position: ^3.0.0 - vfile-message: ^3.0.0 - checksum: 1aeb8c5ac3b2ab675e3e45a9ae89c7cd0d30526029b7bb8c797fff91fafc275c1cf7350fada863776f387b6cb7ea8991a7da5821cbee01f738a6fada11938f6a +"json-schema-traverse@npm:^0.4.1": + version: 0.4.1 + resolution: "json-schema-traverse@npm:0.4.1" + checksum: 7486074d3ba247769fda17d5181b345c9fb7d12e0da98b22d1d71a5db9698d8b4bd900a3ec1a4ffdd60846fc2556274a5c894d0c48795f14cb03aeae7b55260b languageName: node linkType: hard -"mdast-util-mdx@npm:^1.0.0": - version: 1.1.0 - resolution: "mdast-util-mdx@npm:1.1.0" - dependencies: - mdast-util-mdx-expression: ^1.0.0 - mdast-util-mdx-jsx: ^1.0.0 - mdast-util-mdxjs-esm: ^1.0.0 - checksum: 03a3364bd964596bc1989065689254ad726e063503cfd30b4416a53aa8fa7890959b36c2441b32a70da5b2969c8b9ed70dfe076d3998f59d7eb876c80c8b6f61 +"json-schema-traverse@npm:^1.0.0": + version: 1.0.0 + resolution: "json-schema-traverse@npm:1.0.0" + checksum: 02f2f466cdb0362558b2f1fd5e15cce82ef55d60cd7f8fa828cf35ba74330f8d767fcae5c5c2adb7851fa811766c694b9405810879bc4e1ddd78a7c0e03658ad languageName: node linkType: hard -"mdast-util-mdxjs-esm@npm:^1.0.0": - version: 1.3.1 - resolution: "mdast-util-mdxjs-esm@npm:1.3.1" - dependencies: - "@types/estree-jsx": ^1.0.0 - "@types/hast": ^2.0.0 - "@types/mdast": ^3.0.0 - mdast-util-from-markdown: ^1.0.0 - mdast-util-to-markdown: ^1.0.0 - checksum: ee78a4f58adfec38723cbc920f05481201ebb001eff3982f2d0e5f5ce5c75685e732e9d361ad4a1be8b936b4e5de0f2599cb96b92ad4bd92698ac0c4a09bbec3 +"json-stable-stringify-without-jsonify@npm:^1.0.1": + version: 1.0.1 + resolution: "json-stable-stringify-without-jsonify@npm:1.0.1" + checksum: cff44156ddce9c67c44386ad5cddf91925fe06b1d217f2da9c4910d01f358c6e3989c4d5a02683c7a5667f9727ff05831f7aa8ae66c8ff691c556f0884d49215 languageName: node linkType: hard -"mdast-util-phrasing@npm:^3.0.0": - version: 3.0.1 - resolution: "mdast-util-phrasing@npm:3.0.1" +"json5@npm:^1.0.2": + version: 1.0.2 + resolution: "json5@npm:1.0.2" dependencies: - "@types/mdast": ^3.0.0 - unist-util-is: ^5.0.0 - checksum: c5b616d9b1eb76a6b351d195d94318494722525a12a89d9c8a3b091af7db3dd1fc55d294f9d29266d8159a8267b0df4a7a133bda8a3909d5331c383e1e1ff328 + minimist: ^1.2.0 + bin: + json5: lib/cli.js + checksum: 866458a8c58a95a49bef3adba929c625e82532bcff1fe93f01d29cb02cac7c3fe1f4b79951b7792c2da9de0b32871a8401a6e3c5b36778ad852bf5b8a61165d7 languageName: node linkType: hard -"mdast-util-to-hast@npm:^11.0.0": - version: 11.3.0 - resolution: "mdast-util-to-hast@npm:11.3.0" +"jsonc-parser@npm:^3.2.0": + version: 3.2.1 + resolution: "jsonc-parser@npm:3.2.1" + checksum: 656d9027b91de98d8ab91b3aa0d0a4cab7dc798a6830845ca664f3e76c82d46b973675bbe9b500fae1de37fd3e81aceacbaa2a57884bf2f8f29192150d2d1ef7 + languageName: node + linkType: hard + +"jsonfile@npm:^4.0.0": + version: 4.0.0 + resolution: "jsonfile@npm:4.0.0" dependencies: - "@types/hast": ^2.0.0 - "@types/mdast": ^3.0.0 - "@types/mdurl": ^1.0.0 - mdast-util-definitions: ^5.0.0 - mdurl: ^1.0.0 - unist-builder: ^3.0.0 - unist-util-generated: ^2.0.0 - unist-util-position: ^4.0.0 - unist-util-visit: ^4.0.0 - checksum: a968d034613aa5cfb44b9c03d8e61a08bb563bfde3a233fb3d83a28857357e2beef56b6767bab2867d3c3796dc5dd796af4d03fb83e3133aeb7f4187b5cc9327 + graceful-fs: ^4.1.6 + dependenciesMeta: + graceful-fs: + optional: true + checksum: 6447d6224f0d31623eef9b51185af03ac328a7553efcee30fa423d98a9e276ca08db87d71e17f2310b0263fd3ffa6c2a90a6308367f661dc21580f9469897c9e languageName: node linkType: hard -"mdast-util-to-markdown@npm:^1.0.0, mdast-util-to-markdown@npm:^1.3.0": - version: 1.5.0 - resolution: "mdast-util-to-markdown@npm:1.5.0" +"jsonfile@npm:^6.0.1": + version: 6.1.0 + resolution: "jsonfile@npm:6.1.0" dependencies: - "@types/mdast": ^3.0.0 - "@types/unist": ^2.0.0 - longest-streak: ^3.0.0 - mdast-util-phrasing: ^3.0.0 - mdast-util-to-string: ^3.0.0 - micromark-util-decode-string: ^1.0.0 - unist-util-visit: ^4.0.0 - zwitch: ^2.0.0 - checksum: 64338eb33e49bb0aea417591fd986f72fdd39205052563bb7ce9eb9ecc160824509bfacd740086a05af355c6d5c36353aafe95cab9e6927d674478757cee6259 + graceful-fs: ^4.1.6 + universalify: ^2.0.0 + dependenciesMeta: + graceful-fs: + optional: true + checksum: 7af3b8e1ac8fe7f1eccc6263c6ca14e1966fcbc74b618d3c78a0a2075579487547b94f72b7a1114e844a1e15bb00d440e5d1720bfc4612d790a6f285d5ea8354 languageName: node linkType: hard -"mdast-util-to-string@npm:^3.0.0, mdast-util-to-string@npm:^3.1.0": - version: 3.2.0 - resolution: "mdast-util-to-string@npm:3.2.0" +"jsx-ast-utils@npm:^2.4.1 || ^3.0.0, jsx-ast-utils@npm:^3.3.5": + version: 3.3.5 + resolution: "jsx-ast-utils@npm:3.3.5" dependencies: - "@types/mdast": ^3.0.0 - checksum: dc40b544d54339878ae2c9f2b3198c029e1e07291d2126bd00ca28272ee6616d0d2194eb1c9828a7c34d412a79a7e73b26512a734698d891c710a1e73db1e848 + array-includes: ^3.1.6 + array.prototype.flat: ^1.3.1 + object.assign: ^4.1.4 + object.values: ^1.1.6 + checksum: f4b05fa4d7b5234230c905cfa88d36dc8a58a6666975a3891429b1a8cdc8a140bca76c297225cb7a499fad25a2c052ac93934449a2c31a44fc9edd06c773780a languageName: node linkType: hard -"mdurl@npm:^1.0.0": - version: 1.0.1 - resolution: "mdurl@npm:1.0.1" - checksum: 71731ecba943926bfbf9f9b51e28b5945f9411c4eda80894221b47cc105afa43ba2da820732b436f0798fd3edbbffcd1fc1415843c41a87fea08a41cc1e3d02b +"keccak@npm:^3.0.3": + version: 3.0.4 + resolution: "keccak@npm:3.0.4" + dependencies: + node-addon-api: ^2.0.0 + node-gyp: latest + node-gyp-build: ^4.2.0 + readable-stream: ^3.6.0 + checksum: 2bf27b97b2f24225b1b44027de62be547f5c7326d87d249605665abd0c8c599d774671c35504c62c9b922cae02758504c6f76a73a84234d23af8a2211afaaa11 languageName: node linkType: hard -"media-query-parser@npm:^2.0.2": - version: 2.0.2 - resolution: "media-query-parser@npm:2.0.2" +"keyv@npm:^4.5.3": + version: 4.5.4 + resolution: "keyv@npm:4.5.4" dependencies: - "@babel/runtime": ^7.12.5 - checksum: 8ef956d9e63fe6f4041988beda69843b3a6bb48228ea2923a066f6e7c8f7c5dba75fae357318c48a97ed5beae840b8425cb7e727fc1bb77acc65f2005f8945ab + json-buffer: 3.0.1 + checksum: 74a24395b1c34bd44ad5cb2b49140d087553e170625240b86755a6604cd65aa16efdbdeae5cdb17ba1284a0fbb25ad06263755dbc71b8d8b06f74232ce3cdd72 languageName: node linkType: hard -"media-typer@npm:0.3.0": - version: 0.3.0 - resolution: "media-typer@npm:0.3.0" - checksum: af1b38516c28ec95d6b0826f6c8f276c58aec391f76be42aa07646b4e39d317723e869700933ca6995b056db4b09a78c92d5440dc23657e6764be5d28874bba1 +"keyvaluestorage-interface@npm:^1.0.0": + version: 1.0.0 + resolution: "keyvaluestorage-interface@npm:1.0.0" + checksum: e20530e71b738dc094ad170a91a98d4b9bdc772dd9044b23cdaaa102aafa8997b1ac867550a1e66ba1d64fcaa949214df31aed18413b4bac31e5fe1f2c76c9de languageName: node linkType: hard -"merge-descriptors@npm:1.0.1": - version: 1.0.1 - resolution: "merge-descriptors@npm:1.0.1" - checksum: 5abc259d2ae25bb06d19ce2b94a21632583c74e2a9109ee1ba7fd147aa7362b380d971e0251069f8b3eb7d48c21ac839e21fa177b335e82c76ec172e30c31a26 +"language-subtag-registry@npm:^0.3.20": + version: 0.3.22 + resolution: "language-subtag-registry@npm:0.3.22" + checksum: 8ab70a7e0e055fe977ac16ea4c261faec7205ac43db5e806f72e5b59606939a3b972c4bd1e10e323b35d6ffa97c3e1c4c99f6553069dad2dfdd22020fa3eb56a languageName: node linkType: hard -"merge-stream@npm:^2.0.0": - version: 2.0.0 - resolution: "merge-stream@npm:2.0.0" - checksum: 6fa4dcc8d86629705cea944a4b88ef4cb0e07656ebf223fa287443256414283dd25d91c1cd84c77987f2aec5927af1a9db6085757cb43d90eb170ebf4b47f4f4 +"language-tags@npm:^1.0.9": + version: 1.0.9 + resolution: "language-tags@npm:1.0.9" + dependencies: + language-subtag-registry: ^0.3.20 + checksum: 57c530796dc7179914dee71bc94f3747fd694612480241d0453a063777265dfe3a951037f7acb48f456bf167d6eb419d4c00263745326b3ba1cdcf4657070e78 languageName: node linkType: hard -"merge2@npm:^1.2.3, merge2@npm:^1.3.0, merge2@npm:^1.4.1": - version: 1.4.1 - resolution: "merge2@npm:1.4.1" - checksum: 7268db63ed5169466540b6fb947aec313200bcf6d40c5ab722c22e242f651994619bcd85601602972d3c85bd2cc45a358a4c61937e9f11a061919a1da569b0c2 +"levn@npm:^0.4.1": + version: 0.4.1 + resolution: "levn@npm:0.4.1" + dependencies: + prelude-ls: ^1.2.1 + type-check: ~0.4.0 + checksum: 12c5021c859bd0f5248561bf139121f0358285ec545ebf48bb3d346820d5c61a4309535c7f387ed7d84361cf821e124ce346c6b7cef8ee09a67c1473b46d0fc4 languageName: node linkType: hard -"methods@npm:~1.1.2": - version: 1.1.2 - resolution: "methods@npm:1.1.2" - checksum: 0917ff4041fa8e2f2fda5425a955fe16ca411591fbd123c0d722fcf02b73971ed6f764d85f0a6f547ce49ee0221ce2c19a5fa692157931cecb422984f1dcd13a +"lilconfig@npm:2.1.0, lilconfig@npm:^2.1.0": + version: 2.1.0 + resolution: "lilconfig@npm:2.1.0" + checksum: 8549bb352b8192375fed4a74694cd61ad293904eee33f9d4866c2192865c44c4eb35d10782966242634e0cbc1e91fe62b1247f148dc5514918e3a966da7ea117 languageName: node linkType: hard -"micromark-core-commonmark@npm:^1.0.0, micromark-core-commonmark@npm:^1.0.1": - version: 1.1.0 - resolution: "micromark-core-commonmark@npm:1.1.0" - dependencies: - decode-named-character-reference: ^1.0.0 - micromark-factory-destination: ^1.0.0 - micromark-factory-label: ^1.0.0 - micromark-factory-space: ^1.0.0 - micromark-factory-title: ^1.0.0 - micromark-factory-whitespace: ^1.0.0 - micromark-util-character: ^1.0.0 - micromark-util-chunked: ^1.0.0 - micromark-util-classify-character: ^1.0.0 - micromark-util-html-tag-name: ^1.0.0 - micromark-util-normalize-identifier: ^1.0.0 - micromark-util-resolve-all: ^1.0.0 - micromark-util-subtokenize: ^1.0.0 - micromark-util-symbol: ^1.0.0 - micromark-util-types: ^1.0.1 - uvu: ^0.5.0 - checksum: c6dfedc95889cc73411cb222fc2330b9eda6d849c09c9fd9eb3cd3398af246167e9d3cdb0ae3ce9ae59dd34a14624c8330e380255d41279ad7350cf6c6be6c5b - languageName: node - linkType: hard - -"micromark-extension-frontmatter@npm:^1.0.0": - version: 1.1.1 - resolution: "micromark-extension-frontmatter@npm:1.1.1" - dependencies: - fault: ^2.0.0 - micromark-util-character: ^1.0.0 - micromark-util-symbol: ^1.0.0 - micromark-util-types: ^1.0.0 - checksum: fd3941c2f3c288b8484d62e88e8b010ce4e1f34e48f460cef519c419f8582c8ef966ee33eeb8698da5ee58c3bf4c8cb837e4c673f2d777d1e64592c4d97f7e03 +"lilconfig@npm:^3.0.0": + version: 3.0.0 + resolution: "lilconfig@npm:3.0.0" + checksum: a155f1cd24d324ab20dd6974db9ebcf3fb6f2b60175f7c052d917ff8a746b590bc1ee550f6fc3cb1e8716c8b58304e22fe2193febebc0cf16fa86d85e6f896c5 languageName: node linkType: hard -"micromark-extension-mdx-expression@npm:^1.0.0": - version: 1.0.8 - resolution: "micromark-extension-mdx-expression@npm:1.0.8" +"lines-and-columns@npm:^1.1.6": + version: 1.2.4 + resolution: "lines-and-columns@npm:1.2.4" + checksum: 0c37f9f7fa212b38912b7145e1cd16a5f3cd34d782441c3e6ca653485d326f58b3caccda66efce1c5812bde4961bbde3374fae4b0d11bf1226152337f3894aa5 + languageName: node + linkType: hard + +"lint-staged@npm:~13.2.2": + version: 13.2.3 + resolution: "lint-staged@npm:13.2.3" dependencies: - "@types/estree": ^1.0.0 - micromark-factory-mdx-expression: ^1.0.0 - micromark-factory-space: ^1.0.0 - micromark-util-character: ^1.0.0 - micromark-util-events-to-acorn: ^1.0.0 - micromark-util-symbol: ^1.0.0 - micromark-util-types: ^1.0.0 - uvu: ^0.5.0 - checksum: 49750d10c1664904a5eb61b8dae2a4ff31eef56176d02ff30de4ee4b5db7ca4598b6f044963c26771f53e2a5a517a9ff7223d87fc0b6e159332d77e4f3486cc3 + chalk: 5.2.0 + cli-truncate: ^3.1.0 + commander: ^10.0.0 + debug: ^4.3.4 + execa: ^7.0.0 + lilconfig: 2.1.0 + listr2: ^5.0.7 + micromatch: ^4.0.5 + normalize-path: ^3.0.0 + object-inspect: ^1.12.3 + pidtree: ^0.6.0 + string-argv: ^0.3.1 + yaml: ^2.2.2 + bin: + lint-staged: bin/lint-staged.js + checksum: ff51a1e33072f488b28b938ed47323816a1ff278ef6d0e5cbe1704b292773a6c8ce945b504eae3a9b5702917a979523a741f17023e16077bd5fa35be687cc067 languageName: node linkType: hard -"micromark-extension-mdx-jsx@npm:^1.0.0": - version: 1.0.5 - resolution: "micromark-extension-mdx-jsx@npm:1.0.5" +"listhen@npm:^1.5.5": + version: 1.6.0 + resolution: "listhen@npm:1.6.0" dependencies: - "@types/acorn": ^4.0.0 - "@types/estree": ^1.0.0 - estree-util-is-identifier-name: ^2.0.0 - micromark-factory-mdx-expression: ^1.0.0 - micromark-factory-space: ^1.0.0 - micromark-util-character: ^1.0.0 - micromark-util-symbol: ^1.0.0 - micromark-util-types: ^1.0.0 - uvu: ^0.5.0 - vfile-message: ^3.0.0 - checksum: 0ddb7b71c2c5f51f1232546d316b6c126ad245d57690b1af7877dd7b678b8b700d85a78587d56525b26a04082a4e833c6c9199c2db2a3379adf014be796123fb + "@parcel/watcher": ^2.4.0 + "@parcel/watcher-wasm": 2.4.0 + citty: ^0.1.5 + clipboardy: ^4.0.0 + consola: ^3.2.3 + crossws: ^0.1.0 + defu: ^6.1.4 + get-port-please: ^3.1.2 + h3: ^1.10.1 + http-shutdown: ^1.2.2 + jiti: ^1.21.0 + mlly: ^1.5.0 + node-forge: ^1.3.1 + pathe: ^1.1.2 + std-env: ^3.7.0 + ufo: ^1.3.2 + untun: ^0.1.3 + uqr: ^0.1.2 + bin: + listen: bin/listhen.mjs + listhen: bin/listhen.mjs + checksum: b5e1725838847ff6c08e65c62ec2977debe4becc35b0d75b7d2a064da9ec14ad098726859e626c7295e2cdc1309084e604679b02aa26df93997326675e56bff6 languageName: node linkType: hard -"micromark-extension-mdx-md@npm:^1.0.0": - version: 1.0.1 - resolution: "micromark-extension-mdx-md@npm:1.0.1" +"listr2@npm:^5.0.7": + version: 5.0.8 + resolution: "listr2@npm:5.0.8" dependencies: - micromark-util-types: ^1.0.0 - checksum: fdeaf8f4f973ec8ebefb74bb4cc1c25d2c3190e3ce4f8197e4cbc1ac325b39ac4dc2723a9f4ec8ff5b179d380e8ba37467acafa13c36dec8d312cd9822a5ab29 + cli-truncate: ^2.1.0 + colorette: ^2.0.19 + log-update: ^4.0.0 + p-map: ^4.0.0 + rfdc: ^1.3.0 + rxjs: ^7.8.0 + through: ^2.3.8 + wrap-ansi: ^7.0.0 + peerDependencies: + enquirer: ">= 2.3.0 < 3" + peerDependenciesMeta: + enquirer: + optional: true + checksum: 8be9f5632627c4df0dc33f452c98d415a49e5f1614650d3cab1b103c33e95f2a7a0e9f3e1e5de00d51bf0b4179acd8ff11b25be77dbe097cf3773c05e728d46c languageName: node linkType: hard -"micromark-extension-mdxjs-esm@npm:^1.0.0": - version: 1.0.5 - resolution: "micromark-extension-mdxjs-esm@npm:1.0.5" +"lit-element@npm:^3.3.0": + version: 3.3.3 + resolution: "lit-element@npm:3.3.3" dependencies: - "@types/estree": ^1.0.0 - micromark-core-commonmark: ^1.0.0 - micromark-util-character: ^1.0.0 - micromark-util-events-to-acorn: ^1.0.0 - micromark-util-symbol: ^1.0.0 - micromark-util-types: ^1.0.0 - unist-util-position-from-estree: ^1.1.0 - uvu: ^0.5.0 - vfile-message: ^3.0.0 - checksum: 7006cfa963d63a56c2744a9b03021aeba99a24b0a4f769165a13446439c8df529448a63db5f3ae604d1a4f616bbebde8efd1f495d7be32acb064491878e38fbe + "@lit-labs/ssr-dom-shim": ^1.1.0 + "@lit/reactive-element": ^1.3.0 + lit-html: ^2.8.0 + checksum: 29a596fa556e231cce7246ca3e5687ad238f299b0cb374a0934d5e6fe9adf1436e031d4fbd21b280aabfc0e21a66e6c4b52da558a908df2566d09d960f3ca93d languageName: node linkType: hard -"micromark-extension-mdxjs@npm:^1.0.0": - version: 1.0.1 - resolution: "micromark-extension-mdxjs@npm:1.0.1" +"lit-html@npm:^2.8.0": + version: 2.8.0 + resolution: "lit-html@npm:2.8.0" dependencies: - acorn: ^8.0.0 - acorn-jsx: ^5.0.0 - micromark-extension-mdx-expression: ^1.0.0 - micromark-extension-mdx-jsx: ^1.0.0 - micromark-extension-mdx-md: ^1.0.0 - micromark-extension-mdxjs-esm: ^1.0.0 - micromark-util-combine-extensions: ^1.0.0 - micromark-util-types: ^1.0.0 - checksum: 1e6bf3df765071dbfb80b20f1ca298f6789cf759dfd19d13301c91e33794940363989107b675afeedb78af446e4af590e0f0cf8c1ed63a70682a494c015eba52 + "@types/trusted-types": ^2.0.2 + checksum: 2d70df07248bcb2f502a3afb1e91d260735024fa669669ffb1417575aa39c3092779725ac1b90f5f39e4ce78c63f431f51176bc67f532389f0285a6991573255 languageName: node linkType: hard -"micromark-factory-destination@npm:^1.0.0": - version: 1.1.0 - resolution: "micromark-factory-destination@npm:1.1.0" +"lit@npm:2.8.0": + version: 2.8.0 + resolution: "lit@npm:2.8.0" dependencies: - micromark-util-character: ^1.0.0 - micromark-util-symbol: ^1.0.0 - micromark-util-types: ^1.0.0 - checksum: 9e2b5fb5fedbf622b687e20d51eb3d56ae90c0e7ecc19b37bd5285ec392c1e56f6e21aa7cfcb3c01eda88df88fe528f3acb91a5f57d7f4cba310bc3cd7f824fa + "@lit/reactive-element": ^1.6.0 + lit-element: ^3.3.0 + lit-html: ^2.8.0 + checksum: 2480e733f7d022d3ecba91abc58a20968f0ca8f5fa30b3341ecf4bcf4845e674ad27b721a5ae53529cafc6ca603c015b80d0979ceb7a711e268ef20bb6bc7527 languageName: node linkType: hard -"micromark-factory-label@npm:^1.0.0": - version: 1.1.0 - resolution: "micromark-factory-label@npm:1.1.0" +"locate-path@npm:^5.0.0": + version: 5.0.0 + resolution: "locate-path@npm:5.0.0" dependencies: - micromark-util-character: ^1.0.0 - micromark-util-symbol: ^1.0.0 - micromark-util-types: ^1.0.0 - uvu: ^0.5.0 - checksum: fcda48f1287d9b148c562c627418a2ab759cdeae9c8e017910a0cba94bb759a96611e1fc6df33182e97d28fbf191475237298983bb89ef07d5b02464b1ad28d5 + p-locate: ^4.1.0 + checksum: 83e51725e67517287d73e1ded92b28602e3ae5580b301fe54bfb76c0c723e3f285b19252e375712316774cf52006cb236aed5704692c32db0d5d089b69696e30 languageName: node linkType: hard -"micromark-factory-mdx-expression@npm:^1.0.0": - version: 1.0.9 - resolution: "micromark-factory-mdx-expression@npm:1.0.9" +"locate-path@npm:^6.0.0": + version: 6.0.0 + resolution: "locate-path@npm:6.0.0" dependencies: - "@types/estree": ^1.0.0 - micromark-util-character: ^1.0.0 - micromark-util-events-to-acorn: ^1.0.0 - micromark-util-symbol: ^1.0.0 - micromark-util-types: ^1.0.0 - unist-util-position-from-estree: ^1.0.0 - uvu: ^0.5.0 - vfile-message: ^3.0.0 - checksum: 7359bf3290bf95c647aff1208d88a58288acdcd15190fe3da8bc56a683615f158a7f0593ace7ae459581079d7a9f7420a68d31ce8f0f1637cadacfb52e7782f0 + p-locate: ^5.0.0 + checksum: 72eb661788a0368c099a184c59d2fee760b3831c9c1c33955e8a19ae4a21b4116e53fa736dc086cdeb9fce9f7cc508f2f92d2d3aae516f133e16a2bb59a39f5a languageName: node linkType: hard -"micromark-factory-space@npm:^1.0.0": - version: 1.1.0 - resolution: "micromark-factory-space@npm:1.1.0" - dependencies: - micromark-util-character: ^1.0.0 - micromark-util-types: ^1.0.0 - checksum: b58435076b998a7e244259a4694eb83c78915581206b6e7fc07b34c6abd36a1726ade63df8972fbf6c8fa38eecb9074f4e17be8d53f942e3b3d23d1a0ecaa941 +"lodash.defaults@npm:^4.2.0": + version: 4.2.0 + resolution: "lodash.defaults@npm:4.2.0" + checksum: 84923258235592c8886e29de5491946ff8c2ae5c82a7ac5cddd2e3cb697e6fbdfbbb6efcca015795c86eec2bb953a5a2ee4016e3735a3f02720428a40efbb8f1 languageName: node linkType: hard -"micromark-factory-title@npm:^1.0.0": - version: 1.1.0 - resolution: "micromark-factory-title@npm:1.1.0" - dependencies: - micromark-factory-space: ^1.0.0 - micromark-util-character: ^1.0.0 - micromark-util-symbol: ^1.0.0 - micromark-util-types: ^1.0.0 - checksum: 4432d3dbc828c81f483c5901b0c6591a85d65a9e33f7d96ba7c3ae821617a0b3237ff5faf53a9152d00aaf9afb3a9f185b205590f40ed754f1d9232e0e9157b1 +"lodash.isarguments@npm:^3.1.0": + version: 3.1.0 + resolution: "lodash.isarguments@npm:3.1.0" + checksum: ae1526f3eb5c61c77944b101b1f655f846ecbedcb9e6b073526eba6890dc0f13f09f72e11ffbf6540b602caee319af9ac363d6cdd6be41f4ee453436f04f13b5 languageName: node linkType: hard -"micromark-factory-whitespace@npm:^1.0.0": - version: 1.1.0 - resolution: "micromark-factory-whitespace@npm:1.1.0" - dependencies: - micromark-factory-space: ^1.0.0 - micromark-util-character: ^1.0.0 - micromark-util-symbol: ^1.0.0 - micromark-util-types: ^1.0.0 - checksum: ef0fa682c7d593d85a514ee329809dee27d10bc2a2b65217d8ef81173e33b8e83c549049764b1ad851adfe0a204dec5450d9d20a4ca8598f6c94533a73f73fcd +"lodash.isequal@npm:4.5.0": + version: 4.5.0 + resolution: "lodash.isequal@npm:4.5.0" + checksum: da27515dc5230eb1140ba65ff8de3613649620e8656b19a6270afe4866b7bd461d9ba2ac8a48dcc57f7adac4ee80e1de9f965d89d4d81a0ad52bb3eec2609644 languageName: node linkType: hard -"micromark-util-character@npm:^1.0.0": - version: 1.2.0 - resolution: "micromark-util-character@npm:1.2.0" - dependencies: - micromark-util-symbol: ^1.0.0 - micromark-util-types: ^1.0.0 - checksum: 089e79162a19b4a28731736246579ab7e9482ac93cd681c2bfca9983dcff659212ef158a66a5957e9d4b1dba957d1b87b565d85418a5b009f0294f1f07f2aaac +"lodash.merge@npm:^4.6.2": + version: 4.6.2 + resolution: "lodash.merge@npm:4.6.2" + checksum: ad580b4bdbb7ca1f7abf7e1bce63a9a0b98e370cf40194b03380a46b4ed799c9573029599caebc1b14e3f24b111aef72b96674a56cfa105e0f5ac70546cdc005 languageName: node linkType: hard -"micromark-util-chunked@npm:^1.0.0": - version: 1.1.0 - resolution: "micromark-util-chunked@npm:1.1.0" - dependencies: - micromark-util-symbol: ^1.0.0 - checksum: c435bde9110cb595e3c61b7f54c2dc28ee03e6a57fa0fc1e67e498ad8bac61ee5a7457a2b6a73022ddc585676ede4b912d28dcf57eb3bd6951e54015e14dc20b +"lodash@npm:*, lodash@npm:^4.17.21": + version: 4.17.21 + resolution: "lodash@npm:4.17.21" + checksum: eb835a2e51d381e561e508ce932ea50a8e5a68f4ebdd771ea240d3048244a8d13658acbd502cd4829768c56f2e16bdd4340b9ea141297d472517b83868e677f7 languageName: node linkType: hard -"micromark-util-classify-character@npm:^1.0.0": - version: 1.1.0 - resolution: "micromark-util-classify-character@npm:1.1.0" +"log-update@npm:^4.0.0": + version: 4.0.0 + resolution: "log-update@npm:4.0.0" dependencies: - micromark-util-character: ^1.0.0 - micromark-util-symbol: ^1.0.0 - micromark-util-types: ^1.0.0 - checksum: 8499cb0bb1f7fb946f5896285fcca65cd742f66cd3e79ba7744792bd413ec46834f932a286de650349914d02e822946df3b55d03e6a8e1d245d1ddbd5102e5b0 + ansi-escapes: ^4.3.0 + cli-cursor: ^3.1.0 + slice-ansi: ^4.0.0 + wrap-ansi: ^6.2.0 + checksum: ae2f85bbabc1906034154fb7d4c4477c79b3e703d22d78adee8b3862fa913942772e7fa11713e3d96fb46de4e3cabefbf5d0a544344f03b58d3c4bff52aa9eb2 languageName: node linkType: hard -"micromark-util-combine-extensions@npm:^1.0.0": - version: 1.1.0 - resolution: "micromark-util-combine-extensions@npm:1.1.0" +"loose-envify@npm:^1.0.0, loose-envify@npm:^1.1.0, loose-envify@npm:^1.4.0": + version: 1.4.0 + resolution: "loose-envify@npm:1.4.0" dependencies: - micromark-util-chunked: ^1.0.0 - micromark-util-types: ^1.0.0 - checksum: ee78464f5d4b61ccb437850cd2d7da4d690b260bca4ca7a79c4bb70291b84f83988159e373b167181b6716cb197e309bc6e6c96a68cc3ba9d50c13652774aba9 + js-tokens: ^3.0.0 || ^4.0.0 + bin: + loose-envify: cli.js + checksum: 6517e24e0cad87ec9888f500c5b5947032cdfe6ef65e1c1936a0c48a524b81e65542c9c3edc91c97d5bddc806ee2a985dbc79be89215d613b1de5db6d1cfe6f4 languageName: node linkType: hard -"micromark-util-decode-numeric-character-reference@npm:^1.0.0": - version: 1.1.0 - resolution: "micromark-util-decode-numeric-character-reference@npm:1.1.0" - dependencies: - micromark-util-symbol: ^1.0.0 - checksum: 4733fe75146e37611243f055fc6847137b66f0cde74d080e33bd26d0408c1d6f44cabc984063eee5968b133cb46855e729d555b9ff8d744652262b7b51feec73 +"lru-cache@npm:^10.0.1, lru-cache@npm:^10.0.2, lru-cache@npm:^9.1.1 || ^10.0.0": + version: 10.2.0 + resolution: "lru-cache@npm:10.2.0" + checksum: eee7ddda4a7475deac51ac81d7dd78709095c6fa46e8350dc2d22462559a1faa3b81ed931d5464b13d48cbd7e08b46100b6f768c76833912bc444b99c37e25db languageName: node linkType: hard -"micromark-util-decode-string@npm:^1.0.0": - version: 1.1.0 - resolution: "micromark-util-decode-string@npm:1.1.0" +"lru-cache@npm:^6.0.0": + version: 6.0.0 + resolution: "lru-cache@npm:6.0.0" dependencies: - decode-named-character-reference: ^1.0.0 - micromark-util-character: ^1.0.0 - micromark-util-decode-numeric-character-reference: ^1.0.0 - micromark-util-symbol: ^1.0.0 - checksum: f1625155db452f15aa472918499689ba086b9c49d1322a08b22bfbcabe918c61b230a3002c8bc3ea9b1f52ca7a9bb1c3dd43ccb548c7f5f8b16c24a1ae77a813 - languageName: node - linkType: hard - -"micromark-util-encode@npm:^1.0.0": - version: 1.1.0 - resolution: "micromark-util-encode@npm:1.1.0" - checksum: 4ef29d02b12336918cea6782fa87c8c578c67463925221d4e42183a706bde07f4b8b5f9a5e1c7ce8c73bb5a98b261acd3238fecd152e6dd1cdfa2d1ae11b60a0 + yallist: ^4.0.0 + checksum: f97f499f898f23e4585742138a22f22526254fdba6d75d41a1c2526b3b6cc5747ef59c5612ba7375f42aca4f8461950e925ba08c991ead0651b4918b7c978297 languageName: node linkType: hard -"micromark-util-events-to-acorn@npm:^1.0.0": - version: 1.2.3 - resolution: "micromark-util-events-to-acorn@npm:1.2.3" +"make-dir@npm:^3.1.0": + version: 3.1.0 + resolution: "make-dir@npm:3.1.0" dependencies: - "@types/acorn": ^4.0.0 - "@types/estree": ^1.0.0 - "@types/unist": ^2.0.0 - estree-util-visit: ^1.0.0 - micromark-util-symbol: ^1.0.0 - micromark-util-types: ^1.0.0 - uvu: ^0.5.0 - vfile-message: ^3.0.0 - checksum: aba0dadb8689a70fab6223386b843f3084c21db0f96b412ebd7be91d2392bb8571af899c60e13eeb373a5f851d6dcd690b584ed1e09833904ac72ddd0a88a7ab + semver: ^6.0.0 + checksum: 484200020ab5a1fdf12f393fe5f385fc8e4378824c940fba1729dcd198ae4ff24867bc7a5646331e50cead8abff5d9270c456314386e629acec6dff4b8016b78 languageName: node linkType: hard -"micromark-util-html-tag-name@npm:^1.0.0": - version: 1.2.0 - resolution: "micromark-util-html-tag-name@npm:1.2.0" - checksum: ccf0fa99b5c58676dc5192c74665a3bfd1b536fafaf94723bd7f31f96979d589992df6fcf2862eba290ef18e6a8efb30ec8e1e910d9f3fc74f208871e9f84750 +"make-error@npm:^1.1.1": + version: 1.3.6 + resolution: "make-error@npm:1.3.6" + checksum: b86e5e0e25f7f777b77fabd8e2cbf15737972869d852a22b7e73c17623928fccb826d8e46b9951501d3f20e51ad74ba8c59ed584f610526a48f8ccf88aaec402 languageName: node linkType: hard -"micromark-util-normalize-identifier@npm:^1.0.0": - version: 1.1.0 - resolution: "micromark-util-normalize-identifier@npm:1.1.0" +"make-fetch-happen@npm:^13.0.0": + version: 13.0.0 + resolution: "make-fetch-happen@npm:13.0.0" dependencies: - micromark-util-symbol: ^1.0.0 - checksum: 8655bea41ffa4333e03fc22462cb42d631bbef9c3c07b625fd852b7eb442a110f9d2e5902a42e65188d85498279569502bf92f3434a1180fc06f7c37edfbaee2 + "@npmcli/agent": ^2.0.0 + cacache: ^18.0.0 + http-cache-semantics: ^4.1.1 + is-lambda: ^1.0.1 + minipass: ^7.0.2 + minipass-fetch: ^3.0.0 + minipass-flush: ^1.0.5 + minipass-pipeline: ^1.2.4 + negotiator: ^0.6.3 + promise-retry: ^2.0.1 + ssri: ^10.0.0 + checksum: 7c7a6d381ce919dd83af398b66459a10e2fe8f4504f340d1d090d3fa3d1b0c93750220e1d898114c64467223504bd258612ba83efbc16f31b075cd56de24b4af languageName: node linkType: hard -"micromark-util-resolve-all@npm:^1.0.0": - version: 1.1.0 - resolution: "micromark-util-resolve-all@npm:1.1.0" - dependencies: - micromark-util-types: ^1.0.0 - checksum: 1ce6c0237cd3ca061e76fae6602cf95014e764a91be1b9f10d36cb0f21ca88f9a07de8d49ab8101efd0b140a4fbfda6a1efb72027ab3f4d5b54c9543271dc52c +"make-plural@npm:*": + version: 7.3.0 + resolution: "make-plural@npm:7.3.0" + checksum: bb39b4b77533f0d5fb94eec128340b54dda8c1707d6b0a98c148e5d7bc23094e123f88275a61573fa31dc2f5d7352215cee0df523cd69b5d8fcb3969a2bcf8f8 languageName: node linkType: hard -"micromark-util-sanitize-uri@npm:^1.0.0": - version: 1.2.0 - resolution: "micromark-util-sanitize-uri@npm:1.2.0" +"media-query-parser@npm:^2.0.2": + version: 2.0.2 + resolution: "media-query-parser@npm:2.0.2" dependencies: - micromark-util-character: ^1.0.0 - micromark-util-encode: ^1.0.0 - micromark-util-symbol: ^1.0.0 - checksum: 6663f365c4fe3961d622a580f4a61e34867450697f6806f027f21cf63c92989494895fcebe2345d52e249fe58a35be56e223a9776d084c9287818b40c779acc1 + "@babel/runtime": ^7.12.5 + checksum: 8ef956d9e63fe6f4041988beda69843b3a6bb48228ea2923a066f6e7c8f7c5dba75fae357318c48a97ed5beae840b8425cb7e727fc1bb77acc65f2005f8945ab languageName: node linkType: hard -"micromark-util-subtokenize@npm:^1.0.0": - version: 1.1.0 - resolution: "micromark-util-subtokenize@npm:1.1.0" - dependencies: - micromark-util-chunked: ^1.0.0 - micromark-util-symbol: ^1.0.0 - micromark-util-types: ^1.0.0 - uvu: ^0.5.0 - checksum: 4a9d780c4d62910e196ea4fd886dc4079d8e424e5d625c0820016da0ed399a281daff39c50f9288045cc4bcd90ab47647e5396aba500f0853105d70dc8b1fc45 +"merge-stream@npm:^2.0.0": + version: 2.0.0 + resolution: "merge-stream@npm:2.0.0" + checksum: 6fa4dcc8d86629705cea944a4b88ef4cb0e07656ebf223fa287443256414283dd25d91c1cd84c77987f2aec5927af1a9db6085757cb43d90eb170ebf4b47f4f4 languageName: node linkType: hard -"micromark-util-symbol@npm:^1.0.0": - version: 1.1.0 - resolution: "micromark-util-symbol@npm:1.1.0" - checksum: 02414a753b79f67ff3276b517eeac87913aea6c028f3e668a19ea0fc09d98aea9f93d6222a76ca783d20299af9e4b8e7c797fe516b766185dcc6e93290f11f88 +"merge2@npm:^1.3.0, merge2@npm:^1.4.1": + version: 1.4.1 + resolution: "merge2@npm:1.4.1" + checksum: 7268db63ed5169466540b6fb947aec313200bcf6d40c5ab722c22e242f651994619bcd85601602972d3c85bd2cc45a358a4c61937e9f11a061919a1da569b0c2 languageName: node linkType: hard -"micromark-util-types@npm:^1.0.0, micromark-util-types@npm:^1.0.1": - version: 1.1.0 - resolution: "micromark-util-types@npm:1.1.0" - checksum: b0ef2b4b9589f15aec2666690477a6a185536927ceb7aa55a0f46475852e012d75a1ab945187e5c7841969a842892164b15d58ff8316b8e0d6cc920cabd5ede7 +"micro-ftch@npm:^0.3.1": + version: 0.3.1 + resolution: "micro-ftch@npm:0.3.1" + checksum: 0e496547253a36e98a83fb00c628c53c3fb540fa5aaeaf718438873785afd193244988c09d219bb1802984ff227d04938d9571ef90fe82b48bd282262586aaff languageName: node linkType: hard -"micromark@npm:^3.0.0": - version: 3.2.0 - resolution: "micromark@npm:3.2.0" - dependencies: - "@types/debug": ^4.0.0 - debug: ^4.0.0 - decode-named-character-reference: ^1.0.0 - micromark-core-commonmark: ^1.0.1 - micromark-factory-space: ^1.0.0 - micromark-util-character: ^1.0.0 - micromark-util-chunked: ^1.0.0 - micromark-util-combine-extensions: ^1.0.0 - micromark-util-decode-numeric-character-reference: ^1.0.0 - micromark-util-encode: ^1.0.0 - micromark-util-normalize-identifier: ^1.0.0 - micromark-util-resolve-all: ^1.0.0 - micromark-util-sanitize-uri: ^1.0.0 - micromark-util-subtokenize: ^1.0.0 - micromark-util-symbol: ^1.0.0 - micromark-util-types: ^1.0.1 - uvu: ^0.5.0 - checksum: 56c15851ad3eb8301aede65603473443e50c92a54849cac1dadd57e4ec33ab03a0a77f3df03de47133e6e8f695dae83b759b514586193269e98c0bf319ecd5e4 +"micro@npm:9.3.5-canary.3": + version: 9.3.5-canary.3 + resolution: "micro@npm:9.3.5-canary.3" + dependencies: + arg: 4.1.0 + content-type: 1.0.4 + raw-body: 2.4.1 + bin: + micro: ./bin/micro.js + checksum: 6eed7314460602b073c57fa1c2399354e3186c8a9d692185bd7f2f01ab45d5528054e37add2dc5ce6dff039d16bc728e492616f5451380c492ce78f84c2e4b88 languageName: node linkType: hard @@ -10911,31 +7008,6 @@ __metadata: languageName: node linkType: hard -"mime-db@npm:1.52.0": - version: 1.52.0 - resolution: "mime-db@npm:1.52.0" - checksum: 0d99a03585f8b39d68182803b12ac601d9c01abfa28ec56204fa330bc9f3d1c5e14beb049bafadb3dbdf646dfb94b87e24d4ec7b31b7279ef906a8ea9b6a513f - languageName: node - linkType: hard - -"mime-types@npm:~2.1.24, mime-types@npm:~2.1.34": - version: 2.1.35 - resolution: "mime-types@npm:2.1.35" - dependencies: - mime-db: 1.52.0 - checksum: 89a5b7f1def9f3af5dad6496c5ed50191ae4331cc5389d7c521c8ad28d5fdad2d06fd81baf38fed813dc4e46bb55c8145bb0ff406330818c9cf712fb2e9b3836 - languageName: node - linkType: hard - -"mime@npm:1.6.0": - version: 1.6.0 - resolution: "mime@npm:1.6.0" - bin: - mime: cli.js - checksum: fef25e39263e6d207580bdc629f8872a3f9772c923c7f8c7e793175cee22777bbe8bba95e5d509a40aaa292d8974514ce634ae35769faa45f22d17edda5e8557 - languageName: node - linkType: hard - "mime@npm:^3.0.0": version: 3.0.0 resolution: "mime@npm:3.0.0" @@ -10959,20 +7031,6 @@ __metadata: languageName: node linkType: hard -"mimic-response@npm:^1.0.0": - version: 1.0.1 - resolution: "mimic-response@npm:1.0.1" - checksum: 034c78753b0e622bc03c983663b1cdf66d03861050e0c8606563d149bc2b02d63f62ce4d32be4ab50d0553ae0ffe647fc34d1f5281184c6e1e8cf4d85e8d9823 - languageName: node - linkType: hard - -"mimic-response@npm:^3.1.0": - version: 3.1.0 - resolution: "mimic-response@npm:3.1.0" - checksum: 25739fee32c17f433626bf19f016df9036b75b3d84a3046c7d156e72ec963dd29d7fc8a302f55a3d6c5a4ff24259676b15d915aad6480815a969ff2ec0836867 - languageName: node - linkType: hard - "minimalistic-assert@npm:^1.0.0, minimalistic-assert@npm:^1.0.1": version: 1.0.1 resolution: "minimalistic-assert@npm:1.0.1" @@ -10987,6 +7045,15 @@ __metadata: languageName: node linkType: hard +"minimatch@npm:9.0.3, minimatch@npm:^9.0.1": + version: 9.0.3 + resolution: "minimatch@npm:9.0.3" + dependencies: + brace-expansion: ^2.0.1 + checksum: 253487976bf485b612f16bf57463520a14f512662e592e95c571afdab1442a6a6864b6c88f248ce6fc4ff0b6de04ac7aa6c8bb51e868e99d1d65eb0658a708b5 + languageName: node + linkType: hard + "minimatch@npm:^3.0.4, minimatch@npm:^3.1.1, minimatch@npm:^3.1.2": version: 3.1.2 resolution: "minimatch@npm:3.1.2" @@ -10996,15 +7063,6 @@ __metadata: languageName: node linkType: hard -"minimatch@npm:^9.0.1": - version: 9.0.3 - resolution: "minimatch@npm:9.0.3" - dependencies: - brace-expansion: ^2.0.1 - checksum: 253487976bf485b612f16bf57463520a14f512662e592e95c571afdab1442a6a6864b6c88f248ce6fc4ff0b6de04ac7aa6c8bb51e868e99d1d65eb0658a708b5 - languageName: node - linkType: hard - "minimist@npm:^1.2.0, minimist@npm:^1.2.6": version: 1.2.8 resolution: "minimist@npm:1.2.8" @@ -11012,12 +7070,12 @@ __metadata: languageName: node linkType: hard -"minipass-collect@npm:^1.0.2": - version: 1.0.2 - resolution: "minipass-collect@npm:1.0.2" +"minipass-collect@npm:^2.0.1": + version: 2.0.1 + resolution: "minipass-collect@npm:2.0.1" dependencies: - minipass: ^3.0.0 - checksum: 14df761028f3e47293aee72888f2657695ec66bd7d09cae7ad558da30415fdc4752bbfee66287dcc6fd5e6a2fa3466d6c484dc1cbd986525d9393b9523d97f10 + minipass: ^7.0.3 + checksum: b251bceea62090f67a6cced7a446a36f4cd61ee2d5cea9aee7fff79ba8030e416327a1c5aa2908dc22629d06214b46d88fdab8c51ac76bacbf5703851b5ad342 languageName: node linkType: hard @@ -11045,7 +7103,7 @@ __metadata: languageName: node linkType: hard -"minipass-pipeline@npm:^1.2.2, minipass-pipeline@npm:^1.2.4": +"minipass-pipeline@npm:^1.2.4": version: 1.2.4 resolution: "minipass-pipeline@npm:1.2.4" dependencies: @@ -11063,7 +7121,17 @@ __metadata: languageName: node linkType: hard -"minipass@npm:^3.0.0, minipass@npm:^3.1.1": +"minipass@npm:^2.6.0, minipass@npm:^2.9.0": + version: 2.9.0 + resolution: "minipass@npm:2.9.0" + dependencies: + safe-buffer: ^5.1.2 + yallist: ^3.0.0 + checksum: 077b66f31ba44fd5a0d27d12a9e6a86bff8f97a4978dedb0373167156b5599fadb6920fdde0d9f803374164d810e05e8462ce28e86abbf7f0bea293a93711fc6 + languageName: node + linkType: hard + +"minipass@npm:^3.0.0": version: 3.3.6 resolution: "minipass@npm:3.3.6" dependencies: @@ -11086,6 +7154,15 @@ __metadata: languageName: node linkType: hard +"minizlib@npm:^1.3.3": + version: 1.3.3 + resolution: "minizlib@npm:1.3.3" + dependencies: + minipass: ^2.9.0 + checksum: b0425c04d2ae6aad5027462665f07cc0d52075f7fa16e942b4611115f9b31f02924073b7221be6f75929d3c47ab93750c63f6dc2bbe8619ceacb3de1f77732c0 + languageName: node + linkType: hard + "minizlib@npm:^2.1.1, minizlib@npm:^2.1.2": version: 2.1.2 resolution: "minizlib@npm:2.1.2" @@ -11096,10 +7173,14 @@ __metadata: languageName: node linkType: hard -"mkdirp-classic@npm:^0.5.2": - version: 0.5.3 - resolution: "mkdirp-classic@npm:0.5.3" - checksum: 3f4e088208270bbcc148d53b73e9a5bd9eef05ad2cbf3b3d0ff8795278d50dd1d11a8ef1875ff5aea3fa888931f95bfcb2ad5b7c1061cfefd6284d199e6776ac +"mkdirp@npm:^0.5.5": + version: 0.5.6 + resolution: "mkdirp@npm:0.5.6" + dependencies: + minimist: ^1.2.6 + bin: + mkdirp: bin/cmd.js + checksum: 0c91b721bb12c3f9af4b77ebf73604baf350e64d80df91754dc509491ae93bf238581e59c7188360cec7cb62fc4100959245a42cfe01834efedc5e9d068376c2 languageName: node linkType: hard @@ -11112,22 +7193,15 @@ __metadata: languageName: node linkType: hard -"mlly@npm:^1.1.0, mlly@npm:^1.2.0, mlly@npm:^1.4.2": - version: 1.4.2 - resolution: "mlly@npm:1.4.2" +"mlly@npm:^1.2.0, mlly@npm:^1.5.0": + version: 1.5.0 + resolution: "mlly@npm:1.5.0" dependencies: - acorn: ^8.10.0 - pathe: ^1.1.1 + acorn: ^8.11.3 + pathe: ^1.1.2 pkg-types: ^1.0.3 - ufo: ^1.3.0 - checksum: ad0813eca133e59ac03b356b87deea57da96083dce7dda58a8eeb2dce92b7cc2315bedd9268f3ff8e98effe1867ddb1307486d4c5cd8be162daa8e0fa0a98ed4 - languageName: node - linkType: hard - -"modern-ahocorasick@npm:^1.0.0": - version: 1.0.1 - resolution: "modern-ahocorasick@npm:1.0.1" - checksum: ec83479f406511f37a966d66ce1c2b1701bb4a2cc2aabbbc257001178c9fbc48ce748c88eb10dfe72ba8b7f991a0bc7f1fa14683f444685edd1a9eeb32ecbc1e + ufo: ^1.3.2 + checksum: 82fda663265628ee83a31e99950553371f42f6995838795d44320c78497bf17ab04d1f26c49998944178e4e2416f6f0a580bbca3e272114ee597ae9f3c128b47 languageName: node linkType: hard @@ -11145,17 +7219,17 @@ __metadata: languageName: node linkType: hard -"mri@npm:1.2.0, mri@npm:^1.1.0, mri@npm:^1.2.0": +"mri@npm:1.2.0, mri@npm:^1.2.0": version: 1.2.0 resolution: "mri@npm:1.2.0" checksum: 83f515abbcff60150873e424894a2f65d68037e5a7fcde8a9e2b285ee9c13ac581b63cfc1e6826c4732de3aeb84902f7c1e16b7aff46cd3f897a0f757a894e85 languageName: node linkType: hard -"ms@npm:2.0.0": - version: 2.0.0 - resolution: "ms@npm:2.0.0" - checksum: 0e6a22b8b746d2e0b65a430519934fefd41b6db0682e3477c10f60c76e947c4c0ad06f63ffdf1d78d335f83edee8c0aa928aa66a36c7cd95b69b26f468d527f4 +"ms@npm:2.1.1": + version: 2.1.1 + resolution: "ms@npm:2.1.1" + checksum: 0078a23cd916a9a7435c413caa14c57d4b4f6e2470e0ab554b6964163c8a4436448ac7ae020e883685475da6b6796cc396b670f579cb275db288a21e3e57721e languageName: node linkType: hard @@ -11166,7 +7240,7 @@ __metadata: languageName: node linkType: hard -"ms@npm:2.1.3, ms@npm:^2.0.0, ms@npm:^2.1.1": +"ms@npm:^2.1.1": version: 2.1.3 resolution: "ms@npm:2.1.3" checksum: aa92de608021b242401676e35cfa5aa42dd70cbdc082b916da7fb925c542173e36bce97ea3e804923fe92c0ad991434e4a38327e15a1b5b5f945d66df615ae6d @@ -11180,13 +7254,6 @@ __metadata: languageName: node linkType: hard -"mute-stream@npm:0.0.8": - version: 0.0.8 - resolution: "mute-stream@npm:0.0.8" - checksum: ff48d251fc3f827e5b1206cda0ffdaec885e56057ee86a3155e1951bc940fd5f33531774b1cc8414d7668c10a8907f863f6561875ee6e8768931a62121a531a1 - languageName: node - linkType: hard - "mz@npm:^2.7.0": version: 2.7.0 resolution: "mz@npm:2.7.0" @@ -11198,7 +7265,7 @@ __metadata: languageName: node linkType: hard -"nanoid@npm:^3.3.4, nanoid@npm:^3.3.6": +"nanoid@npm:^3.3.6, nanoid@npm:^3.3.7": version: 3.3.7 resolution: "nanoid@npm:3.3.7" bin: @@ -11221,61 +7288,44 @@ __metadata: languageName: node linkType: hard -"negotiator@npm:0.6.3, negotiator@npm:^0.6.3": +"negotiator@npm:^0.6.3": version: 0.6.3 resolution: "negotiator@npm:0.6.3" checksum: b8ffeb1e262eff7968fc90a2b6767b04cfd9842582a9d0ece0af7049537266e7b2506dfb1d107a32f06dd849ab2aea834d5830f7f4d0e5cb7d36e1ae55d021d9 languageName: node linkType: hard -"netmask@npm:^2.0.2": - version: 2.0.2 - resolution: "netmask@npm:2.0.2" - checksum: c65cb8d3f7ea5669edddb3217e4c96910a60d0d9a4b52d9847ff6b28b2d0277cd8464eee0ef85133cdee32605c57940cacdd04a9a019079b091b6bba4cb0ec22 - languageName: node - linkType: hard - -"next@npm:~13.1.6": - version: 13.1.6 - resolution: "next@npm:13.1.6" - dependencies: - "@next/env": 13.1.6 - "@next/swc-android-arm-eabi": 13.1.6 - "@next/swc-android-arm64": 13.1.6 - "@next/swc-darwin-arm64": 13.1.6 - "@next/swc-darwin-x64": 13.1.6 - "@next/swc-freebsd-x64": 13.1.6 - "@next/swc-linux-arm-gnueabihf": 13.1.6 - "@next/swc-linux-arm64-gnu": 13.1.6 - "@next/swc-linux-arm64-musl": 13.1.6 - "@next/swc-linux-x64-gnu": 13.1.6 - "@next/swc-linux-x64-musl": 13.1.6 - "@next/swc-win32-arm64-msvc": 13.1.6 - "@next/swc-win32-ia32-msvc": 13.1.6 - "@next/swc-win32-x64-msvc": 13.1.6 - "@swc/helpers": 0.4.14 +"next@npm:~14.0.4": + version: 14.0.4 + resolution: "next@npm:14.0.4" + dependencies: + "@next/env": 14.0.4 + "@next/swc-darwin-arm64": 14.0.4 + "@next/swc-darwin-x64": 14.0.4 + "@next/swc-linux-arm64-gnu": 14.0.4 + "@next/swc-linux-arm64-musl": 14.0.4 + "@next/swc-linux-x64-gnu": 14.0.4 + "@next/swc-linux-x64-musl": 14.0.4 + "@next/swc-win32-arm64-msvc": 14.0.4 + "@next/swc-win32-ia32-msvc": 14.0.4 + "@next/swc-win32-x64-msvc": 14.0.4 + "@swc/helpers": 0.5.2 + busboy: 1.6.0 caniuse-lite: ^1.0.30001406 - postcss: 8.4.14 + graceful-fs: ^4.2.11 + postcss: 8.4.31 styled-jsx: 5.1.1 + watchpack: 2.4.0 peerDependencies: - fibers: ">= 3.1.0" - node-sass: ^6.0.0 || ^7.0.0 + "@opentelemetry/api": ^1.1.0 react: ^18.2.0 react-dom: ^18.2.0 sass: ^1.3.0 dependenciesMeta: - "@next/swc-android-arm-eabi": - optional: true - "@next/swc-android-arm64": - optional: true "@next/swc-darwin-arm64": optional: true "@next/swc-darwin-x64": optional: true - "@next/swc-freebsd-x64": - optional: true - "@next/swc-linux-arm-gnueabihf": - optional: true "@next/swc-linux-arm64-gnu": optional: true "@next/swc-linux-arm64-musl": @@ -11291,38 +7341,13 @@ __metadata: "@next/swc-win32-x64-msvc": optional: true peerDependenciesMeta: - fibers: - optional: true - node-sass: + "@opentelemetry/api": optional: true sass: optional: true bin: next: dist/bin/next - checksum: 584977e382bd826c21e7fc5f67bca50e4d95741a854b1686394d45331404479c7266569671227421975fc18e5cf70769a4ad7edede7450d4497213205bba77c8 - languageName: node - linkType: hard - -"nextjs-progressbar@npm:~0.0.16": - version: 0.0.16 - resolution: "nextjs-progressbar@npm:0.0.16" - dependencies: - "@types/nprogress": ^0.2.0 - nprogress: ^0.2.0 - prop-types: ^15.8.1 - peerDependencies: - next: ">= 6.0.0" - react: ">= 16.0.0" - checksum: b75f7bd1f336765aab203613e028ba5cb7e89590add46e4df435cc868bad042c2c5c6fe8c2cf1b127b1cae66eaae6e10d061b2908d7d4b6a9dcd79ad4e41bbcd - languageName: node - linkType: hard - -"node-addon-api@npm:^1.7.1": - version: 1.7.2 - resolution: "node-addon-api@npm:1.7.2" - dependencies: - node-gyp: latest - checksum: 938922b3d7cb34ee137c5ec39df6289a3965e8cab9061c6848863324c21a778a81ae3bc955554c56b6b86962f6ccab2043dd5fa3f33deab633636bd28039333f + checksum: 879842979d3c7e2d2e2cd3edad3e715d408060a286bb12299089e08d7142af9effceee877e6d18aad359983119d025298ec5c63dd6317443027b47dc5167ac40 languageName: node linkType: hard @@ -11336,18 +7361,18 @@ __metadata: linkType: hard "node-addon-api@npm:^7.0.0": - version: 7.0.0 - resolution: "node-addon-api@npm:7.0.0" + version: 7.1.0 + resolution: "node-addon-api@npm:7.1.0" dependencies: node-gyp: latest - checksum: 4349465d737e284b280fc0e5fd2384f9379bca6b7f2a5a1460bea676ba5b90bf563e7d02a9254c35b9ed808641c81d9b4ca9e1da17d2849cd07727660b00b332 + checksum: 26640c8d2ed7e2059e2ed65ee79e2a195306b3f1fc27ad11448943ba91d37767bd717a9a0453cc97e83a1109194dced8336a55f8650000458ef625c0b8b5e3df languageName: node linkType: hard -"node-fetch-native@npm:^1.4.0, node-fetch-native@npm:^1.4.1": - version: 1.4.1 - resolution: "node-fetch-native@npm:1.4.1" - checksum: 339001ad3235a09b195198df8be71b591eec4064a2fcfb7f54b9f0716f6ccb3bda5828e1746f809a6d2edb062a0330e5798f408396c33b3b88339c73d6e9575d +"node-fetch-native@npm:^1.4.0, node-fetch-native@npm:^1.4.1, node-fetch-native@npm:^1.6.1": + version: 1.6.1 + resolution: "node-fetch-native@npm:1.6.1" + checksum: 1a248ada34561ce1010f09ca81cf5cd9c834b51aec957e82b6811d673e209a44630a835da599f0dd0c3d927f15c5f864d6ed494093c4a42601609f988d5919f2 languageName: node linkType: hard @@ -11365,6 +7390,20 @@ __metadata: languageName: node linkType: hard +"node-fetch@npm:2.6.9": + version: 2.6.9 + resolution: "node-fetch@npm:2.6.9" + dependencies: + whatwg-url: ^5.0.0 + peerDependencies: + encoding: ^0.1.0 + peerDependenciesMeta: + encoding: + optional: true + checksum: acb04f9ce7224965b2b59e71b33c639794d8991efd73855b0b250921382b38331ffc9d61bce502571f6cc6e11a8905ca9b1b6d4aeb586ab093e2756a1fd190d0 + languageName: node + linkType: hard + "node-fetch@npm:^2.6.12, node-fetch@npm:^2.6.7": version: 2.7.0 resolution: "node-fetch@npm:2.7.0" @@ -11386,14 +7425,14 @@ __metadata: languageName: node linkType: hard -"node-gyp-build@npm:^4.2.0, node-gyp-build@npm:^4.2.2, node-gyp-build@npm:^4.3.0": - version: 4.6.1 - resolution: "node-gyp-build@npm:4.6.1" +"node-gyp-build@npm:^4.2.0, node-gyp-build@npm:^4.2.2": + version: 4.8.0 + resolution: "node-gyp-build@npm:4.8.0" bin: node-gyp-build: bin.js node-gyp-build-optional: optional.js node-gyp-build-test: build-test.js - checksum: c3676d337b36803bc7792e35bf7fdcda7cdcb7e289b8f9855a5535702a82498eb976842fefcf487258c58005ca32ce3d537fbed91280b04409161dcd7232a882 + checksum: b82a56f866034b559dd3ed1ad04f55b04ae381b22ec2affe74b488d1582473ca6e7f85fccf52da085812d3de2b0bf23109e752a57709ac7b9963951c710fea40 languageName: node linkType: hard @@ -11417,10 +7456,10 @@ __metadata: languageName: node linkType: hard -"node-releases@npm:^2.0.13": - version: 2.0.13 - resolution: "node-releases@npm:2.0.13" - checksum: 17ec8f315dba62710cae71a8dad3cd0288ba943d2ece43504b3b1aa8625bf138637798ab470b1d9035b0545996f63000a8a926e0f6d35d0996424f8b6d36dda3 +"node-releases@npm:^2.0.14": + version: 2.0.14 + resolution: "node-releases@npm:2.0.14" + checksum: 59443a2f77acac854c42d321bf1b43dea0aef55cd544c6a686e9816a697300458d4e82239e2d794ea05f7bbbc8a94500332e2d3ac3f11f52e4b16cbe638b3c41 languageName: node linkType: hard @@ -11460,14 +7499,7 @@ __metadata: languageName: node linkType: hard -"normalize-url@npm:^6.0.1": - version: 6.1.0 - resolution: "normalize-url@npm:6.1.0" - checksum: 4a4944631173e7d521d6b80e4c85ccaeceb2870f315584fa30121f505a6dfd86439c5e3fdd8cd9e0e291290c41d0c3599f0cb12ab356722ed242584c30348e50 - languageName: node - linkType: hard - -"npm-run-path@npm:^4.0.1": +"npm-run-path@npm:^4.0.0": version: 4.0.1 resolution: "npm-run-path@npm:4.0.1" dependencies: @@ -11477,11 +7509,11 @@ __metadata: linkType: hard "npm-run-path@npm:^5.1.0": - version: 5.1.0 - resolution: "npm-run-path@npm:5.1.0" + version: 5.2.0 + resolution: "npm-run-path@npm:5.2.0" dependencies: path-key: ^4.0.0 - checksum: dc184eb5ec239d6a2b990b43236845332ef12f4e0beaa9701de724aa797fe40b6bbd0157fb7639d24d3ab13f5d5cf22d223a19c6300846b8126f335f788bee66 + checksum: c5325e016014e715689c4014f7e0be16cc4cbf529f32a1723e511bc4689b5f823b704d2bca61ac152ce2bda65e0205dc8b3ba0ec0f5e4c3e162d302f6f5b9efb languageName: node linkType: hard @@ -11497,7 +7529,7 @@ __metadata: languageName: node linkType: hard -"nprogress@npm:^0.2.0": +"nprogress@npm:~0.2.0": version: 0.2.0 resolution: "nprogress@npm:0.2.0" checksum: 66b7bec5d563ecf2d1c3d2815e6d5eb74ed815eee8563e0afa63d3f185ab1b9cf2ddd97e1ded263b9995c5019d26d600320e849e50f3747984daa033744619dc @@ -11533,14 +7565,14 @@ __metadata: linkType: hard "object.assign@npm:^4.1.4": - version: 4.1.4 - resolution: "object.assign@npm:4.1.4" + version: 4.1.5 + resolution: "object.assign@npm:4.1.5" dependencies: - call-bind: ^1.0.2 - define-properties: ^1.1.4 + call-bind: ^1.0.5 + define-properties: ^1.2.1 has-symbols: ^1.0.3 object-keys: ^1.1.1 - checksum: 76cab513a5999acbfe0ff355f15a6a125e71805fcf53de4e9d4e082e1989bdb81d1e329291e1e4e0ae7719f0e4ef80e88fb2d367ae60500d79d25a6224ac8864 + checksum: f9aeac0541661370a1fc86e6a8065eb1668d3e771f7dbb33ee54578201336c057b21ee61207a186dd42db0c62201d91aac703d20d12a79fc79c353eed44d4e25 languageName: node linkType: hard @@ -11610,6 +7642,13 @@ __metadata: languageName: node linkType: hard +"ohash@npm:^1.1.3": + version: 1.1.3 + resolution: "ohash@npm:1.1.3" + checksum: 44c7321cb950ce6e87d46584fd5cc8dd3dd15fcd4ade0ac2995d0497dc6b6b1ae9bd844c59af185d63923da5cfe9b37ae37a9dbd9ac455f3ad0cdfb5a73d5ef6 + languageName: node + linkType: hard + "on-exit-leak-free@npm:^0.2.0": version: 0.2.0 resolution: "on-exit-leak-free@npm:0.2.0" @@ -11617,15 +7656,6 @@ __metadata: languageName: node linkType: hard -"on-finished@npm:2.4.1": - version: 2.4.1 - resolution: "on-finished@npm:2.4.1" - dependencies: - ee-first: 1.1.1 - checksum: d20929a25e7f0bb62f937a425b5edeb4e4cde0540d77ba146ec9357f00b0d497cdb3b9b05b9c8e46222407d1548d08166bff69cc56dfa55ba0e4469228920ff0 - languageName: node - linkType: hard - "once@npm:^1.3.0, once@npm:^1.3.1, once@npm:^1.4.0": version: 1.4.0 resolution: "once@npm:1.4.0" @@ -11635,7 +7665,16 @@ __metadata: languageName: node linkType: hard -"onetime@npm:^5.1.0, onetime@npm:^5.1.2": +"once@npm:~1.3.0": + version: 1.3.3 + resolution: "once@npm:1.3.3" + dependencies: + wrappy: 1 + checksum: 8e832de08b1d73b470e01690c211cb4fcefccab1fd1bd19e706d572d74d3e9b7e38a8bfcdabdd364f9f868757d9e8e5812a59817dc473eaf698ff3bfae2219f2 + languageName: node + linkType: hard + +"onetime@npm:^5.1.0": version: 5.1.2 resolution: "onetime@npm:5.1.2" dependencies: @@ -11653,20 +7692,6 @@ __metadata: languageName: node linkType: hard -"optionator@npm:^0.8.1": - version: 0.8.3 - resolution: "optionator@npm:0.8.3" - dependencies: - deep-is: ~0.1.3 - fast-levenshtein: ~2.0.6 - levn: ~0.3.0 - prelude-ls: ~1.1.2 - type-check: ~0.3.2 - word-wrap: ~1.2.3 - checksum: b8695ddf3d593203e25ab0900e265d860038486c943ff8b774f596a310f8ceebdb30c6832407a8198ba3ec9debe1abe1f51d4aad94843612db3b76d690c61d34 - languageName: node - linkType: hard - "optionator@npm:^0.9.1": version: 0.9.3 resolution: "optionator@npm:0.9.3" @@ -11681,27 +7706,10 @@ __metadata: languageName: node linkType: hard -"ora@npm:^5.4.1": - version: 5.4.1 - resolution: "ora@npm:5.4.1" - dependencies: - bl: ^4.1.0 - chalk: ^4.1.0 - cli-cursor: ^3.1.0 - cli-spinners: ^2.5.0 - is-interactive: ^1.0.0 - is-unicode-supported: ^0.1.0 - log-symbols: ^4.1.0 - strip-ansi: ^6.0.0 - wcwidth: ^1.0.1 - checksum: 28d476ee6c1049d68368c0dc922e7225e3b5600c3ede88fade8052837f9ed342625fdaa84a6209302587c8ddd9b664f71f0759833cbdb3a4cf81344057e63c63 - languageName: node - linkType: hard - -"os-tmpdir@npm:~1.0.2": - version: 1.0.2 - resolution: "os-tmpdir@npm:1.0.2" - checksum: 5666560f7b9f10182548bf7013883265be33620b1c1b4a4d405c25be2636f970c5488ff3e6c48de75b55d02bde037249fe5dbfbb4c0fb7714953d56aed062e6d +"os-paths@npm:^4.0.1": + version: 4.4.0 + resolution: "os-paths@npm:4.4.0" + checksum: 4861e9262ca9fa7693a9e5801b0bb50a38a251158b222396102ebe7b04b56b5f716d3c5b81be3410a594e4673004fb247f01fe6a9a89e9616a2a21966f678d49 languageName: node linkType: hard @@ -11712,10 +7720,10 @@ __metadata: languageName: node linkType: hard -"p-cancelable@npm:^2.0.0": - version: 2.1.1 - resolution: "p-cancelable@npm:2.1.1" - checksum: 3dba12b4fb4a1e3e34524535c7858fc82381bbbd0f247cc32dedc4018592a3950ce66b106d0880b4ec4c2d8d6576f98ca885dc1d7d0f274d1370be20e9523ddf +"p-finally@npm:^2.0.0": + version: 2.0.1 + resolution: "p-finally@npm:2.0.1" + checksum: 6306a2851c3b28f8b603624f395ae84dce76970498fed8aa6aae2d930595053746edf1e4ee0c4b78a97410d84aa4504d63179f5310d555511ecd226f53ed1e8e languageName: node linkType: hard @@ -11771,41 +7779,6 @@ __metadata: languageName: node linkType: hard -"pac-proxy-agent@npm:^5.0.0": - version: 5.0.0 - resolution: "pac-proxy-agent@npm:5.0.0" - dependencies: - "@tootallnate/once": 1 - agent-base: 6 - debug: 4 - get-uri: 3 - http-proxy-agent: ^4.0.1 - https-proxy-agent: 5 - pac-resolver: ^5.0.0 - raw-body: ^2.2.0 - socks-proxy-agent: 5 - checksum: cfd26a0e2ebfea4ca6162465018ce093bf147d26cf6c8fb3e7155bc7c184370d80d4d09a1c097e3db7676d0e3f574ea1cb56a4aa7d1d2e5cca6238935fabf010 - languageName: node - linkType: hard - -"pac-resolver@npm:^5.0.0": - version: 5.0.1 - resolution: "pac-resolver@npm:5.0.1" - dependencies: - degenerator: ^3.0.2 - ip: ^1.1.5 - netmask: ^2.0.2 - checksum: e3bd8aada70d173cd4cec1ac810fb56161678b7a597060a740c4a31d9c5f8cd95687b2d0fd90b69c0cafe5ef787404074f38042ba08c8d378fed48973f58e493 - languageName: node - linkType: hard - -"pako@npm:~0.2.0": - version: 0.2.9 - resolution: "pako@npm:0.2.9" - checksum: 055f9487cd57fbb78df84315873bbdd089ba286f3499daed47d2effdc6253e981f5db6898c23486de76d4a781559f890d643bd3a49f70f1b4a18019c98aa5125 - languageName: node - linkType: hard - "parent-module@npm:^1.0.0": version: 1.0.1 resolution: "parent-module@npm:1.0.1" @@ -11815,22 +7788,6 @@ __metadata: languageName: node linkType: hard -"parse-entities@npm:^4.0.0": - version: 4.0.1 - resolution: "parse-entities@npm:4.0.1" - dependencies: - "@types/unist": ^2.0.0 - character-entities: ^2.0.0 - character-entities-legacy: ^3.0.0 - character-reference-invalid: ^2.0.0 - decode-named-character-reference: ^1.0.0 - is-alphanumerical: ^2.0.0 - is-decimal: ^2.0.0 - is-hexadecimal: ^2.0.0 - checksum: 32a6ff5b9acb9d2c4d71537308521fd265e685b9215691df73feedd9edfe041bb6da9f89bd0c35c4a2bc7d58e3e76e399bb6078c2fd7d2a343ff1dd46edbf1bd - languageName: node - linkType: hard - "parse-ms@npm:^2.1.0": version: 2.1.0 resolution: "parse-ms@npm:2.1.0" @@ -11838,13 +7795,6 @@ __metadata: languageName: node linkType: hard -"parseurl@npm:~1.3.3": - version: 1.3.3 - resolution: "parseurl@npm:1.3.3" - checksum: 407cee8e0a3a4c5cd472559bca8b6a45b82c124e9a4703302326e9ab60fc1081442ada4e02628efef1eb16197ddc7f8822f5a91fd7d7c86b51f530aedb17dfa2 - languageName: node - linkType: hard - "path-browserify@npm:^1.0.1": version: 1.0.1 resolution: "path-browserify@npm:1.0.1" @@ -11880,6 +7830,16 @@ __metadata: languageName: node linkType: hard +"path-match@npm:1.2.4": + version: 1.2.4 + resolution: "path-match@npm:1.2.4" + dependencies: + http-errors: ~1.4.0 + path-to-regexp: ^1.0.0 + checksum: 60946ed9fdd922da2d9688abc0dc05cd537a2ff06d192518dcbe654302ad70499050a9297ea23a26c3e1af32d5a867d5f6e0eb892f38fa032afd70df85be05f0 + languageName: node + linkType: hard + "path-parse@npm:^1.0.7": version: 1.0.7 resolution: "path-parse@npm:1.0.7" @@ -11897,13 +7857,6 @@ __metadata: languageName: node linkType: hard -"path-to-regexp@npm:0.1.7": - version: 0.1.7 - resolution: "path-to-regexp@npm:0.1.7" - checksum: 69a14ea24db543e8b0f4353305c5eac6907917031340e5a8b37df688e52accd09e3cebfe1660b70d76b6bd89152f52183f28c74813dbf454ba1a01c82a38abce - languageName: node - linkType: hard - "path-to-regexp@npm:6.1.0": version: 6.1.0 resolution: "path-to-regexp@npm:6.1.0" @@ -11918,6 +7871,15 @@ __metadata: languageName: node linkType: hard +"path-to-regexp@npm:^1.0.0": + version: 1.8.0 + resolution: "path-to-regexp@npm:1.8.0" + dependencies: + isarray: 0.0.1 + checksum: 709f6f083c0552514ef4780cb2e7e4cf49b0cc89a97439f2b7cc69a608982b7690fb5d1720a7473a59806508fc2dae0be751ba49f495ecf89fd8fbc62abccbcd + languageName: node + linkType: hard + "path-type@npm:^4.0.0": version: 4.0.0 resolution: "path-type@npm:4.0.0" @@ -11925,43 +7887,28 @@ __metadata: languageName: node linkType: hard -"pathe@npm:^1.1.0, pathe@npm:^1.1.1": - version: 1.1.1 - resolution: "pathe@npm:1.1.1" - checksum: 34ab3da2e5aa832ebc6a330ffe3f73d7ba8aec6e899b53b8ec4f4018de08e40742802deb12cf5add9c73b7bf719b62c0778246bd376ca62b0fb23e0dde44b759 - languageName: node - linkType: hard - -"peek-stream@npm:^1.1.0": - version: 1.1.3 - resolution: "peek-stream@npm:1.1.3" - dependencies: - buffer-from: ^1.0.0 - duplexify: ^3.5.0 - through2: ^2.0.3 - checksum: a0e09d6d1a8a01158a3334f20d6b1cdd91747eba24eb06a1d742eefb620385593121a76d4378cc81f77cdce6a66df0575a41041b1189c510254aec91878afc99 +"pathe@npm:^1.1.0, pathe@npm:^1.1.1, pathe@npm:^1.1.2": + version: 1.1.2 + resolution: "pathe@npm:1.1.2" + checksum: ec5f778d9790e7b9ffc3e4c1df39a5bb1ce94657a4e3ad830c1276491ca9d79f189f47609884671db173400256b005f4955f7952f52a2aeb5834ad5fb4faf134 languageName: node linkType: hard -"periscopic@npm:^3.0.0": - version: 3.1.0 - resolution: "periscopic@npm:3.1.0" - dependencies: - "@types/estree": ^1.0.0 - estree-walker: ^3.0.0 - is-reference: ^3.0.0 - checksum: 2153244352e58a0d76e7e8d9263e66fe74509495f809af388da20045fb30aa3e93f2f94468dc0b9166ecf206fcfc0d73d2c7641c6fbedc07b1de858b710142cb +"pend@npm:~1.2.0": + version: 1.2.0 + resolution: "pend@npm:1.2.0" + checksum: 6c72f5243303d9c60bd98e6446ba7d30ae29e3d56fdb6fae8767e8ba6386f33ee284c97efe3230a0d0217e2b1723b8ab490b1bbf34fcbb2180dbc8a9de47850d languageName: node linkType: hard -"picocolors@npm:1.0.0, picocolors@npm:^1.0.0": +"picocolors@npm:1.0.0, picocolors@npm:^1, picocolors@npm:^1.0.0": version: 1.0.0 resolution: "picocolors@npm:1.0.0" checksum: a2e8092dd86c8396bdba9f2b5481032848525b3dc295ce9b57896f931e63fc16f79805144321f72976383fc249584672a75cc18d6777c6b757603f372f745981 languageName: node linkType: hard -"picomatch@npm:^2.0.4, picomatch@npm:^2.2.1, picomatch@npm:^2.2.2, picomatch@npm:^2.3.1": +"picomatch@npm:^2.0.4, picomatch@npm:^2.0.7, picomatch@npm:^2.2.1, picomatch@npm:^2.2.2, picomatch@npm:^2.3.1": version: 2.3.1 resolution: "picomatch@npm:2.3.1" checksum: 050c865ce81119c4822c45d3c84f1ced46f93a0126febae20737bd05ca20589c564d6e9226977df859ed5e03dc73f02584a2b0faad36e896936238238b0446cf @@ -12061,12 +8008,10 @@ __metadata: languageName: node linkType: hard -"postcss-discard-duplicates@npm:^5.1.0": - version: 5.1.0 - resolution: "postcss-discard-duplicates@npm:5.1.0" - peerDependencies: - postcss: ^8.2.15 - checksum: 88d6964201b1f4ed6bf7a32cefe68e86258bb6e42316ca01d9b32bdb18e7887d02594f89f4a2711d01b51ea6e3fcca8c54be18a59770fe5f4521c61d3eb6ca35 +"pony-cause@npm:^2.1.10": + version: 2.1.10 + resolution: "pony-cause@npm:2.1.10" + checksum: 8b61378f213e61056312dc274a1c79980154e9d864f6ad86e0c8b91a50d3ce900d430995ee24147c9f3caa440dfe7d51c274b488d7f033b65b206522536d7217 languageName: node linkType: hard @@ -12095,11 +8040,11 @@ __metadata: linkType: hard "postcss-load-config@npm:^4.0.1": - version: 4.0.1 - resolution: "postcss-load-config@npm:4.0.1" + version: 4.0.2 + resolution: "postcss-load-config@npm:4.0.2" dependencies: - lilconfig: ^2.0.5 - yaml: ^2.1.1 + lilconfig: ^3.0.0 + yaml: ^2.3.4 peerDependencies: postcss: ">=8.0.9" ts-node: ">=9.0.0" @@ -12108,69 +8053,7 @@ __metadata: optional: true ts-node: optional: true - checksum: b61f890499ed7dcda1e36c20a9582b17d745bad5e2b2c7bc96942465e406bc43ae03f270c08e60d1e29dab1ee50cb26970b5eb20c9aae30e066e20bd607ae4e4 - languageName: node - linkType: hard - -"postcss-modules-extract-imports@npm:^3.0.0": - version: 3.0.0 - resolution: "postcss-modules-extract-imports@npm:3.0.0" - peerDependencies: - postcss: ^8.1.0 - checksum: 4b65f2f1382d89c4bc3c0a1bdc5942f52f3cb19c110c57bd591ffab3a5fee03fcf831604168205b0c1b631a3dce2255c70b61aaae3ef39d69cd7eb450c2552d2 - languageName: node - linkType: hard - -"postcss-modules-local-by-default@npm:^4.0.0": - version: 4.0.3 - resolution: "postcss-modules-local-by-default@npm:4.0.3" - dependencies: - icss-utils: ^5.0.0 - postcss-selector-parser: ^6.0.2 - postcss-value-parser: ^4.1.0 - peerDependencies: - postcss: ^8.1.0 - checksum: 2f8083687f3d6067885f8863dd32dbbb4f779cfcc7e52c17abede9311d84faf6d3ed8760e7c54c6380281732ae1f78e5e56a28baf3c271b33f450a11c9e30485 - languageName: node - linkType: hard - -"postcss-modules-scope@npm:^3.0.0": - version: 3.0.0 - resolution: "postcss-modules-scope@npm:3.0.0" - dependencies: - postcss-selector-parser: ^6.0.4 - peerDependencies: - postcss: ^8.1.0 - checksum: 330b9398dbd44c992c92b0dc612c0626135e2cc840fee41841eb61247a6cfed95af2bd6f67ead9dd9d0bb41f5b0367129d93c6e434fa3e9c58ade391d9a5a138 - languageName: node - linkType: hard - -"postcss-modules-values@npm:^4.0.0": - version: 4.0.0 - resolution: "postcss-modules-values@npm:4.0.0" - dependencies: - icss-utils: ^5.0.0 - peerDependencies: - postcss: ^8.1.0 - checksum: f7f2cdf14a575b60e919ad5ea52fed48da46fe80db2733318d71d523fc87db66c835814940d7d05b5746b0426e44661c707f09bdb83592c16aea06e859409db6 - languageName: node - linkType: hard - -"postcss-modules@npm:^6.0.0": - version: 6.0.0 - resolution: "postcss-modules@npm:6.0.0" - dependencies: - generic-names: ^4.0.0 - icss-utils: ^5.1.0 - lodash.camelcase: ^4.3.0 - postcss-modules-extract-imports: ^3.0.0 - postcss-modules-local-by-default: ^4.0.0 - postcss-modules-scope: ^3.0.0 - postcss-modules-values: ^4.0.0 - string-hash: ^1.1.1 - peerDependencies: - postcss: ^8.0.0 - checksum: 3bfcfabc0600f7c8fcb49873d67eb8c23c8d874b061dda840977cbe3de74d40be3be885f854594f51687d714d1aa57e83b46ac14ceb9b1b6e3a4d36f2596e2bb + checksum: 7c27dd3801db4eae207a5116fed2db6b1ebb780b40c3dd62a3e57e087093a8e6a14ee17ada729fee903152d6ef4826c6339eb135bee6208e0f3140d7e8090185 languageName: node linkType: hard @@ -12185,49 +8068,49 @@ __metadata: languageName: node linkType: hard -"postcss-selector-parser@npm:^6.0.11, postcss-selector-parser@npm:^6.0.2, postcss-selector-parser@npm:^6.0.4": - version: 6.0.13 - resolution: "postcss-selector-parser@npm:6.0.13" +"postcss-selector-parser@npm:^6.0.11": + version: 6.0.15 + resolution: "postcss-selector-parser@npm:6.0.15" dependencies: cssesc: ^3.0.0 util-deprecate: ^1.0.2 - checksum: f89163338a1ce3b8ece8e9055cd5a3165e79a15e1c408e18de5ad8f87796b61ec2d48a2902d179ae0c4b5de10fccd3a325a4e660596549b040bc5ad1b465f096 + checksum: 57decb94152111004f15e27b9c61131eb50ee10a3288e7fcf424cebbb4aba82c2817517ae718f8b5d704ee9e02a638d4a2acff8f47685c295a33ecee4fd31055 languageName: node linkType: hard -"postcss-value-parser@npm:^4.0.0, postcss-value-parser@npm:^4.1.0, postcss-value-parser@npm:^4.2.0": +"postcss-value-parser@npm:^4.0.0, postcss-value-parser@npm:^4.2.0": version: 4.2.0 resolution: "postcss-value-parser@npm:4.2.0" checksum: 819ffab0c9d51cf0acbabf8996dffbfafbafa57afc0e4c98db88b67f2094cb44488758f06e5da95d7036f19556a4a732525e84289a425f4f6fd8e412a9d7442f languageName: node linkType: hard -"postcss@npm:8.4.14": - version: 8.4.14 - resolution: "postcss@npm:8.4.14" +"postcss@npm:8.4.31": + version: 8.4.31 + resolution: "postcss@npm:8.4.31" dependencies: - nanoid: ^3.3.4 + nanoid: ^3.3.6 picocolors: ^1.0.0 source-map-js: ^1.0.2 - checksum: fe58766ff32e4becf65a7d57678995cfd239df6deed2fe0557f038b47c94e4132e7e5f68b5aa820c13adfec32e523b693efaeb65798efb995ce49ccd83953816 + checksum: 1d8611341b073143ad90486fcdfeab49edd243377b1f51834dc4f6d028e82ce5190e4f11bb2633276864503654fb7cab28e67abdc0fbf9d1f88cad4a0ff0beea languageName: node linkType: hard -"postcss@npm:^8, postcss@npm:^8.4.19, postcss@npm:^8.4.23, postcss@npm:^8.4.27, postcss@npm:~8.4.16": - version: 8.4.31 - resolution: "postcss@npm:8.4.31" +"postcss@npm:^8.4.23, postcss@npm:~8.4.16": + version: 8.4.33 + resolution: "postcss@npm:8.4.33" dependencies: - nanoid: ^3.3.6 + nanoid: ^3.3.7 picocolors: ^1.0.0 source-map-js: ^1.0.2 - checksum: 1d8611341b073143ad90486fcdfeab49edd243377b1f51834dc4f6d028e82ce5190e4f11bb2633276864503654fb7cab28e67abdc0fbf9d1f88cad4a0ff0beea + checksum: 6f98b2af4b76632a3de20c4f47bf0e984a1ce1a531cf11adcb0b1d63a6cbda0aae4165e578b66c32ca4879038e3eaad386a6be725a8fb4429c78e3c1ab858fe9 languageName: node linkType: hard -"preact@npm:^10.12.0, preact@npm:^10.5.9": - version: 10.19.2 - resolution: "preact@npm:10.19.2" - checksum: fec27fa3f14ac2d7a5061818d0cf2973ffaece83126047a47e5a075aa8e40ca56b5fcebc36106ee9cf59be0aeb51f3d996760e158d2a2660b42cbfb2e71f37bf +"preact@npm:^10.12.0, preact@npm:^10.16.0": + version: 10.19.3 + resolution: "preact@npm:10.19.3" + checksum: cb4fcc801f7ff302b9706eb4bb4a36cc7cd96f3231ac28baeb3ea5caf6724372222121cb487f66af44a1312bf61dbe74825ce2fda98295d2108e7443c20b0e56 languageName: node linkType: hard @@ -12238,13 +8121,6 @@ __metadata: languageName: node linkType: hard -"prelude-ls@npm:~1.1.2": - version: 1.1.2 - resolution: "prelude-ls@npm:1.1.2" - checksum: c4867c87488e4a0c233e158e4d0d5565b609b105d75e4c05dc760840475f06b731332eb93cc8c9cecb840aa8ec323ca3c9a56ad7820ad2e63f0261dadcb154e4 - languageName: node - linkType: hard - "prettier-linter-helpers@npm:^1.0.0": version: 1.0.0 resolution: "prettier-linter-helpers@npm:1.0.0" @@ -12254,15 +8130,6 @@ __metadata: languageName: node linkType: hard -"prettier@npm:2.7.1": - version: 2.7.1 - resolution: "prettier@npm:2.7.1" - bin: - prettier: bin-prettier.js - checksum: 55a4409182260866ab31284d929b3cb961e5fdb91fe0d2e099dac92eaecec890f36e524b4c19e6ceae839c99c6d7195817579cdffc8e2c80da0cb794463a748b - languageName: node - linkType: hard - "prettier@npm:~2.8.4, prettier@npm:~2.8.8": version: 2.8.8 resolution: "prettier@npm:2.8.8" @@ -12279,7 +8146,7 @@ __metadata: languageName: node linkType: hard -"pretty-ms@npm:7.0.1, pretty-ms@npm:^7.0.1": +"pretty-ms@npm:7.0.1": version: 7.0.1 resolution: "pretty-ms@npm:7.0.1" dependencies: @@ -12295,13 +8162,6 @@ __metadata: languageName: node linkType: hard -"process-nextick-args@npm:~2.0.0": - version: 2.0.1 - resolution: "process-nextick-args@npm:2.0.1" - checksum: 1d38588e520dab7cea67cbbe2efdd86a10cc7a074c09657635e34f035277b59fbb57d09d8638346bf7090f8e8ebc070c96fa5fd183b777fff4f5edff5e9466cf - languageName: node - linkType: hard - "process-warning@npm:^1.0.0": version: 1.0.0 resolution: "process-warning@npm:1.0.0" @@ -12309,13 +8169,6 @@ __metadata: languageName: node linkType: hard -"promise-inflight@npm:^1.0.1": - version: 1.0.1 - resolution: "promise-inflight@npm:1.0.1" - checksum: 22749483091d2c594261517f4f80e05226d4d5ecc1fc917e1886929da56e22b5718b7f2a75f3807e7a7d471bc3be2907fe92e6e8f373ddf5c64bae35b5af3981 - languageName: node - linkType: hard - "promise-retry@npm:^2.0.1": version: 2.0.1 resolution: "promise-retry@npm:2.0.1" @@ -12326,6 +8179,13 @@ __metadata: languageName: node linkType: hard +"promisepipe@npm:3.0.0": + version: 3.0.0 + resolution: "promisepipe@npm:3.0.0" + checksum: b35e4102bc540f655777329ddb39d0d7e767946cafd144c537915f98b21ca7ee7ef9aecd14784ed0e6c2c6f6eb9fe5e66b60c56cdaa4a6050b2cfa98e342278d + languageName: node + linkType: hard + "prop-types@npm:^15.8.1": version: 15.8.1 resolution: "prop-types@npm:15.8.1" @@ -12337,39 +8197,6 @@ __metadata: languageName: node linkType: hard -"property-information@npm:^6.0.0": - version: 6.4.0 - resolution: "property-information@npm:6.4.0" - checksum: b5aed9a40e87730995f3ceed29839f137fa73b2a4cccfb8ed72ab8bddb8881cad05c3487c4aa168d7cb49a53db8089790c9f00f59d15b8380d2bb5383cdd1f24 - languageName: node - linkType: hard - -"proxy-addr@npm:~2.0.7": - version: 2.0.7 - resolution: "proxy-addr@npm:2.0.7" - dependencies: - forwarded: 0.2.0 - ipaddr.js: 1.9.1 - checksum: 29c6990ce9364648255454842f06f8c46fcd124d3e6d7c5066df44662de63cdc0bad032e9bf5a3d653ff72141cc7b6019873d685708ac8210c30458ad99f2b74 - languageName: node - linkType: hard - -"proxy-agent@npm:^5.0.0": - version: 5.0.0 - resolution: "proxy-agent@npm:5.0.0" - dependencies: - agent-base: ^6.0.0 - debug: 4 - http-proxy-agent: ^4.0.0 - https-proxy-agent: ^5.0.0 - lru-cache: ^5.1.1 - pac-proxy-agent: ^5.0.0 - proxy-from-env: ^1.0.0 - socks-proxy-agent: ^5.0.0 - checksum: 3b0bb73a4d3a07711d3cad72b2fa4320880f7a6ec1959cdcc186ac6ffb173db8137d7c4046c27fdfa6e2207b2eb75e802f3d5e14c766700586ec4d47299a5124 - languageName: node - linkType: hard - "proxy-compare@npm:2.5.1": version: 2.5.1 resolution: "proxy-compare@npm:2.5.1" @@ -12377,23 +8204,6 @@ __metadata: languageName: node linkType: hard -"proxy-from-env@npm:^1.0.0": - version: 1.1.0 - resolution: "proxy-from-env@npm:1.1.0" - checksum: ed7fcc2ba0a33404958e34d95d18638249a68c430e30fcb6c478497d72739ba64ce9810a24f53a7d921d0c065e5b78e3822759800698167256b04659366ca4d4 - languageName: node - linkType: hard - -"pump@npm:^2.0.0": - version: 2.0.1 - resolution: "pump@npm:2.0.1" - dependencies: - end-of-stream: ^1.1.0 - once: ^1.3.1 - checksum: e9f26a17be00810bff37ad0171edb35f58b242487b0444f92fb7d78bc7d61442fa9b9c5bd93a43fd8fd8ddd3cc75f1221f5e04c790f42907e5baab7cf5e2b931 - languageName: node - linkType: hard - "pump@npm:^3.0.0": version: 3.0.0 resolution: "pump@npm:3.0.0" @@ -12404,17 +8214,6 @@ __metadata: languageName: node linkType: hard -"pumpify@npm:^1.3.3": - version: 1.5.1 - resolution: "pumpify@npm:1.5.1" - dependencies: - duplexify: ^3.6.0 - inherits: ^2.0.3 - pump: ^2.0.0 - checksum: 26ca412ec8d665bd0d5e185c1b8f627728eff603440d75d22a58e421e3c66eaf86ec6fc6a6efc54808ecef65979279fa8e99b109a23ec1fa8d79f37e6978c9bd - languageName: node - linkType: hard - "punycode@npm:^2.1.0": version: 2.3.1 resolution: "punycode@npm:2.3.1" @@ -12459,24 +8258,6 @@ __metadata: languageName: node linkType: hard -"qs@npm:6.11.0": - version: 6.11.0 - resolution: "qs@npm:6.11.0" - dependencies: - side-channel: ^1.0.4 - checksum: 6e1f29dd5385f7488ec74ac7b6c92f4d09a90408882d0c208414a34dd33badc1a621019d4c799a3df15ab9b1d0292f97c1dd71dc7c045e69f81a8064e5af7297 - languageName: node - linkType: hard - -"qs@npm:^6.10.3": - version: 6.11.2 - resolution: "qs@npm:6.11.2" - dependencies: - side-channel: ^1.0.4 - checksum: e812f3c590b2262548647d62f1637b6989cc56656dc960b893fe2098d96e1bd633f36576f4cd7564dfbff9db42e17775884db96d846bebe4f37420d073ecdc0b - languageName: node - linkType: hard - "query-string@npm:7.1.3": version: 7.1.3 resolution: "query-string@npm:7.1.3" @@ -12515,13 +8296,6 @@ __metadata: languageName: node linkType: hard -"quick-lru@npm:^5.1.1": - version: 5.1.1 - resolution: "quick-lru@npm:5.1.1" - checksum: a516faa25574be7947969883e6068dbe4aa19e8ef8e8e0fd96cddd6d36485e9106d85c0041a27153286b0770b381328f4072aa40d3b18a19f5f7d2b78b94b5ed - languageName: node - linkType: hard - "radix3@npm:^1.1.0": version: 1.1.0 resolution: "radix3@npm:1.1.0" @@ -12538,34 +8312,15 @@ __metadata: languageName: node linkType: hard -"range-parser@npm:~1.2.1": - version: 1.2.1 - resolution: "range-parser@npm:1.2.1" - checksum: 0a268d4fea508661cf5743dfe3d5f47ce214fd6b7dec1de0da4d669dd4ef3d2144468ebe4179049eff253d9d27e719c88dae55be64f954e80135a0cada804ec9 - languageName: node - linkType: hard - -"raw-body@npm:2.5.1": - version: 2.5.1 - resolution: "raw-body@npm:2.5.1" - dependencies: - bytes: 3.1.2 - http-errors: 2.0.0 - iconv-lite: 0.4.24 - unpipe: 1.0.0 - checksum: 5362adff1575d691bb3f75998803a0ffed8c64eabeaa06e54b4ada25a0cd1b2ae7f4f5ec46565d1bec337e08b5ac90c76eaa0758de6f72a633f025d754dec29e - languageName: node - linkType: hard - -"raw-body@npm:^2.2.0": - version: 2.5.2 - resolution: "raw-body@npm:2.5.2" +"raw-body@npm:2.4.1": + version: 2.4.1 + resolution: "raw-body@npm:2.4.1" dependencies: - bytes: 3.1.2 - http-errors: 2.0.0 + bytes: 3.1.0 + http-errors: 1.7.3 iconv-lite: 0.4.24 unpipe: 1.0.0 - checksum: ba1583c8d8a48e8fbb7a873fdbb2df66ea4ff83775421bfe21ee120140949ab048200668c47d9ae3880012f6e217052690628cf679ddfbd82c9fc9358d574676 + checksum: d5e9179d2f1f0a652cd107c080f25d165c724f546124d620c8df7fb80322df42bff547a8b310e55e1f7952556d013716a21b30162192eb0b3332d7efcba75883 languageName: node linkType: hard @@ -12682,34 +8437,7 @@ __metadata: languageName: node linkType: hard -"readable-stream@npm:1.1.x": - version: 1.1.14 - resolution: "readable-stream@npm:1.1.14" - dependencies: - core-util-is: ~1.0.0 - inherits: ~2.0.1 - isarray: 0.0.1 - string_decoder: ~0.10.x - checksum: 17dfeae3e909945a4a1abc5613ea92d03269ef54c49288599507fc98ff4615988a1c39a999dcf9aacba70233d9b7040bc11a5f2bfc947e262dedcc0a8b32b5a0 - languageName: node - linkType: hard - -"readable-stream@npm:^2.0.0, readable-stream@npm:~2.3.6": - version: 2.3.8 - resolution: "readable-stream@npm:2.3.8" - dependencies: - core-util-is: ~1.0.0 - inherits: ~2.0.3 - isarray: ~1.0.0 - process-nextick-args: ~2.0.0 - safe-buffer: ~5.1.1 - string_decoder: ~1.1.1 - util-deprecate: ~1.0.1 - checksum: 65645467038704f0c8aaf026a72fbb588a9e2ef7a75cd57a01702ee9db1c4a1e4b03aaad36861a6a0926546a74d174149c8c207527963e0c2d3eee2f37678a42 - languageName: node - linkType: hard - -"readable-stream@npm:^3.1.1, readable-stream@npm:^3.4.0, readable-stream@npm:^3.5.0, readable-stream@npm:^3.6.0": +"readable-stream@npm:^3.1.1, readable-stream@npm:^3.6.0": version: 3.6.2 resolution: "readable-stream@npm:3.6.2" dependencies: @@ -12720,6 +8448,15 @@ __metadata: languageName: node linkType: hard +"readdirp@npm:~3.3.0": + version: 3.3.0 + resolution: "readdirp@npm:3.3.0" + dependencies: + picomatch: ^2.0.7 + checksum: f8289b21d26a6c3f56b8a52588e708f25471f7fee46e5519a155581f5595440ec7e93f7086ba52d1c7f3d5324ef55f996ffa2195145ddcdee103bf5cb671e3fd + languageName: node + linkType: hard + "readdirp@npm:~3.6.0": version: 3.6.0 resolution: "readdirp@npm:3.6.0" @@ -12736,18 +8473,6 @@ __metadata: languageName: node linkType: hard -"recast@npm:^0.21.5": - version: 0.21.5 - resolution: "recast@npm:0.21.5" - dependencies: - ast-types: 0.15.2 - esprima: ~4.0.0 - source-map: ~0.6.1 - tslib: ^2.0.1 - checksum: 03cc7f57562238ba258d468be67bf7446ce7a707bc87a087891dad15afead46c36e9aaeedf2130e2ab5a465244a9c62bfd4127849761cf8f4085abe2f3e5f485 - languageName: node - linkType: hard - "redis-errors@npm:^1.0.0, redis-errors@npm:^1.2.0": version: 1.2.0 resolution: "redis-errors@npm:1.2.0" @@ -12778,42 +8503,10 @@ __metadata: languageName: node linkType: hard -"regenerate-unicode-properties@npm:^10.1.0": - version: 10.1.1 - resolution: "regenerate-unicode-properties@npm:10.1.1" - dependencies: - regenerate: ^1.4.2 - checksum: b80958ef40f125275824c2c47d5081dfaefebd80bff26c76761e9236767c748a4a95a69c053fe29d2df881177f2ca85df4a71fe70a82360388b31159ef19adcf - languageName: node - linkType: hard - -"regenerate@npm:^1.4.2": - version: 1.4.2 - resolution: "regenerate@npm:1.4.2" - checksum: 3317a09b2f802da8db09aa276e469b57a6c0dd818347e05b8862959c6193408242f150db5de83c12c3fa99091ad95fb42a6db2c3329bfaa12a0ea4cbbeb30cb0 - languageName: node - linkType: hard - -"regenerator-runtime@npm:^0.13.4": - version: 0.13.11 - resolution: "regenerator-runtime@npm:0.13.11" - checksum: 27481628d22a1c4e3ff551096a683b424242a216fee44685467307f14d58020af1e19660bf2e26064de946bad7eff28950eae9f8209d55723e2d9351e632bbb4 - languageName: node - linkType: hard - "regenerator-runtime@npm:^0.14.0": - version: 0.14.0 - resolution: "regenerator-runtime@npm:0.14.0" - checksum: 1c977ad82a82a4412e4f639d65d22be376d3ebdd30da2c003eeafdaaacd03fc00c2320f18120007ee700900979284fc78a9f00da7fb593f6e6eeebc673fba9a3 - languageName: node - linkType: hard - -"regenerator-transform@npm:^0.15.2": - version: 0.15.2 - resolution: "regenerator-transform@npm:0.15.2" - dependencies: - "@babel/runtime": ^7.8.4 - checksum: 20b6f9377d65954980fe044cfdd160de98df415b4bff38fbade67b3337efaf078308c4fed943067cd759827cc8cfeca9cb28ccda1f08333b85d6a2acbd022c27 + version: 0.14.1 + resolution: "regenerator-runtime@npm:0.14.1" + checksum: 9f57c93277b5585d3c83b0cf76be47b473ae8c6d9142a46ce8b0291a04bb2cf902059f0f8445dcabb3fb7378e5fe4bb4ea1e008876343d42e46d3b484534ce38 languageName: node linkType: hard @@ -12835,78 +8528,6 @@ __metadata: languageName: node linkType: hard -"regexpu-core@npm:^5.3.1": - version: 5.3.2 - resolution: "regexpu-core@npm:5.3.2" - dependencies: - "@babel/regjsgen": ^0.8.0 - regenerate: ^1.4.2 - regenerate-unicode-properties: ^10.1.0 - regjsparser: ^0.9.1 - unicode-match-property-ecmascript: ^2.0.0 - unicode-match-property-value-ecmascript: ^2.1.0 - checksum: 95bb97088419f5396e07769b7de96f995f58137ad75fac5811fb5fe53737766dfff35d66a0ee66babb1eb55386ef981feaef392f9df6d671f3c124812ba24da2 - languageName: node - linkType: hard - -"regjsparser@npm:^0.9.1": - version: 0.9.1 - resolution: "regjsparser@npm:0.9.1" - dependencies: - jsesc: ~0.5.0 - bin: - regjsparser: bin/parser - checksum: 5e1b76afe8f1d03c3beaf9e0d935dd467589c3625f6d65fb8ffa14f224d783a0fed4bf49c2c1b8211043ef92b6117313419edf055a098ed8342e340586741afc - languageName: node - linkType: hard - -"remark-frontmatter@npm:4.0.1": - version: 4.0.1 - resolution: "remark-frontmatter@npm:4.0.1" - dependencies: - "@types/mdast": ^3.0.0 - mdast-util-frontmatter: ^1.0.0 - micromark-extension-frontmatter: ^1.0.0 - unified: ^10.0.0 - checksum: c1c448923cd0239e9eeafb42d7129c05081c9a1bca4c8164b562cbb748e80d103bfd058597a48d54000ce3c776200ab8ccd64a9679d955423f07e4a4e77f10c3 - languageName: node - linkType: hard - -"remark-mdx-frontmatter@npm:^1.0.1": - version: 1.1.1 - resolution: "remark-mdx-frontmatter@npm:1.1.1" - dependencies: - estree-util-is-identifier-name: ^1.0.0 - estree-util-value-to-estree: ^1.0.0 - js-yaml: ^4.0.0 - toml: ^3.0.0 - checksum: a2d87e0d6cc7f541f7c854270e740da3bb403ee0398414aa77ee17df157853b692072eaff6242d439c20bf416c80908fdf44096771e25bfefd30e3463dace5e7 - languageName: node - linkType: hard - -"remark-parse@npm:^10.0.0": - version: 10.0.2 - resolution: "remark-parse@npm:10.0.2" - dependencies: - "@types/mdast": ^3.0.0 - mdast-util-from-markdown: ^1.0.0 - unified: ^10.0.0 - checksum: 5041b4b44725f377e69986e02f8f072ae2222db5e7d3b6c80829756b842e811343ffc2069cae1f958a96bfa36104ab91a57d7d7e2f0cef521e210ab8c614d5c7 - languageName: node - linkType: hard - -"remark-rehype@npm:^9.0.0": - version: 9.1.0 - resolution: "remark-rehype@npm:9.1.0" - dependencies: - "@types/hast": ^2.0.0 - "@types/mdast": ^3.0.0 - mdast-util-to-hast: ^11.0.0 - unified: ^10.0.0 - checksum: 01d8177ce1a9138ead8779ec73cfef8d06669c4ebe7c4e94e804a1ddba12dca874131330f22e3979a4e0a4132239142dc93e7cfbd5d18b9250b4cc770557aff1 - languageName: node - linkType: hard - "require-directory@npm:^2.1.1": version: 2.1.1 resolution: "require-directory@npm:2.1.1" @@ -12921,13 +8542,6 @@ __metadata: languageName: node linkType: hard -"require-like@npm:>= 0.1.1": - version: 0.1.2 - resolution: "require-like@npm:0.1.2" - checksum: edb8331f05fd807381a75b76f6cca9f0ce8acaa2e910b7e116541799aa970bfbc64fde5fd6adb3a6917dba346f8386ebbddb81614c24e8dad1b4290c7af9535e - languageName: node - linkType: hard - "require-main-filename@npm:^2.0.0": version: 2.0.0 resolution: "require-main-filename@npm:2.0.0" @@ -12935,13 +8549,6 @@ __metadata: languageName: node linkType: hard -"resolve-alpn@npm:^1.0.0": - version: 1.2.1 - resolution: "resolve-alpn@npm:1.2.1" - checksum: f558071fcb2c60b04054c99aebd572a2af97ef64128d59bef7ab73bd50d896a222a056de40ffc545b633d99b304c259ea9d0c06830d5c867c34f0bfa60b8eae0 - languageName: node - linkType: hard - "resolve-from@npm:^4.0.0": version: 4.0.0 resolution: "resolve-from@npm:4.0.0" @@ -12963,7 +8570,7 @@ __metadata: languageName: node linkType: hard -"resolve@npm:^1.1.7, resolve@npm:^1.14.2, resolve@npm:^1.22.2, resolve@npm:^1.22.4": +"resolve@npm:^1.1.7, resolve@npm:^1.22.2, resolve@npm:^1.22.4": version: 1.22.8 resolution: "resolve@npm:1.22.8" dependencies: @@ -12989,7 +8596,7 @@ __metadata: languageName: node linkType: hard -"resolve@patch:resolve@^1.1.7#~builtin, resolve@patch:resolve@^1.14.2#~builtin, resolve@patch:resolve@^1.22.2#~builtin, resolve@patch:resolve@^1.22.4#~builtin": +"resolve@patch:resolve@^1.1.7#~builtin, resolve@patch:resolve@^1.22.2#~builtin, resolve@patch:resolve@^1.22.4#~builtin": version: 1.22.8 resolution: "resolve@patch:resolve@npm%3A1.22.8#~builtin::version=1.22.8&hash=07638b" dependencies: @@ -13015,15 +8622,6 @@ __metadata: languageName: node linkType: hard -"responselike@npm:^2.0.0": - version: 2.0.1 - resolution: "responselike@npm:2.0.1" - dependencies: - lowercase-keys: ^2.0.0 - checksum: b122535466e9c97b55e69c7f18e2be0ce3823c5d47ee8de0d9c0b114aa55741c6db8bfbfce3766a94d1272e61bfb1ebf0a15e9310ac5629fbb7446a861b4fd3a - languageName: node - linkType: hard - "restore-cursor@npm:^3.1.0": version: 3.1.0 resolution: "restore-cursor@npm:3.1.0" @@ -13049,9 +8647,9 @@ __metadata: linkType: hard "rfdc@npm:^1.3.0": - version: 1.3.0 - resolution: "rfdc@npm:1.3.0" - checksum: fb2ba8512e43519983b4c61bd3fa77c0f410eff6bae68b08614437bc3f35f91362215f7b4a73cbda6f67330b5746ce07db5dd9850ad3edc91271ad6deea0df32 + version: 1.3.1 + resolution: "rfdc@npm:1.3.1" + checksum: d5d1e930aeac7e0e0a485f97db1356e388bdbeff34906d206fe524dd5ada76e95f186944d2e68307183fdc39a54928d4426bbb6734851692cfe9195efba58b79 languageName: node linkType: hard @@ -13066,75 +8664,6 @@ __metadata: languageName: node linkType: hard -"rollup-plugin-inject@npm:^3.0.0": - version: 3.0.2 - resolution: "rollup-plugin-inject@npm:3.0.2" - dependencies: - estree-walker: ^0.6.1 - magic-string: ^0.25.3 - rollup-pluginutils: ^2.8.1 - checksum: a014972c80fe34b8c8154056fa2533a8440066a31de831e3793fc21b15d108d92c22d8f7f472397bd5783d7c5e04d8cbf112fb72c5a26e997726e4eb090edad1 - languageName: node - linkType: hard - -"rollup-plugin-node-polyfills@npm:^0.2.1": - version: 0.2.1 - resolution: "rollup-plugin-node-polyfills@npm:0.2.1" - dependencies: - rollup-plugin-inject: ^3.0.0 - checksum: e84645212c443aca3cfae2ba69f01c6d8c5c250f0bf651416b69a4572b60aae9da7cdd687de3ab9b903f7a1ab96b06b71f0c4927d1b02a37485360d2b563937b - languageName: node - linkType: hard - -"rollup-pluginutils@npm:^2.8.1": - version: 2.8.2 - resolution: "rollup-pluginutils@npm:2.8.2" - dependencies: - estree-walker: ^0.6.1 - checksum: 339fdf866d8f4ff6e408fa274c0525412f7edb01dc46b5ccda51f575b7e0d20ad72965773376fb5db95a77a7fcfcab97bf841ec08dbadf5d6b08af02b7a2cf5e - languageName: node - linkType: hard - -"rollup@npm:^3.27.1": - version: 3.29.4 - resolution: "rollup@npm:3.29.4" - dependencies: - fsevents: ~2.3.2 - dependenciesMeta: - fsevents: - optional: true - bin: - rollup: dist/bin/rollup - checksum: 8bb20a39c8d91130825159c3823eccf4dc2295c9a0a5c4ed851a5bf2167dbf24d9a29f23461a54c955e5506395e6cc188eafc8ab0e20399d7489fb33793b184e - languageName: node - linkType: hard - -"rpc-websockets@npm:^7.5.1": - version: 7.6.2 - resolution: "rpc-websockets@npm:7.6.2" - dependencies: - "@babel/runtime": ^7.17.2 - bufferutil: ^4.0.1 - eventemitter3: ^4.0.7 - utf-8-validate: ^5.0.2 - uuid: ^8.3.2 - ws: ^8.5.0 - dependenciesMeta: - bufferutil: - optional: true - utf-8-validate: - optional: true - checksum: fa82613df99fd0a19a02f87c002808bc39fc0c040a17decf9ea6710bd22e21db507ac98edc335739ca0636cdf84459eaed69576e2c0c08fc12c65233c981318f - languageName: node - linkType: hard - -"run-async@npm:^2.4.0": - version: 2.4.1 - resolution: "run-async@npm:2.4.1" - checksum: a2c88aa15df176f091a2878eb840e68d0bdee319d8d97bbb89112223259cebecb94bc0defd735662b83c2f7a30bed8cddb7d1674eb48ae7322dc602b22d03797 - languageName: node - linkType: hard - "run-parallel@npm:^1.1.9": version: 1.2.0 resolution: "run-parallel@npm:1.2.0" @@ -13144,16 +8673,7 @@ __metadata: languageName: node linkType: hard -"rxjs@npm:^6.6.3": - version: 6.6.7 - resolution: "rxjs@npm:6.6.7" - dependencies: - tslib: ^1.9.0 - checksum: bc334edef1bb8bbf56590b0b25734ba0deaf8825b703256a93714308ea36dff8a11d25533671adf8e104e5e8f256aa6fdfe39b2e248cdbd7a5f90c260acbbd1b - languageName: node - linkType: hard - -"rxjs@npm:^7.5.5, rxjs@npm:^7.8.0": +"rxjs@npm:^7.8.0": version: 7.8.1 resolution: "rxjs@npm:7.8.1" dependencies: @@ -13162,49 +8682,33 @@ __metadata: languageName: node linkType: hard -"sade@npm:^1.7.3": - version: 1.8.1 - resolution: "sade@npm:1.8.1" - dependencies: - mri: ^1.1.0 - checksum: 0756e5b04c51ccdc8221ebffd1548d0ce5a783a44a0fa9017a026659b97d632913e78f7dca59f2496aa996a0be0b0c322afd87ca72ccd909406f49dbffa0f45d - languageName: node - linkType: hard - "safe-array-concat@npm:^1.0.1": - version: 1.0.1 - resolution: "safe-array-concat@npm:1.0.1" + version: 1.1.0 + resolution: "safe-array-concat@npm:1.1.0" dependencies: - call-bind: ^1.0.2 - get-intrinsic: ^1.2.1 + call-bind: ^1.0.5 + get-intrinsic: ^1.2.2 has-symbols: ^1.0.3 isarray: ^2.0.5 - checksum: 001ecf1d8af398251cbfabaf30ed66e3855127fbceee178179524b24160b49d15442f94ed6c0db0b2e796da76bb05b73bf3cc241490ec9c2b741b41d33058581 + checksum: 5c71eaa999168ee7474929f1cd3aae80f486353a651a094d9968936692cf90aa065224929a6486dcda66334a27dce4250a83612f9e0fef6dced1a925d3ac7296 languageName: node linkType: hard -"safe-buffer@npm:5.2.1, safe-buffer@npm:^5.0.1, safe-buffer@npm:^5.1.0, safe-buffer@npm:~5.2.0": +"safe-buffer@npm:^5.0.1, safe-buffer@npm:^5.1.0, safe-buffer@npm:^5.1.2, safe-buffer@npm:^5.2.1, safe-buffer@npm:~5.2.0": version: 5.2.1 resolution: "safe-buffer@npm:5.2.1" checksum: b99c4b41fdd67a6aaf280fcd05e9ffb0813654894223afb78a31f14a19ad220bba8aba1cb14eddce1fcfb037155fe6de4e861784eb434f7d11ed58d1e70dd491 languageName: node linkType: hard -"safe-buffer@npm:~5.1.0, safe-buffer@npm:~5.1.1": - version: 5.1.2 - resolution: "safe-buffer@npm:5.1.2" - checksum: f2f1f7943ca44a594893a852894055cf619c1fbcb611237fc39e461ae751187e7baf4dc391a72125e0ac4fb2d8c5c0b3c71529622e6a58f46b960211e704903c - languageName: node - linkType: hard - "safe-regex-test@npm:^1.0.0": - version: 1.0.0 - resolution: "safe-regex-test@npm:1.0.0" + version: 1.0.2 + resolution: "safe-regex-test@npm:1.0.2" dependencies: - call-bind: ^1.0.2 - get-intrinsic: ^1.1.3 + call-bind: ^1.0.5 + get-intrinsic: ^1.2.2 is-regex: ^1.1.4 - checksum: bc566d8beb8b43c01b94e67de3f070fd2781685e835959bbbaaec91cc53381145ca91f69bd837ce6ec244817afa0a5e974fc4e40a2957f0aca68ac3add1ddd34 + checksum: 4af5ce05a2daa4f6d4bfd5a3c64fc33d6b886f6592122e93c0efad52f7147b9b605e5ffc03c269a1e3d1f8db2a23bc636628a961c9fd65bafdc09503330673fd languageName: node linkType: hard @@ -13247,16 +8751,7 @@ __metadata: languageName: unknown linkType: soft -"semver@npm:6.1.1": - version: 6.1.1 - resolution: "semver@npm:6.1.1" - bin: - semver: ./bin/semver - checksum: 630e7d8a087d8f143c320dc381b2d9ca279295d2daa6ab4b707e6c9342ba0f25bd0b817530fe0eeb9ca62c24d7ad6d9eb660066818eee5554a1d5392f16e4ea0 - languageName: node - linkType: hard - -"semver@npm:^6.0.0, semver@npm:^6.3.1": +"semver@npm:6.3.1, semver@npm:^6.0.0, semver@npm:^6.3.1": version: 6.3.1 resolution: "semver@npm:6.3.1" bin: @@ -13265,47 +8760,25 @@ __metadata: languageName: node linkType: hard -"semver@npm:^7.3.5, semver@npm:^7.3.7, semver@npm:^7.3.8": - version: 7.5.4 - resolution: "semver@npm:7.5.4" +"semver@npm:7.3.5": + version: 7.3.5 + resolution: "semver@npm:7.3.5" dependencies: lru-cache: ^6.0.0 bin: semver: bin/semver.js - checksum: 12d8ad952fa353b0995bf180cdac205a4068b759a140e5d3c608317098b3575ac2f1e09182206bf2eb26120e1c0ed8fb92c48c592f6099680de56bb071423ca3 - languageName: node - linkType: hard - -"send@npm:0.18.0": - version: 0.18.0 - resolution: "send@npm:0.18.0" - dependencies: - debug: 2.6.9 - depd: 2.0.0 - destroy: 1.2.0 - encodeurl: ~1.0.2 - escape-html: ~1.0.3 - etag: ~1.8.1 - fresh: 0.5.2 - http-errors: 2.0.0 - mime: 1.6.0 - ms: 2.1.3 - on-finished: 2.4.1 - range-parser: ~1.2.1 - statuses: 2.0.1 - checksum: 74fc07ebb58566b87b078ec63e5a3e41ecd987e4272ba67b7467e86c6ad51bc6b0b0154133b6d8b08a2ddda360464f71382f7ef864700f34844a76c8027817a8 + checksum: 5eafe6102bea2a7439897c1856362e31cc348ccf96efd455c8b5bc2c61e6f7e7b8250dc26b8828c1d76a56f818a7ee907a36ae9fb37a599d3d24609207001d60 languageName: node linkType: hard -"serve-static@npm:1.15.0": - version: 1.15.0 - resolution: "serve-static@npm:1.15.0" +"semver@npm:^7.3.5, semver@npm:^7.3.7, semver@npm:^7.3.8, semver@npm:^7.5.4": + version: 7.5.4 + resolution: "semver@npm:7.5.4" dependencies: - encodeurl: ~1.0.2 - escape-html: ~1.0.3 - parseurl: ~1.3.3 - send: 0.18.0 - checksum: af57fc13be40d90a12562e98c0b7855cf6e8bd4c107fe9a45c212bf023058d54a1871b1c89511c3958f70626fff47faeb795f5d83f8cf88514dbaeb2b724464d + lru-cache: ^6.0.0 + bin: + semver: bin/semver.js + checksum: 12d8ad952fa353b0995bf180cdac205a4068b759a140e5d3c608317098b3575ac2f1e09182206bf2eb26120e1c0ed8fb92c48c592f6099680de56bb071423ca3 languageName: node linkType: hard @@ -13316,22 +8789,16 @@ __metadata: languageName: node linkType: hard -"set-cookie-parser@npm:^2.4.8": - version: 2.6.0 - resolution: "set-cookie-parser@npm:2.6.0" - checksum: bf11ebc594c53d84588f1b4c04f1b8ce14e0498b1c011b3d76b5c6d5aac481bbc3f7c5260ec4ce99bdc1d9aed19f9fc315e73166a36ca74d0f12349a73f6bdc9 - languageName: node - linkType: hard - "set-function-length@npm:^1.1.1": - version: 1.1.1 - resolution: "set-function-length@npm:1.1.1" + version: 1.2.0 + resolution: "set-function-length@npm:1.2.0" dependencies: define-data-property: ^1.1.1 - get-intrinsic: ^1.2.1 + function-bind: ^1.1.2 + get-intrinsic: ^1.2.2 gopd: ^1.0.1 - has-property-descriptors: ^1.0.0 - checksum: c131d7569cd7e110cafdfbfbb0557249b538477624dfac4fc18c376d879672fa52563b74029ca01f8f4583a8acb35bb1e873d573a24edb80d978a7ee607c6e06 + has-property-descriptors: ^1.0.1 + checksum: 63e34b45a2ff9abb419f52583481bf8ba597d33c0c85e56999085eb6078a0f7fbb4222051981c287feceeb358aa7789e7803cea2c82ac94c0ab37059596aff79 languageName: node linkType: hard @@ -13346,10 +8813,10 @@ __metadata: languageName: node linkType: hard -"setprototypeof@npm:1.2.0": - version: 1.2.0 - resolution: "setprototypeof@npm:1.2.0" - checksum: be18cbbf70e7d8097c97f713a2e76edf84e87299b40d085c6bf8b65314e994cc15e2e317727342fa6996e38e1f52c59720b53fe621e2eb593a6847bf0356db89 +"setprototypeof@npm:1.1.1": + version: 1.1.1 + resolution: "setprototypeof@npm:1.1.1" + checksum: a8bee29c1c64c245d460ce53f7460af8cbd0aceac68d66e5215153992cc8b3a7a123416353e0c642060e85cc5fd4241c92d1190eec97eda0dcb97436e8fcca3b languageName: node linkType: hard @@ -13392,14 +8859,21 @@ __metadata: languageName: node linkType: hard -"signal-exit@npm:^3.0.0, signal-exit@npm:^3.0.2, signal-exit@npm:^3.0.3, signal-exit@npm:^3.0.7": +"signal-exit@npm:4.0.2": + version: 4.0.2 + resolution: "signal-exit@npm:4.0.2" + checksum: 41f5928431cc6e91087bf0343db786a6313dd7c6fd7e551dbc141c95bb5fb26663444fd9df8ea47c5d7fc202f60aa7468c3162a9365cbb0615fc5e1b1328fe31 + languageName: node + linkType: hard + +"signal-exit@npm:^3.0.0, signal-exit@npm:^3.0.2, signal-exit@npm:^3.0.7": version: 3.0.7 resolution: "signal-exit@npm:3.0.7" checksum: a2f098f247adc367dffc27845853e9959b9e88b01cb301658cfe4194352d8d2bb32e18467c786a7fe15f1d44b233ea35633d076d5e737870b7139949d1ab6318 languageName: node linkType: hard -"signal-exit@npm:^4.0.1": +"signal-exit@npm:^4.0.1, signal-exit@npm:^4.1.0": version: 4.1.0 resolution: "signal-exit@npm:4.1.0" checksum: 64c757b498cb8629ffa5f75485340594d2f8189e9b08700e69199069c8e3070fb3e255f7ab873c05dc0b3cec412aea7402e10a5990cb6a050bd33ba062a6c549 @@ -13452,17 +8926,6 @@ __metadata: languageName: node linkType: hard -"socks-proxy-agent@npm:5, socks-proxy-agent@npm:^5.0.0": - version: 5.0.1 - resolution: "socks-proxy-agent@npm:5.0.1" - dependencies: - agent-base: ^6.0.2 - debug: 4 - socks: ^2.3.3 - checksum: 1b60c4977b2fef783f0fc4dc619cd2758aafdb43f3cf679f1e3627cb6c6e752811cee5513ebb4157ad26786033d2f85029440f197d321e8293b38cc5aab01e06 - languageName: node - linkType: hard - "socks-proxy-agent@npm:^8.0.1": version: 8.0.2 resolution: "socks-proxy-agent@npm:8.0.2" @@ -13474,7 +8937,7 @@ __metadata: languageName: node linkType: hard -"socks@npm:^2.3.3, socks@npm:^2.7.1": +"socks@npm:^2.7.1": version: 2.7.1 resolution: "socks@npm:2.7.1" dependencies: @@ -13493,29 +8956,6 @@ __metadata: languageName: node linkType: hard -"sort-object-keys@npm:^1.1.3": - version: 1.1.3 - resolution: "sort-object-keys@npm:1.1.3" - checksum: abea944d6722a1710a1aa6e4f9509da085d93d5fc0db23947cb411eedc7731f80022ce8fa68ed83a53dd2ac7441fcf72a3f38c09b3d9bbc4ff80546aa2e151ad - languageName: node - linkType: hard - -"sort-package-json@npm:^1.55.0": - version: 1.57.0 - resolution: "sort-package-json@npm:1.57.0" - dependencies: - detect-indent: ^6.0.0 - detect-newline: 3.1.0 - git-hooks-list: 1.0.3 - globby: 10.0.0 - is-plain-obj: 2.1.0 - sort-object-keys: ^1.1.3 - bin: - sort-package-json: cli.js - checksum: 15758ba6b1033ae136863eabd4b8c8a28e79dd68b71327f6803c2ea740dc149dc9ad708b006d07ee9de56b6dc7cadb7c697801ad50c01348aa91022c6ff6e21d - languageName: node - linkType: hard - "source-map-js@npm:^1.0.2": version: 1.0.2 resolution: "source-map-js@npm:1.0.2" @@ -13523,16 +8963,6 @@ __metadata: languageName: node linkType: hard -"source-map-support@npm:^0.5.21": - version: 0.5.21 - resolution: "source-map-support@npm:0.5.21" - dependencies: - buffer-from: ^1.0.0 - source-map: ^0.6.0 - checksum: 43e98d700d79af1d36f859bdb7318e601dfc918c7ba2e98456118ebc4c4872b327773e5a1df09b0524e9e5063bb18f0934538eace60cca2710d1fa687645d137 - languageName: node - linkType: hard - "source-map@npm:^0.5.0": version: 0.5.7 resolution: "source-map@npm:0.5.7" @@ -13540,34 +8970,6 @@ __metadata: languageName: node linkType: hard -"source-map@npm:^0.6.0, source-map@npm:^0.6.1, source-map@npm:~0.6.1": - version: 0.6.1 - resolution: "source-map@npm:0.6.1" - checksum: 59ce8640cf3f3124f64ac289012c2b8bd377c238e316fb323ea22fbfe83da07d81e000071d7242cad7a23cd91c7de98e4df8830ec3f133cb6133a5f6e9f67bc2 - languageName: node - linkType: hard - -"source-map@npm:^0.7.0, source-map@npm:^0.7.3": - version: 0.7.4 - resolution: "source-map@npm:0.7.4" - checksum: 01cc5a74b1f0e1d626a58d36ad6898ea820567e87f18dfc9d24a9843a351aaa2ec09b87422589906d6ff1deed29693e176194dc88bcae7c9a852dc74b311dbf5 - languageName: node - linkType: hard - -"sourcemap-codec@npm:^1.4.8": - version: 1.4.8 - resolution: "sourcemap-codec@npm:1.4.8" - checksum: b57981c05611afef31605732b598ccf65124a9fcb03b833532659ac4d29ac0f7bfacbc0d6c5a28a03e84c7510e7e556d758d0bb57786e214660016fb94279316 - languageName: node - linkType: hard - -"space-separated-tokens@npm:^2.0.0": - version: 2.0.2 - resolution: "space-separated-tokens@npm:2.0.2" - checksum: 202e97d7ca1ba0758a0aa4fe226ff98142073bcceeff2da3aad037968878552c3bbce3b3231970025375bbba5aee00c5b8206eda408da837ab2dc9c0f26be990 - languageName: node - linkType: hard - "split-on-first@npm:^1.0.0": version: 1.1.0 resolution: "split-on-first@npm:1.1.0" @@ -13591,15 +8993,6 @@ __metadata: languageName: node linkType: hard -"ssri@npm:^8.0.1": - version: 8.0.1 - resolution: "ssri@npm:8.0.1" - dependencies: - minipass: ^3.1.1 - checksum: bc447f5af814fa9713aa201ec2522208ae0f4d8f3bda7a1f445a797c7b929a02720436ff7c478fb5edc4045adb02b1b88d2341b436a80798734e2494f1067b36 - languageName: node - linkType: hard - "standard-as-callback@npm:^2.1.0": version: 2.1.0 resolution: "standard-as-callback@npm:2.1.0" @@ -13607,34 +9000,58 @@ __metadata: languageName: node linkType: hard -"statuses@npm:2.0.1": - version: 2.0.1 - resolution: "statuses@npm:2.0.1" - checksum: 18c7623fdb8f646fb213ca4051be4df7efb3484d4ab662937ca6fbef7ced9b9e12842709872eb3020cc3504b93bde88935c9f6417489627a7786f24f8031cbcb +"stat-mode@npm:0.3.0": + version: 0.3.0 + resolution: "stat-mode@npm:0.3.0" + checksum: d52680a4e81c5afc184913fe8f26e082e0cbbc87dfd53302de7edbf5c01eb2ee5b8212dcf171983e4e5140ca3039841cd34ca6959f9db745394c8b26670d5195 languageName: node linkType: hard -"std-env@npm:^3.4.3": - version: 3.5.0 - resolution: "std-env@npm:3.5.0" - checksum: 8eba87eab2d6933e0575f13a65a359952a2e3e8c4d24eb55beac5500fe0403b3482c7b59a5de8d035ae13d390c76dd6c677772f9d2a89ea7cf39ae267b71bdd3 +"statuses@npm:>= 1.2.1 < 2, statuses@npm:>= 1.5.0 < 2": + version: 1.5.0 + resolution: "statuses@npm:1.5.0" + checksum: c469b9519de16a4bb19600205cffb39ee471a5f17b82589757ca7bd40a8d92ebb6ed9f98b5a540c5d302ccbc78f15dc03cc0280dd6e00df1335568a5d5758a5c languageName: node linkType: hard -"stream-browserify@npm:^3.0.0": - version: 3.0.0 - resolution: "stream-browserify@npm:3.0.0" - dependencies: - inherits: ~2.0.4 - readable-stream: ^3.5.0 - checksum: 4c47ef64d6f03815a9ca3874e2319805e8e8a85f3550776c47ce523b6f4c6cd57f40e46ec6a9ab8ad260fde61863c2718f250d3bedb3fe9052444eb9abfd9921 +"std-env@npm:^3.7.0": + version: 3.7.0 + resolution: "std-env@npm:3.7.0" + checksum: 4f489d13ff2ab838c9acd4ed6b786b51aa52ecacdfeaefe9275fcb220ff2ac80c6e95674723508fd29850a694569563a8caaaea738eb82ca16429b3a0b50e510 languageName: node linkType: hard "stream-shift@npm:^1.0.0": - version: 1.0.1 - resolution: "stream-shift@npm:1.0.1" - checksum: 59b82b44b29ec3699b5519a49b3cedcc6db58c72fb40c04e005525dfdcab1c75c4e0c180b923c380f204bed78211b9bad8faecc7b93dece4d004c3f6ec75737b + version: 1.0.3 + resolution: "stream-shift@npm:1.0.3" + checksum: a24c0a3f66a8f9024bd1d579a533a53be283b4475d4e6b4b3211b964031447bdf6532dd1f3c2b0ad66752554391b7c62bd7ca4559193381f766534e723d50242 + languageName: node + linkType: hard + +"stream-to-array@npm:~2.3.0": + version: 2.3.0 + resolution: "stream-to-array@npm:2.3.0" + dependencies: + any-promise: ^1.1.0 + checksum: 7feaf63b38399b850615e6ffcaa951e96e4c8f46745dbce4b553a94c5dc43966933813747014935a3ff97793e7f30a65270bde19f82b2932871a1879229a77cf + languageName: node + linkType: hard + +"stream-to-promise@npm:2.2.0": + version: 2.2.0 + resolution: "stream-to-promise@npm:2.2.0" + dependencies: + any-promise: ~1.3.0 + end-of-stream: ~1.1.0 + stream-to-array: ~2.3.0 + checksum: 2c9ddb69c34d10ad27eb06197abc93fd1b1cd5f9597ead28ade4d6c57f4110d948a2ef14530f2f7b3b967f74f3554b57c38a4501b72a13b27fc8745bd7190d1d + languageName: node + linkType: hard + +"streamsearch@npm:^1.1.0": + version: 1.1.0 + resolution: "streamsearch@npm:1.1.0" + checksum: 1cce16cea8405d7a233d32ca5e00a00169cc0e19fbc02aa839959985f267335d435c07f96e5e0edd0eadc6d39c98d5435fb5bbbdefc62c41834eadc5622ad942 languageName: node linkType: hard @@ -13652,13 +9069,6 @@ __metadata: languageName: node linkType: hard -"string-hash@npm:^1.1.1": - version: 1.1.3 - resolution: "string-hash@npm:1.1.3" - checksum: 104b8667a5e0dc71bfcd29fee09cb88c6102e27bfb07c55f95535d90587d016731d52299380052e514266f4028a7a5172e0d9ac58e2f8f5001be61dc77c0754d - languageName: node - linkType: hard - "string-width-cjs@npm:string-width@^4.2.0, string-width@npm:^1.0.2 || 2 || 3 || 4, string-width@npm:^4.1.0, string-width@npm:^4.2.0, string-width@npm:^4.2.3": version: 4.2.3 resolution: "string-width@npm:4.2.3" @@ -13740,32 +9150,6 @@ __metadata: languageName: node linkType: hard -"string_decoder@npm:~0.10.x": - version: 0.10.31 - resolution: "string_decoder@npm:0.10.31" - checksum: fe00f8e303647e5db919948ccb5ce0da7dea209ab54702894dd0c664edd98e5d4df4b80d6fabf7b9e92b237359d21136c95bf068b2f7760b772ca974ba970202 - languageName: node - linkType: hard - -"string_decoder@npm:~1.1.1": - version: 1.1.1 - resolution: "string_decoder@npm:1.1.1" - dependencies: - safe-buffer: ~5.1.0 - checksum: 9ab7e56f9d60a28f2be697419917c50cac19f3e8e6c28ef26ed5f4852289fe0de5d6997d29becf59028556f2c62983790c1d9ba1e2a3cc401768ca12d5183a5b - languageName: node - linkType: hard - -"stringify-entities@npm:^4.0.0": - version: 4.0.3 - resolution: "stringify-entities@npm:4.0.3" - dependencies: - character-entities-html4: ^2.0.0 - character-entities-legacy: ^3.0.0 - checksum: 59e8f523b403bf7d415690e72ae52982decd6ea5426bd8b3f5c66225ddde73e766c0c0d91627df082d0794e30b19dd907ffb5864cef3602e4098d6777d7ca3c2 - languageName: node - linkType: hard - "strip-ansi-cjs@npm:strip-ansi@^6.0.1, strip-ansi@npm:^6.0.0, strip-ansi@npm:^6.0.1": version: 6.0.1 resolution: "strip-ansi@npm:6.0.1" @@ -13812,15 +9196,6 @@ __metadata: languageName: node linkType: hard -"style-to-object@npm:^0.4.1": - version: 0.4.4 - resolution: "style-to-object@npm:0.4.4" - dependencies: - inline-style-parser: 0.1.1 - checksum: 41656c06f93ac0a7ac260ebc2f9d09a8bd74b8ec1836f358cc58e169235835a3a356977891d2ebbd76f0e08a53616929069199f9cce543214d3dc98346e19c9a - languageName: node - linkType: hard - "styled-jsx@npm:5.1.1": version: 5.1.1 resolution: "styled-jsx@npm:5.1.1" @@ -13838,12 +9213,12 @@ __metadata: linkType: hard "sucrase@npm:^3.32.0": - version: 3.34.0 - resolution: "sucrase@npm:3.34.0" + version: 3.35.0 + resolution: "sucrase@npm:3.35.0" dependencies: "@jridgewell/gen-mapping": ^0.3.2 commander: ^4.0.0 - glob: 7.1.6 + glob: ^10.3.10 lines-and-columns: ^1.1.6 mz: ^2.7.0 pirates: ^4.0.1 @@ -13851,14 +9226,7 @@ __metadata: bin: sucrase: bin/sucrase sucrase-node: bin/sucrase-node - checksum: 61860063bdf6103413698e13247a3074d25843e91170825a9752e4af7668ffadd331b6e99e92fc32ee5b3c484ee134936f926fa9039d5711fafff29d017a2110 - languageName: node - linkType: hard - -"superstruct@npm:^0.14.2": - version: 0.14.2 - resolution: "superstruct@npm:0.14.2" - checksum: c5c4840f432da82125b923ec45faca5113217e83ae416e314d80eae012b8bb603d2e745025d173450758d116348820bc7028157f8c9a72b6beae879f94b837c0 + checksum: 9fc5792a9ab8a14dcf9c47dcb704431d35c1cdff1d17d55d382a31c2e8e3063870ad32ce120a80915498486246d612e30cda44f1624d9d9a10423e1a43487ad1 languageName: node linkType: hard @@ -13894,9 +9262,16 @@ __metadata: languageName: node linkType: hard -"tailwindcss@npm:^3, tailwindcss@npm:~3.3.3": - version: 3.3.5 - resolution: "tailwindcss@npm:3.3.5" +"system-architecture@npm:^0.1.0": + version: 0.1.0 + resolution: "system-architecture@npm:0.1.0" + checksum: ca0dd793c45c354ab57dd7fc8ce7dc9923a6e07382bd3b22eb5b08f55ddb0217c390d00767549c5155fd4ce7ef23ffdd8cfb33dd4344cbbd37837d085a50f6f0 + languageName: node + linkType: hard + +"tailwindcss@npm:~3.3.3": + version: 3.3.7 + resolution: "tailwindcss@npm:3.3.7" dependencies: "@alloc/quick-lru": ^5.2.0 arg: ^5.0.2 @@ -13923,43 +9298,33 @@ __metadata: bin: tailwind: lib/cli.js tailwindcss: lib/cli.js - checksum: e04bb3bb7f9f17e9b6db0c7ace755ef0d6d05bff36ebeb9e5006e13c018ed5566f09db30a1a34380e38fa93ebbb4ae0e28fe726879d5e9ddd8c5b52bffd26f14 + checksum: 73728e03ac00bb90a09436895b663473336da4a539ca22df41c62948fd4e45c5feda71d6f33c03666045dbb1806ee36658caf604256d20196ebf580ec0987c2d languageName: node linkType: hard "tapable@npm:^2.2.0": version: 2.2.1 - resolution: "tapable@npm:2.2.1" - checksum: 3b7a1b4d86fa940aad46d9e73d1e8739335efd4c48322cb37d073eb6f80f5281889bf0320c6d8ffcfa1a0dd5bfdbd0f9d037e252ef972aca595330538aac4d51 - languageName: node - linkType: hard - -"tar-fs@npm:^2.1.1": - version: 2.1.1 - resolution: "tar-fs@npm:2.1.1" - dependencies: - chownr: ^1.1.1 - mkdirp-classic: ^0.5.2 - pump: ^3.0.0 - tar-stream: ^2.1.4 - checksum: f5b9a70059f5b2969e65f037b4e4da2daf0fa762d3d232ffd96e819e3f94665dbbbe62f76f084f1acb4dbdcce16c6e4dac08d12ffc6d24b8d76720f4d9cf032d + resolution: "tapable@npm:2.2.1" + checksum: 3b7a1b4d86fa940aad46d9e73d1e8739335efd4c48322cb37d073eb6f80f5281889bf0320c6d8ffcfa1a0dd5bfdbd0f9d037e252ef972aca595330538aac4d51 languageName: node linkType: hard -"tar-stream@npm:^2.1.4": - version: 2.2.0 - resolution: "tar-stream@npm:2.2.0" +"tar@npm:4.4.18": + version: 4.4.18 + resolution: "tar@npm:4.4.18" dependencies: - bl: ^4.0.3 - end-of-stream: ^1.4.1 - fs-constants: ^1.0.0 - inherits: ^2.0.3 - readable-stream: ^3.1.1 - checksum: 699831a8b97666ef50021c767f84924cfee21c142c2eb0e79c63254e140e6408d6d55a065a2992548e72b06de39237ef2b802b99e3ece93ca3904a37622a66f3 + chownr: ^1.1.4 + fs-minipass: ^1.2.7 + minipass: ^2.9.0 + minizlib: ^1.3.3 + mkdirp: ^0.5.5 + safe-buffer: ^5.2.1 + yallist: ^3.1.1 + checksum: a8ef7de6d9223ba51cfb47af881a82be69691ac5a59b1558b4d9ae3ed3513a16872149b060dab942fd2cb96e00fff8f747948c794baf917ed06c5be9de5fd148 languageName: node linkType: hard -"tar@npm:^6.0.2, tar@npm:^6.1.11, tar@npm:^6.1.2": +"tar@npm:^6.1.11, tar@npm:^6.1.2": version: 6.2.0 resolution: "tar@npm:6.2.0" dependencies: @@ -13973,13 +9338,6 @@ __metadata: languageName: node linkType: hard -"text-encoding-utf-8@npm:^1.0.2": - version: 1.0.2 - resolution: "text-encoding-utf-8@npm:1.0.2" - checksum: ec4c15d50e738c5dba7327ad432ebf0725ec75d4d69c0bd55609254c5a3bc5341272d7003691084a0a73d60d981c8eb0e87603676fdb6f3fed60f4c9192309f9 - languageName: node - linkType: hard - "text-table@npm:^0.2.0": version: 0.2.0 resolution: "text-table@npm:0.2.0" @@ -14014,17 +9372,7 @@ __metadata: languageName: node linkType: hard -"through2@npm:^2.0.3": - version: 2.0.5 - resolution: "through2@npm:2.0.5" - dependencies: - readable-stream: ~2.3.6 - xtend: ~4.0.1 - checksum: beb0f338aa2931e5660ec7bf3ad949e6d2e068c31f4737b9525e5201b824ac40cac6a337224856b56bd1ddd866334bbfb92a9f57cd6f66bc3f18d3d86fc0fe50 - languageName: node - linkType: hard - -"through@npm:>=2.2.7 <3, through@npm:^2.3.6, through@npm:^2.3.8": +"through@npm:^2.3.8": version: 2.3.8 resolution: "through@npm:2.3.8" checksum: a38c3e059853c494af95d50c072b83f8b676a9ba2818dcc5b108ef252230735c54e0185437618596c790bbba8fcdaef5b290405981ffa09dce67b1f1bf190cbd @@ -14054,15 +9402,6 @@ __metadata: languageName: node linkType: hard -"tmp@npm:^0.0.33": - version: 0.0.33 - resolution: "tmp@npm:0.0.33" - dependencies: - os-tmpdir: ~1.0.2 - checksum: 902d7aceb74453ea02abbf58c203f4a8fc1cead89b60b31e354f74ed5b3fb09ea817f94fb310f884a5d16987dd9fa5a735412a7c2dd088dd3d415aa819ae3a28 - languageName: node - linkType: hard - "to-fast-properties@npm:^2.0.0": version: 2.0.0 resolution: "to-fast-properties@npm:2.0.0" @@ -14093,14 +9432,14 @@ __metadata: languageName: node linkType: hard -"toidentifier@npm:1.0.1": - version: 1.0.1 - resolution: "toidentifier@npm:1.0.1" - checksum: 952c29e2a85d7123239b5cfdd889a0dde47ab0497f0913d70588f19c53f7e0b5327c95f4651e413c74b785147f9637b17410ac8c846d5d4a20a5a33eb6dc3a45 +"toidentifier@npm:1.0.0": + version: 1.0.0 + resolution: "toidentifier@npm:1.0.0" + checksum: 199e6bfca1531d49b3506cff02353d53ec987c9ee10ee272ca6484ed97f1fc10fb77c6c009079ca16d5c5be4a10378178c3cacdb41ce9ec954c3297c74c6053e languageName: node linkType: hard -"toml@npm:^3.0.0, toml@npm:~3.0.0": +"toml@npm:~3.0.0": version: 3.0.0 resolution: "toml@npm:3.0.0" checksum: 5d7f1d8413ad7780e9bdecce8ea4c3f5130dd53b0a4f2e90b93340979a137739879d7b9ce2ce05c938b8cc828897fe9e95085197342a1377dd8850bf5125f15f @@ -14114,10 +9453,21 @@ __metadata: languageName: node linkType: hard -"trough@npm:^2.0.0": - version: 2.1.0 - resolution: "trough@npm:2.1.0" - checksum: a577bb561c2b401cc0e1d9e188fcfcdf63b09b151ff56a668da12197fe97cac15e3d77d5b51f426ccfd94255744a9118e9e9935afe81a3644fa1be9783c82886 +"tree-kill@npm:1.2.2": + version: 1.2.2 + resolution: "tree-kill@npm:1.2.2" + bin: + tree-kill: cli.js + checksum: 49117f5f410d19c84b0464d29afb9642c863bc5ba40fcb9a245d474c6d5cc64d1b177a6e6713129eb346b40aebb9d4631d967517f9fbe8251c35b21b13cd96c7 + languageName: node + linkType: hard + +"ts-api-utils@npm:^1.0.1": + version: 1.0.3 + resolution: "ts-api-utils@npm:1.0.3" + peerDependencies: + typescript: ">=4.2.0" + checksum: 441cc4489d65fd515ae6b0f4eb8690057add6f3b6a63a36073753547fb6ce0c9ea0e0530220a0b282b0eec535f52c4dfc315d35f8a4c9a91c0def0707a714ca6 languageName: node linkType: hard @@ -14183,37 +9533,26 @@ __metadata: languageName: node linkType: hard -"tsconfig-paths@npm:^3.14.2": - version: 3.14.2 - resolution: "tsconfig-paths@npm:3.14.2" +"tsconfig-paths@npm:^3.15.0": + version: 3.15.0 + resolution: "tsconfig-paths@npm:3.15.0" dependencies: "@types/json5": ^0.0.29 json5: ^1.0.2 minimist: ^1.2.6 strip-bom: ^3.0.0 - checksum: a6162eaa1aed680537f93621b82399c7856afd10ec299867b13a0675e981acac4e0ec00896860480efc59fc10fd0b16fdc928c0b885865b52be62cadac692447 - languageName: node - linkType: hard - -"tsconfig-paths@npm:^4.0.0": - version: 4.2.0 - resolution: "tsconfig-paths@npm:4.2.0" - dependencies: - json5: ^2.2.2 - minimist: ^1.2.6 - strip-bom: ^3.0.0 - checksum: 28c5f7bbbcabc9dabd4117e8fdc61483f6872a1c6b02a4b1c4d68c5b79d06896c3cc9547610c4c3ba64658531caa2de13ead1ea1bf321c7b53e969c4752b98c7 + checksum: 59f35407a390d9482b320451f52a411a256a130ff0e7543d18c6f20afab29ac19fbe55c360a93d6476213cc335a4d76ce90f67df54c4e9037f7d240920832201 languageName: node linkType: hard -"tslib@npm:1.14.1, tslib@npm:^1.8.1, tslib@npm:^1.9.0": +"tslib@npm:1.14.1, tslib@npm:^1.8.1": version: 1.14.1 resolution: "tslib@npm:1.14.1" checksum: dbe628ef87f66691d5d2959b3e41b9ca0045c3ee3c7c7b906cc1e328b39f199bb1ad9e671c39025bd56122ac57dfbf7385a94843b1cc07c60a4db74795829acd languageName: node linkType: hard -"tslib@npm:^2.0.0, tslib@npm:^2.0.1, tslib@npm:^2.1.0, tslib@npm:^2.3.1, tslib@npm:^2.4.0": +"tslib@npm:^2.0.0, tslib@npm:^2.1.0, tslib@npm:^2.3.1, tslib@npm:^2.4.0": version: 2.6.2 resolution: "tslib@npm:2.6.2" checksum: 329ea56123005922f39642318e3d1f0f8265d1e7fcb92c633e0809521da75eeaca28d2cf96d7248229deb40e5c19adf408259f4b9640afd20d13aecc1430f3ad @@ -14240,15 +9579,6 @@ __metadata: languageName: node linkType: hard -"type-check@npm:~0.3.2": - version: 0.3.2 - resolution: "type-check@npm:0.3.2" - dependencies: - prelude-ls: ~1.1.2 - checksum: dd3b1495642731bc0e1fc40abe5e977e0263005551ac83342ecb6f4f89551d106b368ec32ad3fb2da19b3bd7b2d1f64330da2ea9176d8ddbfe389fb286eb5124 - languageName: node - linkType: hard - "type-fest@npm:^0.20.2": version: 0.20.2 resolution: "type-fest@npm:0.20.2" @@ -14270,16 +9600,6 @@ __metadata: languageName: node linkType: hard -"type-is@npm:~1.6.18": - version: 1.6.18 - resolution: "type-is@npm:1.6.18" - dependencies: - media-typer: 0.3.0 - mime-types: ~2.1.24 - checksum: 2c8e47675d55f8b4e404bcf529abdf5036c537a04c2b20177bcf78c9e3c1da69da3942b1346e6edb09e823228c0ee656ef0e033765ec39a70d496ef601a0c657 - languageName: node - linkType: hard - "typed-array-buffer@npm:^1.0.0": version: 1.0.0 resolution: "typed-array-buffer@npm:1.0.0" @@ -14336,13 +9656,13 @@ __metadata: languageName: node linkType: hard -"typescript@npm:4.3.4": - version: 4.3.4 - resolution: "typescript@npm:4.3.4" +"typescript@npm:4.9.5": + version: 4.9.5 + resolution: "typescript@npm:4.9.5" bin: tsc: bin/tsc tsserver: bin/tsserver - checksum: 75e1f2769c7ff38c718523d05eaf1c2611dbf92c0ab0f85f603ead9bb23416af2009a5dac46e76ef6a207a8508fa53f51b43a41f2a91b1241b53cd744c16128c + checksum: ee000bc26848147ad423b581bd250075662a354d84f0e06eb76d3b892328d8d4440b7487b5a83e851b12b255f55d71835b008a66cbf8f255a11e4400159237db languageName: node linkType: hard @@ -14356,13 +9676,13 @@ __metadata: languageName: node linkType: hard -"typescript@patch:typescript@4.3.4#~builtin": - version: 4.3.4 - resolution: "typescript@patch:typescript@npm%3A4.3.4#~builtin::version=4.3.4&hash=a1c5e5" +"typescript@patch:typescript@4.9.5#~builtin": + version: 4.9.5 + resolution: "typescript@patch:typescript@npm%3A4.9.5#~builtin::version=4.9.5&hash=a1c5e5" bin: tsc: bin/tsc tsserver: bin/tsserver - checksum: 6ccc2e1148e172da119ea4b72c66395a0c18a53884d21fb82bb4503a948a7169e9961defe24a359040a3d77bf5ff338945804296e0e27c87b5bd22ea1d25781b + checksum: 2eee5c37cad4390385db5db5a8e81470e42e8f1401b0358d7390095d6f681b410f2c4a0c496c6ff9ebd775423c7785cdace7bcdad76c7bee283df3d9718c0f20 languageName: node linkType: hard @@ -14376,10 +9696,24 @@ __metadata: languageName: node linkType: hard -"ufo@npm:^1.3.0, ufo@npm:^1.3.1": - version: 1.3.1 - resolution: "ufo@npm:1.3.1" - checksum: 2db2f9d24e3f572ddb9b2f4415eda679fd366cbb9eec4c56996651323737f17528b4aab2bb45c5f2effff2304f9b0c46e0981aee3e48f38ac51106a8993dff31 +"ua-parser-js@npm:^1.0.35": + version: 1.0.37 + resolution: "ua-parser-js@npm:1.0.37" + checksum: 4d481c720d523366d7762dc8a46a1b58967d979aacf786f9ceceb1cd767de069f64a4bdffb63956294f1c0696eb465ddb950f28ba90571709e33521b4bd75e07 + languageName: node + linkType: hard + +"ufo@npm:^1.3.0, ufo@npm:^1.3.1, ufo@npm:^1.3.2": + version: 1.3.2 + resolution: "ufo@npm:1.3.2" + checksum: f1180bb715ff4dd46152fd4dec41c731e84d7b9eaf1432548a0210b2f7e0cd29de125ac88e582c6a079d8ae5bc9ab04ef2bdbafe125086480b10c1006b81bfce + languageName: node + linkType: hard + +"uid-promise@npm:1.0.0": + version: 1.0.0 + resolution: "uid-promise@npm:1.0.0" + checksum: 8769e9581a4ae88b2b43225a3f31730d1075935359df44bfd47618e0f7c8a83cd49c127916fa73f62bfaabcc800d2b3f334af9a02615123d4349372326792ede languageName: node linkType: hard @@ -14418,71 +9752,25 @@ __metadata: languageName: node linkType: hard -"unenv@npm:^1.7.4": - version: 1.7.4 - resolution: "unenv@npm:1.7.4" - dependencies: - consola: ^3.2.3 - defu: ^6.1.2 - mime: ^3.0.0 - node-fetch-native: ^1.4.0 - pathe: ^1.1.1 - checksum: a60873b9283c6ff57ed939938c7aac991412be36c02d00e1acb3744a9c4275743190ff665994f9edb2fa2a0f4eb5aa5a0ea4d04625a95fcf33792eff3d9b8092 - languageName: node - linkType: hard - -"unicode-canonical-property-names-ecmascript@npm:^2.0.0": - version: 2.0.0 - resolution: "unicode-canonical-property-names-ecmascript@npm:2.0.0" - checksum: 39be078afd014c14dcd957a7a46a60061bc37c4508ba146517f85f60361acf4c7539552645ece25de840e17e293baa5556268d091ca6762747fdd0c705001a45 - languageName: node - linkType: hard - -"unicode-match-property-ecmascript@npm:^2.0.0": - version: 2.0.0 - resolution: "unicode-match-property-ecmascript@npm:2.0.0" - dependencies: - unicode-canonical-property-names-ecmascript: ^2.0.0 - unicode-property-aliases-ecmascript: ^2.0.0 - checksum: 1f34a7434a23df4885b5890ac36c5b2161a809887000be560f56ad4b11126d433c0c1c39baf1016bdabed4ec54829a6190ee37aa24919aa116dc1a5a8a62965a - languageName: node - linkType: hard - -"unicode-match-property-value-ecmascript@npm:^2.1.0": - version: 2.1.0 - resolution: "unicode-match-property-value-ecmascript@npm:2.1.0" - checksum: 8d6f5f586b9ce1ed0e84a37df6b42fdba1317a05b5df0c249962bd5da89528771e2d149837cad11aa26bcb84c35355cb9f58a10c3d41fa3b899181ece6c85220 - languageName: node - linkType: hard - -"unicode-property-aliases-ecmascript@npm:^2.0.0": - version: 2.1.0 - resolution: "unicode-property-aliases-ecmascript@npm:2.1.0" - checksum: 243524431893649b62cc674d877bd64ef292d6071dd2fd01ab4d5ad26efbc104ffcd064f93f8a06b7e4ec54c172bf03f6417921a0d8c3a9994161fe1f88f815b - languageName: node - linkType: hard - -"unified@npm:^10.0.0": - version: 10.1.2 - resolution: "unified@npm:10.1.2" +"undici@npm:5.23.0": + version: 5.23.0 + resolution: "undici@npm:5.23.0" dependencies: - "@types/unist": ^2.0.0 - bail: ^2.0.0 - extend: ^3.0.0 - is-buffer: ^2.0.0 - is-plain-obj: ^4.0.0 - trough: ^2.0.0 - vfile: ^5.0.0 - checksum: 053e7c65ede644607f87bd625a299e4b709869d2f76ec8138569e6e886903b6988b21cd9699e471eda42bee189527be0a9dac05936f1d069a5e65d0125d5d756 + busboy: ^1.6.0 + checksum: 906ca4fb1d47163d2cee2ecbbc664a1d92508a2cdf1558146621109f525c983a83597910b36e6ba468240e95259be5939cea6babc99fc0c36360b16630f66784 languageName: node linkType: hard -"unique-filename@npm:^1.1.1": - version: 1.1.1 - resolution: "unique-filename@npm:1.1.1" +"unenv@npm:^1.9.0": + version: 1.9.0 + resolution: "unenv@npm:1.9.0" dependencies: - unique-slug: ^2.0.0 - checksum: cf4998c9228cc7647ba7814e255dec51be43673903897b1786eff2ac2d670f54d4d733357eb08dea969aa5e6875d0e1bd391d668fbdb5a179744e7c7551a6f80 + consola: ^3.2.3 + defu: ^6.1.3 + mime: ^3.0.0 + node-fetch-native: ^1.6.1 + pathe: ^1.1.1 + checksum: 4cfbeedee1436e7f417d655c521e4c6220228f5b96afff90b5253d4504282c6de5acdd982aa51c977ce38d21d7692a33d10fc857166b3488655ff29c3bb754a2 languageName: node linkType: hard @@ -14495,15 +9783,6 @@ __metadata: languageName: node linkType: hard -"unique-slug@npm:^2.0.0": - version: 2.0.2 - resolution: "unique-slug@npm:2.0.2" - dependencies: - imurmurhash: ^0.1.4 - checksum: 5b6876a645da08d505dedb970d1571f6cebdf87044cb6b740c8dbb24f0d6e1dc8bdbf46825fd09f994d7cf50760e6f6e063cfa197d51c5902c00a861702eb75a - languageName: node - linkType: hard - "unique-slug@npm:^4.0.0": version: 4.0.0 resolution: "unique-slug@npm:4.0.0" @@ -14513,89 +9792,6 @@ __metadata: languageName: node linkType: hard -"unist-builder@npm:^3.0.0": - version: 3.0.1 - resolution: "unist-builder@npm:3.0.1" - dependencies: - "@types/unist": ^2.0.0 - checksum: d8c42fe69aa55a3e9aed3c581007ec5371349bf9885bfa8b0b787634f8d12fa5081f066b205ded379b6d0aeaa884039bae9ebb65a3e71784005fb110aef30d0f - languageName: node - linkType: hard - -"unist-util-generated@npm:^2.0.0": - version: 2.0.1 - resolution: "unist-util-generated@npm:2.0.1" - checksum: 6221ad0571dcc9c8964d6b054f39ef6571ed59cc0ce3e88ae97ea1c70afe76b46412a5ffaa91f96814644ac8477e23fb1b477d71f8d70e625728c5258f5c0d99 - languageName: node - linkType: hard - -"unist-util-is@npm:^5.0.0": - version: 5.2.1 - resolution: "unist-util-is@npm:5.2.1" - dependencies: - "@types/unist": ^2.0.0 - checksum: ae76fdc3d35352cd92f1bedc3a0d407c3b9c42599a52ab9141fe89bdd786b51f0ec5a2ab68b93fb532e239457cae62f7e39eaa80229e1cb94875da2eafcbe5c4 - languageName: node - linkType: hard - -"unist-util-position-from-estree@npm:^1.0.0, unist-util-position-from-estree@npm:^1.1.0": - version: 1.1.2 - resolution: "unist-util-position-from-estree@npm:1.1.2" - dependencies: - "@types/unist": ^2.0.0 - checksum: e3f4060e2a9e894c6ed63489c5a7cb58ff282e5dae9497cbc2073033ca74d6e412af4d4d342c97aea08d997c908b8bce2fe43a2062aafc2bb3f266533016588b - languageName: node - linkType: hard - -"unist-util-position@npm:^4.0.0": - version: 4.0.4 - resolution: "unist-util-position@npm:4.0.4" - dependencies: - "@types/unist": ^2.0.0 - checksum: e7487b6cec9365299695e3379ded270a1717074fa11fd2407c9b934fb08db6fe1d9077ddeaf877ecf1813665f8ccded5171693d3d9a7a01a125ec5cdd5e88691 - languageName: node - linkType: hard - -"unist-util-remove-position@npm:^4.0.0": - version: 4.0.2 - resolution: "unist-util-remove-position@npm:4.0.2" - dependencies: - "@types/unist": ^2.0.0 - unist-util-visit: ^4.0.0 - checksum: 989831da913d09a82a99ed9b47b78471b6409bde95942cde47e09da54b7736516f17e3c7e026af468684c1efcec5fb52df363381b2f9dc7fd96ce791c5a2fa4a - languageName: node - linkType: hard - -"unist-util-stringify-position@npm:^3.0.0": - version: 3.0.3 - resolution: "unist-util-stringify-position@npm:3.0.3" - dependencies: - "@types/unist": ^2.0.0 - checksum: dbd66c15183607ca942a2b1b7a9f6a5996f91c0d30cf8966fb88955a02349d9eefd3974e9010ee67e71175d784c5a9fea915b0aa0b0df99dcb921b95c4c9e124 - languageName: node - linkType: hard - -"unist-util-visit-parents@npm:^5.1.1": - version: 5.1.3 - resolution: "unist-util-visit-parents@npm:5.1.3" - dependencies: - "@types/unist": ^2.0.0 - unist-util-is: ^5.0.0 - checksum: 8ecada5978994f846b64658cf13b4092cd78dea39e1ba2f5090a5de842ba4852712c02351a8ae95250c64f864635e7b02aedf3b4a093552bb30cf1bd160efbaa - languageName: node - linkType: hard - -"unist-util-visit@npm:^4.0.0": - version: 4.1.2 - resolution: "unist-util-visit@npm:4.1.2" - dependencies: - "@types/unist": ^2.0.0 - unist-util-is: ^5.0.0 - unist-util-visit-parents: ^5.1.1 - checksum: 95a34e3f7b5b2d4b68fd722b6229972099eb97b6df18913eda44a5c11df8b1e27efe7206dd7b88c4ed244a48c474a5b2e2629ab79558ff9eb936840295549cee - languageName: node - linkType: hard - "universalify@npm:^0.1.0": version: 0.1.2 resolution: "universalify@npm:0.1.2" @@ -14610,7 +9806,7 @@ __metadata: languageName: node linkType: hard -"unpipe@npm:1.0.0, unpipe@npm:~1.0.0": +"unpipe@npm:1.0.0": version: 1.0.0 resolution: "unpipe@npm:1.0.0" checksum: 4fa18d8d8d977c55cb09715385c203197105e10a6d220087ec819f50cb68870f02942244f1017565484237f1f8c5d3cd413631b1ae104d3096f24fdfde1b4aa2 @@ -14618,8 +9814,8 @@ __metadata: linkType: hard "unstorage@npm:^1.9.0": - version: 1.10.0 - resolution: "unstorage@npm:1.10.0" + version: 1.10.1 + resolution: "unstorage@npm:1.10.1" dependencies: anymatch: ^3.1.3 chokidar: ^3.5.3 @@ -14670,20 +9866,20 @@ __metadata: optional: true idb-keyval: optional: true - checksum: 04d2b7aa5ab2086b9be35133b68490deedc7da15792597d4e9b05743e08ec58d9eb6d08b0590d45a39faed85c4ee8f144e8613bc12f1bfa0660dd5185f4fae50 + checksum: 59dc9f21d25df2bc8d14e3965235cbb85e3e2e8cb332da70ca471ba4519269a06936eba4012916251f3b88e23176df44b64abb826202a3a3c9d0a185bfe5e500 languageName: node linkType: hard -"untun@npm:^0.1.2": - version: 0.1.2 - resolution: "untun@npm:0.1.2" +"untun@npm:^0.1.3": + version: 0.1.3 + resolution: "untun@npm:0.1.3" dependencies: - citty: ^0.1.3 + citty: ^0.1.5 consola: ^3.2.3 pathe: ^1.1.1 bin: untun: bin/untun.mjs - checksum: 4ba32a6273138712ce8db3df027262902ec2a2c106d44ab94202a73b652e76b984e5661e3a7897dce048a740890f23165fb810a2ab1a69df2d6f729dad8078e2 + checksum: ad886c242dbac250f88ef6f18ad780fa084d07e4d030ab5ceacfe4378aa4bf2d3549b8ed8352bad5776facd9aaee05e3f914c661adc11bace867e2a12fd7bee5 languageName: node linkType: hard @@ -14718,8 +9914,8 @@ __metadata: linkType: hard "use-callback-ref@npm:^1.3.0": - version: 1.3.0 - resolution: "use-callback-ref@npm:1.3.0" + version: 1.3.1 + resolution: "use-callback-ref@npm:1.3.1" dependencies: tslib: ^2.0.0 peerDependencies: @@ -14728,7 +9924,7 @@ __metadata: peerDependenciesMeta: "@types/react": optional: true - checksum: 7913df383a5a6fcb399212eedefaac2e0c6f843555202d4e3010bac3848afe38ecaa3d0d6500ad1d936fbeffd637e6c517e68edb024af5e6beca7f27f3ce7b21 + checksum: 6a6a3a8bfe88f466eab982b8a92e5da560a7127b3b38815e89bc4d195d4b33aa9a53dba50d93e8138e7502bcc7e39efe9f2735a07a673212630990c73483e8e9 languageName: node linkType: hard @@ -14767,72 +9963,28 @@ __metadata: linkType: hard "usehooks-ts@npm:~2.9.1": - version: 2.9.1 - resolution: "usehooks-ts@npm:2.9.1" + version: 2.9.5 + resolution: "usehooks-ts@npm:2.9.5" peerDependencies: react: ^16.8.0 || ^17.0.0 || ^18.0.0 react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 - checksum: 36f1e4142ce23bc019b81d2e93aefd7f2c350abcf255598c21627114a69a2f2f116b35dc3a353375f09c6e4c9b704a04f104e3d10e98280545c097feca66c30a - languageName: node - linkType: hard - -"utf-8-validate@npm:^5.0.2": - version: 5.0.10 - resolution: "utf-8-validate@npm:5.0.10" - dependencies: - node-gyp: latest - node-gyp-build: ^4.3.0 - checksum: 5579350a023c66a2326752b6c8804cc7b39dcd251bb088241da38db994b8d78352e388dcc24ad398ab98385ba3c5ffcadb6b5b14b2637e43f767869055e46ba6 + checksum: fb78e5bdf076fca0f76e61d39ddbc34e45f00a417057a0622eb8e67cc26d516c33006ce81b4640f204a6191d5e816b461fd7aaf790ccaa97b7c279db17200b45 languageName: node linkType: hard -"util-deprecate@npm:^1.0.1, util-deprecate@npm:^1.0.2, util-deprecate@npm:~1.0.1": +"util-deprecate@npm:^1.0.1, util-deprecate@npm:^1.0.2": version: 1.0.2 resolution: "util-deprecate@npm:1.0.2" checksum: 474acf1146cb2701fe3b074892217553dfcf9a031280919ba1b8d651a068c9b15d863b7303cb15bd00a862b498e6cf4ad7b4a08fb134edd5a6f7641681cb54a2 languageName: node linkType: hard -"util@npm:^0.12.4": - version: 0.12.5 - resolution: "util@npm:0.12.5" - dependencies: - inherits: ^2.0.3 - is-arguments: ^1.0.4 - is-generator-function: ^1.0.7 - is-typed-array: ^1.1.3 - which-typed-array: ^1.1.2 - checksum: 705e51f0de5b446f4edec10739752ac25856541e0254ea1e7e45e5b9f9b0cb105bc4bd415736a6210edc68245a7f903bf085ffb08dd7deb8a0e847f60538a38a - languageName: node - linkType: hard - -"utils-merge@npm:1.0.1": - version: 1.0.1 - resolution: "utils-merge@npm:1.0.1" - checksum: c81095493225ecfc28add49c106ca4f09cdf56bc66731aa8dabc2edbbccb1e1bfe2de6a115e5c6a380d3ea166d1636410b62ef216bb07b3feb1cfde1d95d5080 - languageName: node - linkType: hard - -"uuid@npm:^8.3.2": - version: 8.3.2 - resolution: "uuid@npm:8.3.2" - bin: - uuid: dist/bin/uuid - checksum: 5575a8a75c13120e2f10e6ddc801b2c7ed7d8f3c8ac22c7ed0c7b2ba6383ec0abda88c905085d630e251719e0777045ae3236f04c812184b7c765f63a70e58df - languageName: node - linkType: hard - -"uvu@npm:^0.5.0": - version: 0.5.6 - resolution: "uvu@npm:0.5.6" - dependencies: - dequal: ^2.0.0 - diff: ^5.0.0 - kleur: ^4.0.3 - sade: ^1.7.3 +"uuid@npm:3.3.2": + version: 3.3.2 + resolution: "uuid@npm:3.3.2" bin: - uvu: bin.js - checksum: 09460a37975627de9fcad396e5078fb844d01aaf64a6399ebfcfd9e55f1c2037539b47611e8631f89be07656962af0cf48c334993db82b9ae9c3d25ce3862168 + uuid: ./bin/uuid + checksum: 8793629d2799f500aeea9fcd0aec6c4e9fbcc4d62ed42159ad96be345c3fffac1bbf61a23e18e2782600884fee05e6d4012ce4b70d0037c8e987533ae6a77870 languageName: node linkType: hard @@ -14861,61 +10013,34 @@ __metadata: languageName: node linkType: hard -"vary@npm:~1.1.2": - version: 1.1.2 - resolution: "vary@npm:1.1.2" - checksum: ae0123222c6df65b437669d63dfa8c36cee20a504101b2fcd97b8bf76f91259c17f9f2b4d70a1e3c6bbcee7f51b28392833adb6b2770b23b01abec84e369660b - languageName: node - linkType: hard - -"vercel@npm:~28.15.1": - version: 28.15.7 - resolution: "vercel@npm:28.15.7" +"vercel@npm:~32.4.1": + version: 32.4.1 + resolution: "vercel@npm:32.4.1" dependencies: - "@vercel/build-utils": 6.2.4 - "@vercel/go": 2.3.6 - "@vercel/hydrogen": 0.0.52 - "@vercel/next": 3.4.6 - "@vercel/node": 2.9.5 - "@vercel/python": 3.1.48 - "@vercel/redwood": 1.1.4 - "@vercel/remix": 1.3.2 - "@vercel/ruby": 1.3.64 - "@vercel/static-build": 1.3.8 + "@vercel/build-utils": 7.2.2 + "@vercel/fun": 1.1.0 + "@vercel/go": 3.0.3 + "@vercel/hydrogen": 1.0.1 + "@vercel/next": 4.0.10 + "@vercel/node": 3.0.7 + "@vercel/python": 4.0.2 + "@vercel/redwood": 2.0.4 + "@vercel/remix-builder": 2.0.9 + "@vercel/ruby": 2.0.2 + "@vercel/static-build": 2.0.8 + chokidar: 3.3.1 bin: vc: dist/index.js vercel: dist/index.js - checksum: b6bf65bd989ec3ab4e9414fb3cad36da72b82008c6cb09f43af1327d8e728de8d15adabebc6b461ba4cd38aa4996d53ce1d7ee613a66937fe984e3e85472d1ce - languageName: node - linkType: hard - -"vfile-message@npm:^3.0.0": - version: 3.1.4 - resolution: "vfile-message@npm:3.1.4" - dependencies: - "@types/unist": ^2.0.0 - unist-util-stringify-position: ^3.0.0 - checksum: d0ee7da1973ad76513c274e7912adbed4d08d180eaa34e6bd40bc82459f4b7bc50fcaff41556135e3339995575eac5f6f709aba9332b80f775618ea4880a1367 - languageName: node - linkType: hard - -"vfile@npm:^5.0.0": - version: 5.3.7 - resolution: "vfile@npm:5.3.7" - dependencies: - "@types/unist": ^2.0.0 - is-buffer: ^2.0.0 - unist-util-stringify-position: ^3.0.0 - vfile-message: ^3.0.0 - checksum: 642cce703afc186dbe7cabf698dc954c70146e853491086f5da39e1ce850676fc96b169fcf7898aa3ff245e9313aeec40da93acd1e1fcc0c146dc4f6308b4ef9 + checksum: cbee9a1633e0a62c92e602d358439a48c31ea81ac2232ced25ae4166bc5f4f9a257ab5d085600401310daac3b45e93698431be8cc6cb10a8fc4db560dc28c542 languageName: node linkType: hard -"viem@npm:^1.0.0": - version: 1.19.1 - resolution: "viem@npm:1.19.1" +"viem@npm:1.19.9": + version: 1.19.9 + resolution: "viem@npm:1.19.9" dependencies: - "@adraffy/ens-normalize": 1.9.4 + "@adraffy/ens-normalize": 1.10.0 "@noble/curves": 1.2.0 "@noble/hashes": 1.3.2 "@scure/bip32": 1.3.2 @@ -14928,13 +10053,13 @@ __metadata: peerDependenciesMeta: typescript: optional: true - checksum: 5ebb8d26894f4fc1f95c2510389827da19623b2b1f150ce95cb80680ee6e28aa9cb16f3e1a00662a0b81f8de301075e2349bbd14bac2ab90c55c5694092a38b0 + checksum: a18633f42f8075b16819b6914f5236c726875407e8e3741b1434af48193ac5a7c12cbe1e1522b0e13df7af4dd4c5daeea2371a21f9338f27c271700a7f6d1595 languageName: node linkType: hard -"viem@npm:^1.19.11": - version: 1.19.11 - resolution: "viem@npm:1.19.11" +"viem@npm:^1.0.0, viem@npm:^1.6.0": + version: 1.21.4 + resolution: "viem@npm:1.21.4" dependencies: "@adraffy/ens-normalize": 1.10.0 "@noble/curves": 1.2.0 @@ -14949,88 +10074,18 @@ __metadata: peerDependenciesMeta: typescript: optional: true - checksum: 33a26f361bb2597fe0b02dc98382eb66b83473c3a9765833969a45ac7b4017fa62d7ddc42f9d4d0f3473bec7096eb081651851473b4d0ff4ab56f71a2f6378a2 - languageName: node - linkType: hard - -"vite-node@npm:^0.28.5": - version: 0.28.5 - resolution: "vite-node@npm:0.28.5" - dependencies: - cac: ^6.7.14 - debug: ^4.3.4 - mlly: ^1.1.0 - pathe: ^1.1.0 - picocolors: ^1.0.0 - source-map: ^0.6.1 - source-map-support: ^0.5.21 - vite: ^3.0.0 || ^4.0.0 - bin: - vite-node: vite-node.mjs - checksum: b3813b784f551613e561bf85e64ceb8e869d760d34f135dc3351b093618c6fc3c64f23839ac530ddc49724beb83c3f70ee6392e62676c78141ed04c7ab1e0aa0 - languageName: node - linkType: hard - -"vite@npm:^3.0.0 || ^4.0.0, vite@npm:^4.1.4": - version: 4.5.0 - resolution: "vite@npm:4.5.0" - dependencies: - esbuild: ^0.18.10 - fsevents: ~2.3.2 - postcss: ^8.4.27 - rollup: ^3.27.1 - peerDependencies: - "@types/node": ">= 14" - less: "*" - lightningcss: ^1.21.0 - sass: "*" - stylus: "*" - sugarss: "*" - terser: ^5.4.0 - dependenciesMeta: - fsevents: - optional: true - peerDependenciesMeta: - "@types/node": - optional: true - less: - optional: true - lightningcss: - optional: true - sass: - optional: true - stylus: - optional: true - sugarss: - optional: true - terser: - optional: true - bin: - vite: bin/vite.js - checksum: 06f1a4c858e4dc4c04a10466f4ccacea30c5a9f8574e5ba3deb9d03fa20e80ca6797f02dad97a988da7cdef96238dbc69c3b6a538156585c74722d996223619e - languageName: node - linkType: hard - -"vm2@npm:^3.9.17": - version: 3.9.19 - resolution: "vm2@npm:3.9.19" - dependencies: - acorn: ^8.7.0 - acorn-walk: ^8.2.0 - bin: - vm2: bin/vm2 - checksum: fc6cf553134145cd7bb5246985bf242b056e3fb5ea71e2eef6710b2a5d6c6119cc6bc960435ff62480ee82efb43369be8f4db07b6690916ae7d3b2e714f395d8 + checksum: c351fdea2d53d2d781ac73c964348b3b9fc5dd46f9eb53903e867705fc9e30a893cb9f2c8d7a00acdcdeca27d14eeebf976eed9f948c28c47018dc9211369117 languageName: node linkType: hard -"wagmi@npm:1.4.4": - version: 1.4.4 - resolution: "wagmi@npm:1.4.4" +"wagmi@npm:1.4.12": + version: 1.4.12 + resolution: "wagmi@npm:1.4.12" dependencies: "@tanstack/query-sync-storage-persister": ^4.27.1 "@tanstack/react-query": ^4.28.0 "@tanstack/react-query-persist-client": ^4.28.0 - "@wagmi/core": 1.4.4 + "@wagmi/core": 1.4.12 abitype: 0.8.7 use-sync-external-store: ^1.2.0 peerDependencies: @@ -15040,16 +10095,17 @@ __metadata: peerDependenciesMeta: typescript: optional: true - checksum: 4cf7ce978400d21e27d25871a4c8bc6b05fabd61d6d3d6e705c120a1c1dd4ba260d6ddfb2bb28b5e18591ba825c89839d0f3c874c55dfa255a9cde96d0785202 + checksum: 7c1cb64c53e29899d508142e43a450b07f7f4f0ac2a19f5651f0f3dbfe2bb5b159d2b6251f6f613bd9bae007dc8390383ff79f5ab7bdf8d06788fe0bbdb3f8ab languageName: node linkType: hard -"wcwidth@npm:^1.0.1": - version: 1.0.1 - resolution: "wcwidth@npm:1.0.1" +"watchpack@npm:2.4.0": + version: 2.4.0 + resolution: "watchpack@npm:2.4.0" dependencies: - defaults: ^1.0.3 - checksum: 814e9d1ddcc9798f7377ffa448a5a3892232b9275ebb30a41b529607691c0491de47cba426e917a4d08ded3ee7e9ba2f3fe32e62ee3cd9c7d3bafb7754bd553c + glob-to-regexp: ^0.4.1 + graceful-fs: ^4.1.2 + checksum: 23d4bc58634dbe13b86093e01c6a68d8096028b664ab7139d58f0c37d962d549a940e98f2f201cecdabd6f9c340338dc73ef8bf094a2249ef582f35183d1a131 languageName: node linkType: hard @@ -15129,7 +10185,7 @@ __metadata: languageName: node linkType: hard -"which-typed-array@npm:^1.1.11, which-typed-array@npm:^1.1.13, which-typed-array@npm:^1.1.2, which-typed-array@npm:^1.1.9": +"which-typed-array@npm:^1.1.11, which-typed-array@npm:^1.1.13, which-typed-array@npm:^1.1.9": version: 1.1.13 resolution: "which-typed-array@npm:1.1.13" dependencies: @@ -15173,13 +10229,6 @@ __metadata: languageName: node linkType: hard -"word-wrap@npm:~1.2.3": - version: 1.2.5 - resolution: "word-wrap@npm:1.2.5" - checksum: f93ba3586fc181f94afdaff3a6fef27920b4b6d9eaefed0f428f8e07adea2a7f54a5f2830ce59406c8416f033f86902b91eb824072354645eea687dff3691ccb - languageName: node - linkType: hard - "wrap-ansi-cjs@npm:wrap-ansi@^7.0.0, wrap-ansi@npm:^7.0.0": version: 7.0.0 resolution: "wrap-ansi@npm:7.0.0" @@ -15191,7 +10240,7 @@ __metadata: languageName: node linkType: hard -"wrap-ansi@npm:^6.0.1, wrap-ansi@npm:^6.2.0": +"wrap-ansi@npm:^6.2.0": version: 6.2.0 resolution: "wrap-ansi@npm:6.2.0" dependencies: @@ -15250,7 +10299,7 @@ __metadata: languageName: node linkType: hard -"ws@npm:^7.4.5, ws@npm:^7.5.1": +"ws@npm:^7.5.1": version: 7.5.9 resolution: "ws@npm:7.5.9" peerDependencies: @@ -15265,62 +10314,25 @@ __metadata: languageName: node linkType: hard -"ws@npm:^8.5.0": - version: 8.14.2 - resolution: "ws@npm:8.14.2" - peerDependencies: - bufferutil: ^4.0.1 - utf-8-validate: ">=5.0.2" - peerDependenciesMeta: - bufferutil: - optional: true - utf-8-validate: - optional: true - checksum: 3ca0dad26e8cc6515ff392b622a1467430814c463b3368b0258e33696b1d4bed7510bc7030f7b72838b9fdeb8dbd8839cbf808367d6aae2e1d668ce741d4308b - languageName: node - linkType: hard - -"xdm@npm:^2.0.0": - version: 2.1.0 - resolution: "xdm@npm:2.1.0" +"xdg-app-paths@npm:5.1.0": + version: 5.1.0 + resolution: "xdg-app-paths@npm:5.1.0" dependencies: - "@rollup/pluginutils": ^4.0.0 - "@types/estree-jsx": ^0.0.1 - astring: ^1.6.0 - deasync: ^0.1.0 - estree-util-build-jsx: ^2.0.0 - estree-util-is-identifier-name: ^2.0.0 - estree-walker: ^3.0.0 - got: ^11.0.0 - hast-util-to-estree: ^2.0.0 - loader-utils: ^2.0.0 - markdown-extensions: ^1.0.0 - mdast-util-mdx: ^1.0.0 - micromark-extension-mdxjs: ^1.0.0 - periscopic: ^3.0.0 - remark-parse: ^10.0.0 - remark-rehype: ^9.0.0 - source-map: ^0.7.0 - unified: ^10.0.0 - unist-util-position-from-estree: ^1.0.0 - unist-util-stringify-position: ^3.0.0 - unist-util-visit: ^4.0.0 - vfile: ^5.0.0 - dependenciesMeta: - deasync: - optional: true - checksum: 5a3f2434a5390aaebc66aa7d1a90d582de29c2256c94e542df7476cd5ffac6c160ebcb4f75a1a0593dfd8c6d0e650e1ad18f023a57262e0b3abc89c3e1f5c86e + xdg-portable: ^7.0.0 + checksum: 722917cfcd072a75b4330c4dba969cff287d624880d6a5406adabfa69bdf54be33f4a6773bf7d2d49adc5a3ddc1867a346056591869267dc485f8d3aca16480f languageName: node linkType: hard -"xregexp@npm:2.0.0": - version: 2.0.0 - resolution: "xregexp@npm:2.0.0" - checksum: de62d1f01c9f1a67c80cafe48a3dc081b324249a0e88e65dc9acae9cce6d8e63c9d91c0f97e2ad2d8c5351c856c139c04dc55ebd941e59b7d1d5c1169e164cff +"xdg-portable@npm:^7.0.0": + version: 7.3.0 + resolution: "xdg-portable@npm:7.3.0" + dependencies: + os-paths: ^4.0.1 + checksum: e228ec6486e143d58d2e151bbb5899107bddbd57f92841e52598ba9515373fc095a570d4e974b009afd9b94bd9b98d4a4e5ebac66736cc02d30d178c7182bf6b languageName: node linkType: hard -"xtend@npm:^4.0.1, xtend@npm:~4.0.1": +"xtend@npm:^4.0.1": version: 4.0.2 resolution: "xtend@npm:4.0.2" checksum: ac5dfa738b21f6e7f0dd6e65e1b3155036d68104e67e5d5d1bde74892e327d7e5636a076f625599dc394330a731861e87343ff184b0047fef1360a7ec0a5a36a @@ -15334,7 +10346,7 @@ __metadata: languageName: node linkType: hard -"yallist@npm:^3.0.2": +"yallist@npm:^3.0.0, yallist@npm:^3.1.1": version: 3.1.1 resolution: "yallist@npm:3.1.1" checksum: 48f7bb00dc19fc635a13a39fe547f527b10c9290e7b3e836b9a8f1ca04d4d342e85714416b3c2ab74949c9c66f9cebb0473e6bc353b79035356103b47641285d @@ -15348,7 +10360,7 @@ __metadata: languageName: node linkType: hard -"yaml@npm:^2.1.1, yaml@npm:^2.2.2": +"yaml@npm:^2.2.2, yaml@npm:^2.3.4": version: 2.3.4 resolution: "yaml@npm:2.3.4" checksum: e6d1dae1c6383bcc8ba11796eef3b8c02d5082911c6723efeeb5ba50fc8e881df18d645e64de68e421b577296000bea9c75d6d9097c2f6699da3ae0406c030d8 @@ -15384,6 +10396,35 @@ __metadata: languageName: node linkType: hard +"yauzl-clone@npm:^1.0.4": + version: 1.0.4 + resolution: "yauzl-clone@npm:1.0.4" + dependencies: + events-intercept: ^2.0.0 + checksum: 380342495e72ad1d5c32f38e1457eee141ede22027de22528509c0dd7b9be280cf768f716982045bfa08b7d685bef1209441f28c12eb379b4a7e0475ef68d68f + languageName: node + linkType: hard + +"yauzl-promise@npm:2.1.3": + version: 2.1.3 + resolution: "yauzl-promise@npm:2.1.3" + dependencies: + yauzl: ^2.9.1 + yauzl-clone: ^1.0.4 + checksum: 757c46afc0ab92d0dcf338518112323d7a6cb8f2c1b45f8abf503122d663276ade951683b0b9558408adca00df7d3a63018f7fa76dac5b9b400a3153834d67ec + languageName: node + linkType: hard + +"yauzl@npm:^2.9.1": + version: 2.10.0 + resolution: "yauzl@npm:2.10.0" + dependencies: + buffer-crc32: ~0.2.3 + fd-slicer: ~1.1.0 + checksum: 7f21fe0bbad6e2cb130044a5d1d0d5a0e5bf3d8d4f8c4e6ee12163ce798fee3de7388d22a7a0907f563ac5f9d40f8699a223d3d5c1718da90b0156da6904022b + languageName: node + linkType: hard + "yn@npm:3.1.1": version: 3.1.1 resolution: "yn@npm:3.1.1" @@ -15398,21 +10439,14 @@ __metadata: languageName: node linkType: hard -"zod@npm:^3.22.4": - version: 3.22.4 - resolution: "zod@npm:3.22.4" - checksum: 80bfd7f8039b24fddeb0718a2ec7c02aa9856e4838d6aa4864335a047b6b37a3273b191ef335bf0b2002e5c514ef261ffcda5a589fb084a48c336ffc4cdbab7f - languageName: node - linkType: hard - "zustand@npm:^4.3.1": - version: 4.4.6 - resolution: "zustand@npm:4.4.6" + version: 4.5.0 + resolution: "zustand@npm:4.5.0" dependencies: use-sync-external-store: 1.2.0 peerDependencies: "@types/react": ">=16.8" - immer: ">=9.0" + immer: ">=9.0.6" react: ">=16.8" peerDependenciesMeta: "@types/react": @@ -15421,7 +10455,7 @@ __metadata: optional: true react: optional: true - checksum: da7b00cc6dbe5cf5fc2e3fbca745317da4bbaf53bf4a6909bbd3e335242704df9689027f613461aff07eb5f672d5570bc1a2ef99d0ad7bc868920a3b331613d4 + checksum: 91685492ab33bb656b98e07d8fff2be1794d8e68ac5dc546ec457f4ae3d709f0c19de9e93045b9ee5d6b704f64503d9e085ffe1f600f6ade0459e572d1cf5c0d languageName: node linkType: hard @@ -15441,10 +10475,3 @@ __metadata: checksum: 13190ee8e8a797c5347b525a7c392be62b2addacdd9645dd20d37ea053f96c7c7067c099c6201e98ebb8d54991f2e04e241cc323f9a25b841d44f0ae048e3afc languageName: node linkType: hard - -"zwitch@npm:^2.0.0": - version: 2.0.4 - resolution: "zwitch@npm:2.0.4" - checksum: f22ec5fc2d5f02c423c93d35cdfa83573a3a3bd98c66b927c368ea4d0e7252a500df2a90a6b45522be536a96a73404393c958e945fdba95e6832c200791702b6 - languageName: node - linkType: hard